diff --git a/examples/app.vue b/examples/app.vue index bd10ef35c4c151f9b50a5fb6c2b6b0ba070be914..961173a2878dd71e7bd564f61ce93896965beaeb 100644 --- a/examples/app.vue +++ b/examples/app.vue @@ -1,17 +1,26 @@ diff --git a/examples/main.ts b/examples/main.ts index 3419fc0cbe40e989808e4f21c6dcea3016f5646f..8f5b56f784f6facda8a760a367aec319390e96d8 100644 --- a/examples/main.ts +++ b/examples/main.ts @@ -2,5 +2,9 @@ import { createApp } from 'vue' import App from './app.vue' const app = createApp(App) import kittyui from "kitty-ui" +import { Button } from 'kitty-ui' app.use(kittyui) +app.use(Button) +console.log(kittyui); + app.mount('#app') \ No newline at end of file diff --git a/examples/vite.config.ts b/examples/vite.config.ts index 6027983ba32bfc99ee68124d7f239bf61747007a..91437cb937a4f641936728b359208599ca12d056 100644 --- a/examples/vite.config.ts +++ b/examples/vite.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' - +import DefineOptions from 'unplugin-vue-define-options/vite'; export default defineConfig({ - plugins:[vue()] + plugins: [vue(), DefineOptions()] }) \ No newline at end of file diff --git a/package.json b/package.json index d6743889507fd5e8e8e162e298e235603007bf95..9da75629c201f3a86ada195c55059bbc78e346b5 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "docs:serve": "pnpm run --filter ./site docs:serve", "exm:dev": "pnpm run --filter ./examples dev", "test": "pnpm run --filter ./packages/components test", - "coverage": "pnpm run --filter ./packages/components vitest run --coverage" + "coverage": "pnpm run --filter ./packages/components coverage" }, "devDependencies": { "@types/gulp": "^4.0.9", @@ -34,6 +34,7 @@ "less": "^4.1.3", "sucrase": "^3.24.0", "typescript": "^4.7.4", + "unplugin-vue-define-options": "^0.12.2", "vite": "3.0.9", "vite-plugin-dts": "^1.4.1", "vite-plugin-libcss": "^1.0.5", diff --git a/packages/components/index.ts b/packages/components/index.ts index bd036dba634e8da3ca0b19136a2b5f5858e7d6a3..d20a92b70e3579038a6b868af2011f7a4e550622 100644 --- a/packages/components/index.ts +++ b/packages/components/index.ts @@ -1,9 +1,8 @@ -import * as components from './src/index' +import components from './src/index' export * from './src/index' +import { App } from 'vue' export default { - install: (app: any) => { - for (const comkey in components) { - app.component((components as any)[comkey].name, (components as any)[comkey]) - } + install: (app: App) => { + components.forEach(c => app.use(c)); } } diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index be2b4cb724f6a35d464ace183a839ce8b47e379a..a7d2b2ec908f3b9823395f209102902fb13e4659 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -1,4 +1,10 @@ -export { default as Button } from './button' -export { default as Icon } from './icon' -export { default as Link } from './link' -export { default as Upload } from './upload' +import { default as Button } from './button' +import { default as Icon } from './icon' +import { default as Link } from './link' +import { default as Upload } from './upload' +import { default as Shake } from './shake' +import { Plugin } from 'vue' +export { + Button, Icon, Link, Upload, Shake +} +export default [Button, Icon, Link, Upload, Shake] as Plugin[] diff --git a/packages/components/src/shake/__tests__/shake.test.ts b/packages/components/src/shake/__tests__/shake.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..d8c68eb9f597440a17c997bd1edc15b90c3fa9b0 --- /dev/null +++ b/packages/components/src/shake/__tests__/shake.test.ts @@ -0,0 +1,26 @@ +import { describe, expect, it } from "vitest"; +import { mount } from '@vue/test-utils' +import shake from '../shake.vue' +// The component to test + + +describe('test shake', () => { + it("should render slot", () => { + const wrapper = mount(shake, { + slots: { + default: 'Hello world' + } + }) + + // Assert the rendered text of the component + expect(wrapper.text()).toContain('Hello world') + }) + it("should have class", () => { + const wrapper = mount(shake, { + props: { + modelValue: true + } + }) + expect(wrapper.classes()).toContain('k-shakeactive') + }) +}) \ No newline at end of file diff --git a/packages/components/src/shake/index.ts b/packages/components/src/shake/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..33b18fb3a4c88bc05d608d1dbcdbd32f63108c8a --- /dev/null +++ b/packages/components/src/shake/index.ts @@ -0,0 +1,4 @@ +import shake from './shake.vue' +import { withInstall } from '@kitty-ui/utils' +const Shake = withInstall(shake) +export default Shake diff --git a/packages/components/src/shake/shake.vue b/packages/components/src/shake/shake.vue new file mode 100644 index 0000000000000000000000000000000000000000..1e3e8ae01c2c3d1f562f223c510d3154878e1220 --- /dev/null +++ b/packages/components/src/shake/shake.vue @@ -0,0 +1,32 @@ + + diff --git a/packages/components/src/shake/style/index.less b/packages/components/src/shake/style/index.less new file mode 100644 index 0000000000000000000000000000000000000000..c586fe042277209f58d886936956cc0c8a106ecd --- /dev/null +++ b/packages/components/src/shake/style/index.less @@ -0,0 +1,31 @@ +@keyframes shake { + + 10%, + 90% { + transform: translate3d(-1px, 0, 0); + } + + 20%, + 80% { + transform: translate3d(2px, 0, 0); + } + + 30%, + 70% { + transform: translate3d(-4px, 0, 0); + } + + 40%, + 60% { + transform: translate3d(4px, 0, 0); + } + + 50%, + 50% { + transform: translate3d(-4px, 0, 0); + } +} + +.k-shake.k-shakeactive { + animation: shake 1s linear; +} \ No newline at end of file diff --git a/packages/components/src/shake/types.ts b/packages/components/src/shake/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/packages/components/src/upload/dragger.vue b/packages/components/src/upload/dragger.vue index a59a8870aaed94f912237c4dc6a2780f31460dd5..09163c8d329ac6e8971d40bbabb81d0d9b7b8740 100644 --- a/packages/components/src/upload/dragger.vue +++ b/packages/components/src/upload/dragger.vue @@ -34,7 +34,7 @@ const onDragover = (e: Event) => { if (timer.value !== null) { clearTimeout(timer.value); } - timer.value = setTimeout(() => { + timer.value = window.setTimeout(() => { isEnter.value = false; timer.value = null; }, 100); diff --git a/packages/components/src/upload/types.ts b/packages/components/src/upload/types.ts deleted file mode 100644 index 76e1deb3cb21ef3e28a67f049938fde9c57279da..0000000000000000000000000000000000000000 --- a/packages/components/src/upload/types.ts +++ /dev/null @@ -1,13 +0,0 @@ - -import { ExtractPropTypes } from 'vue' - - -export const uploadType = { - multiple: Boolean, - accept: String, - drag: Boolean -} - -export type UploadType = ExtractPropTypes - - diff --git a/packages/components/src/upload/upload.vue b/packages/components/src/upload/upload.vue index 58433d742ee45df6e363892f68041683ece5cfb9..9ae609f51c95f56949b7a018879ed3507c9dfb4a 100644 --- a/packages/components/src/upload/upload.vue +++ b/packages/components/src/upload/upload.vue @@ -19,28 +19,25 @@ - +