{"version":3,"file":"Header.cjs","sources":["../../../../src/components/Grid/Header.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\nimport { cn } from '@/lib/cva';\nimport styles from './Header.module.css';\nimport {\n  CellProps,\n  ColumnResizeFn,\n  GetResizerPositionFn,\n  SelectionTypeFn,\n} from './types';\nimport { StyledCell } from './StyledCell';\nimport ColumnResizer from './ColumnResizer';\nimport { ResizingState } from './useResizingState';\n\ninterface HeaderProps {\n  showRowNumber: boolean;\n  rowNumberWidth: number;\n  minColumn: number;\n  maxColumn: number;\n  height: number;\n  getColumnWidth: (index: number) => number;\n  cell: CellProps;\n  getSelectionType: SelectionTypeFn;\n  columnCount: number;\n  onColumnResize: ColumnResizeFn;\n  getColumnHorizontalPosition: (columnIndex: number) => number;\n  scrolledVertical: boolean;\n  getResizerPosition: GetResizerPositionFn;\n  showBorder: boolean;\n  scrolledHorizontal: boolean;\n  resizingState: ResizingState;\n}\n\ninterface ColumnProps extends Pick<\n  HeaderProps,\n  | 'cell'\n  | 'getSelectionType'\n  | 'onColumnResize'\n  | 'getColumnWidth'\n  | 'height'\n  | 'getResizerPosition'\n  | 'showBorder'\n  | 'getColumnHorizontalPosition'\n  | 'resizingState'\n> {\n  columnIndex: number;\n  isLastColumn: boolean;\n}\n\nconst toCssSize = ($width: string | number): string =>\n  typeof $width === 'string' ? $width : `${$width}px`;\n\nconst Column = ({\n  columnIndex,\n  cell,\n  getColumnWidth,\n  getColumnHorizontalPosition,\n  getSelectionType,\n  isLastColumn,\n  onColumnResize,\n  height,\n  getResizerPosition,\n  showBorder,\n  resizingState,\n}: ColumnProps) => {\n  const selectionType = getSelectionType({\n    column: columnIndex,\n    type: 'column',\n  });\n  const leftSelectionType = getSelectionType({\n    column: columnIndex - 1,\n    type: 'column',\n  });\n  const columnPosition = getColumnHorizontalPosition(columnIndex);\n\n  const isSelected = selectionType === 'selectDirect';\n  const isSelectedLeft =\n    (leftSelectionType === 'selectDirect' || isSelected) &&\n    leftSelectionType !== selectionType;\n\n  const columnWidth = getColumnWidth(columnIndex);\n  return (\n    <div\n      className={styles['header__cell']}\n      style={\n        {\n          '--header-cell-width': toCssSize(columnWidth),\n          '--header-cell-height': `${height}px`,\n          '--header-cell-left': `${columnPosition}px`,\n        } as CSSProperties\n      }\n      data-header={columnIndex}\n    >\n      <StyledCell\n        $type=\"header\"\n        as={cell}\n        columnIndex={columnIndex}\n        type=\"header-cell\"\n        $selectionType={selectionType}\n        $isLastColumn={isLastColumn}\n        $isFocused={false}\n        $isSelectedLeft={isSelectedLeft}\n        $isSelectedTop={isSelected}\n        $isLastRow={false}\n        $height={height}\n        data-grid-row={-1}\n        data-grid-column={columnIndex}\n        data-selected={isSelected}\n        $showBorder={showBorder}\n        width={columnWidth}\n      />\n      <ColumnResizer\n        height={height}\n        onColumnResize={onColumnResize}\n        columnIndex={columnIndex}\n        getResizerPosition={getResizerPosition}\n        columnWidth={columnWidth}\n        resizingState={resizingState}\n      />\n    </div>\n  );\n};\n\nconst Header = ({\n  scrolledVertical,\n  scrolledHorizontal,\n  showRowNumber,\n  rowNumberWidth,\n  minColumn,\n  maxColumn,\n  height,\n  getColumnWidth,\n  cell,\n  columnCount,\n  getSelectionType,\n  onColumnResize,\n  getColumnHorizontalPosition,\n  getResizerPosition,\n  showBorder,\n  resizingState,\n}: HeaderProps) => {\n  const selectedAllType = getSelectionType({\n    type: 'all',\n  });\n  return (\n    <div\n      className={cn(\n        styles['header'],\n        scrolledVertical && styles['header_scrolled-vertical']\n      )}\n      style={{ '--header-height': `${height}px` } as CSSProperties}\n    >\n      <div\n        className={styles['header__scroll-area']}\n        style={{ '--header-scroll-area-left': `${rowNumberWidth}px` } as CSSProperties}\n      >\n        {Array.from(\n          { length: maxColumn - minColumn + 1 },\n          (_, index) => minColumn + index\n        ).map(columnIndex => (\n          <Column\n            key={`header-${columnIndex}`}\n            getSelectionType={getSelectionType}\n            columnIndex={columnIndex}\n            getColumnWidth={getColumnWidth}\n            getColumnHorizontalPosition={getColumnHorizontalPosition}\n            cell={cell}\n            isLastColumn={columnIndex + 1 === columnCount}\n            onColumnResize={onColumnResize}\n            height={height}\n            getResizerPosition={getResizerPosition}\n            showBorder={showBorder}\n            resizingState={resizingState}\n          />\n        ))}\n      </div>\n      {showRowNumber && (\n        <div\n          className={cn(\n            styles['header__cell'],\n            styles['header__row-column'],\n            scrolledHorizontal && styles['header__row-column_scrolled-horizontal']\n          )}\n          style={\n            {\n              '--header-cell-width': toCssSize(rowNumberWidth),\n              '--header-cell-height': `${height}px`,\n              '--header-cell-left': '0px',\n            } as CSSProperties\n          }\n        >\n          <StyledCell\n            data-align=\"right\"\n            data-selected={selectedAllType === 'selectDirect'}\n            $type=\"header\"\n            $selectionType={selectedAllType}\n            $isLastRow={false}\n            $isLastColumn={false}\n            $height={height}\n            $isFocused={false}\n            $isSelectedLeft={false}\n            $isSelectedTop={false}\n            data-grid-row={-1}\n            data-grid-column={-1}\n            $showBorder={showBorder}\n          >\n            #\n          </StyledCell>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default Header;\n"],"names":["jsxs","styles","jsx","StyledCell","ColumnResizer","cn"],"mappings":";;;;;;;;;;AAgDA,MAAM,SAAA,GAAY,CAAC,MAAA,KACjB,OAAO,WAAW,QAAA,GAAW,MAAA,GAAS,GAAG,MAAM,CAAA,EAAA,CAAA;AAEjD,MAAM,SAAS,CAAC;AAAA,EACd,WAAA;AAAA,EACA,IAAA;AAAA,EACA,cAAA;AAAA,EACA,2BAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAmB;AACjB,EAAA,MAAM,gBAAgB,gBAAA,CAAiB;AAAA,IACrC,MAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACP,CAAA;AACD,EAAA,MAAM,oBAAoB,gBAAA,CAAiB;AAAA,IACzC,QAAQ,WAAA,GAAc,CAAA;AAAA,IACtB,IAAA,EAAM;AAAA,GACP,CAAA;AACD,EAAA,MAAM,cAAA,GAAiB,4BAA4B,WAAW,CAAA;AAE9D,EAAA,MAAM,aAAa,aAAA,KAAkB,cAAA;AACrC,EAAA,MAAM,cAAA,GAAA,CACH,iBAAA,KAAsB,cAAA,IAAkB,UAAA,KACzC,iBAAA,KAAsB,aAAA;AAExB,EAAA,MAAM,WAAA,GAAc,eAAe,WAAW,CAAA;AAC9C,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,sBAAO,cAAc,CAAA;AAAA,MAChC,KAAA,EACE;AAAA,QACE,qBAAA,EAAuB,UAAU,WAAW,CAAA;AAAA,QAC5C,sBAAA,EAAwB,GAAG,MAAM,CAAA,EAAA,CAAA;AAAA,QACjC,oBAAA,EAAsB,GAAG,cAAc,CAAA,EAAA;AAAA,OACzC;AAAA,MAEF,aAAA,EAAa,WAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAACC,qBAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,EAAA,EAAI,IAAA;AAAA,YACJ,WAAA;AAAA,YACA,IAAA,EAAK,aAAA;AAAA,YACL,cAAA,EAAgB,aAAA;AAAA,YAChB,aAAA,EAAe,YAAA;AAAA,YACf,UAAA,EAAY,KAAA;AAAA,YACZ,eAAA,EAAiB,cAAA;AAAA,YACjB,cAAA,EAAgB,UAAA;AAAA,YAChB,UAAA,EAAY,KAAA;AAAA,YACZ,OAAA,EAAS,MAAA;AAAA,YACT,eAAA,EAAe,EAAA;AAAA,YACf,kBAAA,EAAkB,WAAA;AAAA,YAClB,eAAA,EAAe,UAAA;AAAA,YACf,WAAA,EAAa,UAAA;AAAA,YACb,KAAA,EAAO;AAAA;AAAA,SACT;AAAA,wBACAD,cAAA;AAAA,UAACE,qBAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,cAAA;AAAA,YACA,WAAA;AAAA,YACA,kBAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,MAAM,SAAS,CAAC;AAAA,EACd,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,2BAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAmB;AACjB,EAAA,MAAM,kBAAkB,gBAAA,CAAiB;AAAA,IACvC,IAAA,EAAM;AAAA,GACP,CAAA;AACD,EAAA,uBACEJ,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWK,MAAA;AAAA,QACTJ,sBAAO,QAAQ,CAAA;AAAA,QACf,gBAAA,IAAoBA,sBAAO,0BAA0B;AAAA,OACvD;AAAA,MACA,KAAA,EAAO,EAAE,iBAAA,EAAmB,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,EAAK;AAAA,MAE1C,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,sBAAO,qBAAqB,CAAA;AAAA,YACvC,KAAA,EAAO,EAAE,2BAAA,EAA6B,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA,EAAK;AAAA,YAE3D,QAAA,EAAA,KAAA,CAAM,IAAA;AAAA,cACL,EAAE,MAAA,EAAQ,SAAA,GAAY,SAAA,GAAY,CAAA,EAAE;AAAA,cACpC,CAAC,CAAA,EAAG,KAAA,KAAU,SAAA,GAAY;AAAA,aAC5B,CAAE,IAAI,CAAA,WAAA,qBACJC,cAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,gBAAA;AAAA,gBACA,WAAA;AAAA,gBACA,cAAA;AAAA,gBACA,2BAAA;AAAA,gBACA,IAAA;AAAA,gBACA,YAAA,EAAc,cAAc,CAAA,KAAM,WAAA;AAAA,gBAClC,cAAA;AAAA,gBACA,MAAA;AAAA,gBACA,kBAAA;AAAA,gBACA,UAAA;AAAA,gBACA;AAAA,eAAA;AAAA,cAXK,UAAU,WAAW,CAAA;AAAA,aAa7B;AAAA;AAAA,SACH;AAAA,QACC,aAAA,oBACCA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWG,MAAA;AAAA,cACTJ,sBAAO,cAAc,CAAA;AAAA,cACrBA,sBAAO,oBAAoB,CAAA;AAAA,cAC3B,kBAAA,IAAsBA,sBAAO,wCAAwC;AAAA,aACvE;AAAA,YACA,KAAA,EACE;AAAA,cACE,qBAAA,EAAuB,UAAU,cAAc,CAAA;AAAA,cAC/C,sBAAA,EAAwB,GAAG,MAAM,CAAA,EAAA,CAAA;AAAA,cACjC,oBAAA,EAAsB;AAAA,aACxB;AAAA,YAGF,QAAA,kBAAAC,cAAA;AAAA,cAACC,qBAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAW,OAAA;AAAA,gBACX,iBAAe,eAAA,KAAoB,cAAA;AAAA,gBACnC,KAAA,EAAM,QAAA;AAAA,gBACN,cAAA,EAAgB,eAAA;AAAA,gBAChB,UAAA,EAAY,KAAA;AAAA,gBACZ,aAAA,EAAe,KAAA;AAAA,gBACf,OAAA,EAAS,MAAA;AAAA,gBACT,UAAA,EAAY,KAAA;AAAA,gBACZ,eAAA,EAAiB,KAAA;AAAA,gBACjB,cAAA,EAAgB,KAAA;AAAA,gBAChB,eAAA,EAAe,EAAA;AAAA,gBACf,kBAAA,EAAkB,EAAA;AAAA,gBAClB,WAAA,EAAa,UAAA;AAAA,gBACd,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;;"}