@semcore/data-table 3.6.3 → 3.7.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.
@@ -1 +1 @@
1
- {"version":3,"file":"Head.js","names":["SORTING_ICON","desc","SortDesc","asc","SortAsc","ariaSort","Head","name","event","asProps","$onSortClick","code","props","ref","setRef","forwardRef","columns","width","map","column","renderColumn","styles","use","hidden","SColumn","Flex","SHead","Box","SSortIcon","sortDirection","ariaSortValue","sortable","active","undefined","isGroup","length","cSize","flattenColumns","getFixedStyle","value","style","flexBasis","flex","setVar","varWidth","sstyled","fixed","resizable","refColumn","callAllEventHandlers","onClick","bindHandlerSortClick","onKeyDown","bindHandlerKeyDown","children","renderColumns","SHeadWrapper","Children","columnsChildren","onResize","$scrollRef","sticky","disabledScroll","getScrollOffsetValue","offsetLeftSum","offsetRightSum","logger","warn","displayName","scrollStyles","origin","Component"],"sources":["../../src/Head.tsx"],"sourcesContent":["import React from 'react';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { Box, Flex } from '@semcore/flex-box';\nimport ScrollArea from '@semcore/scroll-area';\nimport SortDesc from '@semcore/icon/SortDesc/m';\nimport SortAsc from '@semcore/icon/SortAsc/m';\nimport { callAllEventHandlers } from '@semcore/utils/lib/assignProps';\nimport { flattenColumns, getFixedStyle, getScrollOffsetValue } from './utils';\nimport type { Column } from './types';\nimport logger from '@semcore/utils/lib/logger';\nimport { setRef } from '@semcore/utils/lib/ref';\nimport 'resize-observer-polyfill';\n\nimport scrollStyles from './style/scroll-area.shadow.css';\n\nconst SORTING_ICON = {\n desc: SortDesc,\n asc: SortAsc,\n} as const;\nconst ariaSort = {\n desc: 'descending',\n asc: 'ascending',\n} as const;\n\ntype AsProps = {\n $onSortClick: (name: string, event: React.MouseEvent | React.KeyboardEvent) => void;\n $scrollRef: (instance: unknown) => void;\n use: 'primary' | 'secondary';\n columnsChildren: Column[];\n onResize: ResizeObserverCallback;\n sticky: boolean;\n disabledScroll?: boolean;\n ['data-ui-name']: string;\n};\n\nclass Head extends Component<AsProps> {\n columns: Column[] = [];\n\n static displayName: string;\n\n bindHandlerSortClick = (name: string) => (event: React.MouseEvent) => {\n this.asProps.$onSortClick(name, event);\n };\n\n bindHandlerKeyDown = (name: string) => (event: React.KeyboardEvent) => {\n if (event.code === 'Enter') {\n this.asProps.$onSortClick(name, event);\n }\n };\n\n refColumn = (props: Column['props']) => (ref: HTMLElement) => {\n setRef(props.ref, ref);\n if (props.forwardRef) {\n setRef(props.forwardRef, ref);\n }\n };\n\n renderColumns(columns: Column[], width: number) {\n return columns.map((column) => this.renderColumn(column, width));\n }\n\n renderColumn(column: Column, width: number) {\n const { styles, use, hidden } = this.asProps;\n const SColumn = Flex;\n const SHead = Box;\n const SSortIcon = SORTING_ICON[column.sortDirection];\n const ariaSortValue =\n column.sortable && column.active ? ariaSort[column.sortDirection] : undefined;\n const isGroup = column.columns?.length > 0;\n const cSize = isGroup ? flattenColumns(column.columns).length : 1;\n const [name, value] = getFixedStyle(column, this.columns);\n\n const style = {\n flexBasis: column.props.flex === undefined && `${width * cSize}%`,\n ...column.props.style,\n };\n\n if (name !== undefined && value !== undefined) {\n style[name] = value;\n }\n\n if (!column.setVar) {\n style['flexBasis'] = `var(${column.varWidth})`;\n }\n\n return sstyled(styles)(\n <SColumn\n role={isGroup ? undefined : 'columnheader'}\n key={column.name}\n use={use}\n fixed={column.fixed}\n resizable={column.resizable}\n sortable={column.sortable}\n active={column.active}\n group={isGroup}\n tabIndex={column.sortable && 0}\n {...column.props}\n ref={this.refColumn(column.props)}\n onClick={callAllEventHandlers(\n column.props.onClick,\n column.sortable ? this.bindHandlerSortClick(column.name) : undefined,\n )}\n onKeyDown={callAllEventHandlers(\n column.props.onKeyDown,\n column.sortable ? this.bindHandlerKeyDown(column.name) : undefined,\n )}\n style={style}\n hidden={hidden}\n aria-sort={ariaSortValue}\n >\n {isGroup ? (\n <>\n <SColumn role=\"columnheader\" groupHead use={use}>\n <div>{column.props.children}</div>\n </SColumn>\n <SHead>{this.renderColumns(column.columns, 100 / cSize)}</SHead>\n </>\n ) : (\n <>\n <div>{column.props.children}</div>\n {column.sortable ? <SSortIcon active={column.active} /> : null}\n </>\n )}\n </SColumn>,\n );\n }\n\n render() {\n const SHead = Root;\n const SHeadWrapper = Box;\n const { Children, styles, columnsChildren, onResize, $scrollRef, sticky, disabledScroll } =\n this.asProps;\n\n this.columns = flattenColumns(columnsChildren);\n\n const [offsetLeftSum, offsetRightSum] = getScrollOffsetValue(this.columns);\n\n logger.warn(\n sticky,\n \"'sticky' property is deprecated, use '<Sticky/>' wrapper\",\n this.asProps['data-ui-name'] || Head.displayName,\n );\n\n return sstyled(styles)(\n <SHeadWrapper sticky={sticky} role=\"rowgroup\">\n <ScrollArea\n styles={scrollStyles}\n use:left={`${offsetLeftSum}px`}\n use:right={`${offsetRightSum}px`}\n shadow\n onResize={onResize}\n >\n <ScrollArea.Container ref={$scrollRef} disabledScroll={disabledScroll}>\n <SHead render={Box} role=\"row\">\n {this.renderColumns(columnsChildren, 100 / this.columns.length)}\n </SHead>\n </ScrollArea.Container>\n </ScrollArea>\n {Children.origin}\n </SHeadWrapper>,\n );\n }\n}\n\nexport default Head;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Head.js","names":["SORTING_ICON","desc","SortDesc","asc","SortAsc","ariaSort","Head","name","event","asProps","$onSortClick","code","props","ref","setRef","forwardRef","columns","width","map","column","renderColumn","styles","use","hidden","SColumn","Flex","SHead","Box","SSortWrapper","SSortIcon","sortDirection","ariaSortValue","sortable","active","undefined","isGroup","length","cSize","flattenColumns","getFixedStyle","value","style","flexBasis","flex","setVar","varWidth","sstyled","fixed","resizable","justifyContent","includes","borderLeft","borderRight","refColumn","callAllEventHandlers","onClick","bindHandlerSortClick","onKeyDown","bindHandlerKeyDown","children","renderColumns","SHeadWrapper","Children","columnsChildren","onResize","$scrollRef","sticky","disabledScroll","getScrollOffsetValue","offsetLeftSum","offsetRightSum","logger","warn","displayName","scrollStyles","origin","Component"],"sources":["../../src/Head.tsx"],"sourcesContent":["import React from 'react';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { Box, Flex } from '@semcore/flex-box';\nimport ScrollArea from '@semcore/scroll-area';\nimport SortDesc from '@semcore/icon/SortDesc/m';\nimport SortAsc from '@semcore/icon/SortAsc/m';\nimport { callAllEventHandlers } from '@semcore/utils/lib/assignProps';\nimport { flattenColumns, getFixedStyle, getScrollOffsetValue } from './utils';\nimport type { Column } from './types';\nimport logger from '@semcore/utils/lib/logger';\nimport { setRef } from '@semcore/utils/lib/ref';\nimport 'resize-observer-polyfill';\n\nimport scrollStyles from './style/scroll-area.shadow.css';\n\nconst SORTING_ICON = {\n desc: SortDesc,\n asc: SortAsc,\n} as const;\nconst ariaSort = {\n desc: 'descending',\n asc: 'ascending',\n} as const;\n\ntype AsProps = {\n $onSortClick: (name: string, event: React.MouseEvent | React.KeyboardEvent) => void;\n $scrollRef: (instance: unknown) => void;\n use: 'primary' | 'secondary';\n columnsChildren: Column[];\n onResize: ResizeObserverCallback;\n sticky: boolean;\n disabledScroll?: boolean;\n ['data-ui-name']: string;\n};\n\nclass Head extends Component<AsProps> {\n columns: Column[] = [];\n\n static displayName: string;\n\n bindHandlerSortClick = (name: string) => (event: React.MouseEvent) => {\n this.asProps.$onSortClick(name, event);\n };\n\n bindHandlerKeyDown = (name: string) => (event: React.KeyboardEvent) => {\n if (event.code === 'Enter') {\n this.asProps.$onSortClick(name, event);\n }\n };\n\n refColumn = (props: Column['props']) => (ref: HTMLElement) => {\n setRef(props.ref, ref);\n if (props.forwardRef) {\n setRef(props.forwardRef, ref);\n }\n };\n\n renderColumns(columns: Column[], width: number) {\n return columns.map((column) => this.renderColumn(column, width));\n }\n\n renderColumn(column: Column, width: number) {\n const { styles, use, hidden } = this.asProps;\n const SColumn = Flex;\n const SHead = Box;\n const SSortWrapper = 'div';\n const SSortIcon = SORTING_ICON[column.sortDirection];\n const ariaSortValue =\n column.sortable && column.active ? ariaSort[column.sortDirection] : undefined;\n const isGroup = column.columns?.length > 0;\n const cSize = isGroup ? flattenColumns(column.columns).length : 1;\n const [name, value] = getFixedStyle(column, this.columns);\n\n const style = {\n flexBasis: column.props.flex === undefined && `${width * cSize}%`,\n ...column.props.style,\n };\n\n if (name !== undefined && value !== undefined) {\n style[name] = value;\n }\n\n if (!column.setVar) {\n style['flexBasis'] = `var(${column.varWidth})`;\n }\n\n return sstyled(styles)(\n <SColumn\n role={isGroup ? undefined : 'columnheader'}\n key={column.name}\n use={use}\n fixed={column.fixed}\n resizable={column.resizable}\n sortable={column.sortable}\n sortIconFloat={column.props.justifyContent?.includes('end')}\n borderLeft={isGroup ? false : column.borderLeft}\n borderRight={isGroup ? false : column.borderRight}\n active={isGroup ? false : column.active}\n group={isGroup}\n tabIndex={column.sortable && 0}\n {...column.props}\n ref={this.refColumn(column.props)}\n onClick={callAllEventHandlers(\n column.props.onClick,\n column.sortable ? this.bindHandlerSortClick(column.name) : undefined,\n )}\n onKeyDown={callAllEventHandlers(\n column.props.onKeyDown,\n column.sortable ? this.bindHandlerKeyDown(column.name) : undefined,\n )}\n style={style}\n hidden={hidden}\n aria-sort={ariaSortValue}\n >\n {isGroup ? (\n <>\n <SColumn\n role=\"columnheader\"\n groupHead\n use={use}\n active={column.active}\n borderLeft={column.borderLeft}\n borderRight={column.borderRight}\n >\n <div>{column.props.children}</div>\n </SColumn>\n <SHead>{this.renderColumns(column.columns, 100 / cSize)}</SHead>\n </>\n ) : (\n <>\n {column.props.children}\n {column.sortable ? (\n <SSortWrapper>\n <SSortIcon active={column.active} />\n </SSortWrapper>\n ) : null}\n </>\n )}\n </SColumn>,\n );\n }\n\n render() {\n const SHead = Root;\n const SHeadWrapper = Box;\n const { Children, styles, columnsChildren, onResize, $scrollRef, sticky, disabledScroll } =\n this.asProps;\n\n this.columns = flattenColumns(columnsChildren);\n\n const [offsetLeftSum, offsetRightSum] = getScrollOffsetValue(this.columns);\n\n logger.warn(\n sticky,\n \"'sticky' property is deprecated, use '<Sticky/>' wrapper\",\n this.asProps['data-ui-name'] || Head.displayName,\n );\n\n return sstyled(styles)(\n <SHeadWrapper sticky={sticky} role=\"rowgroup\">\n <ScrollArea\n styles={scrollStyles}\n use:left={`${offsetLeftSum}px`}\n use:right={`${offsetRightSum}px`}\n shadow\n onResize={onResize}\n >\n <ScrollArea.Container ref={$scrollRef} disabledScroll={disabledScroll}>\n <SHead render={Box} role=\"row\">\n {this.renderColumns(columnsChildren, 100 / this.columns.length)}\n </SHead>\n </ScrollArea.Container>\n </ScrollArea>\n {Children.origin}\n </SHeadWrapper>,\n );\n }\n}\n\nexport default Head;\n"],"mappings":"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"}
@@ -2,6 +2,13 @@ SDataTable {
2
2
  position: relative;
3
3
  }
4
4
 
5
+ SDataTable[compact] {
6
+ & SColumn,
7
+ & SCell {
8
+ padding: var(--intergalactic-spacing-3x, 12px) var(--intergalactic-spacing-2x, 8px);
9
+ }
10
+ }
11
+
5
12
  SHeadWrapper {
6
13
  position: relative;
7
14
  }
@@ -22,16 +29,16 @@ SHead {
22
29
 
23
30
  SColumn {
24
31
  display: flex;
25
- align-items: center;
32
+ align-items: flex-start;
26
33
  flex-grow: 1;
27
34
  font-size: var(--intergalactic-fs-100, 12px);
28
35
  color: var(--intergalactic-text-primary, #191b23);
29
36
  box-sizing: border-box;
30
37
  position: relative;
31
38
 
32
- &:focus {
39
+ &:focus-visible {
33
40
  outline: none;
34
- box-shadow: var(--intergalactic-keyboard-focus, 0px 0px 0px 3px rgba(0, 143, 248, 0.3));
41
+ box-shadow: inset var(--intergalactic-keyboard-focus, 0px 0px 0px 3px rgba(0, 143, 248, 0.3));
35
42
  }
36
43
  }
37
44
 
@@ -44,7 +51,6 @@ SColumn[hidden] {
44
51
 
45
52
  SColumn[use='primary'] {
46
53
  padding: var(--intergalactic-spacing-3x, 12px);
47
- border-right: 1px solid var(--intergalactic-border-secondary, #e0e1e9);
48
54
  border-bottom: 1px solid var(--intergalactic-border-secondary, #e0e1e9);
49
55
  background-color: var(--intergalactic-table-th-primary-cell, #f4f5f9);
50
56
  }
@@ -55,10 +61,6 @@ SColumn[use='secondary'] {
55
61
  background-color: var(--intergalactic-table-th-secondary-cell, #ffffff);
56
62
  }
57
63
 
58
- SColumn[use]:last-child {
59
- border-right: none;
60
- }
61
-
62
64
  SColumn[group][use] {
63
65
  display: flex;
64
66
  flex-wrap: wrap;
@@ -68,19 +70,14 @@ SColumn[group][use] {
68
70
  padding: 0;
69
71
  }
70
72
 
71
- SColumn[groupHead][use] {
73
+ SColumn[groupHead] {
72
74
  justify-content: center;
73
- border-right: none;
74
75
  /* for resizable */
75
76
  z-index: 1;
76
77
  }
77
78
 
78
- SColumn[groupHead][use='primary'] {
79
- border-bottom: 1px solid var(--intergalactic-border-secondary, #e0e1e9);
80
- }
81
-
82
- SColumn[groupHead][use='secondary'] {
83
- border-bottom: 1px solid var(--intergalactic-border-table-accent-border, #a9abb6);
79
+ SColumn[groupHead] {
80
+ border-bottom: none;
84
81
  }
85
82
 
86
83
  SColumn[sortable] {
@@ -89,15 +86,36 @@ SColumn[sortable] {
89
86
  &[use='primary']:hover {
90
87
  background-color: var(--intergalactic-table-th-primary-cell-hover, #e0e1e9);
91
88
  }
89
+
90
+ &:hover SSortWrapper {
91
+ display: block;
92
+ }
92
93
  }
93
94
 
94
- SColumn[active][use='primary'] {
95
+ SColumn[use='primary'][active] {
95
96
  background-color: var(--intergalactic-table-th-primary-cell-active, #e0e1e9);
97
+ width: 100%;
98
+ }
99
+
100
+ SColumn[active] SSortIcon {
101
+ position: relative;
102
+ }
103
+
104
+ SColumn[active] SSortWrapper {
105
+ display: block;
106
+ width: 16px;
107
+ margin-left: var(--intergalactic-spacing-1x, 4px);
108
+ }
109
+
110
+ SColumn[sortIconFloat] SSortWrapper {
111
+ width: 0;
96
112
  }
97
113
 
98
114
  SColumn[resizable] {
115
+ border-right: 1px solid transparent;
116
+
99
117
  &:hover:after {
100
- background: var(--intergalactic-table-th-primary-cell-hover, #e0e1e9);
118
+ border-right-color: var(--intergalactic-border-table-accent-border, #a9abb6);
101
119
  }
102
120
 
103
121
  &:after {
@@ -105,10 +123,11 @@ SColumn[resizable] {
105
123
  position: absolute;
106
124
  bottom: 0;
107
125
  right: -1px;
108
- height: 100vh;
109
- width: 1px;
126
+ height: 100%;
127
+ width: 5px;
110
128
  background: transparent;
111
129
  cursor: col-resize;
130
+ border-right: 1px solid transparent;
112
131
  }
113
132
  }
114
133
 
@@ -118,13 +137,54 @@ SColumn[fixed] {
118
137
  z-index: 2;
119
138
  }
120
139
 
121
- SSortIcon {
122
- fill: var(--intergalactic-icon-secondary-neutral, #a9abb6);
123
- margin-left: calc(var(--intergalactic-spacing-1x, 4px) + var(--intergalactic-spacing-05x, 2px));
140
+ SColumn[borderLeft],
141
+ SCell[borderLeft] {
142
+ border-left: 1px solid var(--intergalactic-border-secondary, #e0e1e9);
143
+ }
144
+
145
+ SColumn[borderRight],
146
+ SCell[borderRight] {
147
+ border-right: 1px solid var(--intergalactic-border-secondary, #e0e1e9);
124
148
  }
125
149
 
126
- SSortIcon[active] {
150
+ SSortIcon {
127
151
  fill: var(--intergalactic-icon-secondary-neutral-hover-active, #8a8e9b);
152
+ position: absolute;
153
+ top: -2px;
154
+ right: 0;
155
+ }
156
+
157
+ SSortWrapper {
158
+ display: none;
159
+ flex-shrink: 999;
160
+ position: relative;
161
+ flex-basis: 20px;
162
+ height: 0;
163
+ }
164
+
165
+ SSortWrapper:before {
166
+ content: '';
167
+ position: absolute;
168
+ top: -2px;
169
+ right: 0;
170
+ width: 20px;
171
+ height: 16px;
172
+ }
173
+
174
+ SColumn[use='primary'] SSortWrapper:before {
175
+ background: linear-gradient(
176
+ 270deg,
177
+ var(--intergalactic-table-th-primary-cell-hover, #e0e1e9) 67.5%,
178
+ rgba(224, 225, 233, 0) 105%
179
+ );
180
+ }
181
+
182
+ SColumn[use='secondary'] SSortWrapper:before {
183
+ background: linear-gradient(
184
+ 270deg,
185
+ var(--intergalactic-table-th-secondary-cell, #ffffff) 67.5%,
186
+ rgba(255, 255, 255, 0) 105%
187
+ );
128
188
  }
129
189
 
130
190
  SBodyWrapper {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["import React from 'react';\nimport { ROW_GROUP } from './DataTable';\nimport { Property } from 'csstype';\n\nexport type PseudoChildPropsGetter = (\n props: { [propName: string]: unknown },\n rowData: { [columnName: string]: unknown },\n index: number,\n) => { [propName: string]: unknown };\nexport type PropsLayer = {\n childrenPropsGetter?: PseudoChildPropsGetter;\n [propName: string]: unknown;\n};\n\nexport type SortDirection = 'asc' | 'desc';\nexport type Column<\n Props extends { [propName: string]: unknown } = { [propName: string]: unknown },\n> = {\n name: string;\n active: boolean;\n width: number;\n fixed?: 'left' | 'right';\n resizable?: boolean;\n sortable?: boolean | SortDirection;\n sortDirection: SortDirection;\n varWidth: string;\n setVar: boolean;\n data?: unknown;\n props: {\n name: string;\n ref: React.RefObject<HTMLElement>;\n } & Partial<{\n flex: Property.Flex;\n onClick: (event: React.MouseEvent) => void;\n onKeyDown: (event: React.KeyboardEvent) => void;\n forwardRef: React.Ref<HTMLElement>;\n style: React.CSSProperties;\n fixed: 'left' | 'right';\n children: React.ReactNode[];\n resizable: boolean;\n sortable: boolean | SortDirection;\n sortDirection: SortDirection;\n }> &\n Props;\n columns: Column[];\n};\nexport type Cell = Pick<Column, 'name' | 'fixed' | 'data'> & {\n cssVar: string | string[];\n cellPropsLayers: PropsLayer[];\n};\nexport type RowData<\n Data extends { [columnName: string]: unknown } = { [columnName: string]: unknown },\n> = Data &\n Partial<{\n name: string;\n [ROW_GROUP]: RowData[];\n }>;\nexport type NestedCells = (Cell | NestedCells)[] & { flatRowData?: RowData };\n"],"mappings":";;AACA"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["import React from 'react';\nimport { ROW_GROUP } from './DataTable';\nimport { Property } from 'csstype';\n\nexport type PseudoChildPropsGetter = (\n props: { [propName: string]: unknown },\n rowData: { [columnName: string]: unknown },\n index: number,\n) => { [propName: string]: unknown };\nexport type PropsLayer = {\n childrenPropsGetter?: PseudoChildPropsGetter;\n [propName: string]: unknown;\n};\n\nexport type SortDirection = 'asc' | 'desc';\nexport type Column<\n Props extends { [propName: string]: unknown } = { [propName: string]: unknown },\n> = {\n name: string;\n active: boolean;\n width: number;\n fixed?: 'left' | 'right';\n resizable?: boolean;\n sortable?: boolean | SortDirection;\n sortDirection: SortDirection;\n varWidth: string;\n setVar: boolean;\n data?: unknown;\n vBorders?: boolean;\n borderLeft?: boolean;\n borderRight?: boolean;\n props: {\n name: string;\n ref: React.RefObject<HTMLElement>;\n } & Partial<{\n flex: Property.Flex;\n justifyContent: Property.JustifyContent;\n onClick: (event: React.MouseEvent) => void;\n onKeyDown: (event: React.KeyboardEvent) => void;\n forwardRef: React.Ref<HTMLElement>;\n style: React.CSSProperties;\n fixed: 'left' | 'right';\n children: React.ReactNode[];\n resizable: boolean;\n sortable: boolean | SortDirection;\n sortDirection: SortDirection;\n vBorders: boolean;\n borderLeft: boolean;\n borderRight: boolean;\n }> &\n Props;\n columns: Column[];\n};\nexport type Cell = Pick<Column, 'name' | 'fixed' | 'data'> & {\n cssVar: string | string[];\n cellPropsLayers: PropsLayer[];\n};\nexport type RowData<\n Data extends { [columnName: string]: unknown } = { [columnName: string]: unknown },\n> = Data &\n Partial<{\n name: string;\n [ROW_GROUP]: RowData[];\n }>;\nexport type NestedCells = (Cell | NestedCells)[] & { flatRowData?: RowData };\n"],"mappings":";;AACA"}
package/lib/es6/Body.js CHANGED
@@ -40,16 +40,16 @@ var scrollStyles = (
40
40
  /*__reshadow_css_start__*/
41
41
  _sstyled.insert(
42
42
  /*__inner_css_start__*/
43
- ".___SShadowHorizontal_6xe0f_gg_:before{left:var(--left_6xe0f)!important}.___SShadowHorizontal_6xe0f_gg_:after{right:var(--right_6xe0f)!important}.___SContainer_6xe0f_gg_.__disabledScroll_6xe0f_gg_{overflow:visible}"
43
+ ".___SShadowHorizontal_1k6od_gg_:before{left:var(--left_1k6od)!important}.___SShadowHorizontal_1k6od_gg_:after{right:var(--right_1k6od)!important}.___SContainer_1k6od_gg_.__disabledScroll_1k6od_gg_{overflow:visible}"
44
44
  /*__inner_css_end__*/
45
- , "6xe0f_gg_")
45
+ , "1k6od_gg_")
46
46
  /*__reshadow_css_end__*/
47
47
  , {
48
- "__SShadowHorizontal": "___SShadowHorizontal_6xe0f_gg_",
49
- "--left": "--left_6xe0f",
50
- "--right": "--right_6xe0f",
51
- "__SContainer": "___SContainer_6xe0f_gg_",
52
- "_disabledScroll": "__disabledScroll_6xe0f_gg_"
48
+ "__SShadowHorizontal": "___SShadowHorizontal_1k6od_gg_",
49
+ "--left": "--left_1k6od",
50
+ "--right": "--right_1k6od",
51
+ "__SContainer": "___SContainer_1k6od_gg_",
52
+ "_disabledScroll": "__disabledScroll_1k6od_gg_"
53
53
  });
54
54
  import trottle from '@semcore/utils/lib/rafTrottle';
55
55
  var testEnv = process.env.NODE_ENV === 'test';
@@ -167,6 +167,15 @@ var Body = /*#__PURE__*/function (_Component) {
167
167
  } else {
168
168
  var _ref3, _column$props, _column$props2;
169
169
 
170
+ var nameParts = cell.name.split('/');
171
+ var firstName = nameParts[0];
172
+ var lastName = nameParts[nameParts.length - 1];
173
+ var firstColumn = columns.find(function (c) {
174
+ return c.name === firstName;
175
+ });
176
+ var lastColumn = columns.find(function (c) {
177
+ return c.name === lastName;
178
+ });
170
179
  var column = columns.find(function (c) {
171
180
  return c.name === cell.name;
172
181
  });
@@ -184,6 +193,8 @@ var Body = /*#__PURE__*/function (_Component) {
184
193
  children: /*#__PURE__*/React.createElement(React.Fragment, null, cell.data),
185
194
  justifyContent: column === null || column === void 0 ? void 0 : (_column$props = column.props) === null || _column$props === void 0 ? void 0 : _column$props.justifyContent,
186
195
  alignItems: column === null || column === void 0 ? void 0 : (_column$props2 = column.props) === null || _column$props2 === void 0 ? void 0 : _column$props2.alignItems,
196
+ borderLeft: firstColumn === null || firstColumn === void 0 ? void 0 : firstColumn.borderLeft,
197
+ borderRight: lastColumn === null || lastColumn === void 0 ? void 0 : lastColumn.borderRight,
187
198
  style: {
188
199
  width: vars.length === 1 ? vars[0] : "calc(".concat(vars.join(' + '), ")")
189
200
  }
@@ -221,7 +232,9 @@ var Body = /*#__PURE__*/function (_Component) {
221
232
  }, props), {}, {
222
233
  "fixed": cell.fixed,
223
234
  "theme": props.theme,
224
- "use": use
235
+ "use": use,
236
+ "borderLeft": props.borderLeft,
237
+ "borderRight": props.borderRight
225
238
  })));
226
239
  }
227
240
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"Body.js","names":["React","Component","sstyled","Root","Box","Flex","ScrollArea","getFixedStyle","getScrollOffsetValue","assignProps","callAllEventHandlers","ResizeObserver","trottle","testEnv","process","env","NODE_ENV","getCellsByColumn","cells","flattenCells","flat","Object","fromEntries","map","cell","name","data","Body","rowHeight","undefined","scrollAreaHeight","scrollOffset","createRef","virtualScroll","asProps","rowHeightFromProps","state","entries","contentRect","height","setState","oldState","event","target","scrollTop","firstRowRef","current","firstRowResizeObserver","handleFirstRowResize","observe","rowData","index","SCell","styles","columns","use","Array","isArray","SGroupCell","renderRows","column","find","c","value","vars","cssVar","props","children","justifyContent","alignItems","style","width","length","join","cellPropsLayers","cellPropLayer","childrenPropsGetter","p","other","propsCell","fixed","theme","dataIndex","topOffset","nested","SRow","rowPropsLayers","uniqueKey","flatRowData","key","String","needToMeasureHeight","renderCells","active","positioned","top","ref","rowPropsLayer","propsRow","rows","renderRow","getRowHeight","tollerance","startIndex","Math","max","floor","lastIndex","min","ceil","needToMeasureFirstRowHeight","firstRow","visibleRows","slice","processedVisibleRows","unshift","disconnect","SBody","SBodyWrapper","SScrollAreaBar","Bar","SHeightHold","Children","$scrollRef","onResize","onScroll","disabledScroll","columnsInitialized","reduce","sum","offsetLeftSum","offsetRightSum","offsetSum","holdHeight","Promise","setupRowSizeObserver","scrollStyles","handleScrollAreaResize","handleScrollAreaScroll","renderVirtualizedRows","origin"],"sources":["../../src/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { Box, Flex, IBoxProps } from '@semcore/flex-box';\nimport ScrollArea from '@semcore/scroll-area';\nimport { getFixedStyle, getScrollOffsetValue } from './utils';\nimport { RowData, Column, NestedCells, PropsLayer, Cell } from './types';\nimport assignProps, { callAllEventHandlers } from '@semcore/utils/lib/assignProps';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport scrollStyles from './style/scroll-area.shadow.css';\nimport syncScroll from '@semcore/utils/lib/syncScroll';\nimport trottle from '@semcore/utils/lib/rafTrottle';\n\nconst testEnv = process.env.NODE_ENV === 'test';\n\nconst getCellsByColumn = (cells: NestedCells): RowData => {\n const flattenCells = cells.flat(20) as Cell[];\n return Object.fromEntries(flattenCells.map((cell) => [cell.name, cell.data]));\n};\n\ntype AsProps = {\n rows: NestedCells[];\n columns: Column[];\n $scrollRef: ReturnType<ReturnType<typeof syncScroll>>;\n onResize: ResizeObserverCallback;\n onScroll?: (event: React.SyntheticEvent<HTMLElement>) => void;\n rowPropsLayers: PropsLayer[];\n use: 'primary' | 'secondary';\n uniqueKey: string;\n virtualScroll?: boolean | { tollerance?: number; rowHeight?: number };\n disabledScroll?: boolean;\n};\n\ntype State = {\n rowHeight: number | undefined;\n scrollAreaHeight: undefined | number;\n scrollOffset: number;\n};\n\nclass Body extends Component<AsProps, State> {\n state: State = {\n rowHeight: undefined,\n scrollAreaHeight: undefined,\n scrollOffset: 0,\n };\n\n firstRowRef = React.createRef<HTMLElement>();\n firstRowResizeObserver: ResizeObserver | null = null;\n\n getRowHeight = () => {\n const { virtualScroll } = this.asProps;\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n return rowHeightFromProps || this.state.rowHeight;\n };\n\n renderCells(cells: NestedCells, rowData: RowData, index: number) {\n const SCell = Flex;\n const { styles, columns, use } = this.asProps;\n return cells.map((cell) => {\n if (Array.isArray(cell)) {\n const SGroupCell = 'div';\n return sstyled(styles)(\n <SGroupCell role=\"rowgroup\" data-ui-name=\"group-cell\">\n {this.renderRows(cell as NestedCells[])}\n </SGroupCell>,\n );\n } else {\n const column = columns.find((c) => c.name === cell.name);\n const [name, value] = getFixedStyle(cell, columns);\n const vars = (Array.isArray(cell.cssVar) ? cell.cssVar : [cell.cssVar]).map(\n (name) => `var(${name})`,\n );\n type CellProps = IBoxProps & {\n name: string;\n children: React.ReactNode;\n style: React.CSSProperties;\n };\n\n let props: CellProps = {\n name: cell.name,\n children: <>{cell.data}</>,\n justifyContent: column?.props?.justifyContent,\n alignItems: column?.props?.alignItems,\n style: {\n width: vars.length === 1 ? vars[0] : `calc(${vars.join(' + ')})`,\n },\n };\n if (name !== undefined && value !== undefined) {\n props.style[name] = value;\n }\n\n for (const cellPropLayer of cell.cellPropsLayers || []) {\n const { childrenPropsGetter = (p) => p, ...other } = cellPropLayer;\n const propsCell = assignProps(other, props);\n props = assignProps(childrenPropsGetter(propsCell, rowData, index), propsCell);\n }\n\n return sstyled(styles)(\n <SCell\n key={cell.name}\n role=\"cell\"\n {...props}\n fixed={cell.fixed}\n theme={props.theme}\n use={use}\n />,\n ) as React.ReactElement;\n }\n }, [] as React.ReactElement[]);\n }\n\n renderRow(\n cells: NestedCells,\n { dataIndex, topOffset, nested }: { dataIndex: number; topOffset?: number; nested: boolean },\n ) {\n const SRow = Box;\n const { styles, rowPropsLayers, uniqueKey, virtualScroll } = this.asProps;\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n\n const rowData = cells.flatRowData || getCellsByColumn(cells);\n const key = rowData[uniqueKey] ? String(rowData[uniqueKey]) : `row_${dataIndex}`;\n const needToMeasureHeight = dataIndex === 0 && !nested && !rowHeightFromProps;\n\n let props = {\n children: this.renderCells(cells, rowData, dataIndex),\n theme: undefined,\n active: undefined,\n positioned: topOffset !== undefined,\n top: topOffset,\n ref: needToMeasureHeight ? this.firstRowRef : undefined,\n key,\n 'aria-rowindex': dataIndex + 1,\n };\n\n for (const rowPropsLayer of rowPropsLayers) {\n const { childrenPropsGetter = (p) => p, ...other } = rowPropsLayer;\n const propsRow = assignProps(other, props);\n props = assignProps(childrenPropsGetter(propsRow, rowData, dataIndex), propsRow);\n }\n\n return sstyled(styles)(<SRow role=\"row\" {...props} />);\n }\n\n renderRows(rows: NestedCells[]) {\n return rows.map((cells, dataIndex) => this.renderRow(cells, { dataIndex, nested: false }));\n }\n\n renderVirtualizedRows(rows: NestedCells[]) {\n if (rows.length === 0) return [];\n\n const { virtualScroll } = this.asProps;\n const { scrollOffset, scrollAreaHeight } = this.state;\n const rowHeight = this.getRowHeight();\n\n const tollerance = (typeof virtualScroll === 'object' ? virtualScroll?.tollerance : 2) ?? 2;\n const startIndex = Math.max(Math.floor(scrollOffset / rowHeight!) - tollerance, 0);\n const lastIndex = Math.min(\n Math.ceil((scrollOffset + scrollAreaHeight!) / rowHeight!) + tollerance,\n rows.length,\n );\n\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n const needToMeasureFirstRowHeight = !rowHeightFromProps;\n\n const firstRow = { cells: rows[0], dataIndex: 0, topOffset: 0 };\n const visibleRows = rowHeight !== undefined ? rows.slice(startIndex, lastIndex) : [];\n const processedVisibleRows = visibleRows.map((cells, index) => ({\n cells,\n dataIndex: startIndex + index,\n topOffset: rowHeight! * (startIndex + index),\n }));\n if (needToMeasureFirstRowHeight && startIndex !== 0) {\n processedVisibleRows.unshift(firstRow);\n }\n\n return processedVisibleRows.map(({ cells, dataIndex, topOffset }) =>\n this.renderRow(cells, { dataIndex, topOffset, nested: false }),\n );\n }\n\n handleFirstRowResize = trottle((entries: ResizeObserverEntry[]) => {\n const { contentRect } = entries[0];\n const { height } = contentRect;\n this.setState((oldState: State) => {\n if (oldState.rowHeight === height) return oldState;\n return { rowHeight: height };\n });\n });\n\n handleScrollAreaResize = trottle((entries: ResizeObserverEntry[]) => {\n const { virtualScroll } = this.asProps;\n if (!virtualScroll) return;\n const { contentRect } = entries[0];\n const { height } = contentRect;\n this.setState((oldState: State) => {\n if (oldState.scrollAreaHeight === height) return oldState;\n return { scrollAreaHeight: height };\n });\n });\n\n handleScrollAreaScroll = (event: React.SyntheticEvent<HTMLElement>) => {\n const { scrollTop } = event.target as HTMLElement;\n const { virtualScroll } = this.asProps;\n if (virtualScroll) {\n this.setState((oldState: State) => {\n if (oldState.scrollOffset === scrollTop) return oldState;\n return { scrollOffset: scrollTop };\n });\n }\n };\n\n setupRowSizeObserver = () => {\n if (!this.firstRowRef.current) return;\n if (!this.asProps.virtualScroll) return;\n this.firstRowResizeObserver = new ResizeObserver(this.handleFirstRowResize);\n this.firstRowResizeObserver.observe(this.firstRowRef.current);\n };\n\n componentWillUnmount() {\n this.firstRowResizeObserver?.disconnect();\n }\n\n render() {\n const SBody = Root;\n const SBodyWrapper = Box;\n const SScrollAreaBar = ScrollArea.Bar;\n const SHeightHold = Box;\n const {\n Children,\n styles,\n rows,\n columns,\n $scrollRef,\n virtualScroll,\n onResize,\n onScroll,\n disabledScroll,\n } = this.asProps;\n\n const columnsInitialized = columns.reduce((sum, { width }) => sum + width, 0) > 0 || testEnv;\n\n const [offsetLeftSum, offsetRightSum] = getScrollOffsetValue(columns);\n const offsetSum = offsetLeftSum + offsetRightSum;\n\n const rowHeight = this.getRowHeight();\n const holdHeight =\n rowHeight !== undefined && virtualScroll ? rowHeight * rows.length : undefined;\n\n if (virtualScroll && columnsInitialized && !rowHeight) {\n new Promise(() => this.setupRowSizeObserver());\n }\n\n return sstyled(styles)(\n <SBodyWrapper>\n <ScrollArea\n shadow\n styles={scrollStyles}\n use:left={`${offsetLeftSum}px`}\n use:right={`${offsetRightSum}px`}\n onResize={callAllEventHandlers(onResize, this.handleScrollAreaResize)}\n onScroll={callAllEventHandlers(onScroll, this.handleScrollAreaScroll)}\n >\n <ScrollArea.Container ref={$scrollRef} disabledScroll={disabledScroll}>\n <SBody render={Box} role=\"rowgroup\">\n {holdHeight && <SHeightHold hMin={holdHeight} aria-hidden={true} />}\n {columnsInitialized && !virtualScroll ? this.renderRows(rows) : null}\n {columnsInitialized && virtualScroll ? this.renderVirtualizedRows(rows) : null}\n </SBody>\n </ScrollArea.Container>\n <SScrollAreaBar\n orientation=\"horizontal\"\n left={`${offsetLeftSum}px`}\n right={`${offsetRightSum}px`}\n offsetSum={`${offsetSum}px`}\n />\n <SScrollAreaBar orientation=\"vertical\" />\n </ScrollArea>\n {Children.origin}\n </SBodyWrapper>,\n );\n }\n}\n\nexport default Body;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Body.js","names":["React","Component","sstyled","Root","Box","Flex","ScrollArea","getFixedStyle","getScrollOffsetValue","assignProps","callAllEventHandlers","ResizeObserver","trottle","testEnv","process","env","NODE_ENV","getCellsByColumn","cells","flattenCells","flat","Object","fromEntries","map","cell","name","data","Body","rowHeight","undefined","scrollAreaHeight","scrollOffset","createRef","virtualScroll","asProps","rowHeightFromProps","state","entries","contentRect","height","setState","oldState","event","target","scrollTop","firstRowRef","current","firstRowResizeObserver","handleFirstRowResize","observe","rowData","index","SCell","styles","columns","use","Array","isArray","SGroupCell","renderRows","nameParts","split","firstName","lastName","length","firstColumn","find","c","lastColumn","column","value","vars","cssVar","props","children","justifyContent","alignItems","borderLeft","borderRight","style","width","join","cellPropsLayers","cellPropLayer","childrenPropsGetter","p","other","propsCell","fixed","theme","dataIndex","topOffset","nested","SRow","rowPropsLayers","uniqueKey","flatRowData","key","String","needToMeasureHeight","renderCells","active","positioned","top","ref","rowPropsLayer","propsRow","rows","renderRow","getRowHeight","tollerance","startIndex","Math","max","floor","lastIndex","min","ceil","needToMeasureFirstRowHeight","firstRow","visibleRows","slice","processedVisibleRows","unshift","disconnect","SBody","SBodyWrapper","SScrollAreaBar","Bar","SHeightHold","Children","$scrollRef","onResize","onScroll","disabledScroll","columnsInitialized","reduce","sum","offsetLeftSum","offsetRightSum","offsetSum","holdHeight","Promise","setupRowSizeObserver","scrollStyles","handleScrollAreaResize","handleScrollAreaScroll","renderVirtualizedRows","origin"],"sources":["../../src/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { Box, Flex, IBoxProps } from '@semcore/flex-box';\nimport ScrollArea from '@semcore/scroll-area';\nimport { getFixedStyle, getScrollOffsetValue } from './utils';\nimport { RowData, Column, NestedCells, PropsLayer, Cell } from './types';\nimport assignProps, { callAllEventHandlers } from '@semcore/utils/lib/assignProps';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport scrollStyles from './style/scroll-area.shadow.css';\nimport syncScroll from '@semcore/utils/lib/syncScroll';\nimport trottle from '@semcore/utils/lib/rafTrottle';\n\nconst testEnv = process.env.NODE_ENV === 'test';\n\nconst getCellsByColumn = (cells: NestedCells): RowData => {\n const flattenCells = cells.flat(20) as Cell[];\n return Object.fromEntries(flattenCells.map((cell) => [cell.name, cell.data]));\n};\n\ntype AsProps = {\n rows: NestedCells[];\n columns: Column[];\n $scrollRef: ReturnType<ReturnType<typeof syncScroll>>;\n onResize: ResizeObserverCallback;\n onScroll?: (event: React.SyntheticEvent<HTMLElement>) => void;\n rowPropsLayers: PropsLayer[];\n use: 'primary' | 'secondary';\n uniqueKey: string;\n virtualScroll?: boolean | { tollerance?: number; rowHeight?: number };\n disabledScroll?: boolean;\n};\n\ntype State = {\n rowHeight: number | undefined;\n scrollAreaHeight: undefined | number;\n scrollOffset: number;\n};\n\nclass Body extends Component<AsProps, State> {\n state: State = {\n rowHeight: undefined,\n scrollAreaHeight: undefined,\n scrollOffset: 0,\n };\n\n firstRowRef = React.createRef<HTMLElement>();\n firstRowResizeObserver: ResizeObserver | null = null;\n\n getRowHeight = () => {\n const { virtualScroll } = this.asProps;\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n return rowHeightFromProps || this.state.rowHeight;\n };\n\n renderCells(cells: NestedCells, rowData: RowData, index: number) {\n const SCell = Flex;\n const { styles, columns, use } = this.asProps;\n return cells.map((cell) => {\n if (Array.isArray(cell)) {\n const SGroupCell = 'div';\n return sstyled(styles)(\n <SGroupCell role=\"rowgroup\" data-ui-name=\"group-cell\">\n {this.renderRows(cell as NestedCells[])}\n </SGroupCell>,\n );\n } else {\n const nameParts = cell.name.split('/');\n const firstName = nameParts[0];\n const lastName = nameParts[nameParts.length - 1];\n const firstColumn = columns.find((c) => c.name === firstName);\n const lastColumn = columns.find((c) => c.name === lastName);\n const column = columns.find((c) => c.name === cell.name);\n const [name, value] = getFixedStyle(cell, columns);\n const vars = (Array.isArray(cell.cssVar) ? cell.cssVar : [cell.cssVar]).map(\n (name) => `var(${name})`,\n );\n type CellProps = IBoxProps & {\n name: string;\n children: React.ReactNode;\n style: React.CSSProperties;\n };\n\n let props: CellProps = {\n name: cell.name,\n children: <>{cell.data}</>,\n justifyContent: column?.props?.justifyContent,\n alignItems: column?.props?.alignItems,\n borderLeft: firstColumn?.borderLeft,\n borderRight: lastColumn?.borderRight,\n style: {\n width: vars.length === 1 ? vars[0] : `calc(${vars.join(' + ')})`,\n },\n };\n if (name !== undefined && value !== undefined) {\n props.style[name] = value;\n }\n\n for (const cellPropLayer of cell.cellPropsLayers || []) {\n const { childrenPropsGetter = (p) => p, ...other } = cellPropLayer;\n const propsCell = assignProps(other, props);\n props = assignProps(childrenPropsGetter(propsCell, rowData, index), propsCell);\n }\n\n return sstyled(styles)(\n <SCell\n key={cell.name}\n role=\"cell\"\n {...props}\n fixed={cell.fixed}\n theme={props.theme}\n use={use}\n borderLeft={props.borderLeft}\n borderRight={props.borderRight}\n />,\n ) as React.ReactElement;\n }\n }, [] as React.ReactElement[]);\n }\n\n renderRow(\n cells: NestedCells,\n { dataIndex, topOffset, nested }: { dataIndex: number; topOffset?: number; nested: boolean },\n ) {\n const SRow = Box;\n const { styles, rowPropsLayers, uniqueKey, virtualScroll } = this.asProps;\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n\n const rowData = cells.flatRowData || getCellsByColumn(cells);\n const key = rowData[uniqueKey] ? String(rowData[uniqueKey]) : `row_${dataIndex}`;\n const needToMeasureHeight = dataIndex === 0 && !nested && !rowHeightFromProps;\n\n let props = {\n children: this.renderCells(cells, rowData, dataIndex),\n theme: undefined,\n active: undefined,\n positioned: topOffset !== undefined,\n top: topOffset,\n ref: needToMeasureHeight ? this.firstRowRef : undefined,\n key,\n 'aria-rowindex': dataIndex + 1,\n };\n\n for (const rowPropsLayer of rowPropsLayers) {\n const { childrenPropsGetter = (p) => p, ...other } = rowPropsLayer;\n const propsRow = assignProps(other, props);\n props = assignProps(childrenPropsGetter(propsRow, rowData, dataIndex), propsRow);\n }\n\n return sstyled(styles)(<SRow role=\"row\" {...props} />);\n }\n\n renderRows(rows: NestedCells[]) {\n return rows.map((cells, dataIndex) => this.renderRow(cells, { dataIndex, nested: false }));\n }\n\n renderVirtualizedRows(rows: NestedCells[]) {\n if (rows.length === 0) return [];\n\n const { virtualScroll } = this.asProps;\n const { scrollOffset, scrollAreaHeight } = this.state;\n const rowHeight = this.getRowHeight();\n\n const tollerance = (typeof virtualScroll === 'object' ? virtualScroll?.tollerance : 2) ?? 2;\n const startIndex = Math.max(Math.floor(scrollOffset / rowHeight!) - tollerance, 0);\n const lastIndex = Math.min(\n Math.ceil((scrollOffset + scrollAreaHeight!) / rowHeight!) + tollerance,\n rows.length,\n );\n\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n const needToMeasureFirstRowHeight = !rowHeightFromProps;\n\n const firstRow = { cells: rows[0], dataIndex: 0, topOffset: 0 };\n const visibleRows = rowHeight !== undefined ? rows.slice(startIndex, lastIndex) : [];\n const processedVisibleRows = visibleRows.map((cells, index) => ({\n cells,\n dataIndex: startIndex + index,\n topOffset: rowHeight! * (startIndex + index),\n }));\n if (needToMeasureFirstRowHeight && startIndex !== 0) {\n processedVisibleRows.unshift(firstRow);\n }\n\n return processedVisibleRows.map(({ cells, dataIndex, topOffset }) =>\n this.renderRow(cells, { dataIndex, topOffset, nested: false }),\n );\n }\n\n handleFirstRowResize = trottle((entries: ResizeObserverEntry[]) => {\n const { contentRect } = entries[0];\n const { height } = contentRect;\n this.setState((oldState: State) => {\n if (oldState.rowHeight === height) return oldState;\n return { rowHeight: height };\n });\n });\n\n handleScrollAreaResize = trottle((entries: ResizeObserverEntry[]) => {\n const { virtualScroll } = this.asProps;\n if (!virtualScroll) return;\n const { contentRect } = entries[0];\n const { height } = contentRect;\n this.setState((oldState: State) => {\n if (oldState.scrollAreaHeight === height) return oldState;\n return { scrollAreaHeight: height };\n });\n });\n\n handleScrollAreaScroll = (event: React.SyntheticEvent<HTMLElement>) => {\n const { scrollTop } = event.target as HTMLElement;\n const { virtualScroll } = this.asProps;\n if (virtualScroll) {\n this.setState((oldState: State) => {\n if (oldState.scrollOffset === scrollTop) return oldState;\n return { scrollOffset: scrollTop };\n });\n }\n };\n\n setupRowSizeObserver = () => {\n if (!this.firstRowRef.current) return;\n if (!this.asProps.virtualScroll) return;\n this.firstRowResizeObserver = new ResizeObserver(this.handleFirstRowResize);\n this.firstRowResizeObserver.observe(this.firstRowRef.current);\n };\n\n componentWillUnmount() {\n this.firstRowResizeObserver?.disconnect();\n }\n\n render() {\n const SBody = Root;\n const SBodyWrapper = Box;\n const SScrollAreaBar = ScrollArea.Bar;\n const SHeightHold = Box;\n const {\n Children,\n styles,\n rows,\n columns,\n $scrollRef,\n virtualScroll,\n onResize,\n onScroll,\n disabledScroll,\n } = this.asProps;\n\n const columnsInitialized = columns.reduce((sum, { width }) => sum + width, 0) > 0 || testEnv;\n\n const [offsetLeftSum, offsetRightSum] = getScrollOffsetValue(columns);\n const offsetSum = offsetLeftSum + offsetRightSum;\n\n const rowHeight = this.getRowHeight();\n const holdHeight =\n rowHeight !== undefined && virtualScroll ? rowHeight * rows.length : undefined;\n\n if (virtualScroll && columnsInitialized && !rowHeight) {\n new Promise(() => this.setupRowSizeObserver());\n }\n\n return sstyled(styles)(\n <SBodyWrapper>\n <ScrollArea\n shadow\n styles={scrollStyles}\n use:left={`${offsetLeftSum}px`}\n use:right={`${offsetRightSum}px`}\n onResize={callAllEventHandlers(onResize, this.handleScrollAreaResize)}\n onScroll={callAllEventHandlers(onScroll, this.handleScrollAreaScroll)}\n >\n <ScrollArea.Container ref={$scrollRef} disabledScroll={disabledScroll}>\n <SBody render={Box} role=\"rowgroup\">\n {holdHeight && <SHeightHold hMin={holdHeight} aria-hidden={true} />}\n {columnsInitialized && !virtualScroll ? this.renderRows(rows) : null}\n {columnsInitialized && virtualScroll ? this.renderVirtualizedRows(rows) : null}\n </SBody>\n </ScrollArea.Container>\n <SScrollAreaBar\n orientation=\"horizontal\"\n left={`${offsetLeftSum}px`}\n right={`${offsetRightSum}px`}\n offsetSum={`${offsetSum}px`}\n />\n <SScrollAreaBar orientation=\"vertical\" />\n </ScrollArea>\n {Children.origin}\n </SBodyWrapper>,\n );\n }\n}\n\nexport default Body;\n"],"mappings":"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"}