Merge pull request #470 from shikorism/feature/326-react-checkin-form
チェックインフォームをReactで作り替える
This commit is contained in:
commit
0ccb04c651
18
.eslintrc.js
vendored
18
.eslintrc.js
vendored
@ -6,25 +6,33 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
extends: [
|
extends: [
|
||||||
'eslint:recommended',
|
'eslint:recommended',
|
||||||
'plugin:vue/essential',
|
'plugin:react/recommended',
|
||||||
'plugin:prettier/recommended',
|
'plugin:prettier/recommended',
|
||||||
'plugin:@typescript-eslint/recommended',
|
'plugin:@typescript-eslint/recommended',
|
||||||
'prettier',
|
'prettier',
|
||||||
'prettier/@typescript-eslint',
|
'prettier/@typescript-eslint',
|
||||||
'prettier/vue',
|
'prettier/react',
|
||||||
],
|
],
|
||||||
parser: 'vue-eslint-parser',
|
parser: '@typescript-eslint/parser',
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
ecmaVersion: 11,
|
ecmaVersion: 11,
|
||||||
parser: '@typescript-eslint/parser',
|
ecmaFeatures: {
|
||||||
|
jsx: true,
|
||||||
|
},
|
||||||
sourceType: 'module',
|
sourceType: 'module',
|
||||||
},
|
},
|
||||||
plugins: ['prettier', 'vue', '@typescript-eslint', 'jquery'],
|
plugins: ['prettier', 'react', '@typescript-eslint', 'jquery'],
|
||||||
rules: {
|
rules: {
|
||||||
'@typescript-eslint/explicit-module-boundary-types': 0,
|
'@typescript-eslint/explicit-module-boundary-types': 0,
|
||||||
'@typescript-eslint/no-explicit-any': 0,
|
'@typescript-eslint/no-explicit-any': 0,
|
||||||
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
|
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
|
||||||
'jquery/no-ajax': 2,
|
'jquery/no-ajax': 2,
|
||||||
'jquery/no-ajax-events': 2,
|
'jquery/no-ajax-events': 2,
|
||||||
|
'react/prop-types': 0,
|
||||||
|
},
|
||||||
|
settings: {
|
||||||
|
react: {
|
||||||
|
version: 'detect',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -16,17 +16,26 @@ class EjaculationController extends Controller
|
|||||||
{
|
{
|
||||||
public function create(Request $request)
|
public function create(Request $request)
|
||||||
{
|
{
|
||||||
$defaults = [
|
$tags = old('tags') ?? $request->input('tags', '');
|
||||||
'date' => $request->input('date', date('Y/m/d')),
|
if (!empty($tags)) {
|
||||||
'time' => $request->input('time', date('H:i')),
|
$tags = explode(' ', $tags);
|
||||||
'link' => $request->input('link', ''),
|
}
|
||||||
'tags' => $request->input('tags', ''),
|
|
||||||
'note' => $request->input('note', ''),
|
$errors = $request->session()->get('errors');
|
||||||
'is_private' => $request->input('is_private', 0) == 1,
|
$initialState = [
|
||||||
'is_too_sensitive' => $request->input('is_too_sensitive', 0) == 1
|
'fields' => [
|
||||||
|
'date' => old('date') ?? $request->input('date', date('Y/m/d')),
|
||||||
|
'time' => old('time') ?? $request->input('time', date('H:i')),
|
||||||
|
'link' => old('link') ?? $request->input('link', ''),
|
||||||
|
'tags' => $tags,
|
||||||
|
'note' => old('note') ?? $request->input('note', ''),
|
||||||
|
'is_private' => old('is_private') ?? $request->input('is_private', 0) == 1,
|
||||||
|
'is_too_sensitive' => old('is_too_sensitive') ?? $request->input('is_too_sensitive', 0) == 1
|
||||||
|
],
|
||||||
|
'errors' => isset($errors) ? $errors->getMessages() : null
|
||||||
];
|
];
|
||||||
|
|
||||||
return view('ejaculation.checkin')->with('defaults', $defaults);
|
return view('ejaculation.checkin')->with('initialState', $initialState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
@ -112,13 +121,36 @@ class EjaculationController extends Controller
|
|||||||
return view('ejaculation.show')->with(compact('user', 'ejaculation', 'ejaculatedSpan'));
|
return view('ejaculation.show')->with(compact('user', 'ejaculation', 'ejaculatedSpan'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function edit($id)
|
public function edit(Request $request, $id)
|
||||||
{
|
{
|
||||||
$ejaculation = Ejaculation::findOrFail($id);
|
$ejaculation = Ejaculation::findOrFail($id);
|
||||||
|
|
||||||
$this->authorize('edit', $ejaculation);
|
$this->authorize('edit', $ejaculation);
|
||||||
|
|
||||||
return view('ejaculation.edit')->with(compact('ejaculation'));
|
if (old('tags') === null) {
|
||||||
|
$tags = $ejaculation->tags->pluck('name');
|
||||||
|
} else {
|
||||||
|
$tags = old('tags');
|
||||||
|
if (!empty($tags)) {
|
||||||
|
$tags = explode(' ', $tags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$errors = $request->session()->get('errors');
|
||||||
|
$initialState = [
|
||||||
|
'fields' => [
|
||||||
|
'date' => old('date') ?? $ejaculation->ejaculated_date->format('Y/m/d'),
|
||||||
|
'time' => old('time') ?? $ejaculation->ejaculated_date->format('H:i'),
|
||||||
|
'link' => old('link') ?? $ejaculation->link,
|
||||||
|
'tags' => $tags,
|
||||||
|
'note' => old('note') ?? $ejaculation->note,
|
||||||
|
'is_private' => is_bool(old('is_private')) ? old('is_private') : $ejaculation->note,
|
||||||
|
'is_too_sensitive' => is_bool(old('is_too_sensitive')) ? old('is_too_sensitive') : $ejaculation->is_too_sensitive
|
||||||
|
],
|
||||||
|
'errors' => isset($errors) ? $errors->getMessages() : null
|
||||||
|
];
|
||||||
|
|
||||||
|
return view('ejaculation.edit')->with(compact('ejaculation', 'initialState'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update(Request $request, $id)
|
public function update(Request $request, $id)
|
||||||
|
18
package.json
18
package.json
@ -8,28 +8,32 @@
|
|||||||
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
|
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
"prod": "npm run production",
|
"prod": "npm run production",
|
||||||
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
"eslint": "eslint --ext .js,.ts,.vue resources/",
|
"eslint": "eslint --ext .js,.ts,.tsx resources/",
|
||||||
"stylelint": "stylelint resources/assets/sass/**/*"
|
"stylelint": "stylelint resources/assets/sass/**/*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bootstrap": "^4.5.0",
|
"@types/bootstrap": "^4.5.0",
|
||||||
"@types/cal-heatmap": "^3.3.10",
|
"@types/cal-heatmap": "^3.3.10",
|
||||||
"@types/chart.js": "^2.9.22",
|
"@types/chart.js": "^2.9.22",
|
||||||
|
"@types/classnames": "^2.2.10",
|
||||||
"@types/jquery": "^3.3.38",
|
"@types/jquery": "^3.3.38",
|
||||||
"@types/js-cookie": "^2.2.0",
|
"@types/js-cookie": "^2.2.0",
|
||||||
"@types/qs": "^6.9.4",
|
"@types/qs": "^6.9.4",
|
||||||
|
"@types/react": "^16.9.35",
|
||||||
|
"@types/react-dom": "^16.9.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^3.1.0",
|
"@typescript-eslint/eslint-plugin": "^3.1.0",
|
||||||
"@typescript-eslint/parser": "^3.1.0",
|
"@typescript-eslint/parser": "^3.1.0",
|
||||||
"bootstrap": "^4.5.0",
|
"bootstrap": "^4.5.0",
|
||||||
"cal-heatmap": "^3.3.10",
|
"cal-heatmap": "^3.3.10",
|
||||||
"chart.js": "^2.7.1",
|
"chart.js": "^2.7.1",
|
||||||
|
"classnames": "^2.2.6",
|
||||||
"cross-env": "^5.2.0",
|
"cross-env": "^5.2.0",
|
||||||
"date-fns": "^1.30.1",
|
"date-fns": "^1.30.1",
|
||||||
"eslint": "^7.6.0",
|
"eslint": "^7.6.0",
|
||||||
"eslint-config-prettier": "^6.11.0",
|
"eslint-config-prettier": "^6.11.0",
|
||||||
"eslint-plugin-jquery": "^1.5.1",
|
"eslint-plugin-jquery": "^1.5.1",
|
||||||
"eslint-plugin-prettier": "^3.1.4",
|
"eslint-plugin-prettier": "^3.1.4",
|
||||||
"eslint-plugin-vue": "^6.2.2",
|
"eslint-plugin-react": "^7.20.6",
|
||||||
"husky": "^1.3.1",
|
"husky": "^1.3.1",
|
||||||
"jquery": "^3.5.0",
|
"jquery": "^3.5.0",
|
||||||
"js-cookie": "^2.2.0",
|
"js-cookie": "^2.2.0",
|
||||||
@ -40,17 +44,15 @@
|
|||||||
"popper.js": "^1.14.7",
|
"popper.js": "^1.14.7",
|
||||||
"prettier": "^2.0.5",
|
"prettier": "^2.0.5",
|
||||||
"qs": "^6.9.4",
|
"qs": "^6.9.4",
|
||||||
|
"react": "^16.13.1",
|
||||||
|
"react-dom": "^16.13.1",
|
||||||
"resolve-url-loader": "^3.1.1",
|
"resolve-url-loader": "^3.1.1",
|
||||||
"sass": "^1.26.8",
|
"sass": "^1.26.8",
|
||||||
"sass-loader": "^7.1.0",
|
"sass-loader": "^7.1.0",
|
||||||
"stylelint": "^9.10.1",
|
"stylelint": "^9.10.1",
|
||||||
"stylelint-config-recess-order": "^2.0.4",
|
"stylelint-config-recess-order": "^2.0.4",
|
||||||
"ts-loader": "^6.0.1",
|
"ts-loader": "^6.0.1",
|
||||||
"typescript": "^3.4.5",
|
"typescript": "^3.4.5"
|
||||||
"vue": "^2.6.10",
|
|
||||||
"vue-class-component": "^7.1.0",
|
|
||||||
"vue-property-decorator": "^9.0.0",
|
|
||||||
"vue-template-compiler": "^2.6.10"
|
|
||||||
},
|
},
|
||||||
"stylelint": {
|
"stylelint": {
|
||||||
"extends": "stylelint-config-recess-order"
|
"extends": "stylelint-config-recess-order"
|
||||||
@ -65,7 +67,7 @@
|
|||||||
"stylelint --fix",
|
"stylelint --fix",
|
||||||
"git add"
|
"git add"
|
||||||
],
|
],
|
||||||
"*.{ts,js,vue}": [
|
"*.{ts,tsx,js}": [
|
||||||
"eslint --fix",
|
"eslint --fix",
|
||||||
"git add"
|
"git add"
|
||||||
],
|
],
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import * as Cookies from 'js-cookie';
|
import Cookies from 'js-cookie';
|
||||||
import { fetchPostJson, fetchDeleteJson, ResponseError } from './fetch';
|
import { fetchPostJson, fetchDeleteJson, ResponseError } from './fetch';
|
||||||
import { linkCard, pageSelector, deleteCheckinModal } from './tissue';
|
import { linkCard, pageSelector, deleteCheckinModal } from './tissue';
|
||||||
|
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
import Vue from 'vue';
|
|
||||||
import TagInput from './components/TagInput.vue';
|
|
||||||
import MetadataPreview from './components/MetadataPreview.vue';
|
|
||||||
import { fetchGet, ResponseError } from './fetch';
|
|
||||||
|
|
||||||
export const bus = new Vue({ name: 'EventBus' });
|
|
||||||
|
|
||||||
export enum MetadataLoadState {
|
|
||||||
Inactive,
|
|
||||||
Loading,
|
|
||||||
Success,
|
|
||||||
Failed,
|
|
||||||
}
|
|
||||||
|
|
||||||
new Vue({
|
|
||||||
el: '#app',
|
|
||||||
data: {
|
|
||||||
metadata: null,
|
|
||||||
metadataLoadState: MetadataLoadState.Inactive,
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
TagInput,
|
|
||||||
MetadataPreview,
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
// オカズリンクにURLがセットされている場合は、すぐにメタデータを取得する
|
|
||||||
const linkInput = this.$el.querySelector<HTMLInputElement>('#link');
|
|
||||||
if (linkInput && /^https?:\/\//.test(linkInput.value)) {
|
|
||||||
this.fetchMetadata(linkInput.value);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
// オカズリンクの変更時
|
|
||||||
onChangeLink(event: Event) {
|
|
||||||
if (event.target instanceof HTMLInputElement) {
|
|
||||||
const url = event.target.value;
|
|
||||||
|
|
||||||
if (url.trim() === '' || !/^https?:\/\//.test(url)) {
|
|
||||||
this.metadata = null;
|
|
||||||
this.metadataLoadState = MetadataLoadState.Inactive;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.fetchMetadata(url);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// メタデータの取得
|
|
||||||
fetchMetadata(url: string) {
|
|
||||||
this.metadataLoadState = MetadataLoadState.Loading;
|
|
||||||
|
|
||||||
fetchGet('/api/checkin/card', { url })
|
|
||||||
.then((response) => {
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new ResponseError(response);
|
|
||||||
}
|
|
||||||
return response.json();
|
|
||||||
})
|
|
||||||
.then((data) => {
|
|
||||||
this.metadata = data;
|
|
||||||
this.metadataLoadState = MetadataLoadState.Success;
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
this.metadata = null;
|
|
||||||
this.metadataLoadState = MetadataLoadState.Failed;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
6
resources/assets/js/checkin.tsx
Normal file
6
resources/assets/js/checkin.tsx
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import ReactDOM from 'react-dom';
|
||||||
|
import { CheckinForm } from './components/CheckinForm';
|
||||||
|
|
||||||
|
const initialState = JSON.parse(document.getElementById('initialState')?.textContent as string);
|
||||||
|
ReactDOM.render(<CheckinForm initialState={initialState} />, document.getElementById('checkinForm'));
|
25
resources/assets/js/components/CheckBox.tsx
Normal file
25
resources/assets/js/components/CheckBox.tsx
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
type CheckboxProps = {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
className?: string;
|
||||||
|
checked?: boolean;
|
||||||
|
onChange?: (newValue: boolean) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const CheckBox: React.FC<CheckboxProps> = ({ id, name, className, checked, onChange, children }) => (
|
||||||
|
<div className={`custom-control custom-checkbox ${className}`}>
|
||||||
|
<input
|
||||||
|
id={id}
|
||||||
|
name={name}
|
||||||
|
type="checkbox"
|
||||||
|
className="custom-control-input"
|
||||||
|
checked={checked}
|
||||||
|
onChange={(e) => onChange && onChange(e.target.checked)}
|
||||||
|
/>
|
||||||
|
<label className="custom-control-label" htmlFor={id}>
|
||||||
|
{children}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
);
|
149
resources/assets/js/components/CheckinForm.tsx
Normal file
149
resources/assets/js/components/CheckinForm.tsx
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import classNames from 'classnames';
|
||||||
|
import { CheckBox } from './CheckBox';
|
||||||
|
import { FieldError, StandaloneFieldError } from './FieldError';
|
||||||
|
import { TagInput } from './TagInput';
|
||||||
|
import { MetadataPreview } from './MetadataPreview';
|
||||||
|
|
||||||
|
type CheckinFormProps = {
|
||||||
|
initialState: any;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const CheckinForm: React.FC<CheckinFormProps> = ({ initialState }) => {
|
||||||
|
const [date, setDate] = useState<string>(initialState.fields.date || '');
|
||||||
|
const [time, setTime] = useState<string>(initialState.fields.time || '');
|
||||||
|
const [tags, setTags] = useState<string[]>(initialState.fields.tags || []);
|
||||||
|
const [link, setLink] = useState<string>(initialState.fields.link || '');
|
||||||
|
const [linkForPreview, setLinkForPreview] = useState(link);
|
||||||
|
const [note, setNote] = useState<string>(initialState.fields.note || '');
|
||||||
|
const [isPrivate, setPrivate] = useState<boolean>(!!initialState.fields.is_private);
|
||||||
|
const [isTooSensitive, setTooSensitive] = useState<boolean>(!!initialState.fields.is_too_sensitive);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div className="form-row">
|
||||||
|
<div className="form-group col-sm-6">
|
||||||
|
<label htmlFor="date">
|
||||||
|
<span className="oi oi-calendar" /> 日付
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="date"
|
||||||
|
name="date"
|
||||||
|
className={classNames({
|
||||||
|
'form-control': true,
|
||||||
|
'is-invalid': initialState.errors?.date || initialState.errors?.datetime,
|
||||||
|
})}
|
||||||
|
pattern="^20[0-9]{2}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])$"
|
||||||
|
required
|
||||||
|
value={date}
|
||||||
|
onChange={(e) => setDate(e.target.value)}
|
||||||
|
/>
|
||||||
|
<FieldError errors={initialState.errors?.date} />
|
||||||
|
</div>
|
||||||
|
<div className="form-group col-sm-6">
|
||||||
|
<label htmlFor="time">
|
||||||
|
<span className="oi oi-clock" /> 時刻
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="time"
|
||||||
|
name="time"
|
||||||
|
className={classNames({
|
||||||
|
'form-control': true,
|
||||||
|
'is-invalid': initialState.errors?.time || initialState.errors?.datetime,
|
||||||
|
})}
|
||||||
|
pattern="^([01][0-9]|2[0-3]):[0-5][0-9]$"
|
||||||
|
required
|
||||||
|
value={time}
|
||||||
|
onChange={(e) => setTime(e.target.value)}
|
||||||
|
/>
|
||||||
|
<FieldError errors={initialState.errors?.time} />
|
||||||
|
</div>
|
||||||
|
<StandaloneFieldError errors={initialState.errors?.datetime} />
|
||||||
|
</div>
|
||||||
|
<div className="form-row">
|
||||||
|
<div className="form-group col-sm-12">
|
||||||
|
<label htmlFor="tagInput">
|
||||||
|
<span className="oi oi-tags" /> タグ
|
||||||
|
</label>
|
||||||
|
<TagInput
|
||||||
|
id="tagInput"
|
||||||
|
name="tags"
|
||||||
|
values={tags}
|
||||||
|
isInvalid={!!initialState.errors?.tags}
|
||||||
|
onChange={(v) => setTags(v)}
|
||||||
|
/>
|
||||||
|
<small className="form-text text-muted">Tab, Enter, 半角スペースのいずれかで入力確定します。</small>
|
||||||
|
<FieldError errors={initialState.errors?.tags} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="form-row">
|
||||||
|
<div className="form-group col-sm-12">
|
||||||
|
<label htmlFor="link">
|
||||||
|
<span className="oi oi-link-intact" /> オカズリンク
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="link"
|
||||||
|
name="link"
|
||||||
|
autoComplete="off"
|
||||||
|
className={classNames({ 'form-control': true, 'is-invalid': initialState.errors?.link })}
|
||||||
|
placeholder="http://..."
|
||||||
|
value={link}
|
||||||
|
onChange={(e) => setLink(e.target.value)}
|
||||||
|
onBlur={() => setLinkForPreview(link)}
|
||||||
|
/>
|
||||||
|
<small className="form-text text-muted">オカズのURLを貼り付けて登録することができます。</small>
|
||||||
|
<FieldError errors={initialState.errors?.link} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<MetadataPreview link={linkForPreview} tags={tags} onClickTag={(v) => setTags(tags.concat(v))} />
|
||||||
|
<div className="form-row">
|
||||||
|
<div className="form-group col-sm-12">
|
||||||
|
<label htmlFor="note">
|
||||||
|
<span className="oi oi-comment-square" /> ノート
|
||||||
|
</label>
|
||||||
|
<textarea
|
||||||
|
id="note"
|
||||||
|
name="note"
|
||||||
|
className={classNames({ 'form-control': true, 'is-invalid': initialState.errors?.note })}
|
||||||
|
rows={4}
|
||||||
|
value={note}
|
||||||
|
onChange={(e) => setNote(e.target.value)}
|
||||||
|
/>
|
||||||
|
<small className="form-text text-muted">最大 500 文字</small>
|
||||||
|
<FieldError errors={initialState.errors?.note} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="form-row mt-4">
|
||||||
|
<p>オプション</p>
|
||||||
|
<div className="form-group col-sm-12">
|
||||||
|
<CheckBox
|
||||||
|
id="isPrivate"
|
||||||
|
name="is_private"
|
||||||
|
className="mb-3"
|
||||||
|
checked={isPrivate}
|
||||||
|
onChange={(v) => setPrivate(v)}
|
||||||
|
>
|
||||||
|
<span className="oi oi-lock-locked" /> このチェックインを非公開にする
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox
|
||||||
|
id="isTooSensitive"
|
||||||
|
name="is_too_sensitive"
|
||||||
|
className="mb-3"
|
||||||
|
checked={isTooSensitive}
|
||||||
|
onChange={(v) => setTooSensitive(v)}
|
||||||
|
>
|
||||||
|
<span className="oi oi-warning" /> チェックイン対象のオカズをより過激なオカズとして設定する
|
||||||
|
</CheckBox>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="text-center">
|
||||||
|
<button className="btn btn-primary" type="submit">
|
||||||
|
チェックイン
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
16
resources/assets/js/components/FieldError.tsx
Normal file
16
resources/assets/js/components/FieldError.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
type FieldErrorProps = {
|
||||||
|
errors?: string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
export const FieldError: React.FC<FieldErrorProps> = ({ errors }) =>
|
||||||
|
(errors && errors.length > 0 && <div className="invalid-feedback">{errors[0]}</div>) || null;
|
||||||
|
|
||||||
|
export const StandaloneFieldError: React.FC<FieldErrorProps> = ({ errors }) =>
|
||||||
|
(errors && errors.length > 0 && (
|
||||||
|
<div className="form-group col-sm-12" style={{ marginTop: '-1rem' }}>
|
||||||
|
<small className="text-danger">{errors[0]}</small>
|
||||||
|
</div>
|
||||||
|
)) ||
|
||||||
|
null;
|
157
resources/assets/js/components/MetadataPreview.tsx
Normal file
157
resources/assets/js/components/MetadataPreview.tsx
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import classNames from 'classnames';
|
||||||
|
import { fetchGet, ResponseError } from '../fetch';
|
||||||
|
|
||||||
|
enum MetadataLoadState {
|
||||||
|
Inactive,
|
||||||
|
Loading,
|
||||||
|
Success,
|
||||||
|
Failed,
|
||||||
|
}
|
||||||
|
|
||||||
|
type Metadata = {
|
||||||
|
url: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
image: string;
|
||||||
|
expires_at: string | null;
|
||||||
|
tags: {
|
||||||
|
name: string;
|
||||||
|
}[];
|
||||||
|
};
|
||||||
|
|
||||||
|
type Suggestion = {
|
||||||
|
name: string;
|
||||||
|
used: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
type MetadataPreviewProps = {
|
||||||
|
link: string;
|
||||||
|
tags: string[];
|
||||||
|
onClickTag: (tag: string) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
const MetadataLoading = () => (
|
||||||
|
<div className="row no-gutters">
|
||||||
|
<div className="col-12">
|
||||||
|
<div className="card-body">
|
||||||
|
<h6 className="card-title text-center font-weight-bold text-info">
|
||||||
|
<span className="oi oi-loop-circular" /> オカズの情報を読み込んでいます…
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
const MetadataLoadFailed = () => (
|
||||||
|
<div className="row no-gutters">
|
||||||
|
<div className="col-12">
|
||||||
|
<div className="card-body">
|
||||||
|
<h6 className="card-title text-center font-weight-bold text-danger">
|
||||||
|
<span className="oi oi-circle-x" /> オカズの情報を読み込めませんでした
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const MetadataPreview: React.FC<MetadataPreviewProps> = ({ link, tags, onClickTag }) => {
|
||||||
|
const [state, setState] = useState(MetadataLoadState.Inactive);
|
||||||
|
const [metadata, setMetadata] = useState<Metadata | null>(null);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (link.trim() === '' || !/^https?:\/\//.test(link)) {
|
||||||
|
setState(MetadataLoadState.Inactive);
|
||||||
|
setMetadata(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setState(MetadataLoadState.Loading);
|
||||||
|
fetchGet('/api/checkin/card', { url: link })
|
||||||
|
.then((response) => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new ResponseError(response);
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then((data) => {
|
||||||
|
setState(MetadataLoadState.Success);
|
||||||
|
setMetadata(data);
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
setState(MetadataLoadState.Failed);
|
||||||
|
setMetadata(null);
|
||||||
|
});
|
||||||
|
}, [link]);
|
||||||
|
|
||||||
|
if (state === MetadataLoadState.Inactive) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const hasImage = metadata !== null && metadata.image !== '';
|
||||||
|
const descClasses = classNames({
|
||||||
|
'col-8': hasImage,
|
||||||
|
'col-12': !hasImage,
|
||||||
|
});
|
||||||
|
const tagClasses = (s: Suggestion) =>
|
||||||
|
classNames({
|
||||||
|
'list-inline-item': true,
|
||||||
|
badge: true,
|
||||||
|
'badge-primary': !s.used,
|
||||||
|
'badge-secondary': s.used,
|
||||||
|
'metadata-tag-item': true,
|
||||||
|
});
|
||||||
|
const suggestions =
|
||||||
|
metadata?.tags.map((t) => ({
|
||||||
|
name: t.name,
|
||||||
|
used: tags.indexOf(t.name) !== -1,
|
||||||
|
})) ?? [];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="form-row">
|
||||||
|
<div className="form-group col-sm-12">
|
||||||
|
<div className="card tis-metadata-preview-link-card mb-2 px-0">
|
||||||
|
{state === MetadataLoadState.Loading ? (
|
||||||
|
<MetadataLoading />
|
||||||
|
) : state === MetadataLoadState.Success ? (
|
||||||
|
<div className="row no-gutters">
|
||||||
|
{hasImage && (
|
||||||
|
<div className="col-4 justify-content-center align-items-center">
|
||||||
|
<img src={metadata?.image} alt="Thumbnail" className="w-100 bg-secondary" />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
<div className={descClasses}>
|
||||||
|
<div className="card-body">
|
||||||
|
<h6 className="card-title font-weight-bold">{metadata?.title}</h6>
|
||||||
|
{suggestions.length > 0 && (
|
||||||
|
<>
|
||||||
|
<p className="card-text mb-2">
|
||||||
|
タグ候補
|
||||||
|
<br />
|
||||||
|
<span className="text-secondary">
|
||||||
|
(クリックするとタグ入力欄にコピーできます)
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<ul className="list-inline d-inline">
|
||||||
|
{suggestions.map((tag) => (
|
||||||
|
<li
|
||||||
|
key={tag.name}
|
||||||
|
className={tagClasses(tag)}
|
||||||
|
onClick={() => onClickTag(tag.name)}
|
||||||
|
>
|
||||||
|
<span className="oi oi-tag" /> {tag.name}
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<MetadataLoadFailed />
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
@ -1,156 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="form-row" v-if="state !== MetadataLoadState.Inactive">
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<div class="card link-card-mini mb-2 px-0">
|
|
||||||
<div v-if="state === MetadataLoadState.Loading" class="row no-gutters">
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="card-body">
|
|
||||||
<h6 class="card-title text-center font-weight-bold text-info" style="font-size: small;">
|
|
||||||
<span class="oi oi-loop-circular"></span> オカズの情報を読み込んでいます…
|
|
||||||
</h6>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else-if="state === MetadataLoadState.Success" class="row no-gutters">
|
|
||||||
<div v-if="hasImage" class="col-4 justify-content-center align-items-center">
|
|
||||||
<img :src="metadata.image" alt="Thumbnail" class="w-100 bg-secondary" />
|
|
||||||
</div>
|
|
||||||
<div :class="descClasses">
|
|
||||||
<div class="card-body">
|
|
||||||
<h6 class="card-title font-weight-bold" style="font-size: small;">{{ metadata.title }}</h6>
|
|
||||||
<template v-if="suggestions.length > 0">
|
|
||||||
<p class="card-text mb-2" style="font-size: small;">
|
|
||||||
タグ候補<br /><span class="text-secondary"
|
|
||||||
>(クリックするとタグ入力欄にコピーできます)</span
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
<ul class="list-inline d-inline">
|
|
||||||
<li
|
|
||||||
v-for="tag in suggestions"
|
|
||||||
:class="tagClasses(tag)"
|
|
||||||
@click="addTag(tag.name)"
|
|
||||||
:key="tag.name"
|
|
||||||
>
|
|
||||||
<span class="oi oi-tag"></span> {{ tag.name }}
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else class="row no-gutters">
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="card-body">
|
|
||||||
<h6 class="card-title text-center font-weight-bold text-danger" style="font-size: small;">
|
|
||||||
<span class="oi oi-circle-x"></span> オカズの情報を読み込めませんでした
|
|
||||||
</h6>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { Vue, Component, Prop } from 'vue-property-decorator';
|
|
||||||
import { bus, MetadataLoadState } from '../checkin';
|
|
||||||
|
|
||||||
type Metadata = {
|
|
||||||
url: string;
|
|
||||||
title: string;
|
|
||||||
description: string;
|
|
||||||
image: string;
|
|
||||||
expires_at: string | null;
|
|
||||||
tags: {
|
|
||||||
name: string;
|
|
||||||
}[];
|
|
||||||
};
|
|
||||||
|
|
||||||
type Suggestion = {
|
|
||||||
name: string;
|
|
||||||
used: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
@Component
|
|
||||||
export default class MetadataPreview extends Vue {
|
|
||||||
@Prop() readonly state!: MetadataLoadState;
|
|
||||||
@Prop() readonly metadata!: Metadata | null;
|
|
||||||
|
|
||||||
// for use in v-if
|
|
||||||
private readonly MetadataLoadState = MetadataLoadState;
|
|
||||||
|
|
||||||
tags: string[] = [];
|
|
||||||
|
|
||||||
created(): void {
|
|
||||||
bus.$on('change-tag', (tags: string[]) => (this.tags = tags));
|
|
||||||
bus.$emit('resend-tag');
|
|
||||||
}
|
|
||||||
|
|
||||||
addTag(tag: string): void {
|
|
||||||
bus.$emit('add-tag', tag);
|
|
||||||
}
|
|
||||||
|
|
||||||
tagClasses(s: Suggestion) {
|
|
||||||
return {
|
|
||||||
'list-inline-item': true,
|
|
||||||
badge: true,
|
|
||||||
'badge-primary': !s.used,
|
|
||||||
'badge-secondary': s.used,
|
|
||||||
'metadata-tag-item': true,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
get suggestions(): Suggestion[] {
|
|
||||||
if (this.metadata === null) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.metadata.tags.map((t) => {
|
|
||||||
return {
|
|
||||||
name: t.name,
|
|
||||||
used: this.tags.indexOf(t.name) !== -1,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
get hasImage() {
|
|
||||||
return this.metadata !== null && this.metadata.image !== '';
|
|
||||||
}
|
|
||||||
|
|
||||||
get descClasses() {
|
|
||||||
return {
|
|
||||||
'col-8': this.hasImage,
|
|
||||||
'col-12': !this.hasImage,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.link-card-mini {
|
|
||||||
$height: 150px;
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
.row > div:first-child {
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
&:not([display='none']) {
|
|
||||||
min-height: $height;
|
|
||||||
|
|
||||||
img {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-text {
|
|
||||||
white-space: pre-line;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.metadata-tag-item {
|
|
||||||
cursor: pointer;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
</style>
|
|
75
resources/assets/js/components/TagInput.tsx
Normal file
75
resources/assets/js/components/TagInput.tsx
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import React, { useState, useRef } from 'react';
|
||||||
|
import classNames from 'classnames';
|
||||||
|
|
||||||
|
type TagInputProps = {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
values: string[];
|
||||||
|
isInvalid: boolean;
|
||||||
|
onChange?: (newValues: string[]) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const TagInput: React.FC<TagInputProps> = ({ id, name, values, isInvalid, onChange }) => {
|
||||||
|
const [buffer, setBuffer] = useState('');
|
||||||
|
const containerClass = classNames('form-control', 'h-auto', { 'is-invalid': isInvalid });
|
||||||
|
const inputRef = useRef<HTMLInputElement>(null);
|
||||||
|
const removeTag = (index: number) => {
|
||||||
|
onChange && onChange(values.filter((v, i) => i != index));
|
||||||
|
};
|
||||||
|
const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
|
||||||
|
if (buffer.trim() !== '') {
|
||||||
|
switch (event.key) {
|
||||||
|
case 'Tab':
|
||||||
|
case 'Enter':
|
||||||
|
case ' ':
|
||||||
|
if ((event as any).isComposing !== true) {
|
||||||
|
onChange && onChange(values.concat(buffer.trim().replace(/\s+/g, '_')));
|
||||||
|
setBuffer('');
|
||||||
|
}
|
||||||
|
event.preventDefault();
|
||||||
|
break;
|
||||||
|
case 'Unidentified': {
|
||||||
|
// 実際にテキストボックスに入力されている文字を見に行く (フォールバック処理)
|
||||||
|
const nativeEvent = event.nativeEvent;
|
||||||
|
if (nativeEvent.srcElement && (nativeEvent.srcElement as HTMLInputElement).value.slice(-1) == ' ') {
|
||||||
|
onChange && onChange(values.concat(buffer.trim().replace(/\s+/g, '_')));
|
||||||
|
setBuffer('');
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (event.key === 'Enter') {
|
||||||
|
// 誤爆防止
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={containerClass} onClick={() => inputRef.current?.focus()}>
|
||||||
|
<input name={name} type="hidden" value={values.join(' ')} />
|
||||||
|
<ul className="list-inline d-inline">
|
||||||
|
{values.map((tag, i) => (
|
||||||
|
<li
|
||||||
|
key={i}
|
||||||
|
className={classNames('list-inline-item', 'badge', 'badge-primary', 'tis-tag-input-item')}
|
||||||
|
onClick={() => removeTag(i)}
|
||||||
|
>
|
||||||
|
<span className="oi oi-tag" /> {tag} | x
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
<li className="list-inline-item">
|
||||||
|
<input
|
||||||
|
id={id}
|
||||||
|
ref={inputRef}
|
||||||
|
type="text"
|
||||||
|
className="tis-tag-input-field"
|
||||||
|
value={buffer}
|
||||||
|
onChange={(e) => setBuffer(e.target.value)}
|
||||||
|
onKeyDown={onKeyDown}
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
@ -1,96 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div :class="containerClass" @click="$refs.input.focus()">
|
|
||||||
<input :name="name" type="hidden" :value="tagValue" />
|
|
||||||
<ul class="list-inline d-inline">
|
|
||||||
<li
|
|
||||||
v-for="(tag, i) in tags"
|
|
||||||
class="list-inline-item badge badge-primary tag-item"
|
|
||||||
@click="removeTag(i)"
|
|
||||||
:key="tag"
|
|
||||||
>
|
|
||||||
<span class="oi oi-tag"></span> {{ tag }} | x
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<input :id="id" ref="input" type="text" class="tag-input" v-model="buffer" @keydown="onKeyDown" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { Vue, Component, Prop, Watch } from 'vue-property-decorator';
|
|
||||||
import { bus } from '../checkin';
|
|
||||||
|
|
||||||
@Component
|
|
||||||
export default class TagInput extends Vue {
|
|
||||||
@Prop(String) readonly id!: string;
|
|
||||||
@Prop(String) readonly name!: string;
|
|
||||||
@Prop(String) readonly value!: string;
|
|
||||||
@Prop(Boolean) readonly isInvalid!: boolean;
|
|
||||||
|
|
||||||
tags: string[] = this.value.trim() !== '' ? this.value.trim().split(' ') : [];
|
|
||||||
buffer = '';
|
|
||||||
|
|
||||||
created() {
|
|
||||||
bus.$on('add-tag', (tag: string) => this.tags.indexOf(tag) === -1 && this.tags.push(tag));
|
|
||||||
bus.$on('resend-tag', () => bus.$emit('change-tag', this.tags));
|
|
||||||
}
|
|
||||||
|
|
||||||
onKeyDown(event: KeyboardEvent) {
|
|
||||||
if (this.buffer.trim() !== '') {
|
|
||||||
switch (event.key) {
|
|
||||||
case 'Tab':
|
|
||||||
case 'Enter':
|
|
||||||
case ' ':
|
|
||||||
if ((event as any).isComposing !== true) {
|
|
||||||
this.tags.push(this.buffer.trim().replace(/\s+/g, '_'));
|
|
||||||
this.buffer = '';
|
|
||||||
}
|
|
||||||
event.preventDefault();
|
|
||||||
break;
|
|
||||||
case 'Unidentified':
|
|
||||||
// 実際にテキストボックスに入力されている文字を見に行く (フォールバック処理)
|
|
||||||
if (event.srcElement && (event.srcElement as HTMLInputElement).value.slice(-1) == ' ') {
|
|
||||||
this.tags.push(this.buffer.trim().replace(/\s+/g, '_'));
|
|
||||||
this.buffer = '';
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (event.key === 'Enter') {
|
|
||||||
// 誤爆防止
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
removeTag(index: number) {
|
|
||||||
this.tags.splice(index, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Watch('tags')
|
|
||||||
onTagsChanged() {
|
|
||||||
bus.$emit('change-tag', this.tags);
|
|
||||||
}
|
|
||||||
|
|
||||||
get containerClass() {
|
|
||||||
return {
|
|
||||||
'form-control': true,
|
|
||||||
'h-auto': true,
|
|
||||||
'is-invalid': this.isInvalid,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
get tagValue(): string {
|
|
||||||
return this.tags.join(' ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.tag-item {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag-input {
|
|
||||||
border: 0;
|
|
||||||
outline: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,4 +1,4 @@
|
|||||||
import * as Chart from 'chart.js';
|
import Chart from 'chart.js';
|
||||||
|
|
||||||
const graph = document.getElementById('global-count-graph') as HTMLCanvasElement;
|
const graph = document.getElementById('global-count-graph') as HTMLCanvasElement;
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import * as CalHeatMap from 'cal-heatmap';
|
import CalHeatMap from 'cal-heatmap';
|
||||||
import { subMonths } from 'date-fns';
|
import { subMonths } from 'date-fns';
|
||||||
|
|
||||||
if (document.getElementById('cal-heatmap')) {
|
if (document.getElementById('cal-heatmap')) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import * as CalHeatMap from 'cal-heatmap';
|
import CalHeatMap from 'cal-heatmap';
|
||||||
import * as Chart from 'chart.js';
|
import Chart from 'chart.js';
|
||||||
import { addMonths, format } from 'date-fns';
|
import { addMonths, format } from 'date-fns';
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
2
resources/assets/sass/app.scss
vendored
2
resources/assets/sass/app.scss
vendored
@ -13,6 +13,8 @@ $primary: #e53fb1;
|
|||||||
// Components
|
// Components
|
||||||
@import "components/ejaculation";
|
@import "components/ejaculation";
|
||||||
@import "components/link-card";
|
@import "components/link-card";
|
||||||
|
@import "components/tag-input";
|
||||||
|
@import "components/metadata-preview";
|
||||||
|
|
||||||
// Tag
|
// Tag
|
||||||
@import "tag/index";
|
@import "tag/index";
|
||||||
|
32
resources/assets/sass/components/_metadata-preview.scss
vendored
Normal file
32
resources/assets/sass/components/_metadata-preview.scss
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
.tis-metadata-preview {
|
||||||
|
&-link-card {
|
||||||
|
$height: 150px;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.row > div:first-child {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
&:not([display='none']) {
|
||||||
|
min-height: $height;
|
||||||
|
|
||||||
|
img {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-text {
|
||||||
|
font-size: small;
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-tag-item {
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
}
|
11
resources/assets/sass/components/_tag-input.scss
vendored
Normal file
11
resources/assets/sass/components/_tag-input.scss
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
.tis-tag-input {
|
||||||
|
&-item {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-field {
|
||||||
|
border: 0;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,99 +3,15 @@
|
|||||||
@section('title', 'チェックイン')
|
@section('title', 'チェックイン')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div id="app" class="container">
|
<div class="container">
|
||||||
<h2>今致してる?</h2>
|
<h2>今致してる?</h2>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="row justify-content-center mt-5">
|
<div class="row justify-content-center mt-5">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<form method="post" action="{{ route('checkin') }}">
|
<form method="post" action="{{ route('checkin') }}">
|
||||||
{{ csrf_field() }}
|
{{ csrf_field() }}
|
||||||
|
<div id="checkinForm">
|
||||||
<div class="form-row">
|
<div class="text-center small" style="height: 640px;">しばらくお待ちください…</div>
|
||||||
<div class="form-group col-sm-6">
|
|
||||||
<label for="date"><span class="oi oi-calendar"></span> 日付</label>
|
|
||||||
<input id="date" name="date" type="text" class="form-control {{ $errors->has('date') || $errors->has('datetime') ? ' is-invalid' : '' }}"
|
|
||||||
pattern="^20[0-9]{2}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])$" value="{{ old('date') ?? $defaults['date'] }}" required>
|
|
||||||
|
|
||||||
@if ($errors->has('date'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('date') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
<div class="form-group col-sm-6">
|
|
||||||
<label for="time"><span class="oi oi-clock"></span> 時刻</label>
|
|
||||||
<input id="time" name="time" type="text" class="form-control {{ $errors->has('time') || $errors->has('datetime') ? ' is-invalid' : '' }}"
|
|
||||||
pattern="^([01][0-9]|2[0-3]):[0-5][0-9]$" value="{{ old('time') ?? $defaults['time'] }}" required>
|
|
||||||
|
|
||||||
@if ($errors->has('time'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('time') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
@if ($errors->has('datetime'))
|
|
||||||
<div class="form-group col-sm-12" style="margin-top: -1rem;">
|
|
||||||
<small class="text-danger">{{ $errors->first('datetime') }}</small>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<label for="tagInput"><span class="oi oi-tags"></span> タグ</label>
|
|
||||||
<tag-input id="tagInput" name="tags" value="{{ old('tags') ?? $defaults['tags'] }}" :is-invalid="{{ $errors->has('tags') ? 'true' : 'false' }}"></tag-input>
|
|
||||||
<small class="form-text text-muted">
|
|
||||||
Tab, Enter, 半角スペースのいずれかで入力確定します。
|
|
||||||
</small>
|
|
||||||
|
|
||||||
@if ($errors->has('tags'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('tags') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<label for="link"><span class="oi oi-link-intact"></span> オカズリンク</label>
|
|
||||||
<input id="link" name="link" type="text" autocomplete="off" class="form-control {{ $errors->has('link') ? ' is-invalid' : '' }}"
|
|
||||||
placeholder="http://..." value="{{ old('link') ?? $defaults['link'] }}"
|
|
||||||
@change="onChangeLink">
|
|
||||||
<small class="form-text text-muted">
|
|
||||||
オカズのURLを貼り付けて登録することができます。
|
|
||||||
</small>
|
|
||||||
@if ($errors->has('link'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('link') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<metadata-preview :metadata="metadata" :state="metadataLoadState"></metadata-preview>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<label for="note"><span class="oi oi-comment-square"></span> ノート</label>
|
|
||||||
<textarea id="note" name="note" class="form-control {{ $errors->has('note') ? ' is-invalid' : '' }}" rows="4">{{ old('note') ?? $defaults['note'] }}</textarea>
|
|
||||||
<small class="form-text text-muted">
|
|
||||||
最大 500 文字
|
|
||||||
</small>
|
|
||||||
@if ($errors->has('note'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('note') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-row mt-4">
|
|
||||||
<p>オプション</p>
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<div class="custom-control custom-checkbox mb-3">
|
|
||||||
<input id="isPrivate" name="is_private" type="checkbox" class="custom-control-input" {{ old('is_private') || $defaults['is_private'] ? 'checked' : '' }}>
|
|
||||||
<label class="custom-control-label" for="isPrivate">
|
|
||||||
<span class="oi oi-lock-locked"></span> このチェックインを非公開にする
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="custom-control custom-checkbox mb-3">
|
|
||||||
<input id="isTooSensitive" name="is_too_sensitive" type="checkbox" class="custom-control-input" {{ old('is_too_sensitive') || $defaults['is_too_sensitive'] ? 'checked' : '' }}>
|
|
||||||
<label class="custom-control-label" for="isTooSensitive">
|
|
||||||
<span class="oi oi-warning"></span> チェックイン対象のオカズをより過激なオカズとして設定する
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="text-center">
|
|
||||||
<button class="btn btn-primary" type="submit">チェックイン</button>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<p class="text-center small mt-4"><strong>Tips</strong>: ブックマークレットや共有機能で、簡単にチェックインできます! <a href="{{ route('checkin.tools') }}" target="_blank" rel="noopener">使い方はこちら</a></p>
|
<p class="text-center small mt-4"><strong>Tips</strong>: ブックマークレットや共有機能で、簡単にチェックインできます! <a href="{{ route('checkin.tools') }}" target="_blank" rel="noopener">使い方はこちら</a></p>
|
||||||
@ -105,5 +21,6 @@
|
|||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
@push('script')
|
@push('script')
|
||||||
|
<script id="initialState" type="application/json">@json($initialState)</script>
|
||||||
<script src="{{ mix('js/checkin.js') }}"></script>
|
<script src="{{ mix('js/checkin.js') }}"></script>
|
||||||
@endpush
|
@endpush
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
@section('title', 'チェックインの修正')
|
@section('title', 'チェックインの修正')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div id="app" class="container">
|
<div class="container">
|
||||||
<h2>チェックインの修正</h2>
|
<h2>チェックインの修正</h2>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="row justify-content-center mt-5">
|
<div class="row justify-content-center mt-5">
|
||||||
@ -11,92 +11,8 @@
|
|||||||
<form method="post" action="{{ route('checkin.update', ['id' => $ejaculation->id]) }}">
|
<form method="post" action="{{ route('checkin.update', ['id' => $ejaculation->id]) }}">
|
||||||
{{ method_field('PUT') }}
|
{{ method_field('PUT') }}
|
||||||
{{ csrf_field() }}
|
{{ csrf_field() }}
|
||||||
|
<div id="checkinForm">
|
||||||
<div class="form-row">
|
<div class="text-center small" style="height: 640px;">しばらくお待ちください…</div>
|
||||||
<div class="form-group col-sm-6">
|
|
||||||
<label for="date"><span class="oi oi-calendar"></span> 日付</label>
|
|
||||||
<input id="date" name="date" type="text" class="form-control {{ $errors->has('date') || $errors->has('datetime') ? ' is-invalid' : '' }}"
|
|
||||||
pattern="^20[0-9]{2}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])$" value="{{ old('date') ?? $ejaculation->ejaculated_date->format('Y/m/d') }}" required>
|
|
||||||
|
|
||||||
@if ($errors->has('date'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('date') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
<div class="form-group col-sm-6">
|
|
||||||
<label for="time"><span class="oi oi-clock"></span> 時刻</label>
|
|
||||||
<input id="time" name="time" type="text" class="form-control {{ $errors->has('time') || $errors->has('datetime') ? ' is-invalid' : '' }}"
|
|
||||||
pattern="^([01][0-9]|2[0-3]):[0-5][0-9]$" value="{{ old('time') ?? $ejaculation->ejaculated_date->format('H:i') }}" required>
|
|
||||||
|
|
||||||
@if ($errors->has('time'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('time') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
@if ($errors->has('datetime'))
|
|
||||||
<div class="form-group col-sm-12" style="margin-top: -1rem;">
|
|
||||||
<small class="text-danger">{{ $errors->first('datetime') }}</small>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<label for="tagInput"><span class="oi oi-tags"></span> タグ</label>
|
|
||||||
<tag-input id="tagInput" name="tags" value="{{ old('tags') ?? $ejaculation->textTags() }}" :is-invalid="{{ $errors->has('tags') ? 'true' : 'false' }}"></tag-input>
|
|
||||||
<small class="form-text text-muted">
|
|
||||||
Tab, Enter, 半角スペースのいずれかで入力確定します。
|
|
||||||
</small>
|
|
||||||
|
|
||||||
@if ($errors->has('tags'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('tags') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<label for="link"><span class="oi oi-link-intact"></span> オカズリンク</label>
|
|
||||||
<input id="link" name="link" type="text" autocomplete="off" class="form-control {{ $errors->has('link') ? ' is-invalid' : '' }}"
|
|
||||||
placeholder="http://..." value="{{ old('link') ?? $ejaculation->link }}"
|
|
||||||
@change="onChangeLink">
|
|
||||||
<small class="form-text text-muted">
|
|
||||||
オカズのURLを貼り付けて登録することができます。
|
|
||||||
</small>
|
|
||||||
@if ($errors->has('link'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('link') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<metadata-preview :metadata="metadata" :state="metadataLoadState"></metadata-preview>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<label for="note"><span class="oi oi-comment-square"></span> ノート</label>
|
|
||||||
<textarea id="note" name="note" class="form-control {{ $errors->has('note') ? ' is-invalid' : '' }}" rows="4">{{ old('note') ?? $ejaculation->note }}</textarea>
|
|
||||||
<small class="form-text text-muted">
|
|
||||||
最大 500 文字
|
|
||||||
</small>
|
|
||||||
@if ($errors->has('note'))
|
|
||||||
<div class="invalid-feedback">{{ $errors->first('note') }}</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-row mt-4">
|
|
||||||
<p>オプション</p>
|
|
||||||
<div class="form-group col-sm-12">
|
|
||||||
<div class="custom-control custom-checkbox mb-3">
|
|
||||||
<input id="isPrivate" name="is_private" type="checkbox" class="custom-control-input" {{ (is_bool(old('is_private')) ? old('is_private') : $ejaculation->is_private) ? 'checked' : '' }}>
|
|
||||||
<label class="custom-control-label" for="isPrivate">
|
|
||||||
<span class="oi oi-lock-locked"></span> このチェックインを非公開にする
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="custom-control custom-checkbox mb-3">
|
|
||||||
<input id="isTooSensitive" name="is_too_sensitive" type="checkbox" class="custom-control-input" {{ (is_bool(old('is_too_sensitive')) ? old('is_too_sensitive') : $ejaculation->is_too_sensitive) ? 'checked' : '' }}>
|
|
||||||
<label class="custom-control-label" for="isTooSensitive">
|
|
||||||
<span class="oi oi-warning"></span> チェックイン対象のオカズをより過激なオカズとして設定する
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="text-center">
|
|
||||||
<button class="btn btn-primary" type="submit">チェックイン</button>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@ -105,5 +21,6 @@
|
|||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
@push('script')
|
@push('script')
|
||||||
|
<script id="initialState" type="application/json">@json($initialState)</script>
|
||||||
<script src="{{ mix('js/checkin.js') }}"></script>
|
<script src="{{ mix('js/checkin.js') }}"></script>
|
||||||
@endpush
|
@endpush
|
||||||
|
@ -5,9 +5,11 @@
|
|||||||
"module": "es2015",
|
"module": "es2015",
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"experimentalDecorators": true
|
"experimentalDecorators": true,
|
||||||
|
"jsx": "react",
|
||||||
|
"esModuleInterop": true
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"resources/assets/js/**/*"
|
"resources/assets/js/**/*"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
2
webpack.mix.js
vendored
2
webpack.mix.js
vendored
@ -20,7 +20,7 @@ mix.ts('resources/assets/js/app.ts', 'public/js')
|
|||||||
.ts('resources/assets/js/setting/privacy.ts', 'public/js/setting')
|
.ts('resources/assets/js/setting/privacy.ts', 'public/js/setting')
|
||||||
.ts('resources/assets/js/setting/import.ts', 'public/js/setting')
|
.ts('resources/assets/js/setting/import.ts', 'public/js/setting')
|
||||||
.ts('resources/assets/js/setting/deactivate.ts', 'public/js/setting')
|
.ts('resources/assets/js/setting/deactivate.ts', 'public/js/setting')
|
||||||
.ts('resources/assets/js/checkin.ts', 'public/js')
|
.ts('resources/assets/js/checkin.tsx', 'public/js')
|
||||||
.sass('resources/assets/sass/app.scss', 'public/css')
|
.sass('resources/assets/sass/app.scss', 'public/css')
|
||||||
.autoload({
|
.autoload({
|
||||||
jquery: ['$', 'jQuery', 'window.jQuery'],
|
jquery: ['$', 'jQuery', 'window.jQuery'],
|
||||||
|
300
yarn.lock
300
yarn.lock
@ -772,6 +772,11 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
moment "^2.10.2"
|
moment "^2.10.2"
|
||||||
|
|
||||||
|
"@types/classnames@^2.2.10":
|
||||||
|
version "2.2.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999"
|
||||||
|
integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ==
|
||||||
|
|
||||||
"@types/color-name@^1.1.1":
|
"@types/color-name@^1.1.1":
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
|
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
|
||||||
@ -828,6 +833,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.5.0.tgz#4e498dbf355795a611a87ae5ef811a8660d42662"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.5.0.tgz#4e498dbf355795a611a87ae5ef811a8660d42662"
|
||||||
integrity sha512-Onhn+z72D2O2Pb2ql2xukJ55rglumsVo1H6Fmyi8mlU9SvKdBk/pUSUAiBY/d9bAOF7VVWajX3sths/+g6ZiAQ==
|
integrity sha512-Onhn+z72D2O2Pb2ql2xukJ55rglumsVo1H6Fmyi8mlU9SvKdBk/pUSUAiBY/d9bAOF7VVWajX3sths/+g6ZiAQ==
|
||||||
|
|
||||||
|
"@types/prop-types@*":
|
||||||
|
version "15.7.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
|
||||||
|
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
|
||||||
|
|
||||||
"@types/q@^1.5.1":
|
"@types/q@^1.5.1":
|
||||||
version "1.5.2"
|
version "1.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
|
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
|
||||||
@ -838,6 +848,21 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a"
|
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a"
|
||||||
integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ==
|
integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ==
|
||||||
|
|
||||||
|
"@types/react-dom@^16.9.8":
|
||||||
|
version "16.9.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423"
|
||||||
|
integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==
|
||||||
|
dependencies:
|
||||||
|
"@types/react" "*"
|
||||||
|
|
||||||
|
"@types/react@*", "@types/react@^16.9.35":
|
||||||
|
version "16.9.46"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.46.tgz#f0326cd7adceda74148baa9bff6e918632f5069e"
|
||||||
|
integrity sha512-dbHzO3aAq1lB3jRQuNpuZ/mnu+CdD3H0WVaaBQA8LTT3S33xhVBUj232T8M3tAhSWJs/D/UqORYUlJNl/8VQZg==
|
||||||
|
dependencies:
|
||||||
|
"@types/prop-types" "*"
|
||||||
|
csstype "^3.0.2"
|
||||||
|
|
||||||
"@types/sizzle@*":
|
"@types/sizzle@*":
|
||||||
version "2.3.2"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
|
resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
|
||||||
@ -1102,11 +1127,6 @@ acorn@^6.0.7, acorn@^6.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
|
||||||
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
|
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
|
||||||
|
|
||||||
acorn@^7.1.1:
|
|
||||||
version "7.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe"
|
|
||||||
integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==
|
|
||||||
|
|
||||||
acorn@^7.3.1:
|
acorn@^7.3.1:
|
||||||
version "7.4.0"
|
version "7.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
|
||||||
@ -1276,6 +1296,15 @@ array-flatten@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
|
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
|
||||||
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
|
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
|
||||||
|
|
||||||
|
array-includes@^3.1.1:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
|
||||||
|
integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.0"
|
||||||
|
is-string "^1.0.5"
|
||||||
|
|
||||||
array-union@^1.0.1, array-union@^1.0.2:
|
array-union@^1.0.1, array-union@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
|
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
|
||||||
@ -1293,6 +1322,15 @@ array-unique@^0.3.2:
|
|||||||
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
||||||
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
|
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
|
||||||
|
|
||||||
|
array.prototype.flatmap@^1.2.3:
|
||||||
|
version "1.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443"
|
||||||
|
integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.0-next.1"
|
||||||
|
function-bind "^1.1.1"
|
||||||
|
|
||||||
arrify@^1.0.1:
|
arrify@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
|
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
|
||||||
@ -1937,6 +1975,11 @@ class-utils@^0.3.5:
|
|||||||
isobject "^3.0.0"
|
isobject "^3.0.0"
|
||||||
static-extend "^0.1.1"
|
static-extend "^0.1.1"
|
||||||
|
|
||||||
|
classnames@^2.2.6:
|
||||||
|
version "2.2.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
|
||||||
|
integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
|
||||||
|
|
||||||
clean-css@4.2.x, clean-css@^4.1.3:
|
clean-css@4.2.x, clean-css@^4.1.3:
|
||||||
version "4.2.2"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.2.tgz#8519abda724b3e759bc79d196369906925d81a3f"
|
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.2.tgz#8519abda724b3e759bc79d196369906925d81a3f"
|
||||||
@ -2489,6 +2532,11 @@ csso@^4.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
css-tree "1.0.0-alpha.37"
|
css-tree "1.0.0-alpha.37"
|
||||||
|
|
||||||
|
csstype@^3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.2.tgz#ee5ff8f208c8cd613b389f7b222c9801ca62b3f7"
|
||||||
|
integrity sha512-ofovWglpqoqbfLNOTBNZLSbMuGrblAf1efvvArGKOZMBrIoJeu5UsAipQolkijtyQx5MtAzT/J9IHj/CEY1mJw==
|
||||||
|
|
||||||
currently-unhandled@^0.4.1:
|
currently-unhandled@^0.4.1:
|
||||||
version "0.4.1"
|
version "0.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
|
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
|
||||||
@ -2519,11 +2567,6 @@ date-fns@^1.27.2, date-fns@^1.30.1:
|
|||||||
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
|
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
|
||||||
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
|
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
|
||||||
|
|
||||||
de-indent@^1.0.2:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
|
|
||||||
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
|
|
||||||
|
|
||||||
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
|
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
@ -2724,6 +2767,13 @@ dns-txt@^2.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
buffer-indexof "^1.0.0"
|
buffer-indexof "^1.0.0"
|
||||||
|
|
||||||
|
doctrine@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
|
||||||
|
integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
|
||||||
|
dependencies:
|
||||||
|
esutils "^2.0.2"
|
||||||
|
|
||||||
doctrine@^3.0.0:
|
doctrine@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
||||||
@ -2912,6 +2962,23 @@ error-stack-parser@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
stackframe "^1.1.1"
|
stackframe "^1.1.1"
|
||||||
|
|
||||||
|
es-abstract@^1.17.0, es-abstract@^1.17.5:
|
||||||
|
version "1.17.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
|
||||||
|
integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
|
||||||
|
dependencies:
|
||||||
|
es-to-primitive "^1.2.1"
|
||||||
|
function-bind "^1.1.1"
|
||||||
|
has "^1.0.3"
|
||||||
|
has-symbols "^1.0.1"
|
||||||
|
is-callable "^1.2.0"
|
||||||
|
is-regex "^1.1.0"
|
||||||
|
object-inspect "^1.7.0"
|
||||||
|
object-keys "^1.1.1"
|
||||||
|
object.assign "^4.1.0"
|
||||||
|
string.prototype.trimend "^1.0.1"
|
||||||
|
string.prototype.trimstart "^1.0.1"
|
||||||
|
|
||||||
es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
|
es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
|
||||||
version "1.17.4"
|
version "1.17.4"
|
||||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184"
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184"
|
||||||
@ -3001,14 +3068,22 @@ eslint-plugin-prettier@^3.1.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
prettier-linter-helpers "^1.0.0"
|
prettier-linter-helpers "^1.0.0"
|
||||||
|
|
||||||
eslint-plugin-vue@^6.2.2:
|
eslint-plugin-react@^7.20.6:
|
||||||
version "6.2.2"
|
version "7.20.6"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe"
|
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.6.tgz#4d7845311a93c463493ccfa0a19c9c5d0fd69f60"
|
||||||
integrity sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==
|
integrity sha512-kidMTE5HAEBSLu23CUDvj8dc3LdBU0ri1scwHBZjI41oDv4tjsWZKU7MQccFzH1QYPYhsnTF2ovh7JlcIcmxgg==
|
||||||
dependencies:
|
dependencies:
|
||||||
natural-compare "^1.4.0"
|
array-includes "^3.1.1"
|
||||||
semver "^5.6.0"
|
array.prototype.flatmap "^1.2.3"
|
||||||
vue-eslint-parser "^7.0.0"
|
doctrine "^2.1.0"
|
||||||
|
has "^1.0.3"
|
||||||
|
jsx-ast-utils "^2.4.1"
|
||||||
|
object.entries "^1.1.2"
|
||||||
|
object.fromentries "^2.0.2"
|
||||||
|
object.values "^1.1.1"
|
||||||
|
prop-types "^15.7.2"
|
||||||
|
resolve "^1.17.0"
|
||||||
|
string.prototype.matchall "^4.0.2"
|
||||||
|
|
||||||
eslint-scope@^4.0.3:
|
eslint-scope@^4.0.3:
|
||||||
version "4.0.3"
|
version "4.0.3"
|
||||||
@ -3080,15 +3155,6 @@ eslint@^7.6.0:
|
|||||||
text-table "^0.2.0"
|
text-table "^0.2.0"
|
||||||
v8-compile-cache "^2.0.3"
|
v8-compile-cache "^2.0.3"
|
||||||
|
|
||||||
espree@^6.2.1:
|
|
||||||
version "6.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
|
|
||||||
integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
|
|
||||||
dependencies:
|
|
||||||
acorn "^7.1.1"
|
|
||||||
acorn-jsx "^5.2.0"
|
|
||||||
eslint-visitor-keys "^1.1.0"
|
|
||||||
|
|
||||||
espree@^7.2.0:
|
espree@^7.2.0:
|
||||||
version "7.2.0"
|
version "7.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69"
|
resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69"
|
||||||
@ -3108,7 +3174,7 @@ esprima@~3.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
||||||
integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
|
integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
|
||||||
|
|
||||||
esquery@^1.0.1, esquery@^1.2.0:
|
esquery@^1.2.0:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
|
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
|
||||||
integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
|
integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
|
||||||
@ -3872,7 +3938,7 @@ hash.js@^1.0.0, hash.js@^1.0.3:
|
|||||||
inherits "^2.0.3"
|
inherits "^2.0.3"
|
||||||
minimalistic-assert "^1.0.1"
|
minimalistic-assert "^1.0.1"
|
||||||
|
|
||||||
he@1.2.x, he@^1.1.0:
|
he@1.2.x:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||||
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
||||||
@ -4223,6 +4289,15 @@ internal-ip@^4.3.0:
|
|||||||
default-gateway "^4.2.0"
|
default-gateway "^4.2.0"
|
||||||
ipaddr.js "^1.9.0"
|
ipaddr.js "^1.9.0"
|
||||||
|
|
||||||
|
internal-slot@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3"
|
||||||
|
integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==
|
||||||
|
dependencies:
|
||||||
|
es-abstract "^1.17.0-next.1"
|
||||||
|
has "^1.0.3"
|
||||||
|
side-channel "^1.0.2"
|
||||||
|
|
||||||
interpret@1.2.0:
|
interpret@1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
|
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
|
||||||
@ -4346,6 +4421,11 @@ is-callable@^1.1.4, is-callable@^1.1.5:
|
|||||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
|
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
|
||||||
integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
|
integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
|
||||||
|
|
||||||
|
is-callable@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
|
||||||
|
integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
|
||||||
|
|
||||||
is-ci@^2.0.0:
|
is-ci@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
|
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
|
||||||
@ -4546,6 +4626,13 @@ is-regex@^1.0.4, is-regex@^1.0.5:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has "^1.0.3"
|
has "^1.0.3"
|
||||||
|
|
||||||
|
is-regex@^1.1.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
|
||||||
|
integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
|
||||||
|
dependencies:
|
||||||
|
has-symbols "^1.0.1"
|
||||||
|
|
||||||
is-regexp@^1.0.0:
|
is-regexp@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
|
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
|
||||||
@ -4561,6 +4648,11 @@ is-stream@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||||
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
||||||
|
|
||||||
|
is-string@^1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
|
||||||
|
integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
|
||||||
|
|
||||||
is-supported-regexp-flag@^1.0.0:
|
is-supported-regexp-flag@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca"
|
resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca"
|
||||||
@ -4701,6 +4793,14 @@ jsonfile@^4.0.0:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
graceful-fs "^4.1.6"
|
graceful-fs "^4.1.6"
|
||||||
|
|
||||||
|
jsx-ast-utils@^2.4.1:
|
||||||
|
version "2.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e"
|
||||||
|
integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==
|
||||||
|
dependencies:
|
||||||
|
array-includes "^3.1.1"
|
||||||
|
object.assign "^4.1.0"
|
||||||
|
|
||||||
killable@^1.0.1:
|
killable@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
|
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
|
||||||
@ -4988,7 +5088,7 @@ longest-streak@^2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
|
resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
|
||||||
integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
|
integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
|
||||||
|
|
||||||
loose-envify@^1.0.0:
|
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||||
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
||||||
@ -5608,6 +5708,25 @@ object.assign@^4.1.0:
|
|||||||
has-symbols "^1.0.0"
|
has-symbols "^1.0.0"
|
||||||
object-keys "^1.0.11"
|
object-keys "^1.0.11"
|
||||||
|
|
||||||
|
object.entries@^1.1.2:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add"
|
||||||
|
integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.5"
|
||||||
|
has "^1.0.3"
|
||||||
|
|
||||||
|
object.fromentries@^2.0.2:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
|
||||||
|
integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.0-next.1"
|
||||||
|
function-bind "^1.1.1"
|
||||||
|
has "^1.0.3"
|
||||||
|
|
||||||
object.getownpropertydescriptors@^2.1.0:
|
object.getownpropertydescriptors@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
|
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
|
||||||
@ -5630,7 +5749,7 @@ object.pick@^1.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
isobject "^3.0.1"
|
isobject "^3.0.1"
|
||||||
|
|
||||||
object.values@^1.1.0:
|
object.values@^1.1.0, object.values@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
|
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
|
||||||
integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
|
integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
|
||||||
@ -6499,6 +6618,15 @@ promise-inflight@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
|
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
|
||||||
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
|
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
|
||||||
|
|
||||||
|
prop-types@^15.6.2, prop-types@^15.7.2:
|
||||||
|
version "15.7.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
||||||
|
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.4.0"
|
||||||
|
object-assign "^4.1.1"
|
||||||
|
react-is "^16.8.1"
|
||||||
|
|
||||||
property-expr@^1.5.0:
|
property-expr@^1.5.0:
|
||||||
version "1.5.1"
|
version "1.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f"
|
resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f"
|
||||||
@ -6639,6 +6767,30 @@ raw-body@2.4.0:
|
|||||||
iconv-lite "0.4.24"
|
iconv-lite "0.4.24"
|
||||||
unpipe "1.0.0"
|
unpipe "1.0.0"
|
||||||
|
|
||||||
|
react-dom@^16.13.1:
|
||||||
|
version "16.13.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f"
|
||||||
|
integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
object-assign "^4.1.1"
|
||||||
|
prop-types "^15.6.2"
|
||||||
|
scheduler "^0.19.1"
|
||||||
|
|
||||||
|
react-is@^16.8.1:
|
||||||
|
version "16.13.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||||
|
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||||
|
|
||||||
|
react@^16.13.1:
|
||||||
|
version "16.13.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
|
||||||
|
integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
object-assign "^4.1.1"
|
||||||
|
prop-types "^15.6.2"
|
||||||
|
|
||||||
read-pkg-up@^3.0.0:
|
read-pkg-up@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
|
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
|
||||||
@ -6758,7 +6910,7 @@ regex-parser@2.2.10:
|
|||||||
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37"
|
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37"
|
||||||
integrity sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==
|
integrity sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==
|
||||||
|
|
||||||
regexp.prototype.flags@^1.2.0:
|
regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
|
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
|
||||||
integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
|
integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
|
||||||
@ -6964,6 +7116,13 @@ resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
path-parse "^1.0.6"
|
path-parse "^1.0.6"
|
||||||
|
|
||||||
|
resolve@^1.17.0:
|
||||||
|
version "1.17.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
||||||
|
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
||||||
|
dependencies:
|
||||||
|
path-parse "^1.0.6"
|
||||||
|
|
||||||
restore-cursor@^2.0.0:
|
restore-cursor@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
||||||
@ -7091,6 +7250,14 @@ sax@~1.2.4:
|
|||||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||||
|
|
||||||
|
scheduler@^0.19.1:
|
||||||
|
version "0.19.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
|
||||||
|
integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
object-assign "^4.1.1"
|
||||||
|
|
||||||
schema-utils@^0.4.5:
|
schema-utils@^0.4.5:
|
||||||
version "0.4.7"
|
version "0.4.7"
|
||||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
|
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
|
||||||
@ -7266,6 +7433,14 @@ shellwords@^0.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
|
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
|
||||||
integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
|
integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
|
||||||
|
|
||||||
|
side-channel@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947"
|
||||||
|
integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==
|
||||||
|
dependencies:
|
||||||
|
es-abstract "^1.17.0-next.1"
|
||||||
|
object-inspect "^1.7.0"
|
||||||
|
|
||||||
signal-exit@^3.0.0, signal-exit@^3.0.2:
|
signal-exit@^3.0.0, signal-exit@^3.0.2:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
@ -7567,6 +7742,26 @@ string-width@^3.0.0, string-width@^3.1.0:
|
|||||||
is-fullwidth-code-point "^2.0.0"
|
is-fullwidth-code-point "^2.0.0"
|
||||||
strip-ansi "^5.1.0"
|
strip-ansi "^5.1.0"
|
||||||
|
|
||||||
|
string.prototype.matchall@^4.0.2:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e"
|
||||||
|
integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.0"
|
||||||
|
has-symbols "^1.0.1"
|
||||||
|
internal-slot "^1.0.2"
|
||||||
|
regexp.prototype.flags "^1.3.0"
|
||||||
|
side-channel "^1.0.2"
|
||||||
|
|
||||||
|
string.prototype.trimend@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
|
||||||
|
integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.5"
|
||||||
|
|
||||||
string.prototype.trimleft@^2.1.1:
|
string.prototype.trimleft@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74"
|
resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74"
|
||||||
@ -7583,6 +7778,14 @@ string.prototype.trimright@^2.1.1:
|
|||||||
define-properties "^1.1.3"
|
define-properties "^1.1.3"
|
||||||
function-bind "^1.1.1"
|
function-bind "^1.1.1"
|
||||||
|
|
||||||
|
string.prototype.trimstart@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
|
||||||
|
integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.17.5"
|
||||||
|
|
||||||
string_decoder@^1.0.0, string_decoder@^1.1.1:
|
string_decoder@^1.0.0, string_decoder@^1.1.1:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
||||||
@ -8355,23 +8558,6 @@ vm-browserify@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
||||||
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
|
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
|
||||||
|
|
||||||
vue-class-component@^7.1.0:
|
|
||||||
version "7.2.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.2.tgz#aecc6d28801f64c61eb04407cf3a5476da26b0c0"
|
|
||||||
integrity sha512-QjVfjRffux0rUBNtxr1hvUxDrfifDvk9q/OSdB/sKIlfxAudDF2E1YTeiEC+qOYIOOBGWkgSKQSnast6H+S38w==
|
|
||||||
|
|
||||||
vue-eslint-parser@^7.0.0:
|
|
||||||
version "7.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz#9cdbcc823e656b087507a1911732b867ac101e83"
|
|
||||||
integrity sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q==
|
|
||||||
dependencies:
|
|
||||||
debug "^4.1.1"
|
|
||||||
eslint-scope "^5.0.0"
|
|
||||||
eslint-visitor-keys "^1.1.0"
|
|
||||||
espree "^6.2.1"
|
|
||||||
esquery "^1.0.1"
|
|
||||||
lodash "^4.17.15"
|
|
||||||
|
|
||||||
vue-hot-reload-api@^2.3.0:
|
vue-hot-reload-api@^2.3.0:
|
||||||
version "2.3.4"
|
version "2.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
|
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
|
||||||
@ -8388,11 +8574,6 @@ vue-loader@^15.4.2:
|
|||||||
vue-hot-reload-api "^2.3.0"
|
vue-hot-reload-api "^2.3.0"
|
||||||
vue-style-loader "^4.1.0"
|
vue-style-loader "^4.1.0"
|
||||||
|
|
||||||
vue-property-decorator@^9.0.0:
|
|
||||||
version "9.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-9.0.0.tgz#0a5f6d47d33ca62a8876108ccfa65c2c4fb7325a"
|
|
||||||
integrity sha512-oegTNPItuHOkW0AP1MnbdNwkmyhfsUIIXvIRHpgC18tVoEo21/i6kItyeekjMs8JgZJeuHzsaTc/DZaJFH4IWQ==
|
|
||||||
|
|
||||||
vue-style-loader@^4.1.0:
|
vue-style-loader@^4.1.0:
|
||||||
version "4.1.2"
|
version "4.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8"
|
resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8"
|
||||||
@ -8401,24 +8582,11 @@ vue-style-loader@^4.1.0:
|
|||||||
hash-sum "^1.0.2"
|
hash-sum "^1.0.2"
|
||||||
loader-utils "^1.0.2"
|
loader-utils "^1.0.2"
|
||||||
|
|
||||||
vue-template-compiler@^2.6.10:
|
|
||||||
version "2.6.11"
|
|
||||||
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
|
|
||||||
integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==
|
|
||||||
dependencies:
|
|
||||||
de-indent "^1.0.2"
|
|
||||||
he "^1.1.0"
|
|
||||||
|
|
||||||
vue-template-es2015-compiler@^1.9.0:
|
vue-template-es2015-compiler@^1.9.0:
|
||||||
version "1.9.1"
|
version "1.9.1"
|
||||||
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
|
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
|
||||||
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
|
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
|
||||||
|
|
||||||
vue@^2.6.10:
|
|
||||||
version "2.6.11"
|
|
||||||
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
|
|
||||||
integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==
|
|
||||||
|
|
||||||
watchpack@^1.6.0:
|
watchpack@^1.6.0:
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
|
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
|
||||||
|
Loading…
Reference in New Issue
Block a user