asterui 0.10.2
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/LICENSE +15 -0
- package/README.md +214 -0
- package/dist/components/Affix.d.ts +14 -0
- package/dist/components/Alert.d.ts +10 -0
- package/dist/components/Autocomplete.d.ts +18 -0
- package/dist/components/Avatar.d.ts +28 -0
- package/dist/components/Badge.d.ts +20 -0
- package/dist/components/Breadcrumb.d.ts +15 -0
- package/dist/components/Browser.d.ts +7 -0
- package/dist/components/Button.d.ts +23 -0
- package/dist/components/Card.d.ts +26 -0
- package/dist/components/Carousel.d.ts +14 -0
- package/dist/components/Cascader.d.ts +19 -0
- package/dist/components/Chart.d.ts +19 -0
- package/dist/components/Chat.d.ts +11 -0
- package/dist/components/Checkbox.d.ts +27 -0
- package/dist/components/Code.d.ts +14 -0
- package/dist/components/Collapse.d.ts +25 -0
- package/dist/components/ColorPicker.d.ts +10 -0
- package/dist/components/Container.d.ts +6 -0
- package/dist/components/ContextMenu.d.ts +23 -0
- package/dist/components/Countdown.d.ts +27 -0
- package/dist/components/DatePicker.d.ts +11 -0
- package/dist/components/Descriptions.d.ts +34 -0
- package/dist/components/Divider.d.ts +8 -0
- package/dist/components/Drawer.d.ts +10 -0
- package/dist/components/Dropdown.d.ts +39 -0
- package/dist/components/Empty.d.ts +8 -0
- package/dist/components/Fieldset.d.ts +15 -0
- package/dist/components/FileInput.d.ts +9 -0
- package/dist/components/Flex.d.ts +14 -0
- package/dist/components/FloatButton.d.ts +34 -0
- package/dist/components/Footer.d.ts +16 -0
- package/dist/components/Form.d.ts +66 -0
- package/dist/components/Grid.d.ts +26 -0
- package/dist/components/Hero.d.ts +9 -0
- package/dist/components/Image.d.ts +14 -0
- package/dist/components/Indicator.d.ts +7 -0
- package/dist/components/Input.d.ts +14 -0
- package/dist/components/InputNumber.d.ts +19 -0
- package/dist/components/Join.d.ts +6 -0
- package/dist/components/Label.d.ts +15 -0
- package/dist/components/Layout.d.ts +59 -0
- package/dist/components/List.d.ts +13 -0
- package/dist/components/Loading.d.ts +9 -0
- package/dist/components/Masonry.d.ts +15 -0
- package/dist/components/Mention.d.ts +30 -0
- package/dist/components/Menu.d.ts +45 -0
- package/dist/components/Modal.d.ts +42 -0
- package/dist/components/Navbar.d.ts +8 -0
- package/dist/components/Notification.d.ts +43 -0
- package/dist/components/OTPInput.d.ts +32 -0
- package/dist/components/PageLayout.d.ts +9 -0
- package/dist/components/Pagination.d.ts +18 -0
- package/dist/components/Phone.d.ts +8 -0
- package/dist/components/Popconfirm.d.ts +17 -0
- package/dist/components/Popover.d.ts +15 -0
- package/dist/components/Progress.d.ts +5 -0
- package/dist/components/QRCode.d.ts +19 -0
- package/dist/components/RadialProgress.d.ts +10 -0
- package/dist/components/Radio.d.ts +20 -0
- package/dist/components/Range.d.ts +16 -0
- package/dist/components/Rating.d.ts +22 -0
- package/dist/components/Responsive.d.ts +18 -0
- package/dist/components/Result.d.ts +12 -0
- package/dist/components/Select.d.ts +10 -0
- package/dist/components/Skeleton.d.ts +9 -0
- package/dist/components/Space.d.ts +10 -0
- package/dist/components/Splitter.d.ts +27 -0
- package/dist/components/Stack.d.ts +10 -0
- package/dist/components/Stat.d.ts +18 -0
- package/dist/components/Steps.d.ts +16 -0
- package/dist/components/Table.d.ts +51 -0
- package/dist/components/Tabs.d.ts +21 -0
- package/dist/components/Tag.d.ts +18 -0
- package/dist/components/Textarea.d.ts +9 -0
- package/dist/components/ThemeController.d.ts +20 -0
- package/dist/components/TimePicker.d.ts +12 -0
- package/dist/components/Timeline.d.ts +24 -0
- package/dist/components/Toggle.d.ts +7 -0
- package/dist/components/Tooltip.d.ts +9 -0
- package/dist/components/Transfer.d.ts +22 -0
- package/dist/components/Tree.d.ts +40 -0
- package/dist/components/TreeSelect.d.ts +20 -0
- package/dist/components/Typography.d.ts +53 -0
- package/dist/components/Upload.d.ts +38 -0
- package/dist/components/Window.d.ts +7 -0
- package/dist/hooks/useBreakpoint.d.ts +10 -0
- package/dist/index.d.ts +172 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/index10.js +33 -0
- package/dist/index10.js.map +1 -0
- package/dist/index100.js +24 -0
- package/dist/index100.js.map +1 -0
- package/dist/index101.js +27 -0
- package/dist/index101.js.map +1 -0
- package/dist/index102.js +23 -0
- package/dist/index102.js.map +1 -0
- package/dist/index103.js +103 -0
- package/dist/index103.js.map +1 -0
- package/dist/index104.js +363 -0
- package/dist/index104.js.map +1 -0
- package/dist/index105.js +28 -0
- package/dist/index105.js.map +1 -0
- package/dist/index106.js +76 -0
- package/dist/index106.js.map +1 -0
- package/dist/index107.js +19 -0
- package/dist/index107.js.map +1 -0
- package/dist/index108.js +69 -0
- package/dist/index108.js.map +1 -0
- package/dist/index109.js +147 -0
- package/dist/index109.js.map +1 -0
- package/dist/index11.js +268 -0
- package/dist/index11.js.map +1 -0
- package/dist/index110.js +5 -0
- package/dist/index110.js.map +1 -0
- package/dist/index111.js +59 -0
- package/dist/index111.js.map +1 -0
- package/dist/index112.js +5 -0
- package/dist/index112.js.map +1 -0
- package/dist/index113.js +5 -0
- package/dist/index113.js.map +1 -0
- package/dist/index114.js +5 -0
- package/dist/index114.js.map +1 -0
- package/dist/index115.js +5 -0
- package/dist/index115.js.map +1 -0
- package/dist/index116.js +5 -0
- package/dist/index116.js.map +1 -0
- package/dist/index117.js +5 -0
- package/dist/index117.js.map +1 -0
- package/dist/index118.js +5 -0
- package/dist/index118.js.map +1 -0
- package/dist/index119.js +5 -0
- package/dist/index119.js.map +1 -0
- package/dist/index12.js +98 -0
- package/dist/index12.js.map +1 -0
- package/dist/index120.js +35 -0
- package/dist/index120.js.map +1 -0
- package/dist/index121.js +5 -0
- package/dist/index121.js.map +1 -0
- package/dist/index122.js +11 -0
- package/dist/index122.js.map +1 -0
- package/dist/index123.js +5 -0
- package/dist/index123.js.map +1 -0
- package/dist/index124.js +5 -0
- package/dist/index124.js.map +1 -0
- package/dist/index125.js +24 -0
- package/dist/index125.js.map +1 -0
- package/dist/index126.js +5 -0
- package/dist/index126.js.map +1 -0
- package/dist/index127.js +27 -0
- package/dist/index127.js.map +1 -0
- package/dist/index128.js +74 -0
- package/dist/index128.js.map +1 -0
- package/dist/index129.js +24 -0
- package/dist/index129.js.map +1 -0
- package/dist/index13.js +161 -0
- package/dist/index13.js.map +1 -0
- package/dist/index130.js +37 -0
- package/dist/index130.js.map +1 -0
- package/dist/index131.js +73 -0
- package/dist/index131.js.map +1 -0
- package/dist/index132.js +5 -0
- package/dist/index132.js.map +1 -0
- package/dist/index133.js +25 -0
- package/dist/index133.js.map +1 -0
- package/dist/index134.js +5 -0
- package/dist/index134.js.map +1 -0
- package/dist/index135.js +5 -0
- package/dist/index135.js.map +1 -0
- package/dist/index136.js +5 -0
- package/dist/index136.js.map +1 -0
- package/dist/index137.js +5 -0
- package/dist/index137.js.map +1 -0
- package/dist/index138.js +7 -0
- package/dist/index138.js.map +1 -0
- package/dist/index14.js +153 -0
- package/dist/index14.js.map +1 -0
- package/dist/index15.js +8 -0
- package/dist/index15.js.map +1 -0
- package/dist/index16.js +74 -0
- package/dist/index16.js.map +1 -0
- package/dist/index17.js +20 -0
- package/dist/index17.js.map +1 -0
- package/dist/index18.js +101 -0
- package/dist/index18.js.map +1 -0
- package/dist/index19.js +117 -0
- package/dist/index19.js.map +1 -0
- package/dist/index2.js +50 -0
- package/dist/index2.js.map +1 -0
- package/dist/index20.js +187 -0
- package/dist/index20.js.map +1 -0
- package/dist/index21.js +113 -0
- package/dist/index21.js.map +1 -0
- package/dist/index22.js +35 -0
- package/dist/index22.js.map +1 -0
- package/dist/index23.js +44 -0
- package/dist/index23.js.map +1 -0
- package/dist/index24.js +15 -0
- package/dist/index24.js.map +1 -0
- package/dist/index25.js +36 -0
- package/dist/index25.js.map +1 -0
- package/dist/index26.js +66 -0
- package/dist/index26.js.map +1 -0
- package/dist/index27.js +83 -0
- package/dist/index27.js.map +1 -0
- package/dist/index28.js +21 -0
- package/dist/index28.js.map +1 -0
- package/dist/index29.js +164 -0
- package/dist/index29.js.map +1 -0
- package/dist/index3.js +31 -0
- package/dist/index3.js.map +1 -0
- package/dist/index30.js +1085 -0
- package/dist/index30.js.map +1 -0
- package/dist/index31.js +21 -0
- package/dist/index31.js.map +1 -0
- package/dist/index32.js +125 -0
- package/dist/index32.js.map +1 -0
- package/dist/index33.js +43 -0
- package/dist/index33.js.map +1 -0
- package/dist/index34.js +194 -0
- package/dist/index34.js.map +1 -0
- package/dist/index35.js +100 -0
- package/dist/index35.js.map +1 -0
- package/dist/index36.js +165 -0
- package/dist/index36.js.map +1 -0
- package/dist/index37.js +149 -0
- package/dist/index37.js.map +1 -0
- package/dist/index38.js +18 -0
- package/dist/index38.js.map +1 -0
- package/dist/index39.js +24 -0
- package/dist/index39.js.map +1 -0
- package/dist/index4.js +104 -0
- package/dist/index4.js.map +1 -0
- package/dist/index40.js +122 -0
- package/dist/index40.js.map +1 -0
- package/dist/index41.js +16 -0
- package/dist/index41.js.map +1 -0
- package/dist/index42.js +38 -0
- package/dist/index42.js.map +1 -0
- package/dist/index43.js +119 -0
- package/dist/index43.js.map +1 -0
- package/dist/index44.js +179 -0
- package/dist/index44.js.map +1 -0
- package/dist/index45.js +150 -0
- package/dist/index45.js.map +1 -0
- package/dist/index46.js +15 -0
- package/dist/index46.js.map +1 -0
- package/dist/index47.js +25 -0
- package/dist/index47.js.map +1 -0
- package/dist/index48.js +17 -0
- package/dist/index48.js.map +1 -0
- package/dist/index49.js +10 -0
- package/dist/index49.js.map +1 -0
- package/dist/index5.js +64 -0
- package/dist/index5.js.map +1 -0
- package/dist/index50.js +269 -0
- package/dist/index50.js.map +1 -0
- package/dist/index51.js +20 -0
- package/dist/index51.js.map +1 -0
- package/dist/index52.js +125 -0
- package/dist/index52.js.map +1 -0
- package/dist/index53.js +113 -0
- package/dist/index53.js.map +1 -0
- package/dist/index54.js +173 -0
- package/dist/index54.js.map +1 -0
- package/dist/index55.js +35 -0
- package/dist/index55.js.map +1 -0
- package/dist/index56.js +125 -0
- package/dist/index56.js.map +1 -0
- package/dist/index57.js +89 -0
- package/dist/index57.js.map +1 -0
- package/dist/index58.js +23 -0
- package/dist/index58.js.map +1 -0
- package/dist/index59.js +77 -0
- package/dist/index59.js.map +1 -0
- package/dist/index6.js +133 -0
- package/dist/index6.js.map +1 -0
- package/dist/index60.js +60 -0
- package/dist/index60.js.map +1 -0
- package/dist/index61.js +48 -0
- package/dist/index61.js.map +1 -0
- package/dist/index62.js +55 -0
- package/dist/index62.js.map +1 -0
- package/dist/index63.js +65 -0
- package/dist/index63.js.map +1 -0
- package/dist/index64.js +110 -0
- package/dist/index64.js.map +1 -0
- package/dist/index65.js +44 -0
- package/dist/index65.js.map +1 -0
- package/dist/index66.js +24 -0
- package/dist/index66.js.map +1 -0
- package/dist/index67.js +49 -0
- package/dist/index67.js.map +1 -0
- package/dist/index68.js +137 -0
- package/dist/index68.js.map +1 -0
- package/dist/index69.js +55 -0
- package/dist/index69.js.map +1 -0
- package/dist/index7.js +14 -0
- package/dist/index7.js.map +1 -0
- package/dist/index70.js +25 -0
- package/dist/index70.js.map +1 -0
- package/dist/index71.js +25 -0
- package/dist/index71.js.map +1 -0
- package/dist/index72.js +332 -0
- package/dist/index72.js.map +1 -0
- package/dist/index73.js +59 -0
- package/dist/index73.js.map +1 -0
- package/dist/index74.js +43 -0
- package/dist/index74.js.map +1 -0
- package/dist/index75.js +98 -0
- package/dist/index75.js.map +1 -0
- package/dist/index76.js +133 -0
- package/dist/index76.js.map +1 -0
- package/dist/index77.js +164 -0
- package/dist/index77.js.map +1 -0
- package/dist/index78.js +68 -0
- package/dist/index78.js.map +1 -0
- package/dist/index79.js +38 -0
- package/dist/index79.js.map +1 -0
- package/dist/index8.js +73 -0
- package/dist/index8.js.map +1 -0
- package/dist/index80.js +37 -0
- package/dist/index80.js.map +1 -0
- package/dist/index81.js +213 -0
- package/dist/index81.js.map +1 -0
- package/dist/index82.js +216 -0
- package/dist/index82.js.map +1 -0
- package/dist/index83.js +298 -0
- package/dist/index83.js.map +1 -0
- package/dist/index84.js +181 -0
- package/dist/index84.js.map +1 -0
- package/dist/index85.js +261 -0
- package/dist/index85.js.map +1 -0
- package/dist/index86.js +17 -0
- package/dist/index86.js.map +1 -0
- package/dist/index87.js +36 -0
- package/dist/index87.js.map +1 -0
- package/dist/index88.js +10796 -0
- package/dist/index88.js.map +1 -0
- package/dist/index89.js +8 -0
- package/dist/index89.js.map +1 -0
- package/dist/index9.js +95 -0
- package/dist/index9.js.map +1 -0
- package/dist/index90.js +45 -0
- package/dist/index90.js.map +1 -0
- package/dist/index91.js +5 -0
- package/dist/index91.js.map +1 -0
- package/dist/index92.js +10 -0
- package/dist/index92.js.map +1 -0
- package/dist/index93.js +155 -0
- package/dist/index93.js.map +1 -0
- package/dist/index94.js +33 -0
- package/dist/index94.js.map +1 -0
- package/dist/index95.js +33 -0
- package/dist/index95.js.map +1 -0
- package/dist/index96.js +5 -0
- package/dist/index96.js.map +1 -0
- package/dist/index97.js +75 -0
- package/dist/index97.js.map +1 -0
- package/dist/index98.js +42 -0
- package/dist/index98.js.map +1 -0
- package/dist/index99.js +29 -0
- package/dist/index99.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index4.js","sources":["../src/components/Autocomplete.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\n\nexport interface AutocompleteOption {\n value: string\n label: string\n}\n\nexport interface AutocompleteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n options: AutocompleteOption[] | string[]\n placeholder?: string\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg'\n allowCustomValue?: boolean\n filterOption?: (option: AutocompleteOption, inputValue: string) => boolean\n notFoundContent?: React.ReactNode\n}\n\nexport const Autocomplete: React.FC<AutocompleteProps> = ({\n value,\n defaultValue = '',\n onChange,\n options: rawOptions,\n placeholder = 'Type to search...',\n disabled = false,\n size = 'md',\n className = '',\n allowCustomValue = true,\n filterOption,\n notFoundContent = 'No results found',\n ...rest\n}) => {\n // Normalize options to AutocompleteOption[]\n const options: AutocompleteOption[] = rawOptions.map((opt) =>\n typeof opt === 'string' ? { value: opt, label: opt } : opt\n )\n\n const [inputValue, setInputValue] = useState(defaultValue)\n const [isOpen, setIsOpen] = useState(false)\n const [highlightedIndex, setHighlightedIndex] = useState(-1)\n const inputRef = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n // Update input value when controlled value changes\n useEffect(() => {\n if (value !== undefined) {\n const selectedOption = options.find((opt) => opt.value === value)\n setInputValue(selectedOption?.label || value)\n }\n }, [value, options])\n\n // Filter options based on input\n const defaultFilter = (option: AutocompleteOption, input: string) =>\n option.label.toLowerCase().includes(input.toLowerCase())\n\n const filteredOptions = options.filter((option) =>\n filterOption ? filterOption(option, inputValue) : defaultFilter(option, inputValue)\n )\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newInputValue = e.target.value\n setInputValue(newInputValue)\n setIsOpen(true)\n setHighlightedIndex(0)\n\n if (allowCustomValue) {\n onChange?.(newInputValue)\n }\n }\n\n const handleOptionClick = (option: AutocompleteOption) => {\n setInputValue(option.label)\n setIsOpen(false)\n setHighlightedIndex(-1)\n\n onChange?.(option.value)\n inputRef.current?.focus()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n setIsOpen(true)\n setHighlightedIndex(0)\n return\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev < filteredOptions.length - 1 ? prev + 1 : prev))\n break\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : 0))\n break\n case 'Enter':\n e.preventDefault()\n if (highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n handleOptionClick(filteredOptions[highlightedIndex])\n } else if (!allowCustomValue && filteredOptions.length > 0) {\n handleOptionClick(filteredOptions[0])\n }\n break\n case 'Escape':\n setIsOpen(false)\n setHighlightedIndex(-1)\n inputRef.current?.blur()\n break\n }\n }\n\n const handleFocus = () => {\n setIsOpen(true)\n if (filteredOptions.length > 0) {\n setHighlightedIndex(0)\n }\n }\n\n const handleBlur = (e: React.FocusEvent) => {\n // Don't close if clicking inside dropdown\n if (dropdownRef.current && dropdownRef.current.contains(e.relatedTarget as Node)) {\n return\n }\n setTimeout(() => setIsOpen(false), 200)\n }\n\n const sizeClass = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n }[size]\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (highlightedIndex >= 0 && dropdownRef.current) {\n const highlightedElement = dropdownRef.current.children[highlightedIndex] as HTMLElement\n highlightedElement?.scrollIntoView({ block: 'nearest' })\n }\n }, [highlightedIndex])\n\n return (\n <div className={`relative ${className}`} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n className={`input input-bordered w-full ${sizeClass}`}\n />\n\n {isOpen && !disabled && (\n <div\n ref={dropdownRef}\n className=\"absolute z-50 w-full mt-1 bg-base-100 border border-base-300 rounded-lg shadow-lg max-h-60 overflow-auto\"\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => (\n <div\n key={option.value}\n onMouseDown={(e) => {\n e.preventDefault()\n handleOptionClick(option)\n }}\n onMouseEnter={() => setHighlightedIndex(index)}\n className={`px-4 py-2 cursor-pointer transition-colors ${\n index === highlightedIndex\n ? 'bg-primary text-primary-content'\n : 'hover:bg-base-200'\n }`}\n >\n {option.label}\n </div>\n ))\n ) : (\n <div className=\"px-4 py-2 text-base-content/60 text-center\">{notFoundContent}</div>\n )}\n </div>\n )}\n </div>\n )\n}\n"],"names":["Autocomplete","value","defaultValue","onChange","rawOptions","placeholder","disabled","size","className","allowCustomValue","filterOption","notFoundContent","rest","options","opt","inputValue","setInputValue","useState","isOpen","setIsOpen","highlightedIndex","setHighlightedIndex","inputRef","useRef","dropdownRef","useEffect","selectedOption","defaultFilter","option","input","filteredOptions","handleInputChange","newInputValue","handleOptionClick","handleKeyDown","prev","handleFocus","handleBlur","sizeClass","jsxs","jsx","index","e"],"mappings":"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"}
|
package/dist/index40.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { jsx as a, jsxs as v } from "react/jsx-runtime";
|
|
2
|
+
import u, { useContext as k, createContext as S, useState as w, useCallback as g } from "react";
|
|
3
|
+
const p = S(null);
|
|
4
|
+
function F() {
|
|
5
|
+
return k(p);
|
|
6
|
+
}
|
|
7
|
+
function m({ children: o, className: n = "", style: s }) {
|
|
8
|
+
const t = u.Children.toArray(o), l = t.some(
|
|
9
|
+
(e) => u.isValidElement(e) && e.type.displayName === "LayoutSider"
|
|
10
|
+
), f = [
|
|
11
|
+
"flex",
|
|
12
|
+
"min-h-0",
|
|
13
|
+
l ? "flex-row" : "flex-col",
|
|
14
|
+
n
|
|
15
|
+
].filter(Boolean).join(" "), i = l ? t.map((e) => {
|
|
16
|
+
if (u.isValidElement(e) && (e.type === m || e.type.displayName === "LayoutRoot") && e.type.displayName !== "LayoutSider") {
|
|
17
|
+
const c = e.props.className || "";
|
|
18
|
+
if (!c.includes("flex-1"))
|
|
19
|
+
return u.cloneElement(e, {
|
|
20
|
+
className: `flex-1 ${c}`.trim()
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return e;
|
|
24
|
+
}) : o;
|
|
25
|
+
return /* @__PURE__ */ a("div", { className: f, style: s, children: i });
|
|
26
|
+
}
|
|
27
|
+
m.displayName = "LayoutRoot";
|
|
28
|
+
function B({ children: o, className: n = "", style: s }) {
|
|
29
|
+
const t = [
|
|
30
|
+
"flex",
|
|
31
|
+
"items-center",
|
|
32
|
+
"px-6",
|
|
33
|
+
"h-16",
|
|
34
|
+
"bg-base-300",
|
|
35
|
+
"flex-shrink-0",
|
|
36
|
+
n
|
|
37
|
+
].filter(Boolean).join(" ");
|
|
38
|
+
return /* @__PURE__ */ a("header", { className: t, style: s, children: o });
|
|
39
|
+
}
|
|
40
|
+
function E({ children: o, className: n = "", style: s }) {
|
|
41
|
+
const t = [
|
|
42
|
+
"px-6",
|
|
43
|
+
"py-4",
|
|
44
|
+
"text-center",
|
|
45
|
+
"bg-base-300",
|
|
46
|
+
"flex-shrink-0",
|
|
47
|
+
n
|
|
48
|
+
].filter(Boolean).join(" ");
|
|
49
|
+
return /* @__PURE__ */ a("footer", { className: t, style: s, children: o });
|
|
50
|
+
}
|
|
51
|
+
function R({ children: o, className: n = "", style: s }) {
|
|
52
|
+
const t = ["flex-1", "min-h-0", "overflow-auto", n].filter(Boolean).join(" ");
|
|
53
|
+
return /* @__PURE__ */ a("main", { className: t, style: s, children: o });
|
|
54
|
+
}
|
|
55
|
+
function y({
|
|
56
|
+
children: o,
|
|
57
|
+
width: n = 200,
|
|
58
|
+
collapsedWidth: s = 80,
|
|
59
|
+
collapsed: t,
|
|
60
|
+
defaultCollapsed: l = !1,
|
|
61
|
+
collapsible: f = !1,
|
|
62
|
+
onCollapse: i,
|
|
63
|
+
trigger: e,
|
|
64
|
+
className: c = "",
|
|
65
|
+
style: C
|
|
66
|
+
}) {
|
|
67
|
+
const [b, N] = w(l), r = t ?? b, h = g(() => {
|
|
68
|
+
const x = !r;
|
|
69
|
+
t === void 0 && N(x), i?.(x);
|
|
70
|
+
}, [r, t, i]), d = r ? s : n, L = [
|
|
71
|
+
"flex",
|
|
72
|
+
"flex-col",
|
|
73
|
+
"bg-base-200",
|
|
74
|
+
"flex-shrink-0",
|
|
75
|
+
"transition-all",
|
|
76
|
+
"duration-200",
|
|
77
|
+
c
|
|
78
|
+
].filter(Boolean).join(" "), j = f && e !== null && /* @__PURE__ */ a(
|
|
79
|
+
"button",
|
|
80
|
+
{
|
|
81
|
+
onClick: h,
|
|
82
|
+
className: "flex items-center justify-center h-10 w-full bg-base-300 hover:bg-base-content/10 transition-colors",
|
|
83
|
+
"aria-label": r ? "Expand sidebar" : "Collapse sidebar",
|
|
84
|
+
children: /* @__PURE__ */ a(
|
|
85
|
+
"svg",
|
|
86
|
+
{
|
|
87
|
+
className: `w-4 h-4 transition-transform ${r ? "rotate-180" : ""}`,
|
|
88
|
+
fill: "none",
|
|
89
|
+
viewBox: "0 0 24 24",
|
|
90
|
+
stroke: "currentColor",
|
|
91
|
+
children: /* @__PURE__ */ a("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" })
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
return /* @__PURE__ */ a(p.Provider, { value: { collapsed: r, collapsedWidth: s, width: n }, children: /* @__PURE__ */ v(
|
|
97
|
+
"aside",
|
|
98
|
+
{
|
|
99
|
+
className: L,
|
|
100
|
+
style: {
|
|
101
|
+
width: typeof d == "number" ? `${d}px` : d,
|
|
102
|
+
...C
|
|
103
|
+
},
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ a("div", { className: "flex-1 overflow-auto", children: o }),
|
|
106
|
+
e !== null && (e ?? j)
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
) });
|
|
110
|
+
}
|
|
111
|
+
y.displayName = "LayoutSider";
|
|
112
|
+
const H = Object.assign(m, {
|
|
113
|
+
Header: B,
|
|
114
|
+
Footer: E,
|
|
115
|
+
Content: R,
|
|
116
|
+
Sider: y
|
|
117
|
+
});
|
|
118
|
+
export {
|
|
119
|
+
H as Layout,
|
|
120
|
+
F as useSiderContext
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=index40.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index40.js","sources":["../src/components/Layout.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback } from 'react'\n\nexport interface LayoutProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport interface LayoutHeaderProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport interface LayoutFooterProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport interface LayoutContentProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport interface LayoutSiderProps {\n children: React.ReactNode\n width?: number | string\n collapsedWidth?: number | string\n collapsed?: boolean\n defaultCollapsed?: boolean\n collapsible?: boolean\n onCollapse?: (collapsed: boolean) => void\n trigger?: React.ReactNode | null\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n onBreakpoint?: (broken: boolean) => void\n className?: string\n style?: React.CSSProperties\n}\n\ninterface SiderContextValue {\n collapsed: boolean\n collapsedWidth: number | string\n width: number | string\n}\n\nconst SiderContext = createContext<SiderContextValue | null>(null)\n\nexport function useSiderContext() {\n return useContext(SiderContext)\n}\n\nfunction LayoutRoot({ children, className = '', style }: LayoutProps) {\n // Check if any child is a Sider to determine flex direction\n const childArray = React.Children.toArray(children)\n const hasSider = childArray.some(\n (child) => React.isValidElement(child) && (child.type as any).displayName === 'LayoutSider'\n )\n\n const layoutClasses = [\n 'flex',\n 'min-h-0',\n hasSider ? 'flex-row' : 'flex-col',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // If we have a Sider, auto-add flex-1 to non-Sider Layout children\n const processedChildren = hasSider\n ? childArray.map((child) => {\n if (\n React.isValidElement(child) &&\n (child.type === LayoutRoot || (child.type as any).displayName === 'LayoutRoot') &&\n (child.type as any).displayName !== 'LayoutSider'\n ) {\n // Clone the Layout child and add flex-1 if not already present\n const existingClassName = (child.props as any).className || ''\n if (!existingClassName.includes('flex-1')) {\n return React.cloneElement(child as React.ReactElement<any>, {\n className: `flex-1 ${existingClassName}`.trim(),\n })\n }\n }\n return child\n })\n : children\n\n return (\n <div className={layoutClasses} style={style}>\n {processedChildren}\n </div>\n )\n}\n\nLayoutRoot.displayName = 'LayoutRoot'\n\nfunction LayoutHeader({ children, className = '', style }: LayoutHeaderProps) {\n const headerClasses = [\n 'flex',\n 'items-center',\n 'px-6',\n 'h-16',\n 'bg-base-300',\n 'flex-shrink-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <header className={headerClasses} style={style}>\n {children}\n </header>\n )\n}\n\nfunction LayoutFooter({ children, className = '', style }: LayoutFooterProps) {\n const footerClasses = [\n 'px-6',\n 'py-4',\n 'text-center',\n 'bg-base-300',\n 'flex-shrink-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <footer className={footerClasses} style={style}>\n {children}\n </footer>\n )\n}\n\nfunction LayoutContent({ children, className = '', style }: LayoutContentProps) {\n // flex-1 by default so Content fills available space\n const contentClasses = ['flex-1', 'min-h-0', 'overflow-auto', className].filter(Boolean).join(' ')\n\n return (\n <main className={contentClasses} style={style}>\n {children}\n </main>\n )\n}\n\nfunction LayoutSider({\n children,\n width = 200,\n collapsedWidth = 80,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n collapsible = false,\n onCollapse,\n trigger,\n className = '',\n style,\n}: LayoutSiderProps) {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed)\n\n const collapsed = controlledCollapsed ?? internalCollapsed\n\n const handleCollapse = useCallback(() => {\n const newCollapsed = !collapsed\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(newCollapsed)\n }\n onCollapse?.(newCollapsed)\n }, [collapsed, controlledCollapsed, onCollapse])\n\n const currentWidth = collapsed ? collapsedWidth : width\n\n const siderClasses = [\n 'flex',\n 'flex-col',\n 'bg-base-200',\n 'flex-shrink-0',\n 'transition-all',\n 'duration-200',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const defaultTrigger = collapsible && trigger !== null && (\n <button\n onClick={handleCollapse}\n className=\"flex items-center justify-center h-10 w-full bg-base-300 hover:bg-base-content/10 transition-colors\"\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n <svg\n className={`w-4 h-4 transition-transform ${collapsed ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )\n\n return (\n <SiderContext.Provider value={{ collapsed, collapsedWidth, width }}>\n <aside\n className={siderClasses}\n style={{\n width: typeof currentWidth === 'number' ? `${currentWidth}px` : currentWidth,\n ...style,\n }}\n >\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {trigger !== null && (trigger ?? defaultTrigger)}\n </aside>\n </SiderContext.Provider>\n )\n}\n\nLayoutSider.displayName = 'LayoutSider'\n\nexport const Layout = Object.assign(LayoutRoot, {\n Header: LayoutHeader,\n Footer: LayoutFooter,\n Content: LayoutContent,\n Sider: LayoutSider,\n})\n"],"names":["SiderContext","createContext","useSiderContext","useContext","LayoutRoot","children","className","style","childArray","React","hasSider","child","layoutClasses","processedChildren","existingClassName","jsx","LayoutHeader","headerClasses","LayoutFooter","footerClasses","LayoutContent","contentClasses","LayoutSider","width","collapsedWidth","controlledCollapsed","defaultCollapsed","collapsible","onCollapse","trigger","internalCollapsed","setInternalCollapsed","useState","collapsed","handleCollapse","useCallback","newCollapsed","currentWidth","siderClasses","defaultTrigger","jsxs","Layout"],"mappings":"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"}
|
package/dist/index41.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
+
function e({ children: s, className: o = "", ...t }) {
|
|
3
|
+
const i = ["list", o].filter(Boolean).join(" ");
|
|
4
|
+
return /* @__PURE__ */ n("ul", { className: i, ...t, children: s });
|
|
5
|
+
}
|
|
6
|
+
function l({ children: s, className: o = "", ...t }) {
|
|
7
|
+
const i = ["list-row", o].filter(Boolean).join(" ");
|
|
8
|
+
return /* @__PURE__ */ n("li", { className: i, ...t, children: s });
|
|
9
|
+
}
|
|
10
|
+
const r = Object.assign(e, {
|
|
11
|
+
Row: l
|
|
12
|
+
});
|
|
13
|
+
export {
|
|
14
|
+
r as List
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=index41.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index41.js","sources":["../src/components/List.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface ListProps extends React.HTMLAttributes<HTMLUListElement> {\n children: React.ReactNode\n}\n\nexport interface ListRowProps extends React.LiHTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nfunction ListRoot({ children, className = '', ...rest }: ListProps) {\n const classes = ['list', className].filter(Boolean).join(' ')\n return <ul className={classes} {...rest}>{children}</ul>\n}\n\nfunction ListRow({ children, className = '', ...rest }: ListRowProps) {\n const classes = ['list-row', className].filter(Boolean).join(' ')\n return <li className={classes} {...rest}>{children}</li>\n}\n\nexport const List = Object.assign(ListRoot, {\n Row: ListRow,\n})\n"],"names":["ListRoot","children","className","rest","classes","ListRow","List"],"mappings":";AAUA,SAASA,EAAS,EAAE,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,KAAmB;AAClE,QAAMC,IAAU,CAAC,QAAQF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC5D,2BAAQ,MAAA,EAAG,WAAWE,GAAU,GAAGD,GAAO,UAAAF,GAAS;AACrD;AAEA,SAASI,EAAQ,EAAE,UAAAJ,GAAU,WAAAC,IAAY,IAAI,GAAGC,KAAsB;AACpE,QAAMC,IAAU,CAAC,YAAYF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAChE,2BAAQ,MAAA,EAAG,WAAWE,GAAU,GAAGD,GAAO,UAAAF,GAAS;AACrD;AAEO,MAAMK,IAAO,OAAO,OAAON,GAAU;AAAA,EAC1C,KAAKK;AACP,CAAC;"}
|
package/dist/index42.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsxs as a, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
const f = ({
|
|
3
|
+
size: r = "md",
|
|
4
|
+
type: t = "spinner",
|
|
5
|
+
className: d = "",
|
|
6
|
+
spinning: l = !0,
|
|
7
|
+
children: n,
|
|
8
|
+
tip: e,
|
|
9
|
+
...i
|
|
10
|
+
}) => {
|
|
11
|
+
const c = {
|
|
12
|
+
xs: "loading-xs",
|
|
13
|
+
sm: "loading-sm",
|
|
14
|
+
md: "loading-md",
|
|
15
|
+
lg: "loading-lg"
|
|
16
|
+
}, o = ["loading", {
|
|
17
|
+
spinner: "loading-spinner",
|
|
18
|
+
dots: "loading-dots",
|
|
19
|
+
ring: "loading-ring",
|
|
20
|
+
ball: "loading-ball",
|
|
21
|
+
bars: "loading-bars",
|
|
22
|
+
infinity: "loading-infinity"
|
|
23
|
+
}[t], c[r], d].filter(Boolean).join(" ");
|
|
24
|
+
return n ? /* @__PURE__ */ a("div", { className: "relative", ...i, children: [
|
|
25
|
+
l && /* @__PURE__ */ a("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10", children: [
|
|
26
|
+
/* @__PURE__ */ s("span", { className: o }),
|
|
27
|
+
e && /* @__PURE__ */ s("p", { className: "mt-2 text-sm", children: e })
|
|
28
|
+
] }),
|
|
29
|
+
/* @__PURE__ */ s("div", { className: l ? "pointer-events-none" : "", children: n })
|
|
30
|
+
] }) : l ? /* @__PURE__ */ a("div", { className: "flex flex-col items-center gap-2", ...i, children: [
|
|
31
|
+
/* @__PURE__ */ s("span", { className: o }),
|
|
32
|
+
e && /* @__PURE__ */ s("p", { className: "text-sm", children: e })
|
|
33
|
+
] }) : null;
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
f as Loading
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=index42.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index42.js","sources":["../src/components/Loading.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'xs' | 'sm' | 'md' | 'lg'\n type?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity'\n spinning?: boolean\n children?: React.ReactNode\n tip?: string\n}\n\nexport const Loading: React.FC<LoadingProps> = ({\n size = 'md',\n type = 'spinner',\n className = '',\n spinning = true,\n children,\n tip,\n ...rest\n}) => {\n const sizeClasses = {\n xs: 'loading-xs',\n sm: 'loading-sm',\n md: 'loading-md',\n lg: 'loading-lg',\n }\n\n const typeClasses = {\n spinner: 'loading-spinner',\n dots: 'loading-dots',\n ring: 'loading-ring',\n ball: 'loading-ball',\n bars: 'loading-bars',\n infinity: 'loading-infinity',\n }\n\n const spinnerClasses = ['loading', typeClasses[type], sizeClasses[size], className]\n .filter(Boolean)\n .join(' ')\n\n if (children) {\n return (\n <div className=\"relative\" {...rest}>\n {spinning && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10\">\n <span className={spinnerClasses}></span>\n {tip && <p className=\"mt-2 text-sm\">{tip}</p>}\n </div>\n )}\n <div className={spinning ? 'pointer-events-none' : ''}>{children}</div>\n </div>\n )\n }\n\n if (!spinning) {\n return null\n }\n\n return (\n <div className=\"flex flex-col items-center gap-2\" {...rest}>\n <span className={spinnerClasses}></span>\n {tip && <p className=\"text-sm\">{tip}</p>}\n </div>\n )\n}\n"],"names":["Loading","size","type","className","spinning","children","tip","rest","sizeClasses","spinnerClasses","jsxs","jsx"],"mappings":";AAUO,MAAMA,IAAkC,CAAC;AAAA,EAC9C,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAYAC,IAAiB,CAAC,WATJ;AAAA,IAClB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,EAAA,EAGmCP,CAAI,GAAGM,EAAYP,CAAI,GAAGE,CAAS,EAC/E,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SAAIE,IAEA,gBAAAK,EAAC,OAAA,EAAI,WAAU,YAAY,GAAGH,GAC3B,UAAA;AAAA,IAAAH,KACC,gBAAAM,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,MAChCH,KAAO,gBAAAK,EAAC,KAAA,EAAE,WAAU,gBAAgB,UAAAL,EAAA,CAAI;AAAA,IAAA,GAC3C;AAAA,sBAED,OAAA,EAAI,WAAWF,IAAW,wBAAwB,IAAK,UAAAC,EAAA,CAAS;AAAA,EAAA,GACnE,IAICD,IAKH,gBAAAM,EAAC,OAAA,EAAI,WAAU,oCAAoC,GAAGH,GACpD,UAAA;AAAA,IAAA,gBAAAI,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,IAChCH,KAAO,gBAAAK,EAAC,KAAA,EAAE,WAAU,WAAW,UAAAL,EAAA,CAAI;AAAA,EAAA,GACtC,IAPO;AASX;"}
|
package/dist/index43.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import C from "react";
|
|
3
|
+
const h = ({
|
|
4
|
+
children: u,
|
|
5
|
+
columns: l = 3,
|
|
6
|
+
gap: m = 4,
|
|
7
|
+
className: c = "",
|
|
8
|
+
...a
|
|
9
|
+
}) => {
|
|
10
|
+
const p = () => typeof m == "string" ? m : {
|
|
11
|
+
0: "gap-0",
|
|
12
|
+
1: "gap-1",
|
|
13
|
+
2: "gap-2",
|
|
14
|
+
3: "gap-3",
|
|
15
|
+
4: "gap-4",
|
|
16
|
+
5: "gap-5",
|
|
17
|
+
6: "gap-6",
|
|
18
|
+
7: "gap-7",
|
|
19
|
+
8: "gap-8",
|
|
20
|
+
9: "gap-9",
|
|
21
|
+
10: "gap-10",
|
|
22
|
+
11: "gap-11",
|
|
23
|
+
12: "gap-12"
|
|
24
|
+
}[m] || "gap-4", o = {
|
|
25
|
+
1: "columns-1",
|
|
26
|
+
2: "columns-2",
|
|
27
|
+
3: "columns-3",
|
|
28
|
+
4: "columns-4",
|
|
29
|
+
5: "columns-5",
|
|
30
|
+
6: "columns-6",
|
|
31
|
+
7: "columns-7",
|
|
32
|
+
8: "columns-8",
|
|
33
|
+
9: "columns-9",
|
|
34
|
+
10: "columns-10",
|
|
35
|
+
11: "columns-11",
|
|
36
|
+
12: "columns-12"
|
|
37
|
+
}, x = {
|
|
38
|
+
1: "sm:columns-1",
|
|
39
|
+
2: "sm:columns-2",
|
|
40
|
+
3: "sm:columns-3",
|
|
41
|
+
4: "sm:columns-4",
|
|
42
|
+
5: "sm:columns-5",
|
|
43
|
+
6: "sm:columns-6",
|
|
44
|
+
7: "sm:columns-7",
|
|
45
|
+
8: "sm:columns-8",
|
|
46
|
+
9: "sm:columns-9",
|
|
47
|
+
10: "sm:columns-10",
|
|
48
|
+
11: "sm:columns-11",
|
|
49
|
+
12: "sm:columns-12"
|
|
50
|
+
}, g = {
|
|
51
|
+
1: "md:columns-1",
|
|
52
|
+
2: "md:columns-2",
|
|
53
|
+
3: "md:columns-3",
|
|
54
|
+
4: "md:columns-4",
|
|
55
|
+
5: "md:columns-5",
|
|
56
|
+
6: "md:columns-6",
|
|
57
|
+
7: "md:columns-7",
|
|
58
|
+
8: "md:columns-8",
|
|
59
|
+
9: "md:columns-9",
|
|
60
|
+
10: "md:columns-10",
|
|
61
|
+
11: "md:columns-11",
|
|
62
|
+
12: "md:columns-12"
|
|
63
|
+
}, d = {
|
|
64
|
+
1: "lg:columns-1",
|
|
65
|
+
2: "lg:columns-2",
|
|
66
|
+
3: "lg:columns-3",
|
|
67
|
+
4: "lg:columns-4",
|
|
68
|
+
5: "lg:columns-5",
|
|
69
|
+
6: "lg:columns-6",
|
|
70
|
+
7: "lg:columns-7",
|
|
71
|
+
8: "lg:columns-8",
|
|
72
|
+
9: "lg:columns-9",
|
|
73
|
+
10: "lg:columns-10",
|
|
74
|
+
11: "lg:columns-11",
|
|
75
|
+
12: "lg:columns-12"
|
|
76
|
+
}, e = {
|
|
77
|
+
1: "xl:columns-1",
|
|
78
|
+
2: "xl:columns-2",
|
|
79
|
+
3: "xl:columns-3",
|
|
80
|
+
4: "xl:columns-4",
|
|
81
|
+
5: "xl:columns-5",
|
|
82
|
+
6: "xl:columns-6",
|
|
83
|
+
7: "xl:columns-7",
|
|
84
|
+
8: "xl:columns-8",
|
|
85
|
+
9: "xl:columns-9",
|
|
86
|
+
10: "xl:columns-10",
|
|
87
|
+
11: "xl:columns-11",
|
|
88
|
+
12: "xl:columns-12"
|
|
89
|
+
}, i = {
|
|
90
|
+
1: "2xl:columns-1",
|
|
91
|
+
2: "2xl:columns-2",
|
|
92
|
+
3: "2xl:columns-3",
|
|
93
|
+
4: "2xl:columns-4",
|
|
94
|
+
5: "2xl:columns-5",
|
|
95
|
+
6: "2xl:columns-6",
|
|
96
|
+
7: "2xl:columns-7",
|
|
97
|
+
8: "2xl:columns-8",
|
|
98
|
+
9: "2xl:columns-9",
|
|
99
|
+
10: "2xl:columns-10",
|
|
100
|
+
11: "2xl:columns-11",
|
|
101
|
+
12: "2xl:columns-12"
|
|
102
|
+
}, t = [
|
|
103
|
+
(() => {
|
|
104
|
+
if (typeof l == "number")
|
|
105
|
+
return o[l] || "columns-3";
|
|
106
|
+
const s = [];
|
|
107
|
+
return l.xs !== void 0 && s.push(o[l.xs] || "columns-3"), l.sm !== void 0 && s.push(x[l.sm] || "sm:columns-3"), l.md !== void 0 && s.push(g[l.md] || "md:columns-3"), l.lg !== void 0 && s.push(d[l.lg] || "lg:columns-3"), l.xl !== void 0 && s.push(e[l.xl] || "xl:columns-3"), l["2xl"] !== void 0 && s.push(i[l["2xl"]] || "2xl:columns-3"), s.join(" ");
|
|
108
|
+
})(),
|
|
109
|
+
p(),
|
|
110
|
+
c
|
|
111
|
+
].filter(Boolean).join(" "), r = C.Children.map(u, (s, f) => /* @__PURE__ */ n("div", { className: "break-inside-avoid mb-4", children: s }, f));
|
|
112
|
+
return /* @__PURE__ */ n("div", { className: t, ...a, children: r });
|
|
113
|
+
};
|
|
114
|
+
h.displayName = "Masonry";
|
|
115
|
+
export {
|
|
116
|
+
h as Masonry,
|
|
117
|
+
h as default
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=index43.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index43.js","sources":["../src/components/Masonry.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface MasonryProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n columns?: number | {\n xs?: number\n sm?: number\n md?: number\n lg?: number\n xl?: number\n '2xl'?: number\n }\n gap?: number | string\n}\n\nexport const Masonry: React.FC<MasonryProps> = ({\n children,\n columns = 3,\n gap = 4,\n className = '',\n ...rest\n}) => {\n // Map gap values to Tailwind classes\n const getGapClass = () => {\n if (typeof gap === 'string') {\n return gap\n }\n\n const gapMap: Record<number, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 7: 'gap-7',\n 8: 'gap-8',\n 9: 'gap-9',\n 10: 'gap-10',\n 11: 'gap-11',\n 12: 'gap-12',\n }\n return gapMap[gap] || 'gap-4'\n }\n\n // Static column class mappings for Tailwind JIT\n const baseColumnMap: Record<number, string> = {\n 1: 'columns-1',\n 2: 'columns-2',\n 3: 'columns-3',\n 4: 'columns-4',\n 5: 'columns-5',\n 6: 'columns-6',\n 7: 'columns-7',\n 8: 'columns-8',\n 9: 'columns-9',\n 10: 'columns-10',\n 11: 'columns-11',\n 12: 'columns-12',\n }\n\n const smColumnMap: Record<number, string> = {\n 1: 'sm:columns-1',\n 2: 'sm:columns-2',\n 3: 'sm:columns-3',\n 4: 'sm:columns-4',\n 5: 'sm:columns-5',\n 6: 'sm:columns-6',\n 7: 'sm:columns-7',\n 8: 'sm:columns-8',\n 9: 'sm:columns-9',\n 10: 'sm:columns-10',\n 11: 'sm:columns-11',\n 12: 'sm:columns-12',\n }\n\n const mdColumnMap: Record<number, string> = {\n 1: 'md:columns-1',\n 2: 'md:columns-2',\n 3: 'md:columns-3',\n 4: 'md:columns-4',\n 5: 'md:columns-5',\n 6: 'md:columns-6',\n 7: 'md:columns-7',\n 8: 'md:columns-8',\n 9: 'md:columns-9',\n 10: 'md:columns-10',\n 11: 'md:columns-11',\n 12: 'md:columns-12',\n }\n\n const lgColumnMap: Record<number, string> = {\n 1: 'lg:columns-1',\n 2: 'lg:columns-2',\n 3: 'lg:columns-3',\n 4: 'lg:columns-4',\n 5: 'lg:columns-5',\n 6: 'lg:columns-6',\n 7: 'lg:columns-7',\n 8: 'lg:columns-8',\n 9: 'lg:columns-9',\n 10: 'lg:columns-10',\n 11: 'lg:columns-11',\n 12: 'lg:columns-12',\n }\n\n const xlColumnMap: Record<number, string> = {\n 1: 'xl:columns-1',\n 2: 'xl:columns-2',\n 3: 'xl:columns-3',\n 4: 'xl:columns-4',\n 5: 'xl:columns-5',\n 6: 'xl:columns-6',\n 7: 'xl:columns-7',\n 8: 'xl:columns-8',\n 9: 'xl:columns-9',\n 10: 'xl:columns-10',\n 11: 'xl:columns-11',\n 12: 'xl:columns-12',\n }\n\n const xl2ColumnMap: Record<number, string> = {\n 1: '2xl:columns-1',\n 2: '2xl:columns-2',\n 3: '2xl:columns-3',\n 4: '2xl:columns-4',\n 5: '2xl:columns-5',\n 6: '2xl:columns-6',\n 7: '2xl:columns-7',\n 8: '2xl:columns-8',\n 9: '2xl:columns-9',\n 10: '2xl:columns-10',\n 11: '2xl:columns-11',\n 12: '2xl:columns-12',\n }\n\n // Convert columns to Tailwind classes\n const getColumnClasses = () => {\n if (typeof columns === 'number') {\n return baseColumnMap[columns] || 'columns-3'\n }\n\n // Handle responsive columns object\n const classes: string[] = []\n if (columns.xs !== undefined) classes.push(baseColumnMap[columns.xs] || 'columns-3')\n if (columns.sm !== undefined) classes.push(smColumnMap[columns.sm] || 'sm:columns-3')\n if (columns.md !== undefined) classes.push(mdColumnMap[columns.md] || 'md:columns-3')\n if (columns.lg !== undefined) classes.push(lgColumnMap[columns.lg] || 'lg:columns-3')\n if (columns.xl !== undefined) classes.push(xlColumnMap[columns.xl] || 'xl:columns-3')\n if (columns['2xl'] !== undefined) classes.push(xl2ColumnMap[columns['2xl']] || '2xl:columns-3')\n\n return classes.join(' ')\n }\n\n const containerClasses = [\n getColumnClasses(),\n getGapClass(),\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Wrap children in break-inside-avoid containers\n const wrappedChildren = React.Children.map(children, (child, index) => (\n <div key={index} className=\"break-inside-avoid mb-4\">\n {child}\n </div>\n ))\n\n return (\n <div className={containerClasses} {...rest}>\n {wrappedChildren}\n </div>\n )\n}\n\nMasonry.displayName = 'Masonry'\n\nexport default Masonry\n"],"names":["Masonry","children","columns","gap","className","rest","getGapClass","baseColumnMap","smColumnMap","mdColumnMap","lgColumnMap","xlColumnMap","xl2ColumnMap","containerClasses","classes","wrappedChildren","React","child","index","jsx"],"mappings":"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"}
|
package/dist/index44.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { jsx as a, jsxs as K } from "react/jsx-runtime";
|
|
2
|
+
import { useState as f, useRef as $, useCallback as A, useEffect as C } from "react";
|
|
3
|
+
import { createPortal as oe } from "react-dom";
|
|
4
|
+
const fe = ({
|
|
5
|
+
value: p,
|
|
6
|
+
defaultValue: q = "",
|
|
7
|
+
onChange: E,
|
|
8
|
+
onSelect: U,
|
|
9
|
+
onSearch: W,
|
|
10
|
+
options: R = [],
|
|
11
|
+
loading: X = !1,
|
|
12
|
+
prefix: k = "@",
|
|
13
|
+
split: v = " ",
|
|
14
|
+
placeholder: Y,
|
|
15
|
+
disabled: G = !1,
|
|
16
|
+
readOnly: J = !1,
|
|
17
|
+
rows: V = 3,
|
|
18
|
+
autoSize: o = !1,
|
|
19
|
+
notFoundContent: Q = "No matches found",
|
|
20
|
+
filterOption: x = !0,
|
|
21
|
+
className: Z = "",
|
|
22
|
+
dropdownClassName: _ = "",
|
|
23
|
+
...z
|
|
24
|
+
}) => {
|
|
25
|
+
const [ee, T] = f(q), h = p !== void 0 ? p : ee, [u, m] = f(!1), [I, N] = f(null), [D, M] = f(""), [d, y] = f(0), [g, H] = f(null), [j, te] = f({ top: 0, left: 0 }), l = $(null), b = $(null), B = $(null), ne = Array.isArray(k) ? k : [k], c = A(() => {
|
|
26
|
+
if (!x) return R;
|
|
27
|
+
const e = typeof x == "function" ? x : (t, n) => (n.label || n.value).toLowerCase().includes(t.toLowerCase());
|
|
28
|
+
return R.filter((t) => e(D, t));
|
|
29
|
+
}, [R, D, x])(), L = A(() => {
|
|
30
|
+
const e = l.current;
|
|
31
|
+
if (!e || !o) return;
|
|
32
|
+
e.style.height = "auto";
|
|
33
|
+
const t = e.scrollHeight;
|
|
34
|
+
if (typeof o == "object") {
|
|
35
|
+
const n = parseInt(getComputedStyle(e).lineHeight) || 20, r = o.minRows ? o.minRows * n : 0, s = o.maxRows ? o.maxRows * n : 1 / 0;
|
|
36
|
+
e.style.height = `${Math.min(Math.max(t, r), s)}px`;
|
|
37
|
+
} else
|
|
38
|
+
e.style.height = `${t}px`;
|
|
39
|
+
}, [o]);
|
|
40
|
+
C(() => {
|
|
41
|
+
L();
|
|
42
|
+
}, [h, L]);
|
|
43
|
+
const O = A(() => {
|
|
44
|
+
const e = l.current, t = B.current;
|
|
45
|
+
if (!e || !t || g === null) return;
|
|
46
|
+
const n = h.substring(0, g);
|
|
47
|
+
t.textContent = n;
|
|
48
|
+
const r = e.getBoundingClientRect(), s = t.getBoundingClientRect(), w = parseInt(getComputedStyle(e).lineHeight) || 20;
|
|
49
|
+
te({
|
|
50
|
+
top: r.top + window.scrollY + w + 4,
|
|
51
|
+
left: r.left + window.scrollX + Math.min(s.width % r.width, r.width - 200)
|
|
52
|
+
});
|
|
53
|
+
}, [h, g]);
|
|
54
|
+
C(() => {
|
|
55
|
+
u && O();
|
|
56
|
+
}, [u, O, D]);
|
|
57
|
+
const re = (e) => {
|
|
58
|
+
const t = e.target.value, n = e.target.selectionStart;
|
|
59
|
+
p === void 0 && T(t), E?.(t), se(t, n);
|
|
60
|
+
}, se = (e, t) => {
|
|
61
|
+
let n = null, r = null;
|
|
62
|
+
for (const s of ne) {
|
|
63
|
+
const i = e.substring(0, t).lastIndexOf(s);
|
|
64
|
+
if (i !== -1) {
|
|
65
|
+
const S = i > 0 ? e[i - 1] : v;
|
|
66
|
+
if (S === v || S === `
|
|
67
|
+
` || i === 0) {
|
|
68
|
+
const F = e.substring(i + s.length, t);
|
|
69
|
+
if (!F.includes(v) && !F.includes(`
|
|
70
|
+
`)) {
|
|
71
|
+
n = s, r = i;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (n !== null && r !== null) {
|
|
78
|
+
const s = e.substring(r + n.length, t);
|
|
79
|
+
N(n), M(s), H(r), m(!0), y(0), W?.(s, n);
|
|
80
|
+
} else
|
|
81
|
+
m(!1), N(null), M(""), H(null);
|
|
82
|
+
}, P = (e) => {
|
|
83
|
+
if (e.disabled || g === null || I === null) return;
|
|
84
|
+
const t = l.current;
|
|
85
|
+
if (!t) return;
|
|
86
|
+
const n = h.substring(0, g), r = h.substring(t.selectionStart), s = `${I}${e.value}${v}`, w = n + s + r;
|
|
87
|
+
p === void 0 && T(w), E?.(w), U?.(e, I), m(!1), N(null), M(""), H(null), setTimeout(() => {
|
|
88
|
+
const i = n.length + s.length;
|
|
89
|
+
t.focus(), t.setSelectionRange(i, i);
|
|
90
|
+
}, 0);
|
|
91
|
+
}, ae = (e) => {
|
|
92
|
+
if (u)
|
|
93
|
+
switch (e.key) {
|
|
94
|
+
case "ArrowDown":
|
|
95
|
+
e.preventDefault(), y((t) => (t + 1) % Math.max(c.length, 1));
|
|
96
|
+
break;
|
|
97
|
+
case "ArrowUp":
|
|
98
|
+
e.preventDefault(), y((t) => (t - 1 + c.length) % Math.max(c.length, 1));
|
|
99
|
+
break;
|
|
100
|
+
case "Enter":
|
|
101
|
+
c[d] && (e.preventDefault(), P(c[d]));
|
|
102
|
+
break;
|
|
103
|
+
case "Escape":
|
|
104
|
+
e.preventDefault(), m(!1);
|
|
105
|
+
break;
|
|
106
|
+
case "Tab":
|
|
107
|
+
c[d] && (e.preventDefault(), P(c[d]));
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
C(() => {
|
|
112
|
+
const e = (t) => {
|
|
113
|
+
b.current && !b.current.contains(t.target) && l.current && !l.current.contains(t.target) && m(!1);
|
|
114
|
+
};
|
|
115
|
+
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
116
|
+
}, []), C(() => {
|
|
117
|
+
u && b.current && b.current.querySelector('[data-active="true"]')?.scrollIntoView({ block: "nearest" });
|
|
118
|
+
}, [d, u]);
|
|
119
|
+
const le = u && /* @__PURE__ */ a(
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
ref: b,
|
|
123
|
+
className: `fixed z-50 bg-base-100 border border-base-300 rounded-lg shadow-lg
|
|
124
|
+
min-w-48 max-h-60 overflow-auto ${_}`,
|
|
125
|
+
style: {
|
|
126
|
+
top: j.top,
|
|
127
|
+
left: j.left
|
|
128
|
+
},
|
|
129
|
+
children: X ? /* @__PURE__ */ a("div", { className: "p-3 text-center text-base-content/60", children: /* @__PURE__ */ a("span", { className: "loading loading-spinner loading-sm" }) }) : c.length === 0 ? /* @__PURE__ */ a("div", { className: "p-3 text-center text-base-content/60 text-sm", children: Q }) : /* @__PURE__ */ a("ul", { className: "menu menu-sm p-1", children: c.map((e, t) => /* @__PURE__ */ a("li", { children: /* @__PURE__ */ K(
|
|
130
|
+
"button",
|
|
131
|
+
{
|
|
132
|
+
type: "button",
|
|
133
|
+
"data-active": t === d,
|
|
134
|
+
className: `flex items-center gap-2 ${t === d ? "active" : ""} ${e.disabled ? "disabled opacity-50 cursor-not-allowed" : ""}`,
|
|
135
|
+
onClick: () => P(e),
|
|
136
|
+
onMouseEnter: () => y(t),
|
|
137
|
+
children: [
|
|
138
|
+
e.avatar && /* @__PURE__ */ a("div", { className: "avatar", children: /* @__PURE__ */ a("div", { className: "w-6 h-6 rounded-full", children: /* @__PURE__ */ a("img", { src: e.avatar, alt: "" }) }) }),
|
|
139
|
+
/* @__PURE__ */ a("span", { children: e.label || e.value })
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
) }, e.value)) })
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
return /* @__PURE__ */ K("div", { className: `relative ${Z}`, "data-state": u ? "open" : "closed", ...z, children: [
|
|
146
|
+
/* @__PURE__ */ a(
|
|
147
|
+
"div",
|
|
148
|
+
{
|
|
149
|
+
ref: B,
|
|
150
|
+
className: "invisible absolute whitespace-pre-wrap break-words",
|
|
151
|
+
style: {
|
|
152
|
+
font: l.current ? getComputedStyle(l.current).font : void 0,
|
|
153
|
+
width: l.current?.clientWidth,
|
|
154
|
+
padding: l.current ? getComputedStyle(l.current).padding : void 0
|
|
155
|
+
},
|
|
156
|
+
"aria-hidden": "true"
|
|
157
|
+
}
|
|
158
|
+
),
|
|
159
|
+
/* @__PURE__ */ a(
|
|
160
|
+
"textarea",
|
|
161
|
+
{
|
|
162
|
+
ref: l,
|
|
163
|
+
value: h,
|
|
164
|
+
onChange: re,
|
|
165
|
+
onKeyDown: ae,
|
|
166
|
+
placeholder: Y,
|
|
167
|
+
disabled: G,
|
|
168
|
+
readOnly: J,
|
|
169
|
+
rows: typeof o == "object" ? o.minRows || V : o ? 1 : V,
|
|
170
|
+
className: "textarea textarea-bordered w-full resize-none"
|
|
171
|
+
}
|
|
172
|
+
),
|
|
173
|
+
oe(le, document.body)
|
|
174
|
+
] });
|
|
175
|
+
};
|
|
176
|
+
export {
|
|
177
|
+
fe as Mention
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=index44.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index44.js","sources":["../src/components/Mention.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface MentionOption {\n value: string\n label?: string\n avatar?: string\n disabled?: boolean\n}\n\nexport interface MentionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSelect' | 'defaultValue' | 'prefix'> {\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n onSelect?: (option: MentionOption, prefix: string) => void\n onSearch?: (text: string, prefix: string) => void\n options?: MentionOption[]\n loading?: boolean\n prefix?: string | string[]\n split?: string\n placeholder?: string\n disabled?: boolean\n readOnly?: boolean\n rows?: number\n autoSize?: boolean | { minRows?: number; maxRows?: number }\n notFoundContent?: React.ReactNode\n filterOption?: boolean | ((input: string, option: MentionOption) => boolean)\n dropdownClassName?: string\n}\n\nexport const Mention: React.FC<MentionProps> = ({\n value,\n defaultValue = '',\n onChange,\n onSelect,\n onSearch,\n options = [],\n loading = false,\n prefix = '@',\n split = ' ',\n placeholder,\n disabled = false,\n readOnly = false,\n rows = 3,\n autoSize = false,\n notFoundContent = 'No matches found',\n filterOption = true,\n className = '',\n dropdownClassName = '',\n ...rest\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const [isOpen, setIsOpen] = useState(false)\n const [activePrefix, setActivePrefix] = useState<string | null>(null)\n const [searchText, setSearchText] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const [mentionStart, setMentionStart] = useState<number | null>(null)\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 })\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const measureRef = useRef<HTMLDivElement>(null)\n\n const prefixes = Array.isArray(prefix) ? prefix : [prefix]\n\n // Filter options based on search text\n const filteredOptions = useCallback(() => {\n if (!filterOption) return options\n\n const filterFn =\n typeof filterOption === 'function'\n ? filterOption\n : (input: string, option: MentionOption) => {\n const label = option.label || option.value\n return label.toLowerCase().includes(input.toLowerCase())\n }\n\n return options.filter((opt) => filterFn(searchText, opt))\n }, [options, searchText, filterOption])\n\n const filtered = filteredOptions()\n\n // Update textarea height for autoSize\n const updateHeight = useCallback(() => {\n const textarea = textareaRef.current\n if (!textarea || !autoSize) return\n\n textarea.style.height = 'auto'\n const scrollHeight = textarea.scrollHeight\n\n if (typeof autoSize === 'object') {\n const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20\n const minHeight = autoSize.minRows ? autoSize.minRows * lineHeight : 0\n const maxHeight = autoSize.maxRows ? autoSize.maxRows * lineHeight : Infinity\n\n textarea.style.height = `${Math.min(Math.max(scrollHeight, minHeight), maxHeight)}px`\n } else {\n textarea.style.height = `${scrollHeight}px`\n }\n }, [autoSize])\n\n useEffect(() => {\n updateHeight()\n }, [currentValue, updateHeight])\n\n // Calculate dropdown position\n const updateDropdownPosition = useCallback(() => {\n const textarea = textareaRef.current\n const measure = measureRef.current\n if (!textarea || !measure || mentionStart === null) return\n\n // Get text before cursor to measure position\n const textBeforeCursor = currentValue.substring(0, mentionStart)\n\n // Create a temporary element to measure text position\n measure.textContent = textBeforeCursor\n\n const textareaRect = textarea.getBoundingClientRect()\n const measureRect = measure.getBoundingClientRect()\n\n // Calculate position relative to viewport\n const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20\n\n setDropdownPosition({\n top: textareaRect.top + window.scrollY + lineHeight + 4,\n left: textareaRect.left + window.scrollX + Math.min(measureRect.width % textareaRect.width, textareaRect.width - 200),\n })\n }, [currentValue, mentionStart])\n\n useEffect(() => {\n if (isOpen) {\n updateDropdownPosition()\n }\n }, [isOpen, updateDropdownPosition, searchText])\n\n // Handle text change\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value\n const cursorPos = e.target.selectionStart\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n\n // Check if we should open the mention dropdown\n checkForMention(newValue, cursorPos)\n }\n\n const checkForMention = (text: string, cursorPos: number) => {\n // Look backwards from cursor for a prefix\n let foundPrefix: string | null = null\n let foundStart: number | null = null\n\n for (const p of prefixes) {\n // Find the last occurrence of prefix before cursor\n const beforeCursor = text.substring(0, cursorPos)\n const lastPrefixIndex = beforeCursor.lastIndexOf(p)\n\n if (lastPrefixIndex !== -1) {\n // Check if prefix is at start or preceded by whitespace/split\n const charBefore = lastPrefixIndex > 0 ? text[lastPrefixIndex - 1] : split\n if (charBefore === split || charBefore === '\\n' || lastPrefixIndex === 0) {\n // Check if there's no space between prefix and cursor\n const textAfterPrefix = text.substring(lastPrefixIndex + p.length, cursorPos)\n if (!textAfterPrefix.includes(split) && !textAfterPrefix.includes('\\n')) {\n foundPrefix = p\n foundStart = lastPrefixIndex\n break\n }\n }\n }\n }\n\n if (foundPrefix !== null && foundStart !== null) {\n const search = text.substring(foundStart + foundPrefix.length, cursorPos)\n setActivePrefix(foundPrefix)\n setSearchText(search)\n setMentionStart(foundStart)\n setIsOpen(true)\n setActiveIndex(0)\n onSearch?.(search, foundPrefix)\n } else {\n setIsOpen(false)\n setActivePrefix(null)\n setSearchText('')\n setMentionStart(null)\n }\n }\n\n // Handle option selection\n const selectOption = (option: MentionOption) => {\n if (option.disabled || mentionStart === null || activePrefix === null) return\n\n const textarea = textareaRef.current\n if (!textarea) return\n\n const beforeMention = currentValue.substring(0, mentionStart)\n const afterCursor = currentValue.substring(textarea.selectionStart)\n\n const mentionText = `${activePrefix}${option.value}${split}`\n const newValue = beforeMention + mentionText + afterCursor\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n onSelect?.(option, activePrefix)\n\n setIsOpen(false)\n setActivePrefix(null)\n setSearchText('')\n setMentionStart(null)\n\n // Set cursor position after mention\n setTimeout(() => {\n const newCursorPos = beforeMention.length + mentionText.length\n textarea.focus()\n textarea.setSelectionRange(newCursorPos, newCursorPos)\n }, 0)\n }\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!isOpen) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setActiveIndex((prev) => (prev + 1) % Math.max(filtered.length, 1))\n break\n case 'ArrowUp':\n e.preventDefault()\n setActiveIndex((prev) => (prev - 1 + filtered.length) % Math.max(filtered.length, 1))\n break\n case 'Enter':\n if (filtered[activeIndex]) {\n e.preventDefault()\n selectOption(filtered[activeIndex])\n }\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n break\n case 'Tab':\n if (filtered[activeIndex]) {\n e.preventDefault()\n selectOption(filtered[activeIndex])\n }\n break\n }\n }\n\n // Close dropdown on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node) &&\n textareaRef.current &&\n !textareaRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n // Scroll active item into view\n useEffect(() => {\n if (isOpen && dropdownRef.current) {\n const activeItem = dropdownRef.current.querySelector('[data-active=\"true\"]')\n activeItem?.scrollIntoView({ block: 'nearest' })\n }\n }, [activeIndex, isOpen])\n\n const dropdown = isOpen && (\n <div\n ref={dropdownRef}\n className={`fixed z-50 bg-base-100 border border-base-300 rounded-lg shadow-lg\n min-w-48 max-h-60 overflow-auto ${dropdownClassName}`}\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n }}\n >\n {loading ? (\n <div className=\"p-3 text-center text-base-content/60\">\n <span className=\"loading loading-spinner loading-sm\"></span>\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"p-3 text-center text-base-content/60 text-sm\">\n {notFoundContent}\n </div>\n ) : (\n <ul className=\"menu menu-sm p-1\">\n {filtered.map((option, index) => (\n <li key={option.value}>\n <button\n type=\"button\"\n data-active={index === activeIndex}\n className={`flex items-center gap-2 ${\n index === activeIndex ? 'active' : ''\n } ${option.disabled ? 'disabled opacity-50 cursor-not-allowed' : ''}`}\n onClick={() => selectOption(option)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {option.avatar && (\n <div className=\"avatar\">\n <div className=\"w-6 h-6 rounded-full\">\n <img src={option.avatar} alt=\"\" />\n </div>\n </div>\n )}\n <span>{option.label || option.value}</span>\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n\n return (\n <div className={`relative ${className}`} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n {/* Hidden measure element for cursor position */}\n <div\n ref={measureRef}\n className=\"invisible absolute whitespace-pre-wrap break-words\"\n style={{\n font: textareaRef.current ? getComputedStyle(textareaRef.current).font : undefined,\n width: textareaRef.current?.clientWidth,\n padding: textareaRef.current ? getComputedStyle(textareaRef.current).padding : undefined,\n }}\n aria-hidden=\"true\"\n />\n\n <textarea\n ref={textareaRef}\n value={currentValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n rows={typeof autoSize === 'object' ? autoSize.minRows || rows : autoSize ? 1 : rows}\n className=\"textarea textarea-bordered w-full resize-none\"\n />\n\n {createPortal(dropdown, document.body)}\n </div>\n )\n}\n"],"names":["Mention","value","defaultValue","onChange","onSelect","onSearch","options","loading","prefix","split","placeholder","disabled","readOnly","rows","autoSize","notFoundContent","filterOption","className","dropdownClassName","rest","internalValue","setInternalValue","useState","currentValue","isOpen","setIsOpen","activePrefix","setActivePrefix","searchText","setSearchText","activeIndex","setActiveIndex","mentionStart","setMentionStart","dropdownPosition","setDropdownPosition","textareaRef","useRef","dropdownRef","measureRef","prefixes","filtered","useCallback","filterFn","input","option","opt","updateHeight","textarea","scrollHeight","lineHeight","minHeight","maxHeight","useEffect","updateDropdownPosition","measure","textBeforeCursor","textareaRect","measureRect","handleChange","newValue","cursorPos","checkForMention","text","foundPrefix","foundStart","p","lastPrefixIndex","charBefore","textAfterPrefix","search","selectOption","beforeMention","afterCursor","mentionText","newCursorPos","handleKeyDown","prev","handleClickOutside","e","dropdown","jsx","index","jsxs","createPortal"],"mappings":"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"}
|