I really think it's not a good option.
- LCP image should be eager even better not set at all, with fetchpriority=high
- All other canvas images should be lazy loaded (except images from like the branding logo that should be eager)
It should be easy in CMS to set eager (and fetchpriority=high) to all Hero SDC.
Also by setting eager to all images, another problem will come up if I'm not mistaken.
The property sizes="auto" won't work anymore, because it's effective only for lazy loaded images. So all eager images loaded by Browser will be 100vw on any device.
https://github.com/whatwg/html/pull/8008
But it looks like, it's already configured properly in latest CMS 2.x RC
Other things could be optimized,
all hero images should have `fetchpriority=high` in addition to eager
and images should be using AVIF not webp
But the lighthouse results are already great !
In my opinion, by default any prop images should be lazy loaded, except those at top of the page, so like any Hero, it should be eager, or not set at all, which is the same.
But this lazy option should be configurable/overridable in any prop image, like even if someone put an hero in the middle of the page(makes really little sense) he can override this value.
Just tested this MR inside Canvas 1.0.3 and Drupal 11.3.2, it works great !
Bold, italic, underline, links are working now.
Copy paste of text with HTML new lines (p, br, ul, li...) are converted into \n !
Also no class or any other attributes are copied into HTML, so loks super clean.
Awesome work Lauri ! Thanks for working on this
Tested with this prop
props:
type: object
required:
- text
- level
properties:
text:
type: string
title: Heading Text
description: >
The heading text.
default: "Welcome to Linno"
contentMediaType: text/html
x-formatting-context: inline
examples: ["Welcome to Linno"]I’ll admit I missed that point—as #10 mentioned, the browser is 'lazy' and usually waits for the CSS to resolve before it actually triggers the font download, even with an inline declaration.
But I still think inlining is a big win for Core. It’s not just a 'Lighthouse trick'; it’s about earlier resource discovery. If the @font-face is buried in an external CSS file, the browser is flying blind until that file is fetched and parsed. Inlining hands the browser the 'map' instantly so it can pull the trigger the millisecond the CSS resolves.
To really nail it, we should be layering all three:
Early Hints: Starts the fetch while the server is still 'thinking' (before the first byte of HTML).
Preload: A backup 'high priority' instruction in the HTML. This is crucial because some CDNs or proxies still strip out Early Hint headers, so we need the preload in the HTML to ensure the browser doesn't go back to being 'lazy.'
Inlined @font-face: Tells the CSS engine how to use the file the moment the CSS is ready.
Wouah it was quick !
I tested locally, and it did the job. I was able to set number of revisions for Canvas page to keep only 3.
After running cron, my older revisions of my canvas pages were gone !
Also I checked the presence of logs in watchdog
So it looks good to me, but maybe to ask canvas to developer to verify everything is expected.
This error is triggered only if no text to image model is set in Ai Settings page
What about using an ? icon to show/hide description like Gin provides.
Now my forms are quite cluttered with all the descriptions
Attached video
It can happen on any page, for example here what I see on Canvas edition page during the auto-save callback.
I also have a lot of modules
Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException: Circular reference detected for service "router.route_provider", path: "options_request_listener -> router.route_provider -> path_processor_manager -> simple_sitemap.engines.path_processor -> simple_sitemap.engines.index_now_submitter -> http_client -> http_client_factory -> GuzzleHttp\HandlerStack -> http_client_middleware.raven -> raven.request_subscriber -> logger.raven -> modeler_api.service". in Drupal\Component\DependencyInjection\Container->get() (line 147 of /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php).
Full trace if it can help
#0 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('router.route_pr...', 1)
#1 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#2 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'modeler_api.ser...')
#3 /var/www/html/web/modules/contrib/modeler_api/src/Plugin/ModelerApiModelOwner/ModelOwnerBase.php(59): Drupal\Component\DependencyInjection\Container->get('modeler_api.ser...')
#4 /var/www/html/web/core/lib/Drupal/Core/Plugin/Factory/ContainerFactory.php(21): Drupal\modeler_api\Plugin\ModelerApiModelOwner\ModelOwnerBase::create(Object(Drupal\Core\DependencyInjection\Container), Array, 'ai_agents_agent', Array)
#5 /var/www/html/web/core/lib/Drupal/Component/Plugin/PluginManagerBase.php(85): Drupal\Core\Plugin\Factory\ContainerFactory->createInstance('ai_agents_agent', Array)
#6 /var/www/html/web/modules/contrib/modeler_api/src/Plugin/ModelOwnerPluginManager.php(61): Drupal\Component\Plugin\PluginManagerBase->createInstance('ai_agents_agent')
#7 /var/www/html/web/modules/contrib/modeler_api/src/Hook/EntityHooks.php(62): Drupal\modeler_api\Plugin\ModelOwnerPluginManager->getAllInstances(true)
#8 /var/www/html/web/core/lib/Drupal/Core/Entity/EntityTypeManager.php(118): Drupal\modeler_api\Hook\EntityHooks->entityTypeBuild(Array)
#9 /var/www/html/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(357): Drupal\Core\Entity\EntityTypeManager->{closure:Drupal\Core\Entity\EntityTypeManager::findDefinitions():117}(Array, 'modeler_api')
#10 /var/www/html/web/core/lib/Drupal/Core/Entity/EntityTypeManager.php(117): Drupal\Core\Extension\ModuleHandler->invokeAllWith('entity_type_bui...', Object(Closure))
#11 /var/www/html/web/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php(216): Drupal\Core\Entity\EntityTypeManager->findDefinitions()
#12 /var/www/html/web/core/lib/Drupal/Component/Plugin/Discovery/DiscoveryCachedTrait.php(25): Drupal\Core\Plugin\DefaultPluginManager->getDefinitions()
#13 /var/www/html/web/core/lib/Drupal/Core/Entity/EntityTypeManager.php(132): Drupal\Core\Plugin\DefaultPluginManager->getDefinition('user_role', false)
#14 /var/www/html/web/modules/contrib/trash/src/TrashEntityTypeManager.php(71): Drupal\Core\Entity\EntityTypeManager->getDefinition('user_role')
#15 /var/www/html/web/modules/contrib/trash/src/TrashEntityTypeManager.php(59): Drupal\trash\TrashEntityTypeManager->getHandler('user_role', 'storage')
#16 /var/www/html/web/core/lib/Drupal/Core/Session/UserRolesAccessPolicy.php(24): Drupal\trash\TrashEntityTypeManager->getStorage('user_role')
#17 /var/www/html/web/core/lib/Drupal/Core/Session/AccessPolicyProcessor.php(107): Drupal\Core\Session\UserRolesAccessPolicy->calculatePermissions(Object(Drupal\Core\Session\AnonymousUserSession), 'drupal')
#18 /var/www/html/web/core/lib/Drupal/Core/Session/PermissionChecker.php(17): Drupal\Core\Session\AccessPolicyProcessor->processAccessPolicies(Object(Drupal\Core\Session\AnonymousUserSession))
#19 /var/www/html/web/core/lib/Drupal/Core/Session/UserSession.php(125): Drupal\Core\Session\PermissionChecker->hasPermission('send logs to se...', Object(Drupal\Core\Session\AnonymousUserSession))
#20 /var/www/html/web/core/lib/Drupal/Core/Session/AccountProxy.php(121): Drupal\Core\Session\UserSession->hasPermission('send logs to se...')
#21 /var/www/html/web/modules/contrib/raven/src/Logger/Raven.php(130): Drupal\Core\Session\AccountProxy->hasPermission('send logs to se...')
#22 /var/www/html/web/modules/contrib/raven/src/Logger/Raven.php(72): Drupal\raven\Logger\Raven->getClient()
#23 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(259): Drupal\raven\Logger\Raven->__construct(Object(Drupal\Core\Config\ConfigFactory), Object(Drupal\Core\Logger\LogMessageParser), 'prod', Object(Drupal\Core\Session\AccountProxy), Object(Symfony\Component\HttpFoundation\RequestStack), Object(Drupal\Core\Site\Settings), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(Drupal\raven\Integration\RequestFetcher))
#24 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'logger.raven')
#25 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('logger.raven', 1)
#26 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#27 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'raven.request_s...')
#28 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('raven.request_s...', 1)
#29 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#30 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'http_client_mid...')
#31 /var/www/html/web/core/lib/Drupal/Core/Http/HandlerStackConfigurator.php(65): Drupal\Component\DependencyInjection\Container->get('http_client_mid...')
#32 /var/www/html/web/core/lib/Drupal/Core/Http/HandlerStackConfigurator.php(83): Drupal\Core\Http\HandlerStackConfigurator->initializeMiddlewares()
#33 [internal function]: Drupal\Core\Http\HandlerStackConfigurator->configure(Object(GuzzleHttp\HandlerStack))
#34 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(299): call_user_func(Array, Object(GuzzleHttp\HandlerStack))
#35 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'GuzzleHttp\\Hand...')
#36 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('GuzzleHttp\\Hand...', 1)
#37 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#38 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'http_client_fac...')
#39 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('http_client_fac...', 1)
#40 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(249): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#41 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'http_client')
#42 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('http_client', 1)
#43 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#44 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'simple_sitemap....')
#45 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('simple_sitemap....', 1)
#46 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#47 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'simple_sitemap....')
#48 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('simple_sitemap....', 1)
#49 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(273): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#50 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'path_processor_...')
#51 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('path_processor_...', 1)
#52 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#53 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'router.route_pr...')
#54 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('router.route_pr...', 1)
#55 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#56 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'options_request...')
#57 /var/www/html/web/core/lib/Drupal/Componen<?php
Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException: Circular reference detected for service "router.route_provider", path: "options_request_listener -> router.route_provider -> path_processor_manager -> simple_sitemap.engines.path_processor -> simple_sitemap.engines.index_now_submitter -> http_client -> http_client_factory -> GuzzleHttp\HandlerStack -> http_client_middleware.raven -> raven.request_subscriber -> logger.raven -> modeler_api.service". in Drupal\Component\DependencyInjection\Container->get() (line 147 of /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php).
?>
Full trace if it can help
<code>#0 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('router.route_pr...', 1)
#1 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#2 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'modeler_api.ser...')
#3 /var/www/html/web/modules/contrib/modeler_api/src/Plugin/ModelerApiModelOwner/ModelOwnerBase.php(59): Drupal\Component\DependencyInjection\Container->get('modeler_api.ser...')
#4 /var/www/html/web/core/lib/Drupal/Core/Plugin/Factory/ContainerFactory.php(21): Drupal\modeler_api\Plugin\ModelerApiModelOwner\ModelOwnerBase::create(Object(Drupal\Core\DependencyInjection\Container), Array, 'ai_agents_agent', Array)
#5 /var/www/html/web/core/lib/Drupal/Component/Plugin/PluginManagerBase.php(85): Drupal\Core\Plugin\Factory\ContainerFactory->createInstance('ai_agents_agent', Array)
#6 /var/www/html/web/modules/contrib/modeler_api/src/Plugin/ModelOwnerPluginManager.php(61): Drupal\Component\Plugin\PluginManagerBase->createInstance('ai_agents_agent')
#7 /var/www/html/web/modules/contrib/modeler_api/src/Hook/EntityHooks.php(62): Drupal\modeler_api\Plugin\ModelOwnerPluginManager->getAllInstances(true)
#8 /var/www/html/web/core/lib/Drupal/Core/Entity/EntityTypeManager.php(118): Drupal\modeler_api\Hook\EntityHooks->entityTypeBuild(Array)
#9 /var/www/html/web/core/lib/Drupal/Core/Extension/ModuleHandler.php(357): Drupal\Core\Entity\EntityTypeManager->{closure:Drupal\Core\Entity\EntityTypeManager::findDefinitions():117}(Array, 'modeler_api')
#10 /var/www/html/web/core/lib/Drupal/Core/Entity/EntityTypeManager.php(117): Drupal\Core\Extension\ModuleHandler->invokeAllWith('entity_type_bui...', Object(Closure))
#11 /var/www/html/web/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php(216): Drupal\Core\Entity\EntityTypeManager->findDefinitions()
#12 /var/www/html/web/core/lib/Drupal/Component/Plugin/Discovery/DiscoveryCachedTrait.php(25): Drupal\Core\Plugin\DefaultPluginManager->getDefinitions()
#13 /var/www/html/web/core/lib/Drupal/Core/Entity/EntityTypeManager.php(132): Drupal\Core\Plugin\DefaultPluginManager->getDefinition('user_role', false)
#14 /var/www/html/web/modules/contrib/trash/src/TrashEntityTypeManager.php(71): Drupal\Core\Entity\EntityTypeManager->getDefinition('user_role')
#15 /var/www/html/web/modules/contrib/trash/src/TrashEntityTypeManager.php(59): Drupal\trash\TrashEntityTypeManager->getHandler('user_role', 'storage')
#16 /var/www/html/web/core/lib/Drupal/Core/Session/UserRolesAccessPolicy.php(24): Drupal\trash\TrashEntityTypeManager->getStorage('user_role')
#17 /var/www/html/web/core/lib/Drupal/Core/Session/AccessPolicyProcessor.php(107): Drupal\Core\Session\UserRolesAccessPolicy->calculatePermissions(Object(Drupal\Core\Session\AnonymousUserSession), 'drupal')
#18 /var/www/html/web/core/lib/Drupal/Core/Session/PermissionChecker.php(17): Drupal\Core\Session\AccessPolicyProcessor->processAccessPolicies(Object(Drupal\Core\Session\AnonymousUserSession))
#19 /var/www/html/web/core/lib/Drupal/Core/Session/UserSession.php(125): Drupal\Core\Session\PermissionChecker->hasPermission('send logs to se...', Object(Drupal\Core\Session\AnonymousUserSession))
#20 /var/www/html/web/core/lib/Drupal/Core/Session/AccountProxy.php(121): Drupal\Core\Session\UserSession->hasPermission('send logs to se...')
#21 /var/www/html/web/modules/contrib/raven/src/Logger/Raven.php(130): Drupal\Core\Session\AccountProxy->hasPermission('send logs to se...')
#22 /var/www/html/web/modules/contrib/raven/src/Logger/Raven.php(72): Drupal\raven\Logger\Raven->getClient()
#23 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(259): Drupal\raven\Logger\Raven->__construct(Object(Drupal\Core\Config\ConfigFactory), Object(Drupal\Core\Logger\LogMessageParser), 'prod', Object(Drupal\Core\Session\AccountProxy), Object(Symfony\Component\HttpFoundation\RequestStack), Object(Drupal\Core\Site\Settings), Object(Symfony\Component\EventDispatcher\EventDispatcher), Object(Drupal\raven\Integration\RequestFetcher))
#24 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'logger.raven')
#25 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('logger.raven', 1)
#26 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#27 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'raven.request_s...')
#28 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('raven.request_s...', 1)
#29 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#30 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'http_client_mid...')
#31 /var/www/html/web/core/lib/Drupal/Core/Http/HandlerStackConfigurator.php(65): Drupal\Component\DependencyInjection\Container->get('http_client_mid...')
#32 /var/www/html/web/core/lib/Drupal/Core/Http/HandlerStackConfigurator.php(83): Drupal\Core\Http\HandlerStackConfigurator->initializeMiddlewares()
#33 [internal function]: Drupal\Core\Http\HandlerStackConfigurator->configure(Object(GuzzleHttp\HandlerStack))
#34 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(299): call_user_func(Array, Object(GuzzleHttp\HandlerStack))
#35 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'GuzzleHttp\\Hand...')
#36 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('GuzzleHttp\\Hand...', 1)
#37 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#38 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'http_client_fac...')
#39 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('http_client_fac...', 1)
#40 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(249): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#41 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'http_client')
#42 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('http_client', 1)
#43 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#44 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'simple_sitemap....')
#45 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('simple_sitemap....', 1)
#46 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#47 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'simple_sitemap....')
#48 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('simple_sitemap....', 1)
#49 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(273): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#50 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'path_processor_...')
#51 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('path_processor_...', 1)
#52 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#53 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'router.route_pr...')
#54 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(430): Drupal\Component\DependencyInjection\Container->get('router.route_pr...', 1)
#55 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(237): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array)
#56 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(177): Drupal\Component\DependencyInjection\Container->createService(Array, 'options_request...')
#57 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(454): Drupal\Component\DependencyInjection\Container->get('options_request...', 1)
#58 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(243): Drupal\Component\DependencyInjection\Container->{closure:Drupal\Component\DependencyInjection\Container::resolveServicesAndParameters():453}()
#59 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(206): Symfony\Component\EventDispatcher\EventDispatcher::{closure:Symfony\Component\EventDispatcher\EventDispatcher::optimizeListeners():241}(Object(Symfony\Component\HttpKernel\Event\RequestEvent), 'kernel.request', Object(Symfony\Component\EventDispatcher\EventDispatcher))
#60 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(56): Symfony\Component\EventDispatcher\EventDispatcher->callListeners(Array, 'kernel.request', Object(Symfony\Component\HttpKernel\Event\RequestEvent))
#61 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(159): Symfony\Component\EventDispatcher\EventDispatcher->dispatch(Object(Symfony\Component\HttpKernel\Event\RequestEvent), 'kernel.request')
#62 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#63 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#64 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#65 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#66 /var/www/html/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#67 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(116): Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#68 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(90): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#69 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#70 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#71 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(53): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#72 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#73 /var/www/html/web/core/lib/Drupal/Core/DrupalKernel.php(715): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#74 /var/www/html/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#75 {main}
t/DependencyInjection/Container.php(454): Drupal\Component\DependencyInjection\Container->get('options_request...', 1)
#58 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(243): Drupal\Component\DependencyInjection\Container->{closure:Drupal\Component\DependencyInjection\Container::resolveServicesAndParameters():453}()
#59 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(206): Symfony\Component\EventDispatcher\EventDispatcher::{closure:Symfony\Component\EventDispatcher\EventDispatcher::optimizeListeners():241}(Object(Symfony\Component\HttpKernel\Event\RequestEvent), 'kernel.request', Object(Symfony\Component\EventDispatcher\EventDispatcher))
#60 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(56): Symfony\Component\EventDispatcher\EventDispatcher->callListeners(Array, 'kernel.request', Object(Symfony\Component\HttpKernel\Event\RequestEvent))
#61 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(159): Symfony\Component\EventDispatcher\EventDispatcher->dispatch(Object(Symfony\Component\HttpKernel\Event\RequestEvent), 'kernel.request')
#62 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#63 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#64 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#65 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#66 /var/www/html/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#67 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(116): Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#68 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(90): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#69 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#70 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#71 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(53): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#72 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#73 /var/www/html/web/core/lib/Drupal/Core/DrupalKernel.php(715): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#74 /var/www/html/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#75 {main}
I also see this error time to time on Drupal 11.2.8, ECA 3.0.7 , modeler_api 1.0.5
Any country that needs to communicate in multiple languages needs it.
In Israel, there at least 5 languages, RTL & LTR: Hebrew, Arabic, Russian, French, Spanish
This issue becomes really painful when the 404 page is a canvas page, where URL variation is infinite so could not be handled by just Drupal Page cache alone.
We also see long time passed in the rendering of TWIG field--component-tree.html.twig
After digging with Sentry, we are able to see that most of the time is passed on the validation of props with JSON Schema.
Caching this will really help, maybe some other fine tuning could be applied on this validation too.
In those screenshots, the request is on a canvas page, which is our 404 page, so this page displays all 404 urls. Unfortunately caused by another bug canvas pages are Uncacheable by Dynamic page cache 🐛 Canvas pages are uncacheable Active .
@tim.plunkett sure I wasn't aware of this workflow :-)
Also wanted to mention, this warning is displayed in the chat, only if my php.ini is configured to display error with display_errors = "On" even if Drupal is configured not to display any message in admin/config/development/logging.
Thank you I just tested your last MR, it's working nicely now.
There was a lot of work made to allow the evolution of a SDC with existing content, like adding, renaming, deleting props required or not
Look at this issue, a Mr is still in progress
https://www.drupal.org/project/canvas/issues/3532514
🐛
Deleting or renaming SDC prop will break xb pages using old version of the component
Active
With the last orchestrator, I got an error when placing any SDC on a blank page without any components on it.
reference_uuid is not set
<br/><b>Warning</b>: Undefined array key "reference_uuid" in <b>/var/www/html/web/modules/contrib/canvas/modules/canvas_ai/src/CanvasAiPageBuilderHelper.php</b> on line <b>800</b><br/>{
"status": true,
"operations": [
{
"operation": "ADD",
"components": [
{
"id": "sdc.linno_theme.container",
"nodePath": [
0,
0
],
"fieldValues": {
"padding_top": "pt-50",
"padding_bottom": "pb-50"
}
},
+1
We should also add available pattern to this list.
If it's still possible , I will be happy to opt in those 3 modules
https://www.drupal.org/project/flexible_descriptions →
https://www.drupal.org/project/entity_references_map →
https://www.drupal.org/project/url_inspector →
Thanks for the update @f.mazeikis,
I checked the MR!196, I confirm, I can now edit the previous version of my component which received new props !
But nothing indicates, it's an outdated version. I don't remember which issue is about this ?
Usually developers just describes what the prop is, but content editors may need more explanation:
- like max length max of string,
- tones to use in a textarea,
We had a client who wanted to be able to edit all fields/content type description, in case of a misuse, so those description became content with
a module we built →
!
Like this if editors were making mistakes on how fill in content, their admin were able to improve those descriptions.
And LLM needs another sort of guidance i'm thinking about the slot restrictions as an example:
https://project.pages.drupalcode.org/canvas/ai-assistant/#restrictions-o...
But for AI we still have the way to override those descriptions in Drupal UI, but in my opinion it's less practical as developer to optimize those contexts.
I'm just mentioning those descriptions have at least 2 usages today:
- describe the props/slots for developers
- describe the props/slots for LLM for better usage in Canvas AI
Most of the time, the way we write them will be different according those 2 targets.
And adding a third target: "canvas editor" will complicate even more the situation.
I had this issue, when the div containing the slot is using display: flex
Don't forget we also use those props/slots descriptions as AI context.
Getting this issue too. All group are not collapsible, even Open Graph which has an arrow that indicates collapsed is open.
Video attached to illustrate the bug more clearly
I was reading the readme from the MR, it looks like the agent/assistant is outdated if I'm not mistaken.
I think the latest approach was to create first an assistant with rag selected. Saving this assistant will create automatically the agent with RAG search as a tool.
Some questions I had during this process:
1. I learn that I have to resave the generated Agent manually, if not I had this issue after saving changes the assistant.
Schema errors for ai_agents.ai_agent.content_drupal_assistant with the following errors: ai_agents.ai_agent.content_drupal_assistant:tool_settings variable type is NULL but applied schema class is Drupal\Core\Config\Schema\Sequence. These errors mean there is configuration that does not comply with its schema. This is not a fatal error, but it is recommended to fix these issues. For more information on configuration schemas, check out <a href="https://www.drupal.org/docs/drupal-apis/configuration-api/configuration-schemametadata">the documentation</a>.
2. It isn't clear to me how to handle the search into multiples content types from a chatbot.
Should I use one index with multiple content types.
Or multiple indices, if it's the best option, how to do it ? The assistant Rag option, handles only one index, if i'm not mistaken.
3. Also not clear to me how to structure the prompt/instructions in the agent, specially for formatting, usage of contextual, and filterable attributes. for example how to tell llm to deal will multilang content, or search by date(recent, in the future for event...)
4. Also during the configuration of the index of the fields, it was pretty clear what to use and why
- for Main content. Only body field, aggregated field of several fields (which ones ?), or rendered output
- for Contextual content. Not clear what the purpose of this, and How it's used by assistant. Can we use it in the instruction ? how to formulate ?
- for filterable attributes, same question than contextual content
5. Pick vector DB. In slack, I remember lots of people preferred Postgresql over Milvus. But other saw a lot of potential with Solr.
could be nice to have best use cases for each supported provider.
PS: Sorry if there is a lot of newby questions in my comment...
The MR didn't helped.
The Search recipe doesn't configure and doesn't place the simple_search_form block.
So I suppose it may be a Canvas bug, that should probably catch those errors, most of blocks are un-configured before being placed.
I just checked we have the same issue with canvas-demo.
But do we really need to add this conditional slot functionality, at least to allow multiple columns ?
We can do it differently, we can have a SDC container which has one slot for all columns.
and SDC child column. And no need to ask the editor how many columns he needs.
If he inserts 3 children, there will be 3 columns
Thanks for working on this issue, here my test results.
Missing component
- I deleted the whole SDC folder
- Cleared Drupal cache
ᯓ➤ Edition of the page and of the missing component is possible !
* We can clearly understand it was there before, restore it if possible, or remove it . Awesome 😎
ᯓ➤ Front page is also working, and shows an Oops message where was the component
* Restoring the folder, and clearing the drupal cache fixed the situation as expected.
Adding a New prop
- I added a new prop to an existing sdc already used in a canvas page
- Cleared Drupal cache
ᯓ➤ Edition of the page is working.
* I didn't see any change in UI, the SDC shown in edition is previous one (without new prop)
Remark: It would be great if there was a way to "migrate" to new version, without retyping/reconfiguring all props.
Making this new prop required +
- Make this exact same new prop required
- Clearing drupal cache
ᯓ➤ Edition of the page is working, but shows an error on first load
<b>Warning</b>: Undefined array key "examples" in <b>/var/www/html/web/modules/contrib/canvas/src/Plugin/Canvas/ComponentSource/GeneratedFieldExplicitInputUxComponentSourceBase.php</b> on line <b>932</b><br>
<br>
<b>Warning</b>: Trying to access array offset on null in <b>/var/www/html/web/modules/contrib/canvas/src/Plugin/Canvas/ComponentSource/GeneratedFieldExplicitInputUxComponentSourceBase.php</b> on line <b>932</b><br>
ᯓ➤ After second load, the component is visible in the tree(sidebar)
* We can also edit it.
* But rendering is broken
ᯓ➤ Front page is also working, and shows a warning at top and Oops message where was the component
Warning: Trying to access array offset on null in /var/www/html/web/modules/contrib/canvas/src/Plugin/Canvas/ComponentSource/GeneratedFieldExplicitInputUxComponentSourceBase.php on line 932
Removing a prop
- I removed a prop from a SDC already used in canvas page
- Cleared Drupal cache
ᯓ➤ Edition of the page is working.
* We can edit the SDC without issue,
* We even see deleted prop, edition of this old prop is working.
* No issue after saving the canvas page !
ᯓ➤ Front page is also working after saving the old version of SDC
What about renaming the tabs to
-Valid components
-Invalid components
In valid components, add a column status, which will show disabled or enabled.
Adding a checkbox for bulk operation will be awesome...
Not sure what is the missing part, but even after enabling the Datetime Range module, I still see this 500 error.
I still can't list components in Canvas interface.
you are right, I didn't pay attention it needs this module.
I understand this is a test module, but it's a great resources for SDC developers to learn about all available prop types and how to use them, by the way mentioned this module in the SDC user guide https://project.pages.drupalcode.org/canvas/sdc-components/props/#additi...
Concerning this error, I suppose it will be enough to add a dependency to this module.
Not sure to understand why HTML tag br should not be part of inline element too ?
It could be really useful to support such design.
Here
Start you Drupal journey
is one heading on 2 lines, with emphasis on the word Drupal.
The twig could be of this form
<h2>Start your<br><em>Drupal</em> journey</h2>
So it will make totally sense to have one inline HTML prop with CKEditor support to be able to add the emphasis or strong, and to add line break (br)
For now CKEditor is not used.
📻 🎶Let's tune back to Radio Canvas !🎶
MR is in the tube ! 🧪
heyyo → changed the visibility of the branch 3538340-add-documentation-for to hidden.
I remember I had trouble to add a SDC without prop, until I found it's not enough to not add the props key, but instead we need to declare an empty props structure.
https://www.drupal.org/docs/develop/theming-drupal/using-single-director... →
props:
type: object
properties: {}
Maybe that's the issue @Laurii encountered
I don't think we should assume, uploading an image, means creates a code component.
This image could be used as an example of creating a page, or even used in an existing component.
What about to force prompt text, if there is an uploaded image ?
Similar to this issue #3511093
It looks like, work in this previous issue wasn't enough
https://www.drupal.org/project/experience_builder/issues/3528368
🐛
Add warning if XB is installed from drupal config but without xb_stark
Active
I tried to make this user guide as interesting as I could for an XB beginner.
Feel free to improve it, and correct all my language mistakes 📝
I can share my experience with Extend (modules listing).
In my configuration, with Gin as admin theme, the INP is really bad with latest Drupal 11.X.
The search input could be completely stuck for 20 seconds, just after typing one extra character or removing one. I did the same test with Claro it went down to 2 or 3 seconds stuck, still really bad.
With this patch, search for module is instant, but initial INP is little bit high. (
with the patch I made, before knowing about this issue
🐛
Extend: Filter modules list by search strings could be stuck
Active
, the first INP was good too, to be checked)
- 2 Videos attached with Gin about modules filtering without patch and with patch.
- And one video containing all parts listed by Nic also in Gin module (5.0.3). All my tests were succesfull
I confirm similar speed with the patch of the issue you mentioned and my patch. Both are filtering instantly.
I tested in Claro and in Gin too, where this slowness is really more visible ( 2s for Claro, 18s for Gin when adding/removing character)
So no doubt my issue could be closed.
Sure on it
In this video I'm showing before vs after patch (from 0:50s)
its' look like I do nothing in the video after typing gro but I typed on on my keyboard, Drupal is just stuck from more or less 10 to 18 seconds
I confirm, that margin-top/margin-block issue is fixed with the other issue:
https://www.drupal.org/project/experience_builder/issues/3534490
🐛
Cannot use `h-screen` from Tailwind with XB
Active
Your MR definitely helps !
3 times faster 🔥
Yes my test was against 0.x, but after I saw another issue on the same bug, didn't test it yet.
https://www.drupal.org/project/experience_builder/issues/3534490
🐛
Cannot use `h-screen` from Tailwind with XB
Active
Can you share that SDC (or point me towards somewhere it lives in a repo)?
It's a local playground for now, still unsure to contribute.
But it's a custom theme with daisyui/tailwind, and this bug appears just by applying the tailwind class mt-{y} or my-{y}
which sets only margin-top or margin-block, nothing related to height of the container.
I didn't test outside tailwind, to see we have the same issue
I wonder if we can make use of a meta property on slots in the definition to flag a slot as inline?
Will be great
In terms of the space, this is needed for the sake of drop-targets. I guess we could hide that unless something was being dragged but that might make dropping difficult if when drag start occurs we added back collapsed/empty slots
When editing, for sure we need to keep displaying slots.
But my issue is about after clicking Preview, in this case I think empty slots shouldn't take any space
I experienced the same bug, just by setting margin-top, or margin-block (but not margin-bottom).
Video attached.
@heyyo That is incredibly fast testing! 😮 Thanks!
You are the superman, man ! @wim
You are in all issues, commenting, testing, coding, patching, reviewing always nicely and with humor
Looks like I missed a bunch of cases; sorry — absolutely didn’t mean to waste your time 🫣
Waste my time ? When you and all developers are making such a great product, giving from your time for so many intense days.
🎤 is back to @laurii 😂
Applying the 2 patches on last dev of XB(#e9d0d1c6d)
- https://git.drupalcode.org/project/experience_builder/-/merge_requests/1...
- https://git.drupalcode.org/project/experience_builder/-/merge_requests/1...
Rebuild of the bundle + clear cache of drupal + disable cache in browser console
1. Rename a prop from paddingInline to padding_inline + drush cr
Viewing or editing a page using previous prop name we got the error:
`OutOfRangeException
'padding_inline' is not a prop on the component 'Single-directory component: Linno Container'.`
private function getDefaultStaticPropSource(string $prop_name, bool $validate_prop_name = TRUE): StaticPropSource {
assert(isset($this->configuration['prop_field_definitions']));
assert(is_array($this->configuration['prop_field_definitions']));
$component_schema = $this->getSdcPlugin()->metadata->schema ?? [];
if ($validate_prop_name && !array_key_exists($prop_name, $component_schema['properties'] ?? [])) {
throw new \OutOfRangeException(sprintf("'%s' is not a prop on the component '%s'.", $prop_name, $this->getComponentDescription()));
}
2. Deleting a prop from a SDC with content using this prop + drush cr
Exact same error than in 1.
3. Adding a new prop to an existing SDC with existing content + drush cr
- Visiting a previous page, the page is ok
- Editing the page, then selecting the SDC to edit: impossible we got the error "An unexpected error has occurred while rendering the component's form. SyntaxError: Unexpected token '<', "
It looks like it's working great 🎉
Thanks a lot for the quick work in this issue, I'm offline for now, I'll check tomorrow 🙏
I also got an error, when adding a new prop(enum) to an existing sdc.
It's impossible to edit previous version of this same sdc.
Error in drupal logs when we want to edit this SDC:
Path: /xb/api/v0/form/component-instance/xb_page/10
Message:
TypeError: array_key_exists(): Argument #2 ($array) must be of type array, null given in array_key_exists() (line 151 of /var/www/html/web/modules/contrib/experience_builder/src/Plugin/ExperienceBuilder/ComponentSource/GeneratedFieldExplicitInputUxComponentSourceBase.php).
Is there any workaround ? except recreating the page using it ?
Another one which surprised me, was the paste of text into the chat with CTRL+V. If a component was copied previously, instead of pasting the text, it pastes the component into the viewport.
Workaround, use the paste from contextual menu(right click)
griffynh → credited heyyo → .
My idea is to regenerate response only if prop is not required and invalid enum value
If enums prop is not required, maybe we can just removed non valid option, instead of regenerating the response again, also we can enter into infinite loop if LLM is stubborn 😄
right payload is ok, so backend issue.
I just checked, the POST request xb/api/v0/config/pattern doesn't contain the full tree of the selected component.
I also saw this issue outside xb-demo, and I didn't have any region enabled in my theme to be managed by XB.
And not a bug, but more a feature request, today it's possible to insert SDC, but what about blocks and patterns (sections) ?
It will be a great addition if we were able to place a section, and let the LLM to fill existing props according prompt, should decrease unexpected results of llm
A more problematic issue, sometimes LLM will set value of enums which doesn't exist, so it will trigger an error in XB to the impossibility to render the sdc
Another issue I encountered was with SDC which has multiple slots.
If in the prompt, we specify to insert components inside a slot by providing it's name, the LLM will always insert the SDC into the first slot.
Following the advice of Akhil to better understand what's the going on, prompting something like insert a button in all slots of a specified component will do work.
I suppose the instructions given to LLM should be improved, but I have to mention it doesn't happen all the time.
I don't even remember which prompt I used to obtain such behavior, maybe also related to the abilities of the LLM picked.