@lobehub/ui 5.51.2 → 5.52.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/es/Accordion/Accordion.mjs +1 -1
- package/es/Accordion/Accordion.mjs.map +1 -1
- package/es/ActionIconGroup/type.d.mts +2 -1
- package/es/Alert/Alert.mjs +1 -1
- package/es/AutoComplete/Select.mjs +1 -1
- package/es/Avatar/Avatar.mjs +2 -2
- package/es/Burger/Burger.mjs +2 -2
- package/es/Burger/Burger.mjs.map +1 -1
- package/es/Button/Button.mjs +1 -1
- package/es/CodeDiff/DiffPanel.mjs +1 -1
- package/es/CodeDiff/DiffPanel.mjs.map +1 -1
- package/es/Collapse/Collapse.mjs +1 -1
- package/es/ColorSwatches/ColorSwatches.mjs +21 -21
- package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
- package/es/ColorSwatches/style.mjs +3 -12
- package/es/ColorSwatches/style.mjs.map +1 -1
- package/es/DatePicker/DatePicker.mjs +1 -1
- package/es/DraggablePanel/DraggablePanel.mjs +1 -1
- package/es/Drawer/Drawer.mjs +1 -1
- package/es/EditableText/ControlInput.d.mts +2 -2
- package/es/EditableText/ControlInput.mjs +1 -1
- package/es/EditableText/ControlInput.mjs.map +1 -1
- package/es/EditableText/EditableText.mjs +1 -0
- package/es/EditableText/EditableText.mjs.map +1 -1
- package/es/EditableText/type.d.mts +5 -1
- package/es/EmojiPicker/AvatarUploader.mjs +76 -71
- package/es/EmojiPicker/AvatarUploader.mjs.map +1 -1
- package/es/EmojiPicker/EmojiPicker.mjs +12 -6
- package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
- package/es/EmojiPicker/style.mjs +32 -9
- package/es/EmojiPicker/style.mjs.map +1 -1
- package/es/EmojiPicker/type.d.mts +2 -1
- package/es/Form/Form.mjs +1 -1
- package/es/Form/components/FormDivider.mjs +1 -1
- package/es/Form/components/FormItem.mjs +1 -1
- package/es/Form/components/FormSubmitFooter.mjs +1 -1
- package/es/Form/components/FormTitle.mjs +1 -1
- package/es/GroupAvatar/GroupAvatar.mjs +1 -1
- package/es/GroupAvatar/GroupAvatar.mjs.map +1 -1
- package/es/GroupAvatar/type.d.mts +2 -1
- package/es/Highlighter/Highlighter.mjs +1 -1
- package/es/Highlighter/Highlighter.mjs.map +1 -1
- package/es/Highlighter/LangSelect.mjs +23 -13
- package/es/Highlighter/LangSelect.mjs.map +1 -1
- package/es/Highlighter/style.mjs +1 -1
- package/es/Highlighter/style.mjs.map +1 -1
- package/es/HtmlPreview/HtmlPreview.mjs +28 -1
- package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
- package/es/Image/viewer/ImageViewer.mjs +1 -1
- package/es/Image/viewer/ImageViewer.mjs.map +1 -1
- package/es/Image/viewer/Toolbar.mjs +1 -1
- package/es/Input/Input.mjs +1 -1
- package/es/Input/InputNumber.mjs +1 -1
- package/es/Input/InputOPT.mjs +1 -1
- package/es/Input/InputPassword.mjs +1 -1
- package/es/Input/TextArea.mjs +1 -1
- package/es/Menu/Menu.mjs +1 -1
- package/es/Menu/index.d.mts +2 -1
- package/es/Menu/index.mjs +1 -1
- package/es/Menu/itemInterface.d.mts +71 -0
- package/es/Menu/type.d.mts +8 -8
- package/es/Mermaid/Mermaid.mjs +1 -1
- package/es/Mermaid/Mermaid.mjs.map +1 -1
- package/es/Modal/Modal.mjs +1 -1
- package/es/SearchBar/SearchBar.mjs +1 -1
- package/es/SearchBar/SearchBar.mjs.map +1 -1
- package/es/SearchBar/type.d.mts +2 -2
- package/es/Segmented/Segmented.mjs +1 -1
- package/es/Select/Select.mjs +1 -1
- package/es/SliderWithInput/SliderWithInput.mjs +1 -1
- package/es/Tabs/Tabs.mjs +1 -1
- package/es/Tag/Tag.mjs +1 -1
- package/es/ThemeProvider/ConfigProvider.mjs +1 -1
- package/es/ThemeProvider/ThemeProvider.mjs +1 -1
- package/es/ThemeSwitch/ThemeSwitch.mjs +1 -1
- package/es/Toc/Toc.mjs +1 -1
- package/es/Toc/TocMobile.mjs +1 -1
- package/es/awesome/AgentSkillCard/AgentSkillCard.mjs +1 -1
- package/es/awesome/Hero/Hero.mjs +1 -1
- package/es/awesome/LandingSection/LandingSection.mjs +1 -1
- package/es/base-ui/Anchor/Anchor.d.mts +6 -0
- package/es/base-ui/Anchor/Anchor.mjs +141 -0
- package/es/base-ui/Anchor/Anchor.mjs.map +1 -0
- package/es/base-ui/Anchor/index.d.mts +3 -0
- package/es/base-ui/Anchor/style.mjs +80 -0
- package/es/base-ui/Anchor/style.mjs.map +1 -0
- package/es/base-ui/Anchor/type.d.mts +20 -0
- package/es/base-ui/AutoComplete/AutoComplete.mjs.map +1 -1
- package/es/base-ui/Avatar/Avatar.mjs +1 -1
- package/es/base-ui/Breadcrumb/Breadcrumb.d.mts +6 -0
- package/es/base-ui/Breadcrumb/Breadcrumb.mjs +58 -0
- package/es/base-ui/Breadcrumb/Breadcrumb.mjs.map +1 -0
- package/es/base-ui/Breadcrumb/index.d.mts +3 -0
- package/es/base-ui/Breadcrumb/style.mjs +65 -0
- package/es/base-ui/Breadcrumb/style.mjs.map +1 -0
- package/es/base-ui/Breadcrumb/type.d.mts +24 -0
- package/es/base-ui/Burger/Burger.d.mts +6 -0
- package/es/base-ui/Burger/Burger.mjs +69 -0
- package/es/base-ui/Burger/Burger.mjs.map +1 -0
- package/es/base-ui/Burger/index.d.mts +3 -0
- package/es/base-ui/Burger/style.mjs +63 -0
- package/es/base-ui/Burger/style.mjs.map +1 -0
- package/es/base-ui/Burger/type.d.mts +23 -0
- package/es/base-ui/Carousel/Carousel.d.mts +6 -0
- package/es/base-ui/Carousel/Carousel.mjs +157 -0
- package/es/base-ui/Carousel/Carousel.mjs.map +1 -0
- package/es/base-ui/Carousel/index.d.mts +3 -0
- package/es/base-ui/Carousel/style.mjs +88 -0
- package/es/base-ui/Carousel/style.mjs.map +1 -0
- package/es/base-ui/Carousel/type.d.mts +23 -0
- package/es/base-ui/ColorPicker/ColorPicker.d.mts +6 -0
- package/es/base-ui/ColorPicker/ColorPicker.mjs +227 -0
- package/es/base-ui/ColorPicker/ColorPicker.mjs.map +1 -0
- package/es/base-ui/ColorPicker/SaturationArea.mjs +64 -0
- package/es/base-ui/ColorPicker/SaturationArea.mjs.map +1 -0
- package/es/base-ui/ColorPicker/color.mjs +28 -0
- package/es/base-ui/ColorPicker/color.mjs.map +1 -0
- package/es/base-ui/ColorPicker/index.d.mts +3 -0
- package/es/base-ui/ColorPicker/style.mjs +180 -0
- package/es/base-ui/ColorPicker/style.mjs.map +1 -0
- package/es/base-ui/ColorPicker/type.d.mts +20 -0
- package/es/base-ui/ContextMenu/ContextMenuHost.mjs.map +1 -1
- package/es/base-ui/ContextMenu/renderItems.d.mts +0 -1
- package/es/base-ui/ContextMenu/renderItems.mjs.map +1 -1
- package/es/base-ui/DatePicker/CalendarPanel.mjs +188 -0
- package/es/base-ui/DatePicker/CalendarPanel.mjs.map +1 -0
- package/es/base-ui/DatePicker/DatePicker.d.mts +6 -0
- package/es/base-ui/DatePicker/DatePicker.mjs +88 -0
- package/es/base-ui/DatePicker/DatePicker.mjs.map +1 -0
- package/es/base-ui/DatePicker/DateRangePicker.d.mts +6 -0
- package/es/base-ui/DatePicker/DateRangePicker.mjs +128 -0
- package/es/base-ui/DatePicker/DateRangePicker.mjs.map +1 -0
- package/es/base-ui/DatePicker/PickerShell.mjs +43 -0
- package/es/base-ui/DatePicker/PickerShell.mjs.map +1 -0
- package/es/base-ui/DatePicker/calendar.d.mts +5 -0
- package/es/base-ui/DatePicker/calendar.mjs +46 -0
- package/es/base-ui/DatePicker/calendar.mjs.map +1 -0
- package/es/base-ui/DatePicker/index.d.mts +5 -0
- package/es/base-ui/DatePicker/style.mjs +193 -0
- package/es/base-ui/DatePicker/style.mjs.map +1 -0
- package/es/base-ui/DatePicker/type.d.mts +35 -0
- package/es/base-ui/Descriptions/Descriptions.d.mts +6 -0
- package/es/base-ui/Descriptions/Descriptions.mjs +62 -0
- package/es/base-ui/Descriptions/Descriptions.mjs.map +1 -0
- package/es/base-ui/Descriptions/index.d.mts +3 -0
- package/es/base-ui/Descriptions/style.mjs +64 -0
- package/es/base-ui/Descriptions/style.mjs.map +1 -0
- package/es/base-ui/Descriptions/type.d.mts +28 -0
- package/es/base-ui/Divider/Divider.d.mts +6 -0
- package/es/base-ui/Divider/Divider.mjs +30 -0
- package/es/base-ui/Divider/Divider.mjs.map +1 -0
- package/es/base-ui/Divider/index.d.mts +3 -0
- package/es/base-ui/Divider/style.mjs +59 -0
- package/es/base-ui/Divider/style.mjs.map +1 -0
- package/es/base-ui/Divider/type.d.mts +12 -0
- package/es/base-ui/Drawer/atoms.mjs.map +1 -1
- package/es/base-ui/DropdownMenu/atoms.mjs +1 -1
- package/es/base-ui/DropdownMenu/atoms.mjs.map +1 -1
- package/es/base-ui/DropdownMenu/renderItems.d.mts +0 -1
- package/es/base-ui/DropdownMenu/renderItems.mjs.map +1 -1
- package/es/base-ui/Form/components/FormTitle.mjs +1 -1
- package/es/base-ui/Form/components/FormTitle.mjs.map +1 -1
- package/es/base-ui/Form/type.d.mts +2 -2
- package/es/base-ui/Input/ClearButton.mjs +32 -0
- package/es/base-ui/Input/ClearButton.mjs.map +1 -0
- package/es/base-ui/Input/Input.mjs +30 -4
- package/es/base-ui/Input/Input.mjs.map +1 -1
- package/es/base-ui/Input/InputNumber.mjs +43 -22
- package/es/base-ui/Input/InputNumber.mjs.map +1 -1
- package/es/base-ui/Input/TextArea.mjs +50 -13
- package/es/base-ui/Input/TextArea.mjs.map +1 -1
- package/es/base-ui/Input/clearNativeValue.mjs +12 -0
- package/es/base-ui/Input/clearNativeValue.mjs.map +1 -0
- package/es/base-ui/Input/pressEnter.mjs +6 -0
- package/es/base-ui/Input/pressEnter.mjs.map +1 -0
- package/es/base-ui/Input/style.d.mts +5 -1
- package/es/base-ui/Input/style.mjs +67 -4
- package/es/base-ui/Input/style.mjs.map +1 -1
- package/es/base-ui/Input/type.d.mts +13 -2
- package/es/base-ui/List/List.d.mts +6 -0
- package/es/base-ui/List/List.mjs +50 -0
- package/es/base-ui/List/List.mjs.map +1 -0
- package/es/base-ui/List/ListRow.mjs +74 -0
- package/es/base-ui/List/ListRow.mjs.map +1 -0
- package/es/base-ui/List/index.d.mts +3 -0
- package/es/base-ui/List/style.mjs +146 -0
- package/es/base-ui/List/style.mjs.map +1 -0
- package/es/base-ui/List/type.d.mts +48 -0
- package/es/base-ui/Modal/atoms.mjs.map +1 -1
- package/es/base-ui/Modal/imperative.mjs +1 -1
- package/es/base-ui/Modal/imperative.mjs.map +1 -1
- package/es/base-ui/Modal/type.d.mts +1 -0
- package/es/base-ui/Popover/PopoverPortal.mjs.map +1 -1
- package/es/base-ui/Progress/Progress.mjs +16 -14
- package/es/base-ui/Progress/Progress.mjs.map +1 -1
- package/es/base-ui/Progress/style.mjs +16 -25
- package/es/base-ui/Progress/style.mjs.map +1 -1
- package/es/base-ui/QRCode/QRCode.d.mts +6 -0
- package/es/base-ui/QRCode/QRCode.mjs +105 -0
- package/es/base-ui/QRCode/QRCode.mjs.map +1 -0
- package/es/base-ui/QRCode/index.d.mts +3 -0
- package/es/base-ui/QRCode/qrPath.mjs +16 -0
- package/es/base-ui/QRCode/qrPath.mjs.map +1 -0
- package/es/base-ui/QRCode/style.mjs +52 -0
- package/es/base-ui/QRCode/style.mjs.map +1 -0
- package/es/base-ui/QRCode/type.d.mts +19 -0
- package/es/base-ui/Rate/Rate.d.mts +6 -0
- package/es/base-ui/Rate/Rate.mjs +111 -0
- package/es/base-ui/Rate/Rate.mjs.map +1 -0
- package/es/base-ui/Rate/index.d.mts +3 -0
- package/es/base-ui/Rate/style.mjs +81 -0
- package/es/base-ui/Rate/style.mjs.map +1 -0
- package/es/base-ui/Rate/type.d.mts +19 -0
- package/es/base-ui/Select/atoms.mjs.map +1 -1
- package/es/base-ui/Select/hooks.mjs.map +1 -1
- package/es/base-ui/Statistic/Statistic.d.mts +6 -0
- package/es/base-ui/Statistic/Statistic.mjs +42 -0
- package/es/base-ui/Statistic/Statistic.mjs.map +1 -0
- package/es/base-ui/Statistic/formatValue.d.mts +5 -0
- package/es/base-ui/Statistic/formatValue.mjs +23 -0
- package/es/base-ui/Statistic/formatValue.mjs.map +1 -0
- package/es/base-ui/Statistic/index.d.mts +4 -0
- package/es/base-ui/Statistic/style.mjs +34 -0
- package/es/base-ui/Statistic/style.mjs.map +1 -0
- package/es/base-ui/Statistic/type.d.mts +23 -0
- package/es/base-ui/Steps/Steps.d.mts +6 -0
- package/es/base-ui/Steps/Steps.mjs +74 -0
- package/es/base-ui/Steps/Steps.mjs.map +1 -0
- package/es/base-ui/Steps/index.d.mts +3 -0
- package/es/base-ui/Steps/style.mjs +155 -0
- package/es/base-ui/Steps/style.mjs.map +1 -0
- package/es/base-ui/Steps/type.d.mts +32 -0
- package/es/base-ui/Table/FilterMenu.mjs +45 -0
- package/es/base-ui/Table/FilterMenu.mjs.map +1 -0
- package/es/base-ui/Table/Table.d.mts +10 -0
- package/es/base-ui/Table/Table.mjs +134 -0
- package/es/base-ui/Table/Table.mjs.map +1 -0
- package/es/base-ui/Table/TableBody.mjs +59 -0
- package/es/base-ui/Table/TableBody.mjs.map +1 -0
- package/es/base-ui/Table/TableHead.mjs +50 -0
- package/es/base-ui/Table/TableHead.mjs.map +1 -0
- package/es/base-ui/Table/features.mjs +12 -0
- package/es/base-ui/Table/features.mjs.map +1 -0
- package/es/base-ui/Table/fixedOffsets.mjs +29 -0
- package/es/base-ui/Table/fixedOffsets.mjs.map +1 -0
- package/es/base-ui/Table/index.d.mts +3 -0
- package/es/base-ui/Table/style.mjs +168 -0
- package/es/base-ui/Table/style.mjs.map +1 -0
- package/es/base-ui/Table/toColumnDefs.mjs +26 -0
- package/es/base-ui/Table/toColumnDefs.mjs.map +1 -0
- package/es/base-ui/Table/type.d.mts +68 -0
- package/es/base-ui/Table/useTableState.mjs +99 -0
- package/es/base-ui/Table/useTableState.mjs.map +1 -0
- package/es/base-ui/Toast/imperative.mjs.map +1 -1
- package/es/base-ui/Tooltip/TooltipGroup.mjs.map +1 -1
- package/es/base-ui/Tooltip/TooltipStandalone.mjs.map +1 -1
- package/es/base-ui/index.d.mts +66 -21
- package/es/base-ui/index.mjs +42 -26
- package/es/base-ui/panelStyles.mjs +95 -0
- package/es/base-ui/panelStyles.mjs.map +1 -0
- package/es/chat/ChatList/components/HistoryDivider.mjs +9 -6
- package/es/chat/ChatList/components/HistoryDivider.mjs.map +1 -1
- package/es/chat/MessageModal/MessageModal.mjs +1 -1
- package/es/chat/TokenTag/TokenTag.mjs +1 -1
- package/es/color/CssVar/VarRow.mjs +1 -1
- package/es/color/CssVar/index.mjs +1 -1
- package/es/dashboard/FilterSidebar/FilterSidebar.mjs +1 -1
- package/es/i18n/resources/en/burger.d.mts +8 -0
- package/es/i18n/resources/en/burger.mjs +9 -0
- package/es/i18n/resources/en/burger.mjs.map +1 -0
- package/es/i18n/resources/en/colorPicker.d.mts +12 -0
- package/es/i18n/resources/en/colorPicker.mjs +13 -0
- package/es/i18n/resources/en/colorPicker.mjs.map +1 -0
- package/es/i18n/resources/en/common.d.mts +1 -0
- package/es/i18n/resources/en/common.mjs +1 -0
- package/es/i18n/resources/en/common.mjs.map +1 -1
- package/es/i18n/resources/en/datePicker.d.mts +13 -0
- package/es/i18n/resources/en/datePicker.mjs +14 -0
- package/es/i18n/resources/en/datePicker.mjs.map +1 -0
- package/es/i18n/resources/en/index.d.mts +15 -11
- package/es/i18n/resources/en/index.mjs +9 -1
- package/es/i18n/resources/en/index.mjs.map +1 -1
- package/es/i18n/resources/en/qrCode.d.mts +9 -0
- package/es/i18n/resources/en/qrCode.mjs +10 -0
- package/es/i18n/resources/en/qrCode.mjs.map +1 -0
- package/es/i18n/resources/zhCn/burger.d.mts +8 -0
- package/es/i18n/resources/zhCn/burger.mjs +9 -0
- package/es/i18n/resources/zhCn/burger.mjs.map +1 -0
- package/es/i18n/resources/zhCn/colorPicker.d.mts +12 -0
- package/es/i18n/resources/zhCn/colorPicker.mjs +13 -0
- package/es/i18n/resources/zhCn/colorPicker.mjs.map +1 -0
- package/es/i18n/resources/zhCn/common.d.mts +1 -0
- package/es/i18n/resources/zhCn/common.mjs +1 -0
- package/es/i18n/resources/zhCn/common.mjs.map +1 -1
- package/es/i18n/resources/zhCn/datePicker.d.mts +13 -0
- package/es/i18n/resources/zhCn/datePicker.mjs +14 -0
- package/es/i18n/resources/zhCn/datePicker.mjs.map +1 -0
- package/es/i18n/resources/zhCn/index.d.mts +15 -11
- package/es/i18n/resources/zhCn/index.mjs +9 -1
- package/es/i18n/resources/zhCn/index.mjs.map +1 -1
- package/es/i18n/resources/zhCn/qrCode.d.mts +9 -0
- package/es/i18n/resources/zhCn/qrCode.mjs +10 -0
- package/es/i18n/resources/zhCn/qrCode.mjs.map +1 -0
- package/es/i18n/types.d.mts +14 -10
- package/es/index.d.mts +12 -11
- package/es/index.mjs +23 -23
- package/es/mdx/Cards/Card.d.mts +2 -2
- package/es/mdx/Cards/Card.mjs +1 -1
- package/es/mdx/Cards/Card.mjs.map +1 -1
- package/es/mdx/Mdx/index.mjs +1 -1
- package/es/mdx/Mdx/index.mjs.map +1 -1
- package/es/mdx/Tabs/index.d.mts +2 -2
- package/es/mdx/Tabs/index.mjs +7 -2
- package/es/mdx/Tabs/index.mjs.map +1 -1
- package/es/mdx/Tabs/style.mjs +33 -1
- package/es/mdx/Tabs/style.mjs.map +1 -1
- package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs +1 -1
- package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs.map +1 -1
- package/es/static-css/baseline.mjs +1 -4
- package/es/static-css/baseline.mjs.map +1 -1
- package/es/static-css/buildAntdStaticCss.mjs +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBar.mjs","names":["useControlledState"],"sources":["../../src/SearchBar/SearchBar.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { LucideLoader2, Search } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport useControlledState from 'use-merge-value';\n\nimport Spotlight from '@/awesome/Spotlight';\nimport
|
|
1
|
+
{"version":3,"file":"SearchBar.mjs","names":["useControlledState"],"sources":["../../src/SearchBar/SearchBar.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { LucideLoader2, Search } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport useControlledState from 'use-merge-value';\n\nimport Spotlight from '@/awesome/Spotlight';\nimport { Input } from '@/base-ui/Input';\nimport Hotkey from '@/Hotkey';\nimport Icon from '@/Icon';\n\nimport { styles } from './style';\nimport { type SearchBarProps } from './type';\n\nconst SearchBar = memo<SearchBarProps>(\n ({\n defaultValue = '',\n spotlight,\n className,\n value,\n onInputChange,\n placeholder,\n enableShortKey,\n shortKey = 'mod+k',\n onSearch,\n loading,\n style,\n onChange,\n onBlur,\n onPressEnter,\n onFocus,\n styles: { input: inputStyle, shortKey: shortKeyStyle } = {},\n classNames: { input: inputClassName, shortKey: shortKeyClassName } = {},\n ...rest\n }) => {\n const [inputValue, setInputValue] = useControlledState(defaultValue, {\n defaultValue,\n onChange: onInputChange,\n value,\n });\n\n const [showTag, setShowTag] = useState<boolean>(true);\n const inputReference: any = useRef<HTMLInputElement>(null);\n const hotkey = useMemo(\n () => (shortKey.includes('+') ? shortKey : `mod+${shortKey}`),\n [shortKey],\n );\n\n useHotkeys(\n hotkey,\n () => {\n if (!enableShortKey) return;\n inputReference.current?.focus();\n },\n {\n enableOnFormTags: true,\n enabled: !!enableShortKey && !!shortKey,\n preventDefault: true,\n },\n );\n\n return (\n <div className={cx(styles.search, className)} style={style}>\n {spotlight && <Spotlight />}\n <Input\n allowClear\n className={inputClassName}\n placeholder={placeholder ?? 'Type keywords...'}\n ref={inputReference}\n style={inputStyle}\n value={inputValue}\n prefix={\n <Icon\n className={styles.icon}\n icon={loading ? LucideLoader2 : Search}\n size=\"small\"\n spin={loading}\n style={{ marginRight: 4 }}\n />\n }\n onBlur={(e) => {\n onBlur?.(e);\n setInputValue(e.target.value);\n setShowTag(true);\n }}\n onChange={(e) => {\n setInputValue(e.target.value);\n onChange?.(e);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n setShowTag(false);\n }}\n onPressEnter={(e) => {\n onPressEnter?.(e);\n onSearch?.(inputValue);\n }}\n {...rest}\n />\n {enableShortKey && showTag && !inputValue && (\n <Hotkey\n compact\n className={cx(styles.tag, shortKeyClassName)}\n keys={hotkey}\n style={shortKeyStyle}\n />\n )}\n </div>\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\nexport default SearchBar;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,YAAY,MACf,EACC,eAAe,IACf,WACA,WACA,OACA,eACA,aACA,gBACA,WAAW,SACX,UACA,SACA,OACA,UACA,QACA,cACA,SACA,QAAQ,EAAE,OAAO,YAAY,UAAU,kBAAkB,CAAC,GAC1D,YAAY,EAAE,OAAO,gBAAgB,UAAU,sBAAsB,CAAC,GACtE,GAAG,WACC;CACJ,MAAM,CAAC,YAAY,iBAAiBA,cAAmB,cAAc;EACnE;EACA,UAAU;EACV;CACF,CAAC;CAED,MAAM,CAAC,SAAS,cAAc,SAAkB,IAAI;CACpD,MAAM,iBAAsB,OAAyB,IAAI;CACzD,MAAM,SAAS,cACN,SAAS,SAAS,GAAG,IAAI,WAAW,OAAO,YAClD,CAAC,QAAQ,CACX;CAEA,WACE,cACM;EACJ,IAAI,CAAC,gBAAgB;EACrB,eAAe,SAAS,MAAM;CAChC,GACA;EACE,kBAAkB;EAClB,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;EAC/B,gBAAgB;CAClB,CACF;CAEA,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,OAAO,QAAQ,SAAS;EAAU;EAArD,UAAA;GACG,aAAa,oBAAC,WAAD,CAAY,CAAA;GAC1B,oBAAC,OAAD;IACE,YAAA;IACA,WAAW;IACX,aAAa,eAAe;IAC5B,KAAK;IACL,OAAO;IACP,OAAO;IACP,QACE,oBAAC,MAAD;KACE,WAAW,OAAO;KAClB,MAAM,UAAU,gBAAgB;KAChC,MAAK;KACL,MAAM;KACN,OAAO,EAAE,aAAa,EAAE;IACzB,CAAA;IAEH,SAAS,MAAM;KACb,SAAS,CAAC;KACV,cAAc,EAAE,OAAO,KAAK;KAC5B,WAAW,IAAI;IACjB;IACA,WAAW,MAAM;KACf,cAAc,EAAE,OAAO,KAAK;KAC5B,WAAW,CAAC;IACd;IACA,UAAU,MAAM;KACd,UAAU,CAAC;KACX,WAAW,KAAK;IAClB;IACA,eAAe,MAAM;KACnB,eAAe,CAAC;KAChB,WAAW,UAAU;IACvB;IACA,GAAI;GACL,CAAA;GACA,kBAAkB,WAAW,CAAC,cAC7B,oBAAC,QAAD;IACE,SAAA;IACA,WAAW,GAAG,OAAO,KAAK,iBAAiB;IAC3C,MAAM;IACN,OAAO;GACR,CAAA;EAEA;;AAET,CACF;AAEA,UAAU,cAAc"}
|
package/es/SearchBar/type.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { InputProps } from "../Input/type.mjs";
|
|
2
|
-
import "../Input/index.mjs";
|
|
1
|
+
import { InputProps } from "../base-ui/Input/type.mjs";
|
|
2
|
+
import "../base-ui/Input/index.mjs";
|
|
3
3
|
import { CSSProperties } from "react";
|
|
4
4
|
//#region src/SearchBar/type.d.ts
|
|
5
5
|
interface SearchBarProps extends Omit<InputProps, 'styles' | 'classNames'> {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { variants } from "./style.mjs";
|
|
3
3
|
import { memo } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
import { Segmented } from "antd";
|
|
6
5
|
import { cx } from "antd-style";
|
|
6
|
+
import { Segmented } from "antd";
|
|
7
7
|
//#region src/Segmented/Segmented.tsx
|
|
8
8
|
/**
|
|
9
9
|
* @deprecated Use `Segmented` from `@lobehub/ui/base-ui` instead.
|
package/es/Select/Select.mjs
CHANGED
|
@@ -3,9 +3,9 @@ import Icon from "../Icon/Icon.mjs";
|
|
|
3
3
|
import { variants } from "./style.mjs";
|
|
4
4
|
import { memo } from "react";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
|
-
import { Select } from "antd";
|
|
7
6
|
import { cx, useThemeMode } from "antd-style";
|
|
8
7
|
import { ChevronDownIcon } from "lucide-react";
|
|
8
|
+
import { Select } from "antd";
|
|
9
9
|
//#region src/Select/Select.tsx
|
|
10
10
|
/**
|
|
11
11
|
* @deprecated Use `Select` from `@lobehub/ui/base-ui` instead.
|
|
@@ -3,8 +3,8 @@ import FlexBasic_default from "../Flex/FlexBasic.mjs";
|
|
|
3
3
|
import InputNumber$1 from "../Input/InputNumber.mjs";
|
|
4
4
|
import { memo } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import { Slider } from "antd";
|
|
7
6
|
import { isNull } from "es-toolkit/compat";
|
|
7
|
+
import { Slider } from "antd";
|
|
8
8
|
//#region src/SliderWithInput/SliderWithInput.tsx
|
|
9
9
|
const SliderWithInput = memo(({ step, value, onChange, max, min, defaultValue, size, controls, gap = 16, style, className, classNames, styles, disabled, unlimitedInput = false, changeOnWheel, ...rest }) => {
|
|
10
10
|
const handleOnchange = (value) => {
|
package/es/Tabs/Tabs.mjs
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
|
|
3
3
|
import { styles, variants } from "./style.mjs";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
import { Tabs } from "antd";
|
|
6
5
|
import { cx } from "antd-style";
|
|
7
6
|
import { MoreHorizontalIcon } from "lucide-react";
|
|
7
|
+
import { Tabs } from "antd";
|
|
8
8
|
//#region src/Tabs/Tabs.tsx
|
|
9
9
|
/**
|
|
10
10
|
* @deprecated Use `Tabs` from `@lobehub/ui/base-ui` instead.
|
package/es/Tag/Tag.mjs
CHANGED
|
@@ -4,8 +4,8 @@ import { colorsPreset, colorsPresetSystem, presetColors, presetSystemColors } fr
|
|
|
4
4
|
import { variants } from "./styles.mjs";
|
|
5
5
|
import { useMemo } from "react";
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
-
import { Tag } from "antd";
|
|
8
7
|
import { cssVar, cx } from "antd-style";
|
|
8
|
+
import { Tag } from "antd";
|
|
9
9
|
//#region src/Tag/Tag.tsx
|
|
10
10
|
/**
|
|
11
11
|
* @deprecated Use `Tag` from `@lobehub/ui/base-ui` instead.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { memo } from "react";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
|
-
import { ConfigProvider } from "antd";
|
|
5
4
|
import { cssVar } from "antd-style";
|
|
5
|
+
import { ConfigProvider } from "antd";
|
|
6
6
|
//#region src/ThemeProvider/ConfigProvider.tsx
|
|
7
7
|
const ConfigProvider$1 = memo(({ children }) => {
|
|
8
8
|
return /* @__PURE__ */ jsx(ConfigProvider, {
|
|
@@ -10,9 +10,9 @@ import ConfigProvider$1 from "./ConfigProvider.mjs";
|
|
|
10
10
|
import GlobalStyle, { EssentialStyle } from "./GlobalStyle/index.mjs";
|
|
11
11
|
import { memo, useCallback, useMemo, useState } from "react";
|
|
12
12
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
-
import { App } from "antd";
|
|
14
13
|
import { ThemeProvider } from "antd-style";
|
|
15
14
|
import { merge } from "es-toolkit/compat";
|
|
15
|
+
import { App } from "antd";
|
|
16
16
|
//#region src/ThemeProvider/ThemeProvider.tsx
|
|
17
17
|
const ThemeProvider$1 = memo(({ appId = LOBE_THEME_APP_ID, children, customStylish, customToken, enableCustomFonts = true, enableGlobalStyle = true, customFonts, customTheme = {}, className, style, theme: antdTheme, ...rest }) => {
|
|
18
18
|
const genCdnUrl = useCdnFn();
|
|
@@ -5,8 +5,8 @@ import DropdownMenu from "../base-ui/DropdownMenu/DropdownMenu.mjs";
|
|
|
5
5
|
import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
|
|
6
6
|
import { useMemo } from "react";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
import { Select } from "antd";
|
|
9
8
|
import { Monitor, Moon, Sun } from "lucide-react";
|
|
9
|
+
import { Select } from "antd";
|
|
10
10
|
//#region src/ThemeSwitch/ThemeSwitch.tsx
|
|
11
11
|
const DEFAULT_ICON_SET = {
|
|
12
12
|
auto: Monitor,
|
package/es/Toc/Toc.mjs
CHANGED
|
@@ -4,8 +4,8 @@ import { mapItems } from "./utils.mjs";
|
|
|
4
4
|
import TocMobile from "./TocMobile.mjs";
|
|
5
5
|
import { memo, useMemo } from "react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
-
import { Anchor } from "antd";
|
|
8
7
|
import { cx } from "antd-style";
|
|
8
|
+
import { Anchor } from "antd";
|
|
9
9
|
//#region src/Toc/Toc.tsx
|
|
10
10
|
const Toc = memo(({ activeKey, items, getContainer, isMobile, headerHeight = 64, tocWidth = 176 }) => {
|
|
11
11
|
const cssVariables = useMemo(() => ({
|
package/es/Toc/TocMobile.mjs
CHANGED
|
@@ -4,9 +4,9 @@ import { styles } from "./style.mjs";
|
|
|
4
4
|
import { mapItems } from "./utils.mjs";
|
|
5
5
|
import { memo, useMemo } from "react";
|
|
6
6
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
-
import { Anchor, Collapse, ConfigProvider } from "antd";
|
|
8
7
|
import useMergeState from "use-merge-value";
|
|
9
8
|
import { PanelTopClose, PanelTopOpen } from "lucide-react";
|
|
9
|
+
import { Anchor, Collapse, ConfigProvider } from "antd";
|
|
10
10
|
//#region src/Toc/TocMobile.tsx
|
|
11
11
|
const TocMobile = memo(({ items, activeKey, onChange, getContainer, headerHeight = 64, tocWidth = 176 }) => {
|
|
12
12
|
const [activeLink, setActiveLink] = useMergeState("", {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import Icon from "../../Icon/Icon.mjs";
|
|
3
|
+
import Segmented from "../../base-ui/Segmented/Segmented.mjs";
|
|
3
4
|
import Snippet from "../../Snippet/Snippet.mjs";
|
|
4
5
|
import { DEFAULT_SKILL_AGENTS } from "./agents.mjs";
|
|
5
6
|
import { renderLandingIcon } from "../landingIcon.mjs";
|
|
6
|
-
import Segmented from "../../base-ui/Segmented/Segmented.mjs";
|
|
7
7
|
import { styles } from "./style.mjs";
|
|
8
8
|
import { memo, useState } from "react";
|
|
9
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
package/es/awesome/Hero/Hero.mjs
CHANGED
|
@@ -9,8 +9,8 @@ import GithubIcon from "../../icons/lucideExtra/GithubIcon.mjs";
|
|
|
9
9
|
import { styles } from "./style.mjs";
|
|
10
10
|
import { memo, useCallback } from "react";
|
|
11
11
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
-
import { ConfigProvider } from "antd";
|
|
13
12
|
import { useResponsive } from "antd-style";
|
|
13
|
+
import { ConfigProvider } from "antd";
|
|
14
14
|
//#region src/awesome/Hero/Hero.tsx
|
|
15
15
|
const Hero = memo(({ title, description, actions, Link }) => {
|
|
16
16
|
const { mobile } = useResponsive();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { LandingActions } from "../landingActions.mjs";
|
|
3
2
|
import Tag from "../../base-ui/Tag/Tag.mjs";
|
|
3
|
+
import { LandingActions } from "../landingActions.mjs";
|
|
4
4
|
import { styles } from "./style.mjs";
|
|
5
5
|
import { memo } from "react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEventCallback } from "../../hooks/useEventCallback.mjs";
|
|
3
|
+
import { styles } from "./style.mjs";
|
|
4
|
+
import { memo, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { cx } from "antd-style";
|
|
7
|
+
import useMergeState from "use-merge-value";
|
|
8
|
+
import { useMergeRefs } from "react-merge-refs";
|
|
9
|
+
//#region src/base-ui/Anchor/Anchor.tsx
|
|
10
|
+
const SCROLL_LOCK_FALLBACK_MS = 1e3;
|
|
11
|
+
const flatten = (items) => items.flatMap((item) => [item, ...flatten(item.children ?? [])]);
|
|
12
|
+
const getTarget = (href) => {
|
|
13
|
+
const hash = href.split("#")[1];
|
|
14
|
+
if (!hash) return null;
|
|
15
|
+
try {
|
|
16
|
+
return document.getElementById(decodeURIComponent(hash));
|
|
17
|
+
} catch {
|
|
18
|
+
return document.getElementById(hash);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const isWindow = (container) => container === window;
|
|
22
|
+
const getRelativeTop = (element, container) => element.getBoundingClientRect().top - (isWindow(container) ? 0 : container.getBoundingClientRect().top);
|
|
23
|
+
const getScrollTop = (container) => isWindow(container) ? window.scrollY : container.scrollTop;
|
|
24
|
+
const getActiveKey = (items, container, offset) => {
|
|
25
|
+
let activeKey = null;
|
|
26
|
+
let activeTop = -Infinity;
|
|
27
|
+
for (const item of flatten(items)) {
|
|
28
|
+
const target = getTarget(item.href);
|
|
29
|
+
if (!target) continue;
|
|
30
|
+
const top = getRelativeTop(target, container);
|
|
31
|
+
if (top <= offset + 1 && top >= activeTop) {
|
|
32
|
+
activeKey = item.key;
|
|
33
|
+
activeTop = top;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return activeKey;
|
|
37
|
+
};
|
|
38
|
+
const Anchor = memo(({ activeKey, className, getContainer, items, offset = 0, onChange, onClick, ref, ...rest }) => {
|
|
39
|
+
const [mergedActiveKey, setMergedActiveKey] = useMergeState(null, {
|
|
40
|
+
onChange,
|
|
41
|
+
value: activeKey
|
|
42
|
+
});
|
|
43
|
+
const scrollLockRef = useRef(false);
|
|
44
|
+
const navRef = useRef(null);
|
|
45
|
+
const mergedRef = useMergeRefs([ref, navRef]);
|
|
46
|
+
const [marker, setMarker] = useState();
|
|
47
|
+
const lockTimerRef = useRef(void 0);
|
|
48
|
+
const resolveContainer = useEventCallback(() => getContainer?.() ?? window);
|
|
49
|
+
const setActive = useEventCallback(setMergedActiveKey);
|
|
50
|
+
const spy = useEventCallback(() => {
|
|
51
|
+
if (scrollLockRef.current) return;
|
|
52
|
+
setActive(getActiveKey(items, resolveContainer(), offset));
|
|
53
|
+
});
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
const container = resolveContainer();
|
|
56
|
+
let frame = 0;
|
|
57
|
+
const handleScroll = () => {
|
|
58
|
+
cancelAnimationFrame(frame);
|
|
59
|
+
frame = requestAnimationFrame(spy);
|
|
60
|
+
};
|
|
61
|
+
spy();
|
|
62
|
+
container.addEventListener("scroll", handleScroll, { passive: true });
|
|
63
|
+
return () => {
|
|
64
|
+
cancelAnimationFrame(frame);
|
|
65
|
+
container.removeEventListener("scroll", handleScroll);
|
|
66
|
+
};
|
|
67
|
+
}, [
|
|
68
|
+
items,
|
|
69
|
+
offset,
|
|
70
|
+
resolveContainer,
|
|
71
|
+
spy
|
|
72
|
+
]);
|
|
73
|
+
useEffect(() => () => clearTimeout(lockTimerRef.current), []);
|
|
74
|
+
useLayoutEffect(() => {
|
|
75
|
+
const nav = navRef.current;
|
|
76
|
+
if (!nav) return;
|
|
77
|
+
const place = () => {
|
|
78
|
+
const link = [...nav.querySelectorAll("a[data-key]")].find((element) => element.dataset.key === mergedActiveKey);
|
|
79
|
+
setMarker(link ? {
|
|
80
|
+
height: link.offsetHeight,
|
|
81
|
+
insetBlockStart: link.offsetTop
|
|
82
|
+
} : void 0);
|
|
83
|
+
};
|
|
84
|
+
place();
|
|
85
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
86
|
+
const observer = new ResizeObserver(place);
|
|
87
|
+
observer.observe(nav);
|
|
88
|
+
return () => observer.disconnect();
|
|
89
|
+
}, [items, mergedActiveKey]);
|
|
90
|
+
const handleClick = (event, item) => {
|
|
91
|
+
onClick?.(event, item);
|
|
92
|
+
if (event.defaultPrevented || event.button !== 0) return;
|
|
93
|
+
if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
|
|
94
|
+
const target = getTarget(item.href);
|
|
95
|
+
if (!target) return;
|
|
96
|
+
event.preventDefault();
|
|
97
|
+
const container = resolveContainer();
|
|
98
|
+
const top = getRelativeTop(target, container) + getScrollTop(container) - offset;
|
|
99
|
+
const reduceMotion = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
100
|
+
const release = () => {
|
|
101
|
+
scrollLockRef.current = false;
|
|
102
|
+
};
|
|
103
|
+
scrollLockRef.current = true;
|
|
104
|
+
setActive(item.key);
|
|
105
|
+
clearTimeout(lockTimerRef.current);
|
|
106
|
+
lockTimerRef.current = setTimeout(release, SCROLL_LOCK_FALLBACK_MS);
|
|
107
|
+
container.addEventListener("scrollend", release, { once: true });
|
|
108
|
+
container.scrollTo({
|
|
109
|
+
behavior: reduceMotion ? "auto" : "smooth",
|
|
110
|
+
top
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
const renderList = (list) => /* @__PURE__ */ jsx("ul", {
|
|
114
|
+
className: styles.list,
|
|
115
|
+
children: list.map((item) => /* @__PURE__ */ jsxs("li", { children: [/* @__PURE__ */ jsx("a", {
|
|
116
|
+
"aria-current": item.key === mergedActiveKey ? "location" : void 0,
|
|
117
|
+
className: styles.link,
|
|
118
|
+
"data-key": item.key,
|
|
119
|
+
href: item.href,
|
|
120
|
+
title: typeof item.title === "string" ? item.title : void 0,
|
|
121
|
+
onClick: (event) => handleClick(event, item),
|
|
122
|
+
children: item.title
|
|
123
|
+
}), item.children && item.children.length > 0 && renderList(item.children)] }, item.key))
|
|
124
|
+
});
|
|
125
|
+
return /* @__PURE__ */ jsxs("nav", {
|
|
126
|
+
className: cx(styles.root, className),
|
|
127
|
+
ref: mergedRef,
|
|
128
|
+
...rest,
|
|
129
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
130
|
+
"aria-hidden": true,
|
|
131
|
+
className: styles.marker,
|
|
132
|
+
hidden: !marker,
|
|
133
|
+
style: marker
|
|
134
|
+
}), renderList(items)]
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
Anchor.displayName = "Anchor";
|
|
138
|
+
//#endregion
|
|
139
|
+
export { Anchor as default };
|
|
140
|
+
|
|
141
|
+
//# sourceMappingURL=Anchor.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Anchor.mjs","names":["useControlledState"],"sources":["../../../src/base-ui/Anchor/Anchor.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport {\n type CSSProperties,\n memo,\n type MouseEvent,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useMergeRefs } from 'react-merge-refs';\nimport useControlledState from 'use-merge-value';\n\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport { styles } from './style';\nimport type { AnchorItem, AnchorProps } from './type';\n\ntype ScrollContainer = HTMLElement | Window;\n\nconst SCROLL_LOCK_FALLBACK_MS = 1000;\n\nconst flatten = (items: AnchorItem[]): AnchorItem[] =>\n items.flatMap((item) => [item, ...flatten(item.children ?? [])]);\n\nconst getTarget = (href: string) => {\n const hash = href.split('#')[1];\n if (!hash) return null;\n try {\n return document.getElementById(decodeURIComponent(hash));\n } catch {\n return document.getElementById(hash);\n }\n};\n\nconst isWindow = (container: ScrollContainer): container is Window => container === window;\n\nconst getRelativeTop = (element: HTMLElement, container: ScrollContainer) =>\n element.getBoundingClientRect().top -\n (isWindow(container) ? 0 : container.getBoundingClientRect().top);\n\nconst getScrollTop = (container: ScrollContainer) =>\n isWindow(container) ? window.scrollY : container.scrollTop;\n\nconst getActiveKey = (\n items: AnchorItem[],\n container: ScrollContainer,\n offset: number,\n): string | null => {\n let activeKey: string | null = null;\n let activeTop = -Infinity;\n for (const item of flatten(items)) {\n const target = getTarget(item.href);\n if (!target) continue;\n const top = getRelativeTop(target, container);\n if (top <= offset + 1 && top >= activeTop) {\n activeKey = item.key;\n activeTop = top;\n }\n }\n return activeKey;\n};\n\nconst Anchor = memo<AnchorProps>(\n ({ activeKey, className, getContainer, items, offset = 0, onChange, onClick, ref, ...rest }) => {\n const [mergedActiveKey, setMergedActiveKey] = useControlledState<string | null>(null, {\n onChange,\n value: activeKey,\n });\n const scrollLockRef = useRef(false);\n const navRef = useRef<HTMLElement>(null);\n const mergedRef = useMergeRefs([ref, navRef]);\n const [marker, setMarker] = useState<CSSProperties>();\n const lockTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const resolveContainer = useEventCallback((): ScrollContainer => getContainer?.() ?? window);\n const setActive = useEventCallback(setMergedActiveKey);\n const spy = useEventCallback(() => {\n if (scrollLockRef.current) return;\n setActive(getActiveKey(items, resolveContainer(), offset));\n });\n\n useEffect(() => {\n const container = resolveContainer();\n let frame = 0;\n const handleScroll = () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(spy);\n };\n spy();\n container.addEventListener('scroll', handleScroll, { passive: true });\n return () => {\n cancelAnimationFrame(frame);\n container.removeEventListener('scroll', handleScroll);\n };\n }, [items, offset, resolveContainer, spy]);\n\n useEffect(() => () => clearTimeout(lockTimerRef.current), []);\n\n useLayoutEffect(() => {\n const nav = navRef.current;\n if (!nav) return;\n const place = () => {\n const link = [...nav.querySelectorAll<HTMLElement>('a[data-key]')].find(\n (element) => element.dataset.key === mergedActiveKey,\n );\n setMarker(\n link ? { height: link.offsetHeight, insetBlockStart: link.offsetTop } : undefined,\n );\n };\n place();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(place);\n observer.observe(nav);\n return () => observer.disconnect();\n }, [items, mergedActiveKey]);\n\n const handleClick = (event: MouseEvent<HTMLAnchorElement>, item: AnchorItem) => {\n onClick?.(event, item);\n if (event.defaultPrevented || event.button !== 0) return;\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\n const target = getTarget(item.href);\n if (!target) return;\n event.preventDefault();\n\n const container = resolveContainer();\n const top = getRelativeTop(target, container) + getScrollTop(container) - offset;\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n\n // Smooth scrolling may never bring a heading near the page end up to the offset line, so the\n // clicked item is pinned as active until the scroll settles.\n const release = () => {\n scrollLockRef.current = false;\n };\n scrollLockRef.current = true;\n setActive(item.key);\n clearTimeout(lockTimerRef.current);\n lockTimerRef.current = setTimeout(release, SCROLL_LOCK_FALLBACK_MS);\n container.addEventListener('scrollend', release, { once: true });\n container.scrollTo({ behavior: reduceMotion ? 'auto' : 'smooth', top });\n };\n\n const renderList = (list: AnchorItem[]) => (\n <ul className={styles.list}>\n {list.map((item) => (\n <li key={item.key}>\n <a\n aria-current={item.key === mergedActiveKey ? 'location' : undefined}\n className={styles.link}\n data-key={item.key}\n href={item.href}\n title={typeof item.title === 'string' ? item.title : undefined}\n onClick={(event) => handleClick(event, item)}\n >\n {item.title}\n </a>\n {item.children && item.children.length > 0 && renderList(item.children)}\n </li>\n ))}\n </ul>\n );\n\n return (\n <nav className={cx(styles.root, className)} ref={mergedRef} {...rest}>\n <span aria-hidden className={styles.marker} hidden={!marker} style={marker} />\n {renderList(items)}\n </nav>\n );\n },\n);\n\nAnchor.displayName = 'Anchor';\n\nexport default Anchor;\n"],"mappings":";;;;;;;;;AAsBA,MAAM,0BAA0B;AAEhC,MAAM,WAAW,UACf,MAAM,SAAS,SAAS,CAAC,MAAM,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAEjE,MAAM,aAAa,SAAiB;CAClC,MAAM,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC;CAC7B,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI;EACF,OAAO,SAAS,eAAe,mBAAmB,IAAI,CAAC;CACzD,QAAQ;EACN,OAAO,SAAS,eAAe,IAAI;CACrC;AACF;AAEA,MAAM,YAAY,cAAoD,cAAc;AAEpF,MAAM,kBAAkB,SAAsB,cAC5C,QAAQ,sBAAsB,CAAC,CAAC,OAC/B,SAAS,SAAS,IAAI,IAAI,UAAU,sBAAsB,CAAC,CAAC;AAE/D,MAAM,gBAAgB,cACpB,SAAS,SAAS,IAAI,OAAO,UAAU,UAAU;AAEnD,MAAM,gBACJ,OACA,WACA,WACkB;CAClB,IAAI,YAA2B;CAC/B,IAAI,YAAY;CAChB,KAAK,MAAM,QAAQ,QAAQ,KAAK,GAAG;EACjC,MAAM,SAAS,UAAU,KAAK,IAAI;EAClC,IAAI,CAAC,QAAQ;EACb,MAAM,MAAM,eAAe,QAAQ,SAAS;EAC5C,IAAI,OAAO,SAAS,KAAK,OAAO,WAAW;GACzC,YAAY,KAAK;GACjB,YAAY;EACd;CACF;CACA,OAAO;AACT;AAEA,MAAM,SAAS,MACZ,EAAE,WAAW,WAAW,cAAc,OAAO,SAAS,GAAG,UAAU,SAAS,KAAK,GAAG,WAAW;CAC9F,MAAM,CAAC,iBAAiB,sBAAsBA,cAAkC,MAAM;EACpF;EACA,OAAO;CACT,CAAC;CACD,MAAM,gBAAgB,OAAO,KAAK;CAClC,MAAM,SAAS,OAAoB,IAAI;CACvC,MAAM,YAAY,aAAa,CAAC,KAAK,MAAM,CAAC;CAC5C,MAAM,CAAC,QAAQ,aAAa,SAAwB;CACpD,MAAM,eAAe,OAAsC,KAAA,CAAS;CAEpE,MAAM,mBAAmB,uBAAwC,eAAe,KAAK,MAAM;CAC3F,MAAM,YAAY,iBAAiB,kBAAkB;CACrD,MAAM,MAAM,uBAAuB;EACjC,IAAI,cAAc,SAAS;EAC3B,UAAU,aAAa,OAAO,iBAAiB,GAAG,MAAM,CAAC;CAC3D,CAAC;CAED,gBAAgB;EACd,MAAM,YAAY,iBAAiB;EACnC,IAAI,QAAQ;EACZ,MAAM,qBAAqB;GACzB,qBAAqB,KAAK;GAC1B,QAAQ,sBAAsB,GAAG;EACnC;EACA,IAAI;EACJ,UAAU,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;EACpE,aAAa;GACX,qBAAqB,KAAK;GAC1B,UAAU,oBAAoB,UAAU,YAAY;EACtD;CACF,GAAG;EAAC;EAAO;EAAQ;EAAkB;CAAG,CAAC;CAEzC,sBAAsB,aAAa,aAAa,OAAO,GAAG,CAAC,CAAC;CAE5D,sBAAsB;EACpB,MAAM,MAAM,OAAO;EACnB,IAAI,CAAC,KAAK;EACV,MAAM,cAAc;GAClB,MAAM,OAAO,CAAC,GAAG,IAAI,iBAA8B,aAAa,CAAC,CAAC,CAAC,MAChE,YAAY,QAAQ,QAAQ,QAAQ,eACvC;GACA,UACE,OAAO;IAAE,QAAQ,KAAK;IAAc,iBAAiB,KAAK;GAAU,IAAI,KAAA,CAC1E;EACF;EACA,MAAM;EACN,IAAI,OAAO,mBAAmB,aAAa;EAC3C,MAAM,WAAW,IAAI,eAAe,KAAK;EACzC,SAAS,QAAQ,GAAG;EACpB,aAAa,SAAS,WAAW;CACnC,GAAG,CAAC,OAAO,eAAe,CAAC;CAE3B,MAAM,eAAe,OAAsC,SAAqB;EAC9E,UAAU,OAAO,IAAI;EACrB,IAAI,MAAM,oBAAoB,MAAM,WAAW,GAAG;EAClD,IAAI,MAAM,WAAW,MAAM,WAAW,MAAM,YAAY,MAAM,QAAQ;EAEtE,MAAM,SAAS,UAAU,KAAK,IAAI;EAClC,IAAI,CAAC,QAAQ;EACb,MAAM,eAAe;EAErB,MAAM,YAAY,iBAAiB;EACnC,MAAM,MAAM,eAAe,QAAQ,SAAS,IAAI,aAAa,SAAS,IAAI;EAC1E,MAAM,eAAe,OAAO,aAAa,kCAAkC,CAAC,CAAC;EAI7E,MAAM,gBAAgB;GACpB,cAAc,UAAU;EAC1B;EACA,cAAc,UAAU;EACxB,UAAU,KAAK,GAAG;EAClB,aAAa,aAAa,OAAO;EACjC,aAAa,UAAU,WAAW,SAAS,uBAAuB;EAClE,UAAU,iBAAiB,aAAa,SAAS,EAAE,MAAM,KAAK,CAAC;EAC/D,UAAU,SAAS;GAAE,UAAU,eAAe,SAAS;GAAU;EAAI,CAAC;CACxE;CAEA,MAAM,cAAc,SAClB,oBAAC,MAAD;EAAI,WAAW,OAAO;EACnB,UAAA,KAAK,KAAK,SACT,qBAAC,MAAD,EAAA,UAAA,CACE,oBAAC,KAAD;GACE,gBAAc,KAAK,QAAQ,kBAAkB,aAAa,KAAA;GAC1D,WAAW,OAAO;GAClB,YAAU,KAAK;GACf,MAAM,KAAK;GACX,OAAO,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,KAAA;GACrD,UAAU,UAAU,YAAY,OAAO,IAAI;GAE1C,UAAA,KAAK;EACL,CAAA,GACF,KAAK,YAAY,KAAK,SAAS,SAAS,KAAK,WAAW,KAAK,QAAQ,CACpE,EAAA,GAZK,KAAK,GAYV,CACL;CACC,CAAA;CAGN,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,OAAO,MAAM,SAAS;EAAG,KAAK;EAAW,GAAI;EAAhE,UAAA,CACE,oBAAC,QAAD;GAAM,eAAA;GAAY,WAAW,OAAO;GAAQ,QAAQ,CAAC;GAAQ,OAAO;EAAS,CAAA,GAC5E,WAAW,KAAK,CACd;;AAET,CACF;AAEA,OAAO,cAAc"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { createStaticStyles } from "antd-style";
|
|
2
|
+
//#region src/base-ui/Anchor/style.ts
|
|
3
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
4
|
+
link: css`
|
|
5
|
+
overflow: hidden;
|
|
6
|
+
display: -webkit-box;
|
|
7
|
+
-webkit-box-orient: vertical;
|
|
8
|
+
-webkit-line-clamp: 2;
|
|
9
|
+
|
|
10
|
+
font-size: 14px;
|
|
11
|
+
line-height: 1.4;
|
|
12
|
+
color: ${cssVar.colorTextSecondary};
|
|
13
|
+
overflow-wrap: anywhere;
|
|
14
|
+
|
|
15
|
+
transition: color 0.15s ease;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
color: ${cssVar.colorText};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&[aria-current='location'] {
|
|
22
|
+
font-weight: 500;
|
|
23
|
+
color: ${cssVar.colorText};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&:focus-visible {
|
|
27
|
+
border-radius: 4px;
|
|
28
|
+
outline: 2px solid ${cssVar.colorText};
|
|
29
|
+
outline-offset: 2px;
|
|
30
|
+
}
|
|
31
|
+
`,
|
|
32
|
+
list: css`
|
|
33
|
+
display: flex;
|
|
34
|
+
flex-direction: column;
|
|
35
|
+
gap: 8px;
|
|
36
|
+
|
|
37
|
+
margin: 0;
|
|
38
|
+
padding-block: 0;
|
|
39
|
+
padding-inline: 14px 0;
|
|
40
|
+
border-inline-start: 1px solid ${cssVar.colorBorderSecondary};
|
|
41
|
+
|
|
42
|
+
list-style: none;
|
|
43
|
+
|
|
44
|
+
& & {
|
|
45
|
+
margin-block-start: 8px;
|
|
46
|
+
padding-inline-start: 12px;
|
|
47
|
+
border-inline-start: none;
|
|
48
|
+
|
|
49
|
+
a {
|
|
50
|
+
font-size: 13px;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
`,
|
|
54
|
+
marker: css`
|
|
55
|
+
pointer-events: none;
|
|
56
|
+
|
|
57
|
+
position: absolute;
|
|
58
|
+
inset-inline-start: -1px;
|
|
59
|
+
|
|
60
|
+
width: 2px;
|
|
61
|
+
border-radius: 2px;
|
|
62
|
+
|
|
63
|
+
background: ${cssVar.colorText};
|
|
64
|
+
|
|
65
|
+
transition:
|
|
66
|
+
inset-block-start 0.2s ${cssVar.motionEaseOut},
|
|
67
|
+
height 0.2s ${cssVar.motionEaseOut};
|
|
68
|
+
|
|
69
|
+
@media (prefers-reduced-motion: reduce) {
|
|
70
|
+
transition: none;
|
|
71
|
+
}
|
|
72
|
+
`,
|
|
73
|
+
root: css`
|
|
74
|
+
position: relative;
|
|
75
|
+
`
|
|
76
|
+
}));
|
|
77
|
+
//#endregion
|
|
78
|
+
export { styles };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=style.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/base-ui/Anchor/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n link: css`\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n\n font-size: 14px;\n line-height: 1.4;\n color: ${cssVar.colorTextSecondary};\n overflow-wrap: anywhere;\n\n transition: color 0.15s ease;\n\n &:hover {\n color: ${cssVar.colorText};\n }\n\n &[aria-current='location'] {\n font-weight: 500;\n color: ${cssVar.colorText};\n }\n\n &:focus-visible {\n border-radius: 4px;\n outline: 2px solid ${cssVar.colorText};\n outline-offset: 2px;\n }\n `,\n list: css`\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n margin: 0;\n padding-block: 0;\n padding-inline: 14px 0;\n border-inline-start: 1px solid ${cssVar.colorBorderSecondary};\n\n list-style: none;\n\n & & {\n margin-block-start: 8px;\n padding-inline-start: 12px;\n border-inline-start: none;\n\n a {\n font-size: 13px;\n }\n }\n `,\n marker: css`\n pointer-events: none;\n\n position: absolute;\n inset-inline-start: -1px;\n\n width: 2px;\n border-radius: 2px;\n\n background: ${cssVar.colorText};\n\n transition:\n inset-block-start 0.2s ${cssVar.motionEaseOut},\n height 0.2s ${cssVar.motionEaseOut};\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n `,\n root: css`\n position: relative;\n `,\n}));\n"],"mappings":";;AAEA,MAAa,SAAS,oBAAoB,EAAE,KAAK,cAAc;CAC7D,MAAM,GAAG;;;;;;;;aAQE,OAAO,mBAAmB;;;;;;eAMxB,OAAO,UAAU;;;;;eAKjB,OAAO,UAAU;;;;;2BAKL,OAAO,UAAU;;;;CAI1C,MAAM,GAAG;;;;;;;;qCAQ0B,OAAO,qBAAqB;;;;;;;;;;;;;;CAc/D,QAAQ,GAAG;;;;;;;;;kBASK,OAAO,UAAU;;;+BAGJ,OAAO,cAAc;oBAChC,OAAO,cAAc;;;;;;CAMvC,MAAM,GAAG;;;AAGX,EAAE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ComponentProps, MouseEvent, ReactNode, Ref } from "react";
|
|
2
|
+
//#region src/base-ui/Anchor/type.d.ts
|
|
3
|
+
interface AnchorItem {
|
|
4
|
+
children?: AnchorItem[];
|
|
5
|
+
href: string;
|
|
6
|
+
key: string;
|
|
7
|
+
title: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
interface AnchorProps extends Omit<ComponentProps<'nav'>, 'children' | 'onChange' | 'onClick'> {
|
|
10
|
+
activeKey?: string | null;
|
|
11
|
+
getContainer?: () => HTMLElement | Window | null | undefined;
|
|
12
|
+
items: AnchorItem[];
|
|
13
|
+
offset?: number;
|
|
14
|
+
onChange?: (key: string | null) => void;
|
|
15
|
+
onClick?: (event: MouseEvent<HTMLAnchorElement>, item: AnchorItem) => void;
|
|
16
|
+
ref?: Ref<HTMLElement>;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { AnchorItem, AnchorProps };
|
|
20
|
+
//# sourceMappingURL=type.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoComplete.mjs","names":["inputVariants","inputStyles","styles"],"sources":["../../../src/base-ui/AutoComplete/AutoComplete.tsx"],"sourcesContent":["'use client';\n\nimport { Autocomplete } from '@base-ui/react/autocomplete';\nimport { cx, useThemeMode } from 'antd-style';\nimport { XIcon } from 'lucide-react';\nimport { memo, useMemo, useRef } from 'react';\n\nimport { getFloatingCollisionPadding } from '@/base-ui/floating';\nimport { inputStyles, inputVariants } from '@/base-ui/Input';\nimport { useLayerZIndex } from '@/base-ui/zIndex';\nimport Icon from '@/Icon';\nimport { useAppElement } from '@/ThemeProvider';\n\nimport { styles } from './style';\nimport type { AutoCompleteOption, AutoCompleteProps } from './type';\n\nconst AutoComplete = memo<AutoCompleteProps>(\n ({\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n size = 'middle',\n options = [],\n onChange,\n onSearch,\n allowClear,\n disabled,\n placeholder,\n prefix,\n suffix,\n emptyText,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const appElement = useAppElement();\n const anchorRef = useRef<HTMLDivElement>(null);\n const { ref: positionerRef, zIndex } = useLayerZIndex<HTMLDivElement>('floating');\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n\n const items = useMemo<AutoCompleteOption[]>(\n () => options.map((option) => (typeof option === 'string' ? { value: option } : option)),\n [options],\n );\n\n return (\n <Autocomplete.Root\n openOnInputClick\n disabled={disabled}\n itemToStringValue={(item) => (item as AutoCompleteOption).value}\n items={items}\n onValueChange={(value) => {\n onChange?.(value);\n onSearch?.(value);\n }}\n {...rest}\n >\n <div\n className={cx(inputVariants({ shadow, size, variant: mergedVariant }), className)}\n data-disabled={disabled ? '' : undefined}\n ref={anchorRef}\n style={style}\n >\n {prefix && <span className={inputStyles.slot}>{prefix}</span>}\n <Autocomplete.Input\n className={cx(inputStyles.input, classNames?.input)}\n placeholder={placeholder}\n style={customStyles?.input}\n />\n {allowClear && (\n <Autocomplete.Clear aria-label={'Clear'} className={styles.clear}>\n <Icon icon={XIcon} size={14} />\n </Autocomplete.Clear>\n )}\n {suffix && <span className={inputStyles.slot}>{suffix}</span>}\n </div>\n <Autocomplete.Portal container={appElement ?? undefined}>\n <Autocomplete.Positioner\n anchor={anchorRef}\n className={styles.positioner}\n collisionPadding={getFloatingCollisionPadding()}\n ref={positionerRef}\n sideOffset={4}\n style={zIndex === undefined ? undefined : { zIndex }}\n >\n <Autocomplete.Popup\n className={cx(styles.popup, classNames?.popup)}\n style={customStyles?.popup}\n >\n {emptyText && (\n <Autocomplete.Empty className={styles.empty}>{emptyText}</Autocomplete.Empty>\n )}\n <Autocomplete.List className={styles.list}>\n {(item: AutoCompleteOption) => (\n <Autocomplete.Item\n className={cx(styles.item, classNames?.item)}\n disabled={item.disabled}\n key={item.value}\n style={customStyles?.item}\n value={item}\n >\n {item.label ?? item.value}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Popup>\n </Autocomplete.Positioner>\n </Autocomplete.Portal>\n </Autocomplete.Root>\n );\n },\n);\n\nAutoComplete.displayName = 'AutoComplete';\n\nexport default AutoComplete;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,eAAe,MAClB,EACC,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,OAAO,UACP,UAAU,CAAC,GACX,UACA,UACA,YACA,UACA,aACA,QACA,QACA,WACA,GAAG,WACC;CACJ,MAAM,EAAE,eAAe,aAAa;CACpC,MAAM,aAAa,cAAc;CACjC,MAAM,YAAY,OAAuB,IAAI;CAC7C,MAAM,EAAE,KAAK,eAAe,WAAW,eAA+B,UAAU;CAChF,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAE1D,MAAM,QAAQ,cACN,QAAQ,KAAK,WAAY,OAAO,WAAW,WAAW,EAAE,OAAO,OAAO,IAAI,MAAO,GACvF,CAAC,OAAO,CACV;CAEA,OACE,qBAAC,aAAa,MAAd;EACE,kBAAA;EACU;EACV,oBAAoB,SAAU,KAA4B;EACnD;EACP,gBAAgB,UAAU;GACxB,WAAW,KAAK;GAChB,WAAW,KAAK;EAClB;EACA,GAAI;EATN,UAAA,CAWE,qBAAC,OAAD;GACE,WAAW,GAAGA,aAAc;IAAE;IAAQ;IAAM,SAAS;GAAc,CAAC,GAAG,SAAS;GAChF,iBAAe,WAAW,KAAK,KAAA;GAC/B,KAAK;GACE;GAJT,UAAA;IAMG,UAAU,oBAAC,QAAD;KAAM,WAAWC,OAAY;KAAO,UAAA;IAAa,CAAA;IAC5D,oBAAC,aAAa,OAAd;KACE,WAAW,GAAGA,OAAY,OAAO,YAAY,KAAK;KACrC;KACb,OAAO,cAAc;IACtB,CAAA;IACA,cACC,oBAAC,aAAa,OAAd;KAAoB,cAAY;KAAS,WAAWC,SAAO;KACzD,UAAA,oBAAC,MAAD;MAAM,MAAM;MAAO,MAAM;KAAK,CAAA;IACZ,CAAA;IAErB,UAAU,oBAAC,QAAD;KAAM,WAAWD,OAAY;KAAO,UAAA;IAAa,CAAA;GACzD;EACL,CAAA,GAAA,oBAAC,aAAa,QAAd;GAAqB,WAAW,cAAc,KAAA;GAC5C,UAAA,oBAAC,aAAa,YAAd;IACE,QAAQ;IACR,WAAWC,SAAO;IAClB,kBAAkB,4BAA4B;IAC9C,KAAK;IACL,YAAY;IACZ,OAAO,WAAW,KAAA,IAAY,KAAA,IAAY,EAAE,OAAO;IAEnD,UAAA,qBAAC,aAAa,OAAd;KACE,WAAW,GAAGA,SAAO,OAAO,YAAY,KAAK;KAC7C,OAAO,cAAc;KAFvB,UAAA,CAIG,aACC,oBAAC,aAAa,OAAd;MAAoB,WAAWA,SAAO;MAAQ,UAAA;KAA8B,CAAA,GAE9E,oBAAC,aAAa,MAAd;MAAmB,WAAWA,SAAO;MACjC,WAAA,SACA,oBAAC,aAAa,MAAd;OACE,WAAW,GAAGA,SAAO,MAAM,YAAY,IAAI;OAC3C,UAAU,KAAK;OAEf,OAAO,cAAc;OACrB,OAAO;OAEN,UAAA,KAAK,SAAS,KAAK;MACH,GALZ,KAAK,KAKO;KAEJ,CAAA,CACD;;GACG,CAAA;EACN,CAAA,CACJ;;AAEvB,CACF;AAEA,aAAa,cAAc"}
|
|
1
|
+
{"version":3,"file":"AutoComplete.mjs","names":["inputVariants","inputStyles","styles"],"sources":["../../../src/base-ui/AutoComplete/AutoComplete.tsx"],"sourcesContent":["'use client';\n\nimport { Autocomplete } from '@base-ui/react/autocomplete';\nimport { cx, useThemeMode } from 'antd-style';\nimport { XIcon } from 'lucide-react';\nimport { memo, useMemo, useRef } from 'react';\n\nimport { getFloatingCollisionPadding } from '@/base-ui/floating';\nimport { inputStyles, inputVariants } from '@/base-ui/Input';\nimport { useLayerZIndex } from '@/base-ui/zIndex';\nimport Icon from '@/Icon';\nimport { useAppElement } from '@/ThemeProvider/AppElementContext';\n\nimport { styles } from './style';\nimport type { AutoCompleteOption, AutoCompleteProps } from './type';\n\nconst AutoComplete = memo<AutoCompleteProps>(\n ({\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n size = 'middle',\n options = [],\n onChange,\n onSearch,\n allowClear,\n disabled,\n placeholder,\n prefix,\n suffix,\n emptyText,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const appElement = useAppElement();\n const anchorRef = useRef<HTMLDivElement>(null);\n const { ref: positionerRef, zIndex } = useLayerZIndex<HTMLDivElement>('floating');\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n\n const items = useMemo<AutoCompleteOption[]>(\n () => options.map((option) => (typeof option === 'string' ? { value: option } : option)),\n [options],\n );\n\n return (\n <Autocomplete.Root\n openOnInputClick\n disabled={disabled}\n itemToStringValue={(item) => (item as AutoCompleteOption).value}\n items={items}\n onValueChange={(value) => {\n onChange?.(value);\n onSearch?.(value);\n }}\n {...rest}\n >\n <div\n className={cx(inputVariants({ shadow, size, variant: mergedVariant }), className)}\n data-disabled={disabled ? '' : undefined}\n ref={anchorRef}\n style={style}\n >\n {prefix && <span className={inputStyles.slot}>{prefix}</span>}\n <Autocomplete.Input\n className={cx(inputStyles.input, classNames?.input)}\n placeholder={placeholder}\n style={customStyles?.input}\n />\n {allowClear && (\n <Autocomplete.Clear aria-label={'Clear'} className={styles.clear}>\n <Icon icon={XIcon} size={14} />\n </Autocomplete.Clear>\n )}\n {suffix && <span className={inputStyles.slot}>{suffix}</span>}\n </div>\n <Autocomplete.Portal container={appElement ?? undefined}>\n <Autocomplete.Positioner\n anchor={anchorRef}\n className={styles.positioner}\n collisionPadding={getFloatingCollisionPadding()}\n ref={positionerRef}\n sideOffset={4}\n style={zIndex === undefined ? undefined : { zIndex }}\n >\n <Autocomplete.Popup\n className={cx(styles.popup, classNames?.popup)}\n style={customStyles?.popup}\n >\n {emptyText && (\n <Autocomplete.Empty className={styles.empty}>{emptyText}</Autocomplete.Empty>\n )}\n <Autocomplete.List className={styles.list}>\n {(item: AutoCompleteOption) => (\n <Autocomplete.Item\n className={cx(styles.item, classNames?.item)}\n disabled={item.disabled}\n key={item.value}\n style={customStyles?.item}\n value={item}\n >\n {item.label ?? item.value}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Popup>\n </Autocomplete.Positioner>\n </Autocomplete.Portal>\n </Autocomplete.Root>\n );\n },\n);\n\nAutoComplete.displayName = 'AutoComplete';\n\nexport default AutoComplete;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,eAAe,MAClB,EACC,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,OAAO,UACP,UAAU,CAAC,GACX,UACA,UACA,YACA,UACA,aACA,QACA,QACA,WACA,GAAG,WACC;CACJ,MAAM,EAAE,eAAe,aAAa;CACpC,MAAM,aAAa,cAAc;CACjC,MAAM,YAAY,OAAuB,IAAI;CAC7C,MAAM,EAAE,KAAK,eAAe,WAAW,eAA+B,UAAU;CAChF,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAE1D,MAAM,QAAQ,cACN,QAAQ,KAAK,WAAY,OAAO,WAAW,WAAW,EAAE,OAAO,OAAO,IAAI,MAAO,GACvF,CAAC,OAAO,CACV;CAEA,OACE,qBAAC,aAAa,MAAd;EACE,kBAAA;EACU;EACV,oBAAoB,SAAU,KAA4B;EACnD;EACP,gBAAgB,UAAU;GACxB,WAAW,KAAK;GAChB,WAAW,KAAK;EAClB;EACA,GAAI;EATN,UAAA,CAWE,qBAAC,OAAD;GACE,WAAW,GAAGA,aAAc;IAAE;IAAQ;IAAM,SAAS;GAAc,CAAC,GAAG,SAAS;GAChF,iBAAe,WAAW,KAAK,KAAA;GAC/B,KAAK;GACE;GAJT,UAAA;IAMG,UAAU,oBAAC,QAAD;KAAM,WAAWC,OAAY;KAAO,UAAA;IAAa,CAAA;IAC5D,oBAAC,aAAa,OAAd;KACE,WAAW,GAAGA,OAAY,OAAO,YAAY,KAAK;KACrC;KACb,OAAO,cAAc;IACtB,CAAA;IACA,cACC,oBAAC,aAAa,OAAd;KAAoB,cAAY;KAAS,WAAWC,SAAO;KACzD,UAAA,oBAAC,MAAD;MAAM,MAAM;MAAO,MAAM;KAAK,CAAA;IACZ,CAAA;IAErB,UAAU,oBAAC,QAAD;KAAM,WAAWD,OAAY;KAAO,UAAA;IAAa,CAAA;GACzD;EACL,CAAA,GAAA,oBAAC,aAAa,QAAd;GAAqB,WAAW,cAAc,KAAA;GAC5C,UAAA,oBAAC,aAAa,YAAd;IACE,QAAQ;IACR,WAAWC,SAAO;IAClB,kBAAkB,4BAA4B;IAC9C,KAAK;IACL,YAAY;IACZ,OAAO,WAAW,KAAA,IAAY,KAAA,IAAY,EAAE,OAAO;IAEnD,UAAA,qBAAC,aAAa,OAAd;KACE,WAAW,GAAGA,SAAO,OAAO,YAAY,KAAK;KAC7C,OAAO,cAAc;KAFvB,UAAA,CAIG,aACC,oBAAC,aAAa,OAAd;MAAoB,WAAWA,SAAO;MAAQ,UAAA;KAA8B,CAAA,GAE9E,oBAAC,aAAa,MAAd;MAAmB,WAAWA,SAAO;MACjC,WAAA,SACA,oBAAC,aAAa,MAAd;OACE,WAAW,GAAGA,SAAO,MAAM,YAAY,IAAI;OAC3C,UAAU,KAAK;OAEf,OAAO,cAAc;OACrB,OAAO;OAEN,UAAA,KAAK,SAAS,KAAK;MACH,GALZ,KAAK,KAKO;KAEJ,CAAA,CACD;;GACG,CAAA;EACN,CAAA,CACJ;;AAEvB,CACF;AAEA,aAAa,cAAc"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import Center from "../../Flex/Center.mjs";
|
|
3
|
-
import { safeReadableColor } from "../../utils/safeReadableColor.mjs";
|
|
4
3
|
import Icon from "../../Icon/Icon.mjs";
|
|
5
4
|
import FluentEmoji from "../../FluentEmoji/FluentEmoji.mjs";
|
|
5
|
+
import { safeReadableColor } from "../../utils/safeReadableColor.mjs";
|
|
6
6
|
import { styles, variants } from "./style.mjs";
|
|
7
7
|
import { calculateEmojiSize, formatAvatarText, hasValidBackground, isDefaultAntAvatar } from "./utils.mjs";
|
|
8
8
|
import { memo, useMemo, useState } from "react";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BreadcrumbProps } from "./type.mjs";
|
|
2
|
+
//#region src/base-ui/Breadcrumb/Breadcrumb.d.ts
|
|
3
|
+
declare const Breadcrumb: import("react").NamedExoticComponent<BreadcrumbProps>;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { Breadcrumb as default };
|
|
6
|
+
//# sourceMappingURL=Breadcrumb.d.mts.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import A from "../../A/index.mjs";
|
|
3
|
+
import Icon from "../../Icon/Icon.mjs";
|
|
4
|
+
import { styles } from "./style.mjs";
|
|
5
|
+
import { memo } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { cx } from "antd-style";
|
|
8
|
+
import { ChevronRight } from "lucide-react";
|
|
9
|
+
//#region src/base-ui/Breadcrumb/Breadcrumb.tsx
|
|
10
|
+
const renderTitle = (item) => {
|
|
11
|
+
if (item.href) return /* @__PURE__ */ jsx(A, {
|
|
12
|
+
className: styles.link,
|
|
13
|
+
href: item.href,
|
|
14
|
+
onClick: item.onClick,
|
|
15
|
+
children: item.title
|
|
16
|
+
});
|
|
17
|
+
if (item.onClick) return /* @__PURE__ */ jsx("button", {
|
|
18
|
+
className: styles.button,
|
|
19
|
+
type: "button",
|
|
20
|
+
onClick: item.onClick,
|
|
21
|
+
children: item.title
|
|
22
|
+
});
|
|
23
|
+
return item.title;
|
|
24
|
+
};
|
|
25
|
+
const Breadcrumb = memo(({ className, classNames, items, ref, separator, styles: customStyles, ...rest }) => {
|
|
26
|
+
const separatorNode = separator ?? /* @__PURE__ */ jsx(Icon, {
|
|
27
|
+
icon: ChevronRight,
|
|
28
|
+
size: 14
|
|
29
|
+
});
|
|
30
|
+
return /* @__PURE__ */ jsx("nav", {
|
|
31
|
+
"aria-label": "breadcrumb",
|
|
32
|
+
className: cx(styles.root, className),
|
|
33
|
+
ref,
|
|
34
|
+
...rest,
|
|
35
|
+
children: /* @__PURE__ */ jsx("ol", {
|
|
36
|
+
className: styles.list,
|
|
37
|
+
children: items.map((item, index) => {
|
|
38
|
+
const isLast = index === items.length - 1;
|
|
39
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
40
|
+
"aria-current": isLast ? "page" : void 0,
|
|
41
|
+
className: cx(styles.item, classNames?.item),
|
|
42
|
+
style: customStyles?.item,
|
|
43
|
+
children: [renderTitle(item), !isLast && /* @__PURE__ */ jsx("span", {
|
|
44
|
+
"aria-hidden": "true",
|
|
45
|
+
className: cx(styles.separator, classNames?.separator),
|
|
46
|
+
style: customStyles?.separator,
|
|
47
|
+
children: separatorNode
|
|
48
|
+
})]
|
|
49
|
+
}, item.key ?? index);
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
Breadcrumb.displayName = "Breadcrumb";
|
|
55
|
+
//#endregion
|
|
56
|
+
export { Breadcrumb as default };
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=Breadcrumb.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumb.mjs","names":[],"sources":["../../../src/base-ui/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronRight } from 'lucide-react';\nimport { memo, type ReactNode } from 'react';\n\nimport A from '@/A';\nimport Icon from '@/Icon';\n\nimport { styles } from './style';\nimport type { BreadcrumbItem, BreadcrumbProps } from './type';\n\nconst renderTitle = (item: BreadcrumbItem): ReactNode => {\n if (item.href) {\n return (\n <A className={styles.link} href={item.href} onClick={item.onClick}>\n {item.title}\n </A>\n );\n }\n\n if (item.onClick) {\n return (\n <button className={styles.button} type=\"button\" onClick={item.onClick}>\n {item.title}\n </button>\n );\n }\n\n return item.title;\n};\n\nconst Breadcrumb = memo<BreadcrumbProps>(\n ({ className, classNames, items, ref, separator, styles: customStyles, ...rest }) => {\n const separatorNode = separator ?? <Icon icon={ChevronRight} size={14} />;\n\n return (\n <nav aria-label=\"breadcrumb\" className={cx(styles.root, className)} ref={ref} {...rest}>\n <ol className={styles.list}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li\n aria-current={isLast ? 'page' : undefined}\n className={cx(styles.item, classNames?.item)}\n key={item.key ?? index}\n style={customStyles?.item}\n >\n {renderTitle(item)}\n {!isLast && (\n <span\n aria-hidden=\"true\"\n className={cx(styles.separator, classNames?.separator)}\n style={customStyles?.separator}\n >\n {separatorNode}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n },\n);\n\nBreadcrumb.displayName = 'Breadcrumb';\n\nexport default Breadcrumb;\n"],"mappings":";;;;;;;;;AAYA,MAAM,eAAe,SAAoC;CACvD,IAAI,KAAK,MACP,OACE,oBAAC,GAAD;EAAG,WAAW,OAAO;EAAM,MAAM,KAAK;EAAM,SAAS,KAAK;EACvD,UAAA,KAAK;CACL,CAAA;CAIP,IAAI,KAAK,SACP,OACE,oBAAC,UAAD;EAAQ,WAAW,OAAO;EAAQ,MAAK;EAAS,SAAS,KAAK;EAC3D,UAAA,KAAK;CACA,CAAA;CAIZ,OAAO,KAAK;AACd;AAEA,MAAM,aAAa,MAChB,EAAE,WAAW,YAAY,OAAO,KAAK,WAAW,QAAQ,cAAc,GAAG,WAAW;CACnF,MAAM,gBAAgB,aAAa,oBAAC,MAAD;EAAM,MAAM;EAAc,MAAM;CAAK,CAAA;CAExE,OACE,oBAAC,OAAD;EAAK,cAAW;EAAa,WAAW,GAAG,OAAO,MAAM,SAAS;EAAQ;EAAK,GAAI;EAChF,UAAA,oBAAC,MAAD;GAAI,WAAW,OAAO;GACnB,UAAA,MAAM,KAAK,MAAM,UAAU;IAC1B,MAAM,SAAS,UAAU,MAAM,SAAS;IAExC,OACE,qBAAC,MAAD;KACE,gBAAc,SAAS,SAAS,KAAA;KAChC,WAAW,GAAG,OAAO,MAAM,YAAY,IAAI;KAE3C,OAAO,cAAc;KAJvB,UAAA,CAMG,YAAY,IAAI,GAChB,CAAC,UACA,oBAAC,QAAD;MACE,eAAY;MACZ,WAAW,GAAG,OAAO,WAAW,YAAY,SAAS;MACrD,OAAO,cAAc;MAEpB,UAAA;KACG,CAAA,CAEN;IAbG,GAAA,KAAK,OAAO,KAaf;GAER,CAAC;EACC,CAAA;CACD,CAAA;AAET,CACF;AAEA,WAAW,cAAc"}
|