Skip to content

Commit 74ecb8a

Browse files
committed
Merge branch 'main' into sanitize-text
# Conflicts: # demo/composer.lock # tests-e2e/site/composer.lock
2 parents 1f1a59d + 70d5072 commit 74ecb8a

17 files changed

Lines changed: 1926 additions & 1119 deletions

File tree

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"ext-mbstring": "*",
2020
"blade-ui-kit/blade-icons": "^1.6",
2121
"code16/laravel-content-renderer": "^1.1",
22+
"enshrined/svg-sanitize": "^0.21.0",
2223
"inertiajs/inertia-laravel": "^2.0",
2324
"intervention/image": "^3.4",
2425
"laravel/framework": "^11.0|^12.0",

demo/composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"bacon/bacon-qr-code": "~2.0",
77
"blade-ui-kit/blade-icons": "^1.6",
88
"code16/laravel-content-renderer": "^1.2",
9+
"enshrined/svg-sanitize": "^0.21.0",
910
"guzzlehttp/guzzle": "^7.2",
1011
"inertiajs/inertia-laravel": "^2.0",
1112
"intervention/image": "^3.4",

demo/composer.lock

Lines changed: 775 additions & 431 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

resources/js/form/components/fields/editor/Editor.vue

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
import { __ } from "@/utils/i18n";
33
import { FormEditorFieldData } from "@/types";
4-
import { provide, ref, watch } from "vue";
4+
import { computed, provide, ref, watch } from "vue";
55
import { Editor, BubbleMenu, isActive } from "@tiptap/vue-3";
66
import debounce from 'lodash/debounce';
77
import { EditorContent } from '@tiptap/vue-3';
@@ -150,6 +150,11 @@
150150
return editor;
151151
}
152152
);
153+
154+
const dropdownEmbeds = computed(() =>
155+
Object.values(props.field.embeds ?? {})
156+
.filter(embed => !props.field.toolbar?.includes(`embed:${embed.key}`))
157+
);
153158
</script>
154159

155160
<template>
@@ -198,15 +203,15 @@
198203
</Toggle>
199204
</template>
200205
</template>
201-
<template v-if="Object.values(props.field.embeds ?? {}).length > 0">
206+
<template v-if="dropdownEmbeds.length > 0">
202207
<DropdownMenu :modal="false">
203208
<DropdownMenuTrigger as-child>
204209
<Button class="px-3" variant="ghost" size="sm" :disabled="props.field.readOnly">
205210
{{ __('sharp::form.editor.dropdown.embeds') }}
206211
</Button>
207212
</DropdownMenuTrigger>
208213
<DropdownMenuContent>
209-
<template v-for="embed in props.field.embeds">
214+
<template v-for="embed in dropdownEmbeds">
210215
<DropdownMenuItem @click="embedModal.open({ embed })">
211216
{{ embed.label }}
212217
</DropdownMenuItem>

resources/js/form/components/fields/upload/Upload.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,8 +393,8 @@
393393
<div :class="{ 'bg-background border rounded-md p-4': !asEditorEmbed }">
394394
<div class="flex gap-4">
395395
<template v-if="transformedImg ?? value?.thumbnail ?? uppyFile?.preview">
396-
<div class="self-center group/img relative flex flex-col justify-center rounded-md overflow-hidden">
397-
<img class="rounded-md max-h-[150px] max-w-[150px]"
396+
<div class="self-center group/img relative rounded-md overflow-hidden">
397+
<img class="rounded-md min-w-[50px] max-h-[150px] max-w-[150px] object-contain"
398398
:class="uppyFile && !transformedImg && field.imageCropRatio ? 'object-cover aspect-(--ratio)' : ''"
399399
:style="{
400400
'--ratio': field.imageCropRatio ? `${field.imageCropRatio[0]} / ${field.imageCropRatio[1]}` : null

resources/js/show/components/fields/File.vue

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323

2424
<template>
2525
<ShowFieldLayout v-bind="props">
26-
<div class="flex gap-4 p-4 border rounded-md max-w-[500px]">
26+
<div class="flex gap-4 p-4 border rounded-md max-w-[600px]">
2727
<template v-if="value">
2828
<template v-if="value.thumbnail">
29-
<img class="self-center rounded-sm max-w-[100px] max-h-[100px]"
30-
:src="value.thumbnail"
31-
:alt="field.label"
32-
>
29+
<div class="self-center">
30+
<img class="rounded-sm min-w-[40px] max-w-[100px] max-h-[100px] object-contain"
31+
:src="value.thumbnail"
32+
:alt="field.label"
33+
>
34+
</div>
3335
</template>
3436
<template v-else>
3537
<FileIcon class="self-center size-4" :mime-type="value.mime_type" />

resources/js/show/components/fields/text/nodes/Embed.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
</script>
1414

1515
<template>
16-
<component :is="embed.tag" class="block my-4 first:mt-0 last:mb-0 bg-background border rounded-md p-4">
16+
<component :is="embed.tag" class="block my-4 first:mt-0 last:mb-0 bg-background border rounded-md p-4 max-w-[600px]">
1717
<template v-if="embed.displayEmbedHeader">
1818
<EmbedHeader :embed="embed" />
1919
</template>

resources/js/types/generated.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ export type FormEditorFieldData = {
369369
showCharacterCount: boolean;
370370
uploads: FormEditorFieldUploadData | null;
371371
embeds: { [embedKey: string]: EmbedData };
372-
toolbar: Array<FormEditorToolbarButton>;
372+
toolbar: Array<FormEditorToolbarButton | `embed:${string}`>;
373373
maxHeight: number | null;
374374
maxLength: number | null;
375375
placeholder: string | null;

src/Data/Form/Fields/FormEditorFieldData.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public function __construct(
3535
public ?array $uploads = null,
3636
#[LiteralTypeScriptType('{ [embedKey:string]:EmbedData }')]
3737
public ?array $embeds = null,
38-
#[LiteralTypeScriptType('Array<FormEditorToolbarButton>')]
38+
#[LiteralTypeScriptType('Array<FormEditorToolbarButton | `embed:${string}`>')]
3939
public ?array $toolbar = null,
4040
public ?int $maxHeight = null,
4141
public ?int $maxLength = null,

src/Form/Fields/Formatters/UploadFormatter.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public function fromFront(SharpFormField $field, string $attribute, $value): ?ar
5555
disk: $field->storageDisk(),
5656
filePath: $formatted['file_name'],
5757
shouldOptimizeImage: $field->isImageOptimize(),
58+
shouldSanitizeSvg: $field->isImageSanitizeSvg(),
5859
transformFilters: $field->isImageTransformOriginal()
5960
? ($value['filters'] ?? null)
6061
: null,

0 commit comments

Comments
 (0)