{"version":3,"sources":["jsdelivr-header.js","/npm/slickgrid@5.19.0/src/plugins/slick.rowselectionmodel.ts"],"names":[],"mappings":"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","file":"/npm/slickgrid@5.19.0/dist/browser/plugins/slick.rowselectionmodel.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.48.0.\n * Original file: /npm/slickgrid@5.19.0/dist/browser/plugins/slick.rowselectionmodel.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import {\n  keyCode as keyCode_,\n  SlickEvent as SlickEvent_,\n  SlickEventData as SlickEventData_,\n  SlickEventHandler as SlickEventHandler_,\n  SlickRange as SlickRange_,\n  Utils as Utils_\n} from '../slick.core.js';\nimport { Draggable as Draggable_ } from '../slick.interactions.js';\nimport { SlickCellRangeDecorator as SlickCellRangeDecorator_ } from './slick.cellrangedecorator.js';\nimport { SlickCellRangeSelector as SlickCellRangeSelector_ } from './slick.cellrangeselector.js';\nimport type { SlickCrossGridRowMoveManager as SlickCrossGridRowMoveManager_ } from './slick.crossgridrowmovemanager.js';\nimport type { SlickRowMoveManager as SlickRowMoveManager_ } from './slick.rowmovemanager.js';\nimport type { OnActiveCellChangedEventArgs, RowSelectionModelOption, SelectionModel } from '../models/index.js';\nimport type { SlickGrid } from '../slick.grid.js';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst SlickCellRangeDecorator = IIFE_ONLY ? Slick.CellRangeDecorator : SlickCellRangeDecorator_;\nconst SlickCellRangeSelector = IIFE_ONLY ? Slick.CellRangeSelector : SlickCellRangeSelector_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport class SlickRowSelectionModel implements SelectionModel {\n  // --\n  // public API\n  pluginName = 'RowSelectionModel' as const;\n  onSelectedRangesChanged = new SlickEvent<SlickRange_[]>('onSelectedRangesChanged');\n  // _handler, _inHandler, _isRowMoveManagerHandler, _options, wrapHandler\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _ranges: SlickRange_[] = [];\n  protected _eventHandler = new SlickEventHandler();\n  protected _inHandler = false;\n  protected _selector?: SlickCellRangeSelector_;\n  protected _isRowMoveManagerHandler: any;\n  protected _options: RowSelectionModelOption;\n  protected _defaults: RowSelectionModelOption = {\n    selectActiveRow: true,\n    dragToSelect: false,\n    autoScrollWhenDrag: true,\n    cellRangeSelector: undefined\n  };\n\n  constructor(options?: Partial<RowSelectionModelOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  init(grid: SlickGrid) {\n    if (Draggable === undefined) {\n      throw new Error('Slick.Draggable is undefined, make sure to import \"slick.interactions.js\"');\n    }\n\n    this._selector = this._options.cellRangeSelector;\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n    if (!this._selector && this._options.dragToSelect) {\n      if (!SlickCellRangeDecorator) {\n        throw new Error('Slick.CellRangeDecorator is required when option dragToSelect set to true');\n      }\n      this._selector = new SlickCellRangeSelector({\n        selectionCss: { border: 'none' } as CSSStyleDeclaration,\n        autoScroll: this._options.autoScrollWhenDrag\n      });\n    }\n\n    this._eventHandler.subscribe(this._grid.onActiveCellChanged, this.wrapHandler(this.handleActiveCellChange).bind(this));\n    this._eventHandler.subscribe(this._grid.onKeyDown, this.wrapHandler(this.handleKeyDown).bind(this));\n    this._eventHandler.subscribe(this._grid.onClick, this.wrapHandler(this.handleClick).bind(this));\n    if (this._selector) {\n      grid.registerPlugin(this._selector);\n      this._selector.onCellRangeSelecting.subscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onCellRangeSelected.subscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onBeforeCellRangeSelected.subscribe(this.handleBeforeCellRangeSelected.bind(this));\n    }\n  }\n\n  destroy() {\n    this._eventHandler.unsubscribeAll();\n    if (this._selector) {\n      this._selector.onCellRangeSelecting.unsubscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onCellRangeSelected.unsubscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onBeforeCellRangeSelected.unsubscribe(this.handleBeforeCellRangeSelected.bind(this));\n      this._grid.unregisterPlugin(this._selector);\n      if (this._selector.destroy) {\n        this._selector.destroy();\n      }\n    }\n  }\n\n  getOptions(): RowSelectionModelOption {\n    return this._options;\n  }\n\n  protected wrapHandler(handler: (...args: any) => void) {\n    return (...args: any) => {\n      if (!this._inHandler) {\n        this._inHandler = true;\n        handler.apply(this, args);\n        this._inHandler = false;\n      }\n    };\n  }\n\n  protected rangesToRows(ranges: SlickRange_[]): number[] {\n    const rows: number[] = [];\n    for (let i = 0; i < ranges.length; i++) {\n      for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n        rows.push(j);\n      }\n    }\n    return rows;\n  }\n\n  protected rowsToRanges(rows: number[]) {\n    const ranges: SlickRange_[] = [];\n    const lastCell = this._grid.getColumns().length - 1;\n    rows.forEach(row => ranges.push(new SlickRange(row, 0, row, lastCell)));\n    return ranges;\n  }\n\n  protected getRowsRange(from: number, to: number) {\n    let i;\n    const rows: number[] = [];\n    for (i = from; i <= to; i++) {\n      rows.push(i);\n    }\n    for (i = to; i < from; i++) {\n      rows.push(i);\n    }\n    return rows;\n  }\n\n  getSelectedRows() {\n    return this.rangesToRows(this._ranges);\n  }\n\n  setSelectedRows(rows: number[]) {\n    this.setSelectedRanges(this.rowsToRanges(rows), 'SlickRowSelectionModel.setSelectedRows');\n  }\n\n  setSelectedRanges(ranges: SlickRange_[], caller = 'SlickRowSelectionModel.setSelectedRanges', selectionMode?: string) {\n    // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\n    if ((!this._ranges || this._ranges.length === 0) && (!ranges || ranges.length === 0)) {\n      return;\n    }\n    this._ranges = ranges;\n\n    // provide extra \"caller\" argument through SlickEventData event to avoid breaking the previous pubsub event structure\n    // that only accepts an array of selected range `SlickRange[]`, the SlickEventData args will be merged and used later by `onSelectedRowsChanged`\n    const eventData = new SlickEventData(new CustomEvent('click', { detail: { caller, selectionMode } }), this._ranges);\n    this.onSelectedRangesChanged.notify(this._ranges, eventData);\n  }\n\n  getSelectedRanges() {\n    return this._ranges;\n  }\n\n  refreshSelections() {\n    this.setSelectedRows(this.getSelectedRows());\n  }\n\n  protected handleActiveCellChange(_e: SlickEventData_, args: OnActiveCellChangedEventArgs) {\n    if (this._options.selectActiveRow && Utils.isDefined(args.row)) {\n      this.setSelectedRanges([new SlickRange(args.row, 0, args.row, this._grid.getColumns().length - 1)]);\n    }\n  }\n\n  protected handleKeyDown(e: KeyboardEvent) {\n    const activeRow = this._grid.getActiveCell();\n    if (activeRow\n      && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey\n      && (e.which === keyCode.UP || e.which === keyCode.DOWN)) {\n      let selectedRows = this.getSelectedRows();\n      selectedRows.sort((x, y) => x - y);\n\n      if (!selectedRows.length) {\n        selectedRows = [activeRow.row];\n      }\n\n      let top = selectedRows[0];\n      let bottom = selectedRows[selectedRows.length - 1];\n      let active: number;\n\n      if (e.which === keyCode.DOWN) {\n        active = activeRow.row < bottom || top === bottom ? ++bottom : ++top;\n      } else {\n        active = activeRow.row < bottom ? --bottom : --top;\n      }\n\n      if (active >= 0 && active < this._grid.getDataLength()) {\n        this._grid.scrollRowIntoView(active);\n        if (!this._grid.getOptions().multiSelect) {\n          top = active;\n          bottom = active;\n        }\n        const tempRanges = this.rowsToRanges(this.getRowsRange(top, bottom));\n        this.setSelectedRanges(tempRanges);\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }\n\n  protected handleClick(e: MouseEvent): boolean | void {\n    const cell = this._grid.getCellFromEvent(e);\n    if (!cell || !this._grid.canCellBeActive(cell.row, cell.cell)) {\n      return false;\n    }\n\n    if (!this._grid.getOptions().multiSelect || (\n      !e.ctrlKey && !e.shiftKey && !e.metaKey)) {\n      return false;\n    }\n\n    let selection = this.rangesToRows(this._ranges);\n    const idx = selection.indexOf(cell.row);\n\n    if (idx === -1 && (e.ctrlKey || e.metaKey)) {\n      selection.push(cell.row);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {\n      selection = selection.filter((o) => o !== cell.row);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    } else if (selection.length && e.shiftKey) {\n      const last = selection.pop() as number;\n      const from = Math.min(cell.row, last);\n      const to = Math.max(cell.row, last);\n      selection = [];\n      for (let i = from; i <= to; i++) {\n        if (i !== last) {\n          selection.push(i);\n        }\n      }\n      selection.push(last);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    }\n\n    const tempRanges = this.rowsToRanges(selection);\n    this.setSelectedRanges(tempRanges);\n    e.stopImmediatePropagation();\n\n    return true;\n  }\n\n  protected handleBeforeCellRangeSelected(e: SlickEventData_, cell: { row: number; cell: number; }): boolean | void {\n    if (!this._isRowMoveManagerHandler) {\n      const rowMoveManager = this._grid.getPluginByName<SlickRowMoveManager_>('RowMoveManager') || this._grid.getPluginByName<SlickCrossGridRowMoveManager_>('CrossGridRowMoveManager');\n      this._isRowMoveManagerHandler = rowMoveManager ? rowMoveManager.isHandlerColumn : Utils.noop;\n    }\n    if (this._grid.getEditorLock().isActive() || this._isRowMoveManagerHandler(cell.cell)) {\n      e.stopPropagation();\n      return false;\n    }\n    this._grid.setActiveCell(cell.row, cell.cell);\n  }\n\n  protected handleCellRangeSelected(_e: SlickEventData_, args: { range: SlickRange_; selectionMode: string; }): boolean | void {\n    if (!this._grid.getOptions().multiSelect || !this._options.selectActiveRow) {\n      return false;\n    }\n    this.setSelectedRanges([new SlickRange(args.range.fromRow, 0, args.range.toRow, this._grid.getColumns().length - 1)], undefined, args.selectionMode);\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      RowSelectionModel: SlickRowSelectionModel\n    }\n  });\n}\n\n"]}