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.
I also opened a child issue regarding the impossibility to set link for a button component for example or src of an image.
Getting this error sometimes
Error: Call to a member function getReadableOutput() on null in Drupal\xb_ai\Controller\XbBuilder->render() (line 219 of /var/www/html/web/modules/contrib/experience_builder/modules/xb_ai/src/Controller/XbBuilder.php).
Testing extensively AI capability, it's getting really impressive !
I found in the instructions, something incorrect regarding slots.
If a component has `slots`, you **MUST** fill those slots with valid, appropriate child components. **There can be no empty slots.** Decompose complex requests into a logical hierarchy of parent and child components.
LLM are not forced to fill slot, it's completely valid to have empty slot, I'm not even sure we can set slot to be required.
For example I have a heading component that has optional 'Badge' slot to add a badge at the end.
Confirmed, just tested last MT, working perfectly !
Modifying a boolean, doesn't affect other boolean anymore.
And exiting form, and returning doesn't set all boolean to true anymore.
So it's working great, I will be able to play with slider container with 30 props, and maybe 25 boolean :-)
I really think I did rebuilt the bundle, but you never know. I'll try to recheck in 2/3 hours from now.
The components I'm using are custom ones not available online, I may release the custom them based mainly on daisyUI and tailwind.
But I did reproduce the same bug with 2 different SDC.
Hi ,
I'm trying to test this boolean prop, it works better, but it looks like there is still an issue, when mutiple boolean exist in the sdc.
Changing value to boolean, will change other boolean too...
Video attached to show this weird bug
This morning around 6AM UTC time, I pulled last commit on 0.x after larowlan requested me to do so.
The bug was still present. I don't know the exact commit, I pulled another time after that.
I'm not sure I really know how it should behave, but it's quite critical in my mind.
We can't ask to clients to delete all their content using old sdc components, and recreate them.
But after my discussion with larowlan, I had the impression that larowlan thought it was possible to handle this scenario too with component versions. After that, it's above my knowledge :-)
Just to inform you, even with newer commit of XB(#a3799e20d3) I have the same exact issue using OpenAI
With those versions:
"drupal/ai": "^1.1",
"drupal/ai_agents": "^1.1",
"drupal/ai_provider_openai": "^1.1",
On this callback /xb/api/v0/config/js_component, I received this status code 422 Unprocessable Entity
With this error:
{
"errors": [
{
"detail": "Unable to find class\/interface \u0022function\u0022 specified in the prop \u0022onButtonClick\u0022 for the component \u0022experience_builder:herobanner\u0022.",
"source": {
"pointer": ""
}
},
{
"detail": "The value you selected is not a valid choice.",
"source": {
"pointer": "props.onButtonClick.type"
}
}
]
}
After step debugging the code it shows the validation of ApiConfigControllers:validate fails because of the react component generated by OpenAI which contains an onButtonClick without declaring it...
heyyo → created an issue.
This latest change broke the possibility to select 'None' value from any select.
We got not this validation error: data must be equal to one of the allowed values
Exact steps with latest dev:
0. Check the status property of the SDC Druplicon with drush, we see status: true
drush cget experience_builder.component.sdc.experience_builder.druplicon
1. Disable druplicon in UI : /admin/appearance/component.
2. check again the status property. As expected status turned now to false
You can also the SDC component is not available anymore in XB UI
drush cget experience_builder.component.sdc.experience_builder.druplicon
3. execute drush cr
4. check again the status property. Status turned back to true !
drush cget experience_builder.component.sdc.experience_builder.druplicon
I want this closed as you do, don't worry 😛
I was happy to read that the boolean SDC issue has been fixed, but it looks like it didn't.
I suppose it was marked as duplicate by mistake, thinking the issue was for code components but it is for SDC components.
Thank you for your detailed explanation, makes totally sense.
Really nice design, and I see and will be able not to only resize the sidebar, but to also to close both sidebar and to minimize, and maximize the right one too :-)
One of a client didn't want to use XB for Article page because of this, he wanted to be able to write article in full page.
Some questions about this new UX which looks great !
1. Why it was an issue to have sidebars on top of canvas ? It was/is still possible to drag and zoom.
2. Will it be still possible to see desktop and mobile at same time ? It's quite handy to have both at the same time.
3. Any plan to make right sidebar (maybe left too) resizable ? I can image a prop with ckeditor could need lots of space for example
Thank you for pointing me to this Elements future functionality.
But I don't understand how it's related to my issue 🤔🙃 ?
If I understood correctly, Elements will be the base of bigger components, like image, button, heading, vidéo...
But how the organization of the props in the generated form of my SDC ( here a slider) is related to those special components.
I'm trying to follow you but I'm lost 😂
By default XB adds a 'None' value to the SELECT OPTIONS, which is great.
But it doesn't seem possible to set this None value as the default value.
What I tried:
- Not to add examples at all
- examples: []
- examples: [NULL]
- examples: ['']
All of them return the same error
Twig\Error\RuntimeError: An exception has been thrown during the rendering of a template ("[linno_theme:select/select] Does not have a value in the enumeration ["ratio-32x9","ratio-21x9"]. The provided value is: ""."). in Twig\Template->yield() (line 1 of themes/custom/linno_theme/components/select/select.twig).