diff --git a/.gitignore b/.gitignore index 64cee52cc0..8574d3ed49 100644 --- a/.gitignore +++ b/.gitignore @@ -316,3 +316,5 @@ vite.config.mts.timestamp-* # Release .npmrc .release.sh + +*storybook.log diff --git a/.husky/_/pre-commit b/.husky/_/pre-commit new file mode 100755 index 0000000000..a130880f63 --- /dev/null +++ b/.husky/_/pre-commit @@ -0,0 +1,66 @@ +#!/bin/sh + +if [ "$LEFTHOOK_VERBOSE" = "1" -o "$LEFTHOOK_VERBOSE" = "true" ]; then + set -x +fi + +if [ "$LEFTHOOK" = "0" ]; then + exit 0 +fi + +call_lefthook() +{ + if test -n "$LEFTHOOK_BIN" + then + "$LEFTHOOK_BIN" "$@" + elif lefthook -h >/dev/null 2>&1 + then + lefthook "$@" + else + dir="$(git rev-parse --show-toplevel)" + osArch=$(uname | tr '[:upper:]' '[:lower:]') + cpuArch=$(uname -m | sed 's/aarch64/arm64/;s/x86_64/x64/') + if test -f "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook" + then + "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook" + then + "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook" + then + "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook" "$@" + elif test -f "$dir/node_modules/lefthook/bin/index.js" + then + "$dir/node_modules/lefthook/bin/index.js" "$@" + + elif go tool lefthook -h >/dev/null 2>&1 + then + go tool lefthook "$@" + elif bundle exec lefthook -h >/dev/null 2>&1 + then + bundle exec lefthook "$@" + elif yarn lefthook -h >/dev/null 2>&1 + then + yarn lefthook "$@" + elif pnpm lefthook -h >/dev/null 2>&1 + then + pnpm lefthook "$@" + elif swift package lefthook >/dev/null 2>&1 + then + swift package --build-path .build/lefthook --disable-sandbox lefthook "$@" + elif command -v mint >/dev/null 2>&1 + then + mint run csjones/lefthook-plugin "$@" + elif uv run lefthook -h >/dev/null 2>&1 + then + uv run lefthook "$@" + elif mise exec -- lefthook -h >/dev/null 2>&1 + then + mise exec -- lefthook "$@" + else + echo "Can't find lefthook in PATH" + fi + fi +} + +call_lefthook run "pre-commit" "$@" diff --git a/.husky/_/prepare-commit-msg b/.husky/_/prepare-commit-msg new file mode 100755 index 0000000000..4748c279ec --- /dev/null +++ b/.husky/_/prepare-commit-msg @@ -0,0 +1,66 @@ +#!/bin/sh + +if [ "$LEFTHOOK_VERBOSE" = "1" -o "$LEFTHOOK_VERBOSE" = "true" ]; then + set -x +fi + +if [ "$LEFTHOOK" = "0" ]; then + exit 0 +fi + +call_lefthook() +{ + if test -n "$LEFTHOOK_BIN" + then + "$LEFTHOOK_BIN" "$@" + elif lefthook -h >/dev/null 2>&1 + then + lefthook "$@" + else + dir="$(git rev-parse --show-toplevel)" + osArch=$(uname | tr '[:upper:]' '[:lower:]') + cpuArch=$(uname -m | sed 's/aarch64/arm64/;s/x86_64/x64/') + if test -f "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook" + then + "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook" + then + "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook" + then + "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook" "$@" + elif test -f "$dir/node_modules/lefthook/bin/index.js" + then + "$dir/node_modules/lefthook/bin/index.js" "$@" + + elif go tool lefthook -h >/dev/null 2>&1 + then + go tool lefthook "$@" + elif bundle exec lefthook -h >/dev/null 2>&1 + then + bundle exec lefthook "$@" + elif yarn lefthook -h >/dev/null 2>&1 + then + yarn lefthook "$@" + elif pnpm lefthook -h >/dev/null 2>&1 + then + pnpm lefthook "$@" + elif swift package lefthook >/dev/null 2>&1 + then + swift package --build-path .build/lefthook --disable-sandbox lefthook "$@" + elif command -v mint >/dev/null 2>&1 + then + mint run csjones/lefthook-plugin "$@" + elif uv run lefthook -h >/dev/null 2>&1 + then + uv run lefthook "$@" + elif mise exec -- lefthook -h >/dev/null 2>&1 + then + mise exec -- lefthook "$@" + else + echo "Can't find lefthook in PATH" + fi + fi +} + +call_lefthook run "prepare-commit-msg" "$@" diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000..2342b68834 Binary files /dev/null and b/bun.lockb differ diff --git a/packages/vue/.storybook/main.ts b/packages/vue/.storybook/main.ts index 3107a17d2c..59c11f163b 100644 --- a/packages/vue/.storybook/main.ts +++ b/packages/vue/.storybook/main.ts @@ -1 +1,41 @@ -import '../../../.storybook/styles.css' +import type { StorybookConfig } from '@storybook/vue3-vite' + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.ts'], + addons: [ + { + name: '@storybook/addon-essentials', + options: { backgrounds: false, controls: false, actions: false }, + }, + '@storybook/addon-a11y', + '@storybook/addon-actions', + ], + framework: { + name: '@storybook/vue3-vite', + options: {}, + }, + core: { + disableTelemetry: true, + }, + docs: { + autodocs: false, + }, + + // TODO: fix this when vue-docgen accepts types from other packages in components + // This is a workaround until vue-docgen-plugin is fixed since we also dont use autodocs + // This removes the plugin vue-docgen-plugin so it wont load and throws an error on the use of an type import like + // import { Avatar, type AvatarRootEmits, type AvatarRootProps } from '@ark-ui/vue/avatar' + // using options: { docgen: "vue-component-meta",} throws other errors with node_modules/@zag-js/avatar/dist/index.mjs.vue' + // could not be found. This could be a fix for the vue-docgen-plugin error but it is not working for now + viteFinal(config) { + const vueDocgenIndex = + config.plugins?.findIndex( + (plugin) => + plugin && typeof plugin === 'object' && 'name' in plugin && plugin.name === 'storybook:vue-docgen-plugin', + ) ?? -1 + if (vueDocgenIndex !== -1) config.plugins?.splice(vueDocgenIndex, 1) + return config + }, +} + +export default config diff --git a/packages/vue/.storybook/preview.ts b/packages/vue/.storybook/preview.ts new file mode 100644 index 0000000000..d39aebb890 --- /dev/null +++ b/packages/vue/.storybook/preview.ts @@ -0,0 +1,15 @@ +import type { Preview } from '@storybook/vue3' +import '../../../.storybook/styles.css' + +const preview: Preview = { + parameters: { + options: { + storySort: { + method: 'alphabetical', + }, + }, + layout: 'padded', + }, +} + +export default preview diff --git a/packages/vue/.storybook/storybook.types.ts b/packages/vue/.storybook/storybook.types.ts new file mode 100644 index 0000000000..65516bf5c0 --- /dev/null +++ b/packages/vue/.storybook/storybook.types.ts @@ -0,0 +1,6 @@ +// Convert Vue emit tuple format to function format for Storybook +// example: from `statusChange: [details: avatar.StatusChangeDetails]` +// to `statusChanged: (details: avatar.StatusChangeDetails) => void` +export type EmitHandlers = { + [K in keyof T]: T[K] extends readonly [infer P] ? (param: P) => void : never +} diff --git a/packages/vue/histoire.config.ts b/packages/vue/histoire.config.ts deleted file mode 100644 index 7f7e9c7e06..0000000000 --- a/packages/vue/histoire.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { HstVue } from '@histoire/plugin-vue' -import { defineConfig } from 'histoire' - -export default defineConfig({ - plugins: [HstVue()], - storyMatch: ['**/*.stories.vue'], - setupFile: '.storybook/main.ts', - viteNodeInlineDeps: [/lucide-vue-next/], - vite: { - resolve: { - preserveSymlinks: true, - }, - server: { - fs: { - allow: ['**/*', '../../**/*'], - }, - }, - }, -}) diff --git a/packages/vue/package.json b/packages/vue/package.json index 32f9c2f70a..551dc048d1 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -75,10 +75,11 @@ "test:coverage": "vitest run --coverage", "test:ci": "vitest --run", "typecheck": "vue-tsc", - "storybook": "histoire dev", + "storybook": "storybook dev -p 6009", "prepack": "clean-package", "postpack": "clean-package restore", - "release-it": "release-it --config ../../release-it.json" + "release-it": "release-it --config ../../release-it.json", + "build-storybook": "storybook build" }, "publishConfig": { "access": "public" @@ -143,7 +144,13 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@histoire/plugin-vue": "0.17.17", + "@chromatic-com/storybook": "^3", + "@storybook/addon-essentials": "^8.6.7", + "@storybook/blocks": "^8.6.7", + "@storybook/experimental-addon-test": "^8.6.7", + "@storybook/test": "^8.6.7", + "@storybook/vue3": "^8.6.7", + "@storybook/vue3-vite": "^8.6.7", "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.6.3", "@testing-library/user-event": "14.6.1", @@ -151,6 +158,7 @@ "@types/jsdom": "21.1.7", "@vitejs/plugin-vue": "5.2.4", "@vitejs/plugin-vue-jsx": "4.2.0", + "@vitest/browser": "3.0.9", "@vue/compiler-sfc": "3.5.16", "clean-package": "2.2.0", "globby": "14.1.0", @@ -158,6 +166,7 @@ "jsdom": "26.1.0", "lucide-vue-next": "0.507.0", "resize-observer-polyfill": "1.5.1", + "storybook": "^8.6.7", "typescript": "5.8.3", "vite": "6.3.5", "vite-plugin-dts": "4.5.3", diff --git a/packages/vue/src/components/accordion/accordion.stories.ts b/packages/vue/src/components/accordion/accordion.stories.ts new file mode 100644 index 0000000000..e7320d9bb5 --- /dev/null +++ b/packages/vue/src/components/accordion/accordion.stories.ts @@ -0,0 +1,147 @@ +import { action } from '@storybook/addon-actions' +import type { Meta } from '@storybook/vue3' + +import type { EmitHandlers } from '../../../.storybook/storybook.types' + +import type { AccordionRootEmits } from './accordion-root.vue' +import type { AccordionProps } from './examples/accordion.vue' + +import AccordionExample from './examples/accordion.vue' +import BasicExample from './examples/basic.vue' +import CollapsibleExample from './examples/collapsible.vue' +import ContextFocusedValueExample from './examples/context/focusedValue.vue' +import ContextGetItemStateExample from './examples/context/getItemState.vue' +import ContextSetValueExample from './examples/context/setValue.vue' +import ContextValueExample from './examples/context/value.vue' +import ControlledExample from './examples/controlled.vue' +import DisabledExample from './examples/disabled.vue' +import HorizontalExample from './examples/horizontal.vue' +import MultipleExample from './examples/multiple.vue' +import RenderPropExample from './examples/render-prop.vue' +import RootProviderExample from './examples/root-provider.vue' +import VerticalExample from './examples/vertical.vue' + +const meta = { + title: 'Components / Accordion', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const RenderProp = { + render: () => ({ + components: { RenderPropExample }, + template: '', + }), +} + +export const Collapsible = { + render: () => ({ + components: { CollapsibleExample }, + template: '', + }), +} + +export const Multiple = { + render: () => ({ + components: { MultipleExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const Vertical = { + render: () => ({ + components: { VerticalExample }, + template: '', + }), +} + +export const Horizontal = { + render: () => ({ + components: { HorizontalExample }, + template: '', + }), +} + +export const Disabled = { + render: () => ({ + components: { DisabledExample }, + template: '', + }), +} + +interface ClosedArgs { + props: AccordionProps + emits: EmitHandlers +} + +export const Closed = { + render: (args: ClosedArgs) => ({ + components: { AccordionExample }, + setup() { + return { + args, + } + }, + template: ``, + }), + args: { + props: { + items: ['React', 'Solid', 'Vue'], + multiple: true, + }, + emits: { + focusChange: (details) => action('focus changed')(details), + valueChange: (details) => action('value changed')(details), + 'update:modelValue': (value) => action('model value updated')(value), + }, + } satisfies ClosedArgs, +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} + +export const ContextFocusedValue = { + render: () => ({ + components: { ContextFocusedValueExample }, + template: '', + }), +} + +export const ContextValue = { + render: () => ({ + components: { ContextValueExample }, + template: '', + }), +} + +export const ContextSetValue = { + render: () => ({ + components: { ContextSetValueExample }, + template: '', + }), +} + +export const ContextGetItemState = { + render: () => ({ + components: { ContextGetItemStateExample }, + template: '', + }), +} diff --git a/packages/vue/src/components/accordion/accordion.stories.vue b/packages/vue/src/components/accordion/accordion.stories.vue deleted file mode 100644 index a9cc0cd072..0000000000 --- a/packages/vue/src/components/accordion/accordion.stories.vue +++ /dev/null @@ -1,62 +0,0 @@ - - diff --git a/packages/vue/src/components/angle-slider/angle-slider.stories.ts b/packages/vue/src/components/angle-slider/angle-slider.stories.ts new file mode 100644 index 0000000000..bfc91dbeeb --- /dev/null +++ b/packages/vue/src/components/angle-slider/angle-slider.stories.ts @@ -0,0 +1,32 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import StepsExample from './examples/steps.vue' + +const meta = { + title: 'Components / Angle Slider', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Steps = { + render: () => ({ + components: { StepsExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} diff --git a/packages/vue/src/components/angle-slider/angle-slider.stories.vue b/packages/vue/src/components/angle-slider/angle-slider.stories.vue deleted file mode 100644 index 33a34fad03..0000000000 --- a/packages/vue/src/components/angle-slider/angle-slider.stories.vue +++ /dev/null @@ -1,18 +0,0 @@ - - diff --git a/packages/vue/src/components/avatar/avatar.stories.ts b/packages/vue/src/components/avatar/avatar.stories.ts new file mode 100644 index 0000000000..2b36a3356b --- /dev/null +++ b/packages/vue/src/components/avatar/avatar.stories.ts @@ -0,0 +1,65 @@ +import { action } from '@storybook/addon-actions' +import type { Meta } from '@storybook/vue3' + +import type { EmitHandlers } from '../../../.storybook/storybook.types' + +import type { AvatarRootEmits } from './avatar-root.vue' +import type { AvatarProps } from './examples/closed.vue' + +import BasicExample from './examples/basic.vue' +import ClosedExample from './examples/closed.vue' +import EventsExample from './examples/events.vue' +import RootProviderExample from './examples/root-provider.vue' + +const meta = { + title: 'Components / Avatar', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Events = { + render: () => ({ + components: { EventsExample }, + template: '', + }), +} + +interface ClosedArgs { + props: AvatarProps + emits: EmitHandlers +} + +export const Closed = { + render: (args: ClosedArgs) => ({ + components: { ClosedExample }, + setup() { + return { + args, + } + }, + template: '', + }), + args: { + props: { + name: 'Christian', + src: 'https://avatars.githubusercontent.com/u/1846056?v=4', + }, + emits: { + statusChange: (details) => action('status changed')(details), + }, + } satisfies ClosedArgs, +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} diff --git a/packages/vue/src/components/avatar/avatar.stories.vue b/packages/vue/src/components/avatar/avatar.stories.vue deleted file mode 100644 index 3ba59ad09a..0000000000 --- a/packages/vue/src/components/avatar/avatar.stories.vue +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/packages/vue/src/components/carousel/carousel.stories.ts b/packages/vue/src/components/carousel/carousel.stories.ts new file mode 100644 index 0000000000..30ee21026e --- /dev/null +++ b/packages/vue/src/components/carousel/carousel.stories.ts @@ -0,0 +1,40 @@ +import type { Meta } from '@storybook/vue3' + +import AutoplayExample from './examples/autoplay.vue' +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import RootProviderExample from './examples/root-provider.vue' + +const meta = { + title: 'Components / Carousel', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const Autoplay = { + render: () => ({ + components: { AutoplayExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} \ No newline at end of file diff --git a/packages/vue/src/components/carousel/carousel.stories.vue b/packages/vue/src/components/carousel/carousel.stories.vue deleted file mode 100644 index 011478b785..0000000000 --- a/packages/vue/src/components/carousel/carousel.stories.vue +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/packages/vue/src/components/checkbox/checkbox.stories.ts b/packages/vue/src/components/checkbox/checkbox.stories.ts new file mode 100644 index 0000000000..fbb34d3904 --- /dev/null +++ b/packages/vue/src/components/checkbox/checkbox.stories.ts @@ -0,0 +1,64 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import GroupExample from './examples/group.vue' +import IndeterminateExample from './examples/indeterminate.vue' +import RenderPropExample from './examples/render-prop.vue' +import RootProviderExample from './examples/root-provider.vue' +import WithFieldExample from './examples/with-field.vue' + +const meta = { + title: 'Components / Checkbox', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const Indeterminate = { + render: () => ({ + components: { IndeterminateExample }, + template: '', + }), +} + +export const RenderProp = { + render: () => ({ + components: { RenderPropExample }, + template: '', + }), +} + +export const Group = { + render: () => ({ + components: { GroupExample }, + template: '', + }), +} + +export const WithField = { + render: () => ({ + components: { WithFieldExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} \ No newline at end of file diff --git a/packages/vue/src/components/checkbox/checkbox.stories.vue b/packages/vue/src/components/checkbox/checkbox.stories.vue deleted file mode 100644 index caa50dda92..0000000000 --- a/packages/vue/src/components/checkbox/checkbox.stories.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/packages/vue/src/components/clipboard/clipboard.stories.ts b/packages/vue/src/components/clipboard/clipboard.stories.ts new file mode 100644 index 0000000000..0e3f10720a --- /dev/null +++ b/packages/vue/src/components/clipboard/clipboard.stories.ts @@ -0,0 +1,40 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import RenderFnExample from './examples/render-fn.vue' +import RootProviderExample from './examples/root-provider.vue' + +const meta = { + title: 'Components / Clipboard', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const RenderFn = { + render: () => ({ + components: { RenderFnExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} \ No newline at end of file diff --git a/packages/vue/src/components/clipboard/clipboard.stories.vue b/packages/vue/src/components/clipboard/clipboard.stories.vue deleted file mode 100644 index db9ff07062..0000000000 --- a/packages/vue/src/components/clipboard/clipboard.stories.vue +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/packages/vue/src/components/collapsible/collapsible.stories.ts b/packages/vue/src/components/collapsible/collapsible.stories.ts new file mode 100644 index 0000000000..cb1a0e04e6 --- /dev/null +++ b/packages/vue/src/components/collapsible/collapsible.stories.ts @@ -0,0 +1,64 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import LazyMountAndUnmountOnExitExample from './examples/lazy-mount-and-unmount-on-exit.vue' +import LazyMountExample from './examples/lazy-mount.vue' +import OnExitCompleteExample from './examples/on-exit-complete.vue' +import RootProviderExample from './examples/root-provider.vue' +import UnMountOnExitExample from './examples/unmount-on-exit.vue' + +const meta = { + title: 'Components / Collapsible', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const LazyMount = { + render: () => ({ + components: { LazyMountExample }, + template: '', + }), +} + +export const OnExitComplete = { + render: () => ({ + components: { OnExitCompleteExample }, + template: '', + }), +} + +export const UnmountOnExit = { + render: () => ({ + components: { UnMountOnExitExample }, + template: '', + }), +} + +export const LazyMountAndUnmountOnExit = { + render: () => ({ + components: { LazyMountAndUnmountOnExitExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} \ No newline at end of file diff --git a/packages/vue/src/components/collapsible/collapsible.stories.vue b/packages/vue/src/components/collapsible/collapsible.stories.vue deleted file mode 100644 index 71fdf4b275..0000000000 --- a/packages/vue/src/components/collapsible/collapsible.stories.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/packages/vue/src/components/color-picker/color-picker.stories.ts b/packages/vue/src/components/color-picker/color-picker.stories.ts new file mode 100644 index 0000000000..b677d564cb --- /dev/null +++ b/packages/vue/src/components/color-picker/color-picker.stories.ts @@ -0,0 +1,48 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import ControlledOpenExample from './examples/controlled-open.vue' +import RootProviderExample from './examples/root-provider.vue' +import WithFieldExample from './examples/with-field.vue' + +const meta = { + title: 'Components / ColorPicker', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const ControlledOpen = { + render: () => ({ + components: { ControlledOpenExample }, + template: '', + }), +} + +export const WithField = { + render: () => ({ + components: { WithFieldExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} \ No newline at end of file diff --git a/packages/vue/src/components/color-picker/color-picker.stories.vue b/packages/vue/src/components/color-picker/color-picker.stories.vue deleted file mode 100644 index 712b9b0c58..0000000000 --- a/packages/vue/src/components/color-picker/color-picker.stories.vue +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/packages/vue/src/components/combobox/combobox.stories.ts b/packages/vue/src/components/combobox/combobox.stories.ts new file mode 100644 index 0000000000..4ad7488ba6 --- /dev/null +++ b/packages/vue/src/components/combobox/combobox.stories.ts @@ -0,0 +1,56 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import GroupingExample from './examples/grouping.vue' +import LinksExample from './examples/links.vue' +import RootProviderExample from './examples/root-provider.vue' +import WithFieldExample from './examples/with-field.vue' + +const meta = { + title: 'Components / Combobox', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Grouping = { + render: () => ({ + components: { GroupingExample }, + template: '', + }), +} + +export const Links = { + render: () => ({ + components: { LinksExample }, + template: '', + }), +} + +export const WithField = { + render: () => ({ + components: { WithFieldExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} diff --git a/packages/vue/src/components/combobox/combobox.stories.vue b/packages/vue/src/components/combobox/combobox.stories.vue deleted file mode 100644 index 28e52e4df6..0000000000 --- a/packages/vue/src/components/combobox/combobox.stories.vue +++ /dev/null @@ -1,30 +0,0 @@ - - diff --git a/packages/vue/src/components/date-picker/date-picker.stories.ts b/packages/vue/src/components/date-picker/date-picker.stories.ts new file mode 100644 index 0000000000..379409a093 --- /dev/null +++ b/packages/vue/src/components/date-picker/date-picker.stories.ts @@ -0,0 +1,48 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import RangeExample from './examples/range.vue' +import RootProviderExample from './examples/root-provider.vue' +import StandaloneExample from './examples/standalone.vue' + +const meta = { + title: 'Components / DatePicker', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const Standalone = { + render: () => ({ + components: { StandaloneExample }, + template: '', + }), +} + +export const Range = { + render: () => ({ + components: { RangeExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} diff --git a/packages/vue/src/components/date-picker/date-picker.stories.vue b/packages/vue/src/components/date-picker/date-picker.stories.vue deleted file mode 100644 index 7f3ee9e8e0..0000000000 --- a/packages/vue/src/components/date-picker/date-picker.stories.vue +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/packages/vue/src/components/dialog/dialog.stories.ts b/packages/vue/src/components/dialog/dialog.stories.ts new file mode 100644 index 0000000000..c96e1e3bf1 --- /dev/null +++ b/packages/vue/src/components/dialog/dialog.stories.ts @@ -0,0 +1,48 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import LazyMountExample from './examples/lazy-mount.vue' +import RenderFnExample from './examples/render-fn.vue' +import RootProviderExample from './examples/root-provider.vue' + +const meta = { + title: 'Components / Dialog', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const LazyMount = { + render: () => ({ + components: { LazyMountExample }, + template: '', + }), +} + +export const RenderFn = { + render: () => ({ + components: { RenderFnExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} \ No newline at end of file diff --git a/packages/vue/src/components/dialog/dialog.stories.vue b/packages/vue/src/components/dialog/dialog.stories.vue deleted file mode 100644 index e8de1b9574..0000000000 --- a/packages/vue/src/components/dialog/dialog.stories.vue +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/packages/vue/src/components/download-trigger/download-trigger.stories.ts b/packages/vue/src/components/download-trigger/download-trigger.stories.ts new file mode 100644 index 0000000000..a7248eda06 --- /dev/null +++ b/packages/vue/src/components/download-trigger/download-trigger.stories.ts @@ -0,0 +1,32 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import SvgExample from './examples/svg.vue' +import WithPromiseExample from './examples/with-promise.vue' + +const meta = { + title: 'Components / Download Trigger', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const Svg = { + render: () => ({ + components: { SvgExample }, + template: '', + }), +} + +export const WithPromise = { + render: () => ({ + components: { WithPromiseExample }, + template: '', + }), +} diff --git a/packages/vue/src/components/download-trigger/download-trigger.stories.vue b/packages/vue/src/components/download-trigger/download-trigger.stories.vue deleted file mode 100644 index da151e6e2d..0000000000 --- a/packages/vue/src/components/download-trigger/download-trigger.stories.vue +++ /dev/null @@ -1,18 +0,0 @@ - - diff --git a/packages/vue/src/components/editable/editable.stories.ts b/packages/vue/src/components/editable/editable.stories.ts new file mode 100644 index 0000000000..08c51b70cf --- /dev/null +++ b/packages/vue/src/components/editable/editable.stories.ts @@ -0,0 +1,48 @@ +import type { Meta } from '@storybook/vue3' + +import BasicExample from './examples/basic.vue' +import ControlledExample from './examples/controlled.vue' +import CustomControlsExample from './examples/custom-controls.vue' +import RootProviderExample from './examples/root-provider.vue' +import WithFieldExample from './examples/with-field.vue' + +const meta = { + title: 'Components / Editable', +} as Meta + +export default meta + +export const Basic = { + render: () => ({ + components: { BasicExample }, + template: '', + }), +} + +export const CustomControls = { + render: () => ({ + components: { CustomControlsExample }, + template: '', + }), +} + +export const Controlled = { + render: () => ({ + components: { ControlledExample }, + template: '', + }), +} + +export const WithField = { + render: () => ({ + components: { WithFieldExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} \ No newline at end of file diff --git a/packages/vue/src/components/editable/editable.stories.vue b/packages/vue/src/components/editable/editable.stories.vue deleted file mode 100644 index ed5604f09b..0000000000 --- a/packages/vue/src/components/editable/editable.stories.vue +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/packages/vue/src/components/field/field.stories.ts b/packages/vue/src/components/field/field.stories.ts new file mode 100644 index 0000000000..9298a00e12 --- /dev/null +++ b/packages/vue/src/components/field/field.stories.ts @@ -0,0 +1,88 @@ +import type { Meta } from '@storybook/vue3' + +import DisabledExample from './examples/disabled.vue' +import InputControlledExample from './examples/input-controlled.vue' +import InputExample from './examples/input.vue' +import ReactiveInvalidExample from './examples/reactive-invalid.vue' +import RequiredIndicatorExample from './examples/required-indicator.vue' +import RootProviderExample from './examples/root-provider.vue' +import SelectControlledExample from './examples/select-controlled.vue' +import SelectExample from './examples/select.vue' +import TextareaControlledExample from './examples/textarea-controlled.vue' +import TextareaExample from './examples/textarea.vue' + +const meta = { + title: 'Components / Field', +} as Meta + +export default meta + +export const Input = { + render: () => ({ + components: { InputExample }, + template: '', + }), +} + +export const InputControlled = { + render: () => ({ + components: { InputControlledExample }, + template: '', + }), +} + +export const Select = { + render: () => ({ + components: { SelectExample }, + template: '', + }), +} + +export const SelectControlled = { + render: () => ({ + components: { SelectControlledExample }, + template: '', + }), +} + +export const Disabled = { + render: () => ({ + components: { DisabledExample }, + template: '', + }), +} + +export const Textarea = { + render: () => ({ + components: { TextareaExample }, + template: '', + }), +} + +export const TextareaControlled = { + render: () => ({ + components: { TextareaControlledExample }, + template: '', + }), +} + +export const RequiredIndicator = { + render: () => ({ + components: { RequiredIndicatorExample }, + template: '', + }), +} + +export const ReactiveInvalid = { + render: () => ({ + components: { ReactiveInvalidExample }, + template: '', + }), +} + +export const RootProvider = { + render: () => ({ + components: { RootProviderExample }, + template: '', + }), +} \ No newline at end of file diff --git a/packages/vue/src/components/field/field.stories.vue b/packages/vue/src/components/field/field.stories.vue deleted file mode 100644 index 064a0c8010..0000000000 --- a/packages/vue/src/components/field/field.stories.vue +++ /dev/null @@ -1,50 +0,0 @@ - -