@@ -76,7 +80,11 @@ export default defineComponent({
input: emitValue,
}));
- return { _listeners };
+ const hasClick = computed(() => {
+ return listeners.click !== undefined;
+ });
+
+ return { _listeners, hasClick };
function emitValue(event: InputEvent) {
let value = (event.target as HTMLInputElement).value;
@@ -136,24 +144,6 @@ export default defineComponent({
border-color: var(--border-normal);
}
- input {
- flex-grow: 1;
- height: 100%;
- background-color: transparent;
- border: none;
- appearance: none;
-
- &::placeholder {
- color: var(--foreground-subdued);
- }
- }
-
- &.monospace {
- input {
- font-family: var(--family-monospace);
- }
- }
-
.prefix,
.suffix {
color: var(--foreground-subdued);
@@ -164,6 +154,38 @@ export default defineComponent({
}
}
+ input {
+ flex-grow: 1;
+ width: 80%; // allows flex to shrink to allow for slots
+ height: 100%;
+ background-color: transparent;
+ border: none;
+ appearance: none;
+
+ &::placeholder {
+ color: var(--foreground-subdued);
+ }
+ }
+
+ &.has-click {
+ cursor: pointer;
+ input {
+ pointer-events: none;
+ }
+ }
+
+ &.active .input {
+ color: var(--foreground-normal);
+ background-color: var(--background-page);
+ border-color: var(--primary);
+ }
+
+ .input.monospace {
+ input {
+ font-family: var(--family-monospace);
+ }
+ }
+
.append-outer {
margin-left: 8px;
}
diff --git a/src/components/v-select/v-select.vue b/src/components/v-select/v-select.vue
index 3ad50c46b9..d58bb58798 100644
--- a/src/components/v-select/v-select.vue
+++ b/src/components/v-select/v-select.vue
@@ -128,4 +128,12 @@ export default defineComponent({
.monospace {
font-family: var(--family-monospace);
}
+
+.v-input {
+ cursor: pointer;
+
+ ::v-deep input {
+ cursor: pointer;
+ }
+}
diff --git a/src/components/v-table/table-header/table-header.vue b/src/components/v-table/table-header/table-header.vue
index 434acf3a14..cf733fb896 100644
--- a/src/components/v-table/table-header/table-header.vue
+++ b/src/components/v-table/table-header/table-header.vue
@@ -14,7 +14,7 @@
|
+
+
|
@@ -314,7 +316,7 @@ export default defineComponent({
}
}
- th:hover .resize-handle {
+ &:hover .resize-handle {
opacity: 1;
}
}
diff --git a/src/components/v-table/table-row/table-row.test.ts b/src/components/v-table/table-row/table-row.test.ts
index 7552abce03..cb7656f170 100644
--- a/src/components/v-table/table-row/table-row.test.ts
+++ b/src/components/v-table/table-row/table-row.test.ts
@@ -38,7 +38,7 @@ describe('Table / Row', () => {
});
it('Renders right amount of cells per row', async () => {
- expect(component.find('.table-row').findAll('td').length).toBe(2);
+ expect(component.find('.table-row').findAll('td').length).toBe(3);
});
it('Renders the provided element in the nested scoped slot', async () => {
diff --git a/src/components/v-table/table-row/table-row.vue b/src/components/v-table/table-row/table-row.vue
index 120345ffdb..88d73ae888 100644
--- a/src/components/v-table/table-row/table-row.vue
+++ b/src/components/v-table/table-row/table-row.vue
@@ -19,10 +19,12 @@
:class="getClassesForCell(header)"
v-for="header in headers"
:key="header.value"
- :style="{ height: height + 'px', lineHeight: height + 'px' }"
+ :style="{ height: height + 'px', lineHeight: height - 2 + 'px' }"
>
{{ item[header.value] }}
+
+
|
diff --git a/src/components/v-table/v-table.vue b/src/components/v-table/v-table.vue
index d24c97967f..479ce78560 100644
--- a/src/components/v-table/v-table.vue
+++ b/src/components/v-table/v-table.vue
@@ -153,10 +153,18 @@ export default defineComponent({
setup(props, { emit, listeners }) {
const _headers = computed({
get: () => {
- return props.headers.map((header: HeaderRaw) => ({
- ...HeaderDefaults,
- ...header,
- }));
+ return props.headers
+ .map((header: HeaderRaw) => ({
+ ...HeaderDefaults,
+ ...header,
+ }))
+ .map((header) => {
+ if (header.width && header.width < 24) {
+ header.width = 24;
+ }
+
+ return header;
+ });
},
set: (newHeaders: Header[]) => {
emit(
@@ -196,7 +204,7 @@ export default defineComponent({
});
const loadingColSpan = computed
(() => {
- let length = _headers.value.length;
+ let length = _headers.value.length + 1; // +1 account for spacer
if (props.showSelect) length = length + 1;
if (props.showManualSort) length = length + 1;
return `1 / span ${length}`;
@@ -220,7 +228,7 @@ export default defineComponent({
});
const allItemsSelected = computed(() => {
- return props.selection.length === props.items.length;
+ return props.loading === false && props.selection.length === props.items.length;
});
const someItemsSelected = computed(() => {
@@ -231,17 +239,15 @@ export default defineComponent({
const columnStyle = computed(() => {
let gridTemplateColumns = _headers.value
- .map((header, index, array) => {
- if (index !== array.length - 1) {
- return header.width ? `${header.width}px` : 'min-content';
- } else {
- return `minmax(min-content, 1fr)`;
- }
+ .map((header) => {
+ return header.width ? `${header.width}px` : 'min-content';
})
.reduce((acc, val) => (acc += ' ' + val), '');
if (props.showSelect) gridTemplateColumns = 'auto ' + gridTemplateColumns;
if (props.showManualSort) gridTemplateColumns = 'auto ' + gridTemplateColumns;
+
+ gridTemplateColumns = gridTemplateColumns + ' 1fr';
return gridTemplateColumns;
});
@@ -316,6 +322,7 @@ export default defineComponent({
display: grid;
grid-template-columns: var(--grid-columns);
min-width: 100%;
+ border-collapse: collapse;
border-spacing: 0;
::v-deep {
diff --git a/src/layouts/tabular/tabular.vue b/src/layouts/tabular/tabular.vue
index 6f16c366b4..30b3bd0f40 100644
--- a/src/layouts/tabular/tabular.vue
+++ b/src/layouts/tabular/tabular.vue
@@ -2,14 +2,19 @@
-
+
+ >
+
+
+
+
+
diff --git a/src/modules/collections/routes/browse/browse.vue b/src/modules/collections/routes/browse/browse.vue
index cf2b945c14..4a0a05c8c3 100644
--- a/src/modules/collections/routes/browse/browse.vue
+++ b/src/modules/collections/routes/browse/browse.vue
@@ -2,15 +2,11 @@
-
+
-
-
-
-
@@ -131,23 +127,22 @@ export default defineComponent({
const { selection } = useSelection();
const { info: currentCollection, primaryKeyField } = useCollection(collection);
- const { addNewLink, batchLink } = useLinks();
+ const { addNewLink, batchLink, collectionsLink } = useLinks();
const { viewOptions, viewQuery } = useCollectionPreset(collection);
const { confirmDelete, deleting, batchDelete } = useBatchDelete();
- const { breadcrumb } = useBreadcrumb();
return {
currentCollection,
addNewLink,
batchLink,
selection,
- breadcrumb,
confirmDelete,
batchDelete,
deleting,
layout,
viewOptions,
viewQuery,
+ collectionsLink,
};
function useSelection() {
@@ -207,22 +202,13 @@ export default defineComponent({
return `/${currentProjectKey}/collections/${props.collection}/${batchPrimaryKeys}`;
});
- return { addNewLink, batchLink };
- }
-
- function useBreadcrumb() {
- const breadcrumb = computed(() => {
+ const collectionsLink = computed(() => {
const currentProjectKey = projectsStore.state.currentProjectKey;
- return [
- {
- name: i18n.tc('collection', 2),
- to: `/${currentProjectKey}/collections`,
- },
- ];
+ return `/${currentProjectKey}/collections`;
});
- return { breadcrumb };
+ return { addNewLink, batchLink, collectionsLink };
}
},
});
diff --git a/src/modules/collections/routes/detail/detail.vue b/src/modules/collections/routes/detail/detail.vue
index 0ea6c4982a..91363779d9 100644
--- a/src/modules/collections/routes/detail/detail.vue
+++ b/src/modules/collections/routes/detail/detail.vue
@@ -1,19 +1,22 @@
-
+
-
+
-
-
-
-
@@ -110,7 +113,7 @@
@@ -122,7 +125,6 @@
import { defineComponent, computed, toRefs, ref } from '@vue/composition-api';
import useProjectsStore from '@/stores/projects';
import CollectionsNavigation from '../../components/navigation/';
-import { i18n } from '@/lang';
import router from '@/router';
import CollectionsNotFound from '../not-found/';
import useCollection from '@/compositions/use-collection';
@@ -154,7 +156,6 @@ export default defineComponent({
const { collection, primaryKey } = toRefs(props);
const { info: collectionInfo, softDeleteStatus } = useCollection(collection);
- const { breadcrumb } = useBreadcrumb();
const {
isNew,
@@ -176,12 +177,16 @@ export default defineComponent({
const confirmDelete = ref(false);
const confirmSoftDelete = ref(false);
+ const backLink = computed(
+ () => `/${currentProjectKey.value}/collections/${collection.value}/`
+ );
+
return {
item,
loading,
+ backLink,
error,
isNew,
- breadcrumb,
edits,
hasEdits,
saving,
@@ -199,21 +204,6 @@ export default defineComponent({
softDeleteStatus,
};
- function useBreadcrumb() {
- const breadcrumb = computed(() => [
- {
- name: i18n.tc('collection', 2),
- to: `/${currentProjectKey.value}/collections/`,
- },
- {
- name: collectionInfo.value?.name,
- to: `/${currentProjectKey.value}/collections/${props.collection}/`,
- },
- ]);
-
- return { breadcrumb };
- }
-
async function saveAndQuit() {
await save();
router.push(`/${currentProjectKey.value}/collections/${props.collection}`);
diff --git a/src/modules/files/routes/detail/detail.vue b/src/modules/files/routes/detail/detail.vue
index 59e245e965..2f14d51705 100644
--- a/src/modules/files/routes/detail/detail.vue
+++ b/src/modules/files/routes/detail/detail.vue
@@ -72,7 +72,7 @@
diff --git a/src/modules/settings/index.ts b/src/modules/settings/index.ts
index 20ea7def9b..c1163e55ec 100644
--- a/src/modules/settings/index.ts
+++ b/src/modules/settings/index.ts
@@ -9,6 +9,7 @@ export default defineModule(({ i18n }) => ({
id: 'settings',
name: i18n.t('settings'),
icon: 'settings',
+ color: 'var(--warning)',
routes: [
{
path: '/',
diff --git a/src/modules/settings/routes/data-model/collections/collections.vue b/src/modules/settings/routes/data-model/collections/collections.vue
index 87a17d10dd..634a8d6477 100644
--- a/src/modules/settings/routes/data-model/collections/collections.vue
+++ b/src/modules/settings/routes/data-model/collections/collections.vue
@@ -1,7 +1,7 @@
-
+
@@ -104,4 +104,9 @@ export default defineComponent({
.v-table {
padding: var(--content-padding);
}
+
+.header-icon {
+ --v-button-color-disabled: var(--warning);
+ --v-button-background-color-disabled: var(--warning-alt);
+}
diff --git a/src/modules/settings/routes/data-model/fields/components/field-select/field-select.vue b/src/modules/settings/routes/data-model/fields/components/field-select/field-select.vue
index f7ed211762..f5e884914c 100644
--- a/src/modules/settings/routes/data-model/fields/components/field-select/field-select.vue
+++ b/src/modules/settings/routes/data-model/fields/components/field-select/field-select.vue
@@ -1,9 +1,9 @@
-
+
diff --git a/src/modules/settings/routes/data-model/fields/components/fields-management/fields-management.vue b/src/modules/settings/routes/data-model/fields/components/fields-management/fields-management.vue
index c1e7a080a8..217694bc56 100644
--- a/src/modules/settings/routes/data-model/fields/components/fields-management/fields-management.vue
+++ b/src/modules/settings/routes/data-model/fields/components/fields-management/fields-management.vue
@@ -25,7 +25,7 @@
large
@click="openFieldSetup()"
>
-
+
{{ $t('add_field') }}
@@ -243,7 +243,7 @@ export default defineComponent({
diff --git a/src/modules/settings/routes/global/global.vue b/src/modules/settings/routes/global/global.vue
index 9eacc25509..17b5eb186c 100644
--- a/src/modules/settings/routes/global/global.vue
+++ b/src/modules/settings/routes/global/global.vue
@@ -1,7 +1,7 @@
-
+
@@ -62,4 +62,9 @@ export default defineComponent({
.settings {
padding: var(--content-padding);
}
+
+.header-icon {
+ --v-button-color-disabled: var(--warning);
+ --v-button-background-color-disabled: var(--warning-alt);
+}
diff --git a/src/modules/settings/routes/roles/browse/browse.vue b/src/modules/settings/routes/roles/browse/browse.vue
index 9eb00fa41a..4673ac175a 100644
--- a/src/modules/settings/routes/roles/browse/browse.vue
+++ b/src/modules/settings/routes/roles/browse/browse.vue
@@ -1,7 +1,7 @@
-
+
@@ -175,4 +175,9 @@ export default defineComponent({
.layout {
--layout-offset-top: 64px;
}
+
+.header-icon {
+ --v-button-color-disabled: var(--warning);
+ --v-button-background-color-disabled: var(--warning-alt);
+}
diff --git a/src/modules/settings/routes/roles/detail/detail.vue b/src/modules/settings/routes/roles/detail/detail.vue
index c22b58bdd5..3e0d3eec28 100644
--- a/src/modules/settings/routes/roles/detail/detail.vue
+++ b/src/modules/settings/routes/roles/detail/detail.vue
@@ -1,7 +1,7 @@
-
+
@@ -194,4 +194,9 @@ export default defineComponent({
.v-form {
padding: var(--content-padding);
}
+
+.header-icon {
+ --v-button-color-disabled: var(--warning);
+ --v-button-background-color-disabled: var(--warning-alt);
+}
diff --git a/src/modules/settings/routes/webhooks/browse/browse.vue b/src/modules/settings/routes/webhooks/browse/browse.vue
index ddd0eb01b6..0ddddb2a25 100644
--- a/src/modules/settings/routes/webhooks/browse/browse.vue
+++ b/src/modules/settings/routes/webhooks/browse/browse.vue
@@ -1,7 +1,7 @@
-
+
@@ -175,4 +175,9 @@ export default defineComponent({
.layout {
--layout-offset-top: 64px;
}
+
+.header-icon {
+ --v-button-color-disabled: var(--warning);
+ --v-button-background-color-disabled: var(--warning-alt);
+}
diff --git a/src/modules/settings/routes/webhooks/detail/detail.vue b/src/modules/settings/routes/webhooks/detail/detail.vue
index a4c8c281de..6207c6ceff 100644
--- a/src/modules/settings/routes/webhooks/detail/detail.vue
+++ b/src/modules/settings/routes/webhooks/detail/detail.vue
@@ -1,7 +1,7 @@
-
+
@@ -194,4 +194,9 @@ export default defineComponent({
.v-form {
padding: var(--content-padding);
}
+
+.header-icon {
+ --v-button-color-disabled: var(--warning);
+ --v-button-background-color-disabled: var(--warning-alt);
+}
diff --git a/src/modules/types.ts b/src/modules/types.ts
index d4eda02379..31b864e626 100644
--- a/src/modules/types.ts
+++ b/src/modules/types.ts
@@ -9,6 +9,7 @@ export type ModuleConfig = {
name: string | VueI18n.TranslateResult;
routes?: RouteConfig[];
link?: string;
+ color?: string;
};
export type ModuleContext = { i18n: VueI18n };
diff --git a/src/modules/users/routes/detail/detail.vue b/src/modules/users/routes/detail/detail.vue
index 6d390e4e78..4bc3c2de42 100644
--- a/src/modules/users/routes/detail/detail.vue
+++ b/src/modules/users/routes/detail/detail.vue
@@ -72,7 +72,7 @@
diff --git a/src/views/private/components/activity-drawer-detail/activity-drawer-detail.vue b/src/views/private/components/activity-drawer-detail/activity-drawer-detail.vue
index 77ff955c5a..4178bb5d9b 100644
--- a/src/views/private/components/activity-drawer-detail/activity-drawer-detail.vue
+++ b/src/views/private/components/activity-drawer-detail/activity-drawer-detail.vue
@@ -5,6 +5,7 @@
:placeholder="$t('leave_comment')"
v-model="newCommentContent"
expand-on-focus
+ full-width
>
-
-
- {{ act.action_by.first_name }} {{ act.action_by.last_name }}
-
-
- {{ $t('private_user') }}
-
-
- {{ $t('external') }}
-
-
-
- {{ act.date_relative }}
+
@@ -152,7 +155,10 @@ export default defineComponent({
...record,
date_relative: await localizedFormatDistance(
new Date(record.action_on),
- new Date()
+ new Date(),
+ {
+ addSuffix: true,
+ }
),
});
}
@@ -237,6 +243,11 @@ export default defineComponent({
}
}
+ .name,
+ .date {
+ line-height: 1.25;
+ }
+
.name {
margin-right: 8px;
}
diff --git a/src/views/private/components/drawer-detail/drawer-detail.test.ts b/src/views/private/components/drawer-detail/drawer-detail.test.ts
index 4e2e12a3bd..a5ccd498e2 100644
--- a/src/views/private/components/drawer-detail/drawer-detail.test.ts
+++ b/src/views/private/components/drawer-detail/drawer-detail.test.ts
@@ -3,12 +3,14 @@ import VueCompositionAPI, { ref } from '@vue/composition-api';
import DrawerDetail from './drawer-detail.vue';
import * as GroupableComposition from '@/compositions/groupable/groupable';
import VIcon from '@/components/v-icon';
+import VDivider from '@/components/v-divider';
import TransitionExpand from '@/components/transition/expand';
const localVue = createLocalVue();
localVue.use(VueCompositionAPI);
localVue.component('v-icon', VIcon);
localVue.component('transition-expand', TransitionExpand);
+localVue.component('v-divider', VDivider);
describe('Drawer Detail', () => {
it('Uses the useGroupable composition', () => {
diff --git a/src/views/private/components/drawer-detail/drawer-detail.vue b/src/views/private/components/drawer-detail/drawer-detail.vue
index 56d46391d2..6804d281e8 100644
--- a/src/views/private/components/drawer-detail/drawer-detail.vue
+++ b/src/views/private/components/drawer-detail/drawer-detail.vue
@@ -13,6 +13,7 @@
+
@@ -88,4 +89,10 @@ export default defineComponent({
padding: 20px;
}
}
+
+.v-divider {
+ --v-divider-color: var(--border-normal);
+
+ margin: 0 20px;
+}
diff --git a/src/views/private/components/module-bar/module-bar.vue b/src/views/private/components/module-bar/module-bar.vue
index 29efe94998..6728810e27 100644
--- a/src/views/private/components/module-bar/module-bar.vue
+++ b/src/views/private/components/module-bar/module-bar.vue
@@ -10,6 +10,13 @@
:to="module.to"
:href="module.href"
tile
+ :style="
+ module.color
+ ? {
+ '--v-button-background-color-activated': module.color,
+ }
+ : null
+ "
>
diff --git a/src/views/private/components/project-chooser/project-chooser.vue b/src/views/private/components/project-chooser/project-chooser.vue
index e79a44d569..4a3d92c840 100644
--- a/src/views/private/components/project-chooser/project-chooser.vue
+++ b/src/views/private/components/project-chooser/project-chooser.vue
@@ -1,8 +1,9 @@