Initiated Message

pull/7382/head
Cagatay Civici 2025-03-06 13:47:11 +03:00
parent 68a54c3728
commit 0b6a582417
16 changed files with 402 additions and 2 deletions

View File

@ -66,6 +66,10 @@
"name": "InputText",
"to": "/inputtext"
},
{
"name": "Message",
"to": "/message"
},
{
"name": "Panel",
"to": "/panel"

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,11 @@
<template>
<DocSectionText v-bind="$attrs" />
<DocSectionCode :code="code" lang="script" />
</template>
<script setup>
import { ref } from 'vue';
const code = ref(`import InputText from '@/volt/inputtext';
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,26 @@
<template>
<DocSectionText v-bind="$attrs">
<p>Message component requires a content to display.</p>
</DocSectionText>
<div class="card">
<Message>Message Content</Message>
</div>
<DocSectionCode :code="code" />
</template>
<script setup>
import Message from '@/volt/message';
import { ref } from 'vue';
const code = ref(`
<template>
<div class="card">
<Message>Message Content</Message>
</div>
</template>
<script setup>
import Message from '@/volt/message';
<\/script>
`);
</script>

View File

@ -0,0 +1,81 @@
<template>
<DocComponent title="Vue Message Component" header="Message" description="Message component is used to display inline messages." :componentDocs="docs" />
</template>
<script>
import BasicDoc from '@/doc/message/BasicDoc.vue';
import ClosabledDoc from '@/doc/message/ClosableDoc.vue';
import DynamicDoc from '@/doc/message/DynamicDoc.vue';
import FormsDoc from '@/doc/message/FormsDoc.vue';
import IconDoc from '@/doc/message/IconDoc.vue';
import ImportDoc from '@/doc/message/ImportDoc.vue';
import LifeDoc from '@/doc/message/LifeDoc.vue';
import OutlinedDoc from '@/doc/message/OutlinedDoc.vue';
import SimpleDoc from '@/doc/message/SimpleDoc.vue';
import SeverityDoc from '@/doc/message/SeverityDoc.vue';
import SizesDoc from '@/doc/message/SizesDoc.vue';
export default {
data() {
return {
docs: [
{
id: 'import',
label: 'Import',
component: ImportDoc
},
{
id: 'basic',
label: 'Basic',
component: BasicDoc
},
{
id: 'severity',
label: 'Severity',
component: SeverityDoc
},
{
id: 'icon',
label: 'Icon',
component: IconDoc
},
{
id: 'outlined',
label: 'Outlined',
component: OutlinedDoc
},
{
id: 'simple',
label: 'Simple',
component: SimpleDoc
},
{
id: 'sizes',
label: 'Sizes',
component: SizesDoc
},
{
id: 'forms',
label: 'Forms',
component: FormsDoc
},
{
id: 'dynamic',
label: 'Dynamic',
component: DynamicDoc
},
{
id: 'closable',
label: 'Closable',
component: ClosabledDoc
},
{
id: 'life',
label: 'Life',
component: LifeDoc
}
]
};
}
};
</script>

View File

@ -0,0 +1,35 @@
<template>
<Message
unstyled
:pt="theme"
:ptOptions="{
mergeProps: ptViewMerge
}"
>
<template v-for="(_, slotName) in $slots" v-slot:[slotName]="slotProps">
<slot :name="slotName" v-bind="slotProps ?? {}" />
</template>
</Message>
</template>
<script setup>
import Message from 'primevue/message';
import { ref } from 'vue';
import { ptViewMerge } from '../utils';
const theme = ref({
root: ``,
content: ``,
icon: ``,
text: ``,
closeButton: ``,
closeIcon: ``,
transition: {
enterFromClass: 'opacity-0',
enterActiveClass: 'transition-opacity duration-300',
leaveFromClass: 'max-h-40',
leaveActiveClass: 'overflow-hidden transition-all duration-300 ease-in',
leaveToClass: 'max-h-0 opacity-0 !m-0'
}
});
</script>

View File

@ -1,5 +1,5 @@
<template>
<span :class="cx('root')" :data-p="dataP" data-badge v-bind="ptmi('root')">
<span :class="cx('root')" :data-p="dataP" v-bind="ptmi('root')">
<slot>{{ value }}</slot>
</span>
</template>

View File

@ -1,6 +1,6 @@
<template>
<transition name="p-message" appear v-bind="ptmi('transition')">
<div v-show="visible" :class="cx('root')" role="alert" aria-live="assertive" aria-atomic="true" v-bind="ptm('root')">
<div v-show="visible" :class="cx('root')" role="alert" aria-live="assertive" aria-atomic="true" :data-p="dataP" v-bind="ptm('root')">
<slot v-if="$slots.container" name="container" :closeCallback="close"></slot>
<div v-else :class="cx('content')" v-bind="ptm('content')">
<slot name="icon" :class="cx('icon')">
@ -21,6 +21,7 @@
</template>
<script>
import { cn } from '@primeuix/utils';
import TimesIcon from '@primevue/icons/times';
import Ripple from 'primevue/ripple';
import BaseMessage from './BaseMessage.vue';
@ -53,6 +54,14 @@ export default {
computed: {
closeAriaLabel() {
return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.close : undefined;
},
dataP() {
return cn({
outlined: this.variant === 'outlined',
simple: this.variant === 'simple',
[this.severity]: this.severity,
[this.size]: this.size
});
}
},
directives: {