diff --git a/core/api.txt b/core/api.txt index 9551b242b94..23d02b891b0 100644 --- a/core/api.txt +++ b/core/api.txt @@ -1244,37 +1244,16 @@ ion-item-divider,shadow ion-item-divider,prop,color,"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string & Record | undefined,undefined,false,true ion-item-divider,prop,mode,"ios" | "md",undefined,false,false ion-item-divider,prop,sticky,boolean,false,false,false -ion-item-divider,prop,theme,"ios" | "md" | "ionic",undefined,false,false -ion-item-divider,css-prop,--background,ionic -ion-item-divider,css-prop,--background,ios -ion-item-divider,css-prop,--background,md -ion-item-divider,css-prop,--color,ionic -ion-item-divider,css-prop,--color,ios -ion-item-divider,css-prop,--color,md -ion-item-divider,css-prop,--inner-padding-bottom,ionic -ion-item-divider,css-prop,--inner-padding-bottom,ios -ion-item-divider,css-prop,--inner-padding-bottom,md -ion-item-divider,css-prop,--inner-padding-end,ionic -ion-item-divider,css-prop,--inner-padding-end,ios -ion-item-divider,css-prop,--inner-padding-end,md -ion-item-divider,css-prop,--inner-padding-start,ionic -ion-item-divider,css-prop,--inner-padding-start,ios -ion-item-divider,css-prop,--inner-padding-start,md -ion-item-divider,css-prop,--inner-padding-top,ionic -ion-item-divider,css-prop,--inner-padding-top,ios -ion-item-divider,css-prop,--inner-padding-top,md -ion-item-divider,css-prop,--padding-bottom,ionic -ion-item-divider,css-prop,--padding-bottom,ios -ion-item-divider,css-prop,--padding-bottom,md -ion-item-divider,css-prop,--padding-end,ionic -ion-item-divider,css-prop,--padding-end,ios -ion-item-divider,css-prop,--padding-end,md -ion-item-divider,css-prop,--padding-start,ionic -ion-item-divider,css-prop,--padding-start,ios -ion-item-divider,css-prop,--padding-start,md -ion-item-divider,css-prop,--padding-top,ionic -ion-item-divider,css-prop,--padding-top,ios -ion-item-divider,css-prop,--padding-top,md +ion-item-divider,css-prop,--background +ion-item-divider,css-prop,--color +ion-item-divider,css-prop,--inner-padding-bottom +ion-item-divider,css-prop,--inner-padding-end +ion-item-divider,css-prop,--inner-padding-start +ion-item-divider,css-prop,--inner-padding-top +ion-item-divider,css-prop,--padding-bottom +ion-item-divider,css-prop,--padding-end +ion-item-divider,css-prop,--padding-start +ion-item-divider,css-prop,--padding-top ion-item-group,none ion-item-group,prop,mode,"ios" | "md",undefined,false,false diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 5bc8b061e63..b779cda88b2 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -1920,10 +1920,6 @@ export namespace Components { * @default false */ "sticky": boolean; - /** - * The theme determines the visual appearance of the component. - */ - "theme"?: "ios" | "md" | "ionic"; } interface IonItemGroup { /** @@ -7918,10 +7914,6 @@ declare namespace LocalJSX { * @default false */ "sticky"?: boolean; - /** - * The theme determines the visual appearance of the component. - */ - "theme"?: "ios" | "md" | "ionic"; } interface IonItemGroup { /** diff --git a/core/src/components/item-divider/item-divider.interfaces.ts b/core/src/components/item-divider/item-divider.interfaces.ts new file mode 100644 index 00000000000..64bdde19b0c --- /dev/null +++ b/core/src/components/item-divider/item-divider.interfaces.ts @@ -0,0 +1,201 @@ +import type { IonPadding, IonMargin } from '../../themes/themes.interfaces'; + +export type IonItemDividerRecipe = { + background?: string; + color?: string; + minHeight?: string; + + padding?: IonPadding; + + inner?: { + padding?: IonPadding; + }; + + border?: { + bottom?: string; + }; + + font?: { + size?: string; + weight?: string; + }; + + leading?: { + // Targets `:host([slot="start"])` + anchor?: { + margin?: IonMargin; + }; + + // Targets `::slotted([slot="start"])` + edge?: { + margin?: IonMargin; + }; + }; + + trailing?: { + // Targets `::slotted([slot="end"])` + edge?: { + margin?: IonMargin; + }; + }; + + label?: { + margin?: IonMargin; + }; + + icon?: { + font?: { + size?: string; + }; + + leading?: { + // Targets `::slotted([slot="start"])` + edge?: { + margin?: IonMargin; + }; + }; + + trailing?: { + // Targets `::slotted([slot="end"])` + edge?: { + margin?: IonMargin; + }; + }; + + // Default non-semantic states + default?: { + color?: string; + }; + + // Any of the semantic colors like primary, secondary, etc. + semantic?: { + default?: { + color?: string; + }; + }; + }; + + note?: { + align?: { + self?: string; + }; + + font?: { + size?: string; + }; + + margin?: IonMargin; + padding?: IonPadding; + }; + + avatar?: { + height?: string; + width?: string; + + margin?: IonMargin; + + leading?: { + // Targets `::slotted([slot="start"])` + edge?: { + margin?: IonMargin; + }; + }; + + trailing?: { + // Targets `::slotted([slot="end"])` + edge?: { + margin?: IonMargin; + }; + }; + }; + + thumbnail?: { + height?: string; + width?: string; + + margin?: IonMargin; + + leading?: { + // Targets `::slotted([slot="start"])` + edge?: { + margin?: IonMargin; + }; + }; + + trailing?: { + // Targets `::slotted([slot="end"])` + edge?: { + margin?: IonMargin; + }; + }; + }; + + header1?: { + margin?: IonMargin; + }; + + header2?: { + margin?: IonMargin; + + // Targets `:last-child` + trailing?: { + margin?: IonMargin; + }; + }; + + header3?: { + margin?: IonMargin; + + // Targets `:last-child` + trailing?: { + margin?: IonMargin; + }; + }; + + header4?: { + margin?: IonMargin; + + // Targets `:last-child` + trailing?: { + margin?: IonMargin; + }; + }; + + header5?: { + margin?: IonMargin; + + // Targets `:last-child` + trailing?: { + margin?: IonMargin; + }; + }; + + header6?: { + margin?: IonMargin; + + // Targets `:last-child` + trailing?: { + margin?: IonMargin; + }; + }; + + paragraph?: { + color?: string; + overflow?: string; + + margin?: IonMargin; + + font?: { + size?: string; + }; + + text?: { + overflow?: string; + }; + + // Targets `:last-child` + trailing?: { + margin?: IonMargin; + }; + }; +}; diff --git a/core/src/components/item-divider/item-divider.ios.scss b/core/src/components/item-divider/item-divider.ios.scss deleted file mode 100644 index d6d9007011e..00000000000 --- a/core/src/components/item-divider/item-divider.ios.scss +++ /dev/null @@ -1,98 +0,0 @@ -@import "./item-divider"; -@import "./item-divider.ios.vars"; - -// iOS Item Divider -// -------------------------------------------------- - -:host { - --background: #{$item-divider-ios-background}; - --color: #{$item-divider-ios-color}; - --padding-start: #{$item-divider-ios-padding-start}; - --inner-padding-end: #{$item-divider-ios-padding-end * 0.5}; - - @include border-radius(0); - - position: relative; - - min-height: $item-divider-ios-min-height; - - font-size: $item-divider-ios-font-size; - - font-weight: $item-divider-ios-font-weight; -} - -// iOS Item Divider Slots -// -------------------------------------------------- - -:host([slot="start"]) { - @include margin( - $item-ios-slot-start-margin-top, - $item-ios-slot-start-margin-end, - $item-ios-slot-start-margin-bottom, - $item-ios-slot-start-margin-start - ); -} - -:host([slot="end"]) { - @include margin( - $item-ios-slot-end-margin-top, - $item-ios-slot-end-margin-end, - $item-ios-slot-end-margin-bottom, - $item-ios-slot-end-margin-start - ); -} - -::slotted(ion-icon[slot="start"]), -::slotted(ion-icon[slot="end"]) { - @include margin( - $item-ios-icon-slot-margin-top, - $item-ios-icon-slot-margin-end, - $item-ios-icon-slot-margin-bottom, - $item-ios-icon-slot-margin-start - ); -} - -// iOS Item Divider Content -// -------------------------------------------------- - -::slotted(h1) { - @include margin(0, 0, 2px); -} - -::slotted(h2) { - @include margin(0, 0, 2px); -} - -::slotted(h3), -::slotted(h4), -::slotted(h5), -::slotted(h6) { - @include margin(0, 0, 3px); -} - -::slotted(p) { - @include margin( - $item-ios-paragraph-margin-top, - $item-ios-paragraph-margin-end, - $item-ios-paragraph-margin-bottom, - $item-ios-paragraph-margin-start - ); - - color: $item-ios-paragraph-text-color; - - font-size: $item-ios-paragraph-font-size; - - line-height: normal; - - text-overflow: inherit; - - overflow: inherit; -} - -::slotted(h2:last-child) ::slotted(h3:last-child), -::slotted(h4:last-child), -::slotted(h5:last-child), -::slotted(h6:last-child), -::slotted(p:last-child) { - @include margin(null, null, 0, null); -} diff --git a/core/src/components/item-divider/item-divider.ios.vars.scss b/core/src/components/item-divider/item-divider.ios.vars.scss deleted file mode 100644 index 89901c1f13e..00000000000 --- a/core/src/components/item-divider/item-divider.ios.vars.scss +++ /dev/null @@ -1,26 +0,0 @@ -@import "../../themes/native/native.globals.ios"; -@import "../item/item.ios.vars"; - -// iOS Item Divider -// -------------------------------------------------- - -/// @prop - Minimum height for the divider -$item-divider-ios-min-height: 28px; - -/// @prop - Font size of the item -$item-divider-ios-font-size: dynamic-font(17px); - -/// @prop - Font weight of the item -$item-divider-ios-font-weight: 600; - -/// @prop - Background for the divider -$item-divider-ios-background: $background-color-step-100; - -/// @prop - Color for the divider -$item-divider-ios-color: $text-color-step-150; - -/// @prop - Padding start for the divider -$item-divider-ios-padding-start: $item-ios-padding-start; - -/// @prop - Padding end for the divider -$item-divider-ios-padding-end: $item-ios-padding-end; diff --git a/core/src/components/item-divider/item-divider.md.scss b/core/src/components/item-divider/item-divider.md.scss deleted file mode 100644 index 02ead8975e6..00000000000 --- a/core/src/components/item-divider/item-divider.md.scss +++ /dev/null @@ -1,160 +0,0 @@ -@use "sass:math"; -@import "./item-divider"; -@import "./item-divider.md.vars"; - -// Material Design Item Divider -// -------------------------------------------------- - -:host { - --background: #{$item-divider-md-background}; - --color: #{$item-divider-md-color}; - --padding-start: #{$item-divider-md-padding-start}; - --inner-padding-end: #{$item-divider-md-padding-end}; - - min-height: $item-divider-md-min-height; - - border-bottom: $item-divider-md-border-bottom; - - font-size: dynamic-font($item-divider-md-font-size); -} - -// Material Design Item Divider Slots -// -------------------------------------------------- - -::slotted([slot="start"]) { - @include margin-horizontal($item-md-start-slot-margin-start, $item-md-start-slot-margin-end); -} - -::slotted([slot="end"]) { - @include margin-horizontal($item-md-end-slot-margin-start, $item-md-end-slot-margin-end); -} - -// Material Design Slotted Label -// -------------------------------------------------- - -::slotted(ion-label) { - @include margin(13px, 0, 10px, 0); -} - -// Material Design Slotted Icon -// -------------------------------------------------- - -::slotted(ion-icon) { - color: $item-md-icon-slot-color; - - // The icon's font size should use em units to support - // font scaling but evaluate to 24px at 100% font size. - // The value in em units is calculated by dividing - // the icon's font size in pixels by the item divider's - // font size in pixels. - // e.g. 24px / 14px = 1.7142857143em - font-size: math.div($item-md-icon-slot-font-size, $item-divider-md-font-size) * 1em; -} - -:host(.ion-color) ::slotted(ion-icon) { - color: current-color(contrast); -} - -::slotted(ion-icon[slot]) { - @include margin( - $item-md-icon-slot-margin-top, - $item-md-icon-slot-margin-end, - $item-md-icon-slot-margin-bottom, - $item-md-icon-slot-margin-start - ); -} - -::slotted(ion-icon[slot="start"]) { - @include margin-horizontal($item-md-icon-start-slot-margin-start, $item-md-icon-start-slot-margin-end); -} - -::slotted(ion-icon[slot="end"]) { - @include margin-horizontal($item-md-icon-end-slot-margin-start, $item-md-icon-end-slot-margin-end); -} - -// Material Design Slotted Note -// -------------------------------------------------- - -::slotted(ion-note) { - @include margin(0); - - align-self: flex-start; - - font-size: $item-md-note-slot-font-size; -} - -::slotted(ion-note[slot]) { - @include padding( - $item-md-note-slot-padding-top, - $item-md-note-slot-padding-end, - $item-md-note-slot-padding-bottom, - $item-md-note-slot-padding-start - ); -} - -// Material Design Item Divider Avatar -// -------------------------------------------------- - -::slotted(ion-avatar) { - width: $item-md-avatar-width; - height: $item-md-avatar-height; -} - -// Material Design Item Divider Thumbnail -// -------------------------------------------------- - -::slotted(ion-thumbnail) { - --size: #{$item-md-thumbnail-size}; -} - -// Material Design Item Divider Avatar/Thumbnail -// -------------------------------------------------- - -::slotted(ion-avatar), -::slotted(ion-thumbnail) { - @include margin( - $item-md-media-slot-margin-top, - $item-md-media-slot-margin-end, - $item-md-media-slot-margin-bottom, - $item-md-media-slot-margin-start - ); -} - -::slotted(ion-avatar[slot="start"]), -::slotted(ion-thumbnail[slot="start"]) { - @include margin-horizontal($item-md-media-start-slot-margin-start, $item-md-media-start-slot-margin-end); -} - -::slotted(ion-avatar[slot="end"]), -::slotted(ion-thumbnail[slot="end"]) { - @include margin-horizontal($item-md-media-end-slot-margin-start, $item-md-media-end-slot-margin-end); -} - -// Material Design Item Divider Content -// -------------------------------------------------- - -::slotted(h1) { - @include margin(0, 0, 2px); -} - -::slotted(h2) { - @include margin(2px, 0); -} - -::slotted(h3, h4, h5, h6) { - @include margin(2px, 0); -} - -::slotted(p) { - @include margin(0, 0, 2px); - - color: $item-md-paragraph-text-color; - - font-size: dynamic-font(14px); - - line-height: normal; - - text-overflow: inherit; - - overflow: inherit; -} diff --git a/core/src/components/item-divider/item-divider.md.vars.scss b/core/src/components/item-divider/item-divider.md.vars.scss deleted file mode 100644 index 97a58f09b24..00000000000 --- a/core/src/components/item-divider/item-divider.md.vars.scss +++ /dev/null @@ -1,26 +0,0 @@ -@import "../../themes/native/native.globals.md"; -@import "../item/item.md.vars"; - -// Material Design Item Divider -// -------------------------------------------------- - -/// @prop - Minimum height for the divider -$item-divider-md-min-height: 30px; - -/// @prop - Color for the divider -$item-divider-md-color: $text-color-step-600; - -/// @prop - Background for the divider -$item-divider-md-background: $background-color; - -/// @prop - Font size for the divider -$item-divider-md-font-size: 14px; - -/// @prop - Border bottom for the divider -$item-divider-md-border-bottom: 1px solid $item-md-border-color; - -/// @prop - Padding start for the divider -$item-divider-md-padding-start: $item-md-padding-start; - -/// @prop - Padding end for the divider -$item-divider-md-padding-end: $item-md-padding-end; diff --git a/core/src/components/item-divider/item-divider.scss b/core/src/components/item-divider/item-divider.scss index aaae4b93d40..6a8f5b2acfb 100644 --- a/core/src/components/item-divider/item-divider.scss +++ b/core/src/components/item-divider/item-divider.scss @@ -1,6 +1,7 @@ -@import "../../themes/native/native.globals"; +@use "../../themes/mixins" as mixins; +@use "../../themes/functions.color" as colors; -// Item Divider +// Item Divider: Common Styles // -------------------------------------------------- :host { @@ -19,26 +20,29 @@ * @prop --inner-padding-bottom: Bottom inner padding of the item divider * @prop --inner-padding-start: Start inner padding of the item divider */ - --padding-top: 0px; - --padding-end: 0px; - --padding-bottom: 0px; - --padding-start: 0px; - --inner-padding-top: 0px; - --inner-padding-end: 0px; - --inner-padding-bottom: 0px; - --inner-padding-start: 0px; - - @include font-smoothing(); - @include margin(0); - @include padding(var(--padding-top), null, var(--padding-bottom), null); + --background: var(--ion-item-divider-background); + --color: var(--ion-item-divider-color); + --padding-top: var(--ion-item-divider-padding-top); + --padding-end: var(--ion-item-divider-padding-end); + --padding-bottom: var(--ion-item-divider-padding-bottom); + --padding-start: var(--ion-item-divider-padding-start); + --inner-padding-top: var(--ion-item-divider-inner-padding-top); + --inner-padding-end: var(--ion-item-divider-inner-padding-end); + --inner-padding-bottom: var(--ion-item-divider-inner-padding-bottom); + --inner-padding-start: var(--ion-item-divider-inner-padding-start); + + @include mixins.font-smoothing(); + @include mixins.margin(0); + @include mixins.padding(var(--padding-top), null, var(--padding-bottom), null); + @include mixins.border-radius(0); /* stylelint-disable */ - @include ltr() { + @include mixins.ltr() { padding-right: var(--padding-end); padding-left: calc(var(--padding-start) + var(--ion-safe-area-left, 0px)); } - @include rtl() { + @include mixins.rtl() { padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px)); padding-left: var(--padding-end); } @@ -51,19 +55,28 @@ width: 100%; + min-height: var(--ion-item-divider-min-height); + + // TODO(FW-6848): remove border-bottom and replace it with the `ion-divider` + border-bottom: var(--ion-item-divider-border-bottom); + background: var(--background); color: var(--color); - font-family: $font-family-base; + font-family: var(--ion-font-family, inherit); + font-size: var(--ion-item-divider-font-size); + font-weight: var(--ion-item-divider-font-weight); overflow: hidden; - z-index: $z-index-item-divider; + + // + z-index: 100; box-sizing: border-box; } :host(.ion-color) { - background: current-color(base); - color: current-color(contrast); + background: colors.current-color("base"); + color: colors.current-color("contrast"); } :host(.item-divider-sticky) { @@ -72,16 +85,16 @@ } .item-divider-inner { - @include margin(0); - @include padding(var(--inner-padding-top), null, var(--inner-padding-bottom), null); + @include mixins.margin(0); + @include mixins.padding(var(--inner-padding-top), null, var(--inner-padding-bottom), null); /* stylelint-disable */ - @include ltr() { + @include mixins.ltr() { padding-right: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end)); padding-left: var(--inner-padding-start); } - @include rtl() { + @include mixins.rtl() { padding-right: var(--inner-padding-start); padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end)); } @@ -113,3 +126,277 @@ overflow: hidden; } + +// Item Divider Slots +// -------------------------------------------------- + +:host([slot="start"]) { + @include mixins.margin( + var(--ion-item-divider-leading-anchor-margin-top, revert-layer), + var(--ion-item-divider-leading-anchor-margin-end, revert-layer), + var(--ion-item-divider-leading-anchor-margin-bottom, revert-layer), + var(--ion-item-divider-leading-anchor-margin-start, revert-layer) + ); +} + +// Item Divider Slotted Elements +// --------------------------------------------- + +// Slotted Start +::slotted([slot="start"]) { + @include mixins.margin-horizontal( + var(--ion-item-divider-leading-edge-margin-start, revert-layer), + var(--ion-item-divider-leading-edge-margin-end, revert-layer) + ); // for ionic this should be 0 +} + +// Slotted End +::slotted([slot="end"]) { + @include mixins.margin-horizontal( + var(--ion-item-divider-trailing-edge-margin-start, revert-layer), + var(--ion-item-divider-trailing-edge-margin-end, revert-layer) + ); +} + +// Label +::slotted(ion-label) { + @include mixins.margin( + var(--ion-item-divider-label-margin-top), + var(--ion-item-divider-label-margin-end), + var(--ion-item-divider-label-margin-bottom), + var(--ion-item-divider-label-margin-start) + ); +} + +// Icon +::slotted(ion-icon) { + color: var(--ion-item-divider-icon-default-color); + + font-size: var(--ion-item-divider-icon-font-size); +} + +:host(.ion-color) ::slotted(ion-icon) { + color: var(--ion-item-divider-icon-semantic-default-color); +} + +::slotted(ion-icon[slot="start"]) { + @include mixins.margin( + var(--ion-item-divider-icon-leading-edge-margin-top, revert-layer), + var(--ion-item-divider-icon-leading-edge-margin-end, revert-layer), + var(--ion-item-divider-icon-leading-edge-margin-bottom, revert-layer), + var(--ion-item-divider-icon-leading-edge-margin-start, revert-layer) + ); +} + +::slotted(ion-icon[slot="end"]) { + @include mixins.margin( + var(--ion-item-divider-icon-trailing-edge-margin-top, revert-layer), + var(--ion-item-divider-icon-trailing-edge-margin-end, revert-layer), + var(--ion-item-divider-icon-trailing-edge-margin-bottom, revert-layer), + var(--ion-item-divider-icon-trailing-edge-margin-start, revert-layer) + ); +} + +// Note +::slotted(ion-note) { + @include mixins.margin( + var(--ion-item-divider-note-margin-top), + var(--ion-item-divider-note-margin-end), + var(--ion-item-divider-note-margin-bottom), + var(--ion-item-divider-note-margin-start) + ); + + align-self: flex-start; + + font-size: var(--ion-item-divider-note-font-size, revert-layer); +} + +::slotted(ion-note[slot]) { + @include mixins.padding( + var(--ion-item-divider-note-padding-top), + var(--ion-item-divider-note-padding-end), + var(--ion-item-divider-note-padding-bottom), + var(--ion-item-divider-note-padding-start) + ); +} + +// Avatar +::slotted(ion-avatar) { + @include mixins.margin( + var(--ion-item-divider-avatar-margin-top), + var(--ion-item-divider-avatar-margin-end), + var(--ion-item-divider-avatar-margin-bottom), + var(--ion-item-divider-avatar-margin-start) + ); + + width: var(--ion-item-divider-avatar-width, revert-layer); + height: var(--ion-item-divider-avatar-height, revert-layer); +} + +::slotted(ion-avatar[slot="start"]) { + @include mixins.margin-horizontal( + var(--ion-item-divider-avatar-leading-edge-margin-start), + var(--ion-item-divider-avatar-leading-edge-margin-end) + ); +} + +::slotted(ion-avatar[slot="end"]) { + @include mixins.margin-horizontal( + var(--ion-item-divider-avatar-trailing-edge-margin-start), + var(--ion-item-divider-avatar-trailing-edge-margin-end) + ); +} + +// Thumbnail +::slotted(ion-thumbnail) { + // TODO(FW-6862): separate width and height tokens for thumbnails + --size: var(--ion-item-divider-thumbnail-width); + + @include mixins.margin( + var(--ion-item-divider-thumbnail-margin-top), + var(--ion-item-divider-thumbnail-margin-end), + var(--ion-item-divider-thumbnail-margin-bottom), + var(--ion-item-divider-thumbnail-margin-start) + ); +} + +::slotted(ion-thumbnail[slot="start"]) { + @include mixins.margin-horizontal( + var(--ion-item-divider-thumbnail-leading-edge-margin-start), + var(--ion-item-divider-thumbnail-leading-edge-margin-end) + ); +} + +::slotted(ion-thumbnail[slot="end"]) { + @include mixins.margin-horizontal( + var(--ion-item-divider-thumbnail-trailing-edge-margin-start), + var(--ion-item-divider-thumbnail-trailing-edge-margin-end) + ); +} + +// Headers +::slotted(h1) { + @include mixins.margin( + var(--ion-item-divider-header1-margin-top), + var(--ion-item-divider-header1-margin-end), + var(--ion-item-divider-header1-margin-bottom), + var(--ion-item-divider-header1-margin-start) + ); +} + +::slotted(h2) { + @include mixins.margin( + var(--ion-item-divider-header2-margin-top), + var(--ion-item-divider-header2-margin-end), + var(--ion-item-divider-header2-margin-bottom), + var(--ion-item-divider-header2-margin-start) + ); +} + +::slotted(h2:last-child) { + @include mixins.margin( + var(--ion-item-divider-header2-trailing-margin-top), + var(--ion-item-divider-header2-trailing-margin-end), + var(--ion-item-divider-header2-trailing-margin-bottom), + var(--ion-item-divider-header2-trailing-margin-start) + ); +} + +::slotted(h3) { + @include mixins.margin( + var(--ion-item-divider-header3-margin-top), + var(--ion-item-divider-header3-margin-end), + var(--ion-item-divider-header3-margin-bottom), + var(--ion-item-divider-header3-margin-start) + ); +} + +::slotted(h3:last-child) { + @include mixins.margin( + var(--ion-item-divider-header3-trailing-margin-top), + var(--ion-item-divider-header3-trailing-margin-end), + var(--ion-item-divider-header3-trailing-margin-bottom), + var(--ion-item-divider-header3-trailing-margin-start) + ); +} + +::slotted(h4) { + @include mixins.margin( + var(--ion-item-divider-header4-margin-top), + var(--ion-item-divider-header4-margin-end), + var(--ion-item-divider-header4-margin-bottom), + var(--ion-item-divider-header4-margin-start) + ); +} + +::slotted(h4:last-child) { + @include mixins.margin( + var(--ion-item-divider-header4-trailing-margin-top), + var(--ion-item-divider-header4-trailing-margin-end), + var(--ion-item-divider-header4-trailing-margin-bottom), + var(--ion-item-divider-header4-trailing-margin-start) + ); +} + +::slotted(h5) { + @include mixins.margin( + var(--ion-item-divider-header5-margin-top), + var(--ion-item-divider-header5-margin-end), + var(--ion-item-divider-header5-margin-bottom), + var(--ion-item-divider-header5-margin-start) + ); +} + +::slotted(h5:last-child) { + @include mixins.margin( + var(--ion-item-divider-header5-trailing-margin-top), + var(--ion-item-divider-header5-trailing-margin-end), + var(--ion-item-divider-header5-trailing-margin-bottom), + var(--ion-item-divider-header5-trailing-margin-start) + ); +} + +::slotted(h6) { + @include mixins.margin( + var(--ion-item-divider-header6-margin-top), + var(--ion-item-divider-header6-margin-end), + var(--ion-item-divider-header6-margin-bottom), + var(--ion-item-divider-header6-margin-start) + ); +} + +::slotted(h6:last-child) { + @include mixins.margin( + var(--ion-item-divider-header6-trailing-margin-top), + var(--ion-item-divider-header6-trailing-margin-end), + var(--ion-item-divider-header6-trailing-margin-bottom), + var(--ion-item-divider-header6-trailing-margin-start) + ); +} + +// Paragraph +::slotted(p) { + @include mixins.margin( + var(--ion-item-divider-paragraph-margin-top), + var(--ion-item-divider-paragraph-margin-end), + var(--ion-item-divider-paragraph-margin-bottom), + var(--ion-item-divider-paragraph-margin-start) + ); + + color: var(--ion-item-divider-paragraph-color); + + font-size: var(--ion-item-divider-paragraph-font-size); + + text-overflow: var(--ion-item-divider-paragraph-text-overflow); + + overflow: var(--ion-item-divider-paragraph-overflow); // native are the same, can ionic be the same? +} + +::slotted(p:last-child) { + @include mixins.margin( + var(--ion-item-divider-paragraph-trailing-margin-top), + var(--ion-item-divider-paragraph-trailing-margin-end), + var(--ion-item-divider-paragraph-trailing-margin-bottom, 0), + var(--ion-item-divider-paragraph-trailing-margin-start) + ); +} diff --git a/core/src/components/item-divider/item-divider.tsx b/core/src/components/item-divider/item-divider.tsx index 96198e6f1a9..be520226478 100644 --- a/core/src/components/item-divider/item-divider.tsx +++ b/core/src/components/item-divider/item-divider.tsx @@ -2,12 +2,10 @@ import type { ComponentInterface } from '@stencil/core'; import { Component, Element, Host, Prop, h } from '@stencil/core'; import { createColorClasses } from '@utils/theme'; -import { getIonTheme } from '../../global/ionic-global'; import type { Color } from '../../interface'; /** * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component. - * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component. * * @slot - Content is placed between the named slots if provided without a slot. * @slot start - Content is placed to the left of the divider text in LTR, and to the right in RTL. @@ -15,11 +13,7 @@ import type { Color } from '../../interface'; */ @Component({ tag: 'ion-item-divider', - styleUrls: { - ios: 'item-divider.ios.scss', - md: 'item-divider.md.scss', - ionic: 'item-divider.md.scss', - }, + styleUrl: 'item-divider.scss', shadow: true, }) export class ItemDivider implements ComponentInterface { @@ -42,12 +36,12 @@ export class ItemDivider implements ComponentInterface { @Prop() sticky = false; render() { - const theme = getIonTheme(this); + const { color, sticky } = this; + return ( diff --git a/core/src/components/item/test/dividers/index.html b/core/src/components/item/test/dividers/index.html index 9ae573d551c..c7f209a0793 100644 --- a/core/src/components/item/test/dividers/index.html +++ b/core/src/components/item/test/dividers/index.html @@ -71,6 +71,12 @@

Secondary header

+ + + + Light + + @@ -103,9 +109,15 @@

H1 Title Text

+ + +
+ + + Primary @@ -122,6 +134,13 @@

H1 Title Text

Column 3
+ + + +

Paragraph

+

Paragraph Last Child

+
+