@digital-ai/dot-components 1.21.2 → 1.21.4

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/CHANGE_LOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.21.4](https://github.com/digital-ai/dot-components/tree/1.21.4) (10/04/2022)
4
+
5
+ [Full Changelog](https://github.com/digital-ai/dot-components/compare/1.21.3...1.21.4)
6
+
7
+ **Features:**
8
+
9
+ - `DotSidebar` Expose a callback when sidebar is expanded or collapsed [\#1273](https://github.com/digital-ai/dot-components/issues/1273)
10
+ - S-87871 Expose callback when sidebar collapses/expands [\#1274](https://github.com/digital-ai/dot-components/pull/1274) ([angel-git](https://github.com/angel-git))
11
+
12
+ **Fixed bugs:**
13
+
14
+ - `DotInputText` multiline is broken since 1.21.3 [\#1275](https://github.com/digital-ai/dot-components/issues/1275)
15
+ - D-22889: `DotInputText` Fix multiline issues [\#1276](https://github.com/digital-ai/dot-components/pull/1276) ([dmiletic85](https://github.com/dmiletic85))
16
+
17
+ ## [1.21.3](https://github.com/digital-ai/dot-components/tree/1.21.3) (09/28/2022)
18
+
19
+ [Full Changelog](https://github.com/digital-ai/dot-components/compare/2.0.0-rc.2...1.21.3)
20
+
21
+ **Features:**
22
+
23
+ - Helper text for InputSelect and AutoComplete components should be aligned with their content [\#1264](https://github.com/digital-ai/dot-components/issues/1264)
24
+ - Toggle button should have the same height as the input field [\#1260](https://github.com/digital-ai/dot-components/issues/1260)
25
+ - Align helper text with the content of the input [\#1259](https://github.com/digital-ai/dot-components/issues/1259)
26
+ - S-87726 Align input content with helper text [\#1265](https://github.com/digital-ai/dot-components/pull/1265) ([nikolinadapic](https://github.com/nikolinadapic))
27
+ - S-87620 Adjust height for inputs and for medium sized buttons [\#1263](https://github.com/digital-ai/dot-components/pull/1263) ([nikolinadapic](https://github.com/nikolinadapic))
28
+ - S-87599: `DotAutocomplete` Add optional `persistentLabel` prop [\#1258](https://github.com/digital-ai/dot-components/pull/1258) ([dmiletic85](https://github.com/dmiletic85))
29
+
30
+ **Fixed bugs:**
31
+
32
+ - DotSideBar sub-menu doesnt close unless clicked on the menu again [\#1158](https://github.com/digital-ai/dot-components/issues/1158)
33
+ - S-85900: Optional behavior for app toolbar click away to close main menu [\#1256](https://github.com/digital-ai/dot-components/pull/1256) ([ray-jonathan](https://github.com/ray-jonathan))
34
+
35
+ ## [2.0.0-rc.2](https://github.com/digital-ai/dot-components/tree/2.0.0-rc.2) (09/15/2022)
36
+
37
+ [Full Changelog](https://github.com/digital-ai/dot-components/compare/1.21.2...2.0.0-rc.2)
38
+
3
39
  ## [1.21.2](https://github.com/digital-ai/dot-components/tree/1.21.2) (09/09/2022)
4
40
 
5
41
  [Full Changelog](https://github.com/digital-ai/dot-components/compare/2.0.0-rc.1...1.21.2)
@@ -19,6 +55,10 @@
19
55
 
20
56
  [Full Changelog](https://github.com/digital-ai/dot-components/compare/1.21.1...2.0.0-rc.1)
21
57
 
58
+ **Features:**
59
+
60
+ - S-87616 Adjust left margin for helper text [\#1262](https://github.com/digital-ai/dot-components/pull/1262) ([nikolinadapic](https://github.com/nikolinadapic))
61
+
22
62
  **Fixed bugs:**
23
63
 
24
64
  - S-86692: component cleanup [\#1238](https://github.com/digital-ai/dot-components/pull/1238) ([CWSites](https://github.com/CWSites))
@@ -161,6 +201,7 @@
161
201
 
162
202
  - Sidebar drawer/expanded does not have a data-testid prop supplied [\#1162](https://github.com/digital-ai/dot-components/issues/1162)
163
203
  - D-21245: make sure `data-testid` is passed to nested lists [\#1182](https://github.com/digital-ai/dot-components/pull/1182) ([CWSites](https://github.com/CWSites))
204
+ - D-21267: adjust color of helper text [\#1174](https://github.com/digital-ai/dot-components/pull/1174) ([CWSites](https://github.com/CWSites))
164
205
 
165
206
  ## [1.17.1](https://github.com/digital-ai/dot-components/tree/1.17.1) (05/19/2022)
166
207
 
@@ -171,10 +212,6 @@
171
212
  - `DotButtonToggle`: Button size is not respected after tooltip change [\#1170](https://github.com/digital-ai/dot-components/issues/1170)
172
213
  - D-21287: `DotButtonToggle`: Button size is not respected after tooltip change [\#1171](https://github.com/digital-ai/dot-components/pull/1171) ([dmiletic85](https://github.com/dmiletic85))
173
214
 
174
- **Merged pull requests:**
175
-
176
- - S-84160: `InputText` and `InputSelect` fields e2e [\#1177](https://github.com/digital-ai/dot-components/pull/1177) ([CWSites](https://github.com/CWSites))
177
-
178
215
  ## [1.17.0](https://github.com/digital-ai/dot-components/tree/1.17.0) (05/18/2022)
179
216
 
180
217
  [Full Changelog](https://github.com/digital-ai/dot-components/compare/1.16.1...1.17.0)
@@ -249,9 +286,7 @@
249
286
  - Text is not centered in avatar circle [\#1115](https://github.com/digital-ai/dot-components/issues/1115)
250
287
  - Checkbox column takes up to much space in a multi-select table [\#1111](https://github.com/digital-ai/dot-components/issues/1111)
251
288
  - `DotNavigationRail` Should be able to update the selected rail [\#1104](https://github.com/digital-ai/dot-components/issues/1104)
252
- - D-20763: Fix bulk action toolbar upper corners [\#1118](https://github.com/digital-ai/dot-components/pull/1118) ([selsemore](https://github.com/selsemore))
253
289
  - D-20736: Fix text alignment for small DotAvatar [\#1116](https://github.com/digital-ai/dot-components/pull/1116) ([selsemore](https://github.com/selsemore))
254
- - D-20719: `DotTable`: Checkbox column takes up to much space in a multi-select table [\#1112](https://github.com/digital-ai/dot-components/pull/1112) ([dmiletic85](https://github.com/dmiletic85))
255
290
  - D-20660: `DotNavigationRail`: Should be able to update the selected rail [\#1106](https://github.com/digital-ai/dot-components/pull/1106) ([dmiletic85](https://github.com/dmiletic85))
256
291
 
257
292
  ## [1.14.0](https://github.com/digital-ai/dot-components/tree/1.14.0) (04/01/2022)
@@ -267,6 +302,7 @@
267
302
 
268
303
  - DotFileUpload - Setting maxFile limit to 1 allows to upload more than 1 files [\#1096](https://github.com/digital-ai/dot-components/issues/1096)
269
304
  - We lost scrollbar for sidenav nested drawers [\#1061](https://github.com/digital-ai/dot-components/issues/1061)
305
+ - D-20719: `DotTable`: Checkbox column takes up to much space in a multi-select table [\#1112](https://github.com/digital-ai/dot-components/pull/1112) ([dmiletic85](https://github.com/dmiletic85))
270
306
  - D-20516: `DotFileUpload` - Setting maxFile limit to 1 allows to upload more than 1 files [\#1101](https://github.com/digital-ai/dot-components/pull/1101) ([dmiletic85](https://github.com/dmiletic85))
271
307
  - D-20334: Add scroll to nested drawer [\#1062](https://github.com/digital-ai/dot-components/pull/1062) ([s-zimm](https://github.com/s-zimm))
272
308
 
package/index.esm.js CHANGED
@@ -2484,6 +2484,7 @@ const DotSidebar = ({
2484
2484
  goBack: _goBack = false,
2485
2485
  navItems: _navItems = [],
2486
2486
  nestedListType: _nestedListType = 'expandable',
2487
+ onCollapseChange,
2487
2488
  open: _open = true,
2488
2489
  title,
2489
2490
  titleAvatarProps,
@@ -2512,6 +2513,7 @@ const DotSidebar = ({
2512
2513
  }, [isOpen]);
2513
2514
 
2514
2515
  const collapseNav = () => {
2516
+ onCollapseChange && onCollapseChange(isOpen);
2515
2517
  setIsOpen(!isOpen);
2516
2518
  };
2517
2519
 
@@ -2681,11 +2683,11 @@ const StyledAppToolbar = styled.header.withConfig({
2681
2683
  }) => css(["&.", "{align-items:center;background:", ";border-bottom:4px solid ", ";box-sizing:border-box;color:", ";display:flex;height:64px;padding:", ";position:fixed;width:100%;z-index:", ";top:0;left:0;right:0;&.without-menu-icon{padding-left:", "px;}&.", "{height:48px;}.dot-main-menu-btn,.dot-right-side{.dot-icon-btn{border:", ";color:", ";&:hover,&:active,&:focus{background:", ";}}}.dot-main-menu-btn{text-align:center;}.dot-branding{align-items:center;display:flex;padding:", ";.primary-logo,.app-logo{margin-right:", "px;}.primary-logo,.dot-app-logo{display:flex;max-width:200px;svg,img{max-height:36px;max-width:200px;}}a{line-height:0;}.dot-product-name{color:", ";font-size:18px;margin:", ";}.divider{margin-left:", "px;}}div.dot-right-side{display:flex;flex-grow:2;justify-content:flex-end;.dot-badge .MuiBadge-anchorOriginTopRightRectangle{top:", "px;right:", "px;}}.avatar-wrapper{display:flex;align-items:center;justify-content:center;width:40px;button.dot-avatar:focus-visible{box-shadow:0px 0px 0px 3px ", ",0px 0px 0px 5px ", ";}}}"], rootClassName$I, theme.palette.product === 'agility' ? theme.palette.agilityInterface.headerBg : theme.palette.grey[700], theme.palette.grey[100], theme.palette.grey[0], theme.spacing(1.5, 2, 1.5, 1), levelFourth, theme.spacing(1.5), denseClassName, theme.palette.product === 'agility' && 'none', theme.palette.grey[100], theme.palette.product === 'agility' && theme.palette.agilityInterface.topBarIconHoverBg, theme.spacing(0, 4, 0, 0.75), theme.spacing(1.5), theme.palette.grey[100], theme.spacing(0, 1.5), theme.spacing(2), theme.spacing(1.5), theme.spacing(1.5), theme.palette.layer.n900, theme.palette.layer.n0));
2682
2684
 
2683
2685
  const DotAppToolbar = ({
2684
- appName,
2686
+ ariaLabel,
2685
2687
  appLogo,
2686
2688
  appLogoHref: _appLogoHref = '/',
2687
2689
  appLogoSmall,
2688
- ariaLabel,
2690
+ appName,
2689
2691
  avatar,
2690
2692
  borderColor,
2691
2693
  children,
@@ -2694,10 +2696,12 @@ const DotAppToolbar = ({
2694
2696
  customLogo,
2695
2697
  'data-testid': dataTestId,
2696
2698
  dense: _dense = true,
2697
- navItems: _navItems = [],
2698
2699
  mainMenu,
2699
2700
  mainMenuItems,
2700
2701
  mainMenuWidth: _mainMenuWidth = 240,
2702
+ menuCloseOnClickAway: _menuCloseOnClickAway = false,
2703
+ navItems: _navItems = [],
2704
+ onClickAway,
2701
2705
  primaryLogoHref: _primaryLogoHref = '/'
2702
2706
  }) => {
2703
2707
  const [menuOpen, updateMenuOpen] = useState(false);
@@ -2757,7 +2761,7 @@ const DotAppToolbar = ({
2757
2761
  }), index);
2758
2762
  });
2759
2763
 
2760
- return jsxs(StyledAppToolbar, Object.assign({
2764
+ const appToolbar = jsxs(StyledAppToolbar, Object.assign({
2761
2765
  "aria-label": ariaLabel,
2762
2766
  className: rootClasses,
2763
2767
  "data-testid": dataTestId,
@@ -2843,6 +2847,21 @@ const DotAppToolbar = ({
2843
2847
  }), void 0)]
2844
2848
  }), void 0)]
2845
2849
  }), void 0);
2850
+
2851
+ const handleClickAway = event => {
2852
+ if (_menuCloseOnClickAway && onClickAway) {
2853
+ updateMenuOpen(false);
2854
+ onClickAway(event);
2855
+ }
2856
+ };
2857
+
2858
+ return _menuCloseOnClickAway ? jsx(ClickAwayListener, Object.assign({
2859
+ onClickAway: handleClickAway
2860
+ }, {
2861
+ children: jsx("div", {
2862
+ children: appToolbar
2863
+ }, void 0)
2864
+ }), void 0) : appToolbar;
2846
2865
  };
2847
2866
 
2848
2867
  const rootClassName$H = 'dot-autocomplete';
@@ -2853,7 +2872,7 @@ const StyledAutocomplete = styled(Autocomplete).withConfig({
2853
2872
  componentId: "j2sgjy-0"
2854
2873
  })(["", ""], ({
2855
2874
  theme
2856
- }) => css(["&.", "{.", ".", "{padding-top:", ";padding-bottom:", ";}.dot-text-field{.warning-icon{color:", ";}.error-icon{color:", ";}}}"], rootClassName$H, inputRootClassName, inputMediumClassName, theme.spacing(0), theme.spacing(0), theme.palette.warning.main, theme.palette.error.main));
2875
+ }) => css(["&.", "{.", "{padding-top:", ";padding-bottom:", ";}.dot-chip:first-child{margin-left:", ";}.dot-text-field{.MuiOutlinedInput-inputMarginDense{height:31px;}.warning-icon{color:", ";}.error-icon{color:", ";}}}"], rootClassName$H, inputRootClassName, theme.spacing(0), theme.spacing(0), theme.spacing(0), theme.palette.warning.main, theme.palette.error.main));
2857
2876
 
2858
2877
  const rootClassName$G = 'dot-text-field';
2859
2878
  const rootSelectClassName = 'dot-select-field';
@@ -2877,7 +2896,7 @@ const StyledTextField = styled(TextField).withConfig({
2877
2896
  })(["", ""], ({
2878
2897
  theme,
2879
2898
  InputProps
2880
- }) => css(["&.", "{.MuiInputBase-root{background:", ";margin-bottom:0;}.MuiInputBase-input{box-sizing:content-box;}.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiOutlinedInput-input{padding:", ";}.MuiOutlinedInput-inputMarginDense{padding-top:10.5px;padding-bottom:10.5px;}.MuiOutlinedInput-inputMultiline{padding:0;}}&.", ",&.", "{.dot-adornment-icon .dot-icon i{margin-top:-2px;}.MuiFormLabel-root.Mui-focused{color:", ";}select.dot-select{background:", ";}.MuiSelect-select:focus{background-color:transparent;}.Mui-error .", "{color:", ";}.MuiSelect-icon{right:", ";}&.", "{.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiFormLabel-root.Mui-focused{color:", ";}.", "{color:", ";}}&.", "{.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiInputLabel-outlined.MuiInputLabel-shrink{color:", ";}.", "{color:", ";}}.MuiOutlinedInput-adornedStart{padding-left:12px;}.MuiFormHelperText-root{font-family:", ";font-size:", "px;font-weight:400;margin:", ";display:flex;align-items:flex-end;&:not(.Mui-error){color:", ";}}.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:", ";}&.read-only .MuiOutlinedInput-root:hover > fieldset{border-color:", ";}}"], rootClassName$G, theme.palette.product === 'agility' && theme.palette.layer.n0, theme.palette.product === 'agility' && theme.palette.layer.n100, InputProps.startAdornment ? `18px 12px 18px 0px` : `18px 12px`, rootSelectClassName, rootClassName$G, theme.palette.product === 'agility' && theme.palette.layer.n700, theme.palette.product === 'agility' && theme.palette.layer.n0, adornmentIconClassName, theme.palette.error.main, InputProps.endAdornment ? `44px` : `12px`, successClassName, theme.palette.secondary.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.secondary.main, warningClassName, theme.palette.warning.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.warning.main, theme.typography.body2.fontFamily, theme.typography.body2.fontSize, theme.spacing(0.5, 0, 0, 2), theme.palette.grey[400], theme.palette.product === 'agility' && agilityGreen, theme.palette.layer.n200));
2899
+ }) => css(["&.", "{.MuiInputBase-root{background:", ";margin-bottom:0;}.MuiInputBase-input{box-sizing:content-box;}.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiOutlinedInput-input{padding:", ";}.MuiOutlinedInput-inputMarginDense{padding-top:10.5px;padding-bottom:10.5px;&:not(textarea){height:19px;}}.MuiOutlinedInput-inputMultiline{padding:0;}}&.", ",&.", "{.dot-adornment-icon .dot-icon i{margin-top:-2px;}.MuiFormLabel-root.Mui-focused{color:", ";}.MuiOutlinedInput-inputMarginDense:not(textarea){height:19px;}select.dot-select{background:", ";padding-left:", "px;}.MuiSelect-select:focus{background-color:transparent;}.Mui-error .", "{color:", ";}.MuiSelect-icon{right:", ";}&.", "{.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiFormLabel-root.Mui-focused{color:", ";}.", "{color:", ";}}&.", "{.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiInputLabel-outlined.MuiInputLabel-shrink{color:", ";}.", "{color:", ";}}.MuiOutlinedInput-adornedStart{padding-left:12px;}.MuiFormHelperText-root{font-family:", ";font-size:", "px;font-weight:400;margin:", ";display:flex;align-items:flex-end;&:not(.Mui-error){color:", ";}}.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:", ";}&.read-only .MuiOutlinedInput-root:hover > fieldset{border-color:", ";}}"], rootClassName$G, theme.palette.product === 'agility' && theme.palette.layer.n0, theme.palette.product === 'agility' && theme.palette.layer.n100, InputProps.startAdornment ? `18px 12px 18px 0px` : `18px 12px`, rootSelectClassName, rootClassName$G, theme.palette.product === 'agility' && theme.palette.layer.n700, theme.palette.product === 'agility' && theme.palette.layer.n0, theme.spacing(1.5), adornmentIconClassName, theme.palette.error.main, InputProps.endAdornment ? `44px` : `12px`, successClassName, theme.palette.secondary.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.secondary.main, warningClassName, theme.palette.warning.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.warning.main, theme.typography.body2.fontFamily, theme.typography.body2.fontSize, theme.spacing(0.5, 0, 0, 1.5), theme.palette.grey[400], theme.palette.product === 'agility' && agilityGreen, theme.palette.layer.n200));
2881
2900
 
2882
2901
  const rootClassName$F = 'dot-button';
2883
2902
  const StyledButton = styled(Button).withConfig({
@@ -2885,7 +2904,7 @@ const StyledButton = styled(Button).withConfig({
2885
2904
  componentId: "sx99hh-0"
2886
2905
  })(["", ""], ({
2887
2906
  theme
2888
- }) => css(["&.", "{margin:", "px;min-width:auto;white-space:nowrap;&.MuiButton-containedPrimary{background-color:", ";}&.MuiButton-containedSecondary{background-color:", ";&:hover,&:active{background-color:", ";}}&.MuiButton-text{padding:6px 16px;}span.dot-icon{padding:0;i{height:auto;}}}"], rootClassName$F, theme.spacing(0.5), theme.palette.product === 'agility' && agilityGreen, theme.palette.error.main, darken(theme.palette.error.main, 0.2)));
2907
+ }) => css(["&.", "{margin:", "px;min-width:auto;white-space:nowrap;&:not(.MuiButton-sizeLarge):not(.MuiButton-sizeSmall){height:", "px;}&.MuiButton-containedPrimary{background-color:", ";}&.MuiButton-containedSecondary{background-color:", ";&:hover,&:active{background-color:", ";}}&.MuiButton-text{padding:6px 16px;}span.dot-icon{padding:0;i{height:auto;}}}"], rootClassName$F, theme.spacing(0.5), theme.spacing(5), theme.palette.product === 'agility' && agilityGreen, theme.palette.error.main, darken(theme.palette.error.main, 0.2)));
2889
2908
 
2890
2909
  /** This component wraps the Button component from @material-ui. */
2891
2910
 
@@ -3077,6 +3096,34 @@ const getChipsFromAutocomplete = ({
3077
3096
  };
3078
3097
  const checkIfDuplicateItem = (itemText, autocompleteOptions) => autocompleteOptions.some(autocompleteOption => autocompleteOption.title === itemText);
3079
3098
 
3099
+ const DotInputLabel = ({
3100
+ 'data-testid': dataTestId,
3101
+ disabled: _disabled = false,
3102
+ error: _error = false,
3103
+ id,
3104
+ label,
3105
+ required
3106
+ }) => {
3107
+ return jsx(StyledInputLabel, Object.assign({
3108
+ "data-testid": dataTestId,
3109
+ classes: {
3110
+ root: labelClassName
3111
+ },
3112
+ disabled: _disabled,
3113
+ error: _error,
3114
+ htmlFor: id,
3115
+ required: required,
3116
+ shrink: false,
3117
+ variant: "outlined"
3118
+ }, {
3119
+ children: jsx(DotTypography, Object.assign({
3120
+ variant: "subtitle2"
3121
+ }, {
3122
+ children: label
3123
+ }), void 0)
3124
+ }), void 0);
3125
+ };
3126
+
3080
3127
  const DEFAULT_ACTION_ITEM_TEXT = 'Add new item';
3081
3128
  const DotAutoComplete = ({
3082
3129
  actionItem,
@@ -3107,6 +3154,7 @@ const DotAutoComplete = ({
3107
3154
  onOpen,
3108
3155
  open,
3109
3156
  options,
3157
+ persistentLabel,
3110
3158
  placeholder,
3111
3159
  readOnly: _readOnly = false,
3112
3160
  renderOption,
@@ -3365,39 +3413,49 @@ const DotAutoComplete = ({
3365
3413
  // at least pick up any styling that is used there. Should additional
3366
3414
  // functionality be added to DotInputText we will have to make a
3367
3415
  // decision about if/how to expose it here.
3368
- jsx(StyledTextField, Object.assign({}, params, {
3369
- autoFocus: autoFocus,
3370
- classes: {
3371
- root: textFieldRootClasses
3372
- },
3373
- error: _error,
3374
- focused: _readOnly ? false : undefined,
3375
- helperText: helperText,
3376
- inputProps: Object.assign(Object.assign({}, inputProps), {
3377
- id: inputId,
3378
- className: useStylesWithRootClass(inputProps.className, 'dot-input')
3379
- }),
3380
- InputProps: Object.assign(Object.assign({}, params.InputProps), {
3381
- endAdornment: !_readOnly ? renderEndAdornment(params.InputProps.endAdornment) : undefined,
3382
- readOnly: _readOnly
3383
- }),
3384
- inputRef: textFieldRef,
3385
- label: label,
3386
- name: label,
3387
- onKeyDown: event => {
3388
- var _a; // Intercept 'tab' key press while action item element exists
3389
-
3390
-
3391
- if (event.key === 'Tab' && actionItemRef.current) {
3392
- event.preventDefault();
3393
- (_a = actionItemRef === null || actionItemRef === void 0 ? void 0 : actionItemRef.current) === null || _a === void 0 ? void 0 : _a.focus();
3394
- }
3395
- },
3396
- placeholder: showPlaceholder ? placeholder : undefined,
3397
- required: _required,
3398
- size: _dense ? 'small' : 'medium',
3399
- variant: "outlined"
3400
- }), void 0)
3416
+ jsxs(Fragment$1, {
3417
+ children: [persistentLabel && jsx(DotInputLabel, Object.assign({
3418
+ "data-testid": dataTestId && `${dataTestId}-persistent-label`,
3419
+ id: inputId
3420
+ }, {
3421
+ disabled: _disabled,
3422
+ error: _error,
3423
+ label,
3424
+ required: _required
3425
+ }), void 0), jsx(StyledTextField, Object.assign({}, params, {
3426
+ autoFocus: autoFocus,
3427
+ classes: {
3428
+ root: textFieldRootClasses
3429
+ },
3430
+ error: _error,
3431
+ focused: _readOnly ? false : undefined,
3432
+ helperText: helperText,
3433
+ inputProps: Object.assign(Object.assign({}, inputProps), {
3434
+ id: inputId,
3435
+ className: useStylesWithRootClass(inputProps.className, 'dot-input')
3436
+ }),
3437
+ InputProps: Object.assign(Object.assign({}, params.InputProps), {
3438
+ endAdornment: !_readOnly ? renderEndAdornment(params.InputProps.endAdornment) : undefined,
3439
+ readOnly: _readOnly
3440
+ }),
3441
+ inputRef: textFieldRef,
3442
+ label: persistentLabel ? null : label,
3443
+ name: label,
3444
+ onKeyDown: event => {
3445
+ var _a; // Intercept 'tab' key press while action item element exists
3446
+
3447
+
3448
+ if (event.key === 'Tab' && actionItemRef.current) {
3449
+ event.preventDefault();
3450
+ (_a = actionItemRef === null || actionItemRef === void 0 ? void 0 : actionItemRef.current) === null || _a === void 0 ? void 0 : _a.focus();
3451
+ }
3452
+ },
3453
+ placeholder: showPlaceholder ? placeholder : undefined,
3454
+ required: _required,
3455
+ size: _dense ? 'small' : 'medium',
3456
+ variant: "outlined"
3457
+ }), void 0)]
3458
+ }, void 0)
3401
3459
  );
3402
3460
  },
3403
3461
  renderOption: renderOption,
@@ -3834,7 +3892,7 @@ const StyledToggleButtonGroup = styled(ToggleButtonGroup).withConfig({
3834
3892
  componentId: "sc-1oh4ljv-0"
3835
3893
  })(["", ""], ({
3836
3894
  theme
3837
- }) => css(["&.", "{.dot-icon{+ p{margin-left:", "px;}i{height:auto;}}.MuiToggleButton-label{color:", ";p{margin-bottom:0;}}.MuiToggleButtonGroup-groupedHorizontal{border:1px solid ", ";border-radius:0;:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;margin-left:0;}:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;margin-right:0;}}}.MuiButtonBase-root{&.Mui-disabled p,&.Mui-disabled .dot-icon{color:", ";}}"], rootClassName$C, theme.spacing(1), theme.palette.layer.n700, theme.palette.layer.n300, theme.palette.grey[200]));
3895
+ }) => css(["&.", "{button:not(.MuiToggleButton-sizeLarge):not(.MuiToggleButton-sizeSmall){height:", "px;.dot-icon{width:", "px;}}.dot-icon{+ p{margin-left:", "px;}i{height:auto;}}.MuiToggleButton-label{color:", ";p{margin-bottom:0;}}.MuiToggleButtonGroup-groupedHorizontal{border:1px solid ", ";border-radius:0;:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;margin-left:0;}:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;margin-right:0;}}}.MuiButtonBase-root{&.Mui-disabled p,&.Mui-disabled .dot-icon{color:", ";}}"], rootClassName$C, theme.spacing(5), theme.spacing(2), theme.spacing(1), theme.palette.layer.n700, theme.palette.layer.n300, theme.palette.grey[200]));
3838
3896
 
3839
3897
  const DotButtonToggle = ({
3840
3898
  ariaLabel,
@@ -4933,32 +4991,6 @@ const checkIfFormDataValid = formState => {
4933
4991
  return true;
4934
4992
  };
4935
4993
 
4936
- const DotInputLabel = ({
4937
- disabled: _disabled = false,
4938
- error: _error = false,
4939
- id,
4940
- label,
4941
- required
4942
- }) => {
4943
- return jsx(StyledInputLabel, Object.assign({
4944
- classes: {
4945
- root: labelClassName
4946
- },
4947
- disabled: _disabled,
4948
- error: _error,
4949
- htmlFor: id,
4950
- required: required,
4951
- shrink: false,
4952
- variant: "outlined"
4953
- }, {
4954
- children: jsx(DotTypography, Object.assign({
4955
- variant: "subtitle2"
4956
- }, {
4957
- children: label
4958
- }), void 0)
4959
- }), void 0);
4960
- };
4961
-
4962
4994
  const DELAY_MS = 300;
4963
4995
 
4964
4996
  const EndAdornment = ({
package/index.umd.js CHANGED
@@ -2708,6 +2708,7 @@
2708
2708
  navItems = _g === void 0 ? [] : _g,
2709
2709
  _h = _a.nestedListType,
2710
2710
  nestedListType = _h === void 0 ? 'expandable' : _h,
2711
+ onCollapseChange = _a.onCollapseChange,
2711
2712
  _j = _a.open,
2712
2713
  open = _j === void 0 ? true : _j,
2713
2714
  title = _a.title,
@@ -2748,6 +2749,7 @@
2748
2749
  }, [isOpen]);
2749
2750
 
2750
2751
  var collapseNav = function collapseNav() {
2752
+ onCollapseChange && onCollapseChange(isOpen);
2751
2753
  setIsOpen(!isOpen);
2752
2754
  };
2753
2755
 
@@ -2921,12 +2923,12 @@
2921
2923
  var templateObject_1$L, templateObject_2$J, templateObject_3$8, templateObject_4$6;
2922
2924
 
2923
2925
  var DotAppToolbar = function DotAppToolbar(_a) {
2924
- var appName = _a.appName,
2926
+ var ariaLabel = _a.ariaLabel,
2925
2927
  appLogo = _a.appLogo,
2926
2928
  _b = _a.appLogoHref,
2927
2929
  appLogoHref = _b === void 0 ? '/' : _b,
2928
2930
  appLogoSmall = _a.appLogoSmall,
2929
- ariaLabel = _a.ariaLabel,
2931
+ appName = _a.appName,
2930
2932
  avatar = _a.avatar,
2931
2933
  borderColor = _a.borderColor,
2932
2934
  children = _a.children,
@@ -2936,18 +2938,21 @@
2936
2938
  dataTestId = _a["data-testid"],
2937
2939
  _c = _a.dense,
2938
2940
  dense = _c === void 0 ? true : _c,
2939
- _d = _a.navItems,
2940
- navItems = _d === void 0 ? [] : _d,
2941
2941
  mainMenu = _a.mainMenu,
2942
2942
  mainMenuItems = _a.mainMenuItems,
2943
- _e = _a.mainMenuWidth,
2944
- mainMenuWidth = _e === void 0 ? 240 : _e,
2945
- _f = _a.primaryLogoHref,
2946
- primaryLogoHref = _f === void 0 ? '/' : _f;
2943
+ _d = _a.mainMenuWidth,
2944
+ mainMenuWidth = _d === void 0 ? 240 : _d,
2945
+ _e = _a.menuCloseOnClickAway,
2946
+ menuCloseOnClickAway = _e === void 0 ? false : _e,
2947
+ _f = _a.navItems,
2948
+ navItems = _f === void 0 ? [] : _f,
2949
+ onClickAway = _a.onClickAway,
2950
+ _g = _a.primaryLogoHref,
2951
+ primaryLogoHref = _g === void 0 ? '/' : _g;
2947
2952
 
2948
- var _g = React.useState(false),
2949
- menuOpen = _g[0],
2950
- updateMenuOpen = _g[1];
2953
+ var _h = React.useState(false),
2954
+ menuOpen = _h[0],
2955
+ updateMenuOpen = _h[1];
2951
2956
 
2952
2957
  var showMainMenu = mainMenu || mainMenuItems;
2953
2958
  var displayAppLogo = appLogo || appLogoSmall;
@@ -3007,7 +3012,8 @@
3007
3012
  }, index)
3008
3013
  }), index);
3009
3014
  });
3010
- return jsxRuntime.jsxs(StyledAppToolbar, __assign({
3015
+
3016
+ var appToolbar = jsxRuntime.jsxs(StyledAppToolbar, __assign({
3011
3017
  "aria-label": ariaLabel,
3012
3018
  className: rootClasses,
3013
3019
  "data-testid": dataTestId,
@@ -3097,6 +3103,21 @@
3097
3103
  }), void 0)]
3098
3104
  }), void 0)]
3099
3105
  }), void 0);
3106
+
3107
+ var handleClickAway = function handleClickAway(event) {
3108
+ if (menuCloseOnClickAway && onClickAway) {
3109
+ updateMenuOpen(false);
3110
+ onClickAway(event);
3111
+ }
3112
+ };
3113
+
3114
+ return menuCloseOnClickAway ? jsxRuntime.jsx(core.ClickAwayListener, __assign({
3115
+ onClickAway: handleClickAway
3116
+ }, {
3117
+ children: jsxRuntime.jsx("div", {
3118
+ children: appToolbar
3119
+ }, void 0)
3120
+ }), void 0) : appToolbar;
3100
3121
  };
3101
3122
 
3102
3123
  var rootClassName$H = 'dot-autocomplete';
@@ -3107,7 +3128,7 @@
3107
3128
  componentId: "j2sgjy-0"
3108
3129
  })(templateObject_2$I || (templateObject_2$I = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
3109
3130
  var theme = _a.theme;
3110
- return styled.css(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n &.", " {\n .", ".", " {\n /* Override only top/bottom, but preserve left/right padding */\n padding-top: ", ";\n padding-bottom: ", ";\n }\n\n .dot-text-field {\n .warning-icon {\n color: ", ";\n }\n .error-icon {\n color: ", ";\n }\n }\n }\n "], ["\n &.", " {\n .", ".", " {\n /* Override only top/bottom, but preserve left/right padding */\n padding-top: ", ";\n padding-bottom: ", ";\n }\n\n .dot-text-field {\n .warning-icon {\n color: ", ";\n }\n .error-icon {\n color: ", ";\n }\n }\n }\n "])), rootClassName$H, inputRootClassName, inputMediumClassName, theme.spacing(0), theme.spacing(0), theme.palette.warning.main, theme.palette.error.main);
3131
+ return styled.css(templateObject_1$K || (templateObject_1$K = __makeTemplateObject(["\n &.", " {\n .", " {\n /* Override only top/bottom, but preserve left/right padding */\n padding-top: ", ";\n padding-bottom: ", ";\n }\n\n .dot-chip:first-child {\n margin-left: ", ";\n }\n\n .dot-text-field {\n .MuiOutlinedInput-inputMarginDense {\n /* padding above and below together is 9px, and total height should be 40px */\n height: 31px;\n }\n\n .warning-icon {\n color: ", ";\n }\n .error-icon {\n color: ", ";\n }\n }\n }\n "], ["\n &.", " {\n .", " {\n /* Override only top/bottom, but preserve left/right padding */\n padding-top: ", ";\n padding-bottom: ", ";\n }\n\n .dot-chip:first-child {\n margin-left: ", ";\n }\n\n .dot-text-field {\n .MuiOutlinedInput-inputMarginDense {\n /* padding above and below together is 9px, and total height should be 40px */\n height: 31px;\n }\n\n .warning-icon {\n color: ", ";\n }\n .error-icon {\n color: ", ";\n }\n }\n }\n "])), rootClassName$H, inputRootClassName, theme.spacing(0), theme.spacing(0), theme.spacing(0), theme.palette.warning.main, theme.palette.error.main);
3111
3132
  });
3112
3133
  var templateObject_1$K, templateObject_2$I;
3113
3134
 
@@ -3134,7 +3155,7 @@
3134
3155
  })(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
3135
3156
  var theme = _a.theme,
3136
3157
  InputProps = _a.InputProps;
3137
- return styled.css(templateObject_4$5 || (templateObject_4$5 = __makeTemplateObject(["\n &.", " {\n .MuiInputBase-root {\n background: ", ";\n margin-bottom: 0;\n }\n .MuiInputBase-input {\n box-sizing: content-box;\n }\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n .MuiOutlinedInput-input {\n padding: ", ";\n }\n .MuiOutlinedInput-inputMarginDense {\n padding-top: 10.5px;\n padding-bottom: 10.5px;\n }\n .MuiOutlinedInput-inputMultiline {\n padding: 0;\n }\n }\n &.", ", &.", " {\n .dot-adornment-icon .dot-icon i {\n margin-top: -2px;\n }\n\n .MuiFormLabel-root.Mui-focused {\n color: ", ";\n }\n\n select.dot-select {\n background: ", ";\n }\n\n .MuiSelect-select:focus {\n background-color: transparent;\n }\n\n .Mui-error .", " {\n color: ", ";\n }\n\n .MuiSelect-icon {\n right: ", ";\n }\n\n &.", " {\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n .MuiFormLabel-root.Mui-focused {\n color: ", ";\n }\n\n .", " {\n color: ", ";\n }\n }\n\n &.", " {\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n .MuiInputLabel-outlined.MuiInputLabel-shrink {\n color: ", ";\n }\n\n .", " {\n color: ", ";\n }\n }\n\n .MuiOutlinedInput-adornedStart {\n padding-left: 12px;\n }\n .MuiFormHelperText-root {\n font-family: ", ";\n font-size: ", "px;\n font-weight: 400;\n margin: ", ";\n display: flex;\n align-items: flex-end;\n\n &:not(.Mui-error) {\n color: ", ";\n }\n }\n\n .Mui-focused .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n &.read-only .MuiOutlinedInput-root:hover > fieldset {\n border-color: ", ";\n }\n }\n "], ["\n &.", " {\n .MuiInputBase-root {\n background: ", ";\n margin-bottom: 0;\n }\n .MuiInputBase-input {\n box-sizing: content-box;\n }\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n .MuiOutlinedInput-input {\n padding: ", ";\n }\n .MuiOutlinedInput-inputMarginDense {\n padding-top: 10.5px;\n padding-bottom: 10.5px;\n }\n .MuiOutlinedInput-inputMultiline {\n padding: 0;\n }\n }\n &.", ", &.", " {\n .dot-adornment-icon .dot-icon i {\n margin-top: -2px;\n }\n\n .MuiFormLabel-root.Mui-focused {\n color: ", ";\n }\n\n select.dot-select {\n background: ", ";\n }\n\n .MuiSelect-select:focus {\n background-color: transparent;\n }\n\n .Mui-error .", " {\n color: ", ";\n }\n\n .MuiSelect-icon {\n right: ", ";\n }\n\n &.", " {\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n .MuiFormLabel-root.Mui-focused {\n color: ", ";\n }\n\n .", " {\n color: ", ";\n }\n }\n\n &.", " {\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n .MuiInputLabel-outlined.MuiInputLabel-shrink {\n color: ", ";\n }\n\n .", " {\n color: ", ";\n }\n }\n\n .MuiOutlinedInput-adornedStart {\n padding-left: 12px;\n }\n .MuiFormHelperText-root {\n font-family: ", ";\n font-size: ", "px;\n font-weight: 400;\n margin: ", ";\n display: flex;\n align-items: flex-end;\n\n &:not(.Mui-error) {\n color: ", ";\n }\n }\n\n .Mui-focused .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n &.read-only .MuiOutlinedInput-root:hover > fieldset {\n border-color: ", ";\n }\n }\n "])), rootClassName$G, theme.palette.product === 'agility' && theme.palette.layer.n0, theme.palette.product === 'agility' && theme.palette.layer.n100, InputProps.startAdornment ? "18px 12px 18px 0px" : "18px 12px", rootSelectClassName, rootClassName$G, theme.palette.product === 'agility' && theme.palette.layer.n700, theme.palette.product === 'agility' && theme.palette.layer.n0, adornmentIconClassName, theme.palette.error.main, InputProps.endAdornment ? "44px" : "12px", successClassName, theme.palette.secondary.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.secondary.main, warningClassName, theme.palette.warning.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.warning.main, theme.typography.body2.fontFamily, theme.typography.body2.fontSize, theme.spacing(0.5, 0, 0, 2), theme.palette.grey[400], theme.palette.product === 'agility' && agilityGreen, theme.palette.layer.n200);
3158
+ return styled.css(templateObject_4$5 || (templateObject_4$5 = __makeTemplateObject(["\n &.", " {\n .MuiInputBase-root {\n background: ", ";\n margin-bottom: 0;\n }\n .MuiInputBase-input {\n box-sizing: content-box;\n }\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n .MuiOutlinedInput-input {\n padding: ", ";\n }\n .MuiOutlinedInput-inputMarginDense {\n padding-top: 10.5px;\n padding-bottom: 10.5px;\n\n &:not(textarea) {\n /* padding above and below together is 21px, and total height should be 40px */\n height: 19px;\n }\n }\n .MuiOutlinedInput-inputMultiline {\n padding: 0;\n }\n }\n &.", ", &.", " {\n .dot-adornment-icon .dot-icon i {\n margin-top: -2px;\n }\n\n .MuiFormLabel-root.Mui-focused {\n color: ", ";\n }\n\n .MuiOutlinedInput-inputMarginDense:not(textarea) {\n height: 19px;\n }\n\n select.dot-select {\n background: ", ";\n\n padding-left: ", "px;\n }\n\n .MuiSelect-select:focus {\n background-color: transparent;\n }\n\n .Mui-error .", " {\n color: ", ";\n }\n\n .MuiSelect-icon {\n right: ", ";\n }\n\n &.", " {\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n .MuiFormLabel-root.Mui-focused {\n color: ", ";\n }\n\n .", " {\n color: ", ";\n }\n }\n\n &.", " {\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n .MuiInputLabel-outlined.MuiInputLabel-shrink {\n color: ", ";\n }\n\n .", " {\n color: ", ";\n }\n }\n\n .MuiOutlinedInput-adornedStart {\n padding-left: 12px;\n }\n .MuiFormHelperText-root {\n font-family: ", ";\n font-size: ", "px;\n font-weight: 400;\n margin: ", ";\n display: flex;\n align-items: flex-end;\n\n &:not(.Mui-error) {\n color: ", ";\n }\n }\n\n .Mui-focused .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n &.read-only .MuiOutlinedInput-root:hover > fieldset {\n border-color: ", ";\n }\n }\n "], ["\n &.", " {\n .MuiInputBase-root {\n background: ", ";\n margin-bottom: 0;\n }\n .MuiInputBase-input {\n box-sizing: content-box;\n }\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n .MuiOutlinedInput-input {\n padding: ", ";\n }\n .MuiOutlinedInput-inputMarginDense {\n padding-top: 10.5px;\n padding-bottom: 10.5px;\n\n &:not(textarea) {\n /* padding above and below together is 21px, and total height should be 40px */\n height: 19px;\n }\n }\n .MuiOutlinedInput-inputMultiline {\n padding: 0;\n }\n }\n &.", ", &.", " {\n .dot-adornment-icon .dot-icon i {\n margin-top: -2px;\n }\n\n .MuiFormLabel-root.Mui-focused {\n color: ", ";\n }\n\n .MuiOutlinedInput-inputMarginDense:not(textarea) {\n height: 19px;\n }\n\n select.dot-select {\n background: ", ";\n\n padding-left: ", "px;\n }\n\n .MuiSelect-select:focus {\n background-color: transparent;\n }\n\n .Mui-error .", " {\n color: ", ";\n }\n\n .MuiSelect-icon {\n right: ", ";\n }\n\n &.", " {\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n .MuiFormLabel-root.Mui-focused {\n color: ", ";\n }\n\n .", " {\n color: ", ";\n }\n }\n\n &.", " {\n .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n .MuiInputLabel-outlined.MuiInputLabel-shrink {\n color: ", ";\n }\n\n .", " {\n color: ", ";\n }\n }\n\n .MuiOutlinedInput-adornedStart {\n padding-left: 12px;\n }\n .MuiFormHelperText-root {\n font-family: ", ";\n font-size: ", "px;\n font-weight: 400;\n margin: ", ";\n display: flex;\n align-items: flex-end;\n\n &:not(.Mui-error) {\n color: ", ";\n }\n }\n\n .Mui-focused .MuiOutlinedInput-notchedOutline {\n border-color: ", ";\n }\n\n &.read-only .MuiOutlinedInput-root:hover > fieldset {\n border-color: ", ";\n }\n }\n "])), rootClassName$G, theme.palette.product === 'agility' && theme.palette.layer.n0, theme.palette.product === 'agility' && theme.palette.layer.n100, InputProps.startAdornment ? "18px 12px 18px 0px" : "18px 12px", rootSelectClassName, rootClassName$G, theme.palette.product === 'agility' && theme.palette.layer.n700, theme.palette.product === 'agility' && theme.palette.layer.n0, theme.spacing(1.5), adornmentIconClassName, theme.palette.error.main, InputProps.endAdornment ? "44px" : "12px", successClassName, theme.palette.secondary.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.secondary.main, warningClassName, theme.palette.warning.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.warning.main, theme.typography.body2.fontFamily, theme.typography.body2.fontSize, theme.spacing(0.5, 0, 0, 1.5), theme.palette.grey[400], theme.palette.product === 'agility' && agilityGreen, theme.palette.layer.n200);
3138
3159
  });
3139
3160
  var templateObject_1$J, templateObject_2$H, templateObject_3$7, templateObject_4$5, templateObject_5$1;
3140
3161
 
@@ -3144,7 +3165,7 @@
3144
3165
  componentId: "sx99hh-0"
3145
3166
  })(templateObject_2$G || (templateObject_2$G = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
3146
3167
  var theme = _a.theme;
3147
- return styled.css(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n &.", " {\n margin: ", "px;\n min-width: auto;\n white-space: nowrap;\n\n &.MuiButton-containedPrimary {\n background-color: ", ";\n }\n\n &.MuiButton-containedSecondary {\n background-color: ", ";\n\n &:hover,\n &:active {\n background-color: ", ";\n }\n }\n\n &.MuiButton-text {\n padding: 6px 16px;\n }\n\n span.dot-icon {\n padding: 0;\n\n i {\n height: auto;\n }\n }\n }\n "], ["\n &.", " {\n margin: ", "px;\n min-width: auto;\n white-space: nowrap;\n\n &.MuiButton-containedPrimary {\n background-color: ", ";\n }\n\n &.MuiButton-containedSecondary {\n background-color: ", ";\n\n &:hover,\n &:active {\n background-color: ", ";\n }\n }\n\n &.MuiButton-text {\n padding: 6px 16px;\n }\n\n span.dot-icon {\n padding: 0;\n\n i {\n height: auto;\n }\n }\n }\n "])), rootClassName$F, theme.spacing(0.5), theme.palette.product === 'agility' && agilityGreen, theme.palette.error.main, core.darken(theme.palette.error.main, 0.2));
3168
+ return styled.css(templateObject_1$I || (templateObject_1$I = __makeTemplateObject(["\n &.", " {\n margin: ", "px;\n min-width: auto;\n white-space: nowrap;\n\n &:not(.MuiButton-sizeLarge):not(.MuiButton-sizeSmall) {\n /* Override height for medium size */\n height: ", "px;\n }\n\n &.MuiButton-containedPrimary {\n background-color: ", ";\n }\n\n &.MuiButton-containedSecondary {\n background-color: ", ";\n\n &:hover,\n &:active {\n background-color: ", ";\n }\n }\n\n &.MuiButton-text {\n padding: 6px 16px;\n }\n\n span.dot-icon {\n padding: 0;\n\n i {\n height: auto;\n }\n }\n }\n "], ["\n &.", " {\n margin: ", "px;\n min-width: auto;\n white-space: nowrap;\n\n &:not(.MuiButton-sizeLarge):not(.MuiButton-sizeSmall) {\n /* Override height for medium size */\n height: ", "px;\n }\n\n &.MuiButton-containedPrimary {\n background-color: ", ";\n }\n\n &.MuiButton-containedSecondary {\n background-color: ", ";\n\n &:hover,\n &:active {\n background-color: ", ";\n }\n }\n\n &.MuiButton-text {\n padding: 6px 16px;\n }\n\n span.dot-icon {\n padding: 0;\n\n i {\n height: auto;\n }\n }\n }\n "])), rootClassName$F, theme.spacing(0.5), theme.spacing(5), theme.palette.product === 'agility' && agilityGreen, theme.palette.error.main, core.darken(theme.palette.error.main, 0.2));
3148
3169
  });
3149
3170
  var templateObject_1$I, templateObject_2$G;
3150
3171
 
@@ -3362,6 +3383,35 @@
3362
3383
  });
3363
3384
  };
3364
3385
 
3386
+ var DotInputLabel = function DotInputLabel(_a) {
3387
+ var dataTestId = _a["data-testid"],
3388
+ _b = _a.disabled,
3389
+ disabled = _b === void 0 ? false : _b,
3390
+ _c = _a.error,
3391
+ error = _c === void 0 ? false : _c,
3392
+ id = _a.id,
3393
+ label = _a.label,
3394
+ required = _a.required;
3395
+ return jsxRuntime.jsx(StyledInputLabel, __assign({
3396
+ "data-testid": dataTestId,
3397
+ classes: {
3398
+ root: labelClassName
3399
+ },
3400
+ disabled: disabled,
3401
+ error: error,
3402
+ htmlFor: id,
3403
+ required: required,
3404
+ shrink: false,
3405
+ variant: "outlined"
3406
+ }, {
3407
+ children: jsxRuntime.jsx(DotTypography, __assign({
3408
+ variant: "subtitle2"
3409
+ }, {
3410
+ children: label
3411
+ }), void 0)
3412
+ }), void 0);
3413
+ };
3414
+
3365
3415
  var DEFAULT_ACTION_ITEM_TEXT = 'Add new item';
3366
3416
  var DotAutoComplete = function DotAutoComplete(_a) {
3367
3417
  var actionItem = _a.actionItem,
@@ -3400,6 +3450,7 @@
3400
3450
  onOpen = _a.onOpen,
3401
3451
  open = _a.open,
3402
3452
  options = _a.options,
3453
+ persistentLabel = _a.persistentLabel,
3403
3454
  placeholder = _a.placeholder,
3404
3455
  _k = _a.readOnly,
3405
3456
  readOnly = _k === void 0 ? false : _k,
@@ -3682,39 +3733,49 @@
3682
3733
  // at least pick up any styling that is used there. Should additional
3683
3734
  // functionality be added to DotInputText we will have to make a
3684
3735
  // decision about if/how to expose it here.
3685
- jsxRuntime.jsx(StyledTextField, __assign({}, params, {
3686
- autoFocus: autoFocus,
3687
- classes: {
3688
- root: textFieldRootClasses
3689
- },
3690
- error: error,
3691
- focused: readOnly ? false : undefined,
3692
- helperText: helperText,
3693
- inputProps: __assign(__assign({}, inputProps), {
3694
- id: inputId,
3695
- className: useStylesWithRootClass(inputProps.className, 'dot-input')
3696
- }),
3697
- InputProps: __assign(__assign({}, params.InputProps), {
3698
- endAdornment: !readOnly ? renderEndAdornment(params.InputProps.endAdornment) : undefined,
3699
- readOnly: readOnly
3700
- }),
3701
- inputRef: textFieldRef,
3702
- label: label,
3703
- name: label,
3704
- onKeyDown: function (event) {
3705
- var _a; // Intercept 'tab' key press while action item element exists
3706
-
3707
-
3708
- if (event.key === 'Tab' && actionItemRef.current) {
3709
- event.preventDefault();
3710
- (_a = actionItemRef === null || actionItemRef === void 0 ? void 0 : actionItemRef.current) === null || _a === void 0 ? void 0 : _a.focus();
3711
- }
3712
- },
3713
- placeholder: showPlaceholder ? placeholder : undefined,
3714
- required: required,
3715
- size: dense ? 'small' : 'medium',
3716
- variant: "outlined"
3717
- }), void 0)
3736
+ jsxRuntime.jsxs(jsxRuntime.Fragment, {
3737
+ children: [persistentLabel && jsxRuntime.jsx(DotInputLabel, __assign({
3738
+ "data-testid": dataTestId && dataTestId + "-persistent-label",
3739
+ id: inputId
3740
+ }, {
3741
+ disabled: disabled,
3742
+ error: error,
3743
+ label: label,
3744
+ required: required
3745
+ }), void 0), jsxRuntime.jsx(StyledTextField, __assign({}, params, {
3746
+ autoFocus: autoFocus,
3747
+ classes: {
3748
+ root: textFieldRootClasses
3749
+ },
3750
+ error: error,
3751
+ focused: readOnly ? false : undefined,
3752
+ helperText: helperText,
3753
+ inputProps: __assign(__assign({}, inputProps), {
3754
+ id: inputId,
3755
+ className: useStylesWithRootClass(inputProps.className, 'dot-input')
3756
+ }),
3757
+ InputProps: __assign(__assign({}, params.InputProps), {
3758
+ endAdornment: !readOnly ? renderEndAdornment(params.InputProps.endAdornment) : undefined,
3759
+ readOnly: readOnly
3760
+ }),
3761
+ inputRef: textFieldRef,
3762
+ label: persistentLabel ? null : label,
3763
+ name: label,
3764
+ onKeyDown: function (event) {
3765
+ var _a; // Intercept 'tab' key press while action item element exists
3766
+
3767
+
3768
+ if (event.key === 'Tab' && actionItemRef.current) {
3769
+ event.preventDefault();
3770
+ (_a = actionItemRef === null || actionItemRef === void 0 ? void 0 : actionItemRef.current) === null || _a === void 0 ? void 0 : _a.focus();
3771
+ }
3772
+ },
3773
+ placeholder: showPlaceholder ? placeholder : undefined,
3774
+ required: required,
3775
+ size: dense ? 'small' : 'medium',
3776
+ variant: "outlined"
3777
+ }), void 0)]
3778
+ }, void 0)
3718
3779
  );
3719
3780
  },
3720
3781
  renderOption: renderOption,
@@ -4138,7 +4199,7 @@
4138
4199
  componentId: "sc-1oh4ljv-0"
4139
4200
  })(templateObject_2$D || (templateObject_2$D = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
4140
4201
  var theme = _a.theme;
4141
- return styled.css(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n &.", " {\n .dot-icon {\n + p {\n margin-left: ", "px;\n }\n i {\n height: auto;\n }\n }\n .MuiToggleButton-label {\n color: ", ";\n p {\n margin-bottom: 0;\n }\n }\n .MuiToggleButtonGroup-groupedHorizontal {\n border: 1px solid ", ";\n border-radius: 0;\n\n :first-child {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n margin-left: 0;\n }\n :last-child {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n margin-right: 0;\n }\n }\n }\n\n .MuiButtonBase-root {\n &.Mui-disabled p,\n &.Mui-disabled .dot-icon {\n color: ", ";\n }\n }\n "], ["\n &.", " {\n .dot-icon {\n + p {\n margin-left: ", "px;\n }\n i {\n height: auto;\n }\n }\n .MuiToggleButton-label {\n color: ", ";\n p {\n margin-bottom: 0;\n }\n }\n .MuiToggleButtonGroup-groupedHorizontal {\n border: 1px solid ", ";\n border-radius: 0;\n\n :first-child {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n margin-left: 0;\n }\n :last-child {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n margin-right: 0;\n }\n }\n }\n\n .MuiButtonBase-root {\n &.Mui-disabled p,\n &.Mui-disabled .dot-icon {\n color: ", ";\n }\n }\n "])), rootClassName$C, theme.spacing(1), theme.palette.layer.n700, theme.palette.layer.n300, theme.palette.grey[200]);
4202
+ return styled.css(templateObject_1$F || (templateObject_1$F = __makeTemplateObject(["\n &.", " {\n button:not(.MuiToggleButton-sizeLarge):not(.MuiToggleButton-sizeSmall) {\n /* Override height for medium size */\n height: ", "px;\n\n .dot-icon {\n /* With this, the width of the medium size button matches its height (40px) */\n width: ", "px;\n }\n }\n\n .dot-icon {\n + p {\n margin-left: ", "px;\n }\n i {\n height: auto;\n }\n }\n .MuiToggleButton-label {\n color: ", ";\n p {\n margin-bottom: 0;\n }\n }\n .MuiToggleButtonGroup-groupedHorizontal {\n border: 1px solid ", ";\n border-radius: 0;\n\n :first-child {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n margin-left: 0;\n }\n :last-child {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n margin-right: 0;\n }\n }\n }\n\n .MuiButtonBase-root {\n &.Mui-disabled p,\n &.Mui-disabled .dot-icon {\n color: ", ";\n }\n }\n "], ["\n &.", " {\n button:not(.MuiToggleButton-sizeLarge):not(.MuiToggleButton-sizeSmall) {\n /* Override height for medium size */\n height: ", "px;\n\n .dot-icon {\n /* With this, the width of the medium size button matches its height (40px) */\n width: ", "px;\n }\n }\n\n .dot-icon {\n + p {\n margin-left: ", "px;\n }\n i {\n height: auto;\n }\n }\n .MuiToggleButton-label {\n color: ", ";\n p {\n margin-bottom: 0;\n }\n }\n .MuiToggleButtonGroup-groupedHorizontal {\n border: 1px solid ", ";\n border-radius: 0;\n\n :first-child {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n margin-left: 0;\n }\n :last-child {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n margin-right: 0;\n }\n }\n }\n\n .MuiButtonBase-root {\n &.Mui-disabled p,\n &.Mui-disabled .dot-icon {\n color: ", ";\n }\n }\n "])), rootClassName$C, theme.spacing(5), theme.spacing(2), theme.spacing(1), theme.palette.layer.n700, theme.palette.layer.n300, theme.palette.grey[200]);
4142
4203
  });
4143
4204
  var templateObject_1$F, templateObject_2$D;
4144
4205
 
@@ -5292,33 +5353,6 @@
5292
5353
  return true;
5293
5354
  };
5294
5355
 
5295
- var DotInputLabel = function DotInputLabel(_a) {
5296
- var _b = _a.disabled,
5297
- disabled = _b === void 0 ? false : _b,
5298
- _c = _a.error,
5299
- error = _c === void 0 ? false : _c,
5300
- id = _a.id,
5301
- label = _a.label,
5302
- required = _a.required;
5303
- return jsxRuntime.jsx(StyledInputLabel, __assign({
5304
- classes: {
5305
- root: labelClassName
5306
- },
5307
- disabled: disabled,
5308
- error: error,
5309
- htmlFor: id,
5310
- required: required,
5311
- shrink: false,
5312
- variant: "outlined"
5313
- }, {
5314
- children: jsxRuntime.jsx(DotTypography, __assign({
5315
- variant: "subtitle2"
5316
- }, {
5317
- children: label
5318
- }), void 0)
5319
- }), void 0);
5320
- };
5321
-
5322
5356
  var DELAY_MS = 300;
5323
5357
 
5324
5358
  var EndAdornment = function EndAdornment(_a) {
@@ -1,4 +1,4 @@
1
- import { ReactNode } from 'react';
1
+ import { ReactNode, MouseEvent } from 'react';
2
2
  import { CommonProps } from '../CommonProps';
3
3
  import { IconButtonProps } from '../button/IconButton';
4
4
  import { ListItemProps } from '../list';
@@ -39,9 +39,13 @@ export interface AppToolbarProps extends CommonProps {
39
39
  mainMenuItems?: Array<ListItemProps>;
40
40
  /** Width of main menu drawer if mainMenu provided, defaults to 240px */
41
41
  mainMenuWidth?: number;
42
+ /** If true, the main menu will close if click detected off app toolbar children*/
43
+ menuCloseOnClickAway?: boolean;
42
44
  /** Array of nav items to be displayed on the right side */
43
45
  navItems?: Array<AppToolbarIconButtons>;
46
+ /** Event callback when leaving menu via tab or clicking away */
47
+ onClickAway?: (event: KeyboardEvent | MouseEvent) => void;
44
48
  /** URL of the page the primary logo link will go to */
45
49
  primaryLogoHref?: string;
46
50
  }
47
- export declare const DotAppToolbar: ({ appName, appLogo, appLogoHref, appLogoSmall, ariaLabel, avatar, borderColor, children, className, closeMenuOnItemClick, customLogo, "data-testid": dataTestId, dense, navItems, mainMenu, mainMenuItems, mainMenuWidth, primaryLogoHref, }: AppToolbarProps) => JSX.Element;
51
+ export declare const DotAppToolbar: ({ ariaLabel, appLogo, appLogoHref, appLogoSmall, appName, avatar, borderColor, children, className, closeMenuOnItemClick, customLogo, "data-testid": dataTestId, dense, mainMenu, mainMenuItems, mainMenuWidth, menuCloseOnClickAway, navItems, onClickAway, primaryLogoHref, }: AppToolbarProps) => JSX.Element;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { ListItemProps } from '../list';
3
+ export interface AppToolbarWrapperProps {
4
+ mainMenuItems?: Array<ListItemProps>;
5
+ menuCloseOnClickAway?: boolean;
6
+ onClickAway?: (event: globalThis.KeyboardEvent | React.MouseEvent<Element, globalThis.MouseEvent>) => void;
7
+ }
8
+ export declare const AppToolbarTestWrapper: (props: AppToolbarWrapperProps) => JSX.Element;
@@ -73,6 +73,8 @@ export interface AutoCompleteProps<T extends AutoCompleteOption = AutoCompleteOp
73
73
  open?: boolean;
74
74
  /** pre-defined options available to the user */
75
75
  options?: Array<T>;
76
+ /** If true, the label will be persistently displayed outside of the field */
77
+ persistentLabel?: boolean;
76
78
  /** Placeholder text always displayed inside the input field */
77
79
  placeholder?: string;
78
80
  /** If true: popper cannot be opened, TextField is in read only mode, change is not allowed */
@@ -90,4 +92,4 @@ export interface AutoCompleteProps<T extends AutoCompleteOption = AutoCompleteOp
90
92
  /** If true, the label will be displayed in a warning state. */
91
93
  warning?: boolean;
92
94
  }
93
- export declare const DotAutoComplete: <T extends AutoCompleteOption>({ actionItem, ariaLabel, autoFocus, className, "data-testid": dataTestId, defaultValue, dense, disabled, disablePortal, endAdornmentTooltip, error, filterSelectedOptions, freesolo, group, helperText, inputId, inputRef, label, loading, maxHeight, multiple, onBlur, onChange, onClose, onInputChange, onOpen, open, options, placeholder, readOnly, renderOption, renderTags, required, size, value, warning, }: AutoCompleteProps<T>) => JSX.Element;
95
+ export declare const DotAutoComplete: <T extends AutoCompleteOption>({ actionItem, ariaLabel, autoFocus, className, "data-testid": dataTestId, defaultValue, dense, disabled, disablePortal, endAdornmentTooltip, error, filterSelectedOptions, freesolo, group, helperText, inputId, inputRef, label, loading, maxHeight, multiple, onBlur, onChange, onClose, onInputChange, onOpen, open, options, persistentLabel, placeholder, readOnly, renderOption, renderTags, required, size, value, warning, }: AutoCompleteProps<T>) => JSX.Element;
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
- export interface InputLabelProps {
2
+ import { CommonProps } from '../CommonProps';
3
+ export interface InputLabelProps extends CommonProps {
3
4
  /** If true, the input will be disabled. */
4
5
  disabled?: boolean;
5
6
  /** If true, the label will be displayed in an error state. */
@@ -14,4 +15,4 @@ export interface InputLabelProps {
14
15
  /** If true, the label is displayed as required and the input element` will be required. */
15
16
  required?: boolean;
16
17
  }
17
- export declare const DotInputLabel: ({ disabled, error, id, label, required, }: InputLabelProps) => JSX.Element;
18
+ export declare const DotInputLabel: ({ "data-testid": dataTestId, disabled, error, id, label, required, }: InputLabelProps) => JSX.Element;
@@ -35,6 +35,8 @@ export interface SidebarProps extends CommonProps {
35
35
  navItems?: Array<ListItemProps>;
36
36
  /** If 'menu' the nested list will be displayed as a flyout nav, else it will be an expand/collapse toggle list */
37
37
  nestedListType?: NestedListType;
38
+ /** onCollapseChange callback, true when the sidebar is collapsed **/
39
+ onCollapseChange?: (collapsed: boolean) => void;
38
40
  /** If true, the sidebar is open. */
39
41
  open?: boolean;
40
42
  /** The text that is displayed at the top of the sidebar */
@@ -44,4 +46,4 @@ export interface SidebarProps extends CommonProps {
44
46
  /** Width of main menu drawer if mainMenu provided, defaults to 240px */
45
47
  width?: number;
46
48
  }
47
- export declare const DotSidebar: ({ appLogo, appLogoSmall, ariaLabel, backItem, brandDesc, children, className, collapsable, "data-testid": dataTestId, displayAppLogo, displayBrand, goBack, navItems, nestedListType, open, title, titleAvatarProps, width, }: SidebarProps) => JSX.Element;
49
+ export declare const DotSidebar: ({ appLogo, appLogoSmall, ariaLabel, backItem, brandDesc, children, className, collapsable, "data-testid": dataTestId, displayAppLogo, displayBrand, goBack, navItems, nestedListType, onCollapseChange, open, title, titleAvatarProps, width, }: SidebarProps) => JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digital-ai/dot-components",
3
- "version": "1.21.2",
3
+ "version": "1.21.4",
4
4
  "private": false,
5
5
  "license": "SEE LICENSE IN <LICENSE.md>",
6
6
  "contributors": [