Personally, sometimes I feel it's pretty hard to figure out which button among dozens is "the one" a particular guide is about. This could be even a bigger problem for people unfamiliar with the editor. My idea is we could add some classes via JS in the samples (and some styles) and help readers find the right place to start.

.ck.ck-dropdown.foo > .ck-button::after {
content: "";
background: #ff000014;
border-radius: 100px;
width: 60px;
height: 60px;
display: block;
position: absolute;
top: 50%;
border: 3px solid #ff00008a;
left: 50%;
transform: translate(-50%,-50%);
z-index: -1;
pointer-events: none;
}
.ck.ck-dropdown.foo button.ck.ck-button {
z-index: 0;
position: relative;
}

.ck.ck-dropdown.foo > .ck-button::after {
content: "Check this out!";
background: #ff5b61;
padding: 3px 5px;
border-radius: 3px;
font-size: 10px;
color: #fff;
display: block;
position: absolute;
top: 0;
left: 50%;
transform: translate(-50%,calc(-100% - 8px));
z-index: -1;
pointer-events: none;
}
.ck.ck-dropdown.foo > .ck-button::before {
content: "";
display: block;
width: 0;
height: 0;
border-style: solid;
border-width: 5px 5px 0 5px;
border-color: #ff5b61 transparent transparent transparent;
position: absolute;
top: 0;
left: 50%;
transform: translate(-50%, -8px);
}
@Reinmar @AnnaTomanek
If you'd like to see this improvement implemented, add a 👍 reaction to this post.
I soooooo love this idea, this is something that I was missing a lot, too.
Both solutions are totally fine to me. Feel free to choose one that you prefer.
I had same feelings for a long, long time (don't know if it's not duplicated somewhere already), but that's definitely something worth doing.

The PoC code landed in https://github.com/ckeditor/ckeditor5-link/pull/new/i/6267.
I wanted to enable it in different places but there's a major problem with making this tour balloon available across the project.
window.getViewportTopOffsetConfig() in https://github.com/ckeditor/ckeditor5/blob/master/docs/assets/snippet.js#L23-L27 @ckeditor/ckeditor5-ui and the snippet.js is not processed by webpack.snippetadater.js so weback processes the file but it's not a simple task.snippet.js imports the entire UI librabry and the famous "some modules are duplicated" appears.snippet.js file and include it in every guide. At the moment of compilation, the adapter does not know which snippets will be used on which documentation page so there's no way to satisfy the last requirement (Next to which snippet the helper file should be included?)import { pinTourBalloon } from '@ckeditor/ckeditor5/docs/assets/tour.js';, for instance, in build-link-source.js (followed by window.pinTourBalloon = pinTourBalloon).@ckeditor/ckeditor5 a dependency of all packages which guides will benefit from it, which is wrong.cc @pomek @Reinmar
That would make some sense except that it makes @ckeditor/ckeditor5 a dependency of all packages which guides will benefit from it, which is wrong.
As what I could observe, we don't add docs dependencies to pkg.json. It makes sense because docs cannot be built per package. The main repository provides a script for building docs for all packages and all required dependencies are defined in the main repo.
So what we can do to solve the problem?
- But the tour balloon imports stuff from
@ckeditor/ckeditor5-uiand thesnippet.jsis not processed by webpack.
I think we shouldn't do that. It's easier to code this balloon this way, but it just cannot be built like this in our documentation website. It's too complicated.
The challenge and goal here, IMO, is to code this functionality in a way which will be completely standalone and pluggable into existing editors.
An external library then?
Sort of. Something that can be plugged like the inspector.
The info balloon must be positioned absolutely and it must survive page scrolls, window resizing and target moving (the toolbar can change stickiness from top to bottom) so there are plenty of cases to take care of.
Without our internal helpers that handle this already the only sane solution I see is a library like https://github.com/shipshapecode/tether and an integration on the Umberto-side (Umberto provides an API that CKEditor guides can use to attach a balloon).
Maybe we could spend some time on it in the next iteration?
Without our internal helpers that handle this already the only sane solution I see is a library like https://github.com/shipshapecode/tether and an integration on the Umberto-side (Umberto provides an API that CKEditor guides can use to attach a balloon).
This doesn't have to be done via modifying Umberto itself. Umberto is extensible, we load some CKE5-specific scripts there anyway – e.g. the "paste from Word" notification that's automatically loaded in all snippets. This helper that we'd need here could be loaded similarly, purely on CKE5 side.
Maybe we could spend some time on it in the next iteration?
Wanna join the red squad next iteration? :) I'm going to label it so it's there.
Sure, I can carry it through.
I don't want to create another issues as the one below looks similar.
Move feature buttons before the expected fold on mobile:

Some lib that could help us out https://roughnotation.com/ (didn't test in, though).
How is that going?
The issue was forgotten and no PoC saw daylight. It is still a valid issue, though. Let's discuss it during the next sync and see if we can come up with some timeslot for this.
Move feature buttons before the expected fold on mobile:
Side idea: Marking toolbar buttons as "high" priority so they will be picked for a mobile fold.
TODO:
ClassicEditor anyway.editor.ui.view.toolbar.items there's no easy way to tell if a particular button is responsible for bold or link.attachTourTooltip( editor.ui.view.toolbar, 4, 'Click here to insert a link' ) (in editor promise)?Personally I prefer it when such things are very subtle. A small indicator without a big arrow "here is the new feature!" covering the text will be enough for me. But not sure what our users will like.
TBH, after some small research, I couldn't found anything better than https://roughnotation.com/ proposed by @oleq . Most similar libraries are for "step by step" introduction. Of course, there are hundreds of tooltip libs, so we will have plenty of options if we go this way.
PoC with that library:
Main pros:
There is one problem that will exist with every library. On the small screen when the button is behind "three dots", nothing will show up. But it could be solved by @jodator proposal: move the feature button out of the mobile fold, so it will be always visible.
Also my thoughts about some of Oleq's questions:
So now we need an answer to the main question: do we want a tooltip, or only an indicator around the button?
I'd say all that is fine and I'm for. But I'd keep the indicator on all demos if we have more. These are rather rare cases, we hardly ever have more than two demos, so this is not that a big deal - especially that there sometimes are demos showcasing different toolbar options (eg. the image demo [also wanted to mention heading demo, but the second one basically requires zero indicators anyway...).
PoC with that library:
Can we see this live in some branch @pkwasnik?
Can we see this live in some branch @pkwasnik?
Sure: https://github.com/ckeditor/ckeditor5/compare/i/6267?expand=1
OK, looks good, but there is some layer overlapping while I scroll, where the editor window would cut the mark:

Note: this seems to happen with the HTML embed widget and the image, but not with regular content and code blocks.
Like this:

OK, looks good, but there is some layer overlapping while I scroll, where the editor window would cut the mark:
Fixed:
One alternative:
EDIT: another alternative:
There are several options to configure: shape, speed, stroke, iterations, color
Oh, the block one, much nicer than the circle one!
Example with simple tooltip and grey indicator (updated also on branch):
EDIT:
only tooltip:
only indicator:
I like the idea of faint indicator very much, I'm not totally for the tooltip, tho.
My 2cs:
IntersectionObserver).
TODO:
Notes from the last meeting:
Basically, it seems the general consensus was that we should stick to tooltips instead, as more clearly divisible/readable.
Finally figured out how to put it in the code, PR is ready. After working with this a bit, I have some additional thoughts about the design:
Animations are disturbing if you see them every time when visiting the docs. They are good in a quick guide on the landing page, but not in regularly visited documentation.
The red dot is unnecessary - why we need two indicators? one is enough. Someone could think that this is part of a UI, some kind of notification from the editor. So it could bring more bad than good.
Most helpful comment
Finally figured out how to put it in the code, PR is ready. After working with this a bit, I have some additional thoughts about the design:
Animations are disturbing if you see them every time when visiting the docs. They are good in a quick guide on the landing page, but not in regularly visited documentation.
The red dot is unnecessary - why we need two indicators? one is enough. Someone could think that this is part of a UI, some kind of notification from the editor. So it could bring more bad than good.