Skip to content

Commit

Permalink
Merge branch 'v5/develop' into v6/develop
Browse files Browse the repository at this point in the history
  • Loading branch information
distantnative committed Jan 25, 2025
2 parents 82f4d9c + 8f83464 commit c5adc1f
Show file tree
Hide file tree
Showing 17 changed files with 255 additions and 72 deletions.
5 changes: 5 additions & 0 deletions panel/lab/components/fieldpreviews/tag/index.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

return [
'docs' => 'k-tag-field-preview',
];
29 changes: 29 additions & 0 deletions panel/lab/components/fieldpreviews/tag/index.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<template>
<k-lab-examples>
<k-lab-example label="Default">
<k-lab-table-cell>
<!-- @code -->
<k-tag-field-preview value="A" />
<!-- @code-end -->
</k-lab-table-cell>
</k-lab-example>

<k-lab-example label="Overlow">
<k-lab-table-cell>
<!-- @code -->
<k-tag-field-preview
value="Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, Bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
/>
<!-- @code-end -->
</k-lab-table-cell>
</k-lab-example>

<k-lab-example label="Empty">
<k-lab-table-cell>
<!-- @code -->
<k-tag-field-preview />
<!-- @code-end -->
</k-lab-table-cell>
</k-lab-example>
</k-lab-examples>
</template>
6 changes: 3 additions & 3 deletions panel/lab/components/fieldpreviews/users/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
:value="[
{
image: { icon: 'user', back: 'black', color: 'white' },
text: '[email protected]',
email: '[email protected]',
link: '/'
},
{
image: { icon: 'user', back: 'black', color: 'white' },
text: '[email protected]',
email: '[email protected]',
link: '/'
}
]"
Expand All @@ -28,7 +28,7 @@
:value="
Array(20).fill({
image: { icon: 'user', back: 'black', color: 'white' },
text: '[email protected]',
email: '[email protected]',
link: '/'
})
"
Expand Down
30 changes: 29 additions & 1 deletion panel/lab/components/tags/1_tag/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
{ value: 'light', text: 'Light', icon: 'sun' }
]"
:value="theme"
@input="theme = $event"
@input="(theme = $event)"
/>

<k-lab-example label="Slot">
Expand Down Expand Up @@ -66,6 +66,34 @@
text="Foo"
/>
</k-lab-example>
<k-lab-example :flex="true" label="Image & Link">
<k-tag
link="https://getkirby.com"
:image="{ src: 'https://picsum.photos/100/100/', crop: true }"
:theme="theme"
/>
<k-tag
link="https://getkirby.com"
:image="{ src: 'https://picsum.photos/100/100/', crop: true }"
:theme="theme"
text="Foo"
/>
<k-tag
link="https://getkirby.com"
:image="{ src: 'https://picsum.photos/100/100/', crop: true }"
:removable="true"
:theme="theme"
text="Foo"
/>
<k-tag
link="https://getkirby.com"
:disabled="true"
:image="{ src: 'https://picsum.photos/100/100/', crop: true }"
:removable="true"
:theme="theme"
text="Foo"
/>
</k-lab-example>
</k-lab-examples>
</template>

Expand Down
2 changes: 1 addition & 1 deletion panel/src/components/Forms/Field/LinkField.vue
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ export default {
container-type: inline-size;
overflow: auto;
}
.k-link-field .k-bubbles-field-preview {
.k-link-field .k-tags-field-preview {
--tag-rounded: var(--rounded-sm);
--tag-size: var(--height-sm);
padding-inline: 0;
Expand Down
34 changes: 34 additions & 0 deletions panel/src/components/Forms/Previews/TagFieldPreview.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<template>
<ul
:class="[
'k-tag-field-preview',
'k-tags-field-preview',
'k-tags',
$options.class,
$attrs.class
]"
:style="$attrs.style"
>
<li>
<k-tag :html="html" :text="value" theme="light" @click.native.stop />
</li>
</ul>
</template>

<script>
import FieldPreview from "@/mixins/forms/fieldPreview.js";
export default {
mixins: [FieldPreview],
props: {
/**
* If set to `true`, the `text` is rendered as HTML code,
* otherwise as plain text
*/
html: {
type: Boolean
},
value: String
}
};
</script>
37 changes: 24 additions & 13 deletions panel/src/components/Forms/Previews/TagsFieldPreview.vue
Original file line number Diff line number Diff line change
@@ -1,26 +1,37 @@
<template>
<div
:class="['k-tags-field-preview', $options.class, $attrs.class]"
<ul
:class="['k-tags-field-preview', 'k-tags', $options.class, $attrs.class]"
:style="$attrs.style"
>
<k-tags
:draggable="false"
:html="html"
:value="tags"
element="ul"
element-tag="li"
theme="light"
/>
</div>
<li
v-for="(tag, tagIndex) in tags"
:key="tag.id ?? tag.value ?? tag.text ?? tagIndex"
>
<k-tag
:html="html"
:image="tag.image"
:link="tag.link"
:text="tag.text"
theme="light"
@click.native.stop
/>
</li>
</ul>
</template>

<script>
import FieldPreview from "@/mixins/forms/fieldPreview.js";
import { props as TagsProps } from "@/components/Navigation/Tags.vue";
export default {
mixins: [FieldPreview, TagsProps],
mixins: [FieldPreview],
props: {
/**
* If set to `true`, the `text` is rendered as HTML code,
* otherwise as plain text
*/
html: {
type: Boolean
},
value: {
default: () => [],
type: [Array, String]
Expand Down
4 changes: 2 additions & 2 deletions panel/src/components/Forms/Previews/UsersFieldPreview.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ export default {
extends: TagsFieldPreview,
class: "k-users-field-preview",
computed: {
bubble() {
tags() {
return this.value.map((user) => {
return {
text: user.username,
text: user.username ?? user.email,
link: user.link,
image: user.image
};
Expand Down
12 changes: 7 additions & 5 deletions panel/src/components/Forms/Previews/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import ImageFieldPreview from "./ImageFieldPreview.vue";
import LinkFieldPreview from "./LinkFieldPreview.vue";
import ObjectFieldPreview from "./ObjectFieldPreview.vue";
import PagesFieldPreview from "./PagesFieldPreview.vue";
import TagFieldPreview from "./TagFieldPreview.vue";
import TagsFieldPreview from "./TagsFieldPreview.vue";
import TextFieldPreview from "./TextFieldPreview.vue";
import TimeFieldPreview from "./TimeFieldPreview.vue";
Expand All @@ -31,6 +32,7 @@ export default {
app.component("k-link-field-preview", LinkFieldPreview);
app.component("k-object-field-preview", ObjectFieldPreview);
app.component("k-pages-field-preview", PagesFieldPreview);
app.component("k-tag-field-preview", TagFieldPreview);
app.component("k-tags-field-preview", TagsFieldPreview);
app.component("k-text-field-preview", TextFieldPreview);
app.component("k-toggle-field-preview", ToggleFieldPreview);
Expand All @@ -42,10 +44,10 @@ export default {
app.component("k-list-field-preview", HtmlFieldPreview);
app.component("k-writer-field-preview", HtmlFieldPreview);

app.component("k-checkboxes-field-preview", BubblesFieldPreview);
app.component("k-multiselect-field-preview", BubblesFieldPreview);
app.component("k-radio-field-preview", BubblesFieldPreview);
app.component("k-select-field-preview", BubblesFieldPreview);
app.component("k-toggles-field-preview", BubblesFieldPreview);
app.component("k-checkboxes-field-preview", TagsFieldPreview);
app.component("k-multiselect-field-preview", TagsFieldPreview);
app.component("k-radio-field-preview", TagFieldPreview);
app.component("k-select-field-preview", TagFieldPreview);
app.component("k-toggles-field-preview", TagsFieldPreview);
}
};
12 changes: 7 additions & 5 deletions panel/src/components/Navigation/Tag.vue
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
<template>
<component
:is="element"
:is="element ?? (link ? 'k-link' : 'button')"
:aria-disabled="disabled"
:data-theme="theme"
:to="link"
class="k-tag"
type="button"
@keydown.delete.prevent="remove"
Expand Down Expand Up @@ -74,16 +75,17 @@ export default {
/**
* HTML element to use
*/
element: {
type: String,
default: "button"
},
element: String,
/**
* See `k-image-frame` or `k-icon-frame` for available options
*/
image: {
type: Object
},
/**
* Sets a link on the tag. Link can be absolute or relative.
*/
link: String,
/**
* Text to display in the bubble
*/
Expand Down
11 changes: 4 additions & 7 deletions panel/src/components/Navigation/Tags.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@
v-for="(item, itemIndex) in tags"
:key="item.id ?? item.value ?? item.text"
:disabled="disabled"
:element="elementTag"
:element="element"
:html="html"
:image="item.image"
:link="item.link"
:removable="removable && !disabled"
:theme="theme"
name="tag"
Expand Down Expand Up @@ -48,16 +49,12 @@ export const props = {
inheritAttrs: false,
props: {
/**
* HTML element to use for the tags list
* HTML element to use for each tag
*/
element: {
type: String,
default: "div"
},
/**
* HTML element to use for each tag
*/
elementTag: String,
/**
* You can set the layout to `"list"` to extend the width of each tag
* to 100% and show them in a list. This is handy in narrow columns
Expand Down Expand Up @@ -238,7 +235,7 @@ export default {
// can't be matched with any defined option
// to avoid XSS when displaying via `v-html`
text: this.$helper.string.escapeHTML(tag.text ?? tag.value),
value: tag.value
...tag
};
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/Panel/Ui/Button.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ public function __construct(
public string|array|null $title = null,
public string $type = 'button',
public string|null $variant = null,
...$attrs
) {
$this->attrs = $attrs;
}

public function props(): array
Expand Down
Loading

0 comments on commit c5adc1f

Please sign in to comment.