Progress
This commit is contained in:
parent
d78dd971c0
commit
65af72faae
@ -1,55 +0,0 @@
|
||||
//test
|
||||
import { defineMessages } from 'react-intl';
|
||||
|
||||
const messages = defineMessages({
|
||||
unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' },
|
||||
unexpectedMessage: { id: 'alert.unexpected.message', defaultMessage: 'An unexpected error occurred.' },
|
||||
});
|
||||
|
||||
export const ALERT_SHOW = 'ALERT_SHOW';
|
||||
export const ALERT_DISMISS = 'ALERT_DISMISS';
|
||||
export const ALERT_CLEAR = 'ALERT_CLEAR';
|
||||
|
||||
export function dismissAlert(alert) {
|
||||
return {
|
||||
type: ALERT_DISMISS,
|
||||
alert,
|
||||
};
|
||||
};
|
||||
|
||||
export function clearAlert() {
|
||||
return {
|
||||
type: ALERT_CLEAR,
|
||||
};
|
||||
};
|
||||
|
||||
export function showAlert(title = messages.unexpectedTitle, message = messages.unexpectedMessage) {
|
||||
return {
|
||||
type: ALERT_SHOW,
|
||||
title,
|
||||
message,
|
||||
};
|
||||
};
|
||||
|
||||
export function showAlertForError(error) {
|
||||
if (error.response) {
|
||||
const { data, status, statusText } = error.response;
|
||||
|
||||
if (status === 404 || status === 410) {
|
||||
// Skip these errors as they are reflected in the UI
|
||||
return {};
|
||||
}
|
||||
|
||||
let message = statusText;
|
||||
let title = `${status}`;
|
||||
|
||||
if (data.error) {
|
||||
message = data.error;
|
||||
}
|
||||
|
||||
return showAlert(title, message);
|
||||
} else {
|
||||
console.error(error);
|
||||
return showAlert();
|
||||
}
|
||||
}
|
@ -8,8 +8,7 @@ import { useEmoji } from './emojis';
|
||||
import resizeImage from '../utils/resize_image';
|
||||
import { importFetchedAccounts } from './importer';
|
||||
import { updateTimeline, dequeueTimeline } from './timelines';
|
||||
import { showAlertForError } from './alerts';
|
||||
import { showAlert } from './alerts';
|
||||
// import { showAlert, showAlertForError } from './alerts';
|
||||
import { defineMessages } from 'react-intl';
|
||||
import { openModal, closeModal } from './modal';
|
||||
import { me } from '../initial_state';
|
||||
@ -134,13 +133,13 @@ export function handleComposeSubmit(dispatch, getState, response, status) {
|
||||
|
||||
const isScheduledStatus = response.data['scheduled_at'] !== undefined;
|
||||
if (isScheduledStatus) {
|
||||
dispatch(showAlertForError({
|
||||
response: {
|
||||
data: {},
|
||||
status: 200,
|
||||
statusText: 'Successfully scheduled status',
|
||||
}
|
||||
}));
|
||||
// dispatch(showAlertForError({
|
||||
// response: {
|
||||
// data: {},
|
||||
// status: 200,
|
||||
// statusText: 'Successfully scheduled status',
|
||||
// }
|
||||
// }));
|
||||
dispatch(submitComposeSuccess({ ...response.data }));
|
||||
return;
|
||||
}
|
||||
@ -247,12 +246,12 @@ export function uploadCompose(files) {
|
||||
let total = Array.from(files).reduce((a, v) => a + v.size, 0);
|
||||
|
||||
if (files.length + media.size > uploadLimit) {
|
||||
dispatch(showAlert(undefined, messages.uploadErrorLimit));
|
||||
// dispatch(showAlert(undefined, messages.uploadErrorLimit));
|
||||
return;
|
||||
}
|
||||
|
||||
if (getState().getIn(['compose', 'poll'])) {
|
||||
dispatch(showAlert(undefined, messages.uploadErrorPoll));
|
||||
// dispatch(showAlert(undefined, messages.uploadErrorPoll));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -379,7 +378,7 @@ const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, token) =>
|
||||
dispatch(readyComposeSuggestionsAccounts(token, response.data));
|
||||
}).catch(error => {
|
||||
if (!isCancel(error)) {
|
||||
dispatch(showAlertForError(error));
|
||||
// dispatch(showAlertForError(error));
|
||||
}
|
||||
});
|
||||
}, 200, { leading: true, trailing: true });
|
||||
|
@ -1,6 +1,6 @@
|
||||
import api from '../api';
|
||||
import { importFetchedAccounts } from './importer';
|
||||
import { showAlertForError } from './alerts';
|
||||
// import { showAlertForError } from './alerts';
|
||||
import { me } from '../initial_state'
|
||||
|
||||
export const LIST_FETCH_REQUEST = 'LIST_FETCH_REQUEST';
|
||||
@ -263,7 +263,8 @@ export const fetchListSuggestions = q => (dispatch, getState) => {
|
||||
api(getState).get('/api/v1/accounts/search', { params }).then(({ data }) => {
|
||||
dispatch(importFetchedAccounts(data));
|
||||
dispatch(fetchListSuggestionsReady(q, data));
|
||||
}).catch(error => dispatch(showAlertForError(error)));
|
||||
})
|
||||
// }).catch(error => dispatch(showAlertForError(error)));
|
||||
};
|
||||
|
||||
export const fetchListSuggestionsReady = (query, accounts) => ({
|
||||
|
@ -1,6 +1,6 @@
|
||||
import api from '../api';
|
||||
import { debounce } from 'lodash';
|
||||
import { showAlertForError } from './alerts';
|
||||
// import { showAlertForError } from './alerts';
|
||||
import { me } from '../initial_state';
|
||||
|
||||
export const SETTING_CHANGE = 'SETTING_CHANGE';
|
||||
@ -29,7 +29,7 @@ const debouncedSave = debounce((dispatch, getState) => {
|
||||
|
||||
api().put('/api/web/settings', { data })
|
||||
.then(() => dispatch({ type: SETTING_SAVE }))
|
||||
.catch(error => dispatch(showAlertForError(error)));
|
||||
// .catch(error => dispatch(showAlertForError(error)));
|
||||
}, 5000, { trailing: true });
|
||||
|
||||
export function saveSettings() {
|
||||
|
@ -17,10 +17,10 @@ const AddIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 61.5 29.5 L 34.5 29.5 L 34.5 2.5 C 34.5 1.121094 33.378906 0 32 0 C 30.621094 0 29.5 1.121094 29.5 2.5 L 29.5 29.5 L 2.5 29.5 C 1.121094 29.5 0 30.621094 0 32 C 0 33.378906 1.121094 34.5 2.5 34.5 L 29.5 34.5 L 29.5 61.5 C 29.5 62.878906 30.621094 64 32 64 C 33.378906 64 34.5 62.878906 34.5 61.5 L 34.5 34.5 L 61.5 34.5 C 62.878906 34.5 64 33.378906 64 32 C 64 30.621094 62.878906 29.5 61.5 29.5 Z M 61.5 29.5" />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 61.5 29.5 L 34.5 29.5 L 34.5 2.5 C 34.5 1.12 33.38 0 32 0 C 30.62 0 29.5 1.12 29.5 2.5 L 29.5 29.5 L 2.5 29.5 C 1.12 29.5 0 30.62 0 32 C 0 33.38 1.12 34.5 2.5 34.5 L 29.5 34.5 L 29.5 61.5 C 29.5 62.88 30.62 64 32 64 C 33.38 64 34.5 62.88 34.5 61.5 L 34.5 34.5 L 61.5 34.5 C 62.88 34.5 64 33.38 64 32 C 64 30.62 62.88 29.5 61.5 29.5 Z M 61.5 29.5' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default AddIcon
|
@ -17,10 +17,10 @@ const AngleRightIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 49.777344 29.503906 L 21.296875 1.023438 C 20.640625 0.363281 19.761719 0 18.824219 0 C 17.882812 0 17.003906 0.363281 16.347656 1.023438 L 14.25 3.121094 C 12.882812 4.484375 12.882812 6.707031 14.25 8.070312 L 38.164062 31.988281 L 14.222656 55.929688 C 13.5625 56.589844 13.199219 57.46875 13.199219 58.40625 C 13.199219 59.34375 13.5625 60.222656 14.222656 60.882812 L 16.320312 62.976562 C 16.980469 63.636719 17.859375 64 18.796875 64 C 19.734375 64 20.613281 63.636719 21.273438 62.976562 L 49.777344 34.472656 C 50.4375 33.808594 50.800781 32.925781 50.800781 31.988281 C 50.800781 31.046875 50.4375 30.164062 49.777344 29.503906 Z M 49.777344 29.503906" />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 49.78 29.5 L 21.3 1 C 20.64 0.36 19.76 0 18.82 0 C 17.88 0 17 0.36 16.35 1 L 14.25 3.12 C 12.88 4.48 12.88 6.71 14.25 8 L 38.16 31.99 L 14.22 55.93 C 13.56 56.59 13.2 57.47 13.2 58.41 C 13.2 59.34 13.56 60.22 14.22 60.88 L 16.32 62.98 C 16.98 63.64 17.86 64 18.8 64 C 19.73 64 20.61 63.64 21.27 62.98 L 49.78 34.47 C 50.44 33.81 50.8 32.93 50.8 31.99 C 50.8 31 50.44 30.16 49.78 29.5 Z M 49.78 29.5' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default AngleRightIcon
|
@ -17,19 +17,18 @@ const AppsIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<rect x="0" y="0" width="24" height="24" rx="4" />
|
||||
<rect x="0" y="28" width="24" height="24" rx="4" />
|
||||
<rect x="0" y="56" width="24" height="24" rx="4" />
|
||||
<rect x="28" y="0" width="24" height="24" rx="4" />
|
||||
<rect x="28" y="28" width="24" height="24" rx="4" />
|
||||
<rect x="28" y="56" width="24" height="24" rx="4" />
|
||||
<rect x="56" y="0" width="24" height="24" rx="4" />
|
||||
<rect x="56" y="28" width="24" height="24" rx="4" />
|
||||
<rect x="56" y="56" width="24" height="24" rx="4" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<g>
|
||||
<rect x='0' y='0' width='24' height='24' rx='4' />
|
||||
<rect x='0' y='28' width='24' height='24' rx='4' />
|
||||
<rect x='0' y='56' width='24' height='24' rx='4' />
|
||||
<rect x='28' y='0' width='24' height='24' rx='4' />
|
||||
<rect x='28' y='28' width='24' height='24' rx='4' />
|
||||
<rect x='28' y='56' width='24' height='24' rx='4' />
|
||||
<rect x='56' y='0' width='24' height='24' rx='4' />
|
||||
<rect x='56' y='28' width='24' height='24' rx='4' />
|
||||
<rect x='56' y='56' width='24' height='24' rx='4' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default AppsIcon
|
@ -5,23 +5,23 @@ const AudioIcon = ({
|
||||
viewBox = '0 0 24 24',
|
||||
title = '',
|
||||
}) => (
|
||||
<svg
|
||||
className={className}
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={viewBox}
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d='M12.253 22.75c-.166 0-.33-.055-.466-.162L4.74 17H2.254c-1.24 0-2.25-1.01-2.25-2.25v-5.5C.003 8.01 1.013 7 2.253 7H4.74l7.047-5.588c.225-.18.533-.215.792-.087.258.125.423.387.423.675v20c0 .288-.165.55-.424.675-.104.05-.216.075-.327.075zm-10-14.25c-.413 0-.75.337-.75.75v5.5c0 .413.337.75.75.75h2.75c.17 0 .333.058.466.162l6.033 4.786V3.552L5.47 8.338c-.134.104-.298.162-.467.162h-2.75zm14.33 8.226c-.308 0-.596-.19-.705-.495-.14-.39.06-.818.45-.96 1.373-.495 2.296-1.81 2.296-3.27s-.923-2.774-2.296-3.27c-.39-.14-.592-.57-.45-.96.14-.39.57-.59.958-.45 1.967.707 3.288 2.59 3.288 4.68s-1.32 3.972-3.286 4.68c-.084.03-.17.046-.255.046z' />
|
||||
<path d='M17.82 20.135c-.306 0-.594-.19-.704-.495-.14-.39.06-.82.45-.96 2.802-1.014 4.684-3.698 4.684-6.68 0-2.98-1.883-5.665-4.684-6.68-.39-.14-.592-.57-.45-.96.14-.39.573-.59.96-.45C21.47 5.14 23.75 8.39 23.75 12c0 3.61-2.28 6.862-5.674 8.09-.084.03-.17.045-.255.045z' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
<svg
|
||||
className={className}
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={viewBox}
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d='M12.253 22.75c-.166 0-.33-.055-.466-.162L4.74 17H2.254c-1.24 0-2.25-1.01-2.25-2.25v-5.5C.003 8.01 1.013 7 2.253 7H4.74l7.047-5.588c.225-.18.533-.215.792-.087.258.125.423.387.423.675v20c0 .288-.165.55-.424.675-.104.05-.216.075-.327.075zm-10-14.25c-.413 0-.75.337-.75.75v5.5c0 .413.337.75.75.75h2.75c.17 0 .333.058.466.162l6.033 4.786V3.552L5.47 8.338c-.134.104-.298.162-.467.162h-2.75zm14.33 8.226c-.308 0-.596-.19-.705-.495-.14-.39.06-.818.45-.96 1.373-.495 2.296-1.81 2.296-3.27s-.923-2.774-2.296-3.27c-.39-.14-.592-.57-.45-.96.14-.39.57-.59.958-.45 1.967.707 3.288 2.59 3.288 4.68s-1.32 3.972-3.286 4.68c-.084.03-.17.046-.255.046z' />
|
||||
<path d='M17.82 20.135c-.306 0-.594-.19-.704-.495-.14-.39.06-.82.45-.96 2.802-1.014 4.684-3.698 4.684-6.68 0-2.98-1.883-5.665-4.684-6.68-.39-.14-.592-.57-.45-.96.14-.39.573-.59.96-.45C21.47 5.14 23.75 8.39 23.75 12c0 3.61-2.28 6.862-5.674 8.09-.084.03-.17.045-.255.045z' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default AudioIcon
|
@ -17,10 +17,10 @@ const BackIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 56.394531 25.789062 C 56.148438 25.75 55.898438 25.730469 55.652344 25.734375 L 13.324219 25.734375 L 14.246094 25.304688 C 15.148438 24.878906 15.96875 24.296875 16.671875 23.585938 L 28.539062 11.71875 C 30.105469 10.226562 30.367188 7.824219 29.164062 6.027344 C 27.761719 4.117188 25.078125 3.699219 23.164062 5.101562 C 23.007812 5.214844 22.863281 5.339844 22.722656 5.472656 L 1.257812 26.9375 C -0.417969 28.609375 -0.417969 31.328125 1.253906 33.007812 C 1.257812 33.007812 1.257812 33.007812 1.257812 33.011719 L 22.722656 54.476562 C 24.402344 56.148438 27.121094 56.144531 28.796875 54.464844 C 28.925781 54.335938 29.050781 54.195312 29.164062 54.046875 C 30.367188 52.25 30.105469 49.851562 28.539062 48.359375 L 16.691406 36.464844 C 16.0625 35.835938 15.339844 35.308594 14.546875 34.898438 L 13.257812 34.320312 L 55.414062 34.320312 C 57.609375 34.402344 59.53125 32.867188 59.945312 30.714844 C 60.324219 28.371094 58.734375 26.167969 56.394531 25.789062 Z M 56.394531 25.789062" />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 56.39 25.79 C 56.15 25.75 55.9 25.73 55.65 25.73 L 13.32 25.73 L 14.25 25.3 C 15.15 24.88 15.97 24.3 16.67 23.59 L 28.54 11.72 C 30.11 10.23 30.37 7.82 29.16 6 C 27.76 4.12 25 3.7 23.16 5.1 C 23 5.21 22.86 5.34 22.72 5.47 L 1.26 26.94 C -0.42 28.61 -0.42 31.33 1.25 33 C 1.26 33 1.26 33 1.26 33 L 22.72 54.48 C 24.4 56.15 27.12 56.14 28.8 54.46 C 28.93 54.34 29 54.2 29.16 54 C 30.37 52.25 30.11 49.85 28.54 48.36 L 16.69 36.46 C 16 35.84 15.34 35.31 14.55 34.9 L 13.26 34.32 L 55.41 34.32 C 57.61 34.4 59.53 32.87 59.95 30.71 C 60.32 28.37 58.73 26.17 56.39 25.79 Z M 56.39 25.79' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default BackIcon
|
@ -18,7 +18,7 @@ const CalendarIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 45.234375 7.871094 C 44.558594 7.191406 43.753906 6.851562 42.828125 6.851562 L 39.402344 6.851562 L 39.402344 4.28125 C 39.402344 3.105469 38.980469 2.097656 38.144531 1.257812 C 37.304688 0.417969 36.296875 0 35.117188 0 L 33.40625 0 C 32.226562 0 31.21875 0.417969 30.378906 1.257812 C 29.542969 2.097656 29.121094 3.105469 29.121094 4.28125 L 29.121094 6.851562 L 18.84375 6.851562 L 18.84375 4.28125 C 18.84375 3.105469 18.425781 2.097656 17.585938 1.257812 C 16.746094 0.417969 15.738281 0 14.5625 0 L 12.847656 0 C 11.671875 0 10.664062 0.417969 9.824219 1.257812 C 8.984375 2.097656 8.566406 3.105469 8.566406 4.28125 L 8.566406 6.851562 L 5.140625 6.851562 C 4.210938 6.851562 3.410156 7.191406 2.730469 7.871094 C 2.050781 8.546875 1.714844 9.351562 1.714844 10.277344 L 1.714844 44.539062 C 1.714844 45.46875 2.050781 46.269531 2.730469 46.949219 C 3.410156 47.625 4.210938 47.964844 5.140625 47.964844 L 42.824219 47.964844 C 43.753906 47.964844 44.558594 47.625 45.234375 46.949219 C 45.914062 46.269531 46.253906 45.46875 46.253906 44.539062 L 46.253906 10.277344 C 46.253906 9.351562 45.914062 8.546875 45.234375 7.871094 Z M 12.847656 44.539062 L 5.140625 44.539062 L 5.140625 36.832031 L 12.847656 36.832031 Z M 12.847656 35.117188 L 5.140625 35.117188 L 5.140625 26.554688 L 12.847656 26.554688 Z M 12.847656 24.839844 L 5.140625 24.839844 L 5.140625 17.128906 L 12.847656 17.128906 Z M 12.246094 12.59375 C 12.078125 12.425781 11.992188 12.222656 11.992188 11.992188 L 11.992188 4.28125 C 11.992188 4.050781 12.078125 3.851562 12.246094 3.679688 C 12.414062 3.511719 12.617188 3.425781 12.847656 3.425781 L 14.5625 3.425781 C 14.792969 3.425781 14.996094 3.511719 15.164062 3.679688 C 15.332031 3.851562 15.417969 4.050781 15.417969 4.28125 L 15.417969 11.992188 C 15.417969 12.222656 15.332031 12.425781 15.164062 12.59375 C 14.992188 12.761719 14.792969 12.847656 14.5625 12.847656 L 12.847656 12.847656 C 12.617188 12.847656 12.414062 12.761719 12.246094 12.59375 Z M 23.125 44.539062 L 14.5625 44.539062 L 14.5625 36.832031 L 23.125 36.832031 Z M 23.125 35.117188 L 14.5625 35.117188 L 14.5625 26.554688 L 23.125 26.554688 Z M 23.125 24.839844 L 14.5625 24.839844 L 14.5625 17.128906 L 23.125 17.128906 Z M 33.40625 44.539062 L 24.839844 44.539062 L 24.839844 36.832031 L 33.40625 36.832031 Z M 33.40625 35.117188 L 24.839844 35.117188 L 24.839844 26.554688 L 33.40625 26.554688 Z M 33.40625 24.839844 L 24.839844 24.839844 L 24.839844 17.128906 L 33.40625 17.128906 Z M 32.804688 12.59375 C 32.632812 12.425781 32.550781 12.222656 32.550781 11.992188 L 32.550781 4.28125 C 32.550781 4.050781 32.632812 3.851562 32.804688 3.679688 C 32.972656 3.511719 33.171875 3.425781 33.40625 3.425781 L 35.117188 3.425781 C 35.351562 3.425781 35.550781 3.511719 35.71875 3.679688 C 35.890625 3.851562 35.972656 4.050781 35.972656 4.28125 L 35.972656 11.992188 C 35.972656 12.222656 35.890625 12.425781 35.71875 12.59375 C 35.550781 12.761719 35.351562 12.847656 35.117188 12.847656 L 33.40625 12.847656 C 33.171875 12.847656 32.972656 12.761719 32.804688 12.59375 Z M 42.824219 44.539062 L 35.117188 44.539062 L 35.117188 36.832031 L 42.824219 36.832031 Z M 42.824219 35.117188 L 35.117188 35.117188 L 35.117188 26.554688 L 42.824219 26.554688 Z M 42.824219 24.839844 L 35.117188 24.839844 L 35.117188 17.128906 L 42.824219 17.128906 Z M 42.824219 24.839844" />
|
||||
<path d='M 45.23 7.87 C 44.56 7.19 43.75 6.85 42.83 6.85 L 39.4 6.85 L 39.4 4.28 C 39.4 3.11 38.98 2.1 38.14 1.26 C 37.3 0.42 36.3 0 35.12 0 L 33.41 0 C 32.23 0 31.22 0.42 30.38 1.26 C 29.54 2.1 29.12 3.11 29.12 4.28 L 29.12 6.85 L 18.84 6.85 L 18.84 4.28 C 18.84 3.11 18.43 2.1 17.59 1.26 C 16.75 0.42 15.74 0 14.56 0 L 12.85 0 C 11.67 0 10.66 0.42 9.82 1.26 C 8.98 2.1 8.57 3.11 8.57 4.28 L 8.57 6.85 L 5.14 6.85 C 4.21 6.85 3.41 7.19 2.73 7.87 C 2 8.55 1.71 9.35 1.71 10.28 L 1.71 44.54 C 1.71 45.47 2 46.27 2.73 46.95 C 3.41 47.63 4.21 47.96 5.14 47.96 L 42.82 47.96 C 43.75 47.96 44.56 47.63 45.23 46.95 C 45.91 46.27 46.25 45.47 46.25 44.54 L 46.25 10.28 C 46.25 9.35 45.91 8.55 45.23 7.87 Z M 12.85 44.54 L 5.14 44.54 L 5.14 36.83 L 12.85 36.83 Z M 12.85 35.12 L 5.14 35.12 L 5.14 26.55 L 12.85 26.55 Z M 12.85 24.84 L 5.14 24.84 L 5.14 17.13 L 12.85 17.13 Z M 12.25 12.59 C 12 12.43 11.99 12.22 11.99 11.99 L 11.99 4.28 C 11.99 4 12 3.85 12.25 3.68 C 12.41 3.51 12.62 3.43 12.85 3.43 L 14.56 3.43 C 14.79 3.43 15 3.51 15.16 3.68 C 15.33 3.85 15.42 4 15.42 4.28 L 15.42 11.99 C 15.42 12.22 15.33 12.43 15.16 12.59 C 14.99 12.76 14.79 12.85 14.56 12.85 L 12.85 12.85 C 12.62 12.85 12.41 12.76 12.25 12.59 Z M 23.13 44.54 L 14.56 44.54 L 14.56 36.83 L 23.13 36.83 Z M 23.13 35.12 L 14.56 35.12 L 14.56 26.55 L 23.13 26.55 Z M 23.13 24.84 L 14.56 24.84 L 14.56 17.13 L 23.13 17.13 Z M 33.41 44.54 L 24.84 44.54 L 24.84 36.83 L 33.41 36.83 Z M 33.41 35.12 L 24.84 35.12 L 24.84 26.55 L 33.41 26.55 Z M 33.41 24.84 L 24.84 24.84 L 24.84 17.13 L 33.41 17.13 Z M 32.8 12.59 C 32.63 12.43 32.55 12.22 32.55 11.99 L 32.55 4.28 C 32.55 4 32.63 3.85 32.8 3.68 C 32.97 3.51 33.17 3.43 33.41 3.43 L 35.12 3.43 C 35.35 3.43 35.55 3.51 35.72 3.68 C 35.89 3.85 35.97 4 35.97 4.28 L 35.97 11.99 C 35.97 12.22 35.89 12.43 35.72 12.59 C 35.55 12.76 35.35 12.85 35.12 12.85 L 33.41 12.85 C 33.17 12.85 32.97 12.76 32.8 12.59 Z M 42.82 44.54 L 35.12 44.54 L 35.12 36.83 L 42.82 36.83 Z M 42.82 35.12 L 35.12 35.12 L 35.12 26.55 L 42.82 26.55 Z M 42.82 24.84 L 35.12 24.84 L 35.12 17.13 L 42.82 17.13 Z M 42.82 24.84' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,8 +18,8 @@ const ChatIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 53.582 59.804 L 47.851 55.964 C 39.121 57.57 30.07 54.253 25.582 48.0625 C 23.726 45.453 22.75 42.496 22.75 39.5 C 22.75 30.195 32 22.625 43.375 22.625 C 47.765 22.625 51.972 23.738 55.542 25.847 C 60.839 29.019 64 34.121 64 39.5 C 64 44.527 61.218 49.328 56.5 52.527 L 56.5 58.25 C 56.5 59.761 54.812 60.636 53.582 59.804 Z M 53.582 59.804" />
|
||||
<path d="M 19 39.5 C 19 28.128 29.933 18.875 43.375 18.875 C 47.839 18.875 52.125 19.937 55.929 21.859 C 53.308 11.609 41.953 3.875 28.375 3.875 C 12.867 3.875 0 13.96 0 26.375 C 0 32.132 2.906 37.539 7.75 41.695 L 7.75 50.75 C 7.75 52.257 9.429 53.132 10.664 52.308 L 18.121 47.339 C 19.132 47.652344 20.175 47.859 21.218 48.074 C 19.773 45.375 19 42.464 19 39.5 Z M 19 39.5" />
|
||||
<path d='M 53.58 59.8 L 47.85 55.96 C 39.12 57.57 30 54.25 25.58 48 C 23.73 45.45 22.75 42.5 22.75 39.5 C 22.75 30.2 32 22.63 43.38 22.63 C 47.77 22.63 51.97 23.74 55.54 25.85 C 60.84 29 64 34.12 64 39.5 C 64 44.53 61.22 49.33 56.5 52.53 L 56.5 58.25 C 56.5 59.76 54.81 60.64 53.58 59.8 Z M 53.58 59.8' />
|
||||
<path d='M 19 39.5 C 19 28.13 29.93 18.88 43.38 18.88 C 47.84 18.88 52.13 19.94 55.93 21.86 C 53.31 11.61 41.95 3.88 28.38 3.88 C 12.87 3.88 0 13.96 0 26.38 C 0 32.13 2.91 37.54 7.75 41.7 L 7.75 50.75 C 7.75 52.26 9.43 53.13 10.66 52.31 L 18.12 47.34 C 19.13 47.65 20.18 47.86 21.22 48 C 19.77 45.38 19 42.46 19 39.5 Z M 19 39.5' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -5,22 +5,22 @@ const CircleIcon = ({
|
||||
viewBox = '0 0 48 48',
|
||||
title = '',
|
||||
}) => (
|
||||
<svg
|
||||
className={className}
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={viewBox}
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<circle cx='24' cy='24' r='20' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
<svg
|
||||
className={className}
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={viewBox}
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<circle cx='24' cy='24' r='20' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default CircleIcon
|
@ -17,10 +17,10 @@ const CloseIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 14.121094 12 L 23.558594 2.5625 C 24.144531 1.976562 24.144531 1.027344 23.558594 0.441406 C 22.972656 -0.144531 22.027344 -0.144531 21.4375 0.441406 L 12 9.878906 L 2.5625 0.441406 C 1.972656 -0.144531 1.027344 -0.144531 0.441406 0.441406 C -0.144531 1.027344 -0.144531 1.976562 0.441406 2.5625 L 9.878906 12 L 0.441406 21.4375 C -0.144531 22.023438 -0.144531 22.972656 0.441406 23.558594 C 0.730469 23.855469 1.117188 24 1.5 24 C 1.882812 24 2.269531 23.855469 2.5625 23.558594 L 12 14.121094 L 21.4375 23.558594 C 21.730469 23.855469 22.117188 24 22.5 24 C 22.882812 24 23.269531 23.855469 23.558594 23.558594 C 24.144531 22.972656 24.144531 22.023438 23.558594 21.4375 Z M 14.121094 12 "/>
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 14.12 12 L 23.56 2.56 C 24.14 1.98 24.14 1 23.56 0.44 C 22.97 -0.14 22 -0.14 21.44 0.44 L 12 9.88 L 2.56 0.44 C 1.97 -0.14 1 -0.14 0.44 0.44 C -0.14 1 -0.14 1.98 0.44 2.56 L 9.88 12 L 0.44 21.44 C -0.14 22 -0.14 22.97 0.44 23.56 C 0.73 23.86 1.12 24 1.5 24 C 1.88 24 2.27 23.86 2.56 23.56 L 12 14.12 L 21.44 23.56 C 21.73 23.86 22.12 24 22.5 24 C 22.88 24 23.27 23.86 23.56 23.56 C 24.14 22.97 24.14 22 23.56 21.44 Z M 14.12 12' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default CloseIcon
|
@ -18,7 +18,7 @@ const CommentIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 34.511719 47 C 34.085938 47 33.664062 46.863281 33.324219 46.582031 L 20.855469 36.339844 L 4.492188 36.339844 C 2.027344 36.339844 0 34.273438 0 31.75 L 0 4.539062 C 0 2.03125 2.027344 0.0273438 4.492188 0.0273438 L 43.492188 0.0273438 C 45.984375 0.0273438 48 2.03125 48 4.539062 L 48 31.75 C 48 34.273438 45.984375 36.339844 43.492188 36.339844 L 36.367188 36.339844 L 36.367188 45.125 C 36.367188 45.851562 35.960938 46.511719 35.304688 46.820312 C 35.050781 46.941406 34.785156 47 34.511719 47 Z M 4.492188 3.769531 C 4.097656 3.769531 3.773438 4.097656 3.773438 4.539062 L 3.773438 31.75 C 3.773438 32.199219 4.101562 32.597656 4.492188 32.597656 L 21.523438 32.597656 C 21.960938 32.597656 22.375 32.738281 22.707031 33.015625 L 32.625 41.160156 L 32.625 34.449219 C 32.625 33.417969 33.476562 32.597656 34.511719 32.597656 L 43.492188 32.597656 C 43.894531 32.597656 44.253906 32.183594 44.253906 31.75 L 44.253906 4.539062 C 44.253906 4.109375 43.902344 3.769531 43.492188 3.769531 Z M 4.492188 3.769531" />
|
||||
<path d='M 34.51 47 C 34 47 33.66 46.86 33.32 46.58 L 20.86 36.34 L 4.49 36.34 C 2 36.34 0 34.27 0 31.75 L 0 4.54 C 0 2 2 0 4.49 0 L 43.49 0 C 45.98 0 48 2 48 4.54 L 48 31.75 C 48 34.27 45.98 36.34 43.49 36.34 L 36.37 36.34 L 36.37 45.13 C 36.37 45.85 35.96 46.51 35.3 46.82 C 35 46.94 34.79 47 34.51 47 Z M 4.49 3.77 C 4.1 3.77 3.77 4.1 3.77 4.54 L 3.77 31.75 C 3.77 32.2 4.1 32.6 4.49 32.6 L 21.52 32.6 C 21.96 32.6 22.38 32.74 22.71 33 L 32.63 41.16 L 32.63 34.45 C 32.63 33.42 33.48 32.6 34.51 32.6 L 43.49 32.6 C 43.89 32.6 44.25 32.18 44.25 31.75 L 44.25 4.54 C 44.25 4.11 43.9 3.77 43.49 3.77 Z M 4.49 3.77' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,10 +18,10 @@ const DissenterIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 33.519531 4.734375 L 8.007812 4.734375 C 4.800781 4.734375 2.175781 7.359375 2.175781 10.566406 L 2.175781 53.5625 C 2.175781 56.769531 4.800781 59.390625 8.007812 59.390625 L 33.519531 59.390625 C 52.011719 59.390625 61.953125 46.503906 61.953125 32.0625 C 61.953125 17.625 52.550781 4.734375 33.519531 4.734375" />
|
||||
<path fill='#F6F6F9' d="M 41.761719 24.574219 L 17.757812 24.574219 C 16.925781 24.574219 16.257812 23.886719 16.257812 23.039062 C 16.257812 22.191406 16.925781 21.503906 17.757812 21.503906 L 41.761719 21.503906 C 42.59375 21.503906 43.265625 22.191406 43.265625 23.039062 C 43.265625 23.886719 42.59375 24.574219 41.761719 24.574219" />
|
||||
<path fill='#F6F6F9' d="M 41.761719 33.535156 L 17.757812 33.535156 C 16.925781 33.535156 16.257812 32.847656 16.257812 32 C 16.257812 31.152344 16.925781 30.464844 17.757812 30.464844 L 41.761719 30.464844 C 42.59375 30.464844 43.265625 31.152344 43.265625 32 C 43.265625 32.847656 42.59375 33.535156 41.761719 33.535156" />
|
||||
<path fill='#F6F6F9' d="M 17.765625 42.625 C 16.929688 42.625 16.257812 41.9375 16.257812 41.089844 C 16.257812 40.238281 16.929688 39.550781 17.765625 39.550781 L 33.820312 39.550781 C 34.652344 39.550781 35.328125 40.238281 35.328125 41.089844 C 35.328125 41.9375 34.652344 42.625 33.820312 42.625 Z M 17.765625 42.625" />
|
||||
<path d='M 33.52 4.73 L 8 4.73 C 4.8 4.73 2.18 7.36 2.18 10.57 L 2.18 53.56 C 2.18 56.77 4.8 59.39 8 59.39 L 33.52 59.39 C 52 59.39 61.95 46.5 61.95 32 C 61.95 17.63 52.55 4.73 33.52 4.73' />
|
||||
<path fill='#F6F6F9' d='M 41.76 24.57 L 17.76 24.57 C 16.93 24.57 16.26 23.89 16.26 23 C 16.26 22.19 16.93 21.5 17.76 21.5 L 41.76 21.5 C 42.59 21.5 43.27 22.19 43.27 23 C 43.27 23.89 42.59 24.57 41.76 24.57' />
|
||||
<path fill='#F6F6F9' d='M 41.76 33.54 L 17.76 33.54 C 16.93 33.54 16.26 32.85 16.26 32 C 16.26 31.15 16.93 30.46 17.76 30.46 L 41.76 30.46 C 42.59 30.46 43.27 31.15 43.27 32 C 43.27 32.85 42.59 33.54 41.76 33.54' />
|
||||
<path fill='#F6F6F9' d='M 17.77 42.63 C 16.93 42.63 16.26 41.94 16.26 41 C 16.26 40.24 16.93 39.55 17.77 39.55 L 33.82 39.55 C 34.65 39.55 35.33 40.24 35.33 41 C 35.33 41.94 34.65 42.63 33.82 42.63 Z M 17.77 42.63' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -17,12 +17,12 @@ const EllipsisIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<circle cx='5' cy='12' r='2' />
|
||||
<circle cx='12' cy='12' r='2' />
|
||||
<circle cx='19' cy='12' r='2' />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<circle cx='5' cy='12' r='2' />
|
||||
<circle cx='12' cy='12' r='2' />
|
||||
<circle cx='19' cy='12' r='2' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default EllipsisIcon
|
@ -18,7 +18,7 @@ const ErrorIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 54.667969 9.371094 C 42.179688 -3.121094 21.855469 -3.121094 9.367188 9.367188 C -3.125 21.855469 -3.121094 42.179688 9.367188 54.667969 C 21.855469 67.160156 42.179688 67.160156 54.667969 54.667969 C 67.15625 42.179688 67.15625 21.855469 54.667969 9.371094 Z M 51.175781 51.175781 C 40.613281 61.738281 23.425781 61.738281 12.863281 51.175781 C 2.296875 40.613281 2.296875 23.421875 12.863281 12.859375 C 23.425781 2.296875 40.609375 2.296875 51.175781 12.863281 C 61.738281 23.425781 61.738281 40.613281 51.175781 51.175781 Z M 46.5 44.679688 C 46.898438 45.597656 46.476562 46.664062 45.558594 47.058594 C 44.640625 47.460938 43.574219 47.035156 43.175781 46.117188 C 41.429688 42.078125 37.300781 39.46875 32.65625 39.46875 C 27.90625 39.46875 23.753906 42.078125 22.078125 46.113281 C 21.789062 46.808594 21.113281 47.230469 20.40625 47.230469 C 20.175781 47.230469 19.9375 47.183594 19.710938 47.089844 C 18.789062 46.707031 18.351562 45.648438 18.734375 44.722656 C 20.972656 39.332031 26.441406 35.847656 32.65625 35.847656 C 38.746094 35.847656 44.179688 39.3125 46.5 44.679688 Z M 20.070312 23.347656 C 20.070312 21.28125 21.746094 19.605469 23.8125 19.605469 C 25.878906 19.605469 27.558594 21.28125 27.558594 23.347656 C 27.558594 25.417969 25.878906 27.09375 23.8125 27.09375 C 21.746094 27.09375 20.070312 25.417969 20.070312 23.347656 Z M 37.046875 23.347656 C 37.046875 21.28125 38.722656 19.605469 40.789062 19.605469 C 42.859375 19.605469 44.535156 21.28125 44.535156 23.347656 C 44.535156 25.417969 42.859375 27.09375 40.789062 27.09375 C 38.722656 27.09375 37.046875 25.417969 37.046875 23.347656 Z M 37.046875 23.347656" />
|
||||
<path d='M 54.67 9.37 C 42.18 -3.12 21.86 -3.12 9.37 9.37 C -3.13 21.86 -3.12 42.18 9.37 54.67 C 21.86 67.16 42.18 67.16 54.67 54.67 C 67.16 42.18 67.16 21.86 54.67 9.37 Z M 51.18 51.18 C 40.61 61.74 23.43 61.74 12.86 51.18 C 2.3 40.61 2.3 23.42 12.86 12.86 C 23.43 2.3 40.61 2.3 51.18 12.86 C 61.74 23.43 61.74 40.61 51.18 51.18 Z M 46.5 44.68 C 46.9 45.6 46.48 46.66 45.56 47 C 44.64 47.46 43.57 47 43.18 46.12 C 41.43 42 37.3 39.47 32.66 39.47 C 27.91 39.47 23.75 42 22 46.11 C 21.79 46.81 21.11 47.23 20.41 47.23 C 20.18 47.23 19.94 47.18 19.71 47 C 18.79 46.71 18.35 45.65 18.73 44.72 C 20.97 39.33 26.44 35.85 32.66 35.85 C 38.75 35.85 44.18 39.31 46.5 44.68 Z M 20 23.35 C 20 21.28 21.75 19.61 23.81 19.61 C 25.88 19.61 27.56 21.28 27.56 23.35 C 27.56 25.42 25.88 27 23.81 27 C 21.75 27 20 25.42 20 23.35 Z M 37 23.35 C 37 21.28 38.72 19.61 40.79 19.61 C 42.86 19.61 44.54 21.28 44.54 23.35 C 44.54 25.42 42.86 27 40.79 27 C 38.72 27 37 25.42 37 23.35 Z M 37 23.35' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,10 +18,10 @@ const FullscreenIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d='M 10.910156 0 L 0.726562 0 C 0.324219 0 0 0.324219 0 0.726562 L 0 10.910156 C 0 11.3125 0.324219 11.636719 0.726562 11.636719 L 2.183594 11.636719 C 2.582031 11.636719 2.910156 11.3125 2.910156 10.910156 L 2.910156 2.910156 L 10.910156 2.910156 C 11.3125 2.910156 11.636719 2.582031 11.636719 2.183594 L 11.636719 0.726562 C 11.636719 0.324219 11.3125 0 10.910156 0 Z M 10.910156 0' />
|
||||
<path d='M 31.273438 0 L 21.089844 0 C 20.6875 0 20.363281 0.324219 20.363281 0.726562 L 20.363281 2.183594 C 20.363281 2.582031 20.6875 2.910156 21.089844 2.910156 L 29.089844 2.910156 L 29.089844 10.910156 C 29.089844 11.3125 29.417969 11.636719 29.816406 11.636719 L 31.273438 11.636719 C 31.675781 11.636719 32 11.3125 32 10.910156 L 32 0.726562 C 32 0.324219 31.675781 0 31.273438 0 Z M 31.273438 0' />
|
||||
<path d='M 31.273438 20.363281 L 29.816406 20.363281 C 29.417969 20.363281 29.089844 20.6875 29.089844 21.089844 L 29.089844 29.089844 L 21.089844 29.089844 C 20.6875 29.089844 20.363281 29.417969 20.363281 29.816406 L 20.363281 31.273438 C 20.363281 31.675781 20.6875 32 21.089844 32 L 31.273438 32 C 31.675781 32 32 31.675781 32 31.273438 L 32 21.089844 C 32 20.6875 31.675781 20.363281 31.273438 20.363281 Z M 31.273438 20.363281' />
|
||||
<path d='M 10.910156 29.089844 L 2.910156 29.089844 L 2.910156 21.089844 C 2.910156 20.6875 2.582031 20.363281 2.183594 20.363281 L 0.726562 20.363281 C 0.324219 20.363281 0 20.6875 0 21.089844 L 0 31.273438 C 0 31.675781 0.324219 32 0.726562 32 L 10.910156 32 C 11.3125 32 11.636719 31.675781 11.636719 31.273438 L 11.636719 29.816406 C 11.636719 29.417969 11.3125 29.089844 10.910156 29.089844 Z M 10.910156 29.089844' />
|
||||
<path d='M 10.91 0 L 0.73 0 C 0.32 0 0 0.32 0 0.73 L 0 10.91 C 0 11.31 0.32 11.64 0.73 11.64 L 2.18 11.64 C 2.58 11.64 2.91 11.31 2.91 10.91 L 2.91 2.91 L 10.91 2.91 C 11.31 2.91 11.64 2.58 11.64 2.18 L 11.64 0.73 C 11.64 0.32 11.31 0 10.91 0 Z M 10.91 0' />
|
||||
<path d='M 31.27 0 L 21 0 C 20.69 0 20.36 0.32 20.36 0.73 L 20.36 2.18 C 20.36 2.58 20.69 2.91 21 2.91 L 29 2.91 L 29 10.91 C 29 11.31 29.42 11.64 29.82 11.64 L 31.27 11.64 C 31.68 11.64 32 11.31 32 10.91 L 32 0.73 C 32 0.32 31.68 0 31.27 0 Z M 31.27 0' />
|
||||
<path d='M 31.27 20.36 L 29.82 20.36 C 29.42 20.36 29 20.69 29 21 L 29 29 L 21 29 C 20.69 29 20.36 29.42 20.36 29.82 L 20.36 31.27 C 20.36 31.68 20.69 32 21 32 L 31.27 32 C 31.68 32 32 31.68 32 31.27 L 32 21 C 32 20.69 31.68 20.36 31.27 20.36 Z M 31.27 20.36' />
|
||||
<path d='M 10.91 29 L 2.91 29 L 2.91 21 C 2.91 20.69 2.58 20.36 2.18 20.36 L 0.73 20.36 C 0.32 20.36 0 20.69 0 21 L 0 31.27 C 0 31.68 0.32 32 0.73 32 L 10.91 32 C 11.31 32 11.64 31.68 11.64 31.27 L 11.64 29.82 C 11.64 29.42 11.31 29 10.91 29 Z M 10.91 29' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -20,7 +20,6 @@ const GlobeIcon = ({
|
||||
<g>
|
||||
<circle fill='none' stroke='#616770' strokeWidth='1px' cx='14' cy='14' r='13.5' />
|
||||
<path fill='#616770' d='M 16 5 L 18 4 L 20 5 L 22 5 L 23 4 C 24 5 25 6 25 7 L 25 7 L 22 8 L 20 7 L 19 6 L 16 6 L 14 7 L 15 11 L 18 12 L 20 12 L 21 13 L 21 14 L 22 16 L 23 18 L 23 20 L 26.4 21 C 20 27 12 29 6 25 C 1 21 0 14 1 8 L 2 11 L 3 12 L 5 13 L 4 14 L 4 15 L 5 17 L 7 17 L 7 22 L 8 24 L 9 25 L 9 22 L 11 21 L 11 20 L 13 18 L 14 15 L 12 15 L 10 13 L 7 13 L 6 11 L 5 13 L 5 11 L 4 10 L 4 8 L 7 8 L 9 7 L 11 4 L 12 4 L 13 2 L 10 2 L 10 1 C 12 0 16 0 18 1 L 18 2 L 16 2 L 15 4 Z M 16 5' />
|
||||
{/*<path fill='#616770' d='M 14 27 C 21 28 28 21 28 14 C 28 6 21 0 14 0 C 8 0 3 3 1 8 L 0 8 L 1 8 C -1 15 1 24 8 26 C 10 27 12 28 14 27 Z M 24 21 L 24 20 L 24 18 C 24 18 24 18 24 18 L 22 14 L 22 13 C 22 12 22 12 22 12 L 20 11 C 20 11 20 11 20 11 L 18 12 L 15 10 L 15 8 L 16 7 L 18 7 L 19 8 C 19 8 19 8 19 8 L 22 8 C 22 8 22 8 23 8 L 25 7 C 27 12 27 17 24 21 Z M 23 4 L 22 5 L 20 4 L 18 4 C 18 4 18 4 18 4 L 16 4 L 16 4 L 16 3 L 18 3 C 18 3 18 3 18 3 L 20 2 C 21 2 22 3 23 4 Z M 8 1 L 10 2 C 10 2 10 2 10 2 L 12 3 L 12 3 L 11 4 C 10 4 10 4 10 4 L 9 6 L 7 7 L 4 8 C 3 8 3 8 3 8 L 3 10 C 3 10 3 10 3 10 L 4 11 L 4 12 L 2 10 L 2 8 C 3 5 5 3 8 1 Z M 7 17 L 5 16 L 4 15 L 4 14 L 6 12 L 7 13 C 7 13 7 14 7 14 L 10 14 L 11 16 C 11 16 11 16 12 16 L 13 16 L 13 17 L 11 19 C 11 19 11 19 11 20 L 11 21 L 9 22 C 9 22 9 22 9 22 L 9 24 L 8 24 L 7 22 L 7 17 C 7 17 7 17 7 17 Z M 1 10 L 1 11 C 1 11 1 11 2 11 L 4 13 L 3 13 C 3 13 3 13 3 14 L 3 15 C 3 15 3 15 3 15 L 4 17 C 4 17 4 17 5 17 L 7 18 L 7 22 C 7 22 7 22 7 22 L 7 24 C 8 25 8 25 8 25 L 9 25 C 9 25 9 25 9 25 C 10 25 10 25 10 25 L 10 23 L 11 21 C 12 21 12 21 12 21 L 12 20 L 13 18 C 13 18 13 18 13 18 L 14 15 C 14 15 14 15 14 15 C 14 15 14 15 14 15 L 12 15 L 11 13 C 11 13 10 13 10 13 L 7 13 L 6 11 C 6 11 6 11 6 11 C 6 11 6 11 6 11 L 5 11 L 5 11 C 5 11 5 10 5 10 L 4 10 L 4 9 L 7 8 C 7 8 7 8 7 8 L 10 7 C 10 7 10 7 10 7 L 11 5 L 12 4 C 12 4 12 4 13 4 L 13 2 C 13 2 13 2 13 2 C 13 2 13 2 13 2 L 10 1 L 9 1 C 12 0 16 0 18 1 L 18 2 L 16 2 C 16 2 15 2 15 2 L 14 4 C 14 4 14 4 15 5 C 15 5 15 5 15 5 L 16 5 C 16 5 16 5 16 5 L 18 5 L 19 5 C 19 5 19 5 19 5 L 22 6 C 22 6 22 6 22 5 L 23 5 C 24 5 24 6 25 7 L 22 7 L 20 7 L 19 6 C 19 6 19 6 19 6 L 16 6 C 16 6 16 6 16 6 L 14 7 C 14 7 14 7 14 8 L 14 11 C 14 11 15 11 15 11 L 18 13 C 18 13 18 13 18 13 L 20 12 L 21 13 L 21 14 C 21 15 21 15 21 15 L 23 18 L 23 20 C 23 20 23 20 23 20 L 24 21 C 20 27 11 28 6 24 C 1 21 0 15 1 10 Z M 1 10' /> */}
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,12 +18,12 @@ const GroupIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path className='header-nav__item__icon__path' d="M 41 25 L 37 25 C 37 26 37 27 37 28 L 37 42 C 37 43 37 43 37 44 L 43 44 C 46 44 48 42 48 40 L 48 32 C 48 28 44 25 41 25 Z M 41 25"/>
|
||||
<path className='header-nav__item__icon__path' d="M 10 28 C 10 27 10 26 10 25 L 6 25 C 3 25 0 28 0 32 L 0 40 C 0 42 1 44 4 44 L 10 44 C 10 43 10 43 10 42 Z M 10 28"/>
|
||||
<path className='header-nav__item__icon__path' d="M 28 22 L 19 22 C 15 22 12 25 12 28 L 12 42 C 12 43 13 44 14 44 L 33 44 C 34 44 35 43 35 42 L 35 28 C 35 25 32 22 28 22 Z M 28 22"/>
|
||||
<circle className='header-nav__item__icon__path' cx="8" cy="15" r="6"/>
|
||||
<circle className='header-nav__item__icon__path' cx="24" cy="11" r="9"/>
|
||||
<circle className='header-nav__item__icon__path' cx="40" cy="15" r="6"/>
|
||||
<path d='M 41 25 L 37 25 C 37 26 37 27 37 28 L 37 42 C 37 43 37 43 37 44 L 43 44 C 46 44 48 42 48 40 L 48 32 C 48 28 44 25 41 25 Z M 41 25'/>
|
||||
<path d='M 10 28 C 10 27 10 26 10 25 L 6 25 C 3 25 0 28 0 32 L 0 40 C 0 42 1 44 4 44 L 10 44 C 10 43 10 43 10 42 Z M 10 28'/>
|
||||
<path d='M 28 22 L 19 22 C 15 22 12 25 12 28 L 12 42 C 12 43 13 44 14 44 L 33 44 C 34 44 35 43 35 42 L 35 28 C 35 25 32 22 28 22 Z M 28 22'/>
|
||||
<circle cx='8' cy='15' r='6'/>
|
||||
<circle cx='24' cy='11' r='9'/>
|
||||
<circle cx='40' cy='15' r='6'/>
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,7 +18,7 @@ const HappyIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d='M 54.667969 9.371094 C 42.179688 -3.121094 21.855469 -3.121094 9.367188 9.367188 C -3.125 21.855469 -3.121094 42.179688 9.367188 54.667969 C 21.855469 67.160156 42.179688 67.160156 54.667969 54.667969 C 67.15625 42.179688 67.15625 21.855469 54.667969 9.371094 Z M 51.175781 51.175781 C 40.613281 61.738281 23.425781 61.738281 12.863281 51.175781 C 2.296875 40.613281 2.296875 23.421875 12.863281 12.859375 C 23.425781 2.296875 40.609375 2.296875 51.175781 12.863281 C 61.738281 23.425781 61.738281 40.613281 51.175781 51.175781 Z M 20.070312 23.347656 C 20.070312 21.28125 21.746094 19.605469 23.8125 19.605469 C 25.878906 19.605469 27.558594 21.28125 27.558594 23.347656 C 27.558594 25.417969 25.878906 27.09375 23.8125 27.09375 C 21.746094 27.09375 20.070312 25.417969 20.070312 23.347656 Z M 37.046875 23.347656 C 37.046875 21.28125 38.722656 19.605469 40.789062 19.605469 C 42.859375 19.605469 44.535156 21.28125 44.535156 23.347656 C 44.535156 25.417969 42.859375 27.09375 40.789062 27.09375 C 38.722656 27.09375 37.046875 25.417969 37.046875 23.347656 Z M 45.898438 38.683594 C 43.578125 44.046875 38.144531 47.515625 32.054688 47.515625 C 25.835938 47.515625 20.367188 44.03125 18.128906 38.636719 C 17.746094 37.714844 18.183594 36.65625 19.105469 36.269531 C 19.335938 36.175781 19.570312 36.132812 19.800781 36.132812 C 20.511719 36.132812 21.183594 36.550781 21.472656 37.25 C 23.152344 41.285156 27.304688 43.894531 32.054688 43.894531 C 36.699219 43.894531 40.824219 41.285156 42.570312 37.246094 C 42.96875 36.328125 44.035156 35.902344 44.953125 36.300781 C 45.871094 36.699219 46.292969 37.765625 45.898438 38.683594 Z M 45.898438 38.683594' />
|
||||
<path d='M 54.67 9.37 C 42.18 -3.12 21.86 -3.12 9.37 9.37 C -3.13 21.86 -3.12 42.18 9.37 54.67 C 21.86 67.16 42.18 67.16 54.67 54.67 C 67.16 42.18 67.16 21.86 54.67 9.37 Z M 51.18 51.18 C 40.61 61.74 23.43 61.74 12.86 51.18 C 2.3 40.61 2.3 23.42 12.86 12.86 C 23.43 2.3 40.61 2.3 51.18 12.86 C 61.74 23.43 61.74 40.61 51.18 51.18 Z M 20 23.35 C 20 21.28 21.75 19.61 23.81 19.61 C 25.88 19.61 27.56 21.28 27.56 23.35 C 27.56 25.42 25.88 27 23.81 27 C 21.75 27 20 25.42 20 23.35 Z M 37 23.35 C 37 21.28 38.72 19.61 40.79 19.61 C 42.86 19.61 44.54 21.28 44.54 23.35 C 44.54 25.42 42.86 27 40.79 27 C 38.72 27 37 25.42 37 23.35 Z M 45.90 38.68 C 43.58 44 38.14 47.52 32 47.52 C 25.84 47.52 20.37 44 18.13 38.64 C 17.75 37.71 18.18 36.66 19.11 36.27 C 19.34 36.18 19.57 36.13 19.80 36.13 C 20.51 36.13 21.18 36.55 21.47 37.25 C 23.15 41.29 27.3 43.89 32 43.89 C 36.7 43.89 40.82 41.29 42.57 37.25 C 42.97 36.33 44 35.9 44.95 36.3 C 45.87 36.7 46.29 37.77 45.9 38.68 Z M 45.9 38.68' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,7 +18,7 @@ const HomeIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path className='' d='M 47.238281 21.695312 L 25.039062 0.417969 C 24.457031 -0.140625 23.542969 -0.140625 22.960938 0.417969 L 0.738281 21.71875 C 0.269531 22.1875 0 22.835938 0 23.5 C 0 24.878906 1.121094 26 2.5 26 L 6 26 L 6 45 C 6 46.65625 7.34375 48 9 48 L 17.5 48 C 18.328125 48 19 47.328125 19 46.5 L 19 33.5 C 19 33.226562 19.222656 33 19.5 33 L 28.5 33 C 28.773438 33 29 33.226562 29 33.5 L 29 46.5 C 29 47.328125 29.671875 48 30.5 48 L 39 48 C 40.65625 48 42 46.65625 42 45 L 42 26 L 45.5 26 C 46.878906 26 48 24.878906 48 23.5 C 48 22.835938 47.730469 22.1875 47.238281 21.695312 Z M 47.238281 21.695312' />
|
||||
<path d='M 47.24 21.7 L 25 0.42 C 24.46 -0.14 23.54 -0.14 22.96 0.42 L 0.74 21.72 C 0.27 22.19 0 22.84 0 23.5 C 0 24.88 1.12 26 2.5 26 L 6 26 L 6 45 C 6 46.66 7.34 48 9 48 L 17.5 48 C 18.33 48 19 47.33 19 46.5 L 19 33.5 C 19 33.23 19.22 33 19.5 33 L 28.5 33 C 28.77 33 29 33.23 29 33.5 L 29 46.5 C 29 47.33 29.67 48 30.5 48 L 39 48 C 40.66 48 42 46.66 42 45 L 42 26 L 45.5 26 C 46.88 26 48 24.88 48 23.5 C 48 22.84 47.73 22.19 47.24 21.7 Z M 47.24 21.7' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,7 +18,7 @@ const LikeIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d='M 44.75 26.832031 C 45.691406 25.410156 46.164062 23.839844 46.164062 22.128906 C 46.164062 20.148438 45.433594 18.425781 43.972656 16.964844 C 42.507812 15.503906 40.777344 14.773438 38.777344 14.773438 L 33.699219 14.773438 C 34.621094 12.867188 35.085938 11.019531 35.085938 9.234375 C 35.085938 6.980469 34.746094 5.195312 34.074219 3.867188 C 33.402344 2.539062 32.421875 1.5625 31.132812 0.9375 C 29.84375 0.3125 28.390625 0 26.773438 0 C 25.792969 0 24.929688 0.355469 24.179688 1.066406 C 23.351562 1.875 22.753906 2.914062 22.390625 4.183594 C 22.023438 5.453125 21.730469 6.667969 21.507812 7.832031 C 21.289062 8.996094 20.945312 9.820312 20.484375 10.300781 C 19.542969 11.320312 18.515625 12.550781 17.398438 13.992188 C 15.457031 16.511719 14.136719 18.003906 13.445312 18.464844 L 5.539062 18.464844 C 4.519531 18.464844 3.652344 18.828125 2.929688 19.546875 C 2.207031 20.269531 1.847656 21.140625 1.847656 22.160156 L 1.847656 40.625 C 1.847656 41.644531 2.207031 42.511719 2.929688 43.234375 C 3.652344 43.957031 4.519531 44.316406 5.539062 44.316406 L 13.847656 44.316406 C 14.273438 44.316406 15.597656 44.703125 17.832031 45.46875 C 20.195312 46.296875 22.277344 46.925781 24.078125 47.359375 C 25.875 47.792969 27.699219 48.011719 29.542969 48.011719 L 33.265625 48.011719 C 35.976562 48.011719 38.160156 47.234375 39.816406 45.6875 C 41.46875 44.136719 42.285156 42.027344 42.269531 39.355469 C 43.421875 37.871094 44 36.160156 44 34.21875 C 44 33.796875 43.96875 33.382812 43.914062 32.976562 C 44.644531 31.691406 45.007812 30.304688 45.007812 28.824219 C 45.007812 28.132812 44.921875 27.46875 44.75 26.832031 Z M 8.683594 40.074219 C 8.320312 40.441406 7.886719 40.625 7.386719 40.625 C 6.886719 40.625 6.453125 40.441406 6.089844 40.074219 C 5.722656 39.710938 5.539062 39.277344 5.539062 38.777344 C 5.539062 38.277344 5.722656 37.84375 6.089844 37.480469 C 6.453125 37.113281 6.886719 36.929688 7.386719 36.929688 C 7.886719 36.929688 8.320312 37.113281 8.683594 37.480469 C 9.050781 37.84375 9.234375 38.277344 9.234375 38.777344 C 9.234375 39.277344 9.050781 39.710938 8.683594 40.074219 Z M 41.851562 24.496094 C 41.4375 25.382812 40.921875 25.832031 40.308594 25.851562 C 40.59375 26.179688 40.835938 26.636719 41.027344 27.222656 C 41.21875 27.808594 41.316406 28.34375 41.316406 28.824219 C 41.316406 30.152344 40.808594 31.296875 39.789062 32.257812 C 40.132812 32.871094 40.308594 33.535156 40.308594 34.246094 C 40.308594 34.960938 40.140625 35.667969 39.800781 36.367188 C 39.464844 37.070312 39.007812 37.574219 38.433594 37.882812 C 38.527344 38.460938 38.574219 38.996094 38.574219 39.496094 C 38.574219 42.710938 36.730469 44.316406 33.035156 44.316406 L 29.546875 44.316406 C 27.027344 44.316406 23.738281 43.613281 19.679688 42.210938 C 19.582031 42.171875 19.304688 42.070312 18.839844 41.90625 C 18.378906 41.742188 18.039062 41.625 17.816406 41.546875 C 17.59375 41.46875 17.257812 41.359375 16.808594 41.214844 C 16.355469 41.070312 15.988281 40.964844 15.710938 40.898438 C 15.433594 40.828125 15.113281 40.765625 14.757812 40.710938 C 14.402344 40.652344 14.101562 40.625 13.851562 40.625 L 12.925781 40.625 L 12.925781 22.160156 L 13.851562 22.160156 C 14.15625 22.160156 14.5 22.074219 14.875 21.898438 C 15.25 21.726562 15.632812 21.46875 16.027344 21.121094 C 16.421875 20.773438 16.792969 20.433594 17.140625 20.097656 C 17.484375 19.757812 17.871094 19.335938 18.292969 18.828125 C 18.714844 18.316406 19.046875 17.910156 19.289062 17.601562 C 19.527344 17.292969 19.832031 16.898438 20.199219 16.417969 C 20.5625 15.9375 20.785156 15.648438 20.859375 15.550781 C 21.917969 14.246094 22.660156 13.371094 23.082031 12.925781 C 23.871094 12.101562 24.441406 11.046875 24.800781 9.769531 C 25.15625 8.488281 25.449219 7.28125 25.679688 6.148438 C 25.910156 5.011719 26.273438 4.195312 26.777344 3.695312 C 28.621094 3.695312 29.851562 4.144531 30.46875 5.050781 C 31.082031 5.953125 31.390625 7.347656 31.390625 9.234375 C 31.390625 10.367188 30.929688 11.910156 30.007812 13.863281 C 29.082031 15.816406 28.621094 17.351562 28.621094 18.464844 L 38.777344 18.464844 C 39.738281 18.464844 40.59375 18.835938 41.34375 19.578125 C 42.09375 20.316406 42.472656 21.179688 42.472656 22.160156 C 42.472656 22.832031 42.265625 23.609375 41.851562 24.496094 Z M 41.851562 24.496094' />
|
||||
<path d='M 44.75 26.83 C 45.69 25.41 46.16 23.84 46.16 22.13 C 46.16 20.15 45.43 18.43 43.97 16.96 C 42.51 15.5 40.78 14.77 38.78 14.77 L 33.7 14.77 C 34.62 12.87 35 11 35 9.23 C 35 6.98 34.75 5.2 34 3.87 C 33.4 2.54 32.42 1.56 31.13 0.94 C 29.84 0.31 28.39 0 26.77 0 C 25.79 0 24.93 0.36 24.18 1 C 23.35 1.88 22.75 2.91 22.39 4.18 C 22 5.45 21.73 6.67 21.51 7.83 C 21.29 9 20.95 9.82 20.48 10.3 C 19.54 11.32 18.52 12.55 17.4 13.99 C 15.46 16.51 14.14 18 13.45 18.46 L 5.54 18.46 C 4.52 18.46 3.65 18.83 2.93 19.55 C 2.21 20.27 1.85 21.14 1.85 22.16 L 1.85 40.63 C 1.85 41.64 2.21 42.51 2.93 43.23 C 3.65 43.96 4.52 44.32 5.54 44.32 L 13.85 44.32 C 14.27 44.32 15.6 44.7 17.83 45.47 C 20.2 46.3 22.28 46.93 24 47.36 C 25.88 47.79 27.7 48 29.54 48 L 33.27 48 C 35.98 48 38.16 47.23 39.82 45.69 C 41.47 44.14 42.29 42 42.27 39.36 C 43.42 37.87 44 36.16 44 34.22 C 44 33.8 43.97 33.38 43.91 32.98 C 44.64 31.69 45 30.3 45 28.82 C 45 28.13 44.92 27.47 44.75 26.83 Z M 8.68 40 C 8.32 40.44 7.89 40.63 7.39 40.63 C 6.89 40.63 6.45 40.44 6 40 C 5.72 39.71 5.54 39.28 5.54 38.78 C 5.54 38.28 5.72 37.84 6 37.48 C 6.45 37.11 6.89 36.93 7.39 36.93 C 7.89 36.93 8.32 37.11 8.68 37.48 C 9 37.84 9.23 38.28 9.23 38.78 C 9.23 39.28 9 39.71 8.68 40 Z M 41.85 24.5 C 41.44 25.38 40.92 25.83 40.31 25.85 C 40.59 26.18 40.84 26.64 41 27.22 C 41.22 27.81 41.32 28.34 41.32 28.82 C 41.32 30.15 40.81 31.3 39.79 32.26 C 40.13 32.87 40.31 33.54 40.31 34.25 C 40.31 34.96 40.14 35.67 39.8 36.37 C 39.46 37 39 37.57 38.43 37.88 C 38.53 38.46 38.57 39 38.57 39.5 C 38.57 42.71 36.73 44.32 33 44.32 L 29.55 44.32 C 27 44.32 23.74 43.61 19.68 42.21 C 19.58 42.17 19.3 42 18.84 41.91 C 18.38 41.74 18 41.63 17.82 41.55 C 17.59 41.47 17.26 41.36 16.81 41.21 C 16.36 41 15.99 40.96 15.71 40.9 C 15.43 40.83 15.11 40.77 14.76 40.71 C 14.4 40.65 14.1 40.63 13.85 40.63 L 12.93 40.63 L 12.93 22.16 L 13.85 22.16 C 14.16 22.16 14.5 22 14.88 21.9 C 15.25 21.73 15.63 21.47 16 21.12 C 16.42 20.77 16.79 20.43 17.14 20.1 C 17.48 19.76 17.87 19.34 18.29 18.83 C 18.71 18.32 19 17.91 19.29 17.6 C 19.53 17.29 19.83 16.9 20.2 16.42 C 20.56 15.94 20.79 15.65 20.86 15.55 C 21.92 14.25 22.66 13.37 23 12.93 C 23.87 12.1 24.44 11 24.8 9.77 C 25.16 8.49 25.45 7.28 25.68 6.15 C 25.91 5 26.27 4.2 26.78 3.7 C 28.62 3.7 29.85 4.14 30.47 5 C 31 5.95 31.39 7.35 31.39 9.23 C 31.39 10.37 30.93 11.91 30 13.86 C 29 15.82 28.62 17.35 28.62 18.46 L 38.78 18.46 C 39.74 18.46 40.59 18.84 41.34 19.58 C 42 20.32 42.47 21.18 42.47 22.16 C 42.47 22.83 42.27 23.61 41.85 24.5 Z M 41.85 24.5' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,8 +18,8 @@ const LinkIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 26.53125 48.78125 L 18.992188 56.320312 C 15.863281 59.449219 10.800781 59.449219 7.675781 56.324219 C 4.554688 53.199219 4.554688 48.132812 7.675781 45.011719 L 22.761719 29.925781 C 25.886719 26.800781 30.949219 26.800781 34.074219 29.925781 C 35.117188 30.964844 36.804688 30.964844 37.84375 29.925781 C 38.886719 28.882812 38.886719 27.195312 37.84375 26.152344 C 32.636719 20.945312 24.199219 20.945312 18.992188 26.152344 L 3.90625 41.238281 C -1.300781 46.445312 -1.300781 54.886719 3.90625 60.09375 C 9.113281 65.300781 17.554688 65.300781 22.761719 60.09375 L 30.304688 52.550781 C 31.34375 51.511719 31.34375 49.820312 30.304688 48.78125 C 29.261719 47.738281 27.574219 47.738281 26.53125 48.78125 Z M 26.53125 48.78125" />
|
||||
<path d="M 60.09375 3.90625 C 54.886719 -1.300781 46.445312 -1.300781 41.238281 3.90625 L 32.1875 12.953125 C 31.148438 13.996094 31.148438 15.683594 32.1875 16.722656 C 33.230469 17.765625 34.917969 17.765625 35.960938 16.722656 L 45.007812 7.675781 C 48.132812 4.550781 53.199219 4.550781 56.324219 7.675781 C 59.445312 10.800781 59.445312 15.863281 56.324219 18.988281 L 39.730469 35.578125 C 36.605469 38.703125 31.542969 38.703125 28.417969 35.578125 C 27.378906 34.539062 25.691406 34.539062 24.648438 35.578125 C 23.605469 36.621094 23.605469 38.308594 24.648438 39.351562 C 29.855469 44.558594 38.296875 44.558594 43.503906 39.351562 L 60.09375 22.757812 C 65.300781 17.550781 65.300781 9.113281 60.09375 3.90625 Z M 60.09375 3.90625" />
|
||||
<path d='M 26.53 48.78 L 18.99 56.32 C 15.86 59.45 10.8 59.45 7.68 56.32 C 4.55 53.2 4.55 48.13 7.68 45 L 22.76 29.93 C 25.89 26.8 30.95 26.8 34 29.93 C 35.12 30.96 36.8 30.96 37.84 29.93 C 38.89 28.88 38.89 27.2 37.84 26.15 C 32.64 20.95 24.2 20.95 18.99 26.15 L 3.91 41.24 C -1.3 46.45 -1.3 54.89 3.91 60 C 9.11 65.3 17.55 65.3 22.76 60 L 30.3 52.55 C 31.34 51.51 31.34 49.82 30.3 48.78 C 29.26 47.74 27.57 47.74 26.53 48.78 Z M 26.53 48.78' />
|
||||
<path d='M 60 3.91 C 54.89 -1.3 46.45 -1.3 41.24 3.91 L 32.19 12.95 C 31.15 14 31.15 15.68 32.19 16.72 C 33.23 17.77 34.92 17.77 35.96 16.72 L 45 7.68 C 48.13 4.55 53.2 4.55 56.32 7.68 C 59.45 10.8 59.45 15.86 56.32 18.99 L 39.73 35.58 C 36.61 38.7 31.54 38.7 28.42 35.58 C 27.38 34.54 25.69 34.54 24.65 35.58 C 23.61 36.62 23.61 38.31 24.65 39.35 C 29.86 44.56 38.3 44.56 43.5 39.35 L 60 22.76 C 65.3 17.55 65.3 9.11 60 3.91 Z M 60 3.91' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,7 +18,7 @@ const ListIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 57.144 0 L 6.855 0 C 3.07 0 0 3.023 0 6.75 L 0 56.25 C 0 59.976 3.07 63 6.855 63 L 57.144 63 C 60.929 63 64 59.976562 64 56.25 L 64 6.75 C 64 3.023438 60.929688 0 57.144531 0 Z M 20.570312 49.5 L 13.714844 49.5 C 12.453125 49.5 11.429688 48.492188 11.429688 47.25 C 11.429688 46.007812 12.453125 45 13.714844 45 L 20.570312 45 C 21.832031 45 22.855469 46.007812 22.855469 47.25 C 22.855469 48.492188 21.832031 49.5 20.570312 49.5 Z M 20.570312 33.75 L 13.714844 33.75 C 12.453125 33.75 11.429688 32.742188 11.429688 31.5 C 11.429688 30.257812 12.453125 29.25 13.714844 29.25 L 20.570312 29.25 C 21.832031 29.25 22.855469 30.257812 22.855469 31.5 C 22.855469 32.742188 21.832031 33.75 20.570312 33.75 Z M 20.570312 18 L 13.714844 18 C 12.453125 18 11.429688 16.992188 11.429688 15.75 C 11.429688 14.507812 12.453125 13.5 13.714844 13.5 L 20.570312 13.5 C 21.832031 13.5 22.855469 14.507812 22.855469 15.75 C 22.855469 16.992188 21.832031 18 20.570312 18 Z M 50.285156 49.5 L 29.714844 49.5 C 28.453125 49.5 27.429688 48.492188 27.429688 47.25 C 27.429688 46.007812 28.453125 45 29.714844 45 L 50.285156 45 C 51.546875 45 52.570312 46.007812 52.570312 47.25 C 52.570312 48.492188 51.546875 49.5 50.285156 49.5 Z M 50.285156 33.75 L 29.714844 33.75 C 28.453125 33.75 27.429688 32.742188 27.429688 31.5 C 27.429688 30.257812 28.453125 29.25 29.714844 29.25 L 50.285156 29.25 C 51.546875 29.25 52.570312 30.257812 52.570312 31.5 C 52.570312 32.742188 51.546875 33.75 50.285156 33.75 Z M 50.285156 18 L 29.714844 18 C 28.453125 18 27.429688 16.992188 27.429688 15.75 C 27.429688 14.507812 28.453125 13.5 29.714844 13.5 L 50.285156 13.5 C 51.546875 13.5 52.570312 14.507812 52.570312 15.75 C 52.570312 16.992188 51.546875 18 50.285156 18 Z M 50.285156 18 "/>
|
||||
<path d='M 57.14 0 L 6.86 0 C 3 0 0 3 0 6.75 L 0 56.25 C 0 59.98 3 63 6.86 63 L 57.14 63 C 60.93 63 64 59.98 64 56.25 L 64 6.75 C 64 3 60.93 0 57.14 0 Z M 20.57 49.5 L 13.71 49.5 C 12.45 49.5 11.43 48.49 11.43 47.25 C 11.43 46 12.45 45 13.71 45 L 20.57 45 C 21.83 45 22.86 46 22.86 47.25 C 22.86 48.49 21.83 49.5 20.57 49.5 Z M 20.57 33.75 L 13.71 33.75 C 12.45 33.75 11.43 32.74 11.43 31.5 C 11.43 30.26 12.45 29.25 13.71 29.25 L 20.57 29.25 C 21.83 29.25 22.86 30.26 22.86 31.5 C 22.86 32.74 21.83 33.75 20.57 33.75 Z M 20.57 18 L 13.71 18 C 12.45 18 11.43 16.99 11.43 15.75 C 11.43 14.51 12.45 13.5 13.71 13.5 L 20.57 13.5 C 21.83 13.5 22.86 14.51 22.86 15.75 C 22.86 16.99 21.83 18 20.57 18 Z M 50.29 49.5 L 29.71 49.5 C 28.45 49.5 27.43 48.49 27.43 47.25 C 27.43 46 28.45 45 29.71 45 L 50.29 45 C 51.55 45 52.57 46 52.57 47.25 C 52.57 48.49 51.55 49.5 50.29 49.5 Z M 50.29 33.75 L 29.71 33.75 C 28.45 33.75 27.43 32.74 27.43 31.5 C 27.43 30.26 28.45 29.25 29.71 29.25 L 50.29 29.25 C 51.55 29.25 52.57 30.26 52.57 31.5 C 52.57 32.74 51.55 33.75 50.29 33.75 Z M 50.29 18 L 29.71 18 C 28.45 18 27.43 16.99 27.43 15.75 C 27.43 14.51 28.45 13.5 29.71 13.5 L 50.29 13.5 C 51.55 13.5 52.57 14.51 52.57 15.75 C 52.57 16.99 51.55 18 50.29 18 Z M 50.29 18' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -17,13 +17,13 @@ const MediaIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 24.867188 37.953125 C 23.472656 37.933594 22.125 37.429688 21.058594 36.535156 L 14.019531 30.332031 C 12.910156 29.296875 11.214844 29.214844 10.015625 30.140625 L 0.00390625 37.503906 L 0.00390625 42.28125 C -0.0664062 43.5625 0.914062 44.660156 2.195312 44.734375 C 2.261719 44.738281 2.328125 44.738281 2.394531 44.734375 L 37.847656 44.734375 C 39.269531 44.734375 40.691406 43.703125 40.691406 42.28125 L 40.691406 29.753906 L 27.96875 37.113281 C 27.03125 37.675781 25.957031 37.96875 24.867188 37.953125 Z M 24.867188 37.953125" />
|
||||
<path d="M 27.191406 22.582031 C 27.191406 24.152344 25.921875 25.425781 24.351562 25.425781 C 22.78125 25.425781 21.507812 24.152344 21.507812 22.582031 C 21.507812 21.015625 22.78125 19.742188 24.351562 19.742188 C 25.921875 19.742188 27.191406 21.015625 27.191406 22.582031 Z M 27.191406 22.582031" />
|
||||
<path d="M 47.40625 8.3125 C 46.996094 7.75 46.359375 7.394531 45.664062 7.34375 L 10.464844 3.273438 C 9.78125 3.214844 9.09375 3.398438 8.527344 3.789062 C 8.027344 4.226562 7.6875 4.816406 7.558594 5.46875 L 6.980469 10.507812 L 37.847656 10.507812 C 40.792969 10.574219 43.171875 12.925781 43.273438 15.867188 L 43.273438 38.664062 C 43.273438 38.535156 43.855469 38.40625 44.113281 38.148438 C 44.648438 37.726562 44.957031 37.085938 44.953125 36.40625 L 47.988281 10.183594 C 48.054688 9.507812 47.84375 8.832031 47.40625 8.3125 Z M 47.40625 8.3125" />
|
||||
<path d="M 37.847656 13.089844 L 2.394531 13.089844 C 0.972656 13.089844 0.00390625 14.445312 0.00390625 15.867188 L 0.00390625 34.273438 L 8.527344 28.074219 C 10.691406 26.46875 13.6875 26.601562 15.695312 28.394531 L 22.800781 34.597656 C 23.871094 35.503906 25.402344 35.636719 26.609375 34.917969 L 40.691406 26.71875 L 40.691406 15.867188 C 40.59375 14.351562 39.367188 13.152344 37.847656 13.089844 Z M 24.351562 28.007812 C 21.355469 28.007812 18.925781 25.578125 18.925781 22.582031 C 18.925781 19.585938 21.355469 17.160156 24.351562 17.160156 C 27.347656 17.160156 29.777344 19.585938 29.777344 22.582031 C 29.777344 25.578125 27.347656 28.007812 24.351562 28.007812 Z M 24.351562 28.007812" />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 24.87 37.95 C 23.47 37.93 22.13 37.43 21 36.54 L 14 30.33 C 12.91 29.3 11.21 29.21 10 30.14 L 0 37.5 L 0 42.28 C -0 43.56 0.91 44.66 2.2 44.73 C 2.26 44.74 2.33 44.74 2.39 44.73 L 37.85 44.73 C 39.27 44.73 40.69 43.7 40.69 42.28 L 40.69 29.75 L 27.97 37.11 C 27 37.68 25.96 37.97 24.87 37.95 Z M 24.87 37.95' />
|
||||
<path d='M 27.19 22.58 C 27.19 24.15 25.92 25.43 24.35 25.43 C 22.78 25.43 21.51 24.15 21.51 22.58 C 21.51 21 22.78 19.74 24.35 19.74 C 25.92 19.74 27.19 21 27.19 22.58 Z M 27.19 22.58' />
|
||||
<path d='M 47.41 8.31 C 47 7.75 46.36 7.39 45.66 7.34 L 10.46 3.27 C 9.78 3.21 9 3.4 8.53 3.79 C 8 4.23 7.69 4.82 7.56 5.47 L 6.98 10.51 L 37.85 10.51 C 40.79 10.57 43.17 12.93 43.27 15.87 L 43.27 38.66 C 43.27 38.54 43.86 38.41 44.11 38.15 C 44.65 37.73 44.96 37 44.95 36.41 L 47.99 10.18 C 48 9.51 47.84 8.83 47.41 8.31 Z M 47.41 8.31' />
|
||||
<path d='M 37.85 13 L 2.39 13 C 0.97 13 0 14.45 0 15.87 L 0 34.27 L 8.53 28 C 10.69 26.47 13.69 26.6 15.7 28.39 L 22.8 34.6 C 23.87 35.5 25.4 35.64 26.61 34.92 L 40.69 26.72 L 40.69 15.87 C 40.59 14.35 39.37 13.15 37.85 13 Z M 24.35 28 C 21.36 28 18.93 25.58 18.93 22.58 C 18.93 19.59 21.36 17.16 24.35 17.16 C 27.35 17.16 29.78 19.59 29.78 22.58 C 29.78 25.58 27.35 28 24.35 28 Z M 24.35 28' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default MediaIcon
|
@ -5,25 +5,25 @@ const MinimizeFullscreenIcon = ({
|
||||
viewBox = '0 0 32 32',
|
||||
title = 'Minimize Fullscreen',
|
||||
}) => (
|
||||
<svg
|
||||
className={className}
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={viewBox}
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d='M 30.527344 13.082031 L 23.257812 13.082031 C 20.855469 13.082031 18.898438 11.125 18.898438 8.722656 L 18.898438 1.453125 C 18.898438 0.652344 19.546875 0 20.351562 0 C 21.15625 0 21.804688 0.652344 21.804688 1.453125 L 21.804688 8.722656 C 21.804688 9.523438 22.457031 10.175781 23.257812 10.175781 L 30.527344 10.175781 C 31.332031 10.175781 31.980469 10.828125 31.980469 11.628906 C 31.980469 12.433594 31.332031 13.082031 30.527344 13.082031 Z M 30.527344 13.082031' />
|
||||
<path d='M 20.351562 31.980469 C 19.546875 31.980469 18.898438 31.332031 18.898438 30.527344 L 18.898438 23.257812 C 18.898438 20.855469 20.855469 18.898438 23.257812 18.898438 L 30.527344 18.898438 C 31.332031 18.898438 31.980469 19.550781 31.980469 20.351562 C 31.980469 21.15625 31.332031 21.804688 30.527344 21.804688 L 23.257812 21.804688 C 22.457031 21.804688 21.804688 22.457031 21.804688 23.257812 L 21.804688 30.527344 C 21.804688 31.332031 21.15625 31.980469 20.351562 31.980469 Z M 20.351562 31.980469' />
|
||||
<path d='M 8.722656 13.082031 L 1.453125 13.082031 C 0.648438 13.082031 0 12.433594 0 11.628906 C 0 10.828125 0.648438 10.175781 1.453125 10.175781 L 8.722656 10.175781 C 9.523438 10.175781 10.175781 9.523438 10.175781 8.722656 L 10.175781 1.453125 C 10.175781 0.652344 10.824219 0 11.628906 0 C 12.433594 0 13.082031 0.652344 13.082031 1.453125 L 13.082031 8.722656 C 13.082031 11.125 11.125 13.082031 8.722656 13.082031 Z M 8.722656 13.082031' />
|
||||
<path d='M 11.628906 31.980469 C 10.824219 31.980469 10.175781 31.332031 10.175781 30.527344 L 10.175781 23.257812 C 10.175781 22.457031 9.523438 21.804688 8.722656 21.804688 L 1.453125 21.804688 C 0.648438 21.804688 0 21.15625 0 20.351562 C 0 19.550781 0.648438 18.898438 1.453125 18.898438 L 8.722656 18.898438 C 11.125 18.898438 13.082031 20.855469 13.082031 23.257812 L 13.082031 30.527344 C 13.082031 31.332031 12.433594 31.980469 11.628906 31.980469 Z M 11.628906 31.980469' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
<svg
|
||||
className={className}
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={viewBox}
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d='M 30.53 13 L 23.26 13 C 20.86 13 18.9 11.13 18.9 8.72 L 18.9 1.45 C 18.9 0.65 19.55 0 20.35 0 C 21.16 0 21.8 0.65 21.8 1.45 L 21.8 8.72 C 21.8 9.52 22.46 10.18 23.26 10.18 L 30.53 10.18 C 31.33 10.18 31.98 10.83 31.98 11.63 C 31.98 12.43 31.33 13 30.53 13 Z M 30.53 13' />
|
||||
<path d='M 20.35 31.98 C 19.55 31.98 18.9 31.33 18.9 30.53 L 18.9 23.26 C 18.9 20.86 20.86 18.9 23.26 18.9 L 30.53 18.9 C 31.33 18.9 31.98 19.55 31.98 20.35 C 31.98 21.16 31.33 21.8 30.53 21.8 L 23.26 21.8 C 22.46 21.8 21.8 22.46 21.8 23.26 L 21.8 30.53 C 21.8 31.33 21.16 31.98 20.35 31.98 Z M 20.35 31.98' />
|
||||
<path d='M 8.72 13 L 1.45 13 C 0.65 13 0 12.43 0 11.63 C 0 10.83 0.65 10.18 1.45 10.18 L 8.72 10.18 C 9.52 10.18 10.18 9.52 10.18 8.72 L 10.18 1.45 C 10.18 0.65 10.82 0 11.63 0 C 12.43 0 13 0.65 13 1.45 L 13 8.72 C 13 11.13 11.13 13 8.72 13 Z M 8.72 13' />
|
||||
<path d='M 11.63 31.98 C 10.82 31.98 10.18 31.33 10.18 30.53 L 10.18 23.26 C 10.18 22.46 9.52 21.8 8.72 21.8 L 1.45 21.8 C 0.65 21.8 0 21.16 0 20.35 C 0 19.55 0.65 18.9 1.45 18.9 L 8.72 18.9 C 11.13 18.9 13 20.86 13 23.26 L 13 30.53 C 13 31.33 12.43 31.98 11.63 31.98 Z M 11.63 31.98' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default MinimizeFullscreenIcon
|
@ -18,10 +18,10 @@ const MissingIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 30.21875 0 L 12.601562 17.621094 L 12.601562 84 L 71.398438 84 L 71.398438 0 Z M 29.398438 4.78125 L 29.398438 16.800781 L 17.378906 16.800781 Z M 68.601562 81.199219 L 15.398438 81.199219 L 15.398438 19.601562 L 32.199219 19.601562 L 32.199219 2.800781 L 68.601562 2.800781 Z M 68.601562 81.199219" />
|
||||
<path d="M 34.757812 33.257812 L 30.800781 37.21875 L 26.839844 33.257812 L 24.859375 35.238281 L 28.820312 39.199219 L 24.859375 43.160156 L 26.839844 45.140625 L 30.800781 41.179688 L 34.757812 45.140625 L 36.738281 43.160156 L 32.78125 39.199219 L 36.738281 35.238281 Z M 34.757812 33.257812" />
|
||||
<path d="M 47.839844 45.140625 L 51.800781 41.179688 L 55.757812 45.140625 L 57.738281 43.160156 L 53.78125 39.199219 L 57.738281 35.238281 L 55.757812 33.257812 L 51.800781 37.21875 L 47.839844 33.257812 L 45.859375 35.238281 L 49.820312 39.199219 L 45.859375 43.160156 Z M 47.839844 45.140625" />
|
||||
<path d="M 29.808594 57.808594 L 31.789062 59.789062 L 33.089844 58.488281 C 38.015625 53.578125 45.984375 53.578125 50.910156 58.488281 L 52.210938 59.789062 L 54.191406 57.808594 L 52.890625 56.507812 C 46.871094 50.503906 37.128906 50.503906 31.109375 56.507812 Z M 29.808594 57.808594" />
|
||||
<path d='M 30.22 0 L 12.6 17.62 L 12.6 84 L 71.4 84 L 71.4 0 Z M 29.4 4.78 L 29.4 16.8 L 17.38 16.8 Z M 68.6 81.2 L 15.4 81.2 L 15.4 19.6 L 32.2 19.6 L 32.2 2.8 L 68.6 2.8 Z M 68.6 81.2' />
|
||||
<path d='M 34.76 33.26 L 30.8 37.22 L 26.84 33.26 L 24.86 35.24 L 28.82 39.2 L 24.86 43.16 L 26.84 45.14 L 30.8 41.18 L 34.76 45.14 L 36.74 43.16 L 32.78 39.2 L 36.74 35.24 Z M 34.76 33.26' />
|
||||
<path d='M 47.84 45.14 L 51.8 41.18 L 55.76 45.14 L 57.74 43.16 L 53.78 39.2 L 57.74 35.24 L 55.76 33.26 L 51.8 37.22 L 47.84 33.26 L 45.86 35.24 L 49.82 39.2 L 45.86 43.16 Z M 47.84 45.14' />
|
||||
<path d='M 29.81 57.81 L 31.79 59.79 L 33 58.49 C 38 53.58 45.98 53.58 50.91 58.49 L 52.21 59.79 L 54.19 57.81 L 52.89 56.51 C 46.87 50.5 37.13 50.5 31.11 56.51 Z M 29.81 57.81' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -17,11 +17,10 @@ const MoreIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 32 0 C 14.355 0 0 14.355 0 32 C 0 49.644 14.355 64 32 64 C 49.644 64 64 49.644 64 32 C 64 14.355 49.644 0 32 0 Z M 16.484 36.847 C 13.812 36.847 11.636 34.671 11.636 32 C 11.636 29.328 13.812 27.152 16.484 27.152 C 19.16 27.152 21.332 29.328 21.332 32 C 21.332 34.671 19.16 36.847 16.484 36.847 Z M 32 36.847 C 29.328 36.847 27.152 34.671 27.152 32 C 27.152 29.328 29.328 27.152 32 27.152 C 34.671 27.152 36.847 29.328 36.847 32 C 36.847 34.671 34.671 36.847 32 36.847 Z M 47.515 36.847 C 44.839 36.847 42.667 34.671 42.667 32 C 42.667 29.328 44.839 27.152 47.515 27.152 C 50.187 27.152 52.363 29.328 52.363 32 C 52.363 34.671 50.187 36.847 47.515 36.847 Z M 47.515 36.847" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<g>
|
||||
<path d='M 32 0 C 14.36 0 0 14.36 0 32 C 0 49.64 14.36 64 32 64 C 49.64 64 64 49.64 64 32 C 64 14.36 49.64 0 32 0 Z M 16.48 36.85 C 13.81 36.85 11.64 34.67 11.64 32 C 11.64 29.33 13.81 27.15 16.48 27.15 C 19.16 27.15 21.33 29.33 21.33 32 C 21.33 34.67 19.16 36.85 16.48 36.85 Z M 32 36.85 C 29.33 36.85 27.15 34.67 27.15 32 C 27.15 29.33 29.33 27.15 32 27.15 C 34.67 27.15 36.85 29.33 36.85 32 C 36.85 34.67 34.67 36.85 32 36.85 Z M 47.52 36.85 C 44.84 36.85 42.67 34.67 42.67 32 C 42.67 29.33 44.84 27.15 47.52 27.15 C 50.19 27.15 52.36 29.33 52.36 32 C 52.36 34.67 50.19 36.85 47.52 36.85 Z M 47.52 36.85' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default MoreIcon
|
@ -18,9 +18,9 @@ const NotificationsIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path className='' d='M 17 40 C 18 46 21 48 24 48 C 26 48 29 46 30 40 Z M 17 40' />
|
||||
<path className='' d='M 24 4 C 25 4 27 4 29 5 L 29 5 C 29 2 27 0 24 0 L 23 0 C 20 0 18 2 18 5 L 18 5 C 20 4 22 4 24 4 Z M 24 4' />
|
||||
<path className='' d='M 41 40 L 6 40 C 5 40 5 40 5 39 C 4 39 5 38 5 38 C 5 38 6 37 8 35 C 9 30 10 25 10 21 C 10 13 16 7 24 7 C 31 7 37 13 37 20 C 37 20 37 20 37 21 C 37 25 38 30 39 35 C 41 37 42 38 42 38 C 42 38 43 39 42 39 C 42 40 42 40 41 40 Z M 42 38 Z M 42 38' />
|
||||
<path d='M 17 40 C 18 46 21 48 24 48 C 26 48 29 46 30 40 Z M 17 40' />
|
||||
<path d='M 24 4 C 25 4 27 4 29 5 L 29 5 C 29 2 27 0 24 0 L 23 0 C 20 0 18 2 18 5 L 18 5 C 20 4 22 4 24 4 Z M 24 4' />
|
||||
<path d='M 41 40 L 6 40 C 5 40 5 40 5 39 C 4 39 5 38 5 38 C 5 38 6 37 8 35 C 9 30 10 25 10 21 C 10 13 16 7 24 7 C 31 7 37 13 37 20 C 37 20 37 20 37 21 C 37 25 38 30 39 35 C 41 37 42 38 42 38 C 42 38 43 39 42 39 C 42 40 42 40 41 40 Z M 42 38 Z M 42 38' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -17,12 +17,11 @@ const PauseIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<rect x='6' y='0' width='18' height='64' rx='4' />
|
||||
<rect x='40' y='0' width='18' height='64' rx='4' />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<g>
|
||||
<rect x='6' y='0' width='18' height='64' rx='4' />
|
||||
<rect x='40' y='0' width='18' height='64' rx='4' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default PauseIcon
|
@ -17,10 +17,10 @@ const PinIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 25.984375 19.042969 C 25.984375 19.914062 25.277344 20.621094 24.402344 20.621094 L 18.996094 20.621094 L 16.789062 31.398438 C 16.714844 31.765625 16.390625 32.03125 16.015625 32.03125 C 15.640625 32.03125 15.316406 31.765625 15.242188 31.398438 L 13.03125 20.621094 L 7.628906 20.621094 C 6.753906 20.621094 6.046875 19.914062 6.046875 19.042969 C 6.046875 16.636719 7.4375 14.488281 9.617188 13.050781 L 9.617188 8.335938 L 8.148438 8.335938 C 7.277344 8.335938 6.570312 7.628906 6.570312 6.753906 L 6.570312 1.582031 C 6.570312 0.707031 7.277344 0 8.148438 0 L 23.882812 0 C 24.757812 0 25.460938 0.707031 25.460938 1.582031 L 25.460938 6.753906 C 25.460938 7.628906 24.757812 8.335938 23.882812 8.335938 L 22.414062 8.335938 L 22.414062 13.050781 C 24.59375 14.488281 25.984375 16.636719 25.984375 19.042969 Z M 25.984375 19.042969" />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 25.98 19 C 25.98 19.91 25.28 20.62 24.4 20.62 L 19 20.62 L 16.79 31.4 C 16.71 31.77 16.39 32 16 32 C 15.64 32 15.32 31.77 15.24 31.4 L 13 20.62 L 7.63 20.62 C 6.75 20.62 6 19.91 6 19 C 6 16.64 7.44 14.49 9.62 13 L 9.62 8.34 L 8.15 8.34 C 7.28 8.34 6.57 7.63 6.57 6.75 L 6.57 1.58 C 6.57 0.71 7.28 0 8.15 0 L 23.88 0 C 24.76 0 25.46 0.71 25.46 1.58 L 25.46 6.75 C 25.46 7.63 24.76 8.34 23.88 8.34 L 22.41 8.34 L 22.41 13 C 24.59 14.49 25.98 16.64 25.98 19 Z M 25.98 19' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default PinIcon
|
@ -5,22 +5,22 @@ const PlayIcon = ({
|
||||
viewBox = '0 0 64 64',
|
||||
title = 'Play',
|
||||
}) => (
|
||||
<svg
|
||||
className={className}
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={viewBox}
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 52.492188 26.058594 L 16.941406 1.71875 C 15.300781 0.59375 13.644531 0 12.269531 0 C 9.613281 0 7.96875 2.132812 7.96875 5.703125 L 7.96875 58.304688 C 7.96875 61.871094 9.609375 64 12.261719 64 C 13.640625 64 15.265625 63.402344 16.914062 62.277344 L 52.476562 37.941406 C 54.765625 36.371094 56.03125 34.261719 56.03125 31.996094 C 56.03125 29.734375 54.78125 27.625 52.492188 26.058594 Z M 52.492188 26.058594" />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
<svg
|
||||
className={className}
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
width={width}
|
||||
height={height}
|
||||
viewBox={viewBox}
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d='M 52.49 26 L 16.94 1.72 C 15.3 0.59 13.64 0 12.27 0 C 9.61 0 7.97 2.13 7.97 5.7 L 7.97 58.3 C 7.97 61.87 9.61 64 12.26 64 C 13.64 64 15.27 63.4 16.91 62.28 L 52.48 37.94 C 54.77 36.37 56 34.26 56 32 C 56 29.73 54.78 27.63 52.49 26 Z M 52.49 26' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default PlayIcon
|
@ -17,10 +17,10 @@ const PollIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 42.667969 0 L 5.332031 0 C 2.386719 0 0 2.386719 0 5.332031 L 0 42.667969 C 0 45.613281 2.386719 48 5.332031 48 L 42.667969 48 C 45.613281 48 48 45.613281 48 42.667969 L 48 5.332031 C 48 2.386719 45.613281 0 42.667969 0 Z M 16 37.332031 L 10.667969 37.332031 L 10.667969 18.667969 L 16 18.667969 Z M 26.667969 37.332031 L 21.332031 37.332031 L 21.332031 10.667969 L 26.667969 10.667969 Z M 37.332031 37.332031 L 32 37.332031 L 32 26.667969 L 37.332031 26.667969 Z M 37.332031 37.332031" />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 42.67 0 L 5.33 0 C 2.39 0 0 2.39 0 5.33 L 0 42.67 C 0 45.61 2.39 48 5.33 48 L 42.67 48 C 45.61 48 48 45.61 48 42.67 L 48 5.33 C 48 2.39 45.61 0 42.67 0 Z M 16 37.33 L 10.67 37.33 L 10.67 18.67 L 16 18.67 Z M 26.67 37.33 L 21.33 37.33 L 21.33 10.67 L 26.67 10.67 Z M 37.33 37.33 L 32 37.33 L 32 26.67 L 37.33 26.67 Z M 37.33 37.33' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default PollIcon
|
@ -17,10 +17,10 @@ const CloseIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 43.820312 8.179688 C 43.105469 7.859375 42.269531 7.984375 41.679688 8.5 L 38.960938 10.921875 C 35.230469 6.527344 29.761719 4 24 4 C 13.824219 3.992188 5.265625 11.621094 4.109375 21.730469 C 2.957031 31.835938 9.574219 41.203125 19.488281 43.488281 C 29.402344 45.773438 39.453125 40.253906 42.839844 30.660156 C 43.203125 29.617188 42.652344 28.472656 41.609375 28.109375 C 40.566406 27.746094 39.425781 28.296875 39.058594 29.339844 C 36.34375 37.011719 28.300781 41.421875 20.371094 39.589844 C 12.441406 37.753906 7.152344 30.257812 8.082031 22.175781 C 9.011719 14.089844 15.859375 7.988281 24 8 C 28.621094 8 33.011719 10.03125 36 13.558594 L 32.679688 16.5 C 32.054688 17.054688 31.839844 17.941406 32.140625 18.71875 C 32.4375 19.488281 33.175781 19.996094 34 20 L 43 20 C 44.105469 20 45 19.105469 45 18 L 45 10 C 45 9.214844 44.535156 8.503906 43.820312 8.179688 Z M 43.820312 8.179688 "/>
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 43.82 8.18 C 43.11 7.86 42.27 7.98 41.68 8.5 L 38.96 10.92 C 35.23 6.53 29.76 4 24 4 C 13.82 3.99 5.27 11.62 4.11 21.73 C 2.96 31.84 9.57 41.2 19.49 43.49 C 29.4 45.77 39.45 40.25 42.84 30.66 C 43.2 29.62 42.65 28.47 41.61 28.11 C 40.57 27.75 39.43 28.3 39 29.34 C 36.34 37 28.3 41.42 20.37 39.59 C 12.44 37.75 7.15 30.26 8 22.18 C 9 14 15.86 7.99 24 8 C 28.62 8 33 10 36 13.56 L 32.68 16.5 C 32 17 31.84 17.94 32.14 18.72 C 32.44 19.49 33.18 20 34 20 L 43 20 C 44.11 20 45 19.11 45 18 L 45 10 C 45 9.21 44.54 8.5 43.82 8.18 Z M 43.82 8.18' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default CloseIcon
|
@ -17,11 +17,10 @@ const SearchAltIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 61.726562 50.433594 L 51.191406 39.898438 C 53.105469 36.070312 54.382812 31.601562 54.382812 27.132812 C 54.382812 12.128906 42.253906 0 27.25 0 C 12.25 0 0.121094 12.128906 0.121094 27.132812 C 0.121094 42.132812 12.25 54.265625 27.25 54.265625 C 31.71875 54.265625 36.191406 52.988281 40.019531 51.074219 L 50.554688 61.605469 C 53.746094 64.796875 58.535156 64.796875 61.726562 61.605469 C 64.597656 58.414062 64.597656 53.625 61.726562 50.433594 Z M 27.25 47.878906 C 15.761719 47.878906 6.503906 38.625 6.503906 27.132812 C 6.503906 15.640625 15.761719 6.382812 27.25 6.382812 C 38.742188 6.382812 48 15.640625 48 27.132812 C 48 38.625 38.742188 47.878906 27.25 47.878906 Z M 27.25 47.878906" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<g>
|
||||
<path d='M 61.73 50.43 L 51.19 39.9 C 53.11 36 54.38 31.6 54.38 27.13 C 54.38 12.13 42.25 0 27.25 0 C 12.25 0 0.12 12.13 0.12 27.13 C 0.12 42.13 12.25 54.27 27.25 54.27 C 31.72 54.27 36.19 52.99 40 51 L 50.55 61.61 C 53.75 64.80 58.54 64.80 61.73 61.61 C 64.6 58.41 64.6 53.63 61.73 50.43 Z M 27.25 47.88 C 15.76 47.88 6.5 38.63 6.5 27.13 C 6.5 15.64 15.76 6.38 27.25 6.38 C 38.74 6.38 48 15.64 48 27.13 C 48 38.63 38.74 47.88 27.25 47.88 Z M 27.25 47.88' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default SearchAltIcon
|
@ -18,7 +18,7 @@ const SearchIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path className='' d='M 47.414062 44.585938 L 33.761719 30.9375 C 36.40625 27.671875 38 23.519531 38 19 C 38 8.523438 29.476562 0 19 0 C 8.523438 0 0 8.523438 0 19 C 0 29.476562 8.523438 38 19 38 C 23.519531 38 27.667969 36.40625 30.9375 33.765625 L 44.585938 47.414062 C 44.976562 47.804688 45.488281 48 46 48 C 46.511719 48 47.023438 47.804688 47.414062 47.414062 C 48.195312 46.632812 48.195312 45.367188 47.414062 44.585938 Z M 19 34 C 10.726562 34 4 27.273438 4 19 C 4 10.726562 10.726562 4 19 4 C 27.273438 4 34 10.726562 34 19 C 34 27.273438 27.273438 34 19 34 Z M 19 34'/>
|
||||
<path d='M 47.41 44.59 L 33.76 30.94 C 36.41 27.67 38 23.52 38 19 C 38 8.52 29.48 0 19 0 C 8.52 0 0 8.52 0 19 C 0 29.48 8.52 38 19 38 C 23.52 38 27.67 36.41 30.94 33.77 L 44.59 47.41 C 44.98 47.8 45.49 48 46 48 C 46.51 48 47 47.8 47.41 47.41 C 48.2 46.63 48.2 45.37 47.41 44.59 Z M 19 34 C 10.73 34 4 27.27 4 19 C 4 10.73 10.73 4 19 4 C 27.27 4 34 10.73 34 19 C 34 27.27 27.27 34 19 34 Z M 19 34' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,11 +18,11 @@ const ShareIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<circle cx="18" cy="5" r="3"/>
|
||||
<circle cx="6" cy="12" r="3"/>
|
||||
<circle cx="18" cy="19" r="3"/>
|
||||
<line stroke='#666' strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" x1="8.59" x2="15.42" y1="13.51" y2="17.49" />
|
||||
<line stroke='#666' strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" x1="15.41" x2="8.59" y1="6.51" y2="10.49" />
|
||||
<circle cx='18' cy='5' r='3'/>
|
||||
<circle cx='6' cy='12' r='3'/>
|
||||
<circle cx='18' cy='19' r='3'/>
|
||||
<line stroke='#666' strokeLinecap='round' strokeLinejoin='round' strokeWidth='2' x1='8.59' x2='15.42' y1='13.51' y2='17.49' />
|
||||
<line stroke='#666' strokeLinecap='round' strokeLinejoin='round' strokeWidth='2' x1='15.41' x2='8.59' y1='6.51' y2='10.49' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -18,8 +18,8 @@ const ShopIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 49.921875 3.40625 L 30.269531 3.40625 C 29.027344 3.40625 27.832031 3.902344 26.953125 4.78125 L 1.375 30.355469 C -0.457031 32.1875 -0.457031 35.15625 1.375 36.992188 L 21.023438 56.644531 C 22.859375 58.476562 25.828125 58.476562 27.660156 56.644531 L 53.238281 31.070312 C 54.117188 30.1875 54.613281 28.992188 54.613281 27.746094 L 54.613281 8.097656 C 54.613281 5.507812 52.511719 3.40625 49.921875 3.40625 Z M 41.707031 19.832031 C 39.765625 19.832031 38.1875 18.253906 38.1875 16.3125 C 38.1875 14.371094 39.765625 12.792969 41.707031 12.792969 C 43.652344 12.792969 45.226562 14.371094 45.226562 16.3125 C 45.226562 18.253906 43.652344 19.832031 41.707031 19.832031 Z M 41.707031 19.832031" />
|
||||
<path d="M 59.308594 8.097656 L 59.304688 29.945312 C 59.304688 31.023438 58.875 32.066406 58.109375 32.828125 L 32.117188 58.820312 L 32.515625 59.21875 C 34.347656 61.050781 37.320312 61.050781 39.152344 59.21875 L 62.621094 35.753906 C 63.503906 34.875 64 33.679688 64 32.4375 L 64 12.792969 C 64 10.199219 61.898438 8.097656 59.308594 8.097656 Z M 59.308594 8.097656" />
|
||||
<path d='M 49.92 3.41 L 30.27 3.41 C 29 3.41 27.83 3.9 26.95 4.78 L 1.38 30.36 C -0.46 32.19 -0.46 35.16 1.38 36.99 L 21 56.64 C 22.86 58.48 25.83 58.48 27.66 56.64 L 53.24 31 C 54.12 30.19 54.61 28.99 54.61 27.75 L 54.61 8.1 C 54.61 5.51 52.51 3.41 49.92 3.41 Z M 41.71 19.83 C 39.77 19.83 38.19 18.25 38.19 16.31 C 38.19 14.37 39.77 12.79 41.71 12.79 C 43.65 12.79 45.23 14.37 45.23 16.31 C 45.23 18.25 43.65 19.83 41.71 19.83 Z M 41.71 19.83' />
|
||||
<path d='M 59.31 8.1 L 59.3 29.95 C 59.3 31 58.88 32 58.11 32.83 L 32.12 58.82 L 32.52 59.22 C 34.35 61 37.32 61 39.15 59.22 L 62.62 35.75 C 63.5 34.88 64 33.68 64 32.44 L 64 12.79 C 64 10.2 61.9 8.1 59.31 8.1 Z M 59.31 8.1' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -17,10 +17,10 @@ const SubtractIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 61.5 29.5 L 2.5 29.5 C 1.121094 29.5 0 30.621094 0 32 C 0 33.378906 1.121094 34.5 2.5 34.5 L 61.5 34.5 C 62.878906 34.5 64 33.378906 64 32 C 64 30.621094 62.878906 29.5 61.5 29.5 Z M 61.5 29.5" />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<path d='M 61.5 29.5 L 2.5 29.5 C 1.12 29.5 0 30.62 0 32 C 0 33.38 1.12 34.5 2.5 34.5 L 61.5 34.5 C 62.88 34.5 64 33.38 64 32 C 64 30.62 62.88 29.5 61.5 29.5 Z M 61.5 29.5' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default SubtractIcon
|
@ -17,16 +17,15 @@ const TrendsIcon = ({
|
||||
xmlSpace='preserve'
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<rect x="0" y="0" width="24" height="56" rx="4" />
|
||||
<rect x="0" y="60" width="24" height="20" rx="4" />
|
||||
<rect x="28" y="44" width="24" height="36" rx="4" />
|
||||
<rect x="28" y="16" width="24" height="24" rx="4" />
|
||||
<rect x="56" y="64" width="24" height="16" rx="4" />
|
||||
<rect x="56" y="30" width="24" height="30" rx="4" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<g>
|
||||
<rect x='0' y='0' width='24' height='56' rx='4' />
|
||||
<rect x='0' y='60' width='24' height='20' rx='4' />
|
||||
<rect x='28' y='44' width='24' height='36' rx='4' />
|
||||
<rect x='28' y='16' width='24' height='24' rx='4' />
|
||||
<rect x='56' y='64' width='24' height='16' rx='4' />
|
||||
<rect x='56' y='30' width='24' height='30' rx='4' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
||||
export default TrendsIcon
|
@ -18,7 +18,7 @@ const WarningIcon = ({
|
||||
aria-label={title}
|
||||
>
|
||||
<g>
|
||||
<path d="M 47.003906 35.996094 L 30.046875 4.824219 C 27.324219 0.238281 20.679688 0.234375 17.953125 4.824219 L 1 35.996094 C -1.785156 40.683594 1.585938 46.617188 7.042969 46.617188 L 40.957031 46.617188 C 46.410156 46.617188 49.789062 40.6875 47.003906 35.996094 Z M 24 40.992188 C 22.449219 40.992188 21.1875 39.730469 21.1875 38.179688 C 21.1875 36.628906 22.449219 35.367188 24 35.367188 C 25.550781 35.367188 26.8125 36.628906 26.8125 38.179688 C 26.8125 39.730469 25.550781 40.992188 24 40.992188 Z M 26.8125 29.742188 C 26.8125 31.292969 25.550781 32.554688 24 32.554688 C 22.449219 32.554688 21.1875 31.292969 21.1875 29.742188 L 21.1875 15.679688 C 21.1875 14.128906 22.449219 12.867188 24 12.867188 C 25.550781 12.867188 26.8125 14.128906 26.8125 15.679688 Z M 26.8125 29.742188" />
|
||||
<path d='M 47 36 L 30 4.82 C 27.32 0.24 20.68 0.23 17.95 4.82 L 1 36 C -1.79 40.68 1.59 46.62 7 46.62 L 40.96 46.62 C 46.41 46.62 49.79 40.69 47 36 Z M 24 40.99 C 22.45 40.99 21.19 39.73 21.19 38.18 C 21.19 36.63 22.45 35.37 24 35.37 C 25.55 35.37 26.81 36.63 26.81 38.18 C 26.81 39.73 25.55 40.99 24 40.99 Z M 26.81 29.74 C 26.81 31.29 25.55 32.55 24 32.55 C 22.45 32.55 21.19 31.29 21.19 29.74 L 21.19 15.68 C 21.19 14.13 22.45 12.87 24 12.87 C 25.55 12.87 26.81 14.13 26.81 15.68 Z M 26.81 29.74' />
|
||||
</g>
|
||||
</svg>
|
||||
)
|
||||
|
@ -35,6 +35,7 @@ class Account extends ImmutablePureComponent {
|
||||
actionTitle: PropTypes.string,
|
||||
onActionClick: PropTypes.func,
|
||||
compact: PropTypes.bool,
|
||||
expanded: PropTypes.bool,
|
||||
showDismiss: PropTypes.bool,
|
||||
dismissAction: PropTypes.func,
|
||||
}
|
||||
@ -76,6 +77,7 @@ class Account extends ImmutablePureComponent {
|
||||
actionIcon,
|
||||
actionTitle,
|
||||
compact,
|
||||
expanded,
|
||||
dismissAction,
|
||||
showDismiss,
|
||||
} = this.props
|
||||
|
@ -35,13 +35,13 @@ export default class AutosuggestTextbox extends ImmutablePureComponent {
|
||||
onBlur: PropTypes.func,
|
||||
textarea: PropTypes.bool,
|
||||
small: PropTypes.bool,
|
||||
};
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
autoFocus: true,
|
||||
searchTokens: ['@', ':', '#'],
|
||||
textarea: false,
|
||||
};
|
||||
}
|
||||
|
||||
state = {
|
||||
suggestionsHidden: true,
|
||||
@ -49,11 +49,13 @@ export default class AutosuggestTextbox extends ImmutablePureComponent {
|
||||
selectedSuggestion: 0,
|
||||
lastToken: null,
|
||||
tokenStart: 0,
|
||||
};
|
||||
}
|
||||
|
||||
onChange = (e) => {
|
||||
const [ tokenStart, token ] = textAtCursorMatchesToken(e.target.value, e.target.selectionStart, this.props.searchTokens);
|
||||
|
||||
console.log('onChange', e.target.value, e.target, this.textbox, tokenStart, token)
|
||||
|
||||
if (token !== null && this.state.lastToken !== token) {
|
||||
this.setState({ lastToken: token, selectedSuggestion: 0, tokenStart });
|
||||
this.props.onSuggestionsFetchRequested(token);
|
||||
@ -155,10 +157,6 @@ export default class AutosuggestTextbox extends ImmutablePureComponent {
|
||||
}
|
||||
}
|
||||
|
||||
setTextbox = (c) => {
|
||||
this.textbox = c;
|
||||
}
|
||||
|
||||
renderSuggestion = (suggestion, i) => {
|
||||
const { selectedSuggestion } = this.state;
|
||||
let inner, key;
|
||||
@ -192,6 +190,10 @@ export default class AutosuggestTextbox extends ImmutablePureComponent {
|
||||
);
|
||||
}
|
||||
|
||||
setTextbox = (c) => {
|
||||
this.textbox = c;
|
||||
}
|
||||
|
||||
render () {
|
||||
const {
|
||||
value,
|
||||
@ -249,12 +251,15 @@ export default class AutosuggestTextbox extends ImmutablePureComponent {
|
||||
<Fragment>
|
||||
<div className={[_s.default, _s.flexGrow1].join(' ')}>
|
||||
<div className={[_s.default, _s.ml5].join(' ')}>
|
||||
<Textarea
|
||||
className={_s.default}
|
||||
inputRef={this.setTextbox}
|
||||
disabled={disabled}
|
||||
value={value}
|
||||
aria-autocomplete='list'
|
||||
/>
|
||||
|
||||
<ContentEditable
|
||||
noFocuscontainerRefocus
|
||||
ariaMultiline
|
||||
contentEditable
|
||||
spellcheck
|
||||
tabindex='0'
|
||||
ariaLabel='Gab text'
|
||||
role='textbox'
|
||||
@ -264,9 +269,10 @@ export default class AutosuggestTextbox extends ImmutablePureComponent {
|
||||
'white-space': 'pre-wrap',
|
||||
overflowWrap: 'break-word'
|
||||
}}
|
||||
inputRef={this.setTextbox}
|
||||
className={textClasses}
|
||||
disabled={disabled}
|
||||
style={style}
|
||||
html={value}
|
||||
placeholder={placeholder}
|
||||
autoFocus={autoFocus}
|
||||
onChange={this.onChange}
|
||||
@ -275,8 +281,6 @@ export default class AutosuggestTextbox extends ImmutablePureComponent {
|
||||
onFocus={this.onFocus}
|
||||
onBlur={this.onBlur}
|
||||
onPaste={this.onPaste}
|
||||
style={style}
|
||||
html={value}
|
||||
/>
|
||||
</div>
|
||||
{children}
|
||||
|
@ -14,14 +14,21 @@ class Avatar extends ImmutablePureComponent {
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
account: ImmutableMap(),
|
||||
animate: autoPlayGif,
|
||||
size: 40,
|
||||
}
|
||||
|
||||
state = {
|
||||
hovering: false,
|
||||
sameImg: this.props.account.get('avatar') === this.props.account.get('avatar_static'),
|
||||
sameImg: !this.props.account ? false : this.props.account.get('avatar') === this.props.account.get('avatar_static'),
|
||||
}
|
||||
|
||||
componentDidUpdate (prevProps) {
|
||||
if (prevProps.account !== this.props.account) {
|
||||
this.setState({
|
||||
sameImg: !this.props.account ? false : this.props.account.get('avatar') === this.props.account.get('avatar_static'),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
handleMouseEnter = () => {
|
||||
@ -43,8 +50,8 @@ class Avatar extends ImmutablePureComponent {
|
||||
className: [_s.default, _s.circle, _s.overflowHidden].join(' '),
|
||||
onMouseEnter: shouldAnimate ? this.handleMouseEnter : undefined,
|
||||
onMouseLeave: shouldAnimate ? this.handleMouseLeave : undefined,
|
||||
src: account.get((hovering || animate) ? 'avatar' : 'avatar_static'),
|
||||
alt: account.get('display_name'),
|
||||
src: !account ? undefined : account.get((hovering || animate) ? 'avatar' : 'avatar_static'),
|
||||
alt: !account ? undefined : account.get('display_name'),
|
||||
style: {
|
||||
width: `${size}px`,
|
||||
height: `${size}px`,
|
||||
|
@ -36,6 +36,7 @@ export default class Button extends PureComponent {
|
||||
narrow: PropTypes.bool,
|
||||
underlineOnHover: PropTypes.bool,
|
||||
radiusSmall: PropTypes.bool,
|
||||
noClasses: PropTypes.bool,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
@ -50,6 +51,8 @@ export default class Button extends PureComponent {
|
||||
}
|
||||
|
||||
setRef = (c) => {
|
||||
const { buttonRef } = this.props
|
||||
if (buttonRef) buttonRef(c)
|
||||
this.node = c
|
||||
}
|
||||
|
||||
@ -76,6 +79,7 @@ export default class Button extends PureComponent {
|
||||
underlineOnHover,
|
||||
narrow,
|
||||
radiusSmall,
|
||||
noClasses,
|
||||
...otherProps
|
||||
} = this.props
|
||||
|
||||
@ -89,7 +93,7 @@ export default class Button extends PureComponent {
|
||||
) : undefined
|
||||
|
||||
// : todo :
|
||||
const classes = cx(className, {
|
||||
const classes = noClasses ? className : cx(className, {
|
||||
default: 1,
|
||||
noUnderline: 1,
|
||||
font: 1,
|
||||
|
@ -19,6 +19,7 @@ export default class Input extends PureComponent {
|
||||
title: PropTypes.string,
|
||||
small: PropTypes.bool,
|
||||
readOnly: PropTypes.string,
|
||||
inputRef: PropTypes.func,
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -34,7 +35,8 @@ export default class Input extends PureComponent {
|
||||
onClear,
|
||||
title,
|
||||
small,
|
||||
readOnly
|
||||
readOnly,
|
||||
inputRef
|
||||
} = this.props
|
||||
|
||||
const inputClasses = cx({
|
||||
@ -75,6 +77,7 @@ export default class Input extends PureComponent {
|
||||
className={inputClasses}
|
||||
type='text'
|
||||
placeholder={placeholder}
|
||||
ref={inputRef}
|
||||
value={value}
|
||||
onChange={onChange}
|
||||
onKeyUp={onKeyUp}
|
||||
|
@ -8,10 +8,11 @@ export default class List extends PureComponent {
|
||||
items: PropTypes.array,
|
||||
scrollKey: PropTypes.string,
|
||||
emptyMessage: PropTypes.any,
|
||||
small: PropTypes.bool,
|
||||
}
|
||||
|
||||
render() {
|
||||
const { items, scrollKey, emptyMessage } = this.props
|
||||
const { items, scrollKey, emptyMessage, small } = this.props
|
||||
|
||||
return (
|
||||
<Block>
|
||||
@ -23,16 +24,16 @@ export default class List extends PureComponent {
|
||||
items.map((item, i) => {
|
||||
return (
|
||||
<ListItem
|
||||
small={small}
|
||||
key={`list-item-${i}`}
|
||||
to={item.to}
|
||||
title={item.title}
|
||||
isLast={items.length - 1 === i}
|
||||
{...item}
|
||||
/>
|
||||
)
|
||||
})
|
||||
}
|
||||
</ScrollableList>
|
||||
</Block>
|
||||
</Block>
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { NavLink } from 'react-router-dom'
|
||||
import classNames from 'classnames/bind'
|
||||
import Button from './button'
|
||||
import Icon from './icon'
|
||||
import Text from './text'
|
||||
|
||||
const cx = classNames.bind(_s)
|
||||
|
||||
@ -8,38 +9,52 @@ export default class ListItem extends PureComponent {
|
||||
static propTypes = {
|
||||
isLast: PropTypes.bool,
|
||||
to: PropTypes.string,
|
||||
href: PropTypes.string,
|
||||
title: PropTypes.string,
|
||||
onClick: PropTypes.func,
|
||||
small: PropTypes.bool,
|
||||
}
|
||||
|
||||
render() {
|
||||
const { to, title, isLast } = this.props
|
||||
const { title, isLast, to, href, onClick, small } = this.props
|
||||
|
||||
const containerClasses = cx({
|
||||
default: 1,
|
||||
cursorPointer: 1,
|
||||
noUnderline: 1,
|
||||
px15: 1,
|
||||
py15: 1,
|
||||
px15: !small,
|
||||
py15: !small,
|
||||
px10: small,
|
||||
py10: small,
|
||||
flexRow: 1,
|
||||
alignItemsCenter: 1,
|
||||
width100PC: 1,
|
||||
backgroundSubtle_onHover: 1,
|
||||
borderColorSecondary: !isLast,
|
||||
borderBottom1PX: !isLast,
|
||||
})
|
||||
|
||||
const textSize = small ? 'small' : 'normal'
|
||||
|
||||
return (
|
||||
<NavLink to={to} className={containerClasses} >
|
||||
<span className={[_s.default, _s.text, _s.colorPrimary, _s.fontSize14PX].join(' ')}>
|
||||
<Button
|
||||
to={to}
|
||||
href={href}
|
||||
onClick={onClick}
|
||||
className={containerClasses}
|
||||
noClasses
|
||||
>
|
||||
<Text color='primary' size={textSize}>
|
||||
{title}
|
||||
</span>
|
||||
</Text>
|
||||
|
||||
<Icon
|
||||
id='angle-right'
|
||||
width='10px'
|
||||
height='10px'
|
||||
className={[_s.marginLeftAuto, _s.fillColorBlack].join(' ')}
|
||||
/>
|
||||
</NavLink>
|
||||
</Button>
|
||||
)
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
import { shortNumberFormat } from '../../utils/numbers';
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
count: state.getIn(['notifications', 'unread']),
|
||||
});
|
||||
|
||||
export default
|
||||
@connect(mapStateToProps)
|
||||
class NotificationCounter extends PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
count: PropTypes.number.isRequired,
|
||||
};
|
||||
|
||||
render() {
|
||||
const { count } = this.props;
|
||||
|
||||
if (count < 1) return null;
|
||||
|
||||
return (
|
||||
<span className='notification-counter'>{shortNumberFormat(count)}</span>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
@ -17,7 +17,6 @@ const mapStateToProps = state => ({
|
||||
isModalOpen: state.get('modal').modalType === 'ACTIONS',
|
||||
popoverPlacement: state.getIn(['popover', 'placement']),
|
||||
openPopoverType: state.getIn(['popover', 'popoverType']),
|
||||
openedViaKeyboard: state.getIn(['popover', 'keyboard']),
|
||||
})
|
||||
|
||||
const mapDispatchToProps = (dispatch, { status, items }) => ({
|
||||
@ -55,9 +54,9 @@ class PopoverBase extends ImmutablePureComponent {
|
||||
onClose: PropTypes.func.isRequired,
|
||||
position: PropTypes.string,
|
||||
openPopoverType: PropTypes.number,
|
||||
openedViaKeyboard: PropTypes.bool,
|
||||
visible: PropTypes.bool,
|
||||
targetRef: PropTypes.node,
|
||||
innerRef: PropTypes.node,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
@ -137,8 +136,8 @@ class PopoverBase extends ImmutablePureComponent {
|
||||
disabled,
|
||||
position,
|
||||
openPopoverType,
|
||||
openedViaKeyboard,
|
||||
targetRef,
|
||||
innerRef,
|
||||
} = this.props
|
||||
const open = this.state.id === openPopoverType
|
||||
|
||||
@ -155,13 +154,10 @@ class PopoverBase extends ImmutablePureComponent {
|
||||
referenceElement={targetRef}
|
||||
>
|
||||
{({ ref, style, placement, arrowProps }) => (
|
||||
<div ref={ref} style={style} data-placement={placement}>
|
||||
<div ref={ref} style={style} data-placement={placement} className={[_s.my5, _s.boxShadow2].join(' ')}>
|
||||
<div ref={arrowProps.ref} style={arrowProps.style} />
|
||||
<div data-popover='true' onKeyDown={this.handleKeyDown} className={containerClasses}>
|
||||
{children}
|
||||
{ /* <div show={open} placement={popoverPlacement} target={this.findTarget}>
|
||||
<PopoverMenu items={items} onClose={this.handleClose} openedViaKeyboard={openedViaKeyboard} />
|
||||
</div> */}
|
||||
<div ref={innerRef} data-popover='true' onKeyDown={this.handleKeyDown} className={containerClasses}>
|
||||
{children}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
@ -19,7 +19,7 @@ const POPOVER_COMPONENTS = {
|
||||
CONTENT_WARNING: () => Promise.resolve({ default: ContentWarningPopover }),
|
||||
DATE_PICKER: () => Promise.resolve({ default: DatePickerPopover }),
|
||||
GROUP_INFO: () => GroupInfoPopover,
|
||||
PROFILE_OPTIONS: () => ProfileOptionsPopover,
|
||||
PROFILE_OPTIONS: () => Promise.resolve({ default: ProfileOptionsPopover }),
|
||||
SEARCH: () => Promise.resolve({ default: SearchPopover }),
|
||||
SIDEBAR_MORE: () => Promise.resolve({ default: SidebarMorePopover }),
|
||||
STATUS_OPTIONS: () => Promise.resolve({ default: StatusOptionsPopover }),
|
||||
@ -60,7 +60,6 @@ class PopoverRoot extends PureComponent {
|
||||
onClose: PropTypes.func.isRequired,
|
||||
style: PropTypes.object,
|
||||
placement: PropTypes.string,
|
||||
openedViaKeyboard: PropTypes.bool,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
@ -73,25 +72,23 @@ class PopoverRoot extends PureComponent {
|
||||
}
|
||||
|
||||
handleDocumentClick = e => {
|
||||
// if (this.node && !this.node.contains(e.target)) {
|
||||
// this.props.onClose()
|
||||
// }
|
||||
if (this.node && !this.node.contains(e.target)) {
|
||||
this.props.onClose()
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
// document.addEventListener('click', this.handleDocumentClick, false)
|
||||
// document.addEventListener('keydown', this.handleKeyDown, false)
|
||||
// document.addEventListener('touchend', this.handleDocumentClick, listenerOptions)
|
||||
document.addEventListener('click', this.handleDocumentClick, false)
|
||||
document.addEventListener('keydown', this.handleKeyDown, false)
|
||||
document.addEventListener('touchend', this.handleDocumentClick, listenerOptions)
|
||||
|
||||
// if (this.focusedItem && this.props.openedViaKeyboard) this.focusedItem.focus()
|
||||
|
||||
// this.setState({ mounted: true })
|
||||
this.setState({ mounted: true })
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
// document.removeEventListener('click', this.handleDocumentClick, false)
|
||||
// document.removeEventListener('keydown', this.handleKeyDown, false)
|
||||
// document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions)
|
||||
document.removeEventListener('click', this.handleDocumentClick, false)
|
||||
document.removeEventListener('keydown', this.handleKeyDown, false)
|
||||
document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions)
|
||||
}
|
||||
|
||||
setRef = c => {
|
||||
@ -165,12 +162,10 @@ class PopoverRoot extends PureComponent {
|
||||
const { mounted } = this.state
|
||||
const visible = !!type
|
||||
|
||||
console.log("popover root - type, visible:", type, visible, props, POPOVER_COMPONENTS[type])
|
||||
|
||||
return (
|
||||
<PopoverBase
|
||||
visible={visible}
|
||||
ref={this.setRef}
|
||||
innerRef={this.setRef}
|
||||
{...props}
|
||||
>
|
||||
{
|
||||
|
@ -1,11 +1,245 @@
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'
|
||||
import {
|
||||
followAccount,
|
||||
unfollowAccount,
|
||||
blockAccount,
|
||||
unblockAccount,
|
||||
unmuteAccount,
|
||||
pinAccount,
|
||||
unpinAccount,
|
||||
} from '../../actions/accounts'
|
||||
import {
|
||||
mentionCompose,
|
||||
} from '../../actions/compose'
|
||||
import { initMuteModal } from '../../actions/mutes'
|
||||
import { initReport } from '../../actions/reports'
|
||||
import { openModal } from '../../actions/modal'
|
||||
import { blockDomain, unblockDomain } from '../../actions/domain_blocks'
|
||||
import { unfollowModal, autoPlayGif, me, isStaff } from '../../initial_state'
|
||||
import { makeGetAccount } from '../../selectors'
|
||||
import PopoverLayout from './popover_layout'
|
||||
import Text from '../text'
|
||||
import List from '../list'
|
||||
|
||||
const messages = defineMessages({
|
||||
unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' },
|
||||
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
|
||||
blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' },
|
||||
blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' },
|
||||
unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
|
||||
follow: { id: 'account.follow', defaultMessage: 'Follow' },
|
||||
requested: { id: 'account.requested', defaultMessage: 'Awaiting approval. Click to cancel follow request' },
|
||||
unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },
|
||||
edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' },
|
||||
linkVerifiedOn: { id: 'account.link_verified_on', defaultMessage: 'Ownership of this link was checked on {date}' },
|
||||
account_locked: { id: 'account.locked_info', defaultMessage: 'This account privacy status is set to locked. The owner manually reviews who can follow them.' },
|
||||
mention: { id: 'account.mention', defaultMessage: 'Mention' },
|
||||
unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },
|
||||
block: { id: 'account.block', defaultMessage: 'Block @{name}' },
|
||||
mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },
|
||||
report: { id: 'account.report', defaultMessage: 'Report @{name}' },
|
||||
share: { id: 'account.share', defaultMessage: 'Share @{name}\'s profile' },
|
||||
media: { id: 'account.media', defaultMessage: 'Media' },
|
||||
blockDomain: { id: 'account.block_domain', defaultMessage: 'Hide everything from {domain}' },
|
||||
unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },
|
||||
hideReposts: { id: 'account.hide_reblogs', defaultMessage: 'Hide reposts from @{name}' },
|
||||
showReposts: { id: 'account.show_reblogs', defaultMessage: 'Show reposts from @{name}' },
|
||||
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
|
||||
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
|
||||
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
|
||||
domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
|
||||
mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
|
||||
endorse: { id: 'account.endorse', defaultMessage: 'Feature on profile' },
|
||||
unendorse: { id: 'account.unendorse', defaultMessage: 'Don\'t feature on profile' },
|
||||
admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },
|
||||
add_or_remove_from_list: { id: 'account.add_or_remove_from_list', defaultMessage: 'Add or Remove from lists' },
|
||||
accountFollowsYou: { id: 'account.follows_you', defaultMessage: 'Follows you' },
|
||||
accountBlocked: { id: 'account.blocked', defaultMessage: 'Blocked' },
|
||||
accountMuted: { id: 'account.muted', defaultMessage: 'Muted' },
|
||||
domainBlocked: { id: 'account.domain_blocked', defaultMessage: 'Domain hidden' },
|
||||
});
|
||||
|
||||
const makeMapStateToProps = () => {
|
||||
const getAccount = makeGetAccount();
|
||||
|
||||
const mapStateToProps = (state, { account }) => ({
|
||||
account: getAccount(state, !!account ? account.get('id') : -1),
|
||||
domain: state.getIn(['meta', 'domain']),
|
||||
});
|
||||
|
||||
return mapStateToProps;
|
||||
};
|
||||
|
||||
const mapDispatchToProps = (dispatch, { intl }) => ({
|
||||
|
||||
onFollow (account) {
|
||||
if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) {
|
||||
if (unfollowModal) {
|
||||
dispatch(openModal('CONFIRM', {
|
||||
message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.unfollowConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
}));
|
||||
} else {
|
||||
dispatch(unfollowAccount(account.get('id')));
|
||||
}
|
||||
} else {
|
||||
dispatch(followAccount(account.get('id')));
|
||||
}
|
||||
},
|
||||
|
||||
onBlock (account) {
|
||||
if (account.getIn(['relationship', 'blocking'])) {
|
||||
dispatch(unblockAccount(account.get('id')));
|
||||
} else {
|
||||
dispatch(openModal('CONFIRM', {
|
||||
message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.blockConfirm),
|
||||
onConfirm: () => dispatch(blockAccount(account.get('id'))),
|
||||
secondary: intl.formatMessage(messages.blockAndReport),
|
||||
onSecondary: () => {
|
||||
dispatch(blockAccount(account.get('id')));
|
||||
dispatch(initReport(account));
|
||||
},
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
onMention (account, router) {
|
||||
dispatch(mentionCompose(account, router));
|
||||
},
|
||||
|
||||
onRepostToggle (account) {
|
||||
if (account.getIn(['relationship', 'showing_reblogs'])) {
|
||||
dispatch(followAccount(account.get('id'), false));
|
||||
} else {
|
||||
dispatch(followAccount(account.get('id'), true));
|
||||
}
|
||||
},
|
||||
|
||||
onEndorseToggle (account) {
|
||||
if (account.getIn(['relationship', 'endorsed'])) {
|
||||
dispatch(unpinAccount(account.get('id')));
|
||||
} else {
|
||||
dispatch(pinAccount(account.get('id')));
|
||||
}
|
||||
},
|
||||
|
||||
onReport (account) {
|
||||
dispatch(initReport(account));
|
||||
},
|
||||
|
||||
onMute (account) {
|
||||
if (account.getIn(['relationship', 'muting'])) {
|
||||
dispatch(unmuteAccount(account.get('id')));
|
||||
} else {
|
||||
dispatch(initMuteModal(account));
|
||||
}
|
||||
},
|
||||
|
||||
onBlockDomain (domain) {
|
||||
dispatch(openModal('CONFIRM', {
|
||||
message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values={{ domain: <strong>{domain}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.blockDomainConfirm),
|
||||
onConfirm: () => dispatch(blockDomain(domain)),
|
||||
}));
|
||||
},
|
||||
|
||||
onUnblockDomain (domain) {
|
||||
dispatch(unblockDomain(domain));
|
||||
},
|
||||
|
||||
onAddToList(account){
|
||||
dispatch(openModal('LIST_ADDER', {
|
||||
accountId: account.get('id'),
|
||||
}));
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
export default
|
||||
@injectIntl
|
||||
@connect(makeMapStateToProps, mapDispatchToProps)
|
||||
class ProfileOptionsPopover extends PureComponent {
|
||||
|
||||
makeMenu() {
|
||||
const { account, intl, domain } = this.props;
|
||||
|
||||
let menu = [];
|
||||
|
||||
if (!account) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ('share' in navigator) {
|
||||
menu.push({ title: intl.formatMessage(messages.share, { name: account.get('username') }), onClick: this.handleShare });
|
||||
}
|
||||
|
||||
if (account.get('id') === me) {
|
||||
menu.push({ title: intl.formatMessage(messages.edit_profile), href: '/settings/profile' });
|
||||
menu.push({ title: intl.formatMessage(messages.preferences), href: '/settings/preferences' });
|
||||
menu.push({ title: intl.formatMessage(messages.follow_requests), to: '/follow_requests' });
|
||||
menu.push({ title: intl.formatMessage(messages.mutes), to: '/mutes' });
|
||||
menu.push({ title: intl.formatMessage(messages.blocks), to: '/blocks' });
|
||||
menu.push({ title: intl.formatMessage(messages.domain_blocks), to: '/domain_blocks' });
|
||||
} else {
|
||||
menu.push({ title: intl.formatMessage(messages.mention, { name: account.get('acct') }), onClick: this.props.onMention });
|
||||
|
||||
if (account.getIn(['relationship', 'following'])) {
|
||||
if (account.getIn(['relationship', 'showing_reblogs'])) {
|
||||
menu.push({ title: intl.formatMessage(messages.hideReposts, { name: account.get('username') }), onClick: this.props.onRepostToggle });
|
||||
} else {
|
||||
menu.push({ title: intl.formatMessage(messages.showReposts, { name: account.get('username') }), onClick: this.props.onRepostToggle });
|
||||
}
|
||||
|
||||
menu.push({ title: intl.formatMessage(messages.add_or_remove_from_list), onClick: this.props.onAddToList });
|
||||
menu.push({ title: intl.formatMessage(account.getIn(['relationship', 'endorsed']) ? messages.unendorse : messages.endorse), onClick: this.props.onEndorseToggle });
|
||||
}
|
||||
|
||||
if (account.getIn(['relationship', 'muting'])) {
|
||||
menu.push({ title: intl.formatMessage(messages.unmute, { name: account.get('username') }), onClick: this.props.onMute });
|
||||
} else {
|
||||
menu.push({ title: intl.formatMessage(messages.mute, { name: account.get('username') }), onClick: this.props.onMute });
|
||||
}
|
||||
|
||||
if (account.getIn(['relationship', 'blocking'])) {
|
||||
menu.push({ title: intl.formatMessage(messages.unblock, { name: account.get('username') }), onClick: this.props.onBlock });
|
||||
} else {
|
||||
menu.push({ title: intl.formatMessage(messages.block, { name: account.get('username') }), onClick: this.props.onBlock });
|
||||
}
|
||||
|
||||
menu.push({ title: intl.formatMessage(messages.report, { name: account.get('username') }), onClick: this.props.onReport });
|
||||
}
|
||||
|
||||
if (account.get('acct') !== account.get('username')) {
|
||||
const domain = account.get('acct').split('@')[1];
|
||||
|
||||
if (account.getIn(['relationship', 'domain_blocking'])) {
|
||||
menu.push({ title: intl.formatMessage(messages.unblockDomain, { domain }), onClick: this.props.onUnblockDomain });
|
||||
} else {
|
||||
menu.push({ title: intl.formatMessage(messages.blockDomain, { domain }), onClick: this.props.onBlockDomain });
|
||||
}
|
||||
}
|
||||
|
||||
if (account.get('id') !== me && isStaff) {
|
||||
menu.push({ title: intl.formatMessage(messages.admin_account, { name: account.get('username') }), href: `/admin/accounts/${account.get('id')}` });
|
||||
}
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
|
||||
export default class UserInfoPopover extends PureComponent {
|
||||
render() {
|
||||
const listItems = this.makeMenu()
|
||||
|
||||
return (
|
||||
<PopoverLayout>
|
||||
<Text>testing</Text>
|
||||
<List
|
||||
scrollKey='profile_options'
|
||||
items={listItems}
|
||||
small
|
||||
/>
|
||||
</PopoverLayout>
|
||||
)
|
||||
}
|
||||
|
@ -1,9 +1,29 @@
|
||||
import PopoverLayout from './popover_layout'
|
||||
import List from '../list'
|
||||
|
||||
export default class SidebarMorePopover extends PureComponent {
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
{ /* */ }
|
||||
</div>
|
||||
<PopoverLayout>
|
||||
<List
|
||||
scrollKey='profile_options'
|
||||
items={[
|
||||
{
|
||||
title: 'Help',
|
||||
href: 'https://help.gab.com',
|
||||
},
|
||||
{
|
||||
title: 'Settings',
|
||||
href: '/settings',
|
||||
},
|
||||
{
|
||||
title: 'Log Out',
|
||||
href: '/auth/log_out',
|
||||
},
|
||||
]}
|
||||
small
|
||||
/>
|
||||
</PopoverLayout>
|
||||
)
|
||||
}
|
||||
}
|
278
app/javascript/gabsocial/components/profile_header.js
Normal file
278
app/javascript/gabsocial/components/profile_header.js
Normal file
@ -0,0 +1,278 @@
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes'
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component'
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'
|
||||
import classNames from 'classnames/bind'
|
||||
import {
|
||||
followAccount,
|
||||
unfollowAccount,
|
||||
blockAccount,
|
||||
unblockAccount,
|
||||
} from '../actions/accounts'
|
||||
import { openPopover, closePopover } from '../actions/popover'
|
||||
import { initReport } from '../actions/reports'
|
||||
import { openModal } from '../actions/modal'
|
||||
import { unfollowModal } from '../initial_state'
|
||||
import Avatar from './avatar'
|
||||
import Image from './image'
|
||||
import Text from './text'
|
||||
import Button from './button'
|
||||
import DisplayName from './display_name'
|
||||
import TabBar from './tab_bar'
|
||||
|
||||
const cx = classNames.bind(_s)
|
||||
|
||||
const messages = defineMessages({
|
||||
followers: { id: 'account.followers', defaultMessage: 'Followers' },
|
||||
follows: { id: 'account.follows', defaultMessage: 'Follows' },
|
||||
profile: { id: 'account.profile', defaultMessage: 'Profile' },
|
||||
})
|
||||
|
||||
const mapStateToProps = state => {
|
||||
return {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
const mapDispatchToProps = (dispatch, { intl }) => ({
|
||||
|
||||
openProfileOptionsPopover(props) {
|
||||
console.log("props:", props)
|
||||
dispatch(openPopover('PROFILE_OPTIONS', props))
|
||||
},
|
||||
|
||||
onFollow (account) {
|
||||
if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) {
|
||||
if (unfollowModal) {
|
||||
dispatch(openModal('CONFIRM', {
|
||||
message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.unfollowConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
}));
|
||||
} else {
|
||||
dispatch(unfollowAccount(account.get('id')));
|
||||
}
|
||||
} else {
|
||||
dispatch(followAccount(account.get('id')));
|
||||
}
|
||||
},
|
||||
|
||||
onBlock (account) {
|
||||
if (account.getIn(['relationship', 'blocking'])) {
|
||||
dispatch(unblockAccount(account.get('id')));
|
||||
} else {
|
||||
dispatch(openModal('CONFIRM', {
|
||||
message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.blockConfirm),
|
||||
onConfirm: () => dispatch(blockAccount(account.get('id'))),
|
||||
secondary: intl.formatMessage(messages.blockAndReport),
|
||||
onSecondary: () => {
|
||||
dispatch(blockAccount(account.get('id')));
|
||||
dispatch(initReport(account));
|
||||
},
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
onRepostToggle (account) {
|
||||
if (account.getIn(['relationship', 'showing_reblogs'])) {
|
||||
dispatch(followAccount(account.get('id'), false));
|
||||
} else {
|
||||
dispatch(followAccount(account.get('id'), true));
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
export default
|
||||
@connect(mapStateToProps, mapDispatchToProps)
|
||||
@injectIntl
|
||||
class ProfileHeader extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
account: ImmutablePropTypes.map,
|
||||
intl: PropTypes.object.isRequired,
|
||||
onFollow: PropTypes.func.isRequired,
|
||||
onBlock: PropTypes.func.isRequired,
|
||||
openProfileOptionsPopover: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
handleOpenMore = () => {
|
||||
const { openProfileOptionsPopover, account } = this.props
|
||||
openProfileOptionsPopover({
|
||||
targetRef: this.openMoreNode,
|
||||
position: 'top',
|
||||
account: this.props.account,
|
||||
})
|
||||
}
|
||||
|
||||
handleStartChat = () => {
|
||||
|
||||
}
|
||||
|
||||
handleFollow = () => {
|
||||
|
||||
}
|
||||
|
||||
makeInfo() {
|
||||
const { account, intl } = this.props;
|
||||
|
||||
let info = [];
|
||||
|
||||
if (!account || !me) return info;
|
||||
|
||||
if (me !== account.get('id') && account.getIn(['relationship', 'followed_by'])) {
|
||||
info.push(<span key='followed_by' className='relationship-tag'>{intl.formatMessage(messages.accountFollowsYou)}</span>);
|
||||
} else if (me !== account.get('id') && account.getIn(['relationship', 'blocking'])) {
|
||||
info.push(<span key='blocked' className='relationship-tag'>{intl.formatMessage(messages.accountBlocked)}</span>);
|
||||
}
|
||||
|
||||
if (me !== account.get('id') && account.getIn(['relationship', 'muting'])) {
|
||||
info.push(<span key='muted' className='relationship-tag'>{intl.formatMessage(messages.accountMuted)}</span>);
|
||||
} else if (me !== account.get('id') && account.getIn(['relationship', 'domain_blocking'])) {
|
||||
info.push(<span key='domain_blocked' className='relationship-tag'>{intl.formatMessage(messages.domainBlocked)}</span>);
|
||||
}
|
||||
|
||||
return info;
|
||||
};
|
||||
|
||||
getActionBtn() {
|
||||
const { account, intl } = this.props;
|
||||
|
||||
let actionBtn = null;
|
||||
|
||||
if (!account || !me) return actionBtn;
|
||||
|
||||
if (me !== account.get('id')) {
|
||||
if (!account.get('relationship')) { // Wait until the relationship is loaded
|
||||
//
|
||||
} else if (account.getIn(['relationship', 'requested'])) {
|
||||
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />;
|
||||
} else if (!account.getIn(['relationship', 'blocking'])) {
|
||||
actionBtn = <Button disabled={account.getIn(['relationship', 'blocked_by'])} className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']) })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />;
|
||||
} else if (account.getIn(['relationship', 'blocking'])) {
|
||||
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.props.onBlock} />;
|
||||
}
|
||||
}
|
||||
|
||||
return actionBtn
|
||||
}
|
||||
|
||||
setOpenMoreNodeRef = (n) => {
|
||||
this.openMoreNode = n
|
||||
}
|
||||
|
||||
render() {
|
||||
const { account, intl } = this.props
|
||||
|
||||
const tabs = !account ? null : [
|
||||
{
|
||||
to: `/${account.get('acct')}`,
|
||||
title: 'Timeline',
|
||||
},
|
||||
{
|
||||
to: `/${account.get('acct')}/comments`,
|
||||
title: 'Comments',
|
||||
},
|
||||
{
|
||||
to: `/${account.get('acct')}/media`,
|
||||
title: 'Media',
|
||||
},
|
||||
{
|
||||
to: '',
|
||||
title: 'More',
|
||||
},
|
||||
]
|
||||
|
||||
const headerSrc = !!account ? account.get('header') : ''
|
||||
const headerMissing = headerSrc.indexOf('/headers/original/missing.png') > -1 || !headerSrc
|
||||
|
||||
const avatarContainerClasses = cx({
|
||||
circle: 1,
|
||||
marginTopNeg75PX: !headerMissing,
|
||||
borderColorWhite: 1,
|
||||
border2PX: 1,
|
||||
})
|
||||
|
||||
const avatarSize = headerMissing ? '75' : '150'
|
||||
|
||||
return (
|
||||
<div className={[_s.default, _s.z1, _s.width100PC].join(' ')}>
|
||||
|
||||
{
|
||||
!headerMissing &&
|
||||
<div className={[_s.default, _s.height350PX, _s.width100PC, _s.radiusSmall, _s.overflowHidden].join(' ')}>
|
||||
<Image
|
||||
className={_s.height350PX}
|
||||
src={headerSrc}
|
||||
/>
|
||||
</div>
|
||||
}
|
||||
|
||||
<div className={[_s.default, _s.borderBottom1PX, _s.borderColorSecondary, _s.width100PC].join(' ')}>
|
||||
|
||||
<div className={[_s.default, _s.flexRow, _s.px15].join(' ')}>
|
||||
<div className={avatarContainerClasses}>
|
||||
<Avatar size={avatarSize} account={account} />
|
||||
</div>
|
||||
|
||||
<div className={[_s.default, _s.px15, _s.py10].join(' ')}>
|
||||
<DisplayName account={account} multiline large />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={[_s.default, _s.flexRow, _s.borderBottom1PX, _s.borderColorSecondary, _s.mt5, _s.height53PX].join(' ')}>
|
||||
<div className={[_s.default].join(' ')}>
|
||||
<TabBar tabs={tabs} large />
|
||||
</div>
|
||||
|
||||
<div className={[_s.default, _s.flexRow, _s.marginLeftAuto, _s.py5].join(' ')}>
|
||||
<div ref={this.setOpenMoreNodeRef}>
|
||||
<Button
|
||||
outline
|
||||
icon='ellipsis'
|
||||
iconWidth='18px'
|
||||
iconHeight='18px'
|
||||
iconClassName={_s.fillColorBrand}
|
||||
color='brand'
|
||||
backgroundColor='none'
|
||||
className={[_s.justifyContentCenter, _s.alignItemsCenter, _s.mr10, _s.px10].join(' ')}
|
||||
onClick={this.handleOpenMore}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<Button
|
||||
outline
|
||||
icon='chat'
|
||||
iconWidth='18px'
|
||||
iconHeight='18px'
|
||||
iconClassName={_s.fillColorBrand}
|
||||
color='brand'
|
||||
backgroundColor='none'
|
||||
className={[_s.justifyContentCenter, _s.alignItemsCenter, _s.mr10, _s.px10].join(' ')}
|
||||
onClick={this.handleStartChat}
|
||||
/>
|
||||
|
||||
<Button
|
||||
className={[_s.justifyContentCenter, _s.alignItemsCenter].join(' ')}
|
||||
onClick={this.handleFollow}
|
||||
>
|
||||
<span className={[_s.px15].join(' ')}>
|
||||
<Text
|
||||
color='white'
|
||||
weight='bold'
|
||||
size='medium'
|
||||
className={[_s.px15].join(' ')}
|
||||
>
|
||||
Follow
|
||||
</Text>
|
||||
</span>
|
||||
</Button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@ -43,18 +43,19 @@ class Search extends PureComponent {
|
||||
value: PropTypes.string.isRequired,
|
||||
submitted: PropTypes.bool,
|
||||
onShow: PropTypes.func.isRequired,
|
||||
openInRoute: PropTypes.bool,
|
||||
onChange: PropTypes.func.isRequired,
|
||||
onKeyUp: PropTypes.func.isRequired,
|
||||
handleSubmit: PropTypes.func,
|
||||
withOverlay: PropTypes.bool,
|
||||
handleClear: PropTypes.func.isRequired,
|
||||
onSubmit: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
state = {
|
||||
expanded: false,
|
||||
}
|
||||
|
||||
textbox = React.createRef()
|
||||
|
||||
handleChange = (e) => {
|
||||
this.props.onChange(e.target.value)
|
||||
}
|
||||
@ -68,8 +69,31 @@ class Search extends PureComponent {
|
||||
this.setState({ expanded: false })
|
||||
}
|
||||
|
||||
handleKeyUp = (e) => {
|
||||
const { value } = this.props
|
||||
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
|
||||
this.props.onSubmit();
|
||||
this.context.router.history.push(`/search?q=${value}`);
|
||||
|
||||
} else if (e.key === 'Escape') {
|
||||
this.textbox.blur()
|
||||
}
|
||||
}
|
||||
|
||||
setTextbox = n => {
|
||||
this.textbox = n
|
||||
}
|
||||
|
||||
render() {
|
||||
const { value, submitted, onKeyUp, handleClear, handleSubmit, withOverlay } = this.props
|
||||
const {
|
||||
value,
|
||||
submitted,
|
||||
handleClear,
|
||||
withOverlay
|
||||
} = this.props
|
||||
const { expanded } = this.state
|
||||
|
||||
const hasValue = value ? value.length > 0 || submitted : 0
|
||||
@ -79,10 +103,11 @@ class Search extends PureComponent {
|
||||
<Input
|
||||
hasClear
|
||||
value={value}
|
||||
inputRef={this.setTextbox}
|
||||
prependIcon='search'
|
||||
placeholder='Search on Gab...'
|
||||
onChange={this.handleChange}
|
||||
onKeyUp={onKeyUp}
|
||||
onKeyUp={this.handleKeyUp}
|
||||
onFocus={this.handleFocus}
|
||||
onBlur={this.handleBlur}
|
||||
onClear={handleClear}
|
||||
|
@ -4,6 +4,7 @@ import { injectIntl, defineMessages } from 'react-intl'
|
||||
import Button from './button'
|
||||
import { closeSidebar } from '../actions/sidebar'
|
||||
import { openModal } from '../actions/modal'
|
||||
import { openPopover } from '../actions/popover'
|
||||
import { me } from '../initial_state'
|
||||
import { makeGetAccount } from '../selectors'
|
||||
import SidebarSectionTitle from './sidebar_section_title'
|
||||
@ -37,6 +38,8 @@ const mapStateToProps = state => {
|
||||
return {
|
||||
account: getAccount(state, me),
|
||||
sidebarOpen: state.get('sidebar').sidebarOpen,
|
||||
notificationCount: state.getIn(['notifications', 'unread']),
|
||||
homeItemsQueueCount: state.getIn(['timelines', 'home', 'totalQueuedItemsCount']),
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,6 +47,9 @@ const mapDispatchToProps = (dispatch) => ({
|
||||
onClose() {
|
||||
dispatch(closeSidebar())
|
||||
},
|
||||
openSidebarMorePopover(props) {
|
||||
dispatch(openPopover('SIDEBAR_MORE', props))
|
||||
},
|
||||
onOpenComposeModal() {
|
||||
dispatch(openModal('COMPOSE'))
|
||||
},
|
||||
@ -60,6 +66,9 @@ class Sidebar extends ImmutablePureComponent {
|
||||
sidebarOpen: PropTypes.bool,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
onOpenComposeModal: PropTypes.func.isRequired,
|
||||
openSidebarMorePopover: PropTypes.func.isRequired,
|
||||
notificationCount: PropTypes.number.isRequired,
|
||||
homeItemsQueueCount: PropTypes.number.isRequired,
|
||||
}
|
||||
|
||||
state = {
|
||||
@ -90,12 +99,23 @@ class Sidebar extends ImmutablePureComponent {
|
||||
}
|
||||
|
||||
handleOpenComposeModal = () => {
|
||||
console.log("handleOpenComposeModal")
|
||||
this.props.onOpenComposeModal()
|
||||
}
|
||||
|
||||
handleOpenSidebarMorePopover =() => {
|
||||
console.log("handleOpenSidebarMorePopover")
|
||||
this.props.openSidebarMorePopover({
|
||||
targetRef: this.moreBtnRef,
|
||||
position: 'top',
|
||||
})
|
||||
}
|
||||
|
||||
setMoreButtonRef = n => {
|
||||
this.moreBtnRef = n
|
||||
}
|
||||
|
||||
render() {
|
||||
const { sidebarOpen, intl, account } = this.props
|
||||
const { sidebarOpen, intl, account, notificationCount, homeItemsQueueCount } = this.props
|
||||
const { moreOpen } = this.state
|
||||
|
||||
// : todo :
|
||||
@ -112,19 +132,20 @@ class Sidebar extends ImmutablePureComponent {
|
||||
title: 'Home',
|
||||
icon: 'home',
|
||||
to: '/',
|
||||
count: 124,
|
||||
count: homeItemsQueueCount,
|
||||
},
|
||||
{
|
||||
title: 'Notifications',
|
||||
icon: 'notifications',
|
||||
to: '/notifications',
|
||||
count: 40,
|
||||
},
|
||||
{
|
||||
title: 'Search',
|
||||
icon: 'search-alt',
|
||||
to: '/search',
|
||||
count: notificationCount,
|
||||
},
|
||||
// : todo : show only when search on top is not visible
|
||||
// {
|
||||
// title: 'Search',
|
||||
// icon: 'search-alt',
|
||||
// to: '/search',
|
||||
// },
|
||||
{
|
||||
title: 'Groups',
|
||||
icon: 'group',
|
||||
@ -138,17 +159,17 @@ class Sidebar extends ImmutablePureComponent {
|
||||
{
|
||||
title: 'Chat',
|
||||
icon: 'chat',
|
||||
to: '',
|
||||
// href: 'https://chat.gab.com',
|
||||
href: 'https://chat.gab.com',
|
||||
},
|
||||
{
|
||||
title: 'More',
|
||||
icon: 'more',
|
||||
to: '/',
|
||||
onClick: this.handleOpenSidebarMorePopover,
|
||||
buttonRef: this.setMoreButtonRef
|
||||
},
|
||||
]
|
||||
|
||||
// more:
|
||||
// more modal:
|
||||
// settings/preferences
|
||||
// help
|
||||
// logout
|
||||
@ -172,26 +193,22 @@ class Sidebar extends ImmutablePureComponent {
|
||||
{
|
||||
title: 'Apps',
|
||||
icon: 'apps',
|
||||
to: '',
|
||||
// href: 'https://apps.gab.com',
|
||||
href: 'https://apps.gab.com',
|
||||
},
|
||||
{
|
||||
title: 'Shop',
|
||||
icon: 'shop',
|
||||
to: '',
|
||||
// href: 'https://shop.dissenter.com',
|
||||
href: 'https://shop.dissenter.com',
|
||||
},
|
||||
{
|
||||
title: 'Trends',
|
||||
icon: 'trends',
|
||||
to: '',
|
||||
// href: 'https://trends.gab.com',
|
||||
href: 'https://trends.gab.com',
|
||||
},
|
||||
{
|
||||
title: 'Dissenter',
|
||||
icon: 'dissenter',
|
||||
to: '',
|
||||
// href: 'https://dissenter.com',
|
||||
href: 'https://dissenter.com',
|
||||
},
|
||||
]
|
||||
|
||||
@ -199,7 +216,7 @@ class Sidebar extends ImmutablePureComponent {
|
||||
<header role='banner' className={[_s.default, _s.flexGrow1, _s.z3, _s.alignItemsEnd].join(' ')}>
|
||||
<div className={[_s.default, _s.width240PX].join(' ')}>
|
||||
<div className={[_s.default, _s.positionFixed, _s.top0, _s.height100PC].join(' ')}>
|
||||
<div className={[_s.default, _s.height100PC, _s.width240PX, _s.pr15, _s.my10].join(' ')}>
|
||||
<div className={[_s.default, _s.height100PC, _s.width240PX, _s.pr15, _s.py10, _s.overflowYScroll].join(' ')}>
|
||||
|
||||
<SidebarHeader />
|
||||
|
||||
|
@ -1,20 +1,21 @@
|
||||
import { NavLink } from 'react-router-dom'
|
||||
import classNames from 'classnames/bind'
|
||||
import Button from './button'
|
||||
import Icon from './icon'
|
||||
import Text from './text'
|
||||
|
||||
const cx = classNames.bind(_s)
|
||||
|
||||
export default class SidebarSectionItem extends PureComponent {
|
||||
static propTypes = {
|
||||
to: PropTypes.string,
|
||||
href: PropTypes.string,
|
||||
onClick: PropTypes.func,
|
||||
active: PropTypes.bool,
|
||||
icon: PropTypes.string,
|
||||
image: PropTypes.string,
|
||||
title: PropTypes.string,
|
||||
me: PropTypes.bool,
|
||||
suffix: PropTypes.node,
|
||||
buttonRef: PropTypes.func,
|
||||
}
|
||||
|
||||
state = {
|
||||
@ -30,7 +31,18 @@ export default class SidebarSectionItem extends PureComponent {
|
||||
}
|
||||
|
||||
render() {
|
||||
const { to, active, icon, image, title, me, count } = this.props
|
||||
const {
|
||||
to,
|
||||
active,
|
||||
icon,
|
||||
image,
|
||||
title,
|
||||
me,
|
||||
count,
|
||||
onClick,
|
||||
href,
|
||||
buttonRef
|
||||
} = this.props
|
||||
const { hovering } = this.state
|
||||
|
||||
const iconSize = '16px'
|
||||
@ -49,6 +61,7 @@ export default class SidebarSectionItem extends PureComponent {
|
||||
// border1PX: shouldShowActive,
|
||||
// borderColorSecondary: shouldShowActive,
|
||||
backgroundSubtle2: shouldShowActive,
|
||||
backgroundTransparent: 1,
|
||||
})
|
||||
|
||||
const textClasses = cx({
|
||||
@ -63,7 +76,7 @@ export default class SidebarSectionItem extends PureComponent {
|
||||
|
||||
const iconClasses = cx({
|
||||
fillColorBlack: shouldShowActive,
|
||||
fillcolorSecondary: !hovering && !active,
|
||||
fillColorSecondary: !hovering && !active,
|
||||
})
|
||||
|
||||
const countClasses = cx({
|
||||
@ -82,11 +95,15 @@ export default class SidebarSectionItem extends PureComponent {
|
||||
})
|
||||
|
||||
return (
|
||||
<NavLink
|
||||
<Button
|
||||
to={to}
|
||||
href={href}
|
||||
onClick={onClick}
|
||||
noClasses
|
||||
buttonRef={buttonRef}
|
||||
onMouseEnter={() => this.handleOnMouseEnter()}
|
||||
onMouseLeave={() => this.handleOnMouseLeave()}
|
||||
className={[_s.default, _s.noUnderline, _s.cursorPointer, _s.width100PC, _s.alignItemsStart].join(' ')}
|
||||
className={[_s.default, _s.noUnderline, _s.cursorPointer, _s.width100PC, _s.alignItemsStart, _s.backgroundTransparent].join(' ')}
|
||||
>
|
||||
<div className={containerClasses}>
|
||||
<div className={[_s.default]}>
|
||||
@ -109,7 +126,7 @@ export default class SidebarSectionItem extends PureComponent {
|
||||
</span>
|
||||
}
|
||||
</div>
|
||||
</NavLink>
|
||||
</Button>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -348,7 +348,7 @@ class Status extends ImmutablePureComponent {
|
||||
prepend = (
|
||||
<div className='status__prepend'>
|
||||
<div className='status__prepend-icon-wrapper'>
|
||||
<Icon id='retweet' className='status__prepend-icon' fixedWidth />
|
||||
<Icon id='repost' className='status__prepend-icon' fixedWidth />
|
||||
</div>
|
||||
{/*<FormattedMessage
|
||||
id='status.reposted_by'
|
||||
@ -382,7 +382,7 @@ class Status extends ImmutablePureComponent {
|
||||
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
|
||||
const video = status.getIn(['media_attachments', 0]);
|
||||
|
||||
console.log("VIDEO HERE")
|
||||
// console.log("VIDEO HERE")
|
||||
|
||||
media = (
|
||||
<Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer}>
|
||||
@ -435,6 +435,10 @@ class Status extends ImmutablePureComponent {
|
||||
)
|
||||
}
|
||||
|
||||
// console.log("da status:", status)
|
||||
let quotedStatus = status.get('quotedStatus');
|
||||
// console.log("quotedStatus:", quotedStatus)
|
||||
|
||||
const handlers = this.props.muted ? {} : {
|
||||
reply: this.handleHotkeyReply,
|
||||
favorite: this.handleHotkeyFavorite,
|
||||
@ -509,9 +513,9 @@ class Status extends ImmutablePureComponent {
|
||||
|
||||
<StatusActionBar status={status} account={account} {...other} />
|
||||
|
||||
{ /* <div className={[_s.default, _s.borderTop1PX, _s.borderColorSecondary, _s.pt10, _s.px15, _s.mb10].join(' ')}>
|
||||
<ComposeFormContainer statusId={status.get('id')} shouldCondense />
|
||||
</div> */ }
|
||||
<div className={[_s.default, _s.borderTop1PX, _s.borderColorSecondary, _s.pt10, _s.px15, _s.mb10].join(' ')}>
|
||||
{/*<ComposeFormContainer replyToId={status.get('id')} shouldCondense />*/}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -27,7 +27,7 @@ class StatusContent extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
status: ImmutablePropTypes.map.isRequired,
|
||||
reblogContent: PropTypes.string,
|
||||
reblogStatus: PropTypes.string,
|
||||
expanded: PropTypes.bool,
|
||||
onExpandedToggle: PropTypes.func,
|
||||
onClick: PropTypes.func,
|
||||
|
@ -1,7 +1,7 @@
|
||||
import Toggle from 'react-toggle';
|
||||
import Toggle from 'react-toggle'
|
||||
|
||||
export default class ToggleSwitch extends PureComponent {
|
||||
render() {
|
||||
return <Toggle {...this.props} />
|
||||
};
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
import { injectIntl } from 'react-intl'
|
||||
import { NotificationStack } from 'react-notification'
|
||||
import { dismissAlert } from '../actions/alerts'
|
||||
import { getAlerts } from '../selectors'
|
||||
|
||||
const mapStateToProps = (state, { intl }) => {
|
||||
const notifications = getAlerts(state)
|
||||
|
||||
notifications.forEach(notification => ['title', 'message'].forEach(key => {
|
||||
const value = notification[key]
|
||||
|
||||
if (typeof value === 'object') {
|
||||
notification[key] = intl.formatMessage(value)
|
||||
}
|
||||
}))
|
||||
|
||||
return { notifications }
|
||||
}
|
||||
|
||||
const mapDispatchToProps = (dispatch) => {
|
||||
return {
|
||||
onDismiss: alert => {
|
||||
dispatch(dismissAlert(alert))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(NotificationStack))
|
@ -5,9 +5,9 @@ import {
|
||||
quoteCompose,
|
||||
} from '../actions/compose';
|
||||
import {
|
||||
reblog,
|
||||
repost,
|
||||
favorite,
|
||||
unreblog,
|
||||
unrepost,
|
||||
unfavorite,
|
||||
pin,
|
||||
unpin,
|
||||
@ -25,7 +25,7 @@ import { initMuteModal } from '../actions/mutes';
|
||||
import { initReport } from '../actions/reports';
|
||||
import { openModal } from '../actions/modal';
|
||||
import { boostModal, deleteModal } from '../initial_state';
|
||||
import { showAlertForError } from '../actions/alerts';
|
||||
// import { showAlertForError } from '../actions/alerts';
|
||||
import {
|
||||
createRemovedAccount,
|
||||
groupRemoveStatus
|
||||
@ -127,10 +127,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
|
||||
},
|
||||
|
||||
onEmbed (status) {
|
||||
dispatch(openModal('EMBED', {
|
||||
url: status.get('url'),
|
||||
onError: error => dispatch(showAlertForError(error)),
|
||||
}));
|
||||
// dispatch(openModal('EMBED', {
|
||||
// url: status.get('url'),
|
||||
// onError: error => dispatch(showAlertForError(error)),
|
||||
// }));
|
||||
},
|
||||
|
||||
onDelete (status, history) {
|
||||
|
@ -79,6 +79,7 @@ class ComposeForm extends ImmutablePureComponent {
|
||||
isModalOpen: PropTypes.bool,
|
||||
scheduledAt: PropTypes.instanceOf(Date),
|
||||
setScheduledAt: PropTypes.func.isRequired,
|
||||
replyToId: PropTypes.string,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
@ -231,7 +232,6 @@ class ComposeForm extends ImmutablePureComponent {
|
||||
scheduledAt,
|
||||
spoiler
|
||||
} = this.props
|
||||
const condensed = shouldCondense && !this.props.text && !this.state.composeFocused;
|
||||
const disabled = this.props.isSubmitting;
|
||||
const text = [this.props.spoilerText, countableText(this.props.text)].join('');
|
||||
const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > maxPostCharacterCount || (text.length !== 0 && text.trim().length === 0 && !anyMedia);
|
||||
|
@ -7,6 +7,11 @@ import { WhoToFollowPanel } from '../../../../components/panel'
|
||||
// import TrendsPanel from '../../ui/components/trends_panel'
|
||||
import GroupListItem from '../../../../components/group_list_item'
|
||||
import Block from '../../../../components/block'
|
||||
import Heading from '../../../../components/heading'
|
||||
import Button from '../../../../components/button'
|
||||
import Text from '../../../../components/text'
|
||||
|
||||
import AccountContainer from '../../../../containers/account_container'
|
||||
|
||||
export default class SearchResults extends ImmutablePureComponent {
|
||||
|
||||
@ -25,9 +30,7 @@ export default class SearchResults extends ImmutablePureComponent {
|
||||
|
||||
if (results.isEmpty() && isSmallScreen) {
|
||||
return (
|
||||
<div className='search-results'>
|
||||
<WhoToFollowPanel />
|
||||
</div>
|
||||
<div />
|
||||
)
|
||||
}
|
||||
|
||||
@ -37,23 +40,39 @@ export default class SearchResults extends ImmutablePureComponent {
|
||||
const showGroups = pathname === '/search/groups'
|
||||
const isTop = !showPeople && !showHashtags && !showGroups
|
||||
|
||||
let accounts, statuses, hashtags, groups;
|
||||
let count = 0;
|
||||
let accounts, statuses, hashtags, groups
|
||||
|
||||
if (results.get('accounts') && results.get('accounts').size > 0 && (isTop || showPeople)) {
|
||||
const size = isTop ? Math.min(results.get('accounts').size, 5) : results.get('accounts').size;
|
||||
count += size;
|
||||
accounts = (
|
||||
<div className='search-results__section'>
|
||||
<h5><Icon id='user' fixedWidth /><FormattedMessage id='search_results.accounts' defaultMessage='People' /></h5>
|
||||
{results.get('accounts').slice(0, size).map(accountId => <AccountContainer key={accountId} id={accountId} />)}
|
||||
<div className={[_s.default, _s.py15, _s.px15].join(' ')}>
|
||||
<div className={[_s.default, _s.flexRow, _s.mb15].join(' ')}>
|
||||
<Heading size='h3'>
|
||||
People
|
||||
</Heading>
|
||||
<div className={[_s.default, _s.marginLeftAuto].join(' ')}>
|
||||
<Button
|
||||
text
|
||||
backgroundColor='none'
|
||||
color='brand'
|
||||
to='/search/people'
|
||||
>
|
||||
<Text size='small' color='inherit' weight='bold'>
|
||||
See All
|
||||
</Text>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{
|
||||
results.get('accounts').slice(0, size).map(accountId => <AccountContainer expanded key={accountId} id={accountId} />)
|
||||
}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (results.get('groups') && results.get('groups').size > 0 && (isTop || showGroups)) {
|
||||
const size = isTop ? Math.min(results.get('groups').size, 5) : results.get('groups').size;
|
||||
count += size;
|
||||
groups = (
|
||||
<div className='search-results__section'>
|
||||
<h5><Icon id='users' fixedWidth /><FormattedMessage id='search_results.groups' defaultMessage='Groups' /></h5>
|
||||
@ -64,7 +83,6 @@ export default class SearchResults extends ImmutablePureComponent {
|
||||
|
||||
if (results.get('hashtags') && results.get('hashtags').size > 0 && (isTop || showHashtags)) {
|
||||
const size = isTop ? Math.min(results.get('hashtags').size, 5) : results.get('hashtags').size;
|
||||
count += size;
|
||||
hashtags = (
|
||||
<div className='search-results__section'>
|
||||
<h5><Icon id='hashtag' fixedWidth /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></h5>
|
||||
@ -75,17 +93,6 @@ export default class SearchResults extends ImmutablePureComponent {
|
||||
|
||||
return (
|
||||
<Block>
|
||||
<div className='search-results__header'>
|
||||
<Icon id='search' fixedWidth />
|
||||
<FormattedMessage
|
||||
id='search_results.total'
|
||||
defaultMessage='{count, number} {count, plural, one {result} other {results}}'
|
||||
values={{
|
||||
count
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{accounts}
|
||||
{groups}
|
||||
{statuses}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { List as ImmutableList } from 'immutable'
|
||||
import ComposeForm from '../components/compose_form'
|
||||
import {
|
||||
changeCompose,
|
||||
@ -12,29 +13,31 @@ import {
|
||||
} from '../../../actions/compose'
|
||||
import { me } from '../../../initial_state'
|
||||
|
||||
const mapStateToProps = (state, { status }) => {
|
||||
const mapStateToProps = (state, { replyToId }) => {
|
||||
|
||||
// : todo :
|
||||
//everything needs to be in relation to if there's a status or not
|
||||
const reduxReplyToId = state.getIn(['compose', 'in_reply_to'])
|
||||
const isMatch = reduxReplyToId || replyToId ? reduxReplyToId === replyToId : true
|
||||
|
||||
// console.log("isMatch:", isMatch, reduxReplyToId, replyToId)
|
||||
|
||||
return {
|
||||
edit: state.getIn(['compose', 'id']) !== null,
|
||||
text: state.getIn(['compose', 'text']),
|
||||
suggestions: state.getIn(['compose', 'suggestions']),
|
||||
spoiler: state.getIn(['compose', 'spoiler']),
|
||||
spoilerText: state.getIn(['compose', 'spoiler_text']),
|
||||
privacy: state.getIn(['compose', 'privacy']),
|
||||
focusDate: state.getIn(['compose', 'focusDate']),
|
||||
caretPosition: state.getIn(['compose', 'caretPosition']),
|
||||
preselectDate: state.getIn(['compose', 'preselectDate']),
|
||||
isSubmitting: state.getIn(['compose', 'is_submitting']),
|
||||
isChangingUpload: state.getIn(['compose', 'is_changing_upload']),
|
||||
isUploading: state.getIn(['compose', 'is_uploading']),
|
||||
showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),
|
||||
anyMedia: state.getIn(['compose', 'media_attachments']).size > 0,
|
||||
isModalOpen: state.get('modal').modalType === 'COMPOSE',
|
||||
quoteOfId: state.getIn(['compose', 'quote_of_id']),
|
||||
scheduledAt: state.getIn(['compose', 'scheduled_at']),
|
||||
edit: !isMatch ? null : state.getIn(['compose', 'id']) !== null,
|
||||
text: !isMatch ? '' : state.getIn(['compose', 'text']),
|
||||
suggestions: !isMatch ? ImmutableList() : state.getIn(['compose', 'suggestions']),
|
||||
spoiler: !isMatch ? false : state.getIn(['compose', 'spoiler']),
|
||||
spoilerText: !isMatch ? '' : state.getIn(['compose', 'spoiler_text']),
|
||||
privacy: !isMatch ? null : state.getIn(['compose', 'privacy']),
|
||||
focusDate: !isMatch ? null : state.getIn(['compose', 'focusDate']),
|
||||
caretPosition: !isMatch ? null : state.getIn(['compose', 'caretPosition']),
|
||||
preselectDate: !isMatch ? null : state.getIn(['compose', 'preselectDate']),
|
||||
isSubmitting: !isMatch ? false : state.getIn(['compose', 'is_submitting']),
|
||||
isChangingUpload: !isMatch ? false : state.getIn(['compose', 'is_changing_upload']),
|
||||
isUploading: !isMatch ? false : state.getIn(['compose', 'is_uploading']),
|
||||
showSearch: !isMatch ? false : state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),
|
||||
anyMedia: !isMatch ? false : state.getIn(['compose', 'media_attachments']).size > 0,
|
||||
isModalOpen: !isMatch ? false : state.get('modal').modalType === 'COMPOSE',
|
||||
quoteOfId: !isMatch ? null : state.getIn(['compose', 'quote_of_id']),
|
||||
scheduledAt: !isMatch ? null : state.getIn(['compose', 'scheduled_at']),
|
||||
account: state.getIn(['accounts', me]),
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import {
|
||||
import { initMuteModal } from '../../../actions/mutes';
|
||||
import { initReport } from '../../../actions/reports';
|
||||
import { openModal } from '../../../actions/modal';
|
||||
import { showAlertForError } from '../../../actions/alerts';
|
||||
// import { showAlertForError } from '../../../actions/alerts';
|
||||
import { boostModal, deleteModal } from '../../../initial_state';
|
||||
import { makeGetStatus } from '../../../selectors';
|
||||
import DetailedStatus from '../components/detailed_status';
|
||||
@ -97,10 +97,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
|
||||
},
|
||||
|
||||
onEmbed (status) {
|
||||
dispatch(openModal('EMBED', {
|
||||
url: status.get('url'),
|
||||
onError: error => dispatch(showAlertForError(error)),
|
||||
}));
|
||||
// dispatch(openModal('EMBED', {
|
||||
// url: status.get('url'),
|
||||
// onError: error => dispatch(showAlertForError(error)),
|
||||
// }));
|
||||
},
|
||||
|
||||
onDelete (status, history) {
|
||||
|
@ -1,9 +1,9 @@
|
||||
import Immutable from 'immutable';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { HotKeys } from 'react-hotkeys';
|
||||
import { fetchStatus } from '../../actions/statuses';
|
||||
import Immutable from 'immutable'
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes'
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component'
|
||||
import { HotKeys } from 'react-hotkeys'
|
||||
import { fetchStatus } from '../../actions/statuses'
|
||||
import {
|
||||
favorite,
|
||||
unfavorite,
|
||||
@ -11,27 +11,27 @@ import {
|
||||
unrepost,
|
||||
pin,
|
||||
unpin,
|
||||
} from '../../actions/interactions';
|
||||
} from '../../actions/interactions'
|
||||
import {
|
||||
replyCompose,
|
||||
mentionCompose,
|
||||
} from '../../actions/compose';
|
||||
import { blockAccount } from '../../actions/accounts';
|
||||
} from '../../actions/compose'
|
||||
import { blockAccount } from '../../actions/accounts'
|
||||
import {
|
||||
muteStatus,
|
||||
unmuteStatus,
|
||||
deleteStatus,
|
||||
hideStatus,
|
||||
revealStatus,
|
||||
} from '../../actions/statuses';
|
||||
import { initMuteModal } from '../../actions/mutes';
|
||||
import { initReport } from '../../actions/reports';
|
||||
import { openModal } from '../../actions/modal';
|
||||
import { boostModal, deleteModal, me } from '../../initial_state';
|
||||
import { makeGetStatus } from '../../selectors';
|
||||
import StatusContainer from '../../containers/status_container';
|
||||
import { textForScreenReader, defaultMediaVisibility } from '../../components/status/status';
|
||||
import ColumnIndicator from '../../components/column_indicator';
|
||||
} from '../../actions/statuses'
|
||||
import { initMuteModal } from '../../actions/mutes'
|
||||
import { initReport } from '../../actions/reports'
|
||||
import { openModal } from '../../actions/modal'
|
||||
import { boostModal, deleteModal, me } from '../../initial_state'
|
||||
import { makeGetStatus } from '../../selectors'
|
||||
import StatusContainer from '../../containers/status_container'
|
||||
import { textForScreenReader, defaultMediaVisibility } from '../../components/status/status'
|
||||
import ColumnIndicator from '../../components/column_indicator'
|
||||
import Block from '../../components/block'
|
||||
import Comment from '../../components/comment'
|
||||
|
||||
|
@ -14,7 +14,6 @@ import { fetchFilters } from '../../actions/filters'
|
||||
import { clearHeight } from '../../actions/height_cache'
|
||||
import { openModal } from '../../actions/modal'
|
||||
import WrappedRoute from './util/wrapped_route'
|
||||
import NotificationsContainer from '../../containers/notifications_container'
|
||||
import ModalRoot from '../../components/modal/modal_root'
|
||||
import PopoverRoot from '../../components/popover/popover_root'
|
||||
import UploadArea from '../../components/upload_area'
|
||||
@ -373,9 +372,9 @@ class UI extends PureComponent {
|
||||
componentDidMount() {
|
||||
if (!me) return
|
||||
|
||||
this.hotkeys.__mousetrap__.stopCallback = (e, element) => {
|
||||
return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName)
|
||||
}
|
||||
// this.hotkeys.__mousetrap__.stopCallback = (e, element) => {
|
||||
// return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName)
|
||||
// }
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
@ -489,27 +488,18 @@ class UI extends PureComponent {
|
||||
} : {}
|
||||
|
||||
return (
|
||||
<HotKeys
|
||||
keyMap={keyMap}
|
||||
handlers={handlers}
|
||||
ref={this.setHotkeysRef}
|
||||
attach={window}
|
||||
focused
|
||||
>
|
||||
<div ref={this.setRef}>
|
||||
<SwitchingArea
|
||||
location={location}
|
||||
onLayoutChange={this.handleLayoutChange}
|
||||
>
|
||||
{children}
|
||||
</SwitchingArea>
|
||||
<div ref={this.setRef}>
|
||||
<SwitchingArea
|
||||
location={location}
|
||||
onLayoutChange={this.handleLayoutChange}
|
||||
>
|
||||
{children}
|
||||
</SwitchingArea>
|
||||
|
||||
{ /* <NotificationsContainer /> */ }
|
||||
<ModalRoot />
|
||||
<PopoverRoot />
|
||||
<UploadArea active={draggingOver} onClose={this.closeUploadModal} />
|
||||
</div>
|
||||
</HotKeys>
|
||||
<ModalRoot />
|
||||
<PopoverRoot />
|
||||
<UploadArea active={draggingOver} onClose={this.closeUploadModal} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -1,12 +1,17 @@
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes'
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component'
|
||||
import Sticky from 'react-stickynode'
|
||||
import classNames from 'classnames/bind'
|
||||
import Sidebar from '../components/sidebar'
|
||||
import Avatar from '../components/avatar'
|
||||
import Image from '../components/image'
|
||||
import Text from '../components/text'
|
||||
import Button from '../components/button'
|
||||
import DisplayName from '../components/display_name'
|
||||
import TabBar from '../components/tab_bar'
|
||||
import ProfileHeader from '../components/profile_header'
|
||||
|
||||
const cx = classNames.bind(_s)
|
||||
|
||||
export default class ProfileLayout extends ImmutablePureComponent {
|
||||
static propTypes = {
|
||||
@ -19,25 +24,6 @@ export default class ProfileLayout extends ImmutablePureComponent {
|
||||
render() {
|
||||
const { account, children, layout } = this.props
|
||||
|
||||
const tabs = !account ? null : [
|
||||
{
|
||||
to: `/${account.get('acct')}`,
|
||||
title: 'Timeline',
|
||||
},
|
||||
{
|
||||
to: `/${account.get('acct')}/comments`,
|
||||
title: 'Comments',
|
||||
},
|
||||
{
|
||||
to: `/${account.get('acct')}/media`,
|
||||
title: 'Media',
|
||||
},
|
||||
{
|
||||
to: '',
|
||||
title: 'More',
|
||||
},
|
||||
]
|
||||
|
||||
return (
|
||||
<div className={[_s.default, _s.flexRow, _s.width100PC, _s.heightMin100VH, _s.backgroundColorSecondary3].join(' ')}>
|
||||
|
||||
@ -47,65 +33,8 @@ export default class ProfileLayout extends ImmutablePureComponent {
|
||||
|
||||
<div className={[_s.default, _s.width1015PX, _s.flexRow, _s.justifyContentSpaceBetween, _s.pl15, _s.py15].join(' ')}>
|
||||
<div className={[_s.default, _s.z1, _s.width100PC].join(' ')}>
|
||||
<div className={[_s.default, _s.height350PX, _s.width100PC, _s.radiusSmall, _s.overflowHidden].join(' ')}>
|
||||
<Image className={_s.height350PX} src={account.get('header')} />
|
||||
</div>
|
||||
|
||||
<div className={[_s.default, _s.borderBottom1PX, _s.borderColorSecondary, _s.width100PC].join(' ')}>
|
||||
<div className={[_s.default, _s.flexRow, _s.px15].join(' ')}>
|
||||
<Image
|
||||
className={[_s.circle, _s.marginTopNeg75PX, _s.borderColorWhite, _s.border2PX].join(' ')}
|
||||
height='150px'
|
||||
width='150px'
|
||||
src={account.get('avatar')}
|
||||
/>
|
||||
<div className={[_s.default, _s.px15, _s.py10].join(' ')}>
|
||||
<DisplayName account={account} multiline large />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={[_s.default, _s.flexRow, _s.borderBottom1PX, _s.borderColorSecondary, _s.mt5, _s.height53PX].join(' ')}>
|
||||
<div className={[_s.default].join(' ')}>
|
||||
<TabBar tabs={tabs} large />
|
||||
</div>
|
||||
<div className={[_s.default, _s.flexRow, _s.marginLeftAuto, _s.py5].join(' ')}>
|
||||
<Button
|
||||
outline
|
||||
icon='ellipsis'
|
||||
iconWidth='18px'
|
||||
iconHeight='18px'
|
||||
iconClassName={_s.fillColorBrand}
|
||||
color='brand'
|
||||
backgroundColor='none'
|
||||
className={[_s.justifyContentCenter, _s.alignItemsCenter, _s.mr10, _s.px10].join(' ')}
|
||||
/>
|
||||
<Button
|
||||
outline
|
||||
icon='chat'
|
||||
iconWidth='18px'
|
||||
iconHeight='18px'
|
||||
iconClassName={_s.fillColorBrand}
|
||||
color='brand'
|
||||
backgroundColor='none'
|
||||
className={[_s.justifyContentCenter, _s.alignItemsCenter, _s.mr10, _s.px10].join(' ')}
|
||||
/>
|
||||
<Button
|
||||
className={[_s.justifyContentCenter, _s.alignItemsCenter].join(' ')}
|
||||
>
|
||||
<span className={[_s.px15].join(' ')}>
|
||||
<Text
|
||||
color='white'
|
||||
weight='bold'
|
||||
size='medium'
|
||||
className={[_s.px15].join(' ')}
|
||||
>
|
||||
Follow
|
||||
</Text>
|
||||
</span>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ProfileHeader account={account} />
|
||||
|
||||
<div className={[_s.default, _s.width1015PX, _s.flexRow, _s.justifyContentSpaceBetween, _s.pr15, _s.py15].join(' ')}>
|
||||
<div className={[_s.default, _s.width645PX, _s.z1].join(' ')}>
|
||||
@ -122,6 +51,7 @@ export default class ProfileLayout extends ImmutablePureComponent {
|
||||
</Sticky>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -6,17 +6,40 @@ import Sidebar from '../components/sidebar'
|
||||
export default class SearchLayout extends PureComponent {
|
||||
static propTypes = {
|
||||
actions: PropTypes.array,
|
||||
tabs: PropTypes.array,
|
||||
layout: PropTypes.object,
|
||||
showBackBtn: PropTypes.bool,
|
||||
}
|
||||
|
||||
render() {
|
||||
const { children, showBackBtn, layout, actions, tabs } = this.props
|
||||
const { children, showBackBtn, layout, actions } = this.props
|
||||
|
||||
// const shouldHideFAB = path => path.match(/^\/posts\/|^\/search|^\/getting-started/);
|
||||
// const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : <button key='floating-action-button' onClick={this.handleOpenComposeModal} className='floating-action-button' aria-label={intl.formatMessage(messages.publish)}></button>;
|
||||
|
||||
const tabs = [
|
||||
{
|
||||
title: 'Top',
|
||||
to: '/search'
|
||||
},
|
||||
{
|
||||
title: 'People',
|
||||
to: '/search/people'
|
||||
},
|
||||
{
|
||||
title: 'Groups',
|
||||
to: '/search/groups'
|
||||
},
|
||||
{
|
||||
title: 'Gabs',
|
||||
to: '/search/gabs'
|
||||
},
|
||||
{
|
||||
title: 'Hashtags',
|
||||
to: '/search/hashtags'
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
return (
|
||||
<div className={[_s.default, _s.flexRow, _s.width100PC, _s.heightMin100VH, _s.backgroundColorSecondary3].join(' ')}>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { showAlertForError } from '../actions/alerts';
|
||||
// import { showAlertForError } from '../actions/alerts';
|
||||
|
||||
const defaultFailSuffix = 'FAIL';
|
||||
|
||||
@ -8,7 +8,7 @@ export default function errorsMiddleware() {
|
||||
const isFail = new RegExp(`${defaultFailSuffix}$`, 'g');
|
||||
|
||||
if (action.type.match(isFail)) {
|
||||
dispatch(showAlertForError(action.error));
|
||||
// dispatch(showAlertForError(action.error));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,25 +0,0 @@
|
||||
import {
|
||||
ALERT_SHOW,
|
||||
ALERT_DISMISS,
|
||||
ALERT_CLEAR,
|
||||
} from '../actions/alerts';
|
||||
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
|
||||
|
||||
const initialState = ImmutableList([]);
|
||||
|
||||
export default function alerts(state = initialState, action) {
|
||||
switch(action.type) {
|
||||
case ALERT_SHOW:
|
||||
return state.push(ImmutableMap({
|
||||
key: state.size > 0 ? state.last().get('key') + 1 : 0,
|
||||
title: action.title,
|
||||
message: action.message,
|
||||
}));
|
||||
case ALERT_DISMISS:
|
||||
return state.filterNot(item => item.get('key') === action.alert.key);
|
||||
case ALERT_CLEAR:
|
||||
return state.clear();
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
@ -2,7 +2,6 @@ import { combineReducers } from 'redux-immutable';
|
||||
import popover from './popover';
|
||||
import timelines from './timelines';
|
||||
import meta from './meta';
|
||||
import alerts from './alerts';
|
||||
import { loadingBarReducer } from 'react-redux-loading-bar';
|
||||
import modal from './modal';
|
||||
import user_lists from './user_lists';
|
||||
@ -43,7 +42,6 @@ const reducers = {
|
||||
popover,
|
||||
timelines,
|
||||
meta,
|
||||
alerts,
|
||||
loadingBar: loadingBarReducer,
|
||||
modal,
|
||||
user_lists,
|
||||
|
@ -7,20 +7,17 @@ import {
|
||||
const initialState = Immutable.Map({
|
||||
popoverType: null,
|
||||
placement: null,
|
||||
keyboard: false
|
||||
})
|
||||
|
||||
export default function popoverMenu(state = initialState, action) {
|
||||
switch (action.type) {
|
||||
case POPOVER_OPEN:
|
||||
console.log("POPOVER_OPEN:", action)
|
||||
return {
|
||||
popoverType: action.popoverType,
|
||||
popoverProps: action.popoverProps,
|
||||
}
|
||||
case POPOVER_CLOSE:
|
||||
console.log("POPOVER_CLOSE:", action)
|
||||
return initialState;
|
||||
return initialState
|
||||
default:
|
||||
return state
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
import {
|
||||
REBLOG_REQUEST,
|
||||
REBLOG_FAIL,
|
||||
REPOST_REQUEST,
|
||||
REPOST_FAIL,
|
||||
FAVORITE_REQUEST,
|
||||
FAVORITE_FAIL,
|
||||
UNFAVORITE_REQUEST,
|
||||
@ -42,9 +42,9 @@ export default function statuses(state = initialState, action) {
|
||||
return state.get(action.status.get('id')) === undefined ? state : state.setIn([action.status.get('id'), 'favourited'], false);
|
||||
case UNFAVORITE_REQUEST:
|
||||
return state.setIn([action.status.get('id'), 'favourited'], false);
|
||||
case REBLOG_REQUEST:
|
||||
case REPOST_REQUEST:
|
||||
return state.setIn([action.status.get('id'), 'reblogged'], true);
|
||||
case REBLOG_FAIL:
|
||||
case REPOST_FAIL:
|
||||
return state.get(action.status.get('id')) === undefined ? state : state.setIn([action.status.get('id'), 'reblogged'], false);
|
||||
case STATUS_MUTE_SUCCESS:
|
||||
return state.setIn([action.id, 'muted'], true);
|
||||
|
@ -67,6 +67,7 @@ export const makeGetStatus = () => {
|
||||
return createSelector(
|
||||
[
|
||||
(state, { id }) => state.getIn(['statuses', id]),
|
||||
(state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'quote_of_id'])]),
|
||||
(state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]),
|
||||
(state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]),
|
||||
(state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]),
|
||||
@ -74,7 +75,7 @@ export const makeGetStatus = () => {
|
||||
getFilters,
|
||||
],
|
||||
|
||||
(statusBase, statusRepost, accountBase, accountRepost, username, filters) => {
|
||||
(statusBase, quotedStatus, statusRepost, accountBase, accountRepost, username, filters) => {
|
||||
if (!statusBase) {
|
||||
return null;
|
||||
}
|
||||
@ -95,6 +96,7 @@ export const makeGetStatus = () => {
|
||||
const filtered = regex && regex.test(statusBase.get('reblog') ? statusRepost.get('search_index') : statusBase.get('search_index'));
|
||||
|
||||
return statusBase.withMutations(map => {
|
||||
map.set('quoted_status', quotedStatus);
|
||||
map.set('reblog', statusRepost);
|
||||
map.set('account', accountBase);
|
||||
map.set('filtered', filtered);
|
||||
@ -103,26 +105,6 @@ export const makeGetStatus = () => {
|
||||
);
|
||||
};
|
||||
|
||||
const getAlertsBase = state => state.get('alerts');
|
||||
|
||||
export const getAlerts = createSelector([getAlertsBase], (base) => {
|
||||
let arr = [];
|
||||
|
||||
base.forEach(item => {
|
||||
arr.push({
|
||||
message: item.get('message'),
|
||||
title: item.get('title'),
|
||||
key: item.get('key'),
|
||||
dismissAfter: 5000,
|
||||
barStyle: {
|
||||
zIndex: 200,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
return arr;
|
||||
});
|
||||
|
||||
export const makeGetNotification = () => {
|
||||
return createSelector([
|
||||
(_, base) => base,
|
||||
|
@ -12,7 +12,9 @@ export function textAtCursorMatchesToken(str, caretPosition, searchTokens) {
|
||||
word = str.slice(left, right + caretPosition);
|
||||
}
|
||||
|
||||
if (!word || word.trim().length < 3 || searchTokens.indexOf(word[0]) === -1) {
|
||||
console.log("left, right, word, caretPosition:", left, right, word, caretPosition)
|
||||
|
||||
if (!word || word.trim().length < 2 || searchTokens.indexOf(word[0]) === -1) {
|
||||
return [null, null];
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,11 @@ body {
|
||||
overscroll-behavior-y: none;
|
||||
}
|
||||
|
||||
.overflowYScroll {
|
||||
overflow: hidden;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.statusContent,
|
||||
.statusContent * {
|
||||
margin-top: 0;
|
||||
@ -880,6 +885,10 @@ body {
|
||||
box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, .25);
|
||||
}
|
||||
|
||||
.boxShadow2 {
|
||||
box-shadow: 0 0 15px -5px rgba(0,0,0,0.15);
|
||||
}
|
||||
|
||||
.listStyleNone {
|
||||
list-style: none;
|
||||
}
|
||||
|
@ -88,6 +88,7 @@
|
||||
"blurhash": "^1.0.0",
|
||||
"classnames": "^2.2.5",
|
||||
"compression-webpack-plugin": "^2.0.0",
|
||||
"cron": "^1.8.2",
|
||||
"cross-env": "^5.1.4",
|
||||
"css-loader": "^2.1.1",
|
||||
"cssnano": "^4.1.10",
|
||||
|
16
yarn.lock
16
yarn.lock
@ -4567,6 +4567,13 @@ create-react-context@0.3.0, create-react-context@^0.3.0:
|
||||
gud "^1.0.0"
|
||||
warning "^4.0.3"
|
||||
|
||||
cron@^1.8.2:
|
||||
version "1.8.2"
|
||||
resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce"
|
||||
integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==
|
||||
dependencies:
|
||||
moment-timezone "^0.5.x"
|
||||
|
||||
cross-env@^5.1.4:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d"
|
||||
@ -9239,7 +9246,14 @@ mixin-object@^2.0.1:
|
||||
dependencies:
|
||||
minimist "0.0.8"
|
||||
|
||||
moment@^2.24.0:
|
||||
moment-timezone@^0.5.x:
|
||||
version "0.5.28"
|
||||
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.28.tgz#f093d789d091ed7b055d82aa81a82467f72e4338"
|
||||
integrity sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==
|
||||
dependencies:
|
||||
moment ">= 2.9.0"
|
||||
|
||||
"moment@>= 2.9.0", moment@^2.24.0:
|
||||
version "2.24.0"
|
||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
|
||||
integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
|
||||
|
Loading…
x
Reference in New Issue
Block a user