@vmscloud/moz-ui-grid-vue 0.2.20 → 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 m=null;function f(){if(m)return m;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 m=l,l}function g(){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 v(e){const t=null==e?"":String(e);return t.includes(",")||t.includes('"')||t.includes("\n")?`"${t.replace(/"/g,'""')}"`:t}const h={mode:"replace",conflictStrategy:"update",autoCommit:!1};function y(){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 x{constructor(e){t(this,"popup",null),t(this,"grid",null),t(this,"options",{...h}),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={...h},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`
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) await applyPresetCoreConfig(grid, migrated.config, migrated.missing);
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],
@@ -227,6 +227,7 @@ grid.on('row:click', ({ rowIndex }) => {
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
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 위치(오름차순 맨 앞)는 문자열 집계 정렬과 같고, Main/Worker·lazy/dense 결과가 같으며 접기/펼치기·필터·편집 뒤에도 유지됩니다. 컬럼 정의 `aggregate`(자기 칸 집계)는 정렬·필터 ID로 참조할 수 없습니다(문자열·함수 모두 기존과 같음).
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
- null/undefined는 **오름차순(ASC)에서는 앞, 내림차순(DESC)에서는 뒤**에 위치합니다.
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` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vmscloud/moz-ui-grid-vue",
3
- "version": "0.2.20",
3
+ "version": "0.2.21",
4
4
  "description": "MozGrid - Vue 3 wrapping library for @vmscloud/moz-ui-grid-core",
5
5
  "license": "ISC",
6
6
  "type": "module",