@bigbinary/neeto-atoms 1.0.8 → 1.0.9
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/ColorPicker-D-7QGnf9.js +277 -0
- package/dist/ColorPicker-D-7QGnf9.js.map +1 -0
- package/dist/{DataTable-BKe9K5XP.js → DataTable-DWR9gX9d.js} +11 -3
- package/dist/{DataTable-BKe9K5XP.js.map → DataTable-DWR9gX9d.js.map} +1 -1
- package/dist/TranslationProvider-Ba9rn47H.js +96 -0
- package/dist/TranslationProvider-Ba9rn47H.js.map +1 -0
- package/dist/cjs/{ColorPicker-DN8aynGh.js → ColorPicker-DEELmqH8.js} +7 -10
- package/dist/cjs/ColorPicker-DEELmqH8.js.map +1 -0
- package/dist/cjs/{DataTable-BQt_mXDX.js → DataTable-CWs96k8n.js} +11 -3
- package/dist/cjs/{DataTable-BQt_mXDX.js.map → DataTable-CWs96k8n.js.map} +1 -1
- package/dist/cjs/TranslationProvider-DBZHXmzX.js +103 -0
- package/dist/cjs/TranslationProvider-DBZHXmzX.js.map +1 -0
- package/dist/cjs/components/Alert.js +7 -3
- package/dist/cjs/components/Alert.js.map +1 -1
- package/dist/cjs/components/Avatar.js +75 -0
- package/dist/cjs/components/Avatar.js.map +1 -0
- package/dist/cjs/components/Badge.js +3 -1
- package/dist/cjs/components/Badge.js.map +1 -1
- package/dist/cjs/components/Button.js +1 -0
- package/dist/cjs/components/Button.js.map +1 -1
- package/dist/cjs/components/Callout.js +73 -0
- package/dist/cjs/components/Callout.js.map +1 -0
- package/dist/cjs/components/ColorPicker.js +3 -1
- package/dist/cjs/components/ColorPicker.js.map +1 -1
- package/dist/cjs/components/DataTable.js +2 -1
- package/dist/cjs/components/DataTable.js.map +1 -1
- package/dist/cjs/components/Dialog.js +3 -2
- package/dist/cjs/components/Dialog.js.map +1 -1
- package/dist/cjs/components/DropdownMenu.js +3 -1
- package/dist/cjs/components/DropdownMenu.js.map +1 -1
- package/dist/cjs/components/Empty.js +59 -0
- package/dist/cjs/components/Empty.js.map +1 -0
- package/dist/cjs/components/Kbd.js +63 -0
- package/dist/cjs/components/Kbd.js.map +1 -0
- package/dist/cjs/components/Label.js +91 -0
- package/dist/cjs/components/Label.js.map +1 -0
- package/dist/cjs/components/MultiSelectDropdown.js +1 -0
- package/dist/cjs/components/MultiSelectDropdown.js.map +1 -1
- package/dist/cjs/components/Progress.js +22 -0
- package/dist/cjs/components/Progress.js.map +1 -0
- package/dist/cjs/components/SelectTriggerContent.js +11 -7
- package/dist/cjs/components/SelectTriggerContent.js.map +1 -1
- package/dist/cjs/components/Sheet.js +3 -2
- package/dist/cjs/components/Sheet.js.map +1 -1
- package/dist/cjs/components/Slider.js +45 -0
- package/dist/cjs/components/Slider.js.map +1 -0
- package/dist/cjs/components/Spinner.js +27 -0
- package/dist/cjs/components/Spinner.js.map +1 -0
- package/dist/cjs/components/Stepper.js +39 -0
- package/dist/cjs/components/Stepper.js.map +1 -0
- package/dist/cjs/components/TranslationProvider.js +12 -0
- package/dist/cjs/components/TranslationProvider.js.map +1 -0
- package/dist/cjs/{dialog-CF2GBHOG.js → dialog-Bvyrshz3.js} +4 -2
- package/dist/cjs/dialog-Bvyrshz3.js.map +1 -0
- package/dist/cjs/index.js +44 -10
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/primitives/Breadcrumb.js +5 -2
- package/dist/cjs/primitives/Breadcrumb.js.map +1 -1
- package/dist/cjs/primitives/Carousel.js +5 -2
- package/dist/cjs/primitives/Carousel.js.map +1 -1
- package/dist/cjs/primitives/Command.js +6 -2
- package/dist/cjs/primitives/Command.js.map +1 -1
- package/dist/cjs/primitives/Dialog.js +2 -1
- package/dist/cjs/primitives/Dialog.js.map +1 -1
- package/dist/cjs/primitives/Pagination.js +11 -5
- package/dist/cjs/primitives/Pagination.js.map +1 -1
- package/dist/cjs/primitives/Sheet.js +2 -1
- package/dist/cjs/primitives/Sheet.js.map +1 -1
- package/dist/cjs/primitives/Sidebar.js +8 -4
- package/dist/cjs/primitives/Sidebar.js.map +1 -1
- package/dist/cjs/primitives/Sonner.js +7 -42
- package/dist/cjs/primitives/Sonner.js.map +1 -1
- package/dist/cjs/primitives/Spinner.js +3 -1
- package/dist/cjs/primitives/Spinner.js.map +1 -1
- package/dist/cjs/primitives/index.js +4 -2
- package/dist/cjs/primitives/index.js.map +1 -1
- package/dist/cjs/{sheet-CkCrHmVA.js → sheet-BZHMKVH1.js} +4 -2
- package/dist/cjs/sheet-BZHMKVH1.js.map +1 -0
- package/dist/cjs/triangle-alert-ZUMRpmzW.js +43 -0
- package/dist/cjs/triangle-alert-ZUMRpmzW.js.map +1 -0
- package/dist/components/Alert.js +7 -3
- package/dist/components/Alert.js.map +1 -1
- package/dist/components/Avatar.d.ts +31 -0
- package/dist/components/Avatar.js +73 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.js +3 -1
- package/dist/components/Badge.js.map +1 -1
- package/dist/components/Button.js +1 -0
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Callout.d.ts +17 -0
- package/dist/components/Callout.js +71 -0
- package/dist/components/Callout.js.map +1 -0
- package/dist/components/ColorPicker.js +3 -1
- package/dist/components/ColorPicker.js.map +1 -1
- package/dist/components/DataTable/components/EmptyState.d.ts +1 -1
- package/dist/components/DataTable.js +2 -1
- package/dist/components/DataTable.js.map +1 -1
- package/dist/components/Dialog.js +3 -2
- package/dist/components/Dialog.js.map +1 -1
- package/dist/components/DropdownMenu.js +3 -1
- package/dist/components/DropdownMenu.js.map +1 -1
- package/dist/components/Empty.d.ts +27 -0
- package/dist/components/Empty.js +57 -0
- package/dist/components/Empty.js.map +1 -0
- package/dist/components/Kbd.d.ts +15 -0
- package/dist/components/Kbd.js +61 -0
- package/dist/components/Kbd.js.map +1 -0
- package/dist/components/Label.d.ts +40 -0
- package/dist/components/Label.js +89 -0
- package/dist/components/Label.js.map +1 -0
- package/dist/components/MultiSelectDropdown.js +1 -0
- package/dist/components/MultiSelectDropdown.js.map +1 -1
- package/dist/components/Progress.d.ts +12 -0
- package/dist/components/Progress.js +20 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/SelectTriggerContent.js +11 -7
- package/dist/components/SelectTriggerContent.js.map +1 -1
- package/dist/components/Sheet.js +3 -2
- package/dist/components/Sheet.js.map +1 -1
- package/dist/components/Slider.d.ts +19 -0
- package/dist/components/Slider.js +43 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/Spinner.d.ts +10 -0
- package/dist/components/Spinner.js +25 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Stepper.d.ts +18 -0
- package/dist/components/Stepper.js +33 -0
- package/dist/components/Stepper.js.map +1 -0
- package/dist/components/TranslationProvider/TranslationProvider.d.ts +6 -0
- package/dist/components/TranslationProvider/i18n.d.ts +1 -0
- package/dist/components/TranslationProvider/index.d.ts +2 -0
- package/dist/components/TranslationProvider/types.d.ts +7 -0
- package/dist/components/TranslationProvider.js +6 -0
- package/dist/components/TranslationProvider.js.map +1 -0
- package/dist/components/Typography.d.ts +1 -1
- package/dist/{dialog-Civ9r6wD.js → dialog-CrB6N_2a.js} +4 -2
- package/dist/dialog-CrB6N_2a.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +33 -10
- package/dist/index.js.map +1 -1
- package/dist/primitives/Breadcrumb.js +5 -2
- package/dist/primitives/Breadcrumb.js.map +1 -1
- package/dist/primitives/Carousel.js +5 -2
- package/dist/primitives/Carousel.js.map +1 -1
- package/dist/primitives/Command.js +6 -2
- package/dist/primitives/Command.js.map +1 -1
- package/dist/primitives/Dialog.js +2 -1
- package/dist/primitives/Dialog.js.map +1 -1
- package/dist/primitives/Pagination.js +11 -5
- package/dist/primitives/Pagination.js.map +1 -1
- package/dist/primitives/Sheet.js +2 -1
- package/dist/primitives/Sheet.js.map +1 -1
- package/dist/primitives/Sidebar.js +8 -4
- package/dist/primitives/Sidebar.js.map +1 -1
- package/dist/primitives/Sonner.js +5 -40
- package/dist/primitives/Sonner.js.map +1 -1
- package/dist/primitives/Spinner.js +3 -1
- package/dist/primitives/Spinner.js.map +1 -1
- package/dist/primitives/index.js +4 -2
- package/dist/primitives/index.js.map +1 -1
- package/dist/shadcn/components/command.d.ts +1 -1
- package/dist/shadcn/components/pagination.d.ts +2 -2
- package/dist/shadcn/components/typography.d.ts +2 -2
- package/dist/{sheet-COcn22fC.js → sheet-C763FqIh.js} +4 -2
- package/dist/sheet-C763FqIh.js.map +1 -0
- package/dist/translations/index.d.ts +66 -0
- package/dist/triangle-alert-PXnNWQy_.js +40 -0
- package/dist/triangle-alert-PXnNWQy_.js.map +1 -0
- package/package.json +38 -34
- package/dist/ColorPicker-BPvxDGDM.js +0 -276
- package/dist/ColorPicker-BPvxDGDM.js.map +0 -1
- package/dist/cjs/ColorPicker-DN8aynGh.js.map +0 -1
- package/dist/cjs/dialog-CF2GBHOG.js.map +0 -1
- package/dist/cjs/sheet-CkCrHmVA.js.map +0 -1
- package/dist/dialog-Civ9r6wD.js.map +0 -1
- package/dist/sheet-COcn22fC.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.js","sources":["../../src/components/DropdownMenu/constants.ts","../../src/components/DropdownMenu/SplitTrigger.tsx","../../src/components/DropdownMenu/TriggerButton.tsx","../../src/components/DropdownMenu/types.ts","../../src/components/DropdownMenu/DropdownBase.tsx","../../src/components/DropdownMenu/Divider.tsx","../../src/components/DropdownMenu/Label.tsx","../../src/components/DropdownMenu/Menu.tsx","../../src/components/DropdownMenu/MenuItemButton.tsx","../../src/components/DropdownMenu/MenuItem.tsx","../../src/components/DropdownMenu/SubMenu.tsx","../../src/components/DropdownMenu/index.tsx"],"sourcesContent":["import type { ButtonSize, ButtonStyle } from \"./types\";\n\nexport const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"bottom\",\n};\n\nexport const ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"end\",\n};\n\nexport const BUTTON_STYLE_MAP: Record<\n ButtonStyle,\n \"default\" | \"secondary\" | \"destructive\" | \"outline\" | \"ghost\" | \"link\"\n> = {\n primary: \"default\",\n secondary: \"secondary\",\n tertiary: \"outline\",\n text: \"ghost\",\n danger: \"destructive\",\n \"danger-text\": \"ghost\",\n link: \"link\",\n};\n\nexport const BUTTON_SIZE_MAP: Record<ButtonSize, \"sm\" | \"default\" | \"lg\"> = {\n small: \"sm\",\n medium: \"default\",\n large: \"lg\",\n};\n\nexport const MENU_ITEM_STYLE_MAP: Record<\n \"default\" | \"danger\",\n \"default\" | \"destructive\"\n> = {\n default: \"default\",\n danger: \"destructive\",\n};\n\nexport const CHEVRON_SIZE_MAP: Record<ButtonSize, string> = {\n small: \"size-3.5\",\n medium: \"size-4\",\n large: \"size-4\",\n};\n","import React, { forwardRef } from \"react\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon } from \"src/lib/renderIcon\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport { ButtonGroup } from \"src/primitives/ButtonGroup\";\nimport { DropdownMenuTrigger } from \"src/primitives/DropdownMenu\";\n\nimport {\n BUTTON_SIZE_MAP,\n BUTTON_STYLE_MAP,\n CHEVRON_SIZE_MAP,\n} from \"./constants\";\nimport type { BaseTriggerProps } from \"./types\";\n\ninterface SplitTriggerOwnProps extends BaseTriggerProps {\n /** Ref forwarded to the action button (left side). */\n actionButtonRef?: React.Ref<HTMLButtonElement>;\n}\n\n/**\n * Radix injects extra props (aria-expanded, data-state, …) via Slot on the\n * DropdownMenuTrigger child. We capture them with a rest-spread.\n */\ntype SplitTriggerProps = SplitTriggerOwnProps &\n Omit<React.ComponentProps<\"div\">, keyof SplitTriggerOwnProps>;\n\nconst SplitTrigger = forwardRef<HTMLDivElement, SplitTriggerProps>(\n (\n {\n label,\n icon,\n buttonStyle,\n buttonSize,\n buttonProps,\n disabled,\n isOpen,\n onClick,\n actionButtonRef,\n className,\n ...otherProps\n },\n ref\n ) => {\n const variant = BUTTON_STYLE_MAP[buttonStyle];\n const size = BUTTON_SIZE_MAP[buttonSize];\n\n return (\n <ButtonGroup\n ref={ref}\n className={cn(\"neeto-ui-action-dropdown\", className)}\n {...otherProps}\n >\n {/* Action button — fires the primary onClick */}\n <PrimitiveButton\n ref={actionButtonRef}\n type=\"button\"\n variant={variant}\n size={size}\n disabled={disabled}\n onClick={onClick}\n data-testid=\"action-dropdown-btn\"\n {...buttonProps}\n >\n {icon && renderIcon(icon, \"size-4\")}\n {label && <span>{label}</span>}\n </PrimitiveButton>\n\n {/* Chevron trigger — opens the dropdown menu */}\n <DropdownMenuTrigger asChild disabled={disabled}>\n <PrimitiveButton\n type=\"button\"\n variant={variant}\n size={size}\n disabled={disabled}\n aria-label=\"Open dropdown menu\"\n className=\"px-1.5\"\n >\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n CHEVRON_SIZE_MAP[buttonSize],\n \"shrink-0 transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n </PrimitiveButton>\n </DropdownMenuTrigger>\n </ButtonGroup>\n );\n }\n);\nSplitTrigger.displayName = \"Dropdown.SplitTrigger\";\n\nexport { SplitTrigger };\n","import React, { forwardRef } from \"react\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon } from \"src/lib/renderIcon\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\n\nimport { BUTTON_SIZE_MAP, BUTTON_STYLE_MAP, CHEVRON_SIZE_MAP } from \"./constants\";\nimport type { BaseTriggerProps } from \"./types\";\n\n/**\n * Extra props that Radix's Slot injects when the parent Trigger uses\n * `asChild` (aria-expanded, aria-haspopup, data-state, id, …).\n * We capture them with a rest-spread so they reach the DOM button.\n */\ntype TriggerButtonProps = BaseTriggerProps &\n Omit<React.ComponentProps<\"button\">, keyof BaseTriggerProps>;\n\nconst TriggerButton = forwardRef<HTMLButtonElement, TriggerButtonProps>(\n (\n {\n label,\n icon,\n buttonStyle,\n buttonSize,\n buttonProps,\n disabled,\n isOpen,\n onClick,\n className,\n ...otherProps\n },\n ref\n ) => (\n <PrimitiveButton\n ref={ref}\n type=\"button\"\n variant={BUTTON_STYLE_MAP[buttonStyle]}\n size={BUTTON_SIZE_MAP[buttonSize]}\n disabled={disabled}\n className={cn(\n buttonStyle === \"danger-text\" &&\n \"text-destructive hover:text-destructive\",\n \"gap-1.5\",\n className\n )}\n onClick={onClick}\n {...otherProps}\n {...buttonProps}\n >\n <span className=\"inline-flex items-center gap-1.5\">\n {icon && renderIcon(icon, \"size-4\")}\n {label && <span>{label}</span>}\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n CHEVRON_SIZE_MAP[buttonSize],\n \"shrink-0 transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n </span>\n </PrimitiveButton>\n )\n);\nTriggerButton.displayName = \"Dropdown.TriggerButton\";\n\nexport { TriggerButton };\n","import { createContext, type ReactNode, type Ref } from \"react\";\n\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport {\n DropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n} from \"src/primitives/DropdownMenu\";\nimport type { IconProp } from \"src/lib/renderIcon\";\n\nexport type DropdownPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\nexport type ButtonStyle =\n | \"primary\"\n | \"secondary\"\n | \"tertiary\"\n | \"text\"\n | \"danger\"\n | \"danger-text\"\n | \"link\";\n\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport type MenuItemButtonStyle = \"default\" | \"danger\";\n\nexport interface BaseTriggerProps {\n label?: string;\n icon?: IconProp;\n buttonStyle: ButtonStyle;\n buttonSize: ButtonSize;\n buttonProps?: Omit<\n React.ComponentProps<typeof PrimitiveButton>,\n \"variant\" | \"size\" | \"disabled\"\n >;\n disabled: boolean;\n isOpen: boolean;\n onClick?: (e: React.MouseEvent) => void;\n}\n\nexport interface DropdownProps {\n /** Text label displayed inside the trigger button. */\n label?: string;\n /** Icon rendered inside the trigger button. */\n icon?: IconProp;\n /** Visual style of the trigger button(s). */\n buttonStyle?: ButtonStyle;\n /** Size of the trigger button(s). */\n buttonSize?: ButtonSize;\n /** Extra props forwarded to the trigger button. In split-button mode, forwarded to the action button. */\n buttonProps?: Omit<\n React.ComponentProps<typeof PrimitiveButton>,\n \"variant\" | \"size\" | \"disabled\"\n >;\n /** Custom trigger element. Overrides the default button trigger. */\n customTarget?: ReactNode | ((props: { isOpen: boolean }) => ReactNode);\n /** Whether the dropdown is disabled. */\n disabled?: boolean;\n /** Dropdown menu content. */\n children?: ReactNode;\n /** Position of the dropdown menu relative to the trigger. */\n position?: DropdownPosition;\n /** Whether pressing Escape closes the dropdown. */\n closeOnEsc?: boolean;\n /** Whether selecting an item closes the dropdown. */\n closeOnSelect?: boolean;\n /** Whether clicking outside closes the dropdown. */\n closeOnOutsideClick?: boolean;\n /** Controlled open state. */\n isOpen?: boolean;\n /** Callback fired when the dropdown closes. */\n onClose?: () => void;\n /**\n * Callback fired when the trigger button is clicked.\n * When provided (without `customTarget`), renders a **split-button**:\n * a primary action button (fires `onClick`) paired with a separate\n * chevron that opens the dropdown menu.\n */\n onClick?: (e: React.MouseEvent) => void;\n /** Additional CSS class names for the trigger wrapper. */\n className?: string;\n /** Ref forwarded to the trigger button. In split-button mode, forwarded to the action button. */\n triggerRef?: Ref<HTMLButtonElement>;\n /** Extra props forwarded to the DropdownMenuContent. */\n dropdownProps?: Omit<\n React.ComponentProps<typeof DropdownMenuContent>,\n \"side\" | \"align\"\n >;\n}\n\nexport interface MenuItemButtonProps extends Omit<\n React.ComponentProps<typeof PrimitiveDropdownMenuItem>,\n \"prefix\" | \"style\" | \"onClick\"\n> {\n /** Highlight as active. */\n isActive?: boolean;\n /** Disable the menu item button. */\n isDisabled?: boolean;\n /** Visual style of the button. */\n style?: MenuItemButtonStyle;\n /** Content rendered before the label. */\n prefix?: ReactNode;\n /** Content rendered after the label. */\n suffix?: ReactNode;\n /** Internal route (renders as anchor). */\n to?: string;\n /** External link (renders as anchor). */\n href?: string;\n /** Callback fired when the item is selected. */\n onClick?: (e: Event) => void;\n /** Children / label text. */\n children?: ReactNode;\n /** Additional CSS class names. */\n className?: string;\n}\n\nexport const DropdownContext = createContext({ closeOnSelect: true });\n","import { useCallback, useState } from \"react\";\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"src/primitives/DropdownMenu\";\n\nimport { ALIGN_MAP, SIDE_MAP } from \"./constants\";\nimport { SplitTrigger } from \"./SplitTrigger\";\nimport { TriggerButton } from \"./TriggerButton\";\nimport { DropdownContext, type DropdownProps } from \"./types\";\n\nconst DropdownBase = ({\n label,\n icon,\n buttonStyle = \"primary\",\n buttonSize = \"medium\",\n buttonProps,\n customTarget,\n disabled = false,\n children,\n position = \"bottom-end\",\n closeOnEsc = true,\n closeOnSelect = true,\n closeOnOutsideClick = true,\n isOpen: isOpenProp,\n onClose,\n onClick,\n className,\n triggerRef,\n dropdownProps,\n}: DropdownProps) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = isOpenProp !== undefined;\n const open = isControlled ? isOpenProp : internalOpen;\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n if (!next) onClose?.();\n },\n [isControlled, onClose]\n );\n\n const side = SIDE_MAP[position] ?? \"bottom\";\n const align = ALIGN_MAP[position] ?? \"end\";\n\n // Split-button mode: onClick provided without a customTarget.\n const isSplit = !!onClick && !customTarget;\n\n const sharedTriggerProps = {\n label,\n icon,\n buttonStyle,\n buttonSize,\n buttonProps,\n disabled,\n isOpen: open,\n onClick,\n };\n\n const triggerNode = isSplit ? (\n <SplitTrigger\n {...sharedTriggerProps}\n actionButtonRef={triggerRef}\n className={className}\n />\n ) : (\n <DropdownMenuTrigger asChild disabled={disabled} className={className}>\n {customTarget ? (\n typeof customTarget === \"function\" ? (\n customTarget({ isOpen: open })\n ) : (\n customTarget\n )\n ) : (\n <TriggerButton ref={triggerRef} {...sharedTriggerProps} />\n )}\n </DropdownMenuTrigger>\n );\n\n return (\n <DropdownContext.Provider value={{ closeOnSelect }}>\n <DropdownMenu\n open={open}\n onOpenChange={handleOpenChange}\n modal={closeOnOutsideClick}\n >\n {triggerNode}\n <DropdownMenuContent\n side={side}\n align={align}\n onEscapeKeyDown={closeOnEsc ? undefined : e => e.preventDefault()}\n onInteractOutside={\n closeOnOutsideClick ? undefined : e => e.preventDefault()\n }\n {...dropdownProps}\n >\n {children}\n </DropdownMenuContent>\n </DropdownMenu>\n </DropdownContext.Provider>\n );\n};\n\nexport { DropdownBase };\n","import React, { forwardRef } from \"react\";\n\nimport { DropdownMenuSeparator } from \"src/primitives/DropdownMenu\";\n\nconst Divider = forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof DropdownMenuSeparator>\n>((props, ref) => <DropdownMenuSeparator ref={ref} {...props} />);\nDivider.displayName = \"Dropdown.Divider\";\n\nexport { Divider };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { DropdownMenuLabel } from \"src/primitives/DropdownMenu\";\n\ninterface MenuLabelProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Label = forwardRef<HTMLDivElement, MenuLabelProps>(\n ({ children, className, ...otherProps }, ref) => (\n <DropdownMenuLabel ref={ref} className={className} {...otherProps}>\n {children}\n </DropdownMenuLabel>\n )\n);\nLabel.displayName = \"Dropdown.Label\";\n\nexport { Label };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { DropdownMenuGroup } from \"src/primitives/DropdownMenu\";\n\ninterface MenuProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Menu = forwardRef<HTMLDivElement, MenuProps>(\n ({ children, className, ...otherProps }, ref) => (\n <DropdownMenuGroup\n ref={ref}\n className={cn(\"flex flex-col\", className)}\n {...otherProps}\n >\n {children}\n </DropdownMenuGroup>\n )\n);\nMenu.displayName = \"Dropdown.Menu\";\n\nexport { Menu };\n","import React, { forwardRef, useCallback, useMemo, useContext } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { DropdownMenuItem as PrimitiveDropdownMenuItem } from \"src/primitives/DropdownMenu\";\n\nimport { MENU_ITEM_STYLE_MAP } from \"./constants\";\nimport { DropdownContext, type MenuItemButtonProps } from \"./types\";\n\nconst MenuItemButton = forwardRef<HTMLDivElement, MenuItemButtonProps>(\n (\n {\n children,\n isActive = false,\n isDisabled = false,\n style = \"default\",\n prefix,\n suffix,\n to,\n href,\n className,\n onClick,\n variant: _variant,\n disabled: _disabled,\n asChild: _asChild,\n onSelect: _onSelect,\n ...otherProps\n },\n ref\n ) => {\n const { closeOnSelect } = useContext(DropdownContext);\n const variant = MENU_ITEM_STYLE_MAP[style];\n const linkHref = to ?? href;\n\n const handleSelect = useCallback(\n (e: Event) => {\n if (!closeOnSelect) e.preventDefault();\n onClick?.(e);\n },\n [closeOnSelect, onClick]\n );\n\n const itemContent = useMemo(\n () => (\n <>\n {prefix && (\n <span data-slot=\"menu-item-prefix\" className=\"shrink-0\">\n {prefix}\n </span>\n )}\n <span className=\"flex-1 truncate\">{children}</span>\n {suffix && (\n <span\n data-slot=\"menu-item-suffix\"\n className=\"ms-auto shrink-0 text-muted-foreground\"\n >\n {suffix}\n </span>\n )}\n </>\n ),\n [prefix, children, suffix]\n );\n\n return (\n <PrimitiveDropdownMenuItem\n ref={ref}\n variant={variant}\n disabled={isDisabled}\n data-active={isActive || undefined}\n className={cn(isActive && \"bg-accent text-accent-foreground\", className)}\n asChild={!!linkHref}\n onSelect={handleSelect}\n {...otherProps}\n >\n {linkHref ? <a href={linkHref}>{itemContent}</a> : itemContent}\n </PrimitiveDropdownMenuItem>\n );\n }\n);\nMenuItemButton.displayName = \"Dropdown.MenuItem.Button\";\n\nexport { MenuItemButton };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { MenuItemButton } from \"./MenuItemButton\";\n\ninterface MenuItemProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(\n ({ children, className, ...otherProps }, ref) => {\n // When used without className or extra props, skip the wrapper div\n // so Radix's DropdownMenuItem sits directly inside the Group.\n const hasWrapper = className || ref || Object.keys(otherProps).length > 0;\n\n if (!hasWrapper) return <>{children}</>;\n\n return (\n <div ref={ref} className={className} role=\"none\" {...otherProps}>\n {children}\n </div>\n );\n }\n) as React.ForwardRefExoticComponent<\n MenuItemProps & React.RefAttributes<HTMLDivElement>\n> & {\n Button: typeof MenuItemButton;\n};\nMenuItem.displayName = \"Dropdown.MenuItem\";\nMenuItem.Button = MenuItemButton;\n\nexport { MenuItem };\n","import { forwardRef, type ReactNode } from \"react\";\n\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\nimport {\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n} from \"src/primitives/DropdownMenu\";\n\ninterface SubMenuProps {\n label?: string;\n icon?: IconProp;\n children?: ReactNode;\n className?: string;\n}\n\nconst SubMenu = forwardRef<HTMLDivElement, SubMenuProps>(\n ({ label, icon, children, className }, ref) => (\n <DropdownMenuSub>\n <DropdownMenuSubTrigger ref={ref} className={className}>\n {icon && <span className=\"shrink-0\">{renderIcon(icon, \"size-4\")}</span>}\n {label && <span>{label}</span>}\n </DropdownMenuSubTrigger>\n <DropdownMenuSubContent>{children}</DropdownMenuSubContent>\n </DropdownMenuSub>\n )\n);\nSubMenu.displayName = \"Dropdown.SubMenu\";\n\nexport { SubMenu };\n","import { DropdownBase } from \"./DropdownBase\";\nimport { Divider } from \"./Divider\";\nimport { Label } from \"./Label\";\nimport { Menu } from \"./Menu\";\nimport { MenuItem } from \"./MenuItem\";\nimport { SubMenu } from \"./SubMenu\";\n\nexport type { DropdownProps, DropdownPosition } from \"./types\";\n\ntype DropdownComponent = typeof DropdownBase & {\n Menu: typeof Menu;\n MenuItem: typeof MenuItem;\n Divider: typeof Divider;\n Label: typeof Label;\n SubMenu: typeof SubMenu;\n};\n\nconst DropdownMenu = DropdownBase as DropdownComponent;\nDropdownMenu.displayName = \"DropdownMenu\";\nDropdownMenu.Menu = Menu;\nDropdownMenu.MenuItem = MenuItem;\nDropdownMenu.Divider = Divider;\nDropdownMenu.Label = Label;\nDropdownMenu.SubMenu = SubMenu;\n\nexport { DropdownMenu };\n"],"names":["_jsxs","PrimitiveButton","_jsx","DropdownMenu","_Fragment","PrimitiveDropdownMenuItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownMenu.js","sources":["../../src/components/DropdownMenu/constants.ts","../../src/components/DropdownMenu/SplitTrigger.tsx","../../src/components/DropdownMenu/TriggerButton.tsx","../../src/components/DropdownMenu/types.ts","../../src/components/DropdownMenu/DropdownBase.tsx","../../src/components/DropdownMenu/Divider.tsx","../../src/components/DropdownMenu/Label.tsx","../../src/components/DropdownMenu/Menu.tsx","../../src/components/DropdownMenu/MenuItemButton.tsx","../../src/components/DropdownMenu/MenuItem.tsx","../../src/components/DropdownMenu/SubMenu.tsx","../../src/components/DropdownMenu/index.tsx"],"sourcesContent":["import type { ButtonSize, ButtonStyle } from \"./types\";\n\nexport const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"bottom\",\n};\n\nexport const ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"end\",\n};\n\nexport const BUTTON_STYLE_MAP: Record<\n ButtonStyle,\n \"default\" | \"secondary\" | \"destructive\" | \"outline\" | \"ghost\" | \"link\"\n> = {\n primary: \"default\",\n secondary: \"secondary\",\n tertiary: \"outline\",\n text: \"ghost\",\n danger: \"destructive\",\n \"danger-text\": \"ghost\",\n link: \"link\",\n};\n\nexport const BUTTON_SIZE_MAP: Record<ButtonSize, \"sm\" | \"default\" | \"lg\"> = {\n small: \"sm\",\n medium: \"default\",\n large: \"lg\",\n};\n\nexport const MENU_ITEM_STYLE_MAP: Record<\n \"default\" | \"danger\",\n \"default\" | \"destructive\"\n> = {\n default: \"default\",\n danger: \"destructive\",\n};\n\nexport const CHEVRON_SIZE_MAP: Record<ButtonSize, string> = {\n small: \"size-3.5\",\n medium: \"size-4\",\n large: \"size-4\",\n};\n","import React, { forwardRef } from \"react\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon } from \"src/lib/renderIcon\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport { ButtonGroup } from \"src/primitives/ButtonGroup\";\nimport { DropdownMenuTrigger } from \"src/primitives/DropdownMenu\";\n\nimport {\n BUTTON_SIZE_MAP,\n BUTTON_STYLE_MAP,\n CHEVRON_SIZE_MAP,\n} from \"./constants\";\nimport type { BaseTriggerProps } from \"./types\";\n\ninterface SplitTriggerOwnProps extends BaseTriggerProps {\n /** Ref forwarded to the action button (left side). */\n actionButtonRef?: React.Ref<HTMLButtonElement>;\n}\n\n/**\n * Radix injects extra props (aria-expanded, data-state, …) via Slot on the\n * DropdownMenuTrigger child. We capture them with a rest-spread.\n */\ntype SplitTriggerProps = SplitTriggerOwnProps &\n Omit<React.ComponentProps<\"div\">, keyof SplitTriggerOwnProps>;\n\nconst SplitTrigger = forwardRef<HTMLDivElement, SplitTriggerProps>(\n (\n {\n label,\n icon,\n buttonStyle,\n buttonSize,\n buttonProps,\n disabled,\n isOpen,\n onClick,\n actionButtonRef,\n className,\n ...otherProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n const variant = BUTTON_STYLE_MAP[buttonStyle];\n const size = BUTTON_SIZE_MAP[buttonSize];\n\n return (\n <ButtonGroup\n ref={ref}\n className={cn(\"neeto-ui-action-dropdown\", className)}\n {...otherProps}\n >\n {/* Action button — fires the primary onClick */}\n <PrimitiveButton\n ref={actionButtonRef}\n type=\"button\"\n variant={variant}\n size={size}\n disabled={disabled}\n onClick={onClick}\n data-testid=\"action-dropdown-btn\"\n {...buttonProps}\n >\n {icon && renderIcon(icon, \"size-4\")}\n {label && <span>{label}</span>}\n </PrimitiveButton>\n\n {/* Chevron trigger — opens the dropdown menu */}\n <DropdownMenuTrigger asChild disabled={disabled}>\n <PrimitiveButton\n type=\"button\"\n variant={variant}\n size={size}\n disabled={disabled}\n aria-label={t(\n \"neetoatoms.dropdownMenu.openMenu\",\n \"Open dropdown menu\"\n )}\n className=\"px-1.5\"\n >\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n CHEVRON_SIZE_MAP[buttonSize],\n \"shrink-0 transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n </PrimitiveButton>\n </DropdownMenuTrigger>\n </ButtonGroup>\n );\n }\n);\nSplitTrigger.displayName = \"Dropdown.SplitTrigger\";\n\nexport { SplitTrigger };\n","import React, { forwardRef } from \"react\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon } from \"src/lib/renderIcon\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\n\nimport { BUTTON_SIZE_MAP, BUTTON_STYLE_MAP, CHEVRON_SIZE_MAP } from \"./constants\";\nimport type { BaseTriggerProps } from \"./types\";\n\n/**\n * Extra props that Radix's Slot injects when the parent Trigger uses\n * `asChild` (aria-expanded, aria-haspopup, data-state, id, …).\n * We capture them with a rest-spread so they reach the DOM button.\n */\ntype TriggerButtonProps = BaseTriggerProps &\n Omit<React.ComponentProps<\"button\">, keyof BaseTriggerProps>;\n\nconst TriggerButton = forwardRef<HTMLButtonElement, TriggerButtonProps>(\n (\n {\n label,\n icon,\n buttonStyle,\n buttonSize,\n buttonProps,\n disabled,\n isOpen,\n onClick,\n className,\n ...otherProps\n },\n ref\n ) => (\n <PrimitiveButton\n ref={ref}\n type=\"button\"\n variant={BUTTON_STYLE_MAP[buttonStyle]}\n size={BUTTON_SIZE_MAP[buttonSize]}\n disabled={disabled}\n className={cn(\n buttonStyle === \"danger-text\" &&\n \"text-destructive hover:text-destructive\",\n \"gap-1.5\",\n className\n )}\n onClick={onClick}\n {...otherProps}\n {...buttonProps}\n >\n <span className=\"inline-flex items-center gap-1.5\">\n {icon && renderIcon(icon, \"size-4\")}\n {label && <span>{label}</span>}\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n CHEVRON_SIZE_MAP[buttonSize],\n \"shrink-0 transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n </span>\n </PrimitiveButton>\n )\n);\nTriggerButton.displayName = \"Dropdown.TriggerButton\";\n\nexport { TriggerButton };\n","import { createContext, type ReactNode, type Ref } from \"react\";\n\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport {\n DropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n} from \"src/primitives/DropdownMenu\";\nimport type { IconProp } from \"src/lib/renderIcon\";\n\nexport type DropdownPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\nexport type ButtonStyle =\n | \"primary\"\n | \"secondary\"\n | \"tertiary\"\n | \"text\"\n | \"danger\"\n | \"danger-text\"\n | \"link\";\n\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport type MenuItemButtonStyle = \"default\" | \"danger\";\n\nexport interface BaseTriggerProps {\n label?: string;\n icon?: IconProp;\n buttonStyle: ButtonStyle;\n buttonSize: ButtonSize;\n buttonProps?: Omit<\n React.ComponentProps<typeof PrimitiveButton>,\n \"variant\" | \"size\" | \"disabled\"\n >;\n disabled: boolean;\n isOpen: boolean;\n onClick?: (e: React.MouseEvent) => void;\n}\n\nexport interface DropdownProps {\n /** Text label displayed inside the trigger button. */\n label?: string;\n /** Icon rendered inside the trigger button. */\n icon?: IconProp;\n /** Visual style of the trigger button(s). */\n buttonStyle?: ButtonStyle;\n /** Size of the trigger button(s). */\n buttonSize?: ButtonSize;\n /** Extra props forwarded to the trigger button. In split-button mode, forwarded to the action button. */\n buttonProps?: Omit<\n React.ComponentProps<typeof PrimitiveButton>,\n \"variant\" | \"size\" | \"disabled\"\n >;\n /** Custom trigger element. Overrides the default button trigger. */\n customTarget?: ReactNode | ((props: { isOpen: boolean }) => ReactNode);\n /** Whether the dropdown is disabled. */\n disabled?: boolean;\n /** Dropdown menu content. */\n children?: ReactNode;\n /** Position of the dropdown menu relative to the trigger. */\n position?: DropdownPosition;\n /** Whether pressing Escape closes the dropdown. */\n closeOnEsc?: boolean;\n /** Whether selecting an item closes the dropdown. */\n closeOnSelect?: boolean;\n /** Whether clicking outside closes the dropdown. */\n closeOnOutsideClick?: boolean;\n /** Controlled open state. */\n isOpen?: boolean;\n /** Callback fired when the dropdown closes. */\n onClose?: () => void;\n /**\n * Callback fired when the trigger button is clicked.\n * When provided (without `customTarget`), renders a **split-button**:\n * a primary action button (fires `onClick`) paired with a separate\n * chevron that opens the dropdown menu.\n */\n onClick?: (e: React.MouseEvent) => void;\n /** Additional CSS class names for the trigger wrapper. */\n className?: string;\n /** Ref forwarded to the trigger button. In split-button mode, forwarded to the action button. */\n triggerRef?: Ref<HTMLButtonElement>;\n /** Extra props forwarded to the DropdownMenuContent. */\n dropdownProps?: Omit<\n React.ComponentProps<typeof DropdownMenuContent>,\n \"side\" | \"align\"\n >;\n}\n\nexport interface MenuItemButtonProps extends Omit<\n React.ComponentProps<typeof PrimitiveDropdownMenuItem>,\n \"prefix\" | \"style\" | \"onClick\"\n> {\n /** Highlight as active. */\n isActive?: boolean;\n /** Disable the menu item button. */\n isDisabled?: boolean;\n /** Visual style of the button. */\n style?: MenuItemButtonStyle;\n /** Content rendered before the label. */\n prefix?: ReactNode;\n /** Content rendered after the label. */\n suffix?: ReactNode;\n /** Internal route (renders as anchor). */\n to?: string;\n /** External link (renders as anchor). */\n href?: string;\n /** Callback fired when the item is selected. */\n onClick?: (e: Event) => void;\n /** Children / label text. */\n children?: ReactNode;\n /** Additional CSS class names. */\n className?: string;\n}\n\nexport const DropdownContext = createContext({ closeOnSelect: true });\n","import { useCallback, useState } from \"react\";\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"src/primitives/DropdownMenu\";\n\nimport { ALIGN_MAP, SIDE_MAP } from \"./constants\";\nimport { SplitTrigger } from \"./SplitTrigger\";\nimport { TriggerButton } from \"./TriggerButton\";\nimport { DropdownContext, type DropdownProps } from \"./types\";\n\nconst DropdownBase = ({\n label,\n icon,\n buttonStyle = \"primary\",\n buttonSize = \"medium\",\n buttonProps,\n customTarget,\n disabled = false,\n children,\n position = \"bottom-end\",\n closeOnEsc = true,\n closeOnSelect = true,\n closeOnOutsideClick = true,\n isOpen: isOpenProp,\n onClose,\n onClick,\n className,\n triggerRef,\n dropdownProps,\n}: DropdownProps) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = isOpenProp !== undefined;\n const open = isControlled ? isOpenProp : internalOpen;\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n if (!next) onClose?.();\n },\n [isControlled, onClose]\n );\n\n const side = SIDE_MAP[position] ?? \"bottom\";\n const align = ALIGN_MAP[position] ?? \"end\";\n\n // Split-button mode: onClick provided without a customTarget.\n const isSplit = !!onClick && !customTarget;\n\n const sharedTriggerProps = {\n label,\n icon,\n buttonStyle,\n buttonSize,\n buttonProps,\n disabled,\n isOpen: open,\n onClick,\n };\n\n const triggerNode = isSplit ? (\n <SplitTrigger\n {...sharedTriggerProps}\n actionButtonRef={triggerRef}\n className={className}\n />\n ) : (\n <DropdownMenuTrigger asChild disabled={disabled} className={className}>\n {customTarget ? (\n typeof customTarget === \"function\" ? (\n customTarget({ isOpen: open })\n ) : (\n customTarget\n )\n ) : (\n <TriggerButton ref={triggerRef} {...sharedTriggerProps} />\n )}\n </DropdownMenuTrigger>\n );\n\n return (\n <DropdownContext.Provider value={{ closeOnSelect }}>\n <DropdownMenu\n open={open}\n onOpenChange={handleOpenChange}\n modal={closeOnOutsideClick}\n >\n {triggerNode}\n <DropdownMenuContent\n side={side}\n align={align}\n onEscapeKeyDown={closeOnEsc ? undefined : e => e.preventDefault()}\n onInteractOutside={\n closeOnOutsideClick ? undefined : e => e.preventDefault()\n }\n {...dropdownProps}\n >\n {children}\n </DropdownMenuContent>\n </DropdownMenu>\n </DropdownContext.Provider>\n );\n};\n\nexport { DropdownBase };\n","import React, { forwardRef } from \"react\";\n\nimport { DropdownMenuSeparator } from \"src/primitives/DropdownMenu\";\n\nconst Divider = forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof DropdownMenuSeparator>\n>((props, ref) => <DropdownMenuSeparator ref={ref} {...props} />);\nDivider.displayName = \"Dropdown.Divider\";\n\nexport { Divider };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { DropdownMenuLabel } from \"src/primitives/DropdownMenu\";\n\ninterface MenuLabelProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Label = forwardRef<HTMLDivElement, MenuLabelProps>(\n ({ children, className, ...otherProps }, ref) => (\n <DropdownMenuLabel ref={ref} className={className} {...otherProps}>\n {children}\n </DropdownMenuLabel>\n )\n);\nLabel.displayName = \"Dropdown.Label\";\n\nexport { Label };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { DropdownMenuGroup } from \"src/primitives/DropdownMenu\";\n\ninterface MenuProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Menu = forwardRef<HTMLDivElement, MenuProps>(\n ({ children, className, ...otherProps }, ref) => (\n <DropdownMenuGroup\n ref={ref}\n className={cn(\"flex flex-col\", className)}\n {...otherProps}\n >\n {children}\n </DropdownMenuGroup>\n )\n);\nMenu.displayName = \"Dropdown.Menu\";\n\nexport { Menu };\n","import React, { forwardRef, useCallback, useMemo, useContext } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { DropdownMenuItem as PrimitiveDropdownMenuItem } from \"src/primitives/DropdownMenu\";\n\nimport { MENU_ITEM_STYLE_MAP } from \"./constants\";\nimport { DropdownContext, type MenuItemButtonProps } from \"./types\";\n\nconst MenuItemButton = forwardRef<HTMLDivElement, MenuItemButtonProps>(\n (\n {\n children,\n isActive = false,\n isDisabled = false,\n style = \"default\",\n prefix,\n suffix,\n to,\n href,\n className,\n onClick,\n variant: _variant,\n disabled: _disabled,\n asChild: _asChild,\n onSelect: _onSelect,\n ...otherProps\n },\n ref\n ) => {\n const { closeOnSelect } = useContext(DropdownContext);\n const variant = MENU_ITEM_STYLE_MAP[style];\n const linkHref = to ?? href;\n\n const handleSelect = useCallback(\n (e: Event) => {\n if (!closeOnSelect) e.preventDefault();\n onClick?.(e);\n },\n [closeOnSelect, onClick]\n );\n\n const itemContent = useMemo(\n () => (\n <>\n {prefix && (\n <span data-slot=\"menu-item-prefix\" className=\"shrink-0\">\n {prefix}\n </span>\n )}\n <span className=\"flex-1 truncate\">{children}</span>\n {suffix && (\n <span\n data-slot=\"menu-item-suffix\"\n className=\"ms-auto shrink-0 text-muted-foreground\"\n >\n {suffix}\n </span>\n )}\n </>\n ),\n [prefix, children, suffix]\n );\n\n return (\n <PrimitiveDropdownMenuItem\n ref={ref}\n variant={variant}\n disabled={isDisabled}\n data-active={isActive || undefined}\n className={cn(isActive && \"bg-accent text-accent-foreground\", className)}\n asChild={!!linkHref}\n onSelect={handleSelect}\n {...otherProps}\n >\n {linkHref ? <a href={linkHref}>{itemContent}</a> : itemContent}\n </PrimitiveDropdownMenuItem>\n );\n }\n);\nMenuItemButton.displayName = \"Dropdown.MenuItem.Button\";\n\nexport { MenuItemButton };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { MenuItemButton } from \"./MenuItemButton\";\n\ninterface MenuItemProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(\n ({ children, className, ...otherProps }, ref) => {\n // When used without className or extra props, skip the wrapper div\n // so Radix's DropdownMenuItem sits directly inside the Group.\n const hasWrapper = className || ref || Object.keys(otherProps).length > 0;\n\n if (!hasWrapper) return <>{children}</>;\n\n return (\n <div ref={ref} className={className} role=\"none\" {...otherProps}>\n {children}\n </div>\n );\n }\n) as React.ForwardRefExoticComponent<\n MenuItemProps & React.RefAttributes<HTMLDivElement>\n> & {\n Button: typeof MenuItemButton;\n};\nMenuItem.displayName = \"Dropdown.MenuItem\";\nMenuItem.Button = MenuItemButton;\n\nexport { MenuItem };\n","import { forwardRef, type ReactNode } from \"react\";\n\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\nimport {\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n} from \"src/primitives/DropdownMenu\";\n\ninterface SubMenuProps {\n label?: string;\n icon?: IconProp;\n children?: ReactNode;\n className?: string;\n}\n\nconst SubMenu = forwardRef<HTMLDivElement, SubMenuProps>(\n ({ label, icon, children, className }, ref) => (\n <DropdownMenuSub>\n <DropdownMenuSubTrigger ref={ref} className={className}>\n {icon && <span className=\"shrink-0\">{renderIcon(icon, \"size-4\")}</span>}\n {label && <span>{label}</span>}\n </DropdownMenuSubTrigger>\n <DropdownMenuSubContent>{children}</DropdownMenuSubContent>\n </DropdownMenuSub>\n )\n);\nSubMenu.displayName = \"Dropdown.SubMenu\";\n\nexport { SubMenu };\n","import { DropdownBase } from \"./DropdownBase\";\nimport { Divider } from \"./Divider\";\nimport { Label } from \"./Label\";\nimport { Menu } from \"./Menu\";\nimport { MenuItem } from \"./MenuItem\";\nimport { SubMenu } from \"./SubMenu\";\n\nexport type { DropdownProps, DropdownPosition } from \"./types\";\n\ntype DropdownComponent = typeof DropdownBase & {\n Menu: typeof Menu;\n MenuItem: typeof MenuItem;\n Divider: typeof Divider;\n Label: typeof Label;\n SubMenu: typeof SubMenu;\n};\n\nconst DropdownMenu = DropdownBase as DropdownComponent;\nDropdownMenu.displayName = \"DropdownMenu\";\nDropdownMenu.Menu = Menu;\nDropdownMenu.MenuItem = MenuItem;\nDropdownMenu.Divider = Divider;\nDropdownMenu.Label = Label;\nDropdownMenu.SubMenu = SubMenu;\n\nexport { DropdownMenu };\n"],"names":["_jsxs","PrimitiveButton","_jsx","DropdownMenu","_Fragment","PrimitiveDropdownMenuItem"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Button } from "src/components/Button";
|
|
3
|
+
import { type IconProp } from "src/lib/renderIcon";
|
|
4
|
+
export interface EmptyProps extends React.ComponentProps<"div"> {
|
|
5
|
+
/** Image URL or JSX for the media area. */
|
|
6
|
+
image?: string | React.ReactNode;
|
|
7
|
+
/** Icon for the media area (rendered inside EmptyMedia with variant="icon"). */
|
|
8
|
+
icon?: IconProp;
|
|
9
|
+
/** Empty state title. */
|
|
10
|
+
title?: string;
|
|
11
|
+
/** Description text or JSX. */
|
|
12
|
+
description?: React.ReactNode;
|
|
13
|
+
/** Additional help text below the description. */
|
|
14
|
+
helpText?: React.ReactNode;
|
|
15
|
+
/** Props forwarded to the primary action Button. */
|
|
16
|
+
primaryButtonProps?: React.ComponentProps<typeof Button>;
|
|
17
|
+
/** Props forwarded to the secondary action Button. */
|
|
18
|
+
secondaryButtonProps?: React.ComponentProps<typeof Button>;
|
|
19
|
+
/** Text displayed between the primary and secondary buttons (e.g., "or"). */
|
|
20
|
+
buttonSeparatorText?: string;
|
|
21
|
+
/** Show tooltip on disabled buttons using their label as content. */
|
|
22
|
+
showTooltipWhenButtonDisabled?: boolean;
|
|
23
|
+
/** Additional CSS class names. */
|
|
24
|
+
className?: string;
|
|
25
|
+
}
|
|
26
|
+
declare const Empty: React.ForwardRefExoticComponent<Omit<EmptyProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
27
|
+
export { Empty };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { Empty as Empty$1, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from '../primitives/Empty.js';
|
|
5
|
+
import { Button } from './Button.js';
|
|
6
|
+
import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '../primitives/Tooltip.js';
|
|
7
|
+
import { r as renderIcon } from '../renderIcon-tlvMyboj.js';
|
|
8
|
+
import '../index-D7Zy7P05.js';
|
|
9
|
+
import '../primitives/Button.js';
|
|
10
|
+
import '../button-COIbN8dg.js';
|
|
11
|
+
import '../index-CfriMyrd.js';
|
|
12
|
+
import '../index-BtkPdosV.js';
|
|
13
|
+
import '../primitives/Spinner.js';
|
|
14
|
+
import 'react-i18next';
|
|
15
|
+
import '../loader-circle-DycHUAWN.js';
|
|
16
|
+
import '../createLucideIcon-C8ycilSN.js';
|
|
17
|
+
import '../tooltip-DzjIJacP.js';
|
|
18
|
+
import '../index-DNzunGHb.js';
|
|
19
|
+
import '../index-CiyxEyB0.js';
|
|
20
|
+
import '../index-BNPynZWM.js';
|
|
21
|
+
import '../index-DhnfW8wQ.js';
|
|
22
|
+
import 'react-dom';
|
|
23
|
+
import '../index-CSUSJzOJ.js';
|
|
24
|
+
import '../index-zW4GjM5L.js';
|
|
25
|
+
import '../index-DOzu5J1s.js';
|
|
26
|
+
import '../index-ByEpUy7w.js';
|
|
27
|
+
import '../floating-ui.react-dom-CcGbtPEK.js';
|
|
28
|
+
import '../index-BYZaLNq1.js';
|
|
29
|
+
import '../index-fV_U4ZJM.js';
|
|
30
|
+
import '../index-yFgkK_AM.js';
|
|
31
|
+
import '../index-Cor698lu.js';
|
|
32
|
+
import '../index-CSggBaQF.js';
|
|
33
|
+
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Helper — optionally wrap a disabled button in a tooltip
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
function MaybeTooltipButton({ buttonProps, showTooltipWhenDisabled, defaultVariant, }) {
|
|
38
|
+
const button = jsx(Button, { variant: defaultVariant, ...buttonProps });
|
|
39
|
+
if (showTooltipWhenDisabled && buttonProps.disabled && buttonProps.label) {
|
|
40
|
+
return (jsx(TooltipProvider, { delayDuration: 0, children: jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: jsx("span", { className: "inline-flex", children: button }) }), jsx(TooltipContent, { children: buttonProps.label })] }) }));
|
|
41
|
+
}
|
|
42
|
+
return button;
|
|
43
|
+
}
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// Component
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
const Empty = forwardRef(({ image, icon, title, description, helpText, primaryButtonProps, secondaryButtonProps, buttonSeparatorText, showTooltipWhenButtonDisabled = false, className, ...otherProps }, ref) => {
|
|
48
|
+
const hasMedia = image || icon;
|
|
49
|
+
const hasButtons = primaryButtonProps || secondaryButtonProps;
|
|
50
|
+
return (jsxs(Empty$1, { ref: ref, className: cn(className), ...otherProps, children: [jsxs(EmptyHeader, { children: [hasMedia && (jsxs(Fragment, { children: [image && (jsx(EmptyMedia, { children: typeof image === "string" ? (jsx("img", { src: image, alt: title ?? "" })) : (image) })), !image && icon && (jsx(EmptyMedia, { variant: "icon", children: renderIcon(icon) }))] })), title && jsx(EmptyTitle, { children: title }), description && jsx(EmptyDescription, { children: description }), helpText && (jsx("p", { className: "text-sm text-muted-foreground", children: helpText }))] }), hasButtons && (jsx(EmptyContent, { children: jsxs("div", { className: "flex flex-wrap items-center justify-center gap-2", children: [primaryButtonProps && (jsx(MaybeTooltipButton, { buttonProps: primaryButtonProps, showTooltipWhenDisabled: showTooltipWhenButtonDisabled, defaultVariant: "default" })), buttonSeparatorText &&
|
|
51
|
+
primaryButtonProps &&
|
|
52
|
+
secondaryButtonProps && (jsx("span", { className: "text-sm text-muted-foreground", children: buttonSeparatorText })), secondaryButtonProps && (jsx(MaybeTooltipButton, { buttonProps: secondaryButtonProps, showTooltipWhenDisabled: showTooltipWhenButtonDisabled, defaultVariant: "outline" }))] }) }))] }));
|
|
53
|
+
});
|
|
54
|
+
Empty.displayName = "Empty";
|
|
55
|
+
|
|
56
|
+
export { Empty };
|
|
57
|
+
//# sourceMappingURL=Empty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Empty.js","sources":["../../src/components/Empty.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Empty as PrimitiveEmpty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n} from \"src/primitives/Empty\";\nimport { Button } from \"src/components/Button\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface EmptyProps extends React.ComponentProps<\"div\"> {\n /** Image URL or JSX for the media area. */\n image?: string | React.ReactNode;\n /** Icon for the media area (rendered inside EmptyMedia with variant=\"icon\"). */\n icon?: IconProp;\n /** Empty state title. */\n title?: string;\n /** Description text or JSX. */\n description?: React.ReactNode;\n /** Additional help text below the description. */\n helpText?: React.ReactNode;\n /** Props forwarded to the primary action Button. */\n primaryButtonProps?: React.ComponentProps<typeof Button>;\n /** Props forwarded to the secondary action Button. */\n secondaryButtonProps?: React.ComponentProps<typeof Button>;\n /** Text displayed between the primary and secondary buttons (e.g., \"or\"). */\n buttonSeparatorText?: string;\n /** Show tooltip on disabled buttons using their label as content. */\n showTooltipWhenButtonDisabled?: boolean;\n /** Additional CSS class names. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helper — optionally wrap a disabled button in a tooltip\n// ---------------------------------------------------------------------------\n\nfunction MaybeTooltipButton({\n buttonProps,\n showTooltipWhenDisabled,\n defaultVariant,\n}: {\n buttonProps: React.ComponentProps<typeof Button>;\n showTooltipWhenDisabled: boolean;\n defaultVariant: \"default\" | \"outline\";\n}) {\n const button = <Button variant={defaultVariant} {...buttonProps} />;\n\n if (showTooltipWhenDisabled && buttonProps.disabled && buttonProps.label) {\n return (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex\">{button}</span>\n </TooltipTrigger>\n <TooltipContent>{buttonProps.label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return button;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Empty = forwardRef<HTMLDivElement, EmptyProps>(\n (\n {\n image,\n icon,\n title,\n description,\n helpText,\n primaryButtonProps,\n secondaryButtonProps,\n buttonSeparatorText,\n showTooltipWhenButtonDisabled = false,\n className,\n ...otherProps\n },\n ref\n ) => {\n const hasMedia = image || icon;\n const hasButtons = primaryButtonProps || secondaryButtonProps;\n\n return (\n <PrimitiveEmpty ref={ref} className={cn(className)} {...otherProps}>\n <EmptyHeader>\n {hasMedia && (\n <>\n {image && (\n <EmptyMedia>\n {typeof image === \"string\" ? (\n <img src={image} alt={title ?? \"\"} />\n ) : (\n image\n )}\n </EmptyMedia>\n )}\n {!image && icon && (\n <EmptyMedia variant=\"icon\">{renderIcon(icon)}</EmptyMedia>\n )}\n </>\n )}\n {title && <EmptyTitle>{title}</EmptyTitle>}\n {description && <EmptyDescription>{description}</EmptyDescription>}\n {helpText && (\n <p className=\"text-sm text-muted-foreground\">{helpText}</p>\n )}\n </EmptyHeader>\n\n {hasButtons && (\n <EmptyContent>\n <div className=\"flex flex-wrap items-center justify-center gap-2\">\n {primaryButtonProps && (\n <MaybeTooltipButton\n buttonProps={primaryButtonProps}\n showTooltipWhenDisabled={showTooltipWhenButtonDisabled}\n defaultVariant=\"default\"\n />\n )}\n {buttonSeparatorText &&\n primaryButtonProps &&\n secondaryButtonProps && (\n <span className=\"text-sm text-muted-foreground\">\n {buttonSeparatorText}\n </span>\n )}\n {secondaryButtonProps && (\n <MaybeTooltipButton\n buttonProps={secondaryButtonProps}\n showTooltipWhenDisabled={showTooltipWhenButtonDisabled}\n defaultVariant=\"outline\"\n />\n )}\n </div>\n </EmptyContent>\n )}\n </PrimitiveEmpty>\n );\n }\n);\n\nEmpty.displayName = \"Empty\";\n\nexport { Empty };\n"],"names":["_jsx","_jsxs","PrimitiveEmpty","_Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Kbd as PrimitiveKbd } from "src/primitives/Kbd";
|
|
3
|
+
export interface KbdProps extends React.ComponentProps<typeof PrimitiveKbd> {
|
|
4
|
+
/** Optional tooltip to display on hover. */
|
|
5
|
+
tooltipProps?: {
|
|
6
|
+
content?: React.ReactNode;
|
|
7
|
+
position?: string;
|
|
8
|
+
};
|
|
9
|
+
/** Additional CSS class names. */
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const KbdNamespace: React.ForwardRefExoticComponent<Omit<KbdProps, "ref"> & React.RefAttributes<HTMLElement>> & {
|
|
13
|
+
Group: (props: React.ComponentProps<typeof import("../shadcn/components/kbd").KbdGroup>) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
};
|
|
15
|
+
export { KbdNamespace as Kbd };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { Kbd as Kbd$1, KbdGroup as KbdGroup$1 } from '../primitives/Kbd.js';
|
|
5
|
+
import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '../primitives/Tooltip.js';
|
|
6
|
+
import '../tooltip-DzjIJacP.js';
|
|
7
|
+
import '../index-DNzunGHb.js';
|
|
8
|
+
import '../index-BtkPdosV.js';
|
|
9
|
+
import '../index-CiyxEyB0.js';
|
|
10
|
+
import '../index-BNPynZWM.js';
|
|
11
|
+
import '../index-DhnfW8wQ.js';
|
|
12
|
+
import 'react-dom';
|
|
13
|
+
import '../index-CSUSJzOJ.js';
|
|
14
|
+
import '../index-zW4GjM5L.js';
|
|
15
|
+
import '../index-DOzu5J1s.js';
|
|
16
|
+
import '../index-ByEpUy7w.js';
|
|
17
|
+
import '../floating-ui.react-dom-CcGbtPEK.js';
|
|
18
|
+
import '../index-BYZaLNq1.js';
|
|
19
|
+
import '../index-fV_U4ZJM.js';
|
|
20
|
+
import '../index-yFgkK_AM.js';
|
|
21
|
+
import '../index-Cor698lu.js';
|
|
22
|
+
import '../index-CSggBaQF.js';
|
|
23
|
+
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Position mapping
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
const SIDE_MAP = {
|
|
28
|
+
top: "top",
|
|
29
|
+
bottom: "bottom",
|
|
30
|
+
left: "left",
|
|
31
|
+
right: "right",
|
|
32
|
+
"top-start": "top",
|
|
33
|
+
"top-end": "top",
|
|
34
|
+
"bottom-start": "bottom",
|
|
35
|
+
"bottom-end": "bottom",
|
|
36
|
+
"left-start": "left",
|
|
37
|
+
"left-end": "left",
|
|
38
|
+
"right-start": "right",
|
|
39
|
+
"right-end": "right",
|
|
40
|
+
auto: "top",
|
|
41
|
+
};
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Component
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
const Kbd = forwardRef(({ tooltipProps, className, ...otherProps }, ref) => {
|
|
46
|
+
const kbd = (jsx(Kbd$1, { ref: ref, className: cn(className), ...otherProps }));
|
|
47
|
+
if (!tooltipProps?.content) {
|
|
48
|
+
return kbd;
|
|
49
|
+
}
|
|
50
|
+
const side = SIDE_MAP[tooltipProps.position ?? "auto"] ?? "top";
|
|
51
|
+
return (jsx(TooltipProvider, { children: jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: kbd }), jsx(TooltipContent, { side: side, children: tooltipProps.content })] }) }));
|
|
52
|
+
});
|
|
53
|
+
Kbd.displayName = "Kbd";
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Compound: Kbd.Group
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
const KbdGroup = KbdGroup$1;
|
|
58
|
+
const KbdNamespace = Object.assign(Kbd, { Group: KbdGroup });
|
|
59
|
+
|
|
60
|
+
export { KbdNamespace as Kbd };
|
|
61
|
+
//# sourceMappingURL=Kbd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Kbd.js","sources":["../../src/components/Kbd.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Kbd as PrimitiveKbd,\n KbdGroup as PrimitiveKbdGroup,\n} from \"src/primitives/Kbd\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface KbdProps extends React.ComponentProps<typeof PrimitiveKbd> {\n /** Optional tooltip to display on hover. */\n tooltipProps?: {\n content?: React.ReactNode;\n position?: string;\n };\n /** Additional CSS class names. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Position mapping\n// ---------------------------------------------------------------------------\n\nconst SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"top\",\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Kbd = forwardRef<HTMLElement, KbdProps>(\n ({ tooltipProps, className, ...otherProps }, ref) => {\n const kbd = (\n <PrimitiveKbd ref={ref} className={cn(className)} {...otherProps} />\n );\n\n if (!tooltipProps?.content) {\n return kbd;\n }\n\n const side = SIDE_MAP[tooltipProps.position ?? \"auto\"] ?? \"top\";\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{kbd}</TooltipTrigger>\n <TooltipContent side={side}>{tooltipProps.content}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n);\n\nKbd.displayName = \"Kbd\";\n\n// ---------------------------------------------------------------------------\n// Compound: Kbd.Group\n// ---------------------------------------------------------------------------\n\nconst KbdGroup = PrimitiveKbdGroup;\n\nconst KbdNamespace = Object.assign(Kbd, { Group: KbdGroup });\n\nexport { KbdNamespace as Kbd };\n"],"names":["_jsx","PrimitiveKbd","_jsxs","PrimitiveKbdGroup"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA4BA;AACA;AACA;AAEA,MAAM,QAAQ,GAAwD;AACpE,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,cAAc,EAAE,QAAQ;AACxB,IAAA,YAAY,EAAE,QAAQ;AACtB,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,IAAI,EAAE,KAAK;CACZ;AAED;AACA;AACA;AAEA,MAAM,GAAG,GAAG,UAAU,CACpB,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,KAAI;IAClD,MAAM,GAAG,IACPA,GAAA,CAACC,KAAY,EAAA,EAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,UAAU,EAAA,CAAI,CACrE;AAED,IAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAC1B,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK;AAE/D,IAAA,QACED,GAAA,CAAC,eAAe,EAAA,EAAA,QAAA,EACdE,IAAA,CAAC,OAAO,EAAA,EAAA,QAAA,EAAA,CACNF,GAAA,CAAC,cAAc,EAAA,EAAC,OAAO,EAAA,IAAA,EAAA,QAAA,EAAE,GAAG,EAAA,CAAkB,EAC9CA,GAAA,CAAC,cAAc,EAAA,EAAC,IAAI,EAAE,IAAI,EAAA,QAAA,EAAG,YAAY,CAAC,OAAO,EAAA,CAAkB,CAAA,EAAA,CAC3D,EAAA,CACM;AAEtB,CAAC,CACF;AAED,GAAG,CAAC,WAAW,GAAG,KAAK;AAEvB;AACA;AACA;AAEA,MAAM,QAAQ,GAAGG,UAAiB;AAElC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;;;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type IconProp } from "src/lib/renderIcon";
|
|
3
|
+
import { Label as PrimitiveLabel } from "src/primitives/Label";
|
|
4
|
+
import { type ButtonProps } from "src/components/Button";
|
|
5
|
+
interface HelpIconTooltipProps {
|
|
6
|
+
/** Tooltip content. */
|
|
7
|
+
content?: React.ReactNode;
|
|
8
|
+
/** Tooltip position. */
|
|
9
|
+
position?: string;
|
|
10
|
+
}
|
|
11
|
+
interface HelpIconPopoverProps {
|
|
12
|
+
/** Popover title. */
|
|
13
|
+
title?: React.ReactNode;
|
|
14
|
+
/** Popover description. */
|
|
15
|
+
description?: React.ReactNode;
|
|
16
|
+
/** Props for an optional help link button inside the popover. */
|
|
17
|
+
helpLinkProps?: ButtonProps;
|
|
18
|
+
}
|
|
19
|
+
interface HelpIconProps {
|
|
20
|
+
/** Click handler on the help icon. */
|
|
21
|
+
onClick?: () => void;
|
|
22
|
+
/** Custom icon. Defaults to CircleHelpIcon. */
|
|
23
|
+
icon?: IconProp;
|
|
24
|
+
/** Show a tooltip on hover. */
|
|
25
|
+
tooltipProps?: HelpIconTooltipProps;
|
|
26
|
+
/** Show a popover on hover with title, description, and optional link. */
|
|
27
|
+
popoverProps?: HelpIconPopoverProps;
|
|
28
|
+
/** Additional class name for the help icon. */
|
|
29
|
+
className?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface LabelProps extends React.ComponentProps<typeof PrimitiveLabel> {
|
|
32
|
+
/** Shows a red asterisk after the label text. */
|
|
33
|
+
required?: boolean;
|
|
34
|
+
/** Props for the help icon (tooltip or popover mode). */
|
|
35
|
+
helpIconProps?: HelpIconProps;
|
|
36
|
+
/** Additional CSS class names. */
|
|
37
|
+
className?: string;
|
|
38
|
+
}
|
|
39
|
+
declare const Label: React.ForwardRefExoticComponent<Omit<LabelProps, "ref"> & React.RefAttributes<HTMLLabelElement>>;
|
|
40
|
+
export { Label };
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { r as renderIcon } from '../renderIcon-tlvMyboj.js';
|
|
5
|
+
import { Label as Label$1 } from '../primitives/Label.js';
|
|
6
|
+
import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '../primitives/Tooltip.js';
|
|
7
|
+
import { Popover } from './Popover.js';
|
|
8
|
+
import { Button } from './Button.js';
|
|
9
|
+
import { c as createLucideIcon } from '../createLucideIcon-C8ycilSN.js';
|
|
10
|
+
import '../label-B4qDF3W1.js';
|
|
11
|
+
import '../index-DhnfW8wQ.js';
|
|
12
|
+
import 'react-dom';
|
|
13
|
+
import '../index-BtkPdosV.js';
|
|
14
|
+
import '../tooltip-DzjIJacP.js';
|
|
15
|
+
import '../index-DNzunGHb.js';
|
|
16
|
+
import '../index-CiyxEyB0.js';
|
|
17
|
+
import '../index-BNPynZWM.js';
|
|
18
|
+
import '../index-CSUSJzOJ.js';
|
|
19
|
+
import '../index-zW4GjM5L.js';
|
|
20
|
+
import '../index-DOzu5J1s.js';
|
|
21
|
+
import '../index-ByEpUy7w.js';
|
|
22
|
+
import '../floating-ui.react-dom-CcGbtPEK.js';
|
|
23
|
+
import '../index-BYZaLNq1.js';
|
|
24
|
+
import '../index-fV_U4ZJM.js';
|
|
25
|
+
import '../index-yFgkK_AM.js';
|
|
26
|
+
import '../index-Cor698lu.js';
|
|
27
|
+
import '../index-CSggBaQF.js';
|
|
28
|
+
import '../index-D7Zy7P05.js';
|
|
29
|
+
import '../primitives/HoverCard.js';
|
|
30
|
+
import '../primitives/Button.js';
|
|
31
|
+
import '../button-COIbN8dg.js';
|
|
32
|
+
import '../index-CfriMyrd.js';
|
|
33
|
+
import '../primitives/Spinner.js';
|
|
34
|
+
import 'react-i18next';
|
|
35
|
+
import '../loader-circle-DycHUAWN.js';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @license lucide-react v0.577.0 - ISC
|
|
39
|
+
*
|
|
40
|
+
* This source code is licensed under the ISC license.
|
|
41
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
const __iconNode = [
|
|
46
|
+
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
47
|
+
["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
|
|
48
|
+
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
49
|
+
];
|
|
50
|
+
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode);
|
|
51
|
+
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Tooltip side mapping
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
const SIDE_MAP = {
|
|
56
|
+
top: "top",
|
|
57
|
+
bottom: "bottom",
|
|
58
|
+
left: "left",
|
|
59
|
+
right: "right",
|
|
60
|
+
auto: "top",
|
|
61
|
+
};
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Component
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
const Label = forwardRef(({ required, helpIconProps, className, children, ...otherProps }, ref) => {
|
|
66
|
+
const helpIcon = helpIconProps?.icon ?? CircleQuestionMark;
|
|
67
|
+
const iconElement = (jsx("span", { className: cn("inline-flex cursor-help text-muted-foreground transition-colors hover:text-foreground", helpIconProps?.onClick && "cursor-pointer", helpIconProps?.className), onClick: helpIconProps?.onClick, children: renderIcon(helpIcon, "size-3.5") }));
|
|
68
|
+
const renderHelpIcon = () => {
|
|
69
|
+
if (!helpIconProps)
|
|
70
|
+
return null;
|
|
71
|
+
// Popover mode
|
|
72
|
+
if (helpIconProps.popoverProps) {
|
|
73
|
+
const { title, description, helpLinkProps } = helpIconProps.popoverProps;
|
|
74
|
+
return (jsxs(Popover, { trigger: iconElement, children: [title && jsx(Popover.Title, { children: title }), description && (jsx("p", { className: "text-sm text-muted-foreground", children: description })), helpLinkProps && (jsx(Button, { variant: "link", size: "sm", className: "mt-1 h-auto self-start p-0", ...helpLinkProps, href: helpLinkProps.href }))] }));
|
|
75
|
+
}
|
|
76
|
+
// Tooltip mode
|
|
77
|
+
if (helpIconProps.tooltipProps?.content) {
|
|
78
|
+
const side = SIDE_MAP[helpIconProps.tooltipProps.position ?? "auto"] ?? "top";
|
|
79
|
+
return (jsx(TooltipProvider, { children: jsxs(Tooltip, { children: [jsx(TooltipTrigger, { asChild: true, children: iconElement }), jsx(TooltipContent, { side: side, children: helpIconProps.tooltipProps.content })] }) }));
|
|
80
|
+
}
|
|
81
|
+
// Icon only (with optional onClick)
|
|
82
|
+
return iconElement;
|
|
83
|
+
};
|
|
84
|
+
return (jsxs(Label$1, { ref: ref, className: cn(className), ...otherProps, children: [children, required && (jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" })), renderHelpIcon()] }));
|
|
85
|
+
});
|
|
86
|
+
Label.displayName = "Label";
|
|
87
|
+
|
|
88
|
+
export { Label };
|
|
89
|
+
//# sourceMappingURL=Label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Label.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../../src/components/Label.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","import React, { forwardRef } from \"react\";\n\nimport { CircleHelpIcon } from \"lucide-react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\nimport { Label as PrimitiveLabel } from \"src/primitives/Label\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\nimport { Popover } from \"src/components/Popover\";\nimport { Button, type ButtonProps } from \"src/components/Button\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface HelpIconTooltipProps {\n /** Tooltip content. */\n content?: React.ReactNode;\n /** Tooltip position. */\n position?: string;\n}\n\ninterface HelpIconPopoverProps {\n /** Popover title. */\n title?: React.ReactNode;\n /** Popover description. */\n description?: React.ReactNode;\n /** Props for an optional help link button inside the popover. */\n helpLinkProps?: ButtonProps;\n}\n\ninterface HelpIconProps {\n /** Click handler on the help icon. */\n onClick?: () => void;\n /** Custom icon. Defaults to CircleHelpIcon. */\n icon?: IconProp;\n /** Show a tooltip on hover. */\n tooltipProps?: HelpIconTooltipProps;\n /** Show a popover on hover with title, description, and optional link. */\n popoverProps?: HelpIconPopoverProps;\n /** Additional class name for the help icon. */\n className?: string;\n}\n\nexport interface LabelProps extends React.ComponentProps<\n typeof PrimitiveLabel\n> {\n /** Shows a red asterisk after the label text. */\n required?: boolean;\n /** Props for the help icon (tooltip or popover mode). */\n helpIconProps?: HelpIconProps;\n /** Additional CSS class names. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip side mapping\n// ---------------------------------------------------------------------------\n\nconst SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n auto: \"top\",\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ required, helpIconProps, className, children, ...otherProps }, ref) => {\n const helpIcon = helpIconProps?.icon ?? CircleHelpIcon;\n\n const iconElement = (\n <span\n className={cn(\n \"inline-flex cursor-help text-muted-foreground transition-colors hover:text-foreground\",\n helpIconProps?.onClick && \"cursor-pointer\",\n helpIconProps?.className\n )}\n onClick={helpIconProps?.onClick}\n >\n {renderIcon(helpIcon, \"size-3.5\")}\n </span>\n );\n\n const renderHelpIcon = () => {\n if (!helpIconProps) return null;\n\n // Popover mode\n if (helpIconProps.popoverProps) {\n const { title, description, helpLinkProps } =\n helpIconProps.popoverProps;\n\n return (\n <Popover trigger={iconElement}>\n {title && <Popover.Title>{title}</Popover.Title>}\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n {helpLinkProps && (\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"mt-1 h-auto self-start p-0\"\n {...helpLinkProps}\n href={helpLinkProps.href}\n />\n )}\n </Popover>\n );\n }\n\n // Tooltip mode\n if (helpIconProps.tooltipProps?.content) {\n const side =\n SIDE_MAP[helpIconProps.tooltipProps.position ?? \"auto\"] ?? \"top\";\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{iconElement}</TooltipTrigger>\n <TooltipContent side={side}>\n {helpIconProps.tooltipProps.content}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n // Icon only (with optional onClick)\n return iconElement;\n };\n\n return (\n <PrimitiveLabel ref={ref} className={cn(className)} {...otherProps}>\n {children}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n {renderHelpIcon()}\n </PrimitiveLabel>\n );\n }\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label };\n"],"names":["CircleHelpIcon","_jsx","_jsxs","PrimitiveLabel"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -20,6 +20,7 @@ import '../index-CSMSzzKM.js';
|
|
|
20
20
|
import 'react-dom';
|
|
21
21
|
import '../floating-ui.react-dom-CcGbtPEK.js';
|
|
22
22
|
import '../index-DZXbzIgC.js';
|
|
23
|
+
import 'react-i18next';
|
|
23
24
|
import '../loader-circle-DycHUAWN.js';
|
|
24
25
|
import '../useCreatableItems-B0seQA1_.js';
|
|
25
26
|
import './shared.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectDropdown.js","sources":["../../src/components/MultiSelectDropdown.tsx"],"sourcesContent":["import type React from \"react\";\n\nimport {\n ComboboxList,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n} from \"src/primitives/Combobox\";\nimport { Spinner } from \"src/primitives/Spinner\";\nimport { OptionItem } from \"./OptionItem\";\nimport type { DropdownPassthroughProps } from \"./MultiSelectCombobox.types\";\n\ninterface MultiSelectDropdownProps extends DropdownPassthroughProps {\n labelForValue: (val: string) => string;\n testIdPrefix?: string;\n children?: React.ReactNode;\n}\n\nexport function MultiSelectDropdown({\n resolvedOptions,\n flatOptionsMap,\n isGrouped,\n isLoading,\n loadingMessage,\n emptyMessage,\n showCreateOption,\n labelForValue,\n testIdPrefix,\n hasMoreLazy,\n loaderCallbackRef,\n children,\n}: MultiSelectDropdownProps) {\n return (\n <ComboboxList\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-menu` }\n : {})}\n >\n {isLoading && (\n <div className=\"flex w-full justify-center py-2 text-center text-sm text-muted-foreground\">\n {loadingMessage}\n </div>\n )}\n {!isLoading && !showCreateOption && (\n <ComboboxEmpty>{emptyMessage}</ComboboxEmpty>\n )}\n {children ??\n (resolvedOptions.length > 0 || showCreateOption ? (\n isGrouped ? (\n <ComboboxCollection>\n {(group: { label: string; items: string[] }) => (\n <ComboboxGroup\n key={group.label || \"__create__\"}\n items={group.items}\n >\n {group.label && <ComboboxLabel>{group.label}</ComboboxLabel>}\n <ComboboxCollection>\n {(val: string) => (\n <OptionItem\n key={val}\n val={val}\n flatOptionsMap={flatOptionsMap}\n labelForValue={labelForValue}\n testIdPrefix={testIdPrefix}\n />\n )}\n </ComboboxCollection>\n </ComboboxGroup>\n )}\n </ComboboxCollection>\n ) : (\n <ComboboxCollection>\n {(val: string) => (\n <OptionItem\n key={val}\n val={val}\n flatOptionsMap={flatOptionsMap}\n labelForValue={labelForValue}\n testIdPrefix={testIdPrefix}\n />\n )}\n </ComboboxCollection>\n )\n ) : null)}\n {hasMoreLazy && (\n <div\n ref={loaderCallbackRef}\n className=\"flex w-full items-center justify-center py-3\"\n data-testid={\n testIdPrefix ? `${testIdPrefix}-lazy-loader` : \"lazy-loader\"\n }\n >\n <Spinner />\n </div>\n )}\n </ComboboxList>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MultiSelectDropdown.js","sources":["../../src/components/MultiSelectDropdown.tsx"],"sourcesContent":["import type React from \"react\";\n\nimport {\n ComboboxList,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n} from \"src/primitives/Combobox\";\nimport { Spinner } from \"src/primitives/Spinner\";\nimport { OptionItem } from \"./OptionItem\";\nimport type { DropdownPassthroughProps } from \"./MultiSelectCombobox.types\";\n\ninterface MultiSelectDropdownProps extends DropdownPassthroughProps {\n labelForValue: (val: string) => string;\n testIdPrefix?: string;\n children?: React.ReactNode;\n}\n\nexport function MultiSelectDropdown({\n resolvedOptions,\n flatOptionsMap,\n isGrouped,\n isLoading,\n loadingMessage,\n emptyMessage,\n showCreateOption,\n labelForValue,\n testIdPrefix,\n hasMoreLazy,\n loaderCallbackRef,\n children,\n}: MultiSelectDropdownProps) {\n return (\n <ComboboxList\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-menu` }\n : {})}\n >\n {isLoading && (\n <div className=\"flex w-full justify-center py-2 text-center text-sm text-muted-foreground\">\n {loadingMessage}\n </div>\n )}\n {!isLoading && !showCreateOption && (\n <ComboboxEmpty>{emptyMessage}</ComboboxEmpty>\n )}\n {children ??\n (resolvedOptions.length > 0 || showCreateOption ? (\n isGrouped ? (\n <ComboboxCollection>\n {(group: { label: string; items: string[] }) => (\n <ComboboxGroup\n key={group.label || \"__create__\"}\n items={group.items}\n >\n {group.label && <ComboboxLabel>{group.label}</ComboboxLabel>}\n <ComboboxCollection>\n {(val: string) => (\n <OptionItem\n key={val}\n val={val}\n flatOptionsMap={flatOptionsMap}\n labelForValue={labelForValue}\n testIdPrefix={testIdPrefix}\n />\n )}\n </ComboboxCollection>\n </ComboboxGroup>\n )}\n </ComboboxCollection>\n ) : (\n <ComboboxCollection>\n {(val: string) => (\n <OptionItem\n key={val}\n val={val}\n flatOptionsMap={flatOptionsMap}\n labelForValue={labelForValue}\n testIdPrefix={testIdPrefix}\n />\n )}\n </ComboboxCollection>\n )\n ) : null)}\n {hasMoreLazy && (\n <div\n ref={loaderCallbackRef}\n className=\"flex w-full items-center justify-center py-3\"\n data-testid={\n testIdPrefix ? `${testIdPrefix}-lazy-loader` : \"lazy-loader\"\n }\n >\n <Spinner />\n </div>\n )}\n </ComboboxList>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBM,SAAU,mBAAmB,CAAC,EAClC,eAAe,EACf,cAAc,EACd,SAAS,EACT,SAAS,EACT,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,QAAQ,GACiB,EAAA;AACzB,IAAA,QACEA,IAAA,CAAC,YAAY,EAAA,EAAA,IACN;AACH,cAAE,EAAE,aAAa,EAAE,CAAA,EAAG,YAAY,cAAc;AAChD,cAAE,EAAE,CAAC,EAAA,QAAA,EAAA,CAEN,SAAS,KACRC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,2EAA2E,EAAA,QAAA,EACvF,cAAc,EAAA,CACX,CACP,EACA,CAAC,SAAS,IAAI,CAAC,gBAAgB,KAC9BA,GAAA,CAAC,aAAa,EAAA,EAAA,QAAA,EAAE,YAAY,EAAA,CAAiB,CAC9C,EACA,QAAQ;AACP,iBAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,IAC7C,SAAS,IACPA,GAAA,CAAC,kBAAkB,EAAA,EAAA,QAAA,EAChB,CAAC,KAAyC,MACzCD,KAAC,aAAa,EAAA,EAEZ,KAAK,EAAE,KAAK,CAAC,KAAK,aAEjB,KAAK,CAAC,KAAK,IAAIC,GAAA,CAAC,aAAa,EAAA,EAAA,QAAA,EAAE,KAAK,CAAC,KAAK,EAAA,CAAiB,EAC5DA,IAAC,kBAAkB,EAAA,EAAA,QAAA,EAChB,CAAC,GAAW,MACXA,GAAA,CAAC,UAAU,IAET,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAAA,EAJrB,GAAG,CAKR,CACH,EAAA,CACkB,KAdhB,KAAK,CAAC,KAAK,IAAI,YAAY,CAelB,CACjB,EAAA,CACkB,KAErBA,GAAA,CAAC,kBAAkB,EAAA,EAAA,QAAA,EAChB,CAAC,GAAW,MACXA,GAAA,CAAC,UAAU,EAAA,EAET,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAAA,EAJrB,GAAG,CAKR,CACH,EAAA,CACkB,CACtB,IACC,IAAI,CAAC,EACV,WAAW,KACVA,aACE,GAAG,EAAE,iBAAiB,EACtB,SAAS,EAAC,8CAA8C,EAAA,aAAA,EAEtD,YAAY,GAAG,CAAA,EAAG,YAAY,CAAA,YAAA,CAAc,GAAG,aAAa,EAAA,QAAA,EAG9DA,IAAC,OAAO,EAAA,EAAA,CAAG,GACP,CACP,CAAA,EAAA,CACY;AAEnB;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Progress as PrimitiveProgress } from "src/primitives/Progress";
|
|
3
|
+
export interface ProgressProps extends React.ComponentProps<typeof PrimitiveProgress> {
|
|
4
|
+
/** Custom text to display below the bar (e.g., "3 of 10"). */
|
|
5
|
+
progressValue?: string;
|
|
6
|
+
/** Show percentage text below the bar. */
|
|
7
|
+
showPercentage?: boolean;
|
|
8
|
+
/** Additional CSS class names. */
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
declare const Progress: React.ForwardRefExoticComponent<Omit<ProgressProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export { Progress };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { c as cn } from '../utils-DdHUxIdC.js';
|
|
4
|
+
import { Progress as Progress$1 } from '../primitives/Progress.js';
|
|
5
|
+
import '../index-CiyxEyB0.js';
|
|
6
|
+
import '../index-DhnfW8wQ.js';
|
|
7
|
+
import 'react-dom';
|
|
8
|
+
import '../index-BtkPdosV.js';
|
|
9
|
+
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Component
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
const Progress = forwardRef(({ progressValue, showPercentage = false, className, value, ...otherProps }, ref) => {
|
|
14
|
+
const displayText = progressValue ?? (showPercentage ? `${value ?? 0}%` : null);
|
|
15
|
+
return (jsxs("div", { className: cn("w-full", className), children: [displayText && (jsx("p", { className: "mb-1.5 text-end text-xs text-muted-foreground", children: displayText })), jsx(Progress$1, { ref: ref, value: value, ...otherProps })] }));
|
|
16
|
+
});
|
|
17
|
+
Progress.displayName = "Progress";
|
|
18
|
+
|
|
19
|
+
export { Progress };
|
|
20
|
+
//# sourceMappingURL=Progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Progress.js","sources":["../../src/components/Progress.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Progress as PrimitiveProgress } from \"src/primitives/Progress\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ProgressProps extends React.ComponentProps<\n typeof PrimitiveProgress\n> {\n /** Custom text to display below the bar (e.g., \"3 of 10\"). */\n progressValue?: string;\n /** Show percentage text below the bar. */\n showPercentage?: boolean;\n /** Additional CSS class names. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n { progressValue, showPercentage = false, className, value, ...otherProps },\n ref\n ) => {\n const displayText =\n progressValue ?? (showPercentage ? `${value ?? 0}%` : null);\n\n return (\n <div className={cn(\"w-full\", className)}>\n {displayText && (\n <p className=\"mb-1.5 text-end text-xs text-muted-foreground\">\n {displayText}\n </p>\n )}\n <PrimitiveProgress ref={ref} value={value} {...otherProps} />\n </div>\n );\n }\n);\n\nProgress.displayName = \"Progress\";\n\nexport { Progress };\n"],"names":["_jsxs","_jsx","PrimitiveProgress"],"mappings":";;;;;;;;;AAoBA;AACA;AACA;AAEA,MAAM,QAAQ,GAAG,UAAU,CACzB,CACE,EAAE,aAAa,EAAE,cAAc,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,EAC1E,GAAG,KACD;AACF,IAAA,MAAM,WAAW,GACf,aAAa,KAAK,cAAc,GAAG,GAAG,KAAK,IAAI,CAAC,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC;AAE7D,IAAA,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,aACpC,WAAW,KACVC,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,+CAA+C,EAAA,QAAA,EACzD,WAAW,EAAA,CACV,CACL,EACDA,GAAA,CAACC,UAAiB,EAAA,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAA,GAAM,UAAU,EAAA,CAAI,CAAA,EAAA,CACzD;AAEV,CAAC;AAGH,QAAQ,CAAC,WAAW,GAAG,UAAU;;;;"}
|