@chenzy-design/svelte 0.2.1 → 0.3.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/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 +3 -3
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SplitButtonGroup — 分裂按钮:左侧主 Button + 右侧带下拉箭头的小 Button。
|
|
3
|
+
右侧小按钮点击触发 Dropdown(复用现有 Dropdown 的 items API / menu snippet)。
|
|
4
|
+
视觉上两者拼接、中间细分隔;主按钮 type/theme 透传给两侧。
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import type { Snippet } from 'svelte';
|
|
8
|
+
import Button from './Button.svelte';
|
|
9
|
+
import { Dropdown } from '../dropdown/index.js';
|
|
10
|
+
import type { DropdownItem } from '../dropdown/types.js';
|
|
11
|
+
import type { Placement } from '@chenzy-design/core';
|
|
12
|
+
import type { ButtonType, ButtonTheme, ButtonSize } from './context.js';
|
|
13
|
+
|
|
14
|
+
interface Props {
|
|
15
|
+
type?: ButtonType;
|
|
16
|
+
theme?: ButtonTheme;
|
|
17
|
+
size?: ButtonSize;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
/** 下拉菜单数据项(透传给 Dropdown.items)。 */
|
|
21
|
+
items?: DropdownItem[];
|
|
22
|
+
/** 下拉浮层位置(透传给 Dropdown.position)。 */
|
|
23
|
+
position?: Placement;
|
|
24
|
+
/** 下拉箭头按钮的 aria-label(无文字按钮必填)。 */
|
|
25
|
+
triggerAriaLabel?: string;
|
|
26
|
+
/** 选中下拉项回调。 */
|
|
27
|
+
onSelect?: (key: string | number) => void;
|
|
28
|
+
/** 主按钮点击回调。 */
|
|
29
|
+
onclick?: (e: MouseEvent) => void;
|
|
30
|
+
/** 分裂按钮组语义标签(root aria-label,对齐 Semi)。 */
|
|
31
|
+
ariaLabel?: string;
|
|
32
|
+
/** 根元素自定义类名(透传)。 */
|
|
33
|
+
class?: string;
|
|
34
|
+
/** 根元素自定义内联样式(透传)。 */
|
|
35
|
+
style?: string;
|
|
36
|
+
/** 左侧主按钮内容。 */
|
|
37
|
+
children?: Snippet;
|
|
38
|
+
/** 自定义下拉菜单体(替代 items)。 */
|
|
39
|
+
menu?: Snippet;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
let {
|
|
43
|
+
type = 'primary',
|
|
44
|
+
theme = 'solid',
|
|
45
|
+
size = 'default',
|
|
46
|
+
disabled = false,
|
|
47
|
+
loading = false,
|
|
48
|
+
items = [],
|
|
49
|
+
position = 'bottomEnd',
|
|
50
|
+
triggerAriaLabel = '更多操作',
|
|
51
|
+
onSelect,
|
|
52
|
+
onclick,
|
|
53
|
+
ariaLabel,
|
|
54
|
+
class: className,
|
|
55
|
+
style,
|
|
56
|
+
children,
|
|
57
|
+
menu,
|
|
58
|
+
}: Props = $props();
|
|
59
|
+
</script>
|
|
60
|
+
|
|
61
|
+
<div class={['cd-split-button', className].filter(Boolean).join(' ')} {style} role="group" aria-label={ariaLabel}>
|
|
62
|
+
<Button {type} {theme} {size} {disabled} {loading} onclick={(e) => onclick?.(e)}>
|
|
63
|
+
{@render children?.()}
|
|
64
|
+
</Button>
|
|
65
|
+
<!-- 有自定义 menu 时把它作为 children 透传给 Dropdown;
|
|
66
|
+
否则不传 children,让 Dropdown 走内置 items 渲染分支。
|
|
67
|
+
注意:标签体内即便是空 {#if} 也会被 Svelte 收集成 children snippet,
|
|
68
|
+
从而覆盖 items 导致菜单为空,故必须按 menu 是否存在分叉两个调用。 -->
|
|
69
|
+
{#if menu}
|
|
70
|
+
<Dropdown
|
|
71
|
+
trigger="click"
|
|
72
|
+
{items}
|
|
73
|
+
{position}
|
|
74
|
+
{disabled}
|
|
75
|
+
onSelect={(key) => onSelect?.(key)}
|
|
76
|
+
>
|
|
77
|
+
{#snippet triggerContent()}
|
|
78
|
+
<Button {type} {theme} {size} {disabled} ariaLabel={triggerAriaLabel} icon={caret}></Button>
|
|
79
|
+
{/snippet}
|
|
80
|
+
{@render menu()}
|
|
81
|
+
</Dropdown>
|
|
82
|
+
{:else}
|
|
83
|
+
<Dropdown
|
|
84
|
+
trigger="click"
|
|
85
|
+
{items}
|
|
86
|
+
{position}
|
|
87
|
+
{disabled}
|
|
88
|
+
onSelect={(key) => onSelect?.(key)}
|
|
89
|
+
>
|
|
90
|
+
{#snippet triggerContent()}
|
|
91
|
+
<Button {type} {theme} {size} {disabled} ariaLabel={triggerAriaLabel} icon={caret}></Button>
|
|
92
|
+
{/snippet}
|
|
93
|
+
</Dropdown>
|
|
94
|
+
{/if}
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
{#snippet caret()}
|
|
98
|
+
<svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
99
|
+
<path d="m6 9 6 6 6-6" />
|
|
100
|
+
</svg>
|
|
101
|
+
{/snippet}
|
|
102
|
+
|
|
103
|
+
<style>
|
|
104
|
+
.cd-split-button {
|
|
105
|
+
display: inline-flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
}
|
|
108
|
+
/* 拼接:主按钮右侧去圆角、箭头按钮左侧去圆角并叠边。 */
|
|
109
|
+
.cd-split-button :global(.cd-button:first-child) {
|
|
110
|
+
border-start-end-radius: 0;
|
|
111
|
+
border-end-end-radius: 0;
|
|
112
|
+
}
|
|
113
|
+
.cd-split-button :global(.cd-dropdown) {
|
|
114
|
+
display: inline-flex;
|
|
115
|
+
margin-inline-start: -1px;
|
|
116
|
+
}
|
|
117
|
+
.cd-split-button :global(.cd-dropdown .cd-button) {
|
|
118
|
+
border-start-start-radius: 0;
|
|
119
|
+
border-end-start-radius: 0;
|
|
120
|
+
position: relative;
|
|
121
|
+
/* 中间细分隔线 */
|
|
122
|
+
box-shadow: inset 1px 0 0 0 var(--cd-button-group-divider);
|
|
123
|
+
}
|
|
124
|
+
.cd-split-button :global(.cd-dropdown__trigger) {
|
|
125
|
+
display: inline-flex;
|
|
126
|
+
}
|
|
127
|
+
</style>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { DropdownItem } from '../dropdown/types.js';
|
|
3
|
+
import type { Placement } from '@chenzy-design/core';
|
|
4
|
+
import type { ButtonType, ButtonTheme, ButtonSize } from './context.js';
|
|
5
|
+
interface Props {
|
|
6
|
+
type?: ButtonType;
|
|
7
|
+
theme?: ButtonTheme;
|
|
8
|
+
size?: ButtonSize;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
loading?: boolean;
|
|
11
|
+
/** 下拉菜单数据项(透传给 Dropdown.items)。 */
|
|
12
|
+
items?: DropdownItem[];
|
|
13
|
+
/** 下拉浮层位置(透传给 Dropdown.position)。 */
|
|
14
|
+
position?: Placement;
|
|
15
|
+
/** 下拉箭头按钮的 aria-label(无文字按钮必填)。 */
|
|
16
|
+
triggerAriaLabel?: string;
|
|
17
|
+
/** 选中下拉项回调。 */
|
|
18
|
+
onSelect?: (key: string | number) => void;
|
|
19
|
+
/** 主按钮点击回调。 */
|
|
20
|
+
onclick?: (e: MouseEvent) => void;
|
|
21
|
+
/** 分裂按钮组语义标签(root aria-label,对齐 Semi)。 */
|
|
22
|
+
ariaLabel?: string;
|
|
23
|
+
/** 根元素自定义类名(透传)。 */
|
|
24
|
+
class?: string;
|
|
25
|
+
/** 根元素自定义内联样式(透传)。 */
|
|
26
|
+
style?: string;
|
|
27
|
+
/** 左侧主按钮内容。 */
|
|
28
|
+
children?: Snippet;
|
|
29
|
+
/** 自定义下拉菜单体(替代 items)。 */
|
|
30
|
+
menu?: Snippet;
|
|
31
|
+
}
|
|
32
|
+
declare const SplitButtonGroup: import("svelte").Component<Props, {}, "">;
|
|
33
|
+
type SplitButtonGroup = ReturnType<typeof SplitButtonGroup>;
|
|
34
|
+
export default SplitButtonGroup;
|
|
35
|
+
//# sourceMappingURL=SplitButtonGroup.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitButtonGroup.svelte.d.ts","sourceRoot":"","sources":["../../src/button/SplitButtonGroup.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtE,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC1C,eAAe;IACf,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA6DH,QAAA,MAAM,gBAAgB,2CAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ButtonType = 'primary' | 'secondary' | 'tertiary' | 'warning' | 'danger';
|
|
2
|
+
export type ButtonTheme = 'solid' | 'borderless' | 'light' | 'outline';
|
|
3
|
+
export type ButtonSize = 'small' | 'default' | 'large';
|
|
4
|
+
export interface ButtonGroupContext {
|
|
5
|
+
type?: ButtonType | undefined;
|
|
6
|
+
theme?: ButtonTheme | undefined;
|
|
7
|
+
size?: ButtonSize | undefined;
|
|
8
|
+
disabled?: boolean | undefined;
|
|
9
|
+
colorful?: boolean | undefined;
|
|
10
|
+
}
|
|
11
|
+
export declare const BUTTON_GROUP_CTX: unique symbol;
|
|
12
|
+
/** Button 内部读取 ButtonGroup 上下文(无则 undefined)。 */
|
|
13
|
+
export declare function getButtonGroupContext(): ButtonGroupContext | undefined;
|
|
14
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/button/context.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AACrF,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AACvE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED,eAAO,MAAM,gBAAgB,eAA4B,CAAC;AAE1D,iDAAiD;AACjD,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,SAAS,CAItE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ButtonGroup → Button 上下文。
|
|
3
|
+
* ButtonGroup 通过 setContext 提供组级默认值(size/type/theme/disabled);
|
|
4
|
+
* Button 通过 getContext 读取,仅在「未显式设置该 prop」时作为默认回退,
|
|
5
|
+
* 不破坏 Button 现有 API(显式 prop 始终优先)。
|
|
6
|
+
*/
|
|
7
|
+
import { getContext, hasContext } from 'svelte';
|
|
8
|
+
export const BUTTON_GROUP_CTX = Symbol('cd-button-group');
|
|
9
|
+
/** Button 内部读取 ButtonGroup 上下文(无则 undefined)。 */
|
|
10
|
+
export function getButtonGroupContext() {
|
|
11
|
+
return hasContext(BUTTON_GROUP_CTX)
|
|
12
|
+
? getContext(BUTTON_GROUP_CTX)
|
|
13
|
+
: undefined;
|
|
14
|
+
}
|
package/dist/button/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export { default as Button } from './Button.svelte';
|
|
2
|
+
export { default as ButtonGroup } from './ButtonGroup.svelte';
|
|
3
|
+
export { default as SplitButtonGroup } from './SplitButtonGroup.svelte';
|
|
2
4
|
export { meta as buttonMeta } from './meta.js';
|
|
5
|
+
export { BUTTON_GROUP_CTX, getButtonGroupContext, type ButtonGroupContext, type ButtonType, type ButtonTheme, type ButtonSize, } from './context.js';
|
|
3
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC"}
|
package/dist/button/index.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export { default as Button } from './Button.svelte';
|
|
2
|
+
export { default as ButtonGroup } from './ButtonGroup.svelte';
|
|
3
|
+
export { default as SplitButtonGroup } from './SplitButtonGroup.svelte';
|
|
2
4
|
export { meta as buttonMeta } from './meta.js';
|
|
5
|
+
export { BUTTON_GROUP_CTX, getButtonGroupContext, } from './context.js';
|
package/dist/button/meta.d.ts
CHANGED
|
@@ -10,46 +10,94 @@ export declare const meta: {
|
|
|
10
10
|
readonly name: "type";
|
|
11
11
|
readonly type: "'primary'|'secondary'|'tertiary'|'warning'|'danger'";
|
|
12
12
|
readonly default: "secondary";
|
|
13
|
+
readonly desc: "语义类型";
|
|
13
14
|
}, {
|
|
14
15
|
readonly name: "theme";
|
|
15
16
|
readonly type: "'solid'|'borderless'|'light'|'outline'";
|
|
16
17
|
readonly default: "light";
|
|
18
|
+
readonly desc: "视觉变体:有背景/无背景/浅背景/边框";
|
|
17
19
|
}, {
|
|
18
20
|
readonly name: "size";
|
|
19
21
|
readonly type: "'small'|'default'|'large'";
|
|
20
22
|
readonly default: "default";
|
|
23
|
+
readonly desc: "尺寸";
|
|
21
24
|
}, {
|
|
22
25
|
readonly name: "block";
|
|
23
26
|
readonly type: "boolean";
|
|
24
27
|
readonly default: "false";
|
|
28
|
+
readonly desc: "撑满容器宽度";
|
|
25
29
|
}, {
|
|
26
30
|
readonly name: "disabled";
|
|
27
31
|
readonly type: "boolean";
|
|
28
32
|
readonly default: "false";
|
|
33
|
+
readonly desc: "禁用状态";
|
|
29
34
|
}, {
|
|
30
35
|
readonly name: "loading";
|
|
31
36
|
readonly type: "boolean";
|
|
32
37
|
readonly default: "false";
|
|
38
|
+
readonly desc: "加载态(带 Spin,禁用点击)";
|
|
39
|
+
}, {
|
|
40
|
+
readonly name: "colorful";
|
|
41
|
+
readonly type: "boolean";
|
|
42
|
+
readonly default: "false";
|
|
43
|
+
readonly desc: "AI 多彩按钮:所有 theme 下品牌蓝→紫渐变;type 仅 primary/tertiary 有意义";
|
|
44
|
+
}, {
|
|
45
|
+
readonly name: "htmlType";
|
|
46
|
+
readonly type: "'button'|'submit'|'reset'";
|
|
47
|
+
readonly default: "button";
|
|
48
|
+
readonly desc: "原生 button 的 type 值";
|
|
49
|
+
}, {
|
|
50
|
+
readonly name: "icon";
|
|
51
|
+
readonly type: "Snippet";
|
|
52
|
+
readonly default: "undefined";
|
|
53
|
+
readonly desc: "图标插槽;纯图标按钮需提供 ariaLabel";
|
|
33
54
|
}, {
|
|
34
55
|
readonly name: "iconPosition";
|
|
35
56
|
readonly type: "'left'|'right'";
|
|
36
57
|
readonly default: "left";
|
|
37
58
|
readonly desc: "图标相对文字位置";
|
|
38
59
|
}, {
|
|
39
|
-
readonly name: "
|
|
60
|
+
readonly name: "noHorizontalPadding";
|
|
61
|
+
readonly type: "boolean|'left'|'right'|('left'|'right')[]";
|
|
62
|
+
readonly default: "false";
|
|
63
|
+
readonly desc: "仅设置 icon 时去单/双侧水平内距";
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "ariaLabel";
|
|
40
66
|
readonly type: "string";
|
|
41
67
|
readonly default: "undefined";
|
|
42
|
-
readonly desc: "
|
|
68
|
+
readonly desc: "无障碍名;纯图标按钮必填";
|
|
43
69
|
}, {
|
|
44
|
-
readonly name: "
|
|
70
|
+
readonly name: "class";
|
|
45
71
|
readonly type: "string";
|
|
46
72
|
readonly default: "undefined";
|
|
47
|
-
readonly desc: "
|
|
73
|
+
readonly desc: "根元素自定义类名";
|
|
74
|
+
}, {
|
|
75
|
+
readonly name: "style";
|
|
76
|
+
readonly type: "string";
|
|
77
|
+
readonly default: "undefined";
|
|
78
|
+
readonly desc: "根元素自定义内联样式";
|
|
79
|
+
}, {
|
|
80
|
+
readonly name: "contentClassName";
|
|
81
|
+
readonly type: "string";
|
|
82
|
+
readonly default: "undefined";
|
|
83
|
+
readonly desc: "内容区自定义类名";
|
|
48
84
|
}];
|
|
49
85
|
readonly events: readonly [{
|
|
50
86
|
readonly name: "onclick";
|
|
51
87
|
readonly payload: "MouseEvent";
|
|
52
88
|
readonly desc: "disabled/loading 时不触发";
|
|
89
|
+
}, {
|
|
90
|
+
readonly name: "onmousedown";
|
|
91
|
+
readonly payload: "MouseEvent";
|
|
92
|
+
readonly desc: "鼠标按下";
|
|
93
|
+
}, {
|
|
94
|
+
readonly name: "onmouseenter";
|
|
95
|
+
readonly payload: "MouseEvent";
|
|
96
|
+
readonly desc: "鼠标移入";
|
|
97
|
+
}, {
|
|
98
|
+
readonly name: "onmouseleave";
|
|
99
|
+
readonly payload: "MouseEvent";
|
|
100
|
+
readonly desc: "鼠标移出";
|
|
53
101
|
}];
|
|
54
102
|
readonly slots: readonly [{
|
|
55
103
|
readonly name: "children";
|
|
@@ -58,6 +106,127 @@ export declare const meta: {
|
|
|
58
106
|
readonly name: "icon";
|
|
59
107
|
readonly desc: "图标";
|
|
60
108
|
}];
|
|
109
|
+
readonly subComponents: readonly [{
|
|
110
|
+
readonly name: "ButtonGroup";
|
|
111
|
+
readonly usage: "<ButtonGroup> 包裹多个 <Button>,组级默认经 context 透传";
|
|
112
|
+
readonly desc: "横向拼接多个 Button;组级 size/type/theme/disabled/colorful 经 context 透传,组内 Button 显式 prop 始终优先。";
|
|
113
|
+
readonly props: readonly [{
|
|
114
|
+
readonly name: "type";
|
|
115
|
+
readonly type: "'primary'|'secondary'|'tertiary'|'warning'|'danger'";
|
|
116
|
+
readonly default: "undefined";
|
|
117
|
+
readonly desc: "组级语义类型";
|
|
118
|
+
}, {
|
|
119
|
+
readonly name: "theme";
|
|
120
|
+
readonly type: "'solid'|'borderless'|'light'|'outline'";
|
|
121
|
+
readonly default: "undefined";
|
|
122
|
+
readonly desc: "组级视觉变体";
|
|
123
|
+
}, {
|
|
124
|
+
readonly name: "size";
|
|
125
|
+
readonly type: "'small'|'default'|'large'";
|
|
126
|
+
readonly default: "undefined";
|
|
127
|
+
readonly desc: "组级尺寸";
|
|
128
|
+
}, {
|
|
129
|
+
readonly name: "disabled";
|
|
130
|
+
readonly type: "boolean";
|
|
131
|
+
readonly default: "undefined";
|
|
132
|
+
readonly desc: "组级禁用,整组一并禁用";
|
|
133
|
+
}, {
|
|
134
|
+
readonly name: "colorful";
|
|
135
|
+
readonly type: "boolean";
|
|
136
|
+
readonly default: "undefined";
|
|
137
|
+
readonly desc: "组级多彩,透传给组内 Button";
|
|
138
|
+
}, {
|
|
139
|
+
readonly name: "ariaLabel";
|
|
140
|
+
readonly type: "string";
|
|
141
|
+
readonly default: "undefined";
|
|
142
|
+
readonly desc: "按钮组语义标签(aria-label)";
|
|
143
|
+
}, {
|
|
144
|
+
readonly name: "class";
|
|
145
|
+
readonly type: "string";
|
|
146
|
+
readonly default: "undefined";
|
|
147
|
+
readonly desc: "根元素自定义类名";
|
|
148
|
+
}, {
|
|
149
|
+
readonly name: "style";
|
|
150
|
+
readonly type: "string";
|
|
151
|
+
readonly default: "undefined";
|
|
152
|
+
readonly desc: "根元素自定义内联样式";
|
|
153
|
+
}];
|
|
154
|
+
}, {
|
|
155
|
+
readonly name: "SplitButtonGroup";
|
|
156
|
+
readonly usage: "<SplitButtonGroup items={...}>,左侧主操作 + 右侧箭头触发下拉";
|
|
157
|
+
readonly desc: "分裂按钮:左侧主 Button + 右侧箭头按钮,点击箭头弹出 Dropdown(复用 items API 或 menu snippet)。";
|
|
158
|
+
readonly props: readonly [{
|
|
159
|
+
readonly name: "type";
|
|
160
|
+
readonly type: "'primary'|'secondary'|'tertiary'|'warning'|'danger'";
|
|
161
|
+
readonly default: "primary";
|
|
162
|
+
readonly desc: "两侧按钮语义类型";
|
|
163
|
+
}, {
|
|
164
|
+
readonly name: "theme";
|
|
165
|
+
readonly type: "'solid'|'borderless'|'light'|'outline'";
|
|
166
|
+
readonly default: "solid";
|
|
167
|
+
readonly desc: "两侧按钮视觉变体";
|
|
168
|
+
}, {
|
|
169
|
+
readonly name: "size";
|
|
170
|
+
readonly type: "'small'|'default'|'large'";
|
|
171
|
+
readonly default: "default";
|
|
172
|
+
readonly desc: "两侧按钮尺寸";
|
|
173
|
+
}, {
|
|
174
|
+
readonly name: "disabled";
|
|
175
|
+
readonly type: "boolean";
|
|
176
|
+
readonly default: "false";
|
|
177
|
+
readonly desc: "禁用整个分裂按钮";
|
|
178
|
+
}, {
|
|
179
|
+
readonly name: "loading";
|
|
180
|
+
readonly type: "boolean";
|
|
181
|
+
readonly default: "false";
|
|
182
|
+
readonly desc: "主按钮加载态";
|
|
183
|
+
}, {
|
|
184
|
+
readonly name: "items";
|
|
185
|
+
readonly type: "DropdownItem[]";
|
|
186
|
+
readonly default: "[]";
|
|
187
|
+
readonly desc: "下拉菜单数据项(透传给 Dropdown.items)";
|
|
188
|
+
}, {
|
|
189
|
+
readonly name: "position";
|
|
190
|
+
readonly type: "Placement";
|
|
191
|
+
readonly default: "bottomEnd";
|
|
192
|
+
readonly desc: "下拉浮层位置";
|
|
193
|
+
}, {
|
|
194
|
+
readonly name: "triggerAriaLabel";
|
|
195
|
+
readonly type: "string";
|
|
196
|
+
readonly default: "更多操作";
|
|
197
|
+
readonly desc: "下拉箭头按钮的 aria-label";
|
|
198
|
+
}, {
|
|
199
|
+
readonly name: "onSelect";
|
|
200
|
+
readonly type: "(key: string|number) => void";
|
|
201
|
+
readonly default: "undefined";
|
|
202
|
+
readonly desc: "选中下拉项回调";
|
|
203
|
+
}, {
|
|
204
|
+
readonly name: "onclick";
|
|
205
|
+
readonly type: "(e: MouseEvent) => void";
|
|
206
|
+
readonly default: "undefined";
|
|
207
|
+
readonly desc: "主按钮点击回调";
|
|
208
|
+
}, {
|
|
209
|
+
readonly name: "menu";
|
|
210
|
+
readonly type: "Snippet";
|
|
211
|
+
readonly default: "undefined";
|
|
212
|
+
readonly desc: "自定义下拉菜单体(替代 items)";
|
|
213
|
+
}, {
|
|
214
|
+
readonly name: "ariaLabel";
|
|
215
|
+
readonly type: "string";
|
|
216
|
+
readonly default: "undefined";
|
|
217
|
+
readonly desc: "分裂按钮组语义标签(root aria-label)";
|
|
218
|
+
}, {
|
|
219
|
+
readonly name: "class";
|
|
220
|
+
readonly type: "string";
|
|
221
|
+
readonly default: "undefined";
|
|
222
|
+
readonly desc: "根元素自定义类名";
|
|
223
|
+
}, {
|
|
224
|
+
readonly name: "style";
|
|
225
|
+
readonly type: "string";
|
|
226
|
+
readonly default: "undefined";
|
|
227
|
+
readonly desc: "根元素自定义内联样式";
|
|
228
|
+
}];
|
|
229
|
+
}];
|
|
61
230
|
readonly a11y: {
|
|
62
231
|
readonly role: "button";
|
|
63
232
|
readonly keyboard: readonly ["Enter", "Space"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/button/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/button/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEP,CAAC"}
|
package/dist/button/meta.js
CHANGED
|
@@ -7,21 +7,70 @@ export const meta = {
|
|
|
7
7
|
category: 'basic',
|
|
8
8
|
description: '触发即时操作的按钮,最基础的交互原子。',
|
|
9
9
|
props: [
|
|
10
|
-
{ name: 'type', type: "'primary'|'secondary'|'tertiary'|'warning'|'danger'", default: 'secondary' },
|
|
11
|
-
{ name: 'theme', type: "'solid'|'borderless'|'light'|'outline'", default: 'light' },
|
|
12
|
-
{ name: 'size', type: "'small'|'default'|'large'", default: 'default' },
|
|
13
|
-
{ name: 'block', type: 'boolean', default: 'false' },
|
|
14
|
-
{ name: 'disabled', type: 'boolean', default: 'false' },
|
|
15
|
-
{ name: 'loading', type: 'boolean', default: 'false' },
|
|
10
|
+
{ name: 'type', type: "'primary'|'secondary'|'tertiary'|'warning'|'danger'", default: 'secondary', desc: '语义类型' },
|
|
11
|
+
{ name: 'theme', type: "'solid'|'borderless'|'light'|'outline'", default: 'light', desc: '视觉变体:有背景/无背景/浅背景/边框' },
|
|
12
|
+
{ name: 'size', type: "'small'|'default'|'large'", default: 'default', desc: '尺寸' },
|
|
13
|
+
{ name: 'block', type: 'boolean', default: 'false', desc: '撑满容器宽度' },
|
|
14
|
+
{ name: 'disabled', type: 'boolean', default: 'false', desc: '禁用状态' },
|
|
15
|
+
{ name: 'loading', type: 'boolean', default: 'false', desc: '加载态(带 Spin,禁用点击)' },
|
|
16
|
+
{ name: 'colorful', type: 'boolean', default: 'false', desc: 'AI 多彩按钮:所有 theme 下品牌蓝→紫渐变;type 仅 primary/tertiary 有意义' },
|
|
17
|
+
{ name: 'htmlType', type: "'button'|'submit'|'reset'", default: 'button', desc: '原生 button 的 type 值' },
|
|
18
|
+
{ name: 'icon', type: 'Snippet', default: 'undefined', desc: '图标插槽;纯图标按钮需提供 ariaLabel' },
|
|
16
19
|
{ name: 'iconPosition', type: "'left'|'right'", default: 'left', desc: '图标相对文字位置' },
|
|
17
|
-
{ name: '
|
|
18
|
-
{ name: 'ariaLabel', type: 'string', default: 'undefined', desc: '
|
|
20
|
+
{ name: 'noHorizontalPadding', type: "boolean|'left'|'right'|('left'|'right')[]", default: 'false', desc: '仅设置 icon 时去单/双侧水平内距' },
|
|
21
|
+
{ name: 'ariaLabel', type: 'string', default: 'undefined', desc: '无障碍名;纯图标按钮必填' },
|
|
22
|
+
{ name: 'class', type: 'string', default: 'undefined', desc: '根元素自定义类名' },
|
|
23
|
+
{ name: 'style', type: 'string', default: 'undefined', desc: '根元素自定义内联样式' },
|
|
24
|
+
{ name: 'contentClassName', type: 'string', default: 'undefined', desc: '内容区自定义类名' },
|
|
25
|
+
],
|
|
26
|
+
events: [
|
|
27
|
+
{ name: 'onclick', payload: 'MouseEvent', desc: 'disabled/loading 时不触发' },
|
|
28
|
+
{ name: 'onmousedown', payload: 'MouseEvent', desc: '鼠标按下' },
|
|
29
|
+
{ name: 'onmouseenter', payload: 'MouseEvent', desc: '鼠标移入' },
|
|
30
|
+
{ name: 'onmouseleave', payload: 'MouseEvent', desc: '鼠标移出' },
|
|
19
31
|
],
|
|
20
|
-
events: [{ name: 'onclick', payload: 'MouseEvent', desc: 'disabled/loading 时不触发' }],
|
|
21
32
|
slots: [
|
|
22
33
|
{ name: 'children', desc: '按钮文本' },
|
|
23
34
|
{ name: 'icon', desc: '图标' },
|
|
24
35
|
],
|
|
36
|
+
subComponents: [
|
|
37
|
+
{
|
|
38
|
+
name: 'ButtonGroup',
|
|
39
|
+
usage: '<ButtonGroup> 包裹多个 <Button>,组级默认经 context 透传',
|
|
40
|
+
desc: '横向拼接多个 Button;组级 size/type/theme/disabled/colorful 经 context 透传,组内 Button 显式 prop 始终优先。',
|
|
41
|
+
props: [
|
|
42
|
+
{ name: 'type', type: "'primary'|'secondary'|'tertiary'|'warning'|'danger'", default: 'undefined', desc: '组级语义类型' },
|
|
43
|
+
{ name: 'theme', type: "'solid'|'borderless'|'light'|'outline'", default: 'undefined', desc: '组级视觉变体' },
|
|
44
|
+
{ name: 'size', type: "'small'|'default'|'large'", default: 'undefined', desc: '组级尺寸' },
|
|
45
|
+
{ name: 'disabled', type: 'boolean', default: 'undefined', desc: '组级禁用,整组一并禁用' },
|
|
46
|
+
{ name: 'colorful', type: 'boolean', default: 'undefined', desc: '组级多彩,透传给组内 Button' },
|
|
47
|
+
{ name: 'ariaLabel', type: 'string', default: 'undefined', desc: '按钮组语义标签(aria-label)' },
|
|
48
|
+
{ name: 'class', type: 'string', default: 'undefined', desc: '根元素自定义类名' },
|
|
49
|
+
{ name: 'style', type: 'string', default: 'undefined', desc: '根元素自定义内联样式' },
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'SplitButtonGroup',
|
|
54
|
+
usage: '<SplitButtonGroup items={...}>,左侧主操作 + 右侧箭头触发下拉',
|
|
55
|
+
desc: '分裂按钮:左侧主 Button + 右侧箭头按钮,点击箭头弹出 Dropdown(复用 items API 或 menu snippet)。',
|
|
56
|
+
props: [
|
|
57
|
+
{ name: 'type', type: "'primary'|'secondary'|'tertiary'|'warning'|'danger'", default: 'primary', desc: '两侧按钮语义类型' },
|
|
58
|
+
{ name: 'theme', type: "'solid'|'borderless'|'light'|'outline'", default: 'solid', desc: '两侧按钮视觉变体' },
|
|
59
|
+
{ name: 'size', type: "'small'|'default'|'large'", default: 'default', desc: '两侧按钮尺寸' },
|
|
60
|
+
{ name: 'disabled', type: 'boolean', default: 'false', desc: '禁用整个分裂按钮' },
|
|
61
|
+
{ name: 'loading', type: 'boolean', default: 'false', desc: '主按钮加载态' },
|
|
62
|
+
{ name: 'items', type: 'DropdownItem[]', default: '[]', desc: '下拉菜单数据项(透传给 Dropdown.items)' },
|
|
63
|
+
{ name: 'position', type: 'Placement', default: 'bottomEnd', desc: '下拉浮层位置' },
|
|
64
|
+
{ name: 'triggerAriaLabel', type: 'string', default: '更多操作', desc: '下拉箭头按钮的 aria-label' },
|
|
65
|
+
{ name: 'onSelect', type: '(key: string|number) => void', default: 'undefined', desc: '选中下拉项回调' },
|
|
66
|
+
{ name: 'onclick', type: '(e: MouseEvent) => void', default: 'undefined', desc: '主按钮点击回调' },
|
|
67
|
+
{ name: 'menu', type: 'Snippet', default: 'undefined', desc: '自定义下拉菜单体(替代 items)' },
|
|
68
|
+
{ name: 'ariaLabel', type: 'string', default: 'undefined', desc: '分裂按钮组语义标签(root aria-label)' },
|
|
69
|
+
{ name: 'class', type: 'string', default: 'undefined', desc: '根元素自定义类名' },
|
|
70
|
+
{ name: 'style', type: 'string', default: 'undefined', desc: '根元素自定义内联样式' },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
],
|
|
25
74
|
a11y: { role: 'button', keyboard: ['Enter', 'Space'] },
|
|
26
75
|
tokens: ['--cd-button-*'],
|
|
27
76
|
examples: [{ title: '基础', code: '<Button type="primary">确定</Button>' }],
|
|
@@ -991,7 +991,7 @@
|
|
|
991
991
|
.cd-calendar {
|
|
992
992
|
display: flex;
|
|
993
993
|
flex-direction: column;
|
|
994
|
-
gap: var(--cd-spacing-
|
|
994
|
+
gap: var(--cd-spacing-tight);
|
|
995
995
|
color: var(--cd-calendar-text);
|
|
996
996
|
background: var(--cd-calendar-bg);
|
|
997
997
|
border: 1px solid var(--cd-calendar-border);
|
|
@@ -1002,8 +1002,8 @@
|
|
|
1002
1002
|
.cd-calendar__toolbar {
|
|
1003
1003
|
display: flex;
|
|
1004
1004
|
align-items: center;
|
|
1005
|
-
gap: var(--cd-spacing-
|
|
1006
|
-
padding: var(--cd-spacing-
|
|
1005
|
+
gap: var(--cd-spacing-tight);
|
|
1006
|
+
padding: var(--cd-spacing-tight) var(--cd-spacing-base-tight);
|
|
1007
1007
|
background: var(--cd-calendar-header-bg);
|
|
1008
1008
|
border-bottom: 1px solid var(--cd-calendar-border);
|
|
1009
1009
|
border-start-start-radius: var(--cd-calendar-radius);
|
|
@@ -1020,7 +1020,7 @@
|
|
|
1020
1020
|
display: inline-flex;
|
|
1021
1021
|
align-items: center;
|
|
1022
1022
|
justify-content: center;
|
|
1023
|
-
padding: var(--cd-spacing-
|
|
1023
|
+
padding: var(--cd-spacing-extra-tight) var(--cd-spacing-tight);
|
|
1024
1024
|
color: inherit;
|
|
1025
1025
|
background: transparent;
|
|
1026
1026
|
border: 1px solid var(--cd-calendar-border);
|
|
@@ -1050,7 +1050,7 @@
|
|
|
1050
1050
|
}
|
|
1051
1051
|
|
|
1052
1052
|
.cd-calendar__weekday {
|
|
1053
|
-
padding: var(--cd-spacing-
|
|
1053
|
+
padding: var(--cd-spacing-extra-tight);
|
|
1054
1054
|
color: var(--cd-calendar-text-secondary);
|
|
1055
1055
|
text-align: center;
|
|
1056
1056
|
font-weight: 500;
|
|
@@ -1063,9 +1063,9 @@
|
|
|
1063
1063
|
.cd-calendar__cell {
|
|
1064
1064
|
display: flex;
|
|
1065
1065
|
flex-direction: column;
|
|
1066
|
-
gap: var(--cd-spacing-
|
|
1066
|
+
gap: var(--cd-spacing-extra-tight);
|
|
1067
1067
|
min-block-size: var(--cd-calendar-cell-min-h);
|
|
1068
|
-
padding: var(--cd-spacing-
|
|
1068
|
+
padding: var(--cd-spacing-extra-tight);
|
|
1069
1069
|
border-inline-end: 1px solid var(--cd-calendar-border);
|
|
1070
1070
|
border-block-end: 1px solid var(--cd-calendar-border);
|
|
1071
1071
|
cursor: pointer;
|
|
@@ -1146,10 +1146,10 @@
|
|
|
1146
1146
|
.cd-calendar__event {
|
|
1147
1147
|
display: flex;
|
|
1148
1148
|
align-items: center;
|
|
1149
|
-
gap: var(--cd-spacing-
|
|
1149
|
+
gap: var(--cd-spacing-extra-tight);
|
|
1150
1150
|
min-inline-size: 0;
|
|
1151
1151
|
padding-block: 1px;
|
|
1152
|
-
padding-inline: var(--cd-spacing-
|
|
1152
|
+
padding-inline: var(--cd-spacing-extra-tight);
|
|
1153
1153
|
color: var(--cd-calendar-text);
|
|
1154
1154
|
background: var(--cd-calendar-cell-bg-hover);
|
|
1155
1155
|
border-radius: var(--cd-calendar-radius);
|
|
@@ -1213,8 +1213,8 @@
|
|
|
1213
1213
|
.cd-calendar__allday {
|
|
1214
1214
|
display: flex;
|
|
1215
1215
|
align-items: flex-start;
|
|
1216
|
-
gap: var(--cd-spacing-
|
|
1217
|
-
padding: var(--cd-spacing-
|
|
1216
|
+
gap: var(--cd-spacing-tight);
|
|
1217
|
+
padding: var(--cd-spacing-extra-tight) var(--cd-spacing-tight);
|
|
1218
1218
|
border-block-end: 1px solid var(--cd-calendar-border);
|
|
1219
1219
|
background: var(--cd-calendar-header-bg);
|
|
1220
1220
|
}
|
|
@@ -1239,7 +1239,7 @@
|
|
|
1239
1239
|
.cd-calendar__hour {
|
|
1240
1240
|
display: flex;
|
|
1241
1241
|
align-items: stretch;
|
|
1242
|
-
gap: var(--cd-spacing-
|
|
1242
|
+
gap: var(--cd-spacing-tight);
|
|
1243
1243
|
min-block-size: var(--cd-calendar-hour-min-h, 40px);
|
|
1244
1244
|
border-block-end: 1px solid var(--cd-calendar-border);
|
|
1245
1245
|
}
|
|
@@ -1248,7 +1248,7 @@
|
|
|
1248
1248
|
}
|
|
1249
1249
|
.cd-calendar__hour-label {
|
|
1250
1250
|
flex: 0 0 var(--cd-calendar-hour-label-w, 56px);
|
|
1251
|
-
padding: var(--cd-spacing-
|
|
1251
|
+
padding: var(--cd-spacing-extra-tight) var(--cd-spacing-tight);
|
|
1252
1252
|
color: var(--cd-calendar-text-secondary);
|
|
1253
1253
|
text-align: end;
|
|
1254
1254
|
font-variant-numeric: tabular-nums;
|
|
@@ -1260,7 +1260,7 @@
|
|
|
1260
1260
|
gap: 2px;
|
|
1261
1261
|
flex: 1 1 auto;
|
|
1262
1262
|
min-inline-size: 0;
|
|
1263
|
-
padding: var(--cd-spacing-
|
|
1263
|
+
padding: var(--cd-spacing-extra-tight);
|
|
1264
1264
|
}
|
|
1265
1265
|
.cd-calendar__event--timed {
|
|
1266
1266
|
padding-block: 2px;
|
|
@@ -1291,8 +1291,8 @@
|
|
|
1291
1291
|
.cd-calendar-popup__trigger {
|
|
1292
1292
|
display: inline-flex;
|
|
1293
1293
|
align-items: center;
|
|
1294
|
-
gap: var(--cd-spacing-
|
|
1295
|
-
padding: var(--cd-spacing-
|
|
1294
|
+
gap: var(--cd-spacing-tight);
|
|
1295
|
+
padding: var(--cd-spacing-extra-tight) var(--cd-spacing-base-tight);
|
|
1296
1296
|
color: var(--cd-calendar-text);
|
|
1297
1297
|
background: var(--cd-calendar-bg);
|
|
1298
1298
|
border: 1px solid var(--cd-calendar-border);
|