@graphprotocol/gds-react 0.2.0 → 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 +1 -9
- package/dist/GDSProvider.d.ts.map +1 -1
- package/dist/GDSProvider.js +4 -3
- package/dist/GDSProvider.js.map +1 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar.js +2 -2
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Breadcrumbs.parts.js +1 -1
- package/dist/components/Breadcrumbs.parts.js.map +1 -1
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.js +69 -69
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Card.js +2 -2
- package/dist/components/Card.js.map +1 -1
- package/dist/components/CodeBlock.d.ts +1 -1
- package/dist/components/CodeBlock.parts.d.ts +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 -19
- package/dist/components/CopyButton.js.map +1 -1
- package/dist/components/Input.js +2 -2
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Link.js +2 -2
- package/dist/components/Link.js.map +1 -1
- package/dist/components/Menu.parts.d.ts +4 -5
- package/dist/components/Menu.parts.d.ts.map +1 -1
- package/dist/components/Menu.parts.js +49 -44
- package/dist/components/Menu.parts.js.map +1 -1
- package/dist/components/Modal.parts.d.ts.map +1 -1
- package/dist/components/Modal.parts.js +17 -21
- package/dist/components/Modal.parts.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/Search.js +1 -1
- package/dist/components/Tooltip.parts.d.ts +13 -4
- package/dist/components/Tooltip.parts.d.ts.map +1 -1
- package/dist/components/Tooltip.parts.js +51 -63
- package/dist/components/Tooltip.parts.js.map +1 -1
- package/dist/components/base/ButtonOrLink.d.ts +1 -1
- package/dist/components/base/ButtonOrLink.d.ts.map +1 -1
- package/dist/components/base/ButtonOrLink.parts.d.ts +10 -3
- package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
- package/dist/components/base/ButtonOrLink.parts.js +27 -35
- package/dist/components/base/ButtonOrLink.parts.js.map +1 -1
- package/dist/components/base/MaybeButtonOrLink.d.ts +19 -2
- 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/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/index.d.ts +1 -0
- package/dist/components/base/index.d.ts.map +1 -1
- package/dist/components/base/index.js +1 -0
- package/dist/components/base/index.js.map +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/useCSSProp.js +1 -1
- package/dist/hooks/useCSSProp.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/useGDS.js +1 -1
- package/dist/hooks/useGDS.js.map +1 -1
- package/dist/hooks/useStyleObserver.js +1 -1
- package/dist/hooks/useStyleObserver.js.map +1 -1
- package/dist/tailwind-plugin.d.ts.map +1 -1
- package/dist/tailwind-plugin.js +3 -0
- 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/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/package.json +14 -14
- package/src/GDSContext.ts +16 -0
- package/src/GDSProvider.tsx +20 -31
- package/src/components/Avatar.tsx +3 -2
- package/src/components/Breadcrumbs.parts.tsx +1 -1
- package/src/components/Button.tsx +113 -107
- package/src/components/Card.tsx +2 -2
- package/src/components/CopyButton.tsx +49 -25
- package/src/components/Input.tsx +1 -1
- package/src/components/Link.tsx +2 -2
- package/src/components/Menu.parts.tsx +75 -72
- package/src/components/Modal.parts.tsx +26 -31
- 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/Search.tsx +1 -1
- package/src/components/Tooltip.parts.tsx +95 -80
- package/src/components/base/ButtonOrLink.parts.tsx +71 -51
- package/src/components/base/ButtonOrLink.tsx +1 -0
- package/src/components/base/MaybeButtonOrLink.tsx +26 -5
- package/src/components/base/Presence.tsx +1375 -0
- package/src/components/base/index.ts +1 -0
- package/src/components/index.ts +10 -0
- package/src/hooks/useCSSProp.ts +1 -1
- package/src/hooks/useControlled.ts +16 -8
- package/src/hooks/useGDS.ts +1 -1
- package/src/hooks/useStyleObserver.ts +1 -1
- package/src/tailwind-plugin.ts +3 -0
- package/src/utils/InlineCounter.tsx +17 -0
- package/src/utils/RenderCount.tsx +7 -0
- package/src/utils/index.ts +2 -0
|
@@ -30,7 +30,6 @@ import { Render, type RenderFnProps, type RenderProp } from './base/Render.tsx'
|
|
|
30
30
|
import { Button } from './Button.tsx'
|
|
31
31
|
import { Checkbox } from './Checkbox.tsx'
|
|
32
32
|
import { MenuMeta, type MenuItemMeta } from './Menu.meta.js'
|
|
33
|
-
import { Tooltip } from './Tooltip.tsx'
|
|
34
33
|
|
|
35
34
|
const MenuTriggerContext = createContext<boolean>(false)
|
|
36
35
|
|
|
@@ -66,17 +65,15 @@ declare namespace MenuProps {
|
|
|
66
65
|
* `alignOffset`, `matchTriggerWidth`, and `matchTriggerHeight`).
|
|
67
66
|
*/
|
|
68
67
|
trigger?:
|
|
69
|
-
| RenderProp<
|
|
70
|
-
{ open: boolean; setOpen: (open: boolean) => void; openMenu: () => void },
|
|
71
|
-
{ disabled?: boolean | undefined }
|
|
72
|
-
>
|
|
68
|
+
| RenderProp<{ open: boolean; setOpen: (open: boolean) => void; openMenu: () => void }>
|
|
73
69
|
| undefined
|
|
74
70
|
/**
|
|
75
71
|
* Controls how the menu is opened when `trigger` is an element. Ignored if `trigger` is a
|
|
76
72
|
* function, since you can fully customize the interaction that opens the menu (e.g.
|
|
77
|
-
* `trigger={(props, { openMenu }) => <button {...props} onMouseEnter={openMenu} />}`).
|
|
73
|
+
* `trigger={(props, { openMenu }) => <button {...props} onMouseEnter={openMenu} />}`). Also
|
|
74
|
+
* ignored for submenus, which always open on hover.
|
|
78
75
|
*
|
|
79
|
-
* @default 'click'
|
|
76
|
+
* @default 'click'
|
|
80
77
|
*/
|
|
81
78
|
triggerMode?: 'click' | 'hover' | undefined
|
|
82
79
|
/** Defaults to `true` if `trigger` is not provided, or `undefined` otherwise. */
|
|
@@ -97,7 +94,7 @@ export type MenuProps<T extends OptionValue = OptionValue> =
|
|
|
97
94
|
export function MenuRoot<T extends OptionValue>({
|
|
98
95
|
ref: passedRef,
|
|
99
96
|
trigger,
|
|
100
|
-
triggerMode
|
|
97
|
+
triggerMode,
|
|
101
98
|
side,
|
|
102
99
|
gap,
|
|
103
100
|
align,
|
|
@@ -138,12 +135,50 @@ export function MenuRoot<T extends OptionValue>({
|
|
|
138
135
|
},
|
|
139
136
|
)
|
|
140
137
|
|
|
141
|
-
const
|
|
138
|
+
const isSubmenu = useContext(MenuGroupContext) !== null
|
|
139
|
+
const MenuRoot = isSubmenu ? Menu.SubmenuRoot : Menu.Root
|
|
140
|
+
|
|
142
141
|
const hasTrigger = trigger !== undefined
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
142
|
+
const triggerElement = (() => {
|
|
143
|
+
if (!hasTrigger) return null
|
|
144
|
+
const renderTrigger =
|
|
145
|
+
typeof trigger !== 'function'
|
|
146
|
+
? trigger
|
|
147
|
+
: (renderProps: RenderFnProps) => {
|
|
148
|
+
// Don't pass event handlers and other potentially too specific props (e.g. `type`)
|
|
149
|
+
const filteredRenderProps = Object.fromEntries(
|
|
150
|
+
Object.entries(renderProps).filter(
|
|
151
|
+
([prop]) =>
|
|
152
|
+
prop === 'ref' ||
|
|
153
|
+
prop === 'id' ||
|
|
154
|
+
prop === 'className' ||
|
|
155
|
+
prop.startsWith('aria-') ||
|
|
156
|
+
prop.startsWith('data-'),
|
|
157
|
+
),
|
|
158
|
+
)
|
|
159
|
+
return trigger(filteredRenderProps, {
|
|
160
|
+
open,
|
|
161
|
+
setOpen,
|
|
162
|
+
openMenu: () => setOpen(true),
|
|
163
|
+
})
|
|
164
|
+
}
|
|
165
|
+
if (isSubmenu) {
|
|
166
|
+
return <Render render={renderTrigger} />
|
|
167
|
+
} else {
|
|
168
|
+
return (
|
|
169
|
+
<Menu.Trigger
|
|
170
|
+
nativeButton
|
|
171
|
+
openOnHover={triggerMode === 'hover'}
|
|
172
|
+
data-open-on-hover={triggerMode === 'hover' || undefined}
|
|
173
|
+
className={`
|
|
174
|
+
u:i:open:data-open-on-hover:state-hover
|
|
175
|
+
u:iii:open:not-data-open-on-hover:state-active
|
|
176
|
+
`}
|
|
177
|
+
render={renderTrigger}
|
|
178
|
+
/>
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
})()
|
|
147
182
|
|
|
148
183
|
const [open, setOpen] = useControlled(
|
|
149
184
|
controlledOpen ?? (!hasTrigger ? true : undefined),
|
|
@@ -158,15 +193,18 @@ export function MenuRoot<T extends OptionValue>({
|
|
|
158
193
|
return (
|
|
159
194
|
<div
|
|
160
195
|
ref={cssPropsPolyfillRef}
|
|
161
|
-
data-
|
|
196
|
+
data-is-submenu={isSubmenu || undefined}
|
|
162
197
|
data-has-trigger={hasTrigger || undefined}
|
|
163
198
|
className={cn(
|
|
164
199
|
`gds-menu root-contents [anchor-scope:all]
|
|
165
200
|
not-data-has-trigger:**:data-base-ui-focus-guard:hidden
|
|
166
201
|
u:rounded-12
|
|
167
|
-
u:data-
|
|
168
|
-
u:data-
|
|
169
|
-
u:data-
|
|
202
|
+
u:data-is-submenu:default-align-offset-[-2]
|
|
203
|
+
u:data-is-submenu:default-gap-3
|
|
204
|
+
u:data-is-submenu:default-side-end`,
|
|
205
|
+
// Very imperfect workaround for https://bugs.webkit.org/show_bug.cgi?id=301871
|
|
206
|
+
`safari:root-block
|
|
207
|
+
i:safari:not-data-is-submenu:size-max`,
|
|
170
208
|
className,
|
|
171
209
|
)}
|
|
172
210
|
{...getCSSPropsAttributes(
|
|
@@ -184,48 +222,11 @@ export function MenuRoot<T extends OptionValue>({
|
|
|
184
222
|
// A menu with no trigger can still be opened/closed by the consumer, but it should not send events
|
|
185
223
|
if (hasTrigger) setOpen(newOpen)
|
|
186
224
|
}}
|
|
187
|
-
modal={!
|
|
225
|
+
modal={!isSubmenu ? hasTrigger : (undefined as never)}
|
|
188
226
|
closeParentOnEsc
|
|
189
227
|
>
|
|
190
228
|
<MenuTriggerContext.Provider value={true}>
|
|
191
|
-
{
|
|
192
|
-
// Hoist any tooltip used in `trigger` for its interactions to work properly
|
|
193
|
-
<Tooltip>
|
|
194
|
-
<MenuTrigger
|
|
195
|
-
nativeButton={!isNested}
|
|
196
|
-
// Ensure submenu triggers get disabled properly (see https://github.com/mui/base-ui/issues/3850)
|
|
197
|
-
disabled={triggerIsElement && trigger.props.disabled === true}
|
|
198
|
-
openOnHover={triggerMode === 'hover'}
|
|
199
|
-
data-open-on-hover={triggerMode === 'hover' || undefined}
|
|
200
|
-
className={`
|
|
201
|
-
u:i:open:data-open-on-hover:state-hover
|
|
202
|
-
u:iii:open:not-data-open-on-hover:state-active
|
|
203
|
-
`}
|
|
204
|
-
render={
|
|
205
|
-
triggerIsElement
|
|
206
|
-
? trigger
|
|
207
|
-
: (renderProps: RenderFnProps) => {
|
|
208
|
-
// Don't pass event handlers and other potentially too specific props (e.g. `type`)
|
|
209
|
-
const filteredRenderProps = Object.fromEntries(
|
|
210
|
-
Object.entries(renderProps).filter(
|
|
211
|
-
([prop]) =>
|
|
212
|
-
prop === 'ref' ||
|
|
213
|
-
prop === 'id' ||
|
|
214
|
-
prop === 'className' ||
|
|
215
|
-
prop.startsWith('aria-') ||
|
|
216
|
-
prop.startsWith('data-'),
|
|
217
|
-
),
|
|
218
|
-
)
|
|
219
|
-
return trigger(filteredRenderProps, {
|
|
220
|
-
open,
|
|
221
|
-
setOpen,
|
|
222
|
-
openMenu: () => setOpen(true),
|
|
223
|
-
})
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
/>
|
|
227
|
-
</Tooltip>
|
|
228
|
-
) : (
|
|
229
|
+
{triggerElement ?? (
|
|
229
230
|
/**
|
|
230
231
|
* Base UI doesn't explicitly support menus with no `Menu.Trigger`, `Menu.Portal`, or
|
|
231
232
|
* `Menu.Positioner`, so we work around it. We render an invisible trigger to satisfy
|
|
@@ -258,9 +259,9 @@ export function MenuRoot<T extends OptionValue>({
|
|
|
258
259
|
!hasTrigger
|
|
259
260
|
? portalRef
|
|
260
261
|
: /**
|
|
261
|
-
* Specifying `document.body` because while it is the default for top-level menus, a
|
|
262
|
+
* Specifying `document.body` because while it is the default for top-level menus, a submenu
|
|
262
263
|
* defaults to using the same portal as its parent, which is not desirable when the parent is
|
|
263
|
-
* rendered inline (it can cause the
|
|
264
|
+
* rendered inline (it can cause the submenu to appear behind other elements).
|
|
264
265
|
*/
|
|
265
266
|
document?.body
|
|
266
267
|
}
|
|
@@ -631,7 +632,7 @@ export function MenuItem<T extends OptionValue>({
|
|
|
631
632
|
(groupContext !== null && groupContext !== 'root' ? groupContext.type : undefined) ??
|
|
632
633
|
'plain')
|
|
633
634
|
|
|
634
|
-
const
|
|
635
|
+
const renderItem = (renderProps: RenderFnProps) => {
|
|
635
636
|
let addonBefore: AddonValue = passedAddonBefore
|
|
636
637
|
let addonInside: AddonValue = undefined
|
|
637
638
|
let addonAfter: AddonValue = passedAddonAfter
|
|
@@ -677,17 +678,10 @@ export function MenuItem<T extends OptionValue>({
|
|
|
677
678
|
}
|
|
678
679
|
return (
|
|
679
680
|
<Render
|
|
680
|
-
render={
|
|
681
|
-
href !== undefined ? (
|
|
682
|
-
<ButtonOrLink href={href} target={target} disabled={disabled} />
|
|
683
|
-
) : (
|
|
684
|
-
<div />
|
|
685
|
-
)
|
|
686
|
-
}
|
|
681
|
+
render={<ButtonOrLink href={href} target={target as undefined} />}
|
|
687
682
|
data-type={type}
|
|
688
683
|
data-variant={variant}
|
|
689
684
|
className={cn(
|
|
690
|
-
// TODO: Replace `active:` with `data-pressed:` when https://github.com/mui/base-ui/issues/1726 is added, to style Space presses as well
|
|
691
685
|
`gds-menu-item root-flex w-full items-center outline-0 select-none u:rounded-6 u:p-2 u:text-16
|
|
692
686
|
u:state-idle
|
|
693
687
|
u:checked:state-checked
|
|
@@ -696,7 +690,7 @@ export function MenuItem<T extends OptionValue>({
|
|
|
696
690
|
u:disabled:state-disabled
|
|
697
691
|
u:data-highlighted:state-hover
|
|
698
692
|
u:data-[variant=danger]:text-status-error-default
|
|
699
|
-
u:ii:active:state-active
|
|
693
|
+
u:ii:not-disabled:active:state-active
|
|
700
694
|
u:ii:data-[type=submenu-trigger]:not-[a]:cursor-default
|
|
701
695
|
u:ii:data-[type=submenu-trigger]:not-[a]:active:state-hover
|
|
702
696
|
${/* Disabled styles */ ''}
|
|
@@ -749,9 +743,10 @@ export function MenuItem<T extends OptionValue>({
|
|
|
749
743
|
}
|
|
750
744
|
|
|
751
745
|
if (type === 'submenu-trigger') {
|
|
752
|
-
return
|
|
746
|
+
return <Menu.SubmenuTrigger nativeButton disabled={disabled} render={renderItem(baseProps)} />
|
|
753
747
|
}
|
|
754
748
|
|
|
749
|
+
const nativeButton = href === undefined
|
|
755
750
|
const onKeyDown: ComponentProps<typeof Menu.Item>['onKeyDown'] = (event) => {
|
|
756
751
|
props.onKeyDown?.(event)
|
|
757
752
|
/**
|
|
@@ -768,13 +763,14 @@ export function MenuItem<T extends OptionValue>({
|
|
|
768
763
|
return (
|
|
769
764
|
<CheckboxItem
|
|
770
765
|
{...baseProps}
|
|
766
|
+
nativeButton={nativeButton}
|
|
771
767
|
closeOnClick={false}
|
|
772
768
|
checked={checked}
|
|
773
769
|
defaultChecked={defaultChecked}
|
|
774
770
|
onCheckedChange={onChange}
|
|
775
771
|
onKeyDown={onKeyDown}
|
|
776
772
|
disabled={disabled}
|
|
777
|
-
render={
|
|
773
|
+
render={renderItem}
|
|
778
774
|
/>
|
|
779
775
|
)
|
|
780
776
|
}
|
|
@@ -783,17 +779,24 @@ export function MenuItem<T extends OptionValue>({
|
|
|
783
779
|
return (
|
|
784
780
|
<Menu.RadioItem
|
|
785
781
|
{...baseProps}
|
|
782
|
+
nativeButton={nativeButton}
|
|
786
783
|
closeOnClick={true}
|
|
787
784
|
value={passedValue !== undefined ? passedValue : autoValue}
|
|
788
785
|
onKeyDown={onKeyDown}
|
|
789
786
|
disabled={disabled}
|
|
790
|
-
render={
|
|
787
|
+
render={renderItem}
|
|
791
788
|
/>
|
|
792
789
|
)
|
|
793
790
|
}
|
|
794
791
|
|
|
795
792
|
return (
|
|
796
|
-
<Menu.Item
|
|
793
|
+
<Menu.Item
|
|
794
|
+
{...baseProps}
|
|
795
|
+
nativeButton={nativeButton}
|
|
796
|
+
onKeyDown={onKeyDown}
|
|
797
|
+
disabled={disabled}
|
|
798
|
+
render={renderItem}
|
|
799
|
+
/>
|
|
797
800
|
)
|
|
798
801
|
}
|
|
799
802
|
MenuItem.displayName = 'Menu.Item'
|
|
@@ -24,7 +24,6 @@ import { ButtonGroup } from './ButtonGroup.tsx'
|
|
|
24
24
|
import { Divider } from './Divider.tsx'
|
|
25
25
|
import { ModalMeta } from './Modal.meta.ts'
|
|
26
26
|
import { Stepper, type StepperProps } from './Stepper.tsx'
|
|
27
|
-
import { Tooltip } from './Tooltip.tsx'
|
|
28
27
|
|
|
29
28
|
const ModalContext = createContext<{
|
|
30
29
|
open: boolean
|
|
@@ -125,7 +124,6 @@ export const ModalRoot = <
|
|
|
125
124
|
`)
|
|
126
125
|
|
|
127
126
|
const hasTrigger = trigger !== undefined
|
|
128
|
-
const triggerIsElement = hasTrigger && typeof trigger !== 'function'
|
|
129
127
|
|
|
130
128
|
const [open, setOpen] = useControlled(controlledOpen, defaultOpen ?? !hasTrigger, onOpenChange)
|
|
131
129
|
|
|
@@ -184,35 +182,32 @@ export const ModalRoot = <
|
|
|
184
182
|
disablePointerDismissal={!dismissible}
|
|
185
183
|
>
|
|
186
184
|
{hasTrigger ? (
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
/>
|
|
215
|
-
</Tooltip>
|
|
185
|
+
<Dialog.Trigger
|
|
186
|
+
render={
|
|
187
|
+
typeof trigger !== 'function'
|
|
188
|
+
? trigger
|
|
189
|
+
: (renderProps) => {
|
|
190
|
+
// Don't pass event handlers and other potentially too specific props (e.g. `type`)
|
|
191
|
+
const filteredRenderProps = Object.fromEntries(
|
|
192
|
+
Object.entries(renderProps).filter(
|
|
193
|
+
([prop]) =>
|
|
194
|
+
prop === 'ref' ||
|
|
195
|
+
prop === 'id' ||
|
|
196
|
+
prop === 'className' ||
|
|
197
|
+
prop.startsWith('aria-') ||
|
|
198
|
+
prop.startsWith('data-'),
|
|
199
|
+
),
|
|
200
|
+
)
|
|
201
|
+
return trigger(filteredRenderProps, {
|
|
202
|
+
open,
|
|
203
|
+
setOpen,
|
|
204
|
+
openModal: () => setOpen(true),
|
|
205
|
+
currentStep,
|
|
206
|
+
setCurrentStep,
|
|
207
|
+
})
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/>
|
|
216
211
|
) : null}
|
|
217
212
|
{/* Ensure the CSS props polyfill works even when the modal is not mounted */}
|
|
218
213
|
<Portal>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createComponent } from '@graphprotocol/gds-css'
|
|
2
|
+
|
|
3
|
+
export const PaneContainerMeta = createComponent('PaneContainer', {
|
|
4
|
+
isolate: 'allow-inheritance',
|
|
5
|
+
cssProps: {
|
|
6
|
+
/** @default 'horizontal' */
|
|
7
|
+
orientation: {
|
|
8
|
+
type: 'values',
|
|
9
|
+
values: ['horizontal', 'vertical'],
|
|
10
|
+
defaultValue: 'horizontal',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
export const PaneMeta = createComponent('Pane', {
|
|
16
|
+
isolate: 'allow-inheritance',
|
|
17
|
+
cssProps: {
|
|
18
|
+
/** @default 'docked' */
|
|
19
|
+
layout: {
|
|
20
|
+
type: 'values',
|
|
21
|
+
values: ['docked', 'overlay'],
|
|
22
|
+
defaultValue: 'docked',
|
|
23
|
+
},
|
|
24
|
+
/** @default // dynamic based on position and container orientation */
|
|
25
|
+
side: {
|
|
26
|
+
type: 'values',
|
|
27
|
+
values: ['top', 'bottom', 'start', 'end'],
|
|
28
|
+
defaultValue: 'start',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
})
|