@stackframe/stack-ui 2.8.61 → 2.8.63
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/components/action-dialog.js +130 -36
- package/dist/components/action-dialog.js.map +1 -0
- package/dist/components/brand-icons.js +413 -93
- package/dist/components/brand-icons.js.map +1 -0
- package/dist/components/browser-frame/index.js +63 -8
- package/dist/components/browser-frame/index.js.map +1 -0
- package/dist/components/copy-button.js +56 -17
- package/dist/components/copy-button.js.map +1 -0
- package/dist/components/copy-field.js +68 -12
- package/dist/components/copy-field.js.map +1 -0
- package/dist/components/data-table/cells.js +121 -50
- package/dist/components/data-table/cells.js.map +1 -0
- package/dist/components/data-table/column-header.js +62 -7
- package/dist/components/data-table/column-header.js.map +1 -0
- package/dist/components/data-table/data-table.js +263 -93
- package/dist/components/data-table/data-table.js.map +1 -0
- package/dist/components/data-table/faceted-filter.js +133 -25
- package/dist/components/data-table/faceted-filter.js.map +1 -0
- package/dist/components/data-table/index.js +41 -9
- package/dist/components/data-table/index.js.map +1 -0
- package/dist/components/data-table/pagination.js +89 -9
- package/dist/components/data-table/pagination.js.map +1 -0
- package/dist/components/data-table/toolbar-items.js +42 -4
- package/dist/components/data-table/toolbar-items.js.map +1 -0
- package/dist/components/data-table/toolbar.js +114 -44
- package/dist/components/data-table/toolbar.js.map +1 -0
- package/dist/components/data-table/utils.js +36 -4
- package/dist/components/data-table/utils.js.map +1 -0
- package/dist/components/data-table/view-options.js +70 -10
- package/dist/components/data-table/view-options.js.map +1 -0
- package/dist/components/simple-tooltip.js +45 -13
- package/dist/components/simple-tooltip.js.map +1 -0
- package/dist/components/ui/accordion.js +85 -10
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/alert.js +75 -17
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/aspect-ratio.js +43 -3
- package/dist/components/ui/aspect-ratio.js.map +1 -0
- package/dist/components/ui/avatar.js +79 -8
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.js +51 -17
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/breadcrumb.js +118 -15
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/button.js +98 -39
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.js +93 -39
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.js +97 -11
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/checkbox.js +64 -7
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/collapsible.js +49 -5
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/command.js +147 -25
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/context-menu.js +196 -24
- package/dist/components/ui/context-menu.js.map +1 -0
- package/dist/components/ui/dialog.js +151 -17
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.js +237 -55
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/form.js +142 -53
- package/dist/components/ui/form.js.map +1 -0
- package/dist/components/ui/hover-card.js +64 -8
- package/dist/components/ui/hover-card.js.map +1 -0
- package/dist/components/ui/inline-code.js +62 -25
- package/dist/components/ui/inline-code.js.map +1 -0
- package/dist/components/ui/input-otp.js +87 -14
- package/dist/components/ui/input-otp.js.map +1 -0
- package/dist/components/ui/input.js +86 -22
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.js +67 -9
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/menubar.js +224 -24
- package/dist/components/ui/menubar.js.map +1 -0
- package/dist/components/ui/navigation-menu.js +149 -20
- package/dist/components/ui/navigation-menu.js.map +1 -0
- package/dist/components/ui/password-input.js +79 -11
- package/dist/components/ui/password-input.js.map +1 -0
- package/dist/components/ui/popover.js +67 -9
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/progress.js +63 -6
- package/dist/components/ui/progress.js.map +1 -0
- package/dist/components/ui/radio-group.js +70 -10
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/resizable.js +78 -8
- package/dist/components/ui/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area.js +75 -9
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.js +166 -20
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/separator.js +61 -6
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.js +153 -27
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/skeleton.js +46 -5
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/slider.js +60 -6
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/spinner.js +36 -6
- package/dist/components/ui/spinner.js.map +1 -0
- package/dist/components/ui/switch.js +92 -21
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/table.js +117 -12
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.js +85 -9
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.js +47 -6
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/toast.js +135 -25
- package/dist/components/ui/toast.js.map +1 -0
- package/dist/components/ui/toaster.js +49 -8
- package/dist/components/ui/toaster.js.map +1 -0
- package/dist/components/ui/toggle-group.js +78 -17
- package/dist/components/ui/toggle-group.js.map +1 -0
- package/dist/components/ui/toggle.js +73 -21
- package/dist/components/ui/toggle.js.map +1 -0
- package/dist/components/ui/tooltip.js +72 -9
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/components/ui/typography.js +69 -31
- package/dist/components/ui/typography.js.map +1 -0
- package/dist/components/ui/use-toast.js +151 -116
- package/dist/components/ui/use-toast.js.map +1 -0
- package/dist/esm/components/action-dialog.js +97 -0
- package/dist/esm/components/action-dialog.js.map +1 -0
- package/dist/esm/components/brand-icons.js +390 -0
- package/dist/esm/components/brand-icons.js.map +1 -0
- package/dist/esm/components/browser-frame/index.js +43 -0
- package/dist/esm/components/browser-frame/index.js.map +1 -0
- package/dist/esm/components/copy-button.js +35 -0
- package/dist/esm/components/copy-button.js.map +1 -0
- package/dist/esm/components/copy-field.js +44 -0
- package/dist/esm/components/copy-field.js.map +1 -0
- package/dist/esm/components/data-table/cells.js +88 -0
- package/dist/esm/components/data-table/cells.js.map +1 -0
- package/dist/esm/components/data-table/column-header.js +40 -0
- package/dist/esm/components/data-table/column-header.js.map +1 -0
- package/dist/esm/components/data-table/data-table.js +249 -0
- package/dist/esm/components/data-table/data-table.js.map +1 -0
- package/dist/esm/components/data-table/faceted-filter.js +117 -0
- package/dist/esm/components/data-table/faceted-filter.js.map +1 -0
- package/dist/esm/components/data-table/index.js +11 -0
- package/dist/esm/components/data-table/index.js.map +1 -0
- package/dist/esm/components/data-table/pagination.js +71 -0
- package/dist/esm/components/data-table/pagination.js.map +1 -0
- package/dist/esm/components/data-table/toolbar-items.js +18 -0
- package/dist/esm/components/data-table/toolbar-items.js.map +1 -0
- package/dist/esm/components/data-table/toolbar.js +92 -0
- package/dist/esm/components/data-table/toolbar.js.map +1 -0
- package/dist/esm/components/data-table/utils.js +12 -0
- package/dist/esm/components/data-table/utils.js.map +1 -0
- package/dist/esm/components/data-table/view-options.js +55 -0
- package/dist/esm/components/data-table/view-options.js.map +1 -0
- package/dist/esm/components/simple-tooltip.js +21 -0
- package/dist/esm/components/simple-tooltip.js.map +1 -0
- package/dist/esm/components/ui/accordion.js +52 -0
- package/dist/esm/components/ui/accordion.js.map +1 -0
- package/dist/esm/components/ui/alert.js +54 -0
- package/dist/esm/components/ui/alert.js.map +1 -0
- package/dist/esm/components/ui/aspect-ratio.js +10 -0
- package/dist/esm/components/ui/aspect-ratio.js.map +1 -0
- package/dist/esm/components/ui/avatar.js +47 -0
- package/dist/esm/components/ui/avatar.js.map +1 -0
- package/dist/esm/components/ui/badge.js +30 -0
- package/dist/esm/components/ui/badge.js.map +1 -0
- package/dist/esm/components/ui/breadcrumb.js +95 -0
- package/dist/esm/components/ui/breadcrumb.js.map +1 -0
- package/dist/esm/components/ui/button.js +79 -0
- package/dist/esm/components/ui/button.js.map +1 -0
- package/dist/esm/components/ui/calendar.js +72 -0
- package/dist/esm/components/ui/calendar.js.map +1 -0
- package/dist/esm/components/ui/card.js +72 -0
- package/dist/esm/components/ui/card.js.map +1 -0
- package/dist/esm/components/ui/checkbox.js +32 -0
- package/dist/esm/components/ui/checkbox.js.map +1 -0
- package/dist/esm/components/ui/collapsible.js +14 -0
- package/dist/esm/components/ui/collapsible.js.map +1 -0
- package/dist/esm/components/ui/command.js +119 -0
- package/dist/esm/components/ui/command.js.map +1 -0
- package/dist/esm/components/ui/context-menu.js +162 -0
- package/dist/esm/components/ui/context-menu.js.map +1 -0
- package/dist/esm/components/ui/dialog.js +114 -0
- package/dist/esm/components/ui/dialog.js.map +1 -0
- package/dist/esm/components/ui/dropdown-menu.js +200 -0
- package/dist/esm/components/ui/dropdown-menu.js.map +1 -0
- package/dist/esm/components/ui/form.js +118 -0
- package/dist/esm/components/ui/form.js.map +1 -0
- package/dist/esm/components/ui/hover-card.js +30 -0
- package/dist/esm/components/ui/hover-card.js.map +1 -0
- package/dist/esm/components/ui/inline-code.js +42 -0
- package/dist/esm/components/ui/inline-code.js.map +1 -0
- package/dist/esm/components/ui/input-otp.js +56 -0
- package/dist/esm/components/ui/input-otp.js.map +1 -0
- package/dist/esm/components/ui/input.js +57 -0
- package/dist/esm/components/ui/input.js.map +1 -0
- package/dist/esm/components/ui/label.js +35 -0
- package/dist/esm/components/ui/label.js.map +1 -0
- package/dist/esm/components/ui/menubar.js +192 -0
- package/dist/esm/components/ui/menubar.js.map +1 -0
- package/dist/esm/components/ui/navigation-menu.js +112 -0
- package/dist/esm/components/ui/navigation-menu.js.map +1 -0
- package/dist/esm/components/ui/password-input.js +58 -0
- package/dist/esm/components/ui/password-input.js.map +1 -0
- package/dist/esm/components/ui/popover.js +32 -0
- package/dist/esm/components/ui/popover.js.map +1 -0
- package/dist/esm/components/ui/progress.js +31 -0
- package/dist/esm/components/ui/progress.js.map +1 -0
- package/dist/esm/components/ui/radio-group.js +40 -0
- package/dist/esm/components/ui/radio-group.js.map +1 -0
- package/dist/esm/components/ui/resizable.js +43 -0
- package/dist/esm/components/ui/resizable.js.map +1 -0
- package/dist/esm/components/ui/scroll-area.js +43 -0
- package/dist/esm/components/ui/scroll-area.js.map +1 -0
- package/dist/esm/components/ui/select.js +135 -0
- package/dist/esm/components/ui/select.js.map +1 -0
- package/dist/esm/components/ui/separator.js +29 -0
- package/dist/esm/components/ui/separator.js.map +1 -0
- package/dist/esm/components/ui/sheet.js +120 -0
- package/dist/esm/components/ui/sheet.js.map +1 -0
- package/dist/esm/components/ui/skeleton.js +24 -0
- package/dist/esm/components/ui/skeleton.js.map +1 -0
- package/dist/esm/components/ui/slider.js +28 -0
- package/dist/esm/components/ui/slider.js.map +1 -0
- package/dist/esm/components/ui/spinner.js +13 -0
- package/dist/esm/components/ui/spinner.js.map +1 -0
- package/dist/esm/components/ui/switch.js +62 -0
- package/dist/esm/components/ui/switch.js.map +1 -0
- package/dist/esm/components/ui/table.js +93 -0
- package/dist/esm/components/ui/table.js.map +1 -0
- package/dist/esm/components/ui/tabs.js +52 -0
- package/dist/esm/components/ui/tabs.js.map +1 -0
- package/dist/esm/components/ui/textarea.js +24 -0
- package/dist/esm/components/ui/textarea.js.map +1 -0
- package/dist/esm/components/ui/toast.js +105 -0
- package/dist/esm/components/ui/toast.js.map +1 -0
- package/dist/esm/components/ui/toaster.js +34 -0
- package/dist/esm/components/ui/toaster.js.map +1 -0
- package/dist/esm/components/ui/toggle-group.js +48 -0
- package/dist/esm/components/ui/toggle-group.js.map +1 -0
- package/dist/esm/components/ui/toggle.js +43 -0
- package/dist/esm/components/ui/toggle.js.map +1 -0
- package/dist/esm/components/ui/tooltip.js +38 -0
- package/dist/esm/components/ui/tooltip.js.map +1 -0
- package/dist/esm/components/ui/typography.js +47 -0
- package/dist/esm/components/ui/typography.js.map +1 -0
- package/dist/esm/components/ui/use-toast.js +130 -0
- package/dist/esm/components/ui/use-toast.js.map +1 -0
- package/dist/esm/index.js +59 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/utils.js +10 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/index.d.mts +967 -0
- package/dist/index.d.ts +967 -54
- package/dist/index.js +147 -53
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.js +34 -4
- package/dist/lib/utils.js.map +1 -0
- package/package.json +10 -5
- package/dist/components/action-dialog.d.ts +0 -28
- package/dist/components/action-dialog.d.ts.map +0 -1
- package/dist/components/brand-icons.d.ts +0 -43
- package/dist/components/brand-icons.d.ts.map +0 -1
- package/dist/components/browser-frame/index.d.ts +0 -10
- package/dist/components/browser-frame/index.d.ts.map +0 -1
- package/dist/components/copy-button.d.ts +0 -17
- package/dist/components/copy-button.d.ts.map +0 -1
- package/dist/components/copy-field.d.ts +0 -13
- package/dist/components/copy-field.d.ts.map +0 -1
- package/dist/components/data-table/cells.d.ts +0 -31
- package/dist/components/data-table/cells.d.ts.map +0 -1
- package/dist/components/data-table/column-header.d.ts +0 -8
- package/dist/components/data-table/column-header.d.ts.map +0 -1
- package/dist/components/data-table/data-table.d.ts +0 -36
- package/dist/components/data-table/data-table.d.ts.map +0 -1
- package/dist/components/data-table/faceted-filter.d.ts +0 -16
- package/dist/components/data-table/faceted-filter.d.ts.map +0 -1
- package/dist/components/data-table/index.d.ts +0 -10
- package/dist/components/data-table/index.d.ts.map +0 -1
- package/dist/components/data-table/pagination.d.ts +0 -7
- package/dist/components/data-table/pagination.d.ts.map +0 -1
- package/dist/components/data-table/toolbar-items.d.ts +0 -8
- package/dist/components/data-table/toolbar-items.d.ts.map +0 -1
- package/dist/components/data-table/toolbar.d.ts +0 -12
- package/dist/components/data-table/toolbar.d.ts.map +0 -1
- package/dist/components/data-table/utils.d.ts +0 -3
- package/dist/components/data-table/utils.d.ts.map +0 -1
- package/dist/components/data-table/view-options.d.ts +0 -7
- package/dist/components/data-table/view-options.d.ts.map +0 -1
- package/dist/components/simple-tooltip.d.ts +0 -9
- package/dist/components/simple-tooltip.d.ts.map +0 -1
- package/dist/components/ui/accordion.d.ts +0 -14
- package/dist/components/ui/accordion.d.ts.map +0 -1
- package/dist/components/ui/alert.d.ts +0 -15
- package/dist/components/ui/alert.d.ts.map +0 -1
- package/dist/components/ui/aspect-ratio.d.ts +0 -4
- package/dist/components/ui/aspect-ratio.d.ts.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -13
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/badge.d.ts +0 -13
- package/dist/components/ui/badge.d.ts.map +0 -1
- package/dist/components/ui/breadcrumb.d.ts +0 -30
- package/dist/components/ui/breadcrumb.d.ts.map +0 -1
- package/dist/components/ui/button.d.ts +0 -28
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/calendar.d.ts +0 -9
- package/dist/components/ui/calendar.d.ts.map +0 -1
- package/dist/components/ui/card.d.ts +0 -23
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/checkbox.d.ts +0 -7
- package/dist/components/ui/checkbox.d.ts.map +0 -1
- package/dist/components/ui/collapsible.d.ts +0 -6
- package/dist/components/ui/collapsible.d.ts.map +0 -1
- package/dist/components/ui/command.d.ts +0 -18
- package/dist/components/ui/command.d.ts.map +0 -1
- package/dist/components/ui/context-menu.d.ts +0 -44
- package/dist/components/ui/context-menu.d.ts.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -34
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/dropdown-menu.d.ts +0 -47
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/form.d.ts +0 -34
- package/dist/components/ui/form.d.ts.map +0 -1
- package/dist/components/ui/hover-card.d.ts +0 -9
- package/dist/components/ui/hover-card.d.ts.map +0 -1
- package/dist/components/ui/inline-code.d.ts +0 -6
- package/dist/components/ui/inline-code.d.ts.map +0 -1
- package/dist/components/ui/input-otp.d.ts +0 -17
- package/dist/components/ui/input-otp.d.ts.map +0 -1
- package/dist/components/ui/input.d.ts +0 -20
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/label.d.ts +0 -11
- package/dist/components/ui/label.d.ts.map +0 -1
- package/dist/components/ui/menubar.d.ts +0 -31
- package/dist/components/ui/menubar.d.ts.map +0 -1
- package/dist/components/ui/navigation-menu.d.ts +0 -25
- package/dist/components/ui/navigation-menu.d.ts.map +0 -1
- package/dist/components/ui/password-input.d.ts +0 -7
- package/dist/components/ui/password-input.d.ts.map +0 -1
- package/dist/components/ui/popover.d.ts +0 -10
- package/dist/components/ui/popover.d.ts.map +0 -1
- package/dist/components/ui/progress.d.ts +0 -7
- package/dist/components/ui/progress.d.ts.map +0 -1
- package/dist/components/ui/radio-group.d.ts +0 -10
- package/dist/components/ui/radio-group.d.ts.map +0 -1
- package/dist/components/ui/resizable.d.ts +0 -37
- package/dist/components/ui/resizable.d.ts.map +0 -1
- package/dist/components/ui/scroll-area.d.ts +0 -10
- package/dist/components/ui/scroll-area.d.ts.map +0 -1
- package/dist/components/ui/select.d.ts +0 -30
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/ui/separator.d.ts +0 -7
- package/dist/components/ui/separator.d.ts.map +0 -1
- package/dist/components/ui/sheet.d.ts +0 -33
- package/dist/components/ui/sheet.d.ts.map +0 -1
- package/dist/components/ui/skeleton.d.ts +0 -4
- package/dist/components/ui/skeleton.d.ts.map +0 -1
- package/dist/components/ui/slider.d.ts +0 -7
- package/dist/components/ui/slider.d.ts.map +0 -1
- package/dist/components/ui/spinner.d.ts +0 -7
- package/dist/components/ui/spinner.d.ts.map +0 -1
- package/dist/components/ui/switch.d.ts +0 -11
- package/dist/components/ui/switch.d.ts.map +0 -1
- package/dist/components/ui/table.d.ts +0 -27
- package/dist/components/ui/table.d.ts.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -14
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/textarea.d.ts +0 -7
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/toast.d.ts +0 -28
- package/dist/components/ui/toast.d.ts.map +0 -1
- package/dist/components/ui/toaster.d.ts +0 -2
- package/dist/components/ui/toaster.d.ts.map +0 -1
- package/dist/components/ui/toggle-group.d.ts +0 -17
- package/dist/components/ui/toggle-group.d.ts.map +0 -1
- package/dist/components/ui/toggle.d.ts +0 -15
- package/dist/components/ui/toggle.d.ts.map +0 -1
- package/dist/components/ui/tooltip.d.ts +0 -12
- package/dist/components/ui/tooltip.d.ts.map +0 -1
- package/dist/components/ui/typography.d.ts +0 -10
- package/dist/components/ui/typography.d.ts.map +0 -1
- package/dist/components/ui/use-toast.d.ts +0 -45
- package/dist/components/ui/use-toast.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/utils.d.ts +0 -3
- package/dist/lib/utils.d.ts.map +0 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/components/ui/context-menu.tsx
|
|
5
|
+
import { forwardRefIfNeeded } from "@stackframe/stack-shared/dist/utils/react";
|
|
6
|
+
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
|
|
7
|
+
import {
|
|
8
|
+
CheckIcon,
|
|
9
|
+
ChevronRightIcon,
|
|
10
|
+
DotFilledIcon
|
|
11
|
+
} from "@radix-ui/react-icons";
|
|
12
|
+
import { cn } from "../../lib/utils.js";
|
|
13
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
var ContextMenu = ContextMenuPrimitive.Root;
|
|
15
|
+
var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
|
|
16
|
+
var ContextMenuGroup = ContextMenuPrimitive.Group;
|
|
17
|
+
var ContextMenuPortal = ContextMenuPrimitive.Portal;
|
|
18
|
+
var ContextMenuSub = ContextMenuPrimitive.Sub;
|
|
19
|
+
var ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
|
|
20
|
+
var ContextMenuSubTrigger = forwardRefIfNeeded(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
21
|
+
ContextMenuPrimitive.SubTrigger,
|
|
22
|
+
{
|
|
23
|
+
ref,
|
|
24
|
+
className: cn(
|
|
25
|
+
"stack-scope flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
|
|
26
|
+
inset && "pl-8",
|
|
27
|
+
className
|
|
28
|
+
),
|
|
29
|
+
...props,
|
|
30
|
+
children: [
|
|
31
|
+
children,
|
|
32
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto h-4 w-4" })
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
));
|
|
36
|
+
ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
|
|
37
|
+
var ContextMenuSubContent = forwardRefIfNeeded(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
38
|
+
ContextMenuPrimitive.SubContent,
|
|
39
|
+
{
|
|
40
|
+
ref,
|
|
41
|
+
className: cn(
|
|
42
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
...props
|
|
46
|
+
}
|
|
47
|
+
));
|
|
48
|
+
ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
|
|
49
|
+
var ContextMenuContent = forwardRefIfNeeded(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
50
|
+
ContextMenuPrimitive.Content,
|
|
51
|
+
{
|
|
52
|
+
ref,
|
|
53
|
+
className: cn(
|
|
54
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
55
|
+
className
|
|
56
|
+
),
|
|
57
|
+
...props
|
|
58
|
+
}
|
|
59
|
+
) }));
|
|
60
|
+
ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
|
|
61
|
+
var ContextMenuItem = forwardRefIfNeeded(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
62
|
+
ContextMenuPrimitive.Item,
|
|
63
|
+
{
|
|
64
|
+
ref,
|
|
65
|
+
className: cn(
|
|
66
|
+
"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
67
|
+
inset && "pl-8",
|
|
68
|
+
className
|
|
69
|
+
),
|
|
70
|
+
...props
|
|
71
|
+
}
|
|
72
|
+
));
|
|
73
|
+
ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
|
|
74
|
+
var ContextMenuCheckboxItem = forwardRefIfNeeded(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
75
|
+
ContextMenuPrimitive.CheckboxItem,
|
|
76
|
+
{
|
|
77
|
+
ref,
|
|
78
|
+
className: cn(
|
|
79
|
+
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
80
|
+
className
|
|
81
|
+
),
|
|
82
|
+
checked,
|
|
83
|
+
...props,
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "h-4 w-4" }) }) }),
|
|
86
|
+
children
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
));
|
|
90
|
+
ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
|
|
91
|
+
var ContextMenuRadioItem = forwardRefIfNeeded(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
92
|
+
ContextMenuPrimitive.RadioItem,
|
|
93
|
+
{
|
|
94
|
+
ref,
|
|
95
|
+
className: cn(
|
|
96
|
+
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
97
|
+
className
|
|
98
|
+
),
|
|
99
|
+
...props,
|
|
100
|
+
children: [
|
|
101
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(DotFilledIcon, { className: "h-4 w-4 fill-current" }) }) }),
|
|
102
|
+
children
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
));
|
|
106
|
+
ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
|
|
107
|
+
var ContextMenuLabel = forwardRefIfNeeded(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
108
|
+
ContextMenuPrimitive.Label,
|
|
109
|
+
{
|
|
110
|
+
ref,
|
|
111
|
+
className: cn(
|
|
112
|
+
"px-2 py-1.5 text-sm font-semibold text-foreground",
|
|
113
|
+
inset && "pl-8",
|
|
114
|
+
className
|
|
115
|
+
),
|
|
116
|
+
...props
|
|
117
|
+
}
|
|
118
|
+
));
|
|
119
|
+
ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
|
|
120
|
+
var ContextMenuSeparator = forwardRefIfNeeded(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
121
|
+
ContextMenuPrimitive.Separator,
|
|
122
|
+
{
|
|
123
|
+
ref,
|
|
124
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
125
|
+
...props
|
|
126
|
+
}
|
|
127
|
+
));
|
|
128
|
+
ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
|
|
129
|
+
var ContextMenuShortcut = ({
|
|
130
|
+
className,
|
|
131
|
+
...props
|
|
132
|
+
}) => {
|
|
133
|
+
return /* @__PURE__ */ jsx(
|
|
134
|
+
"span",
|
|
135
|
+
{
|
|
136
|
+
className: cn(
|
|
137
|
+
"ml-auto text-xs tracking-widest text-muted-foreground",
|
|
138
|
+
className
|
|
139
|
+
),
|
|
140
|
+
...props
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
};
|
|
144
|
+
ContextMenuShortcut.displayName = "ContextMenuShortcut";
|
|
145
|
+
export {
|
|
146
|
+
ContextMenu,
|
|
147
|
+
ContextMenuCheckboxItem,
|
|
148
|
+
ContextMenuContent,
|
|
149
|
+
ContextMenuGroup,
|
|
150
|
+
ContextMenuItem,
|
|
151
|
+
ContextMenuLabel,
|
|
152
|
+
ContextMenuPortal,
|
|
153
|
+
ContextMenuRadioGroup,
|
|
154
|
+
ContextMenuRadioItem,
|
|
155
|
+
ContextMenuSeparator,
|
|
156
|
+
ContextMenuShortcut,
|
|
157
|
+
ContextMenuSub,
|
|
158
|
+
ContextMenuSubContent,
|
|
159
|
+
ContextMenuSubTrigger,
|
|
160
|
+
ContextMenuTrigger
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=context-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/context-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { forwardRefIfNeeded } from \"@stackframe/stack-shared/dist/utils/react\";\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\";\nimport {\n CheckIcon,\n ChevronRightIcon,\n DotFilledIcon,\n} from \"@radix-ui/react-icons\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst ContextMenu = ContextMenuPrimitive.Root;\n\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger;\n\nconst ContextMenuGroup = ContextMenuPrimitive.Group;\n\nconst ContextMenuPortal = ContextMenuPrimitive.Portal;\n\nconst ContextMenuSub = ContextMenuPrimitive.Sub;\n\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;\n\nconst ContextMenuSubTrigger = forwardRefIfNeeded<\n React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean,\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"stack-scope flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </ContextMenuPrimitive.SubTrigger>\n));\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;\n\nconst ContextMenuSubContent = forwardRefIfNeeded<\n React.ElementRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;\n\nconst ContextMenuContent = forwardRefIfNeeded<\n React.ElementRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n));\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;\n\nconst ContextMenuItem = forwardRefIfNeeded<\n React.ElementRef<typeof ContextMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean,\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;\n\nconst ContextMenuCheckboxItem = forwardRefIfNeeded<\n React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n));\nContextMenuCheckboxItem.displayName =\n ContextMenuPrimitive.CheckboxItem.displayName;\n\nconst ContextMenuRadioItem = forwardRefIfNeeded<\n React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n));\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;\n\nconst ContextMenuLabel = forwardRefIfNeeded<\n React.ElementRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean,\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold text-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;\n\nconst ContextMenuSeparator = forwardRefIfNeeded<\n React.ElementRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n));\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;\n\nconst ContextMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n};\nContextMenuShortcut.displayName = \"ContextMenuShortcut\";\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/components/ui/dialog.tsx
|
|
5
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
6
|
+
import { Cross2Icon } from "@radix-ui/react-icons";
|
|
7
|
+
import { forwardRefIfNeeded } from "@stackframe/stack-shared/dist/utils/react";
|
|
8
|
+
import { cn } from "../../lib/utils.js";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
var Dialog = DialogPrimitive.Root;
|
|
11
|
+
var DialogTrigger = DialogPrimitive.Trigger;
|
|
12
|
+
var DialogPortal = DialogPrimitive.Portal;
|
|
13
|
+
var DialogClose = DialogPrimitive.Close;
|
|
14
|
+
var DialogOverlay = forwardRefIfNeeded(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
15
|
+
DialogPrimitive.Overlay,
|
|
16
|
+
{
|
|
17
|
+
ref,
|
|
18
|
+
className: cn(
|
|
19
|
+
"stack-scope fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in",
|
|
20
|
+
className
|
|
21
|
+
),
|
|
22
|
+
...props
|
|
23
|
+
}
|
|
24
|
+
));
|
|
25
|
+
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
26
|
+
var DialogContent = forwardRefIfNeeded(({ className, children, overlayProps, noCloseButton, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
|
|
27
|
+
/* @__PURE__ */ jsx(DialogOverlay, { ...overlayProps }),
|
|
28
|
+
/* @__PURE__ */ jsxs(
|
|
29
|
+
DialogPrimitive.Content,
|
|
30
|
+
{
|
|
31
|
+
ref,
|
|
32
|
+
className: cn(
|
|
33
|
+
"stack-scope fixed left-[50%] top-[50%] max-h-screen z-50 flex flex-col w-full max-w-lg translate-x-[-50%] translate-y-[-50%] border bg-background p-6 shadow-lg duration-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
|
|
34
|
+
className
|
|
35
|
+
),
|
|
36
|
+
...props,
|
|
37
|
+
children: [
|
|
38
|
+
children,
|
|
39
|
+
!noCloseButton && /* @__PURE__ */ jsxs(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
|
|
40
|
+
/* @__PURE__ */ jsx(Cross2Icon, { className: "h-4 w-4" }),
|
|
41
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
42
|
+
] })
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
] }));
|
|
47
|
+
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
48
|
+
var DialogBody = ({
|
|
49
|
+
className,
|
|
50
|
+
...props
|
|
51
|
+
}) => /* @__PURE__ */ jsx("div", { className: cn("stack-scope overflow-y-auto flex flex-col gap-4 w-[calc(100%+3rem)] -mx-6 px-6 my-2 py-2", className), ...props });
|
|
52
|
+
var DialogHeader = ({
|
|
53
|
+
className,
|
|
54
|
+
...props
|
|
55
|
+
}) => /* @__PURE__ */ jsx(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
className: cn(
|
|
59
|
+
"stack-scope flex flex-col space-y-1.5 text-center sm:text-left",
|
|
60
|
+
className
|
|
61
|
+
),
|
|
62
|
+
...props
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
DialogHeader.displayName = "DialogHeader";
|
|
66
|
+
var DialogFooter = ({
|
|
67
|
+
className,
|
|
68
|
+
...props
|
|
69
|
+
}) => /* @__PURE__ */ jsx(
|
|
70
|
+
"div",
|
|
71
|
+
{
|
|
72
|
+
className: cn(
|
|
73
|
+
"stack-scope flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
74
|
+
className
|
|
75
|
+
),
|
|
76
|
+
...props
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
DialogFooter.displayName = "DialogFooter";
|
|
80
|
+
var DialogTitle = forwardRefIfNeeded(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
81
|
+
DialogPrimitive.Title,
|
|
82
|
+
{
|
|
83
|
+
ref,
|
|
84
|
+
className: cn(
|
|
85
|
+
"stack-scope text-lg font-semibold leading-none tracking-tight",
|
|
86
|
+
className
|
|
87
|
+
),
|
|
88
|
+
...props
|
|
89
|
+
}
|
|
90
|
+
));
|
|
91
|
+
DialogTitle.displayName = DialogPrimitive.Title.displayName;
|
|
92
|
+
var DialogDescription = forwardRefIfNeeded(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
93
|
+
DialogPrimitive.Description,
|
|
94
|
+
{
|
|
95
|
+
ref,
|
|
96
|
+
className: cn("stack-scope text-sm text-muted-foreground", className),
|
|
97
|
+
...props
|
|
98
|
+
}
|
|
99
|
+
));
|
|
100
|
+
DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
101
|
+
export {
|
|
102
|
+
Dialog,
|
|
103
|
+
DialogBody,
|
|
104
|
+
DialogClose,
|
|
105
|
+
DialogContent,
|
|
106
|
+
DialogDescription,
|
|
107
|
+
DialogFooter,
|
|
108
|
+
DialogHeader,
|
|
109
|
+
DialogOverlay,
|
|
110
|
+
DialogPortal,
|
|
111
|
+
DialogTitle,
|
|
112
|
+
DialogTrigger
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { Cross2Icon } from \"@radix-ui/react-icons\";\nimport { forwardRefIfNeeded } from \"@stackframe/stack-shared/dist/utils/react\";\nimport React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = forwardRefIfNeeded<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"stack-scope fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = forwardRefIfNeeded<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n overlayProps?: React.ComponentPropsWithoutRef<typeof DialogOverlay>,\n noCloseButton?: boolean,\n }\n>(({ className, children, overlayProps, noCloseButton, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay {...overlayProps} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"stack-scope fixed left-[50%] top-[50%] max-h-screen z-50 flex flex-col w-full max-w-lg translate-x-[-50%] translate-y-[-50%] border bg-background p-6 shadow-lg duration-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n {!noCloseButton && <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <Cross2Icon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>}\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogBody = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"stack-scope overflow-y-auto flex flex-col gap-4 w-[calc(100%+3rem)] -mx-6 px-6 my-2 py-2\", className)} {...props} />\n);\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"stack-scope flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"stack-scope flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = forwardRefIfNeeded<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"stack-scope text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = forwardRefIfNeeded<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"stack-scope text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogBody,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n};\n\n"],"mappings":";;;AAEA,YAAY,qBAAqB;AACjC,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;AAGnC,SAAS,UAAU;AAcjB,cA6BuB,YA7BvB;AAZF,IAAM,SAAyB;AAE/B,IAAM,gBAAgC;AAEtC,IAAM,eAA+B;AAErC,IAAM,cAA8B;AAEpC,IAAM,gBAAgB,mBAGpB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,cAAc,cAA8B,wBAAQ;AAEpD,IAAM,gBAAgB,mBAMpB,CAAC,EAAE,WAAW,UAAU,cAAc,eAAe,GAAG,MAAM,GAAG,QACjE,qBAAC,gBACC;AAAA,sBAAC,iBAAe,GAAG,cAAc;AAAA,EACjC;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACA,CAAC,iBAAiB,qBAAiB,uBAAhB,EAAsB,WAAU,iRAClD;AAAA,8BAAC,cAAW,WAAU,WAAU;AAAA,UAChC,oBAAC,UAAK,WAAU,WAAU,mBAAK;AAAA,WACjC;AAAA;AAAA;AAAA,EACF;AAAA,GACF,CACD;AACD,cAAc,cAA8B,wBAAQ;AAEpD,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA,GAAG;AACL,MACE,oBAAC,SAAI,WAAW,GAAG,4FAA4F,SAAS,GAAI,GAAG,OAAO;AAGxI,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,aAAa,cAAc;AAE3B,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,aAAa,cAAc;AAE3B,IAAM,cAAc,mBAGlB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,YAAY,cAA8B,sBAAM;AAEhD,IAAM,oBAAoB,mBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,6CAA6C,SAAS;AAAA,IACnE,GAAG;AAAA;AACN,CACD;AACD,kBAAkB,cAA8B,4BAAY;","names":[]}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/components/ui/dropdown-menu.tsx
|
|
5
|
+
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
6
|
+
import { CheckIcon, ChevronRightIcon, DotFilledIcon } from "@radix-ui/react-icons";
|
|
7
|
+
import { forwardRefIfNeeded } from "@stackframe/stack-shared/dist/utils/react";
|
|
8
|
+
import React from "react";
|
|
9
|
+
import { useAsyncCallback } from "@stackframe/stack-shared/dist/hooks/use-async-callback";
|
|
10
|
+
import { throwErr } from "@stackframe/stack-shared/dist/utils/errors";
|
|
11
|
+
import { runAsynchronouslyWithAlert } from "@stackframe/stack-shared/dist/utils/promises";
|
|
12
|
+
import { cn } from "../../lib/utils.js";
|
|
13
|
+
import { Spinner } from "./spinner.js";
|
|
14
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
var DropdownMenuContext = React.createContext(void 0);
|
|
16
|
+
var DropdownMenu = forwardRefIfNeeded(({ ...props }, ref) => {
|
|
17
|
+
const [open, setOpen] = React.useState(!!props.open);
|
|
18
|
+
return /* @__PURE__ */ jsx(DropdownMenuContext.Provider, { value: {
|
|
19
|
+
open,
|
|
20
|
+
setOpen: (o) => {
|
|
21
|
+
props.onOpenChange?.(o);
|
|
22
|
+
setOpen(o);
|
|
23
|
+
}
|
|
24
|
+
}, children: /* @__PURE__ */ jsx(
|
|
25
|
+
DropdownMenuPrimitive.Root,
|
|
26
|
+
{
|
|
27
|
+
...props,
|
|
28
|
+
open: props.open ?? open,
|
|
29
|
+
onOpenChange: (o) => {
|
|
30
|
+
props.onOpenChange?.(o);
|
|
31
|
+
setOpen(o);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
) });
|
|
35
|
+
});
|
|
36
|
+
DropdownMenu.displayName = DropdownMenuPrimitive.Root.displayName;
|
|
37
|
+
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
38
|
+
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
39
|
+
var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
|
40
|
+
var DropdownMenuSub = DropdownMenuPrimitive.Sub;
|
|
41
|
+
var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
|
|
42
|
+
var DropdownMenuSubTrigger = forwardRefIfNeeded(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
43
|
+
DropdownMenuPrimitive.SubTrigger,
|
|
44
|
+
{
|
|
45
|
+
ref,
|
|
46
|
+
className: cn(
|
|
47
|
+
"stack-scope flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
|
|
48
|
+
inset && "pl-8",
|
|
49
|
+
className
|
|
50
|
+
),
|
|
51
|
+
...props,
|
|
52
|
+
children: [
|
|
53
|
+
children,
|
|
54
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto h-4 w-4" })
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
));
|
|
58
|
+
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
|
|
59
|
+
var DropdownMenuSubContent = forwardRefIfNeeded(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
60
|
+
DropdownMenuPrimitive.SubContent,
|
|
61
|
+
{
|
|
62
|
+
ref,
|
|
63
|
+
className: cn(
|
|
64
|
+
"stack-scope z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
65
|
+
className
|
|
66
|
+
),
|
|
67
|
+
...props
|
|
68
|
+
}
|
|
69
|
+
));
|
|
70
|
+
DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
|
|
71
|
+
var DropdownMenuContent = forwardRefIfNeeded(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
72
|
+
DropdownMenuPrimitive.Content,
|
|
73
|
+
{
|
|
74
|
+
ref,
|
|
75
|
+
sideOffset,
|
|
76
|
+
className: cn(
|
|
77
|
+
"stack-scope z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
|
|
78
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
79
|
+
className
|
|
80
|
+
),
|
|
81
|
+
...props
|
|
82
|
+
}
|
|
83
|
+
) }));
|
|
84
|
+
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
85
|
+
var DropdownMenuItem = forwardRefIfNeeded(({ className, inset, ...props }, ref) => {
|
|
86
|
+
const { setOpen } = React.useContext(DropdownMenuContext) ?? throwErr("No DropdownMenuContext found");
|
|
87
|
+
const [handleClick, isLoading] = useAsyncCallback(async (e) => {
|
|
88
|
+
await props.onClick?.(e);
|
|
89
|
+
setOpen(false);
|
|
90
|
+
}, [props.onClick]);
|
|
91
|
+
return /* @__PURE__ */ jsxs(
|
|
92
|
+
DropdownMenuPrimitive.Item,
|
|
93
|
+
{
|
|
94
|
+
ref,
|
|
95
|
+
className: cn(
|
|
96
|
+
"stack-scope relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
97
|
+
inset && "pl-8",
|
|
98
|
+
className
|
|
99
|
+
),
|
|
100
|
+
...props,
|
|
101
|
+
disabled: isLoading || props.disabled,
|
|
102
|
+
onClick: props.onClick ? (e) => {
|
|
103
|
+
e.preventDefault();
|
|
104
|
+
e.stopPropagation();
|
|
105
|
+
runAsynchronouslyWithAlert(handleClick(e));
|
|
106
|
+
} : void 0,
|
|
107
|
+
children: [
|
|
108
|
+
/* @__PURE__ */ jsx("div", { style: { visibility: isLoading ? "visible" : "hidden", position: "absolute", inset: 0, display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsx(Spinner, {}) }),
|
|
109
|
+
/* @__PURE__ */ jsx("div", { style: { visibility: isLoading ? "hidden" : "visible" }, children: props.children })
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
});
|
|
114
|
+
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
115
|
+
var DropdownMenuCheckboxItem = forwardRefIfNeeded(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
116
|
+
DropdownMenuPrimitive.CheckboxItem,
|
|
117
|
+
{
|
|
118
|
+
ref,
|
|
119
|
+
className: cn(
|
|
120
|
+
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
121
|
+
className
|
|
122
|
+
),
|
|
123
|
+
checked,
|
|
124
|
+
...props,
|
|
125
|
+
children: [
|
|
126
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "h-4 w-4" }) }) }),
|
|
127
|
+
children
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
));
|
|
131
|
+
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
|
|
132
|
+
var DropdownMenuRadioItem = forwardRefIfNeeded(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
133
|
+
DropdownMenuPrimitive.RadioItem,
|
|
134
|
+
{
|
|
135
|
+
ref,
|
|
136
|
+
className: cn(
|
|
137
|
+
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
138
|
+
className
|
|
139
|
+
),
|
|
140
|
+
...props,
|
|
141
|
+
children: [
|
|
142
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(DotFilledIcon, { className: "h-4 w-4 fill-current" }) }) }),
|
|
143
|
+
children
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
));
|
|
147
|
+
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
|
|
148
|
+
var DropdownMenuLabel = forwardRefIfNeeded(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
149
|
+
DropdownMenuPrimitive.Label,
|
|
150
|
+
{
|
|
151
|
+
ref,
|
|
152
|
+
className: cn(
|
|
153
|
+
"px-2 py-1.5 text-sm font-semibold",
|
|
154
|
+
inset && "pl-8",
|
|
155
|
+
className
|
|
156
|
+
),
|
|
157
|
+
...props
|
|
158
|
+
}
|
|
159
|
+
));
|
|
160
|
+
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
161
|
+
var DropdownMenuSeparator = forwardRefIfNeeded(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
162
|
+
DropdownMenuPrimitive.Separator,
|
|
163
|
+
{
|
|
164
|
+
ref,
|
|
165
|
+
className: cn("-mx-1 my-1 h-px bg-muted", className),
|
|
166
|
+
...props
|
|
167
|
+
}
|
|
168
|
+
));
|
|
169
|
+
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
170
|
+
var DropdownMenuShortcut = ({
|
|
171
|
+
className,
|
|
172
|
+
...props
|
|
173
|
+
}) => {
|
|
174
|
+
return /* @__PURE__ */ jsx(
|
|
175
|
+
"span",
|
|
176
|
+
{
|
|
177
|
+
className: cn("stack-scope ml-auto text-xs tracking-widest opacity-60", className),
|
|
178
|
+
...props
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
};
|
|
182
|
+
DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
183
|
+
export {
|
|
184
|
+
DropdownMenu,
|
|
185
|
+
DropdownMenuCheckboxItem,
|
|
186
|
+
DropdownMenuContent,
|
|
187
|
+
DropdownMenuGroup,
|
|
188
|
+
DropdownMenuItem,
|
|
189
|
+
DropdownMenuLabel,
|
|
190
|
+
DropdownMenuPortal,
|
|
191
|
+
DropdownMenuRadioGroup,
|
|
192
|
+
DropdownMenuRadioItem,
|
|
193
|
+
DropdownMenuSeparator,
|
|
194
|
+
DropdownMenuShortcut,
|
|
195
|
+
DropdownMenuSub,
|
|
196
|
+
DropdownMenuSubContent,
|
|
197
|
+
DropdownMenuSubTrigger,
|
|
198
|
+
DropdownMenuTrigger
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=dropdown-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/dropdown-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { CheckIcon, ChevronRightIcon, DotFilledIcon } from \"@radix-ui/react-icons\";\nimport { forwardRefIfNeeded } from \"@stackframe/stack-shared/dist/utils/react\";\nimport React from \"react\";\n\nimport { useAsyncCallback } from \"@stackframe/stack-shared/dist/hooks/use-async-callback\";\nimport { throwErr } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { cn } from \"../../lib/utils\";\nimport { Spinner } from \"./spinner\";\n\nconst DropdownMenuContext = React.createContext<{\n open: boolean,\n setOpen: (open: boolean) => void,\n} | undefined>(undefined);\n\nconst DropdownMenu = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>\n>(({ ...props }, ref) => {\n const [open, setOpen] = React.useState(!!props.open);\n\n return (\n <DropdownMenuContext.Provider value={{\n open,\n setOpen: (o) => {\n props.onOpenChange?.(o);\n setOpen(o);\n }\n }}>\n <DropdownMenuPrimitive.Root\n {...props}\n open={props.open ?? open}\n onOpenChange={o => {\n props.onOpenChange?.(o);\n setOpen(o);\n }}\n />\n </DropdownMenuContext.Provider>\n );\n});\nDropdownMenu.displayName = DropdownMenuPrimitive.Root.displayName;\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean,\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"stack-scope flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"stack-scope z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"stack-scope z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item>, \"onClick\"> & {\n inset?: boolean,\n onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void | Promise<void>,\n }\n>(({ className, inset, ...props }, ref) => {\n const { setOpen } = React.useContext(DropdownMenuContext) ?? throwErr(\"No DropdownMenuContext found\");\n const [handleClick, isLoading] = useAsyncCallback(async (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n await props.onClick?.(e);\n setOpen(false);\n }, [props.onClick]);\n\n return <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"stack-scope relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n disabled={isLoading || props.disabled}\n onClick={props.onClick ? (e) => {\n e.preventDefault();\n e.stopPropagation();\n runAsynchronouslyWithAlert(handleClick(e));\n } : undefined}\n >\n <div style={{ visibility: isLoading ? \"visible\" : \"hidden\", position: \"absolute\", inset: 0, display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }}>\n <Spinner />\n </div>\n <div style={{ visibility: isLoading ? \"hidden\" : \"visible\" }}>\n {props.children}\n </div>\n </DropdownMenuPrimitive.Item>;\n});\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean,\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = forwardRefIfNeeded<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"stack-scope ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator,\n DropdownMenuShortcut, DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger, DropdownMenuTrigger\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/components/ui/form.tsx
|
|
5
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { forwardRefIfNeeded } from "@stackframe/stack-shared/dist/utils/react";
|
|
8
|
+
import {
|
|
9
|
+
Controller,
|
|
10
|
+
FormProvider,
|
|
11
|
+
useFormContext
|
|
12
|
+
} from "react-hook-form";
|
|
13
|
+
import { StackAssertionError } from "@stackframe/stack-shared/dist/utils/errors";
|
|
14
|
+
import { cn } from "../../lib/utils.js";
|
|
15
|
+
import { SpanLabel } from "./label.js";
|
|
16
|
+
import { jsx } from "react/jsx-runtime";
|
|
17
|
+
var Form = FormProvider;
|
|
18
|
+
var FormFieldContext = React.createContext(null);
|
|
19
|
+
var FormField = ({
|
|
20
|
+
...props
|
|
21
|
+
}) => {
|
|
22
|
+
return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
|
|
23
|
+
};
|
|
24
|
+
var useFormField = () => {
|
|
25
|
+
const fieldContext = React.useContext(FormFieldContext);
|
|
26
|
+
const itemContext = React.useContext(FormItemContext);
|
|
27
|
+
const { getFieldState, formState } = useFormContext();
|
|
28
|
+
if (!fieldContext) {
|
|
29
|
+
throw new StackAssertionError("useFormField should be used within <FormField>");
|
|
30
|
+
}
|
|
31
|
+
const fieldState = getFieldState(fieldContext.name, formState);
|
|
32
|
+
const { id } = itemContext;
|
|
33
|
+
const formItemId = React.useId();
|
|
34
|
+
return {
|
|
35
|
+
id,
|
|
36
|
+
name: fieldContext.name,
|
|
37
|
+
formItemId: `${formItemId}-form-item`,
|
|
38
|
+
formDescriptionId: `${id}-form-item-description`,
|
|
39
|
+
formMessageId: `${id}-form-item-message`,
|
|
40
|
+
...fieldState
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
var FormItemContext = React.createContext(
|
|
44
|
+
{}
|
|
45
|
+
);
|
|
46
|
+
var FormItem = forwardRefIfNeeded(({ className, ...props }, ref) => {
|
|
47
|
+
const id = React.useId();
|
|
48
|
+
return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx("div", { ref, className: cn("space-y-2", className), ...props }) });
|
|
49
|
+
});
|
|
50
|
+
FormItem.displayName = "FormItem";
|
|
51
|
+
var FormLabel = forwardRefIfNeeded(({ className, ...props }, ref) => {
|
|
52
|
+
const { error } = useFormField();
|
|
53
|
+
return /* @__PURE__ */ jsx(
|
|
54
|
+
SpanLabel,
|
|
55
|
+
{
|
|
56
|
+
ref,
|
|
57
|
+
className: cn(error && "text-destructive", className),
|
|
58
|
+
...props
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
FormLabel.displayName = "FormLabel";
|
|
63
|
+
var FormControl = forwardRefIfNeeded(({ ...props }, ref) => {
|
|
64
|
+
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
|
|
65
|
+
return /* @__PURE__ */ jsx(
|
|
66
|
+
Slot,
|
|
67
|
+
{
|
|
68
|
+
ref,
|
|
69
|
+
id: formItemId,
|
|
70
|
+
"aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
|
|
71
|
+
"aria-invalid": !!error,
|
|
72
|
+
...props
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
FormControl.displayName = "FormControl";
|
|
77
|
+
var FormDescription = forwardRefIfNeeded(({ className, ...props }, ref) => {
|
|
78
|
+
const { formDescriptionId } = useFormField();
|
|
79
|
+
return /* @__PURE__ */ jsx(
|
|
80
|
+
"p",
|
|
81
|
+
{
|
|
82
|
+
ref,
|
|
83
|
+
id: formDescriptionId,
|
|
84
|
+
className: cn("text-[0.8rem] text-muted-foreground", className),
|
|
85
|
+
...props
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
FormDescription.displayName = "FormDescription";
|
|
90
|
+
var FormMessage = forwardRefIfNeeded(({ className, children, ...props }, ref) => {
|
|
91
|
+
const { error, formMessageId } = useFormField();
|
|
92
|
+
const body = error ? String(error.message) : children;
|
|
93
|
+
if (!body) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
return /* @__PURE__ */ jsx(
|
|
97
|
+
"p",
|
|
98
|
+
{
|
|
99
|
+
ref,
|
|
100
|
+
id: formMessageId,
|
|
101
|
+
className: cn("text-[0.8rem] font-medium text-destructive", className),
|
|
102
|
+
...props,
|
|
103
|
+
children: body
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
});
|
|
107
|
+
FormMessage.displayName = "FormMessage";
|
|
108
|
+
export {
|
|
109
|
+
Form,
|
|
110
|
+
FormControl,
|
|
111
|
+
FormDescription,
|
|
112
|
+
FormField,
|
|
113
|
+
FormItem,
|
|
114
|
+
FormLabel,
|
|
115
|
+
FormMessage,
|
|
116
|
+
useFormField
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=form.js.map
|