@lobehub/ui 5.51.2 → 5.53.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/eslint/index.mjs +100 -0
- package/es/eslint/index.mjs.map +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/node_modules/.pnpm/unist-util-visit@5.1.0/node_modules/unist-util-visit/lib/index.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,13 +1,24 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { rootVariants, styles } from "./style.mjs";
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
3
|
+
import ClearButton from "./ClearButton.mjs";
|
|
4
|
+
import { clearNativeValue } from "./clearNativeValue.mjs";
|
|
5
|
+
import { isPressEnter } from "./pressEnter.mjs";
|
|
6
|
+
import { memo, useMemo, useRef, useState } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
8
|
import { cx, useThemeMode } from "antd-style";
|
|
9
|
+
import { useMergeRefs } from "react-merge-refs";
|
|
6
10
|
import { Field } from "@base-ui/react/field";
|
|
7
11
|
//#region src/base-ui/Input/TextArea.tsx
|
|
8
|
-
const
|
|
12
|
+
const textLength = (value) => value === void 0 || value === null ? 0 : Array.from(String(value)).length;
|
|
13
|
+
const TextArea = memo(({ ref, className, classNames, styles: customStyles, style, variant, shadow, autoSize, resize = false, disabled, readOnly, allowClear, onClear, onPressEnter, onKeyDown, onChange, showCount, maxLength, value, defaultValue, ...rest }) => {
|
|
9
14
|
const { isDarkMode } = useThemeMode();
|
|
10
15
|
const mergedVariant = variant || (isDarkMode ? "filled" : "outlined");
|
|
16
|
+
const textareaRef = useRef(null);
|
|
17
|
+
const mergedRef = useMergeRefs([ref, textareaRef]);
|
|
18
|
+
const [innerLength, setInnerLength] = useState(() => textLength(value ?? defaultValue));
|
|
19
|
+
const length = value === void 0 ? innerLength : textLength(value);
|
|
20
|
+
const showClear = allowClear && length > 0 && !disabled && !readOnly;
|
|
21
|
+
const over = maxLength !== void 0 && length > maxLength;
|
|
11
22
|
const cssVariables = useMemo(() => {
|
|
12
23
|
if (typeof autoSize !== "object") return {};
|
|
13
24
|
return {
|
|
@@ -15,7 +26,7 @@ const TextArea = memo(({ ref, className, classNames, styles: customStyles, style
|
|
|
15
26
|
"--textarea-min-rows": autoSize.minRows
|
|
16
27
|
};
|
|
17
28
|
}, [autoSize]);
|
|
18
|
-
return /* @__PURE__ */
|
|
29
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
19
30
|
"data-disabled": disabled ? "" : void 0,
|
|
20
31
|
style: {
|
|
21
32
|
...cssVariables,
|
|
@@ -24,16 +35,42 @@ const TextArea = memo(({ ref, className, classNames, styles: customStyles, style
|
|
|
24
35
|
className: cx(rootVariants({
|
|
25
36
|
shadow,
|
|
26
37
|
variant: mergedVariant
|
|
27
|
-
}), styles.textarea, autoSize && styles.textareaAutoSize, resize && styles.textareaResize, className),
|
|
28
|
-
children:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
}), styles.textarea, autoSize && styles.textareaAutoSize, resize && styles.textareaResize, showCount && styles.textareaWithCount, className),
|
|
39
|
+
children: [
|
|
40
|
+
/* @__PURE__ */ jsx(Field.Control, {
|
|
41
|
+
className: cx(styles.input, classNames?.input),
|
|
42
|
+
disabled,
|
|
43
|
+
style: customStyles?.input,
|
|
44
|
+
render: /* @__PURE__ */ jsx("textarea", {
|
|
45
|
+
defaultValue,
|
|
46
|
+
maxLength,
|
|
47
|
+
readOnly,
|
|
48
|
+
ref: mergedRef,
|
|
49
|
+
value,
|
|
50
|
+
onChange: (event) => {
|
|
51
|
+
setInnerLength(textLength(event.currentTarget.value));
|
|
52
|
+
onChange?.(event);
|
|
53
|
+
},
|
|
54
|
+
onKeyDown: (event) => {
|
|
55
|
+
if (isPressEnter(event)) onPressEnter?.(event);
|
|
56
|
+
onKeyDown?.(event);
|
|
57
|
+
},
|
|
58
|
+
...rest
|
|
59
|
+
})
|
|
34
60
|
}),
|
|
35
|
-
|
|
36
|
-
|
|
61
|
+
showClear && /* @__PURE__ */ jsx(ClearButton, {
|
|
62
|
+
className: styles.textareaClear,
|
|
63
|
+
onClear: () => {
|
|
64
|
+
clearNativeValue(textareaRef.current);
|
|
65
|
+
onClear?.();
|
|
66
|
+
}
|
|
67
|
+
}),
|
|
68
|
+
showCount && /* @__PURE__ */ jsx("span", {
|
|
69
|
+
className: styles.count,
|
|
70
|
+
"data-over": over ? "" : void 0,
|
|
71
|
+
children: maxLength === void 0 ? length : `${length} / ${maxLength}`
|
|
72
|
+
})
|
|
73
|
+
]
|
|
37
74
|
});
|
|
38
75
|
});
|
|
39
76
|
TextArea.displayName = "TextArea";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextArea.mjs","names":[],"sources":["../../../src/base-ui/Input/TextArea.tsx"],"sourcesContent":["'use client';\n\nimport { Field } from '@base-ui/react/field';\nimport { cx, useThemeMode } from 'antd-style';\nimport { type CSSProperties, memo, useMemo } from 'react';\n\nimport { rootVariants, styles } from './style';\nimport type { TextAreaProps } from './type';\n\nconst TextArea = memo<TextAreaProps>(\n ({\n ref,\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n autoSize,\n resize = false,\n disabled,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n\n const cssVariables = useMemo<CSSProperties>(() => {\n if (typeof autoSize !== 'object') return {};\n return {\n '--textarea-max-height': autoSize.maxRows ? `calc(1.5em * ${autoSize.maxRows})` : undefined,\n '--textarea-min-rows': autoSize.minRows,\n } as CSSProperties;\n }, [autoSize]);\n\n return (\n <div\n data-disabled={disabled ? '' : undefined}\n style={{ ...cssVariables, ...style }}\n className={cx(\n rootVariants({ shadow, variant: mergedVariant }),\n styles.textarea,\n autoSize && styles.textareaAutoSize,\n resize && styles.textareaResize,\n className,\n )}\n >\n <Field.Control\n className={cx(styles.input, classNames?.input)}\n disabled={disabled}\n render={<textarea
|
|
1
|
+
{"version":3,"file":"TextArea.mjs","names":[],"sources":["../../../src/base-ui/Input/TextArea.tsx"],"sourcesContent":["'use client';\n\nimport { Field } from '@base-ui/react/field';\nimport { cx, useThemeMode } from 'antd-style';\nimport { type CSSProperties, memo, useMemo, useRef, useState } from 'react';\nimport { useMergeRefs } from 'react-merge-refs';\n\nimport ClearButton from './ClearButton';\nimport { clearNativeValue } from './clearNativeValue';\nimport { isPressEnter } from './pressEnter';\nimport { rootVariants, styles } from './style';\nimport type { TextAreaProps } from './type';\n\nconst textLength = (value: unknown) =>\n value === undefined || value === null ? 0 : Array.from(String(value)).length;\n\nconst TextArea = memo<TextAreaProps>(\n ({\n ref,\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n autoSize,\n resize = false,\n disabled,\n readOnly,\n allowClear,\n onClear,\n onPressEnter,\n onKeyDown,\n onChange,\n showCount,\n maxLength,\n value,\n defaultValue,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const mergedRef = useMergeRefs([ref, textareaRef]);\n const [innerLength, setInnerLength] = useState(() => textLength(value ?? defaultValue));\n const length = value === undefined ? innerLength : textLength(value);\n const showClear = allowClear && length > 0 && !disabled && !readOnly;\n const over = maxLength !== undefined && length > maxLength;\n\n const cssVariables = useMemo<CSSProperties>(() => {\n if (typeof autoSize !== 'object') return {};\n return {\n '--textarea-max-height': autoSize.maxRows ? `calc(1.5em * ${autoSize.maxRows})` : undefined,\n '--textarea-min-rows': autoSize.minRows,\n } as CSSProperties;\n }, [autoSize]);\n\n return (\n <div\n data-disabled={disabled ? '' : undefined}\n style={{ ...cssVariables, ...style }}\n className={cx(\n rootVariants({ shadow, variant: mergedVariant }),\n styles.textarea,\n autoSize && styles.textareaAutoSize,\n resize && styles.textareaResize,\n showCount && styles.textareaWithCount,\n className,\n )}\n >\n <Field.Control\n className={cx(styles.input, classNames?.input)}\n disabled={disabled}\n style={customStyles?.input}\n render={\n <textarea\n defaultValue={defaultValue}\n maxLength={maxLength}\n readOnly={readOnly}\n ref={mergedRef}\n value={value}\n onChange={(event) => {\n setInnerLength(textLength(event.currentTarget.value));\n onChange?.(event);\n }}\n onKeyDown={(event) => {\n if (isPressEnter(event)) onPressEnter?.(event);\n onKeyDown?.(event);\n }}\n {...rest}\n />\n }\n />\n {showClear && (\n <ClearButton\n className={styles.textareaClear}\n onClear={() => {\n clearNativeValue(textareaRef.current);\n onClear?.();\n }}\n />\n )}\n {showCount && (\n <span className={styles.count} data-over={over ? '' : undefined}>\n {maxLength === undefined ? length : `${length} / ${maxLength}`}\n </span>\n )}\n </div>\n );\n },\n);\n\nTextArea.displayName = 'TextArea';\n\nexport default TextArea;\n"],"mappings":";;;;;;;;;;;AAaA,MAAM,cAAc,UAClB,UAAU,KAAA,KAAa,UAAU,OAAO,IAAI,MAAM,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;AAExE,MAAM,WAAW,MACd,EACC,KACA,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,UACA,SAAS,OACT,UACA,UACA,YACA,SACA,cACA,WACA,UACA,WACA,WACA,OACA,cACA,GAAG,WACC;CACJ,MAAM,EAAE,eAAe,aAAa;CACpC,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAC1D,MAAM,cAAc,OAA4B,IAAI;CACpD,MAAM,YAAY,aAAa,CAAC,KAAK,WAAW,CAAC;CACjD,MAAM,CAAC,aAAa,kBAAkB,eAAe,WAAW,SAAS,YAAY,CAAC;CACtF,MAAM,SAAS,UAAU,KAAA,IAAY,cAAc,WAAW,KAAK;CACnE,MAAM,YAAY,cAAc,SAAS,KAAK,CAAC,YAAY,CAAC;CAC5D,MAAM,OAAO,cAAc,KAAA,KAAa,SAAS;CAEjD,MAAM,eAAe,cAA6B;EAChD,IAAI,OAAO,aAAa,UAAU,OAAO,CAAC;EAC1C,OAAO;GACL,yBAAyB,SAAS,UAAU,gBAAgB,SAAS,QAAQ,KAAK,KAAA;GAClF,uBAAuB,SAAS;EAClC;CACF,GAAG,CAAC,QAAQ,CAAC;CAEb,OACE,qBAAC,OAAD;EACE,iBAAe,WAAW,KAAK,KAAA;EAC/B,OAAO;GAAE,GAAG;GAAc,GAAG;EAAM;EACnC,WAAW,GACT,aAAa;GAAE;GAAQ,SAAS;EAAc,CAAC,GAC/C,OAAO,UACP,YAAY,OAAO,kBACnB,UAAU,OAAO,gBACjB,aAAa,OAAO,mBACpB,SACF;EAVF,UAAA;GAYE,oBAAC,MAAM,SAAP;IACE,WAAW,GAAG,OAAO,OAAO,YAAY,KAAK;IACnC;IACV,OAAO,cAAc;IACrB,QACE,oBAAC,YAAD;KACgB;KACH;KACD;KACV,KAAK;KACE;KACP,WAAW,UAAU;MACnB,eAAe,WAAW,MAAM,cAAc,KAAK,CAAC;MACpD,WAAW,KAAK;KAClB;KACA,YAAY,UAAU;MACpB,IAAI,aAAa,KAAK,GAAG,eAAe,KAAK;MAC7C,YAAY,KAAK;KACnB;KACA,GAAI;IACL,CAAA;GAEJ,CAAA;GACA,aACC,oBAAC,aAAD;IACE,WAAW,OAAO;IAClB,eAAe;KACb,iBAAiB,YAAY,OAAO;KACpC,UAAU;IACZ;GACD,CAAA;GAEF,aACC,oBAAC,QAAD;IAAM,WAAW,OAAO;IAAO,aAAW,OAAO,KAAK,KAAA;IACnD,UAAA,cAAc,KAAA,IAAY,SAAS,GAAG,OAAO,KAAK;GAC/C,CAAA;EAEL;;AAET,CACF;AAEA,SAAS,cAAc"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/base-ui/Input/clearNativeValue.ts
|
|
2
|
+
const clearNativeValue = (element) => {
|
|
3
|
+
if (!element) return;
|
|
4
|
+
const prototype = element instanceof HTMLTextAreaElement ? HTMLTextAreaElement.prototype : HTMLInputElement.prototype;
|
|
5
|
+
Object.getOwnPropertyDescriptor(prototype, "value")?.set?.call(element, "");
|
|
6
|
+
element.dispatchEvent(new Event("input", { bubbles: true }));
|
|
7
|
+
element.focus();
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { clearNativeValue };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=clearNativeValue.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearNativeValue.mjs","names":[],"sources":["../../../src/base-ui/Input/clearNativeValue.ts"],"sourcesContent":["export const clearNativeValue = (element: HTMLInputElement | HTMLTextAreaElement | null) => {\n if (!element) return;\n const prototype =\n element instanceof HTMLTextAreaElement\n ? HTMLTextAreaElement.prototype\n : HTMLInputElement.prototype;\n Object.getOwnPropertyDescriptor(prototype, 'value')?.set?.call(element, '');\n element.dispatchEvent(new Event('input', { bubbles: true }));\n element.focus();\n};\n"],"mappings":";AAAA,MAAa,oBAAoB,YAA2D;CAC1F,IAAI,CAAC,SAAS;CACd,MAAM,YACJ,mBAAmB,sBACf,oBAAoB,YACpB,iBAAiB;CACvB,OAAO,yBAAyB,WAAW,OAAO,CAAC,EAAE,KAAK,KAAK,SAAS,EAAE;CAC1E,QAAQ,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;CAC3D,QAAQ,MAAM;AAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pressEnter.mjs","names":[],"sources":["../../../src/base-ui/Input/pressEnter.ts"],"sourcesContent":["import type { KeyboardEvent } from 'react';\n\nexport const isPressEnter = (event: KeyboardEvent) =>\n event.key === 'Enter' && !event.nativeEvent.isComposing && event.keyCode !== 229;\n"],"mappings":";AAEA,MAAa,gBAAgB,UAC3B,MAAM,QAAQ,WAAW,CAAC,MAAM,YAAY,eAAe,MAAM,YAAY"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
//#region src/base-ui/Input/style.d.ts
|
|
2
2
|
declare const styles: {
|
|
3
|
+
clear: string;
|
|
4
|
+
count: string;
|
|
5
|
+
textareaClear: string;
|
|
6
|
+
textareaWithCount: string;
|
|
3
7
|
borderless: string;
|
|
4
8
|
filled: string;
|
|
5
9
|
input: string;
|
|
@@ -24,7 +28,7 @@ declare const styles: {
|
|
|
24
28
|
declare const rootVariants: (props?: ({
|
|
25
29
|
shadow?: boolean | null | undefined;
|
|
26
30
|
size?: "large" | "middle" | "small" | null | undefined;
|
|
27
|
-
variant?: "
|
|
31
|
+
variant?: "filled" | "borderless" | "outlined" | null | undefined;
|
|
28
32
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
29
33
|
//#endregion
|
|
30
34
|
export { rootVariants, styles };
|
|
@@ -4,6 +4,63 @@ import { createStaticStyles } from "antd-style";
|
|
|
4
4
|
import { cva } from "class-variance-authority";
|
|
5
5
|
//#region src/base-ui/Input/style.ts
|
|
6
6
|
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
7
|
+
clear: css`
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
flex: none;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: center;
|
|
14
|
+
|
|
15
|
+
width: 16px;
|
|
16
|
+
height: 16px;
|
|
17
|
+
padding: 0;
|
|
18
|
+
border: 0;
|
|
19
|
+
border-radius: 50%;
|
|
20
|
+
|
|
21
|
+
color: ${cssVar.colorBgContainer};
|
|
22
|
+
|
|
23
|
+
visibility: hidden;
|
|
24
|
+
background: ${cssVar.colorTextQuaternary};
|
|
25
|
+
|
|
26
|
+
&:hover {
|
|
27
|
+
background: ${cssVar.colorTextTertiary};
|
|
28
|
+
}
|
|
29
|
+
`,
|
|
30
|
+
count: css`
|
|
31
|
+
pointer-events: none;
|
|
32
|
+
|
|
33
|
+
position: absolute;
|
|
34
|
+
inset-block-end: 6px;
|
|
35
|
+
inset-inline-end: 8px;
|
|
36
|
+
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
|
|
40
|
+
height: 20px;
|
|
41
|
+
padding-inline: 8px;
|
|
42
|
+
border-radius: 999px;
|
|
43
|
+
|
|
44
|
+
font-size: 11px;
|
|
45
|
+
font-weight: 600;
|
|
46
|
+
font-variant-numeric: tabular-nums;
|
|
47
|
+
color: ${cssVar.colorTextSecondary};
|
|
48
|
+
|
|
49
|
+
background: ${cssVar.colorFillTertiary};
|
|
50
|
+
|
|
51
|
+
&[data-over] {
|
|
52
|
+
color: ${cssVar.colorWhite};
|
|
53
|
+
background: ${cssVar.colorError};
|
|
54
|
+
}
|
|
55
|
+
`,
|
|
56
|
+
textareaClear: css`
|
|
57
|
+
position: absolute;
|
|
58
|
+
inset-block-start: 10px;
|
|
59
|
+
inset-inline-end: 10px;
|
|
60
|
+
`,
|
|
61
|
+
textareaWithCount: css`
|
|
62
|
+
padding-block-end: 30px;
|
|
63
|
+
`,
|
|
7
64
|
borderless: css`
|
|
8
65
|
border: 1px solid transparent;
|
|
9
66
|
background: none;
|
|
@@ -35,7 +92,7 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
|
35
92
|
}
|
|
36
93
|
`,
|
|
37
94
|
invalid: css`
|
|
38
|
-
&:has([data-invalid]) {
|
|
95
|
+
&:has([data-invalid], [aria-invalid='true']) {
|
|
39
96
|
border-color: ${cssVar.colorError};
|
|
40
97
|
|
|
41
98
|
&:focus-within {
|
|
@@ -83,18 +140,23 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
|
83
140
|
color: ${cssVar.colorTextQuaternary};
|
|
84
141
|
opacity: 0.66;
|
|
85
142
|
}
|
|
143
|
+
|
|
144
|
+
&:hover [data-lobe-input-clear],
|
|
145
|
+
&:focus-within [data-lobe-input-clear] {
|
|
146
|
+
visibility: visible;
|
|
147
|
+
}
|
|
86
148
|
`,
|
|
87
149
|
shadow: staticStylish.shadow,
|
|
88
150
|
sizeLarge: css`
|
|
89
|
-
height: ${controlHeight.large}px;
|
|
151
|
+
min-height: ${controlHeight.large}px;
|
|
90
152
|
border-radius: ${cssVar.borderRadiusLG};
|
|
91
153
|
font-size: 16px;
|
|
92
154
|
`,
|
|
93
155
|
sizeMiddle: css`
|
|
94
|
-
height: ${controlHeight.middle}px;
|
|
156
|
+
min-height: ${controlHeight.middle}px;
|
|
95
157
|
`,
|
|
96
158
|
sizeSmall: css`
|
|
97
|
-
height: ${controlHeight.small}px;
|
|
159
|
+
min-height: ${controlHeight.small}px;
|
|
98
160
|
padding-inline: 8px;
|
|
99
161
|
border-radius: ${cssVar.borderRadiusSM};
|
|
100
162
|
font-size: 12px;
|
|
@@ -180,6 +242,7 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
|
180
242
|
color: ${cssVar.colorTextTertiary};
|
|
181
243
|
`,
|
|
182
244
|
textarea: css`
|
|
245
|
+
position: relative;
|
|
183
246
|
height: auto;
|
|
184
247
|
padding-block: 8px;
|
|
185
248
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.mjs","names":["lobeStaticStylish"],"sources":["../../../src/base-ui/Input/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\nimport { cva } from 'class-variance-authority';\n\nimport { controlHeight } from '@/base-ui/controlSize';\nimport { lobeStaticStylish } from '@/styles';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n borderless: css`\n border: 1px solid transparent;\n background: none;\n `,\n filled: css`\n border: 1px solid transparent;\n background: ${cssVar.colorFillTertiary};\n\n &:hover:not(:focus-within, [data-disabled]) {\n background: ${cssVar.colorFillSecondary};\n }\n `,\n input: css`\n flex: 1;\n\n min-width: 0;\n padding: 0;\n border: none;\n\n font: inherit;\n color: inherit;\n\n appearance: none;\n background: transparent;\n outline: none;\n\n &::placeholder {\n color: ${cssVar.colorTextPlaceholder};\n }\n `,\n invalid: css`\n &:has([data-invalid]) {\n border-color: ${cssVar.colorError};\n\n &:focus-within {\n border-color: ${cssVar.colorError};\n box-shadow: 0 0 0 2px ${cssVar.colorErrorBg};\n }\n }\n `,\n outlined: css`\n border: 1px solid ${cssVar.colorBorderSecondary};\n background: ${cssVar.colorBgContainer};\n\n &:hover:not(:focus-within, [data-disabled]) {\n border-color: ${cssVar.colorBorder};\n }\n\n &:focus-within {\n border-color: ${cssVar.colorPrimary};\n box-shadow: 0 0 0 2px ${cssVar.colorPrimaryBg};\n }\n `,\n root: css`\n cursor: text;\n\n display: inline-flex;\n gap: 8px;\n align-items: center;\n\n box-sizing: border-box;\n width: 100%;\n padding-inline: 12px;\n border-radius: ${cssVar.borderRadius};\n\n font-size: 14px;\n color: ${cssVar.colorText};\n\n transition:\n background 150ms ${cssVar.motionEaseOut},\n border-color 150ms ${cssVar.motionEaseOut},\n box-shadow 150ms ${cssVar.motionEaseOut};\n\n &[data-disabled],\n &:has(:disabled) {\n cursor: not-allowed;\n color: ${cssVar.colorTextQuaternary};\n opacity: 0.66;\n }\n `,\n shadow: lobeStaticStylish.shadow,\n sizeLarge: css`\n height: ${controlHeight.large}px;\n border-radius: ${cssVar.borderRadiusLG};\n font-size: 16px;\n `,\n sizeMiddle: css`\n height: ${controlHeight.middle}px;\n `,\n sizeSmall: css`\n height: ${controlHeight.small}px;\n padding-inline: 8px;\n border-radius: ${cssVar.borderRadiusSM};\n font-size: 12px;\n `,\n numberControl: css`\n cursor: pointer;\n\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: center;\n\n margin: 0;\n padding: 0;\n border: none;\n\n color: ${cssVar.colorTextTertiary};\n\n background: none;\n outline: none;\n\n transition: color 150ms ${cssVar.motionEaseOut};\n\n &:hover:not(:disabled) {\n color: ${cssVar.colorText};\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n `,\n numberControls: css`\n display: flex;\n flex: none;\n flex-direction: column;\n align-self: stretch;\n\n width: 22px;\n margin-inline-end: -8px;\n border-inline-start: 1px solid ${cssVar.colorBorderSecondary};\n `,\n numberInput: css`\n font-variant-numeric: tabular-nums;\n `,\n otpCell: css`\n flex: none;\n width: ${controlHeight.middle}px;\n padding-inline: 0;\n text-align: center;\n `,\n otpRoot: css`\n display: inline-flex;\n gap: 8px;\n align-items: center;\n `,\n passwordToggle: css`\n cursor: pointer;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n margin: 0;\n padding: 0;\n border: none;\n\n color: ${cssVar.colorTextTertiary};\n\n background: none;\n outline: none;\n\n transition: color 150ms ${cssVar.motionEaseOut};\n\n &:hover {\n color: ${cssVar.colorText};\n }\n `,\n slot: css`\n display: inline-flex;\n flex: none;\n align-items: center;\n color: ${cssVar.colorTextTertiary};\n `,\n textarea: css`\n height: auto;\n padding-block: 8px;\n\n textarea {\n resize: none;\n min-height: calc(1.5em * var(--textarea-min-rows, 2));\n max-height: var(--textarea-max-height, none);\n line-height: 1.5;\n }\n `,\n textareaAutoSize: css`\n textarea {\n field-sizing: content;\n }\n `,\n textareaResize: css`\n textarea {\n resize: vertical;\n }\n `,\n}));\n\nexport const rootVariants = cva([styles.root, styles.invalid], {\n defaultVariants: {\n shadow: false,\n size: 'middle',\n variant: 'outlined',\n },\n variants: {\n shadow: {\n false: null,\n true: styles.shadow,\n },\n size: {\n large: styles.sizeLarge,\n middle: styles.sizeMiddle,\n small: styles.sizeSmall,\n },\n variant: {\n borderless: styles.borderless,\n filled: styles.filled,\n outlined: styles.outlined,\n },\n },\n});\n"],"mappings":";;;;;AAMA,MAAa,SAAS,oBAAoB,EAAE,KAAK,cAAc;CAC7D,YAAY,GAAG;;;;CAIf,QAAQ,GAAG;;kBAEK,OAAO,kBAAkB;;;oBAGvB,OAAO,mBAAmB;;;CAG5C,OAAO,GAAG;;;;;;;;;;;;;;;eAeG,OAAO,qBAAqB;;;CAGzC,SAAS,GAAG;;sBAEQ,OAAO,WAAW;;;wBAGhB,OAAO,WAAW;gCACV,OAAO,aAAa;;;;CAIlD,UAAU,GAAG;wBACS,OAAO,qBAAqB;kBAClC,OAAO,iBAAiB;;;sBAGpB,OAAO,YAAY;;;;sBAInB,OAAO,aAAa;8BACZ,OAAO,eAAe;;;CAGlD,MAAM,GAAG;;;;;;;;;;qBAUU,OAAO,aAAa;;;aAG5B,OAAO,UAAU;;;yBAGL,OAAO,cAAc;2BACnB,OAAO,cAAc;yBACvB,OAAO,cAAc;;;;;eAK/B,OAAO,oBAAoB
|
|
1
|
+
{"version":3,"file":"style.mjs","names":["lobeStaticStylish"],"sources":["../../../src/base-ui/Input/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\nimport { cva } from 'class-variance-authority';\n\nimport { controlHeight } from '@/base-ui/controlSize';\nimport { lobeStaticStylish } from '@/styles';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n clear: css`\n cursor: pointer;\n\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n\n width: 16px;\n height: 16px;\n padding: 0;\n border: 0;\n border-radius: 50%;\n\n color: ${cssVar.colorBgContainer};\n\n visibility: hidden;\n background: ${cssVar.colorTextQuaternary};\n\n &:hover {\n background: ${cssVar.colorTextTertiary};\n }\n `,\n count: css`\n pointer-events: none;\n\n position: absolute;\n inset-block-end: 6px;\n inset-inline-end: 8px;\n\n display: inline-flex;\n align-items: center;\n\n height: 20px;\n padding-inline: 8px;\n border-radius: 999px;\n\n font-size: 11px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n color: ${cssVar.colorTextSecondary};\n\n background: ${cssVar.colorFillTertiary};\n\n &[data-over] {\n color: ${cssVar.colorWhite};\n background: ${cssVar.colorError};\n }\n `,\n textareaClear: css`\n position: absolute;\n inset-block-start: 10px;\n inset-inline-end: 10px;\n `,\n textareaWithCount: css`\n padding-block-end: 30px;\n `,\n borderless: css`\n border: 1px solid transparent;\n background: none;\n `,\n filled: css`\n border: 1px solid transparent;\n background: ${cssVar.colorFillTertiary};\n\n &:hover:not(:focus-within, [data-disabled]) {\n background: ${cssVar.colorFillSecondary};\n }\n `,\n input: css`\n flex: 1;\n\n min-width: 0;\n padding: 0;\n border: none;\n\n font: inherit;\n color: inherit;\n\n appearance: none;\n background: transparent;\n outline: none;\n\n &::placeholder {\n color: ${cssVar.colorTextPlaceholder};\n }\n `,\n invalid: css`\n &:has([data-invalid], [aria-invalid='true']) {\n border-color: ${cssVar.colorError};\n\n &:focus-within {\n border-color: ${cssVar.colorError};\n box-shadow: 0 0 0 2px ${cssVar.colorErrorBg};\n }\n }\n `,\n outlined: css`\n border: 1px solid ${cssVar.colorBorderSecondary};\n background: ${cssVar.colorBgContainer};\n\n &:hover:not(:focus-within, [data-disabled]) {\n border-color: ${cssVar.colorBorder};\n }\n\n &:focus-within {\n border-color: ${cssVar.colorPrimary};\n box-shadow: 0 0 0 2px ${cssVar.colorPrimaryBg};\n }\n `,\n root: css`\n cursor: text;\n\n display: inline-flex;\n gap: 8px;\n align-items: center;\n\n box-sizing: border-box;\n width: 100%;\n padding-inline: 12px;\n border-radius: ${cssVar.borderRadius};\n\n font-size: 14px;\n color: ${cssVar.colorText};\n\n transition:\n background 150ms ${cssVar.motionEaseOut},\n border-color 150ms ${cssVar.motionEaseOut},\n box-shadow 150ms ${cssVar.motionEaseOut};\n\n &[data-disabled],\n &:has(:disabled) {\n cursor: not-allowed;\n color: ${cssVar.colorTextQuaternary};\n opacity: 0.66;\n }\n\n &:hover [data-lobe-input-clear],\n &:focus-within [data-lobe-input-clear] {\n visibility: visible;\n }\n `,\n shadow: lobeStaticStylish.shadow,\n sizeLarge: css`\n min-height: ${controlHeight.large}px;\n border-radius: ${cssVar.borderRadiusLG};\n font-size: 16px;\n `,\n sizeMiddle: css`\n min-height: ${controlHeight.middle}px;\n `,\n sizeSmall: css`\n min-height: ${controlHeight.small}px;\n padding-inline: 8px;\n border-radius: ${cssVar.borderRadiusSM};\n font-size: 12px;\n `,\n numberControl: css`\n cursor: pointer;\n\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: center;\n\n margin: 0;\n padding: 0;\n border: none;\n\n color: ${cssVar.colorTextTertiary};\n\n background: none;\n outline: none;\n\n transition: color 150ms ${cssVar.motionEaseOut};\n\n &:hover:not(:disabled) {\n color: ${cssVar.colorText};\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n `,\n numberControls: css`\n display: flex;\n flex: none;\n flex-direction: column;\n align-self: stretch;\n\n width: 22px;\n margin-inline-end: -8px;\n border-inline-start: 1px solid ${cssVar.colorBorderSecondary};\n `,\n numberInput: css`\n font-variant-numeric: tabular-nums;\n `,\n otpCell: css`\n flex: none;\n width: ${controlHeight.middle}px;\n padding-inline: 0;\n text-align: center;\n `,\n otpRoot: css`\n display: inline-flex;\n gap: 8px;\n align-items: center;\n `,\n passwordToggle: css`\n cursor: pointer;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n margin: 0;\n padding: 0;\n border: none;\n\n color: ${cssVar.colorTextTertiary};\n\n background: none;\n outline: none;\n\n transition: color 150ms ${cssVar.motionEaseOut};\n\n &:hover {\n color: ${cssVar.colorText};\n }\n `,\n slot: css`\n display: inline-flex;\n flex: none;\n align-items: center;\n color: ${cssVar.colorTextTertiary};\n `,\n textarea: css`\n position: relative;\n height: auto;\n padding-block: 8px;\n\n textarea {\n resize: none;\n min-height: calc(1.5em * var(--textarea-min-rows, 2));\n max-height: var(--textarea-max-height, none);\n line-height: 1.5;\n }\n `,\n textareaAutoSize: css`\n textarea {\n field-sizing: content;\n }\n `,\n textareaResize: css`\n textarea {\n resize: vertical;\n }\n `,\n}));\n\nexport const rootVariants = cva([styles.root, styles.invalid], {\n defaultVariants: {\n shadow: false,\n size: 'middle',\n variant: 'outlined',\n },\n variants: {\n shadow: {\n false: null,\n true: styles.shadow,\n },\n size: {\n large: styles.sizeLarge,\n middle: styles.sizeMiddle,\n small: styles.sizeSmall,\n },\n variant: {\n borderless: styles.borderless,\n filled: styles.filled,\n outlined: styles.outlined,\n },\n },\n});\n"],"mappings":";;;;;AAMA,MAAa,SAAS,oBAAoB,EAAE,KAAK,cAAc;CAC7D,OAAO,GAAG;;;;;;;;;;;;;;aAcC,OAAO,iBAAiB;;;kBAGnB,OAAO,oBAAoB;;;oBAGzB,OAAO,kBAAkB;;;CAG3C,OAAO,GAAG;;;;;;;;;;;;;;;;;aAiBC,OAAO,mBAAmB;;kBAErB,OAAO,kBAAkB;;;eAG5B,OAAO,WAAW;oBACb,OAAO,WAAW;;;CAGpC,eAAe,GAAG;;;;;CAKlB,mBAAmB,GAAG;;;CAGtB,YAAY,GAAG;;;;CAIf,QAAQ,GAAG;;kBAEK,OAAO,kBAAkB;;;oBAGvB,OAAO,mBAAmB;;;CAG5C,OAAO,GAAG;;;;;;;;;;;;;;;eAeG,OAAO,qBAAqB;;;CAGzC,SAAS,GAAG;;sBAEQ,OAAO,WAAW;;;wBAGhB,OAAO,WAAW;gCACV,OAAO,aAAa;;;;CAIlD,UAAU,GAAG;wBACS,OAAO,qBAAqB;kBAClC,OAAO,iBAAiB;;;sBAGpB,OAAO,YAAY;;;;sBAInB,OAAO,aAAa;8BACZ,OAAO,eAAe;;;CAGlD,MAAM,GAAG;;;;;;;;;;qBAUU,OAAO,aAAa;;;aAG5B,OAAO,UAAU;;;yBAGL,OAAO,cAAc;2BACnB,OAAO,cAAc;yBACvB,OAAO,cAAc;;;;;eAK/B,OAAO,oBAAoB;;;;;;;;;CASxC,QAAQA,cAAkB;CAC1B,WAAW,GAAG;kBACE,cAAc,MAAM;qBACjB,OAAO,eAAe;;;CAGzC,YAAY,GAAG;kBACC,cAAc,OAAO;;CAErC,WAAW,GAAG;kBACE,cAAc,MAAM;;qBAEjB,OAAO,eAAe;;;CAGzC,eAAe,GAAG;;;;;;;;;;;;aAYP,OAAO,kBAAkB;;;;;8BAKR,OAAO,cAAc;;;eAGpC,OAAO,UAAU;;;;;;;;CAQ9B,gBAAgB,GAAG;;;;;;;;qCAQgB,OAAO,qBAAqB;;CAE/D,aAAa,GAAG;;;CAGhB,SAAS,GAAG;;aAED,cAAc,OAAO;;;;CAIhC,SAAS,GAAG;;;;;CAKZ,gBAAgB,GAAG;;;;;;;;;;;aAWR,OAAO,kBAAkB;;;;;8BAKR,OAAO,cAAc;;;eAGpC,OAAO,UAAU;;;CAG9B,MAAM,GAAG;;;;aAIE,OAAO,kBAAkB;;CAEpC,UAAU,GAAG;;;;;;;;;;;;CAYb,kBAAkB,GAAG;;;;;CAKrB,gBAAgB,GAAG;;;;;AAKrB,EAAE;AAEF,MAAa,eAAe,IAAI,CAAC,OAAO,MAAM,OAAO,OAAO,GAAG;CAC7D,iBAAiB;EACf,QAAQ;EACR,MAAM;EACN,SAAS;CACX;CACA,UAAU;EACR,QAAQ;GACN,OAAO;GACP,MAAM,OAAO;EACf;EACA,MAAM;GACJ,OAAO,OAAO;GACd,QAAQ,OAAO;GACf,OAAO,OAAO;EAChB;EACA,SAAS;GACP,YAAY,OAAO;GACnB,QAAQ,OAAO;GACf,UAAU,OAAO;EACnB;CACF;AACF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CSSProperties, ComponentProps, ReactNode, Ref } from "react";
|
|
1
|
+
import { CSSProperties, ComponentProps, KeyboardEvent, ReactNode, Ref } from "react";
|
|
2
2
|
import { Input } from "@base-ui/react/input";
|
|
3
3
|
import { NumberField } from "@base-ui/react/number-field";
|
|
4
4
|
import { OTPField } from "@base-ui/react/otp-field";
|
|
@@ -17,11 +17,14 @@ interface InputStyles {
|
|
|
17
17
|
}
|
|
18
18
|
type BaseInputProps = Omit<ComponentProps<typeof Input>, 'size' | 'prefix' | 'render' | 'className' | 'style'>;
|
|
19
19
|
interface InputProps extends BaseInputProps {
|
|
20
|
+
allowClear?: boolean;
|
|
20
21
|
className?: string;
|
|
21
22
|
/**
|
|
22
23
|
* Custom class names for each part
|
|
23
24
|
*/
|
|
24
25
|
classNames?: InputClassNames;
|
|
26
|
+
onClear?: () => void;
|
|
27
|
+
onPressEnter?: (event: KeyboardEvent<HTMLInputElement>) => void;
|
|
25
28
|
/**
|
|
26
29
|
* Prefix node rendered before the input
|
|
27
30
|
*/
|
|
@@ -60,7 +63,7 @@ interface InputPasswordProps extends Omit<InputProps, 'type'> {
|
|
|
60
63
|
*/
|
|
61
64
|
visibilityToggle?: boolean;
|
|
62
65
|
}
|
|
63
|
-
type BaseNumberFieldProps = Omit<ComponentProps<typeof NumberField.Root>, 'className' | 'style' | 'render' | 'onValueChange' | 'children'>;
|
|
66
|
+
type BaseNumberFieldProps = Omit<ComponentProps<typeof NumberField.Root>, 'className' | 'style' | 'render' | 'onValueChange' | 'children' | 'prefix'>;
|
|
64
67
|
interface InputNumberProps extends BaseNumberFieldProps {
|
|
65
68
|
/**
|
|
66
69
|
* Change value on wheel scrub
|
|
@@ -74,12 +77,16 @@ interface InputNumberProps extends BaseNumberFieldProps {
|
|
|
74
77
|
*/
|
|
75
78
|
controls?: boolean;
|
|
76
79
|
onChange?: (value: number | null) => void;
|
|
80
|
+
onPressEnter?: (event: KeyboardEvent<HTMLInputElement>) => void;
|
|
77
81
|
placeholder?: string;
|
|
82
|
+
precision?: number;
|
|
83
|
+
prefix?: ReactNode;
|
|
78
84
|
ref?: Ref<HTMLInputElement>;
|
|
79
85
|
shadow?: boolean;
|
|
80
86
|
size?: InputSize;
|
|
81
87
|
style?: CSSProperties;
|
|
82
88
|
styles?: Pick<InputStyles, 'input'>;
|
|
89
|
+
suffix?: ReactNode;
|
|
83
90
|
variant?: InputVariant;
|
|
84
91
|
}
|
|
85
92
|
type BaseOTPFieldProps = Omit<ComponentProps<typeof OTPField.Root>, 'className' | 'style' | 'render' | 'onValueChange' | 'children' | 'length'>;
|
|
@@ -103,17 +110,21 @@ type TextAreaAutoSize = boolean | {
|
|
|
103
110
|
minRows?: number;
|
|
104
111
|
};
|
|
105
112
|
interface TextAreaProps extends Omit<ComponentProps<'textarea'>, 'prefix'>, Pick<InputProps, 'shadow' | 'variant'> {
|
|
113
|
+
allowClear?: boolean;
|
|
106
114
|
/**
|
|
107
115
|
* Auto grow with content, optionally bounded by minRows/maxRows
|
|
108
116
|
*/
|
|
109
117
|
autoSize?: TextAreaAutoSize;
|
|
110
118
|
classNames?: Pick<InputClassNames, 'input'>;
|
|
119
|
+
onClear?: () => void;
|
|
120
|
+
onPressEnter?: (event: KeyboardEvent<HTMLTextAreaElement>) => void;
|
|
111
121
|
ref?: Ref<HTMLTextAreaElement>;
|
|
112
122
|
/**
|
|
113
123
|
* Allow manual resize
|
|
114
124
|
* @default false
|
|
115
125
|
*/
|
|
116
126
|
resize?: boolean;
|
|
127
|
+
showCount?: boolean;
|
|
117
128
|
styles?: Pick<InputStyles, 'input'>;
|
|
118
129
|
}
|
|
119
130
|
//#endregion
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { styles } from "./style.mjs";
|
|
3
|
+
import ListRow from "./ListRow.mjs";
|
|
4
|
+
import { memo, useState } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import { cx } from "antd-style";
|
|
7
|
+
//#region src/base-ui/List/List.tsx
|
|
8
|
+
const isDivider = (item) => item.type === "divider";
|
|
9
|
+
const variantClass = {
|
|
10
|
+
borderless: void 0,
|
|
11
|
+
filled: styles.filled,
|
|
12
|
+
outlined: styles.outlined
|
|
13
|
+
};
|
|
14
|
+
const List = memo(({ activeKey, className, classNames, compact = false, defaultActiveKey, items, onActiveChange, onClick, ref, selectable = false, styles: customStyles, variant = "borderless", ...rest }) => {
|
|
15
|
+
const [innerKey, setInnerKey] = useState(defaultActiveKey);
|
|
16
|
+
const currentKey = activeKey === void 0 ? innerKey : activeKey;
|
|
17
|
+
const handleSelect = (item, domEvent) => {
|
|
18
|
+
const info = {
|
|
19
|
+
domEvent,
|
|
20
|
+
item,
|
|
21
|
+
key: item.key
|
|
22
|
+
};
|
|
23
|
+
item.onClick?.(info);
|
|
24
|
+
onClick?.(info);
|
|
25
|
+
if (!selectable || item.key === currentKey) return;
|
|
26
|
+
if (activeKey === void 0) setInnerKey(item.key);
|
|
27
|
+
onActiveChange?.(item.key);
|
|
28
|
+
};
|
|
29
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
30
|
+
className: cx(styles.root, variantClass[variant], compact && styles.compact, className),
|
|
31
|
+
ref,
|
|
32
|
+
role: "list",
|
|
33
|
+
...rest,
|
|
34
|
+
children: items.map((item, index) => isDivider(item) ? /* @__PURE__ */ jsx("li", {
|
|
35
|
+
className: styles.divider,
|
|
36
|
+
role: "separator"
|
|
37
|
+
}, item.key ?? `divider-${index}`) : /* @__PURE__ */ jsx(ListRow, {
|
|
38
|
+
active: currentKey !== void 0 && currentKey !== null && item.key === currentKey,
|
|
39
|
+
classNames,
|
|
40
|
+
item,
|
|
41
|
+
styles: customStyles,
|
|
42
|
+
onSelect: handleSelect
|
|
43
|
+
}, item.key))
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
List.displayName = "List";
|
|
47
|
+
//#endregion
|
|
48
|
+
export { List as default };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=List.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.mjs","names":[],"sources":["../../../src/base-ui/List/List.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { type Key, memo, type MouseEvent, useState } from 'react';\n\nimport ListRow from './ListRow';\nimport { styles } from './style';\nimport type { ListDividerType, ListItem, ListItemType, ListProps } from './type';\n\nconst isDivider = (item: ListItem): item is ListDividerType => item.type === 'divider';\n\nconst variantClass = {\n borderless: undefined,\n filled: styles.filled,\n outlined: styles.outlined,\n};\n\nconst List = memo<ListProps>(\n ({\n activeKey,\n className,\n classNames,\n compact = false,\n defaultActiveKey,\n items,\n onActiveChange,\n onClick,\n ref,\n selectable = false,\n styles: customStyles,\n variant = 'borderless',\n ...rest\n }) => {\n const [innerKey, setInnerKey] = useState<Key | undefined>(defaultActiveKey);\n const currentKey = activeKey === undefined ? innerKey : activeKey;\n\n const handleSelect = (item: ListItemType, domEvent: MouseEvent<HTMLElement>) => {\n const info = { domEvent, item, key: item.key };\n item.onClick?.(info);\n onClick?.(info);\n\n if (!selectable || item.key === currentKey) return;\n if (activeKey === undefined) setInnerKey(item.key);\n onActiveChange?.(item.key);\n };\n\n return (\n <ul\n className={cx(styles.root, variantClass[variant], compact && styles.compact, className)}\n ref={ref}\n role=\"list\"\n {...rest}\n >\n {items.map((item, index) =>\n isDivider(item) ? (\n <li className={styles.divider} key={item.key ?? `divider-${index}`} role=\"separator\" />\n ) : (\n <ListRow\n active={currentKey !== undefined && currentKey !== null && item.key === currentKey}\n classNames={classNames}\n item={item}\n key={item.key}\n styles={customStyles}\n onSelect={handleSelect}\n />\n ),\n )}\n </ul>\n );\n },\n);\n\nList.displayName = 'List';\n\nexport default List;\n"],"mappings":";;;;;;;AASA,MAAM,aAAa,SAA4C,KAAK,SAAS;AAE7E,MAAM,eAAe;CACnB,YAAY,KAAA;CACZ,QAAQ,OAAO;CACf,UAAU,OAAO;AACnB;AAEA,MAAM,OAAO,MACV,EACC,WACA,WACA,YACA,UAAU,OACV,kBACA,OACA,gBACA,SACA,KACA,aAAa,OACb,QAAQ,cACR,UAAU,cACV,GAAG,WACC;CACJ,MAAM,CAAC,UAAU,eAAe,SAA0B,gBAAgB;CAC1E,MAAM,aAAa,cAAc,KAAA,IAAY,WAAW;CAExD,MAAM,gBAAgB,MAAoB,aAAsC;EAC9E,MAAM,OAAO;GAAE;GAAU;GAAM,KAAK,KAAK;EAAI;EAC7C,KAAK,UAAU,IAAI;EACnB,UAAU,IAAI;EAEd,IAAI,CAAC,cAAc,KAAK,QAAQ,YAAY;EAC5C,IAAI,cAAc,KAAA,GAAW,YAAY,KAAK,GAAG;EACjD,iBAAiB,KAAK,GAAG;CAC3B;CAEA,OACE,oBAAC,MAAD;EACE,WAAW,GAAG,OAAO,MAAM,aAAa,UAAU,WAAW,OAAO,SAAS,SAAS;EACjF;EACL,MAAK;EACL,GAAI;EAEH,UAAA,MAAM,KAAK,MAAM,UAChB,UAAU,IAAI,IACZ,oBAAC,MAAD;GAAI,WAAW,OAAO;GAA8C,MAAK;EAAa,GAAlD,KAAK,OAAO,WAAW,OAA2B,IAEtF,oBAAC,SAAD;GACE,QAAQ,eAAe,KAAA,KAAa,eAAe,QAAQ,KAAK,QAAQ;GAC5D;GACN;GAEN,QAAQ;GACR,UAAU;EACX,GAHM,KAAK,GAGX,CAEL;CACE,CAAA;AAER,CACF;AAEA,KAAK,cAAc"}
|
|
@@ -0,0 +1,74 @@
|
|
|
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 { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { cx } from "antd-style";
|
|
8
|
+
//#region src/base-ui/List/ListRow.tsx
|
|
9
|
+
const ListRow = memo(({ active, classNames, item, onSelect, styles: customStyles }) => {
|
|
10
|
+
const { actions, avatar, danger, description, disabled, extra, href, icon, label, showAction } = item;
|
|
11
|
+
const handleClick = (event) => {
|
|
12
|
+
if (disabled) {
|
|
13
|
+
event.preventDefault();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
onSelect(item, event);
|
|
17
|
+
};
|
|
18
|
+
const rowClassName = cx(styles.row, active && styles.active, danger && styles.danger, disabled && styles.disabled, classNames?.item, item.className);
|
|
19
|
+
const rowStyle = {
|
|
20
|
+
...customStyles?.item,
|
|
21
|
+
...item.style
|
|
22
|
+
};
|
|
23
|
+
const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
24
|
+
avatar ?? (icon ? /* @__PURE__ */ jsx(Icon, {
|
|
25
|
+
icon,
|
|
26
|
+
size: 16
|
|
27
|
+
}) : null),
|
|
28
|
+
/* @__PURE__ */ jsxs("span", {
|
|
29
|
+
className: styles.body,
|
|
30
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
31
|
+
className: cx(styles.label, classNames?.label),
|
|
32
|
+
style: customStyles?.label,
|
|
33
|
+
children: label
|
|
34
|
+
}), description != null && /* @__PURE__ */ jsx("span", {
|
|
35
|
+
className: cx(styles.description, classNames?.description),
|
|
36
|
+
style: customStyles?.description,
|
|
37
|
+
children: description
|
|
38
|
+
})]
|
|
39
|
+
}),
|
|
40
|
+
extra != null && /* @__PURE__ */ jsx("span", {
|
|
41
|
+
className: cx(styles.extra, classNames?.extra),
|
|
42
|
+
style: customStyles?.extra,
|
|
43
|
+
children: extra
|
|
44
|
+
})
|
|
45
|
+
] });
|
|
46
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
47
|
+
className: cx(styles.item, showAction && styles.showAction),
|
|
48
|
+
children: [href && !disabled ? /* @__PURE__ */ jsx(A, {
|
|
49
|
+
"aria-current": active ? "page" : void 0,
|
|
50
|
+
className: rowClassName,
|
|
51
|
+
href,
|
|
52
|
+
style: rowStyle,
|
|
53
|
+
onClick: handleClick,
|
|
54
|
+
children: content
|
|
55
|
+
}) : /* @__PURE__ */ jsx("button", {
|
|
56
|
+
"aria-current": active ? "true" : void 0,
|
|
57
|
+
"aria-disabled": disabled || void 0,
|
|
58
|
+
className: rowClassName,
|
|
59
|
+
style: rowStyle,
|
|
60
|
+
type: "button",
|
|
61
|
+
onClick: handleClick,
|
|
62
|
+
children: content
|
|
63
|
+
}), actions != null && /* @__PURE__ */ jsx("span", {
|
|
64
|
+
className: cx(styles.actions, classNames?.actions),
|
|
65
|
+
style: customStyles?.actions,
|
|
66
|
+
children: actions
|
|
67
|
+
})]
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
ListRow.displayName = "ListRow";
|
|
71
|
+
//#endregion
|
|
72
|
+
export { ListRow as default };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=ListRow.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListRow.mjs","names":[],"sources":["../../../src/base-ui/List/ListRow.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo, type MouseEvent } from 'react';\n\nimport A from '@/A';\nimport Icon from '@/Icon';\n\nimport { styles } from './style';\nimport type { ListItemType, ListProps } from './type';\n\ninterface ListRowProps {\n active: boolean;\n classNames?: ListProps['classNames'];\n item: ListItemType;\n onSelect: (item: ListItemType, event: MouseEvent<HTMLElement>) => void;\n styles?: ListProps['styles'];\n}\n\nconst ListRow = memo<ListRowProps>(\n ({ active, classNames, item, onSelect, styles: customStyles }) => {\n const { actions, avatar, danger, description, disabled, extra, href, icon, label, showAction } =\n item;\n\n const handleClick = (event: MouseEvent<HTMLElement>) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n onSelect(item, event);\n };\n\n const rowClassName = cx(\n styles.row,\n active && styles.active,\n danger && styles.danger,\n disabled && styles.disabled,\n classNames?.item,\n item.className,\n );\n const rowStyle = { ...customStyles?.item, ...item.style };\n\n const content = (\n <>\n {avatar ?? (icon ? <Icon icon={icon} size={16} /> : null)}\n <span className={styles.body}>\n <span className={cx(styles.label, classNames?.label)} style={customStyles?.label}>\n {label}\n </span>\n {description != null && (\n <span\n className={cx(styles.description, classNames?.description)}\n style={customStyles?.description}\n >\n {description}\n </span>\n )}\n </span>\n {extra != null && (\n <span className={cx(styles.extra, classNames?.extra)} style={customStyles?.extra}>\n {extra}\n </span>\n )}\n </>\n );\n\n return (\n <li className={cx(styles.item, showAction && styles.showAction)}>\n {href && !disabled ? (\n <A\n aria-current={active ? 'page' : undefined}\n className={rowClassName}\n href={href}\n style={rowStyle}\n onClick={handleClick}\n >\n {content}\n </A>\n ) : (\n <button\n aria-current={active ? 'true' : undefined}\n aria-disabled={disabled || undefined}\n className={rowClassName}\n style={rowStyle}\n type=\"button\"\n onClick={handleClick}\n >\n {content}\n </button>\n )}\n {actions != null && (\n <span className={cx(styles.actions, classNames?.actions)} style={customStyles?.actions}>\n {actions}\n </span>\n )}\n </li>\n );\n },\n);\n\nListRow.displayName = 'ListRow';\n\nexport default ListRow;\n"],"mappings":";;;;;;;;AAmBA,MAAM,UAAU,MACb,EAAE,QAAQ,YAAY,MAAM,UAAU,QAAQ,mBAAmB;CAChE,MAAM,EAAE,SAAS,QAAQ,QAAQ,aAAa,UAAU,OAAO,MAAM,MAAM,OAAO,eAChF;CAEF,MAAM,eAAe,UAAmC;EACtD,IAAI,UAAU;GACZ,MAAM,eAAe;GACrB;EACF;EACA,SAAS,MAAM,KAAK;CACtB;CAEA,MAAM,eAAe,GACnB,OAAO,KACP,UAAU,OAAO,QACjB,UAAU,OAAO,QACjB,YAAY,OAAO,UACnB,YAAY,MACZ,KAAK,SACP;CACA,MAAM,WAAW;EAAE,GAAG,cAAc;EAAM,GAAG,KAAK;CAAM;CAExD,MAAM,UACJ,qBAAA,YAAA,EAAA,UAAA;EACG,WAAW,OAAO,oBAAC,MAAD;GAAY;GAAM,MAAM;EAAK,CAAA,IAAI;EACpD,qBAAC,QAAD;GAAM,WAAW,OAAO;GAAxB,UAAA,CACE,oBAAC,QAAD;IAAM,WAAW,GAAG,OAAO,OAAO,YAAY,KAAK;IAAG,OAAO,cAAc;IACxE,UAAA;GACG,CAAA,GACL,eAAe,QACd,oBAAC,QAAD;IACE,WAAW,GAAG,OAAO,aAAa,YAAY,WAAW;IACzD,OAAO,cAAc;IAEpB,UAAA;GACG,CAAA,CAEJ;;EACL,SAAS,QACR,oBAAC,QAAD;GAAM,WAAW,GAAG,OAAO,OAAO,YAAY,KAAK;GAAG,OAAO,cAAc;GACxE,UAAA;EACG,CAAA;CAER,EAAA,CAAA;CAGJ,OACE,qBAAC,MAAD;EAAI,WAAW,GAAG,OAAO,MAAM,cAAc,OAAO,UAAU;EAA9D,UAAA,CACG,QAAQ,CAAC,WACR,oBAAC,GAAD;GACE,gBAAc,SAAS,SAAS,KAAA;GAChC,WAAW;GACL;GACN,OAAO;GACP,SAAS;GAER,UAAA;EACA,CAAA,IAEH,oBAAC,UAAD;GACE,gBAAc,SAAS,SAAS,KAAA;GAChC,iBAAe,YAAY,KAAA;GAC3B,WAAW;GACX,OAAO;GACP,MAAK;GACL,SAAS;GAER,UAAA;EACK,CAAA,GAET,WAAW,QACV,oBAAC,QAAD;GAAM,WAAW,GAAG,OAAO,SAAS,YAAY,OAAO;GAAG,OAAO,cAAc;GAC5E,UAAA;EACG,CAAA,CAEN;;AAER,CACF;AAEA,QAAQ,cAAc"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ListClickInfo, ListDividerType, ListItem, ListItemType, ListProps, ListSemanticName } from "./type.mjs";
|
|
2
|
+
import List from "./List.mjs";
|
|
3
|
+
export { type ListClickInfo, type ListDividerType, type ListItem, type ListItemType, type ListProps, type ListSemanticName, List as default };
|