@azrico/reactgrid 1.6.11 → 1.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -37
- package/README.md +16 -0
- package/config/theme-extras.css +121 -120
- package/dist/index.d.ts +1 -0
- package/dist/index.js +15 -0
- package/dist/src/func/func_colsizes.d.ts +22 -0
- package/dist/src/func/func_colsizes.js +86 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +16 -1
- package/dist/src/themes/azgrid-theme.css +121 -120
- package/dist/src/types/types.d.ts +7 -0
- package/dist/src/views/DataGrid.js +27 -2
- package/index.ts +1 -0
- package/package.json +1 -1
- package/src/func/func_colsizes.ts +74 -0
- package/src/index.tsx +1 -0
- package/src/themes/azgrid-theme.css +121 -120
- package/src/types/types.ts +170 -163
- package/src/views/DataGrid.tsx +405 -371
|
@@ -1934,123 +1934,124 @@
|
|
|
1934
1934
|
fill: var(--azgrid-row-fg-hover, var(--azgrid-preset-row-fg-hover));
|
|
1935
1935
|
}
|
|
1936
1936
|
|
|
1937
|
-
/* Keep the menu row in its hover state while the pointer is in the portaled menu.
|
|
1938
|
-
* Match the strongest selected-row :hover selectors, including their cells. */
|
|
1939
|
-
.azgrid.InovuaReactDataGrid.InovuaReactDataGrid--theme-default-light.InovuaReactDataGrid--show-hover-rows .InovuaReactDataGrid__row.azgrid-row--menu-open:not(.InovuaReactDataGrid__row--scrolling):not(.InovuaReactDataGrid__row--empty) .InovuaReactDataGrid__row-hover-target,
|
|
1940
|
-
.azgrid.InovuaReactDataGrid.InovuaReactDataGrid--theme-default-light.InovuaReactDataGrid--show-hover-rows .InovuaReactDataGrid__row.azgrid-row--menu-open:not(.InovuaReactDataGrid__row--scrolling):not(.InovuaReactDataGrid__row--empty) .InovuaReactDataGrid__row-hover-target .InovuaReactDataGrid__cell,
|
|
1941
|
-
.azgrid.InovuaReactDataGrid.InovuaReactDataGrid--theme-default-light.InovuaReactDataGrid--show-hover-rows .InovuaReactDataGrid__row.azgrid-row--menu-open:not(.InovuaReactDataGrid__row--scrolling):not(.InovuaReactDataGrid__row--empty) .InovuaReactDataGrid__row-hover-target .InovuaReactDataGrid__row-index-column {
|
|
1942
|
-
background: var(--azgrid-row-bg-hover, var(--azgrid-preset-row-bg-hover));
|
|
1943
|
-
color: var(--azgrid-row-fg-hover, var(--azgrid-preset-row-fg-hover));
|
|
1944
|
-
}
|
|
1945
|
-
|
|
1946
|
-
/* Additional surfaces and typography not assigned colours by Inovua. */
|
|
1947
|
-
.azgrid.InovuaReactDataGrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__row--active:not(.InovuaReactDataGrid__row--selected) .InovuaReactDataGrid__cell:not(.InovuaReactDataGrid__cell--no-background) {
|
|
1948
|
-
background: var(--azgrid-row-bg-active, var(--azgrid-preset-row-bg-active));
|
|
1949
|
-
}
|
|
1950
|
-
.azgrid.azgrid-tree .InovuaReactDataGrid__row:not(.InovuaReactDataGrid__row--selected):not(.InovuaReactDataGrid__row--active) .InovuaReactDataGrid__row-hover-target:not(:hover),
|
|
1951
|
-
.azgrid .InovuaReactDataGrid__row--group-row:not(.InovuaReactDataGrid__row--selected):not(.InovuaReactDataGrid__row--active) .InovuaReactDataGrid__row-hover-target:not(:hover) {
|
|
1952
|
-
background: var(--azgrid-tree-bg, var(--azgrid-preset-tree-bg));
|
|
1953
|
-
color: var(--azgrid-tree-fg, var(--azgrid-preset-tree-fg));
|
|
1954
|
-
}
|
|
1955
|
-
.azgrid.azgrid-tree .InovuaReactDataGrid__cell__content > svg,
|
|
1956
|
-
.azgrid .InovuaReactDataGrid__cell--group-expand-cell svg {
|
|
1957
|
-
fill: var(--azgrid-tree-fg, var(--azgrid-preset-tree-fg));
|
|
1958
|
-
}
|
|
1959
|
-
.azgrid.InovuaReactDataGrid {
|
|
1960
|
-
background: var(--azgrid-bg, var(--azgrid-preset-bg));
|
|
1961
|
-
color: var(--azgrid-fg, var(--azgrid-preset-fg));
|
|
1962
|
-
border-color: var(--azgrid-border, var(--azgrid-preset-border));
|
|
1963
|
-
border-radius: var(--azgrid-radius, var(--azgrid-preset-radius));
|
|
1964
|
-
font-family: var(--azgrid-font-family, var(--azgrid-preset-font-family));
|
|
1965
|
-
}
|
|
1966
|
-
.azgrid .InovuaReactDataGrid__column-header__content,
|
|
1967
|
-
.azgrid .InovuaReactDataGrid__header-group__title {
|
|
1968
|
-
color: var(--azgrid-header-fg, var(--azgrid-preset-header-fg));
|
|
1969
|
-
font-size: var(--azgrid-header-font-size, var(--azgrid-preset-header-font-size));
|
|
1970
|
-
font-weight: var(--azgrid-header-font-weight, var(--azgrid-preset-header-font-weight));
|
|
1971
|
-
text-transform: var(--azgrid-header-text-transform, var(--azgrid-preset-header-text-transform));
|
|
1972
|
-
letter-spacing: var(--azgrid-header-letter-spacing, var(--azgrid-preset-header-letter-spacing));
|
|
1973
|
-
}
|
|
1974
|
-
.azgrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__cell {
|
|
1975
|
-
border: var(--azgrid-cell-border-width, var(--azgrid-preset-cell-border-width)) solid var(--azgrid-cell-border, var(--azgrid-preset-cell-border));
|
|
1976
|
-
}
|
|
1977
|
-
.azgrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__row--first .InovuaReactDataGrid__cell {
|
|
1978
|
-
/* Inovua's first-row border-top is !important. Keep the same border API on this row. */
|
|
1979
|
-
border-top: var(--azgrid-cell-border-width, var(--azgrid-preset-cell-border-width)) solid var(--azgrid-cell-border, var(--azgrid-preset-cell-border)) !important;
|
|
1980
|
-
}
|
|
1981
|
-
.azgrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__cell:not(.InovuaReactDataGrid__cell--group-expand-cell):not(.InovuaReactDataGrid__cell--expand-cell):not(.InovuaReactDataGrid__cell--reorder) {
|
|
1982
|
-
padding: var(--azgrid-cell-padding, var(--azgrid-preset-cell-padding));
|
|
1983
|
-
}
|
|
1984
|
-
.azgrid .InovuaReactDataGrid__empty-wrapper {
|
|
1985
|
-
background: var(--azgrid-empty-bg, var(--azgrid-preset-empty-bg));
|
|
1986
|
-
color: var(--azgrid-empty-fg, var(--azgrid-preset-empty-fg));
|
|
1987
|
-
}
|
|
1988
|
-
.azgrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__row-details {
|
|
1989
|
-
background: var(--azgrid-details-bg, var(--azgrid-preset-details-bg));
|
|
1990
|
-
}
|
|
1991
|
-
.azgrid .InovuaReactDataGrid__cell--locked-start.InovuaReactDataGrid__cell--last-in-section:after,
|
|
1992
|
-
.azgrid .InovuaReactDataGrid__cell--locked-end.InovuaReactDataGrid__cell--first-in-section:after {
|
|
1993
|
-
box-shadow: var(--azgrid-locked-column-shadow, var(--azgrid-preset-locked-column-shadow));
|
|
1994
|
-
}
|
|
1995
|
-
.azgrid-scope input,
|
|
1996
|
-
.azgrid-scope select,
|
|
1997
|
-
.azgrid-scope .azgrid-searcharea {
|
|
1998
|
-
color: var(--azgrid-filter-fg, var(--azgrid-preset-filter-fg));
|
|
1999
|
-
background-color: var(--azgrid-filter-bg, var(--azgrid-preset-filter-bg));
|
|
2000
|
-
border-color: var(--azgrid-filter-border, var(--azgrid-preset-filter-border));
|
|
2001
|
-
border-radius: var(--azgrid-radius, var(--azgrid-preset-radius));
|
|
2002
|
-
font-family: var(--azgrid-font-family, var(--azgrid-preset-font-family));
|
|
2003
|
-
}
|
|
2004
|
-
.azgrid-scope input::placeholder {
|
|
2005
|
-
color: var(--azgrid-filter-placeholder, var(--azgrid-preset-filter-placeholder));
|
|
2006
|
-
}
|
|
2007
|
-
.azgrid-scope input:focus-visible,
|
|
2008
|
-
.azgrid-scope select:focus-visible {
|
|
2009
|
-
outline: 1px solid var(--azgrid-filter-focus-ring, var(--azgrid-preset-filter-focus-ring));
|
|
2010
|
-
}
|
|
2011
|
-
.azgrid-scope .inovua-react-pagination-toolbar input,
|
|
2012
|
-
.azgrid-scope .inovua-react-pagination-toolbar select {
|
|
2013
|
-
background: var(--azgrid-pagination-bg, var(--azgrid-preset-pagination-bg));
|
|
2014
|
-
color: var(--azgrid-pagination-fg, var(--azgrid-preset-pagination-fg));
|
|
2015
|
-
border-color: var(--azgrid-pagination-border, var(--azgrid-preset-pagination-border));
|
|
2016
|
-
}
|
|
2017
|
-
.azgrid-scope .inovua-react-toolkit-text-input,
|
|
2018
|
-
.azgrid-scope .inovua-react-toolkit-combo-box,
|
|
2019
|
-
.azgrid-scope .inovua-react-toolkit-menu {
|
|
2020
|
-
border-radius: var(--azgrid-radius, var(--azgrid-preset-radius));
|
|
2021
|
-
}
|
|
2022
|
-
/* The row context menu is portaled to <body>, outside .azgrid-scope: these rules stay
|
|
2023
|
-
* unscoped and read the tokens from the theme class DataGrid puts on the menu.
|
|
2024
|
-
* Two classes exceed @azrico/controls' single-class menu rules. */
|
|
2025
|
-
.azgrid-context-menu.azrico-controls-contextmenu {
|
|
2026
|
-
--azrico-contextmenu-color: var(--azgrid-menu-fg, var(--azgrid-preset-menu-fg));
|
|
2027
|
-
--azrico-contextmenu-background: var(--azgrid-menu-bg, var(--azgrid-preset-menu-bg));
|
|
2028
|
-
--azrico-contextmenu-hover: var(--azgrid-menu-bg-hover, var(--azgrid-preset-menu-bg-hover));
|
|
2029
|
-
--azrico-contextmenu-focus: var(--azgrid-accent, var(--azgrid-preset-accent));
|
|
2030
|
-
--azrico-contextmenu-radius: var(--azgrid-radius, var(--azgrid-preset-radius));
|
|
2031
|
-
--azrico-contextmenu-shadow: 0 3px 8px var(--azgrid-shadow-color, var(--azgrid-preset-shadow-color));
|
|
2032
|
-
--azrico-contextmenu-font: var(--azgrid-font-family, var(--azgrid-preset-font-family));
|
|
2033
|
-
border: 1px solid var(--azgrid-menu-border, var(--azgrid-preset-menu-border));
|
|
2034
|
-
}
|
|
2035
|
-
.azgrid-scope, .azgrid-scope * {
|
|
2036
|
-
accent-color: var(--azgrid-accent, var(--azgrid-preset-accent));
|
|
2037
|
-
scrollbar-color: var(--azgrid-scrollbar-thumb, var(--azgrid-preset-scrollbar-thumb)) var(--azgrid-scrollbar-track, var(--azgrid-preset-scrollbar-track));
|
|
2038
|
-
}
|
|
2039
|
-
.azgrid-scope ::-webkit-scrollbar-track {
|
|
2040
|
-
background: var(--azgrid-scrollbar-track, var(--azgrid-preset-scrollbar-track));
|
|
2041
|
-
}
|
|
2042
|
-
.azgrid-scope ::-webkit-scrollbar-thumb {
|
|
2043
|
-
background: var(--azgrid-scrollbar-thumb, var(--azgrid-preset-scrollbar-thumb));
|
|
2044
|
-
}
|
|
2045
|
-
/* The grid draws its own scrollbars and pushes the native one out of view by a
|
|
2046
|
-
fixed offset. Setting scrollbar-color switches Chrome to the standard (wider)
|
|
2047
|
-
scrollbar, which then overlaps the last pixels of the viewport. Hide it
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
1937
|
+
/* Keep the menu row in its hover state while the pointer is in the portaled menu.
|
|
1938
|
+
* Match the strongest selected-row :hover selectors, including their cells. */
|
|
1939
|
+
.azgrid.InovuaReactDataGrid.InovuaReactDataGrid--theme-default-light.InovuaReactDataGrid--show-hover-rows .InovuaReactDataGrid__row.azgrid-row--menu-open:not(.InovuaReactDataGrid__row--scrolling):not(.InovuaReactDataGrid__row--empty) .InovuaReactDataGrid__row-hover-target,
|
|
1940
|
+
.azgrid.InovuaReactDataGrid.InovuaReactDataGrid--theme-default-light.InovuaReactDataGrid--show-hover-rows .InovuaReactDataGrid__row.azgrid-row--menu-open:not(.InovuaReactDataGrid__row--scrolling):not(.InovuaReactDataGrid__row--empty) .InovuaReactDataGrid__row-hover-target .InovuaReactDataGrid__cell,
|
|
1941
|
+
.azgrid.InovuaReactDataGrid.InovuaReactDataGrid--theme-default-light.InovuaReactDataGrid--show-hover-rows .InovuaReactDataGrid__row.azgrid-row--menu-open:not(.InovuaReactDataGrid__row--scrolling):not(.InovuaReactDataGrid__row--empty) .InovuaReactDataGrid__row-hover-target .InovuaReactDataGrid__row-index-column {
|
|
1942
|
+
background: var(--azgrid-row-bg-hover, var(--azgrid-preset-row-bg-hover));
|
|
1943
|
+
color: var(--azgrid-row-fg-hover, var(--azgrid-preset-row-fg-hover));
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1946
|
+
/* Additional surfaces and typography not assigned colours by Inovua. */
|
|
1947
|
+
.azgrid.InovuaReactDataGrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__row--active:not(.InovuaReactDataGrid__row--selected) .InovuaReactDataGrid__cell:not(.InovuaReactDataGrid__cell--no-background) {
|
|
1948
|
+
background: var(--azgrid-row-bg-active, var(--azgrid-preset-row-bg-active));
|
|
1949
|
+
}
|
|
1950
|
+
.azgrid.azgrid-tree .InovuaReactDataGrid__row:not(.InovuaReactDataGrid__row--selected):not(.InovuaReactDataGrid__row--active) .InovuaReactDataGrid__row-hover-target:not(:hover),
|
|
1951
|
+
.azgrid .InovuaReactDataGrid__row--group-row:not(.InovuaReactDataGrid__row--selected):not(.InovuaReactDataGrid__row--active) .InovuaReactDataGrid__row-hover-target:not(:hover) {
|
|
1952
|
+
background: var(--azgrid-tree-bg, var(--azgrid-preset-tree-bg));
|
|
1953
|
+
color: var(--azgrid-tree-fg, var(--azgrid-preset-tree-fg));
|
|
1954
|
+
}
|
|
1955
|
+
.azgrid.azgrid-tree .InovuaReactDataGrid__cell__content > svg,
|
|
1956
|
+
.azgrid .InovuaReactDataGrid__cell--group-expand-cell svg {
|
|
1957
|
+
fill: var(--azgrid-tree-fg, var(--azgrid-preset-tree-fg));
|
|
1958
|
+
}
|
|
1959
|
+
.azgrid.InovuaReactDataGrid {
|
|
1960
|
+
background: var(--azgrid-bg, var(--azgrid-preset-bg));
|
|
1961
|
+
color: var(--azgrid-fg, var(--azgrid-preset-fg));
|
|
1962
|
+
border-color: var(--azgrid-border, var(--azgrid-preset-border));
|
|
1963
|
+
border-radius: var(--azgrid-radius, var(--azgrid-preset-radius));
|
|
1964
|
+
font-family: var(--azgrid-font-family, var(--azgrid-preset-font-family));
|
|
1965
|
+
}
|
|
1966
|
+
.azgrid .InovuaReactDataGrid__column-header__content,
|
|
1967
|
+
.azgrid .InovuaReactDataGrid__header-group__title {
|
|
1968
|
+
color: var(--azgrid-header-fg, var(--azgrid-preset-header-fg));
|
|
1969
|
+
font-size: var(--azgrid-header-font-size, var(--azgrid-preset-header-font-size));
|
|
1970
|
+
font-weight: var(--azgrid-header-font-weight, var(--azgrid-preset-header-font-weight));
|
|
1971
|
+
text-transform: var(--azgrid-header-text-transform, var(--azgrid-preset-header-text-transform));
|
|
1972
|
+
letter-spacing: var(--azgrid-header-letter-spacing, var(--azgrid-preset-header-letter-spacing));
|
|
1973
|
+
}
|
|
1974
|
+
.azgrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__cell {
|
|
1975
|
+
border: var(--azgrid-cell-border-width, var(--azgrid-preset-cell-border-width)) solid var(--azgrid-cell-border, var(--azgrid-preset-cell-border));
|
|
1976
|
+
}
|
|
1977
|
+
.azgrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__row--first .InovuaReactDataGrid__cell {
|
|
1978
|
+
/* Inovua's first-row border-top is !important. Keep the same border API on this row. */
|
|
1979
|
+
border-top: var(--azgrid-cell-border-width, var(--azgrid-preset-cell-border-width)) solid var(--azgrid-cell-border, var(--azgrid-preset-cell-border)) !important;
|
|
1980
|
+
}
|
|
1981
|
+
.azgrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__cell:not(.InovuaReactDataGrid__cell--group-expand-cell):not(.InovuaReactDataGrid__cell--expand-cell):not(.InovuaReactDataGrid__cell--reorder) {
|
|
1982
|
+
padding: var(--azgrid-cell-padding, var(--azgrid-preset-cell-padding));
|
|
1983
|
+
}
|
|
1984
|
+
.azgrid .InovuaReactDataGrid__empty-wrapper {
|
|
1985
|
+
background: var(--azgrid-empty-bg, var(--azgrid-preset-empty-bg));
|
|
1986
|
+
color: var(--azgrid-empty-fg, var(--azgrid-preset-empty-fg));
|
|
1987
|
+
}
|
|
1988
|
+
.azgrid.InovuaReactDataGrid--theme-default-light .InovuaReactDataGrid__row-details {
|
|
1989
|
+
background: var(--azgrid-details-bg, var(--azgrid-preset-details-bg));
|
|
1990
|
+
}
|
|
1991
|
+
.azgrid .InovuaReactDataGrid__cell--locked-start.InovuaReactDataGrid__cell--last-in-section:after,
|
|
1992
|
+
.azgrid .InovuaReactDataGrid__cell--locked-end.InovuaReactDataGrid__cell--first-in-section:after {
|
|
1993
|
+
box-shadow: var(--azgrid-locked-column-shadow, var(--azgrid-preset-locked-column-shadow));
|
|
1994
|
+
}
|
|
1995
|
+
.azgrid-scope input,
|
|
1996
|
+
.azgrid-scope select,
|
|
1997
|
+
.azgrid-scope .azgrid-searcharea {
|
|
1998
|
+
color: var(--azgrid-filter-fg, var(--azgrid-preset-filter-fg));
|
|
1999
|
+
background-color: var(--azgrid-filter-bg, var(--azgrid-preset-filter-bg));
|
|
2000
|
+
border-color: var(--azgrid-filter-border, var(--azgrid-preset-filter-border));
|
|
2001
|
+
border-radius: var(--azgrid-radius, var(--azgrid-preset-radius));
|
|
2002
|
+
font-family: var(--azgrid-font-family, var(--azgrid-preset-font-family));
|
|
2003
|
+
}
|
|
2004
|
+
.azgrid-scope input::placeholder {
|
|
2005
|
+
color: var(--azgrid-filter-placeholder, var(--azgrid-preset-filter-placeholder));
|
|
2006
|
+
}
|
|
2007
|
+
.azgrid-scope input:focus-visible,
|
|
2008
|
+
.azgrid-scope select:focus-visible {
|
|
2009
|
+
outline: 1px solid var(--azgrid-filter-focus-ring, var(--azgrid-preset-filter-focus-ring));
|
|
2010
|
+
}
|
|
2011
|
+
.azgrid-scope .inovua-react-pagination-toolbar input,
|
|
2012
|
+
.azgrid-scope .inovua-react-pagination-toolbar select {
|
|
2013
|
+
background: var(--azgrid-pagination-bg, var(--azgrid-preset-pagination-bg));
|
|
2014
|
+
color: var(--azgrid-pagination-fg, var(--azgrid-preset-pagination-fg));
|
|
2015
|
+
border-color: var(--azgrid-pagination-border, var(--azgrid-preset-pagination-border));
|
|
2016
|
+
}
|
|
2017
|
+
.azgrid-scope .inovua-react-toolkit-text-input,
|
|
2018
|
+
.azgrid-scope .inovua-react-toolkit-combo-box,
|
|
2019
|
+
.azgrid-scope .inovua-react-toolkit-menu {
|
|
2020
|
+
border-radius: var(--azgrid-radius, var(--azgrid-preset-radius));
|
|
2021
|
+
}
|
|
2022
|
+
/* The row context menu is portaled to <body>, outside .azgrid-scope: these rules stay
|
|
2023
|
+
* unscoped and read the tokens from the theme class DataGrid puts on the menu.
|
|
2024
|
+
* Two classes exceed @azrico/controls' single-class menu rules. */
|
|
2025
|
+
.azgrid-context-menu.azrico-controls-contextmenu {
|
|
2026
|
+
--azrico-contextmenu-color: var(--azgrid-menu-fg, var(--azgrid-preset-menu-fg));
|
|
2027
|
+
--azrico-contextmenu-background: var(--azgrid-menu-bg, var(--azgrid-preset-menu-bg));
|
|
2028
|
+
--azrico-contextmenu-hover: var(--azgrid-menu-bg-hover, var(--azgrid-preset-menu-bg-hover));
|
|
2029
|
+
--azrico-contextmenu-focus: var(--azgrid-accent, var(--azgrid-preset-accent));
|
|
2030
|
+
--azrico-contextmenu-radius: var(--azgrid-radius, var(--azgrid-preset-radius));
|
|
2031
|
+
--azrico-contextmenu-shadow: 0 3px 8px var(--azgrid-shadow-color, var(--azgrid-preset-shadow-color));
|
|
2032
|
+
--azrico-contextmenu-font: var(--azgrid-font-family, var(--azgrid-preset-font-family));
|
|
2033
|
+
border: 1px solid var(--azgrid-menu-border, var(--azgrid-preset-menu-border));
|
|
2034
|
+
}
|
|
2035
|
+
.azgrid-scope, .azgrid-scope * {
|
|
2036
|
+
accent-color: var(--azgrid-accent, var(--azgrid-preset-accent));
|
|
2037
|
+
scrollbar-color: var(--azgrid-scrollbar-thumb, var(--azgrid-preset-scrollbar-thumb)) var(--azgrid-scrollbar-track, var(--azgrid-preset-scrollbar-track));
|
|
2038
|
+
}
|
|
2039
|
+
.azgrid-scope ::-webkit-scrollbar-track {
|
|
2040
|
+
background: var(--azgrid-scrollbar-track, var(--azgrid-preset-scrollbar-track));
|
|
2041
|
+
}
|
|
2042
|
+
.azgrid-scope ::-webkit-scrollbar-thumb {
|
|
2043
|
+
background: var(--azgrid-scrollbar-thumb, var(--azgrid-preset-scrollbar-thumb));
|
|
2044
|
+
}
|
|
2045
|
+
/* The grid draws its own scrollbars and pushes the native one out of view by a
|
|
2046
|
+
fixed offset. Setting scrollbar-color switches Chrome to the standard (wider)
|
|
2047
|
+
scrollbar, which then overlaps the last pixels of the viewport. Hide it only
|
|
2048
|
+
in the row viewport; toolbars need the native scrollbar for correct sizing. */
|
|
2049
|
+
.azgrid-scope .InovuaReactDataGrid__virtual-list > .inovua-react-scroll-container__wrapper > div {
|
|
2050
|
+
scrollbar-width: none;
|
|
2051
|
+
}
|
|
2052
|
+
.azgrid-scope .InovuaReactDataGrid__virtual-list > .inovua-react-scroll-container__wrapper > div::-webkit-scrollbar {
|
|
2053
|
+
display: none;
|
|
2054
|
+
}
|
|
2055
|
+
.azgrid .InovuaReactDataGrid__row.deleted:after {
|
|
2056
|
+
border-color: var(--azgrid-muted-fg, var(--azgrid-preset-muted-fg));
|
|
2057
|
+
}
|
|
@@ -62,6 +62,13 @@ export type AzGridProps = {
|
|
|
62
62
|
details_columns?: LooseColumnDefinition[];
|
|
63
63
|
details_filter?: FilterValues;
|
|
64
64
|
licenseKey?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Stable id of this grid. When set, the column widths the user resizes are saved in localStorage
|
|
67
|
+
* (see `setGridStorageScope`) and restored on the next load. Leave it out to keep the columns' own widths.
|
|
68
|
+
* Saved widths are matched to columns by name, so grids showing different column sets can share an id.
|
|
69
|
+
* Columns with `width` become resizable (`width` is used as `defaultWidth`).
|
|
70
|
+
*/
|
|
71
|
+
gridId?: string;
|
|
65
72
|
/** accessible name of the grid, set as aria-label on the grid root */
|
|
66
73
|
ariaLabel?: string;
|
|
67
74
|
gridRef?: React.MutableRefObject<TypeComputedProps>;
|
|
@@ -19,6 +19,8 @@ var _useColumnData = require("../hooks/useColumnData");
|
|
|
19
19
|
var _useDatasource = require("../hooks/useDatasource");
|
|
20
20
|
var _useGridSearch = require("../hooks/useGridSearch");
|
|
21
21
|
var _func_a11y = require("../func/func_a11y");
|
|
22
|
+
var _func_colsizes = require("../func/func_colsizes");
|
|
23
|
+
var _lodash = _interopRequireDefault(require("lodash.debounce"));
|
|
22
24
|
var _defaultRowIndexColumnId = require("@inovua/reactdatagrid-community/normalizeColumns/defaultRowIndexColumnId");
|
|
23
25
|
var _defaultCheckColumnId = require("@inovua/reactdatagrid-community/normalizeColumns/defaultCheckColumnId");
|
|
24
26
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -55,8 +57,22 @@ function AzGrid(props) {
|
|
|
55
57
|
/* -------------------------------------------------------------------------- */
|
|
56
58
|
/* Columns */
|
|
57
59
|
/* -------------------------------------------------------------------------- */
|
|
58
|
-
const
|
|
60
|
+
const data_columns = (0, _useColumnData.useColumnData)(props);
|
|
59
61
|
const dataSource = (0, _useDatasource.useDataSource)(props.dataSource, props);
|
|
62
|
+
// saved widths are read once per grid id, resizing only updates this map so the columns aren't re-created mid-drag
|
|
63
|
+
const savedSizes = _react.default.useRef({
|
|
64
|
+
sizes: {}
|
|
65
|
+
});
|
|
66
|
+
const saveSizesDebounced = _react.default.useMemo(() => props.gridId ? (0, _lodash.default)(() => (0, _func_colsizes.saveColumnSizes)(props.gridId, savedSizes.current.sizes), 300) : null, [props.gridId]);
|
|
67
|
+
_react.default.useEffect(() => () => saveSizesDebounced === null || saveSizesDebounced === void 0 ? void 0 : saveSizesDebounced.flush(), [saveSizesDebounced]);
|
|
68
|
+
const cached_columns = _react.default.useMemo(() => {
|
|
69
|
+
if (!props.gridId) return data_columns;
|
|
70
|
+
if (savedSizes.current.gridId !== props.gridId) savedSizes.current = {
|
|
71
|
+
gridId: props.gridId,
|
|
72
|
+
sizes: (0, _func_colsizes.loadColumnSizes)(props.gridId)
|
|
73
|
+
};
|
|
74
|
+
return (0, _func_colsizes.apply_column_sizes)(data_columns, savedSizes.current.sizes);
|
|
75
|
+
}, [data_columns, props.gridId]);
|
|
60
76
|
const a11y_columns = _react.default.useMemo(() => cached_columns.map(col => (0, _func_a11y.apply_column_a11y)(col, {
|
|
61
77
|
gridEditable: !!props.editable
|
|
62
78
|
})), [cached_columns, props.editable]);
|
|
@@ -94,8 +110,17 @@ function AzGrid(props) {
|
|
|
94
110
|
};
|
|
95
111
|
//append filter types instead of replacing it
|
|
96
112
|
if (finalres.filterTypes) finalres.filterTypes = Object.assign({}, _reactdatagridEnterprise.default.defaultProps.filterTypes, finalres.filterTypes);
|
|
113
|
+
if (saveSizesDebounced) finalres.onColumnResize = (info, ...rest) => {
|
|
114
|
+
var _info$column$name, _latestProps$current$2, _latestProps$current$3;
|
|
115
|
+
const name = (_info$column$name = info.column.name) !== null && _info$column$name !== void 0 ? _info$column$name : info.column.id;
|
|
116
|
+
if (name != null && (0, _func_colsizes.isValidWidth)(info.width)) {
|
|
117
|
+
savedSizes.current.sizes[name] = info.width;
|
|
118
|
+
saveSizesDebounced();
|
|
119
|
+
}
|
|
120
|
+
(_latestProps$current$2 = latestProps.current.gridOptions) === null || _latestProps$current$2 === void 0 || (_latestProps$current$3 = _latestProps$current$2.onColumnResize) === null || _latestProps$current$3 === void 0 || _latestProps$current$3.call(_latestProps$current$2, info, ...rest);
|
|
121
|
+
};
|
|
97
122
|
return finalres;
|
|
98
|
-
}, [props.gridOptions, base_gridOptions, forcedOptions]);
|
|
123
|
+
}, [props.gridOptions, base_gridOptions, forcedOptions, saveSizesDebounced]);
|
|
99
124
|
const dynamic_gridOptions = _react.default.useMemo(() => {
|
|
100
125
|
const res = {};
|
|
101
126
|
dynamic_option_names.map(r => {
|
package/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './src/views/DataGrid';
|
|
2
2
|
export * from './src/types/types';
|
|
3
3
|
export { get_row_id, set_row_id, get_col_name, get_col_header } from './src/func/func_grid';
|
|
4
|
+
export { setGridStorageScope, clearColumnSizes } from './src/func/func_colsizes';
|
|
4
5
|
// filter editors for column.filterEditor, so consumers don't import @inovua directly
|
|
5
6
|
export { default as SelectFilter } from '@inovua/reactdatagrid-enterprise/SelectFilter';
|
|
6
7
|
export { default as NumberFilter } from '@inovua/reactdatagrid-enterprise/NumberFilter';
|
package/package.json
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ColumnDefinition } from '../types/types';
|
|
2
|
+
|
|
3
|
+
/** column name -> width in px */
|
|
4
|
+
export type ColumnSizes = { [columnName: string]: number };
|
|
5
|
+
|
|
6
|
+
const KEY_PREFIX = 'azgrid:colsizes';
|
|
7
|
+
let storageScope = '';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Scope the saved column sizes, usually by user id, so different users of one browser don't share them.
|
|
11
|
+
* Grids read their sizes when they mount, so call this before the grids render.
|
|
12
|
+
*/
|
|
13
|
+
export function setGridStorageScope(scope: string | undefined) {
|
|
14
|
+
storageScope = scope == null ? '' : String(scope);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function storageKey(gridId: string) {
|
|
18
|
+
return `${KEY_PREFIX}:${storageScope}:${gridId}`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Saved column widths of a grid, an empty object when there are none or storage is unavailable. */
|
|
22
|
+
export function loadColumnSizes(gridId: string): ColumnSizes {
|
|
23
|
+
const sizes: ColumnSizes = {};
|
|
24
|
+
try {
|
|
25
|
+
const parsed = JSON.parse(localStorage.getItem(storageKey(gridId)) || 'null');
|
|
26
|
+
if (parsed && typeof parsed === 'object')
|
|
27
|
+
Object.keys(parsed).forEach((name) => {
|
|
28
|
+
if (isValidWidth(parsed[name])) sizes[name] = parsed[name];
|
|
29
|
+
});
|
|
30
|
+
} catch (e) {
|
|
31
|
+
//private mode, blocked storage or corrupt JSON: behave as if nothing was saved
|
|
32
|
+
}
|
|
33
|
+
return sizes;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function saveColumnSizes(gridId: string, sizes: ColumnSizes) {
|
|
37
|
+
try {
|
|
38
|
+
localStorage.setItem(storageKey(gridId), JSON.stringify(sizes));
|
|
39
|
+
} catch (e) {
|
|
40
|
+
//quota or blocked storage: the sizes just won't persist
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Forget the saved column widths of a grid. Grids already on screen keep their current sizes until they remount. */
|
|
45
|
+
export function clearColumnSizes(gridId: string) {
|
|
46
|
+
try {
|
|
47
|
+
localStorage.removeItem(storageKey(gridId));
|
|
48
|
+
} catch (e) {
|
|
49
|
+
//nothing to clear
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function isValidWidth(width: any): width is number {
|
|
54
|
+
return typeof width === 'number' && isFinite(width) && width > 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Make the columns resizable and restore the saved widths.
|
|
59
|
+
* A column with `width` is controlled by the grid, so it could not be resized: `width` becomes `defaultWidth`.
|
|
60
|
+
* A saved width replaces the column's width and flex. Saved names that are not columns any more are ignored.
|
|
61
|
+
*/
|
|
62
|
+
export function apply_column_sizes(columns: ColumnDefinition[], sizes: ColumnSizes) {
|
|
63
|
+
return columns.map((col: any) => {
|
|
64
|
+
const saved = sizes[col.name ?? col.id];
|
|
65
|
+
if (!isValidWidth(saved) && col.width == null) return col;
|
|
66
|
+
|
|
67
|
+
if (isValidWidth(saved)) {
|
|
68
|
+
const { width, flex, defaultFlex, ...rest } = col;
|
|
69
|
+
return { ...rest, defaultWidth: saved } as ColumnDefinition;
|
|
70
|
+
}
|
|
71
|
+
const { width, ...rest } = col;
|
|
72
|
+
return { ...rest, defaultWidth: width } as ColumnDefinition;
|
|
73
|
+
});
|
|
74
|
+
}
|
package/src/index.tsx
CHANGED
|
@@ -2,6 +2,7 @@ export * from './views/DataGrid';
|
|
|
2
2
|
export * from './types/types';
|
|
3
3
|
|
|
4
4
|
export { get_row_id, set_row_id, get_col_name, get_col_header } from './func/func_grid';
|
|
5
|
+
export { setGridStorageScope, clearColumnSizes } from './func/func_colsizes';
|
|
5
6
|
|
|
6
7
|
import AzGrid from './views/DataGrid';
|
|
7
8
|
import React from 'react';
|