Purpose
- Save content created using the Experience Builder
- Manage Block Layout using Experience Builder
Target date
February 27, 2025
Not included
- Backwards compatibility, migration
- Content type templates, using fields as prop values
- Workspaces, revisions
Legend
- ✅ Done.
- 🚫 Deprioritized.
- 🟢 High confidence.
- 🟡 Medium confidence.
- 🔴 Low confidence.
- 🔵 Known to be needed eventually, but explicitly out-of-scope, to be tackled in the future.
Requirements
Jump to:
- 6. Save (draft) content
- 19. Modify the page template (i.e. global regions)
- 23. Component creation via code editor
- 5. Place blocks as components
- 29. Layout patterns
- 2.1. Content editing of meta fields
- Miscellaneous high priority fixes
✅ 6. Save (draft) content
For 0.3.0, no Workspaces integration (or any handling of forward revisions), only auto-saved states (which aren't revisions) and a "Publish All" button to transfer the auto-saved state of every entity with valid auto-saved changes into real entity saves:
⮑ ✅ MUST-HAVE Back-end foundations:
- Auto-save: #3478299: Implement basic auto-save
- Publish: #3478565: Add Entity Update controller
- #3488368: Also convert metadata (page data) fields in ClientDataToEntityConverter
- #3489994: Create an endpoint to publish all auto-saved entities
- #3489743: Create AutoSave service and HTTP API to retrieve all entities with pending changes
- #3499791: Errors returned from the publish all endpoint should include the autosave key in the meta
- #3498227: Cannot save (Publish) page with just Druplicon component on it
⮑ ✅ MUST-HAVE Front-end foundations:
⮑ ✅ MUST-HAVE End-to-end:
- #3487484: Save page data form values in application state with support for undo/redo
- #3495752: Send page data to Drupal for storage in auto-save store
⮑ 🟡 SHOULD-HAVE Polish away rough edges, improve long-term API stability/minimize technical debt:
- ⭐️ "validation error support" ⚠️ issue to be created ⚠️ — likely is blocked on some of the SHOULD-HAVEs below, details tBD.
- #3467954: META: Evolve XB UI's data model to allow non-SDC components' inputs, DynamicPropSource support, etc.
child issues- #3493941: Maintain a per-component set of prop expressions/sources
- #3493943: SDC+JS Component Sources: split default values into `resolved` and `source`
- #3499550: Support server-side massaging and validating of ComponentInputsForm values
- #3499554: Move client-side assumptions about prop form data shape into a series of prop-specific transforms
- #3499632: Remove `ClientServerConversionTrait` (C→S) and `ComponentTreeItemList::getClientSideRepresentation()` (S→C) in favor of (de)normalizers
- #3487284: [META] Add explicit end-to-end test coverage for using all core field widgets including multiple cardinalities in the "Page Data" (content entity) form
- #3503404: [Needs design] Polish flow for Publish all changes" when receiving conflict errors in response
⮑ 🔵 NICE-TO-HAVE Polish for later phase.
- #3495598: [PP-1] Don't store page template model data in auto-save for an entity
- #3489772: [PP-1] Add a param converter and DTO for XB data model
After 0.3.0, we'll work on Workspaces integration. The requirements and approach for that are being discussed in #3475672: Research: Possible backend implementations of auto-save, drafts, and publishing
✅ 19. Modify the page template (i.e. global regions)
⮑ 🟢 MUST-HAVE Back-end foundations:
- #3478537: Introduce an XB `PageTemplate` config entity
- #3479982: HTTP API to read+write PageTemplate and Pattern config entities
- #3492669: Use PageTemplate status flag to enable per-theme page templates
- #3489302: Preview entire page not just content area
- Late discovery, to facilitate
6. Save (draft) content: #3501600: Split 1 PageTemplate config entity into N PageRegion config entities
⮑ ✅ MUST-HAVE Front-end foundations:
- #3491013: Rework layout API to separate components and slots
- #3489106: Show page information in top bar
- #3497648: Focus mode for global regions, semi-blocked on #3489106: Show page information in top bar
⮑ ✅ MUST-HAVE End-to-end:
⮑ 🟢 SHOULD-HAVE Polish away rough edges, to match expected UX or improve long-term API stability/minimize technical debt:
- #3497747: Global regions containing only "dynamically missing blocks" (due to emptiness or access) cause malformed pages
- #3497744: If an autosave entry exists before enabling global regions for a theme, theme regions cannot be seen
- #3498248: PageTemplate: allow configuring which regions are exposed
- #3498747: Right-click menu for moving components between global regions
- #3499430: PageTemplate config entity no longer needs to be HTTP API-eligible
- #3502765: Global region focus spotlight may not match the actual region size in all cases
- ⭐️ #3502764: Non-empty global regions need to be highlighted when hovering with the green color
⮑ 🔵 NICE-TO-HAVE Polish for later phase.
- #3498815: Layers panel should not show Regions that are empty
- #3497990: [later phase] Support Block's PreviewAwarePluginInterface (and similar for other component sources)
- #3502766: [PP-1] Drag and drop in Layers is difficult to drop into bottom position Assigned to: parthbcharya
- #3502767: [PP-1] Drag and drop in Layers flickers when trying to drop into an empty slot
- #3502768: Dropping a component outside of the focused region breaks the preview
✅ 23. Component creation via code editor
⮑ 🟢 Proof of concept: #3483267: [exploratory] PoC of Preact+Tailwind components editable via CodeMirror Assigned to: balintbrews
⮑ Meta/plan: #3499919: [Meta] Plan for in-browser code components
(must-have/should-have/nice-to-have breakdown to still be figured out.)
✅ 5. Place blocks as components
⮑ 🟢 MUST-HAVE Back-end foundations:
- #3468112: Document the current component discovery + SDC criteria + `Component` config entity, and describe in an ADR
- #3469609: Prepare for multiple component types: ComponentTreeStructure should contain Component config entity IDs, not SDC IDs
- #3475584: Add support for Blocks as Components
- #3459088: Every XB `Component` config entity should have a `category` property
- #3474533: ComponentPluginManager must implement CategorizingPluginManagerInterface
- #3482393: HTTP API: update /xb-components to specify each `Component`'s `source`
- #3485917: `ComponentTreeMeetRequirements` constraint validator must be updated now that Blocks-as-Components are supported + make PageTemplate render main content!
- #3500997: Move SDC-specific validation in ValidComponentTreeConstraintValidator and ComponentTreeMeetsRequirementsConstraintValidator into the SDC source plugin
- #3498419: Assign each Component to a logical "UI library" during normalization
⮑ 🟢 MUST-HAVE Front-end foundations:
⮑ ✅ MUST-HAVE End-to-end:
- #3482529: Refactor XB internals to not assume /xb-components HTTP API returns only SDC-powered XB Components
- #3484666: Show configuration forms for Block components
- #3491978: Implement saving block settings forms
⮑ 🟡 SHOULD-HAVE Polish away rough edges, to match expected UX or improve long-term API stability/minimize technical debt:
- #3501708: Prove that it *will* be possible to apply block settings update paths (assuming #3521221 in core) to stored XB component trees in config/content
- #3500994: Remove references to 'props' outside of SDC - use 'inputs' instead
- #3501290: Introduce unit test coverage for both ComponentSource plugins (Block + SDC)
- #3484678: Simplify ComponentSourceInterface::getClientSideInfo(), introduce ClientSideRepresentation value object, and leverage it
- #3491032: Cannot enable block component once it has been disabled Assigned to: anjali rathod
- #3484682: Handle update and delete of Block `Component`s, plus react to dependency removal
- #3473275: Support disabled Block Components + multiple reasons for incompatibility
- #3473289: XB Component config entity's `status` may only be `true` if it meets all of XB's requirements
- #3500997: Move SDC-specific validation in ValidComponentTreeConstraintValidator and ComponentTreeMeetsRequirementsConstraintValidator into the SDC source plugin
⮑ 🔵 NICE-TO-HAVE Polish for later phase.
- #3485502: [needs design] Handle block contexts (aka implicit inputs vs `settings` aka explicit inputs)
- #3500795: [PP-1] Implement client-side validation of block settings
- #3484673: Remove ComponentSourceInterface::getDependencies() and Component::calculateDependencies()
- #3501671: Decouple component UUID from clientModelToInput and validateComponentInput
✅ 29. Layout patterns (i.e. sections)
⮑ ✅ MUST-HAVE Back-end foundations:
- #3479643: Introduce a `Pattern` config entity
- #3479982: HTTP API to read+write PageTemplate and Pattern config entities
- #3492312: Provide a utility method to convert client layout and model to server tree and props
⮑ ✅ MUST-HAVE Front-end foundations:
⮑ ✅ End-to-end
⮑ 🔵 NICE-TO-HAVE Polish for later phase.
- TBD
✅ 2.1. Content editing of meta fields
Drupal doesn't currently distinguish metadata fields (fields like title and URL alias) from non-metadata fields. #3463991: [RESEARCH] How to identify all meta fields for an arbitrary content entity? has some discussion about this.
For 0.3.0, we'll sidestep this by only supporting the Page entity type, not Node. We'll consider all fields for Page to be metadata fields.
After 0.3.0, we'll support nodes, and editing both metadata fields and non-metadata fields, so we might not need the distinction between the two, unless the UX designs (which aren't done yet) requires them to be distinguished.
This means that for 0.3.0, the remaining work is:
⮑ 🟡 Using Page instead of Node: #3487070: [META] Pages
⮑ ✅ Show the page title in the top bar which also allows opening a page navigator: #3489106: Show page information in top bar
⮑ ✅ Allow creating new pages without going to the entity edit form: #3500046: Provide HTTP API to create a new Page content entity
⮑ ✅ Provide a good user experience for authoring meta tags for pages: #3497000: SEO settings for Pages — show form, not yet saveable
⮑ ✅ Allow replacing the page title without running into bugs: #3498485: 'false' appears in Page Title when deleting all characters
⮑ ✅ Allow navigating between pages without leaving Experience Builder: #3500056: [PP-1] Open navigation modal by clicking on page title in XB navigation
⮑ ✅ Integrating the PageData form with Redux: #3487484: Save page data form values in application state with support for undo/redo
⮑ ✅ Including the field data with Save functionality (autosave and publish): #3488368: Also convert metadata (page data) fields in ClientDataToEntityConverter
✅ Miscellaneous high priority issues
- ✅ #3471978: Make the Media Library dialog look like the admin theme without materially affecting anything outside of the dialog (possibly use an iframe for CSS isolation)
- ✅ #3489107: Create back link in XB
- ✅ #3501902: Adding the Image component results in a state considered invalid
Prioritized list of most impactful issues
- #3506108: Editing code components as overrides, step 1
- #3509494: The sorting logic works only when elements are listed vertically
- #3509497: Dragging components within a slot breaks drag and drop
- #3509357: Working with grids with slots is difficult due to missing Astro CSS
- #3507929: Allow adding "image" props in the code component editor
- #3509186: Code components: optional properties should not require examples
- #3508975: Preview-on-hover in Component Library not loading for code components
- #3508978: Listed item for a component loses interactivity after it's added to canvas
- #3509483: Don't show the component preview if the context menu is open
- #3509270: Status badge and "Review changes" only update after ~10 seconds
- #3509509: When adding single hero component Auto-save shows a change when there is not one
- #3508077: Default image for SDC with optional image is lost after changing value for another SDC prop
- #3506467: Make Media Library widget work from "page data" (content entity form)
- #3508170: Image in preview persists after clicking "Remove" in MediaLibraryWidget
Comments
Comment #2
wim leersThis builds on top of #3454094: Milestone 0.1.0: Experience Builder Demo, so marking this . That doesn't mean we're not working on this already: work is already happening and being coordinated in #3450586: [META] Back-end Kanban issue tracker — with some of the issues in there being necessary for #3454094: Milestone 0.1.0: Experience Builder Demo.
(If there wasn't a hard DrupalCon Barcelona deadline, #3454094: Milestone 0.1.0: Experience Builder Demo and this milestone/issue would probably be one and the same.)
Comment #3
lauriiiComment #4
wim leers#3454094: Milestone 0.1.0: Experience Builder Demo is nearly done. DrupalCon Barcelona 2024 is in a few days.
Time to get this fleshed out!
Comment #5
wim leersAlso: do we want to keep using #3450592: [META] Front-end Kanban issue tracker + #3450586: [META] Back-end Kanban issue tracker?
Comment #6
wim leersComment #7
lauriiiComment #8
lauriiiComment #9
lauriiiComment #10
lauriiiComment #11
lauriiiComment #12
wim leersSome markup changes to improve clarity/scannability.
Comment #13
wim leersComment #14
wim leersInitial issue for product requirement
19. Modify the page templatecreated: #3478537: Introduce an XB `PageTemplate` config entity.Comment #15
wim leersComment #16
kristen polLet me know if you want/need anything in SDDS for this next milestone as well as for DrupalCon Singapore.
Comment #17
lauriiiComment #18
wim leersComment #19
wim leersOverhaul of the meta to reflect which of the 10 requirements are actionable, and to what extent. 9 of the 10 cannot begin UI+UX (aka client side) work due to designs not being ready.
Comment #20
wim leersUpdated the status for and .
Comment #21
wim leers#3479982: HTTP API to read+write PageTemplate and Pattern config entities landed!
For
2.1. Content editing of meta fields, a new issue was identified as blocking the0.2milestone: #3463991: [RESEARCH] How to identify all meta fields for an arbitrary content entity?.Comment #22
wim leersFinished adding 🟢, 🟡 or 🔴 to every ⮑.
Also clarified why the two stretch goals are pretty firmly out of reach already at this stage.
Comment #23
wim leersComment #24
effulgentsia commentedRemoved the stretch goals from the list. We're not currently working on them so there's no realistic plan of them getting done by early January.
Comment #25
effulgentsia commentedAlso descoped (with confirmation from @lauriii) revisions and Workspaces from 0.2.0.
Comment #26
effulgentsia commentedComment #27
effulgentsia commentedThe Purpose and Expected result sections are incomplete. They don't capture the entirety of the remaining items that are in the Requirements section. When I find a bit of time, I'll fill in those sections so that they add clarity as to what the overarching goal of the 0.2.0 milestone is.
Comment #28
effulgentsia commentedUpdated the proof-of-concept issue for the component code editor from #3475363: [exploratory] PoC of Astro island components editable via StackBlitz to #3483267: [exploratory] PoC of Preact+Tailwind components editable via CodeMirror.
Comment #29
effulgentsia commentedI updated the "Content editing of meta fields" section with 0.2.0 scope vs 0.3.0 scope.
Comment #30
effulgentsia commentedI'm retitling this issue from 0.2.0 to 0.3.0, and changing its target date from mid January to late February.
In the meantime, we'll release a 0.2.0 on or before Jan. 13, so that the Drupal CMS 1.0 release on Jan. 15 can reference a tagged release of XB. I'll open a separate issue for that; it won't include all of the scope of this one.
Comment #31
effulgentsia commentedHere's the one for 0.2.0: #3497543: Milestone 0.2.0: the one for Drupal CMS 1.1
Comment #32
wim leersUpdated the
19. Modify the page template(i.e. global sections) requirement. It's working, but there's 3 currently known rough edges:Comment #33
tedbowre "Save (draft) content:"
we already have
but I guessing what we want for 0.3.0 is the "Publish all" and we will remove the individual entity save button.
@effulgentsia if that is correct I will add the issues that get use to "Publish all" to the summary
Comment #34
wim leers4th rough edge for #32.
Comment #35
effulgentsia commentedCorrect. I updated the corresponding text in the IS, but yeah, if you could update the corresponding issue list, that would help a lot, thanks!
Comment #36
effulgentsia commentedI updated the IS to change other occurrences of 0.2.0 in the summary to 0.3.0.
Comment #37
effulgentsia commentedWith drupal.org's CSS, I'm finding the nested list hard to read. So I updated the IS to use
<h3>headings for each high level capability instead.Comment #38
wim leers@effulgentsia Did you intentionally delete
in #37?
Comment #39
effulgentsia commentedI did, because I thought it wasn't time yet to be tracking general "fix broken stuff" issues here yet. But I just now restored it under a new "Miscellaneous high priority fixes" heading.
Comment #40
wim leersUpdated the
29. Layout patterns(i.e. sections) requirement.(And also updated
19. Modify the page template's issue list — lots of activity over there this week.)Comment #41
wim leersOne more for
19. Modify the page template, that was created a few hours ago!Comment #42
wim leersAdd anchors to facilitate deeplinking.
Comment #43
jessebaker commentedComment #44
effulgentsia commentedNot wanting to take the time right now to figure out how to best organize these within the issue summary, but the following issues are still needed as part of "Place Blocks as Components":
I wonder if we should turn each of the top-level requirements, such as "Place Blocks as Components", into their own Plan issue, so that we can make those the parent of the above issues and similar individual issues for the other top-level requirements.
Comment #45
wim leers-1 — too much overhead and issue queue noise. I'd rather have a single issue with >200 updates than having to monitor half a dozen issues, each of which causes actual MR issues to be somewhat obscured.
Updated 5. Place blocks as components — included everything @effulgentsia listed in #44 and expanded.
Comment #46
wim leersComment #47
wim leers#3486203: Integrate saving sections with the backend: (de)normalize Pattern config entities using the client-side data model just landed, which means
29. Layout patternsis AFAICT the first requirement to be completely done! 🥳Comment #48
tedbowAdded issue for the "Save (draft) content" section. I am still looking for more issues to add
Comment #49
effulgentsia commentedIn addition to #3495752: Send page data to Drupal for storage in auto-save store being under the "Save (draft) content" requirement, it's also the last remaining item for "Content editing of meta fields", so landing it would give us another nice green checkmark in front of a top-level requirement.
#3487070: [META] Pages is still listed in the IS under "Content editing of meta fields" but the remaining children of that are being tracked separately under that meta and don't need to block this issue.
Comment #50
tedbowFinished going through issue queue for 6. Save (draft) content section
I think we are close but we mind unknown issues once #3497530: Implement the "Publish All" button is completed as they will allow use to do the whole process. For this to include entity fields we will need the 2.1. Content editing of meta fields section to be done too
As far as know is #3467954: META: Evolve XB UI's data model to allow non-SDC components' inputs, DynamicPropSource support, etc. isn't required for 0.3.0
Comment #51
effulgentsia commentedYeah, that issue and its children should be moved in the IS from the "save content" requirement to the "blocks" requirement. It's possible that the entirety of that isn't required for 0.3.0, but the parts that are blocking #3491978: Implement saving block settings forms are.
Comment #52
wim leersThanks, @tedbow! Updated that
6. Save (draft) sectionsection to follow the same structure as the others (BE/FE/E2E/Polish). Some were miscategorized. Some icons were off. But I kept the same set of issues.Thanks, that really helped!
Comment #53
wim leersAnd now adding + removing issues to that same section.
Added:
Removed (given my understanding of Lauri's original product requirements, but I was not in every meeting while working at limited capacity during paternity leave, so correct me if I'm wrong 🙏):
Comment #54
wim leersMoved #3495598: [PP-1] Don't store page template model data in auto-save for an entity to for "Save (draft) content", and added a placeholder for the missing validation error support.
Also marked both "Save (draft) content" and "Modify the page template (i.e. global regions)" as 🟢 — but not yet ✅: I have high confidence we'll be able to wrap those up given the current status + pace + outlook, but they're not yet done.
Comment #55
wim leersFixed formatting and added jumplinks.
Comment #56
wim leersComment #57
tedbow@Wim Leers re #54 ok. yeah I reread the issue in #3495598: [PP-1] Don't store page template model data in auto-save for an entity. I missed this part
I thought there would be conflict in "Publish All" phase because each entity could have its own copy of the global regions that could conflict. Now I see it is just extra data we don't actually use. So +1 on moving it to "Polish" section
Comment #58
wim leersIntroducing an explicit to allow identifying which things are known to be needed in the future, but explicitly omitted from the
0.3scope.Comment #59
wim leersDiscussing this with @effulgentsia and @lauriii. To enable @lauriii to specify which polish he considers necessary for meeting the product requirements, I need to:
This update to the issue summary only does the first bit.
Comment #60
wim leers#59.2 — pass 1 of N.
Comment #61
wim leers#59.2 — pass 2 of N.
Comment #62
wim leers#59.2 — pass 3 of 3.
Still outstanding:
6. Save (draft) contentwith those of5. Place blocks as components— both are impacted by/need changes to the data model. I still need to dig deeper to be able to articulate which falls in which bucket.23. Component creation via code editor: actual implementation work has only truly begun last week. See the plan at #3499919: [Meta] Plan for in-browser code components, which @balintbrews crafted. Pinged him to ask about must-have/should-have/nice-to-have breakdown, because that meta doesn't currently specify.2.1. Content editing of meta fieldsneeds clarification from @effulgentsia on whether it's essentially done by virtue of having thePagecontent entity type plus a working6. Save (draft) content. (I was on paternity leave and working limited capacity, I was in none of the meetings.)At this time, there's nothing more I can do. Hopefully updates on the remaining pieces in the next 24 hours.
Ready for @lauriii:
19. Modify the page template (i.e. global regions)5. Place blocks as components29. Layout patternsComment #63
lauriiiIncreasing the priority for following issues:
Added following issues to the list:
Comment #64
wim leersYou didn't actually — you only added those new issues. Made it so!
Comment #65
wim leersI'm surprised #3500390: The pending changes API endpoint should list individual regions for global template changes isn't on here (for
6. Save (draft) content).But AFAICT #3501600: Split 1 PageTemplate config entity into N PageRegion config entities is now likely to be the successor to that, but it'd fall under
19. Modify the page template (i.e. global regions). Tentatively adding it to "should-have", but I have a hunch that even though unplanned, @lauriii would now in hindsight mark this as "must-have" — so added it there.Comment #66
wim leersAdding #3491978: Implement saving block settings forms.
Comment #67
lauriiiAdding #3501902: Adding the Image component results in a state considered invalid since it's a critical bug.
Comment #68
jessebaker commentedAdding follow up issues from Global Regions MR
Comment #69
jessebaker commentedAdded #3503404: [Needs design] Polish flow for Publish all changes" when receiving conflict errors in response to SHOULD-HAVE for 6. Save (draft) content
Comment #70
wim leersPer meeting with @lauriii, @effulgentsia, Prafful and @jessebaker: some must-haves have been shifted to should-haves. Those are marked with a ⭐️.
Comment #71
wim leersComment #72
wim leersLots has happened. Update some status emojis.
Comment #73
effulgentsia commentedPer #3497543-40: Milestone 0.2.0: the one for Drupal CMS 1.1, we ended up not tagging a 0.2.0 release for inclusion in Drupal CMS. Therefore, this issue can go back to using that number.
We expect to tag the 0.2.0 release by the end of the week (which is also the end of the month), assuming we can wrap up these issues by then.
Comment #74
lauriiiComment #75
lauriiiComment #76
wim leersAll #3499919: [Meta] Plan for in-browser code components must-haves are done! 🤯🥳
Plus, the long-standing #3498419: Assign each Component to a logical "UI library" during normalization finally landed too, which empowers a much nicer UX for landing
All must-haves listed in this meta are done now, so marked each of the 7 requirements as ✅.
Comment #77
effulgentsia commentedComment #78
wim leersComment #79
lauriiiAdding:
Comment #80
lauriiiComment #81
lauriiiComment #82
wim leersIt's live: https://www.drupal.org/project/experience_builder/releases/0.2.0-alpha1
Comment #84
effulgentsia commentedI started writing up #3515932: Milestone 1.0.0-beta1: Enable creation of non-throwaway sites. Note that that summary is very much a work in progress. Half the issues there probably don't really need to block a beta and possibly 80% of the stuff that we do want to get into the beta milestone isn't yet on that list. But hey, it's a start. Hopefully it will start resembling a proper roadmap within the next few weeks.