renusify 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/components/button/index.vue +1 -1
  2. package/components/button/style.scss +0 -1
  3. package/components/chat/chatInput.vue +2 -2
  4. package/components/form/address.vue +27 -25
  5. package/components/form/address_ir.vue +4 -4
  6. package/components/form/checkbox.vue +1 -1
  7. package/components/form/datePicker/index.vue +20 -20
  8. package/components/form/fileUploader/single.vue +2 -2
  9. package/components/form/group-input.vue +13 -6
  10. package/components/form/input.vue +5 -4
  11. package/components/form/inputTel/index.vue +166 -161
  12. package/components/form/json/JsonView.vue +15 -15
  13. package/components/form/json/index.vue +13 -13
  14. package/components/form/mask-input.vue +12 -11
  15. package/components/form/select.vue +12 -10
  16. package/components/form/text-editor/index.vue +40 -40
  17. package/components/form/unit-input.vue +4 -4
  18. package/components/formCreator/index.vue +57 -4
  19. package/components/index.js +37 -38
  20. package/components/infinite/div.vue +2 -2
  21. package/components/infinite/index.vue +4 -4
  22. package/components/infinite/page.vue +3 -3
  23. package/components/progress/{circular.vue → circle.vue} +6 -6
  24. package/components/progress/{liner.vue → line.vue} +12 -12
  25. package/components/progress/style.scss +29 -26
  26. package/components/searchBox/index.vue +1 -1
  27. package/components/slider/index.vue +1 -1
  28. package/components/table/crud/footer.vue +5 -4
  29. package/components/table/crud/header.vue +38 -38
  30. package/components/table/crud/index.vue +30 -29
  31. package/components/table/index.vue +4 -4
  32. package/package.json +1 -1
  33. /package/components/form/{uniqueFeild → unique}/index.vue +0 -0
@@ -16,7 +16,7 @@
16
16
 
17
17
  </span>
18
18
  <span class="btn-loader" v-if="loading">
19
- <r-progress-circular :size="(size==='x-small')?'15':'23'" indeterminate width="2"></r-progress-circular></span>
19
+ <r-progress-circle :size="(size==='x-small')?'15':'23'" indeterminate width="2"></r-progress-circle></span>
20
20
  </component>
21
21
  </template>
22
22
 
@@ -73,7 +73,6 @@ $btn-transition: opacity 0.2s map-get($transition, 'ease-in-out') !default;
73
73
 
74
74
  &:not(.btn-text):not(.btn-outlined) {
75
75
  background-color: var(--color-sheet);
76
- color: var(--color-text-primary)
77
76
  }
78
77
 
79
78
  &.btn-outlined.btn-text {
@@ -18,7 +18,7 @@
18
18
  text>
19
19
  <r-icon v-html="$r.icons.attachment"></r-icon>
20
20
  </r-btn>
21
- <r-progress-circular
21
+ <r-progress-circle
22
22
  v-else
23
23
  @click.prevent="fileDelete()"
24
24
  :indeterminate=false
@@ -27,7 +27,7 @@
27
27
  size="30"
28
28
  >
29
29
  <r-icon v-html="$r.icons.close"></r-icon>
30
- </r-progress-circular>
30
+ </r-progress-circle>
31
31
  </template>
32
32
  <r-btn class="color-success-text"
33
33
  :disabled="!text"
@@ -1,37 +1,38 @@
1
1
  <template>
2
- <r-select
2
+ <r-select-input
3
3
  :label="$t('country','renusify')"
4
4
  v-model="country"
5
+ v-if="!defaultCountry"
5
6
  @update:model-value="emit(true,true)"
6
7
  value="id"
7
8
  :searchLink="`https://codenus.com/api/apps/address?lang=${$r.lang}`"
8
9
  :rules="required?['required']:[]"
9
10
  :tile="tile">
10
- </r-select>
11
- <r-select :label="$t('state','renusify')"
12
- v-model="state"
13
- :disabled="!country"
14
- :key="country&&country['id']"
15
- v-if="!hideState"
16
- @update:model-value="emit(false,true)"
17
- :searchLink="country&&`https://codenus.com/api/apps/address/${country['id']}?lang=${$r.lang}`"
18
- :rules="required?['required']:[]"
19
- value="id"
20
- :tile="tile">
11
+ </r-select-input>
12
+ <r-select-input :label="$t('state','renusify')"
13
+ v-model="state"
14
+ :disabled="!country"
15
+ :key="country&&country['id']"
16
+ v-if="!hideState"
17
+ @update:model-value="emit(false,true)"
18
+ :searchLink="country&&`https://codenus.com/api/apps/address/${country['id']}?lang=${$r.lang}`"
19
+ :rules="required?['required']:[]"
20
+ value="id"
21
+ :tile="tile">
21
22
 
22
- </r-select>
23
- <r-select v-if="!hideCity"
24
- v-model="city"
25
- :disabled="!state"
26
- :key="state&&(country['id']+'-'+state['id'])"
27
- @update:model-value="emit(false,false)"
28
- :label="$t('city','renusify')"
29
- :searchLink="state&&`https://codenus.com/api/apps/address/${country['id']}/${state['id']}?lang=${$r.lang}`"
30
- :rules="required?['required']:[]"
31
- value="id"
32
- :tile="tile">
23
+ </r-select-input>
24
+ <r-select-input v-if="!hideCity"
25
+ v-model="city"
26
+ :disabled="!state"
27
+ :key="state&&(country['id']+'-'+state['id'])"
28
+ @update:model-value="emit(false,false)"
29
+ :label="$t('city','renusify')"
30
+ :searchLink="state&&`https://codenus.com/api/apps/address/${country['id']}/${state['id']}?lang=${$r.lang}`"
31
+ :rules="required?['required']:[]"
32
+ value="id"
33
+ :tile="tile">
33
34
 
34
- </r-select>
35
+ </r-select-input>
35
36
  <r-text-input v-if="!hideZipCode" @update:model-value="emit(false,false)"
36
37
  :label="$t('zip_code','renusify')"
37
38
  v-model="zip_code"
@@ -56,11 +57,12 @@ export default {
56
57
  hideZipCode: Boolean,
57
58
  hideStreet: Boolean,
58
59
  tile: Boolean,
60
+ defaultCountry: Object,
59
61
  modelValue: Object
60
62
  },
61
63
  data() {
62
64
  return {
63
- country: this.modelValue ? this.modelValue.country : null,
65
+ country: this.modelValue ? this.modelValue.country : this.defaultCountry,
64
66
  state: this.modelValue ? this.modelValue.state : null,
65
67
  city: this.modelValue ? this.modelValue.city : null,
66
68
  zip_code: this.modelValue ? this.modelValue.zip_code : null,
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <r-select :label="$t('state','renusify')"
2
+ <r-select-input :label="$t('state','renusify')"
3
3
  v-model="state"
4
4
  @update:model-value="emit"
5
5
  :items="Object.keys(states)"
@@ -7,8 +7,8 @@
7
7
  :tile="tile"
8
8
  justValue>
9
9
 
10
- </r-select>
11
- <r-select v-if="state"
10
+ </r-select-input>
11
+ <r-select-input v-if="state"
12
12
  @update:model-value="emit"
13
13
  :label="$t('city','renusify')"
14
14
  v-model="city"
@@ -17,7 +17,7 @@
17
17
  :tile="tile"
18
18
  justValue>
19
19
 
20
- </r-select>
20
+ </r-select-input>
21
21
  <r-text-area v-if="city && !hideAddress" @update:model-value="emit"
22
22
  :label="$t('address','renusify')"
23
23
  v-model="address"
@@ -18,7 +18,7 @@
18
18
  </span>
19
19
  <span class="ms-2 color-primary-text" @click="emit">
20
20
  <span class="color-error-text" v-if="isRequired">*</span>
21
- {{ label }}
21
+ <slot name="label">{{ label }}</slot>
22
22
  </span>
23
23
  </div>
24
24
  </template>
@@ -5,17 +5,17 @@
5
5
  />
6
6
  </r-input>
7
7
  <r-modal :model-value="show" @update:model-value="close()" :closebtn="false" closable class="text-center">
8
- <div v-if="!showTime" :class="`${$r.prefix}date-picker`">
9
- <div class="sheet">
10
- <r-container>
11
- <r-row>
12
- <r-col class="col-auto">
13
- <r-btn v-if="tab!=='month'" icon
14
- @click.prevent="tab==='day'?incrementMonth(-1):incrementYear(-12)">
15
- <r-icon v-html="$r.icons.arrow_left"></r-icon>
16
- </r-btn>
17
- </r-col>
18
- <r-col class="text-center">
8
+ <div v-if="!showTime" :class="`${$r.prefix}date-input`">
9
+ <div class="sheet">
10
+ <r-container>
11
+ <r-row>
12
+ <r-col class="col-auto">
13
+ <r-btn v-if="tab!=='month'" icon
14
+ @click.prevent="tab==='day'?incrementMonth(-1):incrementYear(-12)">
15
+ <r-icon v-html="$r.icons.arrow_left"></r-icon>
16
+ </r-btn>
17
+ </r-col>
18
+ <r-col class="text-center">
19
19
  <r-btn class="me-2" text @click.prevent="tab==='month'?tab='day':tab='month'">
20
20
  <r-icon v-html="tab==='month'?$r.icons.chevron_up:$r.icons.chevron_down"></r-icon>
21
21
  {{
@@ -370,17 +370,17 @@ export default {
370
370
  <style lang="scss">
371
371
  @import "../../../style/include";
372
372
 
373
- .#{$prefix}date-picker {
374
- position: relative;
375
- display: inline-block;
376
- font-size: 10px;
377
- color: #303030;
373
+ .#{$prefix}date-input {
374
+ position: relative;
375
+ display: inline-block;
376
+ font-size: 10px;
377
+ color: #303030;
378
378
 
379
- .cell {
380
- &.today {
381
- color: var(--color-one);
379
+ .cell {
380
+ &.today {
381
+ color: var(--color-one);
382
382
 
383
- .cellContent {
383
+ .cellContent {
384
384
  border: solid 1px var(--color-one);
385
385
  }
386
386
  }
@@ -5,7 +5,7 @@
5
5
  <r-btn icon class="image-close color-white">
6
6
  <r-icon @click.prevent="fileDelete()" class="color-error-text" v-html="$r.icons.delete"></r-icon>
7
7
  </r-btn>
8
- <r-progress-circular
8
+ <r-progress-circle
9
9
  :indeterminate=false
10
10
  :modelValue="uploadPercentage"
11
11
  :width="2"
@@ -13,7 +13,7 @@
13
13
  size="50"
14
14
  >
15
15
  {{ `% ${uploadPercentage}` }}
16
- </r-progress-circular>
16
+ </r-progress-circle>
17
17
  <r-btn @click.prevent="$helper.copy(fileLink)" class="image-copy" icon>
18
18
  <r-icon v-html="$r.icons.copy"></r-icon>
19
19
  </r-btn>
@@ -6,12 +6,12 @@
6
6
  <slot :item="item" :index="i" :disableDel="disDel">
7
7
  <div class="d-flex flex-wrap pt-5">
8
8
  <template v-for="(v,k) in item" :key="i+'-'+k">
9
- <r-text-input v-if="typeof v==='string'" class="flex-grow-0 me-1" :label="k"
9
+ <r-text-input v-if="typeof v==='string'" class="flex-grow-0 me-1" :label="t(k)"
10
10
  v-model="item[k]"></r-text-input>
11
- <r-number v-else-if="typeof v==='number'" class="flex-grow-0 me-1" :label="k"
12
- v-model="item[k]"></r-number>
13
- <r-switch v-else-if="typeof v==='boolean'" class="flex-grow-0 me-1" :label="k"
14
- v-model="item[k]"></r-switch>
11
+ <r-number-input v-else-if="typeof v==='number'" class="flex-grow-0 me-1" :label="t(k)"
12
+ v-model="item[k]"></r-number-input>
13
+ <r-switch-input v-else-if="typeof v==='boolean'" class="flex-grow-0 me-1" :label="t(k)"
14
+ v-model="item[k]"></r-switch-input>
15
15
  </template>
16
16
  </div>
17
17
  </slot>
@@ -48,6 +48,7 @@ export default {
48
48
  modelValue: Array,
49
49
  size: Number,
50
50
  disableAdd: Boolean,
51
+ translate: Boolean,
51
52
  template: Object
52
53
  },
53
54
  data() {
@@ -68,6 +69,12 @@ export default {
68
69
  }
69
70
  },
70
71
  methods: {
72
+ t(k) {
73
+ if (this.translate) {
74
+ return this.$t(k)
75
+ }
76
+ return k
77
+ },
71
78
  disDel(value) {
72
79
  this.disabledDel[value] = true
73
80
  },
@@ -133,4 +140,4 @@ export default {
133
140
  }
134
141
  }
135
142
  }
136
- </style>
143
+ </style>
@@ -3,7 +3,7 @@
3
3
  :class="{
4
4
  [`${$r.prefix}input-container`]:true,
5
5
  [c_color]:c_color&&!isDisabled,
6
- 'color-error-text':hasError&&genMessages.length>0,
6
+ 'color-error-text':hasError&&validations.length>0,
7
7
  'hide-detail':c_hide,
8
8
  'input-focused':active,
9
9
  'input-disabled':isDisabled,
@@ -28,7 +28,7 @@
28
28
  :class="{
29
29
  'massage-active':genMessages.length>0,
30
30
  }">
31
- <div :class="{'animation-shake-3':c_msgShake}">{{ genMessages[0] }}</div>
31
+ <div :class="{'animation-shake-3':c_msgShake}">{{ genMessages.join(',') }}</div>
32
32
 
33
33
  </div>
34
34
  </div>
@@ -113,10 +113,11 @@ export default {
113
113
  return this.errorBucket.length > 0
114
114
  },
115
115
  genMessages() {
116
+ let m = []
116
117
  if (this.msg) {
117
- return [this.msg]
118
+ m = [this.msg]
118
119
  }
119
- return this.hasMessages ? this.validations : []
120
+ return this.hasMessages ? this.validations : m
120
121
  },
121
122
  hasMessages() {
122
123
  return this.validationTarget.length > 0
@@ -1,181 +1,186 @@
1
1
  <template>
2
- <div :class="`${$r.prefix}input-tel`">
3
- <r-modal
4
- v-model="open"
5
- >
6
- <r-card class="pa-2">
7
- <r-text-input
8
- :label="$t('search','renusify')"
9
- v-model="search"
10
- ></r-text-input>
11
- <r-list :items="countries" :filter="search" @update:model-value="choose">
12
- <template v-slot="{item}">
13
- <div
14
- :class="item.iso2.toLowerCase()"
15
- class="iti-flag"></div>
16
- <div class="list-title">{{item.name}}</div>
17
- <r-spacer></r-spacer>
18
- <span class="ltr">+{{ item.dialCode }}</span>
19
- </template>
20
- </r-list>
21
- </r-card>
22
- </r-modal>
23
- <r-btn class="btn-country ltr mx-1"
24
- :rounded="!tile" :disabled="!select" @click.stop="toggleDropdown" outlined>
25
- <div :class="activeCountry.iso2.toLowerCase()" class="iti-flag"></div>
26
- <span class="country-code pa-1"> +{{ activeCountry.dialCode }} </span>
27
- <span class="dropdown-arrow">{{ open ? "▲" : "▼" }}</span>
28
- </r-btn>
29
- <r-text-input class="input-phone" :label="label?label:$t('phone','renusify')"
30
- @update:model-value="emit"
31
- :tile="tile"
32
- :rules="[required&&'required']"
33
- v-model="tel.phone"
34
- >
35
- </r-text-input>
2
+ <div :class="`${$r.prefix}input-tel`">
3
+ <r-modal
4
+ v-model="open"
5
+ >
6
+ <r-card class="pa-2">
7
+ <r-text-input
8
+ :label="$t('search','renusify')"
9
+ v-model="search"
10
+ ></r-text-input>
11
+ <r-list :items="countries" :filter="search" @update:model-value="choose">
12
+ <template v-slot="{item}">
13
+ <div
14
+ :class="item.iso2.toLowerCase()"
15
+ class="iti-flag"></div>
16
+ <div class="list-title">{{ item.name }}</div>
17
+ <r-spacer></r-spacer>
18
+ <span class="ltr">+{{ item.dialCode }}</span>
19
+ </template>
20
+ </r-list>
21
+ </r-card>
22
+ </r-modal>
23
+ <r-btn class="btn-country ltr mx-1"
24
+ :rounded="!tile" :disabled="!select||readonly" @click.stop="toggleDropdown" outlined>
25
+ <div :class="activeCountry.iso2.toLowerCase()" class="iti-flag"></div>
26
+ <span class="country-code pa-1"> +{{ activeCountry.dialCode }} </span>
27
+ <span class="dropdown-arrow">{{ open ? "▲" : "▼" }}</span>
28
+ </r-btn>
29
+ <r-text-input class="input-phone" :label="label?label:$t('phone','renusify')"
30
+ @update:model-value="emit"
31
+ :tile="tile"
32
+ :readonly="readonly"
33
+ :rules="required?['required']:[]"
34
+ v-model="tel.phone"
35
+ >
36
+ </r-text-input>
36
37
 
37
- </div>
38
+ </div>
38
39
  </template>
39
40
 
40
41
  <script>
41
- import allCountries from './assets/all-countries.js'
42
+ import allCountries from './assets/all-countries.js'
42
43
 
43
- export default {
44
- name: 'inputTel',
45
- props: {
46
- label: {
47
- type: String
48
- },
49
- modelValue: {
50
- type: Object,
51
- default: () => {
52
- return {
53
- 'phone': '',
54
- 'country_code': ''
55
- }
56
- }
57
- },
58
- defaultCountry: {
59
- // Default country code, ie: 'AU'
60
- // Will override the current country of user
61
- type: String,
62
- default: ''
63
- },
64
- tile: Boolean,
65
- required: Boolean,
66
- select: {
67
- type: Boolean,
68
- default: false
69
- }
44
+ export default {
45
+ name: 'inputTel',
46
+ props: {
47
+ label: {
48
+ type: String
49
+ },
50
+ modelValue: {
51
+ type: String
52
+ },
53
+ defaultCountry: {
54
+ // Default country code, ie: 'AU'
55
+ // Will override the current country of user
56
+ type: String,
57
+ default: ''
58
+ },
59
+ tile: Boolean,
60
+ required: Boolean,
61
+ readonly: Boolean,
62
+ select: {
63
+ type: Boolean,
64
+ default: false
65
+ }
70
66
 
71
- },
72
- data() {
73
- return {
74
- tel: this.modelValue,
75
- search: '',
76
- countries: [],
77
- activeCountry: {iso2: 'US', dialCode: '1'},
78
- open: false
79
- }
80
- },
81
- mounted() {
82
- this.initializeCountry()
83
- this.countries = allCountries
84
- },
85
- created() {
86
- if (this.modelValue) {
87
- this.activeCountry.dialCode = this.modelValue.country_code
88
- }
89
- },
90
- methods: {
91
- initializeCountry() {
92
- /**
93
- * 1. Use default country if passed from parent
94
- */
95
- if (this.defaultCountry) {
96
- const defaultCountry = this.findCountry(this.defaultCountry)
97
- if (defaultCountry) {
98
- this.activeCountry = defaultCountry
99
- return
100
- }
101
- }
102
- /**
103
- * 2. Check if fetching country based on user's IP is allowed, set it as the default country
104
- */
105
- fetch('http://ip-api.com/json/', {
106
- method: 'get'
107
- }).then((response) => {
108
- const that = this
109
- response.json().then(function (data) {
110
- that.activeCountry = that.findCountry(data.countryCode) || that.activeCountry
111
- })
112
- }).catch((error) => {
113
- return Promise.reject(error)
114
- })
115
- },
116
- /**
117
- * Get the list of countries from the list of iso2 code
118
- */
119
- getCountries(list = []) {
120
- return list
121
- .map(countryCode => this.findCountry(countryCode))
122
- .filter(Boolean)
123
- },
124
- findCountry(iso = '') {
125
- return allCountries.find(country => country.iso2 === iso)
126
- },
67
+ },
68
+ data() {
69
+ return {
70
+ tel: {
71
+ 'phone': '',
72
+ 'country_code': ''
73
+ },
74
+ search: '',
75
+ countries: [],
76
+ activeCountry: {iso2: 'US', dialCode: '1'},
77
+ open: false
78
+ }
79
+ },
80
+ mounted() {
81
+ this.initializeCountry()
82
+ this.countries = allCountries
83
+ },
84
+ created() {
85
+ if (this.modelValue) {
86
+ let a = this.modelValue.split(' ')
87
+ this.tel.country_code = a[0]
88
+ this.tel.phone = a[1]
89
+ this.activeCountry.dialCode = this.tel.country_code
90
+ }
91
+ },
92
+ methods: {
93
+ initializeCountry() {
94
+ /**
95
+ * 1. Use default country if passed from parent
96
+ */
97
+ if (this.defaultCountry) {
98
+ const defaultCountry = this.findCountry(this.defaultCountry)
99
+ if (defaultCountry) {
100
+ this.activeCountry = defaultCountry
101
+ return
102
+ }
103
+ }
104
+ /**
105
+ * 2. Check if fetching country based on user's IP is allowed, set it as the default country
106
+ */
107
+ fetch('http://ip-api.com/json/', {
108
+ method: 'get'
109
+ }).then((response) => {
110
+ const that = this
111
+ response.json().then(function (data) {
112
+ that.activeCountry = that.findCountry(data.countryCode) || that.activeCountry
113
+ })
114
+ }).catch((error) => {
115
+ return Promise.reject(error)
116
+ })
117
+ },
118
+ /**
119
+ * Get the list of countries from the list of iso2 code
120
+ */
121
+ getCountries(list = []) {
122
+ return list
123
+ .map(countryCode => this.findCountry(countryCode))
124
+ .filter(Boolean)
125
+ },
126
+ findCountry(iso = '') {
127
+ return allCountries.find(country => country.iso2 === iso)
128
+ },
127
129
 
128
- choose(country) {
129
- this.activeCountry = country
130
- this.emit()
131
- this.reset()
132
- },
133
- reset() {
134
- this.search = ''
135
- this.countries = allCountries
136
- this.open = false
137
- },
130
+ choose(country) {
131
+ this.activeCountry = country
132
+ this.emit()
133
+ this.reset()
134
+ },
135
+ reset() {
136
+ this.search = ''
137
+ this.countries = allCountries
138
+ this.open = false
139
+ },
138
140
 
139
- emit(e) {
140
- this.tel.country_code = this.activeCountry.dialCode
141
- if (this.tel.phone.startsWith('0')) {
142
- setTimeout(() => {
143
- this.tel.phone = this.tel.phone.substr(1, this.tel.phone.length)
144
- this.$emit('update:modelValue', this.tel)
145
- }, 1)
146
- } else {
147
- this.$emit('update:modelValue', this.tel)
141
+ emit(e) {
142
+ if (this.readonly) {
143
+ return
144
+ }
145
+ this.tel.country_code = this.activeCountry.dialCode
146
+ if (this.tel.phone.startsWith('0')) {
147
+ setTimeout(() => {
148
+ this.tel.phone = this.tel.phone.substr(1, this.tel.phone.length)
149
+ this.$emit('update:modelValue', this.tel.country_code + ' ' + this.tel.phone)
150
+ }, 1)
151
+ } else {
152
+ this.$emit('update:modelValue', this.tel.country_code + ' ' + this.tel.phone)
148
153
 
149
- }
154
+ }
150
155
 
151
- },
152
- toggleDropdown() {
153
- this.open = !this.open
154
- },
155
- clickedOutside() {
156
- this.open = false
157
- }
158
- }
156
+ },
157
+ toggleDropdown() {
158
+ this.open = !this.open
159
+ },
160
+ clickedOutside() {
161
+ this.open = false
159
162
  }
163
+ }
164
+ }
160
165
  </script>
161
166
 
162
167
  <style src="./assets/sprite.css"></style>
163
168
  <style lang="scss">
164
- @import "../../../style/include";
169
+ @import "../../../style/include";
165
170
 
166
- .#{$prefix}input-tel {
167
- display: flex;
168
- align-items: baseline;
169
- direction: ltr;
171
+ .#{$prefix}input-tel {
172
+ display: flex;
173
+ align-items: baseline;
174
+ direction: ltr;
170
175
 
171
- .btn-country {
172
- width: 120px;
173
- border-color: var(--color-border)
176
+ .btn-country {
177
+ width: 120px;
178
+ border-color: var(--color-border)
174
179
 
175
- }
180
+ }
176
181
 
177
- .input-phone {
178
- width: calc(100% - 120px);
179
- }
180
- }
181
- </style>
182
+ .input-phone {
183
+ width: calc(100% - 120px);
184
+ }
185
+ }
186
+ </style>