From 2c5ce38e65d6ed95d7788fc7841864675b546cc0 Mon Sep 17 00:00:00 2001 From: Rijk van Zanten Date: Mon, 13 Apr 2020 17:15:58 -0400 Subject: [PATCH] Small tweaks, large benefits (#404) * Add 160px bottom padding to all pages * Force header column to have 24px min width * Allow resizing of last column in v-table * Fix table row unwanted spacing + offset 2px * Add divider to end of drawer detail * Add down chevron on project chooser hover * Add support for color accented modules * Use yellow header icon in settings * Add link to collections module browse icon * Dont show all items selected on load v-table * Add prepend / append slot to v-checkbox * Add drag handles to field setup settings in tabular * Fix loading state in table * Show all resize handles on hover * Lose breadcrumb in collections module, show singleton title * Wrap activity icon, render textarea full width * Dont render comments section on batch * Allow input to shrink for slots * Fix cursor on v-selects * Prevent input usage when they have click events * Fix margin on divider in fields-management * Fix drag handles on field selects * Fix button / divider spacing * Remove support for divider inset * Fix test warning * Fix table-row test * Fix codesmell * Fix missing scope attr --- src/components/v-button/v-button.vue | 1 + src/components/v-checkbox/readme.md | 8 ++- src/components/v-checkbox/v-checkbox.story.ts | 24 +++++++ src/components/v-checkbox/v-checkbox.vue | 18 ++++-- src/components/v-divider/readme.md | 1 - src/components/v-divider/v-divider.story.ts | 20 ++---- src/components/v-divider/v-divider.vue | 19 +----- src/components/v-input/v-input.vue | 62 +++++++++++++------ src/components/v-select/v-select.vue | 8 +++ .../v-table/table-header/table-header.vue | 8 ++- .../v-table/table-row/table-row.test.ts | 2 +- .../v-table/table-row/table-row.vue | 4 +- src/components/v-table/v-table.vue | 31 ++++++---- src/layouts/tabular/tabular.vue | 27 +++++++- .../collections/routes/browse/browse.vue | 26 ++------ .../collections/routes/detail/detail.vue | 40 +++++------- src/modules/files/routes/detail/detail.vue | 2 +- src/modules/settings/index.ts | 1 + .../data-model/collections/collections.vue | 7 ++- .../components/field-select/field-select.vue | 8 ++- .../fields-management/fields-management.vue | 4 +- .../routes/data-model/fields/fields.vue | 7 ++- src/modules/settings/routes/global/global.vue | 7 ++- .../settings/routes/roles/browse/browse.vue | 7 ++- .../settings/routes/roles/detail/detail.vue | 7 ++- .../routes/webhooks/browse/browse.vue | 7 ++- .../routes/webhooks/detail/detail.vue | 7 ++- src/modules/types.ts | 1 + src/modules/users/routes/detail/detail.vue | 2 +- .../activity-drawer-detail.vue | 39 +++++++----- .../drawer-detail/drawer-detail.test.ts | 2 + .../drawer-detail/drawer-detail.vue | 7 +++ .../components/module-bar/module-bar.vue | 7 +++ .../project-chooser/project-chooser.vue | 23 ++++++- src/views/private/private-view.vue | 2 +- 35 files changed, 289 insertions(+), 157 deletions(-) diff --git a/src/components/v-button/v-button.vue b/src/components/v-button/v-button.vue index 6a5c307e6c..1b0c623f27 100644 --- a/src/components/v-button/v-button.vue +++ b/src/components/v-button/v-button.vue @@ -239,6 +239,7 @@ export default defineComponent({ min-width: 60px; padding: 0 12px; + border-radius: 4px; } &.small { diff --git a/src/components/v-checkbox/readme.md b/src/components/v-checkbox/readme.md index c355392aff..e0bf88df08 100644 --- a/src/components/v-checkbox/readme.md +++ b/src/components/v-checkbox/readme.md @@ -95,9 +95,11 @@ If you can't, you should listen to the `update:indeterminate` event and respond | `indeterminate` | Show the indeterminate state | `false` | ## Slots -| Slot | Description | -|---------|------------------------------------------------------------------------------------------------| -| `label` | Allows custom markup and HTML to be rendered inside the label. Will override the `label` prop. | +| Slot | Description | +|-----------|------------------------------------------------------------------------------------------------| +| `label` | Allows custom markup and HTML to be rendered inside the label. Will override the `label` prop. | +| `prepend` | Rendered right before the checkbox | +| `append` | Rendered right after the label | ## Events | Event | Description | Data | diff --git a/src/components/v-checkbox/v-checkbox.story.ts b/src/components/v-checkbox/v-checkbox.story.ts index 43f5ea5aed..3378b7b29b 100644 --- a/src/components/v-checkbox/v-checkbox.story.ts +++ b/src/components/v-checkbox/v-checkbox.story.ts @@ -112,3 +112,27 @@ export const htmlLabel = () => ({ `, }); + +export const slots = () => ({ + methods: { + onChange: action('change'), + }, + data() { + return { + checked: false, + }; + }, + template: ` +
+ + + + + +
+ `, +}); diff --git a/src/components/v-checkbox/v-checkbox.vue b/src/components/v-checkbox/v-checkbox.vue index 65fa657ceb..57864ce33c 100644 --- a/src/components/v-checkbox/v-checkbox.vue +++ b/src/components/v-checkbox/v-checkbox.vue @@ -8,10 +8,12 @@ :disabled="disabled" :class="{ checked: isChecked }" > - +
+ {{ label }} +
@@ -105,7 +107,7 @@ export default defineComponent({ @include no-wrap; } - & .v-icon { + & .checkbox { --v-icon-color: var(--foreground-subdued); } @@ -116,21 +118,27 @@ export default defineComponent({ color: var(--foreground-subdued); } - .v-icon { + .checkbox { --v-icon-color: var(--foreground-subdued); } } &:not(:disabled):hover { - .v-icon { + .checkbox { --v-icon-color: var(--foreground-subdued); } } &:not(:disabled).checked { - .v-icon { + .checkbox { --v-icon-color: var(--v-checkbox-color); } } + + .prepend, + .append { + display: contents; + font-size: 1rem; + } } diff --git a/src/components/v-divider/readme.md b/src/components/v-divider/readme.md index 8b11101007..f1fc2d6a46 100644 --- a/src/components/v-divider/readme.md +++ b/src/components/v-divider/readme.md @@ -12,7 +12,6 @@ Divides content. Made to be used in `v-list` or `v-tabs` components. | Prop | Description | Default | |------------|-----------------------------------------------------|---------| | `vertical` | Render the divider vertically | `false` | -| `inset` | Insets the divider to align with the (list) content | `false` | ## Events n/a diff --git a/src/components/v-divider/v-divider.story.ts b/src/components/v-divider/v-divider.story.ts index 709a9b6436..3f9dfc44d8 100644 --- a/src/components/v-divider/v-divider.story.ts +++ b/src/components/v-divider/v-divider.story.ts @@ -26,12 +26,9 @@ export const basic = () => vertical: { default: boolean('Vertical', false), }, - inset: { - default: boolean('Inset', false), - }, }, template: ` - + `, }); @@ -42,12 +39,9 @@ export const withText = () => vertical: { default: boolean('Vertical', false), }, - inset: { - default: boolean('Inset', false), - }, }, template: ` - + This is a divider. `, @@ -64,11 +58,7 @@ export const inList = () => VListItemTitle, VIcon, }, - props: { - inset: { - default: boolean('Inset', false), - }, - }, + props: {}, template: ` @@ -79,7 +69,7 @@ export const inList = () => - + @@ -88,7 +78,7 @@ export const inList = () => - + diff --git a/src/components/v-divider/v-divider.vue b/src/components/v-divider/v-divider.vue index b62ba4f13b..5d02ccf67a 100644 --- a/src/components/v-divider/v-divider.vue +++ b/src/components/v-divider/v-divider.vue @@ -1,5 +1,5 @@ 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 @@ - -