@chenzy-design/svelte 0.2.1 → 0.3.1
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/dist/anchor/Anchor.svelte +1 -1
- package/dist/anchor/meta.d.ts +1 -1
- package/dist/anchor/meta.js +1 -1
- package/dist/autocomplete/AutoComplete.svelte +10 -10
- package/dist/avatar/Avatar.svelte +12 -7
- package/dist/avatar/AvatarGroup.svelte +2 -2
- package/dist/avatar/context.d.ts +1 -1
- package/dist/avatar/context.d.ts.map +1 -1
- package/dist/avatar/meta.d.ts +2 -2
- package/dist/avatar/meta.d.ts.map +1 -1
- package/dist/avatar/meta.js +3 -1
- package/dist/badge/Badge.svelte +5 -5
- package/dist/banner/Banner.svelte +1 -1
- package/dist/breadcrumb/Breadcrumb.svelte +9 -8
- package/dist/breadcrumb/meta.d.ts +1 -1
- package/dist/breadcrumb/meta.js +1 -1
- package/dist/button/Button.svelte +289 -55
- package/dist/button/Button.svelte.d.ts +20 -4
- package/dist/button/Button.svelte.d.ts.map +1 -1
- package/dist/button/ButtonGroup.svelte +107 -0
- package/dist/button/ButtonGroup.svelte.d.ts +21 -0
- package/dist/button/ButtonGroup.svelte.d.ts.map +1 -0
- package/dist/button/SplitButtonGroup.svelte +127 -0
- package/dist/button/SplitButtonGroup.svelte.d.ts +35 -0
- package/dist/button/SplitButtonGroup.svelte.d.ts.map +1 -0
- package/dist/button/context.d.ts +14 -0
- package/dist/button/context.d.ts.map +1 -0
- package/dist/button/context.js +14 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/button/index.d.ts.map +1 -1
- package/dist/button/index.js +3 -0
- package/dist/button/meta.d.ts +173 -4
- package/dist/button/meta.d.ts.map +1 -1
- package/dist/button/meta.js +58 -9
- package/dist/calendar/Calendar.svelte +16 -16
- package/dist/card/Card.svelte +10 -10
- package/dist/card/Card.svelte.d.ts +1 -1
- package/dist/card/Card.svelte.d.ts.map +1 -1
- package/dist/card/CardMeta.svelte +6 -6
- package/dist/card/CardMeta.svelte.d.ts +1 -1
- package/dist/card/CardMeta.svelte.d.ts.map +1 -1
- package/dist/card/index.d.ts +8 -0
- package/dist/card/index.d.ts.map +1 -0
- package/dist/card/meta.d.ts +1 -1
- package/dist/card/meta.d.ts.map +1 -1
- package/dist/card/meta.js +4 -0
- package/dist/carousel/Carousel.svelte +14 -14
- package/dist/carousel/meta.d.ts +1 -1
- package/dist/carousel/meta.js +2 -2
- package/dist/cascader/Cascader.svelte +18 -10
- package/dist/checkbox/Checkbox.svelte +19 -5
- package/dist/checkbox/Checkbox.svelte.d.ts +3 -0
- package/dist/checkbox/Checkbox.svelte.d.ts.map +1 -1
- package/dist/checkbox/CheckboxGroup.svelte +1 -1
- package/dist/checkbox/meta.d.ts +15 -0
- package/dist/checkbox/meta.d.ts.map +1 -1
- package/dist/checkbox/meta.js +3 -0
- package/dist/collapse/Collapse.svelte +6 -2
- package/dist/collapse/meta.d.ts +1 -1
- package/dist/collapse/meta.js +2 -2
- package/dist/color-picker/ColorPicker.svelte +69 -33
- package/dist/color-picker/ColorPicker.svelte.d.ts +13 -0
- package/dist/color-picker/ColorPicker.svelte.d.ts.map +1 -1
- package/dist/color-picker/meta.d.ts +30 -0
- package/dist/color-picker/meta.d.ts.map +1 -1
- package/dist/color-picker/meta.js +6 -0
- package/dist/components.d.ts +25 -9
- package/dist/components.json +986 -76
- package/dist/date-picker/DatePicker.svelte +43 -42
- package/dist/date-picker/RangePicker.svelte +10 -10
- package/dist/descriptions/Descriptions.svelte +7 -3
- package/dist/divider/Divider.svelte +1 -1
- package/dist/drawer/Drawer.svelte +1 -1
- package/dist/dropdown/Dropdown.svelte +6 -5
- package/dist/dropdown/DropdownDivider.svelte +1 -1
- package/dist/dropdown/DropdownItem.svelte +1 -1
- package/dist/dropdown/DropdownItemNode.svelte +4 -4
- package/dist/dropdown/DropdownSubMenu.svelte +2 -2
- package/dist/dropdown/DropdownTitle.svelte +1 -1
- package/dist/dropdown/meta.d.ts +1 -1
- package/dist/dropdown/meta.js +1 -1
- package/dist/empty/Empty.svelte +1 -0
- package/dist/form/Field.svelte +14 -14
- package/dist/form/Form.svelte +2 -2
- package/dist/form/FormCascader.svelte +6 -6
- package/dist/form/FormCheckbox.svelte +6 -6
- package/dist/form/FormDatePicker.svelte +5 -5
- package/dist/form/FormLabel.svelte +2 -2
- package/dist/form/FormRadio.svelte +5 -5
- package/dist/form/FormRating.svelte +7 -7
- package/dist/form/FormSection.svelte +2 -2
- package/dist/form/FormSelect.svelte +12 -12
- package/dist/form/FormSlider.svelte +10 -10
- package/dist/form/FormSwitch.svelte +5 -5
- package/dist/form/FormTagInput.svelte +5 -5
- package/dist/form/FormTreeSelect.svelte +7 -7
- package/dist/form/FormUpload.svelte +10 -10
- package/dist/highlight/Highlight.svelte +2 -2
- package/dist/highlight/meta.d.ts +1 -1
- package/dist/highlight/meta.d.ts.map +1 -1
- package/dist/highlight/meta.js +6 -1
- package/dist/image/ImagePreview.svelte +7 -7
- package/dist/image/meta.d.ts +1 -1
- package/dist/image/meta.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/input/Input.svelte +14 -7
- package/dist/input-number/InputNumber.svelte +25 -19
- package/dist/layout/Content.svelte +17 -3
- package/dist/layout/Content.svelte.d.ts +6 -0
- package/dist/layout/Content.svelte.d.ts.map +1 -1
- package/dist/layout/Footer.svelte +22 -5
- package/dist/layout/Footer.svelte.d.ts +6 -0
- package/dist/layout/Footer.svelte.d.ts.map +1 -1
- package/dist/layout/Header.svelte +20 -3
- package/dist/layout/Header.svelte.d.ts +6 -0
- package/dist/layout/Header.svelte.d.ts.map +1 -1
- package/dist/layout/Layout.svelte +15 -2
- package/dist/layout/Layout.svelte.d.ts +6 -0
- package/dist/layout/Layout.svelte.d.ts.map +1 -1
- package/dist/layout/Sider.svelte +29 -4
- package/dist/layout/Sider.svelte.d.ts +8 -0
- package/dist/layout/Sider.svelte.d.ts.map +1 -1
- package/dist/layout/meta.d.ts +88 -0
- package/dist/layout/meta.d.ts.map +1 -1
- package/dist/layout/meta.js +22 -5
- package/dist/list/List.svelte +3 -3
- package/dist/list/ListItem.svelte +5 -5
- package/dist/list/ListMeta.svelte +1 -1
- package/dist/list/meta.d.ts +1 -1
- package/dist/list/meta.js +2 -2
- package/dist/menu/Menu.svelte +119 -38
- package/dist/menu/Menu.svelte.d.ts +16 -1
- package/dist/menu/Menu.svelte.d.ts.map +1 -1
- package/dist/menu/MenuPopupNode.svelte +37 -37
- package/dist/menu/MenuPopupNode.svelte.d.ts +1 -1
- package/dist/menu/MenuPopupNode.svelte.d.ts.map +1 -1
- package/dist/menu/meta.d.ts +21 -1
- package/dist/menu/meta.d.ts.map +1 -1
- package/dist/menu/meta.js +6 -1
- package/dist/menu/types.d.ts +6 -0
- package/dist/menu/types.d.ts.map +1 -1
- package/dist/modal/ConfirmModal.svelte +1 -1
- package/dist/modal/Modal.svelte +1 -1
- package/dist/nav/Nav.svelte +293 -0
- package/dist/nav/Nav.svelte.d.ts +75 -0
- package/dist/nav/Nav.svelte.d.ts.map +1 -0
- package/dist/nav/NavFooter.svelte +82 -0
- package/dist/nav/NavFooter.svelte.d.ts +14 -0
- package/dist/nav/NavFooter.svelte.d.ts.map +1 -0
- package/dist/nav/NavHeader.svelte +66 -0
- package/dist/nav/NavHeader.svelte.d.ts +18 -0
- package/dist/nav/NavHeader.svelte.d.ts.map +1 -0
- package/dist/nav/NavItem.svelte +68 -0
- package/dist/nav/NavItem.svelte.d.ts +28 -0
- package/dist/nav/NavItem.svelte.d.ts.map +1 -0
- package/dist/nav/NavSub.svelte +57 -0
- package/dist/nav/NavSub.svelte.d.ts +18 -0
- package/dist/nav/NavSub.svelte.d.ts.map +1 -0
- package/dist/nav/context.d.ts +31 -0
- package/dist/nav/context.d.ts.map +1 -0
- package/dist/nav/context.js +15 -0
- package/dist/nav/index.d.ts +20 -0
- package/dist/nav/index.d.ts.map +1 -0
- package/dist/nav/index.js +18 -0
- package/dist/nav/meta.d.ts +296 -0
- package/dist/nav/meta.d.ts.map +1 -0
- package/dist/nav/meta.js +119 -0
- package/dist/nav/types.d.ts +52 -0
- package/dist/nav/types.d.ts.map +1 -0
- package/dist/nav/types.js +31 -0
- package/dist/notification/NotificationItem.svelte +5 -5
- package/dist/notification/meta.d.ts +1 -1
- package/dist/notification/meta.d.ts.map +1 -1
- package/dist/notification/meta.js +1 -0
- package/dist/overflow-list/OverflowList.svelte +4 -4
- package/dist/pagination/Pagination.svelte +5 -5
- package/dist/popconfirm/Popconfirm.svelte +10 -14
- package/dist/popconfirm/Popconfirm.svelte.d.ts.map +1 -1
- package/dist/popconfirm/meta.d.ts +1 -1
- package/dist/popconfirm/meta.d.ts.map +1 -1
- package/dist/popconfirm/meta.js +1 -0
- package/dist/popover/Popover.svelte +13 -13
- package/dist/progress/Progress.svelte +1 -1
- package/dist/radio/Radio.svelte +58 -11
- package/dist/radio/Radio.svelte.d.ts +11 -0
- package/dist/radio/Radio.svelte.d.ts.map +1 -1
- package/dist/radio/RadioGroup.svelte +1 -1
- package/dist/radio/meta.d.ts +54 -1
- package/dist/radio/meta.d.ts.map +1 -1
- package/dist/radio/meta.js +12 -1
- package/dist/rating/Rating.svelte +20 -4
- package/dist/rating/Rating.svelte.d.ts +5 -0
- package/dist/rating/Rating.svelte.d.ts.map +1 -1
- package/dist/rating/meta.d.ts +25 -0
- package/dist/rating/meta.d.ts.map +1 -1
- package/dist/rating/meta.js +5 -0
- package/dist/scroll-list/ScrollColumn.svelte +1 -1
- package/dist/select/Select.svelte +26 -18
- package/dist/side-sheet/SideSheet.svelte +4 -4
- package/dist/slider/Slider.svelte +93 -17
- package/dist/slider/Slider.svelte.d.ts +20 -0
- package/dist/slider/Slider.svelte.d.ts.map +1 -1
- package/dist/slider/meta.d.ts +36 -1
- package/dist/slider/meta.d.ts.map +1 -1
- package/dist/slider/meta.js +8 -1
- package/dist/steps/Steps.svelte +7 -7
- package/dist/steps/meta.d.ts +1 -1
- package/dist/steps/meta.js +1 -1
- package/dist/switch/Switch.svelte +6 -6
- package/dist/switch/meta.d.ts +1 -1
- package/dist/switch/meta.js +1 -1
- package/dist/table/Table.svelte +17 -17
- package/dist/tabs/Tabs.svelte +12 -12
- package/dist/tabs/meta.d.ts +1 -1
- package/dist/tabs/meta.js +1 -1
- package/dist/tag/Tag.svelte +4 -2
- package/dist/tag/meta.d.ts +1 -1
- package/dist/tag/meta.d.ts.map +1 -1
- package/dist/tag/meta.js +2 -0
- package/dist/tag-input/TagInput.svelte +25 -14
- package/dist/textarea/TextArea.svelte +8 -8
- package/dist/time-picker/TimePicker.svelte +16 -16
- package/dist/timeline/Timeline.svelte +3 -3
- package/dist/timeline/meta.d.ts +1 -1
- package/dist/timeline/meta.js +1 -1
- package/dist/toast/ToastItem.svelte +2 -1
- package/dist/toast/meta.d.ts +1 -1
- package/dist/toast/meta.d.ts.map +1 -1
- package/dist/toast/meta.js +1 -0
- package/dist/tooltip/Tooltip.svelte +1 -1
- package/dist/transfer/Transfer.svelte +19 -19
- package/dist/tree/Tree.svelte +7 -6
- package/dist/tree-select/TreeSelect.svelte +20 -11
- package/dist/typography/TypographyBase.svelte +21 -12
- package/dist/typography/meta.d.ts +1 -1
- package/dist/typography/meta.d.ts.map +1 -1
- package/dist/typography/meta.js +3 -1
- package/dist/upload/Upload.svelte +44 -41
- package/package.json +4 -4
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Nav.Sub — 声明式可展开子导航(对齐 Semi Nav.Sub)。
|
|
3
|
+
注册自身描述符(含空 items 数组)到父收集器,并向 children 提供新的收集器,
|
|
4
|
+
使内嵌的 Nav.Item / Nav.Sub 按 DOM 顺序 push 进自己的 items(普通数组,嵌套树)。
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import type { Snippet } from 'svelte';
|
|
8
|
+
import { onMount, setContext } from 'svelte';
|
|
9
|
+
import { getNavCollector, NAV_COLLECTOR_KEY, type NavCollector } from './context.js';
|
|
10
|
+
import type { NavItemDef, NavKey } from './types.js';
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
/** 子导航唯一标识。 */
|
|
14
|
+
itemKey: NavKey;
|
|
15
|
+
/** 子导航标题文案。 */
|
|
16
|
+
text: string;
|
|
17
|
+
/** 标题前置图标。 */
|
|
18
|
+
icon?: Snippet;
|
|
19
|
+
/** 是否禁用。 */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/** 内嵌的 Nav.Item / Nav.Sub。 */
|
|
22
|
+
children?: Snippet;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let { itemKey, text, icon, disabled, children }: Props = $props();
|
|
26
|
+
|
|
27
|
+
const parent = getNavCollector();
|
|
28
|
+
|
|
29
|
+
// 自身描述符:items 为普通数组,承接子项注册。
|
|
30
|
+
// 声明式项「声明时读取一次」语义(对齐 Semi),静态读取,警告预期且无害。
|
|
31
|
+
const childItems: NavItemDef[] = [];
|
|
32
|
+
// svelte-ignore state_referenced_locally
|
|
33
|
+
const selfDescriptor: NavItemDef = {
|
|
34
|
+
itemKey,
|
|
35
|
+
text,
|
|
36
|
+
items: childItems,
|
|
37
|
+
...(icon !== undefined ? { icon } : {}),
|
|
38
|
+
...(disabled !== undefined ? { disabled } : {}),
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// init 同步注册到父级(普通数组)。
|
|
42
|
+
if (parent) parent.add(selfDescriptor);
|
|
43
|
+
|
|
44
|
+
// 向 children 提供收集器:add 写入自身 childItems;bump 继续上抛父级(合并为一次)。
|
|
45
|
+
const childCollector: NavCollector = {
|
|
46
|
+
add: (item: NavItemDef) => {
|
|
47
|
+
childItems.push(item);
|
|
48
|
+
return item;
|
|
49
|
+
},
|
|
50
|
+
bump: () => parent?.bump(),
|
|
51
|
+
};
|
|
52
|
+
setContext(NAV_COLLECTOR_KEY, childCollector);
|
|
53
|
+
|
|
54
|
+
onMount(() => parent?.bump());
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
{#if children}{@render children()}{/if}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { NavKey } from './types.js';
|
|
3
|
+
interface Props {
|
|
4
|
+
/** 子导航唯一标识。 */
|
|
5
|
+
itemKey: NavKey;
|
|
6
|
+
/** 子导航标题文案。 */
|
|
7
|
+
text: string;
|
|
8
|
+
/** 标题前置图标。 */
|
|
9
|
+
icon?: Snippet;
|
|
10
|
+
/** 是否禁用。 */
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
/** 内嵌的 Nav.Item / Nav.Sub。 */
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
}
|
|
15
|
+
declare const NavSub: import("svelte").Component<Props, {}, "">;
|
|
16
|
+
type NavSub = ReturnType<typeof NavSub>;
|
|
17
|
+
export default NavSub;
|
|
18
|
+
//# sourceMappingURL=NavSub.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavSub.svelte.d.ts","sourceRoot":"","sources":["../../src/nav/NavSub.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAc,MAAM,EAAE,MAAM,YAAY,CAAC;AAGnD,UAAU,KAAK;IACb,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA6CH,QAAA,MAAM,MAAM,2CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { NavItemDef } from './types.js';
|
|
2
|
+
export interface NavContext {
|
|
3
|
+
/** 当前是否折叠(仅 vertical 有意义)。 */
|
|
4
|
+
readonly collapsed: boolean;
|
|
5
|
+
/** 当前模式。 */
|
|
6
|
+
readonly mode: 'vertical' | 'horizontal';
|
|
7
|
+
/** 切换折叠态。 */
|
|
8
|
+
toggleCollapsed: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const NAV_CONTEXT_KEY: unique symbol;
|
|
11
|
+
/** Nav.Footer 内部读取 Nav 上下文(无则 undefined)。 */
|
|
12
|
+
export declare function getNavContext(): NavContext | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* 声明式子项收集上下文(Nav.Item / Nav.Sub)。
|
|
15
|
+
*
|
|
16
|
+
* 安全约束(见记忆 svelte5-child-register-state-array-loop):
|
|
17
|
+
* - 子项注册写入的 children 是【普通数组】(非 $state),子项 init 同步 push,不在 effect 里写 $state。
|
|
18
|
+
* - 触发 Nav 重建 items 的反应量是单独一个 $state revision,子项在挂载后【异步】bump 一次,
|
|
19
|
+
* 脱离挂载 effect 同步栈,避免读写自循环。
|
|
20
|
+
* - Nav.Sub 向下提供一个新的 collector,其 children 指向自己 descriptor 的 children 数组,
|
|
21
|
+
* 从而把嵌套结构按 DOM 顺序、按层级收进普通数组树。
|
|
22
|
+
*/
|
|
23
|
+
export interface NavCollector {
|
|
24
|
+
/** 把一个子项描述符按声明顺序 push 进当前层级的普通数组,返回该描述符(供 Sub 取其 children)。 */
|
|
25
|
+
add: (item: NavItemDef) => NavItemDef;
|
|
26
|
+
/** 挂载后异步触发一次 Nav 重建(合并多次为一次)。 */
|
|
27
|
+
bump: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare const NAV_COLLECTOR_KEY: unique symbol;
|
|
30
|
+
export declare function getNavCollector(): NavCollector | undefined;
|
|
31
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/nav/context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IACzC,aAAa;IACb,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,eAAe,eAAmB,CAAC;AAEhD,6CAA6C;AAC7C,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAEtD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;IACtC,iCAAiC;IACjC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,eAA6B,CAAC;AAE5D,wBAAgB,eAAe,IAAI,YAAY,GAAG,SAAS,CAI1D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nav 上下文:折叠联动(Footer)+ 声明式子项收集(Nav.Item/Nav.Sub)。
|
|
3
|
+
*/
|
|
4
|
+
import { getContext, hasContext } from 'svelte';
|
|
5
|
+
export const NAV_CONTEXT_KEY = Symbol('cd-nav');
|
|
6
|
+
/** Nav.Footer 内部读取 Nav 上下文(无则 undefined)。 */
|
|
7
|
+
export function getNavContext() {
|
|
8
|
+
return hasContext(NAV_CONTEXT_KEY) ? getContext(NAV_CONTEXT_KEY) : undefined;
|
|
9
|
+
}
|
|
10
|
+
export const NAV_COLLECTOR_KEY = Symbol('cd-nav-collector');
|
|
11
|
+
export function getNavCollector() {
|
|
12
|
+
return hasContext(NAV_COLLECTOR_KEY)
|
|
13
|
+
? getContext(NAV_COLLECTOR_KEY)
|
|
14
|
+
: undefined;
|
|
15
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import NavRoot from './Nav.svelte';
|
|
2
|
+
import NavHeader from './NavHeader.svelte';
|
|
3
|
+
import NavFooter from './NavFooter.svelte';
|
|
4
|
+
import NavItem from './NavItem.svelte';
|
|
5
|
+
import NavSub from './NavSub.svelte';
|
|
6
|
+
/** Named exports (also usable directly). */
|
|
7
|
+
export { NavHeader, NavFooter, NavItem, NavSub };
|
|
8
|
+
/**
|
|
9
|
+
* Aggregated namespace export: enables <Nav.Header /> / <Nav.Footer /> / <Nav.Item /> / <Nav.Sub />.
|
|
10
|
+
* Explicit type annotation avoids leaking component Props type errors.
|
|
11
|
+
*/
|
|
12
|
+
export declare const Nav: typeof NavRoot & {
|
|
13
|
+
Header: typeof NavHeader;
|
|
14
|
+
Footer: typeof NavFooter;
|
|
15
|
+
Item: typeof NavItem;
|
|
16
|
+
Sub: typeof NavSub;
|
|
17
|
+
};
|
|
18
|
+
export { meta as navMeta } from './meta.js';
|
|
19
|
+
export type { NavItemDef, NavKey, NavMode, NavHeaderConfig, NavFooterConfig } from './types.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,4CAA4C;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,OAAO,OAAO,GAAG;IACjC,MAAM,EAAE,OAAO,SAAS,CAAC;IACzB,MAAM,EAAE,OAAO,SAAS,CAAC;IACzB,IAAI,EAAE,OAAO,OAAO,CAAC;IACrB,GAAG,EAAE,OAAO,MAAM,CAAC;CAMnB,CAAC;AAEH,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import NavRoot from './Nav.svelte';
|
|
2
|
+
import NavHeader from './NavHeader.svelte';
|
|
3
|
+
import NavFooter from './NavFooter.svelte';
|
|
4
|
+
import NavItem from './NavItem.svelte';
|
|
5
|
+
import NavSub from './NavSub.svelte';
|
|
6
|
+
/** Named exports (also usable directly). */
|
|
7
|
+
export { NavHeader, NavFooter, NavItem, NavSub };
|
|
8
|
+
/**
|
|
9
|
+
* Aggregated namespace export: enables <Nav.Header /> / <Nav.Footer /> / <Nav.Item /> / <Nav.Sub />.
|
|
10
|
+
* Explicit type annotation avoids leaking component Props type errors.
|
|
11
|
+
*/
|
|
12
|
+
export const Nav = Object.assign(NavRoot, {
|
|
13
|
+
Header: NavHeader,
|
|
14
|
+
Footer: NavFooter,
|
|
15
|
+
Item: NavItem,
|
|
16
|
+
Sub: NavSub,
|
|
17
|
+
});
|
|
18
|
+
export { meta as navMeta } from './meta.js';
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Machine-readable component metadata for AI/docs consumption.
|
|
3
|
+
* See specs/00-foundation/ai-friendly.spec.md.
|
|
4
|
+
*/
|
|
5
|
+
export declare const meta: {
|
|
6
|
+
readonly name: "Nav";
|
|
7
|
+
readonly category: "navigation";
|
|
8
|
+
readonly description: "站点导航菜单(对齐 Semi Navigation)。支持垂直/水平模式、子导航、logo 头部、折叠按钮。字段对齐 Semi(itemKey/text/icon/items),内部委托 Menu 渲染导航体。";
|
|
9
|
+
readonly props: readonly [{
|
|
10
|
+
readonly name: "items";
|
|
11
|
+
readonly type: "NavItemDef[]";
|
|
12
|
+
readonly default: "[]";
|
|
13
|
+
readonly desc: "导航项列表,字段对齐 Semi:itemKey/text/icon/items(含 items 即子导航)";
|
|
14
|
+
}, {
|
|
15
|
+
readonly name: "mode";
|
|
16
|
+
readonly type: "'vertical'|'horizontal'";
|
|
17
|
+
readonly default: "'vertical'";
|
|
18
|
+
readonly desc: "导航方向:侧边/顶部";
|
|
19
|
+
}, {
|
|
20
|
+
readonly name: "selectedKeys";
|
|
21
|
+
readonly type: "NavKey[]";
|
|
22
|
+
readonly default: "undefined";
|
|
23
|
+
readonly desc: "受控选中项 key 数组";
|
|
24
|
+
}, {
|
|
25
|
+
readonly name: "defaultSelectedKeys";
|
|
26
|
+
readonly type: "NavKey[]";
|
|
27
|
+
readonly default: "undefined";
|
|
28
|
+
readonly desc: "默认选中项 key 数组";
|
|
29
|
+
}, {
|
|
30
|
+
readonly name: "openKeys";
|
|
31
|
+
readonly type: "NavKey[]";
|
|
32
|
+
readonly default: "undefined";
|
|
33
|
+
readonly desc: "受控展开子导航 key(vertical 且未折叠有效)";
|
|
34
|
+
}, {
|
|
35
|
+
readonly name: "defaultOpenKeys";
|
|
36
|
+
readonly type: "NavKey[]";
|
|
37
|
+
readonly default: "undefined";
|
|
38
|
+
readonly desc: "默认展开子导航 key";
|
|
39
|
+
}, {
|
|
40
|
+
readonly name: "isCollapsed";
|
|
41
|
+
readonly type: "boolean";
|
|
42
|
+
readonly default: "undefined";
|
|
43
|
+
readonly desc: "受控折叠态(仅 vertical 有效)";
|
|
44
|
+
}, {
|
|
45
|
+
readonly name: "defaultIsCollapsed";
|
|
46
|
+
readonly type: "boolean";
|
|
47
|
+
readonly default: "false";
|
|
48
|
+
readonly desc: "默认折叠态(仅 vertical 有效)";
|
|
49
|
+
}, {
|
|
50
|
+
readonly name: "header";
|
|
51
|
+
readonly type: "{ logo?: Snippet; text?: string }";
|
|
52
|
+
readonly default: "undefined";
|
|
53
|
+
readonly desc: "头部配置(logo + 文案)";
|
|
54
|
+
}, {
|
|
55
|
+
readonly name: "footer";
|
|
56
|
+
readonly type: "{ collapseButton?: boolean }";
|
|
57
|
+
readonly default: "undefined";
|
|
58
|
+
readonly desc: "底部配置(收起按钮,仅 vertical)";
|
|
59
|
+
}, {
|
|
60
|
+
readonly name: "disabled";
|
|
61
|
+
readonly type: "boolean";
|
|
62
|
+
readonly default: "false";
|
|
63
|
+
readonly desc: "整体禁用";
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "inlineIndent";
|
|
66
|
+
readonly type: "number";
|
|
67
|
+
readonly default: "24";
|
|
68
|
+
readonly desc: "子级缩进像素(透传 Menu)";
|
|
69
|
+
}, {
|
|
70
|
+
readonly name: "limitIndent";
|
|
71
|
+
readonly type: "boolean";
|
|
72
|
+
readonly default: "true";
|
|
73
|
+
readonly desc: "仅一级缩进;false 时逐级缩进";
|
|
74
|
+
}, {
|
|
75
|
+
readonly name: "toggleIconPosition";
|
|
76
|
+
readonly type: "'left'|'right'";
|
|
77
|
+
readonly default: "'right'";
|
|
78
|
+
readonly desc: "子导航展开箭头位置";
|
|
79
|
+
}, {
|
|
80
|
+
readonly name: "expandIcon";
|
|
81
|
+
readonly type: "Snippet";
|
|
82
|
+
readonly default: "undefined";
|
|
83
|
+
readonly desc: "自定义展开箭头图标";
|
|
84
|
+
}, {
|
|
85
|
+
readonly name: "subNavMotion";
|
|
86
|
+
readonly type: "boolean";
|
|
87
|
+
readonly default: "true";
|
|
88
|
+
readonly desc: "子导航展开动画开关";
|
|
89
|
+
}, {
|
|
90
|
+
readonly name: "subNavOpenDelay";
|
|
91
|
+
readonly type: "number";
|
|
92
|
+
readonly default: "undefined";
|
|
93
|
+
readonly desc: "浮层子导航展开延迟 ms";
|
|
94
|
+
}, {
|
|
95
|
+
readonly name: "subNavCloseDelay";
|
|
96
|
+
readonly type: "number";
|
|
97
|
+
readonly default: "undefined";
|
|
98
|
+
readonly desc: "浮层子导航关闭延迟 ms";
|
|
99
|
+
}, {
|
|
100
|
+
readonly name: "getPopupContainer";
|
|
101
|
+
readonly type: "() => HTMLElement";
|
|
102
|
+
readonly default: "undefined";
|
|
103
|
+
readonly desc: "浮层挂载容器";
|
|
104
|
+
}, {
|
|
105
|
+
readonly name: "renderWrapper";
|
|
106
|
+
readonly type: "Snippet";
|
|
107
|
+
readonly default: "undefined";
|
|
108
|
+
readonly desc: "自定义导航项外层包裹";
|
|
109
|
+
}, {
|
|
110
|
+
readonly name: "class";
|
|
111
|
+
readonly type: "string";
|
|
112
|
+
readonly default: "undefined";
|
|
113
|
+
readonly desc: "根元素自定义类名";
|
|
114
|
+
}, {
|
|
115
|
+
readonly name: "style";
|
|
116
|
+
readonly type: "string";
|
|
117
|
+
readonly default: "undefined";
|
|
118
|
+
readonly desc: "根元素自定义内联样式";
|
|
119
|
+
}, {
|
|
120
|
+
readonly name: "bodyStyle";
|
|
121
|
+
readonly type: "string";
|
|
122
|
+
readonly default: "undefined";
|
|
123
|
+
readonly desc: "导航项列表容器样式(对齐 Semi bodyStyle)";
|
|
124
|
+
}, {
|
|
125
|
+
readonly name: "ariaLabel";
|
|
126
|
+
readonly type: "string";
|
|
127
|
+
readonly default: "undefined";
|
|
128
|
+
readonly desc: "可访问性标签";
|
|
129
|
+
}];
|
|
130
|
+
readonly events: readonly [{
|
|
131
|
+
readonly name: "onSelect";
|
|
132
|
+
readonly payload: "NavKey";
|
|
133
|
+
readonly desc: "选中导航项时触发";
|
|
134
|
+
}, {
|
|
135
|
+
readonly name: "onClick";
|
|
136
|
+
readonly payload: "NavKey";
|
|
137
|
+
readonly desc: "点击任意导航项时触发";
|
|
138
|
+
}, {
|
|
139
|
+
readonly name: "onOpenChange";
|
|
140
|
+
readonly payload: "NavKey[]";
|
|
141
|
+
readonly desc: "展开/收起子导航时触发";
|
|
142
|
+
}, {
|
|
143
|
+
readonly name: "onCollapseChange";
|
|
144
|
+
readonly payload: "boolean";
|
|
145
|
+
readonly desc: "折叠态变化时触发";
|
|
146
|
+
}];
|
|
147
|
+
readonly slots: readonly [{
|
|
148
|
+
readonly name: "headerSlot";
|
|
149
|
+
readonly desc: "自定义头部(覆盖 header 配置对象)";
|
|
150
|
+
}, {
|
|
151
|
+
readonly name: "footerSlot";
|
|
152
|
+
readonly desc: "自定义底部(覆盖 footer 配置对象)";
|
|
153
|
+
}, {
|
|
154
|
+
readonly name: "children";
|
|
155
|
+
readonly desc: "声明式子项(<Nav.Item>/<Nav.Sub>),与 items 二选一";
|
|
156
|
+
}];
|
|
157
|
+
readonly subComponents: readonly [{
|
|
158
|
+
readonly name: "Nav.Header";
|
|
159
|
+
readonly element: "div";
|
|
160
|
+
readonly props: readonly [{
|
|
161
|
+
readonly name: "logo";
|
|
162
|
+
readonly type: "Snippet";
|
|
163
|
+
readonly default: "undefined";
|
|
164
|
+
readonly desc: "Logo 节点";
|
|
165
|
+
}, {
|
|
166
|
+
readonly name: "text";
|
|
167
|
+
readonly type: "string";
|
|
168
|
+
readonly default: "undefined";
|
|
169
|
+
readonly desc: "Logo 文案";
|
|
170
|
+
}, {
|
|
171
|
+
readonly name: "class";
|
|
172
|
+
readonly type: "string";
|
|
173
|
+
readonly default: "undefined";
|
|
174
|
+
readonly desc: "自定义类名";
|
|
175
|
+
}, {
|
|
176
|
+
readonly name: "style";
|
|
177
|
+
readonly type: "string";
|
|
178
|
+
readonly default: "undefined";
|
|
179
|
+
readonly desc: "自定义内联样式";
|
|
180
|
+
}];
|
|
181
|
+
}, {
|
|
182
|
+
readonly name: "Nav.Footer";
|
|
183
|
+
readonly element: "div";
|
|
184
|
+
readonly props: readonly [{
|
|
185
|
+
readonly name: "collapseButton";
|
|
186
|
+
readonly type: "boolean";
|
|
187
|
+
readonly default: "false";
|
|
188
|
+
readonly desc: "收起按钮(仅 vertical 生效)";
|
|
189
|
+
}, {
|
|
190
|
+
readonly name: "class";
|
|
191
|
+
readonly type: "string";
|
|
192
|
+
readonly default: "undefined";
|
|
193
|
+
readonly desc: "自定义类名";
|
|
194
|
+
}, {
|
|
195
|
+
readonly name: "style";
|
|
196
|
+
readonly type: "string";
|
|
197
|
+
readonly default: "undefined";
|
|
198
|
+
readonly desc: "自定义内联样式";
|
|
199
|
+
}];
|
|
200
|
+
}, {
|
|
201
|
+
readonly name: "Nav.Item";
|
|
202
|
+
readonly element: "—";
|
|
203
|
+
readonly props: readonly [{
|
|
204
|
+
readonly name: "itemKey";
|
|
205
|
+
readonly type: "NavKey";
|
|
206
|
+
readonly default: "—";
|
|
207
|
+
readonly desc: "导航项唯一标识(必填)";
|
|
208
|
+
}, {
|
|
209
|
+
readonly name: "text";
|
|
210
|
+
readonly type: "string";
|
|
211
|
+
readonly default: "—";
|
|
212
|
+
readonly desc: "导航项文案";
|
|
213
|
+
}, {
|
|
214
|
+
readonly name: "icon";
|
|
215
|
+
readonly type: "Snippet";
|
|
216
|
+
readonly default: "undefined";
|
|
217
|
+
readonly desc: "项前置图标";
|
|
218
|
+
}, {
|
|
219
|
+
readonly name: "disabled";
|
|
220
|
+
readonly type: "boolean";
|
|
221
|
+
readonly default: "undefined";
|
|
222
|
+
readonly desc: "是否禁用";
|
|
223
|
+
}, {
|
|
224
|
+
readonly name: "link";
|
|
225
|
+
readonly type: "string";
|
|
226
|
+
readonly default: "undefined";
|
|
227
|
+
readonly desc: "链接地址(渲染原生 <a>)";
|
|
228
|
+
}, {
|
|
229
|
+
readonly name: "target";
|
|
230
|
+
readonly type: "string";
|
|
231
|
+
readonly default: "undefined";
|
|
232
|
+
readonly desc: "链接 target";
|
|
233
|
+
}, {
|
|
234
|
+
readonly name: "rel";
|
|
235
|
+
readonly type: "string";
|
|
236
|
+
readonly default: "undefined";
|
|
237
|
+
readonly desc: "链接 rel";
|
|
238
|
+
}, {
|
|
239
|
+
readonly name: "onClick";
|
|
240
|
+
readonly type: "(e: MouseEvent) => void";
|
|
241
|
+
readonly default: "undefined";
|
|
242
|
+
readonly desc: "项级点击回调";
|
|
243
|
+
}, {
|
|
244
|
+
readonly name: "onMouseEnter";
|
|
245
|
+
readonly type: "(e: MouseEvent) => void";
|
|
246
|
+
readonly default: "undefined";
|
|
247
|
+
readonly desc: "鼠标移入";
|
|
248
|
+
}, {
|
|
249
|
+
readonly name: "onMouseLeave";
|
|
250
|
+
readonly type: "(e: MouseEvent) => void";
|
|
251
|
+
readonly default: "undefined";
|
|
252
|
+
readonly desc: "鼠标移出";
|
|
253
|
+
}];
|
|
254
|
+
}, {
|
|
255
|
+
readonly name: "Nav.Sub";
|
|
256
|
+
readonly element: "—";
|
|
257
|
+
readonly props: readonly [{
|
|
258
|
+
readonly name: "itemKey";
|
|
259
|
+
readonly type: "NavKey";
|
|
260
|
+
readonly default: "—";
|
|
261
|
+
readonly desc: "子导航唯一标识(必填)";
|
|
262
|
+
}, {
|
|
263
|
+
readonly name: "text";
|
|
264
|
+
readonly type: "string";
|
|
265
|
+
readonly default: "—";
|
|
266
|
+
readonly desc: "子导航标题文案";
|
|
267
|
+
}, {
|
|
268
|
+
readonly name: "icon";
|
|
269
|
+
readonly type: "Snippet";
|
|
270
|
+
readonly default: "undefined";
|
|
271
|
+
readonly desc: "标题前置图标";
|
|
272
|
+
}, {
|
|
273
|
+
readonly name: "disabled";
|
|
274
|
+
readonly type: "boolean";
|
|
275
|
+
readonly default: "undefined";
|
|
276
|
+
readonly desc: "是否禁用";
|
|
277
|
+
}, {
|
|
278
|
+
readonly name: "children";
|
|
279
|
+
readonly type: "Snippet";
|
|
280
|
+
readonly default: "undefined";
|
|
281
|
+
readonly desc: "内嵌 Nav.Item / Nav.Sub";
|
|
282
|
+
}];
|
|
283
|
+
}];
|
|
284
|
+
readonly a11y: {
|
|
285
|
+
readonly role: "navigation";
|
|
286
|
+
readonly keyboard: readonly ["Tab", "Shift+Tab", "Enter"];
|
|
287
|
+
readonly notes: readonly ["委托 Menu purpose=navigation:渲染 <nav> landmark + 含 link 的叶子为原生 <a>", "选中项 aria-current=page;折叠按钮原生 button + aria-expanded + aria-label"];
|
|
288
|
+
};
|
|
289
|
+
readonly tokens: readonly ["--cd-nav-*"];
|
|
290
|
+
readonly aiHints: readonly ["侧边导航用 mode=vertical + footer={{collapseButton:true}};顶部导航用 mode=horizontal。", "items 字段对齐 Semi:itemKey/text/icon/items(非 Menu 的 key/label)。", "配合 Layout:<Layout.Sider><Nav mode=vertical/></Layout.Sider> 或 <Layout.Header><Nav mode=horizontal/></Layout.Header>。"];
|
|
291
|
+
readonly examples: readonly [{
|
|
292
|
+
readonly title: "侧边导航";
|
|
293
|
+
readonly code: "<Nav mode=\"vertical\" items={items} header={{logo, text:\"后台\"}} footer={{collapseButton:true}} />";
|
|
294
|
+
}];
|
|
295
|
+
};
|
|
296
|
+
//# sourceMappingURL=meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/nav/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmHP,CAAC"}
|
package/dist/nav/meta.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Machine-readable component metadata for AI/docs consumption.
|
|
3
|
+
* See specs/00-foundation/ai-friendly.spec.md.
|
|
4
|
+
*/
|
|
5
|
+
export const meta = {
|
|
6
|
+
name: 'Nav',
|
|
7
|
+
category: 'navigation',
|
|
8
|
+
description: '站点导航菜单(对齐 Semi Navigation)。支持垂直/水平模式、子导航、logo 头部、折叠按钮。字段对齐 Semi(itemKey/text/icon/items),内部委托 Menu 渲染导航体。',
|
|
9
|
+
props: [
|
|
10
|
+
{
|
|
11
|
+
name: 'items',
|
|
12
|
+
type: 'NavItemDef[]',
|
|
13
|
+
default: '[]',
|
|
14
|
+
desc: '导航项列表,字段对齐 Semi:itemKey/text/icon/items(含 items 即子导航)',
|
|
15
|
+
},
|
|
16
|
+
{ name: 'mode', type: "'vertical'|'horizontal'", default: "'vertical'", desc: '导航方向:侧边/顶部' },
|
|
17
|
+
{ name: 'selectedKeys', type: 'NavKey[]', default: 'undefined', desc: '受控选中项 key 数组' },
|
|
18
|
+
{ name: 'defaultSelectedKeys', type: 'NavKey[]', default: 'undefined', desc: '默认选中项 key 数组' },
|
|
19
|
+
{ name: 'openKeys', type: 'NavKey[]', default: 'undefined', desc: '受控展开子导航 key(vertical 且未折叠有效)' },
|
|
20
|
+
{ name: 'defaultOpenKeys', type: 'NavKey[]', default: 'undefined', desc: '默认展开子导航 key' },
|
|
21
|
+
{ name: 'isCollapsed', type: 'boolean', default: 'undefined', desc: '受控折叠态(仅 vertical 有效)' },
|
|
22
|
+
{ name: 'defaultIsCollapsed', type: 'boolean', default: 'false', desc: '默认折叠态(仅 vertical 有效)' },
|
|
23
|
+
{ name: 'header', type: '{ logo?: Snippet; text?: string }', default: 'undefined', desc: '头部配置(logo + 文案)' },
|
|
24
|
+
{ name: 'footer', type: '{ collapseButton?: boolean }', default: 'undefined', desc: '底部配置(收起按钮,仅 vertical)' },
|
|
25
|
+
{ name: 'disabled', type: 'boolean', default: 'false', desc: '整体禁用' },
|
|
26
|
+
{ name: 'inlineIndent', type: 'number', default: '24', desc: '子级缩进像素(透传 Menu)' },
|
|
27
|
+
{ name: 'limitIndent', type: 'boolean', default: 'true', desc: '仅一级缩进;false 时逐级缩进' },
|
|
28
|
+
{ name: 'toggleIconPosition', type: "'left'|'right'", default: "'right'", desc: '子导航展开箭头位置' },
|
|
29
|
+
{ name: 'expandIcon', type: 'Snippet', default: 'undefined', desc: '自定义展开箭头图标' },
|
|
30
|
+
{ name: 'subNavMotion', type: 'boolean', default: 'true', desc: '子导航展开动画开关' },
|
|
31
|
+
{ name: 'subNavOpenDelay', type: 'number', default: 'undefined', desc: '浮层子导航展开延迟 ms' },
|
|
32
|
+
{ name: 'subNavCloseDelay', type: 'number', default: 'undefined', desc: '浮层子导航关闭延迟 ms' },
|
|
33
|
+
{ name: 'getPopupContainer', type: '() => HTMLElement', default: 'undefined', desc: '浮层挂载容器' },
|
|
34
|
+
{ name: 'renderWrapper', type: 'Snippet', default: 'undefined', desc: '自定义导航项外层包裹' },
|
|
35
|
+
{ name: 'class', type: 'string', default: 'undefined', desc: '根元素自定义类名' },
|
|
36
|
+
{ name: 'style', type: 'string', default: 'undefined', desc: '根元素自定义内联样式' },
|
|
37
|
+
{ name: 'bodyStyle', type: 'string', default: 'undefined', desc: '导航项列表容器样式(对齐 Semi bodyStyle)' },
|
|
38
|
+
{ name: 'ariaLabel', type: 'string', default: 'undefined', desc: '可访问性标签' },
|
|
39
|
+
],
|
|
40
|
+
events: [
|
|
41
|
+
{ name: 'onSelect', payload: 'NavKey', desc: '选中导航项时触发' },
|
|
42
|
+
{ name: 'onClick', payload: 'NavKey', desc: '点击任意导航项时触发' },
|
|
43
|
+
{ name: 'onOpenChange', payload: 'NavKey[]', desc: '展开/收起子导航时触发' },
|
|
44
|
+
{ name: 'onCollapseChange', payload: 'boolean', desc: '折叠态变化时触发' },
|
|
45
|
+
],
|
|
46
|
+
slots: [
|
|
47
|
+
{ name: 'headerSlot', desc: '自定义头部(覆盖 header 配置对象)' },
|
|
48
|
+
{ name: 'footerSlot', desc: '自定义底部(覆盖 footer 配置对象)' },
|
|
49
|
+
{ name: 'children', desc: '声明式子项(<Nav.Item>/<Nav.Sub>),与 items 二选一' },
|
|
50
|
+
],
|
|
51
|
+
subComponents: [
|
|
52
|
+
{
|
|
53
|
+
name: 'Nav.Header',
|
|
54
|
+
element: 'div',
|
|
55
|
+
props: [
|
|
56
|
+
{ name: 'logo', type: 'Snippet', default: 'undefined', desc: 'Logo 节点' },
|
|
57
|
+
{ name: 'text', type: 'string', default: 'undefined', desc: 'Logo 文案' },
|
|
58
|
+
{ name: 'class', type: 'string', default: 'undefined', desc: '自定义类名' },
|
|
59
|
+
{ name: 'style', type: 'string', default: 'undefined', desc: '自定义内联样式' },
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'Nav.Footer',
|
|
64
|
+
element: 'div',
|
|
65
|
+
props: [
|
|
66
|
+
{ name: 'collapseButton', type: 'boolean', default: 'false', desc: '收起按钮(仅 vertical 生效)' },
|
|
67
|
+
{ name: 'class', type: 'string', default: 'undefined', desc: '自定义类名' },
|
|
68
|
+
{ name: 'style', type: 'string', default: 'undefined', desc: '自定义内联样式' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'Nav.Item',
|
|
73
|
+
element: '—',
|
|
74
|
+
props: [
|
|
75
|
+
{ name: 'itemKey', type: 'NavKey', default: '—', desc: '导航项唯一标识(必填)' },
|
|
76
|
+
{ name: 'text', type: 'string', default: '—', desc: '导航项文案' },
|
|
77
|
+
{ name: 'icon', type: 'Snippet', default: 'undefined', desc: '项前置图标' },
|
|
78
|
+
{ name: 'disabled', type: 'boolean', default: 'undefined', desc: '是否禁用' },
|
|
79
|
+
{ name: 'link', type: 'string', default: 'undefined', desc: '链接地址(渲染原生 <a>)' },
|
|
80
|
+
{ name: 'target', type: 'string', default: 'undefined', desc: '链接 target' },
|
|
81
|
+
{ name: 'rel', type: 'string', default: 'undefined', desc: '链接 rel' },
|
|
82
|
+
{ name: 'onClick', type: '(e: MouseEvent) => void', default: 'undefined', desc: '项级点击回调' },
|
|
83
|
+
{ name: 'onMouseEnter', type: '(e: MouseEvent) => void', default: 'undefined', desc: '鼠标移入' },
|
|
84
|
+
{ name: 'onMouseLeave', type: '(e: MouseEvent) => void', default: 'undefined', desc: '鼠标移出' },
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'Nav.Sub',
|
|
89
|
+
element: '—',
|
|
90
|
+
props: [
|
|
91
|
+
{ name: 'itemKey', type: 'NavKey', default: '—', desc: '子导航唯一标识(必填)' },
|
|
92
|
+
{ name: 'text', type: 'string', default: '—', desc: '子导航标题文案' },
|
|
93
|
+
{ name: 'icon', type: 'Snippet', default: 'undefined', desc: '标题前置图标' },
|
|
94
|
+
{ name: 'disabled', type: 'boolean', default: 'undefined', desc: '是否禁用' },
|
|
95
|
+
{ name: 'children', type: 'Snippet', default: 'undefined', desc: '内嵌 Nav.Item / Nav.Sub' },
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
a11y: {
|
|
100
|
+
role: 'navigation',
|
|
101
|
+
keyboard: ['Tab', 'Shift+Tab', 'Enter'],
|
|
102
|
+
notes: [
|
|
103
|
+
'委托 Menu purpose=navigation:渲染 <nav> landmark + 含 link 的叶子为原生 <a>',
|
|
104
|
+
'选中项 aria-current=page;折叠按钮原生 button + aria-expanded + aria-label',
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
tokens: ['--cd-nav-*'],
|
|
108
|
+
aiHints: [
|
|
109
|
+
'侧边导航用 mode=vertical + footer={{collapseButton:true}};顶部导航用 mode=horizontal。',
|
|
110
|
+
'items 字段对齐 Semi:itemKey/text/icon/items(非 Menu 的 key/label)。',
|
|
111
|
+
'配合 Layout:<Layout.Sider><Nav mode=vertical/></Layout.Sider> 或 <Layout.Header><Nav mode=horizontal/></Layout.Header>。',
|
|
112
|
+
],
|
|
113
|
+
examples: [
|
|
114
|
+
{
|
|
115
|
+
title: '侧边导航',
|
|
116
|
+
code: '<Nav mode="vertical" items={items} header={{logo, text:"后台"}} footer={{collapseButton:true}} />',
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { MenuItemDef } from '../menu/types.js';
|
|
3
|
+
/** Nav 项键类型(对齐 Semi itemKey)。 */
|
|
4
|
+
export type NavKey = string | number;
|
|
5
|
+
/** Nav 模式:垂直(侧边)或水平(顶部)。对齐 Semi mode。 */
|
|
6
|
+
export type NavMode = 'vertical' | 'horizontal';
|
|
7
|
+
/**
|
|
8
|
+
* Nav 导航项(字段对齐 Semi:itemKey / text / icon / items)。
|
|
9
|
+
* 含 items 即为可展开子导航。Nav 内部映射为 Menu 的 MenuItemDef 渲染。
|
|
10
|
+
*/
|
|
11
|
+
export interface NavItemDef {
|
|
12
|
+
/** 导航项唯一标识(对齐 Semi itemKey)。 */
|
|
13
|
+
itemKey: NavKey;
|
|
14
|
+
/** 导航项文案(对齐 Semi text)。 */
|
|
15
|
+
text: string;
|
|
16
|
+
/** 项前置图标。 */
|
|
17
|
+
icon?: Snippet;
|
|
18
|
+
/** 是否禁用。 */
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
/** 链接地址;传入时叶子项渲染为原生 `<a href>`(站点导航语义)。 */
|
|
21
|
+
link?: string;
|
|
22
|
+
/** 链接 target(如 '_blank')。 */
|
|
23
|
+
target?: string;
|
|
24
|
+
/** 链接 rel(如 'noopener noreferrer')。 */
|
|
25
|
+
rel?: string;
|
|
26
|
+
/** 项级点击回调(叶子项)。 */
|
|
27
|
+
onClick?: (e: MouseEvent) => void;
|
|
28
|
+
/** 项级鼠标移入回调。 */
|
|
29
|
+
onMouseEnter?: (e: MouseEvent) => void;
|
|
30
|
+
/** 项级鼠标移出回调。 */
|
|
31
|
+
onMouseLeave?: (e: MouseEvent) => void;
|
|
32
|
+
/** 子导航项;含 items 即为可展开子导航。 */
|
|
33
|
+
items?: NavItemDef[];
|
|
34
|
+
}
|
|
35
|
+
/** Nav.Header 配置对象(对齐 Semi header={{logo,text}})。 */
|
|
36
|
+
export interface NavHeaderConfig {
|
|
37
|
+
/** Logo 节点(Snippet)。 */
|
|
38
|
+
logo?: Snippet;
|
|
39
|
+
/** Logo 文案。 */
|
|
40
|
+
text?: string;
|
|
41
|
+
}
|
|
42
|
+
/** Nav.Footer 配置对象(对齐 Semi footer={{collapseButton}})。 */
|
|
43
|
+
export interface NavFooterConfig {
|
|
44
|
+
/** 是否展示底部「收起侧边栏」按钮,仅 mode='vertical' 生效。 */
|
|
45
|
+
collapseButton?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 把 Nav 项(Semi 字段)递归映射为 Menu 的 MenuItemDef。
|
|
49
|
+
* itemKey→key、text→label、items→children、link→href,icon/target/rel/disabled 直传。
|
|
50
|
+
*/
|
|
51
|
+
export declare function navItemsToMenuItems(items?: NavItemDef[]): MenuItemDef[];
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/nav/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,iCAAiC;AACjC,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC,yCAAyC;AACzC,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,gBAAgB;IAChB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,gBAAgB;IAChB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,6BAA6B;IAC7B,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,UAAU,EAAO,GAAG,WAAW,EAAE,CAiB3E"}
|