@pihanga2/shadcn 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.
- package/README.md +114 -0
- package/cards/badge/badge.component.d.ts +14 -0
- package/cards/badge/badge.component.js +18 -0
- package/cards/badge/badge.component.js.map +1 -0
- package/cards/badge/badge.types.d.ts +37 -0
- package/cards/badge/badge.types.js +7 -0
- package/cards/badge/badge.types.js.map +1 -0
- package/cards/badge/index.d.ts +1 -0
- package/cards/badge/index.js +12 -0
- package/cards/badge/index.js.map +1 -0
- package/cards/box/box.component.d.ts +4 -0
- package/cards/box/box.component.js +24 -0
- package/cards/box/box.component.js.map +1 -0
- package/cards/box/box.types.d.ts +71 -0
- package/cards/box/box.types.js +7 -0
- package/cards/box/box.types.js.map +1 -0
- package/cards/box/index.d.ts +1 -0
- package/cards/box/index.js +12 -0
- package/cards/box/index.js.map +1 -0
- package/cards/button/button.component.d.ts +4 -0
- package/cards/button/button.component.js +71 -0
- package/cards/button/button.component.js.map +1 -0
- package/cards/button/button.types.d.ts +106 -0
- package/cards/button/button.types.js +7 -0
- package/cards/button/button.types.js.map +1 -0
- package/cards/button/index.d.ts +1 -0
- package/cards/button/index.js +13 -0
- package/cards/button/index.js.map +1 -0
- package/cards/checkbox/checkbox.component.d.ts +4 -0
- package/cards/checkbox/checkbox.component.js +36 -0
- package/cards/checkbox/checkbox.component.js.map +1 -0
- package/cards/checkbox/checkbox.types.d.ts +37 -0
- package/cards/checkbox/checkbox.types.js +7 -0
- package/cards/checkbox/checkbox.types.js.map +1 -0
- package/cards/checkbox/index.d.ts +1 -0
- package/cards/checkbox/index.js +13 -0
- package/cards/checkbox/index.js.map +1 -0
- package/cards/conditional/conditional.component.d.ts +11 -0
- package/cards/conditional/conditional.component.js +15 -0
- package/cards/conditional/conditional.component.js.map +1 -0
- package/cards/conditional/conditional.types.d.ts +29 -0
- package/cards/conditional/conditional.types.js +7 -0
- package/cards/conditional/conditional.types.js.map +1 -0
- package/cards/conditional/index.d.ts +1 -0
- package/cards/conditional/index.js +12 -0
- package/cards/conditional/index.js.map +1 -0
- package/cards/core-index.d.ts +30 -0
- package/cards/core-index.js +61 -0
- package/cards/dataTable/dataTable.component.d.ts +4 -0
- package/cards/dataTable/dataTable.component.js +209 -0
- package/cards/dataTable/dataTable.component.js.map +1 -0
- package/cards/dataTable/dataTable.types.d.ts +196 -0
- package/cards/dataTable/dataTable.types.js +13 -0
- package/cards/dataTable/dataTable.types.js.map +1 -0
- package/cards/dataTable/dataTableRowDetail.component.d.ts +26 -0
- package/cards/dataTable/dataTableRowDetail.component.js +47 -0
- package/cards/dataTable/dataTableRowDetail.component.js.map +1 -0
- package/cards/dataTable/index.d.ts +1 -0
- package/cards/dataTable/index.js +16 -0
- package/cards/dataTable/index.js.map +1 -0
- package/cards/dialog/dialog.component.d.ts +4 -0
- package/cards/dialog/dialog.component.js +89 -0
- package/cards/dialog/dialog.component.js.map +1 -0
- package/cards/dialog/dialog.types.d.ts +115 -0
- package/cards/dialog/dialog.types.js +11 -0
- package/cards/dialog/dialog.types.js.map +1 -0
- package/cards/dialog/index.d.ts +1 -0
- package/cards/dialog/index.js +13 -0
- package/cards/dialog/index.js.map +1 -0
- package/cards/dropDownMenu/drop-down.component.d.ts +4 -0
- package/cards/dropDownMenu/drop-down.component.js +205 -0
- package/cards/dropDownMenu/drop-down.component.js.map +1 -0
- package/cards/dropDownMenu/drop-down.types.d.ts +131 -0
- package/cards/dropDownMenu/drop-down.types.js +7 -0
- package/cards/dropDownMenu/drop-down.types.js.map +1 -0
- package/cards/dropDownMenu/dropdown-context.d.ts +7 -0
- package/cards/dropDownMenu/dropdown-context.js +7 -0
- package/cards/dropDownMenu/dropdown-context.js.map +1 -0
- package/cards/dropDownMenu/dropdown-menu.ui.d.ts +42 -0
- package/cards/dropDownMenu/dropdown-menu.ui.js +111 -0
- package/cards/dropDownMenu/dropdown-menu.ui.js.map +1 -0
- package/cards/dropDownMenu/index.d.ts +1 -0
- package/cards/dropDownMenu/index.js +13 -0
- package/cards/dropDownMenu/index.js.map +1 -0
- package/cards/emptyCard.d.ts +7 -0
- package/cards/field/field.component.d.ts +4 -0
- package/cards/field/field.component.js +38 -0
- package/cards/field/field.component.js.map +1 -0
- package/cards/field/field.types.d.ts +30 -0
- package/cards/field/field.types.js +7 -0
- package/cards/field/field.types.js.map +1 -0
- package/cards/field/index.d.ts +1 -0
- package/cards/field/index.js +12 -0
- package/cards/field/index.js.map +1 -0
- package/cards/flexGrid/flexGrid.component.d.ts +4 -0
- package/cards/flexGrid/flexGrid.component.js +40 -0
- package/cards/flexGrid/flexGrid.component.js.map +1 -0
- package/cards/flexGrid/flexGrid.types.d.ts +23 -0
- package/cards/flexGrid/flexGrid.types.js +7 -0
- package/cards/flexGrid/flexGrid.types.js.map +1 -0
- package/cards/flexGrid/index.d.ts +1 -0
- package/cards/flexGrid/index.js +12 -0
- package/cards/flexGrid/index.js.map +1 -0
- package/cards/form/form.component.d.ts +4 -0
- package/cards/form/form.component.js +64 -0
- package/cards/form/form.component.js.map +1 -0
- package/cards/form/form.context.d.ts +23 -0
- package/cards/form/form.context.js +13 -0
- package/cards/form/form.context.js.map +1 -0
- package/cards/form/form.types.d.ts +43 -0
- package/cards/form/form.types.js +7 -0
- package/cards/form/form.types.js.map +1 -0
- package/cards/form/index.d.ts +2 -0
- package/cards/form/index.js +14 -0
- package/cards/form/index.js.map +1 -0
- package/cards/framework/framework.component.d.ts +3 -0
- package/cards/framework/framework.component.js +21 -0
- package/cards/framework/framework.component.js.map +1 -0
- package/cards/framework/index.d.ts +2 -0
- package/cards/framework/index.js +12 -0
- package/cards/framework/index.js.map +1 -0
- package/cards/graphin/graphin.component.d.ts +4 -0
- package/cards/graphin/graphin.types.d.ts +18 -0
- package/cards/graphin/index.d.ts +2 -0
- package/cards/graphin/tooltip.component.d.ts +10 -0
- package/cards/icons.d.ts +15 -0
- package/cards/icons.js +15 -0
- package/cards/icons.js.map +1 -0
- package/cards/input/index.d.ts +1 -0
- package/cards/input/index.js +13 -0
- package/cards/input/index.js.map +1 -0
- package/cards/input/input.component.d.ts +4 -0
- package/cards/input/input.component.js +69 -0
- package/cards/input/input.component.js.map +1 -0
- package/cards/input/input.types.d.ts +80 -0
- package/cards/input/input.types.js +7 -0
- package/cards/input/input.types.js.map +1 -0
- package/cards/jsonViewer/index.d.ts +1 -0
- package/cards/jsonViewer/jsonViewer.component.d.ts +4 -0
- package/cards/jsonViewer/jsonViewer.types.d.ts +76 -0
- package/cards/list/index.d.ts +1 -0
- package/cards/list/index.js +13 -0
- package/cards/list/index.js.map +1 -0
- package/cards/list/list.component.d.ts +4 -0
- package/cards/list/list.component.js +102 -0
- package/cards/list/list.component.js.map +1 -0
- package/cards/list/list.types.d.ts +65 -0
- package/cards/list/list.types.js +7 -0
- package/cards/list/list.types.js.map +1 -0
- package/cards/loadingOverlay/index.d.ts +1 -0
- package/cards/loadingOverlay/index.js +12 -0
- package/cards/loadingOverlay/index.js.map +1 -0
- package/cards/loadingOverlay/loadingOverlay.component.d.ts +4 -0
- package/cards/loadingOverlay/loadingOverlay.component.js +31 -0
- package/cards/loadingOverlay/loadingOverlay.component.js.map +1 -0
- package/cards/loadingOverlay/loadingOverlay.types.d.ts +13 -0
- package/cards/loadingOverlay/loadingOverlay.types.js +7 -0
- package/cards/loadingOverlay/loadingOverlay.types.js.map +1 -0
- package/cards/loadingSkeleton/index.d.ts +1 -0
- package/cards/loadingSkeleton/index.js +12 -0
- package/cards/loadingSkeleton/index.js.map +1 -0
- package/cards/loadingSkeleton/loading-skeleton.component.d.ts +19 -0
- package/cards/loadingSkeleton/loading-skeleton.component.js +33 -0
- package/cards/loadingSkeleton/loading-skeleton.component.js.map +1 -0
- package/cards/loadingSkeleton/loading-skeleton.types.d.ts +94 -0
- package/cards/loadingSkeleton/loading-skeleton.types.js +7 -0
- package/cards/loadingSkeleton/loading-skeleton.types.js.map +1 -0
- package/cards/markdownViewer/index.d.ts +1 -0
- package/cards/markdownViewer/markdownViewer.component.d.ts +4 -0
- package/cards/markdownViewer/markdownViewer.types.d.ts +28 -0
- package/cards/menu/index.d.ts +1 -0
- package/cards/menu/index.js +13 -0
- package/cards/menu/index.js.map +1 -0
- package/cards/menu/menu.component.d.ts +4 -0
- package/cards/menu/menu.component.js +23 -0
- package/cards/menu/menu.component.js.map +1 -0
- package/cards/menu/menu.types.d.ts +53 -0
- package/cards/menu/menu.types.js +7 -0
- package/cards/menu/menu.types.js.map +1 -0
- package/cards/modeToggle/index.d.ts +1 -0
- package/cards/modeToggle/index.js +13 -0
- package/cards/modeToggle/index.js.map +1 -0
- package/cards/modeToggle/mode-toggle.component.d.ts +4 -0
- package/cards/modeToggle/mode-toggle.component.js +32 -0
- package/cards/modeToggle/mode-toggle.component.js.map +1 -0
- package/cards/modeToggle/mode-toggle.types.d.ts +20 -0
- package/cards/modeToggle/mode-toggle.types.js +7 -0
- package/cards/modeToggle/mode-toggle.types.js.map +1 -0
- package/cards/navbarSearch/index.d.ts +1 -0
- package/cards/navbarSearch/index.js +13 -0
- package/cards/navbarSearch/index.js.map +1 -0
- package/cards/navbarSearch/navbarSearch.component.d.ts +3 -0
- package/cards/navbarSearch/navbarSearch.component.js +88 -0
- package/cards/navbarSearch/navbarSearch.component.js.map +1 -0
- package/cards/navbarSearch/navbarSearch.type.d.ts +32 -0
- package/cards/navbarSearch/navbarSearch.type.js +11 -0
- package/cards/navbarSearch/navbarSearch.type.js.map +1 -0
- package/cards/pageWithNavbar/index.d.ts +2 -0
- package/cards/pageWithNavbar/index.js +14 -0
- package/cards/pageWithNavbar/index.js.map +1 -0
- package/cards/pageWithNavbar/pageWithNavbar.component.d.ts +12 -0
- package/cards/pageWithNavbar/pageWithNavbar.component.js +153 -0
- package/cards/pageWithNavbar/pageWithNavbar.component.js.map +1 -0
- package/cards/pageWithNavbar/pageWithNavbar.type.d.ts +81 -0
- package/cards/pageWithNavbar/pageWithNavbar.type.js +7 -0
- package/cards/pageWithNavbar/pageWithNavbar.type.js.map +1 -0
- package/cards/pasteTarget/index.d.ts +1 -0
- package/cards/pasteTarget/index.js +13 -0
- package/cards/pasteTarget/index.js.map +1 -0
- package/cards/pasteTarget/pasteTarget.component.d.ts +4 -0
- package/cards/pasteTarget/pasteTarget.component.js +158 -0
- package/cards/pasteTarget/pasteTarget.component.js.map +1 -0
- package/cards/pasteTarget/pasteTarget.types.d.ts +46 -0
- package/cards/pasteTarget/pasteTarget.types.js +11 -0
- package/cards/pasteTarget/pasteTarget.types.js.map +1 -0
- package/cards/resizable/index.d.ts +1 -0
- package/cards/resizable/resizable.component.d.ts +4 -0
- package/cards/resizable/resizable.types.d.ts +49 -0
- package/cards/select/index.d.ts +1 -0
- package/cards/select/index.js +13 -0
- package/cards/select/index.js.map +1 -0
- package/cards/select/select.component.d.ts +4 -0
- package/cards/select/select.component.js +41 -0
- package/cards/select/select.component.js.map +1 -0
- package/cards/select/select.types.d.ts +73 -0
- package/cards/select/select.types.js +11 -0
- package/cards/select/select.types.js.map +1 -0
- package/cards/stack/index.d.ts +1 -0
- package/cards/stack/index.js +12 -0
- package/cards/stack/index.js.map +1 -0
- package/cards/stack/stack.component.d.ts +7 -0
- package/cards/stack/stack.component.js +83 -0
- package/cards/stack/stack.component.js.map +1 -0
- package/cards/stack/stack.types.d.ts +47 -0
- package/cards/stack/stack.types.js +7 -0
- package/cards/stack/stack.types.js.map +1 -0
- package/cards/stepper/index.d.ts +1 -0
- package/cards/stepper/index.js +13 -0
- package/cards/stepper/index.js.map +1 -0
- package/cards/stepper/stepper.component.d.ts +4 -0
- package/cards/stepper/stepper.component.js +48 -0
- package/cards/stepper/stepper.component.js.map +1 -0
- package/cards/stepper/stepper.types.d.ts +96 -0
- package/cards/stepper/stepper.types.js +7 -0
- package/cards/stepper/stepper.types.js.map +1 -0
- package/cards/switch/index.d.ts +1 -0
- package/cards/switch/index.js +13 -0
- package/cards/switch/index.js.map +1 -0
- package/cards/switch/switch.component.d.ts +4 -0
- package/cards/switch/switch.component.js +34 -0
- package/cards/switch/switch.component.js.map +1 -0
- package/cards/switch/switch.types.d.ts +39 -0
- package/cards/switch/switch.types.js +7 -0
- package/cards/switch/switch.types.js.map +1 -0
- package/cards/tabs/index.d.ts +1 -0
- package/cards/tabs/index.js +13 -0
- package/cards/tabs/index.js.map +1 -0
- package/cards/tabs/tabs.component.d.ts +4 -0
- package/cards/tabs/tabs.component.js +42 -0
- package/cards/tabs/tabs.component.js.map +1 -0
- package/cards/tabs/tabs.types.d.ts +72 -0
- package/cards/tabs/tabs.types.js +7 -0
- package/cards/tabs/tabs.types.js.map +1 -0
- package/cards/textField/index.d.ts +1 -0
- package/cards/textField/index.js +13 -0
- package/cards/textField/index.js.map +1 -0
- package/cards/textField/textField.component.d.ts +4 -0
- package/cards/textField/textField.component.js +29 -0
- package/cards/textField/textField.component.js.map +1 -0
- package/cards/textField/textField.types.d.ts +36 -0
- package/cards/textField/textField.types.js +7 -0
- package/cards/textField/textField.types.js.map +1 -0
- package/cards/toast/index.d.ts +1 -0
- package/cards/toast/index.js +13 -0
- package/cards/toast/index.js.map +1 -0
- package/cards/toast/toast.component.d.ts +4 -0
- package/cards/toast/toast.component.js +76 -0
- package/cards/toast/toast.component.js.map +1 -0
- package/cards/toast/toast.types.d.ts +100 -0
- package/cards/toast/toast.types.js +12 -0
- package/cards/toast/toast.types.js.map +1 -0
- package/cards/toggleGroup/index.d.ts +1 -0
- package/cards/toggleGroup/index.js +13 -0
- package/cards/toggleGroup/index.js.map +1 -0
- package/cards/toggleGroup/toggleGroup.component.d.ts +4 -0
- package/cards/toggleGroup/toggleGroup.component.js +55 -0
- package/cards/toggleGroup/toggleGroup.component.js.map +1 -0
- package/cards/toggleGroup/toggleGroup.types.d.ts +96 -0
- package/cards/toggleGroup/toggleGroup.types.js +7 -0
- package/cards/toggleGroup/toggleGroup.types.js.map +1 -0
- package/cards/types.d.ts +72 -0
- package/cards/types.js +22 -0
- package/cards/types.js.map +1 -0
- package/cards/typography/index.d.ts +1 -0
- package/cards/typography/index.js +12 -0
- package/cards/typography/index.js.map +1 -0
- package/cards/typography/typography.component.d.ts +4 -0
- package/cards/typography/typography.component.js +44 -0
- package/cards/typography/typography.component.js.map +1 -0
- package/cards/typography/typography.types.d.ts +23 -0
- package/cards/typography/typography.types.js +7 -0
- package/cards/typography/typography.types.js.map +1 -0
- package/components/hooks/use-is-touch-device.d.ts +1 -0
- package/components/lib/utils.js +10 -0
- package/components/lib/utils.js.map +1 -0
- package/components/theme-provider/index.d.ts +4 -0
- package/components/theme-provider/index.js +12 -0
- package/components/theme-provider/index.js.map +1 -0
- package/components/theme-provider/theme-provider.component.d.ts +2 -0
- package/components/theme-provider/theme-provider.component.js +31 -0
- package/components/theme-provider/theme-provider.component.js.map +1 -0
- package/components/theme-provider/theme-provider.types.d.ts +12 -0
- package/components/theme-provider/theme-provider.types.js +9 -0
- package/components/theme-provider/theme-provider.types.js.map +1 -0
- package/components/ui/avatar.js +30 -0
- package/components/ui/avatar.js.map +1 -0
- package/components/ui/badge.js +26 -0
- package/components/ui/badge.js.map +1 -0
- package/components/ui/button.js +98 -0
- package/components/ui/button.js.map +1 -0
- package/components/ui/dialog.js +109 -0
- package/components/ui/dialog.js.map +1 -0
- package/components/ui/field.js +68 -0
- package/components/ui/field.js.map +1 -0
- package/components/ui/input.js +16 -0
- package/components/ui/input.js.map +1 -0
- package/components/ui/label.js +16 -0
- package/components/ui/label.js.map +1 -0
- package/components/ui/menubar.js +62 -0
- package/components/ui/menubar.js.map +1 -0
- package/components/ui/select.js +84 -0
- package/components/ui/select.js.map +1 -0
- package/components/ui/separator.js +5 -0
- package/components/ui/sheet.js +49 -0
- package/components/ui/sheet.js.map +1 -0
- package/components/ui/spinner.js +35 -0
- package/components/ui/spinner.js.map +1 -0
- package/components/ui/stepper.js +145 -0
- package/components/ui/stepper.js.map +1 -0
- package/components/ui/switch.js +20 -0
- package/components/ui/switch.js.map +1 -0
- package/components/ui/table.js +61 -0
- package/components/ui/table.js.map +1 -0
- package/components/ui/tabs.js +38 -0
- package/components/ui/tabs.js.map +1 -0
- package/components/ui/toggle-group.js +50 -0
- package/components/ui/toggle-group.js.map +1 -0
- package/components/ui/toggle.js +27 -0
- package/components/ui/toggle.js.map +1 -0
- package/components/ui/tooltip.js +38 -0
- package/components/ui/tooltip.js.map +1 -0
- package/lib/utils.d.ts +2 -0
- package/lib/utils.js +10 -0
- package/lib/utils.js.map +1 -0
- package/mountain-snow.svg +4 -0
- package/package.json +203 -0
- package/pihanga-shadcn.css +2 -0
- package/r/badge.json +35 -0
- package/r/box.json +26 -0
- package/r/button.json +39 -0
- package/r/checkbox.json +31 -0
- package/r/conditional.json +30 -0
- package/r/dataTable.json +43 -0
- package/r/dialog.json +36 -0
- package/r/dropDownMenu.json +47 -0
- package/r/field.json +35 -0
- package/r/flexGrid.json +32 -0
- package/r/form.json +37 -0
- package/r/framework.json +28 -0
- package/r/graphin.json +42 -0
- package/r/input.json +35 -0
- package/r/jsonViewer.json +40 -0
- package/r/list.json +39 -0
- package/r/loadingOverlay.json +39 -0
- package/r/loadingSkeleton.json +30 -0
- package/r/markdownViewer.json +51 -0
- package/r/menu.json +34 -0
- package/r/modeToggle.json +36 -0
- package/r/navbarSearch.json +31 -0
- package/r/pageWithNavbar.json +46 -0
- package/r/pasteTarget.json +41 -0
- package/r/pihanga-base.json +11 -0
- package/r/pihanga-cards-icons.json +16 -0
- package/r/pihanga-cards-types.json +16 -0
- package/r/pihanga-hook-use-is-touch-device.json +15 -0
- package/r/pihanga-lib-utils.json +18 -0
- package/r/pihanga-theme-provider.json +25 -0
- package/r/pihanga-ui-extras.json +68 -0
- package/r/registry.json +171 -0
- package/r/resizable.json +35 -0
- package/r/select.json +35 -0
- package/r/stack.json +27 -0
- package/r/stepper.json +39 -0
- package/r/switch.json +36 -0
- package/r/tabs.json +33 -0
- package/r/textField.json +32 -0
- package/r/toast.json +32 -0
- package/r/toggleGroup.json +35 -0
- package/r/typography.json +31 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { cn as e } from "../lib/utils.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { Slot as t } from "@radix-ui/react-slot";
|
|
4
|
+
import { cva as n } from "class-variance-authority";
|
|
5
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/ui/badge.tsx
|
|
7
|
+
var i = n("inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", {
|
|
8
|
+
variants: { variant: {
|
|
9
|
+
default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
10
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
11
|
+
destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
12
|
+
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
13
|
+
} },
|
|
14
|
+
defaultVariants: { variant: "default" }
|
|
15
|
+
});
|
|
16
|
+
function a({ className: n, variant: a, asChild: o = !1, ...s }) {
|
|
17
|
+
return /* @__PURE__ */ r(o ? t : "span", {
|
|
18
|
+
"data-slot": "badge",
|
|
19
|
+
className: e(i({ variant: a }), n),
|
|
20
|
+
...s
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { a as Badge };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","names":[],"sources":["../../../src/components/ui/badge.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/components/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n"],"mappings":";;;;;;AAMA,IAAM,IAAgB,EACpB,oZACA;CACE,UAAU,EACR,SAAS;EACP,SACE;EACF,WACE;EACF,aACE;EACF,SACE;CACJ,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAEA,SAAS,EAAM,EACb,cACA,YACA,aAAU,IACV,GAAG,KAEyD;CAG5D,OACE,kBAHW,IAAU,IAAO,QAG5B;EACE,aAAU;EACV,WAAW,EAAG,EAAc,EAAE,WAAQ,CAAC,GAAG,CAAS;EACnD,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { cva as t } from "class-variance-authority";
|
|
4
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
5
|
+
import { Slot as r } from "radix-ui";
|
|
6
|
+
//#region src/components/ui/button.tsx
|
|
7
|
+
var i = t("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
8
|
+
variants: {
|
|
9
|
+
variant: {
|
|
10
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
11
|
+
destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
|
|
12
|
+
outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
|
|
13
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
14
|
+
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
15
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
16
|
+
ghost2: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
17
|
+
ghost3: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
18
|
+
ghostActive: "bg-accent text-accent-foreground",
|
|
19
|
+
brand: "bg-btn-brand text-btn-brand-foreground font-semibold hover:bg-btn-brand/90 shadow-sm rounded-btn-brand",
|
|
20
|
+
nav: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
21
|
+
navAction: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
22
|
+
menuAction: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
23
|
+
blockAction: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
24
|
+
blockActionSecondary: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
|
|
25
|
+
primaryOutline: "border border-primary text-primary hover:bg-primary hover:text-primary-foreground",
|
|
26
|
+
radio: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
|
|
27
|
+
none: ""
|
|
28
|
+
},
|
|
29
|
+
size: {
|
|
30
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
31
|
+
xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
|
|
32
|
+
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
|
33
|
+
md: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
34
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
35
|
+
icon: "size-9",
|
|
36
|
+
iconSm: "size-8",
|
|
37
|
+
"icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
|
|
38
|
+
"icon-sm": "size-8",
|
|
39
|
+
"icon-lg": "size-10",
|
|
40
|
+
navAction: "h-9 px-3",
|
|
41
|
+
menuAction: "h-8 px-3 text-sm",
|
|
42
|
+
blockAction: "h-10 px-4",
|
|
43
|
+
none: ""
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
defaultVariants: {
|
|
47
|
+
variant: "default",
|
|
48
|
+
size: "default"
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
function a({ className: t, variant: a = "default", size: o = "default", asChild: s = !1, label: c, active: l, focused: u, isMenu: d, truncate: f, loading: p, isPending: m, loadingClassName: h, ...g }) {
|
|
52
|
+
return /* @__PURE__ */ n(s ? r.Root : "button", {
|
|
53
|
+
"data-slot": "button",
|
|
54
|
+
"data-variant": a,
|
|
55
|
+
"data-size": o,
|
|
56
|
+
"aria-label": c,
|
|
57
|
+
"data-active": l || void 0,
|
|
58
|
+
"data-focused": u || void 0,
|
|
59
|
+
"data-is-menu": d || void 0,
|
|
60
|
+
"data-loading": p || void 0,
|
|
61
|
+
"data-pending": m || void 0,
|
|
62
|
+
className: e(i({
|
|
63
|
+
variant: a,
|
|
64
|
+
size: o,
|
|
65
|
+
className: t
|
|
66
|
+
}), f && "truncate"),
|
|
67
|
+
...g
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function o({ className: t, variant: r = "default", size: a = "default", href: o, target: s, label: c, active: l, focused: u, isMenu: d, truncate: f, loading: p, isPending: m, loadingClassName: h, onClick: g, children: _, ...v }) {
|
|
71
|
+
return /* @__PURE__ */ n("a", {
|
|
72
|
+
"data-slot": "button",
|
|
73
|
+
"data-variant": r,
|
|
74
|
+
"data-size": a,
|
|
75
|
+
href: o,
|
|
76
|
+
target: s,
|
|
77
|
+
"aria-label": c,
|
|
78
|
+
"data-active": l || void 0,
|
|
79
|
+
"data-focused": u || void 0,
|
|
80
|
+
"data-is-menu": d || void 0,
|
|
81
|
+
"data-loading": p || void 0,
|
|
82
|
+
"data-pending": m || void 0,
|
|
83
|
+
className: e(i({
|
|
84
|
+
variant: r,
|
|
85
|
+
size: a,
|
|
86
|
+
className: t
|
|
87
|
+
}), f && "truncate"),
|
|
88
|
+
onClick: g ? (e) => {
|
|
89
|
+
e.preventDefault(), g();
|
|
90
|
+
} : void 0,
|
|
91
|
+
...v,
|
|
92
|
+
children: _
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
//#endregion
|
|
96
|
+
export { a as Button, o as LinkButton };
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","names":[],"sources":["../../../src/components/ui/button.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {cva, type VariantProps} from \"class-variance-authority\";\nimport {Slot} from \"radix-ui\";\n\nimport {cn} from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n // Extended variants used by pi/button\n ghost2:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n ghost3:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n ghostActive: \"bg-accent text-accent-foreground\",\n brand:\n \"bg-btn-brand text-btn-brand-foreground font-semibold hover:bg-btn-brand/90 shadow-sm rounded-btn-brand\",\n nav: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n navAction:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n menuAction:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n blockAction:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n blockActionSecondary:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground\",\n primaryOutline:\n \"border border-primary text-primary hover:bg-primary hover:text-primary-foreground\",\n radio:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground\",\n none: \"\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n md: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n iconSm: \"size-8\",\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n navAction: \"h-9 px-3\",\n menuAction: \"h-8 px-3 text-sm\",\n blockAction: \"h-10 px-4\",\n none: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\n/** Extra props accepted by both Button and LinkButton beyond standard HTML/CVA props */\ntype ButtonExtendedProps = {\n /** Accessible label; maps to aria-label */\n label?: string;\n active?: boolean;\n focused?: boolean;\n isMenu?: boolean;\n truncate?: boolean;\n loading?: boolean;\n isPending?: boolean;\n loadingClassName?: string;\n};\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n label,\n active,\n focused,\n isMenu,\n truncate,\n loading,\n isPending,\n loadingClassName: _loadingClassName,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n } & ButtonExtendedProps) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n aria-label={label}\n data-active={active || undefined}\n data-focused={focused || undefined}\n data-is-menu={isMenu || undefined}\n data-loading={loading || undefined}\n data-pending={isPending || undefined}\n className={cn(\n buttonVariants({variant, size, className}),\n truncate && \"truncate\",\n )}\n {...props}\n />\n );\n}\n\n/** Button rendered as an anchor (`<a>`) element */\nfunction LinkButton({\n className,\n variant = \"default\",\n size = \"default\",\n href,\n target,\n label,\n active,\n focused,\n isMenu,\n truncate,\n loading,\n isPending,\n loadingClassName: _loadingClassName,\n onClick,\n children,\n ...props\n}: Omit<React.ComponentProps<\"a\">, \"onClick\"> &\n VariantProps<typeof buttonVariants> &\n ButtonExtendedProps & {\n href?: string;\n target?: string;\n onClick?: () => void;\n }) {\n return (\n <a\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n href={href}\n target={target}\n aria-label={label}\n data-active={active || undefined}\n data-focused={focused || undefined}\n data-is-menu={isMenu || undefined}\n data-loading={loading || undefined}\n data-pending={isPending || undefined}\n className={cn(\n buttonVariants({variant, size, className}),\n truncate && \"truncate\",\n )}\n onClick={\n onClick\n ? (e) => {\n e.preventDefault();\n onClick();\n }\n : undefined\n }\n {...props}\n >\n {children}\n </a>\n );\n}\n\nexport {Button, buttonVariants, LinkButton};\n"],"mappings":";;;;;;AAMA,IAAM,IAAiB,EACrB,+bACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,aACE;GACF,SACE;GACF,WACE;GACF,OACE;GACF,MAAM;GAEN,QACE;GACF,QACE;GACF,aAAa;GACb,OACE;GACF,KAAK;GACL,WACE;GACF,YACE;GACF,aACE;GACF,sBACE;GACF,gBACE;GACF,OACE;GACF,MAAM;EACR;EACA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACN,QAAQ;GACR,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,YAAY;GACZ,aAAa;GACb,MAAM;EACR;CACF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CACF;AAeA,SAAS,EAAO,EACd,cACA,aAAU,WACV,UAAO,WACP,aAAU,IACV,UACA,WACA,YACA,WACA,aACA,YACA,cACA,kBAAkB,GAClB,GAAG,KAIsB;CAGzB,OACE,kBAHW,IAAU,EAAK,OAAO,UAGjC;EACE,aAAU;EACV,gBAAc;EACd,aAAW;EACX,cAAY;EACZ,eAAa,KAAU,KAAA;EACvB,gBAAc,KAAW,KAAA;EACzB,gBAAc,KAAU,KAAA;EACxB,gBAAc,KAAW,KAAA;EACzB,gBAAc,KAAa,KAAA;EAC3B,WAAW,EACT,EAAe;GAAC;GAAS;GAAM;EAAS,CAAC,GACzC,KAAY,UACd;EACA,GAAI;CACL,CAAA;AAEL;AAGA,SAAS,EAAW,EAClB,cACA,aAAU,WACV,UAAO,WACP,SACA,WACA,UACA,WACA,YACA,WACA,aACA,YACA,cACA,kBAAkB,GAClB,YACA,aACA,GAAG,KAOA;CACH,OACE,kBAAC,KAAD;EACE,aAAU;EACV,gBAAc;EACd,aAAW;EACL;EACE;EACR,cAAY;EACZ,eAAa,KAAU,KAAA;EACvB,gBAAc,KAAW,KAAA;EACzB,gBAAc,KAAU,KAAA;EACxB,gBAAc,KAAW,KAAA;EACzB,gBAAc,KAAa,KAAA;EAC3B,WAAW,EACT,EAAe;GAAC;GAAS;GAAM;EAAS,CAAC,GACzC,KAAY,UACd;EACA,SACE,KACK,MAAM;GAEL,AADA,EAAE,eAAe,GACjB,EAAQ;EACV,IACA,KAAA;EAEN,GAAI;EAEH;CACA,CAAA;AAEP"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import * as t from "react";
|
|
3
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
|
+
import { X as i } from "lucide-react";
|
|
5
|
+
import * as a from "@radix-ui/react-dialog";
|
|
6
|
+
//#region src/components/ui/dialog.tsx
|
|
7
|
+
var o = {
|
|
8
|
+
xs: "max-w-xs",
|
|
9
|
+
sm: "max-w-sm",
|
|
10
|
+
md: "max-w-md",
|
|
11
|
+
lg: "max-w-lg",
|
|
12
|
+
xl: "max-w-xl",
|
|
13
|
+
"2xl": "max-w-2xl",
|
|
14
|
+
"3xl": "max-w-3xl",
|
|
15
|
+
"4xl": "max-w-4xl"
|
|
16
|
+
};
|
|
17
|
+
function s(e = 768) {
|
|
18
|
+
let [n, r] = t.useState(() => typeof window < "u" ? window.innerWidth < e : !1);
|
|
19
|
+
return t.useEffect(() => {
|
|
20
|
+
let t = window.matchMedia(`(max-width: ${e - 1}px)`), n = (e) => r(e.matches);
|
|
21
|
+
return t.addEventListener("change", n), r(t.matches), () => t.removeEventListener("change", n);
|
|
22
|
+
}, [e]), n;
|
|
23
|
+
}
|
|
24
|
+
function c({ desktopVariant: e, mobileVariant: t, ...r }) {
|
|
25
|
+
return /* @__PURE__ */ n(a.Root, {
|
|
26
|
+
"data-slot": "dialog",
|
|
27
|
+
...r
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function l({ ...e }) {
|
|
31
|
+
return /* @__PURE__ */ n(a.Trigger, {
|
|
32
|
+
"data-slot": "dialog-trigger",
|
|
33
|
+
...e
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function u({ ...e }) {
|
|
37
|
+
return /* @__PURE__ */ n(a.Portal, {
|
|
38
|
+
"data-slot": "dialog-portal",
|
|
39
|
+
...e
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function d({ className: t, ...r }) {
|
|
43
|
+
return /* @__PURE__ */ n(a.Overlay, {
|
|
44
|
+
"data-slot": "dialog-overlay",
|
|
45
|
+
className: e("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", t),
|
|
46
|
+
...r
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function f({ className: t, children: c, size: l = "md", variant: f, desktopVariant: p, mobileVariant: m, dismissible: h = !0, hideClose: g = !1, fixed: _, ...v }) {
|
|
50
|
+
let y = (s() ? m : p) ?? f ?? "modal", b = y === "drawer", x = y === "full";
|
|
51
|
+
return /* @__PURE__ */ r(u, { children: [/* @__PURE__ */ n(d, {}), /* @__PURE__ */ r(a.Content, {
|
|
52
|
+
"data-slot": "dialog-content",
|
|
53
|
+
"data-variant": y,
|
|
54
|
+
onInteractOutside: h === !1 ? (e) => e.preventDefault() : void 0,
|
|
55
|
+
onEscapeKeyDown: h === !1 ? (e) => e.preventDefault() : void 0,
|
|
56
|
+
className: e("bg-card text-card-foreground border border-border", "data-[state=open]:animate-in data-[state=closed]:animate-out", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", "fixed z-50 w-full shadow-xl", !b && !x && e("top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", "rounded-lg", "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95", o[l]), x && e("inset-0 translate-x-0 translate-y-0", "max-w-none h-full rounded-none", "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95"), b && e("bottom-0 left-0 right-0 top-auto", "translate-x-0 translate-y-0", "max-w-none rounded-t-xl rounded-b-none", "data-[state=closed]:slide-out-to-bottom", "data-[state=open]:slide-in-from-bottom"), _ && "flex flex-col", _ && !b && "max-h-[90vh]", _ && b && "max-h-[85vh]", t),
|
|
57
|
+
...v,
|
|
58
|
+
children: [
|
|
59
|
+
b && /* @__PURE__ */ n("div", { className: "mx-auto mt-4 mb-1 h-1.5 w-12 shrink-0 rounded-full bg-muted-foreground/30" }),
|
|
60
|
+
!g && /* @__PURE__ */ r(a.Close, {
|
|
61
|
+
className: "absolute top-4 right-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",
|
|
62
|
+
children: [/* @__PURE__ */ n(i, { className: "h-4 w-4" }), /* @__PURE__ */ n("span", {
|
|
63
|
+
className: "sr-only",
|
|
64
|
+
children: "Close"
|
|
65
|
+
})]
|
|
66
|
+
}),
|
|
67
|
+
c
|
|
68
|
+
]
|
|
69
|
+
})] });
|
|
70
|
+
}
|
|
71
|
+
function p({ className: t, ...r }) {
|
|
72
|
+
return /* @__PURE__ */ n("div", {
|
|
73
|
+
"data-slot": "dialog-header",
|
|
74
|
+
className: e("flex shrink-0 flex-col gap-2 px-6 pt-6 text-center sm:text-left", t),
|
|
75
|
+
...r
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function m({ className: t, ...r }) {
|
|
79
|
+
return /* @__PURE__ */ n("div", {
|
|
80
|
+
"data-slot": "dialog-body",
|
|
81
|
+
className: e("flex-1 overflow-auto px-6 py-4", t),
|
|
82
|
+
...r
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function h({ className: t, ...r }) {
|
|
86
|
+
return /* @__PURE__ */ n("div", {
|
|
87
|
+
"data-slot": "dialog-footer",
|
|
88
|
+
className: e("flex shrink-0 flex-col-reverse gap-2 px-6 pb-6 sm:flex-row sm:justify-end", t),
|
|
89
|
+
...r
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
function g({ className: t, ...r }) {
|
|
93
|
+
return /* @__PURE__ */ n(a.Title, {
|
|
94
|
+
"data-slot": "dialog-title",
|
|
95
|
+
className: e("text-lg font-semibold leading-none", t),
|
|
96
|
+
...r
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
function _({ className: t, ...r }) {
|
|
100
|
+
return /* @__PURE__ */ n(a.Description, {
|
|
101
|
+
"data-slot": "dialog-description",
|
|
102
|
+
className: e("text-muted-foreground text-sm", t),
|
|
103
|
+
...r
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
107
|
+
export { c as Dialog, m as DialogBody, f as DialogContent, _ as DialogDescription, h as DialogFooter, p as DialogHeader, g as DialogTitle, l as DialogTrigger };
|
|
108
|
+
|
|
109
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.js","names":[],"sources":["../../../src/components/ui/dialog.tsx"],"sourcesContent":["import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport {X} from \"lucide-react\";\n\nimport {cn} from \"@/lib/utils\";\n\nconst sizeClasses: Record<string, string> = {\n xs: \"max-w-xs\",\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n \"2xl\": \"max-w-2xl\",\n \"3xl\": \"max-w-3xl\",\n \"4xl\": \"max-w-4xl\",\n};\n\n/** Returns true when the viewport is narrower than `breakpoint` pixels. */\nfunction useIsMobile(breakpoint = 768) {\n const [isMobile, setIsMobile] = React.useState(() =>\n typeof window !== \"undefined\" ? window.innerWidth < breakpoint : false,\n );\n\n React.useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n setIsMobile(mq.matches);\n return () => mq.removeEventListener(\"change\", handler);\n }, [breakpoint]);\n\n return isMobile;\n}\n\ntype DialogVariant = \"modal\" | \"drawer\" | \"full\";\n\ntype DialogProps = React.ComponentProps<typeof DialogPrimitive.Root> & {\n /** Desktop-specific variant override (ignored at this layer — consumed by DialogContent). */\n desktopVariant?: DialogVariant;\n /** Mobile-specific variant override (ignored at this layer — consumed by DialogContent). */\n mobileVariant?: DialogVariant;\n};\n\nfunction Dialog({\n desktopVariant: _desktopVariant,\n mobileVariant: _mobileVariant,\n ...props\n}: DialogProps) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype DialogContentProps = React.ComponentProps<\n typeof DialogPrimitive.Content\n> & {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n /**\n * Base variant applied when no responsive override matches.\n * - `modal` — centred overlay (default)\n * - `drawer` — bottom sheet that slides up\n * - `full` — full-viewport overlay\n */\n variant?: DialogVariant;\n /**\n * Override variant for desktop viewports (≥ 768 px).\n * Takes precedence over `variant` on desktop.\n */\n desktopVariant?: DialogVariant;\n /**\n * Override variant for mobile viewports (< 768 px).\n * Takes precedence over `variant` on mobile.\n */\n mobileVariant?: DialogVariant;\n dismissible?: boolean;\n hideClose?: boolean;\n fixed?: boolean;\n};\n\nfunction DialogContent({\n className,\n children,\n size = \"md\",\n variant,\n desktopVariant,\n mobileVariant,\n dismissible = true,\n hideClose = false,\n fixed,\n ...props\n}: DialogContentProps) {\n const isMobile = useIsMobile();\n\n // Resolve the effective variant: responsive override beats base variant.\n const effectiveVariant: DialogVariant =\n (isMobile ? mobileVariant : desktopVariant) ?? variant ?? \"modal\";\n\n const isDrawer = effectiveVariant === \"drawer\";\n const isFull = effectiveVariant === \"full\";\n\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n data-variant={effectiveVariant}\n onInteractOutside={\n dismissible === false ? (e) => e.preventDefault() : undefined\n }\n onEscapeKeyDown={\n dismissible === false ? (e) => e.preventDefault() : undefined\n }\n className={cn(\n // ── Base ──────────────────────────────────────────────────────────\n \"bg-card text-card-foreground border border-border\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"fixed z-50 w-full shadow-xl\",\n\n // ── Modal (default) ───────────────────────────────────────────────\n !isDrawer &&\n !isFull &&\n cn(\n \"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n \"rounded-lg\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n sizeClasses[size],\n ),\n\n // ── Full-screen ───────────────────────────────────────────────────\n isFull &&\n cn(\n \"inset-0 translate-x-0 translate-y-0\",\n \"max-w-none h-full rounded-none\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n ),\n\n // ── Drawer (bottom sheet) ─────────────────────────────────────────\n isDrawer &&\n cn(\n \"bottom-0 left-0 right-0 top-auto\",\n \"translate-x-0 translate-y-0\",\n \"max-w-none rounded-t-xl rounded-b-none\",\n \"data-[state=closed]:slide-out-to-bottom\",\n \"data-[state=open]:slide-in-from-bottom\",\n ),\n\n // ── Fixed layout (scrollable body, sticky header/footer) ──────────\n fixed && \"flex flex-col\",\n fixed && !isDrawer && \"max-h-[90vh]\",\n fixed && isDrawer && \"max-h-[85vh]\",\n\n className,\n )}\n {...props}\n >\n {/* Drawer handle */}\n {isDrawer && (\n <div className=\"mx-auto mt-4 mb-1 h-1.5 w-12 shrink-0 rounded-full bg-muted-foreground/30\" />\n )}\n\n {!hideClose && (\n <DialogPrimitive.Close className=\"absolute top-4 right-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\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n {children}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({className, ...props}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\n \"flex shrink-0 flex-col gap-2 px-6 pt-6 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogBody({className, ...props}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-body\"\n className={cn(\"flex-1 overflow-auto px-6 py-4\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({className, ...props}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex shrink-0 flex-col-reverse gap-2 px-6 pb-6 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg font-semibold leading-none\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\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"],"mappings":";;;;;;AAMA,IAAM,IAAsC;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,OAAO;AACT;AAGA,SAAS,EAAY,IAAa,KAAK;CACrC,IAAM,CAAC,GAAU,KAAe,EAAM,eACpC,OAAO,SAAW,MAAc,OAAO,aAAa,IAAa,EACnE;CAUA,OARA,EAAM,gBAAgB;EACpB,IAAM,IAAK,OAAO,WAAW,eAAe,IAAa,EAAE,IAAI,GACzD,KAAW,MAA2B,EAAY,EAAE,OAAO;EAGjE,OAFA,EAAG,iBAAiB,UAAU,CAAO,GACrC,EAAY,EAAG,OAAO,SACT,EAAG,oBAAoB,UAAU,CAAO;CACvD,GAAG,CAAC,CAAU,CAAC,GAER;AACT;AAWA,SAAS,EAAO,EACd,gBAAgB,GAChB,eAAe,GACf,GAAG,KACW;CACd,OAAO,kBAAC,EAAgB,MAAjB;EAAsB,aAAU;EAAS,GAAI;CAAQ,CAAA;AAC9D;AAEA,SAAS,EAAc,EACrB,GAAG,KACoD;CACvD,OAAO,kBAAC,EAAgB,SAAjB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAEA,SAAS,EAAa,EACpB,GAAG,KACmD;CACtD,OAAO,kBAAC,EAAgB,QAAjB;EAAwB,aAAU;EAAgB,GAAI;CAAQ,CAAA;AACvE;AAQA,SAAS,EAAc,EACrB,cACA,GAAG,KACoD;CACvD,OACE,kBAAC,EAAgB,SAAjB;EACE,aAAU;EACV,WAAW,EACT,0JACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AA4BA,SAAS,EAAc,EACrB,cACA,aACA,UAAO,MACP,YACA,mBACA,kBACA,iBAAc,IACd,eAAY,IACZ,UACA,GAAG,KACkB;CAIrB,IAAM,KAHW,EAId,IAAW,IAAgB,MAAmB,KAAW,SAEtD,IAAW,MAAqB,UAChC,IAAS,MAAqB;CAEpC,OACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,CAAgB,CAAA,GAChB,kBAAC,EAAgB,SAAjB;EACE,aAAU;EACV,gBAAc;EACd,mBACE,MAAgB,MAAS,MAAM,EAAE,eAAe,IAAI,KAAA;EAEtD,iBACE,MAAgB,MAAS,MAAM,EAAE,eAAe,IAAI,KAAA;EAEtD,WAAW,EAET,qDACA,gEACA,8DACA,+BAGA,CAAC,KACC,CAAC,KACD,EACE,sDACA,cACA,gEACA,EAAY,EACd,GAGF,KACE,EACE,uCACA,kCACA,8DACF,GAGF,KACE,EACE,oCACA,+BACA,0CACA,2CACA,wCACF,GAGF,KAAS,iBACT,KAAS,CAAC,KAAY,gBACtB,KAAS,KAAY,gBAErB,CACF;EACA,GAAI;YAnDN;GAsDG,KACC,kBAAC,OAAD,EAAK,WAAU,4EAA6E,CAAA;GAG7F,CAAC,KACA,kBAAC,EAAgB,OAAjB;IAAuB,WAAU;cAAjC,CACE,kBAAC,GAAD,EAAG,WAAU,UAAW,CAAA,GACxB,kBAAC,QAAD;KAAM,WAAU;eAAU;IAAW,CAAA,CAChB;;GAExB;EACsB;GACb,EAAA,CAAA;AAElB;AAEA,SAAS,EAAa,EAAC,cAAW,GAAG,KAAqC;CACxE,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,mEACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAAC,cAAW,GAAG,KAAqC;CACtE,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,kCAAkC,CAAS;EACzD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAa,EAAC,cAAW,GAAG,KAAqC;CACxE,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,6EACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAY,EACnB,cACA,GAAG,KACkD;CACrD,OACE,kBAAC,EAAgB,OAAjB;EACE,aAAU;EACV,WAAW,EAAG,sCAAsC,CAAS;EAC7D,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAkB,EACzB,cACA,GAAG,KACwD;CAC3D,OACE,kBAAC,EAAgB,aAAjB;EACE,aAAU;EACV,WAAW,EAAG,iCAAiC,CAAS;EACxD,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import { Label as t } from "./label.js";
|
|
3
|
+
import "./separator.js";
|
|
4
|
+
import { useMemo as n } from "react";
|
|
5
|
+
import { cva as r } from "class-variance-authority";
|
|
6
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
7
|
+
//#region src/components/ui/field.tsx
|
|
8
|
+
var a = r("group/field flex w-full gap-3 data-[invalid=true]:text-destructive", {
|
|
9
|
+
variants: { orientation: {
|
|
10
|
+
vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
|
|
11
|
+
horizontal: [
|
|
12
|
+
"flex-row items-center",
|
|
13
|
+
"[&>[data-slot=field-label]]:flex-auto",
|
|
14
|
+
"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
15
|
+
],
|
|
16
|
+
responsive: [
|
|
17
|
+
"flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto",
|
|
18
|
+
"@md/field-group:[&>[data-slot=field-label]]:flex-auto",
|
|
19
|
+
"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
20
|
+
]
|
|
21
|
+
} },
|
|
22
|
+
defaultVariants: { orientation: "vertical" }
|
|
23
|
+
});
|
|
24
|
+
function o({ className: t, orientation: n = "vertical", ...r }) {
|
|
25
|
+
return /* @__PURE__ */ i("div", {
|
|
26
|
+
role: "group",
|
|
27
|
+
"data-slot": "field",
|
|
28
|
+
"data-orientation": n,
|
|
29
|
+
className: e(a({ orientation: n }), t),
|
|
30
|
+
...r
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function s({ className: n, ...r }) {
|
|
34
|
+
return /* @__PURE__ */ i(t, {
|
|
35
|
+
"data-slot": "field-label",
|
|
36
|
+
className: e("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4", "has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5 dark:has-data-[state=checked]:bg-primary/10", n),
|
|
37
|
+
...r
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function c({ className: t, ...n }) {
|
|
41
|
+
return /* @__PURE__ */ i("p", {
|
|
42
|
+
"data-slot": "field-description",
|
|
43
|
+
className: e("text-sm leading-normal font-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance", "last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", t),
|
|
44
|
+
...n
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function l({ className: t, children: r, errors: a, ...o }) {
|
|
48
|
+
let s = n(() => {
|
|
49
|
+
if (r) return r;
|
|
50
|
+
if (!a?.length) return null;
|
|
51
|
+
let e = [...new Map(a.map((e) => [e?.message, e])).values()];
|
|
52
|
+
return e?.length == 1 ? e[0]?.message : /* @__PURE__ */ i("ul", {
|
|
53
|
+
className: "ml-4 flex list-disc flex-col gap-1",
|
|
54
|
+
children: e.map((e, t) => e?.message && /* @__PURE__ */ i("li", { children: e.message }, t))
|
|
55
|
+
});
|
|
56
|
+
}, [r, a]);
|
|
57
|
+
return s ? /* @__PURE__ */ i("div", {
|
|
58
|
+
role: "alert",
|
|
59
|
+
"data-slot": "field-error",
|
|
60
|
+
className: e("text-sm font-normal text-destructive", t),
|
|
61
|
+
...o,
|
|
62
|
+
children: s
|
|
63
|
+
}) : null;
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
export { o as Field, c as FieldDescription, l as FieldError, s as FieldLabel };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.js","names":[],"sources":["../../../src/components/ui/field.tsx"],"sourcesContent":["import { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\nimport { Separator } from \"@/components/ui/separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5 dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-sm leading-normal font-normal text-muted-foreground group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"relative mx-auto block w-fit bg-background px-2 text-muted-foreground\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-sm font-normal text-destructive\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n"],"mappings":";;;;;;;AAsDA,IAAM,IAAgB,EACpB,sEACA;CACE,UAAU,EACR,aAAa;EACX,UAAU,CAAC,2CAA2C;EACtD,YAAY;GACV;GACA;GACA;EACF;EACA,YAAY;GACV;GACA;GACA;EACF;CACF,EACF;CACA,iBAAiB,EACf,aAAa,WACf;AACF,CACF;AAEA,SAAS,EAAM,EACb,cACA,iBAAc,YACd,GAAG,KACgE;CACnE,OACE,kBAAC,OAAD;EACE,MAAK;EACL,aAAU;EACV,oBAAkB;EAClB,WAAW,EAAG,EAAc,EAAE,eAAY,CAAC,GAAG,CAAS;EACvD,GAAI;CACL,CAAA;AAEL;AAeA,SAAS,EAAW,EAClB,cACA,GAAG,KACkC;CACrC,OACE,kBAAC,GAAD;EACE,aAAU;EACV,WAAW,EACT,gHACA,qKACA,6HACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAeA,SAAS,EAAiB,EAAE,cAAW,GAAG,KAAoC;CAC5E,OACE,kBAAC,KAAD;EACE,aAAU;EACV,WAAW,EACT,yHACA,gEACA,qEACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAgCA,SAAS,EAAW,EAClB,cACA,aACA,WACA,GAAG,KAGF;CACD,IAAM,IAAU,QAAc;EAC5B,IAAI,GACF,OAAO;EAGT,IAAI,CAAC,GAAQ,QACX,OAAO;EAGT,IAAM,IAAe,CACnB,GAAG,IAAI,IAAI,EAAO,KAAK,MAAU,CAAC,GAAO,SAAS,CAAK,CAAC,CAAC,EAAE,OAAO,CACpE;EAMA,OAJI,GAAc,UAAU,IACnB,EAAa,IAAI,UAIxB,kBAAC,MAAD;GAAI,WAAU;aACX,EAAa,KACX,GAAO,MACN,GAAO,WAAW,kBAAC,MAAD,EAAA,UAAiB,EAAM,QAAY,GAA1B,CAA0B,CACzD;EACE,CAAA;CAER,GAAG,CAAC,GAAU,CAAM,CAAC;CAMrB,OAJK,IAKH,kBAAC,OAAD;EACE,MAAK;EACL,aAAU;EACV,WAAW,EAAG,wCAAwC,CAAS;EAC/D,GAAI;YAEH;CACE,CAAA,IAXE;AAaX"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { cn as e } from "../lib/utils.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/ui/input.tsx
|
|
5
|
+
function n({ className: n, type: r, ...i }) {
|
|
6
|
+
return /* @__PURE__ */ t("input", {
|
|
7
|
+
type: r,
|
|
8
|
+
"data-slot": "input",
|
|
9
|
+
className: e("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", n),
|
|
10
|
+
...i
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { n as Input };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","names":[],"sources":["../../../src/components/ui/input.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/components/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n"],"mappings":";;;;AAIA,SAAS,EAAM,EAAE,cAAW,SAAM,GAAG,KAAwC;CAC3E,OACE,kBAAC,SAAD;EACQ;EACN,aAAU;EACV,WAAW,EACT,8bACA,iFACA,0GACA,CACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
+
import { Label as n } from "radix-ui";
|
|
5
|
+
//#region src/components/ui/label.tsx
|
|
6
|
+
function r({ className: r, ...i }) {
|
|
7
|
+
return /* @__PURE__ */ t(n.Root, {
|
|
8
|
+
"data-slot": "label",
|
|
9
|
+
className: e("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", r),
|
|
10
|
+
...i
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { r as Label };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.js","names":[],"sources":["../../../src/components/ui/label.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Label as LabelPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n"],"mappings":";;;;;AAKA,SAAS,EAAM,EACb,cACA,GAAG,KACgD;CACnD,OACE,kBAAC,EAAe,MAAhB;EACE,aAAU;EACV,WAAW,EACT,uNACA,CACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { cn as e } from "../lib/utils.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
+
import "lucide-react";
|
|
5
|
+
import * as n from "@radix-ui/react-menubar";
|
|
6
|
+
//#region src/components/ui/menubar.tsx
|
|
7
|
+
function r({ className: r, ...i }) {
|
|
8
|
+
return /* @__PURE__ */ t(n.Root, {
|
|
9
|
+
"data-slot": "menubar",
|
|
10
|
+
className: e("bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs", r),
|
|
11
|
+
...i
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function i({ ...e }) {
|
|
15
|
+
return /* @__PURE__ */ t(n.Menu, {
|
|
16
|
+
"data-slot": "menubar-menu",
|
|
17
|
+
...e
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function a({ ...e }) {
|
|
21
|
+
return /* @__PURE__ */ t(n.Portal, {
|
|
22
|
+
"data-slot": "menubar-portal",
|
|
23
|
+
...e
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function o({ className: r, ...i }) {
|
|
27
|
+
return /* @__PURE__ */ t(n.Trigger, {
|
|
28
|
+
"data-slot": "menubar-trigger",
|
|
29
|
+
className: e("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none", r),
|
|
30
|
+
...i
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function s({ className: r, align: i = "start", alignOffset: o = -4, sideOffset: s = 8, ...c }) {
|
|
34
|
+
return /* @__PURE__ */ t(a, { children: /* @__PURE__ */ t(n.Content, {
|
|
35
|
+
"data-slot": "menubar-content",
|
|
36
|
+
align: i,
|
|
37
|
+
alignOffset: o,
|
|
38
|
+
sideOffset: s,
|
|
39
|
+
className: e("bg-popover text-popover-foreground data-[state=open]:animate-in 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md", r),
|
|
40
|
+
...c
|
|
41
|
+
}) });
|
|
42
|
+
}
|
|
43
|
+
function c({ className: r, inset: i, variant: a = "default", ...o }) {
|
|
44
|
+
return /* @__PURE__ */ t(n.Item, {
|
|
45
|
+
"data-slot": "menubar-item",
|
|
46
|
+
"data-inset": i,
|
|
47
|
+
"data-variant": a,
|
|
48
|
+
className: e("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", r),
|
|
49
|
+
...o
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function l({ className: r, ...i }) {
|
|
53
|
+
return /* @__PURE__ */ t(n.Separator, {
|
|
54
|
+
"data-slot": "menubar-separator",
|
|
55
|
+
className: e("bg-border -mx-1 my-1 h-px", r),
|
|
56
|
+
...i
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { r as Menubar, s as MenubarContent, c as MenubarItem, i as MenubarMenu, l as MenubarSeparator, o as MenubarTrigger };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=menubar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.js","names":[],"sources":["../../../src/components/ui/menubar.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/components/lib/utils\"\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n )\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n"],"mappings":";;;;;;AAMA,SAAS,EAAQ,EACf,cACA,GAAG,KACkD;CACrD,OACE,kBAAC,EAAiB,MAAlB;EACE,aAAU;EACV,WAAW,EACT,6EACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAY,EACnB,GAAG,KACkD;CACrD,OAAO,kBAAC,EAAiB,MAAlB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;AAQA,SAAS,EAAc,EACrB,GAAG,KACoD;CACvD,OAAO,kBAAC,EAAiB,QAAlB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAUA,SAAS,EAAe,EACtB,cACA,GAAG,KACqD;CACxD,OACE,kBAAC,EAAiB,SAAlB;EACE,aAAU;EACV,WAAW,EACT,2MACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAe,EACtB,cACA,WAAQ,SACR,iBAAc,IACd,gBAAa,GACb,GAAG,KACqD;CACxD,OACE,kBAAC,GAAD,EAAA,UACE,kBAAC,EAAiB,SAAlB;EACE,aAAU;EACH;EACM;EACD;EACZ,WAAW,EACT,4cACA,CACF;EACA,GAAI;CACL,CAAA,EACY,CAAA;AAEnB;AAEA,SAAS,EAAY,EACnB,cACA,UACA,aAAU,WACV,GAAG,KAIF;CACD,OACE,kBAAC,EAAiB,MAAlB;EACE,aAAU;EACV,cAAY;EACZ,gBAAc;EACd,WAAW,EACT,+mBACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAwEA,SAAS,EAAiB,EACxB,cACA,GAAG,KACuD;CAC1D,OACE,kBAAC,EAAiB,WAAlB;EACE,aAAU;EACV,WAAW,EAAG,6BAA6B,CAAS;EACpD,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { cn as e } from "../lib/utils.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
4
|
+
import { CheckIcon as r, ChevronDownIcon as i, ChevronUpIcon as a } from "lucide-react";
|
|
5
|
+
import * as o from "@radix-ui/react-select";
|
|
6
|
+
//#region src/components/ui/select.tsx
|
|
7
|
+
function s({ ...e }) {
|
|
8
|
+
return /* @__PURE__ */ t(o.Root, {
|
|
9
|
+
"data-slot": "select",
|
|
10
|
+
...e
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function c({ ...e }) {
|
|
14
|
+
return /* @__PURE__ */ t(o.Group, {
|
|
15
|
+
"data-slot": "select-group",
|
|
16
|
+
...e
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function l({ ...e }) {
|
|
20
|
+
return /* @__PURE__ */ t(o.Value, {
|
|
21
|
+
"data-slot": "select-value",
|
|
22
|
+
...e
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function u({ className: r, size: a = "default", children: s, ...c }) {
|
|
26
|
+
return /* @__PURE__ */ n(o.Trigger, {
|
|
27
|
+
"data-slot": "select-trigger",
|
|
28
|
+
"data-size": a,
|
|
29
|
+
className: e("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", r),
|
|
30
|
+
...c,
|
|
31
|
+
children: [s, /* @__PURE__ */ t(o.Icon, {
|
|
32
|
+
asChild: !0,
|
|
33
|
+
children: /* @__PURE__ */ t(i, { className: "size-4 opacity-50" })
|
|
34
|
+
})]
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function d({ className: r, children: i, position: a = "popper", align: s = "center", ...c }) {
|
|
38
|
+
return /* @__PURE__ */ t(o.Portal, { children: /* @__PURE__ */ n(o.Content, {
|
|
39
|
+
"data-slot": "select-content",
|
|
40
|
+
className: e("bg-popover text-popover-foreground 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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md", a === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", r),
|
|
41
|
+
position: a,
|
|
42
|
+
align: s,
|
|
43
|
+
...c,
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ t(p, {}),
|
|
46
|
+
/* @__PURE__ */ t(o.Viewport, {
|
|
47
|
+
className: e("p-1", a === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),
|
|
48
|
+
children: i
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ t(m, {})
|
|
51
|
+
]
|
|
52
|
+
}) });
|
|
53
|
+
}
|
|
54
|
+
function f({ className: i, children: a, ...s }) {
|
|
55
|
+
return /* @__PURE__ */ n(o.Item, {
|
|
56
|
+
"data-slot": "select-item",
|
|
57
|
+
className: e("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", i),
|
|
58
|
+
...s,
|
|
59
|
+
children: [/* @__PURE__ */ t("span", {
|
|
60
|
+
className: "absolute right-2 flex size-3.5 items-center justify-center",
|
|
61
|
+
children: /* @__PURE__ */ t(o.ItemIndicator, { children: /* @__PURE__ */ t(r, { className: "size-4" }) })
|
|
62
|
+
}), /* @__PURE__ */ t(o.ItemText, { children: a })]
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function p({ className: n, ...r }) {
|
|
66
|
+
return /* @__PURE__ */ t(o.ScrollUpButton, {
|
|
67
|
+
"data-slot": "select-scroll-up-button",
|
|
68
|
+
className: e("flex cursor-default items-center justify-center py-1", n),
|
|
69
|
+
...r,
|
|
70
|
+
children: /* @__PURE__ */ t(a, { className: "size-4" })
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function m({ className: n, ...r }) {
|
|
74
|
+
return /* @__PURE__ */ t(o.ScrollDownButton, {
|
|
75
|
+
"data-slot": "select-scroll-down-button",
|
|
76
|
+
className: e("flex cursor-default items-center justify-center py-1", n),
|
|
77
|
+
...r,
|
|
78
|
+
children: /* @__PURE__ */ t(i, { className: "size-4" })
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//#endregion
|
|
82
|
+
export { s as Select, d as SelectContent, c as SelectGroup, f as SelectItem, u as SelectTrigger, l as SelectValue };
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","names":[],"sources":["../../../src/components/ui/select.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/components/lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground 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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"mappings":";;;;;;AAMA,SAAS,EAAO,EACd,GAAG,KACiD;CACpD,OAAO,kBAAC,EAAgB,MAAjB;EAAsB,aAAU;EAAS,GAAI;CAAQ,CAAA;AAC9D;AAEA,SAAS,EAAY,EACnB,GAAG,KACkD;CACrD,OAAO,kBAAC,EAAgB,OAAjB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;AAEA,SAAS,EAAY,EACnB,GAAG,KACkD;CACrD,OAAO,kBAAC,EAAgB,OAAjB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;AAEA,SAAS,EAAc,EACrB,cACA,UAAO,WACP,aACA,GAAG,KAGF;CACD,OACE,kBAAC,EAAgB,SAAjB;EACE,aAAU;EACV,aAAW;EACX,WAAW,EACT,gzBACA,CACF;EACA,GAAI;YAPN,CASG,GACD,kBAAC,EAAgB,MAAjB;GAAsB,SAAA;aACpB,kBAAC,GAAD,EAAiB,WAAU,oBAAqB,CAAA;EAC5B,CAAA,CACC;;AAE7B;AAEA,SAAS,EAAc,EACrB,cACA,aACA,cAAW,UACX,WAAQ,UACR,GAAG,KACoD;CACvD,OACE,kBAAC,EAAgB,QAAjB,EAAA,UACE,kBAAC,EAAgB,SAAjB;EACE,aAAU;EACV,WAAW,EACT,ijBACA,MAAa,YACX,mIACF,CACF;EACU;EACH;EACP,GAAI;YAVN;GAYE,kBAAC,GAAD,CAAuB,CAAA;GACvB,kBAAC,EAAgB,UAAjB;IACE,WAAW,EACT,OACA,MAAa,YACX,qGACJ;IAEC;GACuB,CAAA;GAC1B,kBAAC,GAAD,CAAyB,CAAA;EACF;IACH,CAAA;AAE5B;AAeA,SAAS,EAAW,EAClB,cACA,aACA,GAAG,KACiD;CACpD,OACE,kBAAC,EAAgB,MAAjB;EACE,aAAU;EACV,WAAW,EACT,6aACA,CACF;EACA,GAAI;YANN,CAQE,kBAAC,QAAD;GAAM,WAAU;aACd,kBAAC,EAAgB,eAAjB,EAAA,UACE,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA,EACF,CAAA;EAC3B,CAAA,GACN,kBAAC,EAAgB,UAAjB,EAA2B,YAAmC,CAAA,CAC1C;;AAE1B;AAeA,SAAS,EAAqB,EAC5B,cACA,GAAG,KAC2D;CAC9D,OACE,kBAAC,EAAgB,gBAAjB;EACE,aAAU;EACV,WAAW,EACT,wDACA,CACF;EACA,GAAI;YAEJ,kBAAC,GAAD,EAAe,WAAU,SAAU,CAAA;CACL,CAAA;AAEpC;AAEA,SAAS,EAAuB,EAC9B,cACA,GAAG,KAC6D;CAChE,OACE,kBAAC,EAAgB,kBAAjB;EACE,aAAU;EACV,WAAW,EACT,wDACA,CACF;EACA,GAAI;YAEJ,kBAAC,GAAD,EAAiB,WAAU,SAAU,CAAA;CACL,CAAA;AAEtC"}
|