rowvia 0.3.4 → 0.3.5
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/dist/fields.css +1 -1
- package/dist/fields.es.js +1167 -1104
- package/dist/fields.umd.cjs +1 -1
- package/dist/rowvia.css +1 -1
- package/dist/rowvia.es.js +5835 -4705
- package/dist/rowvia.umd.cjs +71 -55
- package/dist/types/components/scrollbars.d.ts +11 -3
- package/dist/types/components/table-cell-content.d.ts +9 -0
- package/dist/types/components/table-groups.d.ts +32 -0
- package/dist/types/components/table-headers.d.ts +11 -0
- package/dist/types/components/table-inline-editor.d.ts +13 -0
- package/dist/types/components/table-popup.d.ts +3 -0
- package/dist/types/components/table-presentation.d.ts +14 -0
- package/dist/types/components/table-text-editor.d.ts +29 -0
- package/dist/types/conditions/index.d.ts +12 -0
- package/dist/types/contracts/work-item.d.ts +1 -1
- package/dist/types/fields/internal/anchored-popup.d.ts +23 -0
- package/dist/types/fields/popup.d.ts +7 -9
- package/dist/types/fields/types.d.ts +3 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/vue/DualPanePicker.d.ts +211 -0
- package/dist/types/vue/controls.d.ts +3961 -0
- package/dist/types/vue/index.d.ts +6 -0
- package/dist/types/vue/registry.d.ts +10 -0
- package/dist/types/vue-conditions/ConditionGroup.d.ts +120 -0
- package/dist/types/vue-conditions/ConditionRow.d.ts +94 -0
- package/dist/types/vue-conditions/ConditionValue.d.ts +56 -0
- package/dist/types/vue-conditions/controls.d.ts +12 -0
- package/dist/types/vue-conditions/index.d.ts +6 -0
- package/dist/types/work-items/index.d.ts +13 -1
- package/dist/types/work-items/tool-field-picker.d.ts +14 -0
- package/dist/types/work-items/tool-filter.d.ts +14 -0
- package/dist/types/work-items/tool-icons.d.ts +1 -0
- package/dist/types/work-items/tool-panel.d.ts +17 -0
- package/dist/types/work-items/tool-state.d.ts +21 -0
- package/dist/types/work-items/toolbar.d.ts +10 -2
- package/dist/types/work-items/views/rule-panels.d.ts +2 -0
- package/dist/types/work-items/workflow-detail-types.d.ts +16 -0
- package/dist/types/work-items/workflow-field-popups.d.ts +4 -0
- package/dist/types/work-items/workflow-legend.d.ts +16 -0
- package/dist/types/work-items/workflow-presentation.d.ts +3 -0
- package/dist/vue.css +1 -0
- package/dist/vue.es.js +631 -0
- package/dist/vue.umd.cjs +1 -0
- package/package.json +26 -7
package/dist/rowvia.umd.cjs
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
(function(
|
|
2
|
-
`||n==="\r"){t++;continue}if(n==='"'||n==="'"){const o=n;let a="";for(t++;t<s.length&&s[t]!==o;)a+=s[t++];t++,e.push({type:"string",value:a});continue}if(/[0-9]/.test(n)||n==="."&&/[0-9]/.test(s[t+1]||"")){let o="";for(;t<s.length&&/[0-9.]/.test(s[t]);)o+=s[t++];if(s[t]==="e"||s[t]==="E")for(o+=s[t++],(s[t]==="+"||s[t]==="-")&&(o+=s[t++]);t<s.length&&/[0-9]/.test(s[t]);)o+=s[t++];e.push({type:"number",value:o});continue}if(/[A-Za-z_$]/.test(n)){let o="";for(;t<s.length&&/[A-Za-z0-9_$.]/.test(s[t]);)o+=s[t++];Cs.test(o)?e.push({type:"cell",value:o.toUpperCase().replace(/\$/g,"")}):e.push({type:"ident",value:o});continue}if(n==="("){e.push({type:"lparen",value:n}),t++;continue}if(n===")"){e.push({type:"rparen",value:n}),t++;continue}if(n===","||n===";"){e.push({type:"comma",value:","}),t++;continue}const i=s.slice(t,t+2);if(["<=",">=","<>"].includes(i)){e.push({type:"op",value:i}),t+=2;continue}if("+-*/^%&=<>,:".includes(n)){e.push({type:"op",value:n}),t++;continue}throw new Ge("#NAME?")}return e}const Pn={"&":1,"=":2,"<>":2,"<":2,"<=":2,">":2,">=":2,"+":4,"-":4,"*":5,"/":5,"%":6,"^":7};function Hn(s){let e=0;const t=()=>s[e],n=()=>s[e++];function i(r=0){let d=o();for(;t()&&t().type==="op"&&Pn[t().value]>=r;){const c=n().value,p=i(Pn[c]+1);d={type:"binary",operator:c,left:d,right:p}}return d}function o(){const r=t();if(r&&r.type==="op"&&(r.value==="-"||r.value==="+")){n();const d=o();return r.value==="-"?{type:"unary",operator:"-",operand:d}:d}return a()}function a(){const r=n();if(!r)throw new Ge("#ERROR!");if(r.type==="number")return{type:"number",value:Number(r.value)};if(r.type==="string")return{type:"string",value:r.value};if(r.type==="cell")return{type:"cell",value:r.value};if(r.type==="ident"){const d=r.value.toUpperCase();if(d==="TRUE")return{type:"boolean",value:!0};if(d==="FALSE")return{type:"boolean",value:!1};const c=t();if(c&&c.type==="lparen"){n();const p=[];if(t()&&t().type!=="rparen")for(p.push(i());t()&&t().type==="comma";)n(),p.push(i());if(!t()||t().type!=="rparen")throw new Ge("#ERROR!");return n(),{type:"call",name:d,args:p}}return{type:"ref",value:r.value}}if(r.type==="lparen"){const d=i();if(!t()||t().type!=="rparen")throw new Ge("#ERROR!");return n(),d}throw new Ge("#ERROR!")}const l=i();if(e<s.length)throw new Ge("#ERROR!");return l}function ye(s){if(s==null||s==="")return 0;if(typeof s=="number")return s;if(typeof s=="boolean")return s?1:0;if(s instanceof Date)return s.getTime();const e=Number(s);return isNaN(e)?0:e}function ct(s){const e=[];for(const t of s)if(Array.isArray(t))e.push(...ct(t));else if(t!=null&&t!==""){const n=typeof t=="number"?t:Number(t);isNaN(n)||e.push(n)}return e}const Dt={SUM:s=>ct(s).reduce((e,t)=>e+t,0),AVERAGE:s=>{const e=ct(s);return e.length?e.reduce((t,n)=>t+n,0)/e.length:0},AVG:s=>Dt.AVERAGE(s,{}),MIN:s=>{const e=ct(s);return e.length?Math.min(...e):0},MAX:s=>{const e=ct(s);return e.length?Math.max(...e):0},COUNT:s=>ct(s).length,COUNTA:s=>s.filter(e=>e!=null&&e!=="").length,ABS:s=>Math.abs(ye(s[0])),ROUND:s=>{const e=s.length>1?ye(s[1]):0,t=Math.pow(10,e);return Math.round(ye(s[0])*t)/t},FLOOR:s=>Math.floor(ye(s[0])),CEIL:s=>Math.ceil(ye(s[0])),CEILING:s=>Math.ceil(ye(s[0])),SQRT:s=>{const e=ye(s[0]);return e<0?(()=>{throw new Ge("#NUM!")})():Math.sqrt(e)},POWER:s=>Math.pow(ye(s[0]),ye(s[1])),POW:s=>Math.pow(ye(s[0]),ye(s[1])),MOD:s=>{const e=ye(s[1]);if(e===0)throw new Ge("#DIV/0!");return ye(s[0])%e},CONCAT:s=>s.map(e=>e==null?"":String(e)).join(""),CONCATENATE:s=>s.map(e=>e==null?"":String(e)).join(""),UPPER:s=>String(s[0]??"").toUpperCase(),LOWER:s=>String(s[0]??"").toLowerCase(),LEN:s=>String(s[0]??"").length,LEFT:s=>String(s[0]??"").slice(0,s.length>1?ye(s[1]):1),RIGHT:s=>{const e=String(s[0]??""),t=s.length>1?ye(s[1]):1;return t<=0?"":e.slice(-t)},MID:s=>{const e=String(s[0]??""),t=Math.max(0,ye(s[1])-1),n=s.length>2?ye(s[2]):e.length-t;return e.slice(t,t+n)},TRIM:s=>String(s[0]??"").trim(),IF:s=>s[0]?s[1]??!0:s[2]??!1,IFS:s=>{for(let e=0;e<s.length-1;e+=2)if(s[e])return s[e+1];return s.length%2===1?s[s.length-1]:!1},AND:s=>s.every(e=>!!e),OR:s=>s.some(e=>!!e),NOT:s=>!s[0],IFERROR:s=>{try{return s[0]===null||s[0]===void 0?s[1]:s[0]}catch{return s[1]}},ISNUMBER:s=>typeof s[0]=="number"||s[0]!==null&&s[0]!==""&&!isNaN(Number(s[0])),ISBLANK:s=>s[0]===null||s[0]===void 0||s[0]==="",ISTEXT:s=>typeof s[0]=="string",PI:()=>Math.PI,RAND:()=>Math.random(),TODAY:()=>new Date().toISOString().slice(0,10),NOW:()=>new Date().toISOString(),YEAR:s=>new Date(s[0]).getFullYear(),MONTH:s=>new Date(s[0]).getMonth()+1,DAY:s=>new Date(s[0]).getDate(),TEXT:s=>String(s[0]??""),VALUE:s=>ye(s[0]),NUMBER:s=>ye(s[0]),BETWEEN:s=>ye(s[0])>=ye(s[1])&&ye(s[0])<=ye(s[2])},Pt=Object.keys(Dt);function Ss(s,e){Dt[s.toUpperCase()]=e,Pt.includes(s.toUpperCase())||Pt.push(s.toUpperCase())}function Es(s,e){const t=/^([A-Za-z]{1,3})(\d+)$/.exec(s);if(t&&e.a1Lookup)return e.a1Lookup(t[1].toUpperCase(),Number(t[2]))}function xs(s,e){const t=e.data||{};if(s in t)return t[s];const n=s.toLowerCase();for(const i of Object.keys(t))if(i.toLowerCase()===n)return t[i]}function Et(s,e){switch(s.type){case"number":return s.value;case"string":return s.value;case"boolean":return s.value;case"ref":return xs(s.value,e);case"cell":return Es(s.value,e);case"unary":return-ye(Et(s.operand,e));case"call":{const t=Dt[s.name];if(!t)throw new Ge("#NAME?");const n=s.args.map(i=>Et(i,e));return t(n,e)}case"binary":{const t=Et(s.left,e),n=Et(s.right,e);switch(s.operator){case"+":return typeof t=="string"||typeof n=="string"?`${t??""}${n??""}`:ye(t)+ye(n);case"-":return ye(t)-ye(n);case"*":return ye(t)*ye(n);case"/":{const i=ye(n);if(i===0)throw new Ge("#DIV/0!");return ye(t)/i}case"^":return Math.pow(ye(t),ye(n));case"%":{const i=ye(n);if(i===0)throw new Ge("#DIV/0!");return ye(t)%i}case"&":return`${t??""}${n??""}`;case"=":return t===n;case"<>":return t!==n;case"<":return ye(t)<ye(n);case"<=":return ye(t)<=ye(n);case">":return ye(t)>ye(n);case">=":return ye(t)>=ye(n);default:throw new Ge("#ERROR!")}}default:throw new Ge("#ERROR!")}}function xt(s,e={}){const t=s.startsWith("=")?s.slice(1):s,n=Hn(Dn(t));return Et(n,e)}function Zt(s){return typeof s=="string"&&s.trimStart().startsWith("=")}function Qt(s,e){if(s==null)return;if(e in s)return s[e];const t=e.split(".");let n=s;for(const i of t){if(n==null)return;n=n[i]}return n}function Ce(s,e,t){const n=s.colDef,i=(e.group||e.footer)&&!!e.groupData&&e.groupData[s.colId]!==void 0,o=i?e.groupData:e.data,a=s.valueGetter??n.valueGetter;if(a)return(typeof a=="string"?r=>Zt(a)?xt(a,{data:r.data}):Qt(r.data,a):a)({data:i?e.groupData:e.data,node:e,column:s,api:t,colDef:n,getValue:r=>Qt(i?e.groupData:e.data,r)});if(s.field&&Zt(s.field))return xt(s.field,{data:e.data});if(s.field&&s.colDef.expression&&/[+*/^-]/.test(s.field))return xt(`=${s.field}`,{data:e.data});if(s.field)return Qt(o,s.field)}function Ht(s,e,t){var o;const n=Ce(s,e,t),i=s.colDef;if(i.showValueAs&&typeof n=="number"&&t){const a=(o=t.__columnTotalCache)==null?void 0:o.get(s.colId);if(a!==void 0&&a!==0)return`${(i.showValueAs==="percentOfParent"?n/(a||1)*100:n/a*100).toFixed(1)}%`}return i.valueFormatter?(typeof i.valueFormatter=="string"?l=>ks(l.colDef.valueFormatter,l.value,l):i.valueFormatter)({value:n,data:e.data,node:e,column:s,api:t,colDef:i}):Ms(s,n)}function ks(s,e,t={}){var n,i,o;if(e==null)return"";switch(s){case"number":return Ue(e,((n=t.column)==null?void 0:n.decimals)??0);case"currency":return`$${Ue(e,((i=t.column)==null?void 0:i.decimals)??2)}`;case"percent":return`${Ue(e,((o=t.column)==null?void 0:o.decimals)??2)}%`;case"date":return On(e);case"boolean":return e?"✓":"✗";default:return String(e)}}function On(s){const e=s instanceof Date?s:new Date(s);return isNaN(e.getTime())?String(s):`${e.getDate()} ${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][e.getMonth()]} ${e.getFullYear()}`}function Ms(s,e){if(e==null)return"";const t=s.type;return t==="numberColumn"&&typeof e=="number"&&!isNaN(e)?Ue(e,s.decimals):t==="dateColumn"||t==="dateStringColumn"?On(e):t==="booleanColumn"?e?"✓":"✗":String(e)}function Bn(s,e){return s.colDef.valueParser?(typeof s.colDef.valueParser=="string"?n=>Vn(n.colDef.valueParser,n.newValue):s.colDef.valueParser)({newValue:e,oldValue:e,data:null,node:null,column:s,colDef:s.colDef,api:null}):Vn(s.type,e)}function Vn(s,e){if(s==="numberColumn")return Xt(e);if(s==="dateColumn"){if(e instanceof Date)return e;const t=new Date(e);return isNaN(t.getTime())?e:t}return s==="booleanColumn"?e===!0||e==="true":e}function Gn(s){const t=s.colDef.comparator,n=s.type;return(i,o)=>{const a=Ce(s,i,null),l=Ce(s,o,null);if(t)return t(a,l,i,o);if(n==="numberColumn"){const r=typeof a=="number"?a:Xt(a),d=typeof l=="number"?l:Xt(l);return r!==null&&d!==null?r-d:r===null&&d===null?0:r===null?-1:1}if(n==="dateColumn"){const r=a instanceof Date?a.getTime():new Date(a).getTime(),d=l instanceof Date?l.getTime():new Date(l).getTime();if(!isNaN(r)&&!isNaN(d))return r-d}return ys(a,l)}}function kt(s,e,t){if(!e)return null;if(typeof e=="function")return e({values:t,column:s,rowNode:null,data:null});const n=t.filter(i=>typeof i=="number"&&!isNaN(i));switch(e){case"sum":return n.reduce((i,o)=>i+o,0);case"count":return t.length;case"avg":return n.length?n.reduce((i,o)=>i+o,0)/n.length:null;case"min":return n.length?Math.min(...n):null;case"max":return n.length?Math.max(...n):null;case"first":return t.length?t[0]:null;case"last":return t.length?t[t.length-1]:null;default:return null}}function Rs(s){const e={onInteraction:s.onInteraction,setRowData:n=>s.setRowData(n),applyTransaction:n=>s.applyTransaction(n),getRowNode:n=>s.getRowNode(n),getDisplayedRowCount:()=>s.getDisplayedRowCount(),getDisplayedRowAtIndex:n=>s.getDisplayedRowAtIndex(n),getFirstDisplayedRow:()=>s.getDisplayedRowAtIndex(0),getLastDisplayedRow:()=>s.getDisplayedRowAtIndex(s.getDisplayedRowCount()-1),forEachNode:n=>{const i=s.getRowModel();for(let o=0;o<i.getRowCount();o++){const a=i.getRow(o);a&&n(a,o)}},forEachLeafNode:n=>{s.getRowModel().forEachLeafNode(n)},getModel:()=>s.getRowModel(),getValue:(n,i)=>{const o=typeof n=="string"?s.getColumn(n):n;if(!(!o||!i))return Ce(o,i,s.getApi())},getSelectedRows:()=>s.getSelectionService().getSelectedRows(),getSelectedNodes:()=>s.getSelectionService().getSelectedNodes(),selectAll:()=>s.getSelectionService().selectAll(),deselectAll:()=>s.getSelectionService().deselectAll(),selectAllFiltered:()=>s.getSelectionService().selectAllFiltered(),deselectAllFiltered:()=>s.getSelectionService().deselectAll(),selectNode:(n,i)=>s.getSelectionService().selectNode(n,i??!1),deselectNode:n=>s.getSelectionService().deselectNode(n),setQuickFilter:n=>s.setQuickFilter(n),isQuickFilterPresent:()=>s.getQuickFilter().length>0,resetQuickFilter:()=>s.setQuickFilter(""),getSortModel:()=>s.getSortService().getSortModel(),setSortModel:n=>s.getSortService().setSortModel(n),getFilterModel:()=>s.getFilterService().getFilterModel(),setFilterModel:n=>s.getFilterService().setFilterModel(n),getColumnFilterModel:n=>{const i=typeof n=="string"?n:n.colId;return s.getFilterService().getFilterInstance(i)??null},setColumnFilterModel:(n,i)=>s.getFilterService().setColumnFilterModel(n,i),getAdvancedFilterModel:()=>s.getFilterService().getAdvancedFilterModel(),setAdvancedFilterModel:n=>s.getFilterService().setAdvancedFilterModel(n),onFilterChanged:()=>s.getFilterService().onFilterChanged("api"),onSortChanged:()=>s.getSortService().onSortChanged("api"),expandAll:()=>s.getRowModel().expandAll(),collapseAll:()=>s.getRowModel().collapseAll(),onGroupExpandedOrCollapsed:()=>s.refreshModel("expand"),getRowGroupColumns:()=>s.getColumnModel().getRowGroupColumns(),setRowNodePinned:(n,i)=>s.setRowNodePinned(n,i),getColumnDefs:()=>s.getColumnModel().getColumnDefs(),setColumnDefs:(n,i)=>{s.getColumnModel().setColumnDefs(n),s.onGridSizeChanged()},updateGridOptions:n=>s.updateGridOptions(n),setGridOption:(n,i)=>s.updateGridOptions({[n]:i}),sizeColumnsToFit:()=>{const n=s.getSideBarService().isVisible()?s.getSideBarService().getElement().offsetWidth:0;s.getColumnModel().sizeColumnsToFit(s.getGridDiv().clientWidth-n),s.getHeaderView().updateIndicators(),s.getRowRenderer().redrawAllRows()},autoSizeAllColumns:()=>{s.getColumnModel().autoSizeAllColumns(),s.getHeaderView().updateIndicators(),s.getRowRenderer().redrawAllRows()},autoSizeColumns:n=>{s.getColumnModel().autoSizeAllColumns()},moveColumn:(n,i)=>s.getColumnModel().moveColumn(n,i),moveColumnByIndex:(n,i)=>s.getColumnModel().moveColumnByIndex(n,i),setColumnVisible:(n,i)=>s.getColumnApi().setColumnVisible(n,i),setColumnsPinned:(n,i)=>s.getColumnApi().setColumnsPinned(n,i),setColumnsVisible:(n,i)=>s.getColumnApi().setColumnsVisible(n,i),getAllColumns:()=>s.getAllColumns(),getColumns:()=>[...s.getColumns().left,...s.getColumns().center,...s.getColumns().right],getColumn:n=>s.getColumn(n)??null,getDisplayedLeftColumns:()=>s.getColumns().left,getDisplayedCenterColumns:()=>s.getColumns().center,getDisplayedRightColumns:()=>s.getColumns().right,getColumnState:()=>s.getColumnApi().getColumnState(),applyColumnState:(n,i)=>s.getColumnApi().applyColumnState(n,i),resetColumnState:()=>s.getColumnApi().resetColumnState(),openColumnMenu:n=>{const i=typeof n=="string"?s.getColumn(n):n;i!=null&&i.eHeaderCell&&s.getHeaderView().getHeaderCell(i)},setSideBarVisible:n=>{s.getSideBarService().setVisible(n),s.onGridSizeChanged()},isSideBarVisible:()=>s.getSideBarService().isVisible(),setSideBarPosition:n=>{s.getSideBarService().setPosition(n),s.onGridSizeChanged()},openToolPanel:n=>{s.getSideBarService().setVisible(!0),s.getSideBarService().openPanel(n),s.onGridSizeChanged()},closeToolPanel:()=>{s.getSideBarService().setVisible(!1),s.onGridSizeChanged()},getToolPanel:()=>s.getSideBarService().getActivePanel(),setStatusBarVisible:n=>s.getSideBarService()&&s.getOptions(),getSideBar:()=>s.getSideBarService(),getStatusPanel:()=>null,paginationIsLastPageFound:()=>{var n;return((n=s.getPaginationService())==null?void 0:n.isLastPageFound())??!0},paginationGetPageSize:()=>{var n;return((n=s.getPaginationService())==null?void 0:n.getPageSize())??0},paginationGetCurrentPage:()=>{var n;return((n=s.getPaginationService())==null?void 0:n.getCurrentPage())??0},paginationGetTotalPages:()=>{var n;return((n=s.getPaginationService())==null?void 0:n.getTotalPages())??1},paginationGetRowCount:()=>s.getDisplayedRowCount(),paginationGoToPage:n=>{var i;return(i=s.getPaginationService())==null?void 0:i.goToPage(n)},paginationGoToNextPage:()=>{var n;return(n=s.getPaginationService())==null?void 0:n.goToNextPage()},paginationGoToPreviousPage:()=>{var n;return(n=s.getPaginationService())==null?void 0:n.goToPreviousPage()},paginationGoToFirstPage:()=>{var n;return(n=s.getPaginationService())==null?void 0:n.goToFirstPage()},paginationGoToLastPage:()=>{var n;return(n=s.getPaginationService())==null?void 0:n.goToLastPage()},paginationSetPageSize:n=>{var i;return(i=s.getPaginationService())==null?void 0:i.setPageSize(n)},startEditingCell:n=>s.getEditService().startEditingCell(n),stopEditing:n=>s.getEditService().stopEditing(n),getEditingCells:()=>s.getEditService().getEditingCells(),setFocusedCell:(n,i)=>{const o=typeof i=="string"?s.getColumn(i):i;o&&s.getEditService().setFocusedCell(n,o)},getFocusedCell:()=>{const n=s.getEditService().getFocusedCell();return n?{rowIndex:n.rowIndex,column:n.column,rowNode:n.rowNode}:null},clearFocusedCell:()=>s.getEditService().clearFocusedCell(),tabToNextCell:()=>s.getEditService().tabToNextCell(),tabToPreviousCell:()=>s.getEditService().tabToPreviousCell(),refreshCells:n=>s.getRowRenderer().refreshCells(n),redrawRows:n=>s.getRowRenderer().redrawRows(n),flashCells:n=>s.getRowRenderer().flashCells(n||{}),ensureIndexVisible:(n,i)=>s.getRowRenderer().ensureIndexVisible(n,i),ensureNodeVisible:n=>{let i=-1;s.getRowModel().forEachNode((o,a)=>{o.id===n.id&&(i=a)}),i>=0&&s.getRowRenderer().ensureIndexVisible(i)},ensureColumnVisible:n=>{const i=typeof n=="string"?s.getColumn(n):n;i&&s.getRowRenderer().ensureColumnVisible(i)},copyToClipboard:n=>s.getExportService().copyToClipboard(n),cutToClipboard:n=>s.getExportService().cutToClipboard(n),pasteFromClipboard:()=>s.getExportService().pasteFromClipboard(),exportToCsv:n=>s.getExportService().exportToCsv(n||{}),exportToExcel:n=>s.getExportService().exportToExcel(n||{}),exportToPdf:n=>s.getExportService().exportToPdf(n||{}),importExcel:(n,i)=>s.getExportService().importExcel(n,i||{}),getDataAsPdf:n=>s.getExportService().getDataAsPdf(n||{}),getDataAsCsv:n=>s.getExportService().getDataAsCsv(n||{}),getDataAsExcel:n=>s.getExportService().getDataAsExcel(n||{}),getChartData:n=>s.getChartService().getChartData(n||{}),getChartModels:()=>s.getChartService().getChartModels(),createChart:()=>s.getChartService().createChart(),getCellRanges:()=>s.getRangeSelectionService().getRanges(),clearRangeSelection:()=>s.getRangeSelectionService().clearRanges(),addCellRange:n=>{const i=s.getRangeSelectionService();i.ranges=[n],i.applyHighlight(),i.updateOverlay()},onRangeSelectionChanged:()=>{},getRangeSelections:()=>s.getRangeSelectionService().getRanges(),showLoadingOverlay:()=>s.getOverlayService().showLoadingOverlay(),showNoRowsOverlay:()=>s.getOverlayService().showNoRowsOverlay(),hideOverlay:()=>s.getOverlayService().hideOverlay(),setServerSideDatasource:n=>{const i=s.getServerSideRowModel();i&&i.setDatasource(n)},setDatasource:n=>{var o;const i=s.getInfiniteRowModel();i?i.setDatasource(n):(o=s.getServerSideRowModel())==null||o.setDatasource(n)},setViewportDatasource:n=>{var i;(i=s.getViewportRowModel())==null||i.setViewportDatasource(n)},setViewportRange:(n,i)=>{var o;(o=s.getViewportRowModel())==null||o.setViewportRange(n,i)},refreshServerSide:n=>{const i=s.getServerSideRowModel();i&&(n!=null&&n.purge?i.purgeCache():i.onSortOrFilterChanged())},purgeServerSideCache:()=>{var n,i;(n=s.getServerSideRowModel())==null||n.purgeCache(),(i=s.getInfiniteRowModel())==null||i.onSortOrFilterChanged()},getServerSideStoreState:()=>{const n=s.getServerSideRowModel();if(!n)return[];const i=[];for(const[o,a]of n.stores)i.push({groupPath:o,rowCount:a.rows.length,lastRow:a.lastRow,loading:a.loading});return i},setRowCount:(n,i)=>{const o=s.getServerSideRowModel();if(!o)return;const a=o.getStore("");if(a)for(a.lastRow=i?n:null;a.rows.length<n;)a.rows.push(null);o.refreshModel("everything")},isServerSideStoreLoading:()=>s.isRemoteLoading(),undoCellEditing:()=>s.getUndoRedoService().undo(),redoCellEditing:()=>s.getUndoRedoService().redo(),canUndo:()=>s.getUndoRedoService().canUndo(),canRedo:()=>s.getUndoRedoService().canRedo(),getUndoRedoStackSize:()=>({undo:s.getUndoRedoService().getUndoStackSize(),redo:s.getUndoRedoService().getRedoStackSize()}),startBatchEdit:()=>s.getUndoRedoService().startBatchEdit(),endBatchEdit:n=>s.getUndoRedoService().endBatchEdit(n),cancelBatchEdit:()=>s.getUndoRedoService().endBatchEdit(!0),isBatchEditing:()=>s.getUndoRedoService().isBatchEditing(),getState:()=>{const n=s.getColumnApi(),i=s.getSelectionService(),o=s.getPaginationService();return{columns:n.getColumnState(),sort:s.getSortService().getSortModel(),filter:JSON.parse(JSON.stringify(s.getFilterService().getFilterModel())),quickFilter:s.getQuickFilter(),selectedRowIds:i.getSelectedNodes().map(a=>a.id),pagination:o!=null&&o.isEnabled()?{page:o.getCurrentPage(),pageSize:o.getPageSize()}:null,rowGroupColumns:s.getColumnModel().getRowGroupColumns().map(a=>a.colId),pivotMode:s.getColumnModel().isPivotMode()}},setState:n=>{if(!n)return;const i=s.getColumnApi();if(n.columns&&i.applyColumnState(n.columns,!0),n.sort&&s.getSortService().setSortModel(n.sort),n.filter&&s.getFilterService().setFilterModel(n.filter),n.quickFilter!==void 0&&s.setQuickFilter(n.quickFilter),n.rowGroupColumns&&s.getColumnModel().setRowGroupColumns(n.rowGroupColumns),n.pivotMode!==void 0&&s.getColumnModel().setPivotMode(n.pivotMode),n.selectedRowIds){s.getSelectionService().deselectAll();for(const a of n.selectedRowIds){const l=s.getRowNode(a);l&&s.getSelectionService().selectNode(l,!1)}}const o=s.getPaginationService();o&&n.pagination&&(o.setPageSize(n.pagination.pageSize),o.goToPage(n.pagination.page))},setNote:(n,i,o)=>{const a=typeof i=="string"?i:i.colId;s.getNotesService().setNote(n.id,a,o)},getNote:(n,i)=>{const o=typeof i=="string"?i:i.colId,a=s.getColumn(o);return s.getNotesService().getNote(n.id,o,a==null?void 0:a.colDef.note,{data:n.data,node:n,column:a,api:s.getApi()})},getGridId:()=>"rowvia",destroy:()=>s.destroy(),refreshClientSideRowModel:()=>s.refreshModel("everything"),setPivotMode:n=>s.getColumnModel().setPivotMode(n),isPivotMode:()=>s.getColumnModel().isPivotMode(),showColumnMenuAfterButtonClick:()=>{}};return{api:e,columnApi:{getAllColumns:()=>s.getAllColumns(),getColumn:n=>s.getColumn(n)??null,getColumnState:()=>s.getColumnModel().getColumnState(),applyColumnState:(n,i)=>{s.getColumnModel().applyColumnState(n,i),s.refreshModel("group")},resetColumnState:()=>{s.getColumnModel().resetColumnState(),s.refreshModel("group")},setColumnVisible:(n,i)=>s.getColumnModel().setColumnVisible(n,i),setColumnsVisible:(n,i)=>s.getColumnModel().setColumnsVisible(n,i),setColumnPinned:(n,i)=>s.getColumnModel().setColumnPinned(n,i),setColumnsPinned:(n,i)=>s.getColumnModel().setColumnsPinned(n,i),moveColumn:(n,i)=>s.getColumnModel().moveColumn(n,i),moveColumnByIndex:(n,i)=>s.getColumnModel().moveColumnByIndex(n,i),autoSizeColumn:n=>{s.getColumnModel().autoSizeColumn(n),s.getHeaderView().updateIndicators(),s.getRowRenderer().redrawAllRows()},autoSizeColumns:n=>{s.getColumnModel().autoSizeAllColumns(),s.getHeaderView().updateIndicators(),s.getRowRenderer().redrawAllRows()},autoSizeAllColumns:()=>e.autoSizeAllColumns(),sizeColumnsToFit:()=>e.sizeColumnsToFit(),setRowGroupColumns:(n,i)=>s.getColumnModel().setRowGroupColumns(n,i),removeRowGroupColumns:n=>{for(const i of n)s.getColumnModel().removeRowGroupColumn(i)},addRowGroupColumn:n=>s.getColumnModel().addRowGroupColumn(n),setPivotColumns:n=>s.getColumnModel().setPivotColumns(n),removePivotColumns:n=>s.getColumnModel().setPivotColumns(n.map(()=>"").filter(i=>i!=="")),setValueColumns:n=>s.getColumnModel().setValueColumns(n),removeValueColumn:n=>s.getColumnModel().setValueColumns([]),getRowGroupColumns:()=>s.getColumnModel().getRowGroupColumns(),getValueColumns:()=>s.getColumnModel().getValueColumns(),getPivotColumns:()=>s.getColumnModel().getPivotColumns(),setPivotMode:(n,i)=>s.getColumnModel().setPivotMode(n,i),isPivotMode:()=>s.getColumnModel().isPivotMode()}}}class Qe{constructor(e,t,n){y(this,"id");y(this,"__id");y(this,"data");y(this,"parent",null);y(this,"children",null);y(this,"group",!1);y(this,"key",null);y(this,"level",0);y(this,"uiLevel",0);y(this,"rowGroupIndex");y(this,"expanded",!1);y(this,"selectable",!0);y(this,"selected",!1);y(this,"rowPinned",null);y(this,"detailNode",null);y(this,"masterNode",null);y(this,"footer",!1);y(this,"groupData",null);y(this,"rowHeight",null);y(this,"allChildrenCount",null);y(this,"stub",!1);y(this,"rowIndex",null);y(this,"__displayIndex");y(this,"services");y(this,"__passesFilter",!0);y(this,"__childCount",0);y(this,"__childrenLoaded",!1);this.data=e,this.services=t,this.__id=Yt("row"),this.id=n??this.__id}get isGroup(){return this.group}get isMaster(){return this.masterNode!==null}setSelected(e,t=!1,n="api"){return e?this.services.selectNode(this,t):this.services.deselectNode(this),0}isSelected(){return this.selected}setData(e){this.data=e}setDataValue(e,t){const n=typeof e=="string"?e:e.field;if(n&&this.data){const i=n.split(".");let o=this.data;for(;i.length>1;){const a=i.shift();o[a]===void 0&&(o[a]={}),o=o[a]}o[i[0]]=t}}setExpanded(e){this.expanded!==e&&(this.expanded=e)}setPinned(e){this.rowPinned=e}}class Ls{constructor(e){y(this,"options");y(this,"eventService");y(this,"columns");y(this,"getFilterModel");y(this,"getQuickFilter");y(this,"isPaginationEnabled");y(this,"getPageSize");y(this,"getCurrentPage");y(this,"rowHeightProvider");y(this,"rowNodeServices");y(this,"rowData",[]);y(this,"rootRowNodes",[]);y(this,"dataRows",[]);y(this,"rowsToDisplay",[]);y(this,"rowNodeMap",new Map);y(this,"expandedGroups",new Set);y(this,"groupDefaultExpandedApplied",!1);y(this,"pinnedTopRows",[]);y(this,"pinnedBottomRows",[]);y(this,"totalRowCount",0);this.options=e.options,this.eventService=e.eventService,this.columns=e.columns,this.getFilterModel=e.getFilterModel,this.getQuickFilter=e.getQuickFilter,this.isPaginationEnabled=e.isPaginationEnabled,this.getPageSize=e.getPageSize,this.getCurrentPage=e.getCurrentPage,this.rowHeightProvider=e.rowHeight,this.rowNodeServices=e.rowNodeServices}getType(){return"clientSide"}isEmpty(){return this.getRowCount()===0}getTopLevelRows(){return this.rootRowNodes}getRowCount(){return this.rowsToDisplay.length}getTotalRowCount(){return this.totalRowCount}getRow(e){return this.rowsToDisplay[e]}getRowNode(e){return this.rowNodeMap.get(e)}forEachNode(e){this.rowsToDisplay.forEach((t,n)=>e(t,n))}forEachLeafNode(e){let t=0;const n=i=>{for(const o of i)o.group?o.children&&n(o.children):o.footer||e(o,t++)};n(this.rootRowNodes)}getPinnedTopRowCount(){return this.pinnedTopRows.length}getPinnedBottomRowCount(){return this.pinnedBottomRows.length}getPinnedTopRow(e){return this.pinnedTopRows[e]}getPinnedBottomRow(e){return this.pinnedBottomRows[e]}getRowIndexAtPixel(e){return Math.floor(e/this.rowHeightProvider())}updateRowData(e){this.rowData=e||[],this.rebuildRows()}rebuildRows(){const e=new Map;this.options.treeData&&this.rowNodeMap.forEach(i=>{i.group&&e.set(i.id,i.expanded)}),this.rowNodeMap.clear(),this.rootRowNodes=[];const t=this.options.getRowId,n=this.rowData;if(this.options.treeData){const i=this.buildTreeData(n,t);this.rootRowNodes=i,this.rowNodeMap.forEach(o=>{o.group&&e.has(o.id)&&(o.expanded=e.get(o.id))})}else{const i=[];for(let o=0;o<n.length;o++){const a=n[o],l=t?t({data:a,level:0}):void 0,r=this.createRowNode(a,l);r.rowIndex=o,i.push(r)}this.rootRowNodes=i,this.dataRows=i}if(this.options.masterDetail&&!this.options.treeData){const i=this.options.isRowMaster||(()=>!0);for(const o of this.rootRowNodes){if(o.detailNode||!i({data:o.data,node:o}))continue;const a=this.createRowNode(null,`${o.id}|detail`,o,1);a.masterNode=o,a.selectable=!1,o.detailNode=a,o.expanded=!1}}this.refreshModel(),this.eventService.dispatchEvent("rowDataUpdated",{api:this.gridApi})}createRowNode(e,t,n=null,i=0){const o=new Qe(e,this.rowNodeServices,t);return o.parent=n,o.level=i,o.uiLevel=i,o.__id=o.id,this.rowNodeMap.set(o.id,o),o}buildTreeData(e,t){const n=this.options.getDataPath||(d=>String(d.id??d.key).split("/")),i=this.options.treeDataChildrenField||"children",o=new Map,a=[],l=(d,c,p)=>{const h=n(d),u=h.join("/"),f=t?t({data:d,level:p}):u,g=this.createRowNode(d,f,c,p);g.key=h[h.length-1],o.set(u,g);const v=d[i];if(Array.isArray(v)&&v.length){g.children=[],g.group=!0,g.expanded=!0;for(const m of v){const w=l(m,g,p+1);g.children.push(w)}g.allChildrenCount=v.length}else c&&(c.children||(c.children=[],c.group=!0,c.expanded=!0),c.children.push(g),c.allChildrenCount=(c.allChildrenCount??0)+1);return c||a.push(g),g},r=d=>{if(!d.children||d.children.length===0)return 1;let c=0;for(const p of d.children)c+=r(p);return d.allChildrenCount=c,c};for(const d of a)r(d);for(const d of e){if(!d)continue;const p=n(d).slice(0,-1).join("/"),h=p&&o.get(p)||null;l(d,h??null,h?h.level+1:0)}return a}applyTransaction(e){const t=this.options.getRowId,n={add:[],remove:[],update:[]};if(e.remove&&e.remove.length){const i=new Set;for(const o of e.remove){const a=t?t({data:o,level:0}):o.id;a!==void 0?i.add(String(a)):i.add(o)}this.rowData=this.rowData.filter(o=>{const a=t?t({data:o,level:0}):o.id;return!i.has(String(a))&&!i.has(o)});for(const o of i){const a=this.rowNodeMap.get(String(o));a&&(this.rowNodeMap.delete(a.id),n.remove.push(a))}}if(e.update&&e.update.length)for(const i of e.update){const o=t?t({data:i,level:0}):i.id,a=o!==void 0?this.rowNodeMap.get(String(o)):void 0;if(a)this.rowData=this.rowData.map(l=>{const r=t?t({data:l,level:0}):l.id;return String(r)===String(o)?i:l}),a.data=i,n.update.push(a);else{const l=this.createRowNode(i,o!==void 0?String(o):void 0);this.rowData.push(i),n.add.push(l)}}if(e.add&&e.add.length){const i=e.addIndex;for(const o of e.add){const a=t?t({data:o,level:0}):void 0,l=this.createRowNode(o,a);n.add.push(l),i===void 0||i<0?this.rowData.push(o):this.rowData.splice(Math.min(i,this.rowData.length),0,o)}}return this.rebuildRows(),n}refreshModel(e){const t=this.columns().filter(n=>n.rowGroup);(!e||e==="everything"||e==="filter"||e==="group")&&this.doFilter(),(!e||e==="everything"||e==="sort"||e==="group")&&this.doSort(t),(!e||e==="everything"||e==="group")&&this.doGroup(t),this.buildDisplayRows(t),this.eventService.dispatchEvent("modelUpdated",{api:this.gridApi})}doFilter(){const e=this.getFilterModel(),t=this.getQuickFilter(),n=Object.keys(e).length>0,i=t&&t.trim().length>0,o=this.columns(),a=!!this.options.treeData,l=f=>{for(const[g,v]of Object.entries(e)){const m=o.find(w=>w.colId===g);if(m&&!this.doesNodePassFilter(f,m,v))return!1}return!0},r=f=>{const g=this.options.__advancedFilterPass;return g?g(f):!0},d=Object.entries(e).some(([f,g])=>{const v=o.find(m=>m.colId===f);return!v||!v.aggFunc?!1:g.filterType==="multi"?(g.filterModels||[]).length>0:!0}),c=f=>{if(f.__passesFilter=!0,f.children)for(const g of f.children)c(g)},p=f=>{const g=this.options;return typeof g.isExternalFilterPresent!="function"||!g.isExternalFilterPresent()||typeof g.doesExternalFilterPass!="function"?!0:g.doesExternalFilterPass(f)},h=f=>{if(!i)return!0;const g=t.toLowerCase(),v=this.options.includeHiddenColumnsInQuickFilter?o:o.filter(m=>m.visible);for(const m of v){const w=Ce(m,f,null);if(bs(g,w))return!0}return!1},u=f=>{let g=!0;if(!f.group||f.footer||a?g=(!n||l(f))&&h(f)&&p(f)&&r(f):d&&(g=(!n||l(f))&&r(f)),f.__passesFilter=g,f.children){let v=!1;for(const m of f.children)u(m)&&(v=!0);return f.group&&!f.footer&&(d?(f.__passesFilter=g,g&&c(f)):(f.__passesFilter=a?v||g:v,a&&g&&c(f))),f.__passesFilter}return g};for(const f of this.rootRowNodes)u(f)}doesNodePassFilterModel(e,t,n){return this.doesNodePassFilter(e,t,n)}doesNodePassFilter(e,t,n){if(e.group&&t.aggFunc&&!e.footer&&!e.__aggregationTest){let r;if(e.groupData&&e.groupData[t.colId]!==void 0)r=e.groupData[t.colId];else{const c=[];Bt(e,c);const p=c.map(h=>Ce(t,h,null));r=kt(t,t.aggFunc,p)}const d={...e,data:{[t.colId]:r},groupData:null,__aggregationTest:!0};return this.doesNodePassFilter(d,t,n)}if(n.filterType==="multi"){const r=n.filterModels||[];if(r.length===0)return!0;const d=n.operator||"AND",c=r.map(p=>this.doesNodePassFilter(e,t,p));return d==="OR"?c.some(Boolean):c.every(Boolean)}if(n.condition1||n.condition2){const{condition1:r,condition2:d,...c}=n,p=[this.doesNodePassFilter(e,t,{...c,...r||{}})];return d&&p.push(this.doesNodePassFilter(e,t,{...c,...d})),(n.operator||"AND")==="OR"?p.some(Boolean):p.every(Boolean)}const i=Ce(t,e,null),o=Ns(t,i),a=i,l=n.filterType||"text";if(l==="text"){const r=String(n.filter??"").toLowerCase();if(!r)return!0;const d=(a==null?"":String(a)).toLowerCase();switch(n.type){case"equals":return d===r;case"notEqual":return d!==r;case"startsWith":return d.startsWith(r);case"endsWith":return d.endsWith(r);case"contains":default:return d.includes(r)}}if(l==="number"){const r=typeof a=="number"?a:Number(a);if(isNaN(r))return!1;const d=Number(n.filter),c=n.filterTo!==void 0&&n.filterTo!==null&&n.filterTo!==""?Number(n.filterTo):null;switch(n.type){case"equals":return r===d;case"notEqual":return r!==d;case"lessThan":return r<d;case"lessThanOrEqual":return r<=d;case"greaterThan":return r>d;case"greaterThanOrEqual":return r>=d;case"inRange":return c!==null?r>=Math.min(d,c)&&r<=Math.max(d,c):!0;case"blank":return a==null||a==="";case"notBlank":return!(a==null||a==="");default:return!0}}if(l==="date"){const r=a instanceof Date?a.getTime():new Date(a).getTime();if(isNaN(r))return!1;const d=n.dateFrom?new Date(n.dateFrom).getTime():null,c=n.dateTo?new Date(n.dateTo+"T23:59:59").getTime():null;return!(d!==null&&r<d||c!==null&&r>c)}return l==="boolean"?!!a==!!n.filter:l==="set"?(n.values||[]).map(d=>String(d)).includes(String(a)):!0}doSort(e){const t=[],n=this.columns();for(const a of n)a.sort&&a.sortIndex!==null&&t.push({column:a,direction:a.sort});t.sort((a,l)=>(a.column.sortIndex??0)-(l.column.sortIndex??0));const i=(a,l)=>{for(const{column:c,direction:p}of t){const h=Gn(c)(a,l)*(p==="asc"?1:-1);if(h!==0)return h}const r=a.rowIndex??0,d=l.rowIndex??0;return r-d},o=a=>{a.sort(i);for(const l of a)l.children&&o(l.children)};if(e.length===0)o(this.rootRowNodes);else for(const a of this.rootRowNodes)a.children&&o(a.children)}doGroup(e){if(e.length===0)return;const t=this.columns().filter(d=>d.aggFunc&&!d.rowGroup),n=(d,c,p,h)=>{if(c>=e.length)return d;const u=e[c],f=new Map,g=[];for(const m of d){if(!m.__passesFilter)continue;const w=Ce(u,m,null),k=Ts(w);f.has(k)||(f.set(k,[]),g.push(k)),f.get(k).push(m)}const v=[];for(const m of g){const w=f.get(m),k=`${h}|${u.colId}:${m}`,C=this.rowNodeMap.get(k),b=C||new Qe({[u.colId]:m},this.rowNodeServices,k);b.group=!0,b.key=m,b.level=p,b.uiLevel=p,b.parent=null,b.children=n(w,c+1,p+1,k);for(const E of b.children)E.parent=b;b.allChildrenCount=qn(b),b.data={...b.data};const N=[];Bt(b,N);const I={};for(const E of t){const G=N.map(x=>Ce(E,x,null));I[E.colId]=kt(E,E.aggFunc,G)}I[u.colId]=m,b.groupData=I,C||this.rowNodeMap.set(k,b),v.push(b)}return v},i=this.options.groupDefaultExpanded??0,o=this.dataRows.length>0?this.dataRows:this.rootRowNodes,a=n(o,0,0,""),l=d=>{for(const c of d){if(!c.group)continue;const p=Ot(c),h=this.expandedGroups.has(p);i===-1||h?c.expanded=!0:this.groupDefaultExpandedApplied?c.expanded=!1:c.expanded=c.level<i,c.expanded&&this.expandedGroups.add(p),c.children&&l(c.children)}};l(a),this.groupDefaultExpandedApplied=!0;const r=(d,c)=>{const p=e[c],h=p.sort==="desc"?-1:1,u=Gn(p);d.sort((f,g)=>{const v=Ce(p,f,null),m=Ce(p,g,null);return u({...f,data:{[p.colId]:v}},{...g,data:{[p.colId]:m}})*h})};e[0].sort&&r(a,0),this.rootRowNodes=a}buildDisplayRows(e){const t=[],n=!!this.options.treeData,i=(a,l)=>{if(a.uiLevel=l,t.push(a),a.detailNode&&a.expanded&&t.push(a.detailNode),a.children&&(a.group||n)){const r=a.group?a.children.filter(d=>d.__passesFilter||d.group):a.children;if(a.expanded){for(const d of r)i(d,l+1);if(a.group&&this.options.groupIncludeFooter&&!this.isGrandTotal(a)){const d=this.createFooterNode(a,l+1);t.push(d)}}}};for(const a of this.rootRowNodes)a.__passesFilter&&i(a,0);if(this.options.groupIncludeTotalFooter&&e.length>0){const a=this.createGrandTotalNode(e);t.push(a)}this.pinnedTopRows=t.filter(a=>a.rowPinned==="top"),this.pinnedBottomRows=t.filter(a=>a.rowPinned==="bottom");const o=t.filter(a=>a.rowPinned!=="top"&&a.rowPinned!=="bottom");if(this.totalRowCount=o.filter(a=>!a.masterNode).length,this.isPaginationEnabled()){const a=this.getPageSize(),l=this.getCurrentPage();let r=0,d=-1;for(let p=0;p<o.length;p++)if(!o[p].masterNode){if(r===l*a){d=p;break}r++}d<0&&(d=o.length);let c=d;for(r=0;c<o.length&&r<a;)o[c].masterNode||r++,c++;for(;c<o.length&&o[c].masterNode;)c++;this.rowsToDisplay=o.slice(d,c)}else this.rowsToDisplay=o;this.rowsToDisplay.forEach((a,l)=>a.__displayIndex=l)}isGrandTotal(e){return e.parent===null&&!!this.options.groupIncludeTotalFooter}createFooterNode(e,t){const n=`${e.id}|footer`;let i=this.rowNodeMap.get(n);return i||(i=new Qe(e.data,this.rowNodeServices,n),this.rowNodeMap.set(n,i)),i.group=!1,i.footer=!0,i.level=e.level,i.uiLevel=t,i.parent=e,i.selected=!1,i.selectable=!1,i.groupData={...e.groupData,__footerFor:e.id},i}createGrandTotalNode(e){const t="ag-grid-grand-total";let n=this.rowNodeMap.get(t);n||(n=new Qe(null,this.rowNodeServices,t),this.rowNodeMap.set(t,n)),n.group=!1,n.footer=!0,n.level=0,n.uiLevel=0,n.selected=!1,n.selectable=!1;const i=this.columns().filter(l=>l.aggFunc&&!l.rowGroup),o=[];for(const l of this.rootRowNodes)l.group?Bt(l,o):l.__passesFilter&&o.push(l);const a={};for(const l of i){const r=o.map(d=>Ce(l,d,null));a[l.colId]=kt(l,l.aggFunc,r)}return a.__grandTotal=!0,n.groupData=a,n}expandAll(){const e=t=>{t.group&&(t.expanded=!0,this.expandedGroups.add(Ot(t)),t.children&&t.children.forEach(e))};this.rootRowNodes.forEach(e),this.buildDisplayRows(this.columns().filter(t=>t.rowGroup)),this.eventService.dispatchEvent("expandOrCollapseAll",{}),this.eventService.dispatchEvent("modelUpdated",{api:this.gridApi})}collapseAll(){this.expandedGroups.clear();const e=t=>{t.group&&(t.expanded=!1,t.children&&t.children.forEach(e))};this.rootRowNodes.forEach(e),this.buildDisplayRows(this.columns().filter(t=>t.rowGroup)),this.eventService.dispatchEvent("expandOrCollapseAll",{}),this.eventService.dispatchEvent("modelUpdated",{api:this.gridApi})}setNodeExpanded(e,t){e.group&&(e.expanded=t,t?this.expandedGroups.add(Ot(e)):this.expandedGroups.delete(Ot(e)),this.buildDisplayRows(this.columns().filter(n=>n.rowGroup)),this.eventService.dispatchEvent("modelUpdated",{api:this.gridApi}))}setGridApi(e){this.gridApi=e}destroy(){this.rowNodeMap.clear(),this.rowsToDisplay=[],this.rootRowNodes=[]}}function Ts(s){return s==null?"":s instanceof Date?s.toISOString():String(s)}function Ot(s){const e=[];let t=s;for(;t;)e.unshift(t.id),t=t.parent;return e.join(">")}function qn(s){return!s.children||s.children.length===0?1:s.children.reduce((e,t)=>e+qn(t),0)}function Bt(s,e){if(!s.children||s.children.length===0){e.push(s);return}for(const t of s.children)Bt(t,e)}function Ns(s,e){return e}const Is={textColumn:{filter:"text",editable:!0},numberColumn:{filter:"number",editable:!0,headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"},dateColumn:{filter:"date",editable:!0},dateStringColumn:{filter:"date"},booleanColumn:{filter:"boolean",cellRenderer:"agCheckboxCellRenderer"},rightAligned:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"},numericColumn:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"}};function As(s){if(s===void 0||s===!0)return"text";if(s===!1)return!1;switch(s){case"agTextColumnFilter":return"text";case"agNumberColumnFilter":return"number";case"agDateColumnFilter":case"agDateColumnFilterString":return"date";case"agSetColumnFilter":return"set";default:return s}}function $s(s){return!!s.treeData}function Fs(){return{applyAggregate:kt}}class zn{constructor(e,t,n){y(this,"options");y(this,"eventService");y(this,"gridApi");y(this,"measureCtx",null);y(this,"gridColumnDefs",[]);y(this,"columns",[]);y(this,"displayOrder",[]);y(this,"autoGroupColumnDef");y(this,"pivotMode",!1);y(this,"columnGroups",[]);y(this,"openGroups",new Set);y(this,"groupsInitialised",!1);this.options=e,this.eventService=t,this.gridApi=n,this.autoGroupColumnDef={headerName:"",minWidth:200,width:250,sortable:!1,filter:!1,resizable:!0,suppressMovable:!0,cellRenderer:"agGroupCellRenderer",...e.autoGroupColumnDef||{}}}setGridApi(e){this.gridApi=e}getAutoGroupColumnDef(){return this.autoGroupColumnDef}getOptions(){return this.options}setPivotMode(e,t="api"){this.pivotMode!==e&&(this.pivotMode=e,this.eventService.dispatchEvent("columnPivotModeChanged",{api:this.gridApi,source:t}),this.refreshAll())}isPivotMode(){return this.pivotMode}setColumnDefs(e){this.gridColumnDefs=e||[],this.buildColumns()}static generateColumnDefs(e,t=_n){if(!e||e.length===0)return[];const n=e[0];if(!n||typeof n!="object")return[];const i=new Set(["children","detail","__proto__"]),o=[];for(const a of Object.keys(n)){if(i.has(a)||a.startsWith("__"))continue;const l=n[a],r={field:a,headerName:t(a)};typeof l=="number"?(r.type="numberColumn",r.filter="number"):typeof l=="boolean"?r.type="booleanColumn":l instanceof Date&&(r.type="dateColumn"),o.push(r)}return o}getColumnGroups(){return this.columnGroups}getGroupDepth(){return this.columnGroups.reduce((e,t)=>Math.max(e,t.depth),0)}isGroupOpen(e){return this.openGroups.has(e)}setGroupOpen(e,t){t?this.openGroups.add(e):this.openGroups.delete(e),this.updateVisible(),this.refreshAll()}getColumnDefs(){return this.gridColumnDefs}buildColumns(){const e=this.columns,t=new Map;for(const c of e)t.set(c.colId,c);const n=this.options.defaultColDef||{},i={...Is,...this.options.columnTypes||{}},o=[],a=[];let l=0;const r=(c,p)=>{const h=c.colId||c.field||Yt("col"),u={...n,...c};if(u.type&&i[u.type]){const f=i[u.type],g=new Set(Object.keys(c));for(const[v,m]of Object.entries(f))!g.has(v)&&!(v in n)&&(u[v]=m)}this.pushColumnInto(o,u,h,l++,t,p)},d=(c,p,h)=>{for(const u of c)if(u.children&&u.children.length){const f=u.groupId||Yt("group"),g={id:f,headerName:u.headerName??"",openByDefault:u.openByDefault===!0||u.columnGroupShow==="open",parentId:p,depth:h,childColumnIds:[]};a.push(g),this.groupsInitialised||(g.openByDefault?this.openGroups.add(f):this.openGroups.delete(f)),d(u.children,f,h+1)}else r(u,p)};if(d(this.gridColumnDefs||[],null,1),this.groupsInitialised=!0,this.columnGroups=a,this.options.rowNumbers){const c={colId:"__rowNumber",headerName:"",width:60,pinned:"left",sortable:!1,filter:!1,resizable:!1,suppressMovable:!0,cellRenderer:"agRowNumberCellRenderer",cellClass:"ag-row-number-cell"};this.pushColumnInto(o,{...n,...c},"__rowNumber",-1,t,null)}for(const c of o){if(!c.groupId)continue;const p=a.find(h=>h.id===c.groupId);p&&p.childColumnIds.push(c.colId)}this.columns=o,this.displayOrder=o.map(c=>c.colId),this.updateVisible(),this.updateAutoGroupColumn(),this.refreshAll()}createColumn(e,t,n,i,o){return this.buildColumn(e,t,n,i,o)}pushColumnInto(e,t,n,i,o,a){e.push(this.buildColumn(t,n,i,o,a))}buildColumn(e,t,n,i,o){const a=i.get(t),l=e.hide===!0||e.initialHide===!0,r={colId:t,field:e.field,headerName:e.headerName??(e.field?_n(e.field):""),headerTooltip:e.headerTooltip,colDef:e,width:e.width??e.minWidth??(e.flex?200:100),minWidth:e.minWidth??20,maxWidth:e.maxWidth??Number.MAX_SAFE_INTEGER,flex:e.flex??null,pinned:e.pinned??null,hide:l,visible:!l,lockPosition:e.lockPosition??!1,type:e.type,sortable:e.sortable??!!e.field,sort:e.sort??null,sortIndex:e.sortIndex??null,resizable:e.resizable??!0,filter:As(e.filter),floatingFilter:e.floatingFilter??!1,filterParams:e.filterParams||{},editable:e.editable??!1,cellEditor:e.cellEditor,cellEditorParams:e.cellEditorParams||{},singleClickEdit:e.singleClickEdit??this.options.singleClickEdit??!1,valueSetter:e.valueSetter,valueGetter:e.valueGetter,valueFormatter:e.valueFormatter,valueParser:e.valueParser,comparator:e.comparator,aggFunc:e.aggFunc,allowedAggFuncs:e.allowedAggFuncs??["sum","min","max","count","avg"],rowGroup:e.rowGroup??!1,rowGroupIndex:e.rowGroupIndex??null,pivot:e.pivot??!1,pivotIndex:e.pivotIndex??null,enableRowGroup:e.enableRowGroup??!0,enablePivot:e.enablePivot??!0,enableValue:e.enableValue??!0,cellRenderer:e.cellRenderer,cellRendererParams:e.cellRendererParams,cellClass:e.cellClass,cellStyle:e.cellStyle,cellDataType:e.cellDataType===!0,cellClassRules:e.cellClassRules,rowDrag:e.rowDrag===!0,headerClass:e.headerClass,checkboxSelection:e.checkboxSelection??!1,headerCheckboxSelection:e.headerCheckboxSelection??!1,headerCheckboxSelectionFilteredOnly:e.headerCheckboxSelectionFilteredOnly??!1,headerCheckboxSelectionCurrentPageOnly:e.headerCheckboxSelectionCurrentPageOnly??!1,menuTabs:e.menuTabs??["filterMenuTab","generalMenuTab","columnsMenuTab"],suppressMenu:e.suppressMenu??this.options.suppressMenu??!1,suppressMovable:e.suppressMovable??this.options.suppressMovableColumns??!1,wrapText:e.wrapText??!1,autoHeight:e.autoHeight??!1,tooltipField:e.tooltipField,tooltipValueGetter:e.tooltipValueGetter,decimals:e.decimals??0,defIndex:n,filterActive:!1,left:0,groupId:o};return a&&(r.pinned=a.pinned,r.visible=a.visible,r.width=a.width,r.flex=a.flex,r.sort=a.sort,r.sortIndex=a.sortIndex,r.rowGroup=a.rowGroup,r.rowGroupIndex=a.rowGroupIndex,r.pivot=a.pivot,r.pivotIndex=a.pivotIndex),r}updatePivotColumns(e){if(this.columns=this.columns.filter(r=>!r.colId.startsWith("__pivot_")),this.displayOrder=this.displayOrder.filter(r=>!r.startsWith("__pivot_")),!this.pivotMode){this.refreshAll();return}const t=this.getPivotColumns();if(t.length===0||!e||e.length===0){this.refreshAll();return}const n=this.getColumns().filter(r=>r.aggFunc&&!r.rowGroup&&!r.pivot),i=[];for(const r of t){const d=[],c=new Set;for(const p of e){const h=p==null?void 0:p[r.field],u=String(h);c.has(u)||(c.add(u),d.push(h))}d.sort((p,h)=>p===h?0:String(p)<String(h)?-1:1);for(const p of n){for(const f of d){const g=`__pivot_${r.colId}_${p.colId}_${f}`,v=this.createColumn({colId:g,headerName:`${String(f)}`,width:130,type:p.type,sortable:!1,filter:!1,enableRowGroup:!1,cellClass:p.cellClass,cellDataType:p.cellDataType},g,-1,new Map,null);v.aggFunc=p.aggFunc,v.groupId=r.colId,v.__pivot={pivotColumnId:r.colId,pivotField:r.field,pivotValue:f,valueColumnId:p.colId,valueField:p.field},v.valueGetter=m=>this.evaluatePivotValue(v,m.node),i.push(v)}const h=`__pivot_${r.colId}_${p.colId}_total`,u=this.createColumn({colId:h,headerName:"Total",width:130,type:p.type,sortable:!1,filter:!1,cellDataType:p.cellDataType},h,-1,new Map,null);u.aggFunc=p.aggFunc,u.groupId=r.colId,u.__pivot={pivotColumnId:r.colId,pivotField:r.field,pivotValue:void 0,valueColumnId:p.colId,valueField:p.field},u.valueGetter=f=>this.evaluatePivotValue(u,f.node),i.push(u)}}const o=new Set(t.map(r=>r.colId)),a=this.columns.reduce((r,d,c)=>o.has(d.groupId??"")?r:c,0);this.columns.splice(a+1,0,...i);for(const r of i)this.displayOrder.push(r.colId);const l=new Set(this.columnGroups.map(r=>r.id));for(const r of t)l.has(r.colId)||this.columnGroups.push({id:r.colId,headerName:r.headerName||r.field||"",openByDefault:!0,parentId:null,depth:1,childColumnIds:[]});this.refreshAll()}evaluatePivotValue(e,t){const n=e.__pivot;if(!n||!t)return;const i=[],o=c=>{if(!c.children||c.children.length===0){i.push(c);return}for(const p of c.children)o(p)};o(t);const l=(n.pivotValue===void 0?i:i.filter(c=>{var p;return String((p=c.data)==null?void 0:p[n.pivotField])===String(n.pivotValue)})).map(c=>{var p;return(p=c.data)==null?void 0:p[n.valueField]}).filter(c=>typeof c=="number");if(l.length===0)return null;const r=this.columns.find(c=>c.colId===n.valueColumnId),{applyAggregate:d}=Fs();return d(r,e.aggFunc,l)}updateAutoGroupColumn(){const e="ag-Grid-AutoColumn",t=!!this.options.treeData,n=this.getRowGroupColumns(),i=this.options.groupDisplayType||"singleColumn",o=t||n.length>0&&i!=="multipleColumns";for(const c of n)i==="multipleColumns"?(c.cellRenderer="agGroupCellRenderer",c.cellRendererParams={...c.cellRendererParams||{},suppressCount:!0}):c.cellRenderer==="agGroupCellRenderer"&&!c.colDef.cellRenderer&&(c.cellRenderer=void 0,c.cellRendererParams=void 0);const a=this.columns.find(c=>c.colId===e);if(!o){a&&(this.columns=this.columns.filter(c=>c.colId!==e),this.displayOrder=this.displayOrder.filter(c=>c!==e));return}const l={...this.autoGroupColumnDef};if(l.colId=e,a)a.headerName=l.headerName??"",a.colDef=l,a.cellRenderer=l.cellRenderer,a.cellRendererParams=l.cellRendererParams,a.width=l.width??a.width,a.minWidth=l.minWidth??a.minWidth,a.pinned=l.pinned??"left";else{const c=this.createColumn(l,e,-2,new Map,null);this.columns.unshift(c),this.displayOrder.unshift(e)}const r=this.columns.find(c=>c.colId===e),d=()=>this.getRowGroupColumns()[0];r.valueGetter=c=>{const p=c.node;if(!p)return"";if(p.key!==null&&p.key!==void 0)return p.key;if($s(this.options))return"";const h=d();return h!=null&&h.field&&p.data?p.data[h.field]??"":""}}updateVisible(){for(const e of this.columns)e.visible=!e.hide&&this.isGroupChainOpen(e.groupId)}isGroupChainOpen(e){let t=e;for(;t;){if(!this.openGroups.has(t))return!1;const n=this.columnGroups.find(i=>i.id===t);t=(n==null?void 0:n.parentId)??null}return!0}refreshAll(){this.eventService.dispatchEvent("columnEverythingChanged",{api:this.gridApi,source:"gridOptionsChanged"}),this.eventService.dispatchEvent("displayedColumnsChanged",{api:this.gridApi})}getAllColumns(){return this.columns.slice()}getColumn(e){const t=typeof e=="string"?e:e.colId;return this.columns.find(n=>n.colId===t)}getColumns(){return this.displayOrder.map(e=>this.getColumn(e)).filter(Boolean)}getDisplayedColumns(){return this.getColumns().filter(e=>e.visible)}getDisplayedLeftColumns(){return this.getDisplayedColumns().filter(e=>e.pinned==="left")}getDisplayedCenterColumns(){return this.getDisplayedColumns().filter(e=>e.pinned!=="left"&&e.pinned!=="right")}getDisplayedRightColumns(){return this.getDisplayedColumns().filter(e=>e.pinned==="right")}getDisplayedColumnsByType(){return{left:this.getDisplayedLeftColumns(),center:this.getDisplayedCenterColumns(),right:this.getDisplayedRightColumns()}}getRowGroupColumns(){return this.getColumns().filter(e=>e.rowGroup).sort((e,t)=>(e.rowGroupIndex??0)-(t.rowGroupIndex??0))}getPivotColumns(){return this.getColumns().filter(e=>e.pivot).sort((e,t)=>(e.pivotIndex??0)-(t.pivotIndex??0))}getValueColumns(){return this.pivotMode?this.getColumns().filter(e=>e.aggFunc&&!e.rowGroup&&!e.pivot):this.getColumns().filter(e=>!!e.aggFunc)}isRowGroupActive(){return this.getRowGroupColumns().length>0}setRowGroupColumns(e,t="api"){const n=e.map(i=>this.getColumn(i)).filter(Boolean);for(const i of this.getColumns())n.includes(i)||(i.rowGroup=!1,i.rowGroupIndex=null);n.forEach((i,o)=>{i.rowGroup=!0,i.rowGroupIndex=o,i.pivot=!1,i.pivotIndex=null}),this.eventService.dispatchEvent("columnRowGroupChanged",{api:this.gridApi,source:t,columns:n}),this.updateAutoGroupColumn(),this.refreshAll()}addRowGroupColumn(e,t="api"){const n=this.getColumn(e);if(!n)return;const i=this.getRowGroupColumns();n.rowGroup=!0,n.rowGroupIndex=i.length,n.pivot=!1,this.eventService.dispatchEvent("columnRowGroupChanged",{api:this.gridApi,source:t,columns:[n]}),this.updateAutoGroupColumn(),this.refreshAll()}removeRowGroupColumn(e,t="api"){const n=this.getColumn(e);if(!n)return;n.rowGroup=!1,n.rowGroupIndex=null,this.getRowGroupColumns().forEach((o,a)=>o.rowGroupIndex=a),this.eventService.dispatchEvent("columnRowGroupChanged",{api:this.gridApi,source:t,columns:[n]}),this.updateAutoGroupColumn(),this.refreshAll()}setValueColumns(e,t="api"){const n=e.map(i=>this.getColumn(i)).filter(Boolean);for(const i of this.getColumns())n.includes(i)?i.aggFunc||(i.aggFunc="sum"):i.aggFunc&&!i.rowGroup&&(i.aggFunc=void 0);this.eventService.dispatchEvent("columnValueChanged",{api:this.gridApi,source:t,columns:n}),this.refreshAll()}addValueColumn(e,t="sum",n="api"){const i=this.getColumn(e);i&&(i.aggFunc=t,this.eventService.dispatchEvent("columnValueChanged",{api:this.gridApi,source:n,columns:[i]}),this.refreshAll())}setPivotColumns(e,t="api"){const n=e.map(i=>this.getColumn(i)).filter(Boolean);for(const i of this.getColumns())i.pivot=n.includes(i),i.pivotIndex=n.includes(i)?n.indexOf(i):null;this.refreshAll()}setColumnVisible(e,t,n="api"){const i=this.getColumn(e);!i||i.visible===t||(i.hide=!t,i.visible=t,this.eventService.dispatchEvent("columnVisible",{api:this.gridApi,column:i,visible:t,source:n}),this.eventService.dispatchEvent("displayedColumnsChanged",{api:this.gridApi,source:n}),this.refreshAll())}setColumnsVisible(e,t,n="api"){for(const i of e)this.setColumnVisible(i,t,n)}setColumnPinned(e,t,n="api"){const i=this.getColumn(e);i&&(i.lockPosition&&t!==i.pinned||(i.pinned=t,this.eventService.dispatchEvent("columnPinned",{api:this.gridApi,column:i,pinned:t,source:n}),this.eventService.dispatchEvent("displayedColumnsChanged",{api:this.gridApi,source:n}),this.refreshAll()))}setColumnsPinned(e,t,n="api"){for(const i of e)this.setColumnPinned(i,t,n)}moveColumn(e,t,n="api"){const i=this.getColumn(e);i&&this.moveColumnByIndex(this.displayOrder.indexOf(i.colId),t,n)}moveColumnByIndex(e,t,n="api"){const i=this.displayOrder.slice();if(e<0||e>=i.length)return;const[o]=i.splice(e,1);i.splice(Math.max(0,Math.min(i.length,t)),0,o),this.displayOrder=i;const a=this.getColumn(o);this.eventService.dispatchEvent("columnMoved",{api:this.gridApi,column:a,toIndex:t,source:n}),this.eventService.dispatchEvent("displayedColumnsChanged",{api:this.gridApi,source:n}),this.refreshAll()}getColumnState(){return this.getColumns().map(e=>({colId:e.colId,hide:e.hide,pinned:e.pinned,width:e.width,flex:e.flex??void 0,sort:e.sort,sortIndex:e.sortIndex,rowGroupIndex:e.rowGroupIndex,pivotIndex:e.pivotIndex,aggFunc:e.aggFunc}))}applyColumnState(e,t=!1){for(const n of e){const i=this.getColumn(n.colId);i&&(n.hide!==void 0&&(i.hide=n.hide,i.visible=!n.hide),n.pinned!==void 0&&(i.pinned=n.pinned),n.width!==void 0&&(i.width=n.width),n.flex!==void 0&&(i.flex=n.flex),n.sort!==void 0&&(i.sort=n.sort),n.sortIndex!==void 0&&(i.sortIndex=n.sortIndex),n.rowGroupIndex!==void 0&&(i.rowGroup=n.rowGroupIndex!==null,i.rowGroupIndex=n.rowGroupIndex),n.pivotIndex!==void 0&&(i.pivot=n.pivotIndex!==null,i.pivotIndex=n.pivotIndex),n.aggFunc!==void 0&&(i.aggFunc=n.aggFunc))}if(t){const n=new Map(e.map(o=>[o.colId,o.colId])),i=this.displayOrder.filter(o=>!n.has(o));this.displayOrder=[...e.map(o=>o.colId).filter(o=>this.getColumn(o)),...i]}this.refreshAll()}resetColumnState(){this.buildColumns()}getMeasureContext(){if(this.measureCtx)return this.measureCtx;const e=document.createElement("canvas");return this.measureCtx=e.getContext("2d"),this.measureCtx&&(this.measureCtx.font='400 13px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'),this.measureCtx}measureTextWidth(e){const t=this.getMeasureContext();return t?t.measureText(e).width:e.length*8}sizeColumnsToFit(e,t=[]){const n=[this.getDisplayedLeftColumns(),this.getDisplayedCenterColumns(),this.getDisplayedRightColumns()];for(const i of n){let a=0,l=0;for(const d of i)t.includes(d.colId)?l+=d.width:d.flex!==null&&d.flex>0?a+=d.flex:l+=d.width;const r=Math.max(0,e-l-32);if(a>0){for(const d of i)if(d.flex!==null&&d.flex>0&&!t.includes(d.colId)){const c=Math.max(d.minWidth,Math.floor(r*d.flex/a));d.width=Math.min(d.maxWidth,c)}}}this.eventService.dispatchEvent("columnResized",{api:this.gridApi,source:"sizeColumnsToFit",finished:!0})}autoSizeColumn(e,t=!1){var l,r,d,c,p,h;const n=this.getColumn(e);if(!n)return;let i=this.measureTextWidth(n.headerName)+32;t||(i+=16);const o=((r=(l=this.gridApi)==null?void 0:l.getDisplayedRowCount)==null?void 0:r.call(l))??0,a=Math.min(o,300);for(let u=0;u<a;u++){const f=(c=(d=this.gridApi)==null?void 0:d.getDisplayedRowAtIndex)==null?void 0:c.call(d,u);if(!f)continue;const g=(h=(p=this.gridApi)==null?void 0:p.getCellText)==null?void 0:h.call(p,n,f);g&&(i=Math.max(i,this.measureTextWidth(g)+32))}n.width=Math.max(n.minWidth,Math.min(n.maxWidth,Math.ceil(i))),n.flex=null,this.eventService.dispatchEvent("columnResized",{api:this.gridApi,source:"autoSizeColumn",column:n,finished:!0})}autoSizeAllColumns(e=!1){for(const t of this.getDisplayedColumns())this.autoSizeColumn(t,e)}}function _n(s){const e=s.replace(/([A-Z])/g," $1").replace(/[_-]/g," ").trim();return e.charAt(0).toUpperCase()+e.slice(1)}class Ds{constructor(){y(this,"listeners",new Map)}addEventListener(e,t){let n=this.listeners.get(e);n||(n=[],this.listeners.set(e,n)),n.push(t)}removeEventListener(e,t){const n=this.listeners.get(e);if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}dispatchEvent(e,t){const n=this.listeners.get(e);if(!n||n.length===0)return;const i={type:e,...t||{}};for(const o of n.slice())o(i)}hasListener(e){return(this.listeners.get(e)||[]).length>0}}const Wn={sort:"排序",sortAscending:"升序排列",sortDescending:"降序排列",columnSize:"列宽",autosizeThisColumn:"自适应本列宽度",autosizeAllColumns:"自适应所有列宽",pinColumn:"固定列",pinLeft:"固定到左侧",noPin:"取消固定",pinRight:"固定到右侧",filter:"筛选",openFilter:"打开筛选",openMultiFilter:"打开多条件筛选",openAdvancedFilter:"打开高级筛选",clearFilter:"清除筛选",formula:"公式",addFormula:"添加公式…",editFormula:"编辑公式…",visibility:"显示/隐藏",hideColumn:"隐藏本列",chooseColumns:"选择列…",openFilterTitle:"打开筛选",openMenuTitle:"打开菜单",sortAsc:"升序",sortDesc:"降序",sortNone:"无",copy:"复制",copyWithHeaders:"连同表头复制",paste:"粘贴",export:"导出",csvExport:"导出 CSV",excelExport:"导出 Excel",resetColumns:"重置列",sizeToFit:"适应容器宽度",expandAll:"展开全部",collapseAll:"折叠全部",pinRow:"固定行",pinToTop:"固定到顶部",pinToBottom:"固定到底部",unpin:"取消固定",filterOoo:"筛选…",apply:"应用",clear:"清除",search:"搜索…",searchOoo:"搜索…",noMatches:"无匹配项",selectAll:"全选",clearAll:"全部清除",join:"条件组合:",and:"并且",or:"或者",from:"从",to:"到",secondValue:"第二个值",value:"值",removeFilter:"移除筛选",addFilter:"+ 添加筛选",advancedFilter:"高级筛选",conditionsUnit:"个条件",addCondition:"+ 添加条件",condTrue:"真",condFalse:"假",contains:"包含",notEqual:"不等于",startsWith:"开头是",endsWith:"结尾是",equals:"等于",blank:"为空",notBlank:"不为空",greaterThan:"大于",greaterThanOrEqual:"大于等于",lessThan:"小于",lessThanOrEqual:"小于等于",inRange:"介于",columns:"列",filters:"筛选",charts:"图表",rowGroups:"行分组",dragColumnsHere:"拖拽列到此处进行分组",searchColumns:"搜索列…",noMatchingColumns:"没有匹配的列",groupByThisColumn:"按此列分组",pinColumnTitle:"固定列",remove:"移除",page:"页码",pageSize:"每页行数:",pageNumber:"输入页码",find:"在表格中查找…",matchCase:"区分大小写",prevMatch:"上一个匹配",nextMatch:"下一个匹配",of:"/",rangeTo:"至",loadingOoo:"加载中…",noRowsToShow:"暂无数据",formulaPlaceholder:"例如 =price * quantity",dataGrid:"数据表格",dragRow:"拖拽行",expandGroup:"展开分组",close:"关闭",save:"保存",delete:"删除",totalRows:"总行数",rows:"行数",filtered:"筛选后",selected:"已选中",average:"平均",count:"计数",min:"最小",max:"最大",sum:"合计",note:"便签",writeNote:"写便签…",formulaPreview:"预览(第 1 行)",formulaError:"错误",invalidFormula:"公式无效",functions:"函数",integratedCharts:"集成图表",chart:"图表",chartType:"图表类型",chartCategory:"类目",chartSeries:"数据系列",chartGroup:"分组",createChart:"创建图表",noChartsCreated:"暂无图表",downloadPng:"下载 PNG",chartLine:"折线图",chartArea:"面积图",chartColumn:"柱状图",chartBar:"条形图",chartPie:"饼图",chartScatter:"散点图"},Ps={contains:"contains",notEqual:"notEqual",startsWith:"startsWith",endsWith:"endsWith",equals:"equals",blank:"blank",notBlank:"notBlank",greaterThan:"greaterThan",greaterThanOrEqual:"greaterThanOrEqual",lessThan:"lessThan",lessThanOrEqual:"lessThanOrEqual",inRange:"inRange",true:"condTrue",false:"condFalse"};class Hs{constructor(e){this.overrides=e}t(e){const t=this.overrides[e];return typeof t=="string"&&t.length?t:Wn[e]??e}}function Os(s){return new Hs(s??{})}function Bs(s){return!s||typeof s!="object"?!1:s.__isGroup===!0?!0:typeof s.childCount=="number"&&s.childCount>=0}class Vs{constructor(e){y(this,"eventService");y(this,"columns");y(this,"getSortModel");y(this,"getFilterModel");y(this,"rowNodeServices");y(this,"datasource",null);y(this,"stores",new Map);y(this,"rowNodeMap",new Map);y(this,"displayRows",[]);y(this,"blockSize");this.eventService=e.eventService,this.columns=e.columns,this.getSortModel=e.getSortModel,this.getFilterModel=e.getFilterModel,this.rowNodeServices=e.rowNodeServices,this.blockSize=e.options.cacheBlockSize??100}getType(){return"serverSide"}setDatasource(e){this.datasource=e,this.purgeCache()}getStore(e){return this.stores.get(e)}getOrCreateStore(e){let t=this.stores.get(e);return t||(t={rows:[],lastRow:null,loading:!1,failed:!1},this.stores.set(e,t)),t}isLoading(){for(const e of this.stores.values())if(e.loading)return!0;return!1}loadBlock(e,t,n){if(!this.datasource)return;const i=this.getOrCreateStore(e);if(i.loading)return;for(let a=i.rows.length;a<n;a++)i.rows.push(null);i.loading=!0,this.eventService.dispatchEvent("modelUpdated",{});const o={startRow:t,endRow:n,rowGroupCols:this.columns().filter(a=>a.rowGroup),valueCols:this.columns().filter(a=>a.aggFunc&&!a.rowGroup),pivotCols:this.columns().filter(a=>a.pivot),groupKeys:e?e.split("|"):[],sortModel:this.getSortModel(),filterModel:this.getFilterModel(),successCallback:(a,l)=>{i.loading=!1,this.onBlockLoaded(e,a,l??null)},failCallback:()=>{i.loading=!1,i.failed=!0,this.eventService.dispatchEvent("modelUpdated",{})}};this.datasource.getRows(o)}onBlockLoaded(e,t,n){const i=this.getOrCreateStore(e);i.lastRow=n,i.failed=!1;for(let o=0;o<t.length;o++){const a=t[o],l=(i.rows.length>0,o),r=this.createNode(a,e,o,l);i.rows[l]=r}for(;i.rows.length&&i.rows[i.rows.length-1]===null;)i.rows.pop();this.buildDisplayRows(),this.eventService.dispatchEvent("modelUpdated",{})}createNode(e,t,n,i){const o=Bs(e),a=(e==null?void 0:e.id)!==void 0&&(e==null?void 0:e.id)!==null?String(e.id):`${t}#${i}`,l=this.rowNodeMap.get(a),r=l instanceof Qe?l:new Qe(e,this.rowNodeServices,a);return r.data=e,r.rowIndex=n,o&&(r.group=!0,r.key=String(Ce(this.columns().find(d=>d.rowGroup),r,null)??""),r.level=t?t.split("|").length:0,r.uiLevel=r.level,r.allChildrenCount=typeof e.childCount=="number"?e.childCount:null,r.expanded=this.stores.has(`${t?t+"|":""}${r.key}`)),this.rowNodeMap.set(a,r),r}buildDisplayRows(){const e=[],t=(n,i)=>{const o=this.stores.get(n);if(o){for(const a of o.rows)if(a&&(a.uiLevel=i,e.push(a),a.group&&a.expanded)){const l=`${n?n+"|":""}${a.key}`;t(l,i+1)}}};t("",0),this.displayRows=e,this.displayRows.forEach((n,i)=>n.__displayIndex=i)}ensureLoaded(e,t){let n=0;const i=a=>{const l=this.stores.get(a);if(l){for(const r of l.rows)if(r){if(n>=e&&n<=t){const d=Math.floor(n/this.blockSize)*this.blockSize,c=d+this.blockSize,p=l.lastRow,h=p!==null?Math.min(p,c):c;n<(l.rows.length||0)&&d<(l.rows.length||0)||(l.lastRow===null||c<=l.lastRow)&&this.loadBlock(a,d,h)}n++,r.group&&r.expanded&&i(`${a?a+"|":""}${r.key}`)}}};i("");const o=this.stores.get("");(!o||o.rows.length===0&&o.lastRow===null)&&this.loadBlock("",0,this.blockSize)}refreshModel(e){this.ensureLoaded(0,this.blockSize),this.eventService.dispatchEvent("modelUpdated",{})}onViewportChanged(e,t){this.ensureLoaded(e,t)}setNodeExpanded(e,t){if(e.group){if(e.expanded=t,t){const n=this.groupPathFor(e);this.stores.has(n)||this.loadBlock(n,0,this.blockSize)}this.buildDisplayRows(),this.eventService.dispatchEvent("modelUpdated",{})}}groupPathFor(e){const t=[];let n=e;for(;n&&n.group;)t.unshift(n.key??""),n=n.parent??null;return t.join("|")}purgeCache(){this.stores.clear(),this.rowNodeMap.clear(),this.displayRows=[],this.refreshModel("everything")}onSortOrFilterChanged(){this.purgeCache()}getRowCount(){return this.displayRows.length}getTotalRowCount(){const e=this.stores.get("");return(e==null?void 0:e.lastRow)??0}getRow(e){return this.displayRows[e]}getRowNode(e){return this.rowNodeMap.get(e)}forEachNode(e){this.displayRows.forEach((t,n)=>e(t,n))}forEachLeafNode(e){let t=0;for(const n of this.displayRows)!n.group&&!n.footer&&e(n,t++)}isEmpty(){return this.displayRows.length===0}getTopLevelRows(){const e=this.stores.get("");return(e==null?void 0:e.rows.filter(Boolean))||[]}updateRowData(e){this.refreshModel("everything")}applyTransaction(e){const t={add:[],remove:[],update:[]};for(const n of e.update||[]){const i=(n==null?void 0:n.id)!==void 0?String(n.id):void 0,o=i?this.rowNodeMap.get(i):void 0;o&&(o.data=n,t.update.push(o))}return this.eventService.dispatchEvent("modelUpdated",{}),t}destroy(){var e,t;(t=(e=this.datasource)==null?void 0:e.destroy)==null||t.call(e),this.stores.clear(),this.rowNodeMap.clear(),this.displayRows=[]}expandAll(){for(const e of this.rowNodeMap.values())if(e.group){e.expanded=!0;const t=this.groupPathFor(e);this.stores.has(t)||this.loadBlock(t,0,this.blockSize)}this.buildDisplayRows(),this.eventService.dispatchEvent("modelUpdated",{})}collapseAll(){for(const e of this.rowNodeMap.values())e.group&&(e.expanded=!1);this.buildDisplayRows(),this.eventService.dispatchEvent("modelUpdated",{})}getPinnedTopRowCount(){return 0}getPinnedBottomRowCount(){return 0}}class Gs{constructor(e){y(this,"eventService");y(this,"getSortModel");y(this,"getFilterModel");y(this,"rowNodeServices");y(this,"datasource",null);y(this,"nodes",[]);y(this,"rowNodeMap",new Map);y(this,"blockSize");y(this,"loading",!1);this.eventService=e.eventService,this.getSortModel=e.getSortModel,this.getFilterModel=e.getFilterModel,this.rowNodeServices=e.rowNodeServices,this.blockSize=e.options.cacheBlockSize??100}getType(){return"infinite"}setDatasource(e){this.datasource=e,this.nodes=[],this.rowNodeMap.clear(),this.loadBlock(0,this.blockSize)}loadBlock(e,t){if(!(!this.datasource||this.loading)){for(let n=this.nodes.length;n<t;n++)this.nodes.push(null);this.loading=!0,this.eventService.dispatchEvent("modelUpdated",{}),this.datasource.getRows({startRow:e,endRow:t,rowGroupCols:[],valueCols:[],pivotCols:[],groupKeys:[],sortModel:this.getSortModel(),filterModel:this.getFilterModel(),successCallback:(n,i)=>{this.loading=!1,n.forEach((o,a)=>{const l=(o==null?void 0:o.id)!==void 0?String(o.id):`row-${e+a}`;let r=this.rowNodeMap.get(l);r||(r=new Qe(o,this.rowNodeServices,l),this.rowNodeMap.set(l,r)),r.data=o,r.rowIndex=e+a,this.nodes[e+a]=r}),this.eventService.dispatchEvent("modelUpdated",{})},failCallback:()=>{this.loading=!1,this.eventService.dispatchEvent("modelUpdated",{})}})}}onViewportChanged(e,t){const n=Math.floor(e/this.blockSize)*this.blockSize;n+this.blockSize>this.nodes.length&&this.loadBlock(n,n+this.blockSize)}onSortOrFilterChanged(){this.nodes=[],this.rowNodeMap.clear(),this.loadBlock(0,this.blockSize)}isLoading(){return this.loading}getRowCount(){return this.nodes.length}getRow(e){return this.nodes[e]??void 0}getRowNode(e){return this.rowNodeMap.get(e)}forEachNode(e){this.nodes.forEach((t,n)=>{t&&e(t,n)})}forEachLeafNode(e){this.forEachNode(e)}isEmpty(){return this.nodes.filter(Boolean).length===0}getTopLevelRows(){return this.nodes.filter(Boolean)}updateRowData(){this.onSortOrFilterChanged()}applyTransaction(){return null}destroy(){var e,t;(t=(e=this.datasource)==null?void 0:e.destroy)==null||t.call(e),this.nodes=[],this.rowNodeMap.clear()}refreshModel(){this.eventService.dispatchEvent("modelUpdated",{})}expandAll(){}collapseAll(){}getPinnedTopRowCount(){return 0}getPinnedBottomRowCount(){return 0}}class qs{constructor(e){y(this,"eventService");y(this,"rowNodeServices");y(this,"datasource",null);y(this,"nodes",[]);y(this,"rowNodeMap",new Map);y(this,"loading",!1);this.eventService=e.eventService,this.rowNodeServices=e.rowNodeServices}getType(){return"viewport"}setDatasource(e){this.datasource=e,this.nodes=[],this.rowNodeMap.clear(),this.setViewportRange(0,50)}setViewportRange(e,t){if(!(!this.datasource||this.loading)){this.nodes=this.nodes.filter((n,i)=>i>=e&&i<=t);for(let n=e;n<=t;n++)this.nodes[n-e]||(this.nodes[n-e]=null);this.loading=!0,this.eventService.dispatchEvent("modelUpdated",{}),this.datasource.getRows({startRow:e,endRow:t,rowGroupCols:[],valueCols:[],pivotCols:[],groupKeys:[],sortModel:[],filterModel:{},successCallback:n=>{this.loading=!1,n.forEach((i,o)=>{const a=(i==null?void 0:i.id)!==void 0?String(i.id):`vrow-${e+o}`;let l=this.rowNodeMap.get(a);l||(l=new Qe(i,this.rowNodeServices,a),this.rowNodeMap.set(a,l)),l.data=i,l.rowIndex=e+o,this.nodes[e+o-e]=l}),this.eventService.dispatchEvent("modelUpdated",{})},failCallback:()=>{this.loading=!1,this.eventService.dispatchEvent("modelUpdated",{})}})}}setViewportDatasource(e){this.datasource=e,this.nodes=[],this.rowNodeMap.clear(),this.setViewportRange(0,50)}onViewportChanged(e,t){this.setViewportRange(e,t)}isLoading(){return this.loading}getRowCount(){return this.nodes.filter(Boolean).length}getRow(e){return this.nodes[e]??void 0}getRowNode(e){return this.rowNodeMap.get(e)}forEachNode(e){this.nodes.forEach((t,n)=>{t&&e(t,n)})}forEachLeafNode(e){this.forEachNode(e)}isEmpty(){return this.getRowCount()===0}getTopLevelRows(){return this.nodes.filter(Boolean)}updateRowData(){}applyTransaction(){return null}destroy(){var e,t;(t=(e=this.datasource)==null?void 0:e.destroy)==null||t.call(e),this.nodes=[],this.rowNodeMap.clear()}refreshModel(){this.eventService.dispatchEvent("modelUpdated",{})}expandAll(){}collapseAll(){}getPinnedTopRowCount(){return 0}getPinnedBottomRowCount(){return 0}}function Un(s){return String(s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}const Je=["#3ba1ff","#47cf7c","#ffb700","#ff6b6b","#a86dd7","#00c2c7"];class zs{constructor(e,t){y(this,"charts",new Map);y(this,"chartCounter",0);y(this,"currentType","line");y(this,"timeSeries",!1);this.grid=e,this.popupService=t}isEnabled(){return!!this.grid.getOptions().enableCharts}getChartData(e={}){const t=this.grid.getColumnModel(),n=t.getRowGroupColumns();let i=e.categoryColumn;const o=e.valueColumns&&e.valueColumns.length?e.valueColumns:t.getValueColumns().filter(r=>r.aggFunc),a=[],l=o.map(()=>[]);if(n.length>0)((d,c)=>{for(const p of d)if(p.group){const h=n[0]?String(Ce(n[0],p,this.grid.getApi())??""):p.key??"";a.push(h);for(let u=0;u<o.length;u++){const f=[];jn(p,o[u],f),l[u].push(Number(kt(o[u],o[u].aggFunc,f))||0)}}})(this.grid.getRowModel().getTopLevelRows());else if(i||(i=this.grid.getColumns().center.find(r=>r.field&&r.type!=="numberColumn")||this.grid.getColumns().center[0]),this.grid.getRowModel().forEachNode(r=>{if(r.group||r.footer)return;const d=i?Ce(i,r,this.grid.getApi()):"";a.push(String(d??""));for(let c=0;c<o.length;c++){const p=Ce(o[c],r,this.grid.getApi());l[c].push(typeof p=="number"?p:Number(p)||0)}}),a.length>200){const r=Math.ceil(a.length/200),d=[],c=l.map(()=>[]);for(let p=0;p<a.length;p+=r){d.push(a[p]);for(let h=0;h<l.length;h++)c[h].push(l[h][p])}return{categories:d,series:o.map((p,h)=>({title:p.headerName,data:c[h]}))}}return{categories:a,series:o.map((r,d)=>({title:r.headerName,data:l[d]}))}}buildChartPanel(){const e=document.createElement("div");e.className="ag-chart-panel";const t=document.createElement("div");t.className="ag-side-bar-section-title",t.textContent=this.grid.t("integratedCharts"),e.appendChild(t);const n=document.createElement("div");n.className="ag-chart-panel-label",n.textContent=this.grid.t("chartType"),e.appendChild(n);const i=document.createElement("select");i.className="ag-chart-panel-select";const o=[{value:"line",label:this.grid.t("chartLine")},{value:"area",label:this.grid.t("chartArea")},{value:"column",label:this.grid.t("chartColumn")},{value:"bar",label:this.grid.t("chartBar")},{value:"pie",label:this.grid.t("chartPie")},{value:"scatter",label:this.grid.t("chartScatter")}];for(const v of o){const m=document.createElement("option");m.value=v.value,m.textContent=v.label,v.value===this.currentType&&(m.selected=!0),i.appendChild(m)}i.addEventListener("change",()=>{this.currentType=i.value}),e.appendChild(i);const a=document.createElement("div");a.className="ag-chart-panel-label",a.textContent=this.grid.t("chartCategory"),e.appendChild(a);const l=document.createElement("select");l.className="ag-chart-panel-select";const r=this.grid.getColumnModel().getRowGroupColumns(),d=r.length>0?r:this.grid.getColumns().center.filter(v=>v.field);for(const v of d){const m=document.createElement("option");m.value=v.colId,m.textContent=r.length>0?`${this.grid.t("chartGroup")}: ${v.headerName}`:v.headerName,l.appendChild(m)}e.appendChild(l);const c=document.createElement("div");c.className="ag-chart-panel-label",c.textContent=this.grid.t("chartSeries"),e.appendChild(c);const p=this.grid.getColumnModel().getValueColumns().filter(v=>v.aggFunc),h=document.createElement("div");h.className="ag-chart-panel-series";const u=new Set(p.slice(0,3).map(v=>v.colId));for(const v of this.grid.getColumns().center.filter(m=>m.field)){const m=document.createElement("label");m.className="ag-chart-panel-series-item";const w=document.createElement("input");w.type="checkbox",w.checked=u.has(v.colId),w.addEventListener("change",()=>{w.checked?u.add(v.colId):u.delete(v.colId)}),m.appendChild(w);const k=document.createElement("span");k.textContent=v.headerName,m.appendChild(k),h.appendChild(m)}e.appendChild(h);const f=document.createElement("button");f.className="ag-button ag-button-primary ag-chart-panel-create",f.textContent=this.grid.t("createChart"),f.addEventListener("click",()=>{const v=this.grid.getColumn(l.value)||void 0,m=[...u].map(w=>this.grid.getColumn(w)).filter(Boolean);this.createChart({type:this.currentType,categoryColumn:v,valueColumns:m})}),e.appendChild(f);const g=document.createElement("div");if(g.className="ag-chart-panel-list",this.charts.size===0){const v=document.createElement("div");v.className="ag-side-bar-empty",v.textContent=this.grid.t("noChartsCreated"),g.appendChild(v)}for(const[v,m]of this.charts){const w=document.createElement("div");w.className="ag-chart-panel-list-item";const k=document.createElement("span");k.textContent=m.title,w.appendChild(k);const C=document.createElement("button");C.className="ag-column-group-remove",C.textContent="×",C.addEventListener("click",()=>this.destroyChart(v)),w.appendChild(C),g.appendChild(w)}return e.appendChild(g),e}createChart(e={}){var v,m,w,k;const t=e.type||this.currentType,n=this.getChartData({categoryColumn:e.categoryColumn,valueColumns:e.valueColumns}),i=`chart-${++this.chartCounter}`,o=e.title||`${this.grid.t(`chart${t.charAt(0).toUpperCase()}${t.slice(1)}`)}`,{ePopup:a}=this.popupService.createPopup(640,"ag-chart-window");a.innerHTML="";const l=document.createElement("div");l.className="ag-chart-window-header";const r=document.createElement("span");r.className="ag-chart-window-title",r.textContent=o,l.appendChild(r);const d=document.createElement("button");d.className="ag-button ag-button-small",d.textContent=this.grid.t("downloadPng"),l.appendChild(d);const c=document.createElement("button");c.className="ag-button ag-button-small",c.textContent="×",c.title=this.grid.t("close"),c.addEventListener("click",()=>this.destroyChart(i)),l.appendChild(c),a.appendChild(l);const p=document.createElement("div");p.className="ag-chart-window-body";const h=document.createElement("canvas");h.className="ag-chart-canvas",h.width=600,h.height=360,p.appendChild(h);const u=document.createElement("div");u.className="ag-chart-tooltip",u.style.display="none",p.appendChild(u),h.addEventListener("mousemove",C=>this.onChartHover({id:i,ePopup:a,canvas:h,type:t,data:n,title:o},C,u)),h.addEventListener("mouseleave",()=>{u.style.display="none"});const f=document.createElement("div");f.className="ag-chart-legend",p.appendChild(f),a.appendChild(p),this.timeSeries=n.categories.length>0&&n.categories.every(C=>!isNaN(Date.parse(String(C)))&&isNaN(Number(C)));const g={id:i,ePopup:a,canvas:h,type:t,data:n,title:o};return this.charts.set(i,g),d.addEventListener("click",()=>{const C=h.toDataURL("image/png"),b=document.createElement("a");b.href=C,b.download=`${o.replace(/\s+/g,"-").toLowerCase()}.png`,b.click()}),this.popupService.positionAt(a,this.grid.getRootElement()),a.style.top="60px",this.renderChart(g),this.saveCharts(),this.grid.getEventService().dispatchEvent("chartCreated",{chartId:i,chartTitle:o,api:this.grid.getApi()}),(m=(v=this.grid.getOptions()).onChartCreated)==null||m.call(v,{chartId:i,chartTitle:o,api:this.grid.getApi()}),((w=this.grid.getSideBarService())==null?void 0:w.getActivePanel())==="charts"&&((k=this.grid.getSideBarService())==null||k.refresh()),i}destroyChart(e){var n,i,o,a;const t=this.charts.get(e);t&&(t.ePopup.remove(),this.charts.delete(e),this.saveCharts(),this.grid.getEventService().dispatchEvent("chartDestroyed",{chartId:e,api:this.grid.getApi()}),(i=(n=this.grid.getOptions()).onChartDestroyed)==null||i.call(n,{chartId:e,api:this.grid.getApi()}),((o=this.grid.getSideBarService())==null?void 0:o.getActivePanel())==="charts"&&((a=this.grid.getSideBarService())==null||a.refresh()))}getChartModels(){return[...this.charts.values()].map(e=>({chartId:e.id,chartType:e.type,title:e.title}))}refreshCharts(){for(const e of this.charts.values())e.data=this.getChartData(),this.renderChart(e)}onChartHover(e,t,n){const o=e.canvas.getBoundingClientRect(),a=600/(o.width||1),l=360/(o.height||1),r=(t.clientX-o.left)*a,d=(t.clientY-o.top)*l,c={top:20,right:20,bottom:34,left:56},p=600-c.left-c.right,h=360-c.top-c.bottom;if(r<c.left||r>c.left+p||d<c.top||d>c.top+h){n.style.display="none";return}if(e.type==="pie"){n.style.display="none";return}const u=e.type==="bar",f=Math.max(1,e.data.categories.length),g=(u?h:p)/f,v=Math.floor((u?d-c.top:r-c.left)/g);if(v<0||v>=e.data.categories.length){n.style.display="none";return}const m=e.data.series.map(w=>`${w.title}: ${this.formatTick(w.data[v]??0)}`);n.innerHTML=`<div class="ag-chart-tooltip-title">${Un(e.data.categories[v])}</div>`+m.map(w=>`<div>${Un(w)}</div>`).join(""),n.style.display="block",n.style.left=`${t.clientX-o.left+12}px`,n.style.top=`${t.clientY-o.top+12}px`}storageKey(){const t=this.grid.getOptions().chartStorageKey;return t?`rowvia-charts:${t}`:null}saveCharts(){const e=this.storageKey();if(!e)return;const t=[...this.charts.values()].map(n=>({id:n.id,type:n.type,title:n.title,data:n.data}));try{localStorage.setItem(e,JSON.stringify(t))}catch{}}loadCharts(){const e=this.storageKey();if(!e)return;let t=[];try{const n=localStorage.getItem(e);n&&(t=JSON.parse(n))}catch{return}for(const n of t)this.restoreChart(n)}restoreChart(e){const t=e.id||`chart-${++this.chartCounter}`;if(this.charts.has(t))return;const{ePopup:n}=this.popupService.createPopup(640,"ag-chart-window");n.innerHTML="";const i=document.createElement("div");i.className="ag-chart-window-header";const o=document.createElement("span");o.className="ag-chart-window-title",o.textContent=e.title||this.grid.t("chart"),i.appendChild(o);const a=document.createElement("button");a.className="ag-button ag-button-small",a.textContent="×",a.addEventListener("click",()=>this.destroyChart(t)),i.appendChild(a),n.appendChild(i);const l=document.createElement("div");l.className="ag-chart-window-body";const r=document.createElement("canvas");r.className="ag-chart-canvas",r.width=600,r.height=360,l.appendChild(r);const d=document.createElement("div");d.className="ag-chart-legend",l.appendChild(d),n.appendChild(l);const c={id:t,ePopup:n,canvas:r,type:e.type||"line",data:e.data||{categories:[],series:[]},title:e.title||"Chart"};this.charts.set(t,c),this.popupService.positionAt(n,this.grid.getRootElement()),n.style.top="60px",this.renderChart(c)}renderChart(e){var G;const t=e.canvas,n=t.getContext("2d");if(!n)return;const i=window.devicePixelRatio||1,o=t.width,a=t.height;t.width=o*i,t.height=a*i,t.style.width=`${o}px`,t.style.height=`${a}px`,n.scale(i,i),n.clearRect(0,0,o,a);const l=getComputedStyle(this.grid.getRootElement()),r=l.getPropertyValue("--ag-chart-text-color")||"#666",d=l.getPropertyValue("--ag-border-color")||"rgba(128,128,128,0.25)",c={top:20,right:20,bottom:34,left:56},p=o-c.left-c.right,h=a-c.top-c.bottom;n.font="11px sans-serif",n.fillStyle=r,n.strokeStyle=d,n.lineWidth=1;const u=(G=e.canvas.parentElement)==null?void 0:G.querySelector(".ag-chart-legend");if(u&&(u.innerHTML="",e.data.series.forEach((x,T)=>{const A=document.createElement("span");A.className="ag-chart-legend-item";const H=document.createElement("span");H.className="ag-chart-legend-swatch",H.style.backgroundColor=Je[T%Je.length],A.appendChild(H),A.appendChild(document.createTextNode(x.title)),u.appendChild(A)})),e.type==="pie"){this.renderPie(n,e.data,o,a,r);return}const f=e.data.series.flatMap(x=>x.data);let g=Math.max(0,...f),v=Math.min(0,...f);e.type==="scatter"&&(v=Math.min(...f),g=Math.max(...f));const m=g-v||1;g+=m*.08,v-=v<0?m*.08:0;const w=g-v||1,k=x=>c.top+h-(x-v)/w*h,C=5;n.textAlign="right",n.textBaseline="middle";for(let x=0;x<=C;x++){const T=v+w*x/C,A=k(T);n.beginPath(),n.moveTo(c.left,A),n.lineTo(o-c.right,A),n.stroke(),n.fillText(this.formatTick(T),c.left-6,A)}const b=e.data.categories,N=e.type==="bar",I=Math.max(1,b.length),E=(N?h:p)/I;if(N){n.textAlign="left",b.forEach((T,A)=>{const H=c.top+A*E,q=Math.max(2,E*.7/e.data.series.length);e.data.series.forEach((R,P)=>{const L=R.data[A]||0,M=Math.abs(L)/w*p,$=c.left+(0-v)/w*p;n.fillStyle=Je[P%Je.length],n.fillRect($,H+P*q,Math.max(1,M),q-1)}),n.fillStyle=r,n.fillText(this.truncate(T,18),c.left+4,H+E/2)});const x=c.left+(0-v)/w*p;n.beginPath(),n.moveTo(x,c.top),n.lineTo(x,c.top+h),n.strokeStyle=r,n.stroke()}else{const x=Math.max(1,Math.ceil(I/12));n.textAlign="center",n.textBaseline="top",b.forEach((H,q)=>{if(q%x!==0)return;const R=c.left+E*(q+.5);n.fillStyle=r,n.fillText(this.truncate(H,10),R,c.top+h+6)});const T=e.data.series.length,A=Math.max(1,E*.7/Math.max(1,T));e.data.series.forEach((H,q)=>{const R=Je[q%Je.length];if(e.type==="column")n.fillStyle=R,H.data.forEach((P,L)=>{const M=c.left+E*L+(E-A*T)/2+q*A,$=k(P);n.fillRect(M,$,A-1,c.top+h-$)});else if(e.type==="area"){n.beginPath(),H.data.forEach((L,M)=>{const $=c.left+E*(M+.5),z=k(L);M===0?n.moveTo($,z):n.lineTo($,z)});const P=c.left+E*(H.data.length-.5);n.lineTo(P,c.top+h),n.lineTo(c.left+E*.5,c.top+h),n.closePath(),n.globalAlpha=.25,n.fillStyle=R,n.fill(),n.globalAlpha=1,n.beginPath(),H.data.forEach((L,M)=>{const $=c.left+E*(M+.5),z=k(L);M===0?n.moveTo($,z):n.lineTo($,z)}),n.strokeStyle=R,n.lineWidth=2,n.stroke()}else e.type==="scatter"?(n.fillStyle=R,H.data.forEach((P,L)=>{const M=c.left+E*(L+.5),$=k(P);n.beginPath(),n.arc(M,$,3,0,Math.PI*2),n.fill()})):(n.beginPath(),H.data.forEach((P,L)=>{const M=c.left+E*(L+.5),$=k(P);L===0?n.moveTo(M,$):n.lineTo(M,$)}),n.strokeStyle=R,n.lineWidth=2,n.stroke())})}}renderPie(e,t,n,i,o){const a=t.series[0];if(!a)return;const l=a.data.reduce((h,u)=>h+Math.abs(u),0)||1,r=n/2,d=i/2,c=Math.min(n,i)/2-30;let p=-Math.PI/2;a.data.forEach((h,u)=>{const f=Math.abs(h)/l*Math.PI*2;e.beginPath(),e.moveTo(r,d),e.arc(r,d,c,p,p+f),e.closePath(),e.fillStyle=Je[u%Je.length],e.fill();const g=p+f/2,v=r+Math.cos(g)*(c*.7),m=d+Math.sin(g)*(c*.7),w=Math.round(Math.abs(h)/l*100);w>=5&&(e.fillStyle="#fff",e.font="bold 11px sans-serif",e.textAlign="center",e.textBaseline="middle",e.fillText(`${w}%`,v,m)),p+=f}),e.fillStyle=o}formatTick(e){if(this.timeSeries){const n=new Date(e);if(!isNaN(n.getTime()))return n.toLocaleDateString("en-GB",{day:"numeric",month:"short"})}const t=Math.abs(e);return t>=1e9?`${(e/1e9).toFixed(1)}B`:t>=1e6?`${(e/1e6).toFixed(1)}M`:t>=1e3?`${(e/1e3).toFixed(1)}k`:Number.isInteger(e)?String(e):e.toFixed(1)}truncate(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e}}function jn(s,e,t){const n=s.children;if(!n||n.length===0){const i=Ce(e,s,null);typeof i=="number"&&!isNaN(i)&&t.push(i);return}for(const i of n)jn(i,e,t)}class _s{constructor(e){y(this,"eGui");var d,c,p;const t=e.node,n=!!t.group,i=!!t.detailNode,o=n||i,a=t.expanded,l=t.uiLevel*24,r=document.createElement("span");if(r.className="ag-group-cell-renderer",r.style.paddingLeft=`${l}px`,o){const h=document.createElement("span");h.className="ag-group-value-expanded-icon",h.classList.add(a?"ag-expanded":"ag-contracted"),h.innerHTML=a?lo:ro,r.appendChild(h);const u=document.createElement("span");u.className="ag-group-value";const f=(d=e.colDef.cellRendererParams)==null?void 0:d.innerRenderer;if(typeof f=="function"){const g=f({...e,value:e.value,valueFormatted:e.valueFormatted});g instanceof HTMLElement?u.appendChild(g):typeof g=="string"&&(u.innerHTML=g)}else u.textContent=Qs(e.value);if(r.appendChild(u),n&&t.allChildrenCount!==null&&!((c=e.colDef.cellRendererParams)!=null&&c.suppressCount)){const g=document.createElement("span");g.className="ag-group-child-count",g.textContent=` (${t.allChildrenCount})`,r.appendChild(g)}}else{const h=document.createElement("span");h.className="ag-group-value";const u=(p=e.colDef.cellRendererParams)==null?void 0:p.innerRenderer;if(typeof u=="function"){const f=u({...e,value:e.value,valueFormatted:e.valueFormatted});f instanceof HTMLElement?h.appendChild(f):typeof f=="string"&&(h.innerHTML=f)}else h.textContent=e.valueFormatted??String(e.value??"");r.appendChild(h)}this.eGui=r}getGui(){return this.eGui}refresh(e){return!1}}class Ws{constructor(e){y(this,"eGui");y(this,"eCheckbox");this.eGui=document.createElement("span"),this.eGui.className="ag-cell-checkbox";const t=document.createElement("input");t.type="checkbox",t.className="ag-native-checkbox",t.checked=!!e.node.selected,t.addEventListener("click",n=>n.stopPropagation()),t.addEventListener("change",()=>{e.node.setSelected(t.checked,!1,"uiSelectChanged")}),this.eCheckbox=t,this.eGui.appendChild(t)}getGui(){return this.eGui}refresh(e){return this.eCheckbox.checked=!!e.node.selected,!0}}const Us='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M8 3l5 7H3l5-7z"/></svg>',js='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M8 13L3 6h10L8 13z"/></svg>';class Ks{constructor(e){y(this,"eGui");y(this,"eArrow");y(this,"eOld");y(this,"eNew");y(this,"lastValue");y(this,"flashTimer",null);this.eGui=document.createElement("span"),this.eGui.className="ag-animate-show-change-cell-renderer",this.eArrow=document.createElement("span"),this.eArrow.className="ag-value-change-arrow",this.eArrow.style.display="none",this.eOld=document.createElement("span"),this.eOld.className="ag-value-change-old",this.eOld.style.display="none",this.eNew=document.createElement("span"),this.eNew.className="ag-value-change-new",this.eGui.appendChild(this.eArrow),this.eGui.appendChild(this.eOld),this.eGui.appendChild(this.eNew),this.eNew.textContent=this.formatValue(e),this.lastValue=e.value}formatValue(e){const t=e.valueFormatted??e.value;return t==null?"":String(t)}getGui(){return this.eGui}refresh(e){const t=e.value;if(t!==this.lastValue){const n=typeof t=="number"&&typeof this.lastValue=="number"?t>this.lastValue:String(t)>String(this.lastValue),i=this.eNew.textContent??"";this.eArrow.innerHTML=n?Us:js,this.eArrow.style.display="",this.eArrow.classList.add(n?"ag-value-change-delta-up":"ag-value-change-delta-down"),this.eOld.textContent=i,this.eOld.style.display="",this.eNew.textContent=this.formatValue(e),this.lastValue=t,this.eGui.classList.remove("ag-value-change-value-highlight"),this.eGui.offsetWidth,this.eGui.classList.add("ag-value-change-value-highlight",n?"ag-value-change-delta-up":"ag-value-change-delta-down"),this.flashTimer&&clearTimeout(this.flashTimer),this.flashTimer=setTimeout(()=>{this.eGui.classList.remove("ag-value-change-value-highlight","ag-value-change-delta-up","ag-value-change-delta-down"),this.eArrow.style.display="none",this.eOld.style.display="none"},1e3)}return!0}destroy(){this.flashTimer&&clearTimeout(this.flashTimer)}}class Ys{constructor(e){y(this,"eGui");this.eGui=document.createElement("span"),this.eGui.className="ag-row-number-cell",this.eGui.textContent=String(e.rowIndex+1)}getGui(){return this.eGui}refresh(e){return this.eGui.textContent=String(e.rowIndex+1),!0}}class Xs{constructor(e){y(this,"eGui");var r,d;const t=document.createElement("span");t.className="ag-sparkline-cell";const n=e.value||[],i=e.sparklineOptions||((d=(r=e.column)==null?void 0:r.cellRendererParams)==null?void 0:d.sparklineOptions)||{},o=e.column.width||100,a=i.height||24,l=Jt(n,Math.max(20,o-16),a,i);t.appendChild(l),this.eGui=t}getGui(){return this.eGui}refresh(e){var l,r;const t=e.value||[],n=e.sparklineOptions||((r=(l=e.column)==null?void 0:l.cellRendererParams)==null?void 0:r.sparklineOptions)||{},i=e.column.width||100,o=n.height||24;this.eGui.innerHTML="";const a=Jt(t,Math.max(20,i-16),o,{type:n.type,direction:n.direction});return this.eGui.appendChild(a),!0}}function Jt(s,e,t,n={}){var m,w,k;const i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttribute("width",String(Math.max(20,e))),i.setAttribute("height",String(t)),i.setAttribute("class","ag-sparkline");const o=(s||[]).map(C=>typeof C=="number"?C:Number((C==null?void 0:C.value)??0));if(!o||o.length<1)return i;const a=n.type||"line",l=Math.min(...o,0),d=Math.max(...o,0)-l||1,c=((m=n.tooltip)==null?void 0:m.enabled)===!0,p=((w=n.axis)==null?void 0:w.type)||"number",h=((k=n.pointsOfInterest)==null?void 0:k.show)===!0,u=(C,b)=>p==="category"?`${C+1}: ${b}`:String(b);if(h&&o.length>1){const C=o.indexOf(Math.min(...o)),b=o.indexOf(Math.max(...o)),N=e/Math.max(1,o.length-1),I=G=>t-2-(G-l)/d*(t-4),E=(G,x)=>{const T=document.createElementNS("http://www.w3.org/2000/svg","circle");T.setAttribute("cx",String(G*N)),T.setAttribute("cy",String(I(o[G]))),T.setAttribute("r","2.5"),T.setAttribute("fill",x),i.appendChild(T)};E(0,"#4caf50"),E(o.length-1,"#f44336"),E(C,"#2196f3"),E(b,"#ff9800")}if(c){const C=document.createElementNS("http://www.w3.org/2000/svg","title");C.textContent=o.map((b,N)=>u(N,b)).join(`
|
|
3
|
-
`),i.appendChild(C),i.style.cursor="default"}if(a==="bar"){const C=n.direction==="vertical",b=o.length;if(C){const N=Math.max(1,e/b-1),I=t-2-(0-l)/d*(t-4);o.forEach((E,G)=>{const x=G*(e/b),T=t-2-(E-l)/d*(t-4),A=document.createElementNS("http://www.w3.org/2000/svg","rect");A.setAttribute("x",String(x)),A.setAttribute("width",String(N)),A.setAttribute("y",String(Math.min(T,I))),A.setAttribute("height",String(Math.max(1,Math.abs(I-T)))),A.setAttribute("fill","currentColor"),i.appendChild(A)})}else{const N=Math.max(1,t/b-1),I=2+(0-l)/d*(e-4);o.forEach((E,G)=>{const x=G*(t/b),T=2+(E-l)/d*(e-4),A=document.createElementNS("http://www.w3.org/2000/svg","rect");A.setAttribute("y",String(x)),A.setAttribute("height",String(N)),A.setAttribute("x",String(Math.min(T,I))),A.setAttribute("width",String(Math.max(1,Math.abs(I-T)))),A.setAttribute("fill","currentColor"),i.appendChild(A)})}return i}const f=e/Math.max(1,o.length-1),g=o.map((C,b)=>{const N=b*f,I=t-2-(C-l)/d*(t-4);return`${N.toFixed(1)},${I.toFixed(1)}`});if(a==="area"){const C=document.createElementNS("http://www.w3.org/2000/svg","polygon");C.setAttribute("points",`0,${t} ${g.join(" ")} ${e},${t}`),C.setAttribute("fill","currentColor"),C.setAttribute("opacity","0.2"),i.appendChild(C)}const v=document.createElementNS("http://www.w3.org/2000/svg","polyline");return v.setAttribute("points",g.join(" ")),v.setAttribute("fill","none"),v.setAttribute("stroke","currentColor"),v.setAttribute("stroke-width","1.5"),i.appendChild(v),i}class Zs{constructor(e){y(this,"eGui");this.eGui=document.createElement("span"),this.eGui.className="ag-row-drag",this.eGui.innerHTML=Kn,e.registerRowDragger&&e.registerRowDragger(t=>{this.eGui.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,clientX:t.clientX,clientY:t.clientY}))})}getGui(){return this.eGui}}const Vt={agGroupCellRenderer:s=>new _s(s),agCheckboxCellRenderer:s=>new Ws(s),agSparklineCellRenderer:s=>new Xs(s),agAnimateShowChangeCellRenderer:s=>new Ks(s),agRowNumberCellRenderer:s=>new Ys(s),agRowDragComp:s=>new Zs(s)};function Qs(s){return s==null?"":String(s)}class Js{constructor(e){y(this,"eGui");y(this,"cancelled",!1);this.eGui=document.createElement("input"),this.eGui.type="text",this.eGui.className="ag-cell-editor-input",this.eGui.value=e.value??"",this.eGui.addEventListener("keydown",t=>{var n;return(n=e.onKeyDown)==null?void 0:n.call(e,t)})}getGui(){return this.eGui}getValue(){return this.cancelled?void 0:this.eGui.value}focusIn(){this.eGui.focus(),this.eGui.select()}}class eo{constructor(e){y(this,"eGui");y(this,"eInput");y(this,"cancelled",!1);var i,o;const t=document.createElement("div");t.className="ag-cell-editor-number";const n=document.createElement("input");if(n.type="text",n.className="ag-cell-editor-input",n.value=e.value??"",(o=(i=e.column)==null?void 0:i.cellEditorParams)!=null&&o.showStepperButtons){const a=document.createElement("span");a.className="ag-cell-editor-stepper ag-cell-editor-stepper-up",a.innerHTML="▲",a.addEventListener("mousedown",r=>{var d,c;r.preventDefault(),r.preventDefault(),n.value=String(Number(n.value||0)+(((c=(d=e.column)==null?void 0:d.cellEditorParams)==null?void 0:c.step)??1))});const l=document.createElement("span");l.className="ag-cell-editor-stepper ag-cell-editor-stepper-down",l.innerHTML="▼",l.addEventListener("mousedown",r=>{var d,c;r.preventDefault(),n.value=String(Number(n.value||0)-(((c=(d=e.column)==null?void 0:d.cellEditorParams)==null?void 0:c.step)??1))}),t.appendChild(a),t.appendChild(n),t.appendChild(l)}else t.appendChild(n);this.eGui=t,this.eInput=n,this.eInput.addEventListener("keydown",a=>{var l;return(l=e.onKeyDown)==null?void 0:l.call(e,a)})}getGui(){return this.eGui}getValue(){if(this.cancelled)return;const e=Number(this.eInput.value);return isNaN(e)?null:e}focusIn(){this.eInput.focus(),this.eInput.select()}}class to{constructor(e){y(this,"eGui");y(this,"cancelled",!1);var n,i;this.eGui=document.createElement("select"),this.eGui.className="ag-cell-editor-select";const t=e.values||((i=(n=e.column)==null?void 0:n.cellEditorParams)==null?void 0:i.values)||[];for(const o of t){const a=document.createElement("option");a.value=String(o),a.textContent=String(o),this.eGui.appendChild(a)}this.eGui.value=String(e.value??""),this.eGui.addEventListener("keydown",o=>{var a;return(a=e.onKeyDown)==null?void 0:a.call(e,o)})}getGui(){return this.eGui}getValue(){return this.cancelled?void 0:this.eGui.value}focusIn(){this.eGui.focus()}}class no{constructor(e){y(this,"eGui");y(this,"cancelled",!1);this.eGui=document.createElement("input"),this.eGui.type="date",this.eGui.className="ag-cell-editor-input";const t=e.value instanceof Date?e.value:e.value?new Date(e.value):null;t&&!isNaN(t.getTime())&&(this.eGui.value=t.toISOString().slice(0,10))}getGui(){return this.eGui}getValue(){if(!this.cancelled)return this.eGui.value?new Date(this.eGui.value):null}focusIn(){this.eGui.focus()}}class io{constructor(e){y(this,"eGui");y(this,"cancelled",!1);this.eGui=document.createElement("textarea"),this.eGui.className="ag-cell-editor-textarea",this.eGui.value=e.value??""}getGui(){return this.eGui}getValue(){return this.cancelled?void 0:this.eGui.value}focusIn(){this.eGui.focus(),this.eGui.select()}}function so(s,e){if(!e)return D(s);const t=s.toLowerCase().indexOf(e.toLowerCase());return t<0?D(s):D(s.slice(0,t))+'<span class="ag-rich-select-highlight">'+D(s.slice(t,t+e.length))+"</span>"+D(s.slice(t+e.length))}class oo{constructor(e){y(this,"eGui");y(this,"eInput");y(this,"ePopup",null);y(this,"eList",null);y(this,"values",[]);y(this,"filtered",[]);y(this,"activeIndex",0);y(this,"selectedValue");y(this,"cancelled",!1);var t,n;this.params=e,this.values=e.values||((n=(t=e.column)==null?void 0:t.cellEditorParams)==null?void 0:n.values)||[],this.selectedValue=e.value,this.eGui=document.createElement("div"),this.eGui.className="ag-rich-select",this.eInput=document.createElement("input"),this.eInput.type="text",this.eInput.className="ag-rich-select-input",this.eInput.value=e.value===null||e.value===void 0?"":String(e.value),this.eInput.readOnly=e.allowTyping!==!0,this.eGui.appendChild(this.eInput),this.eGui.addEventListener("mousedown",i=>{i.stopPropagation()}),this.eInput.addEventListener("input",()=>{e.allowTyping===!0&&(this.selectedValue=this.eInput.value,this.renderList())}),this.eInput.addEventListener("keydown",i=>this.onKeyDown(i))}getGui(){return this.eGui}focusIn(){this.eInput.focus(),this.eInput.select(),this.openPopup()}afterGuiAttached(){this.openPopup()}openPopup(){var a,l;if(this.ePopup)return;const e=document.createElement("div");e.className="ag-rich-select-popup";const t=this.eGui.getBoundingClientRect();if(e.style.position="fixed",e.style.left=`${t.left}px`,e.style.top=`${t.bottom}px`,e.style.minWidth=`${Math.max(t.width,180)}px`,e.style.zIndex="1000",(this.eGui.closest(".ag-root")||document.body).appendChild(e),this.ePopup=e,ao(this.params)){const r=document.createElement("input");r.type="text",r.className="ag-rich-select-search",r.placeholder=((l=(a=this.params).t)==null?void 0:l.call(a,"search"))??"搜索…",r.value="",r.addEventListener("input",()=>this.renderList(r.value)),e.appendChild(r),setTimeout(()=>r.focus(),0)}const i=document.createElement("div");i.className="ag-rich-select-list",e.appendChild(i),this.eList=i,this.renderList();const o=r=>{!e.contains(r.target)&&!this.eGui.contains(r.target)&&(this.closePopup(),document.removeEventListener("mousedown",o,!0))};document.addEventListener("mousedown",o,!0)}renderList(e=""){var n,i;if(!this.eList)return;if(this.eList.innerHTML="",this.filtered=this.values.filter(o=>{if(!e)return!0;const a=String(o).toLowerCase(),l=e.toLowerCase().split(/\s+/).filter(Boolean);return this.params.searchType==="matchAll"?l.every(r=>a.includes(r)):l.some(r=>a.includes(r))}),this.filtered.forEach((o,a)=>{const l=document.createElement("div");l.className="ag-rich-select-item",a===this.activeIndex&&l.classList.add("ag-active"),String(o)===String(this.selectedValue)&&l.classList.add("ag-selected");const r=this.params.cellRenderer;if(typeof r=="function"){const d=r({value:o,valueFormatted:String(o)});d instanceof HTMLElement?l.appendChild(d):l.textContent=String(d)}else l.innerHTML=so(String(o),e);l.addEventListener("click",d=>{d.stopPropagation(),this.commit(o)}),l.addEventListener("mousedown",d=>d.preventDefault()),this.eList.appendChild(l)}),this.filtered.length===0){const o=document.createElement("div");o.className="ag-rich-select-empty",o.textContent=((i=(n=this.params).t)==null?void 0:i.call(n,"noMatches"))??"无匹配项",this.eList.appendChild(o)}const t=this.eList.children[this.activeIndex];t&&typeof t.scrollIntoView=="function"&&t.scrollIntoView({block:"nearest"})}onKeyDown(e){if(e.key==="ArrowDown")e.preventDefault(),this.activeIndex=Math.min(this.filtered.length-1,this.activeIndex+1),this.renderList();else if(e.key==="ArrowUp")e.preventDefault(),this.activeIndex=Math.max(0,this.activeIndex-1),this.renderList();else if(e.key==="Enter"){e.preventDefault();const t=this.filtered[this.activeIndex];t!==void 0?this.commit(t):this.closePopup()}else if(e.key==="Escape")e.preventDefault(),this.cancelled=!0,this.closePopup();else if(e.key==="Tab"){e.preventDefault();const t=this.filtered[this.activeIndex];t!==void 0?this.commit(t):this.closePopup()}}commit(e){this.selectedValue=e,this.eInput.value=String(e),this.closePopup(),setTimeout(()=>{var t,n;return(n=(t=this.params).onKeyDown)==null?void 0:n.call(t,{key:"Enter",preventDefault:()=>{},keyCode:13})},0)}closePopup(){var e;(e=this.ePopup)==null||e.remove(),this.ePopup=null,this.eList=null}getValue(){return this.cancelled?void 0:this.selectedValue}isCancelAfterEnd(){return this.cancelled}destroy(){this.closePopup()}}function ao(s){var e,t;return(s==null?void 0:s.allowTyping)===!0||((t=(e=s==null?void 0:s.column)==null?void 0:e.cellEditorParams)==null?void 0:t.allowTyping)===!0}const et={agTextCellEditor:s=>new Js(s),agNumberCellEditor:s=>new eo(s),agSelectCellEditor:s=>new to(s),agDateCellEditor:s=>new no(s),agLargeTextCellEditor:s=>new io(s),agRichSelectCellEditor:s=>new oo(s)},ro='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M6 4l4 4-4 4V4z"/></svg>',lo='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M4 6l4 4 4-4H4z"/></svg>',Kn='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><circle cx="5" cy="3" r="1.4"/><circle cx="11" cy="3" r="1.4"/><circle cx="5" cy="8" r="1.4"/><circle cx="11" cy="8" r="1.4"/><circle cx="5" cy="13" r="1.4"/><circle cx="11" cy="13" r="1.4"/></svg>',co='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><circle cx="3" cy="8" r="1.4"/><circle cx="8" cy="8" r="1.4"/><circle cx="13" cy="8" r="1.4"/></svg>',uo='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M1 2h14l-5.2 6v5.3L6.2 15V8L1 2z"/></svg>',ho='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M8 3l4.5 7h-9L8 3z"/></svg>',po='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M8 13L3.5 6h9L8 13z"/></svg>',Yn='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M6 11.2L2.8 8l-1 1L6 13.2 14.6 4.6l-1-1L6 11.2z"/></svg>';class fo{constructor(e,t){this.grid=e,this.popupService=t}openColumnMenu(e,t){const{ePopup:n,close:i}=this.popupService.createPopup(220,"ag-column-menu");n.innerHTML="";const o=document.createElement("div");o.className="ag-popup-title",o.textContent=e.headerName||e.field||e.colId,n.appendChild(o);const a=(r,d)=>{const c=document.createElement("div");c.className="ag-menu-item",d.disabled&&c.classList.add("ag-menu-item-disabled"),d.checked&&c.classList.add("ag-menu-item-active");const p=document.createElement("span");p.className="ag-menu-item-check",d.checked&&(p.innerHTML=Yn),c.appendChild(p);const h=document.createElement("span");if(h.className="ag-menu-item-label",h.textContent=r,c.appendChild(h),d.shortcut){const u=document.createElement("span");u.className="ag-menu-item-shortcut",u.textContent=d.shortcut,c.appendChild(u)}return!d.disabled&&d.onClick&&c.addEventListener("click",()=>{d.onClick(),i()}),n.appendChild(c),c},l=r=>{const d=document.createElement("div");d.className="ag-menu-section",d.textContent=r,n.appendChild(d)};e.sortable&&(l(this.grid.t("sort")),a(this.grid.t("sortAscending"),{checked:e.sort==="asc",onClick:()=>{this.grid.getColumnApi().applyColumnState([{colId:e.colId,sort:"asc",sortIndex:0}]),this.grid.getSortService().onSortChanged("uiColumnSorted")}}),a(this.grid.t("sortDescending"),{checked:e.sort==="desc",onClick:()=>{this.grid.getColumnApi().applyColumnState([{colId:e.colId,sort:"desc",sortIndex:0}]),this.grid.getSortService().onSortChanged("uiColumnSorted")}})),e.resizable&&(l(this.grid.t("columnSize")),a(this.grid.t("autosizeThisColumn"),{onClick:()=>this.grid.getColumnApi().autoSizeColumn(e)}),a(this.grid.t("autosizeAllColumns"),{onClick:()=>this.grid.getColumnApi().autoSizeAllColumns()})),e.lockPosition||(l(this.grid.t("pinColumn")),a(this.grid.t("pinLeft"),{checked:e.pinned==="left",onClick:()=>this.grid.getColumnApi().setColumnPinned(e,"left")}),a(this.grid.t("noPin"),{checked:e.pinned===null,onClick:()=>this.grid.getColumnApi().setColumnPinned(e,null)}),a(this.grid.t("pinRight"),{checked:e.pinned==="right",onClick:()=>this.grid.getColumnApi().setColumnPinned(e,"right")})),e.filter?(l(this.grid.t("filter")),a(this.grid.t("openFilter"),{onClick:()=>this.grid.getFilterGui().openFilter(e,t)}),e.filter!=="multi"&&a(this.grid.t("openMultiFilter"),{onClick:()=>this.grid.getFilterGui().openMultiFilter(e,t)}),this.grid.getOptions().enableAdvancedFilter&&a(this.grid.t("openAdvancedFilter"),{onClick:()=>this.grid.getFilterGui().openAdvancedFilter(t)}),a(this.grid.t("clearFilter"),{disabled:!this.grid.getFilterService().isFilterActive(e),onClick:()=>this.grid.getFilterService().setColumnFilterModel(e,null)})):this.grid.getOptions().enableAdvancedFilter&&(l(this.grid.t("filter")),a(this.grid.t("openAdvancedFilter"),{onClick:()=>this.grid.getFilterGui().openAdvancedFilter(t)})),l(this.grid.t("formula")),a(this.grid.getFormulaEditorService().isFormulaColumn(e)?this.grid.t("editFormula"):this.grid.t("addFormula"),{onClick:()=>this.grid.getFormulaEditorService().openFormulaEditor(e,t)}),l(this.grid.t("visibility")),a(this.grid.t("hideColumn"),{onClick:()=>this.grid.getColumnApi().setColumnVisible(e,!1)}),a(this.grid.t("chooseColumns"),{onClick:()=>{this.grid.getApi().openToolPanel("columns")}}),this.popupService.positionAt(n,t)}}const Xn={copy:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M4 2h7v2h2v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-2H3V4a2 2 0 0 1 1-2zm1 2v8h1V4H5z"/></svg>',copyWithHeaders:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M2 1h12v2H2V1zm2 3h8v9H4V4z"/></svg>',paste:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M5 2h6v2H5V2zM3 4h10v10H3V4z"/></svg>',csv:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M3 1h7l3 3v11H3V1zm6 1v3h3v9H4V2h5z"/></svg>',excel:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M3 1h7l3 3v11H3V1zm6 1v3h3v9H4V2h5z"/></svg>',reset:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M8 2a6 6 0 1 0 5.7 4H11l3 3 3-3h-2.3A7 7 0 1 1 8 1v1z"/></svg>',pin:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M9 1l6 6-2 1-1 4-3-3-4 4v-3l3-3-1-3 4-1z"/></svg>'};class go{constructor(e,t){this.grid=e,this.popupService=t}getDefaultItems(e){return[{name:"copy",label:this.grid.t("copy"),icon:"copy",shortcut:"Ctrl+C",action:()=>this.grid.getApi().copyToClipboard()},{name:"copyWithHeaders",label:this.grid.t("copyWithHeaders"),icon:"copyWithHeaders",action:()=>this.grid.getApi().copyToClipboard({includeHeaders:!0})},{name:"paste",label:this.grid.t("paste"),icon:"paste",shortcut:"Ctrl+V",action:()=>this.grid.getApi().pasteFromClipboard()},{name:"sep1",separator:!0},{name:"export",label:this.grid.t("export"),icon:"excel",subMenu:[{name:"csvExport",label:this.grid.t("csvExport"),icon:"csv",action:()=>this.grid.getApi().exportToCsv({fileName:"export.csv"})},{name:"excelExport",label:this.grid.t("excelExport"),icon:"excel",action:()=>this.grid.getApi().exportToExcel({fileName:"export.xlsx"})},{name:"excelExportSelected",label:"Excel Export (Selected)",icon:"excel",disabled:!this.hasSelection(),action:()=>this.grid.getApi().exportToExcel({fileName:"export.xlsx",onlySelected:!0})}]},{name:"sep2",separator:!0},{name:"resetColumns",label:this.grid.t("resetColumns"),icon:"reset",action:()=>this.grid.getColumnApi().resetColumnState()},{name:"autoSizeAll",label:"Auto-size All Columns",action:()=>this.grid.getColumnApi().autoSizeAllColumns()},{name:"sizeToFit",label:this.grid.t("sizeToFit"),action:()=>this.grid.getApi().sizeColumnsToFit()},{name:"sep3",separator:!0},{name:"expandAll",label:this.grid.t("expandAll"),disabled:!this.isGroupActive(),action:()=>this.grid.getApi().expandAll()},{name:"collapseAll",label:this.grid.t("collapseAll"),disabled:!this.isGroupActive(),action:()=>this.grid.getApi().collapseAll()},{name:"pinRow",label:this.grid.t("pinRow"),icon:"pin",disabled:!e.node||e.node.group===!0,subMenu:[{name:"pinTop",label:this.grid.t("pinToTop"),action:()=>this.grid.setRowNodePinned(e.node,"top")},{name:"pinBottom",label:this.grid.t("pinToBottom"),action:()=>this.grid.setRowNodePinned(e.node,"bottom")},{name:"unpin",label:this.grid.t("unpin"),action:()=>this.grid.setRowNodePinned(e.node,null)}]}]}hasSelection(){return this.grid.getApi().getSelectedNodes().length>0}isGroupActive(){return this.grid.getColumnModel().isRowGroupActive()}openContextMenu(e,t){if(this.grid.getOptions().suppressContextMenu)return;const n=this.grid.getOptions().contextMenuItems;let i;typeof n=="function"?i=n({column:t.column,node:t.node,api:this.grid.getApi()}):Array.isArray(n)?i=n:i=this.getDefaultItems(t);const{ePopup:o,close:a}=this.popupService.createPopup(220,"ag-context-menu");o.innerHTML="",this.buildMenu(o,i,a),this.popupService.positionAt(o,e)}buildMenu(e,t,n){for(const i of t){if(typeof i=="string")continue;if(i.separator){const r=document.createElement("div");r.className="ag-menu-separator",e.appendChild(r);continue}const o=document.createElement("div");o.className="ag-menu-item",i.disabled&&o.classList.add("ag-menu-item-disabled"),i.cssClasses&&o.classList.add(...i.cssClasses);const a=document.createElement("span");a.className="ag-menu-item-icon",i.icon&&Xn[i.icon]&&(a.innerHTML=Xn[i.icon]),o.appendChild(a);const l=document.createElement("span");if(l.className="ag-menu-item-label",l.textContent=i.label??i.name,o.appendChild(l),i.shortcut){const r=document.createElement("span");r.className="ag-menu-item-shortcut",r.textContent=i.shortcut,o.appendChild(r)}if(i.subMenu){const r=document.createElement("span");r.className="ag-menu-item-arrow",r.textContent="›",o.appendChild(r),o.addEventListener("mouseenter",()=>{e.querySelectorAll(".ag-menu-popup-sub").forEach(p=>p.remove());const c=document.createElement("div");c.className="ag-menu-popup-sub",this.buildMenu(c,i.subMenu,n),e.appendChild(c)}),o.addEventListener("mouseleave",()=>{setTimeout(()=>{var c;o.matches(":hover")||((c=o.parentElement)==null?void 0:c.querySelector(":hover"))||e.querySelectorAll(".ag-menu-popup-sub").forEach(p=>p.remove())},200)})}else!i.disabled&&i.action&&o.addEventListener("click",()=>{i.action(),n()});e.appendChild(o)}}}class mo{constructor(e,t){y(this,"editing",null);y(this,"fullRowEditors",null);y(this,"fullRowNode",null);y(this,"focusedCell",null);this.grid=e,this.eventService=t}getFocusedCell(){return this.focusedCell}setFocusedCell(e,t){this.focusedCell={rowIndex:e,column:t,rowNode:this.grid.getDisplayedRowAtIndex(e)},this.clearFocusClass();const n=this.findCellElement(t,e);n==null||n.classList.add("ag-cell-focus"),n&&typeof n.scrollIntoView=="function"&&n.scrollIntoView({block:"nearest",inline:"nearest"}),this.eventService.dispatchEvent("cellFocused",{rowIndex:e,column:t,api:this.grid.getApi(),forceBrowserFocus:!0})}clearFocusedCell(){this.focusedCell=null,this.clearFocusClass(),this.grid.getRowRenderer().refreshCells({force:!0})}clearFocusClass(){const e=this.grid.getRootElement();for(const t of e.querySelectorAll(".ag-cell-focus"))t.classList.remove("ag-cell-focus")}findCellElement(e,t){const n=this.grid.getDisplayedRowAtIndex(t);if(!n)return null;const o=this.grid.getRowRenderer().getRowComps().get(n.id);return o&&o.getCellElements().find(a=>a.dataset.colid===e.colId)||null}isEditing(){return this.editing!==null||this.fullRowEditors!==null}getEditingCells(){return this.editing?[{rowIndex:this.editing.rowIndex,colId:this.editing.column.colId}]:[]}startEditingCell(e){var d;const t=typeof e.colKey=="string"?this.grid.getColumn(e.colKey):e.colKey;if(!t)return;const n=this.grid.getDisplayedRowAtIndex(e.rowIndex);if(!n||!this.grid.isCellEditable(t,n))return;if(this.stopEditing(!1),this.grid.getOptions().editType==="fullRow"){this.startFullRowEditing(e.rowIndex,n,e.charPress);return}const i=this.findCellElement(t,e.rowIndex);if(!i)return;const o=Ce(t,n,this.grid.getApi()),a={value:e.charPress!==void 0?e.charPress:o,oldValue:o,data:n.data,node:n,column:t,colDef:t.colDef,rowIndex:e.rowIndex,api:this.grid.getApi(),t:c=>this.grid.t(c),onKeyDown:c=>this.onEditorKeyDown(c),values:(d=t.cellEditorParams)==null?void 0:d.values,...t.cellEditorParams};let l;if(typeof t.cellEditor=="string")l=(et[t.cellEditor]||et.agTextCellEditor)(a);else if(typeof t.cellEditor=="function"){const c=t.cellEditor(a);l=c&&typeof c.getGui=="function"?c:{getGui:()=>c,getValue:()=>c==null?void 0:c.value}}else{const c=t.type==="numberColumn"?"agNumberCellEditor":t.type==="dateColumn"?"agDateCellEditor":"agTextCellEditor";l=et[c](a)}if(!l)return;this.editing={rowIndex:e.rowIndex,column:t,rowNode:n,eCell:i,editor:l,startedValue:o},i.classList.add("ag-cell-inline-editing");const r=l.getGui();r.classList.add("ag-cell-editor"),i.appendChild(r),i.classList.add("ag-cell-editing"),l.focusIn&&l.focusIn(),l.afterGuiAttached&&l.afterGuiAttached(),this.eventService.dispatchEvent("cellEditingStarted",{rowIndex:e.rowIndex,column:t,node:n,api:this.grid.getApi()}),this.eventService}startFullRowEditing(e,t,n){const i=[...this.grid.getColumns().left,...this.grid.getColumns().center,...this.grid.getColumns().right].filter(o=>this.grid.isCellEditable(o,t));this.fullRowEditors=[],this.fullRowNode=t;for(const o of i){const a=this.findCellElement(o,e);if(!a)continue;const l=Ce(o,t,this.grid.getApi()),r=this.createEditor(o,t,e,l,n);if(!r)continue;a.classList.add("ag-cell-inline-editing","ag-cell-editing");const d=r.getGui();d.classList.add("ag-cell-editor"),a.appendChild(d),this.fullRowEditors.push({column:o,editor:r,eCell:a,startedValue:l})}this.eventService.dispatchEvent("rowEditingStarted",{rowIndex:e,node:t,api:this.grid.getApi(),data:t.data})}createEditor(e,t,n,i,o){var r;const a={value:o!==void 0?o:i,oldValue:i,data:t.data,node:t,column:e,colDef:e.colDef,rowIndex:n,api:this.grid.getApi(),t:d=>this.grid.t(d),onKeyDown:d=>this.onEditorKeyDown(d),values:(r=e.cellEditorParams)==null?void 0:r.values,...e.cellEditorParams};if(typeof e.cellEditor=="string")return(et[e.cellEditor]||et.agTextCellEditor)(a);if(typeof e.cellEditor=="function"){const d=e.cellEditor(a);return d&&typeof d.getGui=="function"?d:{getGui:()=>d,getValue:()=>d==null?void 0:d.value}}const l=e.type==="numberColumn"?"agNumberCellEditor":e.type==="dateColumn"?"agDateCellEditor":"agTextCellEditor";return et[l](a)}stopEditing(e=!1){var d,c,p,h;if(this.fullRowEditors)return this.stopFullRowEditing(e);if(!this.editing)return!1;const{rowIndex:t,column:n,rowNode:i,eCell:o,editor:a,startedValue:l}=this.editing;this.editing=null,o.classList.remove("ag-cell-inline-editing","ag-cell-editing");let r=e?l:a.getValue();if(r===void 0&&!e)return(d=o.querySelector(".ag-cell-editor"))==null||d.remove(),this.eventService.dispatchEvent("cellEditingStopped",{rowIndex:t,column:n,node:i,api:this.grid.getApi()}),!1;if(!e){r=Bn(n,r);const u=this.applyValueSetter(n,i,r);if(u===!1)return o.classList.add("ag-cell-invalid"),setTimeout(()=>o.classList.remove("ag-cell-invalid"),1500),this.startEditingCell({rowIndex:t,colKey:n}),!1;r=u}return(c=o.querySelector(".ag-cell-editor"))==null||c.remove(),a.destroy&&a.destroy(),this.eventService.dispatchEvent("cellEditingStopped",{rowIndex:t,column:n,node:i,api:this.grid.getApi()}),!e&&!Zn(r,l)&&(this.grid.setCellValue(n,i,r,"edit",l),this.eventService.dispatchEvent("cellValueChanged",{oldValue:l,newValue:r,value:r,data:i.data,node:i,column:n,colDef:n.colDef,api:this.grid.getApi(),source:"edit"}),(h=(p=this.grid.getOptions()).onCellValueChanged)==null||h.call(p,{oldValue:l,newValue:r,value:r,data:i.data,node:i,column:n,colDef:n.colDef,api:this.grid.getApi()}),this.grid.refreshCells({rowNodes:[i],columns:[n],flash:this.grid.getOptions().enableCellChangeFlash!==!1})),!0}applyValueSetter(e,t,n){if(e.valueSetter){if(e.valueSetter({oldValue:Ce(e,t,this.grid.getApi()),newValue:n,data:t.data,node:t,column:e,api:this.grid.getApi(),colDef:e.colDef})===!1)return!1}else t.setDataValue(e.colId,n);return n}stopFullRowEditing(e){var o,a,l;const t=this.fullRowEditors,n=this.fullRowNode;if(this.fullRowEditors=null,this.fullRowNode=null,!t)return!1;for(const r of t)r.eCell.classList.remove("ag-cell-inline-editing","ag-cell-editing"),(o=r.eCell.querySelector(".ag-cell-editor"))==null||o.remove(),r.editor.destroy&&r.editor.destroy();if(e)return this.eventService.dispatchEvent("rowEditingStopped",{api:this.grid.getApi()}),!1;const i=[];for(const r of t){if(!n)break;let d=r.editor.getValue();d!==void 0&&(d=Bn(r.column,d),Zn(d,r.startedValue)||i.push({column:r.column,rowNode:n,newValue:d,oldValue:r.startedValue}))}this.eventService.dispatchEvent("rowEditingStopped",{api:this.grid.getApi(),data:n==null?void 0:n.data});for(const r of i)this.grid.setCellValue(r.column,r.rowNode,r.newValue,"edit",r.oldValue),this.eventService.dispatchEvent("cellValueChanged",{oldValue:r.oldValue,newValue:r.newValue,value:r.newValue,data:r.rowNode.data,node:r.rowNode,column:r.column,colDef:r.column.colDef,api:this.grid.getApi(),source:"edit"}),(l=(a=this.grid.getOptions()).onCellValueChanged)==null||l.call(a,{oldValue:r.oldValue,newValue:r.newValue,value:r.newValue,data:r.rowNode.data,node:r.rowNode,column:r.column,colDef:r.column.colDef,api:this.grid.getApi()}),this.grid.refreshCells({rowNodes:[r.rowNode],columns:[r.column],flash:this.grid.getOptions().enableCellChangeFlash!==!1});return!0}onEditorKeyDown(e){if(e.key==="Enter"||e.keyCode===13){e.preventDefault();const t=this.editing;this.stopEditing(),t&&this.grid.getOptions().enterNavigatesVerticallyAfterEdit!==!1&&this.moveFocus(1,0)}else if(e.key==="Escape"||e.keyCode===27)e.preventDefault(),this.stopEditing(!0);else if(e.key==="Tab"||e.keyCode===9){e.preventDefault(),this.stopEditing(),this.moveFocus(0,e.shiftKey?-1:1);const t=this.focusedCell;t&&this.grid.isCellEditable(t.column,t.rowNode)&&this.startEditingCell({rowIndex:t.rowIndex,colKey:t.column})}}onGridKeyDown(e){const t=e.key;if(this.editing){t==="Escape"&&this.stopEditing(!0);return}const n=this.focusedCell;switch(e.keyCode){case 13:e.preventDefault(),n&&(this.grid.isCellEditable(n.column,n.rowNode)?this.startEditingCell({rowIndex:n.rowIndex,colKey:n.column}):this.moveFocus(1,0));break;case 9:e.preventDefault(),this.moveFocus(0,e.shiftKey?-1:1);break;case 8:case 46:n&&this.grid.isCellEditable(n.column,n.rowNode)&&(e.preventDefault(),this.grid.setCellValue(n.column,n.rowNode,null,"deleteKey"),this.grid.refreshCells({rowNodes:[n.rowNode],columns:[n.column],flash:!0}));break;case 37:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(0,-1));break;case 39:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(0,1));break;case 38:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(-1,0));break;case 40:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(1,0));break;case 36:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(-1/0,0));break;case 35:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(1/0,0));break;case 33:e.preventDefault(),this.moveFocus(-this.getPageJump(),0);break;case 34:e.preventDefault(),this.moveFocus(this.getPageJump(),0);break;case 70:(e.ctrlKey||e.metaKey)&&(e.preventDefault(),this.grid.openFind());break;default:if((t==="f"||t==="F")&&(e.ctrlKey||e.metaKey)){e.preventDefault(),this.grid.openFind();return}n&&t.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&this.grid.isCellEditable(n.column,n.rowNode)&&(e.preventDefault(),this.startEditingCell({rowIndex:n.rowIndex,colKey:n.column,charPress:t}));break}}isTextInput(e){if(!e)return!1;const t=e;return t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT"||t.isContentEditable}getPageJump(){const e=this.grid.getRowRenderer().getViewport();return Math.max(1,Math.floor(e.clientHeight/(this.grid.getOptions().rowHeight??42))-1)}moveFocus(e,t){const n=this.focusedCell;if(!n){this.setFocusedCell(0,this.grid.getColumns().center[0]??this.grid.getColumns().left[0]);return}let i=n.rowIndex;if(e===-1/0?i=0:e===1/0?i=this.grid.getDisplayedRowCount()-1:i=Math.max(0,Math.min(this.grid.getDisplayedRowCount()-1,i+e)),t!==0){const o=[...this.grid.getColumns().left,...this.grid.getColumns().center,...this.grid.getColumns().right];let l=o.findIndex(r=>r.colId===n.column.colId)+t;for(;l>=0&&l<o.length&&!o[l].visible;)l+=t;l<0&&(l=0),l>=o.length&&(l=o.length-1),this.setFocusedCell(i,o[l])}else this.setFocusedCell(i,n.column)}tabToNextCell(){this.moveFocus(0,1)}tabToPreviousCell(){this.moveFocus(0,-1)}onCellClicked(e){const{node:t,column:n}=e;if(this.setFocusedCell(e.rowIndex,n),n.checkboxSelection)return;const i=this.grid.isCellEditable(n,t),o=n.singleClickEdit||this.grid.getOptions().singleClickEdit;i&&o&&!this.grid.getOptions().suppressClickEdit&&this.startEditingCell({rowIndex:e.rowIndex,colKey:n})}onCellDoubleClicked(e){const{node:t,column:n}=e;this.setFocusedCell(e.rowIndex,n),this.grid.isCellEditable(n,t)&&!this.grid.getOptions().suppressClickEdit&&this.startEditingCell({rowIndex:e.rowIndex,colKey:n})}destroy(){this.editing=null,this.focusedCell=null}}function Zn(s,e){return s===e?!0:s instanceof Date&&e instanceof Date?s.getTime()===e.getTime():!1}const vo={"a4-landscape":[842,595],"a4-portrait":[595,842],"letter-landscape":[792,612],"letter-portrait":[612,792]};function Qn(s){return s.replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/[\r\n]/g," ")}function wo(s,e,t){const n=Math.max(1,Math.floor(e/(t*.5)));return s.length>n?`${s.slice(0,Math.max(1,n-1))}…`:s}function yo(){return new TextEncoder}function bo(s,e={}){const[t,n]=vo[e.pageSize||"a4-landscape"],i=e.margin??32,o=e.fontSize??9,a=e.rowHeight??18,l=e.headerColor??[.94,.95,.97],r=e.borderColor??[.85,.87,.9],d=yo(),c=[],p=w=>(c.push(w),c.length);p(""),p("");const h=p("<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>"),u=p("<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold >>"),f=[];for(const w of s){let k="";const C=w.columnWidths.reduce((H,q)=>H+q,0),b=Math.min(1,(t-i*2)/(C||1)),N=w.columnWidths.map(H=>H*b),I=i;let E=n-i-(e.title?24:0);e.title&&(k+=`BT /F2 ${o+4} Tf ${I} ${E} Td (${Qn(e.title)}) Tj ET
|
|
4
|
-
`,
|
|
5
|
-
`);let
|
|
6
|
-
`,
|
|
7
|
-
`,
|
|
8
|
-
`;const
|
|
1
|
+
(function(j,Je){typeof exports=="object"&&typeof module<"u"?Je(exports):typeof define=="function"&&define.amd?define(["exports"],Je):(j=typeof globalThis<"u"?globalThis:j||self,Je(j.Rowvia={}))})(this,function(j){"use strict";var Sl=Object.defineProperty;var El=(j,Je,At)=>Je in j?Sl(j,Je,{enumerable:!0,configurable:!0,writable:!0,value:At}):j[Je]=At;var x=(j,Je,At)=>El(j,typeof Je!="symbol"?Je+"":Je,At);function H(s){return s==null?"":String(s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}let Ks=0;function pn(s="id"){return`${s}-${++Ks}`}function st(s,e){if(typeof s!="number"||isNaN(s))return String(s??"");const t=e??0,n=s.toFixed(t),[i,o]=n.split("."),a=i.replace(/\B(?=(\d{3})+(?!\d))/g,",");return o?`${a}.${o}`:a}function fn(s){if(s==null||s==="")return null;const e=Number(s);return isNaN(e)?null:e}function Ys(s,e){if(s===e)return 0;if(s==null)return-1;if(e==null)return 1;if(typeof s=="number"&&typeof e=="number")return s-e;if(s instanceof Date&&e instanceof Date)return s.getTime()-e.getTime();const t=String(s).toLowerCase(),n=String(e).toLowerCase();return t<n?-1:t>n?1:0}function Xs(s,e){return e==null?!1:String(e).toLowerCase().includes(s.toLowerCase())}class Xe extends Error{constructor(e){super(e),this.code=e}}const Zs=/^\$?[A-Za-z]{1,3}\$?\d+$/;function ni(s){const e=[];let t=0;for(;t<s.length;){const n=s[t];if(n===" "||n===" "||n===`
|
|
2
|
+
`||n==="\r"){t++;continue}if(n==='"'||n==="'"){const o=n;let a="";for(t++;t<s.length&&s[t]!==o;)a+=s[t++];t++,e.push({type:"string",value:a});continue}if(/[0-9]/.test(n)||n==="."&&/[0-9]/.test(s[t+1]||"")){let o="";for(;t<s.length&&/[0-9.]/.test(s[t]);)o+=s[t++];if(s[t]==="e"||s[t]==="E")for(o+=s[t++],(s[t]==="+"||s[t]==="-")&&(o+=s[t++]);t<s.length&&/[0-9]/.test(s[t]);)o+=s[t++];e.push({type:"number",value:o});continue}if(/[A-Za-z_$]/.test(n)){let o="";for(;t<s.length&&/[A-Za-z0-9_$.]/.test(s[t]);)o+=s[t++];Zs.test(o)?e.push({type:"cell",value:o.toUpperCase().replace(/\$/g,"")}):e.push({type:"ident",value:o});continue}if(n==="("){e.push({type:"lparen",value:n}),t++;continue}if(n===")"){e.push({type:"rparen",value:n}),t++;continue}if(n===","||n===";"){e.push({type:"comma",value:","}),t++;continue}const i=s.slice(t,t+2);if(["<=",">=","<>"].includes(i)){e.push({type:"op",value:i}),t+=2;continue}if("+-*/^%&=<>,:".includes(n)){e.push({type:"op",value:n}),t++;continue}throw new Xe("#NAME?")}return e}const ii={"&":1,"=":2,"<>":2,"<":2,"<=":2,">":2,">=":2,"+":4,"-":4,"*":5,"/":5,"%":6,"^":7};function si(s){let e=0;const t=()=>s[e],n=()=>s[e++];function i(l=0){let d=o();for(;t()&&t().type==="op"&&ii[t().value]>=l;){const c=n().value,p=i(ii[c]+1);d={type:"binary",operator:c,left:d,right:p}}return d}function o(){const l=t();if(l&&l.type==="op"&&(l.value==="-"||l.value==="+")){n();const d=o();return l.value==="-"?{type:"unary",operator:"-",operand:d}:d}return a()}function a(){const l=n();if(!l)throw new Xe("#ERROR!");if(l.type==="number")return{type:"number",value:Number(l.value)};if(l.type==="string")return{type:"string",value:l.value};if(l.type==="cell")return{type:"cell",value:l.value};if(l.type==="ident"){const d=l.value.toUpperCase();if(d==="TRUE")return{type:"boolean",value:!0};if(d==="FALSE")return{type:"boolean",value:!1};const c=t();if(c&&c.type==="lparen"){n();const p=[];if(t()&&t().type!=="rparen")for(p.push(i());t()&&t().type==="comma";)n(),p.push(i());if(!t()||t().type!=="rparen")throw new Xe("#ERROR!");return n(),{type:"call",name:d,args:p}}return{type:"ref",value:l.value}}if(l.type==="lparen"){const d=i();if(!t()||t().type!=="rparen")throw new Xe("#ERROR!");return n(),d}throw new Xe("#ERROR!")}const r=i();if(e<s.length)throw new Xe("#ERROR!");return r}function Ee(s){if(s==null||s==="")return 0;if(typeof s=="number")return s;if(typeof s=="boolean")return s?1:0;if(s instanceof Date)return s.getTime();const e=Number(s);return isNaN(e)?0:e}function xt(s){const e=[];for(const t of s)if(Array.isArray(t))e.push(...xt(t));else if(t!=null&&t!==""){const n=typeof t=="number"?t:Number(t);isNaN(n)||e.push(n)}return e}const Ut={SUM:s=>xt(s).reduce((e,t)=>e+t,0),AVERAGE:s=>{const e=xt(s);return e.length?e.reduce((t,n)=>t+n,0)/e.length:0},AVG:s=>Ut.AVERAGE(s,{}),MIN:s=>{const e=xt(s);return e.length?Math.min(...e):0},MAX:s=>{const e=xt(s);return e.length?Math.max(...e):0},COUNT:s=>xt(s).length,COUNTA:s=>s.filter(e=>e!=null&&e!=="").length,ABS:s=>Math.abs(Ee(s[0])),ROUND:s=>{const e=s.length>1?Ee(s[1]):0,t=Math.pow(10,e);return Math.round(Ee(s[0])*t)/t},FLOOR:s=>Math.floor(Ee(s[0])),CEIL:s=>Math.ceil(Ee(s[0])),CEILING:s=>Math.ceil(Ee(s[0])),SQRT:s=>{const e=Ee(s[0]);return e<0?(()=>{throw new Xe("#NUM!")})():Math.sqrt(e)},POWER:s=>Math.pow(Ee(s[0]),Ee(s[1])),POW:s=>Math.pow(Ee(s[0]),Ee(s[1])),MOD:s=>{const e=Ee(s[1]);if(e===0)throw new Xe("#DIV/0!");return Ee(s[0])%e},CONCAT:s=>s.map(e=>e==null?"":String(e)).join(""),CONCATENATE:s=>s.map(e=>e==null?"":String(e)).join(""),UPPER:s=>String(s[0]??"").toUpperCase(),LOWER:s=>String(s[0]??"").toLowerCase(),LEN:s=>String(s[0]??"").length,LEFT:s=>String(s[0]??"").slice(0,s.length>1?Ee(s[1]):1),RIGHT:s=>{const e=String(s[0]??""),t=s.length>1?Ee(s[1]):1;return t<=0?"":e.slice(-t)},MID:s=>{const e=String(s[0]??""),t=Math.max(0,Ee(s[1])-1),n=s.length>2?Ee(s[2]):e.length-t;return e.slice(t,t+n)},TRIM:s=>String(s[0]??"").trim(),IF:s=>s[0]?s[1]??!0:s[2]??!1,IFS:s=>{for(let e=0;e<s.length-1;e+=2)if(s[e])return s[e+1];return s.length%2===1?s[s.length-1]:!1},AND:s=>s.every(e=>!!e),OR:s=>s.some(e=>!!e),NOT:s=>!s[0],IFERROR:s=>{try{return s[0]===null||s[0]===void 0?s[1]:s[0]}catch{return s[1]}},ISNUMBER:s=>typeof s[0]=="number"||s[0]!==null&&s[0]!==""&&!isNaN(Number(s[0])),ISBLANK:s=>s[0]===null||s[0]===void 0||s[0]==="",ISTEXT:s=>typeof s[0]=="string",PI:()=>Math.PI,RAND:()=>Math.random(),TODAY:()=>new Date().toISOString().slice(0,10),NOW:()=>new Date().toISOString(),YEAR:s=>new Date(s[0]).getFullYear(),MONTH:s=>new Date(s[0]).getMonth()+1,DAY:s=>new Date(s[0]).getDate(),TEXT:s=>String(s[0]??""),VALUE:s=>Ee(s[0]),NUMBER:s=>Ee(s[0]),BETWEEN:s=>Ee(s[0])>=Ee(s[1])&&Ee(s[0])<=Ee(s[2])},jt=Object.keys(Ut);function Qs(s,e){Ut[s.toUpperCase()]=e,jt.includes(s.toUpperCase())||jt.push(s.toUpperCase())}function Js(s,e){const t=/^([A-Za-z]{1,3})(\d+)$/.exec(s);if(t&&e.a1Lookup)return e.a1Lookup(t[1].toUpperCase(),Number(t[2]))}function eo(s,e){const t=e.data||{};if(s in t)return t[s];const n=s.toLowerCase();for(const i of Object.keys(t))if(i.toLowerCase()===n)return t[i]}function $t(s,e){switch(s.type){case"number":return s.value;case"string":return s.value;case"boolean":return s.value;case"ref":return eo(s.value,e);case"cell":return Js(s.value,e);case"unary":return-Ee($t(s.operand,e));case"call":{const t=Ut[s.name];if(!t)throw new Xe("#NAME?");const n=s.args.map(i=>$t(i,e));return t(n,e)}case"binary":{const t=$t(s.left,e),n=$t(s.right,e);switch(s.operator){case"+":return typeof t=="string"||typeof n=="string"?`${t??""}${n??""}`:Ee(t)+Ee(n);case"-":return Ee(t)-Ee(n);case"*":return Ee(t)*Ee(n);case"/":{const i=Ee(n);if(i===0)throw new Xe("#DIV/0!");return Ee(t)/i}case"^":return Math.pow(Ee(t),Ee(n));case"%":{const i=Ee(n);if(i===0)throw new Xe("#DIV/0!");return Ee(t)%i}case"&":return`${t??""}${n??""}`;case"=":return t===n;case"<>":return t!==n;case"<":return Ee(t)<Ee(n);case"<=":return Ee(t)<=Ee(n);case">":return Ee(t)>Ee(n);case">=":return Ee(t)>=Ee(n);default:throw new Xe("#ERROR!")}}default:throw new Xe("#ERROR!")}}function Dt(s,e={}){const t=s.startsWith("=")?s.slice(1):s,n=si(ni(t));return $t(n,e)}function gn(s){return typeof s=="string"&&s.trimStart().startsWith("=")}function mn(s,e){if(s==null)return;if(e in s)return s[e];const t=e.split(".");let n=s;for(const i of t){if(n==null)return;n=n[i]}return n}function ke(s,e,t){const n=s.colDef,i=(e.group||e.footer)&&!!e.groupData&&e.groupData[s.colId]!==void 0,o=i?e.groupData:e.data,a=s.valueGetter??n.valueGetter;if(a)return(typeof a=="string"?l=>gn(a)?Dt(a,{data:l.data}):mn(l.data,a):a)({data:i?e.groupData:e.data,node:e,column:s,api:t,colDef:n,getValue:l=>mn(i?e.groupData:e.data,l)});if(s.field&&gn(s.field))return Dt(s.field,{data:e.data});if(s.field&&s.colDef.expression&&/[+*/^-]/.test(s.field))return Dt(`=${s.field}`,{data:e.data});if(s.field)return mn(o,s.field)}function Kt(s,e,t){var o;const n=ke(s,e,t),i=s.colDef;if(i.showValueAs&&typeof n=="number"&&t){const a=(o=t.__columnTotalCache)==null?void 0:o.get(s.colId);if(a!==void 0&&a!==0)return`${(i.showValueAs==="percentOfParent"?n/(a||1)*100:n/a*100).toFixed(1)}%`}return i.valueFormatter?(typeof i.valueFormatter=="string"?r=>to(r.colDef.valueFormatter,r.value,r):i.valueFormatter)({value:n,data:e.data,node:e,column:s,api:t,colDef:i}):no(s,n)}function to(s,e,t={}){var n,i,o;if(e==null)return"";switch(s){case"number":return st(e,((n=t.column)==null?void 0:n.decimals)??0);case"currency":return`$${st(e,((i=t.column)==null?void 0:i.decimals)??2)}`;case"percent":return`${st(e,((o=t.column)==null?void 0:o.decimals)??2)}%`;case"date":return oi(e);case"boolean":return e?"✓":"✗";default:return String(e)}}function oi(s){const e=s instanceof Date?s:new Date(s);return isNaN(e.getTime())?String(s):`${e.getDate()} ${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][e.getMonth()]} ${e.getFullYear()}`}function no(s,e){if(e==null)return"";const t=s.type;return t==="numberColumn"&&typeof e=="number"&&!isNaN(e)?st(e,s.decimals):t==="dateColumn"||t==="dateStringColumn"?oi(e):t==="booleanColumn"?e?"✓":"✗":String(e)}function ai(s,e){return s.colDef.valueParser?(typeof s.colDef.valueParser=="string"?n=>ri(n.colDef.valueParser,n.newValue):s.colDef.valueParser)({newValue:e,oldValue:e,data:null,node:null,column:s,colDef:s.colDef,api:null}):ri(s.type,e)}function ri(s,e){if(s==="numberColumn")return fn(e);if(s==="dateColumn"){if(e instanceof Date)return e;const t=new Date(e);return isNaN(t.getTime())?e:t}return s==="booleanColumn"?e===!0||e==="true":e}function li(s){const t=s.colDef.comparator,n=s.type;return(i,o)=>{const a=ke(s,i,null),r=ke(s,o,null);if(t)return t(a,r,i,o);if(n==="numberColumn"){const l=typeof a=="number"?a:fn(a),d=typeof r=="number"?r:fn(r);return l!==null&&d!==null?l-d:l===null&&d===null?0:l===null?-1:1}if(n==="dateColumn"){const l=a instanceof Date?a.getTime():new Date(a).getTime(),d=r instanceof Date?r.getTime():new Date(r).getTime();if(!isNaN(l)&&!isNaN(d))return l-d}return Ys(a,r)}}function Ft(s,e,t){if(!e)return null;if(typeof e=="function")return e({values:t,column:s,rowNode:null,data:null});const n=t.filter(i=>typeof i=="number"&&!isNaN(i));switch(e){case"sum":return n.reduce((i,o)=>i+o,0);case"count":return t.length;case"avg":return n.length?n.reduce((i,o)=>i+o,0)/n.length:null;case"min":return n.length?Math.min(...n):null;case"max":return n.length?Math.max(...n):null;case"first":return t.length?t[0]:null;case"last":return t.length?t[t.length-1]:null;default:return null}}function io(s){const e={onInteraction:s.onInteraction,setRowData:n=>s.setRowData(n),applyTransaction:n=>s.applyTransaction(n),getRowNode:n=>s.getRowNode(n),getDisplayedRowCount:()=>s.getDisplayedRowCount(),getDisplayedRowAtIndex:n=>s.getDisplayedRowAtIndex(n),getFirstDisplayedRow:()=>s.getDisplayedRowAtIndex(0),getLastDisplayedRow:()=>s.getDisplayedRowAtIndex(s.getDisplayedRowCount()-1),forEachNode:n=>{const i=s.getRowModel();for(let o=0;o<i.getRowCount();o++){const a=i.getRow(o);a&&n(a,o)}},forEachLeafNode:n=>{s.getRowModel().forEachLeafNode(n)},getModel:()=>s.getRowModel(),getValue:(n,i)=>{const o=typeof n=="string"?s.getColumn(n):n;if(!(!o||!i))return ke(o,i,s.getApi())},getSelectedRows:()=>s.getSelectionService().getSelectedRows(),getSelectedNodes:()=>s.getSelectionService().getSelectedNodes(),selectAll:()=>s.getSelectionService().selectAll(),deselectAll:()=>s.getSelectionService().deselectAll(),selectAllFiltered:()=>s.getSelectionService().selectAllFiltered(),deselectAllFiltered:()=>s.getSelectionService().deselectAll(),selectNode:(n,i)=>s.getSelectionService().selectNode(n,i??!1),deselectNode:n=>s.getSelectionService().deselectNode(n),setQuickFilter:n=>s.setQuickFilter(n),isQuickFilterPresent:()=>s.getQuickFilter().length>0,resetQuickFilter:()=>s.setQuickFilter(""),getSortModel:()=>s.getSortService().getSortModel(),setSortModel:n=>s.getSortService().setSortModel(n),getFilterModel:()=>s.getFilterService().getFilterModel(),setFilterModel:n=>s.getFilterService().setFilterModel(n),getColumnFilterModel:n=>{const i=typeof n=="string"?n:n.colId;return s.getFilterService().getFilterInstance(i)??null},setColumnFilterModel:(n,i)=>s.getFilterService().setColumnFilterModel(n,i),getAdvancedFilterModel:()=>s.getFilterService().getAdvancedFilterModel(),setAdvancedFilterModel:n=>s.getFilterService().setAdvancedFilterModel(n),onFilterChanged:()=>s.getFilterService().onFilterChanged("api"),onSortChanged:()=>s.getSortService().onSortChanged("api"),expandAll:()=>s.getRowModel().expandAll(),collapseAll:()=>s.getRowModel().collapseAll(),onGroupExpandedOrCollapsed:()=>s.refreshModel("expand"),getRowGroupColumns:()=>s.getColumnModel().getRowGroupColumns(),setRowNodePinned:(n,i)=>s.setRowNodePinned(n,i),getColumnDefs:()=>s.getColumnModel().getColumnDefs(),setColumnDefs:(n,i)=>{s.getColumnModel().setColumnDefs(n),s.onGridSizeChanged()},updateGridOptions:n=>s.updateGridOptions(n),setGridOption:(n,i)=>s.updateGridOptions({[n]:i}),sizeColumnsToFit:()=>{const n=s.getSideBarService().isVisible()?s.getSideBarService().getElement().offsetWidth:0;s.getColumnModel().sizeColumnsToFit(s.getGridDiv().clientWidth-n),s.getHeaderView().updateIndicators(),s.getRowRenderer().redrawAllRows()},autoSizeAllColumns:()=>{s.getColumnModel().autoSizeAllColumns(),s.getHeaderView().updateIndicators(),s.getRowRenderer().redrawAllRows()},autoSizeColumns:n=>{s.getColumnModel().autoSizeAllColumns()},moveColumn:(n,i)=>s.getColumnModel().moveColumn(n,i),moveColumnByIndex:(n,i)=>s.getColumnModel().moveColumnByIndex(n,i),setColumnVisible:(n,i)=>s.getColumnApi().setColumnVisible(n,i),setColumnsPinned:(n,i)=>s.getColumnApi().setColumnsPinned(n,i),setColumnsVisible:(n,i)=>s.getColumnApi().setColumnsVisible(n,i),getAllColumns:()=>s.getAllColumns(),getColumns:()=>[...s.getColumns().left,...s.getColumns().center,...s.getColumns().right],getColumn:n=>s.getColumn(n)??null,getDisplayedLeftColumns:()=>s.getColumns().left,getDisplayedCenterColumns:()=>s.getColumns().center,getDisplayedRightColumns:()=>s.getColumns().right,getColumnState:()=>s.getColumnApi().getColumnState(),applyColumnState:(n,i)=>s.getColumnApi().applyColumnState(n,i),resetColumnState:()=>s.getColumnApi().resetColumnState(),openColumnMenu:n=>{const i=typeof n=="string"?s.getColumn(n):n;i!=null&&i.eHeaderCell&&s.getHeaderView().getHeaderCell(i)},setSideBarVisible:n=>{s.getSideBarService().setVisible(n),s.onGridSizeChanged()},isSideBarVisible:()=>s.getSideBarService().isVisible(),setSideBarPosition:n=>{s.getSideBarService().setPosition(n),s.onGridSizeChanged()},openToolPanel:n=>{s.getSideBarService().setVisible(!0),s.getSideBarService().openPanel(n),s.onGridSizeChanged()},closeToolPanel:()=>{s.getSideBarService().setVisible(!1),s.onGridSizeChanged()},getToolPanel:()=>s.getSideBarService().getActivePanel(),setStatusBarVisible:n=>s.getSideBarService()&&s.getOptions(),getSideBar:()=>s.getSideBarService(),getStatusPanel:()=>null,paginationIsLastPageFound:()=>{var n;return((n=s.getPaginationService())==null?void 0:n.isLastPageFound())??!0},paginationGetPageSize:()=>{var n;return((n=s.getPaginationService())==null?void 0:n.getPageSize())??0},paginationGetCurrentPage:()=>{var n;return((n=s.getPaginationService())==null?void 0:n.getCurrentPage())??0},paginationGetTotalPages:()=>{var n;return((n=s.getPaginationService())==null?void 0:n.getTotalPages())??1},paginationGetRowCount:()=>s.getDisplayedRowCount(),paginationGoToPage:n=>{var i;return(i=s.getPaginationService())==null?void 0:i.goToPage(n)},paginationGoToNextPage:()=>{var n;return(n=s.getPaginationService())==null?void 0:n.goToNextPage()},paginationGoToPreviousPage:()=>{var n;return(n=s.getPaginationService())==null?void 0:n.goToPreviousPage()},paginationGoToFirstPage:()=>{var n;return(n=s.getPaginationService())==null?void 0:n.goToFirstPage()},paginationGoToLastPage:()=>{var n;return(n=s.getPaginationService())==null?void 0:n.goToLastPage()},paginationSetPageSize:n=>{var i;return(i=s.getPaginationService())==null?void 0:i.setPageSize(n)},startEditingCell:n=>s.getEditService().startEditingCell(n),stopEditing:n=>s.getEditService().stopEditing(n),getEditingCells:()=>s.getEditService().getEditingCells(),setFocusedCell:(n,i)=>{const o=typeof i=="string"?s.getColumn(i):i;o&&s.getEditService().setFocusedCell(n,o)},getFocusedCell:()=>{const n=s.getEditService().getFocusedCell();return n?{rowIndex:n.rowIndex,column:n.column,rowNode:n.rowNode}:null},clearFocusedCell:()=>s.getEditService().clearFocusedCell(),tabToNextCell:()=>s.getEditService().tabToNextCell(),tabToPreviousCell:()=>s.getEditService().tabToPreviousCell(),refreshCells:n=>s.getRowRenderer().refreshCells(n),redrawRows:n=>s.getRowRenderer().redrawRows(n),flashCells:n=>s.getRowRenderer().flashCells(n||{}),ensureIndexVisible:(n,i)=>s.getRowRenderer().ensureIndexVisible(n,i),ensureNodeVisible:n=>{let i=-1;s.getRowModel().forEachNode((o,a)=>{o.id===n.id&&(i=a)}),i>=0&&s.getRowRenderer().ensureIndexVisible(i)},ensureColumnVisible:n=>{const i=typeof n=="string"?s.getColumn(n):n;i&&s.getRowRenderer().ensureColumnVisible(i)},copyToClipboard:n=>s.getExportService().copyToClipboard(n),cutToClipboard:n=>s.getExportService().cutToClipboard(n),pasteFromClipboard:()=>s.getExportService().pasteFromClipboard(),exportToCsv:n=>s.getExportService().exportToCsv(n||{}),exportToExcel:n=>s.getExportService().exportToExcel(n||{}),exportToPdf:n=>s.getExportService().exportToPdf(n||{}),importExcel:(n,i)=>s.getExportService().importExcel(n,i||{}),getDataAsPdf:n=>s.getExportService().getDataAsPdf(n||{}),getDataAsCsv:n=>s.getExportService().getDataAsCsv(n||{}),getDataAsExcel:n=>s.getExportService().getDataAsExcel(n||{}),getChartData:n=>s.getChartService().getChartData(n||{}),getChartModels:()=>s.getChartService().getChartModels(),createChart:()=>s.getChartService().createChart(),getCellRanges:()=>s.getRangeSelectionService().getRanges(),clearRangeSelection:()=>s.getRangeSelectionService().clearRanges(),addCellRange:n=>{const i=s.getRangeSelectionService();i.ranges=[n],i.applyHighlight(),i.updateOverlay()},onRangeSelectionChanged:()=>{},getRangeSelections:()=>s.getRangeSelectionService().getRanges(),showLoadingOverlay:()=>s.getOverlayService().showLoadingOverlay(),showNoRowsOverlay:()=>s.getOverlayService().showNoRowsOverlay(),hideOverlay:()=>s.getOverlayService().hideOverlay(),setServerSideDatasource:n=>{const i=s.getServerSideRowModel();i&&i.setDatasource(n)},setDatasource:n=>{var o;const i=s.getInfiniteRowModel();i?i.setDatasource(n):(o=s.getServerSideRowModel())==null||o.setDatasource(n)},setViewportDatasource:n=>{var i;(i=s.getViewportRowModel())==null||i.setViewportDatasource(n)},setViewportRange:(n,i)=>{var o;(o=s.getViewportRowModel())==null||o.setViewportRange(n,i)},refreshServerSide:n=>{const i=s.getServerSideRowModel();i&&(n!=null&&n.purge?i.purgeCache():i.onSortOrFilterChanged())},purgeServerSideCache:()=>{var n,i;(n=s.getServerSideRowModel())==null||n.purgeCache(),(i=s.getInfiniteRowModel())==null||i.onSortOrFilterChanged()},getServerSideStoreState:()=>{const n=s.getServerSideRowModel();if(!n)return[];const i=[];for(const[o,a]of n.stores)i.push({groupPath:o,rowCount:a.rows.length,lastRow:a.lastRow,loading:a.loading});return i},setRowCount:(n,i)=>{const o=s.getServerSideRowModel();if(!o)return;const a=o.getStore("");if(a)for(a.lastRow=i?n:null;a.rows.length<n;)a.rows.push(null);o.refreshModel("everything")},isServerSideStoreLoading:()=>s.isRemoteLoading(),undoCellEditing:()=>s.getUndoRedoService().undo(),redoCellEditing:()=>s.getUndoRedoService().redo(),canUndo:()=>s.getUndoRedoService().canUndo(),canRedo:()=>s.getUndoRedoService().canRedo(),getUndoRedoStackSize:()=>({undo:s.getUndoRedoService().getUndoStackSize(),redo:s.getUndoRedoService().getRedoStackSize()}),startBatchEdit:()=>s.getUndoRedoService().startBatchEdit(),endBatchEdit:n=>s.getUndoRedoService().endBatchEdit(n),cancelBatchEdit:()=>s.getUndoRedoService().endBatchEdit(!0),isBatchEditing:()=>s.getUndoRedoService().isBatchEditing(),getState:()=>{const n=s.getColumnApi(),i=s.getSelectionService(),o=s.getPaginationService();return{columns:n.getColumnState(),sort:s.getSortService().getSortModel(),filter:JSON.parse(JSON.stringify(s.getFilterService().getFilterModel())),quickFilter:s.getQuickFilter(),selectedRowIds:i.getSelectedNodes().map(a=>a.id),pagination:o!=null&&o.isEnabled()?{page:o.getCurrentPage(),pageSize:o.getPageSize()}:null,rowGroupColumns:s.getColumnModel().getRowGroupColumns().map(a=>a.colId),pivotMode:s.getColumnModel().isPivotMode()}},setState:n=>{if(!n)return;const i=s.getColumnApi();if(n.columns&&i.applyColumnState(n.columns,!0),n.sort&&s.getSortService().setSortModel(n.sort),n.filter&&s.getFilterService().setFilterModel(n.filter),n.quickFilter!==void 0&&s.setQuickFilter(n.quickFilter),n.rowGroupColumns&&s.getColumnModel().setRowGroupColumns(n.rowGroupColumns),n.pivotMode!==void 0&&s.getColumnModel().setPivotMode(n.pivotMode),n.selectedRowIds){s.getSelectionService().deselectAll();for(const a of n.selectedRowIds){const r=s.getRowNode(a);r&&s.getSelectionService().selectNode(r,!1)}}const o=s.getPaginationService();o&&n.pagination&&(o.setPageSize(n.pagination.pageSize),o.goToPage(n.pagination.page))},setNote:(n,i,o)=>{const a=typeof i=="string"?i:i.colId;s.getNotesService().setNote(n.id,a,o)},getNote:(n,i)=>{const o=typeof i=="string"?i:i.colId,a=s.getColumn(o);return s.getNotesService().getNote(n.id,o,a==null?void 0:a.colDef.note,{data:n.data,node:n,column:a,api:s.getApi()})},getGridId:()=>"rowvia",destroy:()=>s.destroy(),refreshClientSideRowModel:()=>s.refreshModel("everything"),setPivotMode:n=>s.getColumnModel().setPivotMode(n),isPivotMode:()=>s.getColumnModel().isPivotMode(),showColumnMenuAfterButtonClick:()=>{}};return{api:e,columnApi:{getAllColumns:()=>s.getAllColumns(),getColumn:n=>s.getColumn(n)??null,getColumnState:()=>s.getColumnModel().getColumnState(),applyColumnState:(n,i)=>{s.getColumnModel().applyColumnState(n,i),s.refreshModel("group")},resetColumnState:()=>{s.getColumnModel().resetColumnState(),s.refreshModel("group")},setColumnVisible:(n,i)=>s.getColumnModel().setColumnVisible(n,i),setColumnsVisible:(n,i)=>s.getColumnModel().setColumnsVisible(n,i),setColumnPinned:(n,i)=>s.getColumnModel().setColumnPinned(n,i),setColumnsPinned:(n,i)=>s.getColumnModel().setColumnsPinned(n,i),moveColumn:(n,i)=>s.getColumnModel().moveColumn(n,i),moveColumnByIndex:(n,i)=>s.getColumnModel().moveColumnByIndex(n,i),autoSizeColumn:n=>{s.getColumnModel().autoSizeColumn(n),s.getHeaderView().updateIndicators(),s.getRowRenderer().redrawAllRows()},autoSizeColumns:n=>{s.getColumnModel().autoSizeAllColumns(),s.getHeaderView().updateIndicators(),s.getRowRenderer().redrawAllRows()},autoSizeAllColumns:()=>e.autoSizeAllColumns(),sizeColumnsToFit:()=>e.sizeColumnsToFit(),setRowGroupColumns:(n,i)=>s.getColumnModel().setRowGroupColumns(n,i),removeRowGroupColumns:n=>{for(const i of n)s.getColumnModel().removeRowGroupColumn(i)},addRowGroupColumn:n=>s.getColumnModel().addRowGroupColumn(n),setPivotColumns:n=>s.getColumnModel().setPivotColumns(n),removePivotColumns:n=>s.getColumnModel().setPivotColumns(n.map(()=>"").filter(i=>i!=="")),setValueColumns:n=>s.getColumnModel().setValueColumns(n),removeValueColumn:n=>s.getColumnModel().setValueColumns([]),getRowGroupColumns:()=>s.getColumnModel().getRowGroupColumns(),getValueColumns:()=>s.getColumnModel().getValueColumns(),getPivotColumns:()=>s.getColumnModel().getPivotColumns(),setPivotMode:(n,i)=>s.getColumnModel().setPivotMode(n,i),isPivotMode:()=>s.getColumnModel().isPivotMode()}}}class ut{constructor(e,t,n){x(this,"id");x(this,"__id");x(this,"data");x(this,"parent",null);x(this,"children",null);x(this,"group",!1);x(this,"key",null);x(this,"level",0);x(this,"uiLevel",0);x(this,"rowGroupIndex");x(this,"expanded",!1);x(this,"selectable",!0);x(this,"selected",!1);x(this,"rowPinned",null);x(this,"detailNode",null);x(this,"masterNode",null);x(this,"footer",!1);x(this,"groupData",null);x(this,"rowHeight",null);x(this,"allChildrenCount",null);x(this,"stub",!1);x(this,"rowIndex",null);x(this,"__displayIndex");x(this,"services");x(this,"__passesFilter",!0);x(this,"__childCount",0);x(this,"__childrenLoaded",!1);this.data=e,this.services=t,this.__id=pn("row"),this.id=n??this.__id}get isGroup(){return this.group}get isMaster(){return this.masterNode!==null}setSelected(e,t=!1,n="api"){return e?this.services.selectNode(this,t):this.services.deselectNode(this),0}isSelected(){return this.selected}setData(e){this.data=e}setDataValue(e,t){const n=typeof e=="string"?e:e.field;if(n&&this.data){const i=n.split(".");let o=this.data;for(;i.length>1;){const a=i.shift();o[a]===void 0&&(o[a]={}),o=o[a]}o[i[0]]=t}}setExpanded(e){this.expanded!==e&&(this.expanded=e)}setPinned(e){this.rowPinned=e}}class so{constructor(e){x(this,"options");x(this,"eventService");x(this,"columns");x(this,"getFilterModel");x(this,"getQuickFilter");x(this,"isPaginationEnabled");x(this,"getPageSize");x(this,"getCurrentPage");x(this,"rowHeightProvider");x(this,"rowNodeServices");x(this,"rowData",[]);x(this,"rootRowNodes",[]);x(this,"dataRows",[]);x(this,"rowsToDisplay",[]);x(this,"rowNodeMap",new Map);x(this,"expandedGroups",new Set);x(this,"groupDefaultExpandedApplied",!1);x(this,"pinnedTopRows",[]);x(this,"pinnedBottomRows",[]);x(this,"totalRowCount",0);this.options=e.options,this.eventService=e.eventService,this.columns=e.columns,this.getFilterModel=e.getFilterModel,this.getQuickFilter=e.getQuickFilter,this.isPaginationEnabled=e.isPaginationEnabled,this.getPageSize=e.getPageSize,this.getCurrentPage=e.getCurrentPage,this.rowHeightProvider=e.rowHeight,this.rowNodeServices=e.rowNodeServices}getType(){return"clientSide"}isEmpty(){return this.getRowCount()===0}getTopLevelRows(){return this.rootRowNodes}getRowCount(){return this.rowsToDisplay.length}getTotalRowCount(){return this.totalRowCount}getRow(e){return this.rowsToDisplay[e]}getRowNode(e){return this.rowNodeMap.get(e)}forEachNode(e){this.rowsToDisplay.forEach((t,n)=>e(t,n))}forEachLeafNode(e){let t=0;const n=i=>{for(const o of i)o.group?o.children&&n(o.children):o.footer||e(o,t++)};n(this.rootRowNodes)}getPinnedTopRowCount(){return this.pinnedTopRows.length}getPinnedBottomRowCount(){return this.pinnedBottomRows.length}getPinnedTopRow(e){return this.pinnedTopRows[e]}getPinnedBottomRow(e){return this.pinnedBottomRows[e]}getRowIndexAtPixel(e){return Math.floor(e/this.rowHeightProvider())}updateRowData(e){this.rowData=e||[],this.rebuildRows()}rebuildRows(){const e=new Map;this.options.treeData&&this.rowNodeMap.forEach(i=>{i.group&&e.set(i.id,i.expanded)}),this.rowNodeMap.clear(),this.rootRowNodes=[];const t=this.options.getRowId,n=this.rowData;if(this.options.treeData){const i=this.buildTreeData(n,t);this.rootRowNodes=i,this.rowNodeMap.forEach(o=>{o.group&&e.has(o.id)&&(o.expanded=e.get(o.id))})}else{const i=[];for(let o=0;o<n.length;o++){const a=n[o],r=t?t({data:a,level:0}):void 0,l=this.createRowNode(a,r);l.rowIndex=o,i.push(l)}this.rootRowNodes=i,this.dataRows=i}if(this.options.masterDetail&&!this.options.treeData){const i=this.options.isRowMaster||(()=>!0);for(const o of this.rootRowNodes){if(o.detailNode||!i({data:o.data,node:o}))continue;const a=this.createRowNode(null,`${o.id}|detail`,o,1);a.masterNode=o,a.selectable=!1,o.detailNode=a,o.expanded=!1}}this.refreshModel(),this.eventService.dispatchEvent("rowDataUpdated",{api:this.gridApi})}createRowNode(e,t,n=null,i=0){const o=new ut(e,this.rowNodeServices,t);return o.parent=n,o.level=i,o.uiLevel=i,o.__id=o.id,this.rowNodeMap.set(o.id,o),o}buildTreeData(e,t){const n=this.options.getDataPath||(d=>String(d.id??d.key).split("/")),i=this.options.treeDataChildrenField||"children",o=new Map,a=[],r=(d,c,p)=>{const h=n(d),u=h.join("/"),f=t?t({data:d,level:p}):u,g=this.createRowNode(d,f,c,p);g.key=h[h.length-1],o.set(u,g);const v=d[i];if(Array.isArray(v)&&v.length){g.children=[],g.group=!0,g.expanded=!0;for(const m of v){const b=r(m,g,p+1);g.children.push(b)}g.allChildrenCount=v.length}else c&&(c.children||(c.children=[],c.group=!0,c.expanded=!0),c.children.push(g),c.allChildrenCount=(c.allChildrenCount??0)+1);return c||a.push(g),g},l=d=>{if(!d.children||d.children.length===0)return 1;let c=0;for(const p of d.children)c+=l(p);return d.allChildrenCount=c,c};for(const d of a)l(d);for(const d of e){if(!d)continue;const p=n(d).slice(0,-1).join("/"),h=p&&o.get(p)||null;r(d,h??null,h?h.level+1:0)}return a}applyTransaction(e){const t=this.options.getRowId,n={add:[],remove:[],update:[]};if(e.remove&&e.remove.length){const i=new Set;for(const o of e.remove){const a=t?t({data:o,level:0}):o.id;a!==void 0?i.add(String(a)):i.add(o)}this.rowData=this.rowData.filter(o=>{const a=t?t({data:o,level:0}):o.id;return!i.has(String(a))&&!i.has(o)});for(const o of i){const a=this.rowNodeMap.get(String(o));a&&(this.rowNodeMap.delete(a.id),n.remove.push(a))}}if(e.update&&e.update.length)for(const i of e.update){const o=t?t({data:i,level:0}):i.id,a=o!==void 0?this.rowNodeMap.get(String(o)):void 0;if(a)this.rowData=this.rowData.map(r=>{const l=t?t({data:r,level:0}):r.id;return String(l)===String(o)?i:r}),a.data=i,n.update.push(a);else{const r=this.createRowNode(i,o!==void 0?String(o):void 0);this.rowData.push(i),n.add.push(r)}}if(e.add&&e.add.length){const i=e.addIndex;for(const o of e.add){const a=t?t({data:o,level:0}):void 0,r=this.createRowNode(o,a);n.add.push(r),i===void 0||i<0?this.rowData.push(o):this.rowData.splice(Math.min(i,this.rowData.length),0,o)}}return this.rebuildRows(),n}refreshModel(e){const t=this.columns().filter(n=>n.rowGroup);(!e||e==="everything"||e==="filter"||e==="group")&&this.doFilter(),(!e||e==="everything"||e==="sort"||e==="group")&&this.doSort(t),(!e||e==="everything"||e==="group")&&this.doGroup(t),this.buildDisplayRows(t),this.eventService.dispatchEvent("modelUpdated",{api:this.gridApi})}doFilter(){const e=this.getFilterModel(),t=this.getQuickFilter(),n=Object.keys(e).length>0,i=t&&t.trim().length>0,o=this.columns(),a=!!this.options.treeData,r=f=>{for(const[g,v]of Object.entries(e)){const m=o.find(b=>b.colId===g);if(m&&!this.doesNodePassFilter(f,m,v))return!1}return!0},l=f=>{const g=this.options.__advancedFilterPass;return g?g(f):!0},d=Object.entries(e).some(([f,g])=>{const v=o.find(m=>m.colId===f);return!v||!v.aggFunc?!1:g.filterType==="multi"?(g.filterModels||[]).length>0:!0}),c=f=>{if(f.__passesFilter=!0,f.children)for(const g of f.children)c(g)},p=f=>{const g=this.options;return typeof g.isExternalFilterPresent!="function"||!g.isExternalFilterPresent()||typeof g.doesExternalFilterPass!="function"?!0:g.doesExternalFilterPass(f)},h=f=>{if(!i)return!0;const g=t.toLowerCase(),v=this.options.includeHiddenColumnsInQuickFilter?o:o.filter(m=>m.visible);for(const m of v){const b=ke(m,f,null);if(Xs(g,b))return!0}return!1},u=f=>{let g=!0;if(!f.group||f.footer||a?g=(!n||r(f))&&h(f)&&p(f)&&l(f):d&&(g=(!n||r(f))&&l(f)),f.__passesFilter=g,f.children){let v=!1;for(const m of f.children)u(m)&&(v=!0);return f.group&&!f.footer&&(d?(f.__passesFilter=g,g&&c(f)):(f.__passesFilter=a?v||g:v,a&&g&&c(f))),f.__passesFilter}return g};for(const f of this.rootRowNodes)u(f)}doesNodePassFilterModel(e,t,n){return this.doesNodePassFilter(e,t,n)}doesNodePassFilter(e,t,n){if(e.group&&t.aggFunc&&!e.footer&&!e.__aggregationTest){let l;if(e.groupData&&e.groupData[t.colId]!==void 0)l=e.groupData[t.colId];else{const c=[];Xt(e,c);const p=c.map(h=>ke(t,h,null));l=Ft(t,t.aggFunc,p)}const d={...e,data:{[t.colId]:l},groupData:null,__aggregationTest:!0};return this.doesNodePassFilter(d,t,n)}if(n.filterType==="multi"){const l=n.filterModels||[];if(l.length===0)return!0;const d=n.operator||"AND",c=l.map(p=>this.doesNodePassFilter(e,t,p));return d==="OR"?c.some(Boolean):c.every(Boolean)}if(n.condition1||n.condition2){const{condition1:l,condition2:d,...c}=n,p=[this.doesNodePassFilter(e,t,{...c,...l||{}})];return d&&p.push(this.doesNodePassFilter(e,t,{...c,...d})),(n.operator||"AND")==="OR"?p.some(Boolean):p.every(Boolean)}const i=ke(t,e,null),o=ao(t,i),a=i,r=n.filterType||"text";if(r==="text"){const l=String(n.filter??"").toLowerCase();if(!l)return!0;const d=(a==null?"":String(a)).toLowerCase();switch(n.type){case"equals":return d===l;case"notEqual":return d!==l;case"startsWith":return d.startsWith(l);case"endsWith":return d.endsWith(l);case"contains":default:return d.includes(l)}}if(r==="number"){const l=typeof a=="number"?a:Number(a);if(isNaN(l))return!1;const d=Number(n.filter),c=n.filterTo!==void 0&&n.filterTo!==null&&n.filterTo!==""?Number(n.filterTo):null;switch(n.type){case"equals":return l===d;case"notEqual":return l!==d;case"lessThan":return l<d;case"lessThanOrEqual":return l<=d;case"greaterThan":return l>d;case"greaterThanOrEqual":return l>=d;case"inRange":return c!==null?l>=Math.min(d,c)&&l<=Math.max(d,c):!0;case"blank":return a==null||a==="";case"notBlank":return!(a==null||a==="");default:return!0}}if(r==="date"){const l=a instanceof Date?a.getTime():new Date(a).getTime();if(isNaN(l))return!1;const d=n.dateFrom?new Date(n.dateFrom).getTime():null,c=n.dateTo?new Date(n.dateTo+"T23:59:59").getTime():null;return!(d!==null&&l<d||c!==null&&l>c)}return r==="boolean"?!!a==!!n.filter:r==="set"?(n.values||[]).map(d=>String(d)).includes(String(a)):!0}doSort(e){const t=[],n=this.columns();for(const a of n)a.sort&&a.sortIndex!==null&&t.push({column:a,direction:a.sort});t.sort((a,r)=>(a.column.sortIndex??0)-(r.column.sortIndex??0));const i=(a,r)=>{for(const{column:c,direction:p}of t){const h=li(c)(a,r)*(p==="asc"?1:-1);if(h!==0)return h}const l=a.rowIndex??0,d=r.rowIndex??0;return l-d},o=a=>{a.sort(i);for(const r of a)r.children&&o(r.children)};if(e.length===0)o(this.rootRowNodes);else for(const a of this.rootRowNodes)a.children&&o(a.children)}doGroup(e){if(e.length===0)return;const t=this.columns().filter(d=>d.aggFunc&&!d.rowGroup),n=(d,c,p,h)=>{if(c>=e.length)return d;const u=e[c],f=new Map,g=[];for(const m of d){if(!m.__passesFilter)continue;const b=ke(u,m,null),k=oo(b);f.has(k)||(f.set(k,[]),g.push(k)),f.get(k).push(m)}const v=[];for(const m of g){const b=f.get(m),k=`${h}|${u.colId}:${m}`,C=this.rowNodeMap.get(k),w=C||new ut({[u.colId]:m},this.rowNodeServices,k);w.group=!0,w.key=m,w.level=p,w.uiLevel=p,w.parent=null,w.children=n(b,c+1,p+1,k);for(const y of w.children)y.parent=w;w.allChildrenCount=di(w),w.data={...w.data};const L=[];Xt(w,L);const N={};for(const y of t){const D=L.map(S=>ke(y,S,null));N[y.colId]=Ft(y,y.aggFunc,D)}N[u.colId]=m,w.groupData=N,C||this.rowNodeMap.set(k,w),v.push(w)}return v},i=this.options.groupDefaultExpanded??0,o=this.dataRows.length>0?this.dataRows:this.rootRowNodes,a=n(o,0,0,""),r=d=>{for(const c of d){if(!c.group)continue;const p=Yt(c),h=this.expandedGroups.has(p);i===-1||h?c.expanded=!0:this.groupDefaultExpandedApplied?c.expanded=!1:c.expanded=c.level<i,c.expanded&&this.expandedGroups.add(p),c.children&&r(c.children)}};r(a),this.groupDefaultExpandedApplied=!0;const l=(d,c)=>{const p=e[c],h=p.sort==="desc"?-1:1,u=li(p);d.sort((f,g)=>{const v=ke(p,f,null),m=ke(p,g,null);return u({...f,data:{[p.colId]:v}},{...g,data:{[p.colId]:m}})*h})};e[0].sort&&l(a,0),this.rootRowNodes=a}buildDisplayRows(e){const t=[],n=!!this.options.treeData,i=(a,r)=>{if(a.uiLevel=r,t.push(a),a.detailNode&&a.expanded&&t.push(a.detailNode),a.children&&(a.group||n)){const l=a.group?a.children.filter(d=>d.__passesFilter||d.group):a.children;if(a.expanded){for(const d of l)i(d,r+1);if(a.group&&this.options.groupIncludeFooter&&!this.isGrandTotal(a)){const d=this.createFooterNode(a,r+1);t.push(d)}}}};for(const a of this.rootRowNodes)a.__passesFilter&&i(a,0);if(this.options.groupIncludeTotalFooter&&e.length>0){const a=this.createGrandTotalNode(e);t.push(a)}this.pinnedTopRows=t.filter(a=>a.rowPinned==="top"),this.pinnedBottomRows=t.filter(a=>a.rowPinned==="bottom");const o=t.filter(a=>a.rowPinned!=="top"&&a.rowPinned!=="bottom");if(this.totalRowCount=o.filter(a=>!a.masterNode).length,this.isPaginationEnabled()){const a=this.getPageSize(),r=this.getCurrentPage();let l=0,d=-1;for(let p=0;p<o.length;p++)if(!o[p].masterNode){if(l===r*a){d=p;break}l++}d<0&&(d=o.length);let c=d;for(l=0;c<o.length&&l<a;)o[c].masterNode||l++,c++;for(;c<o.length&&o[c].masterNode;)c++;this.rowsToDisplay=o.slice(d,c)}else this.rowsToDisplay=o;this.rowsToDisplay.forEach((a,r)=>a.__displayIndex=r)}isGrandTotal(e){return e.parent===null&&!!this.options.groupIncludeTotalFooter}createFooterNode(e,t){const n=`${e.id}|footer`;let i=this.rowNodeMap.get(n);return i||(i=new ut(e.data,this.rowNodeServices,n),this.rowNodeMap.set(n,i)),i.group=!1,i.footer=!0,i.level=e.level,i.uiLevel=t,i.parent=e,i.selected=!1,i.selectable=!1,i.groupData={...e.groupData,__footerFor:e.id},i}createGrandTotalNode(e){const t="ag-grid-grand-total";let n=this.rowNodeMap.get(t);n||(n=new ut(null,this.rowNodeServices,t),this.rowNodeMap.set(t,n)),n.group=!1,n.footer=!0,n.level=0,n.uiLevel=0,n.selected=!1,n.selectable=!1;const i=this.columns().filter(r=>r.aggFunc&&!r.rowGroup),o=[];for(const r of this.rootRowNodes)r.group?Xt(r,o):r.__passesFilter&&o.push(r);const a={};for(const r of i){const l=o.map(d=>ke(r,d,null));a[r.colId]=Ft(r,r.aggFunc,l)}return a.__grandTotal=!0,n.groupData=a,n}expandAll(){const e=t=>{t.group&&(t.expanded=!0,this.expandedGroups.add(Yt(t)),t.children&&t.children.forEach(e))};this.rootRowNodes.forEach(e),this.buildDisplayRows(this.columns().filter(t=>t.rowGroup)),this.eventService.dispatchEvent("expandOrCollapseAll",{}),this.eventService.dispatchEvent("modelUpdated",{api:this.gridApi})}collapseAll(){this.expandedGroups.clear();const e=t=>{t.group&&(t.expanded=!1,t.children&&t.children.forEach(e))};this.rootRowNodes.forEach(e),this.buildDisplayRows(this.columns().filter(t=>t.rowGroup)),this.eventService.dispatchEvent("expandOrCollapseAll",{}),this.eventService.dispatchEvent("modelUpdated",{api:this.gridApi})}setNodeExpanded(e,t){e.group&&(e.expanded=t,t?this.expandedGroups.add(Yt(e)):this.expandedGroups.delete(Yt(e)),this.buildDisplayRows(this.columns().filter(n=>n.rowGroup)),this.eventService.dispatchEvent("modelUpdated",{api:this.gridApi}))}setGridApi(e){this.gridApi=e}destroy(){this.rowNodeMap.clear(),this.rowsToDisplay=[],this.rootRowNodes=[]}}function oo(s){return s==null?"":s instanceof Date?s.toISOString():String(s)}function Yt(s){const e=[];let t=s;for(;t;)e.unshift(t.id),t=t.parent;return e.join(">")}function di(s){return!s.children||s.children.length===0?1:s.children.reduce((e,t)=>e+di(t),0)}function Xt(s,e){if(!s.children||s.children.length===0){e.push(s);return}for(const t of s.children)Xt(t,e)}function ao(s,e){return e}const ro={textColumn:{filter:"text",editable:!0},numberColumn:{filter:"number",editable:!0,headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"},dateColumn:{filter:"date",editable:!0},dateStringColumn:{filter:"date"},booleanColumn:{filter:"boolean",cellRenderer:"agCheckboxCellRenderer"},rightAligned:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"},numericColumn:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"}};function lo(s){if(s===void 0||s===!0)return"text";if(s===!1)return!1;switch(s){case"agTextColumnFilter":return"text";case"agNumberColumnFilter":return"number";case"agDateColumnFilter":case"agDateColumnFilterString":return"date";case"agSetColumnFilter":return"set";default:return s}}function co(s){return!!s.treeData}function uo(){return{applyAggregate:Ft}}class ci{constructor(e,t,n){x(this,"options");x(this,"eventService");x(this,"gridApi");x(this,"measureCtx",null);x(this,"gridColumnDefs",[]);x(this,"columns",[]);x(this,"displayOrder",[]);x(this,"autoGroupColumnDef");x(this,"pivotMode",!1);x(this,"columnGroups",[]);x(this,"openGroups",new Set);x(this,"groupsInitialised",!1);this.options=e,this.eventService=t,this.gridApi=n,this.autoGroupColumnDef={headerName:"",minWidth:200,width:250,sortable:!1,filter:!1,resizable:!0,suppressMovable:!0,cellRenderer:"agGroupCellRenderer",...e.autoGroupColumnDef||{}}}setGridApi(e){this.gridApi=e}getAutoGroupColumnDef(){return this.autoGroupColumnDef}getOptions(){return this.options}setPivotMode(e,t="api"){this.pivotMode!==e&&(this.pivotMode=e,this.eventService.dispatchEvent("columnPivotModeChanged",{api:this.gridApi,source:t}),this.refreshAll())}isPivotMode(){return this.pivotMode}setColumnDefs(e){this.gridColumnDefs=e||[],this.buildColumns()}static generateColumnDefs(e,t=ui){if(!e||e.length===0)return[];const n=e[0];if(!n||typeof n!="object")return[];const i=new Set(["children","detail","__proto__"]),o=[];for(const a of Object.keys(n)){if(i.has(a)||a.startsWith("__"))continue;const r=n[a],l={field:a,headerName:t(a)};typeof r=="number"?(l.type="numberColumn",l.filter="number"):typeof r=="boolean"?l.type="booleanColumn":r instanceof Date&&(l.type="dateColumn"),o.push(l)}return o}getColumnGroups(){return this.columnGroups}getGroupDepth(){return this.columnGroups.reduce((e,t)=>Math.max(e,t.depth),0)}isGroupOpen(e){return this.openGroups.has(e)}setGroupOpen(e,t){t?this.openGroups.add(e):this.openGroups.delete(e),this.updateVisible(),this.refreshAll()}getColumnDefs(){return this.gridColumnDefs}buildColumns(){const e=this.columns,t=new Map;for(const c of e)t.set(c.colId,c);const n=this.options.defaultColDef||{},i={...ro,...this.options.columnTypes||{}},o=[],a=[];let r=0;const l=(c,p)=>{const h=c.colId||c.field||pn("col"),u={...n,...c};if(u.type&&i[u.type]){const f=i[u.type],g=new Set(Object.keys(c));for(const[v,m]of Object.entries(f))!g.has(v)&&!(v in n)&&(u[v]=m)}this.pushColumnInto(o,u,h,r++,t,p)},d=(c,p,h)=>{for(const u of c)if(u.children&&u.children.length){const f=u.groupId||pn("group"),g={id:f,headerName:u.headerName??"",openByDefault:u.openByDefault===!0||u.columnGroupShow==="open",parentId:p,depth:h,childColumnIds:[]};a.push(g),this.groupsInitialised||(g.openByDefault?this.openGroups.add(f):this.openGroups.delete(f)),d(u.children,f,h+1)}else l(u,p)};if(d(this.gridColumnDefs||[],null,1),this.groupsInitialised=!0,this.columnGroups=a,this.options.rowNumbers){const c={colId:"__rowNumber",headerName:"",width:60,pinned:"left",sortable:!1,filter:!1,resizable:!1,suppressMovable:!0,cellRenderer:"agRowNumberCellRenderer",cellClass:"ag-row-number-cell"};this.pushColumnInto(o,{...n,...c},"__rowNumber",-1,t,null)}for(const c of o){if(!c.groupId)continue;const p=a.find(h=>h.id===c.groupId);p&&p.childColumnIds.push(c.colId)}this.columns=o,this.displayOrder=o.map(c=>c.colId),this.updateVisible(),this.updateAutoGroupColumn(),this.refreshAll()}createColumn(e,t,n,i,o){return this.buildColumn(e,t,n,i,o)}pushColumnInto(e,t,n,i,o,a){e.push(this.buildColumn(t,n,i,o,a))}buildColumn(e,t,n,i,o){const a=i.get(t),r=e.hide===!0||e.initialHide===!0,l={colId:t,field:e.field,headerName:e.headerName??(e.field?ui(e.field):""),headerTooltip:e.headerTooltip,colDef:e,width:e.width??e.minWidth??(e.flex?200:100),minWidth:e.minWidth??20,maxWidth:e.maxWidth??Number.MAX_SAFE_INTEGER,flex:e.flex??null,pinned:e.pinned??null,hide:r,visible:!r,lockPosition:e.lockPosition??!1,type:e.type,sortable:e.sortable??!!e.field,sort:e.sort??null,sortIndex:e.sortIndex??null,resizable:e.resizable??!0,filter:lo(e.filter),floatingFilter:e.floatingFilter??!1,filterParams:e.filterParams||{},editable:e.editable??!1,cellEditor:e.cellEditor,cellEditorParams:e.cellEditorParams||{},singleClickEdit:e.singleClickEdit??this.options.singleClickEdit??!1,valueSetter:e.valueSetter,valueGetter:e.valueGetter,valueFormatter:e.valueFormatter,valueParser:e.valueParser,comparator:e.comparator,aggFunc:e.aggFunc,allowedAggFuncs:e.allowedAggFuncs??["sum","min","max","count","avg"],rowGroup:e.rowGroup??!1,rowGroupIndex:e.rowGroupIndex??null,pivot:e.pivot??!1,pivotIndex:e.pivotIndex??null,enableRowGroup:e.enableRowGroup??!0,enablePivot:e.enablePivot??!0,enableValue:e.enableValue??!0,cellRenderer:e.cellRenderer,cellRendererParams:e.cellRendererParams,cellClass:e.cellClass,cellStyle:e.cellStyle,cellDataType:e.cellDataType===!0,cellClassRules:e.cellClassRules,rowDrag:e.rowDrag===!0,headerClass:e.headerClass,checkboxSelection:e.checkboxSelection??!1,headerCheckboxSelection:e.headerCheckboxSelection??!1,headerCheckboxSelectionFilteredOnly:e.headerCheckboxSelectionFilteredOnly??!1,headerCheckboxSelectionCurrentPageOnly:e.headerCheckboxSelectionCurrentPageOnly??!1,menuTabs:e.menuTabs??["filterMenuTab","generalMenuTab","columnsMenuTab"],suppressMenu:e.suppressMenu??this.options.suppressMenu??!1,suppressMovable:e.suppressMovable??this.options.suppressMovableColumns??!1,wrapText:e.wrapText??!1,autoHeight:e.autoHeight??!1,tooltipField:e.tooltipField,tooltipValueGetter:e.tooltipValueGetter,decimals:e.decimals??0,defIndex:n,filterActive:!1,left:0,groupId:o};return a&&(l.pinned=a.pinned,l.visible=a.visible,l.width=a.width,l.flex=a.flex,l.sort=a.sort,l.sortIndex=a.sortIndex,l.rowGroup=a.rowGroup,l.rowGroupIndex=a.rowGroupIndex,l.pivot=a.pivot,l.pivotIndex=a.pivotIndex),l}updatePivotColumns(e){if(this.columns=this.columns.filter(l=>!l.colId.startsWith("__pivot_")),this.displayOrder=this.displayOrder.filter(l=>!l.startsWith("__pivot_")),!this.pivotMode){this.refreshAll();return}const t=this.getPivotColumns();if(t.length===0||!e||e.length===0){this.refreshAll();return}const n=this.getColumns().filter(l=>l.aggFunc&&!l.rowGroup&&!l.pivot),i=[];for(const l of t){const d=[],c=new Set;for(const p of e){const h=p==null?void 0:p[l.field],u=String(h);c.has(u)||(c.add(u),d.push(h))}d.sort((p,h)=>p===h?0:String(p)<String(h)?-1:1);for(const p of n){for(const f of d){const g=`__pivot_${l.colId}_${p.colId}_${f}`,v=this.createColumn({colId:g,headerName:`${String(f)}`,width:130,type:p.type,sortable:!1,filter:!1,enableRowGroup:!1,cellClass:p.cellClass,cellDataType:p.cellDataType},g,-1,new Map,null);v.aggFunc=p.aggFunc,v.groupId=l.colId,v.__pivot={pivotColumnId:l.colId,pivotField:l.field,pivotValue:f,valueColumnId:p.colId,valueField:p.field},v.valueGetter=m=>this.evaluatePivotValue(v,m.node),i.push(v)}const h=`__pivot_${l.colId}_${p.colId}_total`,u=this.createColumn({colId:h,headerName:"Total",width:130,type:p.type,sortable:!1,filter:!1,cellDataType:p.cellDataType},h,-1,new Map,null);u.aggFunc=p.aggFunc,u.groupId=l.colId,u.__pivot={pivotColumnId:l.colId,pivotField:l.field,pivotValue:void 0,valueColumnId:p.colId,valueField:p.field},u.valueGetter=f=>this.evaluatePivotValue(u,f.node),i.push(u)}}const o=new Set(t.map(l=>l.colId)),a=this.columns.reduce((l,d,c)=>o.has(d.groupId??"")?l:c,0);this.columns.splice(a+1,0,...i);for(const l of i)this.displayOrder.push(l.colId);const r=new Set(this.columnGroups.map(l=>l.id));for(const l of t)r.has(l.colId)||this.columnGroups.push({id:l.colId,headerName:l.headerName||l.field||"",openByDefault:!0,parentId:null,depth:1,childColumnIds:[]});this.refreshAll()}evaluatePivotValue(e,t){const n=e.__pivot;if(!n||!t)return;const i=[],o=c=>{if(!c.children||c.children.length===0){i.push(c);return}for(const p of c.children)o(p)};o(t);const r=(n.pivotValue===void 0?i:i.filter(c=>{var p;return String((p=c.data)==null?void 0:p[n.pivotField])===String(n.pivotValue)})).map(c=>{var p;return(p=c.data)==null?void 0:p[n.valueField]}).filter(c=>typeof c=="number");if(r.length===0)return null;const l=this.columns.find(c=>c.colId===n.valueColumnId),{applyAggregate:d}=uo();return d(l,e.aggFunc,r)}updateAutoGroupColumn(){const e="ag-Grid-AutoColumn",t=!!this.options.treeData,n=this.getRowGroupColumns(),i=this.options.groupDisplayType||"singleColumn",o=t||n.length>0&&i!=="multipleColumns";for(const c of n)i==="multipleColumns"?(c.cellRenderer="agGroupCellRenderer",c.cellRendererParams={...c.cellRendererParams||{},suppressCount:!0}):c.cellRenderer==="agGroupCellRenderer"&&!c.colDef.cellRenderer&&(c.cellRenderer=void 0,c.cellRendererParams=void 0);const a=this.columns.find(c=>c.colId===e);if(!o){a&&(this.columns=this.columns.filter(c=>c.colId!==e),this.displayOrder=this.displayOrder.filter(c=>c!==e));return}const r={...this.autoGroupColumnDef};if(r.colId=e,a)a.headerName=r.headerName??"",a.colDef=r,a.cellRenderer=r.cellRenderer,a.cellRendererParams=r.cellRendererParams,a.width=r.width??a.width,a.minWidth=r.minWidth??a.minWidth,a.pinned=r.pinned??"left";else{const c=this.createColumn(r,e,-2,new Map,null);this.columns.unshift(c),this.displayOrder.unshift(e)}const l=this.columns.find(c=>c.colId===e),d=()=>this.getRowGroupColumns()[0];l.valueGetter=c=>{const p=c.node;if(!p)return"";if(p.key!==null&&p.key!==void 0)return p.key;if(co(this.options))return"";const h=d();return h!=null&&h.field&&p.data?p.data[h.field]??"":""}}updateVisible(){for(const e of this.columns)e.visible=!e.hide&&this.isGroupChainOpen(e.groupId)}isGroupChainOpen(e){let t=e;for(;t;){if(!this.openGroups.has(t))return!1;const n=this.columnGroups.find(i=>i.id===t);t=(n==null?void 0:n.parentId)??null}return!0}refreshAll(){this.eventService.dispatchEvent("columnEverythingChanged",{api:this.gridApi,source:"gridOptionsChanged"}),this.eventService.dispatchEvent("displayedColumnsChanged",{api:this.gridApi})}getAllColumns(){return this.columns.slice()}getColumn(e){const t=typeof e=="string"?e:e.colId;return this.columns.find(n=>n.colId===t)}getColumns(){return this.displayOrder.map(e=>this.getColumn(e)).filter(Boolean)}getDisplayedColumns(){return this.getColumns().filter(e=>e.visible)}getDisplayedLeftColumns(){return this.getDisplayedColumns().filter(e=>e.pinned==="left")}getDisplayedCenterColumns(){return this.getDisplayedColumns().filter(e=>e.pinned!=="left"&&e.pinned!=="right")}getDisplayedRightColumns(){return this.getDisplayedColumns().filter(e=>e.pinned==="right")}getDisplayedColumnsByType(){return{left:this.getDisplayedLeftColumns(),center:this.getDisplayedCenterColumns(),right:this.getDisplayedRightColumns()}}getRowGroupColumns(){return this.getColumns().filter(e=>e.rowGroup).sort((e,t)=>(e.rowGroupIndex??0)-(t.rowGroupIndex??0))}getPivotColumns(){return this.getColumns().filter(e=>e.pivot).sort((e,t)=>(e.pivotIndex??0)-(t.pivotIndex??0))}getValueColumns(){return this.pivotMode?this.getColumns().filter(e=>e.aggFunc&&!e.rowGroup&&!e.pivot):this.getColumns().filter(e=>!!e.aggFunc)}isRowGroupActive(){return this.getRowGroupColumns().length>0}setRowGroupColumns(e,t="api"){const n=e.map(i=>this.getColumn(i)).filter(Boolean);for(const i of this.getColumns())n.includes(i)||(i.rowGroup=!1,i.rowGroupIndex=null);n.forEach((i,o)=>{i.rowGroup=!0,i.rowGroupIndex=o,i.pivot=!1,i.pivotIndex=null}),this.eventService.dispatchEvent("columnRowGroupChanged",{api:this.gridApi,source:t,columns:n}),this.updateAutoGroupColumn(),this.refreshAll()}addRowGroupColumn(e,t="api"){const n=this.getColumn(e);if(!n)return;const i=this.getRowGroupColumns();n.rowGroup=!0,n.rowGroupIndex=i.length,n.pivot=!1,this.eventService.dispatchEvent("columnRowGroupChanged",{api:this.gridApi,source:t,columns:[n]}),this.updateAutoGroupColumn(),this.refreshAll()}removeRowGroupColumn(e,t="api"){const n=this.getColumn(e);if(!n)return;n.rowGroup=!1,n.rowGroupIndex=null,this.getRowGroupColumns().forEach((o,a)=>o.rowGroupIndex=a),this.eventService.dispatchEvent("columnRowGroupChanged",{api:this.gridApi,source:t,columns:[n]}),this.updateAutoGroupColumn(),this.refreshAll()}setValueColumns(e,t="api"){const n=e.map(i=>this.getColumn(i)).filter(Boolean);for(const i of this.getColumns())n.includes(i)?i.aggFunc||(i.aggFunc="sum"):i.aggFunc&&!i.rowGroup&&(i.aggFunc=void 0);this.eventService.dispatchEvent("columnValueChanged",{api:this.gridApi,source:t,columns:n}),this.refreshAll()}addValueColumn(e,t="sum",n="api"){const i=this.getColumn(e);i&&(i.aggFunc=t,this.eventService.dispatchEvent("columnValueChanged",{api:this.gridApi,source:n,columns:[i]}),this.refreshAll())}setPivotColumns(e,t="api"){const n=e.map(i=>this.getColumn(i)).filter(Boolean);for(const i of this.getColumns())i.pivot=n.includes(i),i.pivotIndex=n.includes(i)?n.indexOf(i):null;this.refreshAll()}setColumnVisible(e,t,n="api"){const i=this.getColumn(e);!i||i.visible===t||(i.hide=!t,i.visible=t,this.eventService.dispatchEvent("columnVisible",{api:this.gridApi,column:i,visible:t,source:n}),this.eventService.dispatchEvent("displayedColumnsChanged",{api:this.gridApi,source:n}),this.refreshAll())}setColumnsVisible(e,t,n="api"){for(const i of e)this.setColumnVisible(i,t,n)}setColumnPinned(e,t,n="api"){const i=this.getColumn(e);i&&(i.lockPosition&&t!==i.pinned||(i.pinned=t,this.eventService.dispatchEvent("columnPinned",{api:this.gridApi,column:i,pinned:t,source:n}),this.eventService.dispatchEvent("displayedColumnsChanged",{api:this.gridApi,source:n}),this.refreshAll()))}setColumnsPinned(e,t,n="api"){for(const i of e)this.setColumnPinned(i,t,n)}moveColumn(e,t,n="api"){const i=this.getColumn(e);i&&this.moveColumnByIndex(this.displayOrder.indexOf(i.colId),t,n)}moveColumnByIndex(e,t,n="api"){const i=this.displayOrder.slice();if(e<0||e>=i.length)return;const[o]=i.splice(e,1);i.splice(Math.max(0,Math.min(i.length,t)),0,o),this.displayOrder=i;const a=this.getColumn(o);this.eventService.dispatchEvent("columnMoved",{api:this.gridApi,column:a,toIndex:t,source:n}),this.eventService.dispatchEvent("displayedColumnsChanged",{api:this.gridApi,source:n}),this.refreshAll()}getColumnState(){return this.getColumns().map(e=>({colId:e.colId,hide:e.hide,pinned:e.pinned,width:e.width,flex:e.flex??void 0,sort:e.sort,sortIndex:e.sortIndex,rowGroupIndex:e.rowGroupIndex,pivotIndex:e.pivotIndex,aggFunc:e.aggFunc}))}applyColumnState(e,t=!1){for(const n of e){const i=this.getColumn(n.colId);i&&(n.hide!==void 0&&(i.hide=n.hide,i.visible=!n.hide),n.pinned!==void 0&&(i.pinned=n.pinned),n.width!==void 0&&(i.width=n.width),n.flex!==void 0&&(i.flex=n.flex),n.sort!==void 0&&(i.sort=n.sort),n.sortIndex!==void 0&&(i.sortIndex=n.sortIndex),n.rowGroupIndex!==void 0&&(i.rowGroup=n.rowGroupIndex!==null,i.rowGroupIndex=n.rowGroupIndex),n.pivotIndex!==void 0&&(i.pivot=n.pivotIndex!==null,i.pivotIndex=n.pivotIndex),n.aggFunc!==void 0&&(i.aggFunc=n.aggFunc))}if(t){const n=new Map(e.map(o=>[o.colId,o.colId])),i=this.displayOrder.filter(o=>!n.has(o));this.displayOrder=[...e.map(o=>o.colId).filter(o=>this.getColumn(o)),...i]}this.refreshAll()}resetColumnState(){this.buildColumns()}getMeasureContext(){if(this.measureCtx)return this.measureCtx;const e=document.createElement("canvas");return this.measureCtx=e.getContext("2d"),this.measureCtx&&(this.measureCtx.font='400 13px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'),this.measureCtx}measureTextWidth(e){const t=this.getMeasureContext();return t?t.measureText(e).width:e.length*8}sizeColumnsToFit(e,t=[]){const n=[this.getDisplayedLeftColumns(),this.getDisplayedCenterColumns(),this.getDisplayedRightColumns()];for(const i of n){let a=0,r=0;for(const d of i)t.includes(d.colId)?r+=d.width:d.flex!==null&&d.flex>0?a+=d.flex:r+=d.width;const l=Math.max(0,e-r-32);if(a>0){for(const d of i)if(d.flex!==null&&d.flex>0&&!t.includes(d.colId)){const c=Math.max(d.minWidth,Math.floor(l*d.flex/a));d.width=Math.min(d.maxWidth,c)}}}this.eventService.dispatchEvent("columnResized",{api:this.gridApi,source:"sizeColumnsToFit",finished:!0})}autoSizeColumn(e,t=!1){var r,l,d,c,p,h;const n=this.getColumn(e);if(!n)return;let i=this.measureTextWidth(n.headerName)+32;t||(i+=16);const o=((l=(r=this.gridApi)==null?void 0:r.getDisplayedRowCount)==null?void 0:l.call(r))??0,a=Math.min(o,300);for(let u=0;u<a;u++){const f=(c=(d=this.gridApi)==null?void 0:d.getDisplayedRowAtIndex)==null?void 0:c.call(d,u);if(!f)continue;const g=(h=(p=this.gridApi)==null?void 0:p.getCellText)==null?void 0:h.call(p,n,f);g&&(i=Math.max(i,this.measureTextWidth(g)+32))}n.width=Math.max(n.minWidth,Math.min(n.maxWidth,Math.ceil(i))),n.flex=null,this.eventService.dispatchEvent("columnResized",{api:this.gridApi,source:"autoSizeColumn",column:n,finished:!0})}autoSizeAllColumns(e=!1){for(const t of this.getDisplayedColumns())this.autoSizeColumn(t,e)}}function ui(s){const e=s.replace(/([A-Z])/g," $1").replace(/[_-]/g," ").trim();return e.charAt(0).toUpperCase()+e.slice(1)}class ho{constructor(){x(this,"listeners",new Map)}addEventListener(e,t){let n=this.listeners.get(e);n||(n=[],this.listeners.set(e,n)),n.push(t)}removeEventListener(e,t){const n=this.listeners.get(e);if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}dispatchEvent(e,t){const n=this.listeners.get(e);if(!n||n.length===0)return;const i={type:e,...t||{}};for(const o of n.slice())o(i)}hasListener(e){return(this.listeners.get(e)||[]).length>0}}const hi={sort:"排序",sortAscending:"升序排列",sortDescending:"降序排列",columnSize:"列宽",autosizeThisColumn:"自适应本列宽度",autosizeAllColumns:"自适应所有列宽",pinColumn:"固定列",pinLeft:"固定到左侧",noPin:"取消固定",pinRight:"固定到右侧",filter:"筛选",openFilter:"打开筛选",openMultiFilter:"打开多条件筛选",openAdvancedFilter:"打开高级筛选",clearFilter:"清除筛选",formula:"公式",addFormula:"添加公式…",editFormula:"编辑公式…",visibility:"显示/隐藏",hideColumn:"隐藏本列",chooseColumns:"选择列…",openFilterTitle:"打开筛选",openMenuTitle:"打开菜单",sortAsc:"升序",sortDesc:"降序",sortNone:"无",copy:"复制",copyWithHeaders:"连同表头复制",paste:"粘贴",export:"导出",csvExport:"导出 CSV",excelExport:"导出 Excel",resetColumns:"重置列",sizeToFit:"适应容器宽度",expandAll:"展开全部",collapseAll:"折叠全部",pinRow:"固定行",pinToTop:"固定到顶部",pinToBottom:"固定到底部",unpin:"取消固定",filterOoo:"筛选…",apply:"应用",clear:"清除",search:"搜索…",searchOoo:"搜索…",noMatches:"无匹配项",selectAll:"全选",clearAll:"全部清除",join:"条件组合:",and:"并且",or:"或者",from:"从",to:"到",secondValue:"第二个值",value:"值",removeFilter:"移除筛选",addFilter:"+ 添加筛选",advancedFilter:"高级筛选",conditionsUnit:"个条件",addCondition:"+ 添加条件",condTrue:"真",condFalse:"假",contains:"包含",notEqual:"不等于",startsWith:"开头是",endsWith:"结尾是",equals:"等于",blank:"为空",notBlank:"不为空",greaterThan:"大于",greaterThanOrEqual:"大于等于",lessThan:"小于",lessThanOrEqual:"小于等于",inRange:"介于",columns:"列",filters:"筛选",charts:"图表",rowGroups:"行分组",dragColumnsHere:"拖拽列到此处进行分组",searchColumns:"搜索列…",noMatchingColumns:"没有匹配的列",groupByThisColumn:"按此列分组",pinColumnTitle:"固定列",remove:"移除",page:"页码",pageSize:"每页行数:",pageNumber:"输入页码",find:"在表格中查找…",matchCase:"区分大小写",prevMatch:"上一个匹配",nextMatch:"下一个匹配",of:"/",rangeTo:"至",loadingOoo:"加载中…",noRowsToShow:"暂无数据",formulaPlaceholder:"例如 =price * quantity",dataGrid:"数据表格",dragRow:"拖拽行",expandGroup:"展开分组",close:"关闭",save:"保存",delete:"删除",totalRows:"总行数",rows:"行数",filtered:"筛选后",selected:"已选中",average:"平均",count:"计数",min:"最小",max:"最大",sum:"合计",note:"便签",writeNote:"写便签…",formulaPreview:"预览(第 1 行)",formulaError:"错误",invalidFormula:"公式无效",functions:"函数",integratedCharts:"集成图表",chart:"图表",chartType:"图表类型",chartCategory:"类目",chartSeries:"数据系列",chartGroup:"分组",createChart:"创建图表",noChartsCreated:"暂无图表",downloadPng:"下载 PNG",chartLine:"折线图",chartArea:"面积图",chartColumn:"柱状图",chartBar:"条形图",chartPie:"饼图",chartScatter:"散点图"},po={contains:"contains",notEqual:"notEqual",startsWith:"startsWith",endsWith:"endsWith",equals:"equals",blank:"blank",notBlank:"notBlank",greaterThan:"greaterThan",greaterThanOrEqual:"greaterThanOrEqual",lessThan:"lessThan",lessThanOrEqual:"lessThanOrEqual",inRange:"inRange",true:"condTrue",false:"condFalse"};class fo{constructor(e){this.overrides=e}t(e){const t=this.overrides[e];return typeof t=="string"&&t.length?t:hi[e]??e}}function go(s){return new fo(s??{})}function mo(s){return!s||typeof s!="object"?!1:s.__isGroup===!0?!0:typeof s.childCount=="number"&&s.childCount>=0}class vo{constructor(e){x(this,"eventService");x(this,"columns");x(this,"getSortModel");x(this,"getFilterModel");x(this,"rowNodeServices");x(this,"datasource",null);x(this,"stores",new Map);x(this,"rowNodeMap",new Map);x(this,"displayRows",[]);x(this,"blockSize");this.eventService=e.eventService,this.columns=e.columns,this.getSortModel=e.getSortModel,this.getFilterModel=e.getFilterModel,this.rowNodeServices=e.rowNodeServices,this.blockSize=e.options.cacheBlockSize??100}getType(){return"serverSide"}setDatasource(e){this.datasource=e,this.purgeCache()}getStore(e){return this.stores.get(e)}getOrCreateStore(e){let t=this.stores.get(e);return t||(t={rows:[],lastRow:null,loading:!1,failed:!1},this.stores.set(e,t)),t}isLoading(){for(const e of this.stores.values())if(e.loading)return!0;return!1}loadBlock(e,t,n){if(!this.datasource)return;const i=this.getOrCreateStore(e);if(i.loading)return;for(let a=i.rows.length;a<n;a++)i.rows.push(null);i.loading=!0,this.eventService.dispatchEvent("modelUpdated",{});const o={startRow:t,endRow:n,rowGroupCols:this.columns().filter(a=>a.rowGroup),valueCols:this.columns().filter(a=>a.aggFunc&&!a.rowGroup),pivotCols:this.columns().filter(a=>a.pivot),groupKeys:e?e.split("|"):[],sortModel:this.getSortModel(),filterModel:this.getFilterModel(),successCallback:(a,r)=>{i.loading=!1,this.onBlockLoaded(e,a,r??null)},failCallback:()=>{i.loading=!1,i.failed=!0,this.eventService.dispatchEvent("modelUpdated",{})}};this.datasource.getRows(o)}onBlockLoaded(e,t,n){const i=this.getOrCreateStore(e);i.lastRow=n,i.failed=!1;for(let o=0;o<t.length;o++){const a=t[o],r=(i.rows.length>0,o),l=this.createNode(a,e,o,r);i.rows[r]=l}for(;i.rows.length&&i.rows[i.rows.length-1]===null;)i.rows.pop();this.buildDisplayRows(),this.eventService.dispatchEvent("modelUpdated",{})}createNode(e,t,n,i){const o=mo(e),a=(e==null?void 0:e.id)!==void 0&&(e==null?void 0:e.id)!==null?String(e.id):`${t}#${i}`,r=this.rowNodeMap.get(a),l=r instanceof ut?r:new ut(e,this.rowNodeServices,a);return l.data=e,l.rowIndex=n,o&&(l.group=!0,l.key=String(ke(this.columns().find(d=>d.rowGroup),l,null)??""),l.level=t?t.split("|").length:0,l.uiLevel=l.level,l.allChildrenCount=typeof e.childCount=="number"?e.childCount:null,l.expanded=this.stores.has(`${t?t+"|":""}${l.key}`)),this.rowNodeMap.set(a,l),l}buildDisplayRows(){const e=[],t=(n,i)=>{const o=this.stores.get(n);if(o){for(const a of o.rows)if(a&&(a.uiLevel=i,e.push(a),a.group&&a.expanded)){const r=`${n?n+"|":""}${a.key}`;t(r,i+1)}}};t("",0),this.displayRows=e,this.displayRows.forEach((n,i)=>n.__displayIndex=i)}ensureLoaded(e,t){let n=0;const i=a=>{const r=this.stores.get(a);if(r){for(const l of r.rows)if(l){if(n>=e&&n<=t){const d=Math.floor(n/this.blockSize)*this.blockSize,c=d+this.blockSize,p=r.lastRow,h=p!==null?Math.min(p,c):c;n<(r.rows.length||0)&&d<(r.rows.length||0)||(r.lastRow===null||c<=r.lastRow)&&this.loadBlock(a,d,h)}n++,l.group&&l.expanded&&i(`${a?a+"|":""}${l.key}`)}}};i("");const o=this.stores.get("");(!o||o.rows.length===0&&o.lastRow===null)&&this.loadBlock("",0,this.blockSize)}refreshModel(e){this.ensureLoaded(0,this.blockSize),this.eventService.dispatchEvent("modelUpdated",{})}onViewportChanged(e,t){this.ensureLoaded(e,t)}setNodeExpanded(e,t){if(e.group){if(e.expanded=t,t){const n=this.groupPathFor(e);this.stores.has(n)||this.loadBlock(n,0,this.blockSize)}this.buildDisplayRows(),this.eventService.dispatchEvent("modelUpdated",{})}}groupPathFor(e){const t=[];let n=e;for(;n&&n.group;)t.unshift(n.key??""),n=n.parent??null;return t.join("|")}purgeCache(){this.stores.clear(),this.rowNodeMap.clear(),this.displayRows=[],this.refreshModel("everything")}onSortOrFilterChanged(){this.purgeCache()}getRowCount(){return this.displayRows.length}getTotalRowCount(){const e=this.stores.get("");return(e==null?void 0:e.lastRow)??0}getRow(e){return this.displayRows[e]}getRowNode(e){return this.rowNodeMap.get(e)}forEachNode(e){this.displayRows.forEach((t,n)=>e(t,n))}forEachLeafNode(e){let t=0;for(const n of this.displayRows)!n.group&&!n.footer&&e(n,t++)}isEmpty(){return this.displayRows.length===0}getTopLevelRows(){const e=this.stores.get("");return(e==null?void 0:e.rows.filter(Boolean))||[]}updateRowData(e){this.refreshModel("everything")}applyTransaction(e){const t={add:[],remove:[],update:[]};for(const n of e.update||[]){const i=(n==null?void 0:n.id)!==void 0?String(n.id):void 0,o=i?this.rowNodeMap.get(i):void 0;o&&(o.data=n,t.update.push(o))}return this.eventService.dispatchEvent("modelUpdated",{}),t}destroy(){var e,t;(t=(e=this.datasource)==null?void 0:e.destroy)==null||t.call(e),this.stores.clear(),this.rowNodeMap.clear(),this.displayRows=[]}expandAll(){for(const e of this.rowNodeMap.values())if(e.group){e.expanded=!0;const t=this.groupPathFor(e);this.stores.has(t)||this.loadBlock(t,0,this.blockSize)}this.buildDisplayRows(),this.eventService.dispatchEvent("modelUpdated",{})}collapseAll(){for(const e of this.rowNodeMap.values())e.group&&(e.expanded=!1);this.buildDisplayRows(),this.eventService.dispatchEvent("modelUpdated",{})}getPinnedTopRowCount(){return 0}getPinnedBottomRowCount(){return 0}}class wo{constructor(e){x(this,"eventService");x(this,"getSortModel");x(this,"getFilterModel");x(this,"rowNodeServices");x(this,"datasource",null);x(this,"nodes",[]);x(this,"rowNodeMap",new Map);x(this,"blockSize");x(this,"loading",!1);this.eventService=e.eventService,this.getSortModel=e.getSortModel,this.getFilterModel=e.getFilterModel,this.rowNodeServices=e.rowNodeServices,this.blockSize=e.options.cacheBlockSize??100}getType(){return"infinite"}setDatasource(e){this.datasource=e,this.nodes=[],this.rowNodeMap.clear(),this.loadBlock(0,this.blockSize)}loadBlock(e,t){if(!(!this.datasource||this.loading)){for(let n=this.nodes.length;n<t;n++)this.nodes.push(null);this.loading=!0,this.eventService.dispatchEvent("modelUpdated",{}),this.datasource.getRows({startRow:e,endRow:t,rowGroupCols:[],valueCols:[],pivotCols:[],groupKeys:[],sortModel:this.getSortModel(),filterModel:this.getFilterModel(),successCallback:(n,i)=>{this.loading=!1,n.forEach((o,a)=>{const r=(o==null?void 0:o.id)!==void 0?String(o.id):`row-${e+a}`;let l=this.rowNodeMap.get(r);l||(l=new ut(o,this.rowNodeServices,r),this.rowNodeMap.set(r,l)),l.data=o,l.rowIndex=e+a,this.nodes[e+a]=l}),this.eventService.dispatchEvent("modelUpdated",{})},failCallback:()=>{this.loading=!1,this.eventService.dispatchEvent("modelUpdated",{})}})}}onViewportChanged(e,t){const n=Math.floor(e/this.blockSize)*this.blockSize;n+this.blockSize>this.nodes.length&&this.loadBlock(n,n+this.blockSize)}onSortOrFilterChanged(){this.nodes=[],this.rowNodeMap.clear(),this.loadBlock(0,this.blockSize)}isLoading(){return this.loading}getRowCount(){return this.nodes.length}getRow(e){return this.nodes[e]??void 0}getRowNode(e){return this.rowNodeMap.get(e)}forEachNode(e){this.nodes.forEach((t,n)=>{t&&e(t,n)})}forEachLeafNode(e){this.forEachNode(e)}isEmpty(){return this.nodes.filter(Boolean).length===0}getTopLevelRows(){return this.nodes.filter(Boolean)}updateRowData(){this.onSortOrFilterChanged()}applyTransaction(){return null}destroy(){var e,t;(t=(e=this.datasource)==null?void 0:e.destroy)==null||t.call(e),this.nodes=[],this.rowNodeMap.clear()}refreshModel(){this.eventService.dispatchEvent("modelUpdated",{})}expandAll(){}collapseAll(){}getPinnedTopRowCount(){return 0}getPinnedBottomRowCount(){return 0}}class bo{constructor(e){x(this,"eventService");x(this,"rowNodeServices");x(this,"datasource",null);x(this,"nodes",[]);x(this,"rowNodeMap",new Map);x(this,"loading",!1);this.eventService=e.eventService,this.rowNodeServices=e.rowNodeServices}getType(){return"viewport"}setDatasource(e){this.datasource=e,this.nodes=[],this.rowNodeMap.clear(),this.setViewportRange(0,50)}setViewportRange(e,t){if(!(!this.datasource||this.loading)){this.nodes=this.nodes.filter((n,i)=>i>=e&&i<=t);for(let n=e;n<=t;n++)this.nodes[n-e]||(this.nodes[n-e]=null);this.loading=!0,this.eventService.dispatchEvent("modelUpdated",{}),this.datasource.getRows({startRow:e,endRow:t,rowGroupCols:[],valueCols:[],pivotCols:[],groupKeys:[],sortModel:[],filterModel:{},successCallback:n=>{this.loading=!1,n.forEach((i,o)=>{const a=(i==null?void 0:i.id)!==void 0?String(i.id):`vrow-${e+o}`;let r=this.rowNodeMap.get(a);r||(r=new ut(i,this.rowNodeServices,a),this.rowNodeMap.set(a,r)),r.data=i,r.rowIndex=e+o,this.nodes[e+o-e]=r}),this.eventService.dispatchEvent("modelUpdated",{})},failCallback:()=>{this.loading=!1,this.eventService.dispatchEvent("modelUpdated",{})}})}}setViewportDatasource(e){this.datasource=e,this.nodes=[],this.rowNodeMap.clear(),this.setViewportRange(0,50)}onViewportChanged(e,t){this.setViewportRange(e,t)}isLoading(){return this.loading}getRowCount(){return this.nodes.filter(Boolean).length}getRow(e){return this.nodes[e]??void 0}getRowNode(e){return this.rowNodeMap.get(e)}forEachNode(e){this.nodes.forEach((t,n)=>{t&&e(t,n)})}forEachLeafNode(e){this.forEachNode(e)}isEmpty(){return this.getRowCount()===0}getTopLevelRows(){return this.nodes.filter(Boolean)}updateRowData(){}applyTransaction(){return null}destroy(){var e,t;(t=(e=this.datasource)==null?void 0:e.destroy)==null||t.call(e),this.nodes=[],this.rowNodeMap.clear()}refreshModel(){this.eventService.dispatchEvent("modelUpdated",{})}expandAll(){}collapseAll(){}getPinnedTopRowCount(){return 0}getPinnedBottomRowCount(){return 0}}function pi(s){return String(s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}const ht=["#3ba1ff","#47cf7c","#ffb700","#ff6b6b","#a86dd7","#00c2c7"];class yo{constructor(e,t){x(this,"charts",new Map);x(this,"chartCounter",0);x(this,"currentType","line");x(this,"timeSeries",!1);this.grid=e,this.popupService=t}isEnabled(){return!!this.grid.getOptions().enableCharts}getChartData(e={}){const t=this.grid.getColumnModel(),n=t.getRowGroupColumns();let i=e.categoryColumn;const o=e.valueColumns&&e.valueColumns.length?e.valueColumns:t.getValueColumns().filter(l=>l.aggFunc),a=[],r=o.map(()=>[]);if(n.length>0)((d,c)=>{for(const p of d)if(p.group){const h=n[0]?String(ke(n[0],p,this.grid.getApi())??""):p.key??"";a.push(h);for(let u=0;u<o.length;u++){const f=[];fi(p,o[u],f),r[u].push(Number(Ft(o[u],o[u].aggFunc,f))||0)}}})(this.grid.getRowModel().getTopLevelRows());else if(i||(i=this.grid.getColumns().center.find(l=>l.field&&l.type!=="numberColumn")||this.grid.getColumns().center[0]),this.grid.getRowModel().forEachNode(l=>{if(l.group||l.footer)return;const d=i?ke(i,l,this.grid.getApi()):"";a.push(String(d??""));for(let c=0;c<o.length;c++){const p=ke(o[c],l,this.grid.getApi());r[c].push(typeof p=="number"?p:Number(p)||0)}}),a.length>200){const l=Math.ceil(a.length/200),d=[],c=r.map(()=>[]);for(let p=0;p<a.length;p+=l){d.push(a[p]);for(let h=0;h<r.length;h++)c[h].push(r[h][p])}return{categories:d,series:o.map((p,h)=>({title:p.headerName,data:c[h]}))}}return{categories:a,series:o.map((l,d)=>({title:l.headerName,data:r[d]}))}}buildChartPanel(){const e=document.createElement("div");e.className="ag-chart-panel";const t=document.createElement("div");t.className="ag-side-bar-section-title",t.textContent=this.grid.t("integratedCharts"),e.appendChild(t);const n=document.createElement("div");n.className="ag-chart-panel-label",n.textContent=this.grid.t("chartType"),e.appendChild(n);const i=document.createElement("select");i.className="ag-chart-panel-select";const o=[{value:"line",label:this.grid.t("chartLine")},{value:"area",label:this.grid.t("chartArea")},{value:"column",label:this.grid.t("chartColumn")},{value:"bar",label:this.grid.t("chartBar")},{value:"pie",label:this.grid.t("chartPie")},{value:"scatter",label:this.grid.t("chartScatter")}];for(const v of o){const m=document.createElement("option");m.value=v.value,m.textContent=v.label,v.value===this.currentType&&(m.selected=!0),i.appendChild(m)}i.addEventListener("change",()=>{this.currentType=i.value}),e.appendChild(i);const a=document.createElement("div");a.className="ag-chart-panel-label",a.textContent=this.grid.t("chartCategory"),e.appendChild(a);const r=document.createElement("select");r.className="ag-chart-panel-select";const l=this.grid.getColumnModel().getRowGroupColumns(),d=l.length>0?l:this.grid.getColumns().center.filter(v=>v.field);for(const v of d){const m=document.createElement("option");m.value=v.colId,m.textContent=l.length>0?`${this.grid.t("chartGroup")}: ${v.headerName}`:v.headerName,r.appendChild(m)}e.appendChild(r);const c=document.createElement("div");c.className="ag-chart-panel-label",c.textContent=this.grid.t("chartSeries"),e.appendChild(c);const p=this.grid.getColumnModel().getValueColumns().filter(v=>v.aggFunc),h=document.createElement("div");h.className="ag-chart-panel-series";const u=new Set(p.slice(0,3).map(v=>v.colId));for(const v of this.grid.getColumns().center.filter(m=>m.field)){const m=document.createElement("label");m.className="ag-chart-panel-series-item";const b=document.createElement("input");b.type="checkbox",b.checked=u.has(v.colId),b.addEventListener("change",()=>{b.checked?u.add(v.colId):u.delete(v.colId)}),m.appendChild(b);const k=document.createElement("span");k.textContent=v.headerName,m.appendChild(k),h.appendChild(m)}e.appendChild(h);const f=document.createElement("button");f.className="ag-button ag-button-primary ag-chart-panel-create",f.textContent=this.grid.t("createChart"),f.addEventListener("click",()=>{const v=this.grid.getColumn(r.value)||void 0,m=[...u].map(b=>this.grid.getColumn(b)).filter(Boolean);this.createChart({type:this.currentType,categoryColumn:v,valueColumns:m})}),e.appendChild(f);const g=document.createElement("div");if(g.className="ag-chart-panel-list",this.charts.size===0){const v=document.createElement("div");v.className="ag-side-bar-empty",v.textContent=this.grid.t("noChartsCreated"),g.appendChild(v)}for(const[v,m]of this.charts){const b=document.createElement("div");b.className="ag-chart-panel-list-item";const k=document.createElement("span");k.textContent=m.title,b.appendChild(k);const C=document.createElement("button");C.className="ag-column-group-remove",C.textContent="×",C.addEventListener("click",()=>this.destroyChart(v)),b.appendChild(C),g.appendChild(b)}return e.appendChild(g),e}createChart(e={}){var v,m,b,k;const t=e.type||this.currentType,n=this.getChartData({categoryColumn:e.categoryColumn,valueColumns:e.valueColumns}),i=`chart-${++this.chartCounter}`,o=e.title||`${this.grid.t(`chart${t.charAt(0).toUpperCase()}${t.slice(1)}`)}`,{ePopup:a}=this.popupService.createPopup(640,"ag-chart-window");a.innerHTML="";const r=document.createElement("div");r.className="ag-chart-window-header";const l=document.createElement("span");l.className="ag-chart-window-title",l.textContent=o,r.appendChild(l);const d=document.createElement("button");d.className="ag-button ag-button-small",d.textContent=this.grid.t("downloadPng"),r.appendChild(d);const c=document.createElement("button");c.className="ag-button ag-button-small",c.textContent="×",c.title=this.grid.t("close"),c.addEventListener("click",()=>this.destroyChart(i)),r.appendChild(c),a.appendChild(r);const p=document.createElement("div");p.className="ag-chart-window-body";const h=document.createElement("canvas");h.className="ag-chart-canvas",h.width=600,h.height=360,p.appendChild(h);const u=document.createElement("div");u.className="ag-chart-tooltip",u.style.display="none",p.appendChild(u),h.addEventListener("mousemove",C=>this.onChartHover({id:i,ePopup:a,canvas:h,type:t,data:n,title:o},C,u)),h.addEventListener("mouseleave",()=>{u.style.display="none"});const f=document.createElement("div");f.className="ag-chart-legend",p.appendChild(f),a.appendChild(p),this.timeSeries=n.categories.length>0&&n.categories.every(C=>!isNaN(Date.parse(String(C)))&&isNaN(Number(C)));const g={id:i,ePopup:a,canvas:h,type:t,data:n,title:o};return this.charts.set(i,g),d.addEventListener("click",()=>{const C=h.toDataURL("image/png"),w=document.createElement("a");w.href=C,w.download=`${o.replace(/\s+/g,"-").toLowerCase()}.png`,w.click()}),this.popupService.positionAt(a,this.grid.getRootElement()),a.style.top="60px",this.renderChart(g),this.saveCharts(),this.grid.getEventService().dispatchEvent("chartCreated",{chartId:i,chartTitle:o,api:this.grid.getApi()}),(m=(v=this.grid.getOptions()).onChartCreated)==null||m.call(v,{chartId:i,chartTitle:o,api:this.grid.getApi()}),((b=this.grid.getSideBarService())==null?void 0:b.getActivePanel())==="charts"&&((k=this.grid.getSideBarService())==null||k.refresh()),i}destroyChart(e){var n,i,o,a;const t=this.charts.get(e);t&&(t.ePopup.remove(),this.charts.delete(e),this.saveCharts(),this.grid.getEventService().dispatchEvent("chartDestroyed",{chartId:e,api:this.grid.getApi()}),(i=(n=this.grid.getOptions()).onChartDestroyed)==null||i.call(n,{chartId:e,api:this.grid.getApi()}),((o=this.grid.getSideBarService())==null?void 0:o.getActivePanel())==="charts"&&((a=this.grid.getSideBarService())==null||a.refresh()))}getChartModels(){return[...this.charts.values()].map(e=>({chartId:e.id,chartType:e.type,title:e.title}))}refreshCharts(){for(const e of this.charts.values())e.data=this.getChartData(),this.renderChart(e)}onChartHover(e,t,n){const o=e.canvas.getBoundingClientRect(),a=600/(o.width||1),r=360/(o.height||1),l=(t.clientX-o.left)*a,d=(t.clientY-o.top)*r,c={top:20,right:20,bottom:34,left:56},p=600-c.left-c.right,h=360-c.top-c.bottom;if(l<c.left||l>c.left+p||d<c.top||d>c.top+h){n.style.display="none";return}if(e.type==="pie"){n.style.display="none";return}const u=e.type==="bar",f=Math.max(1,e.data.categories.length),g=(u?h:p)/f,v=Math.floor((u?d-c.top:l-c.left)/g);if(v<0||v>=e.data.categories.length){n.style.display="none";return}const m=e.data.series.map(b=>`${b.title}: ${this.formatTick(b.data[v]??0)}`);n.innerHTML=`<div class="ag-chart-tooltip-title">${pi(e.data.categories[v])}</div>`+m.map(b=>`<div>${pi(b)}</div>`).join(""),n.style.display="block",n.style.left=`${t.clientX-o.left+12}px`,n.style.top=`${t.clientY-o.top+12}px`}storageKey(){const t=this.grid.getOptions().chartStorageKey;return t?`rowvia-charts:${t}`:null}saveCharts(){const e=this.storageKey();if(!e)return;const t=[...this.charts.values()].map(n=>({id:n.id,type:n.type,title:n.title,data:n.data}));try{localStorage.setItem(e,JSON.stringify(t))}catch{}}loadCharts(){const e=this.storageKey();if(!e)return;let t=[];try{const n=localStorage.getItem(e);n&&(t=JSON.parse(n))}catch{return}for(const n of t)this.restoreChart(n)}restoreChart(e){const t=e.id||`chart-${++this.chartCounter}`;if(this.charts.has(t))return;const{ePopup:n}=this.popupService.createPopup(640,"ag-chart-window");n.innerHTML="";const i=document.createElement("div");i.className="ag-chart-window-header";const o=document.createElement("span");o.className="ag-chart-window-title",o.textContent=e.title||this.grid.t("chart"),i.appendChild(o);const a=document.createElement("button");a.className="ag-button ag-button-small",a.textContent="×",a.addEventListener("click",()=>this.destroyChart(t)),i.appendChild(a),n.appendChild(i);const r=document.createElement("div");r.className="ag-chart-window-body";const l=document.createElement("canvas");l.className="ag-chart-canvas",l.width=600,l.height=360,r.appendChild(l);const d=document.createElement("div");d.className="ag-chart-legend",r.appendChild(d),n.appendChild(r);const c={id:t,ePopup:n,canvas:l,type:e.type||"line",data:e.data||{categories:[],series:[]},title:e.title||"Chart"};this.charts.set(t,c),this.popupService.positionAt(n,this.grid.getRootElement()),n.style.top="60px",this.renderChart(c)}renderChart(e){var D;const t=e.canvas,n=t.getContext("2d");if(!n)return;const i=window.devicePixelRatio||1,o=t.width,a=t.height;t.width=o*i,t.height=a*i,t.style.width=`${o}px`,t.style.height=`${a}px`,n.scale(i,i),n.clearRect(0,0,o,a);const r=getComputedStyle(this.grid.getRootElement()),l=r.getPropertyValue("--ag-chart-text-color")||"#666",d=r.getPropertyValue("--ag-border-color")||"rgba(128,128,128,0.25)",c={top:20,right:20,bottom:34,left:56},p=o-c.left-c.right,h=a-c.top-c.bottom;n.font="11px sans-serif",n.fillStyle=l,n.strokeStyle=d,n.lineWidth=1;const u=(D=e.canvas.parentElement)==null?void 0:D.querySelector(".ag-chart-legend");if(u&&(u.innerHTML="",e.data.series.forEach((S,R)=>{const M=document.createElement("span");M.className="ag-chart-legend-item";const F=document.createElement("span");F.className="ag-chart-legend-swatch",F.style.backgroundColor=ht[R%ht.length],M.appendChild(F),M.appendChild(document.createTextNode(S.title)),u.appendChild(M)})),e.type==="pie"){this.renderPie(n,e.data,o,a,l);return}const f=e.data.series.flatMap(S=>S.data);let g=Math.max(0,...f),v=Math.min(0,...f);e.type==="scatter"&&(v=Math.min(...f),g=Math.max(...f));const m=g-v||1;g+=m*.08,v-=v<0?m*.08:0;const b=g-v||1,k=S=>c.top+h-(S-v)/b*h,C=5;n.textAlign="right",n.textBaseline="middle";for(let S=0;S<=C;S++){const R=v+b*S/C,M=k(R);n.beginPath(),n.moveTo(c.left,M),n.lineTo(o-c.right,M),n.stroke(),n.fillText(this.formatTick(R),c.left-6,M)}const w=e.data.categories,L=e.type==="bar",N=Math.max(1,w.length),y=(L?h:p)/N;if(L){n.textAlign="left",w.forEach((R,M)=>{const F=c.top+M*y,q=Math.max(2,y*.7/e.data.series.length);e.data.series.forEach((T,B)=>{const A=T.data[M]||0,I=Math.abs(A)/b*p,$=c.left+(0-v)/b*p;n.fillStyle=ht[B%ht.length],n.fillRect($,F+B*q,Math.max(1,I),q-1)}),n.fillStyle=l,n.fillText(this.truncate(R,18),c.left+4,F+y/2)});const S=c.left+(0-v)/b*p;n.beginPath(),n.moveTo(S,c.top),n.lineTo(S,c.top+h),n.strokeStyle=l,n.stroke()}else{const S=Math.max(1,Math.ceil(N/12));n.textAlign="center",n.textBaseline="top",w.forEach((F,q)=>{if(q%S!==0)return;const T=c.left+y*(q+.5);n.fillStyle=l,n.fillText(this.truncate(F,10),T,c.top+h+6)});const R=e.data.series.length,M=Math.max(1,y*.7/Math.max(1,R));e.data.series.forEach((F,q)=>{const T=ht[q%ht.length];if(e.type==="column")n.fillStyle=T,F.data.forEach((B,A)=>{const I=c.left+y*A+(y-M*R)/2+q*M,$=k(B);n.fillRect(I,$,M-1,c.top+h-$)});else if(e.type==="area"){n.beginPath(),F.data.forEach((A,I)=>{const $=c.left+y*(I+.5),z=k(A);I===0?n.moveTo($,z):n.lineTo($,z)});const B=c.left+y*(F.data.length-.5);n.lineTo(B,c.top+h),n.lineTo(c.left+y*.5,c.top+h),n.closePath(),n.globalAlpha=.25,n.fillStyle=T,n.fill(),n.globalAlpha=1,n.beginPath(),F.data.forEach((A,I)=>{const $=c.left+y*(I+.5),z=k(A);I===0?n.moveTo($,z):n.lineTo($,z)}),n.strokeStyle=T,n.lineWidth=2,n.stroke()}else e.type==="scatter"?(n.fillStyle=T,F.data.forEach((B,A)=>{const I=c.left+y*(A+.5),$=k(B);n.beginPath(),n.arc(I,$,3,0,Math.PI*2),n.fill()})):(n.beginPath(),F.data.forEach((B,A)=>{const I=c.left+y*(A+.5),$=k(B);A===0?n.moveTo(I,$):n.lineTo(I,$)}),n.strokeStyle=T,n.lineWidth=2,n.stroke())})}}renderPie(e,t,n,i,o){const a=t.series[0];if(!a)return;const r=a.data.reduce((h,u)=>h+Math.abs(u),0)||1,l=n/2,d=i/2,c=Math.min(n,i)/2-30;let p=-Math.PI/2;a.data.forEach((h,u)=>{const f=Math.abs(h)/r*Math.PI*2;e.beginPath(),e.moveTo(l,d),e.arc(l,d,c,p,p+f),e.closePath(),e.fillStyle=ht[u%ht.length],e.fill();const g=p+f/2,v=l+Math.cos(g)*(c*.7),m=d+Math.sin(g)*(c*.7),b=Math.round(Math.abs(h)/r*100);b>=5&&(e.fillStyle="#fff",e.font="bold 11px sans-serif",e.textAlign="center",e.textBaseline="middle",e.fillText(`${b}%`,v,m)),p+=f}),e.fillStyle=o}formatTick(e){if(this.timeSeries){const n=new Date(e);if(!isNaN(n.getTime()))return n.toLocaleDateString("en-GB",{day:"numeric",month:"short"})}const t=Math.abs(e);return t>=1e9?`${(e/1e9).toFixed(1)}B`:t>=1e6?`${(e/1e6).toFixed(1)}M`:t>=1e3?`${(e/1e3).toFixed(1)}k`:Number.isInteger(e)?String(e):e.toFixed(1)}truncate(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e}}function fi(s,e,t){const n=s.children;if(!n||n.length===0){const i=ke(e,s,null);typeof i=="number"&&!isNaN(i)&&t.push(i);return}for(const i of n)fi(i,e,t)}class Co{constructor(e){x(this,"eGui");var d,c,p;const t=e.node,n=!!t.group,i=!!t.detailNode,o=n||i,a=t.expanded,r=t.uiLevel*24,l=document.createElement("span");if(l.className="ag-group-cell-renderer",l.style.paddingLeft=`${r}px`,o){const h=document.createElement("span");h.className="ag-group-value-expanded-icon",h.classList.add(a?"ag-expanded":"ag-contracted"),h.innerHTML=a?Bo:Oo,l.appendChild(h);const u=document.createElement("span");u.className="ag-group-value";const f=(d=e.colDef.cellRendererParams)==null?void 0:d.innerRenderer;if(typeof f=="function"){const g=f({...e,value:e.value,valueFormatted:e.valueFormatted});g instanceof HTMLElement?u.appendChild(g):typeof g=="string"&&(u.innerHTML=g)}else u.textContent=To(e.value);if(l.appendChild(u),n&&t.allChildrenCount!==null&&!((c=e.colDef.cellRendererParams)!=null&&c.suppressCount)){const g=document.createElement("span");g.className="ag-group-child-count",g.textContent=` (${t.allChildrenCount})`,l.appendChild(g)}}else{const h=document.createElement("span");h.className="ag-group-value";const u=(p=e.colDef.cellRendererParams)==null?void 0:p.innerRenderer;if(typeof u=="function"){const f=u({...e,value:e.value,valueFormatted:e.valueFormatted});f instanceof HTMLElement?h.appendChild(f):typeof f=="string"&&(h.innerHTML=f)}else h.textContent=e.valueFormatted??String(e.value??"");l.appendChild(h)}this.eGui=l}getGui(){return this.eGui}refresh(e){return!1}}class So{constructor(e){x(this,"eGui");x(this,"eCheckbox");this.eGui=document.createElement("span"),this.eGui.className="ag-cell-checkbox";const t=document.createElement("input");t.type="checkbox",t.className="ag-native-checkbox",t.checked=!!e.node.selected,t.addEventListener("click",n=>n.stopPropagation()),t.addEventListener("change",()=>{e.node.setSelected(t.checked,!1,"uiSelectChanged")}),this.eCheckbox=t,this.eGui.appendChild(t)}getGui(){return this.eGui}refresh(e){return this.eCheckbox.checked=!!e.node.selected,!0}}const Eo='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M8 3l5 7H3l5-7z"/></svg>',xo='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M8 13L3 6h10L8 13z"/></svg>';class ko{constructor(e){x(this,"eGui");x(this,"eArrow");x(this,"eOld");x(this,"eNew");x(this,"lastValue");x(this,"flashTimer",null);this.eGui=document.createElement("span"),this.eGui.className="ag-animate-show-change-cell-renderer",this.eArrow=document.createElement("span"),this.eArrow.className="ag-value-change-arrow",this.eArrow.style.display="none",this.eOld=document.createElement("span"),this.eOld.className="ag-value-change-old",this.eOld.style.display="none",this.eNew=document.createElement("span"),this.eNew.className="ag-value-change-new",this.eGui.appendChild(this.eArrow),this.eGui.appendChild(this.eOld),this.eGui.appendChild(this.eNew),this.eNew.textContent=this.formatValue(e),this.lastValue=e.value}formatValue(e){const t=e.valueFormatted??e.value;return t==null?"":String(t)}getGui(){return this.eGui}refresh(e){const t=e.value;if(t!==this.lastValue){const n=typeof t=="number"&&typeof this.lastValue=="number"?t>this.lastValue:String(t)>String(this.lastValue),i=this.eNew.textContent??"";this.eArrow.innerHTML=n?Eo:xo,this.eArrow.style.display="",this.eArrow.classList.add(n?"ag-value-change-delta-up":"ag-value-change-delta-down"),this.eOld.textContent=i,this.eOld.style.display="",this.eNew.textContent=this.formatValue(e),this.lastValue=t,this.eGui.classList.remove("ag-value-change-value-highlight"),this.eGui.offsetWidth,this.eGui.classList.add("ag-value-change-value-highlight",n?"ag-value-change-delta-up":"ag-value-change-delta-down"),this.flashTimer&&clearTimeout(this.flashTimer),this.flashTimer=setTimeout(()=>{this.eGui.classList.remove("ag-value-change-value-highlight","ag-value-change-delta-up","ag-value-change-delta-down"),this.eArrow.style.display="none",this.eOld.style.display="none"},1e3)}return!0}destroy(){this.flashTimer&&clearTimeout(this.flashTimer)}}class Mo{constructor(e){x(this,"eGui");this.eGui=document.createElement("span"),this.eGui.className="ag-row-number-cell",this.eGui.textContent=String(e.rowIndex+1)}getGui(){return this.eGui}refresh(e){return this.eGui.textContent=String(e.rowIndex+1),!0}}class Lo{constructor(e){x(this,"eGui");var l,d;const t=document.createElement("span");t.className="ag-sparkline-cell";const n=e.value||[],i=e.sparklineOptions||((d=(l=e.column)==null?void 0:l.cellRendererParams)==null?void 0:d.sparklineOptions)||{},o=e.column.width||100,a=i.height||24,r=vn(n,Math.max(20,o-16),a,i);t.appendChild(r),this.eGui=t}getGui(){return this.eGui}refresh(e){var r,l;const t=e.value||[],n=e.sparklineOptions||((l=(r=e.column)==null?void 0:r.cellRendererParams)==null?void 0:l.sparklineOptions)||{},i=e.column.width||100,o=n.height||24;this.eGui.innerHTML="";const a=vn(t,Math.max(20,i-16),o,{type:n.type,direction:n.direction});return this.eGui.appendChild(a),!0}}function vn(s,e,t,n={}){var m,b,k;const i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttribute("width",String(Math.max(20,e))),i.setAttribute("height",String(t)),i.setAttribute("class","ag-sparkline");const o=(s||[]).map(C=>typeof C=="number"?C:Number((C==null?void 0:C.value)??0));if(!o||o.length<1)return i;const a=n.type||"line",r=Math.min(...o,0),d=Math.max(...o,0)-r||1,c=((m=n.tooltip)==null?void 0:m.enabled)===!0,p=((b=n.axis)==null?void 0:b.type)||"number",h=((k=n.pointsOfInterest)==null?void 0:k.show)===!0,u=(C,w)=>p==="category"?`${C+1}: ${w}`:String(w);if(h&&o.length>1){const C=o.indexOf(Math.min(...o)),w=o.indexOf(Math.max(...o)),L=e/Math.max(1,o.length-1),N=D=>t-2-(D-r)/d*(t-4),y=(D,S)=>{const R=document.createElementNS("http://www.w3.org/2000/svg","circle");R.setAttribute("cx",String(D*L)),R.setAttribute("cy",String(N(o[D]))),R.setAttribute("r","2.5"),R.setAttribute("fill",S),i.appendChild(R)};y(0,"#4caf50"),y(o.length-1,"#f44336"),y(C,"#2196f3"),y(w,"#ff9800")}if(c){const C=document.createElementNS("http://www.w3.org/2000/svg","title");C.textContent=o.map((w,L)=>u(L,w)).join(`
|
|
3
|
+
`),i.appendChild(C),i.style.cursor="default"}if(a==="bar"){const C=n.direction==="vertical",w=o.length;if(C){const L=Math.max(1,e/w-1),N=t-2-(0-r)/d*(t-4);o.forEach((y,D)=>{const S=D*(e/w),R=t-2-(y-r)/d*(t-4),M=document.createElementNS("http://www.w3.org/2000/svg","rect");M.setAttribute("x",String(S)),M.setAttribute("width",String(L)),M.setAttribute("y",String(Math.min(R,N))),M.setAttribute("height",String(Math.max(1,Math.abs(N-R)))),M.setAttribute("fill","currentColor"),i.appendChild(M)})}else{const L=Math.max(1,t/w-1),N=2+(0-r)/d*(e-4);o.forEach((y,D)=>{const S=D*(t/w),R=2+(y-r)/d*(e-4),M=document.createElementNS("http://www.w3.org/2000/svg","rect");M.setAttribute("y",String(S)),M.setAttribute("height",String(L)),M.setAttribute("x",String(Math.min(R,N))),M.setAttribute("width",String(Math.max(1,Math.abs(N-R)))),M.setAttribute("fill","currentColor"),i.appendChild(M)})}return i}const f=e/Math.max(1,o.length-1),g=o.map((C,w)=>{const L=w*f,N=t-2-(C-r)/d*(t-4);return`${L.toFixed(1)},${N.toFixed(1)}`});if(a==="area"){const C=document.createElementNS("http://www.w3.org/2000/svg","polygon");C.setAttribute("points",`0,${t} ${g.join(" ")} ${e},${t}`),C.setAttribute("fill","currentColor"),C.setAttribute("opacity","0.2"),i.appendChild(C)}const v=document.createElementNS("http://www.w3.org/2000/svg","polyline");return v.setAttribute("points",g.join(" ")),v.setAttribute("fill","none"),v.setAttribute("stroke","currentColor"),v.setAttribute("stroke-width","1.5"),i.appendChild(v),i}class Ro{constructor(e){x(this,"eGui");this.eGui=document.createElement("span"),this.eGui.className="ag-row-drag",this.eGui.innerHTML=gi,e.registerRowDragger&&e.registerRowDragger(t=>{this.eGui.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,clientX:t.clientX,clientY:t.clientY}))})}getGui(){return this.eGui}}const Zt={agGroupCellRenderer:s=>new Co(s),agCheckboxCellRenderer:s=>new So(s),agSparklineCellRenderer:s=>new Lo(s),agAnimateShowChangeCellRenderer:s=>new ko(s),agRowNumberCellRenderer:s=>new Mo(s),agRowDragComp:s=>new Ro(s)};function To(s){return s==null?"":String(s)}class No{constructor(e){x(this,"eGui");x(this,"cancelled",!1);this.eGui=document.createElement("input"),this.eGui.type="text",this.eGui.className="ag-cell-editor-input",this.eGui.value=e.value??"",this.eGui.addEventListener("keydown",t=>{var n;return(n=e.onKeyDown)==null?void 0:n.call(e,t)})}getGui(){return this.eGui}getValue(){return this.cancelled?void 0:this.eGui.value}focusIn(){this.eGui.focus(),this.eGui.select()}}class Io{constructor(e){x(this,"eGui");x(this,"eInput");x(this,"cancelled",!1);var i,o;const t=document.createElement("div");t.className="ag-cell-editor-number";const n=document.createElement("input");if(n.type="text",n.className="ag-cell-editor-input",n.value=e.value??"",(o=(i=e.column)==null?void 0:i.cellEditorParams)!=null&&o.showStepperButtons){const a=document.createElement("span");a.className="ag-cell-editor-stepper ag-cell-editor-stepper-up",a.innerHTML="▲",a.addEventListener("mousedown",l=>{var d,c;l.preventDefault(),l.preventDefault(),n.value=String(Number(n.value||0)+(((c=(d=e.column)==null?void 0:d.cellEditorParams)==null?void 0:c.step)??1))});const r=document.createElement("span");r.className="ag-cell-editor-stepper ag-cell-editor-stepper-down",r.innerHTML="▼",r.addEventListener("mousedown",l=>{var d,c;l.preventDefault(),n.value=String(Number(n.value||0)-(((c=(d=e.column)==null?void 0:d.cellEditorParams)==null?void 0:c.step)??1))}),t.appendChild(a),t.appendChild(n),t.appendChild(r)}else t.appendChild(n);this.eGui=t,this.eInput=n,this.eInput.addEventListener("keydown",a=>{var r;return(r=e.onKeyDown)==null?void 0:r.call(e,a)})}getGui(){return this.eGui}getValue(){if(this.cancelled)return;const e=Number(this.eInput.value);return isNaN(e)?null:e}focusIn(){this.eInput.focus(),this.eInput.select()}}class Ao{constructor(e){x(this,"eGui");x(this,"cancelled",!1);var n,i;this.eGui=document.createElement("select"),this.eGui.className="ag-cell-editor-select";const t=e.values||((i=(n=e.column)==null?void 0:n.cellEditorParams)==null?void 0:i.values)||[];for(const o of t){const a=document.createElement("option");a.value=String(o),a.textContent=String(o),this.eGui.appendChild(a)}this.eGui.value=String(e.value??""),this.eGui.addEventListener("keydown",o=>{var a;return(a=e.onKeyDown)==null?void 0:a.call(e,o)})}getGui(){return this.eGui}getValue(){return this.cancelled?void 0:this.eGui.value}focusIn(){this.eGui.focus()}}class $o{constructor(e){x(this,"eGui");x(this,"cancelled",!1);this.eGui=document.createElement("input"),this.eGui.type="date",this.eGui.className="ag-cell-editor-input";const t=e.value instanceof Date?e.value:e.value?new Date(e.value):null;t&&!isNaN(t.getTime())&&(this.eGui.value=t.toISOString().slice(0,10))}getGui(){return this.eGui}getValue(){if(!this.cancelled)return this.eGui.value?new Date(this.eGui.value):null}focusIn(){this.eGui.focus()}}class Do{constructor(e){x(this,"eGui");x(this,"cancelled",!1);this.eGui=document.createElement("textarea"),this.eGui.className="ag-cell-editor-textarea",this.eGui.value=e.value??""}getGui(){return this.eGui}getValue(){return this.cancelled?void 0:this.eGui.value}focusIn(){this.eGui.focus(),this.eGui.select()}}function Fo(s,e){if(!e)return H(s);const t=s.toLowerCase().indexOf(e.toLowerCase());return t<0?H(s):H(s.slice(0,t))+'<span class="ag-rich-select-highlight">'+H(s.slice(t,t+e.length))+"</span>"+H(s.slice(t+e.length))}class Po{constructor(e){x(this,"eGui");x(this,"eInput");x(this,"ePopup",null);x(this,"eList",null);x(this,"values",[]);x(this,"filtered",[]);x(this,"activeIndex",0);x(this,"selectedValue");x(this,"cancelled",!1);var t,n;this.params=e,this.values=e.values||((n=(t=e.column)==null?void 0:t.cellEditorParams)==null?void 0:n.values)||[],this.selectedValue=e.value,this.eGui=document.createElement("div"),this.eGui.className="ag-rich-select",this.eInput=document.createElement("input"),this.eInput.type="text",this.eInput.className="ag-rich-select-input",this.eInput.value=e.value===null||e.value===void 0?"":String(e.value),this.eInput.readOnly=e.allowTyping!==!0,this.eGui.appendChild(this.eInput),this.eGui.addEventListener("mousedown",i=>{i.stopPropagation()}),this.eInput.addEventListener("input",()=>{e.allowTyping===!0&&(this.selectedValue=this.eInput.value,this.renderList())}),this.eInput.addEventListener("keydown",i=>this.onKeyDown(i))}getGui(){return this.eGui}focusIn(){this.eInput.focus(),this.eInput.select(),this.openPopup()}afterGuiAttached(){this.openPopup()}openPopup(){var a,r;if(this.ePopup)return;const e=document.createElement("div");e.className="ag-rich-select-popup";const t=this.eGui.getBoundingClientRect();if(e.style.position="fixed",e.style.left=`${t.left}px`,e.style.top=`${t.bottom}px`,e.style.minWidth=`${Math.max(t.width,180)}px`,e.style.zIndex="1000",(this.eGui.closest(".ag-root")||document.body).appendChild(e),this.ePopup=e,Ho(this.params)){const l=document.createElement("input");l.type="text",l.className="ag-rich-select-search",l.placeholder=((r=(a=this.params).t)==null?void 0:r.call(a,"search"))??"搜索…",l.value="",l.addEventListener("input",()=>this.renderList(l.value)),e.appendChild(l),setTimeout(()=>l.focus(),0)}const i=document.createElement("div");i.className="ag-rich-select-list",e.appendChild(i),this.eList=i,this.renderList();const o=l=>{!e.contains(l.target)&&!this.eGui.contains(l.target)&&(this.closePopup(),document.removeEventListener("mousedown",o,!0))};document.addEventListener("mousedown",o,!0)}renderList(e=""){var n,i;if(!this.eList)return;if(this.eList.innerHTML="",this.filtered=this.values.filter(o=>{if(!e)return!0;const a=String(o).toLowerCase(),r=e.toLowerCase().split(/\s+/).filter(Boolean);return this.params.searchType==="matchAll"?r.every(l=>a.includes(l)):r.some(l=>a.includes(l))}),this.filtered.forEach((o,a)=>{const r=document.createElement("div");r.className="ag-rich-select-item",a===this.activeIndex&&r.classList.add("ag-active"),String(o)===String(this.selectedValue)&&r.classList.add("ag-selected");const l=this.params.cellRenderer;if(typeof l=="function"){const d=l({value:o,valueFormatted:String(o)});d instanceof HTMLElement?r.appendChild(d):r.textContent=String(d)}else r.innerHTML=Fo(String(o),e);r.addEventListener("click",d=>{d.stopPropagation(),this.commit(o)}),r.addEventListener("mousedown",d=>d.preventDefault()),this.eList.appendChild(r)}),this.filtered.length===0){const o=document.createElement("div");o.className="ag-rich-select-empty",o.textContent=((i=(n=this.params).t)==null?void 0:i.call(n,"noMatches"))??"无匹配项",this.eList.appendChild(o)}const t=this.eList.children[this.activeIndex];t&&typeof t.scrollIntoView=="function"&&t.scrollIntoView({block:"nearest"})}onKeyDown(e){if(e.key==="ArrowDown")e.preventDefault(),this.activeIndex=Math.min(this.filtered.length-1,this.activeIndex+1),this.renderList();else if(e.key==="ArrowUp")e.preventDefault(),this.activeIndex=Math.max(0,this.activeIndex-1),this.renderList();else if(e.key==="Enter"){e.preventDefault();const t=this.filtered[this.activeIndex];t!==void 0?this.commit(t):this.closePopup()}else if(e.key==="Escape")e.preventDefault(),this.cancelled=!0,this.closePopup();else if(e.key==="Tab"){e.preventDefault();const t=this.filtered[this.activeIndex];t!==void 0?this.commit(t):this.closePopup()}}commit(e){this.selectedValue=e,this.eInput.value=String(e),this.closePopup(),setTimeout(()=>{var t,n;return(n=(t=this.params).onKeyDown)==null?void 0:n.call(t,{key:"Enter",preventDefault:()=>{},keyCode:13})},0)}closePopup(){var e;(e=this.ePopup)==null||e.remove(),this.ePopup=null,this.eList=null}getValue(){return this.cancelled?void 0:this.selectedValue}isCancelAfterEnd(){return this.cancelled}destroy(){this.closePopup()}}function Ho(s){var e,t;return(s==null?void 0:s.allowTyping)===!0||((t=(e=s==null?void 0:s.column)==null?void 0:e.cellEditorParams)==null?void 0:t.allowTyping)===!0}const pt={agTextCellEditor:s=>new No(s),agNumberCellEditor:s=>new Io(s),agSelectCellEditor:s=>new Ao(s),agDateCellEditor:s=>new $o(s),agLargeTextCellEditor:s=>new Do(s),agRichSelectCellEditor:s=>new Po(s)},Oo='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M6 4l4 4-4 4V4z"/></svg>',Bo='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M4 6l4 4 4-4H4z"/></svg>',gi='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><circle cx="5" cy="3" r="1.4"/><circle cx="11" cy="3" r="1.4"/><circle cx="5" cy="8" r="1.4"/><circle cx="11" cy="8" r="1.4"/><circle cx="5" cy="13" r="1.4"/><circle cx="11" cy="13" r="1.4"/></svg>',Vo='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><circle cx="3" cy="8" r="1.4"/><circle cx="8" cy="8" r="1.4"/><circle cx="13" cy="8" r="1.4"/></svg>',Go='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M1 2h14l-5.2 6v5.3L6.2 15V8L1 2z"/></svg>',qo='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M8 3l4.5 7h-9L8 3z"/></svg>',zo='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M8 13L3.5 6h9L8 13z"/></svg>',mi='<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><path d="M6 11.2L2.8 8l-1 1L6 13.2 14.6 4.6l-1-1L6 11.2z"/></svg>';class _o{constructor(e,t){this.grid=e,this.popupService=t}openColumnMenu(e,t){const{ePopup:n,close:i}=this.popupService.createPopup(220,"ag-column-menu");n.innerHTML="";const o=document.createElement("div");o.className="ag-popup-title",o.textContent=e.headerName||e.field||e.colId,n.appendChild(o);const a=(l,d)=>{const c=document.createElement("div");c.className="ag-menu-item",d.disabled&&c.classList.add("ag-menu-item-disabled"),d.checked&&c.classList.add("ag-menu-item-active");const p=document.createElement("span");p.className="ag-menu-item-check",d.checked&&(p.innerHTML=mi),c.appendChild(p);const h=document.createElement("span");if(h.className="ag-menu-item-label",h.textContent=l,c.appendChild(h),d.shortcut){const u=document.createElement("span");u.className="ag-menu-item-shortcut",u.textContent=d.shortcut,c.appendChild(u)}return!d.disabled&&d.onClick&&c.addEventListener("click",()=>{d.onClick(),i()}),n.appendChild(c),c},r=l=>{const d=document.createElement("div");d.className="ag-menu-section",d.textContent=l,n.appendChild(d)};e.sortable&&(r(this.grid.t("sort")),a(this.grid.t("sortAscending"),{checked:e.sort==="asc",onClick:()=>{this.grid.getColumnApi().applyColumnState([{colId:e.colId,sort:"asc",sortIndex:0}]),this.grid.getSortService().onSortChanged("uiColumnSorted")}}),a(this.grid.t("sortDescending"),{checked:e.sort==="desc",onClick:()=>{this.grid.getColumnApi().applyColumnState([{colId:e.colId,sort:"desc",sortIndex:0}]),this.grid.getSortService().onSortChanged("uiColumnSorted")}})),e.resizable&&(r(this.grid.t("columnSize")),a(this.grid.t("autosizeThisColumn"),{onClick:()=>this.grid.getColumnApi().autoSizeColumn(e)}),a(this.grid.t("autosizeAllColumns"),{onClick:()=>this.grid.getColumnApi().autoSizeAllColumns()})),e.lockPosition||(r(this.grid.t("pinColumn")),a(this.grid.t("pinLeft"),{checked:e.pinned==="left",onClick:()=>this.grid.getColumnApi().setColumnPinned(e,"left")}),a(this.grid.t("noPin"),{checked:e.pinned===null,onClick:()=>this.grid.getColumnApi().setColumnPinned(e,null)}),a(this.grid.t("pinRight"),{checked:e.pinned==="right",onClick:()=>this.grid.getColumnApi().setColumnPinned(e,"right")})),e.filter?(r(this.grid.t("filter")),a(this.grid.t("openFilter"),{onClick:()=>this.grid.getFilterGui().openFilter(e,t)}),e.filter!=="multi"&&a(this.grid.t("openMultiFilter"),{onClick:()=>this.grid.getFilterGui().openMultiFilter(e,t)}),this.grid.getOptions().enableAdvancedFilter&&a(this.grid.t("openAdvancedFilter"),{onClick:()=>this.grid.getFilterGui().openAdvancedFilter(t)}),a(this.grid.t("clearFilter"),{disabled:!this.grid.getFilterService().isFilterActive(e),onClick:()=>this.grid.getFilterService().setColumnFilterModel(e,null)})):this.grid.getOptions().enableAdvancedFilter&&(r(this.grid.t("filter")),a(this.grid.t("openAdvancedFilter"),{onClick:()=>this.grid.getFilterGui().openAdvancedFilter(t)})),r(this.grid.t("formula")),a(this.grid.getFormulaEditorService().isFormulaColumn(e)?this.grid.t("editFormula"):this.grid.t("addFormula"),{onClick:()=>this.grid.getFormulaEditorService().openFormulaEditor(e,t)}),r(this.grid.t("visibility")),a(this.grid.t("hideColumn"),{onClick:()=>this.grid.getColumnApi().setColumnVisible(e,!1)}),a(this.grid.t("chooseColumns"),{onClick:()=>{this.grid.getApi().openToolPanel("columns")}}),this.popupService.positionAt(n,t)}}const vi={copy:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M4 2h7v2h2v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-2H3V4a2 2 0 0 1 1-2zm1 2v8h1V4H5z"/></svg>',copyWithHeaders:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M2 1h12v2H2V1zm2 3h8v9H4V4z"/></svg>',paste:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M5 2h6v2H5V2zM3 4h10v10H3V4z"/></svg>',csv:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M3 1h7l3 3v11H3V1zm6 1v3h3v9H4V2h5z"/></svg>',excel:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M3 1h7l3 3v11H3V1zm6 1v3h3v9H4V2h5z"/></svg>',reset:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M8 2a6 6 0 1 0 5.7 4H11l3 3 3-3h-2.3A7 7 0 1 1 8 1v1z"/></svg>',pin:'<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><path d="M9 1l6 6-2 1-1 4-3-3-4 4v-3l3-3-1-3 4-1z"/></svg>'};class Wo{constructor(e,t){this.grid=e,this.popupService=t}getDefaultItems(e){return[{name:"copy",label:this.grid.t("copy"),icon:"copy",shortcut:"Ctrl+C",action:()=>this.grid.getApi().copyToClipboard()},{name:"copyWithHeaders",label:this.grid.t("copyWithHeaders"),icon:"copyWithHeaders",action:()=>this.grid.getApi().copyToClipboard({includeHeaders:!0})},{name:"paste",label:this.grid.t("paste"),icon:"paste",shortcut:"Ctrl+V",action:()=>this.grid.getApi().pasteFromClipboard()},{name:"sep1",separator:!0},{name:"export",label:this.grid.t("export"),icon:"excel",subMenu:[{name:"csvExport",label:this.grid.t("csvExport"),icon:"csv",action:()=>this.grid.getApi().exportToCsv({fileName:"export.csv"})},{name:"excelExport",label:this.grid.t("excelExport"),icon:"excel",action:()=>this.grid.getApi().exportToExcel({fileName:"export.xlsx"})},{name:"excelExportSelected",label:"Excel Export (Selected)",icon:"excel",disabled:!this.hasSelection(),action:()=>this.grid.getApi().exportToExcel({fileName:"export.xlsx",onlySelected:!0})}]},{name:"sep2",separator:!0},{name:"resetColumns",label:this.grid.t("resetColumns"),icon:"reset",action:()=>this.grid.getColumnApi().resetColumnState()},{name:"autoSizeAll",label:"Auto-size All Columns",action:()=>this.grid.getColumnApi().autoSizeAllColumns()},{name:"sizeToFit",label:this.grid.t("sizeToFit"),action:()=>this.grid.getApi().sizeColumnsToFit()},{name:"sep3",separator:!0},{name:"expandAll",label:this.grid.t("expandAll"),disabled:!this.isGroupActive(),action:()=>this.grid.getApi().expandAll()},{name:"collapseAll",label:this.grid.t("collapseAll"),disabled:!this.isGroupActive(),action:()=>this.grid.getApi().collapseAll()},{name:"pinRow",label:this.grid.t("pinRow"),icon:"pin",disabled:!e.node||e.node.group===!0,subMenu:[{name:"pinTop",label:this.grid.t("pinToTop"),action:()=>this.grid.setRowNodePinned(e.node,"top")},{name:"pinBottom",label:this.grid.t("pinToBottom"),action:()=>this.grid.setRowNodePinned(e.node,"bottom")},{name:"unpin",label:this.grid.t("unpin"),action:()=>this.grid.setRowNodePinned(e.node,null)}]}]}hasSelection(){return this.grid.getApi().getSelectedNodes().length>0}isGroupActive(){return this.grid.getColumnModel().isRowGroupActive()}openContextMenu(e,t){if(this.grid.getOptions().suppressContextMenu)return;const n=this.grid.getOptions().contextMenuItems;let i;typeof n=="function"?i=n({column:t.column,node:t.node,api:this.grid.getApi()}):Array.isArray(n)?i=n:i=this.getDefaultItems(t);const{ePopup:o,close:a}=this.popupService.createPopup(220,"ag-context-menu");o.innerHTML="",this.buildMenu(o,i,a),this.popupService.positionAt(o,e)}buildMenu(e,t,n){for(const i of t){if(typeof i=="string")continue;if(i.separator){const l=document.createElement("div");l.className="ag-menu-separator",e.appendChild(l);continue}const o=document.createElement("div");o.className="ag-menu-item",i.disabled&&o.classList.add("ag-menu-item-disabled"),i.cssClasses&&o.classList.add(...i.cssClasses);const a=document.createElement("span");a.className="ag-menu-item-icon",i.icon&&vi[i.icon]&&(a.innerHTML=vi[i.icon]),o.appendChild(a);const r=document.createElement("span");if(r.className="ag-menu-item-label",r.textContent=i.label??i.name,o.appendChild(r),i.shortcut){const l=document.createElement("span");l.className="ag-menu-item-shortcut",l.textContent=i.shortcut,o.appendChild(l)}if(i.subMenu){const l=document.createElement("span");l.className="ag-menu-item-arrow",l.textContent="›",o.appendChild(l),o.addEventListener("mouseenter",()=>{e.querySelectorAll(".ag-menu-popup-sub").forEach(p=>p.remove());const c=document.createElement("div");c.className="ag-menu-popup-sub",this.buildMenu(c,i.subMenu,n),e.appendChild(c)}),o.addEventListener("mouseleave",()=>{setTimeout(()=>{var c;o.matches(":hover")||((c=o.parentElement)==null?void 0:c.querySelector(":hover"))||e.querySelectorAll(".ag-menu-popup-sub").forEach(p=>p.remove())},200)})}else!i.disabled&&i.action&&o.addEventListener("click",()=>{i.action(),n()});e.appendChild(o)}}}class Uo{constructor(e,t){x(this,"editing",null);x(this,"fullRowEditors",null);x(this,"fullRowNode",null);x(this,"focusedCell",null);this.grid=e,this.eventService=t}getFocusedCell(){return this.focusedCell}setFocusedCell(e,t){this.focusedCell={rowIndex:e,column:t,rowNode:this.grid.getDisplayedRowAtIndex(e)},this.clearFocusClass();const n=this.findCellElement(t,e);n==null||n.classList.add("ag-cell-focus"),n&&typeof n.scrollIntoView=="function"&&n.scrollIntoView({block:"nearest",inline:"nearest"}),this.eventService.dispatchEvent("cellFocused",{rowIndex:e,column:t,api:this.grid.getApi(),forceBrowserFocus:!0})}clearFocusedCell(){this.focusedCell=null,this.clearFocusClass(),this.grid.getRowRenderer().refreshCells({force:!0})}clearFocusClass(){const e=this.grid.getRootElement();for(const t of e.querySelectorAll(".ag-cell-focus"))t.classList.remove("ag-cell-focus")}findCellElement(e,t){const n=this.grid.getDisplayedRowAtIndex(t);if(!n)return null;const o=this.grid.getRowRenderer().getRowComps().get(n.id);return o&&o.getCellElements().find(a=>a.dataset.colid===e.colId)||null}isEditing(){return this.editing!==null||this.fullRowEditors!==null}getEditingCells(){return this.editing?[{rowIndex:this.editing.rowIndex,colId:this.editing.column.colId}]:[]}startEditingCell(e){var d;const t=typeof e.colKey=="string"?this.grid.getColumn(e.colKey):e.colKey;if(!t)return;const n=this.grid.getDisplayedRowAtIndex(e.rowIndex);if(!n||!this.grid.isCellEditable(t,n))return;if(this.stopEditing(!1),this.grid.getOptions().editType==="fullRow"){this.startFullRowEditing(e.rowIndex,n,e.charPress);return}const i=this.findCellElement(t,e.rowIndex);if(!i)return;const o=ke(t,n,this.grid.getApi()),a={value:e.charPress!==void 0?e.charPress:o,oldValue:o,data:n.data,node:n,column:t,colDef:t.colDef,rowIndex:e.rowIndex,api:this.grid.getApi(),t:c=>this.grid.t(c),onKeyDown:c=>this.onEditorKeyDown(c),values:(d=t.cellEditorParams)==null?void 0:d.values,...t.cellEditorParams};let r;if(typeof t.cellEditor=="string")r=(pt[t.cellEditor]||pt.agTextCellEditor)(a);else if(typeof t.cellEditor=="function"){const c=t.cellEditor(a);r=c&&typeof c.getGui=="function"?c:{getGui:()=>c,getValue:()=>c==null?void 0:c.value}}else{const c=t.type==="numberColumn"?"agNumberCellEditor":t.type==="dateColumn"?"agDateCellEditor":"agTextCellEditor";r=pt[c](a)}if(!r)return;this.editing={rowIndex:e.rowIndex,column:t,rowNode:n,eCell:i,editor:r,startedValue:o},i.classList.add("ag-cell-inline-editing");const l=r.getGui();l.classList.add("ag-cell-editor"),i.appendChild(l),i.classList.add("ag-cell-editing"),r.focusIn&&r.focusIn(),r.afterGuiAttached&&r.afterGuiAttached(),this.eventService.dispatchEvent("cellEditingStarted",{rowIndex:e.rowIndex,column:t,node:n,api:this.grid.getApi()}),this.eventService}startFullRowEditing(e,t,n){const i=[...this.grid.getColumns().left,...this.grid.getColumns().center,...this.grid.getColumns().right].filter(o=>this.grid.isCellEditable(o,t));this.fullRowEditors=[],this.fullRowNode=t;for(const o of i){const a=this.findCellElement(o,e);if(!a)continue;const r=ke(o,t,this.grid.getApi()),l=this.createEditor(o,t,e,r,n);if(!l)continue;a.classList.add("ag-cell-inline-editing","ag-cell-editing");const d=l.getGui();d.classList.add("ag-cell-editor"),a.appendChild(d),this.fullRowEditors.push({column:o,editor:l,eCell:a,startedValue:r})}this.eventService.dispatchEvent("rowEditingStarted",{rowIndex:e,node:t,api:this.grid.getApi(),data:t.data})}createEditor(e,t,n,i,o){var l;const a={value:o!==void 0?o:i,oldValue:i,data:t.data,node:t,column:e,colDef:e.colDef,rowIndex:n,api:this.grid.getApi(),t:d=>this.grid.t(d),onKeyDown:d=>this.onEditorKeyDown(d),values:(l=e.cellEditorParams)==null?void 0:l.values,...e.cellEditorParams};if(typeof e.cellEditor=="string")return(pt[e.cellEditor]||pt.agTextCellEditor)(a);if(typeof e.cellEditor=="function"){const d=e.cellEditor(a);return d&&typeof d.getGui=="function"?d:{getGui:()=>d,getValue:()=>d==null?void 0:d.value}}const r=e.type==="numberColumn"?"agNumberCellEditor":e.type==="dateColumn"?"agDateCellEditor":"agTextCellEditor";return pt[r](a)}stopEditing(e=!1){var d,c,p,h;if(this.fullRowEditors)return this.stopFullRowEditing(e);if(!this.editing)return!1;const{rowIndex:t,column:n,rowNode:i,eCell:o,editor:a,startedValue:r}=this.editing;this.editing=null,o.classList.remove("ag-cell-inline-editing","ag-cell-editing");let l=e?r:a.getValue();if(l===void 0&&!e)return(d=o.querySelector(".ag-cell-editor"))==null||d.remove(),this.eventService.dispatchEvent("cellEditingStopped",{rowIndex:t,column:n,node:i,api:this.grid.getApi()}),!1;if(!e){l=ai(n,l);const u=this.applyValueSetter(n,i,l);if(u===!1)return o.classList.add("ag-cell-invalid"),setTimeout(()=>o.classList.remove("ag-cell-invalid"),1500),this.startEditingCell({rowIndex:t,colKey:n}),!1;l=u}return(c=o.querySelector(".ag-cell-editor"))==null||c.remove(),a.destroy&&a.destroy(),this.eventService.dispatchEvent("cellEditingStopped",{rowIndex:t,column:n,node:i,api:this.grid.getApi()}),!e&&!wi(l,r)&&(this.grid.setCellValue(n,i,l,"edit",r),this.eventService.dispatchEvent("cellValueChanged",{oldValue:r,newValue:l,value:l,data:i.data,node:i,column:n,colDef:n.colDef,api:this.grid.getApi(),source:"edit"}),(h=(p=this.grid.getOptions()).onCellValueChanged)==null||h.call(p,{oldValue:r,newValue:l,value:l,data:i.data,node:i,column:n,colDef:n.colDef,api:this.grid.getApi()}),this.grid.refreshCells({rowNodes:[i],columns:[n],flash:this.grid.getOptions().enableCellChangeFlash!==!1})),!0}applyValueSetter(e,t,n){if(e.valueSetter){if(e.valueSetter({oldValue:ke(e,t,this.grid.getApi()),newValue:n,data:t.data,node:t,column:e,api:this.grid.getApi(),colDef:e.colDef})===!1)return!1}else t.setDataValue(e.colId,n);return n}stopFullRowEditing(e){var o,a,r;const t=this.fullRowEditors,n=this.fullRowNode;if(this.fullRowEditors=null,this.fullRowNode=null,!t)return!1;for(const l of t)l.eCell.classList.remove("ag-cell-inline-editing","ag-cell-editing"),(o=l.eCell.querySelector(".ag-cell-editor"))==null||o.remove(),l.editor.destroy&&l.editor.destroy();if(e)return this.eventService.dispatchEvent("rowEditingStopped",{api:this.grid.getApi()}),!1;const i=[];for(const l of t){if(!n)break;let d=l.editor.getValue();d!==void 0&&(d=ai(l.column,d),wi(d,l.startedValue)||i.push({column:l.column,rowNode:n,newValue:d,oldValue:l.startedValue}))}this.eventService.dispatchEvent("rowEditingStopped",{api:this.grid.getApi(),data:n==null?void 0:n.data});for(const l of i)this.grid.setCellValue(l.column,l.rowNode,l.newValue,"edit",l.oldValue),this.eventService.dispatchEvent("cellValueChanged",{oldValue:l.oldValue,newValue:l.newValue,value:l.newValue,data:l.rowNode.data,node:l.rowNode,column:l.column,colDef:l.column.colDef,api:this.grid.getApi(),source:"edit"}),(r=(a=this.grid.getOptions()).onCellValueChanged)==null||r.call(a,{oldValue:l.oldValue,newValue:l.newValue,value:l.newValue,data:l.rowNode.data,node:l.rowNode,column:l.column,colDef:l.column.colDef,api:this.grid.getApi()}),this.grid.refreshCells({rowNodes:[l.rowNode],columns:[l.column],flash:this.grid.getOptions().enableCellChangeFlash!==!1});return!0}onEditorKeyDown(e){if(e.key==="Enter"||e.keyCode===13){e.preventDefault();const t=this.editing;this.stopEditing(),t&&this.grid.getOptions().enterNavigatesVerticallyAfterEdit!==!1&&this.moveFocus(1,0)}else if(e.key==="Escape"||e.keyCode===27)e.preventDefault(),this.stopEditing(!0);else if(e.key==="Tab"||e.keyCode===9){e.preventDefault(),this.stopEditing(),this.moveFocus(0,e.shiftKey?-1:1);const t=this.focusedCell;t&&this.grid.isCellEditable(t.column,t.rowNode)&&this.startEditingCell({rowIndex:t.rowIndex,colKey:t.column})}}onGridKeyDown(e){const t=e.key;if(this.editing){t==="Escape"&&this.stopEditing(!0);return}const n=this.focusedCell;switch(e.keyCode){case 13:e.preventDefault(),n&&(this.grid.isCellEditable(n.column,n.rowNode)?this.startEditingCell({rowIndex:n.rowIndex,colKey:n.column}):this.moveFocus(1,0));break;case 9:e.preventDefault(),this.moveFocus(0,e.shiftKey?-1:1);break;case 8:case 46:n&&this.grid.isCellEditable(n.column,n.rowNode)&&(e.preventDefault(),this.grid.setCellValue(n.column,n.rowNode,null,"deleteKey"),this.grid.refreshCells({rowNodes:[n.rowNode],columns:[n.column],flash:!0}));break;case 37:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(0,-1));break;case 39:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(0,1));break;case 38:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(-1,0));break;case 40:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(1,0));break;case 36:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(-1/0,0));break;case 35:this.isTextInput(e.target)||(e.preventDefault(),this.moveFocus(1/0,0));break;case 33:e.preventDefault(),this.moveFocus(-this.getPageJump(),0);break;case 34:e.preventDefault(),this.moveFocus(this.getPageJump(),0);break;case 70:(e.ctrlKey||e.metaKey)&&(e.preventDefault(),this.grid.openFind());break;default:if((t==="f"||t==="F")&&(e.ctrlKey||e.metaKey)){e.preventDefault(),this.grid.openFind();return}n&&t.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&this.grid.isCellEditable(n.column,n.rowNode)&&(e.preventDefault(),this.startEditingCell({rowIndex:n.rowIndex,colKey:n.column,charPress:t}));break}}isTextInput(e){if(!e)return!1;const t=e;return t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT"||t.isContentEditable}getPageJump(){const e=this.grid.getRowRenderer().getViewport();return Math.max(1,Math.floor(e.clientHeight/(this.grid.getOptions().rowHeight??42))-1)}moveFocus(e,t){const n=this.focusedCell;if(!n){this.setFocusedCell(0,this.grid.getColumns().center[0]??this.grid.getColumns().left[0]);return}let i=n.rowIndex;if(e===-1/0?i=0:e===1/0?i=this.grid.getDisplayedRowCount()-1:i=Math.max(0,Math.min(this.grid.getDisplayedRowCount()-1,i+e)),t!==0){const o=[...this.grid.getColumns().left,...this.grid.getColumns().center,...this.grid.getColumns().right];let r=o.findIndex(l=>l.colId===n.column.colId)+t;for(;r>=0&&r<o.length&&!o[r].visible;)r+=t;r<0&&(r=0),r>=o.length&&(r=o.length-1),this.setFocusedCell(i,o[r])}else this.setFocusedCell(i,n.column)}tabToNextCell(){this.moveFocus(0,1)}tabToPreviousCell(){this.moveFocus(0,-1)}onCellClicked(e){const{node:t,column:n}=e;if(this.setFocusedCell(e.rowIndex,n),n.checkboxSelection)return;const i=this.grid.isCellEditable(n,t),o=n.singleClickEdit||this.grid.getOptions().singleClickEdit;i&&o&&!this.grid.getOptions().suppressClickEdit&&this.startEditingCell({rowIndex:e.rowIndex,colKey:n})}onCellDoubleClicked(e){const{node:t,column:n}=e;this.setFocusedCell(e.rowIndex,n),this.grid.isCellEditable(n,t)&&!this.grid.getOptions().suppressClickEdit&&this.startEditingCell({rowIndex:e.rowIndex,colKey:n})}destroy(){this.editing=null,this.focusedCell=null}}function wi(s,e){return s===e?!0:s instanceof Date&&e instanceof Date?s.getTime()===e.getTime():!1}const jo={"a4-landscape":[842,595],"a4-portrait":[595,842],"letter-landscape":[792,612],"letter-portrait":[612,792]};function bi(s){return s.replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/[\r\n]/g," ")}function Ko(s,e,t){const n=Math.max(1,Math.floor(e/(t*.5)));return s.length>n?`${s.slice(0,Math.max(1,n-1))}…`:s}function Yo(){return new TextEncoder}function Xo(s,e={}){const[t,n]=jo[e.pageSize||"a4-landscape"],i=e.margin??32,o=e.fontSize??9,a=e.rowHeight??18,r=e.headerColor??[.94,.95,.97],l=e.borderColor??[.85,.87,.9],d=Yo(),c=[],p=b=>(c.push(b),c.length);p(""),p("");const h=p("<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>"),u=p("<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold >>"),f=[];for(const b of s){let k="";const C=b.columnWidths.reduce((F,q)=>F+q,0),w=Math.min(1,(t-i*2)/(C||1)),L=b.columnWidths.map(F=>F*w),N=i;let y=n-i-(e.title?24:0);e.title&&(k+=`BT /F2 ${o+4} Tf ${N} ${y} Td (${bi(e.title)}) Tj ET
|
|
4
|
+
`,y-=18),b.rows.forEach((F,q)=>{var I;const T=q===0,B=((I=b.rowFill)==null?void 0:I[q])??(T?r:void 0);B&&(k+=`${B[0]} ${B[1]} ${B[2]} rg ${N} ${(y-a+4).toFixed(2)} ${C*w} ${a} re f
|
|
5
|
+
`);let A=N;F.forEach(($,z)=>{const W=L[z]??0,X=bi(Ko($.text??"",W-6,o)),te=$.bold||T?u:h,le=($.text??"").length*o*.5;let ve=A+3;$.align==="right"||!$.align&&z>0&&/^-?[\d,.%$£€\s]+$/.test($.text??"")?ve=A+W-3-Math.min(le,W-6):$.align==="center"&&(ve=A+(W-Math.min(le,W-6))/2),k+=`BT /F${te===u?2:1} ${o} Tf ${ve.toFixed(2)} ${(y-o+2).toFixed(2)} Td (${X}) Tj ET
|
|
6
|
+
`,A+=W}),k+=`${l[0]} ${l[1]} ${l[2]} RG 0.5 w ${N} ${(y-a+4).toFixed(2)} m ${(N+C*w).toFixed(2)} ${(y-a+4).toFixed(2)} l S
|
|
7
|
+
`,y-=a});const D=b.rows.length*a;k+=`${l[0]} ${l[1]} ${l[2]} RG 0.5 w ${N} ${(y+a-4).toFixed(2)} m ${N} ${(y+D+a-4).toFixed(2)} l ${(N+C*w).toFixed(2)} ${(y+D+a-4).toFixed(2)} l ${(N+C*w).toFixed(2)} ${(y+a-4).toFixed(2)} l S
|
|
8
|
+
`;const S=d.encode(k),R=p(`<< /Length ${S.length} >>
|
|
9
9
|
stream
|
|
10
10
|
${k}
|
|
11
|
-
endstream`),
|
|
12
|
-
`;const v=[];c.forEach((
|
|
13
|
-
${
|
|
11
|
+
endstream`),M=p(`<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${t} ${n}] /Resources << /Font << /F1 ${h} 0 R /F2 ${u} 0 R >> >> /Contents ${R} 0 R >>`);f.push(M)}c[0]="<< /Type /Catalog /Pages 2 0 R >>",c[1]=`<< /Type /Pages /Kids [${f.map(b=>`${b} 0 R`).join(" ")}] /Count ${f.length} >>`;let g=`%PDF-1.4
|
|
12
|
+
`;const v=[];c.forEach((b,k)=>{const C=k+1;v.push(d.encode(g).length),g+=`${C} 0 obj
|
|
13
|
+
${b}
|
|
14
14
|
endobj
|
|
15
15
|
`});const m=d.encode(g).length;g+=`xref
|
|
16
16
|
0 ${c.length+1}
|
|
17
17
|
0000000000 65535 f
|
|
18
|
-
`;for(const
|
|
18
|
+
`;for(const b of v)g+=`${String(b).padStart(10,"0")} 00000 n
|
|
19
19
|
`;return g+=`trailer
|
|
20
20
|
<< /Size ${c.length+1} /Root 1 0 R >>
|
|
21
21
|
startxref
|
|
22
22
|
${m}
|
|
23
23
|
%%EOF
|
|
24
|
-
`,new Blob([d.encode(g)],{type:"application/pdf"})}function ut(s,e){return s.getUint32(e,!0)}function ot(s,e){return s.getUint16(e,!0)}async function Co(s){var i;if(typeof DecompressionStream>"u")throw new Error("DecompressionStream is not available in this environment");const t=(i=new Response(s).body)==null?void 0:i.pipeThrough(new DecompressionStream("deflate-raw"));if(!t)throw new Error("Failed to create a decompression stream");const n=await new Response(t).arrayBuffer();return new Uint8Array(n)}function So(s){const e=new DataView(s),t=new Uint8Array(s);let n=-1;for(let l=t.length-22;l>=0;l--)if(ut(e,l)===101010256){n=l;break}if(n<0)throw new Error("Not a valid XLSX (ZIP) file");const i=ot(e,n+10);let o=ut(e,n+16);const a=[];for(let l=0;l<i&&ut(e,o)===33639248;l++){const r=ot(e,o+10),d=ut(e,o+20),c=ut(e,o+24),p=ot(e,o+28),h=ot(e,o+30),u=ot(e,o+32),f=ut(e,o+42),g=new TextDecoder().decode(t.subarray(o+46,o+46+p));a.push({name:g,compressionMethod:r,compressedSize:d,uncompressedSize:c,localHeaderOffset:f}),o+=46+p+h+u}return a}async function en(s,e){const t=new DataView(s),n=new Uint8Array(s),i=ot(t,e.localHeaderOffset+26),o=ot(t,e.localHeaderOffset+28),a=e.localHeaderOffset+30+i+o,l=n.subarray(a,a+e.compressedSize);return e.compressionMethod===0?l:Co(l)}function tn(s){return new DOMParser().parseFromString(s,"application/xml")}function Eo(s){const e=s.replace(/\d+/g,"");let t=0;for(const n of e)t=t*26+(n.charCodeAt(0)-64);return t-1}async function xo(s){const e=So(s),t=e.find(d=>d.name==="xl/workbook.xml"),n=[];if(t){const c=tn(new TextDecoder().decode(await en(s,t))).getElementsByTagName("sheet");for(let p=0;p<c.length;p++)n.push(c[p].getAttribute("name")||`Sheet${p+1}`),c[p].getAttribute("r:id")||c[p].getAttribute("id")}const i=[],o=e.find(d=>d.name==="xl/sharedStrings.xml");if(o){const c=tn(new TextDecoder().decode(await en(s,o))).getElementsByTagName("si");for(let p=0;p<c.length;p++){const h=c[p].getElementsByTagName("t");let u="";for(let f=0;f<h.length;f++)u+=h[f].textContent||"";i.push(u)}}const l=e.filter(d=>/^xl\/worksheets\/sheet\d+\.xml$/.test(d.name)).sort((d,c)=>d.name.localeCompare(c.name,void 0,{numeric:!0})),r=[];for(let d=0;d<l.length;d++){const p=tn(new TextDecoder().decode(await en(s,l[d]))).getElementsByTagName("row"),h=[];for(let u=0;u<p.length;u++){const f=p[u],g=[],v=f.getElementsByTagName("c");for(let m=0;m<v.length;m++){const w=v[m],k=w.getAttribute("r")||"",C=w.getAttribute("t")||"";let b="";if(C==="s"){const I=w.getElementsByTagName("v")[0],E=Number((I==null?void 0:I.textContent)||"0");b=i[E]??""}else if(C==="inlineStr"){const I=w.getElementsByTagName("t");for(let E=0;E<I.length;E++)b+=I[E].textContent||""}else{const I=w.getElementsByTagName("v")[0];b=(I==null?void 0:I.textContent)??""}const N=k?Eo(k):m;g[N]=b}h.push(g.map(m=>m??""))}r.push({name:n[d]||`Sheet${d+1}`,rows:h})}return r}const ko=(()=>{const s=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;s[e]=t>>>0}return s})();function Mo(s){let e=4294967295;for(let t=0;t<s.length;t++)e=ko[(e^s[t])&255]^e>>>8;return(e^4294967295)>>>0}function Jn(s){return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/g,"")}function Ro(s){let e="",t=s+1;for(;t>0;){const n=(t-1)%26;e=String.fromCharCode(65+n)+e,t=Math.floor((t-1)/26)}return e}function Lo(s){const e=new TextEncoder,t=[],n=[];let i=0;for(const p of s){const h=e.encode(p.name),u=Mo(p.data),f=new Uint8Array(30+h.length),g=new DataView(f.buffer);g.setUint32(0,67324752,!0),g.setUint16(4,20,!0),g.setUint16(6,2048,!0),g.setUint16(8,0,!0),g.setUint16(10,0,!0),g.setUint16(12,8585,!0),g.setUint32(14,u,!0),g.setUint32(18,p.data.length,!0),g.setUint32(22,p.data.length,!0),g.setUint16(26,h.length,!0),g.setUint16(28,0,!0),f.set(h,30),t.push(f,p.data);const v=new Uint8Array(46+h.length),m=new DataView(v.buffer);m.setUint32(0,33639248,!0),m.setUint16(4,20,!0),m.setUint16(6,20,!0),m.setUint16(8,2048,!0),m.setUint16(10,0,!0),m.setUint16(12,0,!0),m.setUint16(14,0,!0),m.setUint32(16,u,!0),m.setUint32(20,p.data.length,!0),m.setUint32(24,p.data.length,!0),m.setUint16(28,h.length,!0),m.setUint32(42,i,!0),v.set(h,46),n.push(v),i+=f.length+p.data.length}const o=n.reduce((p,h)=>p+h.length,0),a=new Uint8Array(22),l=new DataView(a.buffer);l.setUint32(0,101010256,!0),l.setUint16(8,s.length,!0),l.setUint16(10,s.length,!0),l.setUint32(12,o,!0),l.setUint32(16,i,!0);const r=t.reduce((p,h)=>p+h.length,0)+o+a.length,d=new Uint8Array(r);let c=0;for(const p of t)d.set(p,c),c+=p.length;for(const p of n)d.set(p,c),c+=p.length;return d.set(a,c),d}function To(s){let e='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';return e+='<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData>',s.forEach((t,n)=>{const i=n+1,a=t.some(l=>l.bold)?' s="1" ht="20" customHeight="1"':"";e+=`<row r="${i}"${a}>`,t.forEach((l,r)=>{const d=`${Ro(r)}${i}`,c=l.bold?' s="1"':"";if(l.value===null||l.value===void 0||l.value===""){e+=`<c r="${d}"${c}/>`;return}typeof l.value=="number"&&isFinite(l.value)?e+=`<c r="${d}"${c}><v>${l.value}</v></c>`:typeof l.value=="boolean"?e+=`<c r="${d}"${c} t="b"><v>${l.value?1:0}</v></c>`:e+=`<c r="${d}"${c} t="inlineStr"><is><t xml:space="preserve">${Jn(String(l.value))}</t></is></c>`}),e+="</row>"}),e+="</sheetData></worksheet>",e}const No='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fonts count="2"><font><sz val="11"/><name val="Calibri"/></font><font><b/><sz val="11"/><name val="Calibri"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="2"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles></styleSheet>';function Io(s){const e=new TextEncoder,t=(p,h)=>p.replace(/[\\/?*[\]:]/g," ").slice(0,31)||`Sheet${h+1}`;let n="",i="",o="";s.forEach((p,h)=>{const u=t(p.name,h),f=h+1;n+=`<sheet name="${Jn(u)}" sheetId="${f}" r:id="rId${f}"/>`,i+=`<Relationship Id="rId${f}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet${f}.xml"/>`,o+=`<Override PartName="/xl/worksheets/sheet${f}.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>`});const a='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>'+o+"</Types>",l='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',r=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets>${n}</sheets></workbook>`,d='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rIdStyles" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>'+i+"</Relationships>",c=[{name:"[Content_Types].xml",data:e.encode(a)},{name:"_rels/.rels",data:e.encode(l)},{name:"xl/workbook.xml",data:e.encode(r)},{name:"xl/_rels/workbook.xml.rels",data:e.encode(d)},{name:"xl/styles.xml",data:e.encode(No)}];return s.forEach((p,h)=>{c.push({name:`xl/worksheets/sheet${h+1}.xml`,data:e.encode(To(p.rows))})}),new Blob([Lo(c)],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})}class Ao{constructor(e){y(this,"lastCopied",null);this.grid=e}getExportColumns(e){const t=this.grid.getAllColumns();if(e.columnKeys&&e.columnKeys.length)return e.columnKeys.map(i=>typeof i=="string"?this.grid.getColumn(i):i).filter(i=>!!i);if(e.allColumns)return t.filter(i=>i.field||i.valueGetter);const n=this.grid.getColumns();return[...n.center,...n.left,...n.right]}getExportRows(e){const t=this.grid.getRowModel(),n=[],i=e.onlySelected===!0,o=e.skipGroups!==!1,a=e.skipFooters!==!1;return t.forEachNode(l=>{l.rowPinned==="top"&&e.skipPinnedTop!==!1||l.rowPinned==="bottom"&&e.skipPinnedBottom!==!1||o&&l.group&&!l.footer||a&&l.footer||i&&!l.selected||n.push(l)}),i&&n.length===0?this.getExportRows({...e,onlySelected:!1}):n}getCellValueForExport(e,t,n){let i=Ce(e,t,this.grid.getApi()),o=Ht(e,t,this.grid.getApi());if(n.processCellCallback){const l=n.processCellCallback({value:i,formattedValue:o,node:t,column:e,api:this.grid.getApi()});if(l!=null)return String(l)}const a=this.groupValue(e,t);return a!==void 0&&(i=a,o=i===null?"":String(i)),i instanceof Date?i.toISOString().slice(0,10):o??(i==null?"":String(i))}groupValue(e,t){var n;return t.group||t.footer?(n=t.groupData)==null?void 0:n[e.colId]:void 0}getDataAsCsv(e={}){var a;const t=this.getExportColumns(e),n=this.getExportRows(e),i=e.columnSeparator??",",o=[];if(!e.skipHeader){const l=t.map(r=>{const d=r.headerName||r.field||r.colId;return e.processHeaderCallback?e.processHeaderCallback({column:r,api:this.grid.getApi()}):d});this.grid.getOptions().copyGroupHeadersToClipboard&&o.push(this.csvRow(this.grid.getColumnModel().getRowGroupColumns().map(r=>r.headerName),i,e.suppressQuotes)),o.push(this.csvRow(l,i,e.suppressQuotes))}for(const l of n){if((a=e.shouldRowBeSkipped)!=null&&a.call(e,{node:l,api:this.grid.getApi()}))continue;const r=t.map(d=>this.getCellValueForExport(d,l,e));o.push(this.csvRow(r,i,e.suppressQuotes))}return o.join(`\r
|
|
24
|
+
`,new Blob([d.encode(g)],{type:"application/pdf"})}function kt(s,e){return s.getUint32(e,!0)}function bt(s,e){return s.getUint16(e,!0)}async function Zo(s){var i;if(typeof DecompressionStream>"u")throw new Error("DecompressionStream is not available in this environment");const t=(i=new Response(s).body)==null?void 0:i.pipeThrough(new DecompressionStream("deflate-raw"));if(!t)throw new Error("Failed to create a decompression stream");const n=await new Response(t).arrayBuffer();return new Uint8Array(n)}function Qo(s){const e=new DataView(s),t=new Uint8Array(s);let n=-1;for(let r=t.length-22;r>=0;r--)if(kt(e,r)===101010256){n=r;break}if(n<0)throw new Error("Not a valid XLSX (ZIP) file");const i=bt(e,n+10);let o=kt(e,n+16);const a=[];for(let r=0;r<i&&kt(e,o)===33639248;r++){const l=bt(e,o+10),d=kt(e,o+20),c=kt(e,o+24),p=bt(e,o+28),h=bt(e,o+30),u=bt(e,o+32),f=kt(e,o+42),g=new TextDecoder().decode(t.subarray(o+46,o+46+p));a.push({name:g,compressionMethod:l,compressedSize:d,uncompressedSize:c,localHeaderOffset:f}),o+=46+p+h+u}return a}async function wn(s,e){const t=new DataView(s),n=new Uint8Array(s),i=bt(t,e.localHeaderOffset+26),o=bt(t,e.localHeaderOffset+28),a=e.localHeaderOffset+30+i+o,r=n.subarray(a,a+e.compressedSize);return e.compressionMethod===0?r:Zo(r)}function bn(s){return new DOMParser().parseFromString(s,"application/xml")}function Jo(s){const e=s.replace(/\d+/g,"");let t=0;for(const n of e)t=t*26+(n.charCodeAt(0)-64);return t-1}async function ea(s){const e=Qo(s),t=e.find(d=>d.name==="xl/workbook.xml"),n=[];if(t){const c=bn(new TextDecoder().decode(await wn(s,t))).getElementsByTagName("sheet");for(let p=0;p<c.length;p++)n.push(c[p].getAttribute("name")||`Sheet${p+1}`),c[p].getAttribute("r:id")||c[p].getAttribute("id")}const i=[],o=e.find(d=>d.name==="xl/sharedStrings.xml");if(o){const c=bn(new TextDecoder().decode(await wn(s,o))).getElementsByTagName("si");for(let p=0;p<c.length;p++){const h=c[p].getElementsByTagName("t");let u="";for(let f=0;f<h.length;f++)u+=h[f].textContent||"";i.push(u)}}const r=e.filter(d=>/^xl\/worksheets\/sheet\d+\.xml$/.test(d.name)).sort((d,c)=>d.name.localeCompare(c.name,void 0,{numeric:!0})),l=[];for(let d=0;d<r.length;d++){const p=bn(new TextDecoder().decode(await wn(s,r[d]))).getElementsByTagName("row"),h=[];for(let u=0;u<p.length;u++){const f=p[u],g=[],v=f.getElementsByTagName("c");for(let m=0;m<v.length;m++){const b=v[m],k=b.getAttribute("r")||"",C=b.getAttribute("t")||"";let w="";if(C==="s"){const N=b.getElementsByTagName("v")[0],y=Number((N==null?void 0:N.textContent)||"0");w=i[y]??""}else if(C==="inlineStr"){const N=b.getElementsByTagName("t");for(let y=0;y<N.length;y++)w+=N[y].textContent||""}else{const N=b.getElementsByTagName("v")[0];w=(N==null?void 0:N.textContent)??""}const L=k?Jo(k):m;g[L]=w}h.push(g.map(m=>m??""))}l.push({name:n[d]||`Sheet${d+1}`,rows:h})}return l}const ta=(()=>{const s=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;s[e]=t>>>0}return s})();function na(s){let e=4294967295;for(let t=0;t<s.length;t++)e=ta[(e^s[t])&255]^e>>>8;return(e^4294967295)>>>0}function yi(s){return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/g,"")}function ia(s){let e="",t=s+1;for(;t>0;){const n=(t-1)%26;e=String.fromCharCode(65+n)+e,t=Math.floor((t-1)/26)}return e}function sa(s){const e=new TextEncoder,t=[],n=[];let i=0;for(const p of s){const h=e.encode(p.name),u=na(p.data),f=new Uint8Array(30+h.length),g=new DataView(f.buffer);g.setUint32(0,67324752,!0),g.setUint16(4,20,!0),g.setUint16(6,2048,!0),g.setUint16(8,0,!0),g.setUint16(10,0,!0),g.setUint16(12,8585,!0),g.setUint32(14,u,!0),g.setUint32(18,p.data.length,!0),g.setUint32(22,p.data.length,!0),g.setUint16(26,h.length,!0),g.setUint16(28,0,!0),f.set(h,30),t.push(f,p.data);const v=new Uint8Array(46+h.length),m=new DataView(v.buffer);m.setUint32(0,33639248,!0),m.setUint16(4,20,!0),m.setUint16(6,20,!0),m.setUint16(8,2048,!0),m.setUint16(10,0,!0),m.setUint16(12,0,!0),m.setUint16(14,0,!0),m.setUint32(16,u,!0),m.setUint32(20,p.data.length,!0),m.setUint32(24,p.data.length,!0),m.setUint16(28,h.length,!0),m.setUint32(42,i,!0),v.set(h,46),n.push(v),i+=f.length+p.data.length}const o=n.reduce((p,h)=>p+h.length,0),a=new Uint8Array(22),r=new DataView(a.buffer);r.setUint32(0,101010256,!0),r.setUint16(8,s.length,!0),r.setUint16(10,s.length,!0),r.setUint32(12,o,!0),r.setUint32(16,i,!0);const l=t.reduce((p,h)=>p+h.length,0)+o+a.length,d=new Uint8Array(l);let c=0;for(const p of t)d.set(p,c),c+=p.length;for(const p of n)d.set(p,c),c+=p.length;return d.set(a,c),d}function oa(s){let e='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';return e+='<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData>',s.forEach((t,n)=>{const i=n+1,a=t.some(r=>r.bold)?' s="1" ht="20" customHeight="1"':"";e+=`<row r="${i}"${a}>`,t.forEach((r,l)=>{const d=`${ia(l)}${i}`,c=r.bold?' s="1"':"";if(r.value===null||r.value===void 0||r.value===""){e+=`<c r="${d}"${c}/>`;return}typeof r.value=="number"&&isFinite(r.value)?e+=`<c r="${d}"${c}><v>${r.value}</v></c>`:typeof r.value=="boolean"?e+=`<c r="${d}"${c} t="b"><v>${r.value?1:0}</v></c>`:e+=`<c r="${d}"${c} t="inlineStr"><is><t xml:space="preserve">${yi(String(r.value))}</t></is></c>`}),e+="</row>"}),e+="</sheetData></worksheet>",e}const aa='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fonts count="2"><font><sz val="11"/><name val="Calibri"/></font><font><b/><sz val="11"/><name val="Calibri"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="2"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles></styleSheet>';function ra(s){const e=new TextEncoder,t=(p,h)=>p.replace(/[\\/?*[\]:]/g," ").slice(0,31)||`Sheet${h+1}`;let n="",i="",o="";s.forEach((p,h)=>{const u=t(p.name,h),f=h+1;n+=`<sheet name="${yi(u)}" sheetId="${f}" r:id="rId${f}"/>`,i+=`<Relationship Id="rId${f}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet${f}.xml"/>`,o+=`<Override PartName="/xl/worksheets/sheet${f}.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>`});const a='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>'+o+"</Types>",r='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',l=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets>${n}</sheets></workbook>`,d='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rIdStyles" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>'+i+"</Relationships>",c=[{name:"[Content_Types].xml",data:e.encode(a)},{name:"_rels/.rels",data:e.encode(r)},{name:"xl/workbook.xml",data:e.encode(l)},{name:"xl/_rels/workbook.xml.rels",data:e.encode(d)},{name:"xl/styles.xml",data:e.encode(aa)}];return s.forEach((p,h)=>{c.push({name:`xl/worksheets/sheet${h+1}.xml`,data:e.encode(oa(p.rows))})}),new Blob([sa(c)],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})}class la{constructor(e){x(this,"lastCopied",null);this.grid=e}getExportColumns(e){const t=this.grid.getAllColumns();if(e.columnKeys&&e.columnKeys.length)return e.columnKeys.map(i=>typeof i=="string"?this.grid.getColumn(i):i).filter(i=>!!i);if(e.allColumns)return t.filter(i=>i.field||i.valueGetter);const n=this.grid.getColumns();return[...n.center,...n.left,...n.right]}getExportRows(e){const t=this.grid.getRowModel(),n=[],i=e.onlySelected===!0,o=e.skipGroups!==!1,a=e.skipFooters!==!1;return t.forEachNode(r=>{r.rowPinned==="top"&&e.skipPinnedTop!==!1||r.rowPinned==="bottom"&&e.skipPinnedBottom!==!1||o&&r.group&&!r.footer||a&&r.footer||i&&!r.selected||n.push(r)}),i&&n.length===0?this.getExportRows({...e,onlySelected:!1}):n}getCellValueForExport(e,t,n){let i=ke(e,t,this.grid.getApi()),o=Kt(e,t,this.grid.getApi());if(n.processCellCallback){const r=n.processCellCallback({value:i,formattedValue:o,node:t,column:e,api:this.grid.getApi()});if(r!=null)return String(r)}const a=this.groupValue(e,t);return a!==void 0&&(i=a,o=i===null?"":String(i)),i instanceof Date?i.toISOString().slice(0,10):o??(i==null?"":String(i))}groupValue(e,t){var n;return t.group||t.footer?(n=t.groupData)==null?void 0:n[e.colId]:void 0}getDataAsCsv(e={}){var a;const t=this.getExportColumns(e),n=this.getExportRows(e),i=e.columnSeparator??",",o=[];if(!e.skipHeader){const r=t.map(l=>{const d=l.headerName||l.field||l.colId;return e.processHeaderCallback?e.processHeaderCallback({column:l,api:this.grid.getApi()}):d});this.grid.getOptions().copyGroupHeadersToClipboard&&o.push(this.csvRow(this.grid.getColumnModel().getRowGroupColumns().map(l=>l.headerName),i,e.suppressQuotes)),o.push(this.csvRow(r,i,e.suppressQuotes))}for(const r of n){if((a=e.shouldRowBeSkipped)!=null&&a.call(e,{node:r,api:this.grid.getApi()}))continue;const l=t.map(d=>this.getCellValueForExport(d,r,e));o.push(this.csvRow(l,i,e.suppressQuotes))}return o.join(`\r
|
|
25
25
|
`)}csvRow(e,t,n){return e.map(i=>{const o=i==null?"":String(i);return!n&&(o.includes(t)||o.includes('"')||o.includes(`
|
|
26
|
-
`))?`"${o.replace(/"/g,'""')}"`:o}).join(t)}getDataAsExcel(e={}){const t=this.getExportColumns(e),n=this.getExportRows(e),i=[];e.skipHeader||i.push(t.map(o=>({value:o.headerName||o.field||o.colId,bold:!0})));for(const o of n)i.push(t.map(a=>{let
|
|
27
|
-
`);a.length&&a[a.length-1]===""&&a.pop();const l=[...this.grid.getColumns().left,...this.grid.getColumns().center,...this.grid.getColumns().right],r=l.findIndex(p=>p.colId===o.colId),d=[],c=[];a.forEach((p,h)=>{const u=p.split(" "),f=i+h,g=this.grid.getDisplayedRowAtIndex(f);if(!g){const v={};u.forEach((m,w)=>{const k=l[r+w];k!=null&&k.field&&(v[k.field]=m)}),c.push(v);return}u.forEach((v,m)=>{const w=l[r+m];w&&this.grid.setCellValue(w,g,v,"paste")}),d.push(g)}),c.length&&this.grid.getApi().applyTransaction({add:c}),d.length&&this.grid.refreshCells({rowNodes:d,flash:!0})}writeToClipboard(e){const t=()=>{this.grid.getEventService().dispatchEvent("cutEnd",{})};navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(e).then(t,()=>this.fallbackCopy(e,t)):this.fallbackCopy(e,t)}fallbackCopy(e,t){const n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.opacity="0",document.body.appendChild(n),n.select();try{document.execCommand("copy")}catch{}document.body.removeChild(n),t()}}const Mt=["contains","equals","notEqual","startsWith","endsWith","blank","notBlank"],Rt=["equals","notEqual","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","inRange","blank","notBlank"];class $o{constructor(e,t){this.grid=e,this.popupService=t}openFilter(e,t){var g,v;if(typeof e.colDef.filterComponent=="function"){this.openCustomFilter(e,t);return}if(e.filter==="multi"){this.openMultiFilter(e,t);return}const n=e.filter===!0?"text":e.filter,i=this.grid.getFilterService().getFilterInstance(e.colId),o=n==="set"?260:240,{ePopup:a}=this.popupService.createPopup(o,"ag-filter-popup");a.innerHTML="";const l=document.createElement("div");l.className="ag-popup-title",l.textContent=`Search ${e.headerName||e.field||""}`,a.appendChild(l);const r=i?{...i}:this.getDefaultModel(n);let d=i?{...i}:null;const c=()=>{d&&this.isMeaningful(d)?this.grid.getFilterService().setColumnFilterModel(e,d):this.grid.getFilterService().setColumnFilterModel(e,null),close()},p=()=>{this.grid.getFilterService().setColumnFilterModel(e,null),close()};if(n==="set")a.appendChild(this.buildSetFilter(e,r,m=>{d=m}));else if(n==="boolean"){const m=this.buildConditionSelect(["true","false"],String(r.filter??""),w=>{d={filterType:"boolean",filter:w==="true"}});a.appendChild(m)}else{const m=n==="number"?Rt:Mt,w=this.buildConditionSelect(m,r.type||m[0],k=>{r.type=k,d={...r}});if(a.appendChild(w),r.type!=="blank"&&r.type!=="notBlank")if(n==="number"&&r.type==="inRange"){const k=document.createElement("div");k.className="ag-filter-inputs";const C=document.createElement("input");C.type="number",C.className="ag-filter-input",C.value=r.filter??"",C.placeholder=this.grid.t("from"),C.addEventListener("input",()=>{d={...r,filter:C.value,filterTo:b.value}});const b=document.createElement("input");b.type="number",b.className="ag-filter-input",b.value=r.filterTo??"",b.placeholder=this.grid.t("to"),b.addEventListener("input",()=>{d={...r,filter:C.value,filterTo:b.value}}),k.appendChild(C),k.appendChild(b),a.appendChild(k)}else if(n==="date"){const k=document.createElement("div");k.className="ag-filter-inputs";const C=document.createElement("input");C.type="date",C.className="ag-filter-input",C.value=r.dateFrom??"",C.addEventListener("input",()=>{d={...r,dateFrom:C.value,dateTo:b.value}});const b=document.createElement("input");b.type="date",b.className="ag-filter-input",b.value=r.dateTo??"",b.addEventListener("input",()=>{d={...r,dateFrom:C.value,dateTo:b.value}}),k.appendChild(C),k.appendChild(b),a.appendChild(k)}else{const k=document.createElement("input");k.type=n==="number"?"number":"text",k.className="ag-filter-input",k.value=r.filter??"",k.placeholder=this.grid.t("filterOoo"),k.addEventListener("input",()=>{d={...r,filter:k.value}}),k.addEventListener("keydown",C=>{C.key==="Enter"&&c()}),a.appendChild(k),setTimeout(()=>k.focus(),0)}else d={...r}}if(n==="text"||n==="number"){const m=document.createElement("div");m.className="ag-filter-second-condition";const w=document.createElement("select");w.className="ag-filter-condition",w.innerHTML=`<option value="AND">${this.grid.t("and")}</option><option value="OR">${this.grid.t("or")}</option>`,w.value=r.operator||"AND",m.appendChild(w);const k=this.buildConditionSelect(n==="number"?Rt:Mt,((g=r.condition2)==null?void 0:g.type)||(n==="number"?Rt:Mt)[0],b=>{d||(d={...r}),d.condition2={...d.condition2,type:b}});m.appendChild(k);const C=document.createElement("input");C.type=n==="number"?"number":"text",C.className="ag-filter-input",C.placeholder=this.grid.t("secondValue"),C.value=((v=r.condition2)==null?void 0:v.filter)??"",C.addEventListener("input",()=>{d||(d={...r}),d.condition2={...d.condition2,filter:C.value}}),m.appendChild(C),a.appendChild(m),w.addEventListener("change",()=>{d||(d={...r}),d.operator=w.value})}const h=document.createElement("div");h.className="ag-popup-buttons";const u=document.createElement("button");u.className="ag-button ag-button-primary",u.textContent=this.grid.t("apply"),u.addEventListener("click",c);const f=document.createElement("button");f.className="ag-button",f.textContent=this.grid.t("clear"),f.addEventListener("click",p),h.appendChild(f),h.appendChild(u),a.appendChild(h),this.popupService.positionAt(a,t),this.grid.getEventService().dispatchEvent("filterOpened",{column:e,api:this.grid.getApi()})}buildSetFilter(e,t,n){const i=document.createElement("div");i.className="ag-set-filter";const o=document.createElement("input");o.type="text",o.className="ag-filter-input",o.placeholder=this.grid.t("search"),i.appendChild(o);const a=new Set;this.grid.getRowModel().forEachNode(g=>{!g.group&&!g.footer&&a.add(Ce(e,g,this.grid.getApi()))});const r=[...a].sort((g,v)=>g===v?0:g<v?-1:1),d=document.createElement("div");d.className="ag-set-filter-list";const c=new Set((t.values||[]).map(g=>String(g))),p=()=>{d.innerHTML="";const g=o.value.toLowerCase();let v=0;for(const m of r){const w=m==null?"(Blanks)":String(m);if(g&&!w.toLowerCase().includes(g))continue;v++;const k=document.createElement("label");k.className="ag-set-filter-item";const C=document.createElement("input");C.type="checkbox",C.checked=c.has(String(m)),C.addEventListener("change",()=>{C.checked?c.add(String(m)):c.delete(String(m)),n({filterType:"set",values:[...c]})});const b=document.createElement("span");b.textContent=w,k.appendChild(C),k.appendChild(b),d.appendChild(k)}if(v===0){const m=document.createElement("div");m.className="ag-set-filter-empty",m.textContent=this.grid.t("noMatches"),d.appendChild(m)}};o.addEventListener("input",p),p();const h=document.createElement("div");h.className="ag-set-filter-actions";const u=document.createElement("button");u.className="ag-button ag-button-small",u.textContent=this.grid.t("selectAll"),u.addEventListener("click",()=>{c.clear();for(const g of r)c.add(String(g));p(),n({filterType:"set",values:[...c]})});const f=document.createElement("button");return f.className="ag-button ag-button-small",f.textContent=this.grid.t("clearAll"),f.addEventListener("click",()=>{c.clear(),p(),n({filterType:"set",values:[]})}),h.appendChild(u),h.appendChild(f),i.appendChild(d),i.appendChild(h),n({filterType:"set",values:[...c]}),i}buildConditionSelect(e,t,n){const i=document.createElement("select");i.className="ag-filter-condition";for(const o of e){const a=document.createElement("option");a.value=o;const l=Ps[o];a.textContent=l?this.grid.t(l):o,o===t&&(a.selected=!0),i.appendChild(a)}return i.addEventListener("change",()=>n(i.value)),i}openMultiFilter(e,t){var k;const n=this.grid.getFilterService().getFilterInstance(e.colId),i=n&&n.filterType==="multi"?n:null,o=(k=i==null?void 0:i.filterModels)!=null&&k.length?i.filterModels.map(C=>({...C})):[this.getDefaultModel(e.filter===!0?"text":String(e.filter))];let a=(i==null?void 0:i.operator)||"AND";const{ePopup:l,close:r}=this.popupService.createPopup(300,"ag-filter-popup ag-multi-filter-popup");l.innerHTML="";const d=document.createElement("div");d.className="ag-popup-title",d.textContent=`Filters for ${e.headerName||e.field||""}`,l.appendChild(d);const c=document.createElement("div");c.className="ag-multi-filter-operator";const p=document.createElement("span");p.textContent=this.grid.t("join");const h=document.createElement("select");h.className="ag-filter-condition",h.innerHTML='<option value="AND">All (AND)</option><option value="OR">Any (OR)</option>',h.value=a,h.addEventListener("change",()=>{a=h.value}),c.appendChild(p),c.appendChild(h),l.appendChild(c);const u=document.createElement("div");u.className="ag-multi-filter-list",l.appendChild(u);const f=()=>{u.innerHTML="",o.forEach((C,b)=>{const N=document.createElement("div");N.className="ag-multi-filter-row";const I=document.createElement("select");I.className="ag-filter-condition";const E=["text","number","date","set","boolean"];for(const A of E){const H=document.createElement("option");H.value=A,H.textContent=A.charAt(0).toUpperCase()+A.slice(1),A===C.filterType&&(H.selected=!0),I.appendChild(H)}I.addEventListener("change",()=>{o[b]={...this.getDefaultModel(I.value)},f()}),N.appendChild(I);const G=C.filterType==="number"?Rt:Mt,x=this.buildConditionSelect(G,C.type||G[0],A=>{o[b].type=A});if(N.appendChild(x),C.filterType!=="blank"&&C.type!=="blank"&&C.type!=="notBlank"){const A=document.createElement("input");A.type=C.filterType==="number"?"number":"text",A.className="ag-filter-input",A.value=C.filter??"",A.placeholder=this.grid.t("value"),A.addEventListener("input",()=>{o[b].filter=A.value}),N.appendChild(A)}const T=document.createElement("button");T.className="ag-button ag-button-small",T.textContent="×",T.title=this.grid.t("removeFilter"),T.addEventListener("click",()=>{o.splice(b,1),f()}),N.appendChild(T),u.appendChild(N)})};f();const g=document.createElement("button");g.className="ag-button ag-button-small",g.textContent="+ "+this.grid.t("addFilter"),g.addEventListener("click",()=>{o.push(this.getDefaultModel("text")),f()}),l.appendChild(g);const v=document.createElement("div");v.className="ag-popup-buttons";const m=document.createElement("button");m.className="ag-button ag-button-primary",m.textContent=this.grid.t("apply"),m.addEventListener("click",()=>{o.filter(b=>b.filter!==void 0&&b.filter!==""||b.type==="blank"||b.type==="notBlank").length?this.grid.getFilterService().setColumnFilterModel(e,{filterType:"multi",operator:a,filterModels:o}):this.grid.getFilterService().setColumnFilterModel(e,null),r()});const w=document.createElement("button");w.className="ag-button",w.textContent=this.grid.t("clear"),w.addEventListener("click",()=>{this.grid.getFilterService().setColumnFilterModel(e,null),r()}),v.appendChild(w),v.appendChild(m),l.appendChild(v),this.popupService.positionAt(l,t)}openAdvancedFilter(e){var k,C;const t=this.grid.getFilterService(),n=t.getAdvancedFilterModel(),i=(k=n==null?void 0:n.conditions)!=null&&k.length?n.conditions.map(b=>({...b})):[{colId:((C=this.grid.getColumns().center[0])==null?void 0:C.colId)??"",type:"contains",filter:""}];let o=(n==null?void 0:n.operator)||"AND";const{ePopup:a,close:l}=this.popupService.createPopup(420,"ag-filter-popup ag-advanced-filter-popup");a.innerHTML="";const r=document.createElement("div");r.className="ag-popup-title",r.textContent=this.grid.t("advancedFilter"),a.appendChild(r);const d=document.createElement("div");d.className="ag-advanced-filter-list",a.appendChild(d);const c=()=>[...this.grid.getColumns().left,...this.grid.getColumns().center,...this.grid.getColumns().right].filter(b=>b.filter),p=()=>{d.innerHTML="",i.forEach((b,N)=>{const I=document.createElement("div");I.className="ag-advanced-filter-row";const E=document.createElement("select");E.className="ag-filter-condition";for(const R of c()){const P=document.createElement("option");P.value=R.colId,P.textContent=R.headerName||R.field||R.colId,R.colId===b.colId&&(P.selected=!0),E.appendChild(P)}E.addEventListener("change",()=>{i[N].colId=E.value}),I.appendChild(E);const G=this.grid.getColumn(b.colId),x=G&&G.filter!==!1?String(G.filter):"text",T=x==="number"?Rt:Mt,A=this.buildConditionSelect(T,b.type||"contains",R=>{i[N].type=R});I.appendChild(A);const H=document.createElement("input");H.type=x==="number"?"number":"text",H.className="ag-filter-input",H.value=b.filter??"",H.placeholder=this.grid.t("value"),H.addEventListener("input",()=>{i[N].filter=H.value}),I.appendChild(H);const q=document.createElement("button");q.className="ag-button ag-button-small",q.textContent="×",q.addEventListener("click",()=>{i.splice(N,1),p()}),I.appendChild(q),d.appendChild(I)})};p();const h=document.createElement("button");h.className="ag-button ag-button-small",h.textContent="+ "+this.grid.t("addCondition"),h.addEventListener("click",()=>{var b;i.push({colId:((b=c()[0])==null?void 0:b.colId)??"",type:"contains",filter:""}),p()}),a.appendChild(h);const u=document.createElement("div");u.className="ag-multi-filter-operator";const f=document.createElement("span");f.textContent=this.grid.t("join");const g=document.createElement("select");g.className="ag-filter-condition",g.innerHTML='<option value="AND">All (AND)</option><option value="OR">Any (OR)</option>',g.value=o,g.addEventListener("change",()=>{o=g.value}),u.appendChild(f),u.appendChild(g),a.appendChild(u);const v=document.createElement("div");v.className="ag-popup-buttons";const m=document.createElement("button");m.className="ag-button ag-button-primary",m.textContent=this.grid.t("apply"),m.addEventListener("click",()=>{const b=i.filter(N=>N.filter!==void 0&&N.filter!=="");b.length?t.setAdvancedFilterModel({filterType:"advanced",operator:o,conditions:b}):t.setAdvancedFilterModel(null),l()});const w=document.createElement("button");w.className="ag-button",w.textContent=this.grid.t("clear"),w.addEventListener("click",()=>{t.setAdvancedFilterModel(null),l()}),v.appendChild(w),v.appendChild(m),a.appendChild(v),this.popupService.positionAt(a,e)}openCustomFilter(e,t){const n=e.colDef.filterComponent;if(typeof n!="function")return;const i=this.grid.getFilterService(),o=n({column:e,colDef:e.colDef,api:this.grid.getApi(),model:i.getFilterInstance(e.colId)??null,onModelChange:r=>i.setColumnFilterModel(e,r),onGuiAttached:()=>{}}),{ePopup:a}=this.popupService.createPopup(260,"ag-filter-popup");a.innerHTML="";const l=typeof(o==null?void 0:o.getGui)=="function"?o.getGui():o;l instanceof HTMLElement&&a.appendChild(l),typeof(o==null?void 0:o.afterGuiAttached)=="function"&&o.afterGuiAttached(),this.popupService.positionAt(a,t)}getDefaultModel(e){return e==="number"?{filterType:"number",type:"equals",filter:""}:e==="date"?{filterType:"date",dateFrom:"",dateTo:""}:e==="set"?{filterType:"set",values:[]}:e==="boolean"?{filterType:"boolean",filter:!0}:{filterType:"text",type:"contains",filter:""}}isMeaningful(e){return e.filterType==="text"?!!e.filter||e.type==="blank"||e.type==="notBlank":e.filterType==="number"?e.filter!==void 0&&e.filter!==null&&e.filter!=="":e.filterType==="date"?!!(e.dateFrom||e.dateTo):e.filterType==="set"?!!e.values&&e.values.length>0:e.filterType==="boolean"?e.filter!==void 0:!1}}class Fo{constructor(e){y(this,"filterModel",{});y(this,"advancedFilterModel",null);this.grid=e}getAdvancedFilterModel(){return this.advancedFilterModel}setAdvancedFilterModel(e){this.advancedFilterModel=e,this.onFilterChanged("api")}isAdvancedFilterEnabled(){return!!this.grid.getOptions().enableAdvancedFilter}doesNodePassAdvancedFilter(e){const t=this.advancedFilterModel;if(!t||!t.conditions||t.conditions.length===0)return!0;const n=this.grid.getRowModel(),i=typeof n.doesNodePassFilterModel=="function"?n.doesNodePassFilterModel.bind(n):null,o=t.conditions.map(a=>{const l=this.grid.getColumn(a.colId);return!l||!i?!0:i(e,l,{...a,filterType:l.filter===!0?"text":l.filter})});return t.operator==="OR"?o.some(Boolean):o.every(Boolean)}getFilterModel(){return this.filterModel}getFilterInstance(e){return this.filterModel[e]}setFilterModel(e){this.filterModel=e||{},this.onFilterChanged("api")}setColumnFilterModel(e,t){const n=typeof e=="string"?e:e.colId;t==null?delete this.filterModel[n]:this.filterModel[n]=t,this.onFilterChanged("api")}isFilterActive(e){const t=this.filterModel[e.colId];return t?t.filterType==="multi"?(t.filterModels||[]).some(i=>this.isModelMeaningful(i)):this.isModelMeaningful(t):!1}isModelMeaningful(e){return e.filterType==="text"?!!e.filter:e.filterType==="number"?e.filter!==void 0&&e.filter!==null&&e.filter!=="":e.filterType==="date"?!!(e.dateFrom||e.dateTo):e.filterType==="set"?!!e.values&&e.values.length>0:e.filterType==="boolean"?e.filter!==void 0&&e.filter!==null&&e.filter!=="":!1}handleFloatingFilterChange(e,t){if(t===""||t===null||t===void 0){delete this.filterModel[e.colId],this.onFilterChanged("uiFilterModified");return}switch(e.filter){case"number":this.filterModel[e.colId]={filterType:"number",type:"equals",filter:t};break;case"date":this.filterModel[e.colId]={filterType:"date",dateFrom:t,dateTo:t};break;case"boolean":this.filterModel[e.colId]={filterType:"boolean",filter:t==="true"};break;case"set":this.filterModel[e.colId]={filterType:"set",values:[t]};break;default:this.filterModel[e.colId]={filterType:"text",type:"contains",filter:t};break}this.onFilterChanged("uiFilterModified")}resetFilters(){this.filterModel={},this.onFilterChanged("api")}onFilterChanged(e){var n,i;this.grid.getHeaderView().updateIndicators(),this.grid.refreshModel("filter");const t=this.grid.getApi();this.grid.getEventService().dispatchEvent("filterChanged",{api:t,source:e}),(i=(n=this.grid.getOptions()).onFilterChanged)==null||i.call(n,{api:t,source:e})}}class Do{constructor(e,t){y(this,"matches",[]);y(this,"activeMatch",0);y(this,"searchText","");y(this,"matchCase",!1);y(this,"ePopup",null);y(this,"eCount",null);y(this,"eInput",null);y(this,"closePopup",null);this.grid=e,this.popupService=t}isOpen(){return this.ePopup!==null}open(){var r,d;if(this.ePopup){(r=this.eInput)==null||r.focus(),(d=this.eInput)==null||d.select();return}const{ePopup:e,close:t}=this.popupService.createPopup(420,"ag-find-bar");this.ePopup=e,this.closePopup=t,e.innerHTML="";const n=document.createElement("input");n.type="text",n.className="ag-find-input",n.placeholder=this.grid.translate("find","Find in grid..."),n.value=this.searchText,this.eInput=n,e.appendChild(n);const i=document.createElement("label");i.className="ag-find-case";const o=document.createElement("input");o.type="checkbox",o.checked=this.matchCase,o.addEventListener("change",()=>{this.matchCase=o.checked,this.find(this.searchText)}),i.appendChild(o),i.appendChild(document.createTextNode(this.grid.translate("matchCase","Match case"))),e.appendChild(i);const a=document.createElement("span");a.className="ag-find-count",this.eCount=a,e.appendChild(a);const l=(c,p,h)=>{const u=document.createElement("button");return u.className="ag-button ag-button-small",u.textContent=c,u.title=p,u.addEventListener("click",h),e.appendChild(u),u};l("‹",this.grid.translate("prevMatch","上一个匹配"),()=>this.findPrevious()),l("›",this.grid.translate("nextMatch","下一个匹配"),()=>this.findNext()),l("×",this.grid.translate("close","关闭"),()=>this.close()),n.addEventListener("input",()=>this.find(n.value)),n.addEventListener("keydown",c=>{c.key==="Enter"?(c.preventDefault(),c.shiftKey?this.findPrevious():this.findNext()):c.key==="Escape"&&this.close()}),this.grid.getRootElement(),e.style.position="absolute",e.style.left="50%",e.style.top="8px",e.style.transform="translateX(-50%)",e.style.display="flex",setTimeout(()=>n.focus(),0)}close(){var e;(e=this.closePopup)==null||e.call(this),this.ePopup=null,this.closePopup=null,this.eInput=null,this.eCount=null,this.matches=[],this.applyHighlight()}setFindText(e){this.searchText=e,this.eInput&&(this.eInput.value=e),this.find(e)}getFindText(){return this.searchText}getNumMatches(){return this.matches.length}getActiveMatch(){return this.activeMatch}find(e){if(this.searchText=e,this.matches=[],this.activeMatch=0,e){const t=this.grid.getColumns().center;this.grid.getRowModel().forEachNode((n,i)=>{if(!(n.group||n.footer))for(const o of t){const a=Ht(o,n,this.grid.getApi())??"",l=this.matchCase?a:a.toLowerCase(),r=this.matchCase?e:e.toLowerCase();l.includes(r)&&this.matches.push({rowIndex:i,colId:o.colId})}})}this.eCount&&(this.eCount.textContent=this.matches.length?`${this.activeMatch+1} ${this.grid.translate("of","of")} ${this.matches.length}`:this.grid.translate("noMatches","No matches")),this.applyHighlight()}findNext(){return this.matches.length===0?!1:(this.activeMatch=(this.activeMatch+1)%this.matches.length,this.goToActive(),!0)}findPrevious(){return this.matches.length===0?!1:(this.activeMatch=(this.activeMatch-1+this.matches.length)%this.matches.length,this.goToActive(),!0)}goToActive(){var o,a;const e=this.matches[this.activeMatch];if(!e)return;this.eCount&&(this.eCount.textContent=`${this.activeMatch+1} ${this.grid.translate("of","of")} ${this.matches.length}`);const t=(a=(o=this.grid).getPaginationService)==null?void 0:a.call(o);if(t!=null&&t.isEnabled()){const l=t.getPageSize(),r=Math.floor(e.rowIndex/l);r!==t.getCurrentPage()&&t.goToPage(r)}this.grid.getApi().ensureIndexVisible(e.rowIndex,"middle"),this.applyHighlight();const n=this.grid.getDisplayedRowAtIndex(e.rowIndex),i=this.grid.getColumn(e.colId);n&&i&&this.grid.getEditService().setFocusedCell(e.rowIndex,i)}applyHighlight(){const e=this.grid.getRowRenderer().getRowComps();for(const[t,n]of e){let i=-1;this.grid.getRowModel().forEachNode((o,a)=>{o.id===t&&(i=a)});for(const o of n.getCellElements()){const a=o.dataset.colid,l=this.matches.findIndex(r=>r.rowIndex===i&&r.colId===a);o.classList.toggle("ag-find-match",l>=0),o.classList.toggle("ag-find-active-match",l>=0&&l===this.activeMatch)}}}}class Po{constructor(e,t){this.grid=e,this.popupService=t}isFormulaColumn(e){return typeof e.field=="string"&&e.field.trimStart().startsWith("=")}openFormulaEditor(e,t){const{ePopup:n,close:i}=this.popupService.createPopup(460,"ag-formula-editor");n.innerHTML="";const o=document.createElement("div");o.className="ag-popup-title",o.textContent=`${this.grid.t("formula")} - ${e.headerName||e.field}`,n.appendChild(o);const a=document.createElement("textarea");a.className="ag-formula-input",a.rows=3,a.value=this.isFormulaColumn(e)?e.field:"=",a.placeholder=this.grid.t("formulaPlaceholder"),n.appendChild(a);const l=document.createElement("div");l.className="ag-formula-preview";const r=()=>{const g=this.grid.getDisplayedRowAtIndex(0);if(!g){l.textContent="";return}try{const v=xt(a.value,{data:g.data});l.textContent=`${this.grid.t("formulaPreview")}: ${v==null?"":String(v)}`,l.classList.remove("ag-formula-error")}catch(v){l.textContent=`${this.grid.t("formulaError")}: ${(v==null?void 0:v.code)||(v==null?void 0:v.message)||this.grid.t("invalidFormula")}`,l.classList.add("ag-formula-error")}};a.addEventListener("input",r),n.appendChild(l);const d=document.createElement("div");d.className="ag-formula-functions";const c=document.createElement("div");c.className="ag-formula-functions-title",c.textContent=this.grid.t("functions"),d.appendChild(c);const p=document.createElement("div");p.className="ag-formula-functions-list";for(const g of Pt){const v=document.createElement("button");v.className="ag-button ag-button-small",v.textContent=g,v.addEventListener("click",()=>{a.value+=`${a.value.endsWith("(")||a.value==="="?"":" "}${g}()`,a.focus(),r()}),p.appendChild(v)}d.appendChild(p),n.appendChild(d);const h=document.createElement("div");h.className="ag-popup-buttons";const u=document.createElement("button");u.className="ag-button ag-button-primary",u.textContent=this.grid.t("apply"),u.addEventListener("click",()=>{const g=a.value.trim(),v=this.grid.getColumnModel(),m=v.getColumn(e.colId);m&&(m.field=g==="="||g===""?e.field:g,m.colDef={...m.colDef,field:m.field},g!=="="&&g!==""&&(m.editable=!1)),v.refreshAll(),this.grid.refreshCells({force:!0}),i()});const f=document.createElement("button");f.className="ag-button",f.textContent=this.grid.t("clear"),f.addEventListener("click",()=>{a.value="=",r()}),h.appendChild(f),h.appendChild(u),n.appendChild(h),this.popupService.positionAt(n,t),r()}}class Ho{constructor(e,t){y(this,"runtimeNotes",new Map);this.grid=e,this.popupService=t}keyOf(e,t){return`${e}::${t}`}getNote(e,t,n,i){const o=this.runtimeNotes.get(this.keyOf(e,t));if(o!==void 0)return o;if(typeof n=="function")return n(i);if(typeof n=="string")return n}setNote(e,t,n){const i=this.keyOf(e,t);n==null||n===""?this.runtimeNotes.delete(i):this.runtimeNotes.set(i,n),this.grid.refreshCells({force:!0})}openNoteEditor(e,t,n){const i=this.grid.getColumn(t),o=this.grid.getRowNode(e),a=this.getNote(e,t,i==null?void 0:i.colDef.note,{data:o==null?void 0:o.data,node:o,column:i,api:this.grid.getApi()})??"",{ePopup:l,close:r}=this.popupService.createPopup(280,"ag-note-editor");l.innerHTML="";const d=document.createElement("div");d.className="ag-popup-title",d.textContent=`${this.grid.t("note")} — ${(i==null?void 0:i.headerName)||t}`,l.appendChild(d);const c=document.createElement("textarea");c.className="ag-formula-input",c.rows=4,c.value=a,c.placeholder=this.grid.t("writeNote"),l.appendChild(c);const p=document.createElement("div");p.className="ag-popup-buttons";const h=document.createElement("button");h.className="ag-button ag-button-primary",h.textContent=this.grid.t("save"),h.addEventListener("click",()=>{this.setNote(e,t,c.value.trim()||void 0),r()});const u=document.createElement("button");u.className="ag-button",u.textContent=this.grid.t("delete"),u.addEventListener("click",()=>{this.setNote(e,t,void 0),r()}),p.appendChild(u),p.appendChild(h),l.appendChild(p),this.popupService.positionAt(l,n),setTimeout(()=>c.focus(),0)}}class Oo{constructor(e){y(this,"eOverlayWrapper");y(this,"current",null);this.grid=e,this.eOverlayWrapper=document.createElement("div"),this.eOverlayWrapper.className="ag-overlay",this.eOverlayWrapper.style.display="none";const t=e.getRowRenderer().getViewport();t.style.position="relative",this.eOverlayWrapper.style.position="absolute",this.eOverlayWrapper.style.inset="0",this.eOverlayWrapper.style.zIndex="10",t.appendChild(this.eOverlayWrapper)}show(e,t){this.current=e,this.eOverlayWrapper.innerHTML="";const n=document.createElement("div");n.className=`ag-overlay-${e==="loading"?"loading":"no-rows"}-wrapper`;const i=document.createElement("div");if(i.className="ag-overlay-text",i.textContent=t,e==="loading"){const o=document.createElement("div");o.className="ag-overlay-loading-spinner",n.appendChild(o)}n.appendChild(i),this.eOverlayWrapper.appendChild(n),this.eOverlayWrapper.style.display="flex"}showLoadingOverlay(){this.show("loading",this.grid.translate("loadingOoo","Loading..."))}showNoRowsOverlay(){this.show("noRows",this.grid.translate("noRowsToShow","No Rows To Show"))}hideOverlay(){this.current=null,this.eOverlayWrapper.style.display="none",this.eOverlayWrapper.innerHTML=""}updateAuto(){const e=this.grid.getRowModel();if(!!this.grid.getOptions().__loadingRows){this.showLoadingOverlay();return}e.getRowCount()===0?this.show("noRows",this.grid.translate("noRowsToShow","No Rows To Show")):this.hideOverlay()}getCurrent(){return this.current}}class ei{constructor(e,t){y(this,"enabled");y(this,"pageSize");y(this,"currentPage",0);y(this,"pageSizeSelector");y(this,"ePanel");y(this,"ePageInfo");y(this,"ePageInput");y(this,"ePageSizeContainer");y(this,"eFromToContainer");this.grid=e,this.eventService=t;const n=e.getOptions();this.enabled=n.pagination===!0,this.pageSize=n.paginationPageSize??100,this.pageSizeSelector=n.paginationPageSizeSelector??[20,50,100,500,1e3],this.ePanel=document.createElement("div"),this.ePanel.className="ag-pagination-panel",this.enabled||(this.ePanel.style.display="none");const i=document.createElement("div");i.className="ag-pagination-buttons",this.ePanel.appendChild(i),this.ePageSizeContainer=document.createElement("div"),this.ePageSizeContainer.className="ag-pagination-page-size",i.appendChild(this.ePageSizeContainer),this.eFromToContainer=document.createElement("span"),this.eFromToContainer.className="ag-pagination-from-to",i.appendChild(this.eFromToContainer);const o=document.createElement("span");if(o.className="ag-pagination-page-label",o.textContent=`${this.grid.translate("page","Page")}`,i.appendChild(o),this.ePageInput=document.createElement("input"),this.ePageInput.className="ag-pagination-page-input",this.ePageInput.type="number",this.ePageInput.min="1",this.ePageInput.value="1",this.ePageInput.title=this.grid.translate("pageNumber","输入页码"),this.ePageInput.addEventListener("change",()=>{const a=parseInt(this.ePageInput.value,10);isNaN(a)||this.goToPage(a-1)}),i.appendChild(this.ePageInput),this.ePageInfo=document.createElement("span"),this.ePageInfo.className="ag-pagination-info",i.appendChild(this.ePageInfo),this.pageSizeSelector){const a=this.ePageSizeContainer,l=document.createElement("span");l.textContent=`${this.grid.translate("pageSize","Page Size:")}`,a.appendChild(l);const r=document.createElement("select");r.className="ag-pagination-page-size-select";const d=this.pageSizeSelector===!0?[20,50,100,500,1e3]:this.pageSizeSelector;for(const c of d){const p=document.createElement("option");p.value=String(c),p.textContent=String(c),c===this.pageSize&&(p.selected=!0),r.appendChild(p)}r.addEventListener("change",()=>this.setPageSize(parseInt(r.value,10))),a.appendChild(r)}e.getRootElement().appendChild(this.ePanel),this.update()}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e,this.ePanel.style.display=e?"":"none",e||(this.currentPage=0),this.grid.refreshModel("everything"),this.update()}getPageSize(){return this.pageSize}setPageSize(e){const t=this.currentPage*this.pageSize;this.pageSize=Math.max(1,e),this.currentPage=Math.floor(t/this.pageSize),this.grid.refreshModel("everything"),this.update()}getCurrentPage(){return this.currentPage}getTotalPages(){if(!this.enabled)return 1;const e=this.grid.getRowModel(),t=e.getTotalRowCount?e.getTotalRowCount():e.getRowCount();return Math.max(1,Math.ceil(t/this.pageSize))}goToPage(e){const t=this.getTotalPages(),n=Math.max(0,Math.min(t-1,e));if(n===this.currentPage){this.update();return}this.currentPage=n,this.grid.refreshModel("everything"),this.update(),this.grid.getRowRenderer().setVerticalScrollTop(0)}goToNextPage(){this.goToPage(this.currentPage+1)}goToPreviousPage(){this.goToPage(this.currentPage-1)}goToFirstPage(){this.goToPage(0)}goToLastPage(){this.goToPage(this.getTotalPages()-1)}update(){var l,r;if(!this.enabled)return;const e=this.getTotalPages();this.currentPage>e-1&&(this.currentPage=e-1,this.grid.refreshModel("everything"));const t=this.grid.getRowModel(),n=t.getTotalRowCount?t.getTotalRowCount():t.getRowCount(),i=n===0?0:this.currentPage*this.pageSize+1,o=Math.min(n,(this.currentPage+1)*this.pageSize);this.ePageInfo.textContent=`${this.grid.translate("of","/")} ${e}`,this.ePageInput.value=String(this.currentPage+1),this.ePageInput.max=String(e);const a=this.grid.translate("rangeTo","至");this.eFromToContainer.textContent=n===0?`0 ${a} 0 ${this.grid.translate("of","/")} 0`:`${i.toLocaleString()} ${a} ${o.toLocaleString()} ${this.grid.translate("of","/")} ${n.toLocaleString()}`,this.eventService.dispatchEvent("paginationChanged",{api:this.grid.getApi(),currentPage:this.currentPage,totalPages:e,pageSize:this.pageSize,rowCount:n}),(r=(l=this.grid.getOptions()).onPaginationChanged)==null||r.call(l,{api:this.grid.getApi(),currentPage:this.currentPage,totalPages:e,pageSize:this.pageSize})}getPanel(){return this.ePanel}isLastPageFound(){return!0}}class Bo{constructor(e){y(this,"openPopups",new Set);this.grid=e}getParent(){return this.grid.getOptions().popupParent||this.grid.getRootElement()}createPopup(e=220,t=""){const n=document.createElement("div");n.className=`ag-popup ${t}`.trim(),n.style.width=`${e}px`,n.style.display="none";const i={ePopup:n},o=()=>{var d;this.openPopups.has(i)&&(this.openPopups.delete(i),n.remove(),document.removeEventListener("mousedown",l,!0),document.removeEventListener("keydown",r,!0),(d=i.onClose)==null||d.call(i))},a=d=>{i.onClose=d},l=d=>{if(!n.contains(d.target)&&!this.grid.getRootElement().contains(d.target)){o();return}n.contains(d.target)||o()},r=d=>{d.key==="Escape"&&(d.stopPropagation(),o())};return this.getParent().appendChild(n),this.openPopups.add(i),document.addEventListener("mousedown",l,!0),document.addEventListener("keydown",r,!0),{ePopup:n,close:o,onClose:a}}positionAt(e,t,n=0){const i=this.grid.getRootElement().getBoundingClientRect(),o=t.getBoundingClientRect(),a=e.offsetWidth||220;let l=o.left-i.left+n;const r=i.width-a-4;l>r&&(l=r),l<4&&(l=4);const d=o.bottom-i.top+2;e.style.left=`${l}px`,e.style.top=`${d}px`,e.style.display="block"}closeAll(){for(const e of[...this.openPopups])e.ePopup.remove(),this.openPopups.delete(e)}}class Vo{constructor(e,t){y(this,"ranges",[]);y(this,"currentRange",null);y(this,"eOverlay");y(this,"eHandle");y(this,"dragState",null);this.grid=e,this.eventService=t;const n=e.getRowRenderer().getContainer();n.style.position="relative",this.eOverlay=document.createElement("div"),this.eOverlay.className="ag-range-overlay",this.eOverlay.style.display="none",n.appendChild(this.eOverlay),this.eHandle=document.createElement("div"),this.eHandle.className="ag-range-handle",this.eHandle.style.display="none",n.appendChild(this.eHandle),document.addEventListener("mousemove",this.onMouseMove.bind(this)),document.addEventListener("mouseup",this.onMouseUp.bind(this)),t.addEventListener("bodyScroll",()=>this.updateOverlay())}isEnabled(){return!!this.grid.getOptions().enableRangeSelection}getRanges(){return this.ranges}clearRanges(){this.ranges=[],this.currentRange=null,this.updateOverlay(),this.applyHighlight(),this.eventService.dispatchEvent("rangeSelectionChanged",{api:this.grid.getApi(),finished:!0})}onCellMouseDown(e){if(!this.isEnabled())return;const{event:t,column:n,rowIndex:i}=e;if(t.button!==0)return;if(t.shiftKey&&this.ranges.length>0){const a=this.ranges[this.ranges.length-1];this.currentRange={...a,rowEndIndex:i,colEndId:n.colId},this.dragState={startRange:this.currentRange,mode:"create"},this.updateOverlay();return}const o={rowStartIndex:i,rowEndIndex:i,colStartId:n.colId,colEndId:n.colId};this.currentRange=o,this.dragState={startRange:o,mode:"create"},this.updateOverlay()}onHandleMouseDown(e){this.currentRange&&(e.stopPropagation(),this.dragState={startRange:{...this.currentRange},mode:"handle"})}onMouseMove(e){if(!this.dragState||!this.currentRange)return;const t=document.elementFromPoint(e.clientX,e.clientY);if(!t)return;const n=t.closest(".ag-cell");if(!(n!=null&&n.dataset.colid))return;const i=n.closest(".ag-row");if(!(i!=null&&i.dataset.rowid))return;const o=this.grid.getRowModel().getRowNode(i.dataset.rowid);if(!o)return;let a=-1;if(this.grid.getRowModel().forEachNode((r,d)=>{r.id===o.id&&(a=d)}),a<0)return;const l=this.dragState.startRange;this.currentRange={rowStartIndex:Math.min(l.rowStartIndex,a),rowEndIndex:Math.max(l.rowStartIndex,a),colStartId:l.colStartId,colEndId:n.dataset.colid},this.dragState.mode==="handle"&&(this.currentRange.rowEndIndex=Math.max(l.rowStartIndex,a),this.currentRange.colEndId=n.dataset.colid),this.updateOverlay()}onMouseUp(){!this.dragState||!this.currentRange||(this.dragState=null,this.ranges=[this.currentRange],this.applyHighlight(),this.updateOverlay(),this.eventService.dispatchEvent("rangeSelectionChanged",{api:this.grid.getApi(),finished:!0}))}getCenterColumns(){return this.grid.getColumns().center}getRangeBounds(e){const t=this.getCenterColumns(),n=t.findIndex(g=>g.colId===e.colStartId),i=t.findIndex(g=>g.colId===e.colEndId);if(n<0||i<0)return null;const o=Math.min(n,i),a=Math.max(n,i);let l=0,r=0;for(let g=0;g<=a;g++)g<o?l+=t[g].width:r+=t[g].width;const c=this.grid.getRowRenderer().getRowOffsets(),p=Math.min(e.rowStartIndex,e.rowEndIndex),h=Math.max(e.rowStartIndex,e.rowEndIndex),u=c[p]??p*(this.grid.getOptions().rowHeight??42);let f=0;for(let g=p;g<=h;g++){const v=this.grid.getDisplayedRowAtIndex(g);f+=v?this.grid.getRowHeight(v):this.grid.getOptions().rowHeight??42}return{top:u,left:l,width:r,height:f}}updateOverlay(){const e=this.currentRange;if(!e||!this.isEnabled()){this.eOverlay.style.display="none",this.eHandle.style.display="none";return}const t=this.getRangeBounds(e);if(!t){this.eOverlay.style.display="none",this.eHandle.style.display="none";return}this.eOverlay.style.display="block",this.eOverlay.style.top=`${t.top}px`,this.eOverlay.style.left=`${t.left}px`,this.eOverlay.style.width=`${t.width}px`,this.eOverlay.style.height=`${t.height}px`,this.eHandle.style.display="block",this.eHandle.style.top=`${t.top+t.height-4}px`,this.eHandle.style.left=`${t.left+t.width-4}px`,this.eHandle.onmousedown=n=>this.onHandleMouseDown(n)}applyHighlight(){const e=this.ranges,t=this.grid.getRowRenderer().getRowComps(),n=this.getCenterColumns();for(const[i,o]of t){let a=-1;if(this.grid.getRowModel().forEachNode((l,r)=>{l.id===i&&(a=r)}),!(a<0))for(const l of o.getCellElements()){const r=l.dataset.colid,d=n.findIndex(h=>h.colId===r);let c=!1,p=!1;for(const h of e){const u=n.findIndex(k=>k.colId===h.colStartId),f=n.findIndex(k=>k.colId===h.colEndId),g=Math.min(h.rowStartIndex,h.rowEndIndex),v=Math.max(h.rowStartIndex,h.rowEndIndex),m=Math.min(u,f),w=Math.max(u,f);a>=g&&a<=v&&d>=m&&d<=w&&(c=!0,a===h.rowStartIndex&&d===u&&(p=!0))}l.classList.toggle("ag-cell-range-selected",c),l.classList.toggle("ag-cell-range-anchor",p)}}}getRangeCells(e){const t=this.getCenterColumns(),n=t.findIndex(c=>c.colId===e.colStartId),i=t.findIndex(c=>c.colId===e.colEndId),o=Math.min(e.rowStartIndex,e.rowEndIndex),a=Math.max(e.rowStartIndex,e.rowEndIndex),l=Math.min(n,i),r=Math.max(n,i),d=[];for(let c=o;c<=a;c++){const p=this.grid.getDisplayedRowAtIndex(c);if(p)for(let h=l;h<=r;h++)t[h]&&d.push({node:p,column:t[h]})}return d}getCurrentRange(){return this.currentRange}onGridKeyDown(e){if(this.isEnabled()){if((e.ctrlKey||e.metaKey)&&(e.key==="c"||e.key==="C")){this.ranges.length&&(e.preventDefault(),this.grid.getApi().copyToClipboard());return}if((e.ctrlKey||e.metaKey)&&(e.key==="x"||e.key==="X")){this.ranges.length&&(e.preventDefault(),this.grid.getApi().cutToClipboard());return}if((e.ctrlKey||e.metaKey)&&(e.key==="v"||e.key==="V")){this.ranges.length&&(e.preventDefault(),this.grid.getApi().pasteFromClipboard());return}if((e.keyCode===46||e.keyCode===8)&&this.ranges.length){e.preventDefault();for(const t of this.ranges)for(const n of this.getRangeCells(t))this.grid.setCellValue(n.column,n.node,null,"deleteKey");this.grid.refreshCells({flash:!0})}}}}class Go{constructor(e,t){y(this,"dragState",null);y(this,"onMouseMoveBind",e=>this.onMouseMove(e));y(this,"onMouseUpBind",e=>this.onMouseUp(e));this.grid=e,this.eventService=t}isEnabled(){const e=this.grid.getOptions();return!!e.rowDragManaged||!!e.rowDragEnt||this.hasDragHandle()}hasDragHandle(){return this.grid.getAllColumns().some(e=>e.rowDrag)}startDrag(e,t){if(!this.isEnabled()||this.dragState)return;t.preventDefault();const n=document.createElement("div");n.className="ag-row-drag-ghost",n.textContent=this.rowLabel(e),document.body.appendChild(n);const i=document.createElement("div");i.className="ag-row-drop-indicator",i.style.display="none",this.grid.getRowRenderer().getContainer().appendChild(i),this.dragState={rowNode:e,ghost:n,startY:t.clientY,overIndex:null,indicator:i},document.body.classList.add("ag-row-dragging"),document.addEventListener("mousemove",this.onMouseMoveBind),document.addEventListener("mouseup",this.onMouseUpBind)}rowLabel(e){var i;const t=this.grid.getColumns().center[0]??this.grid.getColumns().left[0],n=t!=null&&t.field?(i=e.data)==null?void 0:i[t.field]:"";return String(n??e.id)}onMouseMove(e){const t=this.dragState;if(!t)return;t.ghost.style.left=`${e.clientX+8}px`,t.ghost.style.top=`${e.clientY+8}px`;const n=document.elementFromPoint(e.clientX,e.clientY),i=n==null?void 0:n.closest(".ag-row");if(!(i!=null&&i.dataset.rowid)){t.overIndex=null,t.indicator.style.display="none";return}let o=-1;if(this.grid.getRowModel().forEachNode((a,l)=>{a.id===i.dataset.rowid&&(o=l)}),t.overIndex=o,o>=0){const a=this.grid.getRowRenderer().getRowOffsets(),l=this.grid.getRowHeight(this.grid.getDisplayedRowAtIndex(o)),r=e.clientY>i.getBoundingClientRect().top+l/2,d=(a[o]??0)+(r?l:0);t.indicator.style.display="block",t.indicator.style.top=`${d-1}px`}else t.indicator.style.display="none"}onMouseUp(e){const t=this.dragState;if(document.removeEventListener("mousemove",this.onMouseMoveBind),document.removeEventListener("mouseup",this.onMouseUpBind),!t)return;this.dragState=null,document.body.classList.remove("ag-row-dragging"),t.ghost.remove(),t.indicator.remove();const n=this.grid.getApi(),i=this.grid.getOptions(),o=t.overIndex,a=this.indexOf(t.rowNode);this.eventService.dispatchEvent("rowDragEnd",{api:n,node:t.rowNode,overIndex:o,overNode:o!==null?this.grid.getDisplayedRowAtIndex(o):void 0,y:e.clientY}),i.rowDragManaged&&a>=0&&o!==null&&o!==a&&this.moveRow(a,o,e.clientY)}indexOf(e){let t=-1;return this.grid.getRowModel().forEachNode((n,i)=>{n.id===e.id&&(t=i)}),t}moveRow(e,t,n){const i=(this.grid.getOptions().rowData||[]).slice();if(e<0||e>=i.length)return;const[o]=i.splice(e,1),a=t>e?t-1:t;this.grid.getDisplayedRowAtIndex(t),i.splice(Math.max(0,Math.min(i.length,a+1)),0,o),this.grid.getApi().setRowData(i),this.eventService.dispatchEvent("rowDragMove",{api:this.grid.getApi(),node:{data:o}})}}class qo{constructor(e){y(this,"ePanel");y(this,"eChips");this.grid=e,this.ePanel=document.createElement("div"),this.ePanel.className="ag-row-group-panel";const t=document.createElement("span");t.className="ag-row-group-panel-label",t.textContent=this.grid.t("rowGroups"),this.ePanel.appendChild(t),this.eChips=document.createElement("div"),this.eChips.className="ag-row-group-panel-chips",this.ePanel.appendChild(this.eChips),this.eChips.addEventListener("dragover",o=>{o.preventDefault(),this.eChips.classList.add("ag-drag-over")}),this.eChips.addEventListener("dragleave",()=>this.eChips.classList.remove("ag-drag-over")),this.eChips.addEventListener("drop",o=>{var l;o.preventDefault(),this.eChips.classList.remove("ag-drag-over");const a=(l=o.dataTransfer)==null?void 0:l.getData("text/plain");a&&this.grid.getColumnModel().addRowGroupColumn(a)});const n=e.getOptions();(n.rowGroupPanelShow==="always"||n.rowGroupPanelShow==="onlyWhenGrouping")&&e.getMainElement().insertBefore(this.ePanel,e.getHeaderElement()),this.refresh(),e.getEventService().addEventListener("columnRowGroupChanged",()=>this.refresh()),e.getEventService().addEventListener("modelUpdated",()=>this.refreshVisibility())}refresh(){this.eChips.innerHTML="";const e=this.grid.getColumnModel().getRowGroupColumns();for(const t of e){const n=document.createElement("div");n.className="ag-row-group-chip",n.draggable=!0,n.addEventListener("dragstart",a=>{var l;(l=a.dataTransfer)==null||l.setData("text/plain",t.colId)});const i=document.createElement("span");i.textContent=t.headerName,n.appendChild(i);const o=document.createElement("button");o.className="ag-row-group-chip-remove",o.textContent="×",o.title=this.grid.t("remove"),o.addEventListener("click",()=>this.grid.getColumnModel().removeRowGroupColumn(t)),n.appendChild(o),this.eChips.appendChild(n)}if(e.length===0){const t=document.createElement("span");t.className="ag-column-group-hint",t.textContent=this.grid.t("dragColumnsHere"),this.eChips.appendChild(t)}this.refreshVisibility()}refreshVisibility(){const e=this.grid.getOptions().rowGroupPanelShow;if(e==="always")this.ePanel.style.display="";else if(e==="onlyWhenGrouping"){const t=this.grid.getColumnModel().isRowGroupActive();this.ePanel.style.display=t?"":"none"}}}class zo{constructor(e,t,n){y(this,"selectedNodes",new Set);y(this,"lastSelectedNode",null);this.eventService=e,this.getOptions=t,this.isNodeSelectable=n}isEnabled(){return!!this.getOptions().rowSelection}getSelectedNodes(){return[...this.selectedNodes]}getSelectedRows(){return[...this.selectedNodes].map(e=>e.data)}getSelectedCount(){return this.selectedNodes.size}isNodeSelected(e){return this.selectedNodes.has(e)}selectNode(e,t=!1){this.isEnabled()&&this.isNodeSelectable(e)&&(t&&this.getOptions().rowSelection==="multiple"?this.deselectAll():t&&this.deselectAll(),!this.selectedNodes.has(e)&&(this.selectedNodes.add(e),e.selected=!0,this.lastSelectedNode=e,this.getOptions().groupSelectsChildren&&e.children&&this.selectChildrenRecursively(e,!0),this.dispatchChanged()))}deselectNode(e){this.selectedNodes.has(e)&&(this.selectedNodes.delete(e),e.selected=!1,this.getOptions().groupSelectsChildren&&e.children&&this.selectChildrenRecursively(e,!1),this.dispatchChanged())}selectChildrenRecursively(e,t){if(e.children)for(const n of e.children)n.footer||n.detailNode||(t?this.isNodeSelectable(n)&&(this.selectedNodes.add(n),n.selected=!0):(this.selectedNodes.delete(n),n.selected=!1),this.selectChildrenRecursively(n,t))}selectAll(){!this.isEnabled()||this.getOptions().rowSelection!=="multiple"||this.selectAllFiltered()}selectAllFiltered(){if(!this.isEnabled())return;const e=this.getOptions().__rowModel;e!=null&&e.forEachNode&&e.forEachNode(t=>{this.isNodeSelectable(t)&&!t.footer&&(this.selectedNodes.add(t),t.selected=!0)}),this.dispatchChanged()}deselectAll(){for(const e of this.selectedNodes)e.selected=!1;this.selectedNodes.clear(),this.lastSelectedNode=null,this.dispatchChanged()}toggleNode(e){this.selectedNodes.has(e)?this.deselectNode(e):this.selectNode(e,!1)}handleRowClick(e,t){if(!this.isEnabled()||this.getOptions().suppressRowClickSelection)return!1;const n=this.getOptions().rowSelection==="multiple",i=t.ctrlKey||t.metaKey,o=t.shiftKey;return n?o&&this.lastSelectedNode?(this.selectRange(this.lastSelectedNode,e),!0):i?(this.toggleNode(e),!0):(this.getOptions().rowMultiSelectWithClick?this.selectNode(e,!1):this.selectNode(e,!0),!0):(this.selectNode(e,!0),!0)}selectRange(e,t){const n=this.getOptions().__rowModel;if(!(n!=null&&n.forEachNode))return;let i=-1,o=-1,a=0;if(n.forEachNode(d=>{d===e&&(i=a),d===t&&(o=a),a++}),i<0||o<0)return;const l=Math.min(i,o),r=Math.max(i,o);a=0,n.forEachNode(d=>{a>=l&&a<=r&&this.isNodeSelectable(d)&&!d.footer&&(this.selectedNodes.add(d),d.selected=!0),a++}),this.dispatchChanged()}syncWithModel(){const e=this.getOptions().__rowModel;if(!(e!=null&&e.forEachNode))return;const t=new Set;e.forEachNode(i=>t.add(i));let n=!1;for(const i of this.selectedNodes)t.has(i)?i.selected=!0:n=!0;if(n){for(const i of[...this.selectedNodes])t.has(i)||this.selectedNodes.delete(i);this.dispatchChanged()}}getLastSelectedNode(){return this.lastSelectedNode}setSelectAllCheckboxState(e){e?this.selectAllFiltered():this.deselectAll()}getSelectAllState(){const e=this.getOptions().__rowModel;let t=0,n=0;return e!=null&&e.forEachNode&&e.forEachNode(i=>{i.footer||!this.isNodeSelectable(i)||(t++,i.selected&&n++)}),{checked:t>0&&n===t,indeterminate:n>0&&n<t}}dispatchChanged(){this.eventService.dispatchEvent("selectionChanged",{api:this.getOptions().__api})}}class _o{constructor(e){y(this,"eBar");y(this,"eButtons");y(this,"ePanel");y(this,"panels",[]);y(this,"activePanelId",null);y(this,"visible",!1);y(this,"position");var n,i;this.grid=e;const t=e.getOptions();if(this.position=typeof t.sideBar=="object"&&((n=t.sideBar)!=null&&n.position)?t.sideBar.position:"right",this.eBar=document.createElement("div"),this.eBar.className=`ag-side-bar ag-side-bar-${this.position}`,this.eButtons=document.createElement("div"),this.eButtons.className="ag-side-buttons",this.ePanel=document.createElement("div"),this.ePanel.className="ag-side-bar-panel",this.eBar.appendChild(this.eButtons),this.eBar.appendChild(this.ePanel),t.sideBar){const o=typeof t.sideBar=="object"?t.sideBar:null;o!=null&&o.toolPanels?this.panels=o.toolPanels.map(r=>typeof r=="string"?{id:r,label:this.defaultLabel(r)}:{id:r.id,label:r.labelDefault}):(this.panels=[{id:"columns",label:this.defaultLabel("columns")},{id:"filters",label:this.defaultLabel("filters")}],t.enableCharts&&this.panels.push({id:"charts",label:this.defaultLabel("charts")}));const a=(o==null?void 0:o.hiddenByDefault)===!0;this.visible=!a,this.eBar.style.display=this.visible?"":"none";const l=(o==null?void 0:o.defaultToolPanel)||((i=this.panels[0])==null?void 0:i.id)||"columns";this.buildButtons(),this.openPanel(l)}else this.eBar.style.display="none"}defaultLabel(e){switch(e){case"columns":return this.grid.t("columns");case"filters":return this.grid.t("filters");case"charts":return this.grid.t("charts");default:return e}}buildButtons(){this.eButtons.innerHTML="";for(const e of this.panels){const t=document.createElement("button");t.className="ag-side-button",t.textContent=e.label,t.title=e.label,t.dataset.panelId=e.id,e.id===this.activePanelId&&t.classList.add("ag-selected"),t.addEventListener("click",()=>{this.activePanelId===e.id&&this.visible?this.setVisible(!1):(this.visible=!0,this.eBar.style.display="",this.openPanel(e.id)),this.grid.getEventService().dispatchEvent("toolPanelVisibleChanged",{source:"sideBarButtonClicked",api:this.grid.getApi()})}),this.eButtons.appendChild(t)}}getElement(){return this.eBar}setPosition(e){this.position=e,this.eBar.classList.remove("ag-side-bar-left","ag-side-bar-right"),this.eBar.classList.add(`ag-side-bar-${e}`)}setVisible(e){this.visible=e,this.eBar.style.display=e?"":"none",this.grid.onGridSizeChanged(),this.grid.getEventService().dispatchEvent("toolPanelVisibleChanged",{source:"api",api:this.grid.getApi()})}isVisible(){return this.visible}openPanel(e){this.activePanelId=e;for(const t of this.eButtons.querySelectorAll(".ag-side-button"))t.classList.toggle("ag-selected",t.dataset.panelId===e);switch(this.ePanel.innerHTML="",e){case"columns":this.ePanel.appendChild(this.buildColumnsPanel());break;case"filters":this.ePanel.appendChild(this.buildFiltersPanel());break;case"charts":this.ePanel.appendChild(this.grid.getChartService().buildChartPanel());break;default:{const t=document.createElement("div");t.className="ag-side-bar-empty",t.textContent=e,this.ePanel.appendChild(t)}}}getActivePanel(){return this.activePanelId}refresh(){this.activePanelId&&this.openPanel(this.activePanelId)}buildColumnsPanel(){const e=document.createElement("div");e.className="ag-column-panel";const t=document.createElement("input");t.type="text",t.className="ag-column-panel-search",t.placeholder=this.grid.t("searchColumns"),e.appendChild(t);const n=document.createElement("div");n.className="ag-column-panel-columns",e.appendChild(n);const i=()=>{const d=t.value.toLowerCase();n.innerHTML="";const c=this.grid.getColumnModel().getColumns(),p=c.filter(h=>h.pinned!=="left"&&h.pinned!=="right").concat(c.filter(h=>h.pinned==="left"||h.pinned==="right"));for(const h of p)d&&!h.headerName.toLowerCase().includes(d)&&!h.colId.toLowerCase().includes(d)||n.appendChild(this.buildColumnItem(h));if(!n.children.length){const h=document.createElement("div");h.className="ag-side-bar-empty",h.textContent=this.grid.t("noMatchingColumns"),n.appendChild(h)}};t.addEventListener("input",i),i();const o=document.createElement("div");o.className="ag-column-panel-groups";const a=document.createElement("div");a.className="ag-column-panel-section-title",a.textContent=this.grid.t("rowGroups"),o.appendChild(a);const l=document.createElement("div");l.className="ag-column-group-list",o.appendChild(l);const r=()=>{l.innerHTML="";const d=this.grid.getColumnModel().getRowGroupColumns();if(d.length===0){const c=document.createElement("div");c.className="ag-column-group-hint",c.textContent=this.grid.t("dragColumnsHere"),l.appendChild(c)}for(const c of d){const p=document.createElement("div");p.className="ag-column-group-item",p.draggable=!0,p.addEventListener("dragstart",f=>{var g;(g=f.dataTransfer)==null||g.setData("text/plain",c.colId)}),p.addEventListener("dragover",f=>f.preventDefault()),p.addEventListener("drop",f=>{var v;f.preventDefault();const g=(v=f.dataTransfer)==null?void 0:v.getData("text/plain");g&&this.grid.getColumnModel().setRowGroupColumns([...d.map(m=>m.colId),g])});const h=document.createElement("span");h.textContent=c.headerName,p.appendChild(h);const u=document.createElement("button");u.className="ag-column-group-remove",u.textContent="×",u.title=this.grid.t("remove"),u.addEventListener("click",()=>this.grid.getColumnModel().removeRowGroupColumn(c)),p.appendChild(u),l.appendChild(p)}};return r(),l.addEventListener("dragover",d=>d.preventDefault()),l.addEventListener("drop",d=>{var p;d.preventDefault();const c=(p=d.dataTransfer)==null?void 0:p.getData("text/plain");c&&this.grid.getColumnModel().addRowGroupColumn(c)}),e.appendChild(o),this.grid.getEventService().addEventListener("columnRowGroupChanged",()=>{this.activePanelId==="columns"&&r()}),this.grid.getEventService().addEventListener("displayedColumnsChanged",()=>{this.activePanelId==="columns"&&i()}),e}buildColumnItem(e){const t=document.createElement("div");t.className="ag-column-select-column",t.draggable=!0,t.dataset.colid=e.colId;const n=document.createElement("input");n.type="checkbox",n.className="ag-column-select-checkbox",n.checked=e.visible,n.addEventListener("change",()=>{this.grid.getColumnApi().setColumnVisible(e,n.checked)}),t.appendChild(n);const i=document.createElement("span");i.className="ag-column-select-label",i.textContent=e.headerName||e.colId,t.appendChild(i);const o=document.createElement("span");if(o.className="ag-column-select-actions",e.enableRowGroup&&e.field){const l=document.createElement("button");l.className="ag-column-select-action",l.title=this.grid.t("groupByThisColumn"),l.textContent="≡",l.addEventListener("click",()=>this.grid.getColumnModel().addRowGroupColumn(e)),o.appendChild(l)}const a=document.createElement("button");return a.className="ag-column-select-action",a.title=this.grid.t("pinColumnTitle"),a.textContent="📌",a.addEventListener("click",()=>{this.grid.getColumnApi().setColumnPinned(e,e.pinned?null:"left")}),o.appendChild(a),t.appendChild(o),t}buildFiltersPanel(){const e=document.createElement("div");if(e.className="ag-filters-panel",this.grid.getOptions().enableAdvancedFilter){const o=document.createElement("button");o.className="ag-button ag-button-small",o.textContent=`${this.grid.t("advancedFilter")}…`,o.addEventListener("click",()=>this.grid.getFilterGui().openAdvancedFilter(o)),e.appendChild(o);const a=this.grid.getFilterService().getAdvancedFilterModel();if(a){const l=document.createElement("span");l.className="ag-filters-tool-panel-item-badge",l.textContent=`${a.conditions.length} ${this.grid.t("conditionsUnit")}`,e.appendChild(l)}}const t=document.createElement("input");t.type="text",t.className="ag-column-panel-search",t.placeholder=this.grid.t("searchColumns"),e.appendChild(t);const n=document.createElement("div");n.className="ag-filters-panel-list",e.appendChild(n);const i=()=>{const o=t.value.toLowerCase();n.innerHTML="";const a=this.grid.getColumns().center.filter(l=>l.filter);for(const l of a)o&&!l.headerName.toLowerCase().includes(o)||n.appendChild(this.buildFilterItem(l));if(!n.children.length){const l=document.createElement("div");l.className="ag-side-bar-empty",l.textContent=this.grid.t("noMatchingColumns"),n.appendChild(l)}};return t.addEventListener("input",i),i(),this.grid.getEventService().addEventListener("filterChanged",()=>{this.activePanelId==="filters"&&i()}),e}buildFilterItem(e){const t=this.grid.getFilterService(),n=document.createElement("div");n.className="ag-filters-tool-panel-item";const i=document.createElement("div");i.className="ag-filters-tool-panel-item-header";const o=document.createElement("span");o.className="ag-filters-tool-panel-item-label",o.textContent=e.headerName||e.colId,i.appendChild(o);const a=t.isFilterActive(e);if(a){const l=document.createElement("span");l.className="ag-filters-tool-panel-item-badge",l.innerHTML=Yn,i.appendChild(l)}if(n.appendChild(i),e.filter==="set"){const l=document.createElement("button");l.className="ag-button ag-button-small",l.textContent=a?"Edit filter":"Add filter",l.addEventListener("click",()=>this.grid.getFilterGui().openFilter(e,l)),n.appendChild(l)}else if(e.filter==="date"){const l=document.createElement("input");l.type="date",l.className="ag-filter-input";const r=t.getFilterInstance(e.colId);l.value=(r==null?void 0:r.dateFrom)??"",l.addEventListener("change",()=>{t.setColumnFilterModel(e,l.value?{filterType:"date",dateFrom:l.value,dateTo:l.value}:null)}),n.appendChild(l)}else{const l=document.createElement("input");l.type=e.filter==="number"?"number":"text",l.className="ag-filter-input",l.placeholder=this.grid.t("filterOoo");const r=t.getFilterInstance(e.colId);l.value=(r==null?void 0:r.filter)??"",l.addEventListener("input",()=>{t.handleFloatingFilterChange(e,l.value)}),n.appendChild(l)}if(a){const l=document.createElement("button");l.className="ag-button ag-button-small",l.textContent=this.grid.t("clear"),l.addEventListener("click",()=>t.setColumnFilterModel(e,null)),n.appendChild(l)}return n}}class Wo{constructor(e){this.grid=e}getSortingOrder(){return this.grid.getOptions().sortingOrder??["asc","desc",null]}onSortRequested(e,t,n){const i=this.grid.getOptions().suppressMultiSort,o=n&&!i&&this.grid.getColumns().center.length+this.grid.getColumns().left.length>1,a=this.getSortingOrder(),l=e.sort;let r=a.indexOf(l)+1;r>=a.length&&(r=0);const d=a[r];if(!o)for(const c of this.grid.getAllColumns())c.colId!==e.colId&&(c.sort=null,c.sortIndex=null);e.sort=d,d===null?e.sortIndex=null:this.renumberSortIndices(),this.onSortChanged("uiColumnSorted")}renumberSortIndices(){this.grid.getAllColumns().filter(t=>t.sort).sort((t,n)=>(t.sortIndex??99)-(n.sortIndex??99)).forEach((t,n)=>t.sortIndex=n)}getSortModel(){return this.grid.getAllColumns().filter(e=>e.sort).sort((e,t)=>(e.sortIndex??0)-(t.sortIndex??0)).map(e=>({colId:e.colId,sort:e.sort}))}setSortModel(e){for(const t of this.grid.getAllColumns())t.sort=null,t.sortIndex=null;e.forEach((t,n)=>{const i=this.grid.getColumn(t.colId);i&&(i.sort=t.sort,i.sortIndex=n)}),this.onSortChanged("api")}onSortChanged(e){var n,i;this.grid.getHeaderView().updateIndicators(),this.grid.refreshModel("sort");const t=this.grid.getApi();this.grid.getEventService().dispatchEvent("sortChanged",{api:t,source:e}),(i=(n=this.grid.getOptions()).onSortChanged)==null||i.call(n,{api:t,source:e})}}class Uo{constructor(e,t){y(this,"eBar");y(this,"panels",[]);this.grid=e,this.eBar=document.createElement("div"),this.eBar.className="ag-status-bar";const i=e.getOptions().statusBar;(!i||!i.statusPanels||i.statusPanels.length===0)&&(this.eBar.style.display="none");const o=((i==null?void 0:i.statusPanels)||[]).map(a=>typeof a=="string"?{key:a,label:a}:{key:a.key||a.statusPanel,label:a.key||a.statusPanel,align:a.align});for(const a of o){const l=document.createElement("div");l.className=`ag-status-panel ag-status-panel-${a.align||"left"}`,this.eBar.appendChild(l);const r={def:a,ePanel:l,render:()=>this.renderPanel(a.key,l)};this.panels.push(r)}}getElement(){return this.eBar}isVisible(){return this.eBar.style.display!=="none"}setVisible(e){this.eBar.style.display=e?"":"none"}update(){for(const e of this.panels)e.render()}renderPanel(e,t){const n=this.grid.getApi(),i=this.grid.getRowModel().getRowCount(),o=this.grid.getRowModel(),a=typeof o.getTotalRowCount=="function"&&o.getType()!=="clientSide"?o.getTotalRowCount():(this.grid.getOptions().rowData||[]).length,l=n.getSelectedNodes().length,r=[],d=this.grid.getColumnModel().getValueColumns().filter(c=>c.aggFunc);switch(this.grid.getRowModel().forEachNode(c=>{!c.footer&&c.group}),e){case"agTotalRowCountComponent":r.push(`${this.grid.translate("totalRows","Total Rows")} : ${Ue(a)}`);break;case"agTotalAndFilteredRowCountComponent":r.push(`${this.grid.translate("rows","Rows")} : ${Ue(i)}`);break;case"agFilteredRowCountComponent":r.push(`${this.grid.translate("filtered","Filtered")} : ${Ue(i)}`);break;case"agSelectedRowCountComponent":r.push(`${this.grid.translate("selected","Selected")} : ${Ue(l)}`);break;case"agAggregationComponent":{if(d.length===0)break;const c=n.getSelectedNodes().filter(h=>!h.group&&!h.footer),p=[];for(const h of d){const f=c.map(w=>Ce(h,w,n)).filter(w=>typeof w=="number"&&!isNaN(w)),g=f.reduce((w,k)=>w+k,0),v=w=>w===null?"":Ue(w,h.decimals),m=[[this.grid.translate("average","Average"),f.length?g/f.length:null],[this.grid.translate("count","Count"),f.length],[this.grid.translate("min","Min"),f.length?Math.min(...f):null],[this.grid.translate("max","Max"),f.length?Math.max(...f):null],[this.grid.translate("sum","Sum"),f.length?g:null]];for(const[w,k]of m)p.push(`${w}${h.headerName?` (${h.headerName})`:""} : ${v(k)}`)}p.length&&r.push(p.join(" "));break}default:r.push(e);break}t.textContent=r.join(" "),t.style.display=r.length?"":"none"}}class jo{constructor(e,t){y(this,"undoStack",[]);y(this,"redoStack",[]);y(this,"limit",50);y(this,"batchDepth",0);y(this,"batchBuffer",[]);y(this,"batchCounter",0);y(this,"currentBatchId",0);this.grid=e,this.eventService=t;const n=e.getOptions();n.undoRedoCellEditing&&(this.limit=typeof n.undoRedoCellEditing=="number"?n.undoRedoCellEditing:50)}isEnabled(){return!!this.grid.getOptions().undoRedoCellEditing}pushAction(e){if(this.isEnabled()){if(this.batchDepth>0){this.batchBuffer.push(e);return}this.undoStack.push({...e,batchId:this.currentBatchId}),this.undoStack.length>this.limit&&this.undoStack.shift(),this.redoStack=[]}}canUndo(){return this.isEnabled()&&this.undoStack.length>0}canRedo(){return this.isEnabled()&&this.redoStack.length>0}getUndoStackSize(){return this.undoStack.length}getRedoStackSize(){return this.redoStack.length}undo(){if(!this.canUndo())return 0;const e=[this.undoStack.pop()];for(;this.undoStack.length>0&&this.undoStack[this.undoStack.length-1].rowNodeId===e[0].rowNodeId&&this.undoStack[this.undoStack.length-1].colId===e[0].colId;)e.push(this.undoStack.pop());if(e[0].batchId!==0)for(;this.undoStack.length>0&&this.undoStack[this.undoStack.length-1].batchId===e[0].batchId;)e.push(this.undoStack.pop());let t=0;for(const n of e)this.applyValue(n,n.oldValue),this.redoStack.push(n),t++;return this.eventService.dispatchEvent("undoEnded",{api:this.grid.getApi(),numberOfActions:t}),t}redo(){if(!this.canRedo())return 0;let e=0;for(;this.redoStack.length>0;){const t=this.redoStack.pop();if(this.applyValue(t,t.newValue),this.undoStack.push(t),e++,this.redoStack.length===0||this.redoStack[this.redoStack.length-1].colId!==t.colId)break}return this.eventService.dispatchEvent("redoEnded",{api:this.grid.getApi(),numberOfActions:e}),e}applyValue(e,t){const n=this.grid.getRowNode(e.rowNodeId);if(!n)return;const i=this.grid.getColumn(e.colId);i&&(this.grid.setCellValue(i,n,t,"undoRedo"),this.grid.refreshCells({rowNodes:[n],columns:[i],flash:!0}))}startBatchEdit(){this.batchDepth++,this.batchDepth===1&&(this.currentBatchId=++this.batchCounter)}endBatchEdit(e=!1){if(this.batchDepth=Math.max(0,this.batchDepth-1),this.batchDepth>0)return;if(e){this.batchBuffer=[];return}const t=this.currentBatchId;for(const n of this.batchBuffer)this.undoStack.push({...n,batchId:t}),this.undoStack.length>this.limit&&this.undoStack.shift();this.redoStack=[],this.batchBuffer=[],this.eventService.dispatchEvent("batchEditEnded",{api:this.grid.getApi()})}isBatchEditing(){return this.batchDepth>0}clear(){this.undoStack=[],this.redoStack=[],this.batchBuffer=[]}}class Ko{constructor(e,t){y(this,"ctx");y(this,"eHeader");y(this,"ePinnedLeftHeader");y(this,"ePinnedRightHeader");y(this,"eHeaderViewport");y(this,"eHeaderContainer");y(this,"eHeaderRow");y(this,"eFloatingFiltersRow",null);y(this,"eGroupRows");y(this,"headerCells",new Map);y(this,"customHeaderComponents",new Map);y(this,"resizeState",null);y(this,"dragState",null);y(this,"lastWidths",new Map);this.ctx=t,this.eHeader=e,e.classList.add("ag-header"),e.style.height=`${t.headerHeight}px`,this.ePinnedLeftHeader=document.createElement("div"),this.ePinnedLeftHeader.className="ag-pinned-left-header",e.appendChild(this.ePinnedLeftHeader),this.eHeaderViewport=document.createElement("div"),this.eHeaderViewport.className="ag-header-viewport",e.appendChild(this.eHeaderViewport),this.eHeaderContainer=document.createElement("div"),this.eHeaderContainer.className="ag-header-container",this.eHeaderViewport.appendChild(this.eHeaderContainer),this.eGroupRows=document.createElement("div"),this.eGroupRows.className="ag-group-header-rows",this.eHeaderContainer.appendChild(this.eGroupRows),this.eHeaderRow=document.createElement("div"),this.eHeaderRow.className="ag-header-row",this.eHeaderContainer.appendChild(this.eHeaderRow),this.ePinnedRightHeader=document.createElement("div"),this.ePinnedRightHeader.className="ag-pinned-right-header",e.appendChild(this.ePinnedRightHeader),this.refresh()}refresh(){this.headerCells.clear(),this.renderGroupRows();const{left:e,center:t,right:n}=this.ctx.getColumns();this.renderSection(this.ePinnedLeftHeader,e,"left"),this.renderSection(this.eHeaderRow,t,"center"),this.renderSection(this.ePinnedRightHeader,n,"right");const i=[...e,...t,...n].some(o=>o.floatingFilter);i&&!this.eFloatingFiltersRow?(this.eFloatingFiltersRow=document.createElement("div"),this.eFloatingFiltersRow.className="ag-header-row ag-floating-filters",this.eHeaderContainer.appendChild(this.eFloatingFiltersRow)):!i&&this.eFloatingFiltersRow&&(this.eFloatingFiltersRow.remove(),this.eFloatingFiltersRow=null),this.eFloatingFiltersRow&&(this.eFloatingFiltersRow.innerHTML="",this.renderSection(this.eFloatingFiltersRow,t,"center"))}renderGroupRows(){var l;const e=this.ctx.getColumnModel(),t=((l=e==null?void 0:e.getColumnGroups)==null?void 0:l.call(e))||[];this.eGroupRows.innerHTML="";const n=t.reduce((r,d)=>Math.max(r,d.depth),0),i=this.ctx.options.groupHeaderHeight??30;let o=0;for(let r=1;r<=n;r++){const d=document.createElement("div");d.className="ag-header-row ag-group-header-row",d.style.height=`${i}px`;const c=this.ctx.getColumns().center;let p=0,h,u=0,f=0;const g=(m,w)=>{let k=m.groupId;for(;k;){const C=t.find(b=>b.id===k);if(!C)return null;if(C.depth===w)return C.id;k=C.parentId}return null},v=()=>{if(h==null)return;const m=t.find(b=>b.id===h);if(!m)return;const w=document.createElement("div");w.className="ag-header-group-cell",w.style.left=`${u}px`,w.style.width=`${f}px`,w.style.height=`${i}px`;const k=e.isGroupOpen(m.id),C=document.createElement("div");if(C.className="ag-header-group-cell-label",C.textContent=m.headerName,w.appendChild(C),!k){const b=document.createElement("span");b.className="ag-header-group-expand",b.textContent="▸",b.title=this.ctx.t("expandGroup"),w.appendChild(b)}w.addEventListener("click",()=>{e.setGroupOpen(m.id,!k)}),d.appendChild(w)};c.forEach(m=>{const w=g(m,r);w!==h&&(v(),h=w,u=p,f=0),f+=m.width,p+=m.width}),v(),d.style.width=`${p}px`,this.eGroupRows.appendChild(d),o+=i}this.eGroupRows.style.display=n>0?"":"none";const a=this.ctx.headerHeight;this.eHeader.style.height=`${o+a}px`}renderSection(e,t,n){e.innerHTML="";let i=0;for(const o of t){const a=this.createHeaderCell(o);if(a.style.left=`${i}px`,a.style.width=`${o.width}px`,a.style.height=`${this.ctx.headerHeight}px`,i+=o.width,e.appendChild(a),this.headerCells.set(o.colId,a),o.eHeaderCell=a,this.eFloatingFiltersRow&&e===this.eHeaderRow&&o.floatingFilter){const l=this.createFloatingFilter(o);l.style.left=`${i-o.width}px`,l.style.width=`${o.width}px`,this.eFloatingFiltersRow.appendChild(l)}}e===this.eHeaderRow?this.eHeaderContainer.style.width=`${i}px`:(e===this.ePinnedLeftHeader||e===this.ePinnedRightHeader)&&(e.style.width=`${i}px`)}createHeaderCell(e){var a,l;const t=document.createElement("div");if(t.className="ag-header-cell",t.dataset.colid=e.colId,t.setAttribute("role","columnheader"),t.setAttribute("aria-colindex",String(this.headerColumnIndex(e))),e.sort==="asc"?t.setAttribute("aria-sort","ascending"):e.sort==="desc"?t.setAttribute("aria-sort","descending"):t.setAttribute("aria-sort","none"),t.setAttribute("aria-label",e.headerName||e.colId),e.headerClass){const r=Array.isArray(e.headerClass)?e.headerClass.join(" "):e.headerClass;t.classList.add(...String(r).split(" ").filter(Boolean))}const n=e.colDef.headerComponent;if(typeof n=="function"){const r=n({column:e,colDef:e.colDef,api:((l=(a=this.ctx).getApi)==null?void 0:l.call(a))??null,displayName:e.headerName}),d=r&&typeof r.getGui=="function"?r.getGui():r;if(d instanceof HTMLElement)return d.classList.add("ag-header-component"),t.appendChild(d),typeof(r==null?void 0:r.refresh)=="function"&&this.customHeaderComponents.set(e.colId,r),t}const i=document.createElement("div");if(i.className="ag-header-cell-label",e.headerTooltip&&(i.title=e.headerTooltip),e.headerCheckboxSelection){const r=document.createElement("input");r.type="checkbox",r.className="ag-native-checkbox ag-header-select-all",r.addEventListener("change",()=>this.ctx.onHeaderCheckboxChanged(e,r.checked)),r.addEventListener("click",d=>d.stopPropagation()),i.appendChild(r)}const o=document.createElement("span");if(o.className="ag-header-cell-text",o.textContent=e.headerName,i.appendChild(o),t.appendChild(i),e.sortable){const r=document.createElement("span");r.className="ag-header-icon ag-sort-indicator",this.updateSortIndicator(r,e.sort,e.sortIndex),t.appendChild(r)}if(e.filter){const r=document.createElement("span");r.className="ag-header-icon ag-filter-icon";const d=this.ctx.isFilterActive(e);r.classList.toggle("ag-filter-active",d),r.innerHTML=uo,r.title=this.ctx.t("openFilterTitle"),r.addEventListener("click",c=>{c.stopPropagation(),this.ctx.onFilterOpened(e,r)}),t.appendChild(r)}if(!this.ctx.isColumnMenuSuppressed(e)&&!e.suppressMenu){const r=document.createElement("span");r.className="ag-header-icon ag-menu-icon",r.innerHTML=co,r.title=this.ctx.t("openMenuTitle"),r.addEventListener("click",d=>{d.stopPropagation(),this.ctx.onColumnMenuClicked(e,r)}),t.appendChild(r)}if(t.addEventListener("click",r=>{this.ctx.eventService.dispatchEvent("columnHeaderClicked",{column:e,api:null}),e.sortable&&this.ctx.onSortRequested(e,r,r.shiftKey||r.ctrlKey||r.metaKey)}),t.addEventListener("contextmenu",r=>{r.preventDefault(),this.ctx.eventService.dispatchEvent("columnHeaderContextMenu",{column:e,event:r}),!this.ctx.isColumnMenuSuppressed(e)&&!e.suppressMenu&&this.ctx.onColumnMenuClicked(e,t)}),t.addEventListener("dblclick",r=>{const d=t.getBoundingClientRect();r.clientX>d.right-8&&e.resizable&&this.ctx.eventService.dispatchEvent("columnResized",{column:e,source:"autoSize"})}),e.resizable){const r=document.createElement("div");r.className="ag-header-cell-resize",r.addEventListener("mousedown",d=>{d.stopPropagation(),d.preventDefault(),this.resizeState={column:e,startX:d.clientX,startWidth:e.width};const c=h=>{if(!this.resizeState)return;const u=h.clientX-this.resizeState.startX;let f=this.resizeState.startWidth+u;f=Math.max(e.minWidth,Math.min(e.maxWidth,f)),this.ctx.onColumnResized(e,Math.round(f),!1)},p=()=>{this.resizeState&&this.ctx.onColumnResized(this.resizeState.column,this.resizeState.column.width,!0),this.resizeState=null,document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",p),document.body.classList.remove("ag-resizing")};document.body.classList.add("ag-resizing"),document.addEventListener("mousemove",c),document.addEventListener("mouseup",p)}),t.appendChild(r)}return e.suppressMovable||(t.draggable=!0,t.addEventListener("dragstart",r=>{if(!r.dataTransfer)return;r.dataTransfer.setData("text/plain",e.colId),r.dataTransfer.effectAllowed="move";const d=t.cloneNode(!0);d.classList.add("ag-header-cell-drag-ghost"),d.style.position="absolute",d.style.top="-1000px",d.style.width=`${e.width}px`,d.style.height=`${this.ctx.headerHeight}px`,document.body.appendChild(d),r.dataTransfer.setDragImage(d,20,20),this.dragState={colId:e.colId,ghost:d,startX:r.clientX,startY:r.clientY},setTimeout(()=>d.remove(),0)}),t.addEventListener("dragend",()=>{var r;(r=this.dragState)!=null&&r.ghost.parentNode&&this.dragState.ghost.remove(),this.dragState=null}),t.addEventListener("dragover",r=>{r.preventDefault()}),t.addEventListener("drop",r=>{var c;r.preventDefault();const d=(c=r.dataTransfer)==null?void 0:c.getData("text/plain");d&&d!==e.colId&&this.ctx.onColumnMoved(d,e.colId)})),t}createFloatingFilter(e){const t=document.createElement("div");if(t.className="ag-header-cell ag-floating-filter-cell",t.dataset.colid=e.colId,t.style.position="absolute",t.style.height=`${this.ctx.options.floatingFiltersHeight??24}px`,e.filter==="boolean"){const i=document.createElement("select");return i.className="ag-floating-filter-input",i.innerHTML='<option value="">All</option><option value="true">✓</option><option value="false">✗</option>',i.addEventListener("change",()=>this.ctx.onFloatingFilterChanged(e,i.value)),t.appendChild(i),e.floatingFilterComp=i,t}const n=document.createElement("input");return n.className="ag-floating-filter-input",n.type=e.filter==="number"?"number":e.filter==="date"?"date":"text",n.placeholder=this.ctx.t("filterOoo"),n.value=(this.ctx.getQuickFilterText()&&e.filter==="set",""),n.addEventListener("input",()=>this.ctx.onFloatingFilterChanged(e,n.value)),t.appendChild(n),e.floatingFilterComp=n,t}updateSortIndicator(e,t,n){if(e.innerHTML="",t==="asc"?(e.classList.add("ag-sort-asc"),e.innerHTML=ho):t==="desc"&&(e.classList.add("ag-sort-desc"),e.innerHTML=po),t&&n!==null&&n>0){const i=document.createElement("span");i.className="ag-sort-order",i.textContent=String(n+1),e.appendChild(i)}}updateIndicators(){const{left:e,center:t,right:n}=this.ctx.getColumns();for(const i of[...e,...t,...n]){const o=this.headerCells.get(i.colId);if(!o)continue;const a=o.querySelector(".ag-sort-indicator");a&&this.updateSortIndicator(a,i.sort,i.sortIndex);const l=o.querySelector(".ag-filter-icon");l&&l.classList.toggle("ag-filter-active",this.ctx.isFilterActive(i)),o.style.width=`${i.width}px`,this.lastWidths.get(i.colId)!==i.width&&this.lastWidths.set(i.colId,i.width)}this.layoutPositions()}headerColumnIndex(e){return[...this.ctx.getColumns().left,...this.ctx.getColumns().center,...this.ctx.getColumns().right].findIndex(n=>n.colId===e.colId)+1}layoutPositions(){const{left:e,center:t,right:n}=this.ctx.getColumns();let i=0;for(const o of e){const a=this.headerCells.get(o.colId);a&&(a.style.left=`${i}px`),i+=o.width}this.ePinnedLeftHeader.style.width=`${i}px`,i=0;for(const o of t){const a=this.headerCells.get(o.colId);a&&(a.style.left=`${i}px`),i+=o.width}this.eHeaderContainer.style.width=`${i}px`,i=0;for(const o of n){const a=this.headerCells.get(o.colId);a&&(a.style.left=`${i}px`),i+=o.width}if(this.ePinnedRightHeader.style.width=`${i}px`,this.eFloatingFiltersRow){i=0;for(const o of t){const a=this.eFloatingFiltersRow.querySelector(`[data-colid="${o.colId}"]`);a&&(a.style.left=`${i}px`,a.style.width=`${o.width}px`),i+=o.width}}}setScrollLeft(e,t=0){this.eHeaderViewport.style.marginInlineEnd=`${t}px`,this.eHeaderViewport.scrollLeft=e}getHeaderCell(e){return this.headerCells.get(e.colId)}getHeaderRow(){return this.eHeaderRow}}class Gt{constructor(e,t,n,i,o,a,l){y(this,"eLeft",null);y(this,"eCenter",null);y(this,"eRight",null);y(this,"cellComps",[]);y(this,"pinned",!1);var r,d,c,p,h,u,f,g,v;if(this.ctx=e,this.node=t,this.rowHeight=a,t.masterNode){const m=e.renderDetailRow?e.renderDetailRow(t,this.eCenter):null;if(m){const w=document.createElement("div");w.className="ag-row ag-row-detail-row",w.dataset.rowid=t.id,w.style.height=`${m.height}px`,w.style.width="100%",w.appendChild(m.eDetail),this.eCenter=w,this.eLeft=null,this.eRight=null}return}n.length&&(this.eLeft=this.createRowElement(t,n,"left"),this.eLeft.classList.add("ag-row-pinned")),(i.length||t.footer||t.detailNode)&&(this.eCenter=this.createRowElement(t,i,"center")),o.length&&(this.eRight=this.createRowElement(t,o,"right"),this.eRight.classList.add("ag-row-pinned")),t.footer&&((r=this.eCenter)==null||r.classList.add("ag-row-footer"),(d=this.eLeft)==null||d.classList.add("ag-row-footer"),(c=this.eRight)==null||c.classList.add("ag-row-footer")),t.group&&((p=this.eCenter)==null||p.classList.add("ag-row-group"),(h=this.eLeft)==null||h.classList.add("ag-row-group"),(u=this.eRight)==null||u.classList.add("ag-row-group")),(t.rowPinned==="top"||t.rowPinned==="bottom")&&(this.pinned=!0),this.ctx.isNodeSelected(t)&&((f=this.eCenter)==null||f.classList.add("ag-row-selected"),(g=this.eLeft)==null||g.classList.add("ag-row-selected"),(v=this.eRight)==null||v.classList.add("ag-row-selected"))}isPinned(){return this.pinned}setSticky(e){var t,n,i;(t=this.eLeft)==null||t.classList.toggle("ag-row-sticky-group",e),(n=this.eCenter)==null||n.classList.toggle("ag-row-sticky-group",e),(i=this.eRight)==null||i.classList.toggle("ag-row-sticky-group",e)}setHovered(e){var t,n,i;(t=this.eLeft)==null||t.classList.toggle("ag-row-hover",e),(n=this.eCenter)==null||n.classList.toggle("ag-row-hover",e),(i=this.eRight)==null||i.classList.toggle("ag-row-hover",e)}getNode(){return this.node}createRowElement(e,t,n){var r;const i=document.createElement("div");i.className="ag-row",i.dataset.rowid=e.id,i.setAttribute("role","row"),i.setAttribute("aria-rowindex",String((e.__displayIndex??0)+1)),i.setAttribute("aria-selected",String(this.ctx.isNodeSelected(e))),this.ctx.rowDragEnabled()&&i.classList.add("ag-row-draggable"),(e.__displayIndex??0)%2===1&&i.classList.add("ag-row-even"),i.style.height=`${this.rowHeight}px`,i.style.position="absolute",i.style.top="0px";const o=this.ctx.getRowClass(e);o&&i.classList.add(...o.split(" ").filter(Boolean));const a=this.ctx.getRowStyle(e);a&&Object.assign(i.style,a),e.footer&&((r=e.groupData)!=null&&r.__grandTotal)&&(i.classList.add("ag-row-full-width"),i.style.width="100%",i.style.right="0",i.style.left="0");let l=0;for(let d=0;d<t.length;d++){const c=t[d],p=this.createCell(c,e);let h=1;typeof c.colDef.colSpan=="function"&&(h=Math.max(1,Math.round(c.colDef.colSpan({value:Ce(c,e,null),data:e.data,node:e,column:c,rowIndex:e.__displayIndex??0,api:null}))));let u=c.width;for(let f=1;f<h&&d+f<t.length;f++)u+=t[d+f].width;p.eCell.style.left=`${l}px`,p.eCell.style.width=`${u}px`,p.eCell.style.position="absolute",p.eCell.style.top="0",p.eCell.style.height=`${this.rowHeight}px`,h>1&&p.eCell.classList.add("ag-cell-col-span"),l+=u,d+=h-1,i.appendChild(p.eCell),this.cellComps.push(p)}return i.style.width=`${l}px`,i}cellColumnIndex(e){return[...this.ctx.getColumns().left,...this.ctx.getColumns().center,...this.ctx.getColumns().right].findIndex(n=>n.colId===e.colId)+1}createCell(e,t){var c,p;const n=document.createElement("div");n.className="ag-cell",n.dataset.colid=e.colId;const i=e.colId.replace(/[^a-zA-Z0-9_-]/g,"-");i&&n.classList.add(`ag-col-${i}`);const o={value:Ce(e,t,null),data:t.data,node:t,column:e,rowIndex:t.__displayIndex??0,api:null};if(e.cellClass){const h=typeof e.cellClass=="function"?e.cellClass(o):e.cellClass;typeof h=="string"?n.classList.add(...h.split(" ").filter(Boolean)):Array.isArray(h)&&n.classList.add(...h)}if(e.cellClassRules)for(const[h,u]of Object.entries(e.cellClassRules))u(o)&&n.classList.add(h);if(e.cellStyle){const h=typeof e.cellStyle=="function"?e.cellStyle(o):e.cellStyle;Object.assign(n.style,h)}(e.type==="numberColumn"||e.cellDataType===!0)&&n.classList.add("ag-right-aligned-cell"),e.rowDrag&&n.classList.add("ag-cell-row-drag");const a=document.createElement("span");a.className="ag-cell-value",n.appendChild(a),this.ctx.options.enableCellTextSelection&&(n.style.userSelect="text",n.style.cursor="text"),n.setAttribute("role","gridcell"),n.setAttribute("aria-colindex",String(this.cellColumnIndex(e)));const l=(p=(c=this.ctx).getNote)==null?void 0:p.call(c,t.id,e.colId,e.colDef.note,{value:Ce(e,t,null),data:t.data,node:t,column:e,api:null});if(l){const h=document.createElement("span");h.className="ag-cell-note-marker",h.title=l,h.addEventListener("click",u=>{var f,g;u.stopPropagation(),(g=(f=this.ctx).onNoteClick)==null||g.call(f,t.id,e.colId,h)}),n.appendChild(h)}if(e.rowDrag){const h=document.createElement("span");h.className="ag-row-drag-handle",h.innerHTML=Kn,h.title=this.ctx.t("dragRow"),h.addEventListener("mousedown",u=>{var f,g;u.button===0&&(u.stopPropagation(),(g=(f=this.ctx).onRowDragStart)==null||g.call(f,t,h,u))}),n.appendChild(h)}const r=e.tooltipField;r&&t.data&&t.data[r]!==void 0?n.title=String(t.data[r]):e.tooltipValueGetter&&(n.title=String(e.tooltipValueGetter({value:Ce(e,t,null),valueFormatted:null,data:t.data,node:t,column:e,api:null,colDef:e.colDef})));const d={column:e,eCell:n,eValue:a,lastValue:void 0,lastFormatted:null,rendererKey:"",custom:!1};return this.updateCellContent(d),d}updateCellContent(e){var d;const{column:t,node:n}={column:e.column,node:this.node},i=Ce(t,n,null),o=Ht(t,n,null);e.lastValue=i,e.lastFormatted=o;const a=typeof t.cellRenderer=="string"?t.cellRenderer:null,l=typeof t.cellRenderer=="function"?t.cellRenderer:null;if(a||l){e.custom=!0;const c=a||"func";if(e.rendererKey!==c){e.eValue.innerHTML="",e.rendererKey=c;const p={value:i,valueFormatted:o,data:n.data,node:n,column:t,rowIndex:n.__displayIndex??0,api:null,colDef:t.colDef,eGridCell:e.eCell,registerRowDragger:void 0,...t.cellRendererParams||{}};let h=null;if(a&&Vt[a]){const u=Vt[a](p);u instanceof HTMLElement?h=u:(e.rendererInstance=u,h=u.getGui())}else if(l){const u=l(p);u instanceof HTMLElement?h=u:u&&typeof u.getGui=="function"?(e.rendererInstance=u,h=u.getGui()):typeof u=="string"&&(e.eValue.innerHTML=u)}h&&e.eValue.appendChild(h)}return}e.rendererKey="",e.custom=!1,(d=e.rendererInstance)!=null&&d.destroy&&(e.rendererInstance.destroy(),e.rendererInstance=void 0);let r=o??"";if((n.group||n.footer)&&n.groupData){const c=n.groupData[t.colId];r=c==null?"":String(c)}e.eValue.textContent!==r&&(e.eValue.textContent=r)}refreshCells(e,t,n){var a,l,r,d;const i=e&&e.length?new Set(e.map(c=>c.colId)):null;for(const c of this.cellComps){if(i&&!i.has(c.column.colId))continue;const p=Ce(c.column,this.node,null),h=t||p!==c.lastValue;if(!h&&!n)continue;const u=c.eValue.textContent;if(c.rendererInstance&&typeof c.rendererInstance.refresh=="function"){c.rendererInstance.refresh({value:p,valueFormatted:Ht(c.column,this.node,null),data:this.node.data,node:this.node,column:c.column,rowIndex:this.node.__displayIndex??0,api:null,colDef:c.column.colDef,eGridCell:c.eCell,...c.column.cellRendererParams||{}})===!1&&this.updateCellContent(c),c.lastValue=p,n&&(c.eCell.classList.remove("ag-cell-data-change"),c.eCell.offsetWidth,c.eCell.classList.add("ag-cell-data-change"));continue}if(c.rendererKey){(h||n)&&(c.rendererKey="",this.updateCellContent(c)),c.lastValue=p,n&&(c.eCell.classList.remove("ag-cell-data-change"),c.eCell.offsetWidth,c.eCell.classList.add("ag-cell-data-change"));continue}this.updateCellContent(c),(n||h&&u!==c.eValue.textContent)&&(c.eCell.classList.remove("ag-cell-data-change"),c.eCell.offsetWidth,c.eCell.classList.add("ag-cell-data-change"))}const o=this.ctx.isNodeSelected(this.node);(a=this.eCenter)==null||a.classList.toggle("ag-row-selected",o),(l=this.eLeft)==null||l.classList.toggle("ag-row-selected",o),(r=this.eRight)==null||r.classList.toggle("ag-row-selected",o),this.node.group&&((d=this.eCenter)==null||d.classList.toggle("ag-row-group-expanded",this.node.expanded))}appendTo(e,t,n){if(this.eLeft&&e.appendChild(this.eLeft),this.eCenter&&t.appendChild(this.eCenter),this.eRight&&n.appendChild(this.eRight),this.node.detailNode&&this.ctx.renderDetailRow){const i=this.ctx.renderDetailRow(this.node,this.eCenter);i&&t.appendChild(i.eDetail)}}setTop(e){const t=`${e}px`;this.eLeft&&this.eLeft.style.top!==t&&(this.eLeft.style.top=t),this.eCenter&&this.eCenter.style.top!==t&&(this.eCenter.style.top=t),this.eRight&&this.eRight.style.top!==t&&(this.eRight.style.top=t)}getCenterElement(){return this.eCenter}getCellElements(){return this.cellComps.map(e=>e.eCell)}destroy(){var e,t,n,i;(e=this.eLeft)!=null&&e.parentNode&&this.eLeft.parentNode.removeChild(this.eLeft),(t=this.eCenter)!=null&&t.parentNode&&this.eCenter.parentNode.removeChild(this.eCenter),(n=this.eRight)!=null&&n.parentNode&&this.eRight.parentNode.removeChild(this.eRight);for(const o of this.cellComps)(i=o.rendererInstance)!=null&&i.destroy&&o.rendererInstance.destroy();this.cellComps=[]}}function ti(s,e,t){const n=s.length;if(n===0||t<=0)return[];let i=0,o=n-1;for(;i<o;){const c=i+o>>1;s[c]>=t?o=c:i=c+1}const a=s[i]>=t?i:n-1,l=e[a];if(!l||l.level===0)return[];const r=[];let d=l.level;for(let c=a-1;c>=0;c--){const p=e[c];if(!(!p||p.level>=d)&&(d=p.level,p.group&&s[c]<t&&r.push(c),p.level===0))break}return r.reverse()}class Yo{constructor(e,t,n){y(this,"ctx");y(this,"eRoot");y(this,"eHeader");y(this,"eBody");y(this,"ePinnedLeft");y(this,"ePinnedRight");y(this,"ePinnedLeftInner");y(this,"ePinnedRightInner");y(this,"eViewport");y(this,"eContainer");y(this,"eFloatingTop");y(this,"eFloatingBottom");y(this,"eFloatingTopLeft");y(this,"eFloatingTopRight");y(this,"eFloatingBottomLeft");y(this,"eFloatingBottomRight");y(this,"eStickyTop");y(this,"eStickyLeft");y(this,"eStickyCenter");y(this,"eStickyRight");y(this,"rowComps",new Map);y(this,"stickyComps",new Map);y(this,"hoveredRowId",null);y(this,"rowOffsets",[]);y(this,"rowIndices",new Map);y(this,"rowInfos",[]);y(this,"totalHeight",0);y(this,"lastScrollTop",-1);y(this,"lastRange",[-1,-1]);y(this,"heightVersion",0);y(this,"scrollFrame",null);y(this,"onSectionWheel",e=>{if(e.ctrlKey||!e.cancelable)return;const t=e.target;if(t!=null&&t.closest('input, textarea, select, [contenteditable="true"]'))return;const n=this.eViewport;let i=e.deltaY,o=e.deltaX;e.deltaMode===1?(i*=33,o*=33):e.deltaMode===2&&(i*=n.clientHeight,o*=n.clientWidth),e.shiftKey&&!o&&(o=i,i=0),i&&(n.scrollTop+=i),o&&(n.scrollLeft+=o),this.syncPinnedScroll(),this.scheduleScrollRender(),this.ctx.onViewportScroll&&this.ctx.onViewportScroll(),e.preventDefault()});y(this,"onBodyMouseOver",e=>{var o;const t=e.target,n=(o=t==null?void 0:t.closest)==null?void 0:o.call(t,".ag-row"),i=(n==null?void 0:n.dataset.rowid)??null;if(i===this.hoveredRowId){i&&this.setRowHovered(i,!0);return}this.hoveredRowId&&this.setRowHovered(this.hoveredRowId,!1),this.hoveredRowId=i,i&&this.setRowHovered(i,!0)});y(this,"onBodyMouseLeave",()=>{this.hoveredRowId&&(this.setRowHovered(this.hoveredRowId,!1),this.hoveredRowId=null)});this.ctx=n,this.eRoot=e,this.eHeader=t,this.eBody=document.createElement("div"),this.eBody.className="ag-body",this.eRoot.appendChild(this.eBody),this.ePinnedLeft=document.createElement("div"),this.ePinnedLeft.className="ag-pinned-left-cols-viewport",this.eBody.appendChild(this.ePinnedLeft),this.ePinnedLeftInner=document.createElement("div"),this.ePinnedLeftInner.className="ag-pinned-cols-inner",this.ePinnedLeft.appendChild(this.ePinnedLeftInner);const i=document.createElement("div");i.className="ag-body-viewport-wrapper",this.eBody.appendChild(i),this.eFloatingTop=document.createElement("div"),this.eFloatingTop.className="ag-floating-top",i.appendChild(this.eFloatingTop),this.eViewport=document.createElement("div"),this.eViewport.className="ag-body-viewport",this.eViewport.tabIndex=0,this.eViewport.addEventListener("scroll",this.onScroll.bind(this)),this.eViewport.addEventListener("keydown",o=>this.ctx.onViewportKeyDown(o)),i.appendChild(this.eViewport),this.eContainer=document.createElement("div"),this.eContainer.className="ag-body-container",this.eViewport.appendChild(this.eContainer),this.eFloatingBottom=document.createElement("div"),this.eFloatingBottom.className="ag-floating-bottom",i.appendChild(this.eFloatingBottom),this.ePinnedRight=document.createElement("div"),this.ePinnedRight.className="ag-pinned-right-cols-viewport",this.eBody.appendChild(this.ePinnedRight),this.ePinnedRightInner=document.createElement("div"),this.ePinnedRightInner.className="ag-pinned-cols-inner",this.ePinnedRight.appendChild(this.ePinnedRightInner),this.eFloatingTopLeft=document.createElement("div"),this.eFloatingTopLeft.className="ag-floating-pinned-cols ag-floating-pinned-left",this.eBody.appendChild(this.eFloatingTopLeft),this.eFloatingTopRight=document.createElement("div"),this.eFloatingTopRight.className="ag-floating-pinned-cols ag-floating-pinned-right",this.eBody.appendChild(this.eFloatingTopRight),this.eFloatingBottomLeft=document.createElement("div"),this.eFloatingBottomLeft.className="ag-floating-pinned-cols ag-floating-pinned-bottom-left",this.eBody.appendChild(this.eFloatingBottomLeft),this.eFloatingBottomRight=document.createElement("div"),this.eFloatingBottomRight.className="ag-floating-pinned-cols ag-floating-pinned-bottom-right",this.eBody.appendChild(this.eFloatingBottomRight),this.eStickyTop=document.createElement("div"),this.eStickyTop.className="ag-sticky-group-rows",this.eBody.appendChild(this.eStickyTop),this.eStickyLeft=document.createElement("div"),this.eStickyLeft.className="ag-sticky-group-rows-left",this.eStickyTop.appendChild(this.eStickyLeft),this.eStickyCenter=document.createElement("div"),this.eStickyCenter.className="ag-sticky-group-rows-center",this.eStickyTop.appendChild(this.eStickyCenter),this.eStickyRight=document.createElement("div"),this.eStickyRight.className="ag-sticky-group-rows-right",this.eStickyTop.appendChild(this.eStickyRight);for(const o of[this.eFloatingTopLeft,this.eFloatingTopRight,this.eFloatingBottomLeft,this.eFloatingBottomRight,this.eStickyLeft,this.eStickyCenter,this.eStickyRight])o.addEventListener("click",this.onClick.bind(this)),o.addEventListener("dblclick",this.onDoubleClick.bind(this)),o.addEventListener("mousedown",this.onMouseDown.bind(this)),o.addEventListener("contextmenu",this.onContextMenu.bind(this)),o.addEventListener("wheel",this.onSectionWheel,{passive:!1});this.ePinnedLeft.addEventListener("click",this.onClick.bind(this)),this.ePinnedLeft.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.ePinnedLeft.addEventListener("mousedown",this.onMouseDown.bind(this)),this.ePinnedLeft.addEventListener("contextmenu",this.onContextMenu.bind(this)),this.eContainer.addEventListener("click",this.onClick.bind(this)),this.eContainer.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.eContainer.addEventListener("mousedown",this.onMouseDown.bind(this)),this.eContainer.addEventListener("contextmenu",this.onContextMenu.bind(this)),this.ePinnedRight.addEventListener("click",this.onClick.bind(this)),this.ePinnedRight.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.ePinnedRight.addEventListener("mousedown",this.onMouseDown.bind(this)),this.ePinnedRight.addEventListener("contextmenu",this.onContextMenu.bind(this)),this.eFloatingTop.addEventListener("click",this.onClick.bind(this)),this.eFloatingTop.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.eFloatingTop.addEventListener("contextmenu",this.onContextMenu.bind(this)),this.eFloatingBottom.addEventListener("click",this.onClick.bind(this)),this.eFloatingBottom.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.eFloatingBottom.addEventListener("contextmenu",this.onContextMenu.bind(this));for(const o of[this.eViewport,this.ePinnedLeft,this.ePinnedRight,this.eFloatingTop,this.eFloatingBottom,this.eHeader])o.addEventListener("wheel",this.onSectionWheel,{passive:!1});this.eBody.addEventListener("mouseover",this.onBodyMouseOver),this.eBody.addEventListener("mouseleave",this.onBodyMouseLeave)}setRowHovered(e,t){for(const n of this.rowComps.values())n.getNode().id===e&&n.setHovered(t);for(const n of this.stickyComps.values())n.getNode().id===e&&n.setHovered(t)}getViewport(){return this.eViewport}getBody(){return this.eBody}getContainer(){return this.eContainer}getRowComps(){return this.rowComps}getHeaderElement(){return this.eHeader}recomputeOffsets(){const e=this.ctx.rowModel.getRowCount();this.rowIndices.clear();const t=new Array(e),n=new Array(e);let i=0;if(this.hasVariableHeights()){for(let a=0;a<e;a++)t[a]=i,n[a]=this.rowInfoAt(a),i+=this.getRowHeightForIndex(a);this.totalHeight=i}else{const a=this.getFixedRowHeight();for(let l=0;l<e;l++)t[l]=l*a,n[l]=this.rowInfoAt(l);this.totalHeight=e*a}this.rowOffsets=t,this.rowInfos=n}rowInfoAt(e){const t=this.ctx.rowModel.getRow(e);return t?(this.rowIndices.set(t.id,e),{level:t.uiLevel??t.level??0,group:!!t.group}):{level:0,group:!1}}hasVariableHeights(){return!!(this.ctx.options.detailRowAutoHeight||this.ctx.options.getRowHeight)}getFixedRowHeight(){return this.ctx.options.rowHeight??42}getRowHeightForIndex(e){const t=this.ctx.rowModel.getRow(e);return t?this.ctx.getRowHeight(t):this.getFixedRowHeight()}refreshRows(){this.recomputeOffsets(),this.eContainer.style.height=`${this.totalHeight}px`;const e=this.ctx.getColumns().center.reduce((i,o)=>i+o.width,0),t=this.ctx.getColumns().left.reduce((i,o)=>i+o.width,0),n=this.ctx.getColumns().right.reduce((i,o)=>i+o.width,0);this.eContainer.style.width=`${Math.max(e,1)}px`,this.ePinnedLeft.style.width=`${t}px`,this.ePinnedRight.style.width=`${n}px`,this.ePinnedLeft.style.height=`${this.totalHeight}px`,this.ePinnedRight.style.height=`${this.totalHeight}px`,this.eFloatingTopLeft.style.width=`${t}px`,this.eFloatingTopRight.style.width=`${n}px`,this.eFloatingBottomLeft.style.width=`${t}px`,this.eFloatingBottomRight.style.width=`${n}px`,this.eStickyLeft.style.width=`${t}px`,this.eStickyRight.style.width=`${n}px`,this.eStickyCenter.style.left=`${t}px`,this.eStickyCenter.style.right=`${n}px`,this.redrawAllRows()}invalidateRowHeights(){this.heightVersion++,this.recomputeOffsets(),this.eContainer.style.height=`${this.totalHeight}px`,this.redrawAllRows()}redrawAllRows(){for(const e of this.rowComps.values())e.destroy();this.rowComps.clear();for(const e of this.stickyComps.values())e.destroy();this.stickyComps.clear(),this.lastRange=[-1,-1],this.renderPinnedRows(),this.renderVisibleRows(!0)}renderPinnedRows(){var n,i;const e=(o,a,l,r,d)=>{o.innerHTML="",a.innerHTML="",l.innerHTML="";const{left:c,center:p,right:h}=this.ctx.getColumns();let u=0;for(let f=0;f<r;f++){const g=d(f);if(!g)continue;const v=this.ctx.getRowHeight(g),m=new Gt(this.ctx,g,c,p,h,v,this.heightVersion);m.appendTo(a,o,l),m.setTop(u),u+=v,this.rowComps.set(`${g.id}|${o===this.eFloatingTop?"top":"bottom"}`,m)}o.style.height=`${u}px`,o.style.display=r>0?"":"none",a.style.height=`${u}px`,l.style.height=`${u}px`},t=this.ctx.rowModel;e(this.eFloatingTop,this.eFloatingTopLeft,this.eFloatingTopRight,((n=t.getPinnedTopRowCount)==null?void 0:n.call(t))??0,o=>{var a;return(a=t.getPinnedTopRow)==null?void 0:a.call(t,o)}),e(this.eFloatingBottom,this.eFloatingBottomLeft,this.eFloatingBottomRight,((i=t.getPinnedBottomRowCount)==null?void 0:i.call(t))??0,o=>{var a;return(a=t.getPinnedBottomRow)==null?void 0:a.call(t,o)})}refreshCells(e){const t=e==null?void 0:e.rowNodes;let n;e!=null&&e.columns&&(n=e.columns.map(i=>typeof i=="string"?this.ctx.getColumns().left.concat(this.ctx.getColumns().center,this.ctx.getColumns().right).find(o=>o.colId===i):i).filter(Boolean));for(const[i,o]of this.rowComps)t&&!t.includes(o.getNode())||o.refreshCells(n,e==null?void 0:e.force,e==null?void 0:e.flash);for(const i of this.stickyComps.values())t&&!t.includes(i.getNode())||i.refreshCells(n,e==null?void 0:e.force,e==null?void 0:e.flash)}flashCells(e){this.refreshCells({...e,force:!0,flash:!0})}redrawRows(e){if(!(e!=null&&e.rowNodes)){this.redrawAllRows();return}for(const t of this.rowComps.values())if(e.rowNodes.includes(t.getNode())){const n=t.getNode(),i=this.findRowIndex(n);if(t.destroy(),this.rowComps.delete(this.rowCompKey(n)),i>=0){const{left:o,center:a,right:l}=this.ctx.getColumns(),r=new Gt(this.ctx,n,o,a,l,this.getRowHeightForIndex(i),this.heightVersion);r.appendTo(this.ePinnedLeftInner,this.eContainer,this.ePinnedRightInner),r.setTop(this.rowOffsets[i]??0),this.rowComps.set(this.rowCompKey(n),r)}}for(const t of this.stickyComps.values())e.rowNodes.includes(t.getNode())&&(t.destroy(),this.stickyComps.delete(t.getNode().id));this.renderVisibleRows(!0)}rowCompKey(e){return e.id}findRowIndex(e){return this.rowIndices.get(e.id)??-1}scheduleScrollRender(){this.scrollFrame===null&&(this.scrollFrame=requestAnimationFrame(()=>{this.scrollFrame=null,this.renderVisibleRows()}))}onScroll(){this.syncPinnedScroll(),this.scheduleScrollRender(),this.ctx.onViewportScroll&&this.ctx.onViewportScroll(),this.ctx.eventService.dispatchEvent("bodyScroll",{direction:"vertical",top:this.eViewport.scrollTop,left:this.eViewport.scrollLeft})}syncPinnedScroll(){const e=`translateY(${-this.eViewport.scrollTop}px)`;this.ePinnedLeftInner.style.transform=e,this.ePinnedRightInner.style.transform=e,this.ePinnedLeft.scrollTop=this.eViewport.scrollTop,this.ePinnedRight.scrollTop=this.eViewport.scrollTop,this.syncStickyHorizontal()}syncStickyHorizontal(){const n=`translateX(${getComputedStyle(this.eStickyTop).direction==="rtl"?this.eViewport.scrollLeft:-this.eViewport.scrollLeft}px)`;for(const i of this.stickyComps.values()){const o=i.getCenterElement();o&&(o.style.transform=n)}}getVerticalScrollTop(){return this.eViewport.scrollTop}setVerticalScrollTop(e){this.eViewport.scrollTop=e,this.syncPinnedScroll(),this.renderVisibleRows()}getHorizontalScrollLeft(){return this.eViewport.scrollLeft}getVerticalScrollbarWidth(){return Math.max(0,this.eViewport.offsetWidth-this.eViewport.clientWidth)}setHorizontalScrollLeft(e){var t,n;this.eViewport.scrollLeft=e,this.syncPinnedScroll(),(n=(t=this.ctx).onViewportScroll)==null||n.call(t)}syncStickyGroupRows(){const e=this.ctx.options.suppressGroupRowsSticky?[]:ti(this.rowOffsets,this.rowInfos,this.eViewport.scrollTop),{left:t,center:n,right:i}=this.ctx.getColumns(),o=parseFloat(this.eFloatingTop.style.height||"0")||0;this.eStickyTop.style.top=`${o}px`;const a=new Set;let l=0;for(const d of e){const c=this.ctx.rowModel.getRow(d);if(!c||!c.group)continue;a.add(c.id);let p=this.stickyComps.get(c.id);if(!p){const h=this.rowComps.get(c.id);h&&(h.destroy(),this.rowComps.delete(c.id)),p=new Gt(this.ctx,c,t,n,i,this.getRowHeightForIndex(d),this.heightVersion),p.appendTo(this.eStickyLeft,this.eStickyCenter,this.eStickyRight),p.setSticky(!0),this.stickyComps.set(c.id,p)}p.setTop(l),l+=this.getRowHeightForIndex(d)}for(const[d,c]of this.stickyComps)a.has(d)||(c.destroy(),this.stickyComps.delete(d));const r=`${l}px`;return this.eStickyTop.style.height=r,this.eStickyLeft.style.height=r,this.eStickyCenter.style.height=r,this.eStickyRight.style.height=r,this.syncStickyHorizontal(),a}renderVisibleRows(e=!1){const t=this.ctx.rowModel.getRowCount(),n=this.eViewport.scrollTop,i=this.eViewport.clientHeight,o=this.ctx.options.rowBuffer??10;let a,l;if(this.hasVariableHeights())a=this.findIndexAtPixel(n)-o,l=this.findIndexAtPixel(n+i)+o;else{const v=this.getFixedRowHeight();a=Math.floor(n/v)-o,l=Math.ceil((n+i)/v)+o}if(a=Math.max(0,a),l=Math.min(t-1,l),!e&&this.lastRange[0]===a&&this.lastRange[1]===l&&this.lastScrollTop===n)return;const r=this.lastRange[0]!==a||this.lastRange[1]!==l;this.lastRange=[a,l],this.lastScrollTop=n;const d=new Set(this.stickyComps.keys()),c=this.syncStickyGroupRows(),p=d.size!==c.size||[...d].some(v=>!c.has(v));if(!e&&!r&&!p)return;const h=new Set(c),{left:u,center:f,right:g}=this.ctx.getColumns();for(let v=a;v<=l;v++){const m=this.ctx.rowModel.getRow(v);if(!m||(h.add(m.id),c.has(m.id)))continue;let w=this.rowComps.get(m.id);w||(w=new Gt(this.ctx,m,u,f,g,this.getRowHeightForIndex(v),this.heightVersion),w.appendTo(this.ePinnedLeftInner,this.eContainer,this.ePinnedRightInner),this.rowComps.set(m.id,w)),w.setTop(this.rowOffsets[v]??v*this.getFixedRowHeight())}for(const[v,m]of this.rowComps)!h.has(v)&&!m.isPinned()&&(m.destroy(),this.rowComps.delete(v))}findIndexAtPixel(e){const t=this.rowOffsets;let n=0,i=t.length-1;for(;n<i;){const o=n+i+1>>1;t[o]<=e?n=o:i=o-1}return n}ensureIndexVisible(e,t="top"){const n=this.rowOffsets[e]??e*this.getFixedRowHeight(),i=this.getRowHeightForIndex(e),o=this.eViewport.clientHeight;let a;t==="top"?a=n:t==="bottom"?a=n+i-o:a=n-(o-i)/2,this.eViewport.scrollTop=Math.max(0,a),this.renderVisibleRows()}getFirstVisibleRowIndex(){return Math.max(0,this.findIndexAtPixel(this.eViewport.scrollTop))}getLastVisibleRowIndex(){return Math.max(0,this.findIndexAtPixel(this.eViewport.scrollTop+this.eViewport.clientHeight))}ensureColumnVisible(e,t="end"){const n=this.eViewport.clientWidth,i=this.eViewport.scrollLeft,o=e.left-this.ctx.getColumns().left.reduce((a,l)=>a+l.width,0);o<i?this.eViewport.scrollLeft=Math.max(0,t==="middle"?o-(n-e.width)/2:o):o+e.width>i+n&&(this.eViewport.scrollLeft=o+e.width-n),this.renderVisibleRows()}getCellPosition(e,t){return{top:this.rowOffsets[e]??e*this.getFixedRowHeight(),left:t.left,height:this.getRowHeightForIndex(e),width:t.width}}getRowOffsets(){return this.rowOffsets}getTotalHeight(){return this.totalHeight}findCellFromEvent(e){const n=e.target.closest(".ag-cell");if(!n)return null;const i=n.dataset.colid;if(!i)return null;const o=n.closest(".ag-row"),a=o==null?void 0:o.dataset.rowid;if(!a)return null;const l=this.ctx.rowModel.getRowNode(a);if(!l)return null;const d=[...this.ctx.getColumns().left,...this.ctx.getColumns().center,...this.ctx.getColumns().right].find(c=>c.colId===i);return d?{node:l,column:d,eCell:n,rowIndex:this.findRowIndex(l)}:null}onClick(e){const t=this.findCellFromEvent(e);if(t){this.ctx.onCellClicked({event:e,node:t.node,column:t.column,value:Ce(t.column,t.node,null),rowIndex:this.findRowIndex(t.node),colDef:t.column.colDef});return}const n=e.target.closest(".ag-row");if(n!=null&&n.dataset.rowid){const i=this.ctx.rowModel.getRowNode(n.dataset.rowid);i&&this.ctx.onRowClicked({event:e,node:i,data:i.data,rowIndex:this.findRowIndex(i)})}}onDoubleClick(e){const t=this.findCellFromEvent(e);if(t){this.ctx.onCellDoubleClicked({event:e,node:t.node,column:t.column,value:Ce(t.column,t.node,null),rowIndex:this.findRowIndex(t.node),colDef:t.column.colDef});return}const n=e.target.closest(".ag-row");if(n!=null&&n.dataset.rowid){const i=this.ctx.rowModel.getRowNode(n.dataset.rowid);i&&this.ctx.onRowDoubleClicked({event:e,node:i,data:i.data})}}onMouseDown(e){const t=this.findCellFromEvent(e);t&&this.ctx.onCellMouseDown({event:e,node:t.node,column:t.column,value:Ce(t.column,t.node,null),rowIndex:this.findRowIndex(t.node)})}onContextMenu(e){const t=this.findCellFromEvent(e);t&&this.ctx.onCellContextMenu({event:e,node:t.node,column:t.column,value:Ce(t.column,t.node,null),rowIndex:this.findRowIndex(t.node)})}destroy(){this.scrollFrame!==null&&cancelAnimationFrame(this.scrollFrame),this.scrollFrame=null;for(const e of this.rowComps.values())e.destroy();this.rowComps.clear();for(const e of this.stickyComps.values())e.destroy();this.stickyComps.clear()}}class Ke{constructor(){y(this,"cleanups",new Set);y(this,"stopped",!1)}get destroyed(){return this.stopped}add(e){return this.stopped?e():this.cleanups.add(e),()=>{this.cleanups.delete(e)&&e()}}listen(e,t,n,i){return e.addEventListener(t,n,i),this.add(()=>e.removeEventListener(t,n,i))}timeout(e,t){if(this.stopped)return 0;const n=window.setTimeout(()=>{i(),this.stopped||e()},t),i=this.add(()=>window.clearTimeout(n));return n}interval(e,t){if(this.stopped)return 0;const n=window.setInterval(()=>{this.stopped||e()},t);return this.add(()=>window.clearInterval(n)),n}destroy(){if(this.stopped)return;this.stopped=!0;const e=[...this.cleanups].reverse();this.cleanups.clear();let t;for(const n of e)try{n()}catch(i){t??(t=i)}if(t!==void 0)throw t}}function Fe(s,e,t={},n=[]){const i=new Ke,o=new Set,a=h=>[...o].some(u=>u.contains(h)),l=new Set,r=new WeakMap,d=h=>{const u=h.target;if(!(u!=null&&u.closest))return;const f=u.closest('button,input,select,textarea,a,[data-action],[contenteditable],[role="button"],[role="tab"],[data-node-id],[data-rowid],[data-viewport],canvas');if(!f||!a(f))return;const g={};for(let m=f;m&&a(m);m=m.parentElement)for(const[w,k]of Object.entries(m.dataset))k!==void 0&&!(w in g)&&(g[w]=k);const v=f;r.has(h)||(r.set(h,{component:e,type:h.type,action:g.action??g.control,value:"value"in f?v.value:void 0,checked:v.type==="checkbox"||v.type==="radio"?v.checked:void 0,data:g,originalEvent:h}),queueMicrotask(()=>c(h)))},c=h=>{var g;const u=r.get(h);if(!u||i.destroyed)return;r.delete(h),(g=t.onInteraction)==null||g.call(t,u);for(const v of[...l])v(u);const f=s.ownerDocument.defaultView.CustomEvent;s.dispatchEvent(new f("rowvia:interaction",{detail:u,bubbles:!0}))},p=h=>{if(i.destroyed||o.has(h))return()=>{};o.add(h);const u=[];for(const f of["click","dblclick","contextmenu","input","change","submit","keydown","pointerdown","pointerup","wheel"])u.push(i.listen(h,f,d,{capture:!0,passive:!0}));return()=>{o.delete(h),u.forEach(f=>f())}};for(const h of[s,...n])p(h);return{addRoot:p,onInteraction(h){return i.destroyed?()=>{}:(l.add(h),()=>{l.delete(h)})},destroy(){i.destroy(),l.clear(),o.clear()}}}const Xo={rowHeight:42,headerHeight:48,floatingFiltersHeight:24,groupHeaderHeight:48,pivotHeaderHeight:48,rowBuffer:10,detailRowHeight:200,animateRows:!0,enableCellChangeFlash:!0,rowSelection:void 0,sortingOrder:["asc","desc",null],enterNavigatesVerticallyAfterEdit:!0,treeDataChildrenField:"children",suppressClickEdit:!1};class ht{constructor(e,t){y(this,"interactions");y(this,"onInteraction");y(this,"options");y(this,"eventService",new Ds);y(this,"columnModel");y(this,"rowModel");y(this,"clientSideRowModel",null);y(this,"serverSideRowModel",null);y(this,"infiniteRowModel",null);y(this,"viewportRowModel",null);y(this,"rowRenderer");y(this,"headerView");y(this,"selectionService");y(this,"editService");y(this,"filterService");y(this,"sortService");y(this,"paginationService",null);y(this,"popupService");y(this,"filterGui");y(this,"contextMenuService");y(this,"columnMenuService");y(this,"statusBarService");y(this,"sideBarService");y(this,"findService");y(this,"rangeSelectionService");y(this,"chartService");y(this,"overlayService");y(this,"exportService");y(this,"rowGroupPanel",null);y(this,"undoRedoService");y(this,"formulaEditorService");y(this,"notesService");y(this,"rowDragService");y(this,"api");y(this,"columnApi");y(this,"localeText");y(this,"rowNodeServices");y(this,"eGridDiv");y(this,"eRoot");y(this,"eMain");y(this,"eHeader");y(this,"quickFilter","");y(this,"resizeObserver",null);y(this,"destroyed",!1);y(this,"gridReadyDispatched",!1);y(this,"context");y(this,"onWindowResize",()=>{this.onGridSizeChanged()});y(this,"onDocumentMouseDown",e=>{var n;const t=e.target;if(t&&this.eRoot.contains(t)){const i=(n=t.closest)==null?void 0:n.call(t,".ag-cell");if(!i){this.editService.isEditing()&&this.editService.stopEditing(!1),this.editService.clearFocusedCell();return}this.editService.isEditing()&&!i.classList.contains("ag-cell-inline-editing")&&this.editService.stopEditing(!1);return}this.editService.isEditing()&&this.editService.stopEditing(!1),this.editService.clearFocusedCell()});var d,c,p,h;this.eGridDiv=e,this.options={...Xo,...t},this.quickFilter=this.options.quickFilterText||"",this.context=this.options.context,this.localeText=Os(this.options.localeText),this.eGridDiv.classList.add("ag-grid-root");const n=this.options.theme||"ag-theme-alpine";this.eGridDiv.classList.add(n),this.eRoot=document.createElement("div"),this.eRoot.className="ag-root",this.eGridDiv.appendChild(this.eRoot),this.interactions=Fe(this.eRoot,"grid",this.options),this.onInteraction=this.interactions.onInteraction,this.eMain=document.createElement("div"),this.eMain.className="ag-main",this.eRoot.appendChild(this.eMain),this.eHeader=document.createElement("div"),this.eHeader.className="ag-header-wrapper",this.eMain.appendChild(this.eHeader),this.rowNodeServices={selectNode:(u,f)=>this.selectionService.selectNode(u,f),deselectNode:u=>this.selectionService.deselectNode(u),isNodeSelected:u=>this.selectionService.isNodeSelected(u)},this.columnModel=new zn(this.options,this.eventService,null),this.columnModel.setGridApi(null),this.selectionService=new zo(this.eventService,()=>({...this.options,__rowModel:this.rowModel,__api:this.api}),u=>this.isNodeSelectable(u)),this.filterService=new Fo(this),this.sortService=new Wo(this),this.popupService=new Bo(this),this.filterGui=new $o(this,this.popupService),this.contextMenuService=new go(this,this.popupService),this.columnMenuService=new fo(this,this.popupService),this.editService=new mo(this,this.eventService),this.undoRedoService=new jo(this,this.eventService),this.formulaEditorService=new Po(this,this.popupService),this.notesService=new Ho(this,this.popupService),this.rowDragService=new Go(this,this.eventService),this.chartService=new zs(this,this.popupService),this.findService=new Do(this,this.popupService),this.exportService=new Ao(this);const i={options:this.options,eventService:this.eventService,columns:()=>this.getAllColumns(),getSortModel:()=>this.sortService.getSortModel(),getFilterModel:()=>this.filterService.getFilterModel(),rowHeight:()=>this.options.rowHeight??42,rowNodeServices:this.rowNodeServices},o=this.options.rowModelType||"clientSide";o==="serverSide"?(this.serverSideRowModel=new Vs(i),this.rowModel=this.serverSideRowModel,this.options.serverSideDatasource&&this.serverSideRowModel.setDatasource(this.options.serverSideDatasource)):o==="infinite"?(this.infiniteRowModel=new Gs(i),this.rowModel=this.infiniteRowModel,this.options.serverSideDatasource&&this.infiniteRowModel.setDatasource(this.options.serverSideDatasource)):o==="viewport"?(this.viewportRowModel=new qs(i),this.rowModel=this.viewportRowModel,this.options.serverSideDatasource&&this.viewportRowModel.setViewportDatasource(this.options.serverSideDatasource)):(this.clientSideRowModel=new Ls({options:this.options,eventService:this.eventService,columns:()=>this.getAllColumns(),getFilterModel:()=>this.filterService.getFilterModel(),getQuickFilter:()=>this.quickFilter,isPaginationEnabled:()=>{var u;return!!((u=this.paginationService)!=null&&u.isEnabled())},getPageSize:()=>{var u;return((u=this.paginationService)==null?void 0:u.getPageSize())??100},getCurrentPage:()=>{var u;return((u=this.paginationService)==null?void 0:u.getCurrentPage())??0},rowHeight:()=>this.options.rowHeight??42,rowNodeServices:this.rowNodeServices}),this.rowModel=this.clientSideRowModel,(c=(d=this.rowModel).setGridApi)==null||c.call(d,null)),this.headerView=new Ko(this.eHeader,{options:this.options,eventService:this.eventService,getColumns:()=>this.getColumns(),getColumnModel:()=>this.columnModel,getSortState:()=>({sortColumns:this.getAllColumns().filter(u=>u.sort)}),onSortRequested:(u,f,g)=>this.sortService.onSortRequested(u,f,g),onColumnResized:(u,f,g)=>this.onColumnResized(u,f,g),onColumnMoved:(u,f)=>this.onColumnMoved(u,f),onColumnMenuClicked:(u,f)=>this.columnMenuService.openColumnMenu(u,f),onFilterOpened:(u,f)=>this.filterGui.openFilter(u,f),isFilterActive:u=>this.filterService.isFilterActive(u),getQuickFilterText:()=>this.quickFilter,onFloatingFilterChanged:(u,f)=>this.filterService.handleFloatingFilterChange(u,f),onHeaderCheckboxChanged:(u,f)=>this.onHeaderCheckboxChanged(u,f),onColumnPinnedRequested:()=>{},isColumnMenuSuppressed:()=>!1,headerHeight:this.options.headerHeight??48,t:u=>this.t(u),getApi:()=>this.api,getFilterModel:u=>this.filterService.getFilterInstance(u)??null,onFilterModelChange:(u,f)=>this.filterService.setColumnFilterModel(u,f)}),this.rowRenderer=new Yo(this.eMain,this.eHeader,{options:this.options,eventService:this.eventService,rowModel:this.rowModel,t:u=>this.t(u),getColumns:()=>this.getColumns(),getRowHeight:u=>this.getRowHeight(u),isNodeSelected:u=>this.selectionService.isNodeSelected(u),isRowSelectable:u=>this.isNodeSelectable(u),getRowClass:u=>this.getRowClass(u),getRowStyle:u=>this.getRowStyle(u),onCellClicked:u=>this.onCellClicked(u),onCellDoubleClicked:u=>this.editService.onCellDoubleClicked(u),onCellMouseDown:u=>this.onCellMouseDown(u),onCellContextMenu:u=>this.onCellContextMenu(u),onRowClicked:u=>this.onRowClicked(u),onRowDoubleClicked:u=>this.onRowDoubleClicked(u),onRowGroupClicked:u=>this.onRowGroupClicked(u),onViewportKeyDown:u=>this.onViewportKeyDown(u),onViewportScroll:()=>{var g,v,m;this.headerView.setScrollLeft(this.rowRenderer.getHorizontalScrollLeft(),this.rowRenderer.getVerticalScrollbarWidth());const u=this.rowRenderer.getFirstVisibleRowIndex(),f=this.rowRenderer.getLastVisibleRowIndex();(g=this.serverSideRowModel)==null||g.onViewportChanged(u,f),(v=this.infiniteRowModel)==null||v.onViewportChanged(u,f),(m=this.viewportRowModel)==null||m.onViewportChanged(u,f)},getCellText:(u,f)=>{const g=Ce(u,f,this.api);return g==null?"":String(g)},renderDetailRow:u=>this.renderDetailRow(u),rowDragEnabled:()=>this.rowDragService.isEnabled(),onRowDragStart:(u,f,g)=>this.rowDragService.startDrag(u,g),getNote:(u,f,g,v)=>this.notesService.getNote(u,f,g,v),onNoteClick:(u,f,g)=>this.notesService.openNoteEditor(u,f,g),rowNumberOffset:()=>this.columnModel.getOptions().rowNumbers?1:0}),this.rangeSelectionService=new Vo(this,this.eventService),this.statusBarService=new Uo(this,this.eventService),this.eMain.appendChild(this.statusBarService.getElement()),this.overlayService=new Oo(this),this.sideBarService=new _o(this),this.sideBarService.getElement().classList.contains("ag-side-bar-left")?this.eRoot.insertBefore(this.sideBarService.getElement(),this.eMain):this.eRoot.appendChild(this.sideBarService.getElement()),this.options.pagination&&(this.paginationService=new ei(this,this.eventService)),(this.options.rowGroupPanelShow==="always"||this.options.rowGroupPanelShow==="onlyWhenGrouping")&&(this.rowGroupPanel=new qo(this));const{api:a,columnApi:l}=Rs(this);this.api=a,this.columnApi=l,this.columnModel.setGridApi(this.api),(h=(p=this.rowModel).setGridApi)==null||h.call(p,this.api),this.selectionService.gridApiRef=this.api,this.eventService.addEventListener("columnEverythingChanged",()=>this.onColumnsChanged()),this.eventService.addEventListener("displayedColumnsChanged",()=>this.onColumnsChanged()),this.eventService.addEventListener("columnRowGroupChanged",()=>{this.serverSideRowModel||this.infiniteRowModel?this.onRemoteModelChanged():this.rowModel.refreshModel("group")}),this.options.__advancedFilterPass=u=>this.filterService.doesNodePassAdvancedFilter(u),this.eventService.addEventListener("columnPivotModeChanged",()=>this.refreshPivotColumns()),this.eventService.addEventListener("modelUpdated",()=>{this.columnModel.isPivotMode()&&this.refreshPivotColumns()}),this.eventService.addEventListener("sortChanged",()=>this.onRemoteModelChanged()),this.eventService.addEventListener("filterChanged",()=>this.onRemoteModelChanged()),this.eventService.addEventListener("columnValueChanged",()=>this.rowModel.refreshModel("group")),this.eventService.addEventListener("columnPivotModeChanged",()=>this.rowModel.refreshModel("group")),this.eventService.addEventListener("modelUpdated",()=>this.onModelUpdated()),this.eventService.addEventListener("selectionChanged",()=>{var u,f;this.statusBarService.update(),this.rowRenderer.refreshCells({force:!0}),(f=(u=this.options).onSelectionChanged)==null||f.call(u,{api:this.api}),this.updateHeaderCheckboxes()}),this.eventService.addEventListener("paginationChanged",()=>{this.statusBarService.update()});let r=this.options.columnDefs||[];(!r||r.length===0)&&this.options.autoGenerateColumns!==!1&&(this.options.rowData||[]).length>0&&(r=zn.generateColumnDefs(this.options.rowData)),this.columnModel.setColumnDefs(r),this.setRowData(this.options.rowData||[],!0),typeof ResizeObserver<"u"&&(this.resizeObserver=new ResizeObserver(()=>this.onGridSizeChanged()),this.resizeObserver.observe(this.eGridDiv)),window.addEventListener("resize",this.onWindowResize),document.addEventListener("mousedown",this.onDocumentMouseDown,!0),this.onGridSizeChanged(),this.options.enableRtl&&this.eGridDiv.classList.add("ag-direction-rtl"),this.eRoot.setAttribute("role","grid"),this.eRoot.setAttribute("aria-rowcount",String(this.getDisplayedRowCount())),this.eRoot.setAttribute("aria-colcount",String(this.getColumns().center.length+this.getColumns().left.length+this.getColumns().right.length)),this.eRoot.setAttribute("aria-label",this.translate("dataGrid","数据表格")),this.rowRenderer.getViewport().setAttribute("role","presentation"),this.options.enableCharts&&this.options.chartStorageKey&&this.chartService.loadCharts(),this.dispatchGridReady()}getOptions(){return this.options}t(e){return this.localeText.t(e)}translate(e,t){const n=this.localeText.t(e);return n===e?t:n}getContext(){return this.context}getEventService(){return this.eventService}getColumnModel(){return this.columnModel}getRowModel(){return this.rowModel}getRowRenderer(){return this.rowRenderer}getHeaderView(){return this.headerView}getSelectionService(){return this.selectionService}getEditService(){return this.editService}getFilterService(){return this.filterService}getSortService(){return this.sortService}getFilterGui(){return this.filterGui}getPaginationService(){return this.paginationService}getSideBarService(){return this.sideBarService}getChartService(){return this.chartService}getFindService(){return this.findService}getRangeSelectionService(){return this.rangeSelectionService}getExportService(){return this.exportService}getPopupService(){return this.popupService}getOverlayService(){return this.overlayService}getRowGroupPanel(){return this.rowGroupPanel}getUndoRedoService(){return this.undoRedoService}getFormulaEditorService(){return this.formulaEditorService}getNotesService(){return this.notesService}getRowDragService(){return this.rowDragService}getServerSideRowModel(){return this.serverSideRowModel}getInfiniteRowModel(){return this.infiniteRowModel}getViewportRowModel(){return this.viewportRowModel}updateColumnTotalCache(){var n,i;const e=new Map,t=this.getAllColumns().filter(o=>o.colDef.showValueAs);if(t.length>0){const o=new Map;(i=(n=this.rowModel).forEachLeafNode)==null||i.call(n,a=>{for(const l of t){const r=Ce(l,a,this.api);typeof r=="number"&&!isNaN(r)&&o.set(l.colId,(o.get(l.colId)??0)+r)}});for(const a of t)e.set(a.colId,o.get(a.colId)??0)}this.api.__columnTotalCache=e}refreshPivotColumns(){this.columnModel.updatePivotColumns(this.options.rowData||[])}onRemoteModelChanged(){this.serverSideRowModel?this.serverSideRowModel.onSortOrFilterChanged():this.infiniteRowModel?this.infiniteRowModel.onSortOrFilterChanged():this.viewportRowModel&&this.viewportRowModel.setViewportDatasource(this.viewportRowModel.datasource)}isRemoteLoading(){var e,t,n;return!!((e=this.serverSideRowModel)!=null&&e.isLoading()||(t=this.infiniteRowModel)!=null&&t.isLoading()||(n=this.viewportRowModel)!=null&&n.isLoading())}getApi(){return this.api}getColumnApi(){return this.columnApi}getRootElement(){return this.eRoot}getMainElement(){return this.eMain}getHeaderElement(){return this.eHeader}getGridDiv(){return this.eGridDiv}getColumns(){return this.columnModel.getDisplayedColumnsByType()}getAllColumns(){return this.columnModel.getAllColumns()}getColumn(e){return this.columnModel.getColumn(e)}getDisplayedRowCount(){return this.rowModel.getRowCount()}getDisplayedRowAtIndex(e){return this.rowModel.getRow(e)}getRowNode(e){return this.rowModel.getRowNode(e)}getRowHeight(e){if(e.rowHeight!==null)return e.rowHeight;const t=this.options.getRowHeight;if(typeof t=="function"){const n=t({data:e.data,node:e,api:this.api});if(n)return n}return this.options.rowHeight??42}getRowClass(e){const t=[];if(this.options.rowClass&&t.push(this.options.rowClass),typeof this.options.getRowClass=="function"){const n=this.options.getRowClass({data:e.data,node:e,api:this.api});typeof n=="string"?t.push(n):Array.isArray(n)&&t.push(...n)}return e.footer&&t.push("ag-row-footer"),t.join(" ")}getRowStyle(e){const t={};return this.options.rowStyle&&Object.assign(t,this.options.rowStyle),typeof this.options.getRowStyle=="function"&&Object.assign(t,this.options.getRowStyle({data:e.data,node:e,api:this.api})),t}isNodeSelectable(e){if(e.footer||e.masterNode)return!1;const t=this.options.isRowSelectable;return!(t&&!t(e))}isCellEditable(e,t){return this.options.readOnlyEdit||t.group||t.footer||t.masterNode?!1:typeof e.editable=="function"?e.editable({data:t.data,node:t,column:e,colDef:e.colDef,api:this.api}):e.editable===!0}setRowData(e,t=!1){var n,i,o;this.options.rowData=e,this.rowModel.updateRowData(e),this.columnModel.isPivotMode()&&this.refreshPivotColumns(),this.selectionService.syncWithModel(),t||(this.overlayService.updateAuto(),this.statusBarService.update(),(n=this.paginationService)==null||n.update(),this.chartService.refreshCharts(),(o=(i=this.options).onRowDataChanged)==null||o.call(i,{api:this.api}))}applyTransaction(e){var n;const t=this.rowModel.applyTransaction(e);return this.selectionService.syncWithModel(),this.overlayService.updateAuto(),this.statusBarService.update(),(n=this.paginationService)==null||n.update(),this.chartService.refreshCharts(),this.eventService.dispatchEvent("rowDataUpdated",{api:this.api}),t}setCellValue(e,t,n,i="api",o){const a=o!==void 0?o:Ce(e,t,this.api);if(e.valueSetter){if(e.valueSetter({oldValue:Ce(e,t,this.api),newValue:n,data:t.data,node:t,column:e,api:this.api,colDef:e.colDef})===!1)return}else t.setDataValue(e.colId,n);e.rowGroup&&this.rowModel.refreshModel("group"),(i==="edit"||i==="batchEdit")&&this.undoRedoService.pushAction({rowNodeId:t.id,colId:e.colId,oldValue:a,newValue:n,batchId:0}),i!=="edit"&&this.eventService.dispatchEvent("cellValueChanged",{oldValue:null,newValue:n,value:n,data:t.data,node:t,column:e,colDef:e.colDef,api:this.api,source:i})}refreshModel(e){var t;this.rowModel.refreshModel(e),(t=this.paginationService)==null||t.update()}refreshCells(e){this.rowRenderer.refreshCells(e)}setQuickFilter(e){this.quickFilter=e||"",this.refreshModel("filter"),this.findService.applyHighlight()}getQuickFilter(){return this.quickFilter}setRowNodePinned(e,t){e.rowPinned=t,this.rowModel.refreshModel("everything")}openFind(){this.findService.open()}closeFind(){this.findService.close()}onCellClicked(e){var a,l,r,d;const{node:t,column:n,event:i}=e;if(this.options.enableRangeSelection,n.checkboxSelection){this.selectionService.toggleNode(t),this.rowRenderer.refreshCells({rowNodes:[t]}),(l=(a=this.options).onCellClicked)==null||l.call(a,{...e,api:this.api,colDef:n.colDef,value:Ce(n,t,this.api)});return}if(i.target.closest(".ag-group-value-expanded-icon")){this.onRowGroupClicked(t);return}this.selectionService.handleRowClick(t,i),this.editService.onCellClicked(e),(d=(r=this.options).onCellClicked)==null||d.call(r,{...e,api:this.api,colDef:n.colDef,value:Ce(n,t,this.api)})}onCellMouseDown(e){this.options.enableRangeSelection&&this.rangeSelectionService.onCellMouseDown(e)}onRowClicked(e){var t,n;this.selectionService.handleRowClick(e.node,e.event),(n=(t=this.options).onRowClicked)==null||n.call(t,{...e,api:this.api})}onRowDoubleClicked(e){var t,n;(n=(t=this.options).onRowDoubleClicked)==null||n.call(t,{...e,api:this.api})}onCellContextMenu(e){var n,i;const t=e.event.target.closest(".ag-cell")||this.eRoot;this.contextMenuService.openContextMenu(t,{column:e.column,node:e.node}),(i=(n=this.options).onCellContextMenu)==null||i.call(n,{...e,api:this.api,colDef:e.column.colDef})}onRowGroupClicked(e){var t,n,i,o,a;if(e.group){const l=(t=this.rowModel.setNodeExpanded)==null?void 0:t.bind(this.rowModel);l&&l(e,!e.expanded),globalThis.__dbgLogs.push(["after-toggle",e.id,"expanded=",e.expanded]),this.eventService.dispatchEvent("rowGroupOpened",{node:e,expanded:e.expanded,api:this.api}),(i=(n=this.options).onRowGroupOpened)==null||i.call(n,{node:e,expanded:e.expanded,api:this.api})}else e.detailNode?(e.expanded=!e.expanded,this.rowModel.refreshModel("expand"),this.eventService.dispatchEvent("rowGroupOpened",{node:e,expanded:e.expanded,api:this.api}),(a=(o=this.options).onRowGroupOpened)==null||a.call(o,{node:e,expanded:e.expanded,api:this.api})):e.masterNode&&(e.masterNode.expanded=!e.masterNode.expanded,this.rowModel.refreshModel("expand"),this.eventService.dispatchEvent("rowGroupOpened",{node:e.masterNode,expanded:e.masterNode.expanded,api:this.api}))}onHeaderCheckboxChanged(e,t){var n;if(e.headerCheckboxSelectionCurrentPageOnly&&((n=this.paginationService)!=null&&n.isEnabled())){const i=this.rowModel.getRowCount();if(t)for(let o=0;o<i;o++){const a=this.rowModel.getRow(o);a&&this.isNodeSelectable(a)&&this.selectionService.selectNode(a,!1)}else for(let o=0;o<i;o++){const a=this.rowModel.getRow(o);a&&this.selectionService.deselectNode(a)}}else this.selectionService.setSelectAllCheckboxState(t);this.updateHeaderCheckboxes()}updateHeaderCheckboxes(){for(const e of this.getAllColumns()){if(!e.headerCheckboxSelection)continue;const t=e.eHeaderCell;if(!t)continue;const n=t.querySelector(".ag-header-select-all");if(!n)continue;const i=this.selectionService.getSelectAllState();n.checked=i.checked,n.indeterminate=i.indeterminate}}onViewportKeyDown(e){if(this.editService.onGridKeyDown(e),this.rangeSelectionService.onGridKeyDown(e),(e.ctrlKey||e.metaKey)&&(e.key==="z"||e.key==="Z")){e.preventDefault(),e.shiftKey?this.undoRedoService.redo():this.undoRedoService.undo();return}if((e.ctrlKey||e.metaKey)&&(e.key==="y"||e.key==="Y")){e.preventDefault(),this.undoRedoService.redo();return}(e.ctrlKey||e.metaKey)&&(e.key==="c"||e.key==="C")&&this.rangeSelectionService.getRanges().length===0&&this.selectionService.getSelectedNodes().length>0&&(e.preventDefault(),this.api.copyToClipboard()),(e.ctrlKey||e.metaKey)&&(e.key==="v"||e.key==="V")&&this.rangeSelectionService.getRanges().length===0&&(e.preventDefault(),this.api.pasteFromClipboard())}onColumnResized(e,t,n){e.width=t,e.flex=null,this.headerView.updateIndicators(),this.rowRenderer.redrawAllRows(),this.rangeSelectionService.updateOverlay(),n&&this.eventService.dispatchEvent("columnResized",{column:e,source:"uiColumnResized",finished:!0,api:this.api})}onColumnMoved(e,t){const n=this.columnModel.getColumns(),i=n.findIndex(a=>a.colId===e);if(i<0)return;let o=n.length;t&&(o=n.findIndex(a=>a.colId===t)),this.columnModel.moveColumnByIndex(i,o,"uiColumnMoved")}onColumnsChanged(){var e,t;this.headerView.refresh(),this.rowRenderer.refreshRows(),this.updateHeaderCheckboxes(),(t=(e=this.options).onDisplayedColumnsChanged)==null||t.call(e,{api:this.api})}onModelUpdated(){var e,t,n,i,o,a,l;this.updateColumnTotalCache(),this.rowRenderer.refreshRows(),this.options.__loadingRows=this.isRemoteLoading(),this.overlayService.updateAuto(),this.statusBarService.update(),(e=this.paginationService)==null||e.update(),this.rangeSelectionService.applyHighlight(),this.findService.applyHighlight(),this.chartService.refreshCharts(),this.gridReadyDispatched||(this.gridReadyDispatched=!0,this.eventService.dispatchEvent("firstDataRendered",{api:this.api}),(n=(t=this.options).onFirstDataRendered)==null||n.call(t,{api:this.api})),(o=(i=this.options).onModelUpdated)==null||o.call(i,{api:this.api}),(l=(a=this.options).onRowDataChanged)==null||l.call(a,{api:this.api})}setHorizontalScrollLeft(e){this.rowRenderer.setHorizontalScrollLeft(e)}onGridSizeChanged(){var o,a,l;if(this.destroyed)return;const e=this.eGridDiv.clientWidth,t=this.getAllColumns().some(r=>r.flex!==null&&r.flex>0&&r.visible),n=this.sideBarService.isVisible()?this.sideBarService.getElement().offsetWidth:0,i=Math.max(0,e-n);(t||((o=this.options.autoSizeStrategy)==null?void 0:o.type)==="fitGridWidth")&&(this.columnModel.sizeColumnsToFit(i),this.headerView.updateIndicators(),this.rowRenderer.redrawAllRows()),this.rowRenderer.renderVisibleRows(!0),this.headerView.setScrollLeft(this.rowRenderer.getHorizontalScrollLeft(),this.rowRenderer.getVerticalScrollbarWidth()),this.eventService.dispatchEvent("gridSizeChanged",{clientWidth:this.eGridDiv.clientWidth,clientHeight:this.eGridDiv.clientHeight,api:this.api}),(l=(a=this.options).onGridSizeChanged)==null||l.call(a,{clientWidth:e,clientHeight:this.eGridDiv.clientHeight,api:this.api})}renderDetailRow(e){var d,c;const t=e.masterNode;if(!t)return null;const n=this.options.detailRowAutoHeight===!0,i=n?this.options.detailRowHeight??200:this.options.detailRowHeight??200,o=document.createElement("div");o.className="ag-row-detail",o.style.height=`${i}px`,o.style.position="absolute",o.style.top="0",o.style.left="0",o.style.right="0";const a=this.options.detailCellRenderer,l=(d=this.options.detailCellRendererParams)==null?void 0:d.detailGridOptions,r=(c=this.options.detailCellRendererParams)==null?void 0:c.getDetailRowData;if(l&&r){const p=r({data:t.data,node:t,api:this.api}),h=document.createElement("div");h.style.height="100%",h.style.padding="8px 16px",o.appendChild(h),setTimeout(()=>{new ht(h,{...l,rowData:p,theme:this.options.theme})},0)}else if(typeof a=="function"){const p=a({data:t.data,node:t,api:this.api,context:this.context});p instanceof HTMLElement?o.appendChild(p):o.textContent=String(p??"")}else typeof a=="string"&&(o.textContent=a);if(n){const p=Math.max(40,o.scrollHeight||i);return e.rowHeight=p,o.style.height=`${p}px`,{eDetail:o,height:p}}return e.rowHeight=i,{eDetail:o,height:i}}dispatchGridReady(){var e,t;this.eventService.dispatchEvent("gridReady",{api:this.api,columnApi:this.columnApi}),(t=(e=this.options).onGridReady)==null||t.call(e,{api:this.api,columnApi:this.columnApi,context:this.context})}updateGridOptions(e){const t=this.options.theme,n=e.rowData!==void 0&&e.rowData!==this.options.rowData,i=e.columnDefs!==void 0||e.defaultColDef!==void 0||e.columnTypes!==void 0;Object.assign(this.options,e),n&&this.setRowData(e.rowData),i&&this.columnModel.setColumnDefs(this.options.columnDefs||[]),e.sideBar!==void 0&&(this.sideBarService.setVisible(!!e.sideBar),this.onGridSizeChanged()),e.quickFilterText!==void 0&&this.setQuickFilter(e.quickFilterText),e.theme!==void 0&&e.theme!==t&&(this.eGridDiv.classList.remove(t||"ag-theme-alpine"),this.eGridDiv.classList.add(e.theme)),e.pagination!==void 0&&(e.pagination&&!this.paginationService?this.paginationService=new ei(this,this.eventService):this.paginationService&&this.paginationService.setEnabled(!!e.pagination))}destroy(){var e;this.destroyed||(this.destroyed=!0,this.interactions.destroy(),window.removeEventListener("resize",this.onWindowResize),document.removeEventListener("mousedown",this.onDocumentMouseDown,!0),(e=this.resizeObserver)==null||e.disconnect(),this.rowRenderer.destroy(),this.editService.destroy(),this.popupService.closeAll(),this.eRoot.remove(),this.eGridDiv.classList.remove("ag-grid-root","ag-theme-alpine","ag-theme-quartz","ag-theme-balham"),this.eventService.dispatchEvent("gridReady",{}))}}function ni(s,e){const t=new ht(s,e);return{api:t.getApi(),columnApi:t.getColumnApi(),grid:t}}function ii(s,e={}){const t=document.createElement("dialog");t.className="rowvia-detail-dialog";const n=Fe(t,"detail-dialog",e),i=()=>{var d;return(d=e.onClose)==null?void 0:d.call(e)};t.addEventListener("close",i);const o=document.createElement("h2"),a=document.createElement("dl"),l=document.createElement("button");l.type="button",l.textContent="关闭";const r=()=>t.close();return l.addEventListener("click",r),t.append(o,a,l),s.append(t),{onInteraction:n.onInteraction,open(d){var c;o.textContent=d.title,t.setAttribute("aria-label",d.title),a.replaceChildren();for(const p of d.fields){const h=document.createElement("dt"),u=document.createElement("dd");h.textContent=p.label,u.textContent=p.value,a.append(h,u)}t.open||t.showModal(),(c=e.onOpen)==null||c.call(e,d)},close:r,destroy(){t.open&&t.close(),l.removeEventListener("click",r),t.removeEventListener("close",i),n.destroy(),t.remove()}}}const Zo=[{value:"equals",label:"等于"},{value:"notEqual",label:"不等于"},{value:"contains",label:"包含"},{value:"blank",label:"为空"}],Qo=[{value:"equals",label:"等于"},{value:"greaterThan",label:"大于"},{value:"lessThan",label:"小于"},{value:"inRange",label:"介于"}],Jo=[{value:"inRange",label:"介于"},{value:"before",label:"早于"},{value:"after",label:"晚于"}];function $e(s,e){const t=document.createElement(s);return e&&(t.className=e),t}function pt(s,e,t){const n=document.createElement("button");return n.type="button",n.className=e,n.textContent=s,n.addEventListener("click",i=>{i.stopPropagation(),t()}),n}class ea{constructor(e,t,n,i){y(this,"filterFields");y(this,"sortFields");y(this,"filterRows",[]);y(this,"sorts",[]);y(this,"filterPanel",null);y(this,"sortPanel",null);y(this,"filterAnchor",null);y(this,"sortAnchor",null);y(this,"onDocumentMouseDown",e=>{var n,i;const t=e.target;this.filterPanel&&!this.filterPanel.contains(t)&&!((n=this.filterAnchor)!=null&&n.contains(t))&&this.closeFilterPanel(),this.sortPanel&&!this.sortPanel.contains(t)&&!((i=this.sortAnchor)!=null&&i.contains(t))&&this.closeSortPanel()});this.api=e,this.host=t,this.hooks=i,this.filterFields=n.filter,this.sortFields=n.sort,document.addEventListener("mousedown",this.onDocumentMouseDown,!0)}openFilterPanel(e){if(this.filterPanel){this.closeFilterPanel();return}this.closeSortPanel();const t=$e("div","gt-panel gt-filter-panel");t.addEventListener("mousedown",d=>d.stopPropagation());const n=$e("div","gt-panel-title");n.textContent="筛选",t.appendChild(n);const i=$e("div","gt-filter-rows");t.appendChild(i);const o=()=>{if(i.textContent="",!this.filterRows.length){const d=$e("div","gt-panel-empty");d.textContent="点击下方字段添加筛选条件",i.appendChild(d)}for(const d of this.filterRows)i.appendChild(this.renderFilterRow(d,o))},a=$e("div","gt-filter-add");for(const d of this.filterFields)a.appendChild(pt(d.label,"gt-filter-add-btn",()=>{this.filterRows.push({colId:d.colId,kind:d.kind,type:d.kind==="date"?"inRange":"equals",value:"",valueTo:""}),o()}));t.appendChild(a);const l=$e("div","gt-panel-hint");l.textContent="多个条件同时满足(且)",t.appendChild(l);const r=$e("div","gt-panel-actions");r.append(pt("清除","gt-panel-btn",()=>{this.filterRows=[],this.applyFilter(),this.closeFilterPanel()}),pt("应用","gt-panel-btn gt-panel-btn-primary",()=>{this.applyFilter(),this.closeFilterPanel()})),t.appendChild(r),this.mount(t,e),this.filterPanel=t,this.filterAnchor=e,o()}renderFilterRow(e,t){const n=$e("div","gt-filter-row"),i=this.filterFields.find(d=>d.colId===e.colId),o=document.createElement("select");o.className="gt-panel-select";for(const d of this.filterFields){const c=document.createElement("option");c.value=d.colId,c.textContent=d.label,d.colId===e.colId&&(c.selected=!0),o.appendChild(c)}o.addEventListener("change",()=>{const d=this.filterFields.find(c=>c.colId===o.value);d&&(e.colId=d.colId,e.kind=d.kind,e.type=d.kind==="date"?"inRange":"equals",e.value="",e.valueTo="",t())}),n.appendChild(o);const a=e.kind==="number"?Qo:e.kind==="date"?Jo:Zo,l=document.createElement("select");l.className="gt-panel-select gt-panel-select-cond";for(const d of a){const c=document.createElement("option");c.value=d.value,c.textContent=d.label,d.value===e.type&&(c.selected=!0),l.appendChild(c)}if(l.addEventListener("change",()=>{e.type=l.value,t()}),n.appendChild(l),e.type!=="blank")if(i!=null&&i.options){const d=document.createElement("select");d.className="gt-panel-select";const c=document.createElement("option");c.value="",c.textContent="请选择",d.appendChild(c);for(const p of i.options){const h=document.createElement("option");h.value=p.value,h.textContent=p.label,p.value===e.value&&(h.selected=!0),d.appendChild(h)}d.addEventListener("change",()=>{e.value=d.value}),n.appendChild(d)}else if(e.kind==="date"){const d=document.createElement("input");if(d.type="date",d.className="gt-panel-input",d.value=e.value,d.addEventListener("change",()=>{e.value=d.value}),n.appendChild(d),e.type==="inRange"){const c=document.createElement("input");c.type="date",c.className="gt-panel-input",c.value=e.valueTo,c.addEventListener("change",()=>{e.valueTo=c.value}),n.appendChild(c)}}else if(e.kind==="number"){const d=document.createElement("input");if(d.type="number",d.className="gt-panel-input gt-panel-input-num",d.placeholder="数值",d.value=e.value,d.addEventListener("input",()=>{e.value=d.value}),n.appendChild(d),e.type==="inRange"){const c=document.createElement("input");c.type="number",c.className="gt-panel-input gt-panel-input-num",c.placeholder="至",c.value=e.valueTo,c.addEventListener("input",()=>{e.valueTo=c.value}),n.appendChild(c)}}else{const d=document.createElement("input");d.type="text",d.className="gt-panel-input",d.placeholder="文本",d.value=e.value,d.addEventListener("input",()=>{e.value=d.value}),n.appendChild(d)}const r=pt("×","gt-filter-remove",()=>{this.filterRows=this.filterRows.filter(d=>d!==e),t()});return r.title="移除条件",n.appendChild(r),n}applyFilter(){const e={};for(const t of this.filterRows){if(t.type==="blank"){e[t.colId]={filterType:t.kind==="number"?"number":"text",type:"blank",filter:""};continue}if(t.kind==="date"){const n=(t.type==="after",t.value),i=t.type==="before"?t.value:t.valueTo;if(t.type==="before"&&!t.value||t.type==="after"&&!t.value||t.type==="inRange"&&!t.value&&!t.valueTo)continue;e[t.colId]={filterType:"date",dateFrom:n||void 0,dateTo:i||void 0};continue}if(t.value)if(t.kind==="number"){const n={filterType:"number",type:t.type,filter:Number(t.value)};t.type==="inRange"&&(n.filterTo=Number(t.valueTo||t.value)),e[t.colId]=n}else e[t.colId]={filterType:"text",type:t.type,filter:t.value}}this.api.setFilterModel(e),this.hooks.onFilterButton(Object.keys(e).length>0,Object.keys(e).length)}closeFilterPanel(){var e;(e=this.filterPanel)==null||e.remove(),this.filterPanel=null}openSortPanel(e){if(this.sortPanel){this.closeSortPanel();return}this.closeFilterPanel();const t=$e("div","gt-panel gt-sort-panel");t.addEventListener("mousedown",l=>l.stopPropagation());const n=$e("div","gt-panel-title");n.textContent="排序",t.appendChild(n);const i=$e("div","gt-sort-list");t.appendChild(i);const o=()=>{var l;i.textContent="";for(const r of this.sortFields){const d=this.sorts.findIndex(u=>u.colId===r.colId),c=d>=0,p=$e("div","gt-sort-item");c&&p.classList.add("gt-sort-item-active");const h=$e("span","gt-sort-label");if(h.textContent=r.label,p.appendChild(h),c){const u=$e("span","gt-sort-badge");u.textContent=String(d+1),p.appendChild(u);const f=$e("span","gt-sort-dir");f.textContent=((l=this.sorts[d])==null?void 0:l.sort)==="asc"?"↑ 升序":"↓ 降序",p.appendChild(f)}p.addEventListener("click",()=>{var u;c?((u=this.sorts[d])==null?void 0:u.sort)==="asc"?this.sorts[d]={colId:r.colId,sort:"desc"}:this.sorts=this.sorts.filter(f=>f.colId!==r.colId):this.sorts.push({colId:r.colId,sort:"asc"}),o()}),i.appendChild(p)}},a=$e("div","gt-panel-actions");a.append(pt("清除","gt-panel-btn",()=>{this.sorts=[],this.applySort(),this.closeSortPanel()}),pt("应用","gt-panel-btn gt-panel-btn-primary",()=>{this.applySort(),this.closeSortPanel()})),t.appendChild(a),this.mount(t,e),this.sortPanel=t,this.sortAnchor=e,o()}applySort(){this.api.setSortModel(this.sorts.map(e=>({colId:e.colId,sort:e.sort}))),this.hooks.onSortButton(this.sorts.length>0,this.sorts.length)}closeSortPanel(){var e;(e=this.sortPanel)==null||e.remove(),this.sortPanel=null}mount(e,t){this.host.appendChild(e);const n=t.getBoundingClientRect();e.style.top=`${n.bottom+6}px`;const i=window.innerWidth-e.offsetWidth-12;e.style.left=`${Math.max(12,Math.min(n.left,i))}px`,e.style.display="block"}destroy(){this.closeAll(),document.removeEventListener("mousedown",this.onDocumentMouseDown,!0)}closeAll(){this.closeFilterPanel(),this.closeSortPanel()}}const si=864e5;function tt(s){const e=s.getFullYear(),t=String(s.getMonth()+1).padStart(2,"0"),n=String(s.getDate()).padStart(2,"0");return`${e}-${t}-${n}`}function Pe(s){return new Date(`${s}T00:00:00`)}function De(s,e){return new Date(s.getTime()+e*si)}function je(s,e){const t=typeof s=="string"?Pe(s):s,n=typeof e=="string"?Pe(e):e;return Math.round((n.getTime()-t.getTime())/si)}function Lt(){return tt(new Date)}function ta(s){return s.status!=="done"&&s.end&&s.end<Lt()&&s.progress<100?"delayed":s.status}function nn(s){const e=Pe(s);return`${e.getMonth()+1}月${e.getDate()}日`}const oi=["day","week","biweek","month","bimonth","quarter","halfyear","year"],qt={day:"天",biweek:"双周",bimonth:"双月",halfyear:"半年",week:"周",month:"月",quarter:"季度",year:"年"},na={day:26,week:26,biweek:26,month:26,bimonth:13,quarter:8.7,halfyear:4.3,year:2.2};function sn(s){const e=(s.getDay()+6)%7;return De(s,-e)}function ia(s,e){const t=Math.max(1,je(s,e)+1);let n=0;for(let i=0;i<t;i++){const o=De(s,i).getDay();o!==0&&o!==6&&n++}return Math.max(1,n)}function sa(s,e){return new Date(s.getFullYear(),s.getMonth()+e,1)}function ai(s,e,t){const n=[];if(s==="day"){let r=new Date(e);for(;r<t;){const d=De(r,1);n.push({start:new Date(r),end:d,primary:`${r.getDate()}`,secondary:""}),r=d}return n}if(s==="week"||s==="biweek"){let r=sn(e);for(;r<t;){const d=De(r,s==="biweek"?14:7);n.push({start:new Date(r),end:d,primary:`${r.getMonth()+1}/${r.getDate()}`,secondary:""}),r=d}return n}const i=s==="month"?1:s==="bimonth"?2:s==="quarter"?3:s==="halfyear"?6:12,o=r=>new Date(r.getFullYear(),Math.floor(r.getMonth()/i)*i,1),a=r=>s==="month"||s==="bimonth"?`${r.getMonth()+1}月`:s==="halfyear"?`${r.getMonth()<6?"上":"下"}半年`:s==="quarter"?`Q${Math.floor(r.getMonth()/3)+1}`:`${r.getFullYear()}`;let l=o(e);for(;l<t;){const r=sa(l,i);n.push({start:new Date(l),end:r,primary:a(l),secondary:""}),l=r}return n}const Le={accent:"#4555e5",text:"#1f2329",textTertiary:"#8f959e",border:"#dee0e3",groupRow:"transparent",weekend:"rgba(31, 35, 41, 0.04)",gridline:"rgba(31, 35, 41, 0.10)",gridlineMonth:"rgba(31, 35, 41, 0.12)",rowLine:"transparent",hover:"rgba(51, 112, 255, 0.05)",selected:"rgba(51, 112, 255, 0.09)"},zt={"not-started":"#b8bdc4","in-progress":"#3370ff",done:"#2ea121",delayed:"#f54a45"},oa=4,ri=6,_e=28;class li{constructor(e,t){y(this,"interactions");y(this,"onInteraction");y(this,"options");y(this,"eRoot");y(this,"eHeader");y(this,"eRuler");y(this,"rulerCtx");y(this,"eRulerTools");y(this,"eStepLabel");y(this,"eZoomValue");y(this,"eStepMenu",null);y(this,"eScroll");y(this,"eSpacer");y(this,"eCanvas");y(this,"ctx");y(this,"eTooltip");y(this,"eTodayBadge");y(this,"ePopup",null);y(this,"tasks",[]);y(this,"tasksById",new Map);y(this,"rows",[]);y(this,"selectedId",null);y(this,"hoverId",null);y(this,"unit","day");y(this,"zoom",1);y(this,"theme","content");y(this,"epochStart",new Date);y(this,"totalDays",1);y(this,"hits",[]);y(this,"hitsByRow",new Map);y(this,"drag",null);y(this,"ghost",null);y(this,"dirty",!0);y(this,"lastLeft",-1);y(this,"lastTop",-1);y(this,"timer");y(this,"observer",null);y(this,"resizeHandler",()=>this.resizeCanvases());y(this,"showChildren",!0);y(this,"milestonesOnly",!1);y(this,"locateHits",[]);y(this,"tick",()=>{const e=this.eScroll.scrollLeft,t=this.eScroll.scrollTop;(e!==this.lastLeft||t!==this.lastTop||this.dirty)&&(this.lastLeft=e,this.lastTop=t,this.eCanvas.style.transform=`translate(${e}px, ${t}px)`,this.draw(),this.dirty=!1)});y(this,"onScroll",()=>{this.tick()});y(this,"todayLabelX",-1);y(this,"onCanvasMouseMove",e=>{if(this.drag){this.updateDrag(e);return}const{hit:t,rowIndex:n,onAvatar:i}=this.hitAt(e.clientX,e.clientY),o=this.rows[n];i?this.eCanvas.style.cursor="pointer":t&&t.mode!=="move"?this.eCanvas.style.cursor="ew-resize":t?this.eCanvas.style.cursor="grab":this.eCanvas.style.cursor="default";const a=t?t.id:(o==null?void 0:o.id)??null;a!==this.hoverId&&(this.hoverId=a,this.options.onHover(a),this.markDirty())});y(this,"onCanvasMouseDown",e=>{const t=this.eCanvas.getBoundingClientRect(),n=this.locateHits.find(d=>Math.abs(d.x-(e.clientX-t.left))<12&&Math.abs(d.y-(e.clientY-t.top))<12);if(n){this.scrollToTask(n.id);return}const{hit:i,rowIndex:o,onAvatar:a}=this.hitAt(e.clientX,e.clientY),l=this.rows[o];if(i){const d=this.tasksById.get(i.id);if(!d)return;if(a){e.stopPropagation(),this.openAssigneePopup(i.id,i);return}if(d.kind!=="task"||d.milestone||!d.start||!d.end){this.options.onSelect(i.id);return}e.preventDefault(),this.drag={id:i.id,mode:i.mode,startX:e.clientX,startY:e.clientY,originStart:d.start,originEnd:d.end,start:d.start,end:d.end,moved:!1},window.addEventListener("mousemove",this.updateDrag),window.addEventListener("mouseup",this.endDrag),this.options.onSelect(i.id);return}if(!l)return;const r=this.tasksById.get(l.id);if(r){if(r.kind==="task"&&(!r.start||!r.end)){const d=this.pointAt(e.clientX,e.clientY),c=Math.floor(d.x/this.dayWidth),p=tt(De(this.epochStart,c));this.options.onTaskChange({...r,start:p,end:tt(De(Pe(p),4)),progress:0,status:"not-started"}),this.options.onSelect(l.id);return}this.options.onSelect(l.id)}});y(this,"updateDrag",e=>{const t=this.drag;if(!t)return;const n=this.tasksById.get(t.id);if(!n||!t.moved&&Math.abs(e.clientX-t.startX)<oa)return;t.moved=!0;const i=this.dayWidth,o=Math.round((e.clientX-t.startX)/i),a=Pe(t.originStart),l=Pe(t.originEnd),r=je(a,l);let d,c;t.mode==="resize-l"?(d=De(a,Math.min(o,r)),c=l):t.mode==="resize-r"?(d=a,c=De(l,Math.max(o,-r))):(d=De(a,o),c=De(l,o)),n.milestone&&(d=c),t.start=tt(d),t.end=tt(c),this.ghost={id:t.id,start:t.start,end:t.end},this.markDirty(),this.eTooltip.style.display="",this.eTooltip.textContent=n.milestone?nn(t.start):`${nn(t.start)} → ${nn(t.end)}`;const p=this.eRoot.getBoundingClientRect();this.eTooltip.style.left=`${e.clientX-p.left+12}px`,this.eTooltip.style.top=`${e.clientY-p.top+16}px`});y(this,"endDrag",()=>{window.removeEventListener("mousemove",this.updateDrag),window.removeEventListener("mouseup",this.endDrag),this.eTooltip.style.display="none";const e=this.drag;if(this.drag=null,this.ghost=null,this.markDirty(),!(e!=null&&e.moved)||e.start===e.originStart&&e.end===e.originEnd)return;const t=this.tasksById.get(e.id);t&&this.options.onTaskChange({...t,start:e.start,end:e.end})});y(this,"onRootMouseLeave",()=>{this.closeAssigneePopup(),this.closeStepMenu(),this.hoverId&&(this.hoverId=null,this.options.onHover(null),this.markDirty())});y(this,"onDocumentMouseDown",e=>{const t=e.target;this.ePopup&&!this.ePopup.contains(t)&&this.closeAssigneePopup(),this.eStepMenu&&!this.eStepMenu.contains(t)&&!this.eRulerTools.contains(t)&&this.closeStepMenu()});this.options=t,this.eRoot=document.createElement("div"),this.interactions=Fe(this.eRoot,"gantt-chart",t),this.onInteraction=this.interactions.onInteraction,this.eRoot.className="gt-root",e.appendChild(this.eRoot),this.eHeader=document.createElement("div"),this.eHeader.className="gt-header",this.eRuler=document.createElement("canvas"),this.eRuler.className="gt-ruler",this.eHeader.appendChild(this.eRuler),this.eRoot.appendChild(this.eHeader),this.rulerCtx=this.eRuler.getContext("2d"),this.buildRulerTools(),this.eScroll=document.createElement("div"),this.eScroll.className="gt-scroll",this.eSpacer=document.createElement("div"),this.eSpacer.className="gt-spacer",this.eCanvas=document.createElement("canvas"),this.eCanvas.className="gt-canvas",this.eScroll.append(this.eSpacer,this.eCanvas),this.eRoot.appendChild(this.eScroll),this.ctx=this.eCanvas.getContext("2d"),this.eTooltip=document.createElement("div"),this.eTooltip.className="gt-tooltip",this.eTooltip.style.display="none",this.eRoot.appendChild(this.eTooltip),this.eTodayBadge=document.createElement("div"),this.eTodayBadge.className="gt-today-badge",this.eRoot.appendChild(this.eTodayBadge),this.eScroll.addEventListener("scroll",this.onScroll),this.eCanvas.addEventListener("mousedown",this.onCanvasMouseDown),this.eCanvas.addEventListener("mousemove",this.onCanvasMouseMove),this.eRoot.addEventListener("mouseleave",this.onRootMouseLeave);const n=()=>{this.resizeCanvases(),this.markDirty()};typeof ResizeObserver<"u"&&(this.observer=new ResizeObserver(n),this.observer.observe(this.eScroll),this.observer.observe(this.eHeader)),window.addEventListener("resize",this.resizeHandler),this.timer=setInterval(this.tick,40),this.resizeCanvases()}destroy(){var e;this.interactions.destroy(),clearInterval(this.timer),(e=this.observer)==null||e.disconnect(),window.removeEventListener("resize",this.resizeHandler),window.removeEventListener("mousemove",this.updateDrag),window.removeEventListener("mouseup",this.endDrag),this.closeAssigneePopup(),this.closeStepMenu(),this.eRoot.remove()}setHover(e){this.hoverId!==e&&(this.hoverId=e,this.markDirty())}setShowChildren(e){this.showChildren=e,this.markDirty()}setMilestonesOnly(e){this.milestonesOnly=e,this.markDirty()}scrollToTask(e){const t=this.tasksById.get(e);t!=null&&t.start&&(this.eScroll.scrollLeft=Math.max(0,this.dateX(t.start)-this.eScroll.clientWidth*.12),this.markDirty())}setTasks(e){this.tasks=e,this.tasksById=new Map(e.map(t=>[t.id,t])),this.computeDomain(),this.markDirty()}setRows(e){e.length===this.rows.length&&e.every((t,n)=>{const i=this.rows[n];return t.id===i.id&&t.group===i.group&&t.expanded===i.expanded})||(this.rows=e,this.markDirty())}setSelected(e){this.selectedId=e,this.markDirty()}setUnit(e){const t=(this.eScroll.scrollLeft+this.eScroll.clientWidth/2)/this.dayWidth;this.unit=e,this.markDirty(),this.eScroll.scrollLeft=Math.max(0,t*this.dayWidth-this.eScroll.clientWidth/2),this.tick()}setZoom(e){const t=(this.eScroll.scrollLeft+this.eScroll.clientWidth/2)/this.dayWidth;this.zoom=Math.max(.5,Math.min(3,e)),this.markDirty(),this.eScroll.scrollLeft=Math.max(0,t*this.dayWidth-this.eScroll.clientWidth/2),this.tick()}setTheme(e){this.theme=e,this.markDirty()}get dayWidth(){return na[this.unit]*this.zoom}get scrollElement(){return this.eScroll}setScrollTop(e){this.eScroll.scrollTop=e}redraw(){this.markDirty()}markDirty(){this.dirty=!0,this.tick()}scrollToToday(e=.32){const t=this.dateX(Lt()),n=Math.max(0,t-this.eScroll.clientWidth*e);this.eScroll.scrollLeft=n}computeDomain(){let e=null,t=null;for(const o of this.tasks)!o.start||!o.end||((!e||o.start<e)&&(e=o.start),(!t||o.end>t)&&(t=o.end));const n=Lt();(!e||e>n)&&(e=n),(!t||t<n)&&(t=n);const i=sn(De(Pe(e),-7));this.epochStart=i,this.totalDays=Math.max(je(i,Pe(t))+730,1095)}dateX(e){return je(this.epochStart,e)*this.dayWidth}resizeCanvases(){const e=window.devicePixelRatio||1;for(const[t,n]of[[this.eCanvas,this.ctx],[this.eRuler,this.rulerCtx]]){const i=t===this.eRuler?this.eHeader.clientWidth:this.eScroll.clientWidth,o=t===this.eRuler?this.eHeader.clientHeight:this.eScroll.clientHeight;t.width=Math.max(1,Math.round(i*e)),t.height=Math.max(1,Math.round(o*e)),t.style.width=`${i}px`,t.style.height=`${o}px`,n.setTransform(e,0,0,e,0,0)}this.markDirty()}draw(){const e=this.dayWidth,t=this.options.rowHeight,n=this.totalDays*e,i=Math.max(this.rows.length*t,1);this.eSpacer.style.width=`${n}px`,this.eSpacer.style.height=`${i}px`,this.drawRuler(e,n),this.drawBody(e,n,i,t)}drawRuler(e,t){const n=this.rulerCtx,i=this.eHeader.clientWidth,o=this.eHeader.clientHeight,a=this.eScroll.scrollLeft;n.clearRect(0,0,i,o),n.fillStyle="#fff",n.fillRect(0,0,i,o);const l=De(this.epochStart,this.totalDays),r=(p,h,u,f)=>{for(const g of p){const v=this.dateX(tt(g.start))-a,m=je(g.start,g.end)*e;if(v+m<=0||v>=i)continue;const w=Math.max(0,Math.min(v+m,i)-Math.max(0,v));if(this.unit==="day"||this.unit==="week"){const b=g.start.getDay();(b===0||b===6)&&(n.fillStyle=Le.weekend,n.fillRect(Math.max(0,v),h,w,u))}const k=n.measureText(g.primary).width;if(k+8<w){const b=Math.max(0,v)+w/2-k/2,N=h+u/2+5;n.fillStyle=Le.text,n.font="11px "+Ye,n.textAlign="left",n.textBaseline="alphabetic",n.fillText(g.primary,b,N),g.secondary&&(n.fillStyle=Le.textTertiary,n.font="10px "+Ye,n.fillText(g.secondary,b,N+12))}}},d=40,c=De(this.epochStart,Math.floor(a/e));n.fillStyle=Le.text,n.font="14px "+Ye,n.textAlign="left",n.textBaseline="middle",n.fillText(this.unit==="day"||this.unit==="week"||this.unit==="biweek"?`${c.getFullYear()}年${c.getMonth()+1}月`:`${c.getFullYear()} 年`,16,22),r(ai(this.unit,this.epochStart,l),d+1,o-d-1),n.strokeStyle=Le.border,n.beginPath(),n.moveTo(0,o-.5),n.lineTo(i,o-.5),n.stroke()}drawBody(e,t,n,i){const o=this.ctx,a=this.eScroll.clientWidth,l=this.eScroll.clientHeight,r=this.eScroll.scrollLeft,d=this.eScroll.scrollTop;o.clearRect(0,0,a,l),o.fillStyle="#fff",o.fillRect(0,0,a,l),o.save(),o.translate(-r,-d),this.hits=[],this.hitsByRow.clear(),this.drawWeekends(e,t,Math.max(n,d+l)),this.drawGridlines(e,t,Math.max(n,d+l)),this.drawRowBackgrounds(t,i);const c=this.rows.findIndex(h=>h.id===this.hoverId),p=this.hoverId?this.tasksById.get(this.hoverId):null;if(c>=0&&(p==null?void 0:p.kind)==="task"&&!p.start){const h=c*i+6;o.fillStyle="#fff",o.strokeStyle="#dee0e3",o.lineWidth=1,ft(o,r+4,h,Math.max(0,a-8),28,4),o.fill(),o.stroke(),o.fillStyle=Le.textTertiary,o.font="14px "+Ye,o.textAlign="center",o.fillText("新建排期",r+a/2,h+19)}this.drawDependencies(i),this.drawBars(i),this.drawTodayLine(t,Math.max(n,d+l)),o.restore(),this.drawTodayLabel(),this.drawLocateButtons(),this.updateRulerTools()}drawWeekends(e,t,n){if(this.unit!=="day"&&this.unit!=="week")return;const i=this.ctx;i.fillStyle=Le.weekend;let o=sn(this.epochStart);for(;je(this.epochStart,o)<this.totalDays;){const a=this.dateX(tt(o))+5*e;a<t&&i.fillRect(Math.max(0,a),0,e*2,n),o=De(o,7)}}drawGridlines(e,t,n){const i=this.ctx,o=De(this.epochStart,this.totalDays);for(const a of ai(this.unit,this.epochStart,o)){const l=Math.round(this.dateX(tt(a.start)))+.5;if(l<0||l>t)continue;const r=this.unit==="day"&&a.start.getDate()===1;i.strokeStyle=r?Le.gridlineMonth:Le.gridline,i.beginPath(),i.moveTo(l,0),i.lineTo(l,n),i.stroke()}}drawRowBackgrounds(e,t){const n=this.ctx;n.strokeStyle=Le.rowLine,n.lineWidth=1,n.beginPath();for(let i=1;i<this.rows.length;i++){const o=Math.round(i*t)+.5;n.moveTo(0,o),n.lineTo(e,o)}n.stroke(),this.rows.forEach((i,o)=>{const a=this.selectedId===i.id,l=this.hoverId===i.id;(a||l)&&(n.fillStyle=a?Le.selected:l?Le.hover:Le.groupRow,n.fillRect(0,o*t,e,t))})}drawTodayLine(e,t){const n=this.ctx,i=Math.round(this.dateX(Lt())+this.dayWidth/2)+.5;i<0||i>e||(n.strokeStyle=Le.accent,n.lineWidth=1.5,n.beginPath(),n.moveTo(i,0),n.lineTo(i,t),n.stroke(),this.todayLabelX=i-this.eScroll.scrollLeft)}drawTodayLabel(){this.eTodayBadge.hidden=this.todayLabelX<0||this.todayLabelX>this.eScroll.clientWidth,this.eTodayBadge.textContent=Lt().slice(5),this.eTodayBadge.style.left=`${this.todayLabelX-25}px`,this.eTodayBadge.style.top=`${this.eHeader.clientHeight-10}px`}drawDependencies(e){const t=new Map(this.rows.map((i,o)=>[i.id,o])),n=this.ctx;n.strokeStyle=Le.accent,n.lineWidth=1.2;for(const i of this.rows){const o=this.tasksById.get(i.id);if(!o||o.kind!=="task"||!o.start||!o.end)continue;const a=t.get(i.id);if(a!==void 0)for(const l of o.dependsOn){const r=this.tasksById.get(l),d=t.get(l);if(!(r!=null&&r.start)||!r.end||d===void 0)continue;const c=this.dateX(r.start),p=r.milestone?this.dayWidth:Math.max(je(Pe(r.start),Pe(r.end))*this.dayWidth+this.dayWidth,this.dayWidth*.6),h=c+p,u=d*e+e/2,f=this.dateX(o.start),g=Math.max(je(Pe(o.start),Pe(o.end))*this.dayWidth+this.dayWidth,this.dayWidth*.6),v=a*e+e/2,m=h+10;if(f-4>m)di(n,h,u,m,v,f-5,v);else{const w=f+g+10;di(n,h,u,m,v,w,v)}ra(n,f-5,v)}}}drawBars(e){this.rows.forEach((t,n)=>{const i=this.tasksById.get(t.id);if(!i||!i.start||i.path.length>1&&(!this.showChildren||this.milestonesOnly&&!i.milestone))return;const o=n*e+(e-_e)/2;if(t.group){this.drawSummaryBar(i,n,o);return}if(i.milestone){this.drawMilestone(i,n,o);return}i.end&&this.drawTaskBar(i,n,o)})}drawTaskBar(e,t,n){var u;const i=this.ctx,o=((u=this.ghost)==null?void 0:u.id)===e.id?this.ghost:null,a=(o==null?void 0:o.start)??e.start,l=(o==null?void 0:o.end)??e.end,r=this.dateX(a),d=Math.max(28,(je(a,l)+1)*this.dayWidth),c=zt[e.status];i.save(),i.globalAlpha=this.selectedId===e.id||this.hoverId===e.id?1:.55,i.fillStyle=this.theme==="color"?"#eaf2ff":"#fff",i.strokeStyle=this.selectedId===e.id?Le.accent:"#dee0e3",i.lineWidth=1,ft(i,r,n,d,_e,4),i.fill(),i.stroke(),i.save(),ft(i,r,n,d,_e,4),i.clip(),i.beginPath(),i.arc(r+14,n+14,6,0,Math.PI*2),i.fillStyle=c,i.fill(),i.font="12px "+Ye,i.textBaseline="middle",i.textAlign="left",i.fillStyle=Le.text;const p=this.options.members.find(f=>f.id===e.owner),h=i.measureText(e.name).width;d>h+58?(i.fillText(e.name,r+26,n+14),p&&on(i,r+h+42,n+14,7,_t(p.id),p.name.slice(0,1))):p&&d>46&&on(i,r+38,n+14,7,_t(p.id),p.name.slice(0,1)),d>100&&(i.fillStyle=Le.textTertiary,i.textAlign="right",i.fillText(String(ia(Pe(a),Pe(l))),r+d-8,n+14)),i.restore(),i.restore(),this.pushHit({id:e.id,rowIndex:t,kind:"task",x:r,y:n,w:d,h:_e,mode:"move",avatar:p?{x:r+(d>h+58?h+42:38),y:n+14,r:7}:void 0})}drawSummaryBar(e,t,n){if(!e.start||!e.end)return;const i=this.tasks.filter(c=>c.path.length===e.path.length+1&&c.path.slice(0,-1).join("/")===e.path.join("/")&&c.start),o=i[0],a=this.ctx,l=this.dateX(e.start),r=Math.max(92,(je(e.start,e.end)+1)*this.dayWidth);a.fillStyle=this.theme==="color"?"#0565db":"#fff",a.strokeStyle=this.selectedId===e.id?Le.accent:"#dee0e3",a.lineWidth=1,ft(a,l,n,r,_e,4),a.fill(),a.stroke(),a.fillStyle=o?zt[o.status]:zt[e.status],a.beginPath(),a.arc(l+14,n+14,5,0,Math.PI*2),a.fill(),a.fillStyle=this.theme==="color"?"#fff":Le.text,a.font="11px "+Ye,a.textAlign="left",a.textBaseline="middle";const d=((o==null?void 0:o.name)??e.name)+(i.length>1?` +${i.length-1}`:"");a.fillText(aa(a,d,r-32),l+25,n+14),this.pushHit({id:e.id,rowIndex:t,kind:"summary",x:l,y:n,w:r,h:_e,mode:"move"})}drawMilestone(e,t,n){var v;const i=this.ctx,o=this.dayWidth,a=((v=this.ghost)==null?void 0:v.id)===e.id?this.ghost:null,l=a?a.start:e.start,r=ta(e),d=zt[r],c=this.dateX(l)+o/2;i.font="12px "+Ye;const p=i.measureText(e.name).width,h=e.owner?24:0,u=19+p+h+14,f=c-u/2;i.fillStyle="#fff",i.strokeStyle=d,i.lineWidth=1.5,ft(i,f,n,u,_e,4),i.fill(),i.stroke(),i.fillStyle=d,i.beginPath(),i.arc(f+7+3,n+_e/2,3,0,Math.PI*2),i.fill(),i.fillStyle=Le.text,i.textAlign="left",i.textBaseline="middle",i.fillText(e.name,f+14+5,n+_e/2+1);let g;if(e.owner){const m=this.options.members.find(w=>w.id===e.owner);m&&(on(i,f+u-12,n+_e/2,9,_t(m.id),m.name.slice(0,1)),g={x:f+u-12,y:n+_e/2,r:9})}this.pushHit({id:e.id,rowIndex:t,kind:"milestone",x:f,y:n,w:u,h:_e,mode:"move",avatar:g})}pushHit(e){this.hits.push(e);const t=this.hitsByRow.get(e.rowIndex);t?t.push(e):this.hitsByRow.set(e.rowIndex,[e])}drawLocateButtons(){this.locateHits=[];const e=this.ctx,t=this.eScroll.scrollLeft,n=this.eScroll.clientWidth;this.rows.forEach((i,o)=>{const a=this.tasksById.get(i.id);if(!(a!=null&&a.start)||!a.end||a.path.length>1&&(!this.showChildren||this.milestonesOnly&&!a.milestone))return;const l=this.dateX(a.start),r=this.dateX(a.end)+this.dayWidth;if(r>=t&&l<=t+n)return;const d=r<t?10:n-18,c=o*this.options.rowHeight-this.eScroll.scrollTop+this.options.rowHeight/2;c<0||c>this.eScroll.clientHeight||(e.fillStyle="#8f959e",ft(e,d-5,c-6,13,13,3),e.fill(),e.font="12px "+Ye,e.textAlign="center",e.textBaseline="middle",e.fillStyle="#fff",e.fillText(r<t?"‹":"›",d+1,c),this.locateHits.push({id:a.id,x:d+1,y:c}))})}pointAt(e,t){const n=this.eScroll.getBoundingClientRect();return{x:e-n.left+this.eScroll.scrollLeft,y:t-n.top+this.eScroll.scrollTop}}hitAt(e,t){const n=this.pointAt(e,t),i=Math.floor(n.y/this.options.rowHeight),o=this.hitsByRow.get(i)??[];for(const a of o){if(a.avatar){const l=n.x-a.avatar.x,r=n.y-a.avatar.y;if(l*l+r*r<=a.avatar.r*a.avatar.r)return{hit:a,rowIndex:i,onAvatar:!0}}if(n.x>=a.x&&n.x<=a.x+a.w&&n.y>=a.y&&n.y<=a.y+a.h){const l=a.kind==="task"&&n.x<=a.x+ri,r=a.kind==="task"&&n.x>=a.x+a.w-ri;return{hit:{...a,mode:l?"resize-l":r?"resize-r":"move"},rowIndex:i,onAvatar:!1}}}return{hit:null,rowIndex:i,onAvatar:!1}}buildRulerTools(){this.eRulerTools=document.createElement("div"),this.eRulerTools.className="gt-ruler-tools",this.eHeader.appendChild(this.eRulerTools);const e=document.createElement("button");e.type="button",e.className="gt-ruler-btn gt-ruler-step",this.eStepLabel=document.createElement("span"),this.eStepLabel.className="gt-ruler-step-label",this.eStepLabel.textContent=qt[this.unit];const t=document.createElement("span");t.className="gt-ruler-caret",t.textContent="▾",e.append(this.eStepLabel,t),e.addEventListener("click",o=>{o.stopPropagation(),this.toggleStepMenu()}),this.eRulerTools.appendChild(e);const n=this.toolButton("−","缩小",()=>this.zoomBy(-.25));this.eZoomValue=document.createElement("span"),this.eZoomValue.className="gt-ruler-zoom-value",this.eZoomValue.textContent=`${Math.round(this.zoom*100)}%`;const i=this.toolButton("+","放大",()=>this.zoomBy(.25));this.eRulerTools.append(n,i),this.eRulerTools.append(this.toolButton("今天","回到今天",()=>this.scrollToToday()),this.toolButton("‹","向左翻页",()=>this.pageBy(-.8)),this.toolButton("›","向右翻页",()=>this.pageBy(.8)))}toolButton(e,t,n){const i=document.createElement("button");return i.type="button",i.className="gt-ruler-btn gt-ruler-icon",e==="今天"&&(i.className="gt-ruler-btn gt-ruler-today"),i.textContent=e,i.title=t,i.addEventListener("click",o=>{o.stopPropagation(),n()}),i}zoomBy(e){this.setZoom(this.zoom+e)}pageBy(e){const t=this.totalDays*this.dayWidth-this.eScroll.clientWidth,n=this.eScroll.scrollLeft+this.eScroll.clientWidth*e;this.eScroll.scrollLeft=Math.max(0,Math.min(t,n))}toggleStepMenu(){if(this.eStepMenu){this.closeStepMenu();return}const e=document.createElement("div");e.className="gt-step-menu";for(const i of oi){const o=document.createElement("div");o.className="gt-step-item",o.setAttribute("role","menuitemradio"),o.setAttribute("aria-checked",String(i===this.unit)),o.tabIndex=0,o.addEventListener("keydown",a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),this.setUnit(i),this.closeStepMenu())}),i===this.unit&&o.classList.add("gt-step-item-active"),o.textContent=qt[i],o.addEventListener("click",a=>{a.stopPropagation(),this.setUnit(i),this.closeStepMenu()}),e.appendChild(o)}const t=this.eRulerTools.getBoundingClientRect(),n=this.eRoot.getBoundingClientRect();e.style.right=`${Math.max(0,n.right-t.right)}px`,e.style.top=`${t.bottom-n.top+4}px`,this.eRoot.appendChild(e),this.eStepMenu=e,document.addEventListener("mousedown",this.onDocumentMouseDown)}closeStepMenu(){var e;(e=this.eStepMenu)==null||e.remove(),this.eStepMenu=null,document.removeEventListener("mousedown",this.onDocumentMouseDown)}updateRulerTools(){this.eStepLabel.textContent=qt[this.unit],this.eZoomValue.textContent=`${Math.round(this.zoom*100)}%`}openAssigneePopup(e,t){this.closeAssigneePopup();const n=this.tasksById.get(e);if(!n)return;const i=document.createElement("div");i.className="gt-popup";const o=document.createElement("div");o.className="gt-popup-title",o.textContent="更换负责人",i.appendChild(o);for(const d of this.options.members){const c=document.createElement("div");c.className="gt-popup-item",n.owner===d.id&&c.classList.add("gt-popup-item-active");const p=document.createElement("span");p.className="gt-avatar",p.textContent=d.name.slice(0,1),p.style.backgroundColor=_t(d.id);const h=document.createElement("span");h.textContent=d.name,c.append(p,h),c.addEventListener("click",u=>{u.stopPropagation(),this.closeAssigneePopup(),this.options.onAssign(e,d.id)}),i.appendChild(c)}if(n.owner){const d=document.createElement("div");d.className="gt-popup-item gt-popup-clear",d.textContent="取消负责人",d.addEventListener("click",c=>{c.stopPropagation(),this.closeAssigneePopup(),this.options.onAssign(e,null)}),i.appendChild(d)}const a=this.eRoot.getBoundingClientRect(),l=t.x+t.w-this.eScroll.scrollLeft,r=t.y-this.eScroll.scrollTop;i.style.left=`${Math.min(a.width-150,Math.max(0,l-40))}px`,i.style.top=`${r+t.h+6}px`,this.eRoot.appendChild(i),this.ePopup=i,document.addEventListener("mousedown",this.onDocumentMouseDown)}closeAssigneePopup(){var e;(e=this.ePopup)==null||e.remove(),this.ePopup=null,document.removeEventListener("mousedown",this.onDocumentMouseDown)}}const Ye="-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Roboto, Helvetica, Arial, sans-serif";function ft(s,e,t,n,i,o){const a=Math.max(0,n),l=Math.max(0,i);if(a===0||l===0)return;const r=Math.max(0,Math.min(o,a/2,l/2));s.beginPath(),s.moveTo(e+r,t),s.lineTo(e+a-r,t),s.arcTo(e+a,t,e+a,t+r,r),s.lineTo(e+a,t+l-r),s.arcTo(e+a,t+l,e+a-r,t+l,r),s.lineTo(e+r,t+l),s.arcTo(e,t+l,e,t+l-r,r),s.lineTo(e,t+r),s.arcTo(e,t,e+r,t,r),s.closePath()}function on(s,e,t,n,i,o){s.beginPath(),s.arc(e,t,n,0,Math.PI*2),s.fillStyle=i,s.fill(),s.lineWidth=1.5,s.strokeStyle="#fff",s.stroke(),s.fillStyle="#fff",s.font=`10px ${Ye}`,s.textAlign="center",s.textBaseline="middle",s.fillText(o,e,t+1)}function aa(s,e,t){if(t<=0)return"";if(s.measureText(e).width<=t)return e;let n=e.length;for(;n>1;){n--;const i=`${e.slice(0,n)}…`;if(s.measureText(i).width<=t)return i}return"…"}function di(s,e,t,n,i,o,a){const r=i>t?1:-1;s.beginPath(),s.moveTo(e,t),s.lineTo(n-5,t),s.quadraticCurveTo(n,t,n,t+5*r),s.lineTo(n,i-5*r),s.quadraticCurveTo(n,i,n+5*r,i),s.lineTo(o,a),s.stroke()}function ra(s,e,t){s.fillStyle=Le.accent,s.beginPath(),s.moveTo(e+5,t),s.lineTo(e-1,t-3.5),s.lineTo(e-1,t+3.5),s.closePath(),s.fill()}const ci=["#7e80e7","#47a8f8","#87cf2b","#f3a23a","#e46ba6","#00c2c7","#ff6b6b","#a86dd7"];function _t(s){let e=0;for(let t=0;t<s.length;t++)e=e*31+s.charCodeAt(t)>>>0;return ci[e%ci.length]}const la={sort:"排序",sortAscending:"升序排列",sortDescending:"降序排列",columnSize:"列宽",autosizeThisColumn:"自适应列宽",autosizeAllColumns:"自适应所有列宽",pinColumn:"固定列",pinLeft:"固定到左侧",noPin:"取消固定",pinRight:"固定到右侧",filter:"筛选",openFilter:"打开筛选",openMultiFilter:"打开多选筛选",openAdvancedFilter:"打开高级筛选",clearFilter:"清除筛选",formula:"公式",addFormula:"添加公式…",editFormula:"编辑公式…",visibility:"列显示",hideColumn:"隐藏此列",chooseColumns:"选择显示的列…",openFilterTitle:"打开筛选",openMenuTitle:"打开菜单",copy:"复制",copyWithHeaders:"复制(含表头)",paste:"粘贴",export:"导出",csvExport:"导出 CSV",excelExport:"导出 Excel",resetColumns:"重置列",sizeToFit:"适应宽度",expandAll:"展开全部",collapseAll:"收起全部",pinRow:"固定行",pinToTop:"固定到顶部",pinToBottom:"固定到底部",unpin:"取消固定",filterOoo:"筛选…",apply:"应用",clear:"清除",searchOoo:"搜索…",noMatches:"无匹配项",selectAll:"全选",clearAll:"清除全部",join:"组合方式:",and:"且",or:"或",from:"从",to:"到",secondValue:"第二个值",value:"值",removeFilter:"移除筛选",addFilter:"+ 添加筛选",advancedFilter:"高级筛选",addCondition:"+ 添加条件",condTrue:"是",condFalse:"否",contains:"包含",notEqual:"不等于",startsWith:"开头是",endsWith:"结尾是",equals:"等于",blank:"为空",notBlank:"不为空",greaterThan:"大于",greaterThanOrEqual:"大于等于",lessThan:"小于",lessThanOrEqual:"小于等于",inRange:"介于",columns:"列",filters:"筛选",charts:"图表",rowGroups:"行分组",dragColumnsHere:"拖拽列到此处进行分组",searchColumns:"搜索列…",noMatchingColumns:"没有匹配的列",groupByThisColumn:"按此列分组",pinColumnTitle:"固定列",remove:"移除",page:"第",pageSize:"每页条数:",find:"在表格中查找…",matchCase:"区分大小写",of:"/",loadingOoo:"加载中…",noRowsToShow:"暂无数据",formulaPlaceholder:"例如 =price * quantity"};function da(s,e){const t=document.createElement("section");t.className="rowvia-gantt",t.innerHTML=`<div class="gantt-app">
|
|
26
|
+
`))?`"${o.replace(/"/g,'""')}"`:o}).join(t)}getDataAsExcel(e={}){const t=this.getExportColumns(e),n=this.getExportRows(e),i=[];e.skipHeader||i.push(t.map(o=>({value:o.headerName||o.field||o.colId,bold:!0})));for(const o of n)i.push(t.map(a=>{let r=ke(a,o,this.grid.getApi());const l=this.groupValue(a,o);return l!==void 0&&(r=l),r instanceof Date&&(r=r.toISOString().slice(0,10)),{value:r}}));return ra([{name:e.sheetName||"Sheet1",rows:i}])}exportToCsv(e={}){const t=this.getDataAsCsv(e);this.download(new Blob([t],{type:"text/csv;charset=utf-8;"}),this.fileName(e,"csv"))}exportToExcel(e={}){const t=this.getDataAsExcel(e);this.download(t,this.fileName(e,"xlsx"))}getDataAsPdf(e={}){var f;const t=this.getExportColumns(e),n=this.getExportRows(e),i=t.map(g=>Math.max(60,Math.min(220,this.grid.getColumnModel().measureTextWidth(g.headerName)+24))),o=[],a=[];e.skipHeader||(o.push(t.map(g=>({text:e.processHeaderCallback?e.processHeaderCallback({column:g,api:this.grid.getApi()}):g.headerName||g.field||g.colId,bold:!0,align:g.type==="numberColumn"||g.cellDataType===!0?"right":"left"}))),a.push([.94,.95,.97]));for(const g of n)(f=e.shouldRowBeSkipped)!=null&&f.call(e,{node:g,api:this.grid.getApi()})||(o.push(t.map(v=>{let m=this.getCellValueForExport(v,g,e);if(e.processCellCallback){const b=e.processCellCallback({value:ke(v,g,this.grid.getApi()),formattedValue:m,node:g,column:v,api:this.grid.getApi()});b!=null&&(m=String(b))}return{text:m,align:v.type==="numberColumn"||v.cellDataType===!0?"right":"left"}})),a.push(void 0));const r=18,l=e.pageSize||"a4-landscape",[d,c]=l.includes("portrait")?[595,842]:[842,595],p=c-64-(e.title?24:0),h=Math.max(5,Math.floor(p/r)),u=[];o.length===0&&u.push({columnWidths:i,rows:[],rowFill:[]});for(let g=0;g<o.length;g+=h)u.push({columnWidths:i,rows:o.slice(g,g+h),rowFill:a.slice(g,g+h)});return Xo(u,{pageSize:l,title:e.title})}exportToPdf(e={}){const t=this.getDataAsPdf(e);this.download(t,this.fileName(e,"pdf"))}async importExcel(e,t={}){const n=e instanceof ArrayBuffer?e:await e.arrayBuffer(),o=(await ea(n))[t.sheetIndex??0];if(!o||o.rows.length===0)return[];const a=o.rows[0],r=o.rows.slice(1).map(l=>{const d={};return a.forEach((c,p)=>{const h=c||`col${p+1}`,u=l[p]??"",f=String(u).trim();d[h]=f!==""&&!isNaN(Number(f))&&!/^0\d/.test(f)?Number(f):u}),d});return t.onSuccess?t.onSuccess(r):this.grid.getApi().setRowData(r),this.grid.getEventService().dispatchEvent("excelImportFinished",{rows:r}),r}fileName(e,t){const n=e.fileName||this.grid.getOptions().fileName||"export";return n.endsWith(`.${t}`)?n:`${n}.${t}`}download(e,t){const n=URL.createObjectURL(e),i=document.createElement("a");i.href=n,i.download=t,document.body.appendChild(i),i.click(),document.body.removeChild(i),setTimeout(()=>URL.revokeObjectURL(n),1e3)}copyToClipboard(e={}){const t={onlySelected:!0,skipHeader:!e.includeHeaders,suppressQuotes:!0,columnSeparator:" ",...e},n=this.getDataAsCsv(t);this.lastCopied=n,this.writeToClipboard(n),this.grid.getEventService().dispatchEvent("pasteStart",{}),this.grid.getEventService().dispatchEvent("pasteEnd",{})}cutToClipboard(e={}){this.copyToClipboard(e);const t=this.getExportRows({onlySelected:!0,skipGroups:!0,skipFooters:!0,...e});t.length&&this.grid.getApi().applyTransaction({remove:t.map(n=>n.data)})}pasteFromClipboard(){navigator.clipboard&&navigator.clipboard.readText?navigator.clipboard.readText().then(e=>this.pasteText(e),()=>{this.lastCopied&&this.pasteText(this.lastCopied)}):this.lastCopied&&this.pasteText(this.lastCopied)}pasteText(e){const t=this.grid.getEditService().getFocusedCell(),n=this.grid.getRangeSelectionService().getRanges();let i,o;if(n.length>0){const p=n[0];i=p.rowStartIndex;const h=this.grid.getColumns().center,u=h.findIndex(f=>f.colId===p.colStartId);o=h[u]??h[0]}else if(t)i=t.rowIndex,o=t.column;else return;const a=e.replace(/\r/g,"").split(`
|
|
27
|
+
`);a.length&&a[a.length-1]===""&&a.pop();const r=[...this.grid.getColumns().left,...this.grid.getColumns().center,...this.grid.getColumns().right],l=r.findIndex(p=>p.colId===o.colId),d=[],c=[];a.forEach((p,h)=>{const u=p.split(" "),f=i+h,g=this.grid.getDisplayedRowAtIndex(f);if(!g){const v={};u.forEach((m,b)=>{const k=r[l+b];k!=null&&k.field&&(v[k.field]=m)}),c.push(v);return}u.forEach((v,m)=>{const b=r[l+m];b&&this.grid.setCellValue(b,g,v,"paste")}),d.push(g)}),c.length&&this.grid.getApi().applyTransaction({add:c}),d.length&&this.grid.refreshCells({rowNodes:d,flash:!0})}writeToClipboard(e){const t=()=>{this.grid.getEventService().dispatchEvent("cutEnd",{})};navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(e).then(t,()=>this.fallbackCopy(e,t)):this.fallbackCopy(e,t)}fallbackCopy(e,t){const n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.opacity="0",document.body.appendChild(n),n.select();try{document.execCommand("copy")}catch{}document.body.removeChild(n),t()}}const Pt=["contains","equals","notEqual","startsWith","endsWith","blank","notBlank"],Ht=["equals","notEqual","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","inRange","blank","notBlank"];class da{constructor(e,t){this.grid=e,this.popupService=t}openFilter(e,t){var g,v;if(typeof e.colDef.filterComponent=="function"){this.openCustomFilter(e,t);return}if(e.filter==="multi"){this.openMultiFilter(e,t);return}const n=e.filter===!0?"text":e.filter,i=this.grid.getFilterService().getFilterInstance(e.colId),o=n==="set"?260:240,{ePopup:a}=this.popupService.createPopup(o,"ag-filter-popup");a.innerHTML="";const r=document.createElement("div");r.className="ag-popup-title",r.textContent=`Search ${e.headerName||e.field||""}`,a.appendChild(r);const l=i?{...i}:this.getDefaultModel(n);let d=i?{...i}:null;const c=()=>{d&&this.isMeaningful(d)?this.grid.getFilterService().setColumnFilterModel(e,d):this.grid.getFilterService().setColumnFilterModel(e,null),close()},p=()=>{this.grid.getFilterService().setColumnFilterModel(e,null),close()};if(n==="set")a.appendChild(this.buildSetFilter(e,l,m=>{d=m}));else if(n==="boolean"){const m=this.buildConditionSelect(["true","false"],String(l.filter??""),b=>{d={filterType:"boolean",filter:b==="true"}});a.appendChild(m)}else{const m=n==="number"?Ht:Pt,b=this.buildConditionSelect(m,l.type||m[0],k=>{l.type=k,d={...l}});if(a.appendChild(b),l.type!=="blank"&&l.type!=="notBlank")if(n==="number"&&l.type==="inRange"){const k=document.createElement("div");k.className="ag-filter-inputs";const C=document.createElement("input");C.type="number",C.className="ag-filter-input",C.value=l.filter??"",C.placeholder=this.grid.t("from"),C.addEventListener("input",()=>{d={...l,filter:C.value,filterTo:w.value}});const w=document.createElement("input");w.type="number",w.className="ag-filter-input",w.value=l.filterTo??"",w.placeholder=this.grid.t("to"),w.addEventListener("input",()=>{d={...l,filter:C.value,filterTo:w.value}}),k.appendChild(C),k.appendChild(w),a.appendChild(k)}else if(n==="date"){const k=document.createElement("div");k.className="ag-filter-inputs";const C=document.createElement("input");C.type="date",C.className="ag-filter-input",C.value=l.dateFrom??"",C.addEventListener("input",()=>{d={...l,dateFrom:C.value,dateTo:w.value}});const w=document.createElement("input");w.type="date",w.className="ag-filter-input",w.value=l.dateTo??"",w.addEventListener("input",()=>{d={...l,dateFrom:C.value,dateTo:w.value}}),k.appendChild(C),k.appendChild(w),a.appendChild(k)}else{const k=document.createElement("input");k.type=n==="number"?"number":"text",k.className="ag-filter-input",k.value=l.filter??"",k.placeholder=this.grid.t("filterOoo"),k.addEventListener("input",()=>{d={...l,filter:k.value}}),k.addEventListener("keydown",C=>{C.key==="Enter"&&c()}),a.appendChild(k),setTimeout(()=>k.focus(),0)}else d={...l}}if(n==="text"||n==="number"){const m=document.createElement("div");m.className="ag-filter-second-condition";const b=document.createElement("select");b.className="ag-filter-condition",b.innerHTML=`<option value="AND">${this.grid.t("and")}</option><option value="OR">${this.grid.t("or")}</option>`,b.value=l.operator||"AND",m.appendChild(b);const k=this.buildConditionSelect(n==="number"?Ht:Pt,((g=l.condition2)==null?void 0:g.type)||(n==="number"?Ht:Pt)[0],w=>{d||(d={...l}),d.condition2={...d.condition2,type:w}});m.appendChild(k);const C=document.createElement("input");C.type=n==="number"?"number":"text",C.className="ag-filter-input",C.placeholder=this.grid.t("secondValue"),C.value=((v=l.condition2)==null?void 0:v.filter)??"",C.addEventListener("input",()=>{d||(d={...l}),d.condition2={...d.condition2,filter:C.value}}),m.appendChild(C),a.appendChild(m),b.addEventListener("change",()=>{d||(d={...l}),d.operator=b.value})}const h=document.createElement("div");h.className="ag-popup-buttons";const u=document.createElement("button");u.className="ag-button ag-button-primary",u.textContent=this.grid.t("apply"),u.addEventListener("click",c);const f=document.createElement("button");f.className="ag-button",f.textContent=this.grid.t("clear"),f.addEventListener("click",p),h.appendChild(f),h.appendChild(u),a.appendChild(h),this.popupService.positionAt(a,t),this.grid.getEventService().dispatchEvent("filterOpened",{column:e,api:this.grid.getApi()})}buildSetFilter(e,t,n){const i=document.createElement("div");i.className="ag-set-filter";const o=document.createElement("input");o.type="text",o.className="ag-filter-input",o.placeholder=this.grid.t("search"),i.appendChild(o);const a=new Set;this.grid.getRowModel().forEachNode(g=>{!g.group&&!g.footer&&a.add(ke(e,g,this.grid.getApi()))});const l=[...a].sort((g,v)=>g===v?0:g<v?-1:1),d=document.createElement("div");d.className="ag-set-filter-list";const c=new Set((t.values||[]).map(g=>String(g))),p=()=>{d.innerHTML="";const g=o.value.toLowerCase();let v=0;for(const m of l){const b=m==null?"(Blanks)":String(m);if(g&&!b.toLowerCase().includes(g))continue;v++;const k=document.createElement("label");k.className="ag-set-filter-item";const C=document.createElement("input");C.type="checkbox",C.checked=c.has(String(m)),C.addEventListener("change",()=>{C.checked?c.add(String(m)):c.delete(String(m)),n({filterType:"set",values:[...c]})});const w=document.createElement("span");w.textContent=b,k.appendChild(C),k.appendChild(w),d.appendChild(k)}if(v===0){const m=document.createElement("div");m.className="ag-set-filter-empty",m.textContent=this.grid.t("noMatches"),d.appendChild(m)}};o.addEventListener("input",p),p();const h=document.createElement("div");h.className="ag-set-filter-actions";const u=document.createElement("button");u.className="ag-button ag-button-small",u.textContent=this.grid.t("selectAll"),u.addEventListener("click",()=>{c.clear();for(const g of l)c.add(String(g));p(),n({filterType:"set",values:[...c]})});const f=document.createElement("button");return f.className="ag-button ag-button-small",f.textContent=this.grid.t("clearAll"),f.addEventListener("click",()=>{c.clear(),p(),n({filterType:"set",values:[]})}),h.appendChild(u),h.appendChild(f),i.appendChild(d),i.appendChild(h),n({filterType:"set",values:[...c]}),i}buildConditionSelect(e,t,n){const i=document.createElement("select");i.className="ag-filter-condition";for(const o of e){const a=document.createElement("option");a.value=o;const r=po[o];a.textContent=r?this.grid.t(r):o,o===t&&(a.selected=!0),i.appendChild(a)}return i.addEventListener("change",()=>n(i.value)),i}openMultiFilter(e,t){var k;const n=this.grid.getFilterService().getFilterInstance(e.colId),i=n&&n.filterType==="multi"?n:null,o=(k=i==null?void 0:i.filterModels)!=null&&k.length?i.filterModels.map(C=>({...C})):[this.getDefaultModel(e.filter===!0?"text":String(e.filter))];let a=(i==null?void 0:i.operator)||"AND";const{ePopup:r,close:l}=this.popupService.createPopup(300,"ag-filter-popup ag-multi-filter-popup");r.innerHTML="";const d=document.createElement("div");d.className="ag-popup-title",d.textContent=`Filters for ${e.headerName||e.field||""}`,r.appendChild(d);const c=document.createElement("div");c.className="ag-multi-filter-operator";const p=document.createElement("span");p.textContent=this.grid.t("join");const h=document.createElement("select");h.className="ag-filter-condition",h.innerHTML='<option value="AND">All (AND)</option><option value="OR">Any (OR)</option>',h.value=a,h.addEventListener("change",()=>{a=h.value}),c.appendChild(p),c.appendChild(h),r.appendChild(c);const u=document.createElement("div");u.className="ag-multi-filter-list",r.appendChild(u);const f=()=>{u.innerHTML="",o.forEach((C,w)=>{const L=document.createElement("div");L.className="ag-multi-filter-row";const N=document.createElement("select");N.className="ag-filter-condition";const y=["text","number","date","set","boolean"];for(const M of y){const F=document.createElement("option");F.value=M,F.textContent=M.charAt(0).toUpperCase()+M.slice(1),M===C.filterType&&(F.selected=!0),N.appendChild(F)}N.addEventListener("change",()=>{o[w]={...this.getDefaultModel(N.value)},f()}),L.appendChild(N);const D=C.filterType==="number"?Ht:Pt,S=this.buildConditionSelect(D,C.type||D[0],M=>{o[w].type=M});if(L.appendChild(S),C.filterType!=="blank"&&C.type!=="blank"&&C.type!=="notBlank"){const M=document.createElement("input");M.type=C.filterType==="number"?"number":"text",M.className="ag-filter-input",M.value=C.filter??"",M.placeholder=this.grid.t("value"),M.addEventListener("input",()=>{o[w].filter=M.value}),L.appendChild(M)}const R=document.createElement("button");R.className="ag-button ag-button-small",R.textContent="×",R.title=this.grid.t("removeFilter"),R.addEventListener("click",()=>{o.splice(w,1),f()}),L.appendChild(R),u.appendChild(L)})};f();const g=document.createElement("button");g.className="ag-button ag-button-small",g.textContent="+ "+this.grid.t("addFilter"),g.addEventListener("click",()=>{o.push(this.getDefaultModel("text")),f()}),r.appendChild(g);const v=document.createElement("div");v.className="ag-popup-buttons";const m=document.createElement("button");m.className="ag-button ag-button-primary",m.textContent=this.grid.t("apply"),m.addEventListener("click",()=>{o.filter(w=>w.filter!==void 0&&w.filter!==""||w.type==="blank"||w.type==="notBlank").length?this.grid.getFilterService().setColumnFilterModel(e,{filterType:"multi",operator:a,filterModels:o}):this.grid.getFilterService().setColumnFilterModel(e,null),l()});const b=document.createElement("button");b.className="ag-button",b.textContent=this.grid.t("clear"),b.addEventListener("click",()=>{this.grid.getFilterService().setColumnFilterModel(e,null),l()}),v.appendChild(b),v.appendChild(m),r.appendChild(v),this.popupService.positionAt(r,t)}openAdvancedFilter(e){var k,C;const t=this.grid.getFilterService(),n=t.getAdvancedFilterModel(),i=(k=n==null?void 0:n.conditions)!=null&&k.length?n.conditions.map(w=>({...w})):[{colId:((C=this.grid.getColumns().center[0])==null?void 0:C.colId)??"",type:"contains",filter:""}];let o=(n==null?void 0:n.operator)||"AND";const{ePopup:a,close:r}=this.popupService.createPopup(420,"ag-filter-popup ag-advanced-filter-popup");a.innerHTML="";const l=document.createElement("div");l.className="ag-popup-title",l.textContent=this.grid.t("advancedFilter"),a.appendChild(l);const d=document.createElement("div");d.className="ag-advanced-filter-list",a.appendChild(d);const c=()=>[...this.grid.getColumns().left,...this.grid.getColumns().center,...this.grid.getColumns().right].filter(w=>w.filter),p=()=>{d.innerHTML="",i.forEach((w,L)=>{const N=document.createElement("div");N.className="ag-advanced-filter-row";const y=document.createElement("select");y.className="ag-filter-condition";for(const T of c()){const B=document.createElement("option");B.value=T.colId,B.textContent=T.headerName||T.field||T.colId,T.colId===w.colId&&(B.selected=!0),y.appendChild(B)}y.addEventListener("change",()=>{i[L].colId=y.value}),N.appendChild(y);const D=this.grid.getColumn(w.colId),S=D&&D.filter!==!1?String(D.filter):"text",R=S==="number"?Ht:Pt,M=this.buildConditionSelect(R,w.type||"contains",T=>{i[L].type=T});N.appendChild(M);const F=document.createElement("input");F.type=S==="number"?"number":"text",F.className="ag-filter-input",F.value=w.filter??"",F.placeholder=this.grid.t("value"),F.addEventListener("input",()=>{i[L].filter=F.value}),N.appendChild(F);const q=document.createElement("button");q.className="ag-button ag-button-small",q.textContent="×",q.addEventListener("click",()=>{i.splice(L,1),p()}),N.appendChild(q),d.appendChild(N)})};p();const h=document.createElement("button");h.className="ag-button ag-button-small",h.textContent="+ "+this.grid.t("addCondition"),h.addEventListener("click",()=>{var w;i.push({colId:((w=c()[0])==null?void 0:w.colId)??"",type:"contains",filter:""}),p()}),a.appendChild(h);const u=document.createElement("div");u.className="ag-multi-filter-operator";const f=document.createElement("span");f.textContent=this.grid.t("join");const g=document.createElement("select");g.className="ag-filter-condition",g.innerHTML='<option value="AND">All (AND)</option><option value="OR">Any (OR)</option>',g.value=o,g.addEventListener("change",()=>{o=g.value}),u.appendChild(f),u.appendChild(g),a.appendChild(u);const v=document.createElement("div");v.className="ag-popup-buttons";const m=document.createElement("button");m.className="ag-button ag-button-primary",m.textContent=this.grid.t("apply"),m.addEventListener("click",()=>{const w=i.filter(L=>L.filter!==void 0&&L.filter!=="");w.length?t.setAdvancedFilterModel({filterType:"advanced",operator:o,conditions:w}):t.setAdvancedFilterModel(null),r()});const b=document.createElement("button");b.className="ag-button",b.textContent=this.grid.t("clear"),b.addEventListener("click",()=>{t.setAdvancedFilterModel(null),r()}),v.appendChild(b),v.appendChild(m),a.appendChild(v),this.popupService.positionAt(a,e)}openCustomFilter(e,t){const n=e.colDef.filterComponent;if(typeof n!="function")return;const i=this.grid.getFilterService(),o=n({column:e,colDef:e.colDef,api:this.grid.getApi(),model:i.getFilterInstance(e.colId)??null,onModelChange:l=>i.setColumnFilterModel(e,l),onGuiAttached:()=>{}}),{ePopup:a}=this.popupService.createPopup(260,"ag-filter-popup");a.innerHTML="";const r=typeof(o==null?void 0:o.getGui)=="function"?o.getGui():o;r instanceof HTMLElement&&a.appendChild(r),typeof(o==null?void 0:o.afterGuiAttached)=="function"&&o.afterGuiAttached(),this.popupService.positionAt(a,t)}getDefaultModel(e){return e==="number"?{filterType:"number",type:"equals",filter:""}:e==="date"?{filterType:"date",dateFrom:"",dateTo:""}:e==="set"?{filterType:"set",values:[]}:e==="boolean"?{filterType:"boolean",filter:!0}:{filterType:"text",type:"contains",filter:""}}isMeaningful(e){return e.filterType==="text"?!!e.filter||e.type==="blank"||e.type==="notBlank":e.filterType==="number"?e.filter!==void 0&&e.filter!==null&&e.filter!=="":e.filterType==="date"?!!(e.dateFrom||e.dateTo):e.filterType==="set"?!!e.values&&e.values.length>0:e.filterType==="boolean"?e.filter!==void 0:!1}}class ca{constructor(e){x(this,"filterModel",{});x(this,"advancedFilterModel",null);this.grid=e}getAdvancedFilterModel(){return this.advancedFilterModel}setAdvancedFilterModel(e){this.advancedFilterModel=e,this.onFilterChanged("api")}isAdvancedFilterEnabled(){return!!this.grid.getOptions().enableAdvancedFilter}doesNodePassAdvancedFilter(e){const t=this.advancedFilterModel;if(!t||!t.conditions||t.conditions.length===0)return!0;const n=this.grid.getRowModel(),i=typeof n.doesNodePassFilterModel=="function"?n.doesNodePassFilterModel.bind(n):null,o=t.conditions.map(a=>{const r=this.grid.getColumn(a.colId);return!r||!i?!0:i(e,r,{...a,filterType:r.filter===!0?"text":r.filter})});return t.operator==="OR"?o.some(Boolean):o.every(Boolean)}getFilterModel(){return this.filterModel}getFilterInstance(e){return this.filterModel[e]}setFilterModel(e){this.filterModel=e||{},this.onFilterChanged("api")}setColumnFilterModel(e,t){const n=typeof e=="string"?e:e.colId;t==null?delete this.filterModel[n]:this.filterModel[n]=t,this.onFilterChanged("api")}isFilterActive(e){const t=this.filterModel[e.colId];return t?t.filterType==="multi"?(t.filterModels||[]).some(i=>this.isModelMeaningful(i)):this.isModelMeaningful(t):!1}isModelMeaningful(e){return e.filterType==="text"?!!e.filter:e.filterType==="number"?e.filter!==void 0&&e.filter!==null&&e.filter!=="":e.filterType==="date"?!!(e.dateFrom||e.dateTo):e.filterType==="set"?!!e.values&&e.values.length>0:e.filterType==="boolean"?e.filter!==void 0&&e.filter!==null&&e.filter!=="":!1}handleFloatingFilterChange(e,t){if(t===""||t===null||t===void 0){delete this.filterModel[e.colId],this.onFilterChanged("uiFilterModified");return}switch(e.filter){case"number":this.filterModel[e.colId]={filterType:"number",type:"equals",filter:t};break;case"date":this.filterModel[e.colId]={filterType:"date",dateFrom:t,dateTo:t};break;case"boolean":this.filterModel[e.colId]={filterType:"boolean",filter:t==="true"};break;case"set":this.filterModel[e.colId]={filterType:"set",values:[t]};break;default:this.filterModel[e.colId]={filterType:"text",type:"contains",filter:t};break}this.onFilterChanged("uiFilterModified")}resetFilters(){this.filterModel={},this.onFilterChanged("api")}onFilterChanged(e){var n,i;this.grid.getHeaderView().updateIndicators(),this.grid.refreshModel("filter");const t=this.grid.getApi();this.grid.getEventService().dispatchEvent("filterChanged",{api:t,source:e}),(i=(n=this.grid.getOptions()).onFilterChanged)==null||i.call(n,{api:t,source:e})}}class ua{constructor(e,t){x(this,"matches",[]);x(this,"activeMatch",0);x(this,"searchText","");x(this,"matchCase",!1);x(this,"ePopup",null);x(this,"eCount",null);x(this,"eInput",null);x(this,"closePopup",null);this.grid=e,this.popupService=t}isOpen(){return this.ePopup!==null}open(){var l,d;if(this.ePopup){(l=this.eInput)==null||l.focus(),(d=this.eInput)==null||d.select();return}const{ePopup:e,close:t}=this.popupService.createPopup(420,"ag-find-bar");this.ePopup=e,this.closePopup=t,e.innerHTML="";const n=document.createElement("input");n.type="text",n.className="ag-find-input",n.placeholder=this.grid.translate("find","Find in grid..."),n.value=this.searchText,this.eInput=n,e.appendChild(n);const i=document.createElement("label");i.className="ag-find-case";const o=document.createElement("input");o.type="checkbox",o.checked=this.matchCase,o.addEventListener("change",()=>{this.matchCase=o.checked,this.find(this.searchText)}),i.appendChild(o),i.appendChild(document.createTextNode(this.grid.translate("matchCase","Match case"))),e.appendChild(i);const a=document.createElement("span");a.className="ag-find-count",this.eCount=a,e.appendChild(a);const r=(c,p,h)=>{const u=document.createElement("button");return u.className="ag-button ag-button-small",u.textContent=c,u.title=p,u.addEventListener("click",h),e.appendChild(u),u};r("‹",this.grid.translate("prevMatch","上一个匹配"),()=>this.findPrevious()),r("›",this.grid.translate("nextMatch","下一个匹配"),()=>this.findNext()),r("×",this.grid.translate("close","关闭"),()=>this.close()),n.addEventListener("input",()=>this.find(n.value)),n.addEventListener("keydown",c=>{c.key==="Enter"?(c.preventDefault(),c.shiftKey?this.findPrevious():this.findNext()):c.key==="Escape"&&this.close()}),this.grid.getRootElement(),e.style.position="absolute",e.style.left="50%",e.style.top="8px",e.style.transform="translateX(-50%)",e.style.display="flex",setTimeout(()=>n.focus(),0)}close(){var e;(e=this.closePopup)==null||e.call(this),this.ePopup=null,this.closePopup=null,this.eInput=null,this.eCount=null,this.matches=[],this.applyHighlight()}setFindText(e){this.searchText=e,this.eInput&&(this.eInput.value=e),this.find(e)}getFindText(){return this.searchText}getNumMatches(){return this.matches.length}getActiveMatch(){return this.activeMatch}find(e){if(this.searchText=e,this.matches=[],this.activeMatch=0,e){const t=this.grid.getColumns().center;this.grid.getRowModel().forEachNode((n,i)=>{if(!(n.group||n.footer))for(const o of t){const a=Kt(o,n,this.grid.getApi())??"",r=this.matchCase?a:a.toLowerCase(),l=this.matchCase?e:e.toLowerCase();r.includes(l)&&this.matches.push({rowIndex:i,colId:o.colId})}})}this.eCount&&(this.eCount.textContent=this.matches.length?`${this.activeMatch+1} ${this.grid.translate("of","of")} ${this.matches.length}`:this.grid.translate("noMatches","No matches")),this.applyHighlight()}findNext(){return this.matches.length===0?!1:(this.activeMatch=(this.activeMatch+1)%this.matches.length,this.goToActive(),!0)}findPrevious(){return this.matches.length===0?!1:(this.activeMatch=(this.activeMatch-1+this.matches.length)%this.matches.length,this.goToActive(),!0)}goToActive(){var o,a;const e=this.matches[this.activeMatch];if(!e)return;this.eCount&&(this.eCount.textContent=`${this.activeMatch+1} ${this.grid.translate("of","of")} ${this.matches.length}`);const t=(a=(o=this.grid).getPaginationService)==null?void 0:a.call(o);if(t!=null&&t.isEnabled()){const r=t.getPageSize(),l=Math.floor(e.rowIndex/r);l!==t.getCurrentPage()&&t.goToPage(l)}this.grid.getApi().ensureIndexVisible(e.rowIndex,"middle"),this.applyHighlight();const n=this.grid.getDisplayedRowAtIndex(e.rowIndex),i=this.grid.getColumn(e.colId);n&&i&&this.grid.getEditService().setFocusedCell(e.rowIndex,i)}applyHighlight(){const e=this.grid.getRowRenderer().getRowComps();for(const[t,n]of e){let i=-1;this.grid.getRowModel().forEachNode((o,a)=>{o.id===t&&(i=a)});for(const o of n.getCellElements()){const a=o.dataset.colid,r=this.matches.findIndex(l=>l.rowIndex===i&&l.colId===a);o.classList.toggle("ag-find-match",r>=0),o.classList.toggle("ag-find-active-match",r>=0&&r===this.activeMatch)}}}}class ha{constructor(e,t){this.grid=e,this.popupService=t}isFormulaColumn(e){return typeof e.field=="string"&&e.field.trimStart().startsWith("=")}openFormulaEditor(e,t){const{ePopup:n,close:i}=this.popupService.createPopup(460,"ag-formula-editor");n.innerHTML="";const o=document.createElement("div");o.className="ag-popup-title",o.textContent=`${this.grid.t("formula")} - ${e.headerName||e.field}`,n.appendChild(o);const a=document.createElement("textarea");a.className="ag-formula-input",a.rows=3,a.value=this.isFormulaColumn(e)?e.field:"=",a.placeholder=this.grid.t("formulaPlaceholder"),n.appendChild(a);const r=document.createElement("div");r.className="ag-formula-preview";const l=()=>{const g=this.grid.getDisplayedRowAtIndex(0);if(!g){r.textContent="";return}try{const v=Dt(a.value,{data:g.data});r.textContent=`${this.grid.t("formulaPreview")}: ${v==null?"":String(v)}`,r.classList.remove("ag-formula-error")}catch(v){r.textContent=`${this.grid.t("formulaError")}: ${(v==null?void 0:v.code)||(v==null?void 0:v.message)||this.grid.t("invalidFormula")}`,r.classList.add("ag-formula-error")}};a.addEventListener("input",l),n.appendChild(r);const d=document.createElement("div");d.className="ag-formula-functions";const c=document.createElement("div");c.className="ag-formula-functions-title",c.textContent=this.grid.t("functions"),d.appendChild(c);const p=document.createElement("div");p.className="ag-formula-functions-list";for(const g of jt){const v=document.createElement("button");v.className="ag-button ag-button-small",v.textContent=g,v.addEventListener("click",()=>{a.value+=`${a.value.endsWith("(")||a.value==="="?"":" "}${g}()`,a.focus(),l()}),p.appendChild(v)}d.appendChild(p),n.appendChild(d);const h=document.createElement("div");h.className="ag-popup-buttons";const u=document.createElement("button");u.className="ag-button ag-button-primary",u.textContent=this.grid.t("apply"),u.addEventListener("click",()=>{const g=a.value.trim(),v=this.grid.getColumnModel(),m=v.getColumn(e.colId);m&&(m.field=g==="="||g===""?e.field:g,m.colDef={...m.colDef,field:m.field},g!=="="&&g!==""&&(m.editable=!1)),v.refreshAll(),this.grid.refreshCells({force:!0}),i()});const f=document.createElement("button");f.className="ag-button",f.textContent=this.grid.t("clear"),f.addEventListener("click",()=>{a.value="=",l()}),h.appendChild(f),h.appendChild(u),n.appendChild(h),this.popupService.positionAt(n,t),l()}}class pa{constructor(e,t){x(this,"runtimeNotes",new Map);this.grid=e,this.popupService=t}keyOf(e,t){return`${e}::${t}`}getNote(e,t,n,i){const o=this.runtimeNotes.get(this.keyOf(e,t));if(o!==void 0)return o;if(typeof n=="function")return n(i);if(typeof n=="string")return n}setNote(e,t,n){const i=this.keyOf(e,t);n==null||n===""?this.runtimeNotes.delete(i):this.runtimeNotes.set(i,n),this.grid.refreshCells({force:!0})}openNoteEditor(e,t,n){const i=this.grid.getColumn(t),o=this.grid.getRowNode(e),a=this.getNote(e,t,i==null?void 0:i.colDef.note,{data:o==null?void 0:o.data,node:o,column:i,api:this.grid.getApi()})??"",{ePopup:r,close:l}=this.popupService.createPopup(280,"ag-note-editor");r.innerHTML="";const d=document.createElement("div");d.className="ag-popup-title",d.textContent=`${this.grid.t("note")} — ${(i==null?void 0:i.headerName)||t}`,r.appendChild(d);const c=document.createElement("textarea");c.className="ag-formula-input",c.rows=4,c.value=a,c.placeholder=this.grid.t("writeNote"),r.appendChild(c);const p=document.createElement("div");p.className="ag-popup-buttons";const h=document.createElement("button");h.className="ag-button ag-button-primary",h.textContent=this.grid.t("save"),h.addEventListener("click",()=>{this.setNote(e,t,c.value.trim()||void 0),l()});const u=document.createElement("button");u.className="ag-button",u.textContent=this.grid.t("delete"),u.addEventListener("click",()=>{this.setNote(e,t,void 0),l()}),p.appendChild(u),p.appendChild(h),r.appendChild(p),this.popupService.positionAt(r,n),setTimeout(()=>c.focus(),0)}}class fa{constructor(e){x(this,"eOverlayWrapper");x(this,"current",null);this.grid=e,this.eOverlayWrapper=document.createElement("div"),this.eOverlayWrapper.className="ag-overlay",this.eOverlayWrapper.style.display="none";const t=e.getRowRenderer().getViewport();t.style.position="relative",this.eOverlayWrapper.style.position="absolute",this.eOverlayWrapper.style.inset="0",this.eOverlayWrapper.style.zIndex="10",t.appendChild(this.eOverlayWrapper)}show(e,t){this.current=e,this.eOverlayWrapper.innerHTML="";const n=document.createElement("div");n.className=`ag-overlay-${e==="loading"?"loading":"no-rows"}-wrapper`;const i=document.createElement("div");if(i.className="ag-overlay-text",i.textContent=t,e==="loading"){const o=document.createElement("div");o.className="ag-overlay-loading-spinner",n.appendChild(o)}n.appendChild(i),this.eOverlayWrapper.appendChild(n),this.eOverlayWrapper.style.display="flex"}showLoadingOverlay(){this.show("loading",this.grid.translate("loadingOoo","Loading..."))}showNoRowsOverlay(){this.show("noRows",this.grid.translate("noRowsToShow","No Rows To Show"))}hideOverlay(){this.current=null,this.eOverlayWrapper.style.display="none",this.eOverlayWrapper.innerHTML=""}updateAuto(){const e=this.grid.getRowModel();if(!!this.grid.getOptions().__loadingRows){this.showLoadingOverlay();return}e.getRowCount()===0?this.show("noRows",this.grid.translate("noRowsToShow","No Rows To Show")):this.hideOverlay()}getCurrent(){return this.current}}class Ci{constructor(e,t){x(this,"enabled");x(this,"pageSize");x(this,"currentPage",0);x(this,"pageSizeSelector");x(this,"ePanel");x(this,"ePageInfo");x(this,"ePageInput");x(this,"ePageSizeContainer");x(this,"eFromToContainer");this.grid=e,this.eventService=t;const n=e.getOptions();this.enabled=n.pagination===!0,this.pageSize=n.paginationPageSize??100,this.pageSizeSelector=n.paginationPageSizeSelector??[20,50,100,500,1e3],this.ePanel=document.createElement("div"),this.ePanel.className="ag-pagination-panel",this.enabled||(this.ePanel.style.display="none");const i=document.createElement("div");i.className="ag-pagination-buttons",this.ePanel.appendChild(i),this.ePageSizeContainer=document.createElement("div"),this.ePageSizeContainer.className="ag-pagination-page-size",i.appendChild(this.ePageSizeContainer),this.eFromToContainer=document.createElement("span"),this.eFromToContainer.className="ag-pagination-from-to",i.appendChild(this.eFromToContainer);const o=document.createElement("span");if(o.className="ag-pagination-page-label",o.textContent=`${this.grid.translate("page","Page")}`,i.appendChild(o),this.ePageInput=document.createElement("input"),this.ePageInput.className="ag-pagination-page-input",this.ePageInput.type="number",this.ePageInput.min="1",this.ePageInput.value="1",this.ePageInput.title=this.grid.translate("pageNumber","输入页码"),this.ePageInput.addEventListener("change",()=>{const a=parseInt(this.ePageInput.value,10);isNaN(a)||this.goToPage(a-1)}),i.appendChild(this.ePageInput),this.ePageInfo=document.createElement("span"),this.ePageInfo.className="ag-pagination-info",i.appendChild(this.ePageInfo),this.pageSizeSelector){const a=this.ePageSizeContainer,r=document.createElement("span");r.textContent=`${this.grid.translate("pageSize","Page Size:")}`,a.appendChild(r);const l=document.createElement("select");l.className="ag-pagination-page-size-select";const d=this.pageSizeSelector===!0?[20,50,100,500,1e3]:this.pageSizeSelector;for(const c of d){const p=document.createElement("option");p.value=String(c),p.textContent=String(c),c===this.pageSize&&(p.selected=!0),l.appendChild(p)}l.addEventListener("change",()=>this.setPageSize(parseInt(l.value,10))),a.appendChild(l)}e.getRootElement().appendChild(this.ePanel),this.update()}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e,this.ePanel.style.display=e?"":"none",e||(this.currentPage=0),this.grid.refreshModel("everything"),this.update()}getPageSize(){return this.pageSize}setPageSize(e){const t=this.currentPage*this.pageSize;this.pageSize=Math.max(1,e),this.currentPage=Math.floor(t/this.pageSize),this.grid.refreshModel("everything"),this.update()}getCurrentPage(){return this.currentPage}getTotalPages(){if(!this.enabled)return 1;const e=this.grid.getRowModel(),t=e.getTotalRowCount?e.getTotalRowCount():e.getRowCount();return Math.max(1,Math.ceil(t/this.pageSize))}goToPage(e){const t=this.getTotalPages(),n=Math.max(0,Math.min(t-1,e));if(n===this.currentPage){this.update();return}this.currentPage=n,this.grid.refreshModel("everything"),this.update(),this.grid.getRowRenderer().setVerticalScrollTop(0)}goToNextPage(){this.goToPage(this.currentPage+1)}goToPreviousPage(){this.goToPage(this.currentPage-1)}goToFirstPage(){this.goToPage(0)}goToLastPage(){this.goToPage(this.getTotalPages()-1)}update(){var r,l;if(!this.enabled)return;const e=this.getTotalPages();this.currentPage>e-1&&(this.currentPage=e-1,this.grid.refreshModel("everything"));const t=this.grid.getRowModel(),n=t.getTotalRowCount?t.getTotalRowCount():t.getRowCount(),i=n===0?0:this.currentPage*this.pageSize+1,o=Math.min(n,(this.currentPage+1)*this.pageSize);this.ePageInfo.textContent=`${this.grid.translate("of","/")} ${e}`,this.ePageInput.value=String(this.currentPage+1),this.ePageInput.max=String(e);const a=this.grid.translate("rangeTo","至");this.eFromToContainer.textContent=n===0?`0 ${a} 0 ${this.grid.translate("of","/")} 0`:`${i.toLocaleString()} ${a} ${o.toLocaleString()} ${this.grid.translate("of","/")} ${n.toLocaleString()}`,this.eventService.dispatchEvent("paginationChanged",{api:this.grid.getApi(),currentPage:this.currentPage,totalPages:e,pageSize:this.pageSize,rowCount:n}),(l=(r=this.grid.getOptions()).onPaginationChanged)==null||l.call(r,{api:this.grid.getApi(),currentPage:this.currentPage,totalPages:e,pageSize:this.pageSize})}getPanel(){return this.ePanel}isLastPageFound(){return!0}}class ga{constructor(e){x(this,"openPopups",new Set);this.grid=e}getParent(){return this.grid.getOptions().popupParent||this.grid.getRootElement()}createPopup(e=220,t=""){const n=document.createElement("div");n.className=`ag-popup ${t}`.trim(),n.style.width=`${e}px`,n.style.display="none";const i={ePopup:n},o=()=>{var d;this.openPopups.has(i)&&(this.openPopups.delete(i),n.remove(),document.removeEventListener("mousedown",r,!0),document.removeEventListener("keydown",l,!0),(d=i.onClose)==null||d.call(i))},a=d=>{i.onClose=d},r=d=>{if(!n.contains(d.target)&&!this.grid.getRootElement().contains(d.target)){o();return}n.contains(d.target)||o()},l=d=>{d.key==="Escape"&&(d.stopPropagation(),o())};return this.getParent().appendChild(n),this.openPopups.add(i),document.addEventListener("mousedown",r,!0),document.addEventListener("keydown",l,!0),{ePopup:n,close:o,onClose:a}}positionAt(e,t,n=0){const i=this.grid.getRootElement().getBoundingClientRect(),o=t.getBoundingClientRect(),a=e.offsetWidth||220;let r=o.left-i.left+n;const l=i.width-a-4;r>l&&(r=l),r<4&&(r=4);const d=o.bottom-i.top+2;e.style.left=`${r}px`,e.style.top=`${d}px`,e.style.display="block"}closeAll(){for(const e of[...this.openPopups])e.ePopup.remove(),this.openPopups.delete(e)}}class ma{constructor(e,t){x(this,"ranges",[]);x(this,"currentRange",null);x(this,"eOverlay");x(this,"eHandle");x(this,"dragState",null);this.grid=e,this.eventService=t;const n=e.getRowRenderer().getContainer();n.style.position="relative",this.eOverlay=document.createElement("div"),this.eOverlay.className="ag-range-overlay",this.eOverlay.style.display="none",n.appendChild(this.eOverlay),this.eHandle=document.createElement("div"),this.eHandle.className="ag-range-handle",this.eHandle.style.display="none",n.appendChild(this.eHandle),document.addEventListener("mousemove",this.onMouseMove.bind(this)),document.addEventListener("mouseup",this.onMouseUp.bind(this)),t.addEventListener("bodyScroll",()=>this.updateOverlay())}isEnabled(){return!!this.grid.getOptions().enableRangeSelection}getRanges(){return this.ranges}clearRanges(){this.ranges=[],this.currentRange=null,this.updateOverlay(),this.applyHighlight(),this.eventService.dispatchEvent("rangeSelectionChanged",{api:this.grid.getApi(),finished:!0})}onCellMouseDown(e){if(!this.isEnabled())return;const{event:t,column:n,rowIndex:i}=e;if(t.button!==0)return;if(t.shiftKey&&this.ranges.length>0){const a=this.ranges[this.ranges.length-1];this.currentRange={...a,rowEndIndex:i,colEndId:n.colId},this.dragState={startRange:this.currentRange,mode:"create"},this.updateOverlay();return}const o={rowStartIndex:i,rowEndIndex:i,colStartId:n.colId,colEndId:n.colId};this.currentRange=o,this.dragState={startRange:o,mode:"create"},this.updateOverlay()}onHandleMouseDown(e){this.currentRange&&(e.stopPropagation(),this.dragState={startRange:{...this.currentRange},mode:"handle"})}onMouseMove(e){if(!this.dragState||!this.currentRange)return;const t=document.elementFromPoint(e.clientX,e.clientY);if(!t)return;const n=t.closest(".ag-cell");if(!(n!=null&&n.dataset.colid))return;const i=n.closest(".ag-row");if(!(i!=null&&i.dataset.rowid))return;const o=this.grid.getRowModel().getRowNode(i.dataset.rowid);if(!o)return;let a=-1;if(this.grid.getRowModel().forEachNode((l,d)=>{l.id===o.id&&(a=d)}),a<0)return;const r=this.dragState.startRange;this.currentRange={rowStartIndex:Math.min(r.rowStartIndex,a),rowEndIndex:Math.max(r.rowStartIndex,a),colStartId:r.colStartId,colEndId:n.dataset.colid},this.dragState.mode==="handle"&&(this.currentRange.rowEndIndex=Math.max(r.rowStartIndex,a),this.currentRange.colEndId=n.dataset.colid),this.updateOverlay()}onMouseUp(){!this.dragState||!this.currentRange||(this.dragState=null,this.ranges=[this.currentRange],this.applyHighlight(),this.updateOverlay(),this.eventService.dispatchEvent("rangeSelectionChanged",{api:this.grid.getApi(),finished:!0}))}getCenterColumns(){return this.grid.getColumns().center}getRangeBounds(e){const t=this.getCenterColumns(),n=t.findIndex(g=>g.colId===e.colStartId),i=t.findIndex(g=>g.colId===e.colEndId);if(n<0||i<0)return null;const o=Math.min(n,i),a=Math.max(n,i);let r=0,l=0;for(let g=0;g<=a;g++)g<o?r+=t[g].width:l+=t[g].width;const c=this.grid.getRowRenderer().getRowOffsets(),p=Math.min(e.rowStartIndex,e.rowEndIndex),h=Math.max(e.rowStartIndex,e.rowEndIndex),u=c[p]??p*(this.grid.getOptions().rowHeight??42);let f=0;for(let g=p;g<=h;g++){const v=this.grid.getDisplayedRowAtIndex(g);f+=v?this.grid.getRowHeight(v):this.grid.getOptions().rowHeight??42}return{top:u,left:r,width:l,height:f}}updateOverlay(){const e=this.currentRange;if(!e||!this.isEnabled()){this.eOverlay.style.display="none",this.eHandle.style.display="none";return}const t=this.getRangeBounds(e);if(!t){this.eOverlay.style.display="none",this.eHandle.style.display="none";return}this.eOverlay.style.display="block",this.eOverlay.style.top=`${t.top}px`,this.eOverlay.style.left=`${t.left}px`,this.eOverlay.style.width=`${t.width}px`,this.eOverlay.style.height=`${t.height}px`,this.eHandle.style.display="block",this.eHandle.style.top=`${t.top+t.height-4}px`,this.eHandle.style.left=`${t.left+t.width-4}px`,this.eHandle.onmousedown=n=>this.onHandleMouseDown(n)}applyHighlight(){const e=this.ranges,t=this.grid.getRowRenderer().getRowComps(),n=this.getCenterColumns();for(const[i,o]of t){let a=-1;if(this.grid.getRowModel().forEachNode((r,l)=>{r.id===i&&(a=l)}),!(a<0))for(const r of o.getCellElements()){const l=r.dataset.colid,d=n.findIndex(h=>h.colId===l);let c=!1,p=!1;for(const h of e){const u=n.findIndex(k=>k.colId===h.colStartId),f=n.findIndex(k=>k.colId===h.colEndId),g=Math.min(h.rowStartIndex,h.rowEndIndex),v=Math.max(h.rowStartIndex,h.rowEndIndex),m=Math.min(u,f),b=Math.max(u,f);a>=g&&a<=v&&d>=m&&d<=b&&(c=!0,a===h.rowStartIndex&&d===u&&(p=!0))}r.classList.toggle("ag-cell-range-selected",c),r.classList.toggle("ag-cell-range-anchor",p)}}}getRangeCells(e){const t=this.getCenterColumns(),n=t.findIndex(c=>c.colId===e.colStartId),i=t.findIndex(c=>c.colId===e.colEndId),o=Math.min(e.rowStartIndex,e.rowEndIndex),a=Math.max(e.rowStartIndex,e.rowEndIndex),r=Math.min(n,i),l=Math.max(n,i),d=[];for(let c=o;c<=a;c++){const p=this.grid.getDisplayedRowAtIndex(c);if(p)for(let h=r;h<=l;h++)t[h]&&d.push({node:p,column:t[h]})}return d}getCurrentRange(){return this.currentRange}onGridKeyDown(e){if(this.isEnabled()){if((e.ctrlKey||e.metaKey)&&(e.key==="c"||e.key==="C")){this.ranges.length&&(e.preventDefault(),this.grid.getApi().copyToClipboard());return}if((e.ctrlKey||e.metaKey)&&(e.key==="x"||e.key==="X")){this.ranges.length&&(e.preventDefault(),this.grid.getApi().cutToClipboard());return}if((e.ctrlKey||e.metaKey)&&(e.key==="v"||e.key==="V")){this.ranges.length&&(e.preventDefault(),this.grid.getApi().pasteFromClipboard());return}if((e.keyCode===46||e.keyCode===8)&&this.ranges.length){e.preventDefault();for(const t of this.ranges)for(const n of this.getRangeCells(t))this.grid.setCellValue(n.column,n.node,null,"deleteKey");this.grid.refreshCells({flash:!0})}}}}class va{constructor(e,t){x(this,"dragState",null);x(this,"onMouseMoveBind",e=>this.onMouseMove(e));x(this,"onMouseUpBind",e=>this.onMouseUp(e));this.grid=e,this.eventService=t}isEnabled(){const e=this.grid.getOptions();return!!e.rowDragManaged||!!e.rowDragEnt||this.hasDragHandle()}hasDragHandle(){return this.grid.getAllColumns().some(e=>e.rowDrag)}startDrag(e,t){if(!this.isEnabled()||this.dragState)return;t.preventDefault();const n=document.createElement("div");n.className="ag-row-drag-ghost",n.textContent=this.rowLabel(e),document.body.appendChild(n);const i=document.createElement("div");i.className="ag-row-drop-indicator",i.style.display="none",this.grid.getRowRenderer().getContainer().appendChild(i),this.dragState={rowNode:e,ghost:n,startY:t.clientY,overIndex:null,indicator:i},document.body.classList.add("ag-row-dragging"),document.addEventListener("mousemove",this.onMouseMoveBind),document.addEventListener("mouseup",this.onMouseUpBind)}rowLabel(e){var i;const t=this.grid.getColumns().center[0]??this.grid.getColumns().left[0],n=t!=null&&t.field?(i=e.data)==null?void 0:i[t.field]:"";return String(n??e.id)}onMouseMove(e){const t=this.dragState;if(!t)return;t.ghost.style.left=`${e.clientX+8}px`,t.ghost.style.top=`${e.clientY+8}px`;const n=document.elementFromPoint(e.clientX,e.clientY),i=n==null?void 0:n.closest(".ag-row");if(!(i!=null&&i.dataset.rowid)){t.overIndex=null,t.indicator.style.display="none";return}let o=-1;if(this.grid.getRowModel().forEachNode((a,r)=>{a.id===i.dataset.rowid&&(o=r)}),t.overIndex=o,o>=0){const a=this.grid.getRowRenderer().getRowOffsets(),r=this.grid.getRowHeight(this.grid.getDisplayedRowAtIndex(o)),l=e.clientY>i.getBoundingClientRect().top+r/2,d=(a[o]??0)+(l?r:0);t.indicator.style.display="block",t.indicator.style.top=`${d-1}px`}else t.indicator.style.display="none"}onMouseUp(e){const t=this.dragState;if(document.removeEventListener("mousemove",this.onMouseMoveBind),document.removeEventListener("mouseup",this.onMouseUpBind),!t)return;this.dragState=null,document.body.classList.remove("ag-row-dragging"),t.ghost.remove(),t.indicator.remove();const n=this.grid.getApi(),i=this.grid.getOptions(),o=t.overIndex,a=this.indexOf(t.rowNode);this.eventService.dispatchEvent("rowDragEnd",{api:n,node:t.rowNode,overIndex:o,overNode:o!==null?this.grid.getDisplayedRowAtIndex(o):void 0,y:e.clientY}),i.rowDragManaged&&a>=0&&o!==null&&o!==a&&this.moveRow(a,o,e.clientY)}indexOf(e){let t=-1;return this.grid.getRowModel().forEachNode((n,i)=>{n.id===e.id&&(t=i)}),t}moveRow(e,t,n){const i=(this.grid.getOptions().rowData||[]).slice();if(e<0||e>=i.length)return;const[o]=i.splice(e,1),a=t>e?t-1:t;this.grid.getDisplayedRowAtIndex(t),i.splice(Math.max(0,Math.min(i.length,a+1)),0,o),this.grid.getApi().setRowData(i),this.eventService.dispatchEvent("rowDragMove",{api:this.grid.getApi(),node:{data:o}})}}class wa{constructor(e){x(this,"ePanel");x(this,"eChips");this.grid=e,this.ePanel=document.createElement("div"),this.ePanel.className="ag-row-group-panel";const t=document.createElement("span");t.className="ag-row-group-panel-label",t.textContent=this.grid.t("rowGroups"),this.ePanel.appendChild(t),this.eChips=document.createElement("div"),this.eChips.className="ag-row-group-panel-chips",this.ePanel.appendChild(this.eChips),this.eChips.addEventListener("dragover",o=>{o.preventDefault(),this.eChips.classList.add("ag-drag-over")}),this.eChips.addEventListener("dragleave",()=>this.eChips.classList.remove("ag-drag-over")),this.eChips.addEventListener("drop",o=>{var r;o.preventDefault(),this.eChips.classList.remove("ag-drag-over");const a=(r=o.dataTransfer)==null?void 0:r.getData("text/plain");a&&this.grid.getColumnModel().addRowGroupColumn(a)});const n=e.getOptions();(n.rowGroupPanelShow==="always"||n.rowGroupPanelShow==="onlyWhenGrouping")&&e.getMainElement().insertBefore(this.ePanel,e.getHeaderElement()),this.refresh(),e.getEventService().addEventListener("columnRowGroupChanged",()=>this.refresh()),e.getEventService().addEventListener("modelUpdated",()=>this.refreshVisibility())}refresh(){this.eChips.innerHTML="";const e=this.grid.getColumnModel().getRowGroupColumns();for(const t of e){const n=document.createElement("div");n.className="ag-row-group-chip",n.draggable=!0,n.addEventListener("dragstart",a=>{var r;(r=a.dataTransfer)==null||r.setData("text/plain",t.colId)});const i=document.createElement("span");i.textContent=t.headerName,n.appendChild(i);const o=document.createElement("button");o.className="ag-row-group-chip-remove",o.textContent="×",o.title=this.grid.t("remove"),o.addEventListener("click",()=>this.grid.getColumnModel().removeRowGroupColumn(t)),n.appendChild(o),this.eChips.appendChild(n)}if(e.length===0){const t=document.createElement("span");t.className="ag-column-group-hint",t.textContent=this.grid.t("dragColumnsHere"),this.eChips.appendChild(t)}this.refreshVisibility()}refreshVisibility(){const e=this.grid.getOptions().rowGroupPanelShow;if(e==="always")this.ePanel.style.display="";else if(e==="onlyWhenGrouping"){const t=this.grid.getColumnModel().isRowGroupActive();this.ePanel.style.display=t?"":"none"}}}class ba{constructor(e,t,n){x(this,"selectedNodes",new Set);x(this,"lastSelectedNode",null);this.eventService=e,this.getOptions=t,this.isNodeSelectable=n}isEnabled(){return!!this.getOptions().rowSelection}getSelectedNodes(){return[...this.selectedNodes]}getSelectedRows(){return[...this.selectedNodes].map(e=>e.data)}getSelectedCount(){return this.selectedNodes.size}isNodeSelected(e){return this.selectedNodes.has(e)}selectNode(e,t=!1){this.isEnabled()&&this.isNodeSelectable(e)&&(t&&this.getOptions().rowSelection==="multiple"?this.deselectAll():t&&this.deselectAll(),!this.selectedNodes.has(e)&&(this.selectedNodes.add(e),e.selected=!0,this.lastSelectedNode=e,this.getOptions().groupSelectsChildren&&e.children&&this.selectChildrenRecursively(e,!0),this.dispatchChanged()))}deselectNode(e){this.selectedNodes.has(e)&&(this.selectedNodes.delete(e),e.selected=!1,this.getOptions().groupSelectsChildren&&e.children&&this.selectChildrenRecursively(e,!1),this.dispatchChanged())}selectChildrenRecursively(e,t){if(e.children)for(const n of e.children)n.footer||n.detailNode||(t?this.isNodeSelectable(n)&&(this.selectedNodes.add(n),n.selected=!0):(this.selectedNodes.delete(n),n.selected=!1),this.selectChildrenRecursively(n,t))}selectAll(){!this.isEnabled()||this.getOptions().rowSelection!=="multiple"||this.selectAllFiltered()}selectAllFiltered(){if(!this.isEnabled())return;const e=this.getOptions().__rowModel;e!=null&&e.forEachNode&&e.forEachNode(t=>{this.isNodeSelectable(t)&&!t.footer&&(this.selectedNodes.add(t),t.selected=!0)}),this.dispatchChanged()}deselectAll(){for(const e of this.selectedNodes)e.selected=!1;this.selectedNodes.clear(),this.lastSelectedNode=null,this.dispatchChanged()}toggleNode(e){this.selectedNodes.has(e)?this.deselectNode(e):this.selectNode(e,!1)}handleRowClick(e,t){if(!this.isEnabled()||this.getOptions().suppressRowClickSelection)return!1;const n=this.getOptions().rowSelection==="multiple",i=t.ctrlKey||t.metaKey,o=t.shiftKey;return n?o&&this.lastSelectedNode?(this.selectRange(this.lastSelectedNode,e),!0):i?(this.toggleNode(e),!0):(this.getOptions().rowMultiSelectWithClick?this.selectNode(e,!1):this.selectNode(e,!0),!0):(this.selectNode(e,!0),!0)}selectRange(e,t){const n=this.getOptions().__rowModel;if(!(n!=null&&n.forEachNode))return;let i=-1,o=-1,a=0;if(n.forEachNode(d=>{d===e&&(i=a),d===t&&(o=a),a++}),i<0||o<0)return;const r=Math.min(i,o),l=Math.max(i,o);a=0,n.forEachNode(d=>{a>=r&&a<=l&&this.isNodeSelectable(d)&&!d.footer&&(this.selectedNodes.add(d),d.selected=!0),a++}),this.dispatchChanged()}syncWithModel(){const e=this.getOptions().__rowModel;if(!(e!=null&&e.forEachNode))return;const t=new Set;e.forEachNode(i=>t.add(i));let n=!1;for(const i of this.selectedNodes)t.has(i)?i.selected=!0:n=!0;if(n){for(const i of[...this.selectedNodes])t.has(i)||this.selectedNodes.delete(i);this.dispatchChanged()}}getLastSelectedNode(){return this.lastSelectedNode}setSelectAllCheckboxState(e){e?this.selectAllFiltered():this.deselectAll()}getSelectAllState(){const e=this.getOptions().__rowModel;let t=0,n=0;return e!=null&&e.forEachNode&&e.forEachNode(i=>{i.footer||!this.isNodeSelectable(i)||(t++,i.selected&&n++)}),{checked:t>0&&n===t,indeterminate:n>0&&n<t}}dispatchChanged(){this.eventService.dispatchEvent("selectionChanged",{api:this.getOptions().__api})}}class ya{constructor(e){x(this,"eBar");x(this,"eButtons");x(this,"ePanel");x(this,"panels",[]);x(this,"activePanelId",null);x(this,"visible",!1);x(this,"position");var n,i;this.grid=e;const t=e.getOptions();if(this.position=typeof t.sideBar=="object"&&((n=t.sideBar)!=null&&n.position)?t.sideBar.position:"right",this.eBar=document.createElement("div"),this.eBar.className=`ag-side-bar ag-side-bar-${this.position}`,this.eButtons=document.createElement("div"),this.eButtons.className="ag-side-buttons",this.ePanel=document.createElement("div"),this.ePanel.className="ag-side-bar-panel",this.eBar.appendChild(this.eButtons),this.eBar.appendChild(this.ePanel),t.sideBar){const o=typeof t.sideBar=="object"?t.sideBar:null;o!=null&&o.toolPanels?this.panels=o.toolPanels.map(l=>typeof l=="string"?{id:l,label:this.defaultLabel(l)}:{id:l.id,label:l.labelDefault}):(this.panels=[{id:"columns",label:this.defaultLabel("columns")},{id:"filters",label:this.defaultLabel("filters")}],t.enableCharts&&this.panels.push({id:"charts",label:this.defaultLabel("charts")}));const a=(o==null?void 0:o.hiddenByDefault)===!0;this.visible=!a,this.eBar.style.display=this.visible?"":"none";const r=(o==null?void 0:o.defaultToolPanel)||((i=this.panels[0])==null?void 0:i.id)||"columns";this.buildButtons(),this.openPanel(r)}else this.eBar.style.display="none"}defaultLabel(e){switch(e){case"columns":return this.grid.t("columns");case"filters":return this.grid.t("filters");case"charts":return this.grid.t("charts");default:return e}}buildButtons(){this.eButtons.innerHTML="";for(const e of this.panels){const t=document.createElement("button");t.className="ag-side-button",t.textContent=e.label,t.title=e.label,t.dataset.panelId=e.id,e.id===this.activePanelId&&t.classList.add("ag-selected"),t.addEventListener("click",()=>{this.activePanelId===e.id&&this.visible?this.setVisible(!1):(this.visible=!0,this.eBar.style.display="",this.openPanel(e.id)),this.grid.getEventService().dispatchEvent("toolPanelVisibleChanged",{source:"sideBarButtonClicked",api:this.grid.getApi()})}),this.eButtons.appendChild(t)}}getElement(){return this.eBar}setPosition(e){this.position=e,this.eBar.classList.remove("ag-side-bar-left","ag-side-bar-right"),this.eBar.classList.add(`ag-side-bar-${e}`)}setVisible(e){this.visible=e,this.eBar.style.display=e?"":"none",this.grid.onGridSizeChanged(),this.grid.getEventService().dispatchEvent("toolPanelVisibleChanged",{source:"api",api:this.grid.getApi()})}isVisible(){return this.visible}openPanel(e){this.activePanelId=e;for(const t of this.eButtons.querySelectorAll(".ag-side-button"))t.classList.toggle("ag-selected",t.dataset.panelId===e);switch(this.ePanel.innerHTML="",e){case"columns":this.ePanel.appendChild(this.buildColumnsPanel());break;case"filters":this.ePanel.appendChild(this.buildFiltersPanel());break;case"charts":this.ePanel.appendChild(this.grid.getChartService().buildChartPanel());break;default:{const t=document.createElement("div");t.className="ag-side-bar-empty",t.textContent=e,this.ePanel.appendChild(t)}}}getActivePanel(){return this.activePanelId}refresh(){this.activePanelId&&this.openPanel(this.activePanelId)}buildColumnsPanel(){const e=document.createElement("div");e.className="ag-column-panel";const t=document.createElement("input");t.type="text",t.className="ag-column-panel-search",t.placeholder=this.grid.t("searchColumns"),e.appendChild(t);const n=document.createElement("div");n.className="ag-column-panel-columns",e.appendChild(n);const i=()=>{const d=t.value.toLowerCase();n.innerHTML="";const c=this.grid.getColumnModel().getColumns(),p=c.filter(h=>h.pinned!=="left"&&h.pinned!=="right").concat(c.filter(h=>h.pinned==="left"||h.pinned==="right"));for(const h of p)d&&!h.headerName.toLowerCase().includes(d)&&!h.colId.toLowerCase().includes(d)||n.appendChild(this.buildColumnItem(h));if(!n.children.length){const h=document.createElement("div");h.className="ag-side-bar-empty",h.textContent=this.grid.t("noMatchingColumns"),n.appendChild(h)}};t.addEventListener("input",i),i();const o=document.createElement("div");o.className="ag-column-panel-groups";const a=document.createElement("div");a.className="ag-column-panel-section-title",a.textContent=this.grid.t("rowGroups"),o.appendChild(a);const r=document.createElement("div");r.className="ag-column-group-list",o.appendChild(r);const l=()=>{r.innerHTML="";const d=this.grid.getColumnModel().getRowGroupColumns();if(d.length===0){const c=document.createElement("div");c.className="ag-column-group-hint",c.textContent=this.grid.t("dragColumnsHere"),r.appendChild(c)}for(const c of d){const p=document.createElement("div");p.className="ag-column-group-item",p.draggable=!0,p.addEventListener("dragstart",f=>{var g;(g=f.dataTransfer)==null||g.setData("text/plain",c.colId)}),p.addEventListener("dragover",f=>f.preventDefault()),p.addEventListener("drop",f=>{var v;f.preventDefault();const g=(v=f.dataTransfer)==null?void 0:v.getData("text/plain");g&&this.grid.getColumnModel().setRowGroupColumns([...d.map(m=>m.colId),g])});const h=document.createElement("span");h.textContent=c.headerName,p.appendChild(h);const u=document.createElement("button");u.className="ag-column-group-remove",u.textContent="×",u.title=this.grid.t("remove"),u.addEventListener("click",()=>this.grid.getColumnModel().removeRowGroupColumn(c)),p.appendChild(u),r.appendChild(p)}};return l(),r.addEventListener("dragover",d=>d.preventDefault()),r.addEventListener("drop",d=>{var p;d.preventDefault();const c=(p=d.dataTransfer)==null?void 0:p.getData("text/plain");c&&this.grid.getColumnModel().addRowGroupColumn(c)}),e.appendChild(o),this.grid.getEventService().addEventListener("columnRowGroupChanged",()=>{this.activePanelId==="columns"&&l()}),this.grid.getEventService().addEventListener("displayedColumnsChanged",()=>{this.activePanelId==="columns"&&i()}),e}buildColumnItem(e){const t=document.createElement("div");t.className="ag-column-select-column",t.draggable=!0,t.dataset.colid=e.colId;const n=document.createElement("input");n.type="checkbox",n.className="ag-column-select-checkbox",n.checked=e.visible,n.addEventListener("change",()=>{this.grid.getColumnApi().setColumnVisible(e,n.checked)}),t.appendChild(n);const i=document.createElement("span");i.className="ag-column-select-label",i.textContent=e.headerName||e.colId,t.appendChild(i);const o=document.createElement("span");if(o.className="ag-column-select-actions",e.enableRowGroup&&e.field){const r=document.createElement("button");r.className="ag-column-select-action",r.title=this.grid.t("groupByThisColumn"),r.textContent="≡",r.addEventListener("click",()=>this.grid.getColumnModel().addRowGroupColumn(e)),o.appendChild(r)}const a=document.createElement("button");return a.className="ag-column-select-action",a.title=this.grid.t("pinColumnTitle"),a.textContent="📌",a.addEventListener("click",()=>{this.grid.getColumnApi().setColumnPinned(e,e.pinned?null:"left")}),o.appendChild(a),t.appendChild(o),t}buildFiltersPanel(){const e=document.createElement("div");if(e.className="ag-filters-panel",this.grid.getOptions().enableAdvancedFilter){const o=document.createElement("button");o.className="ag-button ag-button-small",o.textContent=`${this.grid.t("advancedFilter")}…`,o.addEventListener("click",()=>this.grid.getFilterGui().openAdvancedFilter(o)),e.appendChild(o);const a=this.grid.getFilterService().getAdvancedFilterModel();if(a){const r=document.createElement("span");r.className="ag-filters-tool-panel-item-badge",r.textContent=`${a.conditions.length} ${this.grid.t("conditionsUnit")}`,e.appendChild(r)}}const t=document.createElement("input");t.type="text",t.className="ag-column-panel-search",t.placeholder=this.grid.t("searchColumns"),e.appendChild(t);const n=document.createElement("div");n.className="ag-filters-panel-list",e.appendChild(n);const i=()=>{const o=t.value.toLowerCase();n.innerHTML="";const a=this.grid.getColumns().center.filter(r=>r.filter);for(const r of a)o&&!r.headerName.toLowerCase().includes(o)||n.appendChild(this.buildFilterItem(r));if(!n.children.length){const r=document.createElement("div");r.className="ag-side-bar-empty",r.textContent=this.grid.t("noMatchingColumns"),n.appendChild(r)}};return t.addEventListener("input",i),i(),this.grid.getEventService().addEventListener("filterChanged",()=>{this.activePanelId==="filters"&&i()}),e}buildFilterItem(e){const t=this.grid.getFilterService(),n=document.createElement("div");n.className="ag-filters-tool-panel-item";const i=document.createElement("div");i.className="ag-filters-tool-panel-item-header";const o=document.createElement("span");o.className="ag-filters-tool-panel-item-label",o.textContent=e.headerName||e.colId,i.appendChild(o);const a=t.isFilterActive(e);if(a){const r=document.createElement("span");r.className="ag-filters-tool-panel-item-badge",r.innerHTML=mi,i.appendChild(r)}if(n.appendChild(i),e.filter==="set"){const r=document.createElement("button");r.className="ag-button ag-button-small",r.textContent=a?"Edit filter":"Add filter",r.addEventListener("click",()=>this.grid.getFilterGui().openFilter(e,r)),n.appendChild(r)}else if(e.filter==="date"){const r=document.createElement("input");r.type="date",r.className="ag-filter-input";const l=t.getFilterInstance(e.colId);r.value=(l==null?void 0:l.dateFrom)??"",r.addEventListener("change",()=>{t.setColumnFilterModel(e,r.value?{filterType:"date",dateFrom:r.value,dateTo:r.value}:null)}),n.appendChild(r)}else{const r=document.createElement("input");r.type=e.filter==="number"?"number":"text",r.className="ag-filter-input",r.placeholder=this.grid.t("filterOoo");const l=t.getFilterInstance(e.colId);r.value=(l==null?void 0:l.filter)??"",r.addEventListener("input",()=>{t.handleFloatingFilterChange(e,r.value)}),n.appendChild(r)}if(a){const r=document.createElement("button");r.className="ag-button ag-button-small",r.textContent=this.grid.t("clear"),r.addEventListener("click",()=>t.setColumnFilterModel(e,null)),n.appendChild(r)}return n}}class Ca{constructor(e){this.grid=e}getSortingOrder(){return this.grid.getOptions().sortingOrder??["asc","desc",null]}onSortRequested(e,t,n){const i=this.grid.getOptions().suppressMultiSort,o=n&&!i&&this.grid.getColumns().center.length+this.grid.getColumns().left.length>1,a=this.getSortingOrder(),r=e.sort;let l=a.indexOf(r)+1;l>=a.length&&(l=0);const d=a[l];if(!o)for(const c of this.grid.getAllColumns())c.colId!==e.colId&&(c.sort=null,c.sortIndex=null);e.sort=d,d===null?e.sortIndex=null:this.renumberSortIndices(),this.onSortChanged("uiColumnSorted")}renumberSortIndices(){this.grid.getAllColumns().filter(t=>t.sort).sort((t,n)=>(t.sortIndex??99)-(n.sortIndex??99)).forEach((t,n)=>t.sortIndex=n)}getSortModel(){return this.grid.getAllColumns().filter(e=>e.sort).sort((e,t)=>(e.sortIndex??0)-(t.sortIndex??0)).map(e=>({colId:e.colId,sort:e.sort}))}setSortModel(e){for(const t of this.grid.getAllColumns())t.sort=null,t.sortIndex=null;e.forEach((t,n)=>{const i=this.grid.getColumn(t.colId);i&&(i.sort=t.sort,i.sortIndex=n)}),this.onSortChanged("api")}onSortChanged(e){var n,i;this.grid.getHeaderView().updateIndicators(),this.grid.refreshModel("sort");const t=this.grid.getApi();this.grid.getEventService().dispatchEvent("sortChanged",{api:t,source:e}),(i=(n=this.grid.getOptions()).onSortChanged)==null||i.call(n,{api:t,source:e})}}class Sa{constructor(e,t){x(this,"eBar");x(this,"panels",[]);this.grid=e,this.eBar=document.createElement("div"),this.eBar.className="ag-status-bar";const i=e.getOptions().statusBar;(!i||!i.statusPanels||i.statusPanels.length===0)&&(this.eBar.style.display="none");const o=((i==null?void 0:i.statusPanels)||[]).map(a=>typeof a=="string"?{key:a,label:a}:{key:a.key||a.statusPanel,label:a.key||a.statusPanel,align:a.align});for(const a of o){const r=document.createElement("div");r.className=`ag-status-panel ag-status-panel-${a.align||"left"}`,this.eBar.appendChild(r);const l={def:a,ePanel:r,render:()=>this.renderPanel(a.key,r)};this.panels.push(l)}}getElement(){return this.eBar}isVisible(){return this.eBar.style.display!=="none"}setVisible(e){this.eBar.style.display=e?"":"none"}update(){for(const e of this.panels)e.render()}renderPanel(e,t){const n=this.grid.getApi(),i=this.grid.getRowModel().getRowCount(),o=this.grid.getRowModel(),a=typeof o.getTotalRowCount=="function"&&o.getType()!=="clientSide"?o.getTotalRowCount():(this.grid.getOptions().rowData||[]).length,r=n.getSelectedNodes().length,l=[],d=this.grid.getColumnModel().getValueColumns().filter(c=>c.aggFunc);switch(this.grid.getRowModel().forEachNode(c=>{!c.footer&&c.group}),e){case"agTotalRowCountComponent":l.push(`${this.grid.translate("totalRows","Total Rows")} : ${st(a)}`);break;case"agTotalAndFilteredRowCountComponent":l.push(`${this.grid.translate("rows","Rows")} : ${st(i)}`);break;case"agFilteredRowCountComponent":l.push(`${this.grid.translate("filtered","Filtered")} : ${st(i)}`);break;case"agSelectedRowCountComponent":l.push(`${this.grid.translate("selected","Selected")} : ${st(r)}`);break;case"agAggregationComponent":{if(d.length===0)break;const c=n.getSelectedNodes().filter(h=>!h.group&&!h.footer),p=[];for(const h of d){const f=c.map(b=>ke(h,b,n)).filter(b=>typeof b=="number"&&!isNaN(b)),g=f.reduce((b,k)=>b+k,0),v=b=>b===null?"":st(b,h.decimals),m=[[this.grid.translate("average","Average"),f.length?g/f.length:null],[this.grid.translate("count","Count"),f.length],[this.grid.translate("min","Min"),f.length?Math.min(...f):null],[this.grid.translate("max","Max"),f.length?Math.max(...f):null],[this.grid.translate("sum","Sum"),f.length?g:null]];for(const[b,k]of m)p.push(`${b}${h.headerName?` (${h.headerName})`:""} : ${v(k)}`)}p.length&&l.push(p.join(" "));break}default:l.push(e);break}t.textContent=l.join(" "),t.style.display=l.length?"":"none"}}class Ea{constructor(e,t){x(this,"undoStack",[]);x(this,"redoStack",[]);x(this,"limit",50);x(this,"batchDepth",0);x(this,"batchBuffer",[]);x(this,"batchCounter",0);x(this,"currentBatchId",0);this.grid=e,this.eventService=t;const n=e.getOptions();n.undoRedoCellEditing&&(this.limit=typeof n.undoRedoCellEditing=="number"?n.undoRedoCellEditing:50)}isEnabled(){return!!this.grid.getOptions().undoRedoCellEditing}pushAction(e){if(this.isEnabled()){if(this.batchDepth>0){this.batchBuffer.push(e);return}this.undoStack.push({...e,batchId:this.currentBatchId}),this.undoStack.length>this.limit&&this.undoStack.shift(),this.redoStack=[]}}canUndo(){return this.isEnabled()&&this.undoStack.length>0}canRedo(){return this.isEnabled()&&this.redoStack.length>0}getUndoStackSize(){return this.undoStack.length}getRedoStackSize(){return this.redoStack.length}undo(){if(!this.canUndo())return 0;const e=[this.undoStack.pop()];for(;this.undoStack.length>0&&this.undoStack[this.undoStack.length-1].rowNodeId===e[0].rowNodeId&&this.undoStack[this.undoStack.length-1].colId===e[0].colId;)e.push(this.undoStack.pop());if(e[0].batchId!==0)for(;this.undoStack.length>0&&this.undoStack[this.undoStack.length-1].batchId===e[0].batchId;)e.push(this.undoStack.pop());let t=0;for(const n of e)this.applyValue(n,n.oldValue),this.redoStack.push(n),t++;return this.eventService.dispatchEvent("undoEnded",{api:this.grid.getApi(),numberOfActions:t}),t}redo(){if(!this.canRedo())return 0;let e=0;for(;this.redoStack.length>0;){const t=this.redoStack.pop();if(this.applyValue(t,t.newValue),this.undoStack.push(t),e++,this.redoStack.length===0||this.redoStack[this.redoStack.length-1].colId!==t.colId)break}return this.eventService.dispatchEvent("redoEnded",{api:this.grid.getApi(),numberOfActions:e}),e}applyValue(e,t){const n=this.grid.getRowNode(e.rowNodeId);if(!n)return;const i=this.grid.getColumn(e.colId);i&&(this.grid.setCellValue(i,n,t,"undoRedo"),this.grid.refreshCells({rowNodes:[n],columns:[i],flash:!0}))}startBatchEdit(){this.batchDepth++,this.batchDepth===1&&(this.currentBatchId=++this.batchCounter)}endBatchEdit(e=!1){if(this.batchDepth=Math.max(0,this.batchDepth-1),this.batchDepth>0)return;if(e){this.batchBuffer=[];return}const t=this.currentBatchId;for(const n of this.batchBuffer)this.undoStack.push({...n,batchId:t}),this.undoStack.length>this.limit&&this.undoStack.shift();this.redoStack=[],this.batchBuffer=[],this.eventService.dispatchEvent("batchEditEnded",{api:this.grid.getApi()})}isBatchEditing(){return this.batchDepth>0}clear(){this.undoStack=[],this.redoStack=[],this.batchBuffer=[]}}class xa{constructor(e,t){x(this,"ctx");x(this,"eHeader");x(this,"ePinnedLeftHeader");x(this,"ePinnedRightHeader");x(this,"eHeaderViewport");x(this,"eHeaderContainer");x(this,"eHeaderRow");x(this,"eFloatingFiltersRow",null);x(this,"eGroupRows");x(this,"headerCells",new Map);x(this,"customHeaderComponents",new Map);x(this,"resizeState",null);x(this,"dragState",null);x(this,"lastWidths",new Map);this.ctx=t,this.eHeader=e,e.classList.add("ag-header"),e.style.height=`${t.headerHeight}px`,this.ePinnedLeftHeader=document.createElement("div"),this.ePinnedLeftHeader.className="ag-pinned-left-header",e.appendChild(this.ePinnedLeftHeader),this.eHeaderViewport=document.createElement("div"),this.eHeaderViewport.className="ag-header-viewport",e.appendChild(this.eHeaderViewport),this.eHeaderContainer=document.createElement("div"),this.eHeaderContainer.className="ag-header-container",this.eHeaderViewport.appendChild(this.eHeaderContainer),this.eGroupRows=document.createElement("div"),this.eGroupRows.className="ag-group-header-rows",this.eHeaderContainer.appendChild(this.eGroupRows),this.eHeaderRow=document.createElement("div"),this.eHeaderRow.className="ag-header-row",this.eHeaderContainer.appendChild(this.eHeaderRow),this.ePinnedRightHeader=document.createElement("div"),this.ePinnedRightHeader.className="ag-pinned-right-header",e.appendChild(this.ePinnedRightHeader),this.refresh()}refresh(){this.headerCells.clear(),this.renderGroupRows();const{left:e,center:t,right:n}=this.ctx.getColumns();this.renderSection(this.ePinnedLeftHeader,e,"left"),this.renderSection(this.eHeaderRow,t,"center"),this.renderSection(this.ePinnedRightHeader,n,"right");const i=[...e,...t,...n].some(o=>o.floatingFilter);i&&!this.eFloatingFiltersRow?(this.eFloatingFiltersRow=document.createElement("div"),this.eFloatingFiltersRow.className="ag-header-row ag-floating-filters",this.eHeaderContainer.appendChild(this.eFloatingFiltersRow)):!i&&this.eFloatingFiltersRow&&(this.eFloatingFiltersRow.remove(),this.eFloatingFiltersRow=null),this.eFloatingFiltersRow&&(this.eFloatingFiltersRow.innerHTML="",this.renderSection(this.eFloatingFiltersRow,t,"center"))}renderGroupRows(){var r;const e=this.ctx.getColumnModel(),t=((r=e==null?void 0:e.getColumnGroups)==null?void 0:r.call(e))||[];this.eGroupRows.innerHTML="";const n=t.reduce((l,d)=>Math.max(l,d.depth),0),i=this.ctx.options.groupHeaderHeight??30;let o=0;for(let l=1;l<=n;l++){const d=document.createElement("div");d.className="ag-header-row ag-group-header-row",d.style.height=`${i}px`;const c=this.ctx.getColumns().center;let p=0,h,u=0,f=0;const g=(m,b)=>{let k=m.groupId;for(;k;){const C=t.find(w=>w.id===k);if(!C)return null;if(C.depth===b)return C.id;k=C.parentId}return null},v=()=>{if(h==null)return;const m=t.find(w=>w.id===h);if(!m)return;const b=document.createElement("div");b.className="ag-header-group-cell",b.style.left=`${u}px`,b.style.width=`${f}px`,b.style.height=`${i}px`;const k=e.isGroupOpen(m.id),C=document.createElement("div");if(C.className="ag-header-group-cell-label",C.textContent=m.headerName,b.appendChild(C),!k){const w=document.createElement("span");w.className="ag-header-group-expand",w.textContent="▸",w.title=this.ctx.t("expandGroup"),b.appendChild(w)}b.addEventListener("click",()=>{e.setGroupOpen(m.id,!k)}),d.appendChild(b)};c.forEach(m=>{const b=g(m,l);b!==h&&(v(),h=b,u=p,f=0),f+=m.width,p+=m.width}),v(),d.style.width=`${p}px`,this.eGroupRows.appendChild(d),o+=i}this.eGroupRows.style.display=n>0?"":"none";const a=this.ctx.headerHeight;this.eHeader.style.height=`${o+a}px`}renderSection(e,t,n){e.innerHTML="";let i=0;for(const o of t){const a=this.createHeaderCell(o);if(a.style.left=`${i}px`,a.style.width=`${o.width}px`,a.style.height=`${this.ctx.headerHeight}px`,i+=o.width,e.appendChild(a),this.headerCells.set(o.colId,a),o.eHeaderCell=a,this.eFloatingFiltersRow&&e===this.eHeaderRow&&o.floatingFilter){const r=this.createFloatingFilter(o);r.style.left=`${i-o.width}px`,r.style.width=`${o.width}px`,this.eFloatingFiltersRow.appendChild(r)}}e===this.eHeaderRow?this.eHeaderContainer.style.width=`${i}px`:(e===this.ePinnedLeftHeader||e===this.ePinnedRightHeader)&&(e.style.width=`${i}px`)}createHeaderCell(e){var a,r;const t=document.createElement("div");if(t.className="ag-header-cell",t.dataset.colid=e.colId,t.setAttribute("role","columnheader"),t.setAttribute("aria-colindex",String(this.headerColumnIndex(e))),e.sort==="asc"?t.setAttribute("aria-sort","ascending"):e.sort==="desc"?t.setAttribute("aria-sort","descending"):t.setAttribute("aria-sort","none"),t.setAttribute("aria-label",e.headerName||e.colId),e.headerClass){const l=Array.isArray(e.headerClass)?e.headerClass.join(" "):e.headerClass;t.classList.add(...String(l).split(" ").filter(Boolean))}const n=e.colDef.headerComponent;if(typeof n=="function"){const l=n({column:e,colDef:e.colDef,api:((r=(a=this.ctx).getApi)==null?void 0:r.call(a))??null,displayName:e.headerName}),d=l&&typeof l.getGui=="function"?l.getGui():l;if(d instanceof HTMLElement)return d.classList.add("ag-header-component"),t.appendChild(d),typeof(l==null?void 0:l.refresh)=="function"&&this.customHeaderComponents.set(e.colId,l),t}const i=document.createElement("div");if(i.className="ag-header-cell-label",e.headerTooltip&&(i.title=e.headerTooltip),e.headerCheckboxSelection){const l=document.createElement("input");l.type="checkbox",l.className="ag-native-checkbox ag-header-select-all",l.addEventListener("change",()=>this.ctx.onHeaderCheckboxChanged(e,l.checked)),l.addEventListener("click",d=>d.stopPropagation()),i.appendChild(l)}const o=document.createElement("span");if(o.className="ag-header-cell-text",o.textContent=e.headerName,i.appendChild(o),t.appendChild(i),e.sortable){const l=document.createElement("span");l.className="ag-header-icon ag-sort-indicator",this.updateSortIndicator(l,e.sort,e.sortIndex),t.appendChild(l)}if(e.filter){const l=document.createElement("span");l.className="ag-header-icon ag-filter-icon";const d=this.ctx.isFilterActive(e);l.classList.toggle("ag-filter-active",d),l.innerHTML=Go,l.title=this.ctx.t("openFilterTitle"),l.addEventListener("click",c=>{c.stopPropagation(),this.ctx.onFilterOpened(e,l)}),t.appendChild(l)}if(!this.ctx.isColumnMenuSuppressed(e)&&!e.suppressMenu){const l=document.createElement("span");l.className="ag-header-icon ag-menu-icon",l.innerHTML=Vo,l.title=this.ctx.t("openMenuTitle"),l.addEventListener("click",d=>{d.stopPropagation(),this.ctx.onColumnMenuClicked(e,l)}),t.appendChild(l)}if(t.addEventListener("click",l=>{this.ctx.eventService.dispatchEvent("columnHeaderClicked",{column:e,api:null}),e.sortable&&this.ctx.onSortRequested(e,l,l.shiftKey||l.ctrlKey||l.metaKey)}),t.addEventListener("contextmenu",l=>{l.preventDefault(),this.ctx.eventService.dispatchEvent("columnHeaderContextMenu",{column:e,event:l}),!this.ctx.isColumnMenuSuppressed(e)&&!e.suppressMenu&&this.ctx.onColumnMenuClicked(e,t)}),t.addEventListener("dblclick",l=>{const d=t.getBoundingClientRect();l.clientX>d.right-8&&e.resizable&&this.ctx.eventService.dispatchEvent("columnResized",{column:e,source:"autoSize"})}),e.resizable){const l=document.createElement("div");l.className="ag-header-cell-resize",l.addEventListener("mousedown",d=>{d.stopPropagation(),d.preventDefault(),this.resizeState={column:e,startX:d.clientX,startWidth:e.width};const c=h=>{if(!this.resizeState)return;const u=h.clientX-this.resizeState.startX;let f=this.resizeState.startWidth+u;f=Math.max(e.minWidth,Math.min(e.maxWidth,f)),this.ctx.onColumnResized(e,Math.round(f),!1)},p=()=>{this.resizeState&&this.ctx.onColumnResized(this.resizeState.column,this.resizeState.column.width,!0),this.resizeState=null,document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",p),document.body.classList.remove("ag-resizing")};document.body.classList.add("ag-resizing"),document.addEventListener("mousemove",c),document.addEventListener("mouseup",p)}),t.appendChild(l)}return e.suppressMovable||(t.draggable=!0,t.addEventListener("dragstart",l=>{if(!l.dataTransfer)return;l.dataTransfer.setData("text/plain",e.colId),l.dataTransfer.effectAllowed="move";const d=t.cloneNode(!0);d.classList.add("ag-header-cell-drag-ghost"),d.style.position="absolute",d.style.top="-1000px",d.style.width=`${e.width}px`,d.style.height=`${this.ctx.headerHeight}px`,document.body.appendChild(d),l.dataTransfer.setDragImage(d,20,20),this.dragState={colId:e.colId,ghost:d,startX:l.clientX,startY:l.clientY},setTimeout(()=>d.remove(),0)}),t.addEventListener("dragend",()=>{var l;(l=this.dragState)!=null&&l.ghost.parentNode&&this.dragState.ghost.remove(),this.dragState=null}),t.addEventListener("dragover",l=>{l.preventDefault()}),t.addEventListener("drop",l=>{var c;l.preventDefault();const d=(c=l.dataTransfer)==null?void 0:c.getData("text/plain");d&&d!==e.colId&&this.ctx.onColumnMoved(d,e.colId)})),t}createFloatingFilter(e){const t=document.createElement("div");if(t.className="ag-header-cell ag-floating-filter-cell",t.dataset.colid=e.colId,t.style.position="absolute",t.style.height=`${this.ctx.options.floatingFiltersHeight??24}px`,e.filter==="boolean"){const i=document.createElement("select");return i.className="ag-floating-filter-input",i.innerHTML='<option value="">All</option><option value="true">✓</option><option value="false">✗</option>',i.addEventListener("change",()=>this.ctx.onFloatingFilterChanged(e,i.value)),t.appendChild(i),e.floatingFilterComp=i,t}const n=document.createElement("input");return n.className="ag-floating-filter-input",n.type=e.filter==="number"?"number":e.filter==="date"?"date":"text",n.placeholder=this.ctx.t("filterOoo"),n.value=(this.ctx.getQuickFilterText()&&e.filter==="set",""),n.addEventListener("input",()=>this.ctx.onFloatingFilterChanged(e,n.value)),t.appendChild(n),e.floatingFilterComp=n,t}updateSortIndicator(e,t,n){if(e.innerHTML="",t==="asc"?(e.classList.add("ag-sort-asc"),e.innerHTML=qo):t==="desc"&&(e.classList.add("ag-sort-desc"),e.innerHTML=zo),t&&n!==null&&n>0){const i=document.createElement("span");i.className="ag-sort-order",i.textContent=String(n+1),e.appendChild(i)}}updateIndicators(){const{left:e,center:t,right:n}=this.ctx.getColumns();for(const i of[...e,...t,...n]){const o=this.headerCells.get(i.colId);if(!o)continue;const a=o.querySelector(".ag-sort-indicator");a&&this.updateSortIndicator(a,i.sort,i.sortIndex);const r=o.querySelector(".ag-filter-icon");r&&r.classList.toggle("ag-filter-active",this.ctx.isFilterActive(i)),o.style.width=`${i.width}px`,this.lastWidths.get(i.colId)!==i.width&&this.lastWidths.set(i.colId,i.width)}this.layoutPositions()}headerColumnIndex(e){return[...this.ctx.getColumns().left,...this.ctx.getColumns().center,...this.ctx.getColumns().right].findIndex(n=>n.colId===e.colId)+1}layoutPositions(){const{left:e,center:t,right:n}=this.ctx.getColumns();let i=0;for(const o of e){const a=this.headerCells.get(o.colId);a&&(a.style.left=`${i}px`),i+=o.width}this.ePinnedLeftHeader.style.width=`${i}px`,i=0;for(const o of t){const a=this.headerCells.get(o.colId);a&&(a.style.left=`${i}px`),i+=o.width}this.eHeaderContainer.style.width=`${i}px`,i=0;for(const o of n){const a=this.headerCells.get(o.colId);a&&(a.style.left=`${i}px`),i+=o.width}if(this.ePinnedRightHeader.style.width=`${i}px`,this.eFloatingFiltersRow){i=0;for(const o of t){const a=this.eFloatingFiltersRow.querySelector(`[data-colid="${o.colId}"]`);a&&(a.style.left=`${i}px`,a.style.width=`${o.width}px`),i+=o.width}}}setScrollLeft(e,t=0){this.eHeaderViewport.style.marginInlineEnd=`${t}px`,this.eHeaderViewport.scrollLeft=e}getHeaderCell(e){return this.headerCells.get(e.colId)}getHeaderRow(){return this.eHeaderRow}}class Qt{constructor(e,t,n,i,o,a,r){x(this,"eLeft",null);x(this,"eCenter",null);x(this,"eRight",null);x(this,"cellComps",[]);x(this,"pinned",!1);var l,d,c,p,h,u,f,g,v;if(this.ctx=e,this.node=t,this.rowHeight=a,t.masterNode){const m=e.renderDetailRow?e.renderDetailRow(t,this.eCenter):null;if(m){const b=document.createElement("div");b.className="ag-row ag-row-detail-row",b.dataset.rowid=t.id,b.style.height=`${m.height}px`,b.style.width="100%",b.appendChild(m.eDetail),this.eCenter=b,this.eLeft=null,this.eRight=null}return}n.length&&(this.eLeft=this.createRowElement(t,n,"left"),this.eLeft.classList.add("ag-row-pinned")),(i.length||t.footer||t.detailNode)&&(this.eCenter=this.createRowElement(t,i,"center")),o.length&&(this.eRight=this.createRowElement(t,o,"right"),this.eRight.classList.add("ag-row-pinned")),t.footer&&((l=this.eCenter)==null||l.classList.add("ag-row-footer"),(d=this.eLeft)==null||d.classList.add("ag-row-footer"),(c=this.eRight)==null||c.classList.add("ag-row-footer")),t.group&&((p=this.eCenter)==null||p.classList.add("ag-row-group"),(h=this.eLeft)==null||h.classList.add("ag-row-group"),(u=this.eRight)==null||u.classList.add("ag-row-group")),(t.rowPinned==="top"||t.rowPinned==="bottom")&&(this.pinned=!0),this.ctx.isNodeSelected(t)&&((f=this.eCenter)==null||f.classList.add("ag-row-selected"),(g=this.eLeft)==null||g.classList.add("ag-row-selected"),(v=this.eRight)==null||v.classList.add("ag-row-selected"))}isPinned(){return this.pinned}setSticky(e){var t,n,i;(t=this.eLeft)==null||t.classList.toggle("ag-row-sticky-group",e),(n=this.eCenter)==null||n.classList.toggle("ag-row-sticky-group",e),(i=this.eRight)==null||i.classList.toggle("ag-row-sticky-group",e)}setHovered(e){var t,n,i;(t=this.eLeft)==null||t.classList.toggle("ag-row-hover",e),(n=this.eCenter)==null||n.classList.toggle("ag-row-hover",e),(i=this.eRight)==null||i.classList.toggle("ag-row-hover",e)}getNode(){return this.node}createRowElement(e,t,n){var l;const i=document.createElement("div");i.className="ag-row",i.dataset.rowid=e.id,i.setAttribute("role","row"),i.setAttribute("aria-rowindex",String((e.__displayIndex??0)+1)),i.setAttribute("aria-selected",String(this.ctx.isNodeSelected(e))),this.ctx.rowDragEnabled()&&i.classList.add("ag-row-draggable"),(e.__displayIndex??0)%2===1&&i.classList.add("ag-row-even"),i.style.height=`${this.rowHeight}px`,i.style.position="absolute",i.style.top="0px";const o=this.ctx.getRowClass(e);o&&i.classList.add(...o.split(" ").filter(Boolean));const a=this.ctx.getRowStyle(e);a&&Object.assign(i.style,a),e.footer&&((l=e.groupData)!=null&&l.__grandTotal)&&(i.classList.add("ag-row-full-width"),i.style.width="100%",i.style.right="0",i.style.left="0");let r=0;for(let d=0;d<t.length;d++){const c=t[d],p=this.createCell(c,e);let h=1;typeof c.colDef.colSpan=="function"&&(h=Math.max(1,Math.round(c.colDef.colSpan({value:ke(c,e,null),data:e.data,node:e,column:c,rowIndex:e.__displayIndex??0,api:null}))));let u=c.width;for(let f=1;f<h&&d+f<t.length;f++)u+=t[d+f].width;p.eCell.style.left=`${r}px`,p.eCell.style.width=`${u}px`,p.eCell.style.position="absolute",p.eCell.style.top="0",p.eCell.style.height=`${this.rowHeight}px`,h>1&&p.eCell.classList.add("ag-cell-col-span"),r+=u,d+=h-1,i.appendChild(p.eCell),this.cellComps.push(p)}return i.style.width=`${r}px`,i}cellColumnIndex(e){return[...this.ctx.getColumns().left,...this.ctx.getColumns().center,...this.ctx.getColumns().right].findIndex(n=>n.colId===e.colId)+1}createCell(e,t){var c,p;const n=document.createElement("div");n.className="ag-cell",n.dataset.colid=e.colId;const i=e.colId.replace(/[^a-zA-Z0-9_-]/g,"-");i&&n.classList.add(`ag-col-${i}`);const o={value:ke(e,t,null),data:t.data,node:t,column:e,rowIndex:t.__displayIndex??0,api:null};if(e.cellClass){const h=typeof e.cellClass=="function"?e.cellClass(o):e.cellClass;typeof h=="string"?n.classList.add(...h.split(" ").filter(Boolean)):Array.isArray(h)&&n.classList.add(...h)}if(e.cellClassRules)for(const[h,u]of Object.entries(e.cellClassRules))u(o)&&n.classList.add(h);if(e.cellStyle){const h=typeof e.cellStyle=="function"?e.cellStyle(o):e.cellStyle;Object.assign(n.style,h)}(e.type==="numberColumn"||e.cellDataType===!0)&&n.classList.add("ag-right-aligned-cell"),e.rowDrag&&n.classList.add("ag-cell-row-drag");const a=document.createElement("span");a.className="ag-cell-value",n.appendChild(a),this.ctx.options.enableCellTextSelection&&(n.style.userSelect="text",n.style.cursor="text"),n.setAttribute("role","gridcell"),n.setAttribute("aria-colindex",String(this.cellColumnIndex(e)));const r=(p=(c=this.ctx).getNote)==null?void 0:p.call(c,t.id,e.colId,e.colDef.note,{value:ke(e,t,null),data:t.data,node:t,column:e,api:null});if(r){const h=document.createElement("span");h.className="ag-cell-note-marker",h.title=r,h.addEventListener("click",u=>{var f,g;u.stopPropagation(),(g=(f=this.ctx).onNoteClick)==null||g.call(f,t.id,e.colId,h)}),n.appendChild(h)}if(e.rowDrag){const h=document.createElement("span");h.className="ag-row-drag-handle",h.innerHTML=gi,h.title=this.ctx.t("dragRow"),h.addEventListener("mousedown",u=>{var f,g;u.button===0&&(u.stopPropagation(),(g=(f=this.ctx).onRowDragStart)==null||g.call(f,t,h,u))}),n.appendChild(h)}const l=e.tooltipField;l&&t.data&&t.data[l]!==void 0?n.title=String(t.data[l]):e.tooltipValueGetter&&(n.title=String(e.tooltipValueGetter({value:ke(e,t,null),valueFormatted:null,data:t.data,node:t,column:e,api:null,colDef:e.colDef})));const d={column:e,eCell:n,eValue:a,lastValue:void 0,lastFormatted:null,rendererKey:"",custom:!1};return this.updateCellContent(d),d}updateCellContent(e){var d;const{column:t,node:n}={column:e.column,node:this.node},i=ke(t,n,null),o=Kt(t,n,null);e.lastValue=i,e.lastFormatted=o;const a=typeof t.cellRenderer=="string"?t.cellRenderer:null,r=typeof t.cellRenderer=="function"?t.cellRenderer:null;if(a||r){e.custom=!0;const c=a||"func";if(e.rendererKey!==c){e.eValue.innerHTML="",e.rendererKey=c;const p={value:i,valueFormatted:o,data:n.data,node:n,column:t,rowIndex:n.__displayIndex??0,api:null,colDef:t.colDef,eGridCell:e.eCell,registerRowDragger:void 0,...t.cellRendererParams||{}};let h=null;if(a&&Zt[a]){const u=Zt[a](p);u instanceof HTMLElement?h=u:(e.rendererInstance=u,h=u.getGui())}else if(r){const u=r(p);u instanceof HTMLElement?h=u:u&&typeof u.getGui=="function"?(e.rendererInstance=u,h=u.getGui()):typeof u=="string"&&(e.eValue.innerHTML=u)}h&&e.eValue.appendChild(h)}return}e.rendererKey="",e.custom=!1,(d=e.rendererInstance)!=null&&d.destroy&&(e.rendererInstance.destroy(),e.rendererInstance=void 0);let l=o??"";if((n.group||n.footer)&&n.groupData){const c=n.groupData[t.colId];l=c==null?"":String(c)}e.eValue.textContent!==l&&(e.eValue.textContent=l)}refreshCells(e,t,n){var a,r,l,d;const i=e&&e.length?new Set(e.map(c=>c.colId)):null;for(const c of this.cellComps){if(i&&!i.has(c.column.colId))continue;const p=ke(c.column,this.node,null),h=t||p!==c.lastValue;if(!h&&!n)continue;const u=c.eValue.textContent;if(c.rendererInstance&&typeof c.rendererInstance.refresh=="function"){c.rendererInstance.refresh({value:p,valueFormatted:Kt(c.column,this.node,null),data:this.node.data,node:this.node,column:c.column,rowIndex:this.node.__displayIndex??0,api:null,colDef:c.column.colDef,eGridCell:c.eCell,...c.column.cellRendererParams||{}})===!1&&this.updateCellContent(c),c.lastValue=p,n&&(c.eCell.classList.remove("ag-cell-data-change"),c.eCell.offsetWidth,c.eCell.classList.add("ag-cell-data-change"));continue}if(c.rendererKey){(h||n)&&(c.rendererKey="",this.updateCellContent(c)),c.lastValue=p,n&&(c.eCell.classList.remove("ag-cell-data-change"),c.eCell.offsetWidth,c.eCell.classList.add("ag-cell-data-change"));continue}this.updateCellContent(c),(n||h&&u!==c.eValue.textContent)&&(c.eCell.classList.remove("ag-cell-data-change"),c.eCell.offsetWidth,c.eCell.classList.add("ag-cell-data-change"))}const o=this.ctx.isNodeSelected(this.node);(a=this.eCenter)==null||a.classList.toggle("ag-row-selected",o),(r=this.eLeft)==null||r.classList.toggle("ag-row-selected",o),(l=this.eRight)==null||l.classList.toggle("ag-row-selected",o),this.node.group&&((d=this.eCenter)==null||d.classList.toggle("ag-row-group-expanded",this.node.expanded))}appendTo(e,t,n){if(this.eLeft&&e.appendChild(this.eLeft),this.eCenter&&t.appendChild(this.eCenter),this.eRight&&n.appendChild(this.eRight),this.node.detailNode&&this.ctx.renderDetailRow){const i=this.ctx.renderDetailRow(this.node,this.eCenter);i&&t.appendChild(i.eDetail)}}setTop(e){const t=`${e}px`;this.eLeft&&this.eLeft.style.top!==t&&(this.eLeft.style.top=t),this.eCenter&&this.eCenter.style.top!==t&&(this.eCenter.style.top=t),this.eRight&&this.eRight.style.top!==t&&(this.eRight.style.top=t)}getCenterElement(){return this.eCenter}getCellElements(){return this.cellComps.map(e=>e.eCell)}destroy(){var e,t,n,i;(e=this.eLeft)!=null&&e.parentNode&&this.eLeft.parentNode.removeChild(this.eLeft),(t=this.eCenter)!=null&&t.parentNode&&this.eCenter.parentNode.removeChild(this.eCenter),(n=this.eRight)!=null&&n.parentNode&&this.eRight.parentNode.removeChild(this.eRight);for(const o of this.cellComps)(i=o.rendererInstance)!=null&&i.destroy&&o.rendererInstance.destroy();this.cellComps=[]}}function Si(s,e,t){const n=s.length;if(n===0||t<=0)return[];let i=0,o=n-1;for(;i<o;){const c=i+o>>1;s[c]>=t?o=c:i=c+1}const a=s[i]>=t?i:n-1,r=e[a];if(!r||r.level===0)return[];const l=[];let d=r.level;for(let c=a-1;c>=0;c--){const p=e[c];if(!(!p||p.level>=d)&&(d=p.level,p.group&&s[c]<t&&l.push(c),p.level===0))break}return l.reverse()}class ka{constructor(e,t,n){x(this,"ctx");x(this,"eRoot");x(this,"eHeader");x(this,"eBody");x(this,"ePinnedLeft");x(this,"ePinnedRight");x(this,"ePinnedLeftInner");x(this,"ePinnedRightInner");x(this,"eViewport");x(this,"eContainer");x(this,"eFloatingTop");x(this,"eFloatingBottom");x(this,"eFloatingTopLeft");x(this,"eFloatingTopRight");x(this,"eFloatingBottomLeft");x(this,"eFloatingBottomRight");x(this,"eStickyTop");x(this,"eStickyLeft");x(this,"eStickyCenter");x(this,"eStickyRight");x(this,"rowComps",new Map);x(this,"stickyComps",new Map);x(this,"hoveredRowId",null);x(this,"rowOffsets",[]);x(this,"rowIndices",new Map);x(this,"rowInfos",[]);x(this,"totalHeight",0);x(this,"lastScrollTop",-1);x(this,"lastRange",[-1,-1]);x(this,"heightVersion",0);x(this,"scrollFrame",null);x(this,"onSectionWheel",e=>{if(e.ctrlKey||!e.cancelable)return;const t=e.target;if(t!=null&&t.closest('input, textarea, select, [contenteditable="true"]'))return;const n=this.eViewport;let i=e.deltaY,o=e.deltaX;e.deltaMode===1?(i*=33,o*=33):e.deltaMode===2&&(i*=n.clientHeight,o*=n.clientWidth),e.shiftKey&&!o&&(o=i,i=0),i&&(n.scrollTop+=i),o&&(n.scrollLeft+=o),this.syncPinnedScroll(),this.scheduleScrollRender(),this.ctx.onViewportScroll&&this.ctx.onViewportScroll(),e.preventDefault()});x(this,"onBodyMouseOver",e=>{var o;const t=e.target,n=(o=t==null?void 0:t.closest)==null?void 0:o.call(t,".ag-row"),i=(n==null?void 0:n.dataset.rowid)??null;if(i===this.hoveredRowId){i&&this.setRowHovered(i,!0);return}this.hoveredRowId&&this.setRowHovered(this.hoveredRowId,!1),this.hoveredRowId=i,i&&this.setRowHovered(i,!0)});x(this,"onBodyMouseLeave",()=>{this.hoveredRowId&&(this.setRowHovered(this.hoveredRowId,!1),this.hoveredRowId=null)});this.ctx=n,this.eRoot=e,this.eHeader=t,this.eBody=document.createElement("div"),this.eBody.className="ag-body",this.eRoot.appendChild(this.eBody),this.ePinnedLeft=document.createElement("div"),this.ePinnedLeft.className="ag-pinned-left-cols-viewport",this.eBody.appendChild(this.ePinnedLeft),this.ePinnedLeftInner=document.createElement("div"),this.ePinnedLeftInner.className="ag-pinned-cols-inner",this.ePinnedLeft.appendChild(this.ePinnedLeftInner);const i=document.createElement("div");i.className="ag-body-viewport-wrapper",this.eBody.appendChild(i),this.eFloatingTop=document.createElement("div"),this.eFloatingTop.className="ag-floating-top",i.appendChild(this.eFloatingTop),this.eViewport=document.createElement("div"),this.eViewport.className="ag-body-viewport",this.eViewport.tabIndex=0,this.eViewport.addEventListener("scroll",this.onScroll.bind(this)),this.eViewport.addEventListener("keydown",o=>this.ctx.onViewportKeyDown(o)),i.appendChild(this.eViewport),this.eContainer=document.createElement("div"),this.eContainer.className="ag-body-container",this.eViewport.appendChild(this.eContainer),this.eFloatingBottom=document.createElement("div"),this.eFloatingBottom.className="ag-floating-bottom",i.appendChild(this.eFloatingBottom),this.ePinnedRight=document.createElement("div"),this.ePinnedRight.className="ag-pinned-right-cols-viewport",this.eBody.appendChild(this.ePinnedRight),this.ePinnedRightInner=document.createElement("div"),this.ePinnedRightInner.className="ag-pinned-cols-inner",this.ePinnedRight.appendChild(this.ePinnedRightInner),this.eFloatingTopLeft=document.createElement("div"),this.eFloatingTopLeft.className="ag-floating-pinned-cols ag-floating-pinned-left",this.eBody.appendChild(this.eFloatingTopLeft),this.eFloatingTopRight=document.createElement("div"),this.eFloatingTopRight.className="ag-floating-pinned-cols ag-floating-pinned-right",this.eBody.appendChild(this.eFloatingTopRight),this.eFloatingBottomLeft=document.createElement("div"),this.eFloatingBottomLeft.className="ag-floating-pinned-cols ag-floating-pinned-bottom-left",this.eBody.appendChild(this.eFloatingBottomLeft),this.eFloatingBottomRight=document.createElement("div"),this.eFloatingBottomRight.className="ag-floating-pinned-cols ag-floating-pinned-bottom-right",this.eBody.appendChild(this.eFloatingBottomRight),this.eStickyTop=document.createElement("div"),this.eStickyTop.className="ag-sticky-group-rows",this.eBody.appendChild(this.eStickyTop),this.eStickyLeft=document.createElement("div"),this.eStickyLeft.className="ag-sticky-group-rows-left",this.eStickyTop.appendChild(this.eStickyLeft),this.eStickyCenter=document.createElement("div"),this.eStickyCenter.className="ag-sticky-group-rows-center",this.eStickyTop.appendChild(this.eStickyCenter),this.eStickyRight=document.createElement("div"),this.eStickyRight.className="ag-sticky-group-rows-right",this.eStickyTop.appendChild(this.eStickyRight);for(const o of[this.eFloatingTopLeft,this.eFloatingTopRight,this.eFloatingBottomLeft,this.eFloatingBottomRight,this.eStickyLeft,this.eStickyCenter,this.eStickyRight])o.addEventListener("click",this.onClick.bind(this)),o.addEventListener("dblclick",this.onDoubleClick.bind(this)),o.addEventListener("mousedown",this.onMouseDown.bind(this)),o.addEventListener("contextmenu",this.onContextMenu.bind(this)),o.addEventListener("wheel",this.onSectionWheel,{passive:!1});this.ePinnedLeft.addEventListener("click",this.onClick.bind(this)),this.ePinnedLeft.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.ePinnedLeft.addEventListener("mousedown",this.onMouseDown.bind(this)),this.ePinnedLeft.addEventListener("contextmenu",this.onContextMenu.bind(this)),this.eContainer.addEventListener("click",this.onClick.bind(this)),this.eContainer.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.eContainer.addEventListener("mousedown",this.onMouseDown.bind(this)),this.eContainer.addEventListener("contextmenu",this.onContextMenu.bind(this)),this.ePinnedRight.addEventListener("click",this.onClick.bind(this)),this.ePinnedRight.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.ePinnedRight.addEventListener("mousedown",this.onMouseDown.bind(this)),this.ePinnedRight.addEventListener("contextmenu",this.onContextMenu.bind(this)),this.eFloatingTop.addEventListener("click",this.onClick.bind(this)),this.eFloatingTop.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.eFloatingTop.addEventListener("contextmenu",this.onContextMenu.bind(this)),this.eFloatingBottom.addEventListener("click",this.onClick.bind(this)),this.eFloatingBottom.addEventListener("dblclick",this.onDoubleClick.bind(this)),this.eFloatingBottom.addEventListener("contextmenu",this.onContextMenu.bind(this));for(const o of[this.eViewport,this.ePinnedLeft,this.ePinnedRight,this.eFloatingTop,this.eFloatingBottom,this.eHeader])o.addEventListener("wheel",this.onSectionWheel,{passive:!1});this.eBody.addEventListener("mouseover",this.onBodyMouseOver),this.eBody.addEventListener("mouseleave",this.onBodyMouseLeave)}setRowHovered(e,t){for(const n of this.rowComps.values())n.getNode().id===e&&n.setHovered(t);for(const n of this.stickyComps.values())n.getNode().id===e&&n.setHovered(t)}getViewport(){return this.eViewport}getBody(){return this.eBody}getContainer(){return this.eContainer}getRowComps(){return this.rowComps}getHeaderElement(){return this.eHeader}recomputeOffsets(){const e=this.ctx.rowModel.getRowCount();this.rowIndices.clear();const t=new Array(e),n=new Array(e);let i=0;if(this.hasVariableHeights()){for(let a=0;a<e;a++)t[a]=i,n[a]=this.rowInfoAt(a),i+=this.getRowHeightForIndex(a);this.totalHeight=i}else{const a=this.getFixedRowHeight();for(let r=0;r<e;r++)t[r]=r*a,n[r]=this.rowInfoAt(r);this.totalHeight=e*a}this.rowOffsets=t,this.rowInfos=n}rowInfoAt(e){const t=this.ctx.rowModel.getRow(e);return t?(this.rowIndices.set(t.id,e),{level:t.uiLevel??t.level??0,group:!!t.group}):{level:0,group:!1}}hasVariableHeights(){return!!(this.ctx.options.detailRowAutoHeight||this.ctx.options.getRowHeight)}getFixedRowHeight(){return this.ctx.options.rowHeight??42}getRowHeightForIndex(e){const t=this.ctx.rowModel.getRow(e);return t?this.ctx.getRowHeight(t):this.getFixedRowHeight()}refreshRows(){this.recomputeOffsets(),this.eContainer.style.height=`${this.totalHeight}px`;const e=this.ctx.getColumns().center.reduce((i,o)=>i+o.width,0),t=this.ctx.getColumns().left.reduce((i,o)=>i+o.width,0),n=this.ctx.getColumns().right.reduce((i,o)=>i+o.width,0);this.eContainer.style.width=`${Math.max(e,1)}px`,this.ePinnedLeft.style.width=`${t}px`,this.ePinnedRight.style.width=`${n}px`,this.ePinnedLeft.style.height=`${this.totalHeight}px`,this.ePinnedRight.style.height=`${this.totalHeight}px`,this.eFloatingTopLeft.style.width=`${t}px`,this.eFloatingTopRight.style.width=`${n}px`,this.eFloatingBottomLeft.style.width=`${t}px`,this.eFloatingBottomRight.style.width=`${n}px`,this.eStickyLeft.style.width=`${t}px`,this.eStickyRight.style.width=`${n}px`,this.eStickyCenter.style.left=`${t}px`,this.eStickyCenter.style.right=`${n}px`,this.redrawAllRows()}invalidateRowHeights(){this.heightVersion++,this.recomputeOffsets(),this.eContainer.style.height=`${this.totalHeight}px`,this.redrawAllRows()}redrawAllRows(){for(const e of this.rowComps.values())e.destroy();this.rowComps.clear();for(const e of this.stickyComps.values())e.destroy();this.stickyComps.clear(),this.lastRange=[-1,-1],this.renderPinnedRows(),this.renderVisibleRows(!0)}renderPinnedRows(){var n,i;const e=(o,a,r,l,d)=>{o.innerHTML="",a.innerHTML="",r.innerHTML="";const{left:c,center:p,right:h}=this.ctx.getColumns();let u=0;for(let f=0;f<l;f++){const g=d(f);if(!g)continue;const v=this.ctx.getRowHeight(g),m=new Qt(this.ctx,g,c,p,h,v,this.heightVersion);m.appendTo(a,o,r),m.setTop(u),u+=v,this.rowComps.set(`${g.id}|${o===this.eFloatingTop?"top":"bottom"}`,m)}o.style.height=`${u}px`,o.style.display=l>0?"":"none",a.style.height=`${u}px`,r.style.height=`${u}px`},t=this.ctx.rowModel;e(this.eFloatingTop,this.eFloatingTopLeft,this.eFloatingTopRight,((n=t.getPinnedTopRowCount)==null?void 0:n.call(t))??0,o=>{var a;return(a=t.getPinnedTopRow)==null?void 0:a.call(t,o)}),e(this.eFloatingBottom,this.eFloatingBottomLeft,this.eFloatingBottomRight,((i=t.getPinnedBottomRowCount)==null?void 0:i.call(t))??0,o=>{var a;return(a=t.getPinnedBottomRow)==null?void 0:a.call(t,o)})}refreshCells(e){const t=e==null?void 0:e.rowNodes;let n;e!=null&&e.columns&&(n=e.columns.map(i=>typeof i=="string"?this.ctx.getColumns().left.concat(this.ctx.getColumns().center,this.ctx.getColumns().right).find(o=>o.colId===i):i).filter(Boolean));for(const[i,o]of this.rowComps)t&&!t.includes(o.getNode())||o.refreshCells(n,e==null?void 0:e.force,e==null?void 0:e.flash);for(const i of this.stickyComps.values())t&&!t.includes(i.getNode())||i.refreshCells(n,e==null?void 0:e.force,e==null?void 0:e.flash)}flashCells(e){this.refreshCells({...e,force:!0,flash:!0})}redrawRows(e){if(!(e!=null&&e.rowNodes)){this.redrawAllRows();return}for(const t of this.rowComps.values())if(e.rowNodes.includes(t.getNode())){const n=t.getNode(),i=this.findRowIndex(n);if(t.destroy(),this.rowComps.delete(this.rowCompKey(n)),i>=0){const{left:o,center:a,right:r}=this.ctx.getColumns(),l=new Qt(this.ctx,n,o,a,r,this.getRowHeightForIndex(i),this.heightVersion);l.appendTo(this.ePinnedLeftInner,this.eContainer,this.ePinnedRightInner),l.setTop(this.rowOffsets[i]??0),this.rowComps.set(this.rowCompKey(n),l)}}for(const t of this.stickyComps.values())e.rowNodes.includes(t.getNode())&&(t.destroy(),this.stickyComps.delete(t.getNode().id));this.renderVisibleRows(!0)}rowCompKey(e){return e.id}findRowIndex(e){return this.rowIndices.get(e.id)??-1}scheduleScrollRender(){this.scrollFrame===null&&(this.scrollFrame=requestAnimationFrame(()=>{this.scrollFrame=null,this.renderVisibleRows()}))}onScroll(){this.syncPinnedScroll(),this.scheduleScrollRender(),this.ctx.onViewportScroll&&this.ctx.onViewportScroll(),this.ctx.eventService.dispatchEvent("bodyScroll",{direction:"vertical",top:this.eViewport.scrollTop,left:this.eViewport.scrollLeft})}syncPinnedScroll(){const e=`translateY(${-this.eViewport.scrollTop}px)`;this.ePinnedLeftInner.style.transform=e,this.ePinnedRightInner.style.transform=e,this.ePinnedLeft.scrollTop=this.eViewport.scrollTop,this.ePinnedRight.scrollTop=this.eViewport.scrollTop,this.syncStickyHorizontal()}syncStickyHorizontal(){const n=`translateX(${getComputedStyle(this.eStickyTop).direction==="rtl"?this.eViewport.scrollLeft:-this.eViewport.scrollLeft}px)`;for(const i of this.stickyComps.values()){const o=i.getCenterElement();o&&(o.style.transform=n)}}getVerticalScrollTop(){return this.eViewport.scrollTop}setVerticalScrollTop(e){this.eViewport.scrollTop=e,this.syncPinnedScroll(),this.renderVisibleRows()}getHorizontalScrollLeft(){return this.eViewport.scrollLeft}getVerticalScrollbarWidth(){return Math.max(0,this.eViewport.offsetWidth-this.eViewport.clientWidth)}setHorizontalScrollLeft(e){var t,n;this.eViewport.scrollLeft=e,this.syncPinnedScroll(),(n=(t=this.ctx).onViewportScroll)==null||n.call(t)}syncStickyGroupRows(){const e=this.ctx.options.suppressGroupRowsSticky?[]:Si(this.rowOffsets,this.rowInfos,this.eViewport.scrollTop),{left:t,center:n,right:i}=this.ctx.getColumns(),o=parseFloat(this.eFloatingTop.style.height||"0")||0;this.eStickyTop.style.top=`${o}px`;const a=new Set;let r=0;for(const d of e){const c=this.ctx.rowModel.getRow(d);if(!c||!c.group)continue;a.add(c.id);let p=this.stickyComps.get(c.id);if(!p){const h=this.rowComps.get(c.id);h&&(h.destroy(),this.rowComps.delete(c.id)),p=new Qt(this.ctx,c,t,n,i,this.getRowHeightForIndex(d),this.heightVersion),p.appendTo(this.eStickyLeft,this.eStickyCenter,this.eStickyRight),p.setSticky(!0),this.stickyComps.set(c.id,p)}p.setTop(r),r+=this.getRowHeightForIndex(d)}for(const[d,c]of this.stickyComps)a.has(d)||(c.destroy(),this.stickyComps.delete(d));const l=`${r}px`;return this.eStickyTop.style.height=l,this.eStickyLeft.style.height=l,this.eStickyCenter.style.height=l,this.eStickyRight.style.height=l,this.syncStickyHorizontal(),a}renderVisibleRows(e=!1){const t=this.ctx.rowModel.getRowCount(),n=this.eViewport.scrollTop,i=this.eViewport.clientHeight,o=this.ctx.options.rowBuffer??10;let a,r;if(this.hasVariableHeights())a=this.findIndexAtPixel(n)-o,r=this.findIndexAtPixel(n+i)+o;else{const v=this.getFixedRowHeight();a=Math.floor(n/v)-o,r=Math.ceil((n+i)/v)+o}if(a=Math.max(0,a),r=Math.min(t-1,r),!e&&this.lastRange[0]===a&&this.lastRange[1]===r&&this.lastScrollTop===n)return;const l=this.lastRange[0]!==a||this.lastRange[1]!==r;this.lastRange=[a,r],this.lastScrollTop=n;const d=new Set(this.stickyComps.keys()),c=this.syncStickyGroupRows(),p=d.size!==c.size||[...d].some(v=>!c.has(v));if(!e&&!l&&!p)return;const h=new Set(c),{left:u,center:f,right:g}=this.ctx.getColumns();for(let v=a;v<=r;v++){const m=this.ctx.rowModel.getRow(v);if(!m||(h.add(m.id),c.has(m.id)))continue;let b=this.rowComps.get(m.id);b||(b=new Qt(this.ctx,m,u,f,g,this.getRowHeightForIndex(v),this.heightVersion),b.appendTo(this.ePinnedLeftInner,this.eContainer,this.ePinnedRightInner),this.rowComps.set(m.id,b)),b.setTop(this.rowOffsets[v]??v*this.getFixedRowHeight())}for(const[v,m]of this.rowComps)!h.has(v)&&!m.isPinned()&&(m.destroy(),this.rowComps.delete(v))}findIndexAtPixel(e){const t=this.rowOffsets;let n=0,i=t.length-1;for(;n<i;){const o=n+i+1>>1;t[o]<=e?n=o:i=o-1}return n}ensureIndexVisible(e,t="top"){const n=this.rowOffsets[e]??e*this.getFixedRowHeight(),i=this.getRowHeightForIndex(e),o=this.eViewport.clientHeight;let a;t==="top"?a=n:t==="bottom"?a=n+i-o:a=n-(o-i)/2,this.eViewport.scrollTop=Math.max(0,a),this.renderVisibleRows()}getFirstVisibleRowIndex(){return Math.max(0,this.findIndexAtPixel(this.eViewport.scrollTop))}getLastVisibleRowIndex(){return Math.max(0,this.findIndexAtPixel(this.eViewport.scrollTop+this.eViewport.clientHeight))}ensureColumnVisible(e,t="end"){const n=this.eViewport.clientWidth,i=this.eViewport.scrollLeft,o=e.left-this.ctx.getColumns().left.reduce((a,r)=>a+r.width,0);o<i?this.eViewport.scrollLeft=Math.max(0,t==="middle"?o-(n-e.width)/2:o):o+e.width>i+n&&(this.eViewport.scrollLeft=o+e.width-n),this.renderVisibleRows()}getCellPosition(e,t){return{top:this.rowOffsets[e]??e*this.getFixedRowHeight(),left:t.left,height:this.getRowHeightForIndex(e),width:t.width}}getRowOffsets(){return this.rowOffsets}getTotalHeight(){return this.totalHeight}findCellFromEvent(e){const n=e.target.closest(".ag-cell");if(!n)return null;const i=n.dataset.colid;if(!i)return null;const o=n.closest(".ag-row"),a=o==null?void 0:o.dataset.rowid;if(!a)return null;const r=this.ctx.rowModel.getRowNode(a);if(!r)return null;const d=[...this.ctx.getColumns().left,...this.ctx.getColumns().center,...this.ctx.getColumns().right].find(c=>c.colId===i);return d?{node:r,column:d,eCell:n,rowIndex:this.findRowIndex(r)}:null}onClick(e){const t=this.findCellFromEvent(e);if(t){this.ctx.onCellClicked({event:e,node:t.node,column:t.column,value:ke(t.column,t.node,null),rowIndex:this.findRowIndex(t.node),colDef:t.column.colDef});return}const n=e.target.closest(".ag-row");if(n!=null&&n.dataset.rowid){const i=this.ctx.rowModel.getRowNode(n.dataset.rowid);i&&this.ctx.onRowClicked({event:e,node:i,data:i.data,rowIndex:this.findRowIndex(i)})}}onDoubleClick(e){const t=this.findCellFromEvent(e);if(t){this.ctx.onCellDoubleClicked({event:e,node:t.node,column:t.column,value:ke(t.column,t.node,null),rowIndex:this.findRowIndex(t.node),colDef:t.column.colDef});return}const n=e.target.closest(".ag-row");if(n!=null&&n.dataset.rowid){const i=this.ctx.rowModel.getRowNode(n.dataset.rowid);i&&this.ctx.onRowDoubleClicked({event:e,node:i,data:i.data})}}onMouseDown(e){const t=this.findCellFromEvent(e);t&&this.ctx.onCellMouseDown({event:e,node:t.node,column:t.column,value:ke(t.column,t.node,null),rowIndex:this.findRowIndex(t.node)})}onContextMenu(e){const t=this.findCellFromEvent(e);t&&this.ctx.onCellContextMenu({event:e,node:t.node,column:t.column,value:ke(t.column,t.node,null),rowIndex:this.findRowIndex(t.node)})}destroy(){this.scrollFrame!==null&&cancelAnimationFrame(this.scrollFrame),this.scrollFrame=null;for(const e of this.rowComps.values())e.destroy();this.rowComps.clear();for(const e of this.stickyComps.values())e.destroy();this.stickyComps.clear()}}class lt{constructor(){x(this,"cleanups",new Set);x(this,"stopped",!1)}get destroyed(){return this.stopped}add(e){return this.stopped?e():this.cleanups.add(e),()=>{this.cleanups.delete(e)&&e()}}listen(e,t,n,i){return e.addEventListener(t,n,i),this.add(()=>e.removeEventListener(t,n,i))}timeout(e,t){if(this.stopped)return 0;const n=window.setTimeout(()=>{i(),this.stopped||e()},t),i=this.add(()=>window.clearTimeout(n));return n}interval(e,t){if(this.stopped)return 0;const n=window.setInterval(()=>{this.stopped||e()},t);return this.add(()=>window.clearInterval(n)),n}destroy(){if(this.stopped)return;this.stopped=!0;const e=[...this.cleanups].reverse();this.cleanups.clear();let t;for(const n of e)try{n()}catch(i){t??(t=i)}if(t!==void 0)throw t}}function qe(s,e,t={},n=[]){const i=new lt,o=new Set,a=h=>[...o].some(u=>u.contains(h)),r=new Set,l=new WeakMap,d=h=>{const u=h.target;if(!(u!=null&&u.closest))return;const f=u.closest('button,input,select,textarea,a,[data-action],[contenteditable],[role="button"],[role="tab"],[data-node-id],[data-rowid],[data-viewport],canvas');if(!f||!a(f))return;const g={};for(let m=f;m&&a(m);m=m.parentElement)for(const[b,k]of Object.entries(m.dataset))k!==void 0&&!(b in g)&&(g[b]=k);const v=f;l.has(h)||(l.set(h,{component:e,type:h.type,action:g.action??g.control,value:"value"in f?v.value:void 0,checked:v.type==="checkbox"||v.type==="radio"?v.checked:void 0,data:g,originalEvent:h}),queueMicrotask(()=>c(h)))},c=h=>{var g;const u=l.get(h);if(!u||i.destroyed)return;l.delete(h),(g=t.onInteraction)==null||g.call(t,u);for(const v of[...r])v(u);const f=s.ownerDocument.defaultView.CustomEvent;s.dispatchEvent(new f("rowvia:interaction",{detail:u,bubbles:!0}))},p=h=>{if(i.destroyed||o.has(h))return()=>{};o.add(h);const u=[];for(const f of["click","dblclick","contextmenu","input","change","submit","keydown","pointerdown","pointerup","wheel"])u.push(i.listen(h,f,d,{capture:!0,passive:!0}));return()=>{o.delete(h),u.forEach(f=>f())}};for(const h of[s,...n])p(h);return{addRoot:p,onInteraction(h){return i.destroyed?()=>{}:(r.add(h),()=>{r.delete(h)})},destroy(){i.destroy(),r.clear(),o.clear()}}}const Ma={rowHeight:42,headerHeight:48,floatingFiltersHeight:24,groupHeaderHeight:48,pivotHeaderHeight:48,rowBuffer:10,detailRowHeight:200,animateRows:!0,enableCellChangeFlash:!0,rowSelection:void 0,sortingOrder:["asc","desc",null],enterNavigatesVerticallyAfterEdit:!0,treeDataChildrenField:"children",suppressClickEdit:!1};class Mt{constructor(e,t){x(this,"interactions");x(this,"onInteraction");x(this,"options");x(this,"eventService",new ho);x(this,"columnModel");x(this,"rowModel");x(this,"clientSideRowModel",null);x(this,"serverSideRowModel",null);x(this,"infiniteRowModel",null);x(this,"viewportRowModel",null);x(this,"rowRenderer");x(this,"headerView");x(this,"selectionService");x(this,"editService");x(this,"filterService");x(this,"sortService");x(this,"paginationService",null);x(this,"popupService");x(this,"filterGui");x(this,"contextMenuService");x(this,"columnMenuService");x(this,"statusBarService");x(this,"sideBarService");x(this,"findService");x(this,"rangeSelectionService");x(this,"chartService");x(this,"overlayService");x(this,"exportService");x(this,"rowGroupPanel",null);x(this,"undoRedoService");x(this,"formulaEditorService");x(this,"notesService");x(this,"rowDragService");x(this,"api");x(this,"columnApi");x(this,"localeText");x(this,"rowNodeServices");x(this,"eGridDiv");x(this,"eRoot");x(this,"eMain");x(this,"eHeader");x(this,"quickFilter","");x(this,"resizeObserver",null);x(this,"destroyed",!1);x(this,"gridReadyDispatched",!1);x(this,"context");x(this,"onWindowResize",()=>{this.onGridSizeChanged()});x(this,"onDocumentMouseDown",e=>{var n;const t=e.target;if(t&&this.eRoot.contains(t)){const i=(n=t.closest)==null?void 0:n.call(t,".ag-cell");if(!i){this.editService.isEditing()&&this.editService.stopEditing(!1),this.editService.clearFocusedCell();return}this.editService.isEditing()&&!i.classList.contains("ag-cell-inline-editing")&&this.editService.stopEditing(!1);return}this.editService.isEditing()&&this.editService.stopEditing(!1),this.editService.clearFocusedCell()});var d,c,p,h;this.eGridDiv=e,this.options={...Ma,...t},this.quickFilter=this.options.quickFilterText||"",this.context=this.options.context,this.localeText=go(this.options.localeText),this.eGridDiv.classList.add("ag-grid-root");const n=this.options.theme||"ag-theme-alpine";this.eGridDiv.classList.add(n),this.eRoot=document.createElement("div"),this.eRoot.className="ag-root",this.eGridDiv.appendChild(this.eRoot),this.interactions=qe(this.eRoot,"grid",this.options),this.onInteraction=this.interactions.onInteraction,this.eMain=document.createElement("div"),this.eMain.className="ag-main",this.eRoot.appendChild(this.eMain),this.eHeader=document.createElement("div"),this.eHeader.className="ag-header-wrapper",this.eMain.appendChild(this.eHeader),this.rowNodeServices={selectNode:(u,f)=>this.selectionService.selectNode(u,f),deselectNode:u=>this.selectionService.deselectNode(u),isNodeSelected:u=>this.selectionService.isNodeSelected(u)},this.columnModel=new ci(this.options,this.eventService,null),this.columnModel.setGridApi(null),this.selectionService=new ba(this.eventService,()=>({...this.options,__rowModel:this.rowModel,__api:this.api}),u=>this.isNodeSelectable(u)),this.filterService=new ca(this),this.sortService=new Ca(this),this.popupService=new ga(this),this.filterGui=new da(this,this.popupService),this.contextMenuService=new Wo(this,this.popupService),this.columnMenuService=new _o(this,this.popupService),this.editService=new Uo(this,this.eventService),this.undoRedoService=new Ea(this,this.eventService),this.formulaEditorService=new ha(this,this.popupService),this.notesService=new pa(this,this.popupService),this.rowDragService=new va(this,this.eventService),this.chartService=new yo(this,this.popupService),this.findService=new ua(this,this.popupService),this.exportService=new la(this);const i={options:this.options,eventService:this.eventService,columns:()=>this.getAllColumns(),getSortModel:()=>this.sortService.getSortModel(),getFilterModel:()=>this.filterService.getFilterModel(),rowHeight:()=>this.options.rowHeight??42,rowNodeServices:this.rowNodeServices},o=this.options.rowModelType||"clientSide";o==="serverSide"?(this.serverSideRowModel=new vo(i),this.rowModel=this.serverSideRowModel,this.options.serverSideDatasource&&this.serverSideRowModel.setDatasource(this.options.serverSideDatasource)):o==="infinite"?(this.infiniteRowModel=new wo(i),this.rowModel=this.infiniteRowModel,this.options.serverSideDatasource&&this.infiniteRowModel.setDatasource(this.options.serverSideDatasource)):o==="viewport"?(this.viewportRowModel=new bo(i),this.rowModel=this.viewportRowModel,this.options.serverSideDatasource&&this.viewportRowModel.setViewportDatasource(this.options.serverSideDatasource)):(this.clientSideRowModel=new so({options:this.options,eventService:this.eventService,columns:()=>this.getAllColumns(),getFilterModel:()=>this.filterService.getFilterModel(),getQuickFilter:()=>this.quickFilter,isPaginationEnabled:()=>{var u;return!!((u=this.paginationService)!=null&&u.isEnabled())},getPageSize:()=>{var u;return((u=this.paginationService)==null?void 0:u.getPageSize())??100},getCurrentPage:()=>{var u;return((u=this.paginationService)==null?void 0:u.getCurrentPage())??0},rowHeight:()=>this.options.rowHeight??42,rowNodeServices:this.rowNodeServices}),this.rowModel=this.clientSideRowModel,(c=(d=this.rowModel).setGridApi)==null||c.call(d,null)),this.headerView=new xa(this.eHeader,{options:this.options,eventService:this.eventService,getColumns:()=>this.getColumns(),getColumnModel:()=>this.columnModel,getSortState:()=>({sortColumns:this.getAllColumns().filter(u=>u.sort)}),onSortRequested:(u,f,g)=>this.sortService.onSortRequested(u,f,g),onColumnResized:(u,f,g)=>this.onColumnResized(u,f,g),onColumnMoved:(u,f)=>this.onColumnMoved(u,f),onColumnMenuClicked:(u,f)=>this.columnMenuService.openColumnMenu(u,f),onFilterOpened:(u,f)=>this.filterGui.openFilter(u,f),isFilterActive:u=>this.filterService.isFilterActive(u),getQuickFilterText:()=>this.quickFilter,onFloatingFilterChanged:(u,f)=>this.filterService.handleFloatingFilterChange(u,f),onHeaderCheckboxChanged:(u,f)=>this.onHeaderCheckboxChanged(u,f),onColumnPinnedRequested:()=>{},isColumnMenuSuppressed:()=>!1,headerHeight:this.options.headerHeight??48,t:u=>this.t(u),getApi:()=>this.api,getFilterModel:u=>this.filterService.getFilterInstance(u)??null,onFilterModelChange:(u,f)=>this.filterService.setColumnFilterModel(u,f)}),this.rowRenderer=new ka(this.eMain,this.eHeader,{options:this.options,eventService:this.eventService,rowModel:this.rowModel,t:u=>this.t(u),getColumns:()=>this.getColumns(),getRowHeight:u=>this.getRowHeight(u),isNodeSelected:u=>this.selectionService.isNodeSelected(u),isRowSelectable:u=>this.isNodeSelectable(u),getRowClass:u=>this.getRowClass(u),getRowStyle:u=>this.getRowStyle(u),onCellClicked:u=>this.onCellClicked(u),onCellDoubleClicked:u=>this.editService.onCellDoubleClicked(u),onCellMouseDown:u=>this.onCellMouseDown(u),onCellContextMenu:u=>this.onCellContextMenu(u),onRowClicked:u=>this.onRowClicked(u),onRowDoubleClicked:u=>this.onRowDoubleClicked(u),onRowGroupClicked:u=>this.onRowGroupClicked(u),onViewportKeyDown:u=>this.onViewportKeyDown(u),onViewportScroll:()=>{var g,v,m;this.headerView.setScrollLeft(this.rowRenderer.getHorizontalScrollLeft(),this.rowRenderer.getVerticalScrollbarWidth());const u=this.rowRenderer.getFirstVisibleRowIndex(),f=this.rowRenderer.getLastVisibleRowIndex();(g=this.serverSideRowModel)==null||g.onViewportChanged(u,f),(v=this.infiniteRowModel)==null||v.onViewportChanged(u,f),(m=this.viewportRowModel)==null||m.onViewportChanged(u,f)},getCellText:(u,f)=>{const g=ke(u,f,this.api);return g==null?"":String(g)},renderDetailRow:u=>this.renderDetailRow(u),rowDragEnabled:()=>this.rowDragService.isEnabled(),onRowDragStart:(u,f,g)=>this.rowDragService.startDrag(u,g),getNote:(u,f,g,v)=>this.notesService.getNote(u,f,g,v),onNoteClick:(u,f,g)=>this.notesService.openNoteEditor(u,f,g),rowNumberOffset:()=>this.columnModel.getOptions().rowNumbers?1:0}),this.rangeSelectionService=new ma(this,this.eventService),this.statusBarService=new Sa(this,this.eventService),this.eMain.appendChild(this.statusBarService.getElement()),this.overlayService=new fa(this),this.sideBarService=new ya(this),this.sideBarService.getElement().classList.contains("ag-side-bar-left")?this.eRoot.insertBefore(this.sideBarService.getElement(),this.eMain):this.eRoot.appendChild(this.sideBarService.getElement()),this.options.pagination&&(this.paginationService=new Ci(this,this.eventService)),(this.options.rowGroupPanelShow==="always"||this.options.rowGroupPanelShow==="onlyWhenGrouping")&&(this.rowGroupPanel=new wa(this));const{api:a,columnApi:r}=io(this);this.api=a,this.columnApi=r,this.columnModel.setGridApi(this.api),(h=(p=this.rowModel).setGridApi)==null||h.call(p,this.api),this.selectionService.gridApiRef=this.api,this.eventService.addEventListener("columnEverythingChanged",()=>this.onColumnsChanged()),this.eventService.addEventListener("displayedColumnsChanged",()=>this.onColumnsChanged()),this.eventService.addEventListener("columnRowGroupChanged",()=>{this.serverSideRowModel||this.infiniteRowModel?this.onRemoteModelChanged():this.rowModel.refreshModel("group")}),this.options.__advancedFilterPass=u=>this.filterService.doesNodePassAdvancedFilter(u),this.eventService.addEventListener("columnPivotModeChanged",()=>this.refreshPivotColumns()),this.eventService.addEventListener("modelUpdated",()=>{this.columnModel.isPivotMode()&&this.refreshPivotColumns()}),this.eventService.addEventListener("sortChanged",()=>this.onRemoteModelChanged()),this.eventService.addEventListener("filterChanged",()=>this.onRemoteModelChanged()),this.eventService.addEventListener("columnValueChanged",()=>this.rowModel.refreshModel("group")),this.eventService.addEventListener("columnPivotModeChanged",()=>this.rowModel.refreshModel("group")),this.eventService.addEventListener("modelUpdated",()=>this.onModelUpdated()),this.eventService.addEventListener("selectionChanged",()=>{var u,f;this.statusBarService.update(),this.rowRenderer.refreshCells({force:!0}),(f=(u=this.options).onSelectionChanged)==null||f.call(u,{api:this.api}),this.updateHeaderCheckboxes()}),this.eventService.addEventListener("paginationChanged",()=>{this.statusBarService.update()});let l=this.options.columnDefs||[];(!l||l.length===0)&&this.options.autoGenerateColumns!==!1&&(this.options.rowData||[]).length>0&&(l=ci.generateColumnDefs(this.options.rowData)),this.columnModel.setColumnDefs(l),this.setRowData(this.options.rowData||[],!0),typeof ResizeObserver<"u"&&(this.resizeObserver=new ResizeObserver(()=>this.onGridSizeChanged()),this.resizeObserver.observe(this.eGridDiv)),window.addEventListener("resize",this.onWindowResize),document.addEventListener("mousedown",this.onDocumentMouseDown,!0),this.onGridSizeChanged(),this.options.enableRtl&&this.eGridDiv.classList.add("ag-direction-rtl"),this.eRoot.setAttribute("role","grid"),this.eRoot.setAttribute("aria-rowcount",String(this.getDisplayedRowCount())),this.eRoot.setAttribute("aria-colcount",String(this.getColumns().center.length+this.getColumns().left.length+this.getColumns().right.length)),this.eRoot.setAttribute("aria-label",this.translate("dataGrid","数据表格")),this.rowRenderer.getViewport().setAttribute("role","presentation"),this.options.enableCharts&&this.options.chartStorageKey&&this.chartService.loadCharts(),this.dispatchGridReady()}getOptions(){return this.options}t(e){return this.localeText.t(e)}translate(e,t){const n=this.localeText.t(e);return n===e?t:n}getContext(){return this.context}getEventService(){return this.eventService}getColumnModel(){return this.columnModel}getRowModel(){return this.rowModel}getRowRenderer(){return this.rowRenderer}getHeaderView(){return this.headerView}getSelectionService(){return this.selectionService}getEditService(){return this.editService}getFilterService(){return this.filterService}getSortService(){return this.sortService}getFilterGui(){return this.filterGui}getPaginationService(){return this.paginationService}getSideBarService(){return this.sideBarService}getChartService(){return this.chartService}getFindService(){return this.findService}getRangeSelectionService(){return this.rangeSelectionService}getExportService(){return this.exportService}getPopupService(){return this.popupService}getOverlayService(){return this.overlayService}getRowGroupPanel(){return this.rowGroupPanel}getUndoRedoService(){return this.undoRedoService}getFormulaEditorService(){return this.formulaEditorService}getNotesService(){return this.notesService}getRowDragService(){return this.rowDragService}getServerSideRowModel(){return this.serverSideRowModel}getInfiniteRowModel(){return this.infiniteRowModel}getViewportRowModel(){return this.viewportRowModel}updateColumnTotalCache(){var n,i;const e=new Map,t=this.getAllColumns().filter(o=>o.colDef.showValueAs);if(t.length>0){const o=new Map;(i=(n=this.rowModel).forEachLeafNode)==null||i.call(n,a=>{for(const r of t){const l=ke(r,a,this.api);typeof l=="number"&&!isNaN(l)&&o.set(r.colId,(o.get(r.colId)??0)+l)}});for(const a of t)e.set(a.colId,o.get(a.colId)??0)}this.api.__columnTotalCache=e}refreshPivotColumns(){this.columnModel.updatePivotColumns(this.options.rowData||[])}onRemoteModelChanged(){this.serverSideRowModel?this.serverSideRowModel.onSortOrFilterChanged():this.infiniteRowModel?this.infiniteRowModel.onSortOrFilterChanged():this.viewportRowModel&&this.viewportRowModel.setViewportDatasource(this.viewportRowModel.datasource)}isRemoteLoading(){var e,t,n;return!!((e=this.serverSideRowModel)!=null&&e.isLoading()||(t=this.infiniteRowModel)!=null&&t.isLoading()||(n=this.viewportRowModel)!=null&&n.isLoading())}getApi(){return this.api}getColumnApi(){return this.columnApi}getRootElement(){return this.eRoot}getMainElement(){return this.eMain}getHeaderElement(){return this.eHeader}getGridDiv(){return this.eGridDiv}getColumns(){return this.columnModel.getDisplayedColumnsByType()}getAllColumns(){return this.columnModel.getAllColumns()}getColumn(e){return this.columnModel.getColumn(e)}getDisplayedRowCount(){return this.rowModel.getRowCount()}getDisplayedRowAtIndex(e){return this.rowModel.getRow(e)}getRowNode(e){return this.rowModel.getRowNode(e)}getRowHeight(e){if(e.rowHeight!==null)return e.rowHeight;const t=this.options.getRowHeight;if(typeof t=="function"){const n=t({data:e.data,node:e,api:this.api});if(n)return n}return this.options.rowHeight??42}getRowClass(e){const t=[];if(this.options.rowClass&&t.push(this.options.rowClass),typeof this.options.getRowClass=="function"){const n=this.options.getRowClass({data:e.data,node:e,api:this.api});typeof n=="string"?t.push(n):Array.isArray(n)&&t.push(...n)}return e.footer&&t.push("ag-row-footer"),t.join(" ")}getRowStyle(e){const t={};return this.options.rowStyle&&Object.assign(t,this.options.rowStyle),typeof this.options.getRowStyle=="function"&&Object.assign(t,this.options.getRowStyle({data:e.data,node:e,api:this.api})),t}isNodeSelectable(e){if(e.footer||e.masterNode)return!1;const t=this.options.isRowSelectable;return!(t&&!t(e))}isCellEditable(e,t){return this.options.readOnlyEdit||t.group||t.footer||t.masterNode?!1:typeof e.editable=="function"?e.editable({data:t.data,node:t,column:e,colDef:e.colDef,api:this.api}):e.editable===!0}setRowData(e,t=!1){var n,i,o;this.options.rowData=e,this.rowModel.updateRowData(e),this.columnModel.isPivotMode()&&this.refreshPivotColumns(),this.selectionService.syncWithModel(),t||(this.overlayService.updateAuto(),this.statusBarService.update(),(n=this.paginationService)==null||n.update(),this.chartService.refreshCharts(),(o=(i=this.options).onRowDataChanged)==null||o.call(i,{api:this.api}))}applyTransaction(e){var n;const t=this.rowModel.applyTransaction(e);return this.selectionService.syncWithModel(),this.overlayService.updateAuto(),this.statusBarService.update(),(n=this.paginationService)==null||n.update(),this.chartService.refreshCharts(),this.eventService.dispatchEvent("rowDataUpdated",{api:this.api}),t}setCellValue(e,t,n,i="api",o){const a=o!==void 0?o:ke(e,t,this.api);if(e.valueSetter){if(e.valueSetter({oldValue:ke(e,t,this.api),newValue:n,data:t.data,node:t,column:e,api:this.api,colDef:e.colDef})===!1)return}else t.setDataValue(e.colId,n);e.rowGroup&&this.rowModel.refreshModel("group"),(i==="edit"||i==="batchEdit")&&this.undoRedoService.pushAction({rowNodeId:t.id,colId:e.colId,oldValue:a,newValue:n,batchId:0}),i!=="edit"&&this.eventService.dispatchEvent("cellValueChanged",{oldValue:null,newValue:n,value:n,data:t.data,node:t,column:e,colDef:e.colDef,api:this.api,source:i})}refreshModel(e){var t;this.rowModel.refreshModel(e),(t=this.paginationService)==null||t.update()}refreshCells(e){this.rowRenderer.refreshCells(e)}setQuickFilter(e){this.quickFilter=e||"",this.refreshModel("filter"),this.findService.applyHighlight()}getQuickFilter(){return this.quickFilter}setRowNodePinned(e,t){e.rowPinned=t,this.rowModel.refreshModel("everything")}openFind(){this.findService.open()}closeFind(){this.findService.close()}onCellClicked(e){var a,r,l,d;const{node:t,column:n,event:i}=e;if(this.options.enableRangeSelection,n.checkboxSelection){this.selectionService.toggleNode(t),this.rowRenderer.refreshCells({rowNodes:[t]}),(r=(a=this.options).onCellClicked)==null||r.call(a,{...e,api:this.api,colDef:n.colDef,value:ke(n,t,this.api)});return}if(i.target.closest(".ag-group-value-expanded-icon")){this.onRowGroupClicked(t);return}this.selectionService.handleRowClick(t,i),this.editService.onCellClicked(e),(d=(l=this.options).onCellClicked)==null||d.call(l,{...e,api:this.api,colDef:n.colDef,value:ke(n,t,this.api)})}onCellMouseDown(e){this.options.enableRangeSelection&&this.rangeSelectionService.onCellMouseDown(e)}onRowClicked(e){var t,n;this.selectionService.handleRowClick(e.node,e.event),(n=(t=this.options).onRowClicked)==null||n.call(t,{...e,api:this.api})}onRowDoubleClicked(e){var t,n;(n=(t=this.options).onRowDoubleClicked)==null||n.call(t,{...e,api:this.api})}onCellContextMenu(e){var n,i;const t=e.event.target.closest(".ag-cell")||this.eRoot;this.contextMenuService.openContextMenu(t,{column:e.column,node:e.node}),(i=(n=this.options).onCellContextMenu)==null||i.call(n,{...e,api:this.api,colDef:e.column.colDef})}onRowGroupClicked(e){var t,n,i,o,a;if(e.group){const r=(t=this.rowModel.setNodeExpanded)==null?void 0:t.bind(this.rowModel);r&&r(e,!e.expanded),globalThis.__dbgLogs.push(["after-toggle",e.id,"expanded=",e.expanded]),this.eventService.dispatchEvent("rowGroupOpened",{node:e,expanded:e.expanded,api:this.api}),(i=(n=this.options).onRowGroupOpened)==null||i.call(n,{node:e,expanded:e.expanded,api:this.api})}else e.detailNode?(e.expanded=!e.expanded,this.rowModel.refreshModel("expand"),this.eventService.dispatchEvent("rowGroupOpened",{node:e,expanded:e.expanded,api:this.api}),(a=(o=this.options).onRowGroupOpened)==null||a.call(o,{node:e,expanded:e.expanded,api:this.api})):e.masterNode&&(e.masterNode.expanded=!e.masterNode.expanded,this.rowModel.refreshModel("expand"),this.eventService.dispatchEvent("rowGroupOpened",{node:e.masterNode,expanded:e.masterNode.expanded,api:this.api}))}onHeaderCheckboxChanged(e,t){var n;if(e.headerCheckboxSelectionCurrentPageOnly&&((n=this.paginationService)!=null&&n.isEnabled())){const i=this.rowModel.getRowCount();if(t)for(let o=0;o<i;o++){const a=this.rowModel.getRow(o);a&&this.isNodeSelectable(a)&&this.selectionService.selectNode(a,!1)}else for(let o=0;o<i;o++){const a=this.rowModel.getRow(o);a&&this.selectionService.deselectNode(a)}}else this.selectionService.setSelectAllCheckboxState(t);this.updateHeaderCheckboxes()}updateHeaderCheckboxes(){for(const e of this.getAllColumns()){if(!e.headerCheckboxSelection)continue;const t=e.eHeaderCell;if(!t)continue;const n=t.querySelector(".ag-header-select-all");if(!n)continue;const i=this.selectionService.getSelectAllState();n.checked=i.checked,n.indeterminate=i.indeterminate}}onViewportKeyDown(e){if(this.editService.onGridKeyDown(e),this.rangeSelectionService.onGridKeyDown(e),(e.ctrlKey||e.metaKey)&&(e.key==="z"||e.key==="Z")){e.preventDefault(),e.shiftKey?this.undoRedoService.redo():this.undoRedoService.undo();return}if((e.ctrlKey||e.metaKey)&&(e.key==="y"||e.key==="Y")){e.preventDefault(),this.undoRedoService.redo();return}(e.ctrlKey||e.metaKey)&&(e.key==="c"||e.key==="C")&&this.rangeSelectionService.getRanges().length===0&&this.selectionService.getSelectedNodes().length>0&&(e.preventDefault(),this.api.copyToClipboard()),(e.ctrlKey||e.metaKey)&&(e.key==="v"||e.key==="V")&&this.rangeSelectionService.getRanges().length===0&&(e.preventDefault(),this.api.pasteFromClipboard())}onColumnResized(e,t,n){e.width=t,e.flex=null,this.headerView.updateIndicators(),this.rowRenderer.redrawAllRows(),this.rangeSelectionService.updateOverlay(),n&&this.eventService.dispatchEvent("columnResized",{column:e,source:"uiColumnResized",finished:!0,api:this.api})}onColumnMoved(e,t){const n=this.columnModel.getColumns(),i=n.findIndex(a=>a.colId===e);if(i<0)return;let o=n.length;t&&(o=n.findIndex(a=>a.colId===t)),this.columnModel.moveColumnByIndex(i,o,"uiColumnMoved")}onColumnsChanged(){var e,t;this.headerView.refresh(),this.rowRenderer.refreshRows(),this.updateHeaderCheckboxes(),(t=(e=this.options).onDisplayedColumnsChanged)==null||t.call(e,{api:this.api})}onModelUpdated(){var e,t,n,i,o,a,r;this.updateColumnTotalCache(),this.rowRenderer.refreshRows(),this.options.__loadingRows=this.isRemoteLoading(),this.overlayService.updateAuto(),this.statusBarService.update(),(e=this.paginationService)==null||e.update(),this.rangeSelectionService.applyHighlight(),this.findService.applyHighlight(),this.chartService.refreshCharts(),this.gridReadyDispatched||(this.gridReadyDispatched=!0,this.eventService.dispatchEvent("firstDataRendered",{api:this.api}),(n=(t=this.options).onFirstDataRendered)==null||n.call(t,{api:this.api})),(o=(i=this.options).onModelUpdated)==null||o.call(i,{api:this.api}),(r=(a=this.options).onRowDataChanged)==null||r.call(a,{api:this.api})}setHorizontalScrollLeft(e){this.rowRenderer.setHorizontalScrollLeft(e)}onGridSizeChanged(){var o,a,r;if(this.destroyed)return;const e=this.eGridDiv.clientWidth,t=this.getAllColumns().some(l=>l.flex!==null&&l.flex>0&&l.visible),n=this.sideBarService.isVisible()?this.sideBarService.getElement().offsetWidth:0,i=Math.max(0,e-n);(t||((o=this.options.autoSizeStrategy)==null?void 0:o.type)==="fitGridWidth")&&(this.columnModel.sizeColumnsToFit(i),this.headerView.updateIndicators(),this.rowRenderer.redrawAllRows()),this.rowRenderer.renderVisibleRows(!0),this.headerView.setScrollLeft(this.rowRenderer.getHorizontalScrollLeft(),this.rowRenderer.getVerticalScrollbarWidth()),this.eventService.dispatchEvent("gridSizeChanged",{clientWidth:this.eGridDiv.clientWidth,clientHeight:this.eGridDiv.clientHeight,api:this.api}),(r=(a=this.options).onGridSizeChanged)==null||r.call(a,{clientWidth:e,clientHeight:this.eGridDiv.clientHeight,api:this.api})}renderDetailRow(e){var d,c;const t=e.masterNode;if(!t)return null;const n=this.options.detailRowAutoHeight===!0,i=n?this.options.detailRowHeight??200:this.options.detailRowHeight??200,o=document.createElement("div");o.className="ag-row-detail",o.style.height=`${i}px`,o.style.position="absolute",o.style.top="0",o.style.left="0",o.style.right="0";const a=this.options.detailCellRenderer,r=(d=this.options.detailCellRendererParams)==null?void 0:d.detailGridOptions,l=(c=this.options.detailCellRendererParams)==null?void 0:c.getDetailRowData;if(r&&l){const p=l({data:t.data,node:t,api:this.api}),h=document.createElement("div");h.style.height="100%",h.style.padding="8px 16px",o.appendChild(h),setTimeout(()=>{new Mt(h,{...r,rowData:p,theme:this.options.theme})},0)}else if(typeof a=="function"){const p=a({data:t.data,node:t,api:this.api,context:this.context});p instanceof HTMLElement?o.appendChild(p):o.textContent=String(p??"")}else typeof a=="string"&&(o.textContent=a);if(n){const p=Math.max(40,o.scrollHeight||i);return e.rowHeight=p,o.style.height=`${p}px`,{eDetail:o,height:p}}return e.rowHeight=i,{eDetail:o,height:i}}dispatchGridReady(){var e,t;this.eventService.dispatchEvent("gridReady",{api:this.api,columnApi:this.columnApi}),(t=(e=this.options).onGridReady)==null||t.call(e,{api:this.api,columnApi:this.columnApi,context:this.context})}updateGridOptions(e){const t=this.options.theme,n=e.rowData!==void 0&&e.rowData!==this.options.rowData,i=e.columnDefs!==void 0||e.defaultColDef!==void 0||e.columnTypes!==void 0;Object.assign(this.options,e),n&&this.setRowData(e.rowData),i&&this.columnModel.setColumnDefs(this.options.columnDefs||[]),e.sideBar!==void 0&&(this.sideBarService.setVisible(!!e.sideBar),this.onGridSizeChanged()),e.quickFilterText!==void 0&&this.setQuickFilter(e.quickFilterText),e.theme!==void 0&&e.theme!==t&&(this.eGridDiv.classList.remove(t||"ag-theme-alpine"),this.eGridDiv.classList.add(e.theme)),e.pagination!==void 0&&(e.pagination&&!this.paginationService?this.paginationService=new Ci(this,this.eventService):this.paginationService&&this.paginationService.setEnabled(!!e.pagination))}destroy(){var e;this.destroyed||(this.destroyed=!0,this.interactions.destroy(),window.removeEventListener("resize",this.onWindowResize),document.removeEventListener("mousedown",this.onDocumentMouseDown,!0),(e=this.resizeObserver)==null||e.disconnect(),this.rowRenderer.destroy(),this.editService.destroy(),this.popupService.closeAll(),this.eRoot.remove(),this.eGridDiv.classList.remove("ag-grid-root","ag-theme-alpine","ag-theme-quartz","ag-theme-balham"),this.eventService.dispatchEvent("gridReady",{}))}}function Ei(s,e){const t=new Mt(s,e);return{api:t.getApi(),columnApi:t.getColumnApi(),grid:t}}function xi(s,e={}){const t=document.createElement("dialog");t.className="rowvia-detail-dialog";const n=qe(t,"detail-dialog",e),i=()=>{var d;return(d=e.onClose)==null?void 0:d.call(e)};t.addEventListener("close",i);const o=document.createElement("h2"),a=document.createElement("dl"),r=document.createElement("button");r.type="button",r.textContent="关闭";const l=()=>t.close();return r.addEventListener("click",l),t.append(o,a,r),s.append(t),{onInteraction:n.onInteraction,open(d){var c;o.textContent=d.title,t.setAttribute("aria-label",d.title),a.replaceChildren();for(const p of d.fields){const h=document.createElement("dt"),u=document.createElement("dd");h.textContent=p.label,u.textContent=p.value,a.append(h,u)}t.open||t.showModal(),(c=e.onOpen)==null||c.call(e,d)},close:l,destroy(){t.open&&t.close(),r.removeEventListener("click",l),t.removeEventListener("close",i),n.destroy(),t.remove()}}}const La=[{value:"equals",label:"等于"},{value:"notEqual",label:"不等于"},{value:"contains",label:"包含"},{value:"blank",label:"为空"}],Ra=[{value:"equals",label:"等于"},{value:"greaterThan",label:"大于"},{value:"lessThan",label:"小于"},{value:"inRange",label:"介于"}],Ta=[{value:"inRange",label:"介于"},{value:"before",label:"早于"},{value:"after",label:"晚于"}];function Ge(s,e){const t=document.createElement(s);return e&&(t.className=e),t}function Lt(s,e,t){const n=document.createElement("button");return n.type="button",n.className=e,n.textContent=s,n.addEventListener("click",i=>{i.stopPropagation(),t()}),n}class Na{constructor(e,t,n,i){x(this,"filterFields");x(this,"sortFields");x(this,"filterRows",[]);x(this,"sorts",[]);x(this,"filterPanel",null);x(this,"sortPanel",null);x(this,"filterAnchor",null);x(this,"sortAnchor",null);x(this,"onDocumentMouseDown",e=>{var n,i;const t=e.target;this.filterPanel&&!this.filterPanel.contains(t)&&!((n=this.filterAnchor)!=null&&n.contains(t))&&this.closeFilterPanel(),this.sortPanel&&!this.sortPanel.contains(t)&&!((i=this.sortAnchor)!=null&&i.contains(t))&&this.closeSortPanel()});this.api=e,this.host=t,this.hooks=i,this.filterFields=n.filter,this.sortFields=n.sort,document.addEventListener("mousedown",this.onDocumentMouseDown,!0)}openFilterPanel(e){if(this.filterPanel){this.closeFilterPanel();return}this.closeSortPanel();const t=Ge("div","gt-panel gt-filter-panel");t.addEventListener("mousedown",d=>d.stopPropagation());const n=Ge("div","gt-panel-title");n.textContent="筛选",t.appendChild(n);const i=Ge("div","gt-filter-rows");t.appendChild(i);const o=()=>{if(i.textContent="",!this.filterRows.length){const d=Ge("div","gt-panel-empty");d.textContent="点击下方字段添加筛选条件",i.appendChild(d)}for(const d of this.filterRows)i.appendChild(this.renderFilterRow(d,o))},a=Ge("div","gt-filter-add");for(const d of this.filterFields)a.appendChild(Lt(d.label,"gt-filter-add-btn",()=>{this.filterRows.push({colId:d.colId,kind:d.kind,type:d.kind==="date"?"inRange":"equals",value:"",valueTo:""}),o()}));t.appendChild(a);const r=Ge("div","gt-panel-hint");r.textContent="多个条件同时满足(且)",t.appendChild(r);const l=Ge("div","gt-panel-actions");l.append(Lt("清除","gt-panel-btn",()=>{this.filterRows=[],this.applyFilter(),this.closeFilterPanel()}),Lt("应用","gt-panel-btn gt-panel-btn-primary",()=>{this.applyFilter(),this.closeFilterPanel()})),t.appendChild(l),this.mount(t,e),this.filterPanel=t,this.filterAnchor=e,o()}renderFilterRow(e,t){const n=Ge("div","gt-filter-row"),i=this.filterFields.find(d=>d.colId===e.colId),o=document.createElement("select");o.className="gt-panel-select";for(const d of this.filterFields){const c=document.createElement("option");c.value=d.colId,c.textContent=d.label,d.colId===e.colId&&(c.selected=!0),o.appendChild(c)}o.addEventListener("change",()=>{const d=this.filterFields.find(c=>c.colId===o.value);d&&(e.colId=d.colId,e.kind=d.kind,e.type=d.kind==="date"?"inRange":"equals",e.value="",e.valueTo="",t())}),n.appendChild(o);const a=e.kind==="number"?Ra:e.kind==="date"?Ta:La,r=document.createElement("select");r.className="gt-panel-select gt-panel-select-cond";for(const d of a){const c=document.createElement("option");c.value=d.value,c.textContent=d.label,d.value===e.type&&(c.selected=!0),r.appendChild(c)}if(r.addEventListener("change",()=>{e.type=r.value,t()}),n.appendChild(r),e.type!=="blank")if(i!=null&&i.options){const d=document.createElement("select");d.className="gt-panel-select";const c=document.createElement("option");c.value="",c.textContent="请选择",d.appendChild(c);for(const p of i.options){const h=document.createElement("option");h.value=p.value,h.textContent=p.label,p.value===e.value&&(h.selected=!0),d.appendChild(h)}d.addEventListener("change",()=>{e.value=d.value}),n.appendChild(d)}else if(e.kind==="date"){const d=document.createElement("input");if(d.type="date",d.className="gt-panel-input",d.value=e.value,d.addEventListener("change",()=>{e.value=d.value}),n.appendChild(d),e.type==="inRange"){const c=document.createElement("input");c.type="date",c.className="gt-panel-input",c.value=e.valueTo,c.addEventListener("change",()=>{e.valueTo=c.value}),n.appendChild(c)}}else if(e.kind==="number"){const d=document.createElement("input");if(d.type="number",d.className="gt-panel-input gt-panel-input-num",d.placeholder="数值",d.value=e.value,d.addEventListener("input",()=>{e.value=d.value}),n.appendChild(d),e.type==="inRange"){const c=document.createElement("input");c.type="number",c.className="gt-panel-input gt-panel-input-num",c.placeholder="至",c.value=e.valueTo,c.addEventListener("input",()=>{e.valueTo=c.value}),n.appendChild(c)}}else{const d=document.createElement("input");d.type="text",d.className="gt-panel-input",d.placeholder="文本",d.value=e.value,d.addEventListener("input",()=>{e.value=d.value}),n.appendChild(d)}const l=Lt("×","gt-filter-remove",()=>{this.filterRows=this.filterRows.filter(d=>d!==e),t()});return l.title="移除条件",n.appendChild(l),n}applyFilter(){const e={};for(const t of this.filterRows){if(t.type==="blank"){e[t.colId]={filterType:t.kind==="number"?"number":"text",type:"blank",filter:""};continue}if(t.kind==="date"){const n=(t.type==="after",t.value),i=t.type==="before"?t.value:t.valueTo;if(t.type==="before"&&!t.value||t.type==="after"&&!t.value||t.type==="inRange"&&!t.value&&!t.valueTo)continue;e[t.colId]={filterType:"date",dateFrom:n||void 0,dateTo:i||void 0};continue}if(t.value)if(t.kind==="number"){const n={filterType:"number",type:t.type,filter:Number(t.value)};t.type==="inRange"&&(n.filterTo=Number(t.valueTo||t.value)),e[t.colId]=n}else e[t.colId]={filterType:"text",type:t.type,filter:t.value}}this.api.setFilterModel(e),this.hooks.onFilterButton(Object.keys(e).length>0,Object.keys(e).length)}closeFilterPanel(){var e;(e=this.filterPanel)==null||e.remove(),this.filterPanel=null}openSortPanel(e){if(this.sortPanel){this.closeSortPanel();return}this.closeFilterPanel();const t=Ge("div","gt-panel gt-sort-panel");t.addEventListener("mousedown",r=>r.stopPropagation());const n=Ge("div","gt-panel-title");n.textContent="排序",t.appendChild(n);const i=Ge("div","gt-sort-list");t.appendChild(i);const o=()=>{var r;i.textContent="";for(const l of this.sortFields){const d=this.sorts.findIndex(u=>u.colId===l.colId),c=d>=0,p=Ge("div","gt-sort-item");c&&p.classList.add("gt-sort-item-active");const h=Ge("span","gt-sort-label");if(h.textContent=l.label,p.appendChild(h),c){const u=Ge("span","gt-sort-badge");u.textContent=String(d+1),p.appendChild(u);const f=Ge("span","gt-sort-dir");f.textContent=((r=this.sorts[d])==null?void 0:r.sort)==="asc"?"↑ 升序":"↓ 降序",p.appendChild(f)}p.addEventListener("click",()=>{var u;c?((u=this.sorts[d])==null?void 0:u.sort)==="asc"?this.sorts[d]={colId:l.colId,sort:"desc"}:this.sorts=this.sorts.filter(f=>f.colId!==l.colId):this.sorts.push({colId:l.colId,sort:"asc"}),o()}),i.appendChild(p)}},a=Ge("div","gt-panel-actions");a.append(Lt("清除","gt-panel-btn",()=>{this.sorts=[],this.applySort(),this.closeSortPanel()}),Lt("应用","gt-panel-btn gt-panel-btn-primary",()=>{this.applySort(),this.closeSortPanel()})),t.appendChild(a),this.mount(t,e),this.sortPanel=t,this.sortAnchor=e,o()}applySort(){this.api.setSortModel(this.sorts.map(e=>({colId:e.colId,sort:e.sort}))),this.hooks.onSortButton(this.sorts.length>0,this.sorts.length)}closeSortPanel(){var e;(e=this.sortPanel)==null||e.remove(),this.sortPanel=null}mount(e,t){this.host.appendChild(e);const n=t.getBoundingClientRect();e.style.top=`${n.bottom+6}px`;const i=window.innerWidth-e.offsetWidth-12;e.style.left=`${Math.max(12,Math.min(n.left,i))}px`,e.style.display="block"}destroy(){this.closeAll(),document.removeEventListener("mousedown",this.onDocumentMouseDown,!0)}closeAll(){this.closeFilterPanel(),this.closeSortPanel()}}const ki=864e5;function ft(s){const e=s.getFullYear(),t=String(s.getMonth()+1).padStart(2,"0"),n=String(s.getDate()).padStart(2,"0");return`${e}-${t}-${n}`}function We(s){return new Date(`${s}T00:00:00`)}function ze(s,e){return new Date(s.getTime()+e*ki)}function ot(s,e){const t=typeof s=="string"?We(s):s,n=typeof e=="string"?We(e):e;return Math.round((n.getTime()-t.getTime())/ki)}function Ot(){return ft(new Date)}function Ia(s){return s.status!=="done"&&s.end&&s.end<Ot()&&s.progress<100?"delayed":s.status}function yn(s){const e=We(s);return`${e.getMonth()+1}月${e.getDate()}日`}const Mi=["day","week","biweek","month","bimonth","quarter","halfyear","year"],Jt={day:"天",biweek:"双周",bimonth:"双月",halfyear:"半年",week:"周",month:"月",quarter:"季度",year:"年"},Aa={day:26,week:26,biweek:26,month:26,bimonth:13,quarter:8.7,halfyear:4.3,year:2.2};function Cn(s){const e=(s.getDay()+6)%7;return ze(s,-e)}function $a(s,e){const t=Math.max(1,ot(s,e)+1);let n=0;for(let i=0;i<t;i++){const o=ze(s,i).getDay();o!==0&&o!==6&&n++}return Math.max(1,n)}function Da(s,e){return new Date(s.getFullYear(),s.getMonth()+e,1)}function Li(s,e,t){const n=[];if(s==="day"){let l=new Date(e);for(;l<t;){const d=ze(l,1);n.push({start:new Date(l),end:d,primary:`${l.getDate()}`,secondary:""}),l=d}return n}if(s==="week"||s==="biweek"){let l=Cn(e);for(;l<t;){const d=ze(l,s==="biweek"?14:7);n.push({start:new Date(l),end:d,primary:`${l.getMonth()+1}/${l.getDate()}`,secondary:""}),l=d}return n}const i=s==="month"?1:s==="bimonth"?2:s==="quarter"?3:s==="halfyear"?6:12,o=l=>new Date(l.getFullYear(),Math.floor(l.getMonth()/i)*i,1),a=l=>s==="month"||s==="bimonth"?`${l.getMonth()+1}月`:s==="halfyear"?`${l.getMonth()<6?"上":"下"}半年`:s==="quarter"?`Q${Math.floor(l.getMonth()/3)+1}`:`${l.getFullYear()}`;let r=o(e);for(;r<t;){const l=Da(r,i);n.push({start:new Date(r),end:l,primary:a(r),secondary:""}),r=l}return n}const De={accent:"#4555e5",text:"#1f2329",textTertiary:"#8f959e",border:"#dee0e3",groupRow:"transparent",weekend:"rgba(31, 35, 41, 0.04)",gridline:"rgba(31, 35, 41, 0.10)",gridlineMonth:"rgba(31, 35, 41, 0.12)",rowLine:"transparent",hover:"rgba(51, 112, 255, 0.05)",selected:"rgba(51, 112, 255, 0.09)"},en={"not-started":"#b8bdc4","in-progress":"#3370ff",done:"#2ea121",delayed:"#f54a45"},Fa=4,Ri=6,et=28;class Ti{constructor(e,t){x(this,"interactions");x(this,"onInteraction");x(this,"options");x(this,"eRoot");x(this,"eHeader");x(this,"eRuler");x(this,"rulerCtx");x(this,"eRulerTools");x(this,"eStepLabel");x(this,"eZoomValue");x(this,"eStepMenu",null);x(this,"eScroll");x(this,"eSpacer");x(this,"eCanvas");x(this,"ctx");x(this,"eTooltip");x(this,"eTodayBadge");x(this,"ePopup",null);x(this,"tasks",[]);x(this,"tasksById",new Map);x(this,"rows",[]);x(this,"selectedId",null);x(this,"hoverId",null);x(this,"unit","day");x(this,"zoom",1);x(this,"theme","content");x(this,"epochStart",new Date);x(this,"totalDays",1);x(this,"hits",[]);x(this,"hitsByRow",new Map);x(this,"drag",null);x(this,"ghost",null);x(this,"dirty",!0);x(this,"lastLeft",-1);x(this,"lastTop",-1);x(this,"timer");x(this,"observer",null);x(this,"resizeHandler",()=>this.resizeCanvases());x(this,"showChildren",!0);x(this,"milestonesOnly",!1);x(this,"locateHits",[]);x(this,"tick",()=>{const e=this.eScroll.scrollLeft,t=this.eScroll.scrollTop;(e!==this.lastLeft||t!==this.lastTop||this.dirty)&&(this.lastLeft=e,this.lastTop=t,this.eCanvas.style.transform=`translate(${e}px, ${t}px)`,this.draw(),this.dirty=!1)});x(this,"onScroll",()=>{this.tick()});x(this,"todayLabelX",-1);x(this,"onCanvasMouseMove",e=>{if(this.drag){this.updateDrag(e);return}const{hit:t,rowIndex:n,onAvatar:i}=this.hitAt(e.clientX,e.clientY),o=this.rows[n];i?this.eCanvas.style.cursor="pointer":t&&t.mode!=="move"?this.eCanvas.style.cursor="ew-resize":t?this.eCanvas.style.cursor="grab":this.eCanvas.style.cursor="default";const a=t?t.id:(o==null?void 0:o.id)??null;a!==this.hoverId&&(this.hoverId=a,this.options.onHover(a),this.markDirty())});x(this,"onCanvasMouseDown",e=>{const t=this.eCanvas.getBoundingClientRect(),n=this.locateHits.find(d=>Math.abs(d.x-(e.clientX-t.left))<12&&Math.abs(d.y-(e.clientY-t.top))<12);if(n){this.scrollToTask(n.id);return}const{hit:i,rowIndex:o,onAvatar:a}=this.hitAt(e.clientX,e.clientY),r=this.rows[o];if(i){const d=this.tasksById.get(i.id);if(!d)return;if(a){e.stopPropagation(),this.openAssigneePopup(i.id,i);return}if(d.kind!=="task"||d.milestone||!d.start||!d.end){this.options.onSelect(i.id);return}e.preventDefault(),this.drag={id:i.id,mode:i.mode,startX:e.clientX,startY:e.clientY,originStart:d.start,originEnd:d.end,start:d.start,end:d.end,moved:!1},window.addEventListener("mousemove",this.updateDrag),window.addEventListener("mouseup",this.endDrag),this.options.onSelect(i.id);return}if(!r)return;const l=this.tasksById.get(r.id);if(l){if(l.kind==="task"&&(!l.start||!l.end)){const d=this.pointAt(e.clientX,e.clientY),c=Math.floor(d.x/this.dayWidth),p=ft(ze(this.epochStart,c));this.options.onTaskChange({...l,start:p,end:ft(ze(We(p),4)),progress:0,status:"not-started"}),this.options.onSelect(r.id);return}this.options.onSelect(r.id)}});x(this,"updateDrag",e=>{const t=this.drag;if(!t)return;const n=this.tasksById.get(t.id);if(!n||!t.moved&&Math.abs(e.clientX-t.startX)<Fa)return;t.moved=!0;const i=this.dayWidth,o=Math.round((e.clientX-t.startX)/i),a=We(t.originStart),r=We(t.originEnd),l=ot(a,r);let d,c;t.mode==="resize-l"?(d=ze(a,Math.min(o,l)),c=r):t.mode==="resize-r"?(d=a,c=ze(r,Math.max(o,-l))):(d=ze(a,o),c=ze(r,o)),n.milestone&&(d=c),t.start=ft(d),t.end=ft(c),this.ghost={id:t.id,start:t.start,end:t.end},this.markDirty(),this.eTooltip.style.display="",this.eTooltip.textContent=n.milestone?yn(t.start):`${yn(t.start)} → ${yn(t.end)}`;const p=this.eRoot.getBoundingClientRect();this.eTooltip.style.left=`${e.clientX-p.left+12}px`,this.eTooltip.style.top=`${e.clientY-p.top+16}px`});x(this,"endDrag",()=>{window.removeEventListener("mousemove",this.updateDrag),window.removeEventListener("mouseup",this.endDrag),this.eTooltip.style.display="none";const e=this.drag;if(this.drag=null,this.ghost=null,this.markDirty(),!(e!=null&&e.moved)||e.start===e.originStart&&e.end===e.originEnd)return;const t=this.tasksById.get(e.id);t&&this.options.onTaskChange({...t,start:e.start,end:e.end})});x(this,"onRootMouseLeave",()=>{this.closeAssigneePopup(),this.closeStepMenu(),this.hoverId&&(this.hoverId=null,this.options.onHover(null),this.markDirty())});x(this,"onDocumentMouseDown",e=>{const t=e.target;this.ePopup&&!this.ePopup.contains(t)&&this.closeAssigneePopup(),this.eStepMenu&&!this.eStepMenu.contains(t)&&!this.eRulerTools.contains(t)&&this.closeStepMenu()});this.options=t,this.eRoot=document.createElement("div"),this.interactions=qe(this.eRoot,"gantt-chart",t),this.onInteraction=this.interactions.onInteraction,this.eRoot.className="gt-root",e.appendChild(this.eRoot),this.eHeader=document.createElement("div"),this.eHeader.className="gt-header",this.eRuler=document.createElement("canvas"),this.eRuler.className="gt-ruler",this.eHeader.appendChild(this.eRuler),this.eRoot.appendChild(this.eHeader),this.rulerCtx=this.eRuler.getContext("2d"),this.buildRulerTools(),this.eScroll=document.createElement("div"),this.eScroll.className="gt-scroll",this.eSpacer=document.createElement("div"),this.eSpacer.className="gt-spacer",this.eCanvas=document.createElement("canvas"),this.eCanvas.className="gt-canvas",this.eScroll.append(this.eSpacer,this.eCanvas),this.eRoot.appendChild(this.eScroll),this.ctx=this.eCanvas.getContext("2d"),this.eTooltip=document.createElement("div"),this.eTooltip.className="gt-tooltip",this.eTooltip.style.display="none",this.eRoot.appendChild(this.eTooltip),this.eTodayBadge=document.createElement("div"),this.eTodayBadge.className="gt-today-badge",this.eRoot.appendChild(this.eTodayBadge),this.eScroll.addEventListener("scroll",this.onScroll),this.eCanvas.addEventListener("mousedown",this.onCanvasMouseDown),this.eCanvas.addEventListener("mousemove",this.onCanvasMouseMove),this.eRoot.addEventListener("mouseleave",this.onRootMouseLeave);const n=()=>{this.resizeCanvases(),this.markDirty()};typeof ResizeObserver<"u"&&(this.observer=new ResizeObserver(n),this.observer.observe(this.eScroll),this.observer.observe(this.eHeader)),window.addEventListener("resize",this.resizeHandler),this.timer=setInterval(this.tick,40),this.resizeCanvases()}destroy(){var e;this.interactions.destroy(),clearInterval(this.timer),(e=this.observer)==null||e.disconnect(),window.removeEventListener("resize",this.resizeHandler),window.removeEventListener("mousemove",this.updateDrag),window.removeEventListener("mouseup",this.endDrag),this.closeAssigneePopup(),this.closeStepMenu(),this.eRoot.remove()}setHover(e){this.hoverId!==e&&(this.hoverId=e,this.markDirty())}setShowChildren(e){this.showChildren=e,this.markDirty()}setMilestonesOnly(e){this.milestonesOnly=e,this.markDirty()}scrollToTask(e){const t=this.tasksById.get(e);t!=null&&t.start&&(this.eScroll.scrollLeft=Math.max(0,this.dateX(t.start)-this.eScroll.clientWidth*.12),this.markDirty())}setTasks(e){this.tasks=e,this.tasksById=new Map(e.map(t=>[t.id,t])),this.computeDomain(),this.markDirty()}setRows(e){e.length===this.rows.length&&e.every((t,n)=>{const i=this.rows[n];return t.id===i.id&&t.group===i.group&&t.expanded===i.expanded})||(this.rows=e,this.markDirty())}setSelected(e){this.selectedId=e,this.markDirty()}setUnit(e){const t=(this.eScroll.scrollLeft+this.eScroll.clientWidth/2)/this.dayWidth;this.unit=e,this.markDirty(),this.eScroll.scrollLeft=Math.max(0,t*this.dayWidth-this.eScroll.clientWidth/2),this.tick()}setZoom(e){const t=(this.eScroll.scrollLeft+this.eScroll.clientWidth/2)/this.dayWidth;this.zoom=Math.max(.5,Math.min(3,e)),this.markDirty(),this.eScroll.scrollLeft=Math.max(0,t*this.dayWidth-this.eScroll.clientWidth/2),this.tick()}setTheme(e){this.theme=e,this.markDirty()}get dayWidth(){return Aa[this.unit]*this.zoom}get scrollElement(){return this.eScroll}setScrollTop(e){this.eScroll.scrollTop=e}redraw(){this.markDirty()}markDirty(){this.dirty=!0,this.tick()}scrollToToday(e=.32){const t=this.dateX(Ot()),n=Math.max(0,t-this.eScroll.clientWidth*e);this.eScroll.scrollLeft=n}computeDomain(){let e=null,t=null;for(const o of this.tasks)!o.start||!o.end||((!e||o.start<e)&&(e=o.start),(!t||o.end>t)&&(t=o.end));const n=Ot();(!e||e>n)&&(e=n),(!t||t<n)&&(t=n);const i=Cn(ze(We(e),-7));this.epochStart=i,this.totalDays=Math.max(ot(i,We(t))+730,1095)}dateX(e){return ot(this.epochStart,e)*this.dayWidth}resizeCanvases(){const e=window.devicePixelRatio||1;for(const[t,n]of[[this.eCanvas,this.ctx],[this.eRuler,this.rulerCtx]]){const i=t===this.eRuler?this.eHeader.clientWidth:this.eScroll.clientWidth,o=t===this.eRuler?this.eHeader.clientHeight:this.eScroll.clientHeight;t.width=Math.max(1,Math.round(i*e)),t.height=Math.max(1,Math.round(o*e)),t.style.width=`${i}px`,t.style.height=`${o}px`,n.setTransform(e,0,0,e,0,0)}this.markDirty()}draw(){const e=this.dayWidth,t=this.options.rowHeight,n=this.totalDays*e,i=Math.max(this.rows.length*t,1);this.eSpacer.style.width=`${n}px`,this.eSpacer.style.height=`${i}px`,this.drawRuler(e,n),this.drawBody(e,n,i,t)}drawRuler(e,t){const n=this.rulerCtx,i=this.eHeader.clientWidth,o=this.eHeader.clientHeight,a=this.eScroll.scrollLeft;n.clearRect(0,0,i,o),n.fillStyle="#fff",n.fillRect(0,0,i,o);const r=ze(this.epochStart,this.totalDays),l=(p,h,u,f)=>{for(const g of p){const v=this.dateX(ft(g.start))-a,m=ot(g.start,g.end)*e;if(v+m<=0||v>=i)continue;const b=Math.max(0,Math.min(v+m,i)-Math.max(0,v));if(this.unit==="day"||this.unit==="week"){const w=g.start.getDay();(w===0||w===6)&&(n.fillStyle=De.weekend,n.fillRect(Math.max(0,v),h,b,u))}const k=n.measureText(g.primary).width;if(k+8<b){const w=Math.max(0,v)+b/2-k/2,L=h+u/2+5;n.fillStyle=De.text,n.font="11px "+dt,n.textAlign="left",n.textBaseline="alphabetic",n.fillText(g.primary,w,L),g.secondary&&(n.fillStyle=De.textTertiary,n.font="10px "+dt,n.fillText(g.secondary,w,L+12))}}},d=40,c=ze(this.epochStart,Math.floor(a/e));n.fillStyle=De.text,n.font="14px "+dt,n.textAlign="left",n.textBaseline="middle",n.fillText(this.unit==="day"||this.unit==="week"||this.unit==="biweek"?`${c.getFullYear()}年${c.getMonth()+1}月`:`${c.getFullYear()} 年`,16,22),l(Li(this.unit,this.epochStart,r),d+1,o-d-1),n.strokeStyle=De.border,n.beginPath(),n.moveTo(0,o-.5),n.lineTo(i,o-.5),n.stroke()}drawBody(e,t,n,i){const o=this.ctx,a=this.eScroll.clientWidth,r=this.eScroll.clientHeight,l=this.eScroll.scrollLeft,d=this.eScroll.scrollTop;o.clearRect(0,0,a,r),o.fillStyle="#fff",o.fillRect(0,0,a,r),o.save(),o.translate(-l,-d),this.hits=[],this.hitsByRow.clear(),this.drawWeekends(e,t,Math.max(n,d+r)),this.drawGridlines(e,t,Math.max(n,d+r)),this.drawRowBackgrounds(t,i);const c=this.rows.findIndex(h=>h.id===this.hoverId),p=this.hoverId?this.tasksById.get(this.hoverId):null;if(c>=0&&(p==null?void 0:p.kind)==="task"&&!p.start){const h=c*i+6;o.fillStyle="#fff",o.strokeStyle="#dee0e3",o.lineWidth=1,Rt(o,l+4,h,Math.max(0,a-8),28,4),o.fill(),o.stroke(),o.fillStyle=De.textTertiary,o.font="14px "+dt,o.textAlign="center",o.fillText("新建排期",l+a/2,h+19)}this.drawDependencies(i),this.drawBars(i),this.drawTodayLine(t,Math.max(n,d+r)),o.restore(),this.drawTodayLabel(),this.drawLocateButtons(),this.updateRulerTools()}drawWeekends(e,t,n){if(this.unit!=="day"&&this.unit!=="week")return;const i=this.ctx;i.fillStyle=De.weekend;let o=Cn(this.epochStart);for(;ot(this.epochStart,o)<this.totalDays;){const a=this.dateX(ft(o))+5*e;a<t&&i.fillRect(Math.max(0,a),0,e*2,n),o=ze(o,7)}}drawGridlines(e,t,n){const i=this.ctx,o=ze(this.epochStart,this.totalDays);for(const a of Li(this.unit,this.epochStart,o)){const r=Math.round(this.dateX(ft(a.start)))+.5;if(r<0||r>t)continue;const l=this.unit==="day"&&a.start.getDate()===1;i.strokeStyle=l?De.gridlineMonth:De.gridline,i.beginPath(),i.moveTo(r,0),i.lineTo(r,n),i.stroke()}}drawRowBackgrounds(e,t){const n=this.ctx;n.strokeStyle=De.rowLine,n.lineWidth=1,n.beginPath();for(let i=1;i<this.rows.length;i++){const o=Math.round(i*t)+.5;n.moveTo(0,o),n.lineTo(e,o)}n.stroke(),this.rows.forEach((i,o)=>{const a=this.selectedId===i.id,r=this.hoverId===i.id;(a||r)&&(n.fillStyle=a?De.selected:r?De.hover:De.groupRow,n.fillRect(0,o*t,e,t))})}drawTodayLine(e,t){const n=this.ctx,i=Math.round(this.dateX(Ot())+this.dayWidth/2)+.5;i<0||i>e||(n.strokeStyle=De.accent,n.lineWidth=1.5,n.beginPath(),n.moveTo(i,0),n.lineTo(i,t),n.stroke(),this.todayLabelX=i-this.eScroll.scrollLeft)}drawTodayLabel(){this.eTodayBadge.hidden=this.todayLabelX<0||this.todayLabelX>this.eScroll.clientWidth,this.eTodayBadge.textContent=Ot().slice(5),this.eTodayBadge.style.left=`${this.todayLabelX-25}px`,this.eTodayBadge.style.top=`${this.eHeader.clientHeight-10}px`}drawDependencies(e){const t=new Map(this.rows.map((i,o)=>[i.id,o])),n=this.ctx;n.strokeStyle=De.accent,n.lineWidth=1.2;for(const i of this.rows){const o=this.tasksById.get(i.id);if(!o||o.kind!=="task"||!o.start||!o.end)continue;const a=t.get(i.id);if(a!==void 0)for(const r of o.dependsOn){const l=this.tasksById.get(r),d=t.get(r);if(!(l!=null&&l.start)||!l.end||d===void 0)continue;const c=this.dateX(l.start),p=l.milestone?this.dayWidth:Math.max(ot(We(l.start),We(l.end))*this.dayWidth+this.dayWidth,this.dayWidth*.6),h=c+p,u=d*e+e/2,f=this.dateX(o.start),g=Math.max(ot(We(o.start),We(o.end))*this.dayWidth+this.dayWidth,this.dayWidth*.6),v=a*e+e/2,m=h+10;if(f-4>m)Ni(n,h,u,m,v,f-5,v);else{const b=f+g+10;Ni(n,h,u,m,v,b,v)}Ha(n,f-5,v)}}}drawBars(e){this.rows.forEach((t,n)=>{const i=this.tasksById.get(t.id);if(!i||!i.start||i.path.length>1&&(!this.showChildren||this.milestonesOnly&&!i.milestone))return;const o=n*e+(e-et)/2;if(t.group){this.drawSummaryBar(i,n,o);return}if(i.milestone){this.drawMilestone(i,n,o);return}i.end&&this.drawTaskBar(i,n,o)})}drawTaskBar(e,t,n){var u;const i=this.ctx,o=((u=this.ghost)==null?void 0:u.id)===e.id?this.ghost:null,a=(o==null?void 0:o.start)??e.start,r=(o==null?void 0:o.end)??e.end,l=this.dateX(a),d=Math.max(28,(ot(a,r)+1)*this.dayWidth),c=en[e.status];i.save(),i.globalAlpha=this.selectedId===e.id||this.hoverId===e.id?1:.55,i.fillStyle=this.theme==="color"?"#eaf2ff":"#fff",i.strokeStyle=this.selectedId===e.id?De.accent:"#dee0e3",i.lineWidth=1,Rt(i,l,n,d,et,4),i.fill(),i.stroke(),i.save(),Rt(i,l,n,d,et,4),i.clip(),i.beginPath(),i.arc(l+14,n+14,6,0,Math.PI*2),i.fillStyle=c,i.fill(),i.font="12px "+dt,i.textBaseline="middle",i.textAlign="left",i.fillStyle=De.text;const p=this.options.members.find(f=>f.id===e.owner),h=i.measureText(e.name).width;d>h+58?(i.fillText(e.name,l+26,n+14),p&&Sn(i,l+h+42,n+14,7,tn(p.id),p.name.slice(0,1))):p&&d>46&&Sn(i,l+38,n+14,7,tn(p.id),p.name.slice(0,1)),d>100&&(i.fillStyle=De.textTertiary,i.textAlign="right",i.fillText(String($a(We(a),We(r))),l+d-8,n+14)),i.restore(),i.restore(),this.pushHit({id:e.id,rowIndex:t,kind:"task",x:l,y:n,w:d,h:et,mode:"move",avatar:p?{x:l+(d>h+58?h+42:38),y:n+14,r:7}:void 0})}drawSummaryBar(e,t,n){if(!e.start||!e.end)return;const i=this.tasks.filter(c=>c.path.length===e.path.length+1&&c.path.slice(0,-1).join("/")===e.path.join("/")&&c.start),o=i[0],a=this.ctx,r=this.dateX(e.start),l=Math.max(92,(ot(e.start,e.end)+1)*this.dayWidth);a.fillStyle=this.theme==="color"?"#0565db":"#fff",a.strokeStyle=this.selectedId===e.id?De.accent:"#dee0e3",a.lineWidth=1,Rt(a,r,n,l,et,4),a.fill(),a.stroke(),a.fillStyle=o?en[o.status]:en[e.status],a.beginPath(),a.arc(r+14,n+14,5,0,Math.PI*2),a.fill(),a.fillStyle=this.theme==="color"?"#fff":De.text,a.font="11px "+dt,a.textAlign="left",a.textBaseline="middle";const d=((o==null?void 0:o.name)??e.name)+(i.length>1?` +${i.length-1}`:"");a.fillText(Pa(a,d,l-32),r+25,n+14),this.pushHit({id:e.id,rowIndex:t,kind:"summary",x:r,y:n,w:l,h:et,mode:"move"})}drawMilestone(e,t,n){var v;const i=this.ctx,o=this.dayWidth,a=((v=this.ghost)==null?void 0:v.id)===e.id?this.ghost:null,r=a?a.start:e.start,l=Ia(e),d=en[l],c=this.dateX(r)+o/2;i.font="12px "+dt;const p=i.measureText(e.name).width,h=e.owner?24:0,u=19+p+h+14,f=c-u/2;i.fillStyle="#fff",i.strokeStyle=d,i.lineWidth=1.5,Rt(i,f,n,u,et,4),i.fill(),i.stroke(),i.fillStyle=d,i.beginPath(),i.arc(f+7+3,n+et/2,3,0,Math.PI*2),i.fill(),i.fillStyle=De.text,i.textAlign="left",i.textBaseline="middle",i.fillText(e.name,f+14+5,n+et/2+1);let g;if(e.owner){const m=this.options.members.find(b=>b.id===e.owner);m&&(Sn(i,f+u-12,n+et/2,9,tn(m.id),m.name.slice(0,1)),g={x:f+u-12,y:n+et/2,r:9})}this.pushHit({id:e.id,rowIndex:t,kind:"milestone",x:f,y:n,w:u,h:et,mode:"move",avatar:g})}pushHit(e){this.hits.push(e);const t=this.hitsByRow.get(e.rowIndex);t?t.push(e):this.hitsByRow.set(e.rowIndex,[e])}drawLocateButtons(){this.locateHits=[];const e=this.ctx,t=this.eScroll.scrollLeft,n=this.eScroll.clientWidth;this.rows.forEach((i,o)=>{const a=this.tasksById.get(i.id);if(!(a!=null&&a.start)||!a.end||a.path.length>1&&(!this.showChildren||this.milestonesOnly&&!a.milestone))return;const r=this.dateX(a.start),l=this.dateX(a.end)+this.dayWidth;if(l>=t&&r<=t+n)return;const d=l<t?10:n-18,c=o*this.options.rowHeight-this.eScroll.scrollTop+this.options.rowHeight/2;c<0||c>this.eScroll.clientHeight||(e.fillStyle="#8f959e",Rt(e,d-5,c-6,13,13,3),e.fill(),e.font="12px "+dt,e.textAlign="center",e.textBaseline="middle",e.fillStyle="#fff",e.fillText(l<t?"‹":"›",d+1,c),this.locateHits.push({id:a.id,x:d+1,y:c}))})}pointAt(e,t){const n=this.eScroll.getBoundingClientRect();return{x:e-n.left+this.eScroll.scrollLeft,y:t-n.top+this.eScroll.scrollTop}}hitAt(e,t){const n=this.pointAt(e,t),i=Math.floor(n.y/this.options.rowHeight),o=this.hitsByRow.get(i)??[];for(const a of o){if(a.avatar){const r=n.x-a.avatar.x,l=n.y-a.avatar.y;if(r*r+l*l<=a.avatar.r*a.avatar.r)return{hit:a,rowIndex:i,onAvatar:!0}}if(n.x>=a.x&&n.x<=a.x+a.w&&n.y>=a.y&&n.y<=a.y+a.h){const r=a.kind==="task"&&n.x<=a.x+Ri,l=a.kind==="task"&&n.x>=a.x+a.w-Ri;return{hit:{...a,mode:r?"resize-l":l?"resize-r":"move"},rowIndex:i,onAvatar:!1}}}return{hit:null,rowIndex:i,onAvatar:!1}}buildRulerTools(){this.eRulerTools=document.createElement("div"),this.eRulerTools.className="gt-ruler-tools",this.eHeader.appendChild(this.eRulerTools);const e=document.createElement("button");e.type="button",e.className="gt-ruler-btn gt-ruler-step",this.eStepLabel=document.createElement("span"),this.eStepLabel.className="gt-ruler-step-label",this.eStepLabel.textContent=Jt[this.unit];const t=document.createElement("span");t.className="gt-ruler-caret",t.textContent="▾",e.append(this.eStepLabel,t),e.addEventListener("click",o=>{o.stopPropagation(),this.toggleStepMenu()}),this.eRulerTools.appendChild(e);const n=this.toolButton("−","缩小",()=>this.zoomBy(-.25));this.eZoomValue=document.createElement("span"),this.eZoomValue.className="gt-ruler-zoom-value",this.eZoomValue.textContent=`${Math.round(this.zoom*100)}%`;const i=this.toolButton("+","放大",()=>this.zoomBy(.25));this.eRulerTools.append(n,i),this.eRulerTools.append(this.toolButton("今天","回到今天",()=>this.scrollToToday()),this.toolButton("‹","向左翻页",()=>this.pageBy(-.8)),this.toolButton("›","向右翻页",()=>this.pageBy(.8)))}toolButton(e,t,n){const i=document.createElement("button");return i.type="button",i.className="gt-ruler-btn gt-ruler-icon",e==="今天"&&(i.className="gt-ruler-btn gt-ruler-today"),i.textContent=e,i.title=t,i.addEventListener("click",o=>{o.stopPropagation(),n()}),i}zoomBy(e){this.setZoom(this.zoom+e)}pageBy(e){const t=this.totalDays*this.dayWidth-this.eScroll.clientWidth,n=this.eScroll.scrollLeft+this.eScroll.clientWidth*e;this.eScroll.scrollLeft=Math.max(0,Math.min(t,n))}toggleStepMenu(){if(this.eStepMenu){this.closeStepMenu();return}const e=document.createElement("div");e.className="gt-step-menu";for(const i of Mi){const o=document.createElement("div");o.className="gt-step-item",o.setAttribute("role","menuitemradio"),o.setAttribute("aria-checked",String(i===this.unit)),o.tabIndex=0,o.addEventListener("keydown",a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),this.setUnit(i),this.closeStepMenu())}),i===this.unit&&o.classList.add("gt-step-item-active"),o.textContent=Jt[i],o.addEventListener("click",a=>{a.stopPropagation(),this.setUnit(i),this.closeStepMenu()}),e.appendChild(o)}const t=this.eRulerTools.getBoundingClientRect(),n=this.eRoot.getBoundingClientRect();e.style.right=`${Math.max(0,n.right-t.right)}px`,e.style.top=`${t.bottom-n.top+4}px`,this.eRoot.appendChild(e),this.eStepMenu=e,document.addEventListener("mousedown",this.onDocumentMouseDown)}closeStepMenu(){var e;(e=this.eStepMenu)==null||e.remove(),this.eStepMenu=null,document.removeEventListener("mousedown",this.onDocumentMouseDown)}updateRulerTools(){this.eStepLabel.textContent=Jt[this.unit],this.eZoomValue.textContent=`${Math.round(this.zoom*100)}%`}openAssigneePopup(e,t){this.closeAssigneePopup();const n=this.tasksById.get(e);if(!n)return;const i=document.createElement("div");i.className="gt-popup";const o=document.createElement("div");o.className="gt-popup-title",o.textContent="更换负责人",i.appendChild(o);for(const d of this.options.members){const c=document.createElement("div");c.className="gt-popup-item",n.owner===d.id&&c.classList.add("gt-popup-item-active");const p=document.createElement("span");p.className="gt-avatar",p.textContent=d.name.slice(0,1),p.style.backgroundColor=tn(d.id);const h=document.createElement("span");h.textContent=d.name,c.append(p,h),c.addEventListener("click",u=>{u.stopPropagation(),this.closeAssigneePopup(),this.options.onAssign(e,d.id)}),i.appendChild(c)}if(n.owner){const d=document.createElement("div");d.className="gt-popup-item gt-popup-clear",d.textContent="取消负责人",d.addEventListener("click",c=>{c.stopPropagation(),this.closeAssigneePopup(),this.options.onAssign(e,null)}),i.appendChild(d)}const a=this.eRoot.getBoundingClientRect(),r=t.x+t.w-this.eScroll.scrollLeft,l=t.y-this.eScroll.scrollTop;i.style.left=`${Math.min(a.width-150,Math.max(0,r-40))}px`,i.style.top=`${l+t.h+6}px`,this.eRoot.appendChild(i),this.ePopup=i,document.addEventListener("mousedown",this.onDocumentMouseDown)}closeAssigneePopup(){var e;(e=this.ePopup)==null||e.remove(),this.ePopup=null,document.removeEventListener("mousedown",this.onDocumentMouseDown)}}const dt="-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Roboto, Helvetica, Arial, sans-serif";function Rt(s,e,t,n,i,o){const a=Math.max(0,n),r=Math.max(0,i);if(a===0||r===0)return;const l=Math.max(0,Math.min(o,a/2,r/2));s.beginPath(),s.moveTo(e+l,t),s.lineTo(e+a-l,t),s.arcTo(e+a,t,e+a,t+l,l),s.lineTo(e+a,t+r-l),s.arcTo(e+a,t+r,e+a-l,t+r,l),s.lineTo(e+l,t+r),s.arcTo(e,t+r,e,t+r-l,l),s.lineTo(e,t+l),s.arcTo(e,t,e+l,t,l),s.closePath()}function Sn(s,e,t,n,i,o){s.beginPath(),s.arc(e,t,n,0,Math.PI*2),s.fillStyle=i,s.fill(),s.lineWidth=1.5,s.strokeStyle="#fff",s.stroke(),s.fillStyle="#fff",s.font=`10px ${dt}`,s.textAlign="center",s.textBaseline="middle",s.fillText(o,e,t+1)}function Pa(s,e,t){if(t<=0)return"";if(s.measureText(e).width<=t)return e;let n=e.length;for(;n>1;){n--;const i=`${e.slice(0,n)}…`;if(s.measureText(i).width<=t)return i}return"…"}function Ni(s,e,t,n,i,o,a){const l=i>t?1:-1;s.beginPath(),s.moveTo(e,t),s.lineTo(n-5,t),s.quadraticCurveTo(n,t,n,t+5*l),s.lineTo(n,i-5*l),s.quadraticCurveTo(n,i,n+5*l,i),s.lineTo(o,a),s.stroke()}function Ha(s,e,t){s.fillStyle=De.accent,s.beginPath(),s.moveTo(e+5,t),s.lineTo(e-1,t-3.5),s.lineTo(e-1,t+3.5),s.closePath(),s.fill()}const Ii=["#7e80e7","#47a8f8","#87cf2b","#f3a23a","#e46ba6","#00c2c7","#ff6b6b","#a86dd7"];function tn(s){let e=0;for(let t=0;t<s.length;t++)e=e*31+s.charCodeAt(t)>>>0;return Ii[e%Ii.length]}const Oa={sort:"排序",sortAscending:"升序排列",sortDescending:"降序排列",columnSize:"列宽",autosizeThisColumn:"自适应列宽",autosizeAllColumns:"自适应所有列宽",pinColumn:"固定列",pinLeft:"固定到左侧",noPin:"取消固定",pinRight:"固定到右侧",filter:"筛选",openFilter:"打开筛选",openMultiFilter:"打开多选筛选",openAdvancedFilter:"打开高级筛选",clearFilter:"清除筛选",formula:"公式",addFormula:"添加公式…",editFormula:"编辑公式…",visibility:"列显示",hideColumn:"隐藏此列",chooseColumns:"选择显示的列…",openFilterTitle:"打开筛选",openMenuTitle:"打开菜单",copy:"复制",copyWithHeaders:"复制(含表头)",paste:"粘贴",export:"导出",csvExport:"导出 CSV",excelExport:"导出 Excel",resetColumns:"重置列",sizeToFit:"适应宽度",expandAll:"展开全部",collapseAll:"收起全部",pinRow:"固定行",pinToTop:"固定到顶部",pinToBottom:"固定到底部",unpin:"取消固定",filterOoo:"筛选…",apply:"应用",clear:"清除",searchOoo:"搜索…",noMatches:"无匹配项",selectAll:"全选",clearAll:"清除全部",join:"组合方式:",and:"且",or:"或",from:"从",to:"到",secondValue:"第二个值",value:"值",removeFilter:"移除筛选",addFilter:"+ 添加筛选",advancedFilter:"高级筛选",addCondition:"+ 添加条件",condTrue:"是",condFalse:"否",contains:"包含",notEqual:"不等于",startsWith:"开头是",endsWith:"结尾是",equals:"等于",blank:"为空",notBlank:"不为空",greaterThan:"大于",greaterThanOrEqual:"大于等于",lessThan:"小于",lessThanOrEqual:"小于等于",inRange:"介于",columns:"列",filters:"筛选",charts:"图表",rowGroups:"行分组",dragColumnsHere:"拖拽列到此处进行分组",searchColumns:"搜索列…",noMatchingColumns:"没有匹配的列",groupByThisColumn:"按此列分组",pinColumnTitle:"固定列",remove:"移除",page:"第",pageSize:"每页条数:",find:"在表格中查找…",matchCase:"区分大小写",of:"/",loadingOoo:"加载中…",noRowsToShow:"暂无数据",formulaPlaceholder:"例如 =price * quantity"};function Ba(s,e){const t=document.createElement("section");t.className="rowvia-gantt",t.innerHTML=`<div class="gantt-app">
|
|
28
28
|
<header class="gantt-toolbar"><div class="gantt-title"><span class="gantt-title-name"></span><span class="gantt-title-sub">条件视图</span></div></header>
|
|
29
29
|
<div class="gt-view-toolbar"><button class="gt-btn" data-action="filter">筛选</button><button class="gt-btn" data-action="sort">排序</button><span class="gt-toolbar-spacer"></span><span>甘特图</span><button class="gt-btn" data-action="settings" aria-label="甘特图设置" aria-expanded="false">设置</button></div>
|
|
30
30
|
<div class="gt-quick"><input aria-label="搜索工作项" placeholder="搜索工作项" type="search"></div>
|
|
31
31
|
<div class="gantt-body"><div class="gantt-left"><div class="grid ag-theme-quartz"></div></div><div class="gantt-right"></div></div>
|
|
32
32
|
<div class="gantt-status" aria-live="polite"></div>
|
|
33
33
|
<div class="gt-settings" hidden><div class="gt-settings-title">甘特条样式</div><label><input type="checkbox" data-setting="children" checked>甘特条显示子节点</label><label class="gt-indented"><input type="radio" name="nodes" value="all" checked>显示全部节点</label><label class="gt-indented"><input type="radio" name="nodes" value="milestones">显示里程碑节点</label><div class="gt-theme-options"><label><input type="radio" name="theme" value="content" checked>内容优先</label><label><input type="radio" name="theme" value="color">颜色优先</label></div></div>
|
|
34
|
-
</div>`,s.append(t);const n=
|
|
34
|
+
</div>`,s.append(t);const n=qe(t,"gantt",e),i=e.onTaskOpen?null:xi(t),o=T=>t.querySelector(T);o(".gantt-title-name").textContent=e.title??"甘特图";let a=structuredClone(e.tasks),r=new Map(a.map(T=>[T.id,T])),l=null,d,c=!0,p=!1;const h=o(".gantt-left");h.style.width=`${e.tableWidth??280}px`;const u=new AbortController,f=u.signal,g=o(".gantt-status");function v(){if(!d||p)return;l!==a&&(b.setTasks(a),l=a);const T=Array.from({length:d.getDisplayedRowCount()},(I,$)=>d.getDisplayedRowAtIndex($)).filter(Boolean);b.setRows(T.map(I=>({id:I.id,group:!!I.group,expanded:!!I.expanded})));const B=a.filter(I=>I.path.length===1),A=B.filter(I=>I.status==="done").length;g.textContent=`总工作项数 ${B.length} 完成进度 ${B.length?Math.round(A/B.length*100):0}%`}function m(T){var I;a=a.map($=>$.id===T.id?{...T}:$),r=new Map(a.map($=>[$.id,$]));const B=[T];let A=T.path.slice(0,-1);for(;A.length;){const $=a.find(te=>te.path.join("/")===A.join("/"));if(!$)break;const z=a.filter(te=>te.path.length===A.length+1&&te.path.slice(0,-1).join("/")===A.join("/")),W=z.flatMap(te=>te.start?[te.start]:[]).sort(),X=z.flatMap(te=>te.end?[te.end]:[]).sort();$.start=W[0]??null,$.end=X[X.length-1]??null,B.push($),A=A.slice(0,-1)}d.applyTransaction({update:B}),v(),(I=e.onTaskChange)==null||I.call(e,structuredClone(T))}const b=new Ti(o(".gantt-right"),{members:e.members??[],rowHeight:40,onSelect:T=>{var A;b.setSelected(T);const B=T?d==null?void 0:d.getRowNode(T):null;B&&((A=d.selectNode)==null||A.call(d,B,!0))},onHover:T=>{var B;t.querySelectorAll(".ag-row-hover").forEach(A=>A.classList.remove("ag-row-hover")),T&&((B=Array.from(t.querySelectorAll(".ag-row")).find(A=>A.dataset.rowid===T))==null||B.classList.add("ag-row-hover"))},onTaskChange:m,onAssign:(T,B)=>{const A=r.get(T);A&&m({...A,owner:B})}});function k(T){const B=T.data,A=document.createElement("span");if(A.className="gt-task-name",B.path.length>1?A.classList.add("gt-child-name"):T.node.group||A.classList.add("gt-root-leaf"),B.path.length>1){const $=document.createElement("span");$.className=`gt-node-dot gt-node-${B.status}`,A.append($)}const I=document.createElement("button");return I.className="gt-title-link",I.textContent=B.name,I.title=B.name,I.addEventListener("click",()=>{b.scrollToTask(B.id),e.onTaskOpen?e.onTaskOpen(structuredClone(B)):i==null||i.open({title:B.name,fields:[{label:"排期",value:`${B.start??"未设置"} — ${B.end??"未设置"}`}]})}),A.append(I),A}const C=document.createElement("button");C.className="gt-tree-toggle",C.textContent="▾",C.title="收起全部子层级",C.setAttribute("aria-label",C.title);function w(T){c=T,T?d.expandAll():d.collapseAll(),C.textContent=T?"▾":"▸",C.title=T?"收起全部子层级":"展开全部子层级",C.setAttribute("aria-label",C.title),v()}C.addEventListener("click",()=>w(!c));const L=["name","status","start","end","owner","progress"].map(T=>({field:T,hide:!0,filter:!0})),N=new Mt(o(".grid"),{columnDefs:L,rowData:a,treeData:!0,getDataPath:T=>T.path,getRowId:T=>T.data.id,groupDefaultExpanded:-1,includeHiddenColumnsInQuickFilter:!0,rowHeight:40,headerHeight:80,rowSelection:"single",localeText:Oa,suppressContextMenu:!0,autoGroupColumnDef:{headerName:"标题",width:e.tableWidth??280,minWidth:100,suppressMenu:!0,sortable:!1,resizable:!1,headerComponent:()=>{const T=document.createElement("div");return T.className="gt-title-header",T.append(C,document.createTextNode("标题")),T},cellRenderer:"agGroupCellRenderer",cellRendererParams:{suppressCount:!0,innerRenderer:k}},onGridReady:T=>{d=T.api,v()},onModelUpdated:T=>{d=T.api,v()},onRowGroupOpened:v,onRowClicked:T=>{var B;return b.setSelected(((B=T.node)==null?void 0:B.id)??null)}});d=N.getApi();const y=o(".ag-body-viewport");let D=!1;const S=(T,B)=>{D||(D=!0,B.scrollTop=T.scrollTop,D=!1)};y.addEventListener("scroll",()=>S(y,b.scrollElement),{signal:f}),b.scrollElement.addEventListener("scroll",()=>S(b.scrollElement,y),{signal:f}),y.addEventListener("mousemove",T=>{const B=T.target.closest(".ag-row");b.setHover((B==null?void 0:B.dataset.rowid)??null)},{signal:f}),y.addEventListener("mouseleave",()=>b.setHover(null),{signal:f});const R=new Na(d,t,{filter:[{colId:"name",label:"标题",kind:"text"},{colId:"status",label:"状态",kind:"text",options:[{value:"not-started",label:"未开始"},{value:"in-progress",label:"进行中"},{value:"done",label:"已完成"}]},{colId:"start",label:"开始日期",kind:"date"}],sort:[{colId:"name",label:"标题"},{colId:"start",label:"开始日期"},{colId:"end",label:"结束日期"}]},{onFilterButton:T=>o('[data-action="filter"]').classList.toggle("gt-btn-active",T),onSortButton:T=>o('[data-action="sort"]').classList.toggle("gt-btn-active",T)});o('[data-action="filter"]').addEventListener("click",T=>R.openFilterPanel(T.currentTarget),{signal:f}),o('[data-action="sort"]').addEventListener("click",T=>R.openSortPanel(T.currentTarget),{signal:f}),o('[type="search"]').addEventListener("input",T=>d.setQuickFilter(T.target.value),{signal:f});const M=o(".gt-settings"),F=o('[data-action="settings"]');F.addEventListener("click",()=>{M.hidden=!M.hidden,F.setAttribute("aria-expanded",String(!M.hidden))},{signal:f}),document.addEventListener("pointerdown",T=>{!M.contains(T.target)&&!F.contains(T.target)&&(M.hidden=!0,F.setAttribute("aria-expanded","false"))},{signal:f});const q=Math.random().toString(36).slice(2);return M.querySelectorAll('[type="radio"]').forEach(T=>{const B=T.name;T.name=B+q,T.addEventListener("change",()=>{B==="theme"?b.setTheme(T.value):b.setMilestonesOnly(T.value==="milestones")},{signal:f})}),o('[data-setting="children"]').addEventListener("change",T=>b.setShowChildren(T.target.checked),{signal:f}),t.addEventListener("keydown",T=>{T.key==="Escape"&&(M.hidden=!0,R.closeAll())},{signal:f}),v(),e.unit&&b.setUnit(e.unit),b.scrollToToday(.5),{onInteraction:n.onInteraction,grid:d,chart:b,expandAll:()=>w(!0),collapseAll:()=>w(!1),scrollToTask:T=>b.scrollToTask(T),setTasks(T){a=structuredClone(T),r=new Map(a.map(B=>[B.id,B])),d.setRowData(a),v()},destroy(){p||(p=!0,u.abort(),R.destroy(),i==null||i.destroy(),b.destroy(),N.destroy(),n.destroy(),t.remove())}}}const Tt={pending:{key:"pending",label:"未开始",className:"pending"},inProgress:{key:"inProgress",label:"进行中",className:"in-progress"},done:{key:"done",label:"已完成",className:"done"},failed:{key:"failed",label:"未通过",className:"failed"}},Ai={auto:"自动完成",and:"单人确认(并签)",or:"多人确认(会签)"};function En(s){const e=[{id:"owner",label:"已填写节点负责人",met:!!s.owner,fixLabel:"去填写",detail:"对应配置:节点字段必填 › 完成负责人"},{id:"schedule",label:"已填写排期与估分",met:!!(s.schedule&&s.estimate),fixLabel:"去填写",detail:s.milestone?"里程碑节点只需截止时间":"对应配置:节点字段必填 › 完成节点排期与估分"}];for(const t of s.form??[])t.required&&e.push({id:`form:${t.id}`,label:`节点表单「${t.label}」已填写`,met:!!(t.value&&String(t.value).trim()),fixLabel:"去填写",detail:"对应配置:完成表单"});for(const t of s.gates??[])e.push(t);return e}const $i=s=>s.every(e=>e.met);function Di(s){const e=s.nodes.length,t=s.nodes.filter(a=>a.status==="done").length,n=s.nodes.filter(a=>a.status==="failed").length,i=s.nodes.filter(a=>a.status==="inProgress").length,o=Math.max(1,s.nodes.findIndex(a=>a.status==="inProgress")+1);return{total:e,done:t,current:i,failed:n,index:o}}function Va(s,e){const t=s.filter(i=>i.groupId===e.id);return{done:t.filter(i=>i.status==="done").length,total:t.length}}function Fi(s){var t;const e=new Map;for(const n of s.groups)e.set(n.id,[]);for(const n of s.nodes){const i=n.groupId??((t=s.groups[0])==null?void 0:t.id);e.has(i)||e.set(i,[]),e.get(i).push(n)}return s.groups.map(n=>({group:n,nodes:e.get(n.id)??[]})).filter(n=>n.nodes.length>0)}function xn(s,e){const t=e.trim().toLowerCase();return t?new Set(s.nodes.filter(n=>n.name.toLowerCase().includes(t)).map(n=>n.id)):new Set(s.nodes.map(n=>n.id))}const Ga=.4,qa=1.8,Pi=.2;function Hi(s,e){const t=document.createElement("div"),n=new lt;t.className="rowvia-nf-canvas",t.innerHTML=`
|
|
35
35
|
<div class="rowvia-nf-canvas-toolbar">
|
|
36
36
|
<span class="rowvia-nf-legend" data-legend></span>
|
|
37
37
|
<span class="rowvia-nf-space"></span>
|
|
@@ -44,68 +44,84 @@ ${m}
|
|
|
44
44
|
<div class="rowvia-nf-canvas-sizer" data-sizer>
|
|
45
45
|
<div class="rowvia-nf-canvas-surface" data-surface></div>
|
|
46
46
|
</div>
|
|
47
|
-
</div>`,s.append(t);const i=
|
|
48
|
-
<span class="rowvia-nf-node-name">${
|
|
49
|
-
<span class="rowvia-nf-node-note">未显示 · ${
|
|
50
|
-
</span>`;const
|
|
47
|
+
</div>`,s.append(t);const i=qe(t,"flow-canvas",e),o=t.querySelector("[data-viewport]"),a=t.querySelector("[data-sizer]"),r=t.querySelector("[data-surface]"),l=t.querySelector("[data-zoom]"),d=t.querySelector("[data-legend]");let c=e.flow,p=e.selectedNodeId,h=e.query??"",u=1;const f=(S,R,M)=>{if(S.hiddenReason)return`<span class="rowvia-nf-node is-hidden" title="${H(S.hiddenReason)}">
|
|
48
|
+
<span class="rowvia-nf-node-name">${H(S.name)}</span>
|
|
49
|
+
<span class="rowvia-nf-node-note">未显示 · ${H(S.hiddenReason)}</span>
|
|
50
|
+
</span>`;const F=Tt[S.status],q=M==="right"&&S.info?`<span class="rowvia-nf-node-info">${H(S.info)}</span>`:"",T=M!=="none"&&(S.progress!==void 0||S.delayed)?[`
|
|
51
51
|
<span class="rowvia-nf-node-sub">
|
|
52
|
-
${
|
|
53
|
-
${
|
|
52
|
+
${S.progress!==void 0?`<span class="rowvia-nf-progress"><i style="width:${S.progress}%"></i></span>${S.progress}%`:""}
|
|
53
|
+
${S.delayed?'<em class="rowvia-nf-delay">延期</em>':""}
|
|
54
54
|
</span>`].join(""):"";return`<button type="button"
|
|
55
|
-
class="rowvia-nf-node status-${
|
|
56
|
-
data-node-id="${
|
|
57
|
-
aria-pressed="${p===
|
|
58
|
-
title="${
|
|
55
|
+
class="rowvia-nf-node status-${F.className} ${p===S.id?"is-selected":""} ${R?"is-dimmed":""} ${S.milestone?"is-milestone":""}"
|
|
56
|
+
data-node-id="${H(S.id)}"
|
|
57
|
+
aria-pressed="${p===S.id}"
|
|
58
|
+
title="${H(S.name)} · ${H(F.label)}${S.milestone?" · 里程碑":""}">
|
|
59
59
|
<span class="rowvia-nf-node-dot" aria-hidden="true"></span>
|
|
60
|
-
<span class="rowvia-nf-node-name">${
|
|
61
|
-
${
|
|
60
|
+
<span class="rowvia-nf-node-name">${H(S.name)}</span>
|
|
61
|
+
${S.milestone?'<span class="rowvia-nf-node-flag" title="里程碑:仅可填写截止时间">◆</span>':""}
|
|
62
62
|
${q}
|
|
63
|
-
${
|
|
64
|
-
</button>`},g=()=>{var
|
|
63
|
+
${T}
|
|
64
|
+
</button>`},g=()=>{var M;const S=xn(c,h),R=((M=c.infoField)==null?void 0:M.position)??"none";d.textContent=c.infoField?`显示:${c.infoField.label} · 位置:${R==="right"?"右侧":R==="below"?"下方":"不显示"}`:"未配置流程图展示信息",r.innerHTML=Fi(c).map(({group:F,nodes:q})=>{const T=Va(c.nodes,F),B=F.layout==="parallel",A=q.map((z,W)=>{const X=f(z,!S.has(z.id),R);return B?X:`${W?'<i class="rowvia-nf-edge" aria-hidden="true"></i>':""}${X}`}).join(""),I=c.groups[c.groups.indexOf(F)+1],$=B?`<div class="rowvia-nf-fan"><span>并行 ${q.length} 路</span><span>全部完成 → ${H((I==null?void 0:I.name)??"结束")}</span></div>`:"";return`<section class="rowvia-nf-group" data-group="${H(F.id)}">
|
|
65
65
|
<header class="rowvia-nf-group-head">
|
|
66
|
-
<strong>${
|
|
67
|
-
<em>${
|
|
66
|
+
<strong>${H(F.name)}</strong>
|
|
67
|
+
<em>${T.done}/${T.total}</em>
|
|
68
68
|
</header>
|
|
69
|
-
<div class="rowvia-nf-lane ${
|
|
69
|
+
<div class="rowvia-nf-lane ${B?"is-parallel":"is-sequence"}">${A}</div>
|
|
70
70
|
${$}
|
|
71
|
-
</section>`}).join(""),v()},v=()=>{l.style.transform=`scale(${u})`,r.textContent=`${Math.round(u*100)}%`,a.style.width=`${l.scrollWidth*u}px`,a.style.height=`${l.scrollHeight*u}px`},m=x=>{var T;u=Math.min(ha,Math.max(ua,Math.round(x*100)/100)),v(),(T=e.onZoomChange)==null||T.call(e,u)},w=()=>{const x=l.scrollWidth||1,T=o.clientWidth-8;m(T/x),o.scrollTo({left:0,top:0})},k=x=>{var A;const T=x.target.closest("[data-node-id],[data-action]");if(!(!T||!t.contains(T))){if(T.dataset.nodeId){(A=e.onSelectNode)==null||A.call(e,T.dataset.nodeId);return}T.dataset.action==="fit"&&w(),T.dataset.action==="zoom-in"&&m(u+gi),T.dataset.action==="zoom-out"&&m(u-gi)}};t.addEventListener("click",k);const C=x=>{!x.ctrlKey&&!x.metaKey||(x.preventDefault(),m(u+(x.deltaY<0?.1:-.1)))};o.addEventListener("wheel",C,{passive:!1});let b=null;const N=x=>{x.target.closest("button")||(b={x:x.clientX,y:x.clientY,left:o.scrollLeft,top:o.scrollTop},o.setPointerCapture(x.pointerId),o.classList.add("is-panning"))},I=x=>{b&&(o.scrollLeft=b.left-(x.clientX-b.x),o.scrollTop=b.top-(x.clientY-b.y))},E=()=>{b=null,o.classList.remove("is-panning")};o.addEventListener("pointerdown",N),o.addEventListener("pointermove",I),o.addEventListener("pointerup",E),o.addEventListener("pointercancel",E);const G=typeof ResizeObserver<"u"?new ResizeObserver(v):null;return G==null||G.observe(o),g(),{onInteraction:i.onInteraction,update(x){const T=x.flow!==void 0||x.hiddenHints!==void 0;if(x.flow&&(c=x.flow),x.selectedNodeId!==void 0&&(p=x.selectedNodeId),x.query!==void 0&&(h=x.query),x.hiddenHints&&(e.hiddenHints=x.hiddenHints),x.onZoomChange!==void 0&&(e.onZoomChange=x.onZoomChange),x.onSelectNode!==void 0&&(e.onSelectNode=x.onSelectNode),T)g();else{const A=rn(c,h);for(const H of l.querySelectorAll("[data-node-id]")){const q=H.dataset.nodeId===p;H.classList.toggle("is-selected",q),H.classList.toggle("is-dimmed",!A.has(H.dataset.nodeId)),H.setAttribute("aria-pressed",String(q))}}},focusNode(x){const T=Array.from(l.querySelectorAll("[data-node-id]")).find(A=>A.dataset.nodeId===x);T==null||T.scrollIntoView({block:"nearest",inline:"center",behavior:"smooth"}),T==null||T.classList.add("is-pulsing"),n.timeout(()=>T==null?void 0:T.classList.remove("is-pulsing"),900)},fit:w,getZoom:()=>u,destroy(){G==null||G.disconnect(),t.removeEventListener("click",k),o.removeEventListener("wheel",C),i.destroy(),n.destroy(),t.remove()}}}function pa(s){const e=[{id:"schedule",label:"总排期",value:s.schedule,source:"系统字段 · 排期",permission:"节点负责人、管理员"},{id:"estimate",label:"估分",value:s.estimate,source:"系统字段 · 估分",permission:"节点负责人、管理员"},{id:"worklog",label:"实际工时",value:s.worklog??"—",source:"系统字段 · 实际工时"}],t=s.progress!==void 0?[{id:"progress",label:"进度",value:s.progress+"%",percent:s.progress,writeMode:s.progressMode,group:"progress",source:"节点进度"}]:[],n=[{id:"conclusion",label:"整体完成结论",value:s.conclusion,source:"节点完成结论与意见",permission:"独立填写或按负责人结论汇总"},{id:"opinion",label:"整体完成意见",value:s.opinion,source:"节点完成结论与意见"}],i=(s.fields??[]).filter(a=>a.group!=="schedule");return[{key:"schedule",title:"排期与工作量",fields:e},{key:"progress",title:"进度",fields:t},{key:"conclusion",title:"结论与意见",fields:n},{key:"custom",title:"自定义字段",fields:i}].filter(a=>a.fields.length>0)}function fa(s,e,t){var a;const n=!t&&!e.readonly,i=[];e.group==="progress"?(i.push('<span class="rowvia-nf-progress is-large"><i style="width:'+(e.percent??0)+'%"></i></span>',"<b>"+D(e.value)+"</b>"),e.writeMode&&i.push('<em class="rowvia-nf-mode">'+D(e.writeMode)+"</em>")):n&&e.id==="conclusion"&&((a=s.conclusionOptions)!=null&&a.length)?i.push('<select data-field="'+D(e.id)+'" aria-label="'+D(e.label)+'"><option value="">请选择</option>'+s.conclusionOptions.map(l=>"<option"+(l===e.value?" selected":"")+">"+D(l)+"</option>").join("")+"</select>"):n?i.push('<input data-field="'+D(e.id)+'" value="'+D(e.value??"")+'" placeholder="待填" aria-label="'+D(e.label)+'">'):i.push('<span class="rowvia-nf-value'+(e.value?"":" is-empty")+'">'+D(e.value||"待填")+"</span>");const o=[e.source,e.permission?"可编辑:"+e.permission:""].filter(Boolean).join(" · ");return'<div class="rowvia-nf-field"><label>'+D(e.label)+'</label><div class="rowvia-nf-field-control">'+i.join("")+'</div><button type="button" class="rowvia-nf-info" data-info="'+D(o)+'" aria-label="字段来源">ⓘ</button></div>'}function ga(s){const e=s.filter(n=>n.met).length,t=s.map(n=>{const i=n.met?"":'<button type="button" class="rowvia-nf-fix" data-'+(n.viewLink?'gate-view="'+D(n.id)+'"':'gate-fix="'+D(n.id)+'"')+">"+D(n.fixLabel??"去填写")+"</button>";return'<li class="'+(n.met?"is-met":"is-unmet")+'"><i aria-hidden="true">'+(n.met?"✓":"✕")+"</i><span>"+D(n.label)+(n.detail?"<small>"+D(n.detail)+"</small>":"")+"</span>"+i+"</li>"}).join("");return'<section class="rowvia-nf-gates" data-gates><h4>完成前需满足 <em>'+e+"/"+s.length+"</em></h4><ul>"+t+"</ul></section>"}function ma(s,e){const t=s.tasks??[],n=e?"":'<button type="button" class="rowvia-nf-link" data-action="add-task">+ 新增任务</button>';if(!t.length)return'<section class="rowvia-nf-tasks is-empty"><h4>全部任务 (0/0)</h4><p>暂无子任务'+(e?"":'<button type="button" data-action="add-task">+ 新增任务</button>')+"</p></section>";const i=t.filter(a=>a.done).length,o=t.map(a=>{const l=a.deliverable?'<span class="rowvia-nf-deliverable">📎 '+D(a.deliverable)+"</span>":'<span class="rowvia-nf-value is-empty">暂无</span>';return'<tr class="'+(a.done?"is-done":"")+'"><td><label class="rowvia-nf-check"><input type="checkbox" data-task="'+D(a.id)+'"'+(a.done?" checked":"")+(e?" disabled":"")+"><span>"+D(a.name)+"</span></label>"+(a.blocking?'<em class="rowvia-nf-blocker" title="未完成前主节点无法流转">阻塞项</em>':"")+"</td><td>"+l+"</td><td>"+D(a.owner||"暂无")+"</td><td>"+D(a.estimate||"暂无")+"</td><td>"+D(a.schedule||"暂无")+"</td></tr>"}).join("");return'<section class="rowvia-nf-tasks"><h4>全部任务 ('+i+"/"+t.length+")"+n+"</h4><table><thead><tr><th>名称</th><th>交付物</th><th>当前负责人</th><th>估分</th><th>排期</th></tr></thead><tbody>"+o+"</tbody></table></section>"}function va(s,e){const t=s.form??[];if(!t.length)return"";const n=t.filter(r=>r.required).length,i=t.filter(r=>r.required&&!r.value).length,o=t.map(r=>{var c;let d;return!e&&r.type==="select"&&((c=r.options)!=null&&c.length)?d='<select data-form="'+D(r.id)+'" aria-label="'+D(r.label)+'"><option value="">请选择</option>'+r.options.map(p=>"<option"+(p===r.value?" selected":"")+">"+D(p)+"</option>").join("")+"</select>":!e&&r.type==="date"?d='<input type="date" data-form="'+D(r.id)+'" value="'+D(r.value??"")+'" aria-label="'+D(r.label)+'">':e?d='<span class="rowvia-nf-value'+(r.value?"":" is-empty")+'">'+D(r.value||"待填")+"</span>":d='<input data-form="'+D(r.id)+'" value="'+D(r.value??"")+'" placeholder="'+D(r.placeholder??"待填")+'" aria-label="'+D(r.label)+'">','<div class="rowvia-nf-form-row"><label>'+D(r.label)+(r.required?"<b>*</b>":"")+'</label><div class="rowvia-nf-field-control">'+d+"</div></div>"}).join(""),a=i?'<em class="rowvia-nf-warn">'+i+" 项必填未完成</em>":"",l="节点表单 · "+t.length+" 项"+(n?"("+n+" 必填)":"")+a;return'<section class="rowvia-nf-form'+(i?" has-pending":"")+'"><h4>'+l+"</h4>"+o+"</section>"}function wa(s){const e=s.events??[];if(!e.length)return"";const t=(o,a)=>a.length?"<span><b>"+o+"</b>"+a.map(l=>D(l.text)).join(";")+"</span>":"",n=e.filter(o=>o.trigger==="arrive"),i=e.filter(o=>o.trigger==="complete");return'<section class="rowvia-nf-events"><details><summary>ℹ 节点事件('+e.length+' 条规则已生效)</summary><div class="rowvia-nf-events-body">'+t("到达本节点时:",n)+t("完成本节点时:",i)+"<p>事件规则由流程模板配置,回滚节点至到达/完成之前的状态可解除限制。</p></div></details></section>"}function vi(s,e){const t=document.createElement("div"),n=new Ke;t.className="rowvia-nf-card",s.append(t);const i=Fe(t,"node-card",e);let o=e.node??null,a={...e},l=!1;const r=()=>{var x;if(!o){t.innerHTML='<div class="rowvia-nf-empty">在上方流程画布中选择一个节点,查看它的字段、表单与通行条件。</div>';return}const h=!!a.readonly,u=gt[o.status],f=an(o),g=o.completionMode?ui[o.completionMode]:"",v=pa(o),m=(o.buttons??[]).filter(T=>(T.placement??"inline")==="inline"),w=(o.buttons??[]).filter(T=>T.placement==="more"),k=(T,A,H="")=>'<span class="rowvia-nf-chip '+A+'"'+(H?' title="'+D(H)+'"':"")+">"+D(T)+"</span>",C=(T,A,H,q="",R=!1)=>'<button type="button" class="rowvia-nf-btn '+H+'" data-action="'+D(T)+'"'+(q?' title="'+D(q)+'"':"")+(R?" disabled":"")+">"+D(A)+"</button>",b=[];if(!h){o.status==="inProgress"&&b.push(C("complete","完成","is-primary")),o.status==="failed"&&b.push(C("resubmit","重新提交","is-primary")),(o.status==="done"||o.status==="failed")&&b.push(C("rollback","回滚","is-ghost","将节点状态回退至进行中")),b.push(C("transfer","转办","is-ghost","将负责人转交他人"));for(const T of m){const A=[T.hint,(x=T.roles)!=null&&x.length?"授权:"+T.roles.join("、"):""].filter(Boolean).join(" · "),H=T.variant==="primary"?"is-primary":T.variant==="warning"?"is-warning":"is-ghost";b.push(C("custom:"+T.id,T.label,H,A))}b.push('<button type="button" class="rowvia-nf-btn is-icon" data-action="more" aria-haspopup="menu" aria-expanded="'+String(l)+'">···</button>')}const N='<span class="rowvia-nf-owner">负责人 '+D(o.owner||"待填")+(o.ownerSource?"<em>"+D(o.ownerSource)+"</em>":"")+"</span>",I='<div class="rowvia-nf-menu" data-menu'+(l?"":" hidden")+' role="menu"><button type="button" role="menuitem" data-action="estimate">填写估分</button><button type="button" role="menuitem" data-action="group-chat">节点建群</button>'+w.map(T=>'<button type="button" role="menuitem" data-action="custom:'+D(T.id)+'">'+D(T.label)+"</button>").join("")+'<button type="button" role="menuitem" class="is-danger" data-action="delete-node"'+(o.deleteRoles?' title="允许删除:'+D(o.deleteRoles.join("、"))+'"':"")+">删除节点</button></div>",E='<header class="rowvia-nf-card-head"><span class="rowvia-nf-dot status-'+u.className+'" aria-hidden="true"></span><h3>'+D(o.name)+"</h3>"+k(u.label,"status-"+u.className)+(g?k(g,"is-mode","对应配置:完成方式"):"")+(o.milestone?k("◆ 里程碑"+(o.deadline?" · "+o.deadline:""),"is-milestone","里程碑:仅可填写截止时间"):"")+N+'<span class="rowvia-nf-space"></span><div class="rowvia-nf-actions">'+b.join("")+"</div>"+I+"</header>",G=v.map(T=>'<div class="rowvia-nf-field-group" data-section="'+T.key+'"><h5>'+D(T.title)+"</h5>"+T.fields.map(A=>fa(o,A,h)).join("")+"</div>").join("");t.innerHTML=E+ga(f)+'<details class="rowvia-nf-section" open><summary>节点字段 <em>'+v.length+" 组</em></summary>"+G+"</details>"+va(o,h)+ma(o,h)+wa(o)},d=h=>{var g,v,m,w,k;const u=h.target.closest("[data-action],[data-gate-fix],[data-gate-view],[data-info]");if(!u||!t.contains(u))return;if(u.dataset.info){n.add(wi(u,u.dataset.info));return}if(u.dataset.gateFix||u.dataset.gateView){p(),(g=a.onAction)==null||g.call(a,u.dataset.gateView?"open-gate-view":"fix-gate",(o==null?void 0:o.id)??"");return}const f=u.dataset.action;if(f){if(f==="more"){const C=t.querySelector("[data-menu]");if(!C)return;l=C.hidden,C.hidden=!l,u.setAttribute("aria-expanded",String(l));return}if(f==="complete"){const C=o?an(o):[];if(!hi(C)){p(),(v=a.onAction)==null||v.call(a,"complete-blocked",(o==null?void 0:o.id)??"");return}if(((m=a.onComplete)==null?void 0:m.call(a,(o==null?void 0:o.id)??"",C))===!1)return;(w=a.onAction)==null||w.call(a,"complete",(o==null?void 0:o.id)??"");return}(k=a.onAction)==null||k.call(a,f,(o==null?void 0:o.id)??"")}},c=h=>{var f,g,v,m,w;const u=h.target;if(u instanceof HTMLInputElement){u.dataset.task?(f=a.onTaskToggle)==null||f.call(a,(o==null?void 0:o.id)??"",u.dataset.task,u.checked):u.dataset.field?(g=a.onFieldChange)==null||g.call(a,(o==null?void 0:o.id)??"",u.dataset.field,u.value):u.dataset.form&&((v=a.onFormChange)==null||v.call(a,(o==null?void 0:o.id)??"",u.dataset.form,u.value));return}u instanceof HTMLSelectElement&&(u.dataset.field?(m=a.onFieldChange)==null||m.call(a,(o==null?void 0:o.id)??"",u.dataset.field,u.value):u.dataset.form&&((w=a.onFormChange)==null||w.call(a,(o==null?void 0:o.id)??"",u.dataset.form,u.value)))};function p(){const h=t.querySelector(".rowvia-nf-gates");h&&(h.classList.add("is-shaking"),n.timeout(()=>h.classList.remove("is-shaking"),700))}return t.addEventListener("click",d),t.addEventListener("change",c),r(),{onInteraction:i.onInteraction,update(h,u){o=h,u&&(a={...a,...u}),r()},destroy(){t.removeEventListener("click",d),t.removeEventListener("change",c),i.destroy(),n.destroy(),t.remove()}}}function wi(s,e){const t=document.createElement("div");t.className="rowvia-nf-tip",t.textContent=e,document.body.append(t);const n=s.getBoundingClientRect();t.style.left=Math.max(8,Math.min(window.innerWidth-260,n.left))+"px",t.style.top=n.bottom+6+"px";const i=window.setTimeout(()=>t.remove(),2600);return()=>{window.clearTimeout(i),t.remove()}}function yi(s,e){const t=document.createElement("div"),n=new Ke;t.className="rowvia-nf-contextbar",s.append(t);const i=Fe(t,"flow-context",e);let o=e.flow,a=e.query??"",l=!1;const r=()=>{const c=pi(o),p=!!(o.templateVersion&&o.latestTemplateVersion&&o.templateVersion!==o.latestTemplateVersion);t.innerHTML=`
|
|
71
|
+
</section>`}).join(""),v()},v=()=>{r.style.transform=`scale(${u})`,l.textContent=`${Math.round(u*100)}%`,a.style.width=`${r.scrollWidth*u}px`,a.style.height=`${r.scrollHeight*u}px`},m=S=>{var R;u=Math.min(qa,Math.max(Ga,Math.round(S*100)/100)),v(),(R=e.onZoomChange)==null||R.call(e,u)},b=()=>{const S=r.scrollWidth||1,R=o.clientWidth-8;m(R/S),o.scrollTo({left:0,top:0})},k=S=>{var M;const R=S.target.closest("[data-node-id],[data-action]");if(!(!R||!t.contains(R))){if(R.dataset.nodeId){(M=e.onSelectNode)==null||M.call(e,R.dataset.nodeId);return}R.dataset.action==="fit"&&b(),R.dataset.action==="zoom-in"&&m(u+Pi),R.dataset.action==="zoom-out"&&m(u-Pi)}};t.addEventListener("click",k);const C=S=>{!S.ctrlKey&&!S.metaKey||(S.preventDefault(),m(u+(S.deltaY<0?.1:-.1)))};o.addEventListener("wheel",C,{passive:!1});let w=null;const L=S=>{S.target.closest("button")||(w={x:S.clientX,y:S.clientY,left:o.scrollLeft,top:o.scrollTop},o.setPointerCapture(S.pointerId),o.classList.add("is-panning"))},N=S=>{w&&(o.scrollLeft=w.left-(S.clientX-w.x),o.scrollTop=w.top-(S.clientY-w.y))},y=()=>{w=null,o.classList.remove("is-panning")};o.addEventListener("pointerdown",L),o.addEventListener("pointermove",N),o.addEventListener("pointerup",y),o.addEventListener("pointercancel",y);const D=typeof ResizeObserver<"u"?new ResizeObserver(v):null;return D==null||D.observe(o),g(),{onInteraction:i.onInteraction,update(S){const R=S.flow!==void 0||S.hiddenHints!==void 0;if(S.flow&&(c=S.flow),S.selectedNodeId!==void 0&&(p=S.selectedNodeId),S.query!==void 0&&(h=S.query),S.hiddenHints&&(e.hiddenHints=S.hiddenHints),S.onZoomChange!==void 0&&(e.onZoomChange=S.onZoomChange),S.onSelectNode!==void 0&&(e.onSelectNode=S.onSelectNode),R)g();else{const M=xn(c,h);for(const F of r.querySelectorAll("[data-node-id]")){const q=F.dataset.nodeId===p;F.classList.toggle("is-selected",q),F.classList.toggle("is-dimmed",!M.has(F.dataset.nodeId)),F.setAttribute("aria-pressed",String(q))}}},focusNode(S){const R=Array.from(r.querySelectorAll("[data-node-id]")).find(M=>M.dataset.nodeId===S);R==null||R.scrollIntoView({block:"nearest",inline:"center",behavior:"smooth"}),R==null||R.classList.add("is-pulsing"),n.timeout(()=>R==null?void 0:R.classList.remove("is-pulsing"),900)},fit:b,getZoom:()=>u,destroy(){D==null||D.disconnect(),t.removeEventListener("click",k),o.removeEventListener("wheel",C),i.destroy(),n.destroy(),t.remove()}}}function za(s){const e=[{id:"schedule",label:"总排期",value:s.schedule,source:"系统字段 · 排期",permission:"节点负责人、管理员"},{id:"estimate",label:"估分",value:s.estimate,source:"系统字段 · 估分",permission:"节点负责人、管理员"},{id:"worklog",label:"实际工时",value:s.worklog??"—",source:"系统字段 · 实际工时"}],t=s.progress!==void 0?[{id:"progress",label:"进度",value:s.progress+"%",percent:s.progress,writeMode:s.progressMode,group:"progress",source:"节点进度"}]:[],n=[{id:"conclusion",label:"整体完成结论",value:s.conclusion,source:"节点完成结论与意见",permission:"独立填写或按负责人结论汇总"},{id:"opinion",label:"整体完成意见",value:s.opinion,source:"节点完成结论与意见"}],i=(s.fields??[]).filter(a=>a.group!=="schedule");return[{key:"schedule",title:"排期与工作量",fields:e},{key:"progress",title:"进度",fields:t},{key:"conclusion",title:"结论与意见",fields:n},{key:"custom",title:"自定义字段",fields:i}].filter(a=>a.fields.length>0)}function _a(s,e,t){var a;const n=!t&&!e.readonly,i=[];e.group==="progress"?(i.push('<span class="rowvia-nf-progress is-large"><i style="width:'+(e.percent??0)+'%"></i></span>',"<b>"+H(e.value)+"</b>"),e.writeMode&&i.push('<em class="rowvia-nf-mode">'+H(e.writeMode)+"</em>")):n&&e.id==="conclusion"&&((a=s.conclusionOptions)!=null&&a.length)?i.push('<select data-field="'+H(e.id)+'" aria-label="'+H(e.label)+'"><option value="">请选择</option>'+s.conclusionOptions.map(r=>"<option"+(r===e.value?" selected":"")+">"+H(r)+"</option>").join("")+"</select>"):n?i.push('<input data-field="'+H(e.id)+'" value="'+H(e.value??"")+'" placeholder="待填" aria-label="'+H(e.label)+'">'):i.push('<span class="rowvia-nf-value'+(e.value?"":" is-empty")+'">'+H(e.value||"待填")+"</span>");const o=[e.source,e.permission?"可编辑:"+e.permission:""].filter(Boolean).join(" · ");return'<div class="rowvia-nf-field"><label>'+H(e.label)+'</label><div class="rowvia-nf-field-control">'+i.join("")+'</div><button type="button" class="rowvia-nf-info" data-info="'+H(o)+'" aria-label="字段来源">ⓘ</button></div>'}function Wa(s){const e=s.filter(n=>n.met).length,t=s.map(n=>{const i=n.met?"":'<button type="button" class="rowvia-nf-fix" data-'+(n.viewLink?'gate-view="'+H(n.id)+'"':'gate-fix="'+H(n.id)+'"')+">"+H(n.fixLabel??"去填写")+"</button>";return'<li class="'+(n.met?"is-met":"is-unmet")+'"><i aria-hidden="true">'+(n.met?"✓":"✕")+"</i><span>"+H(n.label)+(n.detail?"<small>"+H(n.detail)+"</small>":"")+"</span>"+i+"</li>"}).join("");return'<section class="rowvia-nf-gates" data-gates><h4>完成前需满足 <em>'+e+"/"+s.length+"</em></h4><ul>"+t+"</ul></section>"}function Ua(s,e){const t=s.tasks??[],n=e?"":'<button type="button" class="rowvia-nf-link" data-action="add-task">+ 新增任务</button>';if(!t.length)return'<section class="rowvia-nf-tasks is-empty"><h4>全部任务 (0/0)</h4><p>暂无子任务'+(e?"":'<button type="button" data-action="add-task">+ 新增任务</button>')+"</p></section>";const i=t.filter(a=>a.done).length,o=t.map(a=>{const r=a.deliverable?'<span class="rowvia-nf-deliverable">📎 '+H(a.deliverable)+"</span>":'<span class="rowvia-nf-value is-empty">暂无</span>';return'<tr class="'+(a.done?"is-done":"")+'"><td><label class="rowvia-nf-check"><input type="checkbox" data-task="'+H(a.id)+'"'+(a.done?" checked":"")+(e?" disabled":"")+"><span>"+H(a.name)+"</span></label>"+(a.blocking?'<em class="rowvia-nf-blocker" title="未完成前主节点无法流转">阻塞项</em>':"")+"</td><td>"+r+"</td><td>"+H(a.owner||"暂无")+"</td><td>"+H(a.estimate||"暂无")+"</td><td>"+H(a.schedule||"暂无")+"</td></tr>"}).join("");return'<section class="rowvia-nf-tasks"><h4>全部任务 ('+i+"/"+t.length+")"+n+"</h4><table><thead><tr><th>名称</th><th>交付物</th><th>当前负责人</th><th>估分</th><th>排期</th></tr></thead><tbody>"+o+"</tbody></table></section>"}function ja(s,e){const t=s.form??[];if(!t.length)return"";const n=t.filter(l=>l.required).length,i=t.filter(l=>l.required&&!l.value).length,o=t.map(l=>{var c;let d;return!e&&l.type==="select"&&((c=l.options)!=null&&c.length)?d='<select data-form="'+H(l.id)+'" aria-label="'+H(l.label)+'"><option value="">请选择</option>'+l.options.map(p=>"<option"+(p===l.value?" selected":"")+">"+H(p)+"</option>").join("")+"</select>":!e&&l.type==="date"?d='<input type="date" data-form="'+H(l.id)+'" value="'+H(l.value??"")+'" aria-label="'+H(l.label)+'">':e?d='<span class="rowvia-nf-value'+(l.value?"":" is-empty")+'">'+H(l.value||"待填")+"</span>":d='<input data-form="'+H(l.id)+'" value="'+H(l.value??"")+'" placeholder="'+H(l.placeholder??"待填")+'" aria-label="'+H(l.label)+'">','<div class="rowvia-nf-form-row"><label>'+H(l.label)+(l.required?"<b>*</b>":"")+'</label><div class="rowvia-nf-field-control">'+d+"</div></div>"}).join(""),a=i?'<em class="rowvia-nf-warn">'+i+" 项必填未完成</em>":"",r="节点表单 · "+t.length+" 项"+(n?"("+n+" 必填)":"")+a;return'<section class="rowvia-nf-form'+(i?" has-pending":"")+'"><h4>'+r+"</h4>"+o+"</section>"}function Ka(s){const e=s.events??[];if(!e.length)return"";const t=(o,a)=>a.length?"<span><b>"+o+"</b>"+a.map(r=>H(r.text)).join(";")+"</span>":"",n=e.filter(o=>o.trigger==="arrive"),i=e.filter(o=>o.trigger==="complete");return'<section class="rowvia-nf-events"><details><summary>ℹ 节点事件('+e.length+' 条规则已生效)</summary><div class="rowvia-nf-events-body">'+t("到达本节点时:",n)+t("完成本节点时:",i)+"<p>事件规则由流程模板配置,回滚节点至到达/完成之前的状态可解除限制。</p></div></details></section>"}function Oi(s,e){const t=document.createElement("div"),n=new lt;t.className="rowvia-nf-card",s.append(t);const i=qe(t,"node-card",e);let o=e.node??null,a={...e},r=!1;const l=()=>{var S;if(!o){t.innerHTML='<div class="rowvia-nf-empty">在上方流程画布中选择一个节点,查看它的字段、表单与通行条件。</div>';return}const h=!!a.readonly,u=Tt[o.status],f=En(o),g=o.completionMode?Ai[o.completionMode]:"",v=za(o),m=(o.buttons??[]).filter(R=>(R.placement??"inline")==="inline"),b=(o.buttons??[]).filter(R=>R.placement==="more"),k=(R,M,F="")=>'<span class="rowvia-nf-chip '+M+'"'+(F?' title="'+H(F)+'"':"")+">"+H(R)+"</span>",C=(R,M,F,q="",T=!1)=>'<button type="button" class="rowvia-nf-btn '+F+'" data-action="'+H(R)+'"'+(q?' title="'+H(q)+'"':"")+(T?" disabled":"")+">"+H(M)+"</button>",w=[];if(!h){o.status==="inProgress"&&w.push(C("complete","完成","is-primary")),o.status==="failed"&&w.push(C("resubmit","重新提交","is-primary")),(o.status==="done"||o.status==="failed")&&w.push(C("rollback","回滚","is-ghost","将节点状态回退至进行中")),w.push(C("transfer","转办","is-ghost","将负责人转交他人"));for(const R of m){const M=[R.hint,(S=R.roles)!=null&&S.length?"授权:"+R.roles.join("、"):""].filter(Boolean).join(" · "),F=R.variant==="primary"?"is-primary":R.variant==="warning"?"is-warning":"is-ghost";w.push(C("custom:"+R.id,R.label,F,M))}w.push('<button type="button" class="rowvia-nf-btn is-icon" data-action="more" aria-haspopup="menu" aria-expanded="'+String(r)+'">···</button>')}const L='<span class="rowvia-nf-owner">负责人 '+H(o.owner||"待填")+(o.ownerSource?"<em>"+H(o.ownerSource)+"</em>":"")+"</span>",N='<div class="rowvia-nf-menu" data-menu'+(r?"":" hidden")+' role="menu"><button type="button" role="menuitem" data-action="estimate">填写估分</button><button type="button" role="menuitem" data-action="group-chat">节点建群</button>'+b.map(R=>'<button type="button" role="menuitem" data-action="custom:'+H(R.id)+'">'+H(R.label)+"</button>").join("")+'<button type="button" role="menuitem" class="is-danger" data-action="delete-node"'+(o.deleteRoles?' title="允许删除:'+H(o.deleteRoles.join("、"))+'"':"")+">删除节点</button></div>",y='<header class="rowvia-nf-card-head"><span class="rowvia-nf-dot status-'+u.className+'" aria-hidden="true"></span><h3>'+H(o.name)+"</h3>"+k(u.label,"status-"+u.className)+(g?k(g,"is-mode","对应配置:完成方式"):"")+(o.milestone?k("◆ 里程碑"+(o.deadline?" · "+o.deadline:""),"is-milestone","里程碑:仅可填写截止时间"):"")+L+'<span class="rowvia-nf-space"></span><div class="rowvia-nf-actions">'+w.join("")+"</div>"+N+"</header>",D=v.map(R=>'<div class="rowvia-nf-field-group" data-section="'+R.key+'"><h5>'+H(R.title)+"</h5>"+R.fields.map(M=>_a(o,M,h)).join("")+"</div>").join("");t.innerHTML=y+Wa(f)+'<details class="rowvia-nf-section" open><summary>节点字段 <em>'+v.length+" 组</em></summary>"+D+"</details>"+ja(o,h)+Ua(o,h)+Ka(o)},d=h=>{var g,v,m,b,k;const u=h.target.closest("[data-action],[data-gate-fix],[data-gate-view],[data-info]");if(!u||!t.contains(u))return;if(u.dataset.info){n.add(Bi(u,u.dataset.info));return}if(u.dataset.gateFix||u.dataset.gateView){p(),(g=a.onAction)==null||g.call(a,u.dataset.gateView?"open-gate-view":"fix-gate",(o==null?void 0:o.id)??"");return}const f=u.dataset.action;if(f){if(f==="more"){const C=t.querySelector("[data-menu]");if(!C)return;r=C.hidden,C.hidden=!r,u.setAttribute("aria-expanded",String(r));return}if(f==="complete"){const C=o?En(o):[];if(!$i(C)){p(),(v=a.onAction)==null||v.call(a,"complete-blocked",(o==null?void 0:o.id)??"");return}if(((m=a.onComplete)==null?void 0:m.call(a,(o==null?void 0:o.id)??"",C))===!1)return;(b=a.onAction)==null||b.call(a,"complete",(o==null?void 0:o.id)??"");return}(k=a.onAction)==null||k.call(a,f,(o==null?void 0:o.id)??"")}},c=h=>{var f,g,v,m,b;const u=h.target;if(u instanceof HTMLInputElement){u.dataset.task?(f=a.onTaskToggle)==null||f.call(a,(o==null?void 0:o.id)??"",u.dataset.task,u.checked):u.dataset.field?(g=a.onFieldChange)==null||g.call(a,(o==null?void 0:o.id)??"",u.dataset.field,u.value):u.dataset.form&&((v=a.onFormChange)==null||v.call(a,(o==null?void 0:o.id)??"",u.dataset.form,u.value));return}u instanceof HTMLSelectElement&&(u.dataset.field?(m=a.onFieldChange)==null||m.call(a,(o==null?void 0:o.id)??"",u.dataset.field,u.value):u.dataset.form&&((b=a.onFormChange)==null||b.call(a,(o==null?void 0:o.id)??"",u.dataset.form,u.value)))};function p(){const h=t.querySelector(".rowvia-nf-gates");h&&(h.classList.add("is-shaking"),n.timeout(()=>h.classList.remove("is-shaking"),700))}return t.addEventListener("click",d),t.addEventListener("change",c),l(),{onInteraction:i.onInteraction,update(h,u){o=h,u&&(a={...a,...u}),l()},destroy(){t.removeEventListener("click",d),t.removeEventListener("change",c),i.destroy(),n.destroy(),t.remove()}}}function Bi(s,e){const t=document.createElement("div");t.className="rowvia-nf-tip",t.textContent=e,document.body.append(t);const n=s.getBoundingClientRect();t.style.left=Math.max(8,Math.min(window.innerWidth-260,n.left))+"px",t.style.top=n.bottom+6+"px";const i=window.setTimeout(()=>t.remove(),2600);return()=>{window.clearTimeout(i),t.remove()}}function Vi(s,e){const t=document.createElement("div"),n=new lt;t.className="rowvia-nf-contextbar",s.append(t);const i=qe(t,"flow-context",e);let o=e.flow,a=e.query??"",r=!1;const l=()=>{const c=Di(o),p=!!(o.templateVersion&&o.latestTemplateVersion&&o.templateVersion!==o.latestTemplateVersion);t.innerHTML=`
|
|
72
72
|
<div class="rowvia-nf-context-main">
|
|
73
73
|
<label class="rowvia-nf-flowtype">
|
|
74
74
|
<span class="rowvia-nf-label">流程类型</span>
|
|
75
|
-
<select data-action="flow-type" aria-label="流程类型"><option>${
|
|
75
|
+
<select data-action="flow-type" aria-label="流程类型"><option>${H(o.name)}</option></select>
|
|
76
76
|
</label>
|
|
77
77
|
<span class="rowvia-nf-divider"></span>
|
|
78
78
|
<span class="rowvia-nf-stats">${c.total} 节点 · 已完成 ${c.done} · 当前第 ${c.index}/${c.total}</span>
|
|
79
79
|
<span class="rowvia-nf-chip ${c.failed?"has-failed":""}">未通过 ${c.failed}</span>
|
|
80
80
|
<span class="rowvia-nf-space"></span>
|
|
81
81
|
<div class="rowvia-nf-search">
|
|
82
|
-
<input data-action="search" placeholder="查找节点" value="${
|
|
82
|
+
<input data-action="search" placeholder="查找节点" value="${H(a)}" aria-label="查找节点">
|
|
83
83
|
<div class="rowvia-nf-suggestions" hidden data-suggestions></div>
|
|
84
84
|
</div>
|
|
85
85
|
<button type="button" class="rowvia-nf-ghost" data-action="rules" title="只读展示该流程的完成方式、节点事件与状态计算规则">⚙ 规则</button>
|
|
86
86
|
</div>
|
|
87
|
-
${p?`<div class="rowvia-nf-banner">当前使用的不是最新流程模板(${D(o.templateVersion)} → ${D(o.latestTemplateVersion)})<button type="button" data-action="diff">查看差异</button></div>`:""}`;const h=t.querySelector('[data-action="search"]'),u=t.querySelector("[data-suggestions]"),f=()=>{if(!u)return;const g=h.value.trim().toLowerCase(),v=g?o.nodes.filter(m=>m.name.toLowerCase().includes(g)).slice(0,8):[];u.hidden=!l||v.length===0,u.innerHTML=v.map(m=>`<button type="button" data-node="${D(m.id)}">${D(m.name)}<em>${D(gt[m.status].label)}</em></button>`).join("")};h.addEventListener("focus",()=>{l=!0,f()}),h.addEventListener("blur",()=>{l=!1,n.timeout(f,120)}),h.addEventListener("input",()=>{var g;a=h.value,f(),(g=e.onQuery)==null||g.call(e,a)}),u==null||u.addEventListener("click",g=>{var m;const v=g.target.closest("[data-node]");v&&(l=!1,u.hidden=!0,(m=e.onFocusNode)==null||m.call(e,v.dataset.node))}),a&&f()},d=c=>{var h,u;const p=c.target.closest("[data-action]");!p||!t.contains(p)||(p.dataset.action==="rules"&&((h=e.onOpenRules)==null||h.call(e)),p.dataset.action==="diff"&&((u=e.onOpenDiff)==null||u.call(e)))};return t.addEventListener("click",d),r(),{onInteraction:i.onInteraction,update(c,p){o=c,p!==void 0&&(a=p),r()},getQuery:()=>a,destroy(){t.removeEventListener("click",d),i.destroy(),n.destroy(),t.remove()}}}function bi(s,e){const t=document.createElement("div");t.className="rowvia-nf-timeline",s.append(t);const n=Fe(t,"node-timeline",e);let i=e.flow,o=e.selectedNodeId,a="timeline",l="all",r=null;const d=[{key:"all",label:"全部状态"},{key:"done",label:"已完成"},{key:"inProgress",label:"进行中"},{key:"pending",label:"未开始"},{key:"failed",label:"未通过"}],c=f=>[f.owner?"负责人 "+f.owner:"负责人待填",f.schedule?"排期 "+f.schedule:"排期待填",f.estimate?"估分 "+f.estimate:"估分待填",f.progress!==void 0?"进度 "+f.progress+"%":"",(f.tasks??[]).length?"任务 "+(f.tasks??[]).filter(v=>v.done).length+"/"+(f.tasks??[]).length:"",(f.form??[]).length?"表单 "+(f.form??[]).filter(v=>v.value).length+"/"+(f.form??[]).length:""].filter(Boolean).join(" · "),p=f=>{const g=gt[f.status],v=r===f.id,m=v?'<div class="rowvia-nf-tl-detail"><p>'+D(c(f))+"</p>"+((f.events??[]).length?'<p class="rowvia-nf-tl-events">'+f.events.map(w=>(w.trigger==="arrive"?"到达:":"完成:")+D(w.text)).join(" · ")+"</p>":"")+'<button type="button" class="rowvia-nf-ghost" data-action="edit" data-node="'+D(f.id)+'">回到操作卡编辑</button></div>':"";return'<div class="rowvia-nf-tl-row'+(o===f.id?" is-selected":"")+(f.milestone?" is-milestone":"")+'" data-row="'+D(f.id)+'"><button type="button" class="rowvia-nf-tl-toggle" data-action="toggle" data-node="'+D(f.id)+'" aria-expanded="'+String(v)+'" aria-label="展开">'+(v?"▾":"▸")+'</button><span class="rowvia-nf-dot status-'+g.className+'" aria-hidden="true"></span><button type="button" class="rowvia-nf-tl-name" data-action="edit" data-node="'+D(f.id)+'">'+D(f.name)+(f.milestone?'<em title="里程碑">◆</em>':"")+'</button><span class="rowvia-nf-chip status-'+g.className+'">'+D(g.label)+'</span><span class="rowvia-nf-tl-cell">'+D(f.owner||"待填")+'</span><span class="rowvia-nf-tl-cell">'+D(f.schedule||(f.deadline?"截止 "+f.deadline:"待填"))+'</span><span class="rowvia-nf-tl-cell">'+D(f.estimate||"待填")+'</span><span class="rowvia-nf-tl-cell is-progress">'+(f.progress!==void 0?'<span class="rowvia-nf-progress"><i style="width:'+f.progress+'%"></i></span>'+f.progress+"%":"—")+"</span></div>"+m},h=()=>{const f=i.nodes.filter(v=>l==="all"||v.status===l).map(p).join(""),g="<span>节点</span><span>状态</span><span>负责人</span><span>排期</span><span>估分</span><span>进度</span>";t.innerHTML='<div class="rowvia-nf-tl-toolbar"><div class="rowvia-nf-tl-filters">'+d.map(v=>'<button type="button" class="'+(l===v.key?"is-active":"")+'" data-action="filter" data-filter="'+v.key+'">'+v.label+"</button>").join("")+'</div><span class="rowvia-nf-space"></span><div class="rowvia-nf-seg" role="tablist"><button type="button" role="tab" class="'+(a==="timeline"?"is-active":"")+'" data-action="view" data-view="timeline">节点时间线</button><button type="button" role="tab" class="'+(a==="schedule"?"is-active":"")+'" data-action="view" data-view="schedule">排期信息</button></div></div><div class="rowvia-nf-tl-head">'+g+"</div>"+(f||'<div class="rowvia-nf-empty">没有符合筛选条件的节点</div>')},u=f=>{var m;const g=f.target.closest("[data-action]");if(!g||!t.contains(g))return;const v=g.dataset.action;if(v==="filter")l=g.dataset.filter??"all",h();else if(v==="view")a=g.dataset.view??"timeline",h();else if(v==="toggle"){const w=g.dataset.node;r=r===w?null:w,h()}else if(v==="edit"){const w=g.dataset.node;(m=e.onSelectNode)==null||m.call(e,w)}};return t.addEventListener("click",u),h(),{onInteraction:n.onInteraction,update(f){const g=f.flow!==void 0;if(f.flow&&(i=f.flow),f.selectedNodeId!==void 0&&(o=f.selectedNodeId),f.onSelectNode&&(e.onSelectNode=f.onSelectNode),g)h();else for(const v of t.querySelectorAll("[data-row]"))v.classList.toggle("is-selected",v.dataset.row===o)},destroy(){t.removeEventListener("click",u),n.destroy(),t.remove()}}}const ya=["schedule","estimate","worklog","conclusion","opinion"];function ba(s){const e={};for(const t of s){const n=gt[t.status].label;e[n]=(e[n]??0)+1}return Object.entries(e).map(([t,n])=>t+" "+n).join(" · ")}function Ca(s,e){let t=e.flow,n=e.selectedNodeId??"",i="",o=!1;const a=x=>{var T,A;return((T=x.nodes.find(H=>H.status==="inProgress"))==null?void 0:T.id)??((A=x.nodes[0])==null?void 0:A.id)??""};n||(n=a(t));const l=document.createElement("section");if(l.className="rowvia-nf",e.title){const x=document.createElement("header");x.className="rowvia-nf-title",x.innerHTML="<strong>"+D(e.title)+"</strong>",l.append(x)}const r=document.createElement("div");r.className="rowvia-nf-body",r.innerHTML='<div data-region="context"></div><div data-region="canvas"></div><div data-region="card"></div><div data-region="timeline"></div><aside class="rowvia-nf-rules" data-region="rules" hidden></aside>',l.append(r),s.append(l);const d=Fe(l,"node-flow",e),c=x=>r.querySelector('[data-region="'+x+'"]'),p=x=>t.nodes.find(T=>T.id===x)??null,h=yi(c("context"),{flow:t,query:i,onQuery:x=>{i=x,u.update({query:i})},onFocusNode:x=>w(x,!0),onOpenRules:()=>E(),onOpenDiff:()=>{var x;return(x=e.onAction)==null?void 0:x.call(e,"open-template-diff",n)}}),u=mi(c("canvas"),{flow:t,selectedNodeId:n,query:i,onSelectNode:x=>w(x)}),f=bi(c("timeline"),{flow:t,selectedNodeId:n,onSelectNode:x=>w(x,!0)}),g=c("rules"),v=vi(c("card"),{node:p(n),readonly:e.readonly,onComplete:(x,T)=>{var A;return(A=e.onComplete)==null?void 0:A.call(e,x,T)},onAction:(x,T)=>k(x,T),onFieldChange:(x,T,A)=>b(x,T,A),onFormChange:(x,T,A)=>N(x,T,A),onTaskToggle:(x,T,A)=>I(x,T,A)});function m(){v.update(p(n),{readonly:e.readonly})}function w(x,T=!1){var A;p(x)&&(n=x,u.update({selectedNodeId:x}),f.update({selectedNodeId:x}),m(),T&&u.focusNode(x),(A=e.onSelectNode)==null||A.call(e,x))}function k(x,T){var A;(x==="complete"||x==="rollback"||x==="resubmit")&&C(T,{status:x==="complete"?"done":"inProgress"}),(A=e.onAction)==null||A.call(e,x,T)}function C(x,T){t={...t,nodes:t.nodes.map(A=>A.id===x?{...A,...T}:A)},u.update({flow:t}),f.update({flow:t}),h.update(t,i),m()}function b(x,T,A){var q;const H=p(x);H&&(T==="conclusion"?C(x,{conclusion:A}):T==="opinion"?C(x,{opinion:A}):ya.includes(T)?C(x,{[T]:A}):C(x,{fields:(H.fields??[]).map(R=>R.id===T?{...R,value:A}:R)}),(q=e.onFieldChange)==null||q.call(e,x,T,A))}function N(x,T,A){var q;const H=p(x);H&&C(x,{form:(H.form??[]).map(R=>R.id===T?{...R,value:A}:R)}),(q=e.onFormChange)==null||q.call(e,x,T,A)}function I(x,T,A){var q;const H=p(x);H&&C(x,{tasks:(H.tasks??[]).map(R=>R.id===T?{...R,done:A}:R)}),(q=e.onTaskToggle)==null||q.call(e,x,T,A)}function E(){var A;if(!g.hidden){g.hidden=!0;return}const x=Array.from(new Set(t.nodes.map(H=>H.completionMode).filter(Boolean))),T=t.nodes.flatMap(H=>H.events??[]);g.innerHTML='<div class="rowvia-nf-rules-head"><strong>流程规则(只读)</strong><button type="button" class="rowvia-nf-ghost" data-action="close-rules">关闭</button></div><dl><dt>流程类型</dt><dd>'+D(t.name)+"</dd><dt>完成方式</dt><dd>"+(x.length?x.map(H=>D(String(H))).join("、"):"未配置")+"</dd><dt>状态计算规则</dt><dd>"+((A=t.statusRules)!=null&&A.length?t.statusRules.map(H=>D(H)).join("<br>"):"未命中规则时按节点流转事件配置显示")+"</dd><dt>节点事件</dt><dd>"+(T.length?T.slice(0,6).map(H=>(H.trigger==="arrive"?"到达:":"完成:")+D(H.text)).join("<br>"):"无")+"</dd><dt>节点状态分布</dt><dd>"+D(ba(t.nodes))+"</dd></dl>",g.hidden=!1}const G=x=>{x.target.closest('[data-action="close-rules"]')&&(g.hidden=!0)};return g.addEventListener("click",G),{onInteraction:d.onInteraction,selectNode(x){w(x,!0)},getSelectedNode:()=>p(n),setFlow(x){t=x,p(n)||(n=a(t)),h.update(t,i),u.update({flow:t,selectedNodeId:n,query:i}),f.update({flow:t,selectedNodeId:n}),m(),g.hidden=!0},updateNode(x,T){C(x,T)},focusNode(x){w(x,!0)},destroy(){o||(o=!0,g.removeEventListener("click",G),h.destroy(),u.destroy(),v.destroy(),f.destroy(),d.destroy(),l.remove())}}}const Sa=(s,e,t={})=>({id:s,name:e,...t});function He(s){return{groupId:"g1",completionMode:"and",...s}}function Ea(){const s=(t,n,i)=>He({id:t,name:n,status:"pending",groupId:"g4",owner:i,ownerSource:"来源:角色联动",schedule:"09-02 ~ 09-06",estimate:"2d"}),e=[He({id:"n-start",name:"开始",status:"done",owner:"系统",ownerSource:"来源:自动创建",schedule:"08-11",estimate:"0d",conclusion:"通过",events:[{trigger:"arrive",text:"需求状态 → 选题"}]}),He({id:"n-meeting",name:"选题会",status:"inProgress",owner:"林小满",ownerSource:"来源:自行添加",schedule:"08-12 ~ 08-14",estimate:"3d",worklog:"1.5d",progress:40,progressMode:"按排期自动计算",conclusionOptions:["通过","不通过","有条件通过"],form:[{id:"f-entry",label:"选题入围",required:!0,placeholder:"请填写选题入围(至少五个主题)"}],tasks:[Sa("t-1","请填写选题入围",{blocking:!0,deliverable:"选题清单",owner:"林小满",estimate:"1d",schedule:"08-12"})],fields:[{id:"cf-risk",label:"节点风险",value:"中风险",group:"custom",source:"节点字段 · 单选"}],events:[{trigger:"arrive",text:"需求状态 → 选题"},{trigger:"complete",text:"「选题状态」字段 → 已定稿"}],buttons:[{id:"pass",label:"通过评审",variant:"primary",roles:["节点负责人","管理员"],hint:"数据赋值:整体完成结论 → 已通过"},{id:"reject",label:"不通过",variant:"warning",placement:"more"}],actionRoles:["节点负责人","管理员"],deleteRoles:["管理员"]}),He({id:"n-topic",name:"确定选题",status:"pending",groupId:"g1",owner:"周野",schedule:"08-15 ~ 08-16",estimate:"2d",progress:0,progressMode:"手动填写",predecessors:["选题会"]}),He({id:"n-ads",name:"广告植入",status:"pending",owner:"商务组",schedule:"08-17",estimate:"1d",predecessors:["确定选题"]}),He({id:"n-script",name:"脚本制作",status:"pending",groupId:"g2",owner:"周野",schedule:"08-18 ~ 08-20",estimate:"3d"}),He({id:"n-review",name:"脚本评审",status:"pending",groupId:"g2",completionMode:"or",owner:"内容总监",schedule:"08-21",estimate:"1d",conclusionOptions:["通过","不通过"],events:[{trigger:"complete",text:"「脚本状态」字段 → 已评审"}]}),He({id:"n-plan",name:"制定计划表",status:"pending",groupId:"g3",owner:"制片人",schedule:"08-22 ~ 08-23",estimate:"2d"}),s("n-shoot","拍摄","导演组"),s("n-edit","剪辑","剪辑师"),s("n-art","美术","美术组"),s("n-audio","收音","录音师"),s("n-dit","DIT","DIT"),s("n-motion","动效","动效师"),s("n-color","调色","调色师"),s("n-mix","混音","混音师"),s("n-cover","封面","设计师"),He({id:"n-final",name:"成片",status:"pending",groupId:"g5",milestone:!0,deadline:"09-08",owner:"制片人",schedule:"09-08",estimate:"0d",predecessors:["全部并行节点"]}),He({id:"n-final-review",name:"成片评审会",status:"pending",groupId:"g5",completionMode:"or",owner:"内容总监",schedule:"09-09",estimate:"1d",conclusionOptions:["通过","不通过"],form:[{id:"f-pass",label:"成片评审是否通过",required:!0,type:"select",options:["是","否"]},{id:"f-publish",label:"预计发布时间",required:!0,type:"date"}],gates:[{id:"g-conclusion",label:"自定义条件:整体结论 = 通过",met:!1,fixLabel:"查看规则",detail:"完成流转条件 · 校验当前工作项",viewLink:"gates"},{id:"g-linked",label:"关联缺陷全部关闭",met:!1,fixLabel:"查看 3 条",detail:"完成流转条件 · 校验关联工作项",viewLink:"gates"}],events:[{trigger:"complete",text:"需求状态 → 待发布"}]}),He({id:"n-publish",name:"发布",status:"pending",groupId:"g5",owner:"运营",schedule:"09-10",estimate:"1d"}),He({id:"n-monitor",name:"数据监控",status:"pending",groupId:"g6",completionMode:"auto",owner:"数据组",schedule:"09-11 ~ 09-17",estimate:"5d",progress:0,progressMode:"同步自计算字段",delayed:!1}),He({id:"n-retro",name:"项目复盘",status:"pending",groupId:"g6",owner:"制片人",schedule:"09-18",estimate:"1d",delayed:!0,info:"09-18"}),He({id:"n-end",name:"结束",status:"pending",groupId:"g6",owner:"系统",estimate:"0d"})];for(const t of e)t.info||(t.info=t.schedule?t.schedule.split(" ~ ")[0]:"");return{id:"video",name:"视频流程",templateVersion:"v3",latestTemplateVersion:"v4",infoField:{label:"排期",position:"right"},statusRules:["整体结论 = 未通过 → 节点状态显示「未通过」","里程碑截止时间早于今天 → 节点状态显示「延期」"],groups:[{id:"g1",name:"前期策划"},{id:"g2",name:"脚本"},{id:"g3",name:"排期"},{id:"g4",name:"制作",layout:"parallel"},{id:"g5",name:"交付"},{id:"g6",name:"复盘"}],nodes:e}}const Ae=s=>Date.parse(`${s}T00:00:00Z`)/864e5,qe=s=>new Date(s*864e5).toISOString().slice(0,10),Ci=s=>/^\d{4}-\d{2}-\d{2}$/.test(s)&&Number.isFinite(Ae(s))&&qe(Ae(s))===s,ln=s=>!!s.start&&!!s.end;function dn(s,e){const t=new Set(s.map(n=>n.id));if(t.size!==s.length||new Set(e.map(n=>n.id)).size!==e.length)throw new Error("Duplicate schedule ID");for(const n of e){if(!t.has(n.personId))throw new Error(`Unknown person: ${n.personId}`);if(!Number.isFinite(n.estimate)||n.estimate<0)throw new Error("Invalid estimate");if(!!n.start!=!!n.end||n.start&&n.end&&(!Ci(n.start)||!Ci(n.end)||n.end<n.start))throw new Error("Invalid date range")}}function xa(s,e=!1){const t=[];return s.filter(ln).slice().sort((n,i)=>n.start.localeCompare(i.start)||n.id.localeCompare(i.id)).map(n=>{let i=e?t.length:t.findIndex(o=>o<Ae(n.start));return i<0&&(i=t.length),t[i]=Ae(n.end),{item:n,lane:i}})}function Si(s){let e=0,t=0;for(const n of s)ln(n)&&e++,t+=n.estimate;return{scheduled:e,unscheduled:s.length-e,estimate:t}}const Ei=["#b45ae4","#537bea","#16a999","#ec9952","#df6a9d","#8573dc"];function ka(s,e){const{people:t,items:n,today:i,selected:o,onlyScheduled:a,query:l,status:r,sort:d,descending:c,zoom:p,expanded:h,children:u,loose:f,colorFirst:g,from:v,days:m,rangeStart:w,rangeEnd:k}=e,C=$=>s.querySelector($),b=C(".ps-rows"),N=()=>[22,43,64,86,120][p],I=()=>n.filter($=>(!l||$.name.includes(l))&&(!r||$.status===r)&&(u||!$.parentId)),E=N(),G=m*E;C(".ps-table").style.width=`${G+200}px`;const x=`${w.slice(0,4)}年 第${Number(w.slice(5,7))}-${Number(k.slice(5,7))}月`;C(".ps-date-label").textContent=x,C('[data-action="people"]').textContent=`◎ 人员筛选 · ${o.size}人`,C(".ps-zoom").value=String(p);const T=C(".ps-weeks");T.replaceChildren();for(let $=0;$<m;$+=7){const z=document.createElement("span");z.style.width=`${Math.min(7,m-$)*E}px`,z.textContent=`${qe(v+$).slice(5).replace("-","/")}~${qe(v+$+6).slice(5).replace("-","/")}`,T.append(z)}b.replaceChildren();const A=I(),H=new Map;for(const $ of A){const z=H.get($.personId);z?z.push($):H.set($.personId,[$])}const q=new Map(t.map($=>[$.id,Si(H.get($.id)??[])])),R=t.filter($=>o.has($.id)&&(!a||q.get($.id).scheduled>0));d&&R.sort(($,z)=>{const j=q.get($.id),te=q.get(z.id);return(d==="estimate"?j.estimate-te.estimate:j.scheduled-te.scheduled)*(c?-1:1)});const P=document.createElement("div");for(let $=0;$<m;$++){const z=new Date((v+$)*864e5).getUTCDay();if(z!==0&&z!==6)continue;const j=document.createElement("i");j.className="ps-weekend",j.style.left=`${$*E}px`,j.style.width=`${E}px`,P.append(j)}for(const $ of R){const z=H.get($.id)??[],j=q.get($.id),te=xa(z,h),ue=Math.max(0,...te.map(U=>U.lane)),ge=Math.max(f?154:126,60+(ue+1)*(f?48:36)),be=document.createElement("div");be.className="ps-person-row",be.style.height=`${ge}px`,be.dataset.person=$.id;const fe=document.createElement("div");fe.className="ps-person",fe.innerHTML=`<div class="ps-person-name"><span class="ps-avatar"></span><strong>${D($.name)}</strong></div><div>已排期项 <b>${j.scheduled}</b></div><div>总估分 <b>${j.estimate.toFixed(2)}</b></div><div>未排期·${j.unscheduled}<button data-action="unplanned" data-person="${D($.id)}">查看</button></div>`;const me=fe.querySelector(".ps-avatar");me.textContent=$.name.slice(-2),me.style.background=$.color||Ei[t.indexOf($)%Ei.length];const Ee=document.createElement("div");Ee.className="ps-timeline",Ee.style.width=`${G}px`,Ee.style.setProperty("--day",`${E}px`);for(const U of P.children)Ee.append(U.cloneNode(!0));const Me=Ae(i)-v;if(Me>=0&&Me<m){const U=document.createElement("i");U.className="ps-today",U.style.left=`${(Me+.5)*E}px`,Ee.append(U)}for(const{item:U,lane:se}of te){const Z=Ae(U.start),W=Ae(U.end);if(W<v||Z>=v+m)continue;const Q=Math.max(0,Z-v)*E,ae=Math.min(m,W-v+1)*E,S=document.createElement("button");S.className=`ps-bar ${g?"ps-color":"ps-content"}`,S.dataset.item=U.id,S.setAttribute("aria-label",`${U.name},${U.start} 至 ${U.end}`),S.style.left=`${Q}px`,S.style.width=`${ae-Q}px`,S.style.top=`${52+se*(f?48:36)}px`,S.style.setProperty("--bar-color",U.color||"#8cafeb"),S.innerHTML=`<span class="ps-resize" data-edge="start"></span><span class="ps-bar-name">${D(U.name)}</span><span class="ps-status">${D(U.status)}</span><span class="ps-node">● ${D(U.node)}</span><span class="ps-effort">${U.estimate||""}</span><span class="ps-resize" data-edge="end"></span>`,Ee.append(S)}if(!te.length){const U=document.createElement("span");U.className="ps-no-schedule",U.textContent="暂无排期",Ee.append(U)}be.append(fe,Ee),b.append(be)}R.length||(b.innerHTML='<div class="ps-empty">没有符合条件的人员</div>');const L=new Set(R.map($=>$.id)),M=A.filter($=>L.has($.personId));C(".ps-total").textContent=`ⓘ 总人数 ${R.length} 总估分 ${Si(M).estimate.toFixed(2)} pd ···`}function Ma(s,e){dn(e.people,e.items);let t=structuredClone(e.people),n=structuredClone(e.items);const i=e.today??new Date().toISOString().slice(0,10);let o=new Set(t.map(W=>W.id)),a=!1,l="",r="",d="",c=!1,p=1,h=!1,u=!1,f=!1,g=!0,v=Ae(i)-new Date(`${i}T00:00:00Z`).getUTCDay(),m=90,w=`${i.slice(0,7)}-01`,k=qe(Date.UTC(Number(i.slice(0,4)),Number(i.slice(5,7))+1,0)/864e5),C=!1,b=!1;const N=document.createElement("section");N.className="personnel-schedule",N.innerHTML=`<header class="ps-title"><span class="ps-app-icon">▦</span><strong>${D(e.title??"人员排期")}</strong><nav><button class="active" data-action="schedule">人员排期</button><button data-action="views">视图列表</button></nav></header>
|
|
88
|
-
<div class="ps-toolbar"><button class="ps-tint" data-action="people">◎ 人员筛选</button><button class="ps-tint" data-action="filter">▽ 筛选 · ${
|
|
87
|
+
${p?`<div class="rowvia-nf-banner">当前使用的不是最新流程模板(${H(o.templateVersion)} → ${H(o.latestTemplateVersion)})<button type="button" data-action="diff">查看差异</button></div>`:""}`;const h=t.querySelector('[data-action="search"]'),u=t.querySelector("[data-suggestions]"),f=()=>{if(!u)return;const g=h.value.trim().toLowerCase(),v=g?o.nodes.filter(m=>m.name.toLowerCase().includes(g)).slice(0,8):[];u.hidden=!r||v.length===0,u.innerHTML=v.map(m=>`<button type="button" data-node="${H(m.id)}">${H(m.name)}<em>${H(Tt[m.status].label)}</em></button>`).join("")};h.addEventListener("focus",()=>{r=!0,f()}),h.addEventListener("blur",()=>{r=!1,n.timeout(f,120)}),h.addEventListener("input",()=>{var g;a=h.value,f(),(g=e.onQuery)==null||g.call(e,a)}),u==null||u.addEventListener("click",g=>{var m;const v=g.target.closest("[data-node]");v&&(r=!1,u.hidden=!0,(m=e.onFocusNode)==null||m.call(e,v.dataset.node))}),a&&f()},d=c=>{var h,u;const p=c.target.closest("[data-action]");!p||!t.contains(p)||(p.dataset.action==="rules"&&((h=e.onOpenRules)==null||h.call(e)),p.dataset.action==="diff"&&((u=e.onOpenDiff)==null||u.call(e)))};return t.addEventListener("click",d),l(),{onInteraction:i.onInteraction,update(c,p){o=c,p!==void 0&&(a=p),l()},getQuery:()=>a,destroy(){t.removeEventListener("click",d),i.destroy(),n.destroy(),t.remove()}}}function Gi(s,e){const t=document.createElement("div");t.className="rowvia-nf-timeline",s.append(t);const n=qe(t,"node-timeline",e);let i=e.flow,o=e.selectedNodeId,a="timeline",r="all",l=null;const d=[{key:"all",label:"全部状态"},{key:"done",label:"已完成"},{key:"inProgress",label:"进行中"},{key:"pending",label:"未开始"},{key:"failed",label:"未通过"}],c=f=>[f.owner?"负责人 "+f.owner:"负责人待填",f.schedule?"排期 "+f.schedule:"排期待填",f.estimate?"估分 "+f.estimate:"估分待填",f.progress!==void 0?"进度 "+f.progress+"%":"",(f.tasks??[]).length?"任务 "+(f.tasks??[]).filter(v=>v.done).length+"/"+(f.tasks??[]).length:"",(f.form??[]).length?"表单 "+(f.form??[]).filter(v=>v.value).length+"/"+(f.form??[]).length:""].filter(Boolean).join(" · "),p=f=>{const g=Tt[f.status],v=l===f.id,m=v?'<div class="rowvia-nf-tl-detail"><p>'+H(c(f))+"</p>"+((f.events??[]).length?'<p class="rowvia-nf-tl-events">'+f.events.map(b=>(b.trigger==="arrive"?"到达:":"完成:")+H(b.text)).join(" · ")+"</p>":"")+'<button type="button" class="rowvia-nf-ghost" data-action="edit" data-node="'+H(f.id)+'">回到操作卡编辑</button></div>':"";return'<div class="rowvia-nf-tl-row'+(o===f.id?" is-selected":"")+(f.milestone?" is-milestone":"")+'" data-row="'+H(f.id)+'"><button type="button" class="rowvia-nf-tl-toggle" data-action="toggle" data-node="'+H(f.id)+'" aria-expanded="'+String(v)+'" aria-label="展开">'+(v?"▾":"▸")+'</button><span class="rowvia-nf-dot status-'+g.className+'" aria-hidden="true"></span><button type="button" class="rowvia-nf-tl-name" data-action="edit" data-node="'+H(f.id)+'">'+H(f.name)+(f.milestone?'<em title="里程碑">◆</em>':"")+'</button><span class="rowvia-nf-chip status-'+g.className+'">'+H(g.label)+'</span><span class="rowvia-nf-tl-cell">'+H(f.owner||"待填")+'</span><span class="rowvia-nf-tl-cell">'+H(f.schedule||(f.deadline?"截止 "+f.deadline:"待填"))+'</span><span class="rowvia-nf-tl-cell">'+H(f.estimate||"待填")+'</span><span class="rowvia-nf-tl-cell is-progress">'+(f.progress!==void 0?'<span class="rowvia-nf-progress"><i style="width:'+f.progress+'%"></i></span>'+f.progress+"%":"—")+"</span></div>"+m},h=()=>{const f=i.nodes.filter(v=>r==="all"||v.status===r).map(p).join(""),g="<span>节点</span><span>状态</span><span>负责人</span><span>排期</span><span>估分</span><span>进度</span>";t.innerHTML='<div class="rowvia-nf-tl-toolbar"><div class="rowvia-nf-tl-filters">'+d.map(v=>'<button type="button" class="'+(r===v.key?"is-active":"")+'" data-action="filter" data-filter="'+v.key+'">'+v.label+"</button>").join("")+'</div><span class="rowvia-nf-space"></span><div class="rowvia-nf-seg" role="tablist"><button type="button" role="tab" class="'+(a==="timeline"?"is-active":"")+'" data-action="view" data-view="timeline">节点时间线</button><button type="button" role="tab" class="'+(a==="schedule"?"is-active":"")+'" data-action="view" data-view="schedule">排期信息</button></div></div><div class="rowvia-nf-tl-head">'+g+"</div>"+(f||'<div class="rowvia-nf-empty">没有符合筛选条件的节点</div>')},u=f=>{var m;const g=f.target.closest("[data-action]");if(!g||!t.contains(g))return;const v=g.dataset.action;if(v==="filter")r=g.dataset.filter??"all",h();else if(v==="view")a=g.dataset.view??"timeline",h();else if(v==="toggle"){const b=g.dataset.node;l=l===b?null:b,h()}else if(v==="edit"){const b=g.dataset.node;(m=e.onSelectNode)==null||m.call(e,b)}};return t.addEventListener("click",u),h(),{onInteraction:n.onInteraction,update(f){const g=f.flow!==void 0;if(f.flow&&(i=f.flow),f.selectedNodeId!==void 0&&(o=f.selectedNodeId),f.onSelectNode&&(e.onSelectNode=f.onSelectNode),g)h();else for(const v of t.querySelectorAll("[data-row]"))v.classList.toggle("is-selected",v.dataset.row===o)},destroy(){t.removeEventListener("click",u),n.destroy(),t.remove()}}}const Ya=["schedule","estimate","worklog","conclusion","opinion"];function Xa(s){const e={};for(const t of s){const n=Tt[t.status].label;e[n]=(e[n]??0)+1}return Object.entries(e).map(([t,n])=>t+" "+n).join(" · ")}function Za(s,e){let t=e.flow,n=e.selectedNodeId??"",i="",o=!1;const a=S=>{var R,M;return((R=S.nodes.find(F=>F.status==="inProgress"))==null?void 0:R.id)??((M=S.nodes[0])==null?void 0:M.id)??""};n||(n=a(t));const r=document.createElement("section");if(r.className="rowvia-nf",e.title){const S=document.createElement("header");S.className="rowvia-nf-title",S.innerHTML="<strong>"+H(e.title)+"</strong>",r.append(S)}const l=document.createElement("div");l.className="rowvia-nf-body",l.innerHTML='<div data-region="context"></div><div data-region="canvas"></div><div data-region="card"></div><div data-region="timeline"></div><aside class="rowvia-nf-rules" data-region="rules" hidden></aside>',r.append(l),s.append(r);const d=qe(r,"node-flow",e),c=S=>l.querySelector('[data-region="'+S+'"]'),p=S=>t.nodes.find(R=>R.id===S)??null,h=Vi(c("context"),{flow:t,query:i,onQuery:S=>{i=S,u.update({query:i})},onFocusNode:S=>b(S,!0),onOpenRules:()=>y(),onOpenDiff:()=>{var S;return(S=e.onAction)==null?void 0:S.call(e,"open-template-diff",n)}}),u=Hi(c("canvas"),{flow:t,selectedNodeId:n,query:i,onSelectNode:S=>b(S)}),f=Gi(c("timeline"),{flow:t,selectedNodeId:n,onSelectNode:S=>b(S,!0)}),g=c("rules"),v=Oi(c("card"),{node:p(n),readonly:e.readonly,onComplete:(S,R)=>{var M;return(M=e.onComplete)==null?void 0:M.call(e,S,R)},onAction:(S,R)=>k(S,R),onFieldChange:(S,R,M)=>w(S,R,M),onFormChange:(S,R,M)=>L(S,R,M),onTaskToggle:(S,R,M)=>N(S,R,M)});function m(){v.update(p(n),{readonly:e.readonly})}function b(S,R=!1){var M;p(S)&&(n=S,u.update({selectedNodeId:S}),f.update({selectedNodeId:S}),m(),R&&u.focusNode(S),(M=e.onSelectNode)==null||M.call(e,S))}function k(S,R){var M;(S==="complete"||S==="rollback"||S==="resubmit")&&C(R,{status:S==="complete"?"done":"inProgress"}),(M=e.onAction)==null||M.call(e,S,R)}function C(S,R){t={...t,nodes:t.nodes.map(M=>M.id===S?{...M,...R}:M)},u.update({flow:t}),f.update({flow:t}),h.update(t,i),m()}function w(S,R,M){var q;const F=p(S);F&&(R==="conclusion"?C(S,{conclusion:M}):R==="opinion"?C(S,{opinion:M}):Ya.includes(R)?C(S,{[R]:M}):C(S,{fields:(F.fields??[]).map(T=>T.id===R?{...T,value:M}:T)}),(q=e.onFieldChange)==null||q.call(e,S,R,M))}function L(S,R,M){var q;const F=p(S);F&&C(S,{form:(F.form??[]).map(T=>T.id===R?{...T,value:M}:T)}),(q=e.onFormChange)==null||q.call(e,S,R,M)}function N(S,R,M){var q;const F=p(S);F&&C(S,{tasks:(F.tasks??[]).map(T=>T.id===R?{...T,done:M}:T)}),(q=e.onTaskToggle)==null||q.call(e,S,R,M)}function y(){var M;if(!g.hidden){g.hidden=!0;return}const S=Array.from(new Set(t.nodes.map(F=>F.completionMode).filter(Boolean))),R=t.nodes.flatMap(F=>F.events??[]);g.innerHTML='<div class="rowvia-nf-rules-head"><strong>流程规则(只读)</strong><button type="button" class="rowvia-nf-ghost" data-action="close-rules">关闭</button></div><dl><dt>流程类型</dt><dd>'+H(t.name)+"</dd><dt>完成方式</dt><dd>"+(S.length?S.map(F=>H(String(F))).join("、"):"未配置")+"</dd><dt>状态计算规则</dt><dd>"+((M=t.statusRules)!=null&&M.length?t.statusRules.map(F=>H(F)).join("<br>"):"未命中规则时按节点流转事件配置显示")+"</dd><dt>节点事件</dt><dd>"+(R.length?R.slice(0,6).map(F=>(F.trigger==="arrive"?"到达:":"完成:")+H(F.text)).join("<br>"):"无")+"</dd><dt>节点状态分布</dt><dd>"+H(Xa(t.nodes))+"</dd></dl>",g.hidden=!1}const D=S=>{S.target.closest('[data-action="close-rules"]')&&(g.hidden=!0)};return g.addEventListener("click",D),{onInteraction:d.onInteraction,selectNode(S){b(S,!0)},getSelectedNode:()=>p(n),setFlow(S){t=S,p(n)||(n=a(t)),h.update(t,i),u.update({flow:t,selectedNodeId:n,query:i}),f.update({flow:t,selectedNodeId:n}),m(),g.hidden=!0},updateNode(S,R){C(S,R)},focusNode(S){b(S,!0)},destroy(){o||(o=!0,g.removeEventListener("click",D),h.destroy(),u.destroy(),v.destroy(),f.destroy(),d.destroy(),r.remove())}}}const Qa=(s,e,t={})=>({id:s,name:e,...t});function Ue(s){return{groupId:"g1",completionMode:"and",...s}}function Ja(){const s=(t,n,i)=>Ue({id:t,name:n,status:"pending",groupId:"g4",owner:i,ownerSource:"来源:角色联动",schedule:"09-02 ~ 09-06",estimate:"2d"}),e=[Ue({id:"n-start",name:"开始",status:"done",owner:"系统",ownerSource:"来源:自动创建",schedule:"08-11",estimate:"0d",conclusion:"通过",events:[{trigger:"arrive",text:"需求状态 → 选题"}]}),Ue({id:"n-meeting",name:"选题会",status:"inProgress",owner:"林小满",ownerSource:"来源:自行添加",schedule:"08-12 ~ 08-14",estimate:"3d",worklog:"1.5d",progress:40,progressMode:"按排期自动计算",conclusionOptions:["通过","不通过","有条件通过"],form:[{id:"f-entry",label:"选题入围",required:!0,placeholder:"请填写选题入围(至少五个主题)"}],tasks:[Qa("t-1","请填写选题入围",{blocking:!0,deliverable:"选题清单",owner:"林小满",estimate:"1d",schedule:"08-12"})],fields:[{id:"cf-risk",label:"节点风险",value:"中风险",group:"custom",source:"节点字段 · 单选"}],events:[{trigger:"arrive",text:"需求状态 → 选题"},{trigger:"complete",text:"「选题状态」字段 → 已定稿"}],buttons:[{id:"pass",label:"通过评审",variant:"primary",roles:["节点负责人","管理员"],hint:"数据赋值:整体完成结论 → 已通过"},{id:"reject",label:"不通过",variant:"warning",placement:"more"}],actionRoles:["节点负责人","管理员"],deleteRoles:["管理员"]}),Ue({id:"n-topic",name:"确定选题",status:"pending",groupId:"g1",owner:"周野",schedule:"08-15 ~ 08-16",estimate:"2d",progress:0,progressMode:"手动填写",predecessors:["选题会"]}),Ue({id:"n-ads",name:"广告植入",status:"pending",owner:"商务组",schedule:"08-17",estimate:"1d",predecessors:["确定选题"]}),Ue({id:"n-script",name:"脚本制作",status:"pending",groupId:"g2",owner:"周野",schedule:"08-18 ~ 08-20",estimate:"3d"}),Ue({id:"n-review",name:"脚本评审",status:"pending",groupId:"g2",completionMode:"or",owner:"内容总监",schedule:"08-21",estimate:"1d",conclusionOptions:["通过","不通过"],events:[{trigger:"complete",text:"「脚本状态」字段 → 已评审"}]}),Ue({id:"n-plan",name:"制定计划表",status:"pending",groupId:"g3",owner:"制片人",schedule:"08-22 ~ 08-23",estimate:"2d"}),s("n-shoot","拍摄","导演组"),s("n-edit","剪辑","剪辑师"),s("n-art","美术","美术组"),s("n-audio","收音","录音师"),s("n-dit","DIT","DIT"),s("n-motion","动效","动效师"),s("n-color","调色","调色师"),s("n-mix","混音","混音师"),s("n-cover","封面","设计师"),Ue({id:"n-final",name:"成片",status:"pending",groupId:"g5",milestone:!0,deadline:"09-08",owner:"制片人",schedule:"09-08",estimate:"0d",predecessors:["全部并行节点"]}),Ue({id:"n-final-review",name:"成片评审会",status:"pending",groupId:"g5",completionMode:"or",owner:"内容总监",schedule:"09-09",estimate:"1d",conclusionOptions:["通过","不通过"],form:[{id:"f-pass",label:"成片评审是否通过",required:!0,type:"select",options:["是","否"]},{id:"f-publish",label:"预计发布时间",required:!0,type:"date"}],gates:[{id:"g-conclusion",label:"自定义条件:整体结论 = 通过",met:!1,fixLabel:"查看规则",detail:"完成流转条件 · 校验当前工作项",viewLink:"gates"},{id:"g-linked",label:"关联缺陷全部关闭",met:!1,fixLabel:"查看 3 条",detail:"完成流转条件 · 校验关联工作项",viewLink:"gates"}],events:[{trigger:"complete",text:"需求状态 → 待发布"}]}),Ue({id:"n-publish",name:"发布",status:"pending",groupId:"g5",owner:"运营",schedule:"09-10",estimate:"1d"}),Ue({id:"n-monitor",name:"数据监控",status:"pending",groupId:"g6",completionMode:"auto",owner:"数据组",schedule:"09-11 ~ 09-17",estimate:"5d",progress:0,progressMode:"同步自计算字段",delayed:!1}),Ue({id:"n-retro",name:"项目复盘",status:"pending",groupId:"g6",owner:"制片人",schedule:"09-18",estimate:"1d",delayed:!0,info:"09-18"}),Ue({id:"n-end",name:"结束",status:"pending",groupId:"g6",owner:"系统",estimate:"0d"})];for(const t of e)t.info||(t.info=t.schedule?t.schedule.split(" ~ ")[0]:"");return{id:"video",name:"视频流程",templateVersion:"v3",latestTemplateVersion:"v4",infoField:{label:"排期",position:"right"},statusRules:["整体结论 = 未通过 → 节点状态显示「未通过」","里程碑截止时间早于今天 → 节点状态显示「延期」"],groups:[{id:"g1",name:"前期策划"},{id:"g2",name:"脚本"},{id:"g3",name:"排期"},{id:"g4",name:"制作",layout:"parallel"},{id:"g5",name:"交付"},{id:"g6",name:"复盘"}],nodes:e}}const Ve=s=>Date.parse(`${s}T00:00:00Z`)/864e5,Ze=s=>new Date(s*864e5).toISOString().slice(0,10),qi=s=>/^\d{4}-\d{2}-\d{2}$/.test(s)&&Number.isFinite(Ve(s))&&Ze(Ve(s))===s,kn=s=>!!s.start&&!!s.end;function Mn(s,e){const t=new Set(s.map(n=>n.id));if(t.size!==s.length||new Set(e.map(n=>n.id)).size!==e.length)throw new Error("Duplicate schedule ID");for(const n of e){if(!t.has(n.personId))throw new Error(`Unknown person: ${n.personId}`);if(!Number.isFinite(n.estimate)||n.estimate<0)throw new Error("Invalid estimate");if(!!n.start!=!!n.end||n.start&&n.end&&(!qi(n.start)||!qi(n.end)||n.end<n.start))throw new Error("Invalid date range")}}function er(s,e=!1){const t=[];return s.filter(kn).slice().sort((n,i)=>n.start.localeCompare(i.start)||n.id.localeCompare(i.id)).map(n=>{let i=e?t.length:t.findIndex(o=>o<Ve(n.start));return i<0&&(i=t.length),t[i]=Ve(n.end),{item:n,lane:i}})}function zi(s){let e=0,t=0;for(const n of s)kn(n)&&e++,t+=n.estimate;return{scheduled:e,unscheduled:s.length-e,estimate:t}}const _i=["#b45ae4","#537bea","#16a999","#ec9952","#df6a9d","#8573dc"];function tr(s,e){const{people:t,items:n,today:i,selected:o,onlyScheduled:a,query:r,status:l,sort:d,descending:c,zoom:p,expanded:h,children:u,loose:f,colorFirst:g,from:v,days:m,rangeStart:b,rangeEnd:k}=e,C=$=>s.querySelector($),w=C(".ps-rows"),L=()=>[22,43,64,86,120][p],N=()=>n.filter($=>(!r||$.name.includes(r))&&(!l||$.status===l)&&(u||!$.parentId)),y=L(),D=m*y;C(".ps-table").style.width=`${D+200}px`;const S=`${b.slice(0,4)}年 第${Number(b.slice(5,7))}-${Number(k.slice(5,7))}月`;C(".ps-date-label").textContent=S,C('[data-action="people"]').textContent=`◎ 人员筛选 · ${o.size}人`,C(".ps-zoom").value=String(p);const R=C(".ps-weeks");R.replaceChildren();for(let $=0;$<m;$+=7){const z=document.createElement("span");z.style.width=`${Math.min(7,m-$)*y}px`,z.textContent=`${Ze(v+$).slice(5).replace("-","/")}~${Ze(v+$+6).slice(5).replace("-","/")}`,R.append(z)}w.replaceChildren();const M=N(),F=new Map;for(const $ of M){const z=F.get($.personId);z?z.push($):F.set($.personId,[$])}const q=new Map(t.map($=>[$.id,zi(F.get($.id)??[])])),T=t.filter($=>o.has($.id)&&(!a||q.get($.id).scheduled>0));d&&T.sort(($,z)=>{const W=q.get($.id),X=q.get(z.id);return(d==="estimate"?W.estimate-X.estimate:W.scheduled-X.scheduled)*(c?-1:1)});const B=document.createElement("div");for(let $=0;$<m;$++){const z=new Date((v+$)*864e5).getUTCDay();if(z!==0&&z!==6)continue;const W=document.createElement("i");W.className="ps-weekend",W.style.left=`${$*y}px`,W.style.width=`${y}px`,B.append(W)}for(const $ of T){const z=F.get($.id)??[],W=q.get($.id),X=er(z,h),te=Math.max(0,...X.map(fe=>fe.lane)),le=Math.max(f?154:126,60+(te+1)*(f?48:36)),ve=document.createElement("div");ve.className="ps-person-row",ve.style.height=`${le}px`,ve.dataset.person=$.id;const de=document.createElement("div");de.className="ps-person",de.innerHTML=`<div class="ps-person-name"><span class="ps-avatar"></span><strong>${H($.name)}</strong></div><div>已排期项 <b>${W.scheduled}</b></div><div>总估分 <b>${W.estimate.toFixed(2)}</b></div><div>未排期·${W.unscheduled}<button data-action="unplanned" data-person="${H($.id)}">查看</button></div>`;const ue=de.querySelector(".ps-avatar");ue.textContent=$.name.slice(-2),ue.style.background=$.color||_i[t.indexOf($)%_i.length];const me=document.createElement("div");me.className="ps-timeline",me.style.width=`${D}px`,me.style.setProperty("--day",`${y}px`);for(const fe of B.children)me.append(fe.cloneNode(!0));const Ie=Ve(i)-v;if(Ie>=0&&Ie<m){const fe=document.createElement("i");fe.className="ps-today",fe.style.left=`${(Ie+.5)*y}px`,me.append(fe)}for(const{item:fe,lane:Re}of X){const be=Ve(fe.start),Q=Ve(fe.end);if(Q<v||be>=v+m)continue;const J=Math.max(0,be-v)*y,ie=Math.min(m,Q-v+1)*y,E=document.createElement("button");E.className=`ps-bar ${g?"ps-color":"ps-content"}`,E.dataset.item=fe.id,E.setAttribute("aria-label",`${fe.name},${fe.start} 至 ${fe.end}`),E.style.left=`${J}px`,E.style.width=`${ie-J}px`,E.style.top=`${52+Re*(f?48:36)}px`,E.style.setProperty("--bar-color",fe.color||"#8cafeb"),E.innerHTML=`<span class="ps-resize" data-edge="start"></span><span class="ps-bar-name">${H(fe.name)}</span><span class="ps-status">${H(fe.status)}</span><span class="ps-node">● ${H(fe.node)}</span><span class="ps-effort">${fe.estimate||""}</span><span class="ps-resize" data-edge="end"></span>`,me.append(E)}if(!X.length){const fe=document.createElement("span");fe.className="ps-no-schedule",fe.textContent="暂无排期",me.append(fe)}ve.append(de,me),w.append(ve)}T.length||(w.innerHTML='<div class="ps-empty">没有符合条件的人员</div>');const A=new Set(T.map($=>$.id)),I=M.filter($=>A.has($.personId));C(".ps-total").textContent=`ⓘ 总人数 ${T.length} 总估分 ${zi(I).estimate.toFixed(2)} pd ···`}function nr(s,e){Mn(e.people,e.items);let t=structuredClone(e.people),n=structuredClone(e.items);const i=e.today??new Date().toISOString().slice(0,10);let o=new Set(t.map(Q=>Q.id)),a=!1,r="",l="",d="",c=!1,p=1,h=!1,u=!1,f=!1,g=!0,v=Ve(i)-new Date(`${i}T00:00:00Z`).getUTCDay(),m=90,b=`${i.slice(0,7)}-01`,k=Ze(Date.UTC(Number(i.slice(0,4)),Number(i.slice(5,7))+1,0)/864e5),C=!1,w=!1;const L=document.createElement("section");L.className="personnel-schedule",L.innerHTML=`<header class="ps-title"><span class="ps-app-icon">▦</span><strong>${H(e.title??"人员排期")}</strong><nav><button class="active" data-action="schedule">人员排期</button><button data-action="views">视图列表</button></nav></header>
|
|
88
|
+
<div class="ps-toolbar"><button class="ps-tint" data-action="people">◎ 人员筛选</button><button class="ps-tint" data-action="filter">▽ 筛选 · ${H(e.workItemLabel??"工作项")}</button><button data-action="sort">☷ 人员排序</button><span class="ps-space"></span><button class="ps-round" data-action="minus" aria-label="缩小">−</button><input class="ps-zoom" type="range" min="0" max="4" step="1" value="1" aria-label="时间缩放"><button class="ps-round" data-action="plus" aria-label="放大">+</button><button class="ps-save" data-action="save">▣ 存为视图</button><button data-action="settings" aria-label="显示设置">⚙</button></div>
|
|
89
89
|
<div class="ps-scroll"><div class="ps-table"><div class="ps-time-header"><div class="ps-date-nav"><button data-action="date" class="ps-date-label"></button><button data-action="prev" aria-label="上一时间段">‹</button><button data-action="today" aria-label="回到今天">•</button><button data-action="next" aria-label="下一时间段">›</button></div><div class="ps-weeks"></div></div><div class="ps-rows"></div></div></div>
|
|
90
|
-
<footer class="ps-total"></footer><div class="ps-popover" hidden></div><aside class="ps-detail" hidden></aside><div class="ps-toast" role="status" hidden></div>`,s.append(N);const I=Fe(N,"personnel",e),E=W=>N.querySelector(W),G=E(".ps-scroll"),x=E(".ps-rows"),T=E(".ps-popover"),A=E(".ps-detail"),H=new AbortController,q=H.signal;let R;const P=()=>[22,43,64,86,120][p];function L(W){const Q=E(".ps-toast");Q.textContent=W,Q.hidden=!1,clearTimeout(R),R=setTimeout(()=>Q.hidden=!0,2200)}function M(){C||ka(N,{people:t,items:n,today:i,selected:o,onlyScheduled:a,query:l,status:r,sort:d,descending:c,zoom:p,expanded:h,children:u,loose:f,colorFirst:g,from:v,days:m,rangeStart:w,rangeEnd:k})}function $(W,Q){if(!T.hidden&&T.dataset.kind===W){T.hidden=!0;return}T.dataset.kind=W,T.hidden=!1;const ae=N.getBoundingClientRect(),S=Q==null?void 0:Q.getBoundingClientRect();if(T.style.left=`${Math.max(12,Math.min(((S==null?void 0:S.left)??ae.left)-ae.left,N.clientWidth-(W==="unplanned"?760:420)-16))}px`,T.style.top=`${S?S.bottom-ae.top+6:96}px`,T.className=`ps-popover ps-panel-${W}`,W==="people")T.innerHTML=`<div class="ps-panel-title">包含 ${o.size} 人<label><input type="checkbox" data-control="only" ${a?"checked":""}>仅查看有排期的用户</label></div><div class="ps-person-filter"><span>甘特图显示人员</span><span>包含</span><span>全部排期人员</span></div><input class="ps-person-search" placeholder="搜索人员" aria-label="搜索人员"><div class="ps-person-options">${t.map(V=>`<label><input type="checkbox" data-person="${D(V.id)}" ${o.has(V.id)?"checked":""}>${D(V.name)}</label>`).join("")}</div>`;else if(W==="sort")T.innerHTML=`<div class="ps-panel-title">设置排序条件 ⓘ</div><div class="ps-sort-fields"><select aria-label="排序字段" data-control="sort"><option value="">请选择排序项</option><option value="estimate">总估分</option><option value="scheduled">已排期项</option></select><button data-action="asc" class="${c?"":"selected"}">小 → 大</button><button data-action="desc" class="${c?"selected":""}">大 → 小</button></div><button class="ps-link" data-action="clear-sort">清空全部条件</button>`,T.querySelector("select").value=d;else if(W==="filter")T.innerHTML=`<div class="ps-panel-title">筛选工作项</div><label>工作项类型 <span class="ps-chip">${D(e.workItemLabel??"工作项")}</span></label><label>名称包含 <input data-control="query" value="${D(l)}" placeholder="输入名称"></label><label>状态 <select data-control="status"><option value="">全部状态</option>${[...new Set(n.map(V=>V.status))].map(V=>`<option>${D(V)}</option>`).join("")}</select></label><button data-action="clear-filter" class="ps-link">清空筛选</button>`,T.querySelector("select").value=r;else if(W==="settings")T.innerHTML=`<div class="ps-panel-title">数据显示</div><label><input type="checkbox" data-control="expanded" ${h?"checked":""}>展开全部排期项</label><label><input type="checkbox" data-control="children" ${u?"checked":""}>展示全部子项</label><div class="ps-panel-title">内容显示</div><div class="ps-segment"><button data-action="compact" class="${f?"":"selected"}">紧凑</button><button data-action="loose" class="${f?"selected":""}">宽松</button></div><div class="ps-panel-title">甘特条样式 ⓘ</div><div class="ps-style-options"><button data-action="content" class="${g?"":"selected"}"><i></i>◉ 内容优先</button><button data-action="color" class="${g?"selected":""}"><i></i>◉ 颜色优先</button></div>`;else if(W==="date")te();else if(W==="save")T.innerHTML='<div class="ps-panel-title">存为视图</div><input data-view-name placeholder="视图名称" aria-label="视图名称"><button class="ps-primary" data-action="save-view">保存</button>';else if(W==="views"){const V=se();T.innerHTML=`<div class="ps-panel-title">视图列表</div>${V.length?V.map((oe,ce)=>`<button class="ps-view" data-view="${ce}">▦ ${D(oe.name)}</button>`).join(""):"<p>暂无保存的视图</p>"}`}}let z=new Date(`${w}T00:00:00Z`),j=!1;function te(){let W=`<div class="ps-range-inputs"><input type="date" data-control="range-start" value="${w}" aria-label="开始日期">—<input type="date" data-control="range-end" value="${k}" aria-label="结束日期"></div><div class="ps-calendars">`;for(let Q=0;Q<2;Q++){const ae=new Date(Date.UTC(z.getUTCFullYear(),z.getUTCMonth()+Q,1));W+=`<div class="ps-calendar"><div><button data-action="cal-prev">‹</button><strong>${ae.getUTCFullYear()}年 ${ae.getUTCMonth()+1}月</strong><button data-action="cal-next">›</button></div><div class="ps-calendar-grid">${"日一二三四五六".split("").map(V=>`<span>${V}</span>`).join("")}`;for(let V=0;V<ae.getUTCDay();V++)W+="<span></span>";const S=new Date(Date.UTC(ae.getUTCFullYear(),ae.getUTCMonth()+1,0)).getUTCDate();for(let V=1;V<=S;V++){const oe=qe(Date.UTC(ae.getUTCFullYear(),ae.getUTCMonth(),V)/864e5);W+=`<button data-date="${oe}" class="${oe>=w&&oe<=k?"in-range":""} ${oe===w||oe===k?"selected":""}">${V}</button>`}W+="</div></div>"}T.innerHTML=W+`</div><div class="ps-presets">${["本周","本双周","本月","本双月","2周内","2个月内","1年内"].map((Q,ae)=>`<button data-preset="${ae}">${Q}</button>`).join("")}</div>`}let ue=`${w}/${k}`;function ge(){var Q;const W=`${w}/${k}`;W!==ue&&(ue=W,(Q=e.onRangeChange)==null||Q.call(e,{from:w,to:k}))}function be(W){for(const Q of[W.from,W.to])if(!/^\d{4}-\d{2}-\d{2}$/.test(Q)||!Number.isFinite(Ae(Q))||qe(Ae(Q))!==Q)throw new Error("Invalid schedule date range");if(W.to<W.from)throw new Error("Invalid schedule date range");w=W.from,k=W.to,z=new Date(`${w}T00:00:00Z`),ue=`${w}/${k}`,fe(!1)}function fe(W=!0){k<w&&([w,k]=[k,w]),v=Ae(w),v-=new Date(v*864e5).getUTCDay(),m=Math.max(35,Ae(k)-v+8),G.scrollLeft=0,M(),W&&ge()}function me(W,Q){var V;if(!n.some(oe=>oe.id===W))throw new Error(`Unknown schedule item: ${W}`);const ae=n.map(oe=>oe.id===W?{...oe,...Q}:oe);dn(t,ae),n=ae,M();const S=n.find(oe=>oe.id===W);S&&((V=e.onItemChange)==null||V.call(e,structuredClone(S)))}function Ee(W){var ae;const Q=n.find(S=>S.id===W);(ae=e.onItemOpen)==null||ae.call(e,structuredClone(Q)),A.hidden=!1,A.dataset.item=W,A.innerHTML=`<header><strong>${D(Q.name)}</strong><button data-action="close-detail" aria-label="关闭详情">×</button></header><div class="ps-detail-body"><span class="ps-chip">${D(Q.status)}</span><h3>● ${D(Q.node)}</h3><form><label>名称<input name="name" required value="${D(Q.name)}"></label><label>负责人<select name="personId">${t.map(S=>`<option value="${D(S.id)}" ${S.id===Q.personId?"selected":""}>${D(S.name)}</option>`).join("")}</select></label><label>总估分(pd)<input name="estimate" type="number" min="0" step="0.1" value="${Q.estimate}" required></label><label>开始日期<input type="date" name="start" value="${Q.start||""}"></label><label>结束日期<input type="date" name="end" value="${Q.end||""}"></label><p class="ps-error" role="alert"></p><button class="ps-primary" type="submit">保存排期</button><button type="button" data-action="unschedule">移至未排期</button></form></div>`}function Me(W,Q){$("unplanned",Q),T.hidden=!1;const ae=t.find(S=>S.id===W);T.innerHTML=`<div class="ps-panel-title">未排期工作项 ${D(ae.name)}</div><table><thead><tr><th>名称</th><th>节点 / 状态</th><th>估分</th><th>排期</th></tr></thead><tbody>${n.filter(S=>S.personId===W&&!ln(S)).map(S=>`<tr><td><button data-open="${D(S.id)}">${D(S.name)}</button></td><td>● ${D(S.node)}</td><td><input type="number" min="0" step="0.1" value="${S.estimate||""}" placeholder="待填" data-estimate="${D(S.id)}" aria-label="${D(S.name)}估分"></td><td><button class="ps-link" data-open="${D(S.id)}">待填</button></td></tr>`).join("")||'<tr><td colspan="4">暂无未排期工作项</td></tr>'}</tbody></table>`}const U=e.viewStorageKey??"rowvia-personnel-views-v1";function se(){try{const W=JSON.parse(localStorage.getItem(U)||"[]");return Array.isArray(W)?W:[]}catch{return[]}}N.addEventListener("click",W=>{const Q=W.target,ae=Q.closest("button");if(!ae)return;if(ae.dataset.open){T.hidden=!0,Ee(ae.dataset.open);return}if(ae.dataset.item){b||Ee(ae.dataset.item);return}if(ae.dataset.date){j?(k=ae.dataset.date,j=!1,fe()):(w=ae.dataset.date,k=w,j=!0),te();return}if(ae.dataset.preset){const V=Number(ae.dataset.preset),oe=Ae(i),ce=new Date(oe*864e5);w=qe(V<2?oe-ce.getUTCDay():V<4?Date.UTC(ce.getUTCFullYear(),ce.getUTCMonth(),1)/864e5:oe),k=qe(V===2||V===3?Date.UTC(ce.getUTCFullYear(),ce.getUTCMonth()+(V===2?1:2),0)/864e5:Ae(w)+[6,13,29,60,13,59,364][V]),j=!1,fe(),T.hidden=!0;return}if(ae.dataset.view){const V=se()[Number(ae.dataset.view)];V&&(o=new Set(V.selected.filter(oe=>t.some(ce=>ce.id===oe))),{query:l,status:r,sort:d,descending:c,zoom:p,from:v,days:m,rangeStart:w,rangeEnd:k,expanded:h,children:u,loose:f,colorFirst:g,onlyScheduled:a}=V,M(),ge(),T.hidden=!0,L(`已打开 ${V.name}`));return}const S=ae.dataset.action;if(["people","filter","sort","settings","date","save","views"].includes(S||"")){$(S,ae);return}if(S==="unplanned"){Me(ae.dataset.person,ae);return}if(S==="close-detail"&&(A.hidden=!0),S==="unschedule"&&(me(A.dataset.item,{start:null,end:null}),A.hidden=!0),(S==="plus"||S==="minus")&&(p=Math.max(0,Math.min(4,p+(S==="plus"?1:-1))),M()),(S==="prev"||S==="next"||S==="today")&&(v=S==="today"?Ae(i)-new Date(`${i}T00:00:00Z`).getUTCDay():v+(S==="prev"?-14:14),w=qe(v),k=qe(v+59),G.scrollLeft=0,M(),ge()),(S==="asc"||S==="desc"||S==="clear-sort")&&(c=S==="desc",S==="clear-sort"&&(d=""),M(),T.hidden=!0),S==="clear-filter"&&(l="",r="",M(),T.hidden=!0),["compact","loose","content","color"].includes(S||"")&&(S==="compact"||S==="loose"?f=S==="loose":g=S==="color",M(),T.hidden=!0,$("settings",E('[data-action="settings"]'))),(S==="cal-prev"||S==="cal-next")&&(z=new Date(Date.UTC(z.getUTCFullYear(),z.getUTCMonth()+(S==="cal-prev"?-1:1),1)),te()),S==="save-view"){const V=T.querySelector("[data-view-name]").value.trim();if(!V)return;const oe=se();oe.push({name:V,selected:[...o],query:l,status:r,sort:d,descending:c,zoom:p,from:v,days:m,rangeStart:w,rangeEnd:k,expanded:h,children:u,loose:f,colorFirst:g,onlyScheduled:a});try{localStorage.setItem(U,JSON.stringify(oe)),T.hidden=!0,L("视图已保存")}catch{L("浏览器存储不可用,视图未保存")}}S==="schedule"&&(T.hidden=!0,A.hidden=!0)},{signal:q}),N.addEventListener("input",W=>{const Q=W.target;Q.classList.contains("ps-zoom")&&(p=Number(Q.value),M()),Q.classList.contains("ps-person-search")&&T.querySelectorAll(".ps-person-options label").forEach(ae=>{var S;return ae.hidden=!((S=ae.textContent)!=null&&S.includes(Q.value))}),Q.dataset.control==="query"&&(l=Q.value,M())},{signal:q}),N.addEventListener("change",W=>{const Q=W.target;if(Q.dataset.person&&(Q.checked?o.add(Q.dataset.person):o.delete(Q.dataset.person),M()),Q.dataset.estimate){const ae=Number(Q.value);Number.isFinite(ae)&&ae>=0&&me(Q.dataset.estimate,{estimate:ae});return}switch(Q.dataset.control){case"only":a=Q.checked;break;case"sort":d=Q.value;break;case"status":r=Q.value;break;case"expanded":h=Q.checked;break;case"children":u=Q.checked;break;case"range-start":Q.value&&(w=Q.value,fe(),te());return;case"range-end":Q.value&&(k=Q.value,fe(),te());return}M()},{signal:q}),A.addEventListener("submit",W=>{W.preventDefault();const Q=new FormData(W.target),ae=String(Q.get("start")||"")||null,S=String(Q.get("end")||"")||null;if(!!ae!=!!S||ae&&S&&ae>S){A.querySelector(".ps-error").textContent="请填写完整日期,结束日期不能早于开始日期";return}me(A.dataset.item,{name:String(Q.get("name")),personId:String(Q.get("personId")),estimate:Number(Q.get("estimate")),start:ae,end:S}),A.hidden=!0,L("排期已更新")},{signal:q}),document.addEventListener("pointerdown",W=>{N.contains(W.target)?!T.contains(W.target)&&!W.target.closest("[data-action]")&&(T.hidden=!0):T.hidden=!0},{signal:q}),N.addEventListener("keydown",W=>{W.key==="Escape"&&(T.hidden=!0,A.hidden=!0)},{signal:q});let Z=null;return x.addEventListener("pointerdown",W=>{const Q=W.target,ae=Q.closest(".ps-bar");if(!ae||W.button!==0)return;const S=n.find(V=>V.id===ae.dataset.item);b=!1,Z={id:S.id,x:W.clientX,start:Ae(S.start),end:Ae(S.end),edge:Q.dataset.edge||"move",bar:ae,left:parseFloat(ae.style.left),size:parseFloat(ae.style.width),delta:0,scroll:G.scrollLeft}},{signal:q}),document.addEventListener("pointermove",W=>{if(!Z)return;const Q=Math.round((W.clientX-Z.x+G.scrollLeft-Z.scroll)/P());Z.delta=Z.edge==="start"?Math.min(Q,Z.end-Z.start):Z.edge==="end"?Math.max(Q,Z.start-Z.end):Q,Math.abs(W.clientX-Z.x)>4&&(b=!0),b&&(Z.bar.style.opacity=".8",Z.edge==="move"?Z.bar.style.transform=`translateX(${Z.delta*P()}px)`:(Z.bar.style.left=`${Z.left+(Z.edge==="start"?Z.delta*P():0)}px`,Z.bar.style.width=`${Z.size+(Z.edge==="start"?-1:1)*Z.delta*P()}px`))},{signal:q}),document.addEventListener("pointerup",()=>{if(!Z)return;const W=Z;Z=null,b&&(me(W.id,{start:qe(W.start+(W.edge==="end"?0:W.delta)),end:qe(W.end+(W.edge==="start"?0:W.delta))}),L("排期已更新"))},{signal:q}),e.initialRange?be(e.initialRange):M(),{setRange:be,onInteraction:I.onInteraction,setData(W,Q){dn(W,Q),t=structuredClone(W),n=structuredClone(Q),o=new Set(t.map(ae=>ae.id)),T.hidden=!0,A.hidden=!0,M()},getItems:()=>structuredClone(n),updateItem:me,setPeople(W){o=new Set(W.filter(Q=>t.some(ae=>ae.id===Q))),M()},destroy(){C=!0,H.abort(),clearTimeout(R),I.destroy(),N.remove()}}}const xi={pencil:'<path d="m15 3 6 6-12 12H3v-6ZM13 5l6 6"/>',transition:'<path d="M4 8h14l-4-4m4 4-4 4M20 16H6l4-4m-4 4 4 4"/>',expand:'<path d="M15 3h6v6m0-6-7 7M9 21H3v-6m0 6 7-7"/>',check:'<circle cx="12" cy="12" r="8"/><path d="m8 12 3 3 5-6"/>',plus:'<circle cx="12" cy="12" r="9"/><path d="M12 7v10M7 12h10"/>',add:'<path d="M12 4v16M4 12h16"/>',close:'<path d="m6 6 12 12M6 18 18 6"/>',back:'<path d="m15 18-6-6 6-6"/>',filter:'<path d="M3 4h18l-7 8v7l-4 2v-9Z"/>',sort:'<path d="M4 5h16M4 11h11M4 17h6"/>',group:'<path d="m3 13 10-10h8v8L11 21Z"/><circle cx="17" cy="7" r="1"/>',color:'<path d="m10 3 10 10-8 8L2 11Z M4 13h14M10 3 7 0"/><path d="M21 17q4 5 0 5q-4 0 0-5"/>',search:'<circle cx="10" cy="10" r="6"/><path d="m15 15 6 6M2 3h5M2 9h2M2 16h5"/>',save:'<path d="M4 3h13l4 4v14H3V3h1ZM8 3v7h8V3M7 21v-7h10v7"/>',down:'<path d="m6 9 6 6 6-6"/>',up:'<path d="m6 15 6-6 6 6"/>',link:'<path d="m10 14 4-4M8 16l-1 1a4 4 0 0 1-6-6l5-5a4 4 0 0 1 6 0M16 8l1-1a4 4 0 0 1 6 6l-5 5a4 4 0 0 1-6 0"/>',edit:'<rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><path d="M14 17h8m-4-4v8"/>',book:'<path d="M6 3h12v18l-6-4-6 4Z"/>',people:'<circle cx="9" cy="8" r="3"/><path d="M3 21v-3a6 6 0 0 1 12 0v3ZM17 4a3 3 0 0 1 0 6M18 14q4 1 4 7"/>',table:'<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 9h18M3 14h18M9 9v11M15 9v11"/>',chart:'<circle cx="12" cy="12" r="9"/><path d="M12 3v9h9"/>',menu:'<path d="M4 6h16M4 12h12M4 18h16"/>',more:'<circle cx="5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/>',inbox:'<path d="m5 4-3 10v6h20v-6L19 4ZM2 14h6l2 3h4l2-3h6"/>'},Re=s=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${xi[s]||xi.check}</svg>`,Ie=(s,e,t="",n="")=>`<button type="button" data-action="${s}" class="${n}" aria-label="${D(e)}">${t?Re(t):""}${e?`<span>${D(e)}</span>`:""}</button>`,Wt=(s,e,t="")=>`<select ${t}>${s.map(([n,i])=>`<option value="${D(n)}" ${n===e?"selected":""}>${D(i)}</option>`).join("")}</select>`;function Ra(s){var c,p;const e=s.detail,t=new Set(s.nodes.filter(h=>h.hiddenReason).map(h=>h.id));for(const h of(e==null?void 0:e.tags)??[])h.enabled===!1&&((c=h.nodeIds)==null||c.forEach(u=>t.add(u)));for(const h of(e==null?void 0:e.switches)??[])h.checked||(p=h.nodeIds)==null||p.forEach(u=>t.add(u));const n=s.nodes.filter(h=>!t.has(h.id)),i=new Set(n.map(h=>h.id)),o=(e==null?void 0:e.connections)??La(s),a=(h,u=new Set)=>u.has(h)?[]:(u.add(h),i.has(h)?[h]:(o[h]??[]).flatMap(f=>a(f,new Set(u)))),l=n.flatMap(h=>[...new Set((o[h.id]??[]).flatMap(u=>a(u)))].map(u=>({from:h.id,to:u}))),r=(h,u,f,g=new Set)=>h===u?!0:g.has(h)?!1:(g.add(h),l.some(v=>v!==f&&v.from===h&&r(v.to,u,f,g))),d=l.filter(h=>!r(h.from,h.to,h));return{controls:{roles:(e==null?void 0:e.tags)??[],switches:(e==null?void 0:e.switches)??[]},graph:{nodes:n,edges:d},nodeList:n,node:h=>{var f,g,v;const u=(f=e==null?void 0:e.nodes)==null?void 0:f[h.id];return{data:h,form:((g=h.form)==null?void 0:g.filter(m=>{var w,k;return!m.visibleWhen||((k=(w=h.form)==null?void 0:w.find(C=>C.id===m.visibleWhen.fieldId))==null?void 0:k.value)===m.visibleWhen.value}))??[],fields:(u==null?void 0:u.fields)??(e==null?void 0:e.fields)??[{key:"owner",label:"负责人"},{key:"schedule",label:"总排期"}],sections:(u==null?void 0:u.sections)??((v=h.form)!=null&&v.length?["form","tasks"]:["tasks"]),completeLabel:(u==null?void 0:u.completeLabel)??"完成",deletable:(u==null?void 0:u.deletable)!==!1}}}}function La(s){const e=[];for(const t of s.groups){const n=s.nodes.filter(i=>i.groupId===t.id);t.layout==="parallel"?e.push(n):e.push(...n.map(i=>[i]))}return e.push(...s.nodes.filter(t=>!s.groups.some(n=>n.id===t.groupId)).map(t=>[t])),Object.fromEntries(e.flatMap((t,n)=>t.map(i=>{var o;return[i.id,((o=e[n+1])==null?void 0:o.map(a=>a.id))??[]]})))}function Ta(s){const e=new Map(s.nodes.map(l=>[l.id,0]));for(let l=0;l<s.nodes.length;l++){let r=!1;for(const d of s.edges){const c=Math.min(s.nodes.length-1,(e.get(d.from)??0)+1);(e.get(d.to)??0)<c&&(e.set(d.to,c),r=!0)}if(!r)break}const t=[...new Set(e.values())].sort((l,r)=>l-r).map(l=>s.nodes.filter(r=>e.get(r.id)===l));let n=64;const i=t.flatMap(l=>{const r=Math.max(...l.map(c=>Math.max(55,c.name.length*13+27))),d=l.map((c,p)=>({node:c,x:n,y:196+(p-(l.length-1)/2)*40,width:r}));return n+=r+48,d}),o=new Map(i.map(l=>[l.node.id,l])),a=s.edges.flatMap(l=>{const r=o.get(l.from),d=o.get(l.to);if(!r||!d)return[];const c=r.x+r.width,p=r.y+14,h=d.y+14;return[`M ${c} ${p} C ${c+24} ${p} ${d.x-24} ${h} ${d.x} ${h}`]});return{nodes:i,paths:a,width:n+16}}const Oe=s=>`<svg class="wf-icon" viewBox="0 0 16 16" aria-hidden="true">${{caret:'<path d="M13.706 6.437 8.503 12.421a.667.667 0 0 1-1.006 0L2.293 6.437a.667.667 0 0 1 .503-1.104h10.407a.667.667 0 0 1 .503 1.104Z" fill="currentColor"/>',chevron:'<path d="m4 6 4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5"/>',more:'<g fill="currentColor"><circle cx="3" cy="8" r="1.5"/><circle cx="8" cy="8" r="1.5"/><circle cx="13" cy="8" r="1.5"/></g>',expand:'<path d="M6 2H2v4m8-4h4v4M2 10v4h4m8-4v4h-4" fill="none" stroke="currentColor" stroke-width="1.3"/>',filter:'<path d="M2 3h12L9 8v5l-2-1V8Z" fill="none" stroke="currentColor" stroke-width="1.3"/>',list:'<path d="M6 4h8M6 8h8M6 12h8M2 4h1M2 8h1M2 12h1" stroke="currentColor" stroke-width="1.4"/>',detail:'<rect x="2" y="2" width="12" height="12" rx="2" fill="none" stroke="currentColor"/><path d="M5 6h6M5 9h6" stroke="currentColor"/>',plus:'<path d="M8 2v12M2 8h12" stroke="currentColor" stroke-width="1.5"/>'}[s]}</svg>`,cn={pending:"未开始",inProgress:"进行中",done:"已完成",failed:"未通过"},ki={estimate:"填写估分","group-chat":"节点建群","delete-node":"删除节点"};function Na(s){var ce,xe;let e={...s},t=s.flow,n=t.detail,i=!1,o=!1,a=0;const l=new Map,r=document.createElement("section");r.className="workitem-module-detail-workflow rv-workflow-detail",r.dataset.module="detail:workflow";const d=document.createElement("section");d.className="workflow-node-details rv-workflow-detail",d.dataset.module="detail:tabs:schedule";const c=new AbortController;let p=s.selectedNodeId??((ce=t.nodes.find(F=>F.status==="inProgress"))==null?void 0:ce.id)??((xe=t.nodes[0])==null?void 0:xe.id)??"";const h=new Set([p]);let u="details",f="",g=1;const v=new Set,m=new Set,w=new Set,k=new Map,C=F=>t.nodes.find(B=>B.id===F),b=F=>{var B,_,Y;return((Y=(_=(B=e.context)==null?void 0:B.people)==null?void 0:_.find(X=>X.id===F))==null?void 0:Y.name)??F??""},N=F=>`<i class="wf-dot ${F.status}" aria-hidden="true"></i>`,I=F=>`${N(F)}<strong>${D(F.name)}</strong><span class="wf-status ${F.status}">${cn[F.status]}</span>`,E=()=>Ra(t);function G(F,B,_){var X;const Y=e.onCommand||(F==="configure"?e.onFlowChange:F==="action"?e.onAction:F==="create-task"?e.onCreateTask||e.onChange:F==="delete"?e.onDelete:F==="complete"&&e.onComplete||e.onChange);return!i&&!o&&!e.readonly&&!!Y&&((X=e.can)==null?void 0:X.call(e,F,B,_))!==!1}function x(F){var B;if(F.type==="delete-node")return"delete";if(F.type==="update-flow")return"configure";if(F.type==="action")return F.actionId==="__create-task"?"create-task":"action";if(F.patch.status)return"complete";if(F.patch.tasks){const _=C(F.nodeId);return F.patch.tasks.length>(((B=_==null?void 0:_.tasks)==null?void 0:B.length)??0)?"create-task":"toggle-task"}return"edit"}function T(F){var _,Y,X,ee;const B={flow:t,signal:c.signal};return e.onCommand?e.onCommand(F,B):F.type==="delete-node"?(_=e.onDelete)==null?void 0:_.call(e,F.nodeId,B):F.type==="update-flow"?(Y=e.onFlowChange)==null?void 0:Y.call(e,F.detail,B):F.type==="action"?F.actionId==="__create-task"&&e.onCreateTask?e.onCreateTask(F.nodeId,B):(X=e.onAction)==null?void 0:X.call(e,F.nodeId,F.actionId,B):F.patch.status==="done"&&e.onComplete?e.onComplete(F.nodeId,B):(ee=e.onChange)==null?void 0:ee.call(e,F.nodeId,F.patch,F.detail,B)}async function A(F){var ie;const B="nodeId"in F?C(F.nodeId):void 0,_=F.type==="action"?F.actionId:F.type==="update-node"?Object.keys(F.patch)[0]:void 0,Y=F.type!=="update-node"||Object.keys(F.patch).every(J=>G(x({...F,patch:{[J]:F.patch[J]}}),B,J)),X=F.type!=="update-node"||[...(F.patch.form??[]).filter(J=>{var ne,he;return J.value!==((he=(ne=B==null?void 0:B.form)==null?void 0:ne.find(pe=>pe.id===J.id))==null?void 0:he.value)}),...(F.patch.fields??[]).filter(J=>{var ne,he;return J.value!==((he=(ne=B==null?void 0:B.fields)==null?void 0:ne.find(pe=>pe.id===J.id))==null?void 0:he.value)})].every(J=>{var ne,he,pe;return((ne=e.can)==null?void 0:ne.call(e,"edit",B,J.id))!==!1&&!((pe=(he=B==null?void 0:B.fields)==null?void 0:he.find(Se=>Se.id===J.id))!=null&&pe.readonly)});if(!G(x(F),B,_)||!Y||!X||F.type==="delete-node"&&B&&!E().node(B).deletable)return i||Ee(),!1;const ee=a;o=!0,r.querySelectorAll(".wf-error").forEach(J=>J.remove()),P(r),P(d);let re,le=!1;try{const J=T(F),ne=J instanceof Promise?await J:J;return i?!1:(ne&&a===ee&&(t=ne,n=ne.detail,a++),!0)}catch(J){return re=J,le=!0,!1}finally{if(o=!1,!i&&(Ee(),le)){const J=document.createElement("p");J.className="wf-error",J.role="alert",J.textContent=re instanceof Error?re.message:"保存失败,请重试",r.querySelector(".wf-card-area").prepend(J),(ie=e.onError)==null||ie.call(e,re,F)}}}function H(F){var B;(B=l.get(F))==null||B.forEach(_=>_()),l.delete(F)}function q(F,B){return{node:F,surface:B===r?"selected":"list",readonly:!G("edit",F),pending:o,signal:c.signal,context:e.context??{currentUser:e.currentUser,workItems:e.workItems},can:(_,Y)=>G(_,F,Y),commit:(_,Y="更新节点字段")=>U(F,_,Y),action:_=>A({type:"action",nodeId:F.id,actionId:_})}}function R(F){const B=[];l.set(F,B),F.querySelectorAll("[data-node]").forEach(_=>{var ie,J;const Y=C(_.dataset.node);if(!Y)return;const X=q(Y,F);e.renderTaskField&&_.querySelectorAll("[data-task-cell]").forEach(ne=>{var ke,ve;const he=(ke=Y.tasks)==null?void 0:ke.find(Ne=>Ne.id===ne.dataset.taskCell),pe=(ve=e.taskColumns)==null?void 0:ve.call(e,Y).find(Ne=>Ne.key===ne.dataset.taskColumn);if(!he||!pe)return;const Se=e.renderTaskField(ne,he,pe,X);Se&&B.push(Se)}),e.renderTaskActions&&_.querySelectorAll("[data-task-actions]").forEach(ne=>{var Se;const he=(Se=Y.tasks)==null?void 0:Se.find(ke=>ke.id===ne.dataset.taskActions);if(!he)return;const pe=e.renderTaskActions(ne,he,X);pe&&B.push(pe)});const ee=(F===r?"selected:":"list:")+Y.id;if(m.has(ee)){const ne=_.querySelector(".wf-card-body"),he=_.querySelector(".wf-node-schedule");ne&&(ne.hidden=!0),he&&(he.hidden=!0),(ie=_.querySelector('[data-wf="collapse-card"]'))==null||ie.setAttribute("aria-expanded","false")}if(w.has(ee)){const ne=_.querySelector(".wf-task-table");ne&&(ne.hidden=!0),(J=_.querySelector('[data-wf="toggle-tasks"]'))==null||J.setAttribute("aria-expanded","false")}const re=_.querySelector("[data-node-fields-slot]");if(re&&e.renderNodeFields){const ne=e.renderNodeFields(Y,re,X);ne&&B.push(ne)}const le=_.querySelector("[data-node-form-slot]");if(le&&e.renderNodeForm){const ne=e.renderNodeForm(Y,le,X);ne&&B.push(ne)}if(e.renderField&&_.querySelectorAll("[data-field-slot]").forEach(ne=>{var Se;const he=[...E().node(Y).form,...Y.fields??[]].find(ke=>ke.id===ne.dataset.fieldSlot);if(!he)return;const pe=e.renderField(ne,he,{...X,readonly:X.readonly||((Se=e.can)==null?void 0:Se.call(e,"edit",Y,he.id))===!1||"readonly"in he&&!!he.readonly});pe&&B.push(pe)}),e.renderSystemField&&_.querySelectorAll("[data-system-slot]").forEach(ne=>{var Se;const he=E().node(Y).fields.find(ke=>ke.key===ne.dataset.systemSlot);if(!he)return;const pe=e.renderSystemField(ne,he,{...X,readonly:X.readonly||((Se=e.can)==null?void 0:Se.call(e,"edit",Y,he.key))===!1});pe&&B.push(pe)}),e.renderActions){const ne=_.querySelector("[data-actions-slot]");if(ne){const he=e.renderActions(ne,Y.buttons??[],X);he&&B.push(he)}}}),P(F)}function P(F){F.setAttribute("aria-busy",String(o)),F.querySelectorAll("input,button,select").forEach(B=>{var re,le,ie;const _=C(((re=B.closest("[data-node]"))==null?void 0:re.dataset.node)??""),Y=B.dataset.wf;let X,ee;(B.dataset.field||B.dataset.form||B.dataset.nodeField||Y==="edit-reference"||Y==="estimate")&&(X="edit",ee=B.dataset.field??B.dataset.form??B.dataset.nodeField??B.dataset.referenceField??"estimate"),B.dataset.task&&(X="toggle-task"),Y==="add-task"&&(X="create-task"),Y==="complete"&&(X="complete"),(Y==="delete-node"||Y==="confirm-delete")&&(X="delete"),(B.dataset.switch||B.dataset.removeTag)&&(X="configure"),(B.dataset.action||Y==="group-chat")&&(X="action",ee=B.dataset.action??Y),X&&(B.disabled=!G(X,_,ee)||X==="delete"&&!!_&&!E().node(_).deletable||!!B.dataset.nodeField&&!!((ie=(le=_==null?void 0:_.fields)==null?void 0:le.find(J=>J.id===B.dataset.nodeField))!=null&&ie.readonly))})}function L(F){var B;return!((B=F.fields)!=null&&B.length)||e.renderNodeForm?"":'<div class="wf-node-form"><div class="wf-form-fields">'+F.fields.map(_=>e.renderField?'<div data-field-slot="'+D(_.id)+'"></div>':"<label><span>"+D(_.label)+'</span><input data-node-field="'+D(_.id)+'" aria-label="'+D(_.label)+'" value="'+D(_.value??"")+'"></label>').join("")+"</div></div>"}function M(F,B){return e.renderActions?B==="inline"?"<span data-actions-slot></span>":"":(F.buttons??[]).filter(_=>(_.placement??"inline")===B).map(_=>'<button type="button" data-action="'+D(_.id)+'" class="wf-custom-action '+D(_.variant??"normal")+'" title="'+D(_.hint??"")+'">'+D(_.label)+"</button>").join("")}function $(F,B){var At,$t;const _=`${B}:${F.id}`,Y=F.tasks??[],X=k.get(_)??0,ee=Y.filter(we=>{var de;return X===2?!we.done:X===3?we.done:X===1?we.owner===(((de=e.context)==null?void 0:de.currentUser)??e.currentUser??"体验官"):!0}),re=((At=e.taskColumns)==null?void 0:At.call(e,F))??[],le=[{key:"name",label:"名称",width:250},{key:"owner",label:"当前负责人",width:150},{key:"deliverable",label:"交付物",expanded:!0},{key:"estimate",label:"估分"},{key:"schedule",label:"排期",width:190}],ie=e.taskColumnsMode==="replace"?re:[...le.filter(we=>!re.some(de=>de.key===we.key)),...re],J=we=>we.expanded??!["name","owner","estimate","actual","schedule","dependency"].includes(we.key),ne=(($t=e.taskCanExpand)==null?void 0:$t.call(e,F))??(re.some(J)||Y.some(we=>!!we.deliverable)),he=ne&&v.has(_),pe=he?ie.filter(J):[],Se=he?ie.filter(we=>!J(we)&&!("hideWhenExpanded"in we&&we.hideWhenExpanded)):ie,ke=' style="grid-template-columns:'+Se.map(we=>we.key==="name"?"minmax(250px,1fr)":Math.max(80,we.width??140)+"px").join(" ")+";min-width:"+Se.reduce((we,de)=>we+(de.width??(de.key==="name"?250:140)),0)+'px"',ve=(we,de)=>String(we[de]??""),Ne=(we,de)=>{if(de==="name")return`<label><input type="checkbox" data-task="${D(we.id)}" aria-label="完成任务:${D(we.name)}" ${we.done?"checked":""}><span title="${D(we.name)}">${D(we.name)}</span>${he&&we.done?'<b class="wf-task-status">已完成</b>':""}${e.renderTaskActions?`<span class="wf-task-actions" data-task-actions="${D(we.id)}"></span>`:""}</label>`;if(re.some(dt=>dt.key===de))return`<div class="wf-task-value" data-task-cell="${D(we.id)}" data-task-column="${D(de)}"></div>`;const Te=de==="owner"?b(ve(we,de)):ve(we,de);return`<span class="${de==="deliverable"?"wf-task-deliverable":""}" title="${D(Te||"暂无")}">${D(Te||(he?"待填":"暂无"))}</span>`},st=ee.map(we=>`<div class="wf-task-row"${ke}>${Se.map(de=>Ne(we,de.key)).join("")}</div>${pe.length?`<div class="wf-task-details" data-task-details="${D(we.id)}">${pe.map(de=>`<div class="wf-task-detail"><span class="wf-task-detail-label">${D(de.label)}</span>${Ne(we,de.key)}</div>`).join("")}</div>`:""}`).join("");return`<section class="wf-tasks" data-module="node:task"><div class="wf-section-head"><div class="wf-task-title"><button type="button" data-wf="toggle-tasks" aria-label="折叠任务" aria-expanded="true"><span class="wf-caret">${Oe("caret")}</span></button><button type="button" data-wf="task-filter">${["全部任务","我参与的","未完成","已完成"][X]} (${Y.filter(we=>we.done).length}/${Y.length}) ${Oe("chevron")}</button></div>${ne?`<button type="button" data-wf="expand-tasks">${Oe(he?"list":"expand")} ${he?"列表模式":"展开模式"}</button>`:""}</div><div class="wf-task-table ${he?"is-expanded":""}"><div class="wf-task-row wf-task-heading"${ke}>${Se.map(we=>`<span>${D(he?we.expandedLabel??we.label:we.label)}</span>`).join("")}</div>${st}<button type="button" class="wf-add-task" data-wf="add-task">${Oe("plus")} 新增任务</button></div></section>`}function z(F){return e.renderNodeFields?'<div class="wf-fields" data-module="node:schedule" data-node-fields-slot></div>':'<div class="wf-fields" data-module="node:schedule">'+E().node(F).fields.map(B=>{var ee;const _=F[B.key]??"",Y=(ee=e.context)==null?void 0:ee.people,X=e.renderSystemField?'<span data-system-slot="'+B.key+'"></span>':B.key==="owner"&&Y?'<select data-field="owner" aria-label="'+D(B.label)+'"><option value="">待填</option>'+(_&&!Y.some(re=>re.id===_)?'<option selected value="'+D(_)+'">'+D(_)+"</option>":"")+Y.map(re=>'<option value="'+D(re.id)+'"'+(re.id===_?" selected":"")+">"+D(re.name)+"</option>").join("")+"</select>":'<input data-field="'+B.key+'" aria-label="'+D(B.label)+'" placeholder="待填" value="'+D(_)+'">';return'<label class="wf-field-'+B.key+'"><span>'+D(B.label)+"</span>"+X+"</label>"}).join("")+"</div>"}function j(F){if(e.renderNodeForm)return'<details class="wf-node-form" data-module="node:form" open><summary><span class="wf-caret">'+Oe("caret")+'</span>节点表单</summary><div class="wf-form-fields" data-node-form-slot></div></details>';const B=E().node(F).form;return B.length?`<details class="wf-node-form" data-module="node:form" open><summary><span class="wf-caret">${Oe("caret")}</span>节点表单</summary><div class="wf-form-fields">${B.map(_=>`<div class="wf-form-row"><label><span>${D(_.label)}${_.required?"<b> *</b>":""}</span>${e.renderField?`<span data-field-slot="${D(_.id)}"></span>`:_.control==="workItemSelect"?`<button type="button" class="wf-reference-field ${_.value?"":"is-empty"}" data-wf="edit-reference" data-reference-field="${D(_.id)}" aria-label="${D(_.label)}"><span>${_.value?_.value.split(",").map(Y=>{var X,ee,re;return D(((re=(ee=((X=e.context)==null?void 0:X.workItems)??e.workItems)==null?void 0:ee.find(le=>le.id===Y))==null?void 0:re.name)??Y)}).join("、"):"待填"}</span>${Oe("chevron")}</button>`:_.type==="select"?`<select data-form="${D(_.id)}" aria-label="${D(_.label)}"><option value="">待填</option>${(_.options??[]).map(Y=>`<option ${Y===_.value?"selected":""}>${D(Y)}</option>`).join("")}</select>`:`<input data-form="${D(_.id)}" type="${_.type==="date"?"date":_.type==="number"?"number":"text"}" aria-label="${D(_.label)}" placeholder="待填" value="${D(_.value||"")}">`}</label></div>`).join("")}</div></details>`:""}function te(F,B){return B?"":`<div class="wf-card-actions" data-module="node:button-group">${F.status==="inProgress"?`<button type="button" class="wf-complete" data-wf="complete">${D(E().node(F).completeLabel)}</button>`:`<span class="wf-state-hint">${cn[F.status]}</span>`}${M(F,"inline")}<button type="button" data-wf="more" class="wf-more" aria-label="节点更多操作" aria-expanded="false">${Oe("more")}</button></div>`}function ue(F,B=!1,_="selected",Y=!1){const X=E().node(F),ee=Y||B?"":X.sections.map(re=>re==="form"?j(F):$(F,_)).join("");return`<article class="wf-card${Y?" is-collapsed":""}" data-module="workflow:node" data-surface="${_}" data-node="${D(F.id)}"><div class="wf-node-basic" data-module="node:basic"><header class="wf-card-head"><button type="button" class="wf-card-title" data-wf="${Y?"expand-card":"collapse-card"}" aria-expanded="${!Y}"><span class="wf-caret">${Oe("caret")}</span>${I(F)}</button>${te(F,B)}</header><div class="wf-node-schedule">${z(F)}</div></div>${Y||B?"":`<div class="wf-card-body wf-node-sections">${L(F)}${ee}</div>`}</article>`}function ge(){r.querySelector(".wf-meta").innerHTML=`<div class="wf-roles">${((n==null?void 0:n.tags)??[]).filter(F=>F.enabled!==!1).map(F=>`<span class="wf-role" style="background:${D(F.color||"#eff0f1")}">${D(F.label)}<button type="button" data-remove-tag="${D(F.id)}" aria-label="移除${D(F.label)}">×</button></span>`).join("")}</div>${n!=null&&n.tags.length&&n.switches.length?'<i class="wf-meta-divider"></i>':""}${((n==null?void 0:n.switches)??[]).map(F=>`<label class="wf-switch"><input type="checkbox" data-switch="${D(F.id)}" ${F.checked?"checked":""}>${D(F.label)}</label>`).join("")}`,P(r)}function be(){const F=r.querySelector(".wf-canvas-viewport"),B=F.scrollLeft,{nodes:_,paths:Y,width:X}=Ta(E().graph);F.innerHTML=`<div class="wf-graph-size" style="width:${X*g}px;height:${420*g}px"><div class="wf-graph" style="width:${X}px;transform:scale(${g})"><svg width="${X}" height="420" aria-hidden="true">${Y.map(ee=>`<path d="${ee}"/>`).join("")}</svg>${_.map(({node:ee,x:re,y:le,width:ie})=>`<button type="button" class="wf-node ${ee.id===p?"is-selected":""}" data-select-node="${D(ee.id)}" aria-pressed="${ee.id===p}" style="left:${re}px;top:${le}px;width:${ie}px">${N(ee)}<span>${D(ee.name)}</span></button>`).join("")}</div></div>`,F.scrollLeft=B}function fe(){H(r);const F=C(p);r.querySelector(".wf-card-area").innerHTML=F?ue(F):'<p class="wf-empty">暂无节点</p>',R(r)}function me(){H(d),d.querySelector(".wf-list-toolbar")||(d.innerHTML=`<div class="wf-list-toolbar"><div class="wf-filter-wrap"><button type="button" data-wf="filter" class="wf-filter-button" aria-haspopup="dialog" aria-expanded="false"></button><div class="wf-filter-menu" hidden><label>节点状态<select data-status-filter aria-label="筛选节点状态"><option value="">全部状态</option>${Object.entries(cn).map(([F,B])=>`<option value="${F}">${B}</option>`).join("")}</select></label></div></div><div class="wf-views" role="tablist" aria-label="节点视图"><button type="button" role="tab" data-view="details">${Oe("detail")} 节点详情</button><button type="button" role="tab" data-view="schedule">${Oe("list")} 排期信息</button></div></div><div class="wf-list-rows"></div>`),d.querySelector('[data-wf="filter"]').innerHTML=`${Oe("filter")} ${D(e.filterLabel||"筛选")} ${Oe("chevron")}`,d.querySelectorAll("[data-view]").forEach(F=>F.setAttribute("aria-selected",String(u===F.dataset.view))),d.querySelector(".wf-list-rows").innerHTML=E().nodeList.filter(F=>{var B;return(!f||F.status===f)&&((B=e.filterNode)==null?void 0:B.call(e,F))!==!1}).map(F=>ue(F,u==="schedule","list",!h.has(F.id)||u==="schedule")).join("")||'<p class="wf-empty">暂无匹配节点</p>',R(d)}function Ee(){var F;E().graph.nodes.some(B=>B.id===p)||(p=((F=E().graph.nodes[0])==null?void 0:F.id)??""),ge(),be(),fe(),me()}function Me(F){var B;i||!E().graph.nodes.some(_=>_.id===F)||(p=F,(B=e.onSelectNode)==null||B.call(e,F),be(),fe())}function U(F,B,_){return A({type:"update-node",nodeId:F.id,patch:B,detail:_})}function se(F,B,_,Y){var le;(le=F.querySelector(".wf-inline-editor"))==null||le.remove();const X=document.createElement("div");X.className="wf-inline-editor",X.innerHTML=`<input aria-label="${D(B)}" placeholder="${D(B)}" value="${D(_)}"><button type="button" data-save>保存</button><button type="button" data-cancel>取消</button>`,F.append(X);const ee=X.querySelector("input"),re=()=>{ee.value.trim()?Y(ee.value.trim()):ee.focus()};X.querySelector("[data-save]").addEventListener("click",re),X.querySelector("[data-cancel]").addEventListener("click",()=>X.remove()),ee.addEventListener("keydown",ie=>{ie.key==="Enter"&&(ie.preventDefault(),re()),ie.key==="Escape"&&X.remove()}),ee.focus()}function Z(F,B,_){var J,ne,he,pe;const Y=(J=B.form)==null?void 0:J.find(Se=>Se.id===_);if(!Y)return;(ne=F.querySelector(".wf-reference-picker"))==null||ne.remove();const X=new Set(((he=Y.value)==null?void 0:he.split(",").filter(Boolean))??[]),ee=document.createElement("div");ee.className="wf-reference-picker",ee.setAttribute("role","dialog"),ee.setAttribute("aria-label",`选择${Y.label}`),ee.innerHTML='<input aria-label="查找工作项" placeholder="搜索工作项"><div class="wf-reference-options"></div><footer><button type="button" data-cancel>取消</button><button type="button" data-save>确定</button></footer>',(pe=Array.from(F.querySelectorAll("[data-reference-field]")).find(Se=>Se.dataset.referenceField===_))==null||pe.after(ee);const re=ee.querySelector("input"),le=ee.querySelector(".wf-reference-options"),ie=()=>{var ke;const Se=(((ke=e.context)==null?void 0:ke.workItems)??e.workItems??[]).filter(ve=>ve.name.includes(re.value)).slice(0,50);le.innerHTML=Se.map(ve=>`<label><input type="checkbox" value="${D(ve.id)}" ${X.has(ve.id)?"checked":""}><span>${D(ve.name)}</span></label>`).join("")||"<p>暂无匹配工作项</p>"};le.addEventListener("change",Se=>{const ke=Se.target;ke.checked?X.add(ke.value):X.delete(ke.value)}),re.addEventListener("input",ie),ee.querySelector("[data-cancel]").addEventListener("click",()=>ee.remove()),ee.querySelector("[data-save]").addEventListener("click",()=>{var Se;return U(B,{form:(Se=B.form)==null?void 0:Se.map(ke=>ke.id===_?{...ke,value:[...X].join(",")}:ke)},`更新${Y.label}`)}),ee.addEventListener("keydown",Se=>{Se.key==="Escape"&&ee.remove()}),ie(),re.focus()}function W(F,B){var ee,re,le,ie;const _=[...E().node(F).form,...F.fields??[]].find(J=>{var ne;return J.required&&!((ne=J.value)!=null&&ne.trim())}),Y=(ee=F.tasks)==null?void 0:ee.find(J=>J.blocking&&!J.done);(re=B.querySelector(".wf-error"))==null||re.remove();const X=(le=F.gates)==null?void 0:le.find(J=>!J.met);if(_||Y||X){const J=document.createElement("p");J.className="wf-error",J.role="alert",J.textContent=_?`请先填写${_.label}`:Y?`请先完成任务:${Y.name}`:X.label,(ie=B.querySelector(".wf-card-head"))==null||ie.after(J);return}U(F,{status:"done"},"完成节点")}function Q(F){var he,pe,Se,ke;const B=F.target;if(B.closest("button:disabled"))return;const _=B.closest("[data-action]");if(_){const ve=(he=_.closest("[data-node]"))==null?void 0:he.dataset.node;ve&&A({type:"action",nodeId:ve,actionId:_.dataset.action});return}const Y=B.closest("[data-select-node]");if(Y){Me(Y.dataset.selectNode);return}const X=B.closest("[data-view]");if(X){u=X.dataset.view,me();return}const ee=B.closest("[data-remove-tag]");if(ee&&n){A({type:"update-flow",detail:{...n,tags:n.tags.map(ve=>ve.id===ee.dataset.removeTag?{...ve,enabled:!1}:ve)}});return}const re=B.closest("[data-wf]");if(!re)return;const le=re.dataset.wf,ie=re.closest("[data-node]"),J=C((ie==null?void 0:ie.dataset.node)??p);if(le==="legend"){const ve=re.closest(".wf-legend-wrap");ve.classList.toggle("is-open"),re.setAttribute("aria-expanded",String(ve.classList.contains("is-open")));return}if(le==="filter"){if(e.onFilter)e.onFilter(re);else{const ve=d.querySelector(".wf-filter-menu");ve.hidden=!ve.hidden,re.setAttribute("aria-expanded",String(!ve.hidden))}return}if(!J||!ie)return;const ne=`${ie.dataset.surface??"list"}:${J.id}`;if(le==="edit-reference"){Z(ie,J,re.dataset.referenceField);return}if(le==="collapse-card")if(m.has(ne)?m.delete(ne):m.add(ne),d.contains(ie))h.delete(J.id),me();else{const ve=ie.querySelector(".wf-card-body");ve.hidden=!ve.hidden,ie.querySelector(".wf-node-schedule").hidden=ve.hidden,re.setAttribute("aria-expanded",String(!ve.hidden))}else if(le==="expand-card")m.delete(ne),h.add(J.id),me();else if(le==="toggle-tasks"){w.has(ne)?w.delete(ne):w.add(ne);const ve=ie.querySelector(".wf-task-table");ve.hidden=!ve.hidden,re.setAttribute("aria-expanded",String(!ve.hidden))}else if(le==="task-filter"){const ve=ie.querySelector(".wf-task-filter-menu");if(ve){ve.remove();return}re.insertAdjacentHTML("afterend",'<div class="wf-task-filter-menu" role="menu">'+["全部任务","我参与的","未完成","已完成"].map((Ne,st)=>`<button type="button" role="menuitem" data-wf="task-filter-option" data-task-filter="${st}">${Ne}</button>`).join("")+"</div>")}else if(le==="task-filter-option")k.set(ne,Number(re.dataset.taskFilter)),fe(),me();else if(le==="expand-tasks")v.has(ne)?v.delete(ne):v.add(ne),fe(),me();else if(le==="add-task"&&e.onCreateTask)A({type:"action",nodeId:J.id,actionId:"__create-task"});else if(le==="add-task")se(ie.querySelector(".wf-task-table"),"任务名称","",ve=>U(J,{tasks:[...J.tasks??[],{id:crypto.randomUUID(),name:ve,done:!1}]},"新增任务"));else if(le==="complete")W(J,ie);else if(le==="more"){const ve=ie.querySelector(".wf-menu");r.querySelectorAll(".wf-menu").forEach(Ne=>Ne.remove()),d.querySelectorAll(".wf-menu").forEach(Ne=>Ne.remove()),ve||ie.insertAdjacentHTML("beforeend",`<div class="wf-menu" role="menu">${((n==null?void 0:n.menu)??[]).map(Ne=>`<button type="button" role="menuitem" data-wf="${Ne}" ${Ne==="delete-node"&&!E().node(J).deletable?"disabled":""}>${Ne==="delete-node"&&!E().node(J).deletable?'<span title="流程配置不允许删除该节点">'+ki[Ne]+"</span>":ki[Ne]}</button>`).join("")}${M(J,"more")}</div>`),P(ie)}else le==="estimate"?((pe=ie.querySelector(".wf-menu"))==null||pe.remove(),se(ie,"节点估分",J.estimate??"",ve=>U(J,{estimate:ve},"填写估分"))):le==="group-chat"?A({type:"action",nodeId:J.id,actionId:"group-chat"}):le==="delete-node"?((Se=ie.querySelector(".wf-menu"))==null||Se.remove(),ie.insertAdjacentHTML("beforeend",'<div class="wf-delete-confirm" role="alertdialog" aria-label="删除节点"><span>删除此节点?</span><button type="button" data-wf="cancel-delete">取消</button><button type="button" data-wf="confirm-delete">删除</button></div>')):le==="cancel-delete"?(ke=ie.querySelector(".wf-delete-confirm"))==null||ke.remove():le==="confirm-delete"&&A({type:"delete-node",nodeId:J.id})}function ae(F){var Y,X,ee,re,le,ie,J;const B=F.target;if(!(B instanceof HTMLInputElement||B instanceof HTMLSelectElement)||B.closest("[data-node-fields-slot],[data-node-form-slot],[data-field-slot],[data-system-slot],[data-actions-slot],[data-task-cell]"))return;if(B.dataset.statusFilter!==void 0){f=B.value,me();return}if(B.dataset.switch&&n&&B instanceof HTMLInputElement){const ne=B.checked;A({type:"update-flow",detail:{...n,switches:n.switches.map(he=>he.id===B.dataset.switch?{...he,checked:ne}:he)}});return}const _=C(((Y=B.closest("[data-node]"))==null?void 0:Y.dataset.node)??"");if(_){if(B.dataset.nodeField){const ne=(X=_.fields)==null?void 0:X.find(he=>he.id===B.dataset.nodeField);if(ne!=null&&ne.readonly||((ee=e.can)==null?void 0:ee.call(e,"edit",_,B.dataset.nodeField))===!1){Ee();return}U(_,{fields:(re=_.fields)==null?void 0:re.map(he=>he.id===B.dataset.nodeField?{...he,value:B.value}:he)},"更新节点字段")}if(B.dataset.form&&((le=e.can)==null?void 0:le.call(e,"edit",_,B.dataset.form))===!1){Ee();return}B.dataset.field&&U(_,{[B.dataset.field]:B.value},`更新${B.ariaLabel}`),B.dataset.form&&U(_,{form:(ie=_.form)==null?void 0:ie.map(ne=>ne.id===B.dataset.form?{...ne,value:B.value}:ne)},"填写节点表单"),B.dataset.task&&B instanceof HTMLInputElement&&U(_,{tasks:(J=_.tasks)==null?void 0:J.map(ne=>ne.id===B.dataset.task?{...ne,done:B.checked}:ne)},"更新节点任务")}}r.innerHTML=`<div class="wf-workflow-graph" data-module="workflow:graph"><div class="wf-meta" data-module="workflow:graph:controls"></div><div class="wf-canvas" data-module="workflow:graph:canvas"><div class="wf-legend-wrap"><button type="button" class="wf-legend-trigger" data-wf="legend" aria-label="节点图例" aria-expanded="false">${Oe("list")}</button><div class="wf-legend" role="tooltip"><strong>节点图例</strong><span>○ 节点</span><span>◇ 里程碑</span><span>⊙ 含未完成子任务</span><span><i class="wf-dot pending"></i>未开始</span><span><i class="wf-dot inProgress"></i>进行中</span><span><i class="wf-dot done"></i>已完成</span></div></div><div class="wf-canvas-viewport" aria-label="节点流程图"></div></div></div><div class="wf-card-area" data-module="workflow:selected-node"></div>`;for(const F of[r,d])F.addEventListener("click",Q,{signal:c.signal}),F.addEventListener("change",ae,{signal:c.signal});document.addEventListener("pointerdown",F=>{F.target.closest(".wf-task-title")||(r.querySelectorAll(".wf-task-filter-menu").forEach(B=>B.remove()),d.querySelectorAll(".wf-task-filter-menu").forEach(B=>B.remove())),F.target.closest(".wf-menu,.wf-more")||(r.querySelectorAll(".wf-menu").forEach(B=>B.remove()),d.querySelectorAll(".wf-menu").forEach(B=>B.remove()))},{signal:c.signal});const S=r.querySelector(".wf-canvas-viewport");let V=null;S.addEventListener("pointerdown",F=>{F.target.closest("button")||(V={x:F.clientX,y:F.clientY,left:S.scrollLeft,top:S.scrollTop},S.setPointerCapture(F.pointerId))},{signal:c.signal}),S.addEventListener("pointermove",F=>{V&&(S.scrollLeft=V.left+V.x-F.clientX,S.scrollTop=V.top+V.y-F.clientY)},{signal:c.signal});const oe=()=>{V=null};return S.addEventListener("pointerup",oe,{signal:c.signal}),S.addEventListener("pointercancel",oe,{signal:c.signal}),S.addEventListener("wheel",F=>{(F.ctrlKey||F.metaKey)&&(F.preventDefault(),g=Math.max(.5,Math.min(1.5,g+(F.deltaY<0?.1:-.1))),be())},{passive:!1,signal:c.signal}),Ee(),{element:r,nodeListElement:d,renderNodeDetails:()=>d,selectNode:Me,getSelectedNode:()=>C(p),setFlow(F){i||(t=F,n=F.detail,a++,Ee())},update(F){i||(e={...e,...F},F.flow&&(t=F.flow,n=F.flow.detail,a++),F.selectedNodeId!==void 0&&(p=F.selectedNodeId),Ee())},destroy(){i=!0,c.abort(),H(r),H(d),r.remove(),d.remove()}}}function O(s,e="",t){const n=document.createElement(s);return n.className=e,t!==void 0&&(n.textContent=t),n}const mt=new Map;function Xe(s,e){if(!s)return!1;const t=e?[e]:[],n=new Set;for(let i=0;i<Math.max(1,t.length);i++)for(const[o,a]of mt)if(!(n.has(o)||e&&!t[i].contains(a))){if(o.element.contains(s))return!0;n.add(o),t.push(o.element)}return!1}function Ia(s){for(const[e,t]of[...mt])(!s||s.contains(t))&&e.close()}function vt(s){const{anchor:e,content:t,width:n="anchor",gap:i=4,onDismiss:o}=s,a=e.ownerDocument,l=a.defaultView||window,r=s.anchorMode==="element"?e:e.closest(".fc-focus-body")||e,d=a.createElement("div");d.className="rowvia-field-scope rowvia-field-popup-layer";const c=a.createElement("div");c.className="rowvia-field-popup",c.append(t),d.append(c),(e.closest("dialog[open]")||a.body||a.documentElement).append(d);let p=!1;const h=()=>{if(p||!d.isConnected)return;const m=r.getBoundingClientRect(),w=a.documentElement.clientWidth||l.innerWidth,k=a.documentElement.clientHeight||l.innerHeight,C=n==="anchor"?m.width+2:n==="auto"?c.getBoundingClientRect().width:n;c.style.width=n==="auto"?"max-content":C+"px";const b=c.getBoundingClientRect().height;let N=m.bottom+i;const I=m.top-i-b;N+b>k-8&&I>=8&&(N=I),N=Math.max(8,Math.min(N,Math.max(8,k-b-8)));const E=Math.max(8,Math.min(s.align==="end"?m.right-C:m.left,Math.max(8,w-C-8)));d.style.top=Math.round(N)+"px",d.style.left=Math.round(E)+"px"},u=()=>{p||(p=!0,Ia(d),mt.delete(v),a.removeEventListener("pointerdown",f,!0),a.removeEventListener("keydown",g,!0),l.removeEventListener("resize",h),l.removeEventListener("scroll",h,!0),d.remove(),o==null||o())},f=m=>{const w=m.target;w&&(d.contains(w)||r.contains(w)||e.contains(w)||Xe(w,d))||u()},g=m=>{if(m.key!=="Escape"||[...mt.keys()][mt.size-1]!==v)return;if(m.preventDefault(),m.stopPropagation(),u(),s.onEscape){s.onEscape();return}const w=a.defaultView.CustomEvent;e.dispatchEvent(new w("fc-collapse",{bubbles:!0,detail:{reason:"escape"}}))},v={element:d,reposition:h,close:u};return mt.set(v,e),a.addEventListener("pointerdown",f,!0),a.addEventListener("keydown",g,!0),l.addEventListener("resize",h),l.addEventListener("scroll",h,!0),h(),v}const We=s=>s.choices??(s.options||[]).map(e=>({id:e,label:e})),Mi=["rgba(61, 188, 47, 0.2)","rgba(0, 184, 159, 0.2)","rgba(244, 118, 189, 0.2)","rgba(149, 155, 238, 0.2)","rgba(184, 143, 255, 0.2)"],un=(s,e)=>{var t,n;return((t=We(s).find(i=>i.id===e))==null?void 0:t.color)||((n=s.colors)==null?void 0:n[e])||Mi[Math.max(0,We(s).findIndex(i=>i.id===e))%Mi.length]},Ri=s=>(Array.isArray(s)?s:s==null||s===""?[]:[s]).map(String);function Aa(s,e){var t;return((t=We(s).find(n=>n.id===e))==null?void 0:t.label)||e}function Li(s,e="choice"){const t=O("div","fc-tags");for(const n of Ri(s.value)){const i=Aa(s.field,n),o=O(e==="relation"?"button":"span","fc-tag fc-tag--"+e);e==="choice"&&(o.style.backgroundColor=un(s.field,n)),e==="person"&&o.append(O("span","fc-avatar",i.slice(0,1))),o.append(O("span","fc-tag-label",i)),o.tagName==="BUTTON"&&(o.type="button",o.onclick=a=>{var l;a.stopPropagation(),(l=s.onAction)==null||l.call(s,{type:"open",value:n})}),t.append(o)}return t.children.length||t.append(O("span","fc-empty","待填")),t}function hn(s,e,t="choice"){var L;const n=O("div","fc-choice fc-choice--"+t);let i=Ri(e.value).slice(0,s?void 0:1);const o=new Map(We(e.field).map(M=>[M.id,M]));let a=We(e.field);const l=s&&(e.field.maxSelections??0)>0?e.field.maxSelections:1/0,r=O("select","fc-select");r.hidden=!0,r.multiple=s,r.disabled=e.readonly,r.required=!!e.field.required,r.ariaLabel=e.field.label;const d=O("div","fc-choice-head"),c=O("div","fc-choice-selection"),p=O("span","fc-empty fc-choice-placeholder","待填"),h=O("input","fc-choice-search");h.placeholder="",h.autocomplete="off",h.ariaLabel="输入以搜索"+e.field.label,h.disabled=e.readonly;const u=()=>{h.size=Math.max(1,[...h.value].length+1)};u();const f=O("div","fc-option-list");f.setAttribute("role",t==="radio"?"radiogroup":"group"),f.ariaLabel=e.field.label;const g=O("div","fc-error fc-choice-feedback");g.setAttribute("role","status");const v=O("div","fc-picker-status");v.setAttribute("role","status");const m=O("button","fc-retry","重试");m.type="button",m.hidden=!0;let w,k=0,C=!1,b=!1;const N=t!=="radio"&&!!((L=e.services)!=null&&L.searchOptions),I=t!=="radio"&&e.layout!=="compact"&&!e.readonly;let E;const G=()=>{const M=E;E=void 0,M==null||M.close()},x=()=>{!I||C||E||e.readonly||(E=vt({anchor:d,content:f,width:"anchor",onDismiss:()=>{E=void 0}}))},T=()=>{!I||!E||(G(),n.dispatchEvent(new Event("fc-collapse",{bubbles:!0})))},A=()=>{var M;(M=e.onSelectedOptions)==null||M.call(e,i.map($=>o.get($)).filter($=>!!$)),n.dispatchEvent(new Event("change",{bubbles:!0}))},H=()=>{var M;if(r.replaceChildren(),!s){const $=O("option");$.value="",r.append($)}for(const $ of new Set([...a.map(z=>z.id),...i])){const z=O("option","",((M=o.get($))==null?void 0:M.label)||$);z.value=$,z.selected=i.includes($),r.append(z)}s||(r.value=i[0]||"")},q=()=>{c.replaceChildren(),f.replaceChildren(),H(),!i.length&&!h.value&&c.append(p);for(const z of i){const j=o.get(z),te=O("span","fc-tag fc-tag--"+t);(t==="choice"||t==="radio")&&(te.style.backgroundColor=un(e.field,z)),t==="person"&&te.append(O("span","fc-avatar",((j==null?void 0:j.label)||z).slice(0,1))),te.append(O("span","fc-tag-label",((j==null?void 0:j.label)||z)+(j!=null&&j.disabled?"(已停用)":"")));const ue=O("span","fc-tag-slot"),ge=O("button","fc-choice-remove","×");ge.type="button",ge.disabled=e.readonly,ge.ariaLabel="移除"+((j==null?void 0:j.label)||z),ge.onclick=be=>{be.stopPropagation(),i=i.filter(fe=>fe!==z),g.textContent="",q(),h.focus(),A()},ue.append(ge),te.append(ue),c.append(te)}const M=h.value.trim().toLocaleLowerCase(),$=a.filter(z=>!z.disabled&&(N||(z.label+" "+z.id+" "+(z.description||"")).toLocaleLowerCase().includes(M)));for(const z of $){const j=O("button","fc-option");j.type="button",j.dataset.value=z.id,j.disabled=e.readonly||b;const te=i.includes(z.id);j.classList.toggle("selected",te),j.setAttribute(t==="radio"?"aria-checked":"aria-pressed",String(te)),t==="radio"&&j.setAttribute("role","radio");const ue=O("span","fc-option-label"+(t==="choice"?" fc-tag":""),z.label);t==="choice"&&(ue.style.backgroundColor=un(e.field,z.id)),t==="person"&&j.append(O("span","fc-avatar",z.label.slice(0,1))),t==="relation"&&j.append(O("span","fc-relation-icon","↗"));const ge=O("span","fc-option-copy");ge.append(ue),z.description&&ge.append(O("small","fc-option-description",z.description)),j.append(ge,O("span","fc-option-mark",te?"✓":"")),j.onclick=be=>{if(be.stopPropagation(),!e.readonly){if(!s)i=[z.id];else if(te)i=i.filter(fe=>fe!==z.id);else{const fe=z.exclusive?[]:i.filter(me=>{var Ee;return!((Ee=o.get(me))!=null&&Ee.exclusive)});if(fe.length>=l){g.textContent="最多可选择 "+l+" 项";return}i=[...fe,z.id]}g.textContent="",s||(h.value="",u()),q(),f.querySelectorAll("button").forEach(fe=>{fe.dataset.value===z.id&&fe.focus()}),A(),!s&&I&&T()}},f.append(j)}!$.length&&!b&&f.append(O("p","fc-empty fc-choice-empty","暂无匹配选项"))},R=async()=>{w==null||w.abort();const M=++k;w=new AbortController,b=!0,m.hidden=!0,v.textContent="加载中…",n.setAttribute("aria-busy","true"),q();try{const $=await e.services.searchOptions(e.field,h.value.trim(),w.signal);if(C||M!==k)return;a=$,$.forEach(z=>o.set(z.id,z)),v.textContent=""}catch{if(C||M!==k)return;a=[],v.textContent="加载失败,请重试",m.hidden=!1}finally{!C&&M===k&&(b=!1,n.setAttribute("aria-busy","false"),q())}};h.oninput=()=>{u(),N?R():q()},h.onfocus=()=>x(),d.onclick=M=>{M.target.closest("button")||h.focus()},m.onclick=()=>void R();const P=M=>{if(!["ArrowDown","ArrowUp","ArrowLeft","ArrowRight","Home","End"].includes(M.key))return;const $=[...f.querySelectorAll("button:not(:disabled)")];if(!$.length)return;M.preventDefault();const z=$.indexOf(document.activeElement),j=M.key==="Home"?0:M.key==="End"?$.length-1:(z+(M.key==="ArrowUp"||M.key==="ArrowLeft"?-1:1)+$.length)%$.length;$[j].focus()};if(f.onkeydown=P,h.onkeydown=M=>{M.key==="ArrowDown"&&(x(),P(M))},r.onchange=()=>{i=[...r.selectedOptions].map(M=>M.value).filter(Boolean),q()},d.append(c),t!=="radio"&&d.append(h),I){const M=O("span","fc-field-chevron");M.setAttribute("aria-hidden","true"),d.append(M),n.append(r,d,v,m,g)}else n.append(r,d,v,f,m,g);return q(),N&&!e.readonly&&R(),{element:n,content:I?f:void 0,read:()=>s?[...i]:i[0]||"",validate:()=>e.field.required&&!i.length?"请选择一个选项":i.length>l?"最多可选择 "+l+" 项":void 0,focus:()=>{var M;if(t==="radio"){(M=f.querySelector("button"))==null||M.focus();return}h.focus(),x()},deactivate:()=>{h.value="",u(),G()},destroy:()=>{C=!0,++k,w==null||w.abort(),G()}}}const $a=new Set("P DIV BR STRONG B EM I U S STRIKE UL OL LI BLOCKQUOTE H1 H2 H3 H4 H5 SPAN FONT A IMG PRE CODE HR TABLE THEAD TBODY TR TH TD INPUT".split(" ")),Ti=s=>/^(https?:\/\/|mailto:)/i.test(s.trim());function wt(s){const e=document.createElement("template");e.innerHTML=String(s??"");const t=n=>{for(const i of[...n.childNodes]){if(i.nodeType!==1)continue;const o=i;if(["SCRIPT","STYLE","IFRAME","OBJECT","SVG","MATH"].includes(o.tagName)){o.remove();continue}if(t(o),!$a.has(o.tagName)){o.replaceWith(...o.childNodes);continue}if(o.tagName==="INPUT"&&o.getAttribute("type")!=="checkbox"){o.remove();continue}const a=o.getAttribute("href")||"",l=o.getAttribute("src")||"",r=o.getAttribute("alt")||"",d=o.getAttribute("data-person-id"),c=o.hasAttribute("checked"),p=o.getAttribute("data-task")==="true",h=["color","background-color","text-align","margin-left","font-weight","font-style","text-decoration-line"].map(f=>[f,o.style.getPropertyValue(f)]),u=o.tagName==="FONT"?o.getAttribute("color"):null;for(const f of[...o.attributes])o.removeAttribute(f.name);for(const[f,g]of h)(f==="color"||f==="background-color"?/^(#[a-f\d]{3,8}|rgba?\([\d.,%\s]+\)|[a-z]+)$/i.test(g):f==="text-align"?/^(left|center|right|justify)$/.test(g):f==="margin-left"?/^\d{1,3}px$/.test(g):/^(bold|normal|italic|underline|line-through|[1-9]00)$/.test(g))&&o.style.setProperty(f,g);if(u&&/^(#[a-f\d]{3,8}|[a-z]+)$/i.test(u)&&(o.style.color=u),o.tagName==="A"&&Ti(a)&&(o.setAttribute("href",a.trim()),o.setAttribute("target","_blank"),o.setAttribute("rel","noopener noreferrer")),o.tagName==="IMG"){if(!/^https?:\/\//i.test(l.trim())){o.remove();continue}o.setAttribute("src",l.trim()),o.setAttribute("alt",r),o.setAttribute("loading","lazy"),o.setAttribute("referrerpolicy","no-referrer")}o.tagName==="SPAN"&&d&&(o.setAttribute("data-person-id",d),o.setAttribute("contenteditable","false")),o.tagName==="INPUT"&&(o.setAttribute("type","checkbox"),o.setAttribute("contenteditable","false"),c&&o.setAttribute("checked","")),p&&o.tagName==="LI"&&o.setAttribute("data-task","true")}};return t(e.content),e.innerHTML}const pn={undo:'<path d="M9 5 4 10l5 5M4 10h10a6 6 0 0 1 0 12"/>',redo:'<path d="m15 5 5 5-5 5m5-5H10a6 6 0 0 0 0 12"/>',expand:'<path d="M14 3h7v7m0-7-7 7M10 21H3v-7m0 7 7-7"/>',collapse:'<path d="M21 3l-7 7m0-7v7h7M3 21l7-7m-7 0h7v7"/>',paint:'<path d="M3 3h14v7H3zM17 6h4v8h-9v7"/>',quote:'<path d="M4 12h5v7H2v-7l5-7m10 7h5v7h-7v-7l5-7"/>',table:'<rect x="3" y="3" width="18" height="18" rx="1"/><path d="M3 9h18M3 15h18M9 3v18M15 3v18"/>',link:'<path d="m10 14 4-4m-7 7-1 1a4 4 0 0 1-6-6l5-5a4 4 0 0 1 6 0m2 10 5-5a4 4 0 0 0-6-6l-1 1"/>',task:'<rect x="3" y="3" width="18" height="18" rx="1"/><path d="m7 12 3 3 7-7"/>',indent:'<path d="M10 5h11M10 12h11M10 19h11M2 8l4 4-4 4"/>',line:'<path d="M3 12h18M3 5h3m3 0h3m3 0h3M3 19h3m3 0h3m3 0h3"/>'};function Ni(s){const e=O("div",`fc-rich${s.layout==="compact"?" fc-rich-compact":""}`),t=O("div","fc-rich-toolbar");t.setAttribute("role","toolbar"),t.ariaLabel="文本格式";const n=O("div","fc-rich-tools");t.append(n);const i=O("div","fc-rich-content");i.contentEditable=String(!s.readonly),i.setAttribute("role","textbox"),i.setAttribute("aria-multiline","true"),i.ariaLabel=s.field.label,i.tabIndex=s.readonly?-1:0,i.innerHTML=wt(s.value);const o=O("div","fc-rich-menu");o.hidden=!0;let a=null,l=!1,r=[i.innerHTML],d=0,c=!1,p=null,h,u;const f=()=>{const L=window.getSelection();L!=null&&L.rangeCount&&i.contains(L.anchorNode)&&i.contains(L.focusNode)&&(a=L.getRangeAt(0).cloneRange())},g=()=>{i.focus();const L=window.getSelection();if(!L)return;const M=a&&i.contains(a.commonAncestorContainer)?a:document.createRange();M!==a&&(M.selectNodeContents(i),M.collapse(!1)),L.removeAllRanges(),L.addRange(M),a=M},v=()=>{var M;const L=u;u=void 0,L==null||L.close(),(M=h==null?void 0:h.destroy)==null||M.call(h),h=void 0,o.hidden=!0,o.replaceChildren()},m=new Map,w=()=>{var L;m.get("撤销").disabled=s.readonly||d===0,m.get("重做").disabled=s.readonly||d===r.length-1;for(const[M,$]of[["加粗","bold"],["斜体","italic"],["下划线","underline"],["删除线","strikeThrough"],["有序列表","insertOrderedList"],["无序列表","insertUnorderedList"]]){const z=m.get(M);if(!z)continue;const j=!!((L=document.queryCommandState)!=null&&L.call(document,$));z.classList.toggle("active",j),z.setAttribute("aria-pressed",String(j))}},k=()=>{c||(i.innerHTML!==r[d]&&(r=r.slice(0,d+1),r.push(i.innerHTML),r.length>100&&r.shift(),d=r.length-1),f(),w())},C=()=>{k(),i.dispatchEvent(new Event("change",{bubbles:!0}))},b=L=>{const M=d+L;M<0||M>=r.length||(d=M,c=!0,i.innerHTML=r[d],a=null,g(),c=!1,w(),i.dispatchEvent(new Event("change",{bubbles:!0})))},N=(L,M)=>{s.readonly||(g(),document.execCommand(L,!1,M),f(),v(),C())},I=L=>{if(s.readonly)return;g();const M=window.getSelection().getRangeAt(0);M.deleteContents(),M.insertNode(L),M.setStartAfter(L),M.collapse(!0),a=M.cloneRange(),v(),C()},E=(L,M,$,z=!0)=>{const j=O("button",z?"fc-rich-tool fc-rich-advanced":"fc-rich-tool");return j.type="button",j.ariaLabel=L,j.title=L,j.disabled=s.readonly,pn[M]?j.innerHTML=`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${pn[M]}</svg>`:j.textContent=M,j.onmousedown=te=>{te.preventDefault(),f()},j.onclick=te=>{te.stopPropagation(),$()},n.append(j),m.set(L,j),j},G=(L,M)=>{if(!s.readonly){if(f(),!o.hidden&&o.ariaLabel===L){v();return}v(),o.className="fc-rich-menu",o.ariaLabel=L,o.hidden=!1,u=vt({anchor:m.get(L),anchorMode:"element",content:o,width:"auto",onDismiss:v,onEscape:g}),M(),u==null||u.reposition()}},x=(L,M)=>{const $=O("button","fc-rich-menu-option",L);return $.type="button",$.onmousedown=z=>z.preventDefault(),$.onclick=z=>{z.stopPropagation(),M()},o.append($),$};E("撤销","undo",()=>b(-1),!1),E("重做","redo",()=>b(1),!1),E("格式刷","paint",()=>{f();const L=a==null?void 0:a.startContainer,M=(L==null?void 0:L.nodeType)===1?L:L==null?void 0:L.parentElement;!M||!i.contains(M)||(p={tag:/^(B|STRONG|I|EM|U|S)$/.test(M.tagName)?M.tagName.toLowerCase():"span",css:M.getAttribute("style")||""},m.get("格式刷").classList.add("active"))}),E("正文样式","Aa⌄",()=>G("正文样式",()=>{for(const[L,M]of[["正文","p"],["标题 1","h1"],["标题 2","h2"],["标题 3","h3"],["标题 4","h4"],["标题 5","h5"]])x(L,()=>N("formatBlock",M))}));const T=["#1f2329","#8f959e","#ffffff","#f54a45","#ff8800","#ffc60a","#34c724","#14b8a6","#3370ff","#7f3bf5","#f7cdd9","#fce2cf","#fff3b8","#d9f5d6","#d6e8ff","#e9ddfa"];for(const[L,M,$]of[["文字颜色","A⌄","foreColor"],["背景高亮","▰⌄","hiliteColor"]])E(L,M,()=>G(L,()=>{o.classList.add("fc-rich-colors");for(const z of T){const j=x(z,()=>N($,z));j.textContent="",j.style.backgroundColor=z,j.ariaLabel=`${L} ${z}`}x("清除",()=>N($,$==="foreColor"?"#1f2329":"transparent"))}));for(const[L,M,$]of[["加粗","B","bold"],["斜体","I","italic"],["下划线","U","underline"],["删除线","S","strikeThrough"]])E(L,M,()=>N($));E("对齐","☰⌄",()=>G("对齐",()=>{for(const[L,M]of[["左对齐","justifyLeft"],["居中对齐","justifyCenter"],["右对齐","justifyRight"],["两端对齐","justifyFull"]])x(L,()=>N(M))})),E("有序列表","1≡",()=>N("insertOrderedList")),E("无序列表","•≡",()=>N("insertUnorderedList")),E("任务列表","task",()=>{g();const L=window.getSelection().getRangeAt(0),M=O("ul"),$=O("li");$.dataset.task="true";const z=O("input");z.type="checkbox",z.contentEditable="false",$.append(z,L.extractContents()),$.textContent||$.append(document.createTextNode("待办事项")),M.append($),I(M)}),E("引用","quote",()=>N("formatBlock","blockquote")),E("缩进","indent",()=>G("缩进",()=>{x("增加缩进",()=>N("indent")),x("减少缩进",()=>N("outdent"))})),E("分隔线","line",()=>I(O("hr"))),E("表格","table",()=>G("表格",()=>{const L=O("p","","选择行列"),M=O("div","fc-rich-table-grid");o.append(L,M);for(let $=1;$<=6;$++)for(let z=1;z<=6;z++){const j=O("button");j.type="button",j.ariaLabel=`${$}行${z}列表格`,j.dataset.row=String($),j.dataset.col=String(z),j.onmousedown=te=>te.preventDefault(),j.onmouseenter=()=>{L.textContent=`${$} × ${z}`,M.querySelectorAll("button").forEach(te=>te.classList.toggle("active",Number(te.dataset.row)<=$&&Number(te.dataset.col)<=z))},j.onclick=()=>{const te=O("table"),ue=O("tbody");for(let be=0;be<$;be++){const fe=O("tr");for(let me=0;me<z;me++){const Ee=O("td");Ee.append(O("br")),fe.append(Ee)}ue.append(fe)}te.append(ue),I(te);const ge=document.createRange();ge.selectNodeContents(te.querySelector("td")),ge.collapse(!0),a=ge,g()},M.append(j)}}));const A=()=>G("链接",()=>{const L=O("input","fc-input");L.ariaLabel="链接文本",L.placeholder="输入文本",L.value=(a==null?void 0:a.toString())||"";const M=O("input","fc-input");M.ariaLabel="链接地址",M.placeholder="粘贴或输入超链接";const $=O("div","fc-error"),z=O("button","primary","确定");z.type="button",z.onclick=()=>{const j=M.value.trim();if(!Ti(j)){$.textContent="请输入 http、https 或 mailto 链接";return}const te=O("a","",L.value||j);te.href=j,te.target="_blank",te.rel="noopener noreferrer",I(te)},o.append(O("span","","文本"),L,O("span","","链接"),M,$,z),L.focus()});E("链接","link",A),E("插入图片","▧",()=>G("插入图片",()=>{const L=O("input","fc-input");L.type="url",L.ariaLabel="图片地址",L.placeholder="https:// 图片地址";const M=O("input","fc-input");M.ariaLabel="图片说明",M.placeholder="图片说明";const $=O("div","fc-error"),z=O("button","primary","插入");z.type="button",z.onclick=()=>{if(!/^https?:\/\//i.test(L.value.trim())||!L.checkValidity()){$.textContent="请输入有效的 http 或 https 图片地址";return}const j=O("img");j.src=L.value.trim(),j.alt=M.value,j.referrerPolicy="no-referrer",I(j)},o.append(L,M,$,z),L.focus()})),E("提及人员","@",()=>G("提及人员",()=>{var M;const L=hn(!1,{...s,value:"",field:{...s.field,label:"人员"}},"person");h=L,o.append(L.element),L.element.addEventListener("change",$=>{var te,ue;$.stopPropagation();const z=String(L.read());if(!z)return;const j=O("span","","@"+(((te=We(s.field).find(ge=>ge.id===z))==null?void 0:te.label)||((ue=L.element.querySelector("option:checked"))==null?void 0:ue.textContent)||z));j.dataset.personId=z,j.contentEditable="false",I(j)}),(M=L.focus)==null||M.call(L)})),E("代码块","{ }",()=>N("formatBlock","pre")),E("表情","☺",()=>G("表情",()=>{o.classList.add("fc-rich-emojis");for(const L of["😀","😊","😂","👍","👏","🎉","❤️","🔥","✅","💡","🚀","👀","🤔","🙏","💪","⭐"])x(L,()=>I(document.createTextNode(L)))}));const H=E("全屏编辑","expand",()=>{f(),l=!l,e.classList.toggle("is-fullscreen",l),v(),H.ariaLabel=H.title=l?"收起全屏":"全屏编辑",H.innerHTML=`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7">${pn[l?"collapse":"expand"]}</svg>`,g()},!1);H.disabled=!1,H.classList.add("fc-rich-expand"),t.append(H);const q=()=>{for(const L of n.children)L.inert=L.offsetTop>=n.clientHeight},R=typeof ResizeObserver>"u"?void 0:new ResizeObserver(q);R==null||R.observe(n);const P=L=>{const M=L.target;i.contains(M)||M.closest("input,textarea,select,[contenteditable=true]")||(L.preventDefault(),!e.contains(document.activeElement)&&!o.contains(document.activeElement)&&g())};return e.addEventListener("mousedown",P),o.addEventListener("mousedown",P),i.addEventListener("input",k),i.addEventListener("mouseup",()=>{if(f(),w(),p&&a&&!a.collapsed){const L=a,M=O(p.tag);M.style.cssText=p.css,M.append(L.extractContents()),L.insertNode(M),p=null,m.get("格式刷").classList.remove("active"),C()}}),i.addEventListener("keyup",()=>{f(),w()}),i.addEventListener("click",L=>{const M=L.target;if(M.tagName==="A"&&L.preventDefault(),M instanceof HTMLInputElement&&M.type==="checkbox"){if(s.readonly){L.preventDefault();return}M.toggleAttribute("checked",M.checked),C()}v()}),i.addEventListener("drop",L=>L.preventDefault()),i.addEventListener("paste",L=>{var $,z;if(s.readonly){L.preventDefault();return}L.preventDefault(),f();const M=($=L.clipboardData)==null?void 0:$.getData("text/html");if(M){const j=document.createElement("template");j.innerHTML=wt(M);const te=j.content,ue=document.createTextNode("");te.append(ue),g();const ge=window.getSelection().getRangeAt(0);ge.deleteContents(),ge.insertNode(te),ge.setStartAfter(ue),ge.collapse(!0),a=ge.cloneRange(),C()}else I(document.createTextNode(((z=L.clipboardData)==null?void 0:z.getData("text/plain"))||""))}),e.addEventListener("keydown",L=>{L.key==="Escape"&&!o.hidden?(L.preventDefault(),L.stopPropagation(),v(),g()):L.key==="Escape"&&l?(L.preventDefault(),L.stopPropagation(),H.click()):!s.readonly&&(L.metaKey||L.ctrlKey)&&L.key.toLowerCase()==="z"?(L.preventDefault(),b(L.shiftKey?1:-1)):(L.metaKey||L.ctrlKey)&&L.key.toLowerCase()==="k"&&(L.preventDefault(),f(),A())}),e.append(t,i),w(),{element:e,content:o,inputRoot:e,read:()=>wt(i.innerHTML),validate:()=>{var L;return s.field.required&&!((L=i.textContent)!=null&&L.trim())&&!i.querySelector("img")?"请填写内容":void 0},focus:()=>i.focus(),deactivate:()=>{v(),l=!1,e.classList.remove("is-fullscreen"),H.ariaLabel=H.title="全屏编辑"},destroy:()=>{R==null||R.disconnect(),v()}}}const Ii="请输入评论(Enter 换行,⌘ + Enter 发送)",Fa={reply:'<path d="M4 4h16v13h-5l-3 3-3-3H4zM8 10h8"/>',edit:'<path d="m5 15 10-10 4 4L9 19H5zM13 7l4 4M4 22h17"/>',sort:'<path d="M6 20V4m-3 3 3-3 3 3M13 6h8M13 12h6M13 18h3"/>'},fn=s=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${Fa[s]}</svg>`,Ai=s=>`<span class="detail-comment-avatar" aria-hidden="true">${D(s.slice(0,1))}</span>`,$i=s=>s.html===void 0?D(s.content).replace(/\n/g,"<br>"):wt(s.html);function Da(s){let e={...s};const t=typeof e.author=="string"?e.author:e.author.display;let n=e.data||e.comments||[],i,o,a=!1,l=0;const r=new AbortController,d=new Set,c=[],p=()=>{c.splice(0).forEach(R=>R())},h=(R,P)=>{var M;if(I||!(e.onSave||(R==="edit"?e.onEdit:e.onPublish))||R!=="create"&&!P)return!1;const L=(M=e.permissions)==null?void 0:M[R];return typeof L=="function"?!!P&&L(P):L===!0},u=document.createElement("section");u.className="detail-comments rowvia-field-scope rowvia-detail-module",u.dataset.module="detail:tabs:comment",u.ariaLabel="评论/备注";const f=document.createElement("ul");f.className="detail-comment-list",u.append(f);const g=document.createElement("button");g.type="button",g.className="detail-comment-load-more",g.textContent="加载更多";const v=document.createElement("div");v.setAttribute("role","alert"),u.append(g,v);let m=!1;g.onclick=async()=>{if(!(I||m||!e.hasMore||!e.onLoadMore)){m=!0,g.disabled=!0,v.textContent="";try{await e.onLoadMore(r.signal)}catch(R){I||(v.textContent=R instanceof Error?R.message:"加载失败,请重试")}finally{m=!1,I||(g.disabled=!1,g.hidden=!e.hasMore)}}};const w=document.createElement("div");w.className="detail-comment-composer rowvia-field-scope rowvia-detail-module",w.dataset.module="detail:comment:composer",w.innerHTML=`${Ai(t)}<div class="detail-comment-compose-main"></div>`;const k=w.lastElementChild;let C,b,N=!1,I=!1;const E=()=>n.map((R,P)=>typeof R=="string"?{id:`legacy-${P}`,author:t,content:R,createdAt:""}:R);function G(R,P,L,M){var Me;const $=Ni({field:{key:"comment",label:"评论",kind:"richText",required:!0,choices:(Me=e.people)!=null&&Me.length?e.people:[{id:t,label:t}]},value:R,readonly:!1,layout:"form",services:e.services});$.element.classList.add("detail-comment-editor");const z=$.element.querySelector(".fc-rich-tools");for(const U of["插入图片","提及人员"])z.append(z.querySelector(`[aria-label="${U}"]`));const j=$.element.querySelector(".fc-rich-content");j.dataset.placeholder=Ii;const te=document.createElement("div");te.className="detail-comment-editor-actions",te.innerHTML='<button type="button" data-cancel-comment>取消</button><button type="button" class="primary" data-publish-comment>发布评论</button>',$.element.append(te);const ue=te.querySelector("[data-publish-comment]"),ge=document.createElement("div");ge.className="detail-comment-error",ge.setAttribute("role","alert"),$.element.append(ge);const be=te.querySelector("[data-cancel-comment]"),fe=()=>h(P.action==="edit"?"edit":P.action==="reply"?"reply":"create",E().find(U=>U.id===(P.id||P.replyTo))),me=()=>{var se;const U=!((se=j.textContent)!=null&&se.replace(/[\u200b\u00a0]/g," ").trim())&&!j.querySelector("img,table,hr");j.classList.toggle("is-empty",U),ue.disabled=U||a||!fe(),be.disabled=a,$.element.inert=a,j.contentEditable=String(!a&&fe()),$.element.querySelector(".fc-rich-toolbar").inert=a||!fe()},Ee=()=>{if(me(),ue.disabled||I)return;const U=String($.read()),se=document.createElement("div");se.innerHTML=U,a=!0,ge.textContent="",$.element.setAttribute("aria-busy","true"),me();const Z=l,W=()=>{a=!1,!I&&($.element.setAttribute("aria-busy","false"),me())},Q=S=>{if(!I){if(S!==!0&&!Array.isArray(S)){ae(new Error("保存失败,请重试"));return}Array.isArray(S)&&Z===l&&(n=S),W(),L()}},ae=S=>{I||(W(),ge.textContent=S instanceof Error?S.message:"保存失败,请重试")};try{const S={...P,html:U,content:(se.innerText||se.textContent||"").trim()},V=e.onSave?e.onSave(S,r.signal):P.action==="edit"?e.onEdit(P.id,S,r.signal):e.onPublish(S,r.signal);typeof V=="object"&&V!==null&&"then"in V?Promise.resolve(V).then(Q,ae):Q(V)}catch(S){ae(S)}};return te.querySelector("[data-cancel-comment]").onclick=()=>{!a&&!I&&M()},ue.onclick=Ee,$.element.addEventListener("input",me),$.element.addEventListener("change",me),j.addEventListener("keydown",U=>{U.key==="Enter"&&(U.metaKey||U.ctrlKey)&&!U.isComposing&&(U.preventDefault(),U.stopPropagation(),Ee())}),me(),$}function x(){var R;(R=C==null?void 0:C.destroy)==null||R.call(C),C=void 0,o=void 0,w.classList.remove("is-editing"),w.hidden=!h("create"),k.innerHTML=`<button type="button" class="detail-comment-placeholder">${Ii}</button>`,k.querySelector("button").onclick=()=>T()}function T(R){var z,j,te,ue,ge,be;if(a||!h(R?"reply":"create",R))return;const P=R==null?void 0:R.author;o=R==null?void 0:R.id;const L=`${(C==null?void 0:C.read())||""}${P?`<span data-person-id="${D(((j=(z=e.people)==null?void 0:z.find(fe=>fe.label===P))==null?void 0:j.id)||P)}">@${D(P)}</span> `:""}`;(te=C==null?void 0:C.destroy)==null||te.call(C),C=G(L,{action:o?"reply":"create",replyTo:o},()=>{x(),A()},x),w.hidden=!1,w.classList.add("is-editing"),k.replaceChildren(C.element),(ue=C.focus)==null||ue.call(C);const M=C.element.querySelector(".fc-rich-content"),$=document.createRange();$.selectNodeContents(M),$.collapse(!1),(ge=window.getSelection())==null||ge.removeAllRanges(),(be=window.getSelection())==null||be.addRange($)}function A(){if(I)return;p(),g.hidden=!e.hasMore||!e.onLoadMore;const R=E().map((P,L)=>({comment:P,index:L}));N&&R.reverse(),f.innerHTML=R.length?R.map(({comment:P,index:L})=>`
|
|
91
|
-
<li class="detail-comment" data-comment-index="${
|
|
92
|
-
${
|
|
90
|
+
<footer class="ps-total"></footer><div class="ps-popover" hidden></div><aside class="ps-detail" hidden></aside><div class="ps-toast" role="status" hidden></div>`,s.append(L);const N=qe(L,"personnel",e),y=Q=>L.querySelector(Q),D=y(".ps-scroll"),S=y(".ps-rows"),R=y(".ps-popover"),M=y(".ps-detail"),F=new AbortController,q=F.signal;let T;const B=()=>[22,43,64,86,120][p];function A(Q){const J=y(".ps-toast");J.textContent=Q,J.hidden=!1,clearTimeout(T),T=setTimeout(()=>J.hidden=!0,2200)}function I(){C||tr(L,{people:t,items:n,today:i,selected:o,onlyScheduled:a,query:r,status:l,sort:d,descending:c,zoom:p,expanded:h,children:u,loose:f,colorFirst:g,from:v,days:m,rangeStart:b,rangeEnd:k})}function $(Q,J){if(!R.hidden&&R.dataset.kind===Q){R.hidden=!0;return}R.dataset.kind=Q,R.hidden=!1;const ie=L.getBoundingClientRect(),E=J==null?void 0:J.getBoundingClientRect();if(R.style.left=`${Math.max(12,Math.min(((E==null?void 0:E.left)??ie.left)-ie.left,L.clientWidth-(Q==="unplanned"?760:420)-16))}px`,R.style.top=`${E?E.bottom-ie.top+6:96}px`,R.className=`ps-popover ps-panel-${Q}`,Q==="people")R.innerHTML=`<div class="ps-panel-title">包含 ${o.size} 人<label><input type="checkbox" data-control="only" ${a?"checked":""}>仅查看有排期的用户</label></div><div class="ps-person-filter"><span>甘特图显示人员</span><span>包含</span><span>全部排期人员</span></div><input class="ps-person-search" placeholder="搜索人员" aria-label="搜索人员"><div class="ps-person-options">${t.map(O=>`<label><input type="checkbox" data-person="${H(O.id)}" ${o.has(O.id)?"checked":""}>${H(O.name)}</label>`).join("")}</div>`;else if(Q==="sort")R.innerHTML=`<div class="ps-panel-title">设置排序条件 ⓘ</div><div class="ps-sort-fields"><select aria-label="排序字段" data-control="sort"><option value="">请选择排序项</option><option value="estimate">总估分</option><option value="scheduled">已排期项</option></select><button data-action="asc" class="${c?"":"selected"}">小 → 大</button><button data-action="desc" class="${c?"selected":""}">大 → 小</button></div><button class="ps-link" data-action="clear-sort">清空全部条件</button>`,R.querySelector("select").value=d;else if(Q==="filter")R.innerHTML=`<div class="ps-panel-title">筛选工作项</div><label>工作项类型 <span class="ps-chip">${H(e.workItemLabel??"工作项")}</span></label><label>名称包含 <input data-control="query" value="${H(r)}" placeholder="输入名称"></label><label>状态 <select data-control="status"><option value="">全部状态</option>${[...new Set(n.map(O=>O.status))].map(O=>`<option>${H(O)}</option>`).join("")}</select></label><button data-action="clear-filter" class="ps-link">清空筛选</button>`,R.querySelector("select").value=l;else if(Q==="settings")R.innerHTML=`<div class="ps-panel-title">数据显示</div><label><input type="checkbox" data-control="expanded" ${h?"checked":""}>展开全部排期项</label><label><input type="checkbox" data-control="children" ${u?"checked":""}>展示全部子项</label><div class="ps-panel-title">内容显示</div><div class="ps-segment"><button data-action="compact" class="${f?"":"selected"}">紧凑</button><button data-action="loose" class="${f?"selected":""}">宽松</button></div><div class="ps-panel-title">甘特条样式 ⓘ</div><div class="ps-style-options"><button data-action="content" class="${g?"":"selected"}"><i></i>◉ 内容优先</button><button data-action="color" class="${g?"selected":""}"><i></i>◉ 颜色优先</button></div>`;else if(Q==="date")X();else if(Q==="save")R.innerHTML='<div class="ps-panel-title">存为视图</div><input data-view-name placeholder="视图名称" aria-label="视图名称"><button class="ps-primary" data-action="save-view">保存</button>';else if(Q==="views"){const O=Re();R.innerHTML=`<div class="ps-panel-title">视图列表</div>${O.length?O.map((U,K)=>`<button class="ps-view" data-view="${K}">▦ ${H(U.name)}</button>`).join(""):"<p>暂无保存的视图</p>"}`}}let z=new Date(`${b}T00:00:00Z`),W=!1;function X(){let Q=`<div class="ps-range-inputs"><input type="date" data-control="range-start" value="${b}" aria-label="开始日期">—<input type="date" data-control="range-end" value="${k}" aria-label="结束日期"></div><div class="ps-calendars">`;for(let J=0;J<2;J++){const ie=new Date(Date.UTC(z.getUTCFullYear(),z.getUTCMonth()+J,1));Q+=`<div class="ps-calendar"><div><button data-action="cal-prev">‹</button><strong>${ie.getUTCFullYear()}年 ${ie.getUTCMonth()+1}月</strong><button data-action="cal-next">›</button></div><div class="ps-calendar-grid">${"日一二三四五六".split("").map(O=>`<span>${O}</span>`).join("")}`;for(let O=0;O<ie.getUTCDay();O++)Q+="<span></span>";const E=new Date(Date.UTC(ie.getUTCFullYear(),ie.getUTCMonth()+1,0)).getUTCDate();for(let O=1;O<=E;O++){const U=Ze(Date.UTC(ie.getUTCFullYear(),ie.getUTCMonth(),O)/864e5);Q+=`<button data-date="${U}" class="${U>=b&&U<=k?"in-range":""} ${U===b||U===k?"selected":""}">${O}</button>`}Q+="</div></div>"}R.innerHTML=Q+`</div><div class="ps-presets">${["本周","本双周","本月","本双月","2周内","2个月内","1年内"].map((J,ie)=>`<button data-preset="${ie}">${J}</button>`).join("")}</div>`}let te=`${b}/${k}`;function le(){var J;const Q=`${b}/${k}`;Q!==te&&(te=Q,(J=e.onRangeChange)==null||J.call(e,{from:b,to:k}))}function ve(Q){for(const J of[Q.from,Q.to])if(!/^\d{4}-\d{2}-\d{2}$/.test(J)||!Number.isFinite(Ve(J))||Ze(Ve(J))!==J)throw new Error("Invalid schedule date range");if(Q.to<Q.from)throw new Error("Invalid schedule date range");b=Q.from,k=Q.to,z=new Date(`${b}T00:00:00Z`),te=`${b}/${k}`,de(!1)}function de(Q=!0){k<b&&([b,k]=[k,b]),v=Ve(b),v-=new Date(v*864e5).getUTCDay(),m=Math.max(35,Ve(k)-v+8),D.scrollLeft=0,I(),Q&&le()}function ue(Q,J){var O;if(!n.some(U=>U.id===Q))throw new Error(`Unknown schedule item: ${Q}`);const ie=n.map(U=>U.id===Q?{...U,...J}:U);Mn(t,ie),n=ie,I();const E=n.find(U=>U.id===Q);E&&((O=e.onItemChange)==null||O.call(e,structuredClone(E)))}function me(Q){var ie;const J=n.find(E=>E.id===Q);(ie=e.onItemOpen)==null||ie.call(e,structuredClone(J)),M.hidden=!1,M.dataset.item=Q,M.innerHTML=`<header><strong>${H(J.name)}</strong><button data-action="close-detail" aria-label="关闭详情">×</button></header><div class="ps-detail-body"><span class="ps-chip">${H(J.status)}</span><h3>● ${H(J.node)}</h3><form><label>名称<input name="name" required value="${H(J.name)}"></label><label>负责人<select name="personId">${t.map(E=>`<option value="${H(E.id)}" ${E.id===J.personId?"selected":""}>${H(E.name)}</option>`).join("")}</select></label><label>总估分(pd)<input name="estimate" type="number" min="0" step="0.1" value="${J.estimate}" required></label><label>开始日期<input type="date" name="start" value="${J.start||""}"></label><label>结束日期<input type="date" name="end" value="${J.end||""}"></label><p class="ps-error" role="alert"></p><button class="ps-primary" type="submit">保存排期</button><button type="button" data-action="unschedule">移至未排期</button></form></div>`}function Ie(Q,J){$("unplanned",J),R.hidden=!1;const ie=t.find(E=>E.id===Q);R.innerHTML=`<div class="ps-panel-title">未排期工作项 ${H(ie.name)}</div><table><thead><tr><th>名称</th><th>节点 / 状态</th><th>估分</th><th>排期</th></tr></thead><tbody>${n.filter(E=>E.personId===Q&&!kn(E)).map(E=>`<tr><td><button data-open="${H(E.id)}">${H(E.name)}</button></td><td>● ${H(E.node)}</td><td><input type="number" min="0" step="0.1" value="${E.estimate||""}" placeholder="待填" data-estimate="${H(E.id)}" aria-label="${H(E.name)}估分"></td><td><button class="ps-link" data-open="${H(E.id)}">待填</button></td></tr>`).join("")||'<tr><td colspan="4">暂无未排期工作项</td></tr>'}</tbody></table>`}const fe=e.viewStorageKey??"rowvia-personnel-views-v1";function Re(){try{const Q=JSON.parse(localStorage.getItem(fe)||"[]");return Array.isArray(Q)?Q:[]}catch{return[]}}L.addEventListener("click",Q=>{const J=Q.target,ie=J.closest("button");if(!ie)return;if(ie.dataset.open){R.hidden=!0,me(ie.dataset.open);return}if(ie.dataset.item){w||me(ie.dataset.item);return}if(ie.dataset.date){W?(k=ie.dataset.date,W=!1,de()):(b=ie.dataset.date,k=b,W=!0),X();return}if(ie.dataset.preset){const O=Number(ie.dataset.preset),U=Ve(i),K=new Date(U*864e5);b=Ze(O<2?U-K.getUTCDay():O<4?Date.UTC(K.getUTCFullYear(),K.getUTCMonth(),1)/864e5:U),k=Ze(O===2||O===3?Date.UTC(K.getUTCFullYear(),K.getUTCMonth()+(O===2?1:2),0)/864e5:Ve(b)+[6,13,29,60,13,59,364][O]),W=!1,de(),R.hidden=!0;return}if(ie.dataset.view){const O=Re()[Number(ie.dataset.view)];O&&(o=new Set(O.selected.filter(U=>t.some(K=>K.id===U))),{query:r,status:l,sort:d,descending:c,zoom:p,from:v,days:m,rangeStart:b,rangeEnd:k,expanded:h,children:u,loose:f,colorFirst:g,onlyScheduled:a}=O,I(),le(),R.hidden=!0,A(`已打开 ${O.name}`));return}const E=ie.dataset.action;if(["people","filter","sort","settings","date","save","views"].includes(E||"")){$(E,ie);return}if(E==="unplanned"){Ie(ie.dataset.person,ie);return}if(E==="close-detail"&&(M.hidden=!0),E==="unschedule"&&(ue(M.dataset.item,{start:null,end:null}),M.hidden=!0),(E==="plus"||E==="minus")&&(p=Math.max(0,Math.min(4,p+(E==="plus"?1:-1))),I()),(E==="prev"||E==="next"||E==="today")&&(v=E==="today"?Ve(i)-new Date(`${i}T00:00:00Z`).getUTCDay():v+(E==="prev"?-14:14),b=Ze(v),k=Ze(v+59),D.scrollLeft=0,I(),le()),(E==="asc"||E==="desc"||E==="clear-sort")&&(c=E==="desc",E==="clear-sort"&&(d=""),I(),R.hidden=!0),E==="clear-filter"&&(r="",l="",I(),R.hidden=!0),["compact","loose","content","color"].includes(E||"")&&(E==="compact"||E==="loose"?f=E==="loose":g=E==="color",I(),R.hidden=!0,$("settings",y('[data-action="settings"]'))),(E==="cal-prev"||E==="cal-next")&&(z=new Date(Date.UTC(z.getUTCFullYear(),z.getUTCMonth()+(E==="cal-prev"?-1:1),1)),X()),E==="save-view"){const O=R.querySelector("[data-view-name]").value.trim();if(!O)return;const U=Re();U.push({name:O,selected:[...o],query:r,status:l,sort:d,descending:c,zoom:p,from:v,days:m,rangeStart:b,rangeEnd:k,expanded:h,children:u,loose:f,colorFirst:g,onlyScheduled:a});try{localStorage.setItem(fe,JSON.stringify(U)),R.hidden=!0,A("视图已保存")}catch{A("浏览器存储不可用,视图未保存")}}E==="schedule"&&(R.hidden=!0,M.hidden=!0)},{signal:q}),L.addEventListener("input",Q=>{const J=Q.target;J.classList.contains("ps-zoom")&&(p=Number(J.value),I()),J.classList.contains("ps-person-search")&&R.querySelectorAll(".ps-person-options label").forEach(ie=>{var E;return ie.hidden=!((E=ie.textContent)!=null&&E.includes(J.value))}),J.dataset.control==="query"&&(r=J.value,I())},{signal:q}),L.addEventListener("change",Q=>{const J=Q.target;if(J.dataset.person&&(J.checked?o.add(J.dataset.person):o.delete(J.dataset.person),I()),J.dataset.estimate){const ie=Number(J.value);Number.isFinite(ie)&&ie>=0&&ue(J.dataset.estimate,{estimate:ie});return}switch(J.dataset.control){case"only":a=J.checked;break;case"sort":d=J.value;break;case"status":l=J.value;break;case"expanded":h=J.checked;break;case"children":u=J.checked;break;case"range-start":J.value&&(b=J.value,de(),X());return;case"range-end":J.value&&(k=J.value,de(),X());return}I()},{signal:q}),M.addEventListener("submit",Q=>{Q.preventDefault();const J=new FormData(Q.target),ie=String(J.get("start")||"")||null,E=String(J.get("end")||"")||null;if(!!ie!=!!E||ie&&E&&ie>E){M.querySelector(".ps-error").textContent="请填写完整日期,结束日期不能早于开始日期";return}ue(M.dataset.item,{name:String(J.get("name")),personId:String(J.get("personId")),estimate:Number(J.get("estimate")),start:ie,end:E}),M.hidden=!0,A("排期已更新")},{signal:q}),document.addEventListener("pointerdown",Q=>{L.contains(Q.target)?!R.contains(Q.target)&&!Q.target.closest("[data-action]")&&(R.hidden=!0):R.hidden=!0},{signal:q}),L.addEventListener("keydown",Q=>{Q.key==="Escape"&&(R.hidden=!0,M.hidden=!0)},{signal:q});let be=null;return S.addEventListener("pointerdown",Q=>{const J=Q.target,ie=J.closest(".ps-bar");if(!ie||Q.button!==0)return;const E=n.find(O=>O.id===ie.dataset.item);w=!1,be={id:E.id,x:Q.clientX,start:Ve(E.start),end:Ve(E.end),edge:J.dataset.edge||"move",bar:ie,left:parseFloat(ie.style.left),size:parseFloat(ie.style.width),delta:0,scroll:D.scrollLeft}},{signal:q}),document.addEventListener("pointermove",Q=>{if(!be)return;const J=Math.round((Q.clientX-be.x+D.scrollLeft-be.scroll)/B());be.delta=be.edge==="start"?Math.min(J,be.end-be.start):be.edge==="end"?Math.max(J,be.start-be.end):J,Math.abs(Q.clientX-be.x)>4&&(w=!0),w&&(be.bar.style.opacity=".8",be.edge==="move"?be.bar.style.transform=`translateX(${be.delta*B()}px)`:(be.bar.style.left=`${be.left+(be.edge==="start"?be.delta*B():0)}px`,be.bar.style.width=`${be.size+(be.edge==="start"?-1:1)*be.delta*B()}px`))},{signal:q}),document.addEventListener("pointerup",()=>{if(!be)return;const Q=be;be=null,w&&(ue(Q.id,{start:Ze(Q.start+(Q.edge==="end"?0:Q.delta)),end:Ze(Q.end+(Q.edge==="start"?0:Q.delta))}),A("排期已更新"))},{signal:q}),e.initialRange?ve(e.initialRange):I(),{setRange:ve,onInteraction:N.onInteraction,setData(Q,J){Mn(Q,J),t=structuredClone(Q),n=structuredClone(J),o=new Set(t.map(ie=>ie.id)),R.hidden=!0,M.hidden=!0,I()},getItems:()=>structuredClone(n),updateItem:ue,setPeople(Q){o=new Set(Q.filter(J=>t.some(ie=>ie.id===J))),I()},destroy(){C=!0,F.abort(),clearTimeout(T),N.destroy(),L.remove()}}}const Wi={pencil:'<path d="m15 3 6 6-12 12H3v-6ZM13 5l6 6"/>',transition:'<path d="M4 8h14l-4-4m4 4-4 4M20 16H6l4-4m-4 4 4 4"/>',expand:'<path d="M15 3h6v6m0-6-7 7M9 21H3v-6m0 6 7-7"/>',check:'<circle cx="12" cy="12" r="8"/><path d="m8 12 3 3 5-6"/>',plus:'<circle cx="12" cy="12" r="9"/><path d="M12 7v10M7 12h10"/>',add:'<path d="M12 4v16M4 12h16"/>',close:'<path d="m6 6 12 12M6 18 18 6"/>',back:'<path d="m15 18-6-6 6-6"/>',filter:'<path d="M3 4h18l-7 8v7l-4 2v-9Z"/>',sort:'<path d="M4 5h16M4 11h11M4 17h6"/>',group:'<path d="m3 13 10-10h8v8L11 21Z"/><circle cx="17" cy="7" r="1"/>',color:'<path d="m10 3 10 10-8 8L2 11Z M4 13h14M10 3 7 0"/><path d="M21 17q4 5 0 5q-4 0 0-5"/>',search:'<circle cx="10" cy="10" r="6"/><path d="m15 15 6 6M2 3h5M2 9h2M2 16h5"/>',save:'<path d="M4 3h13l4 4v14H3V3h1ZM8 3v7h8V3M7 21v-7h10v7"/>',down:'<path d="m6 9 6 6 6-6"/>',up:'<path d="m6 15 6-6 6 6"/>',link:'<path d="m10 14 4-4M8 16l-1 1a4 4 0 0 1-6-6l5-5a4 4 0 0 1 6 0M16 8l1-1a4 4 0 0 1 6 6l-5 5a4 4 0 0 1-6 0"/>',edit:'<rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><path d="M14 17h8m-4-4v8"/>',book:'<path d="M6 3h12v18l-6-4-6 4Z"/>',people:'<circle cx="9" cy="8" r="3"/><path d="M3 21v-3a6 6 0 0 1 12 0v3ZM17 4a3 3 0 0 1 0 6M18 14q4 1 4 7"/>',table:'<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 9h18M3 14h18M9 9v11M15 9v11"/>',chart:'<circle cx="12" cy="12" r="9"/><path d="M12 3v9h9"/>',menu:'<path d="M4 6h16M4 12h12M4 18h16"/>',more:'<circle cx="5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/>',inbox:'<path d="m5 4-3 10v6h20v-6L19 4ZM2 14h6l2 3h4l2-3h6"/>'},$e=s=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${Wi[s]||Wi.check}</svg>`,Oe=(s,e,t="",n="")=>`<button type="button" data-action="${s}" class="${n}" aria-label="${H(e)}">${t?$e(t):""}${e?`<span>${H(e)}</span>`:""}</button>`,nn=(s,e,t="")=>`<select ${t}>${s.map(([n,i])=>`<option value="${H(n)}" ${n===e?"selected":""}>${H(i)}</option>`).join("")}</select>`;function Ui(s){for(let e=s.parentElement;e;e=(e==null?void 0:e.parentElement)??null){const t=(s.ownerDocument.defaultView||window).getComputedStyle(e),n=o=>!!o&&o!=="none";if(!n(t.transform)&&!n(t.filter)&&!n(t.perspective)&&!/transform|filter|perspective/.test(t.willChange??""))continue;const i=e.getBoundingClientRect();return{x:i.left+(parseFloat(t.borderLeftWidth)||0),y:i.top+(parseFloat(t.borderTopWidth)||0)}}return{x:0,y:0}}function sn(s,e,t,n,i={}){var k,C;const o=e.ownerDocument,a=o.defaultView||window;let r=!1,l=!1,d=0;const c=((k=a.requestAnimationFrame)==null?void 0:k.bind(a))??(w=>a.setTimeout(()=>w(0),0)),p=((C=a.cancelAnimationFrame)==null?void 0:C.bind(a))??a.clearTimeout.bind(a),h=()=>{var X;if(r)return;if(!e.isConnected||!s.isConnected){l||(l=!0,b(),n());return}if((X=i.paused)!=null&&X.call(i))return;(!s.style.left||s.style.left==="auto")&&(s.style.left="0px"),(!s.style.top||s.style.top==="auto")&&(s.style.top="0px");const w=e.getBoundingClientRect(),L=i.sizeElement??s,N=o.documentElement.clientWidth||a.innerWidth,y=o.documentElement.clientHeight||a.innerHeight;if(i.width!==void 0){const te=L.getBoundingClientRect(),le=L.offsetWidth&&te.width/L.offsetWidth||1,ve=i.width==="anchor"?w.width+(i.widthOffset??0):typeof i.width=="function"?i.width():i.width;L.style.width=ve==="auto"?"max-content":`${Math.min(ve,N-16)/le}px`}else if(t==="choice"){let te=Math.max(160,w.width);const le=s.getBoundingClientRect(),ve=s.offsetWidth&&le.width/s.offsetWidth||1;for(const de of s.querySelectorAll(i.optionSelector??".fc-option")){const ue=de.getBoundingClientRect();if(!ue.width)continue;const me=Math.max(0,le.width-ue.width),Ie=[de,...de.querySelectorAll(i.optionTextSelector??".fc-option-label, .fc-option-copy")],fe=Ie.map(Re=>Re.getAttribute("style"));Ie.forEach(Re=>{Re.style.width="max-content",Re.style.maxWidth="none",Re.style.flex="none",Re.style.whiteSpace="nowrap"}),te=Math.max(te,de.getBoundingClientRect().width+me),Ie.forEach((Re,be)=>{const Q=fe[be];Q===null?Re.removeAttribute("style"):Re.setAttribute("style",Q)})}s.style.width=`${Math.min(te,N-16)/ve}px`,s.style.maxWidth=`${(N-16)/ve}px`}const D=s.getBoundingClientRect(),S=L.getBoundingClientRect(),R=D.width||S.width,M=D.height||S.height,F=s.offsetWidth&&D.width/s.offsetWidth||1,q=s.offsetHeight&&D.height/s.offsetHeight||1,T=!D.width&&!D.height&&!s.offsetWidth&&!s.offsetHeight?Ui(s):void 0,B=(T==null?void 0:T.x)??D.left-(parseFloat(s.style.left)||0)*F,A=(T==null?void 0:T.y)??D.top-(parseFloat(s.style.top)||0)*q,I=(te,le,ve)=>Math.max(8,Math.min(te,ve-le-8)),$=I(t==="column"?w.left+w.width/2+1:i.align==="end"||t==="cell"?w.right-R:w.left,R,N),z=i.gap??4;let W=t==="column"?w.top+w.height/2+5:t==="below"?w.bottom+z:w.top;t==="below"&&W+M>y-8&&w.top-M-z>=8&&(W=w.top-M-z),t==="overlay"&&W+M>y-8&&(W=w.bottom-M),s.style.left=`${($-B)/F}px`,s.style.top=`${(I(W,M,y)-A)/q}px`},u=()=>{!r&&!d&&(d=c(()=>{d=0,h()}))},f=a.ResizeObserver??(typeof ResizeObserver>"u"?void 0:ResizeObserver),g=f?new f(u):void 0;g==null||g.observe(s),g==null||g.observe(e),i.sizeElement&&(g==null||g.observe(i.sizeElement));const v=new a.MutationObserver(()=>{(!e.isConnected||!s.isConnected)&&u()});v.observe(o.documentElement,{childList:!0,subtree:!0});const m=t==="choice"?new a.MutationObserver(u):void 0;m==null||m.observe(s,{childList:!0,subtree:!0,characterData:!0}),a.addEventListener("scroll",u,!0),a.addEventListener("resize",u);function b(){r=!0,p(d),g==null||g.disconnect(),v.disconnect(),m==null||m.disconnect(),a.removeEventListener("scroll",u,!0),a.removeEventListener("resize",u)}return h(),{update:h,destroy:b}}const Ln=Symbol.for("rowvia.field-popup.registry");function on(s){const e=s;return e[Ln]??(e[Ln]={live:new Map,presentations:new WeakMap})}function ir(s,e){const{presentations:t}=on(s.ownerDocument);return t.set(s,e),()=>{t.get(s)===e&&(ji(s),t.delete(s))}}function at(s,e){if(!s)return!1;const{live:t}=on(s.ownerDocument??document),n=e?[e]:[],i=new Set;for(let o=0;o<Math.max(1,n.length);o++)for(const[a,r]of t)if(!(i.has(a)||e&&!n[o].contains(r))){if(a.element.contains(s))return!0;i.add(a),n.push(a.element)}return!1}function ji(s){const{live:e}=on((s==null?void 0:s.ownerDocument)??document);for(const[t,n]of[...e])(!s||s.contains(n))&&t.close()}function rt(s){var C;const{live:e,presentations:t}=on(s.anchor.ownerDocument);let n;for(let w=s.anchor;w&&(n=(C=t.get(w))==null?void 0:C(s.anchor),!n);w=w.parentElement);s={...s,...n};const{anchor:i,content:o,width:a="anchor",gap:r=4,onDismiss:l}=s,d=i.ownerDocument,c=s.anchorMode==="element"?i:i.closest(".fc-focus-body")||i,p=d.createElement("div");p.className="rowvia-field-scope rowvia-field-popup-layer",n!=null&&n.className&&p.classList.add(...n.className.split(/\s+/).filter(Boolean));const h=d.createElement("div");h.className="rowvia-field-popup",h.append(o),p.append(h),(i.closest("dialog[open]")||d.body||d.documentElement).append(p);let u=!1,f;const g=()=>f==null?void 0:f.update(),v=()=>{u||(u=!0,ji(p),e.delete(k),d.removeEventListener("pointerdown",m,!0),d.removeEventListener("keydown",b,!0),f==null||f.destroy(),p.remove(),l==null||l())},m=w=>{const L=w.target;L&&(p.contains(L)||c.contains(L)||i.contains(L)||at(L,p))||v()},b=w=>{if(w.key!=="Escape"||[...e.keys()][e.size-1]!==k)return;if(w.preventDefault(),w.stopPropagation(),v(),s.onEscape){s.onEscape();return}const L=d.defaultView.CustomEvent;i.dispatchEvent(new L("fc-collapse",{bubbles:!0,detail:{reason:"escape"}}))},k={element:p,reposition:g,close:v};return e.set(k,i),d.addEventListener("pointerdown",m,!0),d.addEventListener("keydown",b,!0),f=sn(p,c,"below",v,{sizeElement:h,width:a,widthOffset:2,gap:r,align:s.align}),k}const an=s=>`<svg viewBox="0 0 16 16" aria-hidden="true">${s}</svg>`,sr=[{label:"节点",icon:an('<circle cx="8" cy="8" r="6.2" fill="#d0d3d6" stroke="#bbbfc4"/>')},{label:"里程碑",icon:an('<circle cx="8" cy="8" r="6.7" fill="#8f959e"/><path d="M5.5 11.5v-7h5l-1 2 1 2h-5" fill="white" stroke="white" stroke-width=".6"/>')},{label:"含未完成子任务",icon:an('<circle cx="8" cy="8" r="6.2" fill="white" stroke="#8f959e"/><path d="M5 5h6M5 8h6M5 11h4" stroke="#8f959e"/>')},...[["未开始","#d0d3d6","#bbbfc4"],["进行中","#ffdc6c","#e9ca66"],["已完成","#1ba70c","#0e8a00"]].map(([s,e,t])=>({label:s,icon:an(`<rect x="2" y="2" width="12" height="12" rx="2.8" fill="${e}" stroke="${t}"/>`)}))];function Ki(s,e={}){let t,n=!1;s.setAttribute("aria-haspopup","dialog"),s.setAttribute("aria-expanded","false");const i=()=>{if(n)return;if(t){t.close();return}const o=document.createElement("section");o.className="detail-flow-legend",o.role="dialog",o.ariaLabel=e.title??"节点图例",o.innerHTML=`<div class="detail-flow-legend-title">${H(e.title??"节点图例")}</div><div class="detail-flow-legend-grid">${(e.entries??sr).map(a=>`<span>${a.icon}${H(a.label)}</span>`).join("")}</div>`,t=rt({anchor:s,anchorMode:"element",content:o,width:e.width??456,align:"end",onDismiss(){t=void 0,s.setAttribute("aria-expanded","false")},onEscape:()=>s.focus()}),s.setAttribute("aria-expanded","true")};return s.addEventListener("click",i),{destroy(){n=!0,s.removeEventListener("click",i),t==null||t.close()}}}function or(s,e){let t;for(const i of s.querySelectorAll("[data-select-node]")){const o=e.includes(i.dataset.selectNode);i.classList.toggle("detail-flow-related",o),o&&!t&&(t=i)}const n=s.querySelector(".wf-canvas-viewport");if(t&&n){const i=t.getBoundingClientRect(),o=n.getBoundingClientRect();n.scrollLeft+=i.left+i.width/2-o.left-o.width/2}}function Rn(s){return{destroy:ir(s,t=>{const n=t.closest(".wf-field-owner, .wf-field-schedule");if(!(!n||!s.contains(n)))return n.classList.contains("wf-field-owner")?{className:"detail-node-owner-popup",width:260,align:"start"}:{className:"detail-node-schedule-popup",align:"end"}})}}function ar(s){var c,p;const e=s.detail,t=new Set(s.nodes.filter(h=>h.hiddenReason).map(h=>h.id));for(const h of(e==null?void 0:e.tags)??[])h.enabled===!1&&((c=h.nodeIds)==null||c.forEach(u=>t.add(u)));for(const h of(e==null?void 0:e.switches)??[])h.checked||(p=h.nodeIds)==null||p.forEach(u=>t.add(u));const n=s.nodes.filter(h=>!t.has(h.id)),i=new Set(n.map(h=>h.id)),o=(e==null?void 0:e.connections)??rr(s),a=(h,u=new Set)=>u.has(h)?[]:(u.add(h),i.has(h)?[h]:(o[h]??[]).flatMap(f=>a(f,new Set(u)))),r=n.flatMap(h=>[...new Set((o[h.id]??[]).flatMap(u=>a(u)))].map(u=>({from:h.id,to:u}))),l=(h,u,f,g=new Set)=>h===u?!0:g.has(h)?!1:(g.add(h),r.some(v=>v!==f&&v.from===h&&l(v.to,u,f,g))),d=r.filter(h=>!l(h.from,h.to,h));return{controls:{roles:(e==null?void 0:e.tags)??[],switches:(e==null?void 0:e.switches)??[]},graph:{nodes:n,edges:d},nodeList:n,node:h=>{var f,g,v;const u=(f=e==null?void 0:e.nodes)==null?void 0:f[h.id];return{data:h,form:((g=h.form)==null?void 0:g.filter(m=>{var b,k;return!m.visibleWhen||((k=(b=h.form)==null?void 0:b.find(C=>C.id===m.visibleWhen.fieldId))==null?void 0:k.value)===m.visibleWhen.value}))??[],fields:(u==null?void 0:u.fields)??(e==null?void 0:e.fields)??[{key:"owner",label:"负责人"},{key:"schedule",label:"总排期"}],sections:(u==null?void 0:u.sections)??((v=h.form)!=null&&v.length?["form","tasks"]:["tasks"]),completeLabel:(u==null?void 0:u.completeLabel)??"完成",deletable:(u==null?void 0:u.deletable)!==!1}}}}function rr(s){const e=[];for(const t of s.groups){const n=s.nodes.filter(i=>i.groupId===t.id);t.layout==="parallel"?e.push(n):e.push(...n.map(i=>[i]))}return e.push(...s.nodes.filter(t=>!s.groups.some(n=>n.id===t.groupId)).map(t=>[t])),Object.fromEntries(e.flatMap((t,n)=>t.map(i=>{var o;return[i.id,((o=e[n+1])==null?void 0:o.map(a=>a.id))??[]]})))}function lr(s){const e=new Map(s.nodes.map(r=>[r.id,0]));for(let r=0;r<s.nodes.length;r++){let l=!1;for(const d of s.edges){const c=Math.min(s.nodes.length-1,(e.get(d.from)??0)+1);(e.get(d.to)??0)<c&&(e.set(d.to,c),l=!0)}if(!l)break}const t=[...new Set(e.values())].sort((r,l)=>r-l).map(r=>s.nodes.filter(l=>e.get(l.id)===r));let n=64;const i=t.flatMap(r=>{const l=Math.max(...r.map(c=>Math.max(55,c.name.length*13+27))),d=r.map((c,p)=>({node:c,x:n,y:196+(p-(r.length-1)/2)*40,width:l}));return n+=l+48,d}),o=new Map(i.map(r=>[r.node.id,r])),a=s.edges.flatMap(r=>{const l=o.get(r.from),d=o.get(r.to);if(!l||!d)return[];const c=l.x+l.width,p=l.y+14,h=d.y+14;return[`M ${c} ${p} C ${c+24} ${p} ${d.x-24} ${h} ${d.x} ${h}`]});return{nodes:i,paths:a,width:n+16}}const je=s=>`<svg class="wf-icon" viewBox="0 0 16 16" aria-hidden="true">${{caret:'<path d="M13.706 6.437 8.503 12.421a.667.667 0 0 1-1.006 0L2.293 6.437a.667.667 0 0 1 .503-1.104h10.407a.667.667 0 0 1 .503 1.104Z" fill="currentColor"/>',chevron:'<path d="m4 6 4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5"/>',more:'<g fill="currentColor"><circle cx="3" cy="8" r="1.5"/><circle cx="8" cy="8" r="1.5"/><circle cx="13" cy="8" r="1.5"/></g>',expand:'<path d="M6 2H2v4m8-4h4v4M2 10v4h4m8-4v4h-4" fill="none" stroke="currentColor" stroke-width="1.3"/>',filter:'<path d="M2 3h12L9 8v5l-2-1V8Z" fill="none" stroke="currentColor" stroke-width="1.3"/>',list:'<path d="M6 4h8M6 8h8M6 12h8M2 4h1M2 8h1M2 12h1" stroke="currentColor" stroke-width="1.4"/>',detail:'<rect x="2" y="2" width="12" height="12" rx="2" fill="none" stroke="currentColor"/><path d="M5 6h6M5 9h6" stroke="currentColor"/>',plus:'<path d="M8 2v12M2 8h12" stroke="currentColor" stroke-width="1.5"/>'}[s]}</svg>`,Tn={pending:"未开始",inProgress:"进行中",done:"已完成",failed:"未通过"},dr={estimate:"填写估分","group-chat":"节点建群","delete-node":"删除节点"};function cr(s){var He,Ae;let e={...s},t=s.flow,n=t.detail,i=!1,o=!1,a=0;const r=new Map,l=document.createElement("section");l.className="workitem-module-detail-workflow rv-workflow-detail",l.dataset.module="detail:workflow";const d=document.createElement("section");d.className="workflow-node-details rv-workflow-detail",d.dataset.module="detail:tabs:schedule";const c=new AbortController;let p=s.selectedNodeId??((He=t.nodes.find(P=>P.status==="inProgress"))==null?void 0:He.id)??((Ae=t.nodes[0])==null?void 0:Ae.id)??"";const h=new Set([p]);let u="details",f="",g=1;const v=new Set,m=new Set;let b,k=[];function C(){var P;k.forEach(V=>V.destroy()),k=((P=e.presentation)==null?void 0:P.variant)==="reference"?[Rn(l),Rn(d)]:[]}let w;const L=()=>{w==null||w.destroy(),w=void 0;for(const P of[l,d])P.querySelectorAll(".wf-menu").forEach(V=>V.remove()),P.querySelectorAll(".wf-more").forEach(V=>V.setAttribute("aria-expanded","false"))},N=(P,V)=>{var Z,Y;const _=(Y=(Z=e.presentation)==null?void 0:Z.fieldLabels)==null?void 0:Y[P];return typeof _=="function"?_(V):_??V},y=new Set,D=new Set,S=new Map,R=P=>t.nodes.find(V=>V.id===P),M=P=>{var V,_,Z;return((Z=(_=(V=e.context)==null?void 0:V.people)==null?void 0:_.find(Y=>Y.id===P))==null?void 0:Z.name)??P??""},F=P=>`<i class="wf-dot ${P.status}" aria-hidden="true"></i>`,q=P=>`${F(P)}<strong>${H(P.name)}</strong><span class="wf-status ${P.status}">${Tn[P.status]}</span>`,T=()=>ar(t);function B(P,V,_){var Y;const Z=e.onCommand||(P==="configure"?e.onFlowChange:P==="action"?e.onAction:P==="create-task"?e.onCreateTask||e.onChange:P==="delete"?e.onDelete:P==="complete"&&e.onComplete||e.onChange);return!i&&!o&&!e.readonly&&!!Z&&((Y=e.can)==null?void 0:Y.call(e,P,V,_))!==!1}function A(P){var V;if(P.type==="delete-node")return"delete";if(P.type==="update-flow")return"configure";if(P.type==="action")return P.actionId==="__create-task"?"create-task":"action";if(P.patch.status)return"complete";if(P.patch.tasks){const _=R(P.nodeId);return P.patch.tasks.length>(((V=_==null?void 0:_.tasks)==null?void 0:V.length)??0)?"create-task":"toggle-task"}return"edit"}function I(P){var _,Z,Y,oe;const V={flow:t,signal:c.signal};return e.onCommand?e.onCommand(P,V):P.type==="delete-node"?(_=e.onDelete)==null?void 0:_.call(e,P.nodeId,V):P.type==="update-flow"?(Z=e.onFlowChange)==null?void 0:Z.call(e,P.detail,V):P.type==="action"?P.actionId==="__create-task"&&e.onCreateTask?e.onCreateTask(P.nodeId,V):(Y=e.onAction)==null?void 0:Y.call(e,P.nodeId,P.actionId,V):P.patch.status==="done"&&e.onComplete?e.onComplete(P.nodeId,V):(oe=e.onChange)==null?void 0:oe.call(e,P.nodeId,P.patch,P.detail,V)}async function $(P){var ce;const V="nodeId"in P?R(P.nodeId):void 0,_=P.type==="action"?P.actionId:P.type==="update-node"?Object.keys(P.patch)[0]:void 0,Z=P.type!=="update-node"||Object.keys(P.patch).every(ae=>B(A({...P,patch:{[ae]:P.patch[ae]}}),V,ae)),Y=P.type!=="update-node"||[...(P.patch.form??[]).filter(ae=>{var ee,se;return ae.value!==((se=(ee=V==null?void 0:V.form)==null?void 0:ee.find(Ne=>Ne.id===ae.id))==null?void 0:se.value)}),...(P.patch.fields??[]).filter(ae=>{var ee,se;return ae.value!==((se=(ee=V==null?void 0:V.fields)==null?void 0:ee.find(Ne=>Ne.id===ae.id))==null?void 0:se.value)})].every(ae=>{var ee,se,Ne;return((ee=e.can)==null?void 0:ee.call(e,"edit",V,ae.id))!==!1&&!((Ne=(se=V==null?void 0:V.fields)==null?void 0:se.find(ne=>ne.id===ae.id))!=null&&Ne.readonly)});if(!B(A(P),V,_)||!Z||!Y||P.type==="delete-node"&&V&&!T().node(V).deletable)return i||ie(),!1;const oe=a;o=!0,l.querySelectorAll(".wf-error").forEach(ae=>ae.remove()),te(l),te(d);let re,pe=!1;try{const ae=I(P),ee=ae instanceof Promise?await ae:ae;return i?!1:(ee&&a===oe&&(t=ee,n=ee.detail,a++),!0)}catch(ae){return re=ae,pe=!0,!1}finally{if(o=!1,!i&&(ie(),pe)){const ae=document.createElement("p");ae.className="wf-error",ae.role="alert",ae.textContent=re instanceof Error?re.message:"保存失败,请重试",l.querySelector(".wf-card-area").prepend(ae),(ce=e.onError)==null||ce.call(e,re,P)}}}function z(P){var V;(V=r.get(P))==null||V.forEach(_=>_()),r.delete(P)}function W(P,V){return{node:P,surface:V===l?"selected":"list",readonly:!B("edit",P),pending:o,signal:c.signal,context:e.context??{currentUser:e.currentUser,workItems:e.workItems},can:(_,Z)=>B(_,P,Z),commit:(_,Z="更新节点字段")=>O(P,_,Z),action:_=>$({type:"action",nodeId:P.id,actionId:_})}}function X(P){const V=[];r.set(P,V),P.querySelectorAll("[data-node]").forEach(_=>{var ce,ae;const Z=R(_.dataset.node);if(!Z)return;const Y=W(Z,P);e.renderTaskField&&_.querySelectorAll("[data-task-cell]").forEach(ee=>{var Se,Be;const se=(Se=Z.tasks)==null?void 0:Se.find(_e=>_e.id===ee.dataset.taskCell),Ne=(Be=e.taskColumns)==null?void 0:Be.call(e,Z).find(_e=>_e.key===ee.dataset.taskColumn);if(!se||!Ne)return;const ne=e.renderTaskField(ee,se,Ne,Y);ne&&V.push(ne)}),e.renderTaskActions&&_.querySelectorAll("[data-task-actions]").forEach(ee=>{var ne;const se=(ne=Z.tasks)==null?void 0:ne.find(Se=>Se.id===ee.dataset.taskActions);if(!se)return;const Ne=e.renderTaskActions(ee,se,Y);Ne&&V.push(Ne)});const oe=(P===l?"selected:":"list:")+Z.id;if(y.has(oe)){const ee=_.querySelector(".wf-card-body"),se=_.querySelector(".wf-node-schedule");ee&&(ee.hidden=!0),se&&(se.hidden=!0),(ce=_.querySelector('[data-wf="collapse-card"]'))==null||ce.setAttribute("aria-expanded","false")}if(D.has(oe)){const ee=_.querySelector(".wf-task-table");ee&&(ee.hidden=!0),(ae=_.querySelector('[data-wf="toggle-tasks"]'))==null||ae.setAttribute("aria-expanded","false")}const re=_.querySelector("[data-node-fields-slot]");if(re&&e.renderNodeFields){const ee=e.renderNodeFields(Z,re,Y);ee&&V.push(ee)}const pe=_.querySelector("[data-node-form-slot]");if(pe&&e.renderNodeForm){const ee=e.renderNodeForm(Z,pe,Y);ee&&V.push(ee)}if(e.renderField&&_.querySelectorAll("[data-field-slot]").forEach(ee=>{var ne;const se=[...T().node(Z).form,...Z.fields??[]].find(Se=>Se.id===ee.dataset.fieldSlot);if(!se)return;const Ne=e.renderField(ee,se,{...Y,readonly:Y.readonly||((ne=e.can)==null?void 0:ne.call(e,"edit",Z,se.id))===!1||"readonly"in se&&!!se.readonly});Ne&&V.push(Ne)}),e.renderSystemField&&_.querySelectorAll("[data-system-slot]").forEach(ee=>{var ne;const se=T().node(Z).fields.find(Se=>Se.key===ee.dataset.systemSlot);if(!se)return;const Ne=e.renderSystemField(ee,se,{...Y,readonly:Y.readonly||((ne=e.can)==null?void 0:ne.call(e,"edit",Z,se.key))===!1});Ne&&V.push(Ne)}),e.renderActions){const ee=_.querySelector("[data-actions-slot]");if(ee){const se=e.renderActions(ee,Z.buttons??[],Y);se&&V.push(se)}}}),te(P)}function te(P){P.setAttribute("aria-busy",String(o)),P.querySelectorAll("input,button,select").forEach(V=>{var re,pe,ce,ae,ee,se;const _=R(((re=V.closest("[data-node]"))==null?void 0:re.dataset.node)??""),Z=V.dataset.wf;let Y,oe;(V.dataset.field||V.dataset.form||V.dataset.nodeField||Z==="edit-reference"||Z==="estimate")&&(Y="edit",oe=V.dataset.field??V.dataset.form??V.dataset.nodeField??V.dataset.referenceField??"estimate"),V.dataset.task&&(Y="toggle-task"),Z==="add-task"&&(Y="create-task"),Z==="complete"&&(Y="complete"),(Z==="delete-node"||Z==="confirm-delete")&&(Y="delete"),(V.dataset.switch||V.dataset.removeTag)&&(Y="configure"),(V.dataset.action||Z==="group-chat")&&(Y="action",oe=V.dataset.action??Z),Y&&(V.disabled=!!((ae=(ce=(pe=e.presentation)==null?void 0:pe.menu)==null?void 0:ce[Z])!=null&&ae.disabledReason)||!B(Y,_,oe)||Y==="delete"&&!!_&&!T().node(_).deletable||!!V.dataset.nodeField&&!!((se=(ee=_==null?void 0:_.fields)==null?void 0:ee.find(Ne=>Ne.id===V.dataset.nodeField))!=null&&se.readonly))})}function le(P){var V;return!((V=P.fields)!=null&&V.length)||e.renderNodeForm?"":'<div class="wf-node-form"><div class="wf-form-fields">'+P.fields.map(_=>e.renderField?'<div data-field-slot="'+H(_.id)+'"></div>':"<label><span>"+H(_.label)+'</span><input data-node-field="'+H(_.id)+'" aria-label="'+H(_.label)+'" value="'+H(_.value??"")+'"></label>').join("")+"</div></div>"}function ve(P,V){return e.renderActions?V==="inline"?"<span data-actions-slot></span>":"":(P.buttons??[]).filter(_=>(_.placement??"inline")===V).map(_=>'<button type="button" data-action="'+H(_.id)+'" class="wf-custom-action '+H(_.variant??"normal")+'" title="'+H(_.hint??"")+'">'+H(_.label)+"</button>").join("")}function de(P,V){var Le,Qe,vt,wt,it,Wt;const _=`${V}:${P.id}`,Z=P.tasks??[],Y=S.get(_)??0,oe=Z.filter(we=>{var Pe;return Y===2?!we.done:Y===3?we.done:Y===1?we.owner===(((Pe=e.context)==null?void 0:Pe.currentUser)??e.currentUser??"体验官"):!0}),re=((Le=e.taskColumns)==null?void 0:Le.call(e,P))??[],pe=[{key:"name",label:"名称",width:250},{key:"owner",label:"当前负责人",width:150},{key:"deliverable",label:"交付物",expanded:!0},{key:"estimate",label:"估分"},{key:"schedule",label:"排期",width:190}],ce=e.taskColumnsMode==="replace"?re:[...pe.filter(we=>!re.some(Pe=>Pe.key===we.key)),...re],ae=we=>we.expanded??!["name","owner","estimate","actual","schedule","dependency"].includes(we.key),ee=((Qe=e.taskCanExpand)==null?void 0:Qe.call(e,P))??(re.some(ae)||Z.some(we=>!!we.deliverable)),se=ee&&v.has(_),Ne=se?ce.filter(ae):[],ne=se?ce.filter(we=>!ae(we)&&!("hideWhenExpanded"in we&&we.hideWhenExpanded)):ce,Se=' style="grid-template-columns:'+ne.map(we=>we.key==="name"?"minmax(250px,1fr)":Math.max(80,we.width??140)+"px").join(" ")+";min-width:"+ne.reduce((we,Pe)=>we+(Pe.width??(Pe.key==="name"?250:140)),0)+'px"',Be=(we,Pe)=>String(we[Pe]??""),_e=(we,Pe)=>{if(Pe==="name")return`<label><input type="checkbox" data-task="${H(we.id)}" aria-label="完成任务:${H(we.name)}" ${we.done?"checked":""}><span title="${H(we.name)}">${H(we.name)}</span>${se&&we.done?'<b class="wf-task-status">已完成</b>':""}${e.renderTaskActions?`<span class="wf-task-actions" data-task-actions="${H(we.id)}"></span>`:""}</label>`;if(re.some(Cl=>Cl.key===Pe))return`<div class="wf-task-value" data-task-cell="${H(we.id)}" data-task-column="${H(Pe)}"></div>`;const js=Pe==="owner"?M(Be(we,Pe)):Be(we,Pe);return`<span class="${Pe==="deliverable"?"wf-task-deliverable":""}" title="${H(js||"暂无")}">${H(js||(se?"待填":"暂无"))}</span>`},nt=oe.map(we=>`<div class="wf-task-row"${Se}>${ne.map(Pe=>_e(we,Pe.key)).join("")}</div>${Ne.length?`<div class="wf-task-details" data-task-details="${H(we.id)}">${Ne.map(Pe=>`<div class="wf-task-detail"><span class="wf-task-detail-label">${H(Pe.label)}</span>${_e(we,Pe.key)}</div>`).join("")}</div>`:""}`).join("");return`<section class="wf-tasks" data-module="node:task"><div class="wf-section-head"><div class="wf-task-title"><button type="button" data-wf="toggle-tasks" aria-label="折叠任务" aria-expanded="true"><span class="wf-caret">${je("caret")}</span></button><button type="button" data-wf="task-filter">${["全部任务","我参与的","未完成","已完成"][Y]} (${Z.filter(we=>we.done).length}/${Z.length}) ${je("chevron")}</button></div>${ee?`<button type="button" data-wf="expand-tasks" aria-label="${((vt=e.presentation)==null?void 0:vt.taskModeLabel)==="current"?se?"展开模式,切换为列表模式":"列表模式,切换为展开模式":se?"切换为列表模式":"切换为展开模式"}">${je((((wt=e.presentation)==null?void 0:wt.taskModeLabel)==="current"?!se:se)?"list":"expand")} ${(((it=e.presentation)==null?void 0:it.taskModeLabel)==="current"?!se:se)?"列表模式":"展开模式"}</button>`:""}</div><div class="wf-task-table ${se?"is-expanded":""}${((Wt=e.presentation)==null?void 0:Wt.variant)==="reference"&&ne.map(we=>we.key).join("|")==="name|owner|estimate|schedule|deliverable"?" detail-node-default-task-columns":""}"><div class="wf-task-row wf-task-heading"${Se}>${ne.map(we=>`<span>${H(se?we.expandedLabel??we.label:we.label)}</span>`).join("")}</div>${nt}<button type="button" class="wf-add-task" data-wf="add-task">${je("plus")} 新增任务</button></div></section>`}function ue(P,V,_){return e.renderNodeFields?'<div class="wf-fields" data-module="node:schedule" data-node-fields-slot></div>':'<div class="wf-fields" data-module="node:schedule">'+T().node(P).fields.map(Z=>{var ce,ae;const Y=P[Z.key]??"",oe=(ce=e.context)==null?void 0:ce.people,re=e.renderSystemField?'<span data-system-slot="'+Z.key+'"></span>':Z.key==="owner"&&oe?'<select data-field="owner" aria-label="'+H(Z.label)+'"><option value="">待填</option>'+(Y&&!oe.some(ee=>ee.id===Y)?'<option selected value="'+H(Y)+'">'+H(Y)+"</option>":"")+oe.map(ee=>'<option value="'+H(ee.id)+'"'+(ee.id===Y?" selected":"")+">"+H(ee.name)+"</option>").join("")+"</select>":'<input data-field="'+Z.key+'" aria-label="'+H(Z.label)+'" placeholder="待填" value="'+H(Y)+'">',pe=Z.key==="estimate"&&((ae=e.presentation)==null?void 0:ae.estimateInMenu)&&!_&&!m.has(`${V}:${P.id}`);return'<label class="wf-field-'+Z.key+'"'+(pe?" hidden":"")+"><span>"+H(N(Z.key,Z.label))+"</span>"+re+"</label>"}).join("")+"</div>"}function me(P){if(e.renderNodeForm)return'<details class="wf-node-form" data-module="node:form" open><summary><span class="wf-caret">'+je("caret")+'</span>节点表单</summary><div class="wf-form-fields" data-node-form-slot></div></details>';const V=T().node(P).form;return V.length?`<details class="wf-node-form" data-module="node:form" open><summary><span class="wf-caret">${je("caret")}</span>节点表单</summary><div class="wf-form-fields">${V.map(_=>`<div class="wf-form-row"><label><span>${H(_.label)}${_.required?"<b> *</b>":""}</span>${e.renderField?`<span data-field-slot="${H(_.id)}"></span>`:_.control==="workItemSelect"?`<button type="button" class="wf-reference-field ${_.value?"":"is-empty"}" data-wf="edit-reference" data-reference-field="${H(_.id)}" aria-label="${H(_.label)}"><span>${_.value?_.value.split(",").map(Z=>{var Y,oe,re;return H(((re=(oe=((Y=e.context)==null?void 0:Y.workItems)??e.workItems)==null?void 0:oe.find(pe=>pe.id===Z))==null?void 0:re.name)??Z)}).join("、"):"待填"}</span>${je("chevron")}</button>`:_.type==="select"?`<select data-form="${H(_.id)}" aria-label="${H(_.label)}"><option value="">待填</option>${(_.options??[]).map(Z=>`<option ${Z===_.value?"selected":""}>${H(Z)}</option>`).join("")}</select>`:`<input data-form="${H(_.id)}" type="${_.type==="date"?"date":_.type==="number"?"number":"text"}" aria-label="${H(_.label)}" placeholder="待填" value="${H(_.value||"")}">`}</label></div>`).join("")}</div></details>`:""}function Ie(P,V){var _;return V?"":`<div class="wf-card-actions" data-module="node:button-group">${P.status==="inProgress"?`<button type="button" class="wf-complete" data-wf="complete">${H(((_=e.presentation)==null?void 0:_.completeLabel)??T().node(P).completeLabel)}</button>`:`<span class="wf-state-hint">${Tn[P.status]}</span>`}${ve(P,"inline")}<button type="button" data-wf="more" class="wf-more" aria-label="节点更多操作" aria-expanded="false">${je("more")}</button></div>`}function fe(P,V=!1,_="selected",Z=!1){var re;const Y=T().node(P),oe=Z||V?"":Y.sections.map(pe=>pe==="form"?me(P):de(P,_)).join("");return`<article class="wf-card${((re=e.presentation)==null?void 0:re.variant)==="reference"?" detail-node-card":""}${m.has(`${_}:${P.id}`)||Z?" detail-node-with-estimate":""}${Z?" is-collapsed":""}" data-module="workflow:node" data-surface="${_}" data-node="${H(P.id)}"><div class="wf-node-basic" data-module="node:basic"><header class="wf-card-head"><button type="button" class="wf-card-title" data-wf="${Z?"expand-card":"collapse-card"}" aria-expanded="${!Z}"><span class="wf-caret">${je("caret")}</span>${q(P)}</button>${Ie(P,V)}</header><div class="wf-node-schedule">${ue(P,_,Z)}</div></div>${Z||V?"":`<div class="wf-card-body wf-node-sections">${le(P)}${oe}</div>`}</article>`}function Re(){var P;l.querySelector(".wf-meta").innerHTML=`<div class="wf-roles">${((n==null?void 0:n.tags)??[]).filter(V=>V.enabled!==!1).map(V=>`<span class="wf-role" style="background:${H(V.color||"#eff0f1")}">${H(V.label)}<button type="button" data-remove-tag="${H(V.id)}" aria-label="移除${H(V.label)}">×</button></span>`).join("")}</div>${n!=null&&n.tags.length&&n.switches.length?'<i class="wf-meta-divider"></i>':""}${((n==null?void 0:n.switches)??[]).map(V=>`<label class="wf-switch"><input type="checkbox" data-switch="${H(V.id)}" ${V.checked?"checked":""}>${H(V.label)}</label>`).join("")}`,l.querySelector(".wf-meta").hidden=!!((P=e.presentation)!=null&&P.hideControls),te(l)}function be(){const P=l.querySelector(".wf-canvas-viewport"),V=P.scrollLeft,{nodes:_,paths:Z,width:Y}=lr(T().graph);P.innerHTML=`<div class="wf-graph-size" style="width:${Y*g}px;height:${420*g}px"><div class="wf-graph" style="width:${Y}px;transform:scale(${g})"><svg width="${Y}" height="420" aria-hidden="true">${Z.map(oe=>`<path d="${oe}"/>`).join("")}</svg>${_.map(({node:oe,x:re,y:pe,width:ce})=>{var ae;return`<button type="button" class="wf-node ${oe.id===p?"is-selected":""}" data-select-node="${H(oe.id)}" aria-pressed="${oe.id===p}" style="left:${re}px;top:${pe}px;width:${ce}px">${F(oe)}<span>${H(oe.name)}</span>${oe.info&&((ae=t.infoField)!=null&&ae.position)&&t.infoField.position!=="none"?`<span class="wf-graph-info is-${H(t.infoField.position)}" title="${H((t.infoField.label??"")+":"+oe.info)}">${H(oe.info)}</span>`:""}</button>`}).join("")}</div></div>`,P.scrollLeft=V}function Q(){z(l);const P=R(p);l.querySelector(".wf-card-area").innerHTML=P?fe(P):'<p class="wf-empty">暂无节点</p>',X(l)}function J(){z(d),d.querySelector(".wf-list-toolbar")||(d.innerHTML=`<div class="wf-list-toolbar"><div class="wf-filter-wrap"><button type="button" data-wf="filter" class="wf-filter-button" aria-haspopup="dialog" aria-expanded="false"></button><div class="wf-filter-menu" hidden><label>节点状态<select data-status-filter aria-label="筛选节点状态"><option value="">全部状态</option>${Object.entries(Tn).map(([P,V])=>`<option value="${P}">${V}</option>`).join("")}</select></label></div></div><div class="wf-views" role="tablist" aria-label="节点视图"><button type="button" role="tab" data-view="details">${je("detail")} 节点详情</button><button type="button" role="tab" data-view="schedule">${je("list")} 排期信息</button></div></div><div class="wf-list-rows"></div>`),d.querySelector('[data-wf="filter"]').innerHTML=`${je("filter")} ${H(e.filterLabel||"筛选")} ${je("chevron")}`,d.querySelectorAll("[data-view]").forEach(P=>P.setAttribute("aria-selected",String(u===P.dataset.view))),d.querySelector(".wf-list-rows").innerHTML=T().nodeList.filter(P=>{var V;return(!f||P.status===f)&&((V=e.filterNode)==null?void 0:V.call(e,P))!==!1}).map(P=>fe(P,u==="schedule","list",!h.has(P.id)||u==="schedule")).join("")||'<p class="wf-empty">暂无匹配节点</p>',X(d)}function ie(){var P,V;L();for(const _ of[l,d])_.classList.toggle("detail-flow-presentation",((P=e.presentation)==null?void 0:P.variant)==="reference");T().graph.nodes.some(_=>_.id===p)||(p=((V=T().graph.nodes[0])==null?void 0:V.id)??""),Re(),be(),Q(),J()}function E(P){var V;i||!T().graph.nodes.some(_=>_.id===P)||(p=P,(V=e.onSelectNode)==null||V.call(e,P),be(),Q())}function O(P,V,_){return $({type:"update-node",nodeId:P.id,patch:V,detail:_})}function U(P,V,_,Z){var pe;(pe=P.querySelector(".wf-inline-editor"))==null||pe.remove();const Y=document.createElement("div");Y.className="wf-inline-editor",Y.innerHTML=`<input aria-label="${H(V)}" placeholder="${H(V)}" value="${H(_)}"><button type="button" data-save>保存</button><button type="button" data-cancel>取消</button>`,P.append(Y);const oe=Y.querySelector("input"),re=()=>{oe.value.trim()?Z(oe.value.trim()):oe.focus()};Y.querySelector("[data-save]").addEventListener("click",re),Y.querySelector("[data-cancel]").addEventListener("click",()=>Y.remove()),oe.addEventListener("keydown",ce=>{ce.key==="Enter"&&(ce.preventDefault(),re()),ce.key==="Escape"&&Y.remove()}),oe.focus()}function K(P,V,_){var ae,ee,se,Ne;const Z=(ae=V.form)==null?void 0:ae.find(ne=>ne.id===_);if(!Z)return;(ee=P.querySelector(".wf-reference-picker"))==null||ee.remove();const Y=new Set(((se=Z.value)==null?void 0:se.split(",").filter(Boolean))??[]),oe=document.createElement("div");oe.className="wf-reference-picker",oe.setAttribute("role","dialog"),oe.setAttribute("aria-label",`选择${Z.label}`),oe.innerHTML='<input aria-label="查找工作项" placeholder="搜索工作项"><div class="wf-reference-options"></div><footer><button type="button" data-cancel>取消</button><button type="button" data-save>确定</button></footer>',(Ne=Array.from(P.querySelectorAll("[data-reference-field]")).find(ne=>ne.dataset.referenceField===_))==null||Ne.after(oe);const re=oe.querySelector("input"),pe=oe.querySelector(".wf-reference-options"),ce=()=>{var Se;const ne=(((Se=e.context)==null?void 0:Se.workItems)??e.workItems??[]).filter(Be=>Be.name.includes(re.value)).slice(0,50);pe.innerHTML=ne.map(Be=>`<label><input type="checkbox" value="${H(Be.id)}" ${Y.has(Be.id)?"checked":""}><span>${H(Be.name)}</span></label>`).join("")||"<p>暂无匹配工作项</p>"};pe.addEventListener("change",ne=>{const Se=ne.target;Se.checked?Y.add(Se.value):Y.delete(Se.value)}),re.addEventListener("input",ce),oe.querySelector("[data-cancel]").addEventListener("click",()=>oe.remove()),oe.querySelector("[data-save]").addEventListener("click",()=>{var ne;return O(V,{form:(ne=V.form)==null?void 0:ne.map(Se=>Se.id===_?{...Se,value:[...Y].join(",")}:Se)},`更新${Z.label}`)}),oe.addEventListener("keydown",ne=>{ne.key==="Escape"&&oe.remove()}),ce(),re.focus()}function ge(P,V){var oe,re,pe,ce,ae,ee;const _=[...T().node(P).form,...P.fields??[]].find(se=>{var Ne;return se.required&&!((Ne=se.value)!=null&&Ne.trim())}),Z=(oe=P.tasks)==null?void 0:oe.find(se=>se.blocking&&!se.done);(re=V.querySelector(".wf-error"))==null||re.remove();const Y=(pe=P.gates)==null?void 0:pe.find(se=>!se.met);if(!(_&&((ae=(ce=e.presentation)==null?void 0:ce.renderRequiredError)!=null&&ae.call(ce,V,_,"此项必填")))){if(_||Z||Y){const se=document.createElement("p");se.className="wf-error",se.role="alert",se.textContent=_?`请先填写${_.label}`:Z?`请先完成任务:${Z.name}`:Y.label,(ee=V.querySelector(".wf-card-head"))==null||ee.after(se);return}O(P,{status:"done"},"完成节点")}}function he(P){var se,Ne,ne,Se,Be,_e,nt;const V=P.target;if(V.closest("button:disabled"))return;const _=V.closest("[data-action]");if(_){const Le=(se=_.closest("[data-node]"))==null?void 0:se.dataset.node;Le&&$({type:"action",nodeId:Le,actionId:_.dataset.action});return}const Z=V.closest("[data-select-node]");if(Z){E(Z.dataset.selectNode);return}const Y=V.closest("[data-view]");if(Y){u=Y.dataset.view,J();return}const oe=V.closest("[data-remove-tag]");if(oe&&n){$({type:"update-flow",detail:{...n,tags:n.tags.map(Le=>Le.id===oe.dataset.removeTag?{...Le,enabled:!1}:Le)}});return}const re=V.closest("[data-wf]");if(!re)return;const pe=re.dataset.wf,ce=re.closest("[data-node]"),ae=R((ce==null?void 0:ce.dataset.node)??p);if(pe==="legend"&&((Ne=e.presentation)==null?void 0:Ne.legend)!==void 0)return;if(pe==="legend"){const Le=re.closest(".wf-legend-wrap");Le.classList.toggle("is-open"),re.setAttribute("aria-expanded",String(Le.classList.contains("is-open")));return}if(pe==="filter"){if(e.onFilter)e.onFilter(re);else{const Le=d.querySelector(".wf-filter-menu");Le.hidden=!Le.hidden,re.setAttribute("aria-expanded",String(!Le.hidden))}return}if(!ae||!ce)return;const ee=`${ce.dataset.surface??"list"}:${ae.id}`;if(pe==="edit-reference"){K(ce,ae,re.dataset.referenceField);return}if(pe==="collapse-card")if(y.has(ee)?y.delete(ee):y.add(ee),d.contains(ce))h.delete(ae.id),J();else{const Le=ce.querySelector(".wf-card-body");Le.hidden=!Le.hidden,ce.querySelector(".wf-node-schedule").hidden=Le.hidden,re.setAttribute("aria-expanded",String(!Le.hidden))}else if(pe==="expand-card")y.delete(ee),h.add(ae.id),J();else if(pe==="toggle-tasks"){D.has(ee)?D.delete(ee):D.add(ee);const Le=ce.querySelector(".wf-task-table");Le.hidden=!Le.hidden,re.setAttribute("aria-expanded",String(!Le.hidden))}else if(pe==="task-filter"){const Le=ce.querySelector(".wf-task-filter-menu");if(Le){Le.remove();return}re.insertAdjacentHTML("afterend",'<div class="wf-task-filter-menu" role="menu">'+["全部任务","我参与的","未完成","已完成"].map((Qe,vt)=>`<button type="button" role="menuitem" data-wf="task-filter-option" data-task-filter="${vt}">${Qe}</button>`).join("")+"</div>")}else if(pe==="task-filter-option")S.set(ee,Number(re.dataset.taskFilter)),Q(),J();else if(pe==="expand-tasks")v.has(ee)?v.delete(ee):v.add(ee),Q(),J();else if(pe==="add-task"&&e.onCreateTask)$({type:"action",nodeId:ae.id,actionId:"__create-task"});else if(pe==="add-task")U(ce.querySelector(".wf-task-table"),"任务名称","",Le=>O(ae,{tasks:[...ae.tasks??[],{id:crypto.randomUUID(),name:Le,done:!1}]},"新增任务"));else if(pe==="complete")ge(ae,ce);else if(pe==="more"){const Le=ce.querySelector(".wf-menu");if(L(),!Le){const Qe=[...new Set([...(n==null?void 0:n.menu)??[],...Object.keys(((ne=e.presentation)==null?void 0:ne.menu)??{})])];ce.insertAdjacentHTML("beforeend",`<div class="wf-menu" role="menu">${Qe.filter(wt=>wt!=="estimate"||T().node(ae).fields.some(it=>it.key==="estimate")).map(wt=>{var Wt,we;const it=(we=(Wt=e.presentation)==null?void 0:Wt.menu)==null?void 0:we[wt];return`<button type="button" role="menuitem" data-wf="${wt}" title="${H((it==null?void 0:it.disabledReason)??"")}">${H((it==null?void 0:it.label)??dr[wt])}</button>`}).join("")}${ve(ae,"more")}</div>`),re.setAttribute("aria-expanded","true");const vt=ce.querySelector(".wf-menu");((Se=e.presentation)==null?void 0:Se.variant)==="reference"&&(vt.style.position="fixed",vt.style.right="auto",w=sn(vt,re,"below",L,{align:"end",width:192}))}te(ce)}else if(pe==="estimate")if(L(),(Be=e.presentation)!=null&&Be.estimateInMenu){m.add(ee);const Le=ce.querySelector(".wf-field-estimate");if(Le){Le.hidden=!1,ce.classList.add("detail-node-with-estimate");const Qe=Le.querySelector(".fc-detail-preview, input");Qe==null||Qe.focus(),Qe==null||Qe.click()}}else U(ce,"节点估分",ae.estimate??"",Le=>O(ae,{estimate:Le},"填写估分"));else pe==="group-chat"?$({type:"action",nodeId:ae.id,actionId:"group-chat"}):pe==="delete-node"?((_e=ce.querySelector(".wf-menu"))==null||_e.remove(),ce.insertAdjacentHTML("beforeend",'<div class="wf-delete-confirm" role="alertdialog" aria-label="删除节点"><span>删除此节点?</span><button type="button" data-wf="cancel-delete">取消</button><button type="button" data-wf="confirm-delete">删除</button></div>')):pe==="cancel-delete"?(nt=ce.querySelector(".wf-delete-confirm"))==null||nt.remove():pe==="confirm-delete"&&$({type:"delete-node",nodeId:ae.id})}function Te(P){var Z,Y,oe,re,pe,ce,ae;const V=P.target;if(!(V instanceof HTMLInputElement||V instanceof HTMLSelectElement)||V.closest("[data-node-fields-slot],[data-node-form-slot],[data-field-slot],[data-system-slot],[data-actions-slot],[data-task-cell]"))return;if(V.dataset.statusFilter!==void 0){f=V.value,J();return}if(V.dataset.switch&&n&&V instanceof HTMLInputElement){const ee=V.checked;$({type:"update-flow",detail:{...n,switches:n.switches.map(se=>se.id===V.dataset.switch?{...se,checked:ee}:se)}});return}const _=R(((Z=V.closest("[data-node]"))==null?void 0:Z.dataset.node)??"");if(_){if(V.dataset.nodeField){const ee=(Y=_.fields)==null?void 0:Y.find(se=>se.id===V.dataset.nodeField);if(ee!=null&&ee.readonly||((oe=e.can)==null?void 0:oe.call(e,"edit",_,V.dataset.nodeField))===!1){ie();return}O(_,{fields:(re=_.fields)==null?void 0:re.map(se=>se.id===V.dataset.nodeField?{...se,value:V.value}:se)},"更新节点字段")}if(V.dataset.form&&((pe=e.can)==null?void 0:pe.call(e,"edit",_,V.dataset.form))===!1){ie();return}V.dataset.field&&O(_,{[V.dataset.field]:V.value},`更新${V.ariaLabel}`),V.dataset.form&&O(_,{form:(ce=_.form)==null?void 0:ce.map(ee=>ee.id===V.dataset.form?{...ee,value:V.value}:ee)},"填写节点表单"),V.dataset.task&&V instanceof HTMLInputElement&&O(_,{tasks:(ae=_.tasks)==null?void 0:ae.map(ee=>ee.id===V.dataset.task?{...ee,done:V.checked}:ee)},"更新节点任务")}}l.innerHTML=`<div class="wf-workflow-graph" data-module="workflow:graph"><div class="wf-meta" data-module="workflow:graph:controls"></div><div class="wf-canvas" data-module="workflow:graph:canvas"><div class="wf-legend-wrap"><button type="button" class="wf-legend-trigger" data-wf="legend" aria-label="节点图例" aria-expanded="false">${je("list")}</button><div class="wf-legend" role="tooltip"><strong>节点图例</strong><span>○ 节点</span><span>◇ 里程碑</span><span>⊙ 含未完成子任务</span><span><i class="wf-dot pending"></i>未开始</span><span><i class="wf-dot inProgress"></i>进行中</span><span><i class="wf-dot done"></i>已完成</span></div></div><div class="wf-canvas-viewport" aria-label="节点流程图"></div></div></div><div class="wf-card-area" data-module="workflow:selected-node"></div>`;function xe(){var V,_,Z;b==null||b.destroy(),b=void 0;const P=l.querySelector(".wf-legend-trigger");l.querySelector(".wf-legend").hidden=((V=e.presentation)==null?void 0:V.legend)!==void 0,P.hidden=((_=e.presentation)==null?void 0:_.legend)===!1,(Z=e.presentation)!=null&&Z.legend&&(b=Ki(P,e.presentation.legend))}xe(),C();for(const P of[l,d])P.addEventListener("keydown",V=>{var Y,oe;const _=P.querySelector(".wf-menu");if(!_)return;const Z=(Y=_.closest(".wf-card"))==null?void 0:Y.querySelector(".wf-more");if(V.key==="Escape")V.preventDefault(),V.stopPropagation(),L(),Z==null||Z.focus();else if(["ArrowDown","ArrowUp","Home","End"].includes(V.key)){const re=[..._.querySelectorAll("button:not(:disabled)")],pe=re.indexOf(document.activeElement),ce=V.key==="Home"?0:V.key==="End"?re.length-1:(pe+(V.key==="ArrowDown"?1:-1)+re.length)%re.length;V.preventDefault(),(oe=re[ce])==null||oe.focus()}},{signal:c.signal}),P.addEventListener("click",he,{signal:c.signal}),P.addEventListener("change",Te,{signal:c.signal});document.addEventListener("pointerdown",P=>{P.target.closest(".wf-task-title")||(l.querySelectorAll(".wf-task-filter-menu").forEach(V=>V.remove()),d.querySelectorAll(".wf-task-filter-menu").forEach(V=>V.remove())),[l,d].some(V=>V.contains(P.target)&&P.target.closest(".wf-menu,.wf-more"))||L()},{signal:c.signal});const ye=l.querySelector(".wf-canvas-viewport");let Ce=null;ye.addEventListener("pointerdown",P=>{P.target.closest("button")||(Ce={x:P.clientX,y:P.clientY,left:ye.scrollLeft,top:ye.scrollTop},ye.setPointerCapture(P.pointerId))},{signal:c.signal}),ye.addEventListener("pointermove",P=>{Ce&&(ye.scrollLeft=Ce.left+Ce.x-P.clientX,ye.scrollTop=Ce.top+Ce.y-P.clientY)},{signal:c.signal});const Me=()=>{Ce=null};return ye.addEventListener("pointerup",Me,{signal:c.signal}),ye.addEventListener("pointercancel",Me,{signal:c.signal}),ye.addEventListener("wheel",P=>{(P.ctrlKey||P.metaKey)&&(P.preventDefault(),g=Math.max(.5,Math.min(1.5,g+(P.deltaY<0?.1:-.1))),be())},{passive:!1,signal:c.signal}),ie(),{element:l,nodeListElement:d,renderNodeDetails:()=>d,selectNode:E,getSelectedNode:()=>R(p),setFlow(P){i||(t=P,n=P.detail,a++,ie())},update(P){i||(e={...e,...P},"presentation"in P&&(xe(),C()),P.flow&&(t=P.flow,n=P.flow.detail,a++),P.selectedNodeId!==void 0&&(p=P.selectedNodeId),ie())},destroy(){i=!0,L(),b==null||b.destroy(),k.forEach(P=>P.destroy()),c.abort(),z(l),z(d),l.remove(),d.remove()}}}function G(s,e="",t){const n=document.createElement(s);return n.className=e,t!==void 0&&(n.textContent=t),n}const tt=s=>s.choices??(s.options||[]).map(e=>({id:e,label:e})),Yi=["rgba(61, 188, 47, 0.2)","rgba(0, 184, 159, 0.2)","rgba(244, 118, 189, 0.2)","rgba(149, 155, 238, 0.2)","rgba(184, 143, 255, 0.2)"],Nn=(s,e)=>{var t,n;return((t=tt(s).find(i=>i.id===e))==null?void 0:t.color)||((n=s.colors)==null?void 0:n[e])||Yi[Math.max(0,tt(s).findIndex(i=>i.id===e))%Yi.length]},Xi=s=>(Array.isArray(s)?s:s==null||s===""?[]:[s]).map(String);function ur(s,e){var t;return((t=tt(s).find(n=>n.id===e))==null?void 0:t.label)||e}function Zi(s,e="choice"){const t=G("div","fc-tags");for(const n of Xi(s.value)){const i=ur(s.field,n),o=G(e==="relation"?"button":"span","fc-tag fc-tag--"+e);e==="choice"&&(o.style.backgroundColor=Nn(s.field,n)),e==="person"&&o.append(G("span","fc-avatar",i.slice(0,1))),o.append(G("span","fc-tag-label",i)),o.tagName==="BUTTON"&&(o.type="button",o.onclick=a=>{var r;a.stopPropagation(),(r=s.onAction)==null||r.call(s,{type:"open",value:n})}),t.append(o)}return t.children.length||t.append(G("span","fc-empty","待填")),t}function In(s,e,t="choice"){var A;const n=G("div","fc-choice fc-choice--"+t);let i=Xi(e.value).slice(0,s?void 0:1);const o=new Map(tt(e.field).map(I=>[I.id,I]));let a=tt(e.field);const r=s&&(e.field.maxSelections??0)>0?e.field.maxSelections:1/0,l=G("select","fc-select");l.hidden=!0,l.multiple=s,l.disabled=e.readonly,l.required=!!e.field.required,l.ariaLabel=e.field.label;const d=G("div","fc-choice-head"),c=G("div","fc-choice-selection"),p=G("span","fc-empty fc-choice-placeholder","待填"),h=G("input","fc-choice-search");h.placeholder="",h.autocomplete="off",h.ariaLabel="输入以搜索"+e.field.label,h.disabled=e.readonly;const u=()=>{h.size=Math.max(1,[...h.value].length+1)};u();const f=G("div","fc-option-list");f.setAttribute("role",t==="radio"?"radiogroup":"group"),f.ariaLabel=e.field.label;const g=G("div","fc-error fc-choice-feedback");g.setAttribute("role","status");const v=G("div","fc-picker-status");v.setAttribute("role","status");const m=G("button","fc-retry","重试");m.type="button",m.hidden=!0;let b,k=0,C=!1,w=!1;const L=t!=="radio"&&!!((A=e.services)!=null&&A.searchOptions),N=t!=="radio"&&e.layout!=="compact"&&!e.readonly;let y;const D=()=>{const I=y;y=void 0,I==null||I.close()},S=()=>{!N||C||y||e.readonly||(y=rt({anchor:d,content:f,width:"anchor",onDismiss:()=>{y=void 0}}))},R=()=>{!N||!y||(D(),n.dispatchEvent(new Event("fc-collapse",{bubbles:!0})))},M=()=>{var I;(I=e.onSelectedOptions)==null||I.call(e,i.map($=>o.get($)).filter($=>!!$)),n.dispatchEvent(new Event("change",{bubbles:!0}))},F=()=>{var I;if(l.replaceChildren(),!s){const $=G("option");$.value="",l.append($)}for(const $ of new Set([...a.map(z=>z.id),...i])){const z=G("option","",((I=o.get($))==null?void 0:I.label)||$);z.value=$,z.selected=i.includes($),l.append(z)}s||(l.value=i[0]||"")},q=()=>{c.replaceChildren(),f.replaceChildren(),F(),!i.length&&!h.value&&c.append(p);for(const z of i){const W=o.get(z),X=G("span","fc-tag fc-tag--"+t);(t==="choice"||t==="radio")&&(X.style.backgroundColor=Nn(e.field,z)),t==="person"&&X.append(G("span","fc-avatar",((W==null?void 0:W.label)||z).slice(0,1))),X.append(G("span","fc-tag-label",((W==null?void 0:W.label)||z)+(W!=null&&W.disabled?"(已停用)":"")));const te=G("span","fc-tag-slot"),le=G("button","fc-choice-remove","×");le.type="button",le.disabled=e.readonly,le.ariaLabel="移除"+((W==null?void 0:W.label)||z),le.onclick=ve=>{ve.stopPropagation(),i=i.filter(de=>de!==z),g.textContent="",q(),h.focus(),M()},te.append(le),X.append(te),c.append(X)}const I=h.value.trim().toLocaleLowerCase(),$=a.filter(z=>!z.disabled&&(L||(z.label+" "+z.id+" "+(z.description||"")).toLocaleLowerCase().includes(I)));for(const z of $){const W=G("button","fc-option");W.type="button",W.dataset.value=z.id,W.disabled=e.readonly||w;const X=i.includes(z.id);W.classList.toggle("selected",X),W.setAttribute(t==="radio"?"aria-checked":"aria-pressed",String(X)),t==="radio"&&W.setAttribute("role","radio");const te=G("span","fc-option-label"+(t==="choice"?" fc-tag":""),z.label);t==="choice"&&(te.style.backgroundColor=Nn(e.field,z.id)),t==="person"&&W.append(G("span","fc-avatar",z.label.slice(0,1))),t==="relation"&&W.append(G("span","fc-relation-icon","↗"));const le=G("span","fc-option-copy");le.append(te),z.description&&le.append(G("small","fc-option-description",z.description)),W.append(le,G("span","fc-option-mark",X?"✓":"")),W.onclick=ve=>{if(ve.stopPropagation(),!e.readonly){if(!s)i=[z.id];else if(X)i=i.filter(de=>de!==z.id);else{const de=z.exclusive?[]:i.filter(ue=>{var me;return!((me=o.get(ue))!=null&&me.exclusive)});if(de.length>=r){g.textContent="最多可选择 "+r+" 项";return}i=[...de,z.id]}g.textContent="",s||(h.value="",u()),q(),f.querySelectorAll("button").forEach(de=>{de.dataset.value===z.id&&de.focus()}),M(),!s&&N&&R()}},f.append(W)}!$.length&&!w&&f.append(G("p","fc-empty fc-choice-empty","暂无匹配选项"))},T=async()=>{b==null||b.abort();const I=++k;b=new AbortController,w=!0,m.hidden=!0,v.textContent="加载中…",n.setAttribute("aria-busy","true"),q();try{const $=await e.services.searchOptions(e.field,h.value.trim(),b.signal);if(C||I!==k)return;a=$,$.forEach(z=>o.set(z.id,z)),v.textContent=""}catch{if(C||I!==k)return;a=[],v.textContent="加载失败,请重试",m.hidden=!1}finally{!C&&I===k&&(w=!1,n.setAttribute("aria-busy","false"),q())}};h.oninput=()=>{u(),L?T():q()},h.onfocus=()=>S(),d.onclick=I=>{I.target.closest("button")||h.focus()},m.onclick=()=>void T();const B=I=>{if(!["ArrowDown","ArrowUp","ArrowLeft","ArrowRight","Home","End"].includes(I.key))return;const $=[...f.querySelectorAll("button:not(:disabled)")];if(!$.length)return;I.preventDefault();const z=$.indexOf(document.activeElement),W=I.key==="Home"?0:I.key==="End"?$.length-1:(z+(I.key==="ArrowUp"||I.key==="ArrowLeft"?-1:1)+$.length)%$.length;$[W].focus()};if(f.onkeydown=B,h.onkeydown=I=>{I.key==="ArrowDown"&&(S(),B(I))},l.onchange=()=>{i=[...l.selectedOptions].map(I=>I.value).filter(Boolean),q()},d.append(c),t!=="radio"&&d.append(h),N){const I=G("span","fc-field-chevron");I.setAttribute("aria-hidden","true"),d.append(I),n.append(l,d,v,m,g)}else n.append(l,d,v,f,m,g);return q(),L&&!e.readonly&&T(),{element:n,content:N?f:void 0,read:()=>s?[...i]:i[0]||"",validate:()=>e.field.required&&!i.length?"请选择一个选项":i.length>r?"最多可选择 "+r+" 项":void 0,focus:()=>{var I;if(t==="radio"){(I=f.querySelector("button"))==null||I.focus();return}h.focus(),S()},deactivate:()=>{h.value="",u(),D()},destroy:()=>{C=!0,++k,b==null||b.abort(),D()}}}const hr=new Set("P DIV BR STRONG B EM I U S STRIKE UL OL LI BLOCKQUOTE H1 H2 H3 H4 H5 SPAN FONT A IMG PRE CODE HR TABLE THEAD TBODY TR TH TD INPUT".split(" ")),Qi=s=>/^(https?:\/\/|mailto:)/i.test(s.trim());function yt(s){const e=document.createElement("template");e.innerHTML=String(s??"");const t=n=>{for(const i of[...n.childNodes]){if(i.nodeType!==1)continue;const o=i;if(["SCRIPT","STYLE","IFRAME","OBJECT","SVG","MATH"].includes(o.tagName)){o.remove();continue}if(t(o),!hr.has(o.tagName)){o.replaceWith(...o.childNodes);continue}if(o.tagName==="INPUT"&&o.getAttribute("type")!=="checkbox"){o.remove();continue}const a=o.getAttribute("href")||"",r=o.getAttribute("src")||"",l=o.getAttribute("alt")||"",d=o.getAttribute("data-person-id"),c=o.hasAttribute("checked"),p=o.getAttribute("data-task")==="true",h=["color","background-color","text-align","margin-left","font-weight","font-style","text-decoration-line"].map(f=>[f,o.style.getPropertyValue(f)]),u=o.tagName==="FONT"?o.getAttribute("color"):null;for(const f of[...o.attributes])o.removeAttribute(f.name);for(const[f,g]of h)(f==="color"||f==="background-color"?/^(#[a-f\d]{3,8}|rgba?\([\d.,%\s]+\)|[a-z]+)$/i.test(g):f==="text-align"?/^(left|center|right|justify)$/.test(g):f==="margin-left"?/^\d{1,3}px$/.test(g):/^(bold|normal|italic|underline|line-through|[1-9]00)$/.test(g))&&o.style.setProperty(f,g);if(u&&/^(#[a-f\d]{3,8}|[a-z]+)$/i.test(u)&&(o.style.color=u),o.tagName==="A"&&Qi(a)&&(o.setAttribute("href",a.trim()),o.setAttribute("target","_blank"),o.setAttribute("rel","noopener noreferrer")),o.tagName==="IMG"){if(!/^https?:\/\//i.test(r.trim())){o.remove();continue}o.setAttribute("src",r.trim()),o.setAttribute("alt",l),o.setAttribute("loading","lazy"),o.setAttribute("referrerpolicy","no-referrer")}o.tagName==="SPAN"&&d&&(o.setAttribute("data-person-id",d),o.setAttribute("contenteditable","false")),o.tagName==="INPUT"&&(o.setAttribute("type","checkbox"),o.setAttribute("contenteditable","false"),c&&o.setAttribute("checked","")),p&&o.tagName==="LI"&&o.setAttribute("data-task","true")}};return t(e.content),e.innerHTML}const An={undo:'<path d="M9 5 4 10l5 5M4 10h10a6 6 0 0 1 0 12"/>',redo:'<path d="m15 5 5 5-5 5m5-5H10a6 6 0 0 0 0 12"/>',expand:'<path d="M14 3h7v7m0-7-7 7M10 21H3v-7m0 7 7-7"/>',collapse:'<path d="M21 3l-7 7m0-7v7h7M3 21l7-7m-7 0h7v7"/>',paint:'<path d="M3 3h14v7H3zM17 6h4v8h-9v7"/>',quote:'<path d="M4 12h5v7H2v-7l5-7m10 7h5v7h-7v-7l5-7"/>',table:'<rect x="3" y="3" width="18" height="18" rx="1"/><path d="M3 9h18M3 15h18M9 3v18M15 3v18"/>',link:'<path d="m10 14 4-4m-7 7-1 1a4 4 0 0 1-6-6l5-5a4 4 0 0 1 6 0m2 10 5-5a4 4 0 0 0-6-6l-1 1"/>',task:'<rect x="3" y="3" width="18" height="18" rx="1"/><path d="m7 12 3 3 7-7"/>',indent:'<path d="M10 5h11M10 12h11M10 19h11M2 8l4 4-4 4"/>',line:'<path d="M3 12h18M3 5h3m3 0h3m3 0h3M3 19h3m3 0h3m3 0h3"/>'};function Ji(s){const e=G("div",`fc-rich${s.layout==="compact"?" fc-rich-compact":""}`),t=G("div","fc-rich-toolbar");t.setAttribute("role","toolbar"),t.ariaLabel="文本格式";const n=G("div","fc-rich-tools");t.append(n);const i=G("div","fc-rich-content");i.contentEditable=String(!s.readonly),i.setAttribute("role","textbox"),i.setAttribute("aria-multiline","true"),i.ariaLabel=s.field.label,i.tabIndex=s.readonly?-1:0,i.innerHTML=yt(s.value);const o=G("div","fc-rich-menu");o.hidden=!0;let a=null,r=!1,l=[i.innerHTML],d=0,c=!1,p=null,h,u;const f=()=>{const A=window.getSelection();A!=null&&A.rangeCount&&i.contains(A.anchorNode)&&i.contains(A.focusNode)&&(a=A.getRangeAt(0).cloneRange())},g=()=>{i.focus();const A=window.getSelection();if(!A)return;const I=a&&i.contains(a.commonAncestorContainer)?a:document.createRange();I!==a&&(I.selectNodeContents(i),I.collapse(!1)),A.removeAllRanges(),A.addRange(I),a=I},v=()=>{var I;const A=u;u=void 0,A==null||A.close(),(I=h==null?void 0:h.destroy)==null||I.call(h),h=void 0,o.hidden=!0,o.replaceChildren()},m=new Map,b=()=>{var A;m.get("撤销").disabled=s.readonly||d===0,m.get("重做").disabled=s.readonly||d===l.length-1;for(const[I,$]of[["加粗","bold"],["斜体","italic"],["下划线","underline"],["删除线","strikeThrough"],["有序列表","insertOrderedList"],["无序列表","insertUnorderedList"]]){const z=m.get(I);if(!z)continue;const W=!!((A=document.queryCommandState)!=null&&A.call(document,$));z.classList.toggle("active",W),z.setAttribute("aria-pressed",String(W))}},k=()=>{c||(i.innerHTML!==l[d]&&(l=l.slice(0,d+1),l.push(i.innerHTML),l.length>100&&l.shift(),d=l.length-1),f(),b())},C=()=>{k(),i.dispatchEvent(new Event("change",{bubbles:!0}))},w=A=>{const I=d+A;I<0||I>=l.length||(d=I,c=!0,i.innerHTML=l[d],a=null,g(),c=!1,b(),i.dispatchEvent(new Event("change",{bubbles:!0})))},L=(A,I)=>{s.readonly||(g(),document.execCommand(A,!1,I),f(),v(),C())},N=A=>{if(s.readonly)return;g();const I=window.getSelection().getRangeAt(0);I.deleteContents(),I.insertNode(A),I.setStartAfter(A),I.collapse(!0),a=I.cloneRange(),v(),C()},y=(A,I,$,z=!0)=>{const W=G("button",z?"fc-rich-tool fc-rich-advanced":"fc-rich-tool");return W.type="button",W.ariaLabel=A,W.title=A,W.disabled=s.readonly,An[I]?W.innerHTML=`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${An[I]}</svg>`:W.textContent=I,W.onmousedown=X=>{X.preventDefault(),f()},W.onclick=X=>{X.stopPropagation(),$()},n.append(W),m.set(A,W),W},D=(A,I)=>{if(!s.readonly){if(f(),!o.hidden&&o.ariaLabel===A){v();return}v(),o.className="fc-rich-menu",o.ariaLabel=A,o.hidden=!1,u=rt({anchor:m.get(A),anchorMode:"element",content:o,width:"auto",onDismiss:v,onEscape:g}),I(),u==null||u.reposition()}},S=(A,I)=>{const $=G("button","fc-rich-menu-option",A);return $.type="button",$.onmousedown=z=>z.preventDefault(),$.onclick=z=>{z.stopPropagation(),I()},o.append($),$};y("撤销","undo",()=>w(-1),!1),y("重做","redo",()=>w(1),!1),y("格式刷","paint",()=>{f();const A=a==null?void 0:a.startContainer,I=(A==null?void 0:A.nodeType)===1?A:A==null?void 0:A.parentElement;!I||!i.contains(I)||(p={tag:/^(B|STRONG|I|EM|U|S)$/.test(I.tagName)?I.tagName.toLowerCase():"span",css:I.getAttribute("style")||""},m.get("格式刷").classList.add("active"))}),y("正文样式","Aa⌄",()=>D("正文样式",()=>{for(const[A,I]of[["正文","p"],["标题 1","h1"],["标题 2","h2"],["标题 3","h3"],["标题 4","h4"],["标题 5","h5"]])S(A,()=>L("formatBlock",I))}));const R=["#1f2329","#8f959e","#ffffff","#f54a45","#ff8800","#ffc60a","#34c724","#14b8a6","#3370ff","#7f3bf5","#f7cdd9","#fce2cf","#fff3b8","#d9f5d6","#d6e8ff","#e9ddfa"];for(const[A,I,$]of[["文字颜色","A⌄","foreColor"],["背景高亮","▰⌄","hiliteColor"]])y(A,I,()=>D(A,()=>{o.classList.add("fc-rich-colors");for(const z of R){const W=S(z,()=>L($,z));W.textContent="",W.style.backgroundColor=z,W.ariaLabel=`${A} ${z}`}S("清除",()=>L($,$==="foreColor"?"#1f2329":"transparent"))}));for(const[A,I,$]of[["加粗","B","bold"],["斜体","I","italic"],["下划线","U","underline"],["删除线","S","strikeThrough"]])y(A,I,()=>L($));y("对齐","☰⌄",()=>D("对齐",()=>{for(const[A,I]of[["左对齐","justifyLeft"],["居中对齐","justifyCenter"],["右对齐","justifyRight"],["两端对齐","justifyFull"]])S(A,()=>L(I))})),y("有序列表","1≡",()=>L("insertOrderedList")),y("无序列表","•≡",()=>L("insertUnorderedList")),y("任务列表","task",()=>{g();const A=window.getSelection().getRangeAt(0),I=G("ul"),$=G("li");$.dataset.task="true";const z=G("input");z.type="checkbox",z.contentEditable="false",$.append(z,A.extractContents()),$.textContent||$.append(document.createTextNode("待办事项")),I.append($),N(I)}),y("引用","quote",()=>L("formatBlock","blockquote")),y("缩进","indent",()=>D("缩进",()=>{S("增加缩进",()=>L("indent")),S("减少缩进",()=>L("outdent"))})),y("分隔线","line",()=>N(G("hr"))),y("表格","table",()=>D("表格",()=>{const A=G("p","","选择行列"),I=G("div","fc-rich-table-grid");o.append(A,I);for(let $=1;$<=6;$++)for(let z=1;z<=6;z++){const W=G("button");W.type="button",W.ariaLabel=`${$}行${z}列表格`,W.dataset.row=String($),W.dataset.col=String(z),W.onmousedown=X=>X.preventDefault(),W.onmouseenter=()=>{A.textContent=`${$} × ${z}`,I.querySelectorAll("button").forEach(X=>X.classList.toggle("active",Number(X.dataset.row)<=$&&Number(X.dataset.col)<=z))},W.onclick=()=>{const X=G("table"),te=G("tbody");for(let ve=0;ve<$;ve++){const de=G("tr");for(let ue=0;ue<z;ue++){const me=G("td");me.append(G("br")),de.append(me)}te.append(de)}X.append(te),N(X);const le=document.createRange();le.selectNodeContents(X.querySelector("td")),le.collapse(!0),a=le,g()},I.append(W)}}));const M=()=>D("链接",()=>{const A=G("input","fc-input");A.ariaLabel="链接文本",A.placeholder="输入文本",A.value=(a==null?void 0:a.toString())||"";const I=G("input","fc-input");I.ariaLabel="链接地址",I.placeholder="粘贴或输入超链接";const $=G("div","fc-error"),z=G("button","primary","确定");z.type="button",z.onclick=()=>{const W=I.value.trim();if(!Qi(W)){$.textContent="请输入 http、https 或 mailto 链接";return}const X=G("a","",A.value||W);X.href=W,X.target="_blank",X.rel="noopener noreferrer",N(X)},o.append(G("span","","文本"),A,G("span","","链接"),I,$,z),A.focus()});y("链接","link",M),y("插入图片","▧",()=>D("插入图片",()=>{const A=G("input","fc-input");A.type="url",A.ariaLabel="图片地址",A.placeholder="https:// 图片地址";const I=G("input","fc-input");I.ariaLabel="图片说明",I.placeholder="图片说明";const $=G("div","fc-error"),z=G("button","primary","插入");z.type="button",z.onclick=()=>{if(!/^https?:\/\//i.test(A.value.trim())||!A.checkValidity()){$.textContent="请输入有效的 http 或 https 图片地址";return}const W=G("img");W.src=A.value.trim(),W.alt=I.value,W.referrerPolicy="no-referrer",N(W)},o.append(A,I,$,z),A.focus()})),y("提及人员","@",()=>D("提及人员",()=>{var I;const A=In(!1,{...s,value:"",field:{...s.field,label:"人员"}},"person");h=A,o.append(A.element),A.element.addEventListener("change",$=>{var X,te;$.stopPropagation();const z=String(A.read());if(!z)return;const W=G("span","","@"+(((X=tt(s.field).find(le=>le.id===z))==null?void 0:X.label)||((te=A.element.querySelector("option:checked"))==null?void 0:te.textContent)||z));W.dataset.personId=z,W.contentEditable="false",N(W)}),(I=A.focus)==null||I.call(A)})),y("代码块","{ }",()=>L("formatBlock","pre")),y("表情","☺",()=>D("表情",()=>{o.classList.add("fc-rich-emojis");for(const A of["😀","😊","😂","👍","👏","🎉","❤️","🔥","✅","💡","🚀","👀","🤔","🙏","💪","⭐"])S(A,()=>N(document.createTextNode(A)))}));const F=y("全屏编辑","expand",()=>{f(),r=!r,e.classList.toggle("is-fullscreen",r),v(),F.ariaLabel=F.title=r?"收起全屏":"全屏编辑",F.innerHTML=`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7">${An[r?"collapse":"expand"]}</svg>`,g()},!1);F.disabled=!1,F.classList.add("fc-rich-expand"),t.append(F);const q=()=>{for(const A of n.children)A.inert=A.offsetTop>=n.clientHeight},T=typeof ResizeObserver>"u"?void 0:new ResizeObserver(q);T==null||T.observe(n);const B=A=>{const I=A.target;i.contains(I)||I.closest("input,textarea,select,[contenteditable=true]")||(A.preventDefault(),!e.contains(document.activeElement)&&!o.contains(document.activeElement)&&g())};return e.addEventListener("mousedown",B),o.addEventListener("mousedown",B),i.addEventListener("input",k),i.addEventListener("mouseup",()=>{if(f(),b(),p&&a&&!a.collapsed){const A=a,I=G(p.tag);I.style.cssText=p.css,I.append(A.extractContents()),A.insertNode(I),p=null,m.get("格式刷").classList.remove("active"),C()}}),i.addEventListener("keyup",()=>{f(),b()}),i.addEventListener("click",A=>{const I=A.target;if(I.tagName==="A"&&A.preventDefault(),I instanceof HTMLInputElement&&I.type==="checkbox"){if(s.readonly){A.preventDefault();return}I.toggleAttribute("checked",I.checked),C()}v()}),i.addEventListener("drop",A=>A.preventDefault()),i.addEventListener("paste",A=>{var $,z;if(s.readonly){A.preventDefault();return}A.preventDefault(),f();const I=($=A.clipboardData)==null?void 0:$.getData("text/html");if(I){const W=document.createElement("template");W.innerHTML=yt(I);const X=W.content,te=document.createTextNode("");X.append(te),g();const le=window.getSelection().getRangeAt(0);le.deleteContents(),le.insertNode(X),le.setStartAfter(te),le.collapse(!0),a=le.cloneRange(),C()}else N(document.createTextNode(((z=A.clipboardData)==null?void 0:z.getData("text/plain"))||""))}),e.addEventListener("keydown",A=>{A.key==="Escape"&&!o.hidden?(A.preventDefault(),A.stopPropagation(),v(),g()):A.key==="Escape"&&r?(A.preventDefault(),A.stopPropagation(),F.click()):!s.readonly&&(A.metaKey||A.ctrlKey)&&A.key.toLowerCase()==="z"?(A.preventDefault(),w(A.shiftKey?1:-1)):(A.metaKey||A.ctrlKey)&&A.key.toLowerCase()==="k"&&(A.preventDefault(),f(),M())}),e.append(t,i),b(),{element:e,content:o,inputRoot:e,read:()=>yt(i.innerHTML),validate:()=>{var A;return s.field.required&&!((A=i.textContent)!=null&&A.trim())&&!i.querySelector("img")?"请填写内容":void 0},focus:()=>i.focus(),deactivate:()=>{v(),r=!1,e.classList.remove("is-fullscreen"),F.ariaLabel=F.title="全屏编辑"},destroy:()=>{T==null||T.disconnect(),v()}}}const es="请输入评论(Enter 换行,⌘ + Enter 发送)",pr={reply:'<path d="M4 4h16v13h-5l-3 3-3-3H4zM8 10h8"/>',edit:'<path d="m5 15 10-10 4 4L9 19H5zM13 7l4 4M4 22h17"/>',sort:'<path d="M6 20V4m-3 3 3-3 3 3M13 6h8M13 12h6M13 18h3"/>'},$n=s=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${pr[s]}</svg>`,ts=s=>`<span class="detail-comment-avatar" aria-hidden="true">${H(s.slice(0,1))}</span>`,ns=s=>s.html===void 0?H(s.content).replace(/\n/g,"<br>"):yt(s.html);function fr(s){let e={...s};const t=typeof e.author=="string"?e.author:e.author.display;let n=e.data||e.comments||[],i,o,a=!1,r=0;const l=new AbortController,d=new Set,c=[],p=()=>{c.splice(0).forEach(T=>T())},h=(T,B)=>{var I;if(N||!(e.onSave||(T==="edit"?e.onEdit:e.onPublish))||T!=="create"&&!B)return!1;const A=(I=e.permissions)==null?void 0:I[T];return typeof A=="function"?!!B&&A(B):A===!0},u=document.createElement("section");u.className="detail-comments rowvia-field-scope rowvia-detail-module",u.dataset.module="detail:tabs:comment",u.ariaLabel="评论/备注";const f=document.createElement("ul");f.className="detail-comment-list",u.append(f);const g=document.createElement("button");g.type="button",g.className="detail-comment-load-more",g.textContent="加载更多";const v=document.createElement("div");v.setAttribute("role","alert"),u.append(g,v);let m=!1;g.onclick=async()=>{if(!(N||m||!e.hasMore||!e.onLoadMore)){m=!0,g.disabled=!0,v.textContent="";try{await e.onLoadMore(l.signal)}catch(T){N||(v.textContent=T instanceof Error?T.message:"加载失败,请重试")}finally{m=!1,N||(g.disabled=!1,g.hidden=!e.hasMore)}}};const b=document.createElement("div");b.className="detail-comment-composer rowvia-field-scope rowvia-detail-module",b.dataset.module="detail:comment:composer",b.innerHTML=`${ts(t)}<div class="detail-comment-compose-main"></div>`;const k=b.lastElementChild;let C,w,L=!1,N=!1;const y=()=>n.map((T,B)=>typeof T=="string"?{id:`legacy-${B}`,author:t,content:T,createdAt:""}:T);function D(T,B,A,I){var Ie;const $=Ji({field:{key:"comment",label:"评论",kind:"richText",required:!0,choices:(Ie=e.people)!=null&&Ie.length?e.people:[{id:t,label:t}]},value:T,readonly:!1,layout:"form",services:e.services});$.element.classList.add("detail-comment-editor");const z=$.element.querySelector(".fc-rich-tools");for(const fe of["插入图片","提及人员"])z.append(z.querySelector(`[aria-label="${fe}"]`));const W=$.element.querySelector(".fc-rich-content");W.dataset.placeholder=es;const X=document.createElement("div");X.className="detail-comment-editor-actions",X.innerHTML='<button type="button" data-cancel-comment>取消</button><button type="button" class="primary" data-publish-comment>发布评论</button>',$.element.append(X);const te=X.querySelector("[data-publish-comment]"),le=document.createElement("div");le.className="detail-comment-error",le.setAttribute("role","alert"),$.element.append(le);const ve=X.querySelector("[data-cancel-comment]"),de=()=>h(B.action==="edit"?"edit":B.action==="reply"?"reply":"create",y().find(fe=>fe.id===(B.id||B.replyTo))),ue=()=>{var Re;const fe=!((Re=W.textContent)!=null&&Re.replace(/[\u200b\u00a0]/g," ").trim())&&!W.querySelector("img,table,hr");W.classList.toggle("is-empty",fe),te.disabled=fe||a||!de(),ve.disabled=a,$.element.inert=a,W.contentEditable=String(!a&&de()),$.element.querySelector(".fc-rich-toolbar").inert=a||!de()},me=()=>{if(ue(),te.disabled||N)return;const fe=String($.read()),Re=document.createElement("div");Re.innerHTML=fe,a=!0,le.textContent="",$.element.setAttribute("aria-busy","true"),ue();const be=r,Q=()=>{a=!1,!N&&($.element.setAttribute("aria-busy","false"),ue())},J=E=>{if(!N){if(E!==!0&&!Array.isArray(E)){ie(new Error("保存失败,请重试"));return}Array.isArray(E)&&be===r&&(n=E),Q(),A()}},ie=E=>{N||(Q(),le.textContent=E instanceof Error?E.message:"保存失败,请重试")};try{const E={...B,html:fe,content:(Re.innerText||Re.textContent||"").trim()},O=e.onSave?e.onSave(E,l.signal):B.action==="edit"?e.onEdit(B.id,E,l.signal):e.onPublish(E,l.signal);typeof O=="object"&&O!==null&&"then"in O?Promise.resolve(O).then(J,ie):J(O)}catch(E){ie(E)}};return X.querySelector("[data-cancel-comment]").onclick=()=>{!a&&!N&&I()},te.onclick=me,$.element.addEventListener("input",ue),$.element.addEventListener("change",ue),W.addEventListener("keydown",fe=>{fe.key==="Enter"&&(fe.metaKey||fe.ctrlKey)&&!fe.isComposing&&(fe.preventDefault(),fe.stopPropagation(),me())}),ue(),$}function S(){var T;(T=C==null?void 0:C.destroy)==null||T.call(C),C=void 0,o=void 0,b.classList.remove("is-editing"),b.hidden=!h("create"),k.innerHTML=`<button type="button" class="detail-comment-placeholder">${es}</button>`,k.querySelector("button").onclick=()=>R()}function R(T){var z,W,X,te,le,ve;if(a||!h(T?"reply":"create",T))return;const B=T==null?void 0:T.author;o=T==null?void 0:T.id;const A=`${(C==null?void 0:C.read())||""}${B?`<span data-person-id="${H(((W=(z=e.people)==null?void 0:z.find(de=>de.label===B))==null?void 0:W.id)||B)}">@${H(B)}</span> `:""}`;(X=C==null?void 0:C.destroy)==null||X.call(C),C=D(A,{action:o?"reply":"create",replyTo:o},()=>{S(),M()},S),b.hidden=!1,b.classList.add("is-editing"),k.replaceChildren(C.element),(te=C.focus)==null||te.call(C);const I=C.element.querySelector(".fc-rich-content"),$=document.createRange();$.selectNodeContents(I),$.collapse(!1),(le=window.getSelection())==null||le.removeAllRanges(),(ve=window.getSelection())==null||ve.addRange($)}function M(){if(N)return;p(),g.hidden=!e.hasMore||!e.onLoadMore;const T=y().map((B,A)=>({comment:B,index:A}));L&&T.reverse(),f.innerHTML=T.length?T.map(({comment:B,index:A})=>`
|
|
91
|
+
<li class="detail-comment" data-comment-index="${A}">
|
|
92
|
+
${ts(B.author)}
|
|
93
93
|
<div class="detail-comment-main">
|
|
94
|
-
<div class="detail-comment-meta"><strong>${
|
|
94
|
+
<div class="detail-comment-meta"><strong>${H(B.author)}</strong><time>${B.createdAt?`于 ${H(B.createdAt)} 评论`:"历史评论"}</time></div>
|
|
95
95
|
<div class="detail-comment-content-wrapper">
|
|
96
|
-
<div class="detail-comment-bubble"><div class="detail-comment-content fc-value">${
|
|
97
|
-
<div class="detail-comment-actions">${h("reply",
|
|
96
|
+
<div class="detail-comment-bubble"><div class="detail-comment-content fc-value">${ns(B)}</div></div>
|
|
97
|
+
<div class="detail-comment-actions">${h("reply",B)?`<button type="button" data-comment-action="reply" aria-label="回复评论" title="回复">${$n("reply")}</button>`:""}${h("edit",B)?`<button type="button" data-comment-action="edit" aria-label="编辑评论" title="编辑">${$n("edit")}</button>`:""}</div>
|
|
98
98
|
</div>
|
|
99
99
|
</div>
|
|
100
|
-
</li>`).join(""):'<li class="detail-empty">暂无评论</li>';for(const P of f.querySelectorAll("[data-comment-index]")){const L=E()[Number(P.dataset.commentIndex)];if(e.renderActions){const M=e.renderActions(P.querySelector(".detail-comment-actions"),L);M&&c.push(M)}if(e.renderAttachments){const M=document.createElement("div");M.className="detail-comment-attachments",P.querySelector(".detail-comment-main").append(M);const $=e.renderAttachments(M,L);$&&c.push($)}}if(b&&i){const P=[...f.querySelectorAll("[data-comment-index]")].find(M=>{var $;return(($=E()[Number(M.dataset.commentIndex)])==null?void 0:$.id)===i}),L=P==null?void 0:P.querySelector(".detail-comment-content-wrapper");L?(L.classList.add("is-editing"),L.replaceChildren(b.element)):H()}f.querySelectorAll(".detail-comment-content input").forEach(P=>{P.disabled=!0})}function H(){var R;(R=b==null?void 0:b.destroy)==null||R.call(b),b=void 0,i=void 0}u.onclick=R=>{var j;if(a||I)return;const P=R.target.closest("[data-comment-action]");if(!P)return;const L=P.closest("[data-comment-index]"),M=Number(L.dataset.commentIndex),$=E()[M];if(P.dataset.commentAction==="reply"){T($);return}if(!h("edit",$))return;H(),A(),i=$.id;const z=f.querySelector(`[data-comment-index="${M}"] .detail-comment-content-wrapper`);b=G($i($),{action:"edit",id:$.id},()=>{H(),A()},()=>{H(),A()}),z.classList.add("is-editing"),z.replaceChildren(b.element),(j=b.focus)==null||j.call(b)};function q(R){if(I)return;const P=R.querySelector('[data-detail-tab="评论/备注"]');if(!P||P.querySelector(".detail-comment-sort"))return;const L=document.createElement("span");L.className="detail-comment-sort",L.setAttribute("role","button"),L.tabIndex=0,L.ariaLabel=N?"当前最新在前,切换最早在前":"当前最早在前,切换最新在前",L.title=L.ariaLabel,L.innerHTML=fn("sort"),L.classList.toggle("newest-first",N);const M=$=>{I||a||($.stopPropagation(),N=!N,A(),L.remove(),d.delete(L),q(R))};L.onclick=M,L.onkeydown=$=>{($.key==="Enter"||$.key===" ")&&($.preventDefault(),M($))},P.append(L),d.add(L)}return x(),A(),{element:u,composer:w,decorateTab:q,update:R=>{I||(e={...e,...R},(R.data||R.comments)&&(n=R.data||R.comments,++l),A(),C&&C.element.dispatchEvent(new Event("change")),b&&b.element.dispatchEvent(new Event("change")),C||(w.hidden=!h("create")))},deactivate:()=>{var R,P;(R=C==null?void 0:C.deactivate)==null||R.call(C),(P=b==null?void 0:b.deactivate)==null||P.call(b)},destroy:()=>{var R;I=!0,r.abort(),(R=C==null?void 0:C.destroy)==null||R.call(C),H(),p(),d.forEach(P=>P.remove()),d.clear(),u.onclick=null,g.onclick=null,u.replaceChildren(),w.replaceChildren()}}}const nt=s=>String(s).padStart(2,"0"),gn=s=>`${s.getFullYear()}-${nt(s.getMonth()+1)}-${nt(s.getDate())}`;function Ut(s){if(!/^(\d{4})-(\d{2})-(\d{2})$/.exec(s))return!1;const t=new Date(`${s}T12:00:00`);return!Number.isNaN(t.getTime())&&gn(t)===s}const Fi=s=>{var e,t,n;return{time:((e=s.field.dateOptions)==null?void 0:e.showTime)??s.field.kind!=="date",range:((t=s.field.dateOptions)==null?void 0:t.showRange)??!1,seconds:((n=s.field.dateOptions)==null?void 0:n.showSeconds)??s.field.kind==="datetime"}};function Di(s){const{time:e,range:t,seconds:n}=Fi(s),o=(Array.isArray(s.value)?s.value:[s.value]).slice(0,t?2:1).filter(Boolean).map(a=>e?String(a).slice(0,n?19:16).replace("T"," "):String(a).slice(0,10)).join(" 至 ");return O("div",`fc-value fc-${s.className||""}${o?"":" fc-empty"}`,o||"待填")}function Pi(s){const{time:e,range:t,seconds:n}=Fi(s),i=O("div","fc-calendar"),o=Array.isArray(s.value)?s.value:[s.value],a=[0,1].map(U=>String(o[U]||"").slice(0,10)),l=[0,1].map(U=>(String(o[U]||"").slice(11,16)||"00:00")+(n?":"+(String(o[U]||"").slice(17,19)||"00"):""));let r=0,d=!1,c=Ut(a[0])?new Date(`${a[0]}T12:00:00`):new Date;c=new Date(c.getFullYear(),c.getMonth(),1);const p=O("div","fc-calendar-panel"),h=O("div","fc-calendar-inputs"),u=[],f=()=>i.dispatchEvent(new Event("change",{bubbles:!0})),g=O("div","fc-error");g.setAttribute("role","status");const v=()=>{if(a.some(U=>U&&!Ut(U)))return"请输入有效日期,格式为 YYYY-MM-DD";if(s.field.required&&!a[0])return"请选择日期";if(t&&!!a[0]!=!!a[1])return"请选择完整的日期范围";if(e&&l.slice(0,t?2:1).some(U=>!(n?/^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/:/^([01]\d|2[0-3]):[0-5]\d$/).test(U)))return"请输入有效时间";if(t&&a[0]&&`${a[0]}T${e?l[0]:""}`>`${a[1]}T${e?l[1]:""}`)return"结束日期时间不能早于开始日期时间"},m=()=>{g.textContent=v()||"",g.textContent||f()};for(let U=0;U<(t?2:1);U++){const se=O("input","fc-input fc-calendar-date");se.type="text",se.value=a[U],se.placeholder=t?U?"结束日期":"开始日期":"YYYY-MM-DD",se.ariaLabel=t?se.placeholder:s.field.label,se.disabled=s.readonly,se.onfocus=()=>{if(r=U,d=U===1,Ut(a[U])){const Z=new Date(`${a[U]}T12:00:00`);c=new Date(Z.getFullYear(),Z.getMonth(),1)}$()},se.addEventListener("change",Z=>{if(Z.stopPropagation(),a[U]=se.value.trim(),Ut(a[U])){const W=new Date(`${a[U]}T12:00:00`);c=new Date(W.getFullYear(),W.getMonth(),1)}$(),m()}),h.append(se),u.push(se)}const w=O("div","fc-calendar-header"),k=O("button","fc-calendar-month");k.type="button",k.ariaLabel="选择年份和月份",k.setAttribute("aria-expanded","false"),k.setAttribute("aria-live","polite");const C=(U,se,Z)=>{const W=O("button","fc-calendar-nav");return W.type="button",W.ariaLabel=U,W.innerHTML=`<svg viewBox="0 0 24 24" aria-hidden="true"><path d="${Z?"M10 6l-6 6 6 6M19 6l-6 6 6 6":"M15 6l-6 6 6 6"}"/></svg>`,se>0&&W.classList.add("next"),W.onclick=()=>{c=new Date(c.getFullYear(),c.getMonth()+se,1),$()},W};w.append(C("上一年",-12,!0),C("上个月",-1,!1),k,C("下个月",1,!1),C("下一年",12,!0));const b=O("div","fc-calendar-weekdays");for(const U of["日","一","二","三","四","五","六"])b.append(O("span","",U));const N=O("div","fc-calendar-days");N.setAttribute("role","group"),N.ariaLabel="选择日期";const I=O("div","fc-calendar-period");I.hidden=!0;const E=O("button","fc-calendar-back","‹ 返回选择日期");E.type="button";const G=O("div","fc-calendar-period-columns"),x=O("div","fc-calendar-period-list");x.setAttribute("role","group"),x.ariaLabel="年份";const T=O("div","fc-calendar-period-list");T.setAttribute("role","group"),T.ariaLabel="月份";const A=O("div","fc-calendar-period-list");A.ariaLabel="秒",A.hidden=!0,G.append(x,T,A),I.append(E,G);let H="period",q=0;const R=[],P=(U=!1)=>{const se=l[q].split(":").map(Number),Z=H==="period"?[[x,c.getFullYear(),"年"],[T,c.getMonth()+1,"月"]]:[[x,se[0],"时"],[T,se[1],"分"],[A,se[2],"秒"]];for(const[W,Q,ae]of Z)for(const S of W.querySelectorAll("button")){const V=Number(S.dataset.value)===Q;S.classList.toggle("selected",V),S.setAttribute("aria-pressed",String(V)),S.textContent=`${H==="time"?nt(Number(S.dataset.value)):S.dataset.value}${V?ae:""}`,V&&U&&(W.scrollTop=Math.max(0,S.offsetTop-108))}},L=(U,se)=>{const Z=O("button","fc-calendar-period-option",String(U));return Z.type="button",Z.dataset.value=String(U),Z.ariaLabel=`${H==="time"?nt(U):U}${H==="time"?se?"时":"分":se?"年":"月"}`,Z.disabled=H==="time"&&s.readonly,Z.onclick=()=>{if(H==="time"){const W=l[q].split(":");W[se?0:1]=nt(U),l[q]=W.join(":"),R[q].textContent=l[q],P(),m();return}c.setFullYear(se?U:c.getFullYear(),se?c.getMonth():U-1,1),P(),$()},Z},M=(U,se=0)=>{if(H=U,q=se,x.replaceChildren(),T.replaceChildren(),A.replaceChildren(),A.hidden=U!=="time"||!n,x.ariaLabel=U==="period"?"年份":"小时",T.ariaLabel=U==="period"?"月份":"分钟",U==="period"){for(let Z=Math.max(1,c.getFullYear()-100);Z<=Math.min(9999,c.getFullYear()+100);Z++)x.append(L(Z,!0));for(let Z=1;Z<=12;Z++)T.append(L(Z,!1))}else{for(let Z=0;Z<24;Z++)x.append(L(Z,!0));for(let Z=0;Z<60;Z++)T.append(L(Z,!1));if(n)for(let Z=0;Z<60;Z++){const W=O("button","fc-calendar-period-option",nt(Z));W.type="button",W.dataset.value=String(Z),W.ariaLabel=nt(Z)+"秒",W.disabled=s.readonly,W.onclick=()=>{const Q=l[q].split(":");Q[2]=nt(Z),l[q]=Q.join(":"),R[q].textContent=l[q],P(),m()},A.append(W)}}i.classList.add("choosing-period"),I.hidden=!1,(U==="period"?k:R[se]).setAttribute("aria-expanded","true"),P(!0),E.focus()};k.onclick=()=>M("period"),E.onclick=()=>{i.classList.remove("choosing-period"),I.hidden=!0;const U=H==="period"?k:R[q];U.setAttribute("aria-expanded","false"),$(),U.focus()},I.addEventListener("keydown",U=>{if(U.key==="Escape"&&(U.preventDefault(),U.stopPropagation(),E.click()),!["ArrowUp","ArrowDown","Home","End"].includes(U.key))return;const se=U.target,Z=se.closest(".fc-calendar-period-list");if(!Z)return;const W=[...Z.querySelectorAll("button")],Q=W.indexOf(se),ae=U.key==="Home"?0:U.key==="End"?W.length-1:Math.max(0,Math.min(W.length-1,Q+(U.key==="ArrowDown"?1:-1)));U.preventDefault(),W[ae].focus()});function $(){k.textContent=`${c.getFullYear()}年 ${c.getMonth()+1}月`,u.forEach((se,Z)=>se.classList.toggle("active",Z===r)),N.replaceChildren();for(let se=0;se<c.getDay();se++)N.append(O("span","fc-calendar-blank"));const U=new Date(c.getFullYear(),c.getMonth()+1,0).getDate();for(let se=1;se<=U;se++){const Z=gn(new Date(c.getFullYear(),c.getMonth(),se)),W=O("button","fc-calendar-day",String(se));W.type="button",W.ariaLabel=Z,W.disabled=s.readonly;const Q=a[0]===Z||t&&a[1]===Z;W.classList.toggle("selected",Q),W.setAttribute("aria-pressed",String(Q)),W.classList.toggle("in-range",t&&!!a[0]&&!!a[1]&&Z>a[0]&&Z<a[1]),Z===gn(new Date)&&(W.classList.add("today"),W.setAttribute("aria-current","date")),W.onclick=()=>{var ae;t?d?(a[1]=Z,a[0]&&a[1]<a[0]&&([a[0],a[1]]=[a[1],a[0]]),r=0,d=!1):(a[0]=Z,a[1]="",r=1,d=!0):a[0]=Z,u.forEach((S,V)=>S.value=a[V]),$(),!t||a[1]?m():g.textContent="",(ae=N.querySelector(`[aria-label="${Z}"]`))==null||ae.focus(),(!t||a[1])&&i.dispatchEvent(new Event("fc-collapse",{bubbles:!0}))},N.append(W)}}p.append(w,b,N,I);const z=O("div","fc-calendar-time");if(e){for(let U=0;U<(t?2:1);U++){const se=O("div","fc-calendar-time-field"),Z=t?U?"结束时间":"开始时间":"时间",W=O("button","fc-input fc-calendar-time-trigger",l[U]);W.type="button",W.disabled=s.readonly,W.ariaLabel=Z,W.setAttribute("aria-expanded","false"),W.onclick=()=>M("time",U),R.push(W),se.append(O("span","",Z),W),z.append(se)}p.append(z)}const j=O("button","fc-calendar-clear","清空");j.type="button",j.disabled=s.readonly,j.onclick=()=>{a.fill(""),u.forEach(U=>U.value=""),r=0,d=!1,$(),m()},i.append(h,p,j,g);const te=()=>{const U=a.slice(0,t?2:1).map((se,Z)=>se?se+(e?`T${l[Z]}`:""):"");return t?U.some(Boolean)?U:[]:U[0]};if(s.layout==="compact"||s.readonly)return $(),{element:i,read:te,validate:v,focus:()=>{u[0].focus()},deactivate:()=>{i.classList.remove("choosing-period"),I.hidden=!0}};const ue=O("div","fc-date-mirror"),ge=()=>ue.replaceChildren(Di({...s,value:te()})),be=O("span","fc-field-chevron");be.setAttribute("aria-hidden","true");const fe=O("div","fc-date-trigger");fe.tabIndex=0,fe.setAttribute("role","button"),fe.ariaLabel=`编辑${s.field.label}`,fe.append(ue,be);let me;const Ee=()=>{const U=me;me=void 0;const se=!!U&&U.element.contains(document.activeElement);U==null||U.close(),be.classList.remove("is-open"),se&&queueMicrotask(()=>{me||!fe.isConnected||fe.dispatchEvent(new Event("fc-collapse",{bubbles:!0}))})},Me=()=>{me||s.readonly||(ge(),me=vt({anchor:fe,content:i,width:320,gap:4,onDismiss:()=>{me=void 0,be.classList.remove("is-open")}}),be.classList.add("is-open"))};return fe.onclick=()=>Me(),fe.onkeydown=U=>{(U.key==="Enter"||U.key===" ")&&(U.preventDefault(),Me())},i.addEventListener("focusout",U=>{const se=U.relatedTarget;if(se&&(i.contains(se)||fe.contains(se)||Xe(se)))return;const Z=new Event("focusout",{bubbles:!0});se&&Object.defineProperty(Z,"relatedTarget",{value:se}),fe.dispatchEvent(Z)}),i.addEventListener("change",()=>fe.dispatchEvent(new Event("change",{bubbles:!0}))),$(),ge(),{element:fe,content:i,inputRoot:fe,read:te,validate:v,focus:()=>{Me(),u[0].focus()},deactivate:Ee,destroy:Ee}}const mn=[{key:"wit_node",label:"节点"},{key:"wit_subtask",label:"任务"},{key:"wit_field",label:"字段"},{key:"wit_role_and_user",label:"角色与人员"},{key:"wit_schedule",label:"计划表"},{key:"ai_run",label:"AI 操作"},{key:"wit",label:"工作项"}];function Hi(s,e){return s.history.map((t,n)=>{var o;const i=typeof t=="string"?{actor:e,module:t.startsWith("关联素材")?"素材管理":"工作项",detail:t,createdAt:""}:t;return{...i,id:i.id||`legacy-${n}`,actorId:i.actorId||i.actor,actorKind:i.actorKind||"user",moduleKey:i.moduleKey||(i.module==="节点流程"?"wit_node":"")||((o=mn.find(a=>a.label===i.module))==null?void 0:o.key)||i.module}}).sort((t,n)=>n.createdAt.localeCompare(t.createdAt))}function Pa(s){return s.map(e=>{var t,n;return{id:e.id,actorId:(t=e.operator)==null?void 0:t.user_key,actor:((n=e.operator)==null?void 0:n.name)||"系统",actorKind:e.operator_type===0?"user":"system",moduleKey:e.op_record_type_key,module:e.op_record_type_name,detail:e.content,createdAt:new Date(e.created_at).toLocaleString("sv-SE")}})}function Oi(s,e){const t=e.keyword.trim().toLocaleLowerCase(),n=s.filter(d=>e.operatorKinds.has(d.actorKind||"user")&&(!e.operators.size||d.actorKind!=="user"||e.operators.has(d.actorId||d.actor))&&(!e.modules.size||e.modules.has(d.moduleKey||d.module))&&(!e.start||d.createdAt>=e.start.replace("T"," "))&&(!e.end||!!d.createdAt&&d.createdAt<=e.end.replace("T"," "))),i=d=>[d.actor,d.module,d.detail,d.createdAt].some(c=>c.toLocaleLowerCase().includes(t)),o=t?n.filter(i):n,a=t&&e.keywordFilter?o:n,l=Math.max(1,Math.ceil(a.length/20)),r=Math.max(1,Math.min(e.page,l));return{rows:a.slice((r-1)*20,r*20),total:n.length,matching:o.length,filteredTotal:a.length,page:r,pageCount:l}}const vn=s=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${s}</svg>`,wn=vn('<path d="M3 4h18l-7 8v7l-4 2v-9z"/>'),Ha=vn('<circle cx="10" cy="10" r="6"/><path d="m15 15 6 6"/>'),Oa=vn('<path d="m6 6 12 12M6 18 18 6"/>'),Ba=[["user","用户"],["computed","计算字段"],["automation","自动化规则"],["system","其它系统操作"]];function Va(s){let e={...s},t=e.page||{rows:e.rows||(e.records||[]).filter(E=>typeof E!="string"),nextCursor:e.nextCursor,previousCursor:e.previousCursor},n=!1,i=!1,o=0,a;const l=[],r=()=>{l.splice(0).forEach(E=>E())},d=()=>Hi({history:e.rows||e.records||[]},e.actor||""),c=()=>e.mode==="local",p=document.createElement("section");p.className="detail-history rowvia-detail-module",p.dataset.module="detail:tabs:log";const h={keyword:"",keywordFilter:!1,operatorKinds:new Set(["user","automation","system"]),operators:new Set,modules:new Set,start:"",end:"",page:1,...e.query},u=()=>({...h,operatorKinds:new Set(h.operatorKinds),operators:new Set(h.operators),modules:new Set(h.modules)});Object.assign(h,u());let f;p.innerHTML=`<div class="detail-history-search"><span>${Ha}</span><input type="search" placeholder="搜索" aria-label="搜索操作记录"><div class="detail-history-search-actions" hidden><span data-match-count aria-live="polite"></span><label><input type="checkbox" data-keyword-filter>过滤</label><button type="button" data-clear-search aria-label="清空搜索">${Oa}</button></div></div><div class="detail-history-table-wrap"><table class="detail-history-table" aria-label="操作记录"><colgroup><col style="width:172px"><col style="width:140px"><col><col style="width:252px"></colgroup><thead><tr><th scope="col"><span>操作人</span><button type="button" data-history-filter="actor" aria-label="筛选操作人" aria-haspopup="dialog" aria-expanded="false">${wn}</button></th><th scope="col"><span>操作模块</span><button type="button" data-history-filter="module" aria-label="筛选操作模块" aria-haspopup="dialog" aria-expanded="false">${wn}</button></th><th scope="col">操作详情</th><th scope="col"><span>操作时间</span><button type="button" data-history-filter="time" aria-label="筛选操作时间" aria-haspopup="dialog" aria-expanded="false">${wn}</button></th></tr></thead><tbody></tbody></table></div><div class="detail-history-pagination"></div>`;const g=document.createElement("div");g.className="detail-history-status",g.setAttribute("role","status"),p.append(g);const v=p.querySelector("input[type=search]"),m=p.querySelector("tbody"),w=E=>{const G=h.keyword.trim();if(!G)return D(E);let x=0,T="";for(let A=E.toLocaleLowerCase().indexOf(G.toLocaleLowerCase());A>=0;A=E.toLocaleLowerCase().indexOf(G.toLocaleLowerCase(),x))T+=D(E.slice(x,A))+`<mark>${D(E.slice(A,A+G.length))}</mark>`,x=A+G.length;return T+D(E.slice(x))};function k(){if(n)return;r();const E=c()?Oi(d(),h):{rows:t.rows,total:t.total,matching:t.matching,filteredTotal:t.total,page:h.page,pageCount:1};c()&&(h.page=E.page),v.value=h.keyword,p.querySelector("[data-keyword-filter]").checked=h.keywordFilter,p.setAttribute("aria-busy",String(i)),p.querySelector(".detail-history-search-actions").hidden=!h.keyword.trim(),p.querySelector("[data-match-count]").textContent=`${E.matching??"—"} / ${E.total??"—"}`,m.innerHTML=E.rows.length?E.rows.map(x=>`<tr><td><span class="detail-history-actor" title="${D(x.actor)}"><span class="detail-history-avatar" aria-hidden="true">${D(x.actor.slice(0,1))}</span><span>${w(x.actor)}</span></span></td><td title="${D(x.module)}">${w(x.module)}</td><td class="detail-history-description"><span>${w(x.detail)}</span></td><td><time>${w(x.createdAt||"历史记录")}</time></td></tr>`).join(""):'<tr><td colspan="4" class="detail-history-empty">暂无数据</td></tr>',e.renderDetail&&m.querySelectorAll(".detail-history-description > span").forEach((x,T)=>{const A=e.renderDetail(x,E.rows[T]);A&&l.push(A)}),p.querySelector("[data-history-filter=actor]").classList.toggle("active",h.operatorKinds.size!==4||!!h.operators.size),p.querySelector("[data-history-filter=module]").classList.toggle("active",!!h.modules.size);const G=p.querySelector("[data-history-filter=time]");G.classList.toggle("active",!!h.start||!!h.end),G.title=h.start?`${h.start} 至 ${h.end}`:"筛选操作时间",p.querySelector(".detail-history-pagination").innerHTML=c()?E.pageCount>1?`<span>共 ${E.filteredTotal} 条</span><button type="button" data-page="-1" ${E.page===1?"disabled":""} aria-label="上一页">‹</button><span>${E.page} / ${E.pageCount}</span><button type="button" data-page="1" ${E.page===E.pageCount?"disabled":""} aria-label="下一页">›</button>`:"":`<span>${t.total===void 0?"":`共 ${t.total} 条`}</span><button type="button" data-page="-1" ${i||!e.onQuery||t.previousCursor==null?"disabled":""} aria-label="上一页">‹</button><button type="button" data-page="1" ${i||!(e.onQuery||e.onLoadMore)||t.nextCursor==null?"disabled":""} aria-label="下一页">›</button>`}function C(E=!1){if(n)return;if(c()){k();return}if(!(E?e.onLoadMore:e.onQuery)){k();return}a==null||a.abort(),a=new AbortController;const G=++o;i=!0,g.textContent="加载中…",k();const x=u(),T=H=>{n||G!==o||(H&&(t=H,e.records=H.rows,e.rows=H.rows),i=!1,g.textContent="",k())},A=H=>{if(n||G!==o)return;i=!1,g.textContent=H instanceof Error?H.message:"加载失败,请重试";const q=document.createElement("button");q.type="button",q.textContent="重试",q.onclick=()=>C(E),g.append(q),k()};try{const H=E?e.onLoadMore(h.cursor,x,a.signal):e.onQuery(x,a.signal);H instanceof Promise||H&&"then"in H?Promise.resolve(H).then(T,A):T(H)}catch(H){A(H)}}const b=()=>{h.page=1,h.cursor=void 0,C()},N=()=>{const E=f;f=void 0,E==null||E.close()};function I(E){if(E.getAttribute("aria-expanded")==="true"){N();return}N();const G=document.createElement("div");G.className="detail-history-filter-panel",G.setAttribute("role","dialog"),G.ariaLabel=E.ariaLabel;const x=E.dataset.historyFilter,T=[],A=(H,q,R)=>{const P=document.createElement("label");return P.className="detail-history-filter-option",P.innerHTML=`<input type="checkbox" value="${D(q)}" ${R.has(q)?"checked":""}><span>${D(H)}</span>`,P.querySelector("input").onchange=L=>{L.target.checked?R.add(q):R.delete(q),b()},P};if(x==="module"){const H=d(),q=e.modules?[...e.modules]:mn.filter(R=>e.nodeFlow||!["wit_node","wit_subtask"].includes(R.key));for(const R of H)q.some(P=>P.key===R.moduleKey)||q.push({key:R.moduleKey,label:R.module});q.forEach(R=>G.append(A(R.label,R.key,h.modules)))}else if(x==="actor"){for(const[H,q]of Ba)if(G.append(A(q,H,h.operatorKinds)),H==="user"){const R=document.createElement("details");R.className="detail-history-users",R.innerHTML='<summary>请选择用户</summary><input type="search" aria-label="搜索用户" placeholder="搜索用户"><div></div>';const P=e.operators?e.operators.map($=>[$.id,$.label]):[...new Map(d().filter($=>$.actorKind==="user").map($=>[$.actorId,$.actor])).entries()],L=R.querySelector("input"),M=()=>R.querySelector("div").replaceChildren(...P.filter(([,$])=>$.includes(L.value)).map(([$,z])=>A(z,$,h.operators)));L.oninput=M,M(),G.append(R)}}else{G.classList.add("detail-history-date-panel");const H=document.createElement("div");H.className="detail-history-date-range",G.append(H);const q=["开始","结束"].map((M,$)=>Pi({field:{key:`log-date-${$}`,label:`${M}日期`,kind:"dateTime",dateOptions:{showTime:!0,showSeconds:!0}},readonly:!1,layout:"compact",value:$?h.end:h.start})),R=document.createElement("div");R.className="detail-history-filter-error",R.setAttribute("role","status");const P=()=>{const[M,$]=q.map(z=>String(z.read()));R.textContent=q.map(z=>{var j;return(j=z.validate)==null?void 0:j.call(z)}).find(Boolean)||(M&&$&&M>$?"结束日期时间不能早于开始日期时间":""),!R.textContent&&(!M&&!$?(h.start="",h.end="",b()):M&&$&&(h.start=M,h.end=$,b()))};q.forEach((M,$)=>{var ue,ge;const z=document.createElement("div");z.className="detail-history-date-column",z.setAttribute("aria-label",$?"结束日期时间":"开始日期时间");const j=M.element.querySelector(".fc-calendar-date");j.placeholder="yyyy-MM-dd";const te=M.element.querySelector(".fc-calendar-time-trigger");M.element.querySelector(".fc-calendar-inputs").append(te),(ue=M.element.querySelector(".fc-calendar-time"))==null||ue.remove(),(ge=M.element.querySelector(".fc-calendar-clear"))==null||ge.remove(),z.append(M.element),H.append(z),M.element.addEventListener("change",P),T.push(()=>{var be;return(be=M.destroy)==null?void 0:be.call(M)})}),h.end||q[1].element.querySelector('[aria-label="下个月"]').click();const L=document.createElement("button");L.type="button",L.className="detail-history-clear-dates",L.textContent="清空",L.onclick=()=>{h.start="",h.end="",b(),N()},G.append(R,L)}E.setAttribute("aria-expanded","true"),f=vt({anchor:E,anchorMode:"element",content:G,align:x==="time"?"end":"start",width:x==="time"?570:x==="actor"?240:190,onDismiss:()=>{f=void 0,E.setAttribute("aria-expanded","false"),T.forEach(H=>H())},onEscape:()=>E.focus()})}return v.oninput=()=>{h.keyword=v.value,b()},p.querySelector("[data-keyword-filter]").onchange=E=>{h.keywordFilter=E.target.checked,b()},p.onclick=E=>{if(n)return;const G=E.target.closest("button");G&&(G.dataset.historyFilter?I(G):G.hasAttribute("data-clear-search")?(v.value="",h.keyword="",b(),v.focus()):G.dataset.page&&!G.disabled&&(c()?h.page+=Number(G.dataset.page):h.cursor=(G.dataset.page==="1"?t.nextCursor:t.previousCursor)??void 0,C(!c()&&G.dataset.page==="1"&&!!e.onLoadMore)))},k(),{element:p,refresh:C,deactivate:N,update:E=>{n||(++o,a==null||a.abort(),i=!1,g.textContent="",e={...e,...E},E.query&&(Object.assign(h,E.query),Object.assign(h,u())),E.page?(t=E.page,e.records=E.page.rows,e.rows=E.page.rows):(E.rows||E.records)&&(t={...t,rows:E.rows||E.records.filter(G=>typeof G!="string")},e.rows=t.rows),"nextCursor"in E&&(t.nextCursor=E.nextCursor),"previousCursor"in E&&(t.previousCursor=E.previousCursor),N(),k())},destroy:()=>{n||(n=!0,++o,a==null||a.abort(),N(),r(),v.oninput=null,p.querySelector("[data-keyword-filter]").onchange=null,p.onclick=null,p.replaceChildren())}}}const Ga=()=>({filters:[],sorts:[],groups:[],colors:[],showTerminated:!1});function Bi(s,e){return e.every(t=>{const n=String(s[t.field]??"").toLocaleLowerCase(),i=t.value.toLocaleLowerCase();switch(t.operator){case"equals":return n===i;case"notEqual":return n!==i;case"blank":return!n;case"notBlank":return!!n;default:return n.includes(i)}})}const yn=new WeakMap;function Vi(s){let e=yn.get(s);e||(e={owners:0,added:!s.classList.contains("rowvia-work-items"),fieldAdded:!s.classList.contains("rowvia-field-scope")},yn.set(s,e),s.classList.add("rowvia-work-items","rowvia-field-scope")),e.owners++;let t=!1;return()=>{t||(t=!0,!--e.owners&&(e.added&&s.classList.remove("rowvia-work-items"),e.fieldAdded&&s.classList.remove("rowvia-field-scope"),yn.delete(s)))}}function bn(s,e,t,n){const i=document.createElement("div");i.className=e,i.innerHTML=t;const o=Vi(s);s.append(i);const a=new Ke,l=Fe(i,e,n);return a.listen(i,"click",r=>{var p;const d=r.target.closest("[data-action]");if(!d||!i.contains(d)||d.matches(":disabled"))return;const c={action:d.dataset.action,anchor:d,originalEvent:r};(p=n.onAction)==null||p.call(n,c),i.dispatchEvent(new CustomEvent("rowvia:action",{detail:c,bubbles:!0}))}),{element:i,lifecycle:a,onInteraction:l.onInteraction,destroy(){a.destroy(),l.destroy(),i.remove(),o()}}}function qa(s,e){const t=bn(s,"list-tabs",e.tabs.map(o=>`<button class="list-tab" role="tab" data-tab="${D(o)}">${D(o)}</button>`).join("")+`<div class="create-button">${Ie("create","新建","plus","primary")}${Ie("create-menu","","down","primary")}</div>`,e);t.element.setAttribute("role","tablist");let n=e.value??e.tabs[0]??"";const i=o=>{n=o,t.element.querySelectorAll("[data-tab]").forEach(a=>{const l=a.dataset.tab===n;a.classList.toggle("active",l),a.setAttribute("aria-selected",String(l))})};return t.lifecycle.listen(t.element,"click",o=>{var l;const a=o.target.closest("[data-tab]");!a||a.dataset.tab===n||(i(a.dataset.tab),(l=e.onChange)==null||l.call(e,n),t.element.dispatchEvent(new CustomEvent("rowvia:tab-change",{detail:n,bubbles:!0})))}),t.element.querySelectorAll("[data-action]").forEach(o=>{o.disabled=e.canCreate===!1}),i(n),{element:t.element,onInteraction:t.onInteraction,setValue:i,getValue:()=>n,destroy:t.destroy}}const Cn={filter:"筛选",sort:"排序",group:"分组",color:"设置颜色"};function za(s,e={}){const t=bn(s,"toolbar",Object.entries(Cn).map(([a,l])=>Ie(a,l,a)).join("")+`<div class="search-wrap hidden"><input id="search" aria-label="按标题查找" placeholder="按标题查找"><span id="matches"></span>${Ie("previous-match","","up")}${Ie("next-match","","down")}<label><input id="filter-search" type="checkbox">过滤</label>${Ie("close-search","","close")}</div>${Ie("search","查找","search")}<div class="right">${Ie("reset","重置","","hidden")}${Ie("saved-views","切换视图","down")}${Ie("save-view","存为视图","save","outline")}</div>`,e),n=t.element.querySelector("#search"),i=t.element.querySelector("#filter-search"),o=()=>{var a;(a=e.onSearch)==null||a.call(e,n.value,i.checked),t.element.dispatchEvent(new CustomEvent("rowvia:search",{detail:{query:n.value,filter:i.checked},bubbles:!0}))};return t.lifecycle.listen(n,"input",o),t.lifecycle.listen(i,"change",o),{element:t.element,onInteraction:t.onInteraction,destroy:t.destroy,setRuleCounts(a){for(const l of Object.keys(Cn)){const r=t.element.querySelector(`[data-action="${l}"]`);r.classList.toggle("is-set",!!a[l]),r.querySelector("span").textContent=Cn[l]+(a[l]?` · ${a[l]}`:"")}t.element.querySelector('[data-action="reset"]').classList.toggle("hidden",!Object.values(a).some(Boolean))}}}function _a(s,e={}){const t=bn(s,"selection-bar hidden",`${Ie("deselect","","close")}<span data-selection-count></span>${Ie("batch-status","更新状态")}${Ie("batch-owner","更新负责人")}${Ie("batch-export","导出")}${Ie("batch-archive","终止")}${Ie("deselect","取消选择")}`,e),n=t.element.querySelector("[data-selection-count]");return{element:t.element,onInteraction:t.onInteraction,destroy:t.destroy,setCount(i){t.element.classList.toggle("hidden",i===0),n.textContent=`已选择 ${i} 项`}}}function Wa(s,e){const t=Vi(s),n=ni(s,{getRowId:({data:i})=>i.id,rowHeight:37,headerHeight:32,theme:"ag-theme-quartz",rowSelection:"multiple",defaultColDef:{resizable:!0,sortable:!1,filter:!1},suppressRowClickSelection:!0,groupDefaultExpanded:-1,autoGroupColumnDef:{headerName:"分组",width:180,pinned:"left"},suppressContextMenu:!0,enableRangeSelection:!1,undoRedoCellEditing:!0,stopEditingWhenCellsLoseFocus:!0,localeText:{noRowsToShow:"暂无数据",loadingOoo:"加载中…",blank:"暂无",selectAll:"全选",filterOoo:"筛选…",searchOoo:"搜索…"},...e});return{...n,onInteraction:n.grid.onInteraction,destroy(){n.grid.destroy(),t()}}}function Ua(s){const{config:e,controls:t,fieldConfig:n,options:i,$:o,tag:a,activateCell:l,controlContext:r,openDetail:d,colorRuleMatches:c}=s;function p(u){if(u.node.group)return"";const f=u.data,g=u.colDef.field,v=document.createElement("div");v.className="rendered-cell";const m=n(g);if(m&&(m.control||!["title","status"].includes(m.kind||"text")))v.append(t.resolve(m).render(r(m,f,"cell")));else if((m==null?void 0:m.kind)==="title"){const w=document.createElement("a");w.className="item-name",w.href=`#item/${f.id}`,w.textContent=f[g],w.title=f[g],w.addEventListener("click",C=>{C.preventDefault(),clearTimeout(s.detailClickTimer.get()),C.detail===0?d(f):C.detail===1&&s.detailClickTimer.set(window.setTimeout(()=>d(f),280))}),v.append(w);const k=document.createElement("button");k.className="inline-edit",k.innerHTML=Re("pencil"),k.ariaLabel="编辑选题概要",k.onclick=C=>{C.stopPropagation(),l(v,g,f,u.rowIndex)},(m==null?void 0:m.editable)!==!1&&v.append(k)}else(m==null?void 0:m.kind)==="status"?(v.innerHTML=`${a(f.status,g)}<span class="status-days">20 天</span>`,(m==null?void 0:m.editable)!==!1&&(v.onclick=w=>{w.stopPropagation(),l(v,g,f,u.rowIndex)})):i[g]?(v.innerHTML=["creator","owner","space"].includes(g)?D(f[g]):a(f[g],g),(m==null?void 0:m.editable)!==!1&&(v.onclick=w=>{w.stopPropagation(),l(v,g,f,u.rowIndex)})):(v.innerHTML=`<span class="cell-text">${D(f[g]||"暂无")}</span>`,f[g]||v.classList.add("placeholder"));if(m&&m.editable!==!1&&!t.resolve(m).readonly&&m.kind!=="title"){const w=document.createElement("button");w.className="inline-edit field-control",w.ariaLabel=`${m.kind==="status"?"流转":"编辑"}${m.label}`,w.innerHTML=Re(m.kind==="status"?"transition":["radio","select","multiSelect","person"].includes(t.resolve(m).id)?"down":"pencil"),w.onclick=k=>{k.stopPropagation(),l(v,g,f,u.rowIndex)},v.append(w)}return v.title=String(f[g]??""),v}function h(){return[{colId:"_select",headerName:"",width:64,minWidth:64,maxWidth:64,pinned:"left",sortable:!1,resizable:!1,suppressMovable:!0,suppressMenu:!0,checkboxSelection:!0,headerCheckboxSelection:!0,rowDrag:!0,cellRenderer:u=>{if(u.node.group)return"";const f=document.createElement("div");return f.className="row-controls",f.innerHTML=`<span class="row-number">${u.rowIndex+1}</span><input class="row-checkbox" type="checkbox" aria-label="选择第 ${u.rowIndex+1} 行" ${u.node.isSelected()?"checked":""}><button class="row-open" aria-label="展开详情">${Re("expand")}</button>`,o("input",f).onclick=g=>g.stopPropagation(),o("input",f).onchange=g=>u.node.setSelected(g.target.checked),o("button",f).onclick=g=>{g.stopPropagation(),d(u.data)},f}},...e.fields.map(u=>({field:u.key,headerName:u.label,width:u.width??120,minWidth:u.minWidth??80,pinned:u.pinned,hide:u.hidden,enableRowGroup:!0,editable:!1,valueSetter:f=>u.required&&!String(f.newValue??"").trim()?!1:(f.data[u.key]=f.newValue,!0),comparator:u.options?(f,g)=>u.options.indexOf(f)-u.options.indexOf(g):void 0,sortable:!1,suppressMenu:!0,cellRenderer:p,cellStyle:({data:f})=>{const g=f&&s.view().colors.find(v=>!!v.scope&&v.scope!=="row"&&v.field===u.key&&c(f,v));return g?{backgroundColor:g.color}:{}},tooltipField:u.key,cellClass:u.kind==="title"?"name-cell":void 0,...u.column})),...s.customColumns(),{colId:"_add",hide:e.allowCustomFields===!1,suppressMovable:!0,headerName:"新增字段",width:40,minWidth:40,maxWidth:40,sortable:!1,resizable:!1,suppressMenu:!0,cellRenderer:()=>""}]}return{cell:p,columnDefs:h}}function ja(s){const{config:e,data:t,fields:n,fieldConfig:i,options:o,controls:a,$:l,showPopup:r,closePopup:d,applyView:c,save:p,resizeGrid:h,decorateHeaders:u}=s;function f(w,k,C={}){e.container.querySelectorAll(".field-picker").forEach(G=>G.remove());const b=document.createElement("div");b.className="field-picker",b.innerHTML=`<input placeholder="搜索字段" aria-label="搜索字段"><div class="picker-tabs">${["推荐","文本","选择","人员","时间","关系","其他"].map(G=>`<button data-kind="${G}">${G}</button>`).join("")}</div><div class="field-options"></div>`,e.container.append(b);const N=w.getBoundingClientRect();b.style.left=`${Math.max(12,Math.min(N.left,innerWidth-410))}px`,b.style.top=`${Math.max(12,Math.min(N.bottom+4,innerHeight-340))}px`;let I="推荐";const E=(G="推荐",x="")=>{l(".field-options",b).innerHTML=n.filter(([T,A])=>{var H,q,R,P,L,M;return(!C.available||C.available(T))&&A.includes(x)&&(G==="推荐"||G==="文本"&&["title","text","longText","richText"].includes(((H=i(T))==null?void 0:H.kind)||"text")||G==="选择"&&["status","select","multiSelect"].includes(((q=i(T))==null?void 0:q.kind)||"")||G==="人员"&&((R=i(T))==null?void 0:R.kind)==="person"||G==="时间"&&["date","dateTime"].includes(((P=i(T))==null?void 0:P.kind)||"")||G==="关系"&&((L=i(T))==null?void 0:L.kind)==="relation"||G==="其他"&&((M=i(T))==null?void 0:M.kind)==="vote")}).map(([T,A])=>`<button data-field="${D(T)}" ${C.onCreate?`data-insert="${D(T)}"`:""} class="menu-option">${Re("table")}${D(A)}</button>`).join(""),C.onCreate&&l(".field-options",b).insertAdjacentHTML("beforeend",`<button class="menu-option new-field" data-create-field>${Re("add")}添加字段</button>`),b.querySelectorAll("[data-kind]").forEach(T=>{T.classList.toggle("active",T.dataset.kind===G),T.setAttribute("aria-pressed",String(T.dataset.kind===G))})};E(),l("input",b).oninput=G=>E(I,G.target.value),b.onclick=G=>{var T;const x=G.target.closest("button");x&&(G.stopPropagation(),x.dataset.kind&&(I=x.dataset.kind,E(I,l("input",b).value)),x.dataset.field&&(b.remove(),k(x.dataset.field)),x.hasAttribute("data-create-field")&&(b.remove(),(T=C.onCreate)==null||T.call(C)))}}function g(w){const k=s.instance(),C=r(w,"表格显示设置",`<input class="column-search" placeholder="搜索字段" aria-label="搜索字段"><div class="column-options">${k.api.getAllColumns().filter(b=>!b.colId.startsWith("_")).map(b=>`<label class="column-option"><input type="checkbox" data-column="${b.colId}" ${b.visible?"checked":""}><span>${D(b.headerName)}</span><button type="button" data-pin="${b.colId}">${b.pinned?"取消冻结":"冻结"}</button></label>`).join("")}</div>`,320);C.onchange=b=>{const N=b.target;N.dataset.column&&k.columnApi.setColumnVisible(N.dataset.column,N.checked)},C.onclick=b=>{const N=b.target.closest("[data-pin]");if(N){b.preventDefault();const I=k.columnApi.getColumn(N.dataset.pin);k.columnApi.setColumnPinned(I,I.pinned?null:"left"),g(w)}},l("input",C).oninput=b=>{const N=b.target.value;C.querySelectorAll(".column-option").forEach(I=>I.hidden=!I.textContent.includes(N))}}function v(w,k,C){const b=s.instance();d();const N=E=>{var T;const x=b.columnApi.getColumnState().findIndex(A=>A.colId===k)+(C?1:0);b.columnApi.setColumnVisible(E,!0),b.columnApi.setColumnPinned(E,k==="_add"?null:((T=b.columnApi.getColumn(k))==null?void 0:T.pinned)??null),b.columnApi.moveColumn(E,Math.max(1,x)),d(),h(),u()};f(w,N,{available:E=>{var G;return!((G=b.columnApi.getColumn(E))!=null&&G.visible)},onCreate:()=>{const E=r(w,"新建字段",`<form class="new-field-form"><label>字段名称<input name="label" aria-label="字段名称" required maxlength="80"></label><label>字段类型<select name="kind" aria-label="字段类型">${a.list().map(M=>`<option value="${D(M.id)}">${D(M.label)}</option>`).join("")}</select></label><label>选项(每行一个)<textarea name="options" aria-label="字段选项"></textarea></label><label class="choice-limit hidden">最多可选数量<input name="maxSelections" type="number" min="1" step="1" placeholder="不限" aria-label="最多可选数量"></label><button class="primary" type="submit">确认创建</button></form>`,320),G=l('[name="kind"]',E),x=l('[name="options"]',E),T=x.closest("label"),A=document.createElement("div");A.className="fc-field-schema",A.hidden=!0,A.innerHTML='<p class="hint">每组记录包含以下子字段</p><div class="fc-field-schema-rows"></div><button type="button" class="fc-composite-add">+ 添加子字段</button>';const H=a.list().filter(M=>!M.readonly&&!["composite","multiPersonComposite","attitudeVote","singleVote","multiVote","detail"].includes(M.id)),q=()=>{const M=document.createElement("div");M.className="fc-field-schema-row",M.innerHTML='<input class="fc-input" aria-label="子字段名称" placeholder="子字段名称"><select class="fc-input" aria-label="子字段类型">'+H.map($=>'<option value="'+D($.id)+'">'+D($.label)+"</option>").join("")+'</select><button type="button" aria-label="移除子字段">×</button>',M.querySelector("button").onclick=()=>M.remove(),A.querySelector(".fc-field-schema-rows").append(M)};A.querySelector("button").onclick=q,q();const R=document.createElement("p");R.className="fc-service-note";const P=document.createElement("p");P.className="fc-error",P.setAttribute("role","status"),l("form",E).insertBefore(A,l('button[type="submit"]',E)),l("form",E).insertBefore(R,l('button[type="submit"]',E)),l("form",E).insertBefore(P,l('button[type="submit"]',E));const L=()=>{const M=G.value,$=M==="cascadeSingle"||M==="cascadeMulti";T.hidden=!$&&!["select","multiSelect","radio","singleVote","multiVote","person","multiPerson","relation","multiRelation"].includes(M),x.placeholder=$?"每行一条路径,例如:产品 / 设计 / 交互":"每行一个选项",l(".choice-limit",E).classList.toggle("hidden",!["multiSelect","multiPerson","multiRelation","cascadeMulti"].includes(M)),A.hidden=!["composite","multiPersonComposite"].includes(M),R.textContent=$?"用 / 分隔层级;同名上级会合并。":M==="attachment"?"上传操作由宿主上传服务提供。":M.endsWith("Vote")?"投票操作由宿主投票服务提供。":"",P.textContent=""};G.onchange=L,L(),l("form",E).onsubmit=M=>{M.preventDefault();const $=new FormData(M.target),z=String($.get("label")||"").trim();if(!z)return;const j=`field_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,te=String($.get("kind")),ue={key:j,label:z,kind:te,editable:!a.resolve({key:j,label:z,kind:te}).readonly,width:160};["select","multiSelect","person","multiPerson","radio","singleVote","multiVote","relation","multiRelation"].includes(te)&&(ue.options=[...new Set(String($.get("options")||"").split(`
|
|
101
|
-
`).map(
|
|
102
|
-
`).filter(
|
|
100
|
+
</li>`).join(""):'<li class="detail-empty">暂无评论</li>';for(const B of f.querySelectorAll("[data-comment-index]")){const A=y()[Number(B.dataset.commentIndex)];if(e.renderActions){const I=e.renderActions(B.querySelector(".detail-comment-actions"),A);I&&c.push(I)}if(e.renderAttachments){const I=document.createElement("div");I.className="detail-comment-attachments",B.querySelector(".detail-comment-main").append(I);const $=e.renderAttachments(I,A);$&&c.push($)}}if(w&&i){const B=[...f.querySelectorAll("[data-comment-index]")].find(I=>{var $;return(($=y()[Number(I.dataset.commentIndex)])==null?void 0:$.id)===i}),A=B==null?void 0:B.querySelector(".detail-comment-content-wrapper");A?(A.classList.add("is-editing"),A.replaceChildren(w.element)):F()}f.querySelectorAll(".detail-comment-content input").forEach(B=>{B.disabled=!0})}function F(){var T;(T=w==null?void 0:w.destroy)==null||T.call(w),w=void 0,i=void 0}u.onclick=T=>{var W;if(a||N)return;const B=T.target.closest("[data-comment-action]");if(!B)return;const A=B.closest("[data-comment-index]"),I=Number(A.dataset.commentIndex),$=y()[I];if(B.dataset.commentAction==="reply"){R($);return}if(!h("edit",$))return;F(),M(),i=$.id;const z=f.querySelector(`[data-comment-index="${I}"] .detail-comment-content-wrapper`);w=D(ns($),{action:"edit",id:$.id},()=>{F(),M()},()=>{F(),M()}),z.classList.add("is-editing"),z.replaceChildren(w.element),(W=w.focus)==null||W.call(w)};function q(T){if(N)return;const B=T.querySelector('[data-detail-tab="评论/备注"]');if(!B||B.querySelector(".detail-comment-sort"))return;const A=document.createElement("span");A.className="detail-comment-sort",A.setAttribute("role","button"),A.tabIndex=0,A.ariaLabel=L?"当前最新在前,切换最早在前":"当前最早在前,切换最新在前",A.title=A.ariaLabel,A.innerHTML=$n("sort"),A.classList.toggle("newest-first",L);const I=$=>{N||a||($.stopPropagation(),L=!L,M(),A.remove(),d.delete(A),q(T))};A.onclick=I,A.onkeydown=$=>{($.key==="Enter"||$.key===" ")&&($.preventDefault(),I($))},B.append(A),d.add(A)}return S(),M(),{element:u,composer:b,decorateTab:q,update:T=>{N||(e={...e,...T},(T.data||T.comments)&&(n=T.data||T.comments,++r),M(),C&&C.element.dispatchEvent(new Event("change")),w&&w.element.dispatchEvent(new Event("change")),C||(b.hidden=!h("create")))},deactivate:()=>{var T,B;(T=C==null?void 0:C.deactivate)==null||T.call(C),(B=w==null?void 0:w.deactivate)==null||B.call(w)},destroy:()=>{var T;N=!0,l.abort(),(T=C==null?void 0:C.destroy)==null||T.call(C),F(),p(),d.forEach(B=>B.remove()),d.clear(),u.onclick=null,g.onclick=null,u.replaceChildren(),b.replaceChildren()}}}const gt=s=>String(s).padStart(2,"0"),Dn=s=>`${s.getFullYear()}-${gt(s.getMonth()+1)}-${gt(s.getDate())}`;function rn(s){if(!/^(\d{4})-(\d{2})-(\d{2})$/.exec(s))return!1;const t=new Date(`${s}T12:00:00`);return!Number.isNaN(t.getTime())&&Dn(t)===s}const is=s=>{var e,t,n;return{time:((e=s.field.dateOptions)==null?void 0:e.showTime)??s.field.kind!=="date",range:((t=s.field.dateOptions)==null?void 0:t.showRange)??!1,seconds:((n=s.field.dateOptions)==null?void 0:n.showSeconds)??s.field.kind==="datetime"}};function ss(s){const{time:e,range:t,seconds:n}=is(s),o=(Array.isArray(s.value)?s.value:[s.value]).slice(0,t?2:1).filter(Boolean).map(a=>e?String(a).slice(0,n?19:16).replace("T"," "):String(a).slice(0,10)).join(" 至 ");return G("div",`fc-value fc-${s.className||""}${o?"":" fc-empty"}`,o||"待填")}function os(s){var be,Q,J,ie;const{time:e,range:t,seconds:n}=is(s),i=G("div","fc-calendar"),o=Array.isArray(s.value)?s.value:[s.value],a=[0,1].map(E=>String(o[E]||"").slice(0,10)),r=[0,1].map(E=>(String(o[E]||"").slice(11,16)||"00:00")+(n?":"+(String(o[E]||"").slice(17,19)||"00"):""));let l=0,d=!1,c=rn(a[0])?new Date(`${a[0]}T12:00:00`):new Date;c=new Date(c.getFullYear(),c.getMonth(),1);const p=G("div","fc-calendar-panel"),h=t&&((be=s.field.dateOptions)==null?void 0:be.months)===2?G("div","fc-calendar-panel detail-node-second-month"):void 0;h&&i.classList.add("fc-calendar-two-months");const u=G("div","fc-calendar-inputs"),f=[],g=()=>i.dispatchEvent(new Event("change",{bubbles:!0})),v=G("div","fc-error");v.setAttribute("role","status");const m=()=>{if(a.some(E=>E&&!rn(E)))return"请输入有效日期,格式为 YYYY-MM-DD";if(s.field.required&&!a[0])return"请选择日期";if(t&&!!a[0]!=!!a[1])return"请选择完整的日期范围";if(e&&r.slice(0,t?2:1).some(E=>!(n?/^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/:/^([01]\d|2[0-3]):[0-5]\d$/).test(E)))return"请输入有效时间";if(t&&a[0]&&`${a[0]}T${e?r[0]:""}`>`${a[1]}T${e?r[1]:""}`)return"结束日期时间不能早于开始日期时间"},b=()=>{v.textContent=m()||"",v.textContent||g()};for(let E=0;E<(t?2:1);E++){const O=G("input","fc-input fc-calendar-date");O.type="text",O.value=a[E],O.placeholder=t?((J=(Q=s.field.dateOptions)==null?void 0:Q.rangeLabels)==null?void 0:J[E])??(E?"结束日期":"开始日期"):"YYYY-MM-DD",O.ariaLabel=t?O.placeholder:s.field.label,O.disabled=s.readonly,O.onfocus=()=>{if(l=E,d=E===1,rn(a[E])){const U=new Date(`${a[E]}T12:00:00`);c=new Date(U.getFullYear(),U.getMonth(),1)}z()},O.addEventListener("change",U=>{if(U.stopPropagation(),a[E]=O.value.trim(),rn(a[E])){const K=new Date(`${a[E]}T12:00:00`);c=new Date(K.getFullYear(),K.getMonth(),1)}z(),b()}),u.append(O),f.push(O)}const k=G("div","fc-calendar-header"),C=G("button","fc-calendar-month");C.type="button",C.ariaLabel="选择年份和月份",C.setAttribute("aria-expanded","false"),C.setAttribute("aria-live","polite");const w=(E,O,U)=>{const K=G("button","fc-calendar-nav");return K.type="button",K.ariaLabel=E,K.innerHTML=`<svg viewBox="0 0 24 24" aria-hidden="true"><path d="${U?"M10 6l-6 6 6 6M19 6l-6 6 6 6":"M15 6l-6 6 6 6"}"/></svg>`,O>0&&K.classList.add("next"),K.onclick=()=>{c=new Date(c.getFullYear(),c.getMonth()+O,1),z()},K};k.append(w("上一年",-12,!0),w("上个月",-1,!1),C,w("下个月",1,!1),w("下一年",12,!0));const L=G("div","fc-calendar-weekdays");for(const E of["日","一","二","三","四","五","六"])L.append(G("span","",E));const N=G("div","fc-calendar-days");N.setAttribute("role","group"),N.ariaLabel="选择日期";const y=G("div","fc-calendar-period");y.hidden=!0;const D=G("button","fc-calendar-back","‹ 返回选择日期");D.type="button";const S=G("div","fc-calendar-period-columns"),R=G("div","fc-calendar-period-list");R.setAttribute("role","group"),R.ariaLabel="年份";const M=G("div","fc-calendar-period-list");M.setAttribute("role","group"),M.ariaLabel="月份";const F=G("div","fc-calendar-period-list");F.ariaLabel="秒",F.hidden=!0,S.append(R,M,F),y.append(D,S);let q="period",T=0;const B=[],A=(E=!1)=>{const O=r[T].split(":").map(Number),U=q==="period"?[[R,c.getFullYear(),"年"],[M,c.getMonth()+1,"月"]]:[[R,O[0],"时"],[M,O[1],"分"],[F,O[2],"秒"]];for(const[K,ge,he]of U)for(const Te of K.querySelectorAll("button")){const xe=Number(Te.dataset.value)===ge;Te.classList.toggle("selected",xe),Te.setAttribute("aria-pressed",String(xe)),Te.textContent=`${q==="time"?gt(Number(Te.dataset.value)):Te.dataset.value}${xe?he:""}`,xe&&E&&(K.scrollTop=Math.max(0,Te.offsetTop-108))}},I=(E,O)=>{const U=G("button","fc-calendar-period-option",String(E));return U.type="button",U.dataset.value=String(E),U.ariaLabel=`${q==="time"?gt(E):E}${q==="time"?O?"时":"分":O?"年":"月"}`,U.disabled=q==="time"&&s.readonly,U.onclick=()=>{if(q==="time"){const K=r[T].split(":");K[O?0:1]=gt(E),r[T]=K.join(":"),B[T].textContent=r[T],A(),b();return}c.setFullYear(O?E:c.getFullYear(),O?c.getMonth():E-1,1),A(),z()},U},$=(E,O=0)=>{if(q=E,T=O,R.replaceChildren(),M.replaceChildren(),F.replaceChildren(),F.hidden=E!=="time"||!n,R.ariaLabel=E==="period"?"年份":"小时",M.ariaLabel=E==="period"?"月份":"分钟",E==="period"){for(let U=Math.max(1,c.getFullYear()-100);U<=Math.min(9999,c.getFullYear()+100);U++)R.append(I(U,!0));for(let U=1;U<=12;U++)M.append(I(U,!1))}else{for(let U=0;U<24;U++)R.append(I(U,!0));for(let U=0;U<60;U++)M.append(I(U,!1));if(n)for(let U=0;U<60;U++){const K=G("button","fc-calendar-period-option",gt(U));K.type="button",K.dataset.value=String(U),K.ariaLabel=gt(U)+"秒",K.disabled=s.readonly,K.onclick=()=>{const ge=r[T].split(":");ge[2]=gt(U),r[T]=ge.join(":"),B[T].textContent=r[T],A(),b()},F.append(K)}}i.classList.add("choosing-period"),y.hidden=!1,(E==="period"?C:B[O]).setAttribute("aria-expanded","true"),A(!0),D.focus()};C.onclick=()=>$("period"),D.onclick=()=>{i.classList.remove("choosing-period"),y.hidden=!0;const E=q==="period"?C:B[T];E.setAttribute("aria-expanded","false"),z(),E.focus()},y.addEventListener("keydown",E=>{if(E.key==="Escape"&&(E.preventDefault(),E.stopPropagation(),D.click()),!["ArrowUp","ArrowDown","Home","End"].includes(E.key))return;const O=E.target,U=O.closest(".fc-calendar-period-list");if(!U)return;const K=[...U.querySelectorAll("button")],ge=K.indexOf(O),he=E.key==="Home"?0:E.key==="End"?K.length-1:Math.max(0,Math.min(K.length-1,ge+(E.key==="ArrowDown"?1:-1)));E.preventDefault(),K[he].focus()});function z(){if(C.textContent=`${c.getFullYear()}年 ${c.getMonth()+1}月`,f.forEach((E,O)=>E.classList.toggle("active",O===l)),W(N,c),h){const E=new Date(c.getFullYear(),c.getMonth()+1,1),O=G("div","fc-calendar-header"),U=G("button","fc-calendar-month",`${E.getFullYear()}年 ${E.getMonth()+1}月`);U.type="button",U.ariaLabel="选择下月年份和月份",U.onclick=()=>{c=E,$("period"),z()},O.append(w("上一年",-12,!0),w("上个月",-1,!1),U,w("下个月",1,!1),w("下一年",12,!0));const K=G("div","fc-calendar-days");K.role="group",K.ariaLabel="选择下月日期",h.replaceChildren(O,L.cloneNode(!0),K),W(K,E),te.hidden=!a.some(Boolean)}}function W(E,O){E.replaceChildren();for(let K=0;K<O.getDay();K++)E.append(G("span","fc-calendar-blank"));const U=new Date(O.getFullYear(),O.getMonth()+1,0).getDate();for(let K=1;K<=U;K++){const ge=Dn(new Date(O.getFullYear(),O.getMonth(),K)),he=G("button","fc-calendar-day",String(K));he.type="button",he.ariaLabel=ge,he.disabled=s.readonly;const Te=a[0]===ge||t&&a[1]===ge;he.classList.toggle("selected",Te),he.setAttribute("aria-pressed",String(Te)),he.classList.toggle("in-range",t&&!!a[0]&&!!a[1]&&ge>a[0]&&ge<a[1]),ge===Dn(new Date)&&(he.classList.add("today"),he.setAttribute("aria-current","date")),he.onclick=()=>{var xe,ye;t?d?(a[1]=ge,a[0]&&a[1]<a[0]&&([a[0],a[1]]=[a[1],a[0]]),l=0,d=!1):(a[0]=ge,a[1]="",l=1,d=!0):a[0]=ge,f.forEach((Ce,Me)=>Ce.value=a[Me]),z(),!t||a[1]?b():v.textContent="",(xe=i.querySelector(`[aria-label="${ge}"]`))==null||xe.focus(),(ye=s.field.dateOptions)!=null&&ye.collapseOnSelect&&(!t||a[1])&&!m()&&i.dispatchEvent(new Event("fc-collapse",{bubbles:!0}))},E.append(he)}}p.append(k,L,N,y);const X=G("div","fc-calendar-time");if(e){for(let E=0;E<(t?2:1);E++){const O=G("div","fc-calendar-time-field"),U=t?E?"结束时间":"开始时间":"时间",K=G("button","fc-input fc-calendar-time-trigger",r[E]);K.type="button",K.disabled=s.readonly,K.ariaLabel=U,K.setAttribute("aria-expanded","false"),K.onclick=()=>$("time",E),B.push(K),O.append(G("span","",U),K),X.append(O)}p.append(X)}const te=G("button","fc-calendar-clear","清空");te.type="button",te.disabled=s.readonly,te.onclick=()=>{a.fill(""),f.forEach(E=>E.value=""),l=0,d=!1,z(),b()},i.append(u,p,...h?[h]:[],te,v);const le=()=>{const E=a.slice(0,t?2:1).map((O,U)=>O?O+(e?`T${r[U]}`:""):"");return t?E.some(Boolean)?E:[]:E[0]};if(s.layout==="compact"||s.readonly)return z(),{element:i,read:le,validate:m,focus:()=>{f[0].focus()},deactivate:()=>{i.classList.remove("choosing-period"),y.hidden=!0}};const ve=G("div","fc-date-mirror"),de=()=>ve.replaceChildren(ss({...s,value:le()})),ue=G("span","fc-field-chevron");ue.setAttribute("aria-hidden","true");const me=G("div","fc-date-trigger");me.tabIndex=0,me.setAttribute("role","button"),me.ariaLabel=`编辑${s.field.label}`,me.append(ve,ue);let Ie;const fe=(E=!0)=>{const O=Ie;Ie=void 0;const U=!!O&&O.element.contains(document.activeElement);O==null||O.close(),ue.classList.remove("is-open"),E&&U&&queueMicrotask(()=>{Ie||!me.isConnected||me.dispatchEvent(new Event("fc-collapse",{bubbles:!0}))})},Re=()=>{Ie||s.readonly||(de(),Ie=rt({anchor:me,content:i,width:h?570:320,align:h?"end":"start",gap:4,onDismiss:()=>{Ie=void 0,ue.classList.remove("is-open")}}),ue.classList.add("is-open"))};return me.onclick=()=>Re(),me.onkeydown=E=>{(E.key==="Enter"||E.key===" ")&&(E.preventDefault(),Re())},i.addEventListener("focusout",E=>{const O=E.relatedTarget;if(O&&(i.contains(O)||me.contains(O)||at(O)))return;const U=new Event("focusout",{bubbles:!0});O&&Object.defineProperty(U,"relatedTarget",{value:O}),me.dispatchEvent(U)}),i.addEventListener("change",()=>{de(),me.dispatchEvent(new Event("change",{bubbles:!0}))}),(ie=s.field.dateOptions)!=null&&ie.collapseOnSelect&&i.addEventListener("fc-collapse",()=>{fe(!1),me.dispatchEvent(new Event("fc-collapse",{bubbles:!0}))}),z(),de(),{element:me,content:i,inputRoot:me,read:le,validate:m,focus:()=>{Re(),f[0].focus()},deactivate:fe,destroy:fe}}const Fn=[{key:"wit_node",label:"节点"},{key:"wit_subtask",label:"任务"},{key:"wit_field",label:"字段"},{key:"wit_role_and_user",label:"角色与人员"},{key:"wit_schedule",label:"计划表"},{key:"ai_run",label:"AI 操作"},{key:"wit",label:"工作项"}];function as(s,e){return s.history.map((t,n)=>{var o;const i=typeof t=="string"?{actor:e,module:t.startsWith("关联素材")?"素材管理":"工作项",detail:t,createdAt:""}:t;return{...i,id:i.id||`legacy-${n}`,actorId:i.actorId||i.actor,actorKind:i.actorKind||"user",moduleKey:i.moduleKey||(i.module==="节点流程"?"wit_node":"")||((o=Fn.find(a=>a.label===i.module))==null?void 0:o.key)||i.module}}).sort((t,n)=>n.createdAt.localeCompare(t.createdAt))}function gr(s){return s.map(e=>{var t,n;return{id:e.id,actorId:(t=e.operator)==null?void 0:t.user_key,actor:((n=e.operator)==null?void 0:n.name)||"系统",actorKind:e.operator_type===0?"user":"system",moduleKey:e.op_record_type_key,module:e.op_record_type_name,detail:e.content,createdAt:new Date(e.created_at).toLocaleString("sv-SE")}})}function rs(s,e){const t=e.keyword.trim().toLocaleLowerCase(),n=s.filter(d=>e.operatorKinds.has(d.actorKind||"user")&&(!e.operators.size||d.actorKind!=="user"||e.operators.has(d.actorId||d.actor))&&(!e.modules.size||e.modules.has(d.moduleKey||d.module))&&(!e.start||d.createdAt>=e.start.replace("T"," "))&&(!e.end||!!d.createdAt&&d.createdAt<=e.end.replace("T"," "))),i=d=>[d.actor,d.module,d.detail,d.createdAt].some(c=>c.toLocaleLowerCase().includes(t)),o=t?n.filter(i):n,a=t&&e.keywordFilter?o:n,r=Math.max(1,Math.ceil(a.length/20)),l=Math.max(1,Math.min(e.page,r));return{rows:a.slice((l-1)*20,l*20),total:n.length,matching:o.length,filteredTotal:a.length,page:l,pageCount:r}}const Pn=s=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${s}</svg>`,Hn=Pn('<path d="M3 4h18l-7 8v7l-4 2v-9z"/>'),mr=Pn('<circle cx="10" cy="10" r="6"/><path d="m15 15 6 6"/>'),vr=Pn('<path d="m6 6 12 12M6 18 18 6"/>'),wr=[["user","用户"],["computed","计算字段"],["automation","自动化规则"],["system","其它系统操作"]];function br(s){let e={...s},t=e.page||{rows:e.rows||(e.records||[]).filter(y=>typeof y!="string"),nextCursor:e.nextCursor,previousCursor:e.previousCursor},n=!1,i=!1,o=0,a;const r=[],l=()=>{r.splice(0).forEach(y=>y())},d=()=>as({history:e.rows||e.records||[]},e.actor||""),c=()=>e.mode==="local",p=document.createElement("section");p.className="detail-history rowvia-detail-module",p.dataset.module="detail:tabs:log";const h={keyword:"",keywordFilter:!1,operatorKinds:new Set(["user","automation","system"]),operators:new Set,modules:new Set,start:"",end:"",page:1,...e.query},u=()=>({...h,operatorKinds:new Set(h.operatorKinds),operators:new Set(h.operators),modules:new Set(h.modules)});Object.assign(h,u());let f;p.innerHTML=`<div class="detail-history-search"><span>${mr}</span><input type="search" placeholder="搜索" aria-label="搜索操作记录"><div class="detail-history-search-actions" hidden><span data-match-count aria-live="polite"></span><label><input type="checkbox" data-keyword-filter>过滤</label><button type="button" data-clear-search aria-label="清空搜索">${vr}</button></div></div><div class="detail-history-table-wrap"><table class="detail-history-table" aria-label="操作记录"><colgroup><col style="width:172px"><col style="width:140px"><col><col style="width:252px"></colgroup><thead><tr><th scope="col"><span>操作人</span><button type="button" data-history-filter="actor" aria-label="筛选操作人" aria-haspopup="dialog" aria-expanded="false">${Hn}</button></th><th scope="col"><span>操作模块</span><button type="button" data-history-filter="module" aria-label="筛选操作模块" aria-haspopup="dialog" aria-expanded="false">${Hn}</button></th><th scope="col">操作详情</th><th scope="col"><span>操作时间</span><button type="button" data-history-filter="time" aria-label="筛选操作时间" aria-haspopup="dialog" aria-expanded="false">${Hn}</button></th></tr></thead><tbody></tbody></table></div><div class="detail-history-pagination"></div>`;const g=document.createElement("div");g.className="detail-history-status",g.setAttribute("role","status"),p.append(g);const v=p.querySelector("input[type=search]"),m=p.querySelector("tbody"),b=y=>{const D=h.keyword.trim();if(!D)return H(y);let S=0,R="";for(let M=y.toLocaleLowerCase().indexOf(D.toLocaleLowerCase());M>=0;M=y.toLocaleLowerCase().indexOf(D.toLocaleLowerCase(),S))R+=H(y.slice(S,M))+`<mark>${H(y.slice(M,M+D.length))}</mark>`,S=M+D.length;return R+H(y.slice(S))};function k(){if(n)return;l();const y=c()?rs(d(),h):{rows:t.rows,total:t.total,matching:t.matching,filteredTotal:t.total,page:h.page,pageCount:1};c()&&(h.page=y.page),v.value=h.keyword,p.querySelector("[data-keyword-filter]").checked=h.keywordFilter,p.setAttribute("aria-busy",String(i)),p.querySelector(".detail-history-search-actions").hidden=!h.keyword.trim(),p.querySelector("[data-match-count]").textContent=`${y.matching??"—"} / ${y.total??"—"}`,m.innerHTML=y.rows.length?y.rows.map(S=>`<tr><td><span class="detail-history-actor" title="${H(S.actor)}"><span class="detail-history-avatar" aria-hidden="true">${H(S.actor.slice(0,1))}</span><span>${b(S.actor)}</span></span></td><td title="${H(S.module)}">${b(S.module)}</td><td class="detail-history-description"><span>${b(S.detail)}</span></td><td><time>${b(S.createdAt||"历史记录")}</time></td></tr>`).join(""):'<tr><td colspan="4" class="detail-history-empty">暂无数据</td></tr>',e.renderDetail&&m.querySelectorAll(".detail-history-description > span").forEach((S,R)=>{const M=e.renderDetail(S,y.rows[R]);M&&r.push(M)}),p.querySelector("[data-history-filter=actor]").classList.toggle("active",h.operatorKinds.size!==4||!!h.operators.size),p.querySelector("[data-history-filter=module]").classList.toggle("active",!!h.modules.size);const D=p.querySelector("[data-history-filter=time]");D.classList.toggle("active",!!h.start||!!h.end),D.title=h.start?`${h.start} 至 ${h.end}`:"筛选操作时间",p.querySelector(".detail-history-pagination").innerHTML=c()?y.pageCount>1?`<span>共 ${y.filteredTotal} 条</span><button type="button" data-page="-1" ${y.page===1?"disabled":""} aria-label="上一页">‹</button><span>${y.page} / ${y.pageCount}</span><button type="button" data-page="1" ${y.page===y.pageCount?"disabled":""} aria-label="下一页">›</button>`:"":`<span>${t.total===void 0?"":`共 ${t.total} 条`}</span><button type="button" data-page="-1" ${i||!e.onQuery||t.previousCursor==null?"disabled":""} aria-label="上一页">‹</button><button type="button" data-page="1" ${i||!(e.onQuery||e.onLoadMore)||t.nextCursor==null?"disabled":""} aria-label="下一页">›</button>`}function C(y=!1){if(n)return;if(c()){k();return}if(!(y?e.onLoadMore:e.onQuery)){k();return}a==null||a.abort(),a=new AbortController;const D=++o;i=!0,g.textContent="加载中…",k();const S=u(),R=F=>{n||D!==o||(F&&(t=F,e.records=F.rows,e.rows=F.rows),i=!1,g.textContent="",k())},M=F=>{if(n||D!==o)return;i=!1,g.textContent=F instanceof Error?F.message:"加载失败,请重试";const q=document.createElement("button");q.type="button",q.textContent="重试",q.onclick=()=>C(y),g.append(q),k()};try{const F=y?e.onLoadMore(h.cursor,S,a.signal):e.onQuery(S,a.signal);F instanceof Promise||F&&"then"in F?Promise.resolve(F).then(R,M):R(F)}catch(F){M(F)}}const w=()=>{h.page=1,h.cursor=void 0,C()},L=()=>{const y=f;f=void 0,y==null||y.close()};function N(y){if(y.getAttribute("aria-expanded")==="true"){L();return}L();const D=document.createElement("div");D.className="detail-history-filter-panel",D.setAttribute("role","dialog"),D.ariaLabel=y.ariaLabel;const S=y.dataset.historyFilter,R=[],M=(F,q,T)=>{const B=document.createElement("label");return B.className="detail-history-filter-option",B.innerHTML=`<input type="checkbox" value="${H(q)}" ${T.has(q)?"checked":""}><span>${H(F)}</span>`,B.querySelector("input").onchange=A=>{A.target.checked?T.add(q):T.delete(q),w()},B};if(S==="module"){const F=d(),q=e.modules?[...e.modules]:Fn.filter(T=>e.nodeFlow||!["wit_node","wit_subtask"].includes(T.key));for(const T of F)q.some(B=>B.key===T.moduleKey)||q.push({key:T.moduleKey,label:T.module});q.forEach(T=>D.append(M(T.label,T.key,h.modules)))}else if(S==="actor"){for(const[F,q]of wr)if(D.append(M(q,F,h.operatorKinds)),F==="user"){const T=document.createElement("details");T.className="detail-history-users",T.innerHTML='<summary>请选择用户</summary><input type="search" aria-label="搜索用户" placeholder="搜索用户"><div></div>';const B=e.operators?e.operators.map($=>[$.id,$.label]):[...new Map(d().filter($=>$.actorKind==="user").map($=>[$.actorId,$.actor])).entries()],A=T.querySelector("input"),I=()=>T.querySelector("div").replaceChildren(...B.filter(([,$])=>$.includes(A.value)).map(([$,z])=>M(z,$,h.operators)));A.oninput=I,I(),D.append(T)}}else{D.classList.add("detail-history-date-panel");const F=document.createElement("div");F.className="detail-history-date-range",D.append(F);const q=["开始","结束"].map((I,$)=>os({field:{key:`log-date-${$}`,label:`${I}日期`,kind:"dateTime",dateOptions:{showTime:!0,showSeconds:!0}},readonly:!1,layout:"compact",value:$?h.end:h.start})),T=document.createElement("div");T.className="detail-history-filter-error",T.setAttribute("role","status");const B=()=>{const[I,$]=q.map(z=>String(z.read()));T.textContent=q.map(z=>{var W;return(W=z.validate)==null?void 0:W.call(z)}).find(Boolean)||(I&&$&&I>$?"结束日期时间不能早于开始日期时间":""),!T.textContent&&(!I&&!$?(h.start="",h.end="",w()):I&&$&&(h.start=I,h.end=$,w()))};q.forEach((I,$)=>{var te,le;const z=document.createElement("div");z.className="detail-history-date-column",z.setAttribute("aria-label",$?"结束日期时间":"开始日期时间");const W=I.element.querySelector(".fc-calendar-date");W.placeholder="yyyy-MM-dd";const X=I.element.querySelector(".fc-calendar-time-trigger");I.element.querySelector(".fc-calendar-inputs").append(X),(te=I.element.querySelector(".fc-calendar-time"))==null||te.remove(),(le=I.element.querySelector(".fc-calendar-clear"))==null||le.remove(),z.append(I.element),F.append(z),I.element.addEventListener("change",B),R.push(()=>{var ve;return(ve=I.destroy)==null?void 0:ve.call(I)})}),h.end||q[1].element.querySelector('[aria-label="下个月"]').click();const A=document.createElement("button");A.type="button",A.className="detail-history-clear-dates",A.textContent="清空",A.onclick=()=>{h.start="",h.end="",w(),L()},D.append(T,A)}y.setAttribute("aria-expanded","true"),f=rt({anchor:y,anchorMode:"element",content:D,align:S==="time"?"end":"start",width:S==="time"?570:S==="actor"?240:190,onDismiss:()=>{f=void 0,y.setAttribute("aria-expanded","false"),R.forEach(F=>F())},onEscape:()=>y.focus()})}return v.oninput=()=>{h.keyword=v.value,w()},p.querySelector("[data-keyword-filter]").onchange=y=>{h.keywordFilter=y.target.checked,w()},p.onclick=y=>{if(n)return;const D=y.target.closest("button");D&&(D.dataset.historyFilter?N(D):D.hasAttribute("data-clear-search")?(v.value="",h.keyword="",w(),v.focus()):D.dataset.page&&!D.disabled&&(c()?h.page+=Number(D.dataset.page):h.cursor=(D.dataset.page==="1"?t.nextCursor:t.previousCursor)??void 0,C(!c()&&D.dataset.page==="1"&&!!e.onLoadMore)))},k(),{element:p,refresh:C,deactivate:L,update:y=>{n||(++o,a==null||a.abort(),i=!1,g.textContent="",e={...e,...y},y.query&&(Object.assign(h,y.query),Object.assign(h,u())),y.page?(t=y.page,e.records=y.page.rows,e.rows=y.page.rows):(y.rows||y.records)&&(t={...t,rows:y.rows||y.records.filter(D=>typeof D!="string")},e.rows=t.rows),"nextCursor"in y&&(t.nextCursor=y.nextCursor),"previousCursor"in y&&(t.previousCursor=y.previousCursor),L(),k())},destroy:()=>{n||(n=!0,++o,a==null||a.abort(),L(),l(),v.oninput=null,p.querySelector("[data-keyword-filter]").onchange=null,p.onclick=null,p.replaceChildren())}}}const ln=()=>({filters:[],sorts:[],groups:[],colors:[],showTerminated:!1});function ls(s,e){return e.every(t=>{const n=String(s[t.field]??"").toLocaleLowerCase(),i=t.value.toLocaleLowerCase(),o=typeof s[t.field]=="number"?s[t.field]:n,a=typeof o=="number"?Number(t.value):i;switch(t.operator){case"equals":return n===i;case"notEqual":return n!==i;case"notContains":return!n.includes(i);case"gt":return!!n&&!!i&&o>a;case"gte":return!!n&&!!i&&o>=a;case"lt":return!!n&&!!i&&o<a;case"lte":return!!n&&!!i&&o<=a;case"blank":return!n;case"notBlank":return!!n;default:return n.includes(i)}})}const On=new WeakMap;function ds(s){let e=On.get(s);e||(e={owners:0,added:!s.classList.contains("rowvia-work-items"),fieldAdded:!s.classList.contains("rowvia-field-scope")},On.set(s,e),s.classList.add("rowvia-work-items","rowvia-field-scope")),e.owners++;let t=!1;return()=>{t||(t=!0,!--e.owners&&(e.added&&s.classList.remove("rowvia-work-items"),e.fieldAdded&&s.classList.remove("rowvia-field-scope"),On.delete(s)))}}function Bn(s,e,t,n){const i=document.createElement("div");i.className=e,i.innerHTML=t;const o=ds(s);s.append(i);const a=new lt,r=qe(i,e,n);return a.listen(i,"click",l=>{var p;const d=l.target.closest("[data-action]");if(!d||!i.contains(d)||d.matches(":disabled"))return;const c={action:d.dataset.action,anchor:d,originalEvent:l};(p=n.onAction)==null||p.call(n,c),i.dispatchEvent(new CustomEvent("rowvia:action",{detail:c,bubbles:!0}))}),{element:i,lifecycle:a,onInteraction:r.onInteraction,destroy(){a.destroy(),r.destroy(),i.remove(),o()}}}function yr(s,e){const t=Bn(s,"list-tabs",e.tabs.map(o=>`<button class="list-tab" role="tab" data-tab="${H(o)}">${H(o)}</button>`).join("")+`<div class="create-button">${Oe("create","新建","plus","primary")}${Oe("create-menu","","down","primary")}</div>`,e);t.element.setAttribute("role","tablist");let n=e.value??e.tabs[0]??"";const i=o=>{n=o,t.element.querySelectorAll("[data-tab]").forEach(a=>{const r=a.dataset.tab===n;a.classList.toggle("active",r),a.setAttribute("aria-selected",String(r))})};return t.lifecycle.listen(t.element,"click",o=>{var r;const a=o.target.closest("[data-tab]");!a||a.dataset.tab===n||(i(a.dataset.tab),(r=e.onChange)==null||r.call(e,n),t.element.dispatchEvent(new CustomEvent("rowvia:tab-change",{detail:n,bubbles:!0})))}),t.element.querySelectorAll("[data-action]").forEach(o=>{o.disabled=e.canCreate===!1}),i(n),{element:t.element,onInteraction:t.onInteraction,setValue:i,getValue:()=>n,destroy:t.destroy}}const Vn={filter:'<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" focusable="false" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.0929 2.57912C1.25675 2.22596 1.61069 2 2.00001 2H22C22.3893 2 22.7433 2.22596 22.9071 2.57912C23.071 2.93229 23.015 3.34845 22.7636 3.64573L14.5654 12.8261V21C14.5654 21.3466 14.386 21.6684 14.0911 21.8507C13.7963 22.0329 13.4282 22.0494 13.1182 21.8944L10.0528 19.8944C9.71401 19.725 9.5 19.3788 9.5 19V12.8261L1.23644 3.64573C0.985045 3.34845 0.929036 2.93229 1.0929 2.57912Z" fill="currentColor"></path></svg>',sort:'<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" focusable="false" aria-hidden="true"><g opacity="0.99"><path d="M2 19.5C2 18.6716 2.67157 18 3.5 18H9.5C10.3284 18 11 18.6716 11 19.5C11 20.3284 10.3284 21 9.5 21H3.5C2.67157 21 2 20.3284 2 19.5Z" fill="currentColor"></path><path d="M2 12C2 11.1716 2.67157 10.5 3.5 10.5H14.5C15.3284 10.5 16 11.1716 16 12C16 12.8284 15.3284 13.5 14.5 13.5H3.5C2.67157 13.5 2 12.8284 2 12Z" fill="currentColor"></path><path d="M2 4.5C2 3.67157 2.67157 3 3.5 3H20.5C21.3284 3 22 3.67157 22 4.5C22 5.32843 21.3284 6 20.5 6H3.5C2.67157 6 2 5.32843 2 4.5Z" fill="currentColor"></path></g></svg>',group:'<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" focusable="false" aria-hidden="true"><path fill-rule="evenodd" clip-rule="evenodd" d="M20.9999 2H13.4142C13.1489 2 12.8946 2.10536 12.707 2.29289L1.41416 13.5858C0.633108 14.3668 0.633106 15.6332 1.41416 16.4142L7.58573 22.5858C8.36678 23.3668 9.63311 23.3668 10.4142 22.5858L21.707 11.2929C21.8946 11.1054 21.9999 10.851 21.9999 10.5858V3C21.9999 2.44772 21.5522 2 20.9999 2ZM15.4999 11C16.8807 11 17.9999 9.88071 17.9999 8.5C17.9999 7.11929 16.8807 6 15.4999 6C14.1192 6 12.9999 7.11929 12.9999 8.5C12.9999 9.88071 14.1192 11 15.4999 11Z" fill="currentColor"></path></svg>',color:'<svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="StyleFillcolorOutlined"><path d="M9.768 2.25A1.333 1.333 0 0 1 11.705.417l2.076 2.195.053.055.116.124.504.532.065.075 5.667 6.045a2.667 2.667 0 0 1-.111 3.76l-8.795 8.332a2.667 2.667 0 0 1-3.78-.112l-6.352-6.776a2.667 2.667 0 0 1 .112-3.76l8.796-8.333-.288-.304Zm2.24 2.37-.12-.128-8.676 8.22h13.504l1.525-1.445-6.232-6.648ZM20 23.378a2.667 2.667 0 0 0 2.667-2.666c0-1.316-.865-2.343-1.647-3.27-.407-.484-.791-.94-1.02-1.397-.227.457-.612.913-1.019 1.396-.782.928-1.647 1.955-1.647 3.27a2.667 2.667 0 0 0 2.667 2.668Z" fill="currentColor"></path></svg>',search:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" focusable="false" style="color: var(--semi-color-text-0); font-size: 16px;"><path d="M1.99992 3.51666H13.9999C14.4494 3.51666 14.8166 3.1495 14.8166 2.69999C14.8166 2.25048 14.4494 1.88333 13.9999 1.88333H1.99992C1.55041 1.88333 1.18325 2.25048 1.18325 2.69999C1.18325 3.1495 1.55041 3.51666 1.99992 3.51666ZM1.99992 10.5833H4.08658C4.53609 10.5833 4.90325 10.2162 4.90325 9.76665C4.90325 9.31715 4.53609 8.94999 4.08658 8.94999H1.99992C1.55041 8.94999 1.18325 9.31715 1.18325 9.76665C1.18325 10.2162 1.55041 10.5833 1.99992 10.5833ZM1.99992 7.04999H4.98325C5.43276 7.04999 5.79992 6.68283 5.79992 6.23332C5.79992 5.78381 5.43276 5.41666 4.98325 5.41666H1.99992C1.55041 5.41666 1.18325 5.78381 1.18325 6.23332C1.18325 6.68283 1.55041 7.04999 1.99992 7.04999ZM6.15325 12.4833H1.99992C1.55041 12.4833 1.18325 12.8505 1.18325 13.3C1.18325 13.7495 1.55041 14.1167 1.99992 14.1167H6.15325C6.60276 14.1167 6.96992 13.7495 6.96992 13.3C6.96992 12.8505 6.60276 12.4833 6.15325 12.4833ZM12.6504 10.7554C13.1059 10.1165 13.3799 9.33785 13.3799 8.49332C13.3799 6.33715 11.6261 4.58332 9.46992 4.58332C7.31374 4.58332 5.55992 6.33715 5.55992 8.49332C5.55992 10.6495 7.31374 12.4033 9.46992 12.4033C10.19 12.4033 10.8664 12.2026 11.4439 11.8628L13.2438 13.6627C13.4023 13.8212 13.6106 13.9033 13.8199 13.9033C14.0292 13.9033 14.2375 13.8212 14.396 13.6627C14.7145 13.3442 14.7146 12.826 14.3962 12.5074C14.3961 12.5074 14.396 12.5073 14.396 12.5073L12.6504 10.7554ZM9.47325 10.7667C8.2193 10.7667 7.19659 9.74702 7.19658 8.49V8.48999C7.19663 7.88622 7.43652 7.30719 7.86347 6.88027C8.29042 6.45335 8.86947 6.21352 9.47325 6.21352C10.077 6.21352 10.6561 6.45335 11.083 6.88027C11.51 7.30719 11.7499 7.88622 11.7499 8.49C11.7499 9.74701 10.7272 10.7667 9.47325 10.7667Z" fill="currentColor" stroke="currentColor" stroke-width="0.3"></path></svg>'},Bt={filter:"筛选",sort:"排序",group:"分组",color:"设置颜色"};function Cr(s,e={}){const t=Bn(s,"toolbar",Object.entries(Bt).map(([c,p])=>Oe(c,p,c)).join("")+`<div class="search-wrap hidden"><input id="search" aria-label="按标题查找" placeholder="按标题查找"><span id="matches"></span>${Oe("previous-match","","up")}${Oe("next-match","","down")}<label><input id="filter-search" type="checkbox">过滤</label>${Oe("close-search","","close")}</div>${Oe("search","查找","search")}<div class="right">${Oe("reset","重置","","hidden")}${Oe("saved-views","切换视图","down")}${Oe("save-view","存为视图","save","outline")}</div>`,e),n=t.element.querySelector("#search"),i=t.element.querySelector("#filter-search"),o=()=>{var c;(c=e.onSearch)==null||c.call(e,n.value,i.checked),t.element.dispatchEvent(new CustomEvent("rowvia:search",{detail:{query:n.value,filter:i.checked},bubbles:!0}))};t.lifecycle.listen(n,"input",o),t.lifecycle.listen(i,"change",o);const a=new Map([...t.element.querySelectorAll("[data-action]")].map(c=>[c.dataset.action,c.innerHTML]));let r=e.presentation,l={filter:0,sort:0,group:0,color:0};const d=()=>{var h,u,f,g;s.classList.toggle("work-item-tools-reference",(r==null?void 0:r.variant)==="reference");for(const v of Object.keys(Bt)){const m=t.element.querySelector(`[data-action="${v}"]`),b=((h=r==null?void 0:r.summaries)==null?void 0:h[v])??(l[v]?String(l[v]):""),k=Bt[v]+(b?` · ${b}`:""),C=((u=r==null?void 0:r.icons)==null?void 0:u[v])??((r==null?void 0:r.variant)==="reference"?Vn[v]:void 0);C?m.innerHTML=`${C}<span>${H(k)}</span>`:(m.innerHTML=a.get(v),m.querySelector("span").textContent=k),m.title=k,m.classList.toggle("tool-configured",!!b)}const c=t.element.querySelector('[data-action="search"]'),p=((f=r==null?void 0:r.icons)==null?void 0:f.search)??((r==null?void 0:r.variant)==="reference"?Vn.search:void 0);c.innerHTML=p?`${p}<span>查找</span>`:a.get("search");for(const[v,m]of[["previous-match","上一个匹配"],["next-match","下一个匹配"],["close-search","关闭查找"]])(g=t.element.querySelector(`[data-action="${v}"]`))==null||g.setAttribute("aria-label",m)};return d(),{element:t.element,onInteraction:t.onInteraction,destroy(){t.destroy(),s.classList.remove("work-item-tools-reference")},setPresentation(c){r=c,d()},setRuleCounts(c){l=c;for(const p of Object.keys(Bt)){const h=t.element.querySelector(`[data-action="${p}"]`);h.classList.toggle("is-set",!!l[p]),h.querySelector("span").textContent=Bt[p]+(l[p]?` · ${l[p]}`:"")}t.element.querySelector('[data-action="reset"]').classList.toggle("hidden",!Object.values(l).some(Boolean)),d()}}}function dn(s,e){return s.flatMap(t=>typeof t=="number"?t===e?[]:[t>e?t-1:t]:[{...t,children:dn(t.children,e)}])}const cs={contains:"包含",notContains:"不包含",equals:"等于",notEqual:"不等于",blank:"为空",notBlank:"不为空",gt:"大于",gte:"大于等于",lt:"小于",lte:"小于等于"};function Sr(s,e,t){const n=a=>{var r;return((r=e.find(l=>l.key===a))==null?void 0:r.label)||a},i=s.filters.find(a=>a.field),o={filter:s.filters.length>1?String(s.filters.length):i?`${n(i.field)} ${cs[i.operator]||""} ${i.value}`.trim():"",sort:s.sorts.length>1?String(s.sorts.length):s.sorts.map(a=>n(a.colId)).join(""),group:s.groups.length>1?String(s.groups.length):s.groups.map(n).join(""),color:s.colors.length?String(s.colors.length):""};return Object.fromEntries(Object.entries(o).map(([a,r])=>[a,[t==null?void 0:t(a),r].filter(Boolean).join(" · ")]))}const us={filter:"筛选",sort:"排序",group:"分组",color:"设置颜色条件"},Fe=(s,e="",t="")=>{const n=document.createElement(s);return n.className=e,n.textContent=t,n};function Gn(s){const{state:e,kind:t}=s,n=Fe("section","work-item-tools-reference");n.setAttribute("aria-label",us[t]);let i=!1,o,a=[],r=-1;const l=()=>{o==null||o.close(),o=void 0},d=(m,b,k,C="")=>{const w=Fe("button",C,b);return w.type="button",w.onclick=L=>{L.stopPropagation(),!i&&!w.disabled&&k(w)},m.append(w),w};function c(m,b,k,C=!1){var S,R;l();const w=Fe("div","work-item-tools-reference"),L=Fe("div","tool-select-menu");L.style.position="static",L.role="listbox",w.append(L);const N=Fe("input");N.placeholder="搜索",N.ariaLabel="搜索选项",C&&L.append(N);const y=Fe("div","tool-select-options");L.append(y),b.length&&b.every(M=>M.color)&&(y.style.display="grid",y.style.gridTemplateColumns="repeat(13, 20px)",y.style.gap="4px");const D=()=>{y.replaceChildren();for(const M of b.filter(F=>F.label.includes(N.value))){const F=d(y,M.label,()=>{l(),k(M.value)});F.role="option",F.setAttribute("aria-selected",String(!!M.selected)),M.color&&(F.textContent="",F.ariaLabel=M.label,F.title=M.label,Object.assign(F.style,{backgroundColor:M.color,width:"20px",minHeight:"20px",height:"20px",padding:"0"}))}y.childElementCount||y.append(Fe("div","tool-no-results","暂无结果"))};N.oninput=D,D(),L.onkeydown=M=>{var T;if(!["ArrowDown","ArrowUp","Home","End"].includes(M.key))return;M.preventDefault();const F=[...y.querySelectorAll("button")],q=F.indexOf(document.activeElement);(T=F[M.key==="Home"?0:M.key==="End"?F.length-1:(q+(M.key==="ArrowDown"?1:-1)+F.length)%F.length])==null||T.focus()},m.setAttribute("aria-expanded","true"),o=rt({anchor:m,anchorMode:"element",content:w,width:(S=b[0])!=null&&S.color?328:Math.max(180,m.getBoundingClientRect().width),onDismiss:()=>{o=void 0,m.setAttribute("aria-expanded","false")},onEscape:()=>m.focus()}),C?N.focus():(R=y.querySelector("button"))==null||R.focus()}const p=(m=!0)=>{i||(s.onChange(),m&&v())};function h(m,b,k,C,w,L=!1,N=!1){var D;const y=d(m,((D=C.find(S=>S.value===k))==null?void 0:D.label)||b,S=>c(S,C.map(R=>({...R,selected:R.value===k})),R=>{i||w(R)},N),"tool-select-trigger");return y.role="combobox",y.ariaLabel=b,y.setAttribute("aria-expanded","false"),y.disabled=L,y}function u(m,b,k,C){var L;const w=d(m,((L=s.fields.find(N=>N.key===b))==null?void 0:L.label)||(t==="sort"?"请选择排序项":"请选择筛选项"),N=>{const y=D=>{i||(C(D),p())};s.pick?s.pick(N,y):c(N,s.fields.map(D=>({value:D.key,label:D.label})),y,!0)},"field-select");return w.dataset.pick=String(k),w}function f(m,b,k,C){var R;const w=Fe("div","condition");m.append(w),u(w,b.field,k,M=>{b.field=M,b.value="",b.operator="contains"});const L=s.fields.find(M=>M.key===b.field),N=["contains","notContains","equals","notEqual","blank","notBlank"];["number","date","dateTime"].includes((L==null?void 0:L.kind)||"")&&N.push("gt","gte","lt","lte"),h(w,"运算符",b.field?b.operator:"",N.map(M=>({value:M,label:cs[M]})),M=>{b.operator=M,p()},!b.field);const y=!b.field||["blank","notBlank"].includes(b.operator),D=(L==null?void 0:L.choices)??((R=L==null?void 0:L.options)==null?void 0:R.map(M=>({id:M,label:M})));if(D!=null&&D.length)h(w,"请选择目标值",b.value,[{value:"",label:"请选择目标值"},...D.map(M=>({value:M.id,label:M.label}))],M=>{b.value=M,p()},y,!0);else{const M=Fe("input");M.value=b.value,M.placeholder="请填写目标值",M.ariaLabel="目标值",M.dataset.ruleValue=String(k),M.disabled=y,M.oninput=()=>{b.value=M.value,p(!1)},w.append(M)}const S=d(w,"×",()=>{C(),p()});return S.dataset.remove=String(k),S.ariaLabel="删除条件",w}function g(m,b,k){const C=Fe("div",k?"tool-filter-group":"tool-filter-tree");b.append(C),m.length>1&&d(C,(k==null?void 0:k.combinator)==="or"?"或":"且",y=>c(y,[{value:"and",label:"且"},{value:"or",label:"或"}],D=>{k?k.combinator=D:e.filterLayout=[{combinator:D,children:[...m]}],p()}),"tool-combinator");const w=Fe("div","tool-filter-children");C.append(w);for(const y of m)if(typeof y=="number")e.filters[y]&&f(w,e.filters[y],y,()=>{e.filters.splice(y,1),e.filterLayout=dn(e.filterLayout,y)});else{const D=g(y.children,w,y),S=d(D,"×",()=>{const R=M=>M.flatMap(F=>typeof F=="number"?[F]:R(F.children));m.splice(m.indexOf(y),1);for(const M of R(y.children).sort((F,q)=>q-F))e.filters.splice(M,1),e.filterLayout=dn(e.filterLayout,M);p()},"tool-remove-group");S.ariaLabel="删除筛选组"}const L=Fe("div",k?"tool-group-footer":"tool-rule-footer");w.append(L);const N=(y=!1,D=!1)=>{var R;D&&m.push({combinator:"and",children:m.splice(0)});const S=e.filters.push({field:"",operator:"contains",value:""})-1;m.push(y?{combinator:"and",children:[S]}:S),p(),(R=n.querySelector(`[data-pick="${S}"]`))==null||R.click()};return d(L,"⊕ 添加筛选条件",()=>N(),"add-condition"),d(L,"⌄",y=>c(y,[{value:"add",label:"添加筛选组条件"},{value:"combine",label:"组合现有条件并添加"}],D=>N(!0,D==="combine")),"tool-add-group").ariaLabel="添加筛选组条件",k||d(L,"清空全部条件",()=>{e.filters=[],e.filterLayout=[],p()},"clear-rules"),C}function v(){var L;if(i)return;l(),a.forEach(N=>N()),a=[],n.replaceChildren();const m=Fe("div",`tool-rule-panel tool-${t}-panel`);n.append(m),m.style.width=`${{filter:(L=e.filterLayout)!=null&&L.some(N=>typeof N!="number")?842:652,sort:559,group:390,color:944}[t]}px`,m.style.maxWidth="calc(100vw - 24px)",m.style.boxSizing="border-box";const b=Fe("div","popup-head");b.append(Fe("span","",us[t])),m.append(b);const k=Fe("span","tool-help","i");if(k.tabIndex=0,k.title="条件按顺序生效,可添加多个条件。",b.append(k),t==="filter"&&s.showTerminated){const N=Fe("label","terminated","显示已终止数据"),y=Fe("input");y.type="checkbox",y.checked=e.showTerminated,y.onchange=()=>{e.showTerminated=y.checked,p(!1)},N.prepend(y),b.append(N)}if(t==="filter"){e.filterLayout??(e.filterLayout=e.filters.map((N,y)=>y)),g(e.filterLayout,m);return}const C=t==="sort"?e.sorts:t==="group"?e.groups:e.colors;C.forEach((N,y)=>{var D;if(t==="color"){const S=e.colors[y],R=Fe("div","color-condition");m.append(R);const M=d(R,"⠿",()=>{},"color-drag");M.draggable=!0,M.ariaLabel="拖动条件",M.ondragstart=q=>{var T;r=y,(T=q.dataTransfer)==null||T.setData("text/plain",String(y))},M.ondragend=()=>{r=-1},R.ondragover=q=>{r>=0&&q.preventDefault()},R.ondrop=q=>{if(q.preventDefault(),r<0||r===y)return;const[T]=e.colors.splice(r,1);e.colors.splice(y,0,T),r=-1,p()};const F=d(R,"",q=>{const T=["246,126,122","250,133,0","219,146,0","245,204,0","161,194,0","61,188,47","0,184,159","0,175,240","122,162,255","149,155,238","184,143,255","209,126,226","244,118,189"];c(q,[.2,.4].flatMap(B=>T.map(A=>({value:`rgba(${A},${B})`,label:`rgba(${A},${B})`,color:`rgba(${A},${B})`}))),B=>{S.color=B,p()})},"color-swatch");if(F.style.backgroundColor=S.color,F.ariaLabel="着色颜色",h(R,"着色范围",S.scope||"row",[{value:"row",label:"整行"},{value:"cell",label:"单元格"}],q=>{S.scope=q,p()}),S.conditions){const q={...ln(),filters:S.conditions,filterLayout:S.conditionLayout},T=Gn({...s,kind:"filter",state:q,showTerminated:!1,onChange(){S.conditions=q.filters,S.conditionLayout=q.filterLayout,q.filters[0]&&Object.assign(S,q.filters[0]),s.onChange()}}),B=Fe("div","tool-color-filter-group");B.append(T.element),R.append(B),a.push(T.destroy),d(R,"×",()=>{e.colors.splice(y,1),p()}).ariaLabel="删除条件"}else f(R,S,y,()=>e.colors.splice(y,1));d(R,"⋯",q=>c(q,[{value:"copy",label:"复制该规则"},{value:"up",label:"上移"},{value:"down",label:"下移"},...S.conditions?[]:[{value:"group",label:"转换为筛选组条件"}]],T=>{if(T==="copy")e.colors.splice(y+1,0,structuredClone(S));else if(T==="group")S.conditions=[{field:S.field,operator:S.operator,value:S.value}],S.conditionLayout=[{combinator:"and",children:[0]}];else{const B=y+(T==="up"?-1:1);B>=0&&B<e.colors.length&&(e.colors.splice(y,1),e.colors.splice(B,0,S))}p()})).ariaLabel="更多条件操作"}else{const S=Fe("div","condition");if(m.append(S),u(S,t==="sort"?e.sorts[y].colId:e.groups[y],y,R=>{t==="sort"?e.sorts[y].colId=R:e.groups[y]=R}),t==="sort"){const R=((D=s.fields.find(M=>M.key===e.sorts[y].colId))==null?void 0:D.kind)==="number";for(const M of["asc","desc"])d(S,R?M==="asc"?"小 → 大":"大 → 小":M==="asc"?"首项 → 末项":"末项 → 首项",()=>{e.sorts[y].sort=M,p()},`sort-direction ${e.sorts[y].sort===M?"selected":""}`)}d(S,"×",()=>{C.splice(y,1),p()}).ariaLabel="删除条件"}});const w=Fe("div","tool-rule-footer");m.append(w),d(w,t==="color"?"⊕ 添加着色条件":"⊕ 添加条件",()=>{var N;t==="sort"?e.sorts.push({colId:"",sort:"asc"}):t==="group"?e.groups.push(""):e.colors.push({field:"",operator:"contains",value:"",color:"rgba(245,204,0,0.2)",scope:"row"}),p(),(N=n.querySelectorAll("[data-pick]")[C.length-1])==null||N.click()},"add-condition"),d(w,"清空全部条件",()=>{C.splice(0),p()},"clear-rules")}for(const m of["click","input","change","keydown"])n.addEventListener(m,b=>{(b.type!=="keydown"||b.key!=="Escape")&&b.stopPropagation()});return v(),{element:n,update:v,closeSecondary:l,destroy(){i||(i=!0,l(),a.forEach(m=>m()),a=[],n.remove())}}}function Er(s){const e=document.createElement("div");e.className="work-item-tools-reference";const t=document.createElement("section");t.className="field-picker",t.style.position="static",t.role="dialog",t.ariaLabel="选择字段";const n=["推荐","文本","选择","人员","时间","关系","其他"],i=c=>["title","text","longText","richText"].includes(c.kind||"")?"文本":["status","select","multiSelect","radio","checkbox","boolean"].includes(c.kind||"")?"选择":["person","multiPerson"].includes(c.kind||"")?"人员":["date","dateTime","dateRange"].includes(c.kind||"")?"时间":c.kind==="relation"?"关系":"其他";t.innerHTML='<input aria-label="搜索字段" placeholder="搜索字段"><div class="picker-tabs" role="tablist"></div><div class="field-options" role="listbox"></div>',e.append(t);const o=t.querySelector("input"),a=t.querySelector(".field-options"),r=()=>{const c=s.fields.filter(p=>{var h;return((h=s.available)==null?void 0:h.call(s,p))!==!1&&p.label.includes(o.value)});a.innerHTML=n.map((p,h)=>{const u=p==="推荐"?c.slice(0,7):c.filter(f=>i(f)===p);return u.length?`<div class="tool-field-category" data-category="${h}">${p}</div>${u.map(f=>`<button type="button" role="option" class="menu-option" data-field="${H(f.key)}"><span class="tool-field-icon">${{文本:"A≡",选择:"⊙",人员:"♙",时间:"▦",关系:"↗",其他:"#"}[i(f)]}</span>${H(f.label)}</button>`).join("")}`:""}).join("")||'<div class="tool-no-results">暂无结果</div>'};n.forEach((c,p)=>{const h=document.createElement("button");h.type="button",h.role="tab",h.textContent=c,h.setAttribute("aria-selected",String(!p)),h.onclick=()=>{var u;(u=a.querySelector(`[data-category="${p}"]`))==null||u.scrollIntoView({block:"start"}),t.querySelectorAll("[role=tab]").forEach(f=>{f.classList.toggle("active",f===h),f.setAttribute("aria-selected",String(f===h))})},t.querySelector(".picker-tabs").append(h)}),o.oninput=r,r();let l=!1;const d=rt({anchor:s.anchor,anchorMode:"element",content:e,width:304,onDismiss(){var c;l=!0,s.anchor.setAttribute("aria-expanded","false"),(c=s.onDismiss)==null||c.call(s)},onEscape:()=>s.anchor.focus()});if(s.anchor.setAttribute("aria-expanded","true"),a.onclick=c=>{var h;if(l)return;const p=(h=c.target.closest("[data-field]"))==null?void 0:h.dataset.field;p!==void 0&&(d.close(),s.onSelect(p))},t.onkeydown=c=>{var u;if(!["ArrowDown","ArrowUp"].includes(c.key))return;c.preventDefault();const p=[...a.querySelectorAll("button")],h=p.indexOf(document.activeElement);(u=p[(h+(c.key==="ArrowDown"?1:-1)+p.length)%p.length])==null||u.focus()},s.onCreate){const c=document.createElement("button");c.type="button",c.textContent="添加字段",c.onclick=()=>{var p;d.close(),(p=s.onCreate)==null||p.call(s)},t.append(c)}return o.focus(),{element:d.element,destroy:d.close}}function xr(s){let e={...ln(),filterLayout:[]},t,n,i,o=!1;const a=()=>{t==null||t.close(),t=void 0,n==null||n.destroy(),n=void 0,i==null||i.setAttribute("aria-expanded","false")};return{getState:()=>e,label:()=>e.filters.length?`筛选 · ${e.filters.length}`:"筛选",toggle(r){if(!o){if(t&&i===r){a();return}a(),i=r,n=Gn({kind:"filter",state:e,fields:s.fields(),onChange:()=>s.onChange(e)}),n.element.role="dialog",n.element.ariaLabel=s.label??"筛选",t=rt({anchor:i,anchorMode:"element",content:n.element,width:"auto",onDismiss(){t=void 0,n==null||n.destroy(),n=void 0,r.setAttribute("aria-expanded","false")},onEscape:()=>r.focus()}),r.setAttribute("aria-expanded","true")}},reset(){a(),e={...ln(),filterLayout:[]}},destroy(){o=!0,a()}}}function kr(s,e,t="此项必填"){var a;const n=[...s.querySelectorAll(".detail-row, .wf-form-row")],i=n.find(r=>[r,...r.querySelectorAll("[data-field],[data-form],[data-node-field],[data-field-slot]")].some(l=>[l.dataset.field,l.dataset.form,l.dataset.nodeField,l.dataset.fieldSlot].includes(e.id)))??n.find(r=>{var l,d;return((d=(l=r.querySelector("label"))==null?void 0:l.textContent)==null?void 0:d.replace(/\s*\*$/,"").trim())===e.label});if(!i)return!1;(a=i.querySelector(".detail-node-field-error"))==null||a.remove();const o=document.createElement("span");return o.className="detail-node-field-error",o.role="alert",o.textContent=t,i.append(o),i.addEventListener("input",()=>o.remove(),{once:!0}),!0}function Mr(s,e={}){const t=Bn(s,"selection-bar hidden",`${Oe("deselect","","close")}<span data-selection-count></span>${Oe("batch-status","更新状态")}${Oe("batch-owner","更新负责人")}${Oe("batch-export","导出")}${Oe("batch-archive","终止")}${Oe("deselect","取消选择")}`,e),n=t.element.querySelector("[data-selection-count]");return{element:t.element,onInteraction:t.onInteraction,destroy:t.destroy,setCount(i){t.element.classList.toggle("hidden",i===0),n.textContent=`已选择 ${i} 项`}}}function Lr(s,e){const t=ds(s),n=Ei(s,{getRowId:({data:i})=>i.id,rowHeight:37,headerHeight:32,theme:"ag-theme-quartz",rowSelection:"multiple",defaultColDef:{resizable:!0,sortable:!1,filter:!1},suppressRowClickSelection:!0,groupDefaultExpanded:-1,autoGroupColumnDef:{headerName:"分组",width:180,pinned:"left"},suppressContextMenu:!0,enableRangeSelection:!1,undoRedoCellEditing:!0,stopEditingWhenCellsLoseFocus:!0,localeText:{noRowsToShow:"暂无数据",loadingOoo:"加载中…",blank:"暂无",selectAll:"全选",filterOoo:"筛选…",searchOoo:"搜索…"},...e});return{...n,onInteraction:n.grid.onInteraction,destroy(){n.grid.destroy(),t()}}}function Rr(s){const{config:e,controls:t,fieldConfig:n,options:i,$:o,tag:a,activateCell:r,controlContext:l,openDetail:d,colorRuleMatches:c}=s;function p(u){if(u.node.group)return"";const f=u.data,g=u.colDef.field,v=document.createElement("div");v.className="rendered-cell";const m=n(g);if(m&&(m.control||!["title","status"].includes(m.kind||"text")))v.append(t.resolve(m).render(l(m,f,"cell")));else if((m==null?void 0:m.kind)==="title"){const b=document.createElement("a");b.className="item-name",b.href=`#item/${f.id}`,b.textContent=f[g],b.title=f[g],b.addEventListener("click",C=>{C.preventDefault(),clearTimeout(s.detailClickTimer.get()),C.detail===0?d(f):C.detail===1&&s.detailClickTimer.set(window.setTimeout(()=>d(f),280))}),v.append(b);const k=document.createElement("button");k.className="inline-edit",k.innerHTML=$e("pencil"),k.ariaLabel="编辑选题概要",k.onclick=C=>{C.stopPropagation(),r(v,g,f,u.rowIndex)},(m==null?void 0:m.editable)!==!1&&v.append(k)}else(m==null?void 0:m.kind)==="status"?(v.innerHTML=`${a(f.status,g)}<span class="status-days">20 天</span>`,(m==null?void 0:m.editable)!==!1&&(v.onclick=b=>{b.stopPropagation(),r(v,g,f,u.rowIndex)})):i[g]?(v.innerHTML=["creator","owner","space"].includes(g)?H(f[g]):a(f[g],g),(m==null?void 0:m.editable)!==!1&&(v.onclick=b=>{b.stopPropagation(),r(v,g,f,u.rowIndex)})):(v.innerHTML=`<span class="cell-text">${H(f[g]||"暂无")}</span>`,f[g]||v.classList.add("placeholder"));if(m&&m.editable!==!1&&!t.resolve(m).readonly&&m.kind!=="title"){const b=document.createElement("button");b.className="inline-edit field-control",b.ariaLabel=`${m.kind==="status"?"流转":"编辑"}${m.label}`,b.innerHTML=$e(m.kind==="status"?"transition":["radio","select","multiSelect","person"].includes(t.resolve(m).id)?"down":"pencil"),b.onclick=k=>{k.stopPropagation(),r(v,g,f,u.rowIndex)},v.append(b)}return v.title=String(f[g]??""),v}function h(){return[{colId:"_select",headerName:"",width:64,minWidth:64,maxWidth:64,pinned:"left",sortable:!1,resizable:!1,suppressMovable:!0,suppressMenu:!0,checkboxSelection:!0,headerCheckboxSelection:!0,rowDrag:!0,cellRenderer:u=>{if(u.node.group)return"";const f=document.createElement("div");return f.className="row-controls",f.innerHTML=`<span class="row-number">${u.rowIndex+1}</span><input class="row-checkbox" type="checkbox" aria-label="选择第 ${u.rowIndex+1} 行" ${u.node.isSelected()?"checked":""}><button class="row-open" aria-label="展开详情">${$e("expand")}</button>`,o("input",f).onclick=g=>g.stopPropagation(),o("input",f).onchange=g=>u.node.setSelected(g.target.checked),o("button",f).onclick=g=>{g.stopPropagation(),d(u.data)},f}},...e.fields.map(u=>({field:u.key,headerName:u.label,width:u.width??120,minWidth:u.minWidth??80,pinned:u.pinned,hide:u.hidden,enableRowGroup:!0,editable:!1,valueSetter:f=>u.required&&!String(f.newValue??"").trim()?!1:(f.data[u.key]=f.newValue,!0),comparator:u.options?(f,g)=>u.options.indexOf(f)-u.options.indexOf(g):void 0,sortable:!1,suppressMenu:!0,cellRenderer:p,cellStyle:({data:f})=>{const g=f&&s.view().colors.find(v=>!!v.scope&&v.scope!=="row"&&v.field===u.key&&c(f,v));return g?{backgroundColor:g.color}:{}},tooltipField:u.key,cellClass:u.kind==="title"?"name-cell":void 0,...u.column})),...s.customColumns(),{colId:"_add",hide:e.allowCustomFields===!1,suppressMovable:!0,headerName:"新增字段",width:40,minWidth:40,maxWidth:40,sortable:!1,resizable:!1,suppressMenu:!0,cellRenderer:()=>""}]}return{cell:p,columnDefs:h}}function Tr(s){const{config:e,data:t,fields:n,fieldConfig:i,options:o,controls:a,$:r,showPopup:l,closePopup:d,applyView:c,save:p,resizeGrid:h,decorateHeaders:u}=s;function f(b,k,C={}){e.container.querySelectorAll(".field-picker").forEach(D=>D.remove());const w=document.createElement("div");w.className="field-picker",w.innerHTML=`<input placeholder="搜索字段" aria-label="搜索字段"><div class="picker-tabs">${["推荐","文本","选择","人员","时间","关系","其他"].map(D=>`<button data-kind="${D}">${D}</button>`).join("")}</div><div class="field-options"></div>`,e.container.append(w);const L=b.getBoundingClientRect();w.style.left=`${Math.max(12,Math.min(L.left,innerWidth-410))}px`,w.style.top=`${Math.max(12,Math.min(L.bottom+4,innerHeight-340))}px`;let N="推荐";const y=(D="推荐",S="")=>{r(".field-options",w).innerHTML=n.filter(([R,M])=>{var F,q,T,B,A,I;return(!C.available||C.available(R))&&M.includes(S)&&(D==="推荐"||D==="文本"&&["title","text","longText","richText"].includes(((F=i(R))==null?void 0:F.kind)||"text")||D==="选择"&&["status","select","multiSelect"].includes(((q=i(R))==null?void 0:q.kind)||"")||D==="人员"&&((T=i(R))==null?void 0:T.kind)==="person"||D==="时间"&&["date","dateTime"].includes(((B=i(R))==null?void 0:B.kind)||"")||D==="关系"&&((A=i(R))==null?void 0:A.kind)==="relation"||D==="其他"&&((I=i(R))==null?void 0:I.kind)==="vote")}).map(([R,M])=>`<button data-field="${H(R)}" ${C.onCreate?`data-insert="${H(R)}"`:""} class="menu-option">${$e("table")}${H(M)}</button>`).join(""),C.onCreate&&r(".field-options",w).insertAdjacentHTML("beforeend",`<button class="menu-option new-field" data-create-field>${$e("add")}添加字段</button>`),w.querySelectorAll("[data-kind]").forEach(R=>{R.classList.toggle("active",R.dataset.kind===D),R.setAttribute("aria-pressed",String(R.dataset.kind===D))})};y(),r("input",w).oninput=D=>y(N,D.target.value),w.onclick=D=>{var R;const S=D.target.closest("button");S&&(D.stopPropagation(),S.dataset.kind&&(N=S.dataset.kind,y(N,r("input",w).value)),S.dataset.field&&(w.remove(),k(S.dataset.field)),S.hasAttribute("data-create-field")&&(w.remove(),(R=C.onCreate)==null||R.call(C)))}}function g(b){const k=s.instance(),C=l(b,"表格显示设置",`<input class="column-search" placeholder="搜索字段" aria-label="搜索字段"><div class="column-options">${k.api.getAllColumns().filter(w=>!w.colId.startsWith("_")).map(w=>`<label class="column-option"><input type="checkbox" data-column="${w.colId}" ${w.visible?"checked":""}><span>${H(w.headerName)}</span><button type="button" data-pin="${w.colId}">${w.pinned?"取消冻结":"冻结"}</button></label>`).join("")}</div>`,320);C.onchange=w=>{const L=w.target;L.dataset.column&&k.columnApi.setColumnVisible(L.dataset.column,L.checked)},C.onclick=w=>{const L=w.target.closest("[data-pin]");if(L){w.preventDefault();const N=k.columnApi.getColumn(L.dataset.pin);k.columnApi.setColumnPinned(N,N.pinned?null:"left"),g(b)}},r("input",C).oninput=w=>{const L=w.target.value;C.querySelectorAll(".column-option").forEach(N=>N.hidden=!N.textContent.includes(L))}}function v(b,k,C){const w=s.instance();d();const L=y=>{var R;const S=w.columnApi.getColumnState().findIndex(M=>M.colId===k)+(C?1:0);w.columnApi.setColumnVisible(y,!0),w.columnApi.setColumnPinned(y,k==="_add"?null:((R=w.columnApi.getColumn(k))==null?void 0:R.pinned)??null),w.columnApi.moveColumn(y,Math.max(1,S)),d(),h(),u()};f(b,L,{available:y=>{var D;return!((D=w.columnApi.getColumn(y))!=null&&D.visible)},onCreate:()=>{const y=l(b,"新建字段",`<form class="new-field-form"><label>字段名称<input name="label" aria-label="字段名称" required maxlength="80"></label><label>字段类型<select name="kind" aria-label="字段类型">${a.list().map(I=>`<option value="${H(I.id)}">${H(I.label)}</option>`).join("")}</select></label><label>选项(每行一个)<textarea name="options" aria-label="字段选项"></textarea></label><label class="choice-limit hidden">最多可选数量<input name="maxSelections" type="number" min="1" step="1" placeholder="不限" aria-label="最多可选数量"></label><button class="primary" type="submit">确认创建</button></form>`,320),D=r('[name="kind"]',y),S=r('[name="options"]',y),R=S.closest("label"),M=document.createElement("div");M.className="fc-field-schema",M.hidden=!0,M.innerHTML='<p class="hint">每组记录包含以下子字段</p><div class="fc-field-schema-rows"></div><button type="button" class="fc-composite-add">+ 添加子字段</button>';const F=a.list().filter(I=>!I.readonly&&!["composite","multiPersonComposite","attitudeVote","singleVote","multiVote","detail"].includes(I.id)),q=()=>{const I=document.createElement("div");I.className="fc-field-schema-row",I.innerHTML='<input class="fc-input" aria-label="子字段名称" placeholder="子字段名称"><select class="fc-input" aria-label="子字段类型">'+F.map($=>'<option value="'+H($.id)+'">'+H($.label)+"</option>").join("")+'</select><button type="button" aria-label="移除子字段">×</button>',I.querySelector("button").onclick=()=>I.remove(),M.querySelector(".fc-field-schema-rows").append(I)};M.querySelector("button").onclick=q,q();const T=document.createElement("p");T.className="fc-service-note";const B=document.createElement("p");B.className="fc-error",B.setAttribute("role","status"),r("form",y).insertBefore(M,r('button[type="submit"]',y)),r("form",y).insertBefore(T,r('button[type="submit"]',y)),r("form",y).insertBefore(B,r('button[type="submit"]',y));const A=()=>{const I=D.value,$=I==="cascadeSingle"||I==="cascadeMulti";R.hidden=!$&&!["select","multiSelect","radio","singleVote","multiVote","person","multiPerson","relation","multiRelation"].includes(I),S.placeholder=$?"每行一条路径,例如:产品 / 设计 / 交互":"每行一个选项",r(".choice-limit",y).classList.toggle("hidden",!["multiSelect","multiPerson","multiRelation","cascadeMulti"].includes(I)),M.hidden=!["composite","multiPersonComposite"].includes(I),T.textContent=$?"用 / 分隔层级;同名上级会合并。":I==="attachment"?"上传操作由宿主上传服务提供。":I.endsWith("Vote")?"投票操作由宿主投票服务提供。":"",B.textContent=""};D.onchange=A,A(),r("form",y).onsubmit=I=>{I.preventDefault();const $=new FormData(I.target),z=String($.get("label")||"").trim();if(!z)return;const W=`field_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,X=String($.get("kind")),te={key:W,label:z,kind:X,editable:!a.resolve({key:W,label:z,kind:X}).readonly,width:160};["select","multiSelect","person","multiPerson","radio","singleVote","multiVote","relation","multiRelation"].includes(X)&&(te.options=[...new Set(String($.get("options")||"").split(`
|
|
101
|
+
`).map(de=>de.trim()).filter(Boolean))]);const le=Number($.get("maxSelections"));if(["multiSelect","multiPerson","multiRelation","cascadeMulti"].includes(X)&&Number.isInteger(le)&&le>0&&(te.maxSelections=le),X==="dateTime"&&(te.dateOptions={showTime:!0,showSeconds:!0}),X==="cascadeSingle"||X==="cascadeMulti"){te.choices=[];for(const de of S.value.split(`
|
|
102
|
+
`).filter(ue=>ue.trim())){let ue=te.choices;const me=de.split("/").map(Ie=>Ie.trim()).filter(Boolean);me.forEach((Ie,fe)=>{let Re=ue.find(be=>be.id===Ie);Re||(Re={id:Ie,label:Ie},ue.push(Re)),fe<me.length-1&&(Re.children??(Re.children=[]),ue=Re.children)})}if(!te.choices.length){B.textContent="请至少填写一条分类路径";return}}if(X==="composite"||X==="multiPersonComposite"){const de=[...M.querySelectorAll(".fc-field-schema-row")];if(!de.length||de.some(ue=>!ue.querySelector("input").value.trim())){B.textContent="请填写子字段名称";return}te.compositeFields=de.map((ue,me)=>({key:"sub_"+me,label:ue.querySelector("input").value.trim(),kind:ue.querySelector("select").value})),X==="multiPersonComposite"&&te.compositeFields.unshift({key:"owner",label:"填写人",kind:"person",required:!0})}e.fields.push(te),n.push([W,z]),te.options&&(o[W]=te.options),t.customFields.push(te);const ve=w.columnApi.getColumnState();w.api.setColumnDefs(s.columnDefs()),w.columnApi.applyColumnState(ve,!0),L(W),p(),c()}}})}function m(b,k){const C=s.instance(),w=s.view(),L=C.columnApi.getColumn(k);if(!L||k==="_select")return;if(k==="_add"){v(b,k,!1);return}const N=["向左插入列","向右插入列",o[k]?"以 首项 → 末项 排序":"以 A → Z 排序",o[k]?"以 末项 → 首项 排序":"以 Z → A 排序","以此筛选",L.pinned?"取消冻结":"冻结列","编辑列","删除列","以此分组"],y=l(b,"",[[0,1],[2,3],[4,8],[5,6,7]].map(D=>D.map(S=>`<button class="menu-option${S===7?" destructive":""}" data-col-menu="${S}" ${S===7&&k==="name"?"disabled":""}>${N[S]}</button>`).join("")).join('<div class="column-menu-separator" role="separator"></div>'),240,"column-menu");y.dataset.headerMenu="true",y.onclick=D=>{const S=D.target.closest("[data-col-menu]");if(!S)return;const R=+S.dataset.colMenu;d(),(R===0||R===1)&&v(b,k,R===1),(R===2||R===3)&&(w.sorts=[{colId:k,sort:R===2?"asc":"desc"}],c()),R===4&&(w.filters.push({field:k,operator:"contains",value:""}),s.rulePanel("filter",r('[data-action="filter"]'))),R===5&&C.columnApi.setColumnPinned(k,L.pinned?null:"left"),R===6&&s.textDialog("编辑列",L.headerName,M=>{const F=i(k);F&&(F.label=M);const q=C.api.getColumnDefs(),T=q.find(A=>A.field===k);T&&(T.headerName=M);const B=C.columnApi.getColumnState();C.api.setColumnDefs(q),C.columnApi.applyColumnState(B,!0),u()}),R===7&&C.columnApi.setColumnVisible(k,!1),R===8&&(w.groups.includes(k)||w.groups.push(k),c())}}return{fieldPicker:f,showColumns:g,showInsertField:v,showColumnMenu:m}}function Nr(s){const{root:e,view:t,fieldConfig:n,showInsertField:i,showColumnMenu:o,applyView:a}=s,r=l=>e.querySelector(l);return function(){r("#grid").querySelectorAll(".ag-header-cell").forEach(d=>{var f,g;const c=d.dataset.colid;if(c==="_add"){if(!d.querySelector(".work-add-column")){const v=d.querySelector(".ag-header-cell-label"),m=document.createElement("button");m.type="button",m.className="work-add-column",m.ariaLabel="新增字段",m.title="新增字段",m.innerHTML=$e("add"),m.onmousedown=b=>b.stopPropagation(),m.onclick=b=>{b.stopPropagation(),i(m,"_add",!1)},v.replaceChildren(m)}return}if(!n(c))return;if(!d.querySelector(".work-header-sort")){const v=document.createElement("span");v.className="work-header-sort",(f=d.querySelector(".ag-header-cell-label"))==null||f.append(v);const m=document.createElement("button");m.className="work-header-menu",m.ariaLabel=`${n(c).label}操作`,m.innerHTML=$e("more"),m.onclick=k=>{k.stopPropagation(),o(m,c)},m.onmousedown=k=>k.stopPropagation(),d.append(m);for(const k of["right","left"]){const C=document.createElement("button");C.className="work-header-add",C.dataset.insertSide=k,C.ariaLabel=`在${n(c).label}${k==="right"?"右":"左"}侧插入列`,C.title="插入列",C.innerHTML=$e("add"),C.onclick=w=>{w.stopPropagation(),i(C,c,k==="right")},C.onmousedown=w=>w.stopPropagation(),d.append(C)}const b=()=>{const k=d.getBoundingClientRect(),C=r(".grid-wrap").getBoundingClientRect(),L=d.closest(".ag-header-viewport,.ag-pinned-left-header,.ag-pinned-right-header").getBoundingClientRect();d.querySelectorAll(".work-header-add").forEach(N=>{const y=N.dataset.insertSide==="left"?k.left:k.right;N.style.left=`${y-12}px`,N.style.top=`${k.top-20}px`,N.style.setProperty("--insert-line-height",`${Math.max(0,C.bottom-k.top+8)}px`),N.style.display=y<Math.max(C.left,L.left)-1||y>Math.min(C.right,L.right)+1?"none":""}),d.classList.add("insert-points-ready")};d.addEventListener("mouseenter",b),d.addEventListener("focusin",b),d.addEventListener("click",k=>{var w;if(k.target.closest("button,.ag-header-cell-resize"))return;k.stopImmediatePropagation();const C=(w=t().sorts.find(L=>L.colId===c))==null?void 0:w.sort;t().sorts=C==="desc"?[]:[{colId:c,sort:C==="asc"?"desc":"asc"}],a()},{capture:!0})}const p=(g=t().sorts.find(v=>v.colId===c))==null?void 0:g.sort,h=d.querySelector(".work-header-sort"),u=p==="asc"?"↑":p==="desc"?"↓":"↕";h.textContent!==u&&(h.textContent=u),h.classList.toggle("sorted",!!p),d.setAttribute("aria-sort",p==="asc"?"ascending":p==="desc"?"descending":"none")})}}function Ir(s){const{fields:e,fieldConfig:t,options:n,controls:i,newItem:o,fieldPicker:a,showPopup:r,applyView:l}=s;function d(h,u){return!!u.field&&(!!u.value||["blank","notBlank"].includes(u.operator))&&ls(h,[u])}function c(h){if(s.renderPanel){s.renderPanel("color",h);return}const u=s.view(),f=u.colors.map((L,N)=>{var M;const y=(M=t(L.field))==null?void 0:M.label,D=L.field?[["contains",n[L.field]?"存在选项属于":"包含"],["equals","等于"],["notEqual","不等于"],["blank","为空"],["notBlank","不为空"]]:[["","运算符"]],S=!L.field||["blank","notBlank"].includes(L.operator),R=n[L.field]?nn([["","请选择目标值"],...n[L.field].map(F=>[F,F])],L.value,`data-rule-value="${N}" aria-label="目标值" ${S?"disabled":""}`):`<input data-rule-value="${N}" aria-label="目标值" placeholder="请选择目标值" value="${H(L.value)}" ${S?"disabled":""}>`;return`<div class="color-condition" data-color-row="${N}">
|
|
103
103
|
<button class="color-drag" draggable="true" title="拖动调整条件优先级" aria-label="拖动条件">⠿</button>
|
|
104
|
-
<button type="button" class="color-swatch" data-color="${
|
|
105
|
-
<button type="button" class="field-select" data-color-scope="${
|
|
106
|
-
<button class="field-select ${
|
|
107
|
-
${
|
|
108
|
-
${
|
|
109
|
-
<button class="color-remove" data-remove="${
|
|
110
|
-
<div class="color-more-wrap"><button class="color-more" data-color-more="${
|
|
111
|
-
</div>`}).join(""),g=l(h,"",`<div class="color-panel-title">设置颜色条件<span class="color-help" tabindex="0" title="按条件优先级着色;同一范围满足多个条件时,使用最上方条件的颜色。" aria-label="颜色条件说明">i</span></div><div class="color-conditions">${f}</div><div class="color-panel-footer"><button class="add-condition">${Re("plus")}添加着色条件</button><button class="clear-rules" ${u.colors.length?"":"disabled"}>清空全部条件</button></div>`,Math.min(944,innerWidth-24),"color-panel");g.ariaLabel="设置颜色条件",s.setActiveRulePanel("color");const v=()=>c(h),m=()=>{r(),v()},w=["#ffe5e5","#ffe7d4","#f9e8d2","#fff5d6","#ecf3d3","#daf2d5","#d6f1ec","#d4efff","#e4eaff","#ebe9fe","#f2e8ff","#f7e4fb","#ffe3f2","#ffc8c8","#ffceaa","#f3d3a4","#ffeaa5","#d9e8a7","#b6e4af","#ace4db","#acdffc","#c9d8ff","#d7d5fb","#e3d0ff","#efc9f5","#fbc5e7"],k=()=>{var N;(N=g.querySelector(".color-palette"))==null||N.remove(),g.querySelectorAll("[data-color]").forEach(I=>I.setAttribute("aria-expanded","false"))},C=()=>{var N,I,E;(N=g.querySelector(".color-scope-picker"))==null||N.remove(),(E=(I=s.getPopupEditor())==null?void 0:I.destroy)==null||E.call(I),s.setPopupEditor(null),g.querySelectorAll("[data-color-scope]").forEach(G=>G.setAttribute("aria-expanded","false"))};let b=-1;g.querySelectorAll(".color-condition").forEach((N,I)=>{N.ondragstart=E=>{var G;b=I,(G=E.dataTransfer)==null||G.setData("text/plain",String(I))},N.ondragover=E=>E.preventDefault(),N.ondrop=E=>{if(E.preventDefault(),b<0||b===I)return;const[G]=u.colors.splice(b,1);u.colors.splice(I,0,G),m()}}),g.onclick=N=>{var G,x,T;N.stopPropagation();const I=N.target.closest("button");if(N.target.closest(".color-scope-picker"))return;const E=(I==null?void 0:I.getAttribute("aria-expanded"))==="true";if(C(),!I||I.disabled){k();return}if(I.dataset.colorScope!==void 0){if(k(),E)return;const A=Number(I.dataset.colorScope),H=u.colors[A],q={key:"colorScope",label:"着色范围",kind:"select",options:["整行","单元格"],required:!0},R=i.resolve(q).createEditor({field:q,value:!H.scope||H.scope==="row"?"整行":"单元格",item:o(),surface:"cell",readonly:!1,openDetail:()=>{}});s.setPopupEditor(R);const P=document.createElement("div");P.className="popup fc-popup fc-choice-popup color-scope-picker",P.style.width="272px",P.append(R.element),g.append(P);const L=I.getBoundingClientRect();P.style.left=`${Math.max(8,Math.min(L.left,innerWidth-280))}px`,P.style.top=`${Math.max(8,Math.min(L.bottom+6,innerHeight-P.offsetHeight-8))}px`,I.setAttribute("aria-expanded","true"),R.element.addEventListener("change",M=>{var $,z,j;M.stopPropagation(),!(($=R.validate)!=null&&$.call(R))&&(H.scope=R.read()==="整行"?"row":"cell",m(),(j=(z=s.popup())==null?void 0:z.querySelector(`[data-color-scope="${A}"]`))==null||j.focus())}),P.onkeydown=M=>{M.key==="Escape"&&(M.stopPropagation(),C(),I.focus())},(G=R.focus)==null||G.call(R);return}if(I.dataset.paletteColor!==void 0){const A=Number(I.closest(".color-palette").dataset.ruleIndex);u.colors[A].color=I.dataset.paletteColor,m(),(T=(x=s.popup())==null?void 0:x.querySelector(`[data-color="${A}"]`))==null||T.focus();return}if(I.dataset.color!==void 0){const A=I.getAttribute("aria-expanded")==="true";if(k(),A)return;const H=Number(I.dataset.color),q=document.createElement("div");q.className="color-palette",q.dataset.ruleIndex=String(H),q.setAttribute("role","group"),q.ariaLabel="选择着色颜色",q.innerHTML=w.map(P=>`<button type="button" class="color-palette-option" data-palette-color="${P}" style="background-color:${P}" aria-label="颜色 ${P}" aria-pressed="${P===u.colors[H].color.toLowerCase()}"></button>`).join(""),g.append(q);const R=I.getBoundingClientRect();q.style.left=`${Math.max(8,Math.min(R.left,innerWidth-q.offsetWidth-8))}px`,q.style.top=`${Math.max(8,Math.min(R.bottom+6,innerHeight-q.offsetHeight-8))}px`,I.setAttribute("aria-expanded","true"),q.onkeydown=P=>{P.key==="Escape"&&(P.stopPropagation(),k(),I.focus())};return}if(k(),I.classList.contains("add-condition"))u.colors.push({field:"",operator:"contains",value:"",color:"#fff5d6",scope:"row"}),m();else if(I.dataset.pick!==void 0){const A=+I.dataset.pick;a(I,H=>{u.colors[A].field=H,u.colors[A].value="",u.colors[A].operator="contains",m()})}else if(I.dataset.remove!==void 0)u.colors.splice(+I.dataset.remove,1),m();else if(I.classList.contains("clear-rules"))u.colors=[],m();else if(I.dataset.colorMore!==void 0){const A=I.nextElementSibling,H=A.classList.contains("hidden");g.querySelectorAll(".color-rule-menu").forEach(q=>q.classList.add("hidden")),g.querySelectorAll("[data-color-more]").forEach(q=>q.setAttribute("aria-expanded","false")),A.classList.toggle("hidden",!H),I.setAttribute("aria-expanded",String(H))}else if(I.dataset.colorCopy!==void 0){const A=+I.dataset.colorCopy;u.colors.splice(A+1,0,structuredClone(u.colors[A])),m()}else if(I.dataset.colorUp!==void 0||I.dataset.colorDown!==void 0){const A=Number(I.dataset.colorUp??I.dataset.colorDown),[H]=u.colors.splice(A,1);u.colors.splice(A+(I.dataset.colorUp!==void 0?-1:1),0,H),m()}},g.onchange=N=>{const I=N.target;if(I.dataset.operator!==void 0){u.colors[+I.dataset.operator].operator=I.value,m();return}I.dataset.ruleValue!==void 0&&(u.colors[+I.dataset.ruleValue].value=I.value),r()},g.oninput=N=>{const I=N.target;if(I.dataset.ruleValue!==void 0)u.colors[+I.dataset.ruleValue].value=I.value;else return;r()}}function p(h,u){if(h==="color"){c(u);return}const f=s.view(),g={filter:"筛选",sort:"排序",group:"分组",color:"颜色"}[h],v=h==="filter"?f.filters:h==="sort"?f.sorts:h==="group"?f.groups:f.colors,m=v.map((b,N)=>{var A;const I=h==="sort"?b.colId:h==="group"?b:b.field,E=((A=e.find(([H])=>H===I))==null?void 0:A[1])||I,G=`<button class="field-select" data-pick="${N}">${D(E)}${Re("down")}</button>`;if(h==="sort")return`<div class="condition">${G}<button class="sort-direction ${b.sort==="asc"?"selected":""}" data-dir="asc" data-index="${N}">首项 → 末项</button><button class="sort-direction ${b.sort==="desc"?"selected":""}" data-dir="desc" data-index="${N}">末项 → 首项</button><button data-remove="${N}" aria-label="删除条件">${Re("close")}</button></div>`;if(h==="group")return`<div class="condition">${G}<span class="spacer"></span><button data-remove="${N}" aria-label="删除条件">${Re("close")}</button></div>`;const x=Wt([["contains",n[I]?"存在选项属于":"包含"],["equals","等于"],["notEqual","不等于"],["blank","为空"],["notBlank","不为空"]],b.operator,`data-operator="${N}" aria-label="运算符"`),T=["blank","notBlank"].includes(b.operator)?"":n[I]?Wt([["","请选择目标值"],...n[I].map(H=>[H,H])],b.value,`data-rule-value="${N}" aria-label="目标值"`):`<input data-rule-value="${N}" aria-label="目标值" value="${D(b.value)}" placeholder="请选择目标值">`;return`<div class="condition">${G}${x}${T}${h==="color"?`<input type="color" data-color="${N}" value="${b.color}" aria-label="行颜色">`:""}<button data-remove="${N}" aria-label="删除条件">${Re("close")}</button></div>`}).join(""),w=l(u,`设置${g}条件`,`${h==="filter"?`<label class="terminated"><input type="checkbox" id="terminated" ${f.showTerminated?"checked":""}>显示已终止数据</label>`:""}${m}<button class="add-condition">${Re("plus")}添加${h==="color"?"着色":g}条件</button>${v.length?'<button class="clear-rules">清空全部条件</button>':""}`,h==="color"?650:560);s.setActiveRulePanel(h);const k=()=>p(h,u);let C=-1;w.querySelectorAll(".condition").forEach((b,N)=>{b.draggable=!0,b.ondragstart=I=>{var E;C=N,(E=I.dataTransfer)==null||E.setData("text/plain",String(N))},b.ondragover=I=>I.preventDefault(),b.ondrop=I=>{if(I.preventDefault(),C<0||C===N)return;const[E]=v.splice(C,1);v.splice(N,0,E),r(),k()}}),w.onclick=b=>{const N=b.target.closest("button");N&&(N.classList.contains("add-condition")&&a(N,I=>{h==="filter"&&f.filters.push({field:I,operator:"contains",value:""}),h==="sort"&&f.sorts.push({colId:I,sort:"asc"}),h==="group"&&!f.groups.includes(I)&&f.groups.push(I),h==="color"&&f.colors.push({field:I,operator:"contains",value:"",color:"#e9f2ff"}),r(),k()}),N.dataset.pick!==void 0&&a(N,I=>{const E=+N.dataset.pick;h==="sort"?f.sorts[E].colId=I:h==="group"?f.groups[E]=I:(v[E].field=I,v[E].value=""),r(),k()}),N.dataset.remove!==void 0&&(v.splice(+N.dataset.remove,1),r(),k()),N.classList.contains("clear-rules")&&(v.splice(0),r(),k()),N.dataset.dir&&(f.sorts[+N.dataset.index].sort=N.dataset.dir,r(),k()))},w.onchange=b=>{const N=b.target;N.id==="terminated"&&(f.showTerminated=N.checked),N.dataset.operator!==void 0&&(v[+N.dataset.operator].operator=N.value,k()),N.dataset.ruleValue!==void 0&&(v[+N.dataset.ruleValue].value=N.value),N.dataset.color!==void 0&&(f.colors[+N.dataset.color].color=N.value),r()},w.oninput=b=>{const N=b.target;N.tagName==="INPUT"&&N.dataset.ruleValue!==void 0&&(v[+N.dataset.ruleValue].value=N.value,r())}}return{colorRuleMatches:d,colorPanel:c,rulePanel:p}}function Xa(s={}){var d;const e=document.createElement("section");e.className="rowvia-work-items detail-header-surface";const t=document.createElement("div");t.className="detail-meta-row";const n=s.tags??[];t.innerHTML=`${n.map(c=>`<span class="detail-meta-tag">${D(c)}</span>`).join("")}<button type="button" class="detail-meta-add" data-detail-action="add-tag" aria-label="添加标签">${Re("add")}</button><span class="detail-meta-divider"></span>${(s.signals||[]).map(c=>`<button type="button" class="detail-signal${c.checked?" checked":""}" data-detail-action="toggle-signal"><span class="detail-signal-dot">${c.checked?"✓":""}</span>${D(c.label)}</button>`).join("")}`,e.append(t);const i=s.stages??[],o=s.activeStage||((d=i.find(c=>c.state==="active"))==null?void 0:d.id),a=document.createElement("div");a.className="detail-process-strip",a.setAttribute("aria-label","工作项流程"),a.innerHTML=i.map((c,p)=>`<div class="detail-stage-wrap"><button type="button" class="detail-stage ${c.id===o?"active":""} ${c.state||""}" data-detail-action="stage" data-stage="${D(c.id)}"><span class="detail-stage-dot"></span>${D(c.label)}</button>${p<i.length-1?'<span class="detail-stage-line"></span>':""}</div>`).join(""),e.append(a);const l=document.createElement("div");l.className="detail-stage-card";const r=i.find(c=>c.id===o)||i[0];return r&&(l.innerHTML=`<div class="detail-stage-card-head"><div><span class="detail-stage-chevron">⌄</span><span class="detail-stage-card-dot ${r.state||""}"></span><strong>${D(r.label)}</strong><span class="detail-stage-status">进行中</span></div><div class="detail-stage-card-actions"><button type="button" class="primary" data-detail-action="complete-stage">完成</button><button type="button" class="icon-button" data-detail-action="stage-more" aria-label="节点更多">${Re("more")}</button></div></div><div class="detail-stage-card-body"><span>负责人</span><strong>${D(s.owner||"待填")}</strong></div><div class="detail-dependency"><span>⌄</span> 依赖项</div>`),r&&e.append(l),e.onclick=c=>{var u;const p=c.target.closest("[data-detail-action]");if(!p)return;const h=p.dataset.detailAction||"";(u=s.onAction)==null||u.call(s,h),e.dispatchEvent(new CustomEvent("rowvia:detail-action",{detail:{action:h,stage:p.dataset.stage},bubbles:!0}))},e}function Za(s={}){const e=Xa(s),t=Fe(e,"work-item-detail-header",s);return{element:e,onInteraction:t.onInteraction,destroy(){t.destroy(),e.onclick=null,e.remove()}}}function Qa(s,e={}){const t=document.createElement("div");t.className="rowvia-work-items rowvia-field-scope",t.style.display="contents",s.append(t);const n=new Ke,i=Fe(t,"work-item-layers",e);let o=null,a=null,l=null,r,d=null;const c=(u,f,g)=>{var v,m;u==="open"?(v=e.onOpen)==null||v.call(e,f,g):(m=e.onClose)==null||m.call(e,f),t.dispatchEvent(new CustomEvent(`rowvia:layer-${u}`,{detail:{kind:f,element:g},bubbles:!0}))};function p(){o&&(o.remove(),o=null,c("close","popup"))}function h(){a&&(a.remove(),a=null,l==null||l.focus(),l=null,c("close","overlay"))}return n.listen(t,"click",u=>{var m;const f=u.target,g=(m=f.closest("[data-action]"))==null?void 0:m.dataset.action,v=g==="close-popup"?"popup":g==="close-overlay"||f===a?"overlay":void 0;v&&(u.stopPropagation(),e.onCloseRequest?e.onCloseRequest(v):v==="popup"?p():h())}),{element:t,onInteraction:i.onInteraction,closePopup:p,closeOverlay:h,showPopup(u,f,g,v=460,m=""){if(n.destroyed)throw new Error("Cannot open a destroyed layer host");p(),o=document.createElement("section"),o.className=`popup ${m}`,o.setAttribute("role","dialog"),o.ariaLabel=f||"列操作",o.style.width=`${v}px`,o.innerHTML=`${f?`<div class="popup-head"><span>${D(f)}</span>${Ie("close-popup","","close")}</div>`:""}${g}`,t.append(o);const w=u.getBoundingClientRect();return o.style.left=`${Math.max(12,Math.min(w.left,innerWidth-v-16))}px`,o.style.top=`${Math.min(w.bottom+8,Math.max(12,innerHeight-o.offsetHeight-16))}px`,c("open","popup",o),o},showOverlay(u,f="dialog-overlay"){if(n.destroyed)throw new Error("Cannot open a destroyed layer host");return a?(a.remove(),c("close","overlay")):l=document.activeElement,a=document.createElement("div"),a.className=`overlay ${f}`,a.setAttribute("role","dialog"),a.setAttribute("aria-modal","true"),typeof u=="string"?a.innerHTML=u:a.append(u),t.append(a),c("open","overlay",a),a},toast(u){if(n.destroyed)return;r==null||r(),d==null||d.remove();const f=document.createElement("div");f.className="toast",f.setAttribute("role","status"),f.innerHTML=Re("check")+D(u),t.append(f),d=f;const g=window.setTimeout(()=>{f.remove(),r==null||r()},2500);r=n.add(()=>window.clearTimeout(g))},destroy(){n.destroyed||(n.destroy(),i.destroy(),p(),h(),t.remove())}}}const Sn=new WeakMap;function Gi(s,e){let t=Sn.get(s);if(!t){const i=new Set,o=a=>{for(const l of[...i])i.has(l)&&!l.contains(a.target,a)&&l.leave(a)};s.addEventListener("pointerdown",o,!0),s.addEventListener("focusin",o,!0),t={boundaries:i,stop:()=>{s.removeEventListener("pointerdown",o,!0),s.removeEventListener("focusin",o,!0)}},Sn.set(s,t)}t.boundaries.add(e);const n=t;return()=>{!n.boundaries.delete(e)||n.boundaries.size||(n.stop(),Sn.delete(s))}}class Be{constructor(e){y(this,"root");y(this,"destroying",!1);y(this,"feedback");y(this,"options");y(this,"value");y(this,"committedValue");y(this,"state");y(this,"view");y(this,"viewLife",new Ke);y(this,"life",new Ke);y(this,"listeners",new Set);y(this,"interactions");y(this,"interactionListeners",new Set);y(this,"mounted",!1);y(this,"handled",new WeakSet);this.options={...e},this.value=e.value,this.committedValue=e.value,this.state=e.readonly||e.canEdit===!1?"display":e.state??"display"}get element(){if(this.root)return this.root;const e=document.createElement("div");return e.className="rowvia-field",e.tabIndex=0,e.setAttribute("aria-label",this.options.field.label),this.root=e,e}bindRoot(){this.life.listen(this.element,"pointerenter",()=>{this.state==="display"&&this.setState("hover","user")}),this.life.listen(this.element,"pointerleave",()=>{this.state==="hover"&&this.setState("display","user")}),this.life.listen(this.element,"click",e=>{e.target.closest("button,a,input,textarea,select,[contenteditable]")||this.edit("user")}),this.life.listen(this.element,"keydown",e=>{const t=e.key;t==="Escape"&&this.state==="editing"?(e.preventDefault(),this.cancel("user")):(t==="Enter"||t===" ")&&this.state!=="editing"&&e.target===this.element&&(e.preventDefault(),this.edit("user"))}),this.life.listen(this.element,"fc-collapse",e=>{var t;((t=e.detail)==null?void 0:t.reason)==="escape"?this.cancel("user"):this.commit("user")}),this.life.listen(this.element,"focusout",()=>{queueMicrotask(()=>{var t,n;if(this.life.destroyed||!this.element.isConnected||this.state!=="editing")return;const e=this.element.ownerDocument.activeElement;this.element.contains(e)||(n=(t=this.view)==null?void 0:t.content)!=null&&n.contains(e)||Xe(e,this.element)||this.commit("user")})})}renderHover(e){return this.renderDisplay(e)}beforeInput(e){return e}beforeCommit(e){return!0}beforeCancel(e){return!0}beforeStateChange(e){return!0}validateValue(e){}isReadonly(){return!!this.options.readonly||this.options.canEdit===!1||this.options.field.editable===!1}onOutput(e){}get snapshot(){return{key:this.options.field.key,value:this.read(),committedValue:this.committedValue,state:this.state,readonly:this.isReadonly()}}mount(e){if(this.life.destroyed)throw new Error("Cannot mount a destroyed field");return this.mounted||(this.mounted=!0,this.bindRoot(),this.draw()),e==null||e.append(this.element),this}read(){var e;return this.state==="editing"&&((e=this.view)!=null&&e.read)?this.view.read():this.value}on(e){return this.life.destroyed?()=>{}:(this.listeners.add(e),()=>{this.listeners.delete(e)})}onInteraction(e){return this.life.destroyed?()=>{}:(this.interactionListeners.add(e),()=>{this.interactionListeners.delete(e)})}input(e,t="api",n){var l;if(this.life.destroyed||this.snapshot.readonly)return;const i=this.value,o=this.snapshot,a=this.beforeInput(e);this.value=(l=this.options.hooks)!=null&&l.beforeInput?this.options.hooks.beforeInput(a,o):a,(t==="api"||!Object.is(e,this.value))&&this.draw(),this.emit("input",t,{previousValue:i,originalEvent:n})}setValue(e){if(this.life.destroyed)return;const t=this.read();this.value=e,this.committedValue=e,this.draw(),this.emit("change","api",{previousValue:t})}update(e){this.life.destroyed||(this.value=this.read(),this.options={...this.options,...e},"value"in e&&(this.value=this.committedValue=e.value),e.state&&(this.state=e.state),this.isReadonly()&&(this.state="display"),this.draw())}validate(){var n,i,o,a;const e=this.read(),t=e==null||e===""||Array.isArray(e)&&e.length===0;return(this.options.field.required&&t?"此项必填":void 0)||this.validateValue(e)||((i=(n=this.view)==null?void 0:n.validate)==null?void 0:i.call(n))||((a=(o=this.options.hooks)==null?void 0:o.validate)==null?void 0:a.call(o,e))}commit(e="api"){var i,o;if(this.life.destroyed||this.snapshot.readonly)return!1;const t=this.validate();if(this.showValidation(t),t)return this.emit("invalid",e,{message:t}),!1;const n=this.event("commit",e,{previousValue:this.committedValue});return!this.beforeCommit(n)||((o=(i=this.options.hooks)==null?void 0:i.beforeCommit)==null?void 0:o.call(i,n))===!1?!1:(this.value=this.read(),this.committedValue=this.value,this.element.removeAttribute("aria-invalid"),this.emit("commit",e,{previousValue:n.previousValue}),this.setState("display",e),!0)}cancel(e="api"){var i,o,a,l;if(this.life.destroyed)return;const t=this.event("cancel",e);if(!this.beforeCancel(t)||((o=(i=this.options.hooks)==null?void 0:i.beforeCancel)==null?void 0:o.call(i,t))===!1)return;const n=this.event("state",e,{previousState:this.state,state:"display",value:this.committedValue});this.state!=="display"&&(!this.beforeStateChange(n)||((l=(a=this.options.hooks)==null?void 0:a.beforeStateChange)==null?void 0:l.call(a,n))===!1)||(this.value=this.committedValue,this.disposeView(),this.state="display",this.draw(),this.emit("cancel",e),n.previousState!=="display"&&this.publish(n))}edit(e="api"){var t,n;this.life.destroyed||(this.setState("editing",e),this.state==="editing"&&((n=(t=this.view)==null?void 0:t.focus)==null||n.call(t)))}setState(e,t="api"){var o,a,l,r;if(this.life.destroyed||e===this.state||e==="editing"&&this.snapshot.readonly)return;const n=this.event("state",t,{previousState:this.state});if(n.state=e,!this.beforeStateChange(n)||((a=(o=this.options.hooks)==null?void 0:o.beforeStateChange)==null?void 0:a.call(o,n))===!1)return;const i=this.state!=="editing"&&e!=="editing"&&!((l=this.options.renderers)!=null&&l.display)&&!((r=this.options.renderers)!=null&&r.hover)&&this.renderHover===Be.prototype.renderHover;this.value=this.read(),this.state=e,i&&this.view?this.element.dataset.state=e:this.draw(),this.publish(n)}action(e,t){var i,o;if(this.life.destroyed)return;const n={type:e,value:t};(o=(i=this.options).onAction)==null||o.call(i,n),this.emit("action","api",{action:n})}destroy(){var e,t;if(!(this.life.destroyed||this.destroying)){this.destroying=!0,this.value=this.read();try{this.emit("destroy","api")}finally{try{this.disposeView()}finally{(e=this.interactions)==null||e.destroy(),this.life.destroy(),this.listeners.clear(),this.interactionListeners.clear(),(t=this.root)==null||t.remove()}}}}createEditor(){if(this.life.destroyed)throw new Error("Cannot edit a destroyed field");this.disposeView(),this.state="editing";const e=this.renderEditing(this.context());return this.view=e,this.watch(e),{...e,read:()=>this.read(),validate:()=>this.validate(),onInteraction:t=>this.onInteraction(t),destroy:()=>this.destroy()}}render(){if(this.life.destroyed)throw new Error("Cannot render a destroyed field");return this.disposeView(),this.view=this.renderDisplay(this.context()),{...this.view,destroy:()=>this.destroy()}}context(){return{...this.options,readonly:this.isReadonly(),value:this.value,onAction:e=>this.action(e.type,e.value)}}showValidation(e){var t;if(this.mounted){if(!e){this.element.removeAttribute("aria-invalid"),(t=this.feedback)==null||t.remove();return}this.feedback??(this.feedback=this.element.ownerDocument.createElement("div")),this.feedback.className="fc-error",this.feedback.setAttribute("role","status"),this.feedback.textContent=e,this.element.setAttribute("aria-invalid","true"),this.element.append(this.feedback)}}draw(){var c,p,h,u,f,g,v;if(!this.mounted||this.life.destroyed)return;const e=this.element.ownerDocument.activeElement,t=this.state==="editing"&&!!e&&(!!((c=this.view)!=null&&c.element.contains(e))||!!((h=(p=this.view)==null?void 0:p.content)!=null&&h.contains(e))),n=e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement?{start:e.selectionStart,end:e.selectionEnd}:void 0;this.disposeView(),this.isReadonly()&&(this.state="display");const i=this.snapshot,o=this.options.content,a=typeof o=="function"?o(i):o??{kind:"text",text:this.value==null?"":String(this.value)},l=this.context(),r=()=>this.state==="editing"?this.renderEditing(l):o?En(a):this.state==="hover"?this.renderHover(l):this.renderDisplay(l),d={...i,element:this.element,field:this.options.field,content:a,renderDefault:r,input:m=>this.input(m),commit:()=>this.commit(),cancel:()=>this.cancel(),edit:()=>this.edit(),action:(m,w)=>this.action(m,w)};if(this.view=((f=(u=this.options.renderers)==null?void 0:u[this.state])==null?void 0:f.call(u,d))??r(),this.element.setAttribute("aria-label",this.options.field.label),this.element.dataset.state=this.state,this.element.dataset.readonly=String(i.readonly),this.element.replaceChildren(this.view.element),this.element.removeAttribute("aria-invalid"),this.watch(this.view),t){(v=(g=this.view).focus)==null||v.call(g);const m=this.element.ownerDocument.activeElement;if((n==null?void 0:n.start)!=null&&n.end!=null&&(m instanceof HTMLInputElement||m instanceof HTMLTextAreaElement))try{m.setSelectionRange(n.start,n.end)}catch{}}}watch(e){if(this.mounted&&this.state==="editing"){const n=()=>[this.element,e.content,this.options.focusBoundary].filter(i=>!!i);this.viewLife.add(Gi(this.element.ownerDocument,{contains:(i,o)=>n().some(a=>o.composedPath().includes(a)||!!i&&a.contains(i)||Xe(i,a)),leave:()=>{this.element.isConnected&&this.commit("user")}}))}this.interactions??(this.interactions=Fe(this.mounted?this.element:e.element,`field:${this.options.field.key}`,{onInteraction:n=>{var i,o;(o=(i=this.options).onInteraction)==null||o.call(i,n);for(const a of this.interactionListeners)a(n)}}));const t=[...new Set([e.element,e.content].filter(n=>!!n))];for(const n of t)this.viewLife.add(this.interactions.addRoot(n));for(const n of e.inputRoot?[e.inputRoot]:t)for(const i of["input","change"])this.viewLife.listen(n,i,o=>{var a;this.handled.has(o)||(this.handled.add(o),this.input(((a=e.read)==null?void 0:a.call(e))??this.value,"user",o),i==="change"&&this.emit("change","user",{originalEvent:o}))})}disposeView(){var t;this.viewLife.destroy(),this.viewLife=new Ke;const e=this.view;this.view=void 0,(t=e==null?void 0:e.destroy)==null||t.call(e)}event(e,t,n={}){return{...this.snapshot,type:e,source:t,...n}}emit(e,t,n={}){this.publish(this.event(e,t,n))}publish(e){var i,o,a;this.onOutput(e),(o=(i=this.options).onEvent)==null||o.call(i,e);for(const l of[...this.listeners])l(e);const t=this.mounted?this.element:(a=this.view)==null?void 0:a.element;if(!t)return;const n=t.ownerDocument.defaultView.CustomEvent;t.dispatchEvent(new n(`field:${e.type}`,{detail:e,bubbles:!0}))}}function En(s){if(s.kind==="node")return{element:s.node,destroy:s.destroy};const e=document.createElement("div");if(e.className=s.className??"",s.kind==="text")return e.textContent=s.text,{element:e};const t=s.children.map(En);return e.append(...t.map(n=>n.element)),{element:e,destroy:()=>t.forEach(n=>{var i;return(i=n.destroy)==null?void 0:i.call(n)})}}function qi(s,e=312){s.rows=1,s.style.resize="none";const t=()=>{s.style.height="auto";const n=s.scrollHeight;n>0&&(s.style.height=Math.min(n,e)+"px"),s.style.overflowY=n>e?"auto":"hidden"};return s.addEventListener("input",t),s.addEventListener("focus",t),queueMicrotask(t),t}const zi=s=>s==null?"":String(s);function Ja(s){var t;const e=O("div",`fc-value fc-${s.className||""}`);if(s.field.kind==="richText"||s.field.kind==="richtext"||s.field.kind==="longText"||s.field.control==="richText")e.innerHTML=wt(s.value);else if(s.field.kind==="number"&&typeof s.value=="number"){const n=s.field.numberOptions;e.textContent=s.value.toLocaleString("zh-CN",{useGrouping:(n==null?void 0:n.thousandsSeparator)??!1,maximumFractionDigits:(n==null?void 0:n.decimals)??10})+((n==null?void 0:n.suffix)||""),e.classList.add("fc-plain")}else e.textContent=zi(s.value),e.classList.add("fc-plain");return(t=e.textContent)!=null&&t.trim()||(e.textContent="待填",e.classList.add("fc-empty")),e}function _i(s,e){const n=s==="text"&&e.layout!=="compact"?O("textarea","fc-input fc-textarea"):O("input","fc-input");if(n instanceof HTMLInputElement&&(n.type=s),n.value=zi(e.value),n.disabled=e.readonly,n.required=!!e.field.required,n.ariaLabel=e.field.label,n.placeholder=e.field.placeholder||(e.layout!=="compact"?"待填":`请输入${e.field.label}`),e.field.maxLength!==void 0&&(n.maxLength=e.field.maxLength),s==="number"&&n instanceof HTMLInputElement){const i=e.field.numberOptions;n.step=String((i==null?void 0:i.step)??"any"),(i==null?void 0:i.min)!==void 0&&(n.min=String(i.min)),(i==null?void 0:i.max)!==void 0&&(n.max=String(i.max))}return n instanceof HTMLTextAreaElement&&qi(n),s==="text"&&e.layout!=="compact"&&n.addEventListener("keydown",i=>{i.key==="Enter"&&(i.preventDefault(),n.dispatchEvent(new Event("fc-collapse",{bubbles:!0})))}),{element:n,read:()=>s==="number"?n.value===""?null:Number(n.value):n.value,validate:()=>e.field.required&&!n.value.trim()?"此项必填":n.checkValidity()?void 0:n.validationMessage||"请填写有效值",focus:()=>n.focus()}}const at=s=>s==null?"":String(s),rt=s=>s.dispatchEvent(new Event("change",{bubbles:!0}));function xn(s){try{const e=new URL(at(s));return["http:","https:"].includes(e.protocol)?e.href:void 0}catch{return}}function Tt(s){return O("div","fc-value fc-plain fc-"+(s.className||"")+(s.value==null||s.value===""?" fc-empty":""),at(s.value)||"待填")}function jt(s,e){const t=e==="textarea"?O("textarea","fc-input fc-textarea"):O("input","fc-input");return t instanceof HTMLInputElement&&(t.type=e),t instanceof HTMLTextAreaElement&&qi(t),t.value=at(s.value),t.disabled=s.readonly,t.required=!!s.field.required,t.ariaLabel=s.field.label,t.placeholder=s.field.placeholder||"请输入"+s.field.label,s.field.maxLength!==void 0&&(t.maxLength=s.field.maxLength),{element:t,read:()=>t.value,focus:()=>t.focus(),validate:()=>e==="url"&&t.value&&!xn(t.value)?"请输入 http 或 https 链接":t.checkValidity()?void 0:"请填写有效的"+s.field.label}}function er(s){const e=O("div","fc-link-value"),t=xn(s.value);if(!t)return Tt(s);const n=O("a","fc-link",at(s.value));return n.href=t,n.target="_blank",n.rel="noopener noreferrer",n.onclick=i=>i.stopPropagation(),e.append(O("span","fc-link-icon","↗"),n),e}function Wi(s){let e=s.value==null||s.value===""?null:s.value===!0;const t=O("div","fc-switch-field"),n=O("button","fc-switch");n.type="button",n.setAttribute("role","switch"),n.ariaLabel=s.field.label,n.disabled=s.readonly;const i=O("span"),o=()=>{n.setAttribute("aria-checked",String(e===!0)),t.dataset.empty=String(e===null),i.textContent=e===null?"待填":e?"是":"否"};return n.onclick=()=>{s.readonly||(e=!e,o(),rt(t))},t.append(n,i),o(),{element:t,read:()=>e,focus:()=>n.focus()}}function tr(s){return Wi({...s,readonly:!0}).element}function nr(s){const e=O("div","fc-signals"),t=Array.isArray(s.value)?s.value:[s.value];for(const n of t.filter(i=>i!=null&&i!=="")){const i=typeof n=="object"?n:{status:n},o=i.status??i.value,a=o===!0||o==="passed"||o==="success",l=O("span","fc-signal "+(a?"is-success":"is-pending"),(a?"● ":"○ ")+at(i.label||i.name||(a?"已满足":o===!1?"未满足":o||"等待信号")));e.append(l)}return e.children.length||e.append(O("span","fc-empty","等待外部信号")),e}function ir(s){const e=s.value&&typeof s.value=="object"?s.value.display??s.value.value:s.value;return Tt({...s,value:e!=null&&typeof e!="object"?e:""})}function sr(s,e){const t=O("div","fc-readonly");return t.append(e(s),O("small","fc-service-note","由系统更新 · 只读")),{element:t,read:()=>s.value}}function Ui(s){const e=s.field.radioValueType==="boolean";let t=s.value==null?"":String(s.value);const n=O("div","fc-radio-group fc-choice--radio");n.setAttribute("role","radiogroup"),n.ariaLabel=s.field.label;const i=[],o=()=>{const a=i.find(l=>l.dataset.value===t&&!l.disabled)??i.find(l=>!l.disabled);for(const l of i){const r=l.dataset.value===t;l.setAttribute("aria-checked",String(r)),l.classList.toggle("selected",r),l.tabIndex=l===a?0:-1}};for(const a of We(s.field)){const l=O("button","fc-option fc-radio-option");l.type="button",l.dataset.value=a.id,l.setAttribute("role","radio"),l.disabled=s.readonly||!!a.disabled;const r=O("span","fc-radio-dot");r.ariaHidden="true",l.append(r,O("span","fc-option-label",a.label)),l.onclick=d=>{d.stopPropagation(),!(l.disabled||t===a.id)&&(t=a.id,o(),rt(n))},l.onkeydown=d=>{var f,g;if(!["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(d.key)||s.readonly)return;d.preventDefault(),d.stopPropagation();const p=i.filter(v=>!v.disabled),h=p.indexOf(l),u=d.key==="Home"?0:d.key==="End"?p.length-1:(h+(["ArrowLeft","ArrowUp"].includes(d.key)?-1:1)+p.length)%p.length;(f=p[u])==null||f.focus(),(g=p[u])==null||g.click()},i.push(l),n.append(l)}return i.length?t&&!i.some(a=>a.dataset.value===t)&&n.append(O("span","fc-empty","已选选项不可用")):n.append(O("span","fc-empty","暂无选项")),o(),{element:n,read:()=>e?t===""?null:t==="true":t,focus:()=>{var a;return(a=i.find(l=>l.tabIndex===0))==null?void 0:a.focus()},validate:()=>s.field.required&&!t?"请选择一个选项":void 0}}const ji=s=>!Array.isArray(s)||!s.length?[]:Array.isArray(s[0])?s.map(e=>e.map(String)):[s.map(String)];function Nt(s,e){const t=[];for(const n of e){const i=s.find(o=>o.id===n);t.push((i==null?void 0:i.label)||n),s=(i==null?void 0:i.children)||[]}return t.join(" / ")}function or(s){const e=O("div","fc-tags");for(const t of ji(s.value)){const n=O("span","fc-tag");n.append(O("span","fc-tag-label",Nt(We(s.field),t))),e.append(n)}return e.children.length||e.append(O("span","fc-empty","待填")),e}function ar(s,e){const t=O("div","fc-cascade"),n=O("div","fc-choice-selection"),i=O("input","fc-choice-search");i.placeholder="",i.autocomplete="off",i.ariaLabel="输入以搜索"+e.field.label,i.disabled=e.readonly;const o=()=>{i.size=Math.max(1,[...i.value].length+1)};o();const a=O("div","fc-cascade-columns"),l=O("div","fc-error");l.setAttribute("role","status");const r=We(e.field);let d=ji(e.value),c=[];const p=[],h=(b,N,I=!1)=>b.forEach(E=>{var G;(G=E.children)!=null&&G.length?h(E.children,[...N,E.id],I||!!E.disabled):p.push({path:[...N,E.id],disabled:I||!!E.disabled})});h(r,[]);const u=(b,N)=>JSON.stringify(b)===JSON.stringify(N),f=e.layout!=="compact"&&!e.readonly;let g;const v=()=>{const b=g;g=void 0,b==null||b.close()},m=()=>{!f||g||e.readonly||(g=vt({anchor:i.parentElement||t,content:a,width:"anchor",gap:4,onDismiss:()=>{g=void 0}}))},w=()=>{!f||!g||(v(),t.dispatchEvent(new Event("fc-collapse",{bubbles:!0})))},k=b=>{if(e.readonly)return;const N=d.findIndex(I=>u(I,b));if(s&&N>=0)d.splice(N,1);else{if(s&&e.field.maxSelections&&d.length>=e.field.maxSelections){l.textContent="最多可选择 "+e.field.maxSelections+" 项";return}d=s?[...d,b]:[b]}l.textContent="",C(),t.dispatchEvent(new Event("change",{bubbles:!0})),s||w()},C=()=>{var E,G;if(n.replaceChildren(),a.replaceChildren(),d.forEach(x=>{const T=O("span","fc-tag");T.append(O("span","fc-tag-label",Nt(r,x)));const A=O("span","fc-tag-slot"),H=O("button","fc-choice-remove","×");H.type="button",H.disabled=e.readonly,H.ariaLabel="移除"+Nt(r,x),H.onclick=()=>{d=d.filter(q=>!u(x,q)),C(),t.dispatchEvent(new Event("change",{bubbles:!0}))},A.append(H),T.append(A),n.append(T)}),i.value.trim()){const x=p.filter(T=>!T.disabled&&Nt(r,T.path).toLocaleLowerCase().includes(i.value.trim().toLocaleLowerCase()));for(const{path:T}of x){const A=O("button","fc-option",Nt(r,T));A.type="button",A.disabled=e.readonly,A.setAttribute("aria-pressed",String(d.some(H=>u(H,T)))),A.onclick=()=>k(T),a.append(A)}a.classList.add("is-search"),x.length||a.append(O("p","fc-empty","暂无匹配路径"));return}a.classList.remove("is-search");let b=r,N=[],I=0;for(;b.length;){const x=O("div","fc-cascade-column");x.setAttribute("role","group"),x.ariaLabel="第"+(I+1)+"级";for(const A of b.filter(H=>!H.disabled)){const H=[...N,A.id],q=!!((E=A.children)!=null&&E.length),R=O("button","fc-option",A.label+(q?" ›":""));R.type="button",R.disabled=e.readonly,R.classList.toggle("selected",q?c[I]===A.id:d.some(P=>u(P,H))),R.setAttribute(q?"aria-expanded":"aria-pressed",String(q?c[I]===A.id:d.some(P=>u(P,H)))),R.onclick=()=>{var P,L;q?(c=H,C(),(L=(P=a.lastElementChild)==null?void 0:P.querySelector("button"))==null||L.focus()):k(H)},x.append(R)}a.append(x);const T=b.find(A=>A.id===c[I]&&!A.disabled);if(!((G=T==null?void 0:T.children)!=null&&G.length))break;N=[...N,T.id],b=T.children,I++}r.length||a.append(O("p","fc-empty","暂无可选分类"))};if(i.oninput=()=>{o(),C()},i.onfocus=m,a.onkeydown=b=>{if(!["ArrowDown","ArrowUp","Home","End"].includes(b.key))return;const N=b.target,E=[...(N.closest(".fc-cascade-column")||a).querySelectorAll("button:not(:disabled)")];if(!E.length)return;b.preventDefault();const G=E.indexOf(N);E[b.key==="Home"?0:b.key==="End"?E.length-1:(G+(b.key==="ArrowDown"?1:-1)+E.length)%E.length].focus()},t.append(n,i,l),f){const b=O("span","fc-field-chevron");b.setAttribute("aria-hidden","true"),t.append(b),t.addEventListener("click",()=>m())}else t.append(a);return C(),{element:t,content:f?a:void 0,read:()=>s?d.map(b=>[...b]):[...d[0]||[]],focus:()=>{i.focus(),m()},deactivate:()=>{i.value="",o(),v()},destroy:()=>v(),validate:()=>e.field.required&&!d.length?"请选择分类":void 0}}function Ki(s){var f,g,v;let e=Array.isArray(s.value)?structuredClone(s.value):[];const t=O("div","fc-attachments"),n=O("div","fc-file-list"),i=O("label","fc-upload-zone","+ 上传附件"),o=O("input");o.type="file",o.multiple=!0,o.ariaLabel="上传"+s.field.label,o.accept=((f=s.field.attachmentOptions)==null?void 0:f.accept)||"",o.disabled=s.readonly||!((g=s.services)!=null&&g.upload);const a=O("p","fc-error");a.setAttribute("role","status");const l=O("button","fc-retry","重试上传");l.type="button",l.hidden=!0;let r=[],d=!1,c=!1,p;const h=()=>{n.replaceChildren(),e.forEach((m,w)=>{const k=O("div","fc-file-row"),C=xn(m.url),b=C?O("a","fc-link",m.name):O("span","",m.name);if(b.tagName==="A"){const N=b;N.href=C,N.target="_blank",N.rel="noopener noreferrer"}if(k.append(O("span","fc-file-icon","▤"),b),m.size!=null&&k.append(O("small","fc-file-size",Math.ceil(m.size/1024)+" KB")),!s.readonly){const N=O("button","fc-file-remove","×");N.type="button",N.disabled=d,N.ariaLabel="移除"+m.name,N.onclick=()=>{e.splice(w,1),h(),rt(t)},k.append(N)}n.append(k)}),e.length||n.append(O("span","fc-empty","暂无附件"))},u=async()=>{var k;if(!((k=s.services)!=null&&k.upload)||s.readonly||d||!r.length)return;const m=s.field.attachmentOptions;if(m!=null&&m.maxFiles&&e.length+r.length>m.maxFiles){a.textContent="最多上传 "+m.maxFiles+" 个文件";return}if(m!=null&&m.maxBytes&&r.some(C=>C.size>m.maxBytes)){a.textContent="文件大小超过限制";return}const w=((m==null?void 0:m.accept)||"").split(",").map(C=>C.trim().toLowerCase()).filter(Boolean);if(w.length&&r.some(C=>!w.some(b=>b.startsWith(".")?C.name.toLowerCase().endsWith(b):b.endsWith("/*")?C.type.toLowerCase().startsWith(b.slice(0,-1)):C.type.toLowerCase()===b))){a.textContent="文件类型不符合要求";return}p=new AbortController,d=!0,o.disabled=!0,l.hidden=!0,a.textContent="上传中…",t.setAttribute("aria-busy","true"),h();try{const C=await s.services.upload(s.field,r,p.signal);if(c)return;if(C.length!==r.length||C.some(b=>!b.id||!b.name))throw new Error("Invalid file references");e=[...e,...C],r=[],a.textContent="",o.value=""}catch{c||(a.textContent="上传失败,已保留原有附件",l.hidden=!1)}finally{c||(d=!1,o.disabled=!1,t.setAttribute("aria-busy","false"),h(),r.length||rt(t))}};return o.onchange=m=>{m.stopPropagation(),r=Array.from(o.files||[]),u()},l.onclick=()=>void u(),i.append(o),t.append(n),s.readonly||(t.append(i),(v=s.services)!=null&&v.upload||t.append(O("p","fc-service-note","上传服务未接入"))),t.append(a,l),h(),{element:t,read:()=>structuredClone(e),focus:()=>o.focus(),validate:()=>d?"请等待上传完成":r.length?"请完成或重新选择上传文件":s.field.required&&!e.length?"请上传附件":void 0,destroy:()=>{c=!0,p==null||p.abort()}}}function kn(s){if(s&&typeof s=="object"&&!Array.isArray(s)){const e=s;return{selected:Array.isArray(e.selected)?[...e.selected]:[],counts:{...e.counts},total:e.total}}return{selected:[],counts:{}}}function Yi(s,e){var A,H;let t=kn(s.value),n=[...t.selected];const i=e==="attitude"?[{id:"like",label:"赞同"}]:We(s.field),o=O("div","fc-vote"),a=O("button","fc-vote-trigger");a.type="button",a.setAttribute("aria-haspopup","dialog"),a.setAttribute("aria-expanded","false");const l=O("span","fc-vote-icon","+");l.ariaHidden="true";const r=O("span");a.append(l,r);const d=O("section","fc-vote-panel");d.setAttribute("role","dialog"),d.ariaLabel=s.field.label;const c=O("div","fc-vote-header"),p=O("span","fc-vote-total");c.append(O("strong","",e==="attitude"?"表态投票":e==="multi"?"投票-多选":"投票-单选"),p);const h=O("div","fc-vote-list");h.setAttribute("role",e==="multi"?"group":"radiogroup"),h.ariaLabel=s.field.label;const u=O("p","fc-error");u.setAttribute("role","status");const f=O("button","fc-vote-submit","确认投票");f.type="button";const g=O("button","fc-vote-withdraw","撤回投票");g.type="button";const v=O("button","fc-vote-withdraw","重新加载");v.type="button",v.hidden=!0;const m=O("div","fc-vote-actions");m.append(f,g);let w=!1,k=!1,C=!1,b=!((A=s.services)!=null&&A.loadVote),N,I;const E=()=>{var q,R,P;r.textContent=t.selected.length?"已投票":"投票",a.classList.toggle("is-voted",!!t.selected.length),a.ariaLabel=`${s.field.label},${r.textContent}`,p.textContent=k?"加载中…":b?`${t.total??Object.values(t.counts).reduce((L,M)=>L+M,0)}人已投`:"待加载",d.setAttribute("aria-busy",String(w||k)),h.replaceChildren();for(const L of i){const M=O("button","fc-vote-option");M.type="button",M.dataset.value=L.id,M.disabled=s.readonly||w||k||!b||!((q=s.services)!=null&&q.vote)||!!L.disabled;const $=n.includes(L.id);M.classList.toggle("selected",$),M.setAttribute("role",e==="multi"?"checkbox":"radio"),M.setAttribute("aria-checked",String($));const z=O("span",e==="multi"?"fc-vote-check":"fc-radio-dot");z.ariaHidden="true",M.append(z,O("span","fc-vote-label",L.label)),b&&Object.keys(t.counts).length&&M.append(O("span","fc-vote-count",`${t.counts[L.id]??0} 票`)),M.onclick=()=>{var j;M.disabled||(n=e==="multi"?$?n.filter(te=>te!==L.id):[...n,L.id]:[L.id],E(),(j=h.querySelector(`[data-index="${i.indexOf(L)}"]`))==null||j.focus())},M.dataset.index=String(i.indexOf(L)),h.append(M)}i.length||h.append(O("p","fc-empty","暂无投票选项")),f.disabled=w||k||!b||!((R=s.services)!=null&&R.vote)||!n.length,f.textContent=w?"提交中…":t.selected.length?"确认改票":"确认投票",g.hidden=!t.selected.length,g.disabled=w||k||!b,m.hidden=s.readonly||!((P=s.services)!=null&&P.vote),I==null||I.reposition()};h.onkeydown=q=>{if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(q.key))return;const R=[...h.querySelectorAll("button:not(:disabled)")];if(!R.length)return;q.preventDefault(),q.stopPropagation();const P=R.indexOf(document.activeElement),L=q.key==="Home"?0:q.key==="End"?R.length-1:(P+(["ArrowUp","ArrowLeft"].includes(q.key)?-1:1)+R.length)%R.length;R[L].focus(),e!=="multi"&&R[L].click()};const G=()=>{I==null||I.close(),I=void 0},x=async()=>{var q;if(!(!((q=s.services)!=null&&q.loadVote)||k||w)){k=!0,u.textContent="",v.hidden=!0,N=new AbortController,E();try{const R=await s.services.loadVote(s.field,N.signal);if(C||N.signal.aborted)return;t=kn(R),n=[...t.selected],b=!0}catch{C||(b=!1,u.textContent="加载失败,请重试",v.hidden=!1)}finally{C||(k=!1,E())}}},T=async q=>{var R;if(!(w||k||!b||s.readonly||!((R=s.services)!=null&&R.vote))){w=!0,u.textContent="",N=new AbortController,E();try{const P=await s.services.vote(s.field,[...q],N.signal);if(C||N.signal.aborted)return;t=kn(P),n=[...t.selected],w=!1,rt(o),G(),a.focus()}catch{C||(u.textContent="投票失败,请重试")}finally{C||(w=!1,E())}}};return a.onclick=q=>{if(q.stopPropagation(),I){G();return}n=[...t.selected],u.textContent="",E(),I=vt({anchor:a,anchorMode:"element",content:d,width:360,onDismiss:()=>{I=void 0,a.setAttribute("aria-expanded","false"),w||(n=[...t.selected])},onEscape:()=>a.focus()}),a.setAttribute("aria-expanded","true"),d.tabIndex=-1,d.focus(),x()},f.onclick=()=>{n.length&&T(n)},g.onclick=()=>void T([]),v.onclick=()=>void x(),d.append(c,h,u,v,m),!s.readonly&&!((H=s.services)!=null&&H.vote)&&d.append(O("p","fc-service-note","创建工作项后可投票")),o.append(a),E(),{element:o,content:d,read:()=>structuredClone(t),focus:()=>a.focus(),validate:()=>w?"请等待投票完成":void 0,deactivate:G,destroy:()=>{C=!0,N==null||N.abort(),G()}}}function rr(s){const e=s.value&&typeof s.value=="object"?s.value:{},t=O("div","fc-location"),i=[["address","地址","text"],["longitude","经度","number"],["latitude","纬度","number"]].map(([a,l,r])=>{const d=O("label","fc-location-part",l),c=O("input","fc-input");return c.type=r,c.value=at(e[a]),c.disabled=s.readonly,c.ariaLabel=l,c.placeholder=l,r==="number"&&(c.step="any",c.min=a==="longitude"?"-180":"-90",c.max=a==="longitude"?"180":"90"),d.append(c),t.append(d),c}),o=()=>i.every(a=>!a.value)?null:{address:i[0].value,longitude:i[1].value?Number(i[1].value):null,latitude:i[2].value?Number(i[2].value):null};return{element:t,read:o,focus:()=>i[0].focus(),validate:()=>{if(!o())return s.field.required?"请填写位置":void 0;if(i.slice(1).some(a=>a.value===""||!a.checkValidity()))return"请填写有效的经纬度"}}}function lr(s){const e=s.value;return Tt({...s,value:e&&typeof e=="object"?at(e.address)||[e.longitude,e.latitude].filter(t=>t!=null).join(", "):""})}function dr(s,e){const t=O("div","fc-composite"),n=O("div","fc-composite-rows"),i=O("button","fc-composite-add","+ 添加一组");i.type="button";const o=s.field.compositeFields||[],a=[];let l=!1;const r=u=>({...u.value,...Object.fromEntries(u.editors.map(({field:f,editor:g})=>[f.key,g.read()]))}),d=u=>{u.editors.forEach(({editor:f})=>{var g;return(g=f.destroy)==null?void 0:g.call(f)}),u.remove&&(u.remove.onclick=null),u.element.remove()},c=O("p","fc-empty","暂无记录"),p=()=>{a.forEach((u,f)=>{u.legend.textContent="第 "+(f+1)+" 组"}),i.disabled=s.readonly||!o.length||a.length>=(s.field.maxRows||100),a.length?c.remove():n.append(c)},h=u=>{const f=O("fieldset","fc-composite-row"),g=O("legend");f.append(g);const v=o.map(w=>{const k=e(w),C=k.createEditor({...s,field:w,value:u[w.key],readonly:s.readonly||w.editable===!1||!!k.readonly,focusBoundary:void 0,onSelectedOptions:N=>{var I;(I=s.services)!=null&&I.searchOptions&&(w.choices=[...new Map([...We(w),...N].map(E=>[E.id,E])).values()])}}),b=O("div","fc-composite-field");return b.append(O("label","",w.label+(w.required?" *":"")),C.element),f.append(b),{field:w,editor:C}}),m={value:u,element:f,legend:g,editors:v};if(!s.readonly){const w=O("button","fc-composite-remove","删除此组");w.type="button",w.onclick=()=>{if(l)return;const k=a.indexOf(m);k<0||(d(m),a.splice(k,1),p(),rt(t))},m.remove=w,f.append(w)}a.push(m),n.append(f),p()};for(const u of Array.isArray(s.value)?s.value:[])h(structuredClone(u));return i.onclick=()=>{l||i.disabled||(h({}),rt(t))},t.append(n),s.readonly||t.append(i),o.length||t.append(O("p","fc-service-note","请配置复合子字段")),p(),{element:t,read:()=>a.map(r),validate:()=>{var u;if(s.field.required&&!a.length)return"请至少添加一组";for(const[f,g]of a.entries())for(const{field:v,editor:m}of g.editors){const w=(u=m.validate)==null?void 0:u.call(m);if(w)return"第 "+(f+1)+" 组 · "+v.label+":"+w}},destroy:()=>{l||(l=!0,i.onclick=null,a.forEach(d))}}}class Ze extends Be{renderDisplay(e){return{element:Ja(e)}}renderEditing(e){return _i("text",e)}}class Xi extends Ze{renderDisplay(e){return super.renderDisplay({...e,field:{...e.field,kind:"number"}})}renderEditing(e){return _i("number",e)}}class Zi extends Ze{renderDisplay(e){return super.renderDisplay({...e,field:{...e.field,control:"richText"}})}renderEditing(e){return Ni(e)}}class Qi extends Ze{renderDisplay(e){return{element:Tt(e)}}renderEditing(e){return jt(e,"textarea")}}class Mn extends Ze{renderDisplay(e){return{element:er(e)}}renderEditing(e){return jt(e,"url")}}class Ji extends Ze{renderEditing(e){return jt(e,"email")}}class es extends Ze{renderEditing(e){return jt(e,"tel")}}class yt extends Be{constructor(){super(...arguments);y(this,"multiple",!1);y(this,"variant","choice")}renderDisplay(t){return{element:Li(t,this.variant==="radio"?"choice":this.variant)}}renderEditing(t){return hn(this.multiple,t,this.variant)}}class ts extends yt{constructor(){super(...arguments);y(this,"multiple",!0)}}class ns extends yt{constructor(){super(...arguments);y(this,"variant","radio")}renderDisplay(t){return t.layout==="compact"?{element:Li(t)}:Ui({...t,readonly:!0})}renderEditing(t){if(t.layout!=="compact")return Ui(t);const n=hn(!1,t,"choice");return t.field.radioValueType!=="boolean"?n:{...n,read:()=>{const i=n.read();return i===""?null:i==="true"}}}}class Rn extends yt{constructor(){super(...arguments);y(this,"variant","person")}}class is extends Rn{constructor(){super(...arguments);y(this,"multiple",!0)}}class Ln extends yt{constructor(){super(...arguments);y(this,"variant","relation")}}class ss extends Ln{constructor(){super(...arguments);y(this,"multiple",!0)}}class Tn extends Be{constructor(){super(...arguments);y(this,"multiple",!1)}renderDisplay(t){return{element:or(t)}}renderEditing(t){return ar(this.multiple,t)}}class os extends Tn{constructor(){super(...arguments);y(this,"multiple",!0)}}class Nn extends Be{normalize(e){return e}renderDisplay(e){return{element:Di(this.normalize(e))}}renderEditing(e){return Pi(this.normalize(e))}}class In extends Nn{constructor(){super(...arguments);y(this,"range",!1)}normalize(t){return{...t,field:{...t.field,dateOptions:{showTime:!1,showRange:this.range,...t.field.dateOptions}}}}}class as extends In{constructor(){super(...arguments);y(this,"range",!0)}}class rs extends Be{renderDisplay(e){return{element:tr(e)}}renderEditing(e){return Wi(e)}}class ls extends Be{renderDisplay(e){return Ki({...e,readonly:!0})}renderEditing(e){return Ki(e)}}class ds extends Be{renderDisplay(e){return{element:lr(e)}}renderEditing(e){return rr(e)}}class Kt extends Be{constructor(){super(...arguments);y(this,"mode","attitude")}renderDisplay(t){return Yi({...t,readonly:!0},this.mode)}renderEditing(t){return Yi(t,this.mode)}}class cs extends Kt{constructor(){super(...arguments);y(this,"mode","single")}}class us extends Kt{constructor(){super(...arguments);y(this,"mode","multi")}}class bt extends Be{isReadonly(){return!0}constructor(e){super({...e,readonly:!0})}renderDisplay(e){return{element:ir(e)}}renderEditing(e){return sr(e,t=>this.renderDisplay(t).element)}}class An extends bt{renderDisplay(e){return{element:nr(e)}}}class hs extends Ze{renderDisplay(e){const t=document.createElement("button");return t.type="button",t.className="fc-detail-link",t.textContent=e.field.label,t.onclick=n=>{var i;n.stopPropagation(),(i=e.onAction)==null||i.call(e,{type:"open",value:e.value})},{element:t,destroy:()=>{t.onclick=null}}}}class ps extends Be{constructor(e,t){super(e),this.resolve=t}renderDisplay(e){var i;if(e.layout==="compact")return{element:Tt({...e,value:Array.isArray(e.value)&&e.value.length?e.value.length+" 组记录":""})};const t=document.createElement("div");t.className="fc-composite";const n=[];for(const o of Array.isArray(e.value)?e.value:[]){const a=document.createElement("fieldset");a.className="fc-composite-row";for(const l of e.field.compositeFields??[]){const r=document.createElement("label");r.textContent=l.label;const d={...e,field:l,value:o[l.key],readonly:!0},c=this.resolve(l),p=((i=c.renderView)==null?void 0:i.call(c,d))??{element:c.render(d)};n.push(p),a.append(r,p.element)}t.append(a)}return{element:t,destroy:()=>n.forEach(o=>{var a;return(a=o.destroy)==null?void 0:a.call(o)})}}renderEditing(e){return dr(e,this.resolve)}}const cr={textarea:"保留换行的纯文本,支持长度限制",radio:"平铺选项,一次选择一项",cascadeSingle:"逐级浏览分类,选择完整路径",cascadeMulti:"逐级浏览并选择多条路径",person:"按姓名搜索,以稳定人员 ID 保存",multiPerson:"按姓名搜索,以稳定人员 ID 保存",date:"日历选择和直接输入,支持清空",dateRange:"连续选择起止日期,校验完整范围",url:"填写网址并在新窗口安全打开",cloudDocument:"添加云文档链接,点击打开原文档",email:"邮箱输入与格式校验",phone:"支持国家区号的电话输入",switch:"以是或否记录布尔状态",attachment:"文件列表、上传与删除,支持上传失败重试",location:"填写地址和经纬度,校验坐标边界",relation:"按名称或编号搜索工作项,点击名称打开详情",multiRelation:"按名称或编号搜索工作项,点击名称打开详情",attitudeVote:"选择并提交投票,结果以宿主服务回读为准",singleVote:"选择并提交投票,结果以宿主服务回读为准",multiVote:"选择并提交投票,结果以宿主服务回读为准",externalSignal:"由外部系统更新,系统内只读",externalMultiSignal:"由外部系统更新,系统内只读",formula:"展示服务端计算结果,不可手工覆盖",aggregate:"展示服务端计算结果,不可手工覆盖",ai:"展示服务端计算结果,不可手工覆盖",system:"展示服务端计算结果,不可手工覆盖",composite:"可重复字段组,复用已注册子控件并逐组校验",multiPersonComposite:"可重复字段组,复用已注册子控件并逐组校验",text:"单行输入,支持清空和必填校验",richText:"紧凑编辑与全屏排版,支持标题、颜色、列表、表格和链接",select:"从字段配置中选择一个选项",multiSelect:"点击标签选择多项,保存为数组",number:"支持小数和负数,空值与零分别保存",dateTime:"日历、时间与日期范围",detail:"由调用方处理关联内容导航"},ur={title:"text",longText:"richText",status:"select",richtext:"richText",single_select:"select",multi_select:"multiSelect",user:"person",multi_user:"multiPerson",multi_person:"multiPerson",cascade_select:"cascadeSingle",cascade_single:"cascadeSingle",cascade_multi:"cascadeMulti",daterange:"dateRange",date_range:"dateRange",datetime:"dateTime",multi_relation:"multiRelation",attitude_vote:"attitudeVote",single_vote:"singleVote",multi_vote:"multiVote",vote:"attitudeVote",external_signal:"externalSignal",external_multi_signal:"externalMultiSignal",multi_person_composite:"multiPersonComposite",cloud_document:"cloudDocument"},hr=[["text","单行文本",Ze,"文本","T"],["richText","富文本",Zi,"文本","¶"],["select","单选",yt,"选择","◉"],["multiSelect","多选",ts,"选择","☑"],["number","数字",Xi,"其他","#"],["dateTime","日期时间",Nn,"日期","◷"],["detail","详情页查看",hs,"关联工作项","↗"],["textarea","多行文本",Qi,"文本","≡"],["radio","单选按钮",ns,"选择","◉"],["cascadeSingle","级联单选",Tn,"选择","⑂"],["cascadeMulti","级联多选",os,"选择","⑂"],["person","单选人员",Rn,"人员","♙"],["multiPerson","多选人员",is,"人员","♙"],["date","日期",In,"日期","▦"],["dateRange","日期区间",as,"日期","▦"],["url","URL 链接",Mn,"其他","↗"],["cloudDocument","关联云文档",Mn,"其他","▤"],["email","邮箱",Ji,"其他","@"],["phone","电话",es,"其他","☎"],["switch","开关",rs,"其他","◐"],["attachment","附件",ls,"其他","⌑"],["location","地理位置",ds,"其他","⌖"],["relation","单选关联工作项",Ln,"关联工作项","↗"],["multiRelation","多选关联工作项",ss,"关联工作项","↗"],["attitudeVote","表态投票",Kt,"投票","♡"],["singleVote","单选投票",cs,"投票","♡"],["multiVote","多选投票",us,"投票","♡"],["externalSignal","系统外信号",An,"系统","◌",!0],["externalMultiSignal","多值系统外信号",An,"系统","◌",!0],["formula","公式计算",bt,"系统","ƒ",!0],["aggregate","聚合计算",bt,"系统","ƒ",!0],["ai","AI 字段",bt,"系统","ƒ",!0],["system","系统字段",bt,"系统","ƒ",!0]];function fs(s=[]){const e=new Map,t=a=>{if(!/^[A-Za-z][\w-]*$/.test(a.id))throw new Error("Invalid control id");if(e.has(a.id))throw new Error(`Control already registered: ${a.id}`);e.set(a.id,a)},n=a=>{const l=a.control||ur[a.kind||"text"]||a.kind||"text",r=e.get(l);if(!r)throw new Error(`Unknown control: ${l}`);return r},i=a=>n(a.field).create(a),o=a=>{const l=n(a);return{...l,render:r=>l.create(r).render().element,renderView:r=>l.create(r).render(),createEditor:r=>l.create(r).createEditor()}};for(const[a,l,r,d,c,p]of hr)t({id:a,label:l,description:cr[a]||l,glyph:c,group:d,readonly:p,action:a==="detail"?"view":a==="select"||a==="multiSelect"?"select":void 0,create:h=>new r({...h,readonly:p||h.readonly})});for(const[a,l]of[["composite","复合字段"],["multiPersonComposite","多人复合字段"]])t({id:a,label:l,description:"组合多个已注册字段",glyph:"▦",group:"其他",create:r=>new ps(r,o)});return s.forEach(t),{register:t,resolve:n,create:i,list:()=>[...e.values()]}}class $n extends Be{constructor(e,t){super(e),this.control=t}renderDisplay(e){return{element:this.control.render(e)}}renderEditing(e){return this.control.createEditor(e)}}const it={page(s){return s.page||(s.surface==="cell"?"table":"basic")},render(s,e){const t=O("div","fc-base-control"),n=it.page(s);return t.dataset.page=n,t.dataset.mode=s.mode||"default",t.dataset.editable=String(s.canEdit??!s.readonly),t.dataset.readonly=String(s.readonly),t.setAttribute("data-field-control",s.field.control||s.field.kind||"text"),t.append(e),t}},pr=new Set(["radio","select","multiSelect","person","multiPerson","relation","multiRelation","cascadeSingle","cascadeMulti","date","dateRange","dateTime","detail","composite","multiPersonComposite"]);function It(s){return s.id==="richText"?"rich":pr.has(s.id)?"select":"text"}function gs(s,e,t){if(["radio","switch","attitudeVote","singleVote","multiVote"].includes(s.id)||it.page(e)==="table"||e.readonly||s.readonly||e.canEdit===!1)return t;const n=document.createElement("div");n.className="fc-base-control fc-focus-editor",n.dataset.expanded="true",n.tabIndex=-1;const i=it.page(e);n.dataset.page=i,n.dataset.mode=i==="table"?"editing":"expanded",n.dataset.controlKey=s.id,n.dataset.box=It(s);const o=document.createElement("div");o.className="fc-focus-body",o.dataset.box=It(s),o.append(t.element);const a=document.createElement("div");a.className="fc-focus-trigger",a.tabIndex=0,a.setAttribute("role","button"),a.ariaLabel="编辑"+e.field.label,a.setAttribute("aria-expanded","true"),a.hidden=!0;const l=document.createElement("span");l.className="fc-error fc-focus-error",l.setAttribute("role","status"),n.append(o,a,l);const r=n.ownerDocument,d=e.focusBoundary||n,c=m=>!!m&&(d.contains(m)||Xe(m,n));let p=!1;const h=()=>{p||(o.hidden=!1,a.hidden=!0,n.dataset.expanded="true",n.dataset.mode="editing",a.setAttribute("aria-expanded","true"),l.textContent="",t.focus&&t.focus(),!o.contains(r.activeElement)&&!Xe(r.activeElement,n)&&(Array.from(o.querySelectorAll('input:not([type=hidden]):not(:disabled),textarea:not(:disabled),[contenteditable=true],button:not(:disabled),[tabindex="0"]')).find(w=>!w.closest("[hidden]"))||n).focus())},u=()=>{var C,b,N;if(p||!n.isConnected||n.dataset.expanded==="false")return;const m=(C=t.validate)==null?void 0:C.call(t),w={...e,readonly:!0,canEdit:!1,mode:"default",value:m?e.value:t.read()},k=it.render(w,s.render(w));k.inert=!0,a.replaceChildren(k),l.textContent=m?"尚未保存:"+m:"",(b=t.deactivate)==null||b.call(t),n.dataset.expanded="false",n.dataset.mode="default",o.hidden=!0,a.hidden=!1,a.setAttribute("aria-expanded","false"),(N=e.onDeactivate)==null||N.call(e)},f=m=>{if(m.relatedTarget instanceof Node&&c(m.relatedTarget))return;const w=m.target;queueMicrotask(()=>{p||!n.isConnected||c(r.activeElement)||(w&&!w.isConnected&&r.activeElement===r.body?n.focus():u())})},g=()=>{queueMicrotask(()=>{!p&&n.isConnected&&n.dataset.expanded==="true"&&(!r.activeElement||r.activeElement===r.body)&&n.focus()})};a.onclick=m=>{m.stopPropagation(),h()},a.onkeydown=m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),m.stopPropagation(),h())},d.addEventListener("focusout",f),n.addEventListener("click",g,!0),n.addEventListener("fc-collapse",u);const v=Gi(r,{contains:(m,w)=>w.composedPath().includes(d)||c(m),leave:u});return{...t,element:n,focus:h,destroy:()=>{var m;p||(p=!0,v(),d.removeEventListener("focusout",f),n.removeEventListener("click",g,!0),n.removeEventListener("fc-collapse",u),(m=t.destroy)==null||m.call(t))}}}function Fn(s){return{...s,context:s,layout:it.page(s)==="table"?"compact":"form",className:s.surface,services:s.services?{searchOptions:s.services.searchOptions,upload:s.services.upload,vote:s.services.vote?(e,t,n)=>s.services.vote(e,s.item,t,n):void 0,loadVote:s.services.loadVote?(e,t)=>s.services.loadVote(e,s.item,t):void 0}:void 0,onAction:e=>{e.type==="open"&&s.openDetail(String(e.value||s.item.id))}}}function ms(s=[]){const e=fs(),t=new Map;for(const i of e.list()){const o={...i,render(a){const l=e.create(Fn(a));return it.render(a,l.render().element)},createEditor(a){const l=e.create(Fn(a));return gs(o,a,l.createEditor())}};t.set(i.id,o)}const n=i=>{e.register({...i,create:a=>new $n(a,{render:l=>i.render({...l.context,field:l.field,value:l.value,readonly:l.readonly}),createEditor:l=>i.createEditor({...l.context,field:l.field,value:l.value,readonly:l.readonly})})});const o={...i,render:a=>it.render(a,i.render(a)),createEditor(a){const l=new $n(Fn(a),{render:r=>i.render({...a,value:r.value}),createEditor:r=>i.createEditor({...a,value:r.value})});return gs(i,a,l.createEditor())}};t.set(i.id,o)};return s.forEach(n),{register:n,list:()=>[...t.values()],resolve:i=>t.get(e.resolve(i).id)}}function fr(s,e){const t=e[s.field],n=s.value,i=Array.isArray(t)?t.map(String):t==null||t===""?[]:[String(t)];switch(s.op){case"equals":return Array.isArray(t)?i.includes(String(n)):String(t??"")===String(n??"");case"notEqual":return Array.isArray(t)?!i.includes(String(n)):String(t??"")!==String(n??"");case"contains":return i.some(o=>o.includes(String(n??"")));case"notContains":return!i.some(o=>o.includes(String(n??"")));case"in":return(Array.isArray(n)?n.map(String):[String(n??"")]).some(o=>i.includes(o));case"notIn":return!(Array.isArray(n)?n.map(String):[String(n??"")]).some(o=>i.includes(o));case"blank":return i.length===0;case"notBlank":return i.length>0;default:return!0}}function Ve(s,e,t={}){return s?"all"in s?s.all.every(n=>Ve(n,e,t)):"any"in s?s.any.some(n=>Ve(n,e,t)):"not"in s?!Ve(s.not,e,t):fr(s,e):!0}function lt(s,e={}){var t,n,i,o,a,l;return!s||s.all||(t=s.members)!=null&&t.length&&s.members.includes(e.currentUser||"")||(n=s.teams)!=null&&n.length&&(e.teams||[]).some(r=>s.teams.includes(r))||(i=s.roles)!=null&&i.length&&(e.roles||[]).some(r=>s.roles.includes(r))?!0:!((o=s.members)!=null&&o.length||(a=s.teams)!=null&&a.length||(l=s.roles)!=null&&l.length)}const gr={empty:"待填",required:"此项必填",simpleMode:"简洁模式",continuous:"连续创建",cancel:"取消",draft:"存草稿",submit:"确认创建",addRole:"添加角色",addMeeting:"添加一组进入选题会"};function vs(s){return s.items!==void 0}function mr(s,e={}){var ae;const t=s.variant,n=s.presentation||(t==="create"?"modal":"drawer"),i={...gr,...s.labels},o=e.controls||ms(),a=s.events||{},l={...s.data||{}};let r={...s.context||{}},d=s.fields.map(S=>({...S})),c=(s.tabs||[]).map(S=>({...S})),p=s.items?[...s.items]:d.map(S=>({field:S.key})),h=s.blocks?[...s.blocks]:[],u=s.actions?[...s.actions]:C();const f=t==="create"?"new":"detail";let g=s.fieldState||"display",v=s.simpleMode??!1;const m=s.simpleKeep&&s.simpleKeep.length?new Set(s.simpleKeep):new Set(d.slice(0,1).map(S=>S.key));let w=s.open??!0,k=!1;function C(){return t==="create"?[{id:"continuous",kind:"checkbox",label:i.continuous},{id:"close-overlay",label:i.cancel,variant:"outline"},{id:"save-draft",label:i.draft,variant:"outline"},{id:"submit",kind:"submit",label:i.submit,variant:"primary"}]:[]}const b=S=>d.find(V=>V.key===S);function N(S,V,oe){var B,_,Y;const ce=Ve(S.visibleWhen,l,r)&<((B=S.permission)==null?void 0:B.view,r)&&(!V||Ve(V.visibleWhen,l,r))&&(!oe||Ve(oe.visibleWhen,l,r)&<(oe.visibleScope,r))&&(t!=="create"||S.createVisible!==!1),xe=!!S.required||(S.requiredWhen?Ve(S.requiredWhen,l,r):!1)||(V!=null&&V.requiredWhen?Ve(V.requiredWhen,l,r):!1)||((_=S.permission)!=null&&_.required?lt(S.permission.required,r):!1),F=S.editable!==!1&<((Y=S.permission)==null?void 0:Y.edit,r);return{visible:ce,required:!!xe,editable:F}}function I(S){if(l[S.key]===void 0&&(S.defaultMode==="always"&&S.defaultValue!==void 0&&(l[S.key]=S.defaultValue),S.defaultMode==="conditional")){for(const V of S.defaultWhen||[])if(Ve(V.when,l,r)){l[S.key]=V.value;return}}}const E=document.createElement(t==="create"?"form":"article");t==="create"&&(E.noValidate=!0);const G=Fe(E,"form-surface",s);E.className=t==="create"?"rowvia-work-items rowvia-field-scope create-dialog form-surface":`rowvia-work-items rowvia-field-scope drawer form-surface${n==="fullscreen"?" is-fullscreen":""}`,E.dataset.variant=t,E.dataset.presentation=n,E.dataset.fieldState=g;let x=[];function T(){var xe,F,B,_,Y,X;for(const ee of x)ee.destroy();x=[],E.innerHTML="";const S=document.createElement("div");if(S.className="drawer-header",(xe=s.slots)!=null&&xe.leading){const ee=document.createElement("div");ee.className="drawer-leading",A(ee,s.slots.leading),S.append(ee)}if(S.insertAdjacentHTML("beforeend",`<span class="page-logo">${Re("check")}</span><strong>${D(s.title||"")}</strong>`),(F=s.slots)!=null&&F.header&&A(S,s.slots.header),E.append(S),(B=s.slots)!=null&&B.subHeader){const ee=document.createElement("div");ee.className="detail-sub-header",A(ee,s.slots.subHeader),E.append(ee)}if((_=s.slots)!=null&&_.navigation){const ee=document.createElement("div");ee.className="detail-navigation",A(ee,s.slots.navigation),E.append(ee)}const V=R();if(t==="detail"&&V.length){const ee=document.createElement("div");ee.className="detail-tabs",ee.setAttribute("role","tablist");for(const le of V){const ie=document.createElement("button");ie.type="button",ie.className=`detail-tab${le.id===P?" active":""}`,ie.dataset.tabId=le.id,ie.dataset.detailTab=le.label,ie.setAttribute("role","tab"),ie.setAttribute("aria-selected",String(le.id===P)),ie.textContent=le.label,ie.onclick=()=>se(le.id),ee.append(ie)}const re=document.createElement("div");re.className="spacer",ee.append(re),(Y=s.slots)!=null&&Y.tabSuffix&&A(ee,s.slots.tabSuffix),E.append(ee)}const oe=document.createElement("div");oe.className=t==="create"?"create-body":"drawer-body",t==="create"&&s.simpleMode!==void 0&&oe.append(H());const ce=V.find(ee=>ee.id===P);if(oe.append(L(ce)),E.append(oe),(X=s.slots)!=null&&X.footer){const ee=document.createElement("div");ee.className="form-surface-slot-footer",A(ee,s.slots.footer),E.append(ee)}u.length&&E.append(q()),t==="create"&&(E.onsubmit=ee=>{var le,ie;if(ee.preventDefault(),k)return;const re=Ee();if(re){(le=a.onInvalid)==null||le.call(a,re);return}(ie=a.onSubmit)==null||ie.call(a,me())})}function A(S,V){typeof V=="string"?S.insertAdjacentHTML("beforeend",V):S.append(V)}function H(){const S=document.createElement("div");return S.className="simple-mode",S.innerHTML=`<label><input type="checkbox" id="simple-mode"${v?" checked":""}>${D(i.simpleMode)}</label>`,S.querySelector("input").onchange=V=>Z(V.target.checked),S}function q(){const S=document.createElement("div");S.className=t==="create"?"drawer-footer":"drawer-footer form-surface-actions";for(const V of u){if(!Ve(V.visibleWhen,l,r))continue;if(V.kind==="checkbox"){const ce=document.createElement("label");ce.className="continuous",ce.innerHTML=`<input id="${D(V.id)}" type="checkbox"${V.checked?" checked":""}>${D(V.label||"")}`,S.append(ce);continue}if(V.kind==="submit"){const ce=document.createElement("button");ce.type="submit",ce.className=V.variant||"primary",ce.dataset.action=V.id,ce.textContent=V.label||i.submit,S.append(ce);continue}S.insertAdjacentHTML("beforeend",Ie(V.id,V.label||"",V.glyph||"",V.variant||""));const oe=S.lastElementChild;oe.onclick=()=>{var ce;k||S.parentElement!==E||oe.disabled||((V.id==="close-overlay"||V.id==="cancel")&&a.onCancel?a.onCancel():V.id==="save-draft"&&a.onSaveDraft?a.onSaveDraft(me()):(ce=a.onAction)==null||ce.call(a,V.id,me()))}}return S}function R(){return c.filter(V=>Ve(V.visibleWhen,l,r)&<(V.visibleScope,r)).map((V,oe)=>({...V,order:V.order??oe})).sort((V,oe)=>V.order-oe.order)}let P=s.defaultTab||((ae=c[0])==null?void 0:ae.id);function L(S){var F;const V={data:l,context:r,variant:t,tab:S},oe=document.createElement("div");if(oe.className=t==="create"?"form-surface-body":"detail-fields form-surface-body",!S||S.kind==="form"){const B=(S==null?void 0:S.items)??p;for(const Y of B){const X=M(Y,V);X&&oe.append(X)}const _=(S==null?void 0:S.blocks)??h;for(const Y of _){const X=j(Y,V);X&&oe.append(X)}return oe}const ce=S.kind==="custom"?S.render:((F=e.renderers)==null?void 0:F[S.kind])||S.render,xe=ce?ce(V):"";return typeof xe=="string"?oe.innerHTML=xe:xe&&oe.append(xe),oe}function M(S,V){if("field"in S)return z(S);const oe=vs(S)?$(S,V):j(S,V);return oe&&S.span!==1&&!(vs(S)&&S.layoutRole==="column")&&(oe.style.gridColumn="1 / -1"),oe}function $(S,V){var B;const oe=Ve(S.visibleWhen,l,r),ce=S.layoutRole==="column";if(!oe&&!ce)return null;const xe=[];for(const _ of oe?S.items:[]){const Y=M(_,V);Y&&xe.push(Y)}if(!ce&&!xe.some(_=>_.dataset.layoutRole!=="column"||_.childElementCount>0))return null;const F=document.createElement("section");if(F.className="form-group",F.dataset.group=S.id,ce)return F.className="form-layout-column",F.dataset.layoutRole="column",F.append(...xe),F;if(S.columns===2&&!v){F.classList.add("form-group--columns");const _=((B=S.columnRatio)==null?void 0:B.length)===2&&S.columnRatio.every(Y=>Number.isFinite(Y)&&Y>0)?S.columnRatio:[1,1];F.style.display="grid",F.style.gridTemplateColumns=_.map(Y=>`minmax(0, ${Y}fr)`).join(" "),F.style.columnGap="24px"}return F.innerHTML=`<p class="form-group-title">${D(S.label)}</p>`,F.firstElementChild.style.gridColumn="1 / -1",F.append(...xe),F}function z(S){var Y;const V=b(S.field);if(!V)return null;const oe=N(V,S,ue());if(!oe.visible||v&&!m.has(V.key))return null;I(V);const ce=document.createElement("div");ce.className=t==="create"?"create-field":"detail-row",ce.dataset.field=V.key,S.span===2&&(ce.classList.add("span-2"),ce.style.gridColumn="1 / -1"),(S.labelPosition||((Y=s.layout)==null?void 0:Y.labelPosition)||"side")==="top"&&ce.classList.add("label-top");const F=oe.required,B=t==="create"?"<em>*</em>":" *";ce.innerHTML=`<label for="${f}-${D(V.key)}">${D(V.label)}${F?B:""}</label><div class="field-value"><div class="fc-host" data-control-field="${D(V.key)}" data-control-mode="${t}"></div>`+(V.description?`<small class="field-description">${D(V.description)}</small>`:"")+"</div>";const _=ce.querySelector(".fc-host");return be(_,{...V,required:F},F),ce}function j(S,V){var xe;if(!Ve(S.visibleWhen,l,r)||v&&!m.has(S.id))return null;const oe=(xe=e.renderers)!=null&&xe.block?e.renderers.block({...V,block:S}):S.render?S.render(V):te(S,V),ce=document.createElement("div");return ce.className=`form-surface-block block-${S.kind}`,ce.dataset.block=S.id,typeof oe=="string"?ce.innerHTML=oe:oe&&ce.append(oe),ce}function te(S,V){var oe,ce;if(S.kind==="roles"){const xe=document.createElement("div");xe.className=t==="create"?"create-field":"detail-row",xe.innerHTML=`<label>${D(S.label||"角色与人员")}${(oe=S.requiredRoles)!=null&&oe.length?"<em>*</em>":""}</label><div class="role-body"><div class="role-rows"></div><div class="role-actions">${Ie("add-role",i.addRole,"","outline")}</div></div>`;const F=xe.querySelector(".role-rows"),B=(ce=S.roleOptions)!=null&&ce.length?S.roleOptions:["提报人"],_=S.people??[],Y=()=>{const re=Array.isArray(l.roles)?l.roles:[];return re.length||re.push({name:B[0],person:String(l.owner??V.context.currentUser??"")}),l.roles=re,re};let X=[];const ee=()=>{for(const le of X)le.destroy(),x=x.filter(ie=>ie!==le);X=[],F.replaceChildren();const re=Y();re.forEach((le,ie)=>{const J=document.createElement("div");J.className="role-line";const ne=document.createElement("div");ne.className="fc-host role-select";const he=document.createElement("div");if(he.className="fc-host role-person",J.append(ne,he),re.length>1){const pe=document.createElement("button");pe.type="button",pe.className="role-remove",pe.dataset.roleRemove=String(ie),pe.setAttribute("aria-label","移除角色"),pe.textContent="×",J.append(pe)}F.append(J),X.push(be(ne,{key:`role-${ie}`,label:"角色",kind:"select",options:B,editable:!0},!1,{get:()=>le.name,set:pe=>{le.name=String(pe??"")},notify:()=>{var pe;return(pe=a.onCommit)==null?void 0:pe.call(a,"roles",Y(),l)}}),be(he,{key:`role-person-${ie}`,label:"人员",kind:"person",options:_.map(pe=>pe.id),choices:_,editable:!0},()=>{var pe;return!!((pe=S.requiredRoles)!=null&&pe.includes(le.name))},{get:()=>le.person,set:pe=>{le.person=String(pe??"")},notify:()=>{var pe,Se;ie===0&&(l.owner=le.person,(pe=a.onCommit)==null||pe.call(a,"owner",le.person,l)),(Se=a.onCommit)==null||Se.call(a,"roles",Y(),l)}}))})};return ee(),xe.addEventListener("click",re=>{var J,ne,he;const le=re.target,ie=le.closest("[data-role-remove]");if(ie){const pe=Y();pe.splice(Number(ie.dataset.roleRemove),1),pe.length||pe.push({name:B[0],person:""}),l.owner=((J=pe[0])==null?void 0:J.person)??"",ee(),(ne=a.onChange)==null||ne.call(a,"roles",pe,l);return}if(le.closest('[data-action="add-role"]')){const pe=Y();pe.push({name:B.find(Se=>!pe.some(ke=>ke.name===Se))??B[0],person:""}),ee(),(he=a.onChange)==null||he.call(a,"roles",pe,l)}}),xe}if(S.kind==="meetings"){const xe=document.createElement("section");return xe.className="detail-section",xe.innerHTML=`<p>${D(S.label||"进入选题会")}</p><div class="meeting-table"><div>选题会<span>提报人</span><span>操作</span></div><div class="meeting-rows"></div>${Ie("add-meeting",i.addMeeting,"add")}</div>`,xe}return""}function ue(){return R().find(S=>S.id===P)}function ge(S,V,oe){return{field:S,value:oe?oe.get():l[S.key]??S.defaultValue??"",item:l,surface:t==="create"?"create":"detail",page:"basic",mode:"default",canEdit:V,readonly:!V,services:e.services,onSelectedOptions:xe=>{(B=>{B.choices=[...new Map([...B.choices||(B.options||[]).map(_=>({id:_,label:_})),...xe].map(_=>[_.id,_])).values()]})(S)},openDetail:xe=>{var F;return(F=a.onOpenDetail)==null?void 0:F.call(a,xe)}}}function be(S,V,oe,ce){var we;const xe=()=>typeof oe=="function"?oe():oe,F=V.editable!==!1&<((we=V.permission)==null?void 0:we.edit,r),B=ge(V,F,ce),_=o.resolve(V),Y=["radio","switch","attitudeVote","singleVote","multiVote"].includes(_.id),X=_.createEditor(B),ee="input,select,textarea,[role=textbox]",re=[X.content,X.element].filter(de=>!!de).map(de=>de.matches(ee)?de:de.querySelector(ee)).find(Boolean);re&&(re.id=`${f}-${V.key}`);const le=document.createElement("div");le.className="fc-error",le.setAttribute("role","status");const ie=document.createElement("div");ie.className="fc-detail-editor",ie.dataset.mode="editing",ie.dataset.box=It(_),ie.append(X.element),S.classList.add("fc-detail-host"),S.classList.toggle("fc-direct-control",Y),S.dataset.page="basic",S.dataset.mode="default",S.dataset.surface=t==="create"?"create":"detail",S.append(ie,le);const J=document.createElement("div");J.className="fc-detail-preview",J.dataset.box=It(_),J.dataset.editable=String(F),J.dataset.surface=t==="create"?"create":"detail",S.prepend(J);const ne=()=>{if(!S.classList.contains("editing")){S.style.minHeight="";return}S.style.minHeight=`${ie.offsetHeight}px`},he=de=>{ie.style.minHeight=`${de}px`,ie.style.maxHeight=`${de}px`},pe=()=>{ie.style.maxHeight="",ne()},Se=It(_)==="rich",ke=()=>{var Te,dt,Ft;if(Y){(Te=X.focus)==null||Te.call(X);return}if(!F||S.classList.contains("editing"))return;const de=J.offsetHeight;S.classList.add("editing"),S.dataset.mode="editing",Se||he(de),ne(),(dt=X.focus)==null||dt.call(X),(Ft=a.onFieldStateChange)==null||Ft.call(a,V.key,"edit")},ve=()=>{if(Y){J.hidden=!0;return}if(J.replaceChildren(_.render({...ge(V,F,ce),readonly:!0,canEdit:!1,mode:"default",value:ce?ce.get():l[V.key]??""})),J.dataset.box==="select"){const de=document.createElement("span");de.className="fc-field-chevron",de.setAttribute("aria-hidden","true"),J.append(de)}if(F){J.tabIndex=0,J.setAttribute("role","button"),J.setAttribute("aria-label",`编辑${V.label}`),J.onclick=Te=>{Te.target.closest("a,button,input,textarea,select")||ke()},J.onkeydown=Te=>{(Te.key==="Enter"||Te.key===" ")&&(Te.preventDefault(),ke())};const de=document.createElement("button");de.type="button",de.className="fc-detail-edit",de.tabIndex=-1,de.textContent="编辑",de.ariaLabel=`编辑${V.label}`,de.onclick=Te=>{Te.stopPropagation(),ke()},J.append(de)}else J.removeAttribute("role"),J.removeAttribute("tabindex"),J.onclick=null,J.onkeydown=null};ve();const Ne=()=>{var Te;const de=xe()&&!fe(X.read())?i.required:(Te=X.validate)==null?void 0:Te.call(X);return le.textContent=de||"",S.classList.toggle("is-error",!!de),de},st=()=>{var Te,dt,Ft;if(!F)return!0;const de=Ne();if(de&&pe(),!de){const Ct=X.read(),Cr=ce?ce.get():l[V.key];JSON.stringify(Cr)!==JSON.stringify(Ct)&&(ce?(ce.set(Ct),(Te=ce.notify)==null||Te.call(ce,Ct)):(l[V.key]=Ct,(dt=a.onCommit)==null||dt.call(a,V.key,Ct,l))),(Ft=a.onChange)==null||Ft.call(a,V.key,Ct,l),ve()}return!de},At=()=>{var de;S.classList.remove("editing"),S.dataset.mode="default",S.style.minHeight="",ie.style.minHeight="",ie.style.maxHeight="",(de=a.onFieldStateChange)==null||de.call(a,V.key,"display")};S.addEventListener("input",()=>{var de;pe(),(de=a.onChange)==null||de.call(a,V.key,X.read(),l)}),S.addEventListener("pointerdown",()=>{S.classList.contains("editing")&&pe()},!0),S.addEventListener("mousedown",de=>{var Te;_.id!=="richText"||!S.classList.contains("editing")||de.target.closest("button,a,input,textarea,select,[contenteditable=true]")||(de.preventDefault(),!S.contains(document.activeElement)&&!Xe(document.activeElement,S)&&((Te=X.focus)==null||Te.call(X)))}),S.addEventListener("change",()=>{pe(),st()}),S.addEventListener("fc-collapse",()=>{st(),At(),ve()}),S.addEventListener("focusout",de=>{Y||de.relatedTarget instanceof Node&&(S.contains(de.relatedTarget)||Xe(de.relatedTarget,S))||queueMicrotask(()=>{if(!(k||!S.isConnected)){if(S.contains(document.activeElement)||Xe(document.activeElement,S)){ne();return}st(),At(),ve()}})}),(V.defaultState||g)==="edit"&&F&&queueMicrotask(()=>{k||ke()});const $t={key:V.key,host:S,editor:X,editable:F,check:Ne,commit:st,beginEdit:ke,write:de=>{ce?ce.set(de):l[V.key]=de},destroy:()=>{var de;return(de=X.destroy)==null?void 0:de.call(X)}};return x.push($t),$t}const fe=S=>Array.isArray(S)?S.length>0:S!=null&&String(S).trim()!=="";function me(){for(const S of x)S.editable&&S.write(S.editor.read());return{...l}}function Ee(){let S;for(const V of x){if(!V.editable)continue;const oe=V.check();oe&&S===void 0&&(S=oe,V.beginEdit())}return S}function Me(S){w=S,E.hidden=!S,E.dataset.open=String(S)}function U(S){g=S,E.dataset.fieldState=S;for(const V of x)S==="edit"?V.beginEdit():V.host.dispatchEvent(new Event("fc-collapse",{bubbles:!0}))}function se(S){var oe;if(S===P||!R().some(ce=>ce.id===S))return;P=S;const V=ue();T(),V&&((oe=a.onTabChange)==null||oe.call(a,S,V))}function Z(S){me(),v=S,T()}function W(S){S.data&&Object.assign(l,S.data),S.fields&&(d=S.fields.map(V=>({...V}))),S.tabs&&(c=S.tabs.map(V=>({...V}))),S.items&&(p=[...S.items]),S.blocks&&(h=[...S.blocks]),S.actions&&(u=[...S.actions]),S.context&&(r={...S.context}),T()}function Q(){var S;if(!k){k=!0,(S=a.onDestroy)==null||S.call(a),G.destroy(),E.onsubmit=null;for(const V of x)V.destroy();x=[],E.remove()}}return T(),Me(w),{element:E,onInteraction:G.onInteraction,read:me,validate:Ee,setOpen:Me,setFieldState:U,setTab:se,setSimpleMode:Z,activeTab:()=>P,update:W,destroy:Q}}function vr(s){const e=O("div",s.className??"tag");return s.marker?e.append(s.marker):s.markerClassName&&e.append(O("span",s.markerClassName)),e.append(O("span","",s.label)),e}function wr(s){const e=O("div",s.className);if(s.leading)e.append(s.leading);else if(s.image){const n=O("img");n.src=s.image.src,n.alt=s.image.alt,e.append(n)}const t=s.inline?e:O("div",s.contentClassName);return t.append(O(s.titleTag??"span",s.titleClassName,s.title)),s.description!==void 0&&t.append(O(s.descriptionTag??"span",s.descriptionClassName,s.description)),s.inline||e.append(t),e}function yr(s,e){Vt[s]=e}function br(s,e){et[s]=e}K.ActionField=hs,K.AttachmentField=ls,K.BaseField=Be,K.BaseFieldControl=it,K.CELL_EDITORS=et,K.CELL_RENDERERS=Vt,K.COMPLETION_LABEL=ui,K.CascadeField=Tn,K.ChoiceField=yt,K.CompositeField=ps,K.ComputedField=bt,K.CustomField=$n,K.DEFAULT_LOCALE_TEXT=Wn,K.DateField=In,K.DateRangeField=as,K.DateTimeField=Nn,K.EmailField=Ji,K.FORMULA_FUNCTIONS=Pt,K.GANTT_UNITS=oi,K.GanttChart=li,K.Grid=ht,K.LinkField=Mn,K.LocationField=ds,K.MultiCascadeField=os,K.MultiChoiceField=ts,K.MultiPersonField=is,K.MultiRelationField=ss,K.MultiVoteField=us,K.NumberField=Xi,K.PersonField=Rn,K.PhoneField=es,K.RadioField=ns,K.RelationField=Ln,K.RichTextField=Zi,K.STATUS_META=gt,K.SignalField=An,K.SingleVoteField=cs,K.SwitchField=rs,K.TextField=Ze,K.TextareaField=Qi,K.UNIT_LABEL=qt,K.VoteField=Kt,K.adaptOperationRecords=Pa,K.allGatesMet=hi,K.computeStickyGroupRows=ti,K.createControlRegistry=ms,K.createDetailComments=Da,K.createDetailDialog=ii,K.createDetailHistory=Va,K.createFieldRegistry=fs,K.createFlowCanvas=mi,K.createFlowContextBar=yi,K.createGantt=da,K.createGrid=ni,K.createMediaCell=wr,K.createNodeCard=vi,K.createNodeFlow=Ca,K.createNodeTimeline=bi,K.createPersonnelSchedule=Ma,K.createSparklineSvg=Jt,K.createTagCell=vr,K.createWorkItemColumnPanels=ja,K.createWorkItemColumns=Ua,K.createWorkItemDetailHeader=Za,K.createWorkItemFormSurface=mr,K.createWorkItemHeaderDecorator=Ka,K.createWorkItemLayers=Qa,K.createWorkItemRulePanels=Ya,K.createWorkItemSelectionBar=_a,K.createWorkItemTable=Wa,K.createWorkItemTabs=qa,K.createWorkItemToolbar=za,K.createWorkflowDetail=Na,K.default=ht,K.emptyView=Ga,K.escapeHtml=D,K.evalFormCondition=Ve,K.evalFormScope=lt,K.evaluateFormula=xt,K.evaluateGates=an,K.formatNumberCommas=Ue,K.groupNodes=fi,K.historyModules=mn,K.isFormula=Zt,K.matchNodes=rn,K.matches=Bi,K.normalizeHistory=Hi,K.parse=Hn,K.queryHistory=Oi,K.registerEditor=br,K.registerFormulaFunction=Ss,K.registerRenderer=yr,K.renderContent=En,K.sanitizeRichText=wt,K.showTip=wi,K.summarize=pi,K.tokenize=Dn,K.videoFlow=Ea,Object.defineProperties(K,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
104
|
+
<button type="button" class="color-swatch" data-color="${N}" style="background-color:${H(L.color)}" aria-label="着色颜色" title="设置颜色" aria-expanded="false"></button>
|
|
105
|
+
<button type="button" class="field-select" data-color-scope="${N}" aria-label="着色范围" aria-expanded="false">${!L.scope||L.scope==="row"?"整行":"单元格"}${$e("down")}</button>
|
|
106
|
+
<button class="field-select ${y?"":"empty"}" data-pick="${N}">${H(y||"请选择筛选项")}${$e("down")}</button>
|
|
107
|
+
${nn(D,L.field?L.operator:"",`data-operator="${N}" aria-label="运算符" ${L.field?"":"disabled"}`)}
|
|
108
|
+
${R}
|
|
109
|
+
<button class="color-remove" data-remove="${N}" aria-label="删除条件" title="删除条件">${$e("close")}</button>
|
|
110
|
+
<div class="color-more-wrap"><button class="color-more" data-color-more="${N}" aria-label="更多条件操作" aria-expanded="false">${$e("more")}</button><div class="color-rule-menu hidden"><button data-color-copy="${N}">复制条件</button><button data-color-up="${N}" ${N===0?"disabled":""}>上移</button><button data-color-down="${N}" ${N===u.colors.length-1?"disabled":""}>下移</button></div></div>
|
|
111
|
+
</div>`}).join(""),g=r(h,"",`<div class="color-panel-title">设置颜色条件<span class="color-help" tabindex="0" title="按条件优先级着色;同一范围满足多个条件时,使用最上方条件的颜色。" aria-label="颜色条件说明">i</span></div><div class="color-conditions">${f}</div><div class="color-panel-footer"><button class="add-condition">${$e("plus")}添加着色条件</button><button class="clear-rules" ${u.colors.length?"":"disabled"}>清空全部条件</button></div>`,Math.min(944,innerWidth-24),"color-panel");g.ariaLabel="设置颜色条件",s.setActiveRulePanel("color");const v=()=>c(h),m=()=>{l(),v()},b=["#ffe5e5","#ffe7d4","#f9e8d2","#fff5d6","#ecf3d3","#daf2d5","#d6f1ec","#d4efff","#e4eaff","#ebe9fe","#f2e8ff","#f7e4fb","#ffe3f2","#ffc8c8","#ffceaa","#f3d3a4","#ffeaa5","#d9e8a7","#b6e4af","#ace4db","#acdffc","#c9d8ff","#d7d5fb","#e3d0ff","#efc9f5","#fbc5e7"],k=()=>{var L;(L=g.querySelector(".color-palette"))==null||L.remove(),g.querySelectorAll("[data-color]").forEach(N=>N.setAttribute("aria-expanded","false"))},C=()=>{var L,N,y;(L=g.querySelector(".color-scope-picker"))==null||L.remove(),(y=(N=s.getPopupEditor())==null?void 0:N.destroy)==null||y.call(N),s.setPopupEditor(null),g.querySelectorAll("[data-color-scope]").forEach(D=>D.setAttribute("aria-expanded","false"))};let w=-1;g.querySelectorAll(".color-condition").forEach((L,N)=>{L.ondragstart=y=>{var D;w=N,(D=y.dataTransfer)==null||D.setData("text/plain",String(N))},L.ondragover=y=>y.preventDefault(),L.ondrop=y=>{if(y.preventDefault(),w<0||w===N)return;const[D]=u.colors.splice(w,1);u.colors.splice(N,0,D),m()}}),g.onclick=L=>{var D,S,R;L.stopPropagation();const N=L.target.closest("button");if(L.target.closest(".color-scope-picker"))return;const y=(N==null?void 0:N.getAttribute("aria-expanded"))==="true";if(C(),!N||N.disabled){k();return}if(N.dataset.colorScope!==void 0){if(k(),y)return;const M=Number(N.dataset.colorScope),F=u.colors[M],q={key:"colorScope",label:"着色范围",kind:"select",options:["整行","单元格"],required:!0},T=i.resolve(q).createEditor({field:q,value:!F.scope||F.scope==="row"?"整行":"单元格",item:o(),surface:"cell",readonly:!1,openDetail:()=>{}});s.setPopupEditor(T);const B=document.createElement("div");B.className="popup fc-popup fc-choice-popup color-scope-picker",B.style.width="272px",B.append(T.element),g.append(B);const A=N.getBoundingClientRect();B.style.left=`${Math.max(8,Math.min(A.left,innerWidth-280))}px`,B.style.top=`${Math.max(8,Math.min(A.bottom+6,innerHeight-B.offsetHeight-8))}px`,N.setAttribute("aria-expanded","true"),T.element.addEventListener("change",I=>{var $,z,W;I.stopPropagation(),!(($=T.validate)!=null&&$.call(T))&&(F.scope=T.read()==="整行"?"row":"cell",m(),(W=(z=s.popup())==null?void 0:z.querySelector(`[data-color-scope="${M}"]`))==null||W.focus())}),B.onkeydown=I=>{I.key==="Escape"&&(I.stopPropagation(),C(),N.focus())},(D=T.focus)==null||D.call(T);return}if(N.dataset.paletteColor!==void 0){const M=Number(N.closest(".color-palette").dataset.ruleIndex);u.colors[M].color=N.dataset.paletteColor,m(),(R=(S=s.popup())==null?void 0:S.querySelector(`[data-color="${M}"]`))==null||R.focus();return}if(N.dataset.color!==void 0){const M=N.getAttribute("aria-expanded")==="true";if(k(),M)return;const F=Number(N.dataset.color),q=document.createElement("div");q.className="color-palette",q.dataset.ruleIndex=String(F),q.setAttribute("role","group"),q.ariaLabel="选择着色颜色",q.innerHTML=b.map(B=>`<button type="button" class="color-palette-option" data-palette-color="${B}" style="background-color:${B}" aria-label="颜色 ${B}" aria-pressed="${B===u.colors[F].color.toLowerCase()}"></button>`).join(""),g.append(q);const T=N.getBoundingClientRect();q.style.left=`${Math.max(8,Math.min(T.left,innerWidth-q.offsetWidth-8))}px`,q.style.top=`${Math.max(8,Math.min(T.bottom+6,innerHeight-q.offsetHeight-8))}px`,N.setAttribute("aria-expanded","true"),q.onkeydown=B=>{B.key==="Escape"&&(B.stopPropagation(),k(),N.focus())};return}if(k(),N.classList.contains("add-condition"))u.colors.push({field:"",operator:"contains",value:"",color:"#fff5d6",scope:"row"}),m();else if(N.dataset.pick!==void 0){const M=+N.dataset.pick;a(N,F=>{u.colors[M].field=F,u.colors[M].value="",u.colors[M].operator="contains",m()})}else if(N.dataset.remove!==void 0)u.colors.splice(+N.dataset.remove,1),m();else if(N.classList.contains("clear-rules"))u.colors=[],m();else if(N.dataset.colorMore!==void 0){const M=N.nextElementSibling,F=M.classList.contains("hidden");g.querySelectorAll(".color-rule-menu").forEach(q=>q.classList.add("hidden")),g.querySelectorAll("[data-color-more]").forEach(q=>q.setAttribute("aria-expanded","false")),M.classList.toggle("hidden",!F),N.setAttribute("aria-expanded",String(F))}else if(N.dataset.colorCopy!==void 0){const M=+N.dataset.colorCopy;u.colors.splice(M+1,0,structuredClone(u.colors[M])),m()}else if(N.dataset.colorUp!==void 0||N.dataset.colorDown!==void 0){const M=Number(N.dataset.colorUp??N.dataset.colorDown),[F]=u.colors.splice(M,1);u.colors.splice(M+(N.dataset.colorUp!==void 0?-1:1),0,F),m()}},g.onchange=L=>{const N=L.target;if(N.dataset.operator!==void 0){u.colors[+N.dataset.operator].operator=N.value,m();return}N.dataset.ruleValue!==void 0&&(u.colors[+N.dataset.ruleValue].value=N.value),l()},g.oninput=L=>{const N=L.target;if(N.dataset.ruleValue!==void 0)u.colors[+N.dataset.ruleValue].value=N.value;else return;l()}}function p(h,u){if(s.renderPanel){s.renderPanel(h,u);return}if(h==="color"){c(u);return}const f=s.view(),g={filter:"筛选",sort:"排序",group:"分组",color:"颜色"}[h],v=h==="filter"?f.filters:h==="sort"?f.sorts:h==="group"?f.groups:f.colors,m=v.map((w,L)=>{var M;const N=h==="sort"?w.colId:h==="group"?w:w.field,y=((M=e.find(([F])=>F===N))==null?void 0:M[1])||N,D=`<button class="field-select" data-pick="${L}">${H(y)}${$e("down")}</button>`;if(h==="sort")return`<div class="condition">${D}<button class="sort-direction ${w.sort==="asc"?"selected":""}" data-dir="asc" data-index="${L}">首项 → 末项</button><button class="sort-direction ${w.sort==="desc"?"selected":""}" data-dir="desc" data-index="${L}">末项 → 首项</button><button data-remove="${L}" aria-label="删除条件">${$e("close")}</button></div>`;if(h==="group")return`<div class="condition">${D}<span class="spacer"></span><button data-remove="${L}" aria-label="删除条件">${$e("close")}</button></div>`;const S=nn([["contains",n[N]?"存在选项属于":"包含"],["equals","等于"],["notEqual","不等于"],["blank","为空"],["notBlank","不为空"]],w.operator,`data-operator="${L}" aria-label="运算符"`),R=["blank","notBlank"].includes(w.operator)?"":n[N]?nn([["","请选择目标值"],...n[N].map(F=>[F,F])],w.value,`data-rule-value="${L}" aria-label="目标值"`):`<input data-rule-value="${L}" aria-label="目标值" value="${H(w.value)}" placeholder="请选择目标值">`;return`<div class="condition">${D}${S}${R}${h==="color"?`<input type="color" data-color="${L}" value="${w.color}" aria-label="行颜色">`:""}<button data-remove="${L}" aria-label="删除条件">${$e("close")}</button></div>`}).join(""),b=r(u,`设置${g}条件`,`${h==="filter"?`<label class="terminated"><input type="checkbox" id="terminated" ${f.showTerminated?"checked":""}>显示已终止数据</label>`:""}${m}<button class="add-condition">${$e("plus")}添加${h==="color"?"着色":g}条件</button>${v.length?'<button class="clear-rules">清空全部条件</button>':""}`,h==="color"?650:560);s.setActiveRulePanel(h);const k=()=>p(h,u);let C=-1;b.querySelectorAll(".condition").forEach((w,L)=>{w.draggable=!0,w.ondragstart=N=>{var y;C=L,(y=N.dataTransfer)==null||y.setData("text/plain",String(L))},w.ondragover=N=>N.preventDefault(),w.ondrop=N=>{if(N.preventDefault(),C<0||C===L)return;const[y]=v.splice(C,1);v.splice(L,0,y),l(),k()}}),b.onclick=w=>{const L=w.target.closest("button");L&&(L.classList.contains("add-condition")&&a(L,N=>{h==="filter"&&f.filters.push({field:N,operator:"contains",value:""}),h==="sort"&&f.sorts.push({colId:N,sort:"asc"}),h==="group"&&!f.groups.includes(N)&&f.groups.push(N),h==="color"&&f.colors.push({field:N,operator:"contains",value:"",color:"#e9f2ff"}),l(),k()}),L.dataset.pick!==void 0&&a(L,N=>{const y=+L.dataset.pick;h==="sort"?f.sorts[y].colId=N:h==="group"?f.groups[y]=N:(v[y].field=N,v[y].value=""),l(),k()}),L.dataset.remove!==void 0&&(v.splice(+L.dataset.remove,1),l(),k()),L.classList.contains("clear-rules")&&(v.splice(0),l(),k()),L.dataset.dir&&(f.sorts[+L.dataset.index].sort=L.dataset.dir,l(),k()))},b.onchange=w=>{const L=w.target;L.id==="terminated"&&(f.showTerminated=L.checked),L.dataset.operator!==void 0&&(v[+L.dataset.operator].operator=L.value,k()),L.dataset.ruleValue!==void 0&&(v[+L.dataset.ruleValue].value=L.value),L.dataset.color!==void 0&&(f.colors[+L.dataset.color].color=L.value),l()},b.oninput=w=>{const L=w.target;L.tagName==="INPUT"&&L.dataset.ruleValue!==void 0&&(v[+L.dataset.ruleValue].value=L.value,l())}}return{colorRuleMatches:d,colorPanel:c,rulePanel:p}}function Ar(s={}){var d;const e=document.createElement("section");e.className="rowvia-work-items detail-header-surface";const t=document.createElement("div");t.className="detail-meta-row";const n=s.tags??[];t.innerHTML=`${n.map(c=>`<span class="detail-meta-tag">${H(c)}</span>`).join("")}<button type="button" class="detail-meta-add" data-detail-action="add-tag" aria-label="添加标签">${$e("add")}</button><span class="detail-meta-divider"></span>${(s.signals||[]).map(c=>`<button type="button" class="detail-signal${c.checked?" checked":""}" data-detail-action="toggle-signal"><span class="detail-signal-dot">${c.checked?"✓":""}</span>${H(c.label)}</button>`).join("")}`,e.append(t);const i=s.stages??[],o=s.activeStage||((d=i.find(c=>c.state==="active"))==null?void 0:d.id),a=document.createElement("div");a.className="detail-process-strip",a.setAttribute("aria-label","工作项流程"),a.innerHTML=i.map((c,p)=>`<div class="detail-stage-wrap"><button type="button" class="detail-stage ${c.id===o?"active":""} ${c.state||""}" data-detail-action="stage" data-stage="${H(c.id)}"><span class="detail-stage-dot"></span>${H(c.label)}</button>${p<i.length-1?'<span class="detail-stage-line"></span>':""}</div>`).join(""),e.append(a);const r=document.createElement("div");r.className="detail-stage-card";const l=i.find(c=>c.id===o)||i[0];return l&&(r.innerHTML=`<div class="detail-stage-card-head"><div><span class="detail-stage-chevron">⌄</span><span class="detail-stage-card-dot ${l.state||""}"></span><strong>${H(l.label)}</strong><span class="detail-stage-status">进行中</span></div><div class="detail-stage-card-actions"><button type="button" class="primary" data-detail-action="complete-stage">完成</button><button type="button" class="icon-button" data-detail-action="stage-more" aria-label="节点更多">${$e("more")}</button></div></div><div class="detail-stage-card-body"><span>负责人</span><strong>${H(s.owner||"待填")}</strong></div><div class="detail-dependency"><span>⌄</span> 依赖项</div>`),l&&e.append(r),e.onclick=c=>{var u;const p=c.target.closest("[data-detail-action]");if(!p)return;const h=p.dataset.detailAction||"";(u=s.onAction)==null||u.call(s,h),e.dispatchEvent(new CustomEvent("rowvia:detail-action",{detail:{action:h,stage:p.dataset.stage},bubbles:!0}))},e}function $r(s={}){const e=Ar(s),t=qe(e,"work-item-detail-header",s);return{element:e,onInteraction:t.onInteraction,destroy(){t.destroy(),e.onclick=null,e.remove()}}}function Dr(s,e={}){const t=document.createElement("div");t.className="rowvia-work-items rowvia-field-scope",t.style.display="contents",s.append(t);const n=new lt,i=qe(t,"work-item-layers",e);let o=null,a=null,r=null,l,d=null;const c=(u,f,g)=>{var v,m;u==="open"?(v=e.onOpen)==null||v.call(e,f,g):(m=e.onClose)==null||m.call(e,f),t.dispatchEvent(new CustomEvent(`rowvia:layer-${u}`,{detail:{kind:f,element:g},bubbles:!0}))};function p(){o&&(o.remove(),o=null,c("close","popup"))}function h(){a&&(a.remove(),a=null,r==null||r.focus(),r=null,c("close","overlay"))}return n.listen(t,"click",u=>{var m;const f=u.target,g=(m=f.closest("[data-action]"))==null?void 0:m.dataset.action,v=g==="close-popup"?"popup":g==="close-overlay"||f===a?"overlay":void 0;v&&(u.stopPropagation(),e.onCloseRequest?e.onCloseRequest(v):v==="popup"?p():h())}),{element:t,onInteraction:i.onInteraction,closePopup:p,closeOverlay:h,showPopup(u,f,g,v=460,m=""){if(n.destroyed)throw new Error("Cannot open a destroyed layer host");p(),o=document.createElement("section"),o.className=`popup ${m}`,o.setAttribute("role","dialog"),o.ariaLabel=f||"列操作",o.style.width=`${v}px`,o.innerHTML=`${f?`<div class="popup-head"><span>${H(f)}</span>${Oe("close-popup","","close")}</div>`:""}${g}`,t.append(o);const b=u.getBoundingClientRect();return o.style.left=`${Math.max(12,Math.min(b.left,innerWidth-v-16))}px`,o.style.top=`${Math.min(b.bottom+8,Math.max(12,innerHeight-o.offsetHeight-16))}px`,c("open","popup",o),o},showOverlay(u,f="dialog-overlay"){if(n.destroyed)throw new Error("Cannot open a destroyed layer host");return a?(a.remove(),c("close","overlay")):r=document.activeElement,a=document.createElement("div"),a.className=`overlay ${f}`,a.setAttribute("role","dialog"),a.setAttribute("aria-modal","true"),typeof u=="string"?a.innerHTML=u:a.append(u),t.append(a),c("open","overlay",a),a},toast(u){if(n.destroyed)return;l==null||l(),d==null||d.remove();const f=document.createElement("div");f.className="toast",f.setAttribute("role","status"),f.innerHTML=$e("check")+H(u),t.append(f),d=f;const g=window.setTimeout(()=>{f.remove(),l==null||l()},2500);l=n.add(()=>window.clearTimeout(g))},destroy(){n.destroyed||(n.destroy(),i.destroy(),p(),h(),t.remove())}}}const qn=new WeakMap;function hs(s,e){let t=qn.get(s);if(!t){const i=new Set,o=a=>{for(const r of[...i])i.has(r)&&!r.contains(a.target,a)&&r.leave(a)};s.addEventListener("pointerdown",o,!0),s.addEventListener("focusin",o,!0),t={boundaries:i,stop:()=>{s.removeEventListener("pointerdown",o,!0),s.removeEventListener("focusin",o,!0)}},qn.set(s,t)}t.boundaries.add(e);const n=t;return()=>{!n.boundaries.delete(e)||n.boundaries.size||(n.stop(),qn.delete(s))}}class Ke{constructor(e){x(this,"root");x(this,"destroying",!1);x(this,"feedback");x(this,"options");x(this,"value");x(this,"committedValue");x(this,"state");x(this,"view");x(this,"viewLife",new lt);x(this,"life",new lt);x(this,"listeners",new Set);x(this,"interactions");x(this,"interactionListeners",new Set);x(this,"mounted",!1);x(this,"handled",new WeakSet);this.options={...e},this.value=e.value,this.committedValue=e.value,this.state=e.readonly||e.canEdit===!1?"display":e.state??"display"}get element(){if(this.root)return this.root;const e=document.createElement("div");return e.className="rowvia-field",e.tabIndex=0,e.setAttribute("aria-label",this.options.field.label),this.root=e,e}bindRoot(){this.life.listen(this.element,"pointerenter",()=>{this.state==="display"&&this.setState("hover","user")}),this.life.listen(this.element,"pointerleave",()=>{this.state==="hover"&&this.setState("display","user")}),this.life.listen(this.element,"click",e=>{e.target.closest("button,a,input,textarea,select,[contenteditable]")||this.edit("user")}),this.life.listen(this.element,"keydown",e=>{const t=e.key;t==="Escape"&&this.state==="editing"?(e.preventDefault(),this.cancel("user")):(t==="Enter"||t===" ")&&this.state!=="editing"&&e.target===this.element&&(e.preventDefault(),this.edit("user"))}),this.life.listen(this.element,"fc-collapse",e=>{var t;((t=e.detail)==null?void 0:t.reason)==="escape"?this.cancel("user"):this.commit("user")}),this.life.listen(this.element,"focusout",()=>{queueMicrotask(()=>{var t,n;if(this.life.destroyed||!this.element.isConnected||this.state!=="editing")return;const e=this.element.ownerDocument.activeElement;this.element.contains(e)||(n=(t=this.view)==null?void 0:t.content)!=null&&n.contains(e)||at(e,this.element)||this.commit("user")})})}renderHover(e){return this.renderDisplay(e)}beforeInput(e){return e}beforeCommit(e){return!0}beforeCancel(e){return!0}beforeStateChange(e){return!0}validateValue(e){}isReadonly(){return!!this.options.readonly||this.options.canEdit===!1||this.options.field.editable===!1}onOutput(e){}get snapshot(){return{key:this.options.field.key,value:this.read(),committedValue:this.committedValue,state:this.state,readonly:this.isReadonly()}}mount(e){if(this.life.destroyed)throw new Error("Cannot mount a destroyed field");return this.mounted||(this.mounted=!0,this.bindRoot(),this.draw()),e==null||e.append(this.element),this}read(){var e;return this.state==="editing"&&((e=this.view)!=null&&e.read)?this.view.read():this.value}on(e){return this.life.destroyed?()=>{}:(this.listeners.add(e),()=>{this.listeners.delete(e)})}onInteraction(e){return this.life.destroyed?()=>{}:(this.interactionListeners.add(e),()=>{this.interactionListeners.delete(e)})}input(e,t="api",n){var r;if(this.life.destroyed||this.snapshot.readonly)return;const i=this.value,o=this.snapshot,a=this.beforeInput(e);this.value=(r=this.options.hooks)!=null&&r.beforeInput?this.options.hooks.beforeInput(a,o):a,(t==="api"||!Object.is(e,this.value))&&this.draw(),this.emit("input",t,{previousValue:i,originalEvent:n})}setValue(e){if(this.life.destroyed)return;const t=this.read();this.value=e,this.committedValue=e,this.draw(),this.emit("change","api",{previousValue:t})}update(e){this.life.destroyed||(this.value=this.read(),this.options={...this.options,...e},"value"in e&&(this.value=this.committedValue=e.value),e.state&&(this.state=e.state),this.isReadonly()&&(this.state="display"),this.draw())}validate(){var n,i,o,a;const e=this.read(),t=e==null||e===""||Array.isArray(e)&&e.length===0;return(this.options.field.required&&t?"此项必填":void 0)||this.validateValue(e)||((i=(n=this.view)==null?void 0:n.validate)==null?void 0:i.call(n))||((a=(o=this.options.hooks)==null?void 0:o.validate)==null?void 0:a.call(o,e))}commit(e="api"){var i,o;if(this.life.destroyed||this.snapshot.readonly)return!1;const t=this.validate();if(this.showValidation(t),t)return this.emit("invalid",e,{message:t}),!1;const n=this.event("commit",e,{previousValue:this.committedValue});return!this.beforeCommit(n)||((o=(i=this.options.hooks)==null?void 0:i.beforeCommit)==null?void 0:o.call(i,n))===!1?!1:(this.value=this.read(),this.committedValue=this.value,this.element.removeAttribute("aria-invalid"),this.emit("commit",e,{previousValue:n.previousValue}),this.setState("display",e),!0)}cancel(e="api"){var i,o,a,r;if(this.life.destroyed)return;const t=this.event("cancel",e);if(!this.beforeCancel(t)||((o=(i=this.options.hooks)==null?void 0:i.beforeCancel)==null?void 0:o.call(i,t))===!1)return;const n=this.event("state",e,{previousState:this.state,state:"display",value:this.committedValue});this.state!=="display"&&(!this.beforeStateChange(n)||((r=(a=this.options.hooks)==null?void 0:a.beforeStateChange)==null?void 0:r.call(a,n))===!1)||(this.value=this.committedValue,this.disposeView(),this.state="display",this.draw(),this.emit("cancel",e),n.previousState!=="display"&&this.publish(n))}edit(e="api"){var t,n;this.life.destroyed||(this.setState("editing",e),this.state==="editing"&&((n=(t=this.view)==null?void 0:t.focus)==null||n.call(t)))}setState(e,t="api"){var o,a,r,l;if(this.life.destroyed||e===this.state||e==="editing"&&this.snapshot.readonly)return;const n=this.event("state",t,{previousState:this.state});if(n.state=e,!this.beforeStateChange(n)||((a=(o=this.options.hooks)==null?void 0:o.beforeStateChange)==null?void 0:a.call(o,n))===!1)return;const i=this.state!=="editing"&&e!=="editing"&&!((r=this.options.renderers)!=null&&r.display)&&!((l=this.options.renderers)!=null&&l.hover)&&this.renderHover===Ke.prototype.renderHover;this.value=this.read(),this.state=e,i&&this.view?this.element.dataset.state=e:this.draw(),this.publish(n)}action(e,t){var i,o;if(this.life.destroyed)return;const n={type:e,value:t};(o=(i=this.options).onAction)==null||o.call(i,n),this.emit("action","api",{action:n})}destroy(){var e,t;if(!(this.life.destroyed||this.destroying)){this.destroying=!0,this.value=this.read();try{this.emit("destroy","api")}finally{try{this.disposeView()}finally{(e=this.interactions)==null||e.destroy(),this.life.destroy(),this.listeners.clear(),this.interactionListeners.clear(),(t=this.root)==null||t.remove()}}}}createEditor(){if(this.life.destroyed)throw new Error("Cannot edit a destroyed field");this.disposeView(),this.state="editing";const e=this.renderEditing(this.context());return this.view=e,this.watch(e),{...e,read:()=>this.read(),validate:()=>this.validate(),onInteraction:t=>this.onInteraction(t),destroy:()=>this.destroy()}}render(){if(this.life.destroyed)throw new Error("Cannot render a destroyed field");return this.disposeView(),this.view=this.renderDisplay(this.context()),{...this.view,destroy:()=>this.destroy()}}context(){return{...this.options,readonly:this.isReadonly(),value:this.value,onAction:e=>this.action(e.type,e.value)}}showValidation(e){var t;if(this.mounted){if(!e){this.element.removeAttribute("aria-invalid"),(t=this.feedback)==null||t.remove();return}this.feedback??(this.feedback=this.element.ownerDocument.createElement("div")),this.feedback.className="fc-error",this.feedback.setAttribute("role","status"),this.feedback.textContent=e,this.element.setAttribute("aria-invalid","true"),this.element.append(this.feedback)}}draw(){var c,p,h,u,f,g,v;if(!this.mounted||this.life.destroyed)return;const e=this.element.ownerDocument.activeElement,t=this.state==="editing"&&!!e&&(!!((c=this.view)!=null&&c.element.contains(e))||!!((h=(p=this.view)==null?void 0:p.content)!=null&&h.contains(e))),n=e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement?{start:e.selectionStart,end:e.selectionEnd}:void 0;this.disposeView(),this.isReadonly()&&(this.state="display");const i=this.snapshot,o=this.options.content,a=typeof o=="function"?o(i):o??{kind:"text",text:this.value==null?"":String(this.value)},r=this.context(),l=()=>this.state==="editing"?this.renderEditing(r):o?zn(a):this.state==="hover"?this.renderHover(r):this.renderDisplay(r),d={...i,element:this.element,field:this.options.field,content:a,renderDefault:l,input:m=>this.input(m),commit:()=>this.commit(),cancel:()=>this.cancel(),edit:()=>this.edit(),action:(m,b)=>this.action(m,b)};if(this.view=((f=(u=this.options.renderers)==null?void 0:u[this.state])==null?void 0:f.call(u,d))??l(),this.element.setAttribute("aria-label",this.options.field.label),this.element.dataset.state=this.state,this.element.dataset.readonly=String(i.readonly),this.element.replaceChildren(this.view.element),this.element.removeAttribute("aria-invalid"),this.watch(this.view),t){(v=(g=this.view).focus)==null||v.call(g);const m=this.element.ownerDocument.activeElement;if((n==null?void 0:n.start)!=null&&n.end!=null&&(m instanceof HTMLInputElement||m instanceof HTMLTextAreaElement))try{m.setSelectionRange(n.start,n.end)}catch{}}}watch(e){if(this.mounted&&this.state==="editing"){const n=()=>[this.element,e.content,this.options.focusBoundary].filter(i=>!!i);this.viewLife.add(hs(this.element.ownerDocument,{contains:(i,o)=>n().some(a=>o.composedPath().includes(a)||!!i&&a.contains(i)||at(i,a)),leave:()=>{this.element.isConnected&&this.commit("user")}}))}this.interactions??(this.interactions=qe(this.mounted?this.element:e.element,`field:${this.options.field.key}`,{onInteraction:n=>{var i,o;(o=(i=this.options).onInteraction)==null||o.call(i,n);for(const a of this.interactionListeners)a(n)}}));const t=[...new Set([e.element,e.content].filter(n=>!!n))];for(const n of t)this.viewLife.add(this.interactions.addRoot(n));for(const n of e.inputRoot?[e.inputRoot]:t)for(const i of["input","change"])this.viewLife.listen(n,i,o=>{var a;this.handled.has(o)||(this.handled.add(o),this.input(((a=e.read)==null?void 0:a.call(e))??this.value,"user",o),i==="change"&&this.emit("change","user",{originalEvent:o}))})}disposeView(){var t;this.viewLife.destroy(),this.viewLife=new lt;const e=this.view;this.view=void 0,(t=e==null?void 0:e.destroy)==null||t.call(e)}event(e,t,n={}){return{...this.snapshot,type:e,source:t,...n}}emit(e,t,n={}){this.publish(this.event(e,t,n))}publish(e){var i,o,a;this.onOutput(e),(o=(i=this.options).onEvent)==null||o.call(i,e);for(const r of[...this.listeners])r(e);const t=this.mounted?this.element:(a=this.view)==null?void 0:a.element;if(!t)return;const n=t.ownerDocument.defaultView.CustomEvent;t.dispatchEvent(new n(`field:${e.type}`,{detail:e,bubbles:!0}))}}function zn(s){if(s.kind==="node")return{element:s.node,destroy:s.destroy};const e=document.createElement("div");if(e.className=s.className??"",s.kind==="text")return e.textContent=s.text,{element:e};const t=s.children.map(zn);return e.append(...t.map(n=>n.element)),{element:e,destroy:()=>t.forEach(n=>{var i;return(i=n.destroy)==null?void 0:i.call(n)})}}function ps(s,e=312){s.rows=1,s.style.resize="none";const t=()=>{s.style.height="auto";const n=s.scrollHeight;n>0&&(s.style.height=Math.min(n,e)+"px"),s.style.overflowY=n>e?"auto":"hidden"};return s.addEventListener("input",t),s.addEventListener("focus",t),queueMicrotask(t),t}const fs=s=>s==null?"":String(s);function Fr(s){var t;const e=G("div",`fc-value fc-${s.className||""}`);if(s.field.kind==="richText"||s.field.kind==="richtext"||s.field.kind==="longText"||s.field.control==="richText")e.innerHTML=yt(s.value);else if(s.field.kind==="number"&&typeof s.value=="number"){const n=s.field.numberOptions;e.textContent=s.value.toLocaleString("zh-CN",{useGrouping:(n==null?void 0:n.thousandsSeparator)??!1,maximumFractionDigits:(n==null?void 0:n.decimals)??10})+((n==null?void 0:n.suffix)||""),e.classList.add("fc-plain")}else e.textContent=fs(s.value),e.classList.add("fc-plain");return(t=e.textContent)!=null&&t.trim()||(e.textContent="待填",e.classList.add("fc-empty")),e}function gs(s,e){const n=s==="text"&&e.layout!=="compact"?G("textarea","fc-input fc-textarea"):G("input","fc-input");if(n instanceof HTMLInputElement&&(n.type=s),n.value=fs(e.value),n.disabled=e.readonly,n.required=!!e.field.required,n.ariaLabel=e.field.label,n.placeholder=e.field.placeholder||(e.layout!=="compact"?"待填":`请输入${e.field.label}`),e.field.maxLength!==void 0&&(n.maxLength=e.field.maxLength),s==="number"&&n instanceof HTMLInputElement){const i=e.field.numberOptions;n.step=String((i==null?void 0:i.step)??"any"),(i==null?void 0:i.min)!==void 0&&(n.min=String(i.min)),(i==null?void 0:i.max)!==void 0&&(n.max=String(i.max))}return n instanceof HTMLTextAreaElement&&ps(n),s==="text"&&e.layout!=="compact"&&n.addEventListener("keydown",i=>{i.key==="Enter"&&(i.preventDefault(),n.dispatchEvent(new Event("fc-collapse",{bubbles:!0})))}),{element:n,read:()=>s==="number"?n.value===""?null:Number(n.value):n.value,validate:()=>e.field.required&&!n.value.trim()?"此项必填":n.checkValidity()?void 0:n.validationMessage||"请填写有效值",focus:()=>n.focus()}}const Ct=s=>s==null?"":String(s),St=s=>s.dispatchEvent(new Event("change",{bubbles:!0}));function _n(s){try{const e=new URL(Ct(s));return["http:","https:"].includes(e.protocol)?e.href:void 0}catch{return}}function Vt(s){return G("div","fc-value fc-plain fc-"+(s.className||"")+(s.value==null||s.value===""?" fc-empty":""),Ct(s.value)||"待填")}function cn(s,e){const t=e==="textarea"?G("textarea","fc-input fc-textarea"):G("input","fc-input");return t instanceof HTMLInputElement&&(t.type=e),t instanceof HTMLTextAreaElement&&ps(t),t.value=Ct(s.value),t.disabled=s.readonly,t.required=!!s.field.required,t.ariaLabel=s.field.label,t.placeholder=s.field.placeholder||"请输入"+s.field.label,s.field.maxLength!==void 0&&(t.maxLength=s.field.maxLength),{element:t,read:()=>t.value,focus:()=>t.focus(),validate:()=>e==="url"&&t.value&&!_n(t.value)?"请输入 http 或 https 链接":t.checkValidity()?void 0:"请填写有效的"+s.field.label}}function Pr(s){const e=G("div","fc-link-value"),t=_n(s.value);if(!t)return Vt(s);const n=G("a","fc-link",Ct(s.value));return n.href=t,n.target="_blank",n.rel="noopener noreferrer",n.onclick=i=>i.stopPropagation(),e.append(G("span","fc-link-icon","↗"),n),e}function ms(s){let e=s.value==null||s.value===""?null:s.value===!0;const t=G("div","fc-switch-field"),n=G("button","fc-switch");n.type="button",n.setAttribute("role","switch"),n.ariaLabel=s.field.label,n.disabled=s.readonly;const i=G("span"),o=()=>{n.setAttribute("aria-checked",String(e===!0)),t.dataset.empty=String(e===null),i.textContent=e===null?"待填":e?"是":"否"};return n.onclick=()=>{s.readonly||(e=!e,o(),St(t))},t.append(n,i),o(),{element:t,read:()=>e,focus:()=>n.focus()}}function Hr(s){return ms({...s,readonly:!0}).element}function Or(s){const e=G("div","fc-signals"),t=Array.isArray(s.value)?s.value:[s.value];for(const n of t.filter(i=>i!=null&&i!=="")){const i=typeof n=="object"?n:{status:n},o=i.status??i.value,a=o===!0||o==="passed"||o==="success",r=G("span","fc-signal "+(a?"is-success":"is-pending"),(a?"● ":"○ ")+Ct(i.label||i.name||(a?"已满足":o===!1?"未满足":o||"等待信号")));e.append(r)}return e.children.length||e.append(G("span","fc-empty","等待外部信号")),e}function Br(s){const e=s.value&&typeof s.value=="object"?s.value.display??s.value.value:s.value;return Vt({...s,value:e!=null&&typeof e!="object"?e:""})}function Vr(s,e){const t=G("div","fc-readonly");return t.append(e(s),G("small","fc-service-note","由系统更新 · 只读")),{element:t,read:()=>s.value}}function vs(s){const e=s.field.radioValueType==="boolean";let t=s.value==null?"":String(s.value);const n=G("div","fc-radio-group fc-choice--radio");n.setAttribute("role","radiogroup"),n.ariaLabel=s.field.label;const i=[],o=()=>{const a=i.find(r=>r.dataset.value===t&&!r.disabled)??i.find(r=>!r.disabled);for(const r of i){const l=r.dataset.value===t;r.setAttribute("aria-checked",String(l)),r.classList.toggle("selected",l),r.tabIndex=r===a?0:-1}};for(const a of tt(s.field)){const r=G("button","fc-option fc-radio-option");r.type="button",r.dataset.value=a.id,r.setAttribute("role","radio"),r.disabled=s.readonly||!!a.disabled;const l=G("span","fc-radio-dot");l.ariaHidden="true",r.append(l,G("span","fc-option-label",a.label)),r.onclick=d=>{d.stopPropagation(),!(r.disabled||t===a.id)&&(t=a.id,o(),St(n))},r.onkeydown=d=>{var f,g;if(!["ArrowRight","ArrowDown","ArrowLeft","ArrowUp","Home","End"].includes(d.key)||s.readonly)return;d.preventDefault(),d.stopPropagation();const p=i.filter(v=>!v.disabled),h=p.indexOf(r),u=d.key==="Home"?0:d.key==="End"?p.length-1:(h+(["ArrowLeft","ArrowUp"].includes(d.key)?-1:1)+p.length)%p.length;(f=p[u])==null||f.focus(),(g=p[u])==null||g.click()},i.push(r),n.append(r)}return i.length?t&&!i.some(a=>a.dataset.value===t)&&n.append(G("span","fc-empty","已选选项不可用")):n.append(G("span","fc-empty","暂无选项")),o(),{element:n,read:()=>e?t===""?null:t==="true":t,focus:()=>{var a;return(a=i.find(r=>r.tabIndex===0))==null?void 0:a.focus()},validate:()=>s.field.required&&!t?"请选择一个选项":void 0}}const ws=s=>!Array.isArray(s)||!s.length?[]:Array.isArray(s[0])?s.map(e=>e.map(String)):[s.map(String)];function Gt(s,e){const t=[];for(const n of e){const i=s.find(o=>o.id===n);t.push((i==null?void 0:i.label)||n),s=(i==null?void 0:i.children)||[]}return t.join(" / ")}function Gr(s){const e=G("div","fc-tags");for(const t of ws(s.value)){const n=G("span","fc-tag");n.append(G("span","fc-tag-label",Gt(tt(s.field),t))),e.append(n)}return e.children.length||e.append(G("span","fc-empty","待填")),e}function qr(s,e){const t=G("div","fc-cascade"),n=G("div","fc-choice-selection"),i=G("input","fc-choice-search");i.placeholder="",i.autocomplete="off",i.ariaLabel="输入以搜索"+e.field.label,i.disabled=e.readonly;const o=()=>{i.size=Math.max(1,[...i.value].length+1)};o();const a=G("div","fc-cascade-columns"),r=G("div","fc-error");r.setAttribute("role","status");const l=tt(e.field);let d=ws(e.value),c=[];const p=[],h=(w,L,N=!1)=>w.forEach(y=>{var D;(D=y.children)!=null&&D.length?h(y.children,[...L,y.id],N||!!y.disabled):p.push({path:[...L,y.id],disabled:N||!!y.disabled})});h(l,[]);const u=(w,L)=>JSON.stringify(w)===JSON.stringify(L),f=e.layout!=="compact"&&!e.readonly;let g;const v=()=>{const w=g;g=void 0,w==null||w.close()},m=()=>{!f||g||e.readonly||(g=rt({anchor:i.parentElement||t,content:a,width:"anchor",gap:4,onDismiss:()=>{g=void 0}}))},b=()=>{!f||!g||(v(),t.dispatchEvent(new Event("fc-collapse",{bubbles:!0})))},k=w=>{if(e.readonly)return;const L=d.findIndex(N=>u(N,w));if(s&&L>=0)d.splice(L,1);else{if(s&&e.field.maxSelections&&d.length>=e.field.maxSelections){r.textContent="最多可选择 "+e.field.maxSelections+" 项";return}d=s?[...d,w]:[w]}r.textContent="",C(),t.dispatchEvent(new Event("change",{bubbles:!0})),s||b()},C=()=>{var y,D;if(n.replaceChildren(),a.replaceChildren(),d.forEach(S=>{const R=G("span","fc-tag");R.append(G("span","fc-tag-label",Gt(l,S)));const M=G("span","fc-tag-slot"),F=G("button","fc-choice-remove","×");F.type="button",F.disabled=e.readonly,F.ariaLabel="移除"+Gt(l,S),F.onclick=()=>{d=d.filter(q=>!u(S,q)),C(),t.dispatchEvent(new Event("change",{bubbles:!0}))},M.append(F),R.append(M),n.append(R)}),i.value.trim()){const S=p.filter(R=>!R.disabled&&Gt(l,R.path).toLocaleLowerCase().includes(i.value.trim().toLocaleLowerCase()));for(const{path:R}of S){const M=G("button","fc-option",Gt(l,R));M.type="button",M.disabled=e.readonly,M.setAttribute("aria-pressed",String(d.some(F=>u(F,R)))),M.onclick=()=>k(R),a.append(M)}a.classList.add("is-search"),S.length||a.append(G("p","fc-empty","暂无匹配路径"));return}a.classList.remove("is-search");let w=l,L=[],N=0;for(;w.length;){const S=G("div","fc-cascade-column");S.setAttribute("role","group"),S.ariaLabel="第"+(N+1)+"级";for(const M of w.filter(F=>!F.disabled)){const F=[...L,M.id],q=!!((y=M.children)!=null&&y.length),T=G("button","fc-option",M.label+(q?" ›":""));T.type="button",T.disabled=e.readonly,T.classList.toggle("selected",q?c[N]===M.id:d.some(B=>u(B,F))),T.setAttribute(q?"aria-expanded":"aria-pressed",String(q?c[N]===M.id:d.some(B=>u(B,F)))),T.onclick=()=>{var B,A;q?(c=F,C(),(A=(B=a.lastElementChild)==null?void 0:B.querySelector("button"))==null||A.focus()):k(F)},S.append(T)}a.append(S);const R=w.find(M=>M.id===c[N]&&!M.disabled);if(!((D=R==null?void 0:R.children)!=null&&D.length))break;L=[...L,R.id],w=R.children,N++}l.length||a.append(G("p","fc-empty","暂无可选分类"))};if(i.oninput=()=>{o(),C()},i.onfocus=m,a.onkeydown=w=>{if(!["ArrowDown","ArrowUp","Home","End"].includes(w.key))return;const L=w.target,y=[...(L.closest(".fc-cascade-column")||a).querySelectorAll("button:not(:disabled)")];if(!y.length)return;w.preventDefault();const D=y.indexOf(L);y[w.key==="Home"?0:w.key==="End"?y.length-1:(D+(w.key==="ArrowDown"?1:-1)+y.length)%y.length].focus()},t.append(n,i,r),f){const w=G("span","fc-field-chevron");w.setAttribute("aria-hidden","true"),t.append(w),t.addEventListener("click",()=>m())}else t.append(a);return C(),{element:t,content:f?a:void 0,read:()=>s?d.map(w=>[...w]):[...d[0]||[]],focus:()=>{i.focus(),m()},deactivate:()=>{i.value="",o(),v()},destroy:()=>v(),validate:()=>e.field.required&&!d.length?"请选择分类":void 0}}function bs(s){var f,g,v;let e=Array.isArray(s.value)?structuredClone(s.value):[];const t=G("div","fc-attachments"),n=G("div","fc-file-list"),i=G("label","fc-upload-zone","+ 上传附件"),o=G("input");o.type="file",o.multiple=!0,o.ariaLabel="上传"+s.field.label,o.accept=((f=s.field.attachmentOptions)==null?void 0:f.accept)||"",o.disabled=s.readonly||!((g=s.services)!=null&&g.upload);const a=G("p","fc-error");a.setAttribute("role","status");const r=G("button","fc-retry","重试上传");r.type="button",r.hidden=!0;let l=[],d=!1,c=!1,p;const h=()=>{n.replaceChildren(),e.forEach((m,b)=>{const k=G("div","fc-file-row"),C=_n(m.url),w=C?G("a","fc-link",m.name):G("span","",m.name);if(w.tagName==="A"){const L=w;L.href=C,L.target="_blank",L.rel="noopener noreferrer"}if(k.append(G("span","fc-file-icon","▤"),w),m.size!=null&&k.append(G("small","fc-file-size",Math.ceil(m.size/1024)+" KB")),!s.readonly){const L=G("button","fc-file-remove","×");L.type="button",L.disabled=d,L.ariaLabel="移除"+m.name,L.onclick=()=>{e.splice(b,1),h(),St(t)},k.append(L)}n.append(k)}),e.length||n.append(G("span","fc-empty","暂无附件"))},u=async()=>{var k;if(!((k=s.services)!=null&&k.upload)||s.readonly||d||!l.length)return;const m=s.field.attachmentOptions;if(m!=null&&m.maxFiles&&e.length+l.length>m.maxFiles){a.textContent="最多上传 "+m.maxFiles+" 个文件";return}if(m!=null&&m.maxBytes&&l.some(C=>C.size>m.maxBytes)){a.textContent="文件大小超过限制";return}const b=((m==null?void 0:m.accept)||"").split(",").map(C=>C.trim().toLowerCase()).filter(Boolean);if(b.length&&l.some(C=>!b.some(w=>w.startsWith(".")?C.name.toLowerCase().endsWith(w):w.endsWith("/*")?C.type.toLowerCase().startsWith(w.slice(0,-1)):C.type.toLowerCase()===w))){a.textContent="文件类型不符合要求";return}p=new AbortController,d=!0,o.disabled=!0,r.hidden=!0,a.textContent="上传中…",t.setAttribute("aria-busy","true"),h();try{const C=await s.services.upload(s.field,l,p.signal);if(c)return;if(C.length!==l.length||C.some(w=>!w.id||!w.name))throw new Error("Invalid file references");e=[...e,...C],l=[],a.textContent="",o.value=""}catch{c||(a.textContent="上传失败,已保留原有附件",r.hidden=!1)}finally{c||(d=!1,o.disabled=!1,t.setAttribute("aria-busy","false"),h(),l.length||St(t))}};return o.onchange=m=>{m.stopPropagation(),l=Array.from(o.files||[]),u()},r.onclick=()=>void u(),i.append(o),t.append(n),s.readonly||(t.append(i),(v=s.services)!=null&&v.upload||t.append(G("p","fc-service-note","上传服务未接入"))),t.append(a,r),h(),{element:t,read:()=>structuredClone(e),focus:()=>o.focus(),validate:()=>d?"请等待上传完成":l.length?"请完成或重新选择上传文件":s.field.required&&!e.length?"请上传附件":void 0,destroy:()=>{c=!0,p==null||p.abort()}}}function Wn(s){if(s&&typeof s=="object"&&!Array.isArray(s)){const e=s;return{selected:Array.isArray(e.selected)?[...e.selected]:[],counts:{...e.counts},total:e.total}}return{selected:[],counts:{}}}function ys(s,e){var M,F;let t=Wn(s.value),n=[...t.selected];const i=e==="attitude"?[{id:"like",label:"赞同"}]:tt(s.field),o=G("div","fc-vote"),a=G("button","fc-vote-trigger");a.type="button",a.setAttribute("aria-haspopup","dialog"),a.setAttribute("aria-expanded","false");const r=G("span","fc-vote-icon","+");r.ariaHidden="true";const l=G("span");a.append(r,l);const d=G("section","fc-vote-panel");d.setAttribute("role","dialog"),d.ariaLabel=s.field.label;const c=G("div","fc-vote-header"),p=G("span","fc-vote-total");c.append(G("strong","",e==="attitude"?"表态投票":e==="multi"?"投票-多选":"投票-单选"),p);const h=G("div","fc-vote-list");h.setAttribute("role",e==="multi"?"group":"radiogroup"),h.ariaLabel=s.field.label;const u=G("p","fc-error");u.setAttribute("role","status");const f=G("button","fc-vote-submit","确认投票");f.type="button";const g=G("button","fc-vote-withdraw","撤回投票");g.type="button";const v=G("button","fc-vote-withdraw","重新加载");v.type="button",v.hidden=!0;const m=G("div","fc-vote-actions");m.append(f,g);let b=!1,k=!1,C=!1,w=!((M=s.services)!=null&&M.loadVote),L,N;const y=()=>{var q,T,B;l.textContent=t.selected.length?"已投票":"投票",a.classList.toggle("is-voted",!!t.selected.length),a.ariaLabel=`${s.field.label},${l.textContent}`,p.textContent=k?"加载中…":w?`${t.total??Object.values(t.counts).reduce((A,I)=>A+I,0)}人已投`:"待加载",d.setAttribute("aria-busy",String(b||k)),h.replaceChildren();for(const A of i){const I=G("button","fc-vote-option");I.type="button",I.dataset.value=A.id,I.disabled=s.readonly||b||k||!w||!((q=s.services)!=null&&q.vote)||!!A.disabled;const $=n.includes(A.id);I.classList.toggle("selected",$),I.setAttribute("role",e==="multi"?"checkbox":"radio"),I.setAttribute("aria-checked",String($));const z=G("span",e==="multi"?"fc-vote-check":"fc-radio-dot");z.ariaHidden="true",I.append(z,G("span","fc-vote-label",A.label)),w&&Object.keys(t.counts).length&&I.append(G("span","fc-vote-count",`${t.counts[A.id]??0} 票`)),I.onclick=()=>{var W;I.disabled||(n=e==="multi"?$?n.filter(X=>X!==A.id):[...n,A.id]:[A.id],y(),(W=h.querySelector(`[data-index="${i.indexOf(A)}"]`))==null||W.focus())},I.dataset.index=String(i.indexOf(A)),h.append(I)}i.length||h.append(G("p","fc-empty","暂无投票选项")),f.disabled=b||k||!w||!((T=s.services)!=null&&T.vote)||!n.length,f.textContent=b?"提交中…":t.selected.length?"确认改票":"确认投票",g.hidden=!t.selected.length,g.disabled=b||k||!w,m.hidden=s.readonly||!((B=s.services)!=null&&B.vote),N==null||N.reposition()};h.onkeydown=q=>{if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(q.key))return;const T=[...h.querySelectorAll("button:not(:disabled)")];if(!T.length)return;q.preventDefault(),q.stopPropagation();const B=T.indexOf(document.activeElement),A=q.key==="Home"?0:q.key==="End"?T.length-1:(B+(["ArrowUp","ArrowLeft"].includes(q.key)?-1:1)+T.length)%T.length;T[A].focus(),e!=="multi"&&T[A].click()};const D=()=>{N==null||N.close(),N=void 0},S=async()=>{var q;if(!(!((q=s.services)!=null&&q.loadVote)||k||b)){k=!0,u.textContent="",v.hidden=!0,L=new AbortController,y();try{const T=await s.services.loadVote(s.field,L.signal);if(C||L.signal.aborted)return;t=Wn(T),n=[...t.selected],w=!0}catch{C||(w=!1,u.textContent="加载失败,请重试",v.hidden=!1)}finally{C||(k=!1,y())}}},R=async q=>{var T;if(!(b||k||!w||s.readonly||!((T=s.services)!=null&&T.vote))){b=!0,u.textContent="",L=new AbortController,y();try{const B=await s.services.vote(s.field,[...q],L.signal);if(C||L.signal.aborted)return;t=Wn(B),n=[...t.selected],b=!1,St(o),D(),a.focus()}catch{C||(u.textContent="投票失败,请重试")}finally{C||(b=!1,y())}}};return a.onclick=q=>{if(q.stopPropagation(),N){D();return}n=[...t.selected],u.textContent="",y(),N=rt({anchor:a,anchorMode:"element",content:d,width:360,onDismiss:()=>{N=void 0,a.setAttribute("aria-expanded","false"),b||(n=[...t.selected])},onEscape:()=>a.focus()}),a.setAttribute("aria-expanded","true"),d.tabIndex=-1,d.focus(),S()},f.onclick=()=>{n.length&&R(n)},g.onclick=()=>void R([]),v.onclick=()=>void S(),d.append(c,h,u,v,m),!s.readonly&&!((F=s.services)!=null&&F.vote)&&d.append(G("p","fc-service-note","创建工作项后可投票")),o.append(a),y(),{element:o,content:d,read:()=>structuredClone(t),focus:()=>a.focus(),validate:()=>b?"请等待投票完成":void 0,deactivate:D,destroy:()=>{C=!0,L==null||L.abort(),D()}}}function zr(s){const e=s.value&&typeof s.value=="object"?s.value:{},t=G("div","fc-location"),i=[["address","地址","text"],["longitude","经度","number"],["latitude","纬度","number"]].map(([a,r,l])=>{const d=G("label","fc-location-part",r),c=G("input","fc-input");return c.type=l,c.value=Ct(e[a]),c.disabled=s.readonly,c.ariaLabel=r,c.placeholder=r,l==="number"&&(c.step="any",c.min=a==="longitude"?"-180":"-90",c.max=a==="longitude"?"180":"90"),d.append(c),t.append(d),c}),o=()=>i.every(a=>!a.value)?null:{address:i[0].value,longitude:i[1].value?Number(i[1].value):null,latitude:i[2].value?Number(i[2].value):null};return{element:t,read:o,focus:()=>i[0].focus(),validate:()=>{if(!o())return s.field.required?"请填写位置":void 0;if(i.slice(1).some(a=>a.value===""||!a.checkValidity()))return"请填写有效的经纬度"}}}function _r(s){const e=s.value;return Vt({...s,value:e&&typeof e=="object"?Ct(e.address)||[e.longitude,e.latitude].filter(t=>t!=null).join(", "):""})}function Wr(s,e){const t=G("div","fc-composite"),n=G("div","fc-composite-rows"),i=G("button","fc-composite-add","+ 添加一组");i.type="button";const o=s.field.compositeFields||[],a=[];let r=!1;const l=u=>({...u.value,...Object.fromEntries(u.editors.map(({field:f,editor:g})=>[f.key,g.read()]))}),d=u=>{u.editors.forEach(({editor:f})=>{var g;return(g=f.destroy)==null?void 0:g.call(f)}),u.remove&&(u.remove.onclick=null),u.element.remove()},c=G("p","fc-empty","暂无记录"),p=()=>{a.forEach((u,f)=>{u.legend.textContent="第 "+(f+1)+" 组"}),i.disabled=s.readonly||!o.length||a.length>=(s.field.maxRows||100),a.length?c.remove():n.append(c)},h=u=>{const f=G("fieldset","fc-composite-row"),g=G("legend");f.append(g);const v=o.map(b=>{const k=e(b),C=k.createEditor({...s,field:b,value:u[b.key],readonly:s.readonly||b.editable===!1||!!k.readonly,focusBoundary:void 0,onSelectedOptions:L=>{var N;(N=s.services)!=null&&N.searchOptions&&(b.choices=[...new Map([...tt(b),...L].map(y=>[y.id,y])).values()])}}),w=G("div","fc-composite-field");return w.append(G("label","",b.label+(b.required?" *":"")),C.element),f.append(w),{field:b,editor:C}}),m={value:u,element:f,legend:g,editors:v};if(!s.readonly){const b=G("button","fc-composite-remove","删除此组");b.type="button",b.onclick=()=>{if(r)return;const k=a.indexOf(m);k<0||(d(m),a.splice(k,1),p(),St(t))},m.remove=b,f.append(b)}a.push(m),n.append(f),p()};for(const u of Array.isArray(s.value)?s.value:[])h(structuredClone(u));return i.onclick=()=>{r||i.disabled||(h({}),St(t))},t.append(n),s.readonly||t.append(i),o.length||t.append(G("p","fc-service-note","请配置复合子字段")),p(),{element:t,read:()=>a.map(l),validate:()=>{var u;if(s.field.required&&!a.length)return"请至少添加一组";for(const[f,g]of a.entries())for(const{field:v,editor:m}of g.editors){const b=(u=m.validate)==null?void 0:u.call(m);if(b)return"第 "+(f+1)+" 组 · "+v.label+":"+b}},destroy:()=>{r||(r=!0,i.onclick=null,a.forEach(d))}}}class ct extends Ke{renderDisplay(e){return{element:Fr(e)}}renderEditing(e){return gs("text",e)}}class Cs extends ct{renderDisplay(e){return super.renderDisplay({...e,field:{...e.field,kind:"number"}})}renderEditing(e){return gs("number",e)}}class Ss extends ct{renderDisplay(e){return super.renderDisplay({...e,field:{...e.field,control:"richText"}})}renderEditing(e){return Ji(e)}}class Es extends ct{renderDisplay(e){return{element:Vt(e)}}renderEditing(e){return cn(e,"textarea")}}class Un extends ct{renderDisplay(e){return{element:Pr(e)}}renderEditing(e){return cn(e,"url")}}class xs extends ct{renderEditing(e){return cn(e,"email")}}class ks extends ct{renderEditing(e){return cn(e,"tel")}}class Nt extends Ke{constructor(){super(...arguments);x(this,"multiple",!1);x(this,"variant","choice")}renderDisplay(t){return{element:Zi(t,this.variant==="radio"?"choice":this.variant)}}renderEditing(t){return In(this.multiple,t,this.variant)}}class Ms extends Nt{constructor(){super(...arguments);x(this,"multiple",!0)}}class Ls extends Nt{constructor(){super(...arguments);x(this,"variant","radio")}renderDisplay(t){return t.layout==="compact"?{element:Zi(t)}:vs({...t,readonly:!0})}renderEditing(t){if(t.layout!=="compact")return vs(t);const n=In(!1,t,"choice");return t.field.radioValueType!=="boolean"?n:{...n,read:()=>{const i=n.read();return i===""?null:i==="true"}}}}class jn extends Nt{constructor(){super(...arguments);x(this,"variant","person")}}class Rs extends jn{constructor(){super(...arguments);x(this,"multiple",!0)}}class Kn extends Nt{constructor(){super(...arguments);x(this,"variant","relation")}}class Ts extends Kn{constructor(){super(...arguments);x(this,"multiple",!0)}}class Yn extends Ke{constructor(){super(...arguments);x(this,"multiple",!1)}renderDisplay(t){return{element:Gr(t)}}renderEditing(t){return qr(this.multiple,t)}}class Ns extends Yn{constructor(){super(...arguments);x(this,"multiple",!0)}}class Xn extends Ke{normalize(e){return e}renderDisplay(e){return{element:ss(this.normalize(e))}}renderEditing(e){return os(this.normalize(e))}}class Zn extends Xn{constructor(){super(...arguments);x(this,"range",!1)}normalize(t){return{...t,field:{...t.field,dateOptions:{showTime:!1,showRange:this.range,...t.field.dateOptions}}}}}class Is extends Zn{constructor(){super(...arguments);x(this,"range",!0)}}class As extends Ke{renderDisplay(e){return{element:Hr(e)}}renderEditing(e){return ms(e)}}class $s extends Ke{renderDisplay(e){return bs({...e,readonly:!0})}renderEditing(e){return bs(e)}}class Ds extends Ke{renderDisplay(e){return{element:_r(e)}}renderEditing(e){return zr(e)}}class un extends Ke{constructor(){super(...arguments);x(this,"mode","attitude")}renderDisplay(t){return ys({...t,readonly:!0},this.mode)}renderEditing(t){return ys(t,this.mode)}}class Fs extends un{constructor(){super(...arguments);x(this,"mode","single")}}class Ps extends un{constructor(){super(...arguments);x(this,"mode","multi")}}class It extends Ke{isReadonly(){return!0}constructor(e){super({...e,readonly:!0})}renderDisplay(e){return{element:Br(e)}}renderEditing(e){return Vr(e,t=>this.renderDisplay(t).element)}}class Qn extends It{renderDisplay(e){return{element:Or(e)}}}class Hs extends ct{renderDisplay(e){const t=document.createElement("button");return t.type="button",t.className="fc-detail-link",t.textContent=e.field.label,t.onclick=n=>{var i;n.stopPropagation(),(i=e.onAction)==null||i.call(e,{type:"open",value:e.value})},{element:t,destroy:()=>{t.onclick=null}}}}class Os extends Ke{constructor(e,t){super(e),this.resolve=t}renderDisplay(e){var i;if(e.layout==="compact")return{element:Vt({...e,value:Array.isArray(e.value)&&e.value.length?e.value.length+" 组记录":""})};const t=document.createElement("div");t.className="fc-composite";const n=[];for(const o of Array.isArray(e.value)?e.value:[]){const a=document.createElement("fieldset");a.className="fc-composite-row";for(const r of e.field.compositeFields??[]){const l=document.createElement("label");l.textContent=r.label;const d={...e,field:r,value:o[r.key],readonly:!0},c=this.resolve(r),p=((i=c.renderView)==null?void 0:i.call(c,d))??{element:c.render(d)};n.push(p),a.append(l,p.element)}t.append(a)}return{element:t,destroy:()=>n.forEach(o=>{var a;return(a=o.destroy)==null?void 0:a.call(o)})}}renderEditing(e){return Wr(e,this.resolve)}}const Ur={textarea:"保留换行的纯文本,支持长度限制",radio:"平铺选项,一次选择一项",cascadeSingle:"逐级浏览分类,选择完整路径",cascadeMulti:"逐级浏览并选择多条路径",person:"按姓名搜索,以稳定人员 ID 保存",multiPerson:"按姓名搜索,以稳定人员 ID 保存",date:"日历选择和直接输入,支持清空",dateRange:"连续选择起止日期,校验完整范围",url:"填写网址并在新窗口安全打开",cloudDocument:"添加云文档链接,点击打开原文档",email:"邮箱输入与格式校验",phone:"支持国家区号的电话输入",switch:"以是或否记录布尔状态",attachment:"文件列表、上传与删除,支持上传失败重试",location:"填写地址和经纬度,校验坐标边界",relation:"按名称或编号搜索工作项,点击名称打开详情",multiRelation:"按名称或编号搜索工作项,点击名称打开详情",attitudeVote:"选择并提交投票,结果以宿主服务回读为准",singleVote:"选择并提交投票,结果以宿主服务回读为准",multiVote:"选择并提交投票,结果以宿主服务回读为准",externalSignal:"由外部系统更新,系统内只读",externalMultiSignal:"由外部系统更新,系统内只读",formula:"展示服务端计算结果,不可手工覆盖",aggregate:"展示服务端计算结果,不可手工覆盖",ai:"展示服务端计算结果,不可手工覆盖",system:"展示服务端计算结果,不可手工覆盖",composite:"可重复字段组,复用已注册子控件并逐组校验",multiPersonComposite:"可重复字段组,复用已注册子控件并逐组校验",text:"单行输入,支持清空和必填校验",richText:"紧凑编辑与全屏排版,支持标题、颜色、列表、表格和链接",select:"从字段配置中选择一个选项",multiSelect:"点击标签选择多项,保存为数组",number:"支持小数和负数,空值与零分别保存",dateTime:"日历、时间与日期范围",detail:"由调用方处理关联内容导航"},jr={title:"text",longText:"richText",status:"select",richtext:"richText",single_select:"select",multi_select:"multiSelect",user:"person",multi_user:"multiPerson",multi_person:"multiPerson",cascade_select:"cascadeSingle",cascade_single:"cascadeSingle",cascade_multi:"cascadeMulti",daterange:"dateRange",date_range:"dateRange",datetime:"dateTime",multi_relation:"multiRelation",attitude_vote:"attitudeVote",single_vote:"singleVote",multi_vote:"multiVote",vote:"attitudeVote",external_signal:"externalSignal",external_multi_signal:"externalMultiSignal",multi_person_composite:"multiPersonComposite",cloud_document:"cloudDocument"},Kr=[["text","单行文本",ct,"文本","T"],["richText","富文本",Ss,"文本","¶"],["select","单选",Nt,"选择","◉"],["multiSelect","多选",Ms,"选择","☑"],["number","数字",Cs,"其他","#"],["dateTime","日期时间",Xn,"日期","◷"],["detail","详情页查看",Hs,"关联工作项","↗"],["textarea","多行文本",Es,"文本","≡"],["radio","单选按钮",Ls,"选择","◉"],["cascadeSingle","级联单选",Yn,"选择","⑂"],["cascadeMulti","级联多选",Ns,"选择","⑂"],["person","单选人员",jn,"人员","♙"],["multiPerson","多选人员",Rs,"人员","♙"],["date","日期",Zn,"日期","▦"],["dateRange","日期区间",Is,"日期","▦"],["url","URL 链接",Un,"其他","↗"],["cloudDocument","关联云文档",Un,"其他","▤"],["email","邮箱",xs,"其他","@"],["phone","电话",ks,"其他","☎"],["switch","开关",As,"其他","◐"],["attachment","附件",$s,"其他","⌑"],["location","地理位置",Ds,"其他","⌖"],["relation","单选关联工作项",Kn,"关联工作项","↗"],["multiRelation","多选关联工作项",Ts,"关联工作项","↗"],["attitudeVote","表态投票",un,"投票","♡"],["singleVote","单选投票",Fs,"投票","♡"],["multiVote","多选投票",Ps,"投票","♡"],["externalSignal","系统外信号",Qn,"系统","◌",!0],["externalMultiSignal","多值系统外信号",Qn,"系统","◌",!0],["formula","公式计算",It,"系统","ƒ",!0],["aggregate","聚合计算",It,"系统","ƒ",!0],["ai","AI 字段",It,"系统","ƒ",!0],["system","系统字段",It,"系统","ƒ",!0]];function Bs(s=[]){const e=new Map,t=a=>{if(!/^[A-Za-z][\w-]*$/.test(a.id))throw new Error("Invalid control id");if(e.has(a.id))throw new Error(`Control already registered: ${a.id}`);e.set(a.id,a)},n=a=>{const r=a.control||jr[a.kind||"text"]||a.kind||"text",l=e.get(r);if(!l)throw new Error(`Unknown control: ${r}`);return l},i=a=>n(a.field).create(a),o=a=>{const r=n(a);return{...r,render:l=>r.create(l).render().element,renderView:l=>r.create(l).render(),createEditor:l=>r.create(l).createEditor()}};for(const[a,r,l,d,c,p]of Kr)t({id:a,label:r,description:Ur[a]||r,glyph:c,group:d,readonly:p,action:a==="detail"?"view":a==="select"||a==="multiSelect"?"select":void 0,create:h=>new l({...h,readonly:p||h.readonly})});for(const[a,r]of[["composite","复合字段"],["multiPersonComposite","多人复合字段"]])t({id:a,label:r,description:"组合多个已注册字段",glyph:"▦",group:"其他",create:l=>new Os(l,o)});return s.forEach(t),{register:t,resolve:n,create:i,list:()=>[...e.values()]}}class Jn extends Ke{constructor(e,t){super(e),this.control=t}renderDisplay(e){return{element:this.control.render(e)}}renderEditing(e){return this.control.createEditor(e)}}const mt={page(s){return s.page||(s.surface==="cell"?"table":"basic")},render(s,e){const t=G("div","fc-base-control"),n=mt.page(s);return t.dataset.page=n,t.dataset.mode=s.mode||"default",t.dataset.editable=String(s.canEdit??!s.readonly),t.dataset.readonly=String(s.readonly),t.setAttribute("data-field-control",s.field.control||s.field.kind||"text"),t.append(e),t}},Yr=new Set(["radio","select","multiSelect","person","multiPerson","relation","multiRelation","cascadeSingle","cascadeMulti","date","dateRange","dateTime","detail","composite","multiPersonComposite"]);function qt(s){return s.id==="richText"?"rich":Yr.has(s.id)?"select":"text"}function Vs(s,e,t){if(["radio","switch","attitudeVote","singleVote","multiVote"].includes(s.id)||mt.page(e)==="table"||e.readonly||s.readonly||e.canEdit===!1)return t;const n=document.createElement("div");n.className="fc-base-control fc-focus-editor",n.dataset.expanded="true",n.tabIndex=-1;const i=mt.page(e);n.dataset.page=i,n.dataset.mode=i==="table"?"editing":"expanded",n.dataset.controlKey=s.id,n.dataset.box=qt(s);const o=document.createElement("div");o.className="fc-focus-body",o.dataset.box=qt(s),o.append(t.element);const a=document.createElement("div");a.className="fc-focus-trigger",a.tabIndex=0,a.setAttribute("role","button"),a.ariaLabel="编辑"+e.field.label,a.setAttribute("aria-expanded","true"),a.hidden=!0;const r=document.createElement("span");r.className="fc-error fc-focus-error",r.setAttribute("role","status"),n.append(o,a,r);const l=n.ownerDocument,d=e.focusBoundary||n,c=m=>!!m&&(d.contains(m)||at(m,n));let p=!1;const h=()=>{p||(o.hidden=!1,a.hidden=!0,n.dataset.expanded="true",n.dataset.mode="editing",a.setAttribute("aria-expanded","true"),r.textContent="",t.focus&&t.focus(),!o.contains(l.activeElement)&&!at(l.activeElement,n)&&(Array.from(o.querySelectorAll('input:not([type=hidden]):not(:disabled),textarea:not(:disabled),[contenteditable=true],button:not(:disabled),[tabindex="0"]')).find(b=>!b.closest("[hidden]"))||n).focus())},u=()=>{var C,w,L;if(p||!n.isConnected||n.dataset.expanded==="false")return;const m=(C=t.validate)==null?void 0:C.call(t),b={...e,readonly:!0,canEdit:!1,mode:"default",value:m?e.value:t.read()},k=mt.render(b,s.render(b));k.inert=!0,a.replaceChildren(k),r.textContent=m?"尚未保存:"+m:"",(w=t.deactivate)==null||w.call(t),n.dataset.expanded="false",n.dataset.mode="default",o.hidden=!0,a.hidden=!1,a.setAttribute("aria-expanded","false"),(L=e.onDeactivate)==null||L.call(e)},f=m=>{if(m.relatedTarget instanceof Node&&c(m.relatedTarget))return;const b=m.target;queueMicrotask(()=>{p||!n.isConnected||c(l.activeElement)||(b&&!b.isConnected&&l.activeElement===l.body?n.focus():u())})},g=()=>{queueMicrotask(()=>{!p&&n.isConnected&&n.dataset.expanded==="true"&&(!l.activeElement||l.activeElement===l.body)&&n.focus()})};a.onclick=m=>{m.stopPropagation(),h()},a.onkeydown=m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),m.stopPropagation(),h())},d.addEventListener("focusout",f),n.addEventListener("click",g,!0),n.addEventListener("fc-collapse",u);const v=hs(l,{contains:(m,b)=>b.composedPath().includes(d)||c(m),leave:u});return{...t,element:n,focus:h,destroy:()=>{var m;p||(p=!0,v(),d.removeEventListener("focusout",f),n.removeEventListener("click",g,!0),n.removeEventListener("fc-collapse",u),(m=t.destroy)==null||m.call(t))}}}function ei(s){return{...s,context:s,layout:mt.page(s)==="table"?"compact":"form",className:s.surface,services:s.services?{searchOptions:s.services.searchOptions,upload:s.services.upload,vote:s.services.vote?(e,t,n)=>s.services.vote(e,s.item,t,n):void 0,loadVote:s.services.loadVote?(e,t)=>s.services.loadVote(e,s.item,t):void 0}:void 0,onAction:e=>{e.type==="open"&&s.openDetail(String(e.value||s.item.id))}}}function Gs(s=[]){const e=Bs(),t=new Map;for(const i of e.list()){const o={...i,render(a){const r=e.create(ei(a));return mt.render(a,r.render().element)},createEditor(a){const r=e.create(ei(a));return Vs(o,a,r.createEditor())}};t.set(i.id,o)}const n=i=>{e.register({...i,create:a=>new Jn(a,{render:r=>i.render({...r.context,field:r.field,value:r.value,readonly:r.readonly}),createEditor:r=>i.createEditor({...r.context,field:r.field,value:r.value,readonly:r.readonly})})});const o={...i,render:a=>mt.render(a,i.render(a)),createEditor(a){const r=new Jn(ei(a),{render:l=>i.render({...a,value:l.value}),createEditor:l=>i.createEditor({...a,value:l.value})});return Vs(i,a,r.createEditor())}};t.set(i.id,o)};return s.forEach(n),{register:n,list:()=>[...t.values()],resolve:i=>t.get(e.resolve(i).id)}}function Xr(s,e){const t=e[s.field],n=s.value,i=Array.isArray(t)?t.map(String):t==null||t===""?[]:[String(t)];switch(s.op){case"equals":return Array.isArray(t)?i.includes(String(n)):String(t??"")===String(n??"");case"notEqual":return Array.isArray(t)?!i.includes(String(n)):String(t??"")!==String(n??"");case"contains":return i.some(o=>o.includes(String(n??"")));case"notContains":return!i.some(o=>o.includes(String(n??"")));case"in":return(Array.isArray(n)?n.map(String):[String(n??"")]).some(o=>i.includes(o));case"notIn":return!(Array.isArray(n)?n.map(String):[String(n??"")]).some(o=>i.includes(o));case"blank":return i.length===0;case"notBlank":return i.length>0;default:return!0}}function Ye(s,e,t={}){return s?"all"in s?s.all.every(n=>Ye(n,e,t)):"any"in s?s.any.some(n=>Ye(n,e,t)):"not"in s?!Ye(s.not,e,t):Xr(s,e):!0}function Et(s,e={}){var t,n,i,o,a,r;return!s||s.all||(t=s.members)!=null&&t.length&&s.members.includes(e.currentUser||"")||(n=s.teams)!=null&&n.length&&(e.teams||[]).some(l=>s.teams.includes(l))||(i=s.roles)!=null&&i.length&&(e.roles||[]).some(l=>s.roles.includes(l))?!0:!((o=s.members)!=null&&o.length||(a=s.teams)!=null&&a.length||(r=s.roles)!=null&&r.length)}const Zr={empty:"待填",required:"此项必填",simpleMode:"简洁模式",continuous:"连续创建",cancel:"取消",draft:"存草稿",submit:"确认创建",addRole:"添加角色",addMeeting:"添加一组进入选题会"};function qs(s){return s.items!==void 0}function Qr(s,e={}){var ie;const t=s.variant,n=s.presentation||(t==="create"?"modal":"drawer"),i={...Zr,...s.labels},o=e.controls||Gs(),a=s.events||{},r={...s.data||{}};let l={...s.context||{}},d=s.fields.map(E=>({...E})),c=(s.tabs||[]).map(E=>({...E})),p=s.items?[...s.items]:d.map(E=>({field:E.key})),h=s.blocks?[...s.blocks]:[],u=s.actions?[...s.actions]:C();const f=t==="create"?"new":"detail";let g=s.fieldState||"display",v=s.simpleMode??!1;const m=s.simpleKeep&&s.simpleKeep.length?new Set(s.simpleKeep):new Set(d.slice(0,1).map(E=>E.key));let b=s.open??!0,k=!1;function C(){return t==="create"?[{id:"continuous",kind:"checkbox",label:i.continuous},{id:"close-overlay",label:i.cancel,variant:"outline"},{id:"save-draft",label:i.draft,variant:"outline"},{id:"submit",kind:"submit",label:i.submit,variant:"primary"}]:[]}const w=E=>d.find(O=>O.key===E);function L(E,O,U){var Te,xe,ye;const K=Ye(E.visibleWhen,r,l)&&Et((Te=E.permission)==null?void 0:Te.view,l)&&(!O||Ye(O.visibleWhen,r,l))&&(!U||Ye(U.visibleWhen,r,l)&&Et(U.visibleScope,l))&&(t!=="create"||E.createVisible!==!1),ge=!!E.required||(E.requiredWhen?Ye(E.requiredWhen,r,l):!1)||(O!=null&&O.requiredWhen?Ye(O.requiredWhen,r,l):!1)||((xe=E.permission)!=null&&xe.required?Et(E.permission.required,l):!1),he=E.editable!==!1&&Et((ye=E.permission)==null?void 0:ye.edit,l);return{visible:K,required:!!ge,editable:he}}function N(E){if(r[E.key]===void 0&&(E.defaultMode==="always"&&E.defaultValue!==void 0&&(r[E.key]=E.defaultValue),E.defaultMode==="conditional")){for(const O of E.defaultWhen||[])if(Ye(O.when,r,l)){r[E.key]=O.value;return}}}const y=document.createElement(t==="create"?"form":"article");t==="create"&&(y.noValidate=!0);const D=qe(y,"form-surface",s);y.className=t==="create"?"rowvia-work-items rowvia-field-scope create-dialog form-surface":`rowvia-work-items rowvia-field-scope drawer form-surface${n==="fullscreen"?" is-fullscreen":""}`,y.dataset.variant=t,y.dataset.presentation=n,y.dataset.fieldState=g;let S=[];function R(){var ge,he,Te,xe,ye,Ce;for(const Me of S)Me.destroy();S=[],y.innerHTML="";const E=document.createElement("div");if(E.className="drawer-header",(ge=s.slots)!=null&&ge.leading){const Me=document.createElement("div");Me.className="drawer-leading",M(Me,s.slots.leading),E.append(Me)}if(E.insertAdjacentHTML("beforeend",`<span class="page-logo">${$e("check")}</span><strong>${H(s.title||"")}</strong>`),(he=s.slots)!=null&&he.header&&M(E,s.slots.header),y.append(E),(Te=s.slots)!=null&&Te.subHeader){const Me=document.createElement("div");Me.className="detail-sub-header",M(Me,s.slots.subHeader),y.append(Me)}if((xe=s.slots)!=null&&xe.navigation){const Me=document.createElement("div");Me.className="detail-navigation",M(Me,s.slots.navigation),y.append(Me)}const O=T();if(t==="detail"&&O.length){const Me=document.createElement("div");Me.className="detail-tabs",Me.setAttribute("role","tablist");for(const Ae of O){const P=document.createElement("button");P.type="button",P.className=`detail-tab${Ae.id===B?" active":""}`,P.dataset.tabId=Ae.id,P.dataset.detailTab=Ae.label,P.setAttribute("role","tab"),P.setAttribute("aria-selected",String(Ae.id===B)),P.textContent=Ae.label,P.onclick=()=>Re(Ae.id),Me.append(P)}const He=document.createElement("div");He.className="spacer",Me.append(He),(ye=s.slots)!=null&&ye.tabSuffix&&M(Me,s.slots.tabSuffix),y.append(Me)}const U=document.createElement("div");U.className=t==="create"?"create-body":"drawer-body",t==="create"&&s.simpleMode!==void 0&&U.append(F());const K=O.find(Me=>Me.id===B);if(U.append(A(K)),y.append(U),(Ce=s.slots)!=null&&Ce.footer){const Me=document.createElement("div");Me.className="form-surface-slot-footer",M(Me,s.slots.footer),y.append(Me)}u.length&&y.append(q()),t==="create"&&(y.onsubmit=Me=>{var Ae,P;if(Me.preventDefault(),k)return;const He=me();if(He){(Ae=a.onInvalid)==null||Ae.call(a,He);return}(P=a.onSubmit)==null||P.call(a,ue())})}function M(E,O){typeof O=="string"?E.insertAdjacentHTML("beforeend",O):E.append(O)}function F(){const E=document.createElement("div");return E.className="simple-mode",E.innerHTML=`<label><input type="checkbox" id="simple-mode"${v?" checked":""}>${H(i.simpleMode)}</label>`,E.querySelector("input").onchange=O=>be(O.target.checked),E}function q(){const E=document.createElement("div");E.className=t==="create"?"drawer-footer":"drawer-footer form-surface-actions";for(const O of u){if(!Ye(O.visibleWhen,r,l))continue;if(O.kind==="checkbox"){const K=document.createElement("label");K.className="continuous",K.innerHTML=`<input id="${H(O.id)}" type="checkbox"${O.checked?" checked":""}>${H(O.label||"")}`,E.append(K);continue}if(O.kind==="submit"){const K=document.createElement("button");K.type="submit",K.className=O.variant||"primary",K.dataset.action=O.id,K.textContent=O.label||i.submit,E.append(K);continue}E.insertAdjacentHTML("beforeend",Oe(O.id,O.label||"",O.glyph||"",O.variant||""));const U=E.lastElementChild;U.onclick=()=>{var K;k||E.parentElement!==y||U.disabled||((O.id==="close-overlay"||O.id==="cancel")&&a.onCancel?a.onCancel():O.id==="save-draft"&&a.onSaveDraft?a.onSaveDraft(ue()):(K=a.onAction)==null||K.call(a,O.id,ue()))}}return E}function T(){return c.filter(O=>Ye(O.visibleWhen,r,l)&&Et(O.visibleScope,l)).map((O,U)=>({...O,order:O.order??U})).sort((O,U)=>O.order-U.order)}let B=s.defaultTab||((ie=c[0])==null?void 0:ie.id);function A(E){var he;const O={data:r,context:l,variant:t,tab:E},U=document.createElement("div");if(U.className=t==="create"?"form-surface-body":"detail-fields form-surface-body",!E||E.kind==="form"){const Te=(E==null?void 0:E.items)??p;for(const ye of Te){const Ce=I(ye,O);Ce&&U.append(Ce)}const xe=(E==null?void 0:E.blocks)??h;for(const ye of xe){const Ce=W(ye,O);Ce&&U.append(Ce)}return U}const K=E.kind==="custom"?E.render:((he=e.renderers)==null?void 0:he[E.kind])||E.render,ge=K?K(O):"";return typeof ge=="string"?U.innerHTML=ge:ge&&U.append(ge),U}function I(E,O){if("field"in E)return z(E);const U=qs(E)?$(E,O):W(E,O);return U&&E.span!==1&&!(qs(E)&&E.layoutRole==="column")&&(U.style.gridColumn="1 / -1"),U}function $(E,O){var Te;const U=Ye(E.visibleWhen,r,l),K=E.layoutRole==="column";if(!U&&!K)return null;const ge=[];for(const xe of U?E.items:[]){const ye=I(xe,O);ye&&ge.push(ye)}if(!K&&!ge.some(xe=>xe.dataset.layoutRole!=="column"||xe.childElementCount>0))return null;const he=document.createElement("section");if(he.className="form-group",he.dataset.group=E.id,K)return he.className="form-layout-column",he.dataset.layoutRole="column",he.append(...ge),he;if(E.columns===2&&!v){he.classList.add("form-group--columns");const xe=((Te=E.columnRatio)==null?void 0:Te.length)===2&&E.columnRatio.every(ye=>Number.isFinite(ye)&&ye>0)?E.columnRatio:[1,1];he.style.display="grid",he.style.gridTemplateColumns=xe.map(ye=>`minmax(0, ${ye}fr)`).join(" "),he.style.columnGap="24px"}return he.innerHTML=`<p class="form-group-title">${H(E.label)}</p>`,he.firstElementChild.style.gridColumn="1 / -1",he.append(...ge),he}function z(E){var ye;const O=w(E.field);if(!O)return null;const U=L(O,E,te());if(!U.visible||v&&!m.has(O.key))return null;N(O);const K=document.createElement("div");K.className=t==="create"?"create-field":"detail-row",K.dataset.field=O.key,E.span===2&&(K.classList.add("span-2"),K.style.gridColumn="1 / -1"),(E.labelPosition||((ye=s.layout)==null?void 0:ye.labelPosition)||"side")==="top"&&K.classList.add("label-top");const he=U.required,Te=t==="create"?"<em>*</em>":'<span class="form-required"> *</span>';K.innerHTML=`<label for="${f}-${H(O.key)}">${H(O.label)}${he?Te:""}</label><div class="field-value"><div class="fc-host" data-control-field="${H(O.key)}" data-control-mode="${t}"></div>`+(O.description?`<small class="field-description">${H(O.description)}</small>`:"")+"</div>";const xe=K.querySelector(".fc-host");return ve(xe,{...O,required:he},he),K}function W(E,O){var ge;if(!Ye(E.visibleWhen,r,l)||v&&!m.has(E.id))return null;const U=(ge=e.renderers)!=null&&ge.block?e.renderers.block({...O,block:E}):E.render?E.render(O):X(E,O),K=document.createElement("div");return K.className=`form-surface-block block-${E.kind}`,K.dataset.block=E.id,typeof U=="string"?K.innerHTML=U:U&&K.append(U),K}function X(E,O){var U,K;if(E.kind==="roles"){const ge=document.createElement("div");ge.className=t==="create"?"create-field":"detail-row",ge.innerHTML=`<label>${H(E.label||"角色与人员")}${(U=E.requiredRoles)!=null&&U.length?"<em>*</em>":""}</label><div class="role-body"><div class="role-rows"></div><div class="role-actions">${Oe("add-role",i.addRole,"","outline")}</div></div>`;const he=ge.querySelector(".role-rows"),Te=(K=E.roleOptions)!=null&&K.length?E.roleOptions:["提报人"],xe=E.people??[],ye=()=>{const He=Array.isArray(r.roles)?r.roles:[];return He.length||He.push({name:Te[0],person:String(r.owner??O.context.currentUser??"")}),r.roles=He,He};let Ce=[];const Me=()=>{for(const Ae of Ce)Ae.destroy(),S=S.filter(P=>P!==Ae);Ce=[],he.replaceChildren();const He=ye();He.forEach((Ae,P)=>{const V=document.createElement("div");V.className="role-line";const _=document.createElement("div");_.className="fc-host role-select";const Z=document.createElement("div");if(Z.className="fc-host role-person",V.append(_,Z),He.length>1){const Y=document.createElement("button");Y.type="button",Y.className="role-remove",Y.dataset.roleRemove=String(P),Y.setAttribute("aria-label","移除角色"),Y.textContent="×",V.append(Y)}he.append(V),Ce.push(ve(_,{key:`role-${P}`,label:"角色",kind:"select",options:Te,editable:!0},!1,{get:()=>Ae.name,set:Y=>{Ae.name=String(Y??"")},notify:()=>{var Y;return(Y=a.onCommit)==null?void 0:Y.call(a,"roles",ye(),r)}}),ve(Z,{key:`role-person-${P}`,label:"人员",kind:"person",options:xe.map(Y=>Y.id),choices:xe,editable:!0},()=>{var Y;return!!((Y=E.requiredRoles)!=null&&Y.includes(Ae.name))},{get:()=>Ae.person,set:Y=>{Ae.person=String(Y??"")},notify:()=>{var Y,oe;P===0&&(r.owner=Ae.person,(Y=a.onCommit)==null||Y.call(a,"owner",Ae.person,r)),(oe=a.onCommit)==null||oe.call(a,"roles",ye(),r)}}))})};return Me(),ge.addEventListener("click",He=>{var V,_,Z;const Ae=He.target,P=Ae.closest("[data-role-remove]");if(P){const Y=ye();Y.splice(Number(P.dataset.roleRemove),1),Y.length||Y.push({name:Te[0],person:""}),r.owner=((V=Y[0])==null?void 0:V.person)??"",Me(),(_=a.onChange)==null||_.call(a,"roles",Y,r);return}if(Ae.closest('[data-action="add-role"]')){const Y=ye();Y.push({name:Te.find(oe=>!Y.some(re=>re.name===oe))??Te[0],person:""}),Me(),(Z=a.onChange)==null||Z.call(a,"roles",Y,r)}}),ge}if(E.kind==="meetings"){const ge=document.createElement("section");return ge.className="detail-section",ge.innerHTML=`<p>${H(E.label||"进入选题会")}</p><div class="meeting-table"><div>选题会<span>提报人</span><span>操作</span></div><div class="meeting-rows"></div>${Oe("add-meeting",i.addMeeting,"add")}</div>`,ge}return""}function te(){return T().find(E=>E.id===B)}function le(E,O,U){return{field:E,value:U?U.get():r[E.key]??E.defaultValue??"",item:r,surface:t==="create"?"create":"detail",page:"basic",mode:"default",canEdit:O,readonly:!O,services:e.services,onSelectedOptions:ge=>{(Te=>{Te.choices=[...new Map([...Te.choices||(Te.options||[]).map(xe=>({id:xe,label:xe})),...ge].map(xe=>[xe.id,xe])).values()]})(E)},openDetail:ge=>{var he;return(he=a.onOpenDetail)==null?void 0:he.call(a,ge)}}}function ve(E,O,U,K){var Ne;const ge=()=>typeof U=="function"?U():U,he=O.editable!==!1&&Et((Ne=O.permission)==null?void 0:Ne.edit,l),Te=le(O,he,K),xe=o.resolve(O),ye=["radio","switch","attitudeVote","singleVote","multiVote"].includes(xe.id),Ce=xe.createEditor(Te),Me="input,select,textarea,[role=textbox]",He=[Ce.content,Ce.element].filter(ne=>!!ne).map(ne=>ne.matches(Me)?ne:ne.querySelector(Me)).find(Boolean);He&&(He.id=`${f}-${O.key}`);const Ae=document.createElement("div");Ae.className="fc-error",Ae.setAttribute("role","status");const P=document.createElement("div");P.className="fc-detail-editor",P.dataset.mode="editing",P.dataset.box=qt(xe),P.append(Ce.element),E.classList.add("fc-detail-host"),E.classList.toggle("fc-direct-control",ye),E.dataset.page="basic",E.dataset.mode="default",E.dataset.surface=t==="create"?"create":"detail",E.append(P,Ae);const V=document.createElement("div");V.className="fc-detail-preview",V.dataset.box=qt(xe),V.dataset.editable=String(he),V.dataset.surface=t==="create"?"create":"detail",E.prepend(V);const _=()=>{if(!E.classList.contains("editing")){E.style.minHeight="";return}E.style.minHeight=`${P.offsetHeight}px`},Z=ne=>{P.style.minHeight=`${ne}px`,P.style.maxHeight=`${ne}px`},Y=()=>{P.style.maxHeight="",_()},oe=qt(xe)==="rich",re=()=>{var Se,Be,_e;if(ye){(Se=Ce.focus)==null||Se.call(Ce);return}if(!he||E.classList.contains("editing"))return;const ne=V.offsetHeight;E.classList.add("editing"),E.dataset.mode="editing",oe||Z(ne),_(),(Be=Ce.focus)==null||Be.call(Ce),(_e=a.onFieldStateChange)==null||_e.call(a,O.key,"edit")},pe=()=>{if(ye){V.hidden=!0;return}if(V.replaceChildren(xe.render({...le(O,he,K),readonly:!0,canEdit:!1,mode:"default",value:K?K.get():r[O.key]??""})),V.dataset.box==="select"){const ne=document.createElement("span");ne.className="fc-field-chevron",ne.setAttribute("aria-hidden","true"),V.append(ne)}if(he){V.tabIndex=0,V.setAttribute("role","button"),V.setAttribute("aria-label",`编辑${O.label}`),V.onclick=Se=>{Se.target.closest("a,button,input,textarea,select")||re()},V.onkeydown=Se=>{(Se.key==="Enter"||Se.key===" ")&&(Se.preventDefault(),re())};const ne=document.createElement("button");ne.type="button",ne.className="fc-detail-edit",ne.tabIndex=-1,ne.textContent="编辑",ne.ariaLabel=`编辑${O.label}`,ne.onclick=Se=>{Se.stopPropagation(),re()},V.append(ne)}else V.removeAttribute("role"),V.removeAttribute("tabindex"),V.onclick=null,V.onkeydown=null};pe();const ce=()=>{var Se;const ne=ge()&&!de(Ce.read())?i.required:(Se=Ce.validate)==null?void 0:Se.call(Ce);return Ae.textContent=ne||"",E.classList.toggle("is-error",!!ne),ne},ae=()=>{var Se,Be,_e;if(!he)return!0;const ne=ce();if(ne&&Y(),!ne){const nt=Ce.read(),Le=K?K.get():r[O.key];JSON.stringify(Le)!==JSON.stringify(nt)&&(K?(K.set(nt),(Se=K.notify)==null||Se.call(K,nt)):(r[O.key]=nt,(Be=a.onCommit)==null||Be.call(a,O.key,nt,r))),(_e=a.onChange)==null||_e.call(a,O.key,nt,r),pe()}return!ne},ee=()=>{var ne;E.classList.remove("editing"),E.dataset.mode="default",E.style.minHeight="",P.style.minHeight="",P.style.maxHeight="",(ne=a.onFieldStateChange)==null||ne.call(a,O.key,"display")};E.addEventListener("input",()=>{var ne;Y(),(ne=a.onChange)==null||ne.call(a,O.key,Ce.read(),r)}),E.addEventListener("pointerdown",()=>{E.classList.contains("editing")&&Y()},!0),E.addEventListener("mousedown",ne=>{var Se;xe.id!=="richText"||!E.classList.contains("editing")||ne.target.closest("button,a,input,textarea,select,[contenteditable=true]")||(ne.preventDefault(),!E.contains(document.activeElement)&&!at(document.activeElement,E)&&((Se=Ce.focus)==null||Se.call(Ce)))}),E.addEventListener("change",()=>{Y(),ae()}),E.addEventListener("fc-collapse",()=>{ae(),ee(),pe()}),E.addEventListener("focusout",ne=>{ye||ne.relatedTarget instanceof Node&&(E.contains(ne.relatedTarget)||at(ne.relatedTarget,E))||queueMicrotask(()=>{if(!(k||!E.isConnected)){if(E.contains(document.activeElement)||at(document.activeElement,E)){_();return}ae(),ee(),pe()}})}),(O.defaultState||g)==="edit"&&he&&queueMicrotask(()=>{k||re()});const se={key:O.key,host:E,editor:Ce,editable:he,check:ce,commit:ae,beginEdit:re,write:ne=>{K?K.set(ne):r[O.key]=ne},destroy:()=>{var ne;return(ne=Ce.destroy)==null?void 0:ne.call(Ce)}};return S.push(se),se}const de=E=>Array.isArray(E)?E.length>0:E!=null&&String(E).trim()!=="";function ue(){for(const E of S)E.editable&&E.write(E.editor.read());return{...r}}function me(){let E;for(const O of S){if(!O.editable)continue;const U=O.check();U&&E===void 0&&(E=U,O.beginEdit())}return E}function Ie(E){b=E,y.hidden=!E,y.dataset.open=String(E)}function fe(E){g=E,y.dataset.fieldState=E;for(const O of S)E==="edit"?O.beginEdit():O.host.dispatchEvent(new Event("fc-collapse",{bubbles:!0}))}function Re(E){var U;if(E===B||!T().some(K=>K.id===E))return;B=E;const O=te();R(),O&&((U=a.onTabChange)==null||U.call(a,E,O))}function be(E){ue(),v=E,R()}function Q(E){E.data&&Object.assign(r,E.data),E.fields&&(d=E.fields.map(O=>({...O}))),E.tabs&&(c=E.tabs.map(O=>({...O}))),E.items&&(p=[...E.items]),E.blocks&&(h=[...E.blocks]),E.actions&&(u=[...E.actions]),E.context&&(l={...E.context}),R()}function J(){var E;if(!k){k=!0,(E=a.onDestroy)==null||E.call(a),D.destroy(),y.onsubmit=null;for(const O of S)O.destroy();S=[],y.remove()}}return R(),Ie(b),{element:y,onInteraction:D.onInteraction,read:ue,validate:me,setOpen:Ie,setFieldState:fe,setTab:Re,setSimpleMode:be,activeTab:()=>B,update:Q,destroy:J}}let Jr=0;function zs({viewport:s,wrapper:e,onHorizontalScroll:t,content:n=s.querySelector(".ag-body-container"),labels:i={}}){const o=new AbortController,{signal:a}=o,r=s.id;r||(s.id=`rowvia-table-viewport-${++Jr}`);const l=["horizontal","vertical"].map(C=>{const w=document.createElement("div"),L=document.createElement("div");return w.className=`rowvia-table-scrollbar rowvia-table-scrollbar--${C}`,L.className="rowvia-table-scrollbar__thumb",L.setAttribute("aria-hidden","true"),w.setAttribute("role","scrollbar"),w.setAttribute("aria-label",i[C]??(C==="horizontal"?"横向滚动表格":"纵向滚动表格")),w.setAttribute("aria-orientation",C),w.setAttribute("aria-controls",s.id),w.setAttribute("aria-valuemin","0"),w.tabIndex=0,w.append(L),e.append(w),{axis:C,track:w,thumb:L,length:0,thumbLength:0,range:0,near:!1,focused:!1}});let d=!1,c=!1,p,h;const u=C=>C==="horizontal"?s.scrollLeft:s.scrollTop,f=()=>l.forEach(C=>{C.track.classList.toggle("is-visible",d||C.near||C.focused||(h==null?void 0:h.axis)===C.axis)}),g=()=>{d=!0,clearTimeout(p),f(),p=setTimeout(()=>{d=!1,f()},900)};function v(){if(c)return;const C=s.getBoundingClientRect(),w=e.getBoundingClientRect(),L=s.clientWidth>0&&s.clientHeight>0,N=L&&s.scrollWidth>s.clientWidth,y=L&&s.scrollHeight>s.clientHeight;for(const D of l){const S=D.axis==="horizontal",R=S?s.clientWidth:s.clientHeight,M=S?s.scrollWidth:s.scrollHeight;D.range=Math.max(0,M-R),D.track.hidden=!(S?N:y),D.length=Math.max(0,R-((S?y:N)?10:0)),D.thumbLength=Math.min(D.length,Math.max(24,M?D.length*R/M:0));const F=D.range?Math.max(0,Math.min(D.range,u(D.axis)))/D.range*(D.length-D.thumbLength):0;Object.assign(D.track.style,S?{left:`${C.left-w.left-e.clientLeft}px`,top:`${C.top-w.top-e.clientTop+s.clientHeight-10}px`,width:`${D.length}px`}:{left:`${C.left-w.left-e.clientLeft+s.clientWidth-10}px`,top:`${C.top-w.top-e.clientTop}px`,height:`${D.length}px`}),D.thumb.style[S?"width":"height"]=`${D.thumbLength}px`,D.thumb.style.transform=S?`translateX(${F}px)`:`translateY(${F}px)`,D.track.setAttribute("aria-valuemax",String(D.range)),D.track.setAttribute("aria-valuenow",String(Math.round(u(D.axis))))}}const m=(C,w)=>{w=Math.max(0,Math.min(C.range,w)),C.axis==="horizontal"?t(w):s.scrollTop=w,v(),g()};e.addEventListener("pointermove",C=>{const w=s.getBoundingClientRect();for(const L of l)L.near=L.axis==="horizontal"?C.clientY>=w.bottom-16&&C.clientY<=w.bottom&&C.clientX>=w.left&&C.clientX<=w.right:C.clientX>=w.right-16&&C.clientX<=w.right&&C.clientY>=w.top&&C.clientY<=w.bottom;f()},{signal:a}),e.addEventListener("pointerleave",()=>{l.forEach(C=>{C.near=!1}),f()},{signal:a}),s.addEventListener("scroll",()=>{v(),g()},{signal:a,passive:!0});for(const C of l)C.track.addEventListener("focus",()=>{C.focused=!0,f()},{signal:a}),C.track.addEventListener("blur",()=>{C.focused=!1,f()},{signal:a}),C.track.addEventListener("pointerdown",w=>{var y,D;if(w.button!==0||C.track.hidden||h)return;w.preventDefault(),w.stopPropagation();const L=C.axis==="horizontal",N=L?w.clientX:w.clientY;if(w.target!==C.thumb){const S=C.track.getBoundingClientRect(),R=N-(L?S.left:S.top)-C.thumbLength/2;m(C,R/Math.max(1,C.length-C.thumbLength)*C.range)}h={axis:C.axis,pointerId:w.pointerId,coordinate:N,position:u(C.axis)},(D=(y=C.track).setPointerCapture)==null||D.call(y,w.pointerId),f()},{signal:a}),C.track.addEventListener("lostpointercapture",()=>{(h==null?void 0:h.axis)===C.axis&&(h=void 0,g())},{signal:a}),C.track.addEventListener("keydown",w=>{const L=C.axis==="horizontal",N=L?s.clientWidth:s.clientHeight,y=w.key==="Home"?0:w.key==="End"?C.range:w.key==="PageDown"?u(C.axis)+N:w.key==="PageUp"?u(C.axis)-N:w.key===(L?"ArrowRight":"ArrowDown")?u(C.axis)+40:w.key===(L?"ArrowLeft":"ArrowUp")?u(C.axis)-40:void 0;y!==void 0&&(w.preventDefault(),m(C,y))},{signal:a});window.addEventListener("pointermove",C=>{if(!h||C.pointerId!==h.pointerId)return;const w=l.find(N=>N.axis===h.axis),L=(w.axis==="horizontal"?C.clientX:C.clientY)-h.coordinate;m(w,h.position+L/Math.max(1,w.length-w.thumbLength)*w.range)},{signal:a});const b=()=>{var N;if(!h)return;const{axis:C,pointerId:w}=h;h=void 0;const L=l.find(y=>y.axis===C).track;(N=L.hasPointerCapture)!=null&&N.call(L,w)&&L.releasePointerCapture(w),g()};for(const C of["pointerup","pointercancel"])window.addEventListener(C,w=>{w.pointerId===(h==null?void 0:h.pointerId)&&b()},{signal:a});window.addEventListener("blur",b,{signal:a});const k=new ResizeObserver(v);return k.observe(s),k.observe(e),n&&k.observe(n),v(),{sync:v,destroy(){c||(b(),c=!0,clearTimeout(p),o.abort(),k.disconnect(),l.forEach(C=>C.track.remove()),r||s.removeAttribute("id"))}}}const el=zs;function tl(s,e,t,n,i,o=!1,a={}){const r=a.canGesture??(v=>!v.startsWith("_"));s.classList.add("column-gestures"),o&&s.classList.add("rowvia-table-headers");const l=new AbortController;let d,c,p=!1,h=0,u=0;const f=v=>v instanceof Element?v.closest(".ag-header-cell"):null,g=()=>{d==null||d.abort(),d=void 0,c==null||c.remove(),c=void 0,cancelAnimationFrame(u),u=0,s.classList.remove("rowvia-column-dragging","rowvia-column-resizing")};return s.addEventListener("contextmenu",v=>{var k;const m=f(v.target),b=m==null?void 0:m.dataset.colid;!m||!b||!r(b)||(v.preventDefault(),v.stopImmediatePropagation(),i(((k=a.menuAnchor)==null?void 0:k.call(a,m))??m.querySelector(".work-header-menu")??m,b))},{capture:!0,signal:l.signal}),s.addEventListener("dragstart",v=>{f(v.target)&&v.preventDefault()},{capture:!0,signal:l.signal}),s.addEventListener("click",v=>{p&&(v.preventDefault(),v.stopImmediatePropagation(),p=!1)},{capture:!0,signal:l.signal}),s.addEventListener("mousedown",v=>{if(v.button!==0||!(v.target instanceof Element))return;const m=f(v.target),b=m==null?void 0:m.dataset.colid;if(!m||!b||!r(b)||v.target.closest("button,input"))return;const k=e.getColumn(b);if(!k)return;const C=!!v.target.closest(".ag-header-cell-resize");if(C?!k.resizable:k.suppressMovable)return;v.stopPropagation(),v.preventDefault();const w=m.getBoundingClientRect(),L=v.clientX,N=v.clientY,y=m.offsetWidth&&w.width/m.offsetWidth||1;let D=k.width;const S=a.wrapper??s.querySelector(".grid-wrap")??s,R=a.viewport??s.querySelector(".ag-body-viewport");let M=!1,F="",q=!1;g(),d=new AbortController;const T=d.signal,B=()=>{if(M=!0,n(),s.classList.add(C?"rowvia-column-resizing":"rowvia-column-dragging"),c=document.createElement("div"),c.className="rowvia-column-feedback",c.innerHTML='<div class="rowvia-column-guide"></div>',!C){const I=document.createElement("div");I.className="rowvia-column-preview",I.style.width=`${w.width}px`,c.append(I)}S.append(c)},A=I=>{var ve;if(cancelAnimationFrame(u),u=0,!M&&Math.hypot(I.clientX-L,I.clientY-N)<5)return;M||B(),I.preventDefault();const $=S.getBoundingClientRect(),z=c.querySelector(".rowvia-column-guide");if(c.style.top=`${w.top-$.top}px`,c.style.height=`${$.bottom-w.top}px`,C){D=Math.max(k.minWidth,Math.min(k.maxWidth,k.width+(I.clientX-L)/y)),z.style.left=`${w.left+D*y-$.left}px`;return}if(R){const de=R.scrollLeft,ue=(ve=s.querySelector(".ag-header-viewport"))==null?void 0:ve.getBoundingClientRect();ue&&I.clientX>ue.right-24?R.scrollLeft+=24:ue&&I.clientX<ue.left+24&&I.clientX>ue.left&&(R.scrollLeft-=24),R.scrollLeft!==de&&(u=requestAnimationFrame(()=>A(I)))}const X=[...s.querySelectorAll(".ag-header-cell")].filter(de=>{const ue=de.dataset.colid,me=de.getBoundingClientRect(),Ie=de.parentElement.getBoundingClientRect();return ue&&r(ue)&&me.right>Math.max($.left,Ie.left)&&me.left<Math.min($.right,Ie.right)}).find(de=>{const ue=de.getBoundingClientRect();return I.clientX>=ue.left&&I.clientX<=ue.right});F=(X==null?void 0:X.dataset.colid)??"",z.hidden=!X;const te=c.querySelector(".rowvia-column-preview"),le=X&&X.dataset.colid!==b?X.getBoundingClientRect():null;if(te.hidden=!le,le&&(te.style.left=`${le.left-$.left}px`,te.style.width=`${le.width}px`),X){const de=X.getBoundingClientRect();q=I.clientX>=de.left+de.width/2,z.style.left=`${Math.max(0,Math.min($.width-2,(q?de.right:de.left)-$.left))}px`}};document.addEventListener("mousemove",A,{signal:T}),document.addEventListener("mouseup",()=>{if(M){if(p=!0,clearTimeout(h),h=window.setTimeout(()=>{p=!1},0),C)e.applyColumnState([{colId:b,width:Math.round(D)}]),t();else if(F&&F!==b){const I=e.getColumnState(),$=I.find(X=>X.colId===b),z=I.find(X=>X.colId===F),W=I.filter(X=>X!==$);$.pinned=z.pinned,W.splice(W.indexOf(z)+(q?1:0),0,$),e.applyColumnState(W.map(({colId:X,pinned:te})=>({colId:X,pinned:te})),!0),t()}}g()},{signal:T}),document.addEventListener("keydown",I=>{I.key==="Escape"&&g()},{signal:T}),window.addEventListener("blur",g,{signal:T})},{capture:!0,signal:l.signal}),{destroy(){g(),clearTimeout(h),l.abort(),s.classList.remove("rowvia-table-headers","column-gestures")}}}const nl=50,zt=16,_t=s=>(s.children??[]).filter(e=>e.__passesFilter!==!1);function hn(s){var e;return s.group&&(!((e=s.parent)!=null&&e.group)||_t(s.parent)[0]!==s)?10:0}function _s(s){var t;if(s.group&&s.expanded&&_t(s).length)return 0;let e=0;for(let n=s;(t=n.parent)!=null&&t.group;n=n.parent){const i=_t(n.parent);if(i[i.length-1]!==n)break;i.some(o=>o.group)&&(e+=zt)}return e}function Ws(s,e){return(s.group?40+hn(s):e)+_s(s)}function ti(s,e){if(!s.expanded)return 40;const t=_t(s);return 40+t.reduce((n,i)=>n+(i.group?hn(i)+ti(i,e):e),0)+(t.some(n=>n.group)?zt:0)}function il(s){var n,i;const e=(i=(n=s.parent)==null?void 0:n.children)==null?void 0:i.filter(o=>!o.group&&o.__passesFilter!==!1),t=(e==null?void 0:e.indexOf(s))??-1;return t>=0?t+1:(s.__displayIndex??0)+1}function Us(s,e,t="暂无"){var i;const n=(i=e==null?void 0:e.choices)==null?void 0:i.find(o=>o.id===s.key||o.label===s.key);return{label:(n==null?void 0:n.label)??s.key??t,color:n==null?void 0:n.color}}function sl(s,e,t,n,i,o={}){const a=o.wrapper??s.querySelector(".grid-wrap")??s,r=o.grid??a.querySelector('[role="grid"], #grid')??a,l=o.emptyLabel??"暂无";a.classList.add("rowvia-group-wrapper"),r.classList.add("rowvia-group-grid");const d=document.createElement("div");d.className="rowvia-group-layer",a.append(d);const c=new Map,p=o.expansion??new Map;let h=0,u=!1;function f(){if(h=0,u)return;const b=r.querySelector(".ag-body-viewport");if(!b)return;const k=a.getBoundingClientRect(),C=b.getBoundingClientRect();d.style.top=`${C.top-k.top}px`,d.style.height=`${b.clientHeight}px`,d.style.width=`${a.clientWidth}px`;const w=new Set,L=[];let N=0;e.forEachNode(y=>{var B,A,I;const D=N-b.scrollTop+hn(y);if(N+=Ws(y,n()),!y.group)return;const S=ti(y,n());if(b.clientHeight&&(D+S<0||D>b.clientHeight))return;const R=y.id;w.add(R);let M=c.get(R);M||(M=document.createElement("button"),M.type="button",M.className="rowvia-group-heading",M.innerHTML='<span class="rowvia-group-caret" aria-hidden="true"></span><span class="rowvia-group-label"></span><span class="rowvia-group-count"></span>',c.set(R,M),d.append(M)),L.push(M);const F=((B=o.caption)==null?void 0:B.call(o,y))??Us(y,t(y.level),l),q=M.querySelector(".rowvia-group-label");q.textContent=F.label||l,q.style.backgroundColor=F.color??"";const T=y.allChildrenCount??y.__childCount??0;M.querySelector(".rowvia-group-count").textContent=((A=o.countLabel)==null?void 0:A.call(o,T))??`共 ${T} 个`,M.style.top=`${D}px`,M.style.left=`${y.level*zt}px`,M.dataset.level=String(y.level),M.style.width=`calc(100% - ${y.level*zt}px)`,M.style.setProperty("--group-content-height",`${S}px`),M.tabIndex=D<0?-1:0,M.classList.toggle("has-subgroups",y.expanded&&_t(y).some($=>$.group)),M.setAttribute("aria-expanded",String(y.expanded)),M.setAttribute("aria-label",((I=o.toggleLabel)==null?void 0:I.call(o,y.expanded,F.label||l))??`${y.expanded?"收起":"展开"}分组 ${F.label||l}`),M.classList.toggle("is-collapsed",!y.expanded),M.onclick=()=>{const $=e.getRowNode(R);$!=null&&$.group&&(p.set(R,!$.expanded),$.setExpanded(!$.expanded),e.onGroupExpandedOrCollapsed(),i(),g())}});for(const[y,D]of c)w.has(y)||(D.remove(),c.delete(y));L.forEach((y,D)=>{d.children[D]!==y&&d.insertBefore(y,d.children[D]??null)})}function g(){!u&&!h&&(h=requestAnimationFrame(f))}const v=new MutationObserver(g);v.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style","aria-rowindex"]});const m=new ResizeObserver(g);return m.observe(a),r.addEventListener("scroll",g,!0),d.addEventListener("wheel",b=>{const k=r.querySelector(".ag-body-viewport");!k||b.ctrlKey||(b.preventDefault(),k.dispatchEvent(new WheelEvent("wheel",{deltaX:b.deltaX,deltaY:b.deltaY,deltaMode:b.deltaMode,shiftKey:b.shiftKey,bubbles:!0,cancelable:!0})))},{passive:!1}),g(),{restoreExpansion(){let b=!1;const k=new Set,C=w=>{var N;if(k.has(w.id))return;k.add(w.id);const L=p.get(w.id);w.group&&L!==void 0&&L!==w.expanded&&(w.setExpanded(L),b=!0),(N=w.children)==null||N.forEach(C)};e.forEachNode(C),b&&e.onGroupExpandedOrCollapsed(),g()},destroy(){u=!0,cancelAnimationFrame(h),v.disconnect(),m.disconnect(),r.removeEventListener("scroll",g,!0),d.remove(),s.classList.remove("rowvia-table-grouped","saved-table-grouped"),a.classList.remove("rowvia-group-wrapper"),r.classList.remove("rowvia-group-grid")}}}function ol(s,e,t,n,i,o={}){var L,N;const a=[...s.childNodes],r=document.createElement("div");r.className="fc-inline-editor";const l=document.createElement("div");l.className="fc-inline-error",l.setAttribute("role","status"),r.append(e.element,l),s.replaceChildren(r),s.classList.add("fc-inline-editing");let d=!1,c=!1;const p=r.querySelector(".fc-calendar-panel"),h=r.querySelector(".fc-calendar-clear");p&&h&&h.parentElement!==p&&p.append(h);const u=y=>{var D,S;return y?r.contains(y)?!0:!!((D=e.content)!=null&&D.contains(y))||at(y,r)||!!((S=o.isInside)!=null&&S.call(o,y)):!1};let f;const g=new AbortController,v=()=>{const y=r.querySelector(".fc-calendar-panel, .fc-option-list");if(!y)return;y.style.translate="",r.classList.remove("is-popup-up");const D=y.getBoundingClientRect(),S=s.getBoundingClientRect();D.bottom<=window.innerHeight-8&&D.top>=8||(y.style.translate=`0 ${Math.round(D.top<8?8-D.top:S.top-8-D.bottom)}px`,r.classList.add("is-popup-up"))},m=new MutationObserver(v);m.observe(r,{childList:!0,subtree:!0});let b=0;const k=()=>{b||(b=requestAnimationFrame(()=>{b=0,d||v()}))};window.addEventListener("scroll",k,{capture:!0,signal:g.signal}),window.addEventListener("resize",k,{signal:g.signal}),v();const C=()=>{var y;d||(d=!0,g.abort(),m.disconnect(),cancelAnimationFrame(b),(y=e.destroy)==null||y.call(e),s.classList.remove("fc-inline-editing"),s.contains(r)&&s.replaceChildren(...a),n==null||n())},w=async(y=!0)=>{var M;if(d||c)return;if(!r.isConnected){C();return}const D=(M=e.validate)==null?void 0:M.call(e);if(D){l.textContent=D;return}const S=e.read(),R=JSON.stringify(S);if(f===R){y&&C();return}c=!0,r.setAttribute("aria-busy","true");try{await t(S)?(f=R,y&&(!r.isConnected||JSON.stringify(e.read())===R)&&C()):d||(l.textContent=o.saveErrorMessage??"保存失败,请重试")}catch{d||(l.textContent=o.saveErrorMessage??"保存失败,请重试")}finally{c=!1,r.removeAttribute("aria-busy")}};return r.addEventListener("keydown",y=>{y.key!=="Escape"&&y.key!=="Enter"||(y.preventDefault(),y.stopPropagation(),y.key==="Escape"?C():w())},{signal:g.signal}),r.addEventListener("click",y=>y.stopPropagation(),{signal:g.signal}),r.addEventListener("input",()=>i==null?void 0:i(),{signal:g.signal}),o.commitOnChange&&r.addEventListener("change",()=>void w(!1),{signal:g.signal}),r.addEventListener("fc-collapse",y=>{var D;((D=y.detail)==null?void 0:D.reason)==="escape"?C():w()},{signal:g.signal}),r.addEventListener("focusout",y=>{u(y.relatedTarget)||w()},{signal:g.signal}),window.addEventListener("pointerdown",y=>{u(y.target)||w()},{capture:!0,signal:g.signal}),(L=e.focus)==null||L.call(e),(N=e.element.querySelector("input"))==null||N.select(),{cancel:C,commit:w}}const al={undo:"撤销 (⌘+Z)",redo:"重做 (⌘+Shift+Z)",expand:"放大编辑",collapse:"退出全屏",done:"完成",placeholder:"请输入",required:"此项必填",saveError:"保存失败,请重试"},rl=240,ll='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5.5 6.5H9a3.25 3.25 0 0 1 0 6.5H6"/><path d="M7.5 4 5 6.5 7.5 9"/></svg>',dl='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10.5 6.5H7a3.25 3.25 0 0 0 0 6.5h3"/><path d="M8.5 4 11 6.5 8.5 9"/></svg>',cl='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.5 3h3.5v3.5M6.5 13H3V9.5M12.9 3.1 9 7M3.1 12.9 7 9"/></svg>',ul='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.5 6.5h3.5V3M6.5 9.5H3V13M12.9 3.1 9.5 6.5M3.1 12.9 6.5 9.5"/></svg>',hl='<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m3.5 8.5 3 3 6-7"/></svg>',pl=s=>s==null?"":String(s);function fl(s,e){const t={...al,...e.messages},n=pl(e.value),i=document.createElement("div");i.className="rowvia-cell-text-editor",i.setAttribute("role","dialog"),i.setAttribute("aria-label",e.field.label),i.innerHTML=`
|
|
112
|
+
<div class="rowvia-cell-text-toolbar">
|
|
113
|
+
<button type="button" class="rowvia-cell-text-action" data-action="undo" aria-label="撤销 (⌘+Z)" title="撤销 (⌘+Z)" disabled>${ll}</button>
|
|
114
|
+
<button type="button" class="rowvia-cell-text-action" data-action="redo" aria-label="重做 (⌘+Shift+Z)" title="重做 (⌘+Shift+Z)" disabled>${dl}</button>
|
|
115
|
+
<span class="rowvia-cell-text-gap"></span>
|
|
116
|
+
<button type="button" class="rowvia-cell-text-action" data-action="expand" aria-label="放大编辑" title="放大编辑">${cl}</button>
|
|
117
|
+
<button type="button" class="rowvia-cell-text-action" data-action="collapse" aria-label="退出全屏" title="退出全屏" hidden>${ul}</button>
|
|
118
|
+
<button type="button" class="rowvia-cell-text-action" data-action="done" aria-label="完成" title="完成" hidden>${hl}</button>
|
|
119
|
+
</div>
|
|
120
|
+
<textarea class="rowvia-cell-text-body" rows="1" spellcheck="false"></textarea>
|
|
121
|
+
<div class="rowvia-cell-text-error" role="status"></div>`,document.body.append(i);const o=i.querySelector("textarea"),a=i.querySelector(".rowvia-cell-text-error"),r=S=>i.querySelector(`[data-action="${S}"]`);o.value=n,o.setAttribute("aria-label",e.field.label),o.placeholder=e.field.placeholder??t.placeholder;for(const S of["undo","redo","expand","collapse","done"])r(S).setAttribute("aria-label",t[S]),r(S).title=t[S];e.field.maxLength!==void 0&&(o.maxLength=e.field.maxLength);const l=[n];let d=0,c=0;const p=()=>{r("undo").disabled=d===0,r("redo").disabled=d===l.length-1},h=S=>{o.value=S,o.setSelectionRange(S.length,S.length)},u=()=>{const S=o.value;if(S===l[d])return;const R=Date.now();R-c<1e3&&d===l.length-1?l[d]=S:(l.splice(d+1),l.push(S),d=l.length-1),c=R,p()},f=S=>{var M;const R=d+S;R<0||R>=l.length||(d=R,h(l[d]),p(),(M=e.onInput)==null||M.call(e))};let g=!1,v=!1,m=n;const b=new AbortController;let k;const C=()=>k==null?void 0:k.update(),w=S=>{i.classList.toggle("is-expanded",S),r("expand").hidden=S,r("collapse").hidden=!S,r("done").hidden=!S,S?(i.style.removeProperty("width"),i.style.removeProperty("left"),i.style.removeProperty("top")):C(),o.focus(),o.setSelectionRange(o.value.length,o.value.length)},L=S=>{a.textContent=S},N=()=>{var S;g||(g=!0,b.abort(),k==null||k.destroy(),i.remove(),(S=e.onClose)==null||S.call(e))},y=()=>{g||(o.value=n,N())},D=async()=>{if(g||v)return;const S=o.value;if(e.field.required&&!S.trim()){L(t.required);return}if(S===m){N();return}v=!0,L(""),i.setAttribute("aria-busy","true");try{await e.save(S)?(m=S,o.value===S&&N()):g||L(t.saveError)}catch{g||L(t.saveError)}finally{v=!1,i.removeAttribute("aria-busy")}};return i.addEventListener("pointerdown",S=>S.stopPropagation(),{signal:b.signal}),i.addEventListener("click",S=>S.stopPropagation(),{signal:b.signal}),i.addEventListener("dblclick",S=>S.stopPropagation(),{signal:b.signal}),i.addEventListener("click",S=>{const R=S.target.closest("[data-action]");if(R)switch(R.dataset.action){case"undo":f(-1);break;case"redo":f(1);break;case"expand":w(!0);break;case"collapse":w(!1);break;case"done":D();break}},{signal:b.signal}),o.addEventListener("input",()=>{var S;L(""),u(),(S=e.onInput)==null||S.call(e)},{signal:b.signal}),o.addEventListener("paste",()=>{c=0},{signal:b.signal}),o.addEventListener("keydown",S=>{if(S.key==="Enter"&&(c=0),S.key==="Escape"){S.preventDefault(),S.stopPropagation(),i.classList.contains("is-expanded")?w(!1):y();return}S.key==="Enter"&&(S.metaKey||S.ctrlKey)&&(S.preventDefault(),D())},{signal:b.signal}),window.addEventListener("pointerdown",S=>{const R=S.target;(!(R instanceof Node)||!i.contains(R))&&D()},{capture:!0,signal:b.signal}),k=sn(i,s,"overlay",N,{width:()=>Math.max(rl,s.getBoundingClientRect().width),paused:()=>i.classList.contains("is-expanded")}),o.focus(),o.setSelectionRange(n.length,n.length),{cancel:y,commit:D}}const gl=".fc-value, .item-name, .cell-text, .fc-tag-label, .fc-link-value a, .rendered-cell > .tag";function ml(s,e={}){const t=e.textSelector??gl,n=e.cellSelector??".ag-cell",i=e.richTextSelector??'[data-field-control="richText"]';s.classList.add("rowvia-cell-content");const o=new AbortController,a=new WeakMap;let r,l;const d=()=>{r==null||r.remove(),r=void 0,l=void 0},c=u=>{var v;const f=[...u.querySelectorAll(t)];u.matches(t)&&f.unshift(u);for(const m of f){if(!m.closest(n)||m.closest('.fc-inline-editor, [contenteditable="true"]')||!m.children.length&&((v=a.get(m))==null?void 0:v.preview)===m.textContent)continue;const b=m.matches(".fc-value")&&m.closest(i)?yt(m.innerHTML):void 0,k=m.cloneNode(!0);b!==void 0&&(k.innerHTML=b),k.querySelectorAll("br").forEach(L=>L.replaceWith(`
|
|
122
|
+
`)),k.querySelectorAll("p, div, li, blockquote, h1, h2, h3, h4, pre").forEach(L=>L.append(`
|
|
123
|
+
`));const C=(k.textContent||"").replace(/\r\n?/g,`
|
|
124
|
+
`).trim(),w=C.includes(`
|
|
125
|
+
`)?C.split(`
|
|
126
|
+
`)[0]+"…":C;a.set(m,{full:C,preview:w,html:b}),(m.textContent!==w||m.children.length&&m.matches(".fc-value"))&&(m.textContent=w),m.classList.add("rowvia-cell-text")}const g=u.closest(n);for(const m of[g,...u.querySelectorAll("[title]")])m instanceof HTMLElement&&m.closest(n)&&!m.matches("button")&&m.removeAttribute("title")};c(s);const p=new MutationObserver(u=>{l&&(!l.isConnected||u.some(f=>l.contains(f.target)))&&d();for(const f of u){const g=f.target instanceof Element?f.target:f.target.parentElement;g&&c(g)}});p.observe(s,{childList:!0,subtree:!0,characterData:!0});const h=u=>{if(!(u.target instanceof Element))return;const f=u.target.closest(".rowvia-cell-text");if(f===l||(d(),!f||!s.contains(f)||f.closest(".fc-empty")))return;const{full:g,html:v}=a.get(f)??{};if(!g||!g.includes(`
|
|
127
|
+
`)&&f.scrollWidth<=f.clientWidth+1)return;l=f,r=document.createElement("div"),r.className="rowvia-cell-tooltip",r.setAttribute("role","tooltip"),v!==void 0?(r.classList.add("rowvia-cell-tooltip--rich"),r.innerHTML=v):r.textContent=g,document.body.append(r);const m=f.getBoundingClientRect(),b=r.getBoundingClientRect();r.style.left=`${Math.max(8,Math.min(m.left+m.width/2-b.width/2,window.innerWidth-b.width-8))}px`,r.style.top=`${Math.max(8,m.top>=b.height+8?m.top-b.height-8:Math.min(m.bottom+8,window.innerHeight-b.height-8))}px`};return s.addEventListener("mouseover",h,{signal:o.signal}),s.addEventListener("mouseout",u=>{l&&!l.contains(u.relatedTarget)&&d()},{signal:o.signal}),s.addEventListener("focusin",h,{signal:o.signal}),s.addEventListener("focusout",d,{signal:o.signal}),document.addEventListener("pointerdown",d,{signal:o.signal}),document.addEventListener("keydown",u=>{u.key==="Escape"&&d()},{signal:o.signal}),window.addEventListener("scroll",d,{capture:!0,signal:o.signal}),window.addEventListener("resize",d,{signal:o.signal}),{destroy(){d(),o.abort(),p.disconnect(),s.classList.remove("rowvia-cell-content")}}}function vl(s){const e=G("div",s.className??"tag");return s.marker?e.append(s.marker):s.markerClassName&&e.append(G("span",s.markerClassName)),e.append(G("span","",s.label)),e}function wl(s){const e=G("div",s.className);if(s.leading)e.append(s.leading);else if(s.image){const n=G("img");n.src=s.image.src,n.alt=s.image.alt,e.append(n)}const t=s.inline?e:G("div",s.contentClassName);return t.append(G(s.titleTag??"span",s.titleClassName,s.title)),s.description!==void 0&&t.append(G(s.descriptionTag??"span",s.descriptionClassName,s.description)),s.inline||e.append(t),e}function bl(s,e){Zt[s]=e}function yl(s,e){pt[s]=e}j.ActionField=Hs,j.AttachmentField=$s,j.BaseField=Ke,j.BaseFieldControl=mt,j.CELL_EDITORS=pt,j.CELL_RENDERERS=Zt,j.COMPLETION_LABEL=Ai,j.CascadeField=Yn,j.ChoiceField=Nt,j.CompositeField=Os,j.ComputedField=It,j.CustomField=Jn,j.DEFAULT_LOCALE_TEXT=hi,j.DateField=Zn,j.DateRangeField=Is,j.DateTimeField=Xn,j.EmailField=xs,j.FORMULA_FUNCTIONS=jt,j.GANTT_UNITS=Mi,j.GanttChart=Ti,j.Grid=Mt,j.LinkField=Un,j.LocationField=Ds,j.MultiCascadeField=Ns,j.MultiChoiceField=Ms,j.MultiPersonField=Rs,j.MultiRelationField=Ts,j.MultiVoteField=Ps,j.NumberField=Cs,j.PersonField=jn,j.PhoneField=ks,j.RadioField=Ls,j.RelationField=Kn,j.RichTextField=Ss,j.STATUS_META=Tt,j.SignalField=Qn,j.SingleVoteField=Fs,j.SwitchField=As,j.TABLE_GROUP_HEIGHT=nl,j.TABLE_GROUP_INDENT=zt,j.TextField=ct,j.TextareaField=Es,j.UNIT_LABEL=Jt,j.VoteField=un,j.adaptOperationRecords=gr,j.allGatesMet=$i,j.anchorPopup=sn,j.computeStickyGroupRows=Si,j.createControlRegistry=Gs,j.createDetailComments=fr,j.createDetailDialog=xi,j.createDetailHistory=br,j.createFieldRegistry=Bs,j.createFlowCanvas=Hi,j.createFlowContextBar=Vi,j.createGantt=Ba,j.createGrid=Ei,j.createMediaCell=wl,j.createNodeCard=Oi,j.createNodeFlow=Za,j.createNodeTimeline=Gi,j.createPersonnelSchedule=nr,j.createScrollbars=zs,j.createSparklineSvg=vn,j.createTagCell=vl,j.createWorkItemColumnPanels=Tr,j.createWorkItemColumns=Rr,j.createWorkItemDetailHeader=$r,j.createWorkItemFieldPicker=Er,j.createWorkItemFilter=xr,j.createWorkItemFormSurface=Qr,j.createWorkItemHeaderDecorator=Nr,j.createWorkItemLayers=Dr,j.createWorkItemRulePanels=Ir,j.createWorkItemSelectionBar=Mr,j.createWorkItemTable=Lr,j.createWorkItemTabs=yr,j.createWorkItemToolPanel=Gn,j.createWorkItemToolbar=Cr,j.createWorkflowDetail=cr,j.createWorkflowLegend=Ki,j.default=Mt,j.emptyView=ln,j.escapeHtml=H,j.evalFormCondition=Ye,j.evalFormScope=Et,j.evaluateFormula=Dt,j.evaluateGates=En,j.fixedOrigin=Ui,j.formatNumberCommas=st,j.groupBoxHeight=ti,j.groupCaption=Us,j.groupLeadingGap=hn,j.groupNodes=Fi,j.groupRowNumber=il,j.groupTrailingSpace=_s,j.historyModules=Fn,j.isFormula=gn,j.locateWorkflowNodes=or,j.matchNodes=xn,j.matches=ls,j.mountCellContent=ml,j.mountInlineCellEditor=ol,j.mountMultiTextCellEditor=fl,j.mountNodeFieldPopups=Rn,j.mountTableGroups=sl,j.mountTableHeaders=tl,j.mountTableScrollbars=el,j.normalizeHistory=as,j.parse=si,j.queryHistory=rs,j.registerEditor=yl,j.registerFormulaFunction=Qs,j.registerRenderer=bl,j.removeToolCondition=dn,j.renderContent=zn,j.renderWorkflowRequiredError=kr,j.sanitizeRichText=yt,j.showTip=Bi,j.summarize=Di,j.tableGroupRowHeight=Ws,j.tokenize=ni,j.videoFlow=Ja,j.workItemToolIcons=Vn,j.workItemToolSummaries=Sr,Object.defineProperties(j,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|