@wordpress/block-library 9.41.1-next.v.202603102151.0 → 9.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/cover/edit/cover-placeholder.cjs +7 -0
  3. package/build/cover/edit/cover-placeholder.cjs.map +2 -2
  4. package/build/html/modal.cjs +151 -229
  5. package/build/html/modal.cjs.map +2 -2
  6. package/build/image/edit.cjs +7 -0
  7. package/build/image/edit.cjs.map +2 -2
  8. package/build/media-text/media-container.cjs +6 -0
  9. package/build/media-text/media-container.cjs.map +2 -2
  10. package/build/navigation/edit/index.cjs +5 -4
  11. package/build/navigation/edit/index.cjs.map +2 -2
  12. package/build/navigation-link/shared/use-link-preview.cjs +29 -0
  13. package/build/navigation-link/shared/use-link-preview.cjs.map +2 -2
  14. package/build/nextpage/block.json +0 -1
  15. package/build/playlist-track/block.json +0 -0
  16. package/build/post-date/block.json +1 -3
  17. package/build/post-date/deprecated.cjs +82 -6
  18. package/build/post-date/deprecated.cjs.map +3 -3
  19. package/build/post-date/edit.cjs +49 -62
  20. package/build/post-date/edit.cjs.map +3 -3
  21. package/build/site-logo/edit.cjs +1 -3
  22. package/build/site-logo/edit.cjs.map +2 -2
  23. package/build/site-title/index.cjs +5 -1
  24. package/build/site-title/index.cjs.map +2 -2
  25. package/build/tab/add-tab-toolbar-control.cjs +22 -5
  26. package/build/tab/add-tab-toolbar-control.cjs.map +2 -2
  27. package/build/tab/remove-tab-toolbar-control.cjs +19 -1
  28. package/build/tab/remove-tab-toolbar-control.cjs.map +2 -2
  29. package/build/tabs/edit.cjs +85 -7
  30. package/build/tabs/edit.cjs.map +2 -2
  31. package/build/tabs/index.cjs +12 -2
  32. package/build/tabs/index.cjs.map +2 -2
  33. package/build/tabs-menu/block.json +1 -6
  34. package/build/tabs-menu/edit.cjs +11 -151
  35. package/build/tabs-menu/edit.cjs.map +3 -3
  36. package/build/tabs-menu/save.cjs.map +2 -2
  37. package/build/tabs-menu-item/block.json +14 -11
  38. package/build/tabs-menu-item/controls.cjs +2 -133
  39. package/build/tabs-menu-item/controls.cjs.map +3 -3
  40. package/build/tabs-menu-item/edit.cjs +44 -56
  41. package/build/tabs-menu-item/edit.cjs.map +3 -3
  42. package/build/tabs-menu-item/save.cjs +0 -1
  43. package/build/tabs-menu-item/save.cjs.map +2 -2
  44. package/build/utils/media-control.cjs +72 -29
  45. package/build/utils/media-control.cjs.map +3 -3
  46. package/build-module/cover/edit/cover-placeholder.mjs +7 -0
  47. package/build-module/cover/edit/cover-placeholder.mjs.map +2 -2
  48. package/build-module/html/modal.mjs +151 -229
  49. package/build-module/html/modal.mjs.map +2 -2
  50. package/build-module/image/edit.mjs +7 -0
  51. package/build-module/image/edit.mjs.map +2 -2
  52. package/build-module/media-text/media-container.mjs +7 -1
  53. package/build-module/media-text/media-container.mjs.map +2 -2
  54. package/build-module/navigation/edit/index.mjs +5 -4
  55. package/build-module/navigation/edit/index.mjs.map +2 -2
  56. package/build-module/navigation-link/shared/use-link-preview.mjs +28 -0
  57. package/build-module/navigation-link/shared/use-link-preview.mjs.map +2 -2
  58. package/build-module/nextpage/block.json +0 -1
  59. package/build-module/playlist-track/block.json +0 -0
  60. package/build-module/post-date/block.json +1 -3
  61. package/build-module/post-date/deprecated.mjs +82 -6
  62. package/build-module/post-date/deprecated.mjs.map +2 -2
  63. package/build-module/post-date/edit.mjs +49 -63
  64. package/build-module/post-date/edit.mjs.map +2 -2
  65. package/build-module/site-logo/edit.mjs +1 -3
  66. package/build-module/site-logo/edit.mjs.map +2 -2
  67. package/build-module/site-title/index.mjs +5 -1
  68. package/build-module/site-title/index.mjs.map +2 -2
  69. package/build-module/tab/add-tab-toolbar-control.mjs +22 -5
  70. package/build-module/tab/add-tab-toolbar-control.mjs.map +2 -2
  71. package/build-module/tab/remove-tab-toolbar-control.mjs +19 -1
  72. package/build-module/tab/remove-tab-toolbar-control.mjs.map +2 -2
  73. package/build-module/tabs/edit.mjs +87 -9
  74. package/build-module/tabs/edit.mjs.map +2 -2
  75. package/build-module/tabs/index.mjs +12 -2
  76. package/build-module/tabs/index.mjs.map +2 -2
  77. package/build-module/tabs-menu/block.json +1 -6
  78. package/build-module/tabs-menu/edit.mjs +13 -162
  79. package/build-module/tabs-menu/edit.mjs.map +2 -2
  80. package/build-module/tabs-menu/save.mjs.map +2 -2
  81. package/build-module/tabs-menu-item/block.json +14 -11
  82. package/build-module/tabs-menu-item/controls.mjs +4 -143
  83. package/build-module/tabs-menu-item/controls.mjs.map +2 -2
  84. package/build-module/tabs-menu-item/edit.mjs +45 -57
  85. package/build-module/tabs-menu-item/edit.mjs.map +3 -3
  86. package/build-module/tabs-menu-item/save.mjs +0 -1
  87. package/build-module/tabs-menu-item/save.mjs.map +2 -2
  88. package/build-module/utils/media-control.mjs +73 -30
  89. package/build-module/utils/media-control.mjs.map +2 -2
  90. package/build-style/editor-rtl.css +45 -11
  91. package/build-style/editor.css +45 -11
  92. package/build-style/navigation/style-rtl.css +4 -0
  93. package/build-style/navigation/style.css +4 -0
  94. package/build-style/navigation-overlay-close/style-rtl.css +3 -3
  95. package/build-style/navigation-overlay-close/style.css +3 -3
  96. package/build-style/style-rtl.css +7 -3
  97. package/build-style/style.css +7 -3
  98. package/build-style/tabs-menu/editor-rtl.css +5 -3
  99. package/build-style/tabs-menu/editor.css +5 -3
  100. package/package.json +38 -38
  101. package/src/cover/edit/cover-placeholder.js +8 -0
  102. package/src/html/modal.js +6 -77
  103. package/src/image/edit.js +8 -0
  104. package/src/media-text/media-container.js +8 -1
  105. package/src/navigation/edit/index.js +6 -4
  106. package/src/navigation/index.php +24 -17
  107. package/src/navigation/style.scss +10 -0
  108. package/src/navigation-link/index.php +9 -9
  109. package/src/navigation-link/shared/test/use-link-preview.test.js +149 -0
  110. package/src/navigation-link/shared/use-link-preview.js +43 -1
  111. package/src/navigation-overlay-close/style.scss +3 -3
  112. package/src/navigation-submenu/index.php +17 -11
  113. package/src/nextpage/block.json +0 -1
  114. package/src/playlist-track/block.json +0 -0
  115. package/src/playlist-track/edit.js +0 -0
  116. package/src/playlist-track/index.js +0 -0
  117. package/src/playlist-track/index.php +0 -0
  118. package/src/playlist-track/init.js +0 -0
  119. package/src/playlist-track/style.scss +0 -0
  120. package/src/post-date/block.json +1 -3
  121. package/src/post-date/deprecated.js +86 -6
  122. package/src/post-date/edit.js +65 -82
  123. package/src/site-logo/edit.js +1 -3
  124. package/src/site-title/index.js +5 -1
  125. package/src/tab/add-tab-toolbar-control.js +48 -23
  126. package/src/tab/remove-tab-toolbar-control.js +30 -10
  127. package/src/tabs/edit.js +133 -10
  128. package/src/tabs/index.js +12 -2
  129. package/src/tabs-menu/block.json +1 -6
  130. package/src/tabs-menu/edit.js +13 -214
  131. package/src/tabs-menu/editor.scss +7 -3
  132. package/src/tabs-menu/index.php +42 -27
  133. package/src/tabs-menu/save.js +0 -4
  134. package/src/tabs-menu-item/block.json +14 -11
  135. package/src/tabs-menu-item/controls.js +4 -167
  136. package/src/tabs-menu-item/edit.js +60 -69
  137. package/src/tabs-menu-item/index.php +11 -23
  138. package/src/tabs-menu-item/save.js +0 -1
  139. package/src/utils/media-control.js +61 -21
  140. package/src/utils/media-control.scss +54 -18
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs-menu/edit.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tBlockContextProvider,\n\t__experimentalUseBlockPreview as useBlockPreview,\n\tstore as blockEditorStore,\n\tuseBlockEditContext,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tmemo,\n\tuseMemo,\n\tuseState,\n\tuseEffect,\n\tuseCallback,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport AddTabToolbarControl from '../tab/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab/remove-tab-toolbar-control';\n\nconst TABS_MENU_ITEM_TEMPLATE = [ [ 'core/tabs-menu-item', {} ] ];\nconst EMPTY_ARRAY = [];\n\n/**\n * Preview component for non-active tab menu items.\n * Uses useBlockPreview to cache the rendering.\n *\n * @param {Object} props Component props.\n * @param {Array} props.blocks The blocks to preview.\n * @param {string} props.blockContextId The context ID for this block.\n * @param {boolean} props.isHidden Whether the preview is hidden.\n * @param {Function} props.setActiveBlockContextId Callback to set the active context ID.\n */\nfunction TabsMenuItemPreview( {\n\tblocks,\n\tblockContextId,\n\tisHidden,\n\tsetActiveBlockContextId,\n} ) {\n\tconst blockPreviewProps = useBlockPreview( { blocks } );\n\n\tconst handleOnClick = () => {\n\t\tsetActiveBlockContextId( blockContextId );\n\t};\n\n\tconst style = {\n\t\tdisplay: isHidden ? 'none' : 'flex',\n\t};\n\n\treturn (\n\t\t<div\n\t\t\t{ ...blockPreviewProps }\n\t\t\ttabIndex={ 0 }\n\t\t\trole=\"button\"\n\t\t\tonClick={ handleOnClick }\n\t\t\tonKeyDown={ handleOnClick }\n\t\t\tstyle={ style }\n\t\t/>\n\t);\n}\n\nconst MemoizedTabsMenuItemPreview = memo( TabsMenuItemPreview );\n\n/**\n * The actual editable inner blocks for the active tab item.\n *\n * @param {Object} props Component props.\n * @param {Object} props.wrapperProps Props to pass to the wrapper element.\n * @param {Object} props.layout The layout object to pass to inner blocks.\n */\nfunction TabsMenuItemTemplateBlocks( { wrapperProps = {}, layout } ) {\n\tconst innerBlocksProps = useInnerBlocksProps( wrapperProps, {\n\t\ttemplate: TABS_MENU_ITEM_TEMPLATE,\n\t\ttemplateLock: 'all',\n\t\trenderAppender: false,\n\t\tlayout,\n\t} );\n\treturn innerBlocksProps.children;\n}\n\nfunction Edit( {\n\tcontext,\n\tclientId,\n\t__unstableLayoutClassNames: layoutClassNames,\n} ) {\n\t// Get the layout from block edit context to pass to inner blocks.\n\t// This ensures the correct orientation is used from the start.\n\tconst { layout } = useBlockEditContext();\n\n\tconst tabsId = context[ 'core/tabs-id' ] || null;\n\tconst tabsList = context[ 'core/tabs-list' ] || EMPTY_ARRAY;\n\tconst activeTabIndex = context[ 'core/tabs-activeTabIndex' ] ?? 0;\n\tconst editorActiveTabIndex = context[ 'core/tabs-editorActiveTabIndex' ];\n\n\t// Memoize effectiveActiveIndex to ensure it updates when context changes\n\tconst effectiveActiveIndex = useMemo( () => {\n\t\treturn editorActiveTabIndex ?? activeTabIndex;\n\t}, [ editorActiveTabIndex, activeTabIndex ] );\n\n\tconst { __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\t// Track which tab context is \"active\" for editing (shows real inner blocks)\n\tconst [ activeBlockContextId, setActiveBlockContextId ] = useState( null );\n\n\t// Get the inner blocks (the single tabs-menu-item template)\n\tconst { blocks, tabsClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tblocks: getBlocks( clientId ),\n\t\t\t\ttabsClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t// Build block contexts for each tab\n\tconst blockContexts = useMemo( () => {\n\t\treturn tabsList.map( ( tab, index ) => ( {\n\t\t\t'core/tabs-menu-item-index': index,\n\t\t\t'core/tabs-menu-item-id': tab.id || `tab-${ index }`,\n\t\t\t'core/tabs-menu-item-label': tab.label || '',\n\t\t\t'core/tabs-menu-item-clientId': tab.clientId,\n\t\t\t// Pass through parent context\n\t\t\t'core/tabs-id': tabsId,\n\t\t\t'core/tabs-list': tabsList,\n\t\t\t'core/tabs-activeTabIndex': activeTabIndex,\n\t\t\t'core/tabs-editorActiveTabIndex': editorActiveTabIndex,\n\t\t} ) );\n\t}, [ tabsList, tabsId, activeTabIndex, editorActiveTabIndex ] );\n\n\t// Generate a unique ID for each block context\n\tconst getContextId = useCallback( ( blockContext ) => {\n\t\treturn `tab-context-${ blockContext[ 'core/tabs-menu-item-index' ] }`;\n\t}, [] );\n\n\t// Set the first tab as active by default\n\tuseEffect( () => {\n\t\tif ( blockContexts.length > 0 && activeBlockContextId === null ) {\n\t\t\tsetActiveBlockContextId( getContextId( blockContexts[ 0 ] ) );\n\t\t}\n\t}, [ blockContexts, activeBlockContextId, getContextId ] );\n\n\t// Update active context when editorActiveTabIndex changes\n\tuseEffect( () => {\n\t\tif (\n\t\t\tblockContexts.length > 0 &&\n\t\t\teffectiveActiveIndex < blockContexts.length\n\t\t) {\n\t\t\tconst newContextId = getContextId(\n\t\t\t\tblockContexts[ effectiveActiveIndex ]\n\t\t\t);\n\t\t\tsetActiveBlockContextId( ( prevId ) =>\n\t\t\t\tprevId !== newContextId ? newContextId : prevId\n\t\t\t);\n\t\t}\n\t}, [ effectiveActiveIndex, blockContexts, getContextId ] );\n\n\t// Handle tab click to update parent tabs block's editorActiveTabIndex\n\tconst handleTabContextClick = useCallback(\n\t\t( index ) => {\n\t\t\tif ( tabsClientId && index !== effectiveActiveIndex ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\t\teditorActiveTabIndex: index,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\ttabsClientId,\n\t\t\teffectiveActiveIndex,\n\t\t\tupdateBlockAttributes,\n\t\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\t]\n\t);\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( layoutClassNames ),\n\t\trole: 'tablist',\n\t} );\n\n\t// If no tabs exist yet, show placeholder\n\tif ( tabsList.length === 0 ) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<span className=\"tabs__tab-label tabs__tab-label--placeholder\">\n\t\t\t\t\t\t{ __( 'Add tabs to display menu' ) }\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ blockContexts.map( ( blockContext, index ) => {\n\t\t\t\t\tconst contextId = getContextId( blockContext );\n\t\t\t\t\tconst isVisible = contextId === activeBlockContextId;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<BlockContextProvider\n\t\t\t\t\t\t\tkey={ contextId }\n\t\t\t\t\t\t\tvalue={ blockContext }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ isVisible ? (\n\t\t\t\t\t\t\t\t<TabsMenuItemTemplateBlocks\n\t\t\t\t\t\t\t\t\twrapperProps={ {\n\t\t\t\t\t\t\t\t\t\tonClick: () =>\n\t\t\t\t\t\t\t\t\t\t\thandleTabContextClick( index ),\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null }\n\t\t\t\t\t\t\t<MemoizedTabsMenuItemPreview\n\t\t\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\t\t\tblockContextId={ contextId }\n\t\t\t\t\t\t\t\tsetActiveBlockContextId={ ( id ) => {\n\t\t\t\t\t\t\t\t\tsetActiveBlockContextId( id );\n\t\t\t\t\t\t\t\t\thandleTabContextClick( index );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tisHidden={ isVisible }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</BlockContextProvider>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default Edit;\n"],
5
- "mappings": ";AAGA,OAAO,UAAU;AAKjB,SAAS,UAAU;AACnB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA,iCAAiC;AAAA,EACjC,SAAS;AAAA,EACT;AAAA,OACM;AACP,SAAS,WAAW,mBAAmB;AACvC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAKP,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AAgClC,SAyIC,UAzID,KAyIC,YAzID;AA9BF,IAAM,0BAA0B,CAAE,CAAE,uBAAuB,CAAC,CAAE,CAAE;AAChE,IAAM,cAAc,CAAC;AAYrB,SAAS,oBAAqB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,oBAAoB,gBAAiB,EAAE,OAAO,CAAE;AAEtD,QAAM,gBAAgB,MAAM;AAC3B,4BAAyB,cAAe;AAAA,EACzC;AAEA,QAAM,QAAQ;AAAA,IACb,SAAS,WAAW,SAAS;AAAA,EAC9B;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACL,UAAW;AAAA,MACX,MAAK;AAAA,MACL,SAAU;AAAA,MACV,WAAY;AAAA,MACZ;AAAA;AAAA,EACD;AAEF;AAEA,IAAM,8BAA8B,KAAM,mBAAoB;AAS9D,SAAS,2BAA4B,EAAE,eAAe,CAAC,GAAG,OAAO,GAAI;AACpE,QAAM,mBAAmB,oBAAqB,cAAc;AAAA,IAC3D,UAAU;AAAA,IACV,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB;AAAA,EACD,CAAE;AACF,SAAO,iBAAiB;AACzB;AAEA,SAAS,KAAM;AAAA,EACd;AAAA,EACA;AAAA,EACA,4BAA4B;AAC7B,GAAI;AAGH,QAAM,EAAE,OAAO,IAAI,oBAAoB;AAEvC,QAAM,SAAS,QAAS,cAAe,KAAK;AAC5C,QAAM,WAAW,QAAS,gBAAiB,KAAK;AAChD,QAAM,iBAAiB,QAAS,0BAA2B,KAAK;AAChE,QAAM,uBAAuB,QAAS,gCAAiC;AAGvE,QAAM,uBAAuB,QAAS,MAAM;AAC3C,WAAO,wBAAwB;AAAA,EAChC,GAAG,CAAE,sBAAsB,cAAe,CAAE;AAE5C,QAAM,EAAE,wCAAwC,IAC/C,YAAa,gBAAiB;AAC/B,QAAM,EAAE,sBAAsB,IAAI,YAAa,gBAAiB;AAGhE,QAAM,CAAE,sBAAsB,uBAAwB,IAAI,SAAU,IAAK;AAGzE,QAAM,EAAE,QAAQ,aAAa,IAAI;AAAA,IAChC,CAAE,WAAY;AACb,YAAM,EAAE,WAAW,qBAAqB,IACvC,OAAQ,gBAAiB;AAC1B,aAAO;AAAA,QACN,QAAQ,UAAW,QAAS;AAAA,QAC5B,cAAc,qBAAsB,QAAS;AAAA,MAC9C;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAGA,QAAM,gBAAgB,QAAS,MAAM;AACpC,WAAO,SAAS,IAAK,CAAE,KAAK,WAAa;AAAA,MACxC,6BAA6B;AAAA,MAC7B,0BAA0B,IAAI,MAAM,OAAQ,KAAM;AAAA,MAClD,6BAA6B,IAAI,SAAS;AAAA,MAC1C,gCAAgC,IAAI;AAAA;AAAA,MAEpC,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,4BAA4B;AAAA,MAC5B,kCAAkC;AAAA,IACnC,EAAI;AAAA,EACL,GAAG,CAAE,UAAU,QAAQ,gBAAgB,oBAAqB,CAAE;AAG9D,QAAM,eAAe,YAAa,CAAE,iBAAkB;AACrD,WAAO,eAAgB,aAAc,2BAA4B,CAAE;AAAA,EACpE,GAAG,CAAC,CAAE;AAGN,YAAW,MAAM;AAChB,QAAK,cAAc,SAAS,KAAK,yBAAyB,MAAO;AAChE,8BAAyB,aAAc,cAAe,CAAE,CAAE,CAAE;AAAA,IAC7D;AAAA,EACD,GAAG,CAAE,eAAe,sBAAsB,YAAa,CAAE;AAGzD,YAAW,MAAM;AAChB,QACC,cAAc,SAAS,KACvB,uBAAuB,cAAc,QACpC;AACD,YAAM,eAAe;AAAA,QACpB,cAAe,oBAAqB;AAAA,MACrC;AACA;AAAA,QAAyB,CAAE,WAC1B,WAAW,eAAe,eAAe;AAAA,MAC1C;AAAA,IACD;AAAA,EACD,GAAG,CAAE,sBAAsB,eAAe,YAAa,CAAE;AAGzD,QAAM,wBAAwB;AAAA,IAC7B,CAAE,UAAW;AACZ,UAAK,gBAAgB,UAAU,sBAAuB;AACrD,gDAAwC;AACxC,8BAAuB,cAAc;AAAA,UACpC,sBAAsB;AAAA,QACvB,CAAE;AAAA,MACH;AAAA,IACD;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,QAAM,aAAa,cAAe;AAAA,IACjC,WAAW,KAAM,gBAAiB;AAAA,IAClC,MAAM;AAAA,EACP,CAAE;AAGF,MAAK,SAAS,WAAW,GAAI;AAC5B,WACC,iCACC;AAAA,0BAAC,wBAAqB,cAA8B;AAAA,MACpD,oBAAC,2BAAwB,cAA8B;AAAA,MACvD,oBAAC,SAAM,GAAG,YACT,8BAAC,UAAK,WAAU,gDACb,aAAI,0BAA2B,GAClC,GACD;AAAA,OACD;AAAA,EAEF;AAEA,SACC,iCACC;AAAA,wBAAC,wBAAqB,cAA8B;AAAA,IACpD,oBAAC,2BAAwB,cAA8B;AAAA,IACvD,oBAAC,SAAM,GAAG,YACP,wBAAc,IAAK,CAAE,cAAc,UAAW;AAC/C,YAAM,YAAY,aAAc,YAAa;AAC7C,YAAM,YAAY,cAAc;AAEhC,aACC;AAAA,QAAC;AAAA;AAAA,UAEA,OAAQ;AAAA,UAEN;AAAA,wBACD;AAAA,cAAC;AAAA;AAAA,gBACA,cAAe;AAAA,kBACd,SAAS,MACR,sBAAuB,KAAM;AAAA,gBAC/B;AAAA,gBACA;AAAA;AAAA,YACD,IACG;AAAA,YACJ;AAAA,cAAC;AAAA;AAAA,gBACA;AAAA,gBACA,gBAAiB;AAAA,gBACjB,yBAA0B,CAAE,OAAQ;AACnC,0CAAyB,EAAG;AAC5B,wCAAuB,KAAM;AAAA,gBAC9B;AAAA,gBACA,UAAW;AAAA;AAAA,YACZ;AAAA;AAAA;AAAA,QApBM;AAAA,MAqBP;AAAA,IAEF,CAAE,GACH;AAAA,KACD;AAEF;AAEA,IAAO,eAAQ;",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport AddTabToolbarControl from '../tab/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab/remove-tab-toolbar-control';\n\nfunction Edit( { clientId, __unstableLayoutClassNames: layoutClassNames } ) {\n\tconst { tabsClientId } = useSelect(\n\t\t( select ) => ( {\n\t\t\ttabsClientId:\n\t\t\t\tselect( blockEditorStore ).getBlockRootClientId( clientId ),\n\t\t} ),\n\t\t[ clientId ]\n\t);\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( layoutClassNames ),\n\t\trole: 'tablist',\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tallowedBlocks: [ 'core/tabs-menu-item' ],\n\t\torientation: 'horizontal',\n\t\trenderAppender: false,\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<div { ...innerBlocksProps } />\n\t\t</>\n\t);\n}\n\nexport default Edit;\n"],
5
+ "mappings": ";AAGA,OAAO,UAAU;AAKjB;AAAA,EACC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,iBAAiB;AAK1B,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AAuBlC,mBACC,KADD;AArBF,SAAS,KAAM,EAAE,UAAU,4BAA4B,iBAAiB,GAAI;AAC3E,QAAM,EAAE,aAAa,IAAI;AAAA,IACxB,CAAE,YAAc;AAAA,MACf,cACC,OAAQ,gBAAiB,EAAE,qBAAsB,QAAS;AAAA,IAC5D;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,QAAM,aAAa,cAAe;AAAA,IACjC,WAAW,KAAM,gBAAiB;AAAA,IAClC,MAAM;AAAA,EACP,CAAE;AAEF,QAAM,mBAAmB,oBAAqB,YAAY;AAAA,IACzD,eAAe,CAAE,qBAAsB;AAAA,IACvC,aAAa;AAAA,IACb,gBAAgB;AAAA,EACjB,CAAE;AAEF,SACC,iCACC;AAAA,wBAAC,wBAAqB,cAA8B;AAAA,IACpD,oBAAC,2BAAwB,cAA8B;AAAA,IACvD,oBAAC,SAAM,GAAG,kBAAmB;AAAA,KAC9B;AAEF;AAEA,IAAO,eAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs-menu/save.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\n\n/**\n * WordPress dependencies\n */\nimport { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';\n\nexport default function save() {\n\tconst blockProps = useBlockProps.save( {\n\t\trole: 'tablist',\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps.save( blockProps );\n\n\treturn <div { ...innerBlocksProps } />;\n}\n"],
5
- "mappings": ";AAOA,SAAS,eAAe,2BAA2B;AAS3C;AAPO,SAAR,OAAwB;AAC9B,QAAM,aAAa,cAAc,KAAM;AAAA,IACtC,MAAM;AAAA,EACP,CAAE;AAEF,QAAM,mBAAmB,oBAAoB,KAAM,UAAW;AAE9D,SAAO,oBAAC,SAAM,GAAG,kBAAmB;AACrC;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';\n\nexport default function save() {\n\tconst blockProps = useBlockProps.save( {\n\t\trole: 'tablist',\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps.save( blockProps );\n\n\treturn <div { ...innerBlocksProps } />;\n}\n"],
5
+ "mappings": ";AAGA,SAAS,eAAe,2BAA2B;AAS3C;AAPO,SAAR,OAAwB;AAC9B,QAAM,aAAa,cAAc,KAAM;AAAA,IACtC,MAAM;AAAA,EACP,CAAE;AAEF,QAAM,mBAAmB,oBAAoB,KAAM,UAAW;AAE9D,SAAO,oBAAC,SAAM,GAAG,kBAAmB;AACrC;",
6
6
  "names": []
7
7
  }
@@ -4,21 +4,25 @@
4
4
  "apiVersion": 3,
5
5
  "name": "core/tabs-menu-item",
6
6
  "title": "Tab Menu Item",
7
- "description": "A single tab button in the tabs menu. Used as a template for styling all tab buttons.",
7
+ "description": "A single tab button in the tabs menu.",
8
8
  "version": "1.0.0",
9
9
  "category": "design",
10
10
  "textdomain": "default",
11
11
  "parent": [ "core/tabs-menu" ],
12
12
  "usesContext": [
13
- "core/tabs-menu-item-index",
14
- "core/tabs-menu-item-id",
15
- "core/tabs-menu-item-label",
16
- "core/tabs-menu-item-clientId",
17
13
  "core/tabs-list",
18
14
  "core/tabs-activeTabIndex",
19
- "core/tabs-editorActiveTabIndex"
15
+ "core/tabs-editorActiveTabIndex",
16
+ "core/tabs-menu-item-index",
17
+ "core/tabs-menu-item-id",
18
+ "core/tabs-menu-item-label"
20
19
  ],
21
- "attributes": {},
20
+ "attributes": {
21
+ "anchor": {
22
+ "type": "string",
23
+ "default": ""
24
+ }
25
+ },
22
26
  "supports": {
23
27
  "html": false,
24
28
  "reusable": false,
@@ -31,7 +35,6 @@
31
35
  "text": true
32
36
  }
33
37
  },
34
- "shadow": true,
35
38
  "typography": {
36
39
  "fontSize": true,
37
40
  "__experimentalFontFamily": true,
@@ -40,9 +43,6 @@
40
43
  "fontSize": true
41
44
  }
42
45
  },
43
- "layout": {
44
- "allowEditing": false
45
- },
46
46
  "spacing": {
47
47
  "padding": true,
48
48
  "__experimentalDefaultControls": {
@@ -54,6 +54,9 @@
54
54
  "color": true,
55
55
  "width": true,
56
56
  "style": true
57
+ },
58
+ "layout": {
59
+ "allowEditing": false
57
60
  }
58
61
  },
59
62
  "editorScript": "file:./index.js",
@@ -1,149 +1,10 @@
1
1
  // packages/block-library/src/tabs-menu-item/controls.js
2
- import clsx from "clsx";
3
- import { __, isRTL } from "@wordpress/i18n";
4
- import {
5
- BlockControls,
6
- store as blockEditorStore
7
- } from "@wordpress/block-editor";
8
- import { ToolbarGroup, ToolbarItem, Button } from "@wordpress/components";
9
- import {
10
- chevronLeft,
11
- chevronRight,
12
- chevronUp,
13
- chevronDown
14
- } from "@wordpress/icons";
15
- import { useDispatch, useSelect } from "@wordpress/data";
2
+ import { BlockControls } from "@wordpress/block-editor";
16
3
  import AddTabToolbarControl from "../tab/add-tab-toolbar-control.mjs";
17
4
  import RemoveTabToolbarControl from "../tab/remove-tab-toolbar-control.mjs";
18
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
19
- function TabBlockMover({
20
- tabClientId,
21
- tabIndex,
22
- tabsCount,
23
- tabsMenuClientId,
24
- tabsClientId
25
- }) {
26
- const {
27
- moveBlocksUp,
28
- moveBlocksDown,
29
- updateBlockAttributes,
30
- __unstableMarkNextChangeAsNotPersistent
31
- } = useDispatch(blockEditorStore);
32
- const { tabPanelClientId, orientation } = useSelect(
33
- (select) => {
34
- const { getBlockRootClientId, getBlockAttributes } = select(blockEditorStore);
35
- const tabsMenuAttributes = tabsMenuClientId ? getBlockAttributes(tabsMenuClientId) : null;
36
- return {
37
- tabPanelClientId: getBlockRootClientId(tabClientId),
38
- orientation: tabsMenuAttributes?.layout?.orientation || "horizontal"
39
- };
40
- },
41
- [tabClientId, tabsMenuClientId]
42
- );
43
- const isFirst = tabIndex === 0;
44
- const isLast = tabIndex === tabsCount - 1;
45
- const isHorizontal = orientation === "horizontal";
46
- let upIcon, downIcon, upLabel, downLabel;
47
- if (isHorizontal) {
48
- if (isRTL()) {
49
- upIcon = chevronRight;
50
- downIcon = chevronLeft;
51
- upLabel = __("Move tab right");
52
- downLabel = __("Move tab left");
53
- } else {
54
- upIcon = chevronLeft;
55
- downIcon = chevronRight;
56
- upLabel = __("Move tab left");
57
- downLabel = __("Move tab right");
58
- }
59
- } else {
60
- upIcon = chevronUp;
61
- downIcon = chevronDown;
62
- upLabel = __("Move tab up");
63
- downLabel = __("Move tab down");
64
- }
65
- const handleMoveUp = () => {
66
- moveBlocksUp([tabClientId], tabPanelClientId);
67
- if (tabsClientId) {
68
- __unstableMarkNextChangeAsNotPersistent();
69
- updateBlockAttributes(tabsClientId, {
70
- editorActiveTabIndex: tabIndex - 1
71
- });
72
- }
73
- };
74
- const handleMoveDown = () => {
75
- moveBlocksDown([tabClientId], tabPanelClientId);
76
- if (tabsClientId) {
77
- __unstableMarkNextChangeAsNotPersistent();
78
- updateBlockAttributes(tabsClientId, {
79
- editorActiveTabIndex: tabIndex + 1
80
- });
81
- }
82
- };
83
- if (tabsCount <= 1) {
84
- return null;
85
- }
86
- return /* @__PURE__ */ jsx(BlockControls, { group: "parent", children: /* @__PURE__ */ jsx(
87
- ToolbarGroup,
88
- {
89
- className: clsx("block-editor-block-mover", {
90
- "is-horizontal": isHorizontal
91
- }),
92
- children: /* @__PURE__ */ jsxs("div", { className: "block-editor-block-mover__move-button-container", children: [
93
- /* @__PURE__ */ jsx(ToolbarItem, { children: (itemProps) => /* @__PURE__ */ jsx(
94
- Button,
95
- {
96
- className: clsx(
97
- "block-editor-block-mover-button",
98
- "is-up-button"
99
- ),
100
- icon: upIcon,
101
- label: upLabel,
102
- disabled: isFirst,
103
- accessibleWhenDisabled: true,
104
- onClick: handleMoveUp,
105
- __next40pxDefaultSize: true,
106
- ...itemProps
107
- }
108
- ) }),
109
- /* @__PURE__ */ jsx(ToolbarItem, { children: (itemProps) => /* @__PURE__ */ jsx(
110
- Button,
111
- {
112
- className: clsx(
113
- "block-editor-block-mover-button",
114
- "is-down-button"
115
- ),
116
- icon: downIcon,
117
- label: downLabel,
118
- disabled: isLast,
119
- accessibleWhenDisabled: true,
120
- onClick: handleMoveDown,
121
- __next40pxDefaultSize: true,
122
- ...itemProps
123
- }
124
- ) })
125
- ] })
126
- }
127
- ) });
128
- }
129
- function Controls({
130
- tabsClientId,
131
- tabClientId,
132
- tabIndex,
133
- tabsCount,
134
- tabsMenuClientId
135
- }) {
136
- return /* @__PURE__ */ jsxs(Fragment, { children: [
137
- /* @__PURE__ */ jsx(
138
- TabBlockMover,
139
- {
140
- tabClientId,
141
- tabIndex,
142
- tabsCount,
143
- tabsMenuClientId,
144
- tabsClientId
145
- }
146
- ),
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function Controls({ tabsClientId }) {
7
+ return /* @__PURE__ */ jsxs(BlockControls, { children: [
147
8
  /* @__PURE__ */ jsx(AddTabToolbarControl, { tabsClientId }),
148
9
  /* @__PURE__ */ jsx(RemoveTabToolbarControl, { tabsClientId })
149
10
  ] });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs-menu-item/controls.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { ToolbarGroup, ToolbarItem, Button } from '@wordpress/components';\nimport {\n\tchevronLeft,\n\tchevronRight,\n\tchevronUp,\n\tchevronDown,\n} from '@wordpress/icons';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport AddTabToolbarControl from '../tab/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab/remove-tab-toolbar-control';\n\nfunction TabBlockMover( {\n\ttabClientId,\n\ttabIndex,\n\ttabsCount,\n\ttabsMenuClientId,\n\ttabsClientId,\n} ) {\n\tconst {\n\t\tmoveBlocksUp,\n\t\tmoveBlocksDown,\n\t\tupdateBlockAttributes,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tconst { tabPanelClientId, orientation } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId, getBlockAttributes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\t// Get orientation directly from the tabs-menu block's layout attribute.\n\t\t\t// This is more reliable than getBlockListSettings which is set asynchronously.\n\t\t\tconst tabsMenuAttributes = tabsMenuClientId\n\t\t\t\t? getBlockAttributes( tabsMenuClientId )\n\t\t\t\t: null;\n\t\t\treturn {\n\t\t\t\ttabPanelClientId: getBlockRootClientId( tabClientId ),\n\t\t\t\torientation:\n\t\t\t\t\ttabsMenuAttributes?.layout?.orientation || 'horizontal',\n\t\t\t};\n\t\t},\n\t\t[ tabClientId, tabsMenuClientId ]\n\t);\n\n\tconst isFirst = tabIndex === 0;\n\tconst isLast = tabIndex === tabsCount - 1;\n\tconst isHorizontal = orientation === 'horizontal';\n\n\t// Icons and labels based on orientation (respects RTL for horizontal)\n\tlet upIcon, downIcon, upLabel, downLabel;\n\tif ( isHorizontal ) {\n\t\tif ( isRTL() ) {\n\t\t\tupIcon = chevronRight;\n\t\t\tdownIcon = chevronLeft;\n\t\t\tupLabel = __( 'Move tab right' );\n\t\t\tdownLabel = __( 'Move tab left' );\n\t\t} else {\n\t\t\tupIcon = chevronLeft;\n\t\t\tdownIcon = chevronRight;\n\t\t\tupLabel = __( 'Move tab left' );\n\t\t\tdownLabel = __( 'Move tab right' );\n\t\t}\n\t} else {\n\t\tupIcon = chevronUp;\n\t\tdownIcon = chevronDown;\n\t\tupLabel = __( 'Move tab up' );\n\t\tdownLabel = __( 'Move tab down' );\n\t}\n\n\t// Handle moving tab and updating active index to follow the moved tab\n\tconst handleMoveUp = () => {\n\t\tmoveBlocksUp( [ tabClientId ], tabPanelClientId );\n\t\t// Update editorActiveTabIndex to follow the moved tab\n\t\tif ( tabsClientId ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\teditorActiveTabIndex: tabIndex - 1,\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst handleMoveDown = () => {\n\t\tmoveBlocksDown( [ tabClientId ], tabPanelClientId );\n\t\t// Update editorActiveTabIndex to follow the moved tab\n\t\tif ( tabsClientId ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\teditorActiveTabIndex: tabIndex + 1,\n\t\t\t} );\n\t\t}\n\t};\n\n\t// Don't render if only one tab\n\tif ( tabsCount <= 1 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"parent\">\n\t\t\t<ToolbarGroup\n\t\t\t\tclassName={ clsx( 'block-editor-block-mover', {\n\t\t\t\t\t'is-horizontal': isHorizontal,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t<div className=\"block-editor-block-mover__move-button-container\">\n\t\t\t\t\t<ToolbarItem>\n\t\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t'block-editor-block-mover-button',\n\t\t\t\t\t\t\t\t\t'is-up-button'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\ticon={ upIcon }\n\t\t\t\t\t\t\t\tlabel={ upLabel }\n\t\t\t\t\t\t\t\tdisabled={ isFirst }\n\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\tonClick={ handleMoveUp }\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</ToolbarItem>\n\t\t\t\t\t<ToolbarItem>\n\t\t\t\t\t\t{ ( itemProps ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t'block-editor-block-mover-button',\n\t\t\t\t\t\t\t\t\t'is-down-button'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\ticon={ downIcon }\n\t\t\t\t\t\t\t\tlabel={ downLabel }\n\t\t\t\t\t\t\t\tdisabled={ isLast }\n\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\tonClick={ handleMoveDown }\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</ToolbarItem>\n\t\t\t\t</div>\n\t\t\t</ToolbarGroup>\n\t\t</BlockControls>\n\t);\n}\n\nexport default function Controls( {\n\ttabsClientId,\n\ttabClientId,\n\ttabIndex,\n\ttabsCount,\n\ttabsMenuClientId,\n} ) {\n\treturn (\n\t\t<>\n\t\t\t<TabBlockMover\n\t\t\t\ttabClientId={ tabClientId }\n\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\ttabsCount={ tabsCount }\n\t\t\t\ttabsMenuClientId={ tabsMenuClientId }\n\t\t\t\ttabsClientId={ tabsClientId }\n\t\t\t/>\n\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t</>\n\t);\n}\n"],
5
- "mappings": ";AAGA,OAAO,UAAU;AAKjB,SAAS,IAAI,aAAa;AAC1B;AAAA,EACC;AAAA,EACA,SAAS;AAAA,OACH;AACP,SAAS,cAAc,aAAa,cAAc;AAClD;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,aAAa,iBAAiB;AAKvC,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AA8FhC,SAiDF,UA9CK,KAHH;AA5FJ,SAAS,cAAe;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,YAAa,gBAAiB;AAElC,QAAM,EAAE,kBAAkB,YAAY,IAAI;AAAA,IACzC,CAAE,WAAY;AACb,YAAM,EAAE,sBAAsB,mBAAmB,IAChD,OAAQ,gBAAiB;AAG1B,YAAM,qBAAqB,mBACxB,mBAAoB,gBAAiB,IACrC;AACH,aAAO;AAAA,QACN,kBAAkB,qBAAsB,WAAY;AAAA,QACpD,aACC,oBAAoB,QAAQ,eAAe;AAAA,MAC7C;AAAA,IACD;AAAA,IACA,CAAE,aAAa,gBAAiB;AAAA,EACjC;AAEA,QAAM,UAAU,aAAa;AAC7B,QAAM,SAAS,aAAa,YAAY;AACxC,QAAM,eAAe,gBAAgB;AAGrC,MAAI,QAAQ,UAAU,SAAS;AAC/B,MAAK,cAAe;AACnB,QAAK,MAAM,GAAI;AACd,eAAS;AACT,iBAAW;AACX,gBAAU,GAAI,gBAAiB;AAC/B,kBAAY,GAAI,eAAgB;AAAA,IACjC,OAAO;AACN,eAAS;AACT,iBAAW;AACX,gBAAU,GAAI,eAAgB;AAC9B,kBAAY,GAAI,gBAAiB;AAAA,IAClC;AAAA,EACD,OAAO;AACN,aAAS;AACT,eAAW;AACX,cAAU,GAAI,aAAc;AAC5B,gBAAY,GAAI,eAAgB;AAAA,EACjC;AAGA,QAAM,eAAe,MAAM;AAC1B,iBAAc,CAAE,WAAY,GAAG,gBAAiB;AAEhD,QAAK,cAAe;AACnB,8CAAwC;AACxC,4BAAuB,cAAc;AAAA,QACpC,sBAAsB,WAAW;AAAA,MAClC,CAAE;AAAA,IACH;AAAA,EACD;AAEA,QAAM,iBAAiB,MAAM;AAC5B,mBAAgB,CAAE,WAAY,GAAG,gBAAiB;AAElD,QAAK,cAAe;AACnB,8CAAwC;AACxC,4BAAuB,cAAc;AAAA,QACpC,sBAAsB,WAAW;AAAA,MAClC,CAAE;AAAA,IACH;AAAA,EACD;AAGA,MAAK,aAAa,GAAI;AACrB,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,iBAAc,OAAM,UACpB;AAAA,IAAC;AAAA;AAAA,MACA,WAAY,KAAM,4BAA4B;AAAA,QAC7C,iBAAiB;AAAA,MAClB,CAAE;AAAA,MAEF,+BAAC,SAAI,WAAU,mDACd;AAAA,4BAAC,eACE,WAAE,cACH;AAAA,UAAC;AAAA;AAAA,YACA,WAAY;AAAA,cACX;AAAA,cACA;AAAA,YACD;AAAA,YACA,MAAO;AAAA,YACP,OAAQ;AAAA,YACR,UAAW;AAAA,YACX,wBAAsB;AAAA,YACtB,SAAU;AAAA,YACV,uBAAqB;AAAA,YACnB,GAAG;AAAA;AAAA,QACN,GAEF;AAAA,QACA,oBAAC,eACE,WAAE,cACH;AAAA,UAAC;AAAA;AAAA,YACA,WAAY;AAAA,cACX;AAAA,cACA;AAAA,YACD;AAAA,YACA,MAAO;AAAA,YACP,OAAQ;AAAA,YACR,UAAW;AAAA,YACX,wBAAsB;AAAA,YACtB,SAAU;AAAA,YACV,uBAAqB;AAAA,YACnB,GAAG;AAAA;AAAA,QACN,GAEF;AAAA,SACD;AAAA;AAAA,EACD,GACD;AAEF;AAEe,SAAR,SAA2B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,SACC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACD;AAAA,IACA,oBAAC,wBAAqB,cAA8B;AAAA,IACpD,oBAAC,2BAAwB,cAA8B;AAAA,KACxD;AAEF;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { BlockControls } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport AddTabToolbarControl from '../tab/add-tab-toolbar-control';\nimport RemoveTabToolbarControl from '../tab/remove-tab-toolbar-control';\n\nexport default function Controls( { tabsClientId } ) {\n\treturn (\n\t\t<BlockControls>\n\t\t\t<AddTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t\t<RemoveTabToolbarControl tabsClientId={ tabsClientId } />\n\t\t</BlockControls>\n\t);\n}\n"],
5
+ "mappings": ";AAGA,SAAS,qBAAqB;AAK9B,OAAO,0BAA0B;AACjC,OAAO,6BAA6B;AAIlC,SACC,KADD;AAFa,SAAR,SAA2B,EAAE,aAAa,GAAI;AACpD,SACC,qBAAC,iBACA;AAAA,wBAAC,wBAAqB,cAA8B;AAAA,IACpD,oBAAC,2BAAwB,cAA8B;AAAA,KACxD;AAEF;",
6
6
  "names": []
7
7
  }
@@ -7,113 +7,100 @@ import {
7
7
  RichText
8
8
  } from "@wordpress/block-editor";
9
9
  import { useSelect, useDispatch } from "@wordpress/data";
10
- import { useCallback, useMemo } from "@wordpress/element";
11
- import slugFromLabel from "../tab/slug-from-label.mjs";
10
+ import { useMemo, useCallback } from "@wordpress/element";
12
11
  import Controls from "./controls.mjs";
13
12
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
+ var EMPTY_ARRAY = [];
14
14
  function Edit({
15
+ attributes,
15
16
  context,
16
17
  clientId,
17
18
  __unstableLayoutClassNames: layoutClassNames
18
19
  }) {
19
- const tabIndex = context["core/tabs-menu-item-index"] ?? 0;
20
- const tabId = context["core/tabs-menu-item-id"] ?? "";
21
- const tabLabel = context["core/tabs-menu-item-label"] ?? "";
22
- const tabClientId = context["core/tabs-menu-item-clientId"] ?? "";
23
- const contextTabsList = context["core/tabs-list"];
24
- const tabsList = useMemo(
25
- () => contextTabsList || [],
26
- [contextTabsList]
27
- );
20
+ const tabsList = context["core/tabs-list"] || EMPTY_ARRAY;
28
21
  const activeTabIndex = context["core/tabs-activeTabIndex"] ?? 0;
29
22
  const editorActiveTabIndex = context["core/tabs-editorActiveTabIndex"];
30
23
  const effectiveActiveIndex = useMemo(() => {
31
24
  return editorActiveTabIndex ?? activeTabIndex;
32
25
  }, [editorActiveTabIndex, activeTabIndex]);
33
- const isActiveTab = tabIndex === effectiveActiveIndex;
34
- const { __unstableMarkNextChangeAsNotPersistent } = useDispatch(blockEditorStore);
35
- const { tabsClientId, tabsMenuClientId, selectedTabClientId } = useSelect(
26
+ const { menuItemIndex, tabsClientId, selectedTabClientId } = useSelect(
36
27
  (select) => {
37
28
  const {
29
+ getBlockOrder,
38
30
  getBlockRootClientId,
39
31
  getSelectedBlockClientIds,
40
32
  hasSelectedInnerBlock
41
33
  } = select(blockEditorStore);
42
34
  const _tabsMenuClientId = getBlockRootClientId(clientId);
43
35
  const _tabsClientId = _tabsMenuClientId ? getBlockRootClientId(_tabsMenuClientId) : null;
36
+ const siblings = getBlockOrder(_tabsMenuClientId);
37
+ const _menuItemIndex = siblings.indexOf(clientId);
44
38
  const selectedIds = getSelectedBlockClientIds();
45
- let selectedTab = null;
46
- for (const tab of tabsList) {
47
- if (selectedIds.includes(tab.clientId) || hasSelectedInnerBlock(tab.clientId, true)) {
48
- selectedTab = tab.clientId;
39
+ let _selectedTabClientId = null;
40
+ for (const tab2 of tabsList) {
41
+ if (selectedIds.includes(tab2.clientId) || hasSelectedInnerBlock(tab2.clientId, true)) {
42
+ _selectedTabClientId = tab2.clientId;
49
43
  break;
50
44
  }
51
45
  }
52
46
  return {
47
+ menuItemIndex: _menuItemIndex,
53
48
  tabsClientId: _tabsClientId,
54
- tabsMenuClientId: _tabsMenuClientId,
55
- selectedTabClientId: selectedTab
49
+ selectedTabClientId: _selectedTabClientId
56
50
  };
57
51
  },
58
52
  [clientId, tabsList]
59
53
  );
60
- const isSelectedTab = tabClientId === selectedTabClientId;
61
- const { updateBlockAttributes } = useDispatch(blockEditorStore);
62
- const handleLabelChange = useCallback(
63
- (newLabel) => {
64
- if (tabClientId) {
65
- updateBlockAttributes(tabClientId, {
66
- label: newLabel,
67
- anchor: slugFromLabel(newLabel, tabIndex)
68
- });
69
- }
70
- },
71
- [updateBlockAttributes, tabClientId, tabIndex]
72
- );
54
+ const tabAnchor = attributes.anchor?.replace(/-button$/, "") ?? "";
55
+ const tab = tabAnchor && tabsList.find((t) => t.id === tabAnchor) || tabsList[menuItemIndex] || {};
56
+ const tabListIndex = tab.index ?? menuItemIndex;
57
+ const tabId = tab.id || `tab-${menuItemIndex}`;
58
+ const tabClientId = tab.clientId || "";
59
+ const label = tab.label || "";
60
+ const isActive = tabListIndex === effectiveActiveIndex;
61
+ const isSelected = tabClientId === selectedTabClientId;
62
+ const { __unstableMarkNextChangeAsNotPersistent, updateBlockAttributes } = useDispatch(blockEditorStore);
73
63
  const handleTabClick = useCallback(
74
64
  (event) => {
75
65
  event.preventDefault();
76
- if (tabsClientId && tabIndex !== effectiveActiveIndex) {
66
+ if (tabsClientId && tabListIndex !== effectiveActiveIndex) {
77
67
  __unstableMarkNextChangeAsNotPersistent();
78
68
  updateBlockAttributes(tabsClientId, {
79
- editorActiveTabIndex: tabIndex
69
+ editorActiveTabIndex: tabListIndex
80
70
  });
81
71
  }
82
72
  },
83
73
  [
84
74
  tabsClientId,
85
- tabIndex,
75
+ tabListIndex,
86
76
  effectiveActiveIndex,
87
77
  updateBlockAttributes,
88
78
  __unstableMarkNextChangeAsNotPersistent
89
79
  ]
90
80
  );
91
- const tabPanelId = tabId || `tab-${tabIndex}`;
92
- const tabLabelId = `${tabPanelId}--tab`;
81
+ const handleLabelChange = useCallback(
82
+ (newLabel) => {
83
+ if (tabClientId) {
84
+ updateBlockAttributes(tabClientId, { label: newLabel });
85
+ }
86
+ },
87
+ [tabClientId, updateBlockAttributes]
88
+ );
93
89
  const blockProps = useBlockProps({
94
90
  className: clsx(layoutClassNames, {
95
- "is-active": isActiveTab,
96
- "is-selected": isSelectedTab
91
+ "is-active": isActive,
92
+ "is-selected": isSelected
97
93
  }),
98
- "aria-controls": tabPanelId,
99
- "aria-selected": isActiveTab,
100
- id: tabLabelId,
94
+ "aria-controls": tabId,
95
+ "aria-selected": isActive,
96
+ id: `${tabId}--tab`,
101
97
  role: "tab",
102
98
  tabIndex: -1,
103
99
  onClick: handleTabClick
104
100
  });
105
101
  return /* @__PURE__ */ jsxs(Fragment, { children: [
106
- /* @__PURE__ */ jsx(
107
- Controls,
108
- {
109
- tabsClientId,
110
- tabClientId,
111
- tabIndex,
112
- tabsCount: tabsList.length,
113
- tabsMenuClientId
114
- }
115
- ),
116
- /* @__PURE__ */ jsx("div", { ...blockProps, children: /* @__PURE__ */ jsx(
102
+ /* @__PURE__ */ jsx(Controls, { tabsClientId }),
103
+ /* @__PURE__ */ jsx("button", { ...blockProps, type: "button", children: /* @__PURE__ */ jsx(
117
104
  RichText,
118
105
  {
119
106
  tagName: "span",
@@ -121,15 +108,16 @@ function Edit({
121
108
  placeholder: sprintf(
122
109
  /* translators: %d is the tab index + 1 */
123
110
  __("Tab title %d"),
124
- tabIndex + 1
111
+ menuItemIndex + 1
125
112
  ),
126
- value: tabLabel || "",
113
+ value: label,
127
114
  onChange: handleLabelChange
128
115
  }
129
116
  ) })
130
117
  ] });
131
118
  }
119
+ var edit_default = Edit;
132
120
  export {
133
- Edit as default
121
+ edit_default as default
134
122
  };
135
123
  //# sourceMappingURL=edit.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs-menu-item/edit.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tRichText,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport slugFromLabel from '../tab/slug-from-label';\nimport Controls from './controls';\n\nexport default function Edit( {\n\tcontext,\n\tclientId,\n\t__unstableLayoutClassNames: layoutClassNames,\n} ) {\n\t// Context from tabs-menu (per-item context via BlockContextProvider)\n\tconst tabIndex = context[ 'core/tabs-menu-item-index' ] ?? 0;\n\tconst tabId = context[ 'core/tabs-menu-item-id' ] ?? '';\n\tconst tabLabel = context[ 'core/tabs-menu-item-label' ] ?? '';\n\tconst tabClientId = context[ 'core/tabs-menu-item-clientId' ] ?? '';\n\n\t// Context from parent tabs block, memoized to prevent unnecessary re-renders.\n\tconst contextTabsList = context[ 'core/tabs-list' ];\n\tconst tabsList = useMemo(\n\t\t() => contextTabsList || [],\n\t\t[ contextTabsList ]\n\t);\n\tconst activeTabIndex = context[ 'core/tabs-activeTabIndex' ] ?? 0;\n\tconst editorActiveTabIndex = context[ 'core/tabs-editorActiveTabIndex' ];\n\n\t// Memoize effectiveActiveIndex to ensure it updates when context changes\n\tconst effectiveActiveIndex = useMemo( () => {\n\t\treturn editorActiveTabIndex ?? activeTabIndex;\n\t}, [ editorActiveTabIndex, activeTabIndex ] );\n\n\tconst isActiveTab = tabIndex === effectiveActiveIndex;\n\n\tconst { __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\t// Get parent tabs clientId for updating editorActiveTabIndex\n\tconst { tabsClientId, tabsMenuClientId, selectedTabClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t} = select( blockEditorStore );\n\t\t\t// tabs-menu-item -> tabs-menu -> tabs\n\t\t\tconst _tabsMenuClientId = getBlockRootClientId( clientId );\n\t\t\tconst _tabsClientId = _tabsMenuClientId\n\t\t\t\t? getBlockRootClientId( _tabsMenuClientId )\n\t\t\t\t: null;\n\n\t\t\tconst selectedIds = getSelectedBlockClientIds();\n\n\t\t\t// Find if any tab is selected\n\t\t\tlet selectedTab = null;\n\t\t\tfor ( const tab of tabsList ) {\n\t\t\t\tif (\n\t\t\t\t\tselectedIds.includes( tab.clientId ) ||\n\t\t\t\t\thasSelectedInnerBlock( tab.clientId, true )\n\t\t\t\t) {\n\t\t\t\t\tselectedTab = tab.clientId;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttabsClientId: _tabsClientId,\n\t\t\t\ttabsMenuClientId: _tabsMenuClientId,\n\t\t\t\tselectedTabClientId: selectedTab,\n\t\t\t};\n\t\t},\n\t\t[ clientId, tabsList ]\n\t);\n\n\tconst isSelectedTab = tabClientId === selectedTabClientId;\n\n\t// Update tab label in the tab block\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\n\tconst handleLabelChange = useCallback(\n\t\t( newLabel ) => {\n\t\t\tif ( tabClientId ) {\n\t\t\t\tupdateBlockAttributes( tabClientId, {\n\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\tanchor: slugFromLabel( newLabel, tabIndex ),\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ updateBlockAttributes, tabClientId, tabIndex ]\n\t);\n\n\t// Update editor active tab index on parent tabs block when tab is clicked\n\tconst handleTabClick = useCallback(\n\t\t( event ) => {\n\t\t\tevent.preventDefault();\n\n\t\t\t// Update the parent tabs block's editorActiveTabIndex (ephemeral, not persisted)\n\t\t\tif ( tabsClientId && tabIndex !== effectiveActiveIndex ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\t\teditorActiveTabIndex: tabIndex,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\ttabsClientId,\n\t\t\ttabIndex,\n\t\t\teffectiveActiveIndex,\n\t\t\tupdateBlockAttributes,\n\t\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\t]\n\t);\n\n\tconst tabPanelId = tabId || `tab-${ tabIndex }`;\n\tconst tabLabelId = `${ tabPanelId }--tab`;\n\n\t// Use blockProps for core style engine support\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( layoutClassNames, {\n\t\t\t'is-active': isActiveTab,\n\t\t\t'is-selected': isSelectedTab,\n\t\t} ),\n\t\t'aria-controls': tabPanelId,\n\t\t'aria-selected': isActiveTab,\n\t\tid: tabLabelId,\n\t\trole: 'tab',\n\t\ttabIndex: -1,\n\t\tonClick: handleTabClick,\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<Controls\n\t\t\t\ttabsClientId={ tabsClientId }\n\t\t\t\ttabClientId={ tabClientId }\n\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\ttabsCount={ tabsList.length }\n\t\t\t\ttabsMenuClientId={ tabsMenuClientId }\n\t\t\t/>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<RichText\n\t\t\t\t\ttagName=\"span\"\n\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\tplaceholder={ sprintf(\n\t\t\t\t\t\t/* translators: %d is the tab index + 1 */\n\t\t\t\t\t\t__( 'Tab title %d' ),\n\t\t\t\t\t\ttabIndex + 1\n\t\t\t\t\t) }\n\t\t\t\t\tvalue={ tabLabel || '' }\n\t\t\t\t\tonChange={ handleLabelChange }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tRichText,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useMemo, useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport Controls from './controls';\n\nconst EMPTY_ARRAY = [];\n\nfunction Edit( {\n\tattributes,\n\tcontext,\n\tclientId,\n\t__unstableLayoutClassNames: layoutClassNames,\n} ) {\n\tconst tabsList = context[ 'core/tabs-list' ] || EMPTY_ARRAY;\n\tconst activeTabIndex = context[ 'core/tabs-activeTabIndex' ] ?? 0;\n\tconst editorActiveTabIndex = context[ 'core/tabs-editorActiveTabIndex' ];\n\n\tconst effectiveActiveIndex = useMemo( () => {\n\t\treturn editorActiveTabIndex ?? activeTabIndex;\n\t}, [ editorActiveTabIndex, activeTabIndex ] );\n\n\tconst { menuItemIndex, tabsClientId, selectedTabClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst _tabsMenuClientId = getBlockRootClientId( clientId );\n\t\t\tconst _tabsClientId = _tabsMenuClientId\n\t\t\t\t? getBlockRootClientId( _tabsMenuClientId )\n\t\t\t\t: null;\n\n\t\t\tconst siblings = getBlockOrder( _tabsMenuClientId );\n\t\t\tconst _menuItemIndex = siblings.indexOf( clientId );\n\n\t\t\t// Find which tab panel block is currently selected.\n\t\t\tconst selectedIds = getSelectedBlockClientIds();\n\t\t\tlet _selectedTabClientId = null;\n\t\t\tfor ( const tab of tabsList ) {\n\t\t\t\tif (\n\t\t\t\t\tselectedIds.includes( tab.clientId ) ||\n\t\t\t\t\thasSelectedInnerBlock( tab.clientId, true )\n\t\t\t\t) {\n\t\t\t\t\t_selectedTabClientId = tab.clientId;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tmenuItemIndex: _menuItemIndex,\n\t\t\t\ttabsClientId: _tabsClientId,\n\t\t\t\tselectedTabClientId: _selectedTabClientId,\n\t\t\t};\n\t\t},\n\t\t[ clientId, tabsList ]\n\t);\n\n\t// Find the corresponding tab's anchor from this menu item's anchor\n\t// attribute (e.g., \"tab-1-button\" \u2192 \"tab-1\"), then look it up in tabsList.\n\t// Falls back to positional lookup when no anchor is set.\n\tconst tabAnchor = attributes.anchor?.replace( /-button$/, '' ) ?? '';\n\tconst tab =\n\t\t( tabAnchor && tabsList.find( ( t ) => t.id === tabAnchor ) ) ||\n\t\ttabsList[ menuItemIndex ] ||\n\t\t{};\n\n\t// tabListIndex is the tab's position in tabsList, used for active-state\n\t// checks and click handling.\n\tconst tabListIndex = tab.index ?? menuItemIndex;\n\n\tconst tabId = tab.id || `tab-${ menuItemIndex }`;\n\tconst tabClientId = tab.clientId || '';\n\tconst label = tab.label || '';\n\n\tconst isActive = tabListIndex === effectiveActiveIndex;\n\tconst isSelected = tabClientId === selectedTabClientId;\n\n\tconst { __unstableMarkNextChangeAsNotPersistent, updateBlockAttributes } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst handleTabClick = useCallback(\n\t\t( event ) => {\n\t\t\tevent.preventDefault();\n\t\t\tif ( tabsClientId && tabListIndex !== effectiveActiveIndex ) {\n\t\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\t\tupdateBlockAttributes( tabsClientId, {\n\t\t\t\t\teditorActiveTabIndex: tabListIndex,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\ttabsClientId,\n\t\t\ttabListIndex,\n\t\t\teffectiveActiveIndex,\n\t\t\tupdateBlockAttributes,\n\t\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\t]\n\t);\n\n\tconst handleLabelChange = useCallback(\n\t\t( newLabel ) => {\n\t\t\tif ( tabClientId ) {\n\t\t\t\tupdateBlockAttributes( tabClientId, { label: newLabel } );\n\t\t\t}\n\t\t},\n\t\t[ tabClientId, updateBlockAttributes ]\n\t);\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( layoutClassNames, {\n\t\t\t'is-active': isActive,\n\t\t\t'is-selected': isSelected,\n\t\t} ),\n\t\t'aria-controls': tabId,\n\t\t'aria-selected': isActive,\n\t\tid: `${ tabId }--tab`,\n\t\trole: 'tab',\n\t\ttabIndex: -1,\n\t\tonClick: handleTabClick,\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<Controls tabsClientId={ tabsClientId } />\n\t\t\t<button { ...blockProps } type=\"button\">\n\t\t\t\t<RichText\n\t\t\t\t\ttagName=\"span\"\n\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\tplaceholder={ sprintf(\n\t\t\t\t\t\t/* translators: %d is the tab index + 1 */\n\t\t\t\t\t\t__( 'Tab title %d' ),\n\t\t\t\t\t\tmenuItemIndex + 1\n\t\t\t\t\t) }\n\t\t\t\t\tvalue={ label }\n\t\t\t\t\tonChange={ handleLabelChange }\n\t\t\t\t/>\n\t\t\t</button>\n\t\t</>\n\t);\n}\n\nexport default Edit;\n"],
5
+ "mappings": "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",
6
+ "names": ["tab"]
7
7
  }
@@ -3,7 +3,6 @@ import { useBlockProps } from "@wordpress/block-editor";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  function save() {
5
5
  const blockProps = useBlockProps.save({
6
- className: "wp-block-tabs-menu-item__template",
7
6
  type: "button",
8
7
  role: "tab"
9
8
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs-menu-item/save.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useBlockProps } from '@wordpress/block-editor';\n\nexport default function save() {\n\tconst blockProps = useBlockProps.save( {\n\t\tclassName: 'wp-block-tabs-menu-item__template',\n\t\ttype: 'button',\n\t\trole: 'tab',\n\t} );\n\n\treturn <button { ...blockProps } />;\n}\n"],
5
- "mappings": ";AAGA,SAAS,qBAAqB;AAStB;AAPO,SAAR,OAAwB;AAC9B,QAAM,aAAa,cAAc,KAAM;AAAA,IACtC,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACP,CAAE;AAEF,SAAO,oBAAC,YAAS,GAAG,YAAa;AAClC;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useBlockProps } from '@wordpress/block-editor';\n\nexport default function save() {\n\tconst blockProps = useBlockProps.save( {\n\t\ttype: 'button',\n\t\trole: 'tab',\n\t} );\n\n\treturn <button { ...blockProps } />;\n}\n"],
5
+ "mappings": ";AAGA,SAAS,qBAAqB;AAQtB;AANO,SAAR,OAAwB;AAC9B,QAAM,aAAa,cAAc,KAAM;AAAA,IACtC,MAAM;AAAA,IACN,MAAM;AAAA,EACP,CAAE;AAEF,SAAO,oBAAC,YAAS,GAAG,YAAa;AAClC;",
6
6
  "names": []
7
7
  }