diff --git a/.scss-lint.yml b/.scss-lint.yml index 3d89107c33b..1761339d25f 100644 --- a/.scss-lint.yml +++ b/.scss-lint.yml @@ -13,7 +13,7 @@ linters: enabled: true ignore_unspecified: false min_properties: 2 - separate_groups: false + separate_groups: true order: # Box diff --git a/ionic/components/alert/alert.ios.scss b/ionic/components/alert/alert.ios.scss index a6edb489875..3f64748467c 100644 --- a/ionic/components/alert/alert.ios.scss +++ b/ionic/components/alert/alert.ios.scss @@ -9,67 +9,91 @@ $alert-ios-border-radius: 13px !default; $alert-ios-background: #f8f8f8 !default; $alert-ios-box-shadow: none !default; -$alert-ios-head-text-align: center !default; $alert-ios-head-padding: 12px 16px 7px !default; +$alert-ios-head-text-align: center !default; $alert-ios-title-margin-top: 8px !default; -$alert-ios-title-font-weight: 600 !default; $alert-ios-title-font-size: 17px !default; +$alert-ios-title-font-weight: 600 !default; + $alert-ios-sub-title-font-size: 14px !default; $alert-ios-sub-title-text-color: #666 !default; $alert-ios-message-padding: 0 16px 21px !default; -$alert-ios-message-text-color: inherit !default; -$alert-ios-message-text-align: center !default; $alert-ios-message-font-size: 13px !default; +$alert-ios-message-text-align: center !default; +$alert-ios-message-text-color: inherit !default; $alert-ios-message-padding-empty: 0 0 12px 0 !default; $alert-ios-content-max-height: 240px !default; -$alert-ios-input-padding: 6px !default; $alert-ios-input-margin-top: 10px !default; -$alert-ios-input-background-color: #fff !default; +$alert-ios-input-padding: 6px !default; $alert-ios-input-border-color: #ccc !default; $alert-ios-input-border: 1px solid $alert-ios-input-border-color !default; $alert-ios-input-border-radius: 4px !default; +$alert-ios-input-background-color: #fff !default; $alert-ios-button-group-flex-wrap: wrap !default; -$alert-ios-button-margin: 0 !default; $alert-ios-button-flex: 1 1 auto !default; -$alert-ios-button-min-height: 44px !default; +$alert-ios-button-margin: 0 !default; $alert-ios-button-min-width: 50% !default; +$alert-ios-button-min-height: 44px !default; $alert-ios-button-font-size: 17px !default; $alert-ios-button-text-color: map-get($colors-ios, primary) !default; $alert-ios-button-background-color: transparent !default; $alert-ios-button-background-color-activated: #e9e9e9 !default; -$alert-ios-button-border-radius: 0 !default; $alert-ios-button-border-width: 1px !default; $alert-ios-button-border-style: solid !default; $alert-ios-button-border-color: #dbdbdf !default; +$alert-ios-button-border-radius: 0 !default; $alert-ios-button-main-font-weight: bold !default; +$alert-ios-list-border-top: $alert-ios-button-border-width $alert-ios-button-border-style $alert-ios-button-border-color !default; + $alert-ios-radio-label-padding: 13px !default; -$alert-ios-radio-icon-min-width: 30px !default; - -$alert-ios-checkbox-icon-size: 21px !default; -$alert-ios-checkbox-icon-border-radius: 50% !default; -$alert-ios-checkbox-icon-border-width: 1px !default; -$alert-ios-checkbox-icon-border-style: solid !default; -$alert-ios-checkbox-icon-border-color-off: $list-ios-border-color !default; -$alert-ios-checkbox-icon-border-color-on: map-get($colors-ios, primary) !default; + +$alert-ios-radio-min-width: 30px !default; + +$alert-ios-radio-icon-top: 13px !default; +$alert-ios-radio-icon-left: 7px !default; +$alert-ios-radio-icon-width: 6px !default; +$alert-ios-radio-icon-height: 12px !default; +$alert-ios-radio-icon-border-width: 2px !default; +$alert-ios-radio-icon-border-style: solid !default; +$alert-ios-radio-icon-border-color: $alert-ios-button-text-color !default; +$alert-ios-radio-icon-transform: rotate(45deg) !default; + +$alert-ios-checkbox-label-padding: 13px !default; + +$alert-ios-checkbox-margin: 10px 6px 10px 16px !default; +$alert-ios-checkbox-size: 21px !default; +$alert-ios-checkbox-border-width: 1px !default; +$alert-ios-checkbox-border-style: solid !default; +$alert-ios-checkbox-border-radius: 50% !default; +$alert-ios-checkbox-border-color-off: $list-ios-border-color !default; +$alert-ios-checkbox-border-color-on: map-get($colors-ios, primary) !default; $alert-ios-checkbox-background-color-off: $list-ios-background-color !default; $alert-ios-checkbox-background-color-on: map-get($colors-ios, primary) !default; -$alert-ios-checkbox-icon-checkmark-width: $alert-ios-checkbox-icon-border-width !default; -$alert-ios-checkbox-icon-checkmark-style: $alert-ios-checkbox-icon-border-style !default; -$alert-ios-checkbox-icon-checkmark-color: $background-ios-color !default; + +$alert-ios-checkbox-icon-top: 4px !default; +$alert-ios-checkbox-icon-left: 7px !default; +$alert-ios-checkbox-icon-width: 4px !default; +$alert-ios-checkbox-icon-height: 9px !default; +$alert-ios-checkbox-icon-border-width: $alert-ios-checkbox-border-width !default; +$alert-ios-checkbox-icon-border-style: $alert-ios-checkbox-border-style !default; +$alert-ios-checkbox-icon-border-color: $background-ios-color !default; +$alert-ios-checkbox-icon-transform: rotate(45deg) !default; .alert-wrapper { overflow: hidden; + max-width: $alert-ios-max-width; + border-radius: $alert-ios-border-radius; background-color: $alert-ios-background; @@ -82,11 +106,13 @@ $alert-ios-checkbox-icon-checkmark-color: $background-ios-color !default; .alert-head { padding: $alert-ios-head-padding; + text-align: $alert-ios-head-text-align; } .alert-title { margin-top: $alert-ios-title-margin-top; + font-size: $alert-ios-title-font-size; font-weight: $alert-ios-title-font-weight; } @@ -103,6 +129,7 @@ $alert-ios-checkbox-icon-checkmark-color: $background-ios-color !default; .alert-message, .alert-input-group { padding: $alert-ios-message-padding; + font-size: $alert-ios-message-font-size; text-align: $alert-ios-message-text-align; color: $alert-ios-message-text-color; @@ -123,9 +150,11 @@ $alert-ios-checkbox-icon-checkmark-color: $background-ios-color !default; .alert-input { margin-top: $alert-ios-input-margin-top; padding: $alert-ios-input-padding; + border: $alert-ios-input-border; border-radius: $alert-ios-input-border-radius; background-color: $alert-ios-input-background-color; + -webkit-appearance: none; } @@ -136,12 +165,15 @@ $alert-ios-checkbox-icon-checkmark-color: $background-ios-color !default; .alert-radio-group, .alert-checkbox-group { overflow: scroll; + max-height: $alert-ios-content-max-height; - border-top: $alert-ios-button-border-width $alert-ios-button-border-style $alert-ios-button-border-color; + + border-top: $alert-ios-list-border-top; } .alert-tappable { display: flex; + min-height: $alert-ios-button-min-height; } @@ -151,81 +183,113 @@ $alert-ios-checkbox-icon-checkmark-color: $background-ios-color !default; .alert-radio-label { overflow: hidden; + flex: 1; + order: 0; + padding: $alert-ios-radio-label-padding; + text-overflow: ellipsis; white-space: nowrap; } +// iOS Alert Radio Checkmark: Unchecked +// ----------------------------------------- + .alert-radio-icon { position: relative; + order: 1; - min-width: $alert-ios-radio-icon-min-width; + + min-width: $alert-ios-radio-min-width; } .alert-radio[aria-checked=true] { color: $alert-ios-button-text-color; +} - .alert-radio-icon::after { - position: absolute; - top: 13px; - left: 7px; - width: 4px; - height: 10px; - border-width: 2px; - border-top-width: 0; - border-left-width: 0; - border-style: solid; - border-color: $alert-ios-button-text-color; - content: ""; - transform: rotate(45deg); - } + +// iOS Alert Radio Checkmark: Checked +// ----------------------------------------- + +.alert-radio[aria-checked=true] .alert-radio-inner { + position: absolute; + top: $alert-ios-radio-icon-top; + left: $alert-ios-radio-icon-left; + + width: $alert-ios-radio-icon-width; + height: $alert-ios-radio-icon-height; + + border-width: $alert-ios-radio-icon-border-width; + border-top-width: 0; + border-left-width: 0; + border-style: $alert-ios-radio-icon-border-style; + border-color: $alert-ios-radio-icon-border-color; + transform: $alert-ios-radio-icon-transform; } -// iOS Alert Checkbox +// iOS Alert Checkbox Label // -------------------------------------------------- .alert-checkbox-label { overflow: hidden; + flex: 1; - order: 0; - padding: 13px; - text-align: auto; + + padding: $alert-ios-checkbox-label-padding; + text-overflow: ellipsis; white-space: nowrap; } + +// iOS Alert Checkbox Outer Circle: Unchecked +// ----------------------------------------- + .alert-checkbox-icon { position: relative; - margin: 10px 6px 10px 16px; - width: $alert-ios-checkbox-icon-size; - height: $alert-ios-checkbox-icon-size; - border-width: $alert-ios-checkbox-icon-border-width; - border-style: $alert-ios-checkbox-icon-border-style; - border-radius: $alert-ios-checkbox-icon-border-radius; - border-color: $alert-ios-checkbox-icon-border-color-off; + + margin: $alert-ios-checkbox-margin; + + width: $alert-ios-checkbox-size; + height: $alert-ios-checkbox-size; + + border-width: $alert-ios-checkbox-border-width; + border-style: $alert-ios-checkbox-border-style; + border-radius: $alert-ios-checkbox-border-radius; + border-color: $alert-ios-checkbox-border-color-off; background-color: $alert-ios-checkbox-background-color-off; } + +// iOS Alert Checkbox Outer Circle: Checked +// ----------------------------------------- + .alert-checkbox[aria-checked=true] .alert-checkbox-icon { - border-color: $alert-ios-checkbox-icon-border-color-on; + border-color: $alert-ios-checkbox-border-color-on; background-color: $alert-ios-checkbox-background-color-on; +} - .alert-checkbox-inner { - position: absolute; - top: 4px; - left: 7px; - width: 4px; - height: 9px; - border-width: $alert-ios-checkbox-icon-checkmark-width; - border-top-width: 0; - border-left-width: 0; - border-style: $alert-ios-checkbox-icon-checkmark-style; - border-color: $alert-ios-checkbox-icon-checkmark-color; - transform: rotate(45deg); - } + +// iOS Alert Checkbox Inner Checkmark: Checked +// ----------------------------------------- + +.alert-checkbox[aria-checked=true] .alert-checkbox-inner { + position: absolute; + top: $alert-ios-checkbox-icon-top; + left: $alert-ios-checkbox-icon-left; + + width: $alert-ios-checkbox-icon-width; + height: $alert-ios-checkbox-icon-height; + + border-width: $alert-ios-checkbox-icon-border-width; + border-top-width: 0; + border-left-width: 0; + border-style: $alert-ios-checkbox-icon-border-style; + border-color: $alert-ios-checkbox-icon-border-color; + transform: $alert-ios-checkbox-icon-transform; } @@ -234,15 +298,20 @@ $alert-ios-checkbox-icon-checkmark-color: $background-ios-color !default; .alert-button-group { flex-wrap: $alert-ios-button-group-flex-wrap; + margin-right: -$alert-ios-button-border-width; } .alert-button { overflow: hidden; + flex: $alert-ios-button-flex; + margin: $alert-ios-button-margin; + min-width: $alert-ios-button-min-width; height: $alert-ios-button-min-height; + border-top: $alert-ios-button-border-width $alert-ios-button-border-style $alert-ios-button-border-color; border-right: $alert-ios-button-border-width $alert-ios-button-border-style $alert-ios-button-border-color; border-radius: $alert-ios-button-border-radius; diff --git a/ionic/components/alert/alert.md.scss b/ionic/components/alert/alert.md.scss index ce154a5e603..9418a8b790f 100644 --- a/ionic/components/alert/alert.md.scss +++ b/ionic/components/alert/alert.md.scss @@ -10,14 +10,15 @@ $alert-md-background-color: #fafafa !default; $alert-md-box-shadow-color: rgba(0, 0, 0, .4) !default; $alert-md-box-shadow: 0 16px 20px $alert-md-box-shadow-color !default; -$alert-md-head-text-align: left !default; $alert-md-head-padding: 24px 24px 20px 24px !default; +$alert-md-head-text-align: left !default; $alert-md-title-font-size: 22px !default; + $alert-md-sub-title-font-size: 16px !default; -$alert-md-message-font-size: 15px !default; $alert-md-message-padding: 0 24px 24px 24px !default; +$alert-md-message-font-size: 15px !default; $alert-md-message-text-color: rgba(0, 0, 0, .5) !default; $alert-md-message-padding-empty: 0 !default; @@ -51,9 +52,54 @@ $alert-md-button-border-radius: 2px !default; $alert-md-button-text-transform: uppercase !default; $alert-md-button-text-align: right !default; +$alert-md-list-border-top: 1px solid $alert-md-input-border-color !default; +$alert-md-list-border-bottom: $alert-md-list-border-top !default; + +$alert-md-radio-label-padding: 13px 26px !default; + +$alert-md-radio-top: 13px !default; +$alert-md-radio-left: 13px !default; +$alert-md-radio-width: 16px !default; +$alert-md-radio-height: 16px !default; +$alert-md-radio-border-width: 2px !default; +$alert-md-radio-border-style: solid !default; +$alert-md-radio-border-radius: 50% !default; +$alert-md-radio-border-color-off: darken($list-md-border-color, 40%) !default; +$alert-md-radio-border-color-on: $alert-md-button-text-color !default; + +$alert-md-radio-icon-top: 2px !default; +$alert-md-radio-icon-left: 2px !default; +$alert-md-radio-icon-width: 8px !default; +$alert-md-radio-icon-height: 8px !default; +$alert-md-radio-icon-border-radius: $alert-md-radio-border-radius !default; +$alert-md-radio-icon-transform-off: scale3d(0, 0, 0) !default; +$alert-md-radio-icon-transform-on: scale3d(1, 1, 1) !default; +$alert-md-radio-icon-transition: transform 280ms cubic-bezier(.4, 0, .2, 1) !default; + +$alert-md-checkbox-label-padding: 13px 26px !default; + +$alert-md-checkbox-top: 13px !default; +$alert-md-checkbox-left: 13px !default; +$alert-md-checkbox-width: 16px !default; +$alert-md-checkbox-height: 16px !default; +$alert-md-checkbox-border-width: 2px !default; +$alert-md-checkbox-border-style: solid !default; +$alert-md-checkbox-border-radius: 2px !default; +$alert-md-checkbox-border-color-off: darken($list-md-border-color, 40%) !default; +$alert-md-checkbox-border-color-on: $alert-md-button-text-color !default; + +$alert-md-checkbox-icon-top: 0 !default; +$alert-md-checkbox-icon-left: 3px !default; +$alert-md-checkbox-icon-width: 6px !default; +$alert-md-checkbox-icon-height: 10px !default; +$alert-md-checkbox-icon-border-width: 2px !default; +$alert-md-checkbox-icon-border-style: solid !default; +$alert-md-checkbox-icon-transform: rotate(45deg) !default; + .alert-wrapper { max-width: $alert-md-max-width; + border-radius: $alert-md-border-radius; background-color: $alert-md-background-color; @@ -65,6 +111,7 @@ $alert-md-button-text-align: right !default; .alert-head { padding: $alert-md-head-padding; + text-align: $alert-md-head-text-align; } @@ -83,11 +130,13 @@ $alert-md-button-text-align: right !default; .alert-message, .alert-input-group { padding: $alert-md-message-padding; + color: $alert-md-message-text-color; } .alert-message { max-height: $alert-md-content-max-height; + font-size: $alert-md-message-font-size; &:empty { @@ -101,11 +150,13 @@ $alert-md-button-text-align: right !default; .alert-input { margin: $alert-md-input-margin-top $alert-md-input-margin-right $alert-md-input-margin-bottom $alert-md-input-margin-left; + border-bottom: $alert-md-input-border-width $alert-md-input-border-style $alert-md-input-border-color; color: $alert-md-input-text-color; &:focus { margin-bottom: $alert-md-input-margin-bottom - 1; + border-bottom: $alert-md-input-border-width-focused $alert-md-input-border-style-focused $alert-md-input-border-color-focused; } } @@ -118,16 +169,21 @@ $alert-md-button-text-align: right !default; .alert-checkbox-group { position: relative; overflow: auto; + max-height: $alert-md-content-max-height; - border-top: 1px solid $alert-md-input-border-color; - border-bottom: 1px solid $alert-md-input-border-color; + + border-top: $alert-md-list-border-top; + border-bottom: $alert-md-list-border-bottom; } .alert-tappable { position: relative; display: flex; + overflow: hidden; - min-height: 44px; + + // TODO this should be a variable that matches item + min-height: 4.4rem; } @@ -136,96 +192,120 @@ $alert-md-button-text-align: right !default; .alert-radio-label { overflow: hidden; + flex: 1; - padding: 13px 26px; - text-align: auto; + + padding: $alert-md-radio-label-padding; + text-overflow: ellipsis; white-space: nowrap; } +// Material Design Alert Radio Unchecked Circle +// --------------------------------------------------- + .alert-radio-icon { position: relative; - top: 13px; - left: 13px; + top: $alert-md-radio-top; + left: $alert-md-radio-left; display: block; - margin: 0; - width: 16px; - height: 16px; - border-width: 2px; - border-style: solid; - border-radius: 50%; - border-color: darken($list-md-border-color, 40%); - - &::after { - position: absolute; - top: 2px; - left: 2px; - width: 8px; - height: 8px; - border-radius: 50%; - background-color: $alert-md-button-text-color; - content: ""; - transform: scale3d(0, 0, 0); - transition: transform 280ms cubic-bezier(.4, 0, .2, 1); - } + + width: $alert-md-radio-width; + height: $alert-md-radio-height; + + border-width: $alert-md-radio-border-width; + border-style: $alert-md-radio-border-style; + border-radius: $alert-md-radio-border-radius; + border-color: $alert-md-radio-border-color-off; } +// Material Design Alert Radio Checked Dot +// --------------------------------------------------- + +.alert-radio-inner { + position: absolute; + top: $alert-md-radio-icon-top; + left: $alert-md-radio-icon-left; + + width: $alert-md-radio-icon-width; + height: $alert-md-radio-icon-height; + + border-radius: $alert-md-radio-icon-border-radius; + background-color: $alert-md-radio-border-color-on; + transform: $alert-md-radio-icon-transform-off; + transition: $alert-md-radio-icon-transition; +} + + +// Material Design Alert Radio Checked +// --------------------------------------------------- + .alert-radio[aria-checked=true] { - color: $alert-md-button-text-color; + color: $alert-md-radio-border-color-on; .alert-radio-icon { - border-color: $alert-md-button-text-color; + border-color: $alert-md-radio-border-color-on; } +} - .alert-radio-icon::after { - transform: scale3d(1, 1, 1); - } +.alert-radio[aria-checked=true] .alert-radio-inner { + transform: $alert-md-radio-icon-transform-on; } -// Material Design Alert Checkbox +// Material Design Alert Checkbox Label // -------------------------------------------------- .alert-checkbox-label { overflow: hidden; + flex: 1; - padding: 13px 26px; - text-align: auto; + + padding: $alert-md-checkbox-label-padding; + text-overflow: ellipsis; white-space: nowrap; } +// Material Design Alert Checkbox Outline: Unchecked +// -------------------------------------------------- + .alert-checkbox-icon { position: relative; - top: 13px; - left: 13px; - width: 16px; - height: 16px; - border-width: 2px; - border-style: solid; - border-radius: 2px; - border-color: darken($list-md-border-color, 40%); - background-color: transparent; + top: $alert-md-checkbox-top; + left: $alert-md-checkbox-left; + + width: $alert-md-checkbox-width; + height: $alert-md-checkbox-height; + + border-width: $alert-md-checkbox-border-width; + border-style: $alert-md-checkbox-border-style; + border-radius: $alert-md-checkbox-border-radius; + border-color: $alert-md-checkbox-border-color-off; } +// Material Design Alert Checkbox Checkmark: Checked +// -------------------------------------------------- + .alert-checkbox[aria-checked=true] .alert-checkbox-icon { - border-color: $alert-md-button-text-color; - background-color: $alert-md-button-text-color; - - &::after { - position: absolute; - top: 0; - left: 3px; - width: 4px; - height: 8px; - border-width: 2px; - border-top-width: 0; - border-left-width: 0; - border-style: solid; - border-color: $alert-md-background-color; - content: ""; - transform: rotate(45deg); - } + border-color: $alert-md-checkbox-border-color-on; + background-color: $alert-md-checkbox-border-color-on; +} + +.alert-checkbox[aria-checked=true] .alert-checkbox-inner { + position: absolute; + top: $alert-md-checkbox-icon-top; + left: $alert-md-checkbox-icon-left; + + width: $alert-md-checkbox-icon-width; + height: $alert-md-checkbox-icon-height; + + border-width: $alert-md-checkbox-icon-border-width; + border-top-width: 0; + border-left-width: 0; + border-style: $alert-md-checkbox-icon-border-style; + border-color: $alert-md-background-color; + transform: $alert-md-checkbox-icon-transform; } @@ -235,6 +315,7 @@ $alert-md-button-text-align: right !default; .alert-button-group { flex-wrap: $alert-md-button-group-flex-wrap; justify-content: $alert-md-button-group-justify-content; + padding: $alert-md-button-group-padding; } @@ -245,6 +326,7 @@ $alert-md-button-text-align: right !default; margin: $alert-md-button-margin; padding: $alert-md-button-padding; + border-radius: $alert-md-button-border-radius; font-weight: $alert-md-button-font-weight; text-align: $alert-md-button-text-align; diff --git a/ionic/components/alert/alert.scss b/ionic/components/alert/alert.scss index e761bbee785..fb876f176b2 100644 --- a/ionic/components/alert/alert.scss +++ b/ionic/components/alert/alert.scss @@ -19,6 +19,7 @@ ion-alert { z-index: $z-index-overlay; display: flex; + align-items: center; justify-content: center; @@ -30,9 +31,12 @@ ion-alert { .alert-wrapper { z-index: $z-index-overlay-wrapper; display: flex; + flex-direction: column; + min-width: $alert-min-width; max-height: $alert-max-height; + opacity: 0; } @@ -44,6 +48,7 @@ ion-alert { .alert-sub-title { margin: 5px 0 0; padding: 0; + font-weight: normal; } @@ -55,12 +60,14 @@ ion-alert { @include placeholder(); padding: 10px 0; + border: 0; background: inherit; } .alert-button-group { display: flex; + flex-direction: row; &.vertical { @@ -72,7 +79,9 @@ ion-alert { .alert-button { z-index: 0; display: block; + margin: 0; + font-size: $alert-button-font-size; line-height: $alert-button-line-height; } @@ -80,10 +89,13 @@ ion-alert { .alert-tappable { margin: 0; padding: 0; + width: 100%; + font-size: inherit; line-height: initial; text-align: left; background: transparent; + -webkit-appearance: none; } diff --git a/ionic/components/alert/alert.ts b/ionic/components/alert/alert.ts index 9f2309d7643..75628bc0f08 100644 --- a/ionic/components/alert/alert.ts +++ b/ionic/components/alert/alert.ts @@ -268,7 +268,7 @@ export class Alert extends ViewController { '