| <!-- |
| @license |
| Copyright (c) 2015 The Polymer Project Authors. All rights reserved. |
| This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt |
| The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |
| The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt |
| Code distributed by Google as part of the polymer project is also |
| subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt |
| --> |
| |
| <link rel="import" href="../polymer/polymer.html"> |
| <link rel="import" href="../iron-flex-layout/iron-flex-layout.html"> |
| <link rel="import" href="../iron-icon/iron-icon.html"> |
| <link rel="import" href="../paper-behaviors/paper-button-behavior.html"> |
| <link rel="import" href="../paper-material/paper-material-shared-styles.html"> |
| <link rel="import" href="../paper-styles/color.html"> |
| <link rel="import" href="../paper-styles/default-theme.html"> |
| |
| <!-- |
| Material design: [Floating Action Button](https://www.google.com/design/spec/components/buttons-floating-action-button.html) |
| |
| `paper-fab` is a floating action button. It contains an image placed in the center and |
| comes in two sizes: regular size and a smaller size by applying the attribute `mini`. When |
| the user touches the button, a ripple effect emanates from the center of the button. |
| |
| You may import `iron-icons` to use with this element, or provide a URL to a custom icon. |
| See `iron-iconset` for more information about how to use a custom icon set. |
| |
| Example: |
| |
| <link href="path/to/iron-icons/iron-icons.html" rel="import"> |
| |
| <paper-fab icon="add"></paper-fab> |
| <paper-fab mini icon="favorite"></paper-fab> |
| <paper-fab src="star.png"></paper-fab> |
| |
| |
| ### Styling |
| |
| The following custom properties and mixins are available for styling: |
| |
| Custom property | Description | Default |
| ----------------|-------------|---------- |
| `--paper-fab-background` | The background color of the button | `--accent-color` |
| `--paper-fab-keyboard-focus-background` | The background color of the button when focused | `--paper-pink-900` |
| `--paper-fab-disabled-background` | The background color of the button when it's disabled | `--paper-grey-300` |
| `--paper-fab-disabled-text` | The text color of the button when it's disabled | `--paper-grey-500` |
| `--paper-fab` | Mixin applied to the button | `{}` |
| `--paper-fab-mini` | Mixin applied to a mini button | `{}` |
| `--paper-fab-disabled` | Mixin applied to a disabled button | `{}` |
| `--paper-fab-iron-icon` | Mixin applied to the iron-icon within the button | `{}` |
| `--paper-fab-label` | Mixin applied to the label within the button | `{}` |
| |
| @group Paper Elements |
| @demo demo/index.html |
| --> |
| |
| <dom-module id="paper-fab"> |
| <template strip-whitespace> |
| <style include="paper-material-shared-styles"> |
| :host { |
| @apply(--layout-vertical); |
| @apply(--layout-center-center); |
| |
| background: var(--paper-fab-background, --accent-color); |
| border-radius: 50%; |
| box-sizing: border-box; |
| color: var(--text-primary-color); |
| cursor: pointer; |
| height: 56px; |
| min-width: 0; |
| outline: none; |
| padding: 16px; |
| position: relative; |
| -moz-user-select: none; |
| -ms-user-select: none; |
| -webkit-user-select: none; |
| user-select: none; |
| width: 56px; |
| z-index: 0; |
| |
| /* NOTE: Both values are needed, since some phones require the value `transparent`. */ |
| -webkit-tap-highlight-color: rgba(0,0,0,0); |
| -webkit-tap-highlight-color: transparent; |
| |
| @apply(--paper-fab); |
| } |
| |
| [hidden] { |
| display: none !important; |
| } |
| |
| :host([mini]) { |
| width: 40px; |
| height: 40px; |
| padding: 8px; |
| |
| @apply(--paper-fab-mini); |
| } |
| |
| :host([disabled]) { |
| color: var(--paper-fab-disabled-text, --paper-grey-500); |
| background: var(--paper-fab-disabled-background, --paper-grey-300); |
| |
| @apply(--paper-fab-disabled); |
| } |
| |
| iron-icon { |
| @apply(--paper-fab-iron-icon); |
| } |
| |
| span { |
| width: 100%; |
| white-space: nowrap; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| text-align: center; |
| |
| @apply(--paper-fab-label); |
| } |
| |
| :host(.keyboard-focus) { |
| background: var(--paper-fab-keyboard-focus-background, --paper-pink-900); |
| } |
| </style> |
| |
| <iron-icon id="icon" hidden$="{{!_computeIsIconFab(icon, src)}}" src="[[src]]" icon="[[icon]]"></iron-icon> |
| <span hidden$="{{_computeIsIconFab(icon, src)}}">{{label}}</span> |
| </template> |
| |
| <script> |
| Polymer({ |
| is: 'paper-fab', |
| |
| behaviors: [ |
| Polymer.PaperButtonBehavior |
| ], |
| |
| properties: { |
| /** |
| * The URL of an image for the icon. If the src property is specified, |
| * the icon property should not be. |
| */ |
| src: { |
| type: String, |
| value: '' |
| }, |
| |
| /** |
| * Specifies the icon name or index in the set of icons available in |
| * the icon's icon set. If the icon property is specified, |
| * the src property should not be. |
| */ |
| icon: { |
| type: String, |
| value: '' |
| }, |
| |
| /** |
| * Set this to true to style this is a "mini" FAB. |
| */ |
| mini: { |
| type: Boolean, |
| value: false, |
| reflectToAttribute: true |
| }, |
| |
| /** |
| * The label displayed in the badge. The label is centered, and ideally |
| * should have very few characters. |
| */ |
| label: { |
| type: String, |
| observer: '_labelChanged' |
| } |
| }, |
| |
| _labelChanged: function() { |
| this.setAttribute('aria-label', this.label); |
| }, |
| |
| _computeIsIconFab: function(icon, src) { |
| return (icon.length > 0) || (src.length > 0); |
| } |
| }); |
| </script> |
| </dom-module> |