28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
import { LayoutEdge, type LayoutNode } from './layout/node.js'
|
|
|
|
/**
|
|
* Returns the yoga node's content width (computed width minus padding and
|
|
* border).
|
|
*
|
|
* Warning: can return a value WIDER than the parent container. In a
|
|
* column-direction flex parent, width is the cross axis — align-items:
|
|
* stretch never shrinks children below their intrinsic size, so the text
|
|
* node overflows (standard CSS behavior). Yoga measures leaf nodes in two
|
|
* passes: the AtMost pass determines width, the Exactly pass determines
|
|
* height. getComputedWidth() reflects the wider AtMost result while
|
|
* getComputedHeight() reflects the narrower Exactly result. Callers that
|
|
* use this for wrapping should clamp to actual available screen space so
|
|
* the rendered line count stays consistent with the layout height.
|
|
*/
|
|
const getMaxWidth = (yogaNode: LayoutNode): number => {
|
|
return (
|
|
yogaNode.getComputedWidth() -
|
|
yogaNode.getComputedPadding(LayoutEdge.Left) -
|
|
yogaNode.getComputedPadding(LayoutEdge.Right) -
|
|
yogaNode.getComputedBorder(LayoutEdge.Left) -
|
|
yogaNode.getComputedBorder(LayoutEdge.Right)
|
|
)
|
|
}
|
|
|
|
export default getMaxWidth
|