mirror of
https://github.com/kremalicious/umami.git
synced 2024-11-15 17:55:08 +01:00
Mobile layout updates.
This commit is contained in:
parent
98b2ee29ef
commit
0b846b482d
@ -8,14 +8,12 @@ a.link:visited {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.link:hover:before {
|
a.link span {
|
||||||
content: '';
|
border-bottom: 2px solid transparent;
|
||||||
position: absolute;
|
}
|
||||||
bottom: -2px;
|
|
||||||
width: 100%;
|
a.link:hover span {
|
||||||
height: 2px;
|
border-bottom: 2px solid var(--primary400);
|
||||||
background: var(--primary400);
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a.link.large {
|
a.link.large {
|
||||||
|
@ -28,6 +28,10 @@
|
|||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.item:last-child {
|
||||||
|
margin-top: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
.button {
|
.button {
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
}
|
}
|
||||||
|
@ -76,12 +76,13 @@ export default Table;
|
|||||||
|
|
||||||
export const TableRow = ({ columns, row }) => (
|
export const TableRow = ({ columns, row }) => (
|
||||||
<div className={classNames(styles.row, 'row')}>
|
<div className={classNames(styles.row, 'row')}>
|
||||||
{columns.map(({ key, render, className, style, cell }, index) => (
|
{columns.map(({ key, label, render, className, style, cell }, index) => (
|
||||||
<div
|
<div
|
||||||
key={`${key}-${index}`}
|
key={`${key}-${index}`}
|
||||||
className={classNames(styles.cell, className, cell?.className)}
|
className={classNames(styles.cell, className, cell?.className)}
|
||||||
style={{ ...style, ...cell?.style }}
|
style={{ ...style, ...cell?.style }}
|
||||||
>
|
>
|
||||||
|
{label && <label>{label}</label>}
|
||||||
{render ? render(row) : row[key]}
|
{render ? render(row) : row[key]}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
@ -3,6 +3,12 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.table label {
|
||||||
|
display: none;
|
||||||
|
font-size: var(--font-size-xsmall);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
border-bottom: 1px solid var(--gray300);
|
border-bottom: 1px solid var(--gray300);
|
||||||
}
|
}
|
||||||
@ -26,5 +32,24 @@
|
|||||||
|
|
||||||
.cell {
|
.cell {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 992px) {
|
||||||
|
.table label {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cell {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
.buttons {
|
.buttons {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.buttons button + * {
|
.buttons button + * {
|
||||||
|
@ -7,7 +7,7 @@ import { dateFormat } from 'lib/date';
|
|||||||
import useLocale from 'hooks/useLocale';
|
import useLocale from 'hooks/useLocale';
|
||||||
import useTheme from 'hooks/useTheme';
|
import useTheme from 'hooks/useTheme';
|
||||||
import useForceUpdate from 'hooks/useForceUpdate';
|
import useForceUpdate from 'hooks/useForceUpdate';
|
||||||
import { DEFAUL_CHART_HEIGHT, DEFAULT_ANIMATION_DURATION, THEME_COLORS } from 'lib/constants';
|
import { DEFAULT_ANIMATION_DURATION, THEME_COLORS } from 'lib/constants';
|
||||||
import styles from './BarChart.module.css';
|
import styles from './BarChart.module.css';
|
||||||
import ChartTooltip from './ChartTooltip';
|
import ChartTooltip from './ChartTooltip';
|
||||||
|
|
||||||
@ -16,7 +16,6 @@ export default function BarChart({
|
|||||||
datasets,
|
datasets,
|
||||||
unit,
|
unit,
|
||||||
records,
|
records,
|
||||||
height = DEFAUL_CHART_HEIGHT,
|
|
||||||
animationDuration = DEFAULT_ANIMATION_DURATION,
|
animationDuration = DEFAULT_ANIMATION_DURATION,
|
||||||
className,
|
className,
|
||||||
stacked = false,
|
stacked = false,
|
||||||
@ -215,7 +214,6 @@ export default function BarChart({
|
|||||||
data-tip=""
|
data-tip=""
|
||||||
data-for={`${chartId}-tooltip`}
|
data-for={`${chartId}-tooltip`}
|
||||||
className={classNames(styles.chart, className)}
|
className={classNames(styles.chart, className)}
|
||||||
style={{ height }}
|
|
||||||
>
|
>
|
||||||
<canvas ref={canvas} />
|
<canvas ref={canvas} />
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
.chart {
|
.chart {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 992px) {
|
||||||
|
.chart {
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,3 +95,9 @@
|
|||||||
background: var(--primary400);
|
background: var(--primary400);
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 992px) {
|
||||||
|
.body {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -96,7 +96,6 @@ export default function RealtimeViews({ websiteId, data, websites }) {
|
|||||||
title={<FormattedMessage id="metrics.referrers" defaultMessage="Referrers" />}
|
title={<FormattedMessage id="metrics.referrers" defaultMessage="Referrers" />}
|
||||||
metric={<FormattedMessage id="metrics.views" defaultMessage="Views" />}
|
metric={<FormattedMessage id="metrics.views" defaultMessage="Views" />}
|
||||||
data={referrers}
|
data={referrers}
|
||||||
height={400}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{filter === FILTER_PAGES && (
|
{filter === FILTER_PAGES && (
|
||||||
@ -105,7 +104,6 @@ export default function RealtimeViews({ websiteId, data, websites }) {
|
|||||||
metric={<FormattedMessage id="metrics.views" defaultMessage="Views" />}
|
metric={<FormattedMessage id="metrics.views" defaultMessage="Views" />}
|
||||||
renderLabel={renderLink}
|
renderLabel={renderLink}
|
||||||
data={pages}
|
data={pages}
|
||||||
height={400}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import classNames from 'classnames';
|
||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
import Link from 'components/common/Link';
|
import Link from 'components/common/Link';
|
||||||
import OverflowText from 'components/common/OverflowText';
|
import OverflowText from 'components/common/OverflowText';
|
||||||
@ -30,24 +31,28 @@ export default function WebsiteHeader({ websiteId, title, domain, showLink = fal
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PageHeader>
|
<PageHeader className="row">
|
||||||
<div className={styles.title}>{header}</div>
|
<div className={classNames(styles.title, 'col-12 col-lg-4')}>{header}</div>
|
||||||
<ActiveUsers className={styles.active} websiteId={websiteId} />
|
<div className={classNames(styles.active, 'col-6 col-lg-4')}>
|
||||||
<ButtonLayout align="right">
|
<ActiveUsers websiteId={websiteId} />
|
||||||
<RefreshButton websiteId={websiteId} />
|
</div>
|
||||||
{showLink && (
|
<div className="col-6 col-lg-4">
|
||||||
<Link
|
<ButtonLayout align="right">
|
||||||
href="/website/[...id]"
|
<RefreshButton websiteId={websiteId} />
|
||||||
as={`/website/${websiteId}/${title}`}
|
{showLink && (
|
||||||
className={styles.link}
|
<Link
|
||||||
icon={<Arrow />}
|
href="/website/[...id]"
|
||||||
size="small"
|
as={`/website/${websiteId}/${title}`}
|
||||||
iconRight
|
className={styles.link}
|
||||||
>
|
icon={<Arrow />}
|
||||||
<FormattedMessage id="label.view-details" defaultMessage="View details" />
|
size="small"
|
||||||
</Link>
|
iconRight
|
||||||
)}
|
>
|
||||||
</ButtonLayout>
|
<FormattedMessage id="label.view-details" defaultMessage="View details" />
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
|
</ButtonLayout>
|
||||||
|
</div>
|
||||||
</PageHeader>
|
</PageHeader>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,12 @@
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 576px) {
|
.active {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 992px) {
|
||||||
.active {
|
.active {
|
||||||
display: none;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,6 @@ export default function RealtimeDashboard() {
|
|||||||
metric={<FormattedMessage id="metrics.visitors" defaultMessage="Visitors" />}
|
metric={<FormattedMessage id="metrics.visitors" defaultMessage="Visitors" />}
|
||||||
data={countries}
|
data={countries}
|
||||||
renderLabel={renderCountryName}
|
renderLabel={renderCountryName}
|
||||||
height={500}
|
|
||||||
/>
|
/>
|
||||||
</GridColumn>
|
</GridColumn>
|
||||||
<GridColumn xs={12} lg={8}>
|
<GridColumn xs={12} lg={8}>
|
||||||
|
@ -68,7 +68,7 @@ export default function TestConsole() {
|
|||||||
{show && (
|
{show && (
|
||||||
<div className={classNames(styles.test, 'row')}>
|
<div className={classNames(styles.test, 'row')}>
|
||||||
<div className="col-4">
|
<div className="col-4">
|
||||||
<PageHeader>Page links</PageHeader>
|
<PageHeader>Page links</PageHeader>Nmo
|
||||||
<div>
|
<div>
|
||||||
<Link href={`?page=1`}>
|
<Link href={`?page=1`}>
|
||||||
<a>page one</a>
|
<a>page one</a>
|
||||||
@ -79,6 +79,11 @@ export default function TestConsole() {
|
|||||||
<a>page two</a>
|
<a>page two</a>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<Link href={`https://www.google.com`}>
|
||||||
|
<a className="umami--click--external-link">external link</a>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-4">
|
<div className="col-4">
|
||||||
<PageHeader>CSS events</PageHeader>
|
<PageHeader>CSS events</PageHeader>
|
||||||
|
@ -53,23 +53,23 @@ export default function AccountSettings() {
|
|||||||
{
|
{
|
||||||
key: 'username',
|
key: 'username',
|
||||||
label: <FormattedMessage id="label.username" defaultMessage="Username" />,
|
label: <FormattedMessage id="label.username" defaultMessage="Username" />,
|
||||||
className: 'col-4 col-md-3',
|
className: 'col-12 col-lg-4',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'is_admin',
|
key: 'is_admin',
|
||||||
label: <FormattedMessage id="label.administrator" defaultMessage="Administrator" />,
|
label: <FormattedMessage id="label.administrator" defaultMessage="Administrator" />,
|
||||||
className: 'col-4 col-md-3',
|
className: 'col-12 col-lg-3',
|
||||||
render: Checkmark,
|
render: Checkmark,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'dashboard',
|
key: 'dashboard',
|
||||||
label: <FormattedMessage id="label.dashboard" defaultMessage="Dashboard" />,
|
label: <FormattedMessage id="label.dashboard" defaultMessage="Dashboard" />,
|
||||||
className: 'col-4 col-md-3',
|
className: 'col-12 col-lg-3',
|
||||||
render: DashboardLink,
|
render: DashboardLink,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'actions',
|
key: 'actions',
|
||||||
className: classNames(styles.buttons, 'col-12 col-md-3 pt-2 pt-md-0'),
|
className: classNames(styles.buttons, 'col-12 col-lg-2 pt-2 pt-md-0'),
|
||||||
render: Buttons,
|
render: Buttons,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
@ -7,5 +7,5 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.active {
|
.active {
|
||||||
border: 1px solid var(--gray500);
|
border: 1px solid var(--primary400);
|
||||||
}
|
}
|
||||||
|
@ -101,19 +101,19 @@ export default function WebsiteSettings() {
|
|||||||
{
|
{
|
||||||
key: 'name',
|
key: 'name',
|
||||||
label: <FormattedMessage id="label.name" defaultMessage="Name" />,
|
label: <FormattedMessage id="label.name" defaultMessage="Name" />,
|
||||||
className: 'col-4 col-xl-3',
|
className: 'col-12 col-lg-4 col-xl-3',
|
||||||
render: DetailsLink,
|
render: DetailsLink,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'domain',
|
key: 'domain',
|
||||||
label: <FormattedMessage id="label.domain" defaultMessage="Domain" />,
|
label: <FormattedMessage id="label.domain" defaultMessage="Domain" />,
|
||||||
className: 'col-4 col-xl-3',
|
className: 'col-12 col-lg-4 col-xl-3',
|
||||||
render: Domain,
|
render: Domain,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'account',
|
key: 'account',
|
||||||
label: <FormattedMessage id="label.owner" defaultMessage="Owner" />,
|
label: <FormattedMessage id="label.owner" defaultMessage="Owner" />,
|
||||||
className: 'col-4 col-xl-1',
|
className: 'col-12 col-lg-4 col-xl-1',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'action',
|
key: 'action',
|
||||||
@ -126,13 +126,13 @@ export default function WebsiteSettings() {
|
|||||||
{
|
{
|
||||||
key: 'name',
|
key: 'name',
|
||||||
label: <FormattedMessage id="label.name" defaultMessage="Name" />,
|
label: <FormattedMessage id="label.name" defaultMessage="Name" />,
|
||||||
className: 'col-6 col-xl-4',
|
className: 'col-12 col-lg-6 col-xl-4',
|
||||||
render: DetailsLink,
|
render: DetailsLink,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'domain',
|
key: 'domain',
|
||||||
label: <FormattedMessage id="label.domain" defaultMessage="Domain" />,
|
label: <FormattedMessage id="label.domain" defaultMessage="Domain" />,
|
||||||
className: 'col-6 col-xl-4',
|
className: 'col-12 col-lg-6 col-xl-4',
|
||||||
render: Domain,
|
render: Domain,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.buttons {
|
.buttons {
|
||||||
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailLink {
|
.detailLink {
|
||||||
|
Loading…
Reference in New Issue
Block a user