@absreim/react-bootstrap-data-grid 2.7.0 → 4.0.0

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 (162) hide show
  1. package/common/constants.d.ts +2 -0
  2. package/common/constants.js +2 -0
  3. package/common/editing/types.d.ts +7 -0
  4. package/{export → common/export}/ExportForm.d.ts +1 -0
  5. package/{export → common/export}/ExportForm.js +3 -3
  6. package/{filtering → common/filtering}/DateFilterRow.d.ts +4 -4
  7. package/{filtering → common/filtering}/DateFilterRow.js +1 -1
  8. package/common/filtering/FilterOptionsTable.d.ts +12 -0
  9. package/{filtering → common/filtering}/FilterOptionsTable.js +17 -20
  10. package/{filtering → common/filtering}/FilterRow.d.ts +4 -4
  11. package/{filtering → common/filtering}/FilterRow.js +1 -10
  12. package/{filtering → common/filtering}/NumberFilterRow.d.ts +3 -3
  13. package/{filtering → common/filtering}/NumberFilterRow.js +1 -1
  14. package/{filtering → common/filtering}/StringFilterRow.d.ts +3 -3
  15. package/{filtering → common/filtering}/StringFilterRow.js +1 -1
  16. package/{filtering → common/filtering}/types.d.ts +6 -6
  17. package/common/filtering/useFilterFormState.d.ts +3 -0
  18. package/{index.d.ts → common/index.d.ts} +8 -7
  19. package/{index.js → common/index.js} +8 -7
  20. package/{pagination → common/pagination}/PageSelector.d.ts +1 -1
  21. package/{pagination → common/pagination}/PageSizeSelector.d.ts +1 -1
  22. package/{pagination → common/pagination}/Pagination.d.ts +1 -1
  23. package/{pagination → common/pagination}/Pagination.js +6 -3
  24. package/{pagination → common/pagination}/types.d.ts +3 -2
  25. package/{pipeline → common/pipeline}/useAugFormattedRows.d.ts +1 -1
  26. package/common/pipeline/useColNameToWidth.d.ts +3 -0
  27. package/common/pipeline/useColNameToWidth.js +12 -0
  28. package/{pipeline → common/pipeline}/useCombinedPipeline/index.d.ts +4 -4
  29. package/{pipeline → common/pipeline}/useCombinedPipeline/useCurrentPageRows.d.ts +3 -3
  30. package/{pipeline → common/pipeline}/useCombinedPipeline/useDisplayRows.d.ts +1 -1
  31. package/{pipeline → common/pipeline}/useCombinedPipeline/useDisplayRows.js +1 -2
  32. package/common/pipeline/useCombinedPipeline/useFilter.d.ts +4 -0
  33. package/common/pipeline/useCombinedPipeline/useFilterStateFromEditable.d.ts +4 -0
  34. package/{pipeline → common/pipeline}/useCombinedPipeline/useSortedRows.d.ts +2 -2
  35. package/{pipeline → common/pipeline}/useGridSelectionFns.d.ts +2 -2
  36. package/{sorting → common/sorting}/types.d.ts +3 -3
  37. package/{main/ColHeaderCell → common/sorting}/useSortHeaderStates.d.ts +2 -2
  38. package/{main/ColHeaderCell → common/sorting}/useSortHeaderStates.js +4 -4
  39. package/common/styling/types.d.ts +21 -0
  40. package/{toolbar → common/toolbar}/ToolbarContainer.d.ts +2 -2
  41. package/{toolbar → common/toolbar}/ToolbarContainer.js +11 -7
  42. package/common/toolbar/types.d.ts +11 -0
  43. package/common/toolbar/useInterfaces.d.ts +3 -0
  44. package/{toolbar → common/toolbar}/useInterfaces.js +9 -6
  45. package/{types.d.ts → common/types.d.ts} +24 -34
  46. package/common/util/index.d.ts +5 -0
  47. package/common/util/index.js +5 -0
  48. package/community/index.d.ts +4 -0
  49. package/community/index.js +4 -0
  50. package/grid/constants.d.ts +2 -0
  51. package/grid/constants.js +2 -0
  52. package/grid/index.d.ts +3 -0
  53. package/grid/index.js +3 -0
  54. package/{Grid.d.ts → grid/main/Grid.d.ts} +0 -1
  55. package/grid/main/Grid.js +60 -0
  56. package/grid/main/GridBody.d.ts +4 -0
  57. package/grid/main/GridBody.js +17 -0
  58. package/grid/main/GridHeader.d.ts +4 -0
  59. package/grid/main/GridHeader.js +12 -0
  60. package/grid/main/getWidthStyles.d.ts +3 -0
  61. package/grid/main/getWidthStyles.js +6 -0
  62. package/grid/main/types.d.ts +32 -0
  63. package/grid/main/types.js +1 -0
  64. package/grid.css +1 -0
  65. package/grid.scss +231 -0
  66. package/package.json +1 -1
  67. package/table/InternalTable.d.ts +21 -0
  68. package/table/InternalTable.js +59 -0
  69. package/table/Table.d.ts +5 -0
  70. package/{Grid.js → table/Table.js} +11 -21
  71. package/{editing → table/editing}/EditControlsCell.d.ts +5 -5
  72. package/table/editing/EditControlsCell.js +11 -0
  73. package/{editing → table/editing}/EditableRow.d.ts +8 -9
  74. package/{editing → table/editing}/EditableRow.js +3 -3
  75. package/table/index.d.ts +5 -0
  76. package/table/index.js +5 -0
  77. package/table/main/BodyRows.d.ts +22 -0
  78. package/table/main/BodyRows.js +34 -0
  79. package/{main → table/main}/ColHeaderCell/index.js +3 -3
  80. package/{selection → table/selection}/SelectAllHeaderCell.d.ts +2 -2
  81. package/{selection → table/selection}/SelectAllHeaderCell.js +2 -4
  82. package/{selection → table/selection}/SelectionInput.d.ts +1 -1
  83. package/table/styling/types.d.ts +41 -0
  84. package/table/styling/types.js +1 -0
  85. package/table/types.d.ts +19 -0
  86. package/table/types.js +1 -0
  87. package/InternalGrid.d.ts +0 -23
  88. package/InternalGrid.js +0 -57
  89. package/editing/EditControlsCell.js +0 -19
  90. package/editing/types.d.ts +0 -16
  91. package/filtering/FilterOptionsTable.d.ts +0 -11
  92. package/filtering/useFilterFormState.d.ts +0 -3
  93. package/main/BodyRows.d.ts +0 -22
  94. package/main/BodyRows.js +0 -18
  95. package/main/ToggleButton.d.ts +0 -9
  96. package/main/ToggleButton.js +0 -14
  97. package/pipeline/useCombinedPipeline/useEditableFromFilterState.d.ts +0 -3
  98. package/pipeline/useCombinedPipeline/useEditableFromFilterState.js +0 -14
  99. package/pipeline/useCombinedPipeline/useFilter.d.ts +0 -4
  100. package/pipeline/useCombinedPipeline/useFilterStateFromEditable.d.ts +0 -4
  101. package/pipeline/useUnwrappedGridStyles.d.ts +0 -7
  102. package/pipeline/useUnwrappedGridStyles.js +0 -17
  103. package/styling/styleModelUnwrappers.d.ts +0 -4
  104. package/styling/styleModelUnwrappers.js +0 -58
  105. package/styling/types.d.ts +0 -62
  106. package/toolbar/types.d.ts +0 -3
  107. package/toolbar/useInterfaces.d.ts +0 -9
  108. /package/{editing → common/editing}/inputStrsToRowData.d.ts +0 -0
  109. /package/{editing → common/editing}/inputStrsToRowData.js +0 -0
  110. /package/{editing → common/editing}/types.js +0 -0
  111. /package/{export → common/export}/types.d.ts +0 -0
  112. /package/{export → common/export}/types.js +0 -0
  113. /package/{export → common/export}/useExportFn.d.ts +0 -0
  114. /package/{export → common/export}/useExportFn.js +0 -0
  115. /package/{filtering → common/filtering}/types.js +0 -0
  116. /package/{filtering → common/filtering}/useFilterFormState.js +0 -0
  117. /package/{pagination → common/pagination}/PageSelector.js +0 -0
  118. /package/{pagination → common/pagination}/PageSizeSelector.js +0 -0
  119. /package/{pagination → common/pagination}/types.js +0 -0
  120. /package/{pipeline → common/pipeline}/types.d.ts +0 -0
  121. /package/{pipeline → common/pipeline}/types.js +0 -0
  122. /package/{pipeline → common/pipeline}/useAugFormattedRows.js +0 -0
  123. /package/{pipeline → common/pipeline}/useCombinedPipeline/index.js +0 -0
  124. /package/{pipeline → common/pipeline}/useCombinedPipeline/useCurrentPageRows.js +0 -0
  125. /package/{pipeline → common/pipeline}/useCombinedPipeline/useFilter.js +0 -0
  126. /package/{pipeline → common/pipeline}/useCombinedPipeline/useFilterStateFromEditable.js +0 -0
  127. /package/{pipeline → common/pipeline}/useCombinedPipeline/useFilterStateStore.d.ts +0 -0
  128. /package/{pipeline → common/pipeline}/useCombinedPipeline/useFilterStateStore.js +0 -0
  129. /package/{pipeline → common/pipeline}/useCombinedPipeline/useSortedRows.js +0 -0
  130. /package/{pipeline → common/pipeline}/useGetInputStrSubmitCallback.d.ts +0 -0
  131. /package/{pipeline → common/pipeline}/useGetInputStrSubmitCallback.js +0 -0
  132. /package/{pipeline → common/pipeline}/useGridSelectionFns.js +0 -0
  133. /package/{selection → common/selection}/types.d.ts +0 -0
  134. /package/{selection → common/selection}/types.js +0 -0
  135. /package/{sorting → common/sorting}/arrowPlaceholder.d.ts +0 -0
  136. /package/{sorting → common/sorting}/arrowPlaceholder.js +0 -0
  137. /package/{sorting → common/sorting}/downArrow.d.ts +0 -0
  138. /package/{sorting → common/sorting}/downArrow.js +0 -0
  139. /package/{sorting → common/sorting}/sortOrderToAriaSort.d.ts +0 -0
  140. /package/{sorting → common/sorting}/sortOrderToAriaSort.js +0 -0
  141. /package/{sorting → common/sorting}/types.js +0 -0
  142. /package/{sorting → common/sorting}/upArrow.d.ts +0 -0
  143. /package/{sorting → common/sorting}/upArrow.js +0 -0
  144. /package/{styling → common/styling}/types.js +0 -0
  145. /package/{toolbar → common/toolbar}/Toolbar.d.ts +0 -0
  146. /package/{toolbar → common/toolbar}/Toolbar.js +0 -0
  147. /package/{toolbar → common/toolbar}/types.js +0 -0
  148. /package/{types.js → common/types.js} +0 -0
  149. /package/{util → common/util}/datetime.d.ts +0 -0
  150. /package/{util → common/util}/datetime.js +0 -0
  151. /package/{util → common/util}/getWidthStyle.d.ts +0 -0
  152. /package/{util → common/util}/getWidthStyle.js +0 -0
  153. /package/{util → common/util}/isSubset.d.ts +0 -0
  154. /package/{util → common/util}/isSubset.js +0 -0
  155. /package/{util → common/util}/trueModulo.d.ts +0 -0
  156. /package/{util → common/util}/trueModulo.js +0 -0
  157. /package/{util → common/util}/useControlledHover.d.ts +0 -0
  158. /package/{util → common/util}/useControlledHover.js +0 -0
  159. /package/{main → table/main}/ColHeaderCell/index.d.ts +0 -0
  160. /package/{selection → table/selection}/SelectionInput.js +0 -0
  161. /package/{style.css → table.css} +0 -0
  162. /package/{style.scss → table.scss} +0 -0
@@ -1,8 +1,8 @@
1
- import { ToolbarInterfaces } from "./types";
1
+ import { InterfaceNodeGenerator } from "./types";
2
2
  import { FC } from "react";
3
3
  import { ToolbarStyleModel } from "../styling/types";
4
4
  interface ToolbarContainerProps {
5
- interfaces: ToolbarInterfaces;
5
+ interfaceGen: InterfaceNodeGenerator;
6
6
  styleModel?: ToolbarStyleModel;
7
7
  }
8
8
  declare const ToolbarContainer: FC<ToolbarContainerProps>;
@@ -1,15 +1,19 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from "react";
2
+ import { useCallback, useMemo, useState } from "react";
3
3
  import Toolbar from "./Toolbar";
4
4
  import classNames from "classnames";
5
5
  var ToolbarContainer = function (_a) {
6
- var interfaces = _a.interfaces, styleModel = _a.styleModel;
6
+ var interfaceGen = _a.interfaceGen, styleModel = _a.styleModel;
7
7
  var _b = useState(null), option = _b[0], setOption = _b[1];
8
- var enabledFeatures = Object.keys(interfaces).reduce(function (prev, toolbarOption) {
9
- prev[toolbarOption] =
10
- !!interfaces[toolbarOption];
11
- return prev;
12
- }, {});
8
+ var closeUiCallback = useCallback(function () { return setOption(null); }, []);
9
+ var interfaces = useMemo(function () { return interfaceGen(closeUiCallback); }, [closeUiCallback, interfaceGen]);
10
+ var enabledFeatures = useMemo(function () {
11
+ return Object.keys(interfaces).reduce(function (prev, toolbarOption) {
12
+ prev[toolbarOption] =
13
+ !!interfaces[toolbarOption];
14
+ return prev;
15
+ }, {});
16
+ }, [interfaces]);
13
17
  return (_jsxs("div", { className: "vstack", "data-testid": "toolbar container", children: [_jsx(Toolbar, { enabledFeatures: enabledFeatures, option: option, setOption: setOption, toolbarClasses: styleModel === null || styleModel === void 0 ? void 0 : styleModel.toolbar, activeClasses: styleModel === null || styleModel === void 0 ? void 0 : styleModel.activeButton, inactiveClasses: styleModel === null || styleModel === void 0 ? void 0 : styleModel.inactiveButton }), _jsx("div", { className: "position-relative", children: option !== null && (_jsx("div", { "data-testid": "toolbar feature interface content container", className: classNames((styleModel === null || styleModel === void 0 ? void 0 : styleModel.interfaceContainer) || [
14
18
  "position-absolute",
15
19
  "z-1",
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from "react";
2
+ import { FilterOptionsTableProps } from "../filtering/FilterOptionsTable";
3
+ import { ExportFormProps } from "../export/ExportForm";
4
+ export type ToolbarOption = "filtering" | "exporting";
5
+ export type ToolbarInterfaces = Partial<Record<ToolbarOption, ReactNode>>;
6
+ export interface InterfaceParams {
7
+ filtering?: FilterOptionsTableProps;
8
+ exporting?: ExportFormProps;
9
+ }
10
+ export type InterfacePropGenerator = (closeUiCallback: () => void) => InterfaceParams;
11
+ export type InterfaceNodeGenerator = (closeUiCallback: () => void) => ToolbarInterfaces;
@@ -0,0 +1,3 @@
1
+ import { InterfacePropGenerator, ToolbarInterfaces } from "./types";
2
+ declare const useInterfaces: (gen: InterfacePropGenerator) => (closeCallback: () => void) => ToolbarInterfaces;
3
+ export default useInterfaces;
@@ -13,11 +13,14 @@ import { jsx as _jsx } from "react/jsx-runtime";
13
13
  import FilterOptionsTable from "../filtering/FilterOptionsTable";
14
14
  import { useMemo } from "react";
15
15
  import ExportForm from "../export/ExportForm";
16
- var useInterfaces = function (_a) {
17
- var filtering = _a.filtering, exporting = _a.exporting;
18
- return useMemo(function () { return ({
19
- filtering: filtering ? _jsx(FilterOptionsTable, __assign({}, filtering)) : undefined,
20
- exporting: exporting ? _jsx(ExportForm, __assign({}, exporting)) : undefined,
21
- }); }, [exporting, filtering]);
16
+ var useInterfaces = function (gen) {
17
+ return useMemo(function () { return function (closeCallback) {
18
+ var props = gen(closeCallback);
19
+ var exporting = props.exporting, filtering = props.filtering;
20
+ return {
21
+ filtering: filtering ? (_jsx(FilterOptionsTable, __assign({}, filtering))) : undefined,
22
+ exporting: exporting ? _jsx(ExportForm, __assign({}, exporting)) : undefined,
23
+ };
24
+ }; }, [gen]);
22
25
  };
23
26
  export default useInterfaces;
@@ -1,6 +1,6 @@
1
- import { CellData, EditModel } from "./editing/types";
2
- import { GridPaginationState } from "./pagination/types";
3
- import { ColSortModel, TableSortModel } from "./sorting/types";
1
+ import { EditModel } from "./editing/types";
2
+ import { PaginationModel } from "./pagination/types";
3
+ import { SortModel } from "./sorting/types";
4
4
  import { FilterModel } from "./filtering/types";
5
5
  import { SelectModel } from "./selection/types";
6
6
  import { StyleModel } from "./styling/types";
@@ -23,45 +23,35 @@ export interface RowDef<Data extends ValidRowData = ValidRowData> {
23
23
  id: RowId;
24
24
  data: RowData<Data>;
25
25
  }
26
- export type AugRowDef<Data extends ValidRowData = ValidRowData> = RowDef<Data> & {
27
- origIndex: number;
28
- };
29
- export type PostPaginationRowDef<Data extends ValidRowData = ValidRowData> = AugRowDef & {
30
- prePaginationIndex: number;
31
- };
32
- export type FormattedRow = {
33
- contents: CellData[];
34
- } & Omit<PostPaginationRowDef, "data">;
35
- export type AugCellData = CellData & {
36
- width?: number;
37
- };
38
- export type AugFormattedRow = Omit<FormattedRow, "contents"> & {
39
- contents: AugCellData[];
40
- };
41
- export type JustifyContentSetting = "start" | "end" | "center" | "between" | "around" | "evenly";
42
- export type Size = "small" | "medium" | "large";
43
- export type DisplayMode = "table" | "block";
44
- export interface GridProps {
26
+ export interface MainComponentSharedProps {
45
27
  rows: RowDef[];
46
28
  cols: ColDef[];
47
- pagination?: GridPaginationState;
48
- sortModel?: TableSortModel;
29
+ pagination?: PaginationModel;
30
+ sortModel?: SortModel;
49
31
  filterModel?: FilterModel;
50
32
  selectModel?: SelectModel;
51
33
  editModel?: EditModel;
52
- caption?: string;
53
34
  styleModel?: StyleModel;
54
- useToolbar?: boolean;
55
- responsive?: boolean;
56
- displayMode?: DisplayMode;
35
+ allowExport?: boolean;
57
36
  }
58
- export type BaseGridProps = Omit<GridProps, "cols"> & {
59
- cols: ColDefBase[];
37
+ export type AugRowDef<Data extends ValidRowData = ValidRowData> = RowDef<Data> & {
38
+ origIndex: number;
60
39
  };
61
- export interface ColHeaderCellProps {
62
- label: string;
63
- sortModel?: ColSortModel;
40
+ export type PostPaginationRowDef<Data extends ValidRowData = ValidRowData> = AugRowDef<Data> & {
41
+ prePaginationIndex: number;
42
+ };
43
+ export interface CellData {
44
+ fieldName: string;
45
+ value: ColDataType;
46
+ type: ColDataTypeStrings;
64
47
  ariaColIndex: number;
65
- additionalClasses?: string[];
48
+ formattedValue: string;
49
+ label: string;
66
50
  width?: number;
67
51
  }
52
+ export type FormattedRow = {
53
+ contents: Omit<CellData, "width">[];
54
+ } & Omit<PostPaginationRowDef, "data">;
55
+ export type AugFormattedRow = {
56
+ contents: CellData[];
57
+ } & Omit<PostPaginationRowDef, "data">;
@@ -0,0 +1,5 @@
1
+ export * from "./datetime";
2
+ export { default as getWidthStyle } from "./getWidthStyle";
3
+ export { default as isSubset } from "./isSubset";
4
+ export { default as trueModulo } from "./trueModulo";
5
+ export { default as useControlledHover } from "./useControlledHover";
@@ -0,0 +1,5 @@
1
+ export * from "./datetime";
2
+ export { default as getWidthStyle } from "./getWidthStyle";
3
+ export { default as isSubset } from "./isSubset";
4
+ export { default as trueModulo } from "./trueModulo";
5
+ export { default as useControlledHover } from "./useControlledHover";
@@ -0,0 +1,4 @@
1
+ export * from "../grid";
2
+ export * from "../table";
3
+ export { default as Grid } from "../grid";
4
+ export { default as Table } from "../table";
@@ -0,0 +1,4 @@
1
+ export * from "../grid";
2
+ export * from "../table";
3
+ export { default as Grid } from "../grid";
4
+ export { default as Table } from "../table";
@@ -0,0 +1,2 @@
1
+ export declare const GRID_BODY_DATA_TEST_ID = "rbdg-body-rowgroup";
2
+ export declare const GRID_HEADER_DATA_TEST_ID = "rbdg-header-rowgroup";
@@ -0,0 +1,2 @@
1
+ export var GRID_BODY_DATA_TEST_ID = "rbdg-body-rowgroup";
2
+ export var GRID_HEADER_DATA_TEST_ID = "rbdg-header-rowgroup";
@@ -0,0 +1,3 @@
1
+ export * from "./main/types";
2
+ export * from "../common";
3
+ export { default } from "./main/Grid";
package/grid/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./main/types";
2
+ export * from "../common";
3
+ export { default } from "./main/Grid";
@@ -2,4 +2,3 @@ import { FC } from "react";
2
2
  import { GridProps } from "./types";
3
3
  declare const Grid: FC<GridProps>;
4
4
  export default Grid;
5
- export type { GridProps } from "./types";
@@ -0,0 +1,60 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useMemo } from "react";
4
+ import useCombinedPipeline from "../../common/pipeline/useCombinedPipeline";
5
+ import useAugFormattedRows from "../../common/pipeline/useAugFormattedRows";
6
+ import useColNameToWidth from "../../common/pipeline/useColNameToWidth";
7
+ import GridHeader from "./GridHeader";
8
+ import GridBody from "./GridBody";
9
+ import classNames from "classnames";
10
+ import { CSS_PREFIX } from "../../common/constants";
11
+ var Grid = function (_a) {
12
+ var rows = _a.rows, cols = _a.cols, filterModel = _a.filterModel, sortModel = _a.sortModel, pagination = _a.pagination, selectModel = _a.selectModel, width = _a.width, height = _a.height, variant = _a.variant, stripes = _a.stripes, hover = _a.hover, borders = _a.borders, small = _a.small, divider = _a.divider, borderVariant = _a.borderVariant, headerCellVariant = _a.headerCellVariant, headerRowVariant = _a.headerRowVariant, bodyCellVariant = _a.bodyCellVariant, bodyRowVariant = _a.bodyRowVariant;
13
+ var _b = useCombinedPipeline({
14
+ rows: rows,
15
+ cols: cols,
16
+ filterModel: filterModel,
17
+ sortModel: sortModel,
18
+ pagination: pagination,
19
+ selectModel: selectModel,
20
+ }), displayRows = _b.displayRows, filteredRows = _b.filteredRows;
21
+ var colNameToWidth = useColNameToWidth(cols);
22
+ var augFormattedRows = useAugFormattedRows(colNameToWidth, displayRows);
23
+ var gridStyle = useMemo(function () {
24
+ function getWidthProperty(width) {
25
+ if (width === "parent") {
26
+ return "100%";
27
+ }
28
+ if (typeof width === "number") {
29
+ return width;
30
+ }
31
+ return "min-content";
32
+ }
33
+ function getHeightProperty(height) {
34
+ if (height === "parent") {
35
+ return "100%";
36
+ }
37
+ if (typeof height === "number") {
38
+ return height;
39
+ }
40
+ return undefined;
41
+ }
42
+ return {
43
+ width: getWidthProperty(width),
44
+ height: getHeightProperty(height),
45
+ };
46
+ }, [width, height]);
47
+ var vertScrollable = height !== undefined && height !== "auto";
48
+ return (_jsxs("div", { style: gridStyle, className: classNames({
49
+ "overflow-x-auto": width !== undefined && width !== "auto",
50
+ "overflow-y-auto": vertScrollable,
51
+ "rbdg-grid-striped": stripes === "rows",
52
+ "rbdg-grid-striped-columns": stripes === "columns",
53
+ "rbdg-grid-hover": !!hover,
54
+ "rbdg-grid-bordered": borders === "full",
55
+ "rbdg-grid-borderless": borders === "none",
56
+ "rbdg-grid-sm": !!small,
57
+ "rbdg-grid-group-divider": !!divider,
58
+ }, "rbdg-grid", variant && "".concat(CSS_PREFIX, "-").concat(variant), borderVariant && "border-".concat(borderVariant)), role: "grid", "aria-colcount": cols.length, "aria-rowcount": filteredRows.length + 1, children: [_jsx(GridHeader, { cols: cols, rowVariant: headerRowVariant, cellVariant: headerCellVariant, vertScrollable: vertScrollable }), _jsx(GridBody, { augFormattedRows: augFormattedRows, cols: cols, rowVariant: bodyRowVariant, cellVariant: bodyCellVariant })] }));
59
+ };
60
+ export default Grid;
@@ -0,0 +1,4 @@
1
+ import { FC } from "react";
2
+ import { GridBodyProps } from "./types";
3
+ declare const GridBody: FC<GridBodyProps>;
4
+ export default GridBody;
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import getWidthStyles from "./getWidthStyles";
3
+ import classNames from "classnames";
4
+ import { CSS_PREFIX, DEFAULT_COL_WIDTH } from "../../common/constants";
5
+ import { GRID_BODY_DATA_TEST_ID } from "../constants";
6
+ var GridBody = function (_a) {
7
+ var augFormattedRows = _a.augFormattedRows, cols = _a.cols, rowVariant = _a.rowVariant, cellVariant = _a.cellVariant;
8
+ return (_jsx("div", { role: "rowgroup", "data-testid": GRID_BODY_DATA_TEST_ID, children: augFormattedRows.map(function (row, rowDisplayIndex) { return (_jsx("div", { role: "row", "aria-rowindex": row.prePaginationIndex + 2, className: classNames("d-flex", "flex-row", rowVariant &&
9
+ rowVariant(row, rowDisplayIndex) &&
10
+ "".concat(CSS_PREFIX, "-").concat(rowVariant(row, rowDisplayIndex))), children: row.contents.map(function (_a, index) {
11
+ var formattedValue = _a.formattedValue, width = _a.width;
12
+ return (_jsx("div", { style: getWidthStyles(width || DEFAULT_COL_WIDTH), role: "gridcell", className: classNames("rbdg-grid-cell", cellVariant &&
13
+ cellVariant(row.contents[index], row, index, rowDisplayIndex) &&
14
+ "".concat(CSS_PREFIX, "-").concat(cellVariant(row.contents[index], row, index, rowDisplayIndex))), "aria-colindex": index + 1, children: formattedValue }, cols[index].name));
15
+ }) }, row.id)); }) }));
16
+ };
17
+ export default GridBody;
@@ -0,0 +1,4 @@
1
+ import { FC } from "react";
2
+ import { GridHeaderProps } from "./types";
3
+ declare const GridHeader: FC<GridHeaderProps>;
4
+ export default GridHeader;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import getWidthStyles from "./getWidthStyles";
3
+ import classNames from "classnames";
4
+ import { CSS_PREFIX, DEFAULT_COL_WIDTH } from "../../common/constants";
5
+ import { GRID_HEADER_DATA_TEST_ID } from "../constants";
6
+ var GridHeader = function (_a) {
7
+ var cols = _a.cols, vertScrollable = _a.vertScrollable, rowVariant = _a.rowVariant, cellVariant = _a.cellVariant;
8
+ return (_jsx("div", { "data-testid": GRID_HEADER_DATA_TEST_ID, role: "rowgroup", className: classNames(vertScrollable ? ["position-sticky", "z-1", "top-0"] : []), children: _jsx("div", { role: "row", className: classNames("d-flex", "flex-row", rowVariant && "".concat(CSS_PREFIX, "-").concat(rowVariant)), "aria-rowindex": 1, children: cols.map(function (col, index) { return (_jsx("div", { className: classNames("rbdg-grid-cell", "fw-bold", cellVariant &&
9
+ cellVariant(col, index) &&
10
+ "".concat(CSS_PREFIX, "-").concat(cellVariant(col, index))), role: "columnheader", "aria-colindex": index + 1, style: getWidthStyles(col.width || DEFAULT_COL_WIDTH), children: col.label }, col.name)); }) }) }));
11
+ };
12
+ export default GridHeader;
@@ -0,0 +1,3 @@
1
+ import { CSSProperties } from "react";
2
+ declare const getWidthStyles: (width: number) => CSSProperties;
3
+ export default getWidthStyles;
@@ -0,0 +1,6 @@
1
+ var getWidthStyles = function (width) { return ({
2
+ width: width,
3
+ maxWidth: width,
4
+ minWidth: width,
5
+ }); };
6
+ export default getWidthStyles;
@@ -0,0 +1,32 @@
1
+ import { AugFormattedRow, CellData, ColDef, FormattedRow, MainComponentSharedProps } from "../../common";
2
+ export type GridProps = MainComponentSharedProps & {
3
+ height?: GridHeightSetting;
4
+ width?: GridWidthSetting;
5
+ variant?: string;
6
+ stripes?: GridStripeSetting;
7
+ hover?: boolean;
8
+ borders?: GridBorderSetting;
9
+ borderVariant?: string;
10
+ small?: boolean;
11
+ divider?: boolean;
12
+ headerRowVariant?: string;
13
+ headerCellVariant?: (col: ColDef, colIndex: number) => string | null;
14
+ bodyRowVariant?: (row: FormattedRow, displayIndex: number) => string | null;
15
+ bodyCellVariant?: (cell: CellData, row: FormattedRow, colIndex: number, displayIndex: number) => string | null;
16
+ };
17
+ export interface GridHeaderProps {
18
+ cols: GridProps["cols"];
19
+ vertScrollable: boolean;
20
+ rowVariant?: GridProps["headerRowVariant"];
21
+ cellVariant?: GridProps["headerCellVariant"];
22
+ }
23
+ export type GridBodyProps = {
24
+ augFormattedRows: AugFormattedRow[];
25
+ cols: GridProps["cols"];
26
+ rowVariant?: GridProps["bodyRowVariant"];
27
+ cellVariant?: GridProps["bodyCellVariant"];
28
+ };
29
+ export type GridHeightSetting = number | "auto" | "parent";
30
+ export type GridWidthSetting = number | "auto" | "parent";
31
+ export type GridStripeSetting = "rows" | "columns" | "none";
32
+ export type GridBorderSetting = "horizontal" | "full" | "none";
@@ -0,0 +1 @@
1
+ export {};
package/grid.css ADDED
@@ -0,0 +1 @@
1
+ .rbdg-grid>div,.rbdg-grid>div>div,.rbdg-grid>div>div>div{border-color:inherit;border-style:solid;border-width:0}.rbdg-grid{--rbdg-grid-color: var(--bs-emphasis-color);--rbdg-grid-bg: var(--bs-body-bg);--rbdg-grid-border-color: var(--bs-border-color);--rbdg-grid-accent-bg: transparent;--rbdg-grid-striped-color: var(--bs-emphasis-color);--rbdg-grid-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--rbdg-grid-active-color: var(--bs-emphasis-color);--rbdg-grid-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--rbdg-grid-hover-color: var(--bs-emphasis-color);--rbdg-grid-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);border-color:var(--rbdg-grid-border-color)}.rbdg-grid>div{width:min-content}.rbdg-grid>div>div>div{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:.5rem .5rem;color:var(--rbdg-grid-color-state, var(--rbdg-grid-color-type, var(--rbdg-grid-color)));background-color:var(--rbdg-grid-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--rbdg-grid-bg-state, var(--rbdg-grid-bg-type, var(--rbdg-grid-accent-bg)))}.rbdg-grid>div:first-child>div>div{border-bottom-width:var(--rbdg-grid-divider-border-width, var(--rbdg-grid-divider-borderless-width, var(--bs-border-width)));border-bottom-style:var(--rbdg-grid-divider-border-style, inherit);border-bottom-color:var(--rbdg-grid-divider-border-color, inherit)}.rbdg-grid-group-divider{--rbdg-grid-divider-border-width: calc(var(--bs-border-width) * 2);--rbdg-grid-divider-border-style: solid;--rbdg-grid-divider-border-color: currentcolor}.rbdg-grid-sm>div>div>div{padding:.25rem .25rem}.rbdg-grid-bordered{border-width:var(--bs-border-width);border-style:solid}.rbdg-grid-bordered>div>div>div:not(:last-child){border-width:0 var(--bs-border-width) 0 0}.rbdg-grid-bordered>div>div>div:last-child{border-width:0}.rbdg-grid-bordered>div:first-child>div{border-top-width:0;border-right-width:0;border-left-width:0;border-bottom-width:var(--rbdg-grid-divider-border-width, var(--rbdg-grid-divider-borderless-width, var(--bs-border-width)));border-bottom-style:var(--rbdg-grid-divider-border-style, inherit);border-bottom-color:var(--rbdg-grid-divider-border-color, inherit)}.rbdg-grid-bordered>div:last-child>div:not(:last-child){border-width:0 0 var(--bs-border-width) 0}.rbdg-grid-borderless{--rbdg-grid-divider-borderless-width: 0}.rbdg-grid-borderless>div>div>div{border-bottom-width:0}.rbdg-grid-borderless>:not(:first-child){border-top-width:0}.rbdg-grid-striped>div:nth-of-type(2)>div:nth-of-type(odd)>div{--rbdg-grid-color-type: var(--rbdg-grid-striped-color);--rbdg-grid-bg-type: var(--rbdg-grid-striped-bg)}.rbdg-grid-striped-columns>div>div>:nth-child(even){--rbdg-grid-color-type: var(--rbdg-grid-striped-color);--rbdg-grid-bg-type: var(--rbdg-grid-striped-bg)}.rbdg-grid-active{--rbdg-grid-color-state: var(--bs-grid-active-color);--rbdg-grid-bg-state: var(--rbdg-grid-active-bg)}.rbdg-grid-hover>div:nth-of-type(2)>div:hover>div{--rbdg-grid-color-state: var(--rbdg-grid-hover-color);--rbdg-grid-bg-state: var(--rbdg-grid-hover-bg)}.rbdg-grid-primary{--rbdg-grid-color: #000;--rbdg-grid-bg: rgb(206.6, 226, 254.6);--rbdg-grid-border-color: rgb(165.28, 180.8, 203.68);--rbdg-grid-striped-bg: rgb(196.27, 214.7, 241.87);--rbdg-grid-striped-color: #000;--rbdg-grid-active-bg: rgb(185.94, 203.4, 229.14);--rbdg-grid-active-color: #000;--rbdg-grid-hover-bg: rgb(191.105, 209.05, 235.505);--rbdg-grid-hover-color: #000;color:var(--rbdg-grid-color);border-color:var(--rbdg-grid-border-color)}.rbdg-grid-secondary{--rbdg-grid-color: #000;--rbdg-grid-bg: rgb(225.6, 227.4, 229);--rbdg-grid-border-color: rgb(180.48, 181.92, 183.2);--rbdg-grid-striped-bg: rgb(214.32, 216.03, 217.55);--rbdg-grid-striped-color: #000;--rbdg-grid-active-bg: rgb(203.04, 204.66, 206.1);--rbdg-grid-active-color: #000;--rbdg-grid-hover-bg: rgb(208.68, 210.345, 211.825);--rbdg-grid-hover-color: #000;color:var(--rbdg-grid-color);border-color:var(--rbdg-grid-border-color)}.rbdg-grid-success{--rbdg-grid-color: #000;--rbdg-grid-bg: rgb(209, 231, 220.8);--rbdg-grid-border-color: rgb(167.2, 184.8, 176.64);--rbdg-grid-striped-bg: rgb(198.55, 219.45, 209.76);--rbdg-grid-striped-color: #000;--rbdg-grid-active-bg: rgb(188.1, 207.9, 198.72);--rbdg-grid-active-color: #000;--rbdg-grid-hover-bg: rgb(193.325, 213.675, 204.24);--rbdg-grid-hover-color: #000;color:var(--rbdg-grid-color);border-color:var(--rbdg-grid-border-color)}.rbdg-grid-info{--rbdg-grid-color: #000;--rbdg-grid-bg: rgb(206.6, 244.4, 252);--rbdg-grid-border-color: rgb(165.28, 195.52, 201.6);--rbdg-grid-striped-bg: rgb(196.27, 232.18, 239.4);--rbdg-grid-striped-color: #000;--rbdg-grid-active-bg: rgb(185.94, 219.96, 226.8);--rbdg-grid-active-color: #000;--rbdg-grid-hover-bg: rgb(191.105, 226.07, 233.1);--rbdg-grid-hover-color: #000;color:var(--rbdg-grid-color);border-color:var(--rbdg-grid-border-color)}.rbdg-grid-warning{--rbdg-grid-color: #000;--rbdg-grid-bg: rgb(255, 242.6, 205.4);--rbdg-grid-border-color: rgb(204, 194.08, 164.32);--rbdg-grid-striped-bg: rgb(242.25, 230.47, 195.13);--rbdg-grid-striped-color: #000;--rbdg-grid-active-bg: rgb(229.5, 218.34, 184.86);--rbdg-grid-active-color: #000;--rbdg-grid-hover-bg: rgb(235.875, 224.405, 189.995);--rbdg-grid-hover-color: #000;color:var(--rbdg-grid-color);border-color:var(--rbdg-grid-border-color)}.rbdg-grid-danger{--rbdg-grid-color: #000;--rbdg-grid-bg: rgb(248, 214.6, 217.8);--rbdg-grid-border-color: rgb(198.4, 171.68, 174.24);--rbdg-grid-striped-bg: rgb(235.6, 203.87, 206.91);--rbdg-grid-striped-color: #000;--rbdg-grid-active-bg: rgb(223.2, 193.14, 196.02);--rbdg-grid-active-color: #000;--rbdg-grid-hover-bg: rgb(229.4, 198.505, 201.465);--rbdg-grid-hover-color: #000;color:var(--rbdg-grid-color);border-color:var(--rbdg-grid-border-color)}.rbdg-grid-light{--rbdg-grid-color: #000;--rbdg-grid-bg: #f8f9fa;--rbdg-grid-border-color: rgb(198.4, 199.2, 200);--rbdg-grid-striped-bg: rgb(235.6, 236.55, 237.5);--rbdg-grid-striped-color: #000;--rbdg-grid-active-bg: rgb(223.2, 224.1, 225);--rbdg-grid-active-color: #000;--rbdg-grid-hover-bg: rgb(229.4, 230.325, 231.25);--rbdg-grid-hover-color: #000;color:var(--rbdg-grid-color);border-color:var(--rbdg-grid-border-color)}.rbdg-grid-dark{--rbdg-grid-color: #fff;--rbdg-grid-bg: #212529;--rbdg-grid-border-color: rgb(77.4, 80.6, 83.8);--rbdg-grid-striped-bg: rgb(44.1, 47.9, 51.7);--rbdg-grid-striped-color: #fff;--rbdg-grid-active-bg: rgb(55.2, 58.8, 62.4);--rbdg-grid-active-color: #fff;--rbdg-grid-hover-bg: rgb(49.65, 53.35, 57.05);--rbdg-grid-hover-color: #fff;color:var(--rbdg-grid-color);border-color:var(--rbdg-grid-border-color)}
package/grid.scss ADDED
@@ -0,0 +1,231 @@
1
+ @use "sass:color";
2
+ @use "sass:math";
3
+
4
+ $rbdg-prefix: "rbdg-";
5
+
6
+ .rbdg-grid > div,
7
+ .rbdg-grid > div > div,
8
+ .rbdg-grid > div > div > div {
9
+ border-color: inherit;
10
+ border-style: solid;
11
+ border-width: 0;
12
+ }
13
+
14
+ // While these rules seem to work, the way that the three border modes, default; bordered; and borderless override each
15
+ // other is quite hard to understand.
16
+ // Consider refactoring so that each type mode, including default, has a separate class that contains rules for just
17
+ // that mode.
18
+ // The way that each border mode that interacts with dividers with quite complicated. Each combination should be tested
19
+ // separately.
20
+
21
+ .rbdg-grid {
22
+ // In Bootstrap's _tables.scss file, there are variable declarations here to reset some variables to the initial
23
+ // value to facilitate nesting of tables styled with Bootstrap's "table" CSS class. Unlike _tables.scss, there is no
24
+ // reset in this file because the RBDG flex grid is not meant to be nested.
25
+
26
+ --#{$rbdg-prefix}grid-color: #{$table-color};
27
+ --#{$rbdg-prefix}grid-bg: #{$table-bg};
28
+ --#{$rbdg-prefix}grid-border-color: #{$table-border-color};
29
+ --#{$rbdg-prefix}grid-accent-bg: #{$table-accent-bg};
30
+ --#{$rbdg-prefix}grid-striped-color: #{$table-striped-color};
31
+ --#{$rbdg-prefix}grid-striped-bg: #{$table-striped-bg};
32
+ --#{$rbdg-prefix}grid-active-color: #{$table-active-color};
33
+ --#{$rbdg-prefix}grid-active-bg: #{$table-active-bg};
34
+ --#{$rbdg-prefix}grid-hover-color: #{$table-hover-color};
35
+ --#{$rbdg-prefix}grid-hover-bg: #{$table-hover-bg};
36
+
37
+ border-color: var(--#{$rbdg-prefix}grid-border-color);
38
+
39
+ > div {
40
+ width: min-content;
41
+
42
+ > div > div {
43
+ text-overflow: ellipsis;
44
+ white-space: nowrap;
45
+ overflow: hidden;
46
+ padding: $table-cell-padding-y $table-cell-padding-x;
47
+ color: var(
48
+ --#{$rbdg-prefix}grid-color-state,
49
+ var(--#{$rbdg-prefix}grid-color-type, var(--#{$rbdg-prefix}grid-color))
50
+ );
51
+ background-color: var(--#{$rbdg-prefix}grid-bg);
52
+ border-bottom-width: $table-border-width;
53
+ box-shadow: inset 0 0 0 9999px
54
+ var(
55
+ --#{$rbdg-prefix}grid-bg-state,
56
+ var(
57
+ --#{$rbdg-prefix}grid-bg-type,
58
+ var(--#{$rbdg-prefix}grid-accent-bg)
59
+ )
60
+ );
61
+ }
62
+ }
63
+
64
+ // These properties are overridden by the "> div > div > div:not(:last-child)" properties when rbdg-grid-bordered is
65
+ // applied.
66
+ > div:first-child > div > div {
67
+ border-bottom-width: var(
68
+ --#{$rbdg-prefix}grid-divider-border-width,
69
+ var(--#{$rbdg-prefix}grid-divider-borderless-width, $table-border-width)
70
+ );
71
+ border-bottom-style: var(
72
+ --#{$rbdg-prefix}grid-divider-border-style,
73
+ inherit
74
+ );
75
+ border-bottom-color: var(
76
+ --#{$rbdg-prefix}grid-divider-border-color,
77
+ inherit
78
+ );
79
+ }
80
+ }
81
+
82
+ .rbdg-grid-group-divider {
83
+ --#{$rbdg-prefix}grid-divider-border-width: calc(#{$table-border-width} * 2);
84
+ --#{$rbdg-prefix}grid-divider-border-style: solid;
85
+ --#{$rbdg-prefix}grid-divider-border-color: #{$table-group-separator-color};
86
+ }
87
+
88
+ .rbdg-grid-sm {
89
+ > div > div > div {
90
+ padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;
91
+ }
92
+ }
93
+
94
+ .rbdg-grid-bordered {
95
+ border-width: $table-border-width;
96
+ border-style: solid;
97
+
98
+ > div > div {
99
+ > div:not(:last-child) {
100
+ border-width: 0 $table-border-width 0 0;
101
+ }
102
+
103
+ > div:last-child {
104
+ border-width: 0;
105
+ }
106
+ }
107
+
108
+ > div:first-child > div {
109
+ border-top-width: 0;
110
+ border-right-width: 0;
111
+ border-left-width: 0;
112
+ border-bottom-width: var(
113
+ --#{$rbdg-prefix}grid-divider-border-width,
114
+ var(--#{$rbdg-prefix}grid-divider-borderless-width, $table-border-width)
115
+ );
116
+ border-bottom-style: var(
117
+ --#{$rbdg-prefix}grid-divider-border-style,
118
+ inherit
119
+ );
120
+ border-bottom-color: var(
121
+ --#{$rbdg-prefix}grid-divider-border-color,
122
+ inherit
123
+ );
124
+ }
125
+
126
+ > div:last-child {
127
+ > div:not(:last-child) {
128
+ border-width: 0 0 $table-border-width 0;
129
+ }
130
+ }
131
+ }
132
+
133
+ .rbdg-grid-borderless {
134
+ --#{$rbdg-prefix}grid-divider-borderless-width: 0;
135
+
136
+ > div > div > div {
137
+ border-bottom-width: 0;
138
+ }
139
+
140
+ > :not(:first-child) {
141
+ border-top-width: 0;
142
+ }
143
+ }
144
+
145
+ .rbdg-grid-striped {
146
+ > div:nth-of-type(2) > div:nth-of-type(#{$table-striped-order}) > div {
147
+ --#{$rbdg-prefix}grid-color-type: var(--#{$rbdg-prefix}grid-striped-color);
148
+ --#{$rbdg-prefix}grid-bg-type: var(--#{$rbdg-prefix}grid-striped-bg);
149
+ }
150
+ }
151
+
152
+ .rbdg-grid-striped-columns {
153
+ > div > div > :nth-child(#{$table-striped-columns-order}) {
154
+ --#{$rbdg-prefix}grid-color-type: var(--#{$rbdg-prefix}grid-striped-color);
155
+ --#{$rbdg-prefix}grid-bg-type: var(--#{$rbdg-prefix}grid-striped-bg);
156
+ }
157
+ }
158
+
159
+ .rbdg-grid-active {
160
+ --#{$rbdg-prefix}grid-color-state: var(--#{$prefix}grid-active-color);
161
+ --#{$rbdg-prefix}grid-bg-state: var(--#{$rbdg-prefix}grid-active-bg);
162
+ }
163
+
164
+ .rbdg-grid-hover {
165
+ > div:nth-of-type(2) > div:hover > div {
166
+ --#{$rbdg-prefix}grid-color-state: var(--#{$rbdg-prefix}grid-hover-color);
167
+ --#{$rbdg-prefix}grid-bg-state: var(--#{$rbdg-prefix}grid-hover-bg);
168
+ }
169
+ }
170
+
171
+ @mixin rbdg-grid-variant($state, $background) {
172
+ .rbdg-grid-#{$state} {
173
+ $color: color-contrast(opaque($body-bg, $background));
174
+ $hover-bg: color.mix(
175
+ $color,
176
+ $background,
177
+ math.percentage($table-hover-bg-factor)
178
+ );
179
+ $striped-bg: color.mix(
180
+ $color,
181
+ $background,
182
+ math.percentage($table-striped-bg-factor)
183
+ );
184
+ $active-bg: color.mix(
185
+ $color,
186
+ $background,
187
+ math.percentage($table-active-bg-factor)
188
+ );
189
+ $table-border-color: color.mix(
190
+ $color,
191
+ $background,
192
+ math.percentage($table-border-factor)
193
+ );
194
+
195
+ --#{$rbdg-prefix}grid-color: #{$color};
196
+ --#{$rbdg-prefix}grid-bg: #{$background};
197
+ --#{$rbdg-prefix}grid-border-color: #{$table-border-color};
198
+ --#{$rbdg-prefix}grid-striped-bg: #{$striped-bg};
199
+ --#{$rbdg-prefix}grid-striped-color: #{color-contrast($striped-bg)};
200
+ --#{$rbdg-prefix}grid-active-bg: #{$active-bg};
201
+ --#{$rbdg-prefix}grid-active-color: #{color-contrast($active-bg)};
202
+ --#{$rbdg-prefix}grid-hover-bg: #{$hover-bg};
203
+ --#{$rbdg-prefix}grid-hover-color: #{color-contrast($hover-bg)};
204
+
205
+ color: var(--#{$rbdg-prefix}grid-color);
206
+ border-color: var(--#{$rbdg-prefix}grid-border-color);
207
+ }
208
+ }
209
+
210
+ @each $color, $value in $table-variants {
211
+ @include rbdg-grid-variant($color, $value);
212
+ }
213
+
214
+ // Note about Responsive Tables
215
+ //
216
+ // The Bootstrap _tables.scss file contains a series of classes to apply responsive tables at various breakpoints.
217
+ // There is no such equivalent for RBDG flex grid for the following reason.
218
+ //
219
+ // The RBDG flex grid is a div of type "block," so the concept of "responsive" scrollable breakpoints doesn't apply.
220
+ // It appears that for a table, even if the width is to 100%, the browser sometimes disobeys this setting causing
221
+ // the width to be more than the parent, hence the need for responsive tables. Divs do not appear to have this problem.
222
+ //
223
+ // The RBDG flex grid provides other options to achieving a horizontally scrollable grid. They are as follows.
224
+ //
225
+ // When using the default or "auto" setting for the RBDG grid's "width," the intrinsic width of the grid columns is
226
+ // used. In such circumstances, if one wants to make the grid scrollable horizontally, they can enclose the grid in a
227
+ // horizontally-scrollable div.
228
+ //
229
+ // When the grid's width is to set to "parent", the grid takes on the width of the parent (width 100% CSS value) just
230
+ // like the Bootstrap table does. In this case, the grid div itself is horizontally scrollable. In contrast, for
231
+ // responsive Bootstrap tables, it is a div that encloses the table element that is scrollable.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@absreim/react-bootstrap-data-grid",
3
3
  "description": "Data grid UI component for use with web apps using React and Bootstrap",
4
- "version": "2.7.0",
4
+ "version": "4.0.0",
5
5
  "license": "MIT",
6
6
  "author": "Brook Li",
7
7
  "homepage": "https://react-bootstrap-data-grid.vercel.app/",
@@ -0,0 +1,21 @@
1
+ import { FC, ReactNode } from "react";
2
+ import { BaseTableProps } from "./types";
3
+ import { UseCombinedPipelineHook } from "../common/pipeline/useCombinedPipeline";
4
+ import { UseGridSelectionFnsHook } from "../common/pipeline/useGridSelectionFns";
5
+ export interface InternalGridProps {
6
+ gridProps: BaseTableProps;
7
+ hooks: {
8
+ selectFns: UseGridSelectionFnsHook;
9
+ pipelineOutput: UseCombinedPipelineHook;
10
+ };
11
+ slots: {
12
+ colHeaderCells: ReactNode;
13
+ bodyRows: ReactNode;
14
+ prefixHeader?: ReactNode;
15
+ };
16
+ classes?: {
17
+ headerRow?: string[];
18
+ };
19
+ }
20
+ declare const InternalTable: FC<InternalGridProps>;
21
+ export default InternalTable;