@graphprotocol/gds-react 0.1.1 → 0.2.0
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/GDSProvider.d.ts +12 -10
- package/dist/GDSProvider.d.ts.map +1 -1
- package/dist/GDSProvider.js +10 -8
- 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 +7 -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 +15 -23
- package/dist/components/Breadcrumbs.parts.js.map +1 -1
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.js +17 -12
- 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 +1 -1
- 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.d.ts +6 -0
- package/dist/components/Chip.d.ts.map +1 -0
- package/dist/components/Chip.js +5 -0
- package/dist/components/Chip.js.map +1 -0
- package/dist/components/Chip.meta.d.ts +15 -0
- package/dist/components/Chip.meta.d.ts.map +1 -0
- package/dist/components/Chip.meta.js +22 -0
- package/dist/components/Chip.meta.js.map +1 -0
- package/dist/components/Chip.parts.d.ts +52 -0
- package/dist/components/Chip.parts.d.ts.map +1 -0
- package/dist/components/Chip.parts.js +114 -0
- package/dist/components/Chip.parts.js.map +1 -0
- 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.map +1 -1
- package/dist/components/CopyButton.js +2 -4
- 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 +2 -1
- 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 +1 -0
- 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 +1 -2
- 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 +23 -32
- package/dist/components/Menu.parts.d.ts.map +1 -1
- package/dist/components/Menu.parts.js +284 -303
- 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 +36 -32
- 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/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.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 +15 -31
- 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/TabSet.parts.js +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.d.ts +0 -2
- package/dist/components/ToggleButton.d.ts.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 +20 -20
- package/dist/components/Tooltip.parts.d.ts.map +1 -1
- package/dist/components/Tooltip.parts.js +129 -88
- 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 +1 -1
- package/dist/components/base/ButtonOrLink.parts.d.ts +14 -10
- package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
- package/dist/components/base/ButtonOrLink.parts.js +47 -47
- 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 +1 -1
- package/dist/components/base/MaybeButtonOrLink.d.ts.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/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 +1 -2
- package/dist/components/base/index.d.ts.map +1 -1
- package/dist/components/base/index.js +1 -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 +6 -6
- 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/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/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.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/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/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 +17 -17
- package/src/GDSProvider.tsx +11 -9
- package/src/components/Address.tsx +2 -2
- package/src/components/Avatar.tsx +10 -11
- package/src/components/Breadcrumbs.meta.ts +3 -1
- package/src/components/Breadcrumbs.parts.tsx +18 -30
- package/src/components/Button.tsx +27 -13
- 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 +1 -1
- package/src/components/Checkbox.meta.ts +1 -5
- package/src/components/Chip.meta.ts +23 -0
- package/src/components/Chip.parts.tsx +319 -0
- package/src/components/Chip.tsx +7 -0
- 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 +3 -4
- package/src/components/CurrencyInput.meta.ts +1 -5
- package/src/components/DescriptionList.parts.tsx +2 -1
- 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 +5 -6
- package/src/components/Keyboard.tsx +1 -1
- package/src/components/Link.meta.ts +1 -0
- package/src/components/Link.tsx +2 -3
- package/src/components/Menu.meta.ts +39 -1
- package/src/components/Menu.parts.tsx +553 -549
- package/src/components/Modal.meta.ts +1 -1
- package/src/components/Modal.parts.tsx +67 -68
- package/src/components/OTCInput.meta.ts +1 -5
- package/src/components/OTCInput.tsx +1 -1
- package/src/components/Radio.meta.ts +1 -5
- package/src/components/SegmentedControl.meta.ts +3 -1
- package/src/components/SegmentedControl.parts.tsx +40 -44
- 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/TabSet.parts.tsx +1 -1
- package/src/components/TextArea.meta.ts +1 -5
- package/src/components/ToggleButton.meta.ts +1 -6
- package/src/components/ToggleButton.tsx +1 -3
- package/src/components/Tooltip.meta.ts +13 -2
- package/src/components/Tooltip.parts.tsx +215 -159
- package/src/components/Tooltip.tsx +2 -2
- package/src/components/base/Addon.meta.ts +3 -1
- package/src/components/base/ButtonOrLink.parts.tsx +91 -73
- package/src/components/base/Checkable.parts.tsx +6 -13
- package/src/components/base/Field.parts.tsx +5 -5
- package/src/components/base/Portal.tsx +5 -7
- 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 +8 -2
- package/src/components/index.ts +3 -2
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useCSSProp.ts +6 -8
- package/src/hooks/useCSSProps.ts +13 -22
- package/src/hooks/useCSSPropsPolyfill.ts +15 -23
- package/src/hooks/useCSSState.ts +11 -6
- package/src/hooks/useEffectWithRefDeps.ts +2 -2
- package/src/hooks/useFirstRender.ts +36 -0
- package/src/hooks/usePrevious.ts +6 -4
- package/src/hooks/useRefWithInit.ts +2 -2
- package/src/hooks/useStyleObserver.ts +5 -1
- 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/cn.ts +3 -1
- package/src/utils/getCSSPropsAttributes.ts +13 -8
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Ref, RefCallback } from 'react'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
getCSSPropRawValue,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from '@graphprotocol/gds-css'
|
|
10
10
|
|
|
11
11
|
import { useCSSProps, type PassedValues, type PropValues } from './useCSSProps.ts'
|
|
12
|
-
import {
|
|
12
|
+
import { useFirstRender } from './useFirstRender.ts'
|
|
13
13
|
|
|
14
14
|
type ExtractPolyfillValues<P extends CSSPropsConfig> = {
|
|
15
15
|
[K in keyof P as P[K]['type'] extends 'values' ? K : never]: CSSPropType<P[K]> | undefined
|
|
@@ -68,19 +68,21 @@ export function useCSSPropsPolyfill<
|
|
|
68
68
|
const allPassedValues = (() => {
|
|
69
69
|
if (!returnPropValues) return passedValues
|
|
70
70
|
if (returnPropValues === true) return passedValues
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
const passed = passedValues as Record<string, unknown>
|
|
72
|
+
const merged = { ...passed }
|
|
73
|
+
for (const key of Object.keys(returnPropValues)) {
|
|
74
|
+
const value = returnPropValues[key]
|
|
75
|
+
if (key in passedValues && passed[key] !== value) {
|
|
74
76
|
throw new Error(
|
|
75
|
-
`[useCSSPropsPolyfill] Conflicting values for prop \`${key}\`: ${
|
|
77
|
+
`[useCSSPropsPolyfill] Conflicting values for prop \`${key}\`: ${String(passed[key])} vs ${value}`,
|
|
76
78
|
)
|
|
77
79
|
}
|
|
78
|
-
merged[key
|
|
80
|
+
merged[key] = value
|
|
79
81
|
}
|
|
80
|
-
return merged
|
|
82
|
+
return merged as typeof passedValues
|
|
81
83
|
})()
|
|
82
84
|
|
|
83
|
-
const [callbackRef, propValues,
|
|
85
|
+
const [callbackRef, propValues, cssProps] = useCSSProps(component, allPassedValues, {
|
|
84
86
|
ref,
|
|
85
87
|
disabled: !polyfillEnabled && !returnPropValues,
|
|
86
88
|
})
|
|
@@ -92,30 +94,20 @@ export function useCSSPropsPolyfill<
|
|
|
92
94
|
* to immediately rerender in browsers that support style queries); unfortunately, that would
|
|
93
95
|
* cause a flash of missing styles in browsers that need the polyfill.
|
|
94
96
|
*/
|
|
95
|
-
const firstRender =
|
|
97
|
+
const firstRender = useFirstRender({ immediatelyRerender: !polyfillEnabled })
|
|
96
98
|
const polyfillAttributes =
|
|
97
|
-
polyfillEnabled || firstRender
|
|
99
|
+
polyfillEnabled || firstRender
|
|
98
100
|
? Object.fromEntries(
|
|
99
|
-
|
|
101
|
+
cssProps
|
|
100
102
|
.filter((prop) => prop.name in passedValues)
|
|
101
103
|
.map((prop) => {
|
|
102
104
|
const value = propValues[prop.name as keyof typeof propValues]
|
|
103
|
-
const rawValue = getCSSPropRawValue(prop
|
|
105
|
+
const rawValue = getCSSPropRawValue(prop, value)
|
|
104
106
|
return [prop.polyfillAttribute, rawValue]
|
|
105
107
|
}),
|
|
106
108
|
)
|
|
107
109
|
: {}
|
|
108
110
|
|
|
109
|
-
// If the polyfill is not needed, rerender to remove the polyfill attributes
|
|
110
|
-
const [rerender] = useForceRerender()
|
|
111
|
-
useLayoutEffect(() => {
|
|
112
|
-
firstRender.current = false
|
|
113
|
-
if (!polyfillEnabled) {
|
|
114
|
-
rerender()
|
|
115
|
-
}
|
|
116
|
-
// oxlint-disable-next-line exhaustive-deps
|
|
117
|
-
}, [])
|
|
118
|
-
|
|
119
111
|
if (!returnPropValues) {
|
|
120
112
|
return [callbackRef, polyfillAttributes] as const
|
|
121
113
|
}
|
package/src/hooks/useCSSState.ts
CHANGED
|
@@ -56,15 +56,17 @@ export function useCSSState<
|
|
|
56
56
|
|
|
57
57
|
const variables = useRefWithInit(() =>
|
|
58
58
|
Object.keys(variableInitialValues).map((variableName) => {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
const isArbitrary = !(variableName in cssStateVariables)
|
|
60
|
+
const defaultValue = !isArbitrary
|
|
61
|
+
? cssStateVariables[variableName as CSSStateVariableName].defaultValue
|
|
62
|
+
: undefined
|
|
63
63
|
return {
|
|
64
64
|
name: variableName,
|
|
65
65
|
defaultValue,
|
|
66
66
|
initialValue: variableInitialValues[variableName as keyof T] ?? defaultValue,
|
|
67
|
-
observedProperty:
|
|
67
|
+
observedProperty: isArbitrary
|
|
68
|
+
? `--gds-state-${variableName}`
|
|
69
|
+
: `--gds-observed-${variableName}`,
|
|
68
70
|
exposedProperty: `--gds-exposed-${variableName}`,
|
|
69
71
|
exposedAttribute: `data-gds-exposed-${variableName}`,
|
|
70
72
|
polyfillAttribute: `data-gds-state-polyfill-${variableName}`,
|
|
@@ -105,7 +107,10 @@ export function useCSSState<
|
|
|
105
107
|
for (const record of records) {
|
|
106
108
|
if (propertyValues.get(record.property) !== record.value) {
|
|
107
109
|
propertyValues.set(record.property, record.value)
|
|
108
|
-
if (
|
|
110
|
+
if (
|
|
111
|
+
record.property.startsWith('--gds-state-') ||
|
|
112
|
+
record.property.startsWith('--gds-observed-')
|
|
113
|
+
) {
|
|
109
114
|
statePropertiesChanged = true
|
|
110
115
|
}
|
|
111
116
|
}
|
|
@@ -20,7 +20,7 @@ export function useEffectWithRefDeps<T, RefDeps extends readonly Ref<T>[]>(
|
|
|
20
20
|
effect: EffectCallback,
|
|
21
21
|
regularDeps: unknown[],
|
|
22
22
|
refDeps: [...RefDeps],
|
|
23
|
-
options: { deepCompare?: boolean; hook?: EffectHook } = {},
|
|
23
|
+
options: { deepCompare?: boolean | undefined; hook?: EffectHook | undefined } = {},
|
|
24
24
|
) {
|
|
25
25
|
const { deepCompare = false, hook = useEffect } = options
|
|
26
26
|
|
|
@@ -53,7 +53,7 @@ export function useEffectWithRefDeps<T, RefDeps extends readonly Ref<T>[]>(
|
|
|
53
53
|
|
|
54
54
|
const runEffectNextTick = useCallback(() => {
|
|
55
55
|
const token = ++runEffectToken.current
|
|
56
|
-
queueMicrotask(() => {
|
|
56
|
+
window.queueMicrotask(() => {
|
|
57
57
|
if (runEffectToken.current === token) {
|
|
58
58
|
runEffect()
|
|
59
59
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react'
|
|
2
|
+
|
|
3
|
+
import { useForceRerender } from './useForceRerender.ts'
|
|
4
|
+
|
|
5
|
+
interface UseFirstRenderOptions {
|
|
6
|
+
/** Callback to run on first render. */
|
|
7
|
+
callback?: () => void
|
|
8
|
+
/**
|
|
9
|
+
* If true, immediately triggers a re-render after the first render.
|
|
10
|
+
*
|
|
11
|
+
* @default false
|
|
12
|
+
*/
|
|
13
|
+
immediatelyRerender?: boolean | undefined
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function useFirstRender(callback?: () => void): boolean
|
|
17
|
+
export function useFirstRender(options: UseFirstRenderOptions): boolean
|
|
18
|
+
export function useFirstRender(callbackOrOptions?: (() => void) | UseFirstRenderOptions) {
|
|
19
|
+
const options = typeof callbackOrOptions === 'function' ? undefined : callbackOrOptions
|
|
20
|
+
const callback = typeof callbackOrOptions === 'function' ? callbackOrOptions : options?.callback
|
|
21
|
+
|
|
22
|
+
const firstRender = useRef(true)
|
|
23
|
+
const [rerender] = useForceRerender()
|
|
24
|
+
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (!firstRender.current) return
|
|
27
|
+
firstRender.current = false
|
|
28
|
+
callback?.()
|
|
29
|
+
if (options?.immediatelyRerender) {
|
|
30
|
+
rerender()
|
|
31
|
+
}
|
|
32
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
33
|
+
}, [])
|
|
34
|
+
|
|
35
|
+
return firstRender.current
|
|
36
|
+
}
|
package/src/hooks/usePrevious.ts
CHANGED
|
@@ -12,10 +12,12 @@ const NOT_SET = Symbol('NOT_SET')
|
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* const previous = usePrevious(someValue)
|
|
17
|
+
* if (previous.hasChanged) {
|
|
18
|
+
* // Value changed from `previous.value` to `someValue`
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
19
21
|
*/
|
|
20
22
|
export function usePrevious<T>(value: T) {
|
|
21
23
|
const previousRenderValueRef = useRef<T | typeof NOT_SET>(NOT_SET)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useRef, type
|
|
1
|
+
import { useRef, type RefObject } from 'react'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Works like `useRef` but accepts an initializer function that runs once on the first render, like
|
|
@@ -11,5 +11,5 @@ export function useRefWithInit<T>(initFn: () => T) {
|
|
|
11
11
|
ref.current = initFn()
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
return ref as
|
|
14
|
+
return ref as RefObject<T>
|
|
15
15
|
}
|
|
@@ -17,7 +17,11 @@ export function useStyleObserver<T extends string>(
|
|
|
17
17
|
properties: T[],
|
|
18
18
|
onChange: (records: Record<T>[]) => void,
|
|
19
19
|
deps: unknown[],
|
|
20
|
-
options: {
|
|
20
|
+
options: {
|
|
21
|
+
ref?: Ref<HTMLElement> | undefined
|
|
22
|
+
immediate?: boolean | undefined
|
|
23
|
+
disabled?: boolean | undefined
|
|
24
|
+
} = {},
|
|
21
25
|
) {
|
|
22
26
|
const { ref: passedRef, immediate = false, disabled = false } = options
|
|
23
27
|
const elementRef = useRef<HTMLElement>(null)
|
|
@@ -2,17 +2,21 @@ import { useId } from 'react'
|
|
|
2
2
|
|
|
3
3
|
import { Icon, type IconProps } from '../components/Icon.tsx'
|
|
4
4
|
|
|
5
|
-
export interface CalendarDynamicIconProps extends IconProps {
|
|
5
|
+
export interface CalendarDynamicIconProps extends Omit<IconProps, 'alt'> {
|
|
6
|
+
/** Defaults to a formatted version of `date`. */
|
|
7
|
+
alt?: string
|
|
6
8
|
/**
|
|
7
|
-
* Day of the month.
|
|
9
|
+
* Day of the month, or a full date. If the latter, the icon will only display the day part, but
|
|
10
|
+
* the default `alt` will be the full formatted date.
|
|
8
11
|
*
|
|
9
|
-
* @default new Date()
|
|
12
|
+
* @default new Date()
|
|
10
13
|
*/
|
|
11
|
-
date?: number
|
|
14
|
+
date?: number | Date
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
export function CalendarDynamicIcon({
|
|
15
|
-
|
|
18
|
+
alt,
|
|
19
|
+
date = new Date(),
|
|
16
20
|
...props
|
|
17
21
|
}: CalendarDynamicIconProps) {
|
|
18
22
|
const uniqueId = useId()
|
|
@@ -37,13 +41,19 @@ export function CalendarDynamicIcon({
|
|
|
37
41
|
fontSize="7px"
|
|
38
42
|
fontWeight="bold"
|
|
39
43
|
>
|
|
40
|
-
{date}
|
|
44
|
+
{typeof date === 'number' ? date : date.getDate()}
|
|
41
45
|
</text>
|
|
42
46
|
</mask>
|
|
43
47
|
</defs>
|
|
44
48
|
<use href={`#${uniqueId}-calendar-path`} mask={`url(#${uniqueId}-text-mask)`} />
|
|
45
49
|
</svg>
|
|
46
50
|
}
|
|
51
|
+
alt={
|
|
52
|
+
alt ??
|
|
53
|
+
(typeof date === 'number'
|
|
54
|
+
? `Day ${date} of the month`
|
|
55
|
+
: date.toLocaleDateString(undefined, { dateStyle: 'long' }))
|
|
56
|
+
}
|
|
47
57
|
data-name="CalendarDynamic"
|
|
48
58
|
{...props}
|
|
49
59
|
/>
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { useId } from 'react'
|
|
2
|
-
import type { SetOptional } from 'type-fest'
|
|
3
2
|
|
|
4
3
|
import { Icon, type IconProps } from '../components/Icon.tsx'
|
|
5
4
|
|
|
6
|
-
export interface CopyInteractiveIconProps extends
|
|
5
|
+
export interface CopyInteractiveIconProps extends Omit<IconProps, 'alt'> {
|
|
6
|
+
/** @default 'Copy' */
|
|
7
|
+
alt?: IconProps['alt']
|
|
7
8
|
/** @default false */
|
|
8
|
-
copied?: boolean
|
|
9
|
+
copied?: boolean | undefined
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
export function CopyInteractiveIcon({
|
|
12
|
+
export function CopyInteractiveIcon({
|
|
13
|
+
alt = 'Copy',
|
|
14
|
+
copied = false,
|
|
15
|
+
...props
|
|
16
|
+
}: CopyInteractiveIconProps) {
|
|
12
17
|
const uniqueId = useId()
|
|
13
18
|
|
|
14
19
|
return (
|
|
@@ -85,7 +90,7 @@ export function CopyInteractiveIcon({ copied = false, ...props }: CopyInteractiv
|
|
|
85
90
|
</g>
|
|
86
91
|
</svg>
|
|
87
92
|
}
|
|
88
|
-
alt=
|
|
93
|
+
alt={alt}
|
|
89
94
|
data-name="CopyAnimated"
|
|
90
95
|
{...props}
|
|
91
96
|
/>
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import type { SetOptional } from 'type-fest'
|
|
2
|
-
|
|
3
1
|
import { Icon, type IconProps } from '../components/Icon.tsx'
|
|
4
2
|
|
|
5
|
-
export interface SidebarLeftInteractiveIconProps extends
|
|
3
|
+
export interface SidebarLeftInteractiveIconProps extends Omit<IconProps, 'alt'> {
|
|
4
|
+
/** @default 'Toggle sidebar' */
|
|
5
|
+
alt?: IconProps['alt']
|
|
6
|
+
}
|
|
6
7
|
|
|
7
|
-
export function SidebarLeftInteractiveIcon(
|
|
8
|
+
export function SidebarLeftInteractiveIcon({
|
|
9
|
+
alt = 'Toggle sidebar',
|
|
10
|
+
...props
|
|
11
|
+
}: SidebarLeftInteractiveIconProps) {
|
|
8
12
|
return (
|
|
9
13
|
<Icon
|
|
10
14
|
src={
|
|
@@ -19,7 +23,7 @@ export function SidebarLeftInteractiveIcon(props: SidebarLeftInteractiveIconProp
|
|
|
19
23
|
/>
|
|
20
24
|
</svg>
|
|
21
25
|
}
|
|
22
|
-
alt=
|
|
26
|
+
alt={alt}
|
|
23
27
|
data-name="SidebarLeftInteractive"
|
|
24
28
|
{...props}
|
|
25
29
|
/>
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import type { SetOptional } from 'type-fest'
|
|
2
|
-
|
|
3
1
|
import { Icon, type IconProps } from '../components/Icon.tsx'
|
|
4
2
|
|
|
5
|
-
export interface SidebarRightInteractiveIconProps extends
|
|
3
|
+
export interface SidebarRightInteractiveIconProps extends Omit<IconProps, 'alt'> {
|
|
4
|
+
/** @default 'Toggle sidebar' */
|
|
5
|
+
alt?: IconProps['alt']
|
|
6
|
+
}
|
|
6
7
|
|
|
7
|
-
export function SidebarRightInteractiveIcon(
|
|
8
|
+
export function SidebarRightInteractiveIcon({
|
|
9
|
+
alt = 'Toggle sidebar',
|
|
10
|
+
...props
|
|
11
|
+
}: SidebarRightInteractiveIconProps) {
|
|
8
12
|
return (
|
|
9
13
|
<Icon
|
|
10
14
|
src={
|
|
@@ -19,7 +23,7 @@ export function SidebarRightInteractiveIcon(props: SidebarRightInteractiveIconPr
|
|
|
19
23
|
/>
|
|
20
24
|
</svg>
|
|
21
25
|
}
|
|
22
|
-
alt=
|
|
26
|
+
alt={alt}
|
|
23
27
|
data-name="SidebarRightInteractive"
|
|
24
28
|
{...props}
|
|
25
29
|
/>
|
package/src/tailwind-plugin.ts
CHANGED
|
@@ -7,7 +7,6 @@ import { AddressMeta } from './components/Address.meta.ts'
|
|
|
7
7
|
import { AvatarMeta } from './components/Avatar.meta.ts'
|
|
8
8
|
import { AvatarGroupMeta } from './components/AvatarGroup.meta.ts'
|
|
9
9
|
import { AddonMeta } from './components/base/Addon.meta.ts'
|
|
10
|
-
import { ButtonOrLinkMeta } from './components/base/ButtonOrLink.meta.ts'
|
|
11
10
|
import { CheckableMeta } from './components/base/Checkable.meta.ts'
|
|
12
11
|
import { FieldMeta } from './components/base/Field.meta.ts'
|
|
13
12
|
import { TransitionMeta } from './components/base/Transition.meta.ts'
|
|
@@ -16,8 +15,10 @@ import { ButtonMeta } from './components/Button.meta.ts'
|
|
|
16
15
|
import { ButtonGroupMeta } from './components/ButtonGroup.meta.ts'
|
|
17
16
|
import { CardMeta } from './components/Card.meta.ts'
|
|
18
17
|
import { CheckboxMeta } from './components/Checkbox.meta.ts'
|
|
18
|
+
import { ChipGroupMeta, ChipMeta } from './components/Chip.meta.ts'
|
|
19
19
|
import { ClusterMeta } from './components/Cluster.meta.ts'
|
|
20
20
|
import { CodeBlockMeta, CodeBlockTabsMeta } from './components/CodeBlock.meta.ts'
|
|
21
|
+
import { CodeInlineMeta } from './components/CodeInline.meta.ts'
|
|
21
22
|
import { CopyButtonMeta } from './components/CopyButton.meta.ts'
|
|
22
23
|
import { CurrencyInputMeta } from './components/CurrencyInput.meta.ts'
|
|
23
24
|
import { DescriptionListItemMeta, DescriptionListMeta } from './components/DescriptionList.meta.ts'
|
|
@@ -77,15 +78,17 @@ const gdsTailwindPluginWithComponents: ReturnType<typeof createPlugin> = createP
|
|
|
77
78
|
AvatarGroupMeta,
|
|
78
79
|
BreadcrumbsItemMeta,
|
|
79
80
|
BreadcrumbsMeta,
|
|
80
|
-
ButtonOrLinkMeta,
|
|
81
81
|
ButtonMeta,
|
|
82
82
|
ButtonGroupMeta,
|
|
83
83
|
CardMeta,
|
|
84
|
-
CodeBlockMeta,
|
|
85
|
-
CodeBlockTabsMeta,
|
|
86
84
|
CheckableMeta,
|
|
87
85
|
CheckboxMeta,
|
|
86
|
+
ChipMeta,
|
|
87
|
+
ChipGroupMeta,
|
|
88
88
|
ClusterMeta,
|
|
89
|
+
CodeBlockMeta,
|
|
90
|
+
CodeBlockTabsMeta,
|
|
91
|
+
CodeInlineMeta,
|
|
89
92
|
CopyButtonMeta,
|
|
90
93
|
CurrencyInputMeta,
|
|
91
94
|
DescriptionListItemMeta,
|
|
@@ -108,8 +111,8 @@ const gdsTailwindPluginWithComponents: ReturnType<typeof createPlugin> = createP
|
|
|
108
111
|
StatusMeta,
|
|
109
112
|
StepperMeta,
|
|
110
113
|
SwitchMeta,
|
|
111
|
-
TabSetTabsMeta,
|
|
112
114
|
TabSetTabMeta,
|
|
115
|
+
TabSetTabsMeta,
|
|
113
116
|
TagMeta,
|
|
114
117
|
TextAreaMeta,
|
|
115
118
|
ToggleButtonMeta,
|
package/src/utils/cn.ts
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* ```ts
|
|
7
|
+
* cn('base-class', condition && 'conditional-class', className)
|
|
8
|
+
* ```
|
|
7
9
|
*/
|
|
8
10
|
export function cn(...classes: (string | undefined | null | false)[]): string {
|
|
9
11
|
return classes.filter(Boolean).join(' ')
|
|
@@ -12,8 +12,14 @@ type AllCSSProps<C extends GDSComponent> = {
|
|
|
12
12
|
[K in keyof ComponentCSSProps<C>]-?: ComponentCSSProps<C>[K] | undefined
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Validates the passed values object:
|
|
17
|
+
*
|
|
18
|
+
* - Rejects keys that are not CSS props.
|
|
19
|
+
* - For props with a `defaultValue`, ensures they can be `undefined` (preventing destructuring
|
|
20
|
+
* defaults, which would break `default-*` utilities).
|
|
21
|
+
* - For props without a `defaultValue`, allows any value since they're required.
|
|
22
|
+
*/
|
|
17
23
|
type ValidatePassedValues<C extends GDSComponent, T extends AllCSSProps<C>> = {
|
|
18
24
|
[K in keyof T]: K extends keyof ComponentCSSPropsConfig<C>
|
|
19
25
|
? 'defaultValue' extends keyof ComponentCSSPropsConfig<C>[K]
|
|
@@ -21,12 +27,11 @@ type ValidatePassedValues<C extends GDSComponent, T extends AllCSSProps<C>> = {
|
|
|
21
27
|
? T[K]
|
|
22
28
|
: never
|
|
23
29
|
: T[K]
|
|
24
|
-
:
|
|
30
|
+
: `"${K & string}" is not a CSS prop of this component`
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
/**
|
|
28
|
-
* Returns attributes to spread on the root element of a component that supports CSS
|
|
29
|
-
* enables the CSS Props system to apply prop-based styling.
|
|
34
|
+
* Returns attributes to spread on the root element of a component that supports CSS props.
|
|
30
35
|
*
|
|
31
36
|
* @param component The component metadata object created with createComponent.
|
|
32
37
|
* @param passedValues Object containing all the CSS prop values from the component props.
|
|
@@ -41,13 +46,13 @@ export function getCSSPropsAttributes<C extends GDSComponent, V extends AllCSSPr
|
|
|
41
46
|
const customProperties: Record<string, string> = {}
|
|
42
47
|
|
|
43
48
|
for (const propName in passedValues) {
|
|
44
|
-
const
|
|
49
|
+
const cssProp = component.getCSSPropByName(propName)
|
|
45
50
|
const value = passedValues[propName]
|
|
46
51
|
if (value === undefined) continue
|
|
47
|
-
customProperties[`--gds-passed-${
|
|
52
|
+
customProperties[`--gds-passed-${cssProp.kebabName}`] = getCSSPropRawValue(cssProp, value)
|
|
48
53
|
}
|
|
49
54
|
|
|
50
55
|
return {
|
|
51
|
-
style: { ...
|
|
56
|
+
style: { ...customProperties, ...style },
|
|
52
57
|
}
|
|
53
58
|
}
|
package/src/utils/splitProps.ts
CHANGED
|
@@ -10,28 +10,22 @@
|
|
|
10
10
|
* destructured), `style`, `inert`, `hidden`, and `aria-hidden` go in `rootProps`, along with data
|
|
11
11
|
* attributes, since they can be coupled to the `className` to apply styles conditionally, e.g.
|
|
12
12
|
* `<Button data-highlighted={highlighted} className="data-[highlighted]:prop-variant-primary" />`.
|
|
13
|
-
* However, data attributes can also be needed on the underlying element in some cases, so they are
|
|
14
|
-
* also included in the `nestedProps`, except the ones starting with `data-gds-`, to avoid messing
|
|
15
|
-
* with the CSS props or states systems.
|
|
16
13
|
*/
|
|
17
14
|
export function splitProps<T extends Record<string, unknown>>(props: T) {
|
|
18
15
|
const rootProps: Record<string, unknown> = {}
|
|
19
16
|
const nestedProps: Record<string, unknown> = {}
|
|
20
17
|
|
|
21
18
|
for (const [key, value] of Object.entries(props)) {
|
|
22
|
-
const isDataAttribute = key.startsWith('data-')
|
|
23
|
-
const isGDSDataAttribute = key.startsWith('data-gds-')
|
|
24
19
|
const isRootProp =
|
|
25
20
|
key === 'className' ||
|
|
26
21
|
key === 'style' ||
|
|
27
22
|
key === 'inert' ||
|
|
28
23
|
key === 'hidden' ||
|
|
29
24
|
key === 'aria-hidden' ||
|
|
30
|
-
|
|
25
|
+
key.startsWith('data-')
|
|
31
26
|
if (isRootProp) {
|
|
32
27
|
rootProps[key] = value
|
|
33
|
-
}
|
|
34
|
-
if (!isRootProp || (isDataAttribute && !isGDSDataAttribute)) {
|
|
28
|
+
} else {
|
|
35
29
|
nestedProps[key] = value
|
|
36
30
|
}
|
|
37
31
|
}
|
|
@@ -49,7 +43,13 @@ export function splitProps<T extends Record<string, unknown>>(props: T) {
|
|
|
49
43
|
: never]: T[K]
|
|
50
44
|
}
|
|
51
45
|
nestedProps: {
|
|
52
|
-
[K in keyof T as K extends
|
|
46
|
+
[K in keyof T as K extends
|
|
47
|
+
| 'className'
|
|
48
|
+
| 'style'
|
|
49
|
+
| 'inert'
|
|
50
|
+
| 'hidden'
|
|
51
|
+
| 'aria-hidden'
|
|
52
|
+
| `data-${string}`
|
|
53
53
|
? never
|
|
54
54
|
: K]: T[K]
|
|
55
55
|
}
|
|
@@ -12,14 +12,16 @@ import { Children, isValidElement, type ReactElement, type ReactNode } from 'rea
|
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
15
|
+
* ```tsx
|
|
16
|
+
* trimReactNode(' hello ') // 'hello'
|
|
17
|
+
* trimReactNode(
|
|
18
|
+
* <>
|
|
19
|
+
* {' '}
|
|
20
|
+
* <span>test</span>{' '}
|
|
21
|
+
* </>,
|
|
22
|
+
* ) // <><span>test</span></>
|
|
23
|
+
* trimReactNode([' ', <div>content</div>, ' ']) // [<div>content</div>]
|
|
24
|
+
* ```
|
|
23
25
|
*
|
|
24
26
|
* @param node - The `ReactNode` to trim.
|
|
25
27
|
* @returns A new `ReactNode` with leading and trailing whitespace removed.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonOrLink.meta.d.ts","sourceRoot":"","sources":["../../../src/components/base/ButtonOrLink.meta.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,yGAE3B,CAAA"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { createComponent } from '@graphprotocol/gds-css';
|
|
2
|
-
// `ButtonOrLink` doesn't use CSS Props, but we register it for the `*-button-or-link` variants
|
|
3
|
-
export const ButtonOrLinkMeta = createComponent('ButtonOrLink', {
|
|
4
|
-
containerName: null,
|
|
5
|
-
});
|
|
6
|
-
//# sourceMappingURL=ButtonOrLink.meta.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonOrLink.meta.js","sourceRoot":"","sources":["../../../src/components/base/ButtonOrLink.meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC,cAAc,EAAE;IAC9D,aAAa,EAAE,IAAI;CACpB,CAAC,CAAA"}
|