mirror of
https://github.com/shoelace-style/webawesome.git
synced 2026-01-20 15:54:15 +00:00
Compare commits
5 Commits
1566-fix-c
...
input-base
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4add1d374c | ||
|
|
3612f72a3f | ||
|
|
0f6cf33020 | ||
|
|
95fb68c7fa | ||
|
|
7d3c676ea8 |
@@ -252,8 +252,9 @@ wa-button.delete {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
wa-page::part(drawer__dialog),
|
||||
wa-page::part(menu) {
|
||||
scrollbar-width: thin;
|
||||
overflow: clip;
|
||||
}
|
||||
|
||||
/* smaller viewports-based navigation */
|
||||
|
||||
@@ -132,7 +132,7 @@ Most (but not all) components expose parts. You can find them in each component'
|
||||
|
||||
If you're using [native styles](/docs/utilities/native), any custom styles added for a component should also target the corresponding native element. In general, the same styles you declare for components will work just the same to style their native counterparts.
|
||||
|
||||
For example, we can give `<input type="checkbox">` the same custom styles as `<wa-checkbox>` by using the custom properties required to style the component:
|
||||
For example, we can give `<input type="checkbox">` the same custom styles as `<wa-checkbox>` by using standard CSS properties and CSS parts:
|
||||
|
||||
```html {.example}
|
||||
<wa-checkbox class="pinkify">Web Awesome checkbox</wa-checkbox>
|
||||
@@ -143,60 +143,16 @@ For example, we can give `<input type="checkbox">` the same custom styles as `<w
|
||||
</label>
|
||||
|
||||
<style>
|
||||
wa-checkbox.pinkify,
|
||||
wa-checkbox.pinkify::part(control),
|
||||
input[type='checkbox'].pinkify {
|
||||
--background-color-checked: hotpink;
|
||||
--border-color-checked: hotpink;
|
||||
--border-width: 3px;
|
||||
--checked-icon-color: lavenderblush;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
Or, if using CSS parts, we can give both checkboxes the same custom styles using standard CSS properties:
|
||||
|
||||
```html {.example}
|
||||
<wa-checkbox class="purpleify">Web Awesome checkbox</wa-checkbox>
|
||||
<br />
|
||||
<label>
|
||||
<input type="checkbox" class="purpleify" />
|
||||
HTML checkbox
|
||||
</label>
|
||||
|
||||
<style>
|
||||
wa-checkbox.purpleify::part(control),
|
||||
input[type='checkbox'].purpleify {
|
||||
border-width: 3px;
|
||||
}
|
||||
|
||||
wa-checkbox.purpleify:state(checked)::part(control),
|
||||
input[type='checkbox'].purpleify:checked {
|
||||
background-color: darkorchid;
|
||||
border-color: darkorchid;
|
||||
color: lavender;
|
||||
wa-checkbox.pinkify:state(checked)::part(control),
|
||||
input[type='checkbox'].pinkify:checked {
|
||||
background-color: hotpink;
|
||||
border-color: hotpink;
|
||||
color: lavenderblush;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
## Style Utilities
|
||||
|
||||
Similarly, if you're using [style utilities](/docs/utilities), any custom styles added for a specific attribute variation of a component — such as `appearance`, `variant`, or `size` — should also target the corresponding style utility class. This ensures that the attribute and its utility class counterpart work interchangeably.
|
||||
|
||||
For example, we can give all outlined callouts a thick left border, regardless of whether they are styled with `appearance="outlined"` or `class="wa-outlined"`:
|
||||
|
||||
```html {.example}
|
||||
<wa-callout appearance="filled-outlined">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Here's a callout with <code>appearance="outlined"</code>
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-outlined wa-filled">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Here's a callout with <code>class="wa-outlined"</code>
|
||||
</wa-callout>
|
||||
|
||||
<style>
|
||||
wa-callout:is([appearance~='outlined']) {
|
||||
border-left-width: var(--wa-panel-border-radius);
|
||||
}
|
||||
</style>
|
||||
```
|
||||
```
|
||||
@@ -21,6 +21,7 @@ Components with the <wa-badge variant="warning">Experimental</wa-badge> badge sh
|
||||
- `<wa-select>`
|
||||
- `<wa-tag>`
|
||||
- `<wa-textarea>`
|
||||
- 🚨 BREAKING: Fixed a bug where `base` and `input` parts were swapped in `<wa-input>` [issue:1646]
|
||||
- Added the Kazakh translation [pr:1496]
|
||||
- Added docs for code completion for VS Code and JetBrains [pr:1550]
|
||||
- Added back the missing `form-control-label` part to `<wa-textarea>` for consistency with other form controls [pr:1533]
|
||||
|
||||
@@ -40,8 +40,8 @@ import styles from './input.css';
|
||||
*
|
||||
* @csspart label - The label
|
||||
* @csspart hint - The hint's wrapper.
|
||||
* @csspart input - The wrapper being rendered as an input
|
||||
* @csspart base - The internal `<input>` control.
|
||||
* @csspart base - The wrapper being rendered as an input
|
||||
* @csspart input - The internal `<input>` control.
|
||||
* @csspart start - The container that wraps the `start` slot.
|
||||
* @csspart clear-button - The clear button.
|
||||
* @csspart password-toggle-button - The password toggle button.
|
||||
@@ -353,11 +353,11 @@ export default class WaInput extends WebAwesomeFormAssociatedElement {
|
||||
<slot name="label">${this.label}</slot>
|
||||
</label>
|
||||
|
||||
<div part="input" class="text-field">
|
||||
<div part="base" class="text-field">
|
||||
<slot name="start" part="start" class="start"></slot>
|
||||
|
||||
<input
|
||||
part="base"
|
||||
part="input"
|
||||
id="input"
|
||||
class="control"
|
||||
type=${this.type === 'password' && this.passwordVisible ? 'text' : this.type}
|
||||
|
||||
@@ -462,7 +462,7 @@
|
||||
&::after {
|
||||
content: '';
|
||||
background-color: var(--wa-color-text-quiet);
|
||||
mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="16" width="10" viewBox="0 0 320 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M311.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L243.2 256 73.9 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/></svg>')
|
||||
mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M311.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L243.2 256 73.9 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/></svg>')
|
||||
center no-repeat;
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
@@ -874,7 +874,6 @@
|
||||
input[type='radio'] {
|
||||
appearance: none;
|
||||
|
||||
position: relative;
|
||||
flex: 0 0 auto;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@@ -922,21 +921,18 @@
|
||||
|
||||
&:checked::after,
|
||||
&:indeterminate::after {
|
||||
position: absolute;
|
||||
|
||||
width: round(calc(100% - var(--wa-form-control-border-width) * 2), 1px);
|
||||
height: round(calc(100% - var(--wa-form-control-border-width) * 2), 1px);
|
||||
|
||||
content: '';
|
||||
|
||||
background-color: currentColor;
|
||||
|
||||
width: var(--wa-form-control-toggle-size);
|
||||
height: var(--wa-form-control-toggle-size);
|
||||
scale: var(--checked-icon-scale);
|
||||
|
||||
background-color: currentColor;
|
||||
}
|
||||
|
||||
&:checked::after {
|
||||
mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"/></svg>')
|
||||
center no-repeat;
|
||||
mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"/></svg>')
|
||||
center / 1em 1em no-repeat;
|
||||
}
|
||||
|
||||
&:indeterminate::after {
|
||||
@@ -964,7 +960,8 @@
|
||||
content: '';
|
||||
|
||||
aspect-ratio: 1;
|
||||
width: round(calc(100% * var(--checked-icon-scale)), 1px);
|
||||
width: 100%;
|
||||
scale: var(--checked-icon-scale);
|
||||
|
||||
background-color: currentColor;
|
||||
border-radius: 50%;
|
||||
@@ -1065,9 +1062,7 @@
|
||||
|
||||
/* Select */
|
||||
select {
|
||||
--icon-caret: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 512 512"><path fill="rgb(180 180 200)" d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>');
|
||||
|
||||
--icon-caret: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 448 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="rgb(180 180 200)" d="M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>');
|
||||
--icon-caret: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="rgb(180 180 200)" d="M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>');
|
||||
|
||||
appearance: none;
|
||||
|
||||
@@ -1080,6 +1075,7 @@
|
||||
background-repeat: no-repeat;
|
||||
background-position: center right var(--wa-form-control-padding-inline);
|
||||
background-blend-mode: hue, difference;
|
||||
background-size: 1rem 1rem;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@@ -460,7 +460,7 @@
|
||||
wa-textarea
|
||||
):not(:focus):not([appearance='filled']) {
|
||||
&:where(:not(wa-input):not(wa-select):not(wa-textarea)),
|
||||
&:where(wa-input)::part(input),
|
||||
&:where(wa-input)::part(base),
|
||||
&:where(wa-select)::part(combobox),
|
||||
&:where(wa-textarea)::part(base) {
|
||||
box-shadow: inset var(--wa-shadow-offset-x-s)
|
||||
|
||||
@@ -457,7 +457,7 @@
|
||||
border-color: var(--wa-color-gray-50);
|
||||
}
|
||||
|
||||
&[checked]::part(control) {
|
||||
&:state(checked)::part(control) {
|
||||
background-color: var(--wa-form-control-activated-color);
|
||||
border-color: var(--wa-form-control-activated-color);
|
||||
}
|
||||
@@ -466,7 +466,7 @@
|
||||
background-color: var(--wa-color-surface-default);
|
||||
border: var(--wa-border-width-s) var(--wa-border-style) var(--wa-color-gray-50);
|
||||
}
|
||||
&[checked]::part(thumb) {
|
||||
&:state(checked)::part(thumb) {
|
||||
border-color: var(--wa-form-control-activated-color);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user