Skip to content

Стили и представление

Table не раскрывает классы RevoGrid, TanStack или другой grid-библиотеки. EndgeCSS работает с renderer-neutral surfaces.

Публичные части

  • ::part(grid) — вся таблица;
  • ::part(header) — область заголовков;
  • ::part(header-cell) и ::part(header-content) — колонка заголовка;
  • ::part(body) — viewport строк;
  • ::part(row) — строка;
  • ::part(cell) и ::part(cell-content) — ячейка;
  • ::part(group-row) — зарезервированная поверхность группировки.
vue
<template>
  <Table id="orders" :rows="rows">
    <Column key="number" title="Номер" />
    <Column key="status" title="Статус" />
  </Table>
</template>

<style scoped lang="endgecss">
#orders::part(header-cell) {
  background-color: surface-accent;
  font-weight: 600;
}
</style>

Используйте semantic tokens темы, а не renderer-specific selectors.

Стили selection

Все обязательные адаптеры публикуют одинаковые CSS custom properties:

ПеременнаяЧто меняетЗначение по умолчанию
--endge-table-selectionЗаливка выбранной строки в singleсиняя полупрозрачная заливка
--endge-table-multiple-selectionЗаливка строк в multiplefallback на --endge-table-selection
--endge-table-selection-markerМаркер выбранной строки слева#3b82f6
--endge-table-cell-selectionЗаливка выбранной ячейкиrgba(59, 130, 246, 0.2)
--endge-table-cell-selection-colorЦвет текста выбранной ячейкиinherit
--endge-table-cell-selection-outlineВнутренний outline ячейки#3b82f6

Переменные можно назначить конкретному id или стабильному authored-классу. Они наследуются внутренними surfaces, поэтому не зависят от RevoGrid, TanStack или AODB DataTable:

vue
<Table
  id="orders"
  class="operations-table"
  :rows="rows"
  selection-mode="multiple"
  selection-trigger="both"
  cell-selection-mode="single"
>
  <Column key="number" title="Номер" />
  <Column key="status" title="Статус" />
</Table>

<style scoped lang="endgecss">
#orders {
  --endge-table-selection: rgba(14, 165, 233, 0.16);
  --endge-table-multiple-selection: rgba(168, 85, 247, 0.2);
  --endge-table-selection-marker: #7c3aed;
}

.operations-table {
  --endge-table-cell-selection: rgba(245, 158, 11, 0.24);
  --endge-table-cell-selection-color: #78350f;
  --endge-table-cell-selection-outline: #f59e0b;
}
</style>

Для более точных правил доступны semantic states на ::part(cell):

StateПоверхность
selectedЛюбая выбранная row/cell surface
row-selectedЯчейки выбранной строки
multi-selectedЯчейки строк в selection-mode="multiple"
cell-selectedТолько конкретная выбранная ячейка

Если строка и её ячейка выбраны одновременно, cell surface содержит оба состояния: row-selected и cell-selected. Сначала применяется заливка строки, затем заливка и outline конкретной ячейки.

endgecss
/* Отдельное оформление нескольких выбранных строк. */
#orders:state(multi-selected)::part(cell) {
  --endge-table-multiple-selection: rgba(236, 72, 153, 0.18);
  font-weight: 600;
}

/* Оформление только выбранной ячейки. */
#orders:state(cell-selected)::part(cell) {
  --endge-table-cell-selection: #fef3c7;
  --endge-table-cell-selection-color: #78350f;
  --endge-table-cell-selection-outline: #f59e0b;
}

Не используйте .rgRow, классы shadcn или TanStack: они являются деталями адаптера и не входят в публичный контракт.

Metadata колонки

Статическая Column.metadata компилируется в ProgramArtifact.metadata.nodes. Внутри ячейки она доступна как columnMeta:

vue
<Column
  key="priority"
  :metadata="{
    'endge.table.cell-presentation': {
      version: 1,
      branches: [
        {
          when: { source: 'value', operator: 'gte', value: 8 },
          then: { backgroundTone: 'warning', fontWeight: 'bold' },
        },
      ],
    },
  }"
>
  <Cell>
    <PriorityValue
      :value="value"
      :rules="columnMeta['endge.table.cell-presentation']"
    />
  </Cell>
</Column>

Metadata не становится prop вложенного компонента автоматически: namespace выбирается явно.

Computation

DataView должен возвращать данные, а не CSS и hex-цвета. Computation получает row, value, columnKey и правила, затем возвращает semantic presentation: backgroundTone, textTone, fontWeight или fontStyle. Visual-компонент сопоставляет эти значения с текущей темой.

Общий table-cell-conditional-presentation не вызывается автоматически для каждой ячейки. Его подключает конкретный cell component через required port. Полное описание: условное представление таблиц.