@vmscloud/moz-ui-grid-vue 0.2.19 → 0.2.21
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.
|
@@ -74,16 +74,17 @@ declare const __VLS_component: import('vue').DefineComponent<MozGridVueProps, {
|
|
|
74
74
|
"onColumn:visibility"?: ((...args: any[]) => any) | undefined;
|
|
75
75
|
onReady?: ((...args: any[]) => any) | undefined;
|
|
76
76
|
}>, {
|
|
77
|
-
height: string | number;
|
|
78
|
-
dynamicRowHeights: boolean;
|
|
79
|
-
showHeader: boolean;
|
|
80
|
-
resizableColumns: boolean;
|
|
81
|
-
reorderableColumns: boolean;
|
|
82
77
|
cellSelection: import('@vmscloud/moz-ui-grid-core').CellSelectionConfig;
|
|
83
78
|
editable: boolean;
|
|
84
|
-
preventKeyEdit: boolean;
|
|
85
79
|
tooltipMode: "none" | "overflow" | "always";
|
|
86
80
|
alternatingRows: boolean;
|
|
81
|
+
showHeader: boolean;
|
|
82
|
+
resizableColumns: boolean;
|
|
83
|
+
reorderableColumns: boolean;
|
|
84
|
+
reorderableRows: boolean;
|
|
85
|
+
height: string | number;
|
|
86
|
+
dynamicRowHeights: boolean;
|
|
87
|
+
preventKeyEdit: boolean;
|
|
87
88
|
contextMenuConfig: import('..').IContextMenuConfig;
|
|
88
89
|
useToolBox: boolean;
|
|
89
90
|
useToolBoxSetting: boolean;
|
|
@@ -91,7 +92,6 @@ declare const __VLS_component: import('vue').DefineComponent<MozGridVueProps, {
|
|
|
91
92
|
useSort: boolean;
|
|
92
93
|
useCustomCell: boolean;
|
|
93
94
|
useContextMenu: boolean;
|
|
94
|
-
reorderableRows: boolean;
|
|
95
95
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
96
96
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
97
97
|
export default _default;
|
|
@@ -33,16 +33,16 @@ declare const __VLS_component: import('vue').DefineComponent<PivotGridProps, {
|
|
|
33
33
|
"onUpdate:columnFields"?: ((...args: any[]) => any) | undefined;
|
|
34
34
|
"onUpdate:valueFields"?: ((...args: any[]) => any) | undefined;
|
|
35
35
|
}>, {
|
|
36
|
-
height: string | number;
|
|
37
|
-
showHeader: boolean;
|
|
38
|
-
cellSelection: import('@vmscloud/moz-ui-grid-core').CellSelectionConfig;
|
|
39
|
-
tooltipMode: "none" | "overflow" | "always";
|
|
40
|
-
alternatingRows: boolean;
|
|
41
36
|
showRowSubTotals: boolean;
|
|
42
37
|
showRowGrandTotals: boolean;
|
|
43
38
|
showColumnSubTotals: boolean;
|
|
44
39
|
showColumnGrandTotals: boolean;
|
|
45
40
|
trackSourceRows: boolean;
|
|
41
|
+
cellSelection: import('@vmscloud/moz-ui-grid-core').CellSelectionConfig;
|
|
42
|
+
tooltipMode: "none" | "overflow" | "always";
|
|
43
|
+
alternatingRows: boolean;
|
|
44
|
+
showHeader: boolean;
|
|
45
|
+
height: string | number;
|
|
46
46
|
useMultipleChart: boolean;
|
|
47
47
|
chartIncludeGrandTotal: boolean;
|
|
48
48
|
useToolBox: boolean;
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var e=Object.defineProperty,t=(t,o,n)=>((t,o,n)=>o in t?e(t,o,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[o]=n)(t,"symbol"!=typeof o?o+"":o,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("vue"),n=require("@vmscloud/moz-ui-grid-wrapper"),l=require("./chunks/notification.contract-oFkBaE2U.cjs"),i=require("lit-html"),r=require("lit-html/directives/class-map.js"),s=require("./chunks/index-BLDAzbGv.cjs"),a=require("dayjs"),u=require("@vmscloud/moz-ui-grid-core");class d{constructor({id:e,type:n,exportDef:l,importDef:i,strict:r,dependencies:s,manualLifeCycle:a}){t(this,"uniqueId"),t(this,"_id"),t(this,"_type"),t(this,"_default"),t(this,"_importDef"),t(this,"_exportDef"),t(this,"_pending"),t(this,"_disposed",!1),t(this,"_sequence",0),t(this,"_active"),t(this,"_queued"),t(this,"_lastApplyResult"),t(this,"_disposeCallback",()=>{}),t(this,"captureApplied"),t(this,"disposeInstance",()=>{this._disposed||(this._disposed=!0,this._active&&this.finish(this._active,"disposed"),this._queued&&this.finish(this._queued,"disposed"),this._queued=void 0,this._disposeCallback())}),t(this,"setApplied",()=>{}),t(this,"strict"),t(this,"dependencies"),this.uniqueId="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),this._id=e,this._type=n,this._importDef=i,this._exportDef=l,this._default=l(),this._pending=!1,this.strict=r??!1,this.dependencies=s??null,a||o.onBeforeUnmount(()=>{this.dispose()})}get disposed(){return this._disposed}get applying(){return!!this._active||!!this._queued}get lastApplyResult(){return this._lastApplyResult}get requestId(){return this._sequence}get dispose(){return this.disposeInstance}set dispose(e){this._disposeCallback=e}get pending(){return this._pending}set pending(e){this._pending=e,this.drain()}get id(){return this._id}get type(){return this._type}get default(){return this._default}set default(e){this._default=e}get current(){return this._exportDef()}set current(e){this.apply(e)}apply(e){const t=++this._sequence;return this._active&&this.finish(this._active,"superseded"),this._queued&&this.finish(this._queued,"superseded"),this._queued=void 0,new Promise(o=>{var n;const l={requestId:t,value:e,resolve:o,settled:!1,applied:this.setApplied};if(this._disposed)this.finish(l,"disposed");else{try{l.applied=(null==(n=this.captureApplied)?void 0:n.call(this))??this.setApplied}catch(i){return void this.finish(l,"failed",i)}this._lastApplyResult=void 0,this._queued=l,this.drain()}})}finish(e,t,o){if(e.settled)return;e.settled=!0;const n={status:t,requestId:e.requestId};void 0!==o&&(n.error=o),e.requestId===this._sequence&&(this._lastApplyResult=n),e.resolve(n)}drain(){if(this._disposed||this._pending||this._active||!this._queued)return;const e=this._queued;this._queued=void 0,this._active=e;const t=(t,o,n=!1)=>{try{e.settled||(n?this.finish(e,"failed",o):t&&"object"==typeof t&&"status"in t&&"applied"!==t.status?this.finish(e,t.status,t.error):(e.applied(!0),this.finish(e,"applied")))}catch(l){this.finish(e,"failed",l)}finally{this._active=void 0,this.drain()}};try{const o=this._importDef(e.value);o&&"function"==typeof o.then?Promise.resolve(o).then(e=>t(e),e=>t(void 0,e,!0)):t(o)}catch(o){t(void 0,o,!0)}}setDefaultToCurrent(){this._default=this._exportDef()}}const c=()=>o.inject("user-layout-module",{register:()=>{},currentPreset:o.ref(null)});function p(e){if(!1===e.usePreset)return;const{register:t}=c(),l=(e,t)=>{if(void 0!==t)return null==e?void 0:e(t)},i=new d({id:e.name.value,type:e.type,importDef:async t=>{const o=i.requestId,r=e.gridInstance.value;if(await Promise.resolve(),i.disposed)return{status:"disposed",requestId:o};if(o!==i.requestId||e.gridInstance.value!==r)return{status:"superseded",requestId:o};if(!r)return{status:"failed",requestId:o,error:new Error("Grid preset: grid-not-ready")};try{return await(async(t,o,r)=>{const s=()=>i.disposed?{status:"disposed",requestId:r}:e.gridInstance.value!==o?{status:"superseded",requestId:r}:void 0,a=i.default??null,u=n.migrateGridPreset(t??a,{grid:o,getSourceFields:e.getSourceFields,baseline:a});u.diagnostics.length&&e.onImportDiagnostics&&e.onImportDiagnostics(u.diagnostics);const d=s();if(d)return d;u.config&&await n.applyPresetCoreConfig(o,u.config,u.missing);const c=[[e.setColumnFormatState,u.columnFormatConfig],[e.setCustomCellState,u.customCellConfig],[e.setViewOptionsState,u.viewOptionsConfig]];for(const[e,n]of c){const t=s();if(t)return t;await l(e,n)}return s()||(await o.waitForSettled(),s()??{status:"applied",requestId:r})})(t,r,o)}catch(s){return{status:"failed",requestId:o,error:s}}},exportDef:()=>{var t,o;const l=e.gridInstance.value;if(!l)return null;const i={...n.stampPresetVersion(l.getConfig()),customCellConfig:(null==(t=e.getCustomCellState)?void 0:t.call(e))??null,columnFormatConfig:(null==(o=e.getColumnFormatState)?void 0:o.call(e))??null};return e.getViewOptionsState&&(i.viewOptionsConfig=e.getViewOptionsState()??null),i}});let r=!1;o.watch(e.gridInstance,(n,l,s)=>{if(!n||r||i.disposed)return;if(!e.name.value)return;let a=!0,u=!1;const d=()=>a&&!i.disposed&&e.gridInstance.value===n;let c=!1;const p=()=>{c&&!r&&!u&&d()&&(e.readyGrid&&e.readyGrid.value!==n||(u=!0,i.setDefaultToCurrent(),o.nextTick(async()=>{if(d()&&!r){r=!0,m(),null==f||f();try{await t(i)}catch(e){}}})))},m=n.on("data:loaded",()=>{c=!0,p()}),f=e.readyGrid?o.watch(e.readyGrid,p,{flush:"sync"}):void 0;s(()=>{a=!1,m(),null==f||f()})})}let
|
|
1
|
+
"use strict";var e=Object.defineProperty,t=(t,o,n)=>((t,o,n)=>o in t?e(t,o,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[o]=n)(t,"symbol"!=typeof o?o+"":o,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("vue"),n=require("@vmscloud/moz-ui-grid-wrapper"),l=require("./chunks/notification.contract-oFkBaE2U.cjs"),i=require("lit-html"),r=require("lit-html/directives/class-map.js"),s=require("./chunks/index-BLDAzbGv.cjs"),a=require("dayjs"),u=require("@vmscloud/moz-ui-grid-core");class d{constructor({id:e,type:n,exportDef:l,importDef:i,strict:r,dependencies:s,manualLifeCycle:a}){t(this,"uniqueId"),t(this,"_id"),t(this,"_type"),t(this,"_default"),t(this,"_importDef"),t(this,"_exportDef"),t(this,"_pending"),t(this,"_disposed",!1),t(this,"_sequence",0),t(this,"_active"),t(this,"_queued"),t(this,"_lastApplyResult"),t(this,"_disposeCallback",()=>{}),t(this,"captureApplied"),t(this,"disposeInstance",()=>{this._disposed||(this._disposed=!0,this._active&&this.finish(this._active,"disposed"),this._queued&&this.finish(this._queued,"disposed"),this._queued=void 0,this._disposeCallback())}),t(this,"setApplied",()=>{}),t(this,"strict"),t(this,"dependencies"),this.uniqueId="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),this._id=e,this._type=n,this._importDef=i,this._exportDef=l,this._default=l(),this._pending=!1,this.strict=r??!1,this.dependencies=s??null,a||o.onBeforeUnmount(()=>{this.dispose()})}get disposed(){return this._disposed}get applying(){return!!this._active||!!this._queued}get lastApplyResult(){return this._lastApplyResult}get requestId(){return this._sequence}get dispose(){return this.disposeInstance}set dispose(e){this._disposeCallback=e}get pending(){return this._pending}set pending(e){this._pending=e,this.drain()}get id(){return this._id}get type(){return this._type}get default(){return this._default}set default(e){this._default=e}get current(){return this._exportDef()}set current(e){this.apply(e)}apply(e){const t=++this._sequence;return this._active&&this.finish(this._active,"superseded"),this._queued&&this.finish(this._queued,"superseded"),this._queued=void 0,new Promise(o=>{var n;const l={requestId:t,value:e,resolve:o,settled:!1,applied:this.setApplied};if(this._disposed)this.finish(l,"disposed");else{try{l.applied=(null==(n=this.captureApplied)?void 0:n.call(this))??this.setApplied}catch(i){return void this.finish(l,"failed",i)}this._lastApplyResult=void 0,this._queued=l,this.drain()}})}finish(e,t,o){if(e.settled)return;e.settled=!0;const n={status:t,requestId:e.requestId};void 0!==o&&(n.error=o),e.requestId===this._sequence&&(this._lastApplyResult=n),e.resolve(n)}drain(){if(this._disposed||this._pending||this._active||!this._queued)return;const e=this._queued;this._queued=void 0,this._active=e;const t=(t,o,n=!1)=>{try{e.settled||(n?this.finish(e,"failed",o):t&&"object"==typeof t&&"status"in t&&"applied"!==t.status?this.finish(e,t.status,t.error):(e.applied(!0),this.finish(e,"applied")))}catch(l){this.finish(e,"failed",l)}finally{this._active=void 0,this.drain()}};try{const o=this._importDef(e.value);o&&"function"==typeof o.then?Promise.resolve(o).then(e=>t(e),e=>t(void 0,e,!0)):t(o)}catch(o){t(void 0,o,!0)}}setDefaultToCurrent(){this._default=this._exportDef()}}const c=()=>o.inject("user-layout-module",{register:()=>{},currentPreset:o.ref(null)});function p(e){if(!e.current||!("nullsPosition"in e.current))return e;const{nullsPosition:t,...o}=e.current;return{...e,current:o}}function m(e){if(!1===e.usePreset)return;const{register:t}=c(),l=(e,t)=>{if(void 0!==t)return null==e?void 0:e(t)},i=new d({id:e.name.value,type:e.type,importDef:async t=>{const o=i.requestId,r=e.gridInstance.value;if(await Promise.resolve(),i.disposed)return{status:"disposed",requestId:o};if(o!==i.requestId||e.gridInstance.value!==r)return{status:"superseded",requestId:o};if(!r)return{status:"failed",requestId:o,error:new Error("Grid preset: grid-not-ready")};try{return await(async(t,o,r)=>{const s=()=>i.disposed?{status:"disposed",requestId:r}:e.gridInstance.value!==o?{status:"superseded",requestId:r}:void 0,a=i.default??null,u=n.migrateGridPreset(t??a,{grid:o,getSourceFields:e.getSourceFields,baseline:a});u.diagnostics.length&&e.onImportDiagnostics&&e.onImportDiagnostics(u.diagnostics);const d=s();if(d)return d;u.config&&await n.applyPresetCoreConfig(o,function(e,t){return e.current?{...e,current:{...e.current,nullsPosition:t.getNullsPosition()}}:e}(u.config,o),u.missing);const c=[[e.setColumnFormatState,u.columnFormatConfig],[e.setCustomCellState,u.customCellConfig],[e.setViewOptionsState,u.viewOptionsConfig]];for(const[e,n]of c){const t=s();if(t)return t;await l(e,n)}return s()||(await o.waitForSettled(),s()??{status:"applied",requestId:r})})(t,r,o)}catch(s){return{status:"failed",requestId:o,error:s}}},exportDef:()=>{var t,o;const l=e.gridInstance.value;if(!l)return null;const i={...n.stampPresetVersion(p(l.getConfig())),customCellConfig:(null==(t=e.getCustomCellState)?void 0:t.call(e))??null,columnFormatConfig:(null==(o=e.getColumnFormatState)?void 0:o.call(e))??null};return e.getViewOptionsState&&(i.viewOptionsConfig=e.getViewOptionsState()??null),i}});let r=!1;o.watch(e.gridInstance,(n,l,s)=>{if(!n||r||i.disposed)return;if(!e.name.value)return;let a=!0,u=!1;const d=()=>a&&!i.disposed&&e.gridInstance.value===n;let c=!1;const p=()=>{c&&!r&&!u&&d()&&(e.readyGrid&&e.readyGrid.value!==n||(u=!0,i.setDefaultToCurrent(),o.nextTick(async()=>{if(d()&&!r){r=!0,m(),null==f||f();try{await t(i)}catch(e){}}})))},m=n.on("data:loaded",()=>{c=!0,p()}),f=e.readyGrid?o.watch(e.readyGrid,p,{flush:"sync"}):void 0;s(()=>{a=!1,m(),null==f||f()})})}let f=null;function g(){if(f)return f;const e=o.ref(!1),t=o.shallowRef(null),n=o.ref({}),l={showPopup:e,activeGrid:t,defaultImportOptions:n,show:(o,l={})=>{t.value=o,n.value=l,e.value=!0},hide:()=>{e.value=!1}};return f=l,l}function v(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function h(e){const t=null==e?"":String(e);return t.includes(",")||t.includes('"')||t.includes("\n")?`"${t.replace(/"/g,'""')}"`:t}const y={mode:"replace",conflictStrategy:"update",autoCommit:!1};function x(){const e=new Date,t=e=>String(e).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())} ${t(e.getHours())}:${t(e.getMinutes())}:${t(e.getSeconds())}`}class _{constructor(e){t(this,"popup",null),t(this,"grid",null),t(this,"options",{...y}),t(this,"file",null),t(this,"invalid",!1),t(this,"dropActive",!1),t(this,"replacing",!1),this.deps=e}get isOpen(){var e;return(null==(e=this.popup)?void 0:e.isOpen)??!1}get state(){return{file:this.file,invalid:this.invalid,options:{...this.options}}}open(e,t={}){if(this.popup){this.replacing=!0;try{this.popup.close()}finally{this.replacing=!1}}this.grid=e,this.resetState(),this.options={...y},t.mode&&(this.options.mode=t.mode),t.conflictStrategy&&(this.options.conflictStrategy=t.conflictStrategy),"boolean"==typeof t.autoCommit&&(this.options.autoCommit=t.autoCommit);const o=s.getGridVueLocale(),l=new n.Popup({title:o.clientExcelImport,width:540,height:440,closeOnOutsideClick:!0,contentsPadding:"16px",className:"mzc-client-excel-popup",draggable:!0,resizeable:!1,onClose:()=>this.handleClosed(l)});this.popup=l,l.open(()=>this.body(),()=>this.footer())}close(){var e;null==(e=this.popup)||e.close()}destroy(){this.close()}handleClosed(e){this.popup===e&&(this.popup=null),this.resetState(),this.replacing||this.deps.onHidden()}resetState(){this.file=null,this.invalid=!1,this.dropActive=!1}update(){var e;null==(e=this.popup)||e.update()}setFile(e){e&&e.name.toLowerCase().endsWith(".xlsx")?(this.invalid=!1,this.file=e):(this.invalid=!0,this.file=null),this.update()}body(){const e=s.getGridVueLocale(),{mode:t,conflictStrategy:o}=this.options,l=this.file,a=[{value:"replace",label:e.importModeReplace},{value:"append",label:e.importModeAppend},{value:"upsert",label:e.importModeUpsert}],u=[{value:"error",label:e.conflictError},{value:"skip",label:e.conflictSkip},{value:"update",label:e.conflictUpdate}],d=e=>{var t,o;null==(o=null==(t=e.currentTarget.parentElement)?void 0:t.querySelector('input[type="file"]'))||o.click()},c=l?i.html`
|
|
2
2
|
${"replace"===t?i.html`<span class="mzc-client-excel-dropzone__line">${e.overwriteSelected}</span>`:i.nothing}
|
|
3
3
|
<span class="mzc-client-excel-dropzone__line"><span class="mzc-client-excel-dropzone__accent">${l.name}</span></span>
|
|
4
4
|
`:i.html`
|
|
@@ -74,4 +74,4 @@
|
|
|
74
74
|
`}footer(){const e=s.getGridVueLocale();return i.html`
|
|
75
75
|
${n.button({label:e.check,variant:"primary",disabled:!this.file,onClick:()=>this.confirm()})}
|
|
76
76
|
${n.button({label:e.cancel,onClick:()=>this.close()})}
|
|
77
|
-
`}confirm(){const e=this.grid,t=this.file;if(!e||!t)return;const o={...this.options};this.close(),this.runBackgroundImport(e,t,o)}async runBackgroundImport(e,t,o){const n=s.getGridVueLocale(),l=this.deps.notificationStore(),i=g(),r=t.name,a=()=>null==l?void 0:l.eventMessages.find(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});l&&l.eventMessages.unshift({noti_type:"progress",header_key:n.clientExcelImportProgress,noti_datetime:y(),noti_sender_id:"",prop_value:{session_id:i,file_name:r,status:"in_progress",progress_per:0,operation_type:"upload",remain_time:-1}});try{const n=e.changes;(null==n?void 0:n.hasChanges)&&await n.discardAll(),await e.io.fromExcel(t,{mode:o.mode,conflictStrategy:o.conflictStrategy,autoCommit:o.autoCommit,onProgress:e=>{const t=a();if(!(null==t?void 0:t.prop_value))return;let o="number"==typeof e.percent?e.percent:void 0;void 0===o&&"number"==typeof e.rowsProcessed&&"number"==typeof e.totalRows&&e.totalRows>0&&(o=e.rowsProcessed/e.totalRows*100),"number"==typeof o&&(t.prop_value.progress_per=Math.min(99,Math.max(0,Math.floor(o))))}});const r=a();(null==r?void 0:r.prop_value)&&(r.prop_value.status="completed",r.prop_value.progress_per=100),l&&setTimeout(()=>{const e=l.eventMessages.findIndex(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});-1!==e&&l.eventMessages.splice(e,1)},2e3)}catch(u){const e=a();(null==e?void 0:e.prop_value)&&(e.prop_value.status="error",e.prop_value.error_message=u instanceof Error?u.message:String(u),e.prop_value.progress_per=0,e.prop_value.remain_time=-1)}}}const _={class:"mzc-client-excel-host",hidden:""},C=o.defineComponent({__name:"ClientExcelUploadPopup",setup(e,{expose:t}){const n=f(),i=l.useGridNotificationStore(),r=new x({notificationStore:()=>i,onHidden:()=>n.hide()});return o.watch(n.showPopup,e=>{if(e){const e=n.activeGrid.value;e&&r.open(e,n.defaultImportOptions.value)}else r.close()},{immediate:!0}),o.onBeforeUnmount(()=>r.destroy()),t({controller:r}),(e,t)=>(o.openBlock(),o.createElementBlock("span",_))}}),w=Symbol("MozGridConfig");function S(){const e=o.inject(w,o.computed(()=>({}))),t=o.inject(R,null);return o.computed(()=>({...e.value,locale:(null==t?void 0:t.value)??e.value.locale}))}function b(e){const t=S(),n=o.computed(()=>{const o=e(),n={locale:o.locale??t.value.locale,timeZone:o.timeZone??t.value.timeZone};return void 0!==n.timeZone&&new Intl.DateTimeFormat("en",{timeZone:n.timeZone}),n});o.provide(w,n),o.provide(R,o.computed(()=>n.value.locale))}const M=o.defineComponent({name:"MozGridConfigProvider",props:{config:{type:Object,default:()=>({})}},setup:(e,{slots:t})=>(b(()=>e.config),()=>{var e;return null==(e=t.default)?void 0:e.call(t)})}),R=Symbol("MozGridLocale");const E=o.defineComponent({name:"MozGridLocaleProvider",props:{locale:{type:String,default:void 0}},setup:(e,{slots:t})=>(b(()=>({locale:e.locale})),()=>{var e;return null==(e=t.default)?void 0:e.call(t)})});class B{constructor(){t(this,"instances",new Map),t(this,"appContext",null)}setAppContext(e){this.appContext=e}mount(e,t,n,l={}){const i=this.instances.get(e);if(i)return void Object.assign(i.props,l);const r=o.reactive({...l}),s=o.createApp({render:()=>o.h(n,r)});this.appContext&&(s._context.provides={...this.appContext.provides},s._context.components={...this.appContext.components},s._context.directives={...this.appContext.directives},s._context.config.globalProperties={...this.appContext.config.globalProperties}),this.instances.set(e,{app:s,props:r}),s.mount(t)}mountInstance(e,t,n){const l=o.reactive({...n}),i=o.createApp({render:()=>t(l)});this.appContext&&(i._context.provides={...this.appContext.provides},i._context.components={...this.appContext.components},i._context.directives={...this.appContext.directives},i._context.config.globalProperties={...this.appContext.config.globalProperties}),i.mount(e);let r,s=!1,a=o.nextTick();return{update:e=>{s||(Object.assign(l,e),a=o.nextTick())},whenReady:()=>a,destroy:()=>r||(s=!0,i.unmount(),r=o.nextTick(),a=r,r)}}updateProps(e,t){const o=this.instances.get(e);o&&Object.assign(o.props,t)}unmount(e){const t=this.instances.get(e);t&&(t.app.unmount(),this.instances.delete(e))}unmountByPrefix(e){for(const t of this.instances.keys())t.startsWith(e)&&this.unmount(t)}unmountAll(){for(const[,e]of this.instances)e.app.unmount();this.instances.clear()}get size(){return this.instances.size}has(e){return this.instances.has(e)}}function k(e,t,o){return e.map(e=>{const n={...e},l=t.get("cell",e.id);if(null==l?void 0:l.slot){const t=l.slot;n.cellRenderer=function(e,t,o){const n=e=>({value:e.value,rowData:e.rowData,columnId:e.columnId,rowId:e.rowId}),l=(e,l)=>{const i=o.mountInstance(e,e=>t(e),n(l));return{update:e=>(i.update(n(e)),!0),whenReady:()=>i.whenReady(),destroy:()=>i.destroy()}};return l.__cellRendererKind="lifecycle",l}(e.id,t,o)}const i=t.get("header",e.id);if(null==i?void 0:i.slot){const t=i.slot;n.headerRenderer=function(e,t,o){return n=>{const l=document.createElement("div");l.style.display="contents";const i=`header:${e}`,r={columnId:n.columnId,header:n.header};return o.mount(i,l,{render:()=>t(r)},r),l}}(e.id,t,o)}const r=t.get("editor",e.id);if(null==r?void 0:r.slot){const t=r.slot;n.editor=function(e,t,o){return{type:"custom",renderer:n=>{const l=document.createElement("div");l.style.display="contents";const i=`editor:${e}`,r={value:n.value,rowData:n.rowData,columnId:e,onCommit:n.onCommit,onCancel:n.onCancel};return o.mount(i,l,{render:()=>t(r)},r),l},destroy:()=>{o.unmount(`editor:${e}`)}}}(e.id,t,o)}return n})}const I=Symbol("moz-grid-instance"),P=Symbol("moz-grid-container"),F=Symbol("moz-grid-renderer"),z=Symbol("moz-grid-template-registry"),T=Symbol("moz-grid-filter-module"),G=Symbol("moz-grid-sort-module"),$=Symbol("moz-grid-custom-cell-module"),D=Symbol("moz-grid-bulk-editor-module"),H=((e,t)=>{const o=e.__vccOpts||e;for(const[n,l]of t)o[n]=l;return o})(o.defineComponent({__name:"MozGrid",props:o.mergeModels({sourceRevision:{},height:{default:"100%"},contextMenuConfig:{},emptyState:{},locale:{},sourceFields:{},useMultipleChart:{type:Boolean},chartIncludeGrandTotal:{type:Boolean},chartMap:{},chartConfig:{},useRowGroupSettings:{type:Boolean,default:!0},useFieldSettings:{type:Boolean,default:!0},useFormatSettings:{type:Boolean,default:!0},useLayoutSettings:{type:Boolean,default:!0},useAggregateSettings:{type:Boolean,default:!0},useToolBox:{type:Boolean,default:!0},useToolBoxSetting:{type:Boolean,default:!0},useExtendFooter:{type:Boolean,default:!0},useSort:{type:Boolean,default:!0},useCustomCell:{type:Boolean,default:!0},useContextMenu:{type:Boolean,default:!0},usePivot:{type:Boolean},usePivotBar:{type:Boolean,default:!0},useChart:{type:Boolean},loading:{type:Boolean},useBuiltinTooltip:{type:Boolean,default:!0},toolbarConfig:{},name:{},usePreset:{type:Boolean,default:!0}},{coreConfig:{default:()=>({})},coreConfigModifiers:{}}),emits:o.mergeModels(["ready","data:loaded","data:changed","row:click","row:dblclick","row:pinned","row:unpinned","row:reordered","cell:click","cell:dblclick","cell:change","cell:beforeEdit","cell:editCommitting","cell:editCommitted","cell:tooltip","selection:changed","column:resize","column:reorder","column:pin","column:visibility","sort:changed","header:click","header:sortClick","header:filterClick","filter:changed","scroll","undo:stateChange","clipboard:copy","clipboard:paste","validation:changed","columnGroup:toggle","rowGroup:toggle","rowGroup:batchToggle","contextmenu"],["update:coreConfig"]),setup(e,{expose:t,emit:i}){const r=o.useModel(e,"coreConfig"),a=e,u=i,d=o.ref(),c=o.useSlots(),m=function(){const e=o.getCurrentInstance();if(!e)throw new Error("[MozGridVue] useAppContext는 setup() 내에서만 호출할 수 있습니다.");return e.appContext}(),g=new B,v=function(){const e=o.reactive([]);function t(e,t){return t?`${e}:${t}`:e}return{register(o){const n=e.findIndex(e=>t(e.type,e.fieldId)===t(o.type,o.fieldId));n>=0?e[n]=o:e.push(o)},unregister(o,n){const l=t(o,n),i=e.findIndex(e=>t(e.type,e.fieldId)===l);i>=0&&e.splice(i,1)},get(o,n){const l=t(o,n);return e.find(e=>t(e.type,e.fieldId)===l)},getAll:t=>e.filter(e=>e.type===t)}}(),h=o.shallowRef(null),y=o.shallowRef(null),x=f(),_=S(),w=o.computed(()=>a.locale??r.value.locale??_.value.locale),b=o.computed(()=>r.value.timeZone??_.value.timeZone);s.setGridVueLocale(w.value),o.watch(w,e=>s.setGridVueLocale(e));const M=o.ref();let R=null;const E=o.ref({disabled:!0,hasItem:!1}),T=l.useGridNotificationStore(),G=e=>String(e).padStart(2,"0"),$=()=>{const e=new Date;return`${e.getFullYear()}-${G(e.getMonth()+1)}-${G(e.getDate())} ${G(e.getHours())}:${G(e.getMinutes())}:${G(e.getSeconds())}`},D=()=>`mzc-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,H=e=>null==T?void 0:T.eventMessages.find(t=>{var o;return(null==(o=t.prop_value)?void 0:o.session_id)===e}),L=e=>{if(!T)return;const t=T.eventMessages.findIndex(t=>{var o;return(null==(o=t.prop_value)?void 0:o.session_id)===e});-1!==t&&T.eventMessages.splice(t,1)};let V=null;const O={onExportStart:e=>{T&&(V=D(),T.eventMessages.unshift({noti_type:"progress",header_key:"text-file_download",noti_datetime:$(),noti_sender_id:"",prop_value:{session_id:V,file_name:e,status:"in_progress",progress_per:0,operation_type:"download",remain_time:-1}}))},onExportProgress:e=>{if(!V)return;const t=H(V);if(!(null==t?void 0:t.prop_value))return;let o="number"==typeof e.percent?e.percent:void 0;void 0===o&&"number"==typeof e.rowsProcessed&&"number"==typeof e.totalRows&&e.totalRows>0&&(o=e.rowsProcessed/e.totalRows*100),"number"==typeof o&&(t.prop_value.progress_per=Math.min(99,Math.max(0,Math.floor(o))))},onExportComplete:e=>{if(!V)return;const t=V,o=H(t);(null==o?void 0:o.prop_value)&&((null==e?void 0:e.fileName)&&(o.prop_value.file_name=e.fileName),o.prop_value.status="completed",o.prop_value.progress_per=100),setTimeout(()=>L(t),2e3),V=null},onExportError:e=>{if(!V)return;const t=H(V);(null==t?void 0:t.prop_value)&&(t.prop_value.status="error",t.prop_value.error_message=e.message,t.prop_value.progress_per=0,t.prop_value.remain_time=-1),V=null},onExportCancel:()=>{V&&(L(V),V=null)},onImportComplete:()=>{if(!T)return;const e=D();T.eventMessages.unshift({noti_type:"progress",header_key:"text-file_upload",noti_datetime:$(),noti_sender_id:"",prop_value:{session_id:e,file_name:"",status:"completed",progress_per:100,operation_type:"upload",remain_time:-1}}),setTimeout(()=>L(e),2e3)},onImportError:e=>{T&&T.eventMessages.unshift({noti_type:"progress",header_key:"text-file_upload",noti_datetime:$(),noti_sender_id:"",prop_value:{session_id:D(),file_name:"",status:"error",error_message:e.message,progress_per:0,operation_type:"upload",remain_time:-1}})},onClientImportOpen:()=>{var e;if(!h.value)return;const t=(null==(e=a.contextMenuConfig)?void 0:e.clientImportOptions)??{};x.show(h.value,t)}};o.provide(z,v),o.provide(F,g),o.provide(I,h),o.provide(P,M);const A=o.computed(()=>{const e=a.height??"100%";return{height:"number"==typeof e?`${e}px`:e,width:"100%"}});function j(e){return(t,o)=>{const n={render:()=>{var t,n,l;return("tool-items"===e?null==(t=c[e])?void 0:t.call(c,E.value):"option-menu-items"===e?null==(n=c[e])?void 0:n.call(c,o.props):null==(l=c[e])?void 0:l.call(c))??null}},l=`slot:${e}`;return g.mount(l,t,n,{}),()=>g.unmount(l)}}let q,U;function Z(){const e={...r.value},t=function(){const e=r.value.fields;return e===q||(q=e,U=e?k(e,v,g):void 0),U}();return t&&(e.fields=t),void 0!==w.value&&(e.locale=w.value),e.timeZone=b.value,e}function N(){const e=["tool-left","tool-items","option-popup","tool-bottom","notification","footer","empty-state","option-menu-items"],t={};for(const o of e)c[o]&&(t[o]=j(o));return{useToolBox:a.useToolBox,useToolBoxSetting:a.useToolBoxSetting,useExtendFooter:a.useExtendFooter,useSort:a.useSort,useCustomCell:a.useCustomCell,useContextMenu:a.useContextMenu,useBuiltinTooltip:a.useBuiltinTooltip,usePivot:a.usePivot,usePivotBar:a.usePivotBar,useChart:a.useChart,useRowGroupSettings:a.useRowGroupSettings,useFieldSettings:a.useFieldSettings,useFormatSettings:a.useFormatSettings,useLayoutSettings:a.useLayoutSettings,useAggregateSettings:a.useAggregateSettings,toolbarConfig:a.toolbarConfig,useMultipleChart:a.useMultipleChart,chartIncludeGrandTotal:a.chartIncludeGrandTotal,chartMap:a.chartMap,chartConfig:a.chartConfig,loading:a.loading,locale:w.value,sourceFields:a.sourceFields,contextMenuConfig:a.contextMenuConfig,emptyState:a.emptyState,slots:t,onToolItemsPropsChange:e=>{E.value=e},excelHooks:O}}const Y=["data:changed","row:click","row:dblclick","row:pinned","row:unpinned","row:reordered","cell:click","cell:dblclick","cell:change","cell:beforeEdit","cell:editCommitting","cell:editCommitted","cell:tooltip","selection:changed","column:resize","column:reorder","column:pin","column:visibility","sort:changed","header:click","header:sortClick","header:filterClick","filter:changed","scroll","undo:stateChange","clipboard:copy","clipboard:paste","validation:changed","columnGroup:toggle","rowGroup:toggle","rowGroup:batchToggle","contextmenu"];let K=[];function W(){for(const e of K)try{e()}catch{}K=[]}const X=new WeakSet;function J(e){if(e&&"object"==typeof e){if(X.has(e))return;X.add(e)}}function Q(e){if(!d.value)return null;g.setAppContext(m);const t=o.markRaw(new n.GridChrome(d.value,Z(),{...N(),sourceRevision:a.sourceRevision},e));o.markRaw(t.grid),R=t,h.value=t.grid,M.value=d.value;const l=u;t.on("data:loaded",()=>u("data:loaded"));for(const o of Y)t.on(o,e=>l(o,e));return K.push(t.onConfigChange(()=>{r.value=t.getCoreConfig(r.value),t.syncAppliedConfig(Z())})),t.ready().catch(J),t}let ee=null;const te=new n.LatestSettingsCoordinator({waitUntilSettled:async(e,t)=>{(null==R?void 0:R.waitForReinitSettled)?await R.waitForReinitSettled(t,R.isSourceReplacement(e.config,e.sourceRevision)):await(null==R?void 0:R.ready())},apply:async(e,t)=>{if(!R)return;let o=R;const{reinitRequired:n,completion:l}=o.reconcileCoreConfig(e.config,e.sourceRevision);if(l&&await l,n){const n=o,l=n.captureReinitStateAsync?await n.captureReinitStateAsync(e.config,e.sourceRevision):o.captureReinitState(e.config,e.sourceRevision);if(!t.isCurrent()||R!==o)return;W(),o.destroy(),R=null,g.unmountAll();const i=Q(l);if(!i)return;if(o=i,await o.ready(),R!==o)return;await o.restoreReinitState(l)}else await o.ready();t.isCurrent()&&R===o&&ee!==o&&(ee=o,E.value=o.getToolItemsProps(),u("ready",o.grid,o),y.value=o.grid)},onError:J});function oe(){te.request({config:Z(),sourceRevision:a.sourceRevision})}o.onMounted(()=>{Q(),oe(),o.watch(()=>{const e=r.value;e.data,e.fields;const t={_locale:w.value,_timeZone:b.value,_sourceRevision:a.sourceRevision};for(const o in e)"data"!==o&&"fields"!==o&&(t[o]=e[o]);return t},()=>oe(),{deep:!0}),o.watch(()=>{var e,t,o,n;return{useToolBox:a.useToolBox,useToolBoxSetting:a.useToolBoxSetting,useExtendFooter:a.useExtendFooter,useSort:a.useSort,useCustomCell:a.useCustomCell,useContextMenu:a.useContextMenu,useBuiltinTooltip:a.useBuiltinTooltip,usePivot:a.usePivot,usePivotBar:a.usePivotBar,useRowGroupSettings:a.useRowGroupSettings,useFieldSettings:a.useFieldSettings,useFormatSettings:a.useFormatSettings,useLayoutSettings:a.useLayoutSettings,useAggregateSettings:a.useAggregateSettings,toolbarConfig:{filter:{disabled:null==(t=null==(e=a.toolbarConfig)?void 0:e.filter)?void 0:t.disabled,hidden:null==(n=null==(o=a.toolbarConfig)?void 0:o.filter)?void 0:n.hidden}}}},e=>null==R?void 0:R.setUIOptions(e)),o.watch(()=>a.loading,e=>null==R?void 0:R.setUIOptions({loading:e}),{immediate:!0}),o.watch(()=>a.sourceFields,e=>null==R?void 0:R.setSourceFields(e),{immediate:!0}),o.watch(()=>a.contextMenuConfig,e=>null==R?void 0:R.setContextMenuConfig(e),{deep:!0}),o.watch(()=>a.chartConfig,e=>{var t;return null==(t=null==R?void 0:R.setChartConfig)?void 0:t.call(R,e)},{deep:!0})}),o.onBeforeUnmount(()=>{te.destroy(),W(),null==R||R.destroy(),R=null,h.value=null,g.unmountAll()}),p({usePreset:a.usePreset,name:o.toRef(a,"name"),type:"pivot"===r.value.mode?"mozPivotGrid":"mozFlatGrid",gridInstance:h,readyGrid:y,getSourceFields:()=>{const e=r.value.fields??[],t=new Map(e.map(e=>[e.field??e.id,e.id]));return((null==R?void 0:R.pivot.sourceFields)??[]).map(e=>({id:t.get(e.field)??e.field,field:e.field,header:e.header,dataType:e.dataType}))},getCustomCellState:()=>(null==R?void 0:R.customCell.getCustomCell())??null,setCustomCellState:e=>{null==R||R.customCell.setCustomCell(e??null)},getColumnFormatState:()=>(null==R?void 0:R.columnFormat.getConfig())??null,setColumnFormatState:e=>{null==R||R.columnFormat.setConfig(e??null)},getViewOptionsState:()=>{var e;return(null==(e=null==R?void 0:R.getPresetViewState)?void 0:e.call(R))??null},setViewOptionsState:e=>{var t;null==(t=null==R?void 0:R.setPresetViewState)||t.call(R,e)}});return t(new Proxy({},{get(e,t){if("chrome"===t)return R;const o=R;if(!o)return;const n=o[t];return"function"==typeof n?n.bind(o):n},has:(e,t)=>"chrome"===t||!!R&&t in R})),(e,t)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",{ref_key:"hostRef",ref:d,class:"moz-grid-chrome",style:o.normalizeStyle(A.value)},null,4),o.renderSlot(e.$slots,"default",{},void 0,!0),h.value?(o.openBlock(),o.createBlock(C,{key:0})):o.createCommentVNode("",!0)],64))}}),[["__scopeId","data-v-05d34927"]]),L=o.defineComponent({name:"CellTemplate",props:{field:{type:String,required:!0}},setup(e){const t=o.inject(z),n=o.useSlots();return t?(o.onMounted(()=>{n.default&&t.register({type:"cell",fieldId:e.field,slot:n.default})}),o.onBeforeUnmount(()=>{t.unregister("cell",e.field)}),()=>null):()=>null}}),V=o.defineComponent({name:"HeaderTemplate",props:{field:{type:String,required:!0}},setup(e){const t=o.inject(z),n=o.useSlots();return t?(o.onMounted(()=>{n.default&&t.register({type:"header",fieldId:e.field,slot:n.default})}),o.onBeforeUnmount(()=>{t.unregister("header",e.field)}),()=>null):()=>null}}),O=o.defineComponent({name:"CellEditor",props:{field:{type:String,required:!0}},setup(e){const t=o.inject(z),n=o.useSlots();return t?(o.onMounted(()=>{n.default&&t.register({type:"editor",fieldId:e.field,slot:n.default})}),o.onBeforeUnmount(()=>{t.unregister("editor",e.field)}),()=>null):()=>null}}),A=o.defineComponent({name:"DetailTemplate",props:{minHeight:{type:Number,default:100},maxHeight:{type:Number},singleExpand:{type:Boolean,default:!1},keepDetailRows:{type:Boolean,default:!0}},setup(e){const t=o.inject(I),n=o.inject(F),l=o.useSlots();return t&&n?(o.onMounted(()=>{const o=t.value;if(!o||!l.default)return;const i=l.default;o.masterDetail.setConfig({minHeight:e.minHeight,maxHeight:e.maxHeight,singleExpand:e.singleExpand,keepMasterDetailRows:e.keepDetailRows,renderer:(e,t,o)=>{const l=`detail:${o}`,r={parentData:t,dataIndex:o};return n.mount(l,e,{render:()=>i(r)},r),()=>{n.unmount(l)}}})}),o.onBeforeUnmount(()=>{null==n||n.unmountByPrefix("detail:")}),()=>null):()=>null}}),j="ps-group-template-dispose",q="ps-group-template-host",U=o.defineComponent({name:"GroupTemplate",setup(){const e=o.inject(I),t=o.inject(F),n=o.useSlots();if(!e||!t)return()=>null;const l=new Map,i=e=>{const t=l.get(e);if(t)return l.delete(e),t.destroy()},r=e=>{null==e||e.formatRow.removeHandler("_groupTemplate");for(const t of[...l.keys()])i(t)};let s=null;return o.watch(e,e=>{e!==s&&(r(s),s=e??null,e&&(e=>{if(!n.default)return;const o=n.default;e.formatRow.addHandler("_groupTemplate",e=>{if("group-row"!==e.type)return;const n=e.ctx,r=n.element;if(!r)return;const s={groupKey:n.column,groupValue:n.value,level:n.level,count:n.itemCount,isExpanded:!n.collapsed},a=l.get(r);if(a&&r.classList.contains(q))return void a.update(s);const u=a?i(r):void 0,d=r.classList.contains(q)?r:document.createElement("span");d!==r&&r.replaceChildren(d);const c=t.mountInstance(d,e=>o(e),s),p=e=>{var t,o,n;null==(n=e.detail)||n.waitUntil(null==(o=null==(t=l.get(r))?void 0:t.whenReady)?void 0:o.call(t))},m=e=>{const t=i(r),o=e.detail;o?o.waitUntil(t):null==t||t.catch(e=>{})};l.set(r,{update:c.update,whenReady:()=>Promise.all([u,c.whenReady()]).then(()=>{}),destroy:()=>(r.removeEventListener("ps-group-template-ready",p),r.removeEventListener(j,m),c.destroy())}),r.addEventListener("ps-group-template-ready",p),r.addEventListener(j,m,{once:!0})})})(e))},{immediate:!0}),o.onBeforeUnmount(()=>{r(s),s=null}),()=>null}});let Z=!1;function N(e){return e?(Object.prototype.hasOwnProperty.call(e,"formatHeaderRow")||Object.defineProperty(e,"formatHeaderRow",{configurable:!0,get:()=>(Z||(Z=!0),e.formatHeader)}),e):null}const Y=o.defineComponent({__name:"MozGridVue",props:{name:{},useToolBox:{type:Boolean,default:!0},useToolBoxSetting:{type:Boolean,default:!0},useExtendFooter:{type:Boolean,default:!0},useSort:{type:Boolean,default:!0},useCustomCell:{type:Boolean,default:!0},contextMenuConfig:{default:()=>({})},useContextMenu:{type:Boolean,default:!0},loading:{type:Boolean},emptyState:{},fields:{},data:{},mode:{},pivotRowFields:{},pivotColumnFields:{},pivotValueFields:{},height:{default:"100%"},keyFields:{},theme:{},rowHeight:{},headerHeight:{},showHeader:{type:Boolean,default:!0},resizableColumns:{type:Boolean,default:!0},reorderableColumns:{type:Boolean,default:!0},showRowHeader:{type:[Boolean,Object]},rowHeader:{type:[Boolean,Object]},rowSelection:{},cellSelection:{default:()=>({mode:"range"})},cellSelectionImpliesRows:{type:Boolean},editable:{type:Boolean,default:!1},tooltipMode:{default:"overflow"},alternatingRows:{type:Boolean,default:!0},autoFitColumns:{type:Boolean},dynamicRowHeights:{type:Boolean,default:!1},reorderableRows:{type:Boolean,default:!1},locale:{},engine:{},loader:{},preventKeyEdit:{type:Boolean,default:!0},showStatusBar:{type:Boolean},showDragHandleColumn:{type:Boolean},undoStack:{},formatRow:{},translations:{},rowStyle:{},headerStyle:{},rowHeightChangeThreshold:{},group:{},columnGroups:{},rowTemplate:{}},emits:["ready","data:loaded","row:click","row:dblclick","row:pinned","row:unpinned","row:reordered","cell:click","cell:dblclick","cell:change","cell:beforeEdit","cell:editCommitting","cell:editCommitted","cell:tooltip","selection:changed","column:resize","column:reorder","column:pin","column:visibility","sort:changed","filter:changed","undo:stateChange","clipboard:copy","clipboard:paste","validation:changed","columnGroup:toggle","scroll","contextmenu"],setup(e,{expose:t,emit:l}){const i=e,r=l,s=o.computed(()=>{const e={...i};for(const o of n.WRAPPER_EXTRA_KEYS)delete e[o];delete e.name,delete e.locale;const t=!0===e.useSummaryFooter;return delete e.useSummaryFooter,t&&void 0===e.summaryRow&&(e.summaryRow="pinnedBottom"),e}),a=o.computed(()=>{const e=i,t={};for(const o of n.WRAPPER_EXTRA_KEYS)void 0!==e[o]&&(t[o]=e[o]);return void 0!==e.locale&&(t.locale=e.locale),t}),u=Object.fromEntries(["ready","data:loaded","row:click","row:dblclick","row:pinned","row:unpinned","row:reordered","cell:click","cell:dblclick","cell:change","cell:beforeEdit","cell:editCommitting","cell:editCommitted","cell:tooltip","selection:changed","column:resize","column:reorder","column:pin","column:visibility","sort:changed","filter:changed","undo:stateChange","clipboard:copy","clipboard:paste","validation:changed","columnGroup:toggle","scroll","contextmenu"].map(e=>[e,(...t)=>r(e,...t)]));u.ready=e=>r("ready",N(e));const d=o.ref(null);function c(e){d.value=e}function p(){return d.value??null}const m={};return Object.defineProperties(m,{grid:{enumerable:!0,get:()=>{var e;return N(null==(e=p())?void 0:e.grid)}},core:{enumerable:!0,get:()=>m},filterModule:{enumerable:!0,get:()=>{var e;return null==(e=p())?void 0:e.filter}},sortModule:{enumerable:!0,get:()=>{var e;return null==(e=p())?void 0:e.sort}},customCellModule:{enumerable:!0,get:()=>{var e;return null==(e=p())?void 0:e.customCell}},bulkEditorModule:{enumerable:!0,get:()=>{var e;return null==(e=p())?void 0:e.bulkEditor}}}),m.refresh=async()=>{var e,t;return null==(t=null==(e=p())?void 0:e.grid)?void 0:t.refresh()},m.loadData=async e=>{var t,o;return null==(o=null==(t=p())?void 0:t.grid)?void 0:o.loadData(e)},m.sort=async e=>{var t,o;return null==(o=null==(t=p())?void 0:t.grid)?void 0:o.sort(e)},m.filter=async e=>{var t,o;return null==(o=null==(t=p())?void 0:t.grid)?void 0:o.filter(e)},t(m),(e,t)=>(o.openBlock(),o.createBlock(H,o.mergeProps({ref:c,coreConfig:s.value},a.value,{name:i.name},o.toHandlers(o.unref(u))),o.createSlots({default:o.withCtx(()=>[o.renderSlot(e.$slots,"default")]),_:2},[e.$slots["tool-left"]?{name:"tool-left",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"tool-left")]),key:"0"}:void 0,e.$slots["tool-items"]?{name:"tool-items",fn:o.withCtx(t=>[o.renderSlot(e.$slots,"tool-items",o.normalizeProps(o.guardReactiveProps(t)))]),key:"1"}:void 0,e.$slots.notification?{name:"notification",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"notification")]),key:"2"}:void 0,e.$slots.footer?{name:"footer",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"footer")]),key:"3"}:void 0,e.$slots.customState?{name:"empty-state",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"customState")]),key:"4"}:void 0]),1040,["coreConfig","name"]))}}),K=o.defineComponent({__name:"MozPivotVue",props:{name:{},data:{},rowFields:{},columnFields:{},valueFields:{},height:{default:"100%"},showRowSubTotals:{type:Boolean,default:!1},showRowGrandTotals:{type:Boolean,default:!0},showColumnSubTotals:{type:Boolean,default:!1},showColumnGrandTotals:{type:Boolean,default:!0},trackSourceRows:{type:Boolean,default:!1},showHeader:{type:Boolean,default:!0},alternatingRows:{type:Boolean,default:!1},tooltipMode:{default:"overflow"},rowSelection:{},cellSelection:{default:()=>({mode:"range"})},cellSelectionImpliesRows:{type:Boolean},useToolBox:{type:Boolean,default:!0},useToolBoxSetting:{type:Boolean,default:!0},useFilter:{type:Boolean,default:!0},useSort:{type:Boolean,default:!0},useCustomCell:{type:Boolean,default:!0},useExtendFooter:{type:Boolean,default:!0},useSummaryFooter:{type:Boolean,default:!1},useContextMenu:{type:Boolean,default:!0},contextMenuConfig:{},useChart:{type:Boolean,default:!1},fields:{},availableFields:{},useMultipleChart:{type:Boolean,default:!0},chartIncludeGrandTotal:{type:Boolean,default:!1},chartMap:{},loading:{type:Boolean},emptyState:{}},emits:["ready","data:loaded","filter:changed","pivot:configured","pivot:toggled","update:rowFields","update:columnFields","update:valueFields"],setup(e,{expose:t,emit:l}){const i=e,r=l,s=o.computed(()=>{const e={...i};for(const o of n.WRAPPER_EXTRA_KEYS)delete e[o];delete e.name,delete e.locale;const t=!0===e.useSummaryFooter;return delete e.useSummaryFooter,t&&void 0===e.summaryRow&&(e.summaryRow="pinnedBottom"),delete e.availableFields,delete e.useFilter,e.mode="pivot",e}),a=o.computed(()=>{const e=i,t={};for(const o of n.WRAPPER_EXTRA_KEYS)void 0!==e[o]&&(t[o]=e[o]);return void 0!==e.locale&&(t.locale=e.locale),t.sourceFields=e.sourceFields??e.availableFields??e.fields,t}),u=Object.fromEntries(["ready","data:loaded","filter:changed","pivot:toggled"].map(e=>[e,(...t)=>r(e,...t)]));function d(e){var t,o,n;const l=e;r("update:rowFields",l.rowFields??[]),r("update:columnFields",l.columnFields??[]),r("update:valueFields",l.valueFields??[]);const i=null==(n=null==(o=null==(t=m())?void 0:t.pivot)?void 0:o.getRawConfig)?void 0:n.call(o);i&&r("pivot:configured",i)}u.ready=e=>r("ready",N(e));const c=o.ref(null);function p(e){c.value=e}function m(){return c.value??null}function f(){var e,t;return null==(t=null==(e=m())?void 0:e.grid)?void 0:t.pivot}const g=o.computed({get:()=>{var e,t;return(null==(t=null==(e=m())?void 0:e.chart)?void 0:t.visible)??!1},set:e=>{var t,o;return null==(o=null==(t=m())?void 0:t.chart)?void 0:o.setVisible(e)}}),v={};return Object.defineProperties(v,{grid:{enumerable:!0,get:()=>{var e;return N(null==(e=m())?void 0:e.grid)}},core:{enumerable:!0,get:()=>v},pivotApi:{enumerable:!0,get:()=>f()??null},filterModule:{enumerable:!0,get:()=>{var e;return null==(e=m())?void 0:e.filter}},sortModule:{enumerable:!0,get:()=>{var e;return null==(e=m())?void 0:e.sort}},customCellModule:{enumerable:!0,get:()=>{var e;return null==(e=m())?void 0:e.customCell}},showChart:{enumerable:!0,get:()=>g.value,set:e=>{g.value=e}}}),v.refresh=async()=>{var e,t;return null==(t=null==(e=m())?void 0:e.grid)?void 0:t.refresh()},v.setConfig=async e=>{var t;return null==(t=f())?void 0:t.setConfig(e)},v.getResult=()=>{var e;return(null==(e=f())?void 0:e.getResult())??null},v.expandAll=async()=>{var e;return null==(e=f())?void 0:e.expandAllRows()},v.collapseAll=async()=>{var e;return null==(e=f())?void 0:e.collapseAllRows()},v.expandToLevel=async e=>{var t;return null==(t=f())?void 0:t.expandRowToLevel(e)},v.toggleChart=()=>{g.value=!g.value},t(v),(e,t)=>(o.openBlock(),o.createBlock(H,o.mergeProps({ref:p,coreConfig:s.value},a.value,{name:i.name,"onUpdate:coreConfig":d},o.toHandlers(o.unref(u))),o.createSlots({default:o.withCtx(()=>[o.renderSlot(e.$slots,"default")]),_:2},[e.$slots["tool-left"]?{name:"tool-left",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"tool-left")]),key:"0"}:void 0,e.$slots["tool-items"]?{name:"tool-items",fn:o.withCtx(t=>[o.renderSlot(e.$slots,"tool-items",o.normalizeProps(o.guardReactiveProps(t)))]),key:"1"}:void 0,e.$slots.footer?{name:"footer",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"footer")]),key:"2"}:void 0,e.$slots.customState?{name:"empty-state",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"customState")]),key:"3"}:void 0]),1040,["coreConfig","name"]))}});Object.defineProperty(exports,"jsonEditor",{enumerable:!0,get:()=>n.jsonEditor}),exports.GridNotificationKey=l.GridNotificationKey,exports.provideGridNotification=l.provideGridNotification,exports.useGridNotificationStore=l.useGridNotificationStore,exports.ExcelDataType=s.DataType,exports.FileParameter=s.FileParameter,exports.enUS=s.enUS,exports.getGridVueLocale=s.getGridVueLocale,exports.getGridVueLocaleCode=s.getGridVueLocaleCode,exports.jaJP=s.jaJP,exports.koKR=s.koKR,exports.normalizeGridVueLocale=s.normalizeGridVueLocale,exports.openToast=s.openToast,exports.setGridVueLocale=s.setGridVueLocale,exports.showMessage=s.showMessage,exports.useExcelDownloadStore=s.useExcelDownloadStore,exports.useExcelStore=s.useExcelStore,exports.useExcelUploadStore=s.useExcelUploadStore,exports.zhCN=s.zhCN,Object.defineProperty(exports,"ROW_HEADER_COLUMN_ID",{enumerable:!0,get:()=>u.ROW_HEADER_COLUMN_ID}),Object.defineProperty(exports,"UndoStack",{enumerable:!0,get:()=>u.UndoStack}),Object.defineProperty(exports,"getCornerCell",{enumerable:!0,get:()=>u.getCornerCell}),Object.defineProperty(exports,"getRowHeaderCell",{enumerable:!0,get:()=>u.getRowHeaderCell}),exports.CellEditor=O,exports.CellTemplate=L,exports.ClientExcelUploadController=x,exports.ClientExcelUploadPopup=C,exports.DetailTemplate=A,exports.GRID_BULK_EDITOR_MODULE_KEY=D,exports.GRID_CUSTOM_CELL_MODULE_KEY=$,exports.GRID_FILTER_MODULE_KEY=T,exports.GRID_INSTANCE_KEY=I,exports.GRID_RENDERER_KEY=F,exports.GRID_SORT_MODULE_KEY=G,exports.GRID_TEMPLATE_REGISTRY_KEY=z,exports.GroupTemplate=U,exports.HeaderTemplate=V,exports.MOZ_GRID_CONFIG_KEY=w,exports.MOZ_GRID_LOCALE_KEY=R,exports.MozGrid=H,exports.MozGridConfigProvider=M,exports.MozGridLocaleProvider=E,exports.MozGridVue=Y,exports.MozPivotVue=K,exports.StreamingParameter=class{constructor(e){t(this,"params"),t(this,"loading",!0),t(this,"size",0),t(this,"offset",0),t(this,"onReceived"),t(this,"onClosed"),t(this,"onHandleError"),t(this,"onCancelClick"),t(this,"_complete",!1),this.params=e}get ipcObject(){return this.params}get percent(){return 0===this.offset||0===this.size?0:Math.round(this.offset/this.size*100)}get complete(){return this._complete}received(e){this.offset++,this.onReceived&&this.onReceived(e)}closed(e=!0){this._complete=e,this.onClosed&&this.onClosed()}handleError(e,t=!0){this._complete=t,this.onHandleError&&this.onHandleError(e)}},exports.UserLayoutInstance=d,exports.VueRenderer=B,exports.downloadBlob=function(e,t){const o=URL.createObjectURL(e),n=document.createElement("a");n.href=o,n.download=t,n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),setTimeout(()=>URL.revokeObjectURL(o),0)},exports.exportCsv=async function(e){let t,o;if("pivot"===e.pivot.getMode()){const n=await e.pivot.getDataMatrix();if(!n)return;t=n.headers,o=n.rows}else{const n=await e.getExportData({scope:"all"});if(!n)return;const{headers:l,rows:i}=n,r=l.map(e=>e.id);t=l.map(e=>e.header),o=i.map(e=>r.map(t=>e[t]))}const n=[];n.push(t.map(v).join(","));for(const a of o)n.push(a.map(v).join(","));const l="\ufeff"+n.join("\r\n"),i=new Blob([l],{type:"text/csv;charset=utf-8;"}),r=URL.createObjectURL(i),s=document.createElement("a");s.href=r,s.download=`export_${(new Date).toISOString().slice(0,10)}.csv`,s.click(),URL.revokeObjectURL(r)},exports.generateSessionId=g,exports.pickFile=function(e=".xlsx"){return new Promise(t=>{const o=document.createElement("input");o.type="file",o.accept=e,o.style.display="none";let n=!1;const l=()=>{o.parentNode&&o.parentNode.removeChild(o)};o.onchange=()=>{if(n)return;n=!0;const e=o.files&&o.files.length>0?o.files[0]:null;l(),t(e)};const i=()=>{window.removeEventListener("focus",i),setTimeout(()=>{n||(n=!0,l(),t(null))},300)};window.addEventListener("focus",i),document.body.appendChild(o),o.click()})},exports.runClientExport=async function(e,t,o){var n;const l=`${t.exportFileName??"export"}_${a().format("YYYYMMDD")}.xlsx`,i=g();o&&o.eventMessages.unshift({noti_type:"progress",header_key:"text-file_download",noti_datetime:a().format("YYYY-MM-DD HH:mm:ss"),noti_sender_id:"",prop_value:{session_id:i,file_name:l,status:"in_progress",progress_per:0,operation_type:"download",remain_time:-1}});try{if(await e.io.saveExcelToFile({scope:"all",includeHeaders:!0,suggestedName:l,fallbackToDownload:!0,sheetSplit:"auto",includePinnedRows:!0,onProgress:e=>{if(!o)return;const t=o.eventMessages.find(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});if(!(null==t?void 0:t.prop_value))return;let n="number"==typeof e.percent?e.percent:void 0;void 0===n&&"number"==typeof e.rowsProcessed&&"number"==typeof e.totalRows&&e.totalRows>0&&(n=e.rowsProcessed/e.totalRows*100),"number"==typeof n&&(t.prop_value.progress_per=Math.min(99,Math.max(0,Math.floor(n))))},...t.clientExportOptions??{}}),o){const e=o.eventMessages.find(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});(null==e?void 0:e.prop_value)&&(e.prop_value.status="completed",e.prop_value.progress_per=100),setTimeout(()=>{const e=o.eventMessages.findIndex(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});-1!==e&&o.eventMessages.splice(e,1)},2e3)}null==(n=t.onClientExportComplete)||n.call(t,new Blob)}catch(r){if(r instanceof DOMException&&"AbortError"===r.name){if(o){const e=o.eventMessages.findIndex(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});-1!==e&&o.eventMessages.splice(e,1)}return}if(o){const e=o.eventMessages.find(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});(null==e?void 0:e.prop_value)&&(e.prop_value.status="error",e.prop_value.error_message=r instanceof Error?r.message:String(r),e.prop_value.progress_per=0,e.prop_value.remain_time=-1)}}},exports.useClientExcelStore=f,exports.useMozGridConfig=S,exports.useMozGridLocale=function(){const e=o.inject(R,null);return e||o.computed(()=>{})},exports.useUserLayoutModule=c;
|
|
77
|
+
`}confirm(){const e=this.grid,t=this.file;if(!e||!t)return;const o={...this.options};this.close(),this.runBackgroundImport(e,t,o)}async runBackgroundImport(e,t,o){const n=s.getGridVueLocale(),l=this.deps.notificationStore(),i=v(),r=t.name,a=()=>null==l?void 0:l.eventMessages.find(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});l&&l.eventMessages.unshift({noti_type:"progress",header_key:n.clientExcelImportProgress,noti_datetime:x(),noti_sender_id:"",prop_value:{session_id:i,file_name:r,status:"in_progress",progress_per:0,operation_type:"upload",remain_time:-1}});try{const n=e.changes;(null==n?void 0:n.hasChanges)&&await n.discardAll(),await e.io.fromExcel(t,{mode:o.mode,conflictStrategy:o.conflictStrategy,autoCommit:o.autoCommit,onProgress:e=>{const t=a();if(!(null==t?void 0:t.prop_value))return;let o="number"==typeof e.percent?e.percent:void 0;void 0===o&&"number"==typeof e.rowsProcessed&&"number"==typeof e.totalRows&&e.totalRows>0&&(o=e.rowsProcessed/e.totalRows*100),"number"==typeof o&&(t.prop_value.progress_per=Math.min(99,Math.max(0,Math.floor(o))))}});const r=a();(null==r?void 0:r.prop_value)&&(r.prop_value.status="completed",r.prop_value.progress_per=100),l&&setTimeout(()=>{const e=l.eventMessages.findIndex(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});-1!==e&&l.eventMessages.splice(e,1)},2e3)}catch(u){const e=a();(null==e?void 0:e.prop_value)&&(e.prop_value.status="error",e.prop_value.error_message=u instanceof Error?u.message:String(u),e.prop_value.progress_per=0,e.prop_value.remain_time=-1)}}}const C={class:"mzc-client-excel-host",hidden:""},w=o.defineComponent({__name:"ClientExcelUploadPopup",setup(e,{expose:t}){const n=g(),i=l.useGridNotificationStore(),r=new _({notificationStore:()=>i,onHidden:()=>n.hide()});return o.watch(n.showPopup,e=>{if(e){const e=n.activeGrid.value;e&&r.open(e,n.defaultImportOptions.value)}else r.close()},{immediate:!0}),o.onBeforeUnmount(()=>r.destroy()),t({controller:r}),(e,t)=>(o.openBlock(),o.createElementBlock("span",C))}}),S=Symbol("MozGridConfig");function b(){const e=o.inject(S,o.computed(()=>({}))),t=o.inject(E,null);return o.computed(()=>({...e.value,locale:(null==t?void 0:t.value)??e.value.locale}))}function M(e){const t=b(),n=o.computed(()=>{const o=e(),n={locale:o.locale??t.value.locale,timeZone:o.timeZone??t.value.timeZone};return void 0!==n.timeZone&&new Intl.DateTimeFormat("en",{timeZone:n.timeZone}),n});o.provide(S,n),o.provide(E,o.computed(()=>n.value.locale))}const R=o.defineComponent({name:"MozGridConfigProvider",props:{config:{type:Object,default:()=>({})}},setup:(e,{slots:t})=>(M(()=>e.config),()=>{var e;return null==(e=t.default)?void 0:e.call(t)})}),E=Symbol("MozGridLocale");const B=o.defineComponent({name:"MozGridLocaleProvider",props:{locale:{type:String,default:void 0}},setup:(e,{slots:t})=>(M(()=>({locale:e.locale})),()=>{var e;return null==(e=t.default)?void 0:e.call(t)})});class P{constructor(){t(this,"instances",new Map),t(this,"appContext",null)}setAppContext(e){this.appContext=e}mount(e,t,n,l={}){const i=this.instances.get(e);if(i)return void Object.assign(i.props,l);const r=o.reactive({...l}),s=o.createApp({render:()=>o.h(n,r)});this.appContext&&(s._context.provides={...this.appContext.provides},s._context.components={...this.appContext.components},s._context.directives={...this.appContext.directives},s._context.config.globalProperties={...this.appContext.config.globalProperties}),this.instances.set(e,{app:s,props:r}),s.mount(t)}mountInstance(e,t,n){const l=o.reactive({...n}),i=o.createApp({render:()=>t(l)});this.appContext&&(i._context.provides={...this.appContext.provides},i._context.components={...this.appContext.components},i._context.directives={...this.appContext.directives},i._context.config.globalProperties={...this.appContext.config.globalProperties}),i.mount(e);let r,s=!1,a=o.nextTick();return{update:e=>{s||(Object.assign(l,e),a=o.nextTick())},whenReady:()=>a,destroy:()=>r||(s=!0,i.unmount(),r=o.nextTick(),a=r,r)}}updateProps(e,t){const o=this.instances.get(e);o&&Object.assign(o.props,t)}unmount(e){const t=this.instances.get(e);t&&(t.app.unmount(),this.instances.delete(e))}unmountByPrefix(e){for(const t of this.instances.keys())t.startsWith(e)&&this.unmount(t)}unmountAll(){for(const[,e]of this.instances)e.app.unmount();this.instances.clear()}get size(){return this.instances.size}has(e){return this.instances.has(e)}}function k(e,t,o){return e.map(e=>{const n={...e},l=t.get("cell",e.id);if(null==l?void 0:l.slot){const t=l.slot;n.cellRenderer=function(e,t,o){const n=e=>({value:e.value,rowData:e.rowData,columnId:e.columnId,rowId:e.rowId}),l=(e,l)=>{const i=o.mountInstance(e,e=>t(e),n(l));return{update:e=>(i.update(n(e)),!0),whenReady:()=>i.whenReady(),destroy:()=>i.destroy()}};return l.__cellRendererKind="lifecycle",l}(e.id,t,o)}const i=t.get("header",e.id);if(null==i?void 0:i.slot){const t=i.slot;n.headerRenderer=function(e,t,o){return n=>{const l=document.createElement("div");l.style.display="contents";const i=`header:${e}`,r={columnId:n.columnId,header:n.header};return o.mount(i,l,{render:()=>t(r)},r),l}}(e.id,t,o)}const r=t.get("editor",e.id);if(null==r?void 0:r.slot){const t=r.slot;n.editor=function(e,t,o){return{type:"custom",renderer:n=>{const l=document.createElement("div");l.style.display="contents";const i=`editor:${e}`,r={value:n.value,rowData:n.rowData,columnId:e,onCommit:n.onCommit,onCancel:n.onCancel};return o.mount(i,l,{render:()=>t(r)},r),l},destroy:()=>{o.unmount(`editor:${e}`)}}}(e.id,t,o)}return n})}const I=Symbol("moz-grid-instance"),F=Symbol("moz-grid-container"),z=Symbol("moz-grid-renderer"),T=Symbol("moz-grid-template-registry"),G=Symbol("moz-grid-filter-module"),$=Symbol("moz-grid-sort-module"),D=Symbol("moz-grid-custom-cell-module"),H=Symbol("moz-grid-bulk-editor-module"),L=((e,t)=>{const o=e.__vccOpts||e;for(const[n,l]of t)o[n]=l;return o})(o.defineComponent({__name:"MozGrid",props:o.mergeModels({sourceRevision:{},height:{default:"100%"},contextMenuConfig:{},emptyState:{},locale:{},sourceFields:{},useMultipleChart:{type:Boolean},chartIncludeGrandTotal:{type:Boolean},chartMap:{},chartConfig:{},useRowGroupSettings:{type:Boolean,default:!0},useFieldSettings:{type:Boolean,default:!0},useFormatSettings:{type:Boolean,default:!0},useLayoutSettings:{type:Boolean,default:!0},useAggregateSettings:{type:Boolean,default:!0},useToolBox:{type:Boolean,default:!0},useToolBoxSetting:{type:Boolean,default:!0},useExtendFooter:{type:Boolean,default:!0},useSort:{type:Boolean,default:!0},useCustomCell:{type:Boolean,default:!0},useContextMenu:{type:Boolean,default:!0},usePivot:{type:Boolean},usePivotBar:{type:Boolean,default:!0},useChart:{type:Boolean},loading:{type:Boolean},useBuiltinTooltip:{type:Boolean,default:!0},toolbarConfig:{},name:{},usePreset:{type:Boolean,default:!0}},{coreConfig:{default:()=>({})},coreConfigModifiers:{}}),emits:o.mergeModels(["ready","data:loaded","data:changed","row:click","row:dblclick","row:pinned","row:unpinned","row:reordered","cell:click","cell:dblclick","cell:change","cell:beforeEdit","cell:editCommitting","cell:editCommitted","cell:tooltip","selection:changed","column:resize","column:reorder","column:pin","column:visibility","sort:changed","header:click","header:sortClick","header:filterClick","filter:changed","scroll","undo:stateChange","clipboard:copy","clipboard:paste","validation:changed","columnGroup:toggle","rowGroup:toggle","rowGroup:batchToggle","contextmenu"],["update:coreConfig"]),setup(e,{expose:t,emit:i}){const r=o.useModel(e,"coreConfig"),a=e,u=i,d=o.ref(),c=o.useSlots(),p=function(){const e=o.getCurrentInstance();if(!e)throw new Error("[MozGridVue] useAppContext는 setup() 내에서만 호출할 수 있습니다.");return e.appContext}(),f=new P,v=function(){const e=o.reactive([]);function t(e,t){return t?`${e}:${t}`:e}return{register(o){const n=e.findIndex(e=>t(e.type,e.fieldId)===t(o.type,o.fieldId));n>=0?e[n]=o:e.push(o)},unregister(o,n){const l=t(o,n),i=e.findIndex(e=>t(e.type,e.fieldId)===l);i>=0&&e.splice(i,1)},get(o,n){const l=t(o,n);return e.find(e=>t(e.type,e.fieldId)===l)},getAll:t=>e.filter(e=>e.type===t)}}(),h=o.shallowRef(null),y=o.shallowRef(null),x=g(),_=b(),C=o.computed(()=>a.locale??r.value.locale??_.value.locale),S=o.computed(()=>r.value.timeZone??_.value.timeZone);s.setGridVueLocale(C.value),o.watch(C,e=>s.setGridVueLocale(e));const M=o.ref();let R=null;const E=o.ref({disabled:!0,hasItem:!1}),B=l.useGridNotificationStore(),G=e=>String(e).padStart(2,"0"),$=()=>{const e=new Date;return`${e.getFullYear()}-${G(e.getMonth()+1)}-${G(e.getDate())} ${G(e.getHours())}:${G(e.getMinutes())}:${G(e.getSeconds())}`},D=()=>`mzc-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,H=e=>null==B?void 0:B.eventMessages.find(t=>{var o;return(null==(o=t.prop_value)?void 0:o.session_id)===e}),L=e=>{if(!B)return;const t=B.eventMessages.findIndex(t=>{var o;return(null==(o=t.prop_value)?void 0:o.session_id)===e});-1!==t&&B.eventMessages.splice(t,1)};let V=null;const O={onExportStart:e=>{B&&(V=D(),B.eventMessages.unshift({noti_type:"progress",header_key:"text-file_download",noti_datetime:$(),noti_sender_id:"",prop_value:{session_id:V,file_name:e,status:"in_progress",progress_per:0,operation_type:"download",remain_time:-1}}))},onExportProgress:e=>{if(!V)return;const t=H(V);if(!(null==t?void 0:t.prop_value))return;let o="number"==typeof e.percent?e.percent:void 0;void 0===o&&"number"==typeof e.rowsProcessed&&"number"==typeof e.totalRows&&e.totalRows>0&&(o=e.rowsProcessed/e.totalRows*100),"number"==typeof o&&(t.prop_value.progress_per=Math.min(99,Math.max(0,Math.floor(o))))},onExportComplete:e=>{if(!V)return;const t=V,o=H(t);(null==o?void 0:o.prop_value)&&((null==e?void 0:e.fileName)&&(o.prop_value.file_name=e.fileName),o.prop_value.status="completed",o.prop_value.progress_per=100),setTimeout(()=>L(t),2e3),V=null},onExportError:e=>{if(!V)return;const t=H(V);(null==t?void 0:t.prop_value)&&(t.prop_value.status="error",t.prop_value.error_message=e.message,t.prop_value.progress_per=0,t.prop_value.remain_time=-1),V=null},onExportCancel:()=>{V&&(L(V),V=null)},onImportComplete:()=>{if(!B)return;const e=D();B.eventMessages.unshift({noti_type:"progress",header_key:"text-file_upload",noti_datetime:$(),noti_sender_id:"",prop_value:{session_id:e,file_name:"",status:"completed",progress_per:100,operation_type:"upload",remain_time:-1}}),setTimeout(()=>L(e),2e3)},onImportError:e=>{B&&B.eventMessages.unshift({noti_type:"progress",header_key:"text-file_upload",noti_datetime:$(),noti_sender_id:"",prop_value:{session_id:D(),file_name:"",status:"error",error_message:e.message,progress_per:0,operation_type:"upload",remain_time:-1}})},onClientImportOpen:()=>{var e;if(!h.value)return;const t=(null==(e=a.contextMenuConfig)?void 0:e.clientImportOptions)??{};x.show(h.value,t)}};o.provide(T,v),o.provide(z,f),o.provide(I,h),o.provide(F,M);const A=o.computed(()=>{const e=a.height??"100%";return{height:"number"==typeof e?`${e}px`:e,width:"100%"}});function j(e){return(t,o)=>{const n={render:()=>{var t,n,l;return("tool-items"===e?null==(t=c[e])?void 0:t.call(c,E.value):"option-menu-items"===e?null==(n=c[e])?void 0:n.call(c,o.props):null==(l=c[e])?void 0:l.call(c))??null}},l=`slot:${e}`;return f.mount(l,t,n,{}),()=>f.unmount(l)}}let q,U;function Z(){const e={...r.value},t=function(){const e=r.value.fields;return e===q||(q=e,U=e?k(e,v,f):void 0),U}();return t&&(e.fields=t),void 0!==C.value&&(e.locale=C.value),e.timeZone=S.value,e}function N(){const e=["tool-left","tool-items","option-popup","tool-bottom","notification","footer","empty-state","option-menu-items"],t={};for(const o of e)c[o]&&(t[o]=j(o));return{useToolBox:a.useToolBox,useToolBoxSetting:a.useToolBoxSetting,useExtendFooter:a.useExtendFooter,useSort:a.useSort,useCustomCell:a.useCustomCell,useContextMenu:a.useContextMenu,useBuiltinTooltip:a.useBuiltinTooltip,usePivot:a.usePivot,usePivotBar:a.usePivotBar,useChart:a.useChart,useRowGroupSettings:a.useRowGroupSettings,useFieldSettings:a.useFieldSettings,useFormatSettings:a.useFormatSettings,useLayoutSettings:a.useLayoutSettings,useAggregateSettings:a.useAggregateSettings,toolbarConfig:a.toolbarConfig,useMultipleChart:a.useMultipleChart,chartIncludeGrandTotal:a.chartIncludeGrandTotal,chartMap:a.chartMap,chartConfig:a.chartConfig,loading:a.loading,locale:C.value,sourceFields:a.sourceFields,contextMenuConfig:a.contextMenuConfig,emptyState:a.emptyState,slots:t,onToolItemsPropsChange:e=>{E.value=e},excelHooks:O}}const Y=["data:changed","row:click","row:dblclick","row:pinned","row:unpinned","row:reordered","cell:click","cell:dblclick","cell:change","cell:beforeEdit","cell:editCommitting","cell:editCommitted","cell:tooltip","selection:changed","column:resize","column:reorder","column:pin","column:visibility","sort:changed","header:click","header:sortClick","header:filterClick","filter:changed","scroll","undo:stateChange","clipboard:copy","clipboard:paste","validation:changed","columnGroup:toggle","rowGroup:toggle","rowGroup:batchToggle","contextmenu"];let K=[];function W(){for(const e of K)try{e()}catch{}K=[]}const X=new WeakSet;function J(e){if(e&&"object"==typeof e){if(X.has(e))return;X.add(e)}}function Q(e){if(!d.value)return null;f.setAppContext(p);const t=o.markRaw(new n.GridChrome(d.value,Z(),{...N(),sourceRevision:a.sourceRevision},e));o.markRaw(t.grid),R=t,h.value=t.grid,M.value=d.value;const l=u;t.on("data:loaded",()=>u("data:loaded"));for(const o of Y)t.on(o,e=>l(o,e));return K.push(t.onConfigChange(()=>{r.value=t.getCoreConfig(r.value),t.syncAppliedConfig(Z())})),t.ready().catch(J),t}let ee=null;const te=new n.LatestSettingsCoordinator({waitUntilSettled:async(e,t)=>{(null==R?void 0:R.waitForReinitSettled)?await R.waitForReinitSettled(t,R.isSourceReplacement(e.config,e.sourceRevision)):await(null==R?void 0:R.ready())},apply:async(e,t)=>{if(!R)return;let o=R;const{reinitRequired:n,completion:l}=o.reconcileCoreConfig(e.config,e.sourceRevision);if(l&&await l,n){const n=o,l=n.captureReinitStateAsync?await n.captureReinitStateAsync(e.config,e.sourceRevision):o.captureReinitState(e.config,e.sourceRevision);if(!t.isCurrent()||R!==o)return;W(),o.destroy(),R=null,f.unmountAll();const i=Q(l);if(!i)return;if(o=i,await o.ready(),R!==o)return;await o.restoreReinitState(l)}else await o.ready();t.isCurrent()&&R===o&&ee!==o&&(ee=o,E.value=o.getToolItemsProps(),u("ready",o.grid,o),y.value=o.grid)},onError:J});function oe(){te.request({config:Z(),sourceRevision:a.sourceRevision})}o.onMounted(()=>{Q(),oe(),o.watch(()=>{const e=r.value;e.data,e.fields;const t={_locale:C.value,_timeZone:S.value,_sourceRevision:a.sourceRevision};for(const o in e)"data"!==o&&"fields"!==o&&(t[o]=e[o]);return t},()=>oe(),{deep:!0}),o.watch(()=>{var e,t,o,n;return{useToolBox:a.useToolBox,useToolBoxSetting:a.useToolBoxSetting,useExtendFooter:a.useExtendFooter,useSort:a.useSort,useCustomCell:a.useCustomCell,useContextMenu:a.useContextMenu,useBuiltinTooltip:a.useBuiltinTooltip,usePivot:a.usePivot,usePivotBar:a.usePivotBar,useRowGroupSettings:a.useRowGroupSettings,useFieldSettings:a.useFieldSettings,useFormatSettings:a.useFormatSettings,useLayoutSettings:a.useLayoutSettings,useAggregateSettings:a.useAggregateSettings,toolbarConfig:{filter:{disabled:null==(t=null==(e=a.toolbarConfig)?void 0:e.filter)?void 0:t.disabled,hidden:null==(n=null==(o=a.toolbarConfig)?void 0:o.filter)?void 0:n.hidden}}}},e=>null==R?void 0:R.setUIOptions(e)),o.watch(()=>a.loading,e=>null==R?void 0:R.setUIOptions({loading:e}),{immediate:!0}),o.watch(()=>a.sourceFields,e=>null==R?void 0:R.setSourceFields(e),{immediate:!0}),o.watch(()=>a.contextMenuConfig,e=>null==R?void 0:R.setContextMenuConfig(e),{deep:!0}),o.watch(()=>a.chartConfig,e=>{var t;return null==(t=null==R?void 0:R.setChartConfig)?void 0:t.call(R,e)},{deep:!0})}),o.onBeforeUnmount(()=>{te.destroy(),W(),null==R||R.destroy(),R=null,h.value=null,f.unmountAll()}),m({usePreset:a.usePreset,name:o.toRef(a,"name"),type:"pivot"===r.value.mode?"mozPivotGrid":"mozFlatGrid",gridInstance:h,readyGrid:y,getSourceFields:()=>{const e=r.value.fields??[],t=new Map(e.map(e=>[e.field??e.id,e.id]));return((null==R?void 0:R.pivot.sourceFields)??[]).map(e=>({id:t.get(e.field)??e.field,field:e.field,header:e.header,dataType:e.dataType}))},getCustomCellState:()=>(null==R?void 0:R.customCell.getCustomCell())??null,setCustomCellState:e=>{null==R||R.customCell.setCustomCell(e??null)},getColumnFormatState:()=>(null==R?void 0:R.columnFormat.getConfig())??null,setColumnFormatState:e=>{null==R||R.columnFormat.setConfig(e??null)},getViewOptionsState:()=>{var e;return(null==(e=null==R?void 0:R.getPresetViewState)?void 0:e.call(R))??null},setViewOptionsState:e=>{var t;null==(t=null==R?void 0:R.setPresetViewState)||t.call(R,e)}});return t(new Proxy({},{get(e,t){if("chrome"===t)return R;const o=R;if(!o)return;const n=o[t];return"function"==typeof n?n.bind(o):n},has:(e,t)=>"chrome"===t||!!R&&t in R})),(e,t)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",{ref_key:"hostRef",ref:d,class:"moz-grid-chrome",style:o.normalizeStyle(A.value)},null,4),o.renderSlot(e.$slots,"default",{},void 0,!0),h.value?(o.openBlock(),o.createBlock(w,{key:0})):o.createCommentVNode("",!0)],64))}}),[["__scopeId","data-v-05d34927"]]),V=o.defineComponent({name:"CellTemplate",props:{field:{type:String,required:!0}},setup(e){const t=o.inject(T),n=o.useSlots();return t?(o.onMounted(()=>{n.default&&t.register({type:"cell",fieldId:e.field,slot:n.default})}),o.onBeforeUnmount(()=>{t.unregister("cell",e.field)}),()=>null):()=>null}}),O=o.defineComponent({name:"HeaderTemplate",props:{field:{type:String,required:!0}},setup(e){const t=o.inject(T),n=o.useSlots();return t?(o.onMounted(()=>{n.default&&t.register({type:"header",fieldId:e.field,slot:n.default})}),o.onBeforeUnmount(()=>{t.unregister("header",e.field)}),()=>null):()=>null}}),A=o.defineComponent({name:"CellEditor",props:{field:{type:String,required:!0}},setup(e){const t=o.inject(T),n=o.useSlots();return t?(o.onMounted(()=>{n.default&&t.register({type:"editor",fieldId:e.field,slot:n.default})}),o.onBeforeUnmount(()=>{t.unregister("editor",e.field)}),()=>null):()=>null}}),j=o.defineComponent({name:"DetailTemplate",props:{minHeight:{type:Number,default:100},maxHeight:{type:Number},singleExpand:{type:Boolean,default:!1},keepDetailRows:{type:Boolean,default:!0}},setup(e){const t=o.inject(I),n=o.inject(z),l=o.useSlots();return t&&n?(o.onMounted(()=>{const o=t.value;if(!o||!l.default)return;const i=l.default;o.masterDetail.setConfig({minHeight:e.minHeight,maxHeight:e.maxHeight,singleExpand:e.singleExpand,keepMasterDetailRows:e.keepDetailRows,renderer:(e,t,o)=>{const l=`detail:${o}`,r={parentData:t,dataIndex:o};return n.mount(l,e,{render:()=>i(r)},r),()=>{n.unmount(l)}}})}),o.onBeforeUnmount(()=>{null==n||n.unmountByPrefix("detail:")}),()=>null):()=>null}}),q="ps-group-template-dispose",U="ps-group-template-host",Z=o.defineComponent({name:"GroupTemplate",setup(){const e=o.inject(I),t=o.inject(z),n=o.useSlots();if(!e||!t)return()=>null;const l=new Map,i=e=>{const t=l.get(e);if(t)return l.delete(e),t.destroy()},r=e=>{null==e||e.formatRow.removeHandler("_groupTemplate");for(const t of[...l.keys()])i(t)};let s=null;return o.watch(e,e=>{e!==s&&(r(s),s=e??null,e&&(e=>{if(!n.default)return;const o=n.default;e.formatRow.addHandler("_groupTemplate",e=>{if("group-row"!==e.type)return;const n=e.ctx,r=n.element;if(!r)return;const s={groupKey:n.column,groupValue:n.value,level:n.level,count:n.itemCount,isExpanded:!n.collapsed},a=l.get(r);if(a&&r.classList.contains(U))return void a.update(s);const u=a?i(r):void 0,d=r.classList.contains(U)?r:document.createElement("span");d!==r&&r.replaceChildren(d);const c=t.mountInstance(d,e=>o(e),s),p=e=>{var t,o,n;null==(n=e.detail)||n.waitUntil(null==(o=null==(t=l.get(r))?void 0:t.whenReady)?void 0:o.call(t))},m=e=>{const t=i(r),o=e.detail;o?o.waitUntil(t):null==t||t.catch(e=>{})};l.set(r,{update:c.update,whenReady:()=>Promise.all([u,c.whenReady()]).then(()=>{}),destroy:()=>(r.removeEventListener("ps-group-template-ready",p),r.removeEventListener(q,m),c.destroy())}),r.addEventListener("ps-group-template-ready",p),r.addEventListener(q,m,{once:!0})})})(e))},{immediate:!0}),o.onBeforeUnmount(()=>{r(s),s=null}),()=>null}});let N=!1;function Y(e){return e?(Object.prototype.hasOwnProperty.call(e,"formatHeaderRow")||Object.defineProperty(e,"formatHeaderRow",{configurable:!0,get:()=>(N||(N=!0),e.formatHeader)}),e):null}const K=o.defineComponent({__name:"MozGridVue",props:{name:{},useToolBox:{type:Boolean,default:!0},useToolBoxSetting:{type:Boolean,default:!0},useExtendFooter:{type:Boolean,default:!0},useSort:{type:Boolean,default:!0},useCustomCell:{type:Boolean,default:!0},contextMenuConfig:{default:()=>({})},useContextMenu:{type:Boolean,default:!0},loading:{type:Boolean},emptyState:{},fields:{},data:{},mode:{},pivotRowFields:{},pivotColumnFields:{},pivotValueFields:{},height:{default:"100%"},keyFields:{},theme:{},rowHeight:{},headerHeight:{},showHeader:{type:Boolean,default:!0},resizableColumns:{type:Boolean,default:!0},reorderableColumns:{type:Boolean,default:!0},showRowHeader:{type:[Boolean,Object]},rowHeader:{type:[Boolean,Object]},rowSelection:{},cellSelection:{default:()=>({mode:"range"})},cellSelectionImpliesRows:{type:Boolean},editable:{type:Boolean,default:!1},tooltipMode:{default:"overflow"},alternatingRows:{type:Boolean,default:!0},autoFitColumns:{type:Boolean},dynamicRowHeights:{type:Boolean,default:!1},reorderableRows:{type:Boolean,default:!1},locale:{},engine:{},loader:{},preventKeyEdit:{type:Boolean,default:!0},showStatusBar:{type:Boolean},showDragHandleColumn:{type:Boolean},undoStack:{},formatRow:{},translations:{},rowStyle:{},headerStyle:{},rowHeightChangeThreshold:{},group:{},columnGroups:{},rowTemplate:{}},emits:["ready","data:loaded","row:click","row:dblclick","row:pinned","row:unpinned","row:reordered","cell:click","cell:dblclick","cell:change","cell:beforeEdit","cell:editCommitting","cell:editCommitted","cell:tooltip","selection:changed","column:resize","column:reorder","column:pin","column:visibility","sort:changed","filter:changed","undo:stateChange","clipboard:copy","clipboard:paste","validation:changed","columnGroup:toggle","scroll","contextmenu"],setup(e,{expose:t,emit:l}){const i=e,r=l,s=o.computed(()=>{const e={...i};for(const o of n.WRAPPER_EXTRA_KEYS)delete e[o];delete e.name,delete e.locale;const t=!0===e.useSummaryFooter;return delete e.useSummaryFooter,t&&void 0===e.summaryRow&&(e.summaryRow="pinnedBottom"),e}),a=o.computed(()=>{const e=i,t={};for(const o of n.WRAPPER_EXTRA_KEYS)void 0!==e[o]&&(t[o]=e[o]);return void 0!==e.locale&&(t.locale=e.locale),t}),u=Object.fromEntries(["ready","data:loaded","row:click","row:dblclick","row:pinned","row:unpinned","row:reordered","cell:click","cell:dblclick","cell:change","cell:beforeEdit","cell:editCommitting","cell:editCommitted","cell:tooltip","selection:changed","column:resize","column:reorder","column:pin","column:visibility","sort:changed","filter:changed","undo:stateChange","clipboard:copy","clipboard:paste","validation:changed","columnGroup:toggle","scroll","contextmenu"].map(e=>[e,(...t)=>r(e,...t)]));u.ready=e=>r("ready",Y(e));const d=o.ref(null);function c(e){d.value=e}function p(){return d.value??null}const m={};return Object.defineProperties(m,{grid:{enumerable:!0,get:()=>{var e;return Y(null==(e=p())?void 0:e.grid)}},core:{enumerable:!0,get:()=>m},filterModule:{enumerable:!0,get:()=>{var e;return null==(e=p())?void 0:e.filter}},sortModule:{enumerable:!0,get:()=>{var e;return null==(e=p())?void 0:e.sort}},customCellModule:{enumerable:!0,get:()=>{var e;return null==(e=p())?void 0:e.customCell}},bulkEditorModule:{enumerable:!0,get:()=>{var e;return null==(e=p())?void 0:e.bulkEditor}}}),m.refresh=async()=>{var e,t;return null==(t=null==(e=p())?void 0:e.grid)?void 0:t.refresh()},m.loadData=async e=>{var t,o;return null==(o=null==(t=p())?void 0:t.grid)?void 0:o.loadData(e)},m.sort=async e=>{var t,o;return null==(o=null==(t=p())?void 0:t.grid)?void 0:o.sort(e)},m.filter=async e=>{var t,o;return null==(o=null==(t=p())?void 0:t.grid)?void 0:o.filter(e)},t(m),(e,t)=>(o.openBlock(),o.createBlock(L,o.mergeProps({ref:c,coreConfig:s.value},a.value,{name:i.name},o.toHandlers(o.unref(u))),o.createSlots({default:o.withCtx(()=>[o.renderSlot(e.$slots,"default")]),_:2},[e.$slots["tool-left"]?{name:"tool-left",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"tool-left")]),key:"0"}:void 0,e.$slots["tool-items"]?{name:"tool-items",fn:o.withCtx(t=>[o.renderSlot(e.$slots,"tool-items",o.normalizeProps(o.guardReactiveProps(t)))]),key:"1"}:void 0,e.$slots.notification?{name:"notification",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"notification")]),key:"2"}:void 0,e.$slots.footer?{name:"footer",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"footer")]),key:"3"}:void 0,e.$slots.customState?{name:"empty-state",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"customState")]),key:"4"}:void 0]),1040,["coreConfig","name"]))}}),W=o.defineComponent({__name:"MozPivotVue",props:{name:{},data:{},rowFields:{},columnFields:{},valueFields:{},height:{default:"100%"},showRowSubTotals:{type:Boolean,default:!1},showRowGrandTotals:{type:Boolean,default:!0},showColumnSubTotals:{type:Boolean,default:!1},showColumnGrandTotals:{type:Boolean,default:!0},trackSourceRows:{type:Boolean,default:!1},showHeader:{type:Boolean,default:!0},alternatingRows:{type:Boolean,default:!1},tooltipMode:{default:"overflow"},rowSelection:{},cellSelection:{default:()=>({mode:"range"})},cellSelectionImpliesRows:{type:Boolean},useToolBox:{type:Boolean,default:!0},useToolBoxSetting:{type:Boolean,default:!0},useFilter:{type:Boolean,default:!0},useSort:{type:Boolean,default:!0},useCustomCell:{type:Boolean,default:!0},useExtendFooter:{type:Boolean,default:!0},useSummaryFooter:{type:Boolean,default:!1},useContextMenu:{type:Boolean,default:!0},contextMenuConfig:{},useChart:{type:Boolean,default:!1},fields:{},availableFields:{},useMultipleChart:{type:Boolean,default:!0},chartIncludeGrandTotal:{type:Boolean,default:!1},chartMap:{},loading:{type:Boolean},emptyState:{}},emits:["ready","data:loaded","filter:changed","pivot:configured","pivot:toggled","update:rowFields","update:columnFields","update:valueFields"],setup(e,{expose:t,emit:l}){const i=e,r=l,s=o.computed(()=>{const e={...i};for(const o of n.WRAPPER_EXTRA_KEYS)delete e[o];delete e.name,delete e.locale;const t=!0===e.useSummaryFooter;return delete e.useSummaryFooter,t&&void 0===e.summaryRow&&(e.summaryRow="pinnedBottom"),delete e.availableFields,delete e.useFilter,e.mode="pivot",e}),a=o.computed(()=>{const e=i,t={};for(const o of n.WRAPPER_EXTRA_KEYS)void 0!==e[o]&&(t[o]=e[o]);return void 0!==e.locale&&(t.locale=e.locale),t.sourceFields=e.sourceFields??e.availableFields??e.fields,t}),u=Object.fromEntries(["ready","data:loaded","filter:changed","pivot:toggled"].map(e=>[e,(...t)=>r(e,...t)]));function d(e){var t,o,n;const l=e;r("update:rowFields",l.rowFields??[]),r("update:columnFields",l.columnFields??[]),r("update:valueFields",l.valueFields??[]);const i=null==(n=null==(o=null==(t=m())?void 0:t.pivot)?void 0:o.getRawConfig)?void 0:n.call(o);i&&r("pivot:configured",i)}u.ready=e=>r("ready",Y(e));const c=o.ref(null);function p(e){c.value=e}function m(){return c.value??null}function f(){var e,t;return null==(t=null==(e=m())?void 0:e.grid)?void 0:t.pivot}const g=o.computed({get:()=>{var e,t;return(null==(t=null==(e=m())?void 0:e.chart)?void 0:t.visible)??!1},set:e=>{var t,o;return null==(o=null==(t=m())?void 0:t.chart)?void 0:o.setVisible(e)}}),v={};return Object.defineProperties(v,{grid:{enumerable:!0,get:()=>{var e;return Y(null==(e=m())?void 0:e.grid)}},core:{enumerable:!0,get:()=>v},pivotApi:{enumerable:!0,get:()=>f()??null},filterModule:{enumerable:!0,get:()=>{var e;return null==(e=m())?void 0:e.filter}},sortModule:{enumerable:!0,get:()=>{var e;return null==(e=m())?void 0:e.sort}},customCellModule:{enumerable:!0,get:()=>{var e;return null==(e=m())?void 0:e.customCell}},showChart:{enumerable:!0,get:()=>g.value,set:e=>{g.value=e}}}),v.refresh=async()=>{var e,t;return null==(t=null==(e=m())?void 0:e.grid)?void 0:t.refresh()},v.setConfig=async e=>{var t;return null==(t=f())?void 0:t.setConfig(e)},v.getResult=()=>{var e;return(null==(e=f())?void 0:e.getResult())??null},v.expandAll=async()=>{var e;return null==(e=f())?void 0:e.expandAllRows()},v.collapseAll=async()=>{var e;return null==(e=f())?void 0:e.collapseAllRows()},v.expandToLevel=async e=>{var t;return null==(t=f())?void 0:t.expandRowToLevel(e)},v.toggleChart=()=>{g.value=!g.value},t(v),(e,t)=>(o.openBlock(),o.createBlock(L,o.mergeProps({ref:p,coreConfig:s.value},a.value,{name:i.name,"onUpdate:coreConfig":d},o.toHandlers(o.unref(u))),o.createSlots({default:o.withCtx(()=>[o.renderSlot(e.$slots,"default")]),_:2},[e.$slots["tool-left"]?{name:"tool-left",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"tool-left")]),key:"0"}:void 0,e.$slots["tool-items"]?{name:"tool-items",fn:o.withCtx(t=>[o.renderSlot(e.$slots,"tool-items",o.normalizeProps(o.guardReactiveProps(t)))]),key:"1"}:void 0,e.$slots.footer?{name:"footer",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"footer")]),key:"2"}:void 0,e.$slots.customState?{name:"empty-state",fn:o.withCtx(()=>[o.renderSlot(e.$slots,"customState")]),key:"3"}:void 0]),1040,["coreConfig","name"]))}});Object.defineProperty(exports,"jsonEditor",{enumerable:!0,get:()=>n.jsonEditor}),exports.GridNotificationKey=l.GridNotificationKey,exports.provideGridNotification=l.provideGridNotification,exports.useGridNotificationStore=l.useGridNotificationStore,exports.ExcelDataType=s.DataType,exports.FileParameter=s.FileParameter,exports.enUS=s.enUS,exports.getGridVueLocale=s.getGridVueLocale,exports.getGridVueLocaleCode=s.getGridVueLocaleCode,exports.jaJP=s.jaJP,exports.koKR=s.koKR,exports.normalizeGridVueLocale=s.normalizeGridVueLocale,exports.openToast=s.openToast,exports.setGridVueLocale=s.setGridVueLocale,exports.showMessage=s.showMessage,exports.useExcelDownloadStore=s.useExcelDownloadStore,exports.useExcelStore=s.useExcelStore,exports.useExcelUploadStore=s.useExcelUploadStore,exports.zhCN=s.zhCN,Object.defineProperty(exports,"ROW_HEADER_COLUMN_ID",{enumerable:!0,get:()=>u.ROW_HEADER_COLUMN_ID}),Object.defineProperty(exports,"UndoStack",{enumerable:!0,get:()=>u.UndoStack}),Object.defineProperty(exports,"getCornerCell",{enumerable:!0,get:()=>u.getCornerCell}),Object.defineProperty(exports,"getRowHeaderCell",{enumerable:!0,get:()=>u.getRowHeaderCell}),exports.CellEditor=A,exports.CellTemplate=V,exports.ClientExcelUploadController=_,exports.ClientExcelUploadPopup=w,exports.DetailTemplate=j,exports.GRID_BULK_EDITOR_MODULE_KEY=H,exports.GRID_CUSTOM_CELL_MODULE_KEY=D,exports.GRID_FILTER_MODULE_KEY=G,exports.GRID_INSTANCE_KEY=I,exports.GRID_RENDERER_KEY=z,exports.GRID_SORT_MODULE_KEY=$,exports.GRID_TEMPLATE_REGISTRY_KEY=T,exports.GroupTemplate=Z,exports.HeaderTemplate=O,exports.MOZ_GRID_CONFIG_KEY=S,exports.MOZ_GRID_LOCALE_KEY=E,exports.MozGrid=L,exports.MozGridConfigProvider=R,exports.MozGridLocaleProvider=B,exports.MozGridVue=K,exports.MozPivotVue=W,exports.StreamingParameter=class{constructor(e){t(this,"params"),t(this,"loading",!0),t(this,"size",0),t(this,"offset",0),t(this,"onReceived"),t(this,"onClosed"),t(this,"onHandleError"),t(this,"onCancelClick"),t(this,"_complete",!1),this.params=e}get ipcObject(){return this.params}get percent(){return 0===this.offset||0===this.size?0:Math.round(this.offset/this.size*100)}get complete(){return this._complete}received(e){this.offset++,this.onReceived&&this.onReceived(e)}closed(e=!0){this._complete=e,this.onClosed&&this.onClosed()}handleError(e,t=!0){this._complete=t,this.onHandleError&&this.onHandleError(e)}},exports.UserLayoutInstance=d,exports.VueRenderer=P,exports.downloadBlob=function(e,t){const o=URL.createObjectURL(e),n=document.createElement("a");n.href=o,n.download=t,n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),setTimeout(()=>URL.revokeObjectURL(o),0)},exports.exportCsv=async function(e){let t,o;if("pivot"===e.pivot.getMode()){const n=await e.pivot.getDataMatrix();if(!n)return;t=n.headers,o=n.rows}else{const n=await e.getExportData({scope:"all"});if(!n)return;const{headers:l,rows:i}=n,r=l.map(e=>e.id);t=l.map(e=>e.header),o=i.map(e=>r.map(t=>e[t]))}const n=[];n.push(t.map(h).join(","));for(const a of o)n.push(a.map(h).join(","));const l="\ufeff"+n.join("\r\n"),i=new Blob([l],{type:"text/csv;charset=utf-8;"}),r=URL.createObjectURL(i),s=document.createElement("a");s.href=r,s.download=`export_${(new Date).toISOString().slice(0,10)}.csv`,s.click(),URL.revokeObjectURL(r)},exports.generateSessionId=v,exports.pickFile=function(e=".xlsx"){return new Promise(t=>{const o=document.createElement("input");o.type="file",o.accept=e,o.style.display="none";let n=!1;const l=()=>{o.parentNode&&o.parentNode.removeChild(o)};o.onchange=()=>{if(n)return;n=!0;const e=o.files&&o.files.length>0?o.files[0]:null;l(),t(e)};const i=()=>{window.removeEventListener("focus",i),setTimeout(()=>{n||(n=!0,l(),t(null))},300)};window.addEventListener("focus",i),document.body.appendChild(o),o.click()})},exports.runClientExport=async function(e,t,o){var n;const l=`${t.exportFileName??"export"}_${a().format("YYYYMMDD")}.xlsx`,i=v();o&&o.eventMessages.unshift({noti_type:"progress",header_key:"text-file_download",noti_datetime:a().format("YYYY-MM-DD HH:mm:ss"),noti_sender_id:"",prop_value:{session_id:i,file_name:l,status:"in_progress",progress_per:0,operation_type:"download",remain_time:-1}});try{if(await e.io.saveExcelToFile({scope:"all",includeHeaders:!0,suggestedName:l,fallbackToDownload:!0,sheetSplit:"auto",includePinnedRows:!0,onProgress:e=>{if(!o)return;const t=o.eventMessages.find(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});if(!(null==t?void 0:t.prop_value))return;let n="number"==typeof e.percent?e.percent:void 0;void 0===n&&"number"==typeof e.rowsProcessed&&"number"==typeof e.totalRows&&e.totalRows>0&&(n=e.rowsProcessed/e.totalRows*100),"number"==typeof n&&(t.prop_value.progress_per=Math.min(99,Math.max(0,Math.floor(n))))},...t.clientExportOptions??{}}),o){const e=o.eventMessages.find(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});(null==e?void 0:e.prop_value)&&(e.prop_value.status="completed",e.prop_value.progress_per=100),setTimeout(()=>{const e=o.eventMessages.findIndex(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});-1!==e&&o.eventMessages.splice(e,1)},2e3)}null==(n=t.onClientExportComplete)||n.call(t,new Blob)}catch(r){if(r instanceof DOMException&&"AbortError"===r.name){if(o){const e=o.eventMessages.findIndex(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});-1!==e&&o.eventMessages.splice(e,1)}return}if(o){const e=o.eventMessages.find(e=>{var t;return(null==(t=e.prop_value)?void 0:t.session_id)===i});(null==e?void 0:e.prop_value)&&(e.prop_value.status="error",e.prop_value.error_message=r instanceof Error?r.message:String(r),e.prop_value.progress_per=0,e.prop_value.remain_time=-1)}}},exports.useClientExcelStore=g,exports.useMozGridConfig=b,exports.useMozGridLocale=function(){const e=o.inject(E,null);return e||o.computed(()=>{})},exports.useUserLayoutModule=c;
|
package/dist/index.js
CHANGED
|
@@ -192,6 +192,15 @@ const useUserLayoutModule = () => inject(USER_LAYOUT_PROVIDER_KEY, {
|
|
|
192
192
|
},
|
|
193
193
|
currentPreset: ref(null)
|
|
194
194
|
});
|
|
195
|
+
function withoutLayoutExcludedOptions(config) {
|
|
196
|
+
if (!config.current || !("nullsPosition" in config.current)) return config;
|
|
197
|
+
const { nullsPosition: _excluded, ...current } = config.current;
|
|
198
|
+
return { ...config, current };
|
|
199
|
+
}
|
|
200
|
+
function keepLayoutExcludedOptions(config, grid) {
|
|
201
|
+
if (!config.current) return config;
|
|
202
|
+
return { ...config, current: { ...config.current, nullsPosition: grid.getNullsPosition() } };
|
|
203
|
+
}
|
|
195
204
|
function useGridPreset(options) {
|
|
196
205
|
if (options.usePreset === false) return;
|
|
197
206
|
const { register } = useUserLayoutModule();
|
|
@@ -200,7 +209,7 @@ function useGridPreset(options) {
|
|
|
200
209
|
const grid = options.gridInstance.value;
|
|
201
210
|
if (!grid) return null;
|
|
202
211
|
const def = {
|
|
203
|
-
...stampPresetVersion(grid.getConfig()),
|
|
212
|
+
...stampPresetVersion(withoutLayoutExcludedOptions(grid.getConfig())),
|
|
204
213
|
customCellConfig: ((_a = options.getCustomCellState) == null ? void 0 : _a.call(options)) ?? null,
|
|
205
214
|
columnFormatConfig: ((_b = options.getColumnFormatState) == null ? void 0 : _b.call(options)) ?? null
|
|
206
215
|
};
|
|
@@ -227,7 +236,9 @@ function useGridPreset(options) {
|
|
|
227
236
|
}
|
|
228
237
|
const beforeCore = invalidOwner();
|
|
229
238
|
if (beforeCore) return beforeCore;
|
|
230
|
-
if (migrated.config)
|
|
239
|
+
if (migrated.config) {
|
|
240
|
+
await applyPresetCoreConfig(grid, keepLayoutExcludedOptions(migrated.config, grid), migrated.missing);
|
|
241
|
+
}
|
|
231
242
|
const extras = [
|
|
232
243
|
[options.setColumnFormatState, migrated.columnFormatConfig],
|
|
233
244
|
[options.setCustomCellState, migrated.customCellConfig],
|
package/docs/manual/reference.md
CHANGED
|
@@ -226,7 +226,8 @@ grid.on('row:click', ({ rowIndex }) => {
|
|
|
226
226
|
| `showHeader` | `boolean` | `true` | 헤더 표시 여부 |
|
|
227
227
|
| `rowHeader` | `boolean \| RowHeaderConfig` | `false` | 좌측 행 헤더 컬럼(`_rowHeader`) 표시. `true`면 빈 셀(너비 40, 체크박스 트리거 시 체크박스), 객체면 `width`/`cellRenderer`/`headerRenderer`/`includeGroupRows`로 커스터마이즈 (→ [RowHeaderConfig](#rowheaderconfig)). `rowSelection.trigger`가 `'rowHeader'`/`'checkbox'`면 미지정이어도 자동 ON. (구 `showRowHeader` — deprecated alias 유지) |
|
|
228
228
|
| `showStatusBar` | `boolean` | `true` | 상태 바 표시 |
|
|
229
|
-
| `summaryRow` | `'none' \| 'pinnedTop' \| 'pinnedBottom'` | `'none'` | 집계(총합계) 행 표시 위치. `FieldDef.aggregate` 가 지정된 컬럼을 모아 core 가 행을 직접 소유하며, `getConfig()` 에 실려 레이아웃 프리셋으로
|
|
229
|
+
| `summaryRow` | `'none' \| 'pinnedTop' \| 'pinnedBottom'` | `'none'` | 집계(총합계) 행 표시 위치. `FieldDef.aggregate` 가 지정된 컬럼을 모아 core 가 행을 직접 소유하며, `getConfig()` 에 실려 레이아웃 프리셋으로 저장·복원된다. `'pinnedBottom'` 은 행이 뷰포트를 다 못 채우면 마지막 행 바로 아래, 넘치면 뷰포트 하단에 고정되며, 그룹·트리 펼침/접힘·필터·데이터 교체로 행 수가 바뀌면 위치를 다시 계산한다(데이터 행을 가리지 않음). `'pinnedTop'` 은 헤더 바로 아래에 고정되고 본문 행은 그 아래에서 시작한다 |
|
|
230
|
+
| `nullsPosition` | `'last' \| 'first' \| 'natural'` | `'last'` | 정렬에서 빈 값(null/undefined) 위치 — 그리드 전체 적용. `'last'` 방향과 관계없이 맨 뒤(Excel·Wijmo 와 같음), `'first'` 맨 앞, `'natural'` 오름차순 앞·내림차순 뒤. 명시 정렬과 그룹 값·피벗 행/열 헤더 기본 순서에 모두 적용(정렬 없는 플랫·트리는 원본 순서). 실행 중 변경 `setNullsPosition()`. `getConfig()` 에 실리지만 래퍼 사용자 레이아웃에는 저장하지 않는다. 자세한 규칙은 [정렬에서 빈 값 위치](#정렬에서-빈-값-위치-nullsposition) |
|
|
230
231
|
| `alternatingRows` | `boolean` | `false` | 줄무늬 행 스타일 |
|
|
231
232
|
| `rowStyle` | `string` | — | 행 높이 alias: `height:Npx`만 추출 (일반 CSS 적용 아님). truthy `rowHeight`가 우선 |
|
|
232
233
|
| `headerStyle` | `string` | — | 헤더 높이 alias: `height:Npx`만 추출 (일반 CSS 적용 아님). truthy `headerHeight`가 우선 |
|
|
@@ -839,6 +840,8 @@ grid.clearSearch(); // 종료
|
|
|
839
840
|
|---|---|---|
|
|
840
841
|
| `repaintRow(rowId: RowId)` | `void` | `repaintRows([rowId])`의 단일 행 편의 함수 |
|
|
841
842
|
| `getSummaryRow()` | `SummaryRowPosition` | 현재 합계 행 위치: `'none' \| 'pinnedTop' \| 'pinnedBottom'` |
|
|
843
|
+
| `setNullsPosition(position: NullsPosition)` | `Promise<void>` | 정렬에서 빈 값 위치 변경(`'last' \| 'first' \| 'natural'`). 지금 화면 순서(정렬·그룹·피벗)를 다시 계산하고 서버 행 모델은 다시 요청한다. 정렬 상태·`sort:changed` 는 그대로. 허용 값이 아니면 `PS005` 경고 후 무시 |
|
|
844
|
+
| `getNullsPosition()` | `NullsPosition` | 현재 빈 값 위치(기본 `'last'`) |
|
|
842
845
|
| `registerShortcut(combo: string, handler: () => void \| Promise<void>)` | `Unsubscribe` | 단축키 등록. 같은 combo는 기존/기본 단축키를 덮어씀. 반환 해제 함수를 소비처 lifecycle에서 호출 |
|
|
843
846
|
| `hasShortcut(combo: string)` | `boolean` | 해당 단축키 등록 여부 |
|
|
844
847
|
|
|
@@ -960,7 +963,7 @@ interface GridConfigExport {
|
|
|
960
963
|
| `fields` 에 없는 컬럼 | baseline 값, 순서는 저장본 컬럼 뒤(baseline 순) |
|
|
961
964
|
| `sorts`/`sortGroups`, `filters`/`filterGroups` | 생성 시점(빈 정렬·필터) |
|
|
962
965
|
| `rowGroupConfig`, `columnGroups`, `treeConfig`, `masterDetailConfig` | 생성 시 config 값 |
|
|
963
|
-
| UI 옵션(아래 목록), `summaryRow`, `locale`, `translations`, `rowModel`, `endReachedThresholdRows` | 생성 시 값(미지정이면 라이브러리 기본값) |
|
|
966
|
+
| UI 옵션(아래 목록), `summaryRow`, `nullsPosition`, `locale`, `translations`, `rowModel`, `endReachedThresholdRows` | 생성 시 값(미지정이면 라이브러리 기본값) |
|
|
964
967
|
| `mode` | 생성 시 모드 |
|
|
965
968
|
| 피벗 하위 옵션(`rowFields`/`valueFields` 를 준 경우) | 라이브러리 기본값 — 피벗 정의는 `pivot.setConfig` 로 통째 교체되는 한 단위. `keep` 이면 현재 피벗 설정 값 유지 |
|
|
966
969
|
|
|
@@ -995,7 +998,7 @@ interface GridConfigExport {
|
|
|
995
998
|
| **뷰 상태** | `sorts`, `filters` |
|
|
996
999
|
| **서버/수동 row-model** | `rowModel`, `endReachedThresholdRows` |
|
|
997
1000
|
| **트리/디테일** | `treeConfig`, `masterDetailConfig` |
|
|
998
|
-
| **UI 옵션** | `theme`, `rowHeight`, `headerHeight`, `rowSelection`, `cellSelection`, `cellSelectionImpliesRows`, `editable`, `tooltipMode`, `alternatingRows`, `showHeader`, `resizableColumns`, `reorderableColumns`, `rowHeader`, `reorderableRows`, `showDragHandleColumn`, `autoFitColumns`, `showStatusBar`, `summaryRow`, `locale`, `translations`, `keyFields` 등 |
|
|
1001
|
+
| **UI 옵션** | `theme`, `rowHeight`, `headerHeight`, `rowSelection`, `cellSelection`, `cellSelectionImpliesRows`, `editable`, `tooltipMode`, `alternatingRows`, `showHeader`, `resizableColumns`, `reorderableColumns`, `rowHeader`, `reorderableRows`, `showDragHandleColumn`, `autoFitColumns`, `showStatusBar`, `summaryRow`, `nullsPosition`, `locale`, `translations`, `keyFields` 등 |
|
|
999
1002
|
|
|
1000
1003
|
**제외되는 항목**
|
|
1001
1004
|
|
|
@@ -1688,7 +1691,7 @@ interface AggregateContext {
|
|
|
1688
1691
|
- 함수형 컬럼 aggregate가 하나라도 있으면 선언된 문자열 컬럼 aggregate를 모두(숨김·배너 아래 컬럼 포함) 계산만 합니다. 이 값들은 배너 글자에 나오지 않습니다.
|
|
1689
1692
|
- 함수형 aggregate는 프리셋(JSON)에 저장되지 않고 코드가 소유합니다 — `applyConfig`가 지우거나 문자열로 바꾸지 않으며, wrapper 집계 탭은 "사용자 함수"로 표시하고 변경을 막습니다.
|
|
1690
1693
|
- **선택 영역 집계**(`rows.selectionAggregates()`·`selection:changed`의 `aggregates`·컨텍스트 메뉴): 함수형 컬럼은 그 컬럼 셀이 선택된 행들을 **하나의 그룹처럼** 보고 함수를 적용합니다. `columns[]` 항목은 `aggregate: 'custom'`, `value` = 함수 값(`formattedValue`는 그 컬럼 mask 적용), `count` = 숫자 셀 수(기존 의미)입니다. `ctx.sum('x')` 등은 선택 범위에 `x` 셀이 없어도(숨김 컬럼 포함) 선택된 **행** 기준이고 `ctx.group`은 없습니다. 읽을 수 있는 조합은 고정 합계 행과 같이 컬럼 정의의 문자열 `aggregate`이며, 미선언 조합은 `console.error`(PS312) 후 빈 값입니다. 화면 밖 선택 행·그룹/트리 모드(데이터 행만)·Worker 모드 모두 같은 값이고, 컬럼 전체 선택(Ctrl+Space/Ctrl+A)은 표시 중인 전체 데이터 행으로 계산합니다(이때만 행을 한 번 받아 옵니다). `total`(합계·평균·개수·최소·최대)은 기존대로 **선택 셀 값** 기준입니다. wrapper 컨텍스트 메뉴는 `custom`에 함수 라벨 없이 `헤더 값`만 표시합니다.
|
|
1691
|
-
- 그룹 정렬 `basis: 'aggregate'`와 그룹 결과 필터(`basis: 'aggregate'`·수식 `GROUP(id, "aggregate", by)`)는 `rowGroupConfig.aggregates`의 **함수형 항목도** 공개 ID로 참조할 수 있습니다. 엔진은 함수를 실행하지 않으므로 메인 스레드가 그룹별 함수 값을 계산해 엔진에 다시 질의합니다(필터 참조 시 필터 전 snapshot A 값 1회 + 정렬 참조 시 1회 추가 질의 — 대용량에서 그만큼 느려집니다). 오름/내림·null 위치(
|
|
1694
|
+
- 그룹 정렬 `basis: 'aggregate'`와 그룹 결과 필터(`basis: 'aggregate'`·수식 `GROUP(id, "aggregate", by)`)는 `rowGroupConfig.aggregates`의 **함수형 항목도** 공개 ID로 참조할 수 있습니다. 엔진은 함수를 실행하지 않으므로 메인 스레드가 그룹별 함수 값을 계산해 엔진에 다시 질의합니다(필터 참조 시 필터 전 snapshot A 값 1회 + 정렬 참조 시 1회 추가 질의 — 대용량에서 그만큼 느려집니다). 오름/내림·null 위치(`nullsPosition`, 기본 맨 뒤)는 문자열 집계 정렬과 같고, Main/Worker·lazy/dense 결과가 같으며 접기/펼치기·필터·편집 뒤에도 유지됩니다. 컬럼 정의 `aggregate`(자기 칸 집계)는 정렬·필터 ID로 참조할 수 없습니다(문자열·함수 모두 기존과 같음).
|
|
1692
1695
|
- `scope`가 붙은 `rowGroupConfig.aggregates` 항목이 있어도 그룹행 자기 칸 집계(컬럼 정의 `aggregate` — 문자열·함수)는 모든 레벨에 남습니다. scope는 배너 집계의 표시 레벨만 정합니다(자기 칸 컬럼의 `rowGroupConfig` 항목도 scope 단계 배너에만 나옵니다).
|
|
1693
1696
|
|
|
1694
1697
|
```ts
|
|
@@ -1747,12 +1750,40 @@ await grid.rowGroup.setConfig({
|
|
|
1747
1750
|
저장본 0.4 → 0.5 마이그레이션은 옛 그룹 정렬 `column`/객체 `by`를 새 모델로 변환하고,
|
|
1748
1751
|
피벗 `SortState.byValue`는 동일한 scalar 값 그대로 `by`로 개명합니다. 피벗 집계/정렬 의미는 변하지 않습니다.
|
|
1749
1752
|
|
|
1750
|
-
그룹 내부 데이터 행의 일반 정렬은 별도로 유지됩니다.
|
|
1751
|
-
|
|
1753
|
+
그룹 내부 데이터 행의 일반 정렬은 별도로 유지됩니다.
|
|
1754
|
+
|
|
1755
|
+
#### 정렬에서 빈 값 위치 (nullsPosition)
|
|
1756
|
+
|
|
1757
|
+
일반·계산 필드·그룹·트리·피벗 정렬에서
|
|
1758
|
+
null/undefined(빈 값) 위치는 그리드 설정 **`nullsPosition`**이 정합니다(기본 `'last'`).
|
|
1759
|
+
|
|
1760
|
+
| `nullsPosition` | 오름차순(ASC) | 내림차순(DESC) | 같은 동작 |
|
|
1761
|
+
|---|---|---|---|
|
|
1762
|
+
| `'last'` (기본) | 맨 뒤 | 맨 뒤 | Excel, Wijmo `sortNulls: Last`, SQL `NULLS LAST` |
|
|
1763
|
+
| `'first'` | 맨 앞 | 맨 앞 | SQL `NULLS FIRST` |
|
|
1764
|
+
| `'natural'` | 맨 앞 | 맨 뒤 | 빈 값을 가장 작은 값으로 봄 (AG Grid·MUI X 기본, 이전 moz-ui-grid 기본) |
|
|
1765
|
+
|
|
1766
|
+
```ts
|
|
1767
|
+
// 예) amount = [2, null, 1]
|
|
1768
|
+
// 'last' asc → 1, 2, null desc → 2, 1, null
|
|
1769
|
+
// 'first' asc → null, 1, 2 desc → null, 2, 1
|
|
1770
|
+
// 'natural' asc → null, 1, 2 desc → 2, 1, null
|
|
1771
|
+
const grid = new PureSheet(el, { ...config, nullsPosition: 'last' });
|
|
1772
|
+
await grid.setNullsPosition('first'); // 실행 중 변경 — 지금 화면 순서를 다시 계산(정렬 상태는 그대로)
|
|
1773
|
+
grid.getNullsPosition(); // 'first'
|
|
1774
|
+
```
|
|
1775
|
+
|
|
1776
|
+
- 명시 정렬뿐 아니라 **정렬하지 않았을 때의 순서**에도 적용됩니다: 그룹 값 기본 순서(그룹 이름 오름차순),
|
|
1777
|
+
피벗 행·열 헤더 기본 순서, 그룹 정렬(`basis: 'groupValue'`/`'aggregate'`), 피벗 후정렬, 필터 고유값 목록.
|
|
1778
|
+
정렬이 없는 플랫·트리는 원본 순서를 유지합니다.
|
|
1779
|
+
- 그리드 전체에 하나만 둡니다(정렬 키·컬럼별 지정은 없음).
|
|
1780
|
+
- `getConfig()`/`applyConfig()` 왕복 대상입니다(UI 옵션 묶음). Vue 래퍼의 **사용자 레이아웃 프리셋(`useGridPreset`)에는 저장하지 않으며**,
|
|
1781
|
+
프리셋을 불러와도 현재 값을 유지합니다.
|
|
1782
|
+
- 서버 행 모델은 요청 최상위의 `nullsPosition` 으로 받습니다(아래 `FetchRangeRequest`). 바꾸면 처음부터 다시 요청합니다.
|
|
1783
|
+
|
|
1752
1784
|
두 값이 모두 null/undefined이면 동률이며, 다음 정렬 키를 비교하고 모든 키가 같으면 기존 순서를 유지합니다.
|
|
1753
1785
|
빈 문자열(`''`), 공백 문자열, `0`, `false`는 null/undefined로 취급하지 않습니다.
|
|
1754
1786
|
`sortKey`가 있으면 원본 값이 아닌 변환된 키를 비교합니다.
|
|
1755
|
-
이는 이전 ASC 뒤/DESC 앞 기본정책의 변경이며, 저장된 정렬 방향에도 새 기본정책이 적용됩니다.
|
|
1756
1787
|
wrapper 정렬 패널의 **그룹 정렬 → 정렬 기준**에서도
|
|
1757
1788
|
‘그룹 이름’을 선택할 수 있습니다. 정렬 규칙이 없을 때와 새 규칙을 추가할 때 모두
|
|
1758
1789
|
**그룹 이름 오름차순**이 기본입니다. 기존에 저장한 하위 행 개수·집계 정렬은 그대로 유지됩니다.
|
|
@@ -4088,6 +4119,10 @@ interface AddedRow {
|
|
|
4088
4119
|
rowId: string | number;
|
|
4089
4120
|
data: Row;
|
|
4090
4121
|
insertIndex: number;
|
|
4122
|
+
/** 데이터 순서에서 바로 앞 행 id. 맨 앞 null, 모르면 undefined */
|
|
4123
|
+
afterRowId?: string | number | null;
|
|
4124
|
+
/** 데이터 순서에서 바로 뒤 행 id. 맨 끝 null, 모르면 undefined */
|
|
4125
|
+
beforeRowId?: string | number | null;
|
|
4091
4126
|
}
|
|
4092
4127
|
|
|
4093
4128
|
interface ModifiedRow {
|
|
@@ -4110,6 +4145,22 @@ interface DeletedRow {
|
|
|
4110
4145
|
}
|
|
4111
4146
|
```
|
|
4112
4147
|
|
|
4148
|
+
**저장 전 새 행의 위치 — `afterRowId` / `beforeRowId`**
|
|
4149
|
+
|
|
4150
|
+
백엔드가 행 순서를 저장할 때 "어느 행 바로 뒤(앞)에 넣었는지"를 기준 행 id 로 넘길 수 있습니다. `getAll()` 을 부를 때 그 순간의 이웃으로 계산합니다(추가할 때 드는 비용 없음).
|
|
4151
|
+
|
|
4152
|
+
- 기준은 **그리드 데이터 순서**(원본 행 사이에 새 행을 끼운 순서)입니다. 화면 정렬·필터와 무관합니다. 드래그로 순서를 바꿨으면 `reorderedOrder` 기준입니다.
|
|
4153
|
+
- **삭제 표시한 행은 건너뜁니다**(저장하면 사라지므로). 맨 앞/맨 끝이면 `null`.
|
|
4154
|
+
- 새 행끼리 붙어 있으면 서로의 id 를 가리킵니다. `added` 를 `afterRowId` 사슬 순서대로 넣으면 그리드와 같은 순서가 됩니다.
|
|
4155
|
+
- Worker(`loader.worker`)·서버 행 모델에서는 메인 스레드에 원본이 없어, 이웃이 원본 행이면 `undefined` 입니다(이웃이 새 행이거나 맨 앞이면 채워짐).
|
|
4156
|
+
|
|
4157
|
+
```ts
|
|
4158
|
+
// 원본 A, B, C — B 를 선택하고 X 를 위에, Y 를 아래에 추가 → A, X, B, Y, C
|
|
4159
|
+
grid.changes.getAll().added;
|
|
4160
|
+
// [{ rowId: 'X', afterRowId: 'A', beforeRowId: 'B', ... },
|
|
4161
|
+
// { rowId: 'Y', afterRowId: 'B', beforeRowId: 'C', ... }]
|
|
4162
|
+
```
|
|
4163
|
+
|
|
4113
4164
|
#### PerformanceTiming
|
|
4114
4165
|
|
|
4115
4166
|
```typescript
|
|
@@ -4791,6 +4842,7 @@ interface GridConfigSnapshot {
|
|
|
4791
4842
|
autoFitColumns?: boolean;
|
|
4792
4843
|
showStatusBar?: boolean;
|
|
4793
4844
|
summaryRow?: 'none' | 'pinnedTop' | 'pinnedBottom';
|
|
4845
|
+
nullsPosition?: 'last' | 'first' | 'natural';
|
|
4794
4846
|
locale?: string;
|
|
4795
4847
|
translations?: PartialTranslationMap;
|
|
4796
4848
|
keyFields?: string[];
|
|
@@ -5656,6 +5708,7 @@ new PureSheet(container, {
|
|
|
5656
5708
|
|---|---|
|
|
5657
5709
|
| `startRow`, `endRow` | 요청 구간 `[startRow, endRow)` — 항상 블록 경계 |
|
|
5658
5710
|
| `sortModel`, `filterModel` | 현재 정렬·필터 상태(`SortState[]`, `ServerFilterState[]`). **서버가 적용**. 수식 필터(`operator: 'formula'`)에는 `expression` 과 함께 수식 트리 `ast`(JSON)가 실려, 서버가 문자열을 해석하지 않고 트리를 따라 SQL 등으로 바꿀 수 있습니다. JS 서버는 `createRowFilterPredicate(filterModel, { columnTypes })` 로 그리드와 같은 판정 함수를 쓸 수 있습니다(아래) |
|
|
5711
|
+
| `nullsPosition` | 정렬에서 빈 값(null) 위치 — 그리드 설정 `nullsPosition` 값(`'last'` \| `'first'` \| `'natural'`). `sortModel` 항목에는 따로 싣지 않으니 서버가 모든 정렬 키에 같은 규칙을 씁니다: `'last'` = 모든 키 `NULLS LAST`, `'first'` = 모든 키 `NULLS FIRST`, `'natural'` = 오름차순 키 `NULLS FIRST`·내림차순 키 `NULLS LAST`. 정렬 없이 서버가 그룹 순서를 정할 때도 같은 규칙입니다. 그룹·검색·경로 요청에도 실립니다. `grid.setNullsPosition()` 으로 바꾸면 처음부터 다시 요청합니다 |
|
|
5659
5712
|
| `groupColumns`, `groupKeys` | 행 그룹이 있으면 그룹 열(레벨 순)과 이 행들이 속한 그룹의 값 경로(예: `['서울', '강남구']`). 서버는 이 그룹 안의 행만 돌려줍니다. 그룹이 없으면 둘 다 `[]`. 객체 값 그룹 열이면 `groupKeys` 에는 객체 대신 `objectKey` 값이 옵니다(→ [서버 계약](#객체-값-열점-표기-필드의-서버-계약)) |
|
|
5660
5713
|
| `parentIds` | 트리(`treeConfig`)면 이 행들의 부모 노드 ID 경로(최상위부터). `[]` = 최상위 노드, `['A', 'A-0']` = A 아래 A-0 의 자식들. 트리가 아니면 `[]` |
|
|
5661
5714
|
| `aggregateModel?` | 트리에서 `treeConfig.aggregates` 나 부모가 자손을 포함하는 체크박스 열(`checkboxIncludesDescendants`)이 있을 때만 — 노드별 **자기 + 자손**(서브트리) 집계 요청 (아래 트리 참조) |
|
|
@@ -1021,6 +1021,7 @@ const cleanupPopup = () => {
|
|
|
1021
1021
|
| `current` (모드·컬럼 너비/고정/숨김/순서/집계·정렬·필터·행 그룹·트리/디테일·피벗 축·테마·`summaryRow` 등) | `grid.getConfig()` | core | `grid.applyConfig(config, { missing })` |
|
|
1022
1022
|
| `current` 의 UI 옵션(`rowHeight`·`headerHeight`·`editable`·`tooltipMode`·`alternatingRows`·`showHeader`·`showStatusBar`·선택 모드 등) | `grid.getConfig()` | core | core `applyConfig`의 runtime UI 복원 대상. 모든 생성 옵션의 복원을 뜻하지 않음. `showStatusBar`는 core 지원과 별개로 wrapper 생성 설정에서 자체 Footer를 위해 false로 override하며 prop reconcile 대상에서도 제외 |
|
|
1023
1023
|
| `snapshot` | `grid.getConfig()` | core | 컬럼 reset baseline |
|
|
1024
|
+
| ~~`current.nullsPosition`~~ | 저장하지 않음 | — | 정렬에서 빈 값 위치는 화면(메뉴)이 정하는 그리드 설정이라 사용자 레이아웃에서 뺀다. 불러올 때도 저장본 값·`missing: 'reset'` 과 관계없이 **현재 값 유지**. core `getConfig()`/`applyConfig()` 에는 그대로 있다 |
|
|
1024
1025
|
| `customCellConfig` | `getCustomCellState() ?? null` | wrapper | `setCustomCellState` |
|
|
1025
1026
|
| `columnFormatConfig` | `getColumnFormatState() ?? null` | wrapper | `setColumnFormatState` |
|
|
1026
1027
|
| `viewOptionsConfig` | `getViewOptionsState()` = `GridChrome.getPresetViewState()` (툴바 펼침·푸터·그룹 패널·피벗 바) | wrapper | `setViewOptionsState` = `GridChrome.setPresetViewState` |
|