feat(item-option): add hue property for the ionic theme (#30332)
Issue number: internal --------- ## What is the current behavior? The item option component does not support the `hue` property. ## What is the new behavior? Adds support for the `subtle` hue for the item option. Defaults to `subtle`. ## Does this introduce a breaking change? - [ ] Yes - [x] No
@ -1190,6 +1190,7 @@ ion-item-option,prop,disabled,boolean,false,false,false
|
|||||||
ion-item-option,prop,download,string | undefined,undefined,false,false
|
ion-item-option,prop,download,string | undefined,undefined,false,false
|
||||||
ion-item-option,prop,expandable,boolean,false,false,false
|
ion-item-option,prop,expandable,boolean,false,false,false
|
||||||
ion-item-option,prop,href,string | undefined,undefined,false,false
|
ion-item-option,prop,href,string | undefined,undefined,false,false
|
||||||
|
ion-item-option,prop,hue,"bold" | "subtle" | undefined,'subtle',false,false
|
||||||
ion-item-option,prop,mode,"ios" | "md",undefined,false,false
|
ion-item-option,prop,mode,"ios" | "md",undefined,false,false
|
||||||
ion-item-option,prop,rel,string | undefined,undefined,false,false
|
ion-item-option,prop,rel,string | undefined,undefined,false,false
|
||||||
ion-item-option,prop,shape,"rectangular" | "round" | "soft" | undefined,undefined,false,false
|
ion-item-option,prop,shape,"rectangular" | "round" | "soft" | undefined,undefined,false,false
|
||||||
|
8
core/src/components.d.ts
vendored
@ -1704,6 +1704,10 @@ export namespace Components {
|
|||||||
* Contains a URL or a URL fragment that the hyperlink points to. If this property is set, an anchor tag will be rendered.
|
* Contains a URL or a URL fragment that the hyperlink points to. If this property is set, an anchor tag will be rendered.
|
||||||
*/
|
*/
|
||||||
"href": string | undefined;
|
"href": string | undefined;
|
||||||
|
/**
|
||||||
|
* Set to `"bold"` for an option with vibrant, bold colors or to `"subtle"` for an option with muted, subtle colors. Only applies to the `ionic` theme.
|
||||||
|
*/
|
||||||
|
"hue"?: 'bold' | 'subtle';
|
||||||
/**
|
/**
|
||||||
* The mode determines the platform behaviors of the component.
|
* The mode determines the platform behaviors of the component.
|
||||||
*/
|
*/
|
||||||
@ -7204,6 +7208,10 @@ declare namespace LocalJSX {
|
|||||||
* Contains a URL or a URL fragment that the hyperlink points to. If this property is set, an anchor tag will be rendered.
|
* Contains a URL or a URL fragment that the hyperlink points to. If this property is set, an anchor tag will be rendered.
|
||||||
*/
|
*/
|
||||||
"href"?: string | undefined;
|
"href"?: string | undefined;
|
||||||
|
/**
|
||||||
|
* Set to `"bold"` for an option with vibrant, bold colors or to `"subtle"` for an option with muted, subtle colors. Only applies to the `ionic` theme.
|
||||||
|
*/
|
||||||
|
"hue"?: 'bold' | 'subtle';
|
||||||
/**
|
/**
|
||||||
* The mode determines the platform behaviors of the component.
|
* The mode determines the platform behaviors of the component.
|
||||||
*/
|
*/
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
@import "./item-option.vars";
|
@import "../../themes/mixins";
|
||||||
|
|
||||||
// Item Option
|
// Common Item Option
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
:host {
|
:host {
|
||||||
@ -8,23 +8,12 @@
|
|||||||
* @prop --background: Background of the item option
|
* @prop --background: Background of the item option
|
||||||
* @prop --color: Color of the item option
|
* @prop --color: Color of the item option
|
||||||
*/
|
*/
|
||||||
--background: #{ion-color(primary, base)};
|
|
||||||
--color: #{ion-color(primary, contrast)};
|
|
||||||
|
|
||||||
background: var(--background);
|
background: var(--background);
|
||||||
color: var(--color);
|
color: var(--color);
|
||||||
|
|
||||||
font-family: $font-family-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
:host(.ion-color) {
|
|
||||||
background: current-color(base);
|
|
||||||
color: current-color(contrast);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-native {
|
.button-native {
|
||||||
@include text-inherit();
|
@include text-inherit();
|
||||||
@include padding(0, 0.7em);
|
|
||||||
|
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
||||||
@ -72,23 +61,6 @@
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
::slotted([slot="start"]) {
|
|
||||||
@include margin(0, 5px, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
::slotted([slot="end"]) {
|
|
||||||
@include margin(0, 0, 0, 5px);
|
|
||||||
}
|
|
||||||
|
|
||||||
::slotted([slot="icon-only"]) {
|
|
||||||
@include padding(0);
|
|
||||||
@include margin(0, 10px);
|
|
||||||
|
|
||||||
min-width: 0.9em;
|
|
||||||
|
|
||||||
font-size: 1.8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Item Expandable Animation
|
// Item Expandable Animation
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
@ -100,7 +72,7 @@
|
|||||||
transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);
|
transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Item Disabled Styling
|
// Item Option: Disabled
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
:host(.item-option-disabled) {
|
:host(.item-option-disabled) {
|
||||||
@ -109,6 +81,5 @@
|
|||||||
|
|
||||||
:host(.item-option-disabled) .button-native {
|
:host(.item-option-disabled) .button-native {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
opacity: 0.5;
|
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
@use "../../themes/ionic/ionic.globals.scss" as globals;
|
@use "../../themes/ionic/ionic.globals.scss" as globals;
|
||||||
@import "./item-option";
|
@use "./item-option.common";
|
||||||
|
|
||||||
// Ionic Item Option
|
// Ionic Item Option
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -29,11 +29,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
::slotted([slot="start"]) {
|
::slotted([slot="start"]) {
|
||||||
@include margin(0, globals.$ion-space-100, 0, 0);
|
@include globals.margin(0, globals.$ion-space-100, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
::slotted([slot="end"]) {
|
::slotted([slot="end"]) {
|
||||||
@include margin(0, 0, 0, globals.$ion-space-100);
|
@include globals.margin(0, 0, 0, globals.$ion-space-100);
|
||||||
}
|
}
|
||||||
|
|
||||||
::slotted(ion-icon),
|
::slotted(ion-icon),
|
||||||
@ -75,3 +75,31 @@
|
|||||||
:host(.item-option-disabled) .button-native {
|
:host(.item-option-disabled) .button-native {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Subtle Item Option
|
||||||
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
:host(.item-option-subtle) {
|
||||||
|
--background: #{globals.ion-color(primary, base, $subtle: true)};
|
||||||
|
--background-activated: #{globals.ion-color(primary, shade, $subtle: true)};
|
||||||
|
--color: #{globals.ion-color(primary, contrast, $subtle: true)};
|
||||||
|
}
|
||||||
|
|
||||||
|
:host(.item-option-subtle.ion-color) {
|
||||||
|
background: globals.current-color(base, $subtle: true);
|
||||||
|
color: globals.current-color(contrast, $subtle: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bold Item Option
|
||||||
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
:host(.item-option-bold) {
|
||||||
|
--background: #{globals.ion-color(primary, base)};
|
||||||
|
--background-activated: #{globals.ion-color(primary, shade)};
|
||||||
|
--color: #{globals.ion-color(primary, contrast)};
|
||||||
|
}
|
||||||
|
|
||||||
|
:host(.item-option-bold.ion-color) {
|
||||||
|
background: globals.current-color(base);
|
||||||
|
color: globals.current-color(contrast);
|
||||||
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
@import "./item-option";
|
@import "./item-option.native";
|
||||||
@import "./item-option.ios.vars";
|
@import "./item-option.ios.vars";
|
||||||
|
|
||||||
// iOS Item Option
|
// iOS Item Option
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
@import "./item-option";
|
@import "./item-option.native";
|
||||||
@import "./item-option.md.vars";
|
@import "./item-option.md.vars";
|
||||||
|
|
||||||
// Material Design Item Option
|
// Material Design Item Option
|
||||||
|
46
core/src/components/item-option/item-option.native.scss
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
@import "../../themes/native/native.globals";
|
||||||
|
@import "./item-option.vars";
|
||||||
|
@import "./item-option.common";
|
||||||
|
|
||||||
|
// Native Item Option
|
||||||
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
:host {
|
||||||
|
--background: #{ion-color(primary, base)};
|
||||||
|
--color: #{ion-color(primary, contrast)};
|
||||||
|
|
||||||
|
font-family: $font-family-base;
|
||||||
|
}
|
||||||
|
|
||||||
|
:host(.ion-color) {
|
||||||
|
background: current-color(base);
|
||||||
|
color: current-color(contrast);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-native {
|
||||||
|
@include padding(0, 0.7em);
|
||||||
|
}
|
||||||
|
|
||||||
|
::slotted([slot="start"]) {
|
||||||
|
@include margin(0, 5px, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
::slotted([slot="end"]) {
|
||||||
|
@include margin(0, 0, 0, 5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
::slotted([slot="icon-only"]) {
|
||||||
|
@include padding(0);
|
||||||
|
@include margin(0, 10px);
|
||||||
|
|
||||||
|
min-width: 0.9em;
|
||||||
|
|
||||||
|
font-size: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item Option: Disabled
|
||||||
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
:host(.item-option-disabled) .button-native {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
@ -62,6 +62,14 @@ export class ItemOption implements ComponentInterface, AnchorInterface, ButtonIn
|
|||||||
*/
|
*/
|
||||||
@Prop() href: string | undefined;
|
@Prop() href: string | undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set to `"bold"` for an option with vibrant, bold colors or to `"subtle"` for
|
||||||
|
* an option with muted, subtle colors.
|
||||||
|
*
|
||||||
|
* Only applies to the `ionic` theme.
|
||||||
|
*/
|
||||||
|
@Prop() hue?: 'bold' | 'subtle' = 'subtle';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the relationship of the target object to the link object.
|
* Specifies the relationship of the target object to the link object.
|
||||||
* The value is a space-separated list of [link types](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types).
|
* The value is a space-separated list of [link types](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types).
|
||||||
@ -113,7 +121,7 @@ export class ItemOption implements ComponentInterface, AnchorInterface, ButtonIn
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { disabled, expandable, href } = this;
|
const { disabled, expandable, href, hue } = this;
|
||||||
const TagType = href === undefined ? 'button' : ('a' as any);
|
const TagType = href === undefined ? 'button' : ('a' as any);
|
||||||
const theme = getIonTheme(this);
|
const theme = getIonTheme(this);
|
||||||
const shape = this.getShape();
|
const shape = this.getShape();
|
||||||
@ -133,6 +141,7 @@ export class ItemOption implements ComponentInterface, AnchorInterface, ButtonIn
|
|||||||
class={createColorClasses(this.color, {
|
class={createColorClasses(this.color, {
|
||||||
[theme]: true,
|
[theme]: true,
|
||||||
[`item-option-${shape}`]: shape !== undefined,
|
[`item-option-${shape}`]: shape !== undefined,
|
||||||
|
[`item-option-${hue}`]: hue !== undefined,
|
||||||
'item-option-disabled': disabled,
|
'item-option-disabled': disabled,
|
||||||
'item-option-expandable': expandable,
|
'item-option-expandable': expandable,
|
||||||
'ion-activatable': true,
|
'ion-activatable': true,
|
||||||
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.6 KiB |
135
core/src/components/item-sliding/test/hue/index.html
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Item Sliding - Hue</title>
|
||||||
|
<meta
|
||||||
|
name="viewport"
|
||||||
|
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"
|
||||||
|
/>
|
||||||
|
<link href="../../../../../css/ionic.bundle.css" rel="stylesheet" />
|
||||||
|
<link href="../../../../../scripts/testing/styles.css" rel="stylesheet" />
|
||||||
|
<script src="../../../../../scripts/testing/scripts.js"></script>
|
||||||
|
<script nomodule src="../../../../../dist/ionic/ionic.js"></script>
|
||||||
|
<script type="module" src="../../../../../dist/ionic/ionic.esm.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onLoad="openItems()">
|
||||||
|
<ion-app>
|
||||||
|
<ion-header>
|
||||||
|
<ion-toolbar>
|
||||||
|
<ion-title>Item Sliding - Hue</ion-title>
|
||||||
|
</ion-toolbar>
|
||||||
|
</ion-header>
|
||||||
|
|
||||||
|
<ion-content>
|
||||||
|
<ion-list>
|
||||||
|
<ion-list-header>
|
||||||
|
<ion-label>Default Colors</ion-label>
|
||||||
|
</ion-list-header>
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label> Bold </ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option hue="bold">Default</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label> Subtle </ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option>Default</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-list-header>
|
||||||
|
<ion-label>Core Colors</ion-label>
|
||||||
|
</ion-list-header>
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label> Bold </ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option hue="bold" color="primary">Primary</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="secondary">Secondary</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="tertiary">Tertiary</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label> Subtle </ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option color="primary">Primary</ion-item-option>
|
||||||
|
<ion-item-option color="secondary">Secondary</ion-item-option>
|
||||||
|
<ion-item-option color="tertiary">Tertiary</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-list-header>
|
||||||
|
<ion-label>Status Colors</ion-label>
|
||||||
|
</ion-list-header>
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label> Bold </ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option hue="bold" color="success">Success</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="warning">Warning</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="danger">Danger</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label> Subtle </ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option color="success">Success</ion-item-option>
|
||||||
|
<ion-item-option color="warning">Warning</ion-item-option>
|
||||||
|
<ion-item-option color="danger">Danger</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-list-header>
|
||||||
|
<ion-label>Neutral Colors</ion-label>
|
||||||
|
</ion-list-header>
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label> Bold </ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option hue="bold" color="light">Light</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="medium">Medium</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="dark">Dark</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label> Subtle </ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option color="light">Light</ion-item-option>
|
||||||
|
<ion-item-option color="medium">Medium</ion-item-option>
|
||||||
|
<ion-item-option color="dark">Dark</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
</ion-list>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Open all sliding items on load
|
||||||
|
function openItems() {
|
||||||
|
document.querySelectorAll('ion-item-sliding').forEach((item) => {
|
||||||
|
item.open();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</ion-content>
|
||||||
|
</ion-app>
|
||||||
|
</body>
|
||||||
|
</html>
|
152
core/src/components/item-sliding/test/hue/item-sliding.e2e.ts
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
import { expect } from '@playwright/test';
|
||||||
|
import { configs, test } from '@utils/test/playwright';
|
||||||
|
|
||||||
|
configs({ directions: ['ltr'], modes: ['ionic-md'] }).forEach(({ config, screenshot, title }) => {
|
||||||
|
test.describe(title('item-option: hue'), () => {
|
||||||
|
test('should render subtle item options', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-list>
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label>
|
||||||
|
Default Color
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option>Default</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label>
|
||||||
|
Core Colors
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option color="primary">Primary</ion-item-option>
|
||||||
|
<ion-item-option color="secondary">Secondary</ion-item-option>
|
||||||
|
<ion-item-option color="tertiary">Tertiary</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label>
|
||||||
|
Status Colors
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option color="success">Success</ion-item-option>
|
||||||
|
<ion-item-option color="warning">Warning</ion-item-option>
|
||||||
|
<ion-item-option color="danger">Danger</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label>
|
||||||
|
Neutral Colors
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option color="light">Light</ion-item-option>
|
||||||
|
<ion-item-option color="medium">Medium</ion-item-option>
|
||||||
|
<ion-item-option color="dark">Dark</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
</ion-list>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
await page.evaluate(() => {
|
||||||
|
const items = document.querySelectorAll('ion-item-sliding');
|
||||||
|
items.forEach((item: any) => item.open('start'));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wait for options to be visible
|
||||||
|
await page.waitForSelector('ion-item-options:visible', { state: 'visible' });
|
||||||
|
|
||||||
|
await expect(page.locator('ion-list')).toHaveScreenshot(screenshot('item-option-hue-subtle'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should render bold item options', async ({ page }) => {
|
||||||
|
await page.setContent(
|
||||||
|
`
|
||||||
|
<ion-list>
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label>
|
||||||
|
Default Color
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option hue="bold">Default</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label>
|
||||||
|
Core Colors
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option hue="bold" color="primary">Primary</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="secondary">Secondary</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="tertiary">Tertiary</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label>
|
||||||
|
Status Colors
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option hue="bold" color="success">Success</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="warning">Warning</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="danger">Danger</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
|
||||||
|
<ion-item-sliding>
|
||||||
|
<ion-item>
|
||||||
|
<ion-label>
|
||||||
|
Neutral Colors
|
||||||
|
</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item-options side="start">
|
||||||
|
<ion-item-option hue="bold" color="light">Light</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="medium">Medium</ion-item-option>
|
||||||
|
<ion-item-option hue="bold" color="dark">Dark</ion-item-option>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-options>
|
||||||
|
</ion-item-sliding>
|
||||||
|
</ion-list>
|
||||||
|
`,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
|
||||||
|
await page.evaluate(() => {
|
||||||
|
const items = document.querySelectorAll('ion-item-sliding');
|
||||||
|
items.forEach((item: any) => item.open('start'));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wait for options to be visible
|
||||||
|
await page.waitForSelector('ion-item-options:visible', { state: 'visible' });
|
||||||
|
|
||||||
|
await expect(page.locator('ion-list')).toHaveScreenshot(screenshot('item-option-hue-bold'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.5 KiB |
@ -1131,14 +1131,14 @@ export declare interface IonItemGroup extends Components.IonItemGroup {}
|
|||||||
|
|
||||||
|
|
||||||
@ProxyCmp({
|
@ProxyCmp({
|
||||||
inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'mode', 'rel', 'shape', 'target', 'theme', 'type']
|
inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'hue', 'mode', 'rel', 'shape', 'target', 'theme', 'type']
|
||||||
})
|
})
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ion-item-option',
|
selector: 'ion-item-option',
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
template: '<ng-content></ng-content>',
|
template: '<ng-content></ng-content>',
|
||||||
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
||||||
inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'mode', 'rel', 'shape', 'target', 'theme', 'type'],
|
inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'hue', 'mode', 'rel', 'shape', 'target', 'theme', 'type'],
|
||||||
})
|
})
|
||||||
export class IonItemOption {
|
export class IonItemOption {
|
||||||
protected el: HTMLIonItemOptionElement;
|
protected el: HTMLIonItemOptionElement;
|
||||||
|
@ -1106,14 +1106,14 @@ export declare interface IonItemGroup extends Components.IonItemGroup {}
|
|||||||
|
|
||||||
@ProxyCmp({
|
@ProxyCmp({
|
||||||
defineCustomElementFn: defineIonItemOption,
|
defineCustomElementFn: defineIonItemOption,
|
||||||
inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'mode', 'rel', 'shape', 'target', 'theme', 'type']
|
inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'hue', 'mode', 'rel', 'shape', 'target', 'theme', 'type']
|
||||||
})
|
})
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ion-item-option',
|
selector: 'ion-item-option',
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
template: '<ng-content></ng-content>',
|
template: '<ng-content></ng-content>',
|
||||||
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
|
||||||
inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'mode', 'rel', 'shape', 'target', 'theme', 'type'],
|
inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'hue', 'mode', 'rel', 'shape', 'target', 'theme', 'type'],
|
||||||
standalone: true
|
standalone: true
|
||||||
})
|
})
|
||||||
export class IonItemOption {
|
export class IonItemOption {
|
||||||
|
@ -554,6 +554,7 @@ export const IonItemOption: StencilVueComponent<JSX.IonItemOption> = /*@__PURE__
|
|||||||
'download',
|
'download',
|
||||||
'expandable',
|
'expandable',
|
||||||
'href',
|
'href',
|
||||||
|
'hue',
|
||||||
'rel',
|
'rel',
|
||||||
'target',
|
'target',
|
||||||
'type',
|
'type',
|
||||||
|