diff --git a/client/core/src/components/textfield/style.scss b/client/core/src/components/textfield/style.scss
index 181ad8d8b..0ba8c87d9 100644
--- a/client/core/src/components/textfield/style.scss
+++ b/client/core/src/components/textfield/style.scss
@@ -1,45 +1,110 @@
+@import "colors";
vn-textfield {
- .mdl-chip__action {
- position: absolute;
- width: auto;
- top: 0px;
- right: -6px;
- margin: 21px 0px;
- background: white;
- opacity: 1;
- z-index: 1;
- color: #aaa;
+ margin: 20px 0!important;
+ display: block;
+
+ .leftIcons, .rightIcons, .suffix{
+ display: inline-flex;
+ color: $secondary-font-color;
+ & .material-icons{
+ font-size: 20px!important
+ }
}
- .mdl-textfield {
+ .leftIcons{
+ margin-right: 3px;
+ }
+ .container{
width: 100%;
+ position: relative;
+ padding-bottom: 2px;
}
- .mdl-textfield__error {
+ .textField{
+ width: 100%;
+ display: inline-flex;
+ position: relative;
+ padding: 4px 0;
+ }
+ .infix {
+ position: relative;
+ display: block;
+ flex: auto;
+ width: 100%;
+ min-width: 0;
+ }
+ i.pointer {
+ visibility: hidden
+ }
+ i.visible {
visibility: visible;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
+ }
+ label {
+ position: absolute;
+ bottom: 2px;
+ pointer-events: none;
+ color: $secondary-font-color;
+ transition-duration: .2s;
+ transition-timing-function: cubic-bezier(.4,0,.2,1);
+ }
+ input {
+
+ outline: none;
+ border: none;
+ font-family: "Helvetica","Arial",sans-serif;
+ display: block;
+ font-size: 16px;
width: 100%;
- }
- .mdl-textfield.invalid {
- .mdl-textfield__input {
- border-color: #d50000;
- box-shadow: none;
- }
- .mdl-textfield__label::after {
- background-color: #d50000;
+ background: 0 0;
+ color: inherit;
+
+ &[type=number]{
+ -moz-appearance: textfield;
+ &::-webkit-outer-spin-button,
+ &::-webkit-inner-spin-button{
+ -webkit-appearance: none;
+ margin: 0;
+ }
}
}
- .mdl-textfield--floating-label.invalid .mdl-textfield__label {
- color: #d50000;
- font-size: 12px;
- top: 4px;
+
+ .underline{
+ position: absolute;
+ bottom: 0;
+ height: 1px;
+ content: ' ';
+ pointer-events: none;
+ width: 100%;
+ background-color: rgba(0,0,0,.12);
}
- .material-icons {
- font-size: 18px;
- float: right;
- margin-right: 5px;
+
+ .selected.underline{
+ background-color: rgb(255,152,0);
+ height: 2px;
+ left: 50%;
+ width: 0px!important;
+ transition-duration: 0.2s;
+ transition-timing-function: cubic-bezier(.4,0,.2,1);
}
- .material-icons:hover {
- color: rgba(0,0,0, .87);
+
+ &.not-empty{
+ & label {
+ bottom: 24px;
+ color: $main-01;
+ font-size: 12px;
+ }
+ }
+
+ div.selected{
+ &.container{
+ border-bottom: 0px;
+ }
+ & label {
+ bottom: 24px;
+ color: $main-01;
+ font-size: 12px;
+ }
+ & .selected.underline{
+ left: 0;
+ width: 100%!important;
+ }
}
}
\ No newline at end of file
diff --git a/client/core/src/components/textfield/textfield.html b/client/core/src/components/textfield/textfield.html
index fe69149a3..0a899e76c 100644
--- a/client/core/src/components/textfield/textfield.html
+++ b/client/core/src/components/textfield/textfield.html
@@ -1,29 +1,42 @@
-
-
-
-
- info_outline
-
-
- clear
-
+ ng-mouseleave="$ctrl.hasMouseIn = false"
+ style="display: inline-flex"
+>
+
+
+
+
+
+
+
+
+
+
+
+ clear
+
+
+ info_outline
+
+
+
-
+
+
+
diff --git a/client/core/src/components/textfield/textfield.js b/client/core/src/components/textfield/textfield.js
index 56fc23955..4747ba39f 100644
--- a/client/core/src/components/textfield/textfield.js
+++ b/client/core/src/components/textfield/textfield.js
@@ -3,7 +3,7 @@ import Input from '../../lib/input';
import './style.scss';
export default class Textfield extends Input {
- constructor($element, $scope, $attrs, vnTemplate) {
+ constructor($element, $scope, $attrs, vnTemplate, $transclude) {
super($element, $scope);
vnTemplate.normalizeInputAttrs($attrs);
this._value = null;
@@ -13,35 +13,53 @@ export default class Textfield extends Input {
this.info = $attrs.info || null;
this.hasFocus = false;
this.hasMouseIn = false;
- componentHandler.upgradeElement($element[0].firstChild);
+
+ if ($transclude) {
+ $transclude($scope.$parent, tClone => {
+ this.leftIcons = tClone[0];
+ }, null, 'leftIcons');
+ $transclude($scope.$parent, tClone => {
+ this.rightIcons = tClone[0];
+ }, null, 'rightIcons');
+ }
}
- get value() {
- return this._value;
+ set leftIcons(value) {
+ for (let i = 0; i < value.children.length; i++) {
+ this.element.querySelector('.leftIcons').appendChild(value);
+ }
+ }
+ set rightIcons(value) {
+ for (let i = 0; i < value.children.length; i++) {
+ this.element.querySelector('.rightIcons').appendChild(value.children[i]);
+ }
}
set value(value) {
this._value = (value === undefined || value === '') ? null : value;
this.input.value = this._value;
this.hasValue = Boolean(this._value);
+ if (this.hasValue) this.element.classList.add('not-empty');
+ else this.element.classList.remove('not-empty');
this.mdlUpdate();
}
-
+ get value() {
+ return this._value;
+ }
set vnTabIndex(value) {
this.input.tabindex = value;
}
-
clear() {
this.value = null;
this.input.focus();
}
- mdlUpdate() {
- let mdlElement = this.element.firstChild.MaterialTextfield;
- if (mdlElement) mdlElement.updateClasses_();
- }
}
-Textfield.$inject = ['$element', '$scope', '$attrs', 'vnTemplate'];
+Textfield.$inject = ['$element', '$scope', '$attrs', 'vnTemplate', '$transclude'];
ngModule.component('vnTextfield', {
template: require('./textfield.html'),
+ transclude: {
+ leftIcons: '?tLeftIcons',
+ rightIcons: '?tRightIcons'
+ },
controller: Textfield,
bindings: {
value: '=model',
diff --git a/client/core/src/components/textfield/textfield.spec.js b/client/core/src/components/textfield/textfield.spec.js
index 9eea12b0c..73d2ee7de 100644
--- a/client/core/src/components/textfield/textfield.spec.js
+++ b/client/core/src/components/textfield/textfield.spec.js
@@ -18,7 +18,7 @@ describe('Component vnTextfield', () => {
$attrs = {};
$timeout = _$timeout_;
$element = angular.element('
');
- controller = $componentController('vnTextfield', {$scope, $element, $attrs, $timeout});
+ controller = $componentController('vnTextfield', {$scope, $element, $attrs, $timeout, $transclude: null});
}));
describe('value() setter', () => {