@westpac/ui 1.13.1 → 1.15.1
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 +18 -0
- package/dist/component-type.json +1 -1
- package/dist/components/flyout/components/flyout-backdrop/flyout-backdrop.component.d.ts +5 -0
- package/dist/components/flyout/components/flyout-backdrop/flyout-backdrop.component.js +39 -0
- package/dist/components/flyout/components/flyout-backdrop/flyout-backdrop.styles.d.ts +34 -0
- package/dist/components/flyout/components/flyout-backdrop/flyout-backdrop.styles.js +16 -0
- package/dist/components/flyout/components/flyout-backdrop/flyout-backdrop.types.d.ts +30 -0
- package/dist/components/flyout/components/flyout-backdrop/flyout-backdrop.types.js +1 -0
- package/dist/components/flyout/components/flyout-backdrop/index.d.ts +2 -0
- package/dist/components/flyout/components/flyout-backdrop/index.js +1 -0
- package/dist/components/flyout/components/flyout-dialog/flyout-dialog.component.d.ts +5 -0
- package/dist/components/flyout/components/flyout-dialog/flyout-dialog.component.js +67 -0
- package/dist/components/flyout/components/flyout-dialog/flyout-dialog.styles.d.ts +82 -0
- package/dist/components/flyout/components/flyout-dialog/flyout-dialog.styles.js +66 -0
- package/dist/components/flyout/components/flyout-dialog/flyout-dialog.types.d.ts +40 -0
- package/dist/components/flyout/components/flyout-dialog/flyout-dialog.types.js +1 -0
- package/dist/components/flyout/components/flyout-dialog/index.d.ts +2 -0
- package/dist/components/flyout/components/flyout-dialog/index.js +1 -0
- package/dist/components/flyout/components/index.d.ts +2 -0
- package/dist/components/flyout/components/index.js +2 -0
- package/dist/components/flyout/flyout.component.d.ts +2 -0
- package/dist/components/flyout/flyout.component.js +26 -0
- package/dist/components/flyout/flyout.types.d.ts +7 -0
- package/dist/components/flyout/flyout.types.js +1 -0
- package/dist/components/flyout/index.d.ts +2 -0
- package/dist/components/flyout/index.js +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/input-group/input-group.component.js +2 -1
- package/dist/components/pass-code/pass-code.component.js +10 -0
- package/dist/css/westpac-ui.css +43 -0
- package/dist/css/westpac-ui.min.css +43 -0
- package/package.json +4 -1
- package/src/components/flyout/components/flyout-backdrop/flyout-backdrop.component.tsx +49 -0
- package/src/components/flyout/components/flyout-backdrop/flyout-backdrop.styles.ts +17 -0
- package/src/components/flyout/components/flyout-backdrop/flyout-backdrop.types.ts +32 -0
- package/src/components/flyout/components/flyout-backdrop/index.ts +2 -0
- package/src/components/flyout/components/flyout-dialog/flyout-dialog.component.tsx +86 -0
- package/src/components/flyout/components/flyout-dialog/flyout-dialog.styles.ts +59 -0
- package/src/components/flyout/components/flyout-dialog/flyout-dialog.types.ts +44 -0
- package/src/components/flyout/components/flyout-dialog/index.ts +2 -0
- package/src/components/flyout/components/index.ts +2 -0
- package/src/components/flyout/flyout.component.tsx +53 -0
- package/src/components/flyout/flyout.types.ts +9 -0
- package/src/components/flyout/index.ts +2 -0
- package/src/components/index.ts +1 -0
- package/src/components/input-group/input-group.component.tsx +3 -2
- package/src/components/pass-code/pass-code.component.tsx +10 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type FlyoutBackdropProps } from './flyout-backdrop.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @private
|
|
4
|
+
*/
|
|
5
|
+
export declare function FlyoutBackdrop({ children, className, isDismissable, portalContainer, state, zIndex, ...props }: FlyoutBackdropProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useExitAnimation } from '@react-aria/utils';
|
|
3
|
+
import React, { useMemo, useRef } from 'react';
|
|
4
|
+
import { Overlay, useModalOverlay } from 'react-aria';
|
|
5
|
+
import { styles as backdropStyles } from './flyout-backdrop.styles.js';
|
|
6
|
+
export function FlyoutBackdrop({ children, className, isDismissable = true, portalContainer, state, zIndex = 100, ...props }) {
|
|
7
|
+
const ref = useRef(null);
|
|
8
|
+
const isExiting = useExitAnimation(ref, state.isOpen);
|
|
9
|
+
const styles = backdropStyles({
|
|
10
|
+
isOpen: state.isOpen
|
|
11
|
+
});
|
|
12
|
+
const { modalProps, underlayProps } = useModalOverlay({
|
|
13
|
+
isDismissable,
|
|
14
|
+
...props
|
|
15
|
+
}, state, ref);
|
|
16
|
+
const brandContainer = useMemo(()=>{
|
|
17
|
+
if (typeof window !== 'undefined') {
|
|
18
|
+
return document.querySelector('[data-brand]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
|
|
19
|
+
}
|
|
20
|
+
}, []);
|
|
21
|
+
if (!state.isOpen && !isExiting) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return React.createElement(Overlay, {
|
|
25
|
+
isExiting: isExiting,
|
|
26
|
+
portalContainer: portalContainer || brandContainer
|
|
27
|
+
}, React.createElement("div", {
|
|
28
|
+
className: styles.base({
|
|
29
|
+
className
|
|
30
|
+
}),
|
|
31
|
+
style: {
|
|
32
|
+
zIndex
|
|
33
|
+
},
|
|
34
|
+
...underlayProps
|
|
35
|
+
}, children({
|
|
36
|
+
flyoutRef: ref,
|
|
37
|
+
modalProps
|
|
38
|
+
})));
|
|
39
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare const styles: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
isOpen: {
|
|
3
|
+
true: {
|
|
4
|
+
base: string;
|
|
5
|
+
};
|
|
6
|
+
false: {
|
|
7
|
+
base: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
}, {
|
|
11
|
+
base: string;
|
|
12
|
+
}, undefined, {
|
|
13
|
+
isOpen: {
|
|
14
|
+
true: {
|
|
15
|
+
base: string;
|
|
16
|
+
};
|
|
17
|
+
false: {
|
|
18
|
+
base: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}, {
|
|
22
|
+
base: string;
|
|
23
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
24
|
+
isOpen: {
|
|
25
|
+
true: {
|
|
26
|
+
base: string;
|
|
27
|
+
};
|
|
28
|
+
false: {
|
|
29
|
+
base: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
}, {
|
|
33
|
+
base: string;
|
|
34
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const styles = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'fixed inset-0'
|
|
5
|
+
},
|
|
6
|
+
variants: {
|
|
7
|
+
isOpen: {
|
|
8
|
+
true: {
|
|
9
|
+
base: 'animate-fadeIn bg-black/65'
|
|
10
|
+
},
|
|
11
|
+
false: {
|
|
12
|
+
base: 'pointer-events-none'
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type ReactNode, type RefObject } from 'react';
|
|
2
|
+
import { type AriaModalOverlayProps, type useModalOverlay } from 'react-aria';
|
|
3
|
+
import { type OverlayTriggerState } from 'react-stately';
|
|
4
|
+
export type FlyoutBackdropRenderProps = {
|
|
5
|
+
flyoutRef: RefObject<HTMLDivElement>;
|
|
6
|
+
modalProps: ReturnType<typeof useModalOverlay>['modalProps'];
|
|
7
|
+
};
|
|
8
|
+
export type FlyoutBackdropProps = {
|
|
9
|
+
/**
|
|
10
|
+
* Function that renders the flyout dialog within the backdrop
|
|
11
|
+
*/
|
|
12
|
+
children: (props: FlyoutBackdropRenderProps) => ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Additional class name for the backdrop
|
|
15
|
+
*/
|
|
16
|
+
className?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Element where the backdrop will be rendered
|
|
19
|
+
*/
|
|
20
|
+
portalContainer?: Element;
|
|
21
|
+
/**
|
|
22
|
+
* The flyout opening and closing state
|
|
23
|
+
*/
|
|
24
|
+
state: OverlayTriggerState;
|
|
25
|
+
/**
|
|
26
|
+
* z-index of the backdrop
|
|
27
|
+
* @default 100
|
|
28
|
+
*/
|
|
29
|
+
zIndex?: number;
|
|
30
|
+
} & AriaModalOverlayProps;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FlyoutBackdrop } from './flyout-backdrop.component.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type FlyoutDialogInternalProps } from './flyout-dialog.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @private
|
|
4
|
+
*/
|
|
5
|
+
export declare function FlyoutDialog({ children, className, closeAssistiveText, flyoutRef, heading, headingTag: HeadingTag, isOpen, modalProps, onClose, position, ...props }: FlyoutDialogInternalProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEnterAnimation } from '@react-aria/utils';
|
|
3
|
+
import { clsx } from 'clsx';
|
|
4
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { mergeProps, useDialog } from 'react-aria';
|
|
6
|
+
import { Button } from '../../../button/index.js';
|
|
7
|
+
import { CloseIcon } from '../../../icon/index.js';
|
|
8
|
+
import { styles as dialogStyles } from './flyout-dialog.styles.js';
|
|
9
|
+
export function FlyoutDialog({ children, className, closeAssistiveText = 'Close flyout', flyoutRef, heading, headingTag: HeadingTag = 'h2', isOpen, modalProps, onClose, position = 'right', ...props }) {
|
|
10
|
+
const isEntering = useEnterAnimation(flyoutRef);
|
|
11
|
+
const styles = dialogStyles({
|
|
12
|
+
isEntering,
|
|
13
|
+
isOpen,
|
|
14
|
+
position
|
|
15
|
+
});
|
|
16
|
+
const { dialogProps, titleProps } = useDialog(props, flyoutRef);
|
|
17
|
+
const [scrolled, setScrolled] = useState(false);
|
|
18
|
+
const listRef = useRef(null);
|
|
19
|
+
useEffect(()=>{
|
|
20
|
+
var _listRef_current;
|
|
21
|
+
const element = listRef.current;
|
|
22
|
+
if (!element) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const listener = ()=>{
|
|
26
|
+
var _listRef_current;
|
|
27
|
+
const y = ((_listRef_current = listRef.current) === null || _listRef_current === void 0 ? void 0 : _listRef_current.scrollTop) || 0;
|
|
28
|
+
setScrolled(y > 0);
|
|
29
|
+
};
|
|
30
|
+
listRef === null || listRef === void 0 ? void 0 : (_listRef_current = listRef.current) === null || _listRef_current === void 0 ? void 0 : _listRef_current.addEventListener('scroll', listener);
|
|
31
|
+
return ()=>{
|
|
32
|
+
var _listRef_current;
|
|
33
|
+
listRef === null || listRef === void 0 ? void 0 : (_listRef_current = listRef.current) === null || _listRef_current === void 0 ? void 0 : _listRef_current.removeEventListener('scroll', listener);
|
|
34
|
+
};
|
|
35
|
+
}, []);
|
|
36
|
+
return React.createElement("div", {
|
|
37
|
+
...mergeProps(modalProps, dialogProps, props),
|
|
38
|
+
"aria-hidden": !isOpen || undefined,
|
|
39
|
+
className: styles.base({
|
|
40
|
+
className
|
|
41
|
+
}),
|
|
42
|
+
ref: flyoutRef
|
|
43
|
+
}, React.createElement("div", {
|
|
44
|
+
className: styles.content()
|
|
45
|
+
}, React.createElement("div", {
|
|
46
|
+
className: clsx(styles.header(), {
|
|
47
|
+
'shadow-[0_2px_5px_rgba(0,0,0,0.3)]': scrolled
|
|
48
|
+
})
|
|
49
|
+
}, heading && React.createElement(HeadingTag, {
|
|
50
|
+
...titleProps,
|
|
51
|
+
className: styles.heading()
|
|
52
|
+
}, heading), onClose && React.createElement(Button, {
|
|
53
|
+
"aria-label": closeAssistiveText,
|
|
54
|
+
className: styles.button(),
|
|
55
|
+
iconAfter: ()=>React.createElement(CloseIcon, {
|
|
56
|
+
color: "primary",
|
|
57
|
+
size: "medium",
|
|
58
|
+
"aria-hidden": true
|
|
59
|
+
}),
|
|
60
|
+
look: "link",
|
|
61
|
+
onClick: onClose,
|
|
62
|
+
type: "button"
|
|
63
|
+
})), React.createElement("div", {
|
|
64
|
+
className: styles.body(),
|
|
65
|
+
ref: listRef
|
|
66
|
+
}, children)));
|
|
67
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export declare const styles: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
isEntering: {
|
|
3
|
+
true: {};
|
|
4
|
+
};
|
|
5
|
+
isOpen: {
|
|
6
|
+
true: {
|
|
7
|
+
base: string;
|
|
8
|
+
};
|
|
9
|
+
false: {
|
|
10
|
+
content: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
position: {
|
|
14
|
+
left: {
|
|
15
|
+
base: string;
|
|
16
|
+
};
|
|
17
|
+
right: {
|
|
18
|
+
base: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}, {
|
|
22
|
+
base: string;
|
|
23
|
+
body: string;
|
|
24
|
+
button: string;
|
|
25
|
+
content: string;
|
|
26
|
+
header: string;
|
|
27
|
+
heading: string;
|
|
28
|
+
}, undefined, {
|
|
29
|
+
isEntering: {
|
|
30
|
+
true: {};
|
|
31
|
+
};
|
|
32
|
+
isOpen: {
|
|
33
|
+
true: {
|
|
34
|
+
base: string;
|
|
35
|
+
};
|
|
36
|
+
false: {
|
|
37
|
+
content: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
position: {
|
|
41
|
+
left: {
|
|
42
|
+
base: string;
|
|
43
|
+
};
|
|
44
|
+
right: {
|
|
45
|
+
base: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}, {
|
|
49
|
+
base: string;
|
|
50
|
+
body: string;
|
|
51
|
+
button: string;
|
|
52
|
+
content: string;
|
|
53
|
+
header: string;
|
|
54
|
+
heading: string;
|
|
55
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
56
|
+
isEntering: {
|
|
57
|
+
true: {};
|
|
58
|
+
};
|
|
59
|
+
isOpen: {
|
|
60
|
+
true: {
|
|
61
|
+
base: string;
|
|
62
|
+
};
|
|
63
|
+
false: {
|
|
64
|
+
content: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
position: {
|
|
68
|
+
left: {
|
|
69
|
+
base: string;
|
|
70
|
+
};
|
|
71
|
+
right: {
|
|
72
|
+
base: string;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
}, {
|
|
76
|
+
base: string;
|
|
77
|
+
body: string;
|
|
78
|
+
button: string;
|
|
79
|
+
content: string;
|
|
80
|
+
header: string;
|
|
81
|
+
heading: string;
|
|
82
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const styles = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'fixed inset-y-0 flex w-50 flex-col bg-background-white transition-transform duration-500 ease-[cubic-bezier(0.23,1,0.32,1)]',
|
|
5
|
+
body: 'min-h-0 flex-1 overflow-auto',
|
|
6
|
+
button: 'ml-auto shrink-0',
|
|
7
|
+
content: 'flex h-full flex-col',
|
|
8
|
+
header: 'flex h-9 w-full shrink-0 items-center pl-2',
|
|
9
|
+
heading: 'min-w-0 typography-body-10 font-bold text-text-body'
|
|
10
|
+
},
|
|
11
|
+
variants: {
|
|
12
|
+
isEntering: {
|
|
13
|
+
true: {}
|
|
14
|
+
},
|
|
15
|
+
isOpen: {
|
|
16
|
+
true: {
|
|
17
|
+
base: 'translate-x-0'
|
|
18
|
+
},
|
|
19
|
+
false: {
|
|
20
|
+
content: 'hidden'
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
position: {
|
|
24
|
+
left: {
|
|
25
|
+
base: 'left-0 border-r border-border-muted-soft'
|
|
26
|
+
},
|
|
27
|
+
right: {
|
|
28
|
+
base: 'right-0 border-l border-border-muted-soft'
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
compoundSlots: [
|
|
33
|
+
{
|
|
34
|
+
slots: [
|
|
35
|
+
'base'
|
|
36
|
+
],
|
|
37
|
+
isOpen: false,
|
|
38
|
+
position: 'left',
|
|
39
|
+
className: '-translate-x-full'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
slots: [
|
|
43
|
+
'base'
|
|
44
|
+
],
|
|
45
|
+
isOpen: false,
|
|
46
|
+
position: 'right',
|
|
47
|
+
className: 'translate-x-full'
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
slots: [
|
|
51
|
+
'base'
|
|
52
|
+
],
|
|
53
|
+
isEntering: true,
|
|
54
|
+
position: 'left',
|
|
55
|
+
className: '-translate-x-full'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
slots: [
|
|
59
|
+
'base'
|
|
60
|
+
],
|
|
61
|
+
isEntering: true,
|
|
62
|
+
position: 'right',
|
|
63
|
+
className: 'translate-x-full'
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode, type RefObject } from 'react';
|
|
2
|
+
import { type AriaDialogProps, type useModalOverlay } from 'react-aria';
|
|
3
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
4
|
+
import { styles } from './flyout-dialog.styles.js';
|
|
5
|
+
type Variants = VariantProps<typeof styles>;
|
|
6
|
+
export type FlyoutDialogProps = {
|
|
7
|
+
/**
|
|
8
|
+
* Flyout content
|
|
9
|
+
*/
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
/**
|
|
12
|
+
* Assistive text for the close button
|
|
13
|
+
* @default Close flyout
|
|
14
|
+
*/
|
|
15
|
+
closeAssistiveText?: string;
|
|
16
|
+
/**
|
|
17
|
+
* The heading of the flyout
|
|
18
|
+
*/
|
|
19
|
+
heading?: ReactNode;
|
|
20
|
+
/**
|
|
21
|
+
* The flyout heading tag may be overridden for semantic reasons
|
|
22
|
+
* @default h2
|
|
23
|
+
*/
|
|
24
|
+
headingTag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
25
|
+
/**
|
|
26
|
+
* Called when the close button is pressed
|
|
27
|
+
*/
|
|
28
|
+
onClose?: () => void;
|
|
29
|
+
/**
|
|
30
|
+
* Side of the page from which the flyout opens
|
|
31
|
+
* @default right
|
|
32
|
+
*/
|
|
33
|
+
position?: Variants['position'];
|
|
34
|
+
} & AriaDialogProps & HTMLAttributes<HTMLDivElement>;
|
|
35
|
+
export type FlyoutDialogInternalProps = FlyoutDialogProps & {
|
|
36
|
+
flyoutRef: RefObject<HTMLDivElement>;
|
|
37
|
+
isOpen: boolean;
|
|
38
|
+
modalProps: ReturnType<typeof useModalOverlay>['modalProps'];
|
|
39
|
+
};
|
|
40
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FlyoutDialog } from './flyout-dialog.component.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { type FlyoutProps } from './flyout.types.js';
|
|
2
|
+
export declare function Flyout({ backdropClassName, children, className, closeAssistiveText, heading, headingTag, isDismissable, isKeyboardDismissDisabled, portalContainer, position, shouldCloseOnInteractOutside, state, zIndex, ...props }: FlyoutProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { FlyoutBackdrop, FlyoutDialog } from './components/index.js';
|
|
4
|
+
export function Flyout({ backdropClassName, children, className, closeAssistiveText, heading, headingTag, isDismissable = true, isKeyboardDismissDisabled, portalContainer, position = 'right', shouldCloseOnInteractOutside, state, zIndex, ...props }) {
|
|
5
|
+
return React.createElement(FlyoutBackdrop, {
|
|
6
|
+
className: backdropClassName,
|
|
7
|
+
isDismissable: isDismissable,
|
|
8
|
+
isKeyboardDismissDisabled: isKeyboardDismissDisabled,
|
|
9
|
+
portalContainer: portalContainer,
|
|
10
|
+
shouldCloseOnInteractOutside: shouldCloseOnInteractOutside,
|
|
11
|
+
state: state,
|
|
12
|
+
zIndex: zIndex
|
|
13
|
+
}, ({ flyoutRef, modalProps })=>React.createElement(FlyoutDialog, {
|
|
14
|
+
...props,
|
|
15
|
+
className: className,
|
|
16
|
+
closeAssistiveText: closeAssistiveText,
|
|
17
|
+
flyoutRef: flyoutRef,
|
|
18
|
+
heading: heading,
|
|
19
|
+
headingTag: headingTag,
|
|
20
|
+
isOpen: state.isOpen,
|
|
21
|
+
modalProps: modalProps,
|
|
22
|
+
onClose: isDismissable ? ()=>state.close() : undefined,
|
|
23
|
+
position: position,
|
|
24
|
+
key: position
|
|
25
|
+
}, children));
|
|
26
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type FlyoutBackdropProps, type FlyoutDialogProps } from './components/index.js';
|
|
2
|
+
export type FlyoutProps = Omit<FlyoutBackdropProps, 'children' | 'className'> & Omit<FlyoutDialogProps, 'onClose'> & {
|
|
3
|
+
/**
|
|
4
|
+
* Additional class name for the backdrop
|
|
5
|
+
*/
|
|
6
|
+
backdropClassName?: string;
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Flyout } from './flyout.component.js';
|
package/dist/components/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import React, { Children, cloneElement, isValidElement, useCallback, useId, useMemo } from 'react';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
4
|
import { useBreakpoint } from '../../hook/breakpoints.hook.js';
|
|
4
5
|
import { resolveResponsiveVariant } from '../../utils/breakpoint.util.js';
|
|
5
6
|
import { ErrorMessage, Hint, Label } from '../index.js';
|
|
@@ -81,7 +82,7 @@ export function InputGroup({ label, hideLabel, size = 'medium', hint, errorMessa
|
|
|
81
82
|
'aria-labelledby': ariaLabelledBy,
|
|
82
83
|
'aria-describedby': ariaDescribedBy || ariaDescribedByValue,
|
|
83
84
|
'aria-label': ariaLabel,
|
|
84
|
-
className: 'focus:z-10',
|
|
85
|
+
className: twMerge('focus:z-10', child.props.className),
|
|
85
86
|
...resolvedWidth !== 'full' ? {
|
|
86
87
|
width: resolvedWidth
|
|
87
88
|
} : {}
|
|
@@ -47,6 +47,9 @@ export const PassCode = forwardRef(({ length, value, onChange, onComplete, onPas
|
|
|
47
47
|
if (index + validData.length < length) {
|
|
48
48
|
var _inputRefs_current_;
|
|
49
49
|
(_inputRefs_current_ = inputRefs.current[index + validData.length]) === null || _inputRefs_current_ === void 0 ? void 0 : _inputRefs_current_.focus();
|
|
50
|
+
} else {
|
|
51
|
+
var _inputRefs_current_1;
|
|
52
|
+
(_inputRefs_current_1 = inputRefs.current[index + validData.length - 1]) === null || _inputRefs_current_1 === void 0 ? void 0 : _inputRefs_current_1.focus();
|
|
50
53
|
}
|
|
51
54
|
if (newPasscode.filter((passcode)=>!passcode).length === 0 && onComplete) {
|
|
52
55
|
onComplete(newPasscode.join(''));
|
|
@@ -80,6 +83,13 @@ export const PassCode = forwardRef(({ length, value, onChange, onComplete, onPas
|
|
|
80
83
|
} else {
|
|
81
84
|
setInternalPasscode(newPasscode);
|
|
82
85
|
}
|
|
86
|
+
if (index + validData.length < length) {
|
|
87
|
+
var _inputRefs_current_;
|
|
88
|
+
(_inputRefs_current_ = inputRefs.current[index + validData.length]) === null || _inputRefs_current_ === void 0 ? void 0 : _inputRefs_current_.focus();
|
|
89
|
+
} else {
|
|
90
|
+
var _inputRefs_current_1;
|
|
91
|
+
(_inputRefs_current_1 = inputRefs.current[index + validData.length - 1]) === null || _inputRefs_current_1 === void 0 ? void 0 : _inputRefs_current_1.focus();
|
|
92
|
+
}
|
|
83
93
|
if (newPasscode.filter((passcode)=>!passcode).length === 0) {
|
|
84
94
|
if (onPasteComplete) {
|
|
85
95
|
onPasteComplete(newPasscode.join(''));
|
package/dist/css/westpac-ui.css
CHANGED
|
@@ -769,6 +769,9 @@
|
|
|
769
769
|
.h-8 {
|
|
770
770
|
height: calc(0.375rem * 8);
|
|
771
771
|
}
|
|
772
|
+
.h-9 {
|
|
773
|
+
height: calc(0.375rem * 9);
|
|
774
|
+
}
|
|
772
775
|
.h-10 {
|
|
773
776
|
height: calc(0.375rem * 10);
|
|
774
777
|
}
|
|
@@ -781,6 +784,9 @@
|
|
|
781
784
|
.h-30 {
|
|
782
785
|
height: calc(0.375rem * 30);
|
|
783
786
|
}
|
|
787
|
+
.h-50 {
|
|
788
|
+
height: calc(0.375rem * 50);
|
|
789
|
+
}
|
|
784
790
|
.h-\[0\.625rem\] {
|
|
785
791
|
height: 0.625rem;
|
|
786
792
|
}
|
|
@@ -979,6 +985,12 @@
|
|
|
979
985
|
.w-23 {
|
|
980
986
|
width: calc(0.375rem * 23);
|
|
981
987
|
}
|
|
988
|
+
.w-50 {
|
|
989
|
+
width: calc(0.375rem * 50);
|
|
990
|
+
}
|
|
991
|
+
.w-70 {
|
|
992
|
+
width: calc(0.375rem * 70);
|
|
993
|
+
}
|
|
982
994
|
.w-\[1\.81ex\] {
|
|
983
995
|
width: 1.81ex;
|
|
984
996
|
}
|
|
@@ -1348,6 +1360,14 @@
|
|
|
1348
1360
|
.shrink-0 {
|
|
1349
1361
|
flex-shrink: 0;
|
|
1350
1362
|
}
|
|
1363
|
+
.-translate-x-full {
|
|
1364
|
+
--tw-translate-x: -100%;
|
|
1365
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1366
|
+
}
|
|
1367
|
+
.translate-x-0 {
|
|
1368
|
+
--tw-translate-x: calc(0.375rem * 0);
|
|
1369
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1370
|
+
}
|
|
1351
1371
|
.translate-x-\[-2\.5px\] {
|
|
1352
1372
|
--tw-translate-x: -2.5px;
|
|
1353
1373
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -1360,6 +1380,10 @@
|
|
|
1360
1380
|
--tw-translate-x: 14px;
|
|
1361
1381
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1362
1382
|
}
|
|
1383
|
+
.translate-x-full {
|
|
1384
|
+
--tw-translate-x: 100%;
|
|
1385
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1386
|
+
}
|
|
1363
1387
|
.-translate-y-1\/2 {
|
|
1364
1388
|
--tw-translate-y: calc(calc(1/2 * 100%) * -1);
|
|
1365
1389
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -1542,6 +1566,13 @@
|
|
|
1542
1566
|
margin-inline-end: calc(calc(0.375rem * 1) * calc(1 - var(--tw-space-x-reverse)));
|
|
1543
1567
|
}
|
|
1544
1568
|
}
|
|
1569
|
+
.space-x-4 {
|
|
1570
|
+
:where(& > :not(:last-child)) {
|
|
1571
|
+
--tw-space-x-reverse: 0;
|
|
1572
|
+
margin-inline-start: calc(calc(0.375rem * 4) * var(--tw-space-x-reverse));
|
|
1573
|
+
margin-inline-end: calc(calc(0.375rem * 4) * calc(1 - var(--tw-space-x-reverse)));
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1545
1576
|
.divide-y {
|
|
1546
1577
|
:where(& > :not(:last-child)) {
|
|
1547
1578
|
--tw-divide-y-reverse: 0;
|
|
@@ -3150,6 +3181,10 @@
|
|
|
3150
3181
|
--tw-shadow: 0 0.375rem 0.75rem var(--tw-shadow-color, rgba(0,0,0,0.175));
|
|
3151
3182
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
3152
3183
|
}
|
|
3184
|
+
.shadow-\[0_2px_5px_rgba\(0\,0\,0\,0\.3\)\] {
|
|
3185
|
+
--tw-shadow: 0 2px 5px var(--tw-shadow-color, rgba(0,0,0,0.3));
|
|
3186
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
3187
|
+
}
|
|
3153
3188
|
.shadow-\[0_2px_12px_rgba\(0\,0\,0\,0\.2\)\] {
|
|
3154
3189
|
--tw-shadow: 0 2px 12px var(--tw-shadow-color, rgba(0,0,0,0.2));
|
|
3155
3190
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -3309,6 +3344,10 @@
|
|
|
3309
3344
|
--tw-duration: 300ms;
|
|
3310
3345
|
transition-duration: 300ms;
|
|
3311
3346
|
}
|
|
3347
|
+
.duration-500 {
|
|
3348
|
+
--tw-duration: 500ms;
|
|
3349
|
+
transition-duration: 500ms;
|
|
3350
|
+
}
|
|
3312
3351
|
.duration-\[\.3s\] {
|
|
3313
3352
|
--tw-duration: .3s;
|
|
3314
3353
|
transition-duration: .3s;
|
|
@@ -3317,6 +3356,10 @@
|
|
|
3317
3356
|
--tw-duration: .6s;
|
|
3318
3357
|
transition-duration: .6s;
|
|
3319
3358
|
}
|
|
3359
|
+
.ease-\[cubic-bezier\(0\.23\,1\,0\.32\,1\)\] {
|
|
3360
|
+
--tw-ease: cubic-bezier(0.23,1,0.32,1);
|
|
3361
|
+
transition-timing-function: cubic-bezier(0.23,1,0.32,1);
|
|
3362
|
+
}
|
|
3320
3363
|
.ease-\[cubic-bezier\(0\.25\,0\.1\,0\.25\,1\)\] {
|
|
3321
3364
|
--tw-ease: cubic-bezier(0.25,0.1,0.25,1);
|
|
3322
3365
|
transition-timing-function: cubic-bezier(0.25,0.1,0.25,1);
|