 Hey, thanks everybody for being here. Really excited to be talking with you all about something that I am super passionate about and love spending time talking with folks and working with my team on. We're gonna be talking about layout paragraphs. It's a module on Drupal.org. By the end of this session, you should have everything you need to decide if layout paragraphs is right for your next project. And if you decide it is right for your next project, hopefully everything you need to get started working with it. My name is Justin. It's a little bit about me real quick. I'm the founder and CEO at Atten Design Group. We're a strategy, design, development company. We work with mission-driven organizations all over the world to help plan, design, build, support, maintain, and grow digital platforms, products, websites, web applications. Most of our clients are in the.org.gov and .edu domains. Super excited to be here this week. It's awesome to be back at DrupalCon. We are on the exhibit floor. Come see us. We're at booth 103. We're doing sketchbooks again. The Portland edition looks really cool. So come pick one up. For those of you all who haven't had one of our sketchbooks, we've been doing that for, yeah, there's one. Doing that for a decade or more, which has been fun. We're also giving away an iPad and ear pods for folks who wanna share an email address. Again, really excited to be here. So come hang out. We'd also love to continue the conversation or anything we're talking about today and anything else web and Drupal related. Before I get started, I just wanna talk a little bit about why this subject is so interesting to me and kind of what got us here. I started Atten back in 2000 directly out of college almost 22 years ago. We actually turned 22 in just a couple weeks. So that's a pretty exciting milestone. We've been using Drupal for most of those years since 2006. That's 16 years ago. That was version 4.6. Yeah, seriously. As a lot of y'all know, a ton has changed with the product since way back then. There are three things I wanna touch on that I think haven't changed that are still important today. And just as important, just as big a draw to Drupal today as it were back then. Keep this real quick. The first is just the incredible community, of course, behind Drupal. It is so awesome and just such an honor to still be involved in the Drupal community. Again, 16 years later, it's just as exciting today as it was back then. This community is huge and very diverse and doing very interesting things. And I think it's exactly that that creates this second thing that hasn't changed. And that's that Drupal is really good at doing a lot of different things for a lot of different people. It's incredibly flexible, really capable. And then the third thing that I think hasn't changed about Drupal is that while it's flexible, while it's incredibly powerful, Drupal is still in the end all about content. Drupal's a content management system. For us, this is critical. For our clients, content and mission are often one and the same. For us to help be force multipliers, for our clients and drive their mission forward, we've gotta get the content right. Drupal does a really good job of that. I think in my view, there's an important but really simple reason that Drupal is so good at working with content. That is the structured content model. Structured content according to Wikipedia is described very simply as information or content that is organized in a predictable way. Wikipedia goes on to say often accompanied by metadata, which is what drives this idea of structured content plus metadata is what drives in my view so many of the systems that we work with in Drupal every day. So it makes migrations possible, the views module possible, content types, fields, create once, publish everywhere, headless, decouple applications, all that's driven by this very simple idea of structured content. I think something that has happened along with structured content and when you combine structured content with the sheer flexibility in Drupal, it creates a lot of complexity. And that complexity has spilled into the authoring experience, into the interfaces that authors actually use. And it's created what I think is a bit of an irony that while Drupal is so good at working with content, it can be so difficult for content people to work with Drupal. And that's something that we've been focusing a lot on at my agency. I know a lot of other folks are working on this as well and there's a lot of work, a lot of really interesting work happening in that authoring experience space. But that's the framework that I kind of want to speak from today specifically talking about this module layout paragraphs as a really easy to use drag and drop authoring tool that again works within this framework of structured content. So what we will cover specifically, we'll start real simply with what is layout paragraphs. Just for a quick frame of reference, how many folks here have used layout paragraphs? That's, wow, that's really awesome. Actually, how many folks have used paragraphs? Cool, okay, great. So this will be very applicable. So first, what is layout paragraphs? We'll get into features and kind of what it is, what it does. Second, it is a Drupal module. I want to talk a little bit about current status and adoption, so who's using it and how's it doing? Third, we'll do a quick demo of layout paragraphs right out of the box with the Drupal 9 site that I installed on my local machine last week. It'll be a live demo, I'm sure it'll go great. Y'all don't seem so convinced. Then I'm gonna demo a customized version of layout paragraphs. I'll get into this a little more in a minute, but something that was real important to us is that this framework is really customizable and we'll look at some of those customizations in the setting of our own agency website and kind of take a look at what it looks like to create content there and give you a sense for what's possible. The demo shouldn't take too long, there should be plenty of time for questions and discussion, so really looking forward to answering whatever questions come up. Really quick, some pre-wreck concepts that would be helpful. We've already kind of touched on this a second ago. One, of course, experience using Drupal. We're not gonna get too much into the basics of setting Drupal off, et cetera. Experience with a paragraph module is helpful for some of these concepts. Looks like almost everyone here has worked with a paragraph module, so that's great. Content types and fields, experience configuring and working with those is a plus. And finally, working with users' roles and permissions is helpful, although to be honest, I don't think I'm gonna get much into the user and permissions side of layout paragraphs. All right, let's talk a little bit about what layout paragraphs is. Again, first and foremost, it is a Drupal module, you can just go download it, you can download it right now. It provides a low or no-code drag-and-drop content authoring experience built on top of paragraphs, on top of the paragraphs module. It was very important to us as we started working on this approach and developing layout paragraphs that we did not sacrifice the whole idea of structured content, and it still works within the idea of the structured content model. It does that by leveraging paragraphs, which is essentially a collection of fields that can be attached to an entity. Along with that, we wanted to leverage familiar workflow, configuration with things like fields, field widgets, field formatters, all of these conventions that we're all familiar with in Drupal, we wanted a tool that does not require migrations. I hesitate to say it, but you can just turn it on and it works, I think, we'll see. And then, we wanted something that provides APIs for further improving the authoring experience. We'll get into a little bit of that when I show some of the stuff on our agency site, kind of what that looks like. I'm gonna ask one more question. How many folks here have seen me do a demo of this already? Okay, cool. This is gonna be repeat for a lot of you. Cool, so current status and adoption. I mean, this keeps ticking up. Well, first of all, again, it's a module. Set it like 100 times. Drupal.org slash project slash layout underscore paragraphs. Couple releases. I think the 1x release is still the most widely used in production right now. It just has the biggest user base. 2x is a complete rewrite. We're up to beta nine. There is a stable release eminent. To be honest, I've been saying that for a little while now. Some of that is pinned, we're a client services agency and some of that is pinned to client work for us. And there are a few APIs that we're still kind of tweaking just a little bit as we near launch for some client projects. But in our view, 2x is completely ready for production. It is superior to the 1x branch in many ways. One of them is just automated test coverage. So for 1x, we're relying on bug reports and on incident reports, which have slowed way down. For 2x, virtually all functionality available in the module has automated tests with it that ship every time we push code. All new features ship with new tests. All bug fixes actually ship with new tests. So a lot of really good test coverage, which is definitely a confidence boost. Usage continues to grow. We just bumped up over 3,000 installs according to Drupal.org. These stats are always a little weird but provide definitely a good benchmark for how this has grown over the last year and a half. Really cool to see all the interest in this module. I mean, really awesome to have such a full room today and just see all the interest for this. So really great stuff. Again, available on Drupal.org for download. All right, that's the background. Let's jump into a simple demo. So I'm gonna be talking a lot about case studies. I'm gonna start with some really basic stuff, just like a basic article page. Look at something that we've all seen a hundred times in Drupal. The premise is pretty simple. What if we want to tell the story of some work we did for a client in the form of a case study? Straight out of the box with Drupal, we can do something with an image field, a content field. If I go into the edit form, this is super straightforward. All of this speaks in my mind directly back to the idea that content should be structured. It is designed ahead of time. We can predict the structure of the content. It has a body field, an image field. We could associate tags, title, et cetera. I mean, this, of course, content type, which comes directly out of the box when you install Drupal, is incredibly predictable. Definitely checks that box. Things get a little more interesting, of course, if I want to tell a deeper story about the work that we did with this client. And maybe we want to talk about key challenges that we face in the project, key solutions, maybe add a slideshow, sometimes a good idea, sometimes not, that talks again in a deeper way about how we worked with this client. And one thing I could certainly do is just start adding fields to the interface. I could add key problems, solutions, et cetera. But what happens if, for one project, I want the slideshow to be above key challenges, key solutions, or another project, it's more relevant to use a different set of components. And this is the problem space where paragraphs is really good, where paragraphs really shine. And when we think about content from an atomic design perspective, and maybe we think of these fields as atoms and the whole piece of content as the organism, paragraphs provide this intermediate level of like the molecule where we can build up molecules from these smaller parts. So if I go back to my managed content screen, we're gonna look at a slightly different version, go over to the basic page. And with the basic page, I've just removed the content field and instead put in place a paragraphs reference field, which we'll take a look at here in a second. Now I have a main image, some copy, some more copy about the key challenges, key solutions, a slideshow that I can click through. Obviously all of this would need some custom styling and a lot of CSS work to really tell the story well, but we can certainly see the content components here for a more rich, more interesting case study about the work for this client. You can imagine the whole idea behind layout paragraphs, as we get into this, is to design a system that works for content people, that works for marketers, that works for editorial staff. And for us, that's often telling the story of how we work with clients. For others, it will be other things. It will be other types of, again, more rich articles built up of these components. Okay, so let's take a look at the edit screen. This hopefully is looking at just a paragraphs. So paragraphs just had a new release and they now have the, what was the experimental widget is now stable, which is awesome to see. So if we scroll down through here, what we were just looking at, this is the edit screen for the content and produce the content that we were just looking at. So we can see this image, first block of text, second block of text, third, another image, another image, scroll down the page. If I wanna rearrange these things, I can grab them and drag them up. And it works. It can be a little jumpy, just relying on some of the table drag functionality. I know there are modules that kind of simplify some of these interactions, but that's kind of the idea. Is it again, the content is built up of these components, which is awesome and has been, I mean, the usage for paragraphs is just huge. Everyone, essentially everyone has used work with paragraphs in the Drupal space. Okay, what if though I wanna even, I want even more control over presentation for these components and what if I wanna do something like create a column structure where maybe some of this text is in a left column, some is in a right, quickly move items up and down and further, if I'm in the edit screen, sometimes it can be a little challenging to keep track of where I am in the overall editing experience compared to what's in the front end. And there's some tools around that and paragraphs that again have come a long ways. We can collapse all of these and see kind of an overview, but all of this becomes a little bit challenging and very abstract. It's expecting a lot from content folks. In my view, the interface can come to expect a lot from content folks, especially as the size of the content really grows. That's where layout paragraphs is particularly powerful. It is installed on this site and we'll just take a quick look at how that works. So layout paragraphs again works within some of the typical Drupal constructs, fields, field formatters, field widgets, et cetera. If I go into the structure section, admin structure, go to content types, over to my basic page, manage form display. And with layout paragraphs enabled, I have a field widget called layout paragraphs. Simply switch to layout paragraphs for the field widget. Once you've selected layout paragraphs as your field widget, you need to go over to manage display and also choose layout paragraphs as the display. And that just will correctly render your layouts that you're creating. Go back to the content page. Back to my basic page. Okay, and if we go back to the edit page, we remember what we were looking at just a second ago with the typical paragraphs interface. Now this has been taken over by layout paragraphs. And we can see that when we hit the edit screen, we're seeing more or less exactly in the edit screen what we would see on the view tab. So that that kind of abstract separation between what we're working on and what the end user is seeing is no longer there. We're working directly with the content as it's presented. Each component has a set of controls ranging from drag controls, which does have mouse movements, which are keyboard, which I get into in a second. So drag controls, I can drag this item around up and down to just bump it up and down with the mouse. Edit to drill into and edit the paragraph for the component. Duplicate, which is particularly interesting. I'll do it here, but I'll do it again here in a minute. It's particularly interesting once you have nested items and are working with more complex layouts. And then of course finally delete to delete a component. We can easily drag these items around, but where layout paragraphs is what it's really intended to do of course is combine layout with paragraphs. And for that we have this special dedicated paragraph type called a section that stores the section information. And we'll look at how this works here in a second as well. All you have to do is create a new paragraph type and basically turn it on as a layout paragraph and I'll show exactly how to do that. But if we add a new section, we can choose how many columns we want for our section, choose a three column layout. It's immediately dropped into the interface. I'm gonna grab this paragraph and set it up there and put this one on the left and this one in the center and this one off to the right. And that at least gives you a sense for the flexibility and the control over layout when it comes to working with layout paragraphs. We can continue, of course, we can continue this down the page. This is where that clone option gets a little more interesting also. If I clone an entire section, it clones the children of that section as well. I'll just get that out of there. And that's really very simply what layout paragraphs is. It combines layout with paragraphs and Drupal for much more control and again eliminates that kind of that abstract jump between what the editing experience is versus the view experience. To get this running, all one needs is paragraphs installed and then layout paragraphs installed. And if you install layout paragraphs using Composer, it, of course, will download paragraphs for you as well. Once you have installed layout paragraphs, you will want to create a new paragraph type that is responsible for storing the layout data for your layouts, the section data for your layout. So if I go into paragraph types, I'm gonna take a look at just how that works. I'll start by finding section, so we have the section paragraph. There's nothing unusual about this paragraph type. This did not come with the module. This is a paragraph that I created after the module was installed. You can call it whatever you want. It doesn't have to be called section. You could call it layout. You could call it columns. You can call it container. I mean, really, you could call it whatever you want. Machine name as well, none of that matters. When you create this new paragraph type that you want to serve as the layout container for your project, you would simply come down under behaviors and check layout paragraphs to enable the layout paragraphs behavior. Once the layout paragraphs behavior is enabled, you'll have the ability to choose what layouts you want to support. These layouts are provided with Drupal Core. The layout API in Drupal Core allows you to create your own layouts, associate those layouts with behaviors through layout plugins, adding custom styles, custom form elements, things like that, and of course, attach styles, CSS, JavaScript behavior, et cetera. Folks often ask, is this responsive or how does this work with responsive? How does it work with my breakpoints? That's completely up to the designer of the layout. It's up to the designer and developer of the layout. So that's totally up to the theme or totally up to what ships and core. When we use these two columns, three column, et cetera, the CSS coming from Drupal Core for those layouts is what's applied. That's how to turn it on. I mean, this section paragraph is just another paragraph type. You can add fields if you want. If it made sense in your particular instance to have a section title or any other field, all of that would just work. And then once, actually, once you add fields under the manage field section, or maybe it's the manage display section, which would make more sense, you can rearrange, once you've added fields, you can rearrange where the layout would be rendered relative to the other fields that are on the page. And of course, all that can be managed through APIs as well. Let's take a look at some of the options that come just by default out of layout paragraphs. So if I go back into my, where am I at here, content types and into basic page, manage the form display, take a look at layout paragraphs, there are a few options. One, you can change the view mode that you wanna render paragraphs in the edit screen. So if you had a different, if you had like an edit version, an edit screen version, or preview version, or what have you, or rather view mode for paragraphs, you can select that here, and that way maybe your, the admin version, the edit version has like a label for what the paragraph is, or has some other distinctive piece that's just to that view mode. You can also nest layouts with layout paragraphs. That is, that's a feature that is, I think unique to layout paragraphs when thinking about other layout management systems in Drupal, so we can say, let's support up to two levels deep. You can also choose whether or not you wanna require paragraphs to be added within a section first. So in some contexts, we only want sections to be at the main level, and all paragraphs have gotta go into a section. In other contexts, we don't care. It's, we can use layout paragraphs to manage a flat list, and if they wanna have, you know, a paragraph, a normal paragraph followed by a section, totally fine. We can choose that right here in the interface. I'll check that option just so we can see what that looks like. That does get a little weird when there's already content, as we'll see here in a second. So if I go back to the edit screen, oh, and especially since I didn't save my changes before, now at the main level, I no longer have the option, I no longer have that plus button. I just have the option to add a section because I checked that toggle. When I hit add section, it skips the whole selected component thing, goes right to the section form. Choose how many columns I want, throw, actually I'll just leave that out for now. It does not mess with the existing content, so even though I now say sections are required, the content that wasn't in sections before, not touched. I'm gonna add another section inside this section. This is gonna get a little weird. And then let's do another section inside that section. It's a good idea. It's a good idea. And then, so we're two levels deep, y'all are following, we're two levels deep, and once we get two levels deep, we can't add any more sections because of that setting. We had to have a limit, I guess. Well, it's a dropdown, so it made some set of limits. You can go 10 levels deep. I don't think we've ever gone more than two levels deep. I don't think we've ever gone more than one level deep, actually, but there is that possibility. And again, there's no, with the underlying data model, and with the way this works, there's no reason, there's no technical reason you couldn't. It's really totally up to what is the design of the interface you're trying to create? What's the experience that you're trying to create? And usually that would not be that many levels deep, but we can see kind of what that looks like to then move this text around. All right, one more thing I wanna look at before we get into a more customized version, I think just one more thing. If I go back to structure, let me save this first. A little scared with the back end. Okay, great, so we have, yeah, this now crazy nested structure. One thing that I think is really cool about layout paragraphs, if we go back to our content types basic page and now manage display, as I said earlier, you have to choose layout paragraphs for it to correctly render the display. So once you've put everything into layouts and dragged everything around, I mean, if you're just using layout paragraphs to manage a flat list of paragraphs, there's still some benefits there because just with the drag and drop controls, I think so, depending on the use case. Then I guess rendered entity would work, but if you're using the layout stuff at all, you'd want this to be layout paragraphs, you'd want the format to be layout paragraphs. We also have this layout paragraphs builder, which is an experimental field formatter. If I choose that and hit save, go back to content again. And this really gets to kind of the heart of what we were trying to build is this idea of contextual editing, being able to really easily, so hitting the view tab and then hitting content. And now I'm editing this content the same way I was on the edit screen, but in the front end, on the front end of the site. And that gets really powerful. That means that whatever the theme is that's running the front end of your site is what your users are editing in. Very powerful, also can require a lot of work because now, I mean, I don't know, it's the same for y'all. For us, often in projects, the admin forms are minimally addressed or not addressed at all when we're doing public facing theming. When we're doing custom theme work, we're usually not styling the admin forms. Now we'd want to take that into consideration because when you hit the edit tab, when you're on the front end, you're looking at that in that front end theme. Okay, that is layout paragraphs in a quick nutshell. Let me take actually a look at, let's look, there are a couple of submodules that ship with layout paragraphs that I'll just talk about really briefly. So there's the layout paragraphs library module. That is an integration module that makes layout paragraphs work with the paragraphs library module. I don't know how many folks have used that before, but layout paragraphs library allows you to create reusable paragraphs. So you can create a library of paragraph or a library of components. This creates integration between layout paragraphs and that, so it just works. You'll get like an add to library button across the bottom of your forms. And then layout paragraphs permissions adds some permission levels for saying what roles can do things like move paragraphs around, edit paragraphs, use those controls that are on the, for each paragraph. Something else about the layout paragraphs permissions module for developers in the room, it does also provide a really nice framework for working with permissions. So you can get a sense for how you might create permissions to let some folks do some things and not let other folks do other things. All right, so that's, I think, layout paragraphs. Again, out of the box on a simple D9 site. Let's kick this over to something a little bit more customized. Looks like a lot of folks have seen this demo before. I'm gonna be doing the same thing. We're gonna take a look at a case study again. This is our agency's website. This is a local version of our agency's website. I have been doing this demo in the live version, but I'm not trusting the internet today. So I'm again just gonna use case studies as an example. We'll go over to the admin content screen. Hope that loads. And some loading music. Add new content. We'll start the case study. Give this a title. Talk about some of our work with the city of Boulder. I'm gonna skip. This is just, hopefully, looks somewhat familiar to everyone, just a typical Drupal form. One thing that is nice about layout paragraphs. I mean, because it is just attached to fields and works within the whole field, field format, or field widget paradigm, it works with things like moderation and other features of Drupal. So I'm gonna leave this as an idea, hit save. And then this view tab, again, really speaks to kind of the direction we wanted to see this go and the kind of control that we wanted to provide authors. So now that I've created content, I have the simple message that says you haven't actually added any content. Little confusing to have created content and see you haven't created content yet. This title is completely customizable. It's just the title of the field. And the title of the field is content. So that would be whatever the title is. And it's driven by a template. So if you wanted to change this piece entirely, you certainly can. Start creating content. We are using that setting to restrict what kind of content can be added. You have to start with a section. I'll add a section. We'll start with just a simple one column section. Let's see here. Add Masthead, which is maybe the most complex type of field, really small. Okay, great. Let's see here. Limit this. This interacts with Media Library or integrates with Media Library rather. Grab a couple of images. No, I don't want those two. I want these two hit place. I prefer the order of those like that. Hit save. And it drops that content immediately into the screen. Again, just being a really clear reflection of what we're trying to create. With this version, the customizations that we have added on top of Layout Paragraphs, we have a custom style plugin. And this is actually provided by another Drupal module called Style Options that provides very easy to maintain, a centralized YAML file for maintaining style options across an entire site. So we have this suite of style options, which are essentially CSS and other attribute decorators for HTML tags. I'm gonna change this to light on dark, change the background color, hit save. And again, we immediately see those changes right in front of us in the interface here. We'll add another section. Let's go with three column. I'm gonna bounce over here and copy some text. Again, one of the goals of Layout Paragraphs was to provide APIs for continuing to refine the authoring experience. That's something that we're seeing here with this edit and place capability. This will soon be a module on Drupal.org as well. This is a separate module that works specifically with Layout Paragraphs to provide this editing and place experience, where when you add a text component, it just immediately drops that component into the screen. We'll go grab another paragraph of text here. Go back to our case study, drop that in, go back and add one more. Great, we can see how that's working. Another feature that is unique, as far as I know, to Layout Paragraphs, again, as far as layout management tools are concerned, and Drupal is the ability to change columns once you've added a section, so you don't have to delete your section and start over. You can go back in. If I decide I want this to be a two column, choose two column. The content that is in the third column would be lost or we have to do something with it, so this little interface just says what do you wanna do with that content? And I'm gonna put it in the secondary column. So it's now added that content that used to be out on the right into the second column. Let's see, I'm gonna change just a couple more styles here and then add one more section. I think that'll about wrap it up. Let's do, so another thing that's provided by style options is the ability to choose styles specific to each region. So I'm gonna switch over to the primary region and choose padded for the primary region, give it a background color, and again we can see those changes immediately take effect right here. Add one more section here, do a one column, give this a background color. I should have done that while it was still open. And let's add some text in here. This goes back to our wanting to have this key challenges piece. And then just depending on the project, I mean for some folks it might make sense to have a paragraph type called key challenges. Just depending on how structured you want your content to be, versus how kind of atomic or granular just up to the design, you know each the use case of the particular project. Let's give this an actual list style. Do a little bit of adding here on the screen. Again we have this custom styles library. So if I go into my component now hit styles, choose horizontal list, we can see those changes again immediately take effect. And those are all just custom styles that we've created for this project. And that's attaching CSS that a theme or can decide exactly what is right for their project. I said I was only going to do one more section. I'm going to do one more, I promise that's it. I'm going to do a three column real quick. Oh once again I should have stayed in there. I'm going to change the background color. Blue, light on dark, grab some more text. Pretty bold statement. Then one thing that's really nice working within this framework is that as you're adding these components again you're not seeing an abstracted representation of say a slideshow but you're able to actually view the slideshow as you're building it. So if I grab a handful of images and place them into the interface again it just drops them immediately into the interface. I could go in if I wanted to and as I said before you can change these column structures later. So if I decided that that center column should actually be wider, I'll go to this other version, hit save and that becomes a little wider looking just a little bit nicer. Great. That's most of what I have to show y'all today. Let me just quickly go back to you. I'm going to leave this and not save it. I'm going to take a look just really quick at a fully developed case study and just look at kind of what the workflow is like to hit edit, scroll down the page and again one of the big values in this is an interface without that strong layer of abstraction like the fact that you can see really have a clear representation of what you're working on. So if we hit edit content on a local version. Yeah so as I scroll down the page all of this is just completely editable and really easy to keep track of exactly what I'm doing. You know as I'm making edits it's making Ajax calls to save these into the temp store just kind of underneath how this is working can drag these items around. There are keyboard controls as I said before so if I click on that drag handle I can move this around with the keyboard. That's a huge convenience just for moving components up and down a large screen. It also was built with accessibility in mind and while we're still working on kind of the full a full accessibility review for this module there are tab controls for everything once I get down here so you can see the controls that are highlighted. That one gets chopped off a little funny but let's get down here too. Yeah so and then once I get to the drag handles it says drag or click if I press enter I can now move this item around. Again just showing some drag controls there and again just like a really clear representation in the front end of what you're editing. That is everything I have to demo. I think we've got a few minutes still plenty of time actually for questions. We bounce back to this deck real quick. I should say as I said earlier we are giving away an iPad and AirPods if you guys are into QR codes and want to grab that while we're talking that's great and otherwise that's it as far as what I have to demo and I'd love to hear any questions. Here I saw that's a great question so I think what you're asking is are the permissions controls specific to layout paragraphs is that right and specific to the columns available in layout paragraphs? Yeah yeah yeah great question. Yes there's a few ways to do that. One is there is a underlying API for just working with permissions and again that permission sub module that ships with layout paragraphs would be a great place to start so copy that and just kind of dig into the code there and you can there are not permissions specific to what you're describing but you can certainly build on top of that to enable that in your context that's kind of part one. Part two is you can define different types of sections so we looked at that earlier on like when you create a section paragraph type the only thing that makes that a section paragraph type is that you checked the layout paragraphs behavior so you could have three or four I mean as many as you want different sections manage those with permissions and have each section type mapped to for those section types only enable the layouts you want and that's another way that you could get that control. Also because it works with paragraphs and with fields you can have there's a limit on the number of fields you could have even on a single content type and then manage permissions that way as well we often do like a hero image field still manage with layout paragraphs just for consistency sake but it only allows one component type and then we'll do the content field down below if that makes sense it gives a lot of that control for permissions. Does that answer your question? Great, thanks. Who else? Right here. Great question. So that works with CK Editor 5 or for right now it's a custom module of ours. It's a part of a product called Mercury that we've been working on for a while. It will be released soon. Mercury will be released soon but the components of Mercury will also be released and that's one that just hasn't been released yet and the only reason is it's just not quite ready for public, for broad consumption and broad support but it is running on CK Editor 5 and 4 similar to QuickEdit except that the challenge with QuickEdit is QuickEdit saves the content to the database right then and there. We need to save content to that temp store to the layout paragraphs foundation. So does that make sense? Great. Here, yeah. Yeah, so again kind of a multi-party answer great question something that we are actively working on right now that will probably be a separate module not even a submodule. I feel like it's a different enough that kind of needs its own maintenance trajectory and its own issue queue. There is an API for doing that and that the list of components that we saw there's an event that gets broadcast kind of under the hood what's happening is there's an event that's dispatched you can capture that event or you can listen to that event restrict that list down to whatever you want to. There's APIs, there's rather JavaScript APIs doing the same thing where you can write code that says okay, you cannot drag this kind of paragraph into this kind of container. You would have to write that code. The simplest way to do that without writing code right now would be to have again two different fields where one's collection of layout types and paragraphs is available in one and another is available in the other which isn't, we'll serve some use cases but that restrictions problem is something that we're working on, there will be a module for that soon and there actually is a module for the 1x version if I remember correctly that does just that and to be honest I haven't played much with it I'm not sure how it works. Who else? Down here. Yes, so the trick is that it will use whatever you have set as the backend theme for your site. So if you've done a bunch of customization to the paragraph template for the front of your site and you haven't done any of that and whatever you're using as your admin theme it's going to show that paragraph, that component just using those default styles, the default template from the backend theme. There's a lot of different ways you can customize it you could write a custom module and ship the code in a module you could write a custom admin theme that descends from or that inherits your, uses that your other theme as a base theme there's a few ways around that but no basically when you hit edit on that paragraph you're gonna see the edit form for the paragraph so however complicated it is that's what you're gonna see and then yeah when you hit save and it renders it it'll just render it using whatever template is in the theme you're looking at right there. So that whole problem of trying to pull in other styles or I mean that's just kind of outside of the scope of layout paragraphs, does that make sense? Great, yeah, yep. Yeah, I'm glad you're asking that. I think this is a really important point. No it is just a flat list. So the section is referenced the same way that whatever paragraph precedes it and whatever paragraph comes after it and it's actually like the underlying structure is very flat so you have the paragraph above it then the section would be the next thing referenced the first paragraph in that section would be the next thing referenced the next one would be the next reference if the next one's a section that's the next one in the list and the reason for that I mean the working with nested paragraphs gets one insanely complicated from a editorial perspective and was the whole thing we wanted to get away from that's what we were largely doing and just felt like this is not a drag and drop a real drag and drop experience for our clients but the other piece is the performance piece you know with that's I mean entity references are totally worth it but a little expensive anyways from a performance perspective they're worth it my view goes back to that whole structured content idea once you start nesting entities especially if you're nesting them just to have a layout container just as from you know we really wanted to do away with that yeah great question we use both in a lot of our projects for us this is an editorial tool it's a tool for content editors for editorial staff and for marketers and we use layout builder as more of a site builder tool by designer I mean the design of each is really different too they use some of the same systems so it can be a little complicated to explain but this is managing paragraphs which are typed in a completely different way like it you design the paragraph first you just say you say what fields are available in your paragraph you then say what paragraphs can be attached to the content that you're concerned with the content type whereas layout builder by default is a very powerful drag and drop interface for all blocks in the Drupal system it's a way to access all blocks in the Drupal system and a replacement I mean it's not just this but a replacement for like the blocks admin page not just that by a long shot but we use layout builder in most of our projects we use layout paragraphs in most of our projects also layout paragraphs would take over kind of the content area and we use layout builder for what's around it who was well go yeah please go ahead that's the difference for us yeah and I know there are a lot of folks who have implemented layout builder for their content editors and I mean it can be a very powerful tool for that use case you know this the whole goal for layout paragraphs was to make it easy for content editors to make it easy for people who work with content we wanted something you can turn on now I can drag paragraphs around I can see what I'm working on it's very easy to use layout builder is so powerful there's a lot of complexity that comes with it and you know a lot of the work in implementing layout builder is trying to reign that back in trying to simplify that at least in our experience the short answer is no not right now so working on templates with layout paragraphs is something that is kind of is in the it's next or it's coming soon it will be a separate module and it's you know we're trying to figure that out as well honestly that's something that layout builder is really good at if you guys worked with layout builder like layout builder you can take over a node screen say where everything goes and then you can break out of that on a case by case basis layout paragraphs is much more for free form content that varies widely from one or you know might vary widely from one section to the next or doesn't need those kind of pre-built templated components I mean we sometimes use like the replicate module to just to clone something and that's kind of a a simple approach to templating and I think when we do get to templates there'll be something like that you where there's like a exactly under the hood that's what it'll be which is a very different model than layout builder yeah great over here it inherits everything so we made the decision to support for better or worse synchronous and asynchronous translation so you can there are a couple different ways that can be configured one is that it makes a complete copy of everything and you can only translate each individual paragraph the other would be you know for each language you basically get a different version of that content and you can completely customize it to that language we a lot of our clients translation is a big deal and it seemed important to support both so great yeah yeah great question pretty well yeah yeah so we use a block reference field from a paragraph and so we'll create like a web form expose it as a block I mean there's a few whoopsie jump through just like Drupal but we'll create a web form expose it as a block do a block reference field and then drag that around there was a problem for a little while one thing that's really tricky is when you render a form in Drupal it wants to run that form as a form with all the like form submit you know all the behavior attached to that form so there was there's a weird work around there was a weird work around in the module to make to kind of strip all that out of the form so it works great um if you run the issues though open something in the issue queue please who else I know yeah oh that's a great question again I think well so it uses paragraphs which works with the search API well so cert the content that is sent to the search API would include the paragraphs content and you should be able to tune that the same way you turn any other content within Drupal scoring the various like paragraph types fields et cetera you can say um it's been a little while since I worked with the search API but you should be able to say what of those paragraphs is sent with the containing node to the search API to be indexed so that's that's again why we wanted to create something that you know worked well with existing systems and yet at the end of the day this is just it just creates like a visual layer on top of something that already exists rather than creating a whole different API or subsystem great question oh that's a great question too you get information from so we actually just started a project where we're doing this there are other folks it's been really fun to be involved in this and kind of see where other people are taking it I know there are other folks in the community um who have already tackled this problem um or or you know been working on this challenge the paragraphs so it's just used the storage is in the paragraph behavior it's stored as serialized array structures basically yeah serialized object no I guess it's an array structure that will come out as a field in the json API and then you can structure that however you want to so that ships you know the information at the paragraph level the pair a paragraph will say which paragraph is its parent via the its uuid um and what region it belongs to in that parent so you can parse that however you want to in your you know headless app and uh present the content however you want I don't think so but tell me a little bit more in what way oh great question yeah so yeah there's a couple ways you can handle it um one I mean the short answer is no I have not run into a problem with that there are a couple ways I've gone about solving that kind of thing um one would be and actually I'm not sure so one would be to just make sure that you have sufficient fields or metadata really just fields associated with your content to drive that view so even though I'm building most of the you know the the view tab the what the client what the end user actually sees our experience with the content I also have fields for primary image or for you know teaser image for title for description of the project which is used to drive something like this which will be more traditional view although I think we're actually using layout paragraphs to move these items around but they are teasers that we're moving around that ever loads so yeah so this is a teaser of this case study and that's just using typical even though it's in the context of this layout paragraph thing but that's just using a you know main image feels like you don't like you always would in Drupal if that makes sense the other thing we could have done and we talked about doing is using that massed head paragraph rendering that massed head paragraph from our case study so if I click into this that's not gonna let me because it thinks I want to edit text but there's that for us our case studies always start with this massed head thing and we could have just rendered that in teasers which would have worked pretty well too so you know one thing we often we've standardized on a bunch of stuff in Drupal as I'm sure everybody here has and one thing we still talk about all the time there's like a hundred right ways to do the same thing sometimes a hundred wrong ways I think we are just about out of time okay so here's that massed head component I was talking about and we could have chosen to show those as the teaser if we wanted to and again it just worked like because it's just paragraph content you can you have a lot of flexible flexibility with how you set it up I think we got time for one more yeah let's see how fast this edit screen comes up if I can show you real quick we have solved that just with a custom style option back to that module I was talking about that that's happening in a custom layout api plugin and we have right here column stacking left to right or right to left which is the rule that we've set up for in this context that says do we want this to collapse with the left coming first or with the right coming first I think that's what you're asking is that correct and that's just that's in the the layout plugin style options which which is another module on Drupal.org makes that easier but that would need to be like a custom layout plugin. Hey thanks everybody for your time and I'd love to talk more about this if anybody wants to come find me after thanks