@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
|
@@ -17,9 +17,10 @@ import {
|
|
|
17
17
|
import { useMergedRefs } from '@base-ui/utils/useMergedRefs'
|
|
18
18
|
import { mergeProps } from '@react-aria/utils'
|
|
19
19
|
import { useButton } from 'react-aria'
|
|
20
|
+
import type { Merge } from 'type-fest'
|
|
20
21
|
|
|
21
22
|
import { cn } from '../../utils/index.ts'
|
|
22
|
-
import { Render, type
|
|
23
|
+
import { Render, type RenderFn, type RenderFnProps } from './Render.tsx'
|
|
23
24
|
|
|
24
25
|
interface LinkComponentObject {
|
|
25
26
|
component: ElementType
|
|
@@ -35,9 +36,8 @@ type LinkComponent =
|
|
|
35
36
|
| LinkComponentObject
|
|
36
37
|
| null
|
|
37
38
|
|
|
38
|
-
export
|
|
39
|
-
|
|
40
|
-
category: 'button' | 'link' | 'other'
|
|
39
|
+
export type ButtonOrLinkState = {
|
|
40
|
+
category: 'button' | 'link'
|
|
41
41
|
role: NonNullable<InternalButtonOrLinkProps['role']>
|
|
42
42
|
disabled: NonNullable<InternalButtonOrLinkProps['disabled']>
|
|
43
43
|
type?: InternalButtonOrLinkProps['type']
|
|
@@ -46,6 +46,16 @@ export interface ButtonOrLinkState {
|
|
|
46
46
|
target?: InternalButtonOrLinkProps['target']
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
export type ButtonOrLinkRenderState = ButtonOrLinkState & {
|
|
50
|
+
Element: ElementType<ButtonOrLinkRenderElementProps>
|
|
51
|
+
elementProps: ButtonOrLinkRenderElementProps
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
interface ButtonOrLinkRenderElementProps {
|
|
55
|
+
buttonOrLinkState: ButtonOrLinkState
|
|
56
|
+
[key: string]: unknown
|
|
57
|
+
}
|
|
58
|
+
|
|
49
59
|
export declare namespace InternalButtonOrLinkProps {
|
|
50
60
|
interface DisableableProps {
|
|
51
61
|
disabled?: boolean | 'focusable' | undefined
|
|
@@ -61,10 +71,8 @@ export declare namespace InternalButtonOrLinkProps {
|
|
|
61
71
|
*/
|
|
62
72
|
inline?: boolean | undefined
|
|
63
73
|
/** Custom render function to control the rendered element. */
|
|
64
|
-
render?:
|
|
65
|
-
|
|
66
|
-
| undefined
|
|
67
|
-
/** Custom component to use for rendering links (e.g., Next.js Link) */
|
|
74
|
+
render?: RenderFn<ButtonOrLinkRenderState> | undefined
|
|
75
|
+
/** Custom component to use for rendering links (e.g. Next.js Link) */
|
|
68
76
|
linkComponent?: LinkComponent | undefined
|
|
69
77
|
}
|
|
70
78
|
interface ButtonProps
|
|
@@ -117,20 +125,25 @@ export function useAncestorButtonOrLink() {
|
|
|
117
125
|
return useContext(ButtonOrLinkContext)
|
|
118
126
|
}
|
|
119
127
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
128
|
+
/**
|
|
129
|
+
* Creating "with context" components as opposed to wrapping `ButtonOrLink`'s returned element in a
|
|
130
|
+
* context provider to avoid a "Trying to render a nested `ButtonOrLink`" error when rendering
|
|
131
|
+
* `ButtonOrLink` siblings in the `render` function (like `Card` does with `interactiveContent`).
|
|
132
|
+
*/
|
|
123
133
|
|
|
124
|
-
|
|
134
|
+
type WithContextComponent<T extends ElementType> = (
|
|
135
|
+
props: Merge<ComponentProps<T>, ButtonOrLinkRenderElementProps>,
|
|
136
|
+
) => ReactElement
|
|
125
137
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
const memoizedWithContextComponents = new Map<ElementType, WithContextComponent<ElementType>>()
|
|
139
|
+
|
|
140
|
+
function withContext<T extends ElementType>(Element: T): WithContextComponent<T> {
|
|
141
|
+
const cached = memoizedWithContextComponents.get(Element)
|
|
142
|
+
if (cached) return cached
|
|
143
|
+
const newWithContextComponent: WithContextComponent<ElementType> = ({
|
|
131
144
|
buttonOrLinkState,
|
|
132
145
|
...props
|
|
133
|
-
}
|
|
146
|
+
}) => (
|
|
134
147
|
<ButtonOrLinkContext.Provider value={buttonOrLinkState}>
|
|
135
148
|
<Element {...(props as ComponentProps<T>)} />
|
|
136
149
|
</ButtonOrLinkContext.Provider>
|
|
@@ -142,7 +155,7 @@ function withContext<T extends ElementType>(Element: T) {
|
|
|
142
155
|
const ButtonWithContext = withContext('button')
|
|
143
156
|
const SpanButtonWithContext = withContext(SpanButton)
|
|
144
157
|
const AnchorWithContext = withContext('a')
|
|
145
|
-
const RenderWithContext = withContext(Render
|
|
158
|
+
const RenderWithContext = withContext(Render)
|
|
146
159
|
|
|
147
160
|
interface ButtonOrLinkConfigContextValue {
|
|
148
161
|
onClick:
|
|
@@ -186,12 +199,42 @@ export const ButtonOrLinkRoot = (passedProps: InternalButtonOrLinkProps) => {
|
|
|
186
199
|
disabled = false,
|
|
187
200
|
inline = false,
|
|
188
201
|
linkComponent: passedLinkComponent,
|
|
189
|
-
render,
|
|
190
|
-
onClick,
|
|
202
|
+
render: passedRender,
|
|
191
203
|
className: passedClassName,
|
|
192
204
|
children,
|
|
193
205
|
...nonBaseProps
|
|
194
206
|
} = props
|
|
207
|
+
const manuallyDisabledEventProps = {
|
|
208
|
+
onClick: undefined,
|
|
209
|
+
onMouseDown: undefined,
|
|
210
|
+
onMouseUp: undefined,
|
|
211
|
+
onPointerDown: undefined,
|
|
212
|
+
onPointerUp: undefined,
|
|
213
|
+
onTouchStart: undefined,
|
|
214
|
+
onTouchEnd: undefined,
|
|
215
|
+
onKeyDown: undefined,
|
|
216
|
+
onKeyUp: undefined,
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const render = (
|
|
220
|
+
Element: ElementType<ButtonOrLinkRenderElementProps>,
|
|
221
|
+
renderProps: RenderFnProps,
|
|
222
|
+
buttonOrLinkState: ButtonOrLinkState,
|
|
223
|
+
extraElementProps?: Record<string, unknown>,
|
|
224
|
+
) => {
|
|
225
|
+
const elementProps: ButtonOrLinkRenderElementProps = { buttonOrLinkState, ...extraElementProps }
|
|
226
|
+
const renderState: ButtonOrLinkRenderState = {
|
|
227
|
+
...buttonOrLinkState,
|
|
228
|
+
Element,
|
|
229
|
+
elementProps,
|
|
230
|
+
}
|
|
231
|
+
return passedRender ? (
|
|
232
|
+
passedRender(renderProps, renderState)
|
|
233
|
+
) : (
|
|
234
|
+
<Element {...renderProps} {...elementProps} />
|
|
235
|
+
)
|
|
236
|
+
}
|
|
237
|
+
|
|
195
238
|
const className = cn('gds-button-or-link', passedClassName)
|
|
196
239
|
|
|
197
240
|
if (props.href === undefined) {
|
|
@@ -212,17 +255,6 @@ export const ButtonOrLinkRoot = (passedProps: InternalButtonOrLinkProps) => {
|
|
|
212
255
|
)
|
|
213
256
|
}
|
|
214
257
|
|
|
215
|
-
const Element = inline ? SpanButtonWithContext : ButtonWithContext
|
|
216
|
-
|
|
217
|
-
const state: ButtonOrLinkState = {
|
|
218
|
-
Element,
|
|
219
|
-
category: 'button',
|
|
220
|
-
role,
|
|
221
|
-
disabled,
|
|
222
|
-
type,
|
|
223
|
-
checked,
|
|
224
|
-
}
|
|
225
|
-
|
|
226
258
|
const checkedAttribute =
|
|
227
259
|
checked === undefined
|
|
228
260
|
? {}
|
|
@@ -241,7 +273,7 @@ export const ButtonOrLinkRoot = (passedProps: InternalButtonOrLinkProps) => {
|
|
|
241
273
|
return { 'aria-checked': checkedOrMixed }
|
|
242
274
|
})(checked)
|
|
243
275
|
|
|
244
|
-
|
|
276
|
+
const buttonProps: ComponentProps<'button'> = {
|
|
245
277
|
role,
|
|
246
278
|
type: disabled === 'focusable' ? 'button' : type,
|
|
247
279
|
disabled: disabled === true,
|
|
@@ -249,15 +281,23 @@ export const ButtonOrLinkRoot = (passedProps: InternalButtonOrLinkProps) => {
|
|
|
249
281
|
...checkedAttribute,
|
|
250
282
|
className,
|
|
251
283
|
children,
|
|
252
|
-
|
|
284
|
+
...(remainingProps as ComponentProps<'button'>),
|
|
285
|
+
...((disabled === 'focusable' || (disabled && inline)) && manuallyDisabledEventProps),
|
|
253
286
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
287
|
+
|
|
288
|
+
const buttonOrLinkState: ButtonOrLinkState = {
|
|
289
|
+
category: 'button',
|
|
290
|
+
role,
|
|
291
|
+
disabled,
|
|
292
|
+
type,
|
|
293
|
+
checked,
|
|
258
294
|
}
|
|
259
295
|
|
|
260
|
-
return render
|
|
296
|
+
return render(
|
|
297
|
+
inline ? SpanButtonWithContext : ButtonWithContext,
|
|
298
|
+
buttonProps,
|
|
299
|
+
buttonOrLinkState,
|
|
300
|
+
)
|
|
261
301
|
}
|
|
262
302
|
|
|
263
303
|
const {
|
|
@@ -271,35 +311,16 @@ export const ButtonOrLinkRoot = (passedProps: InternalButtonOrLinkProps) => {
|
|
|
271
311
|
...remainingProps
|
|
272
312
|
} = nonBaseProps
|
|
273
313
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
disabled,
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
? {
|
|
285
|
-
role,
|
|
286
|
-
tabIndex: disabled === 'focusable' ? 0 : undefined,
|
|
287
|
-
'aria-disabled': true,
|
|
288
|
-
className,
|
|
289
|
-
children,
|
|
290
|
-
}
|
|
291
|
-
: {
|
|
292
|
-
role: role !== 'link' ? role : undefined,
|
|
293
|
-
href,
|
|
294
|
-
target,
|
|
295
|
-
rel,
|
|
296
|
-
className,
|
|
297
|
-
children,
|
|
298
|
-
}
|
|
299
|
-
linkProps = {
|
|
300
|
-
...linkProps,
|
|
301
|
-
onClick: !disabled ? (onClick as typeof linkProps.onClick) : undefined,
|
|
302
|
-
...(remainingProps as typeof linkProps),
|
|
314
|
+
let linkProps: ComponentProps<'a'> = {
|
|
315
|
+
role: disabled || role !== 'link' ? role : undefined,
|
|
316
|
+
href: !disabled ? href : undefined,
|
|
317
|
+
target: !disabled ? target : undefined,
|
|
318
|
+
rel: !disabled ? rel : undefined,
|
|
319
|
+
'aria-disabled': Boolean(disabled) || undefined,
|
|
320
|
+
className,
|
|
321
|
+
children,
|
|
322
|
+
...(remainingProps as ComponentProps<'a'>),
|
|
323
|
+
...(disabled && manuallyDisabledEventProps),
|
|
303
324
|
}
|
|
304
325
|
|
|
305
326
|
let linkComponent: ElementType | ReactElement | null = null
|
|
@@ -317,29 +338,28 @@ export const ButtonOrLinkRoot = (passedProps: InternalButtonOrLinkProps) => {
|
|
|
317
338
|
}
|
|
318
339
|
}
|
|
319
340
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
render: linkComponent,
|
|
327
|
-
buttonOrLinkState: state,
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
return render ? render(elementProps, state) : <Element {...elementProps} />
|
|
341
|
+
const buttonOrLinkState: ButtonOrLinkState = {
|
|
342
|
+
category: 'link',
|
|
343
|
+
role,
|
|
344
|
+
disabled,
|
|
345
|
+
href,
|
|
346
|
+
target,
|
|
331
347
|
}
|
|
332
348
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
349
|
+
if (isValidElement(linkComponent)) {
|
|
350
|
+
return render(
|
|
351
|
+
RenderWithContext as ButtonOrLinkRenderState['Element'],
|
|
352
|
+
linkProps,
|
|
353
|
+
buttonOrLinkState,
|
|
354
|
+
{ render: linkComponent },
|
|
355
|
+
)
|
|
340
356
|
}
|
|
341
357
|
|
|
342
|
-
return render
|
|
358
|
+
return render(
|
|
359
|
+
linkComponent && linkComponent !== 'a' ? withContext(linkComponent) : AnchorWithContext,
|
|
360
|
+
linkProps,
|
|
361
|
+
buttonOrLinkState,
|
|
362
|
+
)
|
|
343
363
|
}
|
|
344
364
|
ButtonOrLinkRoot.displayName = 'ButtonOrLink'
|
|
345
365
|
|
|
@@ -425,16 +445,17 @@ function SpanButton({
|
|
|
425
445
|
isDisabled: disabled,
|
|
426
446
|
elementType: 'span',
|
|
427
447
|
onPress: (event) => {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
448
|
+
event.target.dispatchEvent(
|
|
449
|
+
new MouseEvent('click', {
|
|
450
|
+
altKey: event.altKey,
|
|
451
|
+
ctrlKey: event.ctrlKey,
|
|
452
|
+
metaKey: event.metaKey,
|
|
453
|
+
shiftKey: event.shiftKey,
|
|
454
|
+
relatedTarget: event.target,
|
|
455
|
+
bubbles: true,
|
|
456
|
+
cancelable: true,
|
|
457
|
+
}),
|
|
458
|
+
)
|
|
438
459
|
},
|
|
439
460
|
onPressStart: (event) => {
|
|
440
461
|
if (event.pointerType === 'keyboard') setActive(true)
|
|
@@ -1,22 +1,15 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
createContext,
|
|
5
|
-
useContext,
|
|
6
|
-
useId,
|
|
7
|
-
type ComponentProps,
|
|
8
|
-
type ReactElement,
|
|
9
|
-
type ReactNode,
|
|
10
|
-
} from 'react'
|
|
3
|
+
import { createContext, useContext, useId, type ComponentProps, type ReactNode } from 'react'
|
|
11
4
|
|
|
12
5
|
import type { GDSComponentProps } from '@graphprotocol/gds-css'
|
|
13
6
|
|
|
14
7
|
import { useCSSPropsPolyfill, useCSSState } from '../../hooks/index.ts'
|
|
15
8
|
import { cn, getCSSPropsAttributes } from '../../utils/index.ts'
|
|
16
9
|
import { CheckableMeta } from './Checkable.meta.ts'
|
|
17
|
-
import { Render, type
|
|
10
|
+
import { Render, type RenderProp } from './Render.tsx'
|
|
18
11
|
|
|
19
|
-
export
|
|
12
|
+
export type CheckableState = {
|
|
20
13
|
inputProps: {
|
|
21
14
|
name: string | undefined
|
|
22
15
|
value: string | undefined
|
|
@@ -36,7 +29,7 @@ export interface CheckableProps
|
|
|
36
29
|
value: string | undefined
|
|
37
30
|
checked: boolean | 'indeterminate' | undefined
|
|
38
31
|
disabled: boolean | undefined
|
|
39
|
-
renderInput:
|
|
32
|
+
renderInput: RenderProp<CheckableState>
|
|
40
33
|
}
|
|
41
34
|
|
|
42
35
|
export function CheckableRoot({
|
|
@@ -185,7 +178,7 @@ export interface CheckableLabelProps extends ComponentProps<'span'> {
|
|
|
185
178
|
* `<Card as="label" />`). Defaults to `<label />`, unless there is an ancestor `CheckableLabel`,
|
|
186
179
|
* in which case it defaults to `<span />`.
|
|
187
180
|
*/
|
|
188
|
-
render?:
|
|
181
|
+
render?: RenderProp | undefined
|
|
189
182
|
}
|
|
190
183
|
|
|
191
184
|
export function CheckableLabel({
|
|
@@ -209,8 +202,8 @@ export function CheckableLabel({
|
|
|
209
202
|
<CheckableLabelContext.Provider value={true}>
|
|
210
203
|
<Render
|
|
211
204
|
ref={statePassedRef}
|
|
212
|
-
data-focus-ring={focusRing || undefined}
|
|
213
205
|
render={render ?? (renderLabel ? <label /> : <span />)}
|
|
206
|
+
data-focus-ring={focusRing || undefined}
|
|
214
207
|
className={cn(
|
|
215
208
|
renderLabel ? 'group/label gds-checkable-label' : null,
|
|
216
209
|
`uu:data-focus-ring:focus-visible:outline
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
-
import { useId, type ComponentProps, type
|
|
3
|
+
import { useId, type ComponentProps, type ReactNode } from 'react'
|
|
4
4
|
|
|
5
5
|
import type { GDSComponentProps } from '@graphprotocol/gds-css'
|
|
6
6
|
|
|
@@ -9,9 +9,9 @@ import { CheckCircleIcon, WarningDiamondIcon, WarningIcon } from '../../icons/in
|
|
|
9
9
|
import { cn, getCSSPropsAttributes, type OptionValue } from '../../utils/index.ts'
|
|
10
10
|
import { Label, type LabelProps } from '../Label.tsx'
|
|
11
11
|
import { FieldMeta } from './Field.meta.ts'
|
|
12
|
-
import { Render } from './Render.tsx'
|
|
12
|
+
import { Render, type RenderProp } from './Render.tsx'
|
|
13
13
|
|
|
14
|
-
export
|
|
14
|
+
export type FieldState = {
|
|
15
15
|
inputProps: {
|
|
16
16
|
placeholder: string // Ensure there's always a `placeholder` attribute for `@state-blank` to work
|
|
17
17
|
name: string | undefined
|
|
@@ -47,7 +47,7 @@ export interface FieldProps
|
|
|
47
47
|
/** @default 'info' */
|
|
48
48
|
status?: 'info' | 'warning' | 'error' | 'success' | undefined
|
|
49
49
|
message?: ReactNode | undefined
|
|
50
|
-
renderInput:
|
|
50
|
+
renderInput: RenderProp<FieldState>
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
export const FieldRoot = ({
|
|
@@ -234,7 +234,7 @@ export const FieldRoot = ({
|
|
|
234
234
|
`)}
|
|
235
235
|
/>
|
|
236
236
|
<div
|
|
237
|
-
data-visible={message
|
|
237
|
+
data-visible={Boolean(message) || undefined}
|
|
238
238
|
className={`
|
|
239
239
|
mt-2 flex gap-1 text-12 text-form-helper
|
|
240
240
|
not-data-visible:sr-only
|
|
@@ -4,30 +4,49 @@ import type { ComponentProps, ElementType } from 'react'
|
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
ButtonOrLink,
|
|
7
|
-
type
|
|
7
|
+
type ButtonOrLinkRenderState,
|
|
8
8
|
type InternalButtonOrLinkProps,
|
|
9
9
|
type OmitInternalButtonOrLinkProps,
|
|
10
10
|
} from './ButtonOrLink.tsx'
|
|
11
|
+
import type { RenderFn } from './Render.tsx'
|
|
12
|
+
|
|
13
|
+
type OtherElementRenderState = {
|
|
14
|
+
category: 'other'
|
|
15
|
+
role: ButtonOrLinkRenderState['role']
|
|
16
|
+
disabled: false
|
|
17
|
+
type?: undefined
|
|
18
|
+
checked?: undefined
|
|
19
|
+
href?: undefined
|
|
20
|
+
target?: undefined
|
|
21
|
+
Element: ButtonOrLinkRenderState['Element']
|
|
22
|
+
elementProps: ButtonOrLinkRenderState['elementProps']
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type MaybeButtonOrLinkRenderState = ButtonOrLinkRenderState | OtherElementRenderState
|
|
11
26
|
|
|
12
27
|
export declare namespace MaybeButtonOrLinkProps {
|
|
13
28
|
export type DisableableProps = InternalButtonOrLinkProps.DisableableProps
|
|
14
29
|
export type ButtonProps = OmitInternalButtonOrLinkProps<InternalButtonOrLinkProps.ButtonProps> & {
|
|
15
30
|
onClick: NonNullable<InternalButtonOrLinkProps.ButtonProps['onClick']>
|
|
16
31
|
as?: undefined
|
|
32
|
+
render?: RenderFn<MaybeButtonOrLinkRenderState> | undefined
|
|
17
33
|
}
|
|
18
34
|
export type ToggleButtonProps =
|
|
19
35
|
OmitInternalButtonOrLinkProps<InternalButtonOrLinkProps.ToggleButtonProps> & {
|
|
20
36
|
onClick: NonNullable<InternalButtonOrLinkProps.ToggleButtonProps['onClick']>
|
|
21
37
|
as?: undefined
|
|
38
|
+
render?: RenderFn<MaybeButtonOrLinkRenderState> | undefined
|
|
22
39
|
}
|
|
23
40
|
export type LinkProps = OmitInternalButtonOrLinkProps<InternalButtonOrLinkProps.LinkProps> & {
|
|
24
41
|
as?: undefined
|
|
42
|
+
render?: RenderFn<MaybeButtonOrLinkRenderState> | undefined
|
|
25
43
|
}
|
|
26
44
|
export type OtherElementProps =
|
|
27
45
|
OmitInternalButtonOrLinkProps<InternalButtonOrLinkProps.BaseProps> &
|
|
28
46
|
ComponentProps<'span'> & {
|
|
29
47
|
onClick?: InternalButtonOrLinkProps.ButtonProps['onClick'] // Not technically correct, but prevents the event from being `any` when `as` is not specified
|
|
30
48
|
as?: ElementType | undefined
|
|
49
|
+
render?: RenderFn<MaybeButtonOrLinkRenderState> | undefined
|
|
31
50
|
disabled?: undefined
|
|
32
51
|
type?: undefined
|
|
33
52
|
checked?: undefined
|
|
@@ -44,7 +63,7 @@ export type MaybeButtonOrLinkProps =
|
|
|
44
63
|
|
|
45
64
|
type InternalMaybeButtonOrLinkProps = MaybeButtonOrLinkProps &
|
|
46
65
|
InternalButtonOrLinkProps.DisableableProps &
|
|
47
|
-
InternalButtonOrLinkProps.BaseProps
|
|
66
|
+
Omit<InternalButtonOrLinkProps.BaseProps, 'render'>
|
|
48
67
|
|
|
49
68
|
/**
|
|
50
69
|
* Renders a `ButtonOrLink` if one of `href` or `onClick` is passed along with no `as`. Otherwise,
|
|
@@ -67,13 +86,15 @@ export function MaybeButtonOrLink(props: InternalMaybeButtonOrLinkProps) {
|
|
|
67
86
|
...otherElementProps
|
|
68
87
|
} = props
|
|
69
88
|
|
|
70
|
-
const
|
|
71
|
-
Element,
|
|
89
|
+
const renderState: OtherElementRenderState = {
|
|
72
90
|
category: 'other',
|
|
73
91
|
role: props.role ?? 'none',
|
|
74
92
|
disabled: false,
|
|
93
|
+
// The types lie to ensure there's a type error if consumers forget to spread `elementProps` on `Element`
|
|
94
|
+
Element: Element as OtherElementRenderState['Element'],
|
|
95
|
+
elementProps: {} as OtherElementRenderState['elementProps'],
|
|
75
96
|
}
|
|
76
97
|
|
|
77
|
-
return render ? render(otherElementProps,
|
|
98
|
+
return render ? render(otherElementProps, renderState) : <Element {...otherElementProps} />
|
|
78
99
|
}
|
|
79
100
|
}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import type { ReactNode } from 'react'
|
|
4
4
|
import { createPortal } from 'react-dom'
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
const [mounted, setMounted] = useState(false)
|
|
6
|
+
import { useFirstRender } from '../../hooks/index.ts'
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}, [])
|
|
8
|
+
export function Portal({ children }: { children: ReactNode }) {
|
|
9
|
+
const firstRender = useFirstRender({ immediatelyRerender: true })
|
|
12
10
|
|
|
13
11
|
// Don't render until after hydration
|
|
14
|
-
if (
|
|
12
|
+
if (firstRender) {
|
|
15
13
|
return null
|
|
16
14
|
}
|
|
17
15
|
|