mirror of
				https://github.com/mokuappio/serverless-invoices.git
				synced 2025-10-27 16:01:07 -04:00 
			
		
		
		
	Merge remote-tracking branch 'origin/main' into main
This commit is contained in:
		
							
								
								
									
										12
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										12
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -3143,8 +3143,7 @@ | ||||
|       "version": "4.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", | ||||
|       "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", | ||||
|       "dev": true, | ||||
|       "optional": true | ||||
|       "dev": true | ||||
|     }, | ||||
|     "coa": { | ||||
|       "version": "2.0.2", | ||||
| @ -7381,7 +7380,8 @@ | ||||
|     "lodash": { | ||||
|       "version": "4.17.20", | ||||
|       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", | ||||
|       "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" | ||||
|       "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "lodash.defaultsdeep": { | ||||
|       "version": "4.6.1", | ||||
| @ -8822,8 +8822,7 @@ | ||||
|       "version": "2.2.2", | ||||
|       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", | ||||
|       "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", | ||||
|       "dev": true, | ||||
|       "optional": true | ||||
|       "dev": true | ||||
|     }, | ||||
|     "pify": { | ||||
|       "version": "4.0.1", | ||||
| @ -10348,8 +10347,7 @@ | ||||
|       "version": "4.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", | ||||
|       "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", | ||||
|       "dev": true, | ||||
|       "optional": true | ||||
|       "dev": true | ||||
|     }, | ||||
|     "rx-lite-aggregates": { | ||||
|       "version": "4.0.8", | ||||
|  | ||||
| @ -16,7 +16,6 @@ | ||||
|     "dayjs": "^1.10.3", | ||||
|     "es6-promise": "^4.2.6", | ||||
|     "localforage": "^1.9.0", | ||||
|     "lodash": "^4.17.20", | ||||
|     "vue": "^2.6.10", | ||||
|     "vue-autosuggest": "^2.2.0", | ||||
|     "vue-multiselect": "^2.1.6", | ||||
|  | ||||
| @ -1,19 +0,0 @@ | ||||
| <template> | ||||
|   <div class="col-12 text-secondary text-center epmty-state"> | ||||
|     <div class="empty-state__task mt-5 mb-3 p-3 d-flex flex-column justify-content-between"> | ||||
|       <div class="empty-state__text"></div> | ||||
|       <div class="col-4 p-0 d-flex flex-row align-items-center"> | ||||
|         <div class="empty-state__text"></div> | ||||
|         <i class="material-icons md-10 text-caption ml-2">lens</i> | ||||
|       </div> | ||||
|     </div> | ||||
|     <p class="mb-1">Drop Tasks here</p> | ||||
|     <p> | ||||
|       <small>Overdue and unscheduled tasks<br> end up in backlog</small> | ||||
|     </p> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default {}; | ||||
| </script> | ||||
| @ -1,69 +0,0 @@ | ||||
| <template> | ||||
|   <div class="form-group color-picker"> | ||||
|     <label :for="field" v-if="label">{{ label }}</label> | ||||
|     <b-dropdown variant="outline-secondary" | ||||
|                 right | ||||
|                 :disabled="disabled" | ||||
|                 class="w-100"> | ||||
|       <template slot="button-content"> | ||||
|         <i class="material-icons" v-if="value" :style="{ color: value }">lens</i> | ||||
|         <!--        <span v-else>Choose color</span>--> | ||||
|       </template> | ||||
|       <b-dropdown-item-button v-for="color in colors" | ||||
|                               :key="color" | ||||
|                               @click="$emit('input', color)"> | ||||
|         <i class="material-icons" :style="{ color }">lens</i> | ||||
|       </b-dropdown-item-button> | ||||
|     </b-dropdown> | ||||
|     <slot/> | ||||
|     <AppError v-if="errors" :errors="errors" :field="field"/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { BDropdown, BDropdownItemButton } from 'bootstrap-vue'; | ||||
| import AppError from '@/components/form/AppError'; | ||||
| import _ from 'lodash'; | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     AppError, | ||||
|     BDropdown, | ||||
|     BDropdownItemButton, | ||||
|   }, | ||||
|   props: ['errors', 'label', 'value', 'field', 'disabled'], | ||||
|   data() { | ||||
|     return { | ||||
|       colors: [ | ||||
|         'rgb(6, 170, 245)', | ||||
|         'rgb(0, 0, 0)', | ||||
|         'rgb(234, 70, 141)', | ||||
|         'rgb(251, 139, 20)', | ||||
|         'rgb(199, 116, 28)', | ||||
|  | ||||
|         'rgb(75, 200, 0)', | ||||
|         'rgb(137, 0, 0)', | ||||
|         'rgb(225, 154, 134)', | ||||
|         'rgb(197, 107, 255)', | ||||
|         'rgb(32, 85, 0)', | ||||
|  | ||||
|         'rgb(55, 80, 181)', | ||||
|         'rgb(160, 26, 165)', | ||||
|         'rgb(241, 195, 63)', | ||||
|         'rgb(226, 5, 5)', | ||||
|         'rgb(4, 187, 155)', | ||||
|       ], | ||||
|     }; | ||||
|   }, | ||||
|   mounted() { | ||||
|     this.selectRandom(); | ||||
|   }, | ||||
|   methods: { | ||||
|     selectRandom() { | ||||
|       if (!this.value) { | ||||
|         this.$emit('input', _.sample(this.colors)); | ||||
|       } | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
| @ -1,61 +0,0 @@ | ||||
| <template> | ||||
|     <div class="form-group"> | ||||
|         <label :for="field" v-if="label" :class="labelClasses">{{ label }}</label> | ||||
|         <div :class="containerClasses"> | ||||
|             <textarea :disabled="disabled" | ||||
|                       :id="field" | ||||
|                       :placeholder="placeholder" | ||||
|                       class="form-control" | ||||
|                       :rows="rows" | ||||
|                       :class="[ | ||||
|                        errors && errors.has(field) ? 'is-invalid' : '', | ||||
|                        size ? 'form-control-' + size : '', | ||||
|                        ...inputClasses, | ||||
|                        ]" | ||||
|                       :autocomplete="autocomplete" | ||||
|                       :maxlength="max" | ||||
|                       :value="value" | ||||
|                       @input="$emit('input', $event.target.value)" | ||||
|                       @change="$emit('change', $event.target.value)" | ||||
|                       @keydown.self.enter.exact="$emit('submit', $event.target.value)" | ||||
|                       :ref="field" | ||||
|             > | ||||
|             </textarea> | ||||
|         </div> | ||||
|         <slot></slot> | ||||
|         <AppError v-if="errors" :errors="errors" :field="field"/> | ||||
|     </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import AppError from '@/components/form/AppError'; | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     AppError, | ||||
|   }, | ||||
|   props: { | ||||
|     errors: {}, | ||||
|     label: {}, | ||||
|     value: {}, | ||||
|     field: {}, | ||||
|     type: {}, | ||||
|     max: {}, | ||||
|     rows: {}, | ||||
|     disabled: {}, | ||||
|     placeholder: {}, | ||||
|     size: {}, | ||||
|     labelClasses: {}, | ||||
|     inputClasses: {}, | ||||
|     containerClasses: {}, | ||||
|     autocomplete: { | ||||
|       default: 'on', | ||||
|     }, | ||||
|   }, | ||||
|   methods: { | ||||
|     focus() { | ||||
|       this.$refs[this.field].focus(); | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
| @ -1,85 +0,0 @@ | ||||
| <template> | ||||
|     <div class="form-group typeahead"> | ||||
|         <VueAutosuggest | ||||
|                 ref="suggest" | ||||
|                 :input-props="{placeholder: placeholder, class: 'form-control form-control-sm tracker__input'}" | ||||
|                 :section-configs="config" | ||||
|                 :suggestions="suggestions" | ||||
|                 :value="value" | ||||
|                 :get-suggestion-value="getSuggestionValue" | ||||
|                 :should-render-suggestions="(size, loading) => size >= 0 && !loading && !closed" | ||||
|                 @input="onInput" | ||||
|                 @change="onChange" | ||||
|                 @blur="onBlur" | ||||
|                 @focus="onFocus" | ||||
|                 @selected="onSelected" | ||||
|         > | ||||
|             <template v-for="(_, name) in $scopedSlots" :slot="name" slot-scope="slotData"> | ||||
|                 <slot :name="name" v-bind="slotData"/> | ||||
|             </template> | ||||
|         </VueAutosuggest> | ||||
|     </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { VueAutosuggest } from 'vue-autosuggest'; | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     VueAutosuggest, | ||||
|   }, | ||||
|   props: { | ||||
|     value: {}, | ||||
|     placeholder: {}, | ||||
|     options: {}, | ||||
|     labelField: {}, | ||||
|     sectionConfigs: {}, | ||||
|     filter: { default: (option, query) => (option[this.labelField].toLowerCase().indexOf(query.toLowerCase()) > -1) }, | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       closed: true, | ||||
|     }; | ||||
|   }, | ||||
|   computed: { | ||||
|     suggestions() { | ||||
|       return this.options.map(group => ({ | ||||
|         ...group, | ||||
|         data: group.data.filter(option => this.filter(option, this.value)), | ||||
|       })) | ||||
|         .filter(group => group.data.length > 0); | ||||
|     }, | ||||
|     config() { | ||||
|       return { | ||||
|         default: { onSelected: this.onSelected }, | ||||
|         ...this.sectionConfigs, | ||||
|       }; | ||||
|     }, | ||||
|   }, | ||||
|   methods: { | ||||
|     getSuggestionValue(suggestion) { | ||||
|       return suggestion.item[this.labelField]; | ||||
|     }, | ||||
|     onInput(query) { | ||||
|       this.$emit('input', query); | ||||
|     }, | ||||
|     onChange(event) { | ||||
|       this.$emit('change', event.target.value); | ||||
|     }, | ||||
|     onFocus() { | ||||
|       this.closed = false; | ||||
|     }, | ||||
|     onBlur() { | ||||
|       this.closed = true; | ||||
|     }, | ||||
|     onSelected(suggestion) { | ||||
|       if (!suggestion) { | ||||
|         this.$refs.suggest.$el.querySelector('input').blur(); | ||||
|         return false; | ||||
|       } | ||||
|       // Enter on no suggestion returns null | ||||
|       this.$emit('selected', suggestion); | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
		Reference in New Issue
	
	Block a user