@digital-ai/dot-components 4.19.2 → 4.20.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/index.esm.js CHANGED
@@ -185,23 +185,58 @@ const yA400 = '#ffe2a4';
185
185
  const yA700 = '#ffda8b';
186
186
  //Purple
187
187
  //https://zeroheight.com/4a9ac476a/p/22005a-color/t/48416f
188
- const p50 = '#f3e4ee';
189
- const p100 = '#e0bbd4';
190
- const p200 = '#cc8eb8';
191
- const p300 = '#b8609c';
192
- const p400 = '#a83e86';
193
- const p500 = '#991c71';
194
- const p600 = '#911969';
195
- const p700 = '#86145e';
196
- const p800 = '#7c1154';
197
- const p900 = '#6b0942';
188
+ const p50 = '#f5e9fb';
189
+ const p100 = '#ebd4f7';
190
+ const p200 = '#d7aaee';
191
+ const p300 = '#c37fe6';
192
+ const p400 = '#af54de';
193
+ const p500 = '#9e2fd7';
194
+ const p600 = '#7c21ab';
195
+ const p700 = '#5d1980';
196
+ const p800 = '#3e1155';
197
+ const p900 = '#2e0c40';
198
198
  const pA100 = '#ff9cd1';
199
199
  const pA200 = '#ff69b9';
200
200
  const pA400 = '#ff36a2';
201
201
  const pA700 = '#ff1d96';
202
+ //Pink
203
+ //https://zeroheight.com/4a9ac476a/p/22005a-color/t/a49f524b62
204
+ const pi50 = '#fce9f6';
205
+ const pi100 = '#f8d3ee';
206
+ const pi200 = '#f1a7dc';
207
+ const pi300 = '#eb7acb';
208
+ const pi400 = '#e44eb9';
209
+ const pi500 = '#dd22a8';
210
+ const pi600 = '#b11b86';
211
+ const pi700 = '#851465';
212
+ const pi800 = '#580e43';
213
+ const pi900 = '#2c0722';
214
+ //Violet
215
+ const v50 = '#ede8fd';
216
+ const v100 = '#dbd1fa';
217
+ const v200 = '#b6a3f5';
218
+ const v300 = '#9275f0';
219
+ const v400 = '#704aec';
220
+ const v500 = '#4c1de7';
221
+ const v600 = '#3a13b9';
222
+ const v700 = '#2c0f8a';
223
+ const v800 = '#1d0a5c';
224
+ const v900 = '#0f052e';
202
225
  const selectedGray = 'rgba(0, 0, 0, 0.12)';
203
226
  const lightSelectedGray = 'rgba(0, 0, 0, 0.08)';
204
227
  const hoverGray = 'rgba(0, 0, 0, 0.04)';
228
+ // AI gradient for dark theme
229
+ const aiNormalDark = `linear-gradient(134deg, ${pi200} 18.22%, ${p200} 68.6%, ${v200} 118.99%)`;
230
+ const aiActiveDark = `linear-gradient(134deg, ${pi200} 18.22%, ${p200} 68.6%, ${v200} 118.99%)`;
231
+ const aiElevatedDark = `linear-gradient(134deg, ${pi50} 18.22%, ${p200} 68.6%, ${v200} 118.99%)`;
232
+ const aiLightDark = `linear-gradient(134deg, ${pi700} 18.22%, ${p700} 68.6%, ${v700} 118.99%)`;
233
+ const aiAutoCompleteBorderDark = `linear-gradient(134deg, ${pi200} 18.22%, ${p200} 68.6%, ${pi300} 118.99%)`;
234
+ // AI gradient for light theme
235
+ const aiNormalLight = `linear-gradient(134deg, ${pi500} 18.22%, ${p500} 68.6%, ${v400} 118.99%)`;
236
+ const aiActiveLight = `linear-gradient(134deg, ${pi400} 18.22%, ${p400} 68.6%, ${v400} 118.99%)`;
237
+ const aiElevatedLight = `linear-gradient(134deg, ${pi600} 18.22%, ${p600} 68.6%, ${v600} 118.99%)`;
238
+ const aiLightLight = `linear-gradient(134deg, ${pi50} 18.22%, ${p50} 68.6%, ${v50} 118.99%)`;
239
+ const aiAutoCompleteBorderLight = `linear-gradient(134deg, ${pi500} 18.22%, ${p500} 68.6%, ${pi300} 118.99%)`;
205
240
 
206
241
  var lightThemeColors = /*#__PURE__*/Object.freeze({
207
242
  __proto__: null,
@@ -308,12 +343,50 @@ var lightThemeColors = /*#__PURE__*/Object.freeze({
308
343
  pA200: pA200,
309
344
  pA400: pA400,
310
345
  pA700: pA700,
346
+ pi50: pi50,
347
+ pi100: pi100,
348
+ pi200: pi200,
349
+ pi300: pi300,
350
+ pi400: pi400,
351
+ pi500: pi500,
352
+ pi600: pi600,
353
+ pi700: pi700,
354
+ pi800: pi800,
355
+ pi900: pi900,
356
+ v50: v50,
357
+ v100: v100,
358
+ v200: v200,
359
+ v300: v300,
360
+ v400: v400,
361
+ v500: v500,
362
+ v600: v600,
363
+ v700: v700,
364
+ v800: v800,
365
+ v900: v900,
311
366
  selectedGray: selectedGray,
312
367
  lightSelectedGray: lightSelectedGray,
313
- hoverGray: hoverGray
368
+ hoverGray: hoverGray,
369
+ aiNormalDark: aiNormalDark,
370
+ aiActiveDark: aiActiveDark,
371
+ aiElevatedDark: aiElevatedDark,
372
+ aiLightDark: aiLightDark,
373
+ aiAutoCompleteBorderDark: aiAutoCompleteBorderDark,
374
+ aiNormalLight: aiNormalLight,
375
+ aiActiveLight: aiActiveLight,
376
+ aiElevatedLight: aiElevatedLight,
377
+ aiLightLight: aiLightLight,
378
+ aiAutoCompleteBorderLight: aiAutoCompleteBorderLight
314
379
  });
315
380
 
316
381
  const lightFigmaColors = {
382
+ aiPink: {
383
+ active: pi400,
384
+ elevated: pi600,
385
+ light: pi50,
386
+ normal: pi500,
387
+ ripple: pi300,
388
+ rippleLight: pi200
389
+ },
317
390
  appToolbar: {
318
391
  background: n700,
319
392
  btnHover: n900
@@ -349,6 +422,13 @@ const lightFigmaColors = {
349
422
  disabled: {
350
423
  normal: n50
351
424
  },
425
+ gradient: {
426
+ active: aiActiveLight,
427
+ ai: aiAutoCompleteBorderLight,
428
+ elevated: aiElevatedLight,
429
+ light: aiLightLight,
430
+ normal: aiNormalLight
431
+ },
352
432
  graph: {
353
433
  alert: {
354
434
  error: r500,
@@ -461,6 +541,14 @@ const lightFigmaColors = {
461
541
  }
462
542
  };
463
543
  const darkFigmaColors = {
544
+ aiPink: {
545
+ active: pi200,
546
+ elevated: pi50,
547
+ light: pi700,
548
+ normal: pi200,
549
+ ripple: pi300,
550
+ rippleLight: pi200
551
+ },
464
552
  appToolbar: {
465
553
  background: n700,
466
554
  btnHover: n900
@@ -496,6 +584,13 @@ const darkFigmaColors = {
496
584
  disabled: {
497
585
  normal: n500
498
586
  },
587
+ gradient: {
588
+ active: aiActiveDark,
589
+ ai: aiAutoCompleteBorderDark,
590
+ elevated: aiElevatedDark,
591
+ light: aiLightDark,
592
+ normal: aiNormalDark
593
+ },
499
594
  graph: {
500
595
  alert: {
501
596
  error: r200,
@@ -1299,6 +1394,7 @@ const fieldsetClassName = 'MuiOutlinedInput-notchedOutline';
1299
1394
  const readOnlyClassName$1 = 'read-only';
1300
1395
  const resizerClassName = 'with-resizer';
1301
1396
  const ROW_HEIGHT = 37;
1397
+ const inputAiClassName$1 = 'dot-input-ai';
1302
1398
  const StyledAdornment = styled(InputAdornment)`
1303
1399
  .dot-icon {
1304
1400
  ${adornmentIconStyles()};
@@ -1499,6 +1595,17 @@ const StyledTextField = styled(TextField)`
1499
1595
  }
1500
1596
  }
1501
1597
 
1598
+ &.${inputAiClassName$1} {
1599
+ color: ${theme.palette.figma.typography.white};
1600
+ background: ${theme.palette.figma.gradient.normal};
1601
+ border: 1px solid transparent;
1602
+ border-radius: 4px;
1603
+
1604
+ .MuiOutlinedInput-root .${fieldsetClassName} {
1605
+ border: none;
1606
+ }
1607
+ }
1608
+
1502
1609
  .MuiOutlinedInput-adornedStart {
1503
1610
  padding-left: 12px;
1504
1611
 
@@ -1515,6 +1622,7 @@ const StyledTextField = styled(TextField)`
1515
1622
  `;
1516
1623
 
1517
1624
  const rootClassName$1n = 'dot-icon';
1625
+ const aiIconClassName = 'dot-icon-ai';
1518
1626
  const StyledIcon = styled(Icon)`
1519
1627
  ${({
1520
1628
  theme
@@ -1523,13 +1631,17 @@ const StyledIcon = styled(Icon)`
1523
1631
  color: ${theme.palette.figma.icon.black};
1524
1632
  font-size: 20px;
1525
1633
 
1634
+ i {
1635
+ height: 20px;
1636
+ width: 20px;
1637
+ }
1638
+
1526
1639
  &.MuiIcon-fontSizeLarge {
1527
- font-size: 28px;
1528
- height: 35px;
1529
- width: 35px;
1640
+ font-size: 24px;
1530
1641
 
1531
1642
  i {
1532
- height: 28px;
1643
+ height: 24px;
1644
+ width: 24px;
1533
1645
  }
1534
1646
  }
1535
1647
  &.MuiIcon-fontSizeSmall {
@@ -1537,16 +1649,19 @@ const StyledIcon = styled(Icon)`
1537
1649
 
1538
1650
  i {
1539
1651
  height: 18px;
1652
+ width: 18px;
1540
1653
  }
1541
1654
  }
1542
1655
 
1543
- i {
1544
- height: 20px;
1545
- }
1546
-
1547
1656
  &.${warningClassName} {
1548
1657
  color: ${theme.palette.figma.warning.normal};
1549
1658
  }
1659
+
1660
+ &.${aiIconClassName} {
1661
+ background: ${theme.palette.figma.gradient.normal};
1662
+ color: transparent;
1663
+ -webkit-background-clip: text;
1664
+ }
1550
1665
  }
1551
1666
  `}
1552
1667
  `;
@@ -1559,9 +1674,10 @@ const DotIcon = ({
1559
1674
  disableInteractive,
1560
1675
  fontSize = 'medium',
1561
1676
  iconId,
1562
- tooltip
1677
+ tooltip,
1678
+ ai = false
1563
1679
  }) => {
1564
- const rootClasses = useStylesWithRootClass(rootClassName$1n, className);
1680
+ const rootClasses = useStylesWithRootClass(rootClassName$1n, className, ai ? aiIconClassName : '');
1565
1681
  return jsx(DotTooltip, {
1566
1682
  disableInteractive: disableInteractive,
1567
1683
  childrenDisplayStyle: "inline-block",
@@ -2723,6 +2839,71 @@ const StyledButton = styled(Button)`
2723
2839
  border-color: ${theme.palette.figma.border.defaultButton};
2724
2840
  }
2725
2841
 
2842
+ &.MuiButton-ai {
2843
+ color: ${theme.palette.figma.typography.white};
2844
+ background: ${theme.palette.figma.gradient.normal};
2845
+
2846
+ &:hover {
2847
+ background: ${theme.palette.figma.gradient.elevated};
2848
+ }
2849
+ &:active {
2850
+ background-color: ${theme.palette.figma.gradient.active};
2851
+ }
2852
+ .dot-icon {
2853
+ color: ${theme.palette.figma.icon.white};
2854
+ }
2855
+ &.Mui-disabled {
2856
+ background: ${theme.palette.figma.disabled.normal};
2857
+ border-color: ${theme.palette.figma.border.defaultButton};
2858
+ }
2859
+ }
2860
+
2861
+ &.MuiButton-ai-outlined {
2862
+ color: ${theme.palette.figma.gradient.normal};
2863
+
2864
+ ${theme.name === 'light' && css`
2865
+ background-image: linear-gradient(white, white),
2866
+ ${theme.palette.figma.gradient.normal};
2867
+ border: 2px solid transparent;
2868
+ `}
2869
+ ${theme.name === 'dark' && css`
2870
+ border: 2px solid ${theme.palette.figma.aiPink.active};
2871
+ `}
2872
+
2873
+ background-clip: padding-box, border-box;
2874
+ background-origin: border-box;
2875
+
2876
+ &:hover {
2877
+ ${theme.name === 'light' && css`
2878
+ background-image: linear-gradient(
2879
+ ${theme.palette.figma.aiPink.light},
2880
+ ${theme.palette.figma.aiPink.light}
2881
+ ),
2882
+ ${theme.palette.figma.gradient.normal};
2883
+ border: 2px solid transparent;
2884
+ `}
2885
+ }
2886
+ &:active {
2887
+ background-color: ${theme.palette.figma.neutral.active};
2888
+ }
2889
+
2890
+ .dot-icon {
2891
+ background: ${theme.palette.figma.gradient.normal};
2892
+ background-clip: text;
2893
+ color: transparent;
2894
+ }
2895
+ }
2896
+
2897
+ &.MuiButton-ai-outlined {
2898
+ background-color: ${theme.palette.figma.neutral.normal};
2899
+ color: ${theme.palette.figma.aiPink.normal};
2900
+
2901
+ &.Mui-disabled {
2902
+ background: ${theme.palette.figma.disabled.normal};
2903
+ border-color: ${theme.palette.figma.border.defaultButton};
2904
+ }
2905
+ }
2906
+
2726
2907
  &.MuiButton-text {
2727
2908
  background-color: transparent;
2728
2909
  }
@@ -2775,6 +2956,7 @@ const DotButton = forwardRef(({
2775
2956
  isSubmit = false,
2776
2957
  onClick,
2777
2958
  onKeyDown,
2959
+ onMouseDown,
2778
2960
  size = 'medium',
2779
2961
  startIcon,
2780
2962
  tabIndex,
@@ -2802,6 +2984,14 @@ const DotButton = forwardRef(({
2802
2984
  color = 'inherit';
2803
2985
  variant = 'text';
2804
2986
  break;
2987
+ case 'ai':
2988
+ color = 'primary';
2989
+ variant = 'ai';
2990
+ break;
2991
+ case 'ai-outlined':
2992
+ color = 'inherit';
2993
+ variant = 'ai-outlined';
2994
+ break;
2805
2995
  }
2806
2996
  return jsx(DotTooltip, {
2807
2997
  childrenDisplayStyle: "inline-block",
@@ -2824,6 +3014,7 @@ const DotButton = forwardRef(({
2824
3014
  fullWidth: fullWidth,
2825
3015
  onClick: event => onClick && onClick(event),
2826
3016
  onKeyDown: onKeyDown,
3017
+ onMouseDown: onMouseDown,
2827
3018
  ref: ref,
2828
3019
  role: ariaRole,
2829
3020
  size: size,
@@ -3694,6 +3885,29 @@ const StyledIconButton = styled(IconButton)`
3694
3885
  ${color === 'default' ? css`
3695
3886
  color: ${theme.palette.figma.icon.black};
3696
3887
  ` : ''}
3888
+
3889
+ &.MuiIconButton-colorAi{
3890
+ color: ${theme.palette.figma.icon.white};
3891
+ background: ${theme.palette.figma.gradient.normal};
3892
+
3893
+ &:hover {
3894
+ background: ${theme.palette.figma.gradient.elevated};
3895
+ }
3896
+ &:active {
3897
+ background-color: ${theme.palette.figma.gradient.ripple};
3898
+ }
3899
+ &:focus {
3900
+ background-color: ${theme.palette.figma.gradient.active};
3901
+ }
3902
+ .dot-icon {
3903
+ color: ${theme.palette.figma.icon.white};
3904
+ }
3905
+ &.Mui-disabled {
3906
+ background: ${theme.palette.figma.disabled.normal};
3907
+ border: 1px solid ${theme.palette.figma.border.defaultButton};
3908
+ }
3909
+ }
3910
+
3697
3911
  font-size: inherit;
3698
3912
  padding: 10px;
3699
3913
 
@@ -3719,11 +3933,15 @@ const StyledIconButton = styled(IconButton)`
3719
3933
 
3720
3934
  &.shape-square {
3721
3935
  border-radius: 4px;
3722
- border: 1px solid ${theme.palette.figma.border.defaultButton};
3723
3936
  padding: ${theme.spacing(1)};
3937
+ ${color !== 'ai' ? css`
3938
+ border: 1px solid ${theme.palette.figma.border.defaultButton};
3939
+ ` : ''}
3724
3940
 
3725
3941
  &:active {
3726
- background: ${theme.palette.figma.toggleTabs.bckg};
3942
+ ${color !== 'ai' ? css`
3943
+ background: ${theme.palette.figma.toggleTabs.bckg};
3944
+ ` : ''}
3727
3945
  }
3728
3946
  }
3729
3947
 
@@ -4667,6 +4885,7 @@ const getInitialState = (value, defaultValue) => ({
4667
4885
  inputValue: value || defaultValue || ''
4668
4886
  });
4669
4887
  const DotInputText = ({
4888
+ ai = false,
4670
4889
  autoComplete = 'off',
4671
4890
  autoFocus,
4672
4891
  className,
@@ -4715,11 +4934,12 @@ const DotInputText = ({
4715
4934
  const hasError = error && errorClassName;
4716
4935
  const hasWarning = !error && warning && warningClassName;
4717
4936
  const hasSuccess = !error && !warning && success && successClassName;
4937
+ const isAiEnabled = ai && inputAiClassName$1;
4718
4938
  const hasEndAdornmentIcon = endIcon || error || hasWarning || hasSuccess;
4719
4939
  const internalInputRef = useRef(null);
4720
4940
  const textFieldInputRef = inputRef || internalInputRef;
4721
4941
  const [inputTextState, setInputTextState] = useState(getInitialState(value));
4722
- const rootStyles = useStylesWithRootClass(rootClassName$1o, hasError, hasWarning, hasSuccess, readOnly && readOnlyClassName$1);
4942
+ const rootStyles = useStylesWithRootClass(rootClassName$1o, hasError, hasWarning, hasSuccess, isAiEnabled, readOnly && readOnlyClassName$1);
4723
4943
  useEffect(() => {
4724
4944
  if (value !== inputTextState.inputValue) {
4725
4945
  setInputTextState(getInitialState(value, defaultValue));
@@ -6699,6 +6919,7 @@ const DotChip = ({
6699
6919
  const rootClassName$Z = 'dot-autocomplete';
6700
6920
  const inputRootClassName = 'dot-input-root';
6701
6921
  const inputMediumClassName = 'dot-input-medium';
6922
+ const inputAiClassName = 'dot-input-ai';
6702
6923
  const StyledAutocomplete = styled(Autocomplete)`
6703
6924
  ${({
6704
6925
  theme
@@ -6737,6 +6958,19 @@ const StyledAutocomplete = styled(Autocomplete)`
6737
6958
  }
6738
6959
  }
6739
6960
  }
6961
+
6962
+ &.${inputAiClassName} {
6963
+ color: ${theme.palette.figma.typography.white};
6964
+ background: ${theme.palette.figma.gradient.ai};
6965
+ border: 2px solid transparent;
6966
+ border-radius: 4px;
6967
+ .MuiOutlinedInput-root {
6968
+ padding: 8px;
6969
+ }
6970
+ .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline {
6971
+ border: none;
6972
+ }
6973
+ }
6740
6974
  `}
6741
6975
  `;
6742
6976
 
@@ -6809,6 +7043,8 @@ const DEFAULT_ACTION_ITEM_TEXT = 'Add new item';
6809
7043
  const DotAutoComplete = ({
6810
7044
  ListboxComponent,
6811
7045
  actionItem,
7046
+ ai = false,
7047
+ aiAction,
6812
7048
  ariaLabel,
6813
7049
  autoFocus,
6814
7050
  autoHighlight,
@@ -6875,7 +7111,7 @@ const DotAutoComplete = ({
6875
7111
  const popperOpen = !readOnly && (open || isOpened);
6876
7112
  const preventDuplicateInsertion = actionItem === null || actionItem === void 0 ? void 0 : actionItem.preventDuplicateInsertion;
6877
7113
  const textFieldWarningClassName = !error && warning && warningClassName;
6878
- const rootClasses = getRootClassNames(className, size);
7114
+ const rootClasses = useStylesWithRootClass(getRootClassNames(className, size), ai ? inputAiClassName : '');
6879
7115
  const textFieldRootClasses = getTextFieldRootClassNames(textFieldWarningClassName, readOnly);
6880
7116
  const inputRootClasses = getInputRootClassNames(dense);
6881
7117
  const popperClasses = useStylesWithRootClass(rootClassName$1d, popperClassName);
@@ -6915,6 +7151,9 @@ const DotAutoComplete = ({
6915
7151
  event.relatedTarget !== actionItemRef.current && setIsOpened(false);
6916
7152
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
6917
7153
  };
7154
+ const handleAiAction = useCallback(inputText => {
7155
+ aiAction === null || aiAction === void 0 ? void 0 : aiAction(inputText);
7156
+ }, [aiAction]);
6918
7157
  const onActionButtonClick = () => {
6919
7158
  setIsOpened(false);
6920
7159
  textFieldInput.focus();
@@ -7046,6 +7285,20 @@ const DotAutoComplete = ({
7046
7285
  }), getInputAdornment(), nativeEndAdornment]
7047
7286
  });
7048
7287
  };
7288
+ const renderAISendAdornment = params => {
7289
+ const {
7290
+ inputProps
7291
+ } = params;
7292
+ return jsx(DotIconButton, {
7293
+ iconId: "send-airplane",
7294
+ tooltip: "Send",
7295
+ "data-testid": dataTestId && `${dataTestId}-send-airplane-icon`,
7296
+ shape: "square",
7297
+ color: "ai",
7298
+ disabled: !(inputProps === null || inputProps === void 0 ? void 0 : inputProps.value),
7299
+ onClick: () => handleAiAction(inputProps === null || inputProps === void 0 ? void 0 : inputProps.value.toString())
7300
+ });
7301
+ };
7049
7302
  const renderTrimmedLongOptions = (props, option) => {
7050
7303
  const key = 'id' in option ? option.id : option.title;
7051
7304
  return jsx(DotTooltip, {
@@ -7064,6 +7317,15 @@ const DotAutoComplete = ({
7064
7317
  const handleRenderOption = (props, option, state) => {
7065
7318
  return renderOption ? renderOption(props, option, state) : renderTrimmedLongOptions(props, option);
7066
7319
  };
7320
+ const getEndAdornment = params => {
7321
+ if (ai) {
7322
+ return renderAISendAdornment(params);
7323
+ }
7324
+ if (!readOnly) {
7325
+ return renderEndAdornment(params.InputProps.endAdornment);
7326
+ }
7327
+ return undefined;
7328
+ };
7067
7329
  return jsx(StyledAutocomplete, {
7068
7330
  PopperComponent: DotPopper,
7069
7331
  "aria-label": ariaLabel,
@@ -7150,7 +7412,7 @@ const DotAutoComplete = ({
7150
7412
  htmlFor: inputId
7151
7413
  },
7152
7414
  InputProps: Object.assign(Object.assign({}, params.InputProps), {
7153
- endAdornment: !readOnly ? renderEndAdornment(params.InputProps.endAdornment) : undefined
7415
+ endAdornment: getEndAdornment(params)
7154
7416
  }),
7155
7417
  inputRef: textFieldRef,
7156
7418
  label: persistentLabel ? null : label,
@@ -11529,6 +11791,7 @@ function DotDashboardDialog({
11529
11791
  description,
11530
11792
  name
11531
11793
  } = formValues;
11794
+ const isSubmittingRef = useRef(false);
11532
11795
  const {
11533
11796
  dashboardSearchLoading,
11534
11797
  searchDashboards
@@ -11571,6 +11834,23 @@ function DotDashboardDialog({
11571
11834
  onClose(false);
11572
11835
  };
11573
11836
  }, []);
11837
+ const validateName = useCallback(nameToValidate => __awaiter(this, void 0, void 0, function* () {
11838
+ return cancelablePromise(searchDashboards({
11839
+ name: nameToValidate
11840
+ })).then(response => {
11841
+ if (response === null || 'error' in response) {
11842
+ setNameError('Could not check existing names due to a server error.');
11843
+ return false;
11844
+ } else if (response.length > 0) {
11845
+ const matchingNames = response.filter(dashboard => dashboard.name.toLowerCase() === nameToValidate.toLowerCase() && (!editDashboard || dashboard.name !== editDashboard.name));
11846
+ if (matchingNames.length > 0) {
11847
+ setNameError(`Cannot use duplicate name '${name}'`);
11848
+ return false;
11849
+ }
11850
+ }
11851
+ return true;
11852
+ });
11853
+ }), [editDashboard, name]);
11574
11854
  const handleSubmit = useCallback(isDone => __awaiter(this, void 0, void 0, function* () {
11575
11855
  setIsLoadingSubmit(true);
11576
11856
  // If this dashboard has a parent_id set, it means we are in an in-progress state and we need to use the ID
@@ -11583,8 +11863,12 @@ function DotDashboardDialog({
11583
11863
  if (validName) {
11584
11864
  yield onSubmit(useFormValues, isDone);
11585
11865
  }
11866
+ isSubmittingRef.current = false;
11586
11867
  setIsLoadingSubmit(false);
11587
- }), [formValues, editDashboard]);
11868
+ }), [formValues, editDashboard, validateName]);
11869
+ const handleMouseDown = () => {
11870
+ isSubmittingRef.current = true;
11871
+ };
11588
11872
  const handleSubmitCreate = useCallback(() => {
11589
11873
  handleSubmit(true);
11590
11874
  }, [handleSubmit]);
@@ -11599,7 +11883,7 @@ function DotDashboardDialog({
11599
11883
  [targetName]: value
11600
11884
  }));
11601
11885
  setIsDirty(true);
11602
- }, [formValues]);
11886
+ }, []);
11603
11887
  const handleChangeCategories = useCallback((_event, options, _reason) => {
11604
11888
  const values = options.map(option => option.title);
11605
11889
  setFormValues(orig => Object.assign(Object.assign({}, orig), {
@@ -11629,24 +11913,10 @@ function DotDashboardDialog({
11629
11913
  }
11630
11914
  return availableCategoryOptions;
11631
11915
  }, [availableCategories, categories]);
11632
- const validateName = nameToValidate => __awaiter(this, void 0, void 0, function* () {
11633
- return cancelablePromise(searchDashboards({
11634
- name: nameToValidate
11635
- })).then(response => {
11636
- if (response === null || 'error' in response) {
11637
- setNameError('Could not check existing names due to a server error.');
11638
- return false;
11639
- } else if (response.length > 0) {
11640
- const matchingNames = response.filter(dashboard => dashboard.name.toLowerCase() === nameToValidate.toLowerCase() && (!editDashboard || dashboard.name !== editDashboard.name));
11641
- if (matchingNames.length > 0) {
11642
- setNameError(`Cannot use duplicate name '${name}'`);
11643
- return false;
11644
- }
11645
- }
11646
- return true;
11647
- });
11648
- });
11649
11916
  const handleNameBlur = useCallback(event => {
11917
+ if (isSubmittingRef.current) {
11918
+ return;
11919
+ }
11650
11920
  const newName = event.target.value;
11651
11921
  if (newName) {
11652
11922
  validateName(newName);
@@ -11749,6 +12019,7 @@ function DotDashboardDialog({
11749
12019
  "data-testid": "save-edit-exit-dashboard-button",
11750
12020
  disabled: dashboardSearchLoading || isLoadingSubmit || !isDirty || !validateFields(),
11751
12021
  onClick: handleSubmitEdit,
12022
+ onMouseDown: handleMouseDown,
11752
12023
  type: "primary",
11753
12024
  children: "Save"
11754
12025
  })]
@@ -12415,11 +12686,14 @@ const inProgressEditMessage = 'This is a published dashboard. Changes will not b
12415
12686
  // in_progress_changes object itself, which will have parent_id set.
12416
12687
  // The Dashboard Table/Grid will always give the parent dashboard, while in the editor we will be dealing with the
12417
12688
  // in_progress_changes object. This function accounts for both cases
12418
- const dashboardLocked = (dashboard, userId) => {
12419
- if (dashboard.in_progress_changes) {
12420
- return dashboard.in_progress_changes.author_id !== userId;
12421
- } else if (dashboard.parent_id) {
12422
- return dashboard.author_id !== userId;
12689
+ const dashboardLocked = (dashboard, user) => {
12690
+ if (user) {
12691
+ if (dashboard.in_progress_changes) {
12692
+ return dashboard.in_progress_changes.author_id !== user.id;
12693
+ } else if (dashboard.parent_id) {
12694
+ return dashboard.author_id !== user.id;
12695
+ }
12696
+ return false;
12423
12697
  }
12424
12698
  return false;
12425
12699
  };
@@ -12491,7 +12765,7 @@ function DotDashboardOptionsMenu({
12491
12765
  const isDraft = !dashboard.parent_id && dashboard.lifecycle_state === DashboardView.lifecycle_state.DRAFT;
12492
12766
  const isPublished = dashboard.parent_id || dashboard.lifecycle_state === DashboardView.lifecycle_state.PUBLISHED;
12493
12767
  const menuItems = [];
12494
- if (!isEdit && onViewMode && !dashboard.is_ootb_dashboard && !dashboardLocked(dashboard, currentUser.id)) {
12768
+ if (!isEdit && onViewMode && !dashboard.is_ootb_dashboard && !dashboardLocked(dashboard, currentUser)) {
12495
12769
  menuItems.push({
12496
12770
  children: jsx(DotButton, {
12497
12771
  ariaLabel: "Edit dashboard",
@@ -12504,7 +12778,7 @@ function DotDashboardOptionsMenu({
12504
12778
  key: 'edit'
12505
12779
  });
12506
12780
  }
12507
- if (onUpdatedProperties && !dashboard.is_ootb_dashboard && !dashboardLocked(dashboard, currentUser.id)) {
12781
+ if (onUpdatedProperties && !dashboard.is_ootb_dashboard && !dashboardLocked(dashboard, currentUser)) {
12508
12782
  let menuItem = jsx(DotButton, {
12509
12783
  ariaLabel: "Edit dashboard properties",
12510
12784
  className: isEdit ? 'disabled-menu-item' : '',
@@ -12555,7 +12829,7 @@ function DotDashboardOptionsMenu({
12555
12829
  key: 'duplicate'
12556
12830
  });
12557
12831
  }
12558
- if (onStartDelete && !dashboard.is_ootb_dashboard && !dashboardLocked(dashboard, currentUser.id)) {
12832
+ if (onStartDelete && !dashboard.is_ootb_dashboard && !dashboardLocked(dashboard, currentUser)) {
12559
12833
  menuItems.push({
12560
12834
  children: jsx(DotButton, {
12561
12835
  ariaLabel: "Delete dashboard",
@@ -12692,7 +12966,7 @@ function DotDashboardOptionsMenu({
12692
12966
  open: isEditPropertiesDialogOpen,
12693
12967
  onClose: handleCloseEditProperties,
12694
12968
  onSubmit: handleSubmitEditProperties,
12695
- editDashboard: editInProgressByUser(dashboard, currentUser.id) && dashboard.in_progress_changes ? dashboard.in_progress_changes : dashboard
12969
+ editDashboard: currentUser && editInProgressByUser(dashboard, currentUser.id) && dashboard.in_progress_changes ? dashboard.in_progress_changes : dashboard
12696
12970
  }), jsx(DotIconButton, {
12697
12971
  className: "expand-button",
12698
12972
  "data-testid": "card-header-action-button",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digital-ai/dot-components",
3
- "version": "4.19.2",
3
+ "version": "4.20.1",
4
4
  "private": false,
5
5
  "license": "SEE LICENSE IN <LICENSE.md>",
6
6
  "contributors": [
@@ -1,7 +1,7 @@
1
1
  import { MouseEvent, KeyboardEvent, ReactNode } from 'react';
2
2
  import { CommonProps } from './CommonProps';
3
3
  import { TooltipPlacement } from './tooltip';
4
- export type ButtonType = 'destructive' | 'primary' | 'outlined' | 'text';
4
+ export type ButtonType = 'destructive' | 'primary' | 'outlined' | 'text' | 'ai' | 'ai-outlined';
5
5
  export type ButtonSize = 'small' | 'medium' | 'large';
6
6
  export interface BaseButtonProps extends CommonProps {
7
7
  /** If true, the button will be focused **/
@@ -2,5 +2,5 @@ export declare const dashboardCategoriesContainerClassName = "dashboard-categori
2
2
  export declare const InlineMessage: import("styled-components").StyledComponent<({ ariaLabel, ariaLevel, ariaRole, className, "data-testid": dataTestId, children, component, noMarginBottom, noWrap, variant, }: import("../../typography/Typography").TypographyProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
3
3
  export declare const StyledPublishConfirmDiv: import("styled-components").StyledComponent<"div", any, {}, never>;
4
4
  export declare const StyledAppSelectDiv: import("styled-components").StyledComponent<"div", any, {}, never>;
5
- export declare const StyledAppSelectDotAutoComplete: import("styled-components").StyledComponent<(<T extends import("../..").AutoCompleteOption>({ ListboxComponent, actionItem, ariaLabel, autoFocus, autoHighlight, className, "data-pendoid": dataPendoId, "data-testid": dataTestId, defaultValue, dense, disabled, disablePortal, endAdornmentTooltip, error, filterOptions, filterSelectedOptions, freesolo, checkIfOptionDisabled, group, helperText, informationToolTip, inputId, inputRef, inputValue, isOptionEqualToValue, label, loading, maxHeight, multiple, onBlur, onChange, onClose, onInputChange, onOpen, open, options, persistentLabel, placeholder, popperClassName, popperPlacement, popperZIndex, preserveGroupOrder, readOnly, renderGroup, renderOption, renderTags, required, size, trimLongOptions, value, warning, }: import("../../auto-complete/AutoComplete").AutoCompleteProps<T>) => import("react/jsx-runtime").JSX.Element), any, {}, never>;
5
+ export declare const StyledAppSelectDotAutoComplete: import("styled-components").StyledComponent<(<T extends import("../..").AutoCompleteOption>({ ListboxComponent, actionItem, ai, aiAction, ariaLabel, autoFocus, autoHighlight, className, "data-pendoid": dataPendoId, "data-testid": dataTestId, defaultValue, dense, disabled, disablePortal, endAdornmentTooltip, error, filterOptions, filterSelectedOptions, freesolo, checkIfOptionDisabled, group, helperText, informationToolTip, inputId, inputRef, inputValue, isOptionEqualToValue, label, loading, maxHeight, multiple, onBlur, onChange, onClose, onInputChange, onOpen, open, options, persistentLabel, placeholder, popperClassName, popperPlacement, popperZIndex, preserveGroupOrder, readOnly, renderGroup, renderOption, renderTags, required, size, trimLongOptions, value, warning, }: import("../../auto-complete/AutoComplete").AutoCompleteProps<T>) => import("react/jsx-runtime").JSX.Element), any, {}, never>;
6
6
  export declare const StyledAppSelectAutoCompleteOption: import("styled-components").StyledComponent<"li", any, {}, never>;
@@ -13,6 +13,10 @@ export interface AutoCompleteProps<T extends AutoCompleteOption = AutoCompleteOp
13
13
  ListboxComponent?: JSXElementConstructor<HTMLAttributes<HTMLElement>>;
14
14
  /** Action button as the last element on the menu **/
15
15
  actionItem?: ActionItem;
16
+ /** If true, applies a gradient color to the border */
17
+ ai?: boolean;
18
+ /** Event callback */
19
+ aiAction?: (inputText: string) => void;
16
20
  /** This prop helps users to fill forms faster */
17
21
  autoFocus?: boolean;
18
22
  /** If true, the first option is automatically highlighted. */
@@ -102,4 +106,4 @@ export interface AutoCompleteProps<T extends AutoCompleteOption = AutoCompleteOp
102
106
  /** If true, the label will be displayed in a warning state. */
103
107
  warning?: boolean;
104
108
  }
105
- export declare const DotAutoComplete: <T extends AutoCompleteOption>({ ListboxComponent, actionItem, ariaLabel, autoFocus, autoHighlight, className, "data-pendoid": dataPendoId, "data-testid": dataTestId, defaultValue, dense, disabled, disablePortal, endAdornmentTooltip, error, filterOptions, filterSelectedOptions, freesolo, checkIfOptionDisabled, group, helperText, informationToolTip, inputId, inputRef, inputValue, isOptionEqualToValue, label, loading, maxHeight, multiple, onBlur, onChange, onClose, onInputChange, onOpen, open, options, persistentLabel, placeholder, popperClassName, popperPlacement, popperZIndex, preserveGroupOrder, readOnly, renderGroup, renderOption, renderTags, required, size, trimLongOptions, value, warning, }: AutoCompleteProps<T>) => import("react/jsx-runtime").JSX.Element;
109
+ export declare const DotAutoComplete: <T extends AutoCompleteOption>({ ListboxComponent, actionItem, ai, aiAction, ariaLabel, autoFocus, autoHighlight, className, "data-pendoid": dataPendoId, "data-testid": dataTestId, defaultValue, dense, disabled, disablePortal, endAdornmentTooltip, error, filterOptions, filterSelectedOptions, freesolo, checkIfOptionDisabled, group, helperText, informationToolTip, inputId, inputRef, inputValue, isOptionEqualToValue, label, loading, maxHeight, multiple, onBlur, onChange, onClose, onInputChange, onOpen, open, options, persistentLabel, placeholder, popperClassName, popperPlacement, popperZIndex, preserveGroupOrder, readOnly, renderGroup, renderOption, renderTags, required, size, trimLongOptions, value, warning, }: AutoCompleteProps<T>) => import("react/jsx-runtime").JSX.Element;
@@ -2,4 +2,5 @@ import { Autocomplete } from '@mui/material';
2
2
  export declare const rootClassName = "dot-autocomplete";
3
3
  export declare const inputRootClassName = "dot-input-root";
4
4
  export declare const inputMediumClassName = "dot-input-medium";
5
+ export declare const inputAiClassName = "dot-input-ai";
5
6
  export declare const StyledAutocomplete: import("styled-components").StyledComponent<typeof Autocomplete, any, {}, never>;
@@ -1,4 +1,4 @@
1
- import { KeyboardEventHandler, ReactNode } from 'react';
1
+ import { KeyboardEventHandler, MouseEventHandler, ReactNode } from 'react';
2
2
  import { BaseButtonProps } from '../BaseButtonProps';
3
3
  export interface ButtonProps extends BaseButtonProps {
4
4
  /** The text for the button. Button text should be in sentence case. */
@@ -6,6 +6,7 @@ export interface ButtonProps extends BaseButtonProps {
6
6
  /** Icon placed after the children. */
7
7
  endIcon?: ReactNode;
8
8
  onKeyDown?: KeyboardEventHandler;
9
+ onMouseDown?: MouseEventHandler;
9
10
  /** Icon placed before the children. */
10
11
  startIcon?: ReactNode;
11
12
  }
@@ -2,7 +2,7 @@ import { MouseEvent, ReactNode } from 'react';
2
2
  import { CommonProps } from '../CommonProps';
3
3
  import { IconFontSize } from '../icon/Icon';
4
4
  import { TooltipPlacement } from '../tooltip';
5
- export type IconButtonColor = 'default' | 'inherit' | 'primary' | 'secondary';
5
+ export type IconButtonColor = 'default' | 'inherit' | 'primary' | 'secondary' | 'ai';
6
6
  export type IconButtonSize = 'small' | 'medium';
7
7
  export type IconButtonShape = 'circle' | 'square';
8
8
  export interface CommonIconButtonProps extends CommonProps {
@@ -1,6 +1,8 @@
1
1
  import { CommonProps } from '../CommonProps';
2
- export type IconFontSize = 'small' | 'medium';
2
+ export type IconFontSize = 'small' | 'medium' | 'large';
3
3
  export interface IconProps extends CommonProps {
4
+ /** If true, applies a gradient color to the icon */
5
+ ai?: boolean;
4
6
  /** If true, makes a tooltip not interactive, so it will close when the user hovers over the tooltip before the leaveDelay is expired. */
5
7
  disableInteractive?: boolean;
6
8
  /** Determines the size of the icon and spacing around it */
@@ -10,4 +12,4 @@ export interface IconProps extends CommonProps {
10
12
  /** Tooltip text displayed on hover */
11
13
  tooltip?: string;
12
14
  }
13
- export declare const DotIcon: ({ ariaLabel, ariaRole, className, "data-testid": dataTestId, disableInteractive, fontSize, iconId, tooltip, }: IconProps) => import("react/jsx-runtime").JSX.Element;
15
+ export declare const DotIcon: ({ ariaLabel, ariaRole, className, "data-testid": dataTestId, disableInteractive, fontSize, iconId, tooltip, ai, }: IconProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,6 @@
1
1
  import '@digital-ai/dot-icons';
2
2
  export declare const rootClassName = "dot-icon";
3
+ export declare const aiIconClassName = "dot-icon-ai";
3
4
  export declare const StyledIcon: import("styled-components").StyledComponent<import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").IconTypeMap<{}, "span">> & {
4
5
  muiName: string;
5
6
  }, any, {}, never>;
@@ -0,0 +1,2 @@
1
+ export { DotIcon } from './Icon';
2
+ export type { IconProps, IconFontSize } from './Icon';
@@ -15,6 +15,7 @@ export type { DialogButtonProps, SubmitButtonProps } from './dialog/Dialog';
15
15
  export type { DrawerAnchor } from './drawer/Drawer';
16
16
  export type { DynamicFormProps } from './dynamic-form/DynamicForm';
17
17
  export type { ConditionFunction, ControlClickHandler, DisabledConditionFunction, DisabledControlCondition, DynamicFormConfig, DynamicFormControl, DynamicFormControlProps, DynamicFormControlType, DynamicFormOutputData, DynamicFormSectionProps, DynamicFormState, DynamicFormStateItem, FieldValidation, } from './dynamic-form/models';
18
+ export type { IconFontSize, IconProps } from './icon';
18
19
  export type { InputTextProps } from './input-form-fields/InputText';
19
20
  export type { InputSelectProps, InputSelectOption, OptionType, } from './input-form-fields/InputSelect';
20
21
  export type { LinkUnderline } from './link/Link';
@@ -95,7 +96,7 @@ export { DotEmptyFilterState } from './empty-state/EmptyFilterState';
95
96
  export { DotForm } from './form/Form';
96
97
  export { DotFormGroup } from './form-group/FormGroup';
97
98
  export { DotDynamicForm } from './dynamic-form/DynamicForm';
98
- export { DotIcon } from './icon/Icon';
99
+ export { DotIcon } from './icon';
99
100
  export { DotIllustration } from './illustration/Illustration';
100
101
  export { DotImpactDialog } from './impact-dialog/ImpactDialog';
101
102
  export { DotInlineEdit } from './inline-edit';
@@ -2,6 +2,8 @@ import { ChangeEvent, KeyboardEvent, MouseEvent, ReactNode, Ref } from 'react';
2
2
  import { CommonProps } from '../CommonProps';
3
3
  export type inputSizeOptions = 'small' | 'medium';
4
4
  export interface InputProps extends CommonProps {
5
+ /** If true, applies no border */
6
+ ai?: boolean;
5
7
  /** This prop helps users to fill forms faster */
6
8
  autoFocus?: boolean;
7
9
  /** default value of the input element */
@@ -11,6 +11,7 @@ export declare const fieldsetClassName = "MuiOutlinedInput-notchedOutline";
11
11
  export declare const readOnlyClassName = "read-only";
12
12
  export declare const resizerClassName = "with-resizer";
13
13
  export declare const ROW_HEIGHT = 37;
14
+ export declare const inputAiClassName = "dot-input-ai";
14
15
  interface StyledTextFieldProps {
15
16
  $maxRows?: number;
16
17
  $minRows?: number;
@@ -3,6 +3,8 @@ import { InputProps } from './InputFormFields.propTypes';
3
3
  export declare const DELAY_MS = 300;
4
4
  export type endAdornmentIconType = 'warning' | 'error' | 'check';
5
5
  export interface InputTextProps extends InputProps {
6
+ /** If true, applies no border */
7
+ ai?: boolean;
6
8
  /** The HTML autocomplete property to pass along to the input tag. Used for
7
9
  controlling autofill behavior in forms. This property follows this HTML spec:
8
10
  https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill
@@ -40,4 +42,4 @@ export interface EndIconProps {
40
42
  success?: boolean;
41
43
  warning?: boolean;
42
44
  }
43
- export declare const DotInputText: ({ autoComplete, autoFocus, className, defaultValue, "data-pendoid": dataPendoId, "data-testid": dataTestId, disabled, error, endAdornmentTooltip, fullWidth, hasDebounce, hasResizer, helperText, endIcon, endText, id, informationToolTip, inputRef, label, max, maxLength, maxRows, min, minLength, minRows, multiline, name, onBlur, onChange, onClear, onFocus, onKeyDown, onMouseUp, persistentLabel, placeholder, readOnly, required, shrink, startIcon, size, success, type, value, warning, }: InputTextProps) => import("react/jsx-runtime").JSX.Element;
45
+ export declare const DotInputText: ({ ai, autoComplete, autoFocus, className, defaultValue, "data-pendoid": dataPendoId, "data-testid": dataTestId, disabled, error, endAdornmentTooltip, fullWidth, hasDebounce, hasResizer, helperText, endIcon, endText, id, informationToolTip, inputRef, label, max, maxLength, maxRows, min, minLength, minRows, multiline, name, onBlur, onChange, onClear, onFocus, onKeyDown, onMouseUp, persistentLabel, placeholder, readOnly, required, shrink, startIcon, size, success, type, value, warning, }: InputTextProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  export declare const rootClassName = "dot-search";
2
- export declare const StyledSearch: import("styled-components").StyledComponent<({ autoComplete, autoFocus, className, defaultValue, "data-pendoid": dataPendoId, "data-testid": dataTestId, disabled, error, endAdornmentTooltip, fullWidth, hasDebounce, hasResizer, helperText, endIcon, endText, id, informationToolTip, inputRef, label, max, maxLength, maxRows, min, minLength, minRows, multiline, name, onBlur, onChange, onClear, onFocus, onKeyDown, onMouseUp, persistentLabel, placeholder, readOnly, required, shrink, startIcon, size, success, type, value, warning, }: import("../input-form-fields/InputText").InputTextProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
2
+ export declare const StyledSearch: import("styled-components").StyledComponent<({ ai, autoComplete, autoFocus, className, defaultValue, "data-pendoid": dataPendoId, "data-testid": dataTestId, disabled, error, endAdornmentTooltip, fullWidth, hasDebounce, hasResizer, helperText, endIcon, endText, id, informationToolTip, inputRef, label, max, maxLength, maxRows, min, minLength, minRows, multiline, name, onBlur, onChange, onClear, onFocus, onKeyDown, onMouseUp, persistentLabel, placeholder, readOnly, required, shrink, startIcon, size, success, type, value, warning, }: import("../input-form-fields/InputText").InputTextProps) => import("react/jsx-runtime").JSX.Element, any, {}, never>;
@@ -20,6 +20,17 @@ declare module '@mui/material/styles/createPalette' {
20
20
  purple?: PaletteColorOptions;
21
21
  }
22
22
  }
23
+ declare module '@mui/material/Button' {
24
+ interface ButtonPropsVariantOverrides {
25
+ ai: true;
26
+ 'ai-outlined': true;
27
+ }
28
+ }
29
+ declare module '@mui/material/IconButton' {
30
+ interface IconButtonPropsColorOverrides {
31
+ ai: true;
32
+ }
33
+ }
23
34
  export type ThemeOptions = 'light' | 'dark';
24
35
  export declare const typographyOptions: TypographyOptions;
25
36
  export declare const breakpointOptions: BreakpointOptions;
@@ -87,20 +87,50 @@ export declare const yA100 = "#ffffff";
87
87
  export declare const yA200 = "#fff2d7";
88
88
  export declare const yA400 = "#ffe2a4";
89
89
  export declare const yA700 = "#ffda8b";
90
- export declare const p50 = "#f3e4ee";
91
- export declare const p100 = "#e0bbd4";
92
- export declare const p200 = "#cc8eb8";
93
- export declare const p300 = "#b8609c";
94
- export declare const p400 = "#a83e86";
95
- export declare const p500 = "#991c71";
96
- export declare const p600 = "#911969";
97
- export declare const p700 = "#86145e";
98
- export declare const p800 = "#7c1154";
99
- export declare const p900 = "#6b0942";
90
+ export declare const p50 = "#f5e9fb";
91
+ export declare const p100 = "#ebd4f7";
92
+ export declare const p200 = "#d7aaee";
93
+ export declare const p300 = "#c37fe6";
94
+ export declare const p400 = "#af54de";
95
+ export declare const p500 = "#9e2fd7";
96
+ export declare const p600 = "#7c21ab";
97
+ export declare const p700 = "#5d1980";
98
+ export declare const p800 = "#3e1155";
99
+ export declare const p900 = "#2e0c40";
100
100
  export declare const pA100 = "#ff9cd1";
101
101
  export declare const pA200 = "#ff69b9";
102
102
  export declare const pA400 = "#ff36a2";
103
103
  export declare const pA700 = "#ff1d96";
104
+ export declare const pi50 = "#fce9f6";
105
+ export declare const pi100 = "#f8d3ee";
106
+ export declare const pi200 = "#f1a7dc";
107
+ export declare const pi300 = "#eb7acb";
108
+ export declare const pi400 = "#e44eb9";
109
+ export declare const pi500 = "#dd22a8";
110
+ export declare const pi600 = "#b11b86";
111
+ export declare const pi700 = "#851465";
112
+ export declare const pi800 = "#580e43";
113
+ export declare const pi900 = "#2c0722";
114
+ export declare const v50 = "#ede8fd";
115
+ export declare const v100 = "#dbd1fa";
116
+ export declare const v200 = "#b6a3f5";
117
+ export declare const v300 = "#9275f0";
118
+ export declare const v400 = "#704aec";
119
+ export declare const v500 = "#4c1de7";
120
+ export declare const v600 = "#3a13b9";
121
+ export declare const v700 = "#2c0f8a";
122
+ export declare const v800 = "#1d0a5c";
123
+ export declare const v900 = "#0f052e";
104
124
  export declare const selectedGray = "rgba(0, 0, 0, 0.12)";
105
125
  export declare const lightSelectedGray = "rgba(0, 0, 0, 0.08)";
106
126
  export declare const hoverGray = "rgba(0, 0, 0, 0.04)";
127
+ export declare const aiNormalDark: string;
128
+ export declare const aiActiveDark: string;
129
+ export declare const aiElevatedDark: string;
130
+ export declare const aiLightDark: string;
131
+ export declare const aiAutoCompleteBorderDark: string;
132
+ export declare const aiNormalLight: string;
133
+ export declare const aiActiveLight: string;
134
+ export declare const aiElevatedLight: string;
135
+ export declare const aiLightLight: string;
136
+ export declare const aiAutoCompleteBorderLight: string;
@@ -27,6 +27,14 @@ export interface BreakpointOptions {
27
27
  };
28
28
  }
29
29
  export interface FigmaTheme {
30
+ aiPink: {
31
+ active: string;
32
+ elevated: string;
33
+ light: string;
34
+ normal: string;
35
+ ripple: string;
36
+ rippleLight: string;
37
+ };
30
38
  appToolbar: {
31
39
  background: string;
32
40
  btnHover: string;
@@ -62,6 +70,13 @@ export interface FigmaTheme {
62
70
  disabled: {
63
71
  normal: string;
64
72
  };
73
+ gradient: {
74
+ active: string;
75
+ ai: string;
76
+ elevated: string;
77
+ light: string;
78
+ normal: string;
79
+ };
65
80
  graph: {
66
81
  alert: {
67
82
  error: string;