{{ variant }}
-{{ variant }}
+Model Value: {{ value }}
- `,
-});
-
-export const Default = Template.bind({});
-Default.args = {};
-
-export const Multiple = Template.bind({});
-Multiple.args = {
- multiple: true,
-};
-
-export const Label = Template.bind({});
-Label.args = {
- label: 'Label',
-};
-
-export const EmptyText = Template.bind({});
-EmptyText.args = {
- emptyText: 'No results found.',
-};
-
-export const Hint = Template.bind({});
-Hint.args = {
- hint: 'This is a hint',
-};
-
-export const Error = Template.bind({});
-Error.args = {
- error: true,
- errorMessage: 'This is an error message.',
-};
-
-export const Disabled = Template.bind({});
-Disabled.args = {
- disabled: true,
-};
-
-export const Shadow = Template.bind({});
-Shadow.args = {
- shadow: true,
-};
-
-export const Clearable = Template.bind({});
-Clearable.args = {
- clearable: true,
-};
-
-export const SelectionItemProps = Template.bind({});
-SelectionItemProps.args = {
- selectionItemProps: {
- outlined: true,
- },
- multiple: true,
-};
-
-export const Slots: StoryModel Value: {{ value }}
+ `,
+});
+
+export const Default = Template.bind({});
+Default.args = {};
+
+export const Multiple = Template.bind({});
+Multiple.args = {
+ multiple: true,
+};
+
+export const Label = Template.bind({});
+Label.args = {
+ label: 'Label',
+};
+
+export const EmptyText = Template.bind({});
+EmptyText.args = {
+ emptyText: 'No results found.',
+};
+
+export const Hint = Template.bind({});
+Hint.args = {
+ hint: 'This is a hint',
+};
+
+export const Error = Template.bind({});
+Error.args = {
+ error: true,
+ errorMessage: 'This is an error message.',
+};
+
+export const Disabled = Template.bind({});
+Disabled.args = {
+ disabled: true,
+};
+
+export const Shadow = Template.bind({});
+Shadow.args = {
+ shadow: true,
+};
+
+export const Clearable = Template.bind({});
+Clearable.args = {
+ clearable: true,
+};
+
+export const SelectionItemProps = Template.bind({});
+SelectionItemProps.args = {
+ selectionItemProps: {
+ outlined: true,
+ },
+ multiple: true,
+};
+
+export const Slots: Story
-
+
Default
diff --git a/packages/badge/src/VBadge.vue b/packages/ui/src/badge/src/VBadge.vue similarity index 98% rename from packages/badge/src/VBadge.vue rename to packages/ui/src/badge/src/VBadge.vue index b2dd11cf4..9c285cc17 100644 --- a/packages/badge/src/VBadge.vue +++ b/packages/ui/src/badge/src/VBadge.vue @@ -1,6 +1,6 @@ - - -{{ variant }}
-{{ variant }}
+lorem ipsum body
-lorem ipsum body
-With to props
With to props. As NuxtLink.
As anchor with target="_blank"
As anchor with target="_blank" and rel
As DummyLink
VCardBody
- Bodyless with VCardHeader
VCardBody
- Bodyless with VCardFooter
lorem ipsum body
+lorem ipsum body
+With to props
With to props. As NuxtLink.
As anchor with target="_blank"
As anchor with target="_blank" and rel
As DummyLink
VCardBody
+ Bodyless with VCardHeader
VCardBody
+ Bodyless with VCardFooter
Selected: {{selected}}
- `,
-});
-
-export const WithButtonTrigger: StoryFn = (args) => ({
- setup() {
- const isOpen = ref(false)
- const selected = ref()
- return {args, selected, isOpen};
- },
- components: {
- VCommand,
- VBtn
- },
- template: `
- Selected: {{selected}}
- `,
-});
-
-export const ListProps: StoryFn = (args) => ({
- setup() {
- return {args};
- },
- components: {
- VCommand,
- VBtn
- },
- template: `
- Selected: {{selected}}
+ `,
+});
+
+export const WithButtonTrigger: StoryFn = (args) => ({
+ setup() {
+ const isOpen = ref(false)
+ const selected = ref()
+ return { args, selected, isOpen };
+ },
+ components: {
+ VCommand,
+ VBtn
+ },
+ template: `
+ Selected: {{selected}}
+ `,
+});
+
+export const ListProps: StoryFn = (args) => ({
+ setup() {
+ return { args };
+ },
+ components: {
+ VCommand,
+ VBtn
+ },
+ template: `
+ prepend slotappend slotVDropdownButton
- DropdownButton as VBtn
- VDropdownBtn
- DropdownButton as VBtn
- DropdownButton as VDropdownItem
- DropdownButton as VDropdownHeader
- DropdownButton as btn
- DropdownButton as item
- DropdownButton as header
- prepend slotappend slotVDropdownButton
+ DropdownButton as VBtn
+ VDropdownBtn
+ DropdownButton as VBtn
+ DropdownButton as VDropdownItem
+ DropdownButton as VDropdownHeader
+ DropdownButton as btn
+ DropdownButton as item
+ DropdownButton as header
+
-
+
Value: {{ value }}
- `,
-});
-
-export const Variants: StoryFn = (args) => ({
- components: {VCheckbox},
- setup() {
- const value = ref(false);
- return {args, value};
- },
- template: `
- Model value: {{ single }}
-
- Multiple
-Model value: {{ multiple }}
- `,
-});
-
-export const Checkbox = Template.bind({});
-Checkbox.args = {};
-Checkbox.parameters = {
- docs: {
- source: {
- code: `Value: {{ value }}
+ `,
+});
+
+export const Variants: StoryFn = (args) => ({
+ components: { VCheckbox },
+ setup() {
+ const value = ref(false);
+ return { args, value };
+ },
+ template: `
+ Model value: {{ single }}
+
+ Multiple
+Model value: {{ multiple }}
+ `,
+});
+
+export const Checkbox = Template.bind({});
+Checkbox.args = {};
+Checkbox.parameters = {
+ docs: {
+ source: {
+ code: `
-
+
Value: {{ value }}
- `,
-});
-
-export const Variants: StoryFn = (args) => ({
- components: {VCheckbox},
- setup() {
- const value = ref(false);
- return {args, value};
- },
- template: `
- Value: {{ value }}
+ `,
+});
+
+export const Variants: StoryFn = (args) => ({
+ components: { VCheckbox },
+ setup() {
+ const value = ref(false);
+ return { args, value };
+ },
+ template: `
+
-
+
Model Value: {{ value }}
- `,
-});
-
-export const Multiple = Default.bind({});
-Multiple.args = {
- multiple: true,
-};
-
-export const Accept = Default.bind({});
-Accept.args = {
- accept: 'image/*'
-};
-
-export const Error = Default.bind({});
-Error.args = {
- error: true,
- errorMessage: 'This field is required'
-};
-
-export const LabelAndHint = Default.bind({});
-LabelAndHint.args = {
- label: 'File',
- hint: 'Max 1MB. Only images are allowed.'
-};
-
-export const ButtonVariant = Default.bind({});
-ButtonVariant.args = {
- variant: 'button',
-};
-
-export const VariantProps = Default.bind({});
-VariantProps.args = {
- label: 'File',
- variantProps: {
- hint: 'Max 1MB. Only images are allowed.'
- }
-};
-
-export const CustomSlot: Story<{}> = (args) => ({
- components: {
- FileInput,
- VBtn
- },
- setup() {
- const value = ref()
- return {args, value};
- },
- template: `
- Model Value: {{ value }}
- `,
-});
-
-export const FormValidation: Story<{}> = (args) => ({
- components: {
- FileInput,
- VBtn,
- Field,
- FileInputField
- },
- setup() {
- const {handleSubmit, values, errors, resetForm} = useForm({
- validationSchema: object({
- files: array()
- .required()
- .test('fileSize', 'File too large. Max 1MB.', (value) => {
- if (!value?.[0]) return true;
-
- return value?.[0]?.size < 1000000;
- })
- .label('File'),
- avatar: array()
- .required()
- .test('fileSize', 'File too large. Max 1MB.', (value) => {
- if (!value?.[0]) return true;
-
- return value?.[0]?.size < 1000000;
- })
- .test('fileType', 'Unsupported Format', (value) => {
- if (!value?.[0]) return true;
- return value?.[0]?.type?.startsWith('image');
- })
- .label('Avatar')
- })
- });
- const onSubmit = handleSubmit((values) => {
- console.log(values)
- })
- return {args, onSubmit, values, errors, resetForm};
- },
- template: `
-
- `,
-});
-
-export const DefaultActivator: Story<{}> = (args) => ({
- components: {
- FileInput,
- VBtn,
- FileInputDefaultActivator,
- FileInputItem
- },
- setup() {
- const value = ref()
- const disabled = ref(false)
- return {args, value, disabled};
- },
- template: `
- Model Value: {{ value }}
- `,
-});
-
-export const ButtonActivator: Story<{}> = (args) => ({
- components: {
- FileInput,
- VBtn,
- FileInputButtonActivator,
- FileInputItems
- },
- setup() {
- const value = ref()
- return {args, value};
- },
- template: `
- - Max 1MB. Only images are allowed. -
- -Model Value: {{ value }}
- `,
+import type { Story, Meta } from '@storybook/vue3';
+import VBtn from '../../../button/src'
+import { Field, useForm } from 'vee-validate';
+import { ref } from 'vue';
+import { array, object } from 'yup';
+import FileInput from './FileInput.vue';
+import FileInputField from './FileInputField.vue';
+import FileInputDefaultActivator from './FileInputDefaultActivator.vue';
+import FileInputButtonActivator from './FileInputButtonActivator.vue';
+import FileInputItem from './FileInputItem.vue';
+import FileInputItems from './FileInputItems.vue';
+
+export default {
+ title: 'Experimental/Forms/FileInput',
+ component: FileInput,
+ subcomponents: { FileInputField, FileInputDefaultActivator },
+} as Meta;
+
+export const Default: Story<{}> = (args) => ({
+ components: {
+ FileInput,
+ VBtn
+ },
+ setup() {
+ const value = ref()
+ return { args, value };
+ },
+ template: `
+ Model Value: {{ value }}
+ `,
+});
+
+export const Multiple = Default.bind({});
+Multiple.args = {
+ multiple: true,
+};
+
+export const Accept = Default.bind({});
+Accept.args = {
+ accept: 'image/*'
+};
+
+export const Error = Default.bind({});
+Error.args = {
+ error: true,
+ errorMessage: 'This field is required'
+};
+
+export const LabelAndHint = Default.bind({});
+LabelAndHint.args = {
+ label: 'File',
+ hint: 'Max 1MB. Only images are allowed.'
+};
+
+export const ButtonVariant = Default.bind({});
+ButtonVariant.args = {
+ variant: 'button',
+};
+
+export const VariantProps = Default.bind({});
+VariantProps.args = {
+ label: 'File',
+ variantProps: {
+ hint: 'Max 1MB. Only images are allowed.'
+ }
+};
+
+export const CustomSlot: Story<{}> = (args) => ({
+ components: {
+ FileInput,
+ VBtn
+ },
+ setup() {
+ const value = ref()
+ return { args, value };
+ },
+ template: `
+ Model Value: {{ value }}
+ `,
+});
+
+export const FormValidation: Story<{}> = (args) => ({
+ components: {
+ FileInput,
+ VBtn,
+ Field,
+ FileInputField
+ },
+ setup() {
+ const { handleSubmit, values, errors, resetForm } = useForm({
+ validationSchema: object({
+ files: array()
+ .required()
+ .test('fileSize', 'File too large. Max 1MB.', (value) => {
+ if (!value?.[0]) return true;
+
+ return value?.[0]?.size < 1000000;
+ })
+ .label('File'),
+ avatar: array()
+ .required()
+ .test('fileSize', 'File too large. Max 1MB.', (value) => {
+ if (!value?.[0]) return true;
+
+ return value?.[0]?.size < 1000000;
+ })
+ .test('fileType', 'Unsupported Format', (value) => {
+ if (!value?.[0]) return true;
+ return value?.[0]?.type?.startsWith('image');
+ })
+ .label('Avatar')
+ })
+ });
+ const onSubmit = handleSubmit((values) => {
+ console.log(values)
+ })
+ return { args, onSubmit, values, errors, resetForm };
+ },
+ template: `
+
+ `,
+});
+
+export const DefaultActivator: Story<{}> = (args) => ({
+ components: {
+ FileInput,
+ VBtn,
+ FileInputDefaultActivator,
+ FileInputItem
+ },
+ setup() {
+ const value = ref()
+ const disabled = ref(false)
+ return { args, value, disabled };
+ },
+ template: `
+ Model Value: {{ value }}
+ `,
+});
+
+export const ButtonActivator: Story<{}> = (args) => ({
+ components: {
+ FileInput,
+ VBtn,
+ FileInputButtonActivator,
+ FileInputItems
+ },
+ setup() {
+ const value = ref()
+ return { args, value };
+ },
+ template: `
+ + Max 1MB. Only images are allowed. +
+ +Model Value: {{ value }}
+ `,
});
\ No newline at end of file
diff --git a/packages/forms/src/file-input/FileInput.vue b/packages/ui/src/forms/src/file-input/FileInput.vue
similarity index 100%
rename from packages/forms/src/file-input/FileInput.vue
rename to packages/ui/src/forms/src/file-input/FileInput.vue
diff --git a/packages/forms/src/file-input/FileInputButtonActivator.vue b/packages/ui/src/forms/src/file-input/FileInputButtonActivator.vue
similarity index 89%
rename from packages/forms/src/file-input/FileInputButtonActivator.vue
rename to packages/ui/src/forms/src/file-input/FileInputButtonActivator.vue
index 3e3323670..624c46f3a 100644
--- a/packages/forms/src/file-input/FileInputButtonActivator.vue
+++ b/packages/ui/src/forms/src/file-input/FileInputButtonActivator.vue
@@ -1,5 +1,5 @@
-
-
-
-
- {{ dragText }}
-{{ hint }}
-{{ dragText }}
+{{ hint }}
+Model Value: {{ value }}
- `,
-});
-
-export const Shadow = Template.bind({});
-Shadow.args = {
- shadow: true,
-};
-Shadow.parameters = {
- docs: {
- source: {
- code: '',
- },
- },
-};
-
-export const Disabled = Template.bind({});
-Disabled.args = {
- disabled: true,
-};
-Disabled.parameters = {
- docs: {
- source: {
- code: '',
- },
- },
-};
-
-export const Error = Template.bind({});
-Error.args = {
- error: true,
- errorMessage: 'Field is required',
-};
-
-export const Label = Template.bind({});
-Label.args = {
- label: 'My Label',
-};
-Label.parameters = {
- docs: {
- source: {
- code: ``,
- },
- },
-};
-
-export const Hint = Template.bind({});
-Hint.args = {
- label: 'Label',
- hint: 'This is a hint',
-};
-Hint.parameters = {
- docs: {
- source: {
- code: ``,
- },
- },
-};
-
-export const Validation: StoryFn<{}> = (args) => ({
- components: {VBtn, SelectField},
- setup() {
- const schema = object({
- genre: string().required().label('Genre'),
- gender: string().required().label('Gender'),
- });
-
- const {handleSubmit, resetForm, values} = useForm({
- validationSchema: schema,
- });
-
- const onSubmit = handleSubmit((values) => {
- alert(JSON.stringify(values));
- });
-
- const genders = ref([
- {
- text: 'Select Gender',
- value: '',
- disabled: true,
- },
- {
- text: 'Male',
- value: 'male',
- },
- {
- text: 'Female',
- value: 'female',
- },
- ]);
-
- const genres = ref([
- {
- text: 'Select Genre',
- value: '',
- disabled: true,
- },
- {
- text: 'Pop',
- value: 'pop',
- },
- {
- text: 'Rock',
- value: 'rock',
- },
- ]);
-
- return {onSubmit, resetForm, values, genders, genres};
- },
- template: `
-
-`,
-});
-
-export const DarkMode: StoryFn = (args) => ({
- components: {Select},
- setup() {
- return {args};
- },
- template: `
- Model Value: {{ value }}
+ `,
+});
+
+export const Shadow = Template.bind({});
+Shadow.args = {
+ shadow: true,
+};
+Shadow.parameters = {
+ docs: {
+ source: {
+ code: '',
+ },
+ },
+};
+
+export const Disabled = Template.bind({});
+Disabled.args = {
+ disabled: true,
+};
+Disabled.parameters = {
+ docs: {
+ source: {
+ code: '',
+ },
+ },
+};
+
+export const Error = Template.bind({});
+Error.args = {
+ error: true,
+ errorMessage: 'Field is required',
+};
+
+export const Label = Template.bind({});
+Label.args = {
+ label: 'My Label',
+};
+Label.parameters = {
+ docs: {
+ source: {
+ code: ``,
+ },
+ },
+};
+
+export const Hint = Template.bind({});
+Hint.args = {
+ label: 'Label',
+ hint: 'This is a hint',
+};
+Hint.parameters = {
+ docs: {
+ source: {
+ code: ``,
+ },
+ },
+};
+
+export const Validation: StoryFn<{}> = (args) => ({
+ components: { VBtn, SelectField },
+ setup() {
+ const schema = object({
+ genre: string().required().label('Genre'),
+ gender: string().required().label('Gender'),
+ });
+
+ const { handleSubmit, resetForm, values } = useForm({
+ validationSchema: schema,
+ });
+
+ const onSubmit = handleSubmit((values) => {
+ alert(JSON.stringify(values));
+ });
+
+ const genders = ref([
+ {
+ text: 'Select Gender',
+ value: '',
+ disabled: true,
+ },
+ {
+ text: 'Male',
+ value: 'male',
+ },
+ {
+ text: 'Female',
+ value: 'female',
+ },
+ ]);
+
+ const genres = ref([
+ {
+ text: 'Select Genre',
+ value: '',
+ disabled: true,
+ },
+ {
+ text: 'Pop',
+ value: 'pop',
+ },
+ {
+ text: 'Rock',
+ value: 'rock',
+ },
+ ]);
+
+ return { onSubmit, resetForm, values, genders, genres };
+ },
+ template: `
+
+`,
+});
+
+export const DarkMode: StoryFn = (args) => ({
+ components: { Select },
+ setup() {
+ return { args };
+ },
+ template: `
+
-
+
Model Value: {{ value }}
-`,
-});
-
-export const Colors: StoryCustom Classes:
-Rounded
-Custom Classes:
-Model Value: {{ value }}
+`,
+});
+
+export const Colors: StoryCustom Classes:
+Rounded
+Custom Classes:
+Custom Classes:
-Rounded
-Custom Classes:
-Custom Classes:
+Rounded
+Custom Classes:
+
-
+
-
+
Model value: {{ value }}
- `,
-});
-
-export const Hint: StoryFn = (args) => ({
- components: {VRadio},
- setup() {
- const value = ref('1');
- return {args, value};
- },
- template: `
- Model value: {{ value }}
+ `,
+});
+
+export const Hint: StoryFn = (args) => ({
+ components: { VRadio },
+ setup() {
+ const value = ref('1');
+ return { args, value };
+ },
+ template: `
+
-
+
-
+
-
+
Value: {{ value }}
- `,
-});
-
-export const Label = Template.bind({});
-Label.args = {label: 'My Label'};
-Label.parameters = {
- docs: {
- source: {
- code: '{{ {values, errors} }}
-`,
-});
-
-export const DarkMode: StoryFn = (args) => ({
- components: {VTextarea},
- setup() {
- return {args};
- },
- template: `
- Value: {{ value }}
+ `,
+});
+
+export const Label = Template.bind({});
+Label.args = { label: 'My Label' };
+Label.parameters = {
+ docs: {
+ source: {
+ code: '{{ {values, errors} }}
+`,
+});
+
+export const DarkMode: StoryFn = (args) => ({
+ components: { VTextarea },
+ setup() {
+ return { args };
+ },
+ template: `
+ - {{ color.replace('bg-', '').replace('-500', '') }} - - {{ colors[color.replace('bg-', '').replace('-500', '')][500] }} - -
-+ {{ color.replace('bg-', '').replace('-500', '') }} + + {{ colors[color.replace('bg-', '').replace('-500', '')][500] }} + +
+{{ shadow }}
- {{ shadow }}
+
- {{ font }}
-
- Lorem ipsum dolor sit amet consectetur, adipisicing elit -
-
+ {{ font }}
+
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit +
+{{ rounded }} ({{ remToPx(rounded) }})
- {{ rounded }} ({{ remToPx(rounded) }})
+ - Lorem ipsum dolor sit amet consectetur, adipisicing elit -
-- Lorem ipsum dolor sit amet consectetur, adipisicing elit -
-+ Lorem ipsum dolor sit amet consectetur, adipisicing elit +
++ Lorem ipsum dolor sit amet consectetur, adipisicing elit +
+Default Collection
-Morpheme Icons
-Non exist
-
- By default morpheme icons are cached and stored in local storage, but you can disable it by setting via no-cache prop.
-
Default Collection
+Morpheme Icons
+Non exist
+
+ By default morpheme icons are cached and stored in local storage, but you can disable it by setting via no-cache prop.
+
Default
-Small
-Dense
-Large
-Default
-With Context API
-- {{ user.email }} -
-- Apple ID, iCloud+, Media & Purchases -
-- Apple ID, iCloud+, Media & Purchases -
-Default
+Small
+Dense
+Large
+Default
+With Context API
++ {{ user.email }} +
++ Apple ID, iCloud+, Media & Purchases +
++ Apple ID, iCloud+, Media & Purchases +
+
-
-
+
+ Are you sure want to delete this item?
-- Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi - ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit - in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, - sunt in culpa qui officia deserunt mollit anim id est laborum. -
- -Lorem ipsum dolor sit amet, consectetur adipiscing elit
-Are you sure want to delete this item?
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit + in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, + sunt in culpa qui officia deserunt mollit anim id est laborum. +
+ +Lorem ipsum dolor sit amet, consectetur adipiscing elit
+
-
+
Hello World
-- Fixed NavDrawer -
-- Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Curabitur consequat facilisis purus ac consectetur. - Cras interdum nisi vitae metus pharetra dignissim. - Curabitur pulvinar ex purus, id ultrices ligula dictum at. - Integer ac libero dui. Vivamus posuere molestie enim in tempus. - Sed neque arcu, pharetra non laoreet a, efficitur id leo. - Nullam facilisis massa velit, ut sollicitudin magna elementum quis. - Donec pharetra efficitur turpis, nec ultrices leo. - Quisque placerat, dolor sit amet eleifend cursus, libero nisi - feugiat urna, a sodales quam eros id massa. - Nulla tristique neque quis turpis luctus tincidunt. - Vestibulum bibendum lobortis orci, eget semper diam ultricies a. - Nunc in nunc lacus. -
-- Sticky NavDrawer -
-- Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Curabitur consequat facilisis purus ac consectetur. - Cras interdum nisi vitae metus pharetra dignissim. - Curabitur pulvinar ex purus, id ultrices ligula dictum at. - Integer ac libero dui. Vivamus posuere molestie enim in tempus. - Sed neque arcu, pharetra non laoreet a, efficitur id leo. - Nullam facilisis massa velit, ut sollicitudin magna elementum quis. - Donec pharetra efficitur turpis, nec ultrices leo. - Quisque placerat, dolor sit amet eleifend cursus, libero nisi - feugiat urna, a sodales quam eros id massa. - Nulla tristique neque quis turpis luctus tincidunt. - Vestibulum bibendum lobortis orci, eget semper diam ultricies a. - Nunc in nunc lacus. -
-- Toggle (v-model) -
-- Mini -
-- Expand on Hover -
-- Right NavDrawer + Transition -
- -- NavDrawer + Transition -
-{{ color }}
-Bordered
-- {{ height }} -
-- Custom Prop: 200px -
-- With custom class: h-[200px] -
-- Custom Class: h-[calc(100vh-100px)] -
-- Bottom Drawer -
-- Top Drawer -
-- Hover on the edge to resize -
-Hello World
++ Fixed NavDrawer +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Curabitur consequat facilisis purus ac consectetur. + Cras interdum nisi vitae metus pharetra dignissim. + Curabitur pulvinar ex purus, id ultrices ligula dictum at. + Integer ac libero dui. Vivamus posuere molestie enim in tempus. + Sed neque arcu, pharetra non laoreet a, efficitur id leo. + Nullam facilisis massa velit, ut sollicitudin magna elementum quis. + Donec pharetra efficitur turpis, nec ultrices leo. + Quisque placerat, dolor sit amet eleifend cursus, libero nisi + feugiat urna, a sodales quam eros id massa. + Nulla tristique neque quis turpis luctus tincidunt. + Vestibulum bibendum lobortis orci, eget semper diam ultricies a. + Nunc in nunc lacus. +
++ Sticky NavDrawer +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Curabitur consequat facilisis purus ac consectetur. + Cras interdum nisi vitae metus pharetra dignissim. + Curabitur pulvinar ex purus, id ultrices ligula dictum at. + Integer ac libero dui. Vivamus posuere molestie enim in tempus. + Sed neque arcu, pharetra non laoreet a, efficitur id leo. + Nullam facilisis massa velit, ut sollicitudin magna elementum quis. + Donec pharetra efficitur turpis, nec ultrices leo. + Quisque placerat, dolor sit amet eleifend cursus, libero nisi + feugiat urna, a sodales quam eros id massa. + Nulla tristique neque quis turpis luctus tincidunt. + Vestibulum bibendum lobortis orci, eget semper diam ultricies a. + Nunc in nunc lacus. +
++ Toggle (v-model) +
++ Mini +
++ Expand on Hover +
++ Right NavDrawer + Transition +
+ ++ NavDrawer + Transition +
+{{ color }}
+Bordered
++ {{ height }} +
++ Custom Prop: 200px +
++ With custom class: h-[200px] +
++ Custom Class: h-[calc(100vh-100px)] +
++ Bottom Drawer +
++ Top Drawer +
++ Hover on the edge to resize +
+Popover content
-Popover content
-Popover content
-Popover content
-Popover content
-- Morpheme UI is a free and open-source Vue UI Library based on Morpheme Design System -
-- Learn more about Morpheme UI -
-- Learn how to install Morpheme UI -
-- Learn more about Morpheme UI typography -
-- Learn more about Morpheme UI -
-- Learn more about Morpheme UI -
-- Learn more about Morpheme UI -
-- Learn more about Morpheme UI -
-- Learn more about Morpheme UI -
-- Learn more about Morpheme UI -
-Popover content
+Popover content
+Popover content
+Popover content
+Popover content
++ Morpheme UI is a free and open-source Vue UI Library based on Morpheme Design System +
++ Learn more about Morpheme UI +
++ Learn how to install Morpheme UI +
++ Learn more about Morpheme UI typography +
++ Learn more about Morpheme UI +
++ Learn more about Morpheme UI +
++ Learn more about Morpheme UI +
++ Learn more about Morpheme UI +
++ Learn more about Morpheme UI +
++ Learn more about Morpheme UI +
+