@bioturing/components 0.46.4 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/components/base-menu/component.js +19 -21
  2. package/dist/components/base-menu/component.js.map +1 -1
  3. package/dist/components/base-menu/index.d.ts +1 -1
  4. package/dist/components/base-menu/index.d.ts.map +1 -1
  5. package/dist/components/base-menu/index.js +12 -7
  6. package/dist/components/base-menu/index.js.map +1 -1
  7. package/dist/components/base-menu/item.css +1 -1
  8. package/dist/components/base-menu/item.d.ts +13 -2
  9. package/dist/components/base-menu/item.d.ts.map +1 -1
  10. package/dist/components/base-menu/item.js +62 -47
  11. package/dist/components/base-menu/item.js.map +1 -1
  12. package/dist/components/base-menu/style.css +1 -1
  13. package/dist/components/checkbox/component.d.ts +2 -2
  14. package/dist/components/checkbox/component.d.ts.map +1 -1
  15. package/dist/components/checkbox/component.js.map +1 -1
  16. package/dist/components/choice-list/component.js +12 -12
  17. package/dist/components/combobox/component.d.ts.map +1 -1
  18. package/dist/components/combobox/component.js +121 -121
  19. package/dist/components/combobox/component.js.map +1 -1
  20. package/dist/components/combobox/style.css +1 -1
  21. package/dist/components/data-table/component.d.ts.map +1 -1
  22. package/dist/components/data-table/component.js +99 -79
  23. package/dist/components/data-table/component.js.map +1 -1
  24. package/dist/components/data-table/components/TableBody.d.ts +3 -2
  25. package/dist/components/data-table/components/TableBody.d.ts.map +1 -1
  26. package/dist/components/data-table/components/TableBody.js +106 -89
  27. package/dist/components/data-table/components/TableBody.js.map +1 -1
  28. package/dist/components/data-table/components/TableHeader.d.ts +3 -1
  29. package/dist/components/data-table/components/TableHeader.d.ts.map +1 -1
  30. package/dist/components/data-table/components/TableHeader.js +121 -93
  31. package/dist/components/data-table/components/TableHeader.js.map +1 -1
  32. package/dist/components/data-table/components/TablePagination.d.ts.map +1 -1
  33. package/dist/components/data-table/components/TablePagination.js +36 -31
  34. package/dist/components/data-table/components/TablePagination.js.map +1 -1
  35. package/dist/components/data-table/hooks.d.ts.map +1 -1
  36. package/dist/components/data-table/hooks.js +98 -83
  37. package/dist/components/data-table/hooks.js.map +1 -1
  38. package/dist/components/data-table/style.css +1 -1
  39. package/dist/components/data-table/types.d.ts +1 -1
  40. package/dist/components/data-table/types.d.ts.map +1 -1
  41. package/dist/components/data-table/utils.js +37 -30
  42. package/dist/components/data-table/utils.js.map +1 -1
  43. package/dist/components/data-table/variant-minimal.css +1 -0
  44. package/dist/components/data-table/variant-zebra.css +1 -0
  45. package/dist/components/dialog/Dialog.js +46 -46
  46. package/dist/components/dialog/Dialog.js.map +1 -1
  47. package/dist/components/dialog/dialog.css +1 -1
  48. package/dist/components/dropdown-menu/component.d.ts.map +1 -1
  49. package/dist/components/dropdown-menu/component.js +121 -144
  50. package/dist/components/dropdown-menu/component.js.map +1 -1
  51. package/dist/components/dropdown-menu/index.d.ts +2 -0
  52. package/dist/components/dropdown-menu/index.d.ts.map +1 -1
  53. package/dist/components/dropdown-menu/item.d.ts +7 -15
  54. package/dist/components/dropdown-menu/item.d.ts.map +1 -1
  55. package/dist/components/dropdown-menu/item.js +132 -81
  56. package/dist/components/dropdown-menu/item.js.map +1 -1
  57. package/dist/components/dropdown-menu/radio-group.d.ts +14 -0
  58. package/dist/components/dropdown-menu/radio-group.d.ts.map +1 -0
  59. package/dist/components/dropdown-menu/radio-group.js +45 -0
  60. package/dist/components/dropdown-menu/radio-group.js.map +1 -0
  61. package/dist/components/dropdown-menu/search-mode.d.ts +4 -0
  62. package/dist/components/dropdown-menu/search-mode.d.ts.map +1 -0
  63. package/dist/components/dropdown-menu/search-mode.js +6 -0
  64. package/dist/components/dropdown-menu/search-mode.js.map +1 -0
  65. package/dist/components/dropdown-menu/style.css +1 -1
  66. package/dist/components/dropdown-menu/submenu.d.ts +25 -0
  67. package/dist/components/dropdown-menu/submenu.d.ts.map +1 -0
  68. package/dist/components/dropdown-menu/submenu.js +96 -0
  69. package/dist/components/dropdown-menu/submenu.js.map +1 -0
  70. package/dist/components/dropdown-menu/types.d.ts +85 -12
  71. package/dist/components/dropdown-menu/types.d.ts.map +1 -1
  72. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +4 -8
  73. package/dist/components/dropdown-menu/useDropdownMenu.d.ts.map +1 -1
  74. package/dist/components/dropdown-menu/useDropdownMenu.js +108 -81
  75. package/dist/components/dropdown-menu/useDropdownMenu.js.map +1 -1
  76. package/dist/components/form/FormItem/ItemHolder.d.ts +6 -5
  77. package/dist/components/form/FormItem/ItemHolder.d.ts.map +1 -1
  78. package/dist/components/form/FormItem/ItemHolder.js +32 -29
  79. package/dist/components/form/FormItem/ItemHolder.js.map +1 -1
  80. package/dist/components/form/FormItem/index.d.ts +6 -0
  81. package/dist/components/form/FormItem/index.d.ts.map +1 -1
  82. package/dist/components/form/FormItem/index.js +138 -127
  83. package/dist/components/form/FormItem/index.js.map +1 -1
  84. package/dist/components/form/FormValidationContext.d.ts +5 -0
  85. package/dist/components/form/FormValidationContext.d.ts.map +1 -0
  86. package/dist/components/form/FormValidationContext.js +7 -0
  87. package/dist/components/form/FormValidationContext.js.map +1 -0
  88. package/dist/components/form/component.d.ts +6 -1
  89. package/dist/components/form/component.d.ts.map +1 -1
  90. package/dist/components/form/component.js +30 -20
  91. package/dist/components/form/component.js.map +1 -1
  92. package/dist/components/form/formValidationRule.d.ts +19 -0
  93. package/dist/components/form/formValidationRule.d.ts.map +1 -0
  94. package/dist/components/form/formValidationRule.js +22 -0
  95. package/dist/components/form/formValidationRule.js.map +1 -0
  96. package/dist/components/form/index.d.ts +2 -0
  97. package/dist/components/form/index.d.ts.map +1 -1
  98. package/dist/components/form/useFormValidation.d.ts +3 -0
  99. package/dist/components/form/useFormValidation.d.ts.map +1 -0
  100. package/dist/components/form/useFormValidation.js +18 -0
  101. package/dist/components/form/useFormValidation.js.map +1 -0
  102. package/dist/components/index.d.ts +2 -0
  103. package/dist/components/index.d.ts.map +1 -1
  104. package/dist/components/keyboard-shortcut/component.d.ts +2 -0
  105. package/dist/components/keyboard-shortcut/component.d.ts.map +1 -1
  106. package/dist/components/keyboard-shortcut/component.js +69 -49
  107. package/dist/components/keyboard-shortcut/component.js.map +1 -1
  108. package/dist/components/modal/Modal.d.ts +1 -1
  109. package/dist/components/modal/Modal.js +9 -9
  110. package/dist/components/modal/Modal.js.map +1 -1
  111. package/dist/components/modal/style.css +1 -1
  112. package/dist/components/select/component.js +29 -29
  113. package/dist/components/select/component.js.map +1 -1
  114. package/dist/components/theme-provider/component.d.ts +3 -1
  115. package/dist/components/theme-provider/component.d.ts.map +1 -1
  116. package/dist/components/theme-provider/component.js +32 -31
  117. package/dist/components/theme-provider/component.js.map +1 -1
  118. package/dist/components/theme-provider/context/index.d.ts +2 -1
  119. package/dist/components/theme-provider/context/index.d.ts.map +1 -1
  120. package/dist/components/theme-provider/context/provider.d.ts +2 -3
  121. package/dist/components/theme-provider/context/provider.d.ts.map +1 -1
  122. package/dist/components/theme-provider/context/provider.js +13 -6
  123. package/dist/components/theme-provider/context/provider.js.map +1 -1
  124. package/dist/components/theme-provider/context/themeStore.d.ts +15 -0
  125. package/dist/components/theme-provider/context/themeStore.d.ts.map +1 -1
  126. package/dist/components/theme-provider/context/themeStore.js +10 -9
  127. package/dist/components/theme-provider/context/themeStore.js.map +1 -1
  128. package/dist/components/theme-provider/style.css +1 -1
  129. package/dist/components/tooltip/component.d.ts.map +1 -1
  130. package/dist/components/tooltip/component.js +23 -12
  131. package/dist/components/tooltip/component.js.map +1 -1
  132. package/dist/index.js +273 -258
  133. package/dist/index.js.map +1 -1
  134. package/dist/metadata.d.ts +9 -0
  135. package/dist/metadata.d.ts.map +1 -1
  136. package/dist/metadata.js +14 -0
  137. package/dist/metadata.js.map +1 -1
  138. package/dist/stats.html +1 -1
  139. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.js","sources":["../../../src/components/dialog/Dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { XIcon } from \"@bioturing/assets\";\nimport { getConfirmLocale } from \"antd/es/modal/locale\";\nimport { useLocale } from \"antd/es/locale\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Button, type ButtonProps } from \"../button/component\";\nimport { useControlledState } from \"../hooks/useControlledState\";\nimport { IconButton } from \"../icon-button\";\nimport { Spin } from \"../spin\";\nimport { Stack } from \"../stack\";\nimport { useTheme } from \"../theme-provider\";\nimport { Truncate } from \"../truncate\";\nimport { clsx, useCls } from \"../utils\";\nimport type { ModalType } from \"../modal/functions\";\nimport {\n DIALOG_CLOSE_REASON_ESCAPE,\n DIALOG_DEFAULT_BODY_SCROLLABLE,\n DIALOG_DEFAULT_CANCEL_TEXT,\n DIALOG_DEFAULT_CENTERED,\n DIALOG_DEFAULT_OK_TEXT,\n DIALOG_DEFAULT_OPEN,\n DIALOG_DEFAULT_SIZE,\n DIALOG_SIZE_WIDTHS,\n type DialogBackground,\n type DialogSize,\n} from \"./constants\";\n\nexport type DialogCancelEvent = Event | React.MouseEvent<HTMLButtonElement>;\nexport type DialogOkEvent = React.MouseEvent<HTMLButtonElement>;\n\nconst DIALOG_ELEVATED_BACKGROUND_MAX_WIDTH = parseInt(\n DIALOG_SIZE_WIDTHS.medium,\n 10,\n);\n\nfunction resolveContentPadding(\n contentPadding: number | string | boolean | undefined,\n) {\n if (typeof contentPadding === \"undefined\") {\n return undefined;\n }\n\n if (contentPadding === false || contentPadding === 0) {\n return \"0\";\n }\n\n return typeof contentPadding === \"number\"\n ? `${contentPadding}px`\n : contentPadding;\n}\n\nfunction resolveBackground(\n size: DialogSize,\n background?: DialogBackground,\n): DialogBackground {\n if (background) {\n return background;\n }\n\n const dialogWidth = parseInt(DIALOG_SIZE_WIDTHS[size], 10);\n\n if (\n !Number.isNaN(dialogWidth) &&\n dialogWidth <= DIALOG_ELEVATED_BACKGROUND_MAX_WIDTH\n ) {\n return \"elevated\";\n }\n\n return \"container\";\n}\n\nexport interface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onCancel?: (event?: DialogCancelEvent) => void;\n /**\n * @deprecated Use `onCancel` instead.\n */\n onClose?: (event?: DialogCancelEvent) => void;\n onOk?: (event: DialogOkEvent) => void;\n title?: React.ReactNode;\n footer?: React.ReactNode;\n size?: DialogSize;\n loading?: boolean;\n confirmLoading?: boolean;\n hideOkButton?: boolean;\n hideCancelButton?: boolean;\n okText?: React.ReactNode;\n cancelText?: React.ReactNode;\n okType?: ButtonProps[\"type\"];\n contentPadding?: number | string | boolean;\n afterTitle?: React.ReactNode;\n beforeCloseButton?: React.ReactNode;\n afterCloseButton?: React.ReactNode;\n defaultFixedHeaderFooter?: boolean;\n centered?: boolean;\n type?: ModalType;\n background?: DialogBackground;\n bodyScrollable?: boolean;\n closeIcon?: React.ReactNode | false;\n closable?: boolean;\n maskClosable?: boolean;\n keyboard?: boolean;\n width?: number | string;\n style?: React.CSSProperties;\n destroyOnHidden?: boolean;\n afterOpenChange?: (open: boolean) => void;\n className?: string;\n rootClassName?: string;\n headerClassName?: string;\n bodyClassName?: string;\n footerClassName?: string;\n okButtonProps?: ButtonProps;\n cancelButtonProps?: ButtonProps;\n}\n\nexport const Dialog = ({\n children,\n open: openProp,\n defaultOpen = DIALOG_DEFAULT_OPEN,\n onCancel,\n onClose,\n onOk,\n title,\n footer,\n size,\n loading = false,\n confirmLoading = false,\n hideOkButton = false,\n hideCancelButton = false,\n okText = DIALOG_DEFAULT_OK_TEXT,\n cancelText = DIALOG_DEFAULT_CANCEL_TEXT,\n okType = \"primary\",\n contentPadding,\n afterTitle,\n beforeCloseButton,\n afterCloseButton,\n defaultFixedHeaderFooter = false,\n centered = DIALOG_DEFAULT_CENTERED,\n type = \"default\",\n background,\n bodyScrollable = DIALOG_DEFAULT_BODY_SCROLLABLE,\n closeIcon,\n closable = true,\n maskClosable = true,\n keyboard = true,\n width,\n style,\n destroyOnHidden = false,\n afterOpenChange,\n className,\n rootClassName,\n headerClassName,\n bodyClassName,\n footerClassName,\n okButtonProps,\n cancelButtonProps,\n}: DialogProps) => {\n const cls = useCls();\n const { className: themeClassName } = useTheme();\n const [actualOpen, setActualOpen] = useControlledState(\n openProp,\n undefined,\n defaultOpen,\n );\n const [locale] = useLocale(\"Modal\", getConfirmLocale());\n const [isContentOverflow, setIsContentOverflow] = useState(false);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n\n const resolvedSize =\n size ?? (type === \"default\" ? DIALOG_DEFAULT_SIZE : \"xsmall\");\n const isFullscreen = resolvedSize === \"fullscreen\";\n const hasCustomFooter = typeof footer !== \"undefined\";\n const showDefaultFooter =\n !hasCustomFooter && !(hideOkButton && hideCancelButton);\n const showCloseButton = closable && closeIcon !== false;\n const resolvedBackground = resolveBackground(resolvedSize, background);\n const resolvedCloseIcon =\n closeIcon === undefined ? <XIcon size={16} weight=\"bold\" /> : closeIcon;\n const resolvedContentPadding = resolveContentPadding(contentPadding);\n const okTextLocale = okText || locale?.okText;\n const cancelTextLocale = cancelText || locale?.cancelText;\n const closeAriaLabel =\n typeof cancelTextLocale === \"string\" ? cancelTextLocale : \"Close\";\n const resolvedWidth =\n typeof width === \"number\"\n ? `${width}px`\n : (width ?? DIALOG_SIZE_WIDTHS[resolvedSize]);\n\n const popupStyle = useMemo(\n () =>\n ({\n \"--ds-dialog-width\": resolvedWidth,\n \"--ds-dialog-bg\": `var(--ds-color-bg-${resolvedBackground})`,\n ...(resolvedContentPadding\n ? {\n \"--ds-dialog-content-padding\": resolvedContentPadding,\n }\n : {}),\n ...style,\n }) as React.CSSProperties,\n [resolvedBackground, resolvedContentPadding, resolvedWidth, style],\n );\n\n const observeBodyOverflow = useCallback((node: HTMLDivElement | null) => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n\n if (!node) {\n return;\n }\n\n const updateOverflowState = () => {\n setIsContentOverflow(node.scrollHeight > node.clientHeight);\n };\n\n const resizeObserver = new ResizeObserver(() => {\n updateOverflowState();\n });\n\n resizeObserver.observe(node);\n resizeObserverRef.current = resizeObserver;\n updateOverflowState();\n }, []);\n\n useEffect(() => {\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n };\n }, []);\n\n const handleCancel = useStableCallback((event?: DialogCancelEvent) => {\n if (confirmLoading) {\n return;\n }\n setActualOpen(false);\n onCancel?.(event);\n onClose?.(event);\n });\n\n const handleOk = useStableCallback((event: DialogOkEvent) => {\n if (confirmLoading) {\n return;\n }\n setActualOpen(false);\n onOk?.(event);\n });\n\n const handleOpenChange = useStableCallback(\n (\n nextOpen: boolean,\n eventDetails: Parameters<\n NonNullable<\n React.ComponentProps<typeof BaseDialog.Root>[\"onOpenChange\"]\n >\n >[1],\n ) => {\n if (nextOpen) {\n setActualOpen(true);\n return;\n }\n\n if (\n eventDetails.reason === DIALOG_CLOSE_REASON_ESCAPE &&\n keyboard === false\n ) {\n eventDetails.cancel();\n return;\n }\n\n if (confirmLoading) {\n eventDetails.cancel();\n return;\n }\n\n handleCancel(eventDetails.event);\n },\n );\n\n const hasHeader =\n title ||\n afterTitle ||\n beforeCloseButton ||\n afterCloseButton ||\n showCloseButton;\n const hasFooter = hasCustomFooter ? footer !== null : showDefaultFooter;\n const fixedChrome =\n defaultFixedHeaderFooter || isContentOverflow || isFullscreen;\n\n return (\n <BaseDialog.Root\n open={!!actualOpen}\n onOpenChange={handleOpenChange}\n onOpenChangeComplete={afterOpenChange}\n modal={true}\n disablePointerDismissal={!maskClosable}\n >\n <BaseDialog.Portal keepMounted={!destroyOnHidden}>\n <BaseDialog.Backdrop className={cls(\"dialog-mask\")} />\n <BaseDialog.Viewport\n className={clsx(\n themeClassName,\n rootClassName,\n cls(\n \"dialog-wrap\",\n centered ? \"dialog-centered\" : \"dialog-top-aligned\",\n isFullscreen && \"dialog-wrap-fullscreen\",\n loading && \"dialog-loading\",\n ),\n )}\n >\n <BaseDialog.Popup\n className={clsx(\n cls(\n \"dialog\",\n `dialog-size-${resolvedSize}`,\n fixedChrome && \"dialog-fixed\",\n bodyScrollable === false && \"dialog-no-body-scroll\",\n loading && \"dialog-loading\",\n ),\n className,\n )}\n style={popupStyle}\n aria-busy={loading || undefined}\n >\n <div className={cls(\"dialog-content\")}>\n {hasHeader && (\n <div className={clsx(cls(\"dialog-header\"), headerClassName)}>\n <Stack\n align=\"center\"\n gap={8}\n className={cls(\"dialog-title-row\")}\n >\n <Stack.Child grow>\n {title ? (\n <BaseDialog.Title className={cls(\"dialog-title\")}>\n {typeof title === \"string\" ? (\n <Truncate>{title}</Truncate>\n ) : (\n title\n )}\n </BaseDialog.Title>\n ) : (\n <div />\n )}\n </Stack.Child>\n <Stack.Child stack hug align=\"center\" gap={8}>\n {beforeCloseButton}\n {showCloseButton && (\n <BaseDialog.Close\n render={\n <IconButton\n className={cls(\"dialog-close\")}\n aria-label={closeAriaLabel}\n >\n {resolvedCloseIcon}\n </IconButton>\n }\n />\n )}\n {afterCloseButton}\n </Stack.Child>\n </Stack>\n {afterTitle ? (\n <div className={cls(\"dialog-header-after-title\")}>\n {afterTitle}\n </div>\n ) : null}\n </div>\n )}\n <div className={cls(\"dialog-body-wrapper\")}>\n <div\n ref={observeBodyOverflow}\n className={clsx(cls(\"dialog-body\"), bodyClassName)}\n >\n {children}\n </div>\n {loading ? (\n <div className={cls(\"dialog-loading-overlay\")}>\n <Spin />\n </div>\n ) : null}\n </div>\n\n {hasFooter && (\n <div className={clsx(cls(\"dialog-footer\"), footerClassName)}>\n {hasCustomFooter ? (\n footer\n ) : (\n <div className={cls(\"dialog-footer-actions\")}>\n {!hideCancelButton && (\n <BaseDialog.Close\n render={\n <Button type=\"default\" {...cancelButtonProps}>\n {cancelTextLocale}\n </Button>\n }\n />\n )}\n {!hideOkButton && (\n <Button\n type={okType}\n {...okButtonProps}\n disabled={confirmLoading || okButtonProps?.disabled}\n loading={confirmLoading || okButtonProps?.loading}\n onClick={handleOk}\n >\n {okTextLocale}\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n};\n"],"names":["DIALOG_ELEVATED_BACKGROUND_MAX_WIDTH","DIALOG_SIZE_WIDTHS","resolveContentPadding","contentPadding","resolveBackground","size","background","dialogWidth","Dialog","children","openProp","defaultOpen","DIALOG_DEFAULT_OPEN","onCancel","onClose","onOk","title","footer","loading","confirmLoading","hideOkButton","hideCancelButton","okText","DIALOG_DEFAULT_OK_TEXT","cancelText","DIALOG_DEFAULT_CANCEL_TEXT","okType","afterTitle","beforeCloseButton","afterCloseButton","defaultFixedHeaderFooter","centered","DIALOG_DEFAULT_CENTERED","type","bodyScrollable","DIALOG_DEFAULT_BODY_SCROLLABLE","closeIcon","closable","maskClosable","keyboard","width","style","destroyOnHidden","afterOpenChange","className","rootClassName","headerClassName","bodyClassName","footerClassName","okButtonProps","cancelButtonProps","cls","useCls","themeClassName","useTheme","actualOpen","setActualOpen","useControlledState","locale","useLocale","getConfirmLocale","isContentOverflow","setIsContentOverflow","useState","resizeObserverRef","useRef","resolvedSize","DIALOG_DEFAULT_SIZE","isFullscreen","hasCustomFooter","showDefaultFooter","showCloseButton","resolvedBackground","resolvedCloseIcon","jsx","XIcon","resolvedContentPadding","okTextLocale","cancelTextLocale","closeAriaLabel","resolvedWidth","popupStyle","useMemo","observeBodyOverflow","useCallback","node","updateOverflowState","resizeObserver","useEffect","handleCancel","useStableCallback","event","handleOk","handleOpenChange","nextOpen","eventDetails","DIALOG_CLOSE_REASON_ESCAPE","hasHeader","hasFooter","fixedChrome","BaseDialog","clsx","jsxs","Stack","Truncate","IconButton","Spin","Button"],"mappings":"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"}
1
+ {"version":3,"file":"Dialog.js","sources":["../../../src/components/dialog/Dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { XIcon } from \"@bioturing/assets\";\nimport { getConfirmLocale } from \"antd/es/modal/locale\";\nimport { useLocale } from \"antd/es/locale\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Button, type ButtonProps } from \"../button/component\";\nimport { useControlledState } from \"../hooks/useControlledState\";\nimport { IconButton } from \"../icon-button\";\nimport { Spin } from \"../spin\";\nimport { Stack } from \"../stack\";\nimport { useTheme } from \"../theme-provider\";\nimport { Truncate } from \"../truncate\";\nimport { clsx, useCls } from \"../utils\";\nimport type { ModalType } from \"../modal/functions\";\nimport {\n DIALOG_CLOSE_REASON_ESCAPE,\n DIALOG_DEFAULT_BODY_SCROLLABLE,\n DIALOG_DEFAULT_CANCEL_TEXT,\n DIALOG_DEFAULT_CENTERED,\n DIALOG_DEFAULT_OK_TEXT,\n DIALOG_DEFAULT_OPEN,\n DIALOG_DEFAULT_SIZE,\n DIALOG_SIZE_WIDTHS,\n type DialogBackground,\n type DialogSize,\n} from \"./constants\";\n\nexport type DialogCancelEvent = Event | React.MouseEvent<HTMLButtonElement>;\nexport type DialogOkEvent = React.MouseEvent<HTMLButtonElement>;\n\nconst DIALOG_ELEVATED_BACKGROUND_MAX_WIDTH = parseInt(\n DIALOG_SIZE_WIDTHS.medium,\n 10,\n);\n\nfunction resolveContentPadding(\n contentPadding: number | string | boolean | undefined,\n) {\n if (typeof contentPadding === \"undefined\") {\n return undefined;\n }\n\n if (contentPadding === false || contentPadding === 0) {\n return \"0\";\n }\n\n return typeof contentPadding === \"number\"\n ? `${contentPadding}px`\n : contentPadding;\n}\n\nfunction resolveBackground(\n size: DialogSize,\n background?: DialogBackground,\n): DialogBackground {\n if (background) {\n return background;\n }\n\n const dialogWidth = parseInt(DIALOG_SIZE_WIDTHS[size], 10);\n\n if (\n !Number.isNaN(dialogWidth) &&\n dialogWidth <= DIALOG_ELEVATED_BACKGROUND_MAX_WIDTH\n ) {\n return \"elevated\";\n }\n\n return \"container\";\n}\n\nexport interface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onCancel?: (event?: DialogCancelEvent) => void;\n /**\n * @deprecated Use `onCancel` instead.\n */\n onClose?: (event?: DialogCancelEvent) => void;\n onOk?: (event: DialogOkEvent) => void;\n title?: React.ReactNode;\n footer?: React.ReactNode;\n size?: DialogSize;\n loading?: boolean;\n confirmLoading?: boolean;\n hideOkButton?: boolean;\n hideCancelButton?: boolean;\n okText?: React.ReactNode;\n cancelText?: React.ReactNode;\n okType?: ButtonProps[\"type\"];\n contentPadding?: number | string | boolean;\n afterTitle?: React.ReactNode;\n beforeCloseButton?: React.ReactNode;\n afterCloseButton?: React.ReactNode;\n defaultFixedHeaderFooter?: boolean;\n centered?: boolean;\n type?: ModalType;\n background?: DialogBackground;\n bodyScrollable?: boolean;\n closeIcon?: React.ReactNode | false;\n closable?: boolean;\n maskClosable?: boolean;\n keyboard?: boolean;\n width?: number | string;\n style?: React.CSSProperties;\n destroyOnHidden?: boolean;\n afterOpenChange?: (open: boolean) => void;\n className?: string;\n rootClassName?: string;\n headerClassName?: string;\n bodyClassName?: string;\n footerClassName?: string;\n okButtonProps?: ButtonProps;\n cancelButtonProps?: ButtonProps;\n}\n\nexport const Dialog = ({\n children,\n open: openProp,\n defaultOpen = DIALOG_DEFAULT_OPEN,\n onCancel,\n onClose,\n onOk,\n title,\n footer,\n size,\n loading = false,\n confirmLoading = false,\n hideOkButton = false,\n hideCancelButton = false,\n okText = DIALOG_DEFAULT_OK_TEXT,\n cancelText = DIALOG_DEFAULT_CANCEL_TEXT,\n okType = \"primary\",\n contentPadding,\n afterTitle,\n beforeCloseButton,\n afterCloseButton,\n defaultFixedHeaderFooter = false,\n centered = DIALOG_DEFAULT_CENTERED,\n type = \"default\",\n background,\n bodyScrollable = DIALOG_DEFAULT_BODY_SCROLLABLE,\n closeIcon,\n closable = true,\n maskClosable = true,\n keyboard = true,\n width,\n style,\n destroyOnHidden = false,\n afterOpenChange,\n className,\n rootClassName,\n headerClassName,\n bodyClassName,\n footerClassName,\n okButtonProps,\n cancelButtonProps,\n}: DialogProps) => {\n const cls = useCls();\n const { className: themeClassName } = useTheme();\n const [actualOpen, setActualOpen] = useControlledState(\n openProp,\n undefined,\n defaultOpen,\n );\n const [locale] = useLocale(\"Modal\", getConfirmLocale());\n const [isContentOverflow, setIsContentOverflow] = useState(false);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n\n const resolvedSize =\n size ?? (type === \"default\" ? DIALOG_DEFAULT_SIZE : \"xsmall\");\n const isFullscreen = resolvedSize === \"fullscreen\";\n const hasCustomFooter = typeof footer !== \"undefined\";\n const showDefaultFooter =\n !hasCustomFooter && !(hideOkButton && hideCancelButton);\n const showCloseButton = closable && closeIcon !== false;\n const resolvedBackground = resolveBackground(resolvedSize, background);\n const resolvedCloseIcon =\n closeIcon === undefined ? <XIcon size={16} weight=\"bold\" /> : closeIcon;\n const resolvedContentPadding = resolveContentPadding(contentPadding);\n const okTextLocale = okText || locale?.okText;\n const cancelTextLocale = cancelText || locale?.cancelText;\n const closeAriaLabel =\n typeof cancelTextLocale === \"string\" ? cancelTextLocale : \"Close\";\n const resolvedWidth =\n typeof width === \"number\"\n ? `${width}px`\n : (width ?? DIALOG_SIZE_WIDTHS[resolvedSize]);\n\n const popupStyle = useMemo(\n () =>\n ({\n \"--ds-dialog-width\": resolvedWidth,\n \"--ds-dialog-bg\": `var(--ds-color-bg-${resolvedBackground})`,\n ...(resolvedContentPadding\n ? {\n \"--ds-dialog-body-content-padding\": resolvedContentPadding,\n }\n : {}),\n ...style,\n }) as React.CSSProperties,\n [resolvedBackground, resolvedContentPadding, resolvedWidth, style],\n );\n\n const observeBodyOverflow = useCallback((node: HTMLDivElement | null) => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n\n if (!node) {\n return;\n }\n\n const updateOverflowState = () => {\n setIsContentOverflow(node.scrollHeight > node.clientHeight);\n };\n\n const resizeObserver = new ResizeObserver(() => {\n updateOverflowState();\n });\n\n resizeObserver.observe(node);\n resizeObserverRef.current = resizeObserver;\n updateOverflowState();\n }, []);\n\n useEffect(() => {\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n };\n }, []);\n\n const handleCancel = useStableCallback((event?: DialogCancelEvent) => {\n if (confirmLoading) {\n return;\n }\n setActualOpen(false);\n onCancel?.(event);\n onClose?.(event);\n });\n\n const handleOk = useStableCallback((event: DialogOkEvent) => {\n if (confirmLoading) {\n return;\n }\n setActualOpen(false);\n onOk?.(event);\n });\n\n const handleOpenChange = useStableCallback(\n (\n nextOpen: boolean,\n eventDetails: Parameters<\n NonNullable<\n React.ComponentProps<typeof BaseDialog.Root>[\"onOpenChange\"]\n >\n >[1],\n ) => {\n if (nextOpen) {\n setActualOpen(true);\n return;\n }\n\n if (\n eventDetails.reason === DIALOG_CLOSE_REASON_ESCAPE &&\n keyboard === false\n ) {\n eventDetails.cancel();\n return;\n }\n\n if (confirmLoading) {\n eventDetails.cancel();\n return;\n }\n\n handleCancel(eventDetails.event);\n },\n );\n\n const hasHeader =\n title ||\n afterTitle ||\n beforeCloseButton ||\n afterCloseButton ||\n showCloseButton;\n const hasFooter = hasCustomFooter ? footer !== null : showDefaultFooter;\n const fixedChrome =\n defaultFixedHeaderFooter || isContentOverflow || isFullscreen;\n\n return (\n <BaseDialog.Root\n open={!!actualOpen}\n onOpenChange={handleOpenChange}\n onOpenChangeComplete={afterOpenChange}\n modal={true}\n disablePointerDismissal={!maskClosable}\n >\n <BaseDialog.Portal keepMounted={!destroyOnHidden}>\n <BaseDialog.Backdrop className={cls(\"dialog-mask\")} />\n <BaseDialog.Viewport\n className={clsx(\n themeClassName,\n rootClassName,\n cls(\n \"dialog-wrap\",\n centered ? \"dialog-centered\" : \"dialog-top-aligned\",\n isFullscreen && \"dialog-wrap-fullscreen\",\n loading && \"dialog-loading\",\n ),\n )}\n >\n <BaseDialog.Popup\n className={clsx(\n cls(\n \"dialog\",\n `dialog-size-${resolvedSize}`,\n fixedChrome && \"dialog-fixed\",\n bodyScrollable === false && \"dialog-no-body-scroll\",\n loading && \"dialog-loading\",\n ),\n className,\n )}\n style={popupStyle}\n aria-busy={loading || undefined}\n >\n <div className={cls(\"dialog-content\")}>\n {hasHeader && (\n <div className={clsx(cls(\"dialog-header\"), headerClassName)}>\n <Stack\n align=\"center\"\n gap={8}\n className={cls(\"dialog-title-row\")}\n >\n <Stack.Child grow>\n {title ? (\n <BaseDialog.Title className={cls(\"dialog-title\")}>\n {typeof title === \"string\" ? (\n <Truncate>{title}</Truncate>\n ) : (\n title\n )}\n </BaseDialog.Title>\n ) : (\n <div />\n )}\n </Stack.Child>\n <Stack.Child stack hug align=\"center\" gap={8}>\n {beforeCloseButton}\n {showCloseButton && (\n <BaseDialog.Close\n render={\n <IconButton\n className={cls(\"dialog-close\")}\n aria-label={closeAriaLabel}\n >\n {resolvedCloseIcon}\n </IconButton>\n }\n />\n )}\n {afterCloseButton}\n </Stack.Child>\n </Stack>\n {afterTitle ? (\n <div className={cls(\"dialog-header-after-title\")}>\n {afterTitle}\n </div>\n ) : null}\n </div>\n )}\n <div className={cls(\"dialog-body-wrapper\")}>\n <div\n ref={observeBodyOverflow}\n className={clsx(cls(\"dialog-body\"), bodyClassName)}\n >\n {children}\n </div>\n {loading ? (\n <div className={cls(\"dialog-loading-overlay\")}>\n <Spin />\n </div>\n ) : null}\n </div>\n\n {hasFooter && (\n <div className={clsx(cls(\"dialog-footer\"), footerClassName)}>\n {hasCustomFooter ? (\n footer\n ) : (\n <div className={cls(\"dialog-footer-actions\")}>\n {!hideCancelButton && (\n <BaseDialog.Close\n render={\n <Button type=\"default\" {...cancelButtonProps}>\n {cancelTextLocale}\n </Button>\n }\n />\n )}\n {!hideOkButton && (\n <Button\n type={okType}\n {...okButtonProps}\n disabled={confirmLoading || okButtonProps?.disabled}\n loading={confirmLoading || okButtonProps?.loading}\n onClick={handleOk}\n >\n {okTextLocale}\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n};\n"],"names":["DIALOG_ELEVATED_BACKGROUND_MAX_WIDTH","DIALOG_SIZE_WIDTHS","resolveContentPadding","contentPadding","resolveBackground","size","background","dialogWidth","Dialog","children","openProp","defaultOpen","DIALOG_DEFAULT_OPEN","onCancel","onClose","onOk","title","footer","loading","confirmLoading","hideOkButton","hideCancelButton","okText","DIALOG_DEFAULT_OK_TEXT","cancelText","DIALOG_DEFAULT_CANCEL_TEXT","okType","afterTitle","beforeCloseButton","afterCloseButton","defaultFixedHeaderFooter","centered","DIALOG_DEFAULT_CENTERED","type","bodyScrollable","DIALOG_DEFAULT_BODY_SCROLLABLE","closeIcon","closable","maskClosable","keyboard","width","style","destroyOnHidden","afterOpenChange","className","rootClassName","headerClassName","bodyClassName","footerClassName","okButtonProps","cancelButtonProps","cls","useCls","themeClassName","useTheme","actualOpen","setActualOpen","useControlledState","locale","useLocale","getConfirmLocale","isContentOverflow","setIsContentOverflow","useState","resizeObserverRef","useRef","resolvedSize","DIALOG_DEFAULT_SIZE","isFullscreen","hasCustomFooter","showDefaultFooter","showCloseButton","resolvedBackground","resolvedCloseIcon","jsx","XIcon","resolvedContentPadding","okTextLocale","cancelTextLocale","closeAriaLabel","resolvedWidth","popupStyle","useMemo","observeBodyOverflow","useCallback","node","updateOverflowState","resizeObserver","useEffect","handleCancel","useStableCallback","event","handleOk","handleOpenChange","nextOpen","eventDetails","DIALOG_CLOSE_REASON_ESCAPE","hasHeader","hasFooter","fixedChrome","BaseDialog","clsx","jsxs","Stack","Truncate","IconButton","Spin","Button"],"mappings":"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"}
@@ -1 +1 @@
1
- @layer components{.ds-dialog-mask{position:fixed;inset:0;z-index:var(--ds-z-index-modal-mask);background-color:var(--ds-color-bg-mask);transition:opacity .2s var(--ds-motion-ease-out)}.ds-dialog-mask[data-starting-style],.ds-dialog-mask[data-ending-style]{opacity:0}.ds-dialog-wrap{--ds-dialog-edge-padding: var(--ds-modal-edge-padding);position:fixed;inset:0;z-index:var(--ds-z-index-modal);display:flex;overflow-y:auto;padding:var(--ds-dialog-edge-padding);outline:0;-webkit-overflow-scrolling:touch}.ds-dialog-centered{align-items:center;justify-content:center}.ds-dialog-top-aligned{align-items:flex-start;justify-content:center;padding-top:calc(var(--ds-dialog-edge-padding) + 4rem)}.ds-dialog-wrap-fullscreen{padding:0}.ds-dialog{width:min(var(--ds-dialog-width),calc(100vw - var(--ds-dialog-edge-padding) * 2));max-width:100%;max-height:calc(100vh - var(--ds-dialog-edge-padding) * 2);margin:auto;padding-bottom:0;pointer-events:none;position:relative;top:0;transform-origin:center;transition:transform .2s var(--ds-motion-ease-out),opacity .2s var(--ds-motion-ease-out)}.ds-dialog[data-starting-style],.ds-dialog[data-ending-style]{transform:scale(.96);opacity:0}.ds-dialog-content{width:100%;max-height:inherit;display:flex;flex-direction:column;overflow:hidden;border-radius:var(--ds-border-radius-lg);background:var(--ds-dialog-bg, var(--ds-color-bg-elevated));box-shadow:var(--ds-box-shadow-secondary);color:var(--ds-color-text);pointer-events:auto}.ds-dialog-content:focus,.ds-dialog-content:focus-visible{outline:none}.ds-dialog-size-fullscreen{width:100vw;max-width:100vw;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh;top:0}.ds-dialog-size-fullscreen .ds-dialog-content{width:100%;height:100%;max-height:100%;border-radius:0}.ds-dialog-header,.ds-dialog-footer{flex:0 0 auto;background:transparent}.ds-dialog-header{padding:calc(var(--ds-modal-padding) * 2 / 3) var(--ds-modal-padding) 0 var(--ds-modal-padding)}.ds-dialog-footer{padding:0 var(--ds-modal-padding) var(--ds-modal-padding) var(--ds-modal-padding)}.ds-dialog-fixed .ds-dialog-header{border-bottom:1px solid var(--ds-color-split);padding:calc(var(--ds-modal-padding) / 2) var(--ds-modal-padding)}.ds-dialog-fixed .ds-dialog-footer{border-top:1px solid var(--ds-color-split);padding:calc(var(--ds-modal-padding) / 2) var(--ds-modal-padding)}.ds-dialog-title-row{min-width:0}.ds-dialog-title{display:block;min-width:0;color:var(--ds-color-text);font-size:var(--ds-font-size-lg);font-weight:600;line-height:var(--ds-line-height-lg)}.ds-dialog-header-after-title{margin-top:calc(var(--ds-modal-padding) / 3)}.ds-dialog-close{flex-shrink:0}.ds-dialog-body-wrapper{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;position:relative}.ds-dialog-body{flex:1 1 auto;min-height:0;overflow:auto;padding:var(--ds-dialog-content-padding, var(--ds-modal-padding))}.ds-dialog-no-body-scroll .ds-dialog{max-height:100%}.ds-dialog-no-body-scroll .ds-dialog-body{overflow:hidden;display:grid}.ds-dialog-no-body-scroll .ds-dialog-body>*{min-height:0}.ds-dialog-footer-actions{display:flex;justify-content:flex-end;align-items:center;gap:8px}.ds-dialog-loading-overlay{position:absolute;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;background-color:color-mix(in oklab,var(--ds-dialog-bg) 60%,transparent);margin-top:calc(var(--ds-dialog-header-height, 0));margin-bottom:calc(var(--ds-dialog-footer-height, 0))}@media(max-width:640px){.ds-dialog-wrap{--ds-dialog-edge-padding: 16px}.ds-dialog-top-aligned{padding-top:24px}.ds-dialog{max-height:calc(100vh - var(--ds-dialog-edge-padding) * 2)}}}
1
+ @layer components{.ds-dialog-mask{position:fixed;inset:0;z-index:var(--ds-z-index-modal-mask);background-color:var(--ds-color-bg-mask);transition:opacity .2s var(--ds-motion-ease-out)}.ds-dialog-mask[data-starting-style],.ds-dialog-mask[data-ending-style]{opacity:0}.ds-dialog-wrap{position:fixed;inset:0;z-index:var(--ds-z-index-modal);display:flex;overflow-y:auto;padding:var(--ds-modal-edge-padding);outline:0;-webkit-overflow-scrolling:touch}.ds-dialog-centered{align-items:center;justify-content:center}.ds-dialog-top-aligned{align-items:flex-start;justify-content:center;padding-top:calc(var(--ds-modal-edge-padding) + 4rem)}.ds-dialog-wrap-fullscreen{padding:0}.ds-dialog{width:min(var(--ds-dialog-width),calc(100vw - var(--ds-modal-edge-padding) * 2));max-width:100%;max-height:calc(100vh - var(--ds-modal-edge-padding) * 2);margin:auto;padding-bottom:0;pointer-events:none;position:relative;top:0;transform-origin:center;transition:transform .2s var(--ds-motion-ease-out),opacity .2s var(--ds-motion-ease-out)}.ds-dialog[data-starting-style],.ds-dialog[data-ending-style]{transform:scale(.96);opacity:0}.ds-dialog-content{width:100%;max-height:inherit;display:flex;flex-direction:column;overflow:hidden;border-radius:var(--ds-border-radius-lg);background:var(--ds-dialog-bg, var(--ds-color-bg-elevated));box-shadow:var(--ds-box-shadow-secondary);color:var(--ds-color-text);pointer-events:auto}.ds-dialog-content:focus,.ds-dialog-content:focus-visible{outline:none}.ds-dialog-size-fullscreen{width:100vw;max-width:100vw;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh;top:0}.ds-dialog-size-fullscreen .ds-dialog-content{width:100%;height:100%;max-height:100%;border-radius:0}.ds-dialog-header,.ds-dialog-footer{flex:0 0 auto;background:transparent}.ds-dialog-header{padding-block:var(--ds-modal-header-padding-block);padding-inline:var(--ds-modal-padding)}.ds-dialog-footer{padding-block:var(--ds-modal-footer-padding-block);padding-inline:var(--ds-modal-padding)}.ds-dialog-fixed .ds-dialog-header{border-bottom:1px solid var(--ds-color-split);padding-block:var(--ds-modal-fixed-header-padding-block);padding-inline:var(--ds-modal-padding)}.ds-dialog-fixed .ds-dialog-footer{border-top:1px solid var(--ds-color-split);padding-block:var(--ds-modal-fixed-footer-padding-block);padding-inline:var(--ds-modal-padding)}.ds-dialog-title-row{min-width:0}.ds-dialog-title{display:block;min-width:0;color:var(--ds-color-text);font-size:var(--ds-font-size-lg);font-weight:600;line-height:var(--ds-line-height-lg)}.ds-dialog-header-after-title{margin-top:var(--ds-modal-fixed-header-padding-block)}.ds-dialog-close{flex-shrink:0}.ds-dialog-body-wrapper{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;position:relative}.ds-dialog-body{flex:1 1 auto;min-height:0;overflow:auto;padding:var(--ds-dialog-body-content-padding, var(--ds-modal-padding))}.ds-dialog-no-body-scroll .ds-dialog{max-height:100%}.ds-dialog-no-body-scroll .ds-dialog-body{overflow:hidden;display:grid}.ds-dialog-no-body-scroll .ds-dialog-body>*{min-height:0}.ds-dialog-footer-actions{display:flex;justify-content:flex-end;align-items:center;gap:8px}.ds-dialog-loading-overlay{position:absolute;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;background-color:color-mix(in oklab,var(--ds-dialog-bg) 60%,transparent);margin-top:calc(var(--ds-dialog-header-height, 0));margin-bottom:calc(var(--ds-dialog-footer-height, 0))}}
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/component.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAcpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAmB,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,oBAAoB,EACpB,YAAY,CACb;IACC,0DAA0D;IAC1D,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D;;;OAGG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEvC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,cAAc,CAAC;IAC5C;;OAEG;IACH,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,GAAI,oXA2B1B,iBAAiB,4CA+OnB,CAAC"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/component.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAcpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,EAAmB,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC;IACjF,0DAA0D;IAC1D,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D;;;OAGG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEvC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,cAAc,CAAC;IAC5C;;OAEG;IACH,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,GAAI,oXA2B1B,iBAAiB,4CAgNnB,CAAC"}
@@ -1,64 +1,61 @@
1
1
  "use client";
2
- import { jsxs as d, jsx as e } from "react/jsx-runtime";
3
- import { Menu as l } from "@base-ui/react/menu";
2
+ import { jsxs as m, jsx as e } from "react/jsx-runtime";
3
+ import { Menu as u } from "@base-ui/react/menu";
4
4
  import { Combobox as t } from "@base-ui/react/combobox";
5
- import { useRef as ne, useState as te, useCallback as g, useMemo as f } from "react";
6
- import { FormItemInputContext as ie } from "antd/es/form/context";
7
- import { PopupPanelSize as K } from "../popup-panel/constants.js";
8
- import { useDropdownMenu as pe } from "./useDropdownMenu.js";
9
- import { BaseMenu as U } from "../base-menu/index.js";
10
- import { parseAntdPlacement as me } from "../utils/placement.js";
11
- import { ScrollArea as q } from "../scroll-area/component.js";
12
- import { createRenderProp as de } from "../utils/renderProp.js";
13
- import { DROPDOWN_COLLISION_AVOIDANCE as le } from "../utils/constants.js";
14
- import { Input as ue } from "../input/component.js";
15
- import { useControlledState as ce } from "../hooks/useControlledState.js";
16
- import { useCls as ae } from "../utils/antdUtils.js";
17
- import { useTheme as se } from "../theme-provider/context/themeStore.js";
5
+ import { useRef as ne, useState as te, useEffect as ie, useCallback as f, useMemo as g } from "react";
6
+ import { FormItemInputContext as pe } from "antd/es/form/context";
7
+ import { PopupPanelSize as q } from "../popup-panel/constants.js";
8
+ import { hasUnsupportedDropdownMenuSearchItems as de } from "./search-mode.js";
9
+ import { useDropdownMenu as me } from "./useDropdownMenu.js";
10
+ import { BaseMenu as z } from "../base-menu/index.js";
11
+ import { parseAntdPlacement as ue } from "../utils/placement.js";
12
+ import { createRenderProp as le } from "../utils/renderProp.js";
13
+ import { DROPDOWN_COLLISION_AVOIDANCE as ce } from "../utils/constants.js";
14
+ import { Input as ae } from "../input/component.js";
15
+ import { useControlledState as se } from "../hooks/useControlledState.js";
16
+ import { useCls as fe } from "../utils/antdUtils.js";
17
+ import { useTheme as ge } from "../theme-provider/context/themeStore.js";
18
+ import { ScrollArea as B } from "../scroll-area/component.js";
18
19
  import { clsx as h } from "../utils/cn.js";
19
- import { reactNodeToString as ge } from "../utils/reactToString.js";
20
- const _e = ({
21
- children: y,
22
- items: z,
23
- placement: B,
24
- openOnHover: O,
25
- open: J,
26
- onOpenChange: Q,
27
- defaultOpen: W = !1,
28
- className: N,
29
- itemRender: X,
20
+ import { reactNodeToString as he } from "../utils/reactToString.js";
21
+ const Ge = ({
22
+ children: D,
23
+ items: b,
24
+ placement: J,
25
+ openOnHover: N,
26
+ open: Q,
27
+ onOpenChange: W,
28
+ defaultOpen: X = !1,
29
+ className: E,
30
+ itemRender: Y,
30
31
  classNames: n,
31
- size: P = "auto",
32
- showSearch: u,
33
- inCombobox: T,
32
+ size: w = "auto",
33
+ showSearch: l,
34
+ inCombobox: M,
34
35
  searchProps: i = {
35
36
  placeholder: "Search..."
36
37
  },
37
- popupMatchTriggerWidth: A,
38
- beforeList: b,
39
- afterList: w,
40
- keepOpenOnSelect: Y,
41
- highlightedItemKey: fe,
42
- selectedItemKeys: Z,
43
- getItemKeywords: $,
44
- showCheckbox: S,
45
- itemLabelRender: ee,
46
- nativeButton: D = !0
38
+ popupMatchTriggerWidth: T,
39
+ beforeList: P,
40
+ afterList: S,
41
+ keepOpenOnSelect: Z,
42
+ highlightedItemKey: be,
43
+ selectedItemKeys: $,
44
+ getItemKeywords: ee,
45
+ showCheckbox: v,
46
+ itemLabelRender: oe,
47
+ nativeButton: V = !0
47
48
  }) => {
48
- const oe = typeof T == "boolean" ? T : u, [M, C] = ce(
49
- J,
50
- Q,
51
- W
52
- ), o = ae(), { className: c } = se(), a = me(B), V = ne(null), { itemGroups: v, renderGroup: I } = pe({
53
- items: z,
54
- keepOpenOnSelect: Y,
55
- selectedItemKeys: Z,
56
- showCheckbox: S,
57
- getItemKeywords: $,
58
- itemLabelRender: ee,
59
- itemRender: X,
60
- inCombobox: oe,
61
- onOpenChange: C,
49
+ const C = typeof M == "boolean" ? M : l, [A, x] = se(Q, W, X), o = fe(), { className: c } = ge(), a = ue(J), _ = ne(null), { itemGroups: I, renderGroup: y } = me({
50
+ items: b,
51
+ keepOpenOnSelect: Z,
52
+ selectedItemKeys: $,
53
+ showCheckbox: v,
54
+ getItemKeywords: ee,
55
+ itemLabelRender: oe,
56
+ itemRender: Y,
57
+ inCombobox: C,
58
+ onOpenChange: x,
62
59
  classNames: {
63
60
  item: n?.item,
64
61
  itemIcon: n?.itemIcon,
@@ -67,97 +64,77 @@ const _e = ({
67
64
  groupLabel: n?.groupLabel,
68
65
  divider: n?.divider
69
66
  }
70
- }), [x, re] = te(""), E = g(() => {
71
- if (!u)
72
- return /* @__PURE__ */ d("div", { className: o("dropdown-menu-container"), children: [
73
- b,
74
- /* @__PURE__ */ e(q, { fadeEdges: !0, children: v.map(I) }),
75
- w
67
+ }), [O, re] = te("");
68
+ ie(() => {
69
+ !C || process.env.NODE_ENV === "production" || de(b) && console.warn(
70
+ "DropdownMenu search/combobox mode only supports flat `item`, `header`, and `divider` entries. Checkbox, radio-group, and submenu items are ignored."
71
+ );
72
+ }, [C, b]);
73
+ const j = f(() => {
74
+ if (!l)
75
+ return /* @__PURE__ */ m("div", { className: o("dropdown-menu-container"), children: [
76
+ P,
77
+ /* @__PURE__ */ e(B, { fadeEdges: !0, children: I.map(y) }),
78
+ S
76
79
  ] });
77
- const r = /* @__PURE__ */ e(ie.Provider, { value: {}, children: /* @__PURE__ */ e(
80
+ const r = /* @__PURE__ */ e(pe.Provider, { value: {}, children: /* @__PURE__ */ e(
78
81
  t.Input,
79
82
  {
80
83
  placeholder: i?.placeholder || "Search",
81
84
  render: ({ ref: s, ...p }) => /* @__PURE__ */ e(
82
- ue,
85
+ ae,
83
86
  {
84
87
  ...p,
85
- ref: (m) => {
86
- if (!m || !m.input) return;
87
- s(m.input);
88
+ ref: (d) => {
89
+ if (!d || !d.input) return;
90
+ s(d.input);
88
91
  },
89
92
  allowClear: !0,
90
93
  placeholder: i?.placeholder || "Search",
91
- value: x,
92
- onChange: (m) => re(m.target.value),
93
- className: h(
94
- o("dropdown-menu-search"),
95
- i?.className
96
- )
94
+ value: O,
95
+ onChange: (d) => re(d.target.value),
96
+ className: h(o("dropdown-menu-search"), i?.className)
97
97
  }
98
98
  ),
99
99
  ...i
100
100
  },
101
101
  "search"
102
- ) }), R = /* @__PURE__ */ d(q, { fadeEdges: !0, children: [
102
+ ) }), R = /* @__PURE__ */ m(B, { fadeEdges: !0, children: [
103
103
  /* @__PURE__ */ e(t.Empty, { className: o("dropdown-menu-empty"), children: "No results found." }),
104
- /* @__PURE__ */ e(t.List, { className: o("dropdown-menu-list"), children: (s, p) => I(s, p) })
104
+ /* @__PURE__ */ e(t.List, { className: o("dropdown-menu-list"), children: (s, p) => y(s, p) })
105
105
  ] });
106
- return /* @__PURE__ */ d("div", { className: o("dropdown-menu-container"), children: [
107
- /* @__PURE__ */ e(
108
- "div",
109
- {
110
- className: o("dropdown-menu-search-wrapper"),
111
- children: r
112
- }
113
- ),
114
- b,
106
+ return /* @__PURE__ */ m("div", { className: o("dropdown-menu-container"), children: [
107
+ /* @__PURE__ */ e("div", { className: o("dropdown-menu-search-wrapper"), children: r }),
108
+ P,
115
109
  R,
116
- w
110
+ S
117
111
  ] });
118
- }, [
119
- u,
120
- o,
121
- i,
122
- x,
123
- b,
124
- w,
125
- v,
126
- I
127
- ]), _ = g(
112
+ }, [l, o, i, O, P, S, I, y]), k = f(
128
113
  (r, R) => {
129
114
  const { openOnHover: s, ...p } = r;
130
- return de(y, p, R);
115
+ return le(D, p, R);
131
116
  },
132
- [y]
133
- ), j = f(
117
+ [D]
118
+ ), G = g(
134
119
  () => ({
135
- ref: V,
136
- openOnHover: O,
137
- nativeButton: D,
138
- className: h(
139
- o("dropdown-menu-trigger"),
140
- n?.trigger,
141
- c
142
- ),
143
- render: _
120
+ ref: _,
121
+ openOnHover: N,
122
+ nativeButton: V,
123
+ className: h(o("dropdown-menu-trigger"), n?.trigger, c),
124
+ render: k
144
125
  }),
145
- [V, O, D, o, n?.trigger, c, _]
146
- ), G = g(
147
- (r) => /* @__PURE__ */ e(U.Root, { ...r }),
148
- []
126
+ [_, N, V, o, n?.trigger, c, k]
149
127
  ), L = f(
128
+ (r) => /* @__PURE__ */ e(z.Root, { ...r }),
129
+ []
130
+ ), U = g(
150
131
  () => ({
151
132
  side: a.side,
152
133
  align: a.align,
153
134
  sideOffset: 4,
154
- className: h(
155
- o("dropdown-menu-root"),
156
- c,
157
- n?.root
158
- ),
159
- collisionAvoidance: le,
160
- render: G
135
+ className: h(o("dropdown-menu-root"), c, n?.root),
136
+ collisionAvoidance: ce,
137
+ render: L
161
138
  }),
162
139
  [
163
140
  a.side,
@@ -165,60 +142,60 @@ const _e = ({
165
142
  o,
166
143
  c,
167
144
  n?.root,
168
- G
145
+ L
169
146
  ]
170
- ), k = g(
171
- (r) => /* @__PURE__ */ e(U.Popup, { ...r }),
172
- []
173
147
  ), F = f(
148
+ (r) => /* @__PURE__ */ e(z.Popup, { ...r }),
149
+ []
150
+ ), H = g(
174
151
  () => ({
175
- "--size-width": P in K ? K[P] : void 0
152
+ "--size-width": w in q ? q[w] : void 0
176
153
  }),
177
- [P]
178
- ), H = f(
154
+ [w]
155
+ ), K = g(
179
156
  () => ({
180
157
  className: h(
181
158
  o(
182
159
  "dropdown-menu",
183
- S && "dropdown-menu-show-checkbox",
184
- A && "dropdown-menu-match-trigger-width"
160
+ v && "dropdown-menu-show-checkbox",
161
+ T && "dropdown-menu-match-trigger-width"
185
162
  ),
186
- N,
163
+ E,
187
164
  n?.popup
188
165
  ),
189
- style: F,
190
- render: k
166
+ style: H,
167
+ render: F
191
168
  }),
192
169
  [
193
170
  o,
194
- S,
195
- A,
196
- N,
171
+ v,
172
+ T,
173
+ E,
197
174
  n?.popup,
198
- F,
199
- k
175
+ H,
176
+ F
200
177
  ]
201
178
  );
202
- return u ? /* @__PURE__ */ d(
179
+ return l ? /* @__PURE__ */ m(
203
180
  t.Root,
204
181
  {
205
- open: M,
206
- onOpenChange: C,
207
- items: v,
208
- itemToStringLabel: (r) => r.type == "item" ? ge(r.label) : "",
182
+ open: A,
183
+ onOpenChange: x,
184
+ items: I,
185
+ itemToStringLabel: (r) => r.type == "item" ? he(r.label) : "",
209
186
  itemToStringValue: (r) => r.type == "item" ? String(r.key) : "",
210
- inputValue: x,
187
+ inputValue: O,
211
188
  children: [
212
- /* @__PURE__ */ e(t.Trigger, { ...j }),
213
- /* @__PURE__ */ e(t.Portal, { children: /* @__PURE__ */ e(t.Positioner, { ...L, children: /* @__PURE__ */ e(t.Popup, { ...H, children: E() }) }) })
189
+ /* @__PURE__ */ e(t.Trigger, { ...G }),
190
+ /* @__PURE__ */ e(t.Portal, { children: /* @__PURE__ */ e(t.Positioner, { ...U, children: /* @__PURE__ */ e(t.Popup, { ...K, children: j() }) }) })
214
191
  ]
215
192
  }
216
- ) : /* @__PURE__ */ d(l.Root, { open: M, onOpenChange: C, children: [
217
- /* @__PURE__ */ e(l.Trigger, { ...j }),
218
- /* @__PURE__ */ e(l.Portal, { children: /* @__PURE__ */ e(l.Positioner, { ...L, children: /* @__PURE__ */ e(l.Popup, { ...H, children: E() }) }) })
193
+ ) : /* @__PURE__ */ m(u.Root, { open: A, onOpenChange: x, children: [
194
+ /* @__PURE__ */ e(u.Trigger, { ...G }),
195
+ /* @__PURE__ */ e(u.Portal, { children: /* @__PURE__ */ e(u.Positioner, { ...U, children: /* @__PURE__ */ e(u.Popup, { ...K, children: j() }) }) })
219
196
  ] });
220
197
  };
221
198
  export {
222
- _e as DropdownMenu
199
+ Ge as DropdownMenu
223
200
  };
224
201
  //# sourceMappingURL=component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/dropdown-menu/component.tsx"],"sourcesContent":["\"use client\";\nimport { Menu } from \"@base-ui/react/menu\";\nimport { Combobox, type ComboboxTriggerState } from \"@base-ui/react/combobox\";\nimport { type PopoverProps } from \"antd/es/popover\";\nimport { useCallback, useMemo, useRef, useState, RefCallback } from \"react\";\nimport {\n clsx,\n DROPDOWN_COLLISION_AVOIDANCE,\n parseAntdPlacement,\n reactNodeToString,\n useCls,\n createRenderProp,\n} from \"../utils\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { FormItemInputContext } from \"antd/es/form/context\";\n\n// Import component-specific styles\nimport { PopupPanelSize } from \"../popup-panel/constants\";\n\nimport { DropdownMenuItemType } from \"./types\";\nimport { useDropdownMenu, UseDropdownMenuProps } from \"./useDropdownMenu\";\nimport { useControlledState } from \"../hooks\";\n\nimport { useTheme } from \"../theme-provider\";\nimport { BaseMenu } from \"../base-menu\";\n\nimport { Input } from \"../input\";\n\nexport interface DropdownMenuProps extends Omit<\n UseDropdownMenuProps,\n \"classNames\"\n> {\n /** Array of menu items to be displayed in the dropdown */\n items: DropdownMenuItemType[];\n /** Custom render function for the trigger element */\n children?: React.ComponentProps<typeof Menu.Trigger>[\"render\"];\n /**\n * Placement of the dropdown relative to the trigger element\n * @default \"bottomLeft\"\n */\n placement?: PopoverProps[\"placement\"];\n /**\n * Whether to open the dropdown on hover instead of click\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Controlled open state of the dropdown\n */\n open?: boolean;\n /**\n * Callback fired when the dropdown open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Default open state of the dropdown\n */\n defaultOpen?: boolean;\n /**\n * Additional CSS class for the dropdown component\n */\n className?: string;\n /**\n * Custom class names for different parts of the dropdown\n * @default {}\n */\n classNames?: {\n root?: string;\n trigger?: string;\n popup?: string;\n itemIcon?: string;\n itemText?: string;\n positioner?: string;\n } & UseDropdownMenuProps[\"classNames\"];\n\n /**\n * Whether to show search input\n * @default false\n */\n showSearch?: boolean;\n /**\n * Size of the dropdown menu\n * @default \"auto\"\n */\n size?: \"auto\" | keyof typeof PopupPanelSize;\n /**\n * Search placeholder\n */\n searchProps?: {\n placeholder?: string;\n className?: string;\n };\n /**\n * Whether to match the width of the popup with the trigger\n * @default false\n */\n popupMatchTriggerWidth?: boolean;\n /**\n * Content to display before the list\n */\n beforeList?: React.ReactNode;\n /**\n * Content to display after the list\n */\n afterList?: React.ReactNode;\n /**\n * Whether the trigger should act as a native button element.\n * Set to false when using non-button elements (like Typography.Link) as trigger\n * to suppress Base UI warnings and remove native button semantics.\n * @default true\n */\n nativeButton?: boolean;\n}\n\nexport const DropdownMenu = ({\n children,\n items,\n placement,\n openOnHover,\n open: outsideOpen,\n onOpenChange: outsideOnOpenChange,\n defaultOpen = false,\n className,\n itemRender,\n classNames,\n size = \"auto\",\n showSearch,\n inCombobox: inComboboxProp,\n searchProps = {\n placeholder: \"Search...\",\n },\n popupMatchTriggerWidth,\n beforeList,\n afterList,\n keepOpenOnSelect,\n highlightedItemKey,\n selectedItemKeys,\n getItemKeywords,\n showCheckbox,\n itemLabelRender,\n nativeButton = true,\n}: DropdownMenuProps) => {\n const inCombobox =\n typeof inComboboxProp === \"boolean\" ? inComboboxProp : showSearch;\n const [open, onOpenChange] = useControlledState(\n outsideOpen,\n outsideOnOpenChange,\n defaultOpen,\n );\n const cls = useCls();\n const { className: themeClassName } = useTheme();\n const baseUIPlacement = parseAntdPlacement(placement);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { itemGroups, renderGroup } = useDropdownMenu({\n items,\n keepOpenOnSelect,\n highlightedItemKey,\n selectedItemKeys,\n showCheckbox,\n getItemKeywords,\n itemLabelRender,\n itemRender,\n inCombobox,\n onOpenChange,\n classNames: {\n item: classNames?.item,\n itemIcon: classNames?.itemIcon,\n itemSuffix: classNames?.itemSuffix,\n group: classNames?.group,\n groupLabel: classNames?.groupLabel,\n divider: classNames?.divider,\n },\n });\n\n const [searchValue, setSearchValue] = useState(\"\");\n\n const renderMenuInner = useCallback(() => {\n if (!showSearch) {\n return (\n <div className={cls(\"dropdown-menu-container\")}>\n {beforeList}\n <ScrollArea fadeEdges>{itemGroups.map(renderGroup)}</ScrollArea>\n {afterList}\n </div>\n );\n }\n\n const searchInput = (\n <FormItemInputContext.Provider value={{}}>\n <Combobox.Input\n key=\"search\"\n placeholder={searchProps?.placeholder || \"Search\"}\n render={({ ref, ...props }) => (\n <Input\n {...props}\n ref={(antdInputRef) => {\n if (!antdInputRef || !antdInputRef.input) return;\n const comboboxRef = ref as RefCallback<HTMLInputElement>;\n comboboxRef(antdInputRef.input);\n }}\n allowClear\n placeholder={searchProps?.placeholder || \"Search\"}\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n className={clsx(\n cls(\"dropdown-menu-search\"),\n searchProps?.className,\n )}\n />\n )}\n {...searchProps}\n />\n </FormItemInputContext.Provider>\n );\n\n const listContent = (\n <ScrollArea fadeEdges>\n <Combobox.Empty className={cls(\"dropdown-menu-empty\")}>\n No results found.\n </Combobox.Empty>\n <Combobox.List className={cls(\"dropdown-menu-list\")}>\n {(group, i) => renderGroup(group, i)}\n </Combobox.List>\n </ScrollArea>\n );\n\n return (\n <div className={cls(\"dropdown-menu-container\")}>\n <div\n className={cls(\"dropdown-menu-search-wrapper\")}\n >\n {searchInput}\n </div>\n {beforeList}\n {listContent}\n {afterList}\n </div>\n );\n }, [\n showSearch,\n cls,\n searchProps,\n searchValue,\n beforeList,\n afterList,\n itemGroups,\n renderGroup,\n ]);\n\n // Stable trigger render — useCallback since it's called during render phase\n const triggerRender = useCallback(\n (\n props: React.HTMLProps<HTMLElement> & { openOnHover?: boolean },\n state: ComboboxTriggerState\n ) => {\n const { openOnHover: _openOnHover, ...rest } = props;\n return createRenderProp(children, rest, state);\n },\n [children]\n );\n\n const commonTriggerProps = useMemo(\n () => ({\n ref: buttonRef,\n openOnHover,\n nativeButton,\n className: clsx(\n cls(\"dropdown-menu-trigger\"),\n classNames?.trigger,\n themeClassName,\n ),\n render: triggerRender,\n }),\n [buttonRef, openOnHover, nativeButton, cls, classNames?.trigger, themeClassName, triggerRender]\n );\n\n // Stable positioner render — useCallback since it's called during render phase\n const positionerRender = useCallback(\n (props: React.ComponentPropsWithoutRef<\"div\">) => (\n <BaseMenu.Root {...props} />\n ),\n []\n );\n\n const commonPositionerProps = useMemo(\n () => ({\n side: baseUIPlacement.side,\n align: baseUIPlacement.align,\n sideOffset: 4,\n className: clsx(\n cls(\"dropdown-menu-root\"),\n themeClassName,\n classNames?.root,\n ),\n collisionAvoidance: DROPDOWN_COLLISION_AVOIDANCE,\n render: positionerRender,\n }),\n [\n baseUIPlacement.side,\n baseUIPlacement.align,\n cls,\n themeClassName,\n classNames?.root,\n positionerRender,\n ]\n );\n\n // Stable popup render — useCallback since it's called during render phase\n const popupRender = useCallback(\n (props: React.ComponentPropsWithoutRef<\"div\">) => (\n <BaseMenu.Popup {...props} />\n ),\n []\n );\n\n const popupStyle = useMemo(\n () =>\n ({\n \"--size-width\": size in PopupPanelSize ? PopupPanelSize[size] : undefined,\n }) as React.CSSProperties,\n [size]\n );\n\n const commonPopupProps = useMemo(\n () => ({\n className: clsx(\n cls(\n \"dropdown-menu\",\n showCheckbox && \"dropdown-menu-show-checkbox\",\n popupMatchTriggerWidth && \"dropdown-menu-match-trigger-width\",\n ),\n className,\n classNames?.popup,\n ),\n style: popupStyle,\n render: popupRender,\n }),\n [\n cls,\n showCheckbox,\n popupMatchTriggerWidth,\n className,\n classNames?.popup,\n popupStyle,\n popupRender,\n ]\n );\n\n return showSearch ? (\n <Combobox.Root<DropdownMenuItemType>\n open={open}\n onOpenChange={onOpenChange}\n items={itemGroups}\n itemToStringLabel={(item) =>\n item.type == \"item\" ? reactNodeToString(item.label) : \"\"\n }\n itemToStringValue={(item) =>\n item.type == \"item\" ? String(item.key) : \"\"\n }\n inputValue={searchValue}\n >\n <Combobox.Trigger {...commonTriggerProps} />\n <Combobox.Portal>\n <Combobox.Positioner {...commonPositionerProps}>\n <Combobox.Popup {...commonPopupProps}>\n {renderMenuInner()}\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n ) : (\n <Menu.Root open={open} onOpenChange={onOpenChange}>\n <Menu.Trigger {...commonTriggerProps} />\n <Menu.Portal>\n <Menu.Positioner {...commonPositionerProps}>\n <Menu.Popup {...commonPopupProps}>{renderMenuInner()}</Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n"],"names":["DropdownMenu","children","items","placement","openOnHover","outsideOpen","outsideOnOpenChange","defaultOpen","className","itemRender","classNames","size","showSearch","inComboboxProp","searchProps","popupMatchTriggerWidth","beforeList","afterList","keepOpenOnSelect","highlightedItemKey","selectedItemKeys","getItemKeywords","showCheckbox","itemLabelRender","nativeButton","inCombobox","open","onOpenChange","useControlledState","cls","useCls","themeClassName","useTheme","baseUIPlacement","parseAntdPlacement","buttonRef","useRef","itemGroups","renderGroup","useDropdownMenu","searchValue","setSearchValue","useState","renderMenuInner","useCallback","jsxs","ScrollArea","searchInput","jsx","FormItemInputContext","Combobox","ref","props","Input","antdInputRef","e","clsx","listContent","group","i","triggerRender","state","_openOnHover","rest","createRenderProp","commonTriggerProps","useMemo","positionerRender","BaseMenu","commonPositionerProps","DROPDOWN_COLLISION_AVOIDANCE","popupRender","popupStyle","PopupPanelSize","commonPopupProps","item","reactNodeToString","Menu"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/dropdown-menu/component.tsx"],"sourcesContent":["\"use client\";\nimport { Menu } from \"@base-ui/react/menu\";\nimport { Combobox, type ComboboxTriggerState } from \"@base-ui/react/combobox\";\nimport { type PopoverProps } from \"antd/es/popover\";\nimport { useCallback, useEffect, useMemo, useRef, useState, RefCallback } from \"react\";\nimport {\n clsx,\n DROPDOWN_COLLISION_AVOIDANCE,\n parseAntdPlacement,\n reactNodeToString,\n useCls,\n createRenderProp,\n} from \"../utils\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { FormItemInputContext } from \"antd/es/form/context\";\n\n// Import component-specific styles\nimport { PopupPanelSize } from \"../popup-panel/constants\";\n\nimport { DropdownMenuItemType } from \"./types\";\nimport { hasUnsupportedDropdownMenuSearchItems } from \"./search-mode\";\nimport { useDropdownMenu, UseDropdownMenuProps } from \"./useDropdownMenu\";\nimport { useControlledState } from \"../hooks\";\n\nimport { useTheme } from \"../theme-provider\";\nimport { BaseMenu } from \"../base-menu\";\n\nimport { Input } from \"../input\";\n\nexport interface DropdownMenuProps extends Omit<UseDropdownMenuProps, \"classNames\"> {\n /** Array of menu items to be displayed in the dropdown */\n items: DropdownMenuItemType[];\n /** Custom render function for the trigger element */\n children?: React.ComponentProps<typeof Menu.Trigger>[\"render\"];\n /**\n * Placement of the dropdown relative to the trigger element\n * @default \"bottomLeft\"\n */\n placement?: PopoverProps[\"placement\"];\n /**\n * Whether to open the dropdown on hover instead of click\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Controlled open state of the dropdown\n */\n open?: boolean;\n /**\n * Callback fired when the dropdown open state changes\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Default open state of the dropdown\n */\n defaultOpen?: boolean;\n /**\n * Additional CSS class for the dropdown component\n */\n className?: string;\n /**\n * Custom class names for different parts of the dropdown\n * @default {}\n */\n classNames?: {\n root?: string;\n trigger?: string;\n popup?: string;\n itemIcon?: string;\n itemText?: string;\n positioner?: string;\n } & UseDropdownMenuProps[\"classNames\"];\n\n /**\n * Whether to show search input\n * @default false\n */\n showSearch?: boolean;\n /**\n * Size of the dropdown menu\n * @default \"auto\"\n */\n size?: \"auto\" | keyof typeof PopupPanelSize;\n /**\n * Search placeholder\n */\n searchProps?: {\n placeholder?: string;\n className?: string;\n };\n /**\n * Whether to match the width of the popup with the trigger\n * @default false\n */\n popupMatchTriggerWidth?: boolean;\n /**\n * Content to display before the list\n */\n beforeList?: React.ReactNode;\n /**\n * Content to display after the list\n */\n afterList?: React.ReactNode;\n /**\n * Whether the trigger should act as a native button element.\n * Set to false when using non-button elements (like Typography.Link) as trigger\n * to suppress Base UI warnings and remove native button semantics.\n * @default true\n */\n nativeButton?: boolean;\n}\n\nexport const DropdownMenu = ({\n children,\n items,\n placement,\n openOnHover,\n open: outsideOpen,\n onOpenChange: outsideOnOpenChange,\n defaultOpen = false,\n className,\n itemRender,\n classNames,\n size = \"auto\",\n showSearch,\n inCombobox: inComboboxProp,\n searchProps = {\n placeholder: \"Search...\",\n },\n popupMatchTriggerWidth,\n beforeList,\n afterList,\n keepOpenOnSelect,\n highlightedItemKey,\n selectedItemKeys,\n getItemKeywords,\n showCheckbox,\n itemLabelRender,\n nativeButton = true,\n}: DropdownMenuProps) => {\n const inCombobox = typeof inComboboxProp === \"boolean\" ? inComboboxProp : showSearch;\n const [open, onOpenChange] = useControlledState(outsideOpen, outsideOnOpenChange, defaultOpen);\n const cls = useCls();\n const { className: themeClassName } = useTheme();\n const baseUIPlacement = parseAntdPlacement(placement);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { itemGroups, renderGroup } = useDropdownMenu({\n items,\n keepOpenOnSelect,\n highlightedItemKey,\n selectedItemKeys,\n showCheckbox,\n getItemKeywords,\n itemLabelRender,\n itemRender,\n inCombobox,\n onOpenChange,\n classNames: {\n item: classNames?.item,\n itemIcon: classNames?.itemIcon,\n itemSuffix: classNames?.itemSuffix,\n group: classNames?.group,\n groupLabel: classNames?.groupLabel,\n divider: classNames?.divider,\n },\n });\n\n const [searchValue, setSearchValue] = useState(\"\");\n\n useEffect(() => {\n if (!inCombobox || process.env.NODE_ENV === \"production\") return;\n\n if (hasUnsupportedDropdownMenuSearchItems(items)) {\n console.warn(\n \"DropdownMenu search/combobox mode only supports flat `item`, `header`, and `divider` entries. Checkbox, radio-group, and submenu items are ignored.\",\n );\n }\n }, [inCombobox, items]);\n\n const renderMenuInner = useCallback(() => {\n if (!showSearch) {\n return (\n <div className={cls(\"dropdown-menu-container\")}>\n {beforeList}\n <ScrollArea fadeEdges>{itemGroups.map(renderGroup)}</ScrollArea>\n {afterList}\n </div>\n );\n }\n\n const searchInput = (\n <FormItemInputContext.Provider value={{}}>\n <Combobox.Input\n key=\"search\"\n placeholder={searchProps?.placeholder || \"Search\"}\n render={({ ref, ...props }) => (\n <Input\n {...props}\n ref={(antdInputRef) => {\n if (!antdInputRef || !antdInputRef.input) return;\n const comboboxRef = ref as RefCallback<HTMLInputElement>;\n comboboxRef(antdInputRef.input);\n }}\n allowClear\n placeholder={searchProps?.placeholder || \"Search\"}\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n className={clsx(cls(\"dropdown-menu-search\"), searchProps?.className)}\n />\n )}\n {...searchProps}\n />\n </FormItemInputContext.Provider>\n );\n\n const listContent = (\n <ScrollArea fadeEdges>\n <Combobox.Empty className={cls(\"dropdown-menu-empty\")}>No results found.</Combobox.Empty>\n <Combobox.List className={cls(\"dropdown-menu-list\")}>\n {(group, i) => renderGroup(group, i)}\n </Combobox.List>\n </ScrollArea>\n );\n\n return (\n <div className={cls(\"dropdown-menu-container\")}>\n <div className={cls(\"dropdown-menu-search-wrapper\")}>{searchInput}</div>\n {beforeList}\n {listContent}\n {afterList}\n </div>\n );\n }, [showSearch, cls, searchProps, searchValue, beforeList, afterList, itemGroups, renderGroup]);\n\n // Stable trigger render — useCallback since it's called during render phase\n const triggerRender = useCallback(\n (\n props: React.HTMLProps<HTMLElement> & { openOnHover?: boolean },\n state: ComboboxTriggerState,\n ) => {\n const { openOnHover: _openOnHover, ...rest } = props;\n return createRenderProp(children, rest, state);\n },\n [children],\n );\n\n const commonTriggerProps = useMemo(\n () => ({\n ref: buttonRef,\n openOnHover,\n nativeButton,\n className: clsx(cls(\"dropdown-menu-trigger\"), classNames?.trigger, themeClassName),\n render: triggerRender,\n }),\n [buttonRef, openOnHover, nativeButton, cls, classNames?.trigger, themeClassName, triggerRender],\n );\n\n // Stable positioner render — useCallback since it's called during render phase\n const positionerRender = useCallback(\n (props: React.ComponentPropsWithoutRef<\"div\">) => <BaseMenu.Root {...props} />,\n [],\n );\n\n const commonPositionerProps = useMemo(\n () => ({\n side: baseUIPlacement.side,\n align: baseUIPlacement.align,\n sideOffset: 4,\n className: clsx(cls(\"dropdown-menu-root\"), themeClassName, classNames?.root),\n collisionAvoidance: DROPDOWN_COLLISION_AVOIDANCE,\n render: positionerRender,\n }),\n [\n baseUIPlacement.side,\n baseUIPlacement.align,\n cls,\n themeClassName,\n classNames?.root,\n positionerRender,\n ],\n );\n\n // Stable popup render — useCallback since it's called during render phase\n const popupRender = useCallback(\n (props: React.ComponentPropsWithoutRef<\"div\">) => <BaseMenu.Popup {...props} />,\n [],\n );\n\n const popupStyle = useMemo(\n () =>\n ({\n \"--size-width\": size in PopupPanelSize ? PopupPanelSize[size] : undefined,\n }) as React.CSSProperties,\n [size],\n );\n\n const commonPopupProps = useMemo(\n () => ({\n className: clsx(\n cls(\n \"dropdown-menu\",\n showCheckbox && \"dropdown-menu-show-checkbox\",\n popupMatchTriggerWidth && \"dropdown-menu-match-trigger-width\",\n ),\n className,\n classNames?.popup,\n ),\n style: popupStyle,\n render: popupRender,\n }),\n [\n cls,\n showCheckbox,\n popupMatchTriggerWidth,\n className,\n classNames?.popup,\n popupStyle,\n popupRender,\n ],\n );\n\n return showSearch ? (\n <Combobox.Root<DropdownMenuItemType>\n open={open}\n onOpenChange={onOpenChange}\n items={itemGroups}\n itemToStringLabel={(item) => (item.type == \"item\" ? reactNodeToString(item.label) : \"\")}\n itemToStringValue={(item) => (item.type == \"item\" ? String(item.key) : \"\")}\n inputValue={searchValue}\n >\n <Combobox.Trigger {...commonTriggerProps} />\n <Combobox.Portal>\n <Combobox.Positioner {...commonPositionerProps}>\n <Combobox.Popup {...commonPopupProps}>{renderMenuInner()}</Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n ) : (\n <Menu.Root open={open} onOpenChange={onOpenChange}>\n <Menu.Trigger {...commonTriggerProps} />\n <Menu.Portal>\n <Menu.Positioner {...commonPositionerProps}>\n <Menu.Popup {...commonPopupProps}>{renderMenuInner()}</Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n"],"names":["DropdownMenu","children","items","placement","openOnHover","outsideOpen","outsideOnOpenChange","defaultOpen","className","itemRender","classNames","size","showSearch","inComboboxProp","searchProps","popupMatchTriggerWidth","beforeList","afterList","keepOpenOnSelect","highlightedItemKey","selectedItemKeys","getItemKeywords","showCheckbox","itemLabelRender","nativeButton","inCombobox","open","onOpenChange","useControlledState","cls","useCls","themeClassName","useTheme","baseUIPlacement","parseAntdPlacement","buttonRef","useRef","itemGroups","renderGroup","useDropdownMenu","searchValue","setSearchValue","useState","useEffect","hasUnsupportedDropdownMenuSearchItems","renderMenuInner","useCallback","jsxs","ScrollArea","searchInput","jsx","FormItemInputContext","Combobox","ref","props","Input","antdInputRef","e","clsx","listContent","group","i","triggerRender","state","_openOnHover","rest","createRenderProp","commonTriggerProps","useMemo","positionerRender","BaseMenu","commonPositionerProps","DROPDOWN_COLLISION_AVOIDANCE","popupRender","popupStyle","PopupPanelSize","commonPopupProps","item","reactNodeToString","Menu"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export * from './component';
2
2
  export * from './item';
3
+ export * from './radio-group';
4
+ export * from './submenu';
3
5
  export * from './types';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}