niuma-ui 2.0.4 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +67 -0
- package/NOTICE +0 -1
- package/README.md +3 -3
- package/README.zh-CN.md +3 -3
- package/dist/components/_shared/index.d.ts +2 -2
- package/dist/components/_shared/src/overlay-utils.d.ts +44 -1
- package/dist/components/_shared/src/overlay-utils.js +87 -2
- package/dist/components/alert/index.d.ts +1 -0
- package/dist/components/alert/src/RsAlert.css +120 -65
- package/dist/components/alert/src/RsAlert.d.ts +24 -5
- package/dist/components/alert/src/RsAlert.impl.js +108 -36
- package/dist/components/alert/src/RsAlert.js +1 -1
- package/dist/components/alert/src/alert-utils.d.ts +37 -0
- package/dist/components/alert/src/alert-utils.js +71 -0
- package/dist/components/auto-complete/src/RsAutoComplete.d.ts +1 -1
- package/dist/components/button/src/RsButton.css +75 -72
- package/dist/components/button/src/RsButton.d.ts +1 -4
- package/dist/components/button/src/RsButton.impl.js +3 -7
- package/dist/components/button/src/RsButton.js +1 -1
- package/dist/components/card/src/RsCard.d.ts +1 -1
- package/dist/components/code-block/index.d.ts +1 -0
- package/dist/components/code-block/src/RsCodeBlock.css +93 -52
- package/dist/components/code-block/src/RsCodeBlock.d.ts +36 -9
- package/dist/components/code-block/src/RsCodeBlock.impl.js +203 -84
- package/dist/components/code-block/src/RsCodeBlock.js +1 -1
- package/dist/components/code-block/src/code-block-highlight.d.ts +4 -0
- package/dist/components/code-block/src/code-block-highlight.js +34 -0
- package/dist/components/code-block/src/code-block-utils.d.ts +23 -0
- package/dist/components/code-block/src/code-block-utils.js +71 -0
- package/dist/components/code-editor/index.d.ts +1 -1
- package/dist/components/code-editor/src/RsCodeEditor.css +118 -92
- package/dist/components/code-editor/src/RsCodeEditor.d.ts +14 -3
- package/dist/components/code-editor/src/RsCodeEditor.impl.js +261 -94
- package/dist/components/code-editor/src/RsCodeEditor.js +1 -1
- package/dist/components/code-editor/src/code-editor-utils.d.ts +15 -0
- package/dist/components/code-editor/src/code-editor-utils.js +36 -1
- package/dist/components/code-editor/src/code-mirror-completion.d.ts +1 -1
- package/dist/components/code-editor/src/code-mirror-completion.js +8 -5
- package/dist/components/code-editor/src/code-mirror-diagnostics.d.ts +2 -3
- package/dist/components/code-editor/src/code-mirror-diagnostics.js +3 -4
- package/dist/components/code-editor/src/code-mirror-ghost.d.ts +1 -1
- package/dist/components/code-editor/src/code-mirror-ghost.js +12 -3
- package/dist/components/code-editor/src/code-mirror-inline-edit.js +8 -3
- package/dist/components/code-editor/src/code-mirror-intel.d.ts +2 -2
- package/dist/components/code-editor/src/code-mirror-intel.js +50 -39
- package/dist/components/code-editor/src/code-mirror-lang.js +4 -0
- package/dist/components/code-editor/src/code-mirror-session.d.ts +13 -0
- package/dist/components/code-editor/src/code-mirror-session.js +30 -0
- package/dist/components/config-provider/src/RsConfigProvider.css +1 -1
- package/dist/components/config-provider/src/RsConfigProvider.d.ts +2 -2
- package/dist/components/config-provider/src/RsConfigProvider.impl.js +7 -16
- package/dist/components/config-provider/src/RsConfigProvider.js +1 -1
- package/dist/components/context-menu/index.d.ts +1 -1
- package/dist/components/context-menu/src/RsContextMenu.css +115 -89
- package/dist/components/context-menu/src/RsContextMenu.d.ts +32 -11
- package/dist/components/context-menu/src/RsContextMenu.impl.js +795 -48
- package/dist/components/context-menu/src/RsContextMenuItems.d.ts +25 -1
- package/dist/components/context-menu/src/RsContextMenuItems.impl.js +110 -61
- package/dist/components/context-menu/src/context-menu-utils.d.ts +89 -3
- package/dist/components/context-menu/src/context-menu-utils.js +168 -3
- package/dist/components/date-picker/src/RsDatePicker.d.ts +2 -2
- package/dist/components/date-picker/src/RsDateTimePicker.d.ts +2 -2
- package/dist/components/descriptions/index.d.ts +1 -1
- package/dist/components/descriptions/src/RsDescriptions.css +38 -11
- package/dist/components/descriptions/src/RsDescriptions.d.ts +20 -4
- package/dist/components/descriptions/src/RsDescriptions.impl.js +89 -19
- package/dist/components/descriptions/src/RsDescriptionsItem.impl.js +13 -6
- package/dist/components/descriptions/src/descriptions-utils.d.ts +19 -0
- package/dist/components/descriptions/src/descriptions-utils.js +39 -1
- package/dist/components/dialog/index.d.ts +1 -1
- package/dist/components/dialog/src/RsConfirmDialog.css +47 -21
- package/dist/components/dialog/src/RsConfirmDialog.d.ts +19 -7
- package/dist/components/dialog/src/RsConfirmDialog.impl.js +349 -119
- package/dist/components/dialog/src/RsConfirmDialog.js +2 -1
- package/dist/components/dialog/src/RsDialog.css +102 -109
- package/dist/components/dialog/src/RsDialog.d.ts +34 -24
- package/dist/components/dialog/src/RsDialog.impl.js +410 -177
- package/dist/components/dialog/src/RsDialog.js +2 -1
- package/dist/components/dialog/src/dialog-utils.d.ts +40 -1
- package/dist/components/dialog/src/dialog-utils.js +152 -1
- package/dist/components/dialog/src/dialog-window.js +29 -8
- package/dist/components/drawer/index.d.ts +1 -1
- package/dist/components/drawer/src/RsDrawer.css +61 -29
- package/dist/components/drawer/src/RsDrawer.d.ts +37 -21
- package/dist/components/drawer/src/RsDrawer.impl.js +441 -223
- package/dist/components/drawer/src/drawer-utils.d.ts +35 -0
- package/dist/components/drawer/src/drawer-utils.js +131 -1
- package/dist/components/dropdown/index.d.ts +1 -1
- package/dist/components/dropdown/src/RsDropdown.css +140 -61
- package/dist/components/dropdown/src/RsDropdown.d.ts +39 -6
- package/dist/components/dropdown/src/RsDropdown.impl.js +693 -63
- package/dist/components/dropdown/src/RsDropdownItemView.impl.js +17 -7
- package/dist/components/dropdown/src/RsDropdownItems.d.ts +32 -3
- package/dist/components/dropdown/src/RsDropdownItems.impl.js +171 -59
- package/dist/components/dropdown/src/dropdown-utils.d.ts +50 -0
- package/dist/components/dropdown/src/dropdown-utils.js +103 -3
- package/dist/components/empty/index.d.ts +1 -0
- package/dist/components/empty/src/RsEmpty.css +105 -23
- package/dist/components/empty/src/RsEmpty.d.ts +27 -4
- package/dist/components/empty/src/RsEmpty.impl.js +154 -11
- package/dist/components/empty/src/RsEmpty.js +2 -1
- package/dist/components/empty/src/empty-utils.d.ts +28 -0
- package/dist/components/empty/src/empty-utils.js +55 -0
- package/dist/components/form/src/RsForm.d.ts +1 -1
- package/dist/components/input-number/src/RsInputNumber.d.ts +1 -1
- package/dist/components/label/src/RsLabel.d.ts +1 -1
- package/dist/components/loading/index.d.ts +1 -0
- package/dist/components/loading/src/RsLoading.css +13 -97
- package/dist/components/loading/src/RsLoading.d.ts +52 -2
- package/dist/components/loading/src/RsLoading.impl.js +216 -33
- package/dist/components/loading/src/RsLoading.js +2 -1
- package/dist/components/loading/src/loading-status.css +210 -0
- package/dist/components/loading/src/loading-status.d.ts +34 -0
- package/dist/components/loading/src/loading-status.impl.js +84 -0
- package/dist/components/loading/src/loading-status.js +8 -0
- package/dist/components/loading/src/loading-utils.d.ts +51 -4
- package/dist/components/loading/src/loading-utils.js +122 -0
- package/dist/components/loading-bar/index.d.ts +1 -0
- package/dist/components/loading-bar/src/RsLoadingBar.css +72 -8
- package/dist/components/loading-bar/src/RsLoadingBar.d.ts +55 -11
- package/dist/components/loading-bar/src/RsLoadingBar.impl.js +298 -57
- package/dist/components/loading-bar/src/RsLoadingBar.js +1 -1
- package/dist/components/loading-bar/src/loading-bar-utils.d.ts +69 -0
- package/dist/components/loading-bar/src/loading-bar-utils.js +97 -0
- package/dist/components/log/src/RsLog.css +52 -144
- package/dist/components/log/src/RsLog.d.ts +12 -11
- package/dist/components/log/src/RsLog.impl.js +181 -148
- package/dist/components/log/src/RsLog.js +1 -1
- package/dist/components/log/src/RsLogRow.css +152 -0
- package/dist/components/log/src/RsLogRow.d.ts +35 -0
- package/dist/components/log/src/RsLogRow.impl.js +91 -0
- package/dist/components/log/src/RsLogRow.js +8 -0
- package/dist/components/log/src/log-utils.d.ts +8 -0
- package/dist/components/log/src/log-utils.js +71 -10
- package/dist/components/markdown/index.d.ts +1 -1
- package/dist/components/markdown/src/RsMarkdown.css +75 -32
- package/dist/components/markdown/src/RsMarkdown.d.ts +6 -2
- package/dist/components/markdown/src/RsMarkdown.impl.js +185 -17
- package/dist/components/markdown/src/markdown-utils.d.ts +26 -0
- package/dist/components/markdown/src/markdown-utils.js +114 -12
- package/dist/components/mentions/src/RsMentions.d.ts +2 -2
- package/dist/components/menu/index.d.ts +1 -1
- package/dist/components/menu/src/RsMenu.css +70 -29
- package/dist/components/menu/src/RsMenu.d.ts +58 -4
- package/dist/components/menu/src/RsMenu.impl.js +93 -46
- package/dist/components/menu/src/RsMenuItems.d.ts +22 -5
- package/dist/components/menu/src/RsMenuItems.impl.js +506 -154
- package/dist/components/menu/src/menu-utils.d.ts +56 -0
- package/dist/components/menu/src/menu-utils.js +139 -6
- package/dist/components/monaco-editor/index.d.ts +1 -1
- package/dist/components/monaco-editor/src/RsMonacoEditor.css +28 -16
- package/dist/components/monaco-editor/src/RsMonacoEditor.d.ts +39 -41
- package/dist/components/monaco-editor/src/RsMonacoEditor.impl.js +212 -133
- package/dist/components/monaco-editor/src/RsMonacoEditor.js +1 -1
- package/dist/components/monaco-editor/src/monaco-editor-utils.d.ts +126 -0
- package/dist/components/monaco-editor/src/monaco-editor-utils.js +302 -0
- package/dist/components/pagination/index.d.ts +2 -2
- package/dist/components/pagination/src/RsPagination.css +93 -46
- package/dist/components/pagination/src/RsPagination.d.ts +68 -8
- package/dist/components/pagination/src/RsPagination.impl.js +229 -86
- package/dist/components/pagination/src/RsPagination.js +1 -1
- package/dist/components/pagination/src/pagination-utils.d.ts +59 -0
- package/dist/components/pagination/src/pagination-utils.js +105 -1
- package/dist/components/popover/index.d.ts +1 -0
- package/dist/components/popover/src/RsPopover.css +124 -14
- package/dist/components/popover/src/RsPopover.d.ts +38 -7
- package/dist/components/popover/src/RsPopover.impl.js +546 -35
- package/dist/components/popover/src/RsPopover.js +2 -1
- package/dist/components/popover/src/popover-utils.d.ts +24 -2
- package/dist/components/popover/src/popover-utils.js +55 -0
- package/dist/components/sidebar/index.d.ts +1 -0
- package/dist/components/sidebar/src/RsSidebar.css +91 -33
- package/dist/components/sidebar/src/RsSidebar.d.ts +17 -9
- package/dist/components/sidebar/src/RsSidebar.impl.js +124 -22
- package/dist/components/sidebar/src/RsSidebar.js +1 -1
- package/dist/components/sidebar/src/RsSidebarGroup.css +23 -6
- package/dist/components/sidebar/src/RsSidebarGroup.d.ts +6 -2
- package/dist/components/sidebar/src/RsSidebarGroup.impl.js +17 -4
- package/dist/components/sidebar/src/RsSidebarGroup.js +1 -1
- package/dist/components/sidebar/src/RsSidebarItem.css +50 -20
- package/dist/components/sidebar/src/RsSidebarItem.d.ts +21 -3
- package/dist/components/sidebar/src/RsSidebarItem.impl.js +71 -20
- package/dist/components/sidebar/src/RsSidebarItem.js +1 -1
- package/dist/components/sidebar/src/sidebar-utils.d.ts +47 -0
- package/dist/components/sidebar/src/sidebar-utils.js +72 -0
- package/dist/components/split-pane/index.d.ts +2 -2
- package/dist/components/split-pane/src/RsSplitPane.css +41 -30
- package/dist/components/split-pane/src/RsSplitPane.d.ts +6 -2
- package/dist/components/split-pane/src/RsSplitPane.impl.js +153 -45
- package/dist/components/split-pane/src/split-pane-utils.d.ts +23 -0
- package/dist/components/split-pane/src/split-pane-utils.js +18 -1
- package/dist/components/stat-card/index.d.ts +1 -0
- package/dist/components/stat-card/src/RsStatCard.css +129 -25
- package/dist/components/stat-card/src/RsStatCard.d.ts +40 -4
- package/dist/components/stat-card/src/RsStatCard.impl.js +106 -12
- package/dist/components/stat-card/src/RsStatCard.js +1 -1
- package/dist/components/stat-card/src/stat-card-utils.d.ts +39 -0
- package/dist/components/stat-card/src/stat-card-utils.js +113 -0
- package/dist/components/steps/index.d.ts +1 -1
- package/dist/components/steps/src/RsSteps.css +158 -37
- package/dist/components/steps/src/RsSteps.d.ts +69 -5
- package/dist/components/steps/src/RsSteps.impl.js +168 -28
- package/dist/components/steps/src/RsSteps.js +1 -1
- package/dist/components/steps/src/steps-utils.d.ts +51 -1
- package/dist/components/steps/src/steps-utils.js +67 -1
- package/dist/components/table/src/RsTable.impl.js +4 -2
- package/dist/components/table/src/composables/useRsTableContextMenu.d.ts +16 -0
- package/dist/components/table/src/composables/useRsTableContextMenu.js +1 -1
- package/dist/components/table/src/composables/useRsTableEngine.js +6 -2
- package/dist/components/table/src/composables/useRsTableScrollLayout.js +2 -0
- package/dist/components/table/src/composables/useRsTableShell.d.ts +16 -0
- package/dist/components/table/src/rs-table-props.d.ts +1 -1
- package/dist/components/table/src/rs-table-props.js +0 -1
- package/dist/components/table/src/table-body/RsTableBody.impl.js +1 -0
- package/dist/components/table/src/table-body/RsTableCell.impl.js +1 -1
- package/dist/components/table/src/table-body/RsTableCellEditor.impl.js +10 -2
- package/dist/components/table/src/table-body/RsTableColGroup.impl.js +1 -0
- package/dist/components/table/src/table-footer/RsTableSummaryRow.impl.js +1 -0
- package/dist/components/table/src/table-header/RsTableHeader.impl.js +1 -0
- package/dist/components/table/src/utils/table-utils.d.ts +10 -6
- package/dist/components/table/src/utils/table-utils.js +27 -25
- package/dist/components/table/style/rs-table.css +86 -28
- package/dist/components/tabs/index.d.ts +2 -2
- package/dist/components/tabs/src/RsTabs.css +225 -101
- package/dist/components/tabs/src/RsTabs.d.ts +37 -8
- package/dist/components/tabs/src/RsTabs.impl.js +400 -270
- package/dist/components/tabs/src/tabs-utils.d.ts +41 -2
- package/dist/components/tabs/src/tabs-utils.js +55 -1
- package/dist/components/terminal/index.d.ts +1 -1
- package/dist/components/terminal/src/RsTerminal.css +60 -37
- package/dist/components/terminal/src/RsTerminal.d.ts +36 -4
- package/dist/components/terminal/src/RsTerminal.impl.js +288 -68
- package/dist/components/terminal/src/RsTerminal.js +1 -1
- package/dist/components/terminal/src/terminal-utils.d.ts +42 -4
- package/dist/components/terminal/src/terminal-utils.js +113 -10
- package/dist/components/textarea/src/RsTextarea.d.ts +1 -1
- package/dist/components/time-picker/src/RsTimePicker.d.ts +2 -2
- package/dist/components/toaster/src/RsToaster.css +156 -203
- package/dist/components/toaster/src/RsToaster.d.ts +32 -2
- package/dist/components/toaster/src/RsToaster.impl.js +309 -34
- package/dist/components/toaster/src/toast-store.d.ts +95 -0
- package/dist/components/toaster/src/toast-store.js +177 -0
- package/dist/components/toaster/src/toast-utils.d.ts +60 -0
- package/dist/components/toaster/src/toast-utils.js +86 -0
- package/dist/components/toolbar/index.d.ts +1 -1
- package/dist/components/toolbar/src/RsToolbar.css +206 -32
- package/dist/components/toolbar/src/RsToolbar.d.ts +41 -16
- package/dist/components/toolbar/src/RsToolbar.impl.js +146 -18
- package/dist/components/toolbar/src/RsToolbar.js +2 -1
- package/dist/components/toolbar/src/toolbar-utils.d.ts +20 -0
- package/dist/components/toolbar/src/toolbar-utils.js +105 -0
- package/dist/components/tooltip/index.d.ts +1 -0
- package/dist/components/tooltip/src/RsTooltip.css +104 -26
- package/dist/components/tooltip/src/RsTooltip.d.ts +38 -16
- package/dist/components/tooltip/src/RsTooltip.impl.js +420 -51
- package/dist/components/tooltip/src/RsTooltip.js +2 -1
- package/dist/components/tooltip/src/RsTooltipProvider.d.ts +4 -4
- package/dist/components/tooltip/src/RsTooltipProvider.impl.js +51 -14
- package/dist/components/tooltip/src/tooltip-utils.d.ts +30 -0
- package/dist/components/tooltip/src/tooltip-utils.js +23 -0
- package/dist/components/tree/index.d.ts +2 -2
- package/dist/components/tree/src/RsTree.css +84 -75
- package/dist/components/tree/src/RsTree.d.ts +20 -20
- package/dist/components/tree/src/RsTree.impl.js +292 -66
- package/dist/components/tree/src/RsTree.js +1 -1
- package/dist/components/tree/src/tree-utils.d.ts +22 -0
- package/dist/components/tree/src/tree-utils.js +18 -4
- package/dist/components/tree-select/src/RsTreeSelect.d.ts +1 -1
- package/dist/components/virtual-list/index.d.ts +1 -1
- package/dist/components/virtual-list/src/RsVirtualList.css +64 -9
- package/dist/components/virtual-list/src/RsVirtualList.d.ts +31 -5
- package/dist/components/virtual-list/src/RsVirtualList.impl.js +425 -76
- package/dist/components/virtual-list/src/RsVirtualList.js +1 -1
- package/dist/components/virtual-list/src/virtual-list-utils.d.ts +64 -1
- package/dist/components/virtual-list/src/virtual-list-utils.js +215 -1
- package/dist/composables/useRsLoadingBar.d.ts +2 -5
- package/dist/composables/useRsLoadingBar.js +21 -5
- package/dist/composables/useRsTabsNav.d.ts +3 -1
- package/dist/composables/useRsTabsNav.js +96 -28
- package/dist/composables/useRsToast.d.ts +11 -13
- package/dist/composables/useRsToast.js +66 -17
- package/dist/index.d.ts +30 -21
- package/dist/index.js +14 -0
- package/dist/locale/apply.js +6 -1
- package/dist/locale/messages.js +128 -2
- package/dist/styles.css +465 -808
- package/dist/theme/brand.example.css +3 -2
- package/dist/vite-plugins/niuma-ui-host.js +1 -1
- package/package.json +2 -5
- package/dist/components/_shared/src/reka.d.ts +0 -2
- package/dist/components/_shared/src/reka.js +0 -2
|
@@ -1,11 +1,35 @@
|
|
|
1
1
|
import { type RsContextMenuItem } from './context-menu-utils';
|
|
2
2
|
type __VLS_Props = {
|
|
3
3
|
items: RsContextMenuItem[];
|
|
4
|
+
highlight: string;
|
|
5
|
+
openKey: string;
|
|
6
|
+
menuId: string;
|
|
7
|
+
layerId: string;
|
|
8
|
+
iconSize: number;
|
|
4
9
|
};
|
|
5
|
-
declare
|
|
10
|
+
declare var __VLS_20: {
|
|
11
|
+
item: RsContextMenuItem;
|
|
12
|
+
highlighted: boolean;
|
|
13
|
+
checked: boolean;
|
|
14
|
+
};
|
|
15
|
+
type __VLS_Slots = {} & {
|
|
16
|
+
item?: (props: typeof __VLS_20) => any;
|
|
17
|
+
};
|
|
18
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
19
|
+
getHighlight: () => string;
|
|
20
|
+
setHighlight: (key: string) => void;
|
|
21
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
22
|
select: (item: RsContextMenuItem) => any;
|
|
23
|
+
hover: (item: RsContextMenuItem) => any;
|
|
7
24
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
25
|
onSelect?: ((item: RsContextMenuItem) => any) | undefined;
|
|
26
|
+
onHover?: ((item: RsContextMenuItem) => any) | undefined;
|
|
9
27
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
10
29
|
declare const _default: typeof __VLS_export;
|
|
11
30
|
export default _default;
|
|
31
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
32
|
+
new (): {
|
|
33
|
+
$slots: S;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
@@ -1,86 +1,135 @@
|
|
|
1
|
-
import { ContextMenuItem, ContextMenuPortal, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger } from "../../_shared/src/reka.js";
|
|
2
1
|
import RsIcon_default from "../../icon/src/RsIcon.js";
|
|
3
|
-
import
|
|
4
|
-
import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode,
|
|
2
|
+
import { contextMenuItemRole, hasContextMenuChildren, isContextMenuSeparator, resolveContextMenuRel } from "./context-menu-utils.js";
|
|
3
|
+
import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, watch, withCtx } from "vue";
|
|
5
4
|
//#region src/components/context-menu/src/RsContextMenuItems.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
-
var _hoisted_1 = {
|
|
7
|
-
|
|
5
|
+
var _hoisted_1 = {
|
|
6
|
+
key: 0,
|
|
7
|
+
class: "rs-context-menu__group"
|
|
8
|
+
};
|
|
9
|
+
var _hoisted_2 = {
|
|
10
|
+
key: 1,
|
|
11
|
+
class: "rs-context-menu__separator"
|
|
12
|
+
};
|
|
8
13
|
var _hoisted_3 = { class: "rs-context-menu__icon-cell" };
|
|
9
|
-
var _hoisted_4 = { class: "rs-context-
|
|
10
|
-
var _hoisted_5 = {
|
|
14
|
+
var _hoisted_4 = { class: "rs-context-menu__text" };
|
|
15
|
+
var _hoisted_5 = { class: "rs-context-menu__label" };
|
|
16
|
+
var _hoisted_6 = {
|
|
17
|
+
key: 0,
|
|
18
|
+
class: "rs-context-menu__hint"
|
|
19
|
+
};
|
|
20
|
+
var _hoisted_7 = {
|
|
11
21
|
key: 0,
|
|
12
22
|
class: "rs-context-menu__shortcut"
|
|
13
23
|
};
|
|
14
24
|
var RsContextMenuItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
15
25
|
__name: "RsContextMenuItems",
|
|
16
|
-
props: {
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
props: {
|
|
27
|
+
items: {},
|
|
28
|
+
highlight: {},
|
|
29
|
+
openKey: {},
|
|
30
|
+
menuId: {},
|
|
31
|
+
layerId: {},
|
|
32
|
+
iconSize: {}
|
|
33
|
+
},
|
|
34
|
+
emits: ["select", "hover"],
|
|
35
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
36
|
+
const props = __props;
|
|
19
37
|
const emit = __emit;
|
|
20
|
-
|
|
21
|
-
|
|
38
|
+
const current = ref(props.highlight);
|
|
39
|
+
watch(() => props.highlight, (key) => {
|
|
40
|
+
current.value = key;
|
|
41
|
+
});
|
|
42
|
+
function onPointerEnter(item) {
|
|
43
|
+
if (current.value !== item.key) current.value = item.key;
|
|
44
|
+
emit("hover", item);
|
|
45
|
+
}
|
|
46
|
+
__expose({
|
|
47
|
+
getHighlight: () => current.value,
|
|
48
|
+
setHighlight: (key) => {
|
|
49
|
+
current.value = key;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
function itemId(item, index) {
|
|
53
|
+
return `${props.menuId}-${props.layerId}-${index}`;
|
|
54
|
+
}
|
|
55
|
+
function onClick(item, event) {
|
|
56
|
+
if (item.disabled || isContextMenuSeparator(item)) {
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (event.button !== 0) return;
|
|
61
|
+
if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {
|
|
62
|
+
emit("select", item);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
22
65
|
emit("select", item);
|
|
23
66
|
}
|
|
24
67
|
return (_ctx, _cache) => {
|
|
25
|
-
return openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
|
|
26
|
-
return openBlock(), createElementBlock(Fragment, { key: item.key }, [item.
|
|
27
|
-
key: 0,
|
|
28
|
-
class: "rs-context-menu__separator"
|
|
29
|
-
})) : item.children?.length ? (openBlock(), createBlock(unref(ContextMenuSub), { key: 1 }, {
|
|
30
|
-
default: withCtx(() => [createVNode(unref(ContextMenuSubTrigger), {
|
|
31
|
-
class: normalizeClass(["rs-context-menu__item", { "rs-context-menu__item--danger": item.danger }]),
|
|
32
|
-
disabled: item.disabled
|
|
33
|
-
}, {
|
|
34
|
-
default: withCtx(() => [
|
|
35
|
-
createElementVNode("span", _hoisted_1, [item.icon ? (openBlock(), createBlock(RsIcon_default, {
|
|
36
|
-
key: 0,
|
|
37
|
-
name: item.icon,
|
|
38
|
-
size: unref(16)
|
|
39
|
-
}, null, 8, ["name", "size"])) : createCommentVNode("", true)]),
|
|
40
|
-
createElementVNode("span", _hoisted_2, toDisplayString(item.label), 1),
|
|
41
|
-
createVNode(RsIcon_default, {
|
|
42
|
-
name: "chevron-right",
|
|
43
|
-
size: unref(14),
|
|
44
|
-
class: "rs-context-menu__arrow"
|
|
45
|
-
}, null, 8, ["size"])
|
|
46
|
-
]),
|
|
47
|
-
_: 2
|
|
48
|
-
}, 1032, ["class", "disabled"]), createVNode(unref(ContextMenuPortal), null, {
|
|
49
|
-
default: withCtx(() => [createVNode(unref(ContextMenuSubContent), {
|
|
50
|
-
class: "rs-context-menu__sub-content rs-native-scrollbar rs-motion-reduce",
|
|
51
|
-
"side-offset": 2,
|
|
52
|
-
"align-offset": -6,
|
|
53
|
-
"collision-padding": 8
|
|
54
|
-
}, {
|
|
55
|
-
default: withCtx(() => [createVNode(RsContextMenuItems_default, {
|
|
56
|
-
items: item.children,
|
|
57
|
-
onSelect: _cache[0] || (_cache[0] = ($event) => emit("select", $event))
|
|
58
|
-
}, null, 8, ["items"])]),
|
|
59
|
-
_: 2
|
|
60
|
-
}, 1024)]),
|
|
61
|
-
_: 2
|
|
62
|
-
}, 1024)]),
|
|
63
|
-
_: 2
|
|
64
|
-
}, 1024)) : (openBlock(), createBlock(unref(ContextMenuItem), {
|
|
68
|
+
return openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item, index) => {
|
|
69
|
+
return openBlock(), createElementBlock(Fragment, { key: item.key }, [unref(isContextMenuSeparator)(item) && item.label ? (openBlock(), createElementBlock("p", _hoisted_1, toDisplayString(item.label), 1)) : unref(isContextMenuSeparator)(item) ? (openBlock(), createElementBlock("hr", _hoisted_2)) : (openBlock(), createBlock(resolveDynamicComponent(item.href && !item.disabled ? "a" : "button"), {
|
|
65
70
|
key: 2,
|
|
71
|
+
id: itemId(item, index),
|
|
72
|
+
type: item.href && !item.disabled ? void 0 : "button",
|
|
73
|
+
href: item.href && !item.disabled ? item.href : void 0,
|
|
74
|
+
target: item.href && !item.disabled ? item.target : void 0,
|
|
75
|
+
rel: item.href && !item.disabled ? unref(resolveContextMenuRel)(item) : void 0,
|
|
66
76
|
class: normalizeClass(["rs-context-menu__item", { "rs-context-menu__item--danger": item.danger }]),
|
|
67
|
-
|
|
68
|
-
|
|
77
|
+
role: unref(contextMenuItemRole)(item),
|
|
78
|
+
tabindex: item.key === current.value && !item.disabled ? 0 : -1,
|
|
79
|
+
"data-ctx-key": item.key,
|
|
80
|
+
"data-highlighted": item.key === current.value ? "" : void 0,
|
|
81
|
+
"data-state": item.key === __props.openKey ? "open" : void 0,
|
|
82
|
+
"data-disabled": item.disabled ? "" : void 0,
|
|
83
|
+
"aria-disabled": item.disabled ? "true" : void 0,
|
|
84
|
+
"aria-checked": item.type === "checkbox" || item.type === "radio" ? Boolean(item.checked) : void 0,
|
|
85
|
+
"aria-haspopup": unref(hasContextMenuChildren)(item) ? "menu" : void 0,
|
|
86
|
+
"aria-expanded": unref(hasContextMenuChildren)(item) ? item.key === __props.openKey : void 0,
|
|
87
|
+
onClick: ($event) => onClick(item, $event),
|
|
88
|
+
onPointerenter: ($event) => onPointerEnter(item)
|
|
69
89
|
}, {
|
|
70
90
|
default: withCtx(() => [
|
|
71
|
-
createElementVNode("span", _hoisted_3, [item.
|
|
91
|
+
createElementVNode("span", _hoisted_3, [(item.type === "checkbox" || item.type === "radio") && item.checked ? (openBlock(), createBlock(RsIcon_default, {
|
|
72
92
|
key: 0,
|
|
93
|
+
name: "check",
|
|
94
|
+
size: __props.iconSize
|
|
95
|
+
}, null, 8, ["size"])) : item.icon ? (openBlock(), createBlock(RsIcon_default, {
|
|
96
|
+
key: 1,
|
|
73
97
|
name: item.icon,
|
|
74
|
-
size:
|
|
98
|
+
size: __props.iconSize
|
|
75
99
|
}, null, 8, ["name", "size"])) : createCommentVNode("", true)]),
|
|
76
|
-
createElementVNode("span", _hoisted_4,
|
|
77
|
-
|
|
100
|
+
createElementVNode("span", _hoisted_4, [renderSlot(_ctx.$slots, "item", {
|
|
101
|
+
item,
|
|
102
|
+
highlighted: item.key === current.value,
|
|
103
|
+
checked: Boolean(item.checked)
|
|
104
|
+
}, () => [createElementVNode("span", _hoisted_5, toDisplayString(item.label), 1), item.hint ? (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString(item.hint), 1)) : createCommentVNode("", true)])]),
|
|
105
|
+
item.shortcut ? (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString(item.shortcut), 1)) : createCommentVNode("", true),
|
|
106
|
+
unref(hasContextMenuChildren)(item) ? (openBlock(), createBlock(RsIcon_default, {
|
|
107
|
+
key: 1,
|
|
108
|
+
name: "chevron-right",
|
|
109
|
+
size: unref(14),
|
|
110
|
+
class: "rs-context-menu__arrow"
|
|
111
|
+
}, null, 8, ["size"])) : createCommentVNode("", true)
|
|
78
112
|
]),
|
|
79
113
|
_: 2
|
|
80
|
-
},
|
|
114
|
+
}, 1064, [
|
|
115
|
+
"id",
|
|
116
|
+
"type",
|
|
117
|
+
"href",
|
|
118
|
+
"target",
|
|
119
|
+
"rel",
|
|
81
120
|
"class",
|
|
82
|
-
"
|
|
83
|
-
"
|
|
121
|
+
"role",
|
|
122
|
+
"tabindex",
|
|
123
|
+
"data-ctx-key",
|
|
124
|
+
"data-highlighted",
|
|
125
|
+
"data-state",
|
|
126
|
+
"data-disabled",
|
|
127
|
+
"aria-disabled",
|
|
128
|
+
"aria-checked",
|
|
129
|
+
"aria-haspopup",
|
|
130
|
+
"aria-expanded",
|
|
131
|
+
"onClick",
|
|
132
|
+
"onPointerenter"
|
|
84
133
|
]))], 64);
|
|
85
134
|
}), 128);
|
|
86
135
|
};
|
|
@@ -1,21 +1,107 @@
|
|
|
1
|
+
import { type RsOverlayPopupSize, type RsOverlayViewport } from '../../_shared/src/overlay-utils';
|
|
1
2
|
/** 右键菜单图标尺寸(与 Dropdown / Menu 一致) */
|
|
2
3
|
export declare const RS_CONTEXT_MENU_ICON_SIZE = 16;
|
|
3
4
|
export declare const RS_CONTEXT_MENU_ARROW_SIZE = 14;
|
|
5
|
+
/** 菜单项种类。缺省是普通命令。separator 仍用布尔字段,兼容旧数据。 */
|
|
6
|
+
export type RsContextMenuItemType = 'item' | 'checkbox' | 'radio';
|
|
4
7
|
/** 右键菜单项定义 */
|
|
5
8
|
export interface RsContextMenuItem {
|
|
6
9
|
/** 唯一标识,选中时回传 */
|
|
7
10
|
key: string;
|
|
8
11
|
label: string;
|
|
9
12
|
icon?: string;
|
|
13
|
+
/** 次要说明,不参与选中 */
|
|
14
|
+
hint?: string;
|
|
10
15
|
disabled?: boolean;
|
|
11
16
|
/** 危险操作样式 */
|
|
12
17
|
danger?: boolean;
|
|
13
|
-
/** 为 true
|
|
18
|
+
/** 为 true 时渲染分隔线。带 label 时是分组标题,仍不可选。 */
|
|
14
19
|
separator?: boolean;
|
|
15
|
-
/**
|
|
20
|
+
/** 子菜单项。父级只负责展开,不发 select。 */
|
|
16
21
|
children?: RsContextMenuItem[];
|
|
17
22
|
/** 键盘快捷键提示(仅展示,不绑定事件),如 "⌘K"、"⌃C" */
|
|
18
23
|
shortcut?: string;
|
|
24
|
+
/** checkbox / radio 用 menuitemcheckbox / menuitemradio。缺省是普通命令。 */
|
|
25
|
+
type?: RsContextMenuItemType;
|
|
26
|
+
/** checkbox / radio 的勾选态,由调用方持有 */
|
|
27
|
+
checked?: boolean;
|
|
28
|
+
/** 同一 radio 组的名字,只给无障碍和样式分组,不代管状态 */
|
|
29
|
+
group?: string;
|
|
30
|
+
/** 叶子可写成链接。外链 target=_blank 会补 noopener noreferrer。 */
|
|
31
|
+
href?: string;
|
|
32
|
+
target?: string;
|
|
33
|
+
rel?: string;
|
|
34
|
+
/**
|
|
35
|
+
* 选中后是否关闭。
|
|
36
|
+
* 缺省时普通项跟 hideOnSelect,checkbox / radio 保持打开。
|
|
37
|
+
*/
|
|
38
|
+
closeOnSelect?: boolean;
|
|
19
39
|
}
|
|
20
|
-
|
|
40
|
+
export type RsContextMenuGetPopupContainer = (trigger?: HTMLElement) => HTMLElement | null | undefined;
|
|
41
|
+
export interface RsContextMenuPoint {
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
}
|
|
45
|
+
export interface RsContextMenuExpose {
|
|
46
|
+
/** 在指针处或触发器下沿打开。禁用或没有可点项时无操作。 */
|
|
47
|
+
open: (point?: RsContextMenuPoint) => void;
|
|
48
|
+
close: () => void;
|
|
49
|
+
}
|
|
50
|
+
export interface RsContextMenuItemSlot {
|
|
51
|
+
item: RsContextMenuItem;
|
|
52
|
+
highlighted: boolean;
|
|
53
|
+
checked: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface RsContextMenuPointBox {
|
|
56
|
+
top: number;
|
|
57
|
+
left: number;
|
|
58
|
+
maxHeight: number;
|
|
59
|
+
originX: 'left' | 'right';
|
|
60
|
+
originY: 'top' | 'bottom';
|
|
61
|
+
}
|
|
62
|
+
export interface RsContextMenuLayerState {
|
|
63
|
+
id: string;
|
|
64
|
+
items: RsContextMenuItem[];
|
|
65
|
+
parentKey: string | null;
|
|
66
|
+
}
|
|
67
|
+
/** 同时只留一个右键菜单,避免多层监听叠在 document 上。 */
|
|
68
|
+
export declare function claimContextMenu(close: () => void): void;
|
|
69
|
+
export declare function releaseContextMenu(close: () => void): void;
|
|
70
|
+
export declare function isContextMenuSeparator(item: RsContextMenuItem): boolean;
|
|
71
|
+
export declare function hasContextMenuChildren(item: RsContextMenuItem): boolean;
|
|
72
|
+
export declare function isContextMenuCheck(item: RsContextMenuItem): boolean;
|
|
73
|
+
export declare function contextMenuItemRole(item: RsContextMenuItem): 'menuitem' | 'menuitemcheckbox' | 'menuitemradio';
|
|
74
|
+
/** 是否存在可操作项(排除纯分隔线与分组标题),用于避免空菜单气泡 */
|
|
21
75
|
export declare function hasActionableContextMenuItems(items: RsContextMenuItem[] | undefined): boolean;
|
|
76
|
+
/** 当前层可聚焦的项(不含分隔线与分组标题)。 */
|
|
77
|
+
export declare function listContextMenuLayerItems(items: readonly RsContextMenuItem[]): RsContextMenuItem[];
|
|
78
|
+
export declare function firstEnabledContextMenuKey(items: readonly RsContextMenuItem[]): string;
|
|
79
|
+
export declare function lastEnabledContextMenuKey(items: readonly RsContextMenuItem[]): string;
|
|
80
|
+
export declare function stepContextMenuKey(items: readonly RsContextMenuItem[], current: string, delta: 1 | -1): string;
|
|
81
|
+
export declare function findContextMenuItem(items: readonly RsContextMenuItem[], key: string): RsContextMenuItem | undefined;
|
|
82
|
+
/** 根层 + 已展开路径上的子层。路径中断就停,不渲染未打开的分支。 */
|
|
83
|
+
export declare function resolveContextMenuLayers(items: readonly RsContextMenuItem[], path: readonly string[]): RsContextMenuLayerState[];
|
|
84
|
+
export declare function shouldCloseContextMenuOnSelect(item: RsContextMenuItem, hideOnSelect: boolean): boolean;
|
|
85
|
+
export declare function resolveContextMenuKeys(rtl: boolean): {
|
|
86
|
+
next: string;
|
|
87
|
+
prev: string;
|
|
88
|
+
openSub: string;
|
|
89
|
+
closeSub: string;
|
|
90
|
+
};
|
|
91
|
+
export declare function matchContextMenuTypeahead(items: readonly RsContextMenuItem[], query: string, fromIndex?: number): number;
|
|
92
|
+
export declare function escapeContextMenuSelector(value: string): string;
|
|
93
|
+
export declare function resolveContextMenuPortalTarget(getPopupContainer: RsContextMenuGetPopupContainer | undefined, trigger?: HTMLElement | null): string | HTMLElement;
|
|
94
|
+
export declare function resolveContextMenuRel(item: RsContextMenuItem): string | undefined;
|
|
95
|
+
export declare function resolveContextMenuElement(value: unknown): HTMLElement | null;
|
|
96
|
+
/**
|
|
97
|
+
* 菜单从指针处展开:默认向右下,贴边翻到左或上,并给出可滚动的最大高度。
|
|
98
|
+
* RTL 优先向左。padding 把菜单夹进视口。
|
|
99
|
+
*/
|
|
100
|
+
export declare function placeContextMenuPoint(point: RsContextMenuPoint, popup: RsOverlayPopupSize, viewport: RsOverlayViewport, padding?: number, rtl?: boolean): RsContextMenuPointBox;
|
|
101
|
+
/** 子菜单贴父项侧面。视口不够时翻到另一侧,并限制可滚动高度。 */
|
|
102
|
+
export declare function placeContextMenuSubmenu(anchor: {
|
|
103
|
+
top: number;
|
|
104
|
+
left: number;
|
|
105
|
+
width: number;
|
|
106
|
+
height: number;
|
|
107
|
+
}, popup: RsOverlayPopupSize, viewport: RsOverlayViewport, rtl: boolean, gap?: number): RsContextMenuPointBox;
|
|
@@ -1,8 +1,173 @@
|
|
|
1
|
+
import { placeSidePopup, stepEnabledIndex } from "../../_shared/src/overlay-utils.js";
|
|
1
2
|
//#region src/components/context-menu/src/context-menu-utils.ts
|
|
2
|
-
|
|
3
|
+
var closers = /* @__PURE__ */ new Set();
|
|
4
|
+
/** 同时只留一个右键菜单,避免多层监听叠在 document 上。 */
|
|
5
|
+
function claimContextMenu(close) {
|
|
6
|
+
for (const other of [...closers]) if (other !== close) other();
|
|
7
|
+
closers.add(close);
|
|
8
|
+
}
|
|
9
|
+
function releaseContextMenu(close) {
|
|
10
|
+
closers.delete(close);
|
|
11
|
+
}
|
|
12
|
+
function isContextMenuSeparator(item) {
|
|
13
|
+
return item.separator === true;
|
|
14
|
+
}
|
|
15
|
+
function hasContextMenuChildren(item) {
|
|
16
|
+
return Boolean(item.children?.length);
|
|
17
|
+
}
|
|
18
|
+
function isContextMenuCheck(item) {
|
|
19
|
+
return item.type === "checkbox" || item.type === "radio";
|
|
20
|
+
}
|
|
21
|
+
function contextMenuItemRole(item) {
|
|
22
|
+
if (item.type === "checkbox") return "menuitemcheckbox";
|
|
23
|
+
if (item.type === "radio") return "menuitemradio";
|
|
24
|
+
return "menuitem";
|
|
25
|
+
}
|
|
26
|
+
/** 是否存在可操作项(排除纯分隔线与分组标题),用于避免空菜单气泡 */
|
|
3
27
|
function hasActionableContextMenuItems(items) {
|
|
4
28
|
if (!items?.length) return false;
|
|
5
|
-
return items.some((item) => !item
|
|
29
|
+
return items.some((item) => !isContextMenuSeparator(item));
|
|
30
|
+
}
|
|
31
|
+
/** 当前层可聚焦的项(不含分隔线与分组标题)。 */
|
|
32
|
+
function listContextMenuLayerItems(items) {
|
|
33
|
+
return items.filter((item) => !isContextMenuSeparator(item));
|
|
34
|
+
}
|
|
35
|
+
function firstEnabledContextMenuKey(items) {
|
|
36
|
+
return listContextMenuLayerItems(items).find((item) => !item.disabled)?.key ?? "";
|
|
37
|
+
}
|
|
38
|
+
function lastEnabledContextMenuKey(items) {
|
|
39
|
+
const list = listContextMenuLayerItems(items);
|
|
40
|
+
for (let index = list.length - 1; index >= 0; index -= 1) if (!list[index]?.disabled) return list[index].key;
|
|
41
|
+
return "";
|
|
42
|
+
}
|
|
43
|
+
function stepContextMenuKey(items, current, delta) {
|
|
44
|
+
const list = listContextMenuLayerItems(items);
|
|
45
|
+
if (!list.length) return "";
|
|
46
|
+
const index = list.findIndex((item) => item.key === current);
|
|
47
|
+
let start = index;
|
|
48
|
+
if (index < 0) start = delta === 1 ? -1 : 0;
|
|
49
|
+
return list[stepEnabledIndex(list, start, delta)]?.key ?? "";
|
|
50
|
+
}
|
|
51
|
+
function findContextMenuItem(items, key) {
|
|
52
|
+
for (const item of items) {
|
|
53
|
+
if (item.key === key) return item;
|
|
54
|
+
if (item.children?.length) {
|
|
55
|
+
const found = findContextMenuItem(item.children, key);
|
|
56
|
+
if (found) return found;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** 根层 + 已展开路径上的子层。路径中断就停,不渲染未打开的分支。 */
|
|
61
|
+
function resolveContextMenuLayers(items, path) {
|
|
62
|
+
const layers = [{
|
|
63
|
+
id: "root",
|
|
64
|
+
items: [...items],
|
|
65
|
+
parentKey: null
|
|
66
|
+
}];
|
|
67
|
+
let current = items;
|
|
68
|
+
for (const key of path) {
|
|
69
|
+
const parent = current.find((item) => item.key === key && hasContextMenuChildren(item));
|
|
70
|
+
if (!parent?.children?.length) break;
|
|
71
|
+
layers.push({
|
|
72
|
+
id: key,
|
|
73
|
+
items: parent.children,
|
|
74
|
+
parentKey: key
|
|
75
|
+
});
|
|
76
|
+
current = parent.children;
|
|
77
|
+
}
|
|
78
|
+
return layers;
|
|
79
|
+
}
|
|
80
|
+
function shouldCloseContextMenuOnSelect(item, hideOnSelect) {
|
|
81
|
+
if (item.closeOnSelect != null) return item.closeOnSelect;
|
|
82
|
+
if (isContextMenuCheck(item)) return false;
|
|
83
|
+
return hideOnSelect;
|
|
84
|
+
}
|
|
85
|
+
function resolveContextMenuKeys(rtl) {
|
|
86
|
+
return {
|
|
87
|
+
next: "ArrowDown",
|
|
88
|
+
prev: "ArrowUp",
|
|
89
|
+
openSub: rtl ? "ArrowLeft" : "ArrowRight",
|
|
90
|
+
closeSub: rtl ? "ArrowRight" : "ArrowLeft"
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function matchContextMenuTypeahead(items, query, fromIndex = -1) {
|
|
94
|
+
const needle = query.trim().toLowerCase();
|
|
95
|
+
if (!needle || !items.length) return -1;
|
|
96
|
+
const list = listContextMenuLayerItems(items);
|
|
97
|
+
const start = Math.max(-1, fromIndex);
|
|
98
|
+
for (let step = 1; step <= list.length; step += 1) {
|
|
99
|
+
const index = (start + step) % list.length;
|
|
100
|
+
const item = list[index];
|
|
101
|
+
if (!item || item.disabled) continue;
|
|
102
|
+
if (item.label.toLowerCase().startsWith(needle)) return index;
|
|
103
|
+
}
|
|
104
|
+
return -1;
|
|
105
|
+
}
|
|
106
|
+
function escapeContextMenuSelector(value) {
|
|
107
|
+
if (typeof CSS !== "undefined" && typeof CSS.escape === "function") return CSS.escape(value);
|
|
108
|
+
return value.replace(/["\\]/g, "\\$&");
|
|
109
|
+
}
|
|
110
|
+
function resolveContextMenuPortalTarget(getPopupContainer, trigger) {
|
|
111
|
+
if (typeof document === "undefined") return "body";
|
|
112
|
+
if (!getPopupContainer) return "body";
|
|
113
|
+
return getPopupContainer(trigger ?? void 0) ?? "body";
|
|
114
|
+
}
|
|
115
|
+
function resolveContextMenuRel(item) {
|
|
116
|
+
if (!item.href) return void 0;
|
|
117
|
+
if (item.rel) return item.rel;
|
|
118
|
+
if (item.target === "_blank") return "noopener noreferrer";
|
|
119
|
+
}
|
|
120
|
+
function resolveContextMenuElement(value) {
|
|
121
|
+
if (typeof HTMLElement !== "undefined" && value instanceof HTMLElement) return value;
|
|
122
|
+
if (value && typeof value === "object" && "$el" in value) {
|
|
123
|
+
const root = value.$el;
|
|
124
|
+
if (typeof HTMLElement !== "undefined" && root instanceof HTMLElement) return root;
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 菜单从指针处展开:默认向右下,贴边翻到左或上,并给出可滚动的最大高度。
|
|
130
|
+
* RTL 优先向左。padding 把菜单夹进视口。
|
|
131
|
+
*/
|
|
132
|
+
function placeContextMenuPoint(point, popup, viewport, padding = 8, rtl = false) {
|
|
133
|
+
const width = Math.min(Math.max(0, popup.width), Math.max(0, viewport.width - padding * 2));
|
|
134
|
+
const spaceBelow = Math.max(0, viewport.height - point.y - padding);
|
|
135
|
+
const spaceAbove = Math.max(0, point.y - padding);
|
|
136
|
+
const openUp = popup.height > spaceBelow && spaceAbove > spaceBelow;
|
|
137
|
+
const maxHeight = Math.max(0, openUp ? spaceAbove : spaceBelow);
|
|
138
|
+
const usedHeight = Math.min(Math.max(0, popup.height), maxHeight > 0 ? maxHeight : popup.height);
|
|
139
|
+
let top = openUp ? point.y - usedHeight : point.y;
|
|
140
|
+
const maxTop = Math.max(padding, viewport.height - padding - Math.max(0, usedHeight));
|
|
141
|
+
top = Math.min(Math.max(padding, top), maxTop);
|
|
142
|
+
const spaceRight = Math.max(0, viewport.width - point.x - padding);
|
|
143
|
+
const spaceLeft = Math.max(0, point.x - padding);
|
|
144
|
+
const openLeft = rtl ? spaceLeft >= width || spaceLeft >= spaceRight : spaceRight < width && spaceLeft > spaceRight;
|
|
145
|
+
let left = openLeft ? point.x - width : point.x;
|
|
146
|
+
const maxLeft = Math.max(padding, viewport.width - width - padding);
|
|
147
|
+
left = Math.min(Math.max(padding, left), maxLeft);
|
|
148
|
+
return {
|
|
149
|
+
top,
|
|
150
|
+
left,
|
|
151
|
+
maxHeight: maxHeight > 0 ? maxHeight : Math.max(0, viewport.height - padding * 2),
|
|
152
|
+
originX: openLeft ? "right" : "left",
|
|
153
|
+
originY: openUp ? "bottom" : "top"
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/** 子菜单贴父项侧面。视口不够时翻到另一侧,并限制可滚动高度。 */
|
|
157
|
+
function placeContextMenuSubmenu(anchor, popup, viewport, rtl, gap = 4) {
|
|
158
|
+
const placed = placeSidePopup({
|
|
159
|
+
top: anchor.top,
|
|
160
|
+
left: anchor.left,
|
|
161
|
+
height: anchor.height,
|
|
162
|
+
width: anchor.width
|
|
163
|
+
}, popup, viewport, gap, rtl ? "left" : "right");
|
|
164
|
+
return {
|
|
165
|
+
top: placed.top,
|
|
166
|
+
left: placed.left,
|
|
167
|
+
maxHeight: Math.max(0, viewport.height - placed.top - gap),
|
|
168
|
+
originX: placed.placement === "left" ? "right" : "left",
|
|
169
|
+
originY: "top"
|
|
170
|
+
};
|
|
6
171
|
}
|
|
7
172
|
//#endregion
|
|
8
|
-
export { hasActionableContextMenuItems };
|
|
173
|
+
export { claimContextMenu, contextMenuItemRole, escapeContextMenuSelector, findContextMenuItem, firstEnabledContextMenuKey, hasActionableContextMenuItems, hasContextMenuChildren, isContextMenuCheck, isContextMenuSeparator, lastEnabledContextMenuKey, listContextMenuLayerItems, matchContextMenuTypeahead, placeContextMenuPoint, placeContextMenuSubmenu, releaseContextMenu, resolveContextMenuElement, resolveContextMenuKeys, resolveContextMenuLayers, resolveContextMenuPortalTarget, resolveContextMenuRel, shouldCloseContextMenuOnSelect, stepContextMenuKey };
|
|
@@ -70,16 +70,16 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, RsD
|
|
|
70
70
|
focus: () => any;
|
|
71
71
|
clear: () => any;
|
|
72
72
|
"update:modelValue": (value: RsDatePickerModelValue) => any;
|
|
73
|
-
"update:open": (value: boolean) => any;
|
|
74
73
|
openChange: (open: boolean) => any;
|
|
74
|
+
"update:open": (value: boolean) => any;
|
|
75
75
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
76
76
|
onChange?: ((value: RsDatePickerModelValue) => any) | undefined;
|
|
77
77
|
onBlur?: (() => any) | undefined;
|
|
78
78
|
onFocus?: (() => any) | undefined;
|
|
79
79
|
onClear?: (() => any) | undefined;
|
|
80
80
|
"onUpdate:modelValue"?: ((value: RsDatePickerModelValue) => any) | undefined;
|
|
81
|
-
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
82
81
|
onOpenChange?: ((open: boolean) => any) | undefined;
|
|
82
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
83
83
|
}>, {
|
|
84
84
|
required: boolean;
|
|
85
85
|
disabled: boolean;
|
|
@@ -52,16 +52,16 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, RsD
|
|
|
52
52
|
focus: () => any;
|
|
53
53
|
clear: () => any;
|
|
54
54
|
"update:modelValue": (value: RsDatePickerModelValue) => any;
|
|
55
|
-
"update:open": (value: boolean) => any;
|
|
56
55
|
openChange: (open: boolean) => any;
|
|
56
|
+
"update:open": (value: boolean) => any;
|
|
57
57
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
58
58
|
onChange?: ((value: RsDatePickerModelValue) => any) | undefined;
|
|
59
59
|
onBlur?: (() => any) | undefined;
|
|
60
60
|
onFocus?: (() => any) | undefined;
|
|
61
61
|
onClear?: (() => any) | undefined;
|
|
62
62
|
"onUpdate:modelValue"?: ((value: RsDatePickerModelValue) => any) | undefined;
|
|
63
|
-
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
64
63
|
onOpenChange?: ((open: boolean) => any) | undefined;
|
|
64
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
65
65
|
}>, {
|
|
66
66
|
required: boolean;
|
|
67
67
|
disabled: boolean;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { default as RsDescriptions } from './src/RsDescriptions.js';
|
|
2
2
|
export { default as RsDescriptionsItem } from './src/RsDescriptionsItem.js';
|
|
3
|
-
export type { RsDescriptionsItem as RsDescriptionsItemData, RsDescriptionsLabelPlacement, RsDescriptionsSize, } from './src/descriptions-utils';
|
|
3
|
+
export type { RsDescriptionsItem as RsDescriptionsItemData, RsDescriptionsLabelAlign, RsDescriptionsLabelPlacement, RsDescriptionsSize, } from './src/descriptions-utils';
|
|
@@ -2,18 +2,34 @@
|
|
|
2
2
|
.rs-descriptions {
|
|
3
3
|
display: flex;
|
|
4
4
|
flex-direction: column;
|
|
5
|
-
gap: var(--rs-space-sm);
|
|
6
|
-
color: var(--rs-text);
|
|
5
|
+
gap: var(--rs-descriptions-gap, var(--rs-space-sm));
|
|
6
|
+
color: var(--rs-descriptions-value-fg, var(--rs-text-primary));
|
|
7
7
|
}
|
|
8
8
|
.rs-descriptions__header {
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: var(--rs-space-md);
|
|
12
|
+
}
|
|
13
|
+
.rs-descriptions__title {
|
|
14
|
+
flex: 1;
|
|
15
|
+
min-width: 0;
|
|
16
|
+
color: var(--rs-descriptions-title, var(--rs-text-primary));
|
|
9
17
|
font-size: var(--rs-font-size-base);
|
|
10
18
|
font-weight: var(--rs-font-weight-semibold);
|
|
11
19
|
line-height: var(--rs-line-height-tight);
|
|
12
20
|
}
|
|
21
|
+
.rs-descriptions__extra {
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-wrap: wrap;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: var(--rs-space-sm);
|
|
26
|
+
margin-inline-start: auto;
|
|
27
|
+
}
|
|
13
28
|
.rs-descriptions__body {
|
|
14
29
|
display: grid;
|
|
15
30
|
grid-template-columns: repeat(var(--rs-descriptions-columns, 3), minmax(0, 1fr));
|
|
16
31
|
gap: 0;
|
|
32
|
+
margin: 0;
|
|
17
33
|
}
|
|
18
34
|
.rs-descriptions--ssm .rs-descriptions__label,
|
|
19
35
|
.rs-descriptions--ssm .rs-descriptions__value {
|
|
@@ -39,27 +55,40 @@
|
|
|
39
55
|
display: grid;
|
|
40
56
|
min-width: 0;
|
|
41
57
|
}
|
|
42
|
-
|
|
43
|
-
/* 固定标签列宽,多列时左右项标签竖向对齐(百分比会随列宽漂移) */
|
|
44
58
|
.rs-descriptions--left .rs-descriptions__item {
|
|
45
59
|
grid-template-columns: var(--rs-descriptions-label-width, 7.5rem) minmax(0, 1fr);
|
|
46
60
|
}
|
|
47
61
|
.rs-descriptions--top .rs-descriptions__item {
|
|
48
|
-
grid-template-columns: 1fr;
|
|
62
|
+
grid-template-columns: minmax(0, 1fr);
|
|
63
|
+
}
|
|
64
|
+
.rs-descriptions__label,
|
|
65
|
+
.rs-descriptions__value {
|
|
66
|
+
margin: 0;
|
|
67
|
+
min-width: 0;
|
|
49
68
|
}
|
|
50
69
|
.rs-descriptions__label {
|
|
51
|
-
color: var(--rs-descriptions-label-fg, var(--rs-
|
|
70
|
+
color: var(--rs-descriptions-label-fg, var(--rs-text-secondary));
|
|
52
71
|
font-weight: var(--rs-font-weight-medium);
|
|
72
|
+
text-align: start;
|
|
53
73
|
word-break: break-word;
|
|
54
74
|
}
|
|
75
|
+
.rs-descriptions--align-center .rs-descriptions__label {
|
|
76
|
+
text-align: center;
|
|
77
|
+
}
|
|
78
|
+
.rs-descriptions--align-end .rs-descriptions__label {
|
|
79
|
+
text-align: end;
|
|
80
|
+
}
|
|
81
|
+
.rs-descriptions__colon {
|
|
82
|
+
padding-inline-start: 0.12em;
|
|
83
|
+
}
|
|
55
84
|
.rs-descriptions__value {
|
|
56
|
-
color: var(--rs-descriptions-value-fg, var(--rs-text));
|
|
85
|
+
color: var(--rs-descriptions-value-fg, var(--rs-text-primary));
|
|
57
86
|
word-break: break-word;
|
|
58
87
|
}
|
|
59
88
|
|
|
60
89
|
/*
|
|
61
|
-
* 表格外框:四边完整描边 +
|
|
62
|
-
*
|
|
90
|
+
* 表格外框:四边完整描边 + 圆角;单元格行末 / 块末内部分隔。
|
|
91
|
+
* -1px 外边距压到外框下,避免双边框加粗。overflow 只裁圆角,单元格有内边距。
|
|
63
92
|
*/
|
|
64
93
|
.rs-descriptions--bordered .rs-descriptions__body {
|
|
65
94
|
border: 1px solid var(--rs-descriptions-border, var(--rs-border));
|
|
@@ -79,8 +108,6 @@
|
|
|
79
108
|
.rs-descriptions--bordered .rs-descriptions__label {
|
|
80
109
|
background: var(--rs-descriptions-label-bg);
|
|
81
110
|
}
|
|
82
|
-
|
|
83
|
-
/* 左标签:标签/值之间竖线,形成表格单元格感 */
|
|
84
111
|
.rs-descriptions--bordered.rs-descriptions--left .rs-descriptions__label {
|
|
85
112
|
border-inline-end: 1px solid var(--rs-descriptions-border, var(--rs-border));
|
|
86
113
|
}
|