@fleetbase/fleetops-engine 0.0.4 → 0.0.6

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 (52) hide show
  1. package/addon/components/cell/driver-name.js +1 -1
  2. package/addon/components/custom-field.hbs +1 -1
  3. package/addon/components/fleet-driver-listing.hbs +1 -1
  4. package/addon/components/fleet-driver-listing.js +15 -15
  5. package/addon/components/global-search.hbs +1 -1
  6. package/addon/components/integrated-order-details.js +1 -1
  7. package/addon/components/leaflet-draw-control.js +3 -4
  8. package/addon/components/live-map.js +0 -2
  9. package/addon/components/modals/contact-form.hbs +5 -5
  10. package/addon/components/modals/driver-form.hbs +6 -6
  11. package/addon/components/modals/entity-form.hbs +1 -1
  12. package/addon/components/modals/group-form.hbs +1 -1
  13. package/addon/components/modals/order-form.hbs +1 -1
  14. package/addon/components/modals/order-import.hbs +1 -1
  15. package/addon/components/modals/policy-form.hbs +2 -2
  16. package/addon/components/modals/role-form.hbs +1 -1
  17. package/addon/components/modals/user-form.hbs +3 -3
  18. package/addon/components/modals/vehicle-form.hbs +34 -34
  19. package/addon/components/modals/vendor-form.hbs +8 -8
  20. package/addon/components/modals/zone-form.hbs +1 -1
  21. package/addon/components/order-config/activity-flow-editor.hbs +1 -1
  22. package/addon/components/order-config/fields-editor.js +2 -7
  23. package/addon/components/order-list-overlay/order.hbs +0 -1
  24. package/addon/components/order-list-overlay.hbs +2 -2
  25. package/addon/controllers/management/contacts/index.js +4 -4
  26. package/addon/controllers/management/fleets/index.js +3 -4
  27. package/addon/controllers/management/fuel-reports/index.js +3 -2
  28. package/addon/controllers/management/issues/index.js +2 -1
  29. package/addon/controllers/management/places/index.js +4 -5
  30. package/addon/controllers/management/vehicles/index.js +2 -2
  31. package/addon/controllers/management/vendors/index.js +4 -3
  32. package/addon/controllers/management.js +0 -2
  33. package/addon/controllers/operations/orders/index/view.js +0 -1
  34. package/addon/controllers/operations/orders/index.js +1 -0
  35. package/addon/controllers/operations/service-rates/index.js +2 -2
  36. package/addon/controllers/operations/zones/index.js +8 -3
  37. package/addon/helpers/feature-group.js +0 -1
  38. package/addon/routes/comms/chat.js +1 -1
  39. package/addon/routes/comms/intercom.js +1 -1
  40. package/addon/routes/management/contacts/index.js +0 -1
  41. package/addon/routes/operations/dispatch.js +1 -1
  42. package/addon/services/service-areas.js +0 -1
  43. package/addon/templates/management/index.hbs +8 -8
  44. package/addon/templates/operations/orders/index/new.hbs +4 -4
  45. package/addon/templates/operations/service-rates/index/new.hbs +1 -1
  46. package/addon/templates/operations/zones/index.hbs +6 -6
  47. package/config/environment.js +1 -2
  48. package/index.js +4 -4
  49. package/package.json +8 -6
  50. package/addon/components/event-timeline.hbs +0 -7
  51. package/addon/components/event-timeline.js +0 -423
  52. package/app/components/event-timeline.js +0 -1
@@ -2,7 +2,7 @@ import Component from '@glimmer/component';
2
2
  import { action, get, computed } from '@ember/object';
3
3
 
4
4
  export default class CellDriverNameComponent extends Component {
5
- @computed('args.column.modelPath', 'args.row') get driver() {
5
+ @computed('args.{column.modelPath,args.row}') get driver() {
6
6
  const { column, row } = this.args;
7
7
 
8
8
  if (typeof column?.modelPath === 'string') {
@@ -1,6 +1,6 @@
1
1
  <div class="custom-meta-field" ...attributes>
2
2
  {{#if this.isTextInput}}
3
- <Input type="text" class="form-input w-full {{@inputClass}}" @value={{@value}} placeholder={{@placeholder}} />
3
+ <Input @type="text" class="form-input w-full {{@inputClass}}" @value={{@value}} placeholder={{@placeholder}} />
4
4
  {{/if}}
5
5
 
6
6
  {{#if this.isSelectInput}}
@@ -2,7 +2,7 @@
2
2
  <div class="mb-2 flex items-center justify-between">
3
3
  <div class="flex items-center">
4
4
  <div class="fleet-driver-listing-search">
5
- <Input @type="text" {{on "keyup" this.search}} placeholder="Search drivers in fleet" class="w-64 form-input form-input-sm" />
5
+ <Input @type="text" {{on "keyup" (perform this.search)}} placeholder="Search drivers in fleet" class="w-64 form-input form-input-sm" />
6
6
  </div>
7
7
 
8
8
  {{#if this.isLoading}}
@@ -3,26 +3,27 @@ import { tracked } from '@glimmer/tracking';
3
3
  import { inject as service } from '@ember/service';
4
4
  import { action, computed } from '@ember/object';
5
5
  import { isArray } from '@ember/array';
6
- import { task, timeout } from 'ember-concurrency';
6
+ import { isBlank } from '@ember/utils';
7
+ import { timeout } from 'ember-concurrency';
8
+ import { task } from 'ember-concurrency-decorators';
7
9
 
8
10
  export default class FleetDriverListingComponent extends Component {
9
11
  @service store;
10
12
  @service appCache;
11
-
12
13
  @tracked drivers = [];
13
14
  @tracked selected = [];
14
15
  @tracked query;
15
16
  @tracked isLoading = false;
16
17
  @tracked isLoaded = false;
17
18
 
18
- @computed ('selected.[]') get ids() {
19
- return this.selected.map(selection => selection.id);
19
+ @computed('selected.[]') get ids() {
20
+ return this.selected.map((selection) => selection.id);
20
21
  }
21
22
 
22
23
  @action async setupComponent() {
23
24
  const { selected, fleet } = this.args;
24
25
 
25
- this.selected = (isArray(selected) && selected.length) ? selected : [];
26
+ this.selected = isArray(selected) && selected.length ? selected : [];
26
27
  this.drivers = await this.queryFleetDrivers(fleet);
27
28
  }
28
29
 
@@ -95,23 +96,22 @@ export default class FleetDriverListingComponent extends Component {
95
96
  }
96
97
 
97
98
  @action toggleSelected(options = []) {
98
- return options.map(option => {
99
+ return options.map((option) => {
99
100
  option.set('selected', this.ids.includes(option.id));
100
101
 
101
102
  return option;
102
103
  });
103
104
  }
104
105
 
105
- @action search({ target }) {
106
- const { value } = target;
106
+ @task({ restartable: true }) *search({ target: { value } }) {
107
107
  const { fleet } = this.args;
108
108
 
109
- this.searchTask.perform(fleet, value);
110
- }
111
-
112
- @task(function* (fleet, query) {
109
+ if (isBlank(value)) {
110
+ return;
111
+ }
112
+
113
113
  yield timeout(300);
114
-
115
- this.drivers = yield this.queryFleetDrivers(fleet, query);
116
- }).restartable() searchTask;
114
+
115
+ this.drivers = yield this.queryFleetDrivers(fleet, value);
116
+ }
117
117
  }
@@ -64,7 +64,7 @@
64
64
  {{/if}}
65
65
  </div>
66
66
  <div>
67
- <div class="grid grid-cols-8 gap-2">
67
+ <div role="list" class="grid grid-cols-8 gap-2">
68
68
  {{#each result.payload.entities as |entity|}}
69
69
  <div role="listitem" title={{entity.name}}>
70
70
  <div class="mb-1.5">
@@ -1,6 +1,6 @@
1
1
  import Component from '@glimmer/component';
2
2
  import { tracked } from '@glimmer/tracking';
3
- import { action, computed } from '@ember/object';
3
+ import { action } from '@ember/object';
4
4
  import { equal } from '@ember/object/computed';
5
5
 
6
6
  export default class IntegratedOrderDetailsComponent extends Component {
@@ -1,6 +1,5 @@
1
1
  import BaseLayer from 'ember-leaflet/components/base-layer';
2
- import { getProperties, computed } from '@ember/object';
3
- import { run } from '@ember/runloop';
2
+ import { computed } from '@ember/object';
4
3
  import { assign } from '@ember/polyfills';
5
4
  import { scheduleOnce } from '@ember/runloop';
6
5
  import { classify, camelize } from '@ember/string';
@@ -25,7 +24,7 @@ export default class LeafletDrawControl extends BaseLayer {
25
24
 
26
25
  leafletOptions = ['draw', 'edit', 'remove', 'poly', 'position'];
27
26
 
28
- @computed('args', 'leaflefEvents.[]', 'leafletEvents') get usedLeafletEvents() {
27
+ @computed('leafletEvents.[]', 'args') get usedLeafletEvents() {
29
28
  return this.leafletEvents.filter((eventName) => {
30
29
  eventName = camelize(eventName.replace(':', ' '));
31
30
  let methodName = `_${eventName}`;
@@ -35,7 +34,7 @@ export default class LeafletDrawControl extends BaseLayer {
35
34
  });
36
35
  }
37
36
 
38
- @computed('args.draw', 'args.edit', 'args.remove', 'args.poly', 'args.position') get options() {
37
+ @computed('args.{draw,edit,remove,poly,position}') get options() {
39
38
  return {
40
39
  position: getWithDefault(this.args, 'position', 'topright'),
41
40
  draw: getWithDefault(this.args, 'draw', { marker: false, circlemarker: false, circle: false, polyline: false }),
@@ -9,10 +9,8 @@ import { alias } from '@ember/object/computed';
9
9
  import { guidFor } from '@ember/object/internals';
10
10
  import { later } from '@ember/runloop';
11
11
  import { allSettled } from 'rsvp';
12
- import extractCoordinates from '@fleetbase/ember-core/utils/extract-coordinates';
13
12
  import config from 'ember-get-config';
14
13
 
15
- const L = window.L;
16
14
  const DEFAULT_LATITUDE = 1.369;
17
15
  const DEFAULT_LONGITUDE = 103.8864;
18
16
 
@@ -3,7 +3,7 @@
3
3
  <div class="flex">
4
4
  <div class="w-32 mb-6 mr-6">
5
5
  <Image src={{@options.contact.photo_url}} @fallbackSrc={{config "defaultValues.contactImage"}} alt={{@options.contact.name}} height="128" width="128" class="h-32 w-32 rounded-md" />
6
- <UploadButton @name="photos" @accept="image/*" @onFileAdded={{fn @options.uploadNewPhoto}} class="w-32" />
6
+ <UploadButton @name="photos" @accept="image/*" @onFileAdded={{@options.uploadNewPhoto}} class="w-32" />
7
7
  </div>
8
8
  <div class="flex-1">
9
9
  <div class="grid grid-cols-2 gap-2 text-xs dark:text-gray-100">
@@ -11,28 +11,28 @@
11
11
  <label>
12
12
  Name
13
13
  </label>
14
- <Input @value={{@options.contact.name}} type="text" class="w-full form-input" placeholder="Name" />
14
+ <Input @value={{@options.contact.name}} @type="text" class="w-full form-input" placeholder="Name" />
15
15
  </div>
16
16
 
17
17
  <div class="input-group">
18
18
  <label>
19
19
  Title
20
20
  </label>
21
- <Input @value={{@options.contact.title}} type="text" class="w-full form-input" placeholder="Title" />
21
+ <Input @value={{@options.contact.title}} @type="text" class="w-full form-input" placeholder="Title" />
22
22
  </div>
23
23
 
24
24
  <div class="input-group">
25
25
  <label>
26
26
  Internal ID
27
27
  </label>
28
- <Input @value={{@options.contact.internal_id}} type="text" class="w-full form-input" placeholder="Internal ID" />
28
+ <Input @value={{@options.contact.internal_id}} @type="text" class="w-full form-input" placeholder="Internal ID" />
29
29
  </div>
30
30
 
31
31
  <div class="input-group">
32
32
  <label>
33
33
  Email
34
34
  </label>
35
- <Input @value={{@options.contact.email}} type="text" class="w-full form-input" placeholder="Email" />
35
+ <Input @value={{@options.contact.email}} @type="text" class="w-full form-input" placeholder="Email" />
36
36
  </div>
37
37
 
38
38
  <div class="input-group">
@@ -3,7 +3,7 @@
3
3
  <div class="flex">
4
4
  <div class="w-32 mb-6 mr-6">
5
5
  <Image src={{@options.driver.photo_url}} @fallbackSrc={{config "defaultValues.driverImage"}} alt={{@options.driver.name}} height="128" width="128" class="h-32 w-32 rounded-md" />
6
- <UploadButton @name="photos" @accept="image/*" @onFileAdded={{fn @options.uploadNewPhoto}} class="w-32" />
6
+ <UploadButton @name="photos" @accept="image/*" @onFileAdded={{@options.uploadNewPhoto}} class="w-32" />
7
7
  </div>
8
8
  <div class="flex-1">
9
9
  <div class="grid grid-cols-1 gap-2 text-xs dark:text-gray-100">
@@ -11,7 +11,7 @@
11
11
  <label>
12
12
  Name
13
13
  </label>
14
- <Input @value={{@options.driver.name}} type="text" class="w-full form-input" placeholder="Name" />
14
+ <Input @value={{@options.driver.name}} @type="text" class="w-full form-input" placeholder="Name" />
15
15
  </div>
16
16
  </div>
17
17
 
@@ -20,21 +20,21 @@
20
20
  <label>
21
21
  Internal ID
22
22
  </label>
23
- <Input @value={{@options.driver.internal_id}} type="text" class="w-full form-input" placeholder="Internal ID" />
23
+ <Input @value={{@options.driver.internal_id}} @type="text" class="w-full form-input" placeholder="Internal ID" />
24
24
  </div>
25
25
 
26
26
  <div class="input-group">
27
27
  <label>
28
28
  Drivers License
29
29
  </label>
30
- <Input @value={{@options.driver.drivers_license_number}} type="text" class="w-full form-input" placeholder="Drivers License" />
30
+ <Input @value={{@options.driver.drivers_license_number}} @type="text" class="w-full form-input" placeholder="Drivers License" />
31
31
  </div>
32
32
 
33
33
  <div class="input-group">
34
34
  <label>
35
35
  Email
36
36
  </label>
37
- <Input @value={{@options.driver.email}} type="text" class="w-full form-input" placeholder="Email" />
37
+ <Input @value={{@options.driver.email}} @type="text" class="w-full form-input" placeholder="Email" />
38
38
  </div>
39
39
 
40
40
  <div class="input-group">
@@ -66,7 +66,7 @@
66
66
  <label>
67
67
  City
68
68
  </label>
69
- <Input @value={{@options.driver.city}} type="text" class="w-full form-input" placeholder="City" />
69
+ <Input @value={{@options.driver.city}} @type="text" class="w-full form-input" placeholder="City" />
70
70
  </div>
71
71
 
72
72
  <div class="input-group">
@@ -3,7 +3,7 @@
3
3
  <div class="flex">
4
4
  <div class="w-32 mb-6 mr-6 flex flex-col items-center">
5
5
  <Image src={{@options.entity.photo_url}} alt={{@options.entity.name}} height="128" width="128" class="h-32 w-32 rounded-md" />
6
- <UploadButton @name="photos" @accept="image/*" @onFileAdded={{fn @options.uploadNewPhoto}} class="w-32" />
6
+ <UploadButton @name="photos" @accept="image/*" @onFileAdded={{@options.uploadNewPhoto}} class="w-32" />
7
7
  </div>
8
8
  <div class="flex-1 space-y-4">
9
9
  <ContentPanel @title="Details" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
@@ -5,7 +5,7 @@
5
5
  <label>
6
6
  Group Name
7
7
  </label>
8
- <Input @value={{@options.group.name}} type="text" class="w-full form-input" placeholder=" Group Name" />
8
+ <Input @value={{@options.group.name}} @type="text" class="w-full form-input" placeholder=" Group Name" />
9
9
  </div>
10
10
 
11
11
  <div class="input-group">
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
 
11
11
  <InputGroup @name="Customer" @helpText="Optionally assign the customer of this order. If it's a new customer, use the 'New Customer' button above.">
12
- <ModelSelect @modelName="customer" @selectedModel={{@options.order.customer}} @placeholder="Select Customer" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @allowClear={{true}} @onChange={{fn @options.setOrderCustomer}} as |model|>
12
+ <ModelSelect @modelName="customer" @selectedModel={{@options.order.customer}} @placeholder="Select Customer" @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @allowClear={{true}} @onChange={{@options.setOrderCustomer}} as |model|>
13
13
  <div class="flex items-center">
14
14
  <div class="w-7">
15
15
  <FaIcon @icon={{if model.isVendor "warehouse" "user" }} />
@@ -30,7 +30,7 @@
30
30
  <p class="text-base font-semibold my-5">Drag and drop spreadsheet files onto this dropzone</p>
31
31
  {{/if}}
32
32
 
33
- <UploadButton @buttonText="or select spreadsheets to upload" @type="magic" @name="spreadsheets" @for="spreadsheets" @accept={{join "," @options.acceptedFileTypes}} @multiple={{true}} @onFileAdded={{fn @options.queueFile}} class="w-72" />
33
+ <UploadButton @buttonText="or select spreadsheets to upload" @type="magic" @name="spreadsheets" @for="spreadsheets" @accept={{join "," @options.acceptedFileTypes}} @multiple={{true}} @onFileAdded={{@options.queueFile}} class="w-72" />
34
34
  </div>
35
35
  {{/if}}
36
36
  </FileDropzone>
@@ -4,13 +4,13 @@
4
4
  <label>
5
5
  Policy Name
6
6
  </label>
7
- <Input @value={{@options.policy.name}} type="text" class="w-full form-input" placeholder="Enter a name for your policy" />
7
+ <Input @value={{@options.policy.name}} @type="text" class="w-full form-input" placeholder="Enter a name for your policy" />
8
8
  </div>
9
9
  <div class="input-group">
10
10
  <label>
11
11
  Policy Description
12
12
  </label>
13
- <Input @value={{@options.policy.description}} type="text" class="w-full form-input" placeholder="Enter a description for your policy" />
13
+ <Input @value={{@options.policy.description}} @type="text" class="w-full form-input" placeholder="Enter a description for your policy" />
14
14
  </div>
15
15
  <div class="input-group">
16
16
  <label>
@@ -4,7 +4,7 @@
4
4
  <label>
5
5
  Role Name
6
6
  </label>
7
- <Input @value={{@options.role.name}} type="text" class="w-full form-input" placeholder="Enter a name for this role" />
7
+ <Input @value={{@options.role.name}} @type="text" class="w-full form-input" placeholder="Enter a name for this role" />
8
8
  </div>
9
9
  <div class="input-group">
10
10
  <label>
@@ -3,7 +3,7 @@
3
3
  <div class="flex">
4
4
  <div class="w-32 mb-6 mr-6">
5
5
  <img src={{@options.user.avatar_url}} alt={{@options.user.name}} class="w-32 h-32 rounded-md" />
6
- <FileUpload @name="photos" @accept="image/*" @onFileAdded={{fn @options.uploadNewPhoto}} as |queue|>
6
+ <FileUpload @name="photos" @accept="image/*" @onFileAdded={{@options.uploadNewPhoto}} as |queue|>
7
7
  <a tabindex={{0}} class="flex items-center px-0 mt-2 text-xs no-underline truncate btn btn-sm btn-default">
8
8
  {{#if queue.files.length}}
9
9
  <Spinner class="mr-1" />
@@ -25,14 +25,14 @@
25
25
  <label>
26
26
  Name
27
27
  </label>
28
- <Input @value={{@options.user.name}} type="text" class="w-full form-input" placeholder="Name" />
28
+ <Input @value={{@options.user.name}} @type="text" class="w-full form-input" placeholder="Name" />
29
29
  </div>
30
30
 
31
31
  <div class="input-group">
32
32
  <label>
33
33
  Email
34
34
  </label>
35
- <Input @value={{@options.user.email}} type="text" class="w-full form-input" placeholder="Email" />
35
+ <Input @value={{@options.user.email}} @type="text" class="w-full form-input" placeholder="Email" />
36
36
  </div>
37
37
 
38
38
  <div class="input-group">
@@ -3,7 +3,7 @@
3
3
  <div class="flex">
4
4
  <div class="w-32 mb-6 mr-6">
5
5
  <Image src={{@options.vehicle.photo_url}} @fallbackSrc={{config "defaultValues.vehicleImage"}} alt={{@options.vehicle.name}} height="128" width="128" class="h-32 w-32 rounded-md" />
6
- <UploadButton @name="photos" @accept="image/*" @onFileAdded={{fn @options.uploadNewPhoto}} class="w-32" />
6
+ <UploadButton @name="photos" @accept="image/*" @onFileAdded={{@options.uploadNewPhoto}} class="w-32" />
7
7
  </div>
8
8
  <div class="flex-1 space-y-4">
9
9
  <ContentPanel @title="Details" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
@@ -12,42 +12,42 @@
12
12
  <label>
13
13
  Internal ID
14
14
  </label>
15
- <Input @value={{@options.vehicle.internal_id}} type="text" class="w-full form-input" placeholder="Internal ID" />
15
+ <Input @value={{@options.vehicle.internal_id}} @type="text" class="w-full form-input" placeholder="Internal ID" />
16
16
  </div>
17
17
 
18
18
  <div class="input-group mb-2">
19
19
  <label>
20
20
  Plate Number
21
21
  </label>
22
- <Input @value={{@options.vehicle.plate_number}} type="text" class="w-full form-input" placeholder="Plate Number" />
22
+ <Input @value={{@options.vehicle.plate_number}} @type="text" class="w-full form-input" placeholder="Plate Number" />
23
23
  </div>
24
24
 
25
25
  <div class="input-group mb-2">
26
26
  <label>
27
27
  VIN Number
28
28
  </label>
29
- <Input @value={{@options.vehicle.vin}} type="text" class="w-full form-input" placeholder="VIN Number" />
29
+ <Input @value={{@options.vehicle.vin}} @type="text" class="w-full form-input" placeholder="VIN Number" />
30
30
  </div>
31
31
 
32
32
  <div class="input-group mb-2">
33
33
  <label>
34
34
  Make
35
35
  </label>
36
- <Input @value={{@options.vehicle.make}} type="text" class="w-full form-input" placeholder="Vehicle Make" />
36
+ <Input @value={{@options.vehicle.make}} @type="text" class="w-full form-input" placeholder="Vehicle Make" />
37
37
  </div>
38
38
 
39
39
  <div class="input-group mb-2">
40
40
  <label>
41
41
  Model
42
42
  </label>
43
- <Input @value={{@options.vehicle.model}} type="text" class="w-full form-input" placeholder="Vehicle Model" />
43
+ <Input @value={{@options.vehicle.model}} @type="text" class="w-full form-input" placeholder="Vehicle Model" />
44
44
  </div>
45
45
 
46
46
  <div class="input-group mb-2">
47
47
  <label>
48
48
  Year
49
49
  </label>
50
- <Input @value={{@options.vehicle.year}} type="text" class="w-full form-input" placeholder="Vehicle Year" />
50
+ <Input @value={{@options.vehicle.year}} @type="text" class="w-full form-input" placeholder="Vehicle Year" />
51
51
  </div>
52
52
 
53
53
  <div class="input-group mb-2">
@@ -81,77 +81,77 @@
81
81
  <label>
82
82
  0 To 100 kph
83
83
  </label>
84
- <Input @value={{@options.vehicle.model_0_to_100_kph}} type="text" class="w-full form-input" placeholder="0 To 100 kph" />
84
+ <Input @value={{@options.vehicle.model_0_to_100_kph}} @type="text" class="w-full form-input" placeholder="0 To 100 kph" />
85
85
  </div>
86
86
 
87
87
  <div class="input-group mb-2">
88
88
  <label>
89
89
  Body
90
90
  </label>
91
- <Input @value={{@options.vehicle.model_body}} type="text" class="w-full form-input" placeholder="Vehicle Body Type" />
91
+ <Input @value={{@options.vehicle.model_body}} @type="text" class="w-full form-input" placeholder="Vehicle Body Type" />
92
92
  </div>
93
93
 
94
94
  <div class="input-group mb-2">
95
95
  <label>
96
96
  Doors
97
97
  </label>
98
- <Input @value={{@options.vehicle.model_doors}} type="text" class="w-full form-input" placeholder="Number of Doors" />
98
+ <Input @value={{@options.vehicle.model_doors}} @type="text" class="w-full form-input" placeholder="Number of Doors" />
99
99
  </div>
100
100
 
101
101
  <div class="input-group mb-2">
102
102
  <label>
103
103
  Drive
104
104
  </label>
105
- <Input @value={{@options.vehicle.model_drive}} type="text" class="w-full form-input" placeholder="Vehicle Drive Type" />
105
+ <Input @value={{@options.vehicle.model_drive}} @type="text" class="w-full form-input" placeholder="Vehicle Drive Type" />
106
106
  </div>
107
107
 
108
108
  <div class="input-group mb-2">
109
109
  <label>
110
110
  Length (mm)
111
111
  </label>
112
- <Input @value={{@options.vehicle.model_length_mm}} type="text" class="w-full form-input" placeholder="Vehicle Length (mm)" />
112
+ <Input @value={{@options.vehicle.model_length_mm}} @type="text" class="w-full form-input" placeholder="Vehicle Length (mm)" />
113
113
  </div>
114
114
 
115
115
  <div class="input-group mb-2">
116
116
  <label>
117
117
  Seats
118
118
  </label>
119
- <Input @value={{@options.vehicle.model_seats}} type="text" class="w-full form-input" placeholder="Number of Seats" />
119
+ <Input @value={{@options.vehicle.model_seats}} @type="text" class="w-full form-input" placeholder="Number of Seats" />
120
120
  </div>
121
121
 
122
122
  <div class="input-group mb-2">
123
123
  <label>
124
124
  Top Speed (kph)
125
125
  </label>
126
- <Input @value={{@options.vehicle.model_top_speed_kph}} type="text" class="w-full form-input" placeholder="Vehicle Top Speed (kph)" />
126
+ <Input @value={{@options.vehicle.model_top_speed_kph}} @type="text" class="w-full form-input" placeholder="Vehicle Top Speed (kph)" />
127
127
  </div>
128
128
 
129
129
  <div class="input-group mb-2">
130
130
  <label>
131
131
  Transmission Type
132
132
  </label>
133
- <Input @value={{@options.vehicle.model_transmission_type}} type="text" class="w-full form-input" placeholder=" Vehicle Transmission Type" />
133
+ <Input @value={{@options.vehicle.model_transmission_type}} @type="text" class="w-full form-input" placeholder=" Vehicle Transmission Type" />
134
134
  </div>
135
135
 
136
136
  <div class="input-group mb-2">
137
137
  <label>
138
138
  Weight (kg)
139
139
  </label>
140
- <Input @value={{@options.vehicle.model_weight_kg}} type="text" class="w-full form-input" placeholder="Vehicle Weight (kg)" />
140
+ <Input @value={{@options.vehicle.model_weight_kg}} @type="text" class="w-full form-input" placeholder="Vehicle Weight (kg)" />
141
141
  </div>
142
142
 
143
143
  <div class="input-group mb-2">
144
144
  <label>
145
145
  Wheelbase (mm)
146
146
  </label>
147
- <Input @value={{@options.vehicle.model_wheelbase_mm}} type="text" class="w-full form-input" placeholder="Vehicle Wheelbase Length (mm)" />
147
+ <Input @value={{@options.vehicle.model_wheelbase_mm}} @type="text" class="w-full form-input" placeholder="Vehicle Wheelbase Length (mm)" />
148
148
  </div>
149
149
 
150
150
  <div class="input-group mb-2">
151
151
  <label>
152
152
  Width (mm)
153
153
  </label>
154
- <Input @value={{@options.vehicle.model_width_mm}} type="text" class="w-full form-input" placeholder="Vehicle Width (mm)" />
154
+ <Input @value={{@options.vehicle.model_width_mm}} @type="text" class="w-full form-input" placeholder="Vehicle Width (mm)" />
155
155
  </div>
156
156
  </div>
157
157
  </ContentPanel>
@@ -162,77 +162,77 @@
162
162
  <label>
163
163
  Engine Bore (mm)
164
164
  </label>
165
- <Input @value={{@options.vehicle.model_engine_bore_mm}} type="text" class="w-full form-input" placeholder="Engine Bore (mm)" />
165
+ <Input @value={{@options.vehicle.model_engine_bore_mm}} @type="text" class="w-full form-input" placeholder="Engine Bore (mm)" />
166
166
  </div>
167
167
 
168
168
  <div class="input-group mb-2">
169
169
  <label>
170
170
  CC
171
171
  </label>
172
- <Input @value={{@options.vehicle.model_engine_cc}} type="text" class="w-full form-input" placeholder="Engine CC" />
172
+ <Input @value={{@options.vehicle.model_engine_cc}} @type="text" class="w-full form-input" placeholder="Engine CC" />
173
173
  </div>
174
174
 
175
175
  <div class="input-group mb-2">
176
176
  <label>
177
177
  Compression
178
178
  </label>
179
- <Input @value={{@options.vehicle.model_engine_compression}} type="text" class="w-full form-input" placeholder=" Engine Compression" />
179
+ <Input @value={{@options.vehicle.model_engine_compression}} @type="text" class="w-full form-input" placeholder=" Engine Compression" />
180
180
  </div>
181
181
 
182
182
  <div class="input-group mb-2">
183
183
  <label>
184
184
  Cylinders
185
185
  </label>
186
- <Input @value={{@options.vehicle.model_engine_cyl}} type="text" class="w-full form-input" placeholder="Number of Cylinders" />
186
+ <Input @value={{@options.vehicle.model_engine_cyl}} @type="text" class="w-full form-input" placeholder="Number of Cylinders" />
187
187
  </div>
188
188
 
189
189
  <div class="input-group mb-2">
190
190
  <label>
191
191
  Position
192
192
  </label>
193
- <Input @value={{@options.vehicle.model_engine_position}} type="text" class="w-full form-input" placeholder="Engine Position" />
193
+ <Input @value={{@options.vehicle.model_engine_position}} @type="text" class="w-full form-input" placeholder="Engine Position" />
194
194
  </div>
195
195
 
196
196
  <div class="input-group mb-2">
197
197
  <label>
198
198
  Power (ps)
199
199
  </label>
200
- <Input @value={{@options.vehicle.model_engine_power_ps}} type="text" class="w-full form-input" placeholder="Engine Power (ps)" />
200
+ <Input @value={{@options.vehicle.model_engine_power_ps}} @type="text" class="w-full form-input" placeholder="Engine Power (ps)" />
201
201
  </div>
202
202
 
203
203
  <div class="input-group mb-2">
204
204
  <label>
205
205
  Power (rpm)
206
206
  </label>
207
- <Input @value={{@options.vehicle.model_engine_power_rpm}} type="text" class="w-full form-input" placeholder="Engine Power (rpm)" />
207
+ <Input @value={{@options.vehicle.model_engine_power_rpm}} @type="text" class="w-full form-input" placeholder="Engine Power (rpm)" />
208
208
  </div>
209
209
 
210
210
  <div class="input-group mb-2">
211
211
  <label>
212
212
  Stroke (mm)
213
213
  </label>
214
- <Input @value={{@options.vehicle.model_engine_stroke_mm}} type="text" class="w-full form-input" placeholder="Stroke Length (mm)" />
214
+ <Input @value={{@options.vehicle.model_engine_stroke_mm}} @type="text" class="w-full form-input" placeholder="Stroke Length (mm)" />
215
215
  </div>
216
216
 
217
217
  <div class="input-group mb-2">
218
218
  <label>
219
219
  Torque (nm)
220
220
  </label>
221
- <Input @value={{@options.vehicle.model_engine_torque_nm}} type="text" class="w-full form-input" placeholder="Engine Torque (nm)" />
221
+ <Input @value={{@options.vehicle.model_engine_torque_nm}} @type="text" class="w-full form-input" placeholder="Engine Torque (nm)" />
222
222
  </div>
223
223
 
224
224
  <div class="input-group mb-2">
225
225
  <label>
226
226
  Torque (rpm)
227
227
  </label>
228
- <Input @value={{@options.vehicle.model_engine_torque_rpm}} type="text" class="w-full form-input" placeholder="Engine Torque (rpm)" />
228
+ <Input @value={{@options.vehicle.model_engine_torque_rpm}} @type="text" class="w-full form-input" placeholder="Engine Torque (rpm)" />
229
229
  </div>
230
230
 
231
231
  <div class="input-group mb-2">
232
232
  <label>
233
233
  Valves per Cylinder
234
234
  </label>
235
- <Input @value={{@options.vehicle.model_engine_valves_per_cyl}} type="text" class="w-full form-input" placeholder="Valves per Cylinder" />
235
+ <Input @value={{@options.vehicle.model_engine_valves_per_cyl}} @type="text" class="w-full form-input" placeholder="Valves per Cylinder" />
236
236
  </div>
237
237
  </div>
238
238
  </ContentPanel>
@@ -243,35 +243,35 @@
243
243
  <label>
244
244
  Fuel
245
245
  </label>
246
- <Input @value={{@options.vehicle.model_engine_fuel}} type="text" class="w-full form-input" placeholder="Fuel Type" />
246
+ <Input @value={{@options.vehicle.model_engine_fuel}} @type="text" class="w-full form-input" placeholder="Fuel Type" />
247
247
  </div>
248
248
 
249
249
  <div class="input-group mb-2">
250
250
  <label>
251
251
  Fuel Cap (L)
252
252
  </label>
253
- <Input @value={{@options.vehicle.model_fuel_cap_l}} type="text" class="w-full form-input" placeholder="Fuel Cap Volume (L)" />
253
+ <Input @value={{@options.vehicle.model_fuel_cap_l}} @type="text" class="w-full form-input" placeholder="Fuel Cap Volume (L)" />
254
254
  </div>
255
255
 
256
256
  <div class="input-group mb-2">
257
257
  <label>
258
258
  Liters Per km City
259
259
  </label>
260
- <Input @value={{@options.vehicle.model_lkm_city}} type="text" class="w-full form-input" placeholder="Liters Per km City" />
260
+ <Input @value={{@options.vehicle.model_lkm_city}} @type="text" class="w-full form-input" placeholder="Liters Per km City" />
261
261
  </div>
262
262
 
263
263
  <div class="input-group mb-2">
264
264
  <label>
265
265
  Liters Per km Highway
266
266
  </label>
267
- <Input @value={{@options.vehicle.model_lkm_hwy}} type="text" class="w-full form-input" placeholder="Liters Per km Highway" />
267
+ <Input @value={{@options.vehicle.model_lkm_hwy}} @type="text" class="w-full form-input" placeholder="Liters Per km Highway" />
268
268
  </div>
269
269
 
270
270
  <div class="input-group mb-2">
271
271
  <label>
272
272
  Liters Per km Mixed
273
273
  </label>
274
- <Input @value={{@options.vehicle.model_lkm_mixed}} type="text" class="w-full form-input" placeholder="Liters Per km Mixed" />
274
+ <Input @value={{@options.vehicle.model_lkm_mixed}} @type="text" class="w-full form-input" placeholder="Liters Per km Mixed" />
275
275
  </div>
276
276
  </div>
277
277
  </ContentPanel>