@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.
- package/package.json +6 -6
- package/src/actions-menu/actions-menu-confirmation.tsx +70 -0
- package/src/actions-menu/actions-menu-sub-command-menu.tsx +97 -142
- package/src/actions-menu/actions-menu-sub-menu.tsx +3 -1
- package/src/actions-menu/actions-menu.tsx +6 -1
- package/src/actions-menu/context-actions-menu.tsx +5 -1
- package/src/actions-menu/contexts/actions-menu-context.tsx +6 -2
- package/src/design-system.ts +13 -10
- package/src/dropdown-menu/index.tsx +7 -2
- package/src/icons/ast/FieldUnit.ts +8 -0
- package/src/icons/ast/IntegrationsIntegrationDiscourseColor.ts +8 -0
- package/src/icons/ast/IntegrationsIntegrationIntercomColor.ts +8 -0
- package/src/icons/ast/IntegrationsIntegrationSlackColor.ts +8 -0
- package/src/icons/ast/IntegrationsIntegrationZendeskColor.ts +8 -0
- package/src/icons/ast/MoveBottom.ts +8 -0
- package/src/icons/ast/MoveLeft.ts +8 -0
- package/src/icons/ast/MoveRight.ts +8 -0
- package/src/icons/ast/MoveTop.ts +8 -0
- package/src/icons/ast/Pin.ts +8 -0
- package/src/icons/ast/index.tsx +10 -0
- package/src/icons/react/FieldUnit.tsx +12 -0
- package/src/icons/react/IntegrationsIntegrationDiscourseColor.tsx +12 -0
- package/src/icons/react/IntegrationsIntegrationIntercomColor.tsx +12 -0
- package/src/icons/react/IntegrationsIntegrationSlackColor.tsx +12 -0
- package/src/icons/react/IntegrationsIntegrationZendeskColor.tsx +12 -0
- package/src/icons/react/MoveBottom.tsx +12 -0
- package/src/icons/react/MoveLeft.tsx +12 -0
- package/src/icons/react/MoveRight.tsx +12 -0
- package/src/icons/react/MoveTop.tsx +12 -0
- package/src/icons/react/Pin.tsx +12 -0
- package/src/icons/react/index.tsx +10 -0
- package/src/item.tsx +1 -1
- 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.
|
|
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.
|
|
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/
|
|
80
|
-
"@fibery/
|
|
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/
|
|
114
|
-
"@fibery/
|
|
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
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
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 {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
<
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
<
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
[
|
|
36
|
+
[MenuPrimitive, showConfirmation, setOpen]
|
|
33
37
|
);
|
|
34
38
|
|
|
35
39
|
return <Provider value={context}>{children}</Provider>;
|
package/src/design-system.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
146
|
+
primaryBlue: [indigo.indigo9, indigoDark.indigo9],
|
|
146
147
|
whiteColor: [whiteA.whiteA0, whiteA.whiteA0],
|
|
147
148
|
blackColor: [blackA.blackA0, blackA.blackA0],
|
|
148
|
-
mainBg: [slate.
|
|
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.
|
|
157
|
+
menuBg: [slate.slate3, slateDark.slate1],
|
|
156
158
|
menuTextColor: [slate.slate12, slate.slate8],
|
|
157
|
-
menuItemHoverColor: [slate.
|
|
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.
|
|
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.
|
|
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.
|
|
374
|
+
colorBgMenuItemHover: [slate.slate5, slateDark.slate4],
|
|
373
375
|
// :focus
|
|
374
376
|
colorBgMenuItemFocus: [slate.slate6, slateDark.slate6],
|
|
375
377
|
// Selected
|
|
376
|
-
colorBgMenuItemSelected: [indigo.
|
|
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
|
|
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;
|
package/src/icons/ast/index.tsx
CHANGED
|
@@ -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