@bioturing/components 0.45.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/base-menu/index.d.ts.map +1 -1
- package/dist/components/base-menu/item.d.ts.map +1 -1
- package/dist/components/base-menu/item.js +6 -13
- package/dist/components/base-menu/item.js.map +1 -1
- package/dist/components/button/style.css +1 -1
- package/dist/components/combobox/component.d.ts +32 -1
- package/dist/components/combobox/component.d.ts.map +1 -1
- package/dist/components/combobox/component.js +286 -261
- package/dist/components/combobox/component.js.map +1 -1
- package/dist/components/combobox/style.css +1 -1
- package/dist/components/combobox/utils.d.ts +2 -0
- package/dist/components/combobox/utils.d.ts.map +1 -0
- package/dist/components/combobox/utils.js +10 -0
- package/dist/components/combobox/utils.js.map +1 -0
- package/dist/components/hooks/useDraggable.d.ts.map +1 -1
- package/dist/components/hooks/useDraggable.js +34 -27
- package/dist/components/hooks/useDraggable.js.map +1 -1
- package/dist/components/popup-panel/component.d.ts +1 -1
- package/dist/components/popup-panel/component.d.ts.map +1 -1
- package/dist/components/popup-panel/component.js +217 -233
- package/dist/components/popup-panel/component.js.map +1 -1
- package/dist/components/popup-panel/constants.d.ts +5 -1
- package/dist/components/popup-panel/constants.d.ts.map +1 -1
- package/dist/components/popup-panel/constants.js +8 -4
- package/dist/components/popup-panel/constants.js.map +1 -1
- package/dist/components/popup-panel/style.css +1 -1
- package/dist/components/popup-panel/types.d.ts +14 -1
- package/dist/components/popup-panel/types.d.ts.map +1 -1
- package/dist/components/select-trigger/style.css +1 -1
- package/dist/components/theme-provider/style.css +1 -1
- package/dist/components/truncate/helpers.d.ts +13 -7
- package/dist/components/truncate/helpers.d.ts.map +1 -1
- package/dist/components/truncate/helpers.js +102 -85
- package/dist/components/truncate/helpers.js.map +1 -1
- package/dist/stats.html +1 -1
- package/dist/tailwind.css +16 -0
- package/dist/tokens/and-theme/tokens.d.ts.map +1 -1
- package/dist/tokens/and-theme/tokens.js +4 -1
- package/dist/tokens/and-theme/tokens.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/combobox/component.tsx"],"sourcesContent":["\"use client\";\nimport { Combobox as BaseCombobox } from \"@base-ui/react/combobox\";\nimport DisabledContext from \"antd/es/config-provider/DisabledContext\";\nimport { FormItemInputContext } from \"antd/es/form/context\";\nimport { ValidateStatus } from \"antd/es/form/FormItem\";\nimport type { PopoverProps } from \"antd/es/popover\";\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n} from \"react\";\nimport { BaseMenuItem } from \"../base-menu\";\nimport { useControlledState } from \"../hooks\";\nimport { SelectTrigger } from \"../select-trigger\";\nimport { clsx, reactNodeToString, useCls } from \"../utils\";\n\nimport { XIcon } from \"@bioturing/assets\";\nimport { BaseMenu } from \"../base-menu\";\nimport { Empty } from \"../empty\";\nimport \"./style.css\";\n\nexport type ComboboxOption<\n T extends React.Key,\n O extends Record<string, unknown> = {},\n> = {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n} & O;\n\nexport interface ComboboxProps<\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n> {\n /** Array of options to be displayed in the combobox */\n options?: ComboboxOption<T, O>[];\n /** Current value of the combobox */\n value?: M extends true ? T[] : T;\n /** Default value when uncontrolled */\n defaultValue?: M extends true ? T[] : T;\n /** Callback when value changes */\n onChange?: (value: M extends true ? T[] : T) => void;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Validation status */\n status?: ValidateStatus;\n /** Whether to allow clearing the selection */\n allowClear?: boolean;\n /** Whether to allow multiple selections */\n multiple?: M;\n /** Maximum number of tags to show */\n maxTagCount?: number;\n /** Whether to show search functionality */\n showSearch?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Placement of the dropdown */\n placement?: PopoverProps[\"placement\"];\n /** Custom className for the component */\n className?: string;\n /** Custom class names for different parts */\n classNames?: {\n trigger?: string;\n input?: string;\n option?: string;\n optionIcon?: string;\n optionText?: string;\n list?: string;\n portal?: string;\n };\n /** Size of the combobox */\n size?: \"small\" | \"middle\" | \"large\";\n /** Loading state */\n loading?: boolean;\n /** Custom render for options */\n optionRender?: (\n option: ComboboxOption<T, O>,\n props: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n /** Filter function for search */\n filterOption?:\n | boolean\n | ((input: string, option: ComboboxOption<T, O>) => boolean);\n /** Callback when search input changes */\n onSearch?: (value: string) => void;\n /** Custom dropdown render */\n dropdownRender?: (menu: React.ReactElement) => React.ReactElement;\n /** Custom clear icon */\n clearIcon?: React.ReactNode;\n /** Custom suffix icon */\n suffixIcon?: React.ReactNode;\n // /**\n // * Show selection summary instead of individual tags when multiple\n // * @default false\n // */\n // showSelectionSummary?: boolean;\n // /**\n // * Render function for the selection summary in multiple case\n // * @default (selectedValues) => `${selectedValues.length} items selected`\n // */\n // selectionSummaryRender?: (selectedValues: T[]) => React.ReactNode;\n /**\n * Show select all option when in multiple mode\n * @default false\n */\n showSelectAll?: boolean;\n /**\n * Render function for the select all option\n */\n selectAllRender?: (props: {\n onSelectAll: () => void;\n onDeselectAll: () => void;\n checked: boolean;\n indeterminate: boolean;\n }) => React.ReactNode;\n /**\n * Function to extract keywords from the item for search filtering\n * @default (option) => [String(option.key), reactNodeToString(option.label)]\n */\n getOptionKeywords?: (option: ComboboxOption<T, O>) => string[];\n /**\n * Render function for the option label\n */\n optionLabelRender?: (\n option: ComboboxOption<T, O>,\n props?: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n}\n\nconst ComboboxInner = <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n {\n options = [],\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder = \"Select...\",\n disabled: disabledProp = false,\n status: statusProp,\n allowClear = false,\n multiple = false as M,\n showSearch: _showSearch = true,\n open: controlledOpen,\n onOpenChange,\n className,\n classNames,\n size = \"middle\",\n optionRender,\n onSearch,\n clearIcon,\n suffixIcon,\n // showSelectionSummary: _showSelectionSummary = false,\n // selectionSummaryRender,\n showSelectAll = false,\n optionLabelRender,\n getOptionKeywords: _getOptionKeywords = (option: ComboboxOption<T, O>) => [\n String(option.value),\n reactNodeToString(option.label),\n ],\n ...rest\n }: ComboboxProps<T, M, O>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const [value, setValue] = useControlledState(\n controlledValue,\n onChange,\n defaultValue !== undefined\n ? defaultValue\n : multiple\n ? ([] as T[])\n : undefined,\n );\n\n const [open, setOpen] = useControlledState(\n controlledOpen,\n onOpenChange,\n false,\n );\n\n const cls = useCls();\n const inputContainerRef = useRef<HTMLDivElement>(null);\n\n // Get form context values\n const { status: contextStatus } = useContext(FormItemInputContext);\n const contextDisabled = useContext(DisabledContext);\n\n // Merge context values with props\n const mergedStatus = statusProp || contextStatus;\n const disabled = disabledProp || contextDisabled;\n\n const handleValueChange = useCallback(\n (newValue: M extends true ? T[] : T) => {\n setValue(newValue);\n onChange?.(newValue);\n },\n [setValue, onChange],\n );\n\n const handleSelectAll = useCallback(() => {\n if (multiple) {\n const allValues = options.map((option) => option.value);\n (handleValueChange as (v: T[]) => void)(allValues);\n }\n }, [multiple, options, handleValueChange]);\n\n const handleDeselectAll = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n }\n }, [multiple, handleValueChange]);\n\n const handleClear = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n } else {\n (handleValueChange as (v: T) => void)(undefined as T);\n }\n }, [multiple, handleValueChange]);\n\n // Prepare selected values\n const selectedValues = useMemo(() => {\n return Array.isArray(value) ? value : value ? [value] : [];\n }, [value]);\n\n // Select all option logic\n const selectAllOption = useMemo(() => {\n if (!showSelectAll || !multiple || options.length === 0) {\n return null;\n }\n\n const selectedFromFiltered = selectedValues.filter((val) =>\n options.some((opt) => opt.value === val),\n );\n const checked =\n selectedFromFiltered.length === options.length && options.length > 0;\n const indeterminate =\n selectedFromFiltered.length > 0 &&\n selectedFromFiltered.length < options.length;\n\n return {\n checked,\n indeterminate,\n onToggle: () => {\n if (indeterminate || checked) {\n handleDeselectAll();\n } else {\n handleSelectAll();\n }\n },\n };\n }, [\n showSelectAll,\n multiple,\n options,\n selectedValues,\n handleDeselectAll,\n handleSelectAll,\n ]);\n\n // Convert options to Base UI format\n const baseUIItems = useMemo(() => options.map((opt) => opt.value), [options]);\n\n // Get display value for SelectTrigger\n const displayValue = useMemo(() => {\n if (multiple) {\n return selectedValues.length > 0\n ? `${selectedValues.length} item${\n selectedValues.length === 1 ? \"\" : \"s\"\n } selected`\n : null;\n } else {\n const selectedOption = options.find(\n (opt) => opt.value === selectedValues[0],\n );\n return selectedOption?.label || null;\n }\n }, [multiple, selectedValues, options]);\n\n const inputClassName = clsx(\n cls(\"combobox-input\"),\n cls(`combobox-input-${size}`),\n mergedStatus && cls(`combobox-input-${mergedStatus}`),\n classNames?.input,\n );\n\n // Memoize render props to avoid recreating on every render\n const positionerRender = useCallback(\n (props: React.ComponentProps<\"div\">) => (\n <BaseMenu.Root {...props}></BaseMenu.Root>\n ),\n [],\n );\n\n const popupRender = useCallback(\n (props: React.ComponentProps<\"div\">) => (\n <BaseMenu.Popup {...props}></BaseMenu.Popup>\n ),\n [],\n );\n\n const separatorRender = useCallback(\n (props: React.ComponentProps<\"div\">) => <BaseMenu.Divider {...props} />,\n [],\n );\n\n const listRender = useCallback(\n (props: React.ComponentProps<\"div\">) => (\n <BaseMenu.List {...props}></BaseMenu.List>\n ),\n [],\n );\n\n const itemToStringLabel = useCallback(\n (itemValue: T) => {\n const option = options.find((opt) => opt.value === itemValue);\n return reactNodeToString(option?.label || String(itemValue));\n },\n [options],\n );\n\n return (\n <div ref={ref} className={clsx(cls(\"combobox\"), className)} {...rest}>\n <BaseCombobox.Root<T, M>\n value={\n (multiple\n ? selectedValues\n : (selectedValues[0] ?? null)) as M extends true ? T[] : T | null\n }\n onValueChange={(newValue) => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)(\n Array.isArray(newValue) ? (newValue as T[]) : [],\n );\n } else {\n (handleValueChange as (v: T) => void)(newValue as T);\n }\n }}\n open={open}\n onOpenChange={setOpen}\n multiple={multiple}\n disabled={disabled}\n items={baseUIItems}\n itemToStringLabel={itemToStringLabel}\n >\n {/* Single Selection Layout using SelectTrigger compound components */}\n {!multiple ? (\n <SelectTrigger.Root\n ref={inputContainerRef}\n as=\"div\"\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(\n classNames?.trigger,\n cls(\"combobox-trigger-single\"),\n )}\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Input\n placeholder={placeholder}\n className={clsx(className, inputClassName)}\n disabled={disabled}\n onChange={(event) => {\n onSearch?.(event.target.value);\n }}\n {...rest}\n />\n )}\n />\n <SelectTrigger.Clear\n render={(props) => (\n <BaseCombobox.Clear {...props}></BaseCombobox.Clear>\n )}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n ) : (\n /* Multiple Selection Layout using SelectTrigger compound components */\n <SelectTrigger.Root\n ref={inputContainerRef}\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(\n classNames?.trigger,\n cls(\"combobox-trigger-multiple\"),\n )}\n as=\"div\"\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Chips\n className={clsx(cls(\"combobox-chips\"), className)}\n {...rest}\n >\n <BaseCombobox.Value>\n {(selectedItems) => (\n <>\n {selectedItems.map((item: T) => {\n const option = options.find(\n (opt) => opt.value === item,\n );\n return (\n <BaseCombobox.Chip\n key={item}\n className={clsx(cls(\"combobox-chip\"))}\n >\n {option?.icon && (\n <span\n className={clsx(cls(\"combobox-chip-icon\"))}\n >\n {option.icon}\n </span>\n )}\n <span className={clsx(cls(\"combobox-chip-text\"))}>\n {option\n ? optionLabelRender\n ? optionLabelRender(option)\n : option.label\n : item}\n </span>\n <BaseCombobox.ChipRemove\n className={clsx(cls(\"combobox-chip-remove\"))}\n >\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n );\n })}\n\n <BaseCombobox.Input\n placeholder={\n selectedItems.length > 0 ? \"\" : placeholder\n }\n className={inputClassName}\n disabled={disabled}\n onChange={(event) => {\n onSearch?.(event.target.value);\n }}\n />\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n )}\n />\n <SelectTrigger.Clear\n render={(props) => (\n <BaseCombobox.Clear {...props}></BaseCombobox.Clear>\n )}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n )}\n\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n anchor={inputContainerRef.current}\n sideOffset={4}\n render={positionerRender}\n >\n <BaseCombobox.Popup\n className={clsx(cls(\"combobox-popup\"), classNames?.portal)}\n render={popupRender}\n >\n {/* Select All Option */}\n {selectAllOption && (\n <>\n <BaseMenuItem\n as=\"button\"\n type=\"button\"\n className={clsx(cls(\"combobox-select-all\"))}\n selected={selectAllOption.checked}\n onClick={selectAllOption.onToggle}\n indeterminate={selectAllOption.indeterminate}\n showCheckbox\n >\n Select All\n </BaseMenuItem>\n <BaseCombobox.Separator render={separatorRender} />\n </>\n )}\n <BaseCombobox.List\n className={clsx(cls(\"combobox-list\"), classNames?.list)}\n render={listRender}\n >\n {(item: T) => {\n const option = options.find((opt) => opt.value === item);\n const isSelected = (selectedValues as T[]).includes(item);\n return optionRender ? (\n optionRender(option, {})\n ) : (\n <BaseMenuItem\n key={option.value}\n disabled={option.disabled}\n selected={isSelected}\n showCheckbox={multiple}\n icon={option.icon}\n classNames={{\n root: clsx(classNames?.option),\n icon: classNames?.optionIcon,\n text: classNames?.optionText,\n }}\n labelRender={\n optionLabelRender\n ? (props: React.HTMLAttributes<HTMLElement>) =>\n optionLabelRender(option, props)\n : undefined\n }\n render={(props: React.HTMLAttributes<HTMLElement>) => (\n <BaseCombobox.Item\n value={item as T}\n disabled={option.disabled}\n {...props}\n data-disabled={option.disabled}\n data-selected={isSelected}\n />\n )}\n >\n {option.label}\n </BaseMenuItem>\n );\n }}\n </BaseCombobox.List>\n\n <BaseCombobox.Empty className={clsx(cls(\"combobox-empty\"))}>\n <Empty description=\"No options found\" />\n </BaseCombobox.Empty>\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n </BaseCombobox.Root>\n </div>\n );\n};\n\nconst MainCombobox = forwardRef(ComboboxInner) as <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n props: ComboboxProps<T, M, O> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReturnType<typeof ComboboxInner>;\n\nexport const Combobox = Object.assign(MainCombobox, {\n // Add any sub components here if needed\n});\n\nexport default Combobox;\n"],"names":["ComboboxInner","options","controlledValue","defaultValue","onChange","placeholder","disabledProp","statusProp","allowClear","multiple","_showSearch","controlledOpen","onOpenChange","className","classNames","size","optionRender","onSearch","clearIcon","suffixIcon","showSelectAll","optionLabelRender","_getOptionKeywords","option","reactNodeToString","rest","ref","value","setValue","useControlledState","open","setOpen","cls","useCls","inputContainerRef","useRef","contextStatus","useContext","FormItemInputContext","contextDisabled","DisabledContext","mergedStatus","disabled","handleValueChange","useCallback","newValue","handleSelectAll","allValues","handleDeselectAll","handleClear","selectedValues","useMemo","selectAllOption","selectedFromFiltered","val","opt","checked","indeterminate","baseUIItems","displayValue","inputClassName","clsx","positionerRender","props","jsx","BaseMenu","popupRender","separatorRender","listRender","itemToStringLabel","itemValue","jsxs","BaseCombobox","SelectTrigger","children","selectedItems","Fragment","item","XIcon","event","icon","BaseMenuItem","isSelected","Empty","MainCombobox","forwardRef","Combobox"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/combobox/component.tsx"],"sourcesContent":["\"use client\";\nimport { Combobox as BaseCombobox } from \"@base-ui/react/combobox\";\nimport DisabledContext from \"antd/es/config-provider/DisabledContext\";\nimport { FormItemInputContext } from \"antd/es/form/context\";\nimport { ValidateStatus } from \"antd/es/form/FormItem\";\nimport type { PopoverProps } from \"antd/es/popover\";\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { BaseMenuItem } from \"../base-menu\";\nimport { useControlledState } from \"../hooks\";\nimport { SelectTrigger } from \"../select-trigger\";\nimport { clsx, reactNodeToString, useCls } from \"../utils\";\n\nimport { XIcon } from \"@bioturing/assets\";\nimport { BaseMenu } from \"../base-menu\";\nimport { Empty } from \"../empty\";\nimport { splitBySeparators } from \"./utils\";\nimport \"./style.css\";\n\n// Module-level static renderers — avoid recreating on every render\nconst positionerRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Root {...props} />;\nconst popupRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Popup {...props} />;\nconst separatorRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.Divider {...props} />;\nconst listRender = (props: React.ComponentProps<\"div\">) => <BaseMenu.List {...props} />;\n\nexport type ComboboxOption<T extends React.Key, O extends Record<string, unknown> = {}> = {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n} & O;\n\nexport interface ComboboxProps<\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n> {\n /** Array of options to be displayed in the combobox */\n options?: ComboboxOption<T, O>[];\n /** Current value of the combobox */\n value?: M extends true ? T[] : T;\n /** Default value when uncontrolled */\n defaultValue?: M extends true ? T[] : T;\n /** Callback when value changes */\n onChange?: (value: M extends true ? T[] : T) => void;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Validation status */\n status?: ValidateStatus;\n /** Whether to allow clearing the selection */\n allowClear?: boolean;\n /** Whether to allow multiple selections */\n multiple?: M;\n /** Maximum number of tags to show */\n maxTagCount?: number;\n /** Whether to show search functionality */\n showSearch?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Placement of the dropdown */\n placement?: PopoverProps[\"placement\"];\n /** Custom className for the component */\n className?: string;\n /** Custom class names for different parts */\n classNames?: {\n trigger?: string;\n input?: string;\n option?: string;\n optionIcon?: string;\n optionText?: string;\n list?: string;\n portal?: string;\n };\n /** Size of the combobox */\n size?: \"small\" | \"middle\" | \"large\";\n /** Loading state */\n loading?: boolean;\n /** Custom render for options */\n optionRender?: (\n option: ComboboxOption<T, O>,\n props: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n /** Filter function for search */\n /**\n * Filter function for search\n * - `true` or `undefined`: default filtering (splits by tokenSeparators if provided)\n * - `false`: disables filtering\n * - custom function: `(input, option) => boolean`\n * @default true\n */\n filterOption?: boolean | ((input: string, option: ComboboxOption<T, O>) => boolean);\n /** Callback when search input changes */\n onSearch?: (value: string) => void;\n /** Custom dropdown render */\n dropdownRender?: (menu: React.ReactElement) => React.ReactElement;\n /** Custom clear icon */\n clearIcon?: React.ReactNode;\n /** Custom suffix icon */\n suffixIcon?: React.ReactNode;\n // /**\n // * Show selection summary instead of individual tags when multiple\n // * @default false\n // */\n // showSelectionSummary?: boolean;\n // /**\n // * Render function for the selection summary in multiple case\n // * @default (selectedValues) => `${selectedValues.length} items selected`\n // */\n // selectionSummaryRender?: (selectedValues: T[]) => React.ReactNode;\n /**\n * Show select all option when in multiple mode\n * @default false\n */\n showSelectAll?: boolean;\n /**\n * Render function for the select all option\n */\n selectAllRender?: (props: {\n onSelectAll: () => void;\n onDeselectAll: () => void;\n checked: boolean;\n indeterminate: boolean;\n }) => React.ReactNode;\n /**\n * Function to extract keywords from the item for search filtering\n * @default (option) => [String(option.key), reactNodeToString(option.label)]\n */\n getOptionKeywords?: (option: ComboboxOption<T, O>) => string[];\n /**\n * Render function for the option label\n */\n optionLabelRender?: (\n option: ComboboxOption<T, O>,\n props?: React.HTMLAttributes<HTMLElement>,\n ) => React.ReactElement;\n /**\n * Whether the popup width should match the trigger width.\n * When `false`, the popup can exceed the trigger width to fit long option labels.\n * @default true\n */\n popupMatchSelectWidth?: boolean;\n /**\n * Allow adding items by typing the exact label or value and pressing Enter.\n * @default false\n */\n addOnEnter?: boolean;\n /**\n * Characters to split input by when adding multiple items on Enter.\n * Only applies when `addOnEnter` and `multiple` are true.\n * @default undefined\n */\n tokenSeparators?: string[];\n /**\n * Automatically highlight the first matching item while filtering.\n * When enabled in single-select mode, Enter selects the highlighted\n * item natively and `addOnEnter` is ignored to avoid conflicts.\n * @default true\n */\n autoHighlight?: boolean;\n}\n\nconst ComboboxInner = <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n {\n options = [],\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder = \"Select...\",\n disabled: disabledProp = false,\n status: statusProp,\n allowClear = false,\n multiple = false as M,\n showSearch: _showSearch = true,\n open: controlledOpen,\n onOpenChange,\n className,\n classNames,\n size = \"middle\",\n optionRender,\n onSearch,\n clearIcon,\n suffixIcon,\n placement = \"bottomLeft\",\n // showSelectionSummary: _showSelectionSummary = false,\n // selectionSummaryRender,\n showSelectAll = false,\n optionLabelRender,\n getOptionKeywords: _getOptionKeywords = (option: ComboboxOption<T, O>) => [\n String(option.value),\n reactNodeToString(option.label),\n ],\n popupMatchSelectWidth = true,\n addOnEnter = false,\n tokenSeparators,\n autoHighlight = true,\n filterOption,\n ...rest\n }: ComboboxProps<T, M, O>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const [value, setValue] = useControlledState(\n controlledValue,\n onChange,\n defaultValue !== undefined ? defaultValue : multiple ? ([] as T[]) : undefined,\n );\n\n const [open, setOpen] = useControlledState(controlledOpen, onOpenChange, false);\n\n const cls = useCls();\n const inputContainerRef = useRef<HTMLDivElement>(null);\n\n // Get form context values\n const { status: contextStatus } = useContext(FormItemInputContext);\n const contextDisabled = useContext(DisabledContext);\n\n // Merge context values with props\n const mergedStatus = statusProp || contextStatus;\n const disabled = disabledProp || contextDisabled;\n\n const handleValueChange = useCallback(\n (newValue: M extends true ? T[] : T) => {\n setValue(newValue);\n onChange?.(newValue);\n },\n [setValue, onChange],\n );\n\n const handleSelectAll = useCallback(() => {\n if (multiple) {\n const allValues = options.map((option) => option.value);\n (handleValueChange as (v: T[]) => void)(allValues);\n }\n }, [multiple, options, handleValueChange]);\n\n const handleDeselectAll = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n }\n }, [multiple, handleValueChange]);\n\n const handleClear = useCallback(() => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)([]);\n } else {\n (handleValueChange as (v: T) => void)(undefined as T);\n }\n }, [multiple, handleValueChange]);\n\n // Prepare selected values\n const selectedValues = useMemo(() => {\n return Array.isArray(value) ? value : value ? [value] : [];\n }, [value]);\n\n // Build a Map for O(1) option lookups.\n // `options.find()` was being called 7+ times per render and inside\n // the hot `filter` path on every keystroke.\n const optionMap = useMemo(() => {\n const map = new Map<T, ComboboxOption<T, O>>();\n for (const opt of options) {\n map.set(opt.value, opt);\n }\n return map;\n }, [options]);\n\n // Select all option logic\n const selectAllOption = useMemo(() => {\n if (!showSelectAll || !multiple || options.length === 0) {\n return null;\n }\n\n const selectedFromFiltered = selectedValues.filter((val) => optionMap.has(val as T));\n const checked = selectedFromFiltered.length === options.length && options.length > 0;\n const indeterminate =\n selectedFromFiltered.length > 0 && selectedFromFiltered.length < options.length;\n\n return {\n checked,\n indeterminate,\n onToggle: () => {\n if (indeterminate || checked) {\n handleDeselectAll();\n } else {\n handleSelectAll();\n }\n },\n };\n }, [showSelectAll, multiple, options, optionMap, selectedValues, handleDeselectAll, handleSelectAll]);\n\n // Convert options to Base UI format\n const baseUIItems = useMemo(() => options.map((opt) => opt.value), [options]);\n\n // Get display value for SelectTrigger\n const displayValue = useMemo(() => {\n if (multiple) {\n return selectedValues.length > 0\n ? `${selectedValues.length} item${selectedValues.length === 1 ? \"\" : \"s\"} selected`\n : null;\n } else {\n const selectedOption = optionMap.get(selectedValues[0] as T);\n return selectedOption?.label || null;\n }\n }, [multiple, selectedValues, optionMap]);\n\n const inputClassName = clsx(\n cls(\"combobox-input\"),\n cls(`combobox-input-${size}`),\n mergedStatus && cls(`combobox-input-${mergedStatus}`),\n classNames?.input,\n );\n\n const itemToStringLabel = useCallback(\n (itemValue: T) => {\n const option = optionMap.get(itemValue);\n return reactNodeToString(option?.label || String(itemValue));\n },\n [optionMap],\n );\n\n const [searchValue, setSearchValue] = useState(\"\");\n\n const findOptionByInput = useCallback(\n (input: string): ComboboxOption<T, O> | undefined => {\n const trimmed = input.trim();\n if (!trimmed) return undefined;\n const lowerTrimmed = trimmed.toLowerCase();\n\n // Fast path: exact match by value (O(1))\n for (const [val, opt] of optionMap) {\n if (String(val).toLowerCase() === lowerTrimmed) {\n return opt;\n }\n }\n // Fallback: match by label\n for (const opt of optionMap.values()) {\n if (reactNodeToString(opt.label).toLowerCase() === lowerTrimmed) {\n return opt;\n }\n }\n return undefined;\n },\n [optionMap],\n );\n\n const handleAddOnEnter = useCallback(\n (input: string): boolean => {\n if (!addOnEnter || !input.trim()) return false;\n\n const tokens =\n multiple && tokenSeparators && tokenSeparators.length > 0\n ? splitBySeparators(input, tokenSeparators)\n : [input.trim()];\n\n const matchedValues: T[] = [];\n for (const token of tokens) {\n const option = findOptionByInput(token);\n if (option && !option.disabled) {\n matchedValues.push(option.value);\n }\n }\n\n if (matchedValues.length === 0) return false;\n\n if (multiple) {\n const current = Array.isArray(value) ? [...value] : [];\n const newValues = [...new Set([...current, ...matchedValues])];\n (handleValueChange as (v: T[]) => void)(newValues);\n } else {\n (handleValueChange as (v: T) => void)(matchedValues[0]);\n setOpen(false);\n }\n\n return true;\n },\n [\n addOnEnter,\n multiple,\n tokenSeparators,\n findOptionByInput,\n value,\n handleValueChange,\n setOpen,\n ],\n );\n\n const hasSeparator = useMemo(() => {\n if (!tokenSeparators || tokenSeparators.length === 0) return false;\n return tokenSeparators.some((sep) => searchValue.includes(sep));\n }, [searchValue, tokenSeparators]);\n\n const effectiveAutoHighlight = multiple ? autoHighlight && !hasSeparator : autoHighlight;\n\n const createInputKeyDownHandler = useCallback(\n (currentSearchValue: string) => (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && addOnEnter && currentSearchValue) {\n // In single-select mode with autoHighlight, let Base UI handle Enter\n // to select the natively highlighted item instead of exact matching.\n if (!multiple && autoHighlight) return;\n\n const matched = handleAddOnEnter(currentSearchValue);\n if (matched) {\n event.preventDefault();\n setSearchValue(\"\");\n onSearch?.(\"\");\n }\n }\n },\n [addOnEnter, autoHighlight, multiple, handleAddOnEnter, onSearch],\n );\n\n const mergedFilter = useMemo(() => {\n if (filterOption === false) {\n return null;\n }\n\n if (typeof filterOption === \"function\") {\n return (itemValue: T, query: string) => {\n const option = optionMap.get(itemValue);\n return filterOption(query, option);\n };\n }\n\n return (itemValue: T, query: string) => {\n if (!query) return true;\n const option = optionMap.get(itemValue);\n if (!option) return false;\n\n const tokens =\n tokenSeparators && tokenSeparators.length > 0\n ? splitBySeparators(query, tokenSeparators)\n : [query];\n\n const keywords = _getOptionKeywords(option).map((k) => k.toLowerCase());\n\n return tokens.some((token) => {\n const lowerToken = token.toLowerCase();\n return keywords.some((keyword) => keyword.includes(lowerToken));\n });\n };\n }, [filterOption, optionMap, tokenSeparators, _getOptionKeywords]);\n\n return (\n <div ref={ref} className={clsx(cls(\"combobox\"), className)} {...rest}>\n <BaseCombobox.Root<T, M>\n value={\n (multiple ? selectedValues : (selectedValues[0] ?? null)) as M extends true\n ? T[]\n : T | null\n }\n onValueChange={(newValue) => {\n if (multiple) {\n (handleValueChange as (v: T[]) => void)(\n Array.isArray(newValue) ? (newValue as T[]) : [],\n );\n } else {\n (handleValueChange as (v: T) => void)(newValue as T);\n }\n }}\n inputValue={searchValue}\n onInputValueChange={(val: string) => {\n setSearchValue(val);\n onSearch?.(val);\n }}\n open={open}\n onOpenChange={setOpen}\n multiple={multiple}\n disabled={disabled}\n autoHighlight={effectiveAutoHighlight}\n items={baseUIItems}\n itemToStringLabel={itemToStringLabel}\n filter={mergedFilter}\n >\n {/* Single Selection Layout using SelectTrigger compound components */}\n {!multiple ? (\n <SelectTrigger.Root\n ref={inputContainerRef}\n as=\"div\"\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-single\"))}\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Input\n placeholder={placeholder}\n className={clsx(className, inputClassName)}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n {...rest}\n />\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n ) : (\n /* Multiple Selection Layout using SelectTrigger compound components */\n <SelectTrigger.Root\n ref={inputContainerRef}\n size={size}\n disabled={disabled}\n open={open}\n status={mergedStatus}\n placeholder={placeholder}\n displayValue={displayValue}\n allowClear={allowClear}\n suffixIcon={suffixIcon}\n clearIcon={clearIcon}\n onClear={handleClear}\n onOpenChange={setOpen}\n className={clsx(classNames?.trigger, cls(\"combobox-trigger-multiple\"))}\n as=\"div\"\n >\n <SelectTrigger.Content\n contentRender={({ className, children, ...rest }) => (\n <BaseCombobox.Chips className={clsx(cls(\"combobox-chips\"), className)} {...rest}>\n <BaseCombobox.Value>\n {(selectedItems) => (\n <>\n {selectedItems.map((item: T) => {\n const option = optionMap.get(item);\n return (\n <BaseCombobox.Chip key={item} className={clsx(cls(\"combobox-chip\"))}>\n {option?.icon && (\n <span className={clsx(cls(\"combobox-chip-icon\"))}>\n {option.icon}\n </span>\n )}\n <span className={clsx(cls(\"combobox-chip-text\"))}>\n {option\n ? optionLabelRender\n ? optionLabelRender(option)\n : option.label\n : item}\n </span>\n <BaseCombobox.ChipRemove\n className={clsx(cls(\"combobox-chip-remove\"))}\n >\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n );\n })}\n\n <BaseCombobox.Input\n placeholder={selectedItems.length > 0 ? \"\" : placeholder}\n className={inputClassName}\n disabled={disabled}\n onKeyDown={createInputKeyDownHandler(searchValue)}\n />\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n )}\n />\n <SelectTrigger.Clear\n render={(props) => <BaseCombobox.Clear {...props}></BaseCombobox.Clear>}\n />\n <SelectTrigger.Arrow\n render={(props, { icon }) => (\n <BaseCombobox.Trigger {...props}>\n <BaseCombobox.Icon>{icon}</BaseCombobox.Icon>\n </BaseCombobox.Trigger>\n )}\n />\n </SelectTrigger.Root>\n )}\n\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n anchor={inputContainerRef.current}\n sideOffset={4}\n side={placement.startsWith(\"top\") ? \"top\" : \"bottom\"}\n align={\n placement.endsWith(\"Right\")\n ? \"end\"\n : placement === \"top\" || placement === \"bottom\"\n ? \"center\"\n : \"start\"\n }\n render={positionerRender}\n >\n <BaseCombobox.Popup\n className={clsx(\n cls(\"combobox-popup\"),\n !popupMatchSelectWidth && cls(\"combobox-popup--auto-width\"),\n classNames?.portal,\n )}\n render={popupRender}\n >\n {/* Select All Option */}\n {selectAllOption && (\n <>\n <BaseMenuItem\n as=\"button\"\n type=\"button\"\n className={clsx(cls(\"combobox-select-all\"))}\n selected={selectAllOption.checked}\n onClick={selectAllOption.onToggle}\n indeterminate={selectAllOption.indeterminate}\n showCheckbox\n >\n Select All\n </BaseMenuItem>\n <BaseCombobox.Separator render={separatorRender} />\n </>\n )}\n <BaseCombobox.List\n className={clsx(cls(\"combobox-list\"), classNames?.list)}\n render={listRender}\n >\n {(item: T) => {\n const option = optionMap.get(item);\n if (!option) return null;\n const isSelected = (selectedValues as T[]).includes(item);\n return optionRender ? (\n optionRender(option, {})\n ) : (\n <BaseMenuItem\n key={option.value}\n disabled={option.disabled}\n selected={isSelected}\n showCheckbox={multiple}\n icon={option.icon}\n classNames={{\n root: clsx(classNames?.option),\n icon: classNames?.optionIcon,\n text: classNames?.optionText,\n }}\n labelRender={\n optionLabelRender\n ? (props: React.HTMLAttributes<HTMLElement>) =>\n optionLabelRender(option, props)\n : undefined\n }\n render={(props: React.HTMLAttributes<HTMLElement>) => (\n <BaseCombobox.Item\n value={item as T}\n disabled={option.disabled}\n {...props}\n data-disabled={option.disabled}\n data-selected={isSelected}\n />\n )}\n >\n {option.label}\n </BaseMenuItem>\n );\n }}\n </BaseCombobox.List>\n\n <BaseCombobox.Empty className={clsx(cls(\"combobox-empty\"))}>\n <Empty description=\"No options found\" />\n </BaseCombobox.Empty>\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n </BaseCombobox.Root>\n </div>\n );\n};\n\nconst MainCombobox = forwardRef(ComboboxInner) as <\n T extends React.Key,\n M extends boolean,\n O extends Record<string, unknown> = {},\n>(\n props: ComboboxProps<T, M, O> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReturnType<typeof ComboboxInner>;\n\nexport const Combobox = Object.assign(MainCombobox, {\n // Add any sub components here if needed\n});\n\nexport default Combobox;\n"],"names":["positionerRender","props","jsx","BaseMenu","popupRender","separatorRender","listRender","ComboboxInner","options","controlledValue","defaultValue","onChange","placeholder","disabledProp","statusProp","allowClear","multiple","_showSearch","controlledOpen","onOpenChange","className","classNames","size","optionRender","onSearch","clearIcon","suffixIcon","placement","showSelectAll","optionLabelRender","_getOptionKeywords","option","reactNodeToString","popupMatchSelectWidth","addOnEnter","tokenSeparators","autoHighlight","filterOption","rest","ref","value","setValue","useControlledState","open","setOpen","cls","useCls","inputContainerRef","useRef","contextStatus","useContext","FormItemInputContext","contextDisabled","DisabledContext","mergedStatus","disabled","handleValueChange","useCallback","newValue","handleSelectAll","allValues","handleDeselectAll","handleClear","selectedValues","useMemo","optionMap","map","opt","selectAllOption","selectedFromFiltered","val","checked","indeterminate","baseUIItems","displayValue","inputClassName","clsx","itemToStringLabel","itemValue","searchValue","setSearchValue","useState","findOptionByInput","input","trimmed","lowerTrimmed","handleAddOnEnter","tokens","splitBySeparators","matchedValues","token","current","newValues","hasSeparator","sep","effectiveAutoHighlight","createInputKeyDownHandler","currentSearchValue","event","mergedFilter","query","keywords","k","lowerToken","keyword","jsxs","BaseCombobox","SelectTrigger","children","selectedItems","Fragment","item","XIcon","icon","BaseMenuItem","isSelected","Empty","MainCombobox","forwardRef","Combobox"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.ds-combobox{position:relative;display:inline-block;width:100%}.ds-combobox-popup{width:var(--anchor-width)}.ds-combobox-input{flex:1;border:none;outline:none;background:transparent;color:
|
|
1
|
+
@layer components{.ds-combobox{position:relative;display:inline-block;width:100%}.ds-combobox-popup{width:var(--anchor-width)}.ds-combobox-popup--auto-width{width:max-content;min-width:var(--anchor-width);max-width:var(--available-width)}.ds-combobox-input{flex:1;border:none;outline:none;background:transparent;color:var(--ds-color-text);min-width:0}.ds-combobox-input::placeholder{color:var(--ds-color-text-placeholder)}.ds-combobox-divider{border:none;border-bottom:1px solid var(--ds-color-split);margin:.25rem 0}.ds-combobox-chip{display:inline-flex;align-items:center;gap:.25rem;background:var(--ds-color-fill-secondary);border-radius:var(--ds-border-radius-sm);padding:.25rem .5rem;font-size:var(--ds-font-size);color:var(--ds-color-text);max-width:100%;min-width:0;height:var(--ds-control-line-height)}.ds-combobox-chip-icon{display:flex;align-items:center;flex-shrink:0;font-size:.75rem}.ds-combobox-chip-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-combobox-chip-remove{display:flex;align-items:center;justify-content:center;padding:.125rem;border-radius:var(--ds-border-radius-lg);cursor:pointer;color:var(--ds-color-text-secondary);transition:all .2s var(--ds-motion-ease-out);background:none;border:none;font-size:.875rem;line-height:1}.ds-combobox-chip-remove:hover{background:var(--ds-control-item-bg-hover);color:var(--ds-color-text)}.ds-combobox-chips-container .ds-combobox-input{flex:1;min-width:120px;border:none;background:transparent;padding:.25rem 0;margin:0}.ds-combobox-chips{display:flex;flex-wrap:wrap;gap:.375rem}.ds-select-trigger-small .ds-combobox-chips{gap:.25rem}.ds-combobox-trigger-multiple.ds-select-trigger-has-value .ds-select-trigger-content{padding-left:.5rem}.ds-combobox[data-disabled=true] .ds-combobox-chip{background-color:var(--ds-color-bg-disabled);color:var(--ds-color-text-disabled)}.ds-combobox[data-disabled=true] .ds-combobox-chip-remove{cursor:not-allowed;color:var(--ds-color-text-disabled)}.ds-combobox-empty{padding:1rem}.ds-combobox-empty:empty{display:none}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAM/E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/components/combobox/utils.ts"],"sourcesContent":["export function splitBySeparators(input: string, separators: string[]): string[] {\n let result: string[] = [input];\n for (const sep of separators) {\n result = result.flatMap((part) => part.split(sep));\n }\n return result.map((t) => t.trim()).filter(Boolean);\n}\n"],"names":["splitBySeparators","input","separators","result","sep","part","t"],"mappings":"AAAO,SAASA,EAAkBC,GAAeC,GAAgC;AAC/E,MAAIC,IAAmB,CAACF,CAAK;AAC7B,aAAWG,KAAOF;AAChB,IAAAC,IAASA,EAAO,QAAQ,CAACE,MAASA,EAAK,MAAMD,CAAG,CAAC;AAEnD,SAAOD,EAAO,IAAI,CAACG,MAAMA,EAAE,KAAA,CAAM,EAAE,OAAO,OAAO;AACnD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggable.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useDraggable.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,OAAO,GAAE,OAAc;mBAChB,WAAW,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"useDraggable.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useDraggable.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,OAAO,GAAE,OAAc;mBAChB,WAAW,GAAG,IAAI;EAqNrD"}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useCallback as
|
|
3
|
-
function
|
|
4
|
-
return { ref:
|
|
5
|
-
if (!n || !
|
|
6
|
-
let
|
|
2
|
+
import { useCallback as M } from "react";
|
|
3
|
+
function B(d = !0) {
|
|
4
|
+
return { ref: M((n) => {
|
|
5
|
+
if (!n || !d) return;
|
|
6
|
+
let a = !1, f = 0, m = 0, g = 0, v = 0, o = null;
|
|
7
7
|
n.addEventListener("mousedown", p);
|
|
8
|
-
function
|
|
8
|
+
function l(t) {
|
|
9
|
+
if (t) {
|
|
10
|
+
n.setAttribute("data-dragging", "true");
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
n.removeAttribute("data-dragging");
|
|
14
|
+
}
|
|
15
|
+
function y(t) {
|
|
9
16
|
let e = t;
|
|
10
17
|
for (; e && e !== n; ) {
|
|
11
18
|
if (e.classList.contains("resize-handle") || e.classList.contains("ds-resizable-resize-handle") || e.getAttribute("data-resize-handle") || e.getAttribute("data-testid")?.includes("resize") || e.getAttribute("data-placement") || // Resizable handles have data-placement
|
|
@@ -17,39 +24,39 @@ function T(u = !0) {
|
|
|
17
24
|
}
|
|
18
25
|
return !1;
|
|
19
26
|
}
|
|
20
|
-
function
|
|
27
|
+
function L(t) {
|
|
21
28
|
const e = window.getComputedStyle(t), s = new DOMMatrix(e.transform);
|
|
22
29
|
return {
|
|
23
30
|
x: s.m41 || parseInt(e.left) || 0,
|
|
24
31
|
y: s.m42 || parseInt(e.top) || 0
|
|
25
32
|
};
|
|
26
33
|
}
|
|
27
|
-
function
|
|
34
|
+
function w(t, e, s) {
|
|
28
35
|
t.style.transform = `translate(${e}px, ${s}px)`;
|
|
29
36
|
}
|
|
30
37
|
function p(t) {
|
|
31
38
|
const e = t.target;
|
|
32
|
-
if (
|
|
39
|
+
if (y(e))
|
|
33
40
|
return;
|
|
34
41
|
if (n.closest("[data-resizable]")) {
|
|
35
|
-
const r = n.getBoundingClientRect(), E = t.clientX - r.left,
|
|
36
|
-
if (
|
|
42
|
+
const r = n.getBoundingClientRect(), E = t.clientX - r.left, z = t.clientY - r.top, c = 8, A = z <= c, S = z >= r.height - c, x = E <= c, D = E >= r.width - c, X = n.querySelector('.ds-resizable-resize-handle[data-placement*="top"]'), Y = n.querySelector('.ds-resizable-resize-handle[data-placement*="bottom"]'), q = n.querySelector('.ds-resizable-resize-handle[data-placement*="left"]'), H = n.querySelector('.ds-resizable-resize-handle[data-placement*="right"]');
|
|
43
|
+
if (A && X || S && Y || x && q || D && H)
|
|
37
44
|
return;
|
|
38
45
|
}
|
|
39
|
-
t.preventDefault(), t.stopPropagation(),
|
|
40
|
-
const s =
|
|
41
|
-
|
|
46
|
+
t.preventDefault(), t.stopPropagation(), a = !0, l(!0), f = t.clientX, m = t.clientY;
|
|
47
|
+
const s = L(n);
|
|
48
|
+
g = s.x, v = s.y, document.body.style.cursor = "grabbing", document.body.style.userSelect = "none", n.querySelectorAll('button, a, input, select, textarea, [role="button"]').forEach((r) => {
|
|
42
49
|
r.style.pointerEvents = "auto";
|
|
43
|
-
}), document.addEventListener("mousemove",
|
|
50
|
+
}), document.addEventListener("mousemove", u, { passive: !1 }), document.addEventListener("mouseup", i), document.addEventListener("touchmove", h, { passive: !1 }), document.addEventListener("touchend", i);
|
|
44
51
|
}
|
|
45
|
-
function
|
|
46
|
-
!
|
|
47
|
-
const e = t.clientX -
|
|
48
|
-
|
|
52
|
+
function u(t) {
|
|
53
|
+
!a || !n || (t.preventDefault(), o && cancelAnimationFrame(o), o = requestAnimationFrame(() => {
|
|
54
|
+
const e = t.clientX - f, s = t.clientY - m, b = g + e, r = v + s;
|
|
55
|
+
w(n, b, r);
|
|
49
56
|
}));
|
|
50
57
|
}
|
|
51
58
|
function h(t) {
|
|
52
|
-
if (!
|
|
59
|
+
if (!a || !n) return;
|
|
53
60
|
t.preventDefault();
|
|
54
61
|
const e = t.touches[0];
|
|
55
62
|
if (!e) return;
|
|
@@ -58,19 +65,19 @@ function T(u = !0) {
|
|
|
58
65
|
clientY: e.clientY,
|
|
59
66
|
bubbles: !0
|
|
60
67
|
});
|
|
61
|
-
|
|
68
|
+
u(s);
|
|
62
69
|
}
|
|
63
|
-
function
|
|
64
|
-
|
|
70
|
+
function i() {
|
|
71
|
+
a && (a = !1, l(!1), o && (cancelAnimationFrame(o), o = null), document.body.style.cursor = "", document.body.style.userSelect = "", n && n.querySelectorAll('button, a, input, select, textarea, [role="button"]').forEach((e) => {
|
|
65
72
|
e.style.pointerEvents = "";
|
|
66
|
-
}), document.removeEventListener("mousemove",
|
|
73
|
+
}), document.removeEventListener("mousemove", u), document.removeEventListener("mouseup", i), document.removeEventListener("touchmove", h), document.removeEventListener("touchend", i));
|
|
67
74
|
}
|
|
68
75
|
return () => {
|
|
69
|
-
n.removeEventListener("mousedown", p),
|
|
76
|
+
n.removeEventListener("mousedown", p), l(!1), i();
|
|
70
77
|
};
|
|
71
|
-
}, [
|
|
78
|
+
}, [d]) };
|
|
72
79
|
}
|
|
73
80
|
export {
|
|
74
|
-
|
|
81
|
+
B as useDraggable
|
|
75
82
|
};
|
|
76
83
|
//# sourceMappingURL=useDraggable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggable.js","sources":["../../../src/components/hooks/useDraggable.ts"],"sourcesContent":["\"use client\";\nimport { useCallback } from \"react\";\n\nexport function useDraggable(enabled: boolean = true) {\n const ref = useCallback((element: HTMLElement | null) => {\n if (!element || !enabled) return;\n \n let isDragging = false;\n let startX = 0;\n let startY = 0;\n let initialLeft = 0;\n let initialTop = 0;\n let rafId: number | null = null;\n\n element.addEventListener(\"mousedown\", dragMouseDown);\n\n function isResizeHandle(target: HTMLElement): boolean {\n // Check if the element or any of its parents is a resize handle\n let current = target;\n while (current && current !== element) {\n // Check for various resize handle indicators\n if (\n current.classList.contains('resize-handle') ||\n current.classList.contains('ds-resizable-resize-handle') ||\n current.getAttribute('data-resize-handle') ||\n current.getAttribute('data-testid')?.includes('resize') ||\n current.getAttribute('data-placement') || // Resizable handles have data-placement\n current.style.cursor?.includes('resize') ||\n // Check for react-use-resizable specific classes/attributes\n current.classList.contains('resizable-handle') ||\n current.hasAttribute('data-resizable-handle') ||\n // Check for common resize cursor styles\n ['n-resize', 's-resize', 'e-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize'].includes(current.style.cursor)\n ) {\n return true;\n }\n current = current.parentElement as HTMLElement;\n }\n return false;\n }\n\n function getElementPosition(el: HTMLElement) {\n const style = window.getComputedStyle(el);\n const matrix = new DOMMatrix(style.transform);\n return {\n x: matrix.m41 || parseInt(style.left) || 0,\n y: matrix.m42 || parseInt(style.top) || 0\n };\n }\n\n function setElementPosition(el: HTMLElement, x: number, y: number) {\n // Use transform for better performance and smoother animation\n el.style.transform = `translate(${x}px, ${y}px)`;\n }\n\n function dragMouseDown(e: MouseEvent) {\n const target = e.target as HTMLElement;\n \n // Check if the click is on a resize handle\n if (isResizeHandle(target)) {\n return; // Don't start dragging\n }\n \n // Let resize handles take priority - if we reach this point and there's a resizable container,\n // we should check if there are actual resize handles present before preventing drag\n if (element.closest('[data-resizable]')) {\n const rect = element.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const handleSize = 8;\n \n // Only prevent drag if we're near an edge AND there are actual resize handles\n const nearTopEdge = y <= handleSize;\n const nearBottomEdge = y >= rect.height - handleSize;\n const nearLeftEdge = x <= handleSize;\n const nearRightEdge = x >= rect.width - handleSize;\n \n // Check if resize handles exist for the edges we're near\n const hasTopHandle = element.querySelector('.ds-resizable-resize-handle[data-placement*=\"top\"]');\n const hasBottomHandle = element.querySelector('.ds-resizable-resize-handle[data-placement*=\"bottom\"]');\n const hasLeftHandle = element.querySelector('.ds-resizable-resize-handle[data-placement*=\"left\"]');\n const hasRightHandle = element.querySelector('.ds-resizable-resize-handle[data-placement*=\"right\"]');\n \n if (\n (nearTopEdge && hasTopHandle) ||\n (nearBottomEdge && hasBottomHandle) ||\n (nearLeftEdge && hasLeftHandle) ||\n (nearRightEdge && hasRightHandle)\n ) {\n return; // Let resize handle it\n }\n }\n \n e.preventDefault();\n e.stopPropagation();\n \n isDragging = true;\n \n // Store initial mouse position\n startX = e.clientX;\n startY = e.clientY;\n \n // Get initial element position\n const pos = getElementPosition(element);\n initialLeft = pos.x;\n initialTop = pos.y;\n \n // Set initial cursor style and prevent text selection\n document.body.style.cursor = 'grabbing';\n document.body.style.userSelect = 'none';\n \n // Only disable pointer events on content areas, not buttons/interactive elements\n const interactiveElements = element.querySelectorAll('button, a, input, select, textarea, [role=\"button\"]');\n interactiveElements.forEach(el => {\n (el as HTMLElement).style.pointerEvents = 'auto';\n });\n \n // Add move and up listeners\n document.addEventListener(\"mousemove\", elementDrag, { passive: false });\n document.addEventListener(\"mouseup\", closeDragElement);\n \n // Add touch events for mobile support\n document.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n document.addEventListener(\"touchend\", closeDragElement);\n }\n\n function elementDrag(e: MouseEvent) {\n if (!isDragging || !element) return;\n \n e.preventDefault();\n \n // Cancel any previous animation frame\n if (rafId) {\n cancelAnimationFrame(rafId);\n }\n \n // Use requestAnimationFrame for smooth animation\n rafId = requestAnimationFrame(() => {\n const deltaX = e.clientX - startX;\n const deltaY = e.clientY - startY;\n \n const newX = initialLeft + deltaX;\n const newY = initialTop + deltaY;\n \n // Apply position directly without bounds checking\n setElementPosition(element, newX, newY);\n });\n }\n\n function handleTouchMove(e: TouchEvent) {\n if (!isDragging || !element) return;\n \n e.preventDefault();\n \n const touch = e.touches[0];\n if (!touch) return;\n \n // Convert touch event to mouse-like event\n const mouseEvent = new MouseEvent('mousemove', {\n clientX: touch.clientX,\n clientY: touch.clientY,\n bubbles: true\n });\n \n elementDrag(mouseEvent);\n }\n\n function closeDragElement() {\n if (!isDragging) return;\n \n isDragging = false;\n \n // Cancel any pending animation frame\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n \n // Restore styles\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n \n // Restore pointer events for interactive elements\n if (element) {\n const interactiveElements = element.querySelectorAll('button, a, input, select, textarea, [role=\"button\"]');\n interactiveElements.forEach(el => {\n (el as HTMLElement).style.pointerEvents = '';\n });\n }\n \n // Remove event listeners\n document.removeEventListener(\"mousemove\", elementDrag);\n document.removeEventListener(\"mouseup\", closeDragElement);\n document.removeEventListener(\"touchmove\", handleTouchMove);\n document.removeEventListener(\"touchend\", closeDragElement);\n }\n\n // Cleanup function\n return () => {\n element.removeEventListener(\"mousedown\", dragMouseDown);\n closeDragElement();\n };\n }, [enabled]);\n \n return { ref };\n}\n"],"names":["useDraggable","enabled","useCallback","element","isDragging","startX","startY","initialLeft","initialTop","rafId","dragMouseDown","isResizeHandle","target","current","getElementPosition","el","style","matrix","setElementPosition","x","y","e","rect","handleSize","nearTopEdge","nearBottomEdge","nearLeftEdge","nearRightEdge","hasTopHandle","hasBottomHandle","hasLeftHandle","hasRightHandle","pos","elementDrag","closeDragElement","handleTouchMove","deltaX","deltaY","newX","newY","touch","mouseEvent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDraggable.js","sources":["../../../src/components/hooks/useDraggable.ts"],"sourcesContent":["\"use client\";\nimport { useCallback } from \"react\";\n\nexport function useDraggable(enabled: boolean = true) {\n const ref = useCallback((element: HTMLElement | null) => {\n if (!element || !enabled) return;\n\n let isDragging = false;\n let startX = 0;\n let startY = 0;\n let initialLeft = 0;\n let initialTop = 0;\n let rafId: number | null = null;\n\n element.addEventListener(\"mousedown\", dragMouseDown);\n\n function setDraggingState(dragging: boolean) {\n if (dragging) {\n element.setAttribute(\"data-dragging\", \"true\");\n return;\n }\n\n element.removeAttribute(\"data-dragging\");\n }\n\n function isResizeHandle(target: HTMLElement): boolean {\n // Check if the element or any of its parents is a resize handle\n let current = target;\n while (current && current !== element) {\n // Check for various resize handle indicators\n if (\n current.classList.contains('resize-handle') ||\n current.classList.contains('ds-resizable-resize-handle') ||\n current.getAttribute('data-resize-handle') ||\n current.getAttribute('data-testid')?.includes('resize') ||\n current.getAttribute('data-placement') || // Resizable handles have data-placement\n current.style.cursor?.includes('resize') ||\n // Check for react-use-resizable specific classes/attributes\n current.classList.contains('resizable-handle') ||\n current.hasAttribute('data-resizable-handle') ||\n // Check for common resize cursor styles\n ['n-resize', 's-resize', 'e-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize'].includes(current.style.cursor)\n ) {\n return true;\n }\n current = current.parentElement as HTMLElement;\n }\n return false;\n }\n\n function getElementPosition(el: HTMLElement) {\n const style = window.getComputedStyle(el);\n const matrix = new DOMMatrix(style.transform);\n return {\n x: matrix.m41 || parseInt(style.left) || 0,\n y: matrix.m42 || parseInt(style.top) || 0\n };\n }\n\n function setElementPosition(el: HTMLElement, x: number, y: number) {\n // Use transform for better performance and smoother animation\n el.style.transform = `translate(${x}px, ${y}px)`;\n }\n\n function dragMouseDown(e: MouseEvent) {\n const target = e.target as HTMLElement;\n\n // Check if the click is on a resize handle\n if (isResizeHandle(target)) {\n return; // Don't start dragging\n }\n\n // Let resize handles take priority - if we reach this point and there's a resizable container,\n // we should check if there are actual resize handles present before preventing drag\n if (element.closest('[data-resizable]')) {\n const rect = element.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const handleSize = 8;\n\n // Only prevent drag if we're near an edge AND there are actual resize handles\n const nearTopEdge = y <= handleSize;\n const nearBottomEdge = y >= rect.height - handleSize;\n const nearLeftEdge = x <= handleSize;\n const nearRightEdge = x >= rect.width - handleSize;\n\n // Check if resize handles exist for the edges we're near\n const hasTopHandle = element.querySelector('.ds-resizable-resize-handle[data-placement*=\"top\"]');\n const hasBottomHandle = element.querySelector('.ds-resizable-resize-handle[data-placement*=\"bottom\"]');\n const hasLeftHandle = element.querySelector('.ds-resizable-resize-handle[data-placement*=\"left\"]');\n const hasRightHandle = element.querySelector('.ds-resizable-resize-handle[data-placement*=\"right\"]');\n\n if (\n (nearTopEdge && hasTopHandle) ||\n (nearBottomEdge && hasBottomHandle) ||\n (nearLeftEdge && hasLeftHandle) ||\n (nearRightEdge && hasRightHandle)\n ) {\n return; // Let resize handle it\n }\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n isDragging = true;\n setDraggingState(true);\n\n // Store initial mouse position\n startX = e.clientX;\n startY = e.clientY;\n\n // Get initial element position\n const pos = getElementPosition(element);\n initialLeft = pos.x;\n initialTop = pos.y;\n\n // Set initial cursor style and prevent text selection\n document.body.style.cursor = 'grabbing';\n document.body.style.userSelect = 'none';\n\n // Only disable pointer events on content areas, not buttons/interactive elements\n const interactiveElements = element.querySelectorAll('button, a, input, select, textarea, [role=\"button\"]');\n interactiveElements.forEach(el => {\n (el as HTMLElement).style.pointerEvents = 'auto';\n });\n\n // Add move and up listeners\n document.addEventListener(\"mousemove\", elementDrag, { passive: false });\n document.addEventListener(\"mouseup\", closeDragElement);\n\n // Add touch events for mobile support\n document.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n document.addEventListener(\"touchend\", closeDragElement);\n }\n\n function elementDrag(e: MouseEvent) {\n if (!isDragging || !element) return;\n\n e.preventDefault();\n\n // Cancel any previous animation frame\n if (rafId) {\n cancelAnimationFrame(rafId);\n }\n\n // Use requestAnimationFrame for smooth animation\n rafId = requestAnimationFrame(() => {\n const deltaX = e.clientX - startX;\n const deltaY = e.clientY - startY;\n\n const newX = initialLeft + deltaX;\n const newY = initialTop + deltaY;\n\n // Apply position directly without bounds checking\n setElementPosition(element, newX, newY);\n });\n }\n\n function handleTouchMove(e: TouchEvent) {\n if (!isDragging || !element) return;\n\n e.preventDefault();\n\n const touch = e.touches[0];\n if (!touch) return;\n\n // Convert touch event to mouse-like event\n const mouseEvent = new MouseEvent('mousemove', {\n clientX: touch.clientX,\n clientY: touch.clientY,\n bubbles: true\n });\n\n elementDrag(mouseEvent);\n }\n\n function closeDragElement() {\n if (!isDragging) return;\n\n isDragging = false;\n setDraggingState(false);\n\n // Cancel any pending animation frame\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n\n // Restore styles\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n\n // Restore pointer events for interactive elements\n if (element) {\n const interactiveElements = element.querySelectorAll('button, a, input, select, textarea, [role=\"button\"]');\n interactiveElements.forEach(el => {\n (el as HTMLElement).style.pointerEvents = '';\n });\n }\n \n // Remove event listeners\n document.removeEventListener(\"mousemove\", elementDrag);\n document.removeEventListener(\"mouseup\", closeDragElement);\n document.removeEventListener(\"touchmove\", handleTouchMove);\n document.removeEventListener(\"touchend\", closeDragElement);\n }\n\n // Cleanup function\n return () => {\n element.removeEventListener(\"mousedown\", dragMouseDown);\n setDraggingState(false);\n closeDragElement();\n };\n }, [enabled]);\n\n return { ref };\n}\n"],"names":["useDraggable","enabled","useCallback","element","isDragging","startX","startY","initialLeft","initialTop","rafId","dragMouseDown","setDraggingState","dragging","isResizeHandle","target","current","getElementPosition","el","style","matrix","setElementPosition","x","y","e","rect","handleSize","nearTopEdge","nearBottomEdge","nearLeftEdge","nearRightEdge","hasTopHandle","hasBottomHandle","hasLeftHandle","hasRightHandle","pos","elementDrag","closeDragElement","handleTouchMove","deltaX","deltaY","newX","newY","touch","mouseEvent"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { PopupPanelProps } from './types';
|
|
2
|
-
export declare const PopupPanel: ({ children, placement, openOnHover, open: outsideOpen, onOpenChange: outsideOnOpenChange, content, title, trigger, className, anchor, beforeCloseButton, afterCloseButton, afterTitle, size, footer, defaultOpen, resizable, draggable, maintainAspectRatio, classNames, modal, closeOnClickOutside, onPlacementChange, positionerProps, triggerProps, portalProps, offsetFrom, nativeButton, ...rest }: PopupPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare const PopupPanel: ({ children, placement, openOnHover, open: outsideOpen, onOpenChange: outsideOnOpenChange, content, title, trigger, className, anchor, beforeCloseButton, afterCloseButton, afterTitle, arrow, size, footer, defaultOpen, resizable, draggable, maintainAspectRatio, classNames, modal, closeOnClickOutside, onPlacementChange, positionerProps, triggerProps, portalProps, offsetFrom, nativeButton, zIndex, ...rest }: PopupPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/popup-panel/component.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/popup-panel/component.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,aAAa,CAAC;AAwDrB,eAAO,MAAM,UAAU,GAAI,wZAgCxB,eAAe,4CA2QjB,CAAC"}
|