@atlaskit/drawer 10.1.5 → 11.0.0
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/CHANGELOG.md +9 -6
- package/dist/cjs/constants.js +2 -7
- package/dist/cjs/{compiled/drawer-panel → drawer-panel}/drawer-close-button.js +1 -1
- package/dist/cjs/{compiled/drawer-panel → drawer-panel}/drawer-content.js +2 -2
- package/dist/cjs/{compiled/drawer-panel → drawer-panel}/drawer-panel.js +1 -1
- package/dist/cjs/{compiled/drawer-panel → drawer-panel}/drawer-sidebar.js +1 -1
- package/dist/cjs/{compiled/drawer.js → drawer.js} +3 -3
- package/dist/cjs/index.js +29 -3
- package/dist/es2019/constants.js +1 -6
- package/dist/es2019/{compiled/drawer-panel → drawer-panel}/drawer-close-button.js +1 -1
- package/dist/es2019/{compiled/drawer-panel → drawer-panel}/drawer-content.js +2 -2
- package/dist/es2019/{compiled/drawer-panel → drawer-panel}/drawer-panel.js +1 -1
- package/dist/es2019/{compiled/drawer-panel → drawer-panel}/drawer-sidebar.js +1 -1
- package/dist/es2019/{compiled/drawer.js → drawer.js} +3 -3
- package/dist/es2019/index.js +5 -1
- package/dist/esm/constants.js +1 -6
- package/dist/esm/{compiled/drawer-panel → drawer-panel}/drawer-close-button.js +1 -1
- package/dist/esm/{compiled/drawer-panel → drawer-panel}/drawer-content.js +2 -2
- package/dist/esm/{compiled/drawer-panel → drawer-panel}/drawer-panel.js +1 -1
- package/dist/esm/{compiled/drawer-panel → drawer-panel}/drawer-sidebar.js +1 -1
- package/dist/esm/{compiled/drawer.js → drawer.js} +3 -3
- package/dist/esm/index.js +5 -1
- package/dist/types/constants.d.ts +1 -2
- package/dist/types/index.d.ts +6 -2
- package/dist/types/{compiled/types.d.ts → types.d.ts} +1 -2
- package/dist/types-ts4.5/constants.d.ts +1 -2
- package/dist/types-ts4.5/index.d.ts +6 -2
- package/dist/types-ts4.5/{compiled/types.d.ts → types.d.ts} +1 -2
- package/package.json +3 -6
- package/compiled/package.json +0 -17
- package/dist/cjs/components/blanket.js +0 -62
- package/dist/cjs/components/index.js +0 -148
- package/dist/cjs/components/primitives/content.js +0 -69
- package/dist/cjs/components/primitives/drawer-wrapper.js +0 -90
- package/dist/cjs/components/primitives/focus-lock.js +0 -60
- package/dist/cjs/components/primitives/index.js +0 -125
- package/dist/cjs/components/primitives/sidebar.js +0 -45
- package/dist/cjs/components/types.js +0 -5
- package/dist/cjs/components/utils.js +0 -38
- package/dist/cjs/entry-points/compiled.js +0 -33
- package/dist/es2019/components/blanket.js +0 -53
- package/dist/es2019/components/index.js +0 -129
- package/dist/es2019/components/primitives/content.js +0 -56
- package/dist/es2019/components/primitives/drawer-wrapper.js +0 -86
- package/dist/es2019/components/primitives/focus-lock.js +0 -49
- package/dist/es2019/components/primitives/index.js +0 -113
- package/dist/es2019/components/primitives/sidebar.js +0 -36
- package/dist/es2019/components/utils.js +0 -44
- package/dist/es2019/entry-points/compiled.js +0 -4
- package/dist/esm/compiled/types.js +0 -1
- package/dist/esm/components/blanket.js +0 -54
- package/dist/esm/components/index.js +0 -138
- package/dist/esm/components/primitives/content.js +0 -64
- package/dist/esm/components/primitives/drawer-wrapper.js +0 -82
- package/dist/esm/components/primitives/focus-lock.js +0 -51
- package/dist/esm/components/primitives/index.js +0 -117
- package/dist/esm/components/primitives/sidebar.js +0 -39
- package/dist/esm/components/types.js +0 -1
- package/dist/esm/components/utils.js +0 -32
- package/dist/esm/entry-points/compiled.js +0 -4
- package/dist/types/components/blanket.d.ts +0 -16
- package/dist/types/components/index.d.ts +0 -13
- package/dist/types/components/primitives/content.d.ts +0 -11
- package/dist/types/components/primitives/drawer-wrapper.d.ts +0 -26
- package/dist/types/components/primitives/focus-lock.d.ts +0 -10
- package/dist/types/components/primitives/index.d.ts +0 -4
- package/dist/types/components/primitives/sidebar.d.ts +0 -12
- package/dist/types/components/types.d.ts +0 -172
- package/dist/types/components/utils.d.ts +0 -7
- package/dist/types/entry-points/compiled.d.ts +0 -5
- package/dist/types-ts4.5/components/blanket.d.ts +0 -16
- package/dist/types-ts4.5/components/index.d.ts +0 -13
- package/dist/types-ts4.5/components/primitives/content.d.ts +0 -11
- package/dist/types-ts4.5/components/primitives/drawer-wrapper.d.ts +0 -29
- package/dist/types-ts4.5/components/primitives/focus-lock.d.ts +0 -10
- package/dist/types-ts4.5/components/primitives/index.d.ts +0 -4
- package/dist/types-ts4.5/components/primitives/sidebar.d.ts +0 -12
- package/dist/types-ts4.5/components/types.d.ts +0 -172
- package/dist/types-ts4.5/components/utils.d.ts +0 -7
- package/dist/types-ts4.5/entry-points/compiled.d.ts +0 -5
- /package/dist/cjs/{compiled/blanket.compiled.css → blanket.compiled.css} +0 -0
- /package/dist/cjs/{compiled/blanket.js → blanket.js} +0 -0
- /package/dist/cjs/{compiled/drawer-panel → drawer-panel}/drawer-content.compiled.css +0 -0
- /package/dist/cjs/{compiled/drawer-panel → drawer-panel}/drawer-panel.compiled.css +0 -0
- /package/dist/cjs/{compiled/drawer-panel → drawer-panel}/drawer-sidebar.compiled.css +0 -0
- /package/dist/cjs/{compiled/drawer-panel → drawer-panel}/focus-lock.js +0 -0
- /package/dist/cjs/{hooks → drawer-panel/hooks}/use-prevent-programmatic-scroll.js +0 -0
- /package/dist/cjs/{compiled/types.js → types.js} +0 -0
- /package/dist/es2019/{compiled/blanket.compiled.css → blanket.compiled.css} +0 -0
- /package/dist/es2019/{compiled/blanket.js → blanket.js} +0 -0
- /package/dist/es2019/{compiled/drawer-panel → drawer-panel}/drawer-content.compiled.css +0 -0
- /package/dist/es2019/{compiled/drawer-panel → drawer-panel}/drawer-panel.compiled.css +0 -0
- /package/dist/es2019/{compiled/drawer-panel → drawer-panel}/drawer-sidebar.compiled.css +0 -0
- /package/dist/es2019/{compiled/drawer-panel → drawer-panel}/focus-lock.js +0 -0
- /package/dist/es2019/{hooks → drawer-panel/hooks}/use-prevent-programmatic-scroll.js +0 -0
- /package/dist/es2019/{compiled/types.js → types.js} +0 -0
- /package/dist/esm/{compiled/blanket.compiled.css → blanket.compiled.css} +0 -0
- /package/dist/esm/{compiled/blanket.js → blanket.js} +0 -0
- /package/dist/esm/{compiled/drawer-panel → drawer-panel}/drawer-content.compiled.css +0 -0
- /package/dist/esm/{compiled/drawer-panel → drawer-panel}/drawer-panel.compiled.css +0 -0
- /package/dist/esm/{compiled/drawer-panel → drawer-panel}/drawer-sidebar.compiled.css +0 -0
- /package/dist/esm/{compiled/drawer-panel → drawer-panel}/focus-lock.js +0 -0
- /package/dist/esm/{hooks → drawer-panel/hooks}/use-prevent-programmatic-scroll.js +0 -0
- /package/dist/{es2019/components → esm}/types.js +0 -0
- /package/dist/types/{compiled/blanket.d.ts → blanket.d.ts} +0 -0
- /package/dist/types/{compiled/drawer-panel → drawer-panel}/drawer-close-button.d.ts +0 -0
- /package/dist/types/{compiled/drawer-panel → drawer-panel}/drawer-content.d.ts +0 -0
- /package/dist/types/{compiled/drawer-panel → drawer-panel}/drawer-panel.d.ts +0 -0
- /package/dist/types/{compiled/drawer-panel → drawer-panel}/drawer-sidebar.d.ts +0 -0
- /package/dist/types/{compiled/drawer-panel → drawer-panel}/focus-lock.d.ts +0 -0
- /package/dist/types/{hooks → drawer-panel/hooks}/use-prevent-programmatic-scroll.d.ts +0 -0
- /package/dist/types/{compiled/drawer.d.ts → drawer.d.ts} +0 -0
- /package/dist/types-ts4.5/{compiled/blanket.d.ts → blanket.d.ts} +0 -0
- /package/dist/types-ts4.5/{compiled/drawer-panel → drawer-panel}/drawer-close-button.d.ts +0 -0
- /package/dist/types-ts4.5/{compiled/drawer-panel → drawer-panel}/drawer-content.d.ts +0 -0
- /package/dist/types-ts4.5/{compiled/drawer-panel → drawer-panel}/drawer-panel.d.ts +0 -0
- /package/dist/types-ts4.5/{compiled/drawer-panel → drawer-panel}/drawer-sidebar.d.ts +0 -0
- /package/dist/types-ts4.5/{compiled/drawer-panel → drawer-panel}/focus-lock.d.ts +0 -0
- /package/dist/types-ts4.5/{hooks → drawer-panel/hooks}/use-prevent-programmatic-scroll.d.ts +0 -0
- /package/dist/types-ts4.5/{compiled/drawer.d.ts → drawer.d.ts} +0 -0
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @repo/internal/dom-events/no-unsafe-event-listeners */
|
|
2
|
-
import React, { useCallback, useEffect } from 'react';
|
|
3
|
-
import { canUseDOM } from 'exenv';
|
|
4
|
-
import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next';
|
|
5
|
-
import { Layering, useCloseOnEscapePress } from '@atlaskit/layering';
|
|
6
|
-
import Portal from '@atlaskit/portal';
|
|
7
|
-
import Blanket from './blanket';
|
|
8
|
-
import DrawerPrimitive from './primitives';
|
|
9
|
-
// escape close manager for layering
|
|
10
|
-
const EscapeCloseManager = ({
|
|
11
|
-
onClose
|
|
12
|
-
}) => {
|
|
13
|
-
// wrap so that we can cast the event to a React.KeyboardEvent
|
|
14
|
-
const handleClose = useCallback(evt => {
|
|
15
|
-
onClose && onClose(evt);
|
|
16
|
-
}, [onClose]);
|
|
17
|
-
useCloseOnEscapePress({
|
|
18
|
-
onClose: handleClose
|
|
19
|
-
});
|
|
20
|
-
return /*#__PURE__*/React.createElement("span", null);
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* __Drawer__
|
|
25
|
-
*
|
|
26
|
-
* A drawer is a panel that slides in from the left side of the screen.
|
|
27
|
-
*
|
|
28
|
-
* - [Examples](https://atlassian.design/components/drawer/examples)
|
|
29
|
-
* - [Code](https://atlassian.design/components/drawer/code)
|
|
30
|
-
* - [Usage](https://atlassian.design/components/drawer/usage)
|
|
31
|
-
*/
|
|
32
|
-
const Drawer = ({
|
|
33
|
-
width = 'narrow',
|
|
34
|
-
isOpen,
|
|
35
|
-
isFocusLockEnabled = true,
|
|
36
|
-
shouldReturnFocus = true,
|
|
37
|
-
autoFocusFirstElem = true,
|
|
38
|
-
onKeyDown,
|
|
39
|
-
onClose,
|
|
40
|
-
testId,
|
|
41
|
-
children,
|
|
42
|
-
icon,
|
|
43
|
-
closeLabel,
|
|
44
|
-
scrollContentLabel,
|
|
45
|
-
onCloseComplete,
|
|
46
|
-
onOpenComplete,
|
|
47
|
-
overrides,
|
|
48
|
-
zIndex = 'unset',
|
|
49
|
-
label,
|
|
50
|
-
titleId,
|
|
51
|
-
enterFrom
|
|
52
|
-
}) => {
|
|
53
|
-
const body = canUseDOM ? document.querySelector('body') : undefined;
|
|
54
|
-
const handleClose = usePlatformLeafEventHandler({
|
|
55
|
-
fn: (evt, analyticsEvent) => onClose && onClose(evt, analyticsEvent),
|
|
56
|
-
action: 'dismissed',
|
|
57
|
-
componentName: 'drawer',
|
|
58
|
-
packageName: "@atlaskit/drawer",
|
|
59
|
-
packageVersion: "10.1.5",
|
|
60
|
-
analyticsData: {
|
|
61
|
-
trigger: 'escKey'
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
const handleKeyDown = useCallback(evt => {
|
|
65
|
-
onKeyDown && onKeyDown(evt);
|
|
66
|
-
}, [onKeyDown]);
|
|
67
|
-
useEffect(() => {
|
|
68
|
-
if (isOpen) {
|
|
69
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
70
|
-
}
|
|
71
|
-
return () => {
|
|
72
|
-
window.removeEventListener('keydown', handleKeyDown);
|
|
73
|
-
};
|
|
74
|
-
}, [handleKeyDown, isOpen]);
|
|
75
|
-
const handleBlanketClick = usePlatformLeafEventHandler({
|
|
76
|
-
fn: (evt, analyticsEvent) => onClose && onClose(evt, analyticsEvent),
|
|
77
|
-
action: 'dismissed',
|
|
78
|
-
componentName: 'drawer',
|
|
79
|
-
packageName: "@atlaskit/drawer",
|
|
80
|
-
packageVersion: "10.1.5",
|
|
81
|
-
analyticsData: {
|
|
82
|
-
trigger: 'blanket'
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
const handleBackButtonClick = usePlatformLeafEventHandler({
|
|
86
|
-
fn: (evt, analyticsEvent) => onClose && onClose(evt, analyticsEvent),
|
|
87
|
-
action: 'dismissed',
|
|
88
|
-
componentName: 'drawer',
|
|
89
|
-
packageName: "@atlaskit/drawer",
|
|
90
|
-
packageVersion: "10.1.5",
|
|
91
|
-
analyticsData: {
|
|
92
|
-
trigger: 'backButton'
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
if (!body) {
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
return /*#__PURE__*/React.createElement(Portal, {
|
|
99
|
-
zIndex: zIndex
|
|
100
|
-
}, /*#__PURE__*/React.createElement(Blanket, {
|
|
101
|
-
isOpen: isOpen,
|
|
102
|
-
onBlanketClicked: handleBlanketClick,
|
|
103
|
-
testId: testId && `${testId}--blanket`
|
|
104
|
-
}), /*#__PURE__*/React.createElement(DrawerPrimitive, {
|
|
105
|
-
testId: testId,
|
|
106
|
-
icon: icon,
|
|
107
|
-
closeLabel: closeLabel,
|
|
108
|
-
in: isOpen,
|
|
109
|
-
onClose: handleBackButtonClick,
|
|
110
|
-
onCloseComplete: onCloseComplete,
|
|
111
|
-
onOpenComplete: onOpenComplete,
|
|
112
|
-
width: width,
|
|
113
|
-
enterFrom: enterFrom,
|
|
114
|
-
label: label,
|
|
115
|
-
titleId: titleId
|
|
116
|
-
// eslint-disable-next-line @repo/internal/react/no-unsafe-overrides
|
|
117
|
-
,
|
|
118
|
-
overrides: overrides,
|
|
119
|
-
autoFocusFirstElem: autoFocusFirstElem,
|
|
120
|
-
isFocusLockEnabled: isFocusLockEnabled,
|
|
121
|
-
shouldReturnFocus: shouldReturnFocus,
|
|
122
|
-
scrollContentLabel: scrollContentLabel
|
|
123
|
-
}, isOpen ? /*#__PURE__*/React.createElement(Layering, {
|
|
124
|
-
isDisabled: false
|
|
125
|
-
}, children, /*#__PURE__*/React.createElement(EscapeCloseManager, {
|
|
126
|
-
onClose: handleClose
|
|
127
|
-
})) : children));
|
|
128
|
-
};
|
|
129
|
-
export default Drawer;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
/**
|
|
3
|
-
* @jsxRuntime classic
|
|
4
|
-
* @jsx jsx
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { useEffect, useRef, useState } from 'react';
|
|
8
|
-
|
|
9
|
-
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
10
|
-
import { css, jsx } from '@emotion/react';
|
|
11
|
-
const defaultStyles = {
|
|
12
|
-
flex: 1,
|
|
13
|
-
overflow: 'auto',
|
|
14
|
-
marginTop: "var(--ds-space-300, 24px)"
|
|
15
|
-
};
|
|
16
|
-
const contentCSS = () => defaultStyles;
|
|
17
|
-
const Content = ({
|
|
18
|
-
cssFn,
|
|
19
|
-
scrollContentLabel = 'Scrollable content',
|
|
20
|
-
...props
|
|
21
|
-
}) => {
|
|
22
|
-
const [showContentFocus, setContentFocus] = useState(false);
|
|
23
|
-
const scrollableRef = useRef(null);
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
const setLazyContentFocus = () => {
|
|
26
|
-
const target = scrollableRef.current;
|
|
27
|
-
target && setContentFocus(target.scrollHeight > target.clientHeight);
|
|
28
|
-
};
|
|
29
|
-
setLazyContentFocus();
|
|
30
|
-
}, []);
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* I noticed the implementation at @atlaskit/checkbox would send the props to cssFn rather
|
|
34
|
-
* than the defaultStyles as the overrides guide suggests. I went with what the overrides
|
|
35
|
-
* guide suggested as it made more sense as a transformer of the current styles rather than
|
|
36
|
-
* a complete override with no chance of partially changing styles.
|
|
37
|
-
*/
|
|
38
|
-
return jsx("div", _extends({
|
|
39
|
-
// eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766
|
|
40
|
-
css: css(cssFn(defaultStyles)),
|
|
41
|
-
ref: scrollableRef
|
|
42
|
-
// tabindex is allowed here so that keyboard users can scroll content
|
|
43
|
-
// eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
|
|
44
|
-
,
|
|
45
|
-
tabIndex: showContentFocus ? 0 : undefined,
|
|
46
|
-
role: showContentFocus ? 'region' : undefined,
|
|
47
|
-
"aria-label": showContentFocus ? scrollContentLabel : undefined,
|
|
48
|
-
"data-testid": "drawer-contents"
|
|
49
|
-
// eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
|
|
50
|
-
}, props));
|
|
51
|
-
};
|
|
52
|
-
const contentDefaults = {
|
|
53
|
-
component: Content,
|
|
54
|
-
cssFn: contentCSS
|
|
55
|
-
};
|
|
56
|
-
export default contentDefaults;
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @jsxRuntime classic
|
|
3
|
-
* @jsx jsx
|
|
4
|
-
*/
|
|
5
|
-
import { forwardRef, useCallback } from 'react';
|
|
6
|
-
|
|
7
|
-
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
8
|
-
import { css, jsx } from '@emotion/react';
|
|
9
|
-
import { useMergeRefs } from 'use-callback-ref';
|
|
10
|
-
import { N0 } from '@atlaskit/theme/colors';
|
|
11
|
-
import { CURRENT_SURFACE_CSS_VAR } from '@atlaskit/tokens';
|
|
12
|
-
import usePreventProgrammaticScroll from '../../hooks/use-prevent-programmatic-scroll';
|
|
13
|
-
export const wrapperWidth = {
|
|
14
|
-
full: {
|
|
15
|
-
width: '100vw'
|
|
16
|
-
},
|
|
17
|
-
extended: {
|
|
18
|
-
width: '95vw'
|
|
19
|
-
},
|
|
20
|
-
narrow: {
|
|
21
|
-
width: 360
|
|
22
|
-
},
|
|
23
|
-
medium: {
|
|
24
|
-
width: 480
|
|
25
|
-
},
|
|
26
|
-
wide: {
|
|
27
|
-
width: 600
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
const wrapperStyles = css({
|
|
31
|
-
display: 'flex',
|
|
32
|
-
height: '100vh',
|
|
33
|
-
position: 'fixed',
|
|
34
|
-
zIndex: 500,
|
|
35
|
-
backgroundColor: `var(--ds-surface-overlay, ${N0})`,
|
|
36
|
-
[CURRENT_SURFACE_CSS_VAR]: `var(--ds-surface-overlay, ${N0})`,
|
|
37
|
-
fontFamily: "var(--ds-font-family-body, ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, \"Helvetica Neue\", sans-serif)",
|
|
38
|
-
insetBlockStart: 0,
|
|
39
|
-
insetInlineStart: 0,
|
|
40
|
-
overflow: 'hidden'
|
|
41
|
-
});
|
|
42
|
-
/**
|
|
43
|
-
* A wrapper that controls the styling of the drawer with a few hacks with refs to get our Touch±Scroll locks working.
|
|
44
|
-
*/
|
|
45
|
-
const DrawerWrapper = /*#__PURE__*/forwardRef(({
|
|
46
|
-
children,
|
|
47
|
-
className,
|
|
48
|
-
width = 'narrow',
|
|
49
|
-
testId,
|
|
50
|
-
drawerRef,
|
|
51
|
-
label,
|
|
52
|
-
titleId
|
|
53
|
-
}, scrollRef) => {
|
|
54
|
-
/**
|
|
55
|
-
* We use a callback ref to assign the `<Content />` component to the forwarded `scrollRef`.
|
|
56
|
-
* This ref comes from `react-scrolllock` to allow touch scrolling, eg.: `<ScrollLock><TouchScrollable>{children}</TouchScrollable><ScrollLock>`
|
|
57
|
-
*
|
|
58
|
-
* This is because we do not control the `<Content />` component in order to forward a ref to it (given it can be overriden via `DrawerPrimitiveProps['overrides']['Content']['component']`).
|
|
59
|
-
* Additionally, we target the last child because with `props.overrides.Sidebar.component = () => null` you only have one child.
|
|
60
|
-
* If both `Sidebar.component` and `Content.component` return null you will have no children and this will throw an error, but that doesn't seem valid.
|
|
61
|
-
*/
|
|
62
|
-
const assignSecondChildRef = useCallback(node => {
|
|
63
|
-
var _node$children;
|
|
64
|
-
if (node !== null && node !== void 0 && (_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length && typeof scrollRef === 'function') {
|
|
65
|
-
scrollRef(node.children[node.children.length - 1]);
|
|
66
|
-
}
|
|
67
|
-
}, [scrollRef]);
|
|
68
|
-
const ref = useMergeRefs([drawerRef, assignSecondChildRef]);
|
|
69
|
-
usePreventProgrammaticScroll();
|
|
70
|
-
return jsx("div", {
|
|
71
|
-
css: wrapperStyles
|
|
72
|
-
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
|
|
73
|
-
,
|
|
74
|
-
style: wrapperWidth[width]
|
|
75
|
-
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
|
|
76
|
-
,
|
|
77
|
-
className: className,
|
|
78
|
-
"data-testid": testId,
|
|
79
|
-
ref: ref,
|
|
80
|
-
"aria-modal": true,
|
|
81
|
-
role: "dialog",
|
|
82
|
-
"aria-label": label,
|
|
83
|
-
"aria-labelledby": titleId
|
|
84
|
-
}, children);
|
|
85
|
-
});
|
|
86
|
-
export default DrawerWrapper;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import React, { useEffect } from 'react';
|
|
2
|
-
import ReactFocusLock from 'react-focus-lock';
|
|
3
|
-
import ScrollLock from 'react-scrolllock';
|
|
4
|
-
import invariant from 'tiny-invariant';
|
|
5
|
-
/**
|
|
6
|
-
* __Focus lock__
|
|
7
|
-
*
|
|
8
|
-
* Thin wrapper over react-focus-lock. This wrapper only exists to ensure API compatibility.
|
|
9
|
-
* This component should be deleted during https://ecosystem.atlassian.net/browse/AK-5658
|
|
10
|
-
*/
|
|
11
|
-
const FocusLock = ({
|
|
12
|
-
isFocusLockEnabled = true,
|
|
13
|
-
autoFocusFirstElem = true,
|
|
14
|
-
shouldReturnFocus = true,
|
|
15
|
-
children
|
|
16
|
-
}) => {
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production' && !process.env.CI) {
|
|
19
|
-
invariant(typeof autoFocusFirstElem === 'boolean', '@atlaskit/drawer: Passing a function as autoFocus is deprecated. Instead call focus on the element ref or use the autofocus property.');
|
|
20
|
-
}
|
|
21
|
-
if (typeof autoFocusFirstElem === 'function' && isFocusLockEnabled) {
|
|
22
|
-
const elem = autoFocusFirstElem();
|
|
23
|
-
if (elem && elem.focus) {
|
|
24
|
-
elem.focus();
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}, [autoFocusFirstElem, isFocusLockEnabled]);
|
|
28
|
-
const getFocusTarget = () => {
|
|
29
|
-
if (typeof shouldReturnFocus === 'boolean') {
|
|
30
|
-
return shouldReturnFocus;
|
|
31
|
-
}
|
|
32
|
-
return false;
|
|
33
|
-
};
|
|
34
|
-
const onDeactivation = () => {
|
|
35
|
-
if (typeof shouldReturnFocus !== 'boolean') {
|
|
36
|
-
window.setTimeout(() => {
|
|
37
|
-
var _shouldReturnFocus$cu;
|
|
38
|
-
shouldReturnFocus === null || shouldReturnFocus === void 0 ? void 0 : (_shouldReturnFocus$cu = shouldReturnFocus.current) === null || _shouldReturnFocus$cu === void 0 ? void 0 : _shouldReturnFocus$cu.focus();
|
|
39
|
-
}, 0);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
return /*#__PURE__*/React.createElement(ReactFocusLock, {
|
|
43
|
-
disabled: !isFocusLockEnabled,
|
|
44
|
-
autoFocus: !!autoFocusFirstElem,
|
|
45
|
-
returnFocus: getFocusTarget(),
|
|
46
|
-
onDeactivation: onDeactivation
|
|
47
|
-
}, /*#__PURE__*/React.createElement(ScrollLock, null, children));
|
|
48
|
-
};
|
|
49
|
-
export default FocusLock;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import React, { useCallback, useRef } from 'react';
|
|
3
|
-
import { IconButton } from '@atlaskit/button/new';
|
|
4
|
-
import ArrowLeft from '@atlaskit/icon/core/migration/arrow-left';
|
|
5
|
-
import { ExitingPersistence, SlideIn } from '@atlaskit/motion';
|
|
6
|
-
import { createExtender } from '../utils';
|
|
7
|
-
import ContentOverrides from './content';
|
|
8
|
-
import DrawerWrapper from './drawer-wrapper';
|
|
9
|
-
import FocusLock from './focus-lock';
|
|
10
|
-
import SidebarOverrides from './sidebar';
|
|
11
|
-
|
|
12
|
-
// Misc.
|
|
13
|
-
// ------------------------------
|
|
14
|
-
|
|
15
|
-
const defaults = {
|
|
16
|
-
Sidebar: SidebarOverrides,
|
|
17
|
-
Content: ContentOverrides
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* This wrapper is used to specify separate durations for enter and exit.
|
|
22
|
-
*/
|
|
23
|
-
const CustomSlideIn = ({
|
|
24
|
-
children,
|
|
25
|
-
onFinish,
|
|
26
|
-
enterFrom
|
|
27
|
-
}) => {
|
|
28
|
-
return /*#__PURE__*/React.createElement(SlideIn, {
|
|
29
|
-
animationTimingFunction: "ease-out",
|
|
30
|
-
duration: "small",
|
|
31
|
-
enterFrom: enterFrom,
|
|
32
|
-
exitTo: enterFrom,
|
|
33
|
-
fade: "none",
|
|
34
|
-
onFinish: onFinish
|
|
35
|
-
}, children);
|
|
36
|
-
};
|
|
37
|
-
const DrawerPrimitive = ({
|
|
38
|
-
children,
|
|
39
|
-
icon: Icon,
|
|
40
|
-
closeLabel = 'Close drawer',
|
|
41
|
-
scrollContentLabel,
|
|
42
|
-
onClose,
|
|
43
|
-
onCloseComplete,
|
|
44
|
-
onOpenComplete,
|
|
45
|
-
overrides,
|
|
46
|
-
testId,
|
|
47
|
-
in: isOpen,
|
|
48
|
-
shouldReturnFocus,
|
|
49
|
-
autoFocusFirstElem,
|
|
50
|
-
isFocusLockEnabled,
|
|
51
|
-
width,
|
|
52
|
-
label,
|
|
53
|
-
titleId,
|
|
54
|
-
enterFrom = 'left'
|
|
55
|
-
}) => {
|
|
56
|
-
const getOverrides = createExtender(defaults, overrides);
|
|
57
|
-
const {
|
|
58
|
-
component: Sidebar,
|
|
59
|
-
...sideBarOverrides
|
|
60
|
-
} = getOverrides('Sidebar');
|
|
61
|
-
const {
|
|
62
|
-
component: Content,
|
|
63
|
-
...contentOverrides
|
|
64
|
-
} = getOverrides('Content');
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* A ref to point to our wrapper, passed to `onCloseComplete` and `onOpenComplete` callbacks.
|
|
68
|
-
*/
|
|
69
|
-
const drawerRef = useRef(null);
|
|
70
|
-
const onFinish = useCallback(state => {
|
|
71
|
-
if (state === 'entering') {
|
|
72
|
-
onOpenComplete === null || onOpenComplete === void 0 ? void 0 : onOpenComplete(drawerRef.current);
|
|
73
|
-
} else if (state === 'exiting') {
|
|
74
|
-
onCloseComplete === null || onCloseComplete === void 0 ? void 0 : onCloseComplete(drawerRef.current);
|
|
75
|
-
}
|
|
76
|
-
}, [onCloseComplete, onOpenComplete]);
|
|
77
|
-
return /*#__PURE__*/React.createElement(ExitingPersistence, {
|
|
78
|
-
appear: true
|
|
79
|
-
}, isOpen && /*#__PURE__*/React.createElement(CustomSlideIn, {
|
|
80
|
-
onFinish: onFinish,
|
|
81
|
-
enterFrom: enterFrom
|
|
82
|
-
}, ({
|
|
83
|
-
className
|
|
84
|
-
}) => /*#__PURE__*/React.createElement(FocusLock, {
|
|
85
|
-
autoFocusFirstElem: autoFocusFirstElem,
|
|
86
|
-
isFocusLockEnabled: isFocusLockEnabled,
|
|
87
|
-
shouldReturnFocus: shouldReturnFocus
|
|
88
|
-
}, /*#__PURE__*/React.createElement(DrawerWrapper
|
|
89
|
-
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
|
|
90
|
-
, {
|
|
91
|
-
className: className,
|
|
92
|
-
width: width,
|
|
93
|
-
testId: testId,
|
|
94
|
-
drawerRef: drawerRef,
|
|
95
|
-
label: label,
|
|
96
|
-
titleId: titleId
|
|
97
|
-
}, /*#__PURE__*/React.createElement(Sidebar, sideBarOverrides, /*#__PURE__*/React.createElement(IconButton, {
|
|
98
|
-
onClick: onClose,
|
|
99
|
-
testId: testId && 'DrawerPrimitiveSidebarCloseButton',
|
|
100
|
-
icon: Icon ? iconProps => /*#__PURE__*/React.createElement(Icon, _extends({}, iconProps, {
|
|
101
|
-
size: "large",
|
|
102
|
-
LEGACY_size: "large"
|
|
103
|
-
})) : ArrowLeft,
|
|
104
|
-
label: closeLabel,
|
|
105
|
-
shape: "circle",
|
|
106
|
-
appearance: "subtle"
|
|
107
|
-
})), /*#__PURE__*/React.createElement(Content, _extends({
|
|
108
|
-
scrollContentLabel: scrollContentLabel
|
|
109
|
-
}, contentOverrides), children)))));
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
// eslint-disable-next-line @repo/internal/react/require-jsdoc
|
|
113
|
-
export default DrawerPrimitive;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
/**
|
|
3
|
-
* @jsxRuntime classic
|
|
4
|
-
* @jsx jsx
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
8
|
-
import { css, jsx } from '@emotion/react';
|
|
9
|
-
import { N500 } from '@atlaskit/theme/colors';
|
|
10
|
-
const defaultStyle = {
|
|
11
|
-
alignItems: 'center',
|
|
12
|
-
boxSizing: 'border-box',
|
|
13
|
-
color: `var(--ds-text-subtle, ${N500})`,
|
|
14
|
-
display: 'flex',
|
|
15
|
-
flexShrink: 0,
|
|
16
|
-
flexDirection: 'column',
|
|
17
|
-
height: '100vh',
|
|
18
|
-
paddingBottom: "var(--ds-space-200, 16px)",
|
|
19
|
-
paddingTop: "var(--ds-space-300, 24px)",
|
|
20
|
-
width: "var(--ds-space-800, 64px)"
|
|
21
|
-
};
|
|
22
|
-
const sidebarCSS = () => defaultStyle;
|
|
23
|
-
const Sidebar = ({
|
|
24
|
-
cssFn,
|
|
25
|
-
...props
|
|
26
|
-
}) => {
|
|
27
|
-
// eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @repo/internal/react/no-unsafe-spread-props, @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766
|
|
28
|
-
return jsx("div", _extends({
|
|
29
|
-
css: css(cssFn(defaultStyle))
|
|
30
|
-
}, props));
|
|
31
|
-
};
|
|
32
|
-
const sidebarDefaults = {
|
|
33
|
-
component: Sidebar,
|
|
34
|
-
cssFn: sidebarCSS
|
|
35
|
-
};
|
|
36
|
-
export default sidebarDefaults;
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
// eslint-disable-next-line @repo/internal/react/consistent-types-definitions
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated Please avoid using this function as we intend to remote it in a future release. See DSP-2673 for more information.
|
|
5
|
-
*/
|
|
6
|
-
export const createExtender = function createExtender(defaults,
|
|
7
|
-
/**
|
|
8
|
-
* We're defaulting to an Object.create call here to circumvent
|
|
9
|
-
* the fact that {} can't be reconciled
|
|
10
|
-
* with a type that extends Record<string, any>
|
|
11
|
-
*
|
|
12
|
-
* By doing this, we are intentionally disallowing users
|
|
13
|
-
* from nullifying a particular component in the tree.
|
|
14
|
-
* This can be reverted with additional logic,
|
|
15
|
-
* at such a time as this nullification becomes an actual usecase.
|
|
16
|
-
*/
|
|
17
|
-
overrides = Object.create(Object.prototype)) {
|
|
18
|
-
if (!defaults) {
|
|
19
|
-
throw new Error('a default set of overrides *must* be passed in as the first argument');
|
|
20
|
-
}
|
|
21
|
-
return function getOverrides(key) {
|
|
22
|
-
const {
|
|
23
|
-
cssFn: defaultCssFn,
|
|
24
|
-
component: defaultComponent
|
|
25
|
-
} = defaults[key];
|
|
26
|
-
if (!overrides[key]) {
|
|
27
|
-
return {
|
|
28
|
-
cssFn: defaultCssFn,
|
|
29
|
-
component: defaultComponent
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
const {
|
|
33
|
-
cssFn: customCssFn,
|
|
34
|
-
component: customComponent
|
|
35
|
-
} = overrides[key];
|
|
36
|
-
const composedCssFn = state => {
|
|
37
|
-
return customCssFn(defaultCssFn(state), state);
|
|
38
|
-
};
|
|
39
|
-
return {
|
|
40
|
-
cssFn: customCssFn ? composedCssFn : defaultCssFn,
|
|
41
|
-
component: customComponent || defaultComponent
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { Drawer } from '../compiled/drawer';
|
|
2
|
-
export { DrawerContent } from '../compiled/drawer-panel/drawer-content';
|
|
3
|
-
export { DrawerSidebar } from '../compiled/drawer-panel/drawer-sidebar';
|
|
4
|
-
export { DrawerCloseButton } from '../compiled/drawer-panel/drawer-close-button';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @jsxRuntime classic
|
|
3
|
-
* @jsx jsx
|
|
4
|
-
*/
|
|
5
|
-
import React from 'react';
|
|
6
|
-
|
|
7
|
-
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
8
|
-
import { css, jsx } from '@emotion/react';
|
|
9
|
-
import AkBlanket from '@atlaskit/blanket';
|
|
10
|
-
import { ExitingPersistence, FadeIn } from '@atlaskit/motion';
|
|
11
|
-
var blanketStyles = css({
|
|
12
|
-
position: 'relative'
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A wrapper around `@atlaskit/blanket` that adds a fade in/out transition.
|
|
17
|
-
*/
|
|
18
|
-
var Blanket = function Blanket(_ref) {
|
|
19
|
-
var isOpen = _ref.isOpen,
|
|
20
|
-
onBlanketClicked = _ref.onBlanketClicked,
|
|
21
|
-
testId = _ref.testId;
|
|
22
|
-
return jsx(ExitingPersistence, {
|
|
23
|
-
appear: true
|
|
24
|
-
}, isOpen && jsx(FadeIn
|
|
25
|
-
/**
|
|
26
|
-
* We double the duration because the fade in keyframes have
|
|
27
|
-
* `opacity: 1` at `50%`.
|
|
28
|
-
*
|
|
29
|
-
* The fade out animation uses half the passed duration so it evens out.
|
|
30
|
-
*/, {
|
|
31
|
-
duration: "large"
|
|
32
|
-
/**
|
|
33
|
-
* We don't expose this on `FadeIn` but it does get passed down.
|
|
34
|
-
* TODO: figure out how we want to handle this...
|
|
35
|
-
*/
|
|
36
|
-
// @ts-ignore
|
|
37
|
-
,
|
|
38
|
-
animationTimingFunction: "ease-out"
|
|
39
|
-
}, function (_ref2) {
|
|
40
|
-
var className = _ref2.className;
|
|
41
|
-
return (
|
|
42
|
-
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
|
|
43
|
-
jsx("div", {
|
|
44
|
-
css: blanketStyles,
|
|
45
|
-
className: className
|
|
46
|
-
}, jsx(AkBlanket, {
|
|
47
|
-
isTinted: true,
|
|
48
|
-
onBlanketClicked: onBlanketClicked,
|
|
49
|
-
testId: testId && testId
|
|
50
|
-
}))
|
|
51
|
-
);
|
|
52
|
-
}));
|
|
53
|
-
};
|
|
54
|
-
export default Blanket;
|