Skip to content

Commit 3e68056

Browse files
feat(item-divider): add recipe and tokens (#31009)
Issue number: internal Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com>
1 parent 863c21f commit 3e68056

38 files changed

Lines changed: 1480 additions & 438 deletions

BREAKING.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ This is a comprehensive list of the breaking changes introduced in the major ver
2020
- [Card](#version-9x-card)
2121
- [Chip](#version-9x-chip)
2222
- [Grid](#version-9x-grid)
23+
- [Item Divider](#version-9x-item-divider)
2324
- [Spinner](#version-9x-spinner)
2425

2526
<h2 id="version-9x-global-styles">Global Styles</h2>
@@ -157,6 +158,21 @@ To reorder two columns where column 1 has `size="9" push="3"` and column 2 has `
157158
</ion-grid>
158159
```
159160

161+
<h4 id="version-9x-item-divider">Item Divider</h4>
162+
163+
- Component CSS variables have been removed. The component now utilizes the centralized Ionic Theming system. Global updates should be managed via the theme tokens file, while component-specific overrides are handled through localized CSS variables.
164+
- `--background` is replaced by `IonItemDivider.background` for global styles and `--ion-item-divider-background` for component-specific overrides.
165+
- `--color` is replaced by `IonItemDivider.color` for global styles and `--ion-item-divider-color` for component-specific overrides.
166+
- `--padding-top` is replaced by `IonItemDivider.padding.top` for global styles and `--ion-item-divider-padding-top` for component-specific overrides.
167+
- `--padding-end` is replaced by `IonItemDivider.padding.end` for global styles and `--ion-item-divider-padding-end` for component-specific overrides.
168+
- `--padding-bottom` is replaced by `IonItemDivider.padding.bottom` for global styles and `--ion-item-divider-padding-bottom` for component-specific overrides.
169+
- `--padding-start` is replaced by `IonItemDivider.padding.start` for global styles and `--ion-item-divider-padding-start` for component-specific overrides.
170+
- `--inner-padding-top` is replaced by `IonItemDivider.inner.padding.top` for global styles and `--ion-item-divider-inner-padding-top` for component-specific overrides.
171+
- `--inner-padding-end` is replaced by `IonItemDivider.inner.padding.end` for global styles and `--ion-item-divider-inner-padding-end` for component-specific overrides.
172+
- `--inner-padding-bottom` is replaced by `IonItemDivider.inner.padding.bottom` for global styles and `--ion-item-divider-inner-padding-bottom` for component-specific overrides.
173+
- `--inner-padding-start` is replaced by `IonItemDivider.inner.padding.start` for global styles and `--ion-item-divider-inner-padding-start` for component-specific overrides.
174+
- Specific theme classes (e.g., `ion-item-divider.md`) are no longer supported. Style modifications based on the active theme must be implemented using theme tokens rather than direct class targeting.
175+
160176
<h4 id="version-9x-spinner">Spinner</h4>
161177

162178
- Component CSS variables have been removed. The component now utilizes the centralized Ionic Theming system. Global updates should be managed via the theme tokens file, while component-specific overrides are handled through localized CSS variables.

core/api.txt

Lines changed: 75 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,37 +1334,81 @@ ion-item-divider,shadow
13341334
ion-item-divider,prop,color,"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string & Record<never, never> | undefined,undefined,false,true
13351335
ion-item-divider,prop,mode,"ios" | "md",undefined,false,false
13361336
ion-item-divider,prop,sticky,boolean,false,false,false
1337-
ion-item-divider,prop,theme,"ios" | "md" | "ionic",undefined,false,false
1338-
ion-item-divider,css-prop,--background,ionic
1339-
ion-item-divider,css-prop,--background,ios
1340-
ion-item-divider,css-prop,--background,md
1341-
ion-item-divider,css-prop,--color,ionic
1342-
ion-item-divider,css-prop,--color,ios
1343-
ion-item-divider,css-prop,--color,md
1344-
ion-item-divider,css-prop,--inner-padding-bottom,ionic
1345-
ion-item-divider,css-prop,--inner-padding-bottom,ios
1346-
ion-item-divider,css-prop,--inner-padding-bottom,md
1347-
ion-item-divider,css-prop,--inner-padding-end,ionic
1348-
ion-item-divider,css-prop,--inner-padding-end,ios
1349-
ion-item-divider,css-prop,--inner-padding-end,md
1350-
ion-item-divider,css-prop,--inner-padding-start,ionic
1351-
ion-item-divider,css-prop,--inner-padding-start,ios
1352-
ion-item-divider,css-prop,--inner-padding-start,md
1353-
ion-item-divider,css-prop,--inner-padding-top,ionic
1354-
ion-item-divider,css-prop,--inner-padding-top,ios
1355-
ion-item-divider,css-prop,--inner-padding-top,md
1356-
ion-item-divider,css-prop,--padding-bottom,ionic
1357-
ion-item-divider,css-prop,--padding-bottom,ios
1358-
ion-item-divider,css-prop,--padding-bottom,md
1359-
ion-item-divider,css-prop,--padding-end,ionic
1360-
ion-item-divider,css-prop,--padding-end,ios
1361-
ion-item-divider,css-prop,--padding-end,md
1362-
ion-item-divider,css-prop,--padding-start,ionic
1363-
ion-item-divider,css-prop,--padding-start,ios
1364-
ion-item-divider,css-prop,--padding-start,md
1365-
ion-item-divider,css-prop,--padding-top,ionic
1366-
ion-item-divider,css-prop,--padding-top,ios
1367-
ion-item-divider,css-prop,--padding-top,md
1337+
ion-item-divider,css-prop,--ion-item-divider-avatar-end-slotted-margin-end
1338+
ion-item-divider,css-prop,--ion-item-divider-avatar-end-slotted-margin-start
1339+
ion-item-divider,css-prop,--ion-item-divider-avatar-height
1340+
ion-item-divider,css-prop,--ion-item-divider-avatar-margin-bottom
1341+
ion-item-divider,css-prop,--ion-item-divider-avatar-margin-end
1342+
ion-item-divider,css-prop,--ion-item-divider-avatar-margin-start
1343+
ion-item-divider,css-prop,--ion-item-divider-avatar-margin-top
1344+
ion-item-divider,css-prop,--ion-item-divider-avatar-start-slotted-margin-end
1345+
ion-item-divider,css-prop,--ion-item-divider-avatar-start-slotted-margin-start
1346+
ion-item-divider,css-prop,--ion-item-divider-avatar-width
1347+
ion-item-divider,css-prop,--ion-item-divider-background
1348+
ion-item-divider,css-prop,--ion-item-divider-border-bottom
1349+
ion-item-divider,css-prop,--ion-item-divider-color
1350+
ion-item-divider,css-prop,--ion-item-divider-end-slotted-margin-end
1351+
ion-item-divider,css-prop,--ion-item-divider-end-slotted-margin-start
1352+
ion-item-divider,css-prop,--ion-item-divider-font-size
1353+
ion-item-divider,css-prop,--ion-item-divider-font-weight
1354+
ion-item-divider,css-prop,--ion-item-divider-icon-default-color
1355+
ion-item-divider,css-prop,--ion-item-divider-icon-end-slotted-margin-bottom
1356+
ion-item-divider,css-prop,--ion-item-divider-icon-end-slotted-margin-end
1357+
ion-item-divider,css-prop,--ion-item-divider-icon-end-slotted-margin-start
1358+
ion-item-divider,css-prop,--ion-item-divider-icon-end-slotted-margin-top
1359+
ion-item-divider,css-prop,--ion-item-divider-icon-font-size
1360+
ion-item-divider,css-prop,--ion-item-divider-icon-semantic-default-color
1361+
ion-item-divider,css-prop,--ion-item-divider-icon-start-slotted-margin-bottom
1362+
ion-item-divider,css-prop,--ion-item-divider-icon-start-slotted-margin-end
1363+
ion-item-divider,css-prop,--ion-item-divider-icon-start-slotted-margin-start
1364+
ion-item-divider,css-prop,--ion-item-divider-icon-start-slotted-margin-top
1365+
ion-item-divider,css-prop,--ion-item-divider-inner-padding-bottom
1366+
ion-item-divider,css-prop,--ion-item-divider-inner-padding-end
1367+
ion-item-divider,css-prop,--ion-item-divider-inner-padding-start
1368+
ion-item-divider,css-prop,--ion-item-divider-inner-padding-top
1369+
ion-item-divider,css-prop,--ion-item-divider-label-margin-bottom
1370+
ion-item-divider,css-prop,--ion-item-divider-label-margin-end
1371+
ion-item-divider,css-prop,--ion-item-divider-label-margin-start
1372+
ion-item-divider,css-prop,--ion-item-divider-label-margin-top
1373+
ion-item-divider,css-prop,--ion-item-divider-min-height
1374+
ion-item-divider,css-prop,--ion-item-divider-note-align-self
1375+
ion-item-divider,css-prop,--ion-item-divider-note-font-size
1376+
ion-item-divider,css-prop,--ion-item-divider-note-margin-bottom
1377+
ion-item-divider,css-prop,--ion-item-divider-note-margin-end
1378+
ion-item-divider,css-prop,--ion-item-divider-note-margin-start
1379+
ion-item-divider,css-prop,--ion-item-divider-note-margin-top
1380+
ion-item-divider,css-prop,--ion-item-divider-note-padding-bottom
1381+
ion-item-divider,css-prop,--ion-item-divider-note-padding-end
1382+
ion-item-divider,css-prop,--ion-item-divider-note-padding-start
1383+
ion-item-divider,css-prop,--ion-item-divider-note-padding-top
1384+
ion-item-divider,css-prop,--ion-item-divider-padding-bottom
1385+
ion-item-divider,css-prop,--ion-item-divider-padding-end
1386+
ion-item-divider,css-prop,--ion-item-divider-padding-start
1387+
ion-item-divider,css-prop,--ion-item-divider-padding-top
1388+
ion-item-divider,css-prop,--ion-item-divider-paragraph-color
1389+
ion-item-divider,css-prop,--ion-item-divider-paragraph-font-size
1390+
ion-item-divider,css-prop,--ion-item-divider-paragraph-margin-bottom
1391+
ion-item-divider,css-prop,--ion-item-divider-paragraph-margin-end
1392+
ion-item-divider,css-prop,--ion-item-divider-paragraph-margin-start
1393+
ion-item-divider,css-prop,--ion-item-divider-paragraph-margin-top
1394+
ion-item-divider,css-prop,--ion-item-divider-paragraph-overflow
1395+
ion-item-divider,css-prop,--ion-item-divider-paragraph-text-overflow
1396+
ion-item-divider,css-prop,--ion-item-divider-paragraph-trailing-margin-bottom
1397+
ion-item-divider,css-prop,--ion-item-divider-paragraph-trailing-margin-end
1398+
ion-item-divider,css-prop,--ion-item-divider-paragraph-trailing-margin-start
1399+
ion-item-divider,css-prop,--ion-item-divider-paragraph-trailing-margin-top
1400+
ion-item-divider,css-prop,--ion-item-divider-start-slotted-margin-end
1401+
ion-item-divider,css-prop,--ion-item-divider-start-slotted-margin-start
1402+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-end-slotted-margin-end
1403+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-end-slotted-margin-start
1404+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-height
1405+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-margin-bottom
1406+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-margin-end
1407+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-margin-start
1408+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-margin-top
1409+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-start-slotted-margin-end
1410+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-start-slotted-margin-start
1411+
ion-item-divider,css-prop,--ion-item-divider-thumbnail-width
13681412

13691413
ion-item-group,none
13701414
ion-item-group,prop,mode,"ios" | "md",undefined,false,false

core/src/components.d.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1924,10 +1924,6 @@ export namespace Components {
19241924
* @default false
19251925
*/
19261926
"sticky": boolean;
1927-
/**
1928-
* The theme determines the visual appearance of the component.
1929-
*/
1930-
"theme"?: "ios" | "md" | "ionic";
19311927
}
19321928
interface IonItemGroup {
19331929
/**
@@ -7918,10 +7914,6 @@ declare namespace LocalJSX {
79187914
* @default false
79197915
*/
79207916
"sticky"?: boolean;
7921-
/**
7922-
* The theme determines the visual appearance of the component.
7923-
*/
7924-
"theme"?: "ios" | "md" | "ionic";
79257917
}
79267918
interface IonItemGroup {
79277919
/**

core/src/components/chip/chip.interfaces.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ type IonChipShapeDefinition = {
8585
};
8686

8787
type IonChipMediaDefinition = {
88-
// Styles for the media component only if it is the first element in the slot
88+
/** Targets `:first-child` */
8989
leading?: {
9090
margin?: IonMargin;
9191
};
9292

93-
// Styles for the media component only if it is the last element in the slot
93+
/** Targets `:last-child` */
9494
trailing?: {
9595
margin?: IonMargin;
9696
};

core/src/components/chip/chip.scss

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
@use "../../themes/mixins" as mixins;
2-
@use "../../themes/functions.color" as colors;
32

43
// Chip: Common Styles
54
// --------------------------------------------------
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
import type { IonPadding, IonMargin } from '../../themes/themes.interfaces';
2+
3+
export type IonItemDividerRecipe = {
4+
background?: string;
5+
color?: string;
6+
minHeight?: string;
7+
8+
padding?: IonPadding;
9+
10+
inner?: {
11+
padding?: IonPadding;
12+
};
13+
14+
border?: {
15+
bottom?: string;
16+
};
17+
18+
font?: {
19+
size?: string;
20+
weight?: string;
21+
};
22+
23+
/** Targets `[slot="start"]` */
24+
start?: {
25+
/** Targets `::slotted([slot="start"])` */
26+
slotted?: {
27+
margin?: IonMargin;
28+
};
29+
};
30+
31+
/** Targets `[slot="end"]` */
32+
end?: {
33+
/** Targets `::slotted([slot="end"])` */
34+
slotted?: {
35+
margin?: IonMargin;
36+
};
37+
};
38+
39+
/** Targets `::slotted(ion-label)` */
40+
label?: {
41+
margin?: IonMargin;
42+
};
43+
44+
/** Targets `::slotted(ion-icon)` */
45+
icon?: {
46+
font?: {
47+
size?: string;
48+
};
49+
50+
/** Targets `[slot="start"]` */
51+
start?: {
52+
/** Targets `::slotted(ion-icon[slot="start"])` */
53+
slotted?: {
54+
margin?: IonMargin;
55+
};
56+
};
57+
58+
/** Targets `[slot="end"]` */
59+
end?: {
60+
/** Targets `::slotted(ion-icon[slot="end"])` */
61+
slotted?: {
62+
margin?: IonMargin;
63+
};
64+
};
65+
66+
/** Default non-semantic states */
67+
default?: {
68+
color?: string;
69+
};
70+
71+
/** Any of the semantic colors like primary, secondary, etc. */
72+
semantic?: {
73+
default?: {
74+
color?: string;
75+
};
76+
};
77+
};
78+
79+
/** Targets `::slotted(ion-note)` */
80+
note?: {
81+
align?: {
82+
self?: string;
83+
};
84+
85+
font?: {
86+
size?: string;
87+
};
88+
89+
margin?: IonMargin;
90+
padding?: IonPadding;
91+
};
92+
93+
/** Targets `::slotted(ion-avatar)` */
94+
avatar?: {
95+
height?: string;
96+
width?: string;
97+
98+
margin?: IonMargin;
99+
100+
/** Targets `[slot="start"]` */
101+
start?: {
102+
/** Targets `::slotted(ion-avatar[slot="start"])` */
103+
slotted?: {
104+
margin?: IonMargin;
105+
};
106+
};
107+
108+
/** Targets `[slot="end"]` */
109+
end?: {
110+
/** Targets `::slotted(ion-avatar[slot="end"])` */
111+
slotted?: {
112+
margin?: IonMargin;
113+
};
114+
};
115+
};
116+
117+
/** Targets `::slotted(ion-thumbnail)` */
118+
thumbnail?: {
119+
height?: string;
120+
width?: string;
121+
122+
margin?: IonMargin;
123+
124+
/** Targets `[slot="start"]` */
125+
start?: {
126+
/** Targets `::slotted(ion-thumbnail[slot="start"])` */
127+
slotted?: {
128+
margin?: IonMargin;
129+
};
130+
};
131+
132+
/** Targets `[slot="end"]` */
133+
end?: {
134+
/** Targets `::slotted(ion-thumbnail[slot="end"])` */
135+
slotted?: {
136+
margin?: IonMargin;
137+
};
138+
};
139+
};
140+
141+
/** Targets `::slotted(p)` */
142+
paragraph?: {
143+
color?: string;
144+
overflow?: string;
145+
146+
margin?: IonMargin;
147+
148+
font?: {
149+
size?: string;
150+
};
151+
152+
text?: {
153+
overflow?: string;
154+
};
155+
156+
/** Targets `::slotted(p:last-child)` */
157+
trailing?: {
158+
margin?: IonMargin;
159+
};
160+
};
161+
};

0 commit comments

Comments
 (0)