@nebula.js/stardust 4.7.0 → 4.8.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.
package/core/esm/dev.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * @nebula.js/stardust v4.7.0
2
+ * @nebula.js/stardust v4.8.1
3
3
  * Copyright (c) 2023 QlikTech International AB
4
4
  * Released under the MIT license.
5
5
  */
@@ -8,7 +8,7 @@ import * as React from 'react';
8
8
  import React__default, { useState as useState$1, useEffect as useEffect$1, forwardRef, useMemo as useMemo$1, useImperativeHandle as useImperativeHandle$1, useReducer, useCallback, useLayoutEffect as useLayoutEffect$1, PureComponent, useRef, useContext, createElement, Component } from 'react';
9
9
  import ReactDOM from 'react-dom';
10
10
  import { CacheProvider, ThemeContext as ThemeContext$2 } from '@emotion/react';
11
- import { Checkbox, Radio, Typography, FormControlLabel, Box, Grid, Tooltip, Paper, IconButton, styled as styled$4, Popover, MenuList, MenuItem, ListItemIcon, Divider, InputAdornment, OutlinedInput, Badge, List, ListItem, Button, Icon, CircularProgress } from '@mui/material';
11
+ import { Checkbox, Radio, Typography, FormControlLabel, Box, Grid, Tooltip, Paper, IconButton, styled as styled$4, Popover, MenuList, MenuItem, ListItemIcon, Divider, OutlinedInput, InputAdornment, Badge, List, ListItem, Button, Icon, CircularProgress } from '@mui/material';
12
12
  import styled$3 from '@emotion/styled';
13
13
 
14
14
  function getDefaultExportFromCjs (x) {
@@ -5670,7 +5670,7 @@ function StyledEngineProvider(props) {
5670
5670
  }
5671
5671
 
5672
5672
  /**
5673
- * @mui/styled-engine v5.14.17
5673
+ * @mui/styled-engine v5.14.18
5674
5674
  *
5675
5675
  * @license MIT
5676
5676
  * This source code is licensed under the MIT license found in the
@@ -5718,7 +5718,7 @@ function _objectWithoutPropertiesLoose(source, excluded) {
5718
5718
  return target;
5719
5719
  }
5720
5720
 
5721
- const _excluded$f = ["values", "unit", "step"];
5721
+ const _excluded$g = ["values", "unit", "step"];
5722
5722
  const sortBreakpointsValues = values => {
5723
5723
  const breakpointsAsArray = Object.keys(values).map(key => ({
5724
5724
  key,
@@ -5753,7 +5753,7 @@ function createBreakpoints(breakpoints) {
5753
5753
  unit = 'px',
5754
5754
  step = 5
5755
5755
  } = breakpoints,
5756
- other = _objectWithoutPropertiesLoose(breakpoints, _excluded$f);
5756
+ other = _objectWithoutPropertiesLoose(breakpoints, _excluded$g);
5757
5757
  const sortedValues = sortBreakpointsValues(values);
5758
5758
  const keys = Object.keys(sortedValues);
5759
5759
  function up(key) {
@@ -6751,7 +6751,7 @@ const styleFunctionSx = unstable_createStyleFunctionSx();
6751
6751
  styleFunctionSx.filterProps = ['sx'];
6752
6752
  var styleFunctionSx$1 = styleFunctionSx;
6753
6753
 
6754
- const _excluded$e = ["breakpoints", "palette", "spacing", "shape"];
6754
+ const _excluded$f = ["breakpoints", "palette", "spacing", "shape"];
6755
6755
  function createTheme$1(options = {}, ...args) {
6756
6756
  const {
6757
6757
  breakpoints: breakpointsInput = {},
@@ -6759,7 +6759,7 @@ function createTheme$1(options = {}, ...args) {
6759
6759
  spacing: spacingInput,
6760
6760
  shape: shapeInput = {}
6761
6761
  } = options,
6762
- other = _objectWithoutPropertiesLoose(options, _excluded$e);
6762
+ other = _objectWithoutPropertiesLoose(options, _excluded$f);
6763
6763
  const breakpoints = createBreakpoints(breakpointsInput);
6764
6764
  const spacing = createSpacing(spacingInput);
6765
6765
  let muiTheme = deepmerge({
@@ -6799,7 +6799,7 @@ function useTheme$3(defaultTheme = systemDefaultTheme$1) {
6799
6799
 
6800
6800
  function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}function clsx(){for(var e,t,f=0,n="";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
6801
6801
 
6802
- const _excluded$d = ["variant"];
6802
+ const _excluded$e = ["variant"];
6803
6803
  function isEmpty$2(string) {
6804
6804
  return string.length === 0;
6805
6805
  }
@@ -6813,7 +6813,7 @@ function propsToClassKey(props) {
6813
6813
  const {
6814
6814
  variant
6815
6815
  } = props,
6816
- other = _objectWithoutPropertiesLoose(props, _excluded$d);
6816
+ other = _objectWithoutPropertiesLoose(props, _excluded$e);
6817
6817
  let classKey = variant || '';
6818
6818
  Object.keys(other).sort().forEach(key => {
6819
6819
  if (key === 'color') {
@@ -6825,7 +6825,7 @@ function propsToClassKey(props) {
6825
6825
  return classKey;
6826
6826
  }
6827
6827
 
6828
- const _excluded$c = ["name", "slot", "skipVariantsResolver", "skipSx", "overridesResolver"];
6828
+ const _excluded$d = ["name", "slot", "skipVariantsResolver", "skipSx", "overridesResolver"];
6829
6829
  function isEmpty$1(obj) {
6830
6830
  return Object.keys(obj).length === 0;
6831
6831
  }
@@ -6962,7 +6962,7 @@ function createStyled(input = {}) {
6962
6962
  // For more details: https://github.com/mui/material-ui/pull/37908
6963
6963
  overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot))
6964
6964
  } = inputOptions,
6965
- options = _objectWithoutPropertiesLoose(inputOptions, _excluded$c);
6965
+ options = _objectWithoutPropertiesLoose(inputOptions, _excluded$d);
6966
6966
 
6967
6967
  // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.
6968
6968
  const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :
@@ -7441,7 +7441,7 @@ function ThemeProvider$1(props) {
7441
7441
  });
7442
7442
  }
7443
7443
 
7444
- const _excluded$b = ["defaultProps", "mixins", "overrides", "palette", "props", "styleOverrides"],
7444
+ const _excluded$c = ["defaultProps", "mixins", "overrides", "palette", "props", "styleOverrides"],
7445
7445
  _excluded2$1 = ["type", "mode"];
7446
7446
  function adaptV4Theme(inputTheme) {
7447
7447
  const {
@@ -7452,7 +7452,7 @@ function adaptV4Theme(inputTheme) {
7452
7452
  props = {},
7453
7453
  styleOverrides = {}
7454
7454
  } = inputTheme,
7455
- other = _objectWithoutPropertiesLoose$1(inputTheme, _excluded$b);
7455
+ other = _objectWithoutPropertiesLoose$1(inputTheme, _excluded$c);
7456
7456
  const theme = _extends$3({}, other, {
7457
7457
  components: {}
7458
7458
  });
@@ -7665,7 +7665,7 @@ const green = {
7665
7665
  };
7666
7666
  var green$1 = green;
7667
7667
 
7668
- const _excluded$a = ["mode", "contrastThreshold", "tonalOffset"];
7668
+ const _excluded$b = ["mode", "contrastThreshold", "tonalOffset"];
7669
7669
  const light$1 = {
7670
7670
  // The colors used to style the text.
7671
7671
  text: {
@@ -7834,7 +7834,7 @@ function createPalette(palette) {
7834
7834
  contrastThreshold = 3,
7835
7835
  tonalOffset = 0.2
7836
7836
  } = palette,
7837
- other = _objectWithoutPropertiesLoose$1(palette, _excluded$a);
7837
+ other = _objectWithoutPropertiesLoose$1(palette, _excluded$b);
7838
7838
  const primary = palette.primary || getDefaultPrimary(mode);
7839
7839
  const secondary = palette.secondary || getDefaultSecondary(mode);
7840
7840
  const error = palette.error || getDefaultError(mode);
@@ -7933,7 +7933,7 @@ function createPalette(palette) {
7933
7933
  return paletteOutput;
7934
7934
  }
7935
7935
 
7936
- const _excluded$9 = ["fontFamily", "fontSize", "fontWeightLight", "fontWeightRegular", "fontWeightMedium", "fontWeightBold", "htmlFontSize", "allVariants", "pxToRem"];
7936
+ const _excluded$a = ["fontFamily", "fontSize", "fontWeightLight", "fontWeightRegular", "fontWeightMedium", "fontWeightBold", "htmlFontSize", "allVariants", "pxToRem"];
7937
7937
  function round$1(value) {
7938
7938
  return Math.round(value * 1e5) / 1e5;
7939
7939
  }
@@ -7964,7 +7964,7 @@ function createTypography(palette, typography) {
7964
7964
  allVariants,
7965
7965
  pxToRem: pxToRem2
7966
7966
  } = _ref,
7967
- other = _objectWithoutPropertiesLoose$1(_ref, _excluded$9);
7967
+ other = _objectWithoutPropertiesLoose$1(_ref, _excluded$a);
7968
7968
  const coef = fontSize / 14;
7969
7969
  const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);
7970
7970
  const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => _extends$3({
@@ -8024,7 +8024,7 @@ function createShadow(...px) {
8024
8024
  const shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];
8025
8025
  var shadows$1 = shadows;
8026
8026
 
8027
- const _excluded$8 = ["duration", "easing", "delay"];
8027
+ const _excluded$9 = ["duration", "easing", "delay"];
8028
8028
  // Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves
8029
8029
  // to learn the context in which each easing should be used.
8030
8030
  const easing = {
@@ -8075,7 +8075,7 @@ function createTransitions(inputTransitions) {
8075
8075
  easing: easingOption = mergedEasing.easeInOut,
8076
8076
  delay = 0
8077
8077
  } = options;
8078
- _objectWithoutPropertiesLoose$1(options, _excluded$8);
8078
+ _objectWithoutPropertiesLoose$1(options, _excluded$9);
8079
8079
  return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');
8080
8080
  };
8081
8081
  return _extends$3({
@@ -8101,7 +8101,7 @@ const zIndex = {
8101
8101
  };
8102
8102
  var zIndex$1 = zIndex;
8103
8103
 
8104
- const _excluded$7 = ["breakpoints", "mixins", "spacing", "palette", "transitions", "typography", "shape"];
8104
+ const _excluded$8 = ["breakpoints", "mixins", "spacing", "palette", "transitions", "typography", "shape"];
8105
8105
  function createTheme(options = {}, ...args) {
8106
8106
  const {
8107
8107
  mixins: mixinsInput = {},
@@ -8109,7 +8109,7 @@ function createTheme(options = {}, ...args) {
8109
8109
  transitions: transitionsInput = {},
8110
8110
  typography: typographyInput = {}
8111
8111
  } = options,
8112
- other = _objectWithoutPropertiesLoose$1(options, _excluded$7);
8112
+ other = _objectWithoutPropertiesLoose$1(options, _excluded$8);
8113
8113
  if (options.vars) {
8114
8114
  throw new Error(formatMuiErrorMessage(18));
8115
8115
  }
@@ -8164,12 +8164,12 @@ const styled = createStyled({
8164
8164
  });
8165
8165
  var styled$1 = styled;
8166
8166
 
8167
- const _excluded$6 = ["theme"];
8167
+ const _excluded$7 = ["theme"];
8168
8168
  function ThemeProvider(_ref) {
8169
8169
  let {
8170
8170
  theme: themeInput
8171
8171
  } = _ref,
8172
- props = _objectWithoutPropertiesLoose$1(_ref, _excluded$6);
8172
+ props = _objectWithoutPropertiesLoose$1(_ref, _excluded$7);
8173
8173
  const scopedTheme = themeInput[THEME_ID];
8174
8174
  return /*#__PURE__*/jsxRuntimeExports.jsx(ThemeProvider$1, _extends$3({}, props, {
8175
8175
  themeId: scopedTheme ? THEME_ID : undefined,
@@ -8551,7 +8551,7 @@ function create$3(definition) {
8551
8551
  return cache[key];
8552
8552
  }
8553
8553
 
8554
- const NEBULA_VERSION_HASH = "d794" ;
8554
+ const NEBULA_VERSION_HASH = "cca9" ;
8555
8555
  ClassNameGenerator$1.configure(componentName => {
8556
8556
  return "njs-".concat(NEBULA_VERSION_HASH, "-").concat(componentName.replace('Mui', ''));
8557
8557
  });
@@ -8812,7 +8812,7 @@ function boot(_ref2) {
8812
8812
  const appRef = React__default.createRef();
8813
8813
  const element = document.createElement('div');
8814
8814
  element.style.display = 'none';
8815
- element.setAttribute('data-nebulajs-version', "4.7.0" );
8815
+ element.setAttribute('data-nebulajs-version', "4.8.1" );
8816
8816
  element.setAttribute('data-app-id', app.id);
8817
8817
  document.body.appendChild(element);
8818
8818
  if (context) {
@@ -10015,6 +10015,7 @@ const barWithCheckboxLeftPadPx = 29;
10015
10015
  const GRID_ROW_HEIGHT = 32;
10016
10016
  const LIST_ROW_HEIGHT = 29;
10017
10017
  const DENSE_ROW_HEIGHT = 20; // same for both list and grid in dense mode
10018
+ const GRID_ITEM_PADDING = 4;
10018
10019
 
10019
10020
  const joinClassNames = namesArray => namesArray.filter(c => !!c).join(' ').trim();
10020
10021
  const getBarWidth = _ref => {
@@ -10030,6 +10031,7 @@ const getBarWidth = _ref => {
10030
10031
  };
10031
10032
  const getFrequencyText = qFrequency => qFrequency || frequencyTextNone;
10032
10033
 
10034
+ const _excluded$6 = ["backgroundColor"];
10033
10035
  const getFreqFlexBasis = _ref => {
10034
10036
  let {
10035
10037
  sizes,
@@ -10111,8 +10113,8 @@ const RowColRoot = styled$1('div', {
10111
10113
  freqHitsValue,
10112
10114
  styles
10113
10115
  } = _ref4;
10114
- const rowFontColor = styles.content.color;
10115
- const rowBackgroundColor = styles.content.backgroundColor;
10116
+ const _styles$content = styles.content,
10117
+ contentFontStyles = _objectWithoutProperties(_styles$content, _excluded$6);
10116
10118
  const selectStyle = getSelectedStyle({
10117
10119
  theme,
10118
10120
  styles,
@@ -10138,20 +10140,17 @@ const RowColRoot = styled$1('div', {
10138
10140
  outline: 'none'
10139
10141
  }
10140
10142
  },
10141
- ["& .".concat(rowColClasses.row)]: {
10142
- flexWrap: 'nowrap',
10143
- color: rowFontColor,
10144
- backgroundColor: rowBackgroundColor
10145
- },
10143
+ ["& .".concat(rowColClasses.row)]: _objectSpread2({
10144
+ flexWrap: 'nowrap'
10145
+ }, styles.content),
10146
10146
  ["& .".concat(rowColClasses.rowBorderBottom)]: {
10147
10147
  borderBottom: isGridCol ? 'none' : "1px solid ".concat(theme.palette.divider),
10148
10148
  borderLeft: isGridCol ? "1px solid ".concat(theme.palette.divider) : 'none'
10149
10149
  },
10150
- ["& .".concat(rowColClasses.column)]: {
10150
+ ["& .".concat(rowColClasses.column)]: _objectSpread2({
10151
10151
  flexWrap: 'nowrap',
10152
- borderRight: "1px solid ".concat(theme.palette.divider),
10153
- color: rowFontColor
10154
- },
10152
+ borderRight: "1px solid ".concat(theme.palette.divider)
10153
+ }, styles.content),
10155
10154
  // The interior wrapper for all field content.
10156
10155
  ["& .".concat(rowColClasses.cell)]: {
10157
10156
  zIndex: 2,
@@ -10170,11 +10169,7 @@ const RowColRoot = styled$1('div', {
10170
10169
  lineHeight: '16px',
10171
10170
  userSelect: 'none',
10172
10171
  paddingRight: '1px'
10173
- }, ellipsis), {}, {
10174
- fontSize: styles.content.fontSize,
10175
- fontFamily: styles.content.fontFamily,
10176
- color: rowFontColor
10177
- }),
10172
+ }, ellipsis), contentFontStyles),
10178
10173
  ["& .".concat(rowColClasses.labelDense)]: {
10179
10174
  fontSize: 12
10180
10175
  },
@@ -10208,7 +10203,7 @@ const RowColRoot = styled$1('div', {
10208
10203
  width: iconWidth,
10209
10204
  minWidth: iconWidth,
10210
10205
  maxWidth: iconWidth,
10211
- color: rowFontColor
10206
+ color: contentFontStyles.color
10212
10207
  },
10213
10208
  // Selection styles (S=Selected, XS=ExcludedSelected, A=Alternative, X=Excluded).
10214
10209
  ["& .".concat(rowColClasses.S)]: _objectSpread2(_objectSpread2({}, selectStyle), {}, {
@@ -10695,7 +10690,8 @@ function getGridItemSizes(_ref) {
10695
10690
  let {
10696
10691
  dataLayout,
10697
10692
  layoutOrder,
10698
- itemPadding
10693
+ itemPadding,
10694
+ fillHeight
10699
10695
  } = _ref;
10700
10696
  // Simulate margin/padding by making the item smaller than its container.
10701
10697
  if (dataLayout === 'singleColumn') {
@@ -10707,14 +10703,14 @@ function getGridItemSizes(_ref) {
10707
10703
  switch (layoutOrder) {
10708
10704
  case 'row':
10709
10705
  return {
10710
- height: "calc(100% - ".concat(itemPadding, "px)"),
10706
+ height: fillHeight ? '100%' : "calc(100% - ".concat(itemPadding, "px)"),
10711
10707
  width: "calc(100% - ".concat(2 * itemPadding, "px)"),
10712
10708
  position: 'absolute',
10713
10709
  left: 4
10714
10710
  };
10715
10711
  case 'column':
10716
10712
  return {
10717
- height: "calc(100% - ".concat(itemPadding, "px)"),
10713
+ height: fillHeight ? '100%' : "calc(100% - ".concat(itemPadding, "px)"),
10718
10714
  width: "calc(100% - ".concat(2 * itemPadding, "px)"),
10719
10715
  position: 'absolute',
10720
10716
  left: 4
@@ -10725,21 +10721,23 @@ function getGridItemSizes(_ref) {
10725
10721
  }
10726
10722
 
10727
10723
  const ItemGrid = styled$1(Grid, {
10728
- shouldForwardProp: prop => !['dataLayout', 'layoutOrder', 'itemPadding', 'cellPaddingRight', 'direction'].includes(prop)
10724
+ shouldForwardProp: prop => !['dataLayout', 'layoutOrder', 'itemPadding', 'cellPaddingRight', 'direction', 'fillHeight'].includes(prop)
10729
10725
  })(_ref => {
10730
10726
  let {
10731
10727
  dataLayout,
10732
10728
  layoutOrder,
10733
10729
  itemPadding,
10734
10730
  cellPaddingRight,
10735
- direction
10731
+ direction,
10732
+ fillHeight
10736
10733
  } = _ref;
10737
10734
  const att = "padding".concat(direction === 'rtl' ? 'Left' : 'Right');
10738
10735
  return {
10739
10736
  ["&.".concat(rowColClasses.fieldRoot)]: _objectSpread2(_objectSpread2({}, getGridItemSizes({
10740
10737
  dataLayout,
10741
10738
  layoutOrder,
10742
- itemPadding
10739
+ itemPadding,
10740
+ fillHeight
10743
10741
  })), {}, {
10744
10742
  [att]: cellPaddingRight ? '8px' : undefined
10745
10743
  })
@@ -11180,7 +11178,8 @@ function RowColumn(_ref) {
11180
11178
  showSearch,
11181
11179
  isModal,
11182
11180
  contentFontStyle,
11183
- styles
11181
+ styles,
11182
+ fillHeight
11184
11183
  } = data;
11185
11184
  const {
11186
11185
  dense = false,
@@ -11208,6 +11207,7 @@ function RowColumn(_ref) {
11208
11207
  }
11209
11208
  const padding = 0;
11210
11209
  styleOverrides = _objectSpread2(_objectSpread2({}, style), {}, {
11210
+ height: fillHeight ? '100%' : style.height,
11211
11211
  left: padding + (columnIndex === 0 ? style.left : Number(style.left) + columnIndex * padding),
11212
11212
  // right: columnIndex === columnCount ? style.right : Number(style.right) + columnIndex * padding,
11213
11213
  top: rowIndex === 0 ? style.top : Number(style.top) + rowIndex * padding
@@ -11344,7 +11344,8 @@ function RowColumn(_ref) {
11344
11344
  onContextMenu: preventContextMenu,
11345
11345
  tabIndex: isFirstElement && keyboard.innerTabStops ? 0 : -1,
11346
11346
  "data-n": cell === null || cell === void 0 ? void 0 : cell.qElemNumber,
11347
- direction: direction
11347
+ direction: direction,
11348
+ fillHeight: fillHeight
11348
11349
  }, (cell === null || cell === void 0 ? void 0 : cell.qFrequency) && /*#__PURE__*/React__default.createElement(Histogram, {
11349
11350
  qFrequency: cell === null || cell === void 0 ? void 0 : cell.qFrequency,
11350
11351
  histogram: histogram,
@@ -12242,7 +12243,7 @@ function createListComponent(_ref) {
12242
12243
  scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));
12243
12244
  return {
12244
12245
  isScrolling: true,
12245
- scrollDirection: prevState.scrollOffset < scrollLeft ? 'forward' : 'backward',
12246
+ scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',
12246
12247
  scrollOffset: scrollOffset,
12247
12248
  scrollUpdateWasRequested: false
12248
12249
  };
@@ -12984,6 +12985,7 @@ function getListBoxComponents(_ref) {
12984
12985
  className: classes$9.styledScrollbars
12985
12986
  };
12986
12987
  const isLocked = layout === null || layout === void 0 ? void 0 : layout.qListObject.qDimensionInfo.qLocked;
12988
+ const fillHeight = listHeight <= itemHeight;
12987
12989
 
12988
12990
  // Item data common for List and Grid.
12989
12991
  const commonItemData = _objectSpread2(_objectSpread2({
@@ -13017,7 +13019,8 @@ function getListBoxComponents(_ref) {
13017
13019
  translator,
13018
13020
  showSearch,
13019
13021
  isModal,
13020
- styles
13022
+ styles,
13023
+ fillHeight
13021
13024
  });
13022
13025
  const List = _ref2 => {
13023
13026
  let {
@@ -13214,6 +13217,21 @@ function getMeasureText(layoutOrNumber) {
13214
13217
  return measureString;
13215
13218
  }
13216
13219
 
13220
+ function getItemHeight(_ref) {
13221
+ let {
13222
+ isGridMode,
13223
+ dense
13224
+ } = _ref;
13225
+ const normalItemHeight = isGridMode ? GRID_ROW_HEIGHT : LIST_ROW_HEIGHT;
13226
+ let itemHeight = dense ? DENSE_ROW_HEIGHT : normalItemHeight;
13227
+ if (isGridMode) {
13228
+ // Emulate a margin between items using padding, since the list library
13229
+ // needs an explicit row height and cannot handle margins.
13230
+ itemHeight += GRID_ITEM_PADDING;
13231
+ }
13232
+ return itemHeight;
13233
+ }
13234
+
13217
13235
  function useListSizes(_ref) {
13218
13236
  let {
13219
13237
  layout,
@@ -13269,14 +13287,10 @@ function useListSizes(_ref) {
13269
13287
  let columnWidth;
13270
13288
  let rowCount;
13271
13289
  const isGridMode = dataLayout === 'grid';
13272
- const itemPadding = 4;
13273
- const normalItemHeight = isGridMode ? GRID_ROW_HEIGHT : LIST_ROW_HEIGHT;
13274
- let itemHeight = dense ? DENSE_ROW_HEIGHT : normalItemHeight;
13275
- if (isGridMode) {
13276
- // Emulate a margin between items using padding, since the list library
13277
- // needs an explicit row height and cannot handle margins.
13278
- itemHeight += itemPadding;
13279
- }
13290
+ const itemHeight = getItemHeight({
13291
+ isGridMode,
13292
+ dense
13293
+ });
13280
13294
  const listHeight = height !== null && height !== void 0 ? height : 8 * itemHeight;
13281
13295
  if (layoutOrder) {
13282
13296
  // Modify container width to achieve the exact design with 8px margins on each side (left and right).
@@ -13285,7 +13299,7 @@ function useListSizes(_ref) {
13285
13299
  overflowStyling = {
13286
13300
  overflowX: 'hidden'
13287
13301
  };
13288
- containerWidth += itemPadding * 2;
13302
+ containerWidth += GRID_ITEM_PADDING * 2;
13289
13303
  ({
13290
13304
  rowCount,
13291
13305
  columnWidth,
@@ -13340,7 +13354,7 @@ function useListSizes(_ref) {
13340
13354
  row: maxRowCount,
13341
13355
  column: maxColumnCount
13342
13356
  },
13343
- itemPadding,
13357
+ itemPadding: GRID_ITEM_PADDING,
13344
13358
  textWidth,
13345
13359
  freqMinWidth,
13346
13360
  freqMaxWidth
@@ -14507,7 +14521,7 @@ const StyledPopover$1 = styled$1(Popover)(_ref => {
14507
14521
  return {
14508
14522
  // Set here to allow clicking through the modals container
14509
14523
  pointerEvents: 'none',
14510
- ["& .".concat(classes$8.icon)]: {
14524
+ ["& .".concat(classes$8.icon, " *")]: {
14511
14525
  color: theme.palette.text.primary
14512
14526
  }
14513
14527
  };
@@ -14565,6 +14579,12 @@ const More$1 = React__default.forwardRef((_ref3, ref) => {
14565
14579
  slotProps: {
14566
14580
  root: {
14567
14581
  className: ActionsToolbarMoreElement.className
14582
+ },
14583
+ paper: {
14584
+ style: _objectSpread2({
14585
+ pointerEvents: 'auto',
14586
+ maxWidth: '250px'
14587
+ }, popoverPaperStyle)
14568
14588
  }
14569
14589
  },
14570
14590
  anchorOrigin: {
@@ -14574,12 +14594,6 @@ const More$1 = React__default.forwardRef((_ref3, ref) => {
14574
14594
  transformOrigin: {
14575
14595
  vertical: 'top',
14576
14596
  horizontal: 'right'
14577
- },
14578
- PaperProps: {
14579
- style: _objectSpread2({
14580
- pointerEvents: 'auto',
14581
- maxWidth: '250px'
14582
- }, popoverPaperStyle)
14583
14597
  }
14584
14598
  }), /*#__PURE__*/React__default.createElement(MenuList, {
14585
14599
  id: "moreMenuList"
@@ -14903,30 +14917,53 @@ var SearchIcon = (props => SvgIcon$2(search(props)));
14903
14917
 
14904
14918
  const TREE_PATH = '/qListObjectDef';
14905
14919
  const WILDCARD = '**';
14906
- const StyledInputAdornment = styled$1(InputAdornment, {
14907
- shouldForwardProp: p => p !== 'styles'
14920
+ const StyledOutlinedInput = styled$1(OutlinedInput, {
14921
+ shouldForwardProp: p => !['styles', 'dense', 'isRtl'].includes(p)
14908
14922
  })(_ref => {
14909
14923
  let {
14910
- styles
14924
+ theme,
14925
+ styles,
14926
+ dense,
14927
+ isRtl
14911
14928
  } = _ref;
14912
- return {
14913
- color: styles.search.color
14914
- };
14915
- });
14916
- const StyledOutlinedInput = styled$1(OutlinedInput, {
14917
- shouldForwardProp: p => p !== 'styles'
14918
- })(_ref2 => {
14919
- let {
14920
- styles
14921
- } = _ref2;
14922
- return {
14929
+ let denseProps = {};
14930
+ if (dense) {
14931
+ denseProps = {
14932
+ fontSize: 12,
14933
+ paddingLeft: theme.spacing(1),
14934
+ '& input': {
14935
+ paddingTop: '5px',
14936
+ paddingBottom: '5px'
14937
+ }
14938
+ };
14939
+ }
14940
+ return _objectSpread2({
14923
14941
  display: 'flex',
14924
- '& .MuiInputBase-root': {
14942
+ border: 'none',
14943
+ fontSize: 14,
14944
+ borderRadius: 0,
14945
+ backgroundColor: styles.search.backgroundColor,
14946
+ paddingLeft: "".concat(CELL_PADDING_LEFT, "px"),
14947
+ flexDirection: isRtl ? 'row-reverse' : 'row',
14948
+ '& fieldset': {
14949
+ borderColor: "".concat(styles.search.borderColor),
14950
+ borderWidth: '1px 0 1px 0',
14951
+ borderRadius: 0
14952
+ },
14953
+ '& .MuiInputBase-root': _objectSpread2({}, styles.search),
14954
+ '& *': {
14925
14955
  color: styles.search.color
14956
+ },
14957
+ '& input': {
14958
+ color: styles.search.color,
14959
+ textAlign: isRtl ? 'right' : 'left'
14960
+ },
14961
+ '&.Mui-focused fieldset.OutlinedInput-notchedOutline': {
14962
+ borderColor: "".concat(styles.search.highlightBorderColor, " !important")
14926
14963
  }
14927
- };
14964
+ }, denseProps);
14928
14965
  });
14929
- function ListBoxSearch(_ref3) {
14966
+ function ListBoxSearch(_ref2) {
14930
14967
  let {
14931
14968
  selections,
14932
14969
  selectionState,
@@ -14940,20 +14977,18 @@ function ListBoxSearch(_ref3) {
14940
14977
  direction,
14941
14978
  hide,
14942
14979
  styles
14943
- } = _ref3;
14980
+ } = _ref2;
14944
14981
  const {
14945
14982
  translator
14946
14983
  } = useContext(InstanceContext);
14947
14984
  const [value, setValue] = useState$1('');
14948
14985
  const [wildcardOn, setWildcardOn] = useState$1(false);
14949
14986
  const inputRef = useRef();
14950
- const theme = useTheme$1();
14951
14987
  const {
14952
14988
  getStoreValue,
14953
14989
  setStoreValue
14954
14990
  } = useDataStore(model);
14955
14991
  const isRtl = direction === 'rtl';
14956
- const inpuTextAlign = isRtl ? 'right' : 'left';
14957
14992
  const cancel = () => selections.isActive() && selections.cancel();
14958
14993
  const abortSearch = async () => {
14959
14994
  if (!selections.isModal()) {
@@ -15077,37 +15112,14 @@ function ListBoxSearch(_ref3) {
15077
15112
  }
15078
15113
  return /*#__PURE__*/React__default.createElement(StyledOutlinedInput, {
15079
15114
  styles: styles,
15080
- startAdornment: /*#__PURE__*/React__default.createElement(StyledInputAdornment, {
15081
- position: "start",
15082
- styles: styles
15115
+ dense: dense,
15116
+ isRtl: isRtl,
15117
+ startAdornment: /*#__PURE__*/React__default.createElement(InputAdornment, {
15118
+ position: "start"
15083
15119
  }, /*#__PURE__*/React__default.createElement(SearchIcon, {
15084
15120
  size: dense ? 'small' : 'normal'
15085
15121
  })),
15086
15122
  className: "search",
15087
- sx: [{
15088
- border: 'none',
15089
- fontSize: 14,
15090
- borderRadius: 0,
15091
- backgroundColor: 'transparent',
15092
- '& fieldset': {
15093
- border: "1px solid ".concat(theme.palette.divider),
15094
- borderWidth: '1px 0 1px 0',
15095
- borderRadius: 0
15096
- },
15097
- '&:hover': {
15098
- border: 'none'
15099
- },
15100
- paddingLeft: "".concat(CELL_PADDING_LEFT, "px")
15101
- }, dense && {
15102
- fontSize: 12,
15103
- paddingLeft: theme.spacing(1),
15104
- '& input': {
15105
- paddingTop: '5px',
15106
- paddingBottom: '5px'
15107
- }
15108
- }, {
15109
- flexDirection: isRtl ? 'row-reverse' : 'row'
15110
- }],
15111
15123
  inputRef: inputRef,
15112
15124
  size: "small",
15113
15125
  fullWidth: true,
@@ -15119,9 +15131,6 @@ function ListBoxSearch(_ref3) {
15119
15131
  autoFocus: autoFocus,
15120
15132
  inputProps: {
15121
15133
  tabIndex: keyboard.innerTabStops ? 0 : -1,
15122
- style: {
15123
- textAlign: "".concat(inpuTextAlign)
15124
- },
15125
15134
  'data-testid': 'search-input-field',
15126
15135
  'aria-label': translator.get('Listbox.Search.ScreenReaderInstructions')
15127
15136
  }
@@ -16319,7 +16328,7 @@ const {
16319
16328
  * @class
16320
16329
  * @classdesc Class which provides color transformation functionality
16321
16330
  * @description This is a constructor.
16322
- * @private This is a constructor.
16331
+ * @private
16323
16332
  * @param {object} - Parameters to create a color from different notations
16324
16333
  * @example
16325
16334
  * // a few ways of instantiating a red color
@@ -17112,6 +17121,211 @@ class Color {
17112
17121
  }
17113
17122
  }
17114
17123
 
17124
+ const MULTI_REG = /,(?![^(]*\))/;
17125
+ const SINGLE_REG = /\s(?![^(]*\))/;
17126
+ const LENGTH_REG = /^[0-9]+[a-zA-Z%]+?$/;
17127
+ const PREDEFINED_STRINGS = ['none', 'inset', 'initial', 'inherit'];
17128
+ const isLength = v => v === '0' || LENGTH_REG.test(v);
17129
+ const getColor = singleShadowString => {
17130
+ if (!singleShadowString) return undefined;
17131
+ const parts = singleShadowString.split(SINGLE_REG).filter(part => !PREDEFINED_STRINGS.includes(part.toLowerCase()));
17132
+ const last = parts.at(-1);
17133
+ const color = last && !isLength(last) && !PREDEFINED_STRINGS.includes(last.toLowerCase()) ? last : undefined;
17134
+ return color;
17135
+ };
17136
+ const getShadows = shadowString => {
17137
+ if (!shadowString) return [];
17138
+ return shadowString.split(MULTI_REG).map(s => s.trim());
17139
+ };
17140
+
17141
+ /**
17142
+ * Combine box shadow with box shadow color.
17143
+ * @private
17144
+ * @param {string} boxShadow - Box shadow which may include color
17145
+ * @param {string} themeBoxShadow - Box shadow from theme which may include color
17146
+ * @param {string | undefined} boxShadowColor - Box shadow color
17147
+ * @returns {string} Returns the combined box shadow and box shadow color
17148
+ *
17149
+ * If boxShadow is a single shadow and has a color then this color will be replaced by boxShadowColor and then
17150
+ * returned as the result,otherwise boxShadowColor will be added to boxShadow and then returned as the result.
17151
+ * If boxShadow is multiple shadows or an empty string then it will be returned as the result.
17152
+ *
17153
+ * @example getFullBoxShadow('none', '', 'red') returns 'none'
17154
+ *
17155
+ * @example getFullBoxShadow('initial', '', 'red') returns 'initial'
17156
+ *
17157
+ * @example getFullBoxShadow('inherit', '', 'red') returns 'inherit'
17158
+ *
17159
+ * @example getFullBoxShadow('', '', 'red') returns ''
17160
+ *
17161
+ * @example getFullBoxShadow('1px 2px blue, 3px 6px green', '', 'red') returns '1px 2px blue, 3px 6px green'
17162
+ *
17163
+ * @example getFullBoxShadow('1px 2px blue', '', 'red') returns '1px 2px red'
17164
+ *
17165
+ * @example getFullBoxShadow('1px 2px', '', 'red') returns '1px 2px red'
17166
+ *
17167
+ * @example getFullBoxShadow('1px 2px', '2px 5px green', undefined) returns '1px 2px green'
17168
+ *
17169
+ * @example getFullBoxShadow('1px 2px', '2px 5px', undefined) returns '1px 2px'
17170
+ */
17171
+ const getFullBoxShadow = (boxShadow, themeBoxShadow, boxShadowColor) => {
17172
+ if (boxShadow && PREDEFINED_STRINGS.includes(boxShadow.toLowerCase())) return boxShadow.toLowerCase();
17173
+ const shadowArray = getShadows(boxShadow);
17174
+ if (shadowArray.length !== 1) return boxShadow;
17175
+ let shadowColor = boxShadowColor;
17176
+ if (!shadowColor) {
17177
+ const themeShadowArray = getShadows(themeBoxShadow);
17178
+ if (themeShadowArray.length !== 1) return boxShadow;
17179
+ shadowColor = getColor(themeShadowArray[0]);
17180
+ }
17181
+ if (!shadowColor) return boxShadow;
17182
+ const color = getColor(shadowArray[0]);
17183
+ if (color) return boxShadow.replace(color, shadowColor);
17184
+ return "".concat(boxShadow, " ").concat(shadowColor);
17185
+ };
17186
+
17187
+ function resolveProperty(path, attribute, theme, objectType) {
17188
+ if (theme && objectType) {
17189
+ return theme.getStyle("object.".concat(objectType), path, attribute);
17190
+ }
17191
+ if (theme) {
17192
+ return theme.getStyle('', path, attribute);
17193
+ }
17194
+ return undefined;
17195
+ }
17196
+
17197
+ const supportNone = true;
17198
+ function resolveColor(colorObj, path, attribute, theme, objectType) {
17199
+ if (colorObj && theme) {
17200
+ return colorObj.color !== 'none' ? theme.getColorPickerColor(colorObj, supportNone) : undefined;
17201
+ }
17202
+ return resolveProperty(path, attribute, theme, objectType);
17203
+ }
17204
+
17205
+ const imageSizingToCssProperty = {
17206
+ originalSize: 'auto auto',
17207
+ alwaysFit: 'contain',
17208
+ fitWidth: '100% auto',
17209
+ fitHeight: 'auto 100%',
17210
+ stretchFit: '100% 100%',
17211
+ alwaysFill: 'cover'
17212
+ };
17213
+ const positionToCss = {
17214
+ 'top-left': 'top left',
17215
+ 'top-center': 'top center',
17216
+ 'top-right': 'top right',
17217
+ 'center-left': 'center left',
17218
+ 'center-center': 'center center',
17219
+ 'center-right': 'center right',
17220
+ 'bottom-left': 'bottom left',
17221
+ 'bottom-center': 'bottom center',
17222
+ 'bottom-right': 'bottom right'
17223
+ };
17224
+
17225
+ // TODO: this needs some proper verification
17226
+ function getSenseServerUrl(app) {
17227
+ var _app$session;
17228
+ let config;
17229
+ let wsUrl;
17230
+ let protocol;
17231
+ let isSecure;
17232
+ if (app !== null && app !== void 0 && (_app$session = app.session) !== null && _app$session !== void 0 && _app$session.config) {
17233
+ config = app.session.config;
17234
+ wsUrl = new URL(config.url);
17235
+ isSecure = wsUrl.protocol === 'wss:';
17236
+ protocol = isSecure ? 'https://' : 'http://';
17237
+ return protocol + wsUrl.host;
17238
+ }
17239
+ return '';
17240
+ }
17241
+ function getBackgroundPosition(bgComp) {
17242
+ var _bgComp$bgImage;
17243
+ let bkgImagePosition = 'center center';
17244
+ if (bgComp !== null && bgComp !== void 0 && (_bgComp$bgImage = bgComp.bgImage) !== null && _bgComp$bgImage !== void 0 && _bgComp$bgImage.position) {
17245
+ bkgImagePosition = positionToCss[bgComp.bgImage.position];
17246
+ }
17247
+ return bkgImagePosition;
17248
+ }
17249
+ function getBackgroundSize(bgComp) {
17250
+ var _bgComp$bgImage2;
17251
+ let bkgImageSize = imageSizingToCssProperty.originalSize;
17252
+ const size = bgComp === null || bgComp === void 0 || (_bgComp$bgImage2 = bgComp.bgImage) === null || _bgComp$bgImage2 === void 0 ? void 0 : _bgComp$bgImage2.sizing;
17253
+ if (size) {
17254
+ bkgImageSize = imageSizingToCssProperty[size];
17255
+ }
17256
+ return bkgImageSize;
17257
+ }
17258
+ function resolveImageUrl(app, relativeUrl) {
17259
+ return relativeUrl ? getSenseServerUrl(app) + relativeUrl : undefined;
17260
+ }
17261
+ function resolveBgImage(bgComp, app) {
17262
+ const bgImageDef = bgComp === null || bgComp === void 0 ? void 0 : bgComp.bgImage;
17263
+ if (bgImageDef) {
17264
+ let url = '';
17265
+ if (bgImageDef.mode === 'media' || bgComp.useImage === 'media') {
17266
+ const urlObj = bgImageDef === null || bgImageDef === void 0 ? void 0 : bgImageDef.mediaUrl;
17267
+ const {
17268
+ qUrl
17269
+ } = (urlObj === null || urlObj === void 0 ? void 0 : urlObj.qStaticContentUrl) || {};
17270
+ url = qUrl ? decodeURIComponent(qUrl) : undefined;
17271
+ url = resolveImageUrl(app, url);
17272
+ }
17273
+ if (bgImageDef.mode === 'expression') {
17274
+ url = bgImageDef.expressionUrl ? decodeURIComponent(bgImageDef.expressionUrl) : undefined;
17275
+ }
17276
+ const pos = getBackgroundPosition(bgComp);
17277
+ const size = getBackgroundSize(bgComp);
17278
+ return url ? {
17279
+ url,
17280
+ pos,
17281
+ size
17282
+ } : undefined;
17283
+ }
17284
+ return undefined;
17285
+ }
17286
+ function resolveBgColor(comp, theme, objectType) {
17287
+ const bgColor = comp === null || comp === void 0 ? void 0 : comp.bgColor;
17288
+ if (bgColor && theme) {
17289
+ if (bgColor.useExpression) {
17290
+ return theme.validateColor(bgColor.colorExpression);
17291
+ }
17292
+ }
17293
+ return resolveColor(bgColor === null || bgColor === void 0 ? void 0 : bgColor.color, '', 'backgroundColor', theme, objectType);
17294
+ }
17295
+ function resolveBorder(comp, theme, objectType) {
17296
+ const borderColor = resolveColor(comp === null || comp === void 0 ? void 0 : comp.borderColor, '', 'borderColor', theme, objectType);
17297
+ const borderWidth = (comp === null || comp === void 0 ? void 0 : comp.borderWidth) || resolveProperty('', 'borderWidth', theme, objectType);
17298
+ return borderWidth && borderColor ? "".concat(borderWidth, " solid ").concat(borderColor) : undefined;
17299
+ }
17300
+ function resolveBorderRadius(comp, theme, objectType) {
17301
+ return (comp === null || comp === void 0 ? void 0 : comp.borderRadius) || resolveProperty('', 'borderRadius', theme, objectType);
17302
+ }
17303
+ function resolveBoxShadow(comp, theme, objectType) {
17304
+ var _comp$shadow, _comp$shadow2;
17305
+ const themeBoxShadow = resolveProperty('shadow', 'boxShadow', theme, objectType);
17306
+ const boxShadow = (comp === null || comp === void 0 || (_comp$shadow = comp.shadow) === null || _comp$shadow === void 0 ? void 0 : _comp$shadow.boxShadow) || themeBoxShadow;
17307
+ const boxShadowColor = resolveColor(comp === null || comp === void 0 || (_comp$shadow2 = comp.shadow) === null || _comp$shadow2 === void 0 ? void 0 : _comp$shadow2.boxShadowColor, 'shadow', 'boxShadowColor', theme, objectType);
17308
+ return getFullBoxShadow(boxShadow, themeBoxShadow, boxShadowColor);
17309
+ }
17310
+ function unfurlFontStyle(fontStyle, target) {
17311
+ if (fontStyle && Array.isArray(fontStyle)) {
17312
+ return fontStyle;
17313
+ }
17314
+ return target === 'main' ? ['bold'] : [];
17315
+ }
17316
+ function resolveTextStyle(textComp, target, theme, objectType) {
17317
+ var _textComp$title;
17318
+ const textProps = (textComp === null || textComp === void 0 || (_textComp$title = textComp.title) === null || _textComp$title === void 0 ? void 0 : _textComp$title[target]) || {};
17319
+ const fontStyle = unfurlFontStyle(textProps.fontStyle, target);
17320
+ return {
17321
+ fontFamily: textProps.fontFamily || theme.getStyle("object.".concat(objectType), "title.".concat(target), 'fontFamily'),
17322
+ color: textProps.color && textProps.color.color !== 'none' ? theme.getColorPickerColor(textProps.color, true) : theme.getStyle("object.".concat(objectType), target, 'color'),
17323
+ fontWeight: fontStyle.includes('bold') ? 'bold' : 'normal',
17324
+ fontStyle: fontStyle.includes('italic') ? 'italic' : 'normal',
17325
+ textDecoration: fontStyle.includes('underline') ? 'underline' : 'initial'
17326
+ };
17327
+ }
17328
+
17115
17329
  const LIGHT = '#FFF';
17116
17330
  const DARK = '#000';
17117
17331
  const CONTRAST_THRESHOLD = 1.5;
@@ -17213,14 +17427,40 @@ function getSelectionColors(_ref) {
17213
17427
  possibleContrast
17214
17428
  };
17215
17429
  }
17216
- function getStyles(_ref2) {
17217
- var _themeOverrides$heade, _themeOverrides$heade2, _themeOverrides$conte;
17430
+ function getBackgroundColor(_ref2) {
17218
17431
  let {
17432
+ themeApi,
17433
+ themeOverrides
17434
+ } = _ref2;
17435
+ let color;
17436
+ const bgColor = themeOverrides === null || themeOverrides === void 0 ? void 0 : themeOverrides.background;
17437
+ if (!bgColor) {
17438
+ return color;
17439
+ }
17440
+ if (bgColor !== null && bgColor !== void 0 && bgColor.useExpression) {
17441
+ color = resolveBgColor({
17442
+ bgColor
17443
+ }, themeApi, 'listBox');
17444
+ } else {
17445
+ var _themeApi$getColorPic;
17446
+ color = (_themeApi$getColorPic = themeApi.getColorPickerColor(bgColor, true)) === null || _themeApi$getColorPic === void 0 ? void 0 : _themeApi$getColorPic.color;
17447
+ }
17448
+ return color;
17449
+ }
17450
+ function getSearchColor(getListboxStyle) {
17451
+ const desiredTextColor = getListboxStyle('content', 'color');
17452
+ const color = getContrastingColor('#fff', desiredTextColor);
17453
+ return color;
17454
+ }
17455
+ function getStyles(_ref3) {
17456
+ var _themeOverrides$heade, _themeOverrides$backg, _themeOverrides$heade2, _themeOverrides$conte, _themeOverrides$heade3, _themeOverrides$heade4, _themeOverrides$conte2, _themeOverrides$conte3;
17457
+ let {
17458
+ app,
17219
17459
  themeApi,
17220
17460
  theme,
17221
17461
  components = [],
17222
17462
  checkboxes = false
17223
- } = _ref2;
17463
+ } = _ref3;
17224
17464
  const overrides = getOverridesAsObject(components);
17225
17465
  const getListboxStyle = (path, prop) => themeApi.getStyle('object.listBox', path, prop);
17226
17466
  const selections = getSelectionColors({
@@ -17230,22 +17470,51 @@ function getStyles(_ref2) {
17230
17470
  checkboxes
17231
17471
  });
17232
17472
  const themeOverrides = overrides.theme || {};
17473
+ const headerColor = ((_themeOverrides$heade = themeOverrides.header) === null || _themeOverrides$heade === void 0 || (_themeOverrides$heade = _themeOverrides$heade.fontColor) === null || _themeOverrides$heade === void 0 ? void 0 : _themeOverrides$heade.color) || getListboxStyle('title.main', 'color');
17474
+ const bgComponentColor = getBackgroundColor({
17475
+ themeApi,
17476
+ themeOverrides
17477
+ });
17478
+ const bgImage = (_themeOverrides$backg = themeOverrides.background) !== null && _themeOverrides$backg !== void 0 && _themeOverrides$backg.image ? resolveBgImage({
17479
+ bgImage: themeOverrides.background.image
17480
+ }, app) : undefined;
17481
+ const searchBgColor = 'rgba(255, 255, 255, 0.7)';
17482
+ const searchColor = getSearchColor(getListboxStyle);
17483
+ const headerFontStyle = ((_themeOverrides$heade2 = themeOverrides.header) === null || _themeOverrides$heade2 === void 0 ? void 0 : _themeOverrides$heade2.fontStyle) || {};
17484
+ const contentFontStyle = ((_themeOverrides$conte = themeOverrides.content) === null || _themeOverrides$conte === void 0 ? void 0 : _themeOverrides$conte.fontStyle) || {};
17485
+
17486
+ // Ensure we only return falseValue when the component is used, and thus has a false value.
17487
+ const getWithFallback = (value, trueValue, falseValue) => value === true && trueValue || value === false && falseValue || undefined;
17233
17488
  return {
17234
- backgroundColor: getListboxStyle('', 'backgroundColor') || theme.palette.background.default,
17489
+ background: {
17490
+ backgroundColor: bgComponentColor || getListboxStyle('', 'backgroundColor') || theme.palette.background.default,
17491
+ backgroundImage: bgImage !== null && bgImage !== void 0 && bgImage.url && !(bgImage !== null && bgImage !== void 0 && bgImage.url.startsWith('url(')) ? "url('".concat(bgImage.url, "')") : undefined,
17492
+ backgroundRepeat: 'no-repeat',
17493
+ backgroundSize: bgImage === null || bgImage === void 0 ? void 0 : bgImage.size,
17494
+ backgroundPosition: bgImage === null || bgImage === void 0 ? void 0 : bgImage.pos
17495
+ },
17235
17496
  header: {
17236
- color: ((_themeOverrides$heade = themeOverrides.header) === null || _themeOverrides$heade === void 0 || (_themeOverrides$heade = _themeOverrides$heade.fontColor) === null || _themeOverrides$heade === void 0 ? void 0 : _themeOverrides$heade.color) || getListboxStyle('title.main', 'color'),
17237
- fontSize: ((_themeOverrides$heade2 = themeOverrides.header) === null || _themeOverrides$heade2 === void 0 ? void 0 : _themeOverrides$heade2.fontSize) || getListboxStyle('title.main', 'fontSize'),
17238
- fontFamily: getListboxStyle('title.main', 'fontFamily'),
17239
- fontWeight: getListboxStyle('title.main', 'fontWeight') || 'bold'
17497
+ color: headerColor,
17498
+ fontSize: ((_themeOverrides$heade3 = themeOverrides.header) === null || _themeOverrides$heade3 === void 0 ? void 0 : _themeOverrides$heade3.fontSize) || getListboxStyle('title.main', 'fontSize'),
17499
+ fontFamily: ((_themeOverrides$heade4 = themeOverrides.header) === null || _themeOverrides$heade4 === void 0 ? void 0 : _themeOverrides$heade4.fontFamily) || getListboxStyle('title.main', 'fontFamily'),
17500
+ fontWeight: getWithFallback(headerFontStyle.bold, 'bold', 'normal') || getListboxStyle('title.main', 'fontWeight') || 'bold',
17501
+ textDecoration: headerFontStyle.underline ? 'underline' : 'initial',
17502
+ fontStyle: getWithFallback(headerFontStyle.italic, 'italic', 'normal') || getListboxStyle('title.main', 'fontStyle') || 'initial'
17240
17503
  },
17241
17504
  content: {
17242
17505
  backgroundColor: checkboxes ? undefined : selections.possible,
17243
17506
  color: selections.possibleContrast || getListboxStyle('content', 'color'),
17244
- fontSize: ((_themeOverrides$conte = themeOverrides.content) === null || _themeOverrides$conte === void 0 ? void 0 : _themeOverrides$conte.fontSize) || getListboxStyle('content', 'fontSize'),
17245
- fontFamily: getListboxStyle('content', 'fontFamily')
17507
+ fontSize: ((_themeOverrides$conte2 = themeOverrides.content) === null || _themeOverrides$conte2 === void 0 ? void 0 : _themeOverrides$conte2.fontSize) || getListboxStyle('content', 'fontSize'),
17508
+ fontFamily: ((_themeOverrides$conte3 = themeOverrides.content) === null || _themeOverrides$conte3 === void 0 ? void 0 : _themeOverrides$conte3.fontFamily) || getListboxStyle('content', 'fontFamily'),
17509
+ fontWeight: getWithFallback(contentFontStyle.bold, 'bold', 'normal') || getListboxStyle('content', 'fontWeight') || 'normal',
17510
+ textDecoration: contentFontStyle.underline ? 'underline' : 'initial',
17511
+ fontStyle: getWithFallback(contentFontStyle.italic, 'italic', 'normal') || getListboxStyle('content', 'fontStyle') || 'initial'
17246
17512
  },
17247
17513
  search: {
17248
- color: getListboxStyle('content', 'color')
17514
+ color: searchColor,
17515
+ borderColor: theme.palette.divider,
17516
+ highlightBorderColor: theme.palette.primary.main,
17517
+ backgroundColor: searchBgColor
17249
17518
  },
17250
17519
  selections
17251
17520
  };
@@ -18904,6 +19173,33 @@ function isDirectQueryEnabled(_ref) {
18904
19173
  return isDQ;
18905
19174
  }
18906
19175
 
19176
+ function getContainerPadding(_ref) {
19177
+ let {
19178
+ isGridMode,
19179
+ dense,
19180
+ height,
19181
+ layoutOrder
19182
+ } = _ref;
19183
+ let containerPadding;
19184
+ if (isGridMode) {
19185
+ const itemHeight = getItemHeight({
19186
+ isGridMode,
19187
+ dense
19188
+ });
19189
+ let paddingY;
19190
+ if (itemHeight > height) {
19191
+ paddingY = '0px';
19192
+ } else {
19193
+ paddingY = '2px';
19194
+ }
19195
+ containerPadding = layoutOrder === 'row' ? "".concat(paddingY, " 4px") : "".concat(paddingY, " 6px ").concat(paddingY, " 4px");
19196
+ } else {
19197
+ containerPadding = undefined; // to prevent overriding any default padding
19198
+ }
19199
+
19200
+ return containerPadding;
19201
+ }
19202
+
18907
19203
  const PREFIX$4 = 'ListBoxInline';
18908
19204
  const classes$4 = {
18909
19205
  listBoxHeader: "".concat(PREFIX$4, "-listBoxHeader"),
@@ -18919,8 +19215,8 @@ const StyledGrid$3 = styled$1(Grid, {
18919
19215
  isGridMode,
18920
19216
  styles
18921
19217
  } = _ref;
18922
- return {
18923
- background: styles.backgroundColor,
19218
+ return _objectSpread2(_objectSpread2({}, styles.background), {}, {
19219
+ // sets background color and image of listbox
18924
19220
  ["& .".concat(classes$4.listBoxHeader)]: {
18925
19221
  alignSelf: 'center',
18926
19222
  display: 'flex'
@@ -18943,33 +19239,50 @@ const StyledGrid$3 = styled$1(Grid, {
18943
19239
  '&:focus-visible': {
18944
19240
  outline: 'none'
18945
19241
  }
18946
- };
19242
+ });
18947
19243
  });
18948
- const Title = styled$1(Typography)(_ref2 => {
19244
+ const StyledGridHeader = styled$1(Grid, {
19245
+ shouldForwardProp: p => !['styles', 'isRtl'].includes(p)
19246
+ })(_ref2 => {
18949
19247
  let {
18950
- styles
19248
+ styles,
19249
+ isRtl
18951
19250
  } = _ref2;
18952
- return {
18953
- color: styles.header.color,
18954
- fontSize: styles.header.fontSize,
18955
- fontFamily: styles.header.fontFamily,
18956
- fontWeight: styles.header.fontWeight
18957
- };
19251
+ return _objectSpread2(_objectSpread2({
19252
+ flexDirection: isRtl ? 'row-reverse' : 'row',
19253
+ wrap: 'nowrap',
19254
+ minHeight: 32,
19255
+ alignContent: 'center'
19256
+ }, styles.header), {}, {
19257
+ '& *': {
19258
+ // Assign the styles color as defaul color for all elements in the header
19259
+ color: styles.header.color
19260
+ }
19261
+ });
19262
+ });
19263
+ const Title = styled$1(Typography)(_ref3 => {
19264
+ let {
19265
+ styles
19266
+ } = _ref3;
19267
+ return _objectSpread2(_objectSpread2({}, styles.header), {}, {
19268
+ paddingRight: '1px' // make place for italic font style
19269
+ });
18958
19270
  });
18959
- const isModal = _ref3 => {
19271
+
19272
+ const isModal = _ref4 => {
18960
19273
  var _app$isInModalSelecti, _app$isInModalSelecti2;
18961
19274
  let {
18962
19275
  app,
18963
19276
  appSelections
18964
- } = _ref3;
19277
+ } = _ref4;
18965
19278
  return (_app$isInModalSelecti = (_app$isInModalSelecti2 = app.isInModalSelection) === null || _app$isInModalSelecti2 === void 0 ? void 0 : _app$isInModalSelecti2.call(app)) !== null && _app$isInModalSelecti !== void 0 ? _app$isInModalSelecti : appSelections.isInModal();
18966
19279
  };
18967
- function ListBoxInline(_ref4) {
18968
- var _layout$qListObject, _layout$qListObject2, _layoutOptions$dense;
19280
+ function ListBoxInline(_ref5) {
19281
+ var _layout$qListObject, _layout$qListObject2, _layoutOptions$dense, _containerRef$current;
18969
19282
  let {
18970
19283
  options,
18971
19284
  layout
18972
- } = _ref4;
19285
+ } = _ref5;
18973
19286
  const {
18974
19287
  app,
18975
19288
  direction,
@@ -19018,6 +19331,7 @@ function ListBoxInline(_ref4) {
19018
19331
  checkboxes = checkboxesOption
19019
19332
  } = layout || {};
19020
19333
  const styles = getStyles({
19334
+ app,
19021
19335
  themeApi,
19022
19336
  theme,
19023
19337
  components,
@@ -19163,7 +19477,6 @@ function ListBoxInline(_ref4) {
19163
19477
  const showSearchToggle = search === 'toggle' && showSearch;
19164
19478
  const searchVisible = (search === true || showSearchToggle) && !selectDisabled() && searchEnabled !== false;
19165
19479
  const dense = (_layoutOptions$dense = layoutOptions.dense) !== null && _layoutOptions$dense !== void 0 ? _layoutOptions$dense : false;
19166
- const headerHeight = 32;
19167
19480
  const onShowSearch = () => {
19168
19481
  const newValue = !showSearch;
19169
19482
  setShowSearch(newValue);
@@ -19191,10 +19504,12 @@ function ListBoxInline(_ref4) {
19191
19504
 
19192
19505
  // Add a container padding for grid mode to harmonize with the grid item margins (should sum to 8px).
19193
19506
  const isGridMode = (layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.dataLayout) === 'grid';
19194
- let containerPadding;
19195
- if (isGridMode) {
19196
- containerPadding = layoutOptions.layoutOrder === 'row' ? '2px 4px' : '2px 6px 2px 4px';
19197
- }
19507
+ const containerPadding = getContainerPadding({
19508
+ isGridMode,
19509
+ dense,
19510
+ height: (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.clientHeight,
19511
+ layoutOrder: layoutOptions.layoutOrder
19512
+ });
19198
19513
  const searchIconComp = constraints !== null && constraints !== void 0 && constraints.active ? /*#__PURE__*/React__default.createElement(SearchIcon, {
19199
19514
  title: translator.get('Listbox.Search'),
19200
19515
  size: "large",
@@ -19234,6 +19549,7 @@ function ListBoxInline(_ref4) {
19234
19549
  if (isInvalid) {
19235
19550
  renderedCallback === null || renderedCallback === void 0 || renderedCallback();
19236
19551
  }
19552
+ const listBoxMinHeight = showToolbarWithTitle ? DENSE_ROW_HEIGHT + SCROLL_BAR_WIDTH : 0;
19237
19553
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, showDetachedToolbarOnly && /*#__PURE__*/React__default.createElement(ActionsToolbar, _extends$5({
19238
19554
  direction: direction
19239
19555
  }, getActionToolbarProps(true))), /*#__PURE__*/React__default.createElement(StyledGrid$3, {
@@ -19257,15 +19573,14 @@ function ListBoxInline(_ref4) {
19257
19573
  },
19258
19574
  isGridMode: isGridMode,
19259
19575
  "aria-label": keyboard.active ? translator.get('Listbox.ScreenReaderInstructions') : ''
19260
- }, showToolbarWithTitle && /*#__PURE__*/React__default.createElement(Grid, {
19576
+ }, showToolbarWithTitle && /*#__PURE__*/React__default.createElement(StyledGridHeader, {
19261
19577
  item: true,
19262
19578
  container: true,
19263
- minHeight: headerHeight,
19264
- flexDirection: isRtl ? 'row-reverse' : 'row',
19579
+ styles: styles,
19580
+ isRtl: isRtl,
19265
19581
  marginY: 1,
19266
19582
  paddingLeft: "".concat(headerPaddingLeft, "px"),
19267
- paddingRight: "".concat(headerPaddingRight, "px"),
19268
- wrap: "nowrap"
19583
+ paddingRight: "".concat(headerPaddingRight, "px")
19269
19584
  }, showIcons && /*#__PURE__*/React__default.createElement(Grid, {
19270
19585
  item: true,
19271
19586
  container: true,
@@ -19292,17 +19607,16 @@ function ListBoxInline(_ref4) {
19292
19607
  title: layout.title,
19293
19608
  styles: styles
19294
19609
  }, layout.title)), /*#__PURE__*/React__default.createElement(Grid, {
19295
- item: true
19610
+ item: true,
19611
+ display: "flex"
19296
19612
  }, /*#__PURE__*/React__default.createElement(ActionsToolbar, _extends$5({
19297
19613
  direction: direction
19298
19614
  }, getActionToolbarProps(isToolbarDetached))))), /*#__PURE__*/React__default.createElement(Grid, {
19299
19615
  item: true,
19300
19616
  container: true,
19301
19617
  direction: "column",
19302
- style: {
19303
- height: '100%',
19304
- minHeight: DENSE_ROW_HEIGHT + SCROLL_BAR_WIDTH
19305
- },
19618
+ height: "100%",
19619
+ minHeight: listBoxMinHeight,
19306
19620
  role: "region",
19307
19621
  "aria-label": translator.get('Listbox.ResultFilterLabel')
19308
19622
  }, /*#__PURE__*/React__default.createElement(Grid, {
@@ -19328,11 +19642,11 @@ function ListBoxInline(_ref4) {
19328
19642
  className: classes$4.listboxWrapper
19329
19643
  }, isInvalid ? /*#__PURE__*/React__default.createElement(ListBoxError, {
19330
19644
  text: errorText
19331
- }) : /*#__PURE__*/React__default.createElement(AutoSizer, null, _ref5 => {
19645
+ }) : /*#__PURE__*/React__default.createElement(AutoSizer, null, _ref6 => {
19332
19646
  let {
19333
19647
  height,
19334
19648
  width
19335
- } = _ref5;
19649
+ } = _ref6;
19336
19650
  return /*#__PURE__*/React__default.createElement(ListBox, {
19337
19651
  model: model,
19338
19652
  app: app,
@@ -19374,10 +19688,10 @@ function ListBoxInline(_ref4) {
19374
19688
  })))));
19375
19689
  }
19376
19690
  const ListBoxInlineMemoed = React__default.memo(ListBoxInline);
19377
- function IsolateUseLayoutWrapper(_ref6) {
19691
+ function IsolateUseLayoutWrapper(_ref7) {
19378
19692
  let {
19379
19693
  options = {}
19380
- } = _ref6;
19694
+ } = _ref7;
19381
19695
  const {
19382
19696
  model
19383
19697
  } = options;
@@ -21792,205 +22106,6 @@ function Supernova(_ref) {
21792
22106
  }));
21793
22107
  }
21794
22108
 
21795
- const MULTI_REG = /,(?![^(]*\))/;
21796
- const SINGLE_REG = /\s(?![^(]*\))/;
21797
- const LENGTH_REG = /^[0-9]+[a-zA-Z%]+?$/;
21798
- const PREDEFINED_STRINGS = ['none', 'inset', 'initial', 'inherit'];
21799
- const isLength = v => v === '0' || LENGTH_REG.test(v);
21800
- const getColor = singleShadowString => {
21801
- if (!singleShadowString) return undefined;
21802
- const parts = singleShadowString.split(SINGLE_REG).filter(part => !PREDEFINED_STRINGS.includes(part.toLowerCase()));
21803
- const last = parts.at(-1);
21804
- const color = last && !isLength(last) && !PREDEFINED_STRINGS.includes(last.toLowerCase()) ? last : undefined;
21805
- return color;
21806
- };
21807
- const getShadows = shadowString => {
21808
- if (!shadowString) return [];
21809
- return shadowString.split(MULTI_REG).map(s => s.trim());
21810
- };
21811
-
21812
- /**
21813
- * Combine box shadow with box shadow color.
21814
- * @param {string} boxShadow - Box shadow which may include color
21815
- * @param {string} themeBoxShadow - Box shadow from theme which may include color
21816
- * @param {string | undefined} boxShadowColor - Box shadow color
21817
- * @returns {string} Returns the combined box shadow and box shadow color
21818
- *
21819
- * If boxShadow is a single shadow and has a color then this color will be replaced by boxShadowColor and then
21820
- * returned as the result,otherwise boxShadowColor will be added to boxShadow and then returned as the result.
21821
- * If boxShadow is multiple shadows or an empty string then it will be returned as the result.
21822
- *
21823
- * @example getFullBoxShadow('none', '', 'red') returns 'none'
21824
- *
21825
- * @example getFullBoxShadow('initial', '', 'red') returns 'initial'
21826
- *
21827
- * @example getFullBoxShadow('inherit', '', 'red') returns 'inherit'
21828
- *
21829
- * @example getFullBoxShadow('', '', 'red') returns ''
21830
- *
21831
- * @example getFullBoxShadow('1px 2px blue, 3px 6px green', '', 'red') returns '1px 2px blue, 3px 6px green'
21832
- *
21833
- * @example getFullBoxShadow('1px 2px blue', '', 'red') returns '1px 2px red'
21834
- *
21835
- * @example getFullBoxShadow('1px 2px', '', 'red') returns '1px 2px red'
21836
- *
21837
- * @example getFullBoxShadow('1px 2px', '2px 5px green', undefined) returns '1px 2px green'
21838
- *
21839
- * @example getFullBoxShadow('1px 2px', '2px 5px', undefined) returns '1px 2px'
21840
- */
21841
- const getFullBoxShadow = (boxShadow, themeBoxShadow, boxShadowColor) => {
21842
- if (boxShadow && PREDEFINED_STRINGS.includes(boxShadow.toLowerCase())) return boxShadow.toLowerCase();
21843
- const shadowArray = getShadows(boxShadow);
21844
- if (shadowArray.length !== 1) return boxShadow;
21845
- let shadowColor = boxShadowColor;
21846
- if (!shadowColor) {
21847
- const themeShadowArray = getShadows(themeBoxShadow);
21848
- if (themeShadowArray.length !== 1) return boxShadow;
21849
- shadowColor = getColor(themeShadowArray[0]);
21850
- }
21851
- if (!shadowColor) return boxShadow;
21852
- const color = getColor(shadowArray[0]);
21853
- if (color) return boxShadow.replace(color, shadowColor);
21854
- return "".concat(boxShadow, " ").concat(shadowColor);
21855
- };
21856
-
21857
- function resolveProperty(path, attribute, theme, objectType) {
21858
- if (theme && objectType) {
21859
- return theme.getStyle("object.".concat(objectType), path, attribute);
21860
- }
21861
- if (theme) {
21862
- return theme.getStyle('', path, attribute);
21863
- }
21864
- return undefined;
21865
- }
21866
-
21867
- function resolveColor(colorObj, path, attribute, theme, objectType) {
21868
- if (colorObj && theme) {
21869
- return colorObj.color !== 'none' ? theme.getColorPickerColor(colorObj, true) : undefined;
21870
- }
21871
- return resolveProperty(path, attribute, theme, objectType);
21872
- }
21873
-
21874
- const imageSizingToCssProperty = {
21875
- originalSize: 'auto auto',
21876
- alwaysFit: 'contain',
21877
- fitWidth: '100% auto',
21878
- fitHeight: 'auto 100%',
21879
- stretchFit: '100% 100%',
21880
- alwaysFill: 'cover'
21881
- };
21882
- const positionToCss = {
21883
- 'top-left': 'top left',
21884
- 'top-center': 'top center',
21885
- 'top-right': 'top right',
21886
- 'center-left': 'center left',
21887
- 'center-center': 'center center',
21888
- 'center-right': 'center right',
21889
- 'bottom-left': 'bottom left',
21890
- 'bottom-center': 'bottom center',
21891
- 'bottom-right': 'bottom right'
21892
- };
21893
-
21894
- // TODO: this needs some proper verification
21895
- function getSenseServerUrl(app) {
21896
- var _app$session;
21897
- let config;
21898
- let wsUrl;
21899
- let protocol;
21900
- let isSecure;
21901
- if (app !== null && app !== void 0 && (_app$session = app.session) !== null && _app$session !== void 0 && _app$session.config) {
21902
- config = app.session.config;
21903
- wsUrl = new URL(config.url);
21904
- isSecure = wsUrl.protocol === 'wss:';
21905
- protocol = isSecure ? 'https://' : 'http://';
21906
- return protocol + wsUrl.host;
21907
- }
21908
- return '';
21909
- }
21910
- function getBackgroundPosition(bgComp) {
21911
- var _bgComp$bgImage;
21912
- let bkgImagePosition = 'center center';
21913
- if (bgComp !== null && bgComp !== void 0 && (_bgComp$bgImage = bgComp.bgImage) !== null && _bgComp$bgImage !== void 0 && _bgComp$bgImage.position) {
21914
- bkgImagePosition = positionToCss[bgComp.bgImage.position];
21915
- }
21916
- return bkgImagePosition;
21917
- }
21918
- function getBackgroundSize(bgComp) {
21919
- var _bgComp$bgImage2;
21920
- let bkgImageSize = imageSizingToCssProperty.originalSize;
21921
- if (bgComp !== null && bgComp !== void 0 && (_bgComp$bgImage2 = bgComp.bgImage) !== null && _bgComp$bgImage2 !== void 0 && _bgComp$bgImage2.sizing) {
21922
- bkgImageSize = imageSizingToCssProperty[bgComp.bgImage.sizing];
21923
- }
21924
- return bkgImageSize;
21925
- }
21926
- function resolveImageUrl(app, relativeUrl) {
21927
- return relativeUrl ? getSenseServerUrl(app) + relativeUrl : undefined;
21928
- }
21929
- function resolveBgImage(bgComp, app) {
21930
- const bgImageDef = bgComp === null || bgComp === void 0 ? void 0 : bgComp.bgImage;
21931
- if (bgImageDef) {
21932
- let url = '';
21933
- if (bgImageDef.mode === 'media' || bgComp.useImage === 'media') {
21934
- var _bgImageDef$mediaUrl;
21935
- url = bgImageDef !== null && bgImageDef !== void 0 && (_bgImageDef$mediaUrl = bgImageDef.mediaUrl) !== null && _bgImageDef$mediaUrl !== void 0 && (_bgImageDef$mediaUrl = _bgImageDef$mediaUrl.qStaticContentUrl) !== null && _bgImageDef$mediaUrl !== void 0 && _bgImageDef$mediaUrl.qUrl ? decodeURIComponent(bgImageDef.mediaUrl.qStaticContentUrl.qUrl) : undefined;
21936
- url = resolveImageUrl(app, url);
21937
- }
21938
- if (bgImageDef.mode === 'expression') {
21939
- url = bgImageDef.expressionUrl ? decodeURIComponent(bgImageDef.expressionUrl) : undefined;
21940
- }
21941
- const pos = getBackgroundPosition(bgComp);
21942
- const size = getBackgroundSize(bgComp);
21943
- return url ? {
21944
- url,
21945
- pos,
21946
- size
21947
- } : undefined;
21948
- }
21949
- return undefined;
21950
- }
21951
- function resolveBgColor(comp, theme, objectType) {
21952
- const bgColor = comp === null || comp === void 0 ? void 0 : comp.bgColor;
21953
- if (bgColor && theme) {
21954
- if (bgColor.useExpression) {
21955
- return theme.validateColor(bgColor.colorExpression);
21956
- }
21957
- }
21958
- return resolveColor(bgColor === null || bgColor === void 0 ? void 0 : bgColor.color, '', 'backgroundColor', theme, objectType);
21959
- }
21960
- function resolveBorder(comp, theme, objectType) {
21961
- const borderColor = resolveColor(comp === null || comp === void 0 ? void 0 : comp.borderColor, '', 'borderColor', theme, objectType);
21962
- const borderWidth = (comp === null || comp === void 0 ? void 0 : comp.borderWidth) || resolveProperty('', 'borderWidth', theme, objectType);
21963
- return borderWidth && borderColor ? "".concat(borderWidth, " solid ").concat(borderColor) : undefined;
21964
- }
21965
- function resolveBorderRadius(comp, theme, objectType) {
21966
- return (comp === null || comp === void 0 ? void 0 : comp.borderRadius) || resolveProperty('', 'borderRadius', theme, objectType);
21967
- }
21968
- function resolveBoxShadow(comp, theme, objectType) {
21969
- var _comp$shadow, _comp$shadow2;
21970
- const themeBoxShadow = resolveProperty('shadow', 'boxShadow', theme, objectType);
21971
- const boxShadow = (comp === null || comp === void 0 || (_comp$shadow = comp.shadow) === null || _comp$shadow === void 0 ? void 0 : _comp$shadow.boxShadow) || themeBoxShadow;
21972
- const boxShadowColor = resolveColor(comp === null || comp === void 0 || (_comp$shadow2 = comp.shadow) === null || _comp$shadow2 === void 0 ? void 0 : _comp$shadow2.boxShadowColor, 'shadow', 'boxShadowColor', theme, objectType);
21973
- return getFullBoxShadow(boxShadow, themeBoxShadow, boxShadowColor);
21974
- }
21975
- function unfurlFontStyle(fontStyle, target) {
21976
- if (fontStyle && Array.isArray(fontStyle)) {
21977
- return fontStyle;
21978
- }
21979
- return target === 'main' ? ['bold'] : [];
21980
- }
21981
- function resolveTextStyle(textComp, target, theme, objectType) {
21982
- var _textComp$title;
21983
- const textProps = (textComp === null || textComp === void 0 || (_textComp$title = textComp.title) === null || _textComp$title === void 0 ? void 0 : _textComp$title[target]) || {};
21984
- const fontStyle = unfurlFontStyle(textProps.fontStyle, target);
21985
- return {
21986
- fontFamily: textProps.fontFamily || theme.getStyle("object.".concat(objectType), "title.".concat(target), 'fontFamily'),
21987
- color: textProps.color && textProps.color.color !== 'none' ? theme.getColorPickerColor(textProps.color, true) : theme.getStyle("object.".concat(objectType), target, 'color'),
21988
- fontWeight: fontStyle.includes('bold') ? 'bold' : 'normal',
21989
- fontStyle: fontStyle.includes('italic') ? 'italic' : 'normal',
21990
- textDecoration: fontStyle.includes('underline') ? 'underline' : 'initial'
21991
- };
21992
- }
21993
-
21994
22109
  const useStyling = (layout, theme, app, themeName) => {
21995
22110
  const styling = useMemo$1(() => {
21996
22111
  if (layout && theme) {
@@ -25501,6 +25616,17 @@ function getCellRenderer(cell, halo, initialSnOptions, initialSnPlugins, initial
25501
25616
  onMount: onMount
25502
25617
  }));
25503
25618
  }
25619
+ function getBounds(pos, columns, rows) {
25620
+ if (pos.bounds) {
25621
+ return pos.bounds;
25622
+ }
25623
+ return {
25624
+ y: pos.row / rows * 100,
25625
+ x: pos.col / columns * 100,
25626
+ width: pos.colspan / columns * 100,
25627
+ height: pos.rowspan / rows * 100
25628
+ };
25629
+ }
25504
25630
  function Sheet(_ref) {
25505
25631
  let {
25506
25632
  model,
@@ -25541,6 +25667,10 @@ function Sheet(_ref) {
25541
25667
  root.removeCell(c.currentId);
25542
25668
  });
25543
25669
  const lCells = layout.cells;
25670
+ const {
25671
+ columns,
25672
+ rows
25673
+ } = layout;
25544
25674
  // TODO - should try reuse existing objects on subsequent renders
25545
25675
  // Non-id updates should only change the "css"
25546
25676
  const cs = await Promise.all(lCells.map(async c => {
@@ -25550,7 +25680,7 @@ function Sheet(_ref) {
25550
25680
  });
25551
25681
  const cell = cells.find(ce => ce.id === c.name);
25552
25682
  if (cell) {
25553
- cell.bounds = c.bounds;
25683
+ cell.bounds = getBounds(c, columns, rows);
25554
25684
  delete cell.mountedPromise;
25555
25685
  return cell;
25556
25686
  }
@@ -25560,7 +25690,7 @@ function Sheet(_ref) {
25560
25690
  return {
25561
25691
  model: vs.model,
25562
25692
  id: c.name,
25563
- bounds: c.bounds,
25693
+ bounds: getBounds(c, columns, rows),
25564
25694
  cellRef: React__default.createRef(),
25565
25695
  currentId: uid(),
25566
25696
  mounted,