-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adds UUI-Text-Copy #985
base: v1/contrib
Are you sure you want to change the base?
Adds UUI-Text-Copy #985
Conversation
npm run new-package
Hi there @warrenbuckley, thank you for this contribution! 👍 While we wait for the team to have a look at your work, we wanted to let you know about that we have a checklist for some of the things we will consider during review:
Don't worry if you got something wrong. We like to think of a pull request as the start of a conversation, we're happy to provide guidance on improving your contribution. If you realize that you might want to make some changes then you can do that by adding new commits to the branch you created for this work and pushing new commits. They should then automatically show up as updates to this pull request. Thanks, from your friendly Umbraco GitHub bot 🤖 🙂 |
I am open for discussion and feedback to improve this |
I may need some pointers or advice with the tests please @nielslyngsoe or @iOvergaard |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, but I am not sure how to fix the tests. It says the browser asked for permission to copy but the user denied it, so we probably need Playwright to launch the browser with a special parameter to allow non-user interaction...?
Important to me is that we can use this inside the <umb-code-block>
element in the Backoffice. Did you try and test it there yet?
await navigator.clipboard | ||
.writeText(this.#valueToCopy) | ||
.then(() => { | ||
button.state = 'success'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the <umb-code-block>
element in the Backoffice, where we also have a copy button, we introduced a delay of 2000 ms before setting the button state. The value is copied immediately, but this provides better feedback to the user seeing that the animation happens slower. I think Shoelace also allows to set this duration through a property...?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have set it to 2 seconds but not sure if it looks odd/weird to me @iOvergaard
Recording.2025-01-07.143504.mp4
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changed it to 250ms as the default as per your suggestion via Slack and also set it as a property so it can be changed/overriden.
Co-authored-by: Jacob Overgaard <[email protected]>
Co-authored-by: Jacob Overgaard <[email protected]>
…mbraco.UI into feature/uui-copy
…e tests minimal due to the permisions problem with the clipboard API running headless
I wouldn't know how to do that @iOvergaard as its over in the CMS repo, is there something I can do to try/test this out then? |
You can run |
… before this would work properly as it had not registered the webcoponents that it depends upon
I am not sure this is explicitly needed in my opinion @iOvergaard as the default slot can be swapped out, as shown in examples and screenshot of a story. <uui-input id="inputToCopy" placeholder="Type something">
<uui-copy copy-from="inputToCopy" slot="append" compact>
<uui-icon name="copy"></uui-icon>
</uui-copy>
</uui-input> Or <uui-copy value="Custom slot content">Custom Copy Text</uui-copy>
<uui-copy value="Different Icon"><uui-icon name=""></uui-icon> COPY ME</uui-copy> |
Flows the label prop down into the UUI-button for the aria-label for the uui-button used inside uui-copy
Ready for a re-review and see what you think @iOvergaard |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Functionally, this is exactly what we want to have. I have included some suggestions based on feedback from the team at HQ to optimize the package and the component even further. Please let me know if you would like to take it to the finish line or if we should take over.
* @slot - Use to replace the default content of 'Copy' and the copy icon | ||
*/ | ||
@defineElement('uui-copy') | ||
export class UUICopyElement extends LabelMixin('', LitElement) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good that you extend the LabelMixin now, @warrenbuckley. I mentioned it to @nielslyngsoe and he was asking why we don't just extend the UUIButtonElement itself as we only ever have a <uui-button></uui-button>
in the rendered output. If you extend from UUIButtonElement, you can remove many of the properties from uui-copy as they would already be present there.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My question to you both @iOvergaard & @nielslyngsoe is that as this is not a typical Form Control and inherting/extending from UUIButton which in turn extends with the mixin UUIFormControlMixin
which in turn already has a value
field.
So can you let me still if you want me to extend from UUIButton, as it seems extra bloat to me to participate as a native form control when it will never be used as part of a form submission.
5c4d1a3
to
fbe484f
Compare
So had to stub it out again with npm run new-package
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would say this looks fine and I accept your premise that it is indeed not a form control, thus it doesn't make sense to extend uui-button.
I have suggested a few quick fixes here, but what remains to be tested is to use it inside the backoffice in the code snippet or sysinfo element. I will try to see to that later on.
Quality Gate passedIssues Measures |
Description
Adds a button to trigger copying content to the clipboard, by two approaches:
value
property on uui-copy to contain the text content you want to copy to the clipboardcopy-from
property will look for HTML element with that ID and use the text contentvalue
property then assume we want to get the value of an input field such as uui-inputNote
This is heavily inspired by Shoelace.style copy button
https://github.com/shoelace-style/shoelace/blob/next/src/components/copy-button/copy-button.component.ts
Types of changes
Motivation and context
How to test?
I believe the stories should cover some scenarios
Screenshots (if appropriate)
Checklist