@box/blueprint-web 12.130.2 → 12.130.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib-esm/index.css +24 -18
- package/dist/lib-esm/primitives/context-menu/context-menu-item.js +0 -3
- package/dist/lib-esm/primitives/context-menu/context-menu-sub-menu-root.js +3 -10
- package/dist/lib-esm/primitives/context-menu/context-menu-sub-menu-trigger.js +3 -17
- package/dist/lib-esm/primitives/context-menu/context-menu.module.js +1 -1
- package/package.json +3 -3
- package/dist/lib-esm/utils/useSubMenuFocus.hook.js +0 -39
package/dist/lib-esm/index.css
CHANGED
|
@@ -9158,7 +9158,7 @@ table.bp_inline_table_module_inlineTable--fc100[data-modern=true] td:last-child,
|
|
|
9158
9158
|
padding:var(--chips-group-small-screen-padding);
|
|
9159
9159
|
}
|
|
9160
9160
|
}
|
|
9161
|
-
.bp_context_menu_module_menuBlock--
|
|
9161
|
+
.bp_context_menu_module_menuBlock--99ecc[data-modern=false]{
|
|
9162
9162
|
--context-menu-block-font-color:unset;
|
|
9163
9163
|
--context-menu-block-min-width:var(--blueprint-web-context-menu-min-width, 160px);
|
|
9164
9164
|
--context-menu-block-max-width:var(--blueprint-web-context-menu-max-width);
|
|
@@ -9181,10 +9181,11 @@ table.bp_inline_table_module_inlineTable--fc100[data-modern=true] td:last-child,
|
|
|
9181
9181
|
--context-menu-item-background-color-pressed:var(--surface-menu-surface-focus);
|
|
9182
9182
|
--context-menu-item-focus-border:var(--border-2) solid var(--outline-focus-on-light);
|
|
9183
9183
|
--context-menu-item-padding:var(--space-2);
|
|
9184
|
+
--context-menu-item-border-hover:var(--border-2) solid #0000;
|
|
9184
9185
|
--context-menu-items-separator-margin:var(--space-2);
|
|
9185
9186
|
}
|
|
9186
9187
|
|
|
9187
|
-
.bp_context_menu_module_menuBlock--
|
|
9188
|
+
.bp_context_menu_module_menuBlock--99ecc[data-modern=true]{
|
|
9188
9189
|
--context-menu-block-font-color:var(--bp-text-text-on-light);
|
|
9189
9190
|
--context-menu-block-min-width:var(--blueprint-web-context-menu-min-width, 160px);
|
|
9190
9191
|
--context-menu-block-max-width:var(--blueprint-web-context-menu-max-width);
|
|
@@ -9203,6 +9204,7 @@ table.bp_inline_table_module_inlineTable--fc100[data-modern=true] td:last-child,
|
|
|
9203
9204
|
--context-menu-fullscreen-content-padding:var(--bp-space-030);
|
|
9204
9205
|
--context-menu-item-radius:var(--bp-radius-06);
|
|
9205
9206
|
--context-menu-item-border:var(--bp-border-02) solid #0000;
|
|
9207
|
+
--context-menu-item-border-hover:var(--border-020) solid #0000;
|
|
9206
9208
|
--context-menu-item-background-color-hover:var(--bp-surface-menu-item-surface-hover);
|
|
9207
9209
|
--context-menu-item-background-color-pressed:var(--bp-surface-menu-item-surface-pressed);
|
|
9208
9210
|
--context-menu-item-focus-border:var(--bp-border-02) solid var(--bp-outline-focus-on-light);
|
|
@@ -9210,19 +9212,19 @@ table.bp_inline_table_module_inlineTable--fc100[data-modern=true] td:last-child,
|
|
|
9210
9212
|
--context-menu-items-separator-margin:var(--bp-space-020);
|
|
9211
9213
|
}
|
|
9212
9214
|
|
|
9213
|
-
.bp_context_menu_module_menuHeader--
|
|
9215
|
+
.bp_context_menu_module_menuHeader--99ecc[data-modern=false]{
|
|
9214
9216
|
--context-menu-header-padding:var(--space-3);
|
|
9215
9217
|
--context-menu-header-gap:var(--space-2);
|
|
9216
9218
|
--context-menu-header-shadow:var(--dropshadow-1);
|
|
9217
9219
|
}
|
|
9218
9220
|
|
|
9219
|
-
.bp_context_menu_module_menuHeader--
|
|
9221
|
+
.bp_context_menu_module_menuHeader--99ecc[data-modern=true]{
|
|
9220
9222
|
--context-menu-header-padding:var(--bp-space-030) var(--bp-space-040);
|
|
9221
9223
|
--context-menu-header-gap:var(--bp-space-030);
|
|
9222
9224
|
--context-menu-header-shadow:var(--dropshadow-1);
|
|
9223
9225
|
}
|
|
9224
9226
|
|
|
9225
|
-
.bp_context_menu_module_menuBlock--
|
|
9227
|
+
.bp_context_menu_module_menuBlock--99ecc{
|
|
9226
9228
|
backdrop-filter:var(--context-menu-block-backdrop-filter);
|
|
9227
9229
|
background-color:var(--context-menu-block-background-color);
|
|
9228
9230
|
border:var(--context-menu-block-border);
|
|
@@ -9235,7 +9237,7 @@ table.bp_inline_table_module_inlineTable--fc100[data-modern=true] td:last-child,
|
|
|
9235
9237
|
min-width:var(--context-menu-block-min-width);
|
|
9236
9238
|
padding:var(--context-menu-block-padding);
|
|
9237
9239
|
}
|
|
9238
|
-
.bp_context_menu_module_menuBlock--
|
|
9240
|
+
.bp_context_menu_module_menuBlock--99ecc[data-menu-fullscreen=true]{
|
|
9239
9241
|
border:unset;
|
|
9240
9242
|
border-radius:unset;
|
|
9241
9243
|
display:flex;
|
|
@@ -9248,14 +9250,14 @@ table.bp_inline_table_module_inlineTable--fc100[data-modern=true] td:last-child,
|
|
|
9248
9250
|
position:relative;
|
|
9249
9251
|
width:100vw;
|
|
9250
9252
|
}
|
|
9251
|
-
.bp_context_menu_module_menuBlock--
|
|
9253
|
+
.bp_context_menu_module_menuBlock--99ecc[data-menu-fullscreen=true] .bp_context_menu_module_fullScreenContent--99ecc{
|
|
9252
9254
|
overflow-y:auto;
|
|
9253
9255
|
padding:var(--context-menu-fullscreen-content-padding);
|
|
9254
9256
|
}
|
|
9255
|
-
.bp_context_menu_module_menuBlock--
|
|
9257
|
+
.bp_context_menu_module_menuBlock--99ecc .bp_context_menu_module_menuItemsSeparator--99ecc{
|
|
9256
9258
|
margin:var(--context-menu-items-separator-margin);
|
|
9257
9259
|
}
|
|
9258
|
-
.bp_context_menu_module_menuBlock--
|
|
9260
|
+
.bp_context_menu_module_menuBlock--99ecc .bp_context_menu_module_menuItem--99ecc{
|
|
9259
9261
|
align-items:center;
|
|
9260
9262
|
background-color:var(--context-menu-background-color);
|
|
9261
9263
|
border:var(--context-menu-item-border);
|
|
@@ -9268,20 +9270,24 @@ table.bp_inline_table_module_inlineTable--fc100[data-modern=true] td:last-child,
|
|
|
9268
9270
|
padding-inline:var(--context-menu-item-padding);
|
|
9269
9271
|
position:relative;
|
|
9270
9272
|
}
|
|
9271
|
-
.bp_context_menu_module_menuBlock--
|
|
9273
|
+
.bp_context_menu_module_menuBlock--99ecc .bp_context_menu_module_menuItem--99ecc[data-disabled]{
|
|
9272
9274
|
opacity:60%;
|
|
9273
9275
|
pointer-events:none;
|
|
9274
9276
|
}
|
|
9275
|
-
.bp_context_menu_module_menuBlock--
|
|
9277
|
+
.bp_context_menu_module_menuBlock--99ecc .bp_context_menu_module_menuItem--99ecc[data-highlighted]:not(:hover){
|
|
9276
9278
|
background-color:var(--context-menu-item-background-color-hover);
|
|
9277
9279
|
border:var(--context-menu-item-focus-border);
|
|
9278
9280
|
}
|
|
9279
|
-
.bp_context_menu_module_menuBlock--
|
|
9281
|
+
.bp_context_menu_module_menuBlock--99ecc .bp_context_menu_module_menuItem--99ecc[data-state=open][data-highlighted]:not(:hover){
|
|
9282
|
+
border:var(--context-menu-item-border);
|
|
9283
|
+
}
|
|
9284
|
+
.bp_context_menu_module_menuBlock--99ecc .bp_context_menu_module_menuItem--99ecc:active{
|
|
9280
9285
|
background-color:var(--context-menu-item-background-color-pressed);
|
|
9281
9286
|
border:var(--context-menu-item-border);
|
|
9282
9287
|
}
|
|
9283
|
-
.bp_context_menu_module_menuBlock--
|
|
9288
|
+
.bp_context_menu_module_menuBlock--99ecc .bp_context_menu_module_menuItem--99ecc:hover{
|
|
9284
9289
|
background-color:var(--context-menu-item-background-color-hover);
|
|
9290
|
+
border:var(--context-menu-item-border-hover);
|
|
9285
9291
|
}
|
|
9286
9292
|
div[data-radix-popper-content-wrapper]:has([role=menu]):has([data-state=open]):has([data-menu-fullscreen=true]){
|
|
9287
9293
|
height:100%;
|
|
@@ -9289,7 +9295,7 @@ div[data-radix-popper-content-wrapper]:has([role=menu]):has([data-state=open]):h
|
|
|
9289
9295
|
width:100%;
|
|
9290
9296
|
}
|
|
9291
9297
|
|
|
9292
|
-
.bp_context_menu_module_menuHeader--
|
|
9298
|
+
.bp_context_menu_module_menuHeader--99ecc{
|
|
9293
9299
|
align-items:center;
|
|
9294
9300
|
box-shadow:var(--context-menu-header-shadow);
|
|
9295
9301
|
display:grid;
|
|
@@ -9299,19 +9305,19 @@ div[data-radix-popper-content-wrapper]:has([role=menu]):has([data-state=open]):h
|
|
|
9299
9305
|
padding:var(--context-menu-header-padding);
|
|
9300
9306
|
}
|
|
9301
9307
|
|
|
9302
|
-
.bp_context_menu_module_headerTextContent--
|
|
9308
|
+
.bp_context_menu_module_headerTextContent--99ecc{
|
|
9303
9309
|
display:grid;
|
|
9304
9310
|
}
|
|
9305
9311
|
|
|
9306
|
-
.bp_context_menu_module_submenuCloseButton--
|
|
9312
|
+
.bp_context_menu_module_submenuCloseButton--99ecc{
|
|
9307
9313
|
grid-area:submenu-close;
|
|
9308
9314
|
}
|
|
9309
9315
|
|
|
9310
|
-
.bp_context_menu_module_menuCloseButton--
|
|
9316
|
+
.bp_context_menu_module_menuCloseButton--99ecc{
|
|
9311
9317
|
grid-area:close;
|
|
9312
9318
|
}
|
|
9313
9319
|
|
|
9314
|
-
.bp_context_menu_module_ellipsis--
|
|
9320
|
+
.bp_context_menu_module_ellipsis--99ecc{
|
|
9315
9321
|
overflow:hidden;
|
|
9316
9322
|
text-overflow:ellipsis;
|
|
9317
9323
|
white-space:nowrap;
|
|
@@ -3,7 +3,6 @@ import * as ContextMenuPrimitve from '@radix-ui/react-context-menu';
|
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import { forwardRef, useCallback } from 'react';
|
|
5
5
|
import { MenuItemMainContent, MenuItemSideContent } from '../../util-components/menu-item-sections/menu-item-sections.js';
|
|
6
|
-
import { composeEventHandlers } from '../../utils/composeEventHandlers.js';
|
|
7
6
|
import styles from './context-menu.module.js';
|
|
8
7
|
|
|
9
8
|
const MenuItemRoot = /*#__PURE__*/forwardRef((props, forwardedRef) => {
|
|
@@ -17,8 +16,6 @@ const MenuItemRoot = /*#__PURE__*/forwardRef((props, forwardedRef) => {
|
|
|
17
16
|
...rest,
|
|
18
17
|
ref: forwardedRef,
|
|
19
18
|
className: clsx(styles.menuItem, className),
|
|
20
|
-
onPointerLeave: composeEventHandlers(props.onPointerLeave, preventDefault),
|
|
21
|
-
onPointerMove: composeEventHandlers(props.onPointerMove, preventDefault),
|
|
22
19
|
// If click starts at trigger button, and ends on the item, it should not trigger the item.
|
|
23
20
|
// Note: this also has a side effect of not allowing to start click and end on a different time.
|
|
24
21
|
// TODO: see if possible to make https://github.com/radix-ui/primitives/blob/b32a93318cdfce383c2eec095710d35ffbd33a1c/packages/react/menu/src/Menu.tsx#L646
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Sub } from '@radix-ui/react-context-menu';
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
3
|
+
import 'lodash/noop';
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
5
|
import { useControllableState } from '../../utils/useControllableState.js';
|
|
6
6
|
import { SubMenuMenuProvider } from '../menu-utils/responsiveness/SubMenuContext.js';
|
|
7
7
|
|
|
8
|
-
const ResponsiveSubmenuContext = /*#__PURE__*/createContext({
|
|
9
|
-
open: false,
|
|
10
|
-
setOpen: noop
|
|
11
|
-
});
|
|
12
|
-
const useResponsiveSubmenuContext = () => {
|
|
13
|
-
return useContext(ResponsiveSubmenuContext);
|
|
14
|
-
};
|
|
15
8
|
/**
|
|
16
9
|
* Container for all the parts of a sub menu.
|
|
17
10
|
* Based on Radix-UI [SubMenu component](https://www.radix-ui.com/docs/primitives/components/context-menu#sub).
|
|
@@ -45,4 +38,4 @@ const ContextMenuSubMenuRoot = props => {
|
|
|
45
38
|
};
|
|
46
39
|
ContextMenuSubMenuRoot.displayName = 'ContextMenuSubMenuRoot';
|
|
47
40
|
|
|
48
|
-
export { ContextMenuSubMenuRoot
|
|
41
|
+
export { ContextMenuSubMenuRoot };
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { SubTrigger } from '@radix-ui/react-context-menu';
|
|
3
|
-
import { forwardRef,
|
|
3
|
+
import { forwardRef, useCallback } from 'react';
|
|
4
4
|
import { MenuItemMainContent, MenuItemSideContent } from '../../util-components/menu-item-sections/menu-item-sections.js';
|
|
5
5
|
import { composeEventHandlers } from '../../utils/composeEventHandlers.js';
|
|
6
|
-
import { useForkRef } from '../../utils/useForkRef.js';
|
|
7
|
-
import { useSubMenuFocus } from '../../utils/useSubMenuFocus.hook.js';
|
|
8
6
|
import { useFullScreenContextMenu } from '../menu-utils/responsiveness/FullScreenContextMenuContext.js';
|
|
9
|
-
import { useResponsiveSubmenuContext } from './context-menu-sub-menu-root.js';
|
|
10
7
|
import styles from './context-menu.module.js';
|
|
11
8
|
|
|
12
9
|
const ContextMenuSubTriggerRoot = /*#__PURE__*/forwardRef((props, forwardedRef) => {
|
|
@@ -14,28 +11,17 @@ const ContextMenuSubTriggerRoot = /*#__PURE__*/forwardRef((props, forwardedRef)
|
|
|
14
11
|
children,
|
|
15
12
|
...rest
|
|
16
13
|
} = props;
|
|
17
|
-
const [localRef, setRefFocusNoop] = useSubMenuFocus();
|
|
18
|
-
const {
|
|
19
|
-
open
|
|
20
|
-
} = useResponsiveSubmenuContext();
|
|
21
14
|
const {
|
|
22
15
|
isMenuFullScreenEnabled
|
|
23
16
|
} = useFullScreenContextMenu();
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
if (!open) {
|
|
26
|
-
localRef.current?.focus();
|
|
27
|
-
}
|
|
28
|
-
}, [localRef, open]);
|
|
29
17
|
const handleOnPointerMove = useCallback(e => {
|
|
30
|
-
setRefFocusNoop();
|
|
31
|
-
// we should call prevent default so hover doesn't trigger submenu, which is confusing on full screen.
|
|
32
18
|
if (isMenuFullScreenEnabled) {
|
|
33
19
|
e.preventDefault();
|
|
34
20
|
}
|
|
35
|
-
}, [isMenuFullScreenEnabled
|
|
21
|
+
}, [isMenuFullScreenEnabled]);
|
|
36
22
|
return jsx(SubTrigger, {
|
|
37
23
|
...rest,
|
|
38
|
-
ref:
|
|
24
|
+
ref: forwardedRef,
|
|
39
25
|
className: styles.menuItem,
|
|
40
26
|
onPointerMove: composeEventHandlers(props.onPointerMove, handleOnPointerMove),
|
|
41
27
|
children: children
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import '../../index.css';
|
|
2
|
-
var styles = {"menuBlock":"bp_context_menu_module_menuBlock--
|
|
2
|
+
var styles = {"menuBlock":"bp_context_menu_module_menuBlock--99ecc","menuHeader":"bp_context_menu_module_menuHeader--99ecc","fullScreenContent":"bp_context_menu_module_fullScreenContent--99ecc","menuItemsSeparator":"bp_context_menu_module_menuItemsSeparator--99ecc","menuItem":"bp_context_menu_module_menuItem--99ecc","headerTextContent":"bp_context_menu_module_headerTextContent--99ecc","submenuCloseButton":"bp_context_menu_module_submenuCloseButton--99ecc","menuCloseButton":"bp_context_menu_module_menuCloseButton--99ecc","ellipsis":"bp_context_menu_module_ellipsis--99ecc"};
|
|
3
3
|
|
|
4
4
|
export { styles as default };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@box/blueprint-web",
|
|
3
|
-
"version": "12.130.
|
|
3
|
+
"version": "12.130.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"publishConfig": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@ariakit/react": "0.4.15",
|
|
49
49
|
"@ariakit/react-core": "0.4.15",
|
|
50
|
-
"@box/blueprint-web-assets": "^4.99.
|
|
50
|
+
"@box/blueprint-web-assets": "^4.99.2",
|
|
51
51
|
"@internationalized/date": "^3.7.0",
|
|
52
52
|
"@radix-ui/react-accordion": "1.1.2",
|
|
53
53
|
"@radix-ui/react-checkbox": "1.0.4",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"type-fest": "^3.2.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@box/storybook-utils": "^0.16.
|
|
80
|
+
"@box/storybook-utils": "^0.16.28",
|
|
81
81
|
"@figma/code-connect": "1.3.12",
|
|
82
82
|
"@types/react": "^18.0.0",
|
|
83
83
|
"@types/react-dom": "^18.0.0",
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import noop from 'lodash/noop';
|
|
2
|
-
import { useRef, useEffect } from 'react';
|
|
3
|
-
|
|
4
|
-
const useSubMenuFocus = () => {
|
|
5
|
-
const localRef = useRef(null);
|
|
6
|
-
const originalFocus = useRef(noop);
|
|
7
|
-
const storeAndMakeCurrentFocusMethodNoop = () => {
|
|
8
|
-
if (!localRef.current) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
originalFocus.current = localRef.current.focus;
|
|
12
|
-
localRef.current.focus = noop;
|
|
13
|
-
};
|
|
14
|
-
const restoreInitialFocusMethod = () => {
|
|
15
|
-
if (!localRef.current) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
localRef.current.focus = originalFocus.current;
|
|
19
|
-
};
|
|
20
|
-
const setRefFocusMethodNoop = () => {
|
|
21
|
-
if (!localRef.current) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
localRef.current.focus = noop;
|
|
25
|
-
};
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
const keydownListener = function onKeydownHandler() {
|
|
28
|
-
restoreInitialFocusMethod();
|
|
29
|
-
};
|
|
30
|
-
document.addEventListener('keydown', keydownListener);
|
|
31
|
-
storeAndMakeCurrentFocusMethodNoop();
|
|
32
|
-
return () => {
|
|
33
|
-
document.removeEventListener('keydown', keydownListener);
|
|
34
|
-
};
|
|
35
|
-
}, []);
|
|
36
|
-
return [localRef, setRefFocusMethodNoop, storeAndMakeCurrentFocusMethodNoop];
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export { useSubMenuFocus };
|