Problem/Motivation
Followup of #3023802: Show media add form directly on media type tab in media library
Lauri found a few major UX problems with that patch (#3023802-21: Show media add form directly on media type tab in media library):
- Media entities selected prior to uploading new media file are lost. I would have expected those to remain attached.
- I found the second step of the upload confusing; I wasn't sure if the file was already saved or not. This was relevant because I accidentally first uploaded a wrong file. I'm wondering also if the text on the submit button should be changed from "Save" to something like "Save and attach" to be more clear of the action.
- There's no way to cancel upload without losing selected files in the media listing. This is again relevant because I uploaded a wrong file, and the only way to restart the process was to close the dialog.
Proposed resolution
- Point 1 and 2 should be addressed in this issue by adding a second button the metadata screen, which will give the user two options:
"Save and select" and "Save and insert" - We will add an area to the metadata screen which will display small thumbnails of all the items you have already selected from the library. This is important from both an accessibility and usability perspective. @ckrina has promised to create a design for this area.
- Point 3 will be addressed by #3023801: Allow newly uploaded files to be deleted from the media library without saving them
Remaining tasks
User interface changes
Video of the changes in #15: https://www.drupal.org/files/issues/2019-02-18/media-library-save-insert...
Current screenshots as of #77:
Button changed to 'Insert selected' in media library, instead of 'Select media'
Renamed 'Save' button in second step to 'Save and select' (returning to the media library) and added a 'Save and insert' button to directly insert the items in the widget. Added the button_type 'primary' for the primary user flow, to make it easier for new users to follow the recommended path.
Just adding new files:
Adding new files, along with some already existing ones selected (details collapsed by default):
And expanded:
API changes
Data model changes
Release notes snippet
Comment | File | Size | Author |
---|---|---|---|
#83 | 3023797-83.patch | 65.27 KB | seanB |
#83 | interdiff-80-83.txt | 1.2 KB | seanB |
#81 | 3023797-80.patch | 65.26 KB | seanB |
#81 | interdiff-76-80.txt | 1.81 KB | seanB |
#77 | MediaLibrary-NewPlusExistingFilesExpanded.png | 509.7 KB | webchick |
Comments
Comment #2
seanBAttached is a full patch built on top of #3023802-4: Show media add form directly on media type tab in media library (which is built on #3020707: Streamline buttons in the media library widget and #3020716: Add vertical tabs style menu to media library).
Also a patch with just the changes for this issue.
Obviously, this is blocked on the other issues for now.
Comment #4
Berdirmaking it configurable seems like a good idea.
> You need extra clicks to upload new and reuse existing items at the same time
Seems like a < 10% (or less ;) use case to need a mix of existing and new media on the same field at the same time?
Comment #5
seanBA bunch of things have been changed in the issues we are building on top of. Rerolled based on #3020716-64: Add vertical tabs style menu to media library and #3023802-10: Show media add form directly on media type tab in media library.
Too much changed for an interdiff and no reviews yet anyway.
Comment #7
dwwAdding #3009114: [Regression] Editing a media entity now always redirects you to a media overview list as related. I'm maintaining a site where the editors use the canonical view of media entities, and I've had to work-around the change that always forces them back to the media library after every edit. Please continue to consider this use case as you make changes / assumptions about how all this should work.
I know *this* issue is about "add" not "edit", and I'm okay with add forcing you back to the library (in their world, they add via an entity browser and IEF, so they never would hit this), but still...
Thanks,
-Derek
Comment #8
seanBThanks @dww.
This is indeed specifically about adding media, and also more specifically about the media library widget for entity reference fields. We have discussed this while designing the new media library and we all came to the conclusion that untrained/inexperienced users benefit from actually seeing the created media items being added to the library.
That being said, trained site editors that spend a lot of time adding new media items would benefit from an optimised workflow, so I really think it is important that site builders can change this if needed.
Comment #9
seanBThis should fix the tests.
Comment #10
seanBCopying this over from #3023802-21: Show media add form directly on media type tab in media library
The patch in this issue should make sure that selected items stay selected when adding new media.
Comment #11
phenaproximaAt @lauriii's behest, I need to cross-update this issue with some feedback discovered in #3023802-21: Show media add form directly on media type tab in media library, which was deferred to this issue to be actually solved.
Lauri found a few major UX problems with that patch:
@seanB replied in #3023802-22: Show media add form directly on media type tab in media library to say that all of those issues will (probably) be addressed by this issue. But I raise it here so that, whatever solution we come up with here, we remember to test all of these cases.
Comment #12
phenaproximaAs per #3023802-28: Show media add form directly on media type tab in media library, this is now a follow-up for that issue based on feedback from the UX team.
Once it's in, this issue will:
Kicking this back for designs.
Comment #13
seanBUpdated the IS and added a video an screenshots of the progress. Here is a first patch to implement to updated buttons. Will work on remembering the selection next.
Comment #14
seanBComment #15
seanB#3023802: Show media add form directly on media type tab in media library landed! Yay!
Here is a new patch implementing persistent selection when uploading, and an area to show the selected items below the new ones. Also updating the screenshots and video in the IS.
Comment #16
ckrinaSorry it took me longer than expected! I've been giving a thought to the current proposed solution with the selected items below in a grid and it's a really good and unobstructive way to solve it, so I don't think more design efforts to find something completely different are needed.
- But the items on the grid look huge and take a lot of space. Would it be possible to make them smaller? It's a problem for longer names, thought. But maybe the hover info and the possibility to review selection ("Save and select" button) would be enough to compensate?
- I feel the difference between the text for the 2 buttons is not big enough. I know it's too long, but I would expect to be able to deduce from the primary one that I'll "Save and select more items" or I'll "Save and go back to library" or I'll "Save and modify selection".
- Also, would it be possible/make sense to add a hover or active background when you're editing an item?
Comment #17
seanBWe discussed this patch in the UX call today. The general feedback was very positive. The following this were agreed upon:
Attached is a patch to make the selected items smaller for the selection shown in the media add form. Updated the screenshot in the IS.
Comment #18
phenaproximaFiled the follow-up issues:
Comment #20
seanBThat was a testbot issue, patch is green. Back to needs review.
Comment #21
phenaproximaI wonder why we wouldn't just reduce this selector to
.media-library-item__name a
?Should these maybe be max-width and max-height?
I think these should both be added to the main click-to-select behavior, if it can be done generically, rather than be implemented as additional behaviors.
These can be combined into a single line. Also, I don't understand why we're using the same class name twice, just prefixed with 'js-' the second time. That could maybe use a comment.
I think this should be renamed buildCurrentSelectionArea().
I think we should pass the array of loaded media items into this method directly, as the first argument:
buildCurrentSelectionArea($media_items, $form, $form_state)
.This should all be moved into a single protected method, for easy overriding. Something like
$this->buildSelectedItemElement($media_item);
I think this should be moved to a new protected method. Something like
$this->getAllSelectedMediaIds($form_state)
.Comment #22
seanB#21
1. We are stopping people from clicking the title since that would take them out of the library. We only want that for the widget and not for the general admin/content/media overview.
2. The media items are currently not scaling and are all fixed width. I personally would like to improve that, but I guess that should be a separate issue.
3. Fixed.
4. Fixed. About the comment, I believe it is a common convention to add a js- specific class when the element needs to be targeted in javascript. Do we really need to document that here? One class is for styling and the other for JS.
5. Fixed.
6. Fixed.
7. Fixed.
8. Fixed.
Comment #23
phenaproximaCan we add a @see here referencing the relevant JavaScript?
I wonder if this should be an open details element, so that users can collapse it if they want to. (Assuming such a thing would be kosher from an accessibility standpoint.)
I wonder if we should also pass $form and $form_state to this method?
$media needs to be type hinted.
Should be "The form array if there are validation errors, or an AJAX response to add the created items to the current selection."
$form isn't used for anything, so I think we can remove it.
This seems questionable; won't this disable validation for the upload entirely? Will extensions, sizes, etc. still be checked? If they will, we have tests to assert that, right?
Comment #24
seanB#23
1. Fixed.
2. Leaving this for now. Not really sure if that would add anything, since all the forms are above this element and there is nothing below it.
3. Fixed.
4. Fixed.
5. Fixed.
6. Fixed.
7. Added a comment to explain why this is needed, and added specific field names for #limit_validation_errors. Validation still works on the upload field though, and we have tests for that in
MediaLibraryTest::testWidgetUpload()
.Comment #25
andrewmacpherson CreditAttribution: andrewmacpherson as a volunteer and at Annertech commentedpoint 3 in #21-22
I don't really follow what this issue is about, however if you are changing JS code which involves focus, please tag for an accessibility review.
I think this looks like re-arranging code to be neater, rather than intending to change any behaviour, is that right?
All the same, in the past we have had some very serious keyboard accessibility regressions from well-meaning refactorings, and keyboard accessibilty has been broken for many releases. Eventually I'd like to get more functional javascript tests in place for keyboard behahiours, but for the time being please request an accessibility review if messing with focus in JS.
Comment #26
seanBThat is correct, we are merging 3 behaviors into 1 to optimize how often jQuery has to search the context for the same elements. No functional changes.
In this case we are adding a class when an element receives focus, not changing the actual focus. Not sure if that changes things?
Comment #27
andrewmacpherson CreditAttribution: andrewmacpherson as a volunteer and at Annertech commentedApplying a class when focus happens is something that could still potentially fail WCAG "focus visible" (at level AA) if it broke, even though it still passed keyboard-operable at level A. Hence worth reviewing.
Comment #28
phenaproximaTagging for front-end framework manager review due to CSS and JavaScript changes.
Comment #29
phenaproximaSo, question -- in this event handler, we are targeting the closest .media-library-item, but in the 'change' handler, we're targeting the closest .js-click-to-select. Surely we want to make those the same? If not, can we add a comment explaining why?
Same here. The click-to-select stuff was originally meant to be generic, so why are we targeting the closest .media-library-item? Can we use a more generic selector?
I think we should also put this into its own method, and have getAllSelectedMediaIds() call it. That way, we can confine all the somewhat fiddly $form_state stuff to individual methods.
So my suggestion for the method names are getPreSelectedMediaItems() -- to get the stuff that was already selected before the add form was used -- and getAllCurrentMediaItems(), which returns the pre-selected ones _and_ the ones being added by the form. Both of these methods should return an array of fully loaded media entities, keyed by ID.
If we follow my previous suggestion, we will no longer need to pass $media_items here; this method can just call $this->getPreSelectedMediaItems($form_state) and loop over them.
If my renaming suggestion is followed, this will become getCurrentMediaItems(). We'll also need to change the doc comment to account for the fact that this will return the combination of the pre-selected ones and the added ones.
Very nice! This is a lot clearer.
I think we can use $assert_session->hiddenFieldNotExists() here.
Comment #30
lauriiiWe should use a js- prefixed class here.
Other than that, the CSS and the JS changes look fine to me so I'm removing the tag.
This is a big UX improvement and makes the current state clearer. I feel like we could be even clearer about the state on this screen when user has pre-selected media. The problem with this screen is that it combines entities that haven't been saved with entities that have been saved without a clear distinction. When I saw the UX improvements, I checked again if the functionality had been changed so that the media was already saved at that stage since it was unclear to me what the state was. Potential solutions to this could be a title that describes the purpose of that screen, or a message / description with instructions.
Comment #31
seanB#29
1. Fixed.
2. Fixed.
3. Fixed.
4. Fixed.
5. Fixed.
6. Yay!
7. This is not the hidden field but the div that would contain the pre-selected items after the users adds new media.
#30 Refactored it to use
.js-click-to-select'
Added a description above the form now. Hopefully this helps. Open to other suggestions though.
Comment #32
phenaproximaWhy does the singular string say "created", but the plural string say "added"?
There's a rogue | here, and the comment is not accurate -- this is returning media entities keyed by ID, not IDs only.
I think this should be returning media entities too, not just IDs.
Comment #33
seanB#32 Fixed.
Comment #34
phenaproxima"Make them available in" is a bit unwieldy. I think we could just say "...to add it/them to the media library."
This could be a simple array_keys() call if getCurrentMediaItems() returned the media items keyed by their ID. Is that possible?
Let's return them keyed by their ID, and mention that in the doc comment.
Same here.
Comment #35
seanB#34
1. Fixed.
2. The added media items in the form state are keyed by delta and only get an actual media ID on save. So I guess we can't do that.
3. Fixed.
4. See 2. Added a comment to make this clear.
Comment #36
phenaproximaThis is the nittiest nitpick of all freaking time: There is an extra space after "ID" which shouldn't be there.
So, I don't think we should combine IDs and deltas. It really needs to be one or the other. The scenario I'm envisioning is this: you pre-select a media item whose ID is 1, and you create two media items, the second of which will have the delta of 1. Which will win? Something will get clobbered, or at the very least, this method becomes harder to read and understand.
I suggest that getPreSelectedMediaItems() always key by ID, and getCurrentMediaItems() is a simple numerically indexed array -- it should not key by either ID or delta. If someone calls getCurrentMediaItems(), they can filter out the pre-selected or created ones by calling $media->isNew().
The doc comments of each method should make clear how each method keys its return value.
Comment #37
seanBFixed #36 and the broken test.
Comment #38
phenaproximaThe doc comment is not accurate. It should be "Returns a render array for a single pre-selected media item."
That's all I found. I think, pending accessibility sign-off, this is ready.
Comment #40
seanBFixed #38. Replaced deprecated function calls in the test.
Comment #42
phenaproximaComment #43
seanBRerolled and added extra tests for the oEmbed form.
Comment #44
seanBComment #45
seanBAnother reroll now #3035434: Improve name of MediaLibraryWidget dialog landed.
Comment #46
phenaproximaRead the interdiff. Extra test coverage is always good!
From my perspective, this is RTBC once @andrewmacpherson signs off.
Comment #47
seanBRerolled now #2981044: Unify the grid/table views of the media library landed. While doing the reroll I looked at the a11y implications of this patch. We are basically touching the buttons of the modal and adding the selected items as a grid below the add form.
The buttons currently still have know a11y issues, for which we have separate issues:
#3016807: Improve refocus on submit buttons of Media Library Widget modals
#3035446: Inform assistive tech users about the outcome of using the MediaLibraryWidget dialog
The questions is, do we start merging the work from the other patches in this patch, or can we work on that separately?
Comment #48
rainbreaw CreditAttribution: rainbreaw as a volunteer commentedseanB and phenaproxima demo'd this with me for accessibility review today, as well. What is working well:
One suggestion that I made:
Include aria-labels on the wrappers that will receive focus so that the user understands the element they are on. This means that the area where media is being added would need an aria-label presenting the section as "Add new media" or "Media to add," while the div containing the pre-selected items would need an aria-label presenting the section as "Preselected Media."
Comment #50
seanBThanks @rainbreaw for the review! I have added the aria labels and we now shift the focus to the wrapper of the added items.
Removing the tag 'needs accessibility review'.
Comment #51
phenaproximaThis seems like a good place for $assert_session->elementAttributeContains().
Otherwise, I think this looks pretty damn good. RTBC once that's done.
Comment #52
seanBFixed #51.
Comment #53
phenaproximaThanks!
I'm also tagging this for backport to 8.7.x, since Media Library will hugely benefit from this UX improvement and, as an experimental module, this patch may be eligible to land in alpha.
Comment #54
seanBBased on the feedback in #3023801-58: Allow newly uploaded files to be deleted from the media library without saving them I noticed we were not using the BEM convention correctly here. Updated the classnames for the new elements.
Comment #55
seanBReroll now #3035316: ‘Add media’ in MediaLibraryWidget should be a button, not a link has landed. Found an AJAX issue because of the tests we have added here, so I guess this needs another review.
Comment #57
seanBThe cause of the AJAX issue was in #3035316: ‘Add media’ in MediaLibraryWidget should be a button, not a link which has been reverted. So forget #55. Once #3035316: ‘Add media’ in MediaLibraryWidget should be a button, not a link is fixed, reroll again from #54.
Comment #58
Gábor HojtsyLet's retitle to reflect what actually happened here and any updates to the issue summary needed, so it makes sense in a commit log, etc :)
Comment #59
phenaproximaHow's this for a re-title?
Comment #60
seanBRerolled now #3035316: ‘Add media’ in MediaLibraryWidget should be a button, not a link and #3037767: Improve responsive styling of grid items in the media library landed.
Changed the selected items to also be responsive. Instead of 4 items for bigger screens, 3 for medium and 2 for smaller screens, the selection area uses 6, 4 and 3 items (which make them smaller than the regular grid).
Comment #61
phenaproximaFound nitpicks, but overall this looks pretty good. I think we need a demo video, though -- or at least screenshots -- demonstrating the functionality at different screen sizes.
Why did this change?
The comment should explain why no default value is set here, and mention how/where the value is updated.
Not a big deal, but I think this could potentially be refactored to use #theme_wrappers to create the container around it. It might make this code a bit more succinct.
I don't know if we need the '_submit' suffix for these buttons, or the word 'save' (both operations save the media items, after all). 'select' and 'insert' might be clearer.
Not sure we need the '#media-library-add-form-wrapper' part of this selector.
$pre_selected_media_items are keyed by ID, so we probably need to do array_merge(array_values($pre_selected_media), $added_media). Additionally, a comment mentioning why we're doing that might be useful.
I don't think we need #media-library-add-form-wrapper in this selector.
Nit: Let's just use Media::loadMultiple() here.
Same here.
Comment #62
phenaproxima@seanB and I demoed this patch to the UX team again today. @jhodgdon was there and provided some very interesting feedback, from which we have some good news and some bad news.
The good news is that this patch is not far from done. The bad news is that the UI is still somewhat confusing -- the separation of newly added media items vs. preselected items isn't very clear. So we need to improve that. We decided to do two things:
details
element with a heading like "Additionally selected items".These changes are going to necessitate another round of UX and accessibility review, but once we have that, I think we can get this in. So let's do that.
Comment #63
seanBFixed the things mentioned in #62 discussed in the UX meeting.
In the meeting there were 2 additional comments, for which we already have separate issues:
Also fixed #61.
1. For some reason the checked state was broken. We could have a separate issue for this, but not sure if that is worth it.
2. Fixed.
3. Left this for now.
4. Fixed. Changed to 'save_select' / 'save_insert'.
5. Fixed.
6. The array_merge already renumbers numeric keys, so I don't think we need to do that? Added a comment though.
7. Fixed.
8. Fixed.
9. Fixed.
Comment #64
lauriiiUsing
pointer-events: none;
isn't a sufficient way to disable links since it only works for pointer devices. The link is still considered as a link for other input methods, such as screen readers.What do we need this for? Especially given that we later remove the outline.
Comment #65
seanB1. Created #3039829: Remove link to media item from media library view.. This was already mentioned in #2988431: [Meta] Accessibility plan for Media Library Widget and has been classified as a should have. So I don't think this is a blocker at the moment and we should probably not make the current patch more complicated to fix this existing issue.
2. We need the tabindex so we are able to set focus to the div. We remove the outline because from what I understood, an outline on the div is not expected. We have that same pattern right now for the
.media-library-content
div when clicking a vertical tab.Comment #66
lauriii#65.1 +1 for not fixing it here!
#65.2 Thanks for the explanation. I can see why it's needed now. Could we add documentation that explains this in the CSS and in the render array? This would make it easier for anyone doing maintenance to understand why this is needed.
Could we add another variation to the
.media-library-item
element? Something like.media-library-item--small
?Comment #67
seanBAdded #3023801: Allow newly uploaded files to be deleted from the media library without saving them as a related issue.
Comment #68
seanBD'oh, I meant to add this one #3034243: Improve selection text in Media Library, which was already related.
Comment #69
rainbreaw CreditAttribution: rainbreaw as a volunteer commented@seanB and @phenaproxima demo'd this with me this morning:
Making the label of the selected media section visible to all and collapsing it is a great solution! This looks good from UX standpoint. We verified the following a11y considerations:
I raised the same concern that has apparently been raised a few times about the selection text (x of y selected) from issue #3034243: Improve selection text in Media Library and will add a separate comment on that related issue.
Comment #70
seanBFixed #66. Added the class
.media-library-item--small
but we still need to make sure it's specific enough.Thanks @rainbreaw for helping us! I think we can remove the 'needs accessibility review' tag per #69.
Comment #71
seanBComment #72
seanBRerolled now #3016807: Improve refocus on submit buttons of Media Library Widget modals has landed. I found an issue while testing. The pre-selected items were not shown after removing an item. Added a fix and a test for that now we can test multiple file uploads (YAY!).
Comment #73
phenaproximaAfter a quick chat with Sean, I understand what we're doing here. The actual selected media IDs are compiled by JavaScript into a hidden field, and that is submitted to the server; ever thus has it been since we rebuilt the media library UI in 8.7.x. From a form processing standpoint, these checkboxes are purely decorative (although they serve an important purpose for usability and accessibility). So setting
#value => FALSE
is okay here, but let's have a comment explaining why we do it.Comment #74
seanBUpdated the comment.
Comment #75
phenaproximaNit: These are "smart" apostrophes. I wonder if they should be ASCII?
Comment #76
seanBRerolled now #3016807: Improve refocus on submit buttons of Media Library Widget modals has landed and fixed #75.
Comment #77
webchick@SeanB walked me through this patch today, we tested all of the interactions (WebchickTestCase FTW ;)):
- Inserting Media directly from the library
- Selecting Media and adding new at the same time.
- Only selecting new files
- Inserting new media into the library
- Inserting new media directly into the post
- Canceling out and inserting nothing
- Deleting new media before it's uploaded
- Unselecting existing media to remove it during the interstitial
Here are some updated screenshots (also updated in issue summary) of how it's working now.
Just adding new files:
Adding new files, along with some already existing ones selected (details collapsed by default):
And expanded:
I can confirm addresses all of the (great) feedback in UX call last week. Therefore, removing the "Needs usability review" tag.
Way to knock it out of the park!! :D SO excited for this patch to land!!
Comment #78
webchickOh, one thing we could use a "normal"-level follow-up for (if one doesn't already exist), and do some "real world" asking of users at DrupalCon...
If you select, say, 3 media, then go back and select, say, 2 media... the media library will only show you the two you just selected, not the 5 you've selected altogether. My spidey sense says that might be confusing for people, and could also cause them to accidentally select the same image twice, since they can't see the already-inserted images when the dialog is up in their face. (In fairness, @SeanB did point out that there could be a use case for inserting the same media item twice, such as filling up a carousel, or promoting a particular ad multiple times... but it feels like it's more often you'd do this by accident, and maybe we move the ability to select an image twice to a contrib module for those who need it).
Comment #79
phenaproximaRandom small nits. Please send this issue directly to RTBC once these are addressed.
Nit: We can use the shorthand
1em 0
here."checkbox's" is still using a smart apostrophe.
I kinda wish that these things were their own AJAX command. However, we can leave that for another time.
Can we add a @see, referencing where in this class the current_selection value is added to $form_state?
This function could be reduced to one line:
return array_merge($this->getPreSelectedMediaItems($form_state), $this->getAddedMediaItems($form_state));
. Obviously we'd want to keep the comment; :)Comment #80
phenaproximaOpened #3041147: Preserve the selected items across multiple uses of the media library to discuss @webchick's spidey-sense from #78.
Comment #81
seanB#79.
1. Fixed.
2. Fixed.
3. I personally want to refactor this to use events in the future, but that's a discussion for another time :)
4. Fixed.
5. I think the way it is right now is a lot easier to read and understand. Can we keep it?
Comment #82
phenaproximaThis needs to be "Get the current selection..."
We're duplicating the exact logic of getAddedMediaItems() -- we shouldn't do that. We can keep it on three lines, but let's at least call getAddedMediaItems().
Comment #83
seanBSorry, you are totally right :). Fixed #82.
Comment #84
phenaproximaThanks. This is beautiful. Completely RTBC once green.
Comment #91
webchickOk, @seanB and @phenaproxima walked me through the patch today. Front-end framework manager review tag was already removed and @lauriii's feedback looks to be addressed, mostly skimmed over the CSS/JS parts. (A lot of the JS changes are related to consolidating logic since the display logic is now called in two places.)
(nitpick) "filled is filled" ;) Should be "field is filled" ... fixed on commit.
We spent some time on this, since normally these types of internal properties would be passed around via #type => value, but in this case we need them exposed in the source so the JS can manipulate them. There should be no security issue here (e.g. concerns with value tampering), because basically access to media items is currently "all or nothing" ... if you can see the media library at all, you can see everything in it. However, something to add explicit test coverage for once we get to more access control stuff.
The extra comments here were helpful, because at a glance it seems like this would be an error.
Also spent a bit of time here, since #limit_validation_errors is normally one of those "eeek" properties. In this case we are oddly using it to include more data than would otherwise happen by default, in order to preserve the keys. Unconventional, but it works, and it's commented as such.
KUDOS for all of the great test coverage!! Basically everything enumerated in #77 is covered, in addition to some other things (like multiple file uploads, testing the oEmbed flow as well, etc.)
Not the fault of this patch, but the "type Three / type Five" stuff in tests would be vastly helped by using actual names of things (such as the default media types in Standard profile), vs. placeholder names like this. :P Follow-up material, however.
Overall, all of my potential concerns were addressed, the flow works, the a11y team and frontend framework managers signed off, and it's the last big UX patch the Media team was targeting for 8.7... LET'S DO IT!
Adding credit for people from recent UX meetings who have helped review this functionality. And actually removing the tag I meant to back in #77. :P
Committed and pushed to 8.8! WOOHOO!! And, because this code is against an experimental module, also backported to 8.7.x.
GREAT work, everyone!!