From 5b0d492877f1b848b3e959bfda5d0e842244ede7 Mon Sep 17 00:00:00 2001 From: Milan Ricoul Date: Tue, 29 Sep 2026 13:46:56 +0200 Subject: [PATCH 1/3] fix: scope Add and Remove tab controls per block type Show Add tab on Tabs and Tabs list only, Remove on Tab and Panel items, and drop tab actions from the Panels wrapper to avoid ambiguous deletions. --- src/blockparty-tabs-nav/edit.js | 5 +- src/blockparty-tabs-panel-item/edit.js | 6 +- src/blockparty-tabs-panels/edit.js | 10 +-- src/blockparty-tabs/TabsAddRemoveControls.js | 73 ++++++++++++++------ src/blockparty-tabs/edit.js | 5 +- src/blockparty-tabs/style.scss | 4 +- 6 files changed, 71 insertions(+), 32 deletions(-) diff --git a/src/blockparty-tabs-nav/edit.js b/src/blockparty-tabs-nav/edit.js index 6b6784c..7e9182e 100644 --- a/src/blockparty-tabs-nav/edit.js +++ b/src/blockparty-tabs-nav/edit.js @@ -35,7 +35,10 @@ export default function Edit( { attributes, setAttributes, clientId } ) { return ( <> - + - +
- -
- - ); + return
; } diff --git a/src/blockparty-tabs/TabsAddRemoveControls.js b/src/blockparty-tabs/TabsAddRemoveControls.js index cf6f3df..653efe9 100644 --- a/src/blockparty-tabs/TabsAddRemoveControls.js +++ b/src/blockparty-tabs/TabsAddRemoveControls.js @@ -195,25 +195,40 @@ export const useTabsMutations = ( clientId, index ) => { /** * Toolbar group with Add tab / Remove tab buttons. * - * @param {Object} props Component props. - * @param {string} props.clientId Block clientId (any block in the tabs tree). - * @param {number} [props.index] Explicit tab index; falls back to tabsActive. - * @return {Element} Toolbar group. + * @param {Object} props Component props. + * @param {string} props.clientId Block clientId (any block in the tabs tree). + * @param {number} [props.index] Explicit tab index; falls back to tabsActive. + * @param {boolean} [props.showAdd] Whether to show the Add tab control. + * @param {boolean} [props.showRemove] Whether to show the Remove tab control. + * @return {Element|null} Toolbar group. */ -export const TabsAddRemoveToolbar = ( { clientId, index } ) => { +export const TabsAddRemoveToolbar = ( { + clientId, + index, + showAdd = true, + showRemove = true, +} ) => { const { canRemove, insertTabAfterActive, removeTab } = useTabsMutations( clientId, index ); + if ( ! showAdd && ! showRemove ) { + return null; + } + return ( - - { __( 'Add tab', 'blockparty-tabs' ) } - - - { __( 'Remove tab', 'blockparty-tabs' ) } - + { showAdd && ( + + { __( 'Add tab', 'blockparty-tabs' ) } + + ) } + { showRemove && ( + + { __( 'Remove tab', 'blockparty-tabs' ) } + + ) } ); }; @@ -241,13 +256,31 @@ export const TabsNavAppender = ( { clientId } ) => { /** * BlockControls wrapper for Add / Remove tab actions. * - * @param {Object} props Component props. - * @param {string} props.clientId Block clientId (any block in the tabs tree). - * @param {number} [props.index] Explicit tab index; falls back to tabsActive. - * @return {Element} Block controls with shared toolbar. + * @param {Object} props Component props. + * @param {string} props.clientId Block clientId (any block in the tabs tree). + * @param {number} [props.index] Explicit tab index; falls back to tabsActive. + * @param {boolean} [props.showAdd] Whether to show the Add tab control. + * @param {boolean} [props.showRemove] Whether to show the Remove tab control. + * @return {Element|null} Block controls with shared toolbar. */ -export const TabsAddRemoveBlockControls = ( { clientId, index } ) => ( - - - -); +export const TabsAddRemoveBlockControls = ( { + clientId, + index, + showAdd = true, + showRemove = true, +} ) => { + if ( ! showAdd && ! showRemove ) { + return null; + } + + return ( + + + + ); +}; diff --git a/src/blockparty-tabs/edit.js b/src/blockparty-tabs/edit.js index 94c18f3..5b5ddae 100644 --- a/src/blockparty-tabs/edit.js +++ b/src/blockparty-tabs/edit.js @@ -108,7 +108,10 @@ export default function Edit( { attributes, setAttributes, clientId } ) { setAttributes( { mode: newAlign } ) } /> - +
diff --git a/src/blockparty-tabs/style.scss b/src/blockparty-tabs/style.scss index 17d9781..281db00 100644 --- a/src/blockparty-tabs/style.scss +++ b/src/blockparty-tabs/style.scss @@ -83,7 +83,9 @@ } } - &-panels { + .wp-block-blockparty-tabs-panels { + margin-block-start: 0; + .alignfull & { padding: 0 !important; } From 8d2f6a841c96eaa774cac4605255cebd142d7b90 Mon Sep 17 00:00:00 2001 From: mricoul Date: Tue, 29 Sep 2026 13:48:32 +0200 Subject: [PATCH 2/3] feat(languages): update languages --- ...r_FR-0bd2c273cbf16a852857c0f91fb2ec27.json | 2 +- ...r_FR-4bb7e14fed5bf4fbf5983513a33a90f6.json | 2 +- ...r_FR-a6713262e631e06701a33878dcb93597.json | 2 +- ...r_FR-e6ab4ffdabb4ff9da5abd4470599bead.json | 2 +- languages/blockparty-tabs-fr_FR.mo | Bin 2534 -> 2862 bytes languages/blockparty-tabs-fr_FR.po | 14 +++++++------- languages/blockparty-tabs.pot | 6 ++---- 7 files changed, 13 insertions(+), 15 deletions(-) diff --git a/languages/blockparty-tabs-fr_FR-0bd2c273cbf16a852857c0f91fb2ec27.json b/languages/blockparty-tabs-fr_FR-0bd2c273cbf16a852857c0f91fb2ec27.json index 0601145..3511bd4 100644 --- a/languages/blockparty-tabs-fr_FR-0bd2c273cbf16a852857c0f91fb2ec27.json +++ b/languages/blockparty-tabs-fr_FR-0bd2c273cbf16a852857c0f91fb2ec27.json @@ -1 +1 @@ -{"translation-revision-date":"2026-09-24 15:04+0200","generator":"WP-CLI\/2.11.0","source":"build\/blockparty-tabs-nav\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr_FR","plural-forms":"nplurals=2; plural=(n != 1);"},"Add tab":["Ajouter un onglet"],"Remove tab":["Supprimer l\u2019onglet"],"Settings":["R\u00e9glages"],"Label":["Libell\u00e9"],"Describe the purpose of this tabbed interface for assistive technologies.":["D\u00e9crivez l'objectif de cette interface \u00e0 onglets pour les technologies d'assistance."]}}} \ No newline at end of file +{"translation-revision-date":"2026-09-29 13:46+0200","generator":"WP-CLI\/2.11.0","source":"build\/blockparty-tabs-nav\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr_FR","plural-forms":"nplurals=2; plural=(n != 1);"},"Add tab":["Ajouter un onglet"],"Remove tab":["Supprimer l\u2019onglet"],"Settings":["R\u00e9glages"],"Label":["Libell\u00e9"],"Describe the purpose of this tabbed interface for assistive technologies.":["D\u00e9crivez l'objectif de cette interface \u00e0 onglets pour les technologies d'assistance."]}}} \ No newline at end of file diff --git a/languages/blockparty-tabs-fr_FR-4bb7e14fed5bf4fbf5983513a33a90f6.json b/languages/blockparty-tabs-fr_FR-4bb7e14fed5bf4fbf5983513a33a90f6.json index 6893307..6821825 100644 --- a/languages/blockparty-tabs-fr_FR-4bb7e14fed5bf4fbf5983513a33a90f6.json +++ b/languages/blockparty-tabs-fr_FR-4bb7e14fed5bf4fbf5983513a33a90f6.json @@ -1 +1 @@ -{"translation-revision-date":"2026-09-24 15:04+0200","generator":"WP-CLI\/2.11.0","source":"build\/blockparty-tabs-nav-item\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr_FR","plural-forms":"nplurals=2; plural=(n != 1);"},"Add tab":["Ajouter un onglet"],"Remove tab":["Supprimer l\u2019onglet"],"Move tab before":["D\u00e9placer l\u2019onglet \u00e0 gauche"],"Move tab after":["D\u00e9placer l\u2019onglet \u00e0 droite"],"Icon":["Ic\u00f4ne"],"Item\u2026":["\u00c9l\u00e9ment\u2026"]}}} \ No newline at end of file +{"translation-revision-date":"2026-09-29 13:46+0200","generator":"WP-CLI\/2.11.0","source":"build\/blockparty-tabs-nav-item\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr_FR","plural-forms":"nplurals=2; plural=(n != 1);"},"Add tab":["Ajouter un onglet"],"Remove tab":["Supprimer l\u2019onglet"],"Move tab before":["D\u00e9placer l\u2019onglet \u00e0 gauche"],"Move tab after":["D\u00e9placer l\u2019onglet \u00e0 droite"],"Icon":["Ic\u00f4ne"],"Item\u2026":["\u00c9l\u00e9ment\u2026"]}}} \ No newline at end of file diff --git a/languages/blockparty-tabs-fr_FR-a6713262e631e06701a33878dcb93597.json b/languages/blockparty-tabs-fr_FR-a6713262e631e06701a33878dcb93597.json index 52c6169..789d3db 100644 --- a/languages/blockparty-tabs-fr_FR-a6713262e631e06701a33878dcb93597.json +++ b/languages/blockparty-tabs-fr_FR-a6713262e631e06701a33878dcb93597.json @@ -1 +1 @@ -{"translation-revision-date":"2026-09-24 15:04+0200","generator":"WP-CLI\/2.11.0","source":"build\/blockparty-tabs-panel-item\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr_FR","plural-forms":"nplurals=2; plural=(n != 1);"},"Add tab":["Ajouter un onglet"],"Remove tab":["Supprimer l\u2019onglet"]}}} \ No newline at end of file +{"translation-revision-date":"2026-09-29 13:46+0200","generator":"WP-CLI\/2.11.0","source":"build\/blockparty-tabs-panel-item\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr_FR","plural-forms":"nplurals=2; plural=(n != 1);"},"Add tab":["Ajouter un onglet"],"Remove tab":["Supprimer l\u2019onglet"]}}} \ No newline at end of file diff --git a/languages/blockparty-tabs-fr_FR-e6ab4ffdabb4ff9da5abd4470599bead.json b/languages/blockparty-tabs-fr_FR-e6ab4ffdabb4ff9da5abd4470599bead.json index 0fca148..646ab02 100644 --- a/languages/blockparty-tabs-fr_FR-e6ab4ffdabb4ff9da5abd4470599bead.json +++ b/languages/blockparty-tabs-fr_FR-e6ab4ffdabb4ff9da5abd4470599bead.json @@ -1 +1 @@ -{"translation-revision-date":"2026-09-24 15:04+0200","generator":"WP-CLI\/2.11.0","source":"build\/blockparty-tabs\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr_FR","plural-forms":"nplurals=2; plural=(n != 1);"},"Add tab":["Ajouter un onglet"],"Remove tab":["Supprimer l\u2019onglet"],"Align top left":["Aligner en haut \u00e0 gauche"],"Align top center":["Aligner en haut au centre"],"Align top right":["Aligner en haut \u00e0 droite"],"Align top justified":["Aligner en haut justifi\u00e9"],"Align sidebar right":["Barre lat\u00e9rale \u00e0 droite"],"Align sidebar left":["Barre lat\u00e9rale \u00e0 gauche"]}}} \ No newline at end of file +{"translation-revision-date":"2026-09-29 13:46+0200","generator":"WP-CLI\/2.11.0","source":"build\/blockparty-tabs\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr_FR","plural-forms":"nplurals=2; plural=(n != 1);"},"Add tab":["Ajouter un onglet"],"Remove tab":["Supprimer l\u2019onglet"],"Align top left":["Aligner en haut \u00e0 gauche"],"Align top center":["Aligner en haut au centre"],"Align top right":["Aligner en haut \u00e0 droite"],"Align top justified":["Aligner en haut justifi\u00e9"],"Align sidebar right":["Barre lat\u00e9rale \u00e0 droite"],"Align sidebar left":["Barre lat\u00e9rale \u00e0 gauche"]}}} \ No newline at end of file diff --git a/languages/blockparty-tabs-fr_FR.mo b/languages/blockparty-tabs-fr_FR.mo index e654ed1eca472d7775adffb545aa10b5c153d047..48bf67eae5ad68a8e91bb6ac359ab74d540e3707 100644 GIT binary patch delta 983 zcmYk)J!lj`6u|MhrL5ZYLqoU1bZ*mT9cH_=oLed;T zu&_PSq>6=wg|Rr06c$22EmGJB3L;o&bBKbK7|{Q_TZ6;R{&r^f-n=)nUk6qPtDg$l zB}F?x-%sz!C^d|mC~c)psS$jHo%j|D_#Owaf&KU=9rw2@wVm-{?88wk;<fA`+HSEBbC;?uf1bBye{DL|BfmiSsj^SmZoWW(Z_z`9P0>O4*4JF~nDDl=% z5`Ke4)>j|WiSKwzs@_KSaGR_oz#{I!TI$o(*QuXVf2S77QYt=*vhaDFz#B+t^$dIP zIp$bjt#c#WzmeL&os9EcO7T+%xm?F#yo8H*8aMDE=GmTWxP;`O8b}EB6J^28biTd2 zRZus|4h&&c3ht%Lf>NclU33W`FYTktcOh-4MRSos?un~7_GTj&IZs8*ttN|eO3k*H zt5hw8?xxGm&<-`P?0oZMlJk+XmnK^%+plWVZ7=%H29bYv#*34Aebt+E^&{;MG85x* z*$eH0(S8&rCQP&qlSn5#*Dlht*4ZSAo%X#@PsY)lGujzHu~F#soK5aTl|(x~j)K63 zWo^PzV4Mr)>&w}(Oy@~`Z1mLe6ZLN$tC_-otB;4}z$C7|+*!|5TM0O`po4!&R0yP_ z)=S!(vZ20LF+6syd`yLeW-8V>$(Mrss1n<_`NCFm&Lcx_He!B#MNfG)HoCO_WXcAH cH$DDVHq=_`mATMP6KX__)mC!Fn%{N*FEDtfUjP6A delta 680 zcmXZaze_?<6u|NG{GFwin*ElB8d|KtD1ruuh9ZZEENW96B!|MK%@+FyL?UVkA_xQt zZ3)NPo1!J6DR7OJsG;w9-V5h`?s<=U-?{g`M(i_Eeh<59LK`>nhttHHMMpbyh$Qd` zy?BLTyu}E%u^*pJ{((XAZw#T+DKdx=T*Dc3VF_8UEXNGoJUBs}c#1l)hJL(3AKu{> zKHvrhSS5vfsQD!hUGZeto*ORkYu zQb+yJy?Ne7J%LBm9lxNtMKX~wyBFbR>A-#nDKirIc^je&@Q9=vhfF(+3u|tHUa=Cn|RLB\n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2026-09-24T13:02:27+00:00\n" +"POT-Creation-Date: 2026-09-29T11:45:30+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.11.0\n" "X-Domain: blockparty-tabs\n" @@ -37,7 +37,6 @@ msgstr "" #: build/blockparty-tabs-nav-item/index.js:1 #: build/blockparty-tabs-nav/index.js:1 #: build/blockparty-tabs-panel-item/index.js:1 -#: build/blockparty-tabs-panels/index.js:1 #: build/blockparty-tabs/index.js:1 msgid "Add tab" msgstr "" @@ -45,7 +44,6 @@ msgstr "" #: build/blockparty-tabs-nav-item/index.js:1 #: build/blockparty-tabs-nav/index.js:1 #: build/blockparty-tabs-panel-item/index.js:1 -#: build/blockparty-tabs-panels/index.js:1 #: build/blockparty-tabs/index.js:1 msgid "Remove tab" msgstr "" From c2afa36b08fc3b322ade6a547f0265b2a178c598 Mon Sep 17 00:00:00 2001 From: mricoul Date: Tue, 29 Sep 2026 13:57:07 +0200 Subject: [PATCH 3/3] fix: Full-width panels padding reset broken --- src/blockparty-tabs/style.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/blockparty-tabs/style.scss b/src/blockparty-tabs/style.scss index 281db00..4597546 100644 --- a/src/blockparty-tabs/style.scss +++ b/src/blockparty-tabs/style.scss @@ -85,7 +85,9 @@ .wp-block-blockparty-tabs-panels { margin-block-start: 0; + } + &-panels { .alignfull & { padding: 0 !important; }