Added email type options to rules

This commit is contained in:
Will Browning 2021-12-03 16:23:20 +00:00
parent 9bfc7baba9
commit 21fbfd0335
24 changed files with 956 additions and 2247 deletions

View file

@ -34,7 +34,10 @@ class RuleController extends Controller
'name' => $request->name, 'name' => $request->name,
'conditions' => $conditions, 'conditions' => $conditions,
'actions' => $actions, 'actions' => $actions,
'operator' => $request->operator 'operator' => $request->operator,
'forwards' => $request->forwards ?? false,
'replies' => $request->replies ?? false,
'sends' => $request->sends ?? false
]); ]);
return new RuleResource($rule->refresh()); return new RuleResource($rule->refresh());
@ -56,7 +59,10 @@ class RuleController extends Controller
'name' => $request->name, 'name' => $request->name,
'conditions' => $conditions, 'conditions' => $conditions,
'actions' => $actions, 'actions' => $actions,
'operator' => $request->operator 'operator' => $request->operator,
'forwards' => $request->forwards ?? false,
'replies' => $request->replies ?? false,
'sends' => $request->sends ?? false
]); ]);
return new RuleResource($rule->refresh()); return new RuleResource($rule->refresh());

View file

@ -89,7 +89,10 @@ class StoreRuleRequest extends FormRequest
'operator' => [ 'operator' => [
'required', 'required',
'in:AND,OR' 'in:AND,OR'
] ],
'forwards' => 'boolean',
'replies' => 'boolean',
'sends' => 'boolean'
]; ];
} }
} }

View file

@ -16,6 +16,9 @@ class RuleResource extends JsonResource
'conditions' => $this->conditions, 'conditions' => $this->conditions,
'actions' => $this->actions, 'actions' => $this->actions,
'operator' => $this->operator, 'operator' => $this->operator,
'forwards' => $this->forwards,
'replies' => $this->replies,
'sends' => $this->sends,
'active' => $this->active, 'active' => $this->active,
'created_at' => $this->created_at->toDateTimeString(), 'created_at' => $this->created_at->toDateTimeString(),
'updated_at' => $this->updated_at->toDateTimeString(), 'updated_at' => $this->updated_at->toDateTimeString(),

View file

@ -250,7 +250,7 @@ class ForwardEmail extends Mailable implements ShouldQueue, ShouldBeEncrypted
$this->replacedSubject = $this->user->email_subject ? ' with subject "' . base64_decode($this->emailSubject) . '"' : null; $this->replacedSubject = $this->user->email_subject ? ' with subject "' . base64_decode($this->emailSubject) . '"' : null;
$this->checkRules(); $this->checkRules('Forwards');
$this->email->with([ $this->email->with([
'location' => $this->bannerLocation, 'location' => $this->bannerLocation,

View file

@ -166,7 +166,7 @@ class ReplyToEmail extends Mailable implements ShouldQueue, ShouldBeEncrypted
); );
} }
$this->checkRules(); $this->checkRules('Replies');
$this->email->with([ $this->email->with([
'shouldBlock' => $this->size === 0 'shouldBlock' => $this->size === 0

View file

@ -152,7 +152,7 @@ class SendFromEmail extends Mailable implements ShouldQueue, ShouldBeEncrypted
); );
} }
$this->checkRules(); $this->checkRules('Sends');
$this->email->with([ $this->email->with([
'shouldBlock' => $this->size === 0 'shouldBlock' => $this->size === 0

View file

@ -19,6 +19,9 @@ class Rule extends Model
'conditions', 'conditions',
'actions', 'actions',
'operator', 'operator',
'forwards',
'replies',
'sends',
'active', 'active',
'order' 'order'
]; ];
@ -32,6 +35,9 @@ class Rule extends Model
'id' => 'string', 'id' => 'string',
'user_id' => 'string', 'user_id' => 'string',
'active' => 'boolean', 'active' => 'boolean',
'forwards' => 'boolean',
'replies' => 'boolean',
'sends' => 'boolean',
'conditions' => 'array', 'conditions' => 'array',
'actions' => 'array' 'actions' => 'array'
]; ];

View file

@ -195,6 +195,30 @@ class User extends Authenticatable implements MustVerifyEmail
return $this->rules()->where('active', true)->orderBy('order'); return $this->rules()->where('active', true)->orderBy('order');
} }
/**
* Get all of the user's active rules in the correct order that should be run of forwards.
*/
public function activeRulesForForwardsOrdered()
{
return $this->rules()->where('active', true)->where('forwards', true)->orderBy('order');
}
/**
* Get all of the user's active rules in the correct order that should be run of forwards.
*/
public function activeRulesForRepliesOrdered()
{
return $this->rules()->where('active', true)->where('replies', true)->orderBy('order');
}
/**
* Get all of the user's active rules in the correct order that should be run of forwards.
*/
public function activeRulesForSendsOrdered()
{
return $this->rules()->where('active', true)->where('sends', true)->orderBy('order');
}
/** /**
* Get all of the user's additional usernames. * Get all of the user's additional usernames.
*/ */

View file

@ -6,9 +6,10 @@ use Illuminate\Support\Str;
trait CheckUserRules trait CheckUserRules
{ {
public function checkRules() public function checkRules(String $emailType)
{ {
$this->user->activeRulesOrdered()->each(function ($rule) { $method = "activeRulesFor{$emailType}Ordered";
$this->user->{$method}->each(function ($rule) {
// Check if the conditions of the rule are satisfied // Check if the conditions of the rule are satisfied
if ($this->ruleConditionsSatisfied($rule->conditions, $rule->operator)) { if ($this->ruleConditionsSatisfied($rule->conditions, $rule->operator)) {
// Apply actions for that rule // Apply actions for that rule

783
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -5,9 +5,9 @@ current:
major: 0 major: 0
minor: 8 minor: 8
patch: 7 patch: 7
prerelease: 2-g339af30 prerelease: 3-g9bfc7ba
buildmetadata: '' buildmetadata: ''
commit: 339af3 commit: 9bfc7b
timestamp: timestamp:
year: 2020 year: 2020
month: 10 month: 10

View file

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddEmailTypesToRulesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('rules', function (Blueprint $table) {
$table->boolean('sends')->after('operator')->default(false);
$table->boolean('replies')->after('operator')->default(false);
$table->boolean('forwards')->after('operator')->default(false);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('rules', function (Blueprint $table) {
$table->dropColumn('sends');
$table->dropColumn('replies');
$table->dropColumn('forwards');
});
}
}

394
package-lock.json generated
View file

@ -1589,9 +1589,9 @@
} }
}, },
"node_modules/@discoveryjs/json-ext": { "node_modules/@discoveryjs/json-ext": {
"version": "0.5.5", "version": "0.5.6",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz",
"integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==",
"engines": { "engines": {
"node": ">=10.0.0" "node": ">=10.0.0"
} }
@ -1629,9 +1629,9 @@
} }
}, },
"node_modules/@popperjs/core": { "node_modules/@popperjs/core": {
"version": "2.10.2", "version": "2.11.0",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.0.tgz",
"integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==", "integrity": "sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ==",
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/popperjs" "url": "https://opencollective.com/popperjs"
@ -1791,9 +1791,9 @@
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "16.11.10", "version": "16.11.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz",
"integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==" "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw=="
}, },
"node_modules/@types/parse-json": { "node_modules/@types/parse-json": {
"version": "4.0.0", "version": "4.0.0",
@ -2827,9 +2827,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001283", "version": "1.0.30001284",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz",
"integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==",
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/browserslist" "url": "https://opencollective.com/browserslist"
@ -2989,9 +2989,9 @@
} }
}, },
"node_modules/collect.js": { "node_modules/collect.js": {
"version": "4.29.0", "version": "4.29.3",
"resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.29.0.tgz", "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.29.3.tgz",
"integrity": "sha512-yhgGYEsLEcqnLT1NmRlN1+1euoz9SDhxQ4QyDhWYsKoWsg7252PKA5++dWaDs8mdFxbkmXDXQUaHXI9J2eTPkQ==" "integrity": "sha512-/6idZ7r3B25Q4cForbiHJ7+aqupcgMEtrKRn9D3viCbLw+YuNFjd23HwDH89Y2cU4jlhkwksD80nZFKtNE25Gw=="
}, },
"node_modules/color": { "node_modules/color": {
"version": "4.0.2", "version": "4.0.2",
@ -3019,9 +3019,9 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
}, },
"node_modules/color-string": { "node_modules/color-string": {
"version": "1.7.4", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.7.4.tgz", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz",
"integrity": "sha512-nVdUvPVgZMpRQad5dcsCMOSB5BXLljklTiaxS6ehhKxDsAI5sD7k5VmFuBt1y3Rlym8uulc/ANUN/bMWtBu6Sg==", "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==",
"dependencies": { "dependencies": {
"color-name": "^1.0.0", "color-name": "^1.0.0",
"simple-swizzle": "^0.2.2" "simple-swizzle": "^0.2.2"
@ -3208,11 +3208,11 @@
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
}, },
"node_modules/core-js-compat": { "node_modules/core-js-compat": {
"version": "3.19.1", "version": "3.19.2",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz",
"integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==",
"dependencies": { "dependencies": {
"browserslist": "^4.17.6", "browserslist": "^4.18.1",
"semver": "7.0.0" "semver": "7.0.0"
}, },
"funding": { "funding": {
@ -3411,9 +3411,9 @@
} }
}, },
"node_modules/css-select/node_modules/domhandler": { "node_modules/css-select/node_modules/domhandler": {
"version": "4.2.2", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
"dependencies": { "dependencies": {
"domelementtype": "^2.2.0" "domelementtype": "^2.2.0"
}, },
@ -3472,11 +3472,11 @@
} }
}, },
"node_modules/cssnano": { "node_modules/cssnano": {
"version": "5.0.11", "version": "5.0.12",
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.11.tgz", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.12.tgz",
"integrity": "sha512-5SHM31NAAe29jvy0MJqK40zZ/8dGlnlzcfHKw00bWMVFp8LWqtuyPSFwbaoIoxvt71KWJOfg8HMRGrBR3PExCg==", "integrity": "sha512-U38V4x2iJ3ijPdeWqUrEr4eKBB5PbEKsNP5T8xcik2Au3LeMtiMHX0i2Hu9k51FcKofNZumbrcdC6+a521IUHg==",
"dependencies": { "dependencies": {
"cssnano-preset-default": "^5.1.7", "cssnano-preset-default": "^5.1.8",
"is-resolvable": "^1.1.0", "is-resolvable": "^1.1.0",
"lilconfig": "^2.0.3", "lilconfig": "^2.0.3",
"yaml": "^1.10.2" "yaml": "^1.10.2"
@ -3493,9 +3493,9 @@
} }
}, },
"node_modules/cssnano-preset-default": { "node_modules/cssnano-preset-default": {
"version": "5.1.7", "version": "5.1.8",
"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.7.tgz", "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.8.tgz",
"integrity": "sha512-bWDjtTY+BOqrqBtsSQIbN0RLGD2Yr2CnecpP0ydHNafh9ZUEre8c8VYTaH9FEbyOt0eIfEUAYYk5zj92ioO8LA==", "integrity": "sha512-zWMlP0+AMPBVE852SqTrP0DnhTcTA2C1wAF92TKZ3Va+aUVqLIhkqKlnJIXXdqXD7RN+S1ujuWmNpvrJBiM/vg==",
"dependencies": { "dependencies": {
"css-declaration-sorter": "^6.0.3", "css-declaration-sorter": "^6.0.3",
"cssnano-utils": "^2.0.1", "cssnano-utils": "^2.0.1",
@ -3522,7 +3522,7 @@
"postcss-normalize-url": "^5.0.3", "postcss-normalize-url": "^5.0.3",
"postcss-normalize-whitespace": "^5.0.1", "postcss-normalize-whitespace": "^5.0.1",
"postcss-ordered-values": "^5.0.2", "postcss-ordered-values": "^5.0.2",
"postcss-reduce-initial": "^5.0.1", "postcss-reduce-initial": "^5.0.2",
"postcss-reduce-transforms": "^5.0.1", "postcss-reduce-transforms": "^5.0.1",
"postcss-svgo": "^5.0.3", "postcss-svgo": "^5.0.3",
"postcss-unique-selectors": "^5.0.2" "postcss-unique-selectors": "^5.0.2"
@ -3557,9 +3557,9 @@
} }
}, },
"node_modules/date-fns": { "node_modules/date-fns": {
"version": "2.26.0", "version": "2.27.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.26.0.tgz", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz",
"integrity": "sha512-VQI812dRi3cusdY/fhoBKvc6l2W8BPWU1FNVnFH9Nttjx4AFBRzfSVb/Eyc7jBT6e9sg1XtAGsYpBQ6c/jygbg==", "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==",
"engines": { "engines": {
"node": ">=0.11" "node": ">=0.11"
}, },
@ -3579,9 +3579,9 @@
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.2", "version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dependencies": { "dependencies": {
"ms": "2.1.2" "ms": "2.1.2"
}, },
@ -3800,9 +3800,9 @@
} }
}, },
"node_modules/dom-serializer/node_modules/domhandler": { "node_modules/dom-serializer/node_modules/domhandler": {
"version": "4.2.2", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
"dependencies": { "dependencies": {
"domelementtype": "^2.2.0" "domelementtype": "^2.2.0"
}, },
@ -3861,9 +3861,9 @@
} }
}, },
"node_modules/domutils/node_modules/domhandler": { "node_modules/domutils/node_modules/domhandler": {
"version": "4.2.2", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
"dependencies": { "dependencies": {
"domelementtype": "^2.2.0" "domelementtype": "^2.2.0"
}, },
@ -3902,9 +3902,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.3", "version": "1.4.10",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.3.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.10.tgz",
"integrity": "sha512-hfpppjYhqIZB8jrNb0rNceQRkSnBN7QJl3W26O1jUv3F3BkQknqy1YTqVXkFnIcFtBc3Qnv5M7r5Lez2iOLgZA==" "integrity": "sha512-tFgA40Iq2oy4k2PnZrLJowbgpij+lD6ZLxkw8Ht1NKTYyN8dvSvC5xlo8X0WW2jqhKSzITrbr5mpB4/AZ/8OUA=="
}, },
"node_modules/elliptic": { "node_modules/elliptic": {
"version": "6.5.4", "version": "6.5.4",
@ -4821,9 +4821,9 @@
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
}, },
"node_modules/http-parser-js": { "node_modules/http-parser-js": {
"version": "0.5.3", "version": "0.5.5",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz",
"integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA=="
}, },
"node_modules/http-proxy": { "node_modules/http-proxy": {
"version": "1.18.1", "version": "1.18.1",
@ -5380,9 +5380,9 @@
} }
}, },
"node_modules/jest-worker": { "node_modules/jest-worker": {
"version": "27.3.1", "version": "27.4.2",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
"integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
"dependencies": { "dependencies": {
"@types/node": "*", "@types/node": "*",
"merge-stream": "^2.0.0", "merge-stream": "^2.0.0",
@ -6145,14 +6145,6 @@
"which": "^2.0.2" "which": "^2.0.2"
} }
}, },
"node_modules/node-notifier/node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/node-releases": { "node_modules/node-releases": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
@ -6640,9 +6632,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.1", "version": "8.4.4",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.1.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz",
"integrity": "sha512-WqLs/TTzXdG+/A4ZOOK9WDZiikrRaiA+eoEb/jz2DT9KUhMNHgP7yKPO8vwi62ZCsb703Gwb7BMZwDzI54Y2Ag==", "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==",
"dependencies": { "dependencies": {
"nanoid": "^3.1.30", "nanoid": "^3.1.30",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
@ -6801,12 +6793,12 @@
} }
}, },
"node_modules/postcss-loader": { "node_modules/postcss-loader": {
"version": "6.2.0", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.0.tgz", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
"integrity": "sha512-H9hv447QjQJVDbHj3OUdciyAXY3v5+UDduzEytAlZCVHCpNAAg/mCSwhYYqZr9BiGYhmYspU8QXxZwiHTLn3yA==", "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==",
"dependencies": { "dependencies": {
"cosmiconfig": "^7.0.0", "cosmiconfig": "^7.0.0",
"klona": "^2.0.4", "klona": "^2.0.5",
"semver": "^7.3.5" "semver": "^7.3.5"
}, },
"engines": { "engines": {
@ -7133,11 +7125,11 @@
} }
}, },
"node_modules/postcss-reduce-initial": { "node_modules/postcss-reduce-initial": {
"version": "5.0.1", "version": "5.0.2",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz",
"integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==",
"dependencies": { "dependencies": {
"browserslist": "^4.16.0", "browserslist": "^4.16.6",
"caniuse-api": "^3.0.0" "caniuse-api": "^3.0.0"
}, },
"engines": { "engines": {
@ -7205,9 +7197,9 @@
} }
}, },
"node_modules/postcss-value-parser": { "node_modules/postcss-value-parser": {
"version": "4.1.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "2.5.0", "version": "2.5.0",
@ -7299,25 +7291,25 @@
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
}, },
"node_modules/purgecss": { "node_modules/purgecss": {
"version": "4.0.3", "version": "4.1.3",
"resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz",
"integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==",
"dependencies": { "dependencies": {
"commander": "^6.0.0", "commander": "^8.0.0",
"glob": "^7.0.0", "glob": "^7.1.7",
"postcss": "^8.2.1", "postcss": "^8.3.5",
"postcss-selector-parser": "^6.0.2" "postcss-selector-parser": "^6.0.6"
}, },
"bin": { "bin": {
"purgecss": "bin/purgecss.js" "purgecss": "bin/purgecss.js"
} }
}, },
"node_modules/purgecss/node_modules/commander": { "node_modules/purgecss/node_modules/commander": {
"version": "6.2.1", "version": "8.3.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
"integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
"engines": { "engines": {
"node": ">= 6" "node": ">= 12"
} }
}, },
"node_modules/qs": { "node_modules/qs": {
@ -8090,12 +8082,12 @@
} }
}, },
"node_modules/sockjs": { "node_modules/sockjs": {
"version": "0.3.21", "version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
"integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
"dependencies": { "dependencies": {
"faye-websocket": "^0.11.3", "faye-websocket": "^0.11.3",
"uuid": "^3.4.0", "uuid": "^8.3.2",
"websocket-driver": "^0.7.4" "websocket-driver": "^0.7.4"
} }
}, },
@ -8737,12 +8729,11 @@
} }
}, },
"node_modules/uuid": { "node_modules/uuid": {
"version": "3.4.0", "version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
"bin": { "bin": {
"uuid": "bin/uuid" "uuid": "dist/bin/uuid"
} }
}, },
"node_modules/v-clipboard": { "node_modules/v-clipboard": {
@ -9349,28 +9340,28 @@
} }
}, },
"node_modules/yargs": { "node_modules/yargs": {
"version": "17.2.1", "version": "17.3.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz",
"integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==",
"dependencies": { "dependencies": {
"cliui": "^7.0.2", "cliui": "^7.0.2",
"escalade": "^3.1.1", "escalade": "^3.1.1",
"get-caller-file": "^2.0.5", "get-caller-file": "^2.0.5",
"require-directory": "^2.1.1", "require-directory": "^2.1.1",
"string-width": "^4.2.0", "string-width": "^4.2.3",
"y18n": "^5.0.5", "y18n": "^5.0.5",
"yargs-parser": "^20.2.2" "yargs-parser": "^21.0.0"
}, },
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/yargs-parser": { "node_modules/yargs-parser": {
"version": "20.2.9", "version": "21.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==",
"engines": { "engines": {
"node": ">=10" "node": ">=12"
} }
} }
}, },
@ -10438,9 +10429,9 @@
} }
}, },
"@discoveryjs/json-ext": { "@discoveryjs/json-ext": {
"version": "0.5.5", "version": "0.5.6",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz",
"integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==" "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA=="
}, },
"@nodelib/fs.scandir": { "@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
@ -10466,9 +10457,9 @@
} }
}, },
"@popperjs/core": { "@popperjs/core": {
"version": "2.10.2", "version": "2.11.0",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.0.tgz",
"integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==" "integrity": "sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ=="
}, },
"@trysound/sax": { "@trysound/sax": {
"version": "0.2.0", "version": "0.2.0",
@ -10620,9 +10611,9 @@
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="
}, },
"@types/node": { "@types/node": {
"version": "16.11.10", "version": "16.11.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz",
"integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==" "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw=="
}, },
"@types/parse-json": { "@types/parse-json": {
"version": "4.0.0", "version": "4.0.0",
@ -11459,9 +11450,9 @@
} }
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30001283", "version": "1.0.30001284",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz",
"integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==" "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw=="
}, },
"chalk": { "chalk": {
"version": "4.1.2", "version": "4.1.2",
@ -11576,9 +11567,9 @@
} }
}, },
"collect.js": { "collect.js": {
"version": "4.29.0", "version": "4.29.3",
"resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.29.0.tgz", "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.29.3.tgz",
"integrity": "sha512-yhgGYEsLEcqnLT1NmRlN1+1euoz9SDhxQ4QyDhWYsKoWsg7252PKA5++dWaDs8mdFxbkmXDXQUaHXI9J2eTPkQ==" "integrity": "sha512-/6idZ7r3B25Q4cForbiHJ7+aqupcgMEtrKRn9D3viCbLw+YuNFjd23HwDH89Y2cU4jlhkwksD80nZFKtNE25Gw=="
}, },
"color": { "color": {
"version": "4.0.2", "version": "4.0.2",
@ -11603,9 +11594,9 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
}, },
"color-string": { "color-string": {
"version": "1.7.4", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.7.4.tgz", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz",
"integrity": "sha512-nVdUvPVgZMpRQad5dcsCMOSB5BXLljklTiaxS6ehhKxDsAI5sD7k5VmFuBt1y3Rlym8uulc/ANUN/bMWtBu6Sg==", "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==",
"requires": { "requires": {
"color-name": "^1.0.0", "color-name": "^1.0.0",
"simple-swizzle": "^0.2.2" "simple-swizzle": "^0.2.2"
@ -11760,11 +11751,11 @@
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
}, },
"core-js-compat": { "core-js-compat": {
"version": "3.19.1", "version": "3.19.2",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz",
"integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==",
"requires": { "requires": {
"browserslist": "^4.17.6", "browserslist": "^4.18.1",
"semver": "7.0.0" "semver": "7.0.0"
}, },
"dependencies": { "dependencies": {
@ -11917,9 +11908,9 @@
}, },
"dependencies": { "dependencies": {
"domhandler": { "domhandler": {
"version": "4.2.2", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
"requires": { "requires": {
"domelementtype": "^2.2.0" "domelementtype": "^2.2.0"
} }
@ -11958,20 +11949,20 @@
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
}, },
"cssnano": { "cssnano": {
"version": "5.0.11", "version": "5.0.12",
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.11.tgz", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.12.tgz",
"integrity": "sha512-5SHM31NAAe29jvy0MJqK40zZ/8dGlnlzcfHKw00bWMVFp8LWqtuyPSFwbaoIoxvt71KWJOfg8HMRGrBR3PExCg==", "integrity": "sha512-U38V4x2iJ3ijPdeWqUrEr4eKBB5PbEKsNP5T8xcik2Au3LeMtiMHX0i2Hu9k51FcKofNZumbrcdC6+a521IUHg==",
"requires": { "requires": {
"cssnano-preset-default": "^5.1.7", "cssnano-preset-default": "^5.1.8",
"is-resolvable": "^1.1.0", "is-resolvable": "^1.1.0",
"lilconfig": "^2.0.3", "lilconfig": "^2.0.3",
"yaml": "^1.10.2" "yaml": "^1.10.2"
} }
}, },
"cssnano-preset-default": { "cssnano-preset-default": {
"version": "5.1.7", "version": "5.1.8",
"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.7.tgz", "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.8.tgz",
"integrity": "sha512-bWDjtTY+BOqrqBtsSQIbN0RLGD2Yr2CnecpP0ydHNafh9ZUEre8c8VYTaH9FEbyOt0eIfEUAYYk5zj92ioO8LA==", "integrity": "sha512-zWMlP0+AMPBVE852SqTrP0DnhTcTA2C1wAF92TKZ3Va+aUVqLIhkqKlnJIXXdqXD7RN+S1ujuWmNpvrJBiM/vg==",
"requires": { "requires": {
"css-declaration-sorter": "^6.0.3", "css-declaration-sorter": "^6.0.3",
"cssnano-utils": "^2.0.1", "cssnano-utils": "^2.0.1",
@ -11998,7 +11989,7 @@
"postcss-normalize-url": "^5.0.3", "postcss-normalize-url": "^5.0.3",
"postcss-normalize-whitespace": "^5.0.1", "postcss-normalize-whitespace": "^5.0.1",
"postcss-ordered-values": "^5.0.2", "postcss-ordered-values": "^5.0.2",
"postcss-reduce-initial": "^5.0.1", "postcss-reduce-initial": "^5.0.2",
"postcss-reduce-transforms": "^5.0.1", "postcss-reduce-transforms": "^5.0.1",
"postcss-svgo": "^5.0.3", "postcss-svgo": "^5.0.3",
"postcss-unique-selectors": "^5.0.2" "postcss-unique-selectors": "^5.0.2"
@ -12019,9 +12010,9 @@
} }
}, },
"date-fns": { "date-fns": {
"version": "2.26.0", "version": "2.27.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.26.0.tgz", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz",
"integrity": "sha512-VQI812dRi3cusdY/fhoBKvc6l2W8BPWU1FNVnFH9Nttjx4AFBRzfSVb/Eyc7jBT6e9sg1XtAGsYpBQ6c/jygbg==" "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q=="
}, },
"dayjs": { "dayjs": {
"version": "1.10.7", "version": "1.10.7",
@ -12034,9 +12025,9 @@
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
}, },
"debug": { "debug": {
"version": "4.3.2", "version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"requires": { "requires": {
"ms": "2.1.2" "ms": "2.1.2"
} }
@ -12212,9 +12203,9 @@
}, },
"dependencies": { "dependencies": {
"domhandler": { "domhandler": {
"version": "4.2.2", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
"requires": { "requires": {
"domelementtype": "^2.2.0" "domelementtype": "^2.2.0"
} }
@ -12250,9 +12241,9 @@
}, },
"dependencies": { "dependencies": {
"domhandler": { "domhandler": {
"version": "4.2.2", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
"requires": { "requires": {
"domelementtype": "^2.2.0" "domelementtype": "^2.2.0"
} }
@ -12284,9 +12275,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.4.3", "version": "1.4.10",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.3.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.10.tgz",
"integrity": "sha512-hfpppjYhqIZB8jrNb0rNceQRkSnBN7QJl3W26O1jUv3F3BkQknqy1YTqVXkFnIcFtBc3Qnv5M7r5Lez2iOLgZA==" "integrity": "sha512-tFgA40Iq2oy4k2PnZrLJowbgpij+lD6ZLxkw8Ht1NKTYyN8dvSvC5xlo8X0WW2jqhKSzITrbr5mpB4/AZ/8OUA=="
}, },
"elliptic": { "elliptic": {
"version": "6.5.4", "version": "6.5.4",
@ -12983,9 +12974,9 @@
} }
}, },
"http-parser-js": { "http-parser-js": {
"version": "0.5.3", "version": "0.5.5",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz",
"integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA=="
}, },
"http-proxy": { "http-proxy": {
"version": "1.18.1", "version": "1.18.1",
@ -13364,9 +13355,9 @@
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
}, },
"jest-worker": { "jest-worker": {
"version": "27.3.1", "version": "27.4.2",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
"integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
"requires": { "requires": {
"@types/node": "*", "@types/node": "*",
"merge-stream": "^2.0.0", "merge-stream": "^2.0.0",
@ -13954,13 +13945,6 @@
"shellwords": "^0.1.1", "shellwords": "^0.1.1",
"uuid": "^8.3.0", "uuid": "^8.3.0",
"which": "^2.0.2" "which": "^2.0.2"
},
"dependencies": {
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
} }
}, },
"node-releases": { "node-releases": {
@ -14312,9 +14296,9 @@
} }
}, },
"postcss": { "postcss": {
"version": "8.4.1", "version": "8.4.4",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.1.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz",
"integrity": "sha512-WqLs/TTzXdG+/A4ZOOK9WDZiikrRaiA+eoEb/jz2DT9KUhMNHgP7yKPO8vwi62ZCsb703Gwb7BMZwDzI54Y2Ag==", "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==",
"requires": { "requires": {
"nanoid": "^3.1.30", "nanoid": "^3.1.30",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
@ -14403,12 +14387,12 @@
} }
}, },
"postcss-loader": { "postcss-loader": {
"version": "6.2.0", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.0.tgz", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
"integrity": "sha512-H9hv447QjQJVDbHj3OUdciyAXY3v5+UDduzEytAlZCVHCpNAAg/mCSwhYYqZr9BiGYhmYspU8QXxZwiHTLn3yA==", "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==",
"requires": { "requires": {
"cosmiconfig": "^7.0.0", "cosmiconfig": "^7.0.0",
"klona": "^2.0.4", "klona": "^2.0.5",
"semver": "^7.3.5" "semver": "^7.3.5"
} }
}, },
@ -14596,11 +14580,11 @@
} }
}, },
"postcss-reduce-initial": { "postcss-reduce-initial": {
"version": "5.0.1", "version": "5.0.2",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz",
"integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==",
"requires": { "requires": {
"browserslist": "^4.16.0", "browserslist": "^4.16.6",
"caniuse-api": "^3.0.0" "caniuse-api": "^3.0.0"
} }
}, },
@ -14641,9 +14625,9 @@
} }
}, },
"postcss-value-parser": { "postcss-value-parser": {
"version": "4.1.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
}, },
"prettier": { "prettier": {
"version": "2.5.0", "version": "2.5.0",
@ -14718,20 +14702,20 @@
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
}, },
"purgecss": { "purgecss": {
"version": "4.0.3", "version": "4.1.3",
"resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz",
"integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==",
"requires": { "requires": {
"commander": "^6.0.0", "commander": "^8.0.0",
"glob": "^7.0.0", "glob": "^7.1.7",
"postcss": "^8.2.1", "postcss": "^8.3.5",
"postcss-selector-parser": "^6.0.2" "postcss-selector-parser": "^6.0.6"
}, },
"dependencies": { "dependencies": {
"commander": { "commander": {
"version": "6.2.1", "version": "8.3.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
"integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
} }
} }
}, },
@ -15342,12 +15326,12 @@
} }
}, },
"sockjs": { "sockjs": {
"version": "0.3.21", "version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
"integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
"requires": { "requires": {
"faye-websocket": "^0.11.3", "faye-websocket": "^0.11.3",
"uuid": "^3.4.0", "uuid": "^8.3.2",
"websocket-driver": "^0.7.4" "websocket-driver": "^0.7.4"
} }
}, },
@ -15829,9 +15813,9 @@
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
}, },
"uuid": { "uuid": {
"version": "3.4.0", "version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}, },
"v-clipboard": { "v-clipboard": {
"version": "2.2.3", "version": "2.2.3",
@ -16263,23 +16247,23 @@
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
}, },
"yargs": { "yargs": {
"version": "17.2.1", "version": "17.3.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz",
"integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==",
"requires": { "requires": {
"cliui": "^7.0.2", "cliui": "^7.0.2",
"escalade": "^3.1.1", "escalade": "^3.1.1",
"get-caller-file": "^2.0.5", "get-caller-file": "^2.0.5",
"require-directory": "^2.1.1", "require-directory": "^2.1.1",
"string-width": "^4.2.0", "string-width": "^4.2.3",
"y18n": "^5.0.5", "y18n": "^5.0.5",
"yargs-parser": "^20.2.2" "yargs-parser": "^21.0.0"
} }
}, },
"yargs-parser": { "yargs-parser": {
"version": "20.2.9", "version": "21.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA=="
} }
} }
} }

View file

@ -7,18 +7,7 @@
id="project-options-menu-0" id="project-options-menu-0"
aria-has-popup="true" aria-has-popup="true"
type="button" type="button"
class=" class="w-8 h-8 bg-white inline-flex items-center justify-center text-grey-400 rounded-full hover:text-grey-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500"
w-8
h-8
bg-white
inline-flex
items-center
justify-center
text-grey-400
rounded-full
hover:text-grey-500
focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500
"
> >
<span class="sr-only">Open options</span> <span class="sr-only">Open options</span>
@ -39,21 +28,7 @@
> >
<div <div
v-show="isOpen" v-show="isOpen"
class=" class="mx-3 origin-top-right absolute right-7 top-0 w-48 mt-1 rounded-md shadow-lg z-10 bg-white ring-1 ring-black ring-opacity-5 divide-y divide-grey-200"
mx-3
origin-top-right
absolute
right-7
top-0
w-48
mt-1
rounded-md
shadow-lg
z-10
bg-white
ring-1 ring-black ring-opacity-5
divide-y divide-grey-200
"
role="menu" role="menu"
aria-orientation="vertical" aria-orientation="vertical"
aria-labelledby="project-options-menu-0" aria-labelledby="project-options-menu-0"

View file

@ -4,38 +4,12 @@
type="button" type="button"
:aria-pressed="value.toString()" :aria-pressed="value.toString()"
:class="this.value ? 'bg-cyan-500' : 'bg-grey-300'" :class="this.value ? 'bg-cyan-500' : 'bg-grey-300'"
class=" class="relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none"
relative
inline-flex
flex-shrink-0
h-6
w-11
border-2 border-transparent
rounded-full
cursor-pointer
transition-colors
ease-in-out
duration-200
focus:outline-none
"
> >
<span class="sr-only">Use setting</span> <span class="sr-only">Use setting</span>
<span <span
:class="this.value ? 'translate-x-5' : 'translate-x-0'" :class="this.value ? 'translate-x-5' : 'translate-x-0'"
class=" class="relative inline-block h-5 w-5 rounded-full bg-white shadow transform ring-0 transition ease-in-out duration-200"
relative
inline-block
h-5
w-5
rounded-full
bg-white
shadow
transform
ring-0
transition
ease-in-out
duration-200
"
> >
<span <span
:class="this.value ? 'opacity-0 ease-out duration-100' : 'opacity-100 ease-in duration-200'" :class="this.value ? 'opacity-0 ease-out duration-100' : 'opacity-100 ease-in duration-200'"

View file

@ -59,16 +59,7 @@
<div class="mt-6"> <div class="mt-6">
<button <button
@click="remove" @click="remove"
class=" class="bg-red-500 hover:bg-red-600 text-white font-bold py-3 px-4 rounded focus:outline-none"
bg-red-500
hover:bg-red-600
text-white
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="removeKeyLoading ? 'cursor-not-allowed' : ''" :class="removeKeyLoading ? 'cursor-not-allowed' : ''"
:disabled="removeKeyLoading" :disabled="removeKeyLoading"
> >
@ -77,18 +68,7 @@
</button> </button>
<button <button
@click="closeDeleteKeyModal" @click="closeDeleteKeyModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Close Close
</button> </button>

View file

@ -36,17 +36,7 @@
<button <button
@click="openCreateTokenModal" @click="openCreateTokenModal"
class=" class="bg-cyan-400 w-full hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
w-full
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
> >
Generate New Token Generate New Token
</button> </button>
@ -117,33 +107,14 @@
v-model="form.name" v-model="form.name"
type="text" type="text"
id="create-token-name" id="create-token-name"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3 mb-6"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
mb-6
"
:class="form.errors.length > 0 ? 'border-red-500' : ''" :class="form.errors.length > 0 ? 'border-red-500' : ''"
placeholder="e.g. Firefox extension" placeholder="e.g. Firefox extension"
autofocus autofocus
/> />
<button <button
@click="store" @click="store"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="loading ? 'cursor-not-allowed' : ''" :class="loading ? 'cursor-not-allowed' : ''"
:disabled="loading" :disabled="loading"
> >
@ -152,18 +123,7 @@
</button> </button>
<button <button
@click="closeCreateTokenModal" @click="closeCreateTokenModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Close Close
</button> </button>
@ -181,33 +141,14 @@
</p> </p>
<textarea <textarea
v-model="accessToken" v-model="accessToken"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3 text-sm"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
text-sm
"
rows="10" rows="10"
readonly readonly
> >
</textarea> </textarea>
<div class="mt-6"> <div class="mt-6">
<button <button
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
v-clipboard="() => accessToken" v-clipboard="() => accessToken"
v-clipboard:success="clipboardSuccess" v-clipboard:success="clipboardSuccess"
v-clipboard:error="clipboardError" v-clipboard:error="clipboardError"
@ -216,18 +157,7 @@
</button> </button>
<button <button
@click="closeCreateTokenModal" @click="closeCreateTokenModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Close Close
</button> </button>
@ -249,16 +179,7 @@
<div class="mt-6"> <div class="mt-6">
<button <button
@click="revoke" @click="revoke"
class=" class="bg-red-500 hover:bg-red-600 text-white font-bold py-3 px-4 rounded focus:outline-none"
bg-red-500
hover:bg-red-600
text-white
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="revokeTokenLoading ? 'cursor-not-allowed' : ''" :class="revokeTokenLoading ? 'cursor-not-allowed' : ''"
:disabled="revokeTokenLoading" :disabled="revokeTokenLoading"
> >
@ -267,18 +188,7 @@
</button> </button>
<button <button
@click="closeRevokeTokenModal" @click="closeRevokeTokenModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Close Close
</button> </button>

View file

@ -2,21 +2,7 @@
<div class="aliases"> <div class="aliases">
<div class="flex flex-wrap flex-row items-center justify-between mb-8 md:px-2 lg:px-6"> <div class="flex flex-wrap flex-row items-center justify-between mb-8 md:px-2 lg:px-6">
<div <div
class=" class="w-full md:w-1/2 lg:w-1/3 xl:w-1/6 md:-mx-2 lg:-mx-6 rounded overflow-hidden shadow-md bg-white mb-4 lg:mb-4 xl:mb-0"
w-full
md:w-1/2
lg:w-1/3
xl:w-1/6
md:-mx-2
lg:-mx-6
rounded
overflow-hidden
shadow-md
bg-white
mb-4
lg:mb-4
xl:mb-0
"
> >
<div class="p-4 flex items-center justify-between relative"> <div class="p-4 flex items-center justify-between relative">
<icon <icon
@ -30,21 +16,7 @@
</div> </div>
</div> </div>
<div <div
class=" class="w-full md:w-1/2 lg:w-1/3 xl:w-1/6 md:-mx-2 lg:-mx-6 rounded overflow-hidden shadow-md bg-white mb-4 lg:mb-4 xl:mb-0"
w-full
md:w-1/2
lg:w-1/3
xl:w-1/6
md:-mx-2
lg:-mx-6
rounded
overflow-hidden
shadow-md
bg-white
mb-4
lg:mb-4
xl:mb-0
"
> >
<div class="p-4 flex items-center justify-between relative"> <div class="p-4 flex items-center justify-between relative">
<icon <icon
@ -58,21 +30,7 @@
</div> </div>
</div> </div>
<div <div
class=" class="w-full md:w-1/2 lg:w-1/3 xl:w-1/6 md:-mx-2 lg:-mx-6 rounded overflow-hidden shadow-md bg-white mb-4 lg:mb-4 xl:mb-0"
w-full
md:w-1/2
lg:w-1/3
xl:w-1/6
md:-mx-2
lg:-mx-6
rounded
overflow-hidden
shadow-md
bg-white
mb-4
lg:mb-4
xl:mb-0
"
> >
<div class="p-4 flex items-center justify-between relative"> <div class="p-4 flex items-center justify-between relative">
<icon <icon
@ -86,20 +44,7 @@
</div> </div>
</div> </div>
<div <div
class=" class="w-full md:w-1/2 lg:w-1/3 xl:w-1/6 md:-mx-2 lg:-mx-6 rounded overflow-hidden shadow-md bg-white mb-4 lg:mb-0"
w-full
md:w-1/2
lg:w-1/3
xl:w-1/6
md:-mx-2
lg:-mx-6
rounded
overflow-hidden
shadow-md
bg-white
mb-4
lg:mb-0
"
> >
<div class="p-4 flex items-center justify-between relative"> <div class="p-4 flex items-center justify-between relative">
<icon <icon
@ -113,20 +58,7 @@
</div> </div>
</div> </div>
<div <div
class=" class="w-full md:w-1/2 lg:w-1/3 xl:w-1/6 md:-mx-2 lg:-mx-6 rounded overflow-hidden shadow-md bg-white mb-4 md:mb-0"
w-full
md:w-1/2
lg:w-1/3
xl:w-1/6
md:-mx-2
lg:-mx-6
rounded
overflow-hidden
shadow-md
bg-white
mb-4
md:mb-0
"
> >
<div class="p-4 flex items-center justify-between relative"> <div class="p-4 flex items-center justify-between relative">
<icon <icon
@ -140,18 +72,7 @@
</div> </div>
</div> </div>
<div <div
class=" class="w-full md:w-1/2 lg:w-1/3 xl:w-1/6 md:-mx-2 lg:-mx-6 rounded overflow-hidden shadow-md bg-white"
w-full
md:w-1/2
lg:w-1/3
xl:w-1/6
md:-mx-2
lg:-mx-6
rounded
overflow-hidden
shadow-md
bg-white
"
> >
<div class="p-4 flex items-center justify-between relative"> <div class="p-4 flex items-center justify-between relative">
<icon <icon
@ -172,73 +93,26 @@
@keyup.esc="search = ''" @keyup.esc="search = ''"
tabindex="0" tabindex="0"
type="text" type="text"
class=" class="w-full md:w-64 appearance-none shadow bg-white text-grey-700 focus:outline-none rounded py-3 pl-3 pr-8"
w-full
md:w-64
appearance-none
shadow
bg-white
text-grey-700
focus:outline-none
rounded
py-3
pl-3
pr-8
"
placeholder="Search Aliases" placeholder="Search Aliases"
/> />
<icon <icon
v-if="search" v-if="search"
@click.native="search = ''" @click.native="search = ''"
name="close-circle" name="close-circle"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current mr-2 flex items-center cursor-pointer"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
mr-2
flex
items-center
cursor-pointer
"
/> />
<icon <icon
v-else v-else
name="search" name="search"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current pointer-events-none mr-2 flex items-center"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
pointer-events-none
mr-2
flex
items-center
"
/> />
</div> </div>
<div class="flex flex-wrap mt-4 md:mt-0"> <div class="flex flex-wrap mt-4 md:mt-0">
<div class="block relative mr-4"> <div class="block relative mr-4">
<select <select
v-model="showAliases" v-model="showAliases"
class=" class="block appearance-none w-full text-grey-700 bg-white p-3 pr-8 rounded shadow focus:ring"
block
appearance-none
w-full
text-grey-700
bg-white
p-3
pr-8
rounded
shadow
focus:ring
"
required required
> >
<option value="without">Hide Deleted</option> <option value="without">Hide Deleted</option>
@ -246,16 +120,7 @@
<option value="only">Deleted Only</option> <option value="only">Deleted Only</option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -271,17 +136,7 @@
<div> <div>
<button <button
@click="generateAliasModalOpen = true" @click="generateAliasModalOpen = true"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none ml-auto"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
ml-auto
"
> >
Create New Alias Create New Alias
</button> </button>
@ -356,18 +211,7 @@
@keyup.esc="aliasIdToEdit = aliasDescriptionToEdit = ''" @keyup.esc="aliasIdToEdit = aliasDescriptionToEdit = ''"
v-model="aliasDescriptionToEdit" v-model="aliasDescriptionToEdit"
type="text" type="text"
class=" class="flex-grow text-sm appearance-none bg-grey-100 border text-grey-700 focus:outline-none rounded px-2 py-1"
flex-grow
text-sm
appearance-none
bg-grey-100
border
text-grey-700
focus:outline-none
rounded
px-2
py-1
"
:class="aliasDescriptionToEdit.length > 200 ? 'border-red-500' : 'border-transparent'" :class="aliasDescriptionToEdit.length > 200 ? 'border-red-500' : 'border-transparent'"
placeholder="Add description" placeholder="Add description"
tabindex="0" tabindex="0"
@ -398,13 +242,7 @@
</div> </div>
<div v-else> <div v-else>
<span <span
class=" class="inline-block text-grey-300 text-sm cursor-pointer py-1 border border-transparent"
inline-block
text-grey-300 text-sm
cursor-pointer
py-1
border border-transparent
"
@click=";(aliasIdToEdit = props.row.id), (aliasDescriptionToEdit = '')" @click=";(aliasIdToEdit = props.row.id), (aliasDescriptionToEdit = '')"
>Add description</span >Add description</span
> >
@ -426,16 +264,7 @@
}}</span> }}</span>
<span <span
v-else-if="has(props.row.aliasable, 'default_recipient.email')" v-else-if="has(props.row.aliasable, 'default_recipient.email')"
class=" class="py-1 px-2 text-xs bg-yellow-200 text-yellow-900 rounded-full tooltip outline-none"
py-1
px-2
text-xs
bg-yellow-200
text-yellow-900
rounded-full
tooltip
outline-none
"
:data-tippy-content="props.row.aliasable.default_recipient.email" :data-tippy-content="props.row.aliasable.default_recipient.email"
>{{ >{{
props.row.aliasable_type === 'App\\Models\\Domain' ? 'domain' : 'username' props.row.aliasable_type === 'App\\Models\\Domain' ? 'domain' : 'username'
@ -443,16 +272,7 @@
> >
<span <span
v-else v-else
class=" class="py-1 px-2 text-xs bg-yellow-200 text-yellow-900 rounded-full tooltip outline-none"
py-1
px-2
text-xs
bg-yellow-200
text-yellow-900
rounded-full
tooltip
outline-none
"
:data-tippy-content="defaultRecipientEmail" :data-tippy-content="defaultRecipientEmail"
>default</span >default</span
> >
@ -493,16 +313,7 @@
<div role="none"> <div role="none">
<span <span
@click="openSendFromModal(props.row)" @click="openSendFromModal(props.row)"
class=" class="group cursor-pointer flex items-center px-4 py-3 text-sm text-grey-700 hover:bg-grey-100 hover:text-grey-900"
group
cursor-pointer
flex
items-center
px-4
py-3
text-sm text-grey-700
hover:bg-grey-100 hover:text-grey-900
"
role="menuitem" role="menuitem"
> >
<icon name="send" class="block mr-3 w-5 h-5 text-grey-300 outline-none" /> <icon name="send" class="block mr-3 w-5 h-5 text-grey-300 outline-none" />
@ -512,16 +323,7 @@
<div v-if="props.row.deleted_at" role="none"> <div v-if="props.row.deleted_at" role="none">
<span <span
@click="openRestoreModal(props.row.id)" @click="openRestoreModal(props.row.id)"
class=" class="group cursor-pointer flex items-center px-4 py-3 text-sm text-grey-700 hover:bg-grey-100 hover:text-grey-900"
group
cursor-pointer
flex
items-center
px-4
py-3
text-sm text-grey-700
hover:bg-grey-100 hover:text-grey-900
"
role="menuitem" role="menuitem"
> >
<icon <icon
@ -534,16 +336,7 @@
<div v-else role="none"> <div v-else role="none">
<span <span
@click="openDeleteModal(props.row)" @click="openDeleteModal(props.row)"
class=" class="group cursor-pointer flex items-center px-4 py-3 text-sm text-grey-700 hover:bg-grey-100 hover:text-grey-900"
group
cursor-pointer
flex
items-center
px-4
py-3
text-sm text-grey-700
hover:bg-grey-100 hover:text-grey-900
"
role="menuitem" role="menuitem"
> >
<icon <icon
@ -556,16 +349,7 @@
<div role="none"> <div role="none">
<span <span
@click="openForgetModal(props.row)" @click="openForgetModal(props.row)"
class=" class="group cursor-pointer flex items-center px-4 py-3 text-sm text-grey-700 hover:bg-grey-100 hover:text-grey-900"
group
cursor-pointer
flex
items-center
px-4
py-3
text-sm text-grey-700
hover:bg-grey-100 hover:text-grey-900
"
role="menuitem" role="menuitem"
> >
<icon <icon
@ -642,18 +426,7 @@
<select <select
v-model="generateAliasDomain" v-model="generateAliasDomain"
id="alias_domain" id="alias_domain"
class=" class="block appearance-none w-full text-grey-700 bg-grey-100 p-3 pr-8 rounded shadow focus:ring"
block
appearance-none
w-full
text-grey-700
bg-grey-100
p-3
pr-8
rounded
shadow
focus:ring
"
required required
> >
<option v-for="domainOption in domainOptions" :key="domainOption" :value="domainOption"> <option v-for="domainOption in domainOptions" :key="domainOption" :value="domainOption">
@ -661,16 +434,7 @@
</option> </option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -691,18 +455,7 @@
<select <select
v-model="generateAliasFormat" v-model="generateAliasFormat"
id="alias_format" id="alias_format"
class=" class="block appearance-none w-full text-grey-700 bg-grey-100 p-3 pr-8 rounded shadow focus:ring"
block
appearance-none
w-full
text-grey-700
bg-grey-100
p-3
pr-8
rounded
shadow
focus:ring
"
required required
> >
<option <option
@ -714,16 +467,7 @@
</option> </option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -748,16 +492,7 @@
v-model="generateAliasLocalPart" v-model="generateAliasLocalPart"
id="alias_local_part" id="alias_local_part"
type="text" type="text"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
"
:class="errors.generateAliasLocalPart ? 'border-red-500' : ''" :class="errors.generateAliasLocalPart ? 'border-red-500' : ''"
placeholder="Enter local part..." placeholder="Enter local part..."
autofocus autofocus
@ -774,16 +509,7 @@
v-model="generateAliasDescription" v-model="generateAliasDescription"
id="alias_description" id="alias_description"
type="text" type="text"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
"
:class="errors.generateAliasDescription ? 'border-red-500' : ''" :class="errors.generateAliasDescription ? 'border-red-500' : ''"
placeholder="Enter description (optional)..." placeholder="Enter description (optional)..."
autofocus autofocus
@ -815,16 +541,7 @@
<div class="mt-6"> <div class="mt-6">
<button <button
@click="generateNewAlias" @click="generateNewAlias"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="generateAliasLoading ? 'cursor-not-allowed' : ''" :class="generateAliasLoading ? 'cursor-not-allowed' : ''"
:disabled="generateAliasLoading" :disabled="generateAliasLoading"
> >
@ -833,18 +550,7 @@
</button> </button>
<button <button
@click="generateAliasModalOpen = false" @click="generateAliasModalOpen = false"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -882,17 +588,7 @@
<button <button
type="button" type="button"
@click="editAliasRecipients()" @click="editAliasRecipients()"
class=" class="px-4 py-3 text-cyan-900 font-semibold bg-cyan-400 hover:bg-cyan-300 border border-transparent rounded focus:outline-none"
px-4
py-3
text-cyan-900
font-semibold
bg-cyan-400
hover:bg-cyan-300
border border-transparent
rounded
focus:outline-none
"
:class="editAliasRecipientsLoading ? 'cursor-not-allowed' : ''" :class="editAliasRecipientsLoading ? 'cursor-not-allowed' : ''"
:disabled="editAliasRecipientsLoading" :disabled="editAliasRecipientsLoading"
> >
@ -901,18 +597,7 @@
</button> </button>
<button <button
@click="closeAliasRecipientsModal()" @click="closeAliasRecipientsModal()"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -935,17 +620,7 @@
<button <button
type="button" type="button"
@click="restoreAlias(aliasIdToRestore)" @click="restoreAlias(aliasIdToRestore)"
class=" class="px-4 py-3 text-cyan-900 font-semibold bg-cyan-400 hover:bg-cyan-300 border border-transparent rounded focus:outline-none"
px-4
py-3
text-cyan-900
font-semibold
bg-cyan-400
hover:bg-cyan-300
border border-transparent
rounded
focus:outline-none
"
:class="restoreAliasLoading ? 'cursor-not-allowed' : ''" :class="restoreAliasLoading ? 'cursor-not-allowed' : ''"
:disabled="restoreAliasLoading" :disabled="restoreAliasLoading"
> >
@ -954,18 +629,7 @@
</button> </button>
<button <button
@click="closeRestoreModal" @click="closeRestoreModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -990,17 +654,7 @@
<button <button
type="button" type="button"
@click="deleteAlias(aliasToDelete.id)" @click="deleteAlias(aliasToDelete.id)"
class=" class="px-4 py-3 text-white font-semibold bg-red-500 hover:bg-red-600 border border-transparent rounded focus:outline-none"
px-4
py-3
text-white
font-semibold
bg-red-500
hover:bg-red-600
border border-transparent
rounded
focus:outline-none
"
:class="deleteAliasLoading ? 'cursor-not-allowed' : ''" :class="deleteAliasLoading ? 'cursor-not-allowed' : ''"
:disabled="deleteAliasLoading" :disabled="deleteAliasLoading"
> >
@ -1009,18 +663,7 @@
</button> </button>
<button <button
@click="closeDeleteModal" @click="closeDeleteModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -1048,17 +691,7 @@
<button <button
type="button" type="button"
@click="forgetAlias(aliasToForget.id)" @click="forgetAlias(aliasToForget.id)"
class=" class="px-4 py-3 text-white font-semibold bg-red-500 hover:bg-red-600 border border-transparent rounded focus:outline-none"
px-4
py-3
text-white
font-semibold
bg-red-500
hover:bg-red-600
border border-transparent
rounded
focus:outline-none
"
:class="forgetAliasLoading ? 'cursor-not-allowed' : ''" :class="forgetAliasLoading ? 'cursor-not-allowed' : ''"
:disabled="forgetAliasLoading" :disabled="forgetAliasLoading"
> >
@ -1067,18 +700,7 @@
</button> </button>
<button <button
@click="closeForgetModal" @click="closeForgetModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -1102,16 +724,7 @@
v-model="aliasToSendFrom.email" v-model="aliasToSendFrom.email"
id="send_from_alias" id="send_from_alias"
type="text" type="text"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
"
disabled disabled
/> />
<label for="send_from_alias_destination" class="block text-grey-700 text-sm my-2"> <label for="send_from_alias_destination" class="block text-grey-700 text-sm my-2">
@ -1124,16 +737,7 @@
v-model="sendFromAliasDestination" v-model="sendFromAliasDestination"
id="send_from_alias_destination" id="send_from_alias_destination"
type="text" type="text"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
"
:class="errors.sendFromAliasDestination ? 'border-red-500' : ''" :class="errors.sendFromAliasDestination ? 'border-red-500' : ''"
placeholder="Enter email..." placeholder="Enter email..."
autofocus autofocus
@ -1145,20 +749,7 @@
<div <div
v-clipboard="() => sendFromAliasEmailToSendTo" v-clipboard="() => sendFromAliasEmailToSendTo"
v-clipboard:success="setSendFromAliasCopied" v-clipboard:success="setSendFromAliasCopied"
class=" class="flex items-center justify-between cursor-pointer text-xs border-t-4 rounded-sm text-green-800 border-green-600 bg-green-100 p-2 mb-3"
flex
items-center
justify-between
cursor-pointer
text-xs
border-t-4
rounded-sm
text-green-800
border-green-600
bg-green-100
p-2
mb-3
"
role="alert" role="alert"
> >
<span> <span>
@ -1195,20 +786,7 @@
</div> </div>
<a <a
:href="'mailto:' + sendFromAliasEmailToSendTo" :href="'mailto:' + sendFromAliasEmailToSendTo"
class=" class="flex items-center justify-between cursor-pointer text-sm border-t-4 rounded-sm text-green-800 border-green-600 bg-green-100 p-2 mb-4"
flex
items-center
justify-between
cursor-pointer
text-sm
border-t-4
rounded-sm
text-green-800
border-green-600
bg-green-100
p-2
mb-4
"
role="alert" role="alert"
title="Click To Open Mail Application" title="Click To Open Mail Application"
> >
@ -1219,17 +797,7 @@
<button <button
type="button" type="button"
@click="displaySendFromAddress(aliasToSendFrom)" @click="displaySendFromAddress(aliasToSendFrom)"
class=" class="px-4 py-3 text-cyan-900 font-semibold bg-cyan-400 hover:bg-cyan-300 border border-transparent rounded focus:outline-none"
px-4
py-3
text-cyan-900
font-semibold
bg-cyan-400
hover:bg-cyan-300
border border-transparent
rounded
focus:outline-none
"
:class="sendFromAliasLoading ? 'cursor-not-allowed' : ''" :class="sendFromAliasLoading ? 'cursor-not-allowed' : ''"
:disabled="sendFromAliasLoading" :disabled="sendFromAliasLoading"
> >
@ -1238,18 +806,7 @@
</button> </button>
<button <button
@click="closeSendFromModal" @click="closeSendFromModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Close Close
</button> </button>

View file

@ -7,71 +7,25 @@
@keyup.esc="search = ''" @keyup.esc="search = ''"
tabindex="0" tabindex="0"
type="text" type="text"
class=" class="w-full md:w-64 appearance-none shadow bg-white text-grey-700 focus:outline-none rounded py-3 pl-3 pr-8"
w-full
md:w-64
appearance-none
shadow
bg-white
text-grey-700
focus:outline-none
rounded
py-3
pl-3
pr-8
"
placeholder="Search Domains" placeholder="Search Domains"
/> />
<icon <icon
v-if="search" v-if="search"
@click.native="search = ''" @click.native="search = ''"
name="close-circle" name="close-circle"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current mr-2 flex items-center cursor-pointer"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
mr-2
flex
items-center
cursor-pointer
"
/> />
<icon <icon
v-else v-else
name="search" name="search"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current pointer-events-none mr-2 flex items-center"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
pointer-events-none
mr-2
flex
items-center
"
/> />
</div> </div>
<div class="mt-4 md:mt-0"> <div class="mt-4 md:mt-0">
<button <button
@click="addDomainModalOpen = true" @click="addDomainModalOpen = true"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none ml-auto"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
ml-auto
"
> >
Add Custom Domain Add Custom Domain
</button> </button>
@ -121,17 +75,7 @@
@keyup.esc="domainIdToEdit = domainDescriptionToEdit = ''" @keyup.esc="domainIdToEdit = domainDescriptionToEdit = ''"
v-model="domainDescriptionToEdit" v-model="domainDescriptionToEdit"
type="text" type="text"
class=" class="flex-grow appearance-none bg-grey-100 border text-grey-700 focus:outline-none rounded px-2 py-1"
flex-grow
appearance-none
bg-grey-100
border
text-grey-700
focus:outline-none
rounded
px-2
py-1
"
:class=" :class="
domainDescriptionToEdit.length > 200 ? 'border-red-500' : 'border-transparent' domainDescriptionToEdit.length > 200 ? 'border-red-500' : 'border-transparent'
" "
@ -354,33 +298,14 @@
<input <input
v-model="newDomain" v-model="newDomain"
type="text" type="text"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3 mb-6"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
mb-6
"
:class="errors.newDomain ? 'border-red-500' : ''" :class="errors.newDomain ? 'border-red-500' : ''"
placeholder="example.com" placeholder="example.com"
autofocus autofocus
/> />
<button <button
@click="validateNewDomain" @click="validateNewDomain"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="addDomainLoading ? 'cursor-not-allowed' : ''" :class="addDomainLoading ? 'cursor-not-allowed' : ''"
:disabled="addDomainLoading" :disabled="addDomainLoading"
> >
@ -389,18 +314,7 @@
</button> </button>
<button <button
@click="addDomainModalOpen = false" @click="addDomainModalOpen = false"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -446,16 +360,7 @@
<div class="mt-6"> <div class="mt-6">
<button <button
@click="checkRecords(domainToCheck)" @click="checkRecords(domainToCheck)"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="checkRecordsLoading ? 'cursor-not-allowed' : ''" :class="checkRecordsLoading ? 'cursor-not-allowed' : ''"
:disabled="checkRecordsLoading" :disabled="checkRecordsLoading"
> >
@ -464,18 +369,7 @@
</button> </button>
<button <button
@click="closeCheckRecordsModal" @click="closeCheckRecordsModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -514,17 +408,7 @@
<button <button
type="button" type="button"
@click="editDefaultRecipient()" @click="editDefaultRecipient()"
class=" class="px-4 py-3 text-cyan-900 font-semibold bg-cyan-400 hover:bg-cyan-300 border border-transparent rounded focus:outline-none"
px-4
py-3
text-cyan-900
font-semibold
bg-cyan-400
hover:bg-cyan-300
border border-transparent
rounded
focus:outline-none
"
:class="editDefaultRecipientLoading ? 'cursor-not-allowed' : ''" :class="editDefaultRecipientLoading ? 'cursor-not-allowed' : ''"
:disabled="editDefaultRecipientLoading" :disabled="editDefaultRecipientLoading"
> >
@ -533,18 +417,7 @@
</button> </button>
<button <button
@click="closeDomainDefaultRecipientModal()" @click="closeDomainDefaultRecipientModal()"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -567,17 +440,7 @@
<button <button
type="button" type="button"
@click="deleteDomain(domainIdToDelete)" @click="deleteDomain(domainIdToDelete)"
class=" class="px-4 py-3 text-white font-semibold bg-red-500 hover:bg-red-600 border border-transparent rounded focus:outline-none"
px-4
py-3
text-white
font-semibold
bg-red-500
hover:bg-red-600
border border-transparent
rounded
focus:outline-none
"
:class="deleteDomainLoading ? 'cursor-not-allowed' : ''" :class="deleteDomainLoading ? 'cursor-not-allowed' : ''"
:disabled="deleteDomainLoading" :disabled="deleteDomainLoading"
> >
@ -586,18 +449,7 @@
</button> </button>
<button <button
@click="closeDeleteModal" @click="closeDeleteModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>

View file

@ -7,55 +7,19 @@
@keyup.esc="search = ''" @keyup.esc="search = ''"
tabindex="0" tabindex="0"
type="text" type="text"
class=" class="w-full md:w-64 appearance-none shadow bg-white text-grey-700 focus:outline-none rounded py-3 pl-3 pr-8"
w-full
md:w-64
appearance-none
shadow
bg-white
text-grey-700
focus:outline-none
rounded
py-3
pl-3
pr-8
"
placeholder="Search Failed Deliveries" placeholder="Search Failed Deliveries"
/> />
<icon <icon
v-if="search" v-if="search"
@click.native="search = ''" @click.native="search = ''"
name="close-circle" name="close-circle"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current mr-2 flex items-center cursor-pointer"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
mr-2
flex
items-center
cursor-pointer
"
/> />
<icon <icon
v-else v-else
name="search" name="search"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current pointer-events-none mr-2 flex items-center"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
pointer-events-none
mr-2
flex
items-center
"
/> />
</div> </div>
</div> </div>
@ -187,17 +151,7 @@
<button <button
type="button" type="button"
@click="deleteFailedDelivery(failedDeliveryIdToDelete)" @click="deleteFailedDelivery(failedDeliveryIdToDelete)"
class=" class="px-4 py-3 text-white font-semibold bg-red-500 hover:bg-red-600 border border-transparent rounded focus:outline-none"
px-4
py-3
text-white
font-semibold
bg-red-500
hover:bg-red-600
border border-transparent
rounded
focus:outline-none
"
:class="deleteFailedDeliveryLoading ? 'cursor-not-allowed' : ''" :class="deleteFailedDeliveryLoading ? 'cursor-not-allowed' : ''"
:disabled="deleteFailedDeliveryLoading" :disabled="deleteFailedDeliveryLoading"
> >
@ -206,18 +160,7 @@
</button> </button>
<button <button
@click="closeDeleteModal" @click="closeDeleteModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>

View file

@ -7,71 +7,25 @@
@keyup.esc="search = ''" @keyup.esc="search = ''"
tabindex="0" tabindex="0"
type="text" type="text"
class=" class="w-full md:w-64 appearance-none shadow bg-white text-grey-700 focus:outline-none rounded py-3 pl-3 pr-8"
w-full
md:w-64
appearance-none
shadow
bg-white
text-grey-700
focus:outline-none
rounded
py-3
pl-3
pr-8
"
placeholder="Search Recipients" placeholder="Search Recipients"
/> />
<icon <icon
v-if="search" v-if="search"
@click.native="search = ''" @click.native="search = ''"
name="close-circle" name="close-circle"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current mr-2 flex items-center cursor-pointer"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
mr-2
flex
items-center
cursor-pointer
"
/> />
<icon <icon
v-else v-else
name="search" name="search"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current pointer-events-none mr-2 flex items-center"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
pointer-events-none
mr-2
flex
items-center
"
/> />
</div> </div>
<div class="mt-4 md:mt-0"> <div class="mt-4 md:mt-0">
<button <button
@click="addRecipientModalOpen = true" @click="addRecipientModalOpen = true"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none ml-auto"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
ml-auto
"
> >
Add Recipient Add Recipient
</button> </button>
@ -165,17 +119,7 @@
/> />
<icon <icon
name="fingerprint" name="fingerprint"
class=" class="tooltip outline-none cursor-pointer block w-6 h-6 text-grey-300 fill-current mx-2"
tooltip
outline-none
cursor-pointer
block
w-6
h-6
text-grey-300
fill-current
mx-2
"
:data-tippy-content="props.row.fingerprint" :data-tippy-content="props.row.fingerprint"
v-clipboard="() => props.row.fingerprint" v-clipboard="() => props.row.fingerprint"
v-clipboard:success="clipboardSuccess" v-clipboard:success="clipboardSuccess"
@ -246,33 +190,14 @@
<input <input
v-model="newRecipient" v-model="newRecipient"
type="email" type="email"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3 mb-6"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
mb-6
"
:class="errors.newRecipient ? 'border-red-500' : ''" :class="errors.newRecipient ? 'border-red-500' : ''"
placeholder="johndoe@example.com" placeholder="johndoe@example.com"
autofocus autofocus
/> />
<button <button
@click="validateNewRecipient" @click="validateNewRecipient"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="addRecipientLoading ? 'cursor-not-allowed' : ''" :class="addRecipientLoading ? 'cursor-not-allowed' : ''"
:disabled="addRecipientLoading" :disabled="addRecipientLoading"
> >
@ -281,18 +206,7 @@
</button> </button>
<button <button
@click="addRecipientModalOpen = false" @click="addRecipientModalOpen = false"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -315,17 +229,7 @@
</p> </p>
<textarea <textarea
v-model="recipientKey" v-model="recipientKey"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3 mb-6"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
mb-6
"
:class="errors.recipientKey ? 'border-red-500' : ''" :class="errors.recipientKey ? 'border-red-500' : ''"
placeholder="Begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'" placeholder="Begins with '-----BEGIN PGP PUBLIC KEY BLOCK-----'"
rows="10" rows="10"
@ -335,16 +239,7 @@
<button <button
type="button" type="button"
@click="validateRecipientKey" @click="validateRecipientKey"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="addRecipientKeyLoading ? 'cursor-not-allowed' : ''" :class="addRecipientKeyLoading ? 'cursor-not-allowed' : ''"
:disabled="addRecipientKeyLoading" :disabled="addRecipientKeyLoading"
> >
@ -353,18 +248,7 @@
</button> </button>
<button <button
@click="closeRecipientKeyModal" @click="closeRecipientKeyModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -387,17 +271,7 @@
<button <button
type="button" type="button"
@click="deleteRecipientKey(recipientKeyToDelete)" @click="deleteRecipientKey(recipientKeyToDelete)"
class=" class="px-4 py-3 text-white font-semibold bg-red-500 hover:bg-red-600 border border-transparent rounded focus:outline-none"
px-4
py-3
text-white
font-semibold
bg-red-500
hover:bg-red-600
border border-transparent
rounded
focus:outline-none
"
:class="deleteRecipientKeyLoading ? 'cursor-not-allowed' : ''" :class="deleteRecipientKeyLoading ? 'cursor-not-allowed' : ''"
:disabled="deleteRecipientKeyLoading" :disabled="deleteRecipientKeyLoading"
> >
@ -406,18 +280,7 @@
</button> </button>
<button <button
@click="closeDeleteRecipientKeyModal" @click="closeDeleteRecipientKeyModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -437,17 +300,7 @@
<button <button
type="button" type="button"
@click="deleteRecipient(recipientToDelete)" @click="deleteRecipient(recipientToDelete)"
class=" class="px-4 py-3 text-white font-semibold bg-red-500 hover:bg-red-600 border border-transparent rounded focus:outline-none"
px-4
py-3
text-white
font-semibold
bg-red-500
hover:bg-red-600
border border-transparent
rounded
focus:outline-none
"
:class="deleteRecipientLoading ? 'cursor-not-allowed' : ''" :class="deleteRecipientLoading ? 'cursor-not-allowed' : ''"
:disabled="deleteRecipientLoading" :disabled="deleteRecipientLoading"
> >
@ -456,18 +309,7 @@
</button> </button>
<button <button
@click="closeDeleteModal" @click="closeDeleteModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>

View file

@ -7,17 +7,7 @@
</div> </div>
<button <button
@click="openCreateModal" @click="openCreateModal"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none ml-auto"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
ml-auto
"
> >
Add New Rule Add New Rule
</button> </button>
@ -110,16 +100,7 @@
v-model="createRuleObject.name" v-model="createRuleObject.name"
id="rule_name" id="rule_name"
type="text" type="text"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-2"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-2
"
:class="errors.ruleName ? 'border-red-500' : ''" :class="errors.ruleName ? 'border-red-500' : ''"
placeholder="Enter name" placeholder="Enter name"
autofocus autofocus
@ -136,34 +117,14 @@
<select <select
v-model="createRuleObject.operator" v-model="createRuleObject.operator"
id="rule_operator" id="rule_operator"
class=" class="block appearance-none w-full text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
w-full
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option value="AND">AND</option> <option value="AND">AND</option>
<option value="OR">OR</option> <option value="OR">OR</option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -187,18 +148,7 @@
<select <select
v-model="createRuleObject.conditions[key].type" v-model="createRuleObject.conditions[key].type"
id="rule_condition_types" id="rule_condition_types"
class=" class="block appearance-none w-32 text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
w-32
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option <option
@ -210,16 +160,7 @@
</option> </option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -242,18 +183,7 @@
<select <select
v-model="createRuleObject.conditions[key].match" v-model="createRuleObject.conditions[key].match"
id="rule_condition_matches" id="rule_condition_matches"
class=" class="block appearance-none w-40 text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
w-40
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option <option
@ -265,16 +195,7 @@
</option> </option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -293,26 +214,16 @@
v-model="createRuleObject.conditions[key].currentConditionValue" v-model="createRuleObject.conditions[key].currentConditionValue"
@keyup.enter="addValueToCondition(createRuleObject, key)" @keyup.enter="addValueToCondition(createRuleObject, key)"
type="text" type="text"
class=" class="w-full appearance-none bg-white border border-transparent rounded-l text-grey-700 focus:outline-none p-2"
w-full
appearance-none
bg-white
border border-transparent
rounded-l
text-grey-700
focus:outline-none
p-2
"
:class="errors.createRuleValues ? 'border-red-500' : ''" :class="errors.createRuleValues ? 'border-red-500' : ''"
placeholder="Enter value" placeholder="Enter value"
autofocus autofocus
/> />
<button class="p-2 bg-grey-200 rounded-r text-grey-600"> <button
<icon @click="addValueToCondition(createRuleObject, key)"
name="check" class="p-2 bg-grey-200 rounded-r text-grey-600"
class="block w-6 h-6 text-grey-600 fill-current cursor-pointer" >
@click.native="addValueToCondition(createRuleObject, key)" Insert
/>
</button> </button>
</div> </div>
</span> </span>
@ -353,16 +264,7 @@
<!-- add condition button --> <!-- add condition button -->
<button <button
@click="addCondition(createRuleObject)" @click="addCondition(createRuleObject)"
class=" class="mt-4 p-2 text-grey-800 bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
mt-4
p-2
text-grey-800
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Add condition Add condition
</button> </button>
@ -392,17 +294,7 @@
v-model="createRuleObject.actions[key].type" v-model="createRuleObject.actions[key].type"
@change="ruleActionChange(createRuleObject.actions[key])" @change="ruleActionChange(createRuleObject.actions[key])"
id="rule_action_types" id="rule_action_types"
class=" class="block appearance-none text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option <option
@ -414,16 +306,7 @@
</option> </option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -449,16 +332,7 @@
<input <input
v-model="createRuleObject.actions[key].value" v-model="createRuleObject.actions[key].value"
type="text" type="text"
class=" class="w-full appearance-none bg-white border border-transparent rounded text-grey-700 focus:outline-none p-2"
w-full
appearance-none
bg-white
border border-transparent
rounded
text-grey-700
focus:outline-none
p-2
"
:class="errors.createRuleActionValue ? 'border-red-500' : ''" :class="errors.createRuleActionValue ? 'border-red-500' : ''"
placeholder="Enter value" placeholder="Enter value"
autofocus autofocus
@ -474,18 +348,7 @@
<select <select
v-model="createRuleObject.actions[key].value" v-model="createRuleObject.actions[key].value"
id="create_rule_action_banner" id="create_rule_action_banner"
class=" class="block appearance-none w-40 text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
w-40
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option selected value="top">Top</option> <option selected value="top">Top</option>
@ -493,16 +356,7 @@
<option selected value="off">Off</option> <option selected value="off">Off</option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -532,16 +386,7 @@
<!-- add action button --> <!-- add action button -->
<button <button
@click="addAction(createRuleObject)" @click="addAction(createRuleObject)"
class=" class="mt-4 p-2 text-grey-800 bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
mt-4
p-2
text-grey-800
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Add action Add action
</button> </button>
@ -551,19 +396,46 @@
</p> </p>
</fieldset> </fieldset>
<fieldset class="border border-cyan-400 p-4 my-4 rounded-sm">
<legend class="px-2 leading-none text-sm">Run rule on</legend>
<div class="w-full flex">
<div class="relative flex items-center">
<input
v-model="createRuleObject.forwards"
id="forwards"
name="forwards"
type="checkbox"
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
/>
<label for="forwards" class="ml-2 text-sm text-grey-700">Forwards</label>
</div>
<div class="relative flex items-center mx-4">
<input
v-model="createRuleObject.replies"
id="replies"
name="replies"
type="checkbox"
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
/>
<label for="replies" class="ml-2 text-sm text-grey-700">Replies</label>
</div>
<div class="relative flex items-center">
<input
v-model="createRuleObject.sends"
id="sends"
name="sends"
type="checkbox"
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
/>
<label for="sends" class="ml-2 text-sm text-grey-700">Sends</label>
</div>
</div>
</fieldset>
<div class="mt-6"> <div class="mt-6">
<button <button
@click="createNewRule" @click="createNewRule"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="createRuleLoading ? 'cursor-not-allowed' : ''" :class="createRuleLoading ? 'cursor-not-allowed' : ''"
:disabled="createRuleLoading" :disabled="createRuleLoading"
> >
@ -572,18 +444,7 @@
</button> </button>
<button <button
@click="createRuleModalOpen = false" @click="createRuleModalOpen = false"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -611,16 +472,7 @@
v-model="editRuleObject.name" v-model="editRuleObject.name"
id="edit_rule_name" id="edit_rule_name"
type="text" type="text"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-2"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-2
"
:class="errors.ruleName ? 'border-red-500' : ''" :class="errors.ruleName ? 'border-red-500' : ''"
placeholder="Enter name" placeholder="Enter name"
autofocus autofocus
@ -637,34 +489,14 @@
<select <select
v-model="editRuleObject.operator" v-model="editRuleObject.operator"
id="edit_rule_operator" id="edit_rule_operator"
class=" class="block appearance-none w-full text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
w-full
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option value="AND">AND</option> <option value="AND">AND</option>
<option value="OR">OR</option> <option value="OR">OR</option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -688,18 +520,7 @@
<select <select
v-model="editRuleObject.conditions[key].type" v-model="editRuleObject.conditions[key].type"
id="edit_rule_condition_types" id="edit_rule_condition_types"
class=" class="block appearance-none w-32 text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
w-32
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option <option
@ -711,16 +532,7 @@
</option> </option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -740,18 +552,7 @@
<select <select
v-model="editRuleObject.conditions[key].match" v-model="editRuleObject.conditions[key].match"
id="edit_rule_condition_matches" id="edit_rule_condition_matches"
class=" class="block appearance-none w-40 text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
w-40
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option <option
@ -763,16 +564,7 @@
</option> </option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -791,26 +583,16 @@
v-model="editRuleObject.conditions[key].currentConditionValue" v-model="editRuleObject.conditions[key].currentConditionValue"
@keyup.enter="addValueToCondition(editRuleObect, key)" @keyup.enter="addValueToCondition(editRuleObect, key)"
type="text" type="text"
class=" class="w-full appearance-none bg-white border border-transparent rounded-l text-grey-700 focus:outline-none p-2"
w-full
appearance-none
bg-white
border border-transparent
rounded-l
text-grey-700
focus:outline-none
p-2
"
:class="errors.ruleConditions ? 'border-red-500' : ''" :class="errors.ruleConditions ? 'border-red-500' : ''"
placeholder="Enter value" placeholder="Enter value"
autofocus autofocus
/> />
<button class="p-2 bg-grey-200 rounded-r text-grey-600"> <button
<icon @click="addValueToCondition(editRuleObject, key)"
name="check" class="p-2 bg-grey-200 rounded-r text-grey-600"
class="block w-6 h-6 text-grey-600 fill-current cursor-pointer" >
@click.native="addValueToCondition(editRuleObject, key)" Insert
/>
</button> </button>
</div> </div>
</span> </span>
@ -848,16 +630,7 @@
<!-- add condition button --> <!-- add condition button -->
<button <button
@click="addCondition(editRuleObject)" @click="addCondition(editRuleObject)"
class=" class="mt-4 p-2 text-grey-800 bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
mt-4
p-2
text-grey-800
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Add condition Add condition
</button> </button>
@ -887,17 +660,7 @@
v-model="editRuleObject.actions[key].type" v-model="editRuleObject.actions[key].type"
@change="ruleActionChange(editRuleObject.actions[key])" @change="ruleActionChange(editRuleObject.actions[key])"
id="rule_action_types" id="rule_action_types"
class=" class="block appearance-none text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option <option
@ -909,16 +672,7 @@
</option> </option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -944,16 +698,7 @@
<input <input
v-model="editRuleObject.actions[key].value" v-model="editRuleObject.actions[key].value"
type="text" type="text"
class=" class="w-full appearance-none bg-white border border-transparent rounded text-grey-700 focus:outline-none p-2"
w-full
appearance-none
bg-white
border border-transparent
rounded
text-grey-700
focus:outline-none
p-2
"
:class="errors.ruleActions ? 'border-red-500' : ''" :class="errors.ruleActions ? 'border-red-500' : ''"
placeholder="Enter value" placeholder="Enter value"
autofocus autofocus
@ -966,18 +711,7 @@
<select <select
v-model="editRuleObject.actions[key].value" v-model="editRuleObject.actions[key].value"
id="edit_rule_action_banner" id="edit_rule_action_banner"
class=" class="block appearance-none w-40 text-grey-700 bg-white p-2 pr-6 rounded shadow focus:ring"
block
appearance-none
w-40
text-grey-700
bg-white
p-2
pr-6
rounded
shadow
focus:ring
"
required required
> >
<option value="top">Top</option> <option value="top">Top</option>
@ -985,16 +719,7 @@
<option value="off">Off</option> <option value="off">Off</option>
</select> </select>
<div <div
class=" class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"
pointer-events-none
absolute
inset-y-0
right-0
flex
items-center
px-2
text-gray-700
"
> >
<svg <svg
class="fill-current h-4 w-4" class="fill-current h-4 w-4"
@ -1024,16 +749,7 @@
<!-- add action button --> <!-- add action button -->
<button <button
@click="addAction(editRuleObject)" @click="addAction(editRuleObject)"
class=" class="mt-4 p-2 text-grey-800 bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
mt-4
p-2
text-grey-800
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Add action Add action
</button> </button>
@ -1043,19 +759,46 @@
</p> </p>
</fieldset> </fieldset>
<fieldset class="border border-cyan-400 p-4 my-4 rounded-sm">
<legend class="px-2 leading-none text-sm">Run rule on</legend>
<div class="w-full flex">
<div class="relative flex items-center">
<input
v-model="editRuleObject.forwards"
id="forwards"
name="forwards"
type="checkbox"
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
/>
<label for="forwards" class="ml-2 text-sm text-grey-700">Forwards</label>
</div>
<div class="relative flex items-center mx-4">
<input
v-model="editRuleObject.replies"
id="replies"
name="replies"
type="checkbox"
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
/>
<label for="replies" class="ml-2 text-sm text-grey-700">Replies</label>
</div>
<div class="relative flex items-center">
<input
v-model="editRuleObject.sends"
id="sends"
name="sends"
type="checkbox"
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
/>
<label for="sends" class="ml-2 text-sm text-grey-700">Sends</label>
</div>
</div>
</fieldset>
<div class="mt-6"> <div class="mt-6">
<button <button
@click="editRule" @click="editRule"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="editRuleLoading ? 'cursor-not-allowed' : ''" :class="editRuleLoading ? 'cursor-not-allowed' : ''"
:disabled="editRuleLoading" :disabled="editRuleLoading"
> >
@ -1064,18 +807,7 @@
</button> </button>
<button <button
@click="closeEditModal" @click="closeEditModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -1095,17 +827,7 @@
<button <button
type="button" type="button"
@click="deleteRule(ruleIdToDelete)" @click="deleteRule(ruleIdToDelete)"
class=" class="px-4 py-3 text-white font-semibold bg-red-500 hover:bg-red-600 border border-transparent rounded focus:outline-none"
px-4
py-3
text-white
font-semibold
bg-red-500
hover:bg-red-600
border border-transparent
rounded
focus:outline-none
"
:class="deleteRuleLoading ? 'cursor-not-allowed' : ''" :class="deleteRuleLoading ? 'cursor-not-allowed' : ''"
:disabled="deleteRuleLoading" :disabled="deleteRuleLoading"
> >
@ -1114,18 +836,7 @@
</button> </button>
<button <button
@click="closeDeleteModal" @click="closeDeleteModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -1178,6 +889,9 @@ export default {
}, },
], ],
operator: 'AND', operator: 'AND',
forwards: false,
replies: false,
sends: false,
}, },
rows: this.initialRules, rows: this.initialRules,
conditionTypeOptions: [ conditionTypeOptions: [
@ -1313,6 +1027,9 @@ export default {
conditions: this.createRuleObject.conditions, conditions: this.createRuleObject.conditions,
actions: this.createRuleObject.actions, actions: this.createRuleObject.actions,
operator: this.createRuleObject.operator, operator: this.createRuleObject.operator,
forwards: this.createRuleObject.forwards,
replies: this.createRuleObject.replies,
sends: this.createRuleObject.sends,
}), }),
{ {
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
@ -1359,6 +1076,9 @@ export default {
conditions: this.editRuleObject.conditions, conditions: this.editRuleObject.conditions,
actions: this.editRuleObject.actions, actions: this.editRuleObject.actions,
operator: this.editRuleObject.operator, operator: this.editRuleObject.operator,
forwards: this.editRuleObject.forwards,
replies: this.editRuleObject.replies,
sends: this.editRuleObject.sends,
}), }),
{ {
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
@ -1372,6 +1092,9 @@ export default {
rule.conditions = this.editRuleObject.conditions rule.conditions = this.editRuleObject.conditions
rule.actions = this.editRuleObject.actions rule.actions = this.editRuleObject.actions
rule.operator = this.editRuleObject.operator rule.operator = this.editRuleObject.operator
rule.forwards = this.editRuleObject.forwards
rule.replies = this.editRuleObject.replies
rule.sends = this.editRuleObject.sends
this.editRuleObject = {} this.editRuleObject = {}
this.editRuleModalOpen = false this.editRuleModalOpen = false
this.success('Rule successfully updated') this.success('Rule successfully updated')
@ -1503,6 +1226,9 @@ export default {
}, },
], ],
operator: 'AND', operator: 'AND',
forwards: false,
replies: false,
sends: false,
} }
}, },
ruleActionChange(action) { ruleActionChange(action) {

View file

@ -7,71 +7,25 @@
@keyup.esc="search = ''" @keyup.esc="search = ''"
tabindex="0" tabindex="0"
type="text" type="text"
class=" class="w-full md:w-64 appearance-none shadow bg-white text-grey-700 focus:outline-none rounded py-3 pl-3 pr-8"
w-full
md:w-64
appearance-none
shadow
bg-white
text-grey-700
focus:outline-none
rounded
py-3
pl-3
pr-8
"
placeholder="Search Usernames" placeholder="Search Usernames"
/> />
<icon <icon
v-if="search" v-if="search"
@click.native="search = ''" @click.native="search = ''"
name="close-circle" name="close-circle"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current mr-2 flex items-center cursor-pointer"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
mr-2
flex
items-center
cursor-pointer
"
/> />
<icon <icon
v-else v-else
name="search" name="search"
class=" class="absolute right-0 inset-y-0 w-5 h-full text-grey-300 fill-current pointer-events-none mr-2 flex items-center"
absolute
right-0
inset-y-0
w-5
h-full
text-grey-300
fill-current
pointer-events-none
mr-2
flex
items-center
"
/> />
</div> </div>
<div class="mt-4 md:mt-0"> <div class="mt-4 md:mt-0">
<button <button
@click="addUsernameModalOpen = true" @click="addUsernameModalOpen = true"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none ml-auto"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
ml-auto
"
> >
Add Username Add Username
</button> </button>
@ -121,17 +75,7 @@
@keyup.esc="usernameIdToEdit = usernameDescriptionToEdit = ''" @keyup.esc="usernameIdToEdit = usernameDescriptionToEdit = ''"
v-model="usernameDescriptionToEdit" v-model="usernameDescriptionToEdit"
type="text" type="text"
class=" class="flex-grow appearance-none bg-grey-100 border text-grey-700 focus:outline-none rounded px-2 py-1"
flex-grow
appearance-none
bg-grey-100
border
text-grey-700
focus:outline-none
rounded
px-2
py-1
"
:class=" :class="
usernameDescriptionToEdit.length > 200 ? 'border-red-500' : 'border-transparent' usernameDescriptionToEdit.length > 200 ? 'border-red-500' : 'border-transparent'
" "
@ -256,33 +200,14 @@
<input <input
v-model="newUsername" v-model="newUsername"
type="text" type="text"
class=" class="w-full appearance-none bg-grey-100 border border-transparent text-grey-700 focus:outline-none rounded p-3 mb-6"
w-full
appearance-none
bg-grey-100
border border-transparent
text-grey-700
focus:outline-none
rounded
p-3
mb-6
"
:class="errors.newUsername ? 'border-red-500' : ''" :class="errors.newUsername ? 'border-red-500' : ''"
placeholder="johndoe" placeholder="johndoe"
autofocus autofocus
/> />
<button <button
@click="validateNewUsername" @click="validateNewUsername"
class=" class="bg-cyan-400 hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none"
bg-cyan-400
hover:bg-cyan-300
text-cyan-900
font-bold
py-3
px-4
rounded
focus:outline-none
"
:class="addUsernameLoading ? 'cursor-not-allowed' : ''" :class="addUsernameLoading ? 'cursor-not-allowed' : ''"
:disabled="addUsernameLoading" :disabled="addUsernameLoading"
> >
@ -291,18 +216,7 @@
</button> </button>
<button <button
@click="addUsernameModalOpen = false" @click="addUsernameModalOpen = false"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -341,17 +255,7 @@
<button <button
type="button" type="button"
@click="editDefaultRecipient()" @click="editDefaultRecipient()"
class=" class="px-4 py-3 text-cyan-900 font-semibold bg-cyan-400 hover:bg-cyan-300 border border-transparent rounded focus:outline-none"
px-4
py-3
text-cyan-900
font-semibold
bg-cyan-400
hover:bg-cyan-300
border border-transparent
rounded
focus:outline-none
"
:class="editDefaultRecipientLoading ? 'cursor-not-allowed' : ''" :class="editDefaultRecipientLoading ? 'cursor-not-allowed' : ''"
:disabled="editDefaultRecipientLoading" :disabled="editDefaultRecipientLoading"
> >
@ -360,18 +264,7 @@
</button> </button>
<button <button
@click="closeUsernameDefaultRecipientModal()" @click="closeUsernameDefaultRecipientModal()"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>
@ -396,17 +289,7 @@
<button <button
type="button" type="button"
@click="deleteUsername(usernameIdToDelete)" @click="deleteUsername(usernameIdToDelete)"
class=" class="px-4 py-3 text-white font-semibold bg-red-500 hover:bg-red-600 border border-transparent rounded focus:outline-none"
px-4
py-3
text-white
font-semibold
bg-red-500
hover:bg-red-600
border border-transparent
rounded
focus:outline-none
"
:class="deleteUsernameLoading ? 'cursor-not-allowed' : ''" :class="deleteUsernameLoading ? 'cursor-not-allowed' : ''"
:disabled="deleteUsernameLoading" :disabled="deleteUsernameLoading"
> >
@ -415,18 +298,7 @@
</button> </button>
<button <button
@click="closeDeleteModal" @click="closeDeleteModal"
class=" class="ml-4 px-4 py-3 text-grey-800 font-semibold bg-white hover:bg-grey-50 border border-grey-100 rounded focus:outline-none"
ml-4
px-4
py-3
text-grey-800
font-semibold
bg-white
hover:bg-grey-50
border border-grey-100
rounded
focus:outline-none
"
> >
Cancel Cancel
</button> </button>

View file

@ -91,7 +91,10 @@ class RulesTest extends TestCase
'value' => 'New Subject!' 'value' => 'New Subject!'
], ],
], ],
'operator' => 'AND' 'operator' => 'AND',
'forwards' => true,
'replies' => false,
'sends' => false
]); ]);
$response->assertStatus(201); $response->assertStatus(201);
@ -118,7 +121,10 @@ class RulesTest extends TestCase
'value' => 'New Subject!' 'value' => 'New Subject!'
], ],
], ],
'operator' => 'AND' 'operator' => 'AND',
'forwards' => true,
'replies' => false,
'sends' => false
]); ]);
$response->assertStatus(422); $response->assertStatus(422);
@ -149,7 +155,10 @@ class RulesTest extends TestCase
'value' => 'New Subject!' 'value' => 'New Subject!'
], ],
], ],
'operator' => 'OR' 'operator' => 'OR',
'forwards' => true,
'replies' => false,
'sends' => false
]); ]);
$response->assertStatus(200); $response->assertStatus(200);
@ -235,6 +244,9 @@ class RulesTest extends TestCase
], ],
], ],
'operator' => 'AND', 'operator' => 'AND',
'forwards' => true,
'replies' => false,
'sends' => false
]); ]);
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@ -257,6 +269,66 @@ class RulesTest extends TestCase
$this->assertEquals('New Subject!', $email->subject); $this->assertEquals('New Subject!', $email->subject);
} }
/** @test */
public function it_does_not_apply_rules_if_email_type_is_not_selected()
{
Rule::factory()->create([
'user_id' => $this->user->id,
'conditions' => [
[
'type' => 'subject',
'match' => 'is exactly',
'values' => [
'Test Email'
]
],
[
'type' => 'sender',
'match' => 'starts with',
'values' => [
'will'
]
],
[
'type' => 'alias',
'match' => 'is exactly',
'values' => [
'ebay@johndoe.anonaddy.com'
]
]
],
'actions' => [
[
'type' => 'subject',
'value' => 'New Subject!'
],
],
'operator' => 'AND',
'forwards' => false,
'replies' => true,
'sends' => true
]);
$alias = Alias::factory()->create([
'user_id' => $this->user->id,
'email' => 'ebay@johndoe.'.config('anonaddy.domain'),
'local_part' => 'ebay',
'domain' => 'johndoe.'.config('anonaddy.domain'),
]);
$parser = $this->getParser(base_path('tests/emails/email.eml'));
$size = 1500;
$emailData = new EmailData($parser, $size);
$job = new ForwardEmail($alias, $emailData, $this->user->defaultRecipient);
$email = $job->build();
$this->assertEquals($parser->getHeader('subject'), $email->subject);
}
/** @test */ /** @test */
public function it_can_apply_user_rules_in_correct_order() public function it_can_apply_user_rules_in_correct_order()
{ {
@ -278,6 +350,9 @@ class RulesTest extends TestCase
], ],
], ],
'operator' => 'AND', 'operator' => 'AND',
'forwards' => true,
'replies' => false,
'sends' => false,
'order' => 1 'order' => 1
]); ]);
@ -313,6 +388,9 @@ class RulesTest extends TestCase
], ],
], ],
'operator' => 'AND', 'operator' => 'AND',
'forwards' => true,
'replies' => false,
'sends' => false
]); ]);
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([