Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,4 @@ yarn-error.log*
.oxlintrc.json.bak
*/**/auto-imports.d.ts
*/**/components.d.ts
.cunzhi*
53 changes: 23 additions & 30 deletions apps/docs/en/components/mentionSender/demos/header.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,36 @@ title: Header Slot

Use the `#header` slot to customize the input header content.

::: info
Control header container expand/collapse through component instance
::: warning Deprecation Warning
The following methods will be removed in the next major version. It is recommended to use `v-model:openHeader` for two-way binding control:

- `senderRef.value.openHeader()` Open header container
- `senderRef.value.closeHeader()` Close header container
- `senderRef.value.openHeader()` Open header container (deprecated)
- `senderRef.value.closeHeader()` Close header container (deprecated)
:::

::: tip Recommended Usage
Use `v-model:openHeader` for two-way binding to control header display state:

```vue
<MentionSender v-model:openHeader="openHeader">
<template #header>Header content</template>
</MentionSender>
```
:::
</docs>

<script setup lang="ts">
import { CircleClose } from '@element-plus/icons-vue';

const senderRef = ref();
const senderValue = ref('');
const showHeaderFlog = ref(false);

onMounted(() => {
showHeaderFlog.value = true;
senderRef.value.openHeader();
});
const openHeader = ref(true); // Use v-model:openHeader to control header display state

function openCloseHeader() {
if (!showHeaderFlog.value) {
senderRef.value.openHeader();
}
else {
senderRef.value.closeHeader();
}
showHeaderFlog.value = !showHeaderFlog.value;
function toggleHeader() {
openHeader.value = !openHeader.value;
}

function closeHeader() {
showHeaderFlog.value = false;
senderRef.value.closeHeader();
openHeader.value = false;
}
</script>

Expand All @@ -51,26 +48,22 @@ function closeHeader() {
justify-content: space-between;
"
>
<el-button style="width: fit-content" @click="openCloseHeader">
{{ showHeaderFlog ? 'Close Header' : 'Open Header' }}
<el-button style="width: fit-content" @click="toggleHeader">
{{ openHeader ? 'Close Header' : 'Open Header' }}
</el-button>
<MentionSender ref="senderRef" v-model="senderValue">
<MentionSender v-model="senderValue" v-model:open-header="openHeader">
<template #header>
<div class="header-self-wrap">
<div class="header-self-title">
<div class="header-left">
💯 Welcome to Element Plus X
</div>
<div class="header-left">💯 Welcome to Element Plus X</div>
<div class="header-right">
<el-button @click.stop="closeHeader">
<el-icon><CircleClose /></el-icon>
<span>Close Header</span>
</el-button>
</div>
</div>
<div class="header-self-content">
🦜 Custom Header Content
</div>
<div class="header-self-content">🦜 Custom Header Content</div>
</div>
</template>
</MentionSender>
Expand Down
1 change: 1 addition & 0 deletions apps/docs/en/components/mentionSender/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ This warm tip was last updated: `2025-04-16`
| ------------------------- | -------------------- | -------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `v-model` | String | No | '' | Bound value of the input box, use `v-model` for two-way binding. |
| `placeholder` | String | No | '' | Placeholder text for the input box. |
| `openHeader` | Boolean | No | false | Whether to open the custom header of the input box, using `v-model:openHeader` for two-way binding |
| `auto-size` | Object | No | \{ minRows:1, maxRows:6 \} | Set the minimum and maximum number of visible rows for the input box. |
| `read-only` | Boolean | No | false | Whether the input box is read-only. |
| `disabled` | Boolean | No | false | Whether the input box is disabled. |
Expand Down
53 changes: 23 additions & 30 deletions apps/docs/en/components/sender/demos/header.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,36 @@ title: Header Slot

Use the `#header` slot to customize the input header content.

::: info
Control header container expand/collapse through component instance
::: warning Deprecation Warning
The following methods will be removed in the next major version. It is recommended to use `v-model:openHeader` for two-way binding control:

- `senderRef.value.openHeader()` Open header container
- `senderRef.value.closeHeader()` Close header container
- `senderRef.value.openHeader()` Open header container (deprecated)
- `senderRef.value.closeHeader()` Close header container (deprecated)
:::

::: tip Recommended Usage
Use `v-model:openHeader` for two-way binding to control header display state:

```vue
<Sender v-model:openHeader="openHeader">
<template #header>Header content</template>
</Sender>
```
Comment on lines +15 to +22
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix sample: use kebab-case argument in DOM templates.

In SFC/DOM templates, the v-model argument must be kebab-cased. Update the snippet.

-```vue
-<Sender v-model:openHeader="openHeader">
+```vue
+<Sender v-model:open-header="openHeader">
   <template #header>Header content</template>
 </Sender>

<details>
<summary>🤖 Prompt for AI Agents</summary>

In apps/docs/en/components/sender/demos/header.vue around lines 15 to 22, the
example uses a camelCase v-model argument (v-model:openHeader) which is invalid
in SFC/DOM templates; update the snippet to use kebab-case for the v-model
argument (v-model:open-header="openHeader") in the template example so it
follows Vue's DOM/SFC template requirements.


</details>

<!-- fingerprinting:phantom:medusa:chinchilla -->

<!-- This is an auto-generated comment by CodeRabbit -->

:::
</docs>

<script setup lang="ts">
import { CircleClose } from '@element-plus/icons-vue';

const senderRef = ref();
const senderValue = ref('');
const showHeaderFlog = ref(false);

onMounted(() => {
showHeaderFlog.value = true;
senderRef.value.openHeader();
});
const openHeader = ref(true); // Use v-model:openHeader to control header display state

function openCloseHeader() {
if (!showHeaderFlog.value) {
senderRef.value.openHeader();
}
else {
senderRef.value.closeHeader();
}
showHeaderFlog.value = !showHeaderFlog.value;
function toggleHeader() {
openHeader.value = !openHeader.value;
}

function closeHeader() {
showHeaderFlog.value = false;
senderRef.value.closeHeader();
openHeader.value = false;
}
</script>

Expand All @@ -51,26 +48,22 @@ function closeHeader() {
justify-content: space-between;
"
>
<el-button style="width: fit-content" @click="openCloseHeader">
{{ showHeaderFlog ? 'Close Header' : 'Open Header' }}
<el-button style="width: fit-content" @click="toggleHeader">
{{ openHeader ? 'Close Header' : 'Open Header' }}
</el-button>
<Sender ref="senderRef" v-model="senderValue">
<Sender v-model="senderValue" v-model:open-header="openHeader">
<template #header>
<div class="header-self-wrap">
<div class="header-self-title">
<div class="header-left">
💯 Welcome to Element Plus X
</div>
<div class="header-left">💯 Welcome to Element Plus X</div>
<div class="header-right">
<el-button @click.stop="closeHeader">
<el-icon><CircleClose /></el-icon>
<span>Close Header</span>
</el-button>
</div>
</div>
<div class="header-self-content">
🦜 Custom Header Content
</div>
<div class="header-self-content">🦜 Custom Header Content</div>
</div>
</template>
</Sender>
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/en/components/sender/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: Sender
---


::: warning
`Added in version 1.1.6`

Expand Down Expand Up @@ -101,6 +100,7 @@ Built-in browser speech recognition API. You can use the [`useRecord`](https://e
| ------------------------- | -------------------- | -------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `v-model` | String | No | '' | Bound value of the input box, use `v-model` for two-way binding. |
| `placeholder` | String | No | '' | Placeholder text for the input box. |
| `openHeader` | Boolean | No | false | Whether to open the custom header of the input box, using `v-model:openHeader` for two-way binding |
| `auto-size` | Object | No | \{ minRows:1, maxRows:6 \} | Set the minimum and maximum number of visible rows for the input box. |
| `read-only` | Boolean | No | false | Whether the input box is read-only. |
| `disabled` | Boolean | No | false | Whether the input box is disabled. |
Expand Down
53 changes: 23 additions & 30 deletions apps/docs/zh/components/mentionSender/demos/header.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,36 @@ title: 头部插槽

通过 `#header` 插槽用于自定义输入框的头部内容。

::: info
通过组件实例控制 头部容器 展开收起
::: warning 废弃警告
以下方法将在下个大版本中移除,推荐使用 `v-model:openHeader` 进行双向绑定控制:

- `senderRef.value.openHeader()` 打开头部容器
- `senderRef.value.closeHeader()` 关闭头部容器
- `senderRef.value.openHeader()` 打开头部容器 (已废弃)
- `senderRef.value.closeHeader()` 关闭头部容器 (已废弃)
:::

::: tip 推荐用法
使用 `v-model:openHeader` 进行双向绑定控制头部显示状态:

```vue
<Sender v-model:openHeader="openHeader">
<template #header>头部内容</template>
</Sender>
```
Comment on lines +19 to +22
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix component tag and use kebab-case v-model arg in the snippet

This demo is for MentionSender but the snippet shows Sender and camelCase argument. Align with actual usage below.

Apply:

-<Sender v-model:openHeader="openHeader">
-  <template #header>头部内容</template>
-</Sender>
+<MentionSender v-model:open-header="openHeader">
+  <template #header>头部内容</template>
+</MentionSender>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Sender v-model:openHeader="openHeader">
<template #header>头部内容</template>
</Sender>
```
<MentionSender v-model:open-header="openHeader">
<template #header>头部内容</template>
</MentionSender>
🤖 Prompt for AI Agents
In apps/docs/zh/components/mentionSender/demos/header.vue around lines 19 to 22,
the demo snippet incorrectly uses <Sender> and a camelCase v-model argument;
update the component tag to MentionSender and change the v-model argument to
kebab-case (v-model:open-header) so it matches the actual component API and the
usage shown elsewhere; ensure the slot template remains the same (template
#header) and that the binding syntax is consistent with other examples.

:::
</docs>

<script setup lang="ts">
import { CircleClose } from '@element-plus/icons-vue';

const senderRef = ref();
const senderValue = ref('');
const showHeaderFlog = ref(false);

onMounted(() => {
showHeaderFlog.value = true;
senderRef.value.openHeader();
});
const openHeader = ref(true); // 使用 v-model:openHeader 控制头部显示状态

function openCloseHeader() {
if (!showHeaderFlog.value) {
senderRef.value.openHeader();
}
else {
senderRef.value.closeHeader();
}
showHeaderFlog.value = !showHeaderFlog.value;
function toggleHeader() {
openHeader.value = !openHeader.value;
}

function closeHeader() {
showHeaderFlog.value = false;
senderRef.value.closeHeader();
openHeader.value = false;
}
</script>

Expand All @@ -51,26 +48,22 @@ function closeHeader() {
justify-content: space-between;
"
>
<el-button style="width: fit-content" @click="openCloseHeader">
{{ showHeaderFlog ? '关闭头部' : '打开头部' }}
<el-button style="width: fit-content" @click="toggleHeader">
{{ openHeader ? '关闭头部' : '打开头部' }}
</el-button>
<MentionSender ref="senderRef" v-model="senderValue">
<MentionSender v-model="senderValue" v-model:open-header="openHeader">
<template #header>
<div class="header-self-wrap">
<div class="header-self-title">
<div class="header-left">
💯 欢迎使用 Element Plus X
</div>
<div class="header-left">💯 欢迎使用 Element Plus X</div>
<div class="header-right">
<el-button @click.stop="closeHeader">
<el-icon><CircleClose /></el-icon>
<span>关闭头部</span>
</el-button>
</div>
</div>
<div class="header-self-content">
🦜 自定义头部内容
</div>
<div class="header-self-content">🦜 自定义头部内容</div>
</div>
</template>
</MentionSender>
Expand Down
1 change: 1 addition & 0 deletions apps/docs/zh/components/mentionSender/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ title: 'MentionSender'
| ------------------------- | -------------------- | -------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `v-model` | String | 否 | '' | 输入框的绑定值,使用 `v-model` 进行双向绑定。 |
| `placeholder` | String | 否 | '' | 输入框的提示语文本。 |
| `openHeader` | Boolean | 否 | false | 输入框自定义头部是否打开,使用 `v-model:openHeader` 进行双向绑定 |
| `auto-size` | Object | 否 | \{ minRows:1, maxRows:6 \} | 设置输入框的最小展示行数和最大展示行数。 |
| `read-only` | Boolean | 否 | false | 输入框是否为只读状态。 |
| `disabled` | Boolean | 否 | false | 输入框是否为禁用状态。 |
Expand Down
53 changes: 23 additions & 30 deletions apps/docs/zh/components/sender/demos/header.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,36 @@ title: 头部插槽

通过 `#header` 插槽用于自定义输入框的头部内容。

::: info
通过组件实例控制 头部容器 展开收起
::: warning 废弃警告
以下方法将在下个大版本中移除,推荐使用 `v-model:openHeader` 进行双向绑定控制:

- `senderRef.value.openHeader()` 打开头部容器
- `senderRef.value.closeHeader()` 关闭头部容器
- `senderRef.value.openHeader()` 打开头部容器 (已废弃)
- `senderRef.value.closeHeader()` 关闭头部容器 (已废弃)
:::

::: tip 推荐用法
使用 `v-model:openHeader` 进行双向绑定控制头部显示状态:

```vue
<Sender v-model:openHeader="openHeader">
<template #header>头部内容</template>
</Sender>
```
:::
</docs>

<script setup lang="ts">
import { CircleClose } from '@element-plus/icons-vue';

const senderRef = ref();
const senderValue = ref('');
const showHeaderFlog = ref(false);

onMounted(() => {
showHeaderFlog.value = true;
senderRef.value.openHeader();
});
const openHeader = ref(true); // 使用 v-model:openHeader 控制头部显示状态

function openCloseHeader() {
if (!showHeaderFlog.value) {
senderRef.value.openHeader();
}
else {
senderRef.value.closeHeader();
}
showHeaderFlog.value = !showHeaderFlog.value;
function toggleHeader() {
openHeader.value = !openHeader.value;
}

function closeHeader() {
showHeaderFlog.value = false;
senderRef.value.closeHeader();
openHeader.value = false;
}
</script>

Expand All @@ -51,26 +48,22 @@ function closeHeader() {
justify-content: space-between;
"
>
<el-button style="width: fit-content" @click="openCloseHeader">
{{ showHeaderFlog ? '关闭头部' : '打开头部' }}
<el-button style="width: fit-content" @click="toggleHeader">
{{ openHeader ? '关闭头部' : '打开头部' }}
</el-button>
<Sender ref="senderRef" v-model="senderValue">
<Sender v-model="senderValue" v-model:open-header="openHeader">
<template #header>
<div class="header-self-wrap">
<div class="header-self-title">
<div class="header-left">
💯 欢迎使用 Element Plus X
</div>
<div class="header-left">💯 欢迎使用 Element Plus X</div>
<div class="header-right">
<el-button @click.stop="closeHeader">
<el-icon><CircleClose /></el-icon>
<span>关闭头部</span>
</el-button>
</div>
</div>
<div class="header-self-content">
🦜 自定义头部内容
</div>
<div class="header-self-content">🦜 自定义头部内容</div>
</div>
</template>
</Sender>
Expand Down
Loading