@deephaven/iris-grid 1.28.0 → 1.29.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.
- package/dist/ColumnStatistics.js +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/IrisGrid.d.ts +28 -4
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +185 -113
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts +5 -4
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +36 -29
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridModel.d.ts +2 -2
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +2 -2
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridSelectionUtils.d.ts +26 -0
- package/dist/IrisGridSelectionUtils.d.ts.map +1 -0
- package/dist/IrisGridSelectionUtils.js +84 -0
- package/dist/IrisGridSelectionUtils.js.map +1 -0
- package/dist/IrisGridTableModel.d.ts +4 -4
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +8 -8
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +25 -3
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +283 -79
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +2 -0
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +11 -0
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/KeyedGridModel.d.ts +63 -0
- package/dist/KeyedGridModel.d.ts.map +1 -0
- package/dist/KeyedGridModel.js +12 -0
- package/dist/KeyedGridModel.js.map +1 -0
- package/dist/KeyedSelection.d.ts +194 -0
- package/dist/KeyedSelection.d.ts.map +1 -0
- package/dist/KeyedSelection.js +699 -0
- package/dist/KeyedSelection.js.map +1 -0
- package/dist/LazyIrisGrid.d.ts +1 -0
- package/dist/LazyIrisGrid.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +8 -6
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +94 -69
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.d.ts +7 -4
- package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +86 -38
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyedSelection.js","names":["EMPTY_ARRAY","EMPTY_MAP","computeGestureExtend","cursorLandingCellForRanges","nextCursorInRanges","withCommittedCursor","serializeKeyValues","values","JSON","stringify","_key","value","Number","isNaN","Infinity","KeyedSelection","empty","getModel","constructor","options","_options$selectedKeys","_options$overlayRange","_options$invertedSele","_options$selectedKeyV","_options$maxRows","_options$pendingRange","_options$anchorKey","_options$anchorRow","_options$cursorKey","_options$cursorRowHin","_options$cursorColumn","_options$selectionEnd","_options$selectionEnd2","_options$selectionEnd3","_defineProperty","selectedKeys","Set","overlayRanges","invertedSelection","selectedKeyValues","maxRows","pendingRanges","anchorKey","anchorRow","cursorKey","cursorRowHint","cursorColumn","selectionEndKey","selectionEndRowHint","selectionEndColumn","length","gestureKeys","_model$viewport$top","_model$viewport","_model$viewport$botto","_model$viewport2","model","viewTop","viewport","top","viewBottom","bottom","keys","i","_this$overlayRanges$i","startRow","endRow","last","clampedStart","Math","max","clampedEnd","min","r","data","getRowKeyData","add","key","copyWith","overrides","_objectSpread","row","isKeyableRow","selectionKeyColumnIndices","map","col","valueForCell","isEmpty","size","describe","unit","hasUniqueSelectionKeys","n","concat","isCellSelected","_column","isRowSelected","has","isColumnSelected","getNextCursorInDirection","current","direction","_this$getModel","columnCount","rowCount","getCursorLandingCell","_this$getModel2","withCursor","column","_this$getRowKeyData$k","_this$getRowKeyData","cursorRow","nextKey","withSelectionEnd","_this$getRowKeyData$k2","_this$getRowKeyData2","selectionEndRow","withMouseGestureRanges","ranges","isReplacing","arguments","undefined","withGestureAnchor","_this$getRowKeyData$k3","_this$getRowKeyData3","getGestureAnchor","viewportRow","findKeyInViewport","hint","_model$viewport$top2","_model$viewport3","_model$viewport$botto2","_model$viewport4","best","bestDist","dist","abs","_this$findKeyInViewpo","_this$findKeyInViewpo2","withGestureExtend","cursor","opts","_computeGestureExtend","newRanges","trimBefore","resetAnchor","base","trimmed","result","commitGesture","lastCommitted","settle","first","lastRow","_this$overlayRanges$i2","rEnd","next","shouldToggle","_this$overlayRanges$_","_model$viewport$top3","_model$viewport5","_model$viewport$botto3","_model$viewport6","nextKeyValues","Map","_this$overlayRanges$_2","k","set","delete","_model$viewport$top4","_model$viewport7","_model$viewport$botto4","_model$viewport8","wasEntireSelection","allowDeselect","clear","withCommittedRanges","anchor","installCommittedRanges","_model$viewport$top5","_model$viewport9","_model$viewport$botto5","_model$viewport0","carry","minRow","maxRow","_ranges$i","low","high","_ranges$_i","selectAll","truncate","resolve","keyValues","mergedKeys","mergedKeyValues","forEach","getUniqueRowCount","withToggledRow"],"sources":["../src/KeyedSelection.ts"],"sourcesContent":["import { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport {\n type CommitGestureOptions,\n type GestureExtendOptions,\n type GridRange,\n type GridRangeIndex,\n type ModelIndex,\n type SELECTION_DIRECTION,\n type Selection,\n type VisibleIndex,\n computeGestureExtend,\n cursorLandingCellForRanges,\n nextCursorInRanges,\n withCommittedCursor,\n} from '@deephaven/grid';\nimport type IrisGridModel from './IrisGridModel';\nimport type { KeyedGridModel } from './KeyedGridModel';\n\nexport type GetKeyedModel = () => IrisGridModel & KeyedGridModel;\n\n/**\n * Serializes key-column values to a stable string for use as a Map/Set key.\n * JSON.stringify encodes NaN, Infinity, and -Infinity as null, so we\n * substitute sentinel strings to preserve their distinct identities.\n */\nexport function serializeKeyValues(values: readonly unknown[]): string {\n return JSON.stringify(values, (_key, value) => {\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return '__NaN__';\n if (value === Infinity) return '__Infinity__';\n if (value === -Infinity) return '__-Infinity__';\n }\n return value;\n });\n}\n\n/**\n * Configuration for a `KeyedSelection`. `getModel` is required; every\n * other field defaults to an \"empty\" value (`null`, an empty set/map, or\n * `false` where appropriate).\n */\nexport type KeyedSelectionOptions = {\n /**\n * Deferred lookup for the current `KeyedGridModel`. Passed as a closure\n * (not a direct reference) so this Selection always reads the model\n * currently on `Grid.props.model` — surviving prop swaps without holding\n * a stale reference.\n */\n getModel: GetKeyedModel;\n /**\n * Serialized keys that identify the committed selection. Interpreted as\n * an inclusion set by default; as an exclusion set when\n * `invertedSelection` is true.\n */\n selectedKeys?: ReadonlySet<string>;\n /**\n * Ranges from the in-progress mouse gesture. Cleared on commit; used to\n * render an overlay before the gesture settles.\n */\n overlayRanges?: readonly GridRange[];\n /**\n * When true, `selectedKeys` is an exclusion set: all rows are selected\n * EXCEPT those in the set.\n */\n invertedSelection?: boolean;\n /**\n * Raw key-column values for each committed key; used for server-side\n * filter construction (e.g. `buildKeyFilter`).\n */\n selectedKeyValues?: ReadonlyMap<string, readonly unknown[]>;\n /**\n * When non-null, limits snapshot results to this many rows via the\n * viewport subscription.\n */\n maxRows?: number | null;\n /**\n * Ranges whose key values are being resolved asynchronously by\n * `IrisGrid.resolveKeyedSelection`. Empty array means no resolution is in progress.\n */\n pendingRanges?: readonly GridRange[];\n /**\n * Serialized key of the shift-click / drag anchor. Lets `getGestureAnchor`\n * find where the anchor row moved to after a tick, so shift-click extends\n * from the row the user actually clicked, not from a stale row index.\n */\n anchorKey?: string | null;\n /** Anchor row at click time. Fallback when the anchor key is out of viewport. */\n anchorRow?: GridRangeIndex;\n /** Serialized key of the row the cursor was set on; null when the cursor is unset. */\n cursorKey?: string | null;\n /** Row hint for the cursor; used when `cursorKey` is not in the current viewport. */\n cursorRowHint?: VisibleIndex | null;\n /** Cursor column; not key-tracked because columns do not drift with row ticks. */\n cursorColumn?: VisibleIndex | null;\n /** Serialized key of the row the shift/drag endpoint was set on; null when unset. */\n selectionEndKey?: string | null;\n /** Row hint for the endpoint; used when `selectionEndKey` is not in the current viewport. */\n selectionEndRowHint?: VisibleIndex | null;\n /** Endpoint column; not key-tracked because columns do not drift with row ticks. */\n selectionEndColumn?: VisibleIndex | null;\n};\n\n/**\n * Immutable `Selection` for keyed tables: identifies rows by their\n * serialized key-column values rather than raw row indices, so the\n * selection survives ticks that shuffle row positions.\n *\n * Rows sharing the same key highlight together (see `isRowSelected`).\n * When `invertedSelection` is true, `selectedKeys` is treated as an\n * exclusion set (all rows selected except those keys).\n */\nexport class KeyedSelection implements Selection {\n static empty(getModel: GetKeyedModel): KeyedSelection {\n return new KeyedSelection({ getModel });\n }\n\n private readonly getModel: GetKeyedModel;\n\n readonly selectedKeys: ReadonlySet<string>;\n\n private readonly overlayRanges: readonly GridRange[];\n\n readonly invertedSelection: boolean;\n\n readonly selectedKeyValues: ReadonlyMap<string, readonly unknown[]>;\n\n readonly maxRows: number | null;\n\n readonly pendingRanges: readonly GridRange[];\n\n private readonly anchorKey: string | null;\n\n private readonly anchorRow: GridRangeIndex;\n\n private readonly cursorKey: string | null;\n\n private readonly cursorRowHint: VisibleIndex | null;\n\n readonly cursorColumn: VisibleIndex | null;\n\n private readonly selectionEndKey: string | null;\n\n private readonly selectionEndRowHint: VisibleIndex | null;\n\n readonly selectionEndColumn: VisibleIndex | null;\n\n /** Keys derived from the current overlay range's viewport-visible rows. */\n private readonly gestureKeys: ReadonlySet<string>;\n\n constructor(options: KeyedSelectionOptions) {\n this.getModel = options.getModel;\n this.selectedKeys = options.selectedKeys ?? new Set();\n this.overlayRanges = options.overlayRanges ?? EMPTY_ARRAY;\n this.invertedSelection = options.invertedSelection ?? false;\n this.selectedKeyValues = options.selectedKeyValues ?? EMPTY_MAP;\n this.maxRows = options.maxRows ?? null;\n this.pendingRanges = options.pendingRanges ?? EMPTY_ARRAY;\n this.anchorKey = options.anchorKey ?? null;\n this.anchorRow = options.anchorRow ?? null;\n this.cursorKey = options.cursorKey ?? null;\n this.cursorRowHint = options.cursorRowHint ?? null;\n this.cursorColumn = options.cursorColumn ?? null;\n this.selectionEndKey = options.selectionEndKey ?? null;\n this.selectionEndRowHint = options.selectionEndRowHint ?? null;\n this.selectionEndColumn = options.selectionEndColumn ?? null;\n\n // Enumerate only viewport-visible rows so gesture key lookup stays O(1)\n // and construction is O(viewport) regardless of total table size.\n if (this.overlayRanges.length === 0) {\n this.gestureKeys = new Set();\n } else {\n const model = this.getModel();\n const viewTop = model.viewport?.top ?? 0;\n const viewBottom = model.viewport?.bottom ?? 0;\n const keys = new Set<string>();\n for (let i = 0; i < this.overlayRanges.length; i += 1) {\n const { startRow, endRow } = this.overlayRanges[i];\n if (startRow == null) continue; // eslint-disable-line no-continue\n const last = endRow ?? startRow;\n const clampedStart = Math.max(startRow, viewTop);\n const clampedEnd = Math.min(last, viewBottom);\n for (let r = clampedStart; r <= clampedEnd; r += 1) {\n const data = this.getRowKeyData(r);\n if (data != null) keys.add(data.key);\n }\n }\n this.gestureKeys = keys;\n }\n }\n\n /**\n * Returns a copy of this selection with the given fields overridden.\n * Unspecified fields carry through; pass `null` (or an empty\n * set/map/false) to explicitly clear a field.\n */\n private copyWith(overrides: Partial<KeyedSelectionOptions>): KeyedSelection {\n return new KeyedSelection({\n getModel: this.getModel,\n selectedKeys: this.selectedKeys,\n overlayRanges: this.overlayRanges,\n invertedSelection: this.invertedSelection,\n selectedKeyValues: this.selectedKeyValues,\n maxRows: this.maxRows,\n pendingRanges: this.pendingRanges,\n anchorKey: this.anchorKey,\n anchorRow: this.anchorRow,\n cursorKey: this.cursorKey,\n cursorRowHint: this.cursorRowHint,\n cursorColumn: this.cursorColumn,\n selectionEndKey: this.selectionEndKey,\n selectionEndRowHint: this.selectionEndRowHint,\n selectionEndColumn: this.selectionEndColumn,\n ...overrides,\n });\n }\n\n /**\n * Returns both the serialized key and the raw values for a visible row, or\n * `null` when the row is not keyable (e.g. totals / aggregation floating\n * rows whose column values are aggregates, not real row keys).\n */\n private getRowKeyData(row: VisibleIndex): {\n key: string;\n values: readonly unknown[];\n } | null {\n const model = this.getModel();\n if (model.isKeyableRow(row) !== true) return null;\n const values = model.selectionKeyColumnIndices.map((col: ModelIndex) =>\n model.valueForCell(col, row)\n );\n return { key: serializeKeyValues(values), values };\n }\n\n isEmpty(): boolean {\n // Inverted selection means all rows are selected — never empty.\n if (this.invertedSelection) return false;\n // Pending resolution means a selection is in progress — not empty.\n if (this.pendingRanges.length > 0) return false;\n return this.selectedKeys.size === 0 && this.gestureKeys.size === 0;\n }\n\n describe(): string {\n if (this.pendingRanges.length > 0) return 'Selection loading.';\n // Non-unique key columns can map one key to many rows; report the\n // truthful count (keys) rather than lying about row counts.\n const unit = this.getModel().hasUniqueSelectionKeys ? 'row' : 'key';\n const n = this.selectedKeys.size;\n if (this.invertedSelection) {\n if (n === 0) return 'Everything selected.';\n return unit === 'row'\n ? `All rows except ${n} selected.`\n : `All rows except ${n} ${n === 1 ? 'key' : 'keys'} selected.`;\n }\n if (n === 0) return 'No selection.';\n if (n === 1) return unit === 'row' ? '1 row selected.' : '1 key selected.';\n return unit === 'row' ? `${n} rows selected.` : `${n} keys selected.`;\n }\n\n // Keyed selection is always full-row; column is irrelevant\n isCellSelected(_column: VisibleIndex, row: VisibleIndex): boolean {\n return this.isRowSelected(row);\n }\n\n isRowSelected(row: VisibleIndex): boolean {\n const data = this.getRowKeyData(row);\n if (data == null) return false;\n const { key } = data;\n if (this.invertedSelection) return !this.selectedKeys.has(key);\n // Include gesture preview keys so key-siblings highlight on mousedown without waiting for commit.\n return this.selectedKeys.has(key) || this.gestureKeys.has(key);\n }\n\n // Only fully selected when the inversion covers every row (i.e. select-all).\n isColumnSelected(_column: VisibleIndex): boolean {\n return this.invertedSelection && this.selectedKeys.size === 0;\n }\n\n getNextCursorInDirection(\n current: { row: GridRangeIndex; column: GridRangeIndex },\n direction: SELECTION_DIRECTION\n ): { row: GridRangeIndex; column: GridRangeIndex } | null {\n const { columnCount, rowCount } = this.getModel();\n return nextCursorInRanges(this.overlayRanges, current, direction, {\n columnCount,\n rowCount,\n });\n }\n\n private getCursorLandingCell(): {\n row: GridRangeIndex;\n column: GridRangeIndex;\n } | null {\n const { columnCount, rowCount } = this.getModel();\n return cursorLandingCellForRanges(this.overlayRanges, {\n columnCount,\n rowCount,\n });\n }\n\n // Cursor / endpoint tracking. Rows are stored as `(key, rowHint)` pairs so\n // ticks that shuffle row indices resolve to the live row via\n // `findKeyInViewport`; columns don't drift and are kept as raw indices.\n withCursor(\n row: VisibleIndex | null,\n column: VisibleIndex | null\n ): KeyedSelection {\n if (row === this.cursorRow && column === this.cursorColumn) return this;\n const nextKey = row != null ? this.getRowKeyData(row)?.key ?? null : null;\n return this.copyWith({\n cursorKey: nextKey,\n cursorRowHint: row,\n cursorColumn: column,\n });\n }\n\n withSelectionEnd(\n row: VisibleIndex | null,\n column: VisibleIndex | null\n ): KeyedSelection {\n if (row === this.selectionEndRow && column === this.selectionEndColumn) {\n return this;\n }\n const nextKey = row != null ? this.getRowKeyData(row)?.key ?? null : null;\n return this.copyWith({\n selectionEndKey: nextKey,\n selectionEndRowHint: row,\n selectionEndColumn: column,\n });\n }\n\n /**\n * Replaces the transient overlay ranges (mid-gesture preview) with the\n * given ranges. Preserves the gesture anchor so mid-drag range updates\n * don't clobber the shift-click origin.\n *\n * When `isReplacing` is true the caller intends the overlay to replace\n * the current committed selection (drag / shift+click); previously\n * committed keys are dropped so the commit uses the overlay as a fresh\n * selection. Otherwise the committed keys are kept, letting a subsequent\n * `commitGesture` fold the overlay into the existing set.\n */\n private withMouseGestureRanges(\n ranges: readonly GridRange[],\n isReplacing = false\n ): KeyedSelection {\n if (isReplacing) {\n return this.copyWith({\n selectedKeys: new Set(),\n overlayRanges: ranges,\n invertedSelection: false,\n selectedKeyValues: EMPTY_MAP,\n pendingRanges: EMPTY_ARRAY,\n });\n }\n return this.copyWith({\n overlayRanges: ranges,\n pendingRanges: EMPTY_ARRAY,\n });\n }\n\n /**\n * Sets the gesture anchor (extend-from position for shift-click and\n * keyboard extend) to the row's key. Passing `null` clears the anchor.\n */\n private withGestureAnchor(row: GridRangeIndex): KeyedSelection {\n const nextKey = row != null ? this.getRowKeyData(row)?.key ?? null : null;\n if (nextKey === this.anchorKey && row === this.anchorRow) return this;\n return this.copyWith({ anchorKey: nextKey, anchorRow: row });\n }\n\n /**\n * The current `{row, column}` of the gesture anchor, or `null` if none is\n * set. Because `KeyedSelection` tracks the anchor by serialized key, the\n * anchor's visible row may drift as the viewport scrolls. Resolves the\n * key against the current viewport when possible; falls back to the\n * click-time row hint (`anchorRow`) when the key has scrolled out. Returns\n * `null` only when neither is set.\n */\n private getGestureAnchor(): {\n row: GridRangeIndex;\n column: GridRangeIndex;\n } | null {\n if (this.anchorKey == null && this.anchorRow == null) return null;\n if (this.anchorKey != null) {\n const viewportRow = this.findKeyInViewport(\n this.anchorKey,\n this.anchorRow\n );\n if (viewportRow != null) return { row: viewportRow, column: null };\n }\n // Anchor key is not in the viewport; fall back to the click-time row hint.\n return { row: this.anchorRow, column: null };\n }\n\n /**\n * Returns the visible row of `key`, or `null` if it's not in the viewport.\n * When multiple rows share the key (non-unique key columns), prefers the one\n * closest to `hint` so we track the row the caller last saw the key at.\n */\n private findKeyInViewport(\n key: string,\n hint: VisibleIndex | null\n ): VisibleIndex | null {\n const model = this.getModel();\n const viewTop = model.viewport?.top ?? 0;\n const viewBottom = model.viewport?.bottom ?? 0;\n let best: VisibleIndex | null = null;\n let bestDist = Infinity;\n for (let r = viewTop; r <= viewBottom; r += 1) {\n const data = this.getRowKeyData(r);\n if (data == null || data.key !== key) continue; // eslint-disable-line no-continue\n if (hint == null) return r;\n const dist = Math.abs(r - hint);\n if (dist < bestDist) {\n best = r;\n bestDist = dist;\n }\n }\n return best;\n }\n\n get cursorRow(): VisibleIndex | null {\n if (this.cursorKey == null) return this.cursorRowHint;\n return (\n this.findKeyInViewport(this.cursorKey, this.cursorRowHint) ??\n this.cursorRowHint\n );\n }\n\n get selectionEndRow(): VisibleIndex | null {\n if (this.selectionEndKey == null) return this.selectionEndRowHint;\n return (\n this.findKeyInViewport(this.selectionEndKey, this.selectionEndRowHint) ??\n this.selectionEndRowHint\n );\n }\n\n withGestureExtend(\n cursor: { row: GridRangeIndex; column: GridRangeIndex },\n opts: GestureExtendOptions\n ): KeyedSelection {\n const { newRanges, isReplacing, trimBefore, resetAnchor } =\n computeGestureExtend(\n this.overlayRanges,\n this.getGestureAnchor(),\n cursor,\n opts\n );\n const base = trimBefore ? this.trimmed() : this;\n let result = base.withMouseGestureRanges(newRanges, isReplacing);\n if (resetAnchor) {\n // Keyed selection is row based, so column is not used in the anchor.\n result = result.withGestureAnchor(cursor.row);\n }\n return result;\n }\n\n commitGesture(\n lastCommitted: Selection,\n opts: CommitGestureOptions\n ): KeyedSelection {\n if (this.overlayRanges.length === 0) return this;\n\n if (opts.settle === false) {\n // Mouse-down: keep overlayRanges pending. The overlay-to-committed\n // merge (add / toggle-off / consolidation) runs on mouse-up so a drag\n // can grow the overlay without prematurely folding it into selectedKeys.\n return withCommittedCursor(this, this.getCursorLandingCell(), opts);\n }\n\n // Scan ranges for endpoints and total row count\n let first: VisibleIndex | null = null;\n let lastRow: VisibleIndex = 0;\n let rowCount = 0;\n for (let i = 0; i < this.overlayRanges.length; i += 1) {\n const { startRow, endRow } = this.overlayRanges[i];\n if (startRow == null) continue; // eslint-disable-line no-continue\n const rEnd = endRow ?? startRow;\n if (first === null) first = startRow;\n lastRow = rEnd;\n rowCount += rEnd - startRow + 1;\n }\n if (first === null || rowCount === 0) return this;\n\n const next = new Set(this.selectedKeys);\n\n if (this.selectedKeys.size > 0 || this.invertedSelection) {\n // Ctrl+click / ctrl+drag path: clearSelectedRanges was not called, so\n // selectedKeys still holds the previous committed keys. Toggle off when\n // every row in the overlay was already committed (single-row ctrl+click\n // on a selected row, or ctrl+drag over an all-selected range); otherwise\n // add all rows to the selection without unioning them off.\n let shouldToggle = true;\n for (let i = 0; i < this.overlayRanges.length && shouldToggle; i += 1) {\n const { startRow, endRow } = this.overlayRanges[i];\n if (startRow == null) continue; // eslint-disable-line no-continue\n const rEnd = endRow ?? startRow;\n for (let r = startRow; r <= rEnd; r += 1) {\n if (!lastCommitted.isRowSelected(r)) {\n shouldToggle = false;\n break;\n }\n }\n }\n\n // Multi-row ctrl+shift add that spans out-of-viewport should defer\n // to async resolution while preserving the already-committed keys.\n if (!shouldToggle && !this.invertedSelection) {\n const model = this.getModel();\n const viewTop = model.viewport?.top ?? 0;\n const viewBottom = model.viewport?.bottom ?? 0;\n if (first < viewTop || lastRow > viewBottom) {\n return withCommittedCursor(\n this.copyWith({\n overlayRanges: EMPTY_ARRAY,\n pendingRanges: this.overlayRanges,\n }),\n this.getCursorLandingCell(),\n opts\n );\n }\n }\n\n const nextKeyValues = new Map(this.selectedKeyValues);\n for (let i = 0; i < this.overlayRanges.length; i += 1) {\n const { startRow, endRow } = this.overlayRanges[i];\n if (startRow == null) continue; // eslint-disable-line no-continue\n const rEnd = endRow ?? startRow;\n for (let r = startRow; r <= rEnd; r += 1) {\n const data = this.getRowKeyData(r);\n if (data == null) continue; // eslint-disable-line no-continue\n const { key: k, values } = data;\n if (shouldToggle) {\n // Toggle off: every overlay row was already in lastCommitted, so\n // ctrl+click / ctrl+drag flips them off.\n if (this.invertedSelection) {\n next.add(k);\n nextKeyValues.set(k, values);\n } else {\n next.delete(k);\n nextKeyValues.delete(k);\n }\n } else if (this.invertedSelection) {\n next.delete(k);\n nextKeyValues.delete(k);\n } else {\n next.add(k);\n nextKeyValues.set(k, values);\n }\n }\n }\n return withCommittedCursor(\n this.copyWith({\n selectedKeys: next,\n overlayRanges: EMPTY_ARRAY,\n selectedKeyValues: nextKeyValues,\n pendingRanges: EMPTY_ARRAY,\n }),\n this.getCursorLandingCell(),\n opts\n );\n }\n\n // Regular click path: clearSelectedRanges emptied selectedKeys first.\n // Multi-row shift selections may span out-of-viewport rows where valueForCell\n // returns null. Defer those to async resolution in IrisGrid.\n // Assumes shift+click/drag emits one contiguous overlay range; `first`/`lastRow`\n // are that range's endpoints and drive the anchor/target endpoint capture below.\n if (rowCount > 1) {\n const model = this.getModel();\n const viewTop = model.viewport?.top ?? 0;\n const viewBottom = model.viewport?.bottom ?? 0;\n\n // Fast path: entire range is in the viewport, so we can enumerate keys\n // synchronously and skip the async fetch race entirely.\n if (first >= viewTop && lastRow <= viewBottom) {\n const nextKeyValues = new Map<string, readonly unknown[]>();\n for (let r = first; r <= lastRow; r += 1) {\n const data = this.getRowKeyData(r);\n if (data == null) continue; // eslint-disable-line no-continue\n nextKeyValues.set(data.key, data.values);\n }\n return withCommittedCursor(\n this.copyWith({\n selectedKeys: new Set(nextKeyValues.keys()),\n overlayRanges: EMPTY_ARRAY,\n invertedSelection: false,\n selectedKeyValues: nextKeyValues,\n pendingRanges: EMPTY_ARRAY,\n }),\n this.getCursorLandingCell(),\n opts\n );\n }\n\n // Slow path: same async-fetch mechanism as `withCommittedRanges`.\n // `IrisGrid.resolveKeyedSelection` fetches keys for the overlay ranges;\n // rows that scroll away during the fetch are dropped from the result.\n return withCommittedCursor(\n this.copyWith({\n selectedKeys: new Set(),\n invertedSelection: false,\n selectedKeyValues: EMPTY_MAP,\n pendingRanges: this.overlayRanges,\n }),\n this.getCursorLandingCell(),\n opts\n );\n }\n\n // Single-row path (rowCount === 1): first === lastRow.\n const row = first;\n const data = this.getRowKeyData(row);\n if (data == null) {\n // Row is not keyable (totals / aggregation row); commit clears the\n // overlay without touching the keyed set.\n return withCommittedCursor(\n this.copyWith({ overlayRanges: EMPTY_ARRAY }),\n this.getCursorLandingCell(),\n opts\n );\n }\n const { key: k, values } = data;\n const nextKeyValues = new Map(this.selectedKeyValues);\n // Deselect only when the clicked row was the entire previous committed selection.\n const wasEntireSelection =\n opts.allowDeselect !== false &&\n lastCommitted instanceof KeyedSelection &&\n !lastCommitted.invertedSelection &&\n lastCommitted.selectedKeys.size === 1 &&\n lastCommitted.selectedKeys.has(k);\n if (wasEntireSelection) {\n next.delete(k);\n nextKeyValues.delete(k);\n } else {\n next.add(k);\n nextKeyValues.set(k, values);\n }\n return withCommittedCursor(\n this.copyWith({\n selectedKeys: next,\n overlayRanges: EMPTY_ARRAY,\n invertedSelection: false,\n selectedKeyValues: nextKeyValues,\n pendingRanges: EMPTY_ARRAY,\n }),\n this.getCursorLandingCell(),\n opts\n );\n }\n\n clear(): KeyedSelection {\n // Fresh empty carrying cursor forward (Escape semantics). Endpoint is\n // transient gesture state and drops as part of the reset.\n return KeyedSelection.empty(this.getModel).copyWith({\n cursorKey: this.cursorKey,\n cursorRowHint: this.cursorRowHint,\n cursorColumn: this.cursorColumn,\n });\n }\n\n // Shift+click needs a clean slate so the range replaces rather than extends the old keys.\n // Anchor is preserved so shift+click's extend reads it after the trim.\n trimmed(): KeyedSelection {\n return this.copyWith({\n selectedKeys: new Set(),\n overlayRanges: EMPTY_ARRAY,\n invertedSelection: false,\n selectedKeyValues: EMPTY_MAP,\n maxRows: null,\n pendingRanges: EMPTY_ARRAY,\n });\n }\n\n // Always returns non-inverted; switching to a new selection exits inverted mode.\n withCommittedRanges(\n ranges: readonly GridRange[],\n anchor?: { row: GridRangeIndex; column: GridRangeIndex }\n ): KeyedSelection {\n const result = this.installCommittedRanges(ranges);\n if (anchor === undefined) return result;\n // Keyed selection is row based, so column is not used in the anchor.\n return result.withGestureAnchor(anchor.row);\n }\n\n private installCommittedRanges(ranges: readonly GridRange[]): KeyedSelection {\n // Fields threaded through every fresh install so cursor / endpoint state\n // survive programmatic range replacement (matches Escape semantics).\n const carry = {\n cursorKey: this.cursorKey,\n cursorRowHint: this.cursorRowHint,\n cursorColumn: this.cursorColumn,\n selectionEndKey: this.selectionEndKey,\n selectionEndRowHint: this.selectionEndRowHint,\n selectionEndColumn: this.selectionEndColumn,\n };\n // Replacement semantics: discard previous selection and select exactly these rows.\n if (ranges.length === 0) {\n return new KeyedSelection({ getModel: this.getModel, ...carry });\n }\n\n // Compute the true min/max across every range so the viewport check is\n // correct even when input ranges arrive out of order or non-contiguous\n // (e.g. plugin-driven programmatic selection).\n let minRow: VisibleIndex | null = null;\n let maxRow: VisibleIndex | null = null;\n for (let i = 0; i < ranges.length; i += 1) {\n const { startRow, endRow } = ranges[i];\n if (startRow == null) continue; // eslint-disable-line no-continue\n const rEnd = endRow ?? startRow;\n const low = Math.min(startRow, rEnd);\n const high = Math.max(startRow, rEnd);\n if (minRow === null || low < minRow) minRow = low;\n if (maxRow === null || high > maxRow) maxRow = high;\n }\n if (minRow === null || maxRow === null) {\n return new KeyedSelection({ getModel: this.getModel, ...carry });\n }\n\n const model = this.getModel();\n const viewTop = model.viewport?.top ?? 0;\n const viewBottom = model.viewport?.bottom ?? 0;\n\n // Fast path: every range fits in the viewport, so valueForCell answers\n // synchronously with real values.\n if (minRow >= viewTop && maxRow <= viewBottom) {\n const next = new Set<string>();\n const nextKeyValues = new Map<string, readonly unknown[]>();\n for (let i = 0; i < ranges.length; i += 1) {\n const { startRow, endRow } = ranges[i];\n if (startRow == null) continue; // eslint-disable-line no-continue\n const rEnd = endRow ?? startRow;\n const low = Math.min(startRow, rEnd);\n const high = Math.max(startRow, rEnd);\n for (let r = low; r <= high; r += 1) {\n const data = this.getRowKeyData(r);\n if (data == null) continue; // eslint-disable-line no-continue\n next.add(data.key);\n nextKeyValues.set(data.key, data.values);\n }\n }\n return new KeyedSelection({\n getModel: this.getModel,\n selectedKeys: next,\n selectedKeyValues: nextKeyValues,\n ...carry,\n });\n }\n\n // Slow path: any row outside the viewport would resolve to a phantom\n // all-null key via undefined valueForCell reads. Defer to async key fetch;\n // IrisGrid's onSelectionChange handler picks up pendingRanges.\n return new KeyedSelection({\n getModel: this.getModel,\n pendingRanges: ranges,\n ...carry,\n });\n }\n\n // Sets invertedSelection=true with an empty exclusion set (all rows selected).\n selectAll(): KeyedSelection {\n // Fresh inverted-all carrying cursor forward.\n return KeyedSelection.empty(this.getModel).copyWith({\n invertedSelection: true,\n cursorKey: this.cursorKey,\n cursorRowHint: this.cursorRowHint,\n cursorColumn: this.cursorColumn,\n });\n }\n\n truncate(maxRows: number): KeyedSelection {\n if (maxRows === this.maxRows) return this;\n return this.copyWith({ maxRows });\n }\n\n /**\n * Builds a fully-resolved selection from async-fetched key values merged with the current selection, clearing pendingRanges.\n */\n resolve(keyValues: ReadonlyMap<string, readonly unknown[]>): KeyedSelection {\n const mergedKeys = new Set(this.selectedKeys);\n const mergedKeyValues = new Map(this.selectedKeyValues);\n keyValues.forEach((values, key) => {\n mergedKeys.add(key);\n mergedKeyValues.set(key, values);\n });\n return this.copyWith({\n selectedKeys: mergedKeys,\n overlayRanges: EMPTY_ARRAY,\n invertedSelection: false,\n selectedKeyValues: mergedKeyValues,\n maxRows: null,\n pendingRanges: EMPTY_ARRAY,\n });\n }\n\n /**\n * Returns the exact committed row count when each key maps to one row,\n * or null when the count is unknown (non-unique keys or pending resolution).\n * For inverted selections the count is approximate on ticking tables.\n */\n getUniqueRowCount(): number | null {\n if (\n this.pendingRanges.length > 0 ||\n !this.getModel().hasUniqueSelectionKeys\n ) {\n return null;\n }\n if (this.invertedSelection) {\n return this.getModel().rowCount - this.selectedKeys.size;\n }\n return this.selectedKeys.size;\n }\n\n /** Returns a new selection with the given row's key toggled. */\n withToggledRow(row: VisibleIndex): KeyedSelection {\n const data = this.getRowKeyData(row);\n if (data == null) return this;\n const { key, values } = data;\n const next = new Set(this.selectedKeys);\n const nextKeyValues = new Map(this.selectedKeyValues);\n if (next.has(key)) {\n next.delete(key);\n nextKeyValues.delete(key);\n } else {\n next.add(key);\n nextKeyValues.set(key, values);\n }\n return this.copyWith({\n selectedKeys: next,\n overlayRanges: EMPTY_ARRAY,\n selectedKeyValues: nextKeyValues,\n pendingRanges: EMPTY_ARRAY,\n });\n }\n}\n\nexport default KeyedSelection;\n"],"mappings":";;;;;AAAA,SAASA,WAAW,EAAEC,SAAS,QAAQ,kBAAkB;AACzD,SASEC,oBAAoB,EACpBC,0BAA0B,EAC1BC,kBAAkB,EAClBC,mBAAmB,QACd,iBAAiB;AAMxB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,MAA0B,EAAU;EACrE,OAAOC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAE,CAACG,IAAI,EAAEC,KAAK,KAAK;IAC7C,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,IAAIC,MAAM,CAACC,KAAK,CAACF,KAAK,CAAC,EAAE,OAAO,SAAS;MACzC,IAAIA,KAAK,KAAKG,QAAQ,EAAE,OAAO,cAAc;MAC7C,IAAIH,KAAK,KAAK,CAACG,QAAQ,EAAE,OAAO,eAAe;IACjD;IACA,OAAOH,KAAK;EACd,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;;AA8DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,cAAc,CAAsB;EAC/C,OAAOC,KAAKA,CAACC,QAAuB,EAAkB;IACpD,OAAO,IAAIF,cAAc,CAAC;MAAEE;IAAS,CAAC,CAAC;EACzC;EAmCAC,WAAWA,CAACC,OAA8B,EAAE;IAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,qBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAH5C;IAAAA,eAAA;IAIE,IAAI,CAACjB,QAAQ,GAAGE,OAAO,CAACF,QAAQ;IAChC,IAAI,CAACkB,YAAY,IAAAf,qBAAA,GAAGD,OAAO,CAACgB,YAAY,cAAAf,qBAAA,cAAAA,qBAAA,GAAI,IAAIgB,GAAG,CAAC,CAAC;IACrD,IAAI,CAACC,aAAa,IAAAhB,qBAAA,GAAGF,OAAO,CAACkB,aAAa,cAAAhB,qBAAA,cAAAA,qBAAA,GAAIrB,WAAW;IACzD,IAAI,CAACsC,iBAAiB,IAAAhB,qBAAA,GAAGH,OAAO,CAACmB,iBAAiB,cAAAhB,qBAAA,cAAAA,qBAAA,GAAI,KAAK;IAC3D,IAAI,CAACiB,iBAAiB,IAAAhB,qBAAA,GAAGJ,OAAO,CAACoB,iBAAiB,cAAAhB,qBAAA,cAAAA,qBAAA,GAAItB,SAAS;IAC/D,IAAI,CAACuC,OAAO,IAAAhB,gBAAA,GAAGL,OAAO,CAACqB,OAAO,cAAAhB,gBAAA,cAAAA,gBAAA,GAAI,IAAI;IACtC,IAAI,CAACiB,aAAa,IAAAhB,qBAAA,GAAGN,OAAO,CAACsB,aAAa,cAAAhB,qBAAA,cAAAA,qBAAA,GAAIzB,WAAW;IACzD,IAAI,CAAC0C,SAAS,IAAAhB,kBAAA,GAAGP,OAAO,CAACuB,SAAS,cAAAhB,kBAAA,cAAAA,kBAAA,GAAI,IAAI;IAC1C,IAAI,CAACiB,SAAS,IAAAhB,kBAAA,GAAGR,OAAO,CAACwB,SAAS,cAAAhB,kBAAA,cAAAA,kBAAA,GAAI,IAAI;IAC1C,IAAI,CAACiB,SAAS,IAAAhB,kBAAA,GAAGT,OAAO,CAACyB,SAAS,cAAAhB,kBAAA,cAAAA,kBAAA,GAAI,IAAI;IAC1C,IAAI,CAACiB,aAAa,IAAAhB,qBAAA,GAAGV,OAAO,CAAC0B,aAAa,cAAAhB,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IAClD,IAAI,CAACiB,YAAY,IAAAhB,qBAAA,GAAGX,OAAO,CAAC2B,YAAY,cAAAhB,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IAChD,IAAI,CAACiB,eAAe,IAAAhB,qBAAA,GAAGZ,OAAO,CAAC4B,eAAe,cAAAhB,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IACtD,IAAI,CAACiB,mBAAmB,IAAAhB,sBAAA,GAAGb,OAAO,CAAC6B,mBAAmB,cAAAhB,sBAAA,cAAAA,sBAAA,GAAI,IAAI;IAC9D,IAAI,CAACiB,kBAAkB,IAAAhB,sBAAA,GAAGd,OAAO,CAAC8B,kBAAkB,cAAAhB,sBAAA,cAAAA,sBAAA,GAAI,IAAI;;IAE5D;IACA;IACA,IAAI,IAAI,CAACI,aAAa,CAACa,MAAM,KAAK,CAAC,EAAE;MACnC,IAAI,CAACC,WAAW,GAAG,IAAIf,GAAG,CAAC,CAAC;IAC9B,CAAC,MAAM;MAAA,IAAAgB,mBAAA,EAAAC,eAAA,EAAAC,qBAAA,EAAAC,gBAAA;MACL,IAAMC,KAAK,GAAG,IAAI,CAACvC,QAAQ,CAAC,CAAC;MAC7B,IAAMwC,OAAO,IAAAL,mBAAA,IAAAC,eAAA,GAAGG,KAAK,CAACE,QAAQ,cAAAL,eAAA,uBAAdA,eAAA,CAAgBM,GAAG,cAAAP,mBAAA,cAAAA,mBAAA,GAAI,CAAC;MACxC,IAAMQ,UAAU,IAAAN,qBAAA,IAAAC,gBAAA,GAAGC,KAAK,CAACE,QAAQ,cAAAH,gBAAA,uBAAdA,gBAAA,CAAgBM,MAAM,cAAAP,qBAAA,cAAAA,qBAAA,GAAI,CAAC;MAC9C,IAAMQ,IAAI,GAAG,IAAI1B,GAAG,CAAS,CAAC;MAC9B,KAAK,IAAI2B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC1B,aAAa,CAACa,MAAM,EAAEa,CAAC,IAAI,CAAC,EAAE;QACrD,IAAAC,qBAAA,GAA6B,IAAI,CAAC3B,aAAa,CAAC0B,CAAC,CAAC;UAA1CE,QAAQ,GAAAD,qBAAA,CAARC,QAAQ;UAAEC,MAAM,GAAAF,qBAAA,CAANE,MAAM;QACxB,IAAID,QAAQ,IAAI,IAAI,EAAE,SAAS,CAAC;QAChC,IAAME,IAAI,GAAGD,MAAM,aAANA,MAAM,cAANA,MAAM,GAAID,QAAQ;QAC/B,IAAMG,YAAY,GAAGC,IAAI,CAACC,GAAG,CAACL,QAAQ,EAAER,OAAO,CAAC;QAChD,IAAMc,UAAU,GAAGF,IAAI,CAACG,GAAG,CAACL,IAAI,EAAEP,UAAU,CAAC;QAC7C,KAAK,IAAIa,CAAC,GAAGL,YAAY,EAAEK,CAAC,IAAIF,UAAU,EAAEE,CAAC,IAAI,CAAC,EAAE;UAClD,IAAMC,IAAI,GAAG,IAAI,CAACC,aAAa,CAACF,CAAC,CAAC;UAClC,IAAIC,IAAI,IAAI,IAAI,EAAEZ,IAAI,CAACc,GAAG,CAACF,IAAI,CAACG,GAAG,CAAC;QACtC;MACF;MACA,IAAI,CAAC1B,WAAW,GAAGW,IAAI;IACzB;EACF;;EAEA;AACF;AACA;AACA;AACA;EACUgB,QAAQA,CAACC,SAAyC,EAAkB;IAC1E,OAAO,IAAIhE,cAAc,CAAAiE,aAAA;MACvB/D,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBkB,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BE,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCC,iBAAiB,EAAE,IAAI,CAACA,iBAAiB;MACzCC,iBAAiB,EAAE,IAAI,CAACA,iBAAiB;MACzCC,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBC,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCC,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BC,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCC,mBAAmB,EAAE,IAAI,CAACA,mBAAmB;MAC7CC,kBAAkB,EAAE,IAAI,CAACA;IAAkB,GACxC8B,SAAS,CACb,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACUJ,aAAaA,CAACM,GAAiB,EAG9B;IACP,IAAMzB,KAAK,GAAG,IAAI,CAACvC,QAAQ,CAAC,CAAC;IAC7B,IAAIuC,KAAK,CAAC0B,YAAY,CAACD,GAAG,CAAC,KAAK,IAAI,EAAE,OAAO,IAAI;IACjD,IAAM1E,MAAM,GAAGiD,KAAK,CAAC2B,yBAAyB,CAACC,GAAG,CAAEC,GAAe,IACjE7B,KAAK,CAAC8B,YAAY,CAACD,GAAG,EAAEJ,GAAG,CAC7B,CAAC;IACD,OAAO;MAAEJ,GAAG,EAAEvE,kBAAkB,CAACC,MAAM,CAAC;MAAEA;IAAO,CAAC;EACpD;EAEAgF,OAAOA,CAAA,EAAY;IACjB;IACA,IAAI,IAAI,CAACjD,iBAAiB,EAAE,OAAO,KAAK;IACxC;IACA,IAAI,IAAI,CAACG,aAAa,CAACS,MAAM,GAAG,CAAC,EAAE,OAAO,KAAK;IAC/C,OAAO,IAAI,CAACf,YAAY,CAACqD,IAAI,KAAK,CAAC,IAAI,IAAI,CAACrC,WAAW,CAACqC,IAAI,KAAK,CAAC;EACpE;EAEAC,QAAQA,CAAA,EAAW;IACjB,IAAI,IAAI,CAAChD,aAAa,CAACS,MAAM,GAAG,CAAC,EAAE,OAAO,oBAAoB;IAC9D;IACA;IACA,IAAMwC,IAAI,GAAG,IAAI,CAACzE,QAAQ,CAAC,CAAC,CAAC0E,sBAAsB,GAAG,KAAK,GAAG,KAAK;IACnE,IAAMC,CAAC,GAAG,IAAI,CAACzD,YAAY,CAACqD,IAAI;IAChC,IAAI,IAAI,CAAClD,iBAAiB,EAAE;MAC1B,IAAIsD,CAAC,KAAK,CAAC,EAAE,OAAO,sBAAsB;MAC1C,OAAOF,IAAI,KAAK,KAAK,sBAAAG,MAAA,CACED,CAAC,qCAAAC,MAAA,CACDD,CAAC,OAAAC,MAAA,CAAID,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,eAAY;IAClE;IACA,IAAIA,CAAC,KAAK,CAAC,EAAE,OAAO,eAAe;IACnC,IAAIA,CAAC,KAAK,CAAC,EAAE,OAAOF,IAAI,KAAK,KAAK,GAAG,iBAAiB,GAAG,iBAAiB;IAC1E,OAAOA,IAAI,KAAK,KAAK,MAAAG,MAAA,CAAMD,CAAC,0BAAAC,MAAA,CAAuBD,CAAC,oBAAiB;EACvE;;EAEA;EACAE,cAAcA,CAACC,OAAqB,EAAEd,GAAiB,EAAW;IAChE,OAAO,IAAI,CAACe,aAAa,CAACf,GAAG,CAAC;EAChC;EAEAe,aAAaA,CAACf,GAAiB,EAAW;IACxC,IAAMP,IAAI,GAAG,IAAI,CAACC,aAAa,CAACM,GAAG,CAAC;IACpC,IAAIP,IAAI,IAAI,IAAI,EAAE,OAAO,KAAK;IAC9B,IAAQG,GAAG,GAAKH,IAAI,CAAZG,GAAG;IACX,IAAI,IAAI,CAACvC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAACH,YAAY,CAAC8D,GAAG,CAACpB,GAAG,CAAC;IAC9D;IACA,OAAO,IAAI,CAAC1C,YAAY,CAAC8D,GAAG,CAACpB,GAAG,CAAC,IAAI,IAAI,CAAC1B,WAAW,CAAC8C,GAAG,CAACpB,GAAG,CAAC;EAChE;;EAEA;EACAqB,gBAAgBA,CAACH,OAAqB,EAAW;IAC/C,OAAO,IAAI,CAACzD,iBAAiB,IAAI,IAAI,CAACH,YAAY,CAACqD,IAAI,KAAK,CAAC;EAC/D;EAEAW,wBAAwBA,CACtBC,OAAwD,EACxDC,SAA8B,EAC0B;IACxD,IAAAC,cAAA,GAAkC,IAAI,CAACrF,QAAQ,CAAC,CAAC;MAAzCsF,WAAW,GAAAD,cAAA,CAAXC,WAAW;MAAEC,QAAQ,GAAAF,cAAA,CAARE,QAAQ;IAC7B,OAAOpG,kBAAkB,CAAC,IAAI,CAACiC,aAAa,EAAE+D,OAAO,EAAEC,SAAS,EAAE;MAChEE,WAAW;MACXC;IACF,CAAC,CAAC;EACJ;EAEQC,oBAAoBA,CAAA,EAGnB;IACP,IAAAC,eAAA,GAAkC,IAAI,CAACzF,QAAQ,CAAC,CAAC;MAAzCsF,WAAW,GAAAG,eAAA,CAAXH,WAAW;MAAEC,QAAQ,GAAAE,eAAA,CAARF,QAAQ;IAC7B,OAAOrG,0BAA0B,CAAC,IAAI,CAACkC,aAAa,EAAE;MACpDkE,WAAW;MACXC;IACF,CAAC,CAAC;EACJ;;EAEA;EACA;EACA;EACAG,UAAUA,CACR1B,GAAwB,EACxB2B,MAA2B,EACX;IAAA,IAAAC,qBAAA,EAAAC,mBAAA;IAChB,IAAI7B,GAAG,KAAK,IAAI,CAAC8B,SAAS,IAAIH,MAAM,KAAK,IAAI,CAAC9D,YAAY,EAAE,OAAO,IAAI;IACvE,IAAMkE,OAAO,GAAG/B,GAAG,IAAI,IAAI,IAAA4B,qBAAA,IAAAC,mBAAA,GAAG,IAAI,CAACnC,aAAa,CAACM,GAAG,CAAC,cAAA6B,mBAAA,uBAAvBA,mBAAA,CAAyBjC,GAAG,cAAAgC,qBAAA,cAAAA,qBAAA,GAAI,IAAI,GAAG,IAAI;IACzE,OAAO,IAAI,CAAC/B,QAAQ,CAAC;MACnBlC,SAAS,EAAEoE,OAAO;MAClBnE,aAAa,EAAEoC,GAAG;MAClBnC,YAAY,EAAE8D;IAChB,CAAC,CAAC;EACJ;EAEAK,gBAAgBA,CACdhC,GAAwB,EACxB2B,MAA2B,EACX;IAAA,IAAAM,sBAAA,EAAAC,oBAAA;IAChB,IAAIlC,GAAG,KAAK,IAAI,CAACmC,eAAe,IAAIR,MAAM,KAAK,IAAI,CAAC3D,kBAAkB,EAAE;MACtE,OAAO,IAAI;IACb;IACA,IAAM+D,OAAO,GAAG/B,GAAG,IAAI,IAAI,IAAAiC,sBAAA,IAAAC,oBAAA,GAAG,IAAI,CAACxC,aAAa,CAACM,GAAG,CAAC,cAAAkC,oBAAA,uBAAvBA,oBAAA,CAAyBtC,GAAG,cAAAqC,sBAAA,cAAAA,sBAAA,GAAI,IAAI,GAAG,IAAI;IACzE,OAAO,IAAI,CAACpC,QAAQ,CAAC;MACnB/B,eAAe,EAAEiE,OAAO;MACxBhE,mBAAmB,EAAEiC,GAAG;MACxBhC,kBAAkB,EAAE2D;IACtB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACUS,sBAAsBA,CAC5BC,MAA4B,EAEZ;IAAA,IADhBC,WAAW,GAAAC,SAAA,CAAAtE,MAAA,QAAAsE,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAEnB,IAAID,WAAW,EAAE;MACf,OAAO,IAAI,CAACzC,QAAQ,CAAC;QACnB3C,YAAY,EAAE,IAAIC,GAAG,CAAC,CAAC;QACvBC,aAAa,EAAEiF,MAAM;QACrBhF,iBAAiB,EAAE,KAAK;QACxBC,iBAAiB,EAAEtC,SAAS;QAC5BwC,aAAa,EAAEzC;MACjB,CAAC,CAAC;IACJ;IACA,OAAO,IAAI,CAAC8E,QAAQ,CAAC;MACnBzC,aAAa,EAAEiF,MAAM;MACrB7E,aAAa,EAAEzC;IACjB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;EACU0H,iBAAiBA,CAACzC,GAAmB,EAAkB;IAAA,IAAA0C,sBAAA,EAAAC,oBAAA;IAC7D,IAAMZ,OAAO,GAAG/B,GAAG,IAAI,IAAI,IAAA0C,sBAAA,IAAAC,oBAAA,GAAG,IAAI,CAACjD,aAAa,CAACM,GAAG,CAAC,cAAA2C,oBAAA,uBAAvBA,oBAAA,CAAyB/C,GAAG,cAAA8C,sBAAA,cAAAA,sBAAA,GAAI,IAAI,GAAG,IAAI;IACzE,IAAIX,OAAO,KAAK,IAAI,CAACtE,SAAS,IAAIuC,GAAG,KAAK,IAAI,CAACtC,SAAS,EAAE,OAAO,IAAI;IACrE,OAAO,IAAI,CAACmC,QAAQ,CAAC;MAAEpC,SAAS,EAAEsE,OAAO;MAAErE,SAAS,EAAEsC;IAAI,CAAC,CAAC;EAC9D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACU4C,gBAAgBA,CAAA,EAGf;IACP,IAAI,IAAI,CAACnF,SAAS,IAAI,IAAI,IAAI,IAAI,CAACC,SAAS,IAAI,IAAI,EAAE,OAAO,IAAI;IACjE,IAAI,IAAI,CAACD,SAAS,IAAI,IAAI,EAAE;MAC1B,IAAMoF,WAAW,GAAG,IAAI,CAACC,iBAAiB,CACxC,IAAI,CAACrF,SAAS,EACd,IAAI,CAACC,SACP,CAAC;MACD,IAAImF,WAAW,IAAI,IAAI,EAAE,OAAO;QAAE7C,GAAG,EAAE6C,WAAW;QAAElB,MAAM,EAAE;MAAK,CAAC;IACpE;IACA;IACA,OAAO;MAAE3B,GAAG,EAAE,IAAI,CAACtC,SAAS;MAAEiE,MAAM,EAAE;IAAK,CAAC;EAC9C;;EAEA;AACF;AACA;AACA;AACA;EACUmB,iBAAiBA,CACvBlD,GAAW,EACXmD,IAAyB,EACJ;IAAA,IAAAC,oBAAA,EAAAC,gBAAA,EAAAC,sBAAA,EAAAC,gBAAA;IACrB,IAAM5E,KAAK,GAAG,IAAI,CAACvC,QAAQ,CAAC,CAAC;IAC7B,IAAMwC,OAAO,IAAAwE,oBAAA,IAAAC,gBAAA,GAAG1E,KAAK,CAACE,QAAQ,cAAAwE,gBAAA,uBAAdA,gBAAA,CAAgBvE,GAAG,cAAAsE,oBAAA,cAAAA,oBAAA,GAAI,CAAC;IACxC,IAAMrE,UAAU,IAAAuE,sBAAA,IAAAC,gBAAA,GAAG5E,KAAK,CAACE,QAAQ,cAAA0E,gBAAA,uBAAdA,gBAAA,CAAgBvE,MAAM,cAAAsE,sBAAA,cAAAA,sBAAA,GAAI,CAAC;IAC9C,IAAIE,IAAyB,GAAG,IAAI;IACpC,IAAIC,QAAQ,GAAGxH,QAAQ;IACvB,KAAK,IAAI2D,CAAC,GAAGhB,OAAO,EAAEgB,CAAC,IAAIb,UAAU,EAAEa,CAAC,IAAI,CAAC,EAAE;MAC7C,IAAMC,IAAI,GAAG,IAAI,CAACC,aAAa,CAACF,CAAC,CAAC;MAClC,IAAIC,IAAI,IAAI,IAAI,IAAIA,IAAI,CAACG,GAAG,KAAKA,GAAG,EAAE,SAAS,CAAC;MAChD,IAAImD,IAAI,IAAI,IAAI,EAAE,OAAOvD,CAAC;MAC1B,IAAM8D,IAAI,GAAGlE,IAAI,CAACmE,GAAG,CAAC/D,CAAC,GAAGuD,IAAI,CAAC;MAC/B,IAAIO,IAAI,GAAGD,QAAQ,EAAE;QACnBD,IAAI,GAAG5D,CAAC;QACR6D,QAAQ,GAAGC,IAAI;MACjB;IACF;IACA,OAAOF,IAAI;EACb;EAEA,IAAItB,SAASA,CAAA,EAAwB;IAAA,IAAA0B,qBAAA;IACnC,IAAI,IAAI,CAAC7F,SAAS,IAAI,IAAI,EAAE,OAAO,IAAI,CAACC,aAAa;IACrD,QAAA4F,qBAAA,GACE,IAAI,CAACV,iBAAiB,CAAC,IAAI,CAACnF,SAAS,EAAE,IAAI,CAACC,aAAa,CAAC,cAAA4F,qBAAA,cAAAA,qBAAA,GAC1D,IAAI,CAAC5F,aAAa;EAEtB;EAEA,IAAIuE,eAAeA,CAAA,EAAwB;IAAA,IAAAsB,sBAAA;IACzC,IAAI,IAAI,CAAC3F,eAAe,IAAI,IAAI,EAAE,OAAO,IAAI,CAACC,mBAAmB;IACjE,QAAA0F,sBAAA,GACE,IAAI,CAACX,iBAAiB,CAAC,IAAI,CAAChF,eAAe,EAAE,IAAI,CAACC,mBAAmB,CAAC,cAAA0F,sBAAA,cAAAA,sBAAA,GACtE,IAAI,CAAC1F,mBAAmB;EAE5B;EAEA2F,iBAAiBA,CACfC,MAAuD,EACvDC,IAA0B,EACV;IAChB,IAAAC,qBAAA,GACE5I,oBAAoB,CAClB,IAAI,CAACmC,aAAa,EAClB,IAAI,CAACwF,gBAAgB,CAAC,CAAC,EACvBe,MAAM,EACNC,IACF,CAAC;MANKE,SAAS,GAAAD,qBAAA,CAATC,SAAS;MAAExB,WAAW,GAAAuB,qBAAA,CAAXvB,WAAW;MAAEyB,UAAU,GAAAF,qBAAA,CAAVE,UAAU;MAAEC,WAAW,GAAAH,qBAAA,CAAXG,WAAW;IAOvD,IAAMC,IAAI,GAAGF,UAAU,GAAG,IAAI,CAACG,OAAO,CAAC,CAAC,GAAG,IAAI;IAC/C,IAAIC,MAAM,GAAGF,IAAI,CAAC7B,sBAAsB,CAAC0B,SAAS,EAAExB,WAAW,CAAC;IAChE,IAAI0B,WAAW,EAAE;MACf;MACAG,MAAM,GAAGA,MAAM,CAAC1B,iBAAiB,CAACkB,MAAM,CAAC3D,GAAG,CAAC;IAC/C;IACA,OAAOmE,MAAM;EACf;EAEAC,aAAaA,CACXC,aAAwB,EACxBT,IAA0B,EACV;IAChB,IAAI,IAAI,CAACxG,aAAa,CAACa,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;IAEhD,IAAI2F,IAAI,CAACU,MAAM,KAAK,KAAK,EAAE;MACzB;MACA;MACA;MACA,OAAOlJ,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAACoG,oBAAoB,CAAC,CAAC,EAAEoC,IAAI,CAAC;IACrE;;IAEA;IACA,IAAIW,KAA0B,GAAG,IAAI;IACrC,IAAIC,OAAqB,GAAG,CAAC;IAC7B,IAAIjD,QAAQ,GAAG,CAAC;IAChB,KAAK,IAAIzC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC1B,aAAa,CAACa,MAAM,EAAEa,CAAC,IAAI,CAAC,EAAE;MACrD,IAAA2F,sBAAA,GAA6B,IAAI,CAACrH,aAAa,CAAC0B,CAAC,CAAC;QAA1CE,QAAQ,GAAAyF,sBAAA,CAARzF,QAAQ;QAAEC,MAAM,GAAAwF,sBAAA,CAANxF,MAAM;MACxB,IAAID,QAAQ,IAAI,IAAI,EAAE,SAAS,CAAC;MAChC,IAAM0F,IAAI,GAAGzF,MAAM,aAANA,MAAM,cAANA,MAAM,GAAID,QAAQ;MAC/B,IAAIuF,KAAK,KAAK,IAAI,EAAEA,KAAK,GAAGvF,QAAQ;MACpCwF,OAAO,GAAGE,IAAI;MACdnD,QAAQ,IAAImD,IAAI,GAAG1F,QAAQ,GAAG,CAAC;IACjC;IACA,IAAIuF,KAAK,KAAK,IAAI,IAAIhD,QAAQ,KAAK,CAAC,EAAE,OAAO,IAAI;IAEjD,IAAMoD,IAAI,GAAG,IAAIxH,GAAG,CAAC,IAAI,CAACD,YAAY,CAAC;IAEvC,IAAI,IAAI,CAACA,YAAY,CAACqD,IAAI,GAAG,CAAC,IAAI,IAAI,CAAClD,iBAAiB,EAAE;MACxD;MACA;MACA;MACA;MACA;MACA,IAAIuH,YAAY,GAAG,IAAI;MACvB,KAAK,IAAI9F,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAG,IAAI,CAAC1B,aAAa,CAACa,MAAM,IAAI2G,YAAY,EAAE9F,EAAC,IAAI,CAAC,EAAE;QACrE,IAAA+F,qBAAA,GAA6B,IAAI,CAACzH,aAAa,CAAC0B,EAAC,CAAC;UAA1CE,SAAQ,GAAA6F,qBAAA,CAAR7F,QAAQ;UAAEC,OAAM,GAAA4F,qBAAA,CAAN5F,MAAM;QACxB,IAAID,SAAQ,IAAI,IAAI,EAAE,SAAS,CAAC;QAChC,IAAM0F,KAAI,GAAGzF,OAAM,aAANA,OAAM,cAANA,OAAM,GAAID,SAAQ;QAC/B,KAAK,IAAIQ,CAAC,GAAGR,SAAQ,EAAEQ,CAAC,IAAIkF,KAAI,EAAElF,CAAC,IAAI,CAAC,EAAE;UACxC,IAAI,CAAC6E,aAAa,CAACtD,aAAa,CAACvB,CAAC,CAAC,EAAE;YACnCoF,YAAY,GAAG,KAAK;YACpB;UACF;QACF;MACF;;MAEA;MACA;MACA,IAAI,CAACA,YAAY,IAAI,CAAC,IAAI,CAACvH,iBAAiB,EAAE;QAAA,IAAAyH,oBAAA,EAAAC,gBAAA,EAAAC,sBAAA,EAAAC,gBAAA;QAC5C,IAAM1G,KAAK,GAAG,IAAI,CAACvC,QAAQ,CAAC,CAAC;QAC7B,IAAMwC,OAAO,IAAAsG,oBAAA,IAAAC,gBAAA,GAAGxG,KAAK,CAACE,QAAQ,cAAAsG,gBAAA,uBAAdA,gBAAA,CAAgBrG,GAAG,cAAAoG,oBAAA,cAAAA,oBAAA,GAAI,CAAC;QACxC,IAAMnG,UAAU,IAAAqG,sBAAA,IAAAC,gBAAA,GAAG1G,KAAK,CAACE,QAAQ,cAAAwG,gBAAA,uBAAdA,gBAAA,CAAgBrG,MAAM,cAAAoG,sBAAA,cAAAA,sBAAA,GAAI,CAAC;QAC9C,IAAIT,KAAK,GAAG/F,OAAO,IAAIgG,OAAO,GAAG7F,UAAU,EAAE;UAC3C,OAAOvD,mBAAmB,CACxB,IAAI,CAACyE,QAAQ,CAAC;YACZzC,aAAa,EAAErC,WAAW;YAC1ByC,aAAa,EAAE,IAAI,CAACJ;UACtB,CAAC,CAAC,EACF,IAAI,CAACoE,oBAAoB,CAAC,CAAC,EAC3BoC,IACF,CAAC;QACH;MACF;MAEA,IAAMsB,cAAa,GAAG,IAAIC,GAAG,CAAC,IAAI,CAAC7H,iBAAiB,CAAC;MACrD,KAAK,IAAIwB,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAG,IAAI,CAAC1B,aAAa,CAACa,MAAM,EAAEa,GAAC,IAAI,CAAC,EAAE;QACrD,IAAAsG,sBAAA,GAA6B,IAAI,CAAChI,aAAa,CAAC0B,GAAC,CAAC;UAA1CE,UAAQ,GAAAoG,sBAAA,CAARpG,QAAQ;UAAEC,QAAM,GAAAmG,sBAAA,CAANnG,MAAM;QACxB,IAAID,UAAQ,IAAI,IAAI,EAAE,SAAS,CAAC;QAChC,IAAM0F,MAAI,GAAGzF,QAAM,aAANA,QAAM,cAANA,QAAM,GAAID,UAAQ;QAC/B,KAAK,IAAIQ,EAAC,GAAGR,UAAQ,EAAEQ,EAAC,IAAIkF,MAAI,EAAElF,EAAC,IAAI,CAAC,EAAE;UACxC,IAAMC,KAAI,GAAG,IAAI,CAACC,aAAa,CAACF,EAAC,CAAC;UAClC,IAAIC,KAAI,IAAI,IAAI,EAAE,SAAS,CAAC;UAC5B,IAAa4F,EAAC,GAAa5F,KAAI,CAAvBG,GAAG;YAAKtE,OAAM,GAAKmE,KAAI,CAAfnE,MAAM;UACtB,IAAIsJ,YAAY,EAAE;YAChB;YACA;YACA,IAAI,IAAI,CAACvH,iBAAiB,EAAE;cAC1BsH,IAAI,CAAChF,GAAG,CAAC0F,EAAC,CAAC;cACXH,cAAa,CAACI,GAAG,CAACD,EAAC,EAAE/J,OAAM,CAAC;YAC9B,CAAC,MAAM;cACLqJ,IAAI,CAACY,MAAM,CAACF,EAAC,CAAC;cACdH,cAAa,CAACK,MAAM,CAACF,EAAC,CAAC;YACzB;UACF,CAAC,MAAM,IAAI,IAAI,CAAChI,iBAAiB,EAAE;YACjCsH,IAAI,CAACY,MAAM,CAACF,EAAC,CAAC;YACdH,cAAa,CAACK,MAAM,CAACF,EAAC,CAAC;UACzB,CAAC,MAAM;YACLV,IAAI,CAAChF,GAAG,CAAC0F,EAAC,CAAC;YACXH,cAAa,CAACI,GAAG,CAACD,EAAC,EAAE/J,OAAM,CAAC;UAC9B;QACF;MACF;MACA,OAAOF,mBAAmB,CACxB,IAAI,CAACyE,QAAQ,CAAC;QACZ3C,YAAY,EAAEyH,IAAI;QAClBvH,aAAa,EAAErC,WAAW;QAC1BuC,iBAAiB,EAAE4H,cAAa;QAChC1H,aAAa,EAAEzC;MACjB,CAAC,CAAC,EACF,IAAI,CAACyG,oBAAoB,CAAC,CAAC,EAC3BoC,IACF,CAAC;IACH;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAIrC,QAAQ,GAAG,CAAC,EAAE;MAAA,IAAAiE,oBAAA,EAAAC,gBAAA,EAAAC,sBAAA,EAAAC,gBAAA;MAChB,IAAMpH,MAAK,GAAG,IAAI,CAACvC,QAAQ,CAAC,CAAC;MAC7B,IAAMwC,QAAO,IAAAgH,oBAAA,IAAAC,gBAAA,GAAGlH,MAAK,CAACE,QAAQ,cAAAgH,gBAAA,uBAAdA,gBAAA,CAAgB/G,GAAG,cAAA8G,oBAAA,cAAAA,oBAAA,GAAI,CAAC;MACxC,IAAM7G,WAAU,IAAA+G,sBAAA,IAAAC,gBAAA,GAAGpH,MAAK,CAACE,QAAQ,cAAAkH,gBAAA,uBAAdA,gBAAA,CAAgB/G,MAAM,cAAA8G,sBAAA,cAAAA,sBAAA,GAAI,CAAC;;MAE9C;MACA;MACA,IAAInB,KAAK,IAAI/F,QAAO,IAAIgG,OAAO,IAAI7F,WAAU,EAAE;QAC7C,IAAMuG,eAAa,GAAG,IAAIC,GAAG,CAA6B,CAAC;QAC3D,KAAK,IAAI3F,GAAC,GAAG+E,KAAK,EAAE/E,GAAC,IAAIgF,OAAO,EAAEhF,GAAC,IAAI,CAAC,EAAE;UACxC,IAAMC,MAAI,GAAG,IAAI,CAACC,aAAa,CAACF,GAAC,CAAC;UAClC,IAAIC,MAAI,IAAI,IAAI,EAAE,SAAS,CAAC;UAC5ByF,eAAa,CAACI,GAAG,CAAC7F,MAAI,CAACG,GAAG,EAAEH,MAAI,CAACnE,MAAM,CAAC;QAC1C;QACA,OAAOF,mBAAmB,CACxB,IAAI,CAACyE,QAAQ,CAAC;UACZ3C,YAAY,EAAE,IAAIC,GAAG,CAAC+H,eAAa,CAACrG,IAAI,CAAC,CAAC,CAAC;UAC3CzB,aAAa,EAAErC,WAAW;UAC1BsC,iBAAiB,EAAE,KAAK;UACxBC,iBAAiB,EAAE4H,eAAa;UAChC1H,aAAa,EAAEzC;QACjB,CAAC,CAAC,EACF,IAAI,CAACyG,oBAAoB,CAAC,CAAC,EAC3BoC,IACF,CAAC;MACH;;MAEA;MACA;MACA;MACA,OAAOxI,mBAAmB,CACxB,IAAI,CAACyE,QAAQ,CAAC;QACZ3C,YAAY,EAAE,IAAIC,GAAG,CAAC,CAAC;QACvBE,iBAAiB,EAAE,KAAK;QACxBC,iBAAiB,EAAEtC,SAAS;QAC5BwC,aAAa,EAAE,IAAI,CAACJ;MACtB,CAAC,CAAC,EACF,IAAI,CAACoE,oBAAoB,CAAC,CAAC,EAC3BoC,IACF,CAAC;IACH;;IAEA;IACA,IAAM5D,GAAG,GAAGuE,KAAK;IACjB,IAAM9E,IAAI,GAAG,IAAI,CAACC,aAAa,CAACM,GAAG,CAAC;IACpC,IAAIP,IAAI,IAAI,IAAI,EAAE;MAChB;MACA;MACA,OAAOrE,mBAAmB,CACxB,IAAI,CAACyE,QAAQ,CAAC;QAAEzC,aAAa,EAAErC;MAAY,CAAC,CAAC,EAC7C,IAAI,CAACyG,oBAAoB,CAAC,CAAC,EAC3BoC,IACF,CAAC;IACH;IACA,IAAayB,CAAC,GAAa5F,IAAI,CAAvBG,GAAG;MAAKtE,MAAM,GAAKmE,IAAI,CAAfnE,MAAM;IACtB,IAAM4J,aAAa,GAAG,IAAIC,GAAG,CAAC,IAAI,CAAC7H,iBAAiB,CAAC;IACrD;IACA,IAAMsI,kBAAkB,GACtBhC,IAAI,CAACiC,aAAa,KAAK,KAAK,IAC5BxB,aAAa,YAAYvI,cAAc,IACvC,CAACuI,aAAa,CAAChH,iBAAiB,IAChCgH,aAAa,CAACnH,YAAY,CAACqD,IAAI,KAAK,CAAC,IACrC8D,aAAa,CAACnH,YAAY,CAAC8D,GAAG,CAACqE,CAAC,CAAC;IACnC,IAAIO,kBAAkB,EAAE;MACtBjB,IAAI,CAACY,MAAM,CAACF,CAAC,CAAC;MACdH,aAAa,CAACK,MAAM,CAACF,CAAC,CAAC;IACzB,CAAC,MAAM;MACLV,IAAI,CAAChF,GAAG,CAAC0F,CAAC,CAAC;MACXH,aAAa,CAACI,GAAG,CAACD,CAAC,EAAE/J,MAAM,CAAC;IAC9B;IACA,OAAOF,mBAAmB,CACxB,IAAI,CAACyE,QAAQ,CAAC;MACZ3C,YAAY,EAAEyH,IAAI;MAClBvH,aAAa,EAAErC,WAAW;MAC1BsC,iBAAiB,EAAE,KAAK;MACxBC,iBAAiB,EAAE4H,aAAa;MAChC1H,aAAa,EAAEzC;IACjB,CAAC,CAAC,EACF,IAAI,CAACyG,oBAAoB,CAAC,CAAC,EAC3BoC,IACF,CAAC;EACH;EAEAkC,KAAKA,CAAA,EAAmB;IACtB;IACA;IACA,OAAOhK,cAAc,CAACC,KAAK,CAAC,IAAI,CAACC,QAAQ,CAAC,CAAC6D,QAAQ,CAAC;MAClDlC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCC,YAAY,EAAE,IAAI,CAACA;IACrB,CAAC,CAAC;EACJ;;EAEA;EACA;EACAqG,OAAOA,CAAA,EAAmB;IACxB,OAAO,IAAI,CAACrE,QAAQ,CAAC;MACnB3C,YAAY,EAAE,IAAIC,GAAG,CAAC,CAAC;MACvBC,aAAa,EAAErC,WAAW;MAC1BsC,iBAAiB,EAAE,KAAK;MACxBC,iBAAiB,EAAEtC,SAAS;MAC5BuC,OAAO,EAAE,IAAI;MACbC,aAAa,EAAEzC;IACjB,CAAC,CAAC;EACJ;;EAEA;EACAgL,mBAAmBA,CACjB1D,MAA4B,EAC5B2D,MAAwD,EACxC;IAChB,IAAM7B,MAAM,GAAG,IAAI,CAAC8B,sBAAsB,CAAC5D,MAAM,CAAC;IAClD,IAAI2D,MAAM,KAAKxD,SAAS,EAAE,OAAO2B,MAAM;IACvC;IACA,OAAOA,MAAM,CAAC1B,iBAAiB,CAACuD,MAAM,CAAChG,GAAG,CAAC;EAC7C;EAEQiG,sBAAsBA,CAAC5D,MAA4B,EAAkB;IAAA,IAAA6D,oBAAA,EAAAC,gBAAA,EAAAC,sBAAA,EAAAC,gBAAA;IAC3E;IACA;IACA,IAAMC,KAAK,GAAG;MACZ3I,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCC,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BC,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCC,mBAAmB,EAAE,IAAI,CAACA,mBAAmB;MAC7CC,kBAAkB,EAAE,IAAI,CAACA;IAC3B,CAAC;IACD;IACA,IAAIqE,MAAM,CAACpE,MAAM,KAAK,CAAC,EAAE;MACvB,OAAO,IAAInC,cAAc,CAAAiE,aAAA;QAAG/D,QAAQ,EAAE,IAAI,CAACA;MAAQ,GAAKsK,KAAK,CAAE,CAAC;IAClE;;IAEA;IACA;IACA;IACA,IAAIC,MAA2B,GAAG,IAAI;IACtC,IAAIC,MAA2B,GAAG,IAAI;IACtC,KAAK,IAAI1H,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuD,MAAM,CAACpE,MAAM,EAAEa,CAAC,IAAI,CAAC,EAAE;MACzC,IAAA2H,SAAA,GAA6BpE,MAAM,CAACvD,CAAC,CAAC;QAA9BE,QAAQ,GAAAyH,SAAA,CAARzH,QAAQ;QAAEC,MAAM,GAAAwH,SAAA,CAANxH,MAAM;MACxB,IAAID,QAAQ,IAAI,IAAI,EAAE,SAAS,CAAC;MAChC,IAAM0F,IAAI,GAAGzF,MAAM,aAANA,MAAM,cAANA,MAAM,GAAID,QAAQ;MAC/B,IAAM0H,GAAG,GAAGtH,IAAI,CAACG,GAAG,CAACP,QAAQ,EAAE0F,IAAI,CAAC;MACpC,IAAMiC,IAAI,GAAGvH,IAAI,CAACC,GAAG,CAACL,QAAQ,EAAE0F,IAAI,CAAC;MACrC,IAAI6B,MAAM,KAAK,IAAI,IAAIG,GAAG,GAAGH,MAAM,EAAEA,MAAM,GAAGG,GAAG;MACjD,IAAIF,MAAM,KAAK,IAAI,IAAIG,IAAI,GAAGH,MAAM,EAAEA,MAAM,GAAGG,IAAI;IACrD;IACA,IAAIJ,MAAM,KAAK,IAAI,IAAIC,MAAM,KAAK,IAAI,EAAE;MACtC,OAAO,IAAI1K,cAAc,CAAAiE,aAAA;QAAG/D,QAAQ,EAAE,IAAI,CAACA;MAAQ,GAAKsK,KAAK,CAAE,CAAC;IAClE;IAEA,IAAM/H,KAAK,GAAG,IAAI,CAACvC,QAAQ,CAAC,CAAC;IAC7B,IAAMwC,OAAO,IAAA0H,oBAAA,IAAAC,gBAAA,GAAG5H,KAAK,CAACE,QAAQ,cAAA0H,gBAAA,uBAAdA,gBAAA,CAAgBzH,GAAG,cAAAwH,oBAAA,cAAAA,oBAAA,GAAI,CAAC;IACxC,IAAMvH,UAAU,IAAAyH,sBAAA,IAAAC,gBAAA,GAAG9H,KAAK,CAACE,QAAQ,cAAA4H,gBAAA,uBAAdA,gBAAA,CAAgBzH,MAAM,cAAAwH,sBAAA,cAAAA,sBAAA,GAAI,CAAC;;IAE9C;IACA;IACA,IAAIG,MAAM,IAAI/H,OAAO,IAAIgI,MAAM,IAAI7H,UAAU,EAAE;MAC7C,IAAMgG,IAAI,GAAG,IAAIxH,GAAG,CAAS,CAAC;MAC9B,IAAM+H,aAAa,GAAG,IAAIC,GAAG,CAA6B,CAAC;MAC3D,KAAK,IAAIrG,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGuD,MAAM,CAACpE,MAAM,EAAEa,GAAC,IAAI,CAAC,EAAE;QACzC,IAAA8H,UAAA,GAA6BvE,MAAM,CAACvD,GAAC,CAAC;UAA9BE,UAAQ,GAAA4H,UAAA,CAAR5H,QAAQ;UAAEC,QAAM,GAAA2H,UAAA,CAAN3H,MAAM;QACxB,IAAID,UAAQ,IAAI,IAAI,EAAE,SAAS,CAAC;QAChC,IAAM0F,MAAI,GAAGzF,QAAM,aAANA,QAAM,cAANA,QAAM,GAAID,UAAQ;QAC/B,IAAM0H,IAAG,GAAGtH,IAAI,CAACG,GAAG,CAACP,UAAQ,EAAE0F,MAAI,CAAC;QACpC,IAAMiC,KAAI,GAAGvH,IAAI,CAACC,GAAG,CAACL,UAAQ,EAAE0F,MAAI,CAAC;QACrC,KAAK,IAAIlF,CAAC,GAAGkH,IAAG,EAAElH,CAAC,IAAImH,KAAI,EAAEnH,CAAC,IAAI,CAAC,EAAE;UACnC,IAAMC,IAAI,GAAG,IAAI,CAACC,aAAa,CAACF,CAAC,CAAC;UAClC,IAAIC,IAAI,IAAI,IAAI,EAAE,SAAS,CAAC;UAC5BkF,IAAI,CAAChF,GAAG,CAACF,IAAI,CAACG,GAAG,CAAC;UAClBsF,aAAa,CAACI,GAAG,CAAC7F,IAAI,CAACG,GAAG,EAAEH,IAAI,CAACnE,MAAM,CAAC;QAC1C;MACF;MACA,OAAO,IAAIQ,cAAc,CAAAiE,aAAA;QACvB/D,QAAQ,EAAE,IAAI,CAACA,QAAQ;QACvBkB,YAAY,EAAEyH,IAAI;QAClBrH,iBAAiB,EAAE4H;MAAa,GAC7BoB,KAAK,CACT,CAAC;IACJ;;IAEA;IACA;IACA;IACA,OAAO,IAAIxK,cAAc,CAAAiE,aAAA;MACvB/D,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBwB,aAAa,EAAE6E;IAAM,GAClBiE,KAAK,CACT,CAAC;EACJ;;EAEA;EACAO,SAASA,CAAA,EAAmB;IAC1B;IACA,OAAO/K,cAAc,CAACC,KAAK,CAAC,IAAI,CAACC,QAAQ,CAAC,CAAC6D,QAAQ,CAAC;MAClDxC,iBAAiB,EAAE,IAAI;MACvBM,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCC,YAAY,EAAE,IAAI,CAACA;IACrB,CAAC,CAAC;EACJ;EAEAiJ,QAAQA,CAACvJ,OAAe,EAAkB;IACxC,IAAIA,OAAO,KAAK,IAAI,CAACA,OAAO,EAAE,OAAO,IAAI;IACzC,OAAO,IAAI,CAACsC,QAAQ,CAAC;MAAEtC;IAAQ,CAAC,CAAC;EACnC;;EAEA;AACF;AACA;EACEwJ,OAAOA,CAACC,SAAkD,EAAkB;IAC1E,IAAMC,UAAU,GAAG,IAAI9J,GAAG,CAAC,IAAI,CAACD,YAAY,CAAC;IAC7C,IAAMgK,eAAe,GAAG,IAAI/B,GAAG,CAAC,IAAI,CAAC7H,iBAAiB,CAAC;IACvD0J,SAAS,CAACG,OAAO,CAAC,CAAC7L,MAAM,EAAEsE,GAAG,KAAK;MACjCqH,UAAU,CAACtH,GAAG,CAACC,GAAG,CAAC;MACnBsH,eAAe,CAAC5B,GAAG,CAAC1F,GAAG,EAAEtE,MAAM,CAAC;IAClC,CAAC,CAAC;IACF,OAAO,IAAI,CAACuE,QAAQ,CAAC;MACnB3C,YAAY,EAAE+J,UAAU;MACxB7J,aAAa,EAAErC,WAAW;MAC1BsC,iBAAiB,EAAE,KAAK;MACxBC,iBAAiB,EAAE4J,eAAe;MAClC3J,OAAO,EAAE,IAAI;MACbC,aAAa,EAAEzC;IACjB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACEqM,iBAAiBA,CAAA,EAAkB;IACjC,IACE,IAAI,CAAC5J,aAAa,CAACS,MAAM,GAAG,CAAC,IAC7B,CAAC,IAAI,CAACjC,QAAQ,CAAC,CAAC,CAAC0E,sBAAsB,EACvC;MACA,OAAO,IAAI;IACb;IACA,IAAI,IAAI,CAACrD,iBAAiB,EAAE;MAC1B,OAAO,IAAI,CAACrB,QAAQ,CAAC,CAAC,CAACuF,QAAQ,GAAG,IAAI,CAACrE,YAAY,CAACqD,IAAI;IAC1D;IACA,OAAO,IAAI,CAACrD,YAAY,CAACqD,IAAI;EAC/B;;EAEA;EACA8G,cAAcA,CAACrH,GAAiB,EAAkB;IAChD,IAAMP,IAAI,GAAG,IAAI,CAACC,aAAa,CAACM,GAAG,CAAC;IACpC,IAAIP,IAAI,IAAI,IAAI,EAAE,OAAO,IAAI;IAC7B,IAAQG,GAAG,GAAaH,IAAI,CAApBG,GAAG;MAAEtE,MAAM,GAAKmE,IAAI,CAAfnE,MAAM;IACnB,IAAMqJ,IAAI,GAAG,IAAIxH,GAAG,CAAC,IAAI,CAACD,YAAY,CAAC;IACvC,IAAMgI,aAAa,GAAG,IAAIC,GAAG,CAAC,IAAI,CAAC7H,iBAAiB,CAAC;IACrD,IAAIqH,IAAI,CAAC3D,GAAG,CAACpB,GAAG,CAAC,EAAE;MACjB+E,IAAI,CAACY,MAAM,CAAC3F,GAAG,CAAC;MAChBsF,aAAa,CAACK,MAAM,CAAC3F,GAAG,CAAC;IAC3B,CAAC,MAAM;MACL+E,IAAI,CAAChF,GAAG,CAACC,GAAG,CAAC;MACbsF,aAAa,CAACI,GAAG,CAAC1F,GAAG,EAAEtE,MAAM,CAAC;IAChC;IACA,OAAO,IAAI,CAACuE,QAAQ,CAAC;MACnB3C,YAAY,EAAEyH,IAAI;MAClBvH,aAAa,EAAErC,WAAW;MAC1BuC,iBAAiB,EAAE4H,aAAa;MAChC1H,aAAa,EAAEzC;IACjB,CAAC,CAAC;EACJ;AACF;AAEA,eAAee,cAAc","ignoreList":[]}
|
package/dist/LazyIrisGrid.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ declare const LazyIrisGrid: import("react").ForwardRefExoticComponent<Pick<IrisG
|
|
|
6
6
|
reverse?: boolean | undefined;
|
|
7
7
|
onError?: ((error: unknown) => void) | undefined;
|
|
8
8
|
onContextMenu?: ((data: import("./IrisGrid").IrisGridContextMenuData) => readonly import("@deephaven/components").ResolvableContextAction[]) | undefined;
|
|
9
|
+
onSelectionChange?: ((selection: import("@deephaven/grid").Selection) => void) | undefined;
|
|
9
10
|
isStuckToBottom?: boolean | undefined;
|
|
10
11
|
customColumns?: readonly string[] | undefined;
|
|
11
12
|
pendingDataMap?: import("./CommonTypes").PendingDataMap | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LazyIrisGrid.d.ts","sourceRoot":"","sources":["../src/LazyIrisGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,QAAA,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"LazyIrisGrid.d.ts","sourceRoot":"","sources":["../src/LazyIrisGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDAgBjB,CAAC;AAIF,eAAe,YAAY,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -37,6 +37,9 @@ export { default as IrisGridUtils } from './IrisGridUtils';
|
|
|
37
37
|
export * from './IrisGridUtils';
|
|
38
38
|
export * from './IrisGridMetricCalculator';
|
|
39
39
|
export * from './IrisGridRenderer';
|
|
40
|
+
export * from './KeyedGridModel';
|
|
41
|
+
export { KeyedSelection } from './KeyedSelection';
|
|
42
|
+
export type { GetKeyedModel } from './KeyedSelection';
|
|
40
43
|
export * from './IrisGridCacheUtils';
|
|
41
44
|
export { default as IrisGridCellRendererUtils } from './IrisGridCellRendererUtils';
|
|
42
45
|
export { default as CellDropdownField } from './CellDropdownField';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AACrF,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,8CAA8C;AAC9C,OAAO,EAAE,eAAe,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACpF,sDAAsD;AACtD,OAAO,EAAE,uBAAuB,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,2DAA2D;AAC3D,YAAY,EAAE,4BAA4B,IAAI,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AACrF,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,8CAA8C;AAC9C,OAAO,EAAE,eAAe,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACpF,sDAAsD;AACtD,OAAO,EAAE,uBAAuB,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,2DAA2D;AAC3D,YAAY,EAAE,4BAA4B,IAAI,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -34,6 +34,8 @@ export { default as IrisGridUtils } from "./IrisGridUtils.js";
|
|
|
34
34
|
export * from "./IrisGridUtils.js";
|
|
35
35
|
export * from "./IrisGridMetricCalculator.js";
|
|
36
36
|
export * from "./IrisGridRenderer.js";
|
|
37
|
+
export * from "./KeyedGridModel.js";
|
|
38
|
+
export { KeyedSelection } from "./KeyedSelection.js";
|
|
37
39
|
export * from "./IrisGridCacheUtils.js";
|
|
38
40
|
export { default as IrisGridCellRendererUtils } from "./IrisGridCellRendererUtils.js";
|
|
39
41
|
export { default as CellDropdownField } from "./CellDropdownField.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["IrisGrid","default","ColumnHeaderGroup","SHORTCUTS","IrisGridModel","IrisGridTableModel","IrisGridPartitionedTableModel","IrisGridTreeTableModel","IrisGridTableModelTemplate","IrisGridModelFactory","createDefaultIrisGridTheme","IrisGridContext","IrisGridThemeContext","IrisGridContextProvider","IrisGridThemeProvider","IrisGridTestUtils","IrisGridUtils","IrisGridCellRendererUtils","CellDropdownField"],"sources":["../src/index.ts"],"sourcesContent":["import IrisGrid from './LazyIrisGrid';\n\nexport default IrisGrid;\nexport { IrisGrid };\nexport * from './RemoteComponentModules';\nexport * from './sidebar';\nexport * from './AdvancedFilterCreator';\nexport * from './CommonTypes';\nexport * from './mousehandlers';\nexport * from './ColumnHeaderGroup';\nexport { default as ColumnHeaderGroup } from './ColumnHeaderGroup';\nexport * from './PartitionedGridModel';\nexport * from './IrisGrid';\nexport type { default as IrisGridType } from './IrisGrid';\nexport { default as SHORTCUTS } from './IrisGridShortcuts';\nexport { default as IrisGridModel } from './IrisGridModel';\nexport * from './IrisGridModel';\nexport * from './IrisGridModelWidgetProps';\nexport { default as IrisGridTableModel } from './IrisGridTableModel';\nexport * from './IrisGridTableModel';\nexport { default as IrisGridPartitionedTableModel } from './IrisGridPartitionedTableModel';\nexport { default as IrisGridTreeTableModel } from './IrisGridTreeTableModel';\nexport { default as IrisGridTableModelTemplate } from './IrisGridTableModelTemplate';\nexport * from './IrisGridTreeTableModel';\nexport * from './IrisGridTableModelTemplate';\nexport { default as IrisGridModelFactory } from './IrisGridModelFactory';\nexport { createDefaultIrisGridTheme } from './IrisGridTheme';\nexport type { IrisGridThemeType } from './IrisGridTheme';\nexport * from './IrisGridContextProvider';\n/** @deprecated Use {@link IrisGridContext} */\nexport { IrisGridContext as IrisGridThemeContext } from './IrisGridContextProvider';\n/** @deprecated Use {@link IrisGridContextProvider} */\nexport { IrisGridContextProvider as IrisGridThemeProvider } from './IrisGridContextProvider';\n/** @deprecated Use {@link IrisGridContextProviderProps} */\nexport type { IrisGridContextProviderProps as IrisGridThemeProviderProps } from './IrisGridContextProvider';\nexport { default as IrisGridTestUtils } from './IrisGridTestUtils';\nexport { default as IrisGridUtils } from './IrisGridUtils';\nexport * from './IrisGridUtils';\nexport * from './IrisGridMetricCalculator';\nexport * from './IrisGridRenderer';\nexport * from './IrisGridCacheUtils';\nexport { default as IrisGridCellRendererUtils } from './IrisGridCellRendererUtils';\nexport { default as CellDropdownField } from './CellDropdownField';\n"],"mappings":"OAAOA,QAAQ;AAEf,eAAeA,QAAQ;AACvB,SAASA,QAAQ;AAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOXC,OAAO,IAAIC,iBAAiB;AAAA;AAAA;AAAA,SAI5BD,OAAO,IAAIE,SAAS;AAAA,SACpBF,OAAO,IAAIG,aAAa;AAAA;AAAA;AAAA,SAGxBH,OAAO,IAAII,kBAAkB;AAAA;AAAA,SAE7BJ,OAAO,IAAIK,6BAA6B;AAAA,SACxCL,OAAO,IAAIM,sBAAsB;AAAA,SACjCN,OAAO,IAAIO,0BAA0B;AAAA;AAAA;AAAA,SAGrCP,OAAO,IAAIQ,oBAAoB;AAAA,SAC/BC,0BAA0B;AAAA;AAGnC;AAAA,SACSC,eAAe,IAAIC,oBAAoB;AAChD;AAAA,SACSC,uBAAuB,IAAIC,qBAAqB;AACzD;AAAA,SAESb,OAAO,IAAIc,iBAAiB;AAAA,SAC5Bd,OAAO,IAAIe,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["IrisGrid","default","ColumnHeaderGroup","SHORTCUTS","IrisGridModel","IrisGridTableModel","IrisGridPartitionedTableModel","IrisGridTreeTableModel","IrisGridTableModelTemplate","IrisGridModelFactory","createDefaultIrisGridTheme","IrisGridContext","IrisGridThemeContext","IrisGridContextProvider","IrisGridThemeProvider","IrisGridTestUtils","IrisGridUtils","KeyedSelection","IrisGridCellRendererUtils","CellDropdownField"],"sources":["../src/index.ts"],"sourcesContent":["import IrisGrid from './LazyIrisGrid';\n\nexport default IrisGrid;\nexport { IrisGrid };\nexport * from './RemoteComponentModules';\nexport * from './sidebar';\nexport * from './AdvancedFilterCreator';\nexport * from './CommonTypes';\nexport * from './mousehandlers';\nexport * from './ColumnHeaderGroup';\nexport { default as ColumnHeaderGroup } from './ColumnHeaderGroup';\nexport * from './PartitionedGridModel';\nexport * from './IrisGrid';\nexport type { default as IrisGridType } from './IrisGrid';\nexport { default as SHORTCUTS } from './IrisGridShortcuts';\nexport { default as IrisGridModel } from './IrisGridModel';\nexport * from './IrisGridModel';\nexport * from './IrisGridModelWidgetProps';\nexport { default as IrisGridTableModel } from './IrisGridTableModel';\nexport * from './IrisGridTableModel';\nexport { default as IrisGridPartitionedTableModel } from './IrisGridPartitionedTableModel';\nexport { default as IrisGridTreeTableModel } from './IrisGridTreeTableModel';\nexport { default as IrisGridTableModelTemplate } from './IrisGridTableModelTemplate';\nexport * from './IrisGridTreeTableModel';\nexport * from './IrisGridTableModelTemplate';\nexport { default as IrisGridModelFactory } from './IrisGridModelFactory';\nexport { createDefaultIrisGridTheme } from './IrisGridTheme';\nexport type { IrisGridThemeType } from './IrisGridTheme';\nexport * from './IrisGridContextProvider';\n/** @deprecated Use {@link IrisGridContext} */\nexport { IrisGridContext as IrisGridThemeContext } from './IrisGridContextProvider';\n/** @deprecated Use {@link IrisGridContextProvider} */\nexport { IrisGridContextProvider as IrisGridThemeProvider } from './IrisGridContextProvider';\n/** @deprecated Use {@link IrisGridContextProviderProps} */\nexport type { IrisGridContextProviderProps as IrisGridThemeProviderProps } from './IrisGridContextProvider';\nexport { default as IrisGridTestUtils } from './IrisGridTestUtils';\nexport { default as IrisGridUtils } from './IrisGridUtils';\nexport * from './IrisGridUtils';\nexport * from './IrisGridMetricCalculator';\nexport * from './IrisGridRenderer';\nexport * from './KeyedGridModel';\nexport { KeyedSelection } from './KeyedSelection';\nexport type { GetKeyedModel } from './KeyedSelection';\nexport * from './IrisGridCacheUtils';\nexport { default as IrisGridCellRendererUtils } from './IrisGridCellRendererUtils';\nexport { default as CellDropdownField } from './CellDropdownField';\n"],"mappings":"OAAOA,QAAQ;AAEf,eAAeA,QAAQ;AACvB,SAASA,QAAQ;AAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOXC,OAAO,IAAIC,iBAAiB;AAAA;AAAA;AAAA,SAI5BD,OAAO,IAAIE,SAAS;AAAA,SACpBF,OAAO,IAAIG,aAAa;AAAA;AAAA;AAAA,SAGxBH,OAAO,IAAII,kBAAkB;AAAA;AAAA,SAE7BJ,OAAO,IAAIK,6BAA6B;AAAA,SACxCL,OAAO,IAAIM,sBAAsB;AAAA,SACjCN,OAAO,IAAIO,0BAA0B;AAAA;AAAA;AAAA,SAGrCP,OAAO,IAAIQ,oBAAoB;AAAA,SAC/BC,0BAA0B;AAAA;AAGnC;AAAA,SACSC,eAAe,IAAIC,oBAAoB;AAChD;AAAA,SACSC,uBAAuB,IAAIC,qBAAqB;AACzD;AAAA,SAESb,OAAO,IAAIc,iBAAiB;AAAA,SAC5Bd,OAAO,IAAIe,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,SAKxBC,cAAc;AAAA;AAAA,SAGdhB,OAAO,IAAIiB,yBAAyB;AAAA,SACpCjB,OAAO,IAAIkB,iBAAiB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/CopyKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,
|
|
1
|
+
{"version":3,"file":"CopyKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/CopyKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAqB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAGxC,cAAM,cAAe,SAAQ,UAAU;IACrC,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAM9B,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;CAsBtC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -4,7 +4,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
4
4
|
/* eslint class-methods-use-this: "off" */
|
|
5
5
|
|
|
6
6
|
import { ContextActionUtils } from '@deephaven/components';
|
|
7
|
-
import { KeyHandler } from '@deephaven/grid';
|
|
7
|
+
import { isRangedSelection, KeyHandler } from '@deephaven/grid';
|
|
8
8
|
import IrisGridUtils from "../IrisGridUtils.js";
|
|
9
9
|
class CopyKeyHandler extends KeyHandler {
|
|
10
10
|
constructor(irisGrid) {
|
|
@@ -13,12 +13,14 @@ class CopyKeyHandler extends KeyHandler {
|
|
|
13
13
|
this.irisGrid = irisGrid;
|
|
14
14
|
}
|
|
15
15
|
onDown(event) {
|
|
16
|
-
var selectedRanges = this.irisGrid.state.selectedRanges;
|
|
17
16
|
if (event.key === 'c' && ContextActionUtils.isModifierKeyDown(event)) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
var gridSelection = this.irisGrid.state.gridSelection;
|
|
18
|
+
if (gridSelection != null && !gridSelection.isEmpty()) {
|
|
19
|
+
if (isRangedSelection(gridSelection) && !IrisGridUtils.isValidSnapshotRanges(gridSelection.toRanges())) {
|
|
20
|
+
this.irisGrid.copySelection(gridSelection, false, false, 'Invalid copy ranges');
|
|
21
|
+
} else {
|
|
22
|
+
this.irisGrid.copySelection(gridSelection);
|
|
23
|
+
}
|
|
22
24
|
}
|
|
23
25
|
return true;
|
|
24
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyKeyHandler.js","names":["ContextActionUtils","KeyHandler","IrisGridUtils","CopyKeyHandler","constructor","irisGrid","_defineProperty","onDown","event","
|
|
1
|
+
{"version":3,"file":"CopyKeyHandler.js","names":["ContextActionUtils","isRangedSelection","KeyHandler","IrisGridUtils","CopyKeyHandler","constructor","irisGrid","_defineProperty","onDown","event","key","isModifierKeyDown","gridSelection","state","isEmpty","isValidSnapshotRanges","toRanges","copySelection"],"sources":["../../src/key-handlers/CopyKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { type KeyboardEvent } from 'react';\nimport { ContextActionUtils } from '@deephaven/components';\nimport { isRangedSelection, KeyHandler } from '@deephaven/grid';\nimport type IrisGrid from '../IrisGrid';\nimport IrisGridUtils from '../IrisGridUtils';\n\nclass CopyKeyHandler extends KeyHandler {\n private irisGrid: IrisGrid;\n\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n }\n\n onDown(event: KeyboardEvent): boolean {\n if (event.key === 'c' && ContextActionUtils.isModifierKeyDown(event)) {\n const { gridSelection } = this.irisGrid.state;\n if (gridSelection != null && !gridSelection.isEmpty()) {\n if (\n isRangedSelection(gridSelection) &&\n !IrisGridUtils.isValidSnapshotRanges(gridSelection.toRanges())\n ) {\n this.irisGrid.copySelection(\n gridSelection,\n false,\n false,\n 'Invalid copy ranges'\n );\n } else {\n this.irisGrid.copySelection(gridSelection);\n }\n }\n return true;\n }\n return false;\n }\n}\n\nexport default CopyKeyHandler;\n"],"mappings":";;;AAAA;;AAEA,SAASA,kBAAkB,QAAQ,uBAAuB;AAC1D,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,iBAAiB;AAAC,OAEzDC,aAAa;AAEpB,MAAMC,cAAc,SAASF,UAAU,CAAC;EAGtCG,WAAWA,CAACC,QAAkB,EAAE;IAC9B,KAAK,CAAC,CAAC;IAACC,eAAA;IAER,IAAI,CAACD,QAAQ,GAAGA,QAAQ;EAC1B;EAEAE,MAAMA,CAACC,KAAoB,EAAW;IACpC,IAAIA,KAAK,CAACC,GAAG,KAAK,GAAG,IAAIV,kBAAkB,CAACW,iBAAiB,CAACF,KAAK,CAAC,EAAE;MACpE,IAAQG,aAAa,GAAK,IAAI,CAACN,QAAQ,CAACO,KAAK,CAArCD,aAAa;MACrB,IAAIA,aAAa,IAAI,IAAI,IAAI,CAACA,aAAa,CAACE,OAAO,CAAC,CAAC,EAAE;QACrD,IACEb,iBAAiB,CAACW,aAAa,CAAC,IAChC,CAACT,aAAa,CAACY,qBAAqB,CAACH,aAAa,CAACI,QAAQ,CAAC,CAAC,CAAC,EAC9D;UACA,IAAI,CAACV,QAAQ,CAACW,aAAa,CACzBL,aAAa,EACb,KAAK,EACL,KAAK,EACL,qBACF,CAAC;QACH,CAAC,MAAM;UACL,IAAI,CAACN,QAAQ,CAACW,aAAa,CAACL,aAAa,CAAC;QAC5C;MACF;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAeR,cAAc","ignoreList":[]}
|
|
@@ -52,7 +52,7 @@ declare class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
52
52
|
dh: typeof DhType;
|
|
53
53
|
getHeaderActions(modelIndex: ModelIndex, gridPoint: GridPoint): ResolvableContextAction[];
|
|
54
54
|
getCellActions(modelColumn: ModelIndex, grid: Grid, gridPoint: GridPoint): ContextAction[];
|
|
55
|
-
getCellFilterActions(modelColumn: ModelIndex,
|
|
55
|
+
getCellFilterActions(modelColumn: ModelIndex, gridPoint: GridPoint): Promise<ContextAction[]>;
|
|
56
56
|
/**
|
|
57
57
|
* Gets an equality filter for the provided numeric value
|
|
58
58
|
* @param column The column to make the filter for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridContextMenuHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EACL,KAAK,aAAa,EAIlB,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,IAAI,EACT,gBAAgB,EAChB,KAAK,SAAS,EAQd,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"IrisGridContextMenuHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EACL,KAAK,aAAa,EAIlB,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,IAAI,EACT,gBAAgB,EAChB,KAAK,SAAS,EAQd,KAAK,UAAU,EAIhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAEL,uBAAuB,EAEvB,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAe5C,OAAO,mCAAmC,CAAC;AAE3C,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AAKxC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAYlD;;GAEG;AACH,cAAM,0BAA2B,SAAQ,gBAAgB;IACvD,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,kBAAkB,SAAmC;IAE5D,MAAM,CAAC,YAAY,SAAmC;IAEtD,MAAM,CAAC,qBAAqB,SAAmC;IAE/D,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,UAAU,SAAoC;IAErD,MAAM,CAAC,YAAY,SAAoC;IAEvD,MAAM,CAAC,mBAAmB,SAAoC;IAE9D,MAAM,CAAC,qBAAqB;;;;MAIjB;IAEX;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAC5B,YAAY,EAAE,MAAM,CAAC,eAAe,GAAG,IAAI,GAAG,SAAS,EACvD,eAAe,EAAE,MAAM,CAAC,eAAe,EACvC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,MAAM,CAAC,eAAe;IAUzB;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CACvB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,MAAM;IAMT;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI;IAI7D,MAAM,CAAC,qBAAqB,CAC1B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,SAAK,GACP,MAAM;IAOT,QAAQ,EAAE,QAAQ,CAAC;IAEnB,2BAA2B,EAAE,aAAa,CACxC,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CACvE,CAAC;gBAEU,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,MAAM;IAiBjD,oBAAoB,IAAI,IAAI;IAI5B,EAAE,EAAE,OAAO,MAAM,CAAC;IAElB,gBAAgB,CACd,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,GACnB,uBAAuB,EAAE;IAmO5B,cAAc,CACZ,WAAW,EAAE,UAAU,EACvB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,GACnB,aAAa,EAAE;IAwMZ,oBAAoB,CACxB,WAAW,EAAE,UAAU,EACvB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,aAAa,EAAE,CAAC;IAuO3B;;;;OAIG;IACH,0BAA0B,CACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,eAAe;IAqBzB,6BAA6B,CAC3B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,WAAW;IAOrB,aAAa,CACX,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,GAC3C,kBAAkB;IA+MrB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,aAAa,EAAE;IA+BzD,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,aAAa,EAAE,GAAG,IAAI;IA0DlE,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,aAAa,EAAE;IA4BlE,mBAAmB,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IAyNlB,mBAAmB,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IA0MlB,oBAAoB,CAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IA8GlB,iBAAiB,CACf,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,EAC5B,mBAAmB,EAAE,uBAAuB,EAC5C,sBAAsB,EAAE,uBAAuB,EAC/C,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,EAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IA6LlB,wBAAwB,CACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,WAAW,CAAC,EAAE,WAAW,EACzB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IA8ElB,iBAAiB,CACf,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,WAAW,CAAC,EAAE,WAAW,EACzB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,aAAa,EAAE;IAsElB,aAAa,CACX,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,cAAc,GAAG,IAAI,GAChC,aAAa,EAAE;IA+FlB,qBAAqB,CACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,WAAW,EAAE,UAAU,GACtB,aAAa,EAAE;IA4ElB,eAAe,CACb,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,EAClC,SAAS,GAAE,aAAoB,EAC/B,KAAK,UAAQ,GACZ,OAAO;CAMX;AAED,eAAe,0BAA0B,CAAC"}
|
|
@@ -11,14 +11,18 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
|
11
11
|
import { dhFilterFilled, vsRemove, vsCheck, vsFilter } from '@deephaven/icons';
|
|
12
12
|
import debounce from 'lodash.debounce';
|
|
13
13
|
import { ContextActions, ContextActionUtils, GLOBAL_SHORTCUTS } from '@deephaven/components';
|
|
14
|
-
import { GridMouseHandler, GridRange, GridRenderer,
|
|
14
|
+
import { GridMouseHandler, GridRange, GridRenderer, isDeletableGridModel, isEditableGridModel, isExpandableColumnGridModel, isExpandableGridModel, isRangedSelection, parseValueFromText, RangedSelection } from '@deephaven/grid';
|
|
15
15
|
import { TableColumnFormatter, DateTimeColumnFormatter, TableUtils } from '@deephaven/jsapi-utils';
|
|
16
16
|
import Log from '@deephaven/log';
|
|
17
|
-
import { ClipboardPermissionsDeniedError, ClipboardUnavailableError, TextUtils,
|
|
17
|
+
import { ClipboardPermissionsDeniedError, ClipboardUnavailableError, TextUtils, assertNotNull, copyToClipboard, readFromClipboard } from '@deephaven/utils';
|
|
18
18
|
import { DateTimeFormatContextMenu, DecimalFormatContextMenu, IntegerFormatContextMenu, TextAlignmentFormatContextMenu } from "../format-context-menus/index.js";
|
|
19
19
|
import "./IrisGridContextMenuHandler.css";
|
|
20
20
|
import SHORTCUTS from "../IrisGridShortcuts.js";
|
|
21
|
+
import { snapshotFromSelection, computeVisibleColumns } from "../IrisGridSelectionUtils.js";
|
|
21
22
|
import { isPartitionedGridModel } from "../PartitionedGridModel.js";
|
|
23
|
+
import { isKeyedGridModel } from "../KeyedGridModel.js";
|
|
24
|
+
import { KeyedSelection, serializeKeyValues } from "../KeyedSelection.js";
|
|
25
|
+
import IrisGridUtils from "../IrisGridUtils.js";
|
|
22
26
|
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
23
27
|
var log = Log.module('IrisGridContextMenuHandler');
|
|
24
28
|
var DEBOUNCE_UPDATE_FORMAT = 150;
|
|
@@ -296,7 +300,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
296
300
|
var sourceCell = model.sourceForCell(modelColumn, modelRow);
|
|
297
301
|
var sourceColumn = sourceCell.column,
|
|
298
302
|
sourceRow = sourceCell.row;
|
|
299
|
-
var
|
|
303
|
+
var gridSelection = irisGrid.state.gridSelection;
|
|
300
304
|
var column = columns[sourceColumn];
|
|
301
305
|
var actions = [];
|
|
302
306
|
var theme = irisGrid.getTheme();
|
|
@@ -380,12 +384,13 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
380
384
|
});
|
|
381
385
|
}
|
|
382
386
|
if (isEditableGridModel(model) && model.isEditable) {
|
|
383
|
-
|
|
387
|
+
var _gridSelection$isCell;
|
|
388
|
+
// gridSelection is updated by GridSelectionMouseHandler in the same cycle so can't access the updated value here
|
|
384
389
|
// so need to handle cases where a cell is right clicked without highlighting it first
|
|
385
|
-
var canPasteInOriginalRange =
|
|
390
|
+
var canPasteInOriginalRange = gridSelection != null && isRangedSelection(gridSelection) && gridSelection.toRanges().every(range => model.isEditableRange(range));
|
|
386
391
|
|
|
387
392
|
// To account for how when a cell outside of a selection is right clicked, that selection gets cleared
|
|
388
|
-
var isCellInOriginalRange =
|
|
393
|
+
var isCellInOriginalRange = rowIndex != null && columnIndex != null && ((_gridSelection$isCell = gridSelection === null || gridSelection === void 0 ? void 0 : gridSelection.isCellSelected(columnIndex, rowIndex)) !== null && _gridSelection$isCell !== void 0 ? _gridSelection$isCell : false);
|
|
389
394
|
var canPasteInCell = model.isEditableRange(GridRange.makeCell(columnIndex, rowIndex));
|
|
390
395
|
if ((canPasteInOriginalRange || !isCellInOriginalRange) && canPasteInCell) {
|
|
391
396
|
actions.push({
|
|
@@ -441,82 +446,65 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
441
446
|
}
|
|
442
447
|
|
|
443
448
|
// moved out of getCellActions since snapshots are async
|
|
444
|
-
getCellFilterActions(modelColumn,
|
|
449
|
+
getCellFilterActions(modelColumn, gridPoint) {
|
|
445
450
|
var _this = this;
|
|
446
451
|
return _asyncToGenerator(function* () {
|
|
452
|
+
var _irisGrid$grid$getSel, _irisGrid$grid;
|
|
447
453
|
var dh = _this.dh,
|
|
448
454
|
irisGrid = _this.irisGrid;
|
|
449
|
-
var rowIndex = gridPoint.row
|
|
455
|
+
var rowIndex = gridPoint.row,
|
|
456
|
+
columnIndex = gridPoint.column;
|
|
450
457
|
var model = irisGrid.props.model;
|
|
451
458
|
var columns = model.columns;
|
|
452
459
|
var modelRow = irisGrid.getModelRow(rowIndex);
|
|
453
|
-
var getSelectedRanges = grid.getSelectedRanges;
|
|
454
460
|
assertNotNull(modelRow);
|
|
455
461
|
var sourceCell = model.sourceForCell(modelColumn, modelRow);
|
|
456
462
|
var sourceColumn = sourceCell.column,
|
|
457
463
|
sourceRow = sourceCell.row;
|
|
458
464
|
var column = columns[sourceColumn];
|
|
459
|
-
if (column == null || rowIndex == null) return [];
|
|
465
|
+
if (column == null || rowIndex == null || columnIndex == null) return [];
|
|
460
466
|
if (!model.isFilterable(sourceColumn)) return [];
|
|
461
|
-
var
|
|
467
|
+
var _irisGrid$state2 = irisGrid.state,
|
|
468
|
+
quickFilters = _irisGrid$state2.quickFilters,
|
|
469
|
+
movedColumns = _irisGrid$state2.movedColumns;
|
|
470
|
+
var userColumnWidths = irisGrid.state.metricCalculator.getUserColumnWidths();
|
|
471
|
+
// Read directly from Grid state to avoid the React-async lag between grid.state.selection and irisGrid.state.gridSelection
|
|
472
|
+
var gridSelection = (_irisGrid$grid$getSel = (_irisGrid$grid = irisGrid.grid) === null || _irisGrid$grid === void 0 ? void 0 : _irisGrid$grid.getSelection()) !== null && _irisGrid$grid$getSel !== void 0 ? _irisGrid$grid$getSel : null;
|
|
462
473
|
var theme = irisGrid.getTheme();
|
|
463
474
|
var filterIconColor = theme.filterIconColor;
|
|
464
475
|
var settings = irisGrid.props.settings;
|
|
465
|
-
var
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
if (
|
|
470
|
-
|
|
476
|
+
var makeSingleCellSelection = () => new RangedSelection([new GridRange(columnIndex, rowIndex, columnIndex, rowIndex)], () => model);
|
|
477
|
+
var effectiveSelection;
|
|
478
|
+
if (gridSelection == null || gridSelection.isEmpty()) {
|
|
479
|
+
effectiveSelection = makeSingleCellSelection();
|
|
480
|
+
} else if (gridSelection.isCellSelected(columnIndex, rowIndex)) {
|
|
481
|
+
effectiveSelection = gridSelection.truncate(MAX_MULTISELECT_ROWS);
|
|
482
|
+
} else {
|
|
483
|
+
effectiveSelection = makeSingleCellSelection();
|
|
471
484
|
}
|
|
485
|
+
var snapshot = yield snapshotFromSelection(effectiveSelection, model, movedColumns, userColumnWidths);
|
|
472
486
|
|
|
473
|
-
//
|
|
474
|
-
//
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
while (rowCount > MAX_MULTISELECT_ROWS) {
|
|
480
|
-
var lastRow = selectedRanges.pop();
|
|
481
|
-
// should never occur, sanity check
|
|
482
|
-
assertNotNull(lastRow, 'Selected ranges should not be empty');
|
|
483
|
-
var lastRowSize = GridRange.rowCount([lastRow]);
|
|
484
|
-
// should never occur, sanity check
|
|
485
|
-
assertNotNaN(lastRowSize, 'Selected ranges should not be unbounded');
|
|
486
|
-
|
|
487
|
-
// if removing the last rows makes it dip below the max, then need to
|
|
488
|
-
// bring it back but truncated
|
|
489
|
-
if (rowCount - lastRowSize < MAX_MULTISELECT_ROWS) {
|
|
490
|
-
var _lastRow$endRow;
|
|
491
|
-
// nullish operator to make TS happy, but the check above should prevent this
|
|
492
|
-
selectedRanges.push(new GridRange(lastRow.startColumn, lastRow.startRow, lastRow.endColumn, ((_lastRow$endRow = lastRow.endRow) !== null && _lastRow$endRow !== void 0 ? _lastRow$endRow : 0) - (rowCount - MAX_MULTISELECT_ROWS)));
|
|
493
|
-
break;
|
|
494
|
-
}
|
|
495
|
-
rowCount -= lastRowSize;
|
|
496
|
-
}
|
|
487
|
+
// Locate sourceColumn in the exact ordered column list used by the snapshot.
|
|
488
|
+
// KeyedSelection snapshots use visual (moved) order; RangedSelection snapshots use model order.
|
|
489
|
+
var snapshotColumnIndex;
|
|
490
|
+
if (effectiveSelection instanceof KeyedSelection) {
|
|
491
|
+
var visibleColumns = computeVisibleColumns(model, movedColumns, userColumnWidths);
|
|
492
|
+
snapshotColumnIndex = visibleColumns.findIndex(col => model.getColumnIndexByName(col.name) === sourceColumn);
|
|
497
493
|
} else {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
selectedRanges = [new GridRange(sourceColumn, sourceRow, sourceColumn, sourceRow)];
|
|
494
|
+
var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);
|
|
495
|
+
snapshotColumnIndex = sourceColumn - hiddenColumns.filter(h => h < sourceColumn).length;
|
|
501
496
|
}
|
|
502
497
|
|
|
503
|
-
// this should be non empty
|
|
504
|
-
// - valid selected ranges will always have a startRow and endRow
|
|
505
|
-
// - if there are no selected ranges, then one with sourceColumn/Row is added
|
|
506
|
-
assertNotEmpty(selectedRanges);
|
|
507
|
-
|
|
508
498
|
// get the snapshot values, but ignore all null/undefined values
|
|
509
|
-
var snapshot = yield model.snapshot(selectedRanges);
|
|
510
499
|
var snapshotValues = new Set();
|
|
511
500
|
for (var i = 0; i < snapshot.length; i += 1) {
|
|
512
501
|
if (snapshot[i].length === 1) {
|
|
513
|
-
//
|
|
502
|
+
// single-column snapshot (single-cell selection path)
|
|
514
503
|
if (snapshot[i][0] != null) {
|
|
515
504
|
snapshotValues.add(snapshot[i][0]);
|
|
516
505
|
}
|
|
517
|
-
} else if (snapshot[i][
|
|
518
|
-
|
|
519
|
-
snapshotValues.add(snapshot[i][sourceColumn]);
|
|
506
|
+
} else if (snapshot[i][snapshotColumnIndex] != null) {
|
|
507
|
+
snapshotValues.add(snapshot[i][snapshotColumnIndex]);
|
|
520
508
|
}
|
|
521
509
|
}
|
|
522
510
|
// if snapshotValues is empty here, it means all of the snapshot's values were null/undefined
|
|
@@ -638,6 +626,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
638
626
|
return TableUtils.isCharType(columnType) ? dh.FilterValue.ofString(String.fromCharCode(value)) : dh.FilterValue.ofNumber(value);
|
|
639
627
|
}
|
|
640
628
|
onContextMenu(gridPoint, grid, event) {
|
|
629
|
+
var _gridSelection$isCell2;
|
|
641
630
|
var irisGrid = this.irisGrid;
|
|
642
631
|
var y = gridPoint.y,
|
|
643
632
|
columnIndex = gridPoint.column,
|
|
@@ -649,13 +638,48 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
649
638
|
model = _irisGrid$props2.model,
|
|
650
639
|
canCopy = _irisGrid$props2.canCopy;
|
|
651
640
|
var columns = model.columns;
|
|
652
|
-
var _irisGrid$
|
|
653
|
-
metrics = _irisGrid$
|
|
654
|
-
isFilterBarShown = _irisGrid$
|
|
655
|
-
quickFilters = _irisGrid$
|
|
656
|
-
advancedFilters = _irisGrid$
|
|
657
|
-
|
|
658
|
-
|
|
641
|
+
var _irisGrid$state3 = irisGrid.state,
|
|
642
|
+
metrics = _irisGrid$state3.metrics,
|
|
643
|
+
isFilterBarShown = _irisGrid$state3.isFilterBarShown,
|
|
644
|
+
quickFilters = _irisGrid$state3.quickFilters,
|
|
645
|
+
advancedFilters = _irisGrid$state3.advancedFilters,
|
|
646
|
+
gridSelection = _irisGrid$state3.gridSelection;
|
|
647
|
+
|
|
648
|
+
// If the clicked cell is in the current selection keep it; otherwise treat as a single-cell selection.
|
|
649
|
+
var clickedInSelection = rowIndex != null && columnIndex != null && ((_gridSelection$isCell2 = gridSelection === null || gridSelection === void 0 ? void 0 : gridSelection.isCellSelected(columnIndex, rowIndex)) !== null && _gridSelection$isCell2 !== void 0 ? _gridSelection$isCell2 : false);
|
|
650
|
+
var effectiveSelection;
|
|
651
|
+
if (clickedInSelection) {
|
|
652
|
+
effectiveSelection = gridSelection;
|
|
653
|
+
} else if (rowIndex != null && columnIndex != null) {
|
|
654
|
+
if (isKeyedGridModel(model) && modelRow != null) {
|
|
655
|
+
if (model.isKeyableRow(rowIndex)) {
|
|
656
|
+
// Construct a committed single-row KeyedSelection from the model's key columns.
|
|
657
|
+
var getModel = () => model;
|
|
658
|
+
var keyIndices = model.selectionKeyColumnIndices;
|
|
659
|
+
var values = keyIndices.map(i => model.valueForCell(i, modelRow));
|
|
660
|
+
var key = serializeKeyValues(values);
|
|
661
|
+
var keyValues = new Map([[key, values]]);
|
|
662
|
+
effectiveSelection = new KeyedSelection({
|
|
663
|
+
getModel,
|
|
664
|
+
selectedKeys: new Set([key]),
|
|
665
|
+
selectedKeyValues: keyValues
|
|
666
|
+
});
|
|
667
|
+
} else {
|
|
668
|
+
// Totals / aggregation row on a keyed table — not keyable.
|
|
669
|
+
effectiveSelection = null;
|
|
670
|
+
}
|
|
671
|
+
} else if (isEditableGridModel(model) && model.isEditable) {
|
|
672
|
+
// Input tables: single-cell selection (editable rows are cell-granular).
|
|
673
|
+
effectiveSelection = new RangedSelection([GridRange.makeCell(columnIndex, rowIndex)], () => model);
|
|
674
|
+
} else {
|
|
675
|
+
// Regular tables: full-row selection so all visible columns are included.
|
|
676
|
+
effectiveSelection = new RangedSelection([new GridRange(null, rowIndex, null, rowIndex)], () => model);
|
|
677
|
+
}
|
|
678
|
+
} else {
|
|
679
|
+
effectiveSelection = null;
|
|
680
|
+
}
|
|
681
|
+
// Only ranged selections support row-range operations (delete).
|
|
682
|
+
var effectiveRanges = effectiveSelection != null && isRangedSelection(effectiveSelection) ? effectiveSelection.toRanges() : [];
|
|
659
683
|
assertNotNull(metrics);
|
|
660
684
|
var columnHeaderHeight = metrics.columnHeaderHeight,
|
|
661
685
|
gridY = metrics.gridY,
|
|
@@ -678,7 +702,8 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
678
702
|
rowIndex,
|
|
679
703
|
columnIndex,
|
|
680
704
|
modelRow,
|
|
681
|
-
modelColumn
|
|
705
|
+
modelColumn,
|
|
706
|
+
selection: effectiveSelection
|
|
682
707
|
}));
|
|
683
708
|
}
|
|
684
709
|
}
|
|
@@ -707,18 +732,18 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
707
732
|
// grid body context menu options
|
|
708
733
|
if (modelColumn != null && modelRow != null) {
|
|
709
734
|
actions.push(...this.getCellActions(modelColumn, grid, gridPoint));
|
|
710
|
-
actions.push(this.getCellFilterActions(modelColumn,
|
|
735
|
+
actions.push(this.getCellFilterActions(modelColumn, gridPoint));
|
|
711
736
|
}
|
|
712
737
|
|
|
713
738
|
// blank space context menu options
|
|
714
|
-
if (canCopy &&
|
|
739
|
+
if (canCopy && effectiveSelection != null && !effectiveSelection.isEmpty()) {
|
|
715
740
|
actions.push({
|
|
716
741
|
title: 'Copy Selection',
|
|
717
742
|
shortcut: GLOBAL_SHORTCUTS.COPY,
|
|
718
743
|
group: IrisGridContextMenuHandler.GROUP_COPY,
|
|
719
744
|
order: 30,
|
|
720
745
|
action: () => {
|
|
721
|
-
irisGrid.
|
|
746
|
+
irisGrid.copySelection(effectiveSelection);
|
|
722
747
|
}
|
|
723
748
|
});
|
|
724
749
|
actions.push({
|
|
@@ -726,18 +751,18 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
726
751
|
group: IrisGridContextMenuHandler.GROUP_COPY,
|
|
727
752
|
order: 40,
|
|
728
753
|
action: () => {
|
|
729
|
-
irisGrid.
|
|
754
|
+
irisGrid.copySelection(effectiveSelection, true);
|
|
730
755
|
}
|
|
731
756
|
});
|
|
732
757
|
}
|
|
733
|
-
if (isEditableGridModel(model) && model.isEditable &&
|
|
758
|
+
if (isEditableGridModel(model) && model.isEditable && effectiveRanges.length > 0 && isDeletableGridModel(model) && model.isDeletable) {
|
|
734
759
|
actions.push({
|
|
735
760
|
title: 'Delete Selected Rows',
|
|
736
761
|
group: IrisGridContextMenuHandler.GROUP_EDIT,
|
|
737
|
-
disabled: !model.isDeletableRanges(
|
|
762
|
+
disabled: !model.isDeletableRanges(effectiveRanges),
|
|
738
763
|
order: 50,
|
|
739
764
|
action: () => {
|
|
740
|
-
this.irisGrid.deleteRanges(
|
|
765
|
+
this.irisGrid.deleteRanges(effectiveRanges);
|
|
741
766
|
}
|
|
742
767
|
});
|
|
743
768
|
}
|