@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
|
@@ -12,18 +12,18 @@ import Popover from "../Popover/Popover.mjs";
|
|
|
12
12
|
import emojiPicker_default from "../i18n/resources/en/emojiPicker.mjs";
|
|
13
13
|
import Tabs from "../Tabs/Tabs.mjs";
|
|
14
14
|
import AvatarUploader from "./AvatarUploader.mjs";
|
|
15
|
+
import { loadEmojiData } from "./loadEmojiData.mjs";
|
|
15
16
|
import { styles } from "./style.mjs";
|
|
16
17
|
import { useEmojiMartI18n } from "./useEmojiMartI18n.mjs";
|
|
17
18
|
import { memo, useMemo, useRef, useState } from "react";
|
|
18
19
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
19
|
-
import clsx from "clsx";
|
|
20
|
+
import clsx$1 from "clsx";
|
|
20
21
|
import * as stylex from "@stylexjs/stylex";
|
|
21
22
|
import { SmileIcon, TrashIcon, UploadIcon } from "lucide-react";
|
|
22
23
|
import chroma from "chroma-js";
|
|
23
|
-
import data from "@emoji-mart/data";
|
|
24
24
|
import Picker from "@emoji-mart/react";
|
|
25
|
-
import { getLobeIconCDN } from "@lobehub/icons/es/features/getLobeIconCDN
|
|
26
|
-
import { toc } from "@lobehub/icons/es/toc
|
|
25
|
+
import { getLobeIconCDN } from "@lobehub/icons/es/features/getLobeIconCDN";
|
|
26
|
+
import { toc } from "@lobehub/icons/es/toc";
|
|
27
27
|
//#region src/EmojiPicker/EmojiPicker.tsx
|
|
28
28
|
const DEFAULT_AVATAR = "🤖";
|
|
29
29
|
const EmojiPicker = memo(({ value, defaultAvatar = DEFAULT_AVATAR, onChange, locale = "en-US", allowUpload, allowDelete, allowModelAvatar, texts, onDelete, compressSize = 256, customEmojis, className, loading, onUpload, customTabs = [], popupClassName, popupStyle, customRender, open, defaultOpen = false, onOpenChange, popupProps, shape, contentProps, ...rest }) => {
|
|
@@ -109,7 +109,7 @@ const EmojiPicker = memo(({ value, defaultAvatar = DEFAULT_AVATAR, onChange, loc
|
|
|
109
109
|
const showTabs = allowDelete || items && items.length > 1;
|
|
110
110
|
const content = /* @__PURE__ */ jsxs(FlexBasic_default, {
|
|
111
111
|
ref,
|
|
112
|
-
...styleProps(styles.picker, clsx("lobe-emoji-picker", popupClassName), {
|
|
112
|
+
...styleProps(styles.picker, clsx$1("lobe-emoji-picker", popupClassName), {
|
|
113
113
|
minWidth: 310,
|
|
114
114
|
paddingTop: showTabs ? 4 : 0,
|
|
115
115
|
...pickerCssVariables,
|
|
@@ -149,7 +149,7 @@ const EmojiPicker = memo(({ value, defaultAvatar = DEFAULT_AVATAR, onChange, loc
|
|
|
149
149
|
}),
|
|
150
150
|
tab === "emoji" && /* @__PURE__ */ jsx(Picker, {
|
|
151
151
|
custom: mergedCustomEmojis,
|
|
152
|
-
data,
|
|
152
|
+
data: loadEmojiData,
|
|
153
153
|
i18n,
|
|
154
154
|
icons: "outline",
|
|
155
155
|
locale: locale.split("-")[0],
|
|
@@ -190,7 +190,7 @@ const EmojiPicker = memo(({ value, defaultAvatar = DEFAULT_AVATAR, onChange, loc
|
|
|
190
190
|
...popupProps,
|
|
191
191
|
children: customRender ? customRender(ava) : /* @__PURE__ */ jsx(Avatar, {
|
|
192
192
|
avatar: ava,
|
|
193
|
-
className: clsx("lobe-emoji-picker-avatar", className),
|
|
193
|
+
className: clsx$1("lobe-emoji-picker-avatar", className),
|
|
194
194
|
loading,
|
|
195
195
|
shape,
|
|
196
196
|
...rest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiPicker.mjs","names":["emojiPickerMessages","Flexbox"],"sources":["../../src/EmojiPicker/EmojiPicker.tsx"],"sourcesContent":["'use client';\n\nimport data from '@emoji-mart/data';\nimport Picker from '@emoji-mart/react';\nimport { getLobeIconCDN } from '@lobehub/icons/es/features/getLobeIconCDN';\nimport { toc } from '@lobehub/icons/es/toc';\nimport * as stylex from '@stylexjs/stylex';\nimport chroma from 'chroma-js';\nimport clsx from 'clsx';\nimport { SmileIcon, TrashIcon, UploadIcon } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport Avatar from '@/Avatar';\nimport { Flexbox } from '@/Flex';\nimport { useControlledState } from '@/hooks/useControlledState';\nimport emojiPickerMessages from '@/i18n/resources/en/emojiPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport Popover from '@/Popover';\nimport { styleProps } from '@/styles/stylex/props';\nimport { useTheme } from '@/styles/theme/scope';\nimport Tabs, { type TabsProps } from '@/Tabs';\nimport Tooltip from '@/Tooltip';\n\nimport AvatarUploader from './AvatarUploader';\nimport { styles } from './style';\nimport { type EmojiPickerProps } from './type';\nimport { useEmojiMartI18n } from './useEmojiMartI18n';\n\nconst DEFAULT_AVATAR = '🤖';\n\nconst EmojiPicker = memo<EmojiPickerProps>(\n ({\n value,\n defaultAvatar = DEFAULT_AVATAR,\n onChange,\n locale = 'en-US',\n allowUpload,\n allowDelete,\n allowModelAvatar,\n texts,\n onDelete,\n compressSize = 256,\n customEmojis,\n className,\n loading,\n onUpload,\n customTabs = [],\n popupClassName,\n popupStyle,\n customRender,\n open,\n defaultOpen = false,\n onOpenChange,\n popupProps,\n shape,\n contentProps,\n ...rest\n }) => {\n const ref = useRef<HTMLDivElement>(null);\n const { t } = useTranslation(emojiPickerMessages);\n const [visible, setVisible] = useControlledState(defaultOpen, {\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n value: open,\n });\n const [tab, setTab] = useState<'emoji' | 'upload'>('emoji');\n\n const theme = useTheme();\n const pickerCssVariables = useMemo<Record<string, string>>(\n () => ({\n '--emoji-picker-rgb-accent': chroma(theme.colorPrimary).rgb().join(', '),\n '--emoji-picker-rgb-background': chroma(theme.colorBgElevated).rgb().join(', '),\n }),\n [theme.colorPrimary, theme.colorBgElevated],\n );\n\n const i18n = useEmojiMartI18n(locale);\n\n const [ava, setAva] = useControlledState(defaultAvatar, {\n defaultValue: defaultAvatar,\n onChange,\n value,\n });\n\n const handleAvatarChange = (emoji: string) => {\n setAva(emoji);\n setVisible(false);\n };\n\n // Generate model avatars from @lobehub/icons when allowModelAvatar is enabled\n const mergedCustomEmojis = useMemo(() => {\n if (!allowModelAvatar) return customEmojis;\n\n const modelIcons = toc.filter((item) => item.group !== 'application');\n\n const modelEmojisCategory = {\n id: 'models',\n name: 'Models / Providers',\n emojis: modelIcons.map((item) => ({\n id: item.id.toLowerCase(),\n name: item.title,\n keywords: [item.title, item.id, item.fullTitle],\n skins: [{ src: getLobeIconCDN(item.id, { format: 'avatar', cdn: 'aliyun' }) }],\n })),\n };\n\n return customEmojis ? [modelEmojisCategory, ...customEmojis] : [modelEmojisCategory];\n }, [allowModelAvatar, customEmojis]);\n\n const emojiText = texts?.emoji ?? t('emojiPicker.emoji');\n const uploadText = texts?.upload ?? t('emojiPicker.upload');\n const deleteText = texts?.delete ?? t('emojiPicker.delete');\n\n const hideEmojiTab = typeof allowUpload === 'object' && allowUpload?.enableEmoji === false;\n\n const items: TabsProps['items'] = [\n !hideEmojiTab && {\n key: 'emoji',\n label: (\n <Tooltip title={emojiText}>\n <Icon icon={SmileIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n allowUpload && {\n key: 'upload',\n label: (\n <Tooltip title={uploadText}>\n <Icon icon={UploadIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n ...customTabs.map((tab) => ({ key: tab.value, label: tab.label })),\n ].filter(Boolean) as TabsProps['items'];\n\n const showTabs = allowDelete || (items && items.length > 1);\n\n const content = (\n <Flexbox\n ref={ref}\n {...styleProps(styles.picker, clsx('lobe-emoji-picker', popupClassName), {\n minWidth: 310,\n paddingTop: showTabs ? 4 : 0,\n ...pickerCssVariables,\n ...popupStyle,\n })}\n {...contentProps}\n >\n {showTabs && (\n <Flexbox\n horizontal\n align={'center'}\n {...stylex.props(styles.tabs)}\n justify={'space-between'}\n paddingInline={10}\n >\n <Tabs\n activeKey={tab}\n items={items}\n variant={'square'}\n classNames={{\n indicator: 'lobe-emoji-picker-tabs-indicator',\n list: 'lobe-emoji-picker-tabs-list',\n root: 'lobe-emoji-picker-tabs-root',\n tab: 'lobe-emoji-picker-tab',\n }}\n onChange={(key) => setTab(key as any)}\n />\n {allowDelete && (\n <ActionIcon\n icon={TrashIcon}\n title={deleteText}\n size={{\n blockSize: 32,\n size: 18,\n }}\n onClick={() => {\n handleAvatarChange(defaultAvatar);\n onDelete?.();\n }}\n />\n )}\n </Flexbox>\n )}\n {tab === 'emoji' && (\n <Picker\n custom={mergedCustomEmojis}\n data={data}\n i18n={i18n}\n icons={'outline'}\n locale={locale.split('-')[0]}\n navPosition={showTabs ? 'bottom' : 'top'}\n previewPosition={'none'}\n skinTonePosition={'none'}\n theme={theme.isDarkMode ? 'dark' : 'light'}\n onEmojiSelect={(e: any) => handleAvatarChange(e.src || e.native)}\n />\n )}\n {tab === 'upload' && (\n <AvatarUploader\n compressSize={compressSize}\n shape={shape}\n texts={texts}\n onChange={handleAvatarChange}\n onUpload={onUpload}\n />\n )}\n {customTabs.map(\n (item) =>\n tab === item.value && (\n <Flexbox key={item.value} padding={10}>\n {item.render(handleAvatarChange)}\n </Flexbox>\n ),\n )}\n </Flexbox>\n );\n\n return (\n <Popover\n className=\"lobe-emoji-picker-popover\"\n content={content}\n defaultOpen={defaultOpen}\n open={visible}\n placement={'bottom'}\n trigger={'click'}\n classNames={{\n content: 'lobe-emoji-picker-popover',\n root: 'lobe-emoji-picker-positioner',\n }}\n onOpenChange={(v) => {\n if (loading) return;\n setVisible(v);\n }}\n {...popupProps}\n >\n {customRender ? (\n customRender(ava)\n ) : (\n <Avatar\n avatar={ava}\n className={clsx('lobe-emoji-picker-avatar', className)}\n loading={loading}\n shape={shape}\n {...rest}\n />\n )}\n </Popover>\n );\n },\n);\n\nEmojiPicker.displayName = 'EmojiPicker';\n\nexport default EmojiPicker;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmojiPicker.mjs","names":["emojiPickerMessages","Flexbox","clsx"],"sources":["../../src/EmojiPicker/EmojiPicker.tsx"],"sourcesContent":["'use client';\n\nimport Picker from '@emoji-mart/react';\nimport { getLobeIconCDN } from '@lobehub/icons/es/features/getLobeIconCDN';\nimport { toc } from '@lobehub/icons/es/toc';\nimport * as stylex from '@stylexjs/stylex';\nimport chroma from 'chroma-js';\nimport clsx from 'clsx';\nimport { SmileIcon, TrashIcon, UploadIcon } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport Avatar from '@/Avatar';\nimport { Flexbox } from '@/Flex';\nimport { useControlledState } from '@/hooks/useControlledState';\nimport emojiPickerMessages from '@/i18n/resources/en/emojiPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport Popover from '@/Popover';\nimport { styleProps } from '@/styles/stylex/props';\nimport { useTheme } from '@/styles/theme/scope';\nimport Tabs, { type TabsProps } from '@/Tabs';\nimport Tooltip from '@/Tooltip';\n\nimport AvatarUploader from './AvatarUploader';\nimport { loadEmojiData } from './loadEmojiData';\nimport { styles } from './style';\nimport { type EmojiPickerProps } from './type';\nimport { useEmojiMartI18n } from './useEmojiMartI18n';\n\nconst DEFAULT_AVATAR = '🤖';\n\nconst EmojiPicker = memo<EmojiPickerProps>(\n ({\n value,\n defaultAvatar = DEFAULT_AVATAR,\n onChange,\n locale = 'en-US',\n allowUpload,\n allowDelete,\n allowModelAvatar,\n texts,\n onDelete,\n compressSize = 256,\n customEmojis,\n className,\n loading,\n onUpload,\n customTabs = [],\n popupClassName,\n popupStyle,\n customRender,\n open,\n defaultOpen = false,\n onOpenChange,\n popupProps,\n shape,\n contentProps,\n ...rest\n }) => {\n const ref = useRef<HTMLDivElement>(null);\n const { t } = useTranslation(emojiPickerMessages);\n const [visible, setVisible] = useControlledState(defaultOpen, {\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n value: open,\n });\n const [tab, setTab] = useState<'emoji' | 'upload'>('emoji');\n\n const theme = useTheme();\n const pickerCssVariables = useMemo<Record<string, string>>(\n () => ({\n '--emoji-picker-rgb-accent': chroma(theme.colorPrimary).rgb().join(', '),\n '--emoji-picker-rgb-background': chroma(theme.colorBgElevated).rgb().join(', '),\n }),\n [theme.colorPrimary, theme.colorBgElevated],\n );\n\n const i18n = useEmojiMartI18n(locale);\n\n const [ava, setAva] = useControlledState(defaultAvatar, {\n defaultValue: defaultAvatar,\n onChange,\n value,\n });\n\n const handleAvatarChange = (emoji: string) => {\n setAva(emoji);\n setVisible(false);\n };\n\n // Generate model avatars from @lobehub/icons when allowModelAvatar is enabled\n const mergedCustomEmojis = useMemo(() => {\n if (!allowModelAvatar) return customEmojis;\n\n const modelIcons = toc.filter((item) => item.group !== 'application');\n\n const modelEmojisCategory = {\n id: 'models',\n name: 'Models / Providers',\n emojis: modelIcons.map((item) => ({\n id: item.id.toLowerCase(),\n name: item.title,\n keywords: [item.title, item.id, item.fullTitle],\n skins: [{ src: getLobeIconCDN(item.id, { format: 'avatar', cdn: 'aliyun' }) }],\n })),\n };\n\n return customEmojis ? [modelEmojisCategory, ...customEmojis] : [modelEmojisCategory];\n }, [allowModelAvatar, customEmojis]);\n\n const emojiText = texts?.emoji ?? t('emojiPicker.emoji');\n const uploadText = texts?.upload ?? t('emojiPicker.upload');\n const deleteText = texts?.delete ?? t('emojiPicker.delete');\n\n const hideEmojiTab = typeof allowUpload === 'object' && allowUpload?.enableEmoji === false;\n\n const items: TabsProps['items'] = [\n !hideEmojiTab && {\n key: 'emoji',\n label: (\n <Tooltip title={emojiText}>\n <Icon icon={SmileIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n allowUpload && {\n key: 'upload',\n label: (\n <Tooltip title={uploadText}>\n <Icon icon={UploadIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n ...customTabs.map((tab) => ({ key: tab.value, label: tab.label })),\n ].filter(Boolean) as TabsProps['items'];\n\n const showTabs = allowDelete || (items && items.length > 1);\n\n const content = (\n <Flexbox\n ref={ref}\n {...styleProps(styles.picker, clsx('lobe-emoji-picker', popupClassName), {\n minWidth: 310,\n paddingTop: showTabs ? 4 : 0,\n ...pickerCssVariables,\n ...popupStyle,\n })}\n {...contentProps}\n >\n {showTabs && (\n <Flexbox\n horizontal\n align={'center'}\n {...stylex.props(styles.tabs)}\n justify={'space-between'}\n paddingInline={10}\n >\n <Tabs\n activeKey={tab}\n items={items}\n variant={'square'}\n classNames={{\n indicator: 'lobe-emoji-picker-tabs-indicator',\n list: 'lobe-emoji-picker-tabs-list',\n root: 'lobe-emoji-picker-tabs-root',\n tab: 'lobe-emoji-picker-tab',\n }}\n onChange={(key) => setTab(key as any)}\n />\n {allowDelete && (\n <ActionIcon\n icon={TrashIcon}\n title={deleteText}\n size={{\n blockSize: 32,\n size: 18,\n }}\n onClick={() => {\n handleAvatarChange(defaultAvatar);\n onDelete?.();\n }}\n />\n )}\n </Flexbox>\n )}\n {tab === 'emoji' && (\n <Picker\n custom={mergedCustomEmojis}\n data={loadEmojiData}\n i18n={i18n}\n icons={'outline'}\n locale={locale.split('-')[0]}\n navPosition={showTabs ? 'bottom' : 'top'}\n previewPosition={'none'}\n skinTonePosition={'none'}\n theme={theme.isDarkMode ? 'dark' : 'light'}\n onEmojiSelect={(e: any) => handleAvatarChange(e.src || e.native)}\n />\n )}\n {tab === 'upload' && (\n <AvatarUploader\n compressSize={compressSize}\n shape={shape}\n texts={texts}\n onChange={handleAvatarChange}\n onUpload={onUpload}\n />\n )}\n {customTabs.map(\n (item) =>\n tab === item.value && (\n <Flexbox key={item.value} padding={10}>\n {item.render(handleAvatarChange)}\n </Flexbox>\n ),\n )}\n </Flexbox>\n );\n\n return (\n <Popover\n className=\"lobe-emoji-picker-popover\"\n content={content}\n defaultOpen={defaultOpen}\n open={visible}\n placement={'bottom'}\n trigger={'click'}\n classNames={{\n content: 'lobe-emoji-picker-popover',\n root: 'lobe-emoji-picker-positioner',\n }}\n onOpenChange={(v) => {\n if (loading) return;\n setVisible(v);\n }}\n {...popupProps}\n >\n {customRender ? (\n customRender(ava)\n ) : (\n <Avatar\n avatar={ava}\n className={clsx('lobe-emoji-picker-avatar', className)}\n loading={loading}\n shape={shape}\n {...rest}\n />\n )}\n </Popover>\n );\n },\n);\n\nEmojiPicker.displayName = 'EmojiPicker';\n\nexport default EmojiPicker;\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadEmojiData.mjs","names":[],"sources":["../../src/EmojiPicker/loadEmojiData.ts"],"sourcesContent":["// `@emoji-mart/data` resolves to a JSON file, which Node only loads with an import attribute,\n// so it stays out of the static graph and loads when the picker opens.\nexport const loadEmojiData = (): Promise<unknown> =>\n import('@emoji-mart/data').then((module) => module.default);\n"],"mappings":";AAEA,MAAa,sBACX,OAAO,mBAAmB,CAAC,MAAM,WAAW,OAAO,OAAO"}
|
|
@@ -5,7 +5,7 @@ import { styles } from "./style.mjs";
|
|
|
5
5
|
import { ToastDodge } from "./ToastDodge.mjs";
|
|
6
6
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } 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
|
import { X } from "lucide-react";
|
|
11
11
|
//#region src/FloatingPanel/FloatingPanel.tsx
|
|
@@ -271,7 +271,7 @@ const FloatingPanel = memo(({ afterClose, ariaLabel, children, className, classN
|
|
|
271
271
|
"aria-label": ariaLabel,
|
|
272
272
|
className: classNames?.wrapper,
|
|
273
273
|
motionProps: resolvedMotionProps,
|
|
274
|
-
panelClassName: clsx(className, classNames?.panel),
|
|
274
|
+
panelClassName: clsx$1(className, classNames?.panel),
|
|
275
275
|
panelXstyle: [s.panel, isTop && s.panelTop],
|
|
276
276
|
popupStyle,
|
|
277
277
|
width: activeResizeSize?.width ?? width,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingPanel.mjs","names":[],"sources":["../../src/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { X } from 'lucide-react';\nimport type { MotionProps } from 'motion/react';\nimport type { CSSProperties, PointerEvent as ReactPointerEvent } from 'react';\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { styleProps } from '@/styles/stylex/props';\n\nimport type { ModalRootProps } from '../Modal';\nimport { ModalBackdrop, ModalPortal, ModalRoot } from '../Modal';\nimport {\n ModalCloseImpl,\n ModalContentImpl,\n ModalFooterImpl,\n ModalHeaderImpl,\n ModalPopupImpl,\n ModalTitleImpl,\n} from '../Modal/atoms';\nimport { styles } from './style';\nimport { ToastDodge } from './ToastDodge';\nimport type {\n FloatingPanelOffset,\n FloatingPanelPlacement,\n FloatingPanelProps,\n FloatingPanelResizeHandle,\n FloatingPanelSize,\n} from './type';\n\nconst DEFAULT_MIN_HEIGHT = 180;\nconst DEFAULT_MIN_WIDTH = 320;\n\ninterface InternalFloatingPanelSize extends FloatingPanelSize {\n sourceHeight?: number | string;\n sourceWidth?: number | string;\n}\n\nconst defaultMotionProps: MotionProps = {\n animate: { opacity: 1, scale: 1, x: 0, y: 0 },\n exit: {\n opacity: 0,\n scale: 0.98,\n transition: { duration: 0.14, ease: [0.4, 0, 1, 1] },\n y: 12,\n },\n initial: { opacity: 0, scale: 0.98, y: 12 },\n transition: { duration: 0.2, ease: [0.32, 0.72, 0, 1] },\n};\n\nconst topMotionProps: MotionProps = {\n animate: { opacity: 1, scale: 1, x: 0, y: 0 },\n exit: {\n opacity: 0,\n scale: 0.98,\n transition: { duration: 0.14, ease: [0.4, 0, 1, 1] },\n y: -12,\n },\n initial: { opacity: 0, scale: 0.98, y: -12 },\n transition: { duration: 0.2, ease: [0.32, 0.72, 0, 1] },\n};\n\nconst resolveOffset = (offset: FloatingPanelOffset) => {\n if (typeof offset === 'object') {\n return {\n x: offset.x ?? 8,\n y: offset.y ?? 8,\n };\n }\n\n return { x: offset, y: offset };\n};\n\nconst getPlacementStyle = (\n placement: FloatingPanelPlacement,\n offset: FloatingPanelOffset,\n): CSSProperties => {\n const { x, y } = resolveOffset(offset);\n const isTop = placement.startsWith('top');\n const isLeft = placement.endsWith('Left');\n\n const px = (value: number | string) => (typeof value === 'number' ? `${value}px` : value);\n const blockInset = `calc(${px(y)} + var(--floating-panel-reserve-block-end, 0px))`;\n const inlineInset = `calc(${px(x)} + var(--floating-panel-reserve-inline-end, 0px))`;\n\n return {\n alignItems: isTop ? 'flex-start' : 'flex-end',\n justifyContent: isLeft ? 'flex-start' : 'flex-end',\n paddingBlockEnd: isTop ? undefined : blockInset,\n paddingBlockStart: isTop ? blockInset : undefined,\n paddingInlineEnd: isLeft ? undefined : inlineInset,\n paddingInlineStart: isLeft ? inlineInset : undefined,\n };\n};\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst getViewportMaxSize = () => ({\n height: Math.max(DEFAULT_MIN_HEIGHT, window.innerHeight - 16),\n width: Math.max(DEFAULT_MIN_WIDTH, window.innerWidth - 16),\n});\n\nconst getResizeHandles = (placement: FloatingPanelPlacement): FloatingPanelResizeHandle[] => {\n switch (placement) {\n case 'bottomLeft': {\n return ['top', 'right', 'topRight'];\n }\n case 'topLeft': {\n return ['bottom', 'right', 'bottomRight'];\n }\n case 'topRight': {\n return ['bottom', 'left', 'bottomLeft'];\n }\n default: {\n return ['top', 'left', 'topLeft'];\n }\n }\n};\n\nconst getResizeHandleClassName = (s: typeof styles, handle: FloatingPanelResizeHandle) => {\n const handleClassMap = {\n bottom: s.resizeHandleBottom,\n bottomLeft: s.resizeHandleBottomLeft,\n bottomRight: s.resizeHandleBottomRight,\n left: s.resizeHandleLeft,\n right: s.resizeHandleRight,\n top: s.resizeHandleTop,\n topLeft: s.resizeHandleTopLeft,\n topRight: s.resizeHandleTopRight,\n };\n\n return handleClassMap[handle];\n};\n\nconst resolveResizeSize = ({\n handle,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n startHeight,\n startWidth,\n startX,\n startY,\n x,\n y,\n}: {\n handle: FloatingPanelResizeHandle;\n maxHeight: number;\n maxWidth: number;\n minHeight: number;\n minWidth: number;\n startHeight: number;\n startWidth: number;\n startX: number;\n startY: number;\n x: number;\n y: number;\n}): FloatingPanelSize => {\n const deltaX = x - startX;\n const deltaY = y - startY;\n const growsLeft = handle.includes('Left') || handle === 'left';\n const growsRight = handle.includes('Right') || handle === 'right';\n const growsTop = handle.includes('top') || handle === 'top';\n const growsBottom = handle.includes('bottom') || handle === 'bottom';\n\n const nextWidth = growsLeft ? startWidth - deltaX : growsRight ? startWidth + deltaX : startWidth;\n const nextHeight = growsTop\n ? startHeight - deltaY\n : growsBottom\n ? startHeight + deltaY\n : startHeight;\n\n return {\n height: clamp(nextHeight, minHeight, maxHeight),\n width: clamp(nextWidth, minWidth, maxWidth),\n };\n};\n\nconst FloatingPanel = memo<FloatingPanelProps>(\n ({\n afterClose,\n ariaLabel,\n children,\n className,\n classNames,\n closable = true,\n closeIcon,\n closeLabel = 'Close',\n defaultOpen,\n actions,\n footer,\n getContainer,\n height,\n keyboard = true,\n mask = false,\n maskClosable = true,\n maxHeight,\n maxWidth,\n minHeight = DEFAULT_MIN_HEIGHT,\n minWidth = DEFAULT_MIN_WIDTH,\n modal = false,\n motionProps,\n offset = 8,\n onClose,\n onOpenChange,\n onResize,\n onResizeEnd,\n open,\n placement = 'bottomRight',\n resizable = true,\n styles: semanticStyles,\n title,\n width = 640,\n zIndex,\n }) => {\n const s = styles;\n const isTop = placement.startsWith('top');\n const container = getContainer === false ? undefined : getContainer;\n const [resizeSize, setResizeSize] = useState<InternalFloatingPanelSize>();\n const latestResizeSizeRef = useRef<FloatingPanelSize | undefined>(undefined);\n const resizeCleanupRef = useRef<(() => void) | undefined>(undefined);\n const activeResizeSize =\n resizeSize?.sourceWidth === width && resizeSize.sourceHeight === height\n ? resizeSize\n : undefined;\n\n useEffect(\n () => () => {\n resizeCleanupRef.current?.();\n },\n [],\n );\n\n const popupStyle = useMemo(\n () => ({\n ...getPlacementStyle(placement, offset),\n ...semanticStyles?.wrapper,\n }),\n [offset, placement, semanticStyles?.wrapper],\n );\n\n const handleOpenChange = useCallback<NonNullable<ModalRootProps['onOpenChange']>>(\n (nextOpen, eventDetails) => {\n if (!nextOpen) {\n if (keyboard === false && eventDetails.reason === 'escape-key') return;\n if (maskClosable === false && eventDetails.reason === 'outside-press') return;\n onClose?.();\n }\n\n onOpenChange?.(nextOpen, eventDetails);\n },\n [keyboard, maskClosable, onClose, onOpenChange],\n );\n\n const showHeader = title !== undefined || actions !== undefined || closable;\n const resolvedMotionProps = motionProps ?? (isTop ? topMotionProps : defaultMotionProps);\n const resizeHandles = useMemo(() => getResizeHandles(placement), [placement]);\n\n const handleResizeStart = useCallback(\n (handle: FloatingPanelResizeHandle) => (event: ReactPointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n const panel = event.currentTarget.parentElement;\n if (!panel) return;\n\n const rect = panel.getBoundingClientRect();\n const viewportMaxSize = getViewportMaxSize();\n const resolvedMaxWidth = Math.max(minWidth, maxWidth ?? viewportMaxSize.width);\n const resolvedMaxHeight = Math.max(minHeight, maxHeight ?? viewportMaxSize.height);\n const startX = event.clientX;\n const startY = event.clientY;\n\n const handleResizeMove = (moveEvent: PointerEvent) => {\n const nextSize = resolveResizeSize({\n handle,\n maxHeight: resolvedMaxHeight,\n maxWidth: resolvedMaxWidth,\n minHeight,\n minWidth,\n startHeight: rect.height,\n startWidth: rect.width,\n startX,\n startY,\n x: moveEvent.clientX,\n y: moveEvent.clientY,\n });\n\n const nextState = { ...nextSize, sourceHeight: height, sourceWidth: width };\n latestResizeSizeRef.current = nextSize;\n setResizeSize(nextState);\n onResize?.(nextSize);\n };\n\n const handleResizeEnd = () => {\n resizeCleanupRef.current?.();\n resizeCleanupRef.current = undefined;\n\n if (latestResizeSizeRef.current) onResizeEnd?.(latestResizeSizeRef.current);\n };\n\n resizeCleanupRef.current?.();\n window.addEventListener('pointermove', handleResizeMove);\n window.addEventListener('pointerup', handleResizeEnd);\n resizeCleanupRef.current = () => {\n window.removeEventListener('pointermove', handleResizeMove);\n window.removeEventListener('pointerup', handleResizeEnd);\n };\n },\n [height, maxHeight, maxWidth, minHeight, minWidth, onResize, onResizeEnd, width],\n );\n\n return (\n <ModalRoot\n defaultOpen={defaultOpen}\n modal={modal}\n open={open}\n zIndex={zIndex}\n onExitComplete={afterClose}\n onOpenChange={handleOpenChange}\n >\n <ModalPortal container={container}>\n {mask && (\n <ModalBackdrop className={classNames?.backdrop} style={semanticStyles?.backdrop} />\n )}\n <ModalPopupImpl\n aria-label={ariaLabel}\n className={classNames?.wrapper}\n motionProps={resolvedMotionProps}\n panelClassName={clsx(className, classNames?.panel)}\n panelXstyle={[s.panel, isTop && s.panelTop]}\n popupStyle={popupStyle}\n width={activeResizeSize?.width ?? width}\n xstyle={s.wrapper}\n style={{\n height: activeResizeSize?.height ?? height,\n minHeight,\n minWidth,\n width: activeResizeSize?.width,\n ...semanticStyles?.panel,\n }}\n >\n {placement === 'bottomRight' && <ToastDodge />}\n {resizable &&\n resizeHandles.map((handle) => (\n <div\n aria-hidden\n data-floating-panel-resize-handle={handle}\n key={handle}\n {...styleProps(\n [s.resizeHandle, getResizeHandleClassName(s, handle)],\n classNames?.resizeHandle,\n semanticStyles?.resizeHandle,\n )}\n onPointerDown={handleResizeStart(handle)}\n />\n ))}\n {showHeader && (\n <ModalHeaderImpl\n className={classNames?.header}\n style={semanticStyles?.header}\n xstyle={s.header}\n >\n {title !== undefined ? (\n <ModalTitleImpl\n className={classNames?.title}\n style={semanticStyles?.title}\n xstyle={s.title}\n >\n {title}\n </ModalTitleImpl>\n ) : (\n <span />\n )}\n <div {...stylex.props(s.headerActions)}>\n {actions && (\n <div\n {...styleProps(s.actions, classNames?.actions, semanticStyles?.actions)}\n >\n {actions}\n </div>\n )}\n {closable && (\n <ModalCloseImpl\n aria-label={closeLabel}\n className={classNames?.close}\n style={semanticStyles?.close}\n xstyle={s.close}\n >\n {closeIcon ?? <X size={16} />}\n </ModalCloseImpl>\n )}\n </div>\n </ModalHeaderImpl>\n )}\n <ModalContentImpl\n className={classNames?.body}\n style={semanticStyles?.body}\n xstyle={s.body}\n >\n {children}\n </ModalContentImpl>\n {footer && (\n <ModalFooterImpl\n className={classNames?.footer}\n style={semanticStyles?.footer}\n xstyle={s.footer}\n >\n {footer}\n </ModalFooterImpl>\n )}\n </ModalPopupImpl>\n </ModalPortal>\n </ModalRoot>\n );\n },\n);\n\nFloatingPanel.displayName = 'FloatingPanel';\n\nexport { FloatingPanel };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FloatingPanel.mjs","names":["clsx"],"sources":["../../src/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { X } from 'lucide-react';\nimport type { MotionProps } from 'motion/react';\nimport type { CSSProperties, PointerEvent as ReactPointerEvent } from 'react';\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { styleProps } from '@/styles/stylex/props';\n\nimport type { ModalRootProps } from '../Modal';\nimport { ModalBackdrop, ModalPortal, ModalRoot } from '../Modal';\nimport {\n ModalCloseImpl,\n ModalContentImpl,\n ModalFooterImpl,\n ModalHeaderImpl,\n ModalPopupImpl,\n ModalTitleImpl,\n} from '../Modal/atoms';\nimport { styles } from './style';\nimport { ToastDodge } from './ToastDodge';\nimport type {\n FloatingPanelOffset,\n FloatingPanelPlacement,\n FloatingPanelProps,\n FloatingPanelResizeHandle,\n FloatingPanelSize,\n} from './type';\n\nconst DEFAULT_MIN_HEIGHT = 180;\nconst DEFAULT_MIN_WIDTH = 320;\n\ninterface InternalFloatingPanelSize extends FloatingPanelSize {\n sourceHeight?: number | string;\n sourceWidth?: number | string;\n}\n\nconst defaultMotionProps: MotionProps = {\n animate: { opacity: 1, scale: 1, x: 0, y: 0 },\n exit: {\n opacity: 0,\n scale: 0.98,\n transition: { duration: 0.14, ease: [0.4, 0, 1, 1] },\n y: 12,\n },\n initial: { opacity: 0, scale: 0.98, y: 12 },\n transition: { duration: 0.2, ease: [0.32, 0.72, 0, 1] },\n};\n\nconst topMotionProps: MotionProps = {\n animate: { opacity: 1, scale: 1, x: 0, y: 0 },\n exit: {\n opacity: 0,\n scale: 0.98,\n transition: { duration: 0.14, ease: [0.4, 0, 1, 1] },\n y: -12,\n },\n initial: { opacity: 0, scale: 0.98, y: -12 },\n transition: { duration: 0.2, ease: [0.32, 0.72, 0, 1] },\n};\n\nconst resolveOffset = (offset: FloatingPanelOffset) => {\n if (typeof offset === 'object') {\n return {\n x: offset.x ?? 8,\n y: offset.y ?? 8,\n };\n }\n\n return { x: offset, y: offset };\n};\n\nconst getPlacementStyle = (\n placement: FloatingPanelPlacement,\n offset: FloatingPanelOffset,\n): CSSProperties => {\n const { x, y } = resolveOffset(offset);\n const isTop = placement.startsWith('top');\n const isLeft = placement.endsWith('Left');\n\n const px = (value: number | string) => (typeof value === 'number' ? `${value}px` : value);\n const blockInset = `calc(${px(y)} + var(--floating-panel-reserve-block-end, 0px))`;\n const inlineInset = `calc(${px(x)} + var(--floating-panel-reserve-inline-end, 0px))`;\n\n return {\n alignItems: isTop ? 'flex-start' : 'flex-end',\n justifyContent: isLeft ? 'flex-start' : 'flex-end',\n paddingBlockEnd: isTop ? undefined : blockInset,\n paddingBlockStart: isTop ? blockInset : undefined,\n paddingInlineEnd: isLeft ? undefined : inlineInset,\n paddingInlineStart: isLeft ? inlineInset : undefined,\n };\n};\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst getViewportMaxSize = () => ({\n height: Math.max(DEFAULT_MIN_HEIGHT, window.innerHeight - 16),\n width: Math.max(DEFAULT_MIN_WIDTH, window.innerWidth - 16),\n});\n\nconst getResizeHandles = (placement: FloatingPanelPlacement): FloatingPanelResizeHandle[] => {\n switch (placement) {\n case 'bottomLeft': {\n return ['top', 'right', 'topRight'];\n }\n case 'topLeft': {\n return ['bottom', 'right', 'bottomRight'];\n }\n case 'topRight': {\n return ['bottom', 'left', 'bottomLeft'];\n }\n default: {\n return ['top', 'left', 'topLeft'];\n }\n }\n};\n\nconst getResizeHandleClassName = (s: typeof styles, handle: FloatingPanelResizeHandle) => {\n const handleClassMap = {\n bottom: s.resizeHandleBottom,\n bottomLeft: s.resizeHandleBottomLeft,\n bottomRight: s.resizeHandleBottomRight,\n left: s.resizeHandleLeft,\n right: s.resizeHandleRight,\n top: s.resizeHandleTop,\n topLeft: s.resizeHandleTopLeft,\n topRight: s.resizeHandleTopRight,\n };\n\n return handleClassMap[handle];\n};\n\nconst resolveResizeSize = ({\n handle,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n startHeight,\n startWidth,\n startX,\n startY,\n x,\n y,\n}: {\n handle: FloatingPanelResizeHandle;\n maxHeight: number;\n maxWidth: number;\n minHeight: number;\n minWidth: number;\n startHeight: number;\n startWidth: number;\n startX: number;\n startY: number;\n x: number;\n y: number;\n}): FloatingPanelSize => {\n const deltaX = x - startX;\n const deltaY = y - startY;\n const growsLeft = handle.includes('Left') || handle === 'left';\n const growsRight = handle.includes('Right') || handle === 'right';\n const growsTop = handle.includes('top') || handle === 'top';\n const growsBottom = handle.includes('bottom') || handle === 'bottom';\n\n const nextWidth = growsLeft ? startWidth - deltaX : growsRight ? startWidth + deltaX : startWidth;\n const nextHeight = growsTop\n ? startHeight - deltaY\n : growsBottom\n ? startHeight + deltaY\n : startHeight;\n\n return {\n height: clamp(nextHeight, minHeight, maxHeight),\n width: clamp(nextWidth, minWidth, maxWidth),\n };\n};\n\nconst FloatingPanel = memo<FloatingPanelProps>(\n ({\n afterClose,\n ariaLabel,\n children,\n className,\n classNames,\n closable = true,\n closeIcon,\n closeLabel = 'Close',\n defaultOpen,\n actions,\n footer,\n getContainer,\n height,\n keyboard = true,\n mask = false,\n maskClosable = true,\n maxHeight,\n maxWidth,\n minHeight = DEFAULT_MIN_HEIGHT,\n minWidth = DEFAULT_MIN_WIDTH,\n modal = false,\n motionProps,\n offset = 8,\n onClose,\n onOpenChange,\n onResize,\n onResizeEnd,\n open,\n placement = 'bottomRight',\n resizable = true,\n styles: semanticStyles,\n title,\n width = 640,\n zIndex,\n }) => {\n const s = styles;\n const isTop = placement.startsWith('top');\n const container = getContainer === false ? undefined : getContainer;\n const [resizeSize, setResizeSize] = useState<InternalFloatingPanelSize>();\n const latestResizeSizeRef = useRef<FloatingPanelSize | undefined>(undefined);\n const resizeCleanupRef = useRef<(() => void) | undefined>(undefined);\n const activeResizeSize =\n resizeSize?.sourceWidth === width && resizeSize.sourceHeight === height\n ? resizeSize\n : undefined;\n\n useEffect(\n () => () => {\n resizeCleanupRef.current?.();\n },\n [],\n );\n\n const popupStyle = useMemo(\n () => ({\n ...getPlacementStyle(placement, offset),\n ...semanticStyles?.wrapper,\n }),\n [offset, placement, semanticStyles?.wrapper],\n );\n\n const handleOpenChange = useCallback<NonNullable<ModalRootProps['onOpenChange']>>(\n (nextOpen, eventDetails) => {\n if (!nextOpen) {\n if (keyboard === false && eventDetails.reason === 'escape-key') return;\n if (maskClosable === false && eventDetails.reason === 'outside-press') return;\n onClose?.();\n }\n\n onOpenChange?.(nextOpen, eventDetails);\n },\n [keyboard, maskClosable, onClose, onOpenChange],\n );\n\n const showHeader = title !== undefined || actions !== undefined || closable;\n const resolvedMotionProps = motionProps ?? (isTop ? topMotionProps : defaultMotionProps);\n const resizeHandles = useMemo(() => getResizeHandles(placement), [placement]);\n\n const handleResizeStart = useCallback(\n (handle: FloatingPanelResizeHandle) => (event: ReactPointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n const panel = event.currentTarget.parentElement;\n if (!panel) return;\n\n const rect = panel.getBoundingClientRect();\n const viewportMaxSize = getViewportMaxSize();\n const resolvedMaxWidth = Math.max(minWidth, maxWidth ?? viewportMaxSize.width);\n const resolvedMaxHeight = Math.max(minHeight, maxHeight ?? viewportMaxSize.height);\n const startX = event.clientX;\n const startY = event.clientY;\n\n const handleResizeMove = (moveEvent: PointerEvent) => {\n const nextSize = resolveResizeSize({\n handle,\n maxHeight: resolvedMaxHeight,\n maxWidth: resolvedMaxWidth,\n minHeight,\n minWidth,\n startHeight: rect.height,\n startWidth: rect.width,\n startX,\n startY,\n x: moveEvent.clientX,\n y: moveEvent.clientY,\n });\n\n const nextState = { ...nextSize, sourceHeight: height, sourceWidth: width };\n latestResizeSizeRef.current = nextSize;\n setResizeSize(nextState);\n onResize?.(nextSize);\n };\n\n const handleResizeEnd = () => {\n resizeCleanupRef.current?.();\n resizeCleanupRef.current = undefined;\n\n if (latestResizeSizeRef.current) onResizeEnd?.(latestResizeSizeRef.current);\n };\n\n resizeCleanupRef.current?.();\n window.addEventListener('pointermove', handleResizeMove);\n window.addEventListener('pointerup', handleResizeEnd);\n resizeCleanupRef.current = () => {\n window.removeEventListener('pointermove', handleResizeMove);\n window.removeEventListener('pointerup', handleResizeEnd);\n };\n },\n [height, maxHeight, maxWidth, minHeight, minWidth, onResize, onResizeEnd, width],\n );\n\n return (\n <ModalRoot\n defaultOpen={defaultOpen}\n modal={modal}\n open={open}\n zIndex={zIndex}\n onExitComplete={afterClose}\n onOpenChange={handleOpenChange}\n >\n <ModalPortal container={container}>\n {mask && (\n <ModalBackdrop className={classNames?.backdrop} style={semanticStyles?.backdrop} />\n )}\n <ModalPopupImpl\n aria-label={ariaLabel}\n className={classNames?.wrapper}\n motionProps={resolvedMotionProps}\n panelClassName={clsx(className, classNames?.panel)}\n panelXstyle={[s.panel, isTop && s.panelTop]}\n popupStyle={popupStyle}\n width={activeResizeSize?.width ?? width}\n xstyle={s.wrapper}\n style={{\n height: activeResizeSize?.height ?? height,\n minHeight,\n minWidth,\n width: activeResizeSize?.width,\n ...semanticStyles?.panel,\n }}\n >\n {placement === 'bottomRight' && <ToastDodge />}\n {resizable &&\n resizeHandles.map((handle) => (\n <div\n aria-hidden\n data-floating-panel-resize-handle={handle}\n key={handle}\n {...styleProps(\n [s.resizeHandle, getResizeHandleClassName(s, handle)],\n classNames?.resizeHandle,\n semanticStyles?.resizeHandle,\n )}\n onPointerDown={handleResizeStart(handle)}\n />\n ))}\n {showHeader && (\n <ModalHeaderImpl\n className={classNames?.header}\n style={semanticStyles?.header}\n xstyle={s.header}\n >\n {title !== undefined ? (\n <ModalTitleImpl\n className={classNames?.title}\n style={semanticStyles?.title}\n xstyle={s.title}\n >\n {title}\n </ModalTitleImpl>\n ) : (\n <span />\n )}\n <div {...stylex.props(s.headerActions)}>\n {actions && (\n <div\n {...styleProps(s.actions, classNames?.actions, semanticStyles?.actions)}\n >\n {actions}\n </div>\n )}\n {closable && (\n <ModalCloseImpl\n aria-label={closeLabel}\n className={classNames?.close}\n style={semanticStyles?.close}\n xstyle={s.close}\n >\n {closeIcon ?? <X size={16} />}\n </ModalCloseImpl>\n )}\n </div>\n </ModalHeaderImpl>\n )}\n <ModalContentImpl\n className={classNames?.body}\n style={semanticStyles?.body}\n xstyle={s.body}\n >\n {children}\n </ModalContentImpl>\n {footer && (\n <ModalFooterImpl\n className={classNames?.footer}\n style={semanticStyles?.footer}\n xstyle={s.footer}\n >\n {footer}\n </ModalFooterImpl>\n )}\n </ModalPopupImpl>\n </ModalPortal>\n </ModalRoot>\n );\n },\n);\n\nFloatingPanel.displayName = 'FloatingPanel';\n\nexport { FloatingPanel };\n"],"mappings":"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"}
|
package/es/FormKit/List.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import { useStoreSelector } from "./useStoreSelector.mjs";
|
|
|
9
9
|
import FormField from "./Field.mjs";
|
|
10
10
|
import { cloneElement, createElement, memo, useCallback, useRef } from "react";
|
|
11
11
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
-
import clsx from "clsx";
|
|
12
|
+
import clsx$1 from "clsx";
|
|
13
13
|
import * as stylex from "@stylexjs/stylex";
|
|
14
14
|
import { PlusIcon, XIcon } from "lucide-react";
|
|
15
15
|
//#region src/FormKit/List.tsx
|
|
@@ -77,7 +77,7 @@ const FormList = memo(({ addText, children, columns, emptyText, name, newItem })
|
|
|
77
77
|
key: field.key,
|
|
78
78
|
style: { gridTemplateColumns }
|
|
79
79
|
}, columns.map((column) => /* @__PURE__ */ jsx("div", {
|
|
80
|
-
className: clsx("lobe-form-list-cell", stylex.props(listStyles.cell).className),
|
|
80
|
+
className: clsx$1("lobe-form-list-cell", stylex.props(listStyles.cell).className),
|
|
81
81
|
children: /* @__PURE__ */ jsx(FormField, {
|
|
82
82
|
bare: true,
|
|
83
83
|
name: `${field.name}.${column.name}`,
|
package/es/FormKit/List.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.mjs","names":["formMessages"],"sources":["../../src/FormKit/List.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { PlusIcon, XIcon } from 'lucide-react';\nimport { cloneElement, memo, type ReactElement, type ReactNode, useCallback, useRef } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport formMessages from '@/i18n/resources/en/form';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport { useFormKitContext } from './context';\nimport FormField from './Field';\nimport { getInternals } from './instance';\nimport type { FieldValidate } from './schema';\nimport { listStyles } from './style';\nimport { useStoreSelector } from './useStoreSelector';\n\nexport interface FormListField {\n index: number;\n key: string;\n name: string;\n}\n\nexport interface FormListRenderProps {\n add: (item?: unknown) => void;\n fields: FormListField[];\n move: (from: number, to: number) => void;\n remove: (index: number) => void;\n}\n\nexport interface FormListColumn {\n children: ReactElement;\n flex?: number;\n name: string;\n required?: boolean | string;\n title?: ReactNode;\n validate?: FieldValidate;\n}\n\nexport interface FormListProps {\n addText?: ReactNode;\n children?: (props: FormListRenderProps) => ReactNode;\n columns?: FormListColumn[];\n emptyText?: ReactNode;\n name: string;\n newItem?: unknown;\n}\n\nlet rowSeed = 0;\nconst nextRowKey = () => `row-${(rowSeed += 1)}`;\n\nconst createItem = (newItem: unknown) =>\n typeof newItem === 'function'\n ? newItem()\n : newItem && typeof newItem === 'object'\n ? structuredClone(newItem)\n : (newItem ?? {});\n\nconst labelFor = (column: FormListColumn, index: number) =>\n (column.children as ReactElement<{ 'aria-label'?: string }>).props['aria-label'] ??\n (typeof column.title === 'string' ? `${column.title} ${index + 1}` : undefined);\n\nconst FormList = memo<FormListProps>(({ addText, children, columns, emptyText, name, newItem }) => {\n const { form } = useFormKitContext();\n const { engine } = getInternals(form);\n const { t } = useTranslation(formMessages);\n const length = useStoreSelector(engine, (e) => {\n const value = e.getValue(name);\n return Array.isArray(value) ? value.length : 0;\n });\n\n const keysRef = useRef<string[]>([]);\n const keys = keysRef.current;\n if (keys.length > length) keys.length = length;\n while (keys.length < length) keys.push(nextRowKey());\n\n const add = useCallback(\n (item?: unknown) => {\n keysRef.current.push(nextRowKey());\n engine.pushItem(name, item);\n },\n [engine, name],\n );\n const remove = useCallback(\n (index: number) => {\n keysRef.current.splice(index, 1);\n engine.removeItem(name, index);\n },\n [engine, name],\n );\n const move = useCallback(\n (from: number, to: number) => {\n const [moved] = keysRef.current.splice(from, 1);\n keysRef.current.splice(to, 0, moved);\n engine.moveItem(name, from, to);\n },\n [engine, name],\n );\n\n const fields = keys.map((key, index) => ({ index, key, name: `${name}.${index}` }));\n\n if (children || !columns) return <>{children?.({ add, fields, move, remove })}</>;\n\n const gridTemplateColumns = `${columns.map((c) => `minmax(0, ${c.flex ?? 1}fr)`).join(' ')} 36px`;\n const addButton = (\n <button\n {...stylex.props(listStyles.add)}\n type=\"button\"\n onClick={() => add(createItem(newItem))}\n >\n <PlusIcon size={14} />\n {addText ?? t('form.list.add')}\n </button>\n );\n\n return (\n <div {...stylex.props(listStyles.table)}>\n <div {...stylex.props(listStyles.head)} style={{ gridTemplateColumns }}>\n {columns.map((column) => (\n <div {...stylex.props(listStyles.title)} key={column.name}>\n {column.title}\n </div>\n ))}\n </div>\n {fields.length === 0 ? (\n <div {...stylex.props(listStyles.empty)}>\n <span>{emptyText ?? t('form.list.empty')}</span>\n {addButton}\n </div>\n ) : (\n <>\n {fields.map((field) => (\n <div {...stylex.props(listStyles.row)} key={field.key} style={{ gridTemplateColumns }}>\n {columns.map((column) => (\n <div\n className={clsx('lobe-form-list-cell', stylex.props(listStyles.cell).className)}\n key={column.name}\n >\n <FormField\n bare\n name={`${field.name}.${column.name}`}\n required={column.required}\n validate={column.validate}\n >\n {cloneElement(column.children as ReactElement<any>, {\n 'aria-label': labelFor(column, field.index),\n })}\n </FormField>\n </div>\n ))}\n <ActionIcon\n {...stylex.props(listStyles.remove)}\n aria-label={t('form.list.remove')}\n icon={XIcon}\n size={'small'}\n title={t('form.list.remove')}\n onClick={() => remove(field.index)}\n />\n </div>\n ))}\n <div {...stylex.props(listStyles.foot)}>{addButton}</div>\n </>\n )}\n </div>\n );\n});\n\nFormList.displayName = 'FormList';\n\nexport default FormList;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"List.mjs","names":["formMessages","clsx"],"sources":["../../src/FormKit/List.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { PlusIcon, XIcon } from 'lucide-react';\nimport { cloneElement, memo, type ReactElement, type ReactNode, useCallback, useRef } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport formMessages from '@/i18n/resources/en/form';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport { useFormKitContext } from './context';\nimport FormField from './Field';\nimport { getInternals } from './instance';\nimport type { FieldValidate } from './schema';\nimport { listStyles } from './style';\nimport { useStoreSelector } from './useStoreSelector';\n\nexport interface FormListField {\n index: number;\n key: string;\n name: string;\n}\n\nexport interface FormListRenderProps {\n add: (item?: unknown) => void;\n fields: FormListField[];\n move: (from: number, to: number) => void;\n remove: (index: number) => void;\n}\n\nexport interface FormListColumn {\n children: ReactElement;\n flex?: number;\n name: string;\n required?: boolean | string;\n title?: ReactNode;\n validate?: FieldValidate;\n}\n\nexport interface FormListProps {\n addText?: ReactNode;\n children?: (props: FormListRenderProps) => ReactNode;\n columns?: FormListColumn[];\n emptyText?: ReactNode;\n name: string;\n newItem?: unknown;\n}\n\nlet rowSeed = 0;\nconst nextRowKey = () => `row-${(rowSeed += 1)}`;\n\nconst createItem = (newItem: unknown) =>\n typeof newItem === 'function'\n ? newItem()\n : newItem && typeof newItem === 'object'\n ? structuredClone(newItem)\n : (newItem ?? {});\n\nconst labelFor = (column: FormListColumn, index: number) =>\n (column.children as ReactElement<{ 'aria-label'?: string }>).props['aria-label'] ??\n (typeof column.title === 'string' ? `${column.title} ${index + 1}` : undefined);\n\nconst FormList = memo<FormListProps>(({ addText, children, columns, emptyText, name, newItem }) => {\n const { form } = useFormKitContext();\n const { engine } = getInternals(form);\n const { t } = useTranslation(formMessages);\n const length = useStoreSelector(engine, (e) => {\n const value = e.getValue(name);\n return Array.isArray(value) ? value.length : 0;\n });\n\n const keysRef = useRef<string[]>([]);\n const keys = keysRef.current;\n if (keys.length > length) keys.length = length;\n while (keys.length < length) keys.push(nextRowKey());\n\n const add = useCallback(\n (item?: unknown) => {\n keysRef.current.push(nextRowKey());\n engine.pushItem(name, item);\n },\n [engine, name],\n );\n const remove = useCallback(\n (index: number) => {\n keysRef.current.splice(index, 1);\n engine.removeItem(name, index);\n },\n [engine, name],\n );\n const move = useCallback(\n (from: number, to: number) => {\n const [moved] = keysRef.current.splice(from, 1);\n keysRef.current.splice(to, 0, moved);\n engine.moveItem(name, from, to);\n },\n [engine, name],\n );\n\n const fields = keys.map((key, index) => ({ index, key, name: `${name}.${index}` }));\n\n if (children || !columns) return <>{children?.({ add, fields, move, remove })}</>;\n\n const gridTemplateColumns = `${columns.map((c) => `minmax(0, ${c.flex ?? 1}fr)`).join(' ')} 36px`;\n const addButton = (\n <button\n {...stylex.props(listStyles.add)}\n type=\"button\"\n onClick={() => add(createItem(newItem))}\n >\n <PlusIcon size={14} />\n {addText ?? t('form.list.add')}\n </button>\n );\n\n return (\n <div {...stylex.props(listStyles.table)}>\n <div {...stylex.props(listStyles.head)} style={{ gridTemplateColumns }}>\n {columns.map((column) => (\n <div {...stylex.props(listStyles.title)} key={column.name}>\n {column.title}\n </div>\n ))}\n </div>\n {fields.length === 0 ? (\n <div {...stylex.props(listStyles.empty)}>\n <span>{emptyText ?? t('form.list.empty')}</span>\n {addButton}\n </div>\n ) : (\n <>\n {fields.map((field) => (\n <div {...stylex.props(listStyles.row)} key={field.key} style={{ gridTemplateColumns }}>\n {columns.map((column) => (\n <div\n className={clsx('lobe-form-list-cell', stylex.props(listStyles.cell).className)}\n key={column.name}\n >\n <FormField\n bare\n name={`${field.name}.${column.name}`}\n required={column.required}\n validate={column.validate}\n >\n {cloneElement(column.children as ReactElement<any>, {\n 'aria-label': labelFor(column, field.index),\n })}\n </FormField>\n </div>\n ))}\n <ActionIcon\n {...stylex.props(listStyles.remove)}\n aria-label={t('form.list.remove')}\n icon={XIcon}\n size={'small'}\n title={t('form.list.remove')}\n onClick={() => remove(field.index)}\n />\n </div>\n ))}\n <div {...stylex.props(listStyles.foot)}>{addButton}</div>\n </>\n )}\n </div>\n );\n});\n\nFormList.displayName = 'FormList';\n\nexport default FormList;\n"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { LangSelect } from "./LangSelect.mjs";
|
|
|
11
11
|
import { bodyStyles, headerFlexProps, headerStyles, rootClassName, rootStyles } from "./style.mjs";
|
|
12
12
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
13
13
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
-
import clsx from "clsx";
|
|
14
|
+
import clsx$1 from "clsx";
|
|
15
15
|
import { ChevronDown, ChevronRight } from "lucide-react";
|
|
16
16
|
//#region src/Highlighter/FullFeatured.tsx
|
|
17
17
|
const HeaderLanguage = memo(({ allowChangeLanguage, displayName, fileName, filetype, icon, language, setLanguage, showLanguage }) => {
|
|
@@ -127,7 +127,7 @@ const HighlighterFullFeatured = memo(({ content, language, setLanguage, showLang
|
|
|
127
127
|
})]
|
|
128
128
|
}), /* @__PURE__ */ jsx(FlexBasic_default, {
|
|
129
129
|
height: expand ? void 0 : 0,
|
|
130
|
-
...styleProps(bodyStyles(expand, variant), clsx(expand && "ant-highlighter-highlighter-body-expand", classNames?.body), customStyles?.body),
|
|
130
|
+
...styleProps(bodyStyles(expand, variant), clsx$1(expand && "ant-highlighter-highlighter-body-expand", classNames?.body), customStyles?.body),
|
|
131
131
|
children
|
|
132
132
|
})]
|
|
133
133
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullFeatured.mjs","names":["Flexbox"],"sources":["../../src/Highlighter/FullFeatured.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { getCodeLanguageDisplayName, getCodeLanguageFilename } from '@/Highlighter/const';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport { styleProps } from '@/styles/stylex/props';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport LangSelect from './LangSelect';\nimport {\n bodyStyles,\n expandCls,\n headerFlexProps,\n headerStyles,\n rootClassName,\n rootStyles,\n} from './style';\nimport { type HighlighterProps } from './type';\n\ninterface HeaderLanguageProps {\n allowChangeLanguage: boolean;\n displayName: string;\n fileName?: string;\n filetype: string;\n icon?: ReactNode;\n language: string;\n setLanguage?: (language: string) => void;\n showLanguage?: boolean;\n}\n\nconst HeaderLanguage = memo<HeaderLanguageProps>(\n ({\n allowChangeLanguage,\n displayName,\n fileName,\n filetype,\n icon,\n language,\n setLanguage,\n showLanguage,\n }) => {\n if (!showLanguage) return null;\n\n if (allowChangeLanguage && !fileName)\n return <LangSelect value={language.toLowerCase()} onSelect={setLanguage} />;\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={'language-title'}\n flex={1}\n gap={4}\n justify={'flex-start'}\n paddingInline={8}\n >\n {icon || (\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={filetype}\n size={18}\n type={'file'}\n variant={'raw'}\n />\n )}\n <Text ellipsis fontSize={13}>\n {displayName}\n </Text>\n </Flexbox>\n );\n },\n (prev, next) =>\n prev.allowChangeLanguage === next.allowChangeLanguage &&\n prev.displayName === next.displayName &&\n prev.fileName === next.fileName &&\n prev.filetype === next.filetype &&\n prev.icon === next.icon &&\n prev.language === next.language &&\n prev.setLanguage === next.setLanguage &&\n prev.showLanguage === next.showLanguage,\n);\n\ninterface HighlighterFullFeaturedProps extends Omit<\n HighlighterProps,\n 'children' | 'bodyRender' | 'enableTransformer'\n> {\n content: string;\n setLanguage?: (language: string) => void;\n}\n\nexport const HighlighterFullFeatured = memo<HighlighterFullFeaturedProps & { children: ReactNode }>(\n ({\n content,\n language,\n setLanguage,\n showLanguage,\n className,\n classNames,\n styles: customStyles,\n style,\n allowChangeLanguage = false,\n fileName,\n icon,\n actionsRender,\n copyable,\n variant,\n shadow,\n wrap,\n defaultExpand = true,\n children,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n const contentRef = useRef(content);\n\n useEffect(() => {\n contentRef.current = content;\n }, [content]);\n\n const getContent = useCallback(() => contentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return <CopyButton content={getContent} size={'small'} />;\n }, [copyable, getContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize: 'small',\n content,\n getContent,\n language,\n originalNode: originalActions,\n });\n }, [actionsRender, content, getContent, language, originalActions]);\n\n const displayName = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageDisplayName(language);\n }, [fileName, language]);\n\n const filetype = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageFilename(language);\n }, [fileName, language]);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n return (\n <Flexbox\n data-code-type=\"highlighter\"\n width={'100%'}\n {...rest}\n {...styleProps(rootStyles({ shadow, variant }), rootClassName(wrap, className), style)}\n >\n <Flexbox\n horizontal\n align={'center'}\n justify={'space-between'}\n onClick={handleToggleExpand}\n {...headerFlexProps(variant)}\n {...styleProps(headerStyles(variant), classNames?.header, customStyles?.header)}\n >\n <HeaderLanguage\n allowChangeLanguage={allowChangeLanguage}\n displayName={displayName}\n fileName={fileName}\n filetype={filetype}\n icon={icon}\n language={language}\n setLanguage={setLanguage}\n showLanguage={showLanguage}\n />\n <Flexbox horizontal align={'center'} flex={'none'} gap={4} onClick={stopPropagation}>\n <Flexbox horizontal align={'center'} className={'panel-actions'} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n size={'small'}\n onClick={handleToggleExpand}\n />\n </Flexbox>\n </Flexbox>\n <Flexbox\n height={expand ? undefined : 0}\n {...styleProps(\n bodyStyles(expand, variant),\n clsx(expand && expandCls, classNames?.body),\n customStyles?.body,\n )}\n >\n {children}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default HighlighterFullFeatured;\n"],"mappings":";;;;;;;;;;;;;;;;AAqCA,MAAM,iBAAiB,MACpB,EACC,qBACA,aACA,UACA,UACA,MACA,UACA,aACA,mBACI;CACJ,IAAI,CAAC,cAAc,OAAO;CAE1B,IAAI,uBAAuB,CAAC,UAC1B,OAAO,oBAAC,YAAD;EAAY,OAAO,SAAS,YAAY;EAAG,UAAU;CAAc,CAAA;CAE5E,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW;EACX,MAAM;EACN,KAAK;EACL,SAAS;EACT,eAAe;EAPjB,UAAA,CASG,QACC,oBAAC,sBAAD;GACE,qBAAqB;GACrB,UAAU;GACV,MAAM;GACN,MAAM;GACN,SAAS;EACV,CAAA,GAEH,oBAAC,MAAD;GAAM,UAAA;GAAS,UAAU;GACtB,UAAA;EACG,CAAA,CACC;;AAEb,IACC,MAAM,SACL,KAAK,wBAAwB,KAAK,uBAClC,KAAK,gBAAgB,KAAK,eAC1B,KAAK,aAAa,KAAK,YACvB,KAAK,aAAa,KAAK,YACvB,KAAK,SAAS,KAAK,QACnB,KAAK,aAAa,KAAK,YACvB,KAAK,gBAAgB,KAAK,eAC1B,KAAK,iBAAiB,KAAK,YAC/B;AAUA,MAAa,0BAA0B,MACpC,EACC,SACA,UACA,aACA,cACA,WACA,YACA,QAAQ,cACR,OACA,sBAAsB,OACtB,UACA,MACA,eACA,UACA,SACA,QACA,MACA,gBAAgB,MAChB,UACA,GAAG,WACC;CACJ,MAAM,CAAC,QAAQ,aAAa,SAAS,aAAa;CAClD,MAAM,aAAa,OAAO,OAAO;CAEjC,gBAAgB;EACd,WAAW,UAAU;CACvB,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,aAAa,kBAAkB,WAAW,SAAS,CAAC,CAAC;CAE3D,MAAM,kBAAkB,cAAc;EACpC,IAAI,CAAC,UAAU,OAAO;EACtB,OAAO,oBAAC,YAAD;GAAY,SAAS;GAAY,MAAM;EAAU,CAAA;CAC1D,GAAG,CAAC,UAAU,UAAU,CAAC;CAEzB,MAAM,UAAU,cAAc;EAC5B,IAAI,CAAC,eAAe,OAAO;EAC3B,OAAO,cAAc;GACnB,gBAAgB;GAChB;GACA;GACA;GACA,cAAc;EAChB,CAAC;CACH,GAAG;EAAC;EAAe;EAAS;EAAY;EAAU;CAAe,CAAC;CAElE,MAAM,cAAc,cAAc;EAChC,IAAI,UAAU,OAAO;EACrB,OAAO,2BAA2B,QAAQ;CAC5C,GAAG,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,WAAW,cAAc;EAC7B,IAAI,UAAU,OAAO;EACrB,OAAO,wBAAwB,QAAQ;CACzC,GAAG,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,qBAAqB,kBAAkB;EAC3C,WAAW,SAAS,CAAC,IAAI;CAC3B,GAAG,CAAC,CAAC;CAEL,OACE,qBAACA,mBAAD;EACE,kBAAe;EACf,OAAO;EACP,GAAI;EACJ,GAAI,WAAW,WAAW;GAAE;GAAQ;EAAQ,CAAC,GAAG,cAAc,MAAM,SAAS,GAAG,KAAK;EAJvF,UAAA,CAME,qBAACA,mBAAD;GACE,YAAA;GACA,OAAO;GACP,SAAS;GACT,SAAS;GACT,GAAI,gBAAgB,OAAO;GAC3B,GAAI,WAAW,aAAa,OAAO,GAAG,YAAY,QAAQ,cAAc,MAAM;GANhF,UAAA,CAQE,oBAAC,gBAAD;IACuB;IACR;IACH;IACA;IACJ;IACI;IACG;IACC;GACf,CAAA,GACD,qBAACA,mBAAD;IAAS,YAAA;IAAW,OAAO;IAAU,MAAM;IAAQ,KAAK;IAAG,SAAS;IAApE,UAAA,CACE,oBAACA,mBAAD;KAAS,YAAA;KAAW,OAAO;KAAU,WAAW;KAAiB,MAAM;KAAQ,KAAK;KACjF,UAAA;IACM,CAAA,GACT,oBAAC,YAAD;KACE,MAAM,SAAS,cAAc;KAC7B,MAAM;KACN,SAAS;IACV,CAAA,CACM;GACF,CAAA,CAAA;EACT,CAAA,GAAA,oBAACA,mBAAD;GACE,QAAQ,SAAS,KAAA,IAAY;GAC7B,GAAI,WACF,WAAW,QAAQ,OAAO,
|
|
1
|
+
{"version":3,"file":"FullFeatured.mjs","names":["Flexbox","clsx"],"sources":["../../src/Highlighter/FullFeatured.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { getCodeLanguageDisplayName, getCodeLanguageFilename } from '@/Highlighter/const';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport { styleProps } from '@/styles/stylex/props';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport LangSelect from './LangSelect';\nimport {\n bodyStyles,\n expandCls,\n headerFlexProps,\n headerStyles,\n rootClassName,\n rootStyles,\n} from './style';\nimport { type HighlighterProps } from './type';\n\ninterface HeaderLanguageProps {\n allowChangeLanguage: boolean;\n displayName: string;\n fileName?: string;\n filetype: string;\n icon?: ReactNode;\n language: string;\n setLanguage?: (language: string) => void;\n showLanguage?: boolean;\n}\n\nconst HeaderLanguage = memo<HeaderLanguageProps>(\n ({\n allowChangeLanguage,\n displayName,\n fileName,\n filetype,\n icon,\n language,\n setLanguage,\n showLanguage,\n }) => {\n if (!showLanguage) return null;\n\n if (allowChangeLanguage && !fileName)\n return <LangSelect value={language.toLowerCase()} onSelect={setLanguage} />;\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={'language-title'}\n flex={1}\n gap={4}\n justify={'flex-start'}\n paddingInline={8}\n >\n {icon || (\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={filetype}\n size={18}\n type={'file'}\n variant={'raw'}\n />\n )}\n <Text ellipsis fontSize={13}>\n {displayName}\n </Text>\n </Flexbox>\n );\n },\n (prev, next) =>\n prev.allowChangeLanguage === next.allowChangeLanguage &&\n prev.displayName === next.displayName &&\n prev.fileName === next.fileName &&\n prev.filetype === next.filetype &&\n prev.icon === next.icon &&\n prev.language === next.language &&\n prev.setLanguage === next.setLanguage &&\n prev.showLanguage === next.showLanguage,\n);\n\ninterface HighlighterFullFeaturedProps extends Omit<\n HighlighterProps,\n 'children' | 'bodyRender' | 'enableTransformer'\n> {\n content: string;\n setLanguage?: (language: string) => void;\n}\n\nexport const HighlighterFullFeatured = memo<HighlighterFullFeaturedProps & { children: ReactNode }>(\n ({\n content,\n language,\n setLanguage,\n showLanguage,\n className,\n classNames,\n styles: customStyles,\n style,\n allowChangeLanguage = false,\n fileName,\n icon,\n actionsRender,\n copyable,\n variant,\n shadow,\n wrap,\n defaultExpand = true,\n children,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n const contentRef = useRef(content);\n\n useEffect(() => {\n contentRef.current = content;\n }, [content]);\n\n const getContent = useCallback(() => contentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return <CopyButton content={getContent} size={'small'} />;\n }, [copyable, getContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize: 'small',\n content,\n getContent,\n language,\n originalNode: originalActions,\n });\n }, [actionsRender, content, getContent, language, originalActions]);\n\n const displayName = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageDisplayName(language);\n }, [fileName, language]);\n\n const filetype = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageFilename(language);\n }, [fileName, language]);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n return (\n <Flexbox\n data-code-type=\"highlighter\"\n width={'100%'}\n {...rest}\n {...styleProps(rootStyles({ shadow, variant }), rootClassName(wrap, className), style)}\n >\n <Flexbox\n horizontal\n align={'center'}\n justify={'space-between'}\n onClick={handleToggleExpand}\n {...headerFlexProps(variant)}\n {...styleProps(headerStyles(variant), classNames?.header, customStyles?.header)}\n >\n <HeaderLanguage\n allowChangeLanguage={allowChangeLanguage}\n displayName={displayName}\n fileName={fileName}\n filetype={filetype}\n icon={icon}\n language={language}\n setLanguage={setLanguage}\n showLanguage={showLanguage}\n />\n <Flexbox horizontal align={'center'} flex={'none'} gap={4} onClick={stopPropagation}>\n <Flexbox horizontal align={'center'} className={'panel-actions'} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n size={'small'}\n onClick={handleToggleExpand}\n />\n </Flexbox>\n </Flexbox>\n <Flexbox\n height={expand ? undefined : 0}\n {...styleProps(\n bodyStyles(expand, variant),\n clsx(expand && expandCls, classNames?.body),\n customStyles?.body,\n )}\n >\n {children}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default HighlighterFullFeatured;\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { useStreamHighlight } from "../../hooks/useStreamHighlight.mjs";
|
|
|
3
3
|
import { createTokenFadeStore, markTokenBirths, resolveTokenFadeStyle } from "./tokenFade.mjs";
|
|
4
4
|
import { memo, useRef } from "react";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
|
-
import clsx from "clsx";
|
|
6
|
+
import clsx$1 from "clsx";
|
|
7
7
|
import { getTokenStyleObject } from "@shikijs/core";
|
|
8
8
|
//#region src/Highlighter/SyntaxHighlighter/StreamRenderer.tsx
|
|
9
9
|
const normalizeStyleKeys = (style) => {
|
|
@@ -80,7 +80,7 @@ const StreamRenderer = memo(({ children, className, enableTransformer, fallbackC
|
|
|
80
80
|
dir: "ltr",
|
|
81
81
|
style,
|
|
82
82
|
children: /* @__PURE__ */ jsx("pre", {
|
|
83
|
-
className: clsx("shiki", theme),
|
|
83
|
+
className: clsx$1("shiki", theme),
|
|
84
84
|
style: preStyle,
|
|
85
85
|
tabIndex: 0,
|
|
86
86
|
children: /* @__PURE__ */ jsx("code", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamRenderer.mjs","names":[],"sources":["../../../src/Highlighter/SyntaxHighlighter/StreamRenderer.tsx"],"sourcesContent":["'use client';\n\nimport { getTokenStyleObject } from '@shikijs/core';\nimport clsx from 'clsx';\nimport type { CSSProperties } from 'react';\nimport { memo, useRef } from 'react';\nimport type { BuiltinTheme, ThemedToken } from 'shiki';\n\nimport { useStreamHighlight } from '@/hooks/useStreamHighlight';\n\nimport {\n createTokenFadeStore,\n markTokenBirths,\n resolveTokenFadeStyle,\n type TokenFadeStore,\n} from './tokenFade';\n\ninterface StreamRendererProps {\n children: string;\n className?: string;\n enableTransformer?: boolean;\n fallbackClassName?: string;\n language: string;\n style?: CSSProperties;\n theme?: BuiltinTheme;\n}\n\nconst normalizeStyleKeys = (style: Record<string, string | number>): CSSProperties => {\n const normalized: CSSProperties = {};\n Object.entries(style).forEach(([key, value]) => {\n const normalizedKey = key.replaceAll(/-([a-z])/g, (_, char) => char.toUpperCase());\n (normalized as Record<string, string | number>)[normalizedKey] = value;\n });\n return normalized;\n};\n\nconst getTokenInlineStyle = (token: ThemedToken): CSSProperties => {\n const rawStyle = token.htmlStyle || getTokenStyleObject(token);\n const baseStyle = normalizeStyleKeys(rawStyle);\n return { ...baseStyle, whiteSpace: 'pre' };\n};\n\nconst TokenSpan = memo(\n ({ fadeStyle, token }: { fadeStyle?: CSSProperties | null; token: ThemedToken }) => {\n const style = fadeStyle\n ? { ...getTokenInlineStyle(token), ...fadeStyle }\n : getTokenInlineStyle(token);\n return (\n <span className={fadeStyle ? 'stream-char' : undefined} style={style}>\n {token.content}\n </span>\n );\n },\n (prev, next) => prev.token === next.token && prev.fadeStyle === next.fadeStyle,\n);\n\nconst TokenLine = memo(\n ({\n fade,\n line,\n now,\n start,\n }: {\n fade: TokenFadeStore;\n line: ThemedToken[];\n now: number;\n start: number;\n }) => {\n if (!line.length) {\n return (\n <span className=\"line\">\n <span style={{ whiteSpace: 'pre' }}>{'\\u00A0'}</span>\n </span>\n );\n }\n\n let offset = start;\n return (\n <span className=\"line\">\n {line.map((token) => {\n const tokenOffset = offset;\n offset += token.content.length;\n return (\n <TokenSpan\n fadeStyle={resolveTokenFadeStyle(fade, tokenOffset, now)}\n key={tokenOffset}\n token={token}\n />\n );\n })}\n </span>\n );\n },\n (prev, next) => prev.line === next.line && prev.start === next.start,\n);\n\nconst StreamRenderer = memo<StreamRendererProps>(\n ({ children, className, enableTransformer, fallbackClassName, language, style, theme }) => {\n // Safely handle empty or invalid children\n const safeChildren = children ?? '';\n\n const streaming = useStreamHighlight(safeChildren, {\n enableTransformer,\n language,\n streaming: true,\n theme,\n });\n\n const lines = streaming?.lines;\n const preStyle = streaming?.preStyle;\n\n const fadeRef = useRef<TokenFadeStore>(createTokenFadeStore());\n const previousTextRef = useRef('');\n if (!safeChildren.startsWith(previousTextRef.current)) {\n fadeRef.current = createTokenFadeStore();\n }\n previousTextRef.current = safeChildren;\n const now = performance.now();\n const lineStarts = lines ? markTokenBirths(fadeRef.current, lines, now) : [];\n\n if (!lines || lines.length === 0) {\n return (\n <div className={fallbackClassName} dir=\"ltr\" style={style}>\n <pre>\n <code>{safeChildren}</code>\n </pre>\n </div>\n );\n }\n\n return (\n <div className={className} dir=\"ltr\" style={style}>\n <pre className={clsx('shiki', theme)} style={preStyle} tabIndex={0}>\n <code style={{ display: 'flex', flexDirection: 'column', whiteSpace: 'pre' }}>\n {lines.map((line, index) => (\n <TokenLine\n fade={fadeRef.current}\n key={`line-${index}`}\n line={line}\n now={now}\n start={lineStarts[index]}\n />\n ))}\n </code>\n </pre>\n </div>\n );\n },\n);\n\nStreamRenderer.displayName = 'StreamRenderer';\n\nexport default StreamRenderer;\n"],"mappings":";;;;;;;;AA2BA,MAAM,sBAAsB,UAA0D;CACpF,MAAM,aAA4B,CAAC;CACnC,OAAO,QAAQ,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;EAC9C,MAAM,gBAAgB,IAAI,WAAW,cAAc,GAAG,SAAS,KAAK,YAAY,CAAC;EACjF,WAAgD,iBAAiB;CACnE,CAAC;CACD,OAAO;AACT;AAEA,MAAM,uBAAuB,UAAsC;CACjE,MAAM,WAAW,MAAM,aAAa,oBAAoB,KAAK;CAE7D,OAAO;EAAE,GADS,mBAAmB,QACjB;EAAG,YAAY;CAAM;AAC3C;AAEA,MAAM,YAAY,MACf,EAAE,WAAW,YAAsE;CAClF,MAAM,QAAQ,YACV;EAAE,GAAG,oBAAoB,KAAK;EAAG,GAAG;CAAU,IAC9C,oBAAoB,KAAK;CAC7B,OACE,oBAAC,QAAD;EAAM,WAAW,YAAY,gBAAgB,KAAA;EAAkB;EAC5D,UAAA,MAAM;CACH,CAAA;AAEV,IACC,MAAM,SAAS,KAAK,UAAU,KAAK,SAAS,KAAK,cAAc,KAAK,SACvE;AAEA,MAAM,YAAY,MACf,EACC,MACA,MACA,KACA,YAMI;CACJ,IAAI,CAAC,KAAK,QACR,OACE,oBAAC,QAAD;EAAM,WAAU;EACd,UAAA,oBAAC,QAAD;GAAM,OAAO,EAAE,YAAY,MAAM;GAAI,UAAA;EAAe,CAAA;CAChD,CAAA;CAIV,IAAI,SAAS;CACb,OACE,oBAAC,QAAD;EAAM,WAAU;EACb,UAAA,KAAK,KAAK,UAAU;GACnB,MAAM,cAAc;GACpB,UAAU,MAAM,QAAQ;GACxB,OACE,oBAAC,WAAD;IACE,WAAW,sBAAsB,MAAM,aAAa,GAAG;IAEhD;GACR,GAFM,WAEN;EAEL,CAAC;CACG,CAAA;AAEV,IACC,MAAM,SAAS,KAAK,SAAS,KAAK,QAAQ,KAAK,UAAU,KAAK,KACjE;AAEA,MAAM,iBAAiB,MACpB,EAAE,UAAU,WAAW,mBAAmB,mBAAmB,UAAU,OAAO,YAAY;CAEzF,MAAM,eAAe,YAAY;CAEjC,MAAM,YAAY,mBAAmB,cAAc;EACjD;EACA;EACA,WAAW;EACX;CACF,CAAC;CAED,MAAM,QAAQ,WAAW;CACzB,MAAM,WAAW,WAAW;CAE5B,MAAM,UAAU,OAAuB,qBAAqB,CAAC;CAC7D,MAAM,kBAAkB,OAAO,EAAE;CACjC,IAAI,CAAC,aAAa,WAAW,gBAAgB,OAAO,GAClD,QAAQ,UAAU,qBAAqB;CAEzC,gBAAgB,UAAU;CAC1B,MAAM,MAAM,YAAY,IAAI;CAC5B,MAAM,aAAa,QAAQ,gBAAgB,QAAQ,SAAS,OAAO,GAAG,IAAI,CAAC;CAE3E,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OACE,oBAAC,OAAD;EAAK,WAAW;EAAmB,KAAI;EAAa;EAClD,UAAA,oBAAC,OAAD,EAAA,UACE,oBAAC,QAAD,EAAA,UAAO,aAAmB,CAAA,EACvB,CAAA;CACF,CAAA;CAIT,OACE,oBAAC,OAAD;EAAgB;EAAW,KAAI;EAAa;EAC1C,UAAA,oBAAC,OAAD;GAAK,
|
|
1
|
+
{"version":3,"file":"StreamRenderer.mjs","names":["clsx"],"sources":["../../../src/Highlighter/SyntaxHighlighter/StreamRenderer.tsx"],"sourcesContent":["'use client';\n\nimport { getTokenStyleObject } from '@shikijs/core';\nimport clsx from 'clsx';\nimport type { CSSProperties } from 'react';\nimport { memo, useRef } from 'react';\nimport type { BuiltinTheme, ThemedToken } from 'shiki';\n\nimport { useStreamHighlight } from '@/hooks/useStreamHighlight';\n\nimport {\n createTokenFadeStore,\n markTokenBirths,\n resolveTokenFadeStyle,\n type TokenFadeStore,\n} from './tokenFade';\n\ninterface StreamRendererProps {\n children: string;\n className?: string;\n enableTransformer?: boolean;\n fallbackClassName?: string;\n language: string;\n style?: CSSProperties;\n theme?: BuiltinTheme;\n}\n\nconst normalizeStyleKeys = (style: Record<string, string | number>): CSSProperties => {\n const normalized: CSSProperties = {};\n Object.entries(style).forEach(([key, value]) => {\n const normalizedKey = key.replaceAll(/-([a-z])/g, (_, char) => char.toUpperCase());\n (normalized as Record<string, string | number>)[normalizedKey] = value;\n });\n return normalized;\n};\n\nconst getTokenInlineStyle = (token: ThemedToken): CSSProperties => {\n const rawStyle = token.htmlStyle || getTokenStyleObject(token);\n const baseStyle = normalizeStyleKeys(rawStyle);\n return { ...baseStyle, whiteSpace: 'pre' };\n};\n\nconst TokenSpan = memo(\n ({ fadeStyle, token }: { fadeStyle?: CSSProperties | null; token: ThemedToken }) => {\n const style = fadeStyle\n ? { ...getTokenInlineStyle(token), ...fadeStyle }\n : getTokenInlineStyle(token);\n return (\n <span className={fadeStyle ? 'stream-char' : undefined} style={style}>\n {token.content}\n </span>\n );\n },\n (prev, next) => prev.token === next.token && prev.fadeStyle === next.fadeStyle,\n);\n\nconst TokenLine = memo(\n ({\n fade,\n line,\n now,\n start,\n }: {\n fade: TokenFadeStore;\n line: ThemedToken[];\n now: number;\n start: number;\n }) => {\n if (!line.length) {\n return (\n <span className=\"line\">\n <span style={{ whiteSpace: 'pre' }}>{'\\u00A0'}</span>\n </span>\n );\n }\n\n let offset = start;\n return (\n <span className=\"line\">\n {line.map((token) => {\n const tokenOffset = offset;\n offset += token.content.length;\n return (\n <TokenSpan\n fadeStyle={resolveTokenFadeStyle(fade, tokenOffset, now)}\n key={tokenOffset}\n token={token}\n />\n );\n })}\n </span>\n );\n },\n (prev, next) => prev.line === next.line && prev.start === next.start,\n);\n\nconst StreamRenderer = memo<StreamRendererProps>(\n ({ children, className, enableTransformer, fallbackClassName, language, style, theme }) => {\n // Safely handle empty or invalid children\n const safeChildren = children ?? '';\n\n const streaming = useStreamHighlight(safeChildren, {\n enableTransformer,\n language,\n streaming: true,\n theme,\n });\n\n const lines = streaming?.lines;\n const preStyle = streaming?.preStyle;\n\n const fadeRef = useRef<TokenFadeStore>(createTokenFadeStore());\n const previousTextRef = useRef('');\n if (!safeChildren.startsWith(previousTextRef.current)) {\n fadeRef.current = createTokenFadeStore();\n }\n previousTextRef.current = safeChildren;\n const now = performance.now();\n const lineStarts = lines ? markTokenBirths(fadeRef.current, lines, now) : [];\n\n if (!lines || lines.length === 0) {\n return (\n <div className={fallbackClassName} dir=\"ltr\" style={style}>\n <pre>\n <code>{safeChildren}</code>\n </pre>\n </div>\n );\n }\n\n return (\n <div className={className} dir=\"ltr\" style={style}>\n <pre className={clsx('shiki', theme)} style={preStyle} tabIndex={0}>\n <code style={{ display: 'flex', flexDirection: 'column', whiteSpace: 'pre' }}>\n {lines.map((line, index) => (\n <TokenLine\n fade={fadeRef.current}\n key={`line-${index}`}\n line={line}\n now={now}\n start={lineStarts[index]}\n />\n ))}\n </code>\n </pre>\n </div>\n );\n },\n);\n\nStreamRenderer.displayName = 'StreamRenderer';\n\nexport default StreamRenderer;\n"],"mappings":";;;;;;;;AA2BA,MAAM,sBAAsB,UAA0D;CACpF,MAAM,aAA4B,CAAC;CACnC,OAAO,QAAQ,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;EAC9C,MAAM,gBAAgB,IAAI,WAAW,cAAc,GAAG,SAAS,KAAK,YAAY,CAAC;EACjF,WAAgD,iBAAiB;CACnE,CAAC;CACD,OAAO;AACT;AAEA,MAAM,uBAAuB,UAAsC;CACjE,MAAM,WAAW,MAAM,aAAa,oBAAoB,KAAK;CAE7D,OAAO;EAAE,GADS,mBAAmB,QACjB;EAAG,YAAY;CAAM;AAC3C;AAEA,MAAM,YAAY,MACf,EAAE,WAAW,YAAsE;CAClF,MAAM,QAAQ,YACV;EAAE,GAAG,oBAAoB,KAAK;EAAG,GAAG;CAAU,IAC9C,oBAAoB,KAAK;CAC7B,OACE,oBAAC,QAAD;EAAM,WAAW,YAAY,gBAAgB,KAAA;EAAkB;EAC5D,UAAA,MAAM;CACH,CAAA;AAEV,IACC,MAAM,SAAS,KAAK,UAAU,KAAK,SAAS,KAAK,cAAc,KAAK,SACvE;AAEA,MAAM,YAAY,MACf,EACC,MACA,MACA,KACA,YAMI;CACJ,IAAI,CAAC,KAAK,QACR,OACE,oBAAC,QAAD;EAAM,WAAU;EACd,UAAA,oBAAC,QAAD;GAAM,OAAO,EAAE,YAAY,MAAM;GAAI,UAAA;EAAe,CAAA;CAChD,CAAA;CAIV,IAAI,SAAS;CACb,OACE,oBAAC,QAAD;EAAM,WAAU;EACb,UAAA,KAAK,KAAK,UAAU;GACnB,MAAM,cAAc;GACpB,UAAU,MAAM,QAAQ;GACxB,OACE,oBAAC,WAAD;IACE,WAAW,sBAAsB,MAAM,aAAa,GAAG;IAEhD;GACR,GAFM,WAEN;EAEL,CAAC;CACG,CAAA;AAEV,IACC,MAAM,SAAS,KAAK,SAAS,KAAK,QAAQ,KAAK,UAAU,KAAK,KACjE;AAEA,MAAM,iBAAiB,MACpB,EAAE,UAAU,WAAW,mBAAmB,mBAAmB,UAAU,OAAO,YAAY;CAEzF,MAAM,eAAe,YAAY;CAEjC,MAAM,YAAY,mBAAmB,cAAc;EACjD;EACA;EACA,WAAW;EACX;CACF,CAAC;CAED,MAAM,QAAQ,WAAW;CACzB,MAAM,WAAW,WAAW;CAE5B,MAAM,UAAU,OAAuB,qBAAqB,CAAC;CAC7D,MAAM,kBAAkB,OAAO,EAAE;CACjC,IAAI,CAAC,aAAa,WAAW,gBAAgB,OAAO,GAClD,QAAQ,UAAU,qBAAqB;CAEzC,gBAAgB,UAAU;CAC1B,MAAM,MAAM,YAAY,IAAI;CAC5B,MAAM,aAAa,QAAQ,gBAAgB,QAAQ,SAAS,OAAO,GAAG,IAAI,CAAC;CAE3E,IAAI,CAAC,SAAS,MAAM,WAAW,GAC7B,OACE,oBAAC,OAAD;EAAK,WAAW;EAAmB,KAAI;EAAa;EAClD,UAAA,oBAAC,OAAD,EAAA,UACE,oBAAC,QAAD,EAAA,UAAO,aAAmB,CAAA,EACvB,CAAA;CACF,CAAA;CAIT,OACE,oBAAC,OAAD;EAAgB;EAAW,KAAI;EAAa;EAC1C,UAAA,oBAAC,OAAD;GAAK,WAAWA,OAAK,SAAS,KAAK;GAAG,OAAO;GAAU,UAAU;GAC/D,UAAA,oBAAC,QAAD;IAAM,OAAO;KAAE,SAAS;KAAQ,eAAe;KAAU,YAAY;IAAM;IACxE,UAAA,MAAM,KAAK,MAAM,UAChB,oBAAC,WAAD;KACE,MAAM,QAAQ;KAER;KACD;KACL,OAAO,WAAW;IACnB,GAJM,QAAQ,OAId,CACF;GACG,CAAA;EACH,CAAA;CACF,CAAA;AAET,CACF;AAEA,eAAe,cAAc"}
|
|
@@ -5,24 +5,24 @@ import StreamRenderer from "./StreamRenderer.mjs";
|
|
|
5
5
|
import { styles } from "./style.mjs";
|
|
6
6
|
import { memo } from "react";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
|
-
import clsx from "clsx";
|
|
8
|
+
import clsx$1 from "clsx";
|
|
9
9
|
import { STREAM_FADE_DURATION } from "@lobehub/streamdown";
|
|
10
10
|
//#region src/Highlighter/SyntaxHighlighter/index.tsx
|
|
11
11
|
const SyntaxHighlighterImpl = memo(({ animated, children, className, enableTransformer, language, style, theme, variant = "borderless", xstyle }) => {
|
|
12
12
|
const isDefaultTheme = theme === "lobe-theme" || !theme;
|
|
13
13
|
const showBackground = !isDefaultTheme && variant === "filled";
|
|
14
14
|
const resolvedTheme = isDefaultTheme ? void 0 : theme;
|
|
15
|
-
const classes = clsx("lobe-syntax-highlighter", !showBackground && "lobe-syntax-highlighter-transparent", animated && "lobe-syntax-highlighter-animated", variant === "borderless" ? "lobe-syntax-highlighter-unpadded" : "lobe-syntax-highlighter-padded");
|
|
15
|
+
const classes = clsx$1("lobe-syntax-highlighter", !showBackground && "lobe-syntax-highlighter-transparent", animated && "lobe-syntax-highlighter-animated", variant === "borderless" ? "lobe-syntax-highlighter-unpadded" : "lobe-syntax-highlighter-padded");
|
|
16
16
|
const mergedStyle = animated ? {
|
|
17
17
|
"--lobe-syntax-highlighter-stream-fade": `${STREAM_FADE_DURATION}ms`,
|
|
18
18
|
...style
|
|
19
19
|
} : style;
|
|
20
|
-
const shiki = styleProps([styles.root, xstyle], clsx(classes, "ant-highlighter-highlighter-shiki lobe-syntax-highlighter-shiki", className), mergedStyle);
|
|
20
|
+
const shiki = styleProps([styles.root, xstyle], clsx$1(classes, "ant-highlighter-highlighter-shiki lobe-syntax-highlighter-shiki", className), mergedStyle);
|
|
21
21
|
const fallback = styleProps([
|
|
22
22
|
styles.root,
|
|
23
23
|
styles.unshiki,
|
|
24
24
|
xstyle
|
|
25
|
-
], clsx(classes, className), mergedStyle);
|
|
25
|
+
], clsx$1(classes, className), mergedStyle);
|
|
26
26
|
return /* @__PURE__ */ jsx(animated ? StreamRenderer : StaticRenderer, {
|
|
27
27
|
className: shiki.className,
|
|
28
28
|
enableTransformer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/Highlighter/SyntaxHighlighter/index.tsx"],"sourcesContent":["'use client';\n\nimport { STREAM_FADE_DURATION } from '@lobehub/streamdown';\nimport clsx from 'clsx';\nimport { type CSSProperties, memo } from 'react';\n\nimport { styleProps } from '@/styles/stylex/props';\n\nimport type { SyntaxHighlighterProps } from '../type';\nimport StaticRenderer from './StaticRenderer';\nimport StreamRenderer from './StreamRenderer';\nimport { styles } from './style';\n\ntype SyntaxHighlighterImplProps = SyntaxHighlighterProps & {\n xstyle?: Parameters<typeof styleProps>[0];\n};\n\nexport const SyntaxHighlighterImpl = memo<SyntaxHighlighterImplProps>(\n ({\n animated,\n children,\n className,\n enableTransformer,\n language,\n style,\n theme,\n variant = 'borderless',\n xstyle,\n }) => {\n const isDefaultTheme = theme === 'lobe-theme' || !theme;\n const showBackground = !isDefaultTheme && variant === 'filled';\n const resolvedTheme = isDefaultTheme ? undefined : theme;\n\n const classes = clsx(\n 'lobe-syntax-highlighter',\n !showBackground && 'lobe-syntax-highlighter-transparent',\n animated && 'lobe-syntax-highlighter-animated',\n variant === 'borderless'\n ? 'lobe-syntax-highlighter-unpadded'\n : 'lobe-syntax-highlighter-padded',\n );\n const mergedStyle = animated\n ? ({\n '--lobe-syntax-highlighter-stream-fade': `${STREAM_FADE_DURATION}ms`,\n ...style,\n } as CSSProperties)\n : style;\n\n const shiki = styleProps(\n [styles.root, xstyle],\n clsx(classes, 'ant-highlighter-highlighter-shiki lobe-syntax-highlighter-shiki', className),\n mergedStyle,\n );\n const fallback = styleProps(\n [styles.root, styles.unshiki, xstyle],\n clsx(classes, className),\n mergedStyle,\n );\n\n const Renderer = animated ? StreamRenderer : StaticRenderer;\n\n return (\n <Renderer\n className={shiki.className}\n enableTransformer={enableTransformer}\n fallbackClassName={fallback.className}\n language={language}\n style={shiki.style}\n theme={resolvedTheme}\n >\n {children}\n </Renderer>\n );\n },\n (prevProps, nextProps) =>\n prevProps.children === nextProps.children && prevProps.language === nextProps.language,\n);\n\nconst SyntaxHighlighter = memo<SyntaxHighlighterProps>((props) => (\n <SyntaxHighlighterImpl {...props} />\n));\n\nSyntaxHighlighter.displayName = 'SyntaxHighlighter';\n\nexport default SyntaxHighlighter;\n"],"mappings":";;;;;;;;;;AAiBA,MAAa,wBAAwB,MAClC,EACC,UACA,UACA,WACA,mBACA,UACA,OACA,OACA,UAAU,cACV,aACI;CACJ,MAAM,iBAAiB,UAAU,gBAAgB,CAAC;CAClD,MAAM,iBAAiB,CAAC,kBAAkB,YAAY;CACtD,MAAM,gBAAgB,iBAAiB,KAAA,IAAY;CAEnD,MAAM,
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["clsx"],"sources":["../../../src/Highlighter/SyntaxHighlighter/index.tsx"],"sourcesContent":["'use client';\n\nimport { STREAM_FADE_DURATION } from '@lobehub/streamdown';\nimport clsx from 'clsx';\nimport { type CSSProperties, memo } from 'react';\n\nimport { styleProps } from '@/styles/stylex/props';\n\nimport type { SyntaxHighlighterProps } from '../type';\nimport StaticRenderer from './StaticRenderer';\nimport StreamRenderer from './StreamRenderer';\nimport { styles } from './style';\n\ntype SyntaxHighlighterImplProps = SyntaxHighlighterProps & {\n xstyle?: Parameters<typeof styleProps>[0];\n};\n\nexport const SyntaxHighlighterImpl = memo<SyntaxHighlighterImplProps>(\n ({\n animated,\n children,\n className,\n enableTransformer,\n language,\n style,\n theme,\n variant = 'borderless',\n xstyle,\n }) => {\n const isDefaultTheme = theme === 'lobe-theme' || !theme;\n const showBackground = !isDefaultTheme && variant === 'filled';\n const resolvedTheme = isDefaultTheme ? undefined : theme;\n\n const classes = clsx(\n 'lobe-syntax-highlighter',\n !showBackground && 'lobe-syntax-highlighter-transparent',\n animated && 'lobe-syntax-highlighter-animated',\n variant === 'borderless'\n ? 'lobe-syntax-highlighter-unpadded'\n : 'lobe-syntax-highlighter-padded',\n );\n const mergedStyle = animated\n ? ({\n '--lobe-syntax-highlighter-stream-fade': `${STREAM_FADE_DURATION}ms`,\n ...style,\n } as CSSProperties)\n : style;\n\n const shiki = styleProps(\n [styles.root, xstyle],\n clsx(classes, 'ant-highlighter-highlighter-shiki lobe-syntax-highlighter-shiki', className),\n mergedStyle,\n );\n const fallback = styleProps(\n [styles.root, styles.unshiki, xstyle],\n clsx(classes, className),\n mergedStyle,\n );\n\n const Renderer = animated ? StreamRenderer : StaticRenderer;\n\n return (\n <Renderer\n className={shiki.className}\n enableTransformer={enableTransformer}\n fallbackClassName={fallback.className}\n language={language}\n style={shiki.style}\n theme={resolvedTheme}\n >\n {children}\n </Renderer>\n );\n },\n (prevProps, nextProps) =>\n prevProps.children === nextProps.children && prevProps.language === nextProps.language,\n);\n\nconst SyntaxHighlighter = memo<SyntaxHighlighterProps>((props) => (\n <SyntaxHighlighterImpl {...props} />\n));\n\nSyntaxHighlighter.displayName = 'SyntaxHighlighter';\n\nexport default SyntaxHighlighter;\n"],"mappings":";;;;;;;;;;AAiBA,MAAa,wBAAwB,MAClC,EACC,UACA,UACA,WACA,mBACA,UACA,OACA,OACA,UAAU,cACV,aACI;CACJ,MAAM,iBAAiB,UAAU,gBAAgB,CAAC;CAClD,MAAM,iBAAiB,CAAC,kBAAkB,YAAY;CACtD,MAAM,gBAAgB,iBAAiB,KAAA,IAAY;CAEnD,MAAM,UAAUA,OACd,2BACA,CAAC,kBAAkB,uCACnB,YAAY,oCACZ,YAAY,eACR,qCACA,gCACN;CACA,MAAM,cAAc,WACf;EACC,yCAAyC,GAAG,qBAAqB;EACjE,GAAG;CACL,IACA;CAEJ,MAAM,QAAQ,WACZ,CAAC,OAAO,MAAM,MAAM,GACpBA,OAAK,SAAS,mEAAmE,SAAS,GAC1F,WACF;CACA,MAAM,WAAW,WACf;EAAC,OAAO;EAAM,OAAO;EAAS;CAAM,GACpCA,OAAK,SAAS,SAAS,GACvB,WACF;CAIA,OACE,oBAHe,WAAW,iBAAiB,gBAG3C;EACE,WAAW,MAAM;EACE;EACnB,mBAAmB,SAAS;EAClB;EACV,OAAO,MAAM;EACb,OAAO;EAEN;CACO,CAAA;AAEd,IACC,WAAW,cACV,UAAU,aAAa,UAAU,YAAY,UAAU,aAAa,UAAU,QAClF;AAEA,MAAM,oBAAoB,MAA8B,UACtD,oBAAC,uBAAD,EAAuB,GAAI,MAAQ,CAAA,CACpC;AAED,kBAAkB,cAAc"}
|
package/es/Highlighter/style.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { stylish } from "../styles/stylex/stylish.mjs";
|
|
2
|
-
import clsx from "clsx";
|
|
2
|
+
import clsx$1 from "clsx";
|
|
3
3
|
//#region src/Highlighter/style.ts
|
|
4
4
|
const actionsHoverCls = "ant-highlighter-highlighter-hover-actions lobe-highlighter-actions";
|
|
5
5
|
const langHoverCls = "ant-highlighter-highlighter-hover-lang lobe-highlighter-lang";
|
|
@@ -65,7 +65,7 @@ const rootStyles = ({ shadow, variant = "filled" }) => [
|
|
|
65
65
|
variantStyles[variant],
|
|
66
66
|
shadow && styles.shadow
|
|
67
67
|
];
|
|
68
|
-
const rootClassName = (wrap, className) => clsx(prefix, "lobe-highlighter", wrap ? "lobe-highlighter-wrap" : "lobe-highlighter-nowrap", className);
|
|
68
|
+
const rootClassName = (wrap, className) => clsx$1(prefix, "lobe-highlighter", wrap ? "lobe-highlighter-wrap" : "lobe-highlighter-nowrap", className);
|
|
69
69
|
const headerStyles = (variant = "filled") => [styles.header, variant === "filled" && styles.headerFilled];
|
|
70
70
|
const headerFlexProps = (variant = "filled") => ({
|
|
71
71
|
padding: 4,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.mjs","names":[],"sources":["../../src/Highlighter/style.ts"],"sourcesContent":["import './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { stylish } from '@/styles/stylex/stylish';\n\nimport type { HighlighterProps } from './type';\n\nexport const actionsHoverCls = 'ant-highlighter-highlighter-hover-actions lobe-highlighter-actions';\nexport const langHoverCls = 'ant-highlighter-highlighter-hover-lang lobe-highlighter-lang';\nexport const expandCls = 'ant-highlighter-highlighter-body-expand';\nexport const prefix = 'ant-highlighter';\n\nexport const styles = stylex.create({\n actions: {\n insetBlockStart: 8,\n insetInlineEnd: 8,\n opacity: 0,\n position: 'absolute',\n zIndex: 2,\n },\n body: {\n overflow: 'hidden',\n transition: `opacity 0.25s ${cssVar.motionEaseOut}`,\n },\n bodyCollapsed: {\n opacity: 0,\n },\n bodyDivider: {\n borderBlockStartColor: cssVar.colorFillQuaternary,\n borderBlockStartStyle: 'solid',\n borderBlockStartWidth: 1,\n },\n filled: {\n backgroundColor: cssVar.colorFillQuaternary,\n },\n header: {\n cursor: 'pointer',\n position: 'relative',\n },\n headerFilled: {\n backgroundColor: 'transparent',\n },\n root: {\n borderRadius: cssVar.borderRadius,\n overflow: 'hidden',\n transition: `background-color 100ms ${cssVar.motionEaseOut}`,\n position: 'relative',\n width: '100%',\n },\n shadow: {\n boxShadow: `0 1px 0 -1px ${cssVar.colorBorder}, 0 1px 2px -0.5px ${cssVar.colorBorder}, 0 2px 2px -1px ${cssVar.colorBorderSecondary}, 0 3px 6px -4px ${cssVar.colorBorderSecondary}`,\n },\n});\n\ntype Variant = NonNullable<HighlighterProps['variant']>;\n\nconst variantStyles = {\n borderless: stylish.variantBorderlessWithoutHover,\n filled: [stylish.variantFilledWithoutHover, styles.filled],\n outlined: stylish.variantOutlinedWithoutHover,\n};\n\nexport const rootStyles = ({\n shadow,\n variant = 'filled',\n}: {\n shadow?: boolean;\n variant?: Variant;\n}) => [styles.root, variantStyles[variant], shadow && styles.shadow];\n\nexport const rootClassName = (wrap?: boolean, className?: string) =>\n clsx(\n prefix,\n 'lobe-highlighter',\n wrap ? 'lobe-highlighter-wrap' : 'lobe-highlighter-nowrap',\n className,\n );\n\nexport const headerStyles = (variant: Variant = 'filled') => [\n styles.header,\n variant === 'filled' && styles.headerFilled,\n];\n\nexport const headerFlexProps = (variant: Variant = 'filled') => ({\n padding: 4,\n paddingInline: variant === 'borderless' ? 0 : undefined,\n});\n\nexport const bodyStyles = (expand: boolean, variant: Variant = 'filled') => [\n styles.body,\n expand ? variant !== 'borderless' && styles.bodyDivider : styles.bodyCollapsed,\n];\n"],"mappings":";;;AAOA,MAAa,kBAAkB;AAC/B,MAAa,eAAe;AAC5B,MAAa,YAAY;AACzB,MAAa,SAAS;AACtB,MAAa,SAAS;CACpB,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,eAAe;EACb,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,cAAc;EACZ,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,OAAO;CACT;AACF;AAEA,MAAM,gBAAgB;CACpB,YAAY,QAAQ;CACpB,QAAQ,CAAC,QAAQ,2BAA2B,OAAO,MAAM;CACzD,UAAU,QAAQ;AACpB;AACA,MAAa,cAAc,EACzB,QACA,UAAU,eAIN;CAAC,OAAO;CAAM,cAAc;CAAU,UAAU,OAAO;AAAM;AACnE,MAAa,iBAAiB,MAAgB,
|
|
1
|
+
{"version":3,"file":"style.mjs","names":["clsx"],"sources":["../../src/Highlighter/style.ts"],"sourcesContent":["import './style.css';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { stylish } from '@/styles/stylex/stylish';\n\nimport type { HighlighterProps } from './type';\n\nexport const actionsHoverCls = 'ant-highlighter-highlighter-hover-actions lobe-highlighter-actions';\nexport const langHoverCls = 'ant-highlighter-highlighter-hover-lang lobe-highlighter-lang';\nexport const expandCls = 'ant-highlighter-highlighter-body-expand';\nexport const prefix = 'ant-highlighter';\n\nexport const styles = stylex.create({\n actions: {\n insetBlockStart: 8,\n insetInlineEnd: 8,\n opacity: 0,\n position: 'absolute',\n zIndex: 2,\n },\n body: {\n overflow: 'hidden',\n transition: `opacity 0.25s ${cssVar.motionEaseOut}`,\n },\n bodyCollapsed: {\n opacity: 0,\n },\n bodyDivider: {\n borderBlockStartColor: cssVar.colorFillQuaternary,\n borderBlockStartStyle: 'solid',\n borderBlockStartWidth: 1,\n },\n filled: {\n backgroundColor: cssVar.colorFillQuaternary,\n },\n header: {\n cursor: 'pointer',\n position: 'relative',\n },\n headerFilled: {\n backgroundColor: 'transparent',\n },\n root: {\n borderRadius: cssVar.borderRadius,\n overflow: 'hidden',\n transition: `background-color 100ms ${cssVar.motionEaseOut}`,\n position: 'relative',\n width: '100%',\n },\n shadow: {\n boxShadow: `0 1px 0 -1px ${cssVar.colorBorder}, 0 1px 2px -0.5px ${cssVar.colorBorder}, 0 2px 2px -1px ${cssVar.colorBorderSecondary}, 0 3px 6px -4px ${cssVar.colorBorderSecondary}`,\n },\n});\n\ntype Variant = NonNullable<HighlighterProps['variant']>;\n\nconst variantStyles = {\n borderless: stylish.variantBorderlessWithoutHover,\n filled: [stylish.variantFilledWithoutHover, styles.filled],\n outlined: stylish.variantOutlinedWithoutHover,\n};\n\nexport const rootStyles = ({\n shadow,\n variant = 'filled',\n}: {\n shadow?: boolean;\n variant?: Variant;\n}) => [styles.root, variantStyles[variant], shadow && styles.shadow];\n\nexport const rootClassName = (wrap?: boolean, className?: string) =>\n clsx(\n prefix,\n 'lobe-highlighter',\n wrap ? 'lobe-highlighter-wrap' : 'lobe-highlighter-nowrap',\n className,\n );\n\nexport const headerStyles = (variant: Variant = 'filled') => [\n styles.header,\n variant === 'filled' && styles.headerFilled,\n];\n\nexport const headerFlexProps = (variant: Variant = 'filled') => ({\n padding: 4,\n paddingInline: variant === 'borderless' ? 0 : undefined,\n});\n\nexport const bodyStyles = (expand: boolean, variant: Variant = 'filled') => [\n styles.body,\n expand ? variant !== 'borderless' && styles.bodyDivider : styles.bodyCollapsed,\n];\n"],"mappings":";;;AAOA,MAAa,kBAAkB;AAC/B,MAAa,eAAe;AAC5B,MAAa,YAAY;AACzB,MAAa,SAAS;AACtB,MAAa,SAAS;CACpB,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,eAAe;EACb,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,cAAc;EACZ,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,QAAQ;EACN,QAAQ;EACR,OAAO;CACT;AACF;AAEA,MAAM,gBAAgB;CACpB,YAAY,QAAQ;CACpB,QAAQ,CAAC,QAAQ,2BAA2B,OAAO,MAAM;CACzD,UAAU,QAAQ;AACpB;AACA,MAAa,cAAc,EACzB,QACA,UAAU,eAIN;CAAC,OAAO;CAAM,cAAc;CAAU,UAAU,OAAO;AAAM;AACnE,MAAa,iBAAiB,MAAgB,cAAuBA,OAAK,QAAQ,oBAAoB,OAAO,0BAA0B,2BAA2B,SAAS;AAC3K,MAAa,gBAAgB,UAAmB,aAAa,CAAC,OAAO,QAAQ,YAAY,YAAY,OAAO,YAAY;AACxH,MAAa,mBAAmB,UAAmB,cAAc;CAC/D,SAAS;CACT,eAAe,YAAY,eAAe,IAAI,KAAA;AAChD;AACA,MAAa,cAAc,QAAiB,UAAmB,aAAa,CAAC,OAAO,MAAM,SAAS,YAAY,gBAAgB,OAAO,cAAc,OAAO,aAAa"}
|
|
@@ -15,7 +15,7 @@ import { styles } from "./style.mjs";
|
|
|
15
15
|
import { HtmlPreviewIframe } from "./Iframe.mjs";
|
|
16
16
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
17
17
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
-
import clsx from "clsx";
|
|
18
|
+
import clsx$1 from "clsx";
|
|
19
19
|
import * as stylex from "@stylexjs/stylex";
|
|
20
20
|
import { Download, Expand } from "lucide-react";
|
|
21
21
|
//#region src/HtmlPreview/HtmlPreview.tsx
|
|
@@ -290,7 +290,7 @@ const HtmlPreview = memo(({ actionIconSize, actionsRender, animated, bodyRender,
|
|
|
290
290
|
gap: 4,
|
|
291
291
|
padding: 4,
|
|
292
292
|
onClick: stopPropagation,
|
|
293
|
-
...styleProps(styles.toolbar, clsx(actionsHoverCls, classNames?.header), customStyles?.header),
|
|
293
|
+
...styleProps(styles.toolbar, clsx$1(actionsHoverCls, classNames?.header), customStyles?.header),
|
|
294
294
|
children: actions
|
|
295
295
|
}), body]
|
|
296
296
|
});
|