@khanacademy/wonder-blocks-floating 0.0.0-PR2842-20251029173610 → 0.0.0-PR2842-20251030173407
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 +1 -1
- package/dist/components/floating.d.ts +25 -11
- package/dist/es/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,11 +10,6 @@ type FloatingProps = {
|
|
|
10
10
|
* The content to display in the floating element.
|
|
11
11
|
*/
|
|
12
12
|
content: React.ReactNode;
|
|
13
|
-
/**
|
|
14
|
-
* The padding to apply between the floating element and its boundary.
|
|
15
|
-
* @default 8
|
|
16
|
-
*/
|
|
17
|
-
boundaryPadding?: number;
|
|
18
13
|
/**
|
|
19
14
|
* The placement of the floating element relative to the reference element.
|
|
20
15
|
* @default "top"
|
|
@@ -41,12 +36,19 @@ type FloatingProps = {
|
|
|
41
36
|
*/
|
|
42
37
|
testId?: string;
|
|
43
38
|
/**
|
|
44
|
-
*
|
|
39
|
+
* Whether to flip the floating element to the opposite side if there's not
|
|
40
|
+
* enough space.
|
|
41
|
+
*
|
|
42
|
+
* This middleware hanges the placement of the floating element to keep it
|
|
43
|
+
* in view.
|
|
45
44
|
* @default true
|
|
46
45
|
*/
|
|
47
46
|
flip?: boolean;
|
|
48
47
|
/**
|
|
49
|
-
* Whether to hide the floating element when the reference element is
|
|
48
|
+
* Whether to hide the floating element when the reference element is
|
|
49
|
+
* hidden.
|
|
50
|
+
*
|
|
51
|
+
* Allows to visually hide the floating element when it is out of bounds.
|
|
50
52
|
* @default true
|
|
51
53
|
*/
|
|
52
54
|
hide?: boolean;
|
|
@@ -56,7 +58,7 @@ type FloatingProps = {
|
|
|
56
58
|
*/
|
|
57
59
|
offset?: number;
|
|
58
60
|
/**
|
|
59
|
-
*
|
|
61
|
+
* Whether to shift the floating element along the axis to keep it in view.
|
|
60
62
|
* @default true
|
|
61
63
|
*/
|
|
62
64
|
shift?: boolean;
|
|
@@ -68,8 +70,20 @@ type FloatingProps = {
|
|
|
68
70
|
};
|
|
69
71
|
/**
|
|
70
72
|
* A component that uses the Floating UI library to position a floating element
|
|
71
|
-
* relative to a reference element.
|
|
72
|
-
*
|
|
73
|
+
* relative to a reference element.
|
|
74
|
+
*
|
|
75
|
+
* Please take a look at the
|
|
76
|
+
* [Accessibility](?path=/docs/packages-floating-floating-accessibility--docs)
|
|
77
|
+
* section for more information.
|
|
78
|
+
*
|
|
79
|
+
* ## Usage
|
|
80
|
+
* ```tsx
|
|
81
|
+
* import {Floating} from "@khanacademy/wonder-blocks-floating";
|
|
82
|
+
*
|
|
83
|
+
* <Floating content="Floating content" open={true}>
|
|
84
|
+
* <Button>Trigger</Button>
|
|
85
|
+
* </Floating>
|
|
86
|
+
* ```
|
|
73
87
|
*/
|
|
74
|
-
export default function Floating({ content, children,
|
|
88
|
+
export default function Floating({ content, children, placement, open, onOpenChange, strategy, testId, hide: hideProp, offset: offsetProp, flip: flipProp, shift: shiftProp, showArrow, }: FloatingProps): React.JSX.Element;
|
|
75
89
|
export {};
|
package/dist/es/index.js
CHANGED
|
@@ -11,6 +11,6 @@ const ARROW_SIZE_INLINE=20;const ARROW_SIZE_BLOCK=10;
|
|
|
11
11
|
|
|
12
12
|
const Arrow=React.forwardRef(function Arrow({context},ref){const style=context.placement.endsWith("top")?{filter:`drop-shadow(0 4px 2px ${semanticColor.core.shadow.transparent.mid})`}:undefined;return jsx(FloatingArrow,{ref:ref,context:context,fill:semanticColor.core.background.base.default,stroke:semanticColor.core.border.neutral.subtle,strokeWidth:1,width:ARROW_SIZE_INLINE,height:ARROW_SIZE_BLOCK,style:style})});
|
|
13
13
|
|
|
14
|
-
const StyledDiv=addStyle("div");function Floating({content,children,
|
|
14
|
+
const StyledDiv=addStyle("div");const SHIFT_PADDING=12;function Floating({content,children,placement="top",open=false,onOpenChange,strategy="absolute",testId,hide:hideProp=true,offset:offsetProp=20,flip:flipProp=true,shift:shiftProp=true,showArrow=true}){const arrowRef=React.useRef(null);const prevOpenRef=React.useRef(open??false);const{refs,floatingStyles,context,middlewareData}=useFloating({open,onOpenChange,placement,strategy,whileElementsMounted:autoUpdate,middleware:[offset({mainAxis:offsetProp}),flipProp?flip():undefined,shiftProp?shift({padding:SHIFT_PADDING,crossAxis:true}):undefined,showArrow?arrow({element:arrowRef}):undefined,hideProp?hide():undefined]});React.useEffect(()=>{if(prevOpenRef.current!==open){onOpenChange?.(open);prevOpenRef.current=open;}},[onOpenChange,open]);const trigger=React.useMemo(()=>{return React.cloneElement(children,{ref:refs.setReference})},[children,refs.setReference]);return jsxs(Fragment,{children:[trigger,open&&jsxs(StyledDiv,{"data-testid":testId,"data-placement":placement,ref:refs.setFloating,style:[styles.floating,floatingStyles,{visibility:middlewareData.hide?.referenceHidden?"hidden":"visible"}],children:[content,showArrow&&jsx(Arrow,{ref:arrowRef,context:context})]})]})}const styles=StyleSheet.create({floating:{background:semanticColor.core.background.base.default,border:`solid ${border.width.thin} ${semanticColor.core.border.neutral.subtle}`,borderRadius:border.radius.radius_040,maxInlineSize:472,minBlockSize:ARROW_SIZE_INLINE,boxShadow:boxShadow.mid,justifyContent:"center"}});
|
|
15
15
|
|
|
16
16
|
export { Floating };
|
package/dist/index.js
CHANGED
|
@@ -34,6 +34,6 @@ const ARROW_SIZE_INLINE=20;const ARROW_SIZE_BLOCK=10;
|
|
|
34
34
|
|
|
35
35
|
const Arrow=React__namespace.forwardRef(function Arrow({context},ref){const style=context.placement.endsWith("top")?{filter:`drop-shadow(0 4px 2px ${wonderBlocksTokens.semanticColor.core.shadow.transparent.mid})`}:undefined;return jsxRuntime.jsx(react.FloatingArrow,{ref:ref,context:context,fill:wonderBlocksTokens.semanticColor.core.background.base.default,stroke:wonderBlocksTokens.semanticColor.core.border.neutral.subtle,strokeWidth:1,width:ARROW_SIZE_INLINE,height:ARROW_SIZE_BLOCK,style:style})});
|
|
36
36
|
|
|
37
|
-
const StyledDiv=addStyle("div");function Floating({content,children,
|
|
37
|
+
const StyledDiv=addStyle("div");const SHIFT_PADDING=12;function Floating({content,children,placement="top",open=false,onOpenChange,strategy="absolute",testId,hide:hideProp=true,offset:offsetProp=20,flip:flipProp=true,shift:shiftProp=true,showArrow=true}){const arrowRef=React__namespace.useRef(null);const prevOpenRef=React__namespace.useRef(open??false);const{refs,floatingStyles,context,middlewareData}=react.useFloating({open,onOpenChange,placement,strategy,whileElementsMounted:react.autoUpdate,middleware:[react.offset({mainAxis:offsetProp}),flipProp?react.flip():undefined,shiftProp?react.shift({padding:SHIFT_PADDING,crossAxis:true}):undefined,showArrow?react.arrow({element:arrowRef}):undefined,hideProp?react.hide():undefined]});React__namespace.useEffect(()=>{if(prevOpenRef.current!==open){onOpenChange?.(open);prevOpenRef.current=open;}},[onOpenChange,open]);const trigger=React__namespace.useMemo(()=>{return React__namespace.cloneElement(children,{ref:refs.setReference})},[children,refs.setReference]);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[trigger,open&&jsxRuntime.jsxs(StyledDiv,{"data-testid":testId,"data-placement":placement,ref:refs.setFloating,style:[styles.floating,floatingStyles,{visibility:middlewareData.hide?.referenceHidden?"hidden":"visible"}],children:[content,showArrow&&jsxRuntime.jsx(Arrow,{ref:arrowRef,context:context})]})]})}const styles=aphrodite.StyleSheet.create({floating:{background:wonderBlocksTokens.semanticColor.core.background.base.default,border:`solid ${wonderBlocksTokens.border.width.thin} ${wonderBlocksTokens.semanticColor.core.border.neutral.subtle}`,borderRadius:wonderBlocksTokens.border.radius.radius_040,maxInlineSize:472,minBlockSize:ARROW_SIZE_INLINE,boxShadow:wonderBlocksTokens.boxShadow.mid,justifyContent:"center"}});
|
|
38
38
|
|
|
39
39
|
exports.Floating = Floating;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "A package that provides support for floating UI components in our UIs, including portal and focus management support.",
|
|
4
4
|
"author": "Khan Academy",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.0.0-PR2842-
|
|
6
|
+
"version": "0.0.0-PR2842-20251030173407",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public"
|
|
9
9
|
},
|