@fibery/ui-kit 1.29.1 → 1.29.2

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.
Files changed (33) hide show
  1. package/package.json +6 -6
  2. package/src/actions-menu/actions-menu-confirmation.tsx +70 -0
  3. package/src/actions-menu/actions-menu-sub-command-menu.tsx +97 -142
  4. package/src/actions-menu/actions-menu-sub-menu.tsx +3 -1
  5. package/src/actions-menu/actions-menu.tsx +6 -1
  6. package/src/actions-menu/context-actions-menu.tsx +5 -1
  7. package/src/actions-menu/contexts/actions-menu-context.tsx +6 -2
  8. package/src/design-system.ts +13 -10
  9. package/src/dropdown-menu/index.tsx +7 -2
  10. package/src/icons/ast/FieldUnit.ts +8 -0
  11. package/src/icons/ast/IntegrationsIntegrationDiscourseColor.ts +8 -0
  12. package/src/icons/ast/IntegrationsIntegrationIntercomColor.ts +8 -0
  13. package/src/icons/ast/IntegrationsIntegrationSlackColor.ts +8 -0
  14. package/src/icons/ast/IntegrationsIntegrationZendeskColor.ts +8 -0
  15. package/src/icons/ast/MoveBottom.ts +8 -0
  16. package/src/icons/ast/MoveLeft.ts +8 -0
  17. package/src/icons/ast/MoveRight.ts +8 -0
  18. package/src/icons/ast/MoveTop.ts +8 -0
  19. package/src/icons/ast/Pin.ts +8 -0
  20. package/src/icons/ast/index.tsx +10 -0
  21. package/src/icons/react/FieldUnit.tsx +12 -0
  22. package/src/icons/react/IntegrationsIntegrationDiscourseColor.tsx +12 -0
  23. package/src/icons/react/IntegrationsIntegrationIntercomColor.tsx +12 -0
  24. package/src/icons/react/IntegrationsIntegrationSlackColor.tsx +12 -0
  25. package/src/icons/react/IntegrationsIntegrationZendeskColor.tsx +12 -0
  26. package/src/icons/react/MoveBottom.tsx +12 -0
  27. package/src/icons/react/MoveLeft.tsx +12 -0
  28. package/src/icons/react/MoveRight.tsx +12 -0
  29. package/src/icons/react/MoveTop.tsx +12 -0
  30. package/src/icons/react/Pin.tsx +12 -0
  31. package/src/icons/react/index.tsx +10 -0
  32. package/src/item.tsx +1 -1
  33. package/src/select/select-in-popover.tsx +2 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fibery/ui-kit",
3
- "version": "1.29.1",
3
+ "version": "1.29.2",
4
4
  "private": false,
5
5
  "files": [
6
6
  "src/antd/styles.ts",
@@ -54,7 +54,7 @@
54
54
  "chroma-js": "2.1.2",
55
55
  "chrono-node": "^2.7.5",
56
56
  "classnames": "2.3.1",
57
- "cmdk": "0.2.0",
57
+ "cmdk": "1.0.0",
58
58
  "color-hash": "1.0.3",
59
59
  "d3-shape": "1.3.7",
60
60
  "date-fns": "2.29.2",
@@ -76,8 +76,8 @@
76
76
  "screenfull": "6.0.1",
77
77
  "ua-parser-js": "0.7.24",
78
78
  "@fibery/emoji-data": "2.6.0",
79
- "@fibery/react": "1.4.0",
80
- "@fibery/helpers": "1.3.0"
79
+ "@fibery/helpers": "1.3.0",
80
+ "@fibery/react": "1.4.0"
81
81
  },
82
82
  "peerDependencies": {
83
83
  "react": "^18.2.0",
@@ -110,8 +110,8 @@
110
110
  "svgo": "2.8.0",
111
111
  "typescript": "5.4.3",
112
112
  "unist-util-reduce": "0.2.2",
113
- "@fibery/eslint-config": "8.6.0",
114
- "@fibery/babel-preset": "7.4.0"
113
+ "@fibery/babel-preset": "7.4.0",
114
+ "@fibery/eslint-config": "8.6.0"
115
115
  },
116
116
  "jest": {
117
117
  "testEnvironment": "jsdom",
@@ -0,0 +1,70 @@
1
+ import {css} from "@linaria/core";
2
+ import {AntModal} from "../antd/ant-modal";
3
+ import {border, space, themeVars} from "../design-system";
4
+ import {ActionsPanel} from "../actions-panel";
5
+ import {Button} from "../button";
6
+ import {useActionsMenuContext} from "./contexts/actions-menu-context";
7
+
8
+ const modalClass = css`
9
+ & .ant-modal-content {
10
+ box-shadow: ${themeVars.shadowModal};
11
+ margin-left: ${space.s6}px;
12
+ margin-right: ${space.s6}px;
13
+ background-color: ${themeVars.modalContentBg};
14
+ border-radius: ${border.radius6}px;
15
+ }
16
+ `;
17
+
18
+ export type ActionsMenuConfirmationProps = {
19
+ message: string;
20
+ onCancel?: () => void;
21
+ onConfirm: () => void;
22
+ };
23
+
24
+ export const ActionsMenuConfirmation: React.FC<ActionsMenuConfirmationProps> = ({message, onCancel, onConfirm}) => {
25
+ const {showConfirmation} = useActionsMenuContext();
26
+
27
+ // TODO: use radix dialog
28
+ return (
29
+ <AntModal
30
+ zIndex={1001} // ant vs radix -- round 1
31
+ open={true}
32
+ closable={false}
33
+ footer={null}
34
+ maskStyle={{backgroundColor: themeVars.modalBg}}
35
+ className={modalClass}
36
+ maskClosable
37
+ onCancel={() => showConfirmation(null)}
38
+ >
39
+ {message}
40
+
41
+ <div
42
+ className={css`
43
+ margin-top: ${space.s24}px;
44
+ display: flex;
45
+ gap: ${space.s6}px;
46
+ `}
47
+ >
48
+ <ActionsPanel inline>
49
+ <Button
50
+ primary
51
+ onClick={() => {
52
+ onConfirm();
53
+ showConfirmation(null);
54
+ }}
55
+ >
56
+ Proceed
57
+ </Button>
58
+ <Button
59
+ onClick={() => {
60
+ showConfirmation(null);
61
+ onCancel?.();
62
+ }}
63
+ >
64
+ Cancel
65
+ </Button>
66
+ </ActionsPanel>
67
+ </div>
68
+ </AntModal>
69
+ );
70
+ };
@@ -1,59 +1,41 @@
1
+ import {stopPropagation} from "@fibery/react/src/stop-propagation";
1
2
  import {css, cx} from "@linaria/core";
2
- import {CommandInput, CommandItem, CommandList, CommandRoot, CommandEmpty} from "cmdk";
3
- import {border, layout, space, textStyles, themeVars} from "../design-system";
4
- import Search from "../icons/react/Search";
5
- import {useActionsMenuContext} from "./contexts/actions-menu-context";
3
+ import React, {RefObject, useMemo, useRef, useState} from "react";
4
+ import {
5
+ CommandMenuEmpty,
6
+ CommandMenuGroup,
7
+ CommandMenuInput,
8
+ CommandMenuItem,
9
+ CommandMenuList,
10
+ CommandMenuRoot,
11
+ } from "../command-menu";
6
12
  import {ActionsMenuSubMenu} from "./actions-menu-sub-menu";
7
- import {styled} from "@linaria/react";
8
- import {useRef, useState} from "react";
9
- import {stopPropagation} from "@fibery/react/src/stop-propagation";
10
- /**
11
- *
12
- * Probably commands menu deserves to be extracted to a separate primitive component not connected to ActionsMenu
13
- * but for now we don't have other use cases for it so no idea how a primitive should look like
14
- *
15
- * Feel free to extract it to a separate one
16
- *
17
- */
18
-
19
- const inputContainerCss = css`
20
- display: flex;
21
- padding: ${space.s8}px ${space.s12}px;
22
- align-items: center;
23
- border-bottom: 1px solid ${themeVars.separatorColor};
24
-
25
- & input {
26
- min-width: 120px;
27
- width: 100%;
28
- color: ${themeVars.textColor};
29
- background-color: ${themeVars.transparent};
30
- margin-left: ${space.s8}px;
31
- font-size: 13px;
32
- border: none;
33
- outline: none;
34
- resize: none;
35
- }
13
+ import {useActionsMenuContext} from "./contexts/actions-menu-context";
14
+ import {createContext} from "@fibery/react/src/create-context";
15
+ import {composeEventHandlers} from "@fibery/react/src/compose-event-handlers";
36
16
 
37
- & input::placeholder {
38
- color: ${themeVars.accentTextColor};
39
- }
40
- `;
17
+ const [ActionsMenuSubCommandMenuProvider, useActionsMenuSubCommandMenuCtx] = createContext<{
18
+ subMenuOpenRef: RefObject<boolean>;
19
+ subMenuTriggerRef: RefObject<HTMLDivElement>;
20
+ }>("ActionsMenuSubCommandMenu");
41
21
 
42
22
  type ActionsMenuSubCommandMenuProps = React.PropsWithChildren<{
43
23
  trigger?: React.ReactNode;
44
24
  disabled?: boolean;
45
- filter?: React.ComponentPropsWithoutRef<typeof CommandRoot>["filter"];
46
25
  }>;
47
- export const ActionsMenuSubCommandMenu: React.FC<ActionsMenuSubCommandMenuProps> = ({
48
- disabled,
49
- trigger,
50
- filter,
51
- children,
52
- }) => {
26
+ export const ActionsMenuSubCommandMenu: React.FC<ActionsMenuSubCommandMenuProps> = ({disabled, trigger, children}) => {
53
27
  const [open, onOpenChange] = useState(false);
54
28
  const triggerRef = useRef(null);
55
29
  const openRef = useRef(false);
56
30
 
31
+ const ctx = useMemo(
32
+ () => ({
33
+ subMenuOpenRef: openRef,
34
+ subMenuTriggerRef: triggerRef,
35
+ }),
36
+ []
37
+ );
38
+
57
39
  return (
58
40
  <ActionsMenuSubMenu
59
41
  disabled={disabled}
@@ -64,126 +46,99 @@ export const ActionsMenuSubCommandMenu: React.FC<ActionsMenuSubCommandMenuProps>
64
46
  }}
65
47
  trigger={trigger}
66
48
  triggerRef={triggerRef}
49
+ contentClassName={css`
50
+ &:is(&) {
51
+ overflow: hidden;
52
+ display: flex;
53
+ flex-direction: column;
54
+ max-height: 400px; // we use fixed height instead of --radix-dropdown-menu-content-available-height because it doesn't restore well after filtering if submenu was opened near the bottom of viewport. https://the.fibery.io/SoftDev/bug/It's-impossible-to-place-cursor-in-search-input-in-Existing-views-and-Convert-to-popup-10357/comment=14877
55
+ }
56
+ `}
67
57
  >
68
- <CommandRoot
69
- filter={filter}
70
- onClick={stopPropagation}
71
- onBlur={(e) => {
72
- /**
73
- * Submenu Trigger tries to steal the focus from input on every onPointerMove
74
- * to avoid this we lock focus on input and do not let it move to back to triger while menu is still open
75
- *
76
- * We use openRef here because react state will be updated only on next render
77
- */
78
- if (openRef.current && e.target.hasAttribute("cmdk-input") && e.relatedTarget === triggerRef.current) {
79
- e.target.focus();
80
- }
81
- }}
82
- >
83
- {children}
84
- </CommandRoot>
58
+ <ActionsMenuSubCommandMenuProvider value={ctx}>{children}</ActionsMenuSubCommandMenuProvider>
85
59
  </ActionsMenuSubMenu>
86
60
  );
87
61
  };
88
62
 
89
- type ActionsMenuSubCommandMenuInputProps = {
90
- placeholder?: string;
91
- autoFocus?: boolean;
63
+ export const ActionsMenuSubCommandMenuRoot: React.FC<React.ComponentPropsWithoutRef<typeof CommandMenuRoot>> = ({
64
+ className,
65
+ onClick,
66
+ onBlur,
67
+ ...props
68
+ }) => {
69
+ const {subMenuOpenRef, subMenuTriggerRef} = useActionsMenuSubCommandMenuCtx();
70
+
71
+ return (
72
+ <CommandMenuRoot
73
+ className={cx(
74
+ css`
75
+ &:is(&) {
76
+ width: 250px;
77
+ }
78
+ `,
79
+ className
80
+ )}
81
+ onClick={composeEventHandlers(onClick, stopPropagation)}
82
+ onBlur={composeEventHandlers(onBlur, (e) => {
83
+ /**
84
+ * Submenu Trigger tries to steal the focus from input on every onPointerMove
85
+ * to avoid this we lock focus on input and do not let it move to back to triger while menu is still open
86
+ *
87
+ * setTimeout is needed for firefox https://the.fibery.io/SoftDev/bug/Automatically-place-the-cursor-in-the-search-input-in-the-list-of-spaces-in-'Move-to'-option-10524
88
+ *
89
+ * We use subMenuOpenRef here because react state will be updated only on next render. Alternatively we can try to use flushSync
90
+ */
91
+ if (
92
+ subMenuOpenRef.current &&
93
+ e.target.hasAttribute("cmdk-input") &&
94
+ e.relatedTarget === subMenuTriggerRef.current
95
+ ) {
96
+ setTimeout(() => {
97
+ e.target.focus();
98
+ }, 0);
99
+ }
100
+ })}
101
+ {...props}
102
+ />
103
+ );
92
104
  };
105
+
106
+ type ActionsMenuSubCommandMenuInputProps = React.ComponentPropsWithoutRef<typeof CommandMenuInput>;
93
107
  export const ActionsMenuSubCommandMenuInput: React.FC<ActionsMenuSubCommandMenuInputProps> = ({
94
- placeholder,
95
108
  autoFocus = true,
109
+ onKeyDown,
110
+ ...otherProps
96
111
  }) => {
97
112
  return (
98
- <div className={inputContainerCss}>
99
- <Search iconSize={16} aria-hidden />
100
- <CommandInput
101
- onKeyDown={(e) => {
102
- // prevent submenu from closing if input is not empty
103
- if ((e.target as HTMLInputElement).value.length > 0) {
104
- e.stopPropagation();
105
- }
106
- }}
107
- placeholder={placeholder}
108
- autoFocus={autoFocus}
109
- />
110
- </div>
113
+ <CommandMenuInput
114
+ onKeyDown={(e) => {
115
+ // prevent submenu from closing if input is not empty
116
+ if ((e.target as HTMLInputElement).value.length > 0 && e.key === "ArrowLeft") {
117
+ e.stopPropagation();
118
+ }
119
+ onKeyDown?.(e);
120
+ }}
121
+ autoFocus={autoFocus}
122
+ {...otherProps}
123
+ />
111
124
  );
112
125
  };
113
126
 
114
- export const ActionsMenuSubCommandMenuList = styled(CommandList)`
115
- overflow-y: scroll;
116
- width: 250px;
117
- height: var(--cmdk-list-height);
118
- max-height: 600px;
119
- transition: height 100ms ease;
120
- margin-top: ${space.s4}px;
121
- `;
122
-
123
- const commandItemCss = css`
124
- display: flex;
125
- align-items: center;
126
- gap: ${space.s6}px;
127
- padding: 0 ${space.s12}px;
128
- cursor: pointer;
129
- min-height: ${layout.menuItemHeight}px;
130
- margin: 0 ${space.s4}px;
131
-
132
- &[data-selected] {
133
- margin: 0 4px;
134
- background-color: ${themeVars.colorBgActionsMenuItemHover};
135
- border-radius: ${border.radius6}px;
136
- }
137
- `;
138
- const commandItemTitleCss = css`
139
- white-space: nowrap;
140
- text-overflow: ellipsis;
141
- overflow: hidden;
142
- `;
127
+ export const ActionsMenuSubCommandMenuList = CommandMenuList;
143
128
 
144
- type ActionsMenuSubCommandMenuItemProps = React.ComponentPropsWithoutRef<typeof CommandItem> & {
145
- icon?: React.ReactNode;
146
- };
147
-
148
- export const ActionsMenuSubCommandMenuItem: React.FC<ActionsMenuSubCommandMenuItemProps> = ({
129
+ export const ActionsMenuSubCommandMenuItem: React.FC<React.ComponentPropsWithoutRef<typeof CommandMenuItem>> = ({
149
130
  onSelect,
150
- icon,
151
- children,
152
- className,
153
131
  ...props
154
132
  }) => {
155
133
  const {close} = useActionsMenuContext();
156
- const [showTitle, setShowTitle] = useState(false);
157
-
158
134
  const onSelectItem = (value: string) => {
159
135
  onSelect?.(value);
160
136
  close();
161
137
  };
162
138
 
163
- return (
164
- <CommandItem className={cx(commandItemCss, className)} onSelect={onSelectItem} {...props}>
165
- {icon}
166
- <span
167
- title={showTitle ? (children as string) : ""}
168
- onMouseEnter={(e) => {
169
- const target = e.target as HTMLElement;
170
- if (typeof children === "string" && target.offsetWidth < target.scrollWidth) {
171
- setShowTitle(true);
172
- }
173
- }}
174
- className={commandItemTitleCss}
175
- >
176
- {children}
177
- </span>
178
- </CommandItem>
179
- );
139
+ return <CommandMenuItem onSelect={onSelectItem} {...props}></CommandMenuItem>;
180
140
  };
181
141
 
182
- export const ActionsMenuSubCommandMenuEmpty = styled(CommandEmpty)`
183
- ${textStyles.small}
184
- display: flex;
185
- align-items: center;
186
- padding: 0 ${space.s12}px;
187
- min-height: ${layout.itemHeight}px;
188
- color: ${themeVars.accentTextColor};
189
- `;
142
+ export const ActionsMenuSubCommandMenuEmpty = CommandMenuEmpty;
143
+
144
+ export const ActionsMenuSubCommandMenuGroup = CommandMenuGroup;
@@ -22,6 +22,7 @@ type Props = React.PropsWithChildren<{
22
22
  open?: boolean;
23
23
  onOpenChange?: (v: boolean) => void;
24
24
  disabled?: boolean;
25
+ contentClassName?: string;
25
26
  }>;
26
27
 
27
28
  export const ActionsMenuSubMenu: React.FC<Props> = ({
@@ -31,6 +32,7 @@ export const ActionsMenuSubMenu: React.FC<Props> = ({
31
32
  triggerRef,
32
33
  children,
33
34
  disabled = false,
35
+ contentClassName,
34
36
  }) => {
35
37
  const {MenuPrimitive} = useActionsMenuContext();
36
38
 
@@ -51,7 +53,7 @@ export const ActionsMenuSubMenu: React.FC<Props> = ({
51
53
  />
52
54
  </div>
53
55
  </MenuPrimitive.SubTrigger>
54
- <MenuPrimitive.SubContent>{children}</MenuPrimitive.SubContent>
56
+ <MenuPrimitive.SubContent className={contentClassName}>{children}</MenuPrimitive.SubContent>
55
57
  </MenuPrimitive.Sub>
56
58
  );
57
59
  };
@@ -5,6 +5,8 @@ import {ActionsMenuContextProvider} from "./contexts/actions-menu-context";
5
5
  import {ActionsMenuDangerousRowsProvider} from "./contexts/actions-menu-dangerous-rows";
6
6
  import {ActionsMenuProps} from "./actions-menu-props";
7
7
  import {preventDefault} from "@fibery/react/src/prevent-default";
8
+ import {useState} from "react";
9
+ import {ActionsMenuConfirmation, ActionsMenuConfirmationProps} from "./actions-menu-confirmation";
8
10
 
9
11
  export const preventDefaultAndStopPropagation = (event: React.MouseEvent) => {
10
12
  event.preventDefault();
@@ -35,9 +37,10 @@ export const ActionsMenu = ({
35
37
  sticky,
36
38
  }: ActionsMenuProps): JSX.Element => {
37
39
  const [isOpen = false, setOpen] = useControllableState({value: open, onChange: onOpenChange});
40
+ const [confirmation, setConfirmation] = useState<ActionsMenuConfirmationProps | null>(null);
38
41
 
39
42
  return (
40
- <ActionsMenuContextProvider setOpen={setOpen} MenuPrimitive={DropdownMenu}>
43
+ <ActionsMenuContextProvider setOpen={setOpen} showConfirmation={setConfirmation} MenuPrimitive={DropdownMenu}>
41
44
  <DropdownMenu.Root open={isOpen} onOpenChange={setOpen} modal={modal || false}>
42
45
  <DropdownMenu.Trigger
43
46
  // backward compatibility for dropdown styles
@@ -63,6 +66,8 @@ export const ActionsMenu = ({
63
66
  <ActionsMenuDangerousRowsProvider open={isOpen}>{children}</ActionsMenuDangerousRowsProvider>
64
67
  </DropdownMenu.Content>
65
68
  </DropdownMenu.Root>
69
+
70
+ {confirmation ? <ActionsMenuConfirmation {...confirmation} /> : null}
66
71
  </ActionsMenuContextProvider>
67
72
  );
68
73
  };
@@ -5,6 +5,8 @@ import * as ContextMenu from "../context-menu";
5
5
  import {ActionsMenuDangerousRowsProvider} from "./contexts/actions-menu-dangerous-rows";
6
6
  import {ActionsMenuProps} from "./actions-menu-props";
7
7
  import {preventDefault} from "@fibery/react/src/prevent-default";
8
+ import {ActionsMenuConfirmation, ActionsMenuConfirmationProps} from "./actions-menu-confirmation";
9
+ import {useState} from "react";
8
10
 
9
11
  export const ContextActionsMenu = ({
10
12
  open,
@@ -15,9 +17,10 @@ export const ContextActionsMenu = ({
15
17
  autoFocusOnClose = true,
16
18
  }: ActionsMenuProps): JSX.Element => {
17
19
  const [isOpen = false, setOpen] = useControllableState({value: open, onChange: onOpenChange});
20
+ const [confirmation, setConfirmation] = useState<ActionsMenuConfirmationProps | null>(null);
18
21
 
19
22
  return (
20
- <ActionsMenuContextProvider setOpen={setOpen} MenuPrimitive={ContextMenu}>
23
+ <ActionsMenuContextProvider setOpen={setOpen} showConfirmation={setConfirmation} MenuPrimitive={ContextMenu}>
21
24
  <ContextMenu.Root onOpenChange={onOpenChange}>
22
25
  <ContextMenu.Trigger disabled={disabled} asChild>
23
26
  {trigger}
@@ -28,6 +31,7 @@ export const ContextActionsMenu = ({
28
31
  </ContextMenu.Content>
29
32
  </ContextMenu.Portal>
30
33
  </ContextMenu.Root>
34
+ {confirmation ? <ActionsMenuConfirmation {...confirmation} /> : null}
31
35
  </ActionsMenuContextProvider>
32
36
  );
33
37
  };
@@ -1,5 +1,6 @@
1
1
  import {createContext} from "@fibery/react/src/create-context";
2
2
  import {useMemo} from "react";
3
+ import {ActionsMenuConfirmationProps} from "../actions-menu-confirmation";
3
4
 
4
5
  type MenuPrimitive = {
5
6
  Item: React.ElementType;
@@ -13,6 +14,7 @@ type MenuPrimitive = {
13
14
 
14
15
  type ActionsMenuContext = {
15
16
  close: () => void;
17
+ showConfirmation: (args: ActionsMenuConfirmationProps | null) => void;
16
18
  MenuPrimitive: MenuPrimitive;
17
19
  };
18
20
 
@@ -20,16 +22,18 @@ const [Provider, useContext] = createContext<ActionsMenuContext>("ActionsMenuCon
20
22
 
21
23
  type Props = React.PropsWithChildren<{
22
24
  setOpen: (value: boolean) => void;
25
+ showConfirmation: (args: ActionsMenuConfirmationProps | null) => void;
23
26
  MenuPrimitive: MenuPrimitive;
24
27
  }>;
25
28
 
26
- export const ActionsMenuContextProvider: React.FC<Props> = ({setOpen, MenuPrimitive, children}) => {
29
+ export const ActionsMenuContextProvider: React.FC<Props> = ({setOpen, showConfirmation, MenuPrimitive, children}) => {
27
30
  const context = useMemo<ActionsMenuContext>(
28
31
  () => ({
29
32
  close: () => setOpen(false),
30
33
  MenuPrimitive,
34
+ showConfirmation,
31
35
  }),
32
- [setOpen, MenuPrimitive]
36
+ [MenuPrimitive, showConfirmation, setOpen]
33
37
  );
34
38
 
35
39
  return <Provider value={context}>{children}</Provider>;
@@ -105,7 +105,7 @@ const brandColors = {
105
105
  } as const;
106
106
 
107
107
  export const getDarkenColor = _.memoize((color: string): string => {
108
- return makeChromaColor(color).darken(0.6).css();
108
+ return makeChromaColor(color).darken(0.5).desaturate(0.8).css();
109
109
  });
110
110
 
111
111
  export const themeColors = {
@@ -114,6 +114,7 @@ export const themeColors = {
114
114
  stateColors: [stateColors, stateColors],
115
115
  colorAI: ["hsla(271, 57%, 61%, 1)", "hsla(272, 43%, 50%, 1)"],
116
116
  colorBgAI: ["hsla(271, 57%, 61%, 0.1)", "hsla(272, 43%, 50%, 0.1)"],
117
+ colorSubtleBgAI: ["hsla(271, 57%, 61%, 0.05)", "hsla(272, 43%, 50%, 0.1)"],
117
118
  actionMenuShadow: [
118
119
  `0 0 0 1px ${getOpacities(slate.slate10).opacity10}, 0 12px 16px -4px ${getOpacities(slate.slate10).opacity30}`,
119
120
  `0 0 0 1px ${getOpacities(slateDark.slate1).opacity10}, 0 12px 16px -4px ${
@@ -142,19 +143,20 @@ export const themeColors = {
142
143
  `blur(24px) saturate(190%) contrast(50%) brightness(130%)`,
143
144
  `blur(24px) saturate(180%) contrast(60%) brightness(70%)`,
144
145
  ],
145
- primaryBlue: [indigo.indigo9, indigoDark.indigo10],
146
+ primaryBlue: [indigo.indigo9, indigoDark.indigo9],
146
147
  whiteColor: [whiteA.whiteA0, whiteA.whiteA0],
147
148
  blackColor: [blackA.blackA0, blackA.blackA0],
148
- mainBg: [slate.slate2, slateDark.slate1],
149
+ mainBg: [slate.slate3, slateDark.slate1],
149
150
  panelBg: [whiteA.whiteA0, slateDark.slate2],
150
151
  panelContentBg: [slate.slate2, slateDark.slate2],
152
+ colorBgRelationContainer: [slate.slate2, slateDark.slate1],
151
153
  pageBg: [whiteA.whiteA0, slateDark.slate1],
152
154
  pageContentBg: [whiteA.whiteA0, slateDark.slate2],
153
155
  colorBgPopup: [whiteA.whiteA0, slateDark.slate4],
154
156
  colorBgSidebar: [whiteA.whiteA0, slateDark.slate3],
155
- menuBg: [slate.slate2, slateDark.slate2],
157
+ menuBg: [slate.slate3, slateDark.slate1],
156
158
  menuTextColor: [slate.slate12, slate.slate8],
157
- menuItemHoverColor: [slate.slate4, slateDark.slate6],
159
+ menuItemHoverColor: [slate.slate5, slateDark.slate6],
158
160
  menuSelectedTextColor: [slate.slate2, slate.slate2],
159
161
  menuFooterColor: [getOpacities(whiteA.whiteA0).opacity20, getOpacities(slateDark.slate3).opacity40],
160
162
  menuFooterHoverColor: [getOpacities(whiteA.whiteA0).opacity60, slateDark.slate4],
@@ -229,7 +231,7 @@ export const themeColors = {
229
231
  `0 0 0 3px ${getOpacities(red.red11).opacity25}`,
230
232
  `0 0 0 3px ${getOpacities(red.red7).opacity25}`,
231
233
  ],
232
- buttonPrimaryColor: [indigo.indigo10, indigoDark.indigo10],
234
+ buttonPrimaryColor: [indigo.indigo9, indigoDark.indigo9],
233
235
  buttonColor: [slate.slate10, slateDark.slate10],
234
236
  buttonPrimaryTextColor: [slate.slate2, slate.slate6],
235
237
  checkboxColor: [slate.slate10, slateDark.slate10],
@@ -262,7 +264,7 @@ export const themeColors = {
262
264
  iconColor: [slate.slate10, slateDark.slate10],
263
265
  appIconColor: [getOpacities(slate.slate2).opacity90, getOpacities(slate.slate2).opacity70],
264
266
  appIconBgColor: [getOpacities(slate.slate1).opacity90, getOpacities(slate.slate2).opacity50],
265
- mentionBgColor: [slate.slate3, slateDark.slate5],
267
+ mentionBgColor: [getOpacities(slate.slate7).opacity30, getOpacities(slateDark.slate7).opacity40],
266
268
  colorBgSelectMenu: [slate.slate1, slateDark.slate3],
267
269
  shadowSelectMenu: [
268
270
  `0 0 0 1px ${getOpacities(slate.slate10).opacity10}, 0 12px 16px -4px ${getOpacities(slate.slate10).opacity30}`,
@@ -366,14 +368,14 @@ export const themeColors = {
366
368
  opacityMenuItemDragged: [`${opacity.opacity40}`, `${opacity.opacity40}`],
367
369
  colorBgMenuItemSelectedDragged: [indigo.indigo6, indigoDark.indigo6],
368
370
  // Default
369
- colorTextMenuItem: [slate.slate12, slateDark.slate12],
371
+ colorTextMenuItem: [slate.slate12, getOpacities(slateDark.slate12).opacity90],
370
372
  colorBgMenuItem: [transparent, transparent],
371
373
  // :hover
372
- colorBgMenuItemHover: [slate.slate4, slateDark.slate4],
374
+ colorBgMenuItemHover: [slate.slate5, slateDark.slate4],
373
375
  // :focus
374
376
  colorBgMenuItemFocus: [slate.slate6, slateDark.slate6],
375
377
  // Selected
376
- colorBgMenuItemSelected: [indigo.indigo4, indigoDark.indigo4],
378
+ colorBgMenuItemSelected: [indigo.indigo5, indigoDark.indigo4],
377
379
  // :hover
378
380
  colorBgMenuItemSelectedHover: [indigo.indigo6, indigoDark.indigo6],
379
381
  // :focus, :focus:hover
@@ -469,6 +471,7 @@ export const themeColors = {
469
471
  progressBarBg: [getOpacities(indigo.indigo9).opacity25, getOpacities(indigoDark.indigo10).opacity25],
470
472
  searchFiltersBg: [slate.slate1, slateDark.slate2],
471
473
  colorPickerSwatchBorder: [blackA.blackA7, blackA.blackA7],
474
+ colorBorderRichTextMedia: [blackA.blackA7, blackA.blackA7],
472
475
  richTextTableBorder: [blackA.blackA5, whiteA.whiteA7],
473
476
  gridHeaderBgColor: [slate.slate2, slateDark.slate3],
474
477
  gridHeaderHoverBgColor: [slate.slate3, slateDark.slate4],
@@ -134,10 +134,15 @@ export const Content = forwardRef<HTMLDivElement, ContentProps>(function Dropdow
134
134
  export const Sub = DropdownMenuPrimitive.Sub;
135
135
 
136
136
  export const SubContent = forwardRef<HTMLDivElement, DropdownMenuPrimitive.DropdownMenuSubContentProps>(
137
- function DropdownMenuSubContent({className, ...rest}, ref) {
137
+ function DropdownMenuSubContent({className, collisionPadding = space.s12, ...rest}, ref) {
138
138
  return (
139
139
  <DropdownMenuPrimitive.Portal>
140
- <DropdownMenuPrimitive.SubContent ref={ref} className={cx(dropdownMenuContentStyles, className)} {...rest} />
140
+ <DropdownMenuPrimitive.SubContent
141
+ ref={ref}
142
+ className={cx(dropdownMenuContentStyles, className)}
143
+ collisionPadding={collisionPadding}
144
+ {...rest}
145
+ />
141
146
  </DropdownMenuPrimitive.Portal>
142
147
  );
143
148
  }
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const FieldUnit: 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":"M3.825 12.6A2.025 2.025 0 0 1 1.8 10.575v-3.15c0-1.118.907-2.025 2.025-2.025h10.35c1.118 0 2.025.907 2.025 2.025v3.15a2.025 2.025 0 0 1-2.025 2.025H3.825Zm0-1.35a.675.675 0 0 1-.675-.675v-3.15c0-.373.302-.675.675-.675h10.35c.373 0 .675.302.675.675v3.15a.675.675 0 0 1-.675.675H3.825ZM8.55 9c0-.373.302-.675.675-.675h3.15a.675.675 0 1 1 0 1.35h-3.15A.675.675 0 0 1 8.55 9ZM5.925 7.575a1.425 1.425 0 1 0 0 2.85 1.425 1.425 0 0 0 0-2.85Z"},"children":[]}],"metadata":""}]},"name":"field-unit"};
7
+
8
+ export default FieldUnit;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const IntegrationsIntegrationDiscourseColor: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"width":20,"height":20,"fill":"none"},"children":[{"type":"element","tagName":"path","properties":{"d":"M10.067 2.223c-4.261 0-7.844 3.452-7.844 7.712v7.987l7.842-.007c4.259 0 7.713-3.586 7.713-7.845 0-4.258-3.457-7.847-7.711-7.847Z","fill":"#231F20"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M10.143 5.208a4.782 4.782 0 0 0-4.203 7.058l-.865 2.783 3.106-.702a4.782 4.782 0 1 0 1.967-9.139h-.005Z","fill":"#FFF9AE"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M13.936 7.08a4.779 4.779 0 0 1-5.755 7.259l-3.106.71 3.162-.373a4.778 4.778 0 0 0 5.698-7.597h.001Z","fill":"#00AEEF"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M13.056 6.198a4.78 4.78 0 0 1-4.965 7.82L5.075 15.05l3.106-.703a4.779 4.779 0 0 0 4.875-8.149Z","fill":"#00A94F"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M6.226 12.372a4.78 4.78 0 0 1 7.713-5.293 4.78 4.78 0 0 0-7.999 5.187l-.865 2.783 1.151-2.677Z","fill":"#F15D22"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M5.94 12.266a4.78 4.78 0 0 1 7.115-6.067 4.781 4.781 0 0 0-7.41 5.993l-.569 2.858.864-2.784Z","fill":"#E31B23"},"children":[]}],"metadata":""}]},"name":"integrations-integration-discourse-color"};
7
+
8
+ export default IntegrationsIntegrationDiscourseColor;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const IntegrationsIntegrationIntercomColor: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"width":20,"height":20,"fill":"none"},"children":[{"type":"element","tagName":"path","properties":{"d":"M15.704 10.775a.519.519 0 0 1-1.037 0V6.112a.519.519 0 0 1 1.037 0v4.663Zm-.18 3.246c-.08.068-2.002 1.68-5.524 1.68-3.521 0-5.442-1.612-5.522-1.68a.519.519 0 0 1 .674-.789c.03.026 1.745 1.432 4.849 1.432 3.142 0 4.83-1.416 4.847-1.43a.518.518 0 1 1 .675.787ZM4.296 6.11a.519.519 0 0 1 1.037 0v4.664a.518.518 0 0 1-1.037 0V6.112Zm2.592-1.037a.519.519 0 0 1 1.037 0v6.928a.519.519 0 0 1-1.037 0V5.075Zm2.593-.262a.518.518 0 1 1 1.037 0v7.519a.52.52 0 0 1-1.037 0V4.812Zm2.593.262a.519.519 0 0 1 1.037 0v6.928a.518.518 0 0 1-1.037 0V5.075Zm3.759-2.851H4.167c-1.074 0-1.944.87-1.944 1.944v11.667c0 1.074.87 1.944 1.944 1.944h11.667c1.074 0 1.944-.87 1.944-1.944V4.167c0-1.074-.87-1.944-1.944-1.944Z","fill":"#1F8DED"},"children":[]}],"metadata":""}]},"name":"integrations-integration-intercom-color"};
7
+
8
+ export default IntegrationsIntegrationIntercomColor;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const IntegrationsIntegrationSlackColor: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"width":20,"height":20,"fill":"none"},"children":[{"type":"element","tagName":"path","properties":{"d":"M5.222 12.052c0 .9-.734 1.634-1.634 1.634-.9 0-1.634-.735-1.634-1.634 0-.9.735-1.634 1.634-1.634h1.634v1.634ZM6.046 12.052c0-.9.735-1.634 1.634-1.634.9 0 1.634.735 1.634 1.634v4.092c0 .899-.735 1.634-1.634 1.634-.9 0-1.634-.735-1.634-1.634v-4.092Z","fill":"#E01E5A"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M7.68 5.49c-.9 0-1.634-.734-1.634-1.633 0-.9.735-1.634 1.634-1.634.9 0 1.634.734 1.634 1.634V5.49H7.68ZM7.68 6.314c.9 0 1.634.735 1.634 1.635 0 .899-.735 1.634-1.634 1.634H3.588c-.9 0-1.634-.735-1.634-1.634 0-.9.735-1.635 1.634-1.635H7.68Z","fill":"#36C5F0"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M14.241 7.949c0-.9.735-1.635 1.634-1.635.9 0 1.634.735 1.634 1.635 0 .899-.734 1.634-1.634 1.634h-1.634V7.949ZM13.418 7.948c0 .9-.735 1.634-1.634 1.634-.9 0-1.635-.734-1.635-1.634V3.857c0-.9.735-1.634 1.635-1.634.899 0 1.634.734 1.634 1.634v4.091Z","fill":"#2EB67D"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M11.784 14.51c.899 0 1.634.735 1.634 1.634 0 .9-.735 1.634-1.634 1.634-.9 0-1.635-.735-1.635-1.634V14.51h1.635ZM11.784 13.686c-.9 0-1.635-.735-1.635-1.634 0-.9.735-1.634 1.635-1.634h4.091c.9 0 1.634.735 1.634 1.634 0 .9-.735 1.634-1.634 1.634h-4.091Z","fill":"#ECB22E"},"children":[]}],"metadata":""}]},"name":"integrations-integration-slack-color"};
7
+
8
+ export default IntegrationsIntegrationSlackColor;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const IntegrationsIntegrationZendeskColor: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"width":20,"height":20,"fill":"none"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M9.14 7.21v8.7H1.954l7.186-8.7ZM9.14 4.089a3.598 3.598 0 0 1-3.593 3.603 3.597 3.597 0 0 1-3.593-3.603H9.14ZM10.324 15.91a3.598 3.598 0 0 1 3.593-3.602 3.597 3.597 0 0 1 3.593 3.603h-7.186ZM10.324 12.788v-8.7h7.186l-7.186 8.7Z","fill":"#03363D"},"children":[]}],"metadata":""}]},"name":"integrations-integration-zendesk-color"};
7
+
8
+ export default IntegrationsIntegrationZendeskColor;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const MoveBottom: 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.175 16.65a2.025 2.025 0 0 1-2.025-2.025v-3.15c0-1.118.907-2.025 2.025-2.025h8.55c1.118 0 2.025.907 2.025 2.025v3.15a2.025 2.025 0 0 1-2.025 2.025h-8.55ZM4.5 14.625c0 .373.302.675.675.675h8.55a.675.675 0 0 0 .675-.675v-3.15a.675.675 0 0 0-.675-.675h-8.55a.675.675 0 0 0-.675.675v3.15ZM6.948 4.248a.675.675 0 0 1 .954 0L9 5.345v-3.32a.675.675 0 0 1 1.35 0v3.32l1.098-1.097a.675.675 0 0 1 .954.954l-2.25 2.25a.675.675 0 0 1-.954 0l-2.25-2.25a.675.675 0 0 1 0-.954Z"},"children":[]}],"metadata":""}]},"name":"move-bottom"};
7
+
8
+ export default MoveBottom;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const MoveLeft: 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":"M1.8 4.725c0-1.118.907-2.025 2.025-2.025h3.15C8.093 2.7 9 3.607 9 4.725v8.55A2.025 2.025 0 0 1 6.975 15.3h-3.15A2.025 2.025 0 0 1 1.8 13.275v-8.55Zm2.025-.675a.675.675 0 0 0-.675.675v8.55c0 .373.302.675.675.675h3.15a.675.675 0 0 0 .675-.675v-8.55a.675.675 0 0 0-.675-.675h-3.15Zm10.377 2.448a.675.675 0 0 1 0 .954L13.105 8.55h3.32a.675.675 0 1 1 0 1.35h-3.32l1.097 1.098a.675.675 0 0 1-.954.954l-2.25-2.25a.675.675 0 0 1 0-.954l2.25-2.25a.675.675 0 0 1 .954 0Z"},"children":[]}],"metadata":""}]},"name":"move-left"};
7
+
8
+ export default MoveLeft;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const MoveRight: 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":"M9 4.725C9 3.607 9.907 2.7 11.025 2.7h3.15c1.118 0 2.025.907 2.025 2.025v8.55a2.025 2.025 0 0 1-2.025 2.025h-3.15A2.025 2.025 0 0 1 9 13.275v-8.55Zm2.025-.675a.675.675 0 0 0-.675.675v8.55c0 .373.302.675.675.675h3.15a.675.675 0 0 0 .675-.675v-8.55a.675.675 0 0 0-.675-.675h-3.15Zm-7.227 7.902c.263.264.69.264.954 0l2.25-2.25a.675.675 0 0 0 0-.954l-2.25-2.25a.675.675 0 1 0-.954.954L4.895 8.55h-3.32a.675.675 0 0 0 0 1.35h3.32l-1.097 1.098a.675.675 0 0 0 0 .954Z"},"children":[]}],"metadata":""}]},"name":"move-right"};
7
+
8
+ export default MoveRight;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const MoveTop: 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":"M4.275 8.55A2.025 2.025 0 0 1 2.25 6.525v-3.15c0-1.118.907-2.025 2.025-2.025h8.55c1.118 0 2.025.907 2.025 2.025v3.15a2.025 2.025 0 0 1-2.025 2.025h-8.55ZM3.6 6.525c0 .373.302.675.675.675h8.55a.675.675 0 0 0 .675-.675v-3.15a.675.675 0 0 0-.675-.675h-8.55a.675.675 0 0 0-.675.675v3.15Zm7.902 7.227a.675.675 0 0 0 0-.954l-2.25-2.25a.675.675 0 0 0-.954 0l-2.25 2.25a.675.675 0 0 0 .954.954L8.1 12.654v3.32a.675.675 0 1 0 1.35 0v-3.32l1.098 1.098a.675.675 0 0 0 .954 0Z"},"children":[]}],"metadata":""}]},"name":"move-top"};
7
+
8
+ export default MoveTop;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const Pin: 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":"M11.254 1.8a.692.692 0 0 1 .513.198l4.232 4.165a.67.67 0 0 1-.041.992l-3.71 3.097.246 2.342a.669.669 0 0 1-.197.547l-1.228 1.208a.694.694 0 0 1-.97 0l-2.724-2.68-4.404 4.333a.694.694 0 0 1-.97 0 .667.667 0 0 1 0-.954l4.404-4.334-2.957-2.91a.67.67 0 0 1 0-.955l1.228-1.208a.692.692 0 0 1 .556-.194l2.379.243 3.147-3.652a.69.69 0 0 1 .496-.237Zm.07 1.67L8.422 6.835a.692.692 0 0 1-.594.234l-2.414-.246-.512.503 5.681 5.591.512-.503-.25-2.377a.67.67 0 0 1 .238-.585L14.503 6.6l-3.18-3.129Z"},"children":[]}],"metadata":""}]},"name":"pin"};
7
+
8
+ export default Pin;
@@ -83,6 +83,7 @@ export { default as FavoritesChecked } from './FavoritesChecked';
83
83
  export { default as FavoritesOff } from './FavoritesOff';
84
84
  export { default as Favorites } from './Favorites';
85
85
  export { default as FiberyMono } from './FiberyMono';
86
+ export { default as FieldUnit } from './FieldUnit';
86
87
  export { default as Fields } from './Fields';
87
88
  export { default as Figma } from './Figma';
88
89
  export { default as FileUpload } from './FileUpload';
@@ -107,6 +108,10 @@ export { default as ImageXmark } from './ImageXmark';
107
108
  export { default as Import } from './Import';
108
109
  export { default as InfoCircleFilled } from './InfoCircleFilled';
109
110
  export { default as Integration } from './Integration';
111
+ export { default as IntegrationsIntegrationDiscourseColor } from './IntegrationsIntegrationDiscourseColor';
112
+ export { default as IntegrationsIntegrationIntercomColor } from './IntegrationsIntegrationIntercomColor';
113
+ export { default as IntegrationsIntegrationSlackColor } from './IntegrationsIntegrationSlackColor';
114
+ export { default as IntegrationsIntegrationZendeskColor } from './IntegrationsIntegrationZendeskColor';
110
115
  export { default as InvitePeople } from './InvitePeople';
111
116
  export { default as Items } from './Items';
112
117
  export { default as Jira } from './Jira';
@@ -130,6 +135,10 @@ export { default as Mixpanel } from './Mixpanel';
130
135
  export { default as Monitor } from './Monitor';
131
136
  export { default as MoreCompact } from './MoreCompact';
132
137
  export { default as More } from './More';
138
+ export { default as MoveBottom } from './MoveBottom';
139
+ export { default as MoveLeft } from './MoveLeft';
140
+ export { default as MoveRight } from './MoveRight';
141
+ export { default as MoveTop } from './MoveTop';
133
142
  export { default as MySpace } from './MySpace';
134
143
  export { default as NetworkAdd } from './NetworkAdd';
135
144
  export { default as Network } from './Network';
@@ -146,6 +155,7 @@ export { default as PageWideMode } from './PageWideMode';
146
155
  export { default as Pencil } from './Pencil';
147
156
  export { default as People } from './People';
148
157
  export { default as Photo } from './Photo';
158
+ export { default as Pin } from './Pin';
149
159
  export { default as Popup } from './Popup';
150
160
  export { default as Posts } from './Posts';
151
161
  export { default as Question } from './Question';
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import FieldUnitSvg from '../ast/FieldUnit';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const FieldUnit = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={FieldUnitSvg} />;
10
+
11
+ FieldUnit.displayName = 'FieldUnit';
12
+ export default FieldUnit;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import IntegrationsIntegrationDiscourseColorSvg from '../ast/IntegrationsIntegrationDiscourseColor';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const IntegrationsIntegrationDiscourseColor = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={IntegrationsIntegrationDiscourseColorSvg} />;
10
+
11
+ IntegrationsIntegrationDiscourseColor.displayName = 'IntegrationsIntegrationDiscourseColor';
12
+ export default IntegrationsIntegrationDiscourseColor;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import IntegrationsIntegrationIntercomColorSvg from '../ast/IntegrationsIntegrationIntercomColor';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const IntegrationsIntegrationIntercomColor = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={IntegrationsIntegrationIntercomColorSvg} />;
10
+
11
+ IntegrationsIntegrationIntercomColor.displayName = 'IntegrationsIntegrationIntercomColor';
12
+ export default IntegrationsIntegrationIntercomColor;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import IntegrationsIntegrationSlackColorSvg from '../ast/IntegrationsIntegrationSlackColor';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const IntegrationsIntegrationSlackColor = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={IntegrationsIntegrationSlackColorSvg} />;
10
+
11
+ IntegrationsIntegrationSlackColor.displayName = 'IntegrationsIntegrationSlackColor';
12
+ export default IntegrationsIntegrationSlackColor;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import IntegrationsIntegrationZendeskColorSvg from '../ast/IntegrationsIntegrationZendeskColor';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const IntegrationsIntegrationZendeskColor = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={IntegrationsIntegrationZendeskColorSvg} />;
10
+
11
+ IntegrationsIntegrationZendeskColor.displayName = 'IntegrationsIntegrationZendeskColor';
12
+ export default IntegrationsIntegrationZendeskColor;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import MoveBottomSvg from '../ast/MoveBottom';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const MoveBottom = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={MoveBottomSvg} />;
10
+
11
+ MoveBottom.displayName = 'MoveBottom';
12
+ export default MoveBottom;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import MoveLeftSvg from '../ast/MoveLeft';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const MoveLeft = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={MoveLeftSvg} />;
10
+
11
+ MoveLeft.displayName = 'MoveLeft';
12
+ export default MoveLeft;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import MoveRightSvg from '../ast/MoveRight';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const MoveRight = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={MoveRightSvg} />;
10
+
11
+ MoveRight.displayName = 'MoveRight';
12
+ export default MoveRight;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import MoveTopSvg from '../ast/MoveTop';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const MoveTop = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={MoveTopSvg} />;
10
+
11
+ MoveTop.displayName = 'MoveTop';
12
+ export default MoveTop;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import PinSvg from '../ast/Pin';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const Pin = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={PinSvg} />;
10
+
11
+ Pin.displayName = 'Pin';
12
+ export default Pin;
@@ -83,6 +83,7 @@ export { default as FavoritesChecked } from './FavoritesChecked';
83
83
  export { default as FavoritesOff } from './FavoritesOff';
84
84
  export { default as Favorites } from './Favorites';
85
85
  export { default as FiberyMono } from './FiberyMono';
86
+ export { default as FieldUnit } from './FieldUnit';
86
87
  export { default as Fields } from './Fields';
87
88
  export { default as Figma } from './Figma';
88
89
  export { default as FileUpload } from './FileUpload';
@@ -107,6 +108,10 @@ export { default as ImageXmark } from './ImageXmark';
107
108
  export { default as Import } from './Import';
108
109
  export { default as InfoCircleFilled } from './InfoCircleFilled';
109
110
  export { default as Integration } from './Integration';
111
+ export { default as IntegrationsIntegrationDiscourseColor } from './IntegrationsIntegrationDiscourseColor';
112
+ export { default as IntegrationsIntegrationIntercomColor } from './IntegrationsIntegrationIntercomColor';
113
+ export { default as IntegrationsIntegrationSlackColor } from './IntegrationsIntegrationSlackColor';
114
+ export { default as IntegrationsIntegrationZendeskColor } from './IntegrationsIntegrationZendeskColor';
110
115
  export { default as InvitePeople } from './InvitePeople';
111
116
  export { default as Items } from './Items';
112
117
  export { default as Jira } from './Jira';
@@ -130,6 +135,10 @@ export { default as Mixpanel } from './Mixpanel';
130
135
  export { default as Monitor } from './Monitor';
131
136
  export { default as MoreCompact } from './MoreCompact';
132
137
  export { default as More } from './More';
138
+ export { default as MoveBottom } from './MoveBottom';
139
+ export { default as MoveLeft } from './MoveLeft';
140
+ export { default as MoveRight } from './MoveRight';
141
+ export { default as MoveTop } from './MoveTop';
133
142
  export { default as MySpace } from './MySpace';
134
143
  export { default as NetworkAdd } from './NetworkAdd';
135
144
  export { default as Network } from './Network';
@@ -146,6 +155,7 @@ export { default as PageWideMode } from './PageWideMode';
146
155
  export { default as Pencil } from './Pencil';
147
156
  export { default as People } from './People';
148
157
  export { default as Photo } from './Photo';
158
+ export { default as Pin } from './Pin';
149
159
  export { default as Popup } from './Popup';
150
160
  export { default as Posts } from './Posts';
151
161
  export { default as Question } from './Question';
package/src/item.tsx CHANGED
@@ -28,7 +28,7 @@ const getGridStyle = ({
28
28
 
29
29
  const hoverClass = css`
30
30
  &:hover {
31
- background-color: ${themeVars.opacity.opacity10};
31
+ background-color: ${themeVars.colorBgMenuItemHover};
32
32
  }
33
33
  `;
34
34
 
@@ -32,7 +32,8 @@ const popupContainerClassName = css`
32
32
  z-index: 1050;
33
33
  `;
34
34
  const popupClassName = css`
35
- max-width: 360px;
35
+ min-width: 320px;
36
+ max-width: 440px;
36
37
  padding-top: ${space.s8}px;
37
38
  padding-bottom: ${space.s4}px;
38
39
  padding-left: ${space.s8}px;