@cronocode/react-box 3.0.20 → 3.1.1

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.
Files changed (53) hide show
  1. package/box.d.ts +7 -2
  2. package/box.mjs +4 -4
  3. package/components/baseSvg.cjs +1 -1
  4. package/components/baseSvg.d.ts +1 -1
  5. package/components/button.cjs +1 -1
  6. package/components/checkbox.cjs +1 -1
  7. package/components/dataGrid/components/dataGridBody.d.ts +7 -0
  8. package/components/dataGrid/components/dataGridBottomBar.d.ts +6 -0
  9. package/components/dataGrid/components/dataGridColumnGroups.d.ts +1 -1
  10. package/components/dataGrid/components/dataGridContent.d.ts +6 -0
  11. package/components/dataGrid/components/dataGridHeader.d.ts +6 -0
  12. package/components/dataGrid/components/dataGridHeaderCellContextMenu.d.ts +6 -0
  13. package/components/dataGrid/components/dataGridHeaderCellResizer.d.ts +6 -0
  14. package/components/dataGrid/components/dataGridPagination.d.ts +1 -1
  15. package/components/dataGrid/components/dataGridTopBar.d.ts +6 -0
  16. package/components/dataGrid/components/dataGridTopBarContextMenu.d.ts +6 -0
  17. package/components/dataGrid/contracts/dataGridContract.d.ts +16 -0
  18. package/components/dataGrid/models/columnModel.d.ts +1 -1
  19. package/components/dataGrid/models/gridModel.d.ts +15 -7
  20. package/components/dataGrid/models/groupRowModel.d.ts +3 -2
  21. package/components/dataGrid/models/rowModel.d.ts +8 -7
  22. package/components/dataGrid.cjs +1 -1
  23. package/components/dataGrid.d.ts +1 -1
  24. package/components/dataGrid.mjs +511 -576
  25. package/components/dropdown.cjs +1 -1
  26. package/components/dropdown.d.ts +1 -1
  27. package/components/dropdown.mjs +111 -135
  28. package/components/flex.cjs +1 -1
  29. package/components/form.cjs +1 -1
  30. package/components/form.mjs +1 -1
  31. package/components/grid.cjs +1 -1
  32. package/components/radioButton.cjs +1 -1
  33. package/components/radioButton.mjs +10 -10
  34. package/components/semantics.d.ts +25 -25
  35. package/components/semantics.mjs +1 -1
  36. package/components/textarea.cjs +1 -1
  37. package/components/textbox.cjs +1 -1
  38. package/components/tooltip.cjs +1 -1
  39. package/components/tooltip.d.ts +6 -3
  40. package/components/tooltip.mjs +34 -34
  41. package/core/boxStyles.d.ts +28 -4
  42. package/core/boxStylesFormatters.d.ts +1 -1
  43. package/core/coreTypes.d.ts +1 -1
  44. package/core/extends/boxComponents.d.ts +194 -18
  45. package/core.cjs +3 -3
  46. package/core.mjs +476 -306
  47. package/icons/expandIcon.d.ts +2 -0
  48. package/icons/sortIcon.d.ts +2 -0
  49. package/package.json +22 -14
  50. package/ssg.cjs +1 -1
  51. package/ssg.mjs +17 -16
  52. package/utils/object/objectUtils.d.ts +2 -2
  53. package/icons/arrowIcon.d.ts +0 -2
package/box.d.ts CHANGED
@@ -1,24 +1,29 @@
1
1
  import { default as React, RefAttributes } from 'react';
2
2
  import { ClassNameType } from './core/classNames';
3
3
  import { ExtractElementFromTag } from './core/coreTypes';
4
- import { BoxStyleProps, ComponentsAndVariants } from './types';
5
4
  import { default as BoxExtends } from './core/extends/boxExtends';
6
5
  import { default as Theme } from './core/theme/theme';
7
6
  import { default as Variables } from './core/variables';
8
7
  import { default as useVisibility } from './hooks/useVisibility';
8
+ import { BoxStyleProps, ComponentsAndVariants } from './types';
9
9
  type AllProps<TTag extends keyof React.JSX.IntrinsicElements> = React.ComponentProps<TTag>;
10
10
  type TagPropsType<TTag extends keyof React.JSX.IntrinsicElements> = Omit<AllProps<TTag>, 'className' | 'style' | 'ref' | 'disabled' | 'required' | 'checked' | 'id'>;
11
11
  interface Props<TTag extends keyof React.JSX.IntrinsicElements, TKey extends keyof ComponentsAndVariants> extends BoxStyleProps<TKey> {
12
12
  children?: React.ReactNode | ((props: {
13
13
  isHover: boolean;
14
14
  }) => React.ReactNode);
15
+ /** html tag element */
15
16
  tag?: TTag;
17
+ /** props (attributes) related to html tag */
16
18
  props?: TagPropsType<TTag>;
19
+ /** classNames. supports conditional classNames. */
17
20
  className?: ClassNameType;
21
+ /** CSSProperties */
18
22
  style?: React.ComponentProps<TTag>['style'];
23
+ /** The HTML id attribute is used to specify a unique id for an HTML element. */
19
24
  id?: string;
20
25
  }
21
- interface BoxType extends React.FunctionComponent {
26
+ interface BoxType {
22
27
  <TTag extends keyof React.JSX.IntrinsicElements = 'div', TKey extends keyof ComponentsAndVariants = never>(props: Props<TTag, TKey> & RefAttributes<ExtractElementFromTag<TTag>>): React.ReactNode;
23
28
  extend: typeof BoxExtends.extend;
24
29
  components: typeof BoxExtends.components;
package/box.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import T, { memo as V, forwardRef as v, useMemo as P, useState as N } from "react";
2
- import { B as d, T as m, V as C, u as E, c as H, a as o } from "./core.mjs";
2
+ import { u as C, c as E, B as o, a as d, T as m, V as H } from "./core.mjs";
3
3
  import { b as U } from "./core.mjs";
4
4
  function M(s, i) {
5
- const { tag: l = "div", children: t, props: u, className: f, disabled: g, required: x, checked: B, selected: y } = s, b = E(s, l === "svg"), n = P(() => {
6
- const p = H(b, f).join(" "), e = {
5
+ const { tag: l = "div", children: t, props: u, className: f, disabled: g, required: x, checked: B, selected: y } = s, b = C(s, l === "svg"), n = P(() => {
6
+ const p = E(b, f).join(" "), e = {
7
7
  ...u,
8
8
  className: p
9
9
  };
@@ -17,7 +17,7 @@ a.extend = d.extend;
17
17
  a.components = d.components;
18
18
  a.Theme = m;
19
19
  a.useTheme = m.useTheme;
20
- a.getVariableValue = C.getVariableValue;
20
+ a.getVariableValue = H.getVariableValue;
21
21
  export {
22
22
  a as default,
23
23
  U as useVisibility
@@ -1 +1 @@
1
- "use strict";const p=require("react/jsx-runtime"),g=require("react"),c=require("../box.cjs");function u(s,t){const{viewBox:r="0 0 24 24",width:o="1.5rem",height:n,props:i,...a}=s;return p.jsx(c.default,{tag:"svg",ref:t,props:{...i,viewBox:r,width:o,height:n,xmlns:"http://www.w3.org/2000/svg",fill:"none"},...a})}const e=g.forwardRef(u);e.displayName="BaseSvg";module.exports=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("react/jsx-runtime"),l=require("react"),g=require("../box.cjs");function p(t,s){const{viewBox:r="0 0 24 24",width:o="1.5rem",height:a,props:i,...n}=t;return u.jsx(g.default,{tag:"svg",ref:s,props:{...i,viewBox:r,width:o,height:a,xmlns:"http://www.w3.org/2000/svg",fill:"none"},...n})}const e=l.forwardRef(p);e.displayName="BaseSvg";exports.default=e;
@@ -1,7 +1,7 @@
1
1
  import { Ref } from 'react';
2
2
  import { BoxTagProps } from '../box';
3
- import { BoxStyleProps } from '../types';
4
3
  import { ClassNameType } from '../core/classNames';
4
+ import { BoxStyleProps } from '../types';
5
5
  type BoxSvgTagProps = Omit<BoxTagProps<'svg'>, 'viewBox' | 'width' | 'height'>;
6
6
  interface Props extends Omit<BoxStyleProps, 'width' | 'height'> {
7
7
  children?: React.ReactNode | ((props: {
@@ -1 +1 @@
1
- "use strict";const r=require("react/jsx-runtime"),s=require("react"),u=require("../box.cjs"),c=require("../core.cjs"),i=["type","onClick"];function p(o,e){const n=c.ObjectUtils.buildProps(o,i);return r.jsx(u.default,{ref:e,tag:"button",component:"button",...n})}const t=s.forwardRef(p);t.displayName="Button";module.exports=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),u=require("react"),s=require("../box.cjs"),c=require("../core.cjs"),i=["type","onClick"];function l(e,o){const n=c.ObjectUtils.buildProps(e,i);return r.jsx(s.default,{ref:o,tag:"button",component:"button",...n})}const t=u.forwardRef(l);t.displayName="Button";exports.default=t;
@@ -1 +1 @@
1
- "use strict";const a=require("react/jsx-runtime"),n=require("react"),u=require("../box.cjs"),s=require("../core.cjs"),d=["name","onInput","onChange","autoFocus","readOnly","value","defaultChecked"];function l(t,o){const i=s.ObjectUtils.buildProps(t,d,{type:"checkbox"}),r=Array.isArray(t.indeterminate)?t.indeterminate[0]:t.indeterminate,e=n.useRef(null);return n.useImperativeHandle(o,()=>e.current),n.useEffect(()=>{e.current&&(e.current.indeterminate=!!r)},[e,r]),a.jsx(u.default,{tag:"input",ref:e,component:"checkbox",...i})}const c=n.forwardRef(l);c.displayName="Checkbox";module.exports=c;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),n=require("react"),i=require("../box.cjs"),s=require("../core.cjs"),l=["name","onInput","onChange","autoFocus","readOnly","value","defaultChecked"];function d(t,c){const u=s.ObjectUtils.buildProps(t,l,{type:"checkbox"}),r=Array.isArray(t.indeterminate)?t.indeterminate[0]:t.indeterminate,e=n.useRef(null);return n.useImperativeHandle(c,()=>e.current),n.useEffect(()=>{e.current&&(e.current.indeterminate=!!r)},[e,r]),a.jsx(i.default,{tag:"input",ref:e,component:"checkbox",...u})}const o=n.forwardRef(d);o.displayName="Checkbox";exports.default=o;
@@ -0,0 +1,7 @@
1
+ import { default as GridModel } from '../models/gridModel';
2
+ interface Props<TRow> {
3
+ grid: GridModel<TRow>;
4
+ scrollTop: number;
5
+ }
6
+ export default function DataGridBody<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,6 @@
1
+ import { default as GridModel } from '../models/gridModel';
2
+ interface Props<TRow> {
3
+ grid: GridModel<TRow>;
4
+ }
5
+ export default function DataGridBottomBar<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -2,5 +2,5 @@ import { default as GridModel } from '../models/gridModel';
2
2
  interface Props<TRow> {
3
3
  grid: GridModel<TRow>;
4
4
  }
5
- export default function DataGridColumnGroups<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
5
+ export default function DataGridColumnGroups<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element | null;
6
6
  export {};
@@ -0,0 +1,6 @@
1
+ import { default as GridModel } from '../models/gridModel';
2
+ interface Props<TRow> {
3
+ grid: GridModel<TRow>;
4
+ }
5
+ export default function DataGridContent<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ import { default as GridModel } from '../models/gridModel';
2
+ interface Props<TRow> {
3
+ grid: GridModel<TRow>;
4
+ }
5
+ export default function DataGridHeader<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ import { default as ColumnModel } from '../models/columnModel';
2
+ interface Props<TRow> {
3
+ column: ColumnModel<TRow>;
4
+ }
5
+ export default function DataGridHeaderCellContextMenu<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ import { default as ColumnModel } from '../models/columnModel';
2
+ interface Props<TRow> {
3
+ column: ColumnModel<TRow>;
4
+ }
5
+ export default function DataGridHeaderCellResizer<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -2,5 +2,5 @@ import { default as GridModel } from '../models/gridModel';
2
2
  interface Props<TRow> {
3
3
  grid: GridModel<TRow>;
4
4
  }
5
- export default function DataGridPagination<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
5
+ export default function DataGridPagination<TRow>(_props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
6
6
  export {};
@@ -0,0 +1,6 @@
1
+ import { default as GridModel } from '../models/gridModel';
2
+ interface Props<TRow> {
3
+ grid: GridModel<TRow>;
4
+ }
5
+ export default function DataGridTopBar<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ import { default as GridModel } from '../models/gridModel';
2
+ interface Props<TRow> {
3
+ grid: GridModel<TRow>;
4
+ }
5
+ export default function DataGridTopBarContextMenu<TRow>(props: Props<TRow>): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -28,8 +28,24 @@ export interface ColumnType<TRow> {
28
28
  export interface GridDefinition<TRow> {
29
29
  rowKey?: KeysMatching<TRow, Key> | ((rowData: TRow) => Key);
30
30
  columns: ColumnType<TRow>[];
31
+ showRowNumber?: boolean | {
32
+ pinned?: boolean;
33
+ };
34
+ rowSelection?: boolean | {
35
+ pinned?: boolean;
36
+ };
37
+ rowHeight?: number;
38
+ visibleRowsCount?: number;
31
39
  }
32
40
  export interface DataGridProps<TRow> {
33
41
  data: TRow[];
34
42
  def: GridDefinition<TRow>;
43
+ onSelectionChange?: (event: SelectionChangeEvent<TRow>) => void;
35
44
  }
45
+ interface SelectionChangeEvent<TRow, TKey = TRow[keyof TRow] | number | string> {
46
+ action: 'select' | 'deselect';
47
+ selectedRowKeys: TKey[];
48
+ affectedRowKeys: TKey[];
49
+ isAllSelected: boolean;
50
+ }
51
+ export {};
@@ -1,5 +1,5 @@
1
- import { ColumnType, PinPosition } from '../contracts/dataGridContract';
2
1
  import { default as GridModel } from './gridModel';
2
+ import { ColumnType, PinPosition } from '../contracts/dataGridContract';
3
3
  export default class ColumnModel<TRow> {
4
4
  private readonly def;
5
5
  readonly grid: GridModel<TRow>;
@@ -1,7 +1,7 @@
1
- import { DataGridProps, Key, PinPosition } from '../contracts/dataGridContract';
2
1
  import { default as ColumnModel } from './columnModel';
3
2
  import { default as GroupRowModel } from './groupRowModel';
4
3
  import { default as RowModel } from './rowModel';
4
+ import { DataGridProps, Key, PinPosition } from '../contracts/dataGridContract';
5
5
  export declare const EMPTY_CELL_KEY: Key;
6
6
  export declare const ROW_NUMBER_CELL_KEY: Key;
7
7
  export declare const ROW_SELECTION_CELL_KEY: Key;
@@ -24,26 +24,34 @@ export default class GridModel<TRow> {
24
24
  readonly gridTemplateColumns: import('../../../utils/memo').Memo<string>;
25
25
  readonly rows: import('../../../utils/memo').Memo<GroupRowModel<TRow>[] | RowModel<TRow>[]>;
26
26
  readonly flatRows: import('../../../utils/memo').Memo<(GroupRowModel<TRow> | RowModel<TRow>)[]>;
27
+ get rowHeight(): number;
27
28
  readonly sizes: import('../../../utils/memo').Memo<Record<string, string>>;
28
- readonly ROW_HEIGHT = 12;
29
+ readonly DEFAULT_ROW_HEIGHT_PX = 48;
29
30
  readonly MIN_COLUMN_WIDTH_PX = 48;
30
31
  readonly DEFAULT_COLUMN_WIDTH_PX = 200;
31
32
  isResizeMode: boolean;
32
- expandedGroupRow: Record<Key, boolean>;
33
+ expandedGroupRow: Set<Key>;
34
+ selectedRows: Set<Key>;
33
35
  get leftEdge(): number;
34
36
  get rightEdge(): number;
35
37
  readonly leftEdgeVarName = "--left-edge";
38
+ readonly rowHeightVarName = "--row-height";
39
+ private readonly _idMap;
40
+ getRowKey(row: TRow): Key;
36
41
  setSortColumn: (columnKey: Key, sortDirection?: SortDirection) => void;
37
42
  pinColumn: (uniqueKey: string, pin?: PinPosition) => void;
38
43
  toggleGrouping: (columnKey: Key) => void;
39
44
  unGroupAll: () => void;
40
45
  toggleGroupRow: (groupRowKey: Key) => void;
46
+ toggleRowSelection: (rowKey: Key) => void;
47
+ toggleRowsSelection: (rowKeys: Key[]) => void;
48
+ toggleSelectAllRows: () => void;
41
49
  toggleColumnVisibility: (columnKey: Key) => void;
42
50
  setWidth: (columnKey: Key, width: number) => void;
43
- groupColumns: Key[];
44
- hiddenColumns: Key[];
51
+ groupColumns: Set<Key>;
52
+ hiddenColumns: Set<Key>;
45
53
  private _sortColumn?;
46
54
  get sortColumn(): Key | undefined;
47
- private _sortDirection;
48
- get sortDirection(): SortDirection;
55
+ private _sortDirection?;
56
+ get sortDirection(): SortDirection | undefined;
49
57
  }
@@ -1,8 +1,8 @@
1
- import { Key } from '../contracts/dataGridContract';
2
1
  import { default as ColumnModel } from './columnModel';
3
2
  import { default as GridModel } from './gridModel';
4
3
  import { default as GroupRowCellModel } from './groupRowCellModel';
5
4
  import { default as RowModel } from './rowModel';
5
+ import { Key } from '../contracts/dataGridContract';
6
6
  export default class GroupRowModel<TRow> {
7
7
  readonly grid: GridModel<TRow>;
8
8
  readonly groupColumn: ColumnModel<TRow>;
@@ -10,13 +10,14 @@ export default class GroupRowModel<TRow> {
10
10
  readonly rowIndex: number;
11
11
  readonly groupValue: Key;
12
12
  constructor(grid: GridModel<TRow>, groupColumn: ColumnModel<TRow>, rows: RowModel<TRow>[] | GroupRowModel<TRow>[], rowIndex: number, groupValue: Key);
13
- get rowKey(): Key;
13
+ get key(): Key;
14
14
  parentRow?: GroupRowModel<TRow>;
15
15
  get cells(): GroupRowCellModel<TRow>[];
16
16
  get expanded(): boolean;
17
17
  get depth(): number;
18
18
  get count(): number;
19
19
  get flatRows(): (RowModel<TRow> | GroupRowModel<TRow>)[];
20
+ get allRows(): RowModel<TRow>[];
20
21
  get groupingColumn(): ColumnModel<TRow>;
21
22
  get groupingColumnGridColumn(): number;
22
23
  toggleRow(): void;
@@ -1,16 +1,17 @@
1
- import { Key } from '../contracts/dataGridContract';
2
1
  import { default as CellModel } from './cellModel';
3
2
  import { default as GridModel } from './gridModel';
4
3
  import { default as GroupRowModel } from './groupRowModel';
4
+ import { Key } from '../contracts/dataGridContract';
5
5
  export default class RowModel<TRow> {
6
6
  readonly grid: GridModel<TRow>;
7
- readonly row: TRow;
7
+ readonly data: TRow;
8
8
  readonly rowIndex: number;
9
- constructor(grid: GridModel<TRow>, row: TRow, rowIndex: number);
10
- get rowKey(): Key;
9
+ constructor(grid: GridModel<TRow>, data: TRow, rowIndex: number);
10
+ readonly key: Key;
11
11
  parentRow?: GroupRowModel<TRow>;
12
+ readonly count = 1;
12
13
  get cells(): CellModel<TRow>[];
13
- get count(): number;
14
- get flatRows(): RowModel<TRow>[];
15
- private getRowKey;
14
+ get selected(): boolean;
15
+ get flatRows(): this;
16
+ get allRows(): this;
16
17
  }
@@ -1 +1 @@
1
- "use strict";var ie=Object.defineProperty;var se=(a,e,t)=>e in a?ie(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var u=(a,e,t)=>se(a,typeof e!="symbol"?e+"":e,t);const n=require("react/jsx-runtime"),g=require("../box.cjs"),A=require("./grid.cjs"),p=require("react"),d=require("../core.cjs"),f=require("./button.cjs"),V=require("./checkbox.cjs"),w=require("./flex.cjs"),z=require("./tooltip.cjs"),oe=require("./baseSvg.cjs"),ne=require("./textbox.cjs"),re="NO_PIN";class G{constructor(e,t,i){u(this,"columns",[]);u(this,"_pin");u(this,"_inlineWidth");u(this,"resizeColumn",e=>{this.grid.isResizeMode=!0;const t=e.pageX,{MIN_COLUMN_WIDTH_PX:i,update:o}=this.grid,s=this.leafs.sumBy(c=>c.inlineWidth)-this.leafs.length*i,r=this.leafs.toRecord(c=>[c.key,c.inlineWidth]),h=d.FnUtils.throttle(c=>{const y=(c.pageX-t)*(this.pin==="RIGHT"?-1:1);this.leafs.forEach(x=>{const j=r[x.key],k=s>0?(j-i)/s*y:y/this.leafs.length,v=Math.round(j+k);x.setWidth(v<i?i:v)}),this.grid.headerRows.clear(),this.grid.sizes.clear(),o()},20),l=new AbortController,m=c=>{l.abort(),this.grid.isResizeMode=!1,o()};window.addEventListener("mousemove",h,l),window.addEventListener("mouseup",m,l)});u(this,"pinColumn",e=>{this.isLeaf?this._pin=e:this.columns.forEach(t=>t.pinColumn(e)),this.grid.pinColumn(this.uniqueKey,e)});u(this,"toggleGrouping",()=>{this.grid.toggleGrouping(this.key)});u(this,"sortColumn",(...e)=>{this.grid.setSortColumn(this.key,...e)});u(this,"setWidth",e=>{if(!this.isLeaf)throw new Error("Cannot set width for a parent column.");this._inlineWidth!==e&&(this._inlineWidth=e,this.grid.setWidth(this.key,e))});u(this,"toggleVisibility",()=>{this.grid.toggleColumnVisibility(this.key)});var o;this.def=e,this.grid=t,this.parent=i,this.columns=((o=e.columns)==null?void 0:o.map(s=>new G(e.pin?{...s,pin:e.pin}:s,t,this)))??[],this.isLeaf&&(this._inlineWidth=this.key==E?void 0:this.def.width??this.grid.DEFAULT_COLUMN_WIDTH_PX,this._pin=e.pin)}get visibleColumns(){return this.columns.filter(e=>e.isVisible)}get key(){return this.def.key}get header(){return this.def.header}get align(){return this.def.align}get isLeaf(){return this.columns.length===0}get pin(){if(this.isLeaf)return this._pin;const e=[...new Set(this.columns.flatMap(t=>t.pin))];if(e.length===1)return e[0]}get uniqueKey(){return`${this.key}${this.pin??""}`}getPinnedColumn(e){if(this.hasPin(e)){if(this.isLeaf)return this;const t=new G({...this.def,pin:e},this.grid,this.parent);return t.columns=this.columns.filter(i=>i.hasPin(e)).map(i=>{const o=i.getPinnedColumn(e);return o.parent=t,o}).filter(i=>!!i),t}}hasPin(e){return this.isLeaf?this._pin===e:this.columns.some(t=>t.hasPin(e))}get death(){return this.parent?this.parent.death+1:0}get flatColumns(){const e=[this];return e.push(...this.columns.flatMap(t=>t.flatColumns)),e}get inlineWidth(){if(this.isLeaf)return this._inlineWidth;const e=this.visibleColumns.map(t=>t.inlineWidth).filter(t=>typeof t=="number");if(e.length!==0)return e.sumBy(t=>t)}get left(){let e=0;if(this.parent){const{visibleColumns:t,left:i}=this.parent,o=t.findIndex(s=>s===this);e+=t.sumBy((s,r)=>r<o?s.inlineWidth??0:0),e+=i}else{const t=this.grid.columns.value.left.filter(o=>o.isVisible),i=t.findIndex(o=>o===this);e+=t.sumBy((o,s)=>s<i?o.inlineWidth??0:0)}return e}get right(){let e=0;if(this.parent){const{visibleColumns:t}=this.parent,i=t.reverse(),o=i.findIndex(s=>s===this);e+=i.sumBy((s,r)=>r<o?s.inlineWidth??0:0),e+=this.parent.right}else{const i=this.grid.columns.value.right.filter(s=>s.isVisible).reverse(),o=i.findIndex(s=>s===this);e+=i.sumBy((s,r)=>r<o?s.inlineWidth??0:0)}return e}get isEdge(){if(!this.pin)return!1;if(this.parent){const{visibleColumns:t}=this.parent;return(this.pin==="LEFT"?t.at(-1):t.at(0))===this&&this.parent.isEdge}return(this.pin==="LEFT"?this.grid.columns.value.left.filter(t=>t.isVisible).at(-1):this.grid.columns.value.right.filter(t=>t.isVisible).at(0))===this}get isVisible(){return this.isLeaf?!this.grid.hiddenColumns.includes(this.key):this.leafs.some(e=>e.isVisible)}get leafs(){return this.isLeaf?[this]:this.visibleColumns.flatMap(e=>e.leafs)}get groupColumnWidthVarName(){return`--${this.uniqueKey}-group-width`}get widthVarName(){return`--${this.uniqueKey}-width`}get leftVarName(){return`--${this.uniqueKey}-left`}get rightVarName(){return`--${this.uniqueKey}-right`}get gridRows(){return this.isLeaf?this.grid.columns.value.maxDeath-this.death:1}}class le{constructor(e,t,i){this.grid=e,this.row=t,this.column=i}get value(){return this.column.key===R?this.row.rowIndex+1:this.column.key===C?`> ${this.row.groupValue} (${this.row.count})`:null}}class F{constructor(e,t,i,o,s){u(this,"parentRow");this.grid=e,this.groupColumn=t,this.rows=i,this.rowIndex=o,this.groupValue=s,i.forEach(r=>r.parentRow=this)}get rowKey(){var e;return`${((e=this.parentRow)==null?void 0:e.rowKey)??""}${this.groupColumn.key}${this.groupValue}`}get cells(){return this.grid.columns.value.visibleLeafs.map(e=>new le(this.grid,this,e))}get expanded(){return this.grid.expandedGroupRow[this.rowKey]}get depth(){return this.parentRow?this.parentRow.depth+1:0}get count(){return this.rows.sumBy(e=>e.count,0)}get flatRows(){return this.expanded?[this,...this.rows.flatMap(e=>e.flatRows)]:[this]}get groupingColumn(){return this.grid.columns.value.leafs.findOrThrow(e=>e.key===C)}get groupingColumnGridColumn(){const{visibleLeafs:e}=this.grid.columns.value,{groupingColumn:t}=this;return e.sumBy(o=>o.pin===t.pin&&o.key!==E&&o.key!==T&&o.key!==R?1:0)}toggleRow(){this.grid.toggleGroupRow(this.rowKey)}}class ue{constructor(e,t,i){this.grid=e,this.row=t,this.column=i}get value(){return this.column.key===E?null:this.column.key===R?this.row.rowIndex+1:this.row.row[this.column.key]}}class H{constructor(e,t,i){u(this,"parentRow");this.grid=e,this.row=t,this.rowIndex=i,this.grid=e,this.row=t}get rowKey(){return this.getRowKey()}get cells(){return this.grid.columns.value.visibleLeafs.map(e=>new ue(this.grid,this,e))}get count(){return 1}get flatRows(){return[this]}getRowKey(){var i;const{rowKey:e}=this.grid.props.def,t=e?typeof e=="function"?e(this.row):this.row[e]:this.rowIndex;return`${((i=this.parentRow)==null?void 0:i.rowKey)??""}${t}`}}const E="empty-cell",R="row-number-cell",T="row-selection-cell",C="grouping-cell";class ae{constructor(e,t){u(this,"_sourceColumns",[]);u(this,"columns",d.memo(()=>{const e=this._sourceColumns.map(l=>l.getPinnedColumn("LEFT")).filter(l=>!!l),t=this._sourceColumns.map(l=>l.getPinnedColumn()).filter(l=>!!l),i=this._sourceColumns.map(l=>l.getPinnedColumn("RIGHT")).filter(l=>!!l),o=[...e,...t,...i].flatMap(l=>l.flatColumns),s=o.filter(l=>l.isLeaf),r=o.filter(l=>l.isLeaf&&l.isVisible),h=o.maxBy(l=>l.death)+1;return{left:e,middle:t,right:i,flat:o,leafs:s,visibleLeafs:r,maxDeath:h}}));u(this,"headerRows",d.memo(()=>this.columns.value.flat.groupBy(t=>t.death).sortBy(t=>t.key).map(t=>{var o,s,r;const i=t.values.groupBy(h=>h.pin??re).toRecord(h=>[h.key,h.values]);return[...((o=i.LEFT)==null?void 0:o.filter(h=>h.isVisible))??[],...((s=i.NO_PIN)==null?void 0:s.filter(h=>h.isVisible))??[],...((r=i.RIGHT)==null?void 0:r.filter(h=>h.isVisible))??[]]})));u(this,"gridTemplateColumns",d.memo(()=>{const{visibleLeafs:e}=this.columns.value,t=e.sumBy(r=>r.pin==="RIGHT"?1:0),i=e.length-t-1,o=i>0?`repeat(${i}, max-content)`:"",s=t>0?`repeat(${t}, max-content)`:"";return`${o} auto ${s}`}));u(this,"rows",d.memo(()=>{let e=this.props.data;if(this._sortColumn&&(e=e.sortBy(t=>t[this._sortColumn],this._sortDirection)),this.groupColumns.length>0){const t=(i,o,s)=>{const r=o[0];o=o.removeBy(l=>l===r);const h=this.columns.value.leafs.findOrThrow(l=>l.key===r);return this._sortColumn===C&&(i=i.sortBy(l=>l[r],this._sortDirection)),i.groupBy(l=>l[r]).map(l=>{let m;o.length>0?m=t(l.values,o,s+1):m=l.values.map((y,x)=>new H(this,y,s+1+x));const c=new F(this,h,m,s,l.key);return s+=1,c.expanded&&(s+=m.length),c})};return t(e,this.groupColumns,0)}return e.map((t,i)=>new H(this,t,i))}));u(this,"flatRows",d.memo(()=>this.rows.value.flatMap(e=>e.flatRows)));u(this,"sizes",d.memo(()=>{console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid sizes memo");const e=this.columns.value.flat.reduce((o,s)=>{const{inlineWidth:r}=s;return typeof r=="number"&&(o[s.widthVarName]=`${s.inlineWidth}px`),s.pin==="LEFT"&&(o[s.leftVarName]=`${s.left}px`),s.pin==="RIGHT"&&(o[s.rightVarName]=`${s.right}px`),o},{});e[this.leftEdgeVarName]=`${this.leftEdge}px`;const{visibleLeafs:t}=this.columns.value,i=t.find(o=>o.key===C);if(i){const o=t.sumBy(s=>s.pin===i.pin&&s.key!==R&&s.key!==T?s.inlineWidth??0:0);e[i.groupColumnWidthVarName]=`${o}px`}return this.groupColumns.forEach(o=>{const s=this.columns.value.leafs.findOrThrow(r=>r.key===o);e[s.groupColumnWidthVarName]=`${t.sumBy(r=>r.pin===s.pin?r.inlineWidth??0:0)}px`}),e}));u(this,"ROW_HEIGHT",12);u(this,"MIN_COLUMN_WIDTH_PX",48);u(this,"DEFAULT_COLUMN_WIDTH_PX",200);u(this,"isResizeMode",!1);u(this,"expandedGroupRow",{});u(this,"leftEdgeVarName","--left-edge");u(this,"setSortColumn",(e,...t)=>{if(t.length>0)[this._sortDirection]=t,this._sortColumn=this._sortDirection?e:void 0;else{const{_sortColumn:i,_sortDirection:o}=this;this._sortColumn=i===e&&o==="DESC"?void 0:e,this._sortDirection=i===e&&o==="ASC"?"DESC":"ASC"}this.headerRows.clear(),this.rows.clear(),this.flatRows.clear(),this.update()});u(this,"pinColumn",(e,t)=>{const i=this.columns.value.flat.findOrThrow(o=>o.uniqueKey===e);i.pin!==t&&i.pinColumn(t),this.columns.clear(),this.headerRows.clear(),this.gridTemplateColumns.clear(),this.rows.clear(),this.flatRows.clear(),this.sizes.clear(),this.update()});u(this,"toggleGrouping",e=>{this.groupColumns.includes(e)?(this.groupColumns=this.groupColumns.removeBy(i=>i===e),this.hiddenColumns=this.hiddenColumns.removeBy(i=>i===e)):(this.groupColumns=this.groupColumns.add(e),this.hiddenColumns=this.hiddenColumns.add(e));const t=this._sourceColumns.find(i=>i.key===C);if(this.groupColumns.length>0&&!t){const i=this._sourceColumns.sumBy(o=>o.key===R||o.key===T?1:0);this._sourceColumns.splice(i,0,new G({key:C},this))}else this.groupColumns.length===0&&t&&(this._sourceColumns=this._sourceColumns.removeBy(i=>i.key===C));this.columns.clear(),this.headerRows.clear(),this.gridTemplateColumns.clear(),this.rows.clear(),this.flatRows.clear(),this.sizes.clear(),this.update()});u(this,"unGroupAll",()=>{this.groupColumns=[],this._sourceColumns=this._sourceColumns.removeBy(e=>e.key===C),this.columns.clear(),this.headerRows.clear(),this.gridTemplateColumns.clear(),this.rows.clear(),this.flatRows.clear(),this.sizes.clear(),this.update()});u(this,"toggleGroupRow",e=>{e in this.expandedGroupRow?delete this.expandedGroupRow[e]:this.expandedGroupRow[e]=!0,this.rows.clear(),this.flatRows.clear(),this.update()});u(this,"toggleColumnVisibility",e=>{this.hiddenColumns.includes(e)?this.hiddenColumns=this.hiddenColumns.removeBy(t=>t===e):this.hiddenColumns=this.hiddenColumns.add(e),this.columns.clear(),this.headerRows.clear(),this.gridTemplateColumns.clear(),this.rows.clear(),this.flatRows.clear(),this.sizes.clear(),this.update()});u(this,"setWidth",(e,t)=>{const i=this.columns.value.leafs.find(s=>s.key===e);if(!i)throw new Error("Leaf column not found.");i.setWidth(t),this._sourceColumns.flatMap(s=>s.flatColumns).findOrThrow(s=>s.key===e).setWidth(t)});u(this,"groupColumns",[]);u(this,"hiddenColumns",[]);u(this,"_sortColumn");u(this,"_sortDirection","ASC");this.props=e,this.update=t,this._sourceColumns=e.def.columns.map(i=>new G(i,this)),this._sourceColumns.push(new G({key:E},this)),this._sourceColumns.unshift(new G({key:T,width:50,align:"center"},this)),this._sourceColumns.unshift(new G({key:R,pin:"LEFT",width:70,align:"right"},this))}get leftEdge(){return this.columns.value.left.sumBy(e=>e.inlineWidth??0)}get rightEdge(){return this.columns.value.right.sumBy(e=>e.inlineWidth??0)}get sortColumn(){return this._sortColumn}get sortDirection(){return this._sortDirection}}function he(a){const e=p.useMemo(()=>new ae(a,()=>i(s=>s+1)),[a]),[t,i]=p.useState(0);return p.useMemo(()=>Object.create(Object.getPrototypeOf(e),Object.getOwnPropertyDescriptors(e)),[e,t])}function ce(a){const{column:e}=a,{key:t,pin:i,left:o,right:s,isEdge:r,isLeaf:h,leafs:l,grid:m,header:c,gridRows:y,widthVarName:x,leftVarName:j,rightVarName:k,inlineWidth:v}=e,_=t===E,L=t===C,b=t===R,I=t===T,P=i==="LEFT",W=i==="RIGHT",M=P||i==="RIGHT",N=P&&o===0,B=P&&r,Y=W&&r,J=W&&s===0,S=h&&!_&&!b&&!I,Q=h?1:l.length,Z=!b&&!I,O=!b&&!I,ee=p.useMemo(()=>{if(b)return null;if(I)return n.jsx(V,{m:1});if(L){if(m.groupColumns.length===1){const $=m.columns.value.leafs.findOrThrow(te=>te.key===m.groupColumns[0]);return $.header??$.key}return"Group"}return c??t},[m.groupColumns]);return n.jsx(w,{component:"datagrid.header.cell",variant:{isRowNumber:b,isPinned:M,isFirstLeftPinned:N,isLastLeftPinned:B,isFirstRightPinned:Y,isLastRightPinned:J,isSortable:S},gridRow:y,gridColumn:Q,style:{width:`var(${x})`,left:P?`var(${j})`:void 0,right:W?`var(${k})`:void 0},children:!_&&n.jsxs(n.Fragment,{children:[n.jsx(w,{width:"fit",height:"fit",jc:e.align,props:{onClick:S?()=>e.sortColumn():void 0},children:n.jsxs(w,{overflow:"hidden",position:h?void 0:"sticky",ai:"center",transition:"none",pl:e.align?void 0:4,style:{left:i?void 0:`var(${m.leftEdgeVarName})`},children:[n.jsx(g.default,{overflow:"hidden",textOverflow:"ellipsis",textWrap:"nowrap",children:ee}),t===m.sortColumn&&n.jsx(g.default,{pl:(v??0)<58?0:2,children:n.jsx(d.ArrowIcon,{width:"16px",rotate:m.sortDirection==="ASC"?0:180,fill:"violet-950"})}),O&&n.jsx(g.default,{minWidth:10})]})}),Z&&n.jsx(de,{column:e}),O&&n.jsx(me,{column:e})]})})}function de(a){const{column:e}=a;return n.jsx(w,{height:"fit",ai:"center",position:"absolute",right:e.pin==="RIGHT"?void 0:0,left:e.pin!=="RIGHT"?void 0:0,py:3,children:n.jsx(g.default,{cursor:"col-resize",px:.75,className:"resizer",height:"fit",props:{onMouseDown:e.resizeColumn,onTouchStart:e.resizeColumn},children:n.jsx(g.default,{width:.5,height:"fit",bgColor:"gray-400",hoverGroup:{resizer:{bgColor:"gray-600"}}})})})}function me(a){const{column:e}=a,[t,i,o]=d.useVisibility({hideOnScroll:!0,event:"mousedown"}),[s,r]=p.useState({top:0,left:0}),h=p.useMemo(()=>s.left>window.innerWidth/2,[s.left]),l=e.isLeaf&&(e.grid.sortColumn!==e.key||e.grid.sortDirection==="DESC"),m=e.isLeaf&&(e.grid.sortColumn!==e.key||e.grid.sortDirection==="ASC"),c=e.isLeaf&&e.grid.sortColumn===e.key,y=e.pin!=="LEFT",x=e.pin!=="RIGHT",j=!!e.pin,k=e.isLeaf&&e.key!==C,v=e.isLeaf&&e.key===C,_=l||m||c,L=y||x||j;return n.jsx(w,{position:"absolute",right:e.pin==="RIGHT"?2.5:4,top:"1/2",translateY:-3,ai:"center",children:n.jsxs(f,{clean:!0,onClick:()=>i(!t),width:6,height:6,cursor:"pointer",userSelect:"none",borderRadius:1,borderColor:"gray-200",display:"flex",jc:"center",ai:"center",transition:"none",bgColor:"gray-200",hover:{bgColor:"gray-300"},children:[n.jsx(d.DotsIcon,{fill:"violet-950"}),t&&n.jsxs(z,{bgColor:"white",width:56,b:1,borderColor:"gray-300",borderRadius:1,display:"flex",d:"column",mt:4,py:2,overflow:"hidden",translateX:h?-55:-5,onPositionChange:r,ref:o,shadow:"medium-shadow",children:[l&&n.jsxs(f,{clean:!0,display:"flex",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:()=>e.sortColumn("ASC"),children:[n.jsx(d.ArrowIcon,{width:"1rem",fill:"violet-950"}),"Sort Ascending"]}),m&&n.jsxs(f,{clean:!0,display:"flex",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:()=>e.sortColumn("DESC"),children:[n.jsx(d.ArrowIcon,{width:"1rem",fill:"violet-950",rotate:180}),"Sort Descending"]}),c&&n.jsxs(f,{clean:!0,display:"flex",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:()=>e.sortColumn(void 0),children:[n.jsx(g.default,{width:4}),"Clear Sort"]}),_&&(L||k||v)&&n.jsx(g.default,{bb:1,my:2,borderColor:"gray-300"}),y&&n.jsxs(f,{clean:!0,display:"flex",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:()=>e.pinColumn("LEFT"),children:[n.jsx(d.PinIcon,{width:"1rem",fill:"violet-950"}),"Pin Left"]}),x&&n.jsxs(f,{clean:!0,display:"flex",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:()=>e.pinColumn("RIGHT"),children:[n.jsx(d.PinIcon,{width:"1rem",fill:"violet-950",rotate:-90}),"Pin Right"]}),j&&n.jsxs(f,{clean:!0,display:"flex",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:()=>e.pinColumn(),children:[n.jsx(g.default,{width:4}),"Unpin"]}),_&&L&&(k||v)&&n.jsx(g.default,{bb:1,my:2,borderColor:"gray-300"}),k&&n.jsxs(f,{clean:!0,display:"flex",ai:"center",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:e.toggleGrouping,children:[n.jsx(g.default,{children:n.jsx(d.GroupingIcon,{width:"1rem",fill:"violet-950"})}),n.jsxs(g.default,{textWrap:"nowrap",children:[" Group by ",e.header??e.key]})]}),v&&n.jsxs(f,{clean:!0,display:"flex",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:e.grid.unGroupAll,children:[n.jsx(g.default,{children:n.jsx(d.GroupingIcon,{width:"1rem",fill:"violet-950"})}),n.jsx(g.default,{textWrap:"nowrap",children:" Un-Group All"})]})]})]})})}function D(a){const{children:e,column:t,style:i,...o}=a,{key:s,pin:r,left:h,right:l,isEdge:m,align:c,widthVarName:y,leftVarName:x,rightVarName:j}=t,k=s===E,v=s===R,_=s===T,L=r==="LEFT",b=r==="RIGHT",I=L||b,P=L&&h===0,W=L&&m,M=b&&m,N=b&&l===0,B=!_&&!k;return n.jsxs(w,{component:"datagrid.cell",props:{role:"cell"},variant:{isPinned:I,isFirstLeftPinned:P,isLastLeftPinned:W,isFirstRightPinned:M,isLastRightPinned:N,isRowNumber:v,isRowSelection:_},jc:c,style:{width:`var(${y})`,left:L?`var(${x})`:void 0,right:b?`var(${j})`:void 0,...i},...o,children:[B&&n.jsx(g.default,{px:4,textOverflow:"ellipsis",overflow:"hidden",textWrap:"nowrap",children:e}),_&&e]})}function ge(a){const{row:e}=a;return n.jsx(w,{className:"grid-row",display:"contents",props:{role:"rowgroup"},children:e.cells.map(t=>{const{key:i,pin:o,groupColumnWidthVarName:s}=t.column,r=o==="RIGHT";if(i===C)return n.jsx(D,{column:t.column,style:{width:`var(${s})`,right:r?"0":void 0},br:e.groupingColumn.pin==="LEFT"?1:void 0,gridColumn:e.groupingColumnGridColumn,pl:4*e.depth,children:n.jsx(f,{display:"contents",clean:!0,onClick:()=>e.toggleRow(),cursor:"pointer",children:t.value})},i);if(i===T)return n.jsx(D,{column:t.column,children:n.jsx(V,{m:1})},i);if(o!==e.groupingColumn.pin||i===E||i===R)return n.jsx(D,{column:t.column,children:t.value},i)})})}function pe(a){const{row:e}=a;return n.jsx(w,{className:"grid-row",display:"contents",props:{role:"row"},children:e.cells.map(t=>n.jsx(D,{column:t.column,children:t.column.key===T?n.jsx(V,{}):t.value},t.column.key))})}function fe(a){const{grid:e}=a,t=p.useMemo(()=>e.groupColumns.length===0?null:e.groupColumns.map((i,o)=>{const s=e.columns.value.leafs.findOrThrow(r=>r.key===i);return n.jsxs(p.Fragment,{children:[">",n.jsxs(w,{component:"datagrid.columnGroups.item",children:[s.header??s.key,n.jsx(f,{component:"datagrid.columnGroups.item.icon",onClick:()=>e.toggleGrouping(s.key),children:n.jsx(d.CloseSvg,{fill:"currentColor",width:"100%"})})]})]},i)}),[e.groupColumns]);return n.jsxs(w,{component:"datagrid.columnGroups",position:"relative",children:[n.jsx(Ce,{grid:e}),t&&n.jsx(d.GroupingIcon,{width:"1rem",fill:"violet-950"}),t,n.jsxs(w,{position:"absolute",justifySelf:"flex-end",right:2,top:2,className:"parent",children:[n.jsx(w,{position:"absolute",width:8,height:8,right:0,jc:"center",children:n.jsx(d.SearchIcon,{fill:"violet-950",width:"1rem"})}),n.jsx(ne,{placeholder:"Search...",height:8,width:50,zIndex:1,bgColor:"transparent"})]})]})}function Ce(a){const{grid:e}=a,[t,i,o]=d.useVisibility({event:"mousedown"}),s=p.useMemo(()=>e.columns.value.leafs.filter(r=>![E,R,T,C].includes(r.key)),[e.columns.value.leafs]);return n.jsxs(f,{clean:!0,cursor:"pointer",p:1,hover:{bgColor:"gray-200",borderRadius:1},onClick:()=>i(!t),children:[n.jsx(oe,{viewBox:"0 0 24 24",width:"20",fill:"currentColor",...a,children:n.jsx("path",{d:"M5 6h14M5 12h14M5 18h14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}),t&&n.jsx(z,{bgColor:"white",width:56,b:1,borderColor:"gray-300",borderRadius:1,display:"flex",d:"column",mt:4,py:2,translateX:-1,shadow:"medium-shadow",ref:o,overflow:"auto",maxHeight:100,children:s.map(r=>n.jsxs(f,{clean:!0,display:"flex",gap:2,p:3,cursor:"pointer",hover:{bgColor:"gray-200"},onClick:h=>{h.stopPropagation(),r.toggleVisibility()},children:[n.jsx(V,{checked:r.isVisible,onChange:()=>{},focus:{outline:0}}),r.header??r.key]},r.key))})]})}function U(a){const e=he(a),{isResizeMode:t}=e,i=p.useMemo(()=>(console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid render headers"),e.headerRows.value.map(r=>r.map(h=>n.jsx(ce,{column:h},h.uniqueKey)))),[e.headerRows.value]),o=p.useRef(null),s=p.useCallback(d.FnUtils.throttle(r=>{var h;(h=o.current)==null||h.setScrollTop(r.target.scrollTop)},100),[o.current]);return console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid render"),n.jsxs(g.default,{component:"datagrid",style:e.sizes.value,props:{role:"presentation"},children:[n.jsx(fe,{grid:e}),n.jsxs(g.default,{overflowX:"scroll",props:{onScroll:s},children:[n.jsx(A,{component:"datagrid.header",variant:{isResizeMode:t},style:{gridTemplateColumns:e.gridTemplateColumns.value},children:i}),n.jsx(X,{ref:o,grid:e})]}),n.jsxs(g.default,{p:3,bgColor:"gray-200",bt:1,borderColor:"gray-400",children:["Rows: ",a.data.length]})]})}U.displayName="DataGrid";const q=10,K=25,we=q+K*2;function ye(a,e){const{grid:t}=a,i=d.DEFAULT_REM_DIVIDER*t.ROW_HEIGHT,[o,s]=p.useState(0),r=Math.max(0,Math.floor(o/i)-K),h=p.useMemo(()=>(console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid render rows"),t.flatRows.value.take(we,r).map(c=>c instanceof F?n.jsx(ge,{row:c},c.rowKey):n.jsx(pe,{row:c},c.rowKey))),[t.flatRows.value,r]);p.useImperativeHandle(e,()=>({setScrollTop:s}));const l=t.flatRows.value.length;return n.jsx(g.default,{height:t.ROW_HEIGHT*q+4,children:n.jsx(g.default,{style:{height:`${l*i}px`},children:n.jsx(A,{width:"max-content",minWidth:"fit",transition:"none",style:{transform:`translateY(${r*i}px)`,gridTemplateColumns:t.gridTemplateColumns.value},children:h})})})}const X=p.forwardRef(ye);X.displayName="Rows";module.exports=U;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),m=require("../box.cjs"),C=require("./flex.cjs"),w=require("react"),u=require("../core.cjs"),g=require("./button.cjs"),I=require("./checkbox.cjs"),U=require("./grid.cjs"),S=require("./semantics.cjs"),q=require("./tooltip.cjs"),he=require("./baseSvg.cjs");function me(a){const{grid:e}=a;return n.jsxs(C.default,{component:"datagrid.bottomBar",children:[n.jsxs(m.default,{children:["Rows: ",e.props.data.length]}),e.props.def.rowSelection&&n.jsxs(m.default,{children:["Selected: ",e.selectedRows.size]})]})}class L{constructor(e,t,i){this.def=e,this.grid=t,this.parent=i,this.columns=e.columns?.map(s=>new L(e.pin?{...s,pin:e.pin}:s,t,this))??[],this.isLeaf&&(this._inlineWidth=this.key==T?void 0:this.def.width??this.grid.DEFAULT_COLUMN_WIDTH_PX,this._pin=e.pin)}columns=[];get visibleColumns(){return this.columns.filter(e=>e.isVisible)}get key(){return this.def.key}get header(){return this.def.header}get align(){return this.def.align}get isLeaf(){return this.columns.length===0}_pin;get pin(){if(this.isLeaf)return this._pin;const e=[...new Set(this.columns.flatMap(t=>t.pin))];if(e.length===1)return e[0]}get uniqueKey(){return`${this.key}${this.pin??""}`}getPinnedColumn(e){if(this.hasPin(e)){if(this.isLeaf)return this;const t=new L({...this.def,pin:e},this.grid,this.parent);return t.columns=this.columns.filter(i=>i.hasPin(e)).map(i=>{const s=i.getPinnedColumn(e);return s.parent=t,s}).filter(i=>!!i),t}}hasPin(e){return this.isLeaf?this._pin===e:this.columns.some(t=>t.hasPin(e))}get death(){return this.parent?this.parent.death+1:0}get flatColumns(){const e=[this];return e.push(...this.columns.flatMap(t=>t.flatColumns)),e}_inlineWidth;get inlineWidth(){if(this.isLeaf)return this._inlineWidth;const e=this.visibleColumns.map(t=>t.inlineWidth).filter(t=>typeof t=="number");if(e.length!==0)return e.sumBy(t=>t)}get left(){let e=0;if(this.parent){const{visibleColumns:t,left:i}=this.parent,s=t.findIndex(o=>o===this);e+=t.sumBy((o,r)=>r<s?o.inlineWidth??0:0),e+=i}else{const t=this.grid.columns.value.left.filter(s=>s.isVisible),i=t.findIndex(s=>s===this);e+=t.sumBy((s,o)=>o<i?s.inlineWidth??0:0)}return e}get right(){let e=0;if(this.parent){const{visibleColumns:t}=this.parent,i=t.reverse(),s=i.findIndex(o=>o===this);e+=i.sumBy((o,r)=>r<s?o.inlineWidth??0:0),e+=this.parent.right}else{const i=this.grid.columns.value.right.filter(o=>o.isVisible).reverse(),s=i.findIndex(o=>o===this);e+=i.sumBy((o,r)=>r<s?o.inlineWidth??0:0)}return e}get isEdge(){if(!this.pin)return!1;if(this.parent){const{visibleColumns:t}=this.parent;return(this.pin==="LEFT"?t.at(-1):t.at(0))===this&&this.parent.isEdge}return(this.pin==="LEFT"?this.grid.columns.value.left.filter(t=>t.isVisible).at(-1):this.grid.columns.value.right.filter(t=>t.isVisible).at(0))===this}get isVisible(){return this.isLeaf?!this.grid.hiddenColumns.has(this.key):this.leafs.some(e=>e.isVisible)}get leafs(){return this.isLeaf?[this]:this.visibleColumns.flatMap(e=>e.leafs)}get groupColumnWidthVarName(){return`--${this.uniqueKey}-group-width`}get widthVarName(){return`--${this.uniqueKey}-width`}get leftVarName(){return`--${this.uniqueKey}-left`}get rightVarName(){return`--${this.uniqueKey}-right`}get gridRows(){return this.isLeaf?this.grid.columns.value.maxDeath-this.death:1}resizeColumn=e=>{this.grid.isResizeMode=!0;const t=e.pageX,{MIN_COLUMN_WIDTH_PX:i,update:s}=this.grid,o=this.leafs.sumBy(h=>h.inlineWidth)-this.leafs.length*i,r=this.leafs.toRecord(h=>[h.key,h.inlineWidth]),c=u.FnUtils.throttle(h=>{const p=(h.pageX-t)*(this.pin==="RIGHT"?-1:1);this.leafs.forEach(x=>{const k=r[x.key],b=o>0?(k-i)/o*p:p/this.leafs.length,y=Math.round(k+b);x.setWidth(y<i?i:y)}),this.grid.sizes.clear(),s()},40),l=new AbortController,d=h=>{l.abort(),this.grid.isResizeMode=!1,s()};window.addEventListener("mousemove",c,l),window.addEventListener("mouseup",d,l)};pinColumn=e=>{this.isLeaf?this._pin=e:this.columns.forEach(t=>t.pinColumn(e)),this.grid.pinColumn(this.uniqueKey,e)};toggleGrouping=()=>{this.grid.toggleGrouping(this.key)};sortColumn=(...e)=>{this.grid.setSortColumn(this.key,...e)};setWidth=e=>{if(!this.isLeaf)throw new Error("Cannot set width for a parent column.");this._inlineWidth!==e&&(this._inlineWidth=e,this.grid.setWidth(this.key,e))};toggleVisibility=()=>{this.grid.toggleColumnVisibility(this.key)}}class pe{constructor(e,t,i){this.grid=e,this.row=t,this.column=i}get value(){return this.column.key===v?this.row.rowIndex+1:this.column.key===f?`${this.row.groupValue} (${this.row.count})`:null}}class X{constructor(e,t,i,s,o){this.grid=e,this.groupColumn=t,this.rows=i,this.rowIndex=s,this.groupValue=o,i.forEach(r=>r.parentRow=this)}get key(){return`${this.parentRow?.key??""}${this.groupColumn.key}${this.groupValue}`}parentRow;get cells(){return this.grid.columns.value.visibleLeafs.map(e=>new pe(this.grid,this,e))}get expanded(){return this.grid.expandedGroupRow.has(this.key)}get depth(){return this.parentRow?this.parentRow.depth+1:0}get count(){return this.rows.sumBy(e=>e.count,0)}get flatRows(){return this.expanded?[this,...this.rows.flatMap(e=>e.flatRows)]:[this]}get allRows(){return this.rows.flatMap(e=>e.allRows)}get groupingColumn(){return this.grid.columns.value.leafs.findOrThrow(e=>e.key===f)}get groupingColumnGridColumn(){const{visibleLeafs:e}=this.grid.columns.value,{groupingColumn:t}=this;return e.sumBy(s=>s.pin===t.pin&&s.key!==T&&s.key!==_&&s.key!==v?1:0)}toggleRow(){this.grid.toggleGroupRow(this.key)}}class ge{constructor(e,t,i){this.grid=e,this.row=t,this.column=i}get value(){return this.column.key===T?null:this.column.key===v?this.row.rowIndex+1:this.row.data[this.column.key]}}class ${constructor(e,t,i){this.grid=e,this.data=t,this.rowIndex=i,this.grid=e,this.data=t,this.key=this.grid.getRowKey(t)}key;parentRow;count=1;get cells(){return this.grid.columns.value.visibleLeafs.map(e=>new ge(this.grid,this,e))}get selected(){return this.grid.selectedRows.has(this.key)}get flatRows(){return this}get allRows(){return this}}const fe="NO_PIN",T="empty-cell",v="row-number-cell",_="row-selection-cell",f="grouping-cell";class we{constructor(e,t){if(this.props=e,this.update=t,console.debug("\x1B[32m%s\x1B[0m","[react-box]: DataGrid GridModel ctor"),this._sourceColumns=e.def.columns.map(i=>new L(i,this)),this._sourceColumns.push(new L({key:T},this)),e.def.rowSelection){const i=typeof e.def.rowSelection=="object"&&e.def.rowSelection.pinned?"LEFT":void 0;this._sourceColumns.unshift(new L({key:_,pin:i,width:50,align:"center"},this))}if(e.def.showRowNumber){const i=typeof e.def.showRowNumber=="object"&&e.def.showRowNumber.pinned?"LEFT":void 0;this._sourceColumns.unshift(new L({key:v,pin:i,width:70,align:"right"},this))}}_sourceColumns=[];columns=u.memo(()=>{console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid columns memo");const e=this._sourceColumns.map(l=>l.getPinnedColumn("LEFT")).filter(l=>!!l),t=this._sourceColumns.map(l=>l.getPinnedColumn()).filter(l=>!!l),i=this._sourceColumns.map(l=>l.getPinnedColumn("RIGHT")).filter(l=>!!l),s=[...e,...t,...i].flatMap(l=>l.flatColumns),o=s.filter(l=>l.isLeaf),r=s.filter(l=>l.isLeaf&&l.isVisible),c=s.maxBy(l=>l.death)+1;return{left:e,middle:t,right:i,flat:s,leafs:o,visibleLeafs:r,maxDeath:c}});headerRows=u.memo(()=>(console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid headerRows memo"),this.columns.value.flat.groupBy(t=>t.death).sortBy(t=>t.key).map(t=>{const i=t.values.groupBy(s=>s.pin??fe).toRecord(s=>[s.key,s.values]);return[...i.LEFT?.filter(s=>s.isVisible)??[],...i.NO_PIN?.filter(s=>s.isVisible)??[],...i.RIGHT?.filter(s=>s.isVisible)??[]]})));gridTemplateColumns=u.memo(()=>{console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid gridTemplateColumns memo");const{visibleLeafs:e}=this.columns.value,t=e.sumBy(r=>r.pin==="RIGHT"?1:0),i=e.length-t-1,s=i>0?`repeat(${i}, max-content)`:"",o=t>0?`repeat(${t}, max-content)`:"";return`${s} auto ${o}`});rows=u.memo(()=>{console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid rows memo");let e=this.props.data;if(this._sortColumn&&(e=e.sortBy(t=>t[this._sortColumn],this._sortDirection)),this.groupColumns.size>0){const t=(i,s,o)=>{const r=s.values().next().value;s.delete(r);const c=this.columns.value.leafs.findOrThrow(l=>l.key===r);return this._sortColumn===f&&(i=i.sortBy(l=>l[r],this._sortDirection)),i.groupBy(l=>l[r]).map(l=>{let d;s.size>0?d=t(l.values,new Set(s),o+1):d=l.values.map((p,x)=>new $(this,p,o+1+x));const h=new X(this,c,d,o,l.key);return o+=1,h.expanded&&(o+=d.length),h})};return t(e,new Set(this.groupColumns),0)}return e.map((t,i)=>new $(this,t,i))});flatRows=u.memo(()=>(console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid flatRows memo"),this.rows.value.flatMap(e=>e.flatRows)));get rowHeight(){return this.props.def.rowHeight??this.DEFAULT_ROW_HEIGHT_PX}sizes=u.memo(()=>{console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid sizes memo");const e=this.columns.value.flat.reduce((s,o)=>{const{inlineWidth:r}=o;return typeof r=="number"&&(s[o.widthVarName]=`${o.inlineWidth}px`),o.pin==="LEFT"&&(s[o.leftVarName]=`${o.left}px`),o.pin==="RIGHT"&&(s[o.rightVarName]=`${o.right}px`),s},{});e[this.rowHeightVarName]=`${this.rowHeight}px`,e[this.leftEdgeVarName]=`${this.leftEdge}px`;const{visibleLeafs:t}=this.columns.value,i=t.find(s=>s.key===f);if(i){const s=t.sumBy(o=>o.pin===i.pin&&o.key!==v&&o.key!==_?o.inlineWidth??0:0);e[i.groupColumnWidthVarName]=`${s}px`}return this.groupColumns.forEach(s=>{const o=this.columns.value.leafs.findOrThrow(r=>r.key===s);e[o.groupColumnWidthVarName]=`${t.sumBy(r=>r.pin===o.pin?r.inlineWidth??0:0)}px`}),e});DEFAULT_ROW_HEIGHT_PX=48;MIN_COLUMN_WIDTH_PX=48;DEFAULT_COLUMN_WIDTH_PX=200;isResizeMode=!1;expandedGroupRow=new Set;selectedRows=new Set;get leftEdge(){return this.columns.value.left.sumBy(e=>e.inlineWidth??0)}get rightEdge(){return this.columns.value.right.sumBy(e=>e.inlineWidth??0)}leftEdgeVarName="--left-edge";rowHeightVarName="--row-height";_idMap=new WeakMap;getRowKey(e){const{rowKey:t}=this.props.def;return t?typeof t=="function"?t(e):e[t]:(this._idMap.has(e)||this._idMap.set(e,crypto.randomUUID()),this._idMap.get(e))}setSortColumn=(e,...t)=>{if(t.length>0)[this._sortDirection]=t,this._sortColumn=this._sortDirection?e:void 0;else{const{_sortColumn:i,_sortDirection:s}=this;this._sortColumn=i===e&&s==="DESC"?void 0:e,this._sortDirection=i===e&&s==="ASC"?"DESC":"ASC"}this.headerRows.clear(),this.rows.clear(),this.flatRows.clear(),this.update()};pinColumn=(e,t)=>{const i=this.columns.value.flat.findOrThrow(s=>s.uniqueKey===e);i.pin!==t&&i.pinColumn(t),this.columns.clear(),this.headerRows.clear(),this.gridTemplateColumns.clear(),this.rows.clear(),this.flatRows.clear(),this.sizes.clear(),this.update()};toggleGrouping=e=>{this.groupColumns=new Set(this.groupColumns),this.hiddenColumns=new Set(this.hiddenColumns),this.groupColumns.has(e)?(this.groupColumns.delete(e),this.hiddenColumns.delete(e)):(this.groupColumns.add(e),this.hiddenColumns.add(e));const t=this._sourceColumns.find(i=>i.key===f);if(this.groupColumns.size>0&&!t){const i=this._sourceColumns.sumBy(s=>s.key===v||s.key===_?1:0);this._sourceColumns.splice(i,0,new L({key:f},this))}else this.groupColumns.size===0&&t&&(this._sourceColumns=this._sourceColumns.removeBy(i=>i.key===f));this.columns.clear(),this.headerRows.clear(),this.gridTemplateColumns.clear(),this.rows.clear(),this.flatRows.clear(),this.sizes.clear(),this.update()};unGroupAll=()=>{this.groupColumns=new Set,this._sourceColumns=this._sourceColumns.removeBy(e=>e.key===f),this.columns.clear(),this.headerRows.clear(),this.gridTemplateColumns.clear(),this.rows.clear(),this.flatRows.clear(),this.sizes.clear(),this.update()};toggleGroupRow=e=>{this.expandedGroupRow=new Set(this.expandedGroupRow),this.expandedGroupRow.has(e)?this.expandedGroupRow.delete(e):this.expandedGroupRow.add(e),this.rows.clear(),this.flatRows.clear(),this.update()};toggleRowSelection=e=>{this.toggleRowsSelection([e])};toggleRowsSelection=e=>{this.selectedRows=new Set(this.selectedRows);const t=e.every(i=>this.selectedRows.has(i));t?e.forEach(i=>this.selectedRows.delete(i)):e.forEach(i=>this.selectedRows.add(i)),this.flatRows.clear(),this.update(),this.props.onSelectionChange?.({action:t?"deselect":"select",affectedRowKeys:e,selectedRowKeys:Array.from(this.selectedRows),isAllSelected:this.selectedRows.size===this.props.data.length})};toggleSelectAllRows=()=>{this.toggleRowsSelection(this.props.data.map(e=>this.getRowKey(e)))};toggleColumnVisibility=e=>{this.hiddenColumns=new Set(this.hiddenColumns),this.hiddenColumns.has(e)?this.hiddenColumns.delete(e):this.hiddenColumns.add(e),this.columns.clear(),this.headerRows.clear(),this.gridTemplateColumns.clear(),this.rows.clear(),this.flatRows.clear(),this.sizes.clear(),this.update()};setWidth=(e,t)=>{const i=this.columns.value.leafs.find(o=>o.key===e);if(!i)throw new Error("Leaf column not found.");i.setWidth(t),this._sourceColumns.flatMap(o=>o.flatColumns).findOrThrow(o=>o.key===e).setWidth(t)};groupColumns=new Set;hiddenColumns=new Set;_sortColumn;get sortColumn(){return this._sortColumn}_sortDirection="ASC";get sortDirection(){return this._sortDirection}}function N(a){const{children:e,column:t,style:i,...s}=a,{key:o,pin:r,left:c,right:l,isEdge:d,align:h,widthVarName:p,leftVarName:x,rightVarName:k}=t,b=o===T,y=o===v,j=o===_,G=r==="LEFT",R=r==="RIGHT",D=G||R,M=G&&c===0,B=G&&d,P=R&&d,W=R&&l===0,V=!j&&!b;return n.jsxs(C.default,{component:"datagrid.cell",props:{role:"cell"},variant:{isPinned:D,isFirstLeftPinned:M,isLastLeftPinned:B,isFirstRightPinned:P,isLastRightPinned:W,isRowNumber:y,isRowSelection:j},jc:h,style:{width:`var(${p})`,height:`var(${t.grid.rowHeightVarName})`,left:G?`var(${x})`:void 0,right:R?`var(${k})`:void 0,...i},...s,children:[V&&n.jsx(m.default,{px:4,textOverflow:"ellipsis",overflow:"hidden",textWrap:"nowrap",children:e}),j&&e]})}N.displayName="DataGridCell";function Y(a){const{row:e}=a,t=w.useCallback(()=>{e.grid.toggleRowsSelection(e.allRows.map(i=>i.key))},[]);return n.jsx(C.default,{className:"grid-row",display:"contents",props:{role:"rowgroup"},children:e.cells.map(i=>{const{key:s,pin:o,groupColumnWidthVarName:r}=i.column,c=o==="RIGHT";if(s===f)return n.jsx(N,{column:i.column,style:{width:`var(${r})`,right:c?"0":void 0},br:e.groupingColumn.pin==="LEFT"?1:void 0,gridColumn:e.groupingColumnGridColumn,pl:4*e.depth,children:n.jsxs(g.default,{clean:!0,onClick:()=>e.toggleRow(),cursor:"pointer",display:"flex",gap:1,ai:"center",children:[n.jsx(u.ExpandIcon,{fill:"currentColor",width:"14px",height:"14px",rotate:e.expanded?0:-90}),i.value]})},s);if(s===_){const l=e.allRows,d=l.every(p=>p.selected),h=!d&&l.some(p=>p.selected);return n.jsx(N,{column:i.column,children:n.jsx(I.default,{variant:"datagrid",m:1,checked:d,indeterminate:h,onChange:t})},s)}if(o!==e.groupingColumn.pin||s===T||s===v)return n.jsx(N,{column:i.column,children:i.value},s)})})}Y.displayName="DataGridGroupRow";function K(a){const{row:e}=a,t=w.useCallback(i=>{e.grid.toggleRowSelection(e.key)},[]);return n.jsx(C.default,{className:"grid-row",display:"contents",props:{role:"row"},children:e.cells.map(i=>n.jsx(N,{column:i.column,children:i.column.key===_?n.jsx(I.default,{variant:"datagrid",checked:e.selected,onChange:t}):i.value},i.column.key))})}K.displayName="DataGridRow";const Ce=10,F=20;function J(a){const{grid:e,scrollTop:t}=a,i=e.flatRows.value.length,s=Math.max(0,Math.floor(t/e.rowHeight)-F),o=e.props.def.visibleRowsCount??Ce,r=w.useMemo(()=>{console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid render rows");const c=o+F*2;return e.flatRows.value.take(c,s).map(d=>d instanceof X?n.jsx(Y,{row:d},d.key):n.jsx(K,{row:d},d.key))},[e.flatRows.value,s]);return console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid render DataGridBody"),n.jsx(m.default,{style:{height:e.rowHeight*o+e.rowHeight/5},children:n.jsx(m.default,{style:{height:`${i*e.rowHeight}px`},children:n.jsx(U.default,{width:"max-content",minWidth:"fit",transition:"none",style:{transform:`translateY(${s*e.rowHeight}px)`,gridTemplateColumns:e.gridTemplateColumns.value},children:r})})})}J.displayName="DataGridBody";function Q(a){const{column:e}=a,[t,i,s]=u.useVisibility({hideOnScroll:!0,event:"mousedown"}),[o,r]=w.useState({top:0,left:0}),c=w.useMemo(()=>o.left>window.innerWidth/2,[o.left]),l=e.isLeaf&&(e.grid.sortColumn!==e.key||e.grid.sortDirection==="DESC"),d=e.isLeaf&&(e.grid.sortColumn!==e.key||e.grid.sortDirection==="ASC"),h=e.isLeaf&&e.grid.sortColumn===e.key,p=e.pin!=="LEFT",x=e.pin!=="RIGHT",k=!!e.pin,b=e.isLeaf&&e.key!==f,y=e.isLeaf&&e.key===f,j=l||d||h,G=p||x||k;return n.jsx(C.default,{position:"absolute",right:e.pin==="RIGHT"?2.5:4,top:"1/2",translateY:-3,ai:"center",children:n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu",onClick:()=>i(!t),children:[n.jsx(S.Span,{component:"datagrid.header.cell.contextMenu.icon",children:n.jsx(u.DotsIcon,{fill:"currentColor"})}),t&&n.jsxs(q.default,{component:"datagrid.header.cell.contextMenu.tooltip",variant:{openLeft:c},onPositionChange:r,ref:s,children:[l&&n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu.tooltip.item",onClick:()=>e.sortColumn("ASC"),children:[n.jsx(S.Span,{component:"datagrid.header.cell.contextMenu.tooltip.item.icon",children:n.jsx(u.SortIcon,{width:"100%",fill:"currentColor"})}),"Sort Ascending"]}),d&&n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu.tooltip.item",onClick:()=>e.sortColumn("DESC"),children:[n.jsx(S.Span,{component:"datagrid.header.cell.contextMenu.tooltip.item.icon",children:n.jsx(u.SortIcon,{width:"100%",fill:"currentColor",rotate:180})}),"Sort Descending"]}),h&&n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu.tooltip.item",onClick:()=>e.sortColumn(void 0),children:[n.jsx(m.default,{width:4}),"Clear Sort"]}),j&&(G||b||y)&&n.jsx(m.default,{bb:1,my:2,borderColor:"gray-300"}),p&&n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu.tooltip.item",onClick:()=>e.pinColumn("LEFT"),children:[n.jsx(S.Span,{component:"datagrid.header.cell.contextMenu.tooltip.item.icon",children:n.jsx(u.PinIcon,{width:"100%",fill:"currentColor"})}),"Pin Left"]}),x&&n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu.tooltip.item",onClick:()=>e.pinColumn("RIGHT"),children:[n.jsx(S.Span,{component:"datagrid.header.cell.contextMenu.tooltip.item.icon",children:n.jsx(u.PinIcon,{width:"100%",fill:"currentColor",rotate:-90})}),"Pin Right"]}),k&&n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu.tooltip.item",onClick:()=>e.pinColumn(),children:[n.jsx(m.default,{width:4}),"Unpin"]}),j&&G&&(b||y)&&n.jsx(m.default,{bb:1,my:2,borderColor:"gray-300"}),b&&n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu.tooltip.item",onClick:e.toggleGrouping,children:[n.jsx(S.Span,{component:"datagrid.header.cell.contextMenu.tooltip.item.icon",children:n.jsx(u.GroupingIcon,{width:"100%",fill:"currentColor"})}),n.jsxs(m.default,{textWrap:"nowrap",children:["Group by ",e.header??e.key]})]}),y&&n.jsxs(g.default,{component:"datagrid.header.cell.contextMenu.tooltip.item",onClick:e.grid.unGroupAll,children:[n.jsx(S.Span,{component:"datagrid.header.cell.contextMenu.tooltip.item.icon",children:n.jsx(u.GroupingIcon,{width:"100%",fill:"currentColor"})}),n.jsx(m.default,{textWrap:"nowrap",children:"Un-Group All"})]})]})]})})}Q.displayName="DataGridHeaderCellContextMenu";function Z(a){const{column:e}=a;return n.jsx(C.default,{height:"fit",ai:"center",position:"absolute",right:e.pin==="RIGHT"?void 0:0,left:e.pin!=="RIGHT"?void 0:0,py:3,children:n.jsx(m.default,{cursor:"col-resize",px:.75,className:"resizer",height:"fit",props:{onMouseDown:e.resizeColumn,onTouchStart:e.resizeColumn},children:n.jsx(m.default,{component:"datagrid.header.cell.resizer"})})})}Z.displayName="DataGridHeaderCellResizer";function ee(a){const{column:e}=a,{key:t,pin:i,left:s,right:o,isEdge:r,isLeaf:c,leafs:l,grid:d,header:h,gridRows:p,widthVarName:x,leftVarName:k,rightVarName:b,inlineWidth:y}=e,j=t===T,G=t===f,R=t===v,D=t===_,M=i==="LEFT",B=i==="RIGHT",P=M||i==="RIGHT",W=M&&s===0,V=M&&r,le=B&&r,ae=B&&o===0,z=c&&!j&&!R&&!D,de=c?1:l.length,ue=!R&&!D,A=!R&&!D,O=w.useCallback(()=>{d.toggleSelectAllRows()},[]),ce=w.useMemo(()=>{if(R)return null;if(D){const E=d.selectedRows.size===d.props.data.length,H=!E&&d.selectedRows.size>0;return n.jsx(I.default,{variant:"datagrid",m:1,indeterminate:H,checked:E,onChange:O})}if(G){if(d.groupColumns.size===1){const E=d.columns.value.leafs.findOrThrow(H=>H.key===d.groupColumns.values().next().value);return E.header??E.key}return"Group"}return h??t},[d.groupColumns,d.selectedRows,O]);return n.jsx(C.default,{component:"datagrid.header.cell",variant:{isRowNumber:R,isPinned:P,isFirstLeftPinned:W,isLastLeftPinned:V,isFirstRightPinned:le,isLastRightPinned:ae,isSortable:z},gridRow:p,gridColumn:de,style:{width:`var(${x})`,left:M?`var(${k})`:void 0,right:B?`var(${b})`:void 0},children:!j&&n.jsxs(n.Fragment,{children:[n.jsx(C.default,{width:"fit",height:"fit",jc:e.align,props:{onClick:z?()=>e.sortColumn():void 0},children:n.jsxs(C.default,{overflow:"hidden",position:c?void 0:"sticky",ai:"center",transition:"none",pl:e.align?void 0:4,style:{left:i?void 0:`var(${d.leftEdgeVarName})`},children:[n.jsx(m.default,{overflow:"hidden",textOverflow:"ellipsis",textWrap:"nowrap",children:ce}),t===d.sortColumn&&n.jsx(m.default,{pl:(y??0)<58?0:2,children:n.jsx(u.SortIcon,{width:"16px",rotate:d.sortDirection==="ASC"?0:180,fill:"currentColor"})}),A&&n.jsx(m.default,{minWidth:10})]})}),ue&&n.jsx(Z,{column:e}),A&&n.jsx(Q,{column:e})]})})}ee.displayName="DataGridHeaderCell";function te(a){const{grid:e}=a,{isResizeMode:t}=e;return n.jsx(U.default,{component:"datagrid.header",variant:{isResizeMode:t},style:{gridTemplateColumns:e.gridTemplateColumns.value},children:e.headerRows.value.map(i=>i.map(s=>n.jsx(ee,{column:s},s.uniqueKey)))})}te.displayName="DataGridHeader";function ie(a){const{grid:e}=a,[t,i]=w.useState(0),s=w.useCallback(u.FnUtils.throttle(o=>{i(o.target.scrollTop)},100),[]);return n.jsxs(m.default,{overflowX:"scroll",props:{onScroll:s},children:[n.jsx(te,{grid:e}),n.jsx(J,{grid:e,scrollTop:t})]})}ie.displayName="DataGridContent";function se(a){const{grid:e}=a;return e.groupColumns.size===0?null:n.jsxs(C.default,{component:"datagrid.topBar.columnGroups",children:[n.jsx(S.Span,{component:"datagrid.topBar.columnGroups.icon",children:n.jsx(u.GroupingIcon,{width:"100%",fill:"currentColor"})}),Array.from(e.groupColumns,t=>{const i=e.columns.value.leafs.findOrThrow(s=>s.key===t);return n.jsxs(w.Fragment,{children:[n.jsx(u.ExpandIcon,{fill:"currentColor",width:"14px",height:"14px",rotate:-90}),n.jsxs(C.default,{component:"datagrid.topBar.columnGroups.item",children:[i.header??i.key,n.jsx(g.default,{component:"datagrid.topBar.columnGroups.item.icon",onClick:()=>e.toggleGrouping(i.key),children:n.jsx(u.CloseSvg,{fill:"currentColor",width:"100%"})})]})]},t)})]})}se.displayName="DataGridColumnGroups";function ne(a){const{grid:e}=a,[t,i,s]=u.useVisibility({event:"mousedown"}),o=w.useMemo(()=>e.columns.value.leafs.filter(r=>![T,v,_,f].includes(r.key)),[e.columns.value.leafs]);return n.jsxs(g.default,{component:"datagrid.topBar.contextMenu",onClick:()=>i(!t),children:[n.jsx(he.default,{viewBox:"0 0 24 24",width:"20",fill:"currentColor",...a,children:n.jsx("path",{d:"M5 6h14M5 12h14M5 18h14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"})}),t&&n.jsx(q.default,{component:"datagrid.topBar.contextMenu.tooltip",ref:s,children:o.map(r=>n.jsxs(g.default,{component:"datagrid.topBar.contextMenu.tooltip.item",onClick:c=>{c.stopPropagation(),r.toggleVisibility()},children:[n.jsx(I.default,{variant:"datagrid",checked:r.isVisible,onChange:()=>{},focus:{outline:0}}),r.header??r.key]},r.key))})]})}ne.displayName="DataGridTopBarContextMenu";function oe(a){const{grid:e}=a;return n.jsxs(C.default,{component:"datagrid.topBar",position:"relative",children:[n.jsx(ne,{grid:e}),n.jsx(se,{grid:e})]})}oe.displayName="DataGridTopBar";function xe(a){const[e,t]=w.useState(0),i=w.useRef();return i.current||(i.current=new we(a,()=>t(s=>s+1))),i.current}function re(a){const e=xe(a);return console.debug("\x1B[36m%s\x1B[0m","[react-box]: DataGrid render"),n.jsxs(m.default,{component:"datagrid",style:e.sizes.value,props:{role:"presentation"},children:[n.jsx(oe,{grid:e}),n.jsx(ie,{grid:e}),n.jsx(me,{grid:e})]})}re.displayName="DataGrid";exports.default=re;
@@ -1,2 +1,2 @@
1
1
  import { DataGridProps } from './dataGrid/contracts/dataGridContract';
2
- export default function DataGrid<TRow extends {}>(props: DataGridProps<TRow>): import("react/jsx-runtime").JSX.Element;
2
+ export default function DataGrid<TRow extends object>(props: DataGridProps<TRow>): import("react/jsx-runtime").JSX.Element;