@lobehub/ui 6.0.0-beta.6 → 6.0.0-beta.8
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 +3 -3
- package/es/Accordion/Accordion.mjs.map +1 -1
- package/es/Accordion/atoms.mjs +2 -2
- package/es/Accordion/atoms.mjs.map +1 -1
- package/es/Accordion/style.d.mts +1 -1
- package/es/ActionIcon/ActionIcon.mjs +2 -2
- package/es/ActionIcon/ActionIcon.mjs.map +1 -1
- package/es/Alert/Alert.mjs +5 -5
- package/es/Alert/Alert.mjs.map +1 -1
- package/es/AutoComplete/AutoComplete.mjs +5 -5
- package/es/AutoComplete/AutoComplete.mjs.map +1 -1
- package/es/AutoComplete/style.mjs +2 -2
- package/es/AutoComplete/style.mjs.map +1 -1
- package/es/Avatar/Avatar.mjs +2 -2
- package/es/Avatar/Avatar.mjs.map +1 -1
- package/es/Avatar/AvatarGroup/index.mjs +2 -2
- package/es/Avatar/AvatarGroup/index.mjs.map +1 -1
- package/es/Breadcrumb/Breadcrumb.mjs +2 -2
- package/es/Breadcrumb/Breadcrumb.mjs.map +1 -1
- package/es/Button/Button.mjs +1 -1
- package/es/Button/Button.mjs.map +1 -1
- package/es/Button/style.d.mts +8 -1
- package/es/Button/style.mjs +41 -18
- package/es/Button/style.mjs.map +1 -1
- package/es/Checkbox/Checkbox.mjs +3 -3
- package/es/Checkbox/Checkbox.mjs.map +1 -1
- package/es/CodeDiff/DiffPanel.mjs +4 -4
- package/es/CodeDiff/DiffPanel.mjs.map +1 -1
- package/es/CodeEditor/CodeEditor.mjs +4 -4
- package/es/CodeEditor/CodeEditor.mjs.map +1 -1
- package/es/ColorPicker/ColorInputs.mjs +136 -0
- package/es/ColorPicker/ColorInputs.mjs.map +1 -0
- package/es/ColorPicker/ColorPanel.mjs +145 -0
- package/es/ColorPicker/ColorPanel.mjs.map +1 -0
- package/es/ColorPicker/ColorPicker.mjs +62 -199
- package/es/ColorPicker/ColorPicker.mjs.map +1 -1
- package/es/ColorPicker/SaturationArea.mjs +2 -1
- package/es/ColorPicker/SaturationArea.mjs.map +1 -1
- package/es/ColorPicker/Swatch.mjs +24 -0
- package/es/ColorPicker/Swatch.mjs.map +1 -0
- package/es/ColorPicker/Swatches.mjs +66 -0
- package/es/ColorPicker/Swatches.mjs.map +1 -0
- package/es/ColorPicker/Trigger.mjs +112 -0
- package/es/ColorPicker/Trigger.mjs.map +1 -0
- package/es/ColorPicker/color.mjs +25 -1
- package/es/ColorPicker/color.mjs.map +1 -1
- package/es/ColorPicker/recent.mjs +25 -0
- package/es/ColorPicker/recent.mjs.map +1 -0
- package/es/ColorPicker/style.mjs +269 -70
- package/es/ColorPicker/style.mjs.map +1 -1
- package/es/ColorPicker/type.d.mts +15 -0
- package/es/ColorSwatches/type.d.mts +2 -2
- package/es/ContextMenu/ContextMenuHost.mjs +2 -2
- package/es/ContextMenu/ContextMenuHost.mjs.map +1 -1
- package/es/ContextMenu/ContextMenuTrigger.mjs +2 -2
- package/es/ContextMenu/ContextMenuTrigger.mjs.map +1 -1
- package/es/ContextMenu/renderItems.mjs +3 -3
- package/es/ContextMenu/renderItems.mjs.map +1 -1
- package/es/DatePicker/DatePicker.d.mts +7 -2
- package/es/DatePicker/DatePicker.mjs +13 -85
- package/es/DatePicker/DatePicker.mjs.map +1 -1
- package/es/DatePicker/DateRangePicker.d.mts +3 -2
- package/es/DatePicker/DateRangePicker.mjs +3 -125
- package/es/DatePicker/DateRangePicker.mjs.map +1 -1
- package/es/DatePicker/PurePanel.mjs +65 -0
- package/es/DatePicker/PurePanel.mjs.map +1 -0
- package/es/DatePicker/RangePicker.mjs +115 -0
- package/es/DatePicker/RangePicker.mjs.map +1 -0
- package/es/DatePicker/SinglePicker.mjs +132 -0
- package/es/DatePicker/SinglePicker.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Popup/Footer.mjs +57 -0
- package/es/DatePicker/core/PickerInput/Popup/Footer.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Popup/PopupPanel.mjs +57 -0
- package/es/DatePicker/core/PickerInput/Popup/PopupPanel.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Popup/PresetPanel.mjs +29 -0
- package/es/DatePicker/core/PickerInput/Popup/PresetPanel.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Popup/index.mjs +133 -0
- package/es/DatePicker/core/PickerInput/Popup/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/RangePicker.d.mts +51 -0
- package/es/DatePicker/core/PickerInput/RangePicker.mjs +343 -0
- package/es/DatePicker/core/PickerInput/RangePicker.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/ClearIcon.mjs +27 -0
- package/es/DatePicker/core/PickerInput/Selector/ClearIcon.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/Icon.mjs +19 -0
- package/es/DatePicker/core/PickerInput/Selector/Icon.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/Input.mjs +237 -0
- package/es/DatePicker/core/PickerInput/Selector/Input.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/MaskFormat.mjs +70 -0
- package/es/DatePicker/core/PickerInput/Selector/MaskFormat.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/RangeSelector.d.mts +8 -0
- package/es/DatePicker/core/PickerInput/Selector/RangeSelector.mjs +136 -0
- package/es/DatePicker/core/PickerInput/Selector/RangeSelector.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/HoverSelector.mjs +28 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/HoverSelector.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/MultipleDates.mjs +69 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/MultipleDates.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/index.mjs +111 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useClearIcon.mjs +18 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useClearIcon.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useInputProps.mjs +108 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useInputProps.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useRootProps.mjs +11 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useRootProps.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/util.mjs +20 -0
- package/es/DatePicker/core/PickerInput/Selector/util.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/SinglePicker.d.mts +55 -0
- package/es/DatePicker/core/PickerInput/SinglePicker.mjs +318 -0
- package/es/DatePicker/core/PickerInput/SinglePicker.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/context.mjs +7 -0
- package/es/DatePicker/core/PickerInput/context.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useCellRender.mjs +30 -0
- package/es/DatePicker/core/PickerInput/hooks/useCellRender.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useDelayState.mjs +37 -0
- package/es/DatePicker/core/PickerInput/hooks/useDelayState.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useDisabledBoundary.mjs +18 -0
- package/es/DatePicker/core/PickerInput/hooks/useDisabledBoundary.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFieldFormat.mjs +20 -0
- package/es/DatePicker/core/PickerInput/hooks/useFieldFormat.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFieldsInvalidate.mjs +31 -0
- package/es/DatePicker/core/PickerInput/hooks/useFieldsInvalidate.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFilledProps.mjs +98 -0
- package/es/DatePicker/core/PickerInput/hooks/useFilledProps.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFocusEvents.mjs +41 -0
- package/es/DatePicker/core/PickerInput/hooks/useFocusEvents.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFocusLock.mjs +34 -0
- package/es/DatePicker/core/PickerInput/hooks/useFocusLock.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useHoverStore.mjs +35 -0
- package/es/DatePicker/core/PickerInput/hooks/useHoverStore.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useInputReadOnly.mjs +9 -0
- package/es/DatePicker/core/PickerInput/hooks/useInputReadOnly.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useInvalidate.mjs +36 -0
- package/es/DatePicker/core/PickerInput/hooks/useInvalidate.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useLockEffect.mjs +27 -0
- package/es/DatePicker/core/PickerInput/hooks/useLockEffect.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useOpen.mjs +18 -0
- package/es/DatePicker/core/PickerInput/hooks/useOpen.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/usePickerRef.mjs +19 -0
- package/es/DatePicker/core/PickerInput/hooks/usePickerRef.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/usePresets.mjs +20 -0
- package/es/DatePicker/core/PickerInput/hooks/usePresets.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeDisabledDate.mjs +24 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeDisabledDate.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangePickerValue.mjs +107 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangePickerValue.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeValue.mjs +144 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeValue.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeValueChange.mjs +219 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeValueChange.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useShowNow.mjs +11 -0
- package/es/DatePicker/core/PickerInput/hooks/useShowNow.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/DatePanel/index.mjs +131 -0
- package/es/DatePicker/core/PickerPanel/DatePanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/DateTimePanel/index.mjs +35 -0
- package/es/DatePicker/core/PickerPanel/DateTimePanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/DecadePanel/index.mjs +84 -0
- package/es/DatePicker/core/PickerPanel/DecadePanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/MonthPanel/index.mjs +73 -0
- package/es/DatePicker/core/PickerPanel/MonthPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/PanelBody.mjs +95 -0
- package/es/DatePicker/core/PickerPanel/PanelBody.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/PanelHeader.mjs +130 -0
- package/es/DatePicker/core/PickerPanel/PanelHeader.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/QuarterPanel/index.mjs +64 -0
- package/es/DatePicker/core/PickerPanel/QuarterPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/ClockDial.mjs +108 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/ClockDial.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/geometry.mjs +44 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/geometry.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/index.mjs +157 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/TimeColumn.mjs +100 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/TimeColumn.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/index.mjs +71 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useScrollTo.mjs +62 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useScrollTo.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useTimeState.mjs +200 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useTimeState.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/util.mjs +25 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/util.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/index.mjs +31 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/WeekPanel/index.mjs +34 -0
- package/es/DatePicker/core/PickerPanel/WeekPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/YearPanel/index.mjs +92 -0
- package/es/DatePicker/core/PickerPanel/YearPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/context.mjs +48 -0
- package/es/DatePicker/core/PickerPanel/context.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/index.d.mts +1 -0
- package/es/DatePicker/core/PickerPanel/index.mjs +175 -0
- package/es/DatePicker/core/PickerPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPopup.mjs +118 -0
- package/es/DatePicker/core/PickerPopup.mjs.map +1 -0
- package/es/DatePicker/core/generate/dayjs.mjs +109 -0
- package/es/DatePicker/core/generate/dayjs.mjs.map +1 -0
- package/es/DatePicker/core/generate/index.d.mts +40 -0
- package/es/DatePicker/core/hooks/react.mjs +58 -0
- package/es/DatePicker/core/hooks/react.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useLocale.mjs +51 -0
- package/es/DatePicker/core/hooks/useLocale.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useSemantic.mjs +20 -0
- package/es/DatePicker/core/hooks/useSemantic.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useSyncState.mjs +25 -0
- package/es/DatePicker/core/hooks/useSyncState.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useTimeConfig.mjs +173 -0
- package/es/DatePicker/core/hooks/useTimeConfig.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useTimeInfo.mjs +110 -0
- package/es/DatePicker/core/hooks/useTimeInfo.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useToggleDates.mjs +21 -0
- package/es/DatePicker/core/hooks/useToggleDates.mjs.map +1 -0
- package/es/DatePicker/core/index.d.mts +5 -0
- package/es/DatePicker/core/index.mjs +9 -0
- package/es/DatePicker/core/index.mjs.map +1 -0
- package/es/DatePicker/core/interface.d.mts +325 -0
- package/es/DatePicker/core/locale/common.mjs +11 -0
- package/es/DatePicker/core/locale/common.mjs.map +1 -0
- package/es/DatePicker/core/locale/en_US.mjs +39 -0
- package/es/DatePicker/core/locale/en_US.mjs.map +1 -0
- package/es/DatePicker/core/utils/common.mjs +73 -0
- package/es/DatePicker/core/utils/common.mjs.map +1 -0
- package/es/DatePicker/core/utils/dateUtil.mjs +106 -0
- package/es/DatePicker/core/utils/dateUtil.mjs.map +1 -0
- package/es/DatePicker/core/utils/miscUtil.mjs +46 -0
- package/es/DatePicker/core/utils/miscUtil.mjs.map +1 -0
- package/es/DatePicker/core/utils/uiUtil.mjs +9 -0
- package/es/DatePicker/core/utils/uiUtil.mjs.map +1 -0
- package/es/DatePicker/generateConfig.mjs +12 -0
- package/es/DatePicker/generateConfig.mjs.map +1 -0
- package/es/DatePicker/generatePicker.d.mts +12 -0
- package/es/DatePicker/generatePicker.mjs +22 -0
- package/es/DatePicker/generatePicker.mjs.map +1 -0
- package/es/DatePicker/index.d.mts +6 -3
- package/es/DatePicker/index.mjs +3 -1
- package/es/DatePicker/locale.d.mts +15 -0
- package/es/DatePicker/locale.mjs +143 -0
- package/es/DatePicker/locale.mjs.map +1 -0
- package/es/DatePicker/semantic.mjs +29 -0
- package/es/DatePicker/semantic.mjs.map +1 -0
- package/es/DatePicker/style.mjs +3 -155
- package/es/DatePicker/style.mjs.map +1 -1
- package/es/DatePicker/type.d.mts +268 -27
- package/es/DatePicker/usePanelKeyboard.mjs +230 -0
- package/es/DatePicker/usePanelKeyboard.mjs.map +1 -0
- package/es/DatePicker/usePickerShared.mjs +106 -0
- package/es/DatePicker/usePickerShared.mjs.map +1 -0
- package/es/DatePicker/usePresetActive.mjs +48 -0
- package/es/DatePicker/usePresetActive.mjs.map +1 -0
- package/es/DraggablePanel/atoms.mjs +5 -5
- package/es/DraggablePanel/atoms.mjs.map +1 -1
- package/es/DraggableSideNav/DraggableSideNav.mjs +3 -3
- package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
- package/es/Drawer/Drawer.mjs +2 -2
- package/es/Drawer/Drawer.mjs.map +1 -1
- package/es/Drawer/atoms.mjs +6 -6
- package/es/Drawer/atoms.mjs.map +1 -1
- package/es/DropdownMenu/atoms.mjs +22 -22
- package/es/DropdownMenu/atoms.mjs.map +1 -1
- package/es/DropdownMenu/sharedStyle.mjs +2 -2
- package/es/DropdownMenu/sharedStyle.mjs.map +1 -1
- package/es/EditableText/EditableText.mjs +1 -1
- package/es/EditorSlashMenu/atoms.mjs +12 -12
- package/es/EditorSlashMenu/atoms.mjs.map +1 -1
- package/es/EmojiPicker/EmojiPicker.mjs +7 -7
- package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
- package/es/EmojiPicker/loadEmojiData.mjs +6 -0
- package/es/EmojiPicker/loadEmojiData.mjs.map +1 -0
- package/es/FloatingPanel/FloatingPanel.mjs +2 -2
- package/es/FloatingPanel/FloatingPanel.mjs.map +1 -1
- package/es/FormKit/List.mjs +2 -2
- package/es/FormKit/List.mjs.map +1 -1
- package/es/Highlighter/FullFeatured.mjs +2 -2
- package/es/Highlighter/FullFeatured.mjs.map +1 -1
- package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs +2 -2
- package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs.map +1 -1
- package/es/Highlighter/SyntaxHighlighter/index.mjs +4 -4
- package/es/Highlighter/SyntaxHighlighter/index.mjs.map +1 -1
- package/es/Highlighter/style.mjs +2 -2
- package/es/Highlighter/style.mjs.map +1 -1
- package/es/HtmlPreview/HtmlPreview.mjs +2 -2
- package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
- package/es/Icon/Icon.mjs +2 -2
- package/es/Icon/Icon.mjs.map +1 -1
- package/es/List/ListRow.mjs +3 -3
- package/es/List/ListRow.mjs.map +1 -1
- package/es/Markdown/Markdown.mjs +2 -2
- package/es/Markdown/Markdown.mjs.map +1 -1
- package/es/Markdown/Typography.mjs +2 -2
- package/es/Markdown/Typography.mjs.map +1 -1
- package/es/Mermaid/FullFeatured.mjs +2 -2
- package/es/Mermaid/FullFeatured.mjs.map +1 -1
- package/es/Mermaid/SyntaxMermaid/index.mjs +4 -4
- package/es/Mermaid/SyntaxMermaid/index.mjs.map +1 -1
- package/es/Modal/atoms.mjs +6 -6
- package/es/Modal/atoms.mjs.map +1 -1
- package/es/Pagination/Pagination.mjs +181 -41
- package/es/Pagination/Pagination.mjs.map +1 -1
- package/es/Pagination/helpers.mjs +3 -3
- package/es/Pagination/helpers.mjs.map +1 -1
- package/es/Pagination/index.d.mts +2 -2
- package/es/Pagination/marker.stylex.mjs +9 -0
- package/es/Pagination/marker.stylex.mjs.map +1 -0
- package/es/Pagination/style.mjs +74 -4
- package/es/Pagination/style.mjs.map +1 -1
- package/es/Pagination/type.d.mts +41 -3
- package/es/Popover/PopoverInGroup.mjs +2 -2
- package/es/Popover/PopoverInGroup.mjs.map +1 -1
- package/es/Popover/atoms.mjs +6 -6
- package/es/Popover/atoms.mjs.map +1 -1
- package/es/ProTable/ProTable.d.mts +11 -0
- package/es/ProTable/ProTable.mjs +208 -0
- package/es/ProTable/ProTable.mjs.map +1 -0
- package/es/ProTable/hooks/useColumnRequest.mjs +55 -0
- package/es/ProTable/hooks/useColumnRequest.mjs.map +1 -0
- package/es/ProTable/hooks/useColumnsState.mjs +37 -0
- package/es/ProTable/hooks/useColumnsState.mjs.map +1 -0
- package/es/ProTable/hooks/useDelayedFlag.mjs +18 -0
- package/es/ProTable/hooks/useDelayedFlag.mjs.map +1 -0
- package/es/ProTable/hooks/useDensity.mjs +15 -0
- package/es/ProTable/hooks/useDensity.mjs.map +1 -0
- package/es/ProTable/hooks/useFetchData.mjs +97 -0
- package/es/ProTable/hooks/useFetchData.mjs.map +1 -0
- package/es/ProTable/hooks/useFullscreen.mjs +22 -0
- package/es/ProTable/hooks/useFullscreen.mjs.map +1 -0
- package/es/ProTable/hooks/usePageInfo.mjs +35 -0
- package/es/ProTable/hooks/usePageInfo.mjs.map +1 -0
- package/es/ProTable/hooks/useProColumns.mjs +123 -0
- package/es/ProTable/hooks/useProColumns.mjs.map +1 -0
- package/es/ProTable/hooks/useProLoading.mjs +19 -0
- package/es/ProTable/hooks/useProLoading.mjs.map +1 -0
- package/es/ProTable/hooks/useProLocale.mjs +22 -0
- package/es/ProTable/hooks/useProLocale.mjs.map +1 -0
- package/es/ProTable/hooks/useProRequest.mjs +137 -0
- package/es/ProTable/hooks/useProRequest.mjs.map +1 -0
- package/es/ProTable/hooks/useRowCache.mjs +11 -0
- package/es/ProTable/hooks/useRowCache.mjs.map +1 -0
- package/es/ProTable/hooks/useSearchForm.mjs +141 -0
- package/es/ProTable/hooks/useSearchForm.mjs.map +1 -0
- package/es/ProTable/hooks/useTableBindings.mjs +39 -0
- package/es/ProTable/hooks/useTableBindings.mjs.map +1 -0
- package/es/ProTable/hooks/useTableSelection.mjs +14 -0
- package/es/ProTable/hooks/useTableSelection.mjs.map +1 -0
- package/es/ProTable/index.d.mts +4 -0
- package/es/ProTable/index.d.ts +1 -0
- package/es/ProTable/index.js +1 -0
- package/es/ProTable/index.mjs +3 -0
- package/es/ProTable/locale.d.mts +15 -0
- package/es/ProTable/locale.mjs +66 -0
- package/es/ProTable/locale.mjs.map +1 -0
- package/es/ProTable/parts/ColumnSetting.mjs +155 -0
- package/es/ProTable/parts/ColumnSetting.mjs.map +1 -0
- package/es/ProTable/parts/FieldControl.mjs +117 -0
- package/es/ProTable/parts/FieldControl.mjs.map +1 -0
- package/es/ProTable/parts/KeywordInput.mjs +19 -0
- package/es/ProTable/parts/KeywordInput.mjs.map +1 -0
- package/es/ProTable/parts/LightFilter.mjs +70 -0
- package/es/ProTable/parts/LightFilter.mjs.map +1 -0
- package/es/ProTable/parts/OptionPopover.mjs +17 -0
- package/es/ProTable/parts/OptionPopover.mjs.map +1 -0
- package/es/ProTable/parts/SearchForm.mjs +180 -0
- package/es/ProTable/parts/SearchForm.mjs.map +1 -0
- package/es/ProTable/parts/SearchSection.mjs +33 -0
- package/es/ProTable/parts/SearchSection.mjs.map +1 -0
- package/es/ProTable/parts/TableAlert.mjs +38 -0
- package/es/ProTable/parts/TableAlert.mjs.map +1 -0
- package/es/ProTable/parts/Toolbar.mjs +50 -0
- package/es/ProTable/parts/Toolbar.mjs.map +1 -0
- package/es/ProTable/parts/ToolbarOptions.mjs +103 -0
- package/es/ProTable/parts/ToolbarOptions.mjs.map +1 -0
- package/es/ProTable/parts/renderValue.mjs +118 -0
- package/es/ProTable/parts/renderValue.mjs.map +1 -0
- package/es/ProTable/style.mjs +278 -0
- package/es/ProTable/style.mjs.map +1 -0
- package/es/ProTable/type.d.mts +397 -0
- package/es/ProTable/utils.mjs +152 -0
- package/es/ProTable/utils.mjs.map +1 -0
- package/es/Radio/Radio.mjs +3 -3
- package/es/Radio/Radio.mjs.map +1 -1
- package/es/ScrollArea/atoms.mjs +4 -4
- package/es/ScrollArea/atoms.mjs.map +1 -1
- package/es/Segmented/Segmented.mjs +3 -3
- package/es/Segmented/Segmented.mjs.map +1 -1
- package/es/Segmented/atoms.mjs +2 -2
- package/es/Segmented/atoms.mjs.map +1 -1
- package/es/Select/Select.mjs +22 -13
- package/es/Select/Select.mjs.map +1 -1
- package/es/Select/atoms.mjs +4 -4
- package/es/Select/atoms.mjs.map +1 -1
- package/es/Select/helpers.mjs +8 -1
- package/es/Select/helpers.mjs.map +1 -1
- package/es/Select/hooks.mjs +8 -4
- package/es/Select/hooks.mjs.map +1 -1
- package/es/Select/renderOptions.mjs +2 -2
- package/es/Select/renderOptions.mjs.map +1 -1
- package/es/Select/type.d.mts +7 -0
- package/es/Switch/Switch.mjs +2 -2
- package/es/Switch/Switch.mjs.map +1 -1
- package/es/Switch/atoms.mjs +2 -2
- package/es/Switch/atoms.mjs.map +1 -1
- package/es/Table/Column.d.mts +8 -0
- package/es/Table/Column.mjs +6 -0
- package/es/Table/Column.mjs.map +1 -0
- package/es/Table/ColumnGroup.d.mts +11 -0
- package/es/Table/ColumnGroup.mjs +6 -0
- package/es/Table/ColumnGroup.mjs.map +1 -0
- package/es/Table/Table.d.mts +16 -2
- package/es/Table/Table.mjs +149 -118
- package/es/Table/Table.mjs.map +1 -1
- package/es/Table/atoms/cells.d.mts +42 -0
- package/es/Table/atoms/cells.mjs +72 -0
- package/es/Table/atoms/cells.mjs.map +1 -0
- package/es/Table/atoms/index.d.mts +3 -0
- package/es/Table/atoms/layout.d.mts +44 -0
- package/es/Table/atoms/layout.mjs +62 -0
- package/es/Table/atoms/layout.mjs.map +1 -0
- package/es/Table/constants.mjs +16 -0
- package/es/Table/constants.mjs.map +1 -0
- package/es/Table/engine/fixed.d.mts +1 -0
- package/es/Table/engine/fixed.mjs +53 -0
- package/es/Table/engine/fixed.mjs.map +1 -0
- package/es/Table/engine/types.d.mts +1 -0
- package/es/Table/engine/useTableEngine.mjs +180 -0
- package/es/Table/engine/useTableEngine.mjs.map +1 -0
- package/es/Table/index.d.mts +7 -2
- package/es/Table/index.mjs +4 -1
- package/es/Table/internal.d.mts +3 -0
- package/es/Table/pipeline/columnUtils.d.mts +5 -0
- package/es/Table/pipeline/columnUtils.mjs +58 -0
- package/es/Table/pipeline/columnUtils.mjs.map +1 -0
- package/es/Table/pipeline/convertChildrenToColumns.mjs +24 -0
- package/es/Table/pipeline/convertChildrenToColumns.mjs.map +1 -0
- package/es/Table/pipeline/normalizeColumns.mjs +140 -0
- package/es/Table/pipeline/normalizeColumns.mjs.map +1 -0
- package/es/Table/pipeline/selectionUtils.d.mts +9 -0
- package/es/Table/pipeline/selectionUtils.mjs +115 -0
- package/es/Table/pipeline/selectionUtils.mjs.map +1 -0
- package/es/Table/pipeline/useBreakpoint.mjs +36 -0
- package/es/Table/pipeline/useBreakpoint.mjs.map +1 -0
- package/es/Table/pipeline/useExpandable.mjs +45 -0
- package/es/Table/pipeline/useExpandable.mjs.map +1 -0
- package/es/Table/pipeline/useFilter.mjs +52 -0
- package/es/Table/pipeline/useFilter.mjs.map +1 -0
- package/es/Table/pipeline/useSelection.mjs +302 -0
- package/es/Table/pipeline/useSelection.mjs.map +1 -0
- package/es/Table/pipeline/useSorter.mjs +146 -0
- package/es/Table/pipeline/useSorter.mjs.map +1 -0
- package/es/Table/pipeline/useTableLocale.mjs +30 -0
- package/es/Table/pipeline/useTableLocale.mjs.map +1 -0
- package/es/Table/pipeline/useTableState.mjs +118 -0
- package/es/Table/pipeline/useTableState.mjs.map +1 -0
- package/es/Table/pipeline/useVirtualLayout.mjs +80 -0
- package/es/Table/pipeline/useVirtualLayout.mjs.map +1 -0
- package/es/Table/render/Body.mjs +150 -0
- package/es/Table/render/Body.mjs.map +1 -0
- package/es/Table/render/BodyCell.mjs +87 -0
- package/es/Table/render/BodyCell.mjs.map +1 -0
- package/es/Table/render/CellShell.mjs +84 -0
- package/es/Table/render/CellShell.mjs.map +1 -0
- package/es/Table/render/ExpandIcon.mjs +28 -0
- package/es/Table/render/ExpandIcon.mjs.map +1 -0
- package/es/Table/render/FilterDropdown.mjs +139 -0
- package/es/Table/render/FilterDropdown.mjs.map +1 -0
- package/es/Table/render/FilterPanel.mjs +152 -0
- package/es/Table/render/FilterPanel.mjs.map +1 -0
- package/es/Table/render/FixedFrost.mjs +113 -0
- package/es/Table/render/FixedFrost.mjs.map +1 -0
- package/es/Table/render/FixedHolder.mjs +51 -0
- package/es/Table/render/FixedHolder.mjs.map +1 -0
- package/es/Table/render/Header.mjs +184 -0
- package/es/Table/render/Header.mjs.map +1 -0
- package/es/Table/render/LoadingSkeleton.mjs +78 -0
- package/es/Table/render/LoadingSkeleton.mjs.map +1 -0
- package/es/Table/render/PaginationBar.mjs +71 -0
- package/es/Table/render/PaginationBar.mjs.map +1 -0
- package/es/Table/render/SelectionCells.mjs +111 -0
- package/es/Table/render/SelectionCells.mjs.map +1 -0
- package/es/Table/render/StickyScrollBar.mjs +99 -0
- package/es/Table/render/StickyScrollBar.mjs.map +1 -0
- package/es/Table/render/Summary.d.mts +16 -0
- package/es/Table/render/Summary.mjs +58 -0
- package/es/Table/render/Summary.mjs.map +1 -0
- package/es/Table/render/TableView.mjs +215 -0
- package/es/Table/render/TableView.mjs.map +1 -0
- package/es/Table/render/VirtualBody.mjs +101 -0
- package/es/Table/render/VirtualBody.mjs.map +1 -0
- package/es/Table/render/context.mjs +15 -0
- package/es/Table/render/context.mjs.map +1 -0
- package/es/Table/render/filterUtils.mjs +22 -0
- package/es/Table/render/filterUtils.mjs.map +1 -0
- package/es/Table/render/tableHelpers.mjs +27 -0
- package/es/Table/render/tableHelpers.mjs.map +1 -0
- package/es/Table/render/useColGroups.mjs +23 -0
- package/es/Table/render/useColGroups.mjs.map +1 -0
- package/es/Table/render/useScrollSync.mjs +104 -0
- package/es/Table/render/useScrollSync.mjs.map +1 -0
- package/es/Table/render/useViewContexts.mjs +134 -0
- package/es/Table/render/useViewContexts.mjs.map +1 -0
- package/es/Table/semantic.mjs +45 -0
- package/es/Table/semantic.mjs.map +1 -0
- package/es/Table/store/createTableStore.d.mts +1 -0
- package/es/Table/store/createTableStore.mjs +40 -0
- package/es/Table/store/createTableStore.mjs.map +1 -0
- package/es/Table/store/hooks.mjs +24 -0
- package/es/Table/store/hooks.mjs.map +1 -0
- package/es/Table/style.mjs +175 -90
- package/es/Table/style.mjs.map +1 -1
- package/es/Table/type.d.mts +467 -37
- package/es/Table/useTableController.mjs +293 -0
- package/es/Table/useTableController.mjs.map +1 -0
- package/es/Tabs/Tabs.mjs +2 -2
- package/es/Tabs/Tabs.mjs.map +1 -1
- package/es/Tabs/atoms.mjs +2 -2
- package/es/Tabs/atoms.mjs.map +1 -1
- package/es/Tabs/style.d.mts +1 -1
- package/es/Tag/Tag.mjs +2 -2
- package/es/Tag/Tag.mjs.map +1 -1
- package/es/Text/Text.mjs +2 -2
- package/es/Text/Text.mjs.map +1 -1
- package/es/Text/style.d.mts +3 -3
- package/es/Text/style.mjs +3 -3
- package/es/Text/style.mjs.map +1 -1
- package/es/ToggleGroup/ToggleGroup.mjs +3 -3
- package/es/ToggleGroup/ToggleGroup.mjs.map +1 -1
- package/es/ToggleGroup/atoms.mjs +2 -2
- package/es/ToggleGroup/atoms.mjs.map +1 -1
- package/es/Tooltip/TooltipGroup.mjs +3 -3
- package/es/Tooltip/TooltipGroup.mjs.map +1 -1
- package/es/Tooltip/TooltipStandalone.mjs +3 -3
- package/es/Tooltip/TooltipStandalone.mjs.map +1 -1
- package/es/Tree/Tree.mjs +2 -2
- package/es/Tree/Tree.mjs.map +1 -1
- package/es/Tree/TreeNode.mjs +2 -2
- package/es/Tree/TreeNode.mjs.map +1 -1
- package/es/Video/Video.mjs +2 -2
- package/es/Video/Video.mjs.map +1 -1
- package/es/awesome/Features/FeatureItem.mjs +2 -2
- package/es/awesome/Features/FeatureItem.mjs.map +1 -1
- package/es/awesome/Hero/Hero.mjs +3 -3
- package/es/awesome/Hero/Hero.mjs.map +1 -1
- package/es/awesome/InstallBanner/InstallBanner.mjs +2 -2
- package/es/awesome/InstallBanner/InstallBanner.mjs.map +1 -1
- package/es/awesome/LandingHero/LandingHero.mjs +3 -3
- package/es/awesome/LandingHero/LandingHero.mjs.map +1 -1
- package/es/awesome/LogoMarquee/LogoMarquee.mjs +2 -2
- package/es/awesome/LogoMarquee/LogoMarquee.mjs.map +1 -1
- package/es/awesome/TypewriterEffect/TypewriterEffect.mjs +4 -4
- package/es/awesome/TypewriterEffect/TypewriterEffect.mjs.map +1 -1
- package/es/awesome/landingActions.mjs +2 -2
- package/es/awesome/landingActions.mjs.map +1 -1
- package/es/chat/ChatItem/ChatItem.mjs +2 -2
- package/es/chat/ChatItem/ChatItem.mjs.map +1 -1
- package/es/chat/EditableMessage/EditableMessage.mjs +3 -3
- package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
- package/es/chat/EditableMessageList/EditableMessageList.mjs +1 -1
- package/es/chat/MessageInput/MessageInput.mjs +3 -3
- package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
- package/es/dashboard/AuthLayout/AuthLayout.mjs +8 -4
- package/es/dashboard/AuthLayout/AuthLayout.mjs.map +1 -1
- package/es/dashboard/AuthLayout/style.mjs +14 -3
- package/es/dashboard/AuthLayout/style.mjs.map +1 -1
- package/es/dashboard/AuthTools/AuthLocaleSwitch.mjs +2 -2
- package/es/dashboard/AuthTools/AuthLocaleSwitch.mjs.map +1 -1
- package/es/dashboard/AuthTools/AuthThemeSwitch.mjs +2 -2
- package/es/dashboard/AuthTools/AuthThemeSwitch.mjs.map +1 -1
- package/es/dashboard/ConsoleNav/ConsoleNav.mjs +3 -3
- package/es/dashboard/ConsoleNav/ConsoleNav.mjs.map +1 -1
- package/es/dashboard/ConsoleNav/style.mjs +2 -2
- package/es/dashboard/ConsoleNav/style.mjs.map +1 -1
- package/es/dashboard/ConsoleShell/style.mjs +1 -1
- package/es/dashboard/ConsoleShell/style.mjs.map +1 -1
- package/es/dashboard/FilterSidebar/FilterSidebar.mjs +1 -1
- package/es/dashboard/FilterSidebar/style.mjs +2 -2
- package/es/dashboard/FilterSidebar/style.mjs.map +1 -1
- package/es/dashboard/FilterStrip/style.mjs +1 -1
- package/es/dashboard/FilterStrip/style.mjs.map +1 -1
- package/es/dashboard/MetricStrip/MetricCell.mjs +25 -14
- package/es/dashboard/MetricStrip/MetricCell.mjs.map +1 -1
- package/es/dashboard/MetricStrip/style.mjs +14 -1
- package/es/dashboard/MetricStrip/style.mjs.map +1 -1
- package/es/dashboard/MetricStrip/type.d.mts +2 -0
- package/es/dashboard/PageSkeleton/style.mjs +2 -1
- package/es/dashboard/PageSkeleton/style.mjs.map +1 -1
- package/es/dashboard/StatCard/StatCard.d.mts +1 -1
- package/es/dashboard/StatCard/StatCard.mjs +2 -1
- package/es/dashboard/StatCard/StatCard.mjs.map +1 -1
- package/es/dashboard/StatCard/type.d.mts +2 -0
- package/es/dashboard/Surface/Surface.mjs +3 -4
- package/es/dashboard/Surface/Surface.mjs.map +1 -1
- package/es/dashboard/Surface/link.mjs +1 -1
- package/es/dashboard/Surface/link.mjs.map +1 -1
- package/es/dashboard/Surface/style.mjs +15 -14
- package/es/dashboard/Surface/style.mjs.map +1 -1
- package/es/dashboard/index.mjs +2 -2
- package/es/eslint/noBaseUiSubpath.mjs +2 -1
- package/es/eslint/noBaseUiSubpath.mjs.map +1 -1
- package/es/i18n/resources/en/colorPicker.d.mts +5 -0
- package/es/i18n/resources/en/colorPicker.mjs +5 -0
- package/es/i18n/resources/en/colorPicker.mjs.map +1 -1
- package/es/i18n/resources/en/datePicker.d.mts +54 -0
- package/es/i18n/resources/en/datePicker.mjs +55 -1
- package/es/i18n/resources/en/datePicker.mjs.map +1 -1
- package/es/i18n/resources/en/index.d.mts +4 -3
- package/es/i18n/resources/en/index.mjs +3 -1
- package/es/i18n/resources/en/index.mjs.map +1 -1
- package/es/i18n/resources/en/table.d.mts +23 -0
- package/es/i18n/resources/en/table.mjs +24 -0
- package/es/i18n/resources/en/table.mjs.map +1 -0
- package/es/i18n/resources/zhCn/colorPicker.d.mts +5 -0
- package/es/i18n/resources/zhCn/colorPicker.mjs +5 -0
- package/es/i18n/resources/zhCn/colorPicker.mjs.map +1 -1
- package/es/i18n/resources/zhCn/datePicker.d.mts +54 -0
- package/es/i18n/resources/zhCn/datePicker.mjs +55 -1
- package/es/i18n/resources/zhCn/datePicker.mjs.map +1 -1
- package/es/i18n/resources/zhCn/index.d.mts +4 -3
- package/es/i18n/resources/zhCn/index.mjs +4 -2
- package/es/i18n/resources/zhCn/index.mjs.map +1 -1
- package/es/i18n/resources/zhCn/table.d.mts +23 -0
- package/es/i18n/resources/zhCn/table.mjs +24 -0
- package/es/i18n/resources/zhCn/table.mjs.map +1 -0
- package/es/i18n/types.d.mts +3 -2
- package/es/index.d.mts +15 -7
- package/es/index.mjs +14 -9
- package/es/internal/overflow/OverflowList.mjs +71 -0
- package/es/internal/overflow/OverflowList.mjs.map +1 -0
- package/es/mdx/Callout/index.mjs +2 -2
- package/es/mdx/Callout/index.mjs.map +1 -1
- package/es/mdx/Cards/Card.mjs +2 -2
- package/es/mdx/Cards/Card.mjs.map +1 -1
- package/es/mdx/Cards/index.mjs +2 -2
- package/es/mdx/Cards/index.mjs.map +1 -1
- package/es/mdx/Mdx/index.mjs +2 -2
- package/es/mdx/Mdx/index.mjs.map +1 -1
- package/es/mdx/Steps/index.mjs +2 -2
- package/es/mdx/Steps/index.mjs.map +1 -1
- package/es/mdx/mdxComponents/Pre.mjs +5 -5
- package/es/mdx/mdxComponents/Pre.mjs.map +1 -1
- package/es/storybook/StoryBook/style.mjs +2 -0
- package/es/storybook/StoryBook/style.mjs.map +1 -1
- package/es/style.css +2966 -957
- package/es/styles/createGlobalStyle.mjs +1 -1
- package/es/styles/index.d.mts +3 -2
- package/es/styles/index.mjs +5 -4
- package/es/styles/stylex/props.mjs +2 -2
- package/es/styles/stylex/props.mjs.map +1 -1
- package/es/styles/theme/createLobeToken.d.mts +3 -2
- package/es/styles/theme/createLobeToken.mjs.map +1 -1
- package/es/styles/theme/customPrimary.d.mts +7 -0
- package/es/styles/theme/customPrimary.mjs +66 -0
- package/es/styles/theme/customPrimary.mjs.map +1 -0
- package/es/styles/theme/scope.d.mts +4 -3
- package/es/styles/theme/scope.mjs +30 -8
- package/es/styles/theme/scope.mjs.map +1 -1
- package/es/styles/theme/themeCss.d.mts +2 -0
- package/es/styles/theme/themeCss.mjs +24 -2
- package/es/styles/theme/themeCss.mjs.map +1 -1
- package/es/styles/theme/token/primary.mjs +6 -2
- package/es/styles/theme/token/primary.mjs.map +1 -1
- package/es/theme.css +8 -0
- package/package.json +6 -1
- package/es/DatePicker/CalendarPanel.mjs +0 -189
- package/es/DatePicker/CalendarPanel.mjs.map +0 -1
- package/es/DatePicker/PickerShell.mjs +0 -43
- package/es/DatePicker/PickerShell.mjs.map +0 -1
- package/es/DatePicker/calendar.d.mts +0 -4
- package/es/DatePicker/calendar.mjs +0 -46
- package/es/DatePicker/calendar.mjs.map +0 -1
- package/es/Table/FilterMenu.mjs +0 -45
- package/es/Table/FilterMenu.mjs.map +0 -1
- package/es/Table/TableBody.mjs +0 -67
- package/es/Table/TableBody.mjs.map +0 -1
- package/es/Table/TableHead.mjs +0 -58
- package/es/Table/TableHead.mjs.map +0 -1
- package/es/Table/features.mjs +0 -12
- package/es/Table/features.mjs.map +0 -1
- package/es/Table/fixedOffsets.mjs +0 -29
- package/es/Table/fixedOffsets.mjs.map +0 -1
- package/es/Table/marker.stylex.mjs +0 -9
- package/es/Table/marker.stylex.mjs.map +0 -1
- package/es/Table/toColumnDefs.mjs +0 -26
- package/es/Table/toColumnDefs.mjs.map +0 -1
- package/es/Table/useTableState.mjs +0 -99
- package/es/Table/useTableState.mjs.map +0 -1
|
@@ -5,7 +5,7 @@ import { logoMarqueeMarker } from "./marker.stylex.mjs";
|
|
|
5
5
|
import { styles } from "./style.mjs";
|
|
6
6
|
import { memo } from "react";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
import clsx from "clsx";
|
|
8
|
+
import clsx$1 from "clsx";
|
|
9
9
|
import * as stylex from "@stylexjs/stylex";
|
|
10
10
|
//#region src/awesome/LogoMarquee/LogoMarquee.tsx
|
|
11
11
|
const Track = ({ hidden, iconOnly, iconSize, items }) => /* @__PURE__ */ jsx("div", {
|
|
@@ -42,7 +42,7 @@ const LogoMarquee = memo(({ caption, className, duration = 28, gap = 36, iconOnl
|
|
|
42
42
|
items
|
|
43
43
|
})]
|
|
44
44
|
}), caption && /* @__PURE__ */ jsx("p", {
|
|
45
|
-
className: clsx("lobe-logo-marquee-caption", stylex.props(styles.caption).className),
|
|
45
|
+
className: clsx$1("lobe-logo-marquee-caption", stylex.props(styles.caption).className),
|
|
46
46
|
children: caption
|
|
47
47
|
})]
|
|
48
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogoMarquee.mjs","names":[],"sources":["../../../src/awesome/LogoMarquee/LogoMarquee.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { type CSSProperties, memo } from 'react';\n\nimport { renderLandingIcon } from '@/awesome/landingIcon';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { logoMarqueeMarker } from './marker.stylex';\nimport { styles } from './style';\nimport type { LogoMarqueeProps } from './type';\n\nconst Track = ({\n hidden,\n iconOnly,\n iconSize,\n items,\n}: Pick<LogoMarqueeProps, 'iconOnly' | 'items'> & { hidden?: boolean; iconSize: number }) => (\n <div aria-hidden={hidden || undefined} {...stylex.props(styles.track)}>\n {items.map(({ icon, label }) => (\n <span key={label} title={iconOnly ? label : undefined} {...stylex.props(styles.item)}>\n {renderLandingIcon(icon, iconSize)}\n {!iconOnly && label}\n </span>\n ))}\n </div>\n);\n\nconst LogoMarquee = memo<LogoMarqueeProps>(\n ({\n caption,\n className,\n duration = 28,\n gap = 36,\n iconOnly = false,\n iconSize = 18,\n items,\n maxWidth = 640,\n style,\n ...rest\n }) => {\n const variables = {\n '--logo-marquee-duration': `${duration}s`,\n '--logo-marquee-gap': `${gap}px`,\n '--logo-marquee-max-width': typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,\n } as CSSProperties;\n\n return (\n <div {...styleProps(styles.root, className, { ...variables, ...style })} {...rest}>\n <div {...stylex.props(logoMarqueeMarker, styles.viewport)}>\n <Track iconOnly={iconOnly} iconSize={iconSize} items={items} />\n <Track hidden iconOnly={iconOnly} iconSize={iconSize} items={items} />\n </div>\n {caption && (\n <p className={clsx('lobe-logo-marquee-caption', stylex.props(styles.caption).className)}>\n {caption}\n </p>\n )}\n </div>\n );\n },\n);\n\nLogoMarquee.displayName = 'LogoMarquee';\n\nexport default LogoMarquee;\n"],"mappings":";;;;;;;;;;AAWA,MAAM,SAAS,EACb,QACA,UACA,UACA,YAII,oBAAC,OAAD;CAAK,eAAa,UAAU,KAAA;CAAW,GAAI,OAAO,MAAM,OAAO,KAAK;CACrE,UAAA,MAAM,KAAK,EACZ,MACA,YACI,qBAAC,QAAD;EAAkB,OAAO,WAAW,QAAQ,KAAA;EAAW,GAAI,OAAO,MAAM,OAAO,IAAI;EAAnF,UAAA,CACC,kBAAkB,MAAM,QAAQ,GAChC,CAAC,YAAY,KACV;CAHO,GAAA,KAGP,CAAC;AACN,CAAA;AACP,MAAM,cAAc,MAAwB,EAC1C,SACA,WACA,WAAW,IACX,MAAM,IACN,WAAW,OACX,WAAW,IACX,OACA,WAAW,KACX,OACA,GAAG,WACC;CACJ,MAAM,YAAY;EAChB,2BAA2B,GAAG,SAAS;EACvC,sBAAsB,GAAG,IAAI;EAC7B,4BAA4B,OAAO,aAAa,WAAW,GAAG,SAAS,MAAM;CAC/E;CACA,OAAO,qBAAC,OAAD;EAAK,GAAI,WAAW,OAAO,MAAM,WAAW;GACjD,GAAG;GACH,GAAG;EACL,CAAC;EAAG,GAAI;EAHD,UAAA,CAID,qBAAC,OAAD;GAAK,GAAI,OAAO,MAAM,mBAAmB,OAAO,QAAQ;GAAxD,UAAA,CACE,oBAAC,OAAD;IAAiB;IAAoB;IAAiB;GAAQ,CAAA,GAC9D,oBAAC,OAAD;IAAO,QAAA;IAAiB;IAAoB;IAAiB;GAAQ,CAAA,CAClE;EACJ,CAAA,GAAA,WAAW,oBAAC,KAAD;GAAG,
|
|
1
|
+
{"version":3,"file":"LogoMarquee.mjs","names":["clsx"],"sources":["../../../src/awesome/LogoMarquee/LogoMarquee.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { type CSSProperties, memo } from 'react';\n\nimport { renderLandingIcon } from '@/awesome/landingIcon';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { logoMarqueeMarker } from './marker.stylex';\nimport { styles } from './style';\nimport type { LogoMarqueeProps } from './type';\n\nconst Track = ({\n hidden,\n iconOnly,\n iconSize,\n items,\n}: Pick<LogoMarqueeProps, 'iconOnly' | 'items'> & { hidden?: boolean; iconSize: number }) => (\n <div aria-hidden={hidden || undefined} {...stylex.props(styles.track)}>\n {items.map(({ icon, label }) => (\n <span key={label} title={iconOnly ? label : undefined} {...stylex.props(styles.item)}>\n {renderLandingIcon(icon, iconSize)}\n {!iconOnly && label}\n </span>\n ))}\n </div>\n);\n\nconst LogoMarquee = memo<LogoMarqueeProps>(\n ({\n caption,\n className,\n duration = 28,\n gap = 36,\n iconOnly = false,\n iconSize = 18,\n items,\n maxWidth = 640,\n style,\n ...rest\n }) => {\n const variables = {\n '--logo-marquee-duration': `${duration}s`,\n '--logo-marquee-gap': `${gap}px`,\n '--logo-marquee-max-width': typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,\n } as CSSProperties;\n\n return (\n <div {...styleProps(styles.root, className, { ...variables, ...style })} {...rest}>\n <div {...stylex.props(logoMarqueeMarker, styles.viewport)}>\n <Track iconOnly={iconOnly} iconSize={iconSize} items={items} />\n <Track hidden iconOnly={iconOnly} iconSize={iconSize} items={items} />\n </div>\n {caption && (\n <p className={clsx('lobe-logo-marquee-caption', stylex.props(styles.caption).className)}>\n {caption}\n </p>\n )}\n </div>\n );\n },\n);\n\nLogoMarquee.displayName = 'LogoMarquee';\n\nexport default LogoMarquee;\n"],"mappings":";;;;;;;;;;AAWA,MAAM,SAAS,EACb,QACA,UACA,UACA,YAII,oBAAC,OAAD;CAAK,eAAa,UAAU,KAAA;CAAW,GAAI,OAAO,MAAM,OAAO,KAAK;CACrE,UAAA,MAAM,KAAK,EACZ,MACA,YACI,qBAAC,QAAD;EAAkB,OAAO,WAAW,QAAQ,KAAA;EAAW,GAAI,OAAO,MAAM,OAAO,IAAI;EAAnF,UAAA,CACC,kBAAkB,MAAM,QAAQ,GAChC,CAAC,YAAY,KACV;CAHO,GAAA,KAGP,CAAC;AACN,CAAA;AACP,MAAM,cAAc,MAAwB,EAC1C,SACA,WACA,WAAW,IACX,MAAM,IACN,WAAW,OACX,WAAW,IACX,OACA,WAAW,KACX,OACA,GAAG,WACC;CACJ,MAAM,YAAY;EAChB,2BAA2B,GAAG,SAAS;EACvC,sBAAsB,GAAG,IAAI;EAC7B,4BAA4B,OAAO,aAAa,WAAW,GAAG,SAAS,MAAM;CAC/E;CACA,OAAO,qBAAC,OAAD;EAAK,GAAI,WAAW,OAAO,MAAM,WAAW;GACjD,GAAG;GACH,GAAG;EACL,CAAC;EAAG,GAAI;EAHD,UAAA,CAID,qBAAC,OAAD;GAAK,GAAI,OAAO,MAAM,mBAAmB,OAAO,QAAQ;GAAxD,UAAA,CACE,oBAAC,OAAD;IAAiB;IAAoB;IAAiB;GAAQ,CAAA,GAC9D,oBAAC,OAAD;IAAO,QAAA;IAAiB;IAAoB;IAAiB;GAAQ,CAAA,CAClE;EACJ,CAAA,GAAA,WAAW,oBAAC,KAAD;GAAG,WAAWA,OAAK,6BAA6B,OAAO,MAAM,OAAO,OAAO,CAAC,CAAC,SAAS;GAC7F,UAAA;EACA,CAAA,CACF;;AACX,CAAC;AACD,YAAY,cAAc"}
|
|
@@ -3,7 +3,7 @@ import { useMotionComponent } from "../../MotionProvider/index.mjs";
|
|
|
3
3
|
import { styles } from "./style.mjs";
|
|
4
4
|
import { createElement, memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import clsx from "clsx";
|
|
6
|
+
import clsx$1 from "clsx";
|
|
7
7
|
import * as stylex from "@stylexjs/stylex";
|
|
8
8
|
//#region src/awesome/TypewriterEffect/TypewriterEffect.tsx
|
|
9
9
|
const TypewriterEffect = memo(({ sentences, as: Component = "div", typingSpeed = 100, initialDelay = 0, pauseDuration = 2e3, deletingSpeed = 50, deletePauseDuration = 0, loop = true, className = "", color, showCursor = true, hideCursorWhileTyping = false, cursorCharacter, cursorClassName = "", cursorColor, cursorBlinkDuration = .8, cursorFade = true, cursorStyle = "pipe", textColors = [], variableSpeed, onSentenceComplete, startOnVisible = false, reverseMode = false, segmentMode = "grapheme", ...props }) => {
|
|
@@ -134,7 +134,7 @@ const TypewriterEffect = memo(({ sentences, as: Component = "div", typingSpeed =
|
|
|
134
134
|
const finalCursorColor = getCurrentCursorColor();
|
|
135
135
|
const characters = splitText(displayedText);
|
|
136
136
|
return createElement(Component, {
|
|
137
|
-
className: clsx(stylex.props(styles.container).className, className),
|
|
137
|
+
className: clsx$1(stylex.props(styles.container).className, className),
|
|
138
138
|
ref: containerRef,
|
|
139
139
|
...props
|
|
140
140
|
}, /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
|
|
@@ -152,7 +152,7 @@ const TypewriterEffect = memo(({ sentences, as: Component = "div", typingSpeed =
|
|
|
152
152
|
}, `${currentTextIndex}-${index}`))
|
|
153
153
|
}), showCursor && (cursorFade ? /* @__PURE__ */ jsx(Motion.span, {
|
|
154
154
|
animate: { opacity: shouldHideCursor ? 0 : 1 },
|
|
155
|
-
className: clsx(stylex.props(getCursorStyle()).className, cursorClassName),
|
|
155
|
+
className: clsx$1(stylex.props(getCursorStyle()).className, cursorClassName),
|
|
156
156
|
initial: { opacity: 0 },
|
|
157
157
|
style: finalCursorColor ? { backgroundColor: finalCursorColor } : void 0,
|
|
158
158
|
transition: {
|
|
@@ -163,7 +163,7 @@ const TypewriterEffect = memo(({ sentences, as: Component = "div", typingSpeed =
|
|
|
163
163
|
},
|
|
164
164
|
children: cursorCharacter
|
|
165
165
|
}) : /* @__PURE__ */ jsx("span", {
|
|
166
|
-
className: clsx(stylex.props(getCursorStyle()).className, cursorClassName),
|
|
166
|
+
className: clsx$1(stylex.props(getCursorStyle()).className, cursorClassName),
|
|
167
167
|
style: {
|
|
168
168
|
backgroundColor: finalCursorColor,
|
|
169
169
|
opacity: shouldHideCursor ? 0 : 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypewriterEffect.mjs","names":[],"sources":["../../../src/awesome/TypewriterEffect/TypewriterEffect.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { createElement, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useMotionComponent } from '@/MotionProvider';\n\nimport { styles } from './style';\nimport type { TypewriterEffectProps } from './type';\n\nconst TypewriterEffect = memo<TypewriterEffectProps>(\n ({\n sentences,\n as: Component = 'div',\n typingSpeed = 100,\n initialDelay = 0,\n pauseDuration = 2000,\n deletingSpeed = 50,\n deletePauseDuration = 0,\n loop = true,\n className = '',\n color,\n showCursor = true,\n hideCursorWhileTyping = false,\n cursorCharacter,\n cursorClassName = '',\n cursorColor,\n cursorBlinkDuration = 0.8,\n cursorFade = true,\n cursorStyle = 'pipe',\n textColors = [],\n variableSpeed,\n onSentenceComplete,\n startOnVisible = false,\n reverseMode = false,\n segmentMode = 'grapheme',\n ...props\n }: TypewriterEffectProps) => {\n const Motion = useMotionComponent();\n const [displayedText, setDisplayedText] = useState('');\n const [currentCharIndex, setCurrentCharIndex] = useState(0);\n const [isDeleting, setIsDeleting] = useState(false);\n const [currentTextIndex, setCurrentTextIndex] = useState(0);\n const [isVisible, setIsVisible] = useState(!startOnVisible);\n const [isDeletePausing, setIsDeletePausing] = useState(false);\n const containerRef = useRef<HTMLElement>(null);\n\n const textArray = useMemo(\n () => (Array.isArray(sentences) ? sentences : [sentences]),\n [sentences],\n );\n\n // Helper function to split text based on segment mode\n const splitText = useCallback(\n (text: string): string[] => {\n // Use Intl.Segmenter if available\n if (typeof Intl !== 'undefined' && 'Segmenter' in Intl) {\n const segmenter = new Intl.Segmenter(undefined, { granularity: segmentMode });\n return Array.from(segmenter.segment(text), (segment) => segment.segment);\n }\n\n // Fallback when Intl.Segmenter is not available\n if (segmentMode === 'word') {\n // Simple word splitting fallback\n return text.split(/(\\s+)/).filter(Boolean);\n }\n\n // Grapheme fallback\n return Array.from(text);\n },\n [segmentMode],\n );\n\n const getRandomSpeed = useCallback(() => {\n if (!variableSpeed) return typingSpeed;\n const { min, max } = variableSpeed;\n return Math.random() * (max - min) + min;\n }, [variableSpeed, typingSpeed]);\n\n const getCurrentTextColor = () => {\n if (textColors.length > 0) {\n return textColors[currentTextIndex % textColors.length];\n }\n return color;\n };\n\n const getCurrentCursorColor = () => {\n return cursorColor || color;\n };\n\n useEffect(() => {\n if (!startOnVisible || !containerRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setIsVisible(true);\n }\n });\n },\n { threshold: 0.1 },\n );\n\n observer.observe(containerRef.current);\n\n return () => observer.disconnect();\n }, [startOnVisible]);\n\n useEffect(() => {\n if (!isVisible) return;\n\n let timeout: ReturnType<typeof setTimeout>;\n\n const currentText = textArray[currentTextIndex];\n // Split text based on segment mode\n const textSegments = splitText(currentText);\n const processedText = reverseMode ? textSegments.reverse().join('') : currentText;\n\n // Handle delete pause state\n if (isDeletePausing) {\n timeout = setTimeout(() => {\n setIsDeletePausing(false);\n }, deletePauseDuration);\n return () => clearTimeout(timeout);\n }\n\n const executeTypingAnimation = () => {\n if (isDeleting) {\n if (displayedText === '') {\n setIsDeleting(false);\n if (currentTextIndex === textArray.length - 1 && !loop) {\n return;\n }\n if (onSentenceComplete) {\n onSentenceComplete(textArray[currentTextIndex], currentTextIndex);\n }\n setCurrentTextIndex((prev) => (prev + 1) % textArray.length);\n setCurrentCharIndex(0);\n\n if (deletePauseDuration > 0) {\n setIsDeletePausing(true);\n return;\n }\n } else {\n timeout = setTimeout(() => {\n setDisplayedText((prev) => {\n const segments = splitText(prev);\n return segments.slice(0, -1).join('');\n });\n }, deletingSpeed);\n }\n } else {\n const processedSegments = splitText(processedText);\n if (currentCharIndex < processedSegments.length) {\n timeout = setTimeout(\n () => {\n setDisplayedText((prev) => prev + processedSegments[currentCharIndex]);\n setCurrentCharIndex((prev) => prev + 1);\n },\n variableSpeed ? getRandomSpeed() : typingSpeed,\n );\n } else if (textArray.length >= 1) {\n if (!loop && currentTextIndex === textArray.length - 1) return;\n\n timeout = setTimeout(() => {\n setIsDeleting(true);\n }, pauseDuration);\n }\n }\n };\n\n if (currentCharIndex === 0 && !isDeleting && displayedText === '') {\n timeout = setTimeout(executeTypingAnimation, initialDelay);\n } else {\n executeTypingAnimation();\n }\n\n return () => clearTimeout(timeout);\n }, [\n currentCharIndex,\n displayedText,\n isDeleting,\n isDeletePausing,\n typingSpeed,\n deletingSpeed,\n deletePauseDuration,\n pauseDuration,\n textArray,\n currentTextIndex,\n loop,\n initialDelay,\n isVisible,\n reverseMode,\n variableSpeed,\n onSentenceComplete,\n getRandomSpeed,\n splitText,\n ]);\n\n const getCursorStyle = () => {\n if (cursorCharacter) return styles.cursorCustom;\n\n switch (cursorStyle) {\n case 'block': {\n return styles.cursorBlock;\n }\n case 'dot': {\n return styles.cursorDot;\n }\n case 'underscore': {\n return styles.cursorUnderscore;\n }\n case 'pipe': {\n return styles.cursor;\n }\n }\n };\n\n const currentTextLength = splitText(textArray[currentTextIndex]).length;\n const isTyping = currentCharIndex < currentTextLength && !isDeleting;\n const isAfterTyping = currentCharIndex === currentTextLength && !isDeleting;\n\n const shouldHideCursor = (() => {\n if (hideCursorWhileTyping === true) return true; // 完全隐藏\n if (hideCursorWhileTyping === 'typing') return isTyping || isDeleting; // 打字和删除时隐藏\n if (hideCursorWhileTyping === 'afterTyping') return isAfterTyping; // 打字完成后隐藏\n return false;\n })();\n\n const textColor = getCurrentTextColor();\n const finalCursorColor = getCurrentCursorColor();\n\n // Split displayed text for animation\n const characters = splitText(displayedText);\n\n return createElement(\n Component,\n {\n className: clsx(stylex.props(styles.container).className, className),\n ref: containerRef,\n ...props,\n },\n <>\n <span {...stylex.props(styles.text)} style={textColor ? { color: textColor } : undefined}>\n {characters.map((char, index) => (\n <Motion.span\n animate={{ opacity: 1 }}\n initial={{ opacity: 0 }}\n key={`${currentTextIndex}-${index}`}\n style={{ display: 'inline-block' }}\n transition={{\n duration: typingSpeed / 500,\n ease: 'easeInOut',\n }}\n >\n {char === ' ' ? '\\u00A0' : char}\n </Motion.span>\n ))}\n </span>\n {showCursor &&\n (cursorFade ? (\n <Motion.span\n animate={{ opacity: shouldHideCursor ? 0 : 1 }}\n className={clsx(stylex.props(getCursorStyle()).className, cursorClassName)}\n initial={{ opacity: 0 }}\n style={finalCursorColor ? { backgroundColor: finalCursorColor } : undefined}\n transition={{\n duration: shouldHideCursor ? 0.2 : cursorBlinkDuration,\n ease: 'easeInOut',\n repeat: shouldHideCursor ? 0 : Number.POSITIVE_INFINITY,\n repeatType: 'reverse',\n }}\n >\n {cursorCharacter}\n </Motion.span>\n ) : (\n <span\n className={clsx(stylex.props(getCursorStyle()).className, cursorClassName)}\n style={{\n backgroundColor: finalCursorColor,\n opacity: shouldHideCursor ? 0 : 1,\n }}\n >\n {cursorCharacter}\n </span>\n ))}\n </>,\n );\n },\n);\n\nTypewriterEffect.displayName = 'TypewriterEffect';\n\nexport default TypewriterEffect;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TypewriterEffect.mjs","names":["clsx"],"sources":["../../../src/awesome/TypewriterEffect/TypewriterEffect.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { createElement, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useMotionComponent } from '@/MotionProvider';\n\nimport { styles } from './style';\nimport type { TypewriterEffectProps } from './type';\n\nconst TypewriterEffect = memo<TypewriterEffectProps>(\n ({\n sentences,\n as: Component = 'div',\n typingSpeed = 100,\n initialDelay = 0,\n pauseDuration = 2000,\n deletingSpeed = 50,\n deletePauseDuration = 0,\n loop = true,\n className = '',\n color,\n showCursor = true,\n hideCursorWhileTyping = false,\n cursorCharacter,\n cursorClassName = '',\n cursorColor,\n cursorBlinkDuration = 0.8,\n cursorFade = true,\n cursorStyle = 'pipe',\n textColors = [],\n variableSpeed,\n onSentenceComplete,\n startOnVisible = false,\n reverseMode = false,\n segmentMode = 'grapheme',\n ...props\n }: TypewriterEffectProps) => {\n const Motion = useMotionComponent();\n const [displayedText, setDisplayedText] = useState('');\n const [currentCharIndex, setCurrentCharIndex] = useState(0);\n const [isDeleting, setIsDeleting] = useState(false);\n const [currentTextIndex, setCurrentTextIndex] = useState(0);\n const [isVisible, setIsVisible] = useState(!startOnVisible);\n const [isDeletePausing, setIsDeletePausing] = useState(false);\n const containerRef = useRef<HTMLElement>(null);\n\n const textArray = useMemo(\n () => (Array.isArray(sentences) ? sentences : [sentences]),\n [sentences],\n );\n\n // Helper function to split text based on segment mode\n const splitText = useCallback(\n (text: string): string[] => {\n // Use Intl.Segmenter if available\n if (typeof Intl !== 'undefined' && 'Segmenter' in Intl) {\n const segmenter = new Intl.Segmenter(undefined, { granularity: segmentMode });\n return Array.from(segmenter.segment(text), (segment) => segment.segment);\n }\n\n // Fallback when Intl.Segmenter is not available\n if (segmentMode === 'word') {\n // Simple word splitting fallback\n return text.split(/(\\s+)/).filter(Boolean);\n }\n\n // Grapheme fallback\n return Array.from(text);\n },\n [segmentMode],\n );\n\n const getRandomSpeed = useCallback(() => {\n if (!variableSpeed) return typingSpeed;\n const { min, max } = variableSpeed;\n return Math.random() * (max - min) + min;\n }, [variableSpeed, typingSpeed]);\n\n const getCurrentTextColor = () => {\n if (textColors.length > 0) {\n return textColors[currentTextIndex % textColors.length];\n }\n return color;\n };\n\n const getCurrentCursorColor = () => {\n return cursorColor || color;\n };\n\n useEffect(() => {\n if (!startOnVisible || !containerRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setIsVisible(true);\n }\n });\n },\n { threshold: 0.1 },\n );\n\n observer.observe(containerRef.current);\n\n return () => observer.disconnect();\n }, [startOnVisible]);\n\n useEffect(() => {\n if (!isVisible) return;\n\n let timeout: ReturnType<typeof setTimeout>;\n\n const currentText = textArray[currentTextIndex];\n // Split text based on segment mode\n const textSegments = splitText(currentText);\n const processedText = reverseMode ? textSegments.reverse().join('') : currentText;\n\n // Handle delete pause state\n if (isDeletePausing) {\n timeout = setTimeout(() => {\n setIsDeletePausing(false);\n }, deletePauseDuration);\n return () => clearTimeout(timeout);\n }\n\n const executeTypingAnimation = () => {\n if (isDeleting) {\n if (displayedText === '') {\n setIsDeleting(false);\n if (currentTextIndex === textArray.length - 1 && !loop) {\n return;\n }\n if (onSentenceComplete) {\n onSentenceComplete(textArray[currentTextIndex], currentTextIndex);\n }\n setCurrentTextIndex((prev) => (prev + 1) % textArray.length);\n setCurrentCharIndex(0);\n\n if (deletePauseDuration > 0) {\n setIsDeletePausing(true);\n return;\n }\n } else {\n timeout = setTimeout(() => {\n setDisplayedText((prev) => {\n const segments = splitText(prev);\n return segments.slice(0, -1).join('');\n });\n }, deletingSpeed);\n }\n } else {\n const processedSegments = splitText(processedText);\n if (currentCharIndex < processedSegments.length) {\n timeout = setTimeout(\n () => {\n setDisplayedText((prev) => prev + processedSegments[currentCharIndex]);\n setCurrentCharIndex((prev) => prev + 1);\n },\n variableSpeed ? getRandomSpeed() : typingSpeed,\n );\n } else if (textArray.length >= 1) {\n if (!loop && currentTextIndex === textArray.length - 1) return;\n\n timeout = setTimeout(() => {\n setIsDeleting(true);\n }, pauseDuration);\n }\n }\n };\n\n if (currentCharIndex === 0 && !isDeleting && displayedText === '') {\n timeout = setTimeout(executeTypingAnimation, initialDelay);\n } else {\n executeTypingAnimation();\n }\n\n return () => clearTimeout(timeout);\n }, [\n currentCharIndex,\n displayedText,\n isDeleting,\n isDeletePausing,\n typingSpeed,\n deletingSpeed,\n deletePauseDuration,\n pauseDuration,\n textArray,\n currentTextIndex,\n loop,\n initialDelay,\n isVisible,\n reverseMode,\n variableSpeed,\n onSentenceComplete,\n getRandomSpeed,\n splitText,\n ]);\n\n const getCursorStyle = () => {\n if (cursorCharacter) return styles.cursorCustom;\n\n switch (cursorStyle) {\n case 'block': {\n return styles.cursorBlock;\n }\n case 'dot': {\n return styles.cursorDot;\n }\n case 'underscore': {\n return styles.cursorUnderscore;\n }\n case 'pipe': {\n return styles.cursor;\n }\n }\n };\n\n const currentTextLength = splitText(textArray[currentTextIndex]).length;\n const isTyping = currentCharIndex < currentTextLength && !isDeleting;\n const isAfterTyping = currentCharIndex === currentTextLength && !isDeleting;\n\n const shouldHideCursor = (() => {\n if (hideCursorWhileTyping === true) return true; // 完全隐藏\n if (hideCursorWhileTyping === 'typing') return isTyping || isDeleting; // 打字和删除时隐藏\n if (hideCursorWhileTyping === 'afterTyping') return isAfterTyping; // 打字完成后隐藏\n return false;\n })();\n\n const textColor = getCurrentTextColor();\n const finalCursorColor = getCurrentCursorColor();\n\n // Split displayed text for animation\n const characters = splitText(displayedText);\n\n return createElement(\n Component,\n {\n className: clsx(stylex.props(styles.container).className, className),\n ref: containerRef,\n ...props,\n },\n <>\n <span {...stylex.props(styles.text)} style={textColor ? { color: textColor } : undefined}>\n {characters.map((char, index) => (\n <Motion.span\n animate={{ opacity: 1 }}\n initial={{ opacity: 0 }}\n key={`${currentTextIndex}-${index}`}\n style={{ display: 'inline-block' }}\n transition={{\n duration: typingSpeed / 500,\n ease: 'easeInOut',\n }}\n >\n {char === ' ' ? '\\u00A0' : char}\n </Motion.span>\n ))}\n </span>\n {showCursor &&\n (cursorFade ? (\n <Motion.span\n animate={{ opacity: shouldHideCursor ? 0 : 1 }}\n className={clsx(stylex.props(getCursorStyle()).className, cursorClassName)}\n initial={{ opacity: 0 }}\n style={finalCursorColor ? { backgroundColor: finalCursorColor } : undefined}\n transition={{\n duration: shouldHideCursor ? 0.2 : cursorBlinkDuration,\n ease: 'easeInOut',\n repeat: shouldHideCursor ? 0 : Number.POSITIVE_INFINITY,\n repeatType: 'reverse',\n }}\n >\n {cursorCharacter}\n </Motion.span>\n ) : (\n <span\n className={clsx(stylex.props(getCursorStyle()).className, cursorClassName)}\n style={{\n backgroundColor: finalCursorColor,\n opacity: shouldHideCursor ? 0 : 1,\n }}\n >\n {cursorCharacter}\n </span>\n ))}\n </>,\n );\n },\n);\n\nTypewriterEffect.displayName = 'TypewriterEffect';\n\nexport default TypewriterEffect;\n"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { isExternalHref, renderLandingLink } from "./landingLink.mjs";
|
|
|
4
4
|
import BottomGradientButton from "./BottomGradientButton/BottomGradientButton.mjs";
|
|
5
5
|
import { Fragment } from "react";
|
|
6
6
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
-
import clsx from "clsx";
|
|
7
|
+
import clsx$1 from "clsx";
|
|
8
8
|
//#region src/awesome/landingActions.tsx
|
|
9
9
|
const styles = {
|
|
10
10
|
group: {
|
|
@@ -27,7 +27,7 @@ const LandingActions = ({ actions, className, onNavigate, renderLink, size = "la
|
|
|
27
27
|
styles.group,
|
|
28
28
|
size === "small" ? styles.groupSmall : styles.groupLarge,
|
|
29
29
|
xstyle
|
|
30
|
-
], clsx("lobe-landing-actions", className)),
|
|
30
|
+
], clsx$1("lobe-landing-actions", className)),
|
|
31
31
|
"data-size": size,
|
|
32
32
|
children: actions.map(({ external, href, icon, iconPlacement = "start", label, primary }) => {
|
|
33
33
|
const iconNode = icon && /* @__PURE__ */ jsx(Icon, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"landingActions.mjs","names":[],"sources":["../../src/awesome/landingActions.tsx"],"sourcesContent":["import './landingActions.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { Fragment, type ReactNode } from 'react';\n\nimport BottomGradientButton from '@/awesome/BottomGradientButton';\nimport { isExternalHref, type LandingLinkRender, renderLandingLink } from '@/awesome/landingLink';\nimport Icon, { type IconProps } from '@/Icon';\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { media } from '@/styles/stylex/media.stylex';\nimport { styleProps } from '@/styles/stylex/props';\n\nexport interface LandingAction {\n /** Opens in a new tab. Inferred from absolute URLs when omitted. */\n external?: boolean;\n href: string;\n icon?: IconProps['icon'];\n /** Places the icon after the label, e.g. for an arrow. */\n iconPlacement?: 'start' | 'end';\n label: ReactNode;\n /** The primary action is a filled pill; others render as BottomGradientButton. */\n primary?: boolean;\n}\n\nconst styles = stylex.create({\n action: {\n gap: 8,\n borderColor: 'transparent',\n borderRadius: 999,\n borderStyle: 'solid',\n borderWidth: 1,\n paddingBlock: 0,\n paddingInline: 22,\n transition: 'filter 140ms ease, transform 90ms ease',\n alignItems: 'center',\n backgroundColor: cssVar.colorText,\n color: cssVar.colorBgContainer,\n display: 'inline-flex',\n filter: { 'default': null, ':hover': 'brightness(1.06)' },\n fontSize: cssVar.fontSize,\n fontWeight: 600,\n justifyContent: 'center',\n minBlockSize: 44,\n textDecoration: 'none',\n transform: { 'default': null, ':active': 'scale(0.97)' },\n whiteSpace: 'nowrap',\n },\n actionSmall: {\n gap: 6,\n paddingInline: 14,\n fontSize: cssVar.fontSizeSM,\n minBlockSize: 34,\n },\n group: {\n gap: 12,\n display: 'flex',\n flexWrap: 'wrap',\n },\n groupLarge: {\n alignSelf: { default: null, [media.mobile]: 'stretch' },\n },\n groupSmall: {\n gap: 8,\n },\n});\n\nexport type LandingNavigate = (href: string) => void;\n\nexport interface LandingActionsProps {\n actions: LandingAction[];\n className?: string;\n /** Client-side navigation for internal non-primary actions, which render as buttons with an href. */\n onNavigate?: LandingNavigate;\n renderLink?: LandingLinkRender;\n size?: 'large' | 'small';\n xstyle?: Parameters<typeof styleProps>[0];\n}\n\nexport const LandingActions = ({\n actions,\n className,\n onNavigate,\n renderLink,\n size = 'large',\n xstyle,\n}: LandingActionsProps) => (\n <div\n {...styleProps(\n [styles.group, size === 'small' ? styles.groupSmall : styles.groupLarge, xstyle],\n clsx('lobe-landing-actions', className),\n )}\n data-size={size}\n >\n {actions.map(({ external, href, icon, iconPlacement = 'start', label, primary }) => {\n const iconNode = icon && <Icon icon={icon} size={size === 'small' ? 14 : 16} />;\n if (!primary) {\n const isExternal = external ?? isExternalHref(href);\n return (\n <BottomGradientButton\n href={href}\n icon={iconNode}\n iconPosition={iconPlacement}\n key={href}\n rel={isExternal ? 'noreferrer' : undefined}\n size={size === 'small' ? 'middle' : 'large'}\n target={isExternal ? '_blank' : undefined}\n onClick={\n !isExternal && onNavigate\n ? (event) => {\n event.preventDefault();\n onNavigate(href);\n }\n : undefined\n }\n >\n {label}\n </BottomGradientButton>\n );\n }\n return (\n <Fragment key={href}>\n {renderLandingLink(renderLink, {\n children: (\n <>\n {iconPlacement === 'start' && iconNode}\n {label}\n {iconPlacement === 'end' && iconNode}\n </>\n ),\n className: stylex.props(styles.action, size === 'small' && styles.actionSmall)\n .className,\n external,\n href,\n })}\n </Fragment>\n );\n })}\n </div>\n);\n"],"mappings":";;;;;;;;AAuBA,MAAM,SAAS;CACb,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,OAAO;CACT;AACF;AAWA,MAAa,kBAAkB,EAC7B,SACA,WACA,YACA,YACA,OAAO,SACP,aACyB,oBAAC,OAAD;CAAK,GAAI,WAAW;EAAC,OAAO;EAAO,SAAS,UAAU,OAAO,aAAa,OAAO;EAAY;CAAM,
|
|
1
|
+
{"version":3,"file":"landingActions.mjs","names":["clsx"],"sources":["../../src/awesome/landingActions.tsx"],"sourcesContent":["import './landingActions.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { Fragment, type ReactNode } from 'react';\n\nimport BottomGradientButton from '@/awesome/BottomGradientButton';\nimport { isExternalHref, type LandingLinkRender, renderLandingLink } from '@/awesome/landingLink';\nimport Icon, { type IconProps } from '@/Icon';\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { media } from '@/styles/stylex/media.stylex';\nimport { styleProps } from '@/styles/stylex/props';\n\nexport interface LandingAction {\n /** Opens in a new tab. Inferred from absolute URLs when omitted. */\n external?: boolean;\n href: string;\n icon?: IconProps['icon'];\n /** Places the icon after the label, e.g. for an arrow. */\n iconPlacement?: 'start' | 'end';\n label: ReactNode;\n /** The primary action is a filled pill; others render as BottomGradientButton. */\n primary?: boolean;\n}\n\nconst styles = stylex.create({\n action: {\n gap: 8,\n borderColor: 'transparent',\n borderRadius: 999,\n borderStyle: 'solid',\n borderWidth: 1,\n paddingBlock: 0,\n paddingInline: 22,\n transition: 'filter 140ms ease, transform 90ms ease',\n alignItems: 'center',\n backgroundColor: cssVar.colorText,\n color: cssVar.colorBgContainer,\n display: 'inline-flex',\n filter: { 'default': null, ':hover': 'brightness(1.06)' },\n fontSize: cssVar.fontSize,\n fontWeight: 600,\n justifyContent: 'center',\n minBlockSize: 44,\n textDecoration: 'none',\n transform: { 'default': null, ':active': 'scale(0.97)' },\n whiteSpace: 'nowrap',\n },\n actionSmall: {\n gap: 6,\n paddingInline: 14,\n fontSize: cssVar.fontSizeSM,\n minBlockSize: 34,\n },\n group: {\n gap: 12,\n display: 'flex',\n flexWrap: 'wrap',\n },\n groupLarge: {\n alignSelf: { default: null, [media.mobile]: 'stretch' },\n },\n groupSmall: {\n gap: 8,\n },\n});\n\nexport type LandingNavigate = (href: string) => void;\n\nexport interface LandingActionsProps {\n actions: LandingAction[];\n className?: string;\n /** Client-side navigation for internal non-primary actions, which render as buttons with an href. */\n onNavigate?: LandingNavigate;\n renderLink?: LandingLinkRender;\n size?: 'large' | 'small';\n xstyle?: Parameters<typeof styleProps>[0];\n}\n\nexport const LandingActions = ({\n actions,\n className,\n onNavigate,\n renderLink,\n size = 'large',\n xstyle,\n}: LandingActionsProps) => (\n <div\n {...styleProps(\n [styles.group, size === 'small' ? styles.groupSmall : styles.groupLarge, xstyle],\n clsx('lobe-landing-actions', className),\n )}\n data-size={size}\n >\n {actions.map(({ external, href, icon, iconPlacement = 'start', label, primary }) => {\n const iconNode = icon && <Icon icon={icon} size={size === 'small' ? 14 : 16} />;\n if (!primary) {\n const isExternal = external ?? isExternalHref(href);\n return (\n <BottomGradientButton\n href={href}\n icon={iconNode}\n iconPosition={iconPlacement}\n key={href}\n rel={isExternal ? 'noreferrer' : undefined}\n size={size === 'small' ? 'middle' : 'large'}\n target={isExternal ? '_blank' : undefined}\n onClick={\n !isExternal && onNavigate\n ? (event) => {\n event.preventDefault();\n onNavigate(href);\n }\n : undefined\n }\n >\n {label}\n </BottomGradientButton>\n );\n }\n return (\n <Fragment key={href}>\n {renderLandingLink(renderLink, {\n children: (\n <>\n {iconPlacement === 'start' && iconNode}\n {label}\n {iconPlacement === 'end' && iconNode}\n </>\n ),\n className: stylex.props(styles.action, size === 'small' && styles.actionSmall)\n .className,\n external,\n href,\n })}\n </Fragment>\n );\n })}\n </div>\n);\n"],"mappings":";;;;;;;;AAuBA,MAAM,SAAS;CACb,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,OAAO;CACT;AACF;AAWA,MAAa,kBAAkB,EAC7B,SACA,WACA,YACA,YACA,OAAO,SACP,aACyB,oBAAC,OAAD;CAAK,GAAI,WAAW;EAAC,OAAO;EAAO,SAAS,UAAU,OAAO,aAAa,OAAO;EAAY;CAAM,GAAGA,OAAK,wBAAwB,SAAS,CAAC;CAAG,aAAW;CACjL,UAAA,QAAQ,KAAK,EACd,UACA,MACA,MACA,gBAAgB,SAChB,OACA,cACI;EACJ,MAAM,WAAW,QAAQ,oBAAC,MAAD;GAAY;GAAM,MAAM,SAAS,UAAU,KAAK;EAAK,CAAA;EAC9E,IAAI,CAAC,SAAS;GACZ,MAAM,aAAa,YAAY,eAAe,IAAI;GAClD,OAAO,oBAAC,sBAAD;IAA4B;IAAM,MAAM;IAAU,cAAc;IAA0B,KAAK,aAAa,eAAe,KAAA;IAAW,MAAM,SAAS,UAAU,WAAW;IAAS,QAAQ,aAAa,WAAW,KAAA;IAAW,SAAS,CAAC,cAAc,cAAa,UAAS;KACjR,MAAM,eAAe;KACrB,WAAW,IAAI;IACjB,IAAI,KAAA;IACG,UAAA;GACmB,GALiE,IAKjE;EAC5B;EACA,OAAO,oBAAC,UAAD,EAAA,UACA,kBAAkB,YAAY;GACjC,UAAU,qBAAA,YAAA,EAAA,UAAA;IACD,kBAAkB,WAAW;IAC7B;IACA,kBAAkB,SAAS;GAC5B,EAAA,CAAA;GACR,WAAW;IACT,GAAG,EACD,WAAW,8LACb;IACA,GAAG,EACD,WAAW,6LACb;GACF,EAAE,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;GAC7B;GACA;EACF,CAAC,EACW,GAlBQ,IAkBR;CAChB,CAAC;AACI,CAAA"}
|
|
@@ -13,7 +13,7 @@ import MessageContent from "./components/MessageContent.mjs";
|
|
|
13
13
|
import Title from "./components/Title.mjs";
|
|
14
14
|
import { memo, useEffect, useMemo, useRef, useState } from "react";
|
|
15
15
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
-
import clsx from "clsx";
|
|
16
|
+
import clsx$1 from "clsx";
|
|
17
17
|
import * as stylex from "@stylexjs/stylex";
|
|
18
18
|
//#region src/chat/ChatItem/ChatItem.tsx
|
|
19
19
|
const MOBILE_AVATAR_SIZE = 32;
|
|
@@ -45,7 +45,7 @@ const ChatItem = memo(({ avatarAddon, onAvatarClick, avatarProps, actions, class
|
|
|
45
45
|
return () => observer.disconnect();
|
|
46
46
|
}, [variant, actionsWrapWidth]);
|
|
47
47
|
const isDocs = variant === "docs";
|
|
48
|
-
const containerClassName = styleProps([styles.container, isDocs && styles.containerDocs], clsx("lobe-chat-item", isDocs ? "lobe-chat-item-docs" : "lobe-chat-item-bubble", className)).className;
|
|
48
|
+
const containerClassName = styleProps([styles.container, isDocs && styles.containerDocs], clsx$1("lobe-chat-item", isDocs ? "lobe-chat-item-docs" : "lobe-chat-item-bubble", className)).className;
|
|
49
49
|
return /* @__PURE__ */ jsxs(FlexBasic_default, {
|
|
50
50
|
className: containerClassName,
|
|
51
51
|
direction: placement === "left" ? "horizontal" : "horizontal-reverse",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatItem.mjs","names":["chatMessages","Flexbox"],"sources":["../../../src/chat/ChatItem/ChatItem.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { memo, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport chatMessages from '@/i18n/resources/en/chat';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport { styleProps } from '@/styles/stylex/props';\nimport { useResponsive } from '@/styles/theme/scope';\n\nimport Actions from './components/Actions';\nimport Avatar from './components/Avatar';\nimport BorderSpacing from './components/BorderSpacing';\nimport ErrorContent from './components/ErrorContent';\nimport MessageContent from './components/MessageContent';\nimport Title from './components/Title';\nimport { styles } from './style';\nimport type { ChatItemProps } from './type';\n\nconst MOBILE_AVATAR_SIZE = 32;\n\nconst ChatItem = memo<ChatItemProps>(\n ({\n avatarAddon,\n onAvatarClick,\n avatarProps,\n actions,\n className,\n primary,\n loading,\n message,\n placeholderMessage,\n placement = 'left',\n variant = 'bubble',\n avatar,\n error,\n showTitle,\n time,\n editing,\n onChange,\n onEditingChange,\n messageExtra,\n renderMessage,\n text,\n errorMessage,\n onDoubleClick,\n fontSize,\n aboveMessage,\n belowMessage,\n markdownProps,\n actionsWrapWidth = 54,\n showAvatar = true,\n titleAddon,\n ...rest\n }) => {\n const { mobile } = useResponsive();\n const { t } = useTranslation(chatMessages);\n\n const avatarSize = mobile ? MOBILE_AVATAR_SIZE : avatarProps?.size || 40;\n const cssVariables = useMemo<Record<string, string>>(\n () => ({\n '--chat-item-avatar-size': `${avatarSize}px`,\n }),\n [avatarSize],\n );\n\n const hasTime = Boolean(time);\n const placeholderText = placeholderMessage ?? t('chat.placeholder');\n const avatarAlt = avatarProps?.alt || avatar.title || t('chat.avatar');\n\n // 在 ChatItem 组件中添加\n const contentRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [layoutMode, setLayoutMode] = useState<'horizontal' | 'vertical'>(\n variant === 'bubble' ? 'horizontal' : 'vertical',\n );\n\n // 使用 ResizeObserver 监控内容和容器尺寸\n useEffect(() => {\n if (variant === 'docs') {\n setLayoutMode('vertical');\n return;\n }\n\n if (!contentRef.current || !containerRef.current) return;\n\n const observer = new ResizeObserver(() => {\n if (!contentRef.current || !containerRef.current) return;\n\n const containerWidth = containerRef.current.clientWidth;\n const contentWidth = contentRef.current.scrollWidth; // 使用scrollWidth获取实际内容宽度\n\n // 预留给Actions的最小空间 (根据实际Actions大小调整)\n\n // 只有当内容宽度 + Actions最小宽度 > 容器宽度时才切换布局\n setLayoutMode(contentWidth + actionsWrapWidth > containerWidth ? 'vertical' : 'horizontal');\n });\n\n observer.observe(contentRef.current);\n observer.observe(containerRef.current);\n\n return () => observer.disconnect();\n }, [variant, actionsWrapWidth]);\n\n const isDocs = variant === 'docs';\n const containerClassName = styleProps(\n [styles.container, isDocs && styles.containerDocs],\n clsx('lobe-chat-item', isDocs ? 'lobe-chat-item-docs' : 'lobe-chat-item-bubble', className),\n ).className;\n\n return (\n <Flexbox\n className={containerClassName}\n direction={placement === 'left' ? 'horizontal' : 'horizontal-reverse'}\n gap={mobile ? 6 : 12}\n style={cssVariables}\n width={'100%'}\n {...rest}\n >\n {showAvatar && (\n <Avatar\n {...avatarProps}\n addon={avatarAddon}\n alt={avatarAlt}\n avatar={avatar}\n loading={loading}\n placement={placement}\n size={avatarSize}\n style={{\n marginTop: showTitle ? -12 : 6,\n ...avatarProps?.style,\n }}\n onClick={onAvatarClick}\n />\n )}\n <Flexbox\n align={placement === 'left' ? 'flex-start' : 'flex-end'}\n ref={containerRef}\n width={editing ? '100%' : undefined}\n {...stylex.props(styles.messageBox, styles.messageContainer, hasTime && styles.withTime)}\n >\n <Title\n avatar={avatar}\n placement={placement}\n showTitle={showTitle}\n time={time}\n titleAddon={titleAddon}\n />\n {aboveMessage}\n <Flexbox\n align={placement === 'left' ? 'flex-start' : 'flex-end'}\n data-layout={layoutMode}\n gap={8}\n width={editing ? '100%' : undefined}\n {...stylex.props(styles.messageBox, styles.messageContent)}\n direction={\n layoutMode === 'horizontal'\n ? placement === 'left'\n ? 'horizontal'\n : 'horizontal-reverse'\n : 'vertical'\n }\n >\n <Flexbox ref={contentRef} width={'100%'}>\n {error && (message === placeholderText || !message) ? (\n <ErrorContent error={error} message={errorMessage} placement={placement} />\n ) : (\n <MessageContent\n editing={editing}\n fontSize={fontSize}\n markdownProps={markdownProps}\n message={message}\n placement={placement}\n primary={primary}\n renderMessage={renderMessage}\n text={text}\n variant={variant}\n messageExtra={\n <>\n {error && (\n <ErrorContent error={error} message={errorMessage} placement={placement} />\n )}\n {messageExtra}\n </>\n }\n onChange={onChange}\n onDoubleClick={onDoubleClick}\n onEditingChange={onEditingChange}\n />\n )}\n </Flexbox>\n {actions && (\n <Actions\n actions={actions}\n editing={editing}\n placement={placement}\n variant={variant}\n />\n )}\n </Flexbox>\n {belowMessage}\n </Flexbox>\n {mobile && variant === 'bubble' && showAvatar && (\n <BorderSpacing borderSpacing={MOBILE_AVATAR_SIZE} />\n )}\n </Flexbox>\n );\n },\n);\n\nexport default ChatItem;\n\nexport type { ChatItemProps } from './type';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,MAAM,qBAAqB;AAC3B,MAAM,WAAW,MAAqB,EACpC,aACA,eACA,aACA,SACA,WACA,SACA,SACA,SACA,oBACA,YAAY,QACZ,UAAU,UACV,QACA,OACA,WACA,MACA,SACA,UACA,iBACA,cACA,eACA,MACA,cACA,eACA,UACA,cACA,cACA,eACA,mBAAmB,IACnB,aAAa,MACb,YACA,GAAG,WACC;CACJ,MAAM,EACJ,WACE,cAAc;CAClB,MAAM,EACJ,MACE,eAAeA,YAAY;CAC/B,MAAM,aAAa,SAAS,qBAAqB,aAAa,QAAQ;CACtE,MAAM,eAAe,eAAuC,EAC1D,2BAA2B,GAAG,WAAW,IAC3C,IAAI,CAAC,UAAU,CAAC;CAChB,MAAM,UAAU,QAAQ,IAAI;CAC5B,MAAM,kBAAkB,sBAAsB,EAAE,kBAAkB;CAClE,MAAM,YAAY,aAAa,OAAO,OAAO,SAAS,EAAE,aAAa;CAGrE,MAAM,aAAa,OAAuB,IAAI;CAC9C,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,CAAC,YAAY,iBAAiB,SAAoC,YAAY,WAAW,eAAe,UAAU;CAGxH,gBAAgB;EACd,IAAI,YAAY,QAAQ;GACtB,cAAc,UAAU;GACxB;EACF;EACA,IAAI,CAAC,WAAW,WAAW,CAAC,aAAa,SAAS;EAClD,MAAM,WAAW,IAAI,qBAAqB;GACxC,IAAI,CAAC,WAAW,WAAW,CAAC,aAAa,SAAS;GAClD,MAAM,iBAAiB,aAAa,QAAQ;GAC5C,MAAM,eAAe,WAAW,QAAQ;GAKxC,cAAc,eAAe,mBAAmB,iBAAiB,aAAa,YAAY;EAC5F,CAAC;EACD,SAAS,QAAQ,WAAW,OAAO;EACnC,SAAS,QAAQ,aAAa,OAAO;EACrC,aAAa,SAAS,WAAW;CACnC,GAAG,CAAC,SAAS,gBAAgB,CAAC;CAC9B,MAAM,SAAS,YAAY;CAC3B,MAAM,qBAAqB,WAAW,CAAC,OAAO,WAAW,UAAU,OAAO,aAAa,
|
|
1
|
+
{"version":3,"file":"ChatItem.mjs","names":["chatMessages","clsx","Flexbox"],"sources":["../../../src/chat/ChatItem/ChatItem.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { memo, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport chatMessages from '@/i18n/resources/en/chat';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport { styleProps } from '@/styles/stylex/props';\nimport { useResponsive } from '@/styles/theme/scope';\n\nimport Actions from './components/Actions';\nimport Avatar from './components/Avatar';\nimport BorderSpacing from './components/BorderSpacing';\nimport ErrorContent from './components/ErrorContent';\nimport MessageContent from './components/MessageContent';\nimport Title from './components/Title';\nimport { styles } from './style';\nimport type { ChatItemProps } from './type';\n\nconst MOBILE_AVATAR_SIZE = 32;\n\nconst ChatItem = memo<ChatItemProps>(\n ({\n avatarAddon,\n onAvatarClick,\n avatarProps,\n actions,\n className,\n primary,\n loading,\n message,\n placeholderMessage,\n placement = 'left',\n variant = 'bubble',\n avatar,\n error,\n showTitle,\n time,\n editing,\n onChange,\n onEditingChange,\n messageExtra,\n renderMessage,\n text,\n errorMessage,\n onDoubleClick,\n fontSize,\n aboveMessage,\n belowMessage,\n markdownProps,\n actionsWrapWidth = 54,\n showAvatar = true,\n titleAddon,\n ...rest\n }) => {\n const { mobile } = useResponsive();\n const { t } = useTranslation(chatMessages);\n\n const avatarSize = mobile ? MOBILE_AVATAR_SIZE : avatarProps?.size || 40;\n const cssVariables = useMemo<Record<string, string>>(\n () => ({\n '--chat-item-avatar-size': `${avatarSize}px`,\n }),\n [avatarSize],\n );\n\n const hasTime = Boolean(time);\n const placeholderText = placeholderMessage ?? t('chat.placeholder');\n const avatarAlt = avatarProps?.alt || avatar.title || t('chat.avatar');\n\n // 在 ChatItem 组件中添加\n const contentRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [layoutMode, setLayoutMode] = useState<'horizontal' | 'vertical'>(\n variant === 'bubble' ? 'horizontal' : 'vertical',\n );\n\n // 使用 ResizeObserver 监控内容和容器尺寸\n useEffect(() => {\n if (variant === 'docs') {\n setLayoutMode('vertical');\n return;\n }\n\n if (!contentRef.current || !containerRef.current) return;\n\n const observer = new ResizeObserver(() => {\n if (!contentRef.current || !containerRef.current) return;\n\n const containerWidth = containerRef.current.clientWidth;\n const contentWidth = contentRef.current.scrollWidth; // 使用scrollWidth获取实际内容宽度\n\n // 预留给Actions的最小空间 (根据实际Actions大小调整)\n\n // 只有当内容宽度 + Actions最小宽度 > 容器宽度时才切换布局\n setLayoutMode(contentWidth + actionsWrapWidth > containerWidth ? 'vertical' : 'horizontal');\n });\n\n observer.observe(contentRef.current);\n observer.observe(containerRef.current);\n\n return () => observer.disconnect();\n }, [variant, actionsWrapWidth]);\n\n const isDocs = variant === 'docs';\n const containerClassName = styleProps(\n [styles.container, isDocs && styles.containerDocs],\n clsx('lobe-chat-item', isDocs ? 'lobe-chat-item-docs' : 'lobe-chat-item-bubble', className),\n ).className;\n\n return (\n <Flexbox\n className={containerClassName}\n direction={placement === 'left' ? 'horizontal' : 'horizontal-reverse'}\n gap={mobile ? 6 : 12}\n style={cssVariables}\n width={'100%'}\n {...rest}\n >\n {showAvatar && (\n <Avatar\n {...avatarProps}\n addon={avatarAddon}\n alt={avatarAlt}\n avatar={avatar}\n loading={loading}\n placement={placement}\n size={avatarSize}\n style={{\n marginTop: showTitle ? -12 : 6,\n ...avatarProps?.style,\n }}\n onClick={onAvatarClick}\n />\n )}\n <Flexbox\n align={placement === 'left' ? 'flex-start' : 'flex-end'}\n ref={containerRef}\n width={editing ? '100%' : undefined}\n {...stylex.props(styles.messageBox, styles.messageContainer, hasTime && styles.withTime)}\n >\n <Title\n avatar={avatar}\n placement={placement}\n showTitle={showTitle}\n time={time}\n titleAddon={titleAddon}\n />\n {aboveMessage}\n <Flexbox\n align={placement === 'left' ? 'flex-start' : 'flex-end'}\n data-layout={layoutMode}\n gap={8}\n width={editing ? '100%' : undefined}\n {...stylex.props(styles.messageBox, styles.messageContent)}\n direction={\n layoutMode === 'horizontal'\n ? placement === 'left'\n ? 'horizontal'\n : 'horizontal-reverse'\n : 'vertical'\n }\n >\n <Flexbox ref={contentRef} width={'100%'}>\n {error && (message === placeholderText || !message) ? (\n <ErrorContent error={error} message={errorMessage} placement={placement} />\n ) : (\n <MessageContent\n editing={editing}\n fontSize={fontSize}\n markdownProps={markdownProps}\n message={message}\n placement={placement}\n primary={primary}\n renderMessage={renderMessage}\n text={text}\n variant={variant}\n messageExtra={\n <>\n {error && (\n <ErrorContent error={error} message={errorMessage} placement={placement} />\n )}\n {messageExtra}\n </>\n }\n onChange={onChange}\n onDoubleClick={onDoubleClick}\n onEditingChange={onEditingChange}\n />\n )}\n </Flexbox>\n {actions && (\n <Actions\n actions={actions}\n editing={editing}\n placement={placement}\n variant={variant}\n />\n )}\n </Flexbox>\n {belowMessage}\n </Flexbox>\n {mobile && variant === 'bubble' && showAvatar && (\n <BorderSpacing borderSpacing={MOBILE_AVATAR_SIZE} />\n )}\n </Flexbox>\n );\n },\n);\n\nexport default ChatItem;\n\nexport type { ChatItemProps } from './type';\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import MessageInput from "../MessageInput/MessageInput.mjs";
|
|
|
5
5
|
import MessageModal from "../MessageModal/MessageModal.mjs";
|
|
6
6
|
import { memo } from "react";
|
|
7
7
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
import clsx from "clsx";
|
|
8
|
+
import clsx$1 from "clsx";
|
|
9
9
|
//#region src/chat/EditableMessage/EditableMessage.tsx
|
|
10
10
|
const EditableMessage = memo(({ value, onChange, classNames = {}, onEditingChange, editing, openModal, onOpenChange, placeholder, showEditWhenEmpty = false, styles: customStyles, className, style, height, variant, editButtonSize, text, fullFeaturedCodeBlock, model, fontSize, language = "markdown", markdownProps }) => {
|
|
11
11
|
const [isEdit, setTyping] = useControlledState(false, {
|
|
@@ -19,7 +19,7 @@ const EditableMessage = memo(({ value, onChange, classNames = {}, onEditingChang
|
|
|
19
19
|
const isAutoSize = height === "auto";
|
|
20
20
|
const input = /* @__PURE__ */ jsx(MessageInput, {
|
|
21
21
|
shortcut: true,
|
|
22
|
-
className: clsx(className, classNames?.input),
|
|
22
|
+
className: clsx$1(className, classNames?.input),
|
|
23
23
|
classNames,
|
|
24
24
|
defaultValue: value,
|
|
25
25
|
editButtonSize,
|
|
@@ -41,7 +41,7 @@ const EditableMessage = memo(({ value, onChange, classNames = {}, onEditingChang
|
|
|
41
41
|
});
|
|
42
42
|
if (!value && showEditWhenEmpty) return input;
|
|
43
43
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [!expand && isEdit ? input : /* @__PURE__ */ jsx(Markdown, {
|
|
44
|
-
className: clsx(className, classNames?.markdown),
|
|
44
|
+
className: clsx$1(className, classNames?.markdown),
|
|
45
45
|
fontSize,
|
|
46
46
|
fullFeaturedCodeBlock,
|
|
47
47
|
variant: "chat",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditableMessage.mjs","names":[],"sources":["../../../src/chat/EditableMessage/EditableMessage.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport { memo } from 'react';\n\nimport MessageInput from '@/chat/MessageInput';\nimport MessageModal from '@/chat/MessageModal';\nimport { useControlledState } from '@/hooks/useControlledState';\nimport Markdown from '@/Markdown';\n\nimport { type EditableMessageProps } from './type';\n\nconst EditableMessage = memo<EditableMessageProps>(\n ({\n value,\n onChange,\n classNames = {},\n onEditingChange,\n editing,\n openModal,\n onOpenChange,\n placeholder,\n showEditWhenEmpty = false,\n styles: customStyles,\n className,\n style,\n height,\n variant,\n editButtonSize,\n text,\n fullFeaturedCodeBlock,\n model,\n fontSize,\n language = 'markdown',\n markdownProps,\n }) => {\n const [isEdit, setTyping] = useControlledState(false, {\n onChange: onEditingChange,\n value: editing,\n });\n\n const [expand, setExpand] = useControlledState<boolean>(false, {\n onChange: onOpenChange,\n value: openModal,\n });\n\n const isAutoSize = height === 'auto';\n\n const input = (\n <MessageInput\n shortcut\n className={clsx(className, classNames?.input)}\n classNames={classNames}\n defaultValue={value}\n editButtonSize={editButtonSize}\n height={height}\n language={language}\n placeholder={placeholder}\n styles={customStyles}\n text={text}\n variant={variant}\n style={{\n ...style,\n ...customStyles?.input,\n }}\n onCancel={() => setTyping(false)}\n onConfirm={(text) => {\n onChange?.(text);\n setTyping(false);\n }}\n />\n );\n\n if (!value && showEditWhenEmpty) return input;\n\n return (\n <>\n {!expand && isEdit ? (\n input\n ) : (\n <Markdown\n className={clsx(className, classNames?.markdown)}\n fontSize={fontSize}\n fullFeaturedCodeBlock={fullFeaturedCodeBlock}\n variant={'chat'}\n style={{\n height: isAutoSize ? 'unset' : height,\n ...style,\n ...customStyles?.markdown,\n }}\n {...markdownProps}\n >\n {value || placeholder || ''}\n </Markdown>\n )}\n {expand && (\n <MessageModal\n editing={isEdit}\n extra={model?.extra}\n footer={model?.footer}\n height={height}\n language={language}\n open={expand}\n placeholder={placeholder}\n text={text}\n value={value}\n onChange={onChange}\n onEditingChange={setTyping}\n onOpenChange={(e) => {\n setExpand(e);\n setTyping(false);\n }}\n />\n )}\n </>\n );\n },\n);\n\nEditableMessage.displayName = 'EditableMessage';\n\nexport default EditableMessage;\n"],"mappings":";;;;;;;;;AAYA,MAAM,kBAAkB,MACrB,EACC,OACA,UACA,aAAa,CAAC,GACd,iBACA,SACA,WACA,cACA,aACA,oBAAoB,OACpB,QAAQ,cACR,WACA,OACA,QACA,SACA,gBACA,MACA,uBACA,OACA,UACA,WAAW,YACX,oBACI;CACJ,MAAM,CAAC,QAAQ,aAAa,mBAAmB,OAAO;EACpD,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,CAAC,QAAQ,aAAa,mBAA4B,OAAO;EAC7D,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,aAAa,WAAW;CAE9B,MAAM,QACJ,oBAAC,cAAD;EACE,UAAA;EACA,
|
|
1
|
+
{"version":3,"file":"EditableMessage.mjs","names":["clsx"],"sources":["../../../src/chat/EditableMessage/EditableMessage.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport { memo } from 'react';\n\nimport MessageInput from '@/chat/MessageInput';\nimport MessageModal from '@/chat/MessageModal';\nimport { useControlledState } from '@/hooks/useControlledState';\nimport Markdown from '@/Markdown';\n\nimport { type EditableMessageProps } from './type';\n\nconst EditableMessage = memo<EditableMessageProps>(\n ({\n value,\n onChange,\n classNames = {},\n onEditingChange,\n editing,\n openModal,\n onOpenChange,\n placeholder,\n showEditWhenEmpty = false,\n styles: customStyles,\n className,\n style,\n height,\n variant,\n editButtonSize,\n text,\n fullFeaturedCodeBlock,\n model,\n fontSize,\n language = 'markdown',\n markdownProps,\n }) => {\n const [isEdit, setTyping] = useControlledState(false, {\n onChange: onEditingChange,\n value: editing,\n });\n\n const [expand, setExpand] = useControlledState<boolean>(false, {\n onChange: onOpenChange,\n value: openModal,\n });\n\n const isAutoSize = height === 'auto';\n\n const input = (\n <MessageInput\n shortcut\n className={clsx(className, classNames?.input)}\n classNames={classNames}\n defaultValue={value}\n editButtonSize={editButtonSize}\n height={height}\n language={language}\n placeholder={placeholder}\n styles={customStyles}\n text={text}\n variant={variant}\n style={{\n ...style,\n ...customStyles?.input,\n }}\n onCancel={() => setTyping(false)}\n onConfirm={(text) => {\n onChange?.(text);\n setTyping(false);\n }}\n />\n );\n\n if (!value && showEditWhenEmpty) return input;\n\n return (\n <>\n {!expand && isEdit ? (\n input\n ) : (\n <Markdown\n className={clsx(className, classNames?.markdown)}\n fontSize={fontSize}\n fullFeaturedCodeBlock={fullFeaturedCodeBlock}\n variant={'chat'}\n style={{\n height: isAutoSize ? 'unset' : height,\n ...style,\n ...customStyles?.markdown,\n }}\n {...markdownProps}\n >\n {value || placeholder || ''}\n </Markdown>\n )}\n {expand && (\n <MessageModal\n editing={isEdit}\n extra={model?.extra}\n footer={model?.footer}\n height={height}\n language={language}\n open={expand}\n placeholder={placeholder}\n text={text}\n value={value}\n onChange={onChange}\n onEditingChange={setTyping}\n onOpenChange={(e) => {\n setExpand(e);\n setTyping(false);\n }}\n />\n )}\n </>\n );\n },\n);\n\nEditableMessage.displayName = 'EditableMessage';\n\nexport default EditableMessage;\n"],"mappings":";;;;;;;;;AAYA,MAAM,kBAAkB,MACrB,EACC,OACA,UACA,aAAa,CAAC,GACd,iBACA,SACA,WACA,cACA,aACA,oBAAoB,OACpB,QAAQ,cACR,WACA,OACA,QACA,SACA,gBACA,MACA,uBACA,OACA,UACA,WAAW,YACX,oBACI;CACJ,MAAM,CAAC,QAAQ,aAAa,mBAAmB,OAAO;EACpD,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,CAAC,QAAQ,aAAa,mBAA4B,OAAO;EAC7D,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,aAAa,WAAW;CAE9B,MAAM,QACJ,oBAAC,cAAD;EACE,UAAA;EACA,WAAWA,OAAK,WAAW,YAAY,KAAK;EAChC;EACZ,cAAc;EACE;EACR;EACE;EACG;EACb,QAAQ;EACF;EACG;EACT,OAAO;GACL,GAAG;GACH,GAAG,cAAc;EACnB;EACA,gBAAgB,UAAU,KAAK;EAC/B,YAAY,SAAS;GACnB,WAAW,IAAI;GACf,UAAU,KAAK;EACjB;CACD,CAAA;CAGH,IAAI,CAAC,SAAS,mBAAmB,OAAO;CAExC,OACE,qBAAA,YAAA,EAAA,UAAA,CACG,CAAC,UAAU,SACV,QAEA,oBAAC,UAAD;EACE,WAAWA,OAAK,WAAW,YAAY,QAAQ;EACrC;EACa;EACvB,SAAS;EACT,OAAO;GACL,QAAQ,aAAa,UAAU;GAC/B,GAAG;GACH,GAAG,cAAc;EACnB;EACA,GAAI;EAEH,UAAA,SAAS,eAAe;CACjB,CAAA,GAEX,UACC,oBAAC,cAAD;EACE,SAAS;EACT,OAAO,OAAO;EACd,QAAQ,OAAO;EACP;EACE;EACV,MAAM;EACO;EACP;EACC;EACG;EACV,iBAAiB;EACjB,eAAe,MAAM;GACnB,UAAU,CAAC;GACX,UAAU,KAAK;EACjB;CACD,CAAA,CAEH,EAAA,CAAA;AAEN,CACF;AAEA,gBAAgB,cAAc"}
|
|
@@ -3,8 +3,8 @@ import Button from "../../Button/Button.mjs";
|
|
|
3
3
|
import FlexBasic_default from "../../Flex/FlexBasic.mjs";
|
|
4
4
|
import ActionIcon from "../../ActionIcon/ActionIcon.mjs";
|
|
5
5
|
import { useTranslation } from "../../i18n/useTranslation.mjs";
|
|
6
|
-
import ControlInput from "../../EditableText/ControlInput.mjs";
|
|
7
6
|
import Select from "../../Select/Select.mjs";
|
|
7
|
+
import ControlInput from "../../EditableText/ControlInput.mjs";
|
|
8
8
|
import editableMessage_default from "../../i18n/resources/en/editableMessage.mjs";
|
|
9
9
|
import { messagesReducer } from "./messageReducer.mjs";
|
|
10
10
|
import { memo, useEffect, useReducer } from "react";
|
|
@@ -10,7 +10,7 @@ import CodeEditor from "../../CodeEditor/CodeEditor.mjs";
|
|
|
10
10
|
import { styles, textAreaStyle } from "./style.mjs";
|
|
11
11
|
import { memo, useState } from "react";
|
|
12
12
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
-
import clsx from "clsx";
|
|
13
|
+
import clsx$1 from "clsx";
|
|
14
14
|
import { useHotkeys } from "react-hotkeys-hook";
|
|
15
15
|
//#region src/chat/MessageInput/MessageInput.tsx
|
|
16
16
|
const MessageInput = memo(({ text, variant = "borderless", onCancel, defaultValue, onConfirm, renderButtons, placeholder, styles: customStyles, style, editButtonSize = "middle", classNames, shortcut, language = "markdown", ...rest }) => {
|
|
@@ -49,7 +49,7 @@ const MessageInput = memo(({ text, variant = "borderless", onCancel, defaultValu
|
|
|
49
49
|
...rest,
|
|
50
50
|
children: [mobile ? /* @__PURE__ */ jsx(TextArea_default, {
|
|
51
51
|
autoSize: true,
|
|
52
|
-
className: clsx(styles, classNames?.editor),
|
|
52
|
+
className: clsx$1(styles, classNames?.editor),
|
|
53
53
|
placeholder,
|
|
54
54
|
style: {
|
|
55
55
|
...textAreaStyle,
|
|
@@ -60,7 +60,7 @@ const MessageInput = memo(({ text, variant = "borderless", onCancel, defaultValu
|
|
|
60
60
|
onBlur: (e) => setValue(e.target.value),
|
|
61
61
|
onChange: (e) => setValue(e.target.value)
|
|
62
62
|
}) : /* @__PURE__ */ jsx(CodeEditor, {
|
|
63
|
-
className: clsx(styles, classNames?.editor),
|
|
63
|
+
className: clsx$1(styles, classNames?.editor),
|
|
64
64
|
classNames,
|
|
65
65
|
language,
|
|
66
66
|
placeholder,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInput.mjs","names":["Flexbox","TextArea"],"sources":["../../../src/chat/MessageInput/MessageInput.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport { memo, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\nimport Button from '@/Button';\nimport CodeEditor from '@/CodeEditor';\nimport { Flexbox } from '@/Flex';\nimport { KeyMapEnum } from '@/Hotkey/const';\nimport { combineKeys } from '@/Hotkey/utils';\nimport { TextArea } from '@/Input';\nimport { useResponsive } from '@/styles/theme/scope';\nimport Tooltip from '@/Tooltip';\n\nimport { styles, textAreaStyle } from './style';\nimport type { MessageInputProps } from './type';\n\nconst MessageInput = memo<MessageInputProps>(\n ({\n text,\n variant = 'borderless',\n onCancel,\n defaultValue,\n onConfirm,\n renderButtons,\n placeholder,\n styles: customStyles,\n style,\n editButtonSize = 'middle',\n classNames,\n shortcut,\n language = 'markdown',\n ...rest\n }) => {\n const { mobile } = useResponsive();\n const [temporaryValue, setValue] = useState<string>(defaultValue || '');\n const confirmHotkey = combineKeys([KeyMapEnum.Mod, KeyMapEnum.Enter]);\n const confirmText = text?.confirm || 'Confirm';\n const cancelHotkey = combineKeys([KeyMapEnum.Esc]);\n const cancelText = text?.cancel || 'Cancel';\n\n const handleConfirm = () => onConfirm?.(temporaryValue);\n const handleCancel = () => onCancel?.();\n\n useHotkeys(confirmHotkey, handleConfirm, {\n enableOnFormTags: true,\n enabled: shortcut,\n preventDefault: true,\n });\n\n const confirmButton = (\n <Button size={editButtonSize} type=\"primary\" onClick={handleConfirm}>\n {confirmText}\n </Button>\n );\n\n const cancllButton = (\n <Button size={editButtonSize} type={'fill'} onClick={handleCancel}>\n {text?.cancel || 'Cancel'}\n </Button>\n );\n\n return (\n <Flexbox gap={16} style={{ flex: 1, width: '100%', ...style }} {...rest}>\n {mobile ? (\n <TextArea\n autoSize\n className={clsx(styles, classNames?.editor)}\n placeholder={placeholder}\n style={{ ...textAreaStyle, ...customStyles?.editor }}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onChange={(e) => setValue(e.target.value)}\n />\n ) : (\n <CodeEditor\n className={clsx(styles, classNames?.editor)}\n classNames={classNames}\n language={language}\n placeholder={placeholder}\n style={customStyles?.editor}\n styles={customStyles}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onValueChange={(e) => setValue(e)}\n />\n )}\n <Flexbox direction={'horizontal-reverse'} gap={8}>\n {renderButtons ? (\n renderButtons(temporaryValue).map((buttonProps, index) => (\n <Button key={index} size={editButtonSize} {...buttonProps} />\n ))\n ) : (\n <>\n {shortcut ? (\n <Tooltip hotkey={confirmHotkey} title={confirmText}>\n {confirmButton}\n </Tooltip>\n ) : (\n confirmButton\n )}\n {shortcut ? (\n <Tooltip hotkey={cancelHotkey} title={cancelText}>\n {cancllButton}\n </Tooltip>\n ) : (\n cancllButton\n )}\n </>\n )}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default MessageInput;\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,eAAe,MAClB,EACC,MACA,UAAU,cACV,UACA,cACA,WACA,eACA,aACA,QAAQ,cACR,OACA,iBAAiB,UACjB,YACA,UACA,WAAW,YACX,GAAG,WACC;CACJ,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,CAAC,gBAAgB,YAAY,SAAiB,gBAAgB,EAAE;CACtE,MAAM,gBAAgB,YAAY,CAAC,WAAW,KAAK,WAAW,KAAK,CAAC;CACpE,MAAM,cAAc,MAAM,WAAW;CACrC,MAAM,eAAe,YAAY,CAAC,WAAW,GAAG,CAAC;CACjD,MAAM,aAAa,MAAM,UAAU;CAEnC,MAAM,sBAAsB,YAAY,cAAc;CACtD,MAAM,qBAAqB,WAAW;CAEtC,WAAW,eAAe,eAAe;EACvC,kBAAkB;EAClB,SAAS;EACT,gBAAgB;CAClB,CAAC;CAED,MAAM,gBACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAK;EAAU,SAAS;EACnD,UAAA;CACK,CAAA;CAGV,MAAM,eACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAM;EAAQ,SAAS;EAClD,UAAA,MAAM,UAAU;CACX,CAAA;CAGV,OACE,qBAACA,mBAAD;EAAS,KAAK;EAAI,OAAO;GAAE,MAAM;GAAG,OAAO;GAAQ,GAAG;EAAM;EAAG,GAAI;EAAnE,UAAA,CACG,SACC,oBAACC,kBAAD;GACE,UAAA;GACA,
|
|
1
|
+
{"version":3,"file":"MessageInput.mjs","names":["Flexbox","TextArea","clsx"],"sources":["../../../src/chat/MessageInput/MessageInput.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport { memo, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\nimport Button from '@/Button';\nimport CodeEditor from '@/CodeEditor';\nimport { Flexbox } from '@/Flex';\nimport { KeyMapEnum } from '@/Hotkey/const';\nimport { combineKeys } from '@/Hotkey/utils';\nimport { TextArea } from '@/Input';\nimport { useResponsive } from '@/styles/theme/scope';\nimport Tooltip from '@/Tooltip';\n\nimport { styles, textAreaStyle } from './style';\nimport type { MessageInputProps } from './type';\n\nconst MessageInput = memo<MessageInputProps>(\n ({\n text,\n variant = 'borderless',\n onCancel,\n defaultValue,\n onConfirm,\n renderButtons,\n placeholder,\n styles: customStyles,\n style,\n editButtonSize = 'middle',\n classNames,\n shortcut,\n language = 'markdown',\n ...rest\n }) => {\n const { mobile } = useResponsive();\n const [temporaryValue, setValue] = useState<string>(defaultValue || '');\n const confirmHotkey = combineKeys([KeyMapEnum.Mod, KeyMapEnum.Enter]);\n const confirmText = text?.confirm || 'Confirm';\n const cancelHotkey = combineKeys([KeyMapEnum.Esc]);\n const cancelText = text?.cancel || 'Cancel';\n\n const handleConfirm = () => onConfirm?.(temporaryValue);\n const handleCancel = () => onCancel?.();\n\n useHotkeys(confirmHotkey, handleConfirm, {\n enableOnFormTags: true,\n enabled: shortcut,\n preventDefault: true,\n });\n\n const confirmButton = (\n <Button size={editButtonSize} type=\"primary\" onClick={handleConfirm}>\n {confirmText}\n </Button>\n );\n\n const cancllButton = (\n <Button size={editButtonSize} type={'fill'} onClick={handleCancel}>\n {text?.cancel || 'Cancel'}\n </Button>\n );\n\n return (\n <Flexbox gap={16} style={{ flex: 1, width: '100%', ...style }} {...rest}>\n {mobile ? (\n <TextArea\n autoSize\n className={clsx(styles, classNames?.editor)}\n placeholder={placeholder}\n style={{ ...textAreaStyle, ...customStyles?.editor }}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onChange={(e) => setValue(e.target.value)}\n />\n ) : (\n <CodeEditor\n className={clsx(styles, classNames?.editor)}\n classNames={classNames}\n language={language}\n placeholder={placeholder}\n style={customStyles?.editor}\n styles={customStyles}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onValueChange={(e) => setValue(e)}\n />\n )}\n <Flexbox direction={'horizontal-reverse'} gap={8}>\n {renderButtons ? (\n renderButtons(temporaryValue).map((buttonProps, index) => (\n <Button key={index} size={editButtonSize} {...buttonProps} />\n ))\n ) : (\n <>\n {shortcut ? (\n <Tooltip hotkey={confirmHotkey} title={confirmText}>\n {confirmButton}\n </Tooltip>\n ) : (\n confirmButton\n )}\n {shortcut ? (\n <Tooltip hotkey={cancelHotkey} title={cancelText}>\n {cancllButton}\n </Tooltip>\n ) : (\n cancllButton\n )}\n </>\n )}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default MessageInput;\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,eAAe,MAClB,EACC,MACA,UAAU,cACV,UACA,cACA,WACA,eACA,aACA,QAAQ,cACR,OACA,iBAAiB,UACjB,YACA,UACA,WAAW,YACX,GAAG,WACC;CACJ,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,CAAC,gBAAgB,YAAY,SAAiB,gBAAgB,EAAE;CACtE,MAAM,gBAAgB,YAAY,CAAC,WAAW,KAAK,WAAW,KAAK,CAAC;CACpE,MAAM,cAAc,MAAM,WAAW;CACrC,MAAM,eAAe,YAAY,CAAC,WAAW,GAAG,CAAC;CACjD,MAAM,aAAa,MAAM,UAAU;CAEnC,MAAM,sBAAsB,YAAY,cAAc;CACtD,MAAM,qBAAqB,WAAW;CAEtC,WAAW,eAAe,eAAe;EACvC,kBAAkB;EAClB,SAAS;EACT,gBAAgB;CAClB,CAAC;CAED,MAAM,gBACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAK;EAAU,SAAS;EACnD,UAAA;CACK,CAAA;CAGV,MAAM,eACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAM;EAAQ,SAAS;EAClD,UAAA,MAAM,UAAU;CACX,CAAA;CAGV,OACE,qBAACA,mBAAD;EAAS,KAAK;EAAI,OAAO;GAAE,MAAM;GAAG,OAAO;GAAQ,GAAG;EAAM;EAAG,GAAI;EAAnE,UAAA,CACG,SACC,oBAACC,kBAAD;GACE,UAAA;GACA,WAAWC,OAAK,QAAQ,YAAY,MAAM;GAC7B;GACb,OAAO;IAAE,GAAG;IAAe,GAAG,cAAc;GAAO;GACnD,OAAO;GACE;GACT,SAAS,MAAM,SAAS,EAAE,OAAO,KAAK;GACtC,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;EACzC,CAAA,IAED,oBAAC,YAAD;GACE,WAAWA,OAAK,QAAQ,YAAY,MAAM;GAC9B;GACF;GACG;GACb,OAAO,cAAc;GACrB,QAAQ;GACR,OAAO;GACE;GACT,SAAS,MAAM,SAAS,EAAE,OAAO,KAAK;GACtC,gBAAgB,MAAM,SAAS,CAAC;EACjC,CAAA,GAEH,oBAACF,mBAAD;GAAS,WAAW;GAAsB,KAAK;GAC5C,UAAA,gBACC,cAAc,cAAc,CAAC,CAAC,KAAK,aAAa,UAC9C,oBAAC,QAAD;IAAoB,MAAM;IAAgB,GAAI;GAAc,GAA/C,KAA+C,CAC7D,IAED,qBAAA,YAAA,EAAA,UAAA,CACG,WACC,oBAAC,SAAD;IAAS,QAAQ;IAAe,OAAO;IACpC,UAAA;GACM,CAAA,IAET,eAED,WACC,oBAAC,SAAD;IAAS,QAAQ;IAAc,OAAO;IACnC,UAAA;GACM,CAAA,IAET,YAEF,EAAA,CAAA;EAEG,CAAA,CACF;;AAEb,CACF"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { styleProps } from "../../styles/stylex/props.mjs";
|
|
3
3
|
import { cssVar } from "../../styles/stylex/cssVar.stylex.mjs";
|
|
4
4
|
import FlexBasic_default from "../../Flex/FlexBasic.mjs";
|
|
5
|
+
import { useThemeMode } from "../../styles/theme/scope.mjs";
|
|
5
6
|
import Text from "../../Text/Text.mjs";
|
|
6
7
|
import Skeleton from "../../Skeleton/index.mjs";
|
|
7
8
|
import { styles } from "./style.mjs";
|
|
8
9
|
import AuthLayoutAside from "./Aside.mjs";
|
|
9
|
-
import { useSurfaceCardStyles } from "../Surface/link.mjs";
|
|
10
10
|
import { isValidElement } from "react";
|
|
11
11
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
12
|
import * as stylex from "@stylexjs/stylex";
|
|
@@ -42,7 +42,7 @@ const FormSkeleton = () => /* @__PURE__ */ jsxs(FlexBasic_default, {
|
|
|
42
42
|
]
|
|
43
43
|
});
|
|
44
44
|
function AuthLayout({ alert, aside, background = "plain", brand, card = true, children, className, description, footer, loading, logo, style, title, tools, variant = "default", ...rest }) {
|
|
45
|
-
const
|
|
45
|
+
const { isDarkMode } = useThemeMode();
|
|
46
46
|
const split = Boolean(aside);
|
|
47
47
|
const art = isValidElement(background) ? background : null;
|
|
48
48
|
const heading = title === void 0 || title === null ? null : typeof title === "string" ? /* @__PURE__ */ jsx(Text, {
|
|
@@ -72,7 +72,11 @@ function AuthLayout({ alert, aside, background = "plain", brand, card = true, ch
|
|
|
72
72
|
return /* @__PURE__ */ jsxs("div", {
|
|
73
73
|
"data-auth-layout": "",
|
|
74
74
|
...rest,
|
|
75
|
-
...styleProps([
|
|
75
|
+
...styleProps([
|
|
76
|
+
styles.page,
|
|
77
|
+
background === "grid" && styles.grid,
|
|
78
|
+
background === "grid" && isDarkMode && styles.gridDark
|
|
79
|
+
], className, style),
|
|
76
80
|
children: [
|
|
77
81
|
art ? /* @__PURE__ */ jsx("div", {
|
|
78
82
|
...stylex.props(styles.backdrop),
|
|
@@ -89,7 +93,7 @@ function AuthLayout({ alert, aside, background = "plain", brand, card = true, ch
|
|
|
89
93
|
...stylex.props(styles.main),
|
|
90
94
|
children: card ? /* @__PURE__ */ jsx("div", {
|
|
91
95
|
"data-auth-card": "",
|
|
92
|
-
...stylex.props(styles.lift, split && styles.liftSplit,
|
|
96
|
+
...stylex.props(styles.lift, split && styles.liftSplit, variant === "elevated" && styles.elevated),
|
|
93
97
|
children: /* @__PURE__ */ jsxs("div", {
|
|
94
98
|
...stylex.props(styles.frame, split && styles.split),
|
|
95
99
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthLayout.mjs","names":["Flexbox","Aside"],"sources":["../../../src/dashboard/AuthLayout/AuthLayout.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { isValidElement } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport Skeleton from '@/Skeleton';\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { styleProps } from '@/styles/stylex/props';\nimport
|
|
1
|
+
{"version":3,"file":"AuthLayout.mjs","names":["Flexbox","Aside"],"sources":["../../../src/dashboard/AuthLayout/AuthLayout.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { isValidElement } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport Skeleton from '@/Skeleton';\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { styleProps } from '@/styles/stylex/props';\nimport { useThemeMode } from '@/styles/theme/scope';\nimport Text from '@/Text';\n\nimport Aside from './Aside';\nimport { styles } from './style';\nimport type { AuthLayoutProps } from './type';\n\nconst titleStyle = {\n fontSize: cssVar.fontSizeHeading3,\n lineHeight: cssVar.lineHeightHeading3,\n margin: 0,\n};\nconst descriptionStyle = { color: cssVar.colorTextSecondary, lineHeight: 1.6 };\n\nconst FormSkeleton = () => (\n <Flexbox aria-hidden gap={12}>\n <Skeleton height={36} radius={8} width=\"100%\" />\n <Skeleton height={36} radius={8} width=\"100%\" />\n <Skeleton height={36} radius={8} width=\"100%\" />\n </Flexbox>\n);\n\nfunction AuthLayout({\n alert,\n aside,\n background = 'plain',\n brand,\n card = true,\n children,\n className,\n description,\n footer,\n loading,\n logo,\n style,\n title,\n tools,\n variant = 'default',\n ...rest\n}: AuthLayoutProps) {\n const { isDarkMode } = useThemeMode();\n const split = Boolean(aside);\n const art = isValidElement(background) ? background : null;\n const heading =\n title === undefined || title === null ? null : typeof title === 'string' ? (\n <Text as=\"h1\" style={titleStyle} weight=\"bold\">\n {title}\n </Text>\n ) : (\n <div {...stylex.props(styles.titleNode)}>{title}</div>\n );\n const intro =\n logo || heading || description ? (\n <Flexbox gap={8}>\n {logo ? <div {...stylex.props(styles.logo)}>{logo}</div> : null}\n {heading}\n {description ? (\n <Text style={descriptionStyle} type=\"secondary\">\n {description}\n </Text>\n ) : null}\n </Flexbox>\n ) : null;\n\n return (\n <div\n data-auth-layout=\"\"\n {...rest}\n {...styleProps(\n [\n styles.page,\n background === 'grid' && styles.grid,\n background === 'grid' && isDarkMode && styles.gridDark,\n ],\n className,\n style,\n )}\n >\n {art ? <div {...stylex.props(styles.backdrop)}>{art}</div> : null}\n <header {...stylex.props(styles.header)}>\n {brand}\n {tools ? <div {...stylex.props(styles.tools)}>{tools}</div> : null}\n </header>\n <main {...stylex.props(styles.main)}>\n {card ? (\n <div\n data-auth-card=\"\"\n {...stylex.props(\n styles.lift,\n split && styles.liftSplit,\n variant === 'elevated' && styles.elevated,\n )}\n >\n <div {...stylex.props(styles.frame, split && styles.split)}>\n <div {...stylex.props(styles.form, split && styles.formSplit)}>\n {intro}\n {alert}\n {loading ? <FormSkeleton /> : children}\n {footer ? (\n <div {...styleProps(styles.footer, 'lobe-auth-layout-footer')}>{footer}</div>\n ) : null}\n </div>\n {aside ? <div {...stylex.props(styles.aside)}>{aside}</div> : null}\n </div>\n </div>\n ) : (\n children\n )}\n </main>\n </div>\n );\n}\n\nAuthLayout.displayName = 'AuthLayout';\nAuthLayout.Aside = Aside;\n\nexport default AuthLayout;\n"],"mappings":";;;;;;;;;;;;;AAcA,MAAM,aAAa;CACjB,UAAU,OAAO;CACjB,YAAY,OAAO;CACnB,QAAQ;AACV;AACA,MAAM,mBAAmB;CACvB,OAAO,OAAO;CACd,YAAY;AACd;AACA,MAAM,qBAAqB,qBAACA,mBAAD;CAAS,eAAA;CAAY,KAAK;CAA1B,UAAA;EACvB,oBAAC,UAAD;GAAU,QAAQ;GAAI,QAAQ;GAAG,OAAM;EAAQ,CAAA;EAC/C,oBAAC,UAAD;GAAU,QAAQ;GAAI,QAAQ;GAAG,OAAM;EAAQ,CAAA;EAC/C,oBAAC,UAAD;GAAU,QAAQ;GAAI,QAAQ;GAAG,OAAM;EAAQ,CAAA;CACxC;;AACX,SAAS,WAAW,EAClB,OACA,OACA,aAAa,SACb,OACA,OAAO,MACP,UACA,WACA,aACA,QACA,SACA,MACA,OACA,OACA,OACA,UAAU,WACV,GAAG,QACe;CAClB,MAAM,EACJ,eACE,aAAa;CACjB,MAAM,QAAQ,QAAQ,KAAK;CAC3B,MAAM,MAAM,eAAe,UAAU,IAAI,aAAa;CACtD,MAAM,UAAU,UAAU,KAAA,KAAa,UAAU,OAAO,OAAO,OAAO,UAAU,WAAW,oBAAC,MAAD;EAAM,IAAG;EAAK,OAAO;EAAY,QAAO;EAC5H,UAAA;CACG,CAAA,IAAI,oBAAC,OAAD;EAAK,GAAI,OAAO,MAAM,OAAO,SAAS;EAAI,UAAA;CAAW,CAAA;CACnE,MAAM,QAAQ,QAAQ,WAAW,cAAc,qBAACA,mBAAD;EAAS,KAAK;EAAd,UAAA;GACxC,OAAO,oBAAC,OAAD;IAAK,GAAI,OAAO,MAAM,OAAO,IAAI;IAAI,UAAA;GAAU,CAAA,IAAI;GAC1D;GACA,cAAc,oBAAC,MAAD;IAAM,OAAO;IAAkB,MAAK;IAC9C,UAAA;GACG,CAAA,IAAI;EACL;CAAI,CAAA,IAAA;CACjB,OAAO,qBAAC,OAAD;EAAK,oBAAiB;EAAG,GAAI;EAAM,GAAI,WAAW;GAAC,OAAO;GAAM,eAAe,UAAU,OAAO;GAAM,eAAe,UAAU,cAAc,OAAO;EAAQ,GAAG,WAAW,KAAK;EAA/K,UAAA;GACF,MAAM,oBAAC,OAAD;IAAK,GAAI,OAAO,MAAM,OAAO,QAAQ;IAAI,UAAA;GAAS,CAAA,IAAI;GAC7D,qBAAC,UAAD;IAAQ,GAAI,OAAO,MAAM,OAAO,MAAM;IAAtC,UAAA,CACG,OACA,QAAQ,oBAAC,OAAD;KAAK,GAAI,OAAO,MAAM,OAAO,KAAK;KAAI,UAAA;IAAW,CAAA,IAAI,IACxD;;GACR,oBAAC,QAAD;IAAM,GAAI,OAAO,MAAM,OAAO,IAAI;IAC/B,UAAA,OAAO,oBAAC,OAAD;KAAK,kBAAe;KAAG,GAAI,OAAO,MAAM,OAAO,MAAM,SAAS,OAAO,WAAW,YAAY,cAAc,OAAO,QAAQ;KAC7H,UAAA,qBAAC,OAAD;MAAK,GAAI,OAAO,MAAM,OAAO,OAAO,SAAS,OAAO,KAAK;MAAzD,UAAA,CACE,qBAAC,OAAD;OAAK,GAAI,OAAO,MAAM,OAAO,MAAM,SAAS,OAAO,SAAS;OAA5D,UAAA;QACG;QACA;QACA,UAAU,oBAAC,cAAD,CAAe,CAAA,IAAI;QAC7B,SAAS,oBAAC,OAAD;SAAK,GAAI,WAAW,OAAO,QAAQ,yBAAyB;SAAI,UAAA;QAAY,CAAA,IAAI;OACvF;MACJ,CAAA,GAAA,QAAQ,oBAAC,OAAD;OAAK,GAAI,OAAO,MAAM,OAAO,KAAK;OAAI,UAAA;MAAW,CAAA,IAAI,IAC3D;;IACF,CAAA,IAAI;GACP,CAAA;EACH;;AACT;AACA,WAAW,cAAc;AACzB,WAAW,QAAQC"}
|
|
@@ -49,7 +49,7 @@ const styles = {
|
|
|
49
49
|
},
|
|
50
50
|
asidePlate: {
|
|
51
51
|
kpwlN0: "lb10a8y8t",
|
|
52
|
-
kWkggS: "
|
|
52
|
+
kWkggS: "lb6yijhg",
|
|
53
53
|
kVAEAm: "lb10l6tqk",
|
|
54
54
|
$$css: true
|
|
55
55
|
},
|
|
@@ -109,12 +109,17 @@ const styles = {
|
|
|
109
109
|
$$css: true
|
|
110
110
|
},
|
|
111
111
|
grid: {
|
|
112
|
+
"--lobe-auth-grid-line": "lb13b9b4k",
|
|
112
113
|
k1YJky: "lbkuq44j",
|
|
113
|
-
kWkggS: "
|
|
114
|
-
kKwaWg: "
|
|
114
|
+
kWkggS: "lb41ilrr",
|
|
115
|
+
kKwaWg: "lb3x8p3i",
|
|
115
116
|
kgSjnq: "lblpqoug",
|
|
116
117
|
$$css: true
|
|
117
118
|
},
|
|
119
|
+
gridDark: {
|
|
120
|
+
"--lobe-auth-grid-line": "lbp4pl1z",
|
|
121
|
+
$$css: true
|
|
122
|
+
},
|
|
118
123
|
header: {
|
|
119
124
|
kUk6DE: "lb1okw0bk",
|
|
120
125
|
kOIVth: "lb1v2ro7d",
|
|
@@ -128,6 +133,12 @@ const styles = {
|
|
|
128
133
|
$$css: true
|
|
129
134
|
},
|
|
130
135
|
lift: {
|
|
136
|
+
kVAM5u: "lbqnr5ac",
|
|
137
|
+
kaIpWk: "lb1ndkxwp",
|
|
138
|
+
ksu8eU: "lb1y0btm7",
|
|
139
|
+
kMzoRj: "lbmkeg23",
|
|
140
|
+
kWkggS: "lb6yijhg",
|
|
141
|
+
kGVxlE: "lb3b5rli",
|
|
131
142
|
k1xSpc: "lb78zum5",
|
|
132
143
|
kzqmXN: "lb1nyppsm",
|
|
133
144
|
kVAEAm: "lb1n2onr6",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/dashboard/AuthLayout/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { media } from '@/styles/stylex/media.stylex';\n\nexport const styles = stylex.create({\n aside: {\n flex: 'none',\n backgroundColor: cssVar.colorFillSecondary,\n boxSizing: 'border-box',\n display: { default: null, [media.laptop]: 'none' },\n inlineSize: '50%',\n maxInlineSize: '50%',\n minInlineSize: 0,\n position: 'relative',\n },\n asideCopy: {\n gap: 8,\n insetInline: 40,\n display: 'flex',\n flexDirection: 'column',\n insetBlockEnd: 64,\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 2,\n },\n asideKicker: {\n margin: 0,\n color: '#fff',\n fontSize: cssVar.fontSize,\n lineHeight: 1.4,\n opacity: 0.82,\n },\n asideLine: {\n margin: 0,\n color: '#fff',\n fontSize: cssVar.fontSizeHeading2,\n fontWeight: 600,\n letterSpacing: '-0.02em',\n lineHeight: 1.25,\n },\n asidePanel: {\n inset: 8,\n borderRadius: 20,\n overflow: 'hidden',\n backgroundImage: 'linear-gradient(165deg, #ff9ffc 0%, #5227ff 46%, #b497cf 100%)',\n position: 'absolute',\n },\n asidePlate: {\n inset: 0,\n backgroundColor:
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/dashboard/AuthLayout/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { media } from '@/styles/stylex/media.stylex';\n\nexport const styles = stylex.create({\n aside: {\n flex: 'none',\n backgroundColor: cssVar.colorFillSecondary,\n boxSizing: 'border-box',\n display: { default: null, [media.laptop]: 'none' },\n inlineSize: '50%',\n maxInlineSize: '50%',\n minInlineSize: 0,\n position: 'relative',\n },\n asideCopy: {\n gap: 8,\n insetInline: 40,\n display: 'flex',\n flexDirection: 'column',\n insetBlockEnd: 64,\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 2,\n },\n asideKicker: {\n margin: 0,\n color: '#fff',\n fontSize: cssVar.fontSize,\n lineHeight: 1.4,\n opacity: 0.82,\n },\n asideLine: {\n margin: 0,\n color: '#fff',\n fontSize: cssVar.fontSizeHeading2,\n fontWeight: 600,\n letterSpacing: '-0.02em',\n lineHeight: 1.25,\n },\n asidePanel: {\n inset: 8,\n borderRadius: 20,\n overflow: 'hidden',\n backgroundImage: 'linear-gradient(165deg, #ff9ffc 0%, #5227ff 46%, #b497cf 100%)',\n position: 'absolute',\n },\n asidePlate: {\n inset: 0,\n backgroundColor: cssVar.colorBgContainer,\n position: 'absolute',\n },\n asideScrim: {\n insetInline: 0,\n backgroundImage: 'linear-gradient(to top, rgb(24 10 48 / 42%), transparent)',\n blockSize: '58%',\n insetBlockEnd: 0,\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 1,\n },\n backdrop: {\n inset: 0,\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 0,\n },\n elevated: {\n borderRadius: 28,\n },\n footer: {\n margin: 0,\n color: cssVar.colorTextSecondary,\n fontSize: cssVar.fontSizeSM,\n lineHeight: 1.6,\n },\n form: {\n flex: 'none',\n gap: 24,\n paddingBlock: { default: 40, [media.laptop]: 28 },\n paddingInline: { default: 36, [media.laptop]: 24 },\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n inlineSize: '100%',\n justifyContent: 'center',\n minInlineSize: 0,\n },\n formSplit: {\n inlineSize: { default: '50%', [media.laptop]: '100%' },\n maxInlineSize: { default: '50%', [media.laptop]: '100%' },\n },\n frame: {\n borderRadius: 'inherit',\n flex: 'none',\n overflow: 'hidden',\n display: 'flex',\n inlineSize: '100%',\n minInlineSize: 0,\n },\n grid: {\n '--lobe-auth-grid-line': `color-mix(in srgb, ${cssVar.colorText} 5%, transparent)`,\n 'backgroundPosition': '-1px -1px',\n 'backgroundColor': cssVar.colorBgLayout,\n 'backgroundImage':\n 'linear-gradient(var(--lobe-auth-grid-line) 1px, transparent 1px), linear-gradient(90deg, var(--lobe-auth-grid-line) 1px, transparent 1px)',\n 'backgroundSize': '32px 32px',\n },\n gridDark: {\n '--lobe-auth-grid-line': cssVar.colorBorderSecondary,\n },\n header: {\n flex: 'none',\n gap: 12,\n paddingInline: 16,\n alignItems: 'center',\n blockSize: 56,\n display: 'flex',\n justifyContent: 'space-between',\n position: 'relative',\n zIndex: 1,\n },\n lift: {\n borderColor: cssVar.colorBorder,\n borderRadius: cssVar.borderRadiusLG,\n borderStyle: 'solid',\n borderWidth: 1,\n backgroundColor: cssVar.colorBgContainer,\n boxShadow: 'rgb(0 0 0 / 4%) 0 1px 2px 0',\n display: 'flex',\n inlineSize: 'min(440px, 100%)',\n position: 'relative',\n },\n liftSplit: {\n inlineSize: { default: 'min(880px, 100%)', [media.laptop]: 'min(440px, 100%)' },\n },\n logo: {\n display: 'flex',\n marginBlockEnd: 8,\n },\n main: {\n flex: '1',\n paddingInline: 16,\n placeItems: 'center',\n display: 'grid',\n paddingBlockEnd: '48px',\n paddingBlockStart: '24px',\n position: 'relative',\n zIndex: 1,\n },\n page: {\n flex: '1',\n overflow: 'auto',\n backgroundColor: cssVar.colorBgLayout,\n blockSize: '100%',\n boxSizing: 'border-box',\n display: 'flex',\n flexDirection: 'column',\n inlineSize: '100%',\n minBlockSize: '100dvh',\n position: 'relative',\n },\n split: {\n minBlockSize: { default: 520, [media.laptop]: 0 },\n },\n titleNode: {\n display: 'flex',\n minInlineSize: 0,\n },\n tools: {\n gap: 6,\n alignItems: 'center',\n display: 'flex',\n marginInlineStart: 'auto',\n },\n});\n"],"mappings":";AAKA,MAAa,SAAS;CACpB,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,yBAAyB;EACzB,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,yBAAyB;EACzB,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;AACF"}
|
|
@@ -3,7 +3,7 @@ import Icon from "../../Icon/Icon.mjs";
|
|
|
3
3
|
import Select from "../../Select/Select.mjs";
|
|
4
4
|
import { styles } from "./style.mjs";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
|
-
import clsx from "clsx";
|
|
6
|
+
import clsx$1 from "clsx";
|
|
7
7
|
import * as stylex from "@stylexjs/stylex";
|
|
8
8
|
import { GlobeIcon } from "lucide-react";
|
|
9
9
|
//#region src/dashboard/AuthTools/AuthLocaleSwitch.tsx
|
|
@@ -11,7 +11,7 @@ import { GlobeIcon } from "lucide-react";
|
|
|
11
11
|
function AuthLocaleSwitch({ "aria-label": ariaLabel = "Language", className, onChange, options, style, value }) {
|
|
12
12
|
return /* @__PURE__ */ jsx(Select, {
|
|
13
13
|
"aria-label": ariaLabel,
|
|
14
|
-
className: clsx("lobe-auth-locale-switch", className),
|
|
14
|
+
className: clsx$1("lobe-auth-locale-switch", className),
|
|
15
15
|
options,
|
|
16
16
|
prefix: /* @__PURE__ */ jsx(Icon, {
|
|
17
17
|
icon: GlobeIcon,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthLocaleSwitch.mjs","names":[],"sources":["../../../src/dashboard/AuthTools/AuthLocaleSwitch.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { GlobeIcon } from 'lucide-react';\n\nimport Icon from '@/Icon';\nimport Select from '@/Select';\n\nimport { styles } from './style';\nimport type { AuthLocaleSwitchProps } from './type';\n\n/** Pill language select for auth corner tools. Controlled; pass your locale list. */\nfunction AuthLocaleSwitch({\n 'aria-label': ariaLabel = 'Language',\n className,\n onChange,\n options,\n style,\n value,\n}: AuthLocaleSwitchProps) {\n return (\n <Select\n aria-label={ariaLabel}\n className={clsx('lobe-auth-locale-switch', className)}\n options={options}\n prefix={<Icon icon={GlobeIcon} {...stylex.props(styles.localeIcon)} />}\n size=\"small\"\n style={style}\n value={value}\n variant=\"outlined\"\n onChange={(next: unknown) => {\n if (typeof next === 'string') onChange?.(next);\n }}\n />\n );\n}\n\nAuthLocaleSwitch.displayName = 'AuthLocaleSwitch';\n\nexport default AuthLocaleSwitch;\n"],"mappings":";;;;;;;;;;AAYA,SAAS,iBAAiB,EACxB,cAAc,YAAY,YAC1B,WACA,UACA,SACA,OACA,SACwB;CACxB,OAAO,oBAAC,QAAD;EAAQ,cAAY;EAAW,
|
|
1
|
+
{"version":3,"file":"AuthLocaleSwitch.mjs","names":["clsx"],"sources":["../../../src/dashboard/AuthTools/AuthLocaleSwitch.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { GlobeIcon } from 'lucide-react';\n\nimport Icon from '@/Icon';\nimport Select from '@/Select';\n\nimport { styles } from './style';\nimport type { AuthLocaleSwitchProps } from './type';\n\n/** Pill language select for auth corner tools. Controlled; pass your locale list. */\nfunction AuthLocaleSwitch({\n 'aria-label': ariaLabel = 'Language',\n className,\n onChange,\n options,\n style,\n value,\n}: AuthLocaleSwitchProps) {\n return (\n <Select\n aria-label={ariaLabel}\n className={clsx('lobe-auth-locale-switch', className)}\n options={options}\n prefix={<Icon icon={GlobeIcon} {...stylex.props(styles.localeIcon)} />}\n size=\"small\"\n style={style}\n value={value}\n variant=\"outlined\"\n onChange={(next: unknown) => {\n if (typeof next === 'string') onChange?.(next);\n }}\n />\n );\n}\n\nAuthLocaleSwitch.displayName = 'AuthLocaleSwitch';\n\nexport default AuthLocaleSwitch;\n"],"mappings":";;;;;;;;;;AAYA,SAAS,iBAAiB,EACxB,cAAc,YAAY,YAC1B,WACA,UACA,SACA,OACA,SACwB;CACxB,OAAO,oBAAC,QAAD;EAAQ,cAAY;EAAW,WAAWA,OAAK,2BAA2B,SAAS;EAAY;EAAS,QAAQ,oBAAC,MAAD;GAAM,MAAM;GAAW,GAAI,OAAO,MAAM,OAAO,UAAU;EAAI,CAAA;EAAG,MAAK;EAAe;EAAc;EAAO,SAAQ;EAAW,WAAW,SAAkB;GAC9Q,IAAI,OAAO,SAAS,UAAU,WAAW,IAAI;EAC/C;CAAI,CAAA;AACN;AACA,iBAAiB,cAAc"}
|
|
@@ -3,7 +3,7 @@ import Icon from "../../Icon/Icon.mjs";
|
|
|
3
3
|
import Segmented from "../../Segmented/Segmented.mjs";
|
|
4
4
|
import { styles } from "./style.mjs";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
|
-
import clsx from "clsx";
|
|
6
|
+
import clsx$1 from "clsx";
|
|
7
7
|
import * as stylex from "@stylexjs/stylex";
|
|
8
8
|
import { Monitor, Moon, Sun } from "lucide-react";
|
|
9
9
|
//#region src/dashboard/AuthTools/AuthThemeSwitch.tsx
|
|
@@ -33,7 +33,7 @@ function AuthThemeSwitch({ className, labels, onChange, style, value = "auto" })
|
|
|
33
33
|
...labels
|
|
34
34
|
};
|
|
35
35
|
return /* @__PURE__ */ jsx(Segmented, {
|
|
36
|
-
className: clsx("lobe-auth-theme-switch", className),
|
|
36
|
+
className: clsx$1("lobe-auth-theme-switch", className),
|
|
37
37
|
size: "small",
|
|
38
38
|
style,
|
|
39
39
|
value,
|