diff --git a/frontend/src/app/main/ui/workspace/sidebar/branch_review/compare.cljs b/frontend/src/app/main/ui/workspace/sidebar/branch_review/compare.cljs index e036de710e..7d54979cd7 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/branch_review/compare.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/branch_review/compare.cljs @@ -455,7 +455,7 @@ (when (and conflict? (:copies-affected item)) [:> brf/copies-affected* {:n (:copies-affected item)}]) (when copies-of - [:> brf/copies-facts* {:entry copies-of :data data}]) + [:> brf/copies-facts* {:entry copies-of :copies copies :data data}]) ;; an entry without a before and after says what it is, where it ;; lands and what it affects instead diff --git a/frontend/src/app/main/ui/workspace/sidebar/branch_review/conflicts.cljs b/frontend/src/app/main/ui/workspace/sidebar/branch_review/conflicts.cljs index 2ce146d6ec..23e025fcb6 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/branch_review/conflicts.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/branch_review/conflicts.cljs @@ -363,7 +363,7 @@ (when (:copies-affected conflict) [:> brf/copies-affected* {:n (:copies-affected conflict)}]) (when copies-of - [:> brf/copies-facts* {:entry copies-of :data data}]) + [:> brf/copies-facts* {:entry copies-of :copies copies :data data}]) ;; once decided, one quiet block says what the merge leaves behind, ;; with the way back; until then, a note says how the choice works diff --git a/frontend/src/app/main/ui/workspace/sidebar/branch_review/facts.cljs b/frontend/src/app/main/ui/workspace/sidebar/branch_review/facts.cljs index bb2c75543d..43b473f028 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/branch_review/facts.cljs @@ -306,17 +306,28 @@ [copy] (or (seq (brc/copy-keeps copy)) (seq (brc/copy-open-slots copy)))) +(defn- component-name + "The name of component `id`: its own `:copies` entry, else the open + file's components, else a short id." + [copies data id] + (or (some #(when (= id (:component-id %)) (:component-name %)) copies) + (get-in data [:components id :name]) + (subs (str id) 0 8))) + (mf/defc copies-facts* "The copies of a component the integration changes (`entry`, one of the - summary's `:copies`), folded under how many follow it: each with its - page and what it keeps of its own." - [{:keys [entry data]}] + summary's `copies`), folded under how many follow it: each with its + page and what it keeps of its own. An entry with `:via` changes only + through a copy its main holds of another changed component, which + the head line names." + [{:keys [entry copies data]}] (let [open* (mf/use-state false) open? (deref open*) on-toggle (mf/use-fn #(swap! open* not)) - copies (:copies entry) - n (count copies) - keeping (count (filter keeps-own? copies))] + via (:via entry) + own (:copies entry) + n (count own) + keeping (count (filter keeps-own? own))] (when (pos? n) [:div {:class (stl/css :section)} [:> brl/group-head* @@ -325,9 +336,13 @@ (dm/str " - " (tr "workspace.branches.review.copies.keeping" (i18n/c keeping)))) :is-open open? :on-toggle on-toggle}] + (when via + [:> text* {:as "p" :typography t/body-small :class (stl/css :copy-via)} + (tr "workspace.branches.review.copies.via" + (:component-name entry) (component-name copies data via))]) (when open? [:div {:class (stl/css :copy-list)} - (for [copy copies] + (for [copy own] [:div {:class (stl/css :copy) :key (str (:id copy))} [:div {:class (stl/css :copy-head)} [:> i/icon* {:icon-id i/component-copy :size "s" :class (stl/css :copy-icon)}] diff --git a/frontend/src/app/main/ui/workspace/sidebar/branch_review/facts.scss b/frontend/src/app/main/ui/workspace/sidebar/branch_review/facts.scss index f7d9594c92..1be448d20d 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/branch_review/facts.scss +++ b/frontend/src/app/main/ui/workspace/sidebar/branch_review/facts.scss @@ -108,3 +108,8 @@ align-items: center; gap: var(--sp-s); } + +.copy-via { + padding-inline-start: calc(var(--sp-xs) + $sz-16); + color: var(--color-foreground-secondary); +} diff --git a/frontend/translations/en.po b/frontend/translations/en.po index 7d24ccb4a5..e77bd55687 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -11966,3 +11966,7 @@ msgid "workspace.branches.review.copies.affected" msgid_plural "workspace.branches.review.copies.affected" msgstr[0] "Choosing a side here also decides 1 copy." msgstr[1] "Choosing a side here also decides %s copies." + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.via" +msgstr "%s follows the change through its copy of %s" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 6785bbeb55..198623617c 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -6535,6 +6535,180 @@ msgstr "Ramas - %s" msgid "workspace.branches.menu.create" msgstr "Crear rama" +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.affected" +msgid_plural "workspace.branches.review.copies.affected" +msgstr[0] "Elegir un lado aquí también decide 1 copia." +msgstr[1] "Elegir un lado aquí también decide %s copias." + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.follow" +msgid_plural "workspace.branches.review.copies.follow" +msgstr[0] "1 copia seguirá este componente" +msgstr[1] "%s copias seguirán este componente" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.follows" +msgstr "Sigue al componente en: %s" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.follows-all" +msgstr "Sigue todos los cambios" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.blur" +msgstr "Desenfoque" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.clip" +msgstr "Truncar contenido" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.constraints" +msgstr "Restricciones" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.content" +msgstr "Contenido" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.exports" +msgstr "Exportaciones" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.fill" +msgstr "Relleno" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.font" +msgstr "Fuente" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.geometry" +msgstr "Tamaño y posición" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.grids" +msgstr "Guías" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.layer" +msgstr "Opacidad y modo de fusión" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.layout" +msgstr "Layout" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.layout-item" +msgstr "Elemento de layout" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.lock" +msgstr "Bloqueo" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.mask" +msgstr "Máscara" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.name" +msgstr "Nombre" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.radius" +msgstr "Radio" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.shadow" +msgstr "Sombra" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.stroke" +msgstr "Borde" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.swap" +msgstr "Componente intercambiado" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.text-display" +msgstr "Espaciado y alineación del texto" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.group.visibility" +msgstr "Visibilidad" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.keeping" +msgid_plural "workspace.branches.review.copies.keeping" +msgstr[0] "1 mantiene modificaciones" +msgstr[1] "%s mantienen modificaciones" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.keeps-branch" +msgstr "Mantiene su modificación de %s, hecha en la rama" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.keeps-main" +msgstr "Mantiene su modificación de %s, hecha en main" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.open-note" +msgstr "Tu elección solo decide %s. La regla de copias decide el resto." + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.reason.follows-component" +msgstr "sigue al componente" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.reason.override-both" +msgstr "modificado en ambos lados" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.reason.override-branch" +msgstr "modificado en la rama" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.reason.override-main" +msgstr "modificado en main" + +#: src/app/main/ui/workspace/sidebar/branch_review/compare.cljs +msgid "workspace.branches.review.copies.row-follow" +msgid_plural "workspace.branches.review.copies.row-follow" +msgstr[0] "1 copia lo sigue" +msgstr[1] "%s copias lo siguen" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.settled-notice" +msgstr "" +"La regla de copias decide todos los cambios de esta copia, así que no hay " +"nada que elegir ni dejar fuera." + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.settled-row" +msgstr "Decidido por la regla de copias" + +#: src/app/main/ui/workspace/sidebar/branch_review/compare.cljs +msgid "workspace.branches.review.copies.settled-tag" +msgstr "Regla de copias" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.settled-title" +msgstr "Decidido por la regla de copias" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.slots-open" +msgstr "Ambos lados modifican el %s: tu elección decide" + +#: src/app/main/ui/workspace/sidebar/branch_review/common.cljs +msgid "workspace.branches.review.copies.token-slot" +msgstr "Token de %s" + +#: src/app/main/ui/workspace/sidebar/branch_review/facts.cljs +msgid "workspace.branches.review.copies.via" +msgstr "%s sigue el cambio a través de su copia de %s" + #: src/app/main/ui/workspace/branch_switcher.cljs:242 msgid "workspace.branches.switcher.all" msgstr "Todas las ramas"