feat(10.1-02): mount plugin widget elements and run their actions from the form

- pluginAssets loads controller scripts and stylesheets from {base}/assets/ only, once per URL
- WidgetField mounts the custom element with attributes only and posts summer-action through the typed client
- Only declared fill keys returned by the server are patched; the form turns dirty and nothing saves
- widget is a registered valueless type rendered on create and update, labelled as a group
- backend::lang.extension strings in en and pl; embedded dist rebuilt
This commit is contained in:
Jakub Zych
2026-09-29 02:04:34 +02:00
parent c3b76b1afb
commit 107d820109
19 changed files with 789 additions and 14 deletions

View File

@@ -0,0 +1,22 @@
<script setup lang="ts">
import { CircleAlert } from '@lucide/vue'
// The extension failure box (UI-SPEC S5): UnsupportedField's geometry with a
// danger icon, shown when a widget or partial could not be loaded. One line
// sits centred in the 44px box; longer text wraps, the box grows with 10px
// vertical padding and the icon stays on the first line.
defineProps<{ text: string }>()
</script>
<template>
<div
role="alert"
data-extension-failure
class="flex min-h-input items-center rounded-control border-[1.5px] border-dashed border-border-strong bg-subtle px-3.5 py-2.5 text-[13px] text-muted"
>
<span class="flex min-w-0 items-start gap-2.5">
<CircleAlert :size="16" class="mt-0.5 shrink-0 text-danger" aria-hidden="true" />
<span class="min-w-0 [overflow-wrap:anywhere]">{{ text }}</span>
</span>
</div>
</template>