@toolbox-web/grid 3.8.2 → 3.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/all.js +1 -1
- package/all.js.map +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/lib/core/defaults.d.ts +1 -1
- package/lib/core/internal/aria.d.ts +1 -1
- package/lib/core/internal/config-manager.d.ts +0 -4
- package/lib/core/types.d.ts +6 -0
- package/lib/features/registry.js +1 -1
- package/lib/plugins/clipboard/clipboard-plugin.d.ts +2 -3
- package/lib/plugins/clipboard/index.js +1 -1
- package/lib/plugins/clipboard/index.js.map +1 -1
- package/lib/plugins/column-virtualization/index.js +1 -1
- package/lib/plugins/column-virtualization/index.js.map +1 -1
- package/lib/plugins/context-menu/index.js +1 -1
- package/lib/plugins/context-menu/index.js.map +1 -1
- package/lib/plugins/editing/index.js +1 -1
- package/lib/plugins/editing/index.js.map +1 -1
- package/lib/plugins/export/index.js +1 -1
- package/lib/plugins/export/index.js.map +1 -1
- package/lib/plugins/filtering/index.js +1 -1
- package/lib/plugins/filtering/index.js.map +1 -1
- package/lib/plugins/grouping-columns/index.js +1 -1
- package/lib/plugins/grouping-columns/index.js.map +1 -1
- package/lib/plugins/grouping-rows/index.js +1 -1
- package/lib/plugins/grouping-rows/index.js.map +1 -1
- package/lib/plugins/master-detail/index.js +1 -1
- package/lib/plugins/master-detail/index.js.map +1 -1
- package/lib/plugins/multi-sort/index.js +1 -1
- package/lib/plugins/multi-sort/index.js.map +1 -1
- package/lib/plugins/pinned-columns/index.js +1 -1
- package/lib/plugins/pinned-columns/index.js.map +1 -1
- package/lib/plugins/pinned-rows/index.js +1 -1
- package/lib/plugins/pinned-rows/index.js.map +1 -1
- package/lib/plugins/pivot/index.js +1 -1
- package/lib/plugins/pivot/index.js.map +1 -1
- package/lib/plugins/print/index.js +1 -1
- package/lib/plugins/print/index.js.map +1 -1
- package/lib/plugins/reorder-columns/index.js +1 -1
- package/lib/plugins/reorder-columns/index.js.map +1 -1
- package/lib/plugins/responsive/index.js +1 -1
- package/lib/plugins/responsive/index.js.map +1 -1
- package/lib/plugins/row-drag-drop/index.js +1 -1
- package/lib/plugins/row-drag-drop/index.js.map +1 -1
- package/lib/plugins/row-drag-drop/row-drag-drop-plugin.d.ts +1 -0
- package/lib/plugins/row-drag-drop/types.d.ts +3 -2
- package/lib/plugins/selection/index.js +1 -1
- package/lib/plugins/selection/index.js.map +1 -1
- package/lib/plugins/selection/selection-plugin.d.ts +2 -2
- package/lib/plugins/server-side/index.js +1 -1
- package/lib/plugins/server-side/index.js.map +1 -1
- package/lib/plugins/shell/index.js +1 -1
- package/lib/plugins/shell/index.js.map +1 -1
- package/lib/plugins/sticky-rows/index.js +1 -1
- package/lib/plugins/sticky-rows/index.js.map +1 -1
- package/lib/plugins/tooltip/index.js +1 -1
- package/lib/plugins/tooltip/index.js.map +1 -1
- package/lib/plugins/tree/index.js +1 -1
- package/lib/plugins/tree/index.js.map +1 -1
- package/lib/plugins/undo-redo/index.js +1 -1
- package/lib/plugins/undo-redo/index.js.map +1 -1
- package/lib/plugins/visibility/index.js +1 -1
- package/lib/plugins/visibility/index.js.map +1 -1
- package/package.json +1 -1
- package/umd/grid.all.umd.js +1 -1
- package/umd/grid.all.umd.js.map +1 -1
- package/umd/grid.umd.js +1 -1
- package/umd/grid.umd.js.map +1 -1
- package/umd/plugins/clipboard.umd.js +1 -1
- package/umd/plugins/clipboard.umd.js.map +1 -1
- package/umd/plugins/editing.umd.js +1 -1
- package/umd/plugins/editing.umd.js.map +1 -1
- package/umd/plugins/grouping-rows.umd.js +1 -1
- package/umd/plugins/grouping-rows.umd.js.map +1 -1
- package/umd/plugins/row-drag-drop.umd.js +1 -1
- package/umd/plugins/row-drag-drop.umd.js.map +1 -1
- package/umd/plugins/selection.umd.js +1 -1
- package/umd/plugins/selection.umd.js.map +1 -1
- package/umd/plugins/tooltip.umd.js +1 -1
- package/umd/plugins/tooltip.umd.js.map +1 -1
- package/umd/plugins/tree.umd.js +1 -1
- package/umd/plugins/tree.umd.js.map +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("../../core/constants"),require("../../core/internal/aria"),require("../../core/internal/keyboard"),require("../../core/internal/sanitize"),require("../../core/internal/value-accessor"),require("../../core/plugin/base-plugin"),require("../../core/internal/diagnostics")):"function"==typeof define&&define.amd?define(["exports","../../core/constants","../../core/internal/aria","../../core/internal/keyboard","../../core/internal/sanitize","../../core/internal/value-accessor","../../core/plugin/base-plugin","../../core/internal/diagnostics"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TbwGridPlugin_editing={},e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid)}(this,function(e,t,i,n,r,s,o,d){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function l(e){return t=>{const i=e.editorParams,n=document.createElement("input");n.type="date",t.value instanceof Date?n.valueAsDate=t.value:"string"==typeof t.value&&t.value&&(n.value=t.value.split("T")[0]),i?.min&&(n.min=i.min),i?.max&&(n.max=i.max),i?.placeholder&&(n.placeholder=i.placeholder);return n.addEventListener("change",()=>{var r;if(n.value)"string"==typeof t.value?t.commit(n.value):t.commit(n.valueAsDate);else if(e.nullable)t.commit(null);else{const e=i?.default;"string"==typeof t.value||"string"==typeof e?t.commit("string"==typeof e?e:`${(r=e??new Date).getFullYear()}-${String(r.getMonth()+1).padStart(2,"0")}-${String(r.getDate()).padStart(2,"0")}`):t.commit(e instanceof Date?e:new Date)}}),n.addEventListener("keydown",e=>{"Escape"===e.key&&t.cancel()}),n}}var a="__tbw_null__";function c(e){switch(e.type){case"number":return function(e){return t=>{const i=e.editorParams,n=document.createElement("input");n.type="number",n.value=null!=t.value?String(t.value):"",void 0!==i?.min&&(n.min=String(i.min)),void 0!==i?.max&&(n.max=String(i.max)),void 0!==i?.step&&(n.step=String(i.step)),i?.placeholder&&(n.placeholder=i.placeholder);const r=()=>{""===n.value?e.nullable?t.commit(null):t.commit(i?.min??0):t.commit(Number(n.value))};return n.addEventListener("blur",r),n.addEventListener("keydown",e=>{"Enter"===e.key&&r(),"Escape"===e.key&&t.cancel()}),n}}(e);case"boolean":return e=>{const t=document.createElement("input");return t.type="checkbox",t.checked=!!e.value,t.addEventListener("change",()=>e.commit(t.checked)),t};case"date":return l(e);case"select":return function(e){return t=>{const i=e.editorParams,n=document.createElement("select");if(e.multi&&(n.multiple=!0),e.nullable||i?.includeEmpty){const r=document.createElement("option");r.value=e.nullable?a:"",r.textContent=e.nullable?i?.emptyLabel??"(Blank)":i?.emptyLabel??"",null==t.value&&(r.selected=!0),n.appendChild(r)}(function(e){const t=e.options;return t?"function"==typeof t?t():t:[]})(e).forEach(i=>{const r=document.createElement("option");r.value=String(i.value),r.textContent=i.label,e.multi&&Array.isArray(t.value)&&t.value.includes(i.value)?r.selected=!0:e.multi||t.value!==i.value||(r.selected=!0),n.appendChild(r)});const r=()=>{if(e.multi){const e=Array.from(n.selectedOptions).map(e=>e.value);t.commit(e)}else e.nullable&&n.value===a?t.commit(null):t.commit(n.value)};return n.addEventListener("change",r),n.addEventListener("blur",r),n.addEventListener("keydown",e=>{"Escape"===e.key&&t.cancel()}),n}}(e);default:return function(e){return t=>{const i=e.editorParams,n=document.createElement("input");n.type="text",n.value=null!=t.value?String(t.value):"",void 0!==i?.maxLength&&(n.maxLength=i.maxLength),i?.pattern&&(n.pattern=i.pattern),i?.placeholder&&(n.placeholder=i.placeholder);const r=()=>{const i=n.value;""!==i?"string"==typeof t.value&&i===t.value.replace(/[\n\r]/g,"")||("number"==typeof t.value?t.commit(Number(i)):t.commit(i)):e.nullable?t.commit(null):t.commit("")};return n.addEventListener("blur",r),n.addEventListener("keydown",e=>{"Enter"===e.key&&r(),"Escape"===e.key&&t.cancel()}),n}}(e)}}function u(e,t){return""===e?t?.nullable?null:(t?.editorParams)?.min??0:Number(e)}function h(e,t,i){if(!(e instanceof HTMLInputElement))return function(e,t,i){return""===e.value||"number"!==t?.type&&"number"!=typeof i?null==i&&""===e.value?t?.nullable?null:"":e.value:Number(e.value)}(e,t,i);switch(e.type){case"checkbox":return e.checked;case"number":return u(e.value,t);case"date":return function(e,t,i){return e.value?"string"==typeof i?e.value:e.valueAsDate:t?.nullable?null:"string"==typeof i?i||(new Date).toISOString().slice(0,10):i??new Date}(e,t,i);default:return function(e,t,i){return"number"==typeof i?u(e.value,t):""===e.value&&null==i?t?.nullable?null:"":"string"==typeof i&&e.value===i.replace(/[\n\r]/g,"")?i:e.value}(e,t,i)}}var f=class{#e=new Map;#t;constructor(e){this.#t=e}setInvalid(e,t,i=""){let n=this.#e.get(e);n||(n=new Map,this.#e.set(e,n)),n.set(t,i),this.#t(e,t,!0)}clearInvalid(e,t){const i=this.#e.get(e);i&&(i.delete(t),0===i.size&&this.#e.delete(e)),this.#t(e,t,!1)}clearRowInvalid(e){const t=this.#e.get(e);if(t){const i=Array.from(t.keys());this.#e.delete(e),i.forEach(t=>this.#t(e,t,!1))}}clearAllInvalid(){const e=Array.from(this.#e.entries());this.#e.clear(),e.forEach(([e,t])=>{t.forEach((t,i)=>this.#t(e,i,!1))})}isCellInvalid(e,t){return this.#e.get(e)?.has(t)??!1}getInvalidMessage(e,t){return this.#e.get(e)?.get(t)}hasInvalidCells(e){const t=this.#e.get(e);return!!t&&t.size>0}getInvalidFields(e){return new Map(this.#e.get(e)??[])}};function g(e,t,i){const n=e.get(t);return!!n&&!w(n,i)}function w(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(typeof e!=typeof t)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!w(e[i],t[i]))return!1;return!0}if("object"==typeof e){const i=e,n=t,r=Object.keys(i),s=Object.keys(n);if(r.length!==s.length)return!1;for(const e of r)if(!w(i[e],n[e]))return!1;return!0}return!1}function m(e,t,i){e.set(t,structuredClone(i))}function p(e,t,i){const n=e.get(t);if(!n)return!1;const r=n,s=i;for(const o of Object.keys(r))s[o]=r[o];return!0}var v=class{baselines=new Map;baselinesWereCaptured=!1;newRowIds=new Set;changedRowIds=new Set;committedDirtyRowIds=new Set;clear(){this.changedRowIds.clear(),this.committedDirtyRowIds.clear(),this.baselines.clear(),this.newRowIds.clear(),this.baselinesWereCaptured=!1}capture(e,t){const i=this.baselines.size;!function(e,t,i){for(const n of t)try{const t=i(n);null==t||e.has(t)||e.set(t,structuredClone(n))}catch{}}(this.baselines,e,t),this.baselines.size>i&&(this.baselinesWereCaptured=!0)}drainCapturedFlag(){return this.baselinesWereCaptured?(this.baselinesWereCaptured=!1,this.baselines.size):null}isRowDirty(e,t){return g(this.baselines,e,t)}hasAnyDirty(e){if(this.newRowIds.size>0)return!0;for(const[t]of this.baselines){const i=e(t);if(i&&g(this.baselines,t,i))return!0}return!1}isCellDirty(e,t,i){return function(e,t,i,n){const r=e.get(t);return!!r&&!w((0,s.readCellField)(r,n),(0,s.readCellField)(i,n))}(this.baselines,e,t,i)}getRowDirtyState(e,t){const i=this.newRowIds.has(e);return{isNew:i,isCommittedDirty:!i&&this.committedDirtyRowIds.has(e)&&g(this.baselines,e,t),hasBaseline:this.baselines.has(e)}}markPristine(e,t){m(this.baselines,e,t),this.newRowIds.delete(e),this.changedRowIds.delete(e),this.committedDirtyRowIds.delete(e)}rebaselineCell(e,t,i){const n=this.baselines.get(e);n&&(0,s.writeCellField)(n,t,i)}markNew(e){this.newRowIds.add(e),this.committedDirtyRowIds.add(e)}markDirty(e){this.changedRowIds.add(e),this.committedDirtyRowIds.add(e)}markAllPristine(e){for(const[t]of this.baselines){const i=e(t);i&&m(this.baselines,t,i)}this.newRowIds.clear(),this.changedRowIds.clear(),this.committedDirtyRowIds.clear()}getOriginalRow(e){return function(e,t){const i=e.get(t);return i?structuredClone(i):void 0}(this.baselines,e)}hasBaseline(e){return this.baselines.has(e)}getDirtyRows(e){const t=[];for(const[i,n]of this.baselines){const r=e(i);r&&g(this.baselines,i,r)&&t.push({id:i,original:structuredClone(n),current:r})}for(const i of this.newRowIds){const n=e(i);n&&t.push({id:i,original:void 0,current:n})}return t}getDirtyRowIds(e){const t=[];for(const[i]of this.baselines){const n=e(i);n&&g(this.baselines,i,n)&&t.push(i)}for(const i of this.newRowIds)t.push(i);return t}revertRow(e,t){const i=p(this.baselines,e,t);return i&&(this.changedRowIds.delete(e),this.committedDirtyRowIds.delete(e)),i}revertAll(e){for(const[t]of this.baselines){const i=e(t);i&&p(this.baselines,t,i)}this.changedRowIds.clear(),this.committedDirtyRowIds.clear()}getChangedRows(e){const t=[];for(const i of this.changedRowIds){const n=e(i);n&&t.push(n)}return t}getChangedRowIds(){return Array.from(this.changedRowIds)}isRowChanged(e){return this.changedRowIds.has(e)}},y='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])';function b(e){return e?.closest?.('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')??null}function E(e){return"string"==typeof e&&("__proto__"!==e&&"constructor"!==e&&"prototype"!==e)}function R(e){}function C(e,t){return!1===e.onBeforeEditClose?.(t)}function I(e,t,i,n,r,o,l,a){if(!n.editable)return;if(o.classList.contains("editing"))return;const{grid:u,isGridMode:f,config:g,editingCells:w,editorValueCallbacks:m}=e;let p;try{p=u.getRowId?.(t)}catch{}const v=p?e=>u.updateRow(p,e,"cascade"):R,I=E(n.field)?(0,s.readCellField)(t,n.field):void 0;o.classList.add("editing"),w.add(`${i}:${r}`);const k=a??o.parentElement;k&&function(e){e.__editingCellCount=(e.__editingCellCount??0)+1,e.setAttribute("data-has-editing","")}(k);let A=!1;const x=r=>{if(A||!f&&!e.isEditSessionActive())return;const s=p?u._getRowEntry(p):void 0,o=s?.row??t,d=s?.index??i;e.commitCellValue(d,n,r,o)},_=()=>{if(A=!0,E(n.field)){const e=(p?u._getRowEntry(p):void 0)?.row??t;(0,s.writeCellField)(e,n.field,I)}},S=document.createElement("div");S.className="tbw-editor-host",o.firstElementChild&&u.__frameworkAdapter?.releaseCell?.(o),o.innerHTML="",o.appendChild(S),S.addEventListener("keydown",t=>{if(!t.defaultPrevented){if("Enter"===t.key){const e=t.target;if(e&&"true"===e.getAttribute?.("aria-expanded")&&e.hasAttribute?.("aria-controls"))return}if("Enter"===t.key){const r=t.target,s=b(r);if(s&&s!==r)return;if(f){t.preventDefault();const e=S.querySelector("input,textarea,select");return void(e&&x(h(e,n,I)))}if(C(g,t))return;t.stopPropagation(),t.preventDefault(),A=!0,e.exitRowEdit(i,!1)}if("Escape"===t.key){if(f)return t.stopPropagation(),void t.preventDefault();if(C(g,t))return;t.stopPropagation(),t.preventDefault(),_(),e.exitRowEdit(i,!0)}}});const M=n,G=M.__editorTemplate,D=function(e,t){if(t.editor)return t.editor;if(t.__editorTemplate)return"template";if(!t.type)return;const i=e.effectiveConfig?.typeDefaults;if(i?.[t.type]?.editor)return i[t.type].editor;const n=e.__frameworkAdapter;if(n?.getTypeDefault){const i=n.getTypeDefault(t.type,e._hostElement);if(i?.editor)return i.editor}}(u,M)??c(n),L=I,T=`${i}:${n.field}`,F=[];m.set(T,e=>{for(const t of F)t(e)});const q=e=>{F.push(e)};if("template"===D&&G)!function(e,t,i,n,r,s,o,d,l){const a=i.__editorTemplate;if(!a)return;const c=a.cloneNode(!0),u=i.__compiledEditor;u?c.innerHTML=u({row:n,value:r,field:i.field,column:i,commit:s,cancel:o}):c.querySelectorAll("*").forEach(e=>{1===e.childNodes.length&&e.firstChild?.nodeType===Node.TEXT_NODE&&(e.textContent=e.textContent?.replace(/{{\s*value\s*}}/g,null==r?"":String(r)).replace(/{{\s*row\.([a-zA-Z0-9_]+)\s*}}/g,(e,t)=>{if(!E(t))return"";const i=n[t];return null==i?"":String(i)})||"")});const f=c.querySelector("input,textarea,select");if(f){f instanceof HTMLInputElement&&"checkbox"===f.type?f.checked=!!r:f.value=String(r??"");let t=!1;f.addEventListener("blur",()=>{t||s(h(f,i,r))}),f.addEventListener("keydown",n=>{const d=n;if("Enter"===d.key){if(C(e.config,d))return;d.stopPropagation(),d.preventDefault(),t=!0,s(h(f,i,r)),e.exitRowEdit(l,!1)}if("Escape"===d.key){if(C(e.config,d))return;d.stopPropagation(),d.preventDefault(),o(),e.exitRowEdit(l,!0)}}),f instanceof HTMLInputElement&&"checkbox"===f.type&&f.addEventListener("change",()=>s(f.checked)),d||setTimeout(()=>f.focus({preventScroll:!0}),0)}t.appendChild(c)}(e,S,M,t,I,x,_,l,i),q(e=>{if(null!=e&&"object"==typeof e)return;const t=S.querySelector("input,textarea,select");t&&(t instanceof HTMLInputElement&&"checkbox"===t.type?t.checked=!!e:t.value=String(e??""))});else if("string"==typeof D){const e=document.createElement(D);e.value=L,e.addEventListener("change",()=>x(e.value)),q(t=>{e.value=t}),S.appendChild(e),l||queueMicrotask(()=>{S.querySelector(y)?.focus({preventScroll:!0})})}else if("function"==typeof D){const i=D({row:t,rowId:p??"",value:L,field:n.field,column:n,commit:x,cancel:_,updateRow:v,onValueChange:q,grid:e.grid});"string"==typeof i?(S.innerHTML=i,function(e,t,i,n){const r=e.querySelector("input,textarea,select");r&&(r.addEventListener("blur",()=>{i(h(r,t,n))}),r instanceof HTMLInputElement&&"checkbox"===r.type?r.addEventListener("change",()=>i(r.checked)):r instanceof HTMLSelectElement&&r.addEventListener("change",()=>i(h(r,t,n))))}(S,n,x,I),q(e=>{const t=S.querySelector("input,textarea,select");t&&(t instanceof HTMLInputElement&&"checkbox"===t.type?t.checked=!!e:t.value=String(e??""))})):i instanceof Node?(S.appendChild(i),i instanceof HTMLInputElement||i instanceof HTMLSelectElement||i instanceof HTMLTextAreaElement?q(e=>{i instanceof HTMLInputElement&&"checkbox"===i.type?i.checked=!!e:i.value=String(e??"")}):o.setAttribute("data-editor-managed","")):!i&&S.hasChildNodes()&&o.setAttribute("data-editor-managed",""),l||queueMicrotask(()=>{S.querySelector(y)?.focus({preventScroll:!0})})}else if(D&&"object"==typeof D){const i=document.createElement("div");i.setAttribute("data-external-editor",""),i.setAttribute("data-field",n.field),S.appendChild(i),o.setAttribute("data-editor-managed","");const r={row:t,rowId:p??"",value:L,field:n.field,column:n,commit:x,cancel:_,updateRow:v,onValueChange:q,grid:e.grid};if(D.mount)try{D.mount({placeholder:i,context:r,spec:D})}catch(P){(0,d.warnDiagnostic)(d.EDITOR_MOUNT_ERROR,`External editor mount error for column '${n.field}': ${P}`,e.grid.id)}else u.dispatchEvent(new CustomEvent("mount-external-editor",{detail:{placeholder:i,spec:D,context:r}}))}!function(e,t){const i="string"==typeof t.header?t.header:t.field;if(!i)return;queueMicrotask(()=>{const t=e.querySelector(y);t&&(t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby")||t.hasAttribute("title")||t.id&&e.querySelector(`label[for="${CSS.escape(t.id)}"]`)||t.closest("label")||t.setAttribute("aria-label",i))})}(S,n)}var k=class extends o.BaseGridPlugin{static manifest={ownedProperties:[{property:"editable",level:"column",description:'the "editable" column property',isUsed:e=>!0===e||"function"==typeof e},{property:"editor",level:"column",description:'the "editor" column property'},{property:"editorParams",level:"column",description:'the "editorParams" column property'},{property:"nullable",level:"column",description:'the "nullable" column property (allows null values)'}],events:[{type:"cell-edit-committed",description:"Emitted when a cell edit is committed (for plugin-to-plugin coordination)"}],queries:[{type:"isEditing",description:"Returns whether any cell is currently being edited"},{type:"getCellEditableResolver",description:"Returns a predicate (field, row) => boolean resolving per-cell editability (rowEditable gate + column.editable true/false/function), for consumers like clipboard paste"},{type:"commitCellValue",description:"Commits a single cell value coming from a core row mutation (updateRow/updateRows), running the full edit pipeline: cancelable cell-commit (validation/abortion), dirty tracking, history, and cascade. Returns true (applied), false (vetoed), or undefined (not handled)."}]};name="editing";styles="@layer tbw-plugins{tbw-grid{--tbw-editing-bg:var(--tbw-color-selection);--tbw-editing-row-bg:var(--tbw-editing-bg);--tbw-editing-border:var(--tbw-border-input,1px solid var(--tbw-color-border-strong));--tbw-padding-editing-input:var(--tbw-cell-padding-input,2px 6px);--tbw-font-size-editor:inherit;--tbw-editing-row-outline-color:var(--tbw-color-accent);--tbw-editing-row-outline-width:1px}tbw-grid:not(.tbw-grid-mode) .data-grid-row:has(.editing){background:var(--tbw-editing-row-bg);outline:var(--tbw-editing-row-outline-width) solid var(--tbw-editing-row-outline-color);outline-offset:calc(-1 * var(--tbw-editing-row-outline-width))}tbw-grid .data-grid-row>.cell.editing{min-height:max(var(--tbw-row-height), calc(1lh + 2 * var(--tbw-cell-padding-v,.25em) + var(--tbw-border-width,1px)));justify-content:center;align-items:center;padding:0;display:flex;overflow:hidden}tbw-grid .data-grid-row>.cell.editing input:not([type=checkbox]),tbw-grid .data-grid-row>.cell.editing select,tbw-grid .data-grid-row>.cell.editing textarea{border:var(--tbw-editing-border);width:100%;min-width:0;height:100%;padding:var(--tbw-padding-editing-input);font-size:var(--tbw-font-size-editor);flex:auto;align-self:stretch}tbw-grid .tbw-editor-host{display:contents}tbw-grid{--tbw-invalid-bg:light-dark(#fef2f2,#450a0a);--tbw-invalid-border-color:light-dark(#ef4444,#f87171)}tbw-grid .data-grid-row>.cell[data-invalid=true]{background:var(--tbw-invalid-bg);outline:1px solid var(--tbw-invalid-border-color);outline-offset:-1px}}";get defaultConfig(){return{mode:"row",editOn:"click"}}get#i(){return"grid"===this.config.mode}#n(e,t){const i=this.#r.effectiveConfig?.rowEditable;if(i&&!i(t))return!1;const{editable:n}=e;return"function"==typeof n?n(t):!0===n}#s(e){return!0===e.editable||"function"==typeof e.editable}#o=-1;#d;#l;#a=-1;#c=new Map;#u=new Set;#h=new WeakSet;#f=new Map;#g=!1;#w=-1;#m;#p=!1;#v=!1;#y=!1;#b=null;#E=new v;#R=new Set;#C;get#r(){return this.grid}attach(e){super.attach(e);const t=this.disconnectSignal,i=this.#r;this.#m=new f((e,t,i)=>{this.#I(e,t,i)}),this.#C={grid:i,isGridMode:this.#i,config:this.config,editingCells:this.#u,editorValueCallbacks:this.#f,isEditSessionActive:()=>-1!==this.#o,commitCellValue:(e,t,i,n)=>this.#k(e,t,i,n),exitRowEdit:(e,t)=>this.#A(e,t)},this.#x(),Object.defineProperty(e,"changedRows",{get:()=>this.changedRows,configurable:!0}),Object.defineProperty(e,"changedRowIds",{get:()=>this.changedRowIds,configurable:!0}),Object.defineProperty(e,"_changedRowIdSet",{get:()=>this.#E.changedRowIds,configurable:!0}),e.resetChangedRows=e=>this.resetChangedRows(e),this.#_(t,i),this.#i&&(i._isGridEditMode=!0,this.gridElement.classList.add("tbw-grid-mode"),this.requestRender(),this.#S(t,i))}#_(e,t){if(document.addEventListener("keydown",e=>{if(!this.#i&&"Escape"===e.key&&-1!==this.#o){if(C(this.config,e))return;this.#A(this.#o,!0)}},{capture:!0,signal:e}),document.addEventListener("mousedown",e=>{if(this.#i)return;if(-1===this.#o)return;const i=t.findRenderedRowElement?.(this.#o);if(!i)return;if((e.composedPath&&e.composedPath()||[]).includes(i))return;const n=e.target;if(!n||this.gridElement.contains(n)||!this.grid.containsFocus?.(n)){if(n&&!this.gridElement.contains(n)){const e=t.findRenderedRowElement?.(this.#o);if(e&&function(e,t){if(!e)return!1;const i=t.querySelectorAll('[aria-expanded="true"][aria-controls]');for(let n=0;n<i.length;n++){const r=i[n].getAttribute("aria-controls");if(!r)continue;const s=t.ownerDocument?.getElementById(r);if(s&&s.contains(e))return!0}return!1}(n,e))return}C(this.config,e)||queueMicrotask(()=>{-1!==this.#o&&this.#A(this.#o,!1)})}},{signal:e}),this.config.focusTrap&&this.gridElement.addEventListener("focusout",e=>{if(this.#i)return;if(-1===this.#o)return;const t=e.relatedTarget;t&&this.grid.containsFocus?.(t)||t&&this.gridElement.contains(t)||queueMicrotask(()=>{-1!==this.#o&&this.#M()})},{signal:e}),this.gridElement.addEventListener("cell-change",e=>{const t=e.detail;if("user"===t.source)return;const i=`${t.rowIndex}:${t.field}`,n=this.#f.get(i);n&&n(t.newValue)},{signal:e}),this.config.dirtyTracking){const t=e=>{const t=e.detail?.action;if(!t)return;const i=this.rows[t.rowIndex];if(!i)return;const n=this.#G(i);if(!n)return;const r=this.#E.isRowDirty(n,i);this.#D(n,i,r?"modified":"pristine")};this.gridElement.addEventListener("undo",t,{signal:e}),this.gridElement.addEventListener("redo",t,{signal:e}),this.on("row-inserted",e=>{const t=this.#G(e.row);null!=t&&this.markAsNew(String(t))})}}#S(e,t){this.gridElement.addEventListener("focusin",e=>{const i=e.target;if(i!==this.gridElement&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')){if(this.#v)return i.blur(),void this.gridElement.focus();const e=t._focusRow,n=t._focusCol,r=this.#b;if(!r||r.rowIndex!==e||r.colIndex!==n){const i=t._visibleColumns?.[n],r=t._rows?.[e];if(i?.field&&r){const t=i.field;this.#b={rowIndex:e,colIndex:n,field:t,value:(0,s.readCellField)(r,t)}}}this.#p=!0}},{signal:e}),this.gridElement.addEventListener("focusout",e=>{const t=e.target,i=e.relatedTarget;if(t&&i){if(t.contains(i))return;const e=b(i);if(e&&e!==this.gridElement&&this.gridElement.contains(e))return}i&&(this.gridElement.contains(i)||this.grid.containsFocus?.(i))&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')||(this.#p=!1,this.#b=null)},{signal:e}),this.gridElement.addEventListener("keydown",e=>{if("Escape"===e.key&&this.#p){if(C(this.config,e))return void queueMicrotask(()=>{this.#p&&this.#L()});this.#L(),e.preventDefault(),e.stopPropagation()}},{capture:!0,signal:e}),this.gridElement.addEventListener("mousedown",e=>{e.target.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')&&(this.#v=!1)},{signal:e})}detach(){this.#r._isGridEditMode=!1,this.gridElement.classList.remove("tbw-grid-mode"),this.#o=-1,this.#d=void 0,this.#l=void 0,this.#a=-1,this.#c.clear(),this.#E.clear(),this.#u.clear(),this.#f.clear(),this.#p=!1,this.#v=!1,this.#b=null,this.#y=!1,this.#h=new WeakSet,super.detach()}handleQuery(e){if("isEditing"===e.type)return this.#i||-1!==this.#o;if("getCellEditableResolver"===e.type){const e=this.#r.effectiveConfig?.columns??[],t=new Map;for(const i of e)t.set(i.field,i);return(e,i)=>{const n=t.get(e);return!!n&&this.#n(n,i)}}return"commitCellValue"===e.type?this.#T(e.context):void 0}#T(e){const t=this.#r,i=(t._visibleColumns??[]).find(t=>t.field===e.field)??t._columns?.find(t=>t.field===e.field),n=e.row??(null!=e.rowId?t._getRowEntry(e.rowId)?.row:void 0)??t._rows?.[e.rowIndex];if("sync"===e.source){if(!n||!E(e.field))return;(0,s.writeCellField)(n,e.field,e.newValue),(0,s.invalidateAccessorCache)(n);const t=this.#G(n);if(t&&this.config.dirtyTracking){this.#E.rebaselineCell(t,e.field,e.newValue);const i=this.#E.isRowDirty(t,n);i||this.#E.changedRowIds.delete(t),this.#D(t,n,i?"modified":"pristine")}return!0}if(i&&n&&E(e.field)){if("history"===e.source){(0,s.writeCellField)(n,e.field,e.newValue),(0,s.invalidateAccessorCache)(n);const t=this.#G(n);if(t&&this.config.dirtyTracking){const e=this.#E.isRowDirty(t,n);e||this.#E.changedRowIds.delete(t),this.#D(t,n,e?"modified":"pristine")}return!0}return this.#k(e.rowIndex,i,e.newValue,n,e.source),(0,s.readCellField)(n,e.field)===e.newValue}}onCellClick(e){if(this.#i)return!1;const t=this.#r,i=this.config.editOn??t.effectiveConfig?.editOn;if(!1===i||"manual"===i)return!1;if("click"!==i&&"dblclick"!==i)return!1;const n="dblclick"===e.originalEvent.type;if("click"===i&&n)return!1;if("dblclick"===i&&!n)return!1;const{rowIndex:r}=e;return!!t._columns?.some(e=>this.#s(e))&&(!!this.#F(t._rows[r])&&(e.originalEvent.stopPropagation(),this.beginBulkEdit(r),!0))}onKeyDown(e){switch(e.key){case"Escape":return this.#q(e);case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":return this.#P(e);case"Tab":return this.#V(e);case" ":case"Spacebar":return this.#O(e);case"Enter":return!(e.shiftKey||e.ctrlKey||e.altKey||e.metaKey)&&this.#$(e);case"F2":return this.#N(e);default:return!1}}#q(e){return this.#i&&this.#p?(this.#L(),this.requestAfterRender(),!0):-1!==this.#o&&!this.#i&&(C(this.config,e)||this.#A(this.#o,!0),!0)}#P(e){const t=b(e.target),i=!!t&&t!==this.gridElement,n="ArrowUp"===e.key||"ArrowDown"===e.key;return!(this.#i&&!this.#p&&!i)&&(!(!this.#i||!this.#p&&!i||!n)||!(!n||-1===this.#o||this.#i))}#V(e){return!(-1===this.#o&&!this.#i)&&(e.preventDefault(),this.#y?(this.#A(this.#o,!1),!0):(this.#j(!e.shiftKey),!0))}#O(e){if(-1!==this.#o)return!1;const t=this.#r,i=t._focusRow,n=t._focusCol;if(i<0||n<0)return!1;const r=t._visibleColumns[n],o=t._rows[i];if(!r||!o||"boolean"!==r.type)return!1;if(!this.#n(r,o))return!1;const d=r.field;return!!E(d)&&(this.#k(i,r,!(0,s.readCellField)(o,d),o),e.preventDefault(),this.requestRender(),!0)}#$(e){if(this.#i&&!this.#p)return this.#M(),!0;if(this.#i&&this.#p)return this.#H(e);if(-1!==this.#o){const t=e.target;return(!t||"true"!==t.getAttribute?.("aria-expanded")||!t.hasAttribute?.("aria-controls"))&&!!C(this.config,e)}return this.#z(e)}#H(e){const t=b(e.target);if(t&&t!==e.target)return!0;this.#b=null;const i=document.activeElement;return i&&this.gridElement.contains(i)&&(i.blur(),this.gridElement.focus()),this.#p=!1,this.#v=!0,this.requestAfterRender(),!0}#z(e){const t=this.#r,i=this.config.editOn??t.effectiveConfig?.editOn;if(!1===i||"manual"===i)return!1;const n=t._focusRow,r=t._focusCol;if(n<0)return!1;const o=t._columns?.some(e=>this.#s(e)),d=t._rows[n];if(!o||!this.#F(d))return!1;const l=t._visibleColumns[r]?.field??"",a=l&&d?(0,s.readCellField)(d,l):void 0,c=this.gridElement.querySelector(`[data-row="${n}"][data-col="${r}"]`),u=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,detail:{rowIndex:n,colIndex:r,field:l,value:a,row:d,cellEl:c,trigger:"keyboard",originalEvent:e}});return this.gridElement.dispatchEvent(u),u.defaultPrevented?(e.preventDefault(),!0):(this.beginBulkEdit(n),!0)}#N(e){if(-1!==this.#o||this.#i)return!1;const t=this.#r;if(!1===(this.config.editOn??t.effectiveConfig?.editOn))return!1;const i=t._focusRow,n=t._focusCol;if(i<0||n<0)return!1;const r=t._visibleColumns[n],s=t._rows[i];return!!(r&&s&&r.field)&&(!!this.#n(r,s)&&(e.preventDefault(),this.beginCellEdit(i,r.field),!0))}#K(e){const t={};for(const i of Array.from(e.attributes)){if(!i.name.startsWith("data-"))continue;const e=i.name.slice(5).replace(/-([a-z])/g,(e,t)=>t.toUpperCase()).trim();e&&(t[e]=i.value)}return t}#W(){const e=this.#r,t=e._hostElement;if(!t)return;const i=e.effectiveConfig;if(!i)return;const n=Array.from(t.children).filter(e=>"tbw-grid-type"===e.tagName.toLowerCase());if(!n.length)return;const s=e.__frameworkAdapter,o=i.typeDefaults??={};for(let d=0;d<n.length;d++){const e=n[d],t=e.getAttribute("name")?.trim();if(!t)continue;const i=o[t];if(i?.editor)continue;const l=e.querySelector("tbw-grid-column-editor"),a=l??e;let c=s?.canHandle?.(a)?s.createEditor?.(a):void 0;if(!c&&l){const t=this.#K(e),i=(0,r.compileTemplate)(l.innerHTML);c=e=>i({row:e.row,value:e.value,field:e.field,column:e.column,typeDefault:t})}c&&(o[t]={...i??{},editor:c})}}processColumns(e){const t=this.#r;this.#W();const i=t.effectiveConfig?.typeDefaults,n=t.__frameworkAdapter,r=!!i||!!n?.getTypeDefault;return e.map(e=>{const s=e.__element;if(s&&!this.#h.has(s)){this.#h.add(s),null==e.editable&&s.hasAttribute("editable")&&(e.editable="false"!==s.getAttribute("editable"));const t=e;if(!t.__editorTemplate){const e=s.querySelector("tbw-grid-column-editor");e&&(t.__editorTemplate=e)}}if(!e.type||!r)return e;let o;if(i?.[e.type]?.editorParams&&(o=i[e.type].editorParams),!o&&n?.getTypeDefault){const i=n.getTypeDefault(e.type,t._hostElement);i?.editorParams&&(o=i.editorParams)}return o?{...e,editorParams:{...o,...e.editorParams}}:e})}processRows(e){const t=this.#r;if(this.config.dirtyTracking&&t.getRowId&&this.#E.capture(e,e=>{try{return t.getRowId?.(e)}catch{return}}),-1===this.#o||this.#i)return e;const i=this.#d,n=this.#l;if(!i||!n)return e;const r=[...e];let s=-1;for(let o=0;o<r.length;o++)if(this.#G(r[o])===i){s=o;break}return-1===s?(setTimeout(()=>this.cancelActiveRowEdit(),0),r):(r[s]=n,this.#o!==s&&this.#B(this.#o,s),r)}afterRender(){const e=this.#r;if(-1!==this.#o&&this.#l&&!this.#i&&e._rows[this.#o]!==this.#l){const t=e._rows.indexOf(this.#l);if(-1===t)return void setTimeout(()=>this.cancelActiveRowEdit(),0);this.#B(this.#o,t)}if(this.#g&&(this.#g=!1,this.#U(e)),-1!==this.#w){const t=this.#w;this.#w=-1,e.animateRow?.(t,"change")}const t=this.#E.drainCapturedFlag();if(null!=t&&this.emit("baselines-captured",{count:t}),!this.#i&&0!==this.#u.size)for(const i of this.#u){const[t,n]=i.split(":"),r=parseInt(t,10),s=parseInt(n,10),o=this.#Q(r,s);if(!o||o.classList.contains("editing"))continue;const d=e._rows[r],l=e._visibleColumns[s];d&&l&&this.#X(d,r,l,s,o,!0)}}afterCellRender(e){const{row:t,rowIndex:i,column:n,colIndex:r,cellElement:o}=e,d=this.#n(n,t);if(d)o.removeAttribute("aria-readonly");else if(o.setAttribute("aria-readonly","true"),this.#i&&o.classList.contains("editing")){o.classList.remove("editing");const e=(0,s.readCellField)(t,n.field);o.textContent=null==e?"":String(e)}this.#i&&d&&(o.classList.contains("editing")||this.#X(t,i,n,r,o,!0,e.rowElement))}afterRowRender(e){if(!this.config.dirtyTracking)return;const t=this.#r.getRowId?.(e.row);if(!t)return;const{isNew:i,isCommittedDirty:n,hasBaseline:r}=this.#E.getRowDirtyState(t,e.row),s=e.rowElement;if(s.classList.toggle("tbw-row-dirty",n),s.classList.toggle("tbw-row-new",i),r){const i=s.querySelectorAll(".cell[data-field]");for(let n=0;n<i.length;n++){const r=i[n],s=r.getAttribute("data-field");s&&r.classList.toggle("tbw-cell-dirty",this.#E.isCellDirty(t,e.row,s))}}else{const e=s.querySelectorAll(".tbw-cell-dirty");for(let t=0;t<e.length;t++)e[t].classList.remove("tbw-cell-dirty")}}onScrollRender(){this.afterRender()}get changedRows(){return this.#E.getChangedRows(e=>this.grid.getRow(e))}get changedRowIds(){return this.#E.getChangedRowIds()}get activeEditRow(){return this.#o}get activeEditCol(){return this.#a}isRowEditing(e){return this.#o===e}isCellEditing(e,t){return this.#u.has(`${e}:${t}`)}isRowChanged(e){const t=this.#r,i=t._rows[e];if(!i)return!1;try{const e=t.getRowId?.(i);return!!e&&this.#E.isRowChanged(e)}catch{return!1}}isRowChangedById(e){return this.#E.isRowChanged(e)}isDirty(e){if(!this.config.dirtyTracking)return!1;if(this.#E.newRowIds.has(e))return!0;const t=this.grid.getRow(e);return!!t&&this.#E.isRowDirty(e,t)}isPristine(e){return!this.isDirty(e)}get dirty(){if(!this.config.dirtyTracking)return!1;const e=this.#r;return this.#E.hasAnyDirty(t=>e._getRowEntry(t)?.row)}get pristine(){return!this.dirty}markAsPristine(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&(this.#E.markPristine(e,t),this.emit("dirty-change",{rowId:e,row:t,original:t,type:"pristine"}))}markAsNew(e){if(!this.config.dirtyTracking)return;this.#E.markNew(e);const t=this.grid.getRow(e);this.emit("dirty-change",{rowId:e,row:t,original:void 0,type:"new"})}markAsDirty(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&(this.#E.markDirty(e),this.#D(e,t,"modified"))}markAllPristine(){if(!this.config.dirtyTracking)return;const e=this.#r;this.#E.markAllPristine(t=>e._getRowEntry(t)?.row)}getOriginalRow(e){if(this.config.dirtyTracking)return this.#E.getOriginalRow(e)}hasBaseline(e){return!!this.config.dirtyTracking&&this.#E.hasBaseline(e)}getDirtyRows(){if(!this.config.dirtyTracking)return[];const e=this.#r;return this.#E.getDirtyRows(t=>e._getRowEntry(t)?.row)}get dirtyRowIds(){if(!this.config.dirtyTracking)return[];const e=this.#r;return this.#E.getDirtyRowIds(t=>e._getRowEntry(t)?.row)}revertRow(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&this.#E.revertRow(e,t)&&(this.#D(e,t,"reverted"),this.requestRender())}revertAll(){if(!this.config.dirtyTracking)return;const e=this.#r;this.#E.revertAll(t=>e._getRowEntry(t)?.row),this.requestRender()}setInvalid(e,t,i=""){this.#m.setInvalid(e,t,i)}clearInvalid(e,t){this.#m.clearInvalid(e,t)}clearRowInvalid(e){this.#m.clearRowInvalid(e)}clearAllInvalid(){this.#m.clearAllInvalid()}isCellInvalid(e,t){return this.#m.isCellInvalid(e,t)}getInvalidMessage(e,t){return this.#m.getInvalidMessage(e,t)}hasInvalidCells(e){return this.#m.hasInvalidCells(e)}getInvalidFields(e){return this.#m.getInvalidFields(e)}resetChangedRows(e){const t=this.changedRows,i=this.changedRowIds;this.#E.changedRowIds.clear(),this.#E.committedDirtyRowIds.clear(),this.#x(),e||this.emit("changed-rows-reset",{rows:t,ids:i}),this.#r._rowPool?.forEach(e=>e.classList.remove("changed"))}beginCellEdit(e,t){const i=this.#r,n=i._visibleColumns.findIndex(e=>e.field===t);if(-1===n)return;const r=i._visibleColumns[n],s=i._rows[e];if(!r||!s||!this.#n(r,s))return;const o=this.#Q(e,n);o&&(this.#y=!0,this.#Y(e,n,o))}beginBulkEdit(e){const t=this.#r;if(!1===(this.config.editOn??t.effectiveConfig?.editOn))return;if(!t._columns?.some(e=>this.#s(e)))return;const i=t.findRenderedRowElement?.(e);if(!i)return;const n=t._rows[e];this.#F(n)&&(this.#y=!1,this.#Z(e,n),Array.from(i.children).forEach((i,r)=>{const s=t._visibleColumns[r];if(s&&this.#n(s,n)){const t=i;t.classList.contains("editing")||this.#X(n,e,s,r,t,!0)}}),setTimeout(()=>{let e=i.querySelector(`.cell[data-col="${t._focusCol}"]`);if(e?.classList.contains("editing")||(e=i.querySelector(".cell.editing")),e?.classList.contains("editing")){const t=e.querySelector(y);try{t?.focus({preventScroll:!0})}catch{}}},0))}commitActiveRowEdit(){-1!==this.#o&&this.#A(this.#o,!1)}cancelActiveRowEdit(){-1!==this.#o&&this.#A(this.#o,!0)}#G(e){if(e)try{return this.#r.getRowId?.(e)}catch{return}}#Q(e,t){return(this.#r.findRenderedRowElement?.(e))?.querySelector(`.cell[data-col="${t}"]`)??null}#F(e){if(!e)return!0;const t=this.#r.effectiveConfig?.rowEditable;return!t||!1!==t(e)}#D(e,t,i){this.emit("dirty-change",{rowId:e,row:t,original:this.#E.getOriginalRow(e),type:i})}#L(){this.#J();const e=document.activeElement;e&&this.gridElement.contains(e)&&(e.blur(),this.gridElement.focus()),this.#p=!1,this.#v=!0}#ee(e,t,i){i&&(Object.keys(i).forEach(e=>{t[e]=i[e]}),e&&(this.#E.changedRowIds.delete(e),this.#E.committedDirtyRowIds.delete(e),this.clearRowInvalid(e)))}#I(e,i,n){const r=this.#r,s=r._visibleColumns?.findIndex(e=>e.field===i);if(-1===s||void 0===s)return;const o=r._rows?.findIndex(t=>this.#G(t)===e);if(-1===o||void 0===o)return;const d=this.#Q(o,s);if(d)if(n){d.setAttribute("data-invalid","true"),d.setAttribute("aria-invalid","true");const n=this.#m.getInvalidMessage(e,i);n&&(d.setAttribute("title",n),d.removeAttribute(t.GridDataAttrs.TRUNCATED))}else d.removeAttribute("data-invalid"),d.removeAttribute("aria-invalid"),d.removeAttribute("title")}#B(e,t){this.#o=t;const i=new Set,n=`${e}:`;for(const o of this.#u)o.startsWith(n)?i.add(`${t}:${o.substring(n.length)}`):i.add(o);this.#u.clear();for(const o of i)this.#u.add(o);const r=this.#c.get(e);void 0!==r&&(this.#c.delete(e),this.#c.set(t,r));const s=[];for(const[o,d]of this.#f)o.startsWith(n)&&(s.push([`${t}:${o.substring(n.length)}`,d]),this.#f.delete(o));for(const[o,d]of s)this.#f.set(o,d);this.#x()}#Y(e,t,i){const n=this.#r,r=n._rows[e],s=n._visibleColumns[t];r&&s&&this.#n(s,r)&&(i.classList.contains("editing")||(this.#o!==e&&this.#Z(e,r),this.#a=t,this.#X(r,e,s,t,i,!1)))}#J(){const e=this.#b;if(!e)return;const t=this.#r._rows?.[e.rowIndex];t&&(0,s.writeCellField)(t,e.field,e.value);const i=`${e.rowIndex}:${e.field}`,n=this.#f.get(i);if(n&&n(e.value),this.emit("cell-cancel",{rowIndex:e.rowIndex,colIndex:e.colIndex,field:e.field,previousValue:e.value}),t){const e=this.#G(t);e&&(this.config.dirtyTracking?this.#E.isRowDirty(e,t)||(this.#E.changedRowIds.delete(e),this.#D(e,t,"reverted")):this.#E.changedRowIds.delete(e))}this.requestRender(),this.#b=null}#M(){const e=this.#r,t=e._focusRow,i=e._focusCol;if(t<0||i<0)return;const n=this.#Q(t,i);if(n?.classList.contains("editing")){const e=n.querySelector(y);e&&(this.#v=!1,e.focus(),this.#p=!0,e instanceof HTMLInputElement&&("text"===e.type||"number"===e.type)&&e.select())}}#j(e){const t=this.#r,i=t._rows,r=this.#i?t._focusRow:this.#o,s=i[r],o=t._visibleColumns.map((e,t)=>s&&this.#n(e,s)?t:-1).filter(e=>e>=0);if(0===o.length)return;const d=o.indexOf(t._focusCol)+(e?1:-1);if(d>=0&&d<o.length){t._focusCol=o[d];const e=this.#Q(r,o[d]);return e?.classList.contains("editing")&&e.querySelector(y)?.focus({preventScroll:!0}),void(0,n.ensureCellVisible)(t,{forceHorizontalScroll:!0})}const l=r+(e?1:-1);if(l>=0&&l<i.length){const s=i[l],o=t._visibleColumns.map((e,t)=>s&&this.#n(e,s)?t:-1).filter(e=>e>=0);if(0===o.length)return;this.#i?(t._focusRow=l,t._focusCol=e?o[0]:o[o.length-1],(0,n.ensureCellVisible)(t,{forceHorizontalScroll:!0}),this.requestAfterRender(),setTimeout(()=>{const e=this.#Q(l,t._focusCol);e?.classList.contains("editing")&&e.querySelector(y)?.focus({preventScroll:!0})},0)):(this.#A(r,!1),t._focusRow=l,t._focusCol=e?o[0]:o[o.length-1],this.beginBulkEdit(l),(0,n.ensureCellVisible)(t,{forceHorizontalScroll:!0}))}}#x(){const e=this.#r;e._activeEditRows=this.#o,e._rowEditSnapshots=this.#c}#Z(e,t){this.#o!==e&&(-1!==this.#o&&this.#A(this.#o,!1),this.#c.set(e,{...t}),this.#o=e,this.#l=t,this.#d=this.#G(t),this.#x(),this.#i||(this.broadcast("edit-open",{rowIndex:e,rowId:this.#d??"",row:t}),(0,i.announce)(this.gridElement,(0,i.getA11yMessage)(this.gridElement,"editingStarted",e))))}#A(e,t){if(this.#o!==e)return;const n=this.#r,r=this.#c.get(e),s=n.findRenderedRowElement?.(e),{rowId:o,current:d}=this.#te(e);!t&&s&&d&&this.#ie(s,e,d),t||this.#i||!d||this.emit("before-edit-close",{rowIndex:e,rowId:o??"",row:d}),t&&d?this.#ee(o,d,r):!t&&d&&this.#ne(e,o,d,r),this.#re(e),this.#g=!0,s?this.#se(s,n):(this.#U(n),this.#g=!1),!this.#i&&d&&(this.broadcast("edit-close",{rowIndex:e,rowId:o??"",row:d,reverted:t}),t||(0,i.announce)(this.gridElement,(0,i.getA11yMessage)(this.gridElement,"editingCommitted",e)))}#te(e){const t=this.#r;let i=this.#d;const n=(i?t._getRowEntry(i):void 0)?.row??this.#l??t._rows[e];return!i&&n&&(i=this.#G(n)),{rowId:i,current:n}}#ie(e,t,i){const n=this.#r;e.querySelectorAll(".cell.editing").forEach(e=>{const r=Number(e.getAttribute("data-col"));if(isNaN(r))return;const o=n._visibleColumns[r];if(!o)return;if(e.hasAttribute("data-editor-managed"))return;const d=e.querySelector("input,textarea,select");if(!d)return;const l=o.field,a=(0,s.readCellField)(i,l),c=h(d,o,a);a!==c&&this.#k(t,o,c,i)})}#ne(e,t,i,n){const r=function(e,t){if(!e)return!1;const i=e,n=t,r=new Set([...Object.keys(i),...Object.keys(n)]);for(const s of r)if(i[s]!==n[s])return!0;return!1}(n,i),s=t?this.#E.changedRowIds.has(t):r;this.emitCancelable("row-commit",{rowIndex:e,rowId:t??"",row:i,oldValue:n,newValue:i,changed:s,changedRows:this.changedRows,changedRowIds:this.changedRowIds})?n&&this.#ee(t,i,n):(t&&this.config.dirtyTracking&&(this.#E.isRowDirty(t,i)?this.#E.committedDirtyRowIds.add(t):this.#E.committedDirtyRowIds.delete(t)),r&&this.isAnimationEnabled&&(this.#w=e))}#re(e){this.#c.delete(e),this.#o=-1,this.#d=void 0,this.#l=void 0,this.#a=-1,this.#y=!1,this.#x();for(const t of this.#u)t.startsWith(`${e}:`)&&this.#u.delete(t);for(const t of this.#f.keys())t.startsWith(`${e}:`)&&this.#f.delete(t)}#se(e,t){const i=t.__frameworkAdapter,n=e.querySelectorAll(".cell.editing");i?.releaseCell&&n.forEach(e=>{i.releaseCell(e)}),n.forEach(e=>{e.classList.remove("editing"),function(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing")}(e.parentElement)}),t.refreshVirtualWindow(!0)}#k(e,t,i,n,r="user"){const o=t.field;if(!E(o))return;const d=(0,s.readCellField)(n,o);if(d===i)return;const l=this.#r,a=this.#G(n),c=!a||!this.#E.changedRowIds.has(a),u=a?e=>this.grid.updateRow(a,e,"cascade"):R;let h=!1;const f=a?e=>{h=!0,this.setInvalid(a,o,e??"")}:()=>{},g=`${a??e}\0${o}`;if(this.#R.has(g))return;let w=!1;this.#R.add(g);try{w=this.emitCancelable("cell-commit",{row:n,rowId:a??"",field:o,oldValue:d,value:i,source:r,rowIndex:e,changedRows:this.changedRows,changedRowIds:this.changedRowIds,firstTimeForRow:c,updateRow:u,setInvalid:f})}finally{this.#R.delete(g)}if(w)return;if(a&&!h&&this.isCellInvalid(a,o)&&this.clearInvalid(a,o),(0,s.writeCellField)(n,o,i),(0,s.invalidateAccessorCache)(n),a&&this.#E.changedRowIds.add(a),this.#x(),this.config.dirtyTracking&&a){const e=this.#E.isRowDirty(a,n);this.#D(a,n,e?"modified":"pristine")}this.emitPluginEvent("cell-edit-committed",{rowIndex:e,field:o,oldValue:d,newValue:i});const m=l.findRenderedRowElement?.(e);m&&m.classList.add("changed")}#X(e,t,i,n,r,s,o){I(this.#C,e,t,i,n,r,s,o)}#U(e){queueMicrotask(()=>{try{const t=e._focusRow,i=e._focusCol,n=e.findRenderedRowElement?.(t);if(n){Array.from(e._bodyEl.querySelectorAll(".cell-focus")).forEach(e=>e.classList.remove("cell-focus"));const r=n.querySelector(`.cell[data-row="${t}"][data-col="${i}"]`);r&&(r.classList.add("cell-focus"),r.setAttribute("aria-selected","true"),r.hasAttribute("tabindex")||r.setAttribute("tabindex","-1"),r.focus({preventScroll:!0}))}}catch{}})}};e.EditingPlugin=k,e.defaultEditorFor=c});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("../../core/constants"),require("../../core/internal/aria"),require("../../core/internal/keyboard"),require("../../core/internal/sanitize"),require("../../core/internal/value-accessor"),require("../../core/plugin/base-plugin"),require("../../core/internal/diagnostics")):"function"==typeof define&&define.amd?define(["exports","../../core/constants","../../core/internal/aria","../../core/internal/keyboard","../../core/internal/sanitize","../../core/internal/value-accessor","../../core/plugin/base-plugin","../../core/internal/diagnostics"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TbwGridPlugin_editing={},e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid,e.TbwGrid)}(this,function(e,t,i,n,r,s,o,d){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function l(e){return t=>{const i=e.editorParams,n=document.createElement("input");n.type="date",t.value instanceof Date?n.valueAsDate=t.value:"string"==typeof t.value&&t.value&&(n.value=t.value.split("T")[0]),i?.min&&(n.min=i.min),i?.max&&(n.max=i.max),i?.placeholder&&(n.placeholder=i.placeholder);return n.addEventListener("change",()=>{var r;if(n.value)"string"==typeof t.value?t.commit(n.value):t.commit(n.valueAsDate);else if(e.nullable)t.commit(null);else{const e=i?.default;"string"==typeof t.value||"string"==typeof e?t.commit("string"==typeof e?e:`${(r=e??new Date).getFullYear()}-${String(r.getMonth()+1).padStart(2,"0")}-${String(r.getDate()).padStart(2,"0")}`):t.commit(e instanceof Date?e:new Date)}}),n.addEventListener("keydown",e=>{"Escape"===e.key&&t.cancel()}),n}}var a="__tbw_null__";function c(e){switch(e.type){case"number":return function(e){return t=>{const i=e.editorParams,n=document.createElement("input");n.type="number",n.value=null!=t.value?String(t.value):"",void 0!==i?.min&&(n.min=String(i.min)),void 0!==i?.max&&(n.max=String(i.max)),void 0!==i?.step&&(n.step=String(i.step)),i?.placeholder&&(n.placeholder=i.placeholder);const r=()=>{""===n.value?e.nullable?t.commit(null):t.commit(i?.min??0):t.commit(Number(n.value))};return n.addEventListener("blur",r),n.addEventListener("keydown",e=>{"Enter"===e.key&&r(),"Escape"===e.key&&t.cancel()}),n}}(e);case"boolean":return e=>{const t=document.createElement("input");return t.type="checkbox",t.checked=!!e.value,t.addEventListener("change",()=>e.commit(t.checked)),t};case"date":return l(e);case"select":return function(e){return t=>{const i=e.editorParams,n=document.createElement("select");if(e.multi&&(n.multiple=!0),e.nullable||i?.includeEmpty){const r=document.createElement("option");r.value=e.nullable?a:"",r.textContent=e.nullable?i?.emptyLabel??"(Blank)":i?.emptyLabel??"",null==t.value&&(r.selected=!0),n.appendChild(r)}(function(e){const t=e.options;return t?"function"==typeof t?t():t:[]})(e).forEach(i=>{const r=document.createElement("option");r.value=String(i.value),r.textContent=i.label,e.multi&&Array.isArray(t.value)&&t.value.includes(i.value)?r.selected=!0:e.multi||t.value!==i.value||(r.selected=!0),n.appendChild(r)});const r=()=>{if(e.multi){const e=Array.from(n.selectedOptions).map(e=>e.value);t.commit(e)}else e.nullable&&n.value===a?t.commit(null):t.commit(n.value)};return n.addEventListener("change",r),n.addEventListener("blur",r),n.addEventListener("keydown",e=>{"Escape"===e.key&&t.cancel()}),n}}(e);default:return function(e){return t=>{const i=e.editorParams,n=document.createElement("input");n.type="text",n.value=null!=t.value?String(t.value):"",void 0!==i?.maxLength&&(n.maxLength=i.maxLength),i?.pattern&&(n.pattern=i.pattern),i?.placeholder&&(n.placeholder=i.placeholder);const r=()=>{const i=n.value;""!==i?"string"==typeof t.value&&i===t.value.replace(/[\n\r]/g,"")||("number"==typeof t.value?t.commit(Number(i)):t.commit(i)):e.nullable?t.commit(null):t.commit("")};return n.addEventListener("blur",r),n.addEventListener("keydown",e=>{"Enter"===e.key&&r(),"Escape"===e.key&&t.cancel()}),n}}(e)}}function u(e,t){return""===e?t?.nullable?null:(t?.editorParams)?.min??0:Number(e)}function h(e,t,i){if(!(e instanceof HTMLInputElement))return function(e,t,i){return""===e.value||"number"!==t?.type&&"number"!=typeof i?null==i&&""===e.value?t?.nullable?null:"":e.value:Number(e.value)}(e,t,i);switch(e.type){case"checkbox":return e.checked;case"number":return u(e.value,t);case"date":return function(e,t,i){return e.value?"string"==typeof i?e.value:e.valueAsDate:t?.nullable?null:"string"==typeof i?i||(new Date).toISOString().slice(0,10):i??new Date}(e,t,i);default:return function(e,t,i){return"number"==typeof i?u(e.value,t):""===e.value&&null==i?t?.nullable?null:"":"string"==typeof i&&e.value===i.replace(/[\n\r]/g,"")?i:e.value}(e,t,i)}}var f=class{#e=new Map;#t;constructor(e){this.#t=e}setInvalid(e,t,i=""){let n=this.#e.get(e);n||(n=new Map,this.#e.set(e,n)),n.set(t,i),this.#t(e,t,!0)}clearInvalid(e,t){const i=this.#e.get(e);i&&(i.delete(t),0===i.size&&this.#e.delete(e)),this.#t(e,t,!1)}clearRowInvalid(e){const t=this.#e.get(e);if(t){const i=Array.from(t.keys());this.#e.delete(e),i.forEach(t=>this.#t(e,t,!1))}}clearAllInvalid(){const e=Array.from(this.#e.entries());this.#e.clear(),e.forEach(([e,t])=>{t.forEach((t,i)=>this.#t(e,i,!1))})}isCellInvalid(e,t){return this.#e.get(e)?.has(t)??!1}getInvalidMessage(e,t){return this.#e.get(e)?.get(t)}hasInvalidCells(e){const t=this.#e.get(e);return!!t&&t.size>0}getInvalidFields(e){return new Map(this.#e.get(e)??[])}};function g(e,t,i){const n=e.get(t);return!!n&&!w(n,i)}function w(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(typeof e!=typeof t)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!w(e[i],t[i]))return!1;return!0}if("object"==typeof e){const i=e,n=t,r=Object.keys(i),s=Object.keys(n);if(r.length!==s.length)return!1;for(const e of r)if(!w(i[e],n[e]))return!1;return!0}return!1}function m(e,t,i){e.set(t,structuredClone(i))}function p(e,t,i){const n=e.get(t);if(!n)return!1;const r=n,s=i;for(const o of Object.keys(r))s[o]=r[o];return!0}var v=class{baselines=new Map;baselinesWereCaptured=!1;newRowIds=new Set;changedRowIds=new Set;committedDirtyRowIds=new Set;clear(){this.changedRowIds.clear(),this.committedDirtyRowIds.clear(),this.baselines.clear(),this.newRowIds.clear(),this.baselinesWereCaptured=!1}capture(e,t){const i=this.baselines.size;!function(e,t,i){for(const n of t)try{const t=i(n);null==t||e.has(t)||e.set(t,structuredClone(n))}catch{}}(this.baselines,e,t),this.baselines.size>i&&(this.baselinesWereCaptured=!0)}drainCapturedFlag(){return this.baselinesWereCaptured?(this.baselinesWereCaptured=!1,this.baselines.size):null}isRowDirty(e,t){return g(this.baselines,e,t)}hasAnyDirty(e){if(this.newRowIds.size>0)return!0;for(const[t]of this.baselines){const i=e(t);if(i&&g(this.baselines,t,i))return!0}return!1}isCellDirty(e,t,i){return function(e,t,i,n){const r=e.get(t);return!!r&&!w((0,s.readCellField)(r,n),(0,s.readCellField)(i,n))}(this.baselines,e,t,i)}getRowDirtyState(e,t){const i=this.newRowIds.has(e);return{isNew:i,isCommittedDirty:!i&&this.committedDirtyRowIds.has(e)&&g(this.baselines,e,t),hasBaseline:this.baselines.has(e)}}markPristine(e,t){m(this.baselines,e,t),this.newRowIds.delete(e),this.changedRowIds.delete(e),this.committedDirtyRowIds.delete(e)}rebaselineCell(e,t,i){const n=this.baselines.get(e);n&&(0,s.writeCellField)(n,t,i)}markNew(e){this.newRowIds.add(e),this.committedDirtyRowIds.add(e)}markDirty(e){this.changedRowIds.add(e),this.committedDirtyRowIds.add(e)}markAllPristine(e){for(const[t]of this.baselines){const i=e(t);i&&m(this.baselines,t,i)}this.newRowIds.clear(),this.changedRowIds.clear(),this.committedDirtyRowIds.clear()}getOriginalRow(e){return function(e,t){const i=e.get(t);return i?structuredClone(i):void 0}(this.baselines,e)}hasBaseline(e){return this.baselines.has(e)}getDirtyRows(e){const t=[];for(const[i,n]of this.baselines){const r=e(i);r&&g(this.baselines,i,r)&&t.push({id:i,original:structuredClone(n),current:r})}for(const i of this.newRowIds){const n=e(i);n&&t.push({id:i,original:void 0,current:n})}return t}getDirtyRowIds(e){const t=[];for(const[i]of this.baselines){const n=e(i);n&&g(this.baselines,i,n)&&t.push(i)}for(const i of this.newRowIds)t.push(i);return t}revertRow(e,t){const i=p(this.baselines,e,t);return i&&(this.changedRowIds.delete(e),this.committedDirtyRowIds.delete(e)),i}revertAll(e){for(const[t]of this.baselines){const i=e(t);i&&p(this.baselines,t,i)}this.changedRowIds.clear(),this.committedDirtyRowIds.clear()}getChangedRows(e){const t=[];for(const i of this.changedRowIds){const n=e(i);n&&t.push(n)}return t}getChangedRowIds(){return Array.from(this.changedRowIds)}isRowChanged(e){return this.changedRowIds.has(e)}},y='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])';function b(e){return e?.closest?.('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')??null}function E(e){return"string"==typeof e&&("__proto__"!==e&&"constructor"!==e&&"prototype"!==e)}function R(e){}function C(e,t){return!1===e.onBeforeEditClose?.(t)}function I(e,t,i,n,r,o,l,a){if(!n.editable)return;if(o.classList.contains("editing"))return;const{grid:u,isGridMode:f,config:g,editingCells:w,editorValueCallbacks:m}=e;let p;try{p=u.getRowId?.(t)}catch{}const v=p?e=>u.updateRow(p,e,"cascade"):R,I=E(n.field)?(0,s.readCellField)(t,n.field):void 0;o.classList.add("editing"),w.add(`${i}:${r}`);const k=a??o.parentElement;k&&function(e){e.__editingCellCount=(e.__editingCellCount??0)+1,e.setAttribute("data-has-editing","")}(k);let A=!1;const x=r=>{if(A||!f&&!e.isEditSessionActive())return;const s=p?u._getRowEntry(p):void 0,o=s?.row??t,d=s?.index??i;e.commitCellValue(d,n,r,o)},_=()=>{if(A=!0,E(n.field)){const e=(p?u._getRowEntry(p):void 0)?.row??t;(0,s.writeCellField)(e,n.field,I)}},S=document.createElement("div");S.className="tbw-editor-host",o.firstElementChild&&u.__frameworkAdapter?.releaseCell?.(o),o.innerHTML="",o.appendChild(S),S.addEventListener("keydown",t=>{if(!t.defaultPrevented){if("Enter"===t.key){const e=t.target;if(e&&"true"===e.getAttribute?.("aria-expanded")&&e.hasAttribute?.("aria-controls"))return}if("Enter"===t.key){const r=t.target,s=b(r);if(s&&s!==r)return;if(f){t.preventDefault();const e=S.querySelector("input,textarea,select");return void(e&&x(h(e,n,I)))}if(C(g,t))return;t.stopPropagation(),t.preventDefault(),A=!0,e.exitRowEdit(i,!1)}if("Escape"===t.key){if(f)return t.stopPropagation(),void t.preventDefault();if(C(g,t))return;t.stopPropagation(),t.preventDefault(),_(),e.exitRowEdit(i,!0)}}});const M=n,G=M.__editorTemplate,D=function(e,t){if(t.editor)return t.editor;if(t.__editorTemplate)return"template";if(!t.type)return;const i=e.effectiveConfig?.typeDefaults;if(i?.[t.type]?.editor)return i[t.type].editor;const n=e.__frameworkAdapter;if(n?.getTypeDefault){const i=n.getTypeDefault(t.type,e._hostElement);if(i?.editor)return i.editor}}(u,M)??c(n),L=I,T=`${i}:${n.field}`,F=[];m.set(T,e=>{for(const t of F)t(e)});const q=e=>{F.push(e)};if("template"===D&&G)!function(e,t,i,n,r,s,o,d,l){const a=i.__editorTemplate;if(!a)return;const c=a.cloneNode(!0),u=i.__compiledEditor;u?c.innerHTML=u({row:n,value:r,field:i.field,column:i,commit:s,cancel:o}):c.querySelectorAll("*").forEach(e=>{1===e.childNodes.length&&e.firstChild?.nodeType===Node.TEXT_NODE&&(e.textContent=e.textContent?.replace(/{{\s*value\s*}}/g,null==r?"":String(r)).replace(/{{\s*row\.([a-zA-Z0-9_]+)\s*}}/g,(e,t)=>{if(!E(t))return"";const i=n[t];return null==i?"":String(i)})||"")});const f=c.querySelector("input,textarea,select");if(f){f instanceof HTMLInputElement&&"checkbox"===f.type?f.checked=!!r:f.value=String(r??"");let t=!1;f.addEventListener("blur",()=>{t||s(h(f,i,r))}),f.addEventListener("keydown",n=>{const d=n;if("Enter"===d.key){if(C(e.config,d))return;d.stopPropagation(),d.preventDefault(),t=!0,s(h(f,i,r)),e.exitRowEdit(l,!1)}if("Escape"===d.key){if(C(e.config,d))return;d.stopPropagation(),d.preventDefault(),o(),e.exitRowEdit(l,!0)}}),f instanceof HTMLInputElement&&"checkbox"===f.type&&f.addEventListener("change",()=>s(f.checked)),d||setTimeout(()=>f.focus({preventScroll:!0}),0)}t.appendChild(c)}(e,S,M,t,I,x,_,l,i),q(e=>{if(null!=e&&"object"==typeof e)return;const t=S.querySelector("input,textarea,select");t&&(t instanceof HTMLInputElement&&"checkbox"===t.type?t.checked=!!e:t.value=String(e??""))});else if("string"==typeof D){const e=document.createElement(D);e.value=L,e.addEventListener("change",()=>x(e.value)),q(t=>{e.value=t}),S.appendChild(e),l||queueMicrotask(()=>{S.querySelector(y)?.focus({preventScroll:!0})})}else if("function"==typeof D){const i=D({row:t,rowId:p??"",value:L,field:n.field,column:n,commit:x,cancel:_,updateRow:v,onValueChange:q,grid:e.grid});"string"==typeof i?(S.innerHTML=i,function(e,t,i,n){const r=e.querySelector("input,textarea,select");r&&(r.addEventListener("blur",()=>{i(h(r,t,n))}),r instanceof HTMLInputElement&&"checkbox"===r.type?r.addEventListener("change",()=>i(r.checked)):r instanceof HTMLSelectElement&&r.addEventListener("change",()=>i(h(r,t,n))))}(S,n,x,I),q(e=>{const t=S.querySelector("input,textarea,select");t&&(t instanceof HTMLInputElement&&"checkbox"===t.type?t.checked=!!e:t.value=String(e??""))})):i instanceof Node?(S.appendChild(i),i instanceof HTMLInputElement||i instanceof HTMLSelectElement||i instanceof HTMLTextAreaElement?q(e=>{i instanceof HTMLInputElement&&"checkbox"===i.type?i.checked=!!e:i.value=String(e??"")}):o.setAttribute("data-editor-managed","")):!i&&S.hasChildNodes()&&o.setAttribute("data-editor-managed",""),l||queueMicrotask(()=>{S.querySelector(y)?.focus({preventScroll:!0})})}else if(D&&"object"==typeof D){const i=document.createElement("div");i.setAttribute("data-external-editor",""),i.setAttribute("data-field",n.field),S.appendChild(i),o.setAttribute("data-editor-managed","");const r={row:t,rowId:p??"",value:L,field:n.field,column:n,commit:x,cancel:_,updateRow:v,onValueChange:q,grid:e.grid};if(D.mount)try{D.mount({placeholder:i,context:r,spec:D})}catch(P){(0,d.warnDiagnostic)(d.EDITOR_MOUNT_ERROR,`External editor mount error for column '${n.field}': ${P}`,e.grid.id)}else u.dispatchEvent(new CustomEvent("mount-external-editor",{detail:{placeholder:i,spec:D,context:r}}))}!function(e,t){const i="string"==typeof t.header?t.header:t.field;if(!i)return;queueMicrotask(()=>{const t=e.querySelector(y);t&&(t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby")||t.hasAttribute("title")||t.id&&e.querySelector(`label[for="${CSS.escape(t.id)}"]`)||t.closest("label")||t.setAttribute("aria-label",i))})}(S,n)}var k=class extends o.BaseGridPlugin{static manifest={ownedProperties:[{property:"editable",level:"column",description:'the "editable" column property',isUsed:e=>!0===e||"function"==typeof e},{property:"editor",level:"column",description:'the "editor" column property'},{property:"editorParams",level:"column",description:'the "editorParams" column property'},{property:"nullable",level:"column",description:'the "nullable" column property (allows null values)'}],events:[{type:"cell-edit-committed",description:"Emitted when a cell edit is committed (for plugin-to-plugin coordination)"}],queries:[{type:"isEditing",description:"Returns whether any cell is currently being edited"},{type:"getCellEditableResolver",description:"Returns a predicate (field, row) => boolean resolving per-cell editability (rowEditable gate + column.editable true/false/function), for consumers like clipboard paste"},{type:"commitCellValue",description:"Commits a single cell value coming from a core row mutation (updateRow/updateRows), running the full edit pipeline: cancelable cell-commit (validation/abortion), dirty tracking, history, and cascade. Returns true (applied), false (vetoed), or undefined (not handled)."}]};name="editing";styles="@layer tbw-plugins{tbw-grid{--tbw-editing-bg:var(--tbw-color-selection);--tbw-editing-row-bg:var(--tbw-editing-bg);--tbw-editing-border:var(--tbw-border-input,1px solid var(--tbw-color-border-strong));--tbw-padding-editing-input:var(--tbw-cell-padding-input,2px 6px);--tbw-font-size-editor:inherit;--tbw-editing-row-outline-color:var(--tbw-color-accent);--tbw-editing-row-outline-width:1px}tbw-grid:not(.tbw-grid-mode) .data-grid-row:has(.editing){background:var(--tbw-editing-row-bg);outline:var(--tbw-editing-row-outline-width) solid var(--tbw-editing-row-outline-color);outline-offset:calc(-1 * var(--tbw-editing-row-outline-width))}tbw-grid .data-grid-row>.cell.editing{min-height:max(var(--tbw-row-height), calc(1lh + 2 * var(--tbw-cell-padding-v,.25em) + var(--tbw-border-width,1px)));justify-content:center;align-items:center;padding:0;display:flex;overflow:hidden}tbw-grid .data-grid-row>.cell.editing input:not([type=checkbox]),tbw-grid .data-grid-row>.cell.editing select,tbw-grid .data-grid-row>.cell.editing textarea{border:var(--tbw-editing-border);width:100%;min-width:0;height:100%;padding:var(--tbw-padding-editing-input);font-size:var(--tbw-font-size-editor);flex:auto;align-self:stretch}tbw-grid .tbw-editor-host{display:contents}tbw-grid{--tbw-invalid-bg:light-dark(#fef2f2,#450a0a);--tbw-invalid-border-color:light-dark(#ef4444,#f87171)}tbw-grid .data-grid-row>.cell[data-invalid=true]{background:var(--tbw-invalid-bg);outline:1px solid var(--tbw-invalid-border-color);outline-offset:-1px}}";get defaultConfig(){return{mode:"row",editOn:"click"}}get#i(){return"grid"===this.config.mode}#n(e,t){const i=this.#r.effectiveConfig?.rowEditable;if(i&&!i(t))return!1;const{editable:n}=e;return"function"==typeof n?n(t):!0===n}#s(e){return!0===e.editable||"function"==typeof e.editable}#o=-1;#d;#l;#a=-1;#c=new Map;#u=new Set;#h=new WeakSet;#f=new Map;#g=!1;#w=-1;#m;#p=!1;#v=!1;#y=!1;#b=null;#E=new v;#R=new Set;#C;get#r(){return this.grid}attach(e){super.attach(e);const t=this.disconnectSignal,i=this.#r;this.#m=new f((e,t,i)=>{this.#I(e,t,i)}),this.#C={grid:i,isGridMode:this.#i,config:this.config,editingCells:this.#u,editorValueCallbacks:this.#f,isEditSessionActive:()=>-1!==this.#o,commitCellValue:(e,t,i,n)=>this.#k(e,t,i,n),exitRowEdit:(e,t)=>this.#A(e,t)},this.#x(),Object.defineProperty(e,"changedRows",{get:()=>this.changedRows,configurable:!0}),Object.defineProperty(e,"changedRowIds",{get:()=>this.changedRowIds,configurable:!0}),Object.defineProperty(e,"_changedRowIdSet",{get:()=>this.#E.changedRowIds,configurable:!0}),e.resetChangedRows=e=>this.resetChangedRows(e),this.#_(t,i),this.#i&&(i._isGridEditMode=!0,this.gridElement.classList.add("tbw-grid-mode"),this.requestRender(),this.#S(t,i))}#_(e,t){if(document.addEventListener("keydown",e=>{if(!this.#i&&"Escape"===e.key&&-1!==this.#o){if(C(this.config,e))return;this.#A(this.#o,!0)}},{capture:!0,signal:e}),document.addEventListener("mousedown",e=>{if(this.#i)return;if(-1===this.#o)return;const i=t.findRenderedRowElement?.(this.#o);if(!i)return;if((e.composedPath&&e.composedPath()||[]).includes(i))return;const n=e.target;if(!n||this.gridElement.contains(n)||!this.grid.containsFocus?.(n)){if(n&&!this.gridElement.contains(n)){const e=t.findRenderedRowElement?.(this.#o);if(e&&function(e,t){if(!e)return!1;const i=t.querySelectorAll('[aria-expanded="true"][aria-controls]');for(let n=0;n<i.length;n++){const r=i[n].getAttribute("aria-controls");if(!r)continue;const s=t.ownerDocument?.getElementById(r);if(s&&s.contains(e))return!0}return!1}(n,e))return}C(this.config,e)||queueMicrotask(()=>{-1!==this.#o&&this.#A(this.#o,!1)})}},{signal:e}),this.config.focusTrap&&this.gridElement.addEventListener("focusout",e=>{if(this.#i)return;if(-1===this.#o)return;const t=e.relatedTarget;t&&this.grid.containsFocus?.(t)||t&&this.gridElement.contains(t)||queueMicrotask(()=>{-1!==this.#o&&this.#M()})},{signal:e}),this.gridElement.addEventListener("cell-change",e=>{const t=e.detail;if("user"===t.source)return;const i=`${t.rowIndex}:${t.field}`,n=this.#f.get(i);n&&n(t.newValue)},{signal:e}),this.config.dirtyTracking){const t=e=>{const t=e.detail?.action;if(!t)return;const i=this.rows[t.rowIndex];if(!i)return;const n=this.#G(i);if(!n)return;const r=this.#E.isRowDirty(n,i);this.#D(n,i,r?"modified":"pristine")};this.gridElement.addEventListener("undo",t,{signal:e}),this.gridElement.addEventListener("redo",t,{signal:e}),this.on("row-inserted",e=>{const t=this.#G(e.row);null!=t&&this.markAsNew(String(t))})}}#S(e,t){this.gridElement.addEventListener("focusin",e=>{const i=e.target;if(i!==this.gridElement&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')){if(this.#v)return i.blur(),void this.gridElement.focus();const e=t._focusRow,n=t._focusCol,r=this.#b;if(!r||r.rowIndex!==e||r.colIndex!==n){const i=t._visibleColumns?.[n],r=t._rows?.[e];if(i?.field&&r){const t=i.field;this.#b={rowIndex:e,colIndex:n,field:t,value:(0,s.readCellField)(r,t)}}}this.#p=!0}},{signal:e}),this.gridElement.addEventListener("focusout",e=>{const t=e.target,i=e.relatedTarget;if(t&&i){if(t.contains(i))return;const e=b(i);if(e&&e!==this.gridElement&&this.gridElement.contains(e))return}i&&(this.gridElement.contains(i)||this.grid.containsFocus?.(i))&&i.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')||(this.#p=!1,this.#b=null)},{signal:e}),this.gridElement.addEventListener("keydown",e=>{if("Escape"===e.key&&this.#p){if(C(this.config,e))return void queueMicrotask(()=>{this.#p&&this.#L()});this.#L(),e.preventDefault(),e.stopPropagation()}},{capture:!0,signal:e}),this.gridElement.addEventListener("mousedown",e=>{e.target.matches('input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])')&&(this.#v=!1)},{signal:e})}detach(){this.#r._isGridEditMode=!1,this.gridElement.classList.remove("tbw-grid-mode"),this.#o=-1,this.#d=void 0,this.#l=void 0,this.#a=-1,this.#c.clear(),this.#E.clear(),this.#u.clear(),this.#f.clear(),this.#p=!1,this.#v=!1,this.#b=null,this.#y=!1,this.#h=new WeakSet,super.detach()}handleQuery(e){if("isEditing"===e.type)return this.#i||-1!==this.#o;if("getCellEditableResolver"===e.type){const e=this.#r.effectiveConfig?.columns??[],t=new Map;for(const i of e)t.set(i.field,i);return(e,i)=>{const n=t.get(e);return!!n&&this.#n(n,i)}}return"commitCellValue"===e.type?this.#T(e.context):void 0}#T(e){const t=this.#r,i=(t._visibleColumns??[]).find(t=>t.field===e.field)??t._columns?.find(t=>t.field===e.field),n=e.row??(null!=e.rowId?t._getRowEntry(e.rowId)?.row:void 0)??t._rows?.[e.rowIndex];if("sync"===e.source){if(!n||!E(e.field))return;(0,s.writeCellField)(n,e.field,e.newValue),(0,s.invalidateAccessorCache)(n);const t=this.#G(n);if(t&&this.config.dirtyTracking){this.#E.rebaselineCell(t,e.field,e.newValue);const i=this.#E.isRowDirty(t,n);i||this.#E.changedRowIds.delete(t),this.#D(t,n,i?"modified":"pristine")}return!0}if(i&&n&&E(e.field)){if("history"===e.source){(0,s.writeCellField)(n,e.field,e.newValue),(0,s.invalidateAccessorCache)(n);const t=this.#G(n);if(t&&this.config.dirtyTracking){const e=this.#E.isRowDirty(t,n);e||this.#E.changedRowIds.delete(t),this.#D(t,n,e?"modified":"pristine")}return!0}return this.#k(e.rowIndex,i,e.newValue,n,e.source),(0,s.readCellField)(n,e.field)===e.newValue}}onCellClick(e){if(this.#i)return!1;const t=this.#r,i=this.config.editOn??t.effectiveConfig?.editOn;if(!1===i||"manual"===i)return!1;if("click"!==i&&"dblclick"!==i)return!1;const n="dblclick"===e.originalEvent.type;if("click"===i&&n)return!1;if("dblclick"===i&&!n)return!1;const{rowIndex:r}=e;return!!t._columns?.some(e=>this.#s(e))&&(!!this.#F(t._rows[r])&&(e.originalEvent.stopPropagation(),this.beginBulkEdit(r),!0))}onKeyDown(e){switch(e.key){case"Escape":return this.#q(e);case"ArrowUp":case"ArrowDown":case"ArrowLeft":case"ArrowRight":return this.#P(e);case"Tab":return this.#V(e);case" ":case"Spacebar":return this.#O(e);case"Enter":return!(e.shiftKey||e.ctrlKey||e.altKey||e.metaKey)&&this.#$(e);case"F2":return this.#N(e);default:return!1}}#q(e){return this.#i&&this.#p?(this.#L(),this.requestAfterRender(),!0):-1!==this.#o&&!this.#i&&(C(this.config,e)||this.#A(this.#o,!0),!0)}#P(e){const t=b(e.target),i=!!t&&t!==this.gridElement,n="ArrowUp"===e.key||"ArrowDown"===e.key;return!(this.#i&&!this.#p&&!i)&&(!(!this.#i||!this.#p&&!i||!n)||!(!n||-1===this.#o||this.#i))}#V(e){return!(-1===this.#o&&!this.#i)&&(e.preventDefault(),this.#y?(this.#A(this.#o,!1),!0):(this.#K(!e.shiftKey),!0))}#O(e){if(e.shiftKey||e.ctrlKey||e.metaKey||e.altKey)return!1;if(-1!==this.#o)return!1;const t=this.#r,i=t._focusRow,n=t._focusCol;if(i<0||n<0)return!1;const r=t._visibleColumns[n],o=t._rows[i];if(!r||!o||"boolean"!==r.type)return!1;if(!this.#n(r,o))return!1;const d=r.field;return!!E(d)&&(this.#k(i,r,!(0,s.readCellField)(o,d),o),e.preventDefault(),this.requestRender(),!0)}#$(e){if(this.#i&&!this.#p)return this.#M(),!0;if(this.#i&&this.#p)return this.#j(e);if(-1!==this.#o){const t=e.target;return(!t||"true"!==t.getAttribute?.("aria-expanded")||!t.hasAttribute?.("aria-controls"))&&!!C(this.config,e)}return this.#H(e)}#j(e){const t=b(e.target);if(t&&t!==e.target)return!0;this.#b=null;const i=document.activeElement;return i&&this.gridElement.contains(i)&&(i.blur(),this.gridElement.focus()),this.#p=!1,this.#v=!0,this.requestAfterRender(),!0}#H(e){const t=this.#r,i=this.config.editOn??t.effectiveConfig?.editOn;if(!1===i||"manual"===i)return!1;const n=t._focusRow,r=t._focusCol;if(n<0)return!1;const o=t._columns?.some(e=>this.#s(e)),d=t._rows[n];if(!o||!this.#F(d))return!1;const l=t._visibleColumns[r]?.field??"",a=l&&d?(0,s.readCellField)(d,l):void 0,c=this.gridElement.querySelector(`[data-row="${n}"][data-col="${r}"]`),u=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,detail:{rowIndex:n,colIndex:r,field:l,value:a,row:d,cellEl:c,trigger:"keyboard",originalEvent:e}});return this.gridElement.dispatchEvent(u),u.defaultPrevented?(e.preventDefault(),!0):(this.beginBulkEdit(n),!0)}#N(e){if(-1!==this.#o||this.#i)return!1;const t=this.#r;if(!1===(this.config.editOn??t.effectiveConfig?.editOn))return!1;const i=t._focusRow,n=t._focusCol;if(i<0||n<0)return!1;const r=t._visibleColumns[n],s=t._rows[i];return!!(r&&s&&r.field)&&(!!this.#n(r,s)&&(e.preventDefault(),this.beginCellEdit(i,r.field),!0))}#z(e){const t={};for(const i of Array.from(e.attributes)){if(!i.name.startsWith("data-"))continue;const e=i.name.slice(5).replace(/-([a-z])/g,(e,t)=>t.toUpperCase()).trim();e&&(t[e]=i.value)}return t}#W(){const e=this.#r,t=e._hostElement;if(!t)return;const i=e.effectiveConfig;if(!i)return;const n=Array.from(t.children).filter(e=>"tbw-grid-type"===e.tagName.toLowerCase());if(!n.length)return;const s=e.__frameworkAdapter,o=i.typeDefaults??={};for(let d=0;d<n.length;d++){const e=n[d],t=e.getAttribute("name")?.trim();if(!t)continue;const i=o[t];if(i?.editor)continue;const l=e.querySelector("tbw-grid-column-editor"),a=l??e;let c=s?.canHandle?.(a)?s.createEditor?.(a):void 0;if(!c&&l){const t=this.#z(e),i=(0,r.compileTemplate)(l.innerHTML);c=e=>i({row:e.row,value:e.value,field:e.field,column:e.column,typeDefault:t})}c&&(o[t]={...i??{},editor:c})}}processColumns(e){const t=this.#r;this.#W();const i=t.effectiveConfig?.typeDefaults,n=t.__frameworkAdapter,r=!!i||!!n?.getTypeDefault;return e.map(e=>{const s=e.__element;if(s&&!this.#h.has(s)){this.#h.add(s),null==e.editable&&s.hasAttribute("editable")&&(e.editable="false"!==s.getAttribute("editable"));const t=e;if(!t.__editorTemplate){const e=s.querySelector("tbw-grid-column-editor");e&&(t.__editorTemplate=e)}}if(!e.type||!r)return e;let o;if(i?.[e.type]?.editorParams&&(o=i[e.type].editorParams),!o&&n?.getTypeDefault){const i=n.getTypeDefault(e.type,t._hostElement);i?.editorParams&&(o=i.editorParams)}return o?{...e,editorParams:{...o,...e.editorParams}}:e})}processRows(e){const t=this.#r;if(this.config.dirtyTracking&&t.getRowId&&this.#E.capture(e,e=>{try{return t.getRowId?.(e)}catch{return}}),-1===this.#o||this.#i)return e;const i=this.#d,n=this.#l;if(!i||!n)return e;const r=[...e];let s=-1;for(let o=0;o<r.length;o++)if(this.#G(r[o])===i){s=o;break}return-1===s?(setTimeout(()=>this.cancelActiveRowEdit(),0),r):(r[s]=n,this.#o!==s&&this.#B(this.#o,s),r)}afterRender(){const e=this.#r;if(-1!==this.#o&&this.#l&&!this.#i&&e._rows[this.#o]!==this.#l){const t=e._rows.indexOf(this.#l);if(-1===t)return void setTimeout(()=>this.cancelActiveRowEdit(),0);this.#B(this.#o,t)}if(this.#g&&(this.#g=!1,this.#U(e)),-1!==this.#w){const t=this.#w;this.#w=-1,e.animateRow?.(t,"change")}const t=this.#E.drainCapturedFlag();if(null!=t&&this.emit("baselines-captured",{count:t}),!this.#i&&0!==this.#u.size)for(const i of this.#u){const[t,n]=i.split(":"),r=parseInt(t,10),s=parseInt(n,10),o=this.#Q(r,s);if(!o||o.classList.contains("editing"))continue;const d=e._rows[r],l=e._visibleColumns[s];d&&l&&this.#X(d,r,l,s,o,!0)}}afterCellRender(e){const{row:t,rowIndex:i,column:n,colIndex:r,cellElement:o}=e,d=this.#n(n,t);if(d)o.removeAttribute("aria-readonly");else if(o.setAttribute("aria-readonly","true"),this.#i&&o.classList.contains("editing")){o.classList.remove("editing");const e=(0,s.readCellField)(t,n.field);o.textContent=null==e?"":String(e)}this.#i&&d&&(o.classList.contains("editing")||this.#X(t,i,n,r,o,!0,e.rowElement))}afterRowRender(e){if(!this.config.dirtyTracking)return;const t=this.#r.getRowId?.(e.row);if(!t)return;const{isNew:i,isCommittedDirty:n,hasBaseline:r}=this.#E.getRowDirtyState(t,e.row),s=e.rowElement;if(s.classList.toggle("tbw-row-dirty",n),s.classList.toggle("tbw-row-new",i),r){const i=s.querySelectorAll(".cell[data-field]");for(let n=0;n<i.length;n++){const r=i[n],s=r.getAttribute("data-field");s&&r.classList.toggle("tbw-cell-dirty",this.#E.isCellDirty(t,e.row,s))}}else{const e=s.querySelectorAll(".tbw-cell-dirty");for(let t=0;t<e.length;t++)e[t].classList.remove("tbw-cell-dirty")}}onScrollRender(){this.afterRender()}get changedRows(){return this.#E.getChangedRows(e=>this.grid.getRow(e))}get changedRowIds(){return this.#E.getChangedRowIds()}get activeEditRow(){return this.#o}get activeEditCol(){return this.#a}isRowEditing(e){return this.#o===e}isCellEditing(e,t){return this.#u.has(`${e}:${t}`)}isRowChanged(e){const t=this.#r,i=t._rows[e];if(!i)return!1;try{const e=t.getRowId?.(i);return!!e&&this.#E.isRowChanged(e)}catch{return!1}}isRowChangedById(e){return this.#E.isRowChanged(e)}isDirty(e){if(!this.config.dirtyTracking)return!1;if(this.#E.newRowIds.has(e))return!0;const t=this.grid.getRow(e);return!!t&&this.#E.isRowDirty(e,t)}isPristine(e){return!this.isDirty(e)}get dirty(){if(!this.config.dirtyTracking)return!1;const e=this.#r;return this.#E.hasAnyDirty(t=>e._getRowEntry(t)?.row)}get pristine(){return!this.dirty}markAsPristine(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&(this.#E.markPristine(e,t),this.emit("dirty-change",{rowId:e,row:t,original:t,type:"pristine"}))}markAsNew(e){if(!this.config.dirtyTracking)return;this.#E.markNew(e);const t=this.grid.getRow(e);this.emit("dirty-change",{rowId:e,row:t,original:void 0,type:"new"})}markAsDirty(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&(this.#E.markDirty(e),this.#D(e,t,"modified"))}markAllPristine(){if(!this.config.dirtyTracking)return;const e=this.#r;this.#E.markAllPristine(t=>e._getRowEntry(t)?.row)}getOriginalRow(e){if(this.config.dirtyTracking)return this.#E.getOriginalRow(e)}hasBaseline(e){return!!this.config.dirtyTracking&&this.#E.hasBaseline(e)}getDirtyRows(){if(!this.config.dirtyTracking)return[];const e=this.#r;return this.#E.getDirtyRows(t=>e._getRowEntry(t)?.row)}get dirtyRowIds(){if(!this.config.dirtyTracking)return[];const e=this.#r;return this.#E.getDirtyRowIds(t=>e._getRowEntry(t)?.row)}revertRow(e){if(!this.config.dirtyTracking)return;const t=this.grid.getRow(e);t&&this.#E.revertRow(e,t)&&(this.#D(e,t,"reverted"),this.requestRender())}revertAll(){if(!this.config.dirtyTracking)return;const e=this.#r;this.#E.revertAll(t=>e._getRowEntry(t)?.row),this.requestRender()}setInvalid(e,t,i=""){this.#m.setInvalid(e,t,i)}clearInvalid(e,t){this.#m.clearInvalid(e,t)}clearRowInvalid(e){this.#m.clearRowInvalid(e)}clearAllInvalid(){this.#m.clearAllInvalid()}isCellInvalid(e,t){return this.#m.isCellInvalid(e,t)}getInvalidMessage(e,t){return this.#m.getInvalidMessage(e,t)}hasInvalidCells(e){return this.#m.hasInvalidCells(e)}getInvalidFields(e){return this.#m.getInvalidFields(e)}resetChangedRows(e){const t=this.changedRows,i=this.changedRowIds;this.#E.changedRowIds.clear(),this.#E.committedDirtyRowIds.clear(),this.#x(),e||this.emit("changed-rows-reset",{rows:t,ids:i}),this.#r._rowPool?.forEach(e=>e.classList.remove("changed"))}beginCellEdit(e,t){const i=this.#r,n=i._visibleColumns.findIndex(e=>e.field===t);if(-1===n)return;const r=i._visibleColumns[n],s=i._rows[e];if(!r||!s||!this.#n(r,s))return;const o=this.#Q(e,n);o&&(this.#y=!0,this.#Y(e,n,o))}beginBulkEdit(e){const t=this.#r;if(!1===(this.config.editOn??t.effectiveConfig?.editOn))return;if(!t._columns?.some(e=>this.#s(e)))return;const i=t.findRenderedRowElement?.(e);if(!i)return;const n=t._rows[e];this.#F(n)&&(this.#y=!1,this.#Z(e,n),Array.from(i.children).forEach((i,r)=>{const s=t._visibleColumns[r];if(s&&this.#n(s,n)){const t=i;t.classList.contains("editing")||this.#X(n,e,s,r,t,!0)}}),setTimeout(()=>{let e=i.querySelector(`.cell[data-col="${t._focusCol}"]`);if(e?.classList.contains("editing")||(e=i.querySelector(".cell.editing")),e?.classList.contains("editing")){const t=e.querySelector(y);try{t?.focus({preventScroll:!0})}catch{}}},0))}commitActiveRowEdit(){-1!==this.#o&&this.#A(this.#o,!1)}cancelActiveRowEdit(){-1!==this.#o&&this.#A(this.#o,!0)}#G(e){if(e)try{return this.#r.getRowId?.(e)}catch{return}}#Q(e,t){return(this.#r.findRenderedRowElement?.(e))?.querySelector(`.cell[data-col="${t}"]`)??null}#F(e){if(!e)return!0;const t=this.#r.effectiveConfig?.rowEditable;return!t||!1!==t(e)}#D(e,t,i){this.emit("dirty-change",{rowId:e,row:t,original:this.#E.getOriginalRow(e),type:i})}#L(){this.#J();const e=document.activeElement;e&&this.gridElement.contains(e)&&(e.blur(),this.gridElement.focus()),this.#p=!1,this.#v=!0}#ee(e,t,i){i&&(Object.keys(i).forEach(e=>{t[e]=i[e]}),e&&(this.#E.changedRowIds.delete(e),this.#E.committedDirtyRowIds.delete(e),this.clearRowInvalid(e)))}#I(e,i,n){const r=this.#r,s=r._visibleColumns?.findIndex(e=>e.field===i);if(-1===s||void 0===s)return;const o=r._rows?.findIndex(t=>this.#G(t)===e);if(-1===o||void 0===o)return;const d=this.#Q(o,s);if(d)if(n){d.setAttribute("data-invalid","true"),d.setAttribute("aria-invalid","true");const n=this.#m.getInvalidMessage(e,i);n&&(d.setAttribute("title",n),d.removeAttribute(t.GridDataAttrs.TRUNCATED))}else d.removeAttribute("data-invalid"),d.removeAttribute("aria-invalid"),d.removeAttribute("title")}#B(e,t){this.#o=t;const i=new Set,n=`${e}:`;for(const o of this.#u)o.startsWith(n)?i.add(`${t}:${o.substring(n.length)}`):i.add(o);this.#u.clear();for(const o of i)this.#u.add(o);const r=this.#c.get(e);void 0!==r&&(this.#c.delete(e),this.#c.set(t,r));const s=[];for(const[o,d]of this.#f)o.startsWith(n)&&(s.push([`${t}:${o.substring(n.length)}`,d]),this.#f.delete(o));for(const[o,d]of s)this.#f.set(o,d);this.#x()}#Y(e,t,i){const n=this.#r,r=n._rows[e],s=n._visibleColumns[t];r&&s&&this.#n(s,r)&&(i.classList.contains("editing")||(this.#o!==e&&this.#Z(e,r),this.#a=t,this.#X(r,e,s,t,i,!1)))}#J(){const e=this.#b;if(!e)return;const t=this.#r._rows?.[e.rowIndex];t&&(0,s.writeCellField)(t,e.field,e.value);const i=`${e.rowIndex}:${e.field}`,n=this.#f.get(i);if(n&&n(e.value),this.emit("cell-cancel",{rowIndex:e.rowIndex,colIndex:e.colIndex,field:e.field,previousValue:e.value}),t){const e=this.#G(t);e&&(this.config.dirtyTracking?this.#E.isRowDirty(e,t)||(this.#E.changedRowIds.delete(e),this.#D(e,t,"reverted")):this.#E.changedRowIds.delete(e))}this.requestRender(),this.#b=null}#M(){const e=this.#r,t=e._focusRow,i=e._focusCol;if(t<0||i<0)return;const n=this.#Q(t,i);if(n?.classList.contains("editing")){const e=n.querySelector(y);e&&(this.#v=!1,e.focus(),this.#p=!0,e instanceof HTMLInputElement&&("text"===e.type||"number"===e.type)&&e.select())}}#K(e){const t=this.#r,i=t._rows,r=this.#i?t._focusRow:this.#o,s=i[r],o=t._visibleColumns.map((e,t)=>s&&this.#n(e,s)?t:-1).filter(e=>e>=0);if(0===o.length)return;const d=o.indexOf(t._focusCol)+(e?1:-1);if(d>=0&&d<o.length){t._focusCol=o[d];const e=this.#Q(r,o[d]);return e?.classList.contains("editing")&&e.querySelector(y)?.focus({preventScroll:!0}),void(0,n.ensureCellVisible)(t,{forceHorizontalScroll:!0})}const l=r+(e?1:-1);if(l>=0&&l<i.length){const s=i[l],o=t._visibleColumns.map((e,t)=>s&&this.#n(e,s)?t:-1).filter(e=>e>=0);if(0===o.length)return;this.#i?(t._focusRow=l,t._focusCol=e?o[0]:o[o.length-1],(0,n.ensureCellVisible)(t,{forceHorizontalScroll:!0}),this.requestAfterRender(),setTimeout(()=>{const e=this.#Q(l,t._focusCol);e?.classList.contains("editing")&&e.querySelector(y)?.focus({preventScroll:!0})},0)):(this.#A(r,!1),t._focusRow=l,t._focusCol=e?o[0]:o[o.length-1],this.beginBulkEdit(l),(0,n.ensureCellVisible)(t,{forceHorizontalScroll:!0}))}}#x(){const e=this.#r;e._activeEditRows=this.#o,e._rowEditSnapshots=this.#c}#Z(e,t){this.#o!==e&&(-1!==this.#o&&this.#A(this.#o,!1),this.#c.set(e,{...t}),this.#o=e,this.#l=t,this.#d=this.#G(t),this.#x(),this.#i||(this.broadcast("edit-open",{rowIndex:e,rowId:this.#d??"",row:t}),(0,i.announce)(this.gridElement,(0,i.getA11yMessage)(this.gridElement,"editingStarted",e))))}#A(e,t){if(this.#o!==e)return;const n=this.#r,r=this.#c.get(e),s=n.findRenderedRowElement?.(e),{rowId:o,current:d}=this.#te(e);!t&&s&&d&&this.#ie(s,e,d),t||this.#i||!d||this.emit("before-edit-close",{rowIndex:e,rowId:o??"",row:d}),t&&d?this.#ee(o,d,r):!t&&d&&this.#ne(e,o,d,r),this.#re(e),this.#g=!0,s?this.#se(s,n):(this.#U(n),this.#g=!1),!this.#i&&d&&(this.broadcast("edit-close",{rowIndex:e,rowId:o??"",row:d,reverted:t}),t||(0,i.announce)(this.gridElement,(0,i.getA11yMessage)(this.gridElement,"editingCommitted",e)))}#te(e){const t=this.#r;let i=this.#d;const n=(i?t._getRowEntry(i):void 0)?.row??this.#l??t._rows[e];return!i&&n&&(i=this.#G(n)),{rowId:i,current:n}}#ie(e,t,i){const n=this.#r;e.querySelectorAll(".cell.editing").forEach(e=>{const r=Number(e.getAttribute("data-col"));if(isNaN(r))return;const o=n._visibleColumns[r];if(!o)return;if(e.hasAttribute("data-editor-managed"))return;const d=e.querySelector("input,textarea,select");if(!d)return;const l=o.field,a=(0,s.readCellField)(i,l),c=h(d,o,a);a!==c&&this.#k(t,o,c,i)})}#ne(e,t,i,n){const r=function(e,t){if(!e)return!1;const i=e,n=t,r=new Set([...Object.keys(i),...Object.keys(n)]);for(const s of r)if(i[s]!==n[s])return!0;return!1}(n,i),s=t?this.#E.changedRowIds.has(t):r;this.emitCancelable("row-commit",{rowIndex:e,rowId:t??"",row:i,oldValue:n,newValue:i,changed:s,changedRows:this.changedRows,changedRowIds:this.changedRowIds})?n&&this.#ee(t,i,n):(t&&this.config.dirtyTracking&&(this.#E.isRowDirty(t,i)?this.#E.committedDirtyRowIds.add(t):this.#E.committedDirtyRowIds.delete(t)),r&&this.isAnimationEnabled&&(this.#w=e))}#re(e){this.#c.delete(e),this.#o=-1,this.#d=void 0,this.#l=void 0,this.#a=-1,this.#y=!1,this.#x();for(const t of this.#u)t.startsWith(`${e}:`)&&this.#u.delete(t);for(const t of this.#f.keys())t.startsWith(`${e}:`)&&this.#f.delete(t)}#se(e,t){const i=t.__frameworkAdapter,n=e.querySelectorAll(".cell.editing");i?.releaseCell&&n.forEach(e=>{i.releaseCell(e)}),n.forEach(e=>{e.classList.remove("editing"),function(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing")}(e.parentElement)}),t.refreshVirtualWindow(!0)}#k(e,t,i,n,r="user"){const o=t.field;if(!E(o))return;const d=(0,s.readCellField)(n,o);if(d===i)return;const l=this.#r,a=this.#G(n),c=!a||!this.#E.changedRowIds.has(a),u=a?e=>this.grid.updateRow(a,e,"cascade"):R;let h=!1;const f=a?e=>{h=!0,this.setInvalid(a,o,e??"")}:()=>{},g=`${a??e}\0${o}`;if(this.#R.has(g))return;let w=!1;this.#R.add(g);try{w=this.emitCancelable("cell-commit",{row:n,rowId:a??"",field:o,oldValue:d,value:i,source:r,rowIndex:e,changedRows:this.changedRows,changedRowIds:this.changedRowIds,firstTimeForRow:c,updateRow:u,setInvalid:f})}finally{this.#R.delete(g)}if(w)return;if(a&&!h&&this.isCellInvalid(a,o)&&this.clearInvalid(a,o),(0,s.writeCellField)(n,o,i),(0,s.invalidateAccessorCache)(n),a&&this.#E.changedRowIds.add(a),this.#x(),this.config.dirtyTracking&&a){const e=this.#E.isRowDirty(a,n);this.#D(a,n,e?"modified":"pristine")}this.emitPluginEvent("cell-edit-committed",{rowIndex:e,field:o,oldValue:d,newValue:i});const m=l.findRenderedRowElement?.(e);m&&m.classList.add("changed")}#X(e,t,i,n,r,s,o){I(this.#C,e,t,i,n,r,s,o)}#U(e){queueMicrotask(()=>{try{const t=e._focusRow,i=e._focusCol,n=e.findRenderedRowElement?.(t);if(n){Array.from(e._bodyEl.querySelectorAll(".cell-focus")).forEach(e=>e.classList.remove("cell-focus"));const r=n.querySelector(`.cell[data-row="${t}"][data-col="${i}"]`);r&&(r.classList.add("cell-focus"),r.setAttribute("aria-selected","true"),r.hasAttribute("tabindex")||r.setAttribute("tabindex","-1"),r.focus({preventScroll:!0}))}}catch{}})}};e.EditingPlugin=k,e.defaultEditorFor=c});
|
|
2
2
|
//# sourceMappingURL=editing.umd.js.map
|