@kine-design/core 0.0.1-beta.1 → 0.0.1-beta.2
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/assets/style/global.css +1 -0
- package/assets/style/var/Wuxing.css +71 -0
- package/assets/style/var.css +23 -0
- package/components/base/affix/api.ts +16 -0
- package/components/base/affix/index.ts +15 -0
- package/components/base/affix/props.d.ts +34 -0
- package/components/base/affix/useAffix.ts +123 -0
- package/components/base/alert/api.ts +18 -0
- package/components/base/alert/index.ts +15 -0
- package/components/base/alert/props.d.ts +50 -0
- package/components/base/anchor/api.ts +20 -0
- package/components/base/anchor/index.ts +16 -0
- package/components/base/anchor/props.d.ts +46 -0
- package/components/base/anchor/useAnchor.ts +83 -0
- package/components/base/autoComplete/api.ts +24 -0
- package/components/base/autoComplete/index.ts +17 -0
- package/components/base/autoComplete/props.d.ts +75 -0
- package/components/base/autoComplete/useAutoComplete.ts +149 -0
- package/components/base/avatar/api.ts +17 -0
- package/components/base/avatar/avatar.css +61 -0
- package/components/base/avatar/index.ts +14 -0
- package/components/base/avatar/props.d.ts +37 -0
- package/components/base/backTop/api.ts +17 -0
- package/components/base/backTop/index.ts +15 -0
- package/components/base/backTop/props.d.ts +38 -0
- package/components/base/backTop/useBackTop.ts +62 -0
- package/components/base/badge/api.ts +22 -0
- package/components/base/badge/index.ts +15 -0
- package/components/base/badge/props.d.ts +50 -0
- package/components/base/button/api.ts +28 -0
- package/components/base/button/button.css +34 -0
- package/components/base/button/index.ts +16 -0
- package/components/base/button/props.d.ts +64 -0
- package/components/base/button/useButton.ts +37 -0
- package/components/base/card/api.ts +17 -0
- package/components/base/card/index.ts +15 -0
- package/components/base/card/props.d.ts +37 -0
- package/components/base/carousel/api.ts +28 -0
- package/components/base/carousel/index.ts +17 -0
- package/components/base/carousel/props.d.ts +72 -0
- package/components/base/carousel/useCarousel.ts +151 -0
- package/components/base/cascader/api.ts +23 -0
- package/components/base/cascader/index.ts +18 -0
- package/components/base/cascader/props.d.ts +103 -0
- package/components/base/cascader/useCascader.ts +334 -0
- package/components/base/checkbox/api.ts +24 -0
- package/components/base/checkbox/checkbox.css +0 -0
- package/components/base/checkbox/index.ts +16 -0
- package/components/base/checkbox/props.d.ts +77 -0
- package/components/base/checkbox/useCheckbox.ts +42 -0
- package/components/base/collapse/api.ts +21 -0
- package/components/base/collapse/index.ts +16 -0
- package/components/base/collapse/props.d.ts +45 -0
- package/components/base/collapse/useCollapse.ts +80 -0
- package/components/base/datePicker/api.ts +18 -0
- package/components/base/datePicker/index.ts +19 -0
- package/components/base/datePicker/props.d.ts +60 -0
- package/components/base/datePicker/useDatePicker.ts +392 -0
- package/components/base/divider/api.ts +15 -0
- package/components/base/divider/divider.css +11 -0
- package/components/base/divider/index.ts +15 -0
- package/components/base/divider/props.d.ts +30 -0
- package/components/base/dropdown/api.ts +33 -0
- package/components/base/dropdown/index.ts +16 -0
- package/components/base/dropdown/props.d.ts +60 -0
- package/components/base/dropdown/useDropdown.ts +123 -0
- package/components/base/empty/api.ts +15 -0
- package/components/base/empty/index.ts +15 -0
- package/components/base/empty/props.d.ts +26 -0
- package/components/base/image/api.ts +25 -0
- package/components/base/image/index.ts +18 -0
- package/components/base/image/props.d.ts +67 -0
- package/components/base/image/useImage.ts +119 -0
- package/components/base/input/api.ts +19 -0
- package/components/base/input/index.ts +16 -0
- package/components/base/input/input.css +19 -0
- package/components/base/input/props.d.ts +60 -0
- package/components/base/input/useInput.ts +53 -0
- package/components/base/inputNumber/api.ts +21 -0
- package/components/base/inputNumber/index.ts +15 -0
- package/components/base/inputNumber/props.d.ts +64 -0
- package/components/base/inputNumber/useInputNumber.ts +140 -0
- package/components/base/li/api.ts +15 -0
- package/components/base/li/index.ts +13 -0
- package/components/base/li/props.d.ts +30 -0
- package/components/base/list/api.ts +16 -0
- package/components/base/list/index.ts +15 -0
- package/components/base/list/props.d.ts +33 -0
- package/components/base/list/useList.ts +36 -0
- package/components/base/loading/api.ts +17 -0
- package/components/base/loading/index.ts +15 -0
- package/components/base/loading/props.d.ts +38 -0
- package/components/base/popover/api.ts +28 -0
- package/components/base/popover/index.ts +15 -0
- package/components/base/popover/props.d.ts +73 -0
- package/components/base/popover/usePopover.ts +188 -0
- package/components/base/progress/api.ts +18 -0
- package/components/base/progress/index.ts +15 -0
- package/components/base/progress/props.d.ts +53 -0
- package/components/base/progress/useProgress.ts +28 -0
- package/components/base/radio/api.ts +19 -0
- package/components/base/radio/index.ts +19 -0
- package/components/base/radio/props.d.ts +59 -0
- package/components/base/radio/useRadio.ts +11 -0
- package/components/base/rate/api.ts +18 -0
- package/components/base/rate/index.ts +15 -0
- package/components/base/rate/props.d.ts +49 -0
- package/components/base/rate/useRate.ts +75 -0
- package/components/base/result/api.ts +20 -0
- package/components/base/result/index.ts +15 -0
- package/components/base/result/props.d.ts +36 -0
- package/components/base/select/api.ts +31 -0
- package/components/base/select/index.ts +18 -0
- package/components/base/select/props.d.ts +132 -0
- package/components/base/select/select.css +7 -0
- package/components/base/select/useSelect.ts +280 -0
- package/components/base/select/useSelectTools.ts +60 -0
- package/components/base/skeleton/api.ts +18 -0
- package/components/base/skeleton/index.ts +15 -0
- package/components/base/skeleton/props.d.ts +41 -0
- package/components/base/slider/api.ts +20 -0
- package/components/base/slider/index.ts +15 -0
- package/components/base/slider/props.d.ts +65 -0
- package/components/base/slider/useSlider.ts +83 -0
- package/components/base/space/api.ts +17 -0
- package/components/base/space/index.ts +15 -0
- package/components/base/space/props.d.ts +39 -0
- package/components/base/steps/api.ts +30 -0
- package/components/base/steps/index.ts +22 -0
- package/components/base/steps/props.d.ts +88 -0
- package/components/base/steps/useSteps.ts +101 -0
- package/components/base/switch/api.ts +22 -0
- package/components/base/switch/index.ts +17 -0
- package/components/base/switch/props.d.ts +66 -0
- package/components/base/switch/useSwitch.tsx +79 -0
- package/components/base/tabs/api.ts +23 -0
- package/components/base/tabs/index.ts +18 -0
- package/components/base/tabs/props.d.ts +41 -0
- package/components/base/tabs/useTabs.ts +66 -0
- package/components/base/tag/api.ts +17 -0
- package/components/base/tag/index.ts +13 -0
- package/components/base/tag/props.d.ts +49 -0
- package/components/base/timePicker/api.ts +21 -0
- package/components/base/timePicker/index.ts +18 -0
- package/components/base/timePicker/props.d.ts +66 -0
- package/components/base/timePicker/useTimePicker.ts +161 -0
- package/components/base/timeline/api.ts +24 -0
- package/components/base/timeline/index.ts +16 -0
- package/components/base/timeline/props.d.ts +60 -0
- package/components/base/tooltip/api.ts +19 -0
- package/components/base/tooltip/index.ts +17 -0
- package/components/base/tooltip/props.d.ts +34 -0
- package/components/base/tooltip/useTooltip.ts +89 -0
- package/components/base/transfer/api.ts +18 -0
- package/components/base/transfer/index.ts +17 -0
- package/components/base/transfer/props.d.ts +63 -0
- package/components/base/transfer/useTransfer.ts +207 -0
- package/components/base/tree/api.ts +47 -0
- package/components/base/tree/index.ts +29 -0
- package/components/base/tree/props.d.ts +108 -0
- package/components/base/tree/tree.ts +263 -0
- package/components/base/tree/useTree.ts +114 -0
- package/components/message/confirm/api.ts +21 -0
- package/components/message/confirm/index.ts +15 -0
- package/components/message/confirm/props.d.ts +69 -0
- package/components/message/dialog/api.ts +19 -0
- package/components/message/dialog/index.ts +15 -0
- package/components/message/dialog/props.d.ts +55 -0
- package/components/message/drawer/api.ts +32 -0
- package/components/message/drawer/index.ts +15 -0
- package/components/message/drawer/props.d.ts +73 -0
- package/components/message/message/api.ts +27 -0
- package/components/message/message/index.ts +20 -0
- package/components/message/message/props.d.ts +54 -0
- package/components/message/message/useMessage.ts +61 -0
- package/components/message/notification/api.ts +23 -0
- package/components/message/notification/index.ts +19 -0
- package/components/message/notification/props.d.ts +64 -0
- package/components/message/notification/useNotification.ts +79 -0
- package/components/message/popover/MPopover.tsx +94 -0
- package/components/message/popover/api.ts +54 -0
- package/components/message/popover/index.ts +17 -0
- package/components/message/popover/popover.css +21 -0
- package/components/message/popover/props.d.ts +76 -0
- package/components/message/popover/usePopover.ts +230 -0
- package/components/other/darkMode/api.ts +17 -0
- package/components/other/darkMode/index.ts +17 -0
- package/components/other/darkMode/props.d.ts +37 -0
- package/components/other/darkMode/useDarkMode.ts +129 -0
- package/components/template/border/api.ts +18 -0
- package/components/template/border/index.ts +15 -0
- package/components/template/border/props.d.ts +41 -0
- package/components/template/breadcrumb/api.ts +15 -0
- package/components/template/breadcrumb/index.ts +15 -0
- package/components/template/breadcrumb/props.d.ts +45 -0
- package/components/template/descriptions/api.ts +23 -0
- package/components/template/descriptions/index.ts +16 -0
- package/components/template/descriptions/props.d.ts +54 -0
- package/components/template/form/api.ts +23 -0
- package/components/template/form/index.ts +20 -0
- package/components/template/form/props.d.ts +60 -0
- package/components/template/grid/api.ts +20 -0
- package/components/template/grid/index.ts +15 -0
- package/components/template/grid/props.d.ts +48 -0
- package/components/template/menu/api.ts +26 -0
- package/components/template/menu/index.ts +19 -0
- package/components/template/menu/props.d.ts +93 -0
- package/components/template/menu/useMenu.ts +155 -0
- package/components/template/pagination/api.ts +22 -0
- package/components/template/pagination/index.ts +18 -0
- package/components/template/pagination/props.d.ts +65 -0
- package/components/template/pagination/usePagination.ts +186 -0
- package/components/template/table/api.ts +18 -0
- package/components/template/table/index.ts +18 -0
- package/components/template/table/props.d.ts +36 -0
- package/components/template/table/useTable.ts +138 -0
- package/components/template/tableColumn/api.ts +17 -0
- package/components/template/tableColumn/index.ts +15 -0
- package/components/template/tableColumn/props.d.ts +32 -0
- package/components/template/virtualList/api.ts +16 -0
- package/components/template/virtualList/index.ts +18 -0
- package/components/template/virtualList/props.d.ts +25 -0
- package/components/template/virtualList/useVirtualList.ts +237 -0
- package/components/types/hook.d.ts +13 -0
- package/components/types/props.d.ts +52 -0
- package/components/types/template.d.ts +59 -0
- package/compositions/common/defineCore.ts +55 -0
- package/compositions/common/useDebounceFn.ts +27 -0
- package/compositions/common/useDrag.ts +65 -0
- package/compositions/common/useElementSize.ts +37 -0
- package/compositions/common/useEventListener.ts +48 -0
- package/compositions/common/usePopover.ts +45 -0
- package/compositions/common/useResizeObserver.ts +43 -0
- package/compositions/common/useTeleport.ts +24 -0
- package/compositions/input/useBooleanInput.ts +52 -0
- package/compositions/modal/useModal.ts +72 -0
- package/compositions/popper/useClickAway.ts +41 -0
- package/compositions/popper/usePopper.ts +63 -0
- package/compositions/utils/filters.ts +135 -0
- package/compositions/virtualList/enums.ts +52 -0
- package/compositions/virtualList/useContainerObserver.ts +82 -0
- package/compositions/virtualList/useEntries.ts +248 -0
- package/compositions/virtualList/useHeightCache.ts +83 -0
- package/compositions/virtualList/useSentinelObserver.ts +81 -0
- package/dist/components/base/affix/useAffix.d.ts +5 -4
- package/dist/components/base/anchor/useAnchor.d.ts +1 -1
- package/dist/components/base/autoComplete/useAutoComplete.d.ts +12 -4
- package/dist/components/base/backTop/useBackTop.d.ts +1 -1
- package/dist/components/base/button/index.d.ts +11 -2
- package/dist/components/base/button/useButton.d.ts +11 -2
- package/dist/components/base/carousel/useCarousel.d.ts +6 -3
- package/dist/components/base/cascader/useCascader.d.ts +23 -11
- package/dist/components/base/checkbox/useCheckbox.d.ts +4 -3
- package/dist/components/base/collapse/useCollapse.d.ts +2 -2
- package/dist/components/base/datePicker/useDatePicker.d.ts +140 -8
- package/dist/components/base/dropdown/useDropdown.d.ts +11 -5
- package/dist/components/base/image/useImage.d.ts +5 -5
- package/dist/components/base/input/useInput.d.ts +1 -2
- package/dist/components/base/inputNumber/useInputNumber.d.ts +2 -2
- package/dist/components/base/popover/usePopover.d.ts +8 -8
- package/dist/components/base/progress/useProgress.d.ts +1 -1
- package/dist/components/base/rate/useRate.d.ts +1 -1
- package/dist/components/base/select/useSelect.d.ts +8 -8
- package/dist/components/base/slider/useSlider.d.ts +3 -3
- package/dist/components/base/steps/index.d.ts +1 -1
- package/dist/components/base/steps/useSteps.d.ts +5 -5
- package/dist/components/base/switch/useSwitch.d.ts +8 -3
- package/dist/components/base/tabs/useTabs.d.ts +2 -2
- package/dist/components/base/timePicker/useTimePicker.d.ts +14 -6
- package/dist/components/base/tooltip/useTooltip.d.ts +14 -4
- package/dist/components/base/transfer/useTransfer.d.ts +15 -15
- package/dist/components/base/tree/index.d.ts +1 -1
- package/dist/components/base/tree/useTree.d.ts +2 -1
- package/dist/components/message/message/useMessage.d.ts +11 -1
- package/dist/components/message/notification/useNotification.d.ts +17 -1
- package/dist/components/message/popover/MPopover.d.ts +6 -1
- package/dist/components/message/popover/usePopover.d.ts +6 -6
- package/dist/components/other/darkMode/useDarkMode.d.ts +1 -1
- package/dist/components/template/menu/useMenu.d.ts +1 -0
- package/dist/components/template/virtualList/useVirtualList.d.ts +10 -7
- package/dist/compositions/common/useDrag.d.ts +1 -1
- package/dist/compositions/common/useElementSize.d.ts +2 -2
- package/dist/compositions/common/useTeleport.d.ts +4 -2
- package/dist/compositions/modal/useModal.d.ts +1 -1
- package/dist/core.js +6137 -4186
- package/dist/runtime/defineHook.d.ts +1 -1
- package/index.css +1 -0
- package/index.ts +71 -0
- package/package.json +19 -16
- package/runtime/defineHook.ts +21 -0
- package/tools/empty.ts +81 -0
- package/tools/index.ts +15 -0
- package/tools/types.ts +11 -0
- package/tsconfig.json +8 -0
- package/types/common/common.d.ts +25 -0
- package/types/common/model.d.ts +25 -0
- package/types/index.d.ts +11 -0
- package/types/props.d.ts +13 -0
- package/vite.config.build.ts +41 -0
- package/dist/vite.config.build.d.ts +0 -2
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description card api
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { MCOPO, MPropType } from '../../types/props';
|
|
10
|
+
import { CardProps } from './props';
|
|
11
|
+
|
|
12
|
+
export const props: MCOPO<CardProps> = {
|
|
13
|
+
title: { type: String, default: undefined },
|
|
14
|
+
shadow: { type: String as MPropType<'always' | 'hover' | 'never'>, default: 'never' },
|
|
15
|
+
bodyStyle: { type: Object, default: undefined },
|
|
16
|
+
bordered: { type: Boolean, default: true },
|
|
17
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description card core 导出
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { props } from './api';
|
|
10
|
+
|
|
11
|
+
export const CardCore = {
|
|
12
|
+
props,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type { CardProps } from './props';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description card api type
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* @name m-card
|
|
8
|
+
* @docDescription Card component with shuimo-ui style.
|
|
9
|
+
* 水墨组件的卡片组件。
|
|
10
|
+
*
|
|
11
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export declare type CardProps = {
|
|
15
|
+
/**
|
|
16
|
+
* @description 卡片标题
|
|
17
|
+
* @type string
|
|
18
|
+
*/
|
|
19
|
+
title?: string;
|
|
20
|
+
/**
|
|
21
|
+
* @description 阴影显示时机
|
|
22
|
+
* @type 'always' | 'hover' | 'never'
|
|
23
|
+
* @default 'never'
|
|
24
|
+
*/
|
|
25
|
+
shadow?: 'always' | 'hover' | 'never';
|
|
26
|
+
/**
|
|
27
|
+
* @description 卡片内容区自定义样式
|
|
28
|
+
* @type Record<string, string>
|
|
29
|
+
*/
|
|
30
|
+
bodyStyle?: Record<string, string>;
|
|
31
|
+
/**
|
|
32
|
+
* @description 是否显示边框
|
|
33
|
+
* @type boolean
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
36
|
+
bordered?: boolean;
|
|
37
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description carousel api
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { MCOPO, MPropType } from '../../types/props';
|
|
10
|
+
import { CarouselProps } from './props';
|
|
11
|
+
|
|
12
|
+
export const props: MCOPO<CarouselProps> = {
|
|
13
|
+
autoplay: { type: Boolean, default: true },
|
|
14
|
+
interval: { type: Number, default: 3000 },
|
|
15
|
+
loop: { type: Boolean, default: true },
|
|
16
|
+
direction: {
|
|
17
|
+
type: String as MPropType<'horizontal' | 'vertical'>,
|
|
18
|
+
default: 'horizontal',
|
|
19
|
+
enum: ['horizontal', 'vertical'],
|
|
20
|
+
},
|
|
21
|
+
modelValue: { type: Number, default: undefined },
|
|
22
|
+
initialIndex: { type: Number, default: 0 },
|
|
23
|
+
showIndicators: { type: Boolean, default: true },
|
|
24
|
+
showArrows: {
|
|
25
|
+
type: [Boolean, String] as MPropType<boolean | 'hover'>,
|
|
26
|
+
default: 'hover',
|
|
27
|
+
},
|
|
28
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description carousel core 导出
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { props } from './api';
|
|
10
|
+
import { useCarousel } from './useCarousel';
|
|
11
|
+
|
|
12
|
+
export const CarouselCore = {
|
|
13
|
+
props,
|
|
14
|
+
useCarousel,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type { CarouselProps, CarouselEvents } from './props';
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description carousel props type
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* @name m-carousel
|
|
8
|
+
* @docDescription Carousel / slideshow component.
|
|
9
|
+
* 轮播图组件。
|
|
10
|
+
*
|
|
11
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export declare type CarouselProps = {
|
|
15
|
+
/**
|
|
16
|
+
* @description 是否自动播放
|
|
17
|
+
* @type boolean
|
|
18
|
+
* @default true
|
|
19
|
+
*/
|
|
20
|
+
autoplay?: boolean,
|
|
21
|
+
/**
|
|
22
|
+
* @description 自动切换时间间隔(毫秒)
|
|
23
|
+
* @type number
|
|
24
|
+
* @default 3000
|
|
25
|
+
*/
|
|
26
|
+
interval?: number,
|
|
27
|
+
/**
|
|
28
|
+
* @description 是否循环播放
|
|
29
|
+
* @type boolean
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
32
|
+
loop?: boolean,
|
|
33
|
+
/**
|
|
34
|
+
* @description 轮播方向
|
|
35
|
+
* @type string
|
|
36
|
+
* @default horizontal
|
|
37
|
+
* @enum horizontal|vertical
|
|
38
|
+
*/
|
|
39
|
+
direction?: 'horizontal' | 'vertical',
|
|
40
|
+
/**
|
|
41
|
+
* @description 当前激活的幻灯片索引(v-model)
|
|
42
|
+
* @type number
|
|
43
|
+
* @default 0
|
|
44
|
+
*/
|
|
45
|
+
modelValue?: number,
|
|
46
|
+
/**
|
|
47
|
+
* @description 初始激活的幻灯片索引
|
|
48
|
+
* @type number
|
|
49
|
+
* @default 0
|
|
50
|
+
*/
|
|
51
|
+
initialIndex?: number,
|
|
52
|
+
/**
|
|
53
|
+
* @description 是否显示指示器
|
|
54
|
+
* @type boolean
|
|
55
|
+
* @default true
|
|
56
|
+
*/
|
|
57
|
+
showIndicators?: boolean,
|
|
58
|
+
/**
|
|
59
|
+
* @description 是否显示切换箭头,hover 表示鼠标悬浮时显示
|
|
60
|
+
* @type boolean | 'hover'
|
|
61
|
+
* @default 'hover'
|
|
62
|
+
*/
|
|
63
|
+
showArrows?: boolean | 'hover',
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export declare type CarouselEvents = {
|
|
67
|
+
/**
|
|
68
|
+
* @description 幻灯片切换时触发
|
|
69
|
+
* @param index 当前激活的索引
|
|
70
|
+
*/
|
|
71
|
+
onChange?: (index: number) => void,
|
|
72
|
+
};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description carousel hook
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { ref, computed, onMounted, onUnmounted, watch } from 'vue';
|
|
10
|
+
import { CarouselProps } from './props';
|
|
11
|
+
|
|
12
|
+
export function useCarousel(props: Required<CarouselProps>, emit: (event: string, ...args: any[]) => void, count: () => number) {
|
|
13
|
+
// 逻辑索引(0..N-1),用于指示器和 v-model
|
|
14
|
+
const activeIndex = ref(props.modelValue ?? props.initialIndex);
|
|
15
|
+
// track 位置索引(loop 时含克隆偏移)
|
|
16
|
+
const trackIndex = ref(0);
|
|
17
|
+
// 禁用过渡标记(用于无缝瞬间跳转)
|
|
18
|
+
const disableTransition = ref(false);
|
|
19
|
+
// 自动播放定时器
|
|
20
|
+
let timer: ReturnType<typeof setInterval> | null = null;
|
|
21
|
+
|
|
22
|
+
const hasClones = () => props.loop && count() > 1;
|
|
23
|
+
|
|
24
|
+
// 同步 trackIndex 到当前 activeIndex
|
|
25
|
+
const syncTrackIndex = () => {
|
|
26
|
+
trackIndex.value = hasClones() ? activeIndex.value + 1 : activeIndex.value;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// 初始化
|
|
30
|
+
syncTrackIndex();
|
|
31
|
+
|
|
32
|
+
// 外部 v-model 变化时同步
|
|
33
|
+
watch(() => props.modelValue, (val) => {
|
|
34
|
+
if (val != null && val !== activeIndex.value) {
|
|
35
|
+
activeIndex.value = val;
|
|
36
|
+
syncTrackIndex();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 切换到指定索引,支持循环
|
|
42
|
+
*/
|
|
43
|
+
const setActive = (index: number) => {
|
|
44
|
+
const total = count();
|
|
45
|
+
if (total === 0) { return; }
|
|
46
|
+
|
|
47
|
+
if (props.loop && total > 1) {
|
|
48
|
+
if (index >= total) {
|
|
49
|
+
// forward past last => slide to clone of first (trackIndex = total + 1)
|
|
50
|
+
activeIndex.value = 0;
|
|
51
|
+
trackIndex.value = total + 1;
|
|
52
|
+
emit('update:modelValue', 0);
|
|
53
|
+
emit('change', 0);
|
|
54
|
+
} else if (index < 0) {
|
|
55
|
+
// backward past first => slide to clone of last (trackIndex = 0)
|
|
56
|
+
activeIndex.value = total - 1;
|
|
57
|
+
trackIndex.value = 0;
|
|
58
|
+
emit('update:modelValue', total - 1);
|
|
59
|
+
emit('change', total - 1);
|
|
60
|
+
} else {
|
|
61
|
+
activeIndex.value = index;
|
|
62
|
+
trackIndex.value = index + 1;
|
|
63
|
+
emit('update:modelValue', index);
|
|
64
|
+
emit('change', index);
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
const next = Math.max(0, Math.min(index, total - 1));
|
|
68
|
+
if (next !== activeIndex.value) {
|
|
69
|
+
activeIndex.value = next;
|
|
70
|
+
trackIndex.value = next;
|
|
71
|
+
emit('update:modelValue', next);
|
|
72
|
+
emit('change', next);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* transitionend 回调:如果停在克隆位置,瞬间跳回真实位置
|
|
79
|
+
*/
|
|
80
|
+
const onTrackTransitionEnd = () => {
|
|
81
|
+
const total = count();
|
|
82
|
+
if (!hasClones() || total === 0) { return; }
|
|
83
|
+
|
|
84
|
+
const ti = trackIndex.value;
|
|
85
|
+
if (ti === 0) {
|
|
86
|
+
// 在克隆的最后一张 => 跳到真实的最后一张
|
|
87
|
+
disableTransition.value = true;
|
|
88
|
+
trackIndex.value = total;
|
|
89
|
+
reEnableTransition();
|
|
90
|
+
} else if (ti === total + 1) {
|
|
91
|
+
// 在克隆的第一张 => 跳到真实的第一张
|
|
92
|
+
disableTransition.value = true;
|
|
93
|
+
trackIndex.value = 1;
|
|
94
|
+
reEnableTransition();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const reEnableTransition = () => {
|
|
99
|
+
requestAnimationFrame(() => {
|
|
100
|
+
requestAnimationFrame(() => {
|
|
101
|
+
disableTransition.value = false;
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/** 切换到上一张 */
|
|
107
|
+
const prev = () => setActive(activeIndex.value - 1);
|
|
108
|
+
/** 切换到下一张 */
|
|
109
|
+
const next = () => setActive(activeIndex.value + 1);
|
|
110
|
+
|
|
111
|
+
/** 启动自动播放 */
|
|
112
|
+
const startAutoplay = () => {
|
|
113
|
+
if (!props.autoplay || props.interval <= 0) { return; }
|
|
114
|
+
timer = setInterval(next, props.interval);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
/** 停止自动播放 */
|
|
118
|
+
const stopAutoplay = () => {
|
|
119
|
+
if (timer !== null) {
|
|
120
|
+
clearInterval(timer);
|
|
121
|
+
timer = null;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
// 监听 autoplay 属性变化
|
|
126
|
+
watch(() => props.autoplay, (val) => {
|
|
127
|
+
if (val) { startAutoplay(); } else { stopAutoplay(); }
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
onMounted(startAutoplay);
|
|
131
|
+
onUnmounted(stopAutoplay);
|
|
132
|
+
|
|
133
|
+
const arrowsClass = computed(() => {
|
|
134
|
+
if (props.showArrows === 'hover') { return 'k-carousel-arrows-hover'; }
|
|
135
|
+
if (props.showArrows === false) { return 'k-carousel-arrows-hidden'; }
|
|
136
|
+
return 'k-carousel-arrows-always';
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
return {
|
|
140
|
+
activeIndex,
|
|
141
|
+
trackIndex,
|
|
142
|
+
disableTransition,
|
|
143
|
+
prev,
|
|
144
|
+
next,
|
|
145
|
+
setActive,
|
|
146
|
+
startAutoplay,
|
|
147
|
+
stopAutoplay,
|
|
148
|
+
arrowsClass,
|
|
149
|
+
onTrackTransitionEnd,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description cascader api
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { MCOPO, MPropType } from '../../types/props';
|
|
10
|
+
import { CascaderProps, CascaderOption } from './props';
|
|
11
|
+
|
|
12
|
+
export const props: MCOPO<CascaderProps> = {
|
|
13
|
+
modelValue: { type: undefined, default: () => [] },
|
|
14
|
+
options: { type: Array as MPropType<CascaderOption[]>, default: () => [] },
|
|
15
|
+
placeholder: { type: String, default: '请选择' },
|
|
16
|
+
disabled: { type: Boolean, default: false },
|
|
17
|
+
clearable: { type: Boolean, default: false },
|
|
18
|
+
filterable: { type: Boolean, default: false },
|
|
19
|
+
separator: { type: String, default: '/' },
|
|
20
|
+
expandTrigger: { type: String as MPropType<'click' | 'hover'>, default: 'click' },
|
|
21
|
+
showAllLevels: { type: Boolean, default: true },
|
|
22
|
+
multiple: { type: Boolean, default: false },
|
|
23
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description cascader core 导出
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { props } from './api';
|
|
10
|
+
import { useCascader } from './useCascader';
|
|
11
|
+
|
|
12
|
+
export const CascaderCore = {
|
|
13
|
+
props,
|
|
14
|
+
useCascader,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type { CascaderProps, CascaderOption } from './props';
|
|
18
|
+
export type { FlatCascaderOption } from './useCascader';
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description cascader api type
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 级联选择器的选项数据结构
|
|
12
|
+
*/
|
|
13
|
+
export declare type CascaderOption = {
|
|
14
|
+
/**
|
|
15
|
+
* @description 选项值
|
|
16
|
+
* @type string | number
|
|
17
|
+
*/
|
|
18
|
+
value: string | number;
|
|
19
|
+
/**
|
|
20
|
+
* @description 选项显示文本
|
|
21
|
+
* @type string
|
|
22
|
+
*/
|
|
23
|
+
label: string;
|
|
24
|
+
/**
|
|
25
|
+
* @description 子选项列表
|
|
26
|
+
* @type CascaderOption[]
|
|
27
|
+
*/
|
|
28
|
+
children?: CascaderOption[];
|
|
29
|
+
/**
|
|
30
|
+
* @description 是否禁用该选项
|
|
31
|
+
* @type boolean
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
34
|
+
disabled?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* @description 是否为叶子节点(无子节点)
|
|
37
|
+
* @type boolean
|
|
38
|
+
*/
|
|
39
|
+
leaf?: boolean;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export declare type CascaderProps = {
|
|
43
|
+
/**
|
|
44
|
+
* @description 绑定值,单选时为数组路径,多选时为二维数组
|
|
45
|
+
* @type (string | number)[] | (string | number)[][]
|
|
46
|
+
* @default []
|
|
47
|
+
*/
|
|
48
|
+
modelValue?: (string | number)[] | (string | number)[][];
|
|
49
|
+
/**
|
|
50
|
+
* @description 可选项数据源
|
|
51
|
+
* @type CascaderOption[]
|
|
52
|
+
* @default []
|
|
53
|
+
*/
|
|
54
|
+
options?: CascaderOption[];
|
|
55
|
+
/**
|
|
56
|
+
* @description 占位文本
|
|
57
|
+
* @type string
|
|
58
|
+
* @default '请选择'
|
|
59
|
+
*/
|
|
60
|
+
placeholder?: string;
|
|
61
|
+
/**
|
|
62
|
+
* @description 是否禁用
|
|
63
|
+
* @type boolean
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
66
|
+
disabled?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* @description 是否支持清空
|
|
69
|
+
* @type boolean
|
|
70
|
+
* @default false
|
|
71
|
+
*/
|
|
72
|
+
clearable?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* @description 是否可搜索过滤
|
|
75
|
+
* @type boolean
|
|
76
|
+
* @default false
|
|
77
|
+
*/
|
|
78
|
+
filterable?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* @description 选项分隔符
|
|
81
|
+
* @type string
|
|
82
|
+
* @default '/'
|
|
83
|
+
*/
|
|
84
|
+
separator?: string;
|
|
85
|
+
/**
|
|
86
|
+
* @description 次级菜单的展开方式
|
|
87
|
+
* @type 'click' | 'hover'
|
|
88
|
+
* @default 'click'
|
|
89
|
+
*/
|
|
90
|
+
expandTrigger?: 'click' | 'hover';
|
|
91
|
+
/**
|
|
92
|
+
* @description 是否在输入框中显示选中值的完整路径
|
|
93
|
+
* @type boolean
|
|
94
|
+
* @default true
|
|
95
|
+
*/
|
|
96
|
+
showAllLevels?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* @description 是否多选
|
|
99
|
+
* @type boolean
|
|
100
|
+
* @default false
|
|
101
|
+
*/
|
|
102
|
+
multiple?: boolean;
|
|
103
|
+
};
|