Skip to content

Commit 8e86e6a

Browse files
authored
Feature/tag prop wrappers (#793)
#### Por favor, verifique se o seu pull request está de acordo com o checklist abaixo: - [x] A implementação feita possui testes (Caso haja um motivo para não haver testes, descrever abaixo) - [x] A documentação no mdx foi feita ou atualizada, caso necessário - [x] O eslint passou localmente ### 1 - Resumo Adiciona props que permitei ao usuário escolher qual tag ele deseja que seja renderizada nos componentes Flexbox e Grid. ### 2 - Tipo de pull request - [x] 🧱 Novo componente - [ ] ✨ Nova feature ou melhoria - [ ] 🐛 Fix - [ ] 👨‍💻 Refatoração - [ ] 📝 Documentação - [ ] 🎨 Estilo - [ ] 🤖 Build ou CI/CD ### 4 - Quais são os passos para avaliar o pull request? - Acesse a documentação do Flexbox; - Altere a prop **tag** para uma de sua preferência; - Abra o _Inspecionar_ do navegador; - Verifique que a opção escolhida é a tag renderizada no HTML. ### 6 - Esse pull request adiciona _breaking changes_? - [ ] Sim - [x] Não
1 parent 81e162b commit 8e86e6a

File tree

5 files changed

+64
-6
lines changed

5 files changed

+64
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sysvale/cuida",
3-
"version": "3.74.2",
3+
"version": "3.75.0",
44
"description": "A design system built by Sysvale, using storybook and Vue components",
55
"repository": {
66
"type": "git",

src/components/Flexbox.vue

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<template>
2-
<div
2+
<component
3+
:is="tag"
34
class="flexbox"
45
>
56
<!-- @slot Slot com o conteúdo interno do FlexBox -->
67
<slot />
7-
</div>
8+
</component>
89
</template>
910

1011
<script setup>
@@ -52,6 +53,16 @@ const props = defineProps({
5253
type: String,
5354
default: 'stretch',
5455
},
56+
/**
57+
* Define a tag que o componente deve utilizar na sua renderização. Valores aceitos: 'div', 'span', 'main', 'footer',
58+
* 'form', 'header', 'aside', 'ul', e 'li'.
59+
* Por padrão o componente renderiza uma div.
60+
*/
61+
tag: {
62+
type: String,
63+
default: 'div',
64+
validator: (value) => ['div', 'span', 'main', 'footer', 'form', 'header', 'aside', 'ul', 'li'].includes(value),
65+
},
5566
});
5667
5768
const gapAsStringResolver = (gap) => {

src/components/Grid.vue

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<template>
2-
<div
2+
<component
3+
:is="tag"
34
class="grid"
45
>
56
<!-- @slot Slot com o conteúdo interno da grid -->
67
<slot />
7-
</div>
8+
</component>
89
</template>
910

1011
<script setup>
@@ -47,6 +48,11 @@ const props = defineProps({
4748
type: String,
4849
default: 'stretch',
4950
},
51+
tag: {
52+
type: String,
53+
default: 'div',
54+
validator: (value) => ['div', 'span', 'main', 'footer', 'form', 'header', 'aside', 'ul', 'li'].includes(value),
55+
},
5056
});
5157
5258
const gapAsStringResolver = (gap) => {

src/stories/components/Flexbox.stories.mdx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,22 @@ import Spacer from '../../components/Spacer.vue';
5252
],
5353
}
5454
},
55+
tag: {
56+
control:{
57+
type: 'select',
58+
options: [
59+
'div',
60+
'span',
61+
'main',
62+
'footer',
63+
'form',
64+
'header',
65+
'aside',
66+
'ul',
67+
'li',
68+
],
69+
}
70+
},
5571
gap: {
5672
control: {
5773
type: 'range',
@@ -134,6 +150,7 @@ export const Template = (args) => ({
134150
wrap: 'wrap',
135151
justify: 'start',
136152
align: 'start',
153+
tag: 'div',
137154
}}
138155
>
139156
{ Template.bind({}) }

src/stories/components/Grid.stories.mdx

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1514,7 +1514,6 @@ A prop direction aceita os seguintes valores:
15141514
- __row (padrão):__ os itens são organizados em linhas, ocupando a largura do container antes de avançar para a próxima linha.
15151515
- __column:__ os itens são organizados em colunas, ocupando a altura do container antes de avançar para a próxima coluna.
15161516

1517-
15181517
<Story
15191518
name="subgrid"
15201519
>
@@ -1545,3 +1544,28 @@ A prop direction aceita os seguintes valores:
15451544
`
15461545
```
15471546
<br />
1547+
1548+
1549+
1550+
### __Tag renderizada__
1551+
1552+
A prop `tag` permite definir a tag que o componente renderiza. Essa propriedade é utilizada para permitir que o componente
1553+
seja utilizado em diferentes contextos, como por exemplo, em um `footer` ou em um `header`.
1554+
1555+
###### Comportamento padrão
1556+
1557+
O valor default da propriedade é `div`, o que significa que o componente renderiza uma div.
1558+
1559+
###### Valores Aceitos
1560+
A prop tag é uma propriedade string que aceita os seguintes valores:
1561+
- __div (padrão):__ renderiza uma div.
1562+
- __span:__ renderiza uma span.
1563+
- __main:__ renderiza um main.
1564+
- __footer:__ renderiza um footer.
1565+
- __form:__ renderiza um form.
1566+
- __header:__ renderiza um header.
1567+
- __aside:__ renderiza um aside.
1568+
- __ul:__ renderiza uma ul.
1569+
- __li:__ renderiza uma li.
1570+
1571+
<br />

0 commit comments

Comments
 (0)