@mapples/components 1.2.0 → 1.2.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/dist/components/actions/ButtonGroup/index.d.ts +7 -6
- package/dist/components/actions/ButtonGroup/index.d.ts.map +1 -1
- package/dist/components/actions/ButtonGroup/index.js +15 -29
- package/dist/components/actions/ButtonGroup/index.js.map +1 -1
- package/dist/internal/overlay/OverlayRoot.d.ts +6 -3
- package/dist/internal/overlay/OverlayRoot.d.ts.map +1 -1
- package/dist/internal/overlay/OverlayRoot.js +17 -7
- package/dist/internal/overlay/OverlayRoot.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ import { ButtonGroupDirection } from './types';
|
|
|
5
5
|
export interface ButtonGroupProps extends ViewProps {
|
|
6
6
|
/** Main axis. Defaults to `row`. */
|
|
7
7
|
direction?: ButtonGroupDirection;
|
|
8
|
-
/** Gives each
|
|
8
|
+
/** Gives each `Button` in a row the same share of it. Defaults to `true`. */
|
|
9
9
|
equal?: boolean;
|
|
10
10
|
/** Space between children in points. Defaults to `8`. */
|
|
11
11
|
gap?: number;
|
|
@@ -18,15 +18,16 @@ export interface ButtonGroupProps extends ViewProps {
|
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* A row or column of `Button` children with a shared gap
|
|
22
|
-
* equal
|
|
23
|
-
*
|
|
21
|
+
* A row or column of `Button` children with a shared gap. In a row each
|
|
22
|
+
* button takes an equal share of the width by default ("Cancel" /
|
|
23
|
+
* "Confirm", "Sign in" / "Sign up"); in a column each spans it. The buttons
|
|
24
|
+
* size themselves from the group's context, so no per-button prop is needed.
|
|
24
25
|
*
|
|
25
26
|
* @example
|
|
26
27
|
* ```tsx
|
|
27
28
|
* <ButtonGroup>
|
|
28
|
-
* <Button label="Cancel" variant="outlined"
|
|
29
|
-
* <Button label="Confirm" variant="filled"
|
|
29
|
+
* <Button label="Cancel" variant="outlined" onPress={close} />
|
|
30
|
+
* <Button label="Confirm" variant="filled" onPress={confirm} />
|
|
30
31
|
* </ButtonGroup>
|
|
31
32
|
* ```
|
|
32
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/actions/ButtonGroup/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/actions/ButtonGroup/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,qCAAqC;AACrC,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,oCAAoC;IACpC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,MAAM,CAAC,EAAE;QACP,iBAAiB;QACjB,KAAK,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;KAC/B,CAAC;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,WAAW;;wCAwChB,CAAC;AAGF,eAAe,WAAW,CAAC"}
|
|
@@ -1,53 +1,39 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { forwardRef, useMemo } from 'react';
|
|
2
2
|
import { StyledView } from '@mapples/style';
|
|
3
|
+
import { ButtonGroupContext } from '@mapples/ui';
|
|
3
4
|
/**
|
|
4
|
-
* A row or column of `Button` children with a shared gap
|
|
5
|
-
* equal
|
|
6
|
-
*
|
|
5
|
+
* A row or column of `Button` children with a shared gap. In a row each
|
|
6
|
+
* button takes an equal share of the width by default ("Cancel" /
|
|
7
|
+
* "Confirm", "Sign in" / "Sign up"); in a column each spans it. The buttons
|
|
8
|
+
* size themselves from the group's context, so no per-button prop is needed.
|
|
7
9
|
*
|
|
8
10
|
* @example
|
|
9
11
|
* ```tsx
|
|
10
12
|
* <ButtonGroup>
|
|
11
|
-
* <Button label="Cancel" variant="outlined"
|
|
12
|
-
* <Button label="Confirm" variant="filled"
|
|
13
|
+
* <Button label="Cancel" variant="outlined" onPress={close} />
|
|
14
|
+
* <Button label="Confirm" variant="filled" onPress={confirm} />
|
|
13
15
|
* </ButtonGroup>
|
|
14
16
|
* ```
|
|
15
17
|
*
|
|
16
18
|
* @public
|
|
17
19
|
*/
|
|
18
20
|
const ButtonGroup = forwardRef(({ direction = 'row', equal = true, gap = 8, fullWidth = true, styled, children, ...rest }, ref) => {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// drop-area child still lays its elements out along the same axis.
|
|
23
|
-
const cell = row
|
|
24
|
-
? {
|
|
25
|
-
flexGrow: 1,
|
|
26
|
-
flexShrink: 1,
|
|
27
|
-
flexBasis: fullWidth ? 0 : 'auto',
|
|
28
|
-
minWidth: 0,
|
|
29
|
-
flexDirection: 'row',
|
|
30
|
-
alignItems: 'center',
|
|
31
|
-
gap,
|
|
32
|
-
}
|
|
33
|
-
: { alignSelf: 'stretch', flexDirection: 'column', gap };
|
|
34
|
-
return (<StyledView ref={ref} styled={{
|
|
21
|
+
const group = useMemo(() => ({ direction, equal, fill: fullWidth }), [direction, equal, fullWidth]);
|
|
22
|
+
return (<ButtonGroupContext.Provider value={group}>
|
|
23
|
+
<StyledView ref={ref} styled={{
|
|
35
24
|
style: [
|
|
36
25
|
{
|
|
37
26
|
flexDirection: direction,
|
|
38
|
-
alignItems: row ? 'center' : 'stretch',
|
|
27
|
+
alignItems: direction === 'row' ? 'center' : 'stretch',
|
|
39
28
|
alignSelf: fullWidth ? 'stretch' : 'flex-start',
|
|
40
29
|
gap,
|
|
41
30
|
},
|
|
42
31
|
styled?.style,
|
|
43
32
|
],
|
|
44
33
|
}} {...rest}>
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
typeof child === 'boolean' ? null : (<StyledView styled={{ style: cell }}>{child}</StyledView>))
|
|
49
|
-
: children}
|
|
50
|
-
</StyledView>);
|
|
34
|
+
{children}
|
|
35
|
+
</StyledView>
|
|
36
|
+
</ButtonGroupContext.Provider>);
|
|
51
37
|
});
|
|
52
38
|
ButtonGroup.displayName = 'ButtonGroup';
|
|
53
39
|
export default ButtonGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/actions/ButtonGroup/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/actions/ButtonGroup/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,EAAc,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,aAAa,CAAC;AAsB1E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,GAAG,UAAU,CAC5B,CACE,EACE,SAAS,GAAG,KAAK,EACjB,KAAK,GAAG,IAAI,EACZ,GAAG,GAAG,CAAC,EACP,SAAS,GAAG,IAAI,EAChB,MAAM,EACN,QAAQ,EACR,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE;IACF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC7C,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAC9B,CAAC;IAEF,OAAO,CACL,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CACxC;QAAA,CAAC,UAAU,CACT,GAAG,CAAC,CAAC,GAAG,CAAC,CACT,MAAM,CAAC,CAAC;YACN,KAAK,EAAE;gBACL;oBACE,aAAa,EAAE,SAAS;oBACxB,UAAU,EAAE,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;oBACtD,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;oBAC/C,GAAG;iBACJ;gBACD,MAAM,EAAE,KAAK;aACd;SACF,CAAC,CACF,IAAI,IAAI,CAAC,CAET;UAAA,CAAC,QAAQ,CACX;QAAA,EAAE,UAAU,CACd;MAAA,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAC/B,CAAC;AACJ,CAAC,CACF,CAAC;AACF,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAExC,eAAe,WAAW,CAAC"}
|
|
@@ -29,9 +29,12 @@ export interface OverlayRootProps {
|
|
|
29
29
|
* The shared root of Dialog, BottomSheet, ActionSheet and Snackbar. It is the
|
|
30
30
|
* component's OWN outer view: `position: absolute` with every inset at 0, so
|
|
31
31
|
* it covers the parent it is placed in — the page root, which the canvas
|
|
32
|
-
* keeps at least a device tall and a built app keeps one screen tall.
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* keeps at least a device tall and a built app keeps one screen tall. The
|
|
33
|
+
* layer is also at least one viewport tall (a web page may scroll): the
|
|
34
|
+
* device height when a style provider declares canvas dimensions, the window
|
|
35
|
+
* height otherwise. The window is wrong on the canvas — a browser window is
|
|
36
|
+
* taller than a phone frame, so centred and bottom content landed below the
|
|
37
|
+
* frame. A hidden overlay renders nothing once its exit animation has played.
|
|
35
38
|
*/
|
|
36
39
|
declare const OverlayRoot: import("react").ForwardRefExoticComponent<OverlayRootProps & {
|
|
37
40
|
children?: import("react").ReactNode | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayRoot.d.ts","sourceRoot":"","sources":["../../../src/internal/overlay/OverlayRoot.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"OverlayRoot.d.ts","sourceRoot":"","sources":["../../../src/internal/overlay/OverlayRoot.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAmC,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAIL,IAAI,EACJ,SAAS,EACV,MAAM,cAAc,CAAC;AAMtB,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AACvD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,iFAAiF;IACjF,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,0CAA0C;IAC1C,KAAK,EAAE,YAAY,CAAC;IACpB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,gEAAgE;IAChE,KAAK,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9B,iCAAiC;IACjC,aAAa,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;;;;;;;;GAUG;AACH,QAAA,MAAM,WAAW;;wCAoFhB,CAAC;AAoBF,eAAe,WAAW,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { forwardRef, useMemo } from 'react';
|
|
2
|
-
import { StyledView, useStyled } from '@mapples/style';
|
|
2
|
+
import { StyledView, useStyle, useStyled } from '@mapples/style';
|
|
3
3
|
import { useTones } from '@mapples/ui';
|
|
4
4
|
import { Animated, StyleSheet, useWindowDimensions, } from 'react-native';
|
|
5
5
|
import useOverlayPresence from '../useOverlayPresence';
|
|
@@ -9,14 +9,19 @@ const OVERLAY_Z_INDEX = 1000;
|
|
|
9
9
|
* The shared root of Dialog, BottomSheet, ActionSheet and Snackbar. It is the
|
|
10
10
|
* component's OWN outer view: `position: absolute` with every inset at 0, so
|
|
11
11
|
* it covers the parent it is placed in — the page root, which the canvas
|
|
12
|
-
* keeps at least a device tall and a built app keeps one screen tall.
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* keeps at least a device tall and a built app keeps one screen tall. The
|
|
13
|
+
* layer is also at least one viewport tall (a web page may scroll): the
|
|
14
|
+
* device height when a style provider declares canvas dimensions, the window
|
|
15
|
+
* height otherwise. The window is wrong on the canvas — a browser window is
|
|
16
|
+
* taller than a phone frame, so centred and bottom content landed below the
|
|
17
|
+
* frame. A hidden overlay renders nothing once its exit animation has played.
|
|
15
18
|
*/
|
|
16
19
|
const OverlayRoot = forwardRef(({ visible, align, enter, backdrop = true, dismissOnBackdrop = true, onDismiss, style, styleBackdrop, zIndex = OVERLAY_Z_INDEX, modal = false, testID, children, }, ref) => {
|
|
17
20
|
const { mounted, progress } = useOverlayPresence(visible);
|
|
18
21
|
const tones = useTones();
|
|
19
22
|
const { height: windowHeight } = useWindowDimensions();
|
|
23
|
+
const { _canvas } = useStyle();
|
|
24
|
+
const viewportHeight = _canvas ? _canvas.height : windowHeight;
|
|
20
25
|
const contentStyle = useMemo(() => {
|
|
21
26
|
const scale = progress.interpolate({
|
|
22
27
|
inputRange: [0, 1],
|
|
@@ -45,7 +50,7 @@ const OverlayRoot = forwardRef(({ visible, align, enter, backdrop = true, dismis
|
|
|
45
50
|
return (<StyledView ref={ref} testID={testID} pointerEvents={backdrop ? 'auto' : 'box-none'} accessibilityViewIsModal={modal} styled={{
|
|
46
51
|
style: [
|
|
47
52
|
StyleSheet.absoluteFill,
|
|
48
|
-
{ zIndex, minHeight:
|
|
53
|
+
{ zIndex, minHeight: viewportHeight },
|
|
49
54
|
alignStyles[align],
|
|
50
55
|
resolvedRoot.root,
|
|
51
56
|
],
|
|
@@ -62,10 +67,15 @@ const alignStyles = {
|
|
|
62
67
|
bottom: { justifyContent: 'flex-end', alignItems: 'stretch' },
|
|
63
68
|
top: { justifyContent: 'flex-start', alignItems: 'stretch' },
|
|
64
69
|
};
|
|
70
|
+
// Edge-aligned content fills the layer and sits at its edge, so a percent
|
|
71
|
+
// height on the content (BottomSheet's `maxHeight: '80%'`) resolves against
|
|
72
|
+
// the layer. Sized to its content instead, the wrapper made the sheet cap
|
|
73
|
+
// itself at 80% of its OWN height — shrunk, lifted off the bottom edge, with
|
|
74
|
+
// the scrim showing underneath. `box-none` keeps the empty part tappable.
|
|
65
75
|
const alignContent = {
|
|
66
76
|
center: { width: '100%', alignItems: 'center', padding: 24 },
|
|
67
|
-
bottom: { width: '100%' },
|
|
68
|
-
top: { width: '100%' },
|
|
77
|
+
bottom: { width: '100%', flex: 1, justifyContent: 'flex-end' },
|
|
78
|
+
top: { width: '100%', flex: 1, justifyContent: 'flex-start' },
|
|
69
79
|
};
|
|
70
80
|
export default OverlayRoot;
|
|
71
81
|
//# sourceMappingURL=OverlayRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayRoot.js","sourceRoot":"","sources":["../../../src/internal/overlay/OverlayRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,EAAc,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"OverlayRoot.js","sourceRoot":"","sources":["../../../src/internal/overlay/OverlayRoot.tsx"],"names":[],"mappings":"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"}
|