@fibery/ui-kit 1.34.7 → 1.34.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fibery/ui-kit",
3
- "version": "1.34.7",
3
+ "version": "1.34.8",
4
4
  "private": false,
5
5
  "files": [
6
6
  "src/antd/styles.ts",
@@ -113,8 +113,8 @@
113
113
  "svgo": "2.8.0",
114
114
  "typescript": "5.4.3",
115
115
  "unist-util-reduce": "0.2.2",
116
- "@fibery/babel-preset": "7.4.0",
117
- "@fibery/eslint-config": "8.6.0"
116
+ "@fibery/eslint-config": "8.6.0",
117
+ "@fibery/babel-preset": "7.4.0"
118
118
  },
119
119
  "jest": {
120
120
  "testEnvironment": "jsdom",
@@ -165,6 +165,30 @@ export const themeColors = {
165
165
  getOpacities(slate.slate12).opacity15
166
166
  }`,
167
167
  ],
168
+ shadow400: [
169
+ `
170
+ 0px 0px 1px 0px ${getOpacities(slate.slate12).opacity20}, 0px 16px 40px 0px ${getOpacities(slate.slate12).opacity15}
171
+ `,
172
+ `0px 0px 1px 0px ${getOpacities(slate.slate12).opacity20}, 0px 16px 40px 0px ${
173
+ getOpacities(slate.slate12).opacity15
174
+ }`,
175
+ ],
176
+ shadow500: [
177
+ `
178
+ 0px 0px 1px 0px ${getOpacities(slate.slate12).opacity20}, 0px 20px 50px 0px ${getOpacities(slate.slate12).opacity15}
179
+ `,
180
+ `0px 0px 1px 0px ${getOpacities(slate.slate12).opacity20}, 0px 20px 50px 0px ${
181
+ getOpacities(slate.slate12).opacity15
182
+ }`,
183
+ ],
184
+ shadow600: [
185
+ `
186
+ 0px 0px 1px 0px ${getOpacities(slate.slate12).opacity20}, 0px 26px 80px 0px ${getOpacities(slate.slate12).opacity20}
187
+ `,
188
+ `0px 0px 1px 0px ${getOpacities(slate.slate12).opacity20}, 0px 26px 80px 0px ${
189
+ getOpacities(slate.slate12).opacity20
190
+ }`,
191
+ ],
168
192
  actionMenuShadow: [
169
193
  `0px 0px 2px 0px ${getOpacities(slate.slate11).opacity30}, 0px 4px 6px 0px ${
170
194
  getOpacities(slate.slate11).opacity5
@@ -553,6 +577,12 @@ export const themeColors = {
553
577
  gridDisabledSelectedCellBgColor: [indigo.indigo4, indigoDark.indigo5],
554
578
  gridActiveCellBorderColor: [indigo.indigo8, indigoDark.indigo9],
555
579
 
580
+ //timeline
581
+ timelineEntityHandleColor: [indigo.indigo7, indigoDark.indigo7],
582
+ timelineDependencyHoverBgColor: [indigo.indigo8, indigoDark.indigo8],
583
+ timelineDependencyOverlapBgColor: [red.red9, redDark.red9],
584
+ timelineDependencyOverlapHoverBgColor: [red.red11, redDark.red11],
585
+
556
586
  // #region buttons
557
587
  // solid
558
588
  colorBgButtonSolidAccentDefault: [indigo.indigo9, indigoDark.indigo9],
@@ -657,9 +687,9 @@ export const themeColors = {
657
687
  //Whiteboard
658
688
  instrumentsMenuBg: [getOpacities(whiteA.whiteA0).opacity95, getOpacities(slateDark.slate4).opacity95],
659
689
  instrumentsMenuShadow: [
660
- `0 0 0 1px ${getOpacities(slate.slate10).opacity10}, 0 2px 12px -2px ${getOpacities(slate.slate10).opacity15}`,
661
- `0 0 0 1px ${getOpacities(slateDark.slate1).opacity10}, 0 2px 12px -6px ${
662
- getOpacities(slateDark.slate1).opacity15
690
+ `0 0 0 1px ${getOpacities(slate.slate10).opacity10}, 0 10px 16px -8px ${getOpacities(slate.slate10).opacity30}`,
691
+ `0 0 0 1px ${getOpacities(slateDark.slate1).opacity10}, 0 10px 16px -8px ${
692
+ getOpacities(slateDark.slate1).opacity30
663
693
  }`,
664
694
  ],
665
695
  commentBubbleBg: [whiteA.whiteA0, slateDark.slate6],
@@ -669,6 +699,9 @@ export const themeColors = {
669
699
  colorBgSegmentedControlActive: [slate.slate1, slateDark.slate6],
670
700
  colorBgSegmentedControlHover: [slate.slate5, slateDark.slate4],
671
701
  colorBorderSegmentedControlDefault: [slate.slate6, slateDark.slate7],
702
+
703
+ // Chargebee info
704
+ colorBgChargebeeInfoBox: [slate.slate3, slateDark.slate1],
672
705
  } as const;
673
706
 
674
707
  type ThemeDefs = typeof themeColors;
@@ -23,7 +23,7 @@ const ColorPickerCollapsibleTrigger: React.FC<ColorPickerCollapsibleTrigger> = (
23
23
  const themeMode = useThemeMode();
24
24
  const iconColor = color ? getIconColor(themeMode, color) : undefined;
25
25
 
26
- const Icon = opened ? ColorCodingFilled : ColorCoding;
26
+ const Icon = opened ? ColorCoding : ColorCodingFilled;
27
27
 
28
28
  const label = opened ? "Hide color picker" : "Show color picker";
29
29
 
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const CollapseAll: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"width":20,"height":20},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M7 3.5a.8.8 0 1 0-1.131 1.131l3.565 3.335a.8.8 0 0 0 1.132 0L14.13 4.63A.8.8 0 0 0 13 3.5l-3 2.769L7 3.5Zm6 13.237a.8.8 0 1 0 1.131-1.131l-3.565-3.572a.8.8 0 0 0-1.132 0L5.87 15.606A.8.8 0 1 0 7 16.737l3-3.006 3 3.006Z"},"children":[]}],"metadata":""}]},"name":"collapse-all"};
7
+
8
+ export default CollapseAll;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const DatabaseOff: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"width":20,"height":20},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"m5.198 4.138 5.353 5.353c1.4-.048 2.66-.282 3.614-.742.353-.17.663-.37.924-.603.463-.414.911-1.097.911-1.745C16 3.97 13.314 3 10 3c-1.964 0-3.707.352-4.802 1.138Zm6.76 6.758 1.74 1.742c.176-.066.344-.137.503-.216.358-.176.672-.384.934-.627.263-.244.706-.72.79-1.082a3.081 3.081 0 0 0 .051-1.052 2.735 2.735 0 0 0-.075-.383 4.934 4.934 0 0 1-1.41.941c-.747.34-1.612.557-2.534.677Zm2.765 2.766 1.053 1.054c.146-.332.224-.703.224-1.117a2.763 2.763 0 0 0-.1-.766 4.78 4.78 0 0 1-1.177.83Zm2.162 2.162.895.896a.75.75 0 1 1-1.06 1.06L2.22 3.28a.75.75 0 0 1 1.06-1.06l.849.848a5.58 5.58 0 0 1 .95-.605C6.462 1.762 8.23 1.5 10 1.5c1.764 0 3.532.253 4.917.95 1.46.735 2.583 2.036 2.583 3.95v7.2c0 .865-.23 1.605-.615 2.224ZM2.5 6.4c0-.328.384-.456.616-.224L6.11 9.17c.534.535.085 1.353-.601 1.038a4.973 4.973 0 0 1-1.405-.939 2.676 2.676 0 0 0-.078.38 2.993 2.993 0 0 0 .048 1.053c.085.362.531.84.795 1.083.26.242.574.45.93.626 1.23.609 2.662.77 4.026.78a.744.744 0 0 1 .521.216l.076.076c.407.407.154 1.088-.422 1.088-1.64 0-3.235-.231-4.491-.808a4.978 4.978 0 0 1-1.405-.939A2.703 2.703 0 0 0 4 13.6c0 .454.096.857.274 1.213C5.038 16.341 7.312 17 10 17c1.093 0 2.117-.106 3-.334a.845.845 0 0 1 .812.207c.393.392.265 1.05-.27 1.2-1.097.306-2.32.427-3.542.427-1.77 0-3.538-.262-4.92-.963-1.453-.736-2.58-2.034-2.58-3.938V6.401Z"},"children":[]}],"metadata":""}]},"name":"database-off"};
7
+
8
+ export default DatabaseOff;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const Dependency: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"width":20,"height":20},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M9 3.75A.75.75 0 0 1 9.75 3h7.5a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-.75.75h-7.5A.75.75 0 0 1 9 5.25v-1.5Zm-7 11a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-.75.75h-7.5a.75.75 0 0 1-.75-.75v-1.5ZM14.75 8V7h-1.5v1c0 .69-.56 1.25-1.25 1.25H8A2.75 2.75 0 0 0 5.25 12v1h1.5v-1c0-.69.56-1.25 1.25-1.25h4A2.75 2.75 0 0 0 14.75 8Z"},"children":[]}],"metadata":""}]},"name":"dependency"};
7
+
8
+ export default Dependency;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const ManyPeople: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M5.25 2a1.583 1.583 0 1 0 0 3.167A1.583 1.583 0 0 0 5.25 2ZM3.478 8.764c.133-.534.79-1.097 1.772-1.097s1.64.563 1.772 1.097a.75.75 0 0 0 1.456-.362c-.34-1.367-1.742-2.235-3.228-2.235-1.486 0-2.888.868-3.228 2.235a.75.75 0 0 0 1.456.362ZM14.75 2a1.583 1.583 0 1 0 0 3.167 1.583 1.583 0 0 0 0-3.167Zm-1.772 6.764c.133-.534.79-1.097 1.772-1.097s1.64.563 1.772 1.097a.75.75 0 0 0 1.456-.362c-.34-1.367-1.742-2.235-3.228-2.235-1.486 0-2.888.868-3.228 2.235a.75.75 0 0 0 1.456.362Zm.189 2.82a1.583 1.583 0 1 1 3.167 0 1.583 1.583 0 0 1-3.167 0Zm1.583 4.083c-.982 0-1.64.563-1.772 1.097a.75.75 0 1 1-1.456-.362c.34-1.367 1.742-2.235 3.228-2.235 1.486 0 2.888.868 3.228 2.235a.75.75 0 1 1-1.456.362c-.132-.534-.79-1.097-1.772-1.097ZM5.25 10a1.583 1.583 0 1 0 0 3.167 1.583 1.583 0 0 0 0-3.167Zm-1.772 6.764c.133-.534.79-1.097 1.772-1.097s1.64.563 1.772 1.097a.75.75 0 1 0 1.456-.362c-.34-1.367-1.742-2.235-3.228-2.235-1.486 0-2.888.868-3.228 2.235a.75.75 0 1 0 1.456.362Z"},"children":[]}],"metadata":""}]},"name":"many-people"};
7
+
8
+ export default ManyPeople;
@@ -3,6 +3,6 @@
3
3
 
4
4
  import { IconDefinition } from '../types';
5
5
 
6
- const SendArrow: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M10 3.85c.307 0 .6.123.816.34l4.25 4.286a1.15 1.15 0 1 1-1.633 1.62L11.15 7.793V15a1.15 1.15 0 0 1-2.3 0V7.793l-2.283 2.303a1.15 1.15 0 1 1-1.634-1.62l4.25-4.286c.216-.217.51-.34.817-.34Z"},"children":[]}],"metadata":""}]},"name":"send-arrow"};
6
+ const SendArrow: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"d":"M10.707 3.293a1 1 0 0 0-1.415 0L4.57 8.015A1 1 0 1 0 5.984 9.43l3.014-3.013V16a1 1 0 1 0 2 0V6.413l3.017 3.016a1 1 0 1 0 1.414-1.414l-4.722-4.722Z"},"children":[]}],"metadata":""}]},"name":"send-arrow"};
7
7
 
8
8
  export default SendArrow;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const ViewAi: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"width":20,"height":20},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M6 4a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h4v-2a4 4 0 0 1 4-4h2V6a2 2 0 0 0-2-2H6Zm2.186 2.224c.101-.296.52-.3.626-.006l.485 1.349c.028.077.09.137.17.162l1.302.412a.33.33 0 0 1 .005.627l-1.307.438a.264.264 0 0 0-.166.163l-.488 1.409a.332.332 0 0 1-.628-.005l-.46-1.4a.264.264 0 0 0-.168-.168l-1.33-.437a.33.33 0 0 1 .006-.628l1.325-.41a.264.264 0 0 0 .172-.167l.456-1.34Zm6.438 6.044a.398.398 0 0 1 .75-.006l.582 1.618a.318.318 0 0 0 .203.195l1.564.494c.366.116.37.63.006.752l-1.568.526a.317.317 0 0 0-.2.196l-.586 1.69a.398.398 0 0 1-.753-.006l-.552-1.679a.318.318 0 0 0-.202-.202l-1.595-.524a.395.395 0 0 1 .006-.754l1.59-.492a.317.317 0 0 0 .207-.201l.548-1.607Z"},"children":[]}],"metadata":""}]},"name":"view-ai"};
7
+
8
+ export default ViewAi;
@@ -64,6 +64,7 @@ export { default as ClockAlarm } from './ClockAlarm';
64
64
  export { default as ClockForward } from './ClockForward';
65
65
  export { default as Clock } from './Clock';
66
66
  export { default as Close } from './Close';
67
+ export { default as CollapseAll } from './CollapseAll';
67
68
  export { default as ColorCodingFilled } from './ColorCodingFilled';
68
69
  export { default as ColorCoding } from './ColorCoding';
69
70
  export { default as Columns2 } from './Columns2';
@@ -72,10 +73,12 @@ export { default as Columns } from './Columns';
72
73
  export { default as CommentBubble } from './CommentBubble';
73
74
  export { default as Copy } from './Copy';
74
75
  export { default as Create } from './Create';
76
+ export { default as DatabaseOff } from './DatabaseOff';
75
77
  export { default as DatabaseStroke } from './DatabaseStroke';
76
78
  export { default as Database } from './Database';
77
79
  export { default as Delete } from './Delete';
78
80
  export { default as Demo } from './Demo';
81
+ export { default as Dependency } from './Dependency';
79
82
  export { default as DoubleArrowLeft } from './DoubleArrowLeft';
80
83
  export { default as DoubleArrowRight } from './DoubleArrowRight';
81
84
  export { default as DragBlockHandleSingle } from './DragBlockHandleSingle';
@@ -155,6 +158,7 @@ export { default as Loom } from './Loom';
155
158
  export { default as LoupeZoomIn } from './LoupeZoomIn';
156
159
  export { default as LoupeZoomOut } from './LoupeZoomOut';
157
160
  export { default as LoupeZoom } from './LoupeZoom';
161
+ export { default as ManyPeople } from './ManyPeople';
158
162
  export { default as MapMode } from './MapMode';
159
163
  export { default as MenuCollapser } from './MenuCollapser';
160
164
  export { default as MessagePlusSquare } from './MessagePlusSquare';
@@ -319,6 +323,7 @@ export { default as Upgrade } from './Upgrade';
319
323
  export { default as UsbFlashDrive } from './UsbFlashDrive';
320
324
  export { default as UserGroup } from './UserGroup';
321
325
  export { default as UserRole } from './UserRole';
326
+ export { default as ViewAi } from './ViewAi';
322
327
  export { default as ViewBoard } from './ViewBoard';
323
328
  export { default as ViewCalendar } from './ViewCalendar';
324
329
  export { default as ViewCanvas } from './ViewCanvas';
@@ -0,0 +1,13 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import {forwardRef} from 'react';
4
+ import CollapseAllSvg from '../ast/CollapseAll';
5
+ import { Icon } from '../Icon';
6
+ import { IconBaseProps } from '../types';
7
+
8
+ const CollapseAll = forwardRef<SVGSVGElement, IconBaseProps>(function CollapseAll(
9
+ props: IconBaseProps,
10
+ ref: React.Ref<SVGSVGElement>
11
+ ) {return <Icon {...props} className={props.className} ref={ref} icon={CollapseAllSvg} />});
12
+
13
+ export default CollapseAll;
@@ -0,0 +1,13 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import {forwardRef} from 'react';
4
+ import DatabaseOffSvg from '../ast/DatabaseOff';
5
+ import { Icon } from '../Icon';
6
+ import { IconBaseProps } from '../types';
7
+
8
+ const DatabaseOff = forwardRef<SVGSVGElement, IconBaseProps>(function DatabaseOff(
9
+ props: IconBaseProps,
10
+ ref: React.Ref<SVGSVGElement>
11
+ ) {return <Icon {...props} className={props.className} ref={ref} icon={DatabaseOffSvg} />});
12
+
13
+ export default DatabaseOff;
@@ -0,0 +1,13 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import {forwardRef} from 'react';
4
+ import DependencySvg from '../ast/Dependency';
5
+ import { Icon } from '../Icon';
6
+ import { IconBaseProps } from '../types';
7
+
8
+ const Dependency = forwardRef<SVGSVGElement, IconBaseProps>(function Dependency(
9
+ props: IconBaseProps,
10
+ ref: React.Ref<SVGSVGElement>
11
+ ) {return <Icon {...props} className={props.className} ref={ref} icon={DependencySvg} />});
12
+
13
+ export default Dependency;
@@ -0,0 +1,13 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import {forwardRef} from 'react';
4
+ import ManyPeopleSvg from '../ast/ManyPeople';
5
+ import { Icon } from '../Icon';
6
+ import { IconBaseProps } from '../types';
7
+
8
+ const ManyPeople = forwardRef<SVGSVGElement, IconBaseProps>(function ManyPeople(
9
+ props: IconBaseProps,
10
+ ref: React.Ref<SVGSVGElement>
11
+ ) {return <Icon {...props} className={props.className} ref={ref} icon={ManyPeopleSvg} />});
12
+
13
+ export default ManyPeople;
@@ -0,0 +1,13 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import {forwardRef} from 'react';
4
+ import ViewAiSvg from '../ast/ViewAi';
5
+ import { Icon } from '../Icon';
6
+ import { IconBaseProps } from '../types';
7
+
8
+ const ViewAi = forwardRef<SVGSVGElement, IconBaseProps>(function ViewAi(
9
+ props: IconBaseProps,
10
+ ref: React.Ref<SVGSVGElement>
11
+ ) {return <Icon {...props} className={props.className} ref={ref} icon={ViewAiSvg} />});
12
+
13
+ export default ViewAi;
@@ -64,6 +64,7 @@ export { default as ClockAlarm } from './ClockAlarm';
64
64
  export { default as ClockForward } from './ClockForward';
65
65
  export { default as Clock } from './Clock';
66
66
  export { default as Close } from './Close';
67
+ export { default as CollapseAll } from './CollapseAll';
67
68
  export { default as ColorCodingFilled } from './ColorCodingFilled';
68
69
  export { default as ColorCoding } from './ColorCoding';
69
70
  export { default as Columns2 } from './Columns2';
@@ -72,10 +73,12 @@ export { default as Columns } from './Columns';
72
73
  export { default as CommentBubble } from './CommentBubble';
73
74
  export { default as Copy } from './Copy';
74
75
  export { default as Create } from './Create';
76
+ export { default as DatabaseOff } from './DatabaseOff';
75
77
  export { default as DatabaseStroke } from './DatabaseStroke';
76
78
  export { default as Database } from './Database';
77
79
  export { default as Delete } from './Delete';
78
80
  export { default as Demo } from './Demo';
81
+ export { default as Dependency } from './Dependency';
79
82
  export { default as DoubleArrowLeft } from './DoubleArrowLeft';
80
83
  export { default as DoubleArrowRight } from './DoubleArrowRight';
81
84
  export { default as DragBlockHandleSingle } from './DragBlockHandleSingle';
@@ -155,6 +158,7 @@ export { default as Loom } from './Loom';
155
158
  export { default as LoupeZoomIn } from './LoupeZoomIn';
156
159
  export { default as LoupeZoomOut } from './LoupeZoomOut';
157
160
  export { default as LoupeZoom } from './LoupeZoom';
161
+ export { default as ManyPeople } from './ManyPeople';
158
162
  export { default as MapMode } from './MapMode';
159
163
  export { default as MenuCollapser } from './MenuCollapser';
160
164
  export { default as MessagePlusSquare } from './MessagePlusSquare';
@@ -319,6 +323,7 @@ export { default as Upgrade } from './Upgrade';
319
323
  export { default as UsbFlashDrive } from './UsbFlashDrive';
320
324
  export { default as UserGroup } from './UserGroup';
321
325
  export { default as UserRole } from './UserRole';
326
+ export { default as ViewAi } from './ViewAi';
322
327
  export { default as ViewBoard } from './ViewBoard';
323
328
  export { default as ViewCalendar } from './ViewCalendar';
324
329
  export { default as ViewCanvas } from './ViewCanvas';
@@ -56,6 +56,9 @@ export function GroupHeading<
56
56
  if (props.data.separator) {
57
57
  return <GroupDivider />;
58
58
  }
59
+ if (props.data.label === undefined) {
60
+ return null;
61
+ }
59
62
  const isPureText = isPureTextChildren(children);
60
63
  return (
61
64
  <components.GroupHeading {...props} className={groupHeadingClass}>
@@ -169,7 +169,7 @@ type Props<Option, IsMulti extends boolean, Group extends GroupBase<Option>> = {
169
169
  renderValue?: () => ReactNode;
170
170
  title?: string;
171
171
  maxMenuHeight?: number;
172
- hideOnChange?: boolean;
172
+ hideOnChange?: boolean | ((newValue: OnChangeValue<Option, IsMulti>, actionMeta: ActionMeta<Option>) => boolean);
173
173
  renderInPortal?: boolean;
174
174
  popupStyles?: string;
175
175
  selectStyles?: StylesConfig<Option, IsMulti, Group>;
@@ -183,6 +183,7 @@ type Props<Option, IsMulti extends boolean, Group extends GroupBase<Option>> = {
183
183
  onMenuClose?: () => void | boolean;
184
184
  getPopupContainer?: () => HTMLElement;
185
185
  onSelectKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
186
+ otherSelectProps?: Record<string, unknown>;
186
187
  };
187
188
 
188
189
  function SelectInPopoverInner<Option, IsMulti extends boolean, Group extends GroupBase<Option>>(
@@ -219,6 +220,7 @@ function SelectInPopoverInner<Option, IsMulti extends boolean, Group extends Gro
219
220
  onMenuClose,
220
221
  getPopupContainer,
221
222
  onSelectKeyDown,
223
+ otherSelectProps,
222
224
  } = props;
223
225
  const [triggerElement, setTriggerElement] = useState<HTMLDivElement | null>(null);
224
226
  const [visible, setVisible] = useControllableState({
@@ -280,6 +282,10 @@ function SelectInPopoverInner<Option, IsMulti extends boolean, Group extends Gro
280
282
  }, [visible]);
281
283
 
282
284
  const onShow = useCallback(() => {
285
+ if (disabled) {
286
+ return;
287
+ }
288
+
283
289
  if (blurTimeoutRef.current) {
284
290
  clearTimeout(blurTimeoutRef.current);
285
291
  }
@@ -287,7 +293,7 @@ function SelectInPopoverInner<Option, IsMulti extends boolean, Group extends Gro
287
293
  if (onMenuOpen) {
288
294
  onMenuOpen();
289
295
  }
290
- }, [onMenuOpen, setVisible]);
296
+ }, [disabled, onMenuOpen, setVisible]);
291
297
 
292
298
  const styles = useMemo(() => {
293
299
  return combineStyles<Option, IsMulti, Group>([selectInPopupStyles, selectStyles]);
@@ -385,7 +391,11 @@ function SelectInPopoverInner<Option, IsMulti extends boolean, Group extends Gro
385
391
  closeMenuOnScroll={false}
386
392
  closeMenuOnSelect={false}
387
393
  onChange={(newValue, actionMeta) => {
388
- if (hideOnChange) {
394
+ if (typeof hideOnChange === "function") {
395
+ if (hideOnChange(newValue, actionMeta)) {
396
+ onHide();
397
+ }
398
+ } else if (hideOnChange) {
389
399
  onHide();
390
400
  }
391
401
  onChange(newValue, actionMeta);
@@ -405,6 +415,7 @@ function SelectInPopoverInner<Option, IsMulti extends boolean, Group extends Gro
405
415
  isClearable={!isCollectionMode && isClearable}
406
416
  formatGroupLabel={formatGroupLabel}
407
417
  formatOptionLabel={formatOptionLabel}
418
+ {...otherSelectProps}
408
419
  components={{
409
420
  DropdownIndicator: null,
410
421
  IndicatorSeparator: null,
@@ -3,7 +3,7 @@ import {css, cx} from "@linaria/core";
3
3
  import * as ToastPrimitives from "@radix-ui/react-toast";
4
4
  import {ElementRef, forwardRef} from "react";
5
5
  import {IconButton} from "../button/icon-button";
6
- import {border, space, textStyles, themeVars} from "../design-system";
6
+ import {border, space, textStyles, themeVars, transition} from "../design-system";
7
7
  import CloseIcon from "../icons/react/Close";
8
8
 
9
9
  const viewportCss = css`
@@ -21,6 +21,8 @@ const viewportCss = css`
21
21
  padding: 0;
22
22
  list-style: none;
23
23
 
24
+ transition: bottom ${transition}; // bottom may change dynamically
25
+
24
26
  &:not(:empty) {
25
27
  padding: ${space.s24}px; // increased mouse hover area to pause timers of toast
26
28
  }
@@ -13,6 +13,11 @@ type QueuedToast = AddToastProps & {
13
13
  id: string;
14
14
  };
15
15
 
16
+ type BottomOffsetRequest = {
17
+ id: string;
18
+ bottomOffset: number;
19
+ };
20
+
16
21
  type ToastQueueOpts = {
17
22
  maxActiveToasts?: number;
18
23
  onToastAdd?: (params: AddToastProps) => void;
@@ -27,6 +32,7 @@ export const makeToastQueue = ({maxActiveToasts = 1, onToastAdd, transformToast}
27
32
  const pubSub = makePubSub();
28
33
  let queue: QueuedToast[] = [];
29
34
  let activeToasts: QueuedToast[] = [];
35
+ let bottomOffsets: BottomOffsetRequest[] = [];
30
36
 
31
37
  let count = 0;
32
38
 
@@ -87,6 +93,22 @@ export const makeToastQueue = ({maxActiveToasts = 1, onToastAdd, transformToast}
87
93
  getActiveToasts() {
88
94
  return activeToasts;
89
95
  },
96
+ addButtomOffset: (bottomOffset: number) => {
97
+ const id = `${Math.random()}`;
98
+ bottomOffsets.push({id, bottomOffset});
99
+ pubSub.publish();
100
+
101
+ return () => {
102
+ bottomOffsets = bottomOffsets.filter((v) => v.id !== id);
103
+ pubSub.publish();
104
+ };
105
+ },
106
+ getBottomOffset() {
107
+ if (bottomOffsets.length === 0) {
108
+ return 0;
109
+ }
110
+ return Math.max(...bottomOffsets.map((v) => v.bottomOffset));
111
+ },
90
112
  subscribe: pubSub.subscribe,
91
113
  unsubscribe: pubSub.unsubscribe,
92
114
 
@@ -24,6 +24,7 @@ export const Toaster: React.FC = () => {
24
24
  const toastQueue = useToast();
25
25
 
26
26
  const toasts = useSyncExternalStore(toastQueue.subscribe, toastQueue.getActiveToasts);
27
+ const bottomOffset = useSyncExternalStore(toastQueue.subscribe, toastQueue.getBottomOffset);
27
28
 
28
29
  return (
29
30
  <ToastThemeProvider>
@@ -45,7 +46,7 @@ export const Toaster: React.FC = () => {
45
46
  />
46
47
  ))}
47
48
 
48
- <ToastViewport id={viewportId} />
49
+ <ToastViewport id={viewportId} style={{bottom: bottomOffset}} />
49
50
  </ToastThemeProvider>
50
51
  );
51
52
  };
package/src/tooltip.tsx CHANGED
@@ -114,6 +114,11 @@ export type TooltipProps = Omit<TooltipPrimitive.TooltipTriggerProps, "title"> &
114
114
  visible?: boolean;
115
115
  onVisibleChange?: (visible: boolean) => void;
116
116
  disabled?: boolean;
117
+ /**
118
+ * When `false`, allows to hover the content without closing the tooltip.
119
+ * @defaultValue trues
120
+ */
121
+ disableHoverableContent?: boolean;
117
122
  /** should keep tooltip visible after click */
118
123
  keepOnClick?: boolean;
119
124
  };
@@ -152,6 +157,7 @@ export const Tooltip = forwardRef<HTMLButtonElement, TooltipProps>(
152
157
  setContentElement,
153
158
  container,
154
159
  tooltipContentStyle,
160
+ disableHoverableContent,
155
161
  ...triggerProps
156
162
  },
157
163
  ref
@@ -174,6 +180,7 @@ export const Tooltip = forwardRef<HTMLButtonElement, TooltipProps>(
174
180
  delayDuration={instant ? 0 : tooltipDelay.enter}
175
181
  open={disabled ? false : Boolean(content) && visible}
176
182
  onOpenChange={onVisibleChange}
183
+ disableHoverableContent={disableHoverableContent}
177
184
  >
178
185
  <TooltipPrimitive.Trigger ref={ref} {...triggerProps} {...keepOnClickProps} asChild>
179
186
  {children}