@react-native-reusables/cli 0.0.18 → 0.1.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.
Files changed (136) hide show
  1. package/README.md +2 -37
  2. package/__generated/components/ui/accordion.tsx +1 -1
  3. package/__generated/components/ui/alert-dialog.tsx +2 -3
  4. package/__generated/components/ui/aspect-ratio.tsx +1 -1
  5. package/__generated/components/ui/avatar.tsx +17 -13
  6. package/__generated/components/ui/badge.tsx +2 -2
  7. package/__generated/components/ui/card.tsx +1 -1
  8. package/__generated/components/ui/checkbox.tsx +2 -3
  9. package/__generated/components/ui/collapsible.tsx +1 -1
  10. package/__generated/components/ui/context-menu.tsx +3 -11
  11. package/__generated/components/ui/dialog.tsx +2 -3
  12. package/__generated/components/ui/dropdown-menu.tsx +1 -1
  13. package/__generated/components/ui/hover-card.tsx +1 -1
  14. package/__generated/components/ui/label.tsx +1 -1
  15. package/__generated/components/ui/menubar.tsx +1 -1
  16. package/__generated/components/ui/navigation-menu.tsx +6 -4
  17. package/__generated/components/ui/popover.tsx +1 -1
  18. package/__generated/components/ui/progress.tsx +14 -10
  19. package/__generated/components/ui/radio-group.tsx +1 -1
  20. package/__generated/components/ui/select.tsx +13 -12
  21. package/__generated/components/ui/separator.tsx +1 -1
  22. package/__generated/components/ui/switch.tsx +1 -2
  23. package/__generated/components/ui/table.tsx +1 -1
  24. package/__generated/components/ui/tabs.tsx +1 -1
  25. package/__generated/components/ui/text.tsx +2 -2
  26. package/__generated/components/ui/toggle-group.tsx +1 -1
  27. package/__generated/components/ui/toggle.tsx +1 -1
  28. package/__generated/components/ui/tooltip.tsx +1 -2
  29. package/__generated/components/ui/typography.tsx +2 -2
  30. package/dist/index.js +3 -3
  31. package/dist/index.js.map +1 -1
  32. package/package.json +2 -34
  33. package/__generated/components/primitives/accordion/accordion.tsx +0 -216
  34. package/__generated/components/primitives/accordion/accordion.web.tsx +0 -295
  35. package/__generated/components/primitives/accordion/index.ts +0 -1
  36. package/__generated/components/primitives/accordion/types.ts +0 -45
  37. package/__generated/components/primitives/alert-dialog/alert-dialog.tsx +0 -237
  38. package/__generated/components/primitives/alert-dialog/alert-dialog.web.tsx +0 -256
  39. package/__generated/components/primitives/alert-dialog/index.ts +0 -1
  40. package/__generated/components/primitives/alert-dialog/types.ts +0 -48
  41. package/__generated/components/primitives/aspect-ratio.tsx +0 -23
  42. package/__generated/components/primitives/avatar/index.tsx +0 -95
  43. package/__generated/components/primitives/avatar/types.ts +0 -10
  44. package/__generated/components/primitives/checkbox/checkbox.tsx +0 -101
  45. package/__generated/components/primitives/checkbox/checkbox.web.tsx +0 -114
  46. package/__generated/components/primitives/checkbox/index.ts +0 -1
  47. package/__generated/components/primitives/checkbox/types.ts +0 -11
  48. package/__generated/components/primitives/collapsible/collapsible.tsx +0 -119
  49. package/__generated/components/primitives/collapsible/collapsible.web.tsx +0 -157
  50. package/__generated/components/primitives/collapsible/index.ts +0 -1
  51. package/__generated/components/primitives/collapsible/types.ts +0 -18
  52. package/__generated/components/primitives/context-menu/context-menu.tsx +0 -648
  53. package/__generated/components/primitives/context-menu/context-menu.web.tsx +0 -533
  54. package/__generated/components/primitives/context-menu/index.ts +0 -1
  55. package/__generated/components/primitives/context-menu/types.ts +0 -90
  56. package/__generated/components/primitives/dialog/dialog.tsx +0 -211
  57. package/__generated/components/primitives/dialog/dialog.web.tsx +0 -197
  58. package/__generated/components/primitives/dialog/index.ts +0 -1
  59. package/__generated/components/primitives/dialog/types.ts +0 -60
  60. package/__generated/components/primitives/dropdown-menu/dropdown-menu.tsx +0 -608
  61. package/__generated/components/primitives/dropdown-menu/dropdown-menu.web.tsx +0 -550
  62. package/__generated/components/primitives/dropdown-menu/index.ts +0 -1
  63. package/__generated/components/primitives/dropdown-menu/types.ts +0 -72
  64. package/__generated/components/primitives/hooks/index.ts +0 -3
  65. package/__generated/components/primitives/hooks/useAugmentedRef.tsx +0 -29
  66. package/__generated/components/primitives/hooks/useControllableState.tsx +0 -75
  67. package/__generated/components/primitives/hooks/useRelativePosition.tsx +0 -227
  68. package/__generated/components/primitives/hover-card/hover-card.tsx +0 -279
  69. package/__generated/components/primitives/hover-card/hover-card.web.tsx +0 -150
  70. package/__generated/components/primitives/hover-card/index.ts +0 -1
  71. package/__generated/components/primitives/hover-card/types.ts +0 -51
  72. package/__generated/components/primitives/label/index.ts +0 -1
  73. package/__generated/components/primitives/label/label.tsx +0 -31
  74. package/__generated/components/primitives/label/label.web.tsx +0 -36
  75. package/__generated/components/primitives/label/types.ts +0 -15
  76. package/__generated/components/primitives/menubar/index.ts +0 -1
  77. package/__generated/components/primitives/menubar/menubar.tsx +0 -622
  78. package/__generated/components/primitives/menubar/menubar.web.tsx +0 -548
  79. package/__generated/components/primitives/menubar/types.ts +0 -77
  80. package/__generated/components/primitives/navigation-menu/index.ts +0 -1
  81. package/__generated/components/primitives/navigation-menu/navigation-menu.tsx +0 -315
  82. package/__generated/components/primitives/navigation-menu/navigation-menu.web.tsx +0 -264
  83. package/__generated/components/primitives/navigation-menu/types.ts +0 -49
  84. package/__generated/components/primitives/popover/index.ts +0 -1
  85. package/__generated/components/primitives/popover/popover.tsx +0 -290
  86. package/__generated/components/primitives/popover/popover.web.tsx +0 -191
  87. package/__generated/components/primitives/popover/types.ts +0 -24
  88. package/__generated/components/primitives/portal.tsx +0 -82
  89. package/__generated/components/primitives/progress/index.ts +0 -1
  90. package/__generated/components/primitives/progress/progress.tsx +0 -59
  91. package/__generated/components/primitives/progress/progress.web.tsx +0 -36
  92. package/__generated/components/primitives/progress/types.ts +0 -7
  93. package/__generated/components/primitives/radio-group/index.ts +0 -1
  94. package/__generated/components/primitives/radio-group/radio-group.tsx +0 -116
  95. package/__generated/components/primitives/radio-group/radio-group.web.tsx +0 -78
  96. package/__generated/components/primitives/radio-group/types.ts +0 -15
  97. package/__generated/components/primitives/select/index.ts +0 -1
  98. package/__generated/components/primitives/select/select.tsx +0 -466
  99. package/__generated/components/primitives/select/select.web.tsx +0 -332
  100. package/__generated/components/primitives/select/types.ts +0 -89
  101. package/__generated/components/primitives/separator/index.tsx +0 -23
  102. package/__generated/components/primitives/separator/types.ts +0 -6
  103. package/__generated/components/primitives/slider/index.ts +0 -1
  104. package/__generated/components/primitives/slider/slider.tsx +0 -89
  105. package/__generated/components/primitives/slider/slider.web.tsx +0 -67
  106. package/__generated/components/primitives/slider/types.ts +0 -24
  107. package/__generated/components/primitives/slot.tsx +0 -187
  108. package/__generated/components/primitives/switch/index.ts +0 -1
  109. package/__generated/components/primitives/switch/switch.tsx +0 -65
  110. package/__generated/components/primitives/switch/switch.web.tsx +0 -67
  111. package/__generated/components/primitives/switch/types.ts +0 -11
  112. package/__generated/components/primitives/table.tsx +0 -55
  113. package/__generated/components/primitives/tabs/index.ts +0 -1
  114. package/__generated/components/primitives/tabs/tabs.tsx +0 -133
  115. package/__generated/components/primitives/tabs/tabs.web.tsx +0 -97
  116. package/__generated/components/primitives/tabs/types.ts +0 -24
  117. package/__generated/components/primitives/toast/index.tsx +0 -128
  118. package/__generated/components/primitives/toast/types.ts +0 -7
  119. package/__generated/components/primitives/toggle/index.ts +0 -1
  120. package/__generated/components/primitives/toggle/toggle.tsx +0 -37
  121. package/__generated/components/primitives/toggle/toggle.web.tsx +0 -26
  122. package/__generated/components/primitives/toggle/types.ts +0 -7
  123. package/__generated/components/primitives/toggle-group/index.ts +0 -1
  124. package/__generated/components/primitives/toggle-group/toggle-group.tsx +0 -125
  125. package/__generated/components/primitives/toggle-group/toggle-group.web.tsx +0 -124
  126. package/__generated/components/primitives/toggle-group/types.ts +0 -37
  127. package/__generated/components/primitives/toolbar/index.ts +0 -1
  128. package/__generated/components/primitives/toolbar/toolbar.tsx +0 -125
  129. package/__generated/components/primitives/toolbar/toolbar.web.tsx +0 -129
  130. package/__generated/components/primitives/toolbar/types.ts +0 -39
  131. package/__generated/components/primitives/tooltip/index.ts +0 -1
  132. package/__generated/components/primitives/tooltip/tooltip.tsx +0 -277
  133. package/__generated/components/primitives/tooltip/tooltip.web.tsx +0 -181
  134. package/__generated/components/primitives/tooltip/types.ts +0 -42
  135. package/__generated/components/primitives/types.ts +0 -105
  136. package/__generated/components/primitives/utils.ts +0 -61
@@ -1,550 +0,0 @@
1
- import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
2
- import { useAugmentedRef, useControllableState } from '@rnr/hooks';
3
- import * as Slot from '@rnr/slot';
4
- import type {
5
- ForceMountable,
6
- PositionedContentProps,
7
- PressableRef,
8
- SlottablePressableProps,
9
- SlottableTextProps,
10
- SlottableViewProps,
11
- TextRef,
12
- ViewRef,
13
- } from '@rnr/types';
14
- import { EmptyGestureResponderEvent } from '@rnr/utils';
15
- import * as React from 'react';
16
- import { GestureResponderEvent, Pressable, Text, View } from 'react-native';
17
- import type {
18
- DropdownMenuCheckboxItemProps,
19
- DropdownMenuItemProps,
20
- DropdownMenuOverlayProps,
21
- DropdownMenuPortalProps,
22
- DropdownMenuRadioGroupProps,
23
- DropdownMenuRadioItemProps,
24
- DropdownMenuSeparatorProps,
25
- DropdownMenuSubProps,
26
- DropdownMenuSubTriggerProps,
27
- DropdownMenuTriggerRef,
28
- } from './types';
29
-
30
- const DropdownMenuContext = React.createContext<{
31
- open: boolean;
32
- onOpenChange: (open: boolean) => void;
33
- } | null>(null);
34
-
35
- const Root = React.forwardRef<
36
- ViewRef,
37
- SlottableViewProps & { onOpenChange?: (open: boolean) => void }
38
- >(({ asChild, onOpenChange: onOpenChangeProp, ...viewProps }, ref) => {
39
- const [open, setOpen] = React.useState(false);
40
-
41
- function onOpenChange(open: boolean) {
42
- setOpen(open);
43
- onOpenChangeProp?.(open);
44
- }
45
-
46
- const Component = asChild ? Slot.View : View;
47
- return (
48
- <DropdownMenuContext.Provider value={{ open, onOpenChange }}>
49
- <DropdownMenu.Root open={open} onOpenChange={onOpenChange}>
50
- <Component ref={ref} {...viewProps} />
51
- </DropdownMenu.Root>
52
- </DropdownMenuContext.Provider>
53
- );
54
- });
55
-
56
- Root.displayName = 'RootWebDropdownMenu';
57
-
58
- function useRootContext() {
59
- const context = React.useContext(DropdownMenuContext);
60
- if (!context) {
61
- throw new Error(
62
- 'DropdownMenu compound components cannot be rendered outside the DropdownMenu component'
63
- );
64
- }
65
- return context;
66
- }
67
-
68
- const Trigger = React.forwardRef<DropdownMenuTriggerRef, SlottablePressableProps>(
69
- ({ asChild, disabled = false, ...props }, ref) => {
70
- const { open, onOpenChange } = useRootContext();
71
- const augmentedRef = useAugmentedRef({
72
- ref,
73
- methods: {
74
- open() {
75
- onOpenChange(true);
76
- },
77
- close() {
78
- onOpenChange(false);
79
- },
80
- },
81
- });
82
-
83
- React.useLayoutEffect(() => {
84
- if (augmentedRef.current) {
85
- const augRef = augmentedRef.current as unknown as HTMLDivElement;
86
- augRef.dataset.state = open ? 'open' : 'closed';
87
- }
88
- }, [open]);
89
-
90
- React.useLayoutEffect(() => {
91
- if (augmentedRef.current) {
92
- const augRef = augmentedRef.current as unknown as HTMLDivElement;
93
- if (disabled) {
94
- augRef.dataset.disabled = 'true';
95
- } else {
96
- augRef.dataset.disabled = undefined;
97
- }
98
- }
99
- }, [disabled]);
100
-
101
- const Component = asChild ? Slot.Pressable : Pressable;
102
- return (
103
- <DropdownMenu.Trigger disabled={disabled ?? undefined} asChild>
104
- <Component ref={augmentedRef} {...props} />
105
- </DropdownMenu.Trigger>
106
- );
107
- }
108
- );
109
-
110
- Trigger.displayName = 'TriggerWebDropdownMenu';
111
-
112
- function Portal({ forceMount, container, children }: DropdownMenuPortalProps) {
113
- return <DropdownMenu.Portal forceMount={forceMount} container={container} children={children} />;
114
- }
115
-
116
- const Overlay = React.forwardRef<PressableRef, SlottablePressableProps & DropdownMenuOverlayProps>(
117
- ({ asChild, ...props }, ref) => {
118
- const Component = asChild ? Slot.Pressable : Pressable;
119
- return <Component ref={ref} {...props} />;
120
- }
121
- );
122
-
123
- Overlay.displayName = 'OverlayWebDropdownMenu';
124
-
125
- const DropdownMenuContentContext = React.createContext<{
126
- close: () => void;
127
- } | null>(null);
128
-
129
- const Content = React.forwardRef<PressableRef, SlottablePressableProps & PositionedContentProps>(
130
- (
131
- {
132
- asChild = false,
133
- forceMount,
134
- align,
135
- side,
136
- sideOffset,
137
- alignOffset = 0,
138
- avoidCollisions = true,
139
- insets,
140
- loop = true,
141
- onCloseAutoFocus,
142
- onEscapeKeyDown,
143
- onPointerDownOutside,
144
- onFocusOutside,
145
- onInteractOutside,
146
- collisionBoundary,
147
- sticky,
148
- hideWhenDetached,
149
- ...props
150
- },
151
- ref
152
- ) => {
153
- const itemRef = React.useRef<HTMLDivElement>(null);
154
-
155
- function close() {
156
- itemRef.current?.click();
157
- }
158
- const Component = asChild ? Slot.Pressable : Pressable;
159
- return (
160
- <DropdownMenuContentContext.Provider value={{ close }}>
161
- <DropdownMenu.Content
162
- forceMount={forceMount}
163
- alignOffset={alignOffset}
164
- avoidCollisions={avoidCollisions}
165
- collisionPadding={insets}
166
- loop={loop}
167
- onCloseAutoFocus={onCloseAutoFocus}
168
- onEscapeKeyDown={onEscapeKeyDown}
169
- onPointerDownOutside={onPointerDownOutside}
170
- onFocusOutside={onFocusOutside}
171
- onInteractOutside={onInteractOutside}
172
- collisionBoundary={collisionBoundary}
173
- sticky={sticky}
174
- hideWhenDetached={hideWhenDetached}
175
- align={align}
176
- side={side}
177
- sideOffset={sideOffset}
178
- >
179
- <Component ref={ref} {...props} />
180
- <DropdownMenu.Item
181
- ref={itemRef}
182
- aria-hidden
183
- style={{ position: 'fixed', top: 0, left: 0, zIndex: -999999999 }}
184
- aria-disabled
185
- tabIndex={-1}
186
- hidden
187
- />
188
- </DropdownMenu.Content>
189
- </DropdownMenuContentContext.Provider>
190
- );
191
- }
192
- );
193
-
194
- Content.displayName = 'ContentWebDropdownMenu';
195
-
196
- function useDropdownMenuContentContext() {
197
- const context = React.useContext(DropdownMenuContentContext);
198
- if (!context) {
199
- throw new Error(
200
- 'DropdownMenu compound components cannot be rendered outside the DropdownMenu component'
201
- );
202
- }
203
- return context;
204
- }
205
-
206
- const Item = React.forwardRef<PressableRef, SlottablePressableProps & DropdownMenuItemProps>(
207
- (
208
- {
209
- asChild,
210
- textValue,
211
- closeOnPress = true,
212
- onPress: onPressProp,
213
- onKeyDown: onKeyDownProp,
214
- ...props
215
- },
216
- ref
217
- ) => {
218
- const { close } = useDropdownMenuContentContext();
219
-
220
- function onKeyDown(ev: React.KeyboardEvent) {
221
- onKeyDownProp?.(ev);
222
- if (ev.key === 'Enter' || ev.key === ' ') {
223
- onPressProp?.(EmptyGestureResponderEvent);
224
- if (closeOnPress) {
225
- close();
226
- }
227
- }
228
- }
229
-
230
- function onPress(ev: GestureResponderEvent) {
231
- onPressProp?.(ev);
232
- if (closeOnPress) {
233
- close();
234
- }
235
- }
236
-
237
- const Component = asChild ? Slot.Pressable : Pressable;
238
- return (
239
- <DropdownMenu.Item
240
- textValue={textValue}
241
- disabled={props.disabled ?? undefined}
242
- onSelect={closeOnPress ? undefined : onSelected}
243
- asChild
244
- >
245
- <Component
246
- ref={ref}
247
- // @ts-expect-error web only
248
- onKeyDown={onKeyDown}
249
- onPress={onPress}
250
- {...props}
251
- />
252
- </DropdownMenu.Item>
253
- );
254
- }
255
- );
256
-
257
- Item.displayName = 'ItemWebDropdownMenu';
258
-
259
- const Group = React.forwardRef<ViewRef, SlottableViewProps>(({ asChild, ...props }, ref) => {
260
- const Component = asChild ? Slot.View : View;
261
- return (
262
- <DropdownMenu.Group asChild>
263
- <Component ref={ref} {...props} />
264
- </DropdownMenu.Group>
265
- );
266
- });
267
-
268
- Group.displayName = 'GroupWebDropdownMenu';
269
-
270
- const Label = React.forwardRef<TextRef, SlottableTextProps>(({ asChild, ...props }, ref) => {
271
- const Component = asChild ? Slot.Text : Text;
272
- return (
273
- <DropdownMenu.Label asChild>
274
- <Component ref={ref} {...props} />
275
- </DropdownMenu.Label>
276
- );
277
- });
278
-
279
- Label.displayName = 'LabelWebDropdownMenu';
280
-
281
- const CheckboxItem = React.forwardRef<
282
- PressableRef,
283
- SlottablePressableProps & DropdownMenuCheckboxItemProps
284
- >(
285
- (
286
- {
287
- asChild,
288
- checked,
289
- onCheckedChange,
290
- textValue,
291
- disabled = false,
292
- closeOnPress = true,
293
- onPress: onPressProp,
294
- onKeyDown: onKeyDownProp,
295
- ...props
296
- },
297
- ref
298
- ) => {
299
- const { close } = useDropdownMenuContentContext();
300
-
301
- function onKeyDown(ev: React.KeyboardEvent) {
302
- onKeyDownProp?.(ev);
303
- if (ev.key === 'Enter' || ev.key === ' ') {
304
- onPressProp?.(EmptyGestureResponderEvent);
305
- onCheckedChange?.(!checked);
306
- if (closeOnPress) {
307
- close();
308
- }
309
- }
310
- }
311
-
312
- function onPress(ev: GestureResponderEvent) {
313
- onPressProp?.(ev);
314
- onCheckedChange?.(!checked);
315
- if (closeOnPress) {
316
- close();
317
- }
318
- }
319
- const Component = asChild ? Slot.Pressable : Pressable;
320
- return (
321
- <DropdownMenu.CheckboxItem
322
- textValue={textValue}
323
- checked={checked}
324
- onCheckedChange={onCheckedChange}
325
- onSelect={closeOnPress ? undefined : onSelected}
326
- disabled={disabled ?? undefined}
327
- asChild
328
- >
329
- <Component
330
- ref={ref}
331
- // @ts-expect-error web only
332
- onKeyDown={onKeyDown}
333
- onPress={onPress}
334
- role='button'
335
- {...props}
336
- />
337
- </DropdownMenu.CheckboxItem>
338
- );
339
- }
340
- );
341
-
342
- CheckboxItem.displayName = 'CheckboxItemWebDropdownMenu';
343
-
344
- const DropdownMenuRadioGroupContext = React.createContext<{
345
- value?: string;
346
- onValueChange?: (value: string) => void;
347
- } | null>(null);
348
-
349
- const RadioGroup = React.forwardRef<ViewRef, SlottableViewProps & DropdownMenuRadioGroupProps>(
350
- ({ asChild, value, onValueChange, ...props }, ref) => {
351
- const Component = asChild ? Slot.View : View;
352
- return (
353
- <DropdownMenuRadioGroupContext.Provider value={{ value, onValueChange }}>
354
- <DropdownMenu.RadioGroup value={value} onValueChange={onValueChange} asChild>
355
- <Component ref={ref} {...props} />
356
- </DropdownMenu.RadioGroup>
357
- </DropdownMenuRadioGroupContext.Provider>
358
- );
359
- }
360
- );
361
-
362
- RadioGroup.displayName = 'RadioGroupWebDropdownMenu';
363
-
364
- function useDropdownMenuRadioGroupContext() {
365
- const context = React.useContext(DropdownMenuRadioGroupContext);
366
- if (!context) {
367
- throw new Error(
368
- 'DropdownMenuRadioGroup compound components cannot be rendered outside the DropdownMenuRadioGroup component'
369
- );
370
- }
371
- return context;
372
- }
373
-
374
- const RadioItem = React.forwardRef<
375
- PressableRef,
376
- SlottablePressableProps & DropdownMenuRadioItemProps
377
- >(
378
- (
379
- {
380
- asChild,
381
- value,
382
- textValue,
383
- closeOnPress = true,
384
- onPress: onPressProp,
385
- onKeyDown: onKeyDownProp,
386
- ...props
387
- },
388
- ref
389
- ) => {
390
- const { onValueChange } = useDropdownMenuRadioGroupContext();
391
- const { close } = useDropdownMenuContentContext();
392
-
393
- function onKeyDown(ev: React.KeyboardEvent) {
394
- onKeyDownProp?.(ev);
395
- if (ev.key === 'Enter' || ev.key === ' ') {
396
- onValueChange?.(value);
397
- onPressProp?.(EmptyGestureResponderEvent);
398
- if (closeOnPress) {
399
- close();
400
- }
401
- }
402
- }
403
-
404
- function onPress(ev: GestureResponderEvent) {
405
- onValueChange?.(value);
406
- onPressProp?.(ev);
407
- if (closeOnPress) {
408
- close();
409
- }
410
- }
411
- const Component = asChild ? Slot.Pressable : Pressable;
412
- return (
413
- <DropdownMenu.RadioItem
414
- value={value}
415
- textValue={textValue}
416
- disabled={props.disabled ?? undefined}
417
- onSelect={closeOnPress ? undefined : onSelected}
418
- asChild
419
- >
420
- <Component
421
- ref={ref}
422
- // @ts-expect-error web only
423
- onKeyDown={onKeyDown}
424
- onPress={onPress}
425
- {...props}
426
- />
427
- </DropdownMenu.RadioItem>
428
- );
429
- }
430
- );
431
-
432
- RadioItem.displayName = 'RadioItemWebDropdownMenu';
433
-
434
- const ItemIndicator = React.forwardRef<ViewRef, SlottableViewProps & ForceMountable>(
435
- ({ asChild, forceMount, ...props }, ref) => {
436
- const Component = asChild ? Slot.View : View;
437
- return (
438
- <DropdownMenu.ItemIndicator forceMount={forceMount} asChild>
439
- <Component ref={ref} {...props} />
440
- </DropdownMenu.ItemIndicator>
441
- );
442
- }
443
- );
444
-
445
- ItemIndicator.displayName = 'ItemIndicatorWebDropdownMenu';
446
-
447
- const Separator = React.forwardRef<ViewRef, SlottableViewProps & DropdownMenuSeparatorProps>(
448
- ({ asChild, decorative, ...props }, ref) => {
449
- const Component = asChild ? Slot.View : View;
450
- return (
451
- <DropdownMenu.Separator asChild>
452
- <Component ref={ref} {...props} />
453
- </DropdownMenu.Separator>
454
- );
455
- }
456
- );
457
-
458
- Separator.displayName = 'SeparatorWebDropdownMenu';
459
-
460
- const DropdownMenuSubContext = React.createContext<{
461
- open: boolean;
462
- onOpenChange: (open: boolean) => void;
463
- } | null>(null);
464
-
465
- const Sub = React.forwardRef<ViewRef, SlottableViewProps & DropdownMenuSubProps>(
466
- ({ asChild, defaultOpen, open: openProp, onOpenChange: onOpenChangeProp, ...props }, ref) => {
467
- const [open = false, onOpenChange] = useControllableState({
468
- prop: openProp,
469
- defaultProp: defaultOpen,
470
- onChange: onOpenChangeProp,
471
- });
472
-
473
- const Component = asChild ? Slot.View : View;
474
- return (
475
- <DropdownMenuSubContext.Provider value={{ open, onOpenChange }}>
476
- <DropdownMenu.Sub open={open} onOpenChange={onOpenChange}>
477
- <Component ref={ref} {...props} />
478
- </DropdownMenu.Sub>
479
- </DropdownMenuSubContext.Provider>
480
- );
481
- }
482
- );
483
-
484
- Sub.displayName = 'SubWebDropdownMenu';
485
-
486
- function useSubContext() {
487
- const context = React.useContext(DropdownMenuSubContext);
488
- if (!context) {
489
- throw new Error(
490
- 'DropdownMenu compound components cannot be rendered outside the DropdownMenu component'
491
- );
492
- }
493
- return context;
494
- }
495
-
496
- const SubTrigger = React.forwardRef<
497
- PressableRef,
498
- SlottablePressableProps & DropdownMenuSubTriggerProps
499
- >(({ asChild, textValue, disabled = false, ...props }, ref) => {
500
- const Component = asChild ? Slot.Pressable : Pressable;
501
- return (
502
- <DropdownMenu.SubTrigger disabled={disabled ?? undefined} textValue={textValue} asChild>
503
- <Component ref={ref} {...props} />
504
- </DropdownMenu.SubTrigger>
505
- );
506
- });
507
-
508
- SubTrigger.displayName = 'SubTriggerWebDropdownMenu';
509
-
510
- const SubContent = React.forwardRef<PressableRef, SlottablePressableProps & ForceMountable>(
511
- ({ asChild = false, forceMount, ...props }, ref) => {
512
- const Component = asChild ? Slot.Pressable : Pressable;
513
- return (
514
- <DropdownMenu.Portal>
515
- <DropdownMenu.SubContent forceMount={forceMount}>
516
- <Component ref={ref} {...props} />
517
- </DropdownMenu.SubContent>
518
- </DropdownMenu.Portal>
519
- );
520
- }
521
- );
522
-
523
- Content.displayName = 'ContentWebDropdownMenu';
524
-
525
- export {
526
- CheckboxItem,
527
- Content,
528
- Group,
529
- Item,
530
- ItemIndicator,
531
- Label,
532
- Overlay,
533
- Portal,
534
- RadioGroup,
535
- RadioItem,
536
- Root,
537
- Separator,
538
- Sub,
539
- SubContent,
540
- SubTrigger,
541
- Trigger,
542
- useRootContext,
543
- useSubContext,
544
- };
545
-
546
- export type { DropdownMenuTriggerRef };
547
-
548
- function onSelected(ev: Event) {
549
- ev.preventDefault();
550
- }
@@ -1 +0,0 @@
1
- export * from './dropdown-menu';
@@ -1,72 +0,0 @@
1
- import type { ForceMountable, PressableRef } from '@rnr/types';
2
-
3
- interface DropdownMenuPortalProps extends ForceMountable {
4
- children: React.ReactNode;
5
- /**
6
- * Platform: NATIVE ONLY
7
- */
8
- hostName?: string;
9
- /**
10
- * Platform: WEB ONLY
11
- */
12
- container?: HTMLElement | null | undefined;
13
- }
14
-
15
- interface DropdownMenuOverlayProps extends ForceMountable {
16
- closeOnPress?: boolean;
17
- }
18
-
19
- interface DropdownMenuItemProps {
20
- textValue?: string;
21
- closeOnPress?: boolean;
22
- }
23
-
24
- interface DropdownMenuCheckboxItemProps {
25
- checked: boolean;
26
- onCheckedChange: (checked: boolean) => void;
27
- closeOnPress?: boolean;
28
- textValue?: string;
29
- }
30
-
31
- interface DropdownMenuRadioGroupProps {
32
- value: string | undefined;
33
- onValueChange: (value: string) => void;
34
- }
35
-
36
- interface DropdownMenuRadioItemProps {
37
- value: string;
38
- textValue?: string;
39
- closeOnPress?: boolean;
40
- }
41
-
42
- interface DropdownMenuSeparatorProps {
43
- decorative?: boolean;
44
- }
45
-
46
- interface DropdownMenuSubProps {
47
- defaultOpen?: boolean;
48
- open?: boolean;
49
- onOpenChange?: (value: boolean) => void;
50
- }
51
-
52
- interface DropdownMenuSubTriggerProps {
53
- textValue?: string;
54
- }
55
-
56
- interface DropdownMenuTriggerRef extends PressableRef {
57
- open: () => void;
58
- close: () => void;
59
- }
60
-
61
- export type {
62
- DropdownMenuCheckboxItemProps,
63
- DropdownMenuItemProps,
64
- DropdownMenuOverlayProps,
65
- DropdownMenuPortalProps,
66
- DropdownMenuRadioGroupProps,
67
- DropdownMenuRadioItemProps,
68
- DropdownMenuSeparatorProps,
69
- DropdownMenuSubProps,
70
- DropdownMenuSubTriggerProps,
71
- DropdownMenuTriggerRef,
72
- };
@@ -1,3 +0,0 @@
1
- export { useAugmentedRef } from './useAugmentedRef';
2
- export { useRelativePosition, type LayoutPosition } from './useRelativePosition';
3
- export { useControllableState } from './useControllableState';
@@ -1,29 +0,0 @@
1
- import * as React from 'react';
2
-
3
- interface AugmentRefProps<T> {
4
- ref: React.Ref<T>;
5
- methods?: Record<string, (...args: any[]) => any>;
6
- deps?: any[];
7
- }
8
-
9
- export function useAugmentedRef<T>({
10
- ref,
11
- methods,
12
- deps = [],
13
- }: AugmentRefProps<T>) {
14
- const augmentedRef = React.useRef<T>(null);
15
- React.useImperativeHandle(
16
- ref,
17
- () => {
18
- if (typeof augmentedRef === 'function' || !augmentedRef?.current) {
19
- return {} as T;
20
- }
21
- return {
22
- ...augmentedRef.current,
23
- ...methods,
24
- };
25
- },
26
- deps
27
- );
28
- return augmentedRef;
29
- }