{"version":3,"file":"header-cell.mjs","sources":["../../../../../../../packages/components/table-v2/src/renderers/header-cell.tsx"],"sourcesContent":["import { renderSlot } from 'vue'\nimport { HeaderCell, SortIcon } from '../components'\n// import ColumnResizer from '../table-column-resizer'\nimport { Alignment, SortOrder, oppositeOrderMap } from '../constants'\nimport { placeholderSign } from '../private'\nimport { componentToSlot, enforceUnit, tryCall } from '../utils'\n\nimport type { FunctionalComponent, UnwrapNestedRefs } from 'vue'\nimport type { UseNamespaceReturn } from '@lit-element/hooks'\nimport type { TableV2HeaderRowCellRendererParams } from '../components'\nimport type { UseTableReturn } from '../use-table'\nimport type { TableV2Props } from '../table'\n\nexport type HeaderCellRendererProps = TableV2HeaderRowCellRendererParams &\n  UnwrapNestedRefs<Pick<UseTableReturn, 'onColumnSorted'>> &\n  Pick<TableV2Props, 'sortBy' | 'sortState' | 'headerCellProps'> & {\n    ns: UseNamespaceReturn\n  }\n\nconst HeaderCellRenderer: FunctionalComponent<HeaderCellRendererProps> = (\n  props,\n  { slots }\n) => {\n  const { column, ns, style, onColumnSorted } = props\n\n  const cellStyle = enforceUnit(style)\n\n  if (column.placeholderSign === placeholderSign) {\n    return (\n      <div class={ns.em('header-row-cell', 'placeholder')} style={cellStyle} />\n    )\n  }\n\n  const { headerCellRenderer, headerClass, sortable } = column\n\n  /**\n   * render Cell children\n   */\n\n  const cellProps = {\n    ...props,\n    class: ns.e('header-cell-text'),\n  }\n\n  const columnCellRenderer =\n    componentToSlot<typeof cellProps>(headerCellRenderer)\n\n  const Cell = columnCellRenderer\n    ? columnCellRenderer(cellProps)\n    : renderSlot(slots, 'default', cellProps, () => [\n        <HeaderCell {...cellProps} />,\n      ])\n\n  /**\n   * Render cell container and sort indicator\n   */\n  const { sortBy, sortState, headerCellProps } = props\n\n  let sorting: boolean, sortOrder: SortOrder\n  if (sortState) {\n    const order = sortState[column.key!]\n    sorting = Boolean(oppositeOrderMap[order])\n    sortOrder = sorting ? order : SortOrder.ASC\n  } else {\n    sorting = column.key === sortBy.key\n    sortOrder = sorting ? sortBy.order : SortOrder.ASC\n  }\n\n  const cellKls = [\n    ns.e('header-cell'),\n    tryCall(headerClass, props, ''),\n    column.align === Alignment.CENTER && ns.is('align-center'),\n    column.align === Alignment.RIGHT && ns.is('align-right'),\n    sortable && ns.is('sortable'),\n  ]\n\n  const cellWrapperProps = {\n    ...tryCall(headerCellProps, props),\n    onClick: column.sortable ? onColumnSorted : undefined,\n    class: cellKls,\n    style: cellStyle,\n    ['data-key']: column.key,\n  }\n\n  // For now we don't deliver resizable column feature since it has some UX issue.\n  return (\n    <div {...cellWrapperProps} role=\"columnheader\">\n      {Cell}\n\n      {sortable && (\n        <SortIcon\n          class={[ns.e('sort-icon'), sorting && ns.is('sorting')]}\n          sortOrder={sortOrder}\n        />\n      )}\n    </div>\n  )\n}\n\nexport default HeaderCellRenderer\nexport type HeaderCellSlotProps = HeaderCellRendererProps & { class: string }\n"],"names":["enforceUnit","slots","column","ns","style","onColumnSorted","_createVNode","cellStyle","headerCellRenderer","headerClass","sortable","cellProps","class","Cell","columnCellRenderer","sortBy","sortState","headerCellProps","sorting","sortOrder","SortOrder","cellKls","tryCall","onClick"],"mappings":";;;;;;;;AAKA,MAAA,kBAAwB,GAAEA,CAAAA,KAAAA,EAAAA;AAc1B,EAAA,KAAsE;AAElEC,CAAAA,KAAAA;AAAM,EACL,MAAA;IACG,MAAA;IAAEC,EAAM;IAAEC,KAAE;IAAEC,cAAK;AAAEC,GAAAA,GAAAA,KAAAA,CAAAA;AAAe,EAAA,MAAS,SAAA,GAAA,WAAA,CAAA,KAAA,CAAA,CAAA;AAEnD,EAAA,IAAA,MAAe,CAAA,eAAc,oBAAO,EAAA;AAEpC,IAAA,OAAUC,WAAgB,CAAA,KAAA,EAAA;AACxB,MAAA,OAAA,EAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,CAAA;AAAA,MAAA,OAAA,EACcH,SAAuB;OAAyBI,IAAAA,CAAAA,CAAAA;AAAS,GAAA;AAEzE,EAAA,MAAA;IAEM,kBAAA;IAAEC,WAAkB;IAAEC,QAAW;AAAEC,GAAAA,GAAAA,MAAAA,CAAAA;AAAS,EAAA,MAAU,SAAA,GAAA;;AAE5D,IAAA,KAAA,EAAA,EAAA,CAAA,CAAA,CAAA,kBAAA,CAAA;AACF,GAAA,CAAA;AACA,EAAA,MAAA,kBAAA,GAAA,eAAA,CAAA,kBAAA,CAAA,CAAA;;AAEE,EAAA,MAAMC;AACJ,IAAA,MAAQ;AACRC,IAAAA,SAAS;IACV,eAAA;AAED,GAAA,GAAA,KAAwB,CAAA;EAGxB,IAAMC,OAAOC,EAAAA,SAAAA,CAAAA;;AAMb,IAAA,MAAA,KAAA,GAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA;AACF,IAAA,OAAA,GAAA,OAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AACA,IAAA,SAAA,GAAA,OAAA,GAAA,KAAA,GAAA,SAAA,CAAA,GAAA,CAAA;GACQ,MAAA;IAAEC,OAAM,GAAA,MAAA,CAAA,GAAA,KAAA,MAAA,CAAA,GAAA,CAAA;IAAEC,SAAS,GAAA,OAAA,GAAA,MAAA,CAAA,KAAA,GAAA,SAAA,CAAA,GAAA,CAAA;AAAEC,GAAAA;AAAgB,EAAA,MAAS,OAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,aAAA,CAAA,EAAA,OAAA,CAAA,WAAA,EAAA,KAAA,EAAA,EAAA,CAAA,EAAA,MAAA,CAAA,KAAA,KAAA,SAAA,CAAA,MAAA,IAAA,EAAA,CAAA,EAAA,CAAA,cAAA,CAAA,EAAA,MAAA,CAAA,KAAA,KAAA,SAAA,CAAA,KAAA,IAAA,EAAA,CAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,CAAA;EAEpD,MAAIC,gBAAsC,GAAA;AAC1C,IAAA,WAAa,eAAE,EAAA,KAAA,CAAA;AACb,IAAA,eAAcF,CAAAA,QAAUd,GAAM,cAAM,GAAA,KAAA,CAAA;AACpCgB,IAAAA,KAAAA,EAAO,OAAU;AACjBC,IAAAA,KAAAA,EAAAA,SAAmB;AACrB,IAAO,CAAA,UAAA,GAAA,MAAA,CAAA,GAAA;AACLD,GAAAA,CAAAA;SACSZ,iBAAaS,EAAAA,UAAY,CAAGK,gBAAa,EAAA;AACpD,IAAA,MAAA,EAAA,cAAA;GAEMC,CAAAA,EAAAA,CAAAA,IAAAA,EAAAA,QACF,IAAgBf,WAAA,CAAC,QACnBgB,EAAQb;AAMV,IAAA,0BAAyB,CAAA,EAAA,OAAA,IAAA,EAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA;AACvB,IAAA,WAAWQ,EAAe,SAAA;AAC1BM,GAAAA,EAAAA,IAAAA,CAAAA,CAAO,EAAErB;AACTU;;;;"}