dash-ui-kit 2.0.0-dev → 2.1.1
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/react/components/badge/index.cjs.js +8 -3
- package/dist/react/components/badge/index.cjs.js.map +1 -1
- package/dist/react/components/badge/index.d.ts +10 -1
- package/dist/react/components/badge/index.esm.js +8 -3
- package/dist/react/components/badge/index.esm.js.map +1 -1
- package/dist/react/components/button/index.cjs.js +7 -2
- package/dist/react/components/button/index.cjs.js.map +1 -1
- package/dist/react/components/button/index.d.ts +4 -0
- package/dist/react/components/button/index.esm.js +7 -2
- package/dist/react/components/button/index.esm.js.map +1 -1
- package/dist/react/components/copyButton/index.cjs.js +7 -7
- package/dist/react/components/copyButton/index.cjs.js.map +1 -1
- package/dist/react/components/copyButton/index.esm.js +6 -6
- package/dist/react/components/copyButton/index.esm.js.map +1 -1
- package/dist/react/components/heading/index.cjs.js +7 -2
- package/dist/react/components/heading/index.cjs.js.map +1 -1
- package/dist/react/components/heading/index.d.ts +4 -1
- package/dist/react/components/heading/index.esm.js +7 -2
- package/dist/react/components/heading/index.esm.js.map +1 -1
- package/dist/react/components/index.cjs.js +47 -43
- package/dist/react/components/index.cjs.js.map +1 -1
- package/dist/react/components/index.d.ts +2 -0
- package/dist/react/components/index.esm.js +2 -0
- package/dist/react/components/index.esm.js.map +1 -1
- package/dist/react/components/input/index.cjs.js +7 -2
- package/dist/react/components/input/index.cjs.js.map +1 -1
- package/dist/react/components/input/index.d.ts +4 -0
- package/dist/react/components/input/index.esm.js +7 -2
- package/dist/react/components/input/index.esm.js.map +1 -1
- package/dist/react/components/overlayMenu/index.cjs.js +69 -25
- package/dist/react/components/overlayMenu/index.cjs.js.map +1 -1
- package/dist/react/components/overlayMenu/index.d.ts +9 -10
- package/dist/react/components/overlayMenu/index.esm.js +69 -25
- package/dist/react/components/overlayMenu/index.esm.js.map +1 -1
- package/dist/react/components/overlaySelect/index.cjs.js +7 -2
- package/dist/react/components/overlaySelect/index.cjs.js.map +1 -1
- package/dist/react/components/overlaySelect/index.d.ts +4 -0
- package/dist/react/components/overlaySelect/index.esm.js +7 -2
- package/dist/react/components/overlaySelect/index.esm.js.map +1 -1
- package/dist/react/components/popover/index.cjs.js +116 -0
- package/dist/react/components/popover/index.cjs.js.map +1 -0
- package/dist/react/components/popover/index.d.ts +23 -0
- package/dist/react/components/popover/index.esm.js +92 -0
- package/dist/react/components/popover/index.esm.js.map +1 -0
- package/dist/react/components/progressStepBar/index.cjs.js +7 -2
- package/dist/react/components/progressStepBar/index.cjs.js.map +1 -1
- package/dist/react/components/progressStepBar/index.d.ts +5 -2
- package/dist/react/components/progressStepBar/index.esm.js +7 -2
- package/dist/react/components/progressStepBar/index.esm.js.map +1 -1
- package/dist/react/components/select/index.cjs.js +7 -2
- package/dist/react/components/select/index.cjs.js.map +1 -1
- package/dist/react/components/select/index.d.ts +4 -0
- package/dist/react/components/select/index.esm.js +7 -2
- package/dist/react/components/select/index.esm.js.map +1 -1
- package/dist/react/components/text/index.cjs.js +8 -2
- package/dist/react/components/text/index.cjs.js.map +1 -1
- package/dist/react/components/text/index.d.ts +5 -0
- package/dist/react/components/text/index.esm.js +8 -2
- package/dist/react/components/text/index.esm.js.map +1 -1
- package/dist/react/components/textarea/index.cjs.js +9 -5
- package/dist/react/components/textarea/index.cjs.js.map +1 -1
- package/dist/react/components/textarea/index.d.ts +4 -0
- package/dist/react/components/textarea/index.esm.js +9 -5
- package/dist/react/components/textarea/index.esm.js.map +1 -1
- package/dist/react/components/tooltip/index.cjs.js +98 -0
- package/dist/react/components/tooltip/index.cjs.js.map +1 -0
- package/dist/react/components/tooltip/index.d.ts +21 -0
- package/dist/react/components/tooltip/index.esm.js +74 -0
- package/dist/react/components/tooltip/index.esm.js.map +1 -0
- package/dist/react/components/valueCard/index.cjs.js +7 -2
- package/dist/react/components/valueCard/index.cjs.js.map +1 -1
- package/dist/react/components/valueCard/index.d.ts +4 -0
- package/dist/react/components/valueCard/index.esm.js +7 -2
- package/dist/react/components/valueCard/index.esm.js.map +1 -1
- package/dist/react/hooks/index.d.ts +1 -0
- package/dist/react/hooks/useColorScheme.cjs.js +25 -0
- package/dist/react/hooks/useColorScheme.cjs.js.map +1 -0
- package/dist/react/hooks/useColorScheme.d.ts +9 -0
- package/dist/react/hooks/useColorScheme.esm.js +23 -0
- package/dist/react/hooks/useColorScheme.esm.js.map +1 -0
- package/dist/react/index.cjs.js +47 -43
- package/dist/react/index.cjs.js.map +1 -1
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.esm.js +2 -0
- package/dist/react/index.esm.js.map +1 -1
- package/dist/react-native/components/badge/index.d.ts +12 -0
- package/dist/react-native/components/button/index.d.ts +6 -0
- package/dist/react-native/components/input/index.d.ts +6 -0
- package/dist/react-native/components/valueCard/index.d.ts +4 -0
- package/dist/react-native/index.cjs.js +39 -13
- package/dist/react-native/index.cjs.js.map +1 -1
- package/dist/react-native/index.esm.js +39 -14
- package/dist/react-native/index.esm.js.map +1 -1
- package/dist/react-native/utils/index.d.ts +1 -0
- package/dist/react-native/utils/resolveColorScheme.d.ts +1 -0
- package/dist/styles.css +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/input/index.tsx"],"sourcesContent":["import React, { InputHTMLAttributes, useState, useRef, useEffect } from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { EyeOpenIcon, EyeClosedIcon } from '../icons'\n\nconst input = cva(\n 'w-full transition-all font-inter placeholder:text-opacity-60 text-[0.875rem] leading-[1.0625rem]',\n {\n variants: {\n theme: {\n light: 'text-[#111111] placeholder:text-[rgba(17,17,17,0.6)]',\n dark: 'text-white placeholder:text-gray-400'\n },\n colorScheme: {\n default: 'focus:ring-blue-500/20',\n brand: 'focus:ring-dash-brand/20',\n error: 'focus:ring-red-500/20',\n success: 'focus:ring-green-500/20',\n 'light-gray': 'focus:ring-[#6B7280]/20'\n },\n size: {\n sm: 'dash-block-sm font-light',\n md: 'dash-block-md font-light',\n xl: 'dash-block-xl font-light'\n },\n variant: {\n outlined: 'outline outline-1 outline-offset-[-1px]',\n filled: 'border-none'\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Outlined variant colors\n {\n variant: 'outlined',\n colorScheme: 'default',\n class: 'outline-[rgba(17,17,17,0.32)] focus:outline-[rgba(17,17,17,0.6)]'\n },\n {\n variant: 'outlined',\n colorScheme: 'brand',\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n variant: 'outlined',\n colorScheme: 'error',\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n variant: 'outlined',\n colorScheme: 'success',\n class: 'outline-green-500 focus:outline-green-500'\n },\n {\n variant: 'outlined',\n colorScheme: 'light-gray',\n class: 'outline-[#6B7280]/50 focus:outline-[#6B7280]'\n },\n // Outlined variant with focus ring\n {\n variant: 'outlined',\n class: 'focus:ring-2'\n },\n // Outlined variant background\n {\n variant: 'outlined',\n theme: 'light',\n class: 'bg-white'\n },\n {\n variant: 'outlined',\n theme: 'dark',\n class: 'bg-gray-800'\n },\n // Filled variant colors\n {\n variant: 'filled',\n colorScheme: 'default',\n class: 'bg-[rgba(76,126,255,0.15)] focus:bg-[rgba(76,126,255,0.2)]'\n },\n {\n variant: 'filled',\n colorScheme: 'brand',\n class: 'bg-dash-brand/15 focus:bg-dash-brand/20'\n },\n {\n variant: 'filled',\n colorScheme: 'error',\n class: 'bg-red-500/15 focus:bg-red-500/20'\n },\n {\n variant: 'filled',\n colorScheme: 'success',\n class: 'bg-green-500/15 focus:bg-green-500/20'\n },\n {\n variant: 'filled',\n colorScheme: 'light-gray',\n class: 'bg-[#0C1C33]/5 focus:bg-[#0C1C33]/10'\n },\n // Filled variant with focus ring\n {\n variant: 'filled',\n class: 'focus:ring-2'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n variant: 'outlined',\n disabled: false\n }\n }\n)\n\ntype InputVariants = VariantProps<typeof input>\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'>, Omit<InputVariants, 'theme' | 'disabled'> {\n className?: string\n error?: boolean\n success?: boolean\n prefix?: string | React.ReactNode\n prefixClassName?: string\n /**\n * Controls visibility toggle for password inputs. When false, the eye icon is hidden and no extra right padding is applied.\n * Defaults to true.\n */\n showPasswordToggle?: boolean\n}\n\n/**\n * A versatile input component that adapts to light/dark theme,\n * supports various color schemes, sizes, variants, and states.\n * For password inputs, includes a toggleable eye icon.\n * Supports prefix text or elements before input content.\n *\n * @example\n * <Input\n * type='password'\n * placeholder='Enter password'\n * colorScheme='brand'\n * size='xl'\n * prefix=\"https://\"\n * />\n */\nexport const Input: React.FC<InputProps> = ({\n className = '',\n colorScheme,\n size,\n variant,\n error = false,\n success = false,\n disabled = false,\n type,\n prefix,\n prefixClassName = '',\n showPasswordToggle = true,\n ...props\n}) => {\n const { theme } = useTheme()\n const [showPassword, setShowPassword] = useState(false)\n const [prefixWidth, setPrefixWidth] = useState(0)\n const prefixRef = useRef<HTMLDivElement>(null)\n\n // Determine color scheme based on state\n let finalColorScheme = colorScheme\n if (error) finalColorScheme = 'error'\n else if (success) finalColorScheme = 'success'\n\n const classes = input({\n theme,\n colorScheme: finalColorScheme,\n size,\n variant,\n disabled\n }) + ' ' + className\n\n const isPassword = type === 'password'\n const inputType = isPassword && showPassword ? 'text' : type\n const hasPrefix = Boolean(prefix)\n\n const togglePasswordVisibility = (): void => {\n setShowPassword(!showPassword)\n }\n\n // Measure actual prefix width\n useEffect(() => {\n if (prefixRef.current) {\n const width = prefixRef.current.offsetWidth\n // Convert px to rem (assuming 16px base) and add base padding (1rem) + extra space (0.5rem)\n setPrefixWidth(width / 16 + 1.5)\n }\n }, [prefix])\n\n // Render with prefix\n if (hasPrefix) {\n return (\n <div className='relative'>\n <div \n ref={prefixRef}\n className={`absolute left-4 top-1/2 -translate-y-1/2 z-10 text-[0.875rem] opacity-60 pointer-events-none select-none ${prefixClassName}`}\n >\n {prefix}\n </div>\n <input\n className={`${classes}${isPassword && showPasswordToggle ? ' pr-12' : ''}`}\n style={{ paddingLeft: prefixWidth ? `${prefixWidth}rem` : '1rem' }}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n {isPassword && showPasswordToggle && (\n <button\n type='button'\n className='absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none'\n onClick={togglePasswordVisibility}\n tabIndex={-1}\n >\n {showPassword\n ? <EyeClosedIcon size={16} color='#0C1C33' />\n : <EyeOpenIcon size={16} color='#0C1C33' />}\n </button>\n )}\n </div>\n )\n }\n\n // Render password input without prefix\n if (isPassword) {\n return (\n <div className='relative'>\n <input\n className={classes + (showPasswordToggle ? ' pr-12' : '')}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n {showPasswordToggle && (\n <button\n type='button'\n className='absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none'\n onClick={togglePasswordVisibility}\n tabIndex={-1}\n >\n {showPassword\n ? <EyeClosedIcon size={16} color='#0C1C33' />\n : <EyeOpenIcon size={16} color='#0C1C33' />}\n </button>\n )}\n </div>\n )\n }\n\n // Regular input without prefix\n return (\n <input\n className={classes}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n )\n}\n\nexport default Input "],"names":["input","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","size","sm","md","xl","variant","outlined","filled","disabled","false","true","compoundVariants","class","defaultVariants","Input","_a","className","type","prefix","prefixClassName","showPasswordToggle","props","__rest","useTheme","showPassword","setShowPassword","useState","prefixWidth","setPrefixWidth","prefixRef","useRef","finalColorScheme","classes","isPassword","inputType","hasPrefix","Boolean","togglePasswordVisibility","useEffect","current","width","offsetWidth","_jsxs","children","_jsx","ref","Object","assign","style","paddingLeft","onClick","tabIndex","EyeClosedIcon","color","EyeOpenIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/input/index.tsx"],"sourcesContent":["import React, { InputHTMLAttributes, useState, useRef, useEffect } from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { EyeOpenIcon, EyeClosedIcon } from '../icons'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\nconst input = cva(\n 'w-full transition-all font-inter placeholder:text-opacity-60 text-[0.875rem] leading-[1.0625rem]',\n {\n variants: {\n theme: {\n light: 'text-[#111111] placeholder:text-[rgba(17,17,17,0.6)]',\n dark: 'text-white placeholder:text-gray-400'\n },\n colorScheme: {\n default: 'focus:ring-blue-500/20',\n brand: 'focus:ring-dash-brand/20',\n error: 'focus:ring-red-500/20',\n success: 'focus:ring-green-500/20',\n 'light-gray': 'focus:ring-[#6B7280]/20'\n },\n size: {\n sm: 'dash-block-sm font-light',\n md: 'dash-block-md font-light',\n xl: 'dash-block-xl font-light'\n },\n variant: {\n outlined: 'outline outline-1 outline-offset-[-1px]',\n filled: 'border-none'\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Outlined variant colors\n {\n variant: 'outlined',\n colorScheme: 'default',\n class: 'outline-[rgba(17,17,17,0.32)] focus:outline-[rgba(17,17,17,0.6)]'\n },\n {\n variant: 'outlined',\n colorScheme: 'brand',\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n variant: 'outlined',\n colorScheme: 'error',\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n variant: 'outlined',\n colorScheme: 'success',\n class: 'outline-green-500 focus:outline-green-500'\n },\n {\n variant: 'outlined',\n colorScheme: 'light-gray',\n class: 'outline-[#6B7280]/50 focus:outline-[#6B7280]'\n },\n // Outlined variant with focus ring\n {\n variant: 'outlined',\n class: 'focus:ring-2'\n },\n // Outlined variant background\n {\n variant: 'outlined',\n theme: 'light',\n class: 'bg-white'\n },\n {\n variant: 'outlined',\n theme: 'dark',\n class: 'bg-gray-800'\n },\n // Filled variant colors\n {\n variant: 'filled',\n colorScheme: 'default',\n class: 'bg-[rgba(76,126,255,0.15)] focus:bg-[rgba(76,126,255,0.2)]'\n },\n {\n variant: 'filled',\n colorScheme: 'brand',\n class: 'bg-dash-brand/15 focus:bg-dash-brand/20'\n },\n {\n variant: 'filled',\n colorScheme: 'error',\n class: 'bg-red-500/15 focus:bg-red-500/20'\n },\n {\n variant: 'filled',\n colorScheme: 'success',\n class: 'bg-green-500/15 focus:bg-green-500/20'\n },\n {\n variant: 'filled',\n colorScheme: 'light-gray',\n class: 'bg-[#0C1C33]/5 focus:bg-[#0C1C33]/10'\n },\n // Filled variant with focus ring\n {\n variant: 'filled',\n class: 'focus:ring-2'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n variant: 'outlined',\n disabled: false\n }\n }\n)\n\ntype InputVariants = VariantProps<typeof input>\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'>, Omit<InputVariants, 'theme' | 'disabled'> {\n className?: string\n error?: boolean\n success?: boolean\n prefix?: string | React.ReactNode\n prefixClassName?: string\n /** Color scheme override for light theme */\n colorSchemeLight?: 'default' | 'brand' | 'error' | 'success' | 'light-gray'\n /** Color scheme override for dark theme */\n colorSchemeDark?: 'default' | 'brand' | 'error' | 'success' | 'light-gray'\n /**\n * Controls visibility toggle for password inputs. When false, the eye icon is hidden and no extra right padding is applied.\n * Defaults to true.\n */\n showPasswordToggle?: boolean\n}\n\n/**\n * A versatile input component that adapts to light/dark theme,\n * supports various color schemes, sizes, variants, and states.\n * For password inputs, includes a toggleable eye icon.\n * Supports prefix text or elements before input content.\n *\n * @example\n * <Input\n * type='password'\n * placeholder='Enter password'\n * colorScheme='brand'\n * size='xl'\n * prefix=\"https://\"\n * />\n */\nexport const Input: React.FC<InputProps> = ({\n className = '',\n colorScheme,\n colorSchemeLight,\n colorSchemeDark,\n size,\n variant,\n error = false,\n success = false,\n disabled = false,\n type,\n prefix,\n prefixClassName = '',\n showPasswordToggle = true,\n ...props\n}) => {\n const { theme } = useTheme()\n const [showPassword, setShowPassword] = useState(false)\n const [prefixWidth, setPrefixWidth] = useState(0)\n const prefixRef = useRef<HTMLDivElement>(null)\n\n const effectiveColorScheme = useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark) ?? 'default'\n\n // Determine color scheme based on state\n let finalColorScheme: typeof effectiveColorScheme = effectiveColorScheme\n if (error) finalColorScheme = 'error'\n else if (success) finalColorScheme = 'success'\n\n const classes = input({\n theme,\n colorScheme: finalColorScheme,\n size,\n variant,\n disabled\n }) + ' ' + className\n\n const isPassword = type === 'password'\n const inputType = isPassword && showPassword ? 'text' : type\n const hasPrefix = Boolean(prefix)\n\n const togglePasswordVisibility = (): void => {\n setShowPassword(!showPassword)\n }\n\n // Measure actual prefix width\n useEffect(() => {\n if (prefixRef.current) {\n const width = prefixRef.current.offsetWidth\n // Convert px to rem (assuming 16px base) and add base padding (1rem) + extra space (0.5rem)\n setPrefixWidth(width / 16 + 1.5)\n }\n }, [prefix])\n\n // Render with prefix\n if (hasPrefix) {\n return (\n <div className='relative'>\n <div \n ref={prefixRef}\n className={`absolute left-4 top-1/2 -translate-y-1/2 z-10 text-[0.875rem] opacity-60 pointer-events-none select-none ${prefixClassName}`}\n >\n {prefix}\n </div>\n <input\n className={`${classes}${isPassword && showPasswordToggle ? ' pr-12' : ''}`}\n style={{ paddingLeft: prefixWidth ? `${prefixWidth}rem` : '1rem' }}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n {isPassword && showPasswordToggle && (\n <button\n type='button'\n className='absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none'\n onClick={togglePasswordVisibility}\n tabIndex={-1}\n >\n {showPassword\n ? <EyeClosedIcon size={16} color='#0C1C33' />\n : <EyeOpenIcon size={16} color='#0C1C33' />}\n </button>\n )}\n </div>\n )\n }\n\n // Render password input without prefix\n if (isPassword) {\n return (\n <div className='relative'>\n <input\n className={classes + (showPasswordToggle ? ' pr-12' : '')}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n {showPasswordToggle && (\n <button\n type='button'\n className='absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none'\n onClick={togglePasswordVisibility}\n tabIndex={-1}\n >\n {showPassword\n ? <EyeClosedIcon size={16} color='#0C1C33' />\n : <EyeOpenIcon size={16} color='#0C1C33' />}\n </button>\n )}\n </div>\n )\n }\n\n // Regular input without prefix\n return (\n <input\n className={classes}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n )\n}\n\nexport default Input "],"names":["input","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","size","sm","md","xl","variant","outlined","filled","disabled","false","true","compoundVariants","class","defaultVariants","Input","_a","className","colorSchemeLight","colorSchemeDark","type","prefix","prefixClassName","showPasswordToggle","props","__rest","useTheme","showPassword","setShowPassword","useState","prefixWidth","setPrefixWidth","prefixRef","useRef","effectiveColorScheme","_b","useColorScheme","finalColorScheme","classes","isPassword","inputType","hasPrefix","Boolean","togglePasswordVisibility","useEffect","current","width","offsetWidth","_jsxs","children","_jsx","ref","Object","assign","style","paddingLeft","onClick","tabIndex","EyeClosedIcon","color","EyeOpenIcon"],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ var React = require('react');
|
|
|
10
10
|
var classVarianceAuthority = require('class-variance-authority');
|
|
11
11
|
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
12
12
|
var index = require('../icons/index.cjs.js');
|
|
13
|
+
var useColorScheme = require('../../hooks/useColorScheme.cjs.js');
|
|
13
14
|
|
|
14
15
|
const overlayMenuTrigger = classVarianceAuthority.cva('w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] inline-flex items-center justify-between', {
|
|
15
16
|
variants: {
|
|
@@ -269,11 +270,48 @@ const ChevronDownIcon = ({
|
|
|
269
270
|
* @param position - Position object for context-menu variant
|
|
270
271
|
* @param width - Custom width (default: 200px for context-menu)
|
|
271
272
|
*/
|
|
273
|
+
const closeButtonAlignClasses = {
|
|
274
|
+
left: 'justify-start',
|
|
275
|
+
center: 'justify-center',
|
|
276
|
+
right: 'justify-end'
|
|
277
|
+
};
|
|
278
|
+
const OverlayMenuHeader = ({
|
|
279
|
+
headerClasses,
|
|
280
|
+
hasContent,
|
|
281
|
+
showCloseButton,
|
|
282
|
+
closeButtonAlign,
|
|
283
|
+
isContextMenu,
|
|
284
|
+
theme,
|
|
285
|
+
onClose,
|
|
286
|
+
children
|
|
287
|
+
}) => {
|
|
288
|
+
const isCloseOnly = showCloseButton && !hasContent;
|
|
289
|
+
return jsxRuntime.jsxs("div", {
|
|
290
|
+
className: `${headerClasses} ${isCloseOnly ? closeButtonAlignClasses[closeButtonAlign] : ''} ${!showCloseButton && !isContextMenu ? 'cursor-pointer' : ''}`,
|
|
291
|
+
onClick: !showCloseButton && !isContextMenu ? onClose : undefined,
|
|
292
|
+
children: [hasContent && jsxRuntime.jsx("div", {
|
|
293
|
+
className: 'w-full flex-1',
|
|
294
|
+
children: children
|
|
295
|
+
}), showCloseButton && jsxRuntime.jsx("button", {
|
|
296
|
+
className: 'flex items-center cursor-pointer hover:opacity-70 transition-opacity',
|
|
297
|
+
onClick: onClose,
|
|
298
|
+
"aria-label": 'Close menu',
|
|
299
|
+
children: jsxRuntime.jsx(index.CrossIcon, {
|
|
300
|
+
size: 16,
|
|
301
|
+
color: theme === 'dark' ? '#FFFFFF' : '#0C1C33'
|
|
302
|
+
})
|
|
303
|
+
})]
|
|
304
|
+
});
|
|
305
|
+
};
|
|
272
306
|
const OverlayMenu = _a => {
|
|
307
|
+
var _b;
|
|
273
308
|
var {
|
|
274
309
|
className = '',
|
|
310
|
+
triggerClassName = '',
|
|
275
311
|
contentClassName = '',
|
|
276
312
|
colorScheme,
|
|
313
|
+
colorSchemeLight,
|
|
314
|
+
colorSchemeDark,
|
|
277
315
|
size,
|
|
278
316
|
error = false,
|
|
279
317
|
success = false,
|
|
@@ -289,20 +327,24 @@ const OverlayMenu = _a => {
|
|
|
289
327
|
placeholder = 'Menu',
|
|
290
328
|
showItemBorders = true,
|
|
291
329
|
variant = 'dropdown',
|
|
330
|
+
align = 'left',
|
|
331
|
+
wrapperClassName = '',
|
|
292
332
|
headerContent,
|
|
293
333
|
showCloseButton = false,
|
|
334
|
+
closeButtonAlign = 'right',
|
|
294
335
|
position,
|
|
295
336
|
width,
|
|
296
337
|
onClose
|
|
297
338
|
} = _a,
|
|
298
|
-
props = tslib.__rest(_a, ["className", "contentClassName", "colorScheme", "size", "error", "success", "border", "filled", "disabled", "items", "showArrow", "name", "overlayLabel", "maxHeight", "triggerContent", "placeholder", "showItemBorders", "variant", "headerContent", "showCloseButton", "position", "width", "onClose"]);
|
|
339
|
+
props = tslib.__rest(_a, ["className", "triggerClassName", "contentClassName", "colorScheme", "colorSchemeLight", "colorSchemeDark", "size", "error", "success", "border", "filled", "disabled", "items", "showArrow", "name", "overlayLabel", "maxHeight", "triggerContent", "placeholder", "showItemBorders", "variant", "align", "wrapperClassName", "headerContent", "showCloseButton", "closeButtonAlign", "position", "width", "onClose"]);
|
|
299
340
|
const {
|
|
300
341
|
theme
|
|
301
342
|
} = ThemeContext.useTheme();
|
|
302
343
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
303
344
|
const triggerRef = React.useRef(null);
|
|
345
|
+
const effectiveColorScheme = (_b = useColorScheme.useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark)) !== null && _b !== void 0 ? _b : 'default';
|
|
304
346
|
// Determine color scheme based on state
|
|
305
|
-
let finalColorScheme =
|
|
347
|
+
let finalColorScheme = effectiveColorScheme;
|
|
306
348
|
if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
|
|
307
349
|
const isContextMenu = variant === 'context-menu';
|
|
308
350
|
// Handle Escape key
|
|
@@ -320,6 +362,11 @@ const OverlayMenu = _a => {
|
|
|
320
362
|
setIsOpen(false);
|
|
321
363
|
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
322
364
|
};
|
|
365
|
+
const alignClasses = {
|
|
366
|
+
left: 'left-0',
|
|
367
|
+
center: 'left-1/2 -translate-x-1/2',
|
|
368
|
+
right: 'right-0'
|
|
369
|
+
};
|
|
323
370
|
const triggerClasses = overlayMenuTrigger({
|
|
324
371
|
theme,
|
|
325
372
|
colorScheme: finalColorScheme,
|
|
@@ -366,11 +413,11 @@ const OverlayMenu = _a => {
|
|
|
366
413
|
return styles;
|
|
367
414
|
};
|
|
368
415
|
return jsxRuntime.jsxs("div", {
|
|
369
|
-
className: isContextMenu ?
|
|
416
|
+
className: isContextMenu ? wrapperClassName : `relative ${wrapperClassName}`,
|
|
370
417
|
children: [!isContextMenu && jsxRuntime.jsxs("button", Object.assign({
|
|
371
418
|
ref: triggerRef,
|
|
372
419
|
type: 'button',
|
|
373
|
-
className: triggerClasses
|
|
420
|
+
className: `${triggerClasses} ${triggerClassName}`,
|
|
374
421
|
onClick: () => !disabled && setIsOpen(!isOpen),
|
|
375
422
|
disabled: disabled,
|
|
376
423
|
name: name
|
|
@@ -389,31 +436,28 @@ const OverlayMenu = _a => {
|
|
|
389
436
|
className: `${isContextMenu ? 'fixed' : 'fixed'} inset-0 z-40`,
|
|
390
437
|
onClick: handleClose
|
|
391
438
|
}), jsxRuntime.jsxs("div", {
|
|
392
|
-
className: `${contentClasses} ${isContextMenu ? 'fixed' : ''} ${!isContextMenu ?
|
|
439
|
+
className: `${contentClasses} ${isContextMenu ? 'fixed' : ''} ${!isContextMenu ? `top-0 ${alignClasses[align]}` : ''} overflow-y-auto ${contentClassName}`,
|
|
393
440
|
style: Object.assign({
|
|
394
441
|
maxHeight
|
|
395
442
|
}, getPositionStyles()),
|
|
396
|
-
children: [(headerContent || overlayLabel) && jsxRuntime.
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
"aria-label": 'Close menu',
|
|
406
|
-
children: jsxRuntime.jsx(index.CrossIcon, {
|
|
407
|
-
size: 16,
|
|
408
|
-
color: theme === 'dark' ? '#FFFFFF' : '#0C1C33'
|
|
409
|
-
})
|
|
410
|
-
})]
|
|
443
|
+
children: [(headerContent || overlayLabel || showCloseButton) && jsxRuntime.jsx(OverlayMenuHeader, {
|
|
444
|
+
headerClasses: headerClasses,
|
|
445
|
+
hasContent: !!(headerContent || overlayLabel),
|
|
446
|
+
showCloseButton: showCloseButton || isContextMenu && !!headerContent,
|
|
447
|
+
closeButtonAlign: closeButtonAlign,
|
|
448
|
+
isContextMenu: isContextMenu,
|
|
449
|
+
theme: theme,
|
|
450
|
+
onClose: handleClose,
|
|
451
|
+
children: headerContent || overlayLabel
|
|
411
452
|
}), jsxRuntime.jsx("div", {
|
|
412
|
-
children: items.map((item, index) =>
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
453
|
+
children: items.map((item, index) => {
|
|
454
|
+
var _a;
|
|
455
|
+
return jsxRuntime.jsx("div", {
|
|
456
|
+
className: `${itemClasses} ${item.disabled ? 'opacity-50 !cursor-not-allowed' : ''} ${showItemBorders && index < items.length - 1 ? `border-b ${theme === 'dark' ? 'border-[rgba(255,255,255,0.15)]' : 'border-[rgba(12,28,51,0.05)]'}` : ''} ${(_a = item.className) !== null && _a !== void 0 ? _a : ''}`,
|
|
457
|
+
onClick: () => handleItemClick(item),
|
|
458
|
+
children: item.content
|
|
459
|
+
}, item.id);
|
|
460
|
+
})
|
|
417
461
|
})]
|
|
418
462
|
})]
|
|
419
463
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/overlayMenu/index.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { CrossIcon } from '../icons'\n\nconst overlayMenuTrigger = cva(\n 'w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] inline-flex items-center justify-between',\n {\n variants: {\n theme: {\n light: 'text-dash-primary-dark-blue',\n dark: 'text-white'\n },\n colorScheme: {\n default: '',\n brand: '',\n error: '',\n success: '',\n gray: '',\n lightGray: ''\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n border: {\n true: 'outline outline-1 outline-offset-[-1px]',\n false: ''\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n },\n filled: {\n false: '',\n true: ''\n }\n },\n compoundVariants: [\n {\n colorScheme: 'default',\n border: true,\n class: 'outline-[rgba(12,28,51,0.35)] focus:outline-[rgba(12,28,51,0.6)]'\n },\n {\n colorScheme: 'brand',\n border: true,\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n colorScheme: 'error',\n border: true,\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n colorScheme: 'success',\n border: true,\n class: 'outline-green-500 focus:outline-green-500'\n },\n {\n colorScheme: 'gray',\n border: true,\n theme: 'light',\n class: 'outline-[rgba(12,28,51,0.20)] focus:outline-[rgba(12,28,51,0.35)]'\n },\n {\n colorScheme: 'gray',\n border: true,\n theme: 'dark',\n class: 'outline-gray-600/50 focus:outline-gray-500'\n },\n {\n colorScheme: 'lightGray',\n border: true,\n theme: 'light',\n class: 'outline-dash-primary-dark-blue/[0.05] focus:outline-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'lightGray',\n border: true,\n theme: 'dark',\n class: 'outline-dash-primary-dark-blue/[0.05] focus:outline-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'gray',\n border: false,\n theme: 'light',\n class: 'bg-[rgba(12,28,51,0.03)]'\n },\n {\n colorScheme: 'gray',\n border: false,\n theme: 'dark',\n class: 'bg-gray-700/20'\n },\n // New lightGray scheme using dash-primary-dark-blue with 3% base and 5% hover\n {\n colorScheme: 'lightGray',\n border: false,\n theme: 'light',\n class: 'bg-dash-primary-dark-blue/[0.03] hover:bg-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'lightGray',\n border: false,\n theme: 'dark',\n class: 'bg-dash-primary-dark-blue/[0.03] hover:bg-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'lightGray',\n filled: true,\n theme: 'light',\n class: 'bg-dash-primary-dark-blue/[0.03] hover:bg-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'lightGray',\n filled: true,\n theme: 'dark',\n class: 'bg-dash-primary-dark-blue/[0.03] hover:bg-dash-primary-dark-blue/[0.05]'\n },\n // Default background when not filled\n {\n filled: false,\n theme: 'light',\n class: 'bg-white'\n },\n {\n filled: false,\n theme: 'dark',\n class: 'bg-gray-800'\n },\n // Filled variants\n {\n colorScheme: 'default',\n filled: true,\n theme: 'light',\n class: 'bg-white text-gray-900'\n },\n {\n colorScheme: 'default',\n filled: true,\n theme: 'dark',\n class: 'bg-gray-700 text-white'\n },\n {\n colorScheme: 'brand',\n filled: true,\n theme: 'light',\n class: 'bg-blue-50 text-blue-700'\n },\n {\n colorScheme: 'brand',\n filled: true,\n theme: 'dark',\n class: 'bg-blue-900/30 text-blue-300'\n },\n {\n colorScheme: 'error',\n filled: true,\n theme: 'light',\n class: 'bg-red-50 text-red-700'\n },\n {\n colorScheme: 'error',\n filled: true,\n theme: 'dark',\n class: 'bg-red-500/20 text-red-400'\n },\n {\n colorScheme: 'success',\n filled: true,\n theme: 'light',\n class: 'bg-green-50 text-green-700'\n },\n {\n colorScheme: 'success',\n filled: true,\n theme: 'dark',\n class: 'bg-green-500/20 text-green-400'\n },\n {\n colorScheme: 'gray',\n filled: true,\n theme: 'light',\n class: 'bg-gray-200 text-gray-800'\n },\n {\n colorScheme: 'gray',\n filled: true,\n theme: 'dark',\n class: 'bg-gray-600 text-gray-200'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n border: true,\n disabled: false,\n filled: false\n }\n }\n)\n\nconst overlayContent = cva(\n 'absolute z-50 overflow-hidden',\n {\n variants: {\n theme: {\n light: 'bg-white border border-[rgba(12,28,51,0.05)]',\n dark: 'bg-[rgba(255,255,255,0.15)] border border-[rgba(255,255,255,0.15)] backdrop-blur-[256px]'\n },\n size: {\n sm: 'rounded-[0.625rem]',\n md: 'rounded-[0.75rem]', \n xl: 'rounded-[0.9375rem]'\n },\n variant: {\n dropdown: 'min-w-full',\n 'context-menu': 'w-[200px]'\n },\n hasShadow: {\n true: 'shadow-[0px_0px_75px_0px_rgba(0,0,0,0.15)]',\n false: 'shadow-lg'\n }\n },\n defaultVariants: {\n variant: 'dropdown',\n hasShadow: false\n }\n }\n)\n\nconst overlayHeader = cva(\n 'flex items-center justify-between border-b gap-2',\n {\n variants: {\n theme: {\n light: 'border-[rgba(12,28,51,0.05)]',\n dark: 'border-[rgba(255,255,255,0.15)]'\n },\n size: {\n sm: 'px-[0.875rem] py-[0.375rem]',\n md: 'px-[1rem] py-[0.5rem]',\n xl: 'px-[1.125rem] py-[0.5rem]'\n }\n },\n defaultVariants: {\n theme: 'light',\n size: 'xl'\n }\n }\n)\n\nconst overlayItem = cva(\n 'relative flex cursor-pointer select-none items-center outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 rounded-none font-medium text-[0.75rem] leading-[1.416em]',\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33] hover:bg-gray-50',\n dark: 'text-white hover:bg-[rgba(255,255,255,0.1)]'\n },\n size: {\n sm: 'px-[0.875rem] py-[0.625rem]',\n md: 'px-[1rem] py-[0.6875rem]',\n xl: 'px-[1.125rem] py-[0.75rem]'\n }\n },\n defaultVariants: {\n theme: 'light',\n size: 'xl'\n }\n }\n)\n\n// Arrow icon\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n width='15'\n height='15'\n viewBox='0 0 15 15'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={className}\n >\n <path\n d='m4.93179 5.43179c0.20081-0.20081 0.52632-0.20081 0.72713 0l2.34108 2.34108 2.34108-2.34108c0.20081-0.20081 0.52632-0.20081 0.72713 0s0.20081 0.52632 0 0.72713l-2.70455 2.70455c-0.20081 0.20081-0.52632 0.20081-0.72713 0l-2.70455-2.70455c-0.20081-0.20081-0.20081-0.52632 0-0.72713z'\n fill='currentColor'\n fillRule='evenodd'\n clipRule='evenodd'\n />\n </svg>\n)\n\ntype OverlayMenuVariants = VariantProps<typeof overlayMenuTrigger>\n\nexport interface OverlayMenuItem {\n id: string\n content: React.ReactNode\n onClick?: () => void\n disabled?: boolean\n}\n\nexport interface OverlayMenuPosition {\n top?: number\n left?: number\n right?: number\n bottom?: number\n}\n\nexport interface OverlayMenuProps extends Omit<OverlayMenuVariants, 'theme' | 'disabled'> {\n className?: string\n contentClassName?: string\n error?: boolean\n success?: boolean\n border?: boolean\n filled?: boolean\n items?: OverlayMenuItem[]\n showArrow?: boolean\n disabled?: boolean\n name?: string\n overlayLabel?: string\n maxHeight?: string\n triggerContent?: React.ReactNode\n placeholder?: string\n showItemBorders?: boolean\n variant?: 'dropdown' | 'context-menu'\n headerContent?: React.ReactNode\n showCloseButton?: boolean\n position?: OverlayMenuPosition\n width?: string | number\n onClose?: () => void\n}\n\n/**\n * Overlay menu component that opens above the trigger with overlay positioning.\n * Supports custom content items with onClick handlers.\n * \n * @param variant - 'dropdown' (default) or 'context-menu'\n * @param headerContent - Custom header content (for context-menu variant)\n * @param showCloseButton - Show close button in header\n * @param position - Position object for context-menu variant\n * @param width - Custom width (default: 200px for context-menu)\n */\nexport const OverlayMenu: React.FC<OverlayMenuProps> = ({\n className = '',\n contentClassName = '',\n colorScheme,\n size,\n error = false,\n success = false,\n border = true,\n filled = false,\n disabled = false,\n items = [],\n showArrow = true,\n name,\n overlayLabel,\n maxHeight = '200px',\n triggerContent,\n placeholder = 'Menu',\n showItemBorders = true,\n variant = 'dropdown',\n headerContent,\n showCloseButton = false,\n position,\n width,\n onClose,\n ...props\n}) => {\n const { theme } = useTheme()\n const [isOpen, setIsOpen] = useState(false)\n const triggerRef = useRef<HTMLButtonElement>(null)\n\n // Determine color scheme based on state\n let finalColorScheme = colorScheme\n if (error) finalColorScheme = 'error'\n else if (success) finalColorScheme = 'success'\n\n const isContextMenu = variant === 'context-menu'\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleClose()\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen])\n\n const handleClose = () => {\n setIsOpen(false)\n onClose?.()\n }\n\n const triggerClasses = overlayMenuTrigger({\n theme,\n colorScheme: finalColorScheme,\n size,\n border,\n filled,\n disabled\n }) + ' ' + className\n\n const contentClasses = overlayContent({ \n theme, \n size, \n variant,\n hasShadow: isContextMenu \n })\n const headerClasses = overlayHeader({ theme, size })\n const itemClasses = overlayItem({ theme, size })\n\n const handleItemClick = (item: OverlayMenuItem) => {\n if (!item.disabled && item.onClick) {\n item.onClick()\n }\n handleClose()\n }\n\n // For context-menu variant, show menu immediately if position is provided\n useEffect(() => {\n if (isContextMenu && position) {\n setIsOpen(true)\n }\n }, [isContextMenu, position])\n\n // Calculate position styles for context-menu\n const getPositionStyles = (): React.CSSProperties => {\n if (!isContextMenu || !position) return {}\n \n const styles: React.CSSProperties = {}\n if (position.top !== undefined) styles.top = position.top\n if (position.left !== undefined) styles.left = position.left\n if (position.right !== undefined) styles.right = position.right\n if (position.bottom !== undefined) styles.bottom = position.bottom\n if (width) styles.width = typeof width === 'number' ? `${width}px` : width\n \n return styles\n }\n\n return (\n <div className={isContextMenu ? '' : 'relative'}>\n {/* Trigger button - only for dropdown variant */}\n {!isContextMenu && (\n <button\n ref={triggerRef}\n type='button'\n className={triggerClasses}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n name={name}\n {...props}\n >\n <div className='w-full flex-1 text-left'>\n {triggerContent || (\n <span className={theme === 'dark' ? 'text-gray-400' : 'text-gray-500'}>\n {placeholder}\n </span>\n )}\n </div>\n {showArrow && (\n <ChevronDownIcon \n className={`transition-transform ${isOpen ? 'rotate-180' : ''} ${\n size === 'sm' ? 'w-3 h-3' : 'w-4 h-4'\n }`} \n />\n )}\n </button>\n )}\n\n {isOpen && (\n <>\n {/* Backdrop */}\n <div \n className={`${isContextMenu ? 'fixed' : 'fixed'} inset-0 z-40`}\n onClick={handleClose}\n />\n\n {/* Overlay content */}\n <div\n className={`${contentClasses} ${isContextMenu ? 'fixed' : ''} ${\n !isContextMenu ? 'top-0 left-0 right-0' : ''\n } overflow-y-auto ${contentClassName}`}\n style={{ \n maxHeight,\n ...getPositionStyles()\n }}\n >\n {/* Custom header for context-menu or overlayLabel for dropdown */}\n {(headerContent || overlayLabel) && (\n <div \n className={`${headerClasses} ${!showCloseButton && !isContextMenu ? 'cursor-pointer' : ''}`}\n onClick={!showCloseButton && !isContextMenu ? handleClose : undefined}\n >\n <div className='w-full flex-1'>\n {headerContent || overlayLabel}\n </div>\n {(showCloseButton || (isContextMenu && headerContent)) && (\n <button\n className='flex items-center cursor-pointer hover:opacity-70 transition-opacity'\n onClick={handleClose}\n aria-label='Close menu'\n >\n <CrossIcon \n size={16} \n color={theme === 'dark' ? '#FFFFFF' : '#0C1C33'}\n />\n </button>\n )}\n </div>\n )}\n\n {/* Menu items */}\n <div>\n {items.map((item, index) => (\n <div\n key={item.id}\n className={`${itemClasses} ${item.disabled ? 'opacity-50 cursor-not-allowed' : ''} ${\n showItemBorders && index < items.length - 1 \n ? `border-b ${theme === 'dark' ? 'border-[rgba(255,255,255,0.15)]' : 'border-[rgba(12,28,51,0.05)]'}`\n : ''\n }`}\n onClick={() => handleItemClick(item)}\n >\n {item.content}\n </div>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default OverlayMenu\n"],"names":["overlayMenuTrigger","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","gray","lightGray","size","sm","md","xl","border","true","false","disabled","filled","compoundVariants","class","defaultVariants","overlayContent","variant","dropdown","hasShadow","overlayHeader","overlayItem","ChevronDownIcon","className","_jsx","width","height","viewBox","fill","xmlns","d","fillRule","clipRule","OverlayMenu","_a","contentClassName","items","showArrow","name","overlayLabel","maxHeight","triggerContent","placeholder","showItemBorders","headerContent","showCloseButton","position","onClose","props","__rest","useTheme","isOpen","setIsOpen","useState","triggerRef","useRef","finalColorScheme","isContextMenu","useEffect","handleEscape","e","key","handleClose","document","addEventListener","removeEventListener","triggerClasses","contentClasses","headerClasses","itemClasses","handleItemClick","item","onClick","getPositionStyles","styles","top","undefined","left","right","bottom","_jsxs","children","Object","assign","ref","type","_Fragment","style","CrossIcon","color","map","index","length","content","id"],"mappings":";;;;;;;;;;;;;AAKA,MAAMA,kBAAkB,GAAGC,0BAAG,CAC5B,uJAAuJ,EACvJ;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,6BAA6B;AACpCC,MAAAA,IAAI,EAAE;KACP;AACDC,IAAAA,WAAW,EAAE;AACXC,MAAAA,OAAO,EAAE,EAAE;AACXC,MAAAA,KAAK,EAAE,EAAE;AACTC,MAAAA,KAAK,EAAE,EAAE;AACTC,MAAAA,OAAO,EAAE,EAAE;AACXC,MAAAA,IAAI,EAAE,EAAE;AACRC,MAAAA,SAAS,EAAE;KACZ;AACDC,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE;KACL;AACDC,IAAAA,MAAM,EAAE;AACNC,MAAAA,IAAI,EAAE,yCAAyC;AAC/CC,MAAAA,KAAK,EAAE;KACR;AACDC,IAAAA,QAAQ,EAAE;AACRD,MAAAA,KAAK,EAAE,EAAE;AACTD,MAAAA,IAAI,EAAE;KACP;AACDG,IAAAA,MAAM,EAAE;AACNF,MAAAA,KAAK,EAAE,EAAE;AACTD,MAAAA,IAAI,EAAE;AACP;GACF;AACDI,EAAAA,gBAAgB,EAAE,CAChB;AACEhB,IAAAA,WAAW,EAAE,SAAS;AACtBW,IAAAA,MAAM,EAAE,IAAI;AACZM,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,OAAO;AACpBW,IAAAA,MAAM,EAAE,IAAI;AACZM,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,OAAO;AACpBW,IAAAA,MAAM,EAAE,IAAI;AACZM,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,SAAS;AACtBW,IAAAA,MAAM,EAAE,IAAI;AACZM,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,MAAM;AACnBW,IAAAA,MAAM,EAAE,IAAI;AACZd,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,MAAM;AACnBW,IAAAA,MAAM,EAAE,IAAI;AACZd,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,WAAW;AACxBW,IAAAA,MAAM,EAAE,IAAI;AACZd,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,WAAW;AACxBW,IAAAA,MAAM,EAAE,IAAI;AACZd,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,MAAM;AACnBW,IAAAA,MAAM,EAAE,KAAK;AACbd,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,MAAM;AACnBW,IAAAA,MAAM,EAAE,KAAK;AACbd,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;GACR;AACD;AACA,EAAA;AACEjB,IAAAA,WAAW,EAAE,WAAW;AACxBW,IAAAA,MAAM,EAAE,KAAK;AACbd,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,WAAW;AACxBW,IAAAA,MAAM,EAAE,KAAK;AACbd,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,WAAW;AACxBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,WAAW;AACxBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;GACR;AACD;AACA,EAAA;AACEF,IAAAA,MAAM,EAAE,KAAK;AACblB,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEF,IAAAA,MAAM,EAAE,KAAK;AACblB,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;GACR;AACD;AACA,EAAA;AACEjB,IAAAA,WAAW,EAAE,SAAS;AACtBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,SAAS;AACtBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,OAAO;AACpBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,OAAO;AACpBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,OAAO;AACpBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,OAAO;AACpBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,SAAS;AACtBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,SAAS;AACtBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,MAAM;AACnBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,OAAO;AACdoB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEjB,IAAAA,WAAW,EAAE,MAAM;AACnBe,IAAAA,MAAM,EAAE,IAAI;AACZlB,IAAAA,KAAK,EAAE,MAAM;AACboB,IAAAA,KAAK,EAAE;AACR,GAAA,CACF;AACDC,EAAAA,eAAe,EAAE;AACfrB,IAAAA,KAAK,EAAE,OAAO;AACdG,IAAAA,WAAW,EAAE,SAAS;AACtBO,IAAAA,IAAI,EAAE,IAAI;AACVI,IAAAA,MAAM,EAAE,IAAI;AACZG,IAAAA,QAAQ,EAAE,KAAK;AACfC,IAAAA,MAAM,EAAE;AACT;AACF,CAAA,CACF;AAED,MAAMI,cAAc,GAAGxB,0BAAG,CACxB,+BAA+B,EAC/B;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,8CAA8C;AACrDC,MAAAA,IAAI,EAAE;KACP;AACDQ,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,oBAAoB;AACxBC,MAAAA,EAAE,EAAE,mBAAmB;AACvBC,MAAAA,EAAE,EAAE;KACL;AACDU,IAAAA,OAAO,EAAE;AACPC,MAAAA,QAAQ,EAAE,YAAY;AACtB,MAAA,cAAc,EAAE;KACjB;AACDC,IAAAA,SAAS,EAAE;AACTV,MAAAA,IAAI,EAAE,4CAA4C;AAClDC,MAAAA,KAAK,EAAE;AACR;GACF;AACDK,EAAAA,eAAe,EAAE;AACfE,IAAAA,OAAO,EAAE,UAAU;AACnBE,IAAAA,SAAS,EAAE;AACZ;AACF,CAAA,CACF;AAED,MAAMC,aAAa,GAAG5B,0BAAG,CACvB,kDAAkD,EAClD;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,8BAA8B;AACrCC,MAAAA,IAAI,EAAE;KACP;AACDQ,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,6BAA6B;AACjCC,MAAAA,EAAE,EAAE,uBAAuB;AAC3BC,MAAAA,EAAE,EAAE;AACL;GACF;AACDQ,EAAAA,eAAe,EAAE;AACfrB,IAAAA,KAAK,EAAE,OAAO;AACdU,IAAAA,IAAI,EAAE;AACP;AACF,CAAA,CACF;AAED,MAAMiB,WAAW,GAAG7B,0BAAG,CACrB,6LAA6L,EAC7L;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,iCAAiC;AACxCC,MAAAA,IAAI,EAAE;KACP;AACDQ,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,6BAA6B;AACjCC,MAAAA,EAAE,EAAE,0BAA0B;AAC9BC,MAAAA,EAAE,EAAE;AACL;GACF;AACDQ,EAAAA,eAAe,EAAE;AACfrB,IAAAA,KAAK,EAAE,OAAO;AACdU,IAAAA,IAAI,EAAE;AACP;AACF,CAAA,CACF;AAED;AACA,MAAMkB,eAAe,GAAqCA,CAAC;AAAEC,EAAAA;CAAW,KACtEC,cACE,CAAA,KAAA,EAAA;AAAAC,EAAAA,KAAK,EAAC,IAAI;AACVC,EAAAA,MAAM,EAAC,IAAI;AACXC,EAAAA,OAAO,EAAC,WAAW;AACnBC,EAAAA,IAAI,EAAC,MAAM;AACXC,EAAAA,KAAK,EAAC,4BAA4B;AAClCN,EAAAA,SAAS,EAAEA,SAAS;YAEpBC,cACE,CAAA,MAAA,EAAA;AAAAM,IAAAA,CAAC,EAAC,yRAAyR;AAC3RF,IAAAA,IAAI,EAAC,cAAc;AACnBG,IAAAA,QAAQ,EAAC,SAAS;AAClBC,IAAAA,QAAQ,EAAC;GAAS;AAEhB,CAAA,CACP;AA0CD;;;;;;;;;AASG;AACUC,MAAAA,WAAW,GAAgCC,EAyBvD,IAAI;EAzBmD,IAAA;AACtDX,MAAAA,SAAS,GAAG,EAAE;AACdY,MAAAA,gBAAgB,GAAG,EAAE;MACrBtC,WAAW;MACXO,IAAI;AACJJ,MAAAA,KAAK,GAAG,KAAK;AACbC,MAAAA,OAAO,GAAG,KAAK;AACfO,MAAAA,MAAM,GAAG,IAAI;AACbI,MAAAA,MAAM,GAAG,KAAK;AACdD,MAAAA,QAAQ,GAAG,KAAK;AAChByB,MAAAA,KAAK,GAAG,EAAE;AACVC,MAAAA,SAAS,GAAG,IAAI;MAChBC,IAAI;MACJC,YAAY;AACZC,MAAAA,SAAS,GAAG,OAAO;MACnBC,cAAc;AACdC,MAAAA,WAAW,GAAG,MAAM;AACpBC,MAAAA,eAAe,GAAG,IAAI;AACtB1B,MAAAA,OAAO,GAAG,UAAU;MACpB2B,aAAa;AACbC,MAAAA,eAAe,GAAG,KAAK;MACvBC,QAAQ;MACRrB,KAAK;AACLsB,MAAAA;AAAO,KAAA,GAAAb,EAER;IADIc,KAAK,GAAAC,YAAA,CAAAf,EAAA,EAxB8C,0SAyBvD,CADS;EAER,MAAM;AAAExC,IAAAA;GAAO,GAAGwD,qBAAQ,EAAE;EAC5B,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC;AAC3C,EAAA,MAAMC,UAAU,GAAGC,YAAM,CAAoB,IAAI,CAAC;AAElD;EACA,IAAIC,gBAAgB,GAAG3D,WAAW;AAClC,EAAA,IAAIG,KAAK,EAAEwD,gBAAgB,GAAG,OAAO,CAAA,KAChC,IAAIvD,OAAO,EAAEuD,gBAAgB,GAAG,SAAS;AAE9C,EAAA,MAAMC,aAAa,GAAGxC,OAAO,KAAK,cAAc;AAEhD;AACAyC,EAAAA,eAAS,CAAC,MAAK;IACb,IAAI,CAACP,MAAM,EAAE;IAEb,MAAMQ,YAAY,GAAIC,CAAgB,IAAI;AACxC,MAAA,IAAIA,CAAC,CAACC,GAAG,KAAK,QAAQ,EAAE;AACtBC,QAAAA,WAAW,EAAE;AACf;KACD;AAEDC,IAAAA,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEL,YAAY,CAAC;IAClD,OAAO,MAAMI,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEN,YAAY,CAAC;AACpE,GAAC,EAAE,CAACR,MAAM,CAAC,CAAC;EAEZ,MAAMW,WAAW,GAAGA,MAAK;IACvBV,SAAS,CAAC,KAAK,CAAC;AAChBL,IAAAA,OAAO,KAAP,IAAA,IAAAA,OAAO,KAAP,MAAA,GAAA,MAAA,GAAAA,OAAO,EAAI;GACZ;EAED,MAAMmB,cAAc,GAAG3E,kBAAkB,CAAC;IACxCG,KAAK;AACLG,IAAAA,WAAW,EAAE2D,gBAAgB;IAC7BpD,IAAI;IACJI,MAAM;IACNI,MAAM;AACND,IAAAA;AACD,GAAA,CAAC,GAAG,GAAG,GAAGY,SAAS;EAEpB,MAAM4C,cAAc,GAAGnD,cAAc,CAAC;IACpCtB,KAAK;IACLU,IAAI;IACJa,OAAO;AACPE,IAAAA,SAAS,EAAEsC;AACZ,GAAA,CAAC;EACF,MAAMW,aAAa,GAAGhD,aAAa,CAAC;IAAE1B,KAAK;AAAEU,IAAAA;AAAM,GAAA,CAAC;EACpD,MAAMiE,WAAW,GAAGhD,WAAW,CAAC;IAAE3B,KAAK;AAAEU,IAAAA;AAAM,GAAA,CAAC;EAEhD,MAAMkE,eAAe,GAAIC,IAAqB,IAAI;IAChD,IAAI,CAACA,IAAI,CAAC5D,QAAQ,IAAI4D,IAAI,CAACC,OAAO,EAAE;MAClCD,IAAI,CAACC,OAAO,EAAE;AAChB;AACAV,IAAAA,WAAW,EAAE;GACd;AAED;AACAJ,EAAAA,eAAS,CAAC,MAAK;IACb,IAAID,aAAa,IAAIX,QAAQ,EAAE;MAC7BM,SAAS,CAAC,IAAI,CAAC;AACjB;AACF,GAAC,EAAE,CAACK,aAAa,EAAEX,QAAQ,CAAC,CAAC;AAE7B;EACA,MAAM2B,iBAAiB,GAAGA,MAA0B;IAClD,IAAI,CAAChB,aAAa,IAAI,CAACX,QAAQ,EAAE,OAAO,EAAE;IAE1C,MAAM4B,MAAM,GAAwB,EAAE;AACtC,IAAA,IAAI5B,QAAQ,CAAC6B,GAAG,KAAKC,SAAS,EAAEF,MAAM,CAACC,GAAG,GAAG7B,QAAQ,CAAC6B,GAAG;AACzD,IAAA,IAAI7B,QAAQ,CAAC+B,IAAI,KAAKD,SAAS,EAAEF,MAAM,CAACG,IAAI,GAAG/B,QAAQ,CAAC+B,IAAI;AAC5D,IAAA,IAAI/B,QAAQ,CAACgC,KAAK,KAAKF,SAAS,EAAEF,MAAM,CAACI,KAAK,GAAGhC,QAAQ,CAACgC,KAAK;AAC/D,IAAA,IAAIhC,QAAQ,CAACiC,MAAM,KAAKH,SAAS,EAAEF,MAAM,CAACK,MAAM,GAAGjC,QAAQ,CAACiC,MAAM;AAClE,IAAA,IAAItD,KAAK,EAAEiD,MAAM,CAACjD,KAAK,GAAG,OAAOA,KAAK,KAAK,QAAQ,GAAG,CAAA,EAAGA,KAAK,CAAA,EAAA,CAAI,GAAGA,KAAK;AAE1E,IAAA,OAAOiD,MAAM;GACd;EAED,OACEM,eAAK,CAAA,KAAA,EAAA;AAAAzD,IAAAA,SAAS,EAAEkC,aAAa,GAAG,EAAE,GAAG,UAAU;AAE5CwB,IAAAA,QAAA,EAAA,CAAA,CAACxB,aAAa,IACbuB,eACE,CAAA,QAAA,EAAAE,MAAA,CAAAC,MAAA,CAAA;AAAAC,MAAAA,GAAG,EAAE9B,UAAU;AACf+B,MAAAA,IAAI,EAAC,QAAQ;AACb9D,MAAAA,SAAS,EAAE2C,cAAc;MACzBM,OAAO,EAAEA,MAAM,CAAC7D,QAAQ,IAAIyC,SAAS,CAAC,CAACD,MAAM,CAAC;AAC9CxC,MAAAA,QAAQ,EAAEA,QAAQ;AAClB2B,MAAAA,IAAI,EAAEA;KAAI,EACNU,KAAK,EAAA;AAAAiC,MAAAA,QAAA,EAAA,CAETzD;AAAKD,QAAAA,SAAS,EAAC,yBAAyB;AAAA0D,QAAAA,QAAA,EACrCxC,cAAc,IACbjB,cAAM,CAAA,MAAA,EAAA;AAAAD,UAAAA,SAAS,EAAE7B,KAAK,KAAK,MAAM,GAAG,eAAe,GAAG,eAAe;AAClEuF,UAAAA,QAAA,EAAAvC;SACI;QAEL,EACLL,SAAS,IACRb,eAACF,eAAe,EAAA;AACdC,QAAAA,SAAS,EAAE,CAAA,qBAAA,EAAwB4B,MAAM,GAAG,YAAY,GAAG,EAAE,CAC3D/C,CAAAA,EAAAA,IAAI,KAAK,IAAI,GAAG,SAAS,GAAG,SAC9B,CAAA;AACA,OAAA,CACH;OAEJ,EAEA+C,MAAM,IACL6B,eAEE,CAAAM,mBAAA,EAAA;AAAAL,MAAAA,QAAA,EAAA,CAAAzD,cAAA,CAAA,KAAA,EAAA;AACED,QAAAA,SAAS,EAAE,CAAGkC,EAAAA,aAAa,GAAG,OAAO,GAAG,OAAO,CAAe,aAAA,CAAA;AAC9De,QAAAA,OAAO,EAAEV;QACT,EAGFkB,eAAA,CAAA,KAAA,EAAA;AACEzD,QAAAA,SAAS,EAAE,CAAG4C,EAAAA,cAAc,IAAIV,aAAa,GAAG,OAAO,GAAG,EAAE,CAC1D,CAAA,EAAA,CAACA,aAAa,GAAG,sBAAsB,GAAG,EAC5C,CAAA,iBAAA,EAAoBtB,gBAAgB,CAAE,CAAA;AACtCoD,QAAAA,KAAK,EAAAL,MAAA,CAAAC,MAAA,CAAA;AACH3C,UAAAA;AAAS,SAAA,EACNiC,iBAAiB,EAAE,CAAA;QAAAQ,QAAA,EAAA,CAIvB,CAACrC,aAAa,IAAIL,YAAY,KAC7ByC;AACEzD,UAAAA,SAAS,EAAE,CAAA,EAAG6C,aAAa,CAAA,CAAA,EAAI,CAACvB,eAAe,IAAI,CAACY,aAAa,GAAG,gBAAgB,GAAG,EAAE,CAAE,CAAA;UAC3Fe,OAAO,EAAE,CAAC3B,eAAe,IAAI,CAACY,aAAa,GAAGK,WAAW,GAAGc,SAAS;AAErEK,UAAAA,QAAA,EAAA,CAAAzD,cAAA,CAAA,KAAA,EAAA;AAAKD,YAAAA,SAAS,EAAC,eAAe;YAC3B0D,QAAA,EAAArC,aAAa,IAAIL;YACd,EACL,CAACM,eAAe,IAAKY,aAAa,IAAIb,aAAc,KACnDpB,cAAA,CAAA,QAAA,EAAA;AACED,YAAAA,SAAS,EAAC,sEAAsE;AAChFiD,YAAAA,OAAO,EAAEV,WAAW;0BACT,YAAY;AAAAmB,YAAAA,QAAA,EAEvBzD,cAAC,CAAAgE,eAAS;AACRpF,cAAAA,IAAI,EAAE,EAAE;AACRqF,cAAAA,KAAK,EAAE/F,KAAK,KAAK,MAAM,GAAG,SAAS,GAAG;;AAEjC,WAAA,CACV;UAEJ,EAGD8B,cACG,CAAA,KAAA,EAAA;AAAAyD,UAAAA,QAAA,EAAA7C,KAAK,CAACsD,GAAG,CAAC,CAACnB,IAAI,EAAEoB,KAAK,KACrBnE,cAEE,CAAA,KAAA,EAAA;AAAAD,YAAAA,SAAS,EAAE,CAAA,EAAG8C,WAAW,CAAA,CAAA,EAAIE,IAAI,CAAC5D,QAAQ,GAAG,+BAA+B,GAAG,EAAE,CAC/EgC,CAAAA,EAAAA,eAAe,IAAIgD,KAAK,GAAGvD,KAAK,CAACwD,MAAM,GAAG,CAAC,GACvC,YAAYlG,KAAK,KAAK,MAAM,GAAG,iCAAiC,GAAG,8BAA8B,CAAE,CAAA,GACnG,EACN,CAAE,CAAA;AACF8E,YAAAA,OAAO,EAAEA,MAAMF,eAAe,CAACC,IAAI,CAAC;YAEnCU,QAAA,EAAAV,IAAI,CAACsB;AARD,WAAA,EAAAtB,IAAI,CAACuB,EAAE,CAUf;AAAC,SAAA,CACE;AACF,OAAA,CAAA;AAAA,KAAA,CAET;AAAA,GAAA,CACG;AAEV;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/overlayMenu/index.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { CrossIcon } from '../icons'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\nconst overlayMenuTrigger = cva(\n 'w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] inline-flex items-center justify-between',\n {\n variants: {\n theme: {\n light: 'text-dash-primary-dark-blue',\n dark: 'text-white'\n },\n colorScheme: {\n default: '',\n brand: '',\n error: '',\n success: '',\n gray: '',\n lightGray: ''\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n border: {\n true: 'outline outline-1 outline-offset-[-1px]',\n false: ''\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n },\n filled: {\n false: '',\n true: ''\n }\n },\n compoundVariants: [\n {\n colorScheme: 'default',\n border: true,\n class: 'outline-[rgba(12,28,51,0.35)] focus:outline-[rgba(12,28,51,0.6)]'\n },\n {\n colorScheme: 'brand',\n border: true,\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n colorScheme: 'error',\n border: true,\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n colorScheme: 'success',\n border: true,\n class: 'outline-green-500 focus:outline-green-500'\n },\n {\n colorScheme: 'gray',\n border: true,\n theme: 'light',\n class: 'outline-[rgba(12,28,51,0.20)] focus:outline-[rgba(12,28,51,0.35)]'\n },\n {\n colorScheme: 'gray',\n border: true,\n theme: 'dark',\n class: 'outline-gray-600/50 focus:outline-gray-500'\n },\n {\n colorScheme: 'lightGray',\n border: true,\n theme: 'light',\n class: 'outline-dash-primary-dark-blue/[0.05] focus:outline-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'lightGray',\n border: true,\n theme: 'dark',\n class: 'outline-dash-primary-dark-blue/[0.05] focus:outline-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'gray',\n border: false,\n theme: 'light',\n class: 'bg-[rgba(12,28,51,0.03)]'\n },\n {\n colorScheme: 'gray',\n border: false,\n theme: 'dark',\n class: 'bg-gray-700/20'\n },\n // New lightGray scheme using dash-primary-dark-blue with 3% base and 5% hover\n {\n colorScheme: 'lightGray',\n border: false,\n theme: 'light',\n class: 'bg-dash-primary-dark-blue/[0.03] hover:bg-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'lightGray',\n border: false,\n theme: 'dark',\n class: 'bg-dash-primary-dark-blue/[0.03] hover:bg-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'lightGray',\n filled: true,\n theme: 'light',\n class: 'bg-dash-primary-dark-blue/[0.03] hover:bg-dash-primary-dark-blue/[0.05]'\n },\n {\n colorScheme: 'lightGray',\n filled: true,\n theme: 'dark',\n class: 'bg-dash-primary-dark-blue/[0.03] hover:bg-dash-primary-dark-blue/[0.05]'\n },\n // Default background when not filled\n {\n filled: false,\n theme: 'light',\n class: 'bg-white'\n },\n {\n filled: false,\n theme: 'dark',\n class: 'bg-gray-800'\n },\n // Filled variants\n {\n colorScheme: 'default',\n filled: true,\n theme: 'light',\n class: 'bg-white text-gray-900'\n },\n {\n colorScheme: 'default',\n filled: true,\n theme: 'dark',\n class: 'bg-gray-700 text-white'\n },\n {\n colorScheme: 'brand',\n filled: true,\n theme: 'light',\n class: 'bg-blue-50 text-blue-700'\n },\n {\n colorScheme: 'brand',\n filled: true,\n theme: 'dark',\n class: 'bg-blue-900/30 text-blue-300'\n },\n {\n colorScheme: 'error',\n filled: true,\n theme: 'light',\n class: 'bg-red-50 text-red-700'\n },\n {\n colorScheme: 'error',\n filled: true,\n theme: 'dark',\n class: 'bg-red-500/20 text-red-400'\n },\n {\n colorScheme: 'success',\n filled: true,\n theme: 'light',\n class: 'bg-green-50 text-green-700'\n },\n {\n colorScheme: 'success',\n filled: true,\n theme: 'dark',\n class: 'bg-green-500/20 text-green-400'\n },\n {\n colorScheme: 'gray',\n filled: true,\n theme: 'light',\n class: 'bg-gray-200 text-gray-800'\n },\n {\n colorScheme: 'gray',\n filled: true,\n theme: 'dark',\n class: 'bg-gray-600 text-gray-200'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n border: true,\n disabled: false,\n filled: false\n }\n }\n)\n\nconst overlayContent = cva(\n 'absolute z-50 overflow-hidden',\n {\n variants: {\n theme: {\n light: 'bg-white border border-[rgba(12,28,51,0.05)]',\n dark: 'bg-[rgba(255,255,255,0.15)] border border-[rgba(255,255,255,0.15)] backdrop-blur-[256px]'\n },\n size: {\n sm: 'rounded-[0.625rem]',\n md: 'rounded-[0.75rem]', \n xl: 'rounded-[0.9375rem]'\n },\n variant: {\n dropdown: 'min-w-full',\n 'context-menu': 'w-[200px]'\n },\n hasShadow: {\n true: 'shadow-[0px_0px_75px_0px_rgba(0,0,0,0.15)]',\n false: 'shadow-lg'\n }\n },\n defaultVariants: {\n variant: 'dropdown',\n hasShadow: false\n }\n }\n)\n\nconst overlayHeader = cva(\n 'flex items-center justify-between border-b gap-2',\n {\n variants: {\n theme: {\n light: 'border-[rgba(12,28,51,0.05)]',\n dark: 'border-[rgba(255,255,255,0.15)]'\n },\n size: {\n sm: 'px-[0.875rem] py-[0.375rem]',\n md: 'px-[1rem] py-[0.5rem]',\n xl: 'px-[1.125rem] py-[0.5rem]'\n }\n },\n defaultVariants: {\n theme: 'light',\n size: 'xl'\n }\n }\n)\n\nconst overlayItem = cva(\n 'relative flex cursor-pointer select-none items-center outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 rounded-none font-medium text-[0.75rem] leading-[1.416em]',\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33] hover:bg-gray-50',\n dark: 'text-white hover:bg-[rgba(255,255,255,0.1)]'\n },\n size: {\n sm: 'px-[0.875rem] py-[0.625rem]',\n md: 'px-[1rem] py-[0.6875rem]',\n xl: 'px-[1.125rem] py-[0.75rem]'\n }\n },\n defaultVariants: {\n theme: 'light',\n size: 'xl'\n }\n }\n)\n\n// Arrow icon\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n width='15'\n height='15'\n viewBox='0 0 15 15'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={className}\n >\n <path\n d='m4.93179 5.43179c0.20081-0.20081 0.52632-0.20081 0.72713 0l2.34108 2.34108 2.34108-2.34108c0.20081-0.20081 0.52632-0.20081 0.72713 0s0.20081 0.52632 0 0.72713l-2.70455 2.70455c-0.20081 0.20081-0.52632 0.20081-0.72713 0l-2.70455-2.70455c-0.20081-0.20081-0.20081-0.52632 0-0.72713z'\n fill='currentColor'\n fillRule='evenodd'\n clipRule='evenodd'\n />\n </svg>\n)\n\ntype OverlayMenuVariants = VariantProps<typeof overlayMenuTrigger>\n\nexport interface OverlayMenuItem {\n id: string\n content: React.ReactNode\n onClick?: () => void\n disabled?: boolean\n className?: string\n}\n\nexport interface OverlayMenuPosition {\n top?: number\n left?: number\n right?: number\n bottom?: number\n}\n\nexport interface OverlayMenuProps extends Omit<OverlayMenuVariants, 'theme' | 'disabled'> {\n className?: string\n triggerClassName?: string\n contentClassName?: string\n error?: boolean\n success?: boolean\n border?: boolean\n filled?: boolean\n items?: OverlayMenuItem[]\n showArrow?: boolean\n disabled?: boolean\n name?: string\n overlayLabel?: string\n maxHeight?: string\n triggerContent?: React.ReactNode\n placeholder?: string\n showItemBorders?: boolean\n wrapperClassName?: string\n variant?: 'dropdown' | 'context-menu'\n align?: 'left' | 'center' | 'right'\n headerContent?: React.ReactNode\n showCloseButton?: boolean\n closeButtonAlign?: 'left' | 'center' | 'right'\n position?: OverlayMenuPosition\n width?: string | number\n onClose?: () => void\n /** Color scheme override for light theme */\n colorSchemeLight?: 'default' | 'brand' | 'error' | 'success' | 'gray' | 'lightGray'\n /** Color scheme override for dark theme */\n colorSchemeDark?: 'default' | 'brand' | 'error' | 'success' | 'gray' | 'lightGray'\n}\n\n/**\n * Overlay menu component that opens above the trigger with overlay positioning.\n * Supports custom content items with onClick handlers.\n * \n * @param variant - 'dropdown' (default) or 'context-menu'\n * @param headerContent - Custom header content (for context-menu variant)\n * @param showCloseButton - Show close button in header\n * @param position - Position object for context-menu variant\n * @param width - Custom width (default: 200px for context-menu)\n */\nconst closeButtonAlignClasses: Record<'left' | 'center' | 'right', string> = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n}\n\ninterface OverlayMenuHeaderProps {\n headerClasses: string\n hasContent: boolean\n showCloseButton: boolean\n closeButtonAlign: 'left' | 'center' | 'right'\n isContextMenu: boolean\n theme: 'light' | 'dark'\n onClose: () => void\n children?: React.ReactNode\n}\n\nconst OverlayMenuHeader: React.FC<OverlayMenuHeaderProps> = ({\n headerClasses,\n hasContent,\n showCloseButton,\n closeButtonAlign,\n isContextMenu,\n theme,\n onClose,\n children,\n}) => {\n const isCloseOnly = showCloseButton && !hasContent\n\n return (\n <div\n className={`${headerClasses} ${isCloseOnly ? closeButtonAlignClasses[closeButtonAlign] : ''} ${!showCloseButton && !isContextMenu ? 'cursor-pointer' : ''}`}\n onClick={!showCloseButton && !isContextMenu ? onClose : undefined}\n >\n {hasContent && (\n <div className='w-full flex-1'>{children}</div>\n )}\n {showCloseButton && (\n <button\n className='flex items-center cursor-pointer hover:opacity-70 transition-opacity'\n onClick={onClose}\n aria-label='Close menu'\n >\n <CrossIcon\n size={16}\n color={theme === 'dark' ? '#FFFFFF' : '#0C1C33'}\n />\n </button>\n )}\n </div>\n )\n}\n\nexport const OverlayMenu: React.FC<OverlayMenuProps> = ({\n className = '',\n triggerClassName = '',\n contentClassName = '',\n colorScheme,\n colorSchemeLight,\n colorSchemeDark,\n size,\n error = false,\n success = false,\n border = true,\n filled = false,\n disabled = false,\n items = [],\n showArrow = true,\n name,\n overlayLabel,\n maxHeight = '200px',\n triggerContent,\n placeholder = 'Menu',\n showItemBorders = true,\n variant = 'dropdown',\n align = 'left',\n wrapperClassName = '',\n headerContent,\n showCloseButton = false,\n closeButtonAlign = 'right',\n position,\n width,\n onClose,\n ...props\n}) => {\n const { theme } = useTheme()\n const [isOpen, setIsOpen] = useState(false)\n const triggerRef = useRef<HTMLButtonElement>(null)\n\n const effectiveColorScheme = useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark) ?? 'default'\n\n // Determine color scheme based on state\n let finalColorScheme: typeof effectiveColorScheme = effectiveColorScheme\n if (error) finalColorScheme = 'error'\n else if (success) finalColorScheme = 'success'\n\n const isContextMenu = variant === 'context-menu'\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleClose()\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen])\n\n const handleClose = () => {\n setIsOpen(false)\n onClose?.()\n }\n\n const alignClasses: Record<'left' | 'center' | 'right', string> = {\n left: 'left-0',\n center: 'left-1/2 -translate-x-1/2',\n right: 'right-0',\n }\n\n const triggerClasses = overlayMenuTrigger({\n theme,\n colorScheme: finalColorScheme,\n size,\n border,\n filled,\n disabled\n }) + ' ' + className\n\n const contentClasses = overlayContent({ \n theme, \n size, \n variant,\n hasShadow: isContextMenu \n })\n const headerClasses = overlayHeader({ theme, size })\n const itemClasses = overlayItem({ theme, size })\n\n const handleItemClick = (item: OverlayMenuItem) => {\n if (!item.disabled && item.onClick) {\n item.onClick()\n }\n handleClose()\n }\n\n // For context-menu variant, show menu immediately if position is provided\n useEffect(() => {\n if (isContextMenu && position) {\n setIsOpen(true)\n }\n }, [isContextMenu, position])\n\n // Calculate position styles for context-menu\n const getPositionStyles = (): React.CSSProperties => {\n if (!isContextMenu || !position) return {}\n \n const styles: React.CSSProperties = {}\n if (position.top !== undefined) styles.top = position.top\n if (position.left !== undefined) styles.left = position.left\n if (position.right !== undefined) styles.right = position.right\n if (position.bottom !== undefined) styles.bottom = position.bottom\n if (width) styles.width = typeof width === 'number' ? `${width}px` : width\n \n return styles\n }\n\n return (\n <div className={isContextMenu ? wrapperClassName : `relative ${wrapperClassName}`}>\n {/* Trigger button - only for dropdown variant */}\n {!isContextMenu && (\n <button\n ref={triggerRef}\n type='button'\n className={`${triggerClasses} ${triggerClassName}`}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n name={name}\n {...props}\n >\n <div className='w-full flex-1 text-left'>\n {triggerContent || (\n <span className={theme === 'dark' ? 'text-gray-400' : 'text-gray-500'}>\n {placeholder}\n </span>\n )}\n </div>\n {showArrow && (\n <ChevronDownIcon \n className={`transition-transform ${isOpen ? 'rotate-180' : ''} ${\n size === 'sm' ? 'w-3 h-3' : 'w-4 h-4'\n }`} \n />\n )}\n </button>\n )}\n\n {isOpen && (\n <>\n {/* Backdrop */}\n <div \n className={`${isContextMenu ? 'fixed' : 'fixed'} inset-0 z-40`}\n onClick={handleClose}\n />\n\n {/* Overlay content */}\n <div\n className={`${contentClasses} ${isContextMenu ? 'fixed' : ''} ${\n !isContextMenu ? `top-0 ${alignClasses[align]}` : ''\n } overflow-y-auto ${contentClassName}`}\n style={{ \n maxHeight,\n ...getPositionStyles()\n }}\n >\n {/* Custom header for context-menu or overlayLabel for dropdown */}\n {(headerContent || overlayLabel || showCloseButton) && (\n <OverlayMenuHeader\n headerClasses={headerClasses}\n hasContent={!!(headerContent || overlayLabel)}\n showCloseButton={showCloseButton || (isContextMenu && !!headerContent)}\n closeButtonAlign={closeButtonAlign}\n isContextMenu={isContextMenu}\n theme={theme}\n onClose={handleClose}\n >\n {headerContent || overlayLabel}\n </OverlayMenuHeader>\n )}\n\n {/* Menu items */}\n <div>\n {items.map((item, index) => (\n <div\n key={item.id}\n className={`${itemClasses} ${item.disabled ? 'opacity-50 !cursor-not-allowed' : ''} ${\n showItemBorders && index < items.length - 1\n ? `border-b ${theme === 'dark' ? 'border-[rgba(255,255,255,0.15)]' : 'border-[rgba(12,28,51,0.05)]'}`\n : ''\n } ${item.className ?? ''}`}\n onClick={() => handleItemClick(item)}\n >\n {item.content}\n </div>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default OverlayMenu\n"],"names":["overlayMenuTrigger","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","gray","lightGray","size","sm","md","xl","border","true","false","disabled","filled","compoundVariants","class","defaultVariants","overlayContent","variant","dropdown","hasShadow","overlayHeader","overlayItem","ChevronDownIcon","className","_jsx","width","height","viewBox","fill","xmlns","d","fillRule","clipRule","closeButtonAlignClasses","left","center","right","OverlayMenuHeader","headerClasses","hasContent","showCloseButton","closeButtonAlign","isContextMenu","onClose","children","isCloseOnly","_jsxs","onClick","undefined","CrossIcon","color","OverlayMenu","_a","triggerClassName","contentClassName","colorSchemeLight","colorSchemeDark","items","showArrow","name","overlayLabel","maxHeight","triggerContent","placeholder","showItemBorders","align","wrapperClassName","headerContent","position","props","__rest","useTheme","isOpen","setIsOpen","useState","triggerRef","useRef","effectiveColorScheme","_b","useColorScheme","finalColorScheme","useEffect","handleEscape","e","key","handleClose","document","addEventListener","removeEventListener","alignClasses","triggerClasses","contentClasses","itemClasses","handleItemClick","item","getPositionStyles","styles","top","bottom","Object","assign","ref","type","_Fragment","style","map","index","length","content","id"],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export interface OverlayMenuItem {
|
|
|
14
14
|
content: React.ReactNode;
|
|
15
15
|
onClick?: () => void;
|
|
16
16
|
disabled?: boolean;
|
|
17
|
+
className?: string;
|
|
17
18
|
}
|
|
18
19
|
export interface OverlayMenuPosition {
|
|
19
20
|
top?: number;
|
|
@@ -23,6 +24,7 @@ export interface OverlayMenuPosition {
|
|
|
23
24
|
}
|
|
24
25
|
export interface OverlayMenuProps extends Omit<OverlayMenuVariants, 'theme' | 'disabled'> {
|
|
25
26
|
className?: string;
|
|
27
|
+
triggerClassName?: string;
|
|
26
28
|
contentClassName?: string;
|
|
27
29
|
error?: boolean;
|
|
28
30
|
success?: boolean;
|
|
@@ -37,22 +39,19 @@ export interface OverlayMenuProps extends Omit<OverlayMenuVariants, 'theme' | 'd
|
|
|
37
39
|
triggerContent?: React.ReactNode;
|
|
38
40
|
placeholder?: string;
|
|
39
41
|
showItemBorders?: boolean;
|
|
42
|
+
wrapperClassName?: string;
|
|
40
43
|
variant?: 'dropdown' | 'context-menu';
|
|
44
|
+
align?: 'left' | 'center' | 'right';
|
|
41
45
|
headerContent?: React.ReactNode;
|
|
42
46
|
showCloseButton?: boolean;
|
|
47
|
+
closeButtonAlign?: 'left' | 'center' | 'right';
|
|
43
48
|
position?: OverlayMenuPosition;
|
|
44
49
|
width?: string | number;
|
|
45
50
|
onClose?: () => void;
|
|
51
|
+
/** Color scheme override for light theme */
|
|
52
|
+
colorSchemeLight?: 'default' | 'brand' | 'error' | 'success' | 'gray' | 'lightGray';
|
|
53
|
+
/** Color scheme override for dark theme */
|
|
54
|
+
colorSchemeDark?: 'default' | 'brand' | 'error' | 'success' | 'gray' | 'lightGray';
|
|
46
55
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Overlay menu component that opens above the trigger with overlay positioning.
|
|
49
|
-
* Supports custom content items with onClick handlers.
|
|
50
|
-
*
|
|
51
|
-
* @param variant - 'dropdown' (default) or 'context-menu'
|
|
52
|
-
* @param headerContent - Custom header content (for context-menu variant)
|
|
53
|
-
* @param showCloseButton - Show close button in header
|
|
54
|
-
* @param position - Position object for context-menu variant
|
|
55
|
-
* @param width - Custom width (default: 200px for context-menu)
|
|
56
|
-
*/
|
|
57
56
|
export declare const OverlayMenu: React.FC<OverlayMenuProps>;
|
|
58
57
|
export default OverlayMenu;
|
|
@@ -6,6 +6,7 @@ import { useState, useRef, useEffect } from 'react';
|
|
|
6
6
|
import { cva } from 'class-variance-authority';
|
|
7
7
|
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
8
8
|
import { CrossIcon } from '../icons/index.esm.js';
|
|
9
|
+
import { useColorScheme } from '../../hooks/useColorScheme.esm.js';
|
|
9
10
|
|
|
10
11
|
const overlayMenuTrigger = cva('w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] inline-flex items-center justify-between', {
|
|
11
12
|
variants: {
|
|
@@ -265,11 +266,48 @@ const ChevronDownIcon = ({
|
|
|
265
266
|
* @param position - Position object for context-menu variant
|
|
266
267
|
* @param width - Custom width (default: 200px for context-menu)
|
|
267
268
|
*/
|
|
269
|
+
const closeButtonAlignClasses = {
|
|
270
|
+
left: 'justify-start',
|
|
271
|
+
center: 'justify-center',
|
|
272
|
+
right: 'justify-end'
|
|
273
|
+
};
|
|
274
|
+
const OverlayMenuHeader = ({
|
|
275
|
+
headerClasses,
|
|
276
|
+
hasContent,
|
|
277
|
+
showCloseButton,
|
|
278
|
+
closeButtonAlign,
|
|
279
|
+
isContextMenu,
|
|
280
|
+
theme,
|
|
281
|
+
onClose,
|
|
282
|
+
children
|
|
283
|
+
}) => {
|
|
284
|
+
const isCloseOnly = showCloseButton && !hasContent;
|
|
285
|
+
return jsxs("div", {
|
|
286
|
+
className: `${headerClasses} ${isCloseOnly ? closeButtonAlignClasses[closeButtonAlign] : ''} ${!showCloseButton && !isContextMenu ? 'cursor-pointer' : ''}`,
|
|
287
|
+
onClick: !showCloseButton && !isContextMenu ? onClose : undefined,
|
|
288
|
+
children: [hasContent && jsx("div", {
|
|
289
|
+
className: 'w-full flex-1',
|
|
290
|
+
children: children
|
|
291
|
+
}), showCloseButton && jsx("button", {
|
|
292
|
+
className: 'flex items-center cursor-pointer hover:opacity-70 transition-opacity',
|
|
293
|
+
onClick: onClose,
|
|
294
|
+
"aria-label": 'Close menu',
|
|
295
|
+
children: jsx(CrossIcon, {
|
|
296
|
+
size: 16,
|
|
297
|
+
color: theme === 'dark' ? '#FFFFFF' : '#0C1C33'
|
|
298
|
+
})
|
|
299
|
+
})]
|
|
300
|
+
});
|
|
301
|
+
};
|
|
268
302
|
const OverlayMenu = _a => {
|
|
303
|
+
var _b;
|
|
269
304
|
var {
|
|
270
305
|
className = '',
|
|
306
|
+
triggerClassName = '',
|
|
271
307
|
contentClassName = '',
|
|
272
308
|
colorScheme,
|
|
309
|
+
colorSchemeLight,
|
|
310
|
+
colorSchemeDark,
|
|
273
311
|
size,
|
|
274
312
|
error = false,
|
|
275
313
|
success = false,
|
|
@@ -285,20 +323,24 @@ const OverlayMenu = _a => {
|
|
|
285
323
|
placeholder = 'Menu',
|
|
286
324
|
showItemBorders = true,
|
|
287
325
|
variant = 'dropdown',
|
|
326
|
+
align = 'left',
|
|
327
|
+
wrapperClassName = '',
|
|
288
328
|
headerContent,
|
|
289
329
|
showCloseButton = false,
|
|
330
|
+
closeButtonAlign = 'right',
|
|
290
331
|
position,
|
|
291
332
|
width,
|
|
292
333
|
onClose
|
|
293
334
|
} = _a,
|
|
294
|
-
props = __rest(_a, ["className", "contentClassName", "colorScheme", "size", "error", "success", "border", "filled", "disabled", "items", "showArrow", "name", "overlayLabel", "maxHeight", "triggerContent", "placeholder", "showItemBorders", "variant", "headerContent", "showCloseButton", "position", "width", "onClose"]);
|
|
335
|
+
props = __rest(_a, ["className", "triggerClassName", "contentClassName", "colorScheme", "colorSchemeLight", "colorSchemeDark", "size", "error", "success", "border", "filled", "disabled", "items", "showArrow", "name", "overlayLabel", "maxHeight", "triggerContent", "placeholder", "showItemBorders", "variant", "align", "wrapperClassName", "headerContent", "showCloseButton", "closeButtonAlign", "position", "width", "onClose"]);
|
|
295
336
|
const {
|
|
296
337
|
theme
|
|
297
338
|
} = useTheme();
|
|
298
339
|
const [isOpen, setIsOpen] = useState(false);
|
|
299
340
|
const triggerRef = useRef(null);
|
|
341
|
+
const effectiveColorScheme = (_b = useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark)) !== null && _b !== void 0 ? _b : 'default';
|
|
300
342
|
// Determine color scheme based on state
|
|
301
|
-
let finalColorScheme =
|
|
343
|
+
let finalColorScheme = effectiveColorScheme;
|
|
302
344
|
if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
|
|
303
345
|
const isContextMenu = variant === 'context-menu';
|
|
304
346
|
// Handle Escape key
|
|
@@ -316,6 +358,11 @@ const OverlayMenu = _a => {
|
|
|
316
358
|
setIsOpen(false);
|
|
317
359
|
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
318
360
|
};
|
|
361
|
+
const alignClasses = {
|
|
362
|
+
left: 'left-0',
|
|
363
|
+
center: 'left-1/2 -translate-x-1/2',
|
|
364
|
+
right: 'right-0'
|
|
365
|
+
};
|
|
319
366
|
const triggerClasses = overlayMenuTrigger({
|
|
320
367
|
theme,
|
|
321
368
|
colorScheme: finalColorScheme,
|
|
@@ -362,11 +409,11 @@ const OverlayMenu = _a => {
|
|
|
362
409
|
return styles;
|
|
363
410
|
};
|
|
364
411
|
return jsxs("div", {
|
|
365
|
-
className: isContextMenu ?
|
|
412
|
+
className: isContextMenu ? wrapperClassName : `relative ${wrapperClassName}`,
|
|
366
413
|
children: [!isContextMenu && jsxs("button", Object.assign({
|
|
367
414
|
ref: triggerRef,
|
|
368
415
|
type: 'button',
|
|
369
|
-
className: triggerClasses
|
|
416
|
+
className: `${triggerClasses} ${triggerClassName}`,
|
|
370
417
|
onClick: () => !disabled && setIsOpen(!isOpen),
|
|
371
418
|
disabled: disabled,
|
|
372
419
|
name: name
|
|
@@ -385,31 +432,28 @@ const OverlayMenu = _a => {
|
|
|
385
432
|
className: `${isContextMenu ? 'fixed' : 'fixed'} inset-0 z-40`,
|
|
386
433
|
onClick: handleClose
|
|
387
434
|
}), jsxs("div", {
|
|
388
|
-
className: `${contentClasses} ${isContextMenu ? 'fixed' : ''} ${!isContextMenu ?
|
|
435
|
+
className: `${contentClasses} ${isContextMenu ? 'fixed' : ''} ${!isContextMenu ? `top-0 ${alignClasses[align]}` : ''} overflow-y-auto ${contentClassName}`,
|
|
389
436
|
style: Object.assign({
|
|
390
437
|
maxHeight
|
|
391
438
|
}, getPositionStyles()),
|
|
392
|
-
children: [(headerContent || overlayLabel) &&
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
"aria-label": 'Close menu',
|
|
402
|
-
children: jsx(CrossIcon, {
|
|
403
|
-
size: 16,
|
|
404
|
-
color: theme === 'dark' ? '#FFFFFF' : '#0C1C33'
|
|
405
|
-
})
|
|
406
|
-
})]
|
|
439
|
+
children: [(headerContent || overlayLabel || showCloseButton) && jsx(OverlayMenuHeader, {
|
|
440
|
+
headerClasses: headerClasses,
|
|
441
|
+
hasContent: !!(headerContent || overlayLabel),
|
|
442
|
+
showCloseButton: showCloseButton || isContextMenu && !!headerContent,
|
|
443
|
+
closeButtonAlign: closeButtonAlign,
|
|
444
|
+
isContextMenu: isContextMenu,
|
|
445
|
+
theme: theme,
|
|
446
|
+
onClose: handleClose,
|
|
447
|
+
children: headerContent || overlayLabel
|
|
407
448
|
}), jsx("div", {
|
|
408
|
-
children: items.map((item, index) =>
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
449
|
+
children: items.map((item, index) => {
|
|
450
|
+
var _a;
|
|
451
|
+
return jsx("div", {
|
|
452
|
+
className: `${itemClasses} ${item.disabled ? 'opacity-50 !cursor-not-allowed' : ''} ${showItemBorders && index < items.length - 1 ? `border-b ${theme === 'dark' ? 'border-[rgba(255,255,255,0.15)]' : 'border-[rgba(12,28,51,0.05)]'}` : ''} ${(_a = item.className) !== null && _a !== void 0 ? _a : ''}`,
|
|
453
|
+
onClick: () => handleItemClick(item),
|
|
454
|
+
children: item.content
|
|
455
|
+
}, item.id);
|
|
456
|
+
})
|
|
413
457
|
})]
|
|
414
458
|
})]
|
|
415
459
|
})]
|