From 5fba6b67ac4dcaa87812c4bf44e089ad3d6926eb Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Thu, 14 Aug 2025 08:56:00 +0200 Subject: [PATCH 01/16] feat: define custom tailwind breakpoints that match ours --- packages/web-runtime/src/tailwind.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-runtime/src/tailwind.css b/packages/web-runtime/src/tailwind.css index 8dfcc9c134..567663d570 100644 --- a/packages/web-runtime/src/tailwind.css +++ b/packages/web-runtime/src/tailwind.css @@ -2,4 +2,9 @@ @theme { --spacing: 4px; + --breakpoint-xs: 580px; + --breakpoint-sm: 640px; + --breakpoint-md: 960px; + --breakpoint-lg: 1200px; + --breakpoint-xl: 1600px; } From 4209401f716806e97622363299c77923bf596003 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Thu, 14 Aug 2025 10:09:28 +0200 Subject: [PATCH 02/16] refactor: remove/migrate zero margins and paddings Some could be removed completely because those are already being handled via the Tailwind preflight. Others are now implemented via utility classes. A few of them need to stay as they are because they overwrite styles from vendors e.g. --- .../components/OcFileInput/OcFileInput.vue | 3 +- .../src/components/OcGrid/OcGrid.vue | 12 ---- .../src/components/OcModal/OcModal.vue | 3 +- .../__snapshots__/OcModal.spec.ts.snap | 8 +-- .../components/OcPagination/OcPagination.vue | 4 +- .../src/components/OcRadio/OcRadio.vue | 3 +- .../components/OcRecipient/OcRecipient.vue | 4 +- .../src/components/OcSelect/OcSelect.vue | 14 +--- .../src/components/OcSwitch/OcSwitch.vue | 2 - .../components/OcTableCell/OcTableCell.vue | 5 +- .../__snapshots__/OcTableCell.spec.ts.snap | 2 +- .../OcTextInputPassword.vue | 1 - .../src/components/OcTextarea/OcTextarea.vue | 3 +- packages/design-system/src/styles/layers.css | 10 +++ .../src/styles/theme/helper.scss | 2 - .../src/styles/theme/oc-form.scss | 4 -- .../src/components/AppTemplate.vue | 3 +- .../__snapshots__/SpacesList.spec.ts.snap | 66 +++++++++---------- .../views/__snapshots__/Spaces.spec.ts.snap | 2 +- .../views/__snapshots__/Users.spec.ts.snap | 36 +++++----- .../src/components/AppImageGallery.vue | 3 +- .../src/views/AppDetails.vue | 3 +- .../SideBar/Audio/AudioMetaPanel.vue | 3 +- .../SideBar/Details/FileDetailsMultiple.vue | 5 +- .../src/components/SideBar/Exif/ExifPanel.vue | 3 +- .../InviteCollaboratorForm.vue | 5 -- .../src/components/Spaces/SpaceHeader.vue | 9 --- .../RecipientContainer.spec.ts.snap | 10 +-- .../__snapshots__/Projects.spec.ts.snap | 12 ++-- .../trash/__snapshots__/Overview.spec.ts.snap | 12 ++-- packages/web-app-pdf-viewer/src/App.vue | 2 - .../web-app-search/src/portals/SearchBar.vue | 24 ++++--- .../web-pkg/src/components/AppBar/AppBar.vue | 2 +- packages/web-pkg/src/components/AppTopBar.vue | 6 +- .../components/FilesList/ResourceListItem.vue | 5 +- .../src/components/Modals/FilePickerModal.vue | 14 +++- .../src/components/Modals/SaveAsModal.vue | 14 +++- .../src/components/SideBar/Files/FileInfo.vue | 3 +- .../src/components/SideBar/SideBar.vue | 2 +- .../Spaces/Details/SpaceDetailsMultiple.vue | 6 +- .../AppBar/__snapshots__/AppBar.spec.ts.snap | 6 +- .../ResourceListItem.spec.ts.snap | 2 +- .../__snapshots__/AppTopBar.spec.ts.snap | 12 ++-- .../SpaceDetailsMultiple.spec.ts.snap | 2 +- packages/web-runtime/src/App.vue | 4 -- .../web-runtime/src/components/UploadInfo.vue | 3 +- .../web-runtime/src/layouts/Application.vue | 3 +- .../src/pages/resolvePrivateLink.vue | 8 +-- .../src/pages/resolvePublicLink.vue | 13 ++-- .../pages/__snapshots__/account.spec.ts.snap | 50 +++++++------- .../resolvePublicLink.spec.ts.snap | 4 +- 51 files changed, 188 insertions(+), 249 deletions(-) diff --git a/packages/design-system/src/components/OcFileInput/OcFileInput.vue b/packages/design-system/src/components/OcFileInput/OcFileInput.vue index 18075ac084..56535d9070 100644 --- a/packages/design-system/src/components/OcFileInput/OcFileInput.vue +++ b/packages/design-system/src/components/OcFileInput/OcFileInput.vue @@ -12,7 +12,7 @@ v-bind="additionalAttributes" ref="inputRef" :aria-invalid="ariaInvalid" - class="oc-invisible oc-file-input" + class="oc-invisible oc-file-input p-0" type="file" :multiple="multiple" :accept="fileTypes" @@ -239,7 +239,6 @@ const onFocus = async () => { diff --git a/packages/design-system/src/components/OcSelect/OcSelect.vue b/packages/design-system/src/components/OcSelect/OcSelect.vue index 73125c83fc..dd41d8580c 100644 --- a/packages/design-system/src/components/OcSelect/OcSelect.vue +++ b/packages/design-system/src/components/OcSelect/OcSelect.vue @@ -474,6 +474,7 @@ export default { components: { VueSelect } } } } + // overwrite vue-select styles .vs { &__search { color: var(--oc-role-on-surface); @@ -490,7 +491,6 @@ export default { components: { VueSelect } } border: 1px solid var(--oc-role-outline); box-sizing: border-box; line-height: inherit; - margin: 0; max-width: 100%; outline: none; padding: 2px; @@ -498,6 +498,8 @@ export default { components: { VueSelect } } transition-timing-function: ease-in-out; transition-property: color, background-color; width: 100%; + background-color: var(--oc-role-surface); + margin-top: -1px; } &__selected-readonly { @@ -509,22 +511,12 @@ export default { components: { VueSelect } } padding: 0 5px; } - &__dropdown-menu { - padding: 0; - background-color: var(--oc-role-surface); - margin-top: -1px; - } - &__clear, &__open-indicator, &__deselect { fill: var(--oc-role-on-surface); } - &__deselect { - margin: 0 var(--oc-space-small); - } - &__dropdown-option, &__no-options { color: var(--oc-role-on-surface); diff --git a/packages/design-system/src/components/OcSwitch/OcSwitch.vue b/packages/design-system/src/components/OcSwitch/OcSwitch.vue index ba741e484d..4304390c0a 100644 --- a/packages/design-system/src/components/OcSwitch/OcSwitch.vue +++ b/packages/design-system/src/components/OcSwitch/OcSwitch.vue @@ -58,8 +58,6 @@ const toggle = () => { cursor: pointer; display: block; height: 18px; - margin: 0; - padding: 0; position: relative; transition: background-color 0.25s; width: 31px; diff --git a/packages/design-system/src/components/OcTableCell/OcTableCell.vue b/packages/design-system/src/components/OcTableCell/OcTableCell.vue index d569c65277..bb7348f2fd 100644 --- a/packages/design-system/src/components/OcTableCell/OcTableCell.vue +++ b/packages/design-system/src/components/OcTableCell/OcTableCell.vue @@ -30,7 +30,8 @@ const cellClasses = computed(() => { 'oc-table-cell', `oc-table-cell-align-${alignH}`, `oc-table-cell-align-${alignV}`, - `oc-table-cell-width-${width}` + `oc-table-cell-width-${width}`, + 'px-2' ] if (wrap) { classes.push(`oc-text-${wrap}`) @@ -41,8 +42,6 @@ const cellClasses = computed(() => { diff --git a/packages/web-app-search/src/portals/SearchBar.vue b/packages/web-app-search/src/portals/SearchBar.vue index a3def27af9..75a8905056 100644 --- a/packages/web-app-search/src/portals/SearchBar.vue +++ b/packages/web-app-search/src/portals/SearchBar.vue @@ -17,6 +17,7 @@ :show-advanced-search-button="listProviderAvailable" cancel-button-appearance="raw-inverse" :cancel-handler="cancelSearch" + class="mx-auto sm:mx-0" @advanced-search="onKeyUpEnter" @update:model-value="updateTerm" @clear="onClear" @@ -52,6 +53,7 @@ ref="optionsDropRef" mode="manual" target="#files-global-search-bar" + padding-size="remove" close-on-click enforce-drop-on-mobile > @@ -522,7 +524,16 @@ export default defineComponent({ } }) + diff --git a/packages/web-runtime/src/pages/resolvePublicLink.vue b/packages/web-runtime/src/pages/resolvePublicLink.vue index 9de98f6005..e8a049c413 100644 --- a/packages/web-runtime/src/pages/resolvePublicLink.vue +++ b/packages/web-runtime/src/pages/resolvePublicLink.vue @@ -6,7 +6,7 @@