Compare commits

...

26 Commits

Author SHA1 Message Date
Sean Perkins
53cd9f4279 fix(chip): remove reflect & optimize screenshots 2024-04-10 18:01:26 -04:00
Bernardo Cardoso
8c5b28cac2 Merge branch 'next' into ROU-4837 2024-04-10 18:44:42 +01:00
Bernardo Cardoso
5609997d83 Update shape html test file title
Co-authored-by: Brandy Carney <brandyscarney@users.noreply.github.com>
2024-04-10 18:44:30 +01:00
Bernardo Cardoso
eac1eb448c removed unused screenshots 2024-04-10 18:42:43 +01:00
Bernardo Cardoso
99b3ce69a2 updated api txt 2024-04-10 18:28:46 +01:00
Bernardo Cardoso
f39a6cc269 remvoed soft tests and updated baselines 2024-04-10 18:28:23 +01:00
Bernardo Cardoso
28dd219799 Removed shape soft 2024-04-10 18:26:33 +01:00
Bernardo Cardoso
6aa449f8a3 Update baselines due to new shape default 2024-04-10 16:32:21 +01:00
Bernardo Cardoso
0a71b061fa Added TODO 2024-04-10 16:24:16 +01:00
Bernardo Cardoso
98d0aef807 change default shape to soft 2024-04-10 16:20:30 +01:00
Bernardo Cardoso
049d4ad332 Add TODO code
Co-authored-by: Brandy Carney <brandyscarney@users.noreply.github.com>
2024-04-10 16:17:59 +01:00
Bernardo Cardoso
61c38de88c Merge branch 'next' into ROU-4837 2024-04-10 13:17:26 +01:00
Bernardo Cardoso
979d784123 Improve shape test 2024-04-09 16:43:37 +01:00
Bernardo Cardoso
0e30825e51 Changed focus test and baselines 2024-04-09 16:38:35 +01:00
Bernardo Cardoso
859d0f7dda Added margin to focus test 2024-04-09 16:29:17 +01:00
Bernardo Cardoso
4df5857848 fix theme-ionic html page 2024-04-09 13:00:35 +01:00
Bernardo Cardoso
9ab2a9c406 Fixed test html 2024-04-09 12:52:51 +01:00
Bernardo Cardoso
7bcba0cae7 Updated comment 2024-04-09 12:40:18 +01:00
Bernardo Cardoso
545199889a Add shape condition 2024-04-09 11:10:59 +01:00
Bernardo Cardoso
e3f4a56a71 changed partial title 2024-04-09 11:06:13 +01:00
Bernardo Cardoso
4b83300bb6 Update baselines 2024-04-09 10:59:43 +01:00
Bernardo Cardoso
87e32252a6 Update shot name 2024-04-09 10:55:49 +01:00
Bernardo Cardoso
58c0ab8731 Added new chip tests and baselines 2024-04-09 10:49:57 +01:00
Bernardo Cardoso
9238854966 Add focus test and new baselines 2024-04-08 16:49:13 +01:00
Bernardo Cardoso
daa8742df4 Merge branch 'next' into ROU-4837 2024-04-08 16:24:50 +01:00
Bernardo Cardoso
557efc203e Add shape prop to Chip 2024-04-08 15:52:54 +01:00
23 changed files with 166 additions and 7 deletions

View File

@@ -347,6 +347,7 @@ ion-chip,prop,color,"danger" | "dark" | "light" | "medium" | "primary" | "second
ion-chip,prop,disabled,boolean,false,false,false
ion-chip,prop,mode,"ios" | "md",undefined,false,false
ion-chip,prop,outline,boolean,false,false,false
ion-chip,prop,shape,"rectangular" | "round" | undefined,undefined,false,false
ion-chip,prop,theme,"ios" | "md" | "ionic",undefined,false,false
ion-chip,css-prop,--background
ion-chip,css-prop,--color

View File

@@ -754,6 +754,10 @@ export namespace Components {
* Display an outline style button.
*/
"outline": boolean;
/**
* Define the Chip corner shape, when using the Ionic Theme.
*/
"shape"?: 'round' | 'rectangular';
/**
* The theme determines the visual appearance of the component.
*/
@@ -5994,6 +5998,10 @@ declare namespace LocalJSX {
* Display an outline style button.
*/
"outline"?: boolean;
/**
* Define the Chip corner shape, when using the Ionic Theme.
*/
"shape"?: 'round' | 'rectangular';
/**
* The theme determines the visual appearance of the component.
*/

View File

@@ -1,7 +1,7 @@
@use "../../themes/ionic.mixins" as mixins;
@use "../../foundations/ionic.vars.scss" as tokens;
// Chip
// Ionic Chip
// --------------------------------------------------
// TODO(ROU-4870): there is no token yet for these ones, but it should be created in the future, once UX team has figma tokens done
@@ -11,13 +11,14 @@ $ionic-states-hover: #{rgba(#05080f, 0.16)}; // We should review how to make thi
:host {
--background: #{tokens.$ionic-color-neutral-10};
--border-color: transparent;
--border-radius: #{tokens.$ionic-border-radius-rounded-small};
--color: #{tokens.$ionic-color-neutral-900};
--focus-ring-color: #{$ionic-states-focus-primary};
--focus-ring-width: #{tokens.$ionic-border-size-medium};
@include mixins.font-smoothing;
@include mixins.padding(tokens.$ionic-space-xs, tokens.$ionic-space-xxs);
@include mixins.border-radius(tokens.$ionic-border-radius-rounded-large);
@include mixins.border-radius(var(--border-radius));
display: inline-flex;
@@ -82,6 +83,17 @@ $ionic-states-hover: #{rgba(#05080f, 0.16)}; // We should review how to make thi
pointer-events: none;
}
// Chip Shapes
// ---------------------------------------------
:host(.chip-round) {
--border-radius: #{tokens.$ionic-border-radius-rounded-large};
}
:host(.chip-rectangular) {
--border-radius: #{tokens.$ionic-border-radius-square};
}
// Chip Icon
// ---------------------------------------------
::slotted(ion-icon) {

View File

@@ -36,7 +36,13 @@ export class Chip implements ComponentInterface {
*/
@Prop() disabled = false;
/**
* Define the Chip corner shape, when using the Ionic Theme.
*/
@Prop() shape?: 'round' | 'rectangular';
render() {
const { shape } = this;
const theme = getIonTheme(this);
return (
@@ -44,6 +50,8 @@ export class Chip implements ComponentInterface {
aria-disabled={this.disabled ? 'true' : null}
class={createColorClasses(this.color, {
[theme]: true,
// TODO(FW-6120): remove the theme==='ionic' when we add support for the `ios` and `md` modes.
[`chip-${shape}`]: theme === 'ionic' && shape !== undefined,
'chip-outline': this.outline,
'chip-disabled': this.disabled,
'ion-activatable': true,

View File

@@ -0,0 +1,38 @@
import { expect } from '@playwright/test';
import { configs, test } from '@utils/test/playwright';
configs({ modes: ['ionic-md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
/**
* This behavior only applies to Ionic Theme.
* TODO(FW-6120): add the `ios` and `md` modes when shape support is added.
*/
test.describe(title('chip: shape'), () => {
test.beforeEach(async ({ page }) => {
await page.goto(`/src/components/chip/test/shape`, config);
});
test.describe('default', () => {
test('should not have visual regressions', async ({ page }) => {
const container = page.locator('#default');
await expect(container).toHaveScreenshot(screenshot(`chip-default`));
});
});
test.describe('round', () => {
test('should not have visual regressions', async ({ page }) => {
const container = page.locator('#round');
await expect(container).toHaveScreenshot(screenshot(`chip-round`));
});
});
test.describe('rectangular', () => {
test('should not have visual regressions', async ({ page }) => {
const container = page.locator('#rectangular');
await expect(container).toHaveScreenshot(screenshot(`chip-rectangular`));
});
});
});
});

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8" />
<title>Chip - Shape</title>
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
/>
<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>
<ion-app>
<ion-content>
<h2>Chip - Shape</h2>
<h3>Shapes</h3>
<p>
<ion-chip id="default">
<ion-label>Default</ion-label>
</ion-chip>
<ion-chip id="round" shape="round">
<ion-label>Round</ion-label>
</ion-chip>
<ion-chip id="rectangular" shape="rectangular">
<ion-label>Rectangular</ion-label>
</ion-chip>
</p>
</ion-content>
</ion-app>
<style>
ion-content {
--background: #222;
}
h2,
h3 {
color: #fff;
padding-left: 16px;
}
p {
padding-left: 8px;
}
ion-chip + ion-chip {
margin-inline-start: 16px;
}
</style>
</body>
</html>

View File

@@ -41,3 +41,25 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, c
});
});
});
configs({ modes: ['ionic-md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
/**
* This behavior only applies to Ionic Theme.
*/
test.describe(title('chip: focus state'), () => {
test('should render focus state', async ({ page }) => {
await page.setContent(
`<div id="container" class="ion-padding">
<ion-chip class="ion-focused">
<ion-label>Focused</ion-label>
</ion-chip>
</div>`,
config
);
const chip = page.locator('#container');
await expect(chip).toHaveScreenshot(screenshot(`chip-focused`));
});
});
});

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -51,6 +51,19 @@
</ion-chip>
</p>
<h3>Shapes</h3>
<p>
<ion-chip shape="soft">
<ion-label>Soft</ion-label>
</ion-chip>
<ion-chip shape="round">
<ion-label>Round</ion-label>
</ion-chip>
<ion-chip shape="rectangular">
<ion-label>Rectangular</ion-label>
</ion-chip>
</p>
<h3>With Icon</h3>
<p>
<ion-chip>

View File

@@ -550,14 +550,14 @@ setting the checked property.
@ProxyCmp({
inputs: ['color', 'disabled', 'mode', 'outline', 'theme']
inputs: ['color', 'disabled', 'mode', 'outline', 'shape', 'theme']
})
@Component({
selector: 'ion-chip',
changeDetection: ChangeDetectionStrategy.OnPush,
template: '<ng-content></ng-content>',
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
inputs: ['color', 'disabled', 'mode', 'outline', 'theme'],
inputs: ['color', 'disabled', 'mode', 'outline', 'shape', 'theme'],
})
export class IonChip {
protected el: HTMLElement;

View File

@@ -613,14 +613,14 @@ export declare interface IonCardTitle extends Components.IonCardTitle {}
@ProxyCmp({
defineCustomElementFn: defineIonChip,
inputs: ['color', 'disabled', 'mode', 'outline', 'theme']
inputs: ['color', 'disabled', 'mode', 'outline', 'shape', 'theme']
})
@Component({
selector: 'ion-chip',
changeDetection: ChangeDetectionStrategy.OnPush,
template: '<ng-content></ng-content>',
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
inputs: ['color', 'disabled', 'mode', 'outline', 'theme'],
inputs: ['color', 'disabled', 'mode', 'outline', 'shape', 'theme'],
standalone: true
})
export class IonChip {

View File

@@ -228,7 +228,8 @@ export const IonCheckbox = /*@__PURE__*/ defineContainer<JSX.IonCheckbox, JSX.Io
export const IonChip = /*@__PURE__*/ defineContainer<JSX.IonChip>('ion-chip', defineIonChip, [
'color',
'outline',
'disabled'
'disabled',
'shape'
]);