Jelajahi Sumber

Merge branch 'feat/db' of https://github.com/logseq/logseq into feat/db

Konstantinos Kaloutas 1 tahun lalu
induk
melakukan
a4e569e115

+ 24 - 7
bb.edn

@@ -32,15 +32,32 @@
   dev:app-watch
   logseq.tasks.dev.mobile/app-watch
 
-  dev:build-publishing
-  logseq.tasks.dev/build-publishing
+  -dev:build-publishing-frontend
+  logseq.tasks.dev/build-publishing-frontend
+
+  dev:publishing-backend
+  logseq.tasks.dev/publishing-backend
+
+  -dev:publishing-release
+  {:depends [-dev:build-publishing-frontend]
+   :doc "Build release publishing spa app given graph and output dirs"
+   :task (run 'dev:publishing-backend)}
+
+  -dev:watch-publishing-frontend
+  logseq.tasks.dev/watch-publishing-frontend
+
+  -dev:watch-publishing-backend
+  logseq.tasks.dev/watch-publishing-backend
+
+  -dev:publishing-dev
+  {:depends [-dev:watch-publishing-frontend -dev:watch-publishing-backend]
+   :doc "Watch dev publishing spa app given graph and output dirs"}
 
   dev:publishing
-  {:depends [dev:build-publishing]
-   :doc "Build publishing spa app given graph and output dirs"
-   :task (apply shell {:dir "scripts"}
-                "yarn -s nbb-logseq -cp src -m logseq.tasks.dev.publishing"
-                (into ["static"] *command-line-args*))}
+  {:doc "Builds full publishing app given graph and output dirs. Append --dev to watch frontend"
+   :task (if ((set *command-line-args*) "--dev")
+           (run '-dev:publishing-dev {:parallel true})
+           (run '-dev:publishing-release))}
 
   dev:validate-db
   {:doc "Validate a DB graph's datascript schema"

+ 1 - 0
deps/common/.carve/config.edn

@@ -3,5 +3,6 @@
                   logseq.common.util.page-ref
                   logseq.common.util.block-ref
                   logseq.common.util
+                  logseq.common.marker
                   logseq.common.config]
  :report {:format :ignore}}

+ 6 - 2
deps/db/src/logseq/db/frontend/property.cljs

@@ -51,8 +51,12 @@
             :schema
             {:type :default}
             :closed-values
-            (mapv #(hash-map :value % :uuid (random-uuid))
-                  ["Backlog" "Todo" "Doing" "In Review" "Done" "Canceled"])
+            (mapv (fn [[status icon]]
+                    {:value status
+                     :uuid (random-uuid)
+                     :icon {:type :tabler-icon :id icon :name icon}})
+                  [["Backlog" "Backlog"] ["Todo" "Todo"] ["Doing" "In Progress 50"]
+                   ["In Review" "In Review"] ["Done" "Done"] ["Canceled" "Cancelled"]])
             :visible true}
    :priority {:original-name "Priority"
               :schema

+ 21 - 15
deps/db/src/logseq/db/sqlite/create_graph.cljs

@@ -9,6 +9,25 @@
             [datascript.core :as d]
             [logseq.db :as ldb]))
 
+(defn- build-initial-properties
+  []
+  (let [;; Some uuids need to be pre-defined since they are referenced by other properties
+        default-property-uuids {:icon (d/squuid)}]
+    (mapcat
+     (fn [[k-keyword {:keys [schema original-name closed-values]}]]
+       (let [k-name (name k-keyword)]
+         (if closed-values
+           (db-property-util/build-closed-values
+            (or original-name k-name)
+            {:block/schema schema :block/uuid (d/squuid) :closed-values closed-values}
+            {:icon-id (get default-property-uuids :icon)})
+           [(sqlite-util/build-new-property
+             {:block/schema schema
+              :block/original-name (or original-name k-name)
+              :block/name (common-util/page-name-sanity-lc k-name)
+              :block/uuid (get default-property-uuids k-keyword (d/squuid))})])))
+     db-property/built-in-properties)))
+
 (defn build-db-initial-data
   [config-content]
   (let [initial-data [{:db/ident :db/type :db/type "db"}
@@ -26,20 +45,7 @@
                         :file/content ""
                         :file/last-modified-at (js/Date.)}]
         default-pages (ldb/build-default-pages-tx)
-        default-properties (mapcat
-                            (fn [[k-keyword {:keys [schema original-name closed-values]}]]
-                              (let [k-name (name k-keyword)]
-                                (if closed-values
-                                  (db-property-util/build-closed-values
-                                   (or original-name k-name)
-                                   {:block/schema schema :block/uuid (d/squuid) :closed-values closed-values}
-                                   {})
-                                  [(sqlite-util/build-new-property
-                                    {:block/schema schema
-                                     :block/original-name (or original-name k-name)
-                                     :block/name (common-util/page-name-sanity-lc k-name)
-                                     :block/uuid (d/squuid)})])))
-                            db-property/built-in-properties)
+        default-properties (build-initial-properties)
         name->properties (zipmap
                           (map :block/name default-properties)
                           default-properties)
@@ -58,4 +64,4 @@
                                                    id))
                                                (:properties schema))}})))
                          db-class/built-in-classes)]
-    (concat initial-data initial-files default-pages default-classes default-properties)))
+    (vec (concat initial-data initial-files default-pages default-classes default-properties))))

+ 2 - 1
deps/outliner/src/logseq/outliner/core.cljs

@@ -366,7 +366,8 @@
               m)
           m (cond->> m'
               db-based?
-              (db-marker-handle conn))]
+              (db-marker-handle conn))
+          m (if db-based? (dissoc m :block/tags) m)]
 
       ;; Ensure block UUID never changes
       (when (and db-id block-uuid)

+ 1 - 4
deps/publishing/src/logseq/publishing/export.cljs

@@ -42,10 +42,7 @@
                 (fs/symlinkSync (node-path/join source-static-dir "js" "publishing" "cljs-runtime")
                                 (node-path/join output-static-dir "js" "cljs-runtime")))
             ;; remove publishing-dir
-            _ (when-not dev? (p/all (map (fn [file]
-                                           (fs/rmSync (node-path/join publishing-dir file)))
-                                         (fs/readdirSync publishing-dir))))
-            _ (when-not dev? (fs/rmdirSync publishing-dir))
+            _ (when-not dev? (fse/remove publishing-dir))
             ;; remove source map files
             _ (p/all (map (fn [file]
                             (fs/rmSync (node-path/join output-static-dir "js" (str file ".map")) #js {:force true}))

+ 11 - 4
docs/dev-practices.md

@@ -320,13 +320,20 @@ point out:
   ```sh
   # One time setup
   $ cd scripts && yarn install && cd -
-  # Build a release export
+
+  # Build a release publishing app
   $ bb dev:publishing /path/to/graph-dir tmp/publish
-  # OR build a dev export with `clojure -M:cljs watch publishing` and then
+
+  # OR build a dev publishing app that watches frontend changes
   $ bb dev:publishing /path/to/graph-dir tmp/publish --dev
 
-  # View the app in a browser
-  $ python3 -m http.server 8080 -d tmp/db-publish &; open http://localhost:8080
+  # View the publishing app in a browser
+  $ python3 -m http.server 8080 -d tmp/publish &; open http://localhost:8080
+
+  # Rebuild the publishing backend for dev/release.
+  # Handy when making backend changes in deps/publishing or
+  # to test a different graph
+  $ bb dev:publishing-backend /path/graph-dir tmp/publish
 
   ```
 

+ 0 - 8
package.json

@@ -161,14 +161,6 @@
         "yargs-parser": "20.2.4"
     },
     "resolutions": {
-        "**/postcss": "8.4.17",
-        "**/postcss-colormin": "5.3.0",
-        "**/postcss-convert-values": "5.1.2",
-        "**/postcss-js": "4.0.0",
-        "**/postcss-merge-longhand": "5.1.6",
-        "**/postcss-merge-rules": "5.1.2",
-        "**/postcss-minify-params": "5.1.3",
-        "**/postcss-reduce-initial": "5.1.0",
         "pixi-graph-fork/@pixi/app": "6.2.0",
         "pixi-graph-fork/@pixi/constants": "6.2.0",
         "pixi-graph-fork/@pixi/core": "6.2.0",

+ 37 - 12
scripts/src/logseq/tasks/dev.clj

@@ -4,6 +4,7 @@
   (:require [babashka.process :refer [shell]]
             [babashka.fs :as fs]
             [babashka.cli :as cli]
+            [logseq.tasks.util :as task-util]
             [clojure.java.io :as io]
             [clojure.pprint :as pp]
             [clojure.edn :as edn]
@@ -41,17 +42,6 @@
                    (pp/pprint (edn/read-string (:out (shell {:out :string} "node ./static/gen-malli-kondo-config.js")))))]
       (spit config-edn config))))
 
-(defn build-publishing
-  "Builds release publishing asset when files have changed"
-  [& _args]
-  (if-let [_files (and (not (System/getenv "SKIP_ASSET"))
-                       (seq (set (fs/modified-since (fs/file "static/js/publishing/main.js")
-                                                    (fs/glob "." "{src/main,deps/graph-parser/src}/**")))))]
-    (do
-      (println "Building publishing js asset...")
-      (shell "clojure -M:cljs release publishing"))
-    (println "Publishing js asset is up to date")))
-
 (defn diff-datoms
   "Runs data/diff on two edn files written by dev:db-datoms"
   [file1 file2 & args]
@@ -66,4 +56,39 @@
                        drop-last
                        ;; Remove nils as we're only interested in diffs
                        (mapv #(vec (remove nil? %))))]
-    (pp/pprint data-diff)))
+    (pp/pprint data-diff)))
+
+(defn build-publishing-frontend
+  "Builds frontend release publishing asset when files have changed"
+  [& _args]
+  (if-let [_files (and (not (System/getenv "SKIP_ASSET"))
+                       (seq (set (fs/modified-since (fs/file "static/js/publishing/main.js")
+                                                    (fs/glob "." "{src/main,deps/graph-parser/src}/**")))))]
+    (do
+      (println "Building publishing js asset...")
+      (shell "clojure -M:cljs release publishing"))
+    (println "Publishing js asset is up to date")))
+
+(defn publishing-backend
+  "Builds publishing backend and copies over supporting frontend assets"
+  [& args]
+  (apply shell {:dir "scripts"}
+         "yarn -s nbb-logseq -cp src -m logseq.tasks.dev.publishing"
+         (into ["static"] args)))
+
+(defn watch-publishing-frontend
+  [& _args]
+  (shell "clojure -M:cljs watch publishing"))
+
+(defn watch-publishing-backend
+  "Builds publishing backend once watch-publishing-frontend has built initial frontend"
+  [& args]
+  (let [start-time (java.time.Instant/now)]
+    (Thread/sleep 3000)
+    (loop [n 1000]
+      (if (and (fs/exists? "static/js/publishing/main.js")
+               (task-util/file-modified-later-than? "static/js/publishing/main.js" start-time))
+        (apply publishing-backend args)
+        (do (println "Waiting for publishing frontend to build...")
+            (Thread/sleep 1000)
+            (recur (inc n)))))))

+ 6 - 5
scripts/src/logseq/tasks/dev/publishing.cljs

@@ -13,13 +13,13 @@
 (defn- get-db [graph-dir]
   (let [{:keys [conn]} (gp-cli/parse-graph graph-dir {:verbose false})] @conn))
 
-(defn- publish-file-graph [static-dir graph-dir output-path]
+(defn- publish-file-graph [static-dir graph-dir output-path options]
   (let [repo-config (-> (node-path/join graph-dir "logseq" "config.edn") fs/readFileSync str edn/read-string)]
     (publishing/export (get-db graph-dir)
                        static-dir
                        graph-dir
                        output-path
-                       {:repo-config repo-config :ui/theme "dark" :ui/radix-color :purple})))
+                       (merge options {:repo-config repo-config :ui/theme "dark" :ui/radix-color :purple}))))
 
 (defn- publish-db-graph [static-dir graph-dir output-path opts]
   (let [db-name (node-path/basename graph-dir)
@@ -42,7 +42,8 @@
     (js/process.exit 1))
   (let [[static-dir graph-dir output-path]
         ;; Offset relative paths since they are run in a different directory than user is in
-        (map #(if (node-path/isAbsolute %) % (node-path/resolve ".." %)) args)]
+        (map #(if (node-path/isAbsolute %) % (node-path/resolve ".." %)) args)
+        options {:dev? (contains? (set args) "--dev")}]
     (if (sqlite-cli/db-graph-directory? graph-dir)
-      (publish-db-graph static-dir graph-dir output-path {:dev? (contains? (set args) "--dev")})
-      (publish-file-graph static-dir graph-dir output-path))))
+      (publish-db-graph static-dir graph-dir output-path options)
+      (publish-file-graph static-dir graph-dir output-path options))))

+ 4 - 1
scripts/src/logseq/tasks/lang.clj

@@ -172,7 +172,10 @@
    :nl #{:plugins :type :left-side-bar/nav-recent-pages :plugin/update}
    :pl #{:port}
    :pt-BR #{:plugins :right-side-bar/flashcards :settings-page/enable-flashcards :page/backlinks
-            :host :settings-page/tab-editor :shortcut.category/plugins :whiteboard/link}
+            :host :settings-page/tab-editor :shortcut.category/plugins :whiteboard/link :settings-of-plugins :whiteboard
+            :whiteboards :on-boarding/quick-tour-journal-page-desc-2 :plugin/downloads :right-side-bar/history-global
+            :right-side-bar/whiteboards :search-item/whiteboard :settings-page/enable-whiteboards :settings-page/plugin-system
+            :shortcut.category/whiteboard :command.whiteboard/zoom-in :command.whiteboard/zoom-out}
    :pt-PT #{:plugins :settings-of-plugins :plugin/downloads :right-side-bar/flashcards
             :settings-page/enable-flashcards :settings-page/plugin-system}
    :nb-NO #{:port :type :whiteboard :right-side-bar/flashcards :right-side-bar/whiteboards

+ 3 - 2
shadow-cljs.edn

@@ -98,11 +98,12 @@
 
   :publishing {:target :browser
                :module-loader true
-               :js-options    {:ignore-asset-requires true
+               :js-options    {;; handle `require(xxx.css)`
+                               :ignore-asset-requires true
                                :resolve {"react" {:target :global
                                                   :global "React"}
                                          "react-dom" {:target :global
-                                                      :global "ReactDOM"}}} ;; handle `require(xxx.css)`
+                                                      :global "ReactDOM"}}}
                :modules       {:shared
                                {:entries []}
                                :main

+ 1 - 2
src/main/frontend/components/editor.cljs

@@ -142,8 +142,7 @@
                           (empty? matched-pages)
                           (when-not (db/page-exists? q)
                             (if db-tag?
-                              (concat [(str (t :new-page) " " q)
-                                       (str (t :new-class) " " q)]
+                              (concat [(str (t :new-class) " " q)]
                                       matched-pages)
                               (cons q matched-pages)))
 

+ 1 - 7
src/main/frontend/components/property.cljs

@@ -721,13 +721,7 @@
                    (not (:page-configure? opts)))
       [:div.ls-properties-area (cond-> (if in-block-container?
                                          {}
-                                         {:class [(cond
-                                                    class-schema?
-                                                    "class-properties"
-                                                    (config/db-based-graph? (state/get-current-repo))
-                                                    nil
-                                                    :else
-                                                    "page-properties")]})
+                                         {:class (when class-schema?  "class-properties")})
                                  (:selected? opts)
                                  (update :class conj "select-none"))
        (properties-section block (if class-schema? properties own-properties) opts)

+ 11 - 5
src/main/frontend/db/conn.cljs

@@ -79,11 +79,17 @@
    :db/ident key
    key value})
 
-(defn transact!
-  ([repo tx-data]
-   (transact! repo tx-data nil))
-  ([repo tx-data tx-meta]
-   (ldb/transact! repo tx-data tx-meta)))
+(if util/node-test?
+  (defn transact!
+    ([repo tx-data]
+     (transact! repo tx-data nil))
+    ([repo tx-data tx-meta]
+     (ldb/transact! (get-db repo false) tx-data tx-meta)))
+  (defn transact!
+    ([repo tx-data]
+     (transact! repo tx-data nil))
+    ([repo tx-data tx-meta]
+     (ldb/transact! repo tx-data tx-meta))))
 
 (defn start!
   ([repo]

+ 15 - 9
src/main/frontend/db_worker.cljs

@@ -300,15 +300,21 @@
 
                           true
                           (dissoc :insert-blocks?)))]
-         (when-not (and (:create-today-journal? tx-meta)
-                        (:today-journal-name tx-meta)
-                        (seq tx-data)
-                        (d/entity @conn [:block/name (:today-journal-name tx-meta)])) ; today journal created already
-
-           ;; (prn :debug :transact :tx-data tx-data :tx-meta tx-meta')
-
-           (worker-util/profile "Worker db transact"
-                                (ldb/transact! conn tx-data tx-meta')))
+         (if (and (:create-today-journal? tx-meta)
+                  (:today-journal-name tx-meta)
+                  (seq tx-data)
+                  (d/entity @conn [:block/name (:today-journal-name tx-meta)])) ; today journal created already
+
+           ;; remove task from ldb/*request-id->response
+           (worker-util/post-message :sync-db-changes (pr-str
+                                                       {:request-id (:request-id tx-meta)
+                                                        :repo repo
+                                                        :tx-data []
+                                                        :tx-meta nil}))
+           (do
+             ;; (prn :debug :transact :tx-data tx-data :tx-meta tx-meta')
+             (worker-util/profile "Worker db transact"
+                                  (ldb/transact! conn tx-data tx-meta'))))
          nil)
        (catch :default e
          (prn :debug :error)

+ 31 - 31
src/main/frontend/handler/editor.cljs

@@ -1300,37 +1300,37 @@
    (save-current-block! {}))
   ([{:keys [force? skip-properties? current-block] :as opts}]
    ;; non English input method
-   (let [result (when-not (state/editor-in-composition?)
-                  (when (state/get-current-repo)
-                    (try
-                      (let [input-id (state/get-edit-input-id)
-                            block (state/get-edit-block)
-                            db-block (when-let [block-id (:block/uuid block)]
-                                       (db/pull [:block/uuid block-id]))
-                            elem (and input-id (gdom/getElement input-id))
-                            db-content (:block/content db-block)
-                            db-content-without-heading (and db-content
-                                                            (common-util/safe-subs db-content (:block/level db-block)))
-                            value (if (= (:block/uuid current-block) (:block/uuid block))
-                                    (:block/content current-block)
-                                    (and elem (gobj/get elem "value")))]
-                        (when value
-                          (cond
-                            force?
-                            (save-block-aux! db-block value opts)
-
-                            (and skip-properties?
-                                 (db-model/top-block? block)
-                                 (when elem (thingatpt/properties-at-point elem)))
-                            nil
-
-                            (and block value db-content-without-heading
-                                 (not= (string/trim db-content-without-heading)
-                                       (string/trim value)))
-                            (save-block-aux! db-block value opts))))
-                      (catch :default error
-                        (log/error :save-block-failed error)))))]
-     result)))
+   (when-not (or (state/editor-in-composition?)
+                 (state/get-editor-action))
+     (when (state/get-current-repo)
+       (try
+         (let [input-id (state/get-edit-input-id)
+               block (state/get-edit-block)
+               db-block (when-let [block-id (:block/uuid block)]
+                          (db/pull [:block/uuid block-id]))
+               elem (and input-id (gdom/getElement input-id))
+               db-content (:block/content db-block)
+               db-content-without-heading (and db-content
+                                               (common-util/safe-subs db-content (:block/level db-block)))
+               value (if (= (:block/uuid current-block) (:block/uuid block))
+                       (:block/content current-block)
+                       (and elem (gobj/get elem "value")))]
+           (when value
+             (cond
+               force?
+               (save-block-aux! db-block value opts)
+
+               (and skip-properties?
+                    (db-model/top-block? block)
+                    (when elem (thingatpt/properties-at-point elem)))
+               nil
+
+               (and block value db-content-without-heading
+                    (not= (string/trim db-content-without-heading)
+                          (string/trim value)))
+               (save-block-aux! db-block value opts))))
+         (catch :default error
+           (log/error :save-block-failed error)))))))
 
 (defn- clean-content!
   [repo format content]

+ 10 - 3
src/main/frontend/handler/events.cljs

@@ -72,6 +72,7 @@
             [logseq.db.frontend.schema :as db-schema]
             [logseq.common.config :as common-config]
             [promesa.core :as p]
+            [lambdaisland.glogi :as log]
             [rum.core :as rum]
             [frontend.persist-db.browser :as db-browser]
             [frontend.db.rtc.debug-ui :as rtc-debug-ui]
@@ -191,9 +192,15 @@
     (p/let [writes-finished? (when sqlite (.file-writes-finished? sqlite))
             request-finished? (ldb/request-finished?)]
       (if (or (not request-finished?) (not writes-finished?)) ; TODO: test (:sync-graph/init? @state/state)
-        (notification/show!
-         "Please wait seconds until all changes are saved for the current graph."
-         :warning)
+        (do
+          (log/info :graph/switch (cond->
+                                   {:request-finished? request-finished?
+                                    :file-writes-finished? writes-finished?}
+                                    (false? request-finished?)
+                                    (assoc :unfinished-requests? @ldb/*request-id->response)))
+          (notification/show!
+           "Please wait seconds until all changes are saved for the current graph."
+           :warning))
         (graph-switch-on-persisted graph opts)))))
 
 (defmethod handle :graph/pull-down-remote-graph [[_ graph dir-name]]

+ 6 - 3
src/main/frontend/handler/page.cljs

@@ -218,7 +218,7 @@
       (fn [chosen e]
         (util/stop e)
         (state/clear-editor-action!)
-        (let [class? (string/starts-with? chosen (t :new-class))
+        (let [class? (and db-based? hashtag?)
               chosen (-> chosen
                          (string/replace-first (str (t :new-class) " ") "")
                          (string/replace-first (str (t :new-page) " ") ""))
@@ -242,11 +242,14 @@
                          _ (when-not tag-entity
                              (<create! tag {:redirect? false
                                             :create-first-block? false
-                                            :class? class?}))]
+                                            :class? class?}))
+                         tag-entity (db/entity [:block/name (util/page-name-sanity-lc tag)])]
                    (when class?
                      (let [repo (state/get-current-repo)
                            tag-entity (or tag-entity (db/entity [:block/name (util/page-name-sanity-lc tag)]))
-                           tx-data [[:db/add [:block/uuid (:block/uuid edit-block)] :block/tags (:db/id tag-entity)]
+                           tx-data [[:db/add (:db/id tag-entity) :block/type "class"]
+                                    [:db/add [:block/uuid (:block/uuid edit-block)] :block/tags (:db/id tag-entity)]
+                                    ;; TODO: Should classes counted as refs
                                     [:db/add [:block/uuid (:block/uuid edit-block)] :block/refs (:db/id tag-entity)]]]
                        (db/transact! repo tx-data {:outliner-op :save-block})))))))
            (editor-handler/insert-command! id

+ 349 - 167
src/resources/dicts/pt-br.edn

@@ -63,50 +63,50 @@
  :on-boarding/section-computer "computador"
  :on-boarding/section-journals "Notas diárias"
  :on-boarding/section-pages "PÁGINAS"
-:on-boarding/section-phone "telefone"
-:on-boarding/section-app "Aplicativo interno"
-:on-boarding/section-config "Arquivo de configuração"
-:query/config-property-settings "Configurações de propriedades para esta consulta:"
-:bug-report/main-title "Relatório de bug"
-:bug-report/clipboard-inspector-title "Inspetor de dados da área de transferência"
-:bug-report/main-desc "Você pode nos ajudar enviando um relatório de bug? Vamos resolver isso o mais rápido possível."
-:bug-report/section-clipboard-title "O bug que você encontrou está relacionado a esses recursos?"
-:bug-report/section-clipboard-desc "Você pode usar essas ferramentas úteis para nos fornecer informações adicionais."
-:bug-report/section-clipboard-btn-title "Auxiliar da área de transferência"
-:bug-report/section-clipboard-btn-desc "Inspetar e coletar dados da área de transferência"
-:bug-report/section-issues-title "Ou..."
-:bug-report/section-issues-desc "Se não houver ferramentas disponíveis para coletar informações adicionais, relate o bug diretamente."
-:bug-report/section-issues-btn-title "Enviar um relatório de bug"
-:bug-report/section-issues-btn-desc "Ajude a melhorar o Logseq!"
-:bug-report/inspector-page-desc-1 "Pressione Ctrl+V / ⌘+V para inspecionar os dados da área de transferência"
-:bug-report/inspector-page-desc-2 "ou clique aqui para colar se estiver usando a versão mobile"
-:bug-report/inspector-page-placeholder "Pressione e segure aqui para colar se estiver no mobile"
-:bug-report/inspector-page-tip "Algum problema? Sem problemas, clique para voltar para o passo anterior."
-:bug-report/inspector-page-btn-back "Voltar"
-:bug-report/inspector-page-btn-copy "Copiar o resultado"
-:bug-report/inspector-page-copy-notif "Copiado para a área de transferência!"
-:bug-report/inspector-page-btn-create-issue "Criar uma issue"
-:bug-report/inspector-page-desc-clipboard "Aqui estão os dados lidos da área de transferência."
-:bug-report/inspector-page-desc-copy "Se for seguro compartilhar, clique no botão de cópia."
-:bug-report/inspector-page-desc-create-issue "Agora você pode relatar o resultado colado na sua área de transferência. Cole o resultado na seção 'Contexto Adicional' e indique de onde você copiou o conteúdo original. Obrigado!"
-:help/title-usage "Uso"
-:help/title-community "Comunidade"
-:help/title-development "Desenvolvimento"
-:help/title-about "Sobre"
-:help/title-terms "Termos"
-:help/start "Começando"
-:help/about "Sobre o Logseq"
-:help/roadmap "Roteiro"
-:help/bug "Relatório de bug"
-:help/feature "Solicitação de recurso"
-:help/changelog "Registro de alterações"
-:help/blog "Blog do Logseq"
-:help/docs "Documentação"
-:help/privacy "Política de privacidade"
-:help/terms "Termos"
-:help/forum-community "Comunidade do Fórum"
-:help/awesome-logseq "Incrível Logseq"
-:help/shortcuts "Atalhos de teclado"
+ :on-boarding/section-phone "telefone"
+ :on-boarding/section-app "Aplicativo interno"
+ :on-boarding/section-config "Arquivo de configuração"
+ :query/config-property-settings "Configurações de propriedades para esta consulta:"
+ :bug-report/main-title "Relatório de bug"
+ :bug-report/clipboard-inspector-title "Inspetor de dados da área de transferência"
+ :bug-report/main-desc "Você pode nos ajudar enviando um relatório de bug? Vamos resolver isso o mais rápido possível."
+ :bug-report/section-clipboard-title "O bug que você encontrou está relacionado a esses recursos?"
+ :bug-report/section-clipboard-desc "Você pode usar essas ferramentas úteis para nos fornecer informações adicionais."
+ :bug-report/section-clipboard-btn-title "Auxiliar da área de transferência"
+ :bug-report/section-clipboard-btn-desc "Inspetar e coletar dados da área de transferência"
+ :bug-report/section-issues-title "Ou..."
+ :bug-report/section-issues-desc "Se não houver ferramentas disponíveis para coletar informações adicionais, relate o bug diretamente."
+ :bug-report/section-issues-btn-title "Enviar um relatório de bug"
+ :bug-report/section-issues-btn-desc "Ajude a melhorar o Logseq!"
+ :bug-report/inspector-page-desc-1 "Pressione Ctrl+V / ⌘+V para inspecionar os dados da área de transferência"
+ :bug-report/inspector-page-desc-2 "ou clique aqui para colar se estiver usando a versão mobile"
+ :bug-report/inspector-page-placeholder "Pressione e segure aqui para colar se estiver no mobile"
+ :bug-report/inspector-page-tip "Algum problema? Sem problemas, clique para voltar para o passo anterior."
+ :bug-report/inspector-page-btn-back "Voltar"
+ :bug-report/inspector-page-btn-copy "Copiar o resultado"
+ :bug-report/inspector-page-copy-notif "Copiado para a área de transferência!"
+ :bug-report/inspector-page-btn-create-issue "Criar uma issue"
+ :bug-report/inspector-page-desc-clipboard "Aqui estão os dados lidos da área de transferência."
+ :bug-report/inspector-page-desc-copy "Se for seguro compartilhar, clique no botão de cópia."
+ :bug-report/inspector-page-desc-create-issue "Agora você pode relatar o resultado colado na sua área de transferência. Cole o resultado na seção 'Contexto Adicional' e indique de onde você copiou o conteúdo original. Obrigado!"
+ :help/title-usage "Uso"
+ :help/title-community "Comunidade"
+ :help/title-development "Desenvolvimento"
+ :help/title-about "Sobre"
+ :help/title-terms "Termos"
+ :help/start "Começando"
+ :help/about "Sobre o Logseq"
+ :help/roadmap "Roteiro"
+ :help/bug "Relatório de bug"
+ :help/feature "Solicitação de recurso"
+ :help/changelog "Registro de alterações"
+ :help/blog "Blog do Logseq"
+ :help/docs "Documentação"
+ :help/privacy "Política de privacidade"
+ :help/terms "Termos"
+ :help/forum-community "Comunidade do Fórum"
+ :help/awesome-logseq "Incrível Logseq"
+ :help/shortcuts "Atalhos de teclado"
  :help/shortcuts-triggers "Gatilhos"
  :help/shortcut "Atalho"
  :help/slash-autocomplete "Barra de preenchimento automático"
@@ -374,116 +374,116 @@
  :whiteboard/arrow-head "Cabeça da seta"
  :whiteboard/bold "Negrito"
  :whiteboard/italic "Itálico"
-:whiteboard/undo "Desfazer"
-:whiteboard/redo "Refazer"
-:whiteboard/zoom-in "Aumentar zoom"
-:whiteboard/zoom-out "Diminuir zoom"
-:whiteboard/select "Selecionar"
-:whiteboard/pan "Arrastar"
-:whiteboard/add-block-or-page "Adicionar bloco ou página"
-:whiteboard/draw "Desenhar"
-:whiteboard/highlight "Destacar"
-:whiteboard/eraser "Borracha"
-:whiteboard/connector "Conector"
-:whiteboard/text "Texto"
-:whiteboard/color "Cor"
-:whiteboard/select-custom-color "Selecionar cor personalizada"
-:whiteboard/opacity "Opacidade"
-:whiteboard/extra-small "Extra Pequeno"
-:whiteboard/small "Pequeno"
-:whiteboard/medium "Médio"
-:whiteboard/large "Grande"
-:whiteboard/extra-large "Extra Grande"
-:whiteboard/huge "Enorme"
-:whiteboard/scale-level "Nível de escala"
-:whiteboard/rectangle "Retângulo"
-:whiteboard/circle "Círculo"
-:whiteboard/triangle "Triângulo"
-:whiteboard/shape "Forma"
-:whiteboard/open-page "Abrir página"
-:whiteboard/open-page-in-sidebar "Abrir página na barra lateral"
-:whiteboard/remove-link "Remover link"
-:whiteboard/link "Link"
-:whiteboard/references "Referências"
-:whiteboard/link-to-any-page-or-block "Link para qualquer página ou bloco"
-:whiteboard/start-typing-to-search "Comece a digitar para pesquisar..."
-:whiteboard/new-block-no-colon "Novo bloco"
-:whiteboard/new-block "Novo bloco:"
-:whiteboard/new-page "Nova página:"
-:whiteboard/new-whiteboard "Novo whiteboard"
-:whiteboard/search-only-blocks "Pesquisar apenas blocos"
-:whiteboard/search-only-pages "Pesquisar apenas páginas"
-:whiteboard/cache-outdated "O cache está desatualizado. Clique no botão 'Re-indexar' no menu suspenso do grafo."
-:whiteboard/shape-quick-links "Links Rápidos de Forma"
-:whiteboard/edit-pdf "Editar PDF"
-:whiteboard/dashboard-card-new-whiteboard "Novo whiteboard"
-:whiteboard/dashboard-card-created "Criado "
-:whiteboard/dashboard-card-edited "Editado "
-:whiteboard/toggle-grid "Alternar grade"
-:whiteboard/snap-to-grid "Encaixar na grade"
-:whiteboard/toggle-pen-mode "Alternar modo de caneta"
-:flashcards/modal-welcome-title "Hora de criar um cartão!"
-:flashcards/modal-welcome-desc-1 "Você pode adicionar \"#card\" a qualquer bloco para transformá-lo em um cartão ou acionar \"/cloze\" para adicionar algumas partes ocultas."
-:flashcards/modal-welcome-desc-2 "Você pode "
-:flashcards/modal-welcome-desc-3 "clique neste link"
-:flashcards/modal-welcome-desc-4 " para verificar a documentação."
-:flashcards/modal-btn-show-answers "Mostrar respostas"
-:flashcards/modal-btn-hide-answers "Esconder respostas"
-:flashcards/modal-btn-show-clozes "Mostrar partes ocultas"
-:flashcards/modal-btn-next-card "Próximo"
-:flashcards/modal-btn-reset "Redefinir"
-  :flashcards/modal-btn-reset-tip "Redefina este cartão para que você possa revisá-lo imediatamente."
-  :flashcards/modal-btn-forgotten "Esquecido"
-  :flashcards/modal-btn-remembered "Lembrado"
-  :flashcards/modal-btn-recall "Levou um tempo para lembrar"
-  :flashcards/modal-finished "Parabéns, você revisou todos os cartões para esta consulta, nos vemos na próxima vez! 💯"
-  :flashcards/modal-select-all "Todos"
-  :flashcards/modal-select-switch "Alternar para"
-  :flashcards/modal-current-total "Atual/Total"
-  :flashcards/modal-overdue-total "Atrasado/Total"
-  :flashcards/modal-toggle-preview-mode "Alternar modo de pré-visualização"
-  :flashcards/modal-toggle-random-mode "Alternar modo aleatório"
+ :whiteboard/undo "Desfazer"
+ :whiteboard/redo "Refazer"
+ :whiteboard/zoom-in "Aumentar zoom"
+ :whiteboard/zoom-out "Diminuir zoom"
+ :whiteboard/select "Selecionar"
+ :whiteboard/pan "Arrastar"
+ :whiteboard/add-block-or-page "Adicionar bloco ou página"
+ :whiteboard/draw "Desenhar"
+ :whiteboard/highlight "Destacar"
+ :whiteboard/eraser "Borracha"
+ :whiteboard/connector "Conector"
+ :whiteboard/text "Texto"
+ :whiteboard/color "Cor"
+ :whiteboard/select-custom-color "Selecionar cor personalizada"
+ :whiteboard/opacity "Opacidade"
+ :whiteboard/extra-small "Extra Pequeno"
+ :whiteboard/small "Pequeno"
+ :whiteboard/medium "Médio"
+ :whiteboard/large "Grande"
+ :whiteboard/extra-large "Extra Grande"
+ :whiteboard/huge "Enorme"
+ :whiteboard/scale-level "Nível de escala"
+ :whiteboard/rectangle "Retângulo"
+ :whiteboard/circle "Círculo"
+ :whiteboard/triangle "Triângulo"
+ :whiteboard/shape "Forma"
+ :whiteboard/open-page "Abrir página"
+ :whiteboard/open-page-in-sidebar "Abrir página na barra lateral"
+ :whiteboard/remove-link "Remover link"
+ :whiteboard/link "Link"
+ :whiteboard/references "Referências"
+ :whiteboard/link-to-any-page-or-block "Link para qualquer página ou bloco"
+ :whiteboard/start-typing-to-search "Comece a digitar para pesquisar..."
+ :whiteboard/new-block-no-colon "Novo bloco"
+ :whiteboard/new-block "Novo bloco:"
+ :whiteboard/new-page "Nova página:"
+ :whiteboard/new-whiteboard "Novo whiteboard"
+ :whiteboard/search-only-blocks "Pesquisar apenas blocos"
+ :whiteboard/search-only-pages "Pesquisar apenas páginas"
+ :whiteboard/cache-outdated "O cache está desatualizado. Clique no botão 'Re-indexar' no menu suspenso do grafo."
+ :whiteboard/shape-quick-links "Links Rápidos de Forma"
+ :whiteboard/edit-pdf "Editar PDF"
+ :whiteboard/dashboard-card-new-whiteboard "Novo whiteboard"
+ :whiteboard/dashboard-card-created "Criado "
+ :whiteboard/dashboard-card-edited "Editado "
+ :whiteboard/toggle-grid "Alternar grade"
+ :whiteboard/snap-to-grid "Encaixar na grade"
+ :whiteboard/toggle-pen-mode "Alternar modo de caneta"
+ :flashcards/modal-welcome-title "Hora de criar um cartão!"
+ :flashcards/modal-welcome-desc-1 "Você pode adicionar \"#card\" a qualquer bloco para transformá-lo em um cartão ou acionar \"/cloze\" para adicionar algumas partes ocultas."
+ :flashcards/modal-welcome-desc-2 "Você pode "
+ :flashcards/modal-welcome-desc-3 "clique neste link"
+ :flashcards/modal-welcome-desc-4 " para verificar a documentação."
+ :flashcards/modal-btn-show-answers "Mostrar respostas"
+ :flashcards/modal-btn-hide-answers "Esconder respostas"
+ :flashcards/modal-btn-show-clozes "Mostrar partes ocultas"
+ :flashcards/modal-btn-next-card "Próximo"
+ :flashcards/modal-btn-reset "Redefinir"
+ :flashcards/modal-btn-reset-tip "Redefina este cartão para que você possa revisá-lo imediatamente."
+ :flashcards/modal-btn-forgotten "Esquecido"
+ :flashcards/modal-btn-remembered "Lembrado"
+ :flashcards/modal-btn-recall "Levou um tempo para lembrar"
+ :flashcards/modal-finished "Parabéns, você revisou todos os cartões para esta consulta, nos vemos na próxima vez! 💯"
+ :flashcards/modal-select-all "Todos"
+ :flashcards/modal-select-switch "Alternar para"
+ :flashcards/modal-current-total "Atual/Total"
+ :flashcards/modal-overdue-total "Atrasado/Total"
+ :flashcards/modal-toggle-preview-mode "Alternar modo de pré-visualização"
+ :flashcards/modal-toggle-random-mode "Alternar modo aleatório"
 
-  :home "Início"
-  :new-page "Nova página:"
-  :new-graph "Adicionar novo grafo"
-  :graph "Grafo"
-  :graph/all-graphs "Todos os grafos"
-  :graph/local-graphs "Grafos locais:"
-  :graph/remote-graphs "Grafos remotos:"
-  :export "Exportar"
-  :export-graph "Exportar grafo"
-  :export-page "Exportar página"
-  :export-markdown "Exportar como Markdown padrão (sem propriedades de bloco)"
-  :export-opml "Exportar como OPML"
-  :export-public-pages "Exportar páginas públicas"
-  :export-json "Exportar como JSON"
-  :export-roam-json "Exportar como Roam JSON"
-  :export-edn "Exportar como EDN"
-  :export-transparent-background "Fundo transparente"
-  :export-copy-to-clipboard "Copiar para a área de transferência"
-  :export-copied-to-clipboard "Copiado para a área de transferência!"
-  :export-save-to-file "Salvar em arquivo"
-  :all-graphs "Todos os grafos"
-  :all-pages "Todas as páginas"
-  :all-whiteboards "Todos os whiteboards"
-  :all-files "Todos os arquivos"
-  :remove-orphaned-pages "Remover páginas órfãs?"
-  :all-journals "Todos os diários"
-  :settings "Configurações"
-  :plugins "Plugins"
-  :themes "Temas"
-  :relaunch-confirm-to-work "Necessita reiniciar o aplicativo para funcionar. Deseja reiniciá-lo agora?"
-  :import "Importar"
-  :importing "Importando"
-  :join-community "Junte-se à comunidade"
-  :discourse-title "Nosso fórum!"
-  :help-shortcut-title "Clique para verificar os atalhos e outras dicas"
-  :loading "Carregando..."
-  :parsing-files "Analisando arquivos"
-  :loading-files "Carregando arquivos"
-  :login "Entrar"
-  :logout "Sair"
+ :home "Início"
+ :new-page "Nova página:"
+ :new-graph "Adicionar novo grafo"
+ :graph "Grafo"
+ :graph/all-graphs "Todos os grafos"
+ :graph/local-graphs "Grafos locais:"
+ :graph/remote-graphs "Grafos remotos:"
+ :export "Exportar"
+ :export-graph "Exportar grafo"
+ :export-page "Exportar página"
+ :export-markdown "Exportar como Markdown padrão (sem propriedades de bloco)"
+ :export-opml "Exportar como OPML"
+ :export-public-pages "Exportar páginas públicas"
+ :export-json "Exportar como JSON"
+ :export-roam-json "Exportar como Roam JSON"
+ :export-edn "Exportar como EDN"
+ :export-transparent-background "Fundo transparente"
+ :export-copy-to-clipboard "Copiar para a área de transferência"
+ :export-copied-to-clipboard "Copiado para a área de transferência!"
+ :export-save-to-file "Salvar em arquivo"
+ :all-graphs "Todos os grafos"
+ :all-pages "Todas as páginas"
+ :all-whiteboards "Todos os whiteboards"
+ :all-files "Todos os arquivos"
+ :remove-orphaned-pages "Remover páginas órfãs?"
+ :all-journals "Todos os diários"
+ :settings "Configurações"
+ :plugins "Plugins"
+ :themes "Temas"
+ :relaunch-confirm-to-work "Necessita reiniciar o aplicativo para funcionar. Deseja reiniciá-lo agora?"
+ :import "Importar"
+ :importing "Importando"
+ :join-community "Junte-se à comunidade"
+ :discourse-title "Nosso fórum!"
+ :help-shortcut-title "Clique para verificar os atalhos e outras dicas"
+ :loading "Carregando..."
+ :parsing-files "Analisando arquivos"
+ :loading-files "Carregando arquivos"
+ :login "Entrar"
+ :logout "Sair"
  :logout-user "Sair ({1})"
  :download "Baixar"
  :language "Idioma"
@@ -496,7 +496,7 @@
 
  :help/shortcut-page-title "Atalhos de teclado"
 
-  :plugin/installed "Instalado"
+ :plugin/installed "Instalado"
  :plugin/installed-plugin "Plugin instalado: {1}"
  :plugin/not-installed "Não instalado"
  :plugin/installing "Instalando"
@@ -530,22 +530,22 @@
  :plugin/unpacked-tips "Selecione o diretório do plugin"
  :plugin/contribute "✨ Escreva e envie um novo plugin"
  :plugin/up-to-date "Está atualizado {1}"
-:plugin/custom-js-alert "Encontrado o arquivo custom.js, permitir a execução? (Se você não entende o conteúdo deste arquivo, é recomendável não permitir a execução, pois isso tem certos riscos de segurança.)"
-:plugin/security-warning "Os plugins podem acessar o seu grafo e os seus arquivos locais, fazer requisições de rede.
+ :plugin/custom-js-alert "Encontrado o arquivo custom.js, permitir a execução? (Se você não entende o conteúdo deste arquivo, é recomendável não permitir a execução, pois isso tem certos riscos de segurança.)"
+ :plugin/security-warning "Os plugins podem acessar o seu grafo e os seus arquivos locais, fazer requisições de rede.
      Eles também podem causar corrupção ou perda de dados. Estamos trabalhando em regras de acesso adequadas para os seus grafos.
      Enquanto isso, certifique-se de fazer backups regulares dos seus grafos e só instale os plugins quando puder ler e
      entender o código-fonte."
-:plugin/search-plugin "Pesquisar plugins"
-:plugin/open-preferences "Abrir Preferências"
-:plugin/open-logseq-dir "Abrir"
-:plugin/remote-error "Erro remoto: "
-:plugin/checking-for-updates "Verificando atualizações de plugins ..."
-:plugin/list-of-updates "Atualizações de plugins: "
-:plugin/auto-check-for-updates "Verificação automática de atualizações"
-:plugin.install-from-file/menu-title "Instalar a partir de plugins.edn"
-:plugin.install-from-file/title "Instalar plugins a partir de plugins.edn"
-:plugin.install-from-file/notice "Os seguintes plugins substituirão os seus plugins:"
-:plugin.install-from-file/success "Todos os plugins foram instalados!"
+ :plugin/search-plugin "Pesquisar plugins"
+ :plugin/open-preferences "Abrir Preferências"
+ :plugin/open-logseq-dir "Abrir"
+ :plugin/remote-error "Erro remoto: "
+ :plugin/checking-for-updates "Verificando atualizações de plugins ..."
+ :plugin/list-of-updates "Atualizações de plugins: "
+ :plugin/auto-check-for-updates "Verificação automática de atualizações"
+ :plugin.install-from-file/menu-title "Instalar a partir de plugins.edn"
+ :plugin.install-from-file/title "Instalar plugins a partir de plugins.edn"
+ :plugin.install-from-file/notice "Os seguintes plugins substituirão os seus plugins:"
+ :plugin.install-from-file/success "Todos os plugins foram instalados!"
 
  :pdf/copy-ref "Copiar referência"
  :pdf/copy-text "Copiar texto"
@@ -612,6 +612,188 @@
  :header/go-back                     "Voltar"
  :header/go-forward                  "Avançar"
 
+ :command.auto-complete/complete "Auto-completar: Escolher item selecionado"
+ :command.auto-complete/next "Auto-completar: Selecionar próximo item"
+ :command.auto-complete/open-link "Auto-completar: Abrir item selecionado no navegador"
+ :command.auto-complete/prev "Auto-completar: Selecionar item anterior"
+ :command.auto-complete/shift-complete "Auto-completar: Abrir item selecionado na barra lateral"
+ :command.cards/forgotten "Cartões: esquecidos"
+ :command.cards/next-card "Cartões: próximo cartão"
+ :command.cards/recall "Cartões: lembrar em algum tempo"
+ :command.cards/remembered "Cartões: lembrados"
+ :command.cards/toggle-answers "Cartões: mostrar/ocultar respostas/ocultados"
+ :command.command/run "Executar comando git"
+ :command.command/toggle-favorite "Adicionar/remover dos favoritos"
+ :command.command-palette/toggle "Pesquisar comandos"
+ :command.date-picker/complete "Seletor de data: Escolher dia selecionado"
+ :command.date-picker/next-day "Seletor de data: Selecionar próximo dia"
+ :command.date-picker/next-week "Seletor de data: Selecionar próxima semana"
+ :command.date-picker/prev-day "Seletor de data: Selecionar dia anterior"
+ :command.date-picker/prev-week "Seletor de data: Selecionar semana anterior"
+ :command.dev/show-block-ast "(Dev) Mostrar AST do bloco"
+ :command.dev/show-block-data "(Dev) Mostrar dados do bloco"
+ :command.dev/show-page-ast "(Dev) Mostrar AST da página"
+ :command.dev/show-page-data "(Dev) Mostrar dados da página"
+ :command.editor/backspace "Backspace / Apagar"
+ :command.editor/backward-kill-word "Excluir uma palavra com backspace"
+ :command.editor/backward-word "Mover cursor para trás da palavra"
+ :command.editor/beginning-of-block "Mover cursor para o início de um bloco"
+ :command.editor/bold "Negrito"
+ :command.editor/clear-block "Excluir conteúdo inteiro do bloco"
+ :command.editor/collapse-block-children "Contrair"
+ :command.editor/copy "Copiar (copia seleção ou referência de bloco)"
+ :command.editor/copy-current-file "Copiar arquivo atual"
+ :command.editor/copy-embed "Copiar incorporação de bloco apontando para o bloco atual"
+ :command.editor/copy-page-url "Copiar URL da página"
+ :command.editor/copy-text "Copiar seleções como texto"
+ :command.editor/cut "Cortar"
+ :command.editor/cycle-todo "Rotacionar o estado TODO do item atual"
+ :command.editor/delete "Delete / Tecla Excluir"
+ :command.editor/delete-selection "Excluir blocos selecionados"
+ :command.editor/down "Mover cursor para baixo / Selecionar para baixo"
+ :command.editor/end-of-block "Mover cursor para o final de um bloco"
+ :command.editor/escape-editing "Sair da edição"
+ :command.editor/expand-block-children "Expandir"
+ :command.editor/follow-link "Seguir link sob o cursor"
+ :command.editor/forward-kill-word "Excluir uma palavra com tecla delete"
+ :command.editor/forward-word "Mover cursor para frente da palavra"
+ :command.editor/highlight "Destacar"
+ :command.editor/indent "Indentar bloco"
+ :command.editor/insert-link "Link de HTML"
+ :command.editor/insert-youtube-timestamp "Inserir timestamp do YouTube"
+ :command.editor/italics "Itálico"
+ :command.editor/kill-line-after "Excluir linha após a posição do cursor"
+ :command.editor/kill-line-before "Excluir linha antes da posição do cursor"
+ :command.editor/left "Mover cursor para a esquerda / Abrir bloco selecionado no início"
+ :command.editor/move-block-down "Mover bloco para baixo"
+ :command.editor/move-block-up "Mover bloco para cima"
+ :command.editor/new-block "Criar novo bloco"
+ :command.editor/new-line "Nova linha no bloco atual"
+ :command.editor/new-whiteboard "Novo whiteboard"
+ :command.editor/open-edit "Editar bloco selecionado"
+ :command.editor/open-file-in-default-app "Abrir arquivo no aplicativo padrão"
+ :command.editor/open-file-in-directory "Abrir arquivo no diretório pai"
+ :command.editor/open-link-in-sidebar "Abrir link na barra lateral"
+ :command.editor/outdent "Diminuir recuo do bloco"
+ :command.editor/paste-text-in-one-block-at-point "Colar texto em um bloco no lugar"
+ :command.editor/redo "Refazer"
+ :command.editor/replace-block-reference-at-point "Substituir referência de bloco pelo seu conteúdo no lugar"
+ :command.editor/right "Mover cursor para a direita / Abrir bloco selecionado no final"
+ :command.editor/select-all-blocks "Selecionar todos os blocos"
+ :command.editor/select-block-down "Selecionar bloco abaixo"
+ :command.editor/select-block-up "Selecionar bloco acima"
+ :command.editor/select-down "Selecionar conteúdo abaixo"
+ :command.editor/select-parent "Selecionar bloco pai"
+ :command.editor/select-up "Selecionar conteúdo acima"
+ :command.editor/strike-through "Riscar"
+ :command.editor/toggle-number-list "Alternar lista numerada"
+ :command.editor/toggle-open-blocks "Alternar blocos abertos (contrair ou expandir todos os blocos)"
+ :command.editor/toggle-undo-redo-mode "Alternar modo desfazer/refazer (global ou apenas nesta página)"
+ :command.editor/undo "Desfazer"
+ :command.editor/up "Mover cursor para cima / Selecionar para cima"
+ :command.editor/zoom-in "Dar zoom no bloco em edição / Avançar caso contrário"
+ :command.editor/zoom-out "Dar zoom out no bloco em edição / Retroceder caso contrário"
+ :command.git/commit "Criar commit git com mensagem"
+ :command.go/all-graphs "Ir para todos os grafos"
+ :command.go/all-pages "Ir para todas as páginas"
+ :command.go/backward "Retroceder"
+ :command.go/electron-find-in-page "Encontrar texto na página"
+ :command.go/electron-jump-to-the-next "Pular para a próxima correspondência na sua busca na barra de pesquisa"
+ :command.go/electron-jump-to-the-previous "Pular para a correspondência anterior na sua busca na barra de pesquisa"
+ :command.go/flashcards "Alternar cartões de memorização"
+ :command.go/forward "Avançar"
+ :command.go/graph-view "Ir para visualização de grafo"
+ :command.go/home "Ir para a página inicial"
+ :command.go/journals "Ir para diários"
+ :command.go/keyboard-shortcuts "Ir para atalhos de teclado"
+ :command.go/next-journal "Ir para o próximo diário"
+ :command.go/prev-journal "Ir para o diário anterior"
+ :command.go/search "Pesquisar páginas e blocos"
+ :command.go/search-in-page "Pesquisar blocos na página"
+ :command.go/tomorrow "Ir para amanhã"
+ :command.go/whiteboards "Ir para whiteboards"
+ :command.graph/add "Adicionar um grafo"
+ :command.graph/export-as-html "Exportar páginas de grafos públicos como HTML"
+ :command.graph/open "Selecionar grafo para abrir"
+ :command.graph/re-index "Reindexar grafo atual"
+ :command.graph/remove "Remover um grafo"
+ :command.misc/copy "Copiar"
+ :command.pdf/close "PDF: Fechar documento PDF atual"
+ :command.pdf/find "PDF: Pesquisar texto do documento PDF atual"
+ :command.pdf/next-page "PDF: Próxima página do documento PDF atual"
+ :command.pdf/previous-page "PDF: Página anterior do documento PDF atual"
+ :command.search/re-index "Reconstruir índice de pesquisa"
+ :command.sidebar/clear "Limpar todos na barra lateral direita"
+ :command.sidebar/close-top "Fechar o item superior na barra lateral direita"
+ :command.sidebar/open-today-page "Abrir a página de hoje na barra lateral direita"
+ :command.ui/clear-all-notifications "Limpar todas as notificações"
+ :command.ui/cycle-color "Mudar cor"
+ :command.ui/cycle-color-off "Desativar mudança de cor"
+ :command.ui/goto-plugins "Ir para o painel de plugins"
+ :command.ui/install-plugins-from-file "Instalar plugins do arquivo plugins.edn"
+ :command.ui/select-theme-color "Selecionar cores de tema disponíveis"
+ :command.ui/toggle-brackets "Alternar se deve exibir colchetes"
+ :command.ui/toggle-contents "Alternar conteúdo na barra lateral"
+ :command.ui/toggle-document-mode "Alternar modo de documento"
+ :command.ui/toggle-help "Alternar ajuda"
+ :command.ui/toggle-left-sidebar "Alternar barra lateral esquerda"
+ :command.ui/toggle-right-sidebar "Alternar barra lateral direita"
+ :command.ui/toggle-settings "Alternar configurações"
+ :command.ui/toggle-theme "Alternar entre tema escuro/claro"
+ :command.ui/toggle-wide-mode "Alternar modo amplo"
+ :command.whiteboard/bring-forward "Mover para frente"
+ :command.whiteboard/bring-to-front "Mover para a frente"
+ :command.whiteboard/clone-down "Clonar para baixo"
+ :command.whiteboard/clone-left "Clonar para a esquerda"
+ :command.whiteboard/clone-right "Clonar para a direita"
+ :command.whiteboard/clone-up "Clonar para cima"
+ :command.whiteboard/connector "Ferramenta de conexão"
+ :command.whiteboard/ellipse "Ferramenta de elipse"
+ :command.whiteboard/eraser "Ferramenta de borracha"
+ :command.whiteboard/group "Seleção de grupo"
+ :command.whiteboard/highlighter "Ferramenta de marca-texto"
+ :command.whiteboard/lock "Travar seleção"
+ :command.whiteboard/pan "Ferramenta de movimentação"
+ :command.whiteboard/pencil "Ferramenta de lápis"
+ :command.whiteboard/portal "Ferramenta de portal"
+ :command.whiteboard/rectangle "Ferramenta de retângulo"
+ :command.whiteboard/reset-zoom "Redefinir zoom"
+ :command.whiteboard/select "Ferramenta de seleção"
+ :command.whiteboard/send-backward "Mover para trás"
+ :command.whiteboard/send-to-back "Mover para trás"
+ :command.whiteboard/text "Ferramenta de texto"
+ :command.whiteboard/toggle-grid "Alternar grade do canvas"
+ :command.whiteboard/ungroup "Desagrupar seleção"
+ :command.whiteboard/unlock "Destravar seleção"
+ :command.whiteboard/zoom-to-fit "Zoom para desenho"
+ :command.whiteboard/zoom-to-selection "Zoom para ajustar à seleção"
+ :command.window/close "Fechar janela"
+ :help/search "Pesquisar páginas/blocos/comandos"
+ :linked-references/filter-directions "Clique para incluir e shift-clique para excluir. Clique novamente para remover."
+ :linked-references/filter-excludes "Excluir: "
+ :linked-references/filter-heading "Filtrar"
+ :linked-references/filter-includes "Incluir: "
+ :linked-references/reference-count (fn [filtered-count total] (str (when filtered-count (str filtered-count " de ")) total (if (= total 1) " Referência Vinculada" " Referências Vinculadas")))
+ :settings-page/git-commit-on-close "Commitar mudanças no Git ao fechar a janela"
+ :unlinked-references/reference-count (fn [total] (str total (if (= total 1) " Referência Não-Vinculada" " Referências Não-Vinculadas")))
+ :whiteboard/reference-count (fn [refs-count] (if (= refs-count 1) "Referência" "Referências"))
+
+ ;; Allowed duplicates - start
+ :settings-of-plugins "Plugins"
+ :whiteboard "Whiteboard"
+ :whiteboards "Whiteboards"
+ :on-boarding/quick-tour-journal-page-desc-2 "[[link]]"
+ :plugin/downloads "Downloads"
+ :right-side-bar/history-global "global"
+ :right-side-bar/whiteboards "Whiteboards"
+ :search-item/whiteboard "Whiteboard"
+ :settings-page/enable-whiteboards "Whiteboards"
+ :settings-page/plugin-system "Plugins"
+ :shortcut.category/whiteboard "Whiteboard"
+ :command.whiteboard/zoom-in "Zoom in"
+ :command.whiteboard/zoom-out "Zoom out"
+ ;; Allowed duplicates - end
+
  ;; Os comandos estão aninhados por enquanto para permanecerem sincronizados com o sistema de atalhos.
  ;; Outras linguagens não devem aninhar chaves em :commands
 

+ 8 - 8
src/test/frontend/handler/db_based/property_test.cljs

@@ -204,11 +204,12 @@
     (testing "Add classes to a block"
       (editor-handler/save-block! repo fbid "Block 1 #class1 #class2 #class3")
       (is (= 3 (count (:block/tags (db/entity [:block/uuid fbid]))))))
-    (testing "Remove a class from a block"
+    ;; FIXME: @tiensonqin https://github.com/logseq/logseq/commit/575624c650b2b7e919033a79aa5d14b97507d86f
+    #_(testing "Remove a class from a block"
       ;; make sure class2 will not be deleted when removing it from the first block
-      (editor-handler/save-block! repo sbid "Block 2 #class2")
-      (editor-handler/save-block! repo fbid "Block 1 #class1 #class3")
-      (is (= 2 (count (:block/tags (db/entity [:block/uuid fbid]))))))
+        (editor-handler/save-block! repo sbid "Block 2 #class2")
+        (editor-handler/save-block! repo fbid "Block 1 #class1 #class3")
+        (is (= 2 (count (:block/tags (db/entity [:block/uuid fbid]))))))
     (testing "Get block's classes properties"
       ;; set c2 as parent of c3
       (let [c3 (db/entity [:block/name "class3"])]
@@ -300,8 +301,8 @@
   (testing "Convert property input string according to its schema type"
     (let [test-uuid (random-uuid)]
       (are [x y]
-          (= (let [[schema-type value] x]
-               (db-property-handler/convert-property-input-string schema-type value)) y)
+           (= (let [[schema-type value] x]
+                (db-property-handler/convert-property-input-string schema-type value)) y)
         [:number "1"] 1
         [:number "1.2"] 1.2
         [:page (str test-uuid)] test-uuid
@@ -317,8 +318,7 @@
   (testing "Replace property key with its uuid"
     (let [result (db-property-handler/replace-key-with-id {"property 1" "value 1"
                                                            "property 2" "value 2"})]
-      (is (every? uuid? (keys result))))
-    )
+      (is (every? uuid? (keys result)))))
   (testing "Throw an error if a property doesn't exists"
     (is (thrown? js/Error (db-property-handler/replace-key-with-id {"property not exists yet" "value 1"})))))
 

+ 59 - 37
yarn.lock

@@ -1654,7 +1654,7 @@ browserify-zlib@^0.2.0:
   dependencies:
     pako "~1.0.5"
 
-browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9:
+browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9:
   version "4.21.11"
   resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.11.tgz#35f74a3e51adc4d193dcd76ea13858de7b8fecb8"
   integrity sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==
@@ -5100,6 +5100,11 @@ nanoid@^3.3.4:
   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
   integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
 
+nanoid@^3.3.7:
+  version "3.3.7"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+  integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
 nanomatch@^1.2.9:
   version "1.2.13"
   resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@@ -5901,22 +5906,22 @@ [email protected]:
     slash "^4.0.0"
     yargs "^17.0.0"
 
-[email protected], postcss-colormin@^5.3.1:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a"
-  integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==
+postcss-colormin@^5.3.1:
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f"
+  integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==
   dependencies:
-    browserslist "^4.16.6"
+    browserslist "^4.21.4"
     caniuse-api "^3.0.0"
     colord "^2.9.1"
     postcss-value-parser "^4.2.0"
 
-[email protected], postcss-convert-values@^5.1.3:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab"
-  integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==
+postcss-convert-values@^5.1.3:
+  version "5.1.3"
+  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393"
+  integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==
   dependencies:
-    browserslist "^4.20.3"
+    browserslist "^4.21.4"
     postcss-value-parser "^4.2.0"
 
 postcss-discard-comments@^5.1.2:
@@ -5980,10 +5985,10 @@ postcss-import@^15.1.0:
     read-cache "^1.0.0"
     resolve "^1.1.7"
 
-[email protected], postcss-js@^4.0.1:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
-  integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==
+postcss-js@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
+  integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
   dependencies:
     camelcase-css "^2.0.1"
 
@@ -6007,20 +6012,20 @@ postcss-media-query-parser@^0.2.3:
   resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
   integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==
 
-[email protected], postcss-merge-longhand@^5.1.7:
-  version "5.1.6"
-  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce"
-  integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==
+postcss-merge-longhand@^5.1.7:
+  version "5.1.7"
+  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16"
+  integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==
   dependencies:
     postcss-value-parser "^4.2.0"
-    stylehacks "^5.1.0"
+    stylehacks "^5.1.1"
 
-[email protected], postcss-merge-rules@^5.1.4:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5"
-  integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==
+postcss-merge-rules@^5.1.4:
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c"
+  integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==
   dependencies:
-    browserslist "^4.16.6"
+    browserslist "^4.21.4"
     caniuse-api "^3.0.0"
     cssnano-utils "^3.1.0"
     postcss-selector-parser "^6.0.5"
@@ -6041,12 +6046,12 @@ postcss-minify-gradients@^5.1.1:
     cssnano-utils "^3.1.0"
     postcss-value-parser "^4.2.0"
 
-[email protected], postcss-minify-params@^5.1.4:
-  version "5.1.3"
-  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9"
-  integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==
+postcss-minify-params@^5.1.4:
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352"
+  integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==
   dependencies:
-    browserslist "^4.16.6"
+    browserslist "^4.21.4"
     cssnano-utils "^3.1.0"
     postcss-value-parser "^4.2.0"
 
@@ -6142,12 +6147,12 @@ postcss-ordered-values@^5.1.3:
     cssnano-utils "^3.1.0"
     postcss-value-parser "^4.2.0"
 
-[email protected], postcss-reduce-initial@^5.1.2:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6"
-  integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==
+postcss-reduce-initial@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6"
+  integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==
   dependencies:
-    browserslist "^4.16.6"
+    browserslist "^4.21.4"
     caniuse-api "^3.0.0"
 
 postcss-reduce-transforms@^5.1.0:
@@ -6233,7 +6238,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
   integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
 
[email protected], postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6, postcss@^8.2.1, postcss@^8.4.23:
[email protected], postcss@^8.2.1:
   version "8.4.17"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.17.tgz#f87863ec7cd353f81f7ab2dec5d67d861bbb1be5"
   integrity sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==
@@ -6242,6 +6247,23 @@ [email protected], postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.2
     picocolors "^1.0.0"
     source-map-js "^1.0.2"
 
+postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6:
+  version "7.0.39"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
+  integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
+  dependencies:
+    picocolors "^0.2.1"
+    source-map "^0.6.1"
+
+postcss@^8.4.23:
+  version "8.4.33"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742"
+  integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==
+  dependencies:
+    nanoid "^3.3.7"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
 [email protected]:
   version "1.10.2"
   resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.10.2.tgz#74d6c84f9675b65dfd4ff6f4051ed8d3cb974076"
@@ -7426,7 +7448,7 @@ style-search@^0.1.0:
   resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
   integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==
 
-stylehacks@^5.1.0:
+stylehacks@^5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9"
   integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==