Merge pull request #3882 from penpot/alotor-new-ui-fixes

New UI Fixes
This commit is contained in:
Alejandro 2023-12-01 16:45:05 +01:00 committed by GitHub
commit 573ce0e4ee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 154 additions and 78 deletions

View file

@ -31,6 +31,7 @@
margin-top: 0; margin-top: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
padding: 0 $s-16;
&:focus { &:focus {
outline: none; outline: none;
@ -82,7 +83,7 @@
position: relative; position: relative;
width: var(--input-width, calc(100% - $s-1)); width: var(--input-width, calc(100% - $s-1));
min-width: var(--input-min-width); min-width: var(--input-min-width);
height: var(--input-height, $s-32); height: var(--input-height, $s-40);
} }
.help-icon { .help-icon {

View file

@ -25,4 +25,6 @@
position: relative; position: relative;
grid-row: 1 / span 2; grid-row: 1 / span 2;
padding: $s-16 $s-16 0 0; padding: $s-16 $s-16 0 0;
overflow: hidden;
width: 100%;
} }

View file

@ -459,6 +459,7 @@
[:button [:button
{:class (stl/css-case :selected selected? :library library-view?) {:class (stl/css-case :selected selected? :library library-view?)
:ref node-ref :ref node-ref
:title (:name file)
:draggable true :draggable true
:on-click on-select :on-click on-select
:on-key-down handle-key-down :on-key-down handle-key-down
@ -634,20 +635,17 @@
[:& loading-placeholder] [:& loading-placeholder]
(seq files) (seq files)
[:ul (for [slice (partition-all limit files)]
{:class (stl/css :grid-row) [:ul {:class (stl/css :grid-row)}
:style {:grid-template-columns (str "repeat(" limit ", 1fr)")}} (when @dragging?
[:li {:class (stl/css :grid-item)}])
(when @dragging? (for [item slice]
[:li {:class (stl/css :grid-item)}]) [:& grid-item
{:file item
(for [item files] :key (:id item)
[:& grid-item :navigate? true
{:file item :origin origin
:key (:id item) :library-view? library-view?}])])
:navigate? true
:origin origin
:library-view? library-view?}])]
:else :else
[:& empty-placeholder [:& empty-placeholder

View file

@ -6,17 +6,21 @@
@import "refactor/common-refactor.scss"; @import "refactor/common-refactor.scss";
$thumbnail-default-width: $s-252; // Default width
$thumbnail-aspect-ration: #{2 / 3}; // Ratio 2:3
.dashboard-grid { .dashboard-grid {
font-size: $fs-14; font-size: $fs-14;
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
overflow: hidden; overflow-x: hidden;
padding: 0 $s-16;
} }
.grid-row { .grid-row {
display: grid; display: flex;
width: 100%; width: 100%;
padding: 0 $s-12; gap: $s-24;
} }
.grid-item { .grid-item {
@ -24,9 +28,7 @@
cursor: pointer; cursor: pointer;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex: 1 0 $s-260; margin: $s-12 0;
height: $s-232;
margin: $s-12 $s-16 $s-16 $s-8;
position: relative; position: relative;
text-align: center; text-align: center;
@ -38,16 +40,14 @@
button { button {
background-color: transparent; background-color: transparent;
border: none; border: none;
} padding: 0 $s-6;
@media #{$bp-max-1366} {
height: $s-200;
flex: 1 0 $s-232;
} }
.grid-item-th { .grid-item-th {
border-radius: $br-4; border-radius: $br-4;
text-align: initial; text-align: initial;
width: var(--th-width, #{$thumbnail-default-width});
height: calc(var(--th-width, #{$thumbnail-default-width}) * #{$thumbnail-aspect-ration});
img { img {
object-fit: contain; object-fit: contain;
@ -56,9 +56,10 @@
&.dragged { &.dragged {
border-radius: $br-4; border-radius: $br-4;
border: $br-2 solid $da-primary; outline: $br-4 solid $da-primary;
text-align: initial; text-align: initial;
max-height: $s-160; width: calc(var(--th-width) + $s-12);
height: calc(var(--th-width, #{$thumbnail-default-width}) * #{$thumbnail-aspect-ration});
} }
&.overlay { &.overlay {
@ -81,6 +82,7 @@
display: grid; display: grid;
grid-template-columns: 1fr auto; grid-template-columns: 1fr auto;
cursor: pointer; cursor: pointer;
max-width: var(--th-width, $thumbnail-default-width);
} }
.item-info { .item-info {
@ -198,7 +200,7 @@
.selected { .selected {
.grid-item-th { .grid-item-th {
border: 2px solid $da-tertiary; outline: $s-4 solid $da-tertiary;
} }
} }
} }
@ -261,8 +263,7 @@
background-size: auto 80%; background-size: auto 80%;
background-repeat: no-repeat; background-repeat: no-repeat;
height: $s-232; height: 100%;
max-height: $s-160;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
width: 100%; width: 100%;
@ -294,7 +295,6 @@
.grid-item.project-th.library { .grid-item.project-th.library {
height: $s-612; height: $s-612;
width: $s-300;
} }
.grid-item-th.library { .grid-item-th.library {
@ -302,7 +302,7 @@
flex-direction: column; flex-direction: column;
height: 90%; height: 90%;
justify-content: flex-start; justify-content: flex-start;
max-height: 550px; max-height: $s-580;
padding: $s-32; padding: $s-32;
.asset-section { .asset-section {

View file

@ -51,10 +51,10 @@
(if new-css-system (if new-css-system
[:* [:*
[:header {:class (stl/css :dashboard-header) :ref rowref} [:header {:class (stl/css :dashboard-header)}
[:div#dashboard-libraries-title {:class (stl/css :dashboard-title)} [:div#dashboard-libraries-title {:class (stl/css :dashboard-title)}
[:h1 (tr "dashboard.libraries-title")]]] [:h1 (tr "dashboard.libraries-title")]]]
[:section {:class (stl/css :dashboard-container :no-bg :dashboard-shared)} [:section {:class (stl/css :dashboard-container :no-bg :dashboard-shared) :ref rowref}
[:& grid {:files files [:& grid {:files files
:project default-project :project default-project
:origin :libraries :origin :libraries

View file

@ -17,10 +17,6 @@
&.dashboard-projects { &.dashboard-projects {
user-select: none; user-select: none;
} }
&.dashboard-shared {
width: calc(100vw - $s-320);
margin-right: $s-52;
}
&.search { &.search {
margin-top: $s-12; margin-top: $s-12;

View file

@ -36,8 +36,7 @@
:else :else
[:div [:div
{:class (stl/css :grid-empty-placeholder) {:class (stl/css :grid-empty-placeholder)}
:style {:grid-template-columns (str "repeat(" limit ", 1fr)")}}
[:button {:class (stl/css :create-new) [:button {:class (stl/css :create-new)
:on-click on-click} :on-click on-click}
i/add-refactor]]) i/add-refactor]])

View file

@ -5,14 +5,12 @@
// Copyright (c) KALEIDOS INC // Copyright (c) KALEIDOS INC
@use "common/refactor/common-refactor.scss" as *; @use "common/refactor/common-refactor.scss" as *;
@use "./grid.scss"; @use "./grid.scss" as g;
.grid-empty-placeholder { .grid-empty-placeholder {
border-radius: $br-12; border-radius: $br-12;
display: grid; display: grid;
padding: $s-12; padding: $s-12 0;
margin-right: $s-12;
height: $s-232;
&.loader { &.loader {
justify-items: center; justify-items: center;
@ -66,6 +64,8 @@
margin: $s-8; margin: $s-8;
text-transform: uppercase; text-transform: uppercase;
border: $s-2 solid transparent; border: $s-2 solid transparent;
width: var(--th-width, #{g.$thumbnail-default-width});
height: calc(var(--th-width, #{g.$thumbnail-default-width}) * #{g.$thumbnail-aspect-ration});
svg { svg {
width: $s-32; width: $s-32;

View file

@ -246,7 +246,6 @@
:edition? (= (:id project) edit-id)}) :edition? (= (:id project) edit-id)})
[rowref limit] (hooks/use-dynamic-grid-item-width) [rowref limit] (hooks/use-dynamic-grid-item-width)
on-nav on-nav
(mf/use-fn (mf/use-fn
(mf/deps project-id team-id) (mf/deps project-id team-id)
@ -344,7 +343,7 @@
(if new-css-system (if new-css-system
[:article {:class (stl/css-case :dashboard-project-row true :first first?)} [:article {:class (stl/css-case :dashboard-project-row true :first first?)}
[:header {:class (stl/css :project) :ref rowref} [:header {:class (stl/css :project)}
[:div {:class (stl/css :project-name-wrapper)} [:div {:class (stl/css :project-name-wrapper)}
(if (:edition? @local) (if (:edition? @local)
[:& inline-edition {:content (:name project) [:& inline-edition {:content (:name project)
@ -403,12 +402,13 @@
:on-key-down handle-menu-click} :on-key-down handle-menu-click}
i/actions]]]] i/actions]]]]
[:& line-grid [:div {:class (stl/css :grid-container) :ref rowref}
{:project project [:& line-grid
:team team {:project project
:files files :team team
:create-fn create-file :files files
:limit limit}] :create-fn create-file
:limit limit}]]
(when (and (> limit 0) (when (and (> limit 0)
(> file-count limit)) (> file-count limit))

View file

@ -145,6 +145,11 @@
} }
} }
.grid-container {
width: 100%;
padding: 0 $s-4;
}
&:hover, &:hover,
&:focus, &:focus,
&:focus-within { &:focus-within {

View file

@ -321,7 +321,7 @@
width: $s-32; width: $s-32;
position: absolute; position: absolute;
top: $s-12; top: calc(50% - $s-12);
right: $s-2; right: $s-2;
svg { svg {

View file

@ -623,6 +623,10 @@
height: $s-32; height: $s-32;
border-radius: $br-8; border-radius: $br-8;
background-color: var(--alert-background-color-warning); background-color: var(--alert-background-color-warning);
padding: $s-24 $s-8;
gap: $s-8;
margin-bottom: $s-16;
.icon { .icon {
@include flexCenter; @include flexCenter;
width: $s-16; width: $s-16;

View file

@ -1,3 +1,4 @@
;; This Source Code Form is subject to the terms of the Mozilla Public ;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
@ -350,9 +351,7 @@
(defn use-dynamic-grid-item-width (defn use-dynamic-grid-item-width
([] (use-dynamic-grid-item-width nil)) ([] (use-dynamic-grid-item-width nil))
([itemsize] ([itemsize]
(let [;; NOTE: we pass a function to use-state for avoid repeatedly (let [width* (mf/use-state nil)
;; lookup `:items-width` on storage on each render
width* (mf/use-state #(:items-width @storage))
width (deref width*) width (deref width*)
rowref (mf/use-ref) rowref (mf/use-ref)
@ -365,20 +364,27 @@
ratio (if (some? width) (/ width itemsize) 0) ratio (if (some? width) (/ width itemsize) 0)
nitems (mth/floor ratio) nitems (mth/floor ratio)
limit (mth/min 10 nitems) limit (mth/min 10 nitems)
limit (mth/max 1 limit)] limit (mth/max 1 limit)
th-size (when width
(- (/ (- width 32 (* (dec limit) 24)) limit) 12))]
(mf/with-effect
[th-size]
(when th-size
(let [node (mf/ref-val rowref)]
(.setProperty (.-style node) "--th-width" (str th-size "px")))))
(mf/with-effect [] (mf/with-effect []
(let [node (mf/ref-val rowref) (let [node (mf/ref-val rowref)
mnt? (volatile! true) mnt? (volatile! true)
sub (->> (wapi/observe-resize node) sub (->> (wapi/observe-resize node)
(rx/observe-on :af)
(rx/subs (fn [entries] (rx/subs (fn [entries]
(let [row (first entries) (let [row (first entries)
row-rect (.-contentRect ^js row) row-rect (.-contentRect ^js row)
row-width (.-width ^js row-rect)] row-width (.-width ^js row-rect)]
(when @mnt? (when @mnt?
(reset! width* row-width) (reset! width* row-width))))))]
(swap! storage assoc :items-width row-width))))))]
(fn [] (fn []
(vreset! mnt? false) (vreset! mnt? false)
(rx/dispose! sub)))) (rx/dispose! sub))))

View file

@ -48,7 +48,7 @@
} }
.fields-row { .fields-row {
--input-height: $s-40; --input-height: #{$s-40};
margin-bottom: $s-20; margin-bottom: $s-20;
flex-direction: column; flex-direction: column;

View file

@ -81,7 +81,8 @@
node-ref (use-resize-observer on-resize)] node-ref (use-resize-observer on-resize)]
[:* [:*
(if new-css-system (if new-css-system
[:& palette {:layout layout}] (when (not hide-ui?)
[:& palette {:layout layout}])
[:* [:*
(when (and colorpalette? (not hide-ui?)) (when (and colorpalette? (not hide-ui?))
[:& colorpalette]) [:& colorpalette])

View file

@ -5,6 +5,7 @@
;; Copyright (c) KALEIDOS INC ;; Copyright (c) KALEIDOS INC
(ns app.main.ui.workspace.viewport.top-bar (ns app.main.ui.workspace.viewport.top-bar
(:require-macros [app.main.style :as stl])
(:require (:require
[app.common.files.helpers :as cfh] [app.common.files.helpers :as cfh]
[app.common.types.shape.layout :as ctl] [app.common.types.shape.layout :as ctl]
@ -18,6 +19,35 @@
[app.util.i18n :as i18n :refer [tr]] [app.util.i18n :as i18n :refer [tr]]
[rumext.v2 :as mf])) [rumext.v2 :as mf]))
(mf/defc view-only-actions
[]
(let [new-css-system (mf/use-ctx ctx/new-css-system)
handle-close-view-mode
(mf/use-callback
(fn []
(st/emit! :interrupt
(dw/set-options-mode :design)
(dw/set-workspace-read-only false))))]
(if new-css-system
[:div {:class (stl/css :viewport-actions)}
[:div {:class (stl/css :viewport-actions-container)}
[:div {:class (stl/css :viewport-actions-title)}
[:& i18n/tr-html {:tag-name "span"
:label "workspace.top-bar.read-only"}]]
[:button {:class (stl/css :done-btn)
:on-click handle-close-view-mode} (tr "workspace.top-bar.read-only.done")]
[:button {:class (stl/css :close-btn)
:on-click handle-close-view-mode} i/close-refactor]]]
;; OLD
[:div.viewport-actions
[:div.viewport-actions-container
[:div.viewport-actions-title
[:& i18n/tr-html {:tag-name "span"
:label "workspace.top-bar.read-only"}]]
[:button.btn-primary {:on-click handle-close-view-mode} (tr "workspace.top-bar.read-only.done")]
[:button.btn-icon-basic {:on-click handle-close-view-mode} i/close]]])))
(mf/defc top-bar (mf/defc top-bar
{::mf/wrap [mf/memo]} {::mf/wrap [mf/memo]}
[] []
@ -40,24 +70,11 @@
(not (cfh/frame-shape? shape)))) (not (cfh/frame-shape? shape))))
draw-path?) draw-path?)
grid-edition? (and single? editing? (ctl/grid-layout? shape)) grid-edition? (and single? editing? (ctl/grid-layout? shape))]
handle-close-view-mode
(mf/use-callback
(fn []
(st/emit! :interrupt
(dw/set-options-mode :design)
(dw/set-workspace-read-only false))))]
(cond (cond
workspace-read-only? workspace-read-only?
[:div.viewport-actions [:& view-only-actions]
[:div.viewport-actions-container
[:div.viewport-actions-title
[:& i18n/tr-html {:tag-name "span"
:label "workspace.top-bar.read-only"}]]
[:button.btn-primary {:on-click handle-close-view-mode} (tr "workspace.top-bar.read-only.done")]
[:button.btn-icon-basic {:on-click handle-close-view-mode} i/close]]]
path-edition? path-edition?
[:div.viewport-actions [:div.viewport-actions

View file

@ -0,0 +1,47 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
// Copyright (c) KALEIDOS INC
@import "refactor/common-refactor.scss";
.viewport-actions {
pointer-events: none;
position: absolute;
top: $s-44;
left: 50%;
.viewport-actions-container {
@include flexRow;
background: var(--panel-background-color);
border-radius: $br-12;
box-shadow: 0 0 $s-12 0 var(--menu-shadow-color);
gap: $s-8;
height: $s-48;
margin-left: -50%;
padding: $s-8;
pointer-events: initial;
width: $s-512;
}
.viewport-actions-title {
flex: 1;
font-size: $fs-12;
color: var(--color-foreground-secondary);
padding-left: $s-8;
}
.done-btn {
@extend .button-primary;
text-transform: uppercase;
padding: $s-8 $s-20;
font-size: $fs-11;
}
.close-btn {
@extend .button-tertiary;
svg {
@extend .button-icon;
}
}
}