niuma-ui 2.0.4 → 2.0.9
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 +58 -0
- 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/_shared/src/reka.js +2 -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.impl.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/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/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 +34 -20
- 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 +460 -797
- package/dist/theme/brand.example.css +2 -1
- package/dist/vite-plugins/niuma-ui-host.js +1 -1
- package/package.json +2 -3
|
@@ -8,23 +8,33 @@ var _hoisted_3 = {
|
|
|
8
8
|
key: 0,
|
|
9
9
|
class: "rs-dropdown__item-hint"
|
|
10
10
|
};
|
|
11
|
+
var _hoisted_4 = {
|
|
12
|
+
key: 1,
|
|
13
|
+
class: "rs-dropdown__item-shortcut"
|
|
14
|
+
};
|
|
11
15
|
var RsDropdownItemView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
16
|
+
name: "RsDropdownItemView",
|
|
12
17
|
__name: "RsDropdownItemView",
|
|
13
18
|
props: {
|
|
14
19
|
item: {},
|
|
15
20
|
size: { default: "md" }
|
|
16
21
|
},
|
|
17
22
|
setup(__props) {
|
|
18
|
-
/** 下拉项内容:图标 + 标题 +
|
|
23
|
+
/** 下拉项内容:图标 + 标题 + 可选说明 / 快捷键,密度由 size 控制。 */
|
|
19
24
|
const props = __props;
|
|
20
25
|
const iconSize = computed(() => RS_COMPONENT_SIZE_ICON_PX[props.size]);
|
|
21
26
|
return (_ctx, _cache) => {
|
|
22
|
-
return openBlock(), createElementBlock(Fragment, null, [
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
return openBlock(), createElementBlock(Fragment, null, [
|
|
28
|
+
__props.item.icon ? (openBlock(), createBlock(RsIcon_default, {
|
|
29
|
+
key: 0,
|
|
30
|
+
name: __props.item.icon,
|
|
31
|
+
size: iconSize.value,
|
|
32
|
+
class: "rs-dropdown__item-icon",
|
|
33
|
+
"aria-hidden": "true"
|
|
34
|
+
}, null, 8, ["name", "size"])) : createCommentVNode("", true),
|
|
35
|
+
createElementVNode("span", _hoisted_1, [createElementVNode("span", _hoisted_2, toDisplayString(__props.item.label), 1), __props.item.hint ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(__props.item.hint), 1)) : createCommentVNode("", true)]),
|
|
36
|
+
__props.item.shortcut ? (openBlock(), createElementBlock("kbd", _hoisted_4, toDisplayString(__props.item.shortcut), 1)) : createCommentVNode("", true)
|
|
37
|
+
], 64);
|
|
28
38
|
};
|
|
29
39
|
}
|
|
30
40
|
});
|
|
@@ -1,18 +1,47 @@
|
|
|
1
|
-
import { type RsDropdownItems } from './dropdown-utils';
|
|
2
|
-
import type
|
|
1
|
+
import { type RsDropdownItem, type RsDropdownItems } from './dropdown-utils';
|
|
2
|
+
import { type RsComponentSize } from '../../../theme/types';
|
|
3
3
|
type __VLS_Props = {
|
|
4
4
|
items: RsDropdownItems;
|
|
5
5
|
/** true:单选互斥;false:操作项 */
|
|
6
6
|
selectable?: boolean;
|
|
7
7
|
size?: RsComponentSize;
|
|
8
|
+
selectedValue?: string;
|
|
9
|
+
highlightedValue?: string;
|
|
10
|
+
openSubmenuValue?: string;
|
|
8
11
|
};
|
|
9
|
-
declare
|
|
12
|
+
declare var __VLS_10: {
|
|
13
|
+
item: RsDropdownItem;
|
|
14
|
+
selected: boolean;
|
|
15
|
+
highlighted: boolean;
|
|
16
|
+
}, __VLS_31: {
|
|
17
|
+
item: RsDropdownItem;
|
|
18
|
+
selected: boolean;
|
|
19
|
+
highlighted: boolean;
|
|
20
|
+
};
|
|
21
|
+
type __VLS_Slots = {} & {
|
|
22
|
+
item?: (props: typeof __VLS_10) => any;
|
|
23
|
+
} & {
|
|
24
|
+
item?: (props: typeof __VLS_31) => any;
|
|
25
|
+
};
|
|
26
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
27
|
select: (value: string) => any;
|
|
28
|
+
highlight: (value: string) => any;
|
|
29
|
+
openSubmenu: (value: string) => any;
|
|
30
|
+
itemEnter: (item: RsDropdownItem) => any;
|
|
11
31
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
12
32
|
onSelect?: ((value: string) => any) | undefined;
|
|
33
|
+
onHighlight?: ((value: string) => any) | undefined;
|
|
34
|
+
onOpenSubmenu?: ((value: string) => any) | undefined;
|
|
35
|
+
onItemEnter?: ((item: RsDropdownItem) => any) | undefined;
|
|
13
36
|
}>, {
|
|
14
37
|
size: RsComponentSize;
|
|
15
38
|
selectable: boolean;
|
|
16
39
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
40
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
17
41
|
declare const _default: typeof __VLS_export;
|
|
18
42
|
export default _default;
|
|
43
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
44
|
+
new (): {
|
|
45
|
+
$slots: S;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { RS_COMPONENT_SIZE_ICON_PX } from "../../../theme/types.js";
|
|
2
|
+
import RsIcon_default from "../../icon/src/RsIcon.js";
|
|
3
|
+
import { hasDropdownChildren, isDropdownDivider, isDropdownItemGroup, resolveDropdownExternalRel } from "./dropdown-utils.js";
|
|
3
4
|
import RsDropdownItemView_default from "./RsDropdownItemView.js";
|
|
4
|
-
import { Fragment, createBlock, createElementBlock,
|
|
5
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, withCtx } from "vue";
|
|
5
6
|
//#region src/components/dropdown/src/RsDropdownItems.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
+
var _hoisted_1 = ["aria-label"];
|
|
8
|
+
var _hoisted_2 = {
|
|
9
|
+
class: "rs-dropdown__group-label",
|
|
10
|
+
"aria-hidden": "true"
|
|
11
|
+
};
|
|
12
|
+
var _hoisted_3 = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "rs-dropdown__divider"
|
|
15
|
+
};
|
|
6
16
|
var RsDropdownItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
17
|
+
name: "RsDropdownItems",
|
|
7
18
|
__name: "RsDropdownItems",
|
|
8
19
|
props: {
|
|
9
20
|
items: {},
|
|
@@ -11,75 +22,176 @@ var RsDropdownItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
11
22
|
type: Boolean,
|
|
12
23
|
default: false
|
|
13
24
|
},
|
|
14
|
-
size: { default: "md" }
|
|
25
|
+
size: { default: "md" },
|
|
26
|
+
selectedValue: {},
|
|
27
|
+
highlightedValue: {},
|
|
28
|
+
openSubmenuValue: {}
|
|
15
29
|
},
|
|
16
|
-
emits: [
|
|
30
|
+
emits: [
|
|
31
|
+
"select",
|
|
32
|
+
"highlight",
|
|
33
|
+
"openSubmenu",
|
|
34
|
+
"itemEnter"
|
|
35
|
+
],
|
|
17
36
|
setup(__props, { emit: __emit }) {
|
|
37
|
+
const props = __props;
|
|
18
38
|
const emit = __emit;
|
|
19
|
-
|
|
20
|
-
|
|
39
|
+
const chevronSize = computed(() => RS_COMPONENT_SIZE_ICON_PX[props.size]);
|
|
40
|
+
function itemRole(item) {
|
|
41
|
+
if (props.selectable && !hasDropdownChildren(item)) return "menuitemradio";
|
|
42
|
+
return "menuitem";
|
|
43
|
+
}
|
|
44
|
+
function isSelected(item) {
|
|
45
|
+
return props.selectable && item.value === props.selectedValue && !hasDropdownChildren(item);
|
|
46
|
+
}
|
|
47
|
+
function isHighlighted(item) {
|
|
48
|
+
return item.value === props.highlightedValue;
|
|
49
|
+
}
|
|
50
|
+
function onActivate(item, event) {
|
|
51
|
+
if (item.disabled) {
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
emit("highlight", item.value);
|
|
56
|
+
if (hasDropdownChildren(item)) {
|
|
57
|
+
emit("openSubmenu", item.value);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
21
60
|
emit("select", item.value);
|
|
22
61
|
}
|
|
62
|
+
function onEnter(item) {
|
|
63
|
+
if (item.disabled) return;
|
|
64
|
+
emit("itemEnter", item);
|
|
65
|
+
}
|
|
23
66
|
return (_ctx, _cache) => {
|
|
24
67
|
return openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (entry, index) => {
|
|
25
|
-
return openBlock(), createElementBlock(Fragment, { key: index }, [unref(isDropdownItemGroup)(entry) ? (openBlock(),
|
|
26
|
-
key:
|
|
27
|
-
class: "rs-dropdown__group"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
68
|
+
return openBlock(), createElementBlock(Fragment, { key: index }, [unref(isDropdownItemGroup)(entry) ? (openBlock(), createElementBlock("div", {
|
|
69
|
+
key: 0,
|
|
70
|
+
class: "rs-dropdown__group",
|
|
71
|
+
role: "group",
|
|
72
|
+
"aria-label": entry.label
|
|
73
|
+
}, [createElementVNode("span", _hoisted_2, toDisplayString(entry.label), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(entry.options, (item) => {
|
|
74
|
+
return openBlock(), createElementBlock(Fragment, { key: item.value }, [unref(isDropdownDivider)(item) ? (openBlock(), createElementBlock("hr", _hoisted_3)) : (openBlock(), createBlock(resolveDynamicComponent(item.href && !unref(hasDropdownChildren)(item) ? "a" : "button"), {
|
|
75
|
+
key: 1,
|
|
76
|
+
class: normalizeClass(["rs-dropdown__item", {
|
|
77
|
+
"rs-dropdown__item--danger": item.tone === "danger",
|
|
78
|
+
"rs-dropdown__item--submenu": unref(hasDropdownChildren)(item)
|
|
79
|
+
}]),
|
|
80
|
+
"data-dropdown-value": item.value,
|
|
81
|
+
type: item.href && !unref(hasDropdownChildren)(item) ? void 0 : "button",
|
|
82
|
+
href: item.href && !unref(hasDropdownChildren)(item) && !item.disabled ? item.href : void 0,
|
|
83
|
+
target: item.href && !unref(hasDropdownChildren)(item) ? item.target : void 0,
|
|
84
|
+
rel: item.href && !unref(hasDropdownChildren)(item) ? unref(resolveDropdownExternalRel)(item) : void 0,
|
|
85
|
+
role: itemRole(item),
|
|
86
|
+
disabled: item.href ? void 0 : item.disabled,
|
|
87
|
+
"aria-disabled": item.disabled ? "true" : void 0,
|
|
88
|
+
"aria-checked": itemRole(item) === "menuitemradio" ? isSelected(item) : void 0,
|
|
89
|
+
"aria-haspopup": unref(hasDropdownChildren)(item) ? "menu" : void 0,
|
|
90
|
+
"aria-expanded": unref(hasDropdownChildren)(item) ? item.value === __props.openSubmenuValue : void 0,
|
|
91
|
+
tabindex: isHighlighted(item) ? 0 : -1,
|
|
92
|
+
"data-state": isSelected(item) ? "checked" : void 0,
|
|
93
|
+
"data-highlighted": isHighlighted(item) ? "" : void 0,
|
|
94
|
+
"data-disabled": item.disabled ? "" : void 0,
|
|
95
|
+
onClick: ($event) => onActivate(item, $event),
|
|
96
|
+
onMouseenter: ($event) => onEnter(item)
|
|
97
|
+
}, {
|
|
98
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "item", mergeProps({ ref_for: true }, {
|
|
99
|
+
item,
|
|
100
|
+
selected: isSelected(item),
|
|
101
|
+
highlighted: isHighlighted(item)
|
|
102
|
+
}), () => [createVNode(RsDropdownItemView_default, {
|
|
103
|
+
item,
|
|
104
|
+
size: __props.size
|
|
105
|
+
}, null, 8, ["item", "size"])]), unref(hasDropdownChildren)(item) ? (openBlock(), createBlock(RsIcon_default, {
|
|
106
|
+
key: 0,
|
|
107
|
+
name: "chevron-right",
|
|
108
|
+
size: chevronSize.value,
|
|
109
|
+
class: "rs-dropdown__item-chevron",
|
|
110
|
+
"aria-hidden": "true"
|
|
111
|
+
}, null, 8, ["size"])) : createCommentVNode("", true)]),
|
|
31
112
|
_: 2
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
113
|
+
}, 1064, [
|
|
114
|
+
"data-dropdown-value",
|
|
115
|
+
"class",
|
|
116
|
+
"type",
|
|
117
|
+
"href",
|
|
118
|
+
"target",
|
|
119
|
+
"rel",
|
|
120
|
+
"role",
|
|
121
|
+
"disabled",
|
|
122
|
+
"aria-disabled",
|
|
123
|
+
"aria-checked",
|
|
124
|
+
"aria-haspopup",
|
|
125
|
+
"aria-expanded",
|
|
126
|
+
"tabindex",
|
|
127
|
+
"data-state",
|
|
128
|
+
"data-highlighted",
|
|
129
|
+
"data-disabled",
|
|
130
|
+
"onClick",
|
|
131
|
+
"onMouseenter"
|
|
132
|
+
]))], 64);
|
|
133
|
+
}), 128))], 8, _hoisted_1)) : unref(isDropdownDivider)(entry) ? (openBlock(), createElementBlock("hr", {
|
|
134
|
+
key: `div-${index}`,
|
|
135
|
+
class: "rs-dropdown__divider"
|
|
136
|
+
})) : (openBlock(), createBlock(resolveDynamicComponent(entry.href && !unref(hasDropdownChildren)(entry) ? "a" : "button"), {
|
|
137
|
+
key: `item-${entry.value}`,
|
|
138
|
+
class: normalizeClass(["rs-dropdown__item", {
|
|
139
|
+
"rs-dropdown__item--danger": entry.tone === "danger",
|
|
140
|
+
"rs-dropdown__item--submenu": unref(hasDropdownChildren)(entry)
|
|
141
|
+
}]),
|
|
142
|
+
"data-dropdown-value": entry.value,
|
|
143
|
+
type: entry.href && !unref(hasDropdownChildren)(entry) ? void 0 : "button",
|
|
144
|
+
href: entry.href && !unref(hasDropdownChildren)(entry) && !entry.disabled ? entry.href : void 0,
|
|
145
|
+
target: entry.href && !unref(hasDropdownChildren)(entry) ? entry.target : void 0,
|
|
146
|
+
rel: entry.href && !unref(hasDropdownChildren)(entry) ? unref(resolveDropdownExternalRel)(entry) : void 0,
|
|
147
|
+
role: itemRole(entry),
|
|
148
|
+
disabled: entry.href ? void 0 : entry.disabled,
|
|
149
|
+
"aria-disabled": entry.disabled ? "true" : void 0,
|
|
150
|
+
"aria-checked": itemRole(entry) === "menuitemradio" ? isSelected(entry) : void 0,
|
|
151
|
+
"aria-haspopup": unref(hasDropdownChildren)(entry) ? "menu" : void 0,
|
|
152
|
+
"aria-expanded": unref(hasDropdownChildren)(entry) ? entry.value === __props.openSubmenuValue : void 0,
|
|
153
|
+
tabindex: isHighlighted(entry) ? 0 : -1,
|
|
154
|
+
"data-state": isSelected(entry) ? "checked" : void 0,
|
|
155
|
+
"data-highlighted": isHighlighted(entry) ? "" : void 0,
|
|
156
|
+
"data-disabled": entry.disabled ? "" : void 0,
|
|
157
|
+
onClick: ($event) => onActivate(entry, $event),
|
|
158
|
+
onMouseenter: ($event) => onEnter(entry)
|
|
65
159
|
}, {
|
|
66
|
-
default: withCtx(() => [
|
|
160
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "item", mergeProps({ ref_for: true }, {
|
|
67
161
|
item: entry,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}, 1032, ["value", "disabled"])) : (openBlock(), createBlock(unref(DropdownMenuItem), {
|
|
72
|
-
key: `action-${entry.value}`,
|
|
73
|
-
disabled: entry.disabled,
|
|
74
|
-
class: "rs-dropdown__item",
|
|
75
|
-
onSelect: ($event) => onActionSelect(entry)
|
|
76
|
-
}, {
|
|
77
|
-
default: withCtx(() => [createVNode(RsDropdownItemView_default, {
|
|
162
|
+
selected: isSelected(entry),
|
|
163
|
+
highlighted: isHighlighted(entry)
|
|
164
|
+
}), () => [createVNode(RsDropdownItemView_default, {
|
|
78
165
|
item: entry,
|
|
79
166
|
size: __props.size
|
|
80
|
-
}, null, 8, ["item", "size"])]),
|
|
167
|
+
}, null, 8, ["item", "size"])]), unref(hasDropdownChildren)(entry) ? (openBlock(), createBlock(RsIcon_default, {
|
|
168
|
+
key: 0,
|
|
169
|
+
name: "chevron-right",
|
|
170
|
+
size: chevronSize.value,
|
|
171
|
+
class: "rs-dropdown__item-chevron",
|
|
172
|
+
"aria-hidden": "true"
|
|
173
|
+
}, null, 8, ["size"])) : createCommentVNode("", true)]),
|
|
81
174
|
_: 2
|
|
82
|
-
},
|
|
175
|
+
}, 1064, [
|
|
176
|
+
"data-dropdown-value",
|
|
177
|
+
"class",
|
|
178
|
+
"type",
|
|
179
|
+
"href",
|
|
180
|
+
"target",
|
|
181
|
+
"rel",
|
|
182
|
+
"role",
|
|
183
|
+
"disabled",
|
|
184
|
+
"aria-disabled",
|
|
185
|
+
"aria-checked",
|
|
186
|
+
"aria-haspopup",
|
|
187
|
+
"aria-expanded",
|
|
188
|
+
"tabindex",
|
|
189
|
+
"data-state",
|
|
190
|
+
"data-highlighted",
|
|
191
|
+
"data-disabled",
|
|
192
|
+
"onClick",
|
|
193
|
+
"onMouseenter"
|
|
194
|
+
]))], 64);
|
|
83
195
|
}), 128);
|
|
84
196
|
};
|
|
85
197
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RsOverlayAnchorBox, RsOverlayBox, RsOverlayPopupSize, RsOverlayViewport } from '../../_shared/src/overlay-utils';
|
|
1
2
|
export interface RsDropdownItem {
|
|
2
3
|
label: string;
|
|
3
4
|
value: string;
|
|
@@ -5,6 +6,16 @@ export interface RsDropdownItem {
|
|
|
5
6
|
/** 次要说明,工具条动作菜单等场景使用 */
|
|
6
7
|
hint?: string;
|
|
7
8
|
disabled?: boolean;
|
|
9
|
+
/** divider 只画分隔线,不参与选中 */
|
|
10
|
+
type?: 'item' | 'divider';
|
|
11
|
+
/** danger 用于删除等破坏性命令 */
|
|
12
|
+
tone?: RsDropdownTone;
|
|
13
|
+
href?: string;
|
|
14
|
+
target?: string;
|
|
15
|
+
rel?: string;
|
|
16
|
+
/** 展示用快捷键,不代绑全局热键 */
|
|
17
|
+
shortcut?: string;
|
|
18
|
+
children?: RsDropdownItem[];
|
|
8
19
|
}
|
|
9
20
|
export interface RsDropdownItemGroup {
|
|
10
21
|
label: string;
|
|
@@ -13,5 +24,44 @@ export interface RsDropdownItemGroup {
|
|
|
13
24
|
export type RsDropdownItems = RsDropdownItem[] | RsDropdownItemGroup[];
|
|
14
25
|
/** 菜单宽度:trigger 对齐触发器;fit 随内容,不跟窄图标按钮 */
|
|
15
26
|
export type RsDropdownContentWidth = 'trigger' | 'fit';
|
|
27
|
+
export type RsDropdownTrigger = 'click' | 'hover' | 'contextmenu';
|
|
28
|
+
export type RsDropdownPlacement = 'bottom' | 'top' | 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
|
|
29
|
+
export type RsDropdownTone = 'neutral' | 'danger';
|
|
30
|
+
export type RsDropdownGetPopupContainer = (trigger?: HTMLElement) => HTMLElement | null | undefined;
|
|
31
|
+
export interface RsDropdownExpose {
|
|
32
|
+
open: () => void;
|
|
33
|
+
close: () => void;
|
|
34
|
+
focus: () => void;
|
|
35
|
+
blur: () => void;
|
|
36
|
+
}
|
|
37
|
+
/** 模板 ref 实例:expose + 根节点 */
|
|
38
|
+
export type RsDropdownInstance = RsDropdownExpose & {
|
|
39
|
+
$el: HTMLElement;
|
|
40
|
+
};
|
|
41
|
+
export interface RsDropdownItemSlot {
|
|
42
|
+
item: RsDropdownItem;
|
|
43
|
+
selected: boolean;
|
|
44
|
+
highlighted: boolean;
|
|
45
|
+
}
|
|
16
46
|
export declare function isDropdownItemGroup(item: RsDropdownItem | RsDropdownItemGroup): item is RsDropdownItemGroup;
|
|
47
|
+
export declare function isDropdownDivider(item: RsDropdownItem): boolean;
|
|
48
|
+
export declare function hasDropdownChildren(item: RsDropdownItem): boolean;
|
|
17
49
|
export declare function flattenDropdownItems(items: RsDropdownItems): RsDropdownItem[];
|
|
50
|
+
/** 当前菜单层可点的项(不含分隔线与子菜单后代)。 */
|
|
51
|
+
export declare function listDropdownLayerItems(items: RsDropdownItems): RsDropdownItem[];
|
|
52
|
+
export declare function normalizeDropdownTriggers(trigger: RsDropdownTrigger | RsDropdownTrigger[] | undefined): RsDropdownTrigger[];
|
|
53
|
+
export declare function resolveDropdownPortalTarget(getPopupContainer: RsDropdownGetPopupContainer | undefined, trigger?: HTMLElement | null): string | HTMLElement;
|
|
54
|
+
export declare function resolveDropdownMenuKeys(rtl: boolean): {
|
|
55
|
+
next: string;
|
|
56
|
+
prev: string;
|
|
57
|
+
openSub: string;
|
|
58
|
+
closeSub: string;
|
|
59
|
+
};
|
|
60
|
+
export declare function matchDropdownTypeahead(items: readonly RsDropdownItem[], query: string, fromIndex?: number): number;
|
|
61
|
+
export declare function escapeDropdownSelector(value: string): string;
|
|
62
|
+
export declare function resolveDropdownExternalRel(item: RsDropdownItem): string | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* 下拉面板贴触发器:可指定上下与 start/end。
|
|
65
|
+
* 视口不够仍翻转;start/end 在 RTL 对调。
|
|
66
|
+
*/
|
|
67
|
+
export declare function placeDropdownPopup(anchor: RsOverlayAnchorBox, popup: RsOverlayPopupSize, viewport: RsOverlayViewport, placement: RsDropdownPlacement, rtl?: boolean, gap?: number): RsOverlayBox;
|
|
@@ -2,11 +2,111 @@
|
|
|
2
2
|
function isDropdownItemGroup(item) {
|
|
3
3
|
return "options" in item && Array.isArray(item.options);
|
|
4
4
|
}
|
|
5
|
+
function isDropdownDivider(item) {
|
|
6
|
+
return item.type === "divider";
|
|
7
|
+
}
|
|
8
|
+
function hasDropdownChildren(item) {
|
|
9
|
+
return Boolean(item.children?.length);
|
|
10
|
+
}
|
|
5
11
|
function flattenDropdownItems(items) {
|
|
6
12
|
const result = [];
|
|
7
|
-
for (const item of items)
|
|
8
|
-
|
|
13
|
+
for (const item of items) {
|
|
14
|
+
if (isDropdownItemGroup(item)) {
|
|
15
|
+
result.push(...flattenDropdownItems(item.options));
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (isDropdownDivider(item)) continue;
|
|
19
|
+
result.push(item);
|
|
20
|
+
if (item.children?.length) result.push(...flattenDropdownItems(item.children));
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
/** 当前菜单层可点的项(不含分隔线与子菜单后代)。 */
|
|
25
|
+
function listDropdownLayerItems(items) {
|
|
26
|
+
const result = [];
|
|
27
|
+
for (const item of items) {
|
|
28
|
+
if (isDropdownItemGroup(item)) {
|
|
29
|
+
for (const option of item.options) if (!isDropdownDivider(option)) result.push(option);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (!isDropdownDivider(item)) result.push(item);
|
|
33
|
+
}
|
|
9
34
|
return result;
|
|
10
35
|
}
|
|
36
|
+
function normalizeDropdownTriggers(trigger) {
|
|
37
|
+
let list;
|
|
38
|
+
if (Array.isArray(trigger)) list = trigger;
|
|
39
|
+
else if (trigger) list = [trigger];
|
|
40
|
+
else list = ["click"];
|
|
41
|
+
const allowed = /* @__PURE__ */ new Set([
|
|
42
|
+
"click",
|
|
43
|
+
"hover",
|
|
44
|
+
"contextmenu"
|
|
45
|
+
]);
|
|
46
|
+
const next = list.filter((item) => allowed.has(item));
|
|
47
|
+
return next.length ? next : ["click"];
|
|
48
|
+
}
|
|
49
|
+
function resolveDropdownPortalTarget(getPopupContainer, trigger) {
|
|
50
|
+
if (typeof document === "undefined") return "body";
|
|
51
|
+
if (!getPopupContainer) return "body";
|
|
52
|
+
return getPopupContainer(trigger ?? void 0) ?? "body";
|
|
53
|
+
}
|
|
54
|
+
function resolveDropdownMenuKeys(rtl) {
|
|
55
|
+
return {
|
|
56
|
+
next: "ArrowDown",
|
|
57
|
+
prev: "ArrowUp",
|
|
58
|
+
openSub: rtl ? "ArrowLeft" : "ArrowRight",
|
|
59
|
+
closeSub: rtl ? "ArrowRight" : "ArrowLeft"
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function matchDropdownTypeahead(items, query, fromIndex = -1) {
|
|
63
|
+
const needle = query.trim().toLowerCase();
|
|
64
|
+
if (!needle || !items.length) return -1;
|
|
65
|
+
const start = Math.max(-1, fromIndex);
|
|
66
|
+
for (let step = 1; step <= items.length; step += 1) {
|
|
67
|
+
const index = (start + step) % items.length;
|
|
68
|
+
const item = items[index];
|
|
69
|
+
if (!item || item.disabled || isDropdownDivider(item)) continue;
|
|
70
|
+
if (item.label.toLowerCase().startsWith(needle)) return index;
|
|
71
|
+
}
|
|
72
|
+
return -1;
|
|
73
|
+
}
|
|
74
|
+
function escapeDropdownSelector(value) {
|
|
75
|
+
if (typeof CSS !== "undefined" && typeof CSS.escape === "function") return CSS.escape(value);
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
function resolveDropdownExternalRel(item) {
|
|
79
|
+
if (!item.href) return void 0;
|
|
80
|
+
if (item.rel) return item.rel;
|
|
81
|
+
if (item.target === "_blank") return "noopener noreferrer";
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 下拉面板贴触发器:可指定上下与 start/end。
|
|
85
|
+
* 视口不够仍翻转;start/end 在 RTL 对调。
|
|
86
|
+
*/
|
|
87
|
+
function placeDropdownPopup(anchor, popup, viewport, placement, rtl = false, gap = 4) {
|
|
88
|
+
const preferTop = placement.startsWith("top");
|
|
89
|
+
const below = anchor.top + anchor.height + gap;
|
|
90
|
+
const above = anchor.top - popup.height - gap;
|
|
91
|
+
const roomBelow = below + popup.height <= viewport.height;
|
|
92
|
+
const roomAbove = above >= gap;
|
|
93
|
+
let side;
|
|
94
|
+
if (preferTop) side = roomAbove || !roomBelow ? "top" : "bottom";
|
|
95
|
+
else side = roomBelow || !roomAbove ? "bottom" : "top";
|
|
96
|
+
const top = side === "bottom" ? below : Math.max(gap, above);
|
|
97
|
+
const width = Math.min(popup.width, Math.max(0, viewport.width - gap * 2));
|
|
98
|
+
const wantEnd = placement.endsWith("end");
|
|
99
|
+
const alignRight = rtl ? !wantEnd : wantEnd;
|
|
100
|
+
const startLeft = anchor.left;
|
|
101
|
+
const endLeft = anchor.left + (anchor.width ?? 0) - width;
|
|
102
|
+
const rawLeft = alignRight ? endLeft : startLeft;
|
|
103
|
+
const maxLeft = Math.max(gap, viewport.width - width - gap);
|
|
104
|
+
return {
|
|
105
|
+
top,
|
|
106
|
+
left: Math.min(Math.max(gap, rawLeft), maxLeft),
|
|
107
|
+
width,
|
|
108
|
+
placement: side
|
|
109
|
+
};
|
|
110
|
+
}
|
|
11
111
|
//#endregion
|
|
12
|
-
export { flattenDropdownItems, isDropdownItemGroup };
|
|
112
|
+
export { escapeDropdownSelector, flattenDropdownItems, hasDropdownChildren, isDropdownDivider, isDropdownItemGroup, listDropdownLayerItems, matchDropdownTypeahead, normalizeDropdownTriggers, placeDropdownPopup, resolveDropdownExternalRel, resolveDropdownMenuKeys, resolveDropdownPortalTarget };
|