@graphprotocol/gds-react 0.1.2 → 0.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/GDSContext.d.ts +13 -0
- package/dist/GDSContext.d.ts.map +1 -0
- package/dist/GDSContext.js +4 -0
- package/dist/GDSContext.js.map +1 -0
- package/dist/GDSProvider.d.ts +13 -19
- package/dist/GDSProvider.d.ts.map +1 -1
- package/dist/GDSProvider.js +14 -11
- package/dist/GDSProvider.js.map +1 -1
- package/dist/components/Address.js +2 -2
- package/dist/components/Address.meta.d.ts +1 -13
- package/dist/components/Address.meta.d.ts.map +1 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar.js +3 -11
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Avatar.meta.d.ts +0 -2
- package/dist/components/Avatar.meta.d.ts.map +1 -1
- package/dist/components/AvatarGroup.meta.d.ts +8 -2
- package/dist/components/AvatarGroup.meta.d.ts.map +1 -1
- package/dist/components/Breadcrumbs.meta.d.ts +2 -3
- package/dist/components/Breadcrumbs.meta.d.ts.map +1 -1
- package/dist/components/Breadcrumbs.meta.js +3 -1
- package/dist/components/Breadcrumbs.meta.js.map +1 -1
- package/dist/components/Breadcrumbs.parts.d.ts.map +1 -1
- package/dist/components/Breadcrumbs.parts.js +13 -21
- package/dist/components/Breadcrumbs.parts.js.map +1 -1
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.js +70 -69
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Button.meta.d.ts +1 -4
- package/dist/components/Button.meta.d.ts.map +1 -1
- package/dist/components/ButtonGroup.d.ts.map +1 -1
- package/dist/components/ButtonGroup.js +1 -5
- package/dist/components/ButtonGroup.js.map +1 -1
- package/dist/components/ButtonGroup.meta.d.ts +1 -5
- package/dist/components/ButtonGroup.meta.d.ts.map +1 -1
- package/dist/components/ButtonGroup.meta.js +8 -0
- package/dist/components/ButtonGroup.meta.js.map +1 -1
- package/dist/components/Card.js +2 -2
- package/dist/components/Card.js.map +1 -1
- package/dist/components/Card.meta.d.ts +1 -2
- package/dist/components/Card.meta.d.ts.map +1 -1
- package/dist/components/Card.meta.js +1 -0
- package/dist/components/Card.meta.js.map +1 -1
- package/dist/components/Checkbox.meta.d.ts +1 -6
- package/dist/components/Checkbox.meta.d.ts.map +1 -1
- package/dist/components/Checkbox.meta.js +1 -5
- package/dist/components/Checkbox.meta.js.map +1 -1
- package/dist/components/Chip.meta.d.ts +2 -4
- package/dist/components/Chip.meta.d.ts.map +1 -1
- package/dist/components/Chip.parts.d.ts.map +1 -1
- package/dist/components/Chip.parts.js +1 -9
- package/dist/components/Chip.parts.js.map +1 -1
- package/dist/components/Cluster.meta.d.ts +8 -2
- package/dist/components/Cluster.meta.d.ts.map +1 -1
- package/dist/components/CodeBlock.d.ts +1 -1
- package/dist/components/CodeBlock.meta.d.ts +2 -4
- package/dist/components/CodeBlock.meta.d.ts.map +1 -1
- package/dist/components/CodeBlock.parts.d.ts +6 -7
- package/dist/components/CodeBlock.parts.d.ts.map +1 -1
- package/dist/components/CodeBlock.parts.js +28 -10
- package/dist/components/CodeBlock.parts.js.map +1 -1
- package/dist/components/CodeInline.js +3 -3
- package/dist/components/CodeInline.meta.d.ts +1 -1
- package/dist/components/CodeInline.meta.d.ts.map +1 -1
- package/dist/components/CopyButton.d.ts +1 -1
- package/dist/components/CopyButton.d.ts.map +1 -1
- package/dist/components/CopyButton.js +46 -21
- package/dist/components/CopyButton.js.map +1 -1
- package/dist/components/CopyButton.meta.d.ts +1 -12
- package/dist/components/CopyButton.meta.d.ts.map +1 -1
- package/dist/components/CopyButton.meta.js +1 -6
- package/dist/components/CopyButton.meta.js.map +1 -1
- package/dist/components/CurrencyInput.meta.d.ts +1 -6
- package/dist/components/CurrencyInput.meta.d.ts.map +1 -1
- package/dist/components/CurrencyInput.meta.js +1 -5
- package/dist/components/CurrencyInput.meta.js.map +1 -1
- package/dist/components/DescriptionList.meta.d.ts +2 -5
- package/dist/components/DescriptionList.meta.d.ts.map +1 -1
- package/dist/components/DescriptionList.parts.d.ts +3 -0
- package/dist/components/DescriptionList.parts.d.ts.map +1 -1
- package/dist/components/DescriptionList.parts.js +1 -0
- package/dist/components/DescriptionList.parts.js.map +1 -1
- package/dist/components/Divider.meta.d.ts +1 -3
- package/dist/components/Divider.meta.d.ts.map +1 -1
- package/dist/components/Icon.js +4 -4
- package/dist/components/Icon.js.map +1 -1
- package/dist/components/Icon.meta.d.ts +0 -2
- package/dist/components/Icon.meta.d.ts.map +1 -1
- package/dist/components/Icon.meta.js +1 -0
- package/dist/components/Icon.meta.js.map +1 -1
- package/dist/components/Input.d.ts +5 -4
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Input.js +3 -2
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Input.meta.d.ts +1 -6
- package/dist/components/Input.meta.d.ts.map +1 -1
- package/dist/components/Input.meta.js +1 -5
- package/dist/components/Input.meta.js.map +1 -1
- package/dist/components/Keyboard.js +1 -1
- package/dist/components/Keyboard.meta.d.ts +0 -1
- package/dist/components/Keyboard.meta.d.ts.map +1 -1
- package/dist/components/Label.meta.d.ts +1 -3
- package/dist/components/Label.meta.d.ts.map +1 -1
- package/dist/components/Link.d.ts +1 -1
- package/dist/components/Link.d.ts.map +1 -1
- package/dist/components/Link.js +3 -4
- package/dist/components/Link.js.map +1 -1
- package/dist/components/Link.meta.d.ts +1 -2
- package/dist/components/Link.meta.d.ts.map +1 -1
- package/dist/components/Link.meta.js +1 -0
- package/dist/components/Link.meta.js.map +1 -1
- package/dist/components/Menu.meta.d.ts +31 -2
- package/dist/components/Menu.meta.d.ts.map +1 -1
- package/dist/components/Menu.meta.js +39 -1
- package/dist/components/Menu.meta.js.map +1 -1
- package/dist/components/Menu.parts.d.ts +22 -32
- package/dist/components/Menu.parts.d.ts.map +1 -1
- package/dist/components/Menu.parts.js +286 -300
- package/dist/components/Menu.parts.js.map +1 -1
- package/dist/components/Modal.d.ts +1 -1
- package/dist/components/Modal.meta.d.ts +1 -3
- package/dist/components/Modal.meta.d.ts.map +1 -1
- package/dist/components/Modal.meta.js +1 -1
- package/dist/components/Modal.meta.js.map +1 -1
- package/dist/components/Modal.parts.d.ts +14 -15
- package/dist/components/Modal.parts.d.ts.map +1 -1
- package/dist/components/Modal.parts.js +20 -20
- package/dist/components/Modal.parts.js.map +1 -1
- package/dist/components/OTCInput.js +1 -1
- package/dist/components/OTCInput.meta.d.ts +1 -6
- package/dist/components/OTCInput.meta.d.ts.map +1 -1
- package/dist/components/OTCInput.meta.js +1 -5
- package/dist/components/OTCInput.meta.js.map +1 -1
- package/dist/components/Pane.d.ts +9 -0
- package/dist/components/Pane.d.ts.map +1 -0
- package/dist/components/Pane.js +8 -0
- package/dist/components/Pane.js.map +1 -0
- package/dist/components/Pane.meta.d.ts +20 -0
- package/dist/components/Pane.meta.d.ts.map +1 -0
- package/dist/components/Pane.meta.js +30 -0
- package/dist/components/Pane.meta.js.map +1 -0
- package/dist/components/Pane.parts.d.ts +77 -0
- package/dist/components/Pane.parts.d.ts.map +1 -0
- package/dist/components/Pane.parts.js +412 -0
- package/dist/components/Pane.parts.js.map +1 -0
- package/dist/components/Radio.meta.d.ts +1 -6
- package/dist/components/Radio.meta.d.ts.map +1 -1
- package/dist/components/Radio.meta.js +1 -5
- package/dist/components/Radio.meta.js.map +1 -1
- package/dist/components/Search.js +1 -1
- package/dist/components/Search.meta.d.ts +1 -3
- package/dist/components/Search.meta.d.ts.map +1 -1
- package/dist/components/SegmentedControl.meta.d.ts +2 -3
- package/dist/components/SegmentedControl.meta.d.ts.map +1 -1
- package/dist/components/SegmentedControl.meta.js +3 -1
- package/dist/components/SegmentedControl.meta.js.map +1 -1
- package/dist/components/SegmentedControl.parts.d.ts.map +1 -1
- package/dist/components/SegmentedControl.parts.js +4 -9
- package/dist/components/SegmentedControl.parts.js.map +1 -1
- package/dist/components/Status.meta.d.ts +0 -2
- package/dist/components/Status.meta.d.ts.map +1 -1
- package/dist/components/Stepper.meta.d.ts +1 -2
- package/dist/components/Stepper.meta.d.ts.map +1 -1
- package/dist/components/Stepper.meta.js +1 -0
- package/dist/components/Stepper.meta.js.map +1 -1
- package/dist/components/Stepper.parts.d.ts.map +1 -1
- package/dist/components/Stepper.parts.js +1 -1
- package/dist/components/Stepper.parts.js.map +1 -1
- package/dist/components/Switch.meta.d.ts +1 -6
- package/dist/components/Switch.meta.d.ts.map +1 -1
- package/dist/components/Switch.meta.js +1 -5
- package/dist/components/Switch.meta.js.map +1 -1
- package/dist/components/TabSet.meta.d.ts +2 -5
- package/dist/components/TabSet.meta.d.ts.map +1 -1
- package/dist/components/TabSet.meta.js +3 -1
- package/dist/components/TabSet.meta.js.map +1 -1
- package/dist/components/Tag.meta.d.ts +0 -2
- package/dist/components/Tag.meta.d.ts.map +1 -1
- package/dist/components/TextArea.meta.d.ts +1 -6
- package/dist/components/TextArea.meta.d.ts.map +1 -1
- package/dist/components/TextArea.meta.js +1 -5
- package/dist/components/TextArea.meta.js.map +1 -1
- package/dist/components/ToggleButton.js +2 -2
- package/dist/components/ToggleButton.js.map +1 -1
- package/dist/components/ToggleButton.meta.d.ts +1 -12
- package/dist/components/ToggleButton.meta.d.ts.map +1 -1
- package/dist/components/ToggleButton.meta.js +1 -6
- package/dist/components/ToggleButton.meta.js.map +1 -1
- package/dist/components/Tooltip.d.ts +2 -2
- package/dist/components/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip.js +2 -2
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/components/Tooltip.meta.d.ts +12 -7
- package/dist/components/Tooltip.meta.d.ts.map +1 -1
- package/dist/components/Tooltip.meta.js +13 -2
- package/dist/components/Tooltip.meta.js.map +1 -1
- package/dist/components/Tooltip.parts.d.ts +31 -22
- package/dist/components/Tooltip.parts.d.ts.map +1 -1
- package/dist/components/Tooltip.parts.js +127 -98
- package/dist/components/Tooltip.parts.js.map +1 -1
- package/dist/components/base/Addon.meta.d.ts +1 -1
- package/dist/components/base/Addon.meta.d.ts.map +1 -1
- package/dist/components/base/Addon.meta.js +3 -1
- package/dist/components/base/Addon.meta.js.map +1 -1
- package/dist/components/base/ButtonOrLink.d.ts +2 -2
- package/dist/components/base/ButtonOrLink.d.ts.map +1 -1
- package/dist/components/base/ButtonOrLink.parts.d.ts +14 -6
- package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
- package/dist/components/base/ButtonOrLink.parts.js +54 -65
- package/dist/components/base/ButtonOrLink.parts.js.map +1 -1
- package/dist/components/base/Checkable.meta.d.ts +1 -2
- package/dist/components/base/Checkable.meta.d.ts.map +1 -1
- package/dist/components/base/Checkable.parts.d.ts +6 -6
- package/dist/components/base/Checkable.parts.d.ts.map +1 -1
- package/dist/components/base/Checkable.parts.js +2 -2
- package/dist/components/base/Checkable.parts.js.map +1 -1
- package/dist/components/base/Field.meta.d.ts +1 -2
- package/dist/components/base/Field.meta.d.ts.map +1 -1
- package/dist/components/base/Field.parts.d.ts +5 -4
- package/dist/components/base/Field.parts.d.ts.map +1 -1
- package/dist/components/base/Field.parts.js +1 -1
- package/dist/components/base/Field.parts.js.map +1 -1
- package/dist/components/base/MaybeButtonOrLink.d.ts +20 -3
- package/dist/components/base/MaybeButtonOrLink.d.ts.map +1 -1
- package/dist/components/base/MaybeButtonOrLink.js +5 -3
- package/dist/components/base/MaybeButtonOrLink.js.map +1 -1
- package/dist/components/base/Portal.d.ts +1 -1
- package/dist/components/base/Portal.d.ts.map +1 -1
- package/dist/components/base/Portal.js +3 -6
- package/dist/components/base/Portal.js.map +1 -1
- package/dist/components/base/Presence.d.ts +157 -0
- package/dist/components/base/Presence.d.ts.map +1 -0
- package/dist/components/base/Presence.js +808 -0
- package/dist/components/base/Presence.js.map +1 -0
- package/dist/components/base/Render.d.ts +21 -6
- package/dist/components/base/Render.d.ts.map +1 -1
- package/dist/components/base/Render.js +3 -2
- package/dist/components/base/Render.js.map +1 -1
- package/dist/components/base/Transition.js +2 -2
- package/dist/components/base/Transition.meta.d.ts +1 -1
- package/dist/components/base/Transition.meta.d.ts.map +1 -1
- package/dist/components/base/Transition.meta.js +1 -0
- package/dist/components/base/Transition.meta.js.map +1 -1
- package/dist/components/base/index.d.ts +2 -2
- package/dist/components/base/index.d.ts.map +1 -1
- package/dist/components/base/index.js +2 -2
- package/dist/components/base/index.js.map +1 -1
- package/dist/components/index.d.ts +3 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +3 -1
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useCSSProp.d.ts.map +1 -1
- package/dist/hooks/useCSSProp.js +7 -7
- package/dist/hooks/useCSSProp.js.map +1 -1
- package/dist/hooks/useCSSProps.d.ts +11 -13
- package/dist/hooks/useCSSProps.d.ts.map +1 -1
- package/dist/hooks/useCSSProps.js +11 -19
- package/dist/hooks/useCSSProps.js.map +1 -1
- package/dist/hooks/useCSSPropsPolyfill.d.ts +1 -1
- package/dist/hooks/useCSSPropsPolyfill.d.ts.map +1 -1
- package/dist/hooks/useCSSPropsPolyfill.js +12 -20
- package/dist/hooks/useCSSPropsPolyfill.js.map +1 -1
- package/dist/hooks/useCSSState.d.ts.map +1 -1
- package/dist/hooks/useCSSState.js +7 -3
- package/dist/hooks/useCSSState.js.map +1 -1
- package/dist/hooks/useControlled.d.ts.map +1 -1
- package/dist/hooks/useControlled.js +6 -4
- package/dist/hooks/useControlled.js.map +1 -1
- package/dist/hooks/useEffectWithRefDeps.d.ts +2 -2
- package/dist/hooks/useEffectWithRefDeps.d.ts.map +1 -1
- package/dist/hooks/useEffectWithRefDeps.js +1 -1
- package/dist/hooks/useEffectWithRefDeps.js.map +1 -1
- package/dist/hooks/useFirstRender.d.ts +14 -0
- package/dist/hooks/useFirstRender.d.ts.map +1 -0
- package/dist/hooks/useFirstRender.js +20 -0
- package/dist/hooks/useFirstRender.js.map +1 -0
- package/dist/hooks/useGDS.d.ts +1 -1
- package/dist/hooks/useGDS.js +1 -1
- package/dist/hooks/useGDS.js.map +1 -1
- package/dist/hooks/usePrevious.d.ts +6 -4
- package/dist/hooks/usePrevious.d.ts.map +1 -1
- package/dist/hooks/usePrevious.js +6 -4
- package/dist/hooks/usePrevious.js.map +1 -1
- package/dist/hooks/useRefWithInit.d.ts +2 -2
- package/dist/hooks/useRefWithInit.d.ts.map +1 -1
- package/dist/hooks/useRefWithInit.js.map +1 -1
- package/dist/hooks/useStyleObserver.d.ts +2 -2
- package/dist/hooks/useStyleObserver.d.ts.map +1 -1
- package/dist/hooks/useStyleObserver.js +1 -1
- package/dist/hooks/useStyleObserver.js.map +1 -1
- package/dist/icons/CalendarDynamicIcon.d.ts +8 -5
- package/dist/icons/CalendarDynamicIcon.d.ts.map +1 -1
- package/dist/icons/CalendarDynamicIcon.js +5 -2
- package/dist/icons/CalendarDynamicIcon.js.map +1 -1
- package/dist/icons/CopyInteractiveIcon.d.ts +5 -4
- package/dist/icons/CopyInteractiveIcon.d.ts.map +1 -1
- package/dist/icons/CopyInteractiveIcon.js +2 -2
- package/dist/icons/CopyInteractiveIcon.js.map +1 -1
- package/dist/icons/SidebarLeftInteractiveIcon.d.ts +4 -3
- package/dist/icons/SidebarLeftInteractiveIcon.d.ts.map +1 -1
- package/dist/icons/SidebarLeftInteractiveIcon.js +2 -2
- package/dist/icons/SidebarLeftInteractiveIcon.js.map +1 -1
- package/dist/icons/SidebarRightInteractiveIcon.d.ts +4 -3
- package/dist/icons/SidebarRightInteractiveIcon.d.ts.map +1 -1
- package/dist/icons/SidebarRightInteractiveIcon.js +2 -2
- package/dist/icons/SidebarRightInteractiveIcon.js.map +1 -1
- package/dist/tailwind-plugin.d.ts.map +1 -1
- package/dist/tailwind-plugin.js +8 -5
- package/dist/tailwind-plugin.js.map +1 -1
- package/dist/utils/InlineCounter.d.ts +3 -0
- package/dist/utils/InlineCounter.d.ts.map +1 -0
- package/dist/utils/InlineCounter.js +7 -0
- package/dist/utils/InlineCounter.js.map +1 -0
- package/dist/utils/RenderCount.d.ts +3 -0
- package/dist/utils/RenderCount.d.ts.map +1 -0
- package/dist/utils/RenderCount.js +7 -0
- package/dist/utils/RenderCount.js.map +1 -0
- package/dist/utils/cn.d.ts +3 -1
- package/dist/utils/cn.d.ts.map +1 -1
- package/dist/utils/cn.js +3 -1
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/getCSSPropsAttributes.d.ts +10 -3
- package/dist/utils/getCSSPropsAttributes.d.ts.map +1 -1
- package/dist/utils/getCSSPropsAttributes.js +4 -5
- package/dist/utils/getCSSPropsAttributes.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/splitProps.d.ts +1 -4
- package/dist/utils/splitProps.d.ts.map +1 -1
- package/dist/utils/splitProps.js +2 -7
- package/dist/utils/splitProps.js.map +1 -1
- package/dist/utils/trimReactNode.d.ts +10 -8
- package/dist/utils/trimReactNode.d.ts.map +1 -1
- package/dist/utils/trimReactNode.js +10 -8
- package/dist/utils/trimReactNode.js.map +1 -1
- package/package.json +21 -21
- package/src/GDSContext.ts +16 -0
- package/src/GDSProvider.tsx +31 -40
- package/src/components/Address.tsx +2 -2
- package/src/components/Avatar.tsx +8 -12
- package/src/components/Breadcrumbs.meta.ts +3 -1
- package/src/components/Breadcrumbs.parts.tsx +16 -28
- package/src/components/Button.tsx +114 -104
- package/src/components/ButtonGroup.meta.ts +8 -0
- package/src/components/ButtonGroup.tsx +1 -5
- package/src/components/Card.meta.ts +1 -0
- package/src/components/Card.tsx +2 -2
- package/src/components/Checkbox.meta.ts +1 -5
- package/src/components/Chip.parts.tsx +1 -11
- package/src/components/CodeBlock.parts.tsx +75 -50
- package/src/components/CodeInline.tsx +3 -3
- package/src/components/CopyButton.meta.ts +1 -6
- package/src/components/CopyButton.tsx +50 -27
- package/src/components/CurrencyInput.meta.ts +1 -5
- package/src/components/DescriptionList.parts.tsx +1 -0
- package/src/components/Icon.meta.ts +1 -0
- package/src/components/Icon.tsx +4 -4
- package/src/components/Input.meta.ts +1 -5
- package/src/components/Input.tsx +6 -7
- package/src/components/Keyboard.tsx +1 -1
- package/src/components/Link.meta.ts +1 -0
- package/src/components/Link.tsx +4 -5
- package/src/components/Menu.meta.ts +39 -1
- package/src/components/Menu.parts.tsx +554 -547
- package/src/components/Modal.meta.ts +1 -1
- package/src/components/Modal.parts.tsx +40 -46
- package/src/components/OTCInput.meta.ts +1 -5
- package/src/components/OTCInput.tsx +1 -1
- package/src/components/Pane.meta.ts +31 -0
- package/src/components/Pane.parts.tsx +713 -0
- package/src/components/Pane.tsx +17 -0
- package/src/components/Radio.meta.ts +1 -5
- package/src/components/Search.tsx +1 -1
- package/src/components/SegmentedControl.meta.ts +3 -1
- package/src/components/SegmentedControl.parts.tsx +7 -10
- package/src/components/Stepper.meta.ts +1 -0
- package/src/components/Stepper.parts.tsx +3 -1
- package/src/components/Switch.meta.ts +1 -5
- package/src/components/TabSet.meta.ts +3 -1
- package/src/components/TextArea.meta.ts +1 -5
- package/src/components/ToggleButton.meta.ts +1 -6
- package/src/components/ToggleButton.tsx +1 -1
- package/src/components/Tooltip.meta.ts +13 -2
- package/src/components/Tooltip.parts.tsx +241 -169
- package/src/components/Tooltip.tsx +2 -2
- package/src/components/base/Addon.meta.ts +3 -1
- package/src/components/base/ButtonOrLink.parts.tsx +118 -97
- package/src/components/base/ButtonOrLink.tsx +1 -0
- package/src/components/base/Checkable.parts.tsx +6 -13
- package/src/components/base/Field.parts.tsx +5 -5
- package/src/components/base/MaybeButtonOrLink.tsx +26 -5
- package/src/components/base/Portal.tsx +5 -7
- package/src/components/base/Presence.tsx +1375 -0
- package/src/components/base/Render.tsx +37 -15
- package/src/components/base/Transition.meta.ts +1 -0
- package/src/components/base/Transition.tsx +2 -2
- package/src/components/base/index.ts +9 -2
- package/src/components/index.ts +11 -2
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useCSSProp.ts +7 -9
- package/src/hooks/useCSSProps.ts +13 -22
- package/src/hooks/useCSSPropsPolyfill.ts +15 -23
- package/src/hooks/useCSSState.ts +11 -6
- package/src/hooks/useControlled.ts +16 -8
- package/src/hooks/useEffectWithRefDeps.ts +2 -2
- package/src/hooks/useFirstRender.ts +36 -0
- package/src/hooks/useGDS.ts +1 -1
- package/src/hooks/usePrevious.ts +6 -4
- package/src/hooks/useRefWithInit.ts +2 -2
- package/src/hooks/useStyleObserver.ts +6 -2
- package/src/icons/CalendarDynamicIcon.tsx +16 -6
- package/src/icons/CopyInteractiveIcon.tsx +10 -5
- package/src/icons/SidebarLeftInteractiveIcon.tsx +9 -5
- package/src/icons/SidebarRightInteractiveIcon.tsx +9 -5
- package/src/tailwind-plugin.ts +8 -5
- package/src/utils/InlineCounter.tsx +17 -0
- package/src/utils/RenderCount.tsx +7 -0
- package/src/utils/cn.ts +3 -1
- package/src/utils/getCSSPropsAttributes.ts +13 -8
- package/src/utils/index.ts +2 -0
- package/src/utils/splitProps.ts +9 -9
- package/src/utils/trimReactNode.tsx +10 -8
- package/dist/components/base/ButtonOrLink.meta.d.ts +0 -2
- package/dist/components/base/ButtonOrLink.meta.d.ts.map +0 -1
- package/dist/components/base/ButtonOrLink.meta.js +0 -6
- package/dist/components/base/ButtonOrLink.meta.js.map +0 -1
- package/src/components/base/ButtonOrLink.meta.ts +0 -6
|
@@ -5,32 +5,33 @@ import {
|
|
|
5
5
|
useCallback,
|
|
6
6
|
useContext,
|
|
7
7
|
useEffect,
|
|
8
|
-
useMemo,
|
|
9
8
|
useRef,
|
|
10
9
|
useState,
|
|
11
10
|
type ComponentProps,
|
|
12
11
|
type ReactElement,
|
|
13
12
|
type ReactNode,
|
|
13
|
+
type Ref,
|
|
14
14
|
} from 'react'
|
|
15
|
-
import { Tooltip } from '@base-ui/react/tooltip'
|
|
15
|
+
import { Tooltip, type TooltipRoot as BaseUITooltipRoot } from '@base-ui/react/tooltip'
|
|
16
|
+
import { useMergedRefs } from '@base-ui/utils/useMergedRefs'
|
|
17
|
+
import type { SetReturnType } from 'type-fest'
|
|
16
18
|
|
|
17
19
|
import { twToPx, type GDSComponentProps } from '@graphprotocol/gds-css'
|
|
18
20
|
|
|
19
21
|
import { useControlled, useCSSPropsPolyfill, useGDS } from '../hooks/index.ts'
|
|
20
|
-
import { cn, getCSSPropsAttributes } from '../utils/index.ts'
|
|
22
|
+
import { cn, getCSSPropsAttributes, getReactNodeKey } from '../utils/index.ts'
|
|
21
23
|
import { Portal } from './base/Portal.tsx'
|
|
22
|
-
import { Render, type
|
|
24
|
+
import { Render, type RenderProp } from './base/Render.tsx'
|
|
23
25
|
import { TooltipMeta } from './Tooltip.meta.ts'
|
|
24
26
|
|
|
25
|
-
type
|
|
27
|
+
type Content = Exclude<ReactNode, undefined>
|
|
28
|
+
type SetDeferredContentFunction = (content: Content, priority?: number) => void
|
|
29
|
+
type OpenChangeReason = BaseUITooltipRoot.ChangeEventDetails['reason']
|
|
26
30
|
|
|
27
31
|
const TooltipContext = createContext<{
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
collectContent: SetDeferredContentFunction
|
|
33
|
+
disableDescendants: boolean
|
|
30
34
|
} | null>(null)
|
|
31
|
-
const TooltipCollectorContext = createContext<
|
|
32
|
-
((content: DefinedReactNode, priority?: number) => void) | null
|
|
33
|
-
>(null)
|
|
34
35
|
|
|
35
36
|
const OPEN_DELAY = 300
|
|
36
37
|
|
|
@@ -40,237 +41,308 @@ export interface TooltipProps
|
|
|
40
41
|
* The content to display in the tooltip. If not provided, defaults to any content collected from
|
|
41
42
|
* `Tooltip.Content` or `Tooltip.Collector` descendants.
|
|
42
43
|
*/
|
|
43
|
-
content?:
|
|
44
|
+
content?: Content | undefined
|
|
44
45
|
/** Force the tooltip to be open or closed. */
|
|
45
46
|
open?: boolean | undefined
|
|
46
47
|
/** Called when the tooltip is opened or closed. */
|
|
47
|
-
onOpenChange?: ((open: boolean) => void) | undefined
|
|
48
|
+
onOpenChange?: ((open: boolean, reason: OpenChangeReason) => void) | undefined
|
|
48
49
|
/** The element that triggers the tooltip. */
|
|
49
|
-
children: ReactElement
|
|
50
|
+
children: ReactElement
|
|
51
|
+
/**
|
|
52
|
+
* Props to merge with the trigger element. Set to `'forward'` to have the trigger automatically
|
|
53
|
+
* receive applicable props passed to the `Tooltip` itself (excluding tooltip-specific props like
|
|
54
|
+
* `content`, `side` and other positioning props, `open`, `disabled`, etc.).
|
|
55
|
+
*/
|
|
56
|
+
triggerProps?: ComponentProps<'button'> | 'forward' | undefined
|
|
50
57
|
}
|
|
51
58
|
|
|
52
59
|
export function TooltipRoot({
|
|
53
60
|
ref: passedRef,
|
|
54
61
|
content: passedContent,
|
|
55
|
-
|
|
62
|
+
side,
|
|
56
63
|
gap,
|
|
57
64
|
align,
|
|
65
|
+
alignOffset,
|
|
58
66
|
open: controlledOpen,
|
|
59
67
|
onOpenChange,
|
|
60
68
|
disabled,
|
|
69
|
+
overrideDescendants,
|
|
61
70
|
className,
|
|
62
71
|
style,
|
|
63
72
|
children,
|
|
64
|
-
|
|
73
|
+
triggerProps: passedTriggerProps,
|
|
74
|
+
...passedProps
|
|
65
75
|
}: TooltipProps) {
|
|
66
76
|
const { dirProps } = useGDS()
|
|
67
77
|
|
|
78
|
+
const ancestorTooltip = useContext(TooltipContext)
|
|
79
|
+
|
|
80
|
+
const popupProps = passedTriggerProps !== 'forward' ? passedProps : {}
|
|
81
|
+
const popupRef = passedTriggerProps !== 'forward' ? passedRef : undefined
|
|
82
|
+
|
|
83
|
+
const triggerProps = passedTriggerProps === 'forward' ? passedProps : passedTriggerProps
|
|
84
|
+
const triggerDisabled =
|
|
85
|
+
triggerProps && 'disabled' in triggerProps ? triggerProps.disabled === true : false
|
|
86
|
+
|
|
68
87
|
const [cssPropsPolyfillRef, cssPropsPolyfillAttributes, cssProps] = useCSSPropsPolyfill(
|
|
69
88
|
TooltipMeta,
|
|
70
|
-
{
|
|
71
|
-
{ returnPropValues: {
|
|
89
|
+
{ side, align, disabled, overrideDescendants },
|
|
90
|
+
{ returnPropValues: { side, gap, align, alignOffset, disabled, overrideDescendants } },
|
|
72
91
|
)
|
|
73
92
|
const cssPropsAttributes = getCSSPropsAttributes(
|
|
74
93
|
TooltipMeta,
|
|
75
|
-
{
|
|
94
|
+
{ side, gap, align, alignOffset, disabled, overrideDescendants },
|
|
76
95
|
style,
|
|
77
96
|
)
|
|
78
97
|
|
|
79
|
-
const
|
|
80
|
-
const hasEnabledTooltipAncestor = tooltipAncestor?.enabled ?? false
|
|
81
|
-
|
|
82
|
-
const { onCollect, collectedContent } = useCollectedTooltip()
|
|
98
|
+
const [setCollectedContent, collectedContent] = useDeferredContent()
|
|
83
99
|
const content = passedContent !== undefined ? passedContent : collectedContent
|
|
84
100
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
101
|
+
/**
|
|
102
|
+
* Propagate collected content up till it reaches `Tooltip.Collector`'s closest non-disabled
|
|
103
|
+
* tooltip ancestor with no passed content.
|
|
104
|
+
*/
|
|
105
|
+
const collectContent: SetDeferredContentFunction = (newCollectedContent, priority) => {
|
|
106
|
+
if (passedContent === undefined || cssProps.disabled) {
|
|
107
|
+
void setCollectedContent(newCollectedContent, priority)
|
|
108
|
+
ancestorTooltip?.collectContent(newCollectedContent, priority)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const disabledByAncestor = ancestorTooltip?.disableDescendants ?? false
|
|
113
|
+
const disableDescendants =
|
|
114
|
+
disabledByAncestor ||
|
|
115
|
+
(content !== undefined && !cssProps.disabled && cssProps.overrideDescendants)
|
|
116
|
+
const enabled =
|
|
117
|
+
Boolean(content) &&
|
|
118
|
+
!cssProps.disabled &&
|
|
119
|
+
(!triggerDisabled || controlledOpen) &&
|
|
120
|
+
!disabledByAncestor
|
|
121
|
+
|
|
122
|
+
const triggerRef = useRef<HTMLButtonElement>(null)
|
|
123
|
+
const triggerPassedRef = useMergedRefs(
|
|
93
124
|
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* disabled to prevent a lot of weirdness).
|
|
125
|
+
* Conditionally setting the ref to force the tooltip to refresh its position when `enabled`
|
|
126
|
+
* changes, preventing it from moving to the viewport's top-left corner in some cases (e.g. when
|
|
127
|
+
* `CopyButton` returns to its default tooltip).
|
|
98
128
|
*/
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
129
|
+
enabled ? triggerRef : undefined,
|
|
130
|
+
(passedTriggerProps === 'forward' ? passedRef : passedTriggerProps?.ref) as
|
|
131
|
+
| Ref<HTMLButtonElement>
|
|
132
|
+
| undefined,
|
|
133
|
+
)
|
|
102
134
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
135
|
+
const [open, privateSetOpen] = useControlled(controlledOpen, false, onOpenChange)
|
|
136
|
+
const justOpenedRef = useRef(false)
|
|
137
|
+
const setOpen = useCallback(
|
|
138
|
+
(newOpen: boolean, reason: OpenChangeReason) => {
|
|
139
|
+
privateSetOpen(newOpen, reason)
|
|
140
|
+
if (newOpen) {
|
|
141
|
+
justOpenedRef.current = true
|
|
142
|
+
window.setTimeout(() => {
|
|
143
|
+
justOpenedRef.current = false
|
|
144
|
+
}, 0)
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
[privateSetOpen],
|
|
148
|
+
)
|
|
106
149
|
|
|
107
150
|
const openTimeoutRef = useRef<number>(undefined)
|
|
108
|
-
const clearOpenTimeout = () => {
|
|
151
|
+
const clearOpenTimeout = useCallback(() => {
|
|
109
152
|
if (!openTimeoutRef.current) return
|
|
110
153
|
window.clearTimeout(openTimeoutRef.current)
|
|
111
154
|
openTimeoutRef.current = undefined
|
|
112
|
-
}
|
|
113
|
-
if (!enabled) {
|
|
114
|
-
clearOpenTimeout()
|
|
115
|
-
}
|
|
155
|
+
}, [])
|
|
116
156
|
|
|
117
|
-
|
|
118
|
-
()
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
)
|
|
157
|
+
useEffect(() => {
|
|
158
|
+
if (!enabled) {
|
|
159
|
+
clearOpenTimeout()
|
|
160
|
+
if (open) setOpen(false, 'disabled')
|
|
161
|
+
}
|
|
162
|
+
}, [enabled, open, setOpen, clearOpenTimeout])
|
|
124
163
|
|
|
125
164
|
return (
|
|
126
|
-
<TooltipContext.Provider
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
165
|
+
<TooltipContext.Provider
|
|
166
|
+
value={{
|
|
167
|
+
collectContent,
|
|
168
|
+
disableDescendants,
|
|
169
|
+
}}
|
|
170
|
+
>
|
|
171
|
+
<Tooltip.Root
|
|
172
|
+
disabled={!enabled}
|
|
173
|
+
disableHoverablePopup
|
|
174
|
+
open={open}
|
|
175
|
+
onOpenChange={(newOpen, eventDetails) => {
|
|
176
|
+
clearOpenTimeout()
|
|
177
|
+
if (!enabled) return
|
|
178
|
+
// Disable Base UI's default behavior of closing the tooltip when pressing the trigger
|
|
179
|
+
if (!newOpen && eventDetails.reason === 'trigger-press') {
|
|
180
|
+
// Ensure clicking on the trigger before the tooltip has a chance to open doesn't prevent it from opening
|
|
181
|
+
openTimeoutRef.current = window.setTimeout(
|
|
182
|
+
() => setOpen(true, eventDetails.reason),
|
|
183
|
+
OPEN_DELAY,
|
|
184
|
+
)
|
|
185
|
+
return
|
|
186
|
+
}
|
|
187
|
+
// Make `overrideDescendants={false}` work as expected (see the `NestedSimultaneous` story)
|
|
188
|
+
if (
|
|
189
|
+
!newOpen &&
|
|
190
|
+
eventDetails.reason === 'none' &&
|
|
191
|
+
(justOpenedRef.current ||
|
|
192
|
+
(!cssProps.overrideDescendants && triggerRef.current?.matches(':hover')))
|
|
193
|
+
) {
|
|
194
|
+
return
|
|
195
|
+
}
|
|
196
|
+
setOpen(newOpen, eventDetails.reason)
|
|
197
|
+
}}
|
|
198
|
+
>
|
|
199
|
+
<Tooltip.Trigger
|
|
200
|
+
delay={OPEN_DELAY}
|
|
201
|
+
closeDelay={100}
|
|
202
|
+
{...(triggerProps as ComponentProps<typeof Tooltip.Trigger>)}
|
|
203
|
+
ref={triggerPassedRef}
|
|
204
|
+
disabled={undefined} // Not passed through for some reason, so we set it in `render` and override it to `undefined` here just in case
|
|
205
|
+
render={(renderProps) => (
|
|
206
|
+
<Render
|
|
207
|
+
render={children}
|
|
208
|
+
{...renderProps}
|
|
209
|
+
disabled={triggerDisabled}
|
|
210
|
+
onClick={triggerProps?.onClick} // Prevent the tooltip re-opening after clicking e.g. a `Menu` trigger
|
|
211
|
+
/>
|
|
212
|
+
)}
|
|
213
|
+
/>
|
|
214
|
+
<Tooltip.Portal>
|
|
215
|
+
<Tooltip.Positioner
|
|
216
|
+
key={getReactNodeKey(content)} // Refresh the tooltip's position when the content changes (see `WithDynamicContent` story)
|
|
217
|
+
side={
|
|
218
|
+
cssProps.side === 'start'
|
|
219
|
+
? 'inline-start'
|
|
220
|
+
: cssProps.side === 'end'
|
|
221
|
+
? 'inline-end'
|
|
222
|
+
: cssProps.side
|
|
140
223
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
`gds-tooltip root-block u:max-w-(--available-width) u:rounded-4 u:bg-default u:px-2 u:py-1 u:text-12 u:text-default u:transition
|
|
164
|
-
i:origin-(--transform-origin)
|
|
165
|
-
i:data-ending-style:opacity-0
|
|
166
|
-
i:data-starting-style:opacity-0
|
|
167
|
-
i:data-starting-style:data-[side=bottom]:-translate-y-1
|
|
168
|
-
i:data-starting-style:data-[side=inline-end]:-translate-x-1
|
|
169
|
-
i:data-starting-style:data-[side=inline-start]:translate-x-1
|
|
170
|
-
i:data-starting-style:data-[side=top]:translate-y-1
|
|
171
|
-
i:rtl:data-starting-style:data-[side=inline-end]:translate-x-1
|
|
172
|
-
i:rtl:data-starting-style:data-[side=inline-start]:-translate-x-1`,
|
|
173
|
-
className,
|
|
174
|
-
)}
|
|
175
|
-
{...cssPropsAttributes}
|
|
176
|
-
{...cssPropsPolyfillAttributes}
|
|
177
|
-
{...props}
|
|
178
|
-
>
|
|
179
|
-
{content}
|
|
180
|
-
</Tooltip.Popup>
|
|
181
|
-
</Tooltip.Positioner>
|
|
182
|
-
</Tooltip.Portal>
|
|
183
|
-
{/* Ensure changes to CSS props are detected even when the tooltip is not mounted */}
|
|
184
|
-
<Portal>
|
|
185
|
-
<span
|
|
186
|
-
ref={cssPropsPolyfillRef}
|
|
187
|
-
className={cn('gds-tooltip i:invisible', className)}
|
|
224
|
+
sideOffset={twToPx(cssProps.gap)}
|
|
225
|
+
align={cssProps.align}
|
|
226
|
+
alignOffset={twToPx(cssProps.alignOffset)}
|
|
227
|
+
collisionPadding={8}
|
|
228
|
+
disableAnchorTracking // Prevent the tooltip from moving to the viewport's top-left corner when the trigger is unmounted
|
|
229
|
+
{...dirProps}
|
|
230
|
+
>
|
|
231
|
+
<Tooltip.Popup
|
|
232
|
+
ref={popupRef}
|
|
233
|
+
className={cn(
|
|
234
|
+
`gds-tooltip root-block u:max-w-(--available-width) u:rounded-4 u:bg-default u:px-2 u:py-1 u:text-12 u:transition
|
|
235
|
+
i:origin-(--transform-origin)
|
|
236
|
+
i:data-ending-style:opacity-0
|
|
237
|
+
i:data-starting-style:opacity-0
|
|
238
|
+
i:data-starting-style:data-[side=bottom]:-translate-y-1
|
|
239
|
+
i:data-starting-style:data-[side=inline-end]:-translate-x-1
|
|
240
|
+
i:data-starting-style:data-[side=inline-start]:translate-x-1
|
|
241
|
+
i:data-starting-style:data-[side=top]:translate-y-1
|
|
242
|
+
i:rtl:data-starting-style:data-[side=end]:translate-x-1
|
|
243
|
+
i:rtl:data-starting-style:data-[side=start]:-translate-x-1`,
|
|
244
|
+
className,
|
|
245
|
+
)}
|
|
188
246
|
{...cssPropsAttributes}
|
|
189
247
|
{...cssPropsPolyfillAttributes}
|
|
190
|
-
{...
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
248
|
+
{...popupProps}
|
|
249
|
+
>
|
|
250
|
+
{content}
|
|
251
|
+
</Tooltip.Popup>
|
|
252
|
+
</Tooltip.Positioner>
|
|
253
|
+
</Tooltip.Portal>
|
|
254
|
+
{/* Ensure changes to CSS props are detected even when the tooltip is not mounted */}
|
|
255
|
+
<Portal>
|
|
256
|
+
<span
|
|
257
|
+
ref={cssPropsPolyfillRef}
|
|
258
|
+
className={cn('gds-tooltip i:invisible', className)}
|
|
259
|
+
{...cssPropsAttributes}
|
|
260
|
+
{...cssPropsPolyfillAttributes}
|
|
261
|
+
{...popupProps}
|
|
262
|
+
/>
|
|
263
|
+
</Portal>
|
|
264
|
+
</Tooltip.Root>
|
|
195
265
|
</TooltipContext.Provider>
|
|
196
266
|
)
|
|
197
267
|
}
|
|
198
268
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
export function TooltipCollector({ onCollect, children }: TooltipCollectorProps) {
|
|
206
|
-
return (
|
|
207
|
-
<TooltipCollectorContext.Provider value={onCollect ?? null}>
|
|
208
|
-
{children}
|
|
209
|
-
</TooltipCollectorContext.Provider>
|
|
210
|
-
)
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/** Hook for components to send tooltip content up to a collector. */
|
|
214
|
-
export function useCollectTooltip() {
|
|
215
|
-
return useContext(TooltipCollectorContext)
|
|
216
|
-
}
|
|
269
|
+
function useDeferredContent() {
|
|
270
|
+
const [content, setContent] = useState<Content | undefined>(undefined)
|
|
271
|
+
const pendingContentRef = useRef<Content | undefined>(undefined)
|
|
272
|
+
const pendingPriorityRef = useRef<number | undefined>(undefined)
|
|
217
273
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
274
|
+
// Store the content in a ref to avoid updating the state during render
|
|
275
|
+
const setDeferredContent: SetReturnType<SetDeferredContentFunction, Content> = (
|
|
276
|
+
newContent: Content,
|
|
277
|
+
priority = 0,
|
|
278
|
+
) => {
|
|
279
|
+
// If we've already stored content this render, only replace it if the new content has higher priority
|
|
280
|
+
if (
|
|
281
|
+
pendingContentRef.current === undefined ||
|
|
282
|
+
priority >= (pendingPriorityRef.current ?? -Infinity)
|
|
283
|
+
) {
|
|
284
|
+
pendingContentRef.current = newContent
|
|
285
|
+
pendingPriorityRef.current = priority
|
|
230
286
|
}
|
|
287
|
+
return pendingContentRef.current
|
|
231
288
|
}
|
|
232
289
|
|
|
233
|
-
// Commit the
|
|
234
|
-
// oxlint-disable-next-line react-hooks/exhaustive-deps -- Must run after every render to sync
|
|
290
|
+
// Commit the stored content after render
|
|
291
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps -- Must run after every render to sync
|
|
235
292
|
useEffect(() => {
|
|
236
|
-
if (
|
|
237
|
-
|
|
293
|
+
if (getReactNodeKey(content) !== getReactNodeKey(pendingContentRef.current)) {
|
|
294
|
+
setContent(pendingContentRef.current)
|
|
238
295
|
}
|
|
239
296
|
// Reset for next render
|
|
240
|
-
|
|
241
|
-
|
|
297
|
+
pendingContentRef.current = undefined
|
|
298
|
+
pendingPriorityRef.current = undefined
|
|
242
299
|
})
|
|
243
300
|
|
|
244
|
-
return
|
|
245
|
-
onCollect,
|
|
246
|
-
collectedContent,
|
|
247
|
-
}
|
|
301
|
+
return [setDeferredContent, content] as const
|
|
248
302
|
}
|
|
249
303
|
|
|
250
304
|
export interface TooltipContentProps {
|
|
251
|
-
render?: RenderProps['render'] | undefined
|
|
252
305
|
children: ReactNode
|
|
306
|
+
priority?: number | undefined
|
|
307
|
+
render?: RenderProp | undefined
|
|
253
308
|
}
|
|
254
309
|
|
|
255
310
|
/**
|
|
256
311
|
* Wrap any text or `ReactNode` with this component to use it as the default `content` of the
|
|
257
|
-
*
|
|
312
|
+
* closest `Tooltip`, in addition to rendering it inline. It is meant to be wrapped in a `sr-only`
|
|
258
313
|
* element, so that the content rendered inline is visually hidden but accessible to screen readers,
|
|
259
314
|
* unlike the content rendered in the tooltip itself, which is hidden from the accessibility tree
|
|
260
315
|
* since most tooltips are decorative. This allows a tooltip to be non-decorative, in the rare case
|
|
261
316
|
* where the information it provides is not otherwise available to screen readers (i.e. different
|
|
262
317
|
* from the trigger's accessible name).
|
|
263
318
|
*/
|
|
264
|
-
export function TooltipContent({
|
|
265
|
-
const
|
|
319
|
+
export function TooltipContent({ children, priority, render }: TooltipContentProps) {
|
|
320
|
+
const ancestorTooltip = useContext(TooltipContext)
|
|
266
321
|
|
|
267
|
-
|
|
268
|
-
collectTooltip(children || null, 100)
|
|
269
|
-
}
|
|
322
|
+
ancestorTooltip?.collectContent(children || null, priority)
|
|
270
323
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
324
|
+
return render ? <Render render={render}>{children}</Render> : children
|
|
325
|
+
}
|
|
326
|
+
TooltipContent.displayName = 'Tooltip.Content'
|
|
327
|
+
|
|
328
|
+
const TooltipCollectorContext = createContext<SetDeferredContentFunction | null>(null)
|
|
329
|
+
|
|
330
|
+
export interface TooltipCollectorProps {
|
|
331
|
+
children: ReactNode
|
|
332
|
+
}
|
|
274
333
|
|
|
275
|
-
|
|
334
|
+
export function TooltipCollector({ children }: TooltipCollectorProps) {
|
|
335
|
+
const ancestorTooltip = useContext(TooltipContext)
|
|
336
|
+
|
|
337
|
+
return (
|
|
338
|
+
<TooltipCollectorContext.Provider value={ancestorTooltip?.collectContent ?? null}>
|
|
339
|
+
{children}
|
|
340
|
+
</TooltipCollectorContext.Provider>
|
|
341
|
+
)
|
|
342
|
+
}
|
|
343
|
+
TooltipCollector.displayName = 'Tooltip.Collector'
|
|
344
|
+
|
|
345
|
+
/** Hook for components to send tooltip content up to a collector. */
|
|
346
|
+
export function useTooltipCollector() {
|
|
347
|
+
return useContext(TooltipCollectorContext)
|
|
276
348
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { TooltipCollector, TooltipContent, TooltipRoot } from './Tooltip.parts.tsx'
|
|
2
2
|
|
|
3
3
|
export const Tooltip = Object.assign(TooltipRoot, {
|
|
4
|
-
Collector: TooltipCollector,
|
|
5
4
|
Content: TooltipContent,
|
|
5
|
+
Collector: TooltipCollector,
|
|
6
6
|
})
|
|
7
7
|
|
|
8
|
-
export {
|
|
8
|
+
export { useTooltipCollector } from './Tooltip.parts.tsx'
|
|
9
9
|
|
|
10
10
|
export type { TooltipProps, TooltipCollectorProps, TooltipContentProps } from './Tooltip.parts.tsx'
|