Fixed #5719 - Fieldset: #legend updates

pull/5756/head
tugcekucukoglu 2024-05-10 12:47:23 +03:00
parent 731951b0a9
commit d4be481ec8
4 changed files with 49 additions and 34 deletions

View File

@ -177,8 +177,15 @@ export interface FieldsetSlots {
default: () => VNode[]; default: () => VNode[];
/** /**
* Custom legend template. * Custom legend template.
* @param {Object} scope - legend slot's params.
*/ */
legend: () => VNode[]; legend(scope: {
/**
* Toggle function.
* @param {Event} event - Browser event
*/
toggleCallback: (event: Event) => void;
}): VNode[];
/** /**
* @deprecated since v4.0. Use the 'toggleicon' slot instead. * @deprecated since v4.0. Use the 'toggleicon' slot instead.
* Custom toggler icon template. * Custom toggler icon template.

View File

@ -1,30 +1,27 @@
<template> <template>
<fieldset :class="cx('root')" v-bind="ptmi('root')"> <fieldset :class="cx('root')" v-bind="ptmi('root')">
<legend :class="cx('legend')" v-bind="ptm('legend')"> <legend :class="cx('legend')" v-bind="ptm('legend')">
<slot v-if="!toggleable" name="legend"> <slot name="legend" :toggleCallback="toggle">
<span :id="id + '_header'" :class="cx('legendLabel')" v-bind="ptm('legendLabel')">{{ legend }}</span> <span v-if="!toggleable" :id="id + '_header'" :class="cx('legendLabel')" v-bind="ptm('legendLabel')">{{ legend }}</span>
</slot> <button
<a v-if="toggleable"
v-if="toggleable" :id="id + '_header'"
:id="id + '_header'" v-ripple
v-ripple type="button"
tabindex="0" :aria-controls="id + '_content'"
role="button" :aria-expanded="!d_collapsed"
:aria-controls="id + '_content'" :aria-label="buttonAriaLabel"
:aria-expanded="!d_collapsed" @click="toggle"
:aria-label="buttonAriaLabel" @keydown="onKeyDown"
@click="toggle" v-bind="{ ...toggleButtonProps, ...ptm('toggler') }"
@keydown="onKeyDown" >
v-bind="{ ...toggleButtonProps, ...ptm('toggler') }" <!--TODO: togglericon deprecated since v4.0-->
> <slot :name="$slots.toggleicon ? 'toggleicon' : 'togglericon'" :collapsed="d_collapsed">
<!--TODO: togglericon deprecated since v4.0--> <component :is="d_collapsed ? 'PlusIcon' : 'MinusIcon'" :class="cx('toggleIcon')" v-bind="ptm('toggleIcon')" />
<slot :name="$slots.toggleicon ? 'toggleicon' : 'togglericon'" :collapsed="d_collapsed"> </slot>
<component :is="d_collapsed ? 'PlusIcon' : 'MinusIcon'" :class="cx('toggleIcon')" v-bind="ptm('toggleIcon')" />
</slot>
<slot name="legend">
<span :class="cx('legendLabel')" v-bind="ptm('legendLabel')">{{ legend }}</span> <span :class="cx('legendLabel')" v-bind="ptm('legendLabel')">{{ legend }}</span>
</slot> </button>
</a> </slot>
</legend> </legend>
<transition name="p-toggleable-content" v-bind="ptm('transition')"> <transition name="p-toggleable-content" v-bind="ptm('transition')">
<div v-show="!d_collapsed" :id="id + '_content'" :class="cx('contentContainer')" role="region" :aria-labelledby="id + '_header'" v-bind="ptm('contentContainer')"> <div v-show="!d_collapsed" :id="id + '_content'" :class="cx('contentContainer')" role="region" :aria-labelledby="id + '_header'" v-bind="ptm('contentContainer')">

View File

@ -12,7 +12,6 @@ const theme = ({ dt }) => `
.p-fieldset-legend { .p-fieldset-legend {
background: ${dt('fieldset.legend.background')}; background: ${dt('fieldset.legend.background')};
font-weight: 600;
border-radius: 6px; border-radius: 6px;
border: 0 none; border: 0 none;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
@ -23,7 +22,7 @@ const theme = ({ dt }) => `
padding: 0; padding: 0;
} }
.p-fieldset-toggleable > .p-fieldset-legend > a { .p-fieldset-toggleable > .p-fieldset-legend > button {
cursor: pointer; cursor: pointer;
user-select: none; user-select: none;
overflow: hidden; overflow: hidden;
@ -34,12 +33,18 @@ const theme = ({ dt }) => `
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
background: transparent;
color: ${dt('fieldset.legend.color')}; color: ${dt('fieldset.legend.color')};
border: 0 none;
border-radius: ${dt('border.radius.md')}; border-radius: ${dt('border.radius.md')};
transition: background ${dt('transition.duration')}, color ${dt('transition.duration')}, outline-color ${dt('transition.duration')}; transition: background ${dt('transition.duration')}, color ${dt('transition.duration')}, outline-color ${dt('transition.duration')};
outline-color: transparent; outline-color: transparent;
} }
.p-fieldset-legend-label {
font-weight: 600;
}
.p-fieldset-toggleable > .p-fieldset-legend > a:focus-visible { .p-fieldset-toggleable > .p-fieldset-legend > a:focus-visible {
outline: ${dt('focus.ring.width')} ${dt('focus.ring.style')} ${dt('focus.ring.color')}; outline: ${dt('focus.ring.width')} ${dt('focus.ring.style')} ${dt('focus.ring.color')};
outline-offset: ${dt('focus.ring.offset')}; outline-offset: ${dt('focus.ring.offset')};

View File

@ -31719,16 +31719,22 @@
"readonly": false, "readonly": false,
"type": "Function", "type": "Function",
"default": "" "default": ""
},
{
"name": "legend",
"optional": false,
"readonly": false,
"type": "Function",
"default": ""
} }
], ],
"methods": [ "methods": [
{
"name": "legend",
"parameters": [
{
"name": "scope",
"optional": false,
"type": "{\n \t <span class=\"ml-3 doc-option-parameter-name\">toggleCallback</span>: <span class=\"doc-option-parameter-type\">(<span class=\"doc-option-parameter-name\">event</span>: Event) &rArr; void</span>, <span class=\"doc-option-parameter-type\">// Toggle function.</span>\n}",
"description": "legend slot's params."
}
],
"returnType": "VNode<RendererNode, RendererElement, Object>[]",
"description": "Custom legend template."
},
{ {
"name": "togglericon", "name": "togglericon",
"parameters": [ "parameters": [
@ -31918,7 +31924,7 @@
"description": "Defines methods that can be accessed by the component's reference.", "description": "Defines methods that can be accessed by the component's reference.",
"values": [ "values": [
{ {
"name": "basicUpload", "name": "upload",
"parameters": [], "parameters": [],
"returnType": "void", "returnType": "void",
"description": "Upload file." "description": "Upload file."