@toolbox-web/grid 1.25.1 → 1.26.0

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.
Files changed (101) hide show
  1. package/all.js +2 -2
  2. package/all.js.map +1 -1
  3. package/index.js +1 -1
  4. package/index.js.map +1 -1
  5. package/lib/core/grid.d.ts +18 -2
  6. package/lib/core/internal/diagnostics.d.ts +164 -0
  7. package/lib/core/internal/sorting.d.ts +53 -4
  8. package/lib/core/internal/utils.d.ts +0 -8
  9. package/lib/core/plugin/base-plugin.d.ts +18 -2
  10. package/lib/core/plugin/plugin-manager.d.ts +6 -4
  11. package/lib/core/types.d.ts +3 -2
  12. package/lib/features/registry.js +1 -1
  13. package/lib/features/registry.js.map +1 -1
  14. package/lib/plugins/clipboard/index.js +1 -1
  15. package/lib/plugins/clipboard/index.js.map +1 -1
  16. package/lib/plugins/column-virtualization/index.js +1 -1
  17. package/lib/plugins/column-virtualization/index.js.map +1 -1
  18. package/lib/plugins/context-menu/index.js +1 -1
  19. package/lib/plugins/context-menu/index.js.map +1 -1
  20. package/lib/plugins/editing/index.js +1 -1
  21. package/lib/plugins/editing/index.js.map +1 -1
  22. package/lib/plugins/editing/types.d.ts +52 -4
  23. package/lib/plugins/export/ExportPlugin.d.ts +2 -2
  24. package/lib/plugins/export/index.js +1 -1
  25. package/lib/plugins/export/index.js.map +1 -1
  26. package/lib/plugins/filtering/FilteringPlugin.d.ts +2 -2
  27. package/lib/plugins/filtering/index.js +1 -1
  28. package/lib/plugins/filtering/index.js.map +1 -1
  29. package/lib/plugins/grouping-columns/index.js +1 -1
  30. package/lib/plugins/grouping-columns/index.js.map +1 -1
  31. package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts +2 -2
  32. package/lib/plugins/grouping-rows/index.js +2 -2
  33. package/lib/plugins/grouping-rows/index.js.map +1 -1
  34. package/lib/plugins/master-detail/index.js +1 -1
  35. package/lib/plugins/master-detail/index.js.map +1 -1
  36. package/lib/plugins/multi-sort/MultiSortPlugin.d.ts +2 -2
  37. package/lib/plugins/multi-sort/index.js +1 -1
  38. package/lib/plugins/multi-sort/index.js.map +1 -1
  39. package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts +2 -2
  40. package/lib/plugins/pinned-columns/index.js +1 -1
  41. package/lib/plugins/pinned-columns/index.js.map +1 -1
  42. package/lib/plugins/pinned-rows/index.js +1 -1
  43. package/lib/plugins/pinned-rows/index.js.map +1 -1
  44. package/lib/plugins/pivot/index.js +1 -1
  45. package/lib/plugins/pivot/index.js.map +1 -1
  46. package/lib/plugins/print/PrintPlugin.d.ts +2 -1
  47. package/lib/plugins/print/index.js +1 -1
  48. package/lib/plugins/print/index.js.map +1 -1
  49. package/lib/plugins/print/print-isolated.d.ts +2 -1
  50. package/lib/plugins/reorder-columns/ReorderPlugin.d.ts +2 -2
  51. package/lib/plugins/reorder-columns/index.js +1 -1
  52. package/lib/plugins/reorder-columns/index.js.map +1 -1
  53. package/lib/plugins/reorder-rows/RowReorderPlugin.d.ts +2 -2
  54. package/lib/plugins/reorder-rows/index.js +1 -1
  55. package/lib/plugins/reorder-rows/index.js.map +1 -1
  56. package/lib/plugins/responsive/index.js +1 -1
  57. package/lib/plugins/responsive/index.js.map +1 -1
  58. package/lib/plugins/selection/SelectionPlugin.d.ts +2 -0
  59. package/lib/plugins/selection/index.js +1 -1
  60. package/lib/plugins/selection/index.js.map +1 -1
  61. package/lib/plugins/server-side/index.js +1 -1
  62. package/lib/plugins/server-side/index.js.map +1 -1
  63. package/lib/plugins/tree/TreePlugin.d.ts +2 -2
  64. package/lib/plugins/tree/index.js +1 -1
  65. package/lib/plugins/tree/index.js.map +1 -1
  66. package/lib/plugins/undo-redo/UndoRedoPlugin.d.ts +2 -2
  67. package/lib/plugins/undo-redo/index.js +1 -1
  68. package/lib/plugins/undo-redo/index.js.map +1 -1
  69. package/lib/plugins/visibility/VisibilityPlugin.d.ts +2 -2
  70. package/lib/plugins/visibility/index.js +1 -1
  71. package/lib/plugins/visibility/index.js.map +1 -1
  72. package/package.json +1 -1
  73. package/umd/grid.all.umd.js +1 -1
  74. package/umd/grid.all.umd.js.map +1 -1
  75. package/umd/grid.umd.js +1 -1
  76. package/umd/grid.umd.js.map +1 -1
  77. package/umd/plugins/clipboard.umd.js +1 -1
  78. package/umd/plugins/clipboard.umd.js.map +1 -1
  79. package/umd/plugins/context-menu.umd.js +1 -1
  80. package/umd/plugins/context-menu.umd.js.map +1 -1
  81. package/umd/plugins/editing.umd.js +1 -1
  82. package/umd/plugins/editing.umd.js.map +1 -1
  83. package/umd/plugins/export.umd.js.map +1 -1
  84. package/umd/plugins/filtering.umd.js.map +1 -1
  85. package/umd/plugins/grouping-columns.umd.js +1 -1
  86. package/umd/plugins/grouping-columns.umd.js.map +1 -1
  87. package/umd/plugins/grouping-rows.umd.js.map +1 -1
  88. package/umd/plugins/multi-sort.umd.js.map +1 -1
  89. package/umd/plugins/pinned-columns.umd.js.map +1 -1
  90. package/umd/plugins/print.umd.js +1 -1
  91. package/umd/plugins/print.umd.js.map +1 -1
  92. package/umd/plugins/reorder-columns.umd.js.map +1 -1
  93. package/umd/plugins/reorder-rows.umd.js.map +1 -1
  94. package/umd/plugins/responsive.umd.js +1 -1
  95. package/umd/plugins/responsive.umd.js.map +1 -1
  96. package/umd/plugins/selection.umd.js +1 -1
  97. package/umd/plugins/selection.umd.js.map +1 -1
  98. package/umd/plugins/tree.umd.js.map +1 -1
  99. package/umd/plugins/undo-redo.umd.js +1 -1
  100. package/umd/plugins/undo-redo.umd.js.map +1 -1
  101. package/umd/plugins/visibility.umd.js.map +1 -1
@@ -36,10 +36,10 @@ import { PinnedColumnsConfig, PinnedPosition } from './types';
36
36
  *
37
37
  * @example Pin ID Left and Actions Right
38
38
  * ```ts
39
- * import '@toolbox-web/grid';
39
+ * import { queryGrid } from '@toolbox-web/grid';
40
40
  * import { PinnedColumnsPlugin } from '@toolbox-web/grid/plugins/pinned-columns';
41
41
  *
42
- * const grid = document.querySelector('tbw-grid');
42
+ * const grid = queryGrid('tbw-grid');
43
43
  * grid.gridConfig = {
44
44
  * columns: [
45
45
  * { field: 'id', header: 'ID', pinned: 'left', width: 80 },
@@ -1,2 +1,2 @@
1
- function t(t){try{if("rtl"===getComputedStyle(t).direction)return"rtl"}catch{}try{const e=t.closest?.("[dir]")?.getAttribute("dir");if("rtl"===e)return"rtl"}catch{}return"ltr"}const e='<svg viewBox="0 0 16 16" width="12" height="12"><path fill="currentColor" d="M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>',i={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:e,filterActive:e,print:"🖨️"};class n{static dependencies;static manifest;aliases;version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#t;get defaultConfig(){return{}}constructor(t={}){this.userConfig=t}attach(t){this.#t?.abort(),this.#t=new AbortController,this.grid=t,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#t?.abort(),this.#t=void 0}getPlugin(t){return this.grid?.getPlugin(t)}emit(t,e){this.grid?.dispatchEvent?.(new CustomEvent(t,{detail:e,bubbles:!0}))}emitCancelable(t,e){const i=new CustomEvent(t,{detail:e,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(i),i.defaultPrevented}on(t,e){this.grid?._pluginManager?.subscribe(this,t,e)}off(t){this.grid?._pluginManager?.unsubscribe(this,t)}emitPluginEvent(t,e){this.grid?._pluginManager?.emitPluginEvent(t,e)}requestRender(){this.grid?.requestRender?.()}requestColumnsRender(){this.grid?.requestColumnsRender?.()}requestRenderWithFocus(){this.grid?.requestRenderWithFocus?.()}requestAfterRender(){this.grid?.requestAfterRender?.()}requestVirtualRefresh(){this.grid?.requestVirtualRefresh?.()}get rows(){return this.grid?.rows??[]}get sourceRows(){return this.grid?.sourceRows??[]}get columns(){return this.grid?.columns??[]}get visibleColumns(){return this.grid?._visibleColumns??[]}get gridElement(){return this.grid?._hostElement}get disconnectSignal(){return this.#t?.signal??this.grid?.disconnectSignal}get gridIcons(){const t=this.grid?.gridConfig?.icons??{};return{...i,...t}}get isAnimationEnabled(){const t=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===t||"off"===t)return!1;if(!0===t||"on"===t)return!0;const e=this.gridElement;if(e){return"0"!==getComputedStyle(e).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const t=this.gridElement;if(t){const e=getComputedStyle(t).getPropertyValue("--tbw-animation-duration").trim(),i=parseInt(e,10);if(!isNaN(i))return i}return 200}resolveIcon(t,e){return void 0!==e?e:this.gridIcons[t]}setIcon(t,e){"string"==typeof e?t.innerHTML=e:e instanceof HTMLElement&&(t.innerHTML="",t.appendChild(e.cloneNode(!0)))}warn(t){var e,i;console.warn(`${e=this.gridElement.id,i=this.name,`[tbw-grid${e?`#${e}`:""}${i?`:${i}`:""}]`} ${t}`)}}function r(t){return t.pinned??t.sticky??t.meta?.pinned??t.meta?.sticky}function s(t,e){return function(t,e){return"left"===t||"right"===t?t:"rtl"===e?"start"===t?"right":"left":"start"===t?"left":"right"}(t,e)}function o(t,e){const i=r(t);return!!i&&"left"===s(i,e)}function l(t,e){const i=r(t);return!!i&&"right"===s(i,e)}function c(t){return t.some(t=>null!=r(t))}function d(e,i){const n=Array.from(e.querySelectorAll(".header-row .cell"));if(!n.length)return;const r=t(e);let s=0;for(const t of i)if(o(t,r)){const i=n.find(e=>e.getAttribute("data-field")===t.field);i&&(i.classList.add("sticky-left"),i.style.position="sticky",i.style.left=s+"px",e.querySelectorAll(`.data-grid-row .cell[data-field="${t.field}"]`).forEach(t=>{t.classList.add("sticky-left"),t.style.position="sticky",t.style.left=s+"px"}),s+=i.offsetWidth)}let c=0;for(const t of[...i].reverse())if(l(t,r)){const i=n.find(e=>e.getAttribute("data-field")===t.field);i&&(i.classList.add("sticky-right"),i.style.position="sticky",i.style.right=c+"px",e.querySelectorAll(`.data-grid-row .cell[data-field="${t.field}"]`).forEach(t=>{t.classList.add("sticky-right"),t.style.position="sticky",t.style.right=c+"px"}),c+=i.offsetWidth)}}function u(t){t.querySelectorAll(".sticky-left, .sticky-right").forEach(t=>{t.classList.remove("sticky-left","sticky-right"),t.style.position="",t.style.left="",t.style.right=""})}const a="canMoveColumn";class f extends n{static manifest={ownedProperties:[{property:"pinned",level:"column",description:'the "pinned" column property',isUsed:t=>"left"===t||"right"===t||"start"===t||"end"===t},{property:"sticky",level:"column",description:'the "sticky" column property (deprecated, use "pinned")',isUsed:t=>"left"===t||"right"===t||"start"===t||"end"===t}],incompatibleWith:[{name:"groupingColumns",reason:"Pinning reorders columns to the grid edges, but moving a column out of its column group is not supported. The group header layout cannot accommodate members at different positions."}],queries:[{type:a,description:"Prevents pinned (sticky) columns from being moved/reordered"},{type:"getStickyOffsets",description:"Returns the sticky offsets for left/right pinned columns"},{type:"getContextMenuItems",description:"Contributes pin/unpin items to the header context menu"}]};name="pinnedColumns";get defaultConfig(){return{}}isApplied=!1;leftOffsets=/* @__PURE__ */new Map;rightOffsets=/* @__PURE__ */new Map;#e=[];detach(){this.leftOffsets.clear(),this.rightOffsets.clear(),this.isApplied=!1,this.#e=[]}static detect(t,e){const i=e?.columns;return!!Array.isArray(i)&&c(i)}processColumns(e){const i=[...e];if(this.isApplied=c(i),!this.isApplied)return i;const n=this.gridElement;return function(t,e="ltr"){const i=[],n=[],o=[];for(const l of t){const t=r(l);t?"left"===s(t,e)?i.push(l):o.push(l):n.push(l)}return[...i,...n,...o]}(i,n?t(n):"ltr")}afterRender(){if(!this.isApplied)return;const t=this.gridElement,e=[...this.columns];if(!c(e))return u(t),void(this.isApplied=!1);queueMicrotask(()=>{d(t,e)})}handleQuery(t){switch(t.type){case a:return null==r(t.context)&&void 0;case"getStickyOffsets":return{left:Object.fromEntries(this.leftOffsets),right:Object.fromEntries(this.rightOffsets)};case"getContextMenuItems":{const e=t.context;if(!e.isHeader)return;const i=e.column;if(!i?.field)return;if(i.meta?.lockPinning)return;const n=this.grid?.getPluginByName("groupingColumns");if(n?.isGroupingActive())return;const s=[];return null!=r(i)?s.push({id:"pinned/unpin",label:"Unpin Column",icon:"📌",order:40,action:()=>this.setPinPosition(i.field,void 0)}):(s.push({id:"pinned/pin-left",label:"Pin Left",icon:"⬅",order:40,action:()=>this.setPinPosition(i.field,"left")}),s.push({id:"pinned/pin-right",label:"Pin Right",icon:"➡",order:41,action:()=>this.setPinPosition(i.field,"right")})),s}default:return}}setPinPosition(t,e){const i=this.columns;if(!i?.length)return;const n=i.findIndex(e=>e.field===t);if(-1===n)return;const s=this.gridElement;if(e){0===this.#e.length&&(this.#e=i.map(t=>t.field));const n=i.map(i=>{if(i.field!==t)return i;const n={...i};return n.pinned=e,delete n.sticky,n});s.columns=n}else{const e={...i[n]};delete e.pinned,delete e.sticky;const o=[...i];o.splice(n,1);const l=this.#e.indexOf(t);if(l>=0){let t=o.length;for(let e=0;e<o.length;e++){if(r(o[e]))continue;if(this.#e.indexOf(o[e].field)>l){t=e;break}}o.splice(t,0,e)}else o.splice(Math.min(n,o.length),0,e);o.some(t=>null!=r(t))||(this.#e=[]),s.columns=o}}refreshStickyOffsets(){const t=[...this.columns];d(this.gridElement,t)}getLeftPinnedColumns(){return function(t,e="ltr"){return t.filter(t=>o(t,e))}([...this.columns],t(this.gridElement))}getRightPinnedColumns(){return function(t,e="ltr"){return t.filter(t=>l(t,e))}([...this.columns],t(this.gridElement))}clearStickyPositions(){u(this.gridElement)}getHorizontalScrollOffsets(t,e){if(!this.isApplied)return;let i=0,n=0;if(t){const e=t.querySelectorAll(".sticky-left"),r=t.querySelectorAll(".sticky-right");e.forEach(t=>{i+=t.offsetWidth}),r.forEach(t=>{n+=t.offsetWidth})}else{this.gridElement.querySelectorAll(".header-row .cell").forEach(t=>{t.classList.contains("sticky-left")?i+=t.offsetWidth:t.classList.contains("sticky-right")&&(n+=t.offsetWidth)})}const r=e?.classList.contains("sticky-left")||e?.classList.contains("sticky-right");return{left:i,right:n,skipScroll:r}}}export{f as PinnedColumnsPlugin};
1
+ function t(t){try{if("rtl"===getComputedStyle(t).direction)return"rtl"}catch{}try{const e=t.closest?.("[dir]")?.getAttribute("dir");if("rtl"===e)return"rtl"}catch{}return"ltr"}function e(t,e){return`[tbw-grid${t?`#${t}`:""}${e?`:${e}`:""}]`}function i(t,i,n,r){return`${e(n,r)} ${t}: ${i}\n\n → More info: ${function(t){return`https://toolboxjs.com/grid/errors#${t.toLowerCase()}`}(t)}`}const n='<svg viewBox="0 0 16 16" width="12" height="12"><path fill="currentColor" d="M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>',r={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:n,filterActive:n,print:"🖨️"};class s{static dependencies;static manifest;aliases;version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#t;get defaultConfig(){return{}}constructor(t={}){this.userConfig=t}attach(t){this.#t?.abort(),this.#t=new AbortController,this.grid=t,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#t?.abort(),this.#t=void 0}getPlugin(t){return this.grid?.getPlugin(t)}emit(t,e){this.grid?.dispatchEvent?.(new CustomEvent(t,{detail:e,bubbles:!0}))}emitCancelable(t,e){const i=new CustomEvent(t,{detail:e,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(i),i.defaultPrevented}on(t,e){this.grid?._pluginManager?.subscribe(this,t,e)}off(t){this.grid?._pluginManager?.unsubscribe(this,t)}emitPluginEvent(t,e){this.grid?._pluginManager?.emitPluginEvent(t,e)}requestRender(){this.grid?.requestRender?.()}requestColumnsRender(){this.grid?.requestColumnsRender?.()}requestRenderWithFocus(){this.grid?.requestRenderWithFocus?.()}requestAfterRender(){this.grid?.requestAfterRender?.()}requestVirtualRefresh(){this.grid?.requestVirtualRefresh?.()}get rows(){return this.grid?.rows??[]}get sourceRows(){return this.grid?.sourceRows??[]}get columns(){return this.grid?.columns??[]}get visibleColumns(){return this.grid?._visibleColumns??[]}get gridElement(){return this.grid?._hostElement}get disconnectSignal(){return this.#t?.signal??this.grid?.disconnectSignal}get gridIcons(){const t=this.grid?.gridConfig?.icons??{};return{...r,...t}}get isAnimationEnabled(){const t=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===t||"off"===t)return!1;if(!0===t||"on"===t)return!0;const e=this.gridElement;if(e){return"0"!==getComputedStyle(e).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const t=this.gridElement;if(t){const e=getComputedStyle(t).getPropertyValue("--tbw-animation-duration").trim(),i=parseInt(e,10);if(!isNaN(i))return i}return 200}resolveIcon(t,e){return void 0!==e?e:this.gridIcons[t]}setIcon(t,e){"string"==typeof e?t.innerHTML=e:e instanceof HTMLElement&&(t.innerHTML="",t.appendChild(e.cloneNode(!0)))}warn(t,n){void 0!==n?console.warn(i(t,n,this.gridElement.id,this.name)):console.warn(`${e(this.gridElement.id,this.name)} ${t}`)}throwDiagnostic(t,e){throw new Error(i(t,e,this.gridElement.id,this.name))}}function o(t){return t.pinned??t.sticky??t.meta?.pinned??t.meta?.sticky}function l(t,e){return function(t,e){return"left"===t||"right"===t?t:"rtl"===e?"start"===t?"right":"left":"start"===t?"left":"right"}(t,e)}function c(t,e){const i=o(t);return!!i&&"left"===l(i,e)}function d(t,e){const i=o(t);return!!i&&"right"===l(i,e)}function u(t){return t.some(t=>null!=o(t))}function a(e,i){const n=Array.from(e.querySelectorAll(".header-row .cell"));if(!n.length)return;const r=t(e);let s=0;for(const t of i)if(c(t,r)){const i=n.find(e=>e.getAttribute("data-field")===t.field);i&&(i.classList.add("sticky-left"),i.style.position="sticky",i.style.left=s+"px",e.querySelectorAll(`.data-grid-row .cell[data-field="${t.field}"]`).forEach(t=>{t.classList.add("sticky-left"),t.style.position="sticky",t.style.left=s+"px"}),s+=i.offsetWidth)}let o=0;for(const t of[...i].reverse())if(d(t,r)){const i=n.find(e=>e.getAttribute("data-field")===t.field);i&&(i.classList.add("sticky-right"),i.style.position="sticky",i.style.right=o+"px",e.querySelectorAll(`.data-grid-row .cell[data-field="${t.field}"]`).forEach(t=>{t.classList.add("sticky-right"),t.style.position="sticky",t.style.right=o+"px"}),o+=i.offsetWidth)}}function f(t){t.querySelectorAll(".sticky-left, .sticky-right").forEach(t=>{t.classList.remove("sticky-left","sticky-right"),t.style.position="",t.style.left="",t.style.right=""})}const h="canMoveColumn";class g extends s{static manifest={ownedProperties:[{property:"pinned",level:"column",description:'the "pinned" column property',isUsed:t=>"left"===t||"right"===t||"start"===t||"end"===t},{property:"sticky",level:"column",description:'the "sticky" column property (deprecated, use "pinned")',isUsed:t=>"left"===t||"right"===t||"start"===t||"end"===t}],incompatibleWith:[{name:"groupingColumns",reason:"Pinning reorders columns to the grid edges, but moving a column out of its column group is not supported. The group header layout cannot accommodate members at different positions."}],queries:[{type:h,description:"Prevents pinned (sticky) columns from being moved/reordered"},{type:"getStickyOffsets",description:"Returns the sticky offsets for left/right pinned columns"},{type:"getContextMenuItems",description:"Contributes pin/unpin items to the header context menu"}]};name="pinnedColumns";get defaultConfig(){return{}}isApplied=!1;leftOffsets=/* @__PURE__ */new Map;rightOffsets=/* @__PURE__ */new Map;#e=[];detach(){this.leftOffsets.clear(),this.rightOffsets.clear(),this.isApplied=!1,this.#e=[]}static detect(t,e){const i=e?.columns;return!!Array.isArray(i)&&u(i)}processColumns(e){const i=[...e];if(this.isApplied=u(i),!this.isApplied)return i;const n=this.gridElement;return function(t,e="ltr"){const i=[],n=[],r=[];for(const s of t){const t=o(s);t?"left"===l(t,e)?i.push(s):r.push(s):n.push(s)}return[...i,...n,...r]}(i,n?t(n):"ltr")}afterRender(){if(!this.isApplied)return;const t=this.gridElement,e=[...this.columns];if(!u(e))return f(t),void(this.isApplied=!1);queueMicrotask(()=>{a(t,e)})}handleQuery(t){switch(t.type){case h:return null==o(t.context)&&void 0;case"getStickyOffsets":return{left:Object.fromEntries(this.leftOffsets),right:Object.fromEntries(this.rightOffsets)};case"getContextMenuItems":{const e=t.context;if(!e.isHeader)return;const i=e.column;if(!i?.field)return;if(i.meta?.lockPinning)return;const n=this.grid?.getPluginByName("groupingColumns");if(n?.isGroupingActive())return;const r=[];return null!=o(i)?r.push({id:"pinned/unpin",label:"Unpin Column",icon:"📌",order:40,action:()=>this.setPinPosition(i.field,void 0)}):(r.push({id:"pinned/pin-left",label:"Pin Left",icon:"⬅",order:40,action:()=>this.setPinPosition(i.field,"left")}),r.push({id:"pinned/pin-right",label:"Pin Right",icon:"➡",order:41,action:()=>this.setPinPosition(i.field,"right")})),r}default:return}}setPinPosition(t,e){const i=this.columns;if(!i?.length)return;const n=i.findIndex(e=>e.field===t);if(-1===n)return;const r=this.gridElement;if(e){0===this.#e.length&&(this.#e=i.map(t=>t.field));const n=i.map(i=>{if(i.field!==t)return i;const n={...i};return n.pinned=e,delete n.sticky,n});r.columns=n}else{const e={...i[n]};delete e.pinned,delete e.sticky;const s=[...i];s.splice(n,1);const l=this.#e.indexOf(t);if(l>=0){let t=s.length;for(let e=0;e<s.length;e++){if(o(s[e]))continue;if(this.#e.indexOf(s[e].field)>l){t=e;break}}s.splice(t,0,e)}else s.splice(Math.min(n,s.length),0,e);s.some(t=>null!=o(t))||(this.#e=[]),r.columns=s}}refreshStickyOffsets(){const t=[...this.columns];a(this.gridElement,t)}getLeftPinnedColumns(){return function(t,e="ltr"){return t.filter(t=>c(t,e))}([...this.columns],t(this.gridElement))}getRightPinnedColumns(){return function(t,e="ltr"){return t.filter(t=>d(t,e))}([...this.columns],t(this.gridElement))}clearStickyPositions(){f(this.gridElement)}getHorizontalScrollOffsets(t,e){if(!this.isApplied)return;let i=0,n=0;if(t){const e=t.querySelectorAll(".sticky-left"),r=t.querySelectorAll(".sticky-right");e.forEach(t=>{i+=t.offsetWidth}),r.forEach(t=>{n+=t.offsetWidth})}else{this.gridElement.querySelectorAll(".header-row .cell").forEach(t=>{t.classList.contains("sticky-left")?i+=t.offsetWidth:t.classList.contains("sticky-right")&&(n+=t.offsetWidth)})}const r=e?.classList.contains("sticky-left")||e?.classList.contains("sticky-right");return{left:i,right:n,skipScroll:r}}}export{g as PinnedColumnsPlugin};
2
2
  //# sourceMappingURL=index.js.map