@apia/table2-controller 4.0.44 → 4.0.45

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/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import { HTMLAttributes, FC, ReactNode, ThHTMLAttributes, FocusEvent } from 'react';
3
- import { TSortType, EventEmitter, TLoadStructure } from '@apia/util';
3
+ import { EventEmitter, TLoadStructure } from '@apia/util';
4
4
 
5
5
  type RowsGroupBaseState = ElementBaseState & {
6
6
  rows: Row[];
@@ -85,7 +85,6 @@ declare class TableBody extends RowsGroup<TableBodyState> {
85
85
  type ColumnState<T extends ColumnState<any> = ColumnState<any>> = CellState<T> & {
86
86
  asAdditional?: boolean;
87
87
  sortable?: boolean;
88
- sortState?: TSortType;
89
88
  };
90
89
  declare class Column extends Cell<ColumnState> {
91
90
  asAdditional(): boolean;
@@ -94,23 +93,21 @@ declare class Column extends Cell<ColumnState> {
94
93
  * A visible column is that which is not additional nor hidden.
95
94
  */
96
95
  isVisible(): boolean;
97
- sort(order?: ColumnState['sortState']): void;
98
96
  }
99
97
 
100
98
  declare class Filters extends Row {
101
- filters: Map<string, Filter<any>>;
102
- private buildFilterFromDefinition;
99
+ filters: Map<string, Filter>;
103
100
  buildFilters(filters: Omit<FilterState, 'colName'>[]): boolean;
104
- getAdditionalFilters(): Filter<any>[];
101
+ getAdditionalFilters(): Filter<string>[];
105
102
  getCells(): Filter<string>[];
106
103
  getContainer(): TableHead;
107
- getFilter(name: string): Filter<any> | undefined;
108
- getFilters(): Filter<any>[];
109
- getFiltersInTable(): Filter<any>[];
104
+ getFilter(name: string): Filter<string> | undefined;
105
+ getFilters(): Filter<string>[];
106
+ getFiltersInTable(): Filter<string>[];
110
107
  }
111
108
 
112
109
  type FilterRenderer = FC<{
113
- cell: Filter<any>;
110
+ cell: Filter;
114
111
  }>;
115
112
  type FilterState<ValueType = string, T extends FilterState<any> = FilterState<ValueType, any>> = CellState<T> & {
116
113
  asAdditional?: boolean;
@@ -197,7 +194,7 @@ type TableEvents = {
197
194
  cell: Cell;
198
195
  doFocus: boolean;
199
196
  };
200
- columnSort: Column;
197
+ columnClick: Column;
201
198
  editionMode: boolean;
202
199
  filterChange: Filter<any>;
203
200
  filterPressEnter: Filter<any>;
@@ -220,8 +217,8 @@ declare class TableController extends EventEmitter<TableEvents> {
220
217
  fromGenericTable(table: TLoadStructure): void;
221
218
  getColumn(name: string): Column | undefined;
222
219
  getColumns(): Column[];
223
- getFilter(name: string): Filter<any> | undefined;
224
- getFilters(): Filter<any>[];
220
+ getFilter(name: string): Filter<string> | undefined;
221
+ getFilters(): Filter<string>[];
225
222
  getRowById(id: string | number): Row | undefined;
226
223
  hasAdditionalContent(): true | ((row: Row) => Promise<false | ReactNode>) | undefined;
227
224
  onRowExpand(row: Row): string | Promise<ReactNode> | undefined;
@@ -240,7 +237,6 @@ declare class TableController extends EventEmitter<TableEvents> {
240
237
  getSelectedRows(): Row[];
241
238
  isSelected(row: Row): boolean;
242
239
  toggleColumnVisibility(colName: string, isVisible?: boolean): void;
243
- toggleFiltersRowVisibility(): void;
244
240
  /**
245
241
  * Toggles the selection state of a given row.
246
242
  *
@@ -304,7 +300,6 @@ declare class TableController extends EventEmitter<TableEvents> {
304
300
  */
305
301
  setState(cb: (s: TableState) => TableState): this;
306
302
  setState<K extends keyof TableState>(prop: K, value: TableState[K]): this;
307
- sortColumn(col: Column, sortState?: TSortType): void;
308
303
  /**
309
304
  * PLUGINS
310
305
  */
@@ -427,8 +422,5 @@ declare class WaiAriaPlugin implements TablePlugin {
427
422
  };
428
423
  }
429
424
 
430
- declare class DateFilter extends Filter<number | null> {
431
- }
432
-
433
- export { AdditionalCell, AdditionalRow, Cell, type CellState, Column, type ColumnState, Columns, DateFilter, Element, type ElementBaseState, Filter, type FilterEvents, type FilterRenderer, type FilterState, Filters, FocusControllerPlugin, Row, type RowProperties, type RowState, RowsGroup, type RowsGroupBaseState, type TBuildBody, type TBuildHead, type TBuildRow, type TBuildTable, TableBody, type TableBodyState, TableController, type TableEvents, TableHead, type TableHeadState, type TablePlugin, type TableState, WaiAriaPlugin, defaultPlugins };
425
+ export { AdditionalCell, AdditionalRow, Cell, type CellState, Column, type ColumnState, Columns, Element, type ElementBaseState, Filter, type FilterEvents, type FilterRenderer, type FilterState, Filters, FocusControllerPlugin, Row, type RowProperties, type RowState, RowsGroup, type RowsGroupBaseState, type TBuildBody, type TBuildHead, type TBuildRow, type TBuildTable, TableBody, type TableBodyState, TableController, type TableEvents, TableHead, type TableHeadState, type TablePlugin, type TableState, WaiAriaPlugin, defaultPlugins };
434
426
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { makeObservable, action, observable, computed } from 'mobx';
1
+ import { makeObservable, action, observable, computed, reaction } from 'mobx';
2
2
  import { arrayOrArray, EventEmitter, useMount, scrollParentIntoElement, disableChildrenFocus, getFocusSelector } from '@apia/util';
3
3
  import { useRef } from 'react';
4
4
 
@@ -266,7 +266,6 @@ class AdditionalCell extends Cell {
266
266
  expanded: false,
267
267
  colName: "__additional",
268
268
  domProperties: {
269
- className: "additionalColumn",
270
269
  style: {
271
270
  width: "50px"
272
271
  }
@@ -408,10 +407,6 @@ class Column extends Cell {
408
407
  isVisible() {
409
408
  return !this.asAdditional() && !this.isHidden();
410
409
  }
411
- sort(order) {
412
- order = order ?? (this.getState("sortState") === "ASC" ? "DESC" : "ASC");
413
- this.setState("sortState", order);
414
- }
415
410
  }
416
411
 
417
412
  var __defProp$4 = Object.defineProperty;
@@ -428,15 +423,15 @@ class Columns extends Row {
428
423
  buildColumnsRow(columns) {
429
424
  let i = 0;
430
425
  for (const column of columns) {
431
- if (!this.columns.has(column.colName)) {
432
- this.columns.set(column.colName, new Column(column));
433
- } else {
434
- this.columns.get(column.colName)?.updateState(column);
435
- }
436
- const currentColumn = this.columns.get(column.colName);
437
- if (currentColumn.isVisible()) {
438
- this.state.cells[i++] = currentColumn;
439
- this.attachCell(currentColumn);
426
+ const headerCell = new Column(column);
427
+ this.columns.set(column.colName, headerCell);
428
+ if (headerCell.isVisible()) {
429
+ const currentCell = this.cells[i++];
430
+ if (!currentCell) {
431
+ this.addCell(headerCell);
432
+ } else {
433
+ currentCell.updateState(column);
434
+ }
440
435
  }
441
436
  }
442
437
  }
@@ -460,6 +455,12 @@ class Filter extends Cell {
460
455
  }
461
456
  constructor(state) {
462
457
  super(state);
458
+ reaction(
459
+ () => this.state.value,
460
+ () => {
461
+ console.log(this.state.value);
462
+ }
463
+ );
463
464
  }
464
465
  clear() {
465
466
  this.setValue("");
@@ -488,30 +489,6 @@ class Filter extends Cell {
488
489
  }
489
490
  }
490
491
 
491
- class NullFilter extends Filter {
492
- constructor(colName) {
493
- super({ colName });
494
- }
495
- clear() {
496
- }
497
- fire(_) {
498
- }
499
- getValue() {
500
- return void 0;
501
- }
502
- hasValue() {
503
- return false;
504
- }
505
- setValue() {
506
- }
507
- validate() {
508
- return true;
509
- }
510
- }
511
-
512
- class DateFilter extends Filter {
513
- }
514
-
515
492
  var __defProp$3 = Object.defineProperty;
516
493
  var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
517
494
  var __publicField$3 = (obj, key, value) => {
@@ -523,24 +500,12 @@ class Filters extends Row {
523
500
  super(...arguments);
524
501
  __publicField$3(this, "filters", /* @__PURE__ */ new Map());
525
502
  }
526
- buildFilterFromDefinition(def) {
527
- switch (def.type) {
528
- case "DATE":
529
- return new DateFilter(def);
530
- default:
531
- return new Filter(def);
532
- }
533
- }
534
503
  buildFilters(filters) {
504
+ this.filters.clear();
535
505
  let hasFiltersInRow = false;
536
506
  const columns = arrayOrArray(
537
507
  this.getContainer().getHeaderRow()?.getShownColumns()
538
508
  );
539
- for (const stored of this.filters.values()) {
540
- if (!filters.find((c) => c.name === stored.getState("name"))) {
541
- this.filters.delete(stored.getState("name"));
542
- }
543
- }
544
509
  for (let i = 0; i < columns.length; i++) {
545
510
  const column = columns[i];
546
511
  const filter = filters.find(
@@ -548,7 +513,7 @@ class Filters extends Row {
548
513
  );
549
514
  if (filter) {
550
515
  const currentFilterCell = this.getCellByIndex(i);
551
- const filterCell = currentFilterCell ?? this.buildFilterFromDefinition({
516
+ const filterCell = new Filter({
552
517
  ...filter,
553
518
  colName: filter.columnName
554
519
  });
@@ -563,18 +528,17 @@ class Filters extends Row {
563
528
  filter.added = true;
564
529
  } else {
565
530
  if (!this.getCellByIndex(i)) {
566
- this.addCell(new NullFilter(column.getColumnName()));
531
+ this.addCell(new Cell({ colName: column.getColumnName() }));
567
532
  }
568
533
  }
569
- }
570
- for (const filter of filters) {
571
- if (!filter.added) {
572
- const filterCell = this.filters.get(filter.name) ?? this.buildFilterFromDefinition({
573
- ...filter,
574
- colName: filter.columnName
575
- });
576
- filterCell.setTable(this.table);
577
- this.filters.set(filter.name, filterCell);
534
+ for (const filter2 of filters) {
535
+ if (!filter2.added) {
536
+ const filterCell = new Filter({
537
+ ...filter2,
538
+ colName: filter2.columnName
539
+ });
540
+ this.filters.set(filter2.name, filterCell);
541
+ }
578
542
  }
579
543
  }
580
544
  return hasFiltersInRow;
@@ -622,6 +586,7 @@ class TableHead extends RowsGroup {
622
586
  return this.rows[1] instanceof Filters ? this.rows[1] : void 0;
623
587
  }
624
588
  build(data) {
589
+ this.state.rows = [];
625
590
  if (data.columns.length) {
626
591
  const currentHeaderRow = this.rows[0];
627
592
  if (currentHeaderRow && !(currentHeaderRow instanceof Columns)) {
@@ -704,6 +669,7 @@ class TableController extends EventEmitter {
704
669
  const columns = arrayOrArray(table.columns);
705
670
  this.build({
706
671
  columns: columns.map((c) => {
672
+ console.log({ c });
707
673
  return {
708
674
  colName: c.name,
709
675
  asAdditional: c.showAsAdditional,
@@ -711,11 +677,11 @@ class TableController extends EventEmitter {
711
677
  isHidden: c.isHidden,
712
678
  properties: c,
713
679
  content: c.title,
714
- className: c.className,
715
- sortState: c.sortType
680
+ className: c.className
716
681
  };
717
682
  }),
718
683
  filters: arrayOrArray(table.filters).map((f) => {
684
+ console.log({ f });
719
685
  return {
720
686
  name: f.name,
721
687
  title: f.title,
@@ -730,6 +696,7 @@ class TableController extends EventEmitter {
730
696
  };
731
697
  }),
732
698
  rows: arrayOrArray(table.rows).map((row) => {
699
+ console.log({ row });
733
700
  const returnValue = {
734
701
  id: row.id,
735
702
  cells: arrayOrArray(row.cells).map((cell) => {
@@ -806,9 +773,6 @@ class TableController extends EventEmitter {
806
773
  this.head.rows[0]?.cells?.find((c) => c.getState("colName") === colName)?.setState("isHidden", !isVisible);
807
774
  }
808
775
  }
809
- toggleFiltersRowVisibility() {
810
- this.head.getFiltersRow()?.setState("isHidden", !this.head.getFiltersRow()?.getState("isHidden"));
811
- }
812
776
  /**
813
777
  * Toggles the selection state of a given row.
814
778
  *
@@ -900,15 +864,6 @@ class TableController extends EventEmitter {
900
864
  }
901
865
  return this;
902
866
  }
903
- sortColumn(col, sortState) {
904
- this.getColumns().forEach((c) => {
905
- if (c.getColumnName() !== col.getColumnName()) {
906
- c.sort("NONE");
907
- }
908
- });
909
- col.sort(sortState);
910
- this.emit("columnSort", col);
911
- }
912
867
  /**
913
868
  * PLUGINS
914
869
  */
@@ -1297,5 +1252,5 @@ class WaiAriaPlugin {
1297
1252
  }
1298
1253
  }
1299
1254
 
1300
- export { AdditionalCell, AdditionalRow, Cell, Column, Columns, DateFilter, Element, Filter, Filters, FocusControllerPlugin, Row, RowsGroup, TableBody, TableController, TableHead, WaiAriaPlugin, defaultPlugins };
1255
+ export { AdditionalCell, AdditionalRow, Cell, Column, Columns, Element, Filter, Filters, FocusControllerPlugin, Row, RowsGroup, TableBody, TableController, TableHead, WaiAriaPlugin, defaultPlugins };
1301
1256
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/data/primitive/Element.ts","../src/data/primitive/Cell.ts","../src/data/primitive/Row.ts","../src/data/primitive/AdditionalRow.ts","../src/data/primitive/AdditionalRowContent.ts","../src/data/primitive/AdditionalCell.ts","../src/data/primitive/RowsGroup.ts","../src/data/body/TableBody.ts","../src/data/head/Column.ts","../src/data/head/Columns.ts","../src/data/filter/Filter.ts","../src/data/head/NullFilter.ts","../src/data/filter/DateFilter.ts","../src/data/head/Filters.ts","../src/data/head/TableHead.ts","../src/data/plugins/TablePlugin.tsx","../src/data/TableController.ts","../src/data/plugins/FocusControllerPlugin/useFocusByClick.ts","../src/data/plugins/FocusControllerPlugin/useFocusByKey.ts","../src/data/plugins/FocusControllerPlugin/index.tsx","../src/data/plugins/WaiAriaPlugin.ts"],"sourcesContent":["import { action, makeObservable, observable } from 'mobx';\r\nimport type { TableController } from '../TableController';\r\n\r\nconst voidTable = {} as TableController;\r\n\r\nexport type ElementBaseState = {\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport abstract class Element<T extends ElementBaseState> {\r\n protected table: TableController = voidTable;\r\n\r\n constructor(protected state: T) {\r\n makeObservable<Element<T>, 'state'>(this, {\r\n state: observable,\r\n setState: action,\r\n });\r\n }\r\n\r\n public getTable() {\r\n return this.table;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n this.table = table || voidTable;\r\n return this;\r\n }\r\n\r\n public getState<K extends keyof T>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n public setState(cb: (s: T) => T): this;\r\n public setState<K extends keyof T>(prop: K, value: T[K]): this;\r\n public setState<K extends keyof T>(prop: K | ((s: T) => T), value?: T[K]) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n}\r\n","import type { ThHTMLAttributes, ReactNode, FC } from 'react';\r\nimport { Element } from './Element';\r\nimport type { Row } from './Row';\r\n\r\nexport type CellState<T extends CellState<any> = CellState<any>> = {\r\n colName: string;\r\n\r\n content?: ReactNode;\r\n className?: string;\r\n isFocused?: boolean;\r\n isHidden?: boolean;\r\n tag?: 'td' | 'th;';\r\n\r\n Renderer?: FC<{ cell: Cell<T> }>;\r\n domProperties?: ThHTMLAttributes<HTMLTableCellElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class Cell<\r\n State extends CellState<any> = CellState<any>,\r\n> extends Element<State> {\r\n protected parentRow: Row | null = null;\r\n\r\n getColumnName() {\r\n return this.getState('colName');\r\n }\r\n\r\n getIndex() {\r\n return this.getRow()!.getCellIndex(this);\r\n }\r\n\r\n getRow() {\r\n return this.parentRow;\r\n }\r\n\r\n setRow(row: Row | null) {\r\n this.parentRow = row;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param doFocus - If true, the cell will be focused after being set as the focused cell.\r\n * If false, the cell will contain the tabIndex = 0 but will not be focused.\r\n */\r\n focus(doFocus: boolean = true) {\r\n this.table.setFocusedCell(this, doFocus);\r\n }\r\n\r\n updateState(state: Partial<State>) {\r\n this.state = { ...this.state, ...state };\r\n }\r\n}\r\n","import { Element } from './Element';\r\nimport { Cell, type CellState } from './Cell';\r\nimport { TableController } from '../TableController';\r\nimport { computed, makeObservable } from 'mobx';\r\nimport type { RowsGroup, RowsGroupBaseState } from './RowsGroup';\r\nimport type { HTMLAttributes } from 'react';\r\nimport { AdditionalCell } from './AdditionalCell';\r\n\r\nexport type RowProperties = {\r\n id: string;\r\n cells: Cell[];\r\n\r\n isExpandible?: boolean;\r\n isExpanded?: boolean;\r\n isHidden?: boolean;\r\n isSelectable?: boolean;\r\n isSelected?: boolean;\r\n\r\n domProperties?: HTMLAttributes<HTMLTableRowElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport type TBuildRow = Omit<RowProperties, 'cells'> & {\r\n cells: (Omit<CellState, 'colName'> & { colName?: string })[];\r\n};\r\n\r\nexport type RowState = Omit<RowProperties, 'isSelected'>;\r\n\r\nexport class Row extends Element<RowState> {\r\n protected container: null | RowsGroup<RowsGroupBaseState> =\r\n {} as RowsGroup<RowsGroupBaseState>;\r\n\r\n hiddenCells: Map<string, Cell> = new Map();\r\n\r\n addCell(cell: Cell) {\r\n this.state.cells.push(cell);\r\n this.attachCell(cell);\r\n return this;\r\n }\r\n\r\n addCellAfter(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor) + 1;\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n addCellBefore(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor);\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n build(data: TBuildRow) {\r\n this.hiddenCells.clear();\r\n\r\n for (let i = 0; i < data.cells.length; i++) {\r\n const cell = data.cells[i];\r\n\r\n const col = cell.colName\r\n ? this.table.head.getHeaderRow()!.getColumn(cell.colName)!\r\n : this.table.head.getHeaderRow()!.getColumns()[i]!;\r\n\r\n const cellInstance = new Cell({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n\r\n if (col?.isVisible()) {\r\n const currentCell = this.state.cells[i - this.hiddenCells.size];\r\n\r\n if (!currentCell) {\r\n this.addCell(cellInstance);\r\n } else {\r\n currentCell.updateState({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n }\r\n } else {\r\n this.hiddenCells.set(col?.getColumnName(), cellInstance);\r\n }\r\n }\r\n this.cells.splice(data.cells.length - this.hiddenCells.size);\r\n }\r\n\r\n constructor(\r\n id: string,\r\n protected properties?: Omit<RowProperties, 'id'>,\r\n ) {\r\n const { cells, isSelected, ...state } = properties || {};\r\n super({ id, ...state, cells: cells || [] });\r\n makeObservable(this, {\r\n isSelected: computed,\r\n });\r\n }\r\n\r\n get cells(): Cell[] {\r\n const hasAdditionalColumn: boolean =\r\n !!this.table.getState('onRowExpand') ||\r\n (this.table.head.getFiltersRow()?.getFiltersInTable()?.length || 0) > 0;\r\n\r\n let additionalCell: Cell | null = null;\r\n if (hasAdditionalColumn) {\r\n additionalCell = new AdditionalCell();\r\n additionalCell.setRow(this);\r\n additionalCell.setTable(this.table);\r\n }\r\n\r\n return [additionalCell, ...this.state.cells].filter((f): f is Cell =>\r\n Boolean(f),\r\n );\r\n }\r\n\r\n get isSelected() {\r\n return this.table.isSelected(this);\r\n }\r\n\r\n getCellByColumnName(colName: string) {\r\n return this.cells.find((c) => c.getState('colName') === colName);\r\n }\r\n\r\n getCellByIndex(index: number) {\r\n return this.cells[index];\r\n }\r\n\r\n getCellIndex(cell: Cell) {\r\n return this.cells.indexOf(cell);\r\n }\r\n\r\n getContainer() {\r\n return this.container;\r\n }\r\n\r\n getFollowingRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index + 1] || null;\r\n }\r\n\r\n getHiddenCell(colName: string) {\r\n return this.hiddenCells.get(colName);\r\n }\r\n\r\n getIndex() {\r\n return this.getContainer()!.getRowIndex(this);\r\n }\r\n\r\n getPreviousRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index - 1] || null;\r\n }\r\n\r\n insertAfter(row: Row) {\r\n this.getContainer()?.insertAfter(this, row);\r\n }\r\n\r\n insertBefore(row: Row) {\r\n this.getContainer()?.insertBefore(this, row);\r\n }\r\n\r\n remove() {\r\n this.getContainer()?.removeRow(this);\r\n }\r\n\r\n replaceCellOnIndex(index: number, newCell: Cell) {\r\n const current = this.cells[index];\r\n if (!current) {\r\n throw new Error('IndexOutOfBounds - The provided index is out of bounds');\r\n }\r\n\r\n this.cells[index] = newCell;\r\n this.attachCell(newCell);\r\n\r\n this.detachCell(current);\r\n }\r\n\r\n public scrollIntoView() {\r\n this.table.scrollRowIntoView(this);\r\n }\r\n\r\n public setContainer(container: null | RowsGroup<RowsGroupBaseState>) {\r\n this.container = container;\r\n return this;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n super.setTable(table);\r\n\r\n this.state.cells.forEach((c) => c.setTable(table));\r\n\r\n if (table && this.properties?.isSelected) {\r\n table.toggleRowSelection(this, true);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public swap(withRow: Row) {\r\n this.getContainer()?.swapRows(this, withRow);\r\n }\r\n\r\n public toggleSelection(forceState?: boolean) {\r\n this.table.toggleRowSelection(this, forceState);\r\n }\r\n\r\n protected attachCell(cell: Cell) {\r\n cell.setTable(this.table);\r\n cell.setRow(this);\r\n }\r\n\r\n protected detachCell(cell: Cell) {\r\n cell.setTable(null);\r\n cell.setRow(null);\r\n }\r\n}\r\n","import { Cell, CellState } from './Cell';\r\nimport { Row } from './Row';\r\n\r\nexport class AdditionalRow extends Row {\r\n constructor(id: string) {\r\n super(id);\r\n this.setState('isSelectable', false);\r\n }\r\n\r\n get cells(): Cell<CellState<any>>[] {\r\n return this.state.cells;\r\n }\r\n}\r\n","import { ReactNode } from 'react';\r\nimport { Cell, CellState } from './Cell';\r\n\r\nexport class AdditionalRowContent extends Cell<\r\n CellState & { expanded: boolean }\r\n> {\r\n constructor(content: ReactNode) {\r\n super({\r\n expanded: false,\r\n colName: '__additional',\r\n content,\r\n });\r\n }\r\n\r\n public getState<K extends keyof CellState | 'expanded'>(\r\n prop: K,\r\n ): (CellState & { expanded: boolean })[K] {\r\n if (prop === 'domProperties') {\r\n return {\r\n colSpan: this.table.head.getHeaderRow()?.getShownColumns().length || 0,\r\n } as any;\r\n }\r\n\r\n return super.getState(prop);\r\n }\r\n}\r\n","import { AdditionalRow } from './AdditionalRow';\r\nimport { AdditionalRowContent } from './AdditionalRowContent';\r\nimport { Cell, CellState } from './Cell';\r\n\r\nexport class AdditionalCell extends Cell<CellState & { expanded: boolean }> {\r\n constructor() {\r\n super({\r\n expanded: false,\r\n colName: '__additional',\r\n domProperties: {\r\n className: 'additionalColumn',\r\n style: {\r\n width: '50px',\r\n },\r\n },\r\n });\r\n }\r\n\r\n async onToggle() {\r\n const currentIndex = this.getRow()!.getIndex()!;\r\n if (\r\n !(\r\n this.getTable().body.getRowByIndex(currentIndex + 1) instanceof\r\n AdditionalRow\r\n )\r\n ) {\r\n const res = await this.table.onRowExpand(this.getRow()!);\r\n\r\n if (res !== false) {\r\n const newRow = new AdditionalRow(\r\n `${this.getRow()?.getState('id')}__additional`,\r\n );\r\n\r\n this.getTable().body.insertAfter(this.getRow()!, newRow);\r\n\r\n newRow.addCell(new AdditionalRowContent(res));\r\n\r\n this.state.expanded = true;\r\n }\r\n } else {\r\n this.getTable()\r\n .body.getRowByIndex(currentIndex + 1)\r\n .remove();\r\n this.state.expanded = false;\r\n }\r\n }\r\n}\r\n","import { action, computed, makeObservable } from 'mobx';\r\nimport type { Row } from './Row';\r\nimport type { TableController } from '../TableController';\r\nimport { Element, type ElementBaseState } from './Element';\r\nimport type { HTMLAttributes } from 'react';\r\n\r\nexport type RowsGroupBaseState = ElementBaseState & {\r\n rows: Row[];\r\n domProperties?: HTMLAttributes<HTMLTableSectionElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class RowsGroup<U extends RowsGroupBaseState> extends Element<\r\n U & RowsGroupBaseState\r\n> {\r\n constructor(\r\n public table: TableController,\r\n state: U,\r\n ) {\r\n super({ ...state, rows: [] });\r\n makeObservable(this, { swapRows: action, rows: computed });\r\n }\r\n\r\n get rows() {\r\n return this.state.rows;\r\n }\r\n\r\n addRow(row: Row) {\r\n this.state.rows.push(row);\r\n row.setTable(this.table);\r\n row.setContainer(this);\r\n\r\n this.runAddRowPlugin(row);\r\n\r\n return this;\r\n }\r\n\r\n addRows(rows: Row[]) {\r\n rows.forEach(this.addRow.bind(this));\r\n return this;\r\n }\r\n\r\n clear() {\r\n this.state.rows.forEach((row) => {\r\n row.setContainer(null);\r\n row.setTable(null);\r\n });\r\n return this.rows.splice(0, this.rows.length);\r\n }\r\n\r\n getRowById(id: string | number) {\r\n return this.state.rows.find((c) => c.getState('id') === id);\r\n }\r\n\r\n getRowByIndex(index: number) {\r\n return this.state.rows[index];\r\n }\r\n\r\n getRowIndex(row: Row) {\r\n return this.state.rows.indexOf(row);\r\n }\r\n\r\n insertAfter(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index + 1, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n insertBefore(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getContainer() === this) {\r\n row.setContainer(null);\r\n this.state.rows = this.state.rows.filter((r) => r !== row);\r\n this.table.removeRow(row);\r\n }\r\n }\r\n\r\n swapRows(a: Row, b: Row) {\r\n if (a?.getContainer() === this && b?.getContainer() === this) {\r\n const aIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === a.getState?.('id'),\r\n );\r\n const bIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === b.getState?.('id'),\r\n );\r\n if (aIndex !== -1 && bIndex !== -1) {\r\n this.state.rows[aIndex] = b;\r\n this.state.rows[bIndex] = a;\r\n }\r\n }\r\n }\r\n\r\n protected runAddRowPlugin(newRow: Row) {\r\n const plugins = this.getTable().getApplicablePlugins('onAddRow');\r\n plugins.forEach((c) => c(this, newRow));\r\n }\r\n}\r\n","import type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport { Row, type TBuildRow } from '../primitive/Row';\r\nimport type { TableController } from '../TableController';\r\nimport { AdditionalRow } from '../primitive/AdditionalRow';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableBodyState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildBody = {\r\n rows: TBuildRow[];\r\n};\r\n\r\nexport class TableBody extends RowsGroup<TableBodyState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n build(data: TBuildBody) {\r\n let i = 0;\r\n for (const row of data.rows) {\r\n let currentRow: Row | undefined = this.rows[i++];\r\n if (currentRow instanceof AdditionalRow) {\r\n currentRow.remove();\r\n currentRow = undefined;\r\n }\r\n const bodyRow = currentRow ?? new Row(row.id);\r\n\r\n if (!currentRow) {\r\n this.addRow(bodyRow);\r\n }\r\n bodyRow.build(row);\r\n }\r\n this.rows.splice(data.rows.length);\r\n }\r\n}\r\n","import { TSortType } from '@apia/util';\r\nimport { Cell, CellState } from '../primitive/Cell';\r\n\r\nexport type ColumnState<T extends ColumnState<any> = ColumnState<any>> =\r\n CellState<T> & {\r\n asAdditional?: boolean;\r\n sortable?: boolean;\r\n sortState?: TSortType;\r\n };\r\n\r\nexport class Column extends Cell<ColumnState> {\r\n public asAdditional() {\r\n return !!this.state.asAdditional;\r\n }\r\n\r\n public isHidden() {\r\n return !!this.state.isHidden;\r\n }\r\n\r\n /**\r\n * A visible column is that which is not additional nor hidden.\r\n */\r\n public isVisible() {\r\n return !this.asAdditional() && !this.isHidden();\r\n }\r\n\r\n public sort(order?: ColumnState['sortState']) {\r\n order = order ?? (this.getState('sortState') === 'ASC' ? 'DESC' : 'ASC');\r\n\r\n this.setState('sortState', order);\r\n }\r\n}\r\n","import { Row } from '../primitive/Row';\r\nimport { Column, ColumnState } from './Column';\r\n\r\nexport class Columns extends Row {\r\n columns: Map<string, Column> = new Map();\r\n\r\n buildColumnsRow(columns: ColumnState[]) {\r\n let i = 0;\r\n for (const column of columns) {\r\n if (!this.columns.has(column.colName)) {\r\n this.columns.set(column.colName, new Column(column));\r\n } else {\r\n this.columns.get(column.colName)?.updateState(column);\r\n }\r\n const currentColumn = this.columns.get(column.colName) as Column;\r\n\r\n if (currentColumn.isVisible()) {\r\n this.state.cells[i++] = currentColumn;\r\n this.attachCell(currentColumn);\r\n }\r\n }\r\n }\r\n\r\n getColumn(name: string) {\r\n return this.getCellByColumnName(name) as Column;\r\n }\r\n\r\n getColumns() {\r\n return Array.from(this.columns.values());\r\n }\r\n\r\n getAdditionalColumns() {\r\n return this.getColumns().filter((c) => c.asAdditional());\r\n }\r\n\r\n getShownColumns() {\r\n return (this.cells ?? []) as Column[];\r\n }\r\n}\r\n","import { Cell, CellState } from '../primitive/Cell';\r\nimport { FC } from 'react';\r\nimport type { Filters } from '../head/Filters';\r\nimport { TableEvents } from '../TableController';\r\n\r\nexport type FilterRenderer = FC<{ cell: Filter<any> }>;\r\n\r\nexport type FilterState<\r\n ValueType = string,\r\n T extends FilterState<any> = FilterState<ValueType, any>,\r\n> = CellState<T> & {\r\n asAdditional?: boolean;\r\n name: string;\r\n columnName?: string;\r\n isRequired?: boolean;\r\n Renderer?: FilterRenderer;\r\n runAutomatically?: boolean;\r\n title: string;\r\n tooltip: string;\r\n value: ValueType;\r\n type:\r\n | 'DATE'\r\n | 'INPUT'\r\n | 'COMBO'\r\n | 'DATERANGE'\r\n | 'SIZE'\r\n | 'SIZERANGE'\r\n | 'DATEHOUR'\r\n | 'DATEHOURRANGE';\r\n};\r\n\r\nexport type FilterEvents = Pick<\r\n TableEvents,\r\n 'filterBlur' | 'filterChange' | 'filterPressEnter'\r\n>;\r\n\r\nexport class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {\r\n public asAdditional() {\r\n return !!this.state.asAdditional || !this.getCorrespondingColumn();\r\n }\r\n\r\n constructor(state: FilterState<ValueType>) {\r\n super(state);\r\n }\r\n\r\n clear() {\r\n this.setValue('' as ValueType);\r\n }\r\n\r\n getCorrespondingColumn() {\r\n return this.getRow()\r\n .getContainer()\r\n .getHeaderRow()\r\n ?.getShownColumns()\r\n .find((c) => c.getState('colName') === this.getState('colName'));\r\n }\r\n\r\n fire(ev: keyof FilterEvents) {\r\n this.table.emit(ev, this);\r\n }\r\n\r\n getRow() {\r\n return super.getRow() as Filters;\r\n }\r\n\r\n getValue() {\r\n return this.state.value;\r\n }\r\n\r\n hasValue() {\r\n return !!this.getValue();\r\n }\r\n\r\n setValue(val: ValueType) {\r\n this.state.value = val;\r\n this.table.emit('filterChange', this);\r\n }\r\n\r\n validate() {\r\n return this.state.isRequired ? this.hasValue() : true;\r\n }\r\n}\r\n","import { Filter, FilterEvents } from '../filter/Filter';\r\n\r\nexport class NullFilter extends Filter {\r\n constructor(colName: string) {\r\n super({ colName } as any);\r\n }\r\n\r\n clear() {}\r\n\r\n fire(_: keyof FilterEvents): void {}\r\n\r\n getValue() {\r\n return undefined as any;\r\n }\r\n\r\n hasValue() {\r\n return false;\r\n }\r\n\r\n setValue(): void {}\r\n\r\n validate() {\r\n return true;\r\n }\r\n}\r\n","import { Filter } from './Filter';\r\n\r\nexport class DateFilter extends Filter<number | null> {}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { Row } from '../primitive/Row';\r\nimport { Filter, FilterState } from '../filter/Filter';\r\nimport type { TableHead } from './TableHead';\r\nimport { NullFilter } from './NullFilter';\r\nimport { DateFilter } from '../filter/DateFilter';\r\n\r\nexport class Filters extends Row {\r\n filters: Map<string, Filter<any>> = new Map();\r\n\r\n private buildFilterFromDefinition(def: FilterState<any>) {\r\n switch (def.type) {\r\n case 'DATE':\r\n return new DateFilter(def);\r\n default:\r\n return new Filter(def);\r\n }\r\n }\r\n\r\n buildFilters(filters: Omit<FilterState, 'colName'>[]) {\r\n let hasFiltersInRow = false;\r\n\r\n const columns = arrayOrArray(\r\n this.getContainer().getHeaderRow()?.getShownColumns(),\r\n );\r\n\r\n for (const stored of this.filters.values()) {\r\n if (!filters.find((c) => c.name === stored.getState('name'))) {\r\n this.filters.delete(stored.getState('name'));\r\n }\r\n }\r\n\r\n for (let i = 0; i < columns.length; i++) {\r\n const column = columns[i];\r\n\r\n const filter = filters.find(\r\n (c) => c.columnName === column.getState('colName') && !c.asAdditional,\r\n );\r\n if (filter) {\r\n const currentFilterCell = this.getCellByIndex(i) as Filter;\r\n\r\n const filterCell =\r\n currentFilterCell ??\r\n this.buildFilterFromDefinition({\r\n ...filter,\r\n colName: filter.columnName!,\r\n });\r\n this.filters.set(filter.name, filterCell);\r\n\r\n if (!currentFilterCell) {\r\n this.addCell(filterCell);\r\n } else {\r\n const { value, ...filterState } = filter;\r\n currentFilterCell.updateState(filterState);\r\n }\r\n\r\n hasFiltersInRow = true;\r\n (filter as any).added = true;\r\n } else {\r\n if (!this.getCellByIndex(i)) {\r\n this.addCell(new NullFilter(column.getColumnName()));\r\n }\r\n }\r\n }\r\n\r\n for (const filter of filters) {\r\n if (!(filter as any).added) {\r\n const filterCell =\r\n this.filters.get(filter.name) ??\r\n this.buildFilterFromDefinition({\r\n ...filter,\r\n colName: filter.columnName!,\r\n });\r\n filterCell.setTable(this.table);\r\n this.filters.set(filter.name, filterCell);\r\n }\r\n }\r\n\r\n return hasFiltersInRow;\r\n }\r\n\r\n getAdditionalFilters() {\r\n return this.getFilters().filter(\r\n (c) =>\r\n c.getState('asAdditional') ||\r\n this.getContainer()\r\n .getHeaderRow()\r\n ?.columns.get(c.getState('colName'))\r\n ?.asAdditional(),\r\n );\r\n }\r\n\r\n getCells() {\r\n return this.cells.map((c) => c as Filter);\r\n }\r\n\r\n getContainer() {\r\n return this.container as TableHead;\r\n }\r\n\r\n getFilter(name: string) {\r\n return this.filters.get(name);\r\n }\r\n\r\n getFilters() {\r\n return Array.from(this.filters.values());\r\n }\r\n\r\n getFiltersInTable() {\r\n return this.getFilters().filter((f) => {\r\n return !(\r\n f.getState('asAdditional') ||\r\n this.getContainer()\r\n .getHeaderRow()\r\n ?.columns.get(f.getState('colName'))\r\n ?.isVisible() === false\r\n );\r\n });\r\n }\r\n}\r\n","import { ColumnState } from './Column';\r\nimport { FilterState } from '../filter/Filter';\r\nimport type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport type { TableController } from '../TableController';\r\nimport { Columns } from './Columns';\r\nimport { Filters } from './Filters';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableHeadState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildHead = {\r\n columns: ColumnState[];\r\n filters: Omit<FilterState, 'colName'>[];\r\n};\r\n\r\nexport class TableHead extends RowsGroup<TableHeadState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n columnsRow: Columns | null = null;\r\n filtersRow: Filters | null = null;\r\n\r\n getHeaderRow(): Columns | undefined {\r\n return this.rows[0] instanceof Columns ? this.rows[0] : undefined;\r\n }\r\n\r\n getFiltersRow(): Filters | undefined {\r\n return this.rows[1] instanceof Filters ? this.rows[1] : undefined;\r\n }\r\n\r\n build(data: TBuildHead) {\r\n if (data.columns.length) {\r\n /**\r\n * Generate main header row\r\n */\r\n\r\n const currentHeaderRow = this.rows[0];\r\n\r\n if (currentHeaderRow && !(currentHeaderRow instanceof Columns)) {\r\n currentHeaderRow.remove();\r\n }\r\n\r\n this.columnsRow = (currentHeaderRow ?? new Columns('header')) as Columns;\r\n this.columnsRow.setTable(this.table);\r\n this.columnsRow.setContainer(this);\r\n\r\n if (!currentHeaderRow) {\r\n this.addRow(this.columnsRow);\r\n }\r\n\r\n this.columnsRow.buildColumnsRow(data.columns);\r\n }\r\n\r\n if (data.filters.length) {\r\n /**\r\n * Generate filters row\r\n */\r\n\r\n const currentFiltersRow = this.getFiltersRow();\r\n this.filtersRow = currentFiltersRow ?? new Filters('filters');\r\n this.filtersRow.setTable(this.table);\r\n this.filtersRow.setContainer(this);\r\n\r\n const hasFilter = this.filtersRow.buildFilters(data.filters);\r\n if (hasFilter && !currentFiltersRow) {\r\n this.addRow(this.filtersRow);\r\n }\r\n }\r\n }\r\n}\r\n","import type { HTMLAttributes } from 'react';\r\nimport {\r\n FocusControllerPlugin,\r\n WaiAriaPlugin,\r\n type TableController,\r\n type Row,\r\n type Cell,\r\n} from '..';\r\nimport type { Element } from '../primitive/Element';\r\nimport { RowsGroup } from '../primitive/RowsGroup';\r\n\r\nexport type TDistinctorProperties = HTMLAttributes<HTMLElement>;\r\n\r\n/**\r\n * This class is the default way to customize the table behavior.\r\n */\r\nexport interface TablePlugin {\r\n getRenderers?: () => {\r\n cell?: React.FC<{\r\n cell: Cell;\r\n }>;\r\n };\r\n\r\n onAddRow?: (\r\n controller: TableController,\r\n target: RowsGroup<any>,\r\n newRow: Row,\r\n ) => void;\r\n\r\n onResize?: (\r\n controller: TableController,\r\n colName: string,\r\n newSize: number,\r\n ) => void;\r\n\r\n /**\r\n * This hook is called when the table is renderized.\r\n * The elements returned by this hook will be added to the dom of the element.\r\n */\r\n useElementDomProps?: (\r\n controller: TableController,\r\n _element: TableController | Element<any>,\r\n _context: any,\r\n ) => HTMLAttributes<HTMLElement>;\r\n}\r\n\r\nexport const defaultPlugins = () => [\r\n new WaiAriaPlugin(),\r\n new FocusControllerPlugin(),\r\n];\r\n","import {\r\n arrayOrArray,\r\n EventEmitter,\r\n TLoadStructure,\r\n TSortType,\r\n} from '@apia/util';\r\nimport { Cell } from './primitive/Cell';\r\nimport { Row } from './primitive/Row';\r\nimport { TableBody, TBuildBody } from './body/TableBody';\r\nimport { TableHead, type TBuildHead } from './head/TableHead';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport { defaultPlugins, TablePlugin } from './plugins/TablePlugin';\r\nimport type { Column } from './head/Column';\r\nimport type { Filter } from './filter/Filter';\r\nimport { ReactNode } from 'react';\r\n\r\nexport type TableState = {\r\n allowEdition: boolean;\r\n allowResize: boolean;\r\n allowSelection: boolean;\r\n editionMode: boolean;\r\n focusedCell: Cell | null;\r\n isSelectionMultiple: boolean;\r\n onRowExpand?: (row: Row) => Promise<false | ReactNode>;\r\n plugins: TablePlugin[];\r\n selection: Set<Row>;\r\n};\r\n\r\nexport type TBuildTable = TBuildHead & TBuildBody;\r\n\r\nexport type TableEvents = {\r\n cellFocus: { cell: Cell; doFocus: boolean };\r\n columnSort: Column;\r\n editionMode: boolean;\r\n filterChange: Filter<any>;\r\n filterPressEnter: Filter<any>;\r\n filterBlur: Filter<any>;\r\n keyEnter: null;\r\n rowDelete: Row;\r\n scrollIntoRow: Row;\r\n selectionChange: Row[];\r\n};\r\n\r\nexport class TableController extends EventEmitter<TableEvents> {\r\n protected state: TableState = {\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n editionMode: false,\r\n focusedCell: null,\r\n plugins: [],\r\n isSelectionMultiple: true,\r\n selection: new Set(),\r\n };\r\n\r\n constructor(props?: Partial<Omit<TableState, 'selection'>>) {\r\n super();\r\n Object.assign(this.state, props || {});\r\n if (!props?.plugins) {\r\n this.state.plugins.push(...defaultPlugins());\r\n }\r\n\r\n makeObservable<TableController, 'state'>(this, {\r\n build: action,\r\n clearSelection: action,\r\n isEditionMode: computed,\r\n setFocusedCell: action,\r\n state: observable,\r\n toggleRowSelection: action,\r\n toggleEditionMode: action,\r\n });\r\n }\r\n\r\n public body = new TableBody(this);\r\n public head = new TableHead(this);\r\n\r\n /**\r\n * Clears all data in the table, except for the events\r\n * listeners and recreates the structure based on the passed data.\r\n */\r\n public build(data: TBuildTable) {\r\n this.head.build(data);\r\n this.body.build(data);\r\n\r\n this.restoreFocus();\r\n }\r\n\r\n public fromGenericTable(table: TLoadStructure) {\r\n /**\r\n * Parse structure\r\n */\r\n this.setState('allowEdition', table.behavior.allowEdition);\r\n this.setState('allowSelection', table.behavior.allowSelection);\r\n this.setState('isSelectionMultiple', table.behavior.isMultipleSelection);\r\n\r\n const columns = arrayOrArray(table.columns);\r\n\r\n this.build({\r\n columns: columns.map((c) => {\r\n return {\r\n colName: c.name,\r\n asAdditional: c.showAsAdditional,\r\n sortable: c.isSortable,\r\n isHidden: c.isHidden,\r\n properties: c,\r\n content: c.title,\r\n className: c.className,\r\n sortState: c.sortType,\r\n };\r\n }),\r\n filters: arrayOrArray(table.filters).map((f) => {\r\n return {\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value: f.initialValue,\r\n asAdditional: f.asAdditional,\r\n };\r\n }),\r\n rows: arrayOrArray(table.rows).map((row) => {\r\n const returnValue: TBuildTable['rows'][0] = {\r\n id: row.id,\r\n cells: arrayOrArray(row.cells).map((cell) => {\r\n const returnValue: TBuildTable['rows'][0]['cells'][0] = {\r\n content: cell.text,\r\n };\r\n return returnValue;\r\n }),\r\n isExpandible: false,\r\n isSelectable: !row.isDisabled,\r\n isSelected: row.isSelected,\r\n domProperties: {},\r\n properties: row,\r\n };\r\n return returnValue;\r\n }),\r\n });\r\n }\r\n\r\n public getColumn(name: string) {\r\n return this.head.getHeaderRow()?.getColumn(name);\r\n }\r\n\r\n public getColumns() {\r\n return this.head.getHeaderRow()?.getColumns() || [];\r\n }\r\n\r\n public getFilter(name: string) {\r\n return this.head.getFiltersRow()?.getFilter(name);\r\n }\r\n\r\n public getFilters() {\r\n return this.head.getFiltersRow()?.getFilters() || [];\r\n }\r\n\r\n public getRowById(id: string | number) {\r\n return this.head.getRowById(id) || this.body.getRowById(id);\r\n }\r\n\r\n public hasAdditionalContent() {\r\n return (\r\n !!this.head\r\n .getHeaderRow()\r\n ?.getColumns()\r\n .find((c) => c.asAdditional()) || this.getState('onRowExpand')\r\n );\r\n }\r\n\r\n public onRowExpand(row: Row) {\r\n return (\r\n this.getState('onRowExpand')?.(row) ||\r\n this.head\r\n .getHeaderRow()\r\n ?.getAdditionalColumns()\r\n .map(\r\n (column) =>\r\n `${column.getState('content')}: ${row.getHiddenCell(column.getColumnName())?.getState('content')}`,\r\n )\r\n .join(', ')\r\n );\r\n }\r\n\r\n /**\r\n * EDITION MODE\r\n */\r\n\r\n public get isEditionMode() {\r\n return this.state.editionMode;\r\n }\r\n\r\n toggleEditionMode(force?: boolean) {\r\n if (this.state.allowEdition) {\r\n this.state.editionMode = force ?? !this.state.editionMode;\r\n this.emit('editionMode', this.state.editionMode);\r\n }\r\n }\r\n\r\n /**\r\n * SELECTION\r\n */\r\n\r\n clearSelection() {\r\n this.state.selection.clear();\r\n }\r\n\r\n /**\r\n * Returns the selected rows.\r\n */\r\n public getSelectedRows() {\r\n return [...this.state.selection];\r\n }\r\n\r\n public isSelected(row: Row): boolean {\r\n return this.state.selection.has(row);\r\n }\r\n\r\n public toggleColumnVisibility(colName: string, isVisible?: boolean) {\r\n isVisible =\r\n isVisible ??\r\n this.head.getHeaderRow()?.getColumn(colName).getState('isHidden');\r\n\r\n if (this.head.getHeaderRow()) {\r\n this.head\r\n .getHeaderRow()\r\n ?.getColumn(colName)\r\n .setState('isHidden', isVisible);\r\n } else {\r\n this.head.rows[0]?.cells\r\n ?.find((c) => c.getState('colName') === colName)\r\n ?.setState('isHidden', !isVisible);\r\n }\r\n }\r\n\r\n public toggleFiltersRowVisibility() {\r\n this.head\r\n .getFiltersRow()\r\n ?.setState('isHidden', !this.head.getFiltersRow()?.getState('isHidden'));\r\n }\r\n\r\n /**\r\n * Toggles the selection state of a given row.\r\n *\r\n * If the `isSelected` parameter is provided, it explicitly sets the selection\r\n * state of the row to the given value (`true` for selected, `false` for deselected).\r\n * If `isSelected` is not provided, the method will toggle the current selection state\r\n * of the row (i.e., select it if it's currently not selected, or deselect it if it is).\r\n *\r\n * @param row - The row to toggle selection for.\r\n * @param isSelected - Optional. A boolean indicating whether the row should be selected (`true`)\r\n * or deselected (`false`). If not provided, the selection state will be toggled.\r\n */\r\n public toggleRowSelection(row: Row, isSelected?: boolean) {\r\n if (this.state.allowSelection) {\r\n isSelected = isSelected ?? !this.state.selection.has(row);\r\n\r\n if (isSelected) {\r\n if (row.getState('isSelectable') !== false) {\r\n this.state.selection.add(row);\r\n }\r\n } else {\r\n this.state.selection.delete(row);\r\n }\r\n\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n }\r\n\r\n protected restoreFocus() {\r\n if (!this.state.focusedCell || this.state.focusedCell.getTable() !== this) {\r\n this.state.focusedCell =\r\n this.body.getState('rows').values().next().value?.cells[0] ||\r\n this.head.getState('rows').values().next().value?.cells[0] ||\r\n null;\r\n }\r\n if (this.state.focusedCell) {\r\n this.emit('cellFocus', { cell: this.state.focusedCell, doFocus: false });\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getTable() === this) {\r\n row.setTable(null);\r\n\r\n this.head.removeRow(row);\r\n this.body.removeRow(row);\r\n\r\n if (this.state.selection.has(row)) {\r\n this.state.selection.delete(row);\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n\r\n if (this.state.focusedCell?.getRow() === row) {\r\n this.restoreFocus();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * FOCUS\r\n */\r\n\r\n /**\r\n * @returns The currently focused cell in the table.\r\n */\r\n public getFocusedCell() {\r\n return this.state.focusedCell;\r\n }\r\n\r\n public setFocusedCell(cell: Cell, doFocus: boolean = true) {\r\n this.state.focusedCell = cell;\r\n this.emit('cellFocus', { cell, doFocus });\r\n }\r\n\r\n public setSelection(indices: number[]) {\r\n this.clearSelection();\r\n indices.forEach((index) => {\r\n const row = this.body.getRowByIndex(index);\r\n if (row) {\r\n this.toggleRowSelection(row, true);\r\n }\r\n });\r\n }\r\n\r\n public scrollRowIntoView(row: Row) {\r\n this.emit('scrollIntoRow', row);\r\n }\r\n\r\n /**\r\n * STATE\r\n */\r\n\r\n /**\r\n * Returns the current state of the `TableController` instance.\r\n *\r\n * @param prop - The property of the state to retrieve.\r\n */\r\n public getState<K extends keyof TableState>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n /**\r\n * Updates the state of the `TableController` instance.\r\n *\r\n * This method provides two overloads:\r\n * 1. A callback function that takes the current state and returns a new state.\r\n * 2. A key-value pair where the key is a property of the state, and the value is the new value for that property.\r\n *\r\n * @param prop - Either a callback function to update the state or the key of the state property to update.\r\n * @param value - (Optional) The new value for the specified state property. This is required if `prop` is a key.\r\n *\r\n * @returns The `TableController` instance for method chaining.\r\n *\r\n * ### Usage:\r\n *\r\n * **Using a callback function:**\r\n * ```tsx\r\n * tableController.setState((state) => ({\r\n * ...state,\r\n * allowEdition: false,\r\n * }));\r\n * ```\r\n *\r\n * **Using a key-value pair:**\r\n * ```tsx\r\n * tableController.setState('allowEdition', false);\r\n * ```\r\n */\r\n public setState(cb: (s: TableState) => TableState): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K,\r\n value: TableState[K],\r\n ): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K | ((s: TableState) => TableState),\r\n value?: TableState[K],\r\n ) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n\r\n public sortColumn(col: Column, sortState?: TSortType) {\r\n this.getColumns().forEach((c) => {\r\n if (c.getColumnName() !== col.getColumnName()) {\r\n c.sort('NONE');\r\n }\r\n });\r\n col.sort(sortState);\r\n\r\n this.emit('columnSort', col);\r\n }\r\n\r\n /**\r\n * PLUGINS\r\n */\r\n\r\n getPluginOfType<T extends TablePlugin>(\r\n clazz: new (...args: any[]) => T,\r\n ): T | undefined {\r\n return this.state.plugins.find((plugin) => plugin instanceof clazz) as\r\n | T\r\n | undefined;\r\n }\r\n\r\n /**\r\n * Sets the plugins for the table.\r\n */\r\n public setPlugins(cb: (currentPlugins: TablePlugin[]) => TablePlugin[]) {\r\n this.state.plugins = cb(this.state.plugins);\r\n }\r\n\r\n public getApplicablePlugins<K extends keyof TablePlugin>(\r\n method: K,\r\n ): ((\r\n ...args: Parameters<NonNullable<TablePlugin[K]>> extends [\r\n any,\r\n ...infer Rest,\r\n ]\r\n ? Rest\r\n : void[]\r\n ) => ReturnType<NonNullable<TablePlugin[K]>>)[] {\r\n return this.state.plugins\r\n .filter((c) => c[method] !== undefined)\r\n .map((c) => (c[method]! as any).bind(c, this)) as any;\r\n }\r\n}\r\n","import { MouseEvent, useRef } from 'react';\r\nimport { TableController } from '../..';\r\n\r\nexport function getRow(\r\n controller: TableController,\r\n rowElement: HTMLTableRowElement,\r\n) {\r\n const rowId = rowElement.dataset.rowid!;\r\n const row = controller.getRowById(rowId);\r\n return row;\r\n}\r\n\r\nexport function selectBetweenRows(\r\n controller: TableController,\r\n rowA: HTMLTableRowElement,\r\n rowB: HTMLTableRowElement,\r\n) {\r\n const relativePosition = rowA.compareDocumentPosition(rowB);\r\n let finished = false;\r\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {\r\n let current = rowA;\r\n if (rowA.closest('thead') && !rowB.closest('thead')) {\r\n current = rowA.closest('table')?.querySelector('tbody')\r\n ?.firstElementChild as HTMLTableRowElement;\r\n }\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.nextElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n } else if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {\r\n let current = rowA;\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.previousElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByClick(controller: TableController) {\r\n const lastRow = useRef<HTMLTableRowElement | null>(null);\r\n\r\n return (ev: MouseEvent) => {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n const row = getRow(controller, rowElement);\r\n\r\n if (row) {\r\n if (ev.shiftKey) {\r\n if (lastRow.current) {\r\n selectBetweenRows(controller, lastRow.current, rowElement);\r\n }\r\n } else if (ev.ctrlKey) {\r\n row?.toggleSelection();\r\n } else {\r\n controller.clearSelection();\r\n row?.toggleSelection(true);\r\n }\r\n\r\n lastRow.current = rowElement;\r\n\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n const cell = row?.getCellByColumnName(colName);\r\n\r\n if (cell) {\r\n if (target.closest('thead')) {\r\n controller.emit('columnClick', cell);\r\n }\r\n\r\n cell?.focus(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","import { KeyboardEvent } from 'react';\r\nimport { TableController } from '../..';\r\nimport { getRow, selectBetweenRows } from './useFocusByClick';\r\n\r\nconst pageSize = 6;\r\n\r\nfunction handleArrowKey(controller: TableController, ev: KeyboardEvent) {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n\r\n let nextFocusedRow: HTMLTableRowElement = rowElement;\r\n let nextFocusedCell: HTMLTableCellElement = cellElement;\r\n switch (ev.code) {\r\n case 'ArrowUp': {\r\n const test =\r\n rowElement?.previousElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!.lastElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowDown': {\r\n const test = rowElement?.nextElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!.firstElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowLeft':\r\n nextFocusedCell =\r\n cellElement.previousElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'ArrowRight':\r\n nextFocusedCell =\r\n cellElement.nextElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'PageUp': {\r\n let i = 0;\r\n do {\r\n const test = nextFocusedRow.previousElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!\r\n .lastElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'PageDown': {\r\n let i = 0;\r\n\r\n do {\r\n const test = nextFocusedRow.nextElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!\r\n .firstElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'Home': {\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = rowElement\r\n .closest<HTMLElement>('table')\r\n ?.querySelector('thead tr') as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell =\r\n rowElement.firstElementChild as HTMLTableCellElement;\r\n }\r\n break;\r\n }\r\n case 'End':\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = (\r\n rowElement\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody') as HTMLElement\r\n ).lastElementChild as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell = rowElement.lastChild! as HTMLTableCellElement;\r\n }\r\n }\r\n\r\n if (nextFocusedCell !== cellElement && nextFocusedCell) {\r\n getRow(controller, rowElement)!\r\n .getCellByColumnName(nextFocusedCell.dataset.colname!)!\r\n .focus();\r\n } else if (nextFocusedRow !== rowElement && nextFocusedRow) {\r\n if (ev.shiftKey) {\r\n selectBetweenRows(controller, rowElement, nextFocusedRow);\r\n } else {\r\n controller.clearSelection();\r\n getRow(controller, nextFocusedRow)?.toggleSelection(true);\r\n }\r\n\r\n const cell =\r\n getRow(controller, nextFocusedRow)!.getCellByColumnName(colName) ||\r\n getRow(controller, nextFocusedRow)!.getCellByIndex(0);\r\n cell?.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByKey(controller: TableController) {\r\n return (ev: KeyboardEvent) => {\r\n if (controller.isEditionMode) {\r\n if (['Enter', 'Escape'].includes(ev.code)) {\r\n ev.preventDefault();\r\n }\r\n\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n break;\r\n // eslint-disable-next-line no-fallthrough\r\n case 'Escape':\r\n controller.toggleEditionMode(false);\r\n }\r\n } else {\r\n if (\r\n [\r\n 'Escape',\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'PageUp',\r\n 'PageDown',\r\n 'Home',\r\n 'End',\r\n ].includes(ev.code) ||\r\n (ev.code === 'Enter' && controller.getState('allowEdition')) ||\r\n (ev.code === 'Space' && ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n }\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n controller.toggleEditionMode();\r\n break;\r\n case 'Space':\r\n {\r\n if (ev.ctrlKey) {\r\n const row = (ev.target as HTMLElement)?.closest('tr');\r\n if (row instanceof HTMLElement) {\r\n getRow(controller, row)!.toggleSelection();\r\n }\r\n }\r\n }\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n case 'ArrowLeft':\r\n case 'ArrowRight':\r\n case 'Home':\r\n case 'End':\r\n case 'PageUp':\r\n case 'PageDown':\r\n handleArrowKey(controller, ev);\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport {\r\n disableChildrenFocus,\r\n getFocusSelector,\r\n scrollParentIntoElement,\r\n useMount,\r\n} from '@apia/util';\r\nimport { FocusEvent, useRef } from 'react';\r\nimport { Element } from '../../primitive/Element';\r\nimport { TableController } from '../../TableController';\r\nimport type { TablePlugin } from '../TablePlugin';\r\nimport { useFocusByClick } from './useFocusByClick';\r\nimport { useFocusByKey } from './useFocusByKey';\r\nimport type { Cell } from '../../primitive/Cell';\r\n\r\nfunction getCellElement(focusControllerRef: HTMLElement, cell: Cell) {\r\n return focusControllerRef.querySelector<HTMLTableCellElement>(\r\n `tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] td[data-colname=\"${cell.getState('colName')}\"], tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] th[data-colname=\"${cell.getState('colName')}\"]`,\r\n );\r\n}\r\n\r\nfunction isVisible(el: HTMLElement | null) {\r\n if (!(el instanceof HTMLElement)) return false;\r\n\r\n // Traverse up the DOM tree\r\n while (el) {\r\n const style = getComputedStyle(el);\r\n\r\n if (\r\n style.display === 'none' ||\r\n style.visibility === 'hidden' ||\r\n style.opacity === '0'\r\n ) {\r\n return false;\r\n }\r\n\r\n el = el.parentElement;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction scrollIntoRow(row: HTMLTableCaptionElement) {\r\n if (row) {\r\n scrollParentIntoElement(row, 150, 0, 0);\r\n }\r\n}\r\n\r\nexport function restoreFocus(\r\n controller: TableController,\r\n tableElement: HTMLElement,\r\n doFocus: boolean,\r\n) {\r\n const cell = controller.getFocusedCell();\r\n\r\n if (cell) {\r\n const cellElement = getCellElement(tableElement, cell);\r\n\r\n if (cellElement) {\r\n disableChildrenFocus(tableElement);\r\n const widgets =\r\n cellElement.querySelectorAll<HTMLElement>(getFocusSelector());\r\n const widget = [...widgets].find((c) => isVisible(c));\r\n const focusableElement = widget || cellElement;\r\n\r\n focusableElement.setAttribute('tabindex', '0');\r\n restoreEditionMode(tableElement, cell.getTable().isEditionMode);\r\n if (doFocus) {\r\n focusableElement.focus();\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction restoreEditionMode(\r\n focusController: HTMLElement,\r\n editionMode: boolean,\r\n) {\r\n const focusable = focusController?.querySelector(\r\n '[tabindex=\"0\"]',\r\n ) as HTMLElement;\r\n const cell = focusable?.closest('td, th');\r\n if (cell instanceof HTMLElement) {\r\n const widgets = cell.querySelectorAll<HTMLElement>(getFocusSelector());\r\n widgets.forEach((widget) => {\r\n widget.setAttribute('tabindex', editionMode ? '0' : '-1');\r\n });\r\n const firstFocusable = [...widgets].find((c) => isVisible(c)) || cell;\r\n firstFocusable.setAttribute('tabindex', '0');\r\n }\r\n}\r\n\r\nexport class FocusControllerPlugin implements TablePlugin {\r\n rootElement: HTMLElement | null = null;\r\n\r\n scrollIntoView(rowId: string) {\r\n const row = this.rootElement?.querySelector(\r\n `tr[data-rowid=\"${rowId}\"]`,\r\n ) as HTMLTableRowElement;\r\n\r\n if (row) {\r\n scrollIntoRow(row);\r\n }\r\n }\r\n\r\n useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n _context: any,\r\n ) {\r\n if (element instanceof TableController) {\r\n const disconnect = useRef(() => {});\r\n\r\n useMount(() => {\r\n const uns1 = controller.on('cellFocus', (ev) => {\r\n if (this.rootElement) {\r\n restoreFocus(controller, this.rootElement, ev.doFocus);\r\n }\r\n });\r\n const uns2 = controller.on('editionMode', (editionMode) => {\r\n if (this.rootElement) {\r\n restoreEditionMode(this.rootElement!, editionMode);\r\n }\r\n });\r\n const uns3 = controller.on('scrollIntoRow', (row) => {\r\n this.scrollIntoView(row.getState('id'));\r\n });\r\n\r\n return () => {\r\n uns1();\r\n uns2();\r\n uns3();\r\n };\r\n });\r\n\r\n return {\r\n className: 'table__focus_controller',\r\n onClick: useFocusByClick(controller),\r\n onKeyDown: useFocusByKey(controller),\r\n onBlur: (ev: FocusEvent) => {\r\n if (\r\n ev.relatedTarget instanceof HTMLElement &&\r\n ev.relatedTarget.closest('.table__focus_controller') !==\r\n this.rootElement\r\n ) {\r\n controller.toggleEditionMode(false);\r\n }\r\n },\r\n ref: (el: HTMLElement | null) => {\r\n this.rootElement = el;\r\n if (el) {\r\n const observer = new MutationObserver(() => {\r\n restoreFocus(controller, this.rootElement!, false);\r\n });\r\n disconnect.current?.();\r\n observer.observe(el, { subtree: true, childList: true });\r\n disconnect.current = () => {\r\n observer.disconnect();\r\n };\r\n }\r\n },\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n","import { Cell } from '../primitive/Cell';\r\nimport type { Element } from '../primitive/Element';\r\nimport { Row } from '../primitive/Row';\r\nimport { TableController } from '../TableController';\r\nimport type { TablePlugin } from './TablePlugin';\r\n\r\nexport class WaiAriaPlugin implements TablePlugin {\r\n public useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n context: any,\r\n ) {\r\n if (element instanceof Row) {\r\n const base =\r\n element.getContainer() === controller.head\r\n ? 0\r\n : controller.head.rows.length;\r\n return {\r\n 'aria-selected': element.isSelected,\r\n 'aria-rowindex': context + base + 1,\r\n };\r\n } else if (element instanceof Cell) {\r\n return {\r\n 'aria-colindex': context + 1,\r\n };\r\n } else if (element instanceof TableController) {\r\n return {\r\n role: 'treegrid',\r\n 'aria-multiselectable':\r\n controller.getState('allowSelection') &&\r\n controller.getState('isSelectionMultiple')\r\n ? true\r\n : undefined,\r\n 'aria-colcount': controller.head.rows[0]?.cells.length || 0,\r\n 'aria-rowcount':\r\n controller.head.rows.length + controller.body.rows.length,\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n"],"names":["__publicField","returnValue"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/data/primitive/Element.ts","../src/data/primitive/Cell.ts","../src/data/primitive/Row.ts","../src/data/primitive/AdditionalRow.ts","../src/data/primitive/AdditionalRowContent.ts","../src/data/primitive/AdditionalCell.ts","../src/data/primitive/RowsGroup.ts","../src/data/body/TableBody.ts","../src/data/head/Column.ts","../src/data/head/Columns.ts","../src/data/head/Filter.ts","../src/data/head/Filters.ts","../src/data/head/TableHead.ts","../src/data/plugins/TablePlugin.tsx","../src/data/TableController.ts","../src/data/plugins/FocusControllerPlugin/useFocusByClick.ts","../src/data/plugins/FocusControllerPlugin/useFocusByKey.ts","../src/data/plugins/FocusControllerPlugin/index.tsx","../src/data/plugins/WaiAriaPlugin.ts"],"sourcesContent":["import { action, makeObservable, observable } from 'mobx';\r\nimport type { TableController } from '../TableController';\r\n\r\nconst voidTable = {} as TableController;\r\n\r\nexport type ElementBaseState = {\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport abstract class Element<T extends ElementBaseState> {\r\n protected table: TableController = voidTable;\r\n\r\n constructor(protected state: T) {\r\n makeObservable<Element<T>, 'state'>(this, {\r\n state: observable,\r\n setState: action,\r\n });\r\n }\r\n\r\n public getTable() {\r\n return this.table;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n this.table = table || voidTable;\r\n return this;\r\n }\r\n\r\n public getState<K extends keyof T>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n public setState(cb: (s: T) => T): this;\r\n public setState<K extends keyof T>(prop: K, value: T[K]): this;\r\n public setState<K extends keyof T>(prop: K | ((s: T) => T), value?: T[K]) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n}\r\n","import type { ThHTMLAttributes, ReactNode, FC } from 'react';\r\nimport { Element } from './Element';\r\nimport type { Row } from './Row';\r\n\r\nexport type CellState<T extends CellState<any> = CellState<any>> = {\r\n colName: string;\r\n\r\n content?: ReactNode;\r\n className?: string;\r\n isFocused?: boolean;\r\n isHidden?: boolean;\r\n tag?: 'td' | 'th;';\r\n\r\n Renderer?: FC<{ cell: Cell<T> }>;\r\n domProperties?: ThHTMLAttributes<HTMLTableCellElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class Cell<\r\n State extends CellState<any> = CellState<any>,\r\n> extends Element<State> {\r\n protected parentRow: Row | null = null;\r\n\r\n getColumnName() {\r\n return this.getState('colName');\r\n }\r\n\r\n getIndex() {\r\n return this.getRow()!.getCellIndex(this);\r\n }\r\n\r\n getRow() {\r\n return this.parentRow;\r\n }\r\n\r\n setRow(row: Row | null) {\r\n this.parentRow = row;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param doFocus - If true, the cell will be focused after being set as the focused cell.\r\n * If false, the cell will contain the tabIndex = 0 but will not be focused.\r\n */\r\n focus(doFocus: boolean = true) {\r\n this.table.setFocusedCell(this, doFocus);\r\n }\r\n\r\n updateState(state: Partial<State>) {\r\n this.state = { ...this.state, ...state };\r\n }\r\n}\r\n","import { Element } from './Element';\r\nimport { Cell, type CellState } from './Cell';\r\nimport { TableController } from '../TableController';\r\nimport { computed, makeObservable } from 'mobx';\r\nimport type { RowsGroup, RowsGroupBaseState } from './RowsGroup';\r\nimport type { HTMLAttributes } from 'react';\r\nimport { AdditionalCell } from './AdditionalCell';\r\n\r\nexport type RowProperties = {\r\n id: string;\r\n cells: Cell[];\r\n\r\n isExpandible?: boolean;\r\n isExpanded?: boolean;\r\n isHidden?: boolean;\r\n isSelectable?: boolean;\r\n isSelected?: boolean;\r\n\r\n domProperties?: HTMLAttributes<HTMLTableRowElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport type TBuildRow = Omit<RowProperties, 'cells'> & {\r\n cells: (Omit<CellState, 'colName'> & { colName?: string })[];\r\n};\r\n\r\nexport type RowState = Omit<RowProperties, 'isSelected'>;\r\n\r\nexport class Row extends Element<RowState> {\r\n protected container: null | RowsGroup<RowsGroupBaseState> =\r\n {} as RowsGroup<RowsGroupBaseState>;\r\n\r\n hiddenCells: Map<string, Cell> = new Map();\r\n\r\n addCell(cell: Cell) {\r\n this.state.cells.push(cell);\r\n this.attachCell(cell);\r\n return this;\r\n }\r\n\r\n addCellAfter(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor) + 1;\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n addCellBefore(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor);\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n build(data: TBuildRow) {\r\n this.hiddenCells.clear();\r\n\r\n for (let i = 0; i < data.cells.length; i++) {\r\n const cell = data.cells[i];\r\n\r\n const col = cell.colName\r\n ? this.table.head.getHeaderRow()!.getColumn(cell.colName)!\r\n : this.table.head.getHeaderRow()!.getColumns()[i]!;\r\n\r\n const cellInstance = new Cell({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n\r\n if (col?.isVisible()) {\r\n const currentCell = this.state.cells[i - this.hiddenCells.size];\r\n\r\n if (!currentCell) {\r\n this.addCell(cellInstance);\r\n } else {\r\n currentCell.updateState({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n }\r\n } else {\r\n this.hiddenCells.set(col?.getColumnName(), cellInstance);\r\n }\r\n }\r\n this.cells.splice(data.cells.length - this.hiddenCells.size);\r\n }\r\n\r\n constructor(\r\n id: string,\r\n protected properties?: Omit<RowProperties, 'id'>,\r\n ) {\r\n const { cells, isSelected, ...state } = properties || {};\r\n super({ id, ...state, cells: cells || [] });\r\n makeObservable(this, {\r\n isSelected: computed,\r\n });\r\n }\r\n\r\n get cells(): Cell[] {\r\n const hasAdditionalColumn: boolean =\r\n !!this.table.getState('onRowExpand') ||\r\n (this.table.head.getFiltersRow()?.getFiltersInTable()?.length || 0) > 0;\r\n\r\n let additionalCell: Cell | null = null;\r\n if (hasAdditionalColumn) {\r\n additionalCell = new AdditionalCell();\r\n additionalCell.setRow(this);\r\n additionalCell.setTable(this.table);\r\n }\r\n\r\n return [additionalCell, ...this.state.cells].filter((f): f is Cell =>\r\n Boolean(f),\r\n );\r\n }\r\n\r\n get isSelected() {\r\n return this.table.isSelected(this);\r\n }\r\n\r\n getCellByColumnName(colName: string) {\r\n return this.cells.find((c) => c.getState('colName') === colName);\r\n }\r\n\r\n getCellByIndex(index: number) {\r\n return this.cells[index];\r\n }\r\n\r\n getCellIndex(cell: Cell) {\r\n return this.cells.indexOf(cell);\r\n }\r\n\r\n getContainer() {\r\n return this.container;\r\n }\r\n\r\n getFollowingRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index + 1] || null;\r\n }\r\n\r\n getHiddenCell(colName: string) {\r\n return this.hiddenCells.get(colName);\r\n }\r\n\r\n getIndex() {\r\n return this.getContainer()!.getRowIndex(this);\r\n }\r\n\r\n getPreviousRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index - 1] || null;\r\n }\r\n\r\n insertAfter(row: Row) {\r\n this.getContainer()?.insertAfter(this, row);\r\n }\r\n\r\n insertBefore(row: Row) {\r\n this.getContainer()?.insertBefore(this, row);\r\n }\r\n\r\n remove() {\r\n this.getContainer()?.removeRow(this);\r\n }\r\n\r\n replaceCellOnIndex(index: number, newCell: Cell) {\r\n const current = this.cells[index];\r\n if (!current) {\r\n throw new Error('IndexOutOfBounds - The provided index is out of bounds');\r\n }\r\n\r\n this.cells[index] = newCell;\r\n this.attachCell(newCell);\r\n\r\n this.detachCell(current);\r\n }\r\n\r\n public scrollIntoView() {\r\n this.table.scrollRowIntoView(this);\r\n }\r\n\r\n public setContainer(container: null | RowsGroup<RowsGroupBaseState>) {\r\n this.container = container;\r\n return this;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n super.setTable(table);\r\n\r\n this.state.cells.forEach((c) => c.setTable(table));\r\n\r\n if (table && this.properties?.isSelected) {\r\n table.toggleRowSelection(this, true);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public swap(withRow: Row) {\r\n this.getContainer()?.swapRows(this, withRow);\r\n }\r\n\r\n public toggleSelection(forceState?: boolean) {\r\n this.table.toggleRowSelection(this, forceState);\r\n }\r\n\r\n protected attachCell(cell: Cell) {\r\n cell.setTable(this.table);\r\n cell.setRow(this);\r\n }\r\n\r\n protected detachCell(cell: Cell) {\r\n cell.setTable(null);\r\n cell.setRow(null);\r\n }\r\n}\r\n","import { Cell, CellState } from './Cell';\nimport { Row } from './Row';\n\nexport class AdditionalRow extends Row {\n constructor(id: string) {\n super(id);\n this.setState('isSelectable', false);\n }\n\n get cells(): Cell<CellState<any>>[] {\n return this.state.cells;\n }\n}\n","import { ReactNode } from 'react';\nimport { Cell, CellState } from './Cell';\n\nexport class AdditionalRowContent extends Cell<\n CellState & { expanded: boolean }\n> {\n constructor(content: ReactNode) {\n super({\n expanded: false,\n colName: '__additional',\n content,\n });\n }\n\n public getState<K extends keyof CellState | 'expanded'>(\n prop: K,\n ): (CellState & { expanded: boolean })[K] {\n if (prop === 'domProperties') {\n return {\n colSpan: this.table.head.getHeaderRow()?.getShownColumns().length || 0,\n } as any;\n }\n\n return super.getState(prop);\n }\n}\n","import { AdditionalRow } from './AdditionalRow';\nimport { AdditionalRowContent } from './AdditionalRowContent';\nimport { Cell, CellState } from './Cell';\n\nexport class AdditionalCell extends Cell<CellState & { expanded: boolean }> {\n constructor() {\n super({\n expanded: false,\n colName: '__additional',\n domProperties: {\n style: {\n width: '50px',\n },\n },\n });\n }\n\n async onToggle() {\n const currentIndex = this.getRow()!.getIndex()!;\n if (\n !(\n this.getTable().body.getRowByIndex(currentIndex + 1) instanceof\n AdditionalRow\n )\n ) {\n const res = await this.table.onRowExpand(this.getRow()!);\n\n if (res !== false) {\n const newRow = new AdditionalRow(\n `${this.getRow()?.getState('id')}__additional`,\n );\n\n this.getTable().body.insertAfter(this.getRow()!, newRow);\n\n newRow.addCell(new AdditionalRowContent(res));\n\n this.state.expanded = true;\n }\n } else {\n this.getTable()\n .body.getRowByIndex(currentIndex + 1)\n .remove();\n this.state.expanded = false;\n }\n }\n}\n","import { action, computed, makeObservable } from 'mobx';\r\nimport type { Row } from './Row';\r\nimport type { TableController } from '../TableController';\r\nimport { Element, type ElementBaseState } from './Element';\r\nimport type { HTMLAttributes } from 'react';\r\n\r\nexport type RowsGroupBaseState = ElementBaseState & {\r\n rows: Row[];\r\n domProperties?: HTMLAttributes<HTMLTableSectionElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class RowsGroup<U extends RowsGroupBaseState> extends Element<\r\n U & RowsGroupBaseState\r\n> {\r\n constructor(\r\n public table: TableController,\r\n state: U,\r\n ) {\r\n super({ ...state, rows: [] });\r\n makeObservable(this, { swapRows: action, rows: computed });\r\n }\r\n\r\n get rows() {\r\n return this.state.rows;\r\n }\r\n\r\n addRow(row: Row) {\r\n this.state.rows.push(row);\r\n row.setTable(this.table);\r\n row.setContainer(this);\r\n\r\n this.runAddRowPlugin(row);\r\n\r\n return this;\r\n }\r\n\r\n addRows(rows: Row[]) {\r\n rows.forEach(this.addRow.bind(this));\r\n return this;\r\n }\r\n\r\n clear() {\r\n this.state.rows.forEach((row) => {\r\n row.setContainer(null);\r\n row.setTable(null);\r\n });\r\n return this.rows.splice(0, this.rows.length);\r\n }\r\n\r\n getRowById(id: string | number) {\r\n return this.state.rows.find((c) => c.getState('id') === id);\r\n }\r\n\r\n getRowByIndex(index: number) {\r\n return this.state.rows[index];\r\n }\r\n\r\n getRowIndex(row: Row) {\r\n return this.state.rows.indexOf(row);\r\n }\r\n\r\n insertAfter(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index + 1, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n insertBefore(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getContainer() === this) {\r\n row.setContainer(null);\r\n this.state.rows = this.state.rows.filter((r) => r !== row);\r\n this.table.removeRow(row);\r\n }\r\n }\r\n\r\n swapRows(a: Row, b: Row) {\r\n if (a?.getContainer() === this && b?.getContainer() === this) {\r\n const aIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === a.getState?.('id'),\r\n );\r\n const bIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === b.getState?.('id'),\r\n );\r\n if (aIndex !== -1 && bIndex !== -1) {\r\n this.state.rows[aIndex] = b;\r\n this.state.rows[bIndex] = a;\r\n }\r\n }\r\n }\r\n\r\n protected runAddRowPlugin(newRow: Row) {\r\n const plugins = this.getTable().getApplicablePlugins('onAddRow');\r\n plugins.forEach((c) => c(this, newRow));\r\n }\r\n}\r\n","import type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport { Row, type TBuildRow } from '../primitive/Row';\r\nimport type { TableController } from '../TableController';\r\nimport { AdditionalRow } from '../primitive/AdditionalRow';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableBodyState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildBody = {\r\n rows: TBuildRow[];\r\n};\r\n\r\nexport class TableBody extends RowsGroup<TableBodyState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n build(data: TBuildBody) {\r\n let i = 0;\r\n for (const row of data.rows) {\r\n let currentRow: Row | undefined = this.rows[i++];\r\n if (currentRow instanceof AdditionalRow) {\r\n currentRow.remove();\r\n currentRow = undefined;\r\n }\r\n const bodyRow = currentRow ?? new Row(row.id);\r\n\r\n if (!currentRow) {\r\n this.addRow(bodyRow);\r\n }\r\n bodyRow.build(row);\r\n }\r\n this.rows.splice(data.rows.length);\r\n }\r\n}\r\n","import { Cell, CellState } from '../primitive/Cell';\n\nexport type ColumnState<T extends ColumnState<any> = ColumnState<any>> =\n CellState<T> & {\n asAdditional?: boolean;\n sortable?: boolean;\n };\n\nexport class Column extends Cell<ColumnState> {\n public asAdditional() {\n return !!this.state.asAdditional;\n }\n\n public isHidden() {\n return !!this.state.isHidden;\n }\n\n /**\n * A visible column is that which is not additional nor hidden.\n */\n public isVisible() {\n return !this.asAdditional() && !this.isHidden();\n }\n}\n","import { Row } from '../primitive/Row';\nimport { Column, ColumnState } from './Column';\n\nexport class Columns extends Row {\n columns: Map<string, Column> = new Map();\n\n buildColumnsRow(columns: ColumnState[]) {\n let i = 0;\n for (const column of columns) {\n const headerCell = new Column(column);\n this.columns.set(column.colName, headerCell);\n\n if (headerCell.isVisible()) {\n const currentCell = this.cells[i++];\n\n /**\n * We try to maximize rendering optimization here.\n *\n * If the cell already exists, we just update its state\n * in order to prevent dom rebuilding.\n */\n if (!currentCell) {\n this.addCell(headerCell);\n } else {\n currentCell.updateState(column);\n }\n }\n }\n }\n\n getColumn(name: string) {\n return this.getCellByColumnName(name) as Column;\n }\n\n getColumns() {\n return Array.from(this.columns.values());\n }\n\n getAdditionalColumns() {\n return this.getColumns().filter((c) => c.asAdditional());\n }\n\n getShownColumns() {\n return (this.cells ?? []) as Column[];\n }\n}\n","import { Cell, CellState } from '../primitive/Cell';\nimport { FC } from 'react';\nimport type { Filters } from './Filters';\nimport { TableEvents } from '../TableController';\nimport { reaction } from 'mobx';\n\nexport type FilterRenderer = FC<{ cell: Filter }>;\n\nexport type FilterState<\n ValueType = string,\n T extends FilterState<any> = FilterState<ValueType, any>,\n> = CellState<T> & {\n asAdditional?: boolean;\n name: string;\n columnName?: string;\n isRequired?: boolean;\n Renderer?: FilterRenderer;\n runAutomatically?: boolean;\n title: string;\n tooltip: string;\n value: ValueType;\n type:\n | 'DATE'\n | 'INPUT'\n | 'COMBO'\n | 'DATERANGE'\n | 'SIZE'\n | 'SIZERANGE'\n | 'DATEHOUR'\n | 'DATEHOURRANGE';\n};\n\nexport type FilterEvents = Pick<\n TableEvents,\n 'filterBlur' | 'filterChange' | 'filterPressEnter'\n>;\n\nexport class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {\n public asAdditional() {\n return !!this.state.asAdditional || !this.getCorrespondingColumn();\n }\n\n constructor(state: FilterState<ValueType>) {\n super(state);\n\n reaction(\n () => this.state.value,\n () => {\n console.log(this.state.value);\n },\n );\n }\n\n clear() {\n this.setValue('' as ValueType);\n }\n\n getCorrespondingColumn() {\n return this.getRow()\n .getContainer()\n .getHeaderRow()\n ?.getShownColumns()\n .find((c) => c.getState('colName') === this.getState('colName'));\n }\n\n fire(ev: keyof FilterEvents) {\n this.table.emit(ev, this);\n }\n\n getRow() {\n return super.getRow() as Filters;\n }\n\n getValue() {\n return this.state.value;\n }\n\n hasValue() {\n return !!this.getValue();\n }\n\n setValue(val: ValueType) {\n this.state.value = val;\n this.table.emit('filterChange', this);\n }\n\n validate() {\n return this.state.isRequired ? this.hasValue() : true;\n }\n}\n","import { arrayOrArray } from '@apia/util';\nimport { Row } from '../primitive/Row';\nimport { Filter, FilterState } from './Filter';\nimport type { TableHead } from './TableHead';\nimport { Cell } from '../primitive/Cell';\n\nexport class Filters extends Row {\n filters: Map<string, Filter> = new Map();\n\n buildFilters(filters: Omit<FilterState, 'colName'>[]) {\n this.filters.clear();\n\n let hasFiltersInRow = false;\n\n const columns = arrayOrArray(\n this.getContainer().getHeaderRow()?.getShownColumns(),\n );\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n\n const filter = filters.find(\n (c) => c.columnName === column.getState('colName') && !c.asAdditional,\n );\n if (filter) {\n const currentFilterCell = this.getCellByIndex(i) as Filter;\n\n const filterCell = new Filter({\n ...filter,\n colName: filter.columnName!,\n });\n this.filters.set(filter.name, filterCell);\n\n if (!currentFilterCell) {\n this.addCell(filterCell);\n } else {\n const { value, ...filterState } = filter;\n currentFilterCell.updateState(filterState);\n }\n\n hasFiltersInRow = true;\n (filter as any).added = true;\n } else {\n if (!this.getCellByIndex(i)) {\n this.addCell(new Cell({ colName: column.getColumnName() }));\n }\n }\n for (const filter of filters) {\n if (!(filter as any).added) {\n const filterCell = new Filter({\n ...filter,\n colName: filter.columnName!,\n });\n this.filters.set(filter.name, filterCell);\n }\n }\n }\n\n return hasFiltersInRow;\n }\n\n getAdditionalFilters() {\n return this.getFilters().filter(\n (c) =>\n c.getState('asAdditional') ||\n this.getContainer()\n .getHeaderRow()\n ?.columns.get(c.getState('colName'))\n ?.asAdditional(),\n );\n }\n\n getCells() {\n return this.cells.map((c) => c as Filter);\n }\n\n getContainer() {\n return this.container as TableHead;\n }\n\n getFilter(name: string) {\n return this.filters.get(name);\n }\n\n getFilters() {\n return Array.from(this.filters.values());\n }\n\n getFiltersInTable() {\n return this.getFilters().filter((f) => {\n return !(\n f.getState('asAdditional') ||\n this.getContainer()\n .getHeaderRow()\n ?.columns.get(f.getState('colName'))\n ?.isVisible() === false\n );\n });\n }\n}\n","import { ColumnState } from './Column';\r\nimport { FilterState } from './Filter';\r\nimport type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport type { TableController } from '../TableController';\r\nimport { Columns } from './Columns';\r\nimport { Filters } from './Filters';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableHeadState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildHead = {\r\n columns: ColumnState[];\r\n filters: Omit<FilterState, 'colName'>[];\r\n};\r\n\r\nexport class TableHead extends RowsGroup<TableHeadState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n columnsRow: Columns | null = null;\r\n filtersRow: Filters | null = null;\r\n\r\n getHeaderRow(): Columns | undefined {\r\n return this.rows[0] instanceof Columns ? this.rows[0] : undefined;\r\n }\r\n\r\n getFiltersRow(): Filters | undefined {\r\n return this.rows[1] instanceof Filters ? this.rows[1] : undefined;\r\n }\r\n\r\n build(data: TBuildHead) {\r\n this.state.rows = [];\r\n\r\n if (data.columns.length) {\r\n /**\r\n * Generate main header row\r\n */\r\n\r\n const currentHeaderRow = this.rows[0];\r\n\r\n if (currentHeaderRow && !(currentHeaderRow instanceof Columns)) {\r\n currentHeaderRow.remove();\r\n }\r\n\r\n this.columnsRow = (currentHeaderRow ?? new Columns('header')) as Columns;\r\n this.columnsRow.setTable(this.table);\r\n this.columnsRow.setContainer(this);\r\n\r\n if (!currentHeaderRow) {\r\n this.addRow(this.columnsRow);\r\n }\r\n\r\n this.columnsRow.buildColumnsRow(data.columns);\r\n }\r\n\r\n if (data.filters.length) {\r\n /**\r\n * Generate filters row\r\n */\r\n\r\n const currentFiltersRow = this.getFiltersRow();\r\n this.filtersRow = currentFiltersRow ?? new Filters('filters');\r\n this.filtersRow.setTable(this.table);\r\n this.filtersRow.setContainer(this);\r\n\r\n const hasFilter = this.filtersRow.buildFilters(data.filters);\r\n if (hasFilter && !currentFiltersRow) {\r\n this.addRow(this.filtersRow);\r\n }\r\n }\r\n }\r\n}\r\n","import type { HTMLAttributes } from 'react';\r\nimport {\r\n FocusControllerPlugin,\r\n WaiAriaPlugin,\r\n type TableController,\r\n type Row,\r\n type Cell,\r\n} from '..';\r\nimport type { Element } from '../primitive/Element';\r\nimport { RowsGroup } from '../primitive/RowsGroup';\r\n\r\nexport type TDistinctorProperties = HTMLAttributes<HTMLElement>;\r\n\r\n/**\r\n * This class is the default way to customize the table behavior.\r\n */\r\nexport interface TablePlugin {\r\n getRenderers?: () => {\r\n cell?: React.FC<{\r\n cell: Cell;\r\n }>;\r\n };\r\n\r\n onAddRow?: (\r\n controller: TableController,\r\n target: RowsGroup<any>,\r\n newRow: Row,\r\n ) => void;\r\n\r\n onResize?: (\r\n controller: TableController,\r\n colName: string,\r\n newSize: number,\r\n ) => void;\r\n\r\n /**\r\n * This hook is called when the table is renderized.\r\n * The elements returned by this hook will be added to the dom of the element.\r\n */\r\n useElementDomProps?: (\r\n controller: TableController,\r\n _element: TableController | Element<any>,\r\n _context: any,\r\n ) => HTMLAttributes<HTMLElement>;\r\n}\r\n\r\nexport const defaultPlugins = () => [\r\n new WaiAriaPlugin(),\r\n new FocusControllerPlugin(),\r\n];\r\n","import { arrayOrArray, EventEmitter, TLoadStructure } from '@apia/util';\r\nimport { Cell } from './primitive/Cell';\r\nimport { Row } from './primitive/Row';\r\nimport { TableBody, TBuildBody } from './body/TableBody';\r\nimport { TableHead, type TBuildHead } from './head/TableHead';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport { defaultPlugins, TablePlugin } from './plugins/TablePlugin';\r\nimport type { Column } from './head/Column';\r\nimport type { Filter } from './head/Filter';\r\nimport { ReactNode } from 'react';\r\n\r\nexport type TableState = {\r\n allowEdition: boolean;\r\n allowResize: boolean;\r\n allowSelection: boolean;\r\n editionMode: boolean;\r\n focusedCell: Cell | null;\r\n isSelectionMultiple: boolean;\r\n onRowExpand?: (row: Row) => Promise<false | ReactNode>;\r\n plugins: TablePlugin[];\r\n selection: Set<Row>;\r\n};\r\n\r\nexport type TBuildTable = TBuildHead & TBuildBody;\r\n\r\nexport type TableEvents = {\r\n cellFocus: { cell: Cell; doFocus: boolean };\r\n columnClick: Column;\r\n editionMode: boolean;\r\n filterChange: Filter<any>;\r\n filterPressEnter: Filter<any>;\r\n filterBlur: Filter<any>;\r\n keyEnter: null;\r\n rowDelete: Row;\r\n scrollIntoRow: Row;\r\n selectionChange: Row[];\r\n};\r\n\r\nexport class TableController extends EventEmitter<TableEvents> {\r\n protected state: TableState = {\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n editionMode: false,\r\n focusedCell: null,\r\n plugins: [],\r\n isSelectionMultiple: true,\r\n selection: new Set(),\r\n };\r\n\r\n constructor(props?: Partial<Omit<TableState, 'selection'>>) {\r\n super();\r\n Object.assign(this.state, props || {});\r\n if (!props?.plugins) {\r\n this.state.plugins.push(...defaultPlugins());\r\n }\r\n\r\n makeObservable<TableController, 'state'>(this, {\r\n build: action,\r\n clearSelection: action,\r\n isEditionMode: computed,\r\n setFocusedCell: action,\r\n state: observable,\r\n toggleRowSelection: action,\r\n toggleEditionMode: action,\r\n });\r\n }\r\n\r\n public body = new TableBody(this);\r\n public head = new TableHead(this);\r\n\r\n /**\r\n * Clears all data in the table, except for the events\r\n * listeners and recreates the structure based on the passed data.\r\n */\r\n public build(data: TBuildTable) {\r\n this.head.build(data);\r\n this.body.build(data);\r\n\r\n this.restoreFocus();\r\n }\r\n\r\n public fromGenericTable(table: TLoadStructure) {\r\n /**\r\n * Parse structure\r\n */\r\n this.setState('allowEdition', table.behavior.allowEdition);\r\n this.setState('allowSelection', table.behavior.allowSelection);\r\n this.setState('isSelectionMultiple', table.behavior.isMultipleSelection);\r\n\r\n const columns = arrayOrArray(table.columns);\r\n\r\n this.build({\r\n columns: columns.map((c) => {\r\n console.log({ c });\r\n return {\r\n colName: c.name,\r\n asAdditional: c.showAsAdditional,\r\n sortable: c.isSortable,\r\n isHidden: c.isHidden,\r\n properties: c,\r\n content: c.title,\r\n className: c.className,\r\n };\r\n }),\r\n filters: arrayOrArray(table.filters).map((f) => {\r\n console.log({ f });\r\n return {\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value: f.initialValue,\r\n asAdditional: f.asAdditional,\r\n };\r\n }),\r\n rows: arrayOrArray(table.rows).map((row) => {\r\n console.log({ row });\r\n const returnValue: TBuildTable['rows'][0] = {\r\n id: row.id,\r\n cells: arrayOrArray(row.cells).map((cell) => {\r\n const returnValue: TBuildTable['rows'][0]['cells'][0] = {\r\n content: cell.text,\r\n };\r\n return returnValue;\r\n }),\r\n isExpandible: false,\r\n isSelectable: !row.isDisabled,\r\n isSelected: row.isSelected,\r\n domProperties: {},\r\n properties: row,\r\n };\r\n return returnValue;\r\n }),\r\n });\r\n }\r\n\r\n public getColumn(name: string) {\r\n return this.head.getHeaderRow()?.getColumn(name);\r\n }\r\n\r\n public getColumns() {\r\n return this.head.getHeaderRow()?.getColumns() || [];\r\n }\r\n\r\n public getFilter(name: string) {\r\n return this.head.getFiltersRow()?.getFilter(name);\r\n }\r\n\r\n public getFilters() {\r\n return this.head.getFiltersRow()?.getFilters() || [];\r\n }\r\n\r\n public getRowById(id: string | number) {\r\n return this.head.getRowById(id) || this.body.getRowById(id);\r\n }\r\n\r\n public hasAdditionalContent() {\r\n return (\r\n !!this.head\r\n .getHeaderRow()\r\n ?.getColumns()\r\n .find((c) => c.asAdditional()) || this.getState('onRowExpand')\r\n );\r\n }\r\n\r\n public onRowExpand(row: Row) {\r\n return (\r\n this.getState('onRowExpand')?.(row) ||\r\n this.head\r\n .getHeaderRow()\r\n ?.getAdditionalColumns()\r\n .map(\r\n (column) =>\r\n `${column.getState('content')}: ${row.getHiddenCell(column.getColumnName())?.getState('content')}`,\r\n )\r\n .join(', ')\r\n );\r\n }\r\n\r\n /**\r\n * EDITION MODE\r\n */\r\n\r\n public get isEditionMode() {\r\n return this.state.editionMode;\r\n }\r\n\r\n toggleEditionMode(force?: boolean) {\r\n if (this.state.allowEdition) {\r\n this.state.editionMode = force ?? !this.state.editionMode;\r\n this.emit('editionMode', this.state.editionMode);\r\n }\r\n }\r\n\r\n /**\r\n * SELECTION\r\n */\r\n\r\n clearSelection() {\r\n this.state.selection.clear();\r\n }\r\n\r\n /**\r\n * Returns the selected rows.\r\n */\r\n public getSelectedRows() {\r\n return [...this.state.selection];\r\n }\r\n\r\n public isSelected(row: Row): boolean {\r\n return this.state.selection.has(row);\r\n }\r\n\r\n public toggleColumnVisibility(colName: string, isVisible?: boolean) {\r\n isVisible =\r\n isVisible ??\r\n this.head.getHeaderRow()?.getColumn(colName).getState('isHidden');\r\n\r\n if (this.head.getHeaderRow()) {\r\n this.head\r\n .getHeaderRow()\r\n ?.getColumn(colName)\r\n .setState('isHidden', isVisible);\r\n } else {\r\n this.head.rows[0]?.cells\r\n ?.find((c) => c.getState('colName') === colName)\r\n ?.setState('isHidden', !isVisible);\r\n }\r\n }\r\n\r\n /**\r\n * Toggles the selection state of a given row.\r\n *\r\n * If the `isSelected` parameter is provided, it explicitly sets the selection\r\n * state of the row to the given value (`true` for selected, `false` for deselected).\r\n * If `isSelected` is not provided, the method will toggle the current selection state\r\n * of the row (i.e., select it if it's currently not selected, or deselect it if it is).\r\n *\r\n * @param row - The row to toggle selection for.\r\n * @param isSelected - Optional. A boolean indicating whether the row should be selected (`true`)\r\n * or deselected (`false`). If not provided, the selection state will be toggled.\r\n */\r\n public toggleRowSelection(row: Row, isSelected?: boolean) {\r\n if (this.state.allowSelection) {\r\n isSelected = isSelected ?? !this.state.selection.has(row);\r\n\r\n if (isSelected) {\r\n if (row.getState('isSelectable') !== false) {\r\n this.state.selection.add(row);\r\n }\r\n } else {\r\n this.state.selection.delete(row);\r\n }\r\n\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n }\r\n\r\n protected restoreFocus() {\r\n if (!this.state.focusedCell || this.state.focusedCell.getTable() !== this) {\r\n this.state.focusedCell =\r\n this.body.getState('rows').values().next().value?.cells[0] ||\r\n this.head.getState('rows').values().next().value?.cells[0] ||\r\n null;\r\n }\r\n if (this.state.focusedCell) {\r\n this.emit('cellFocus', { cell: this.state.focusedCell, doFocus: false });\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getTable() === this) {\r\n row.setTable(null);\r\n\r\n this.head.removeRow(row);\r\n this.body.removeRow(row);\r\n\r\n if (this.state.selection.has(row)) {\r\n this.state.selection.delete(row);\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n\r\n if (this.state.focusedCell?.getRow() === row) {\r\n this.restoreFocus();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * FOCUS\r\n */\r\n\r\n /**\r\n * @returns The currently focused cell in the table.\r\n */\r\n public getFocusedCell() {\r\n return this.state.focusedCell;\r\n }\r\n\r\n public setFocusedCell(cell: Cell, doFocus: boolean = true) {\r\n this.state.focusedCell = cell;\r\n this.emit('cellFocus', { cell, doFocus });\r\n }\r\n\r\n public setSelection(indices: number[]) {\r\n this.clearSelection();\r\n indices.forEach((index) => {\r\n const row = this.body.getRowByIndex(index);\r\n if (row) {\r\n this.toggleRowSelection(row, true);\r\n }\r\n });\r\n }\r\n\r\n public scrollRowIntoView(row: Row) {\r\n this.emit('scrollIntoRow', row);\r\n }\r\n\r\n /**\r\n * STATE\r\n */\r\n\r\n /**\r\n * Returns the current state of the `TableController` instance.\r\n *\r\n * @param prop - The property of the state to retrieve.\r\n */\r\n public getState<K extends keyof TableState>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n /**\r\n * Updates the state of the `TableController` instance.\r\n *\r\n * This method provides two overloads:\r\n * 1. A callback function that takes the current state and returns a new state.\r\n * 2. A key-value pair where the key is a property of the state, and the value is the new value for that property.\r\n *\r\n * @param prop - Either a callback function to update the state or the key of the state property to update.\r\n * @param value - (Optional) The new value for the specified state property. This is required if `prop` is a key.\r\n *\r\n * @returns The `TableController` instance for method chaining.\r\n *\r\n * ### Usage:\r\n *\r\n * **Using a callback function:**\r\n * ```tsx\r\n * tableController.setState((state) => ({\r\n * ...state,\r\n * allowEdition: false,\r\n * }));\r\n * ```\r\n *\r\n * **Using a key-value pair:**\r\n * ```tsx\r\n * tableController.setState('allowEdition', false);\r\n * ```\r\n */\r\n public setState(cb: (s: TableState) => TableState): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K,\r\n value: TableState[K],\r\n ): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K | ((s: TableState) => TableState),\r\n value?: TableState[K],\r\n ) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * PLUGINS\r\n */\r\n\r\n getPluginOfType<T extends TablePlugin>(\r\n clazz: new (...args: any[]) => T,\r\n ): T | undefined {\r\n return this.state.plugins.find((plugin) => plugin instanceof clazz) as\r\n | T\r\n | undefined;\r\n }\r\n\r\n /**\r\n * Sets the plugins for the table.\r\n */\r\n public setPlugins(cb: (currentPlugins: TablePlugin[]) => TablePlugin[]) {\r\n this.state.plugins = cb(this.state.plugins);\r\n }\r\n\r\n public getApplicablePlugins<K extends keyof TablePlugin>(\r\n method: K,\r\n ): ((\r\n ...args: Parameters<NonNullable<TablePlugin[K]>> extends [\r\n any,\r\n ...infer Rest,\r\n ]\r\n ? Rest\r\n : void[]\r\n ) => ReturnType<NonNullable<TablePlugin[K]>>)[] {\r\n return this.state.plugins\r\n .filter((c) => c[method] !== undefined)\r\n .map((c) => (c[method]! as any).bind(c, this)) as any;\r\n }\r\n}\r\n","import { MouseEvent, useRef } from 'react';\r\nimport { TableController } from '../..';\r\n\r\nexport function getRow(\r\n controller: TableController,\r\n rowElement: HTMLTableRowElement,\r\n) {\r\n const rowId = rowElement.dataset.rowid!;\r\n const row = controller.getRowById(rowId);\r\n return row;\r\n}\r\n\r\nexport function selectBetweenRows(\r\n controller: TableController,\r\n rowA: HTMLTableRowElement,\r\n rowB: HTMLTableRowElement,\r\n) {\r\n const relativePosition = rowA.compareDocumentPosition(rowB);\r\n let finished = false;\r\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {\r\n let current = rowA;\r\n if (rowA.closest('thead') && !rowB.closest('thead')) {\r\n current = rowA.closest('table')?.querySelector('tbody')\r\n ?.firstElementChild as HTMLTableRowElement;\r\n }\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.nextElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n } else if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {\r\n let current = rowA;\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.previousElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByClick(controller: TableController) {\r\n const lastRow = useRef<HTMLTableRowElement | null>(null);\r\n\r\n return (ev: MouseEvent) => {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n const row = getRow(controller, rowElement);\r\n\r\n if (row) {\r\n if (ev.shiftKey) {\r\n if (lastRow.current) {\r\n selectBetweenRows(controller, lastRow.current, rowElement);\r\n }\r\n } else if (ev.ctrlKey) {\r\n row?.toggleSelection();\r\n } else {\r\n controller.clearSelection();\r\n row?.toggleSelection(true);\r\n }\r\n\r\n lastRow.current = rowElement;\r\n\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n const cell = row?.getCellByColumnName(colName);\r\n\r\n if (cell) {\r\n if (target.closest('thead')) {\r\n controller.emit('columnClick', cell);\r\n }\r\n\r\n cell?.focus(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","import { KeyboardEvent } from 'react';\r\nimport { TableController } from '../..';\r\nimport { getRow, selectBetweenRows } from './useFocusByClick';\r\n\r\nconst pageSize = 6;\r\n\r\nfunction handleArrowKey(controller: TableController, ev: KeyboardEvent) {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n\r\n let nextFocusedRow: HTMLTableRowElement = rowElement;\r\n let nextFocusedCell: HTMLTableCellElement = cellElement;\r\n switch (ev.code) {\r\n case 'ArrowUp': {\r\n const test =\r\n rowElement?.previousElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!.lastElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowDown': {\r\n const test = rowElement?.nextElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!.firstElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowLeft':\r\n nextFocusedCell =\r\n cellElement.previousElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'ArrowRight':\r\n nextFocusedCell =\r\n cellElement.nextElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'PageUp': {\r\n let i = 0;\r\n do {\r\n const test = nextFocusedRow.previousElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!\r\n .lastElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'PageDown': {\r\n let i = 0;\r\n\r\n do {\r\n const test = nextFocusedRow.nextElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!\r\n .firstElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'Home': {\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = rowElement\r\n .closest<HTMLElement>('table')\r\n ?.querySelector('thead tr') as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell =\r\n rowElement.firstElementChild as HTMLTableCellElement;\r\n }\r\n break;\r\n }\r\n case 'End':\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = (\r\n rowElement\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody') as HTMLElement\r\n ).lastElementChild as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell = rowElement.lastChild! as HTMLTableCellElement;\r\n }\r\n }\r\n\r\n if (nextFocusedCell !== cellElement && nextFocusedCell) {\r\n getRow(controller, rowElement)!\r\n .getCellByColumnName(nextFocusedCell.dataset.colname!)!\r\n .focus();\r\n } else if (nextFocusedRow !== rowElement && nextFocusedRow) {\r\n if (ev.shiftKey) {\r\n selectBetweenRows(controller, rowElement, nextFocusedRow);\r\n } else {\r\n controller.clearSelection();\r\n getRow(controller, nextFocusedRow)?.toggleSelection(true);\r\n }\r\n\r\n const cell =\r\n getRow(controller, nextFocusedRow)!.getCellByColumnName(colName) ||\r\n getRow(controller, nextFocusedRow)!.getCellByIndex(0);\r\n cell?.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByKey(controller: TableController) {\r\n return (ev: KeyboardEvent) => {\r\n if (controller.isEditionMode) {\r\n if (['Enter', 'Escape'].includes(ev.code)) {\r\n ev.preventDefault();\r\n }\r\n\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n break;\r\n // eslint-disable-next-line no-fallthrough\r\n case 'Escape':\r\n controller.toggleEditionMode(false);\r\n }\r\n } else {\r\n if (\r\n [\r\n 'Escape',\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'PageUp',\r\n 'PageDown',\r\n 'Home',\r\n 'End',\r\n ].includes(ev.code) ||\r\n (ev.code === 'Enter' && controller.getState('allowEdition')) ||\r\n (ev.code === 'Space' && ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n }\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n controller.toggleEditionMode();\r\n break;\r\n case 'Space':\r\n {\r\n if (ev.ctrlKey) {\r\n const row = (ev.target as HTMLElement)?.closest('tr');\r\n if (row instanceof HTMLElement) {\r\n getRow(controller, row)!.toggleSelection();\r\n }\r\n }\r\n }\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n case 'ArrowLeft':\r\n case 'ArrowRight':\r\n case 'Home':\r\n case 'End':\r\n case 'PageUp':\r\n case 'PageDown':\r\n handleArrowKey(controller, ev);\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport {\r\n disableChildrenFocus,\r\n getFocusSelector,\r\n scrollParentIntoElement,\r\n useMount,\r\n} from '@apia/util';\r\nimport { FocusEvent, useRef } from 'react';\r\nimport { Element } from '../../primitive/Element';\r\nimport { TableController } from '../../TableController';\r\nimport type { TablePlugin } from '../TablePlugin';\r\nimport { useFocusByClick } from './useFocusByClick';\r\nimport { useFocusByKey } from './useFocusByKey';\r\nimport type { Cell } from '../../primitive/Cell';\r\n\r\nfunction getCellElement(focusControllerRef: HTMLElement, cell: Cell) {\r\n return focusControllerRef.querySelector<HTMLTableCellElement>(\r\n `tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] td[data-colname=\"${cell.getState('colName')}\"], tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] th[data-colname=\"${cell.getState('colName')}\"]`,\r\n );\r\n}\r\n\r\nfunction isVisible(el: HTMLElement | null) {\r\n if (!(el instanceof HTMLElement)) return false;\r\n\r\n // Traverse up the DOM tree\r\n while (el) {\r\n const style = getComputedStyle(el);\r\n\r\n if (\r\n style.display === 'none' ||\r\n style.visibility === 'hidden' ||\r\n style.opacity === '0'\r\n ) {\r\n return false;\r\n }\r\n\r\n el = el.parentElement;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction scrollIntoRow(row: HTMLTableCaptionElement) {\r\n if (row) {\r\n scrollParentIntoElement(row, 150, 0, 0);\r\n }\r\n}\r\n\r\nexport function restoreFocus(\r\n controller: TableController,\r\n tableElement: HTMLElement,\r\n doFocus: boolean,\r\n) {\r\n const cell = controller.getFocusedCell();\r\n\r\n if (cell) {\r\n const cellElement = getCellElement(tableElement, cell);\r\n\r\n if (cellElement) {\r\n disableChildrenFocus(tableElement);\r\n const widgets =\r\n cellElement.querySelectorAll<HTMLElement>(getFocusSelector());\r\n const widget = [...widgets].find((c) => isVisible(c));\r\n const focusableElement = widget || cellElement;\r\n\r\n focusableElement.setAttribute('tabindex', '0');\r\n restoreEditionMode(tableElement, cell.getTable().isEditionMode);\r\n if (doFocus) {\r\n focusableElement.focus();\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction restoreEditionMode(\r\n focusController: HTMLElement,\r\n editionMode: boolean,\r\n) {\r\n const focusable = focusController?.querySelector(\r\n '[tabindex=\"0\"]',\r\n ) as HTMLElement;\r\n const cell = focusable?.closest('td, th');\r\n if (cell instanceof HTMLElement) {\r\n const widgets = cell.querySelectorAll<HTMLElement>(getFocusSelector());\r\n widgets.forEach((widget) => {\r\n widget.setAttribute('tabindex', editionMode ? '0' : '-1');\r\n });\r\n const firstFocusable = [...widgets].find((c) => isVisible(c)) || cell;\r\n firstFocusable.setAttribute('tabindex', '0');\r\n }\r\n}\r\n\r\nexport class FocusControllerPlugin implements TablePlugin {\r\n rootElement: HTMLElement | null = null;\r\n\r\n scrollIntoView(rowId: string) {\r\n const row = this.rootElement?.querySelector(\r\n `tr[data-rowid=\"${rowId}\"]`,\r\n ) as HTMLTableRowElement;\r\n\r\n if (row) {\r\n scrollIntoRow(row);\r\n }\r\n }\r\n\r\n useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n _context: any,\r\n ) {\r\n if (element instanceof TableController) {\r\n const disconnect = useRef(() => {});\r\n\r\n useMount(() => {\r\n const uns1 = controller.on('cellFocus', (ev) => {\r\n if (this.rootElement) {\r\n restoreFocus(controller, this.rootElement, ev.doFocus);\r\n }\r\n });\r\n const uns2 = controller.on('editionMode', (editionMode) => {\r\n if (this.rootElement) {\r\n restoreEditionMode(this.rootElement!, editionMode);\r\n }\r\n });\r\n const uns3 = controller.on('scrollIntoRow', (row) => {\r\n this.scrollIntoView(row.getState('id'));\r\n });\r\n\r\n return () => {\r\n uns1();\r\n uns2();\r\n uns3();\r\n };\r\n });\r\n\r\n return {\r\n className: 'table__focus_controller',\r\n onClick: useFocusByClick(controller),\r\n onKeyDown: useFocusByKey(controller),\r\n onBlur: (ev: FocusEvent) => {\r\n if (\r\n ev.relatedTarget instanceof HTMLElement &&\r\n ev.relatedTarget.closest('.table__focus_controller') !==\r\n this.rootElement\r\n ) {\r\n controller.toggleEditionMode(false);\r\n }\r\n },\r\n ref: (el: HTMLElement | null) => {\r\n this.rootElement = el;\r\n if (el) {\r\n const observer = new MutationObserver(() => {\r\n restoreFocus(controller, this.rootElement!, false);\r\n });\r\n disconnect.current?.();\r\n observer.observe(el, { subtree: true, childList: true });\r\n disconnect.current = () => {\r\n observer.disconnect();\r\n };\r\n }\r\n },\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n","import { Cell } from '../primitive/Cell';\r\nimport type { Element } from '../primitive/Element';\r\nimport { Row } from '../primitive/Row';\r\nimport { TableController } from '../TableController';\r\nimport type { TablePlugin } from './TablePlugin';\r\n\r\nexport class WaiAriaPlugin implements TablePlugin {\r\n public useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n context: any,\r\n ) {\r\n if (element instanceof Row) {\r\n const base =\r\n element.getContainer() === controller.head\r\n ? 0\r\n : controller.head.rows.length;\r\n return {\r\n 'aria-selected': element.isSelected,\r\n 'aria-rowindex': context + base + 1,\r\n };\r\n } else if (element instanceof Cell) {\r\n return {\r\n 'aria-colindex': context + 1,\r\n };\r\n } else if (element instanceof TableController) {\r\n return {\r\n role: 'treegrid',\r\n 'aria-multiselectable':\r\n controller.getState('allowSelection') &&\r\n controller.getState('isSelectionMultiple')\r\n ? true\r\n : undefined,\r\n 'aria-colcount': controller.head.rows[0]?.cells.length || 0,\r\n 'aria-rowcount':\r\n controller.head.rows.length + controller.body.rows.length,\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n"],"names":["__publicField","filter","returnValue"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/table2-controller",
3
- "version": "4.0.44",
3
+ "version": "4.0.45",
4
4
  "sideEffects": false,
5
5
  "author": "Alexis Leite <alexisleite@live.com>",
6
6
  "main": "dist/index.js",
@@ -30,9 +30,9 @@
30
30
  "registry": "https://registry.npmjs.org/"
31
31
  },
32
32
  "dependencies": {
33
- "@apia/util": "^4.0.44",
33
+ "@apia/util": "^4.0.45",
34
34
  "mobx": "^6.13.7",
35
35
  "mobx-react-lite": "^4.1.0"
36
36
  },
37
- "gitHead": "0822e3a7f4a7fa49b47087e8097caab678d36ef6"
37
+ "gitHead": "1b035d1b515ceb49207373a4fafcf0ff465bc439"
38
38
  }