fix: initialize margin fields from stylesheet detailed values

Fixes margin/padding field initialization when CSS contains 4-value shorthand (e.g., margin: 0mm 0mm 24mm 0mm). Now properly populates both simple and detailed fields, and auto-opens detailed editor when values differ.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
isUnknown 2025-12-05 16:35:53 +01:00
parent c4d2015a69
commit d3cd296fd7

View file

@ -87,6 +87,7 @@
<!-- Marges extérieures --> <!-- Marges extérieures -->
<div class="settings-subsection"> <div class="settings-subsection">
<MarginEditor <MarginEditor
ref="marginOuterEditor"
id="margin-outer" id="margin-outer"
label="Marges extérieures" label="Marges extérieures"
v-model:simple="marginOuter" v-model:simple="marginOuter"
@ -98,6 +99,7 @@
<!-- Marges intérieures --> <!-- Marges intérieures -->
<div class="settings-subsection"> <div class="settings-subsection">
<MarginEditor <MarginEditor
ref="marginInnerEditor"
id="margin-inner" id="margin-inner"
label="Marges intérieures" label="Marges intérieures"
v-model:simple="marginInner" v-model:simple="marginInner"
@ -155,6 +157,9 @@ const marginInnerDetailed = ref({
left: { value: 0, unit: 'mm' } left: { value: 0, unit: 'mm' }
}); });
const marginOuterEditor = ref(null);
const marginInnerEditor = ref(null);
let isUpdatingFromStore = false; let isUpdatingFromStore = false;
// Watchers for body styles // Watchers for body styles
@ -237,8 +242,36 @@ const syncFromStore = () => {
if (margins) { if (margins) {
if (margins.simple) { if (margins.simple) {
marginOuter.value = margins.simple; marginOuter.value = margins.simple;
// Sync detailed from simple
marginOuterDetailed.value = {
top: { ...margins.simple },
right: { ...margins.simple },
bottom: { ...margins.simple },
left: { ...margins.simple }
};
} else if (margins.detailed) { } else if (margins.detailed) {
marginOuterDetailed.value = margins.detailed; marginOuterDetailed.value = margins.detailed;
// Check if all values are the same to set simple value
const allSame =
margins.detailed.top.value === margins.detailed.right.value &&
margins.detailed.top.value === margins.detailed.bottom.value &&
margins.detailed.top.value === margins.detailed.left.value &&
margins.detailed.top.unit === margins.detailed.right.unit &&
margins.detailed.top.unit === margins.detailed.bottom.unit &&
margins.detailed.top.unit === margins.detailed.left.unit;
if (allSame) {
marginOuter.value = margins.detailed.top;
} else {
// Values are different, open the detailed editor and use first value for simple
marginOuter.value = margins.detailed.top;
// Open detailed view after mount
setTimeout(() => {
if (marginOuterEditor.value) {
marginOuterEditor.value.expanded = true;
}
}, 0);
}
} }
} }
@ -247,8 +280,36 @@ const syncFromStore = () => {
if (padding) { if (padding) {
if (padding.simple) { if (padding.simple) {
marginInner.value = padding.simple; marginInner.value = padding.simple;
// Sync detailed from simple
marginInnerDetailed.value = {
top: { ...padding.simple },
right: { ...padding.simple },
bottom: { ...padding.simple },
left: { ...padding.simple }
};
} else if (padding.detailed) { } else if (padding.detailed) {
marginInnerDetailed.value = padding.detailed; marginInnerDetailed.value = padding.detailed;
// Check if all values are the same to set simple value
const allSame =
padding.detailed.top.value === padding.detailed.right.value &&
padding.detailed.top.value === padding.detailed.bottom.value &&
padding.detailed.top.value === padding.detailed.left.value &&
padding.detailed.top.unit === padding.detailed.right.unit &&
padding.detailed.top.unit === padding.detailed.bottom.unit &&
padding.detailed.top.unit === padding.detailed.left.unit;
if (allSame) {
marginInner.value = padding.detailed.top;
} else {
// Values are different, open the detailed editor and use first value for simple
marginInner.value = padding.detailed.top;
// Open detailed view after mount
setTimeout(() => {
if (marginInnerEditor.value) {
marginInnerEditor.value.expanded = true;
}
}, 0);
}
} }
} }