Browse Source

bump React to 18

Tienson Qin 6 months ago
parent
commit
70e2012e29
51 changed files with 482 additions and 469 deletions
  1. 2 1
      deps.edn
  2. 3 1
      deps/shui/deps.edn
  3. 6 5
      deps/shui/src/logseq/shui/demo.cljs
  4. 235 236
      deps/shui/src/logseq/shui/demo2.cljs
  5. 17 13
      deps/shui/src/logseq/shui/dialog/core.cljs
  6. 13 7
      deps/shui/src/logseq/shui/hooks.cljs
  7. 114 113
      deps/shui/src/logseq/shui/select/multi.cljs
  8. 8 7
      deps/shui/src/logseq/shui/table/core.cljc
  9. 17 16
      deps/shui/src/logseq/shui/toaster/core.cljs
  10. 2 2
      package.json
  11. 1 1
      src/main/frontend/components/all_pages.cljs
  12. 1 1
      src/main/frontend/components/assets.cljs
  13. 1 1
      src/main/frontend/components/block.cljs
  14. 1 1
      src/main/frontend/components/bug_report.cljs
  15. 1 1
      src/main/frontend/components/cmdk/core.cljs
  16. 1 1
      src/main/frontend/components/cmdk/list_item.cljs
  17. 1 1
      src/main/frontend/components/container.cljs
  18. 1 1
      src/main/frontend/components/dnd.cljs
  19. 1 1
      src/main/frontend/components/editor.cljs
  20. 1 1
      src/main/frontend/components/file_based/block.cljs
  21. 5 5
      src/main/frontend/components/file_based/git.cljs
  22. 1 1
      src/main/frontend/components/file_sync.cljs
  23. 1 1
      src/main/frontend/components/handbooks.cljs
  24. 1 1
      src/main/frontend/components/header.cljs
  25. 1 1
      src/main/frontend/components/icon.cljs
  26. 1 1
      src/main/frontend/components/imports.cljs
  27. 1 1
      src/main/frontend/components/objects.cljs
  28. 1 1
      src/main/frontend/components/page.cljs
  29. 1 1
      src/main/frontend/components/plugins.cljs
  30. 1 1
      src/main/frontend/components/plugins_settings.cljs
  31. 1 1
      src/main/frontend/components/property.cljs
  32. 1 1
      src/main/frontend/components/property/config.cljs
  33. 9 9
      src/main/frontend/components/property/value.cljs
  34. 1 1
      src/main/frontend/components/query.cljs
  35. 1 1
      src/main/frontend/components/query/builder.cljs
  36. 1 1
      src/main/frontend/components/right_sidebar.cljs
  37. 1 1
      src/main/frontend/components/server.cljs
  38. 1 1
      src/main/frontend/components/settings.cljs
  39. 1 1
      src/main/frontend/components/shortcut.cljs
  40. 1 1
      src/main/frontend/components/theme.cljs
  41. 1 1
      src/main/frontend/components/user/login.cljs
  42. 1 1
      src/main/frontend/components/views.cljs
  43. 1 1
      src/main/frontend/extensions/handbooks/core.cljs
  44. 1 1
      src/main/frontend/extensions/pdf/core.cljs
  45. 1 1
      src/main/frontend/extensions/pdf/toolbar.cljs
  46. 1 1
      src/main/frontend/extensions/tldraw.cljs
  47. 1 1
      src/main/frontend/extensions/zotero.cljs
  48. 1 1
      src/main/frontend/mobile/graph_picker.cljs
  49. 1 1
      src/main/frontend/rum.cljs
  50. 1 1
      src/main/frontend/ui.cljs
  51. 13 16
      yarn.lock

+ 2 - 1
deps.edn

@@ -1,7 +1,8 @@
 {:paths ["src/main" "src/electron" "src/resources"]
  :deps
  {org.clojure/clojure                   {:mvn/version "1.11.1"}
-  rum/rum                               {:mvn/version "0.12.9"}
+  rum/rum                               {:git/url "https://github.com/logseq/rum" ;; fork
+                                         :sha     "5d672bf84ed944414b9f61eeb83808ead7be9127"}
 
   datascript/datascript                 {:git/url "https://github.com/logseq/datascript" ;; fork
                                          :sha     "1f84d10df4970f054489b0ee78799f64b8dd4ee2"}

+ 3 - 1
deps/shui/deps.edn

@@ -3,6 +3,8 @@
  {org.clojure/clojure                   {:mvn/version "1.11.1"}
   org.clojure/clojurescript             {:mvn/version "1.11.132"}
   funcool/promesa                       {:mvn/version "11.0.678"}
-  rum/rum                               {:mvn/version "0.12.9"}
+  rum/rum                               {:git/url "https://github.com/logseq/rum" ;; fork
+                                         :sha     "5d672bf84ed944414b9f61eeb83808ead7be9127"}
+
   medley/medley                         {:mvn/version "1.4.0"}
   cljs-bean/cljs-bean                   {:mvn/version "1.5.0"}}}

+ 6 - 5
deps/shui/src/logseq/shui/demo.cljs

@@ -1,10 +1,11 @@
 (ns logseq.shui.demo
-  (:require [rum.core :as rum]
-            [logseq.shui.ui :as ui]
-            [dommy.core :refer-macros [sel1]]
+  (:require [dommy.core :refer-macros [sel1]]
+            [logseq.shui.dialog.core :as dialog-core]
             [logseq.shui.form.core :refer [yup yup-resolver] :as form-core]
+            [logseq.shui.hooks :as hooks]
+            [logseq.shui.ui :as ui]
             [promesa.core :as p]
-            [logseq.shui.dialog.core :as dialog-core]))
+            [rum.core :as rum]))
 
 (rum/defc section-item
   [title children]
@@ -511,7 +512,7 @@
   []
 
   (let [el-ref (rum/use-ref nil)]
-    (rum/use-effect!
+    (hooks/use-effect!
      (fn []
        (let [^js container (get-main-scroll-container)
              ^js el (rum/deref el-ref)

+ 235 - 236
deps/shui/src/logseq/shui/demo2.cljs

@@ -1,23 +1,24 @@
 (ns logseq.shui.demo2
-  (:require [clojure.string :as string]
-            [rum.core :as rum]
-            [logseq.shui.ui :as ui]
-            [logseq.shui.popup.core :refer [install-popups update-popup! get-popup]]
-            [logseq.shui.select.multi :refer [x-select-content]]
+  (:require [cljs-bean.core :as bean]
+            [clojure.string :as string]
             [frontend.components.icon :refer [emojis-cp emojis icon-search]]
             [frontend.storage :as storage]
-            [cljs-bean.core :as bean]
-            [promesa.core :as p]))
+            [logseq.shui.hooks :as hooks]
+            [logseq.shui.popup.core :refer [install-popups update-popup! get-popup]]
+            [logseq.shui.select.multi :refer [x-select-content]]
+            [logseq.shui.ui :as ui]
+            [promesa.core :as p]
+            [rum.core :as rum]))
 
 (defn do-fetch!
   ([action] (do-fetch! action nil))
   ([action query-str]
    (-> (js/window.fetch
-         (str "https://movies-api14.p.rapidapi.com/" (name action) (when query-str (str "?" query-str)))
-         #js {:method "GET"
-              :headers #js {:X-RapidAPI-Key "808ffd08c0mshc67d496f6024b46p164350jsn7b35179966c9",
-                            :X-RapidAPI-Host "movies-api14.p.rapidapi.com"}})
-     (p/then #(.json %)))))
+        (str "https://movies-api14.p.rapidapi.com/" (name action) (when query-str (str "?" query-str)))
+        #js {:method "GET"
+             :headers #js {:X-RapidAPI-Key "808ffd08c0mshc67d496f6024b46p164350jsn7b35179966c9",
+                           :X-RapidAPI-Host "movies-api14.p.rapidapi.com"}})
+       (p/then #(.json %)))))
 
 (rum/defc multi-select-demo
   []
@@ -35,96 +36,96 @@
 
          rm-item! (fn [item-or-id]
                     (set-selected-items!
-                      (remove #(or (= item-or-id %)
-                                 (= item-or-id (str (:id %))))
-                        selected-items)))
+                     (remove #(or (= item-or-id %)
+                                  (= item-or-id (str (:id %))))
+                             selected-items)))
          add-item! (fn [item] (set-selected-items! (conj selected-items item)))
 
          [open? set-open!] (rum/use-state false)]
 
-     (rum/use-effect!
-       (fn []
-         (storage/set :ls-demo-multi-selected-items selected-items))
-       [selected-items])
+     (hooks/use-effect!
+      (fn []
+        (storage/set :ls-demo-multi-selected-items selected-items))
+      [selected-items])
 
      (ui/card
-       (ui/card-header
-         (ui/card-title "Search Movies")
-         (ui/card-description "x multiselect for the remote items"))
-       (ui/card-content
+      (ui/card-header
+       (ui/card-title "Search Movies")
+       (ui/card-description "x multiselect for the remote items"))
+      (ui/card-content
 
          ;; Basic
-         (ui/dropdown-menu
-           {:open open?}
+       (ui/dropdown-menu
+        {:open open?}
            ;; trigger
-           (ui/dropdown-menu-trigger
-             [:div.border.p-2.rounded.w-full.cursor-pointer.flex.items-center.gap-1.flex-wrap
-              {:on-click (fn [^js e]
-                           (let [^js target (.-target e)]
-                             (if-let [^js c (some-> target (.closest ".close"))]
-                               (some-> (.-dataset c) (.-k) (rm-item!))
-                               (set-open! true))))}
-              (for [{:keys [id original_title class poster_path]} selected-items]
-                (ui/badge {:variant :secondary :class (str class " group relative")}
-                  [:span.flex.items-center.gap-1.flex-nowrap
-                   [:img {:src poster_path :class "w-[16px] scale-75"}]
-                   [:b original_title]]
-                  (ui/button
-                    {:variant :destructive
-                     :size :icon
-                     :data-k id
-                     :class "!rounded-full !h-4 !w-4 absolute top-[-7px] right-[-3px] group-hover:visible invisible close"}
-                    (ui/tabler-icon "x" {:size 12}))))
-              (ui/button {:variant :link :size :sm} "+")])
+        (ui/dropdown-menu-trigger
+         [:div.border.p-2.rounded.w-full.cursor-pointer.flex.items-center.gap-1.flex-wrap
+          {:on-click (fn [^js e]
+                       (let [^js target (.-target e)]
+                         (if-let [^js c (some-> target (.closest ".close"))]
+                           (some-> (.-dataset c) (.-k) (rm-item!))
+                           (set-open! true))))}
+          (for [{:keys [id original_title class poster_path]} selected-items]
+            (ui/badge {:variant :secondary :class (str class " group relative")}
+                      [:span.flex.items-center.gap-1.flex-nowrap
+                       [:img {:src poster_path :class "w-[16px] scale-75"}]
+                       [:b original_title]]
+                      (ui/button
+                       {:variant :destructive
+                        :size :icon
+                        :data-k id
+                        :class "!rounded-full !h-4 !w-4 absolute top-[-7px] right-[-3px] group-hover:visible invisible close"}
+                       (ui/tabler-icon "x" {:size 12}))))
+          (ui/button {:variant :link :size :sm} "+")])
            ;; content
-           (x-select-content items selected-items
-             {;; test item render
-              :open? open?
-              :close! #(set-open! false)
-              :search-enabled? true
-              :search-key q
-              :search-fn (fn [items]
-                           (when (not fetching?) items))
-              :on-search-key-change (fn [v]
-                                      (set-q! v)
-                                      (if (string/blank? v)
-                                        (set-items! [])
-                                        (when (not fetching?)
-                                          (set-fetching? true)
-                                          (-> (do-fetch! :search (str "query=" v))
-                                            (p/then #(when-let [ret (bean/->clj %)]
-                                                       (when-let [items (:contents ret)]
-                                                         (set-items! (map (fn [item] (assoc item :id (:_id item))) (take 12 items))))))
-                                            (p/finally #(set-fetching? false))))))
-
-              :item-render (fn [item {:keys [selected?]}]
-                             (if item
-                               (ui/dropdown-menu-checkbox-item
-                                 {:checked selected?
-                                  :on-click (fn []
-                                              (if selected?
-                                                (rm-item! item)
-                                                (add-item! item))
+        (x-select-content items selected-items
+                          {;; test item render
+                           :open? open?
+                           :close! #(set-open! false)
+                           :search-enabled? true
+                           :search-key q
+                           :search-fn (fn [items]
+                                        (when (not fetching?) items))
+                           :on-search-key-change (fn [v]
+                                                   (set-q! v)
+                                                   (if (string/blank? v)
+                                                     (set-items! [])
+                                                     (when (not fetching?)
+                                                       (set-fetching? true)
+                                                       (-> (do-fetch! :search (str "query=" v))
+                                                           (p/then #(when-let [ret (bean/->clj %)]
+                                                                      (when-let [items (:contents ret)]
+                                                                        (set-items! (map (fn [item] (assoc item :id (:_id item))) (take 12 items))))))
+                                                           (p/finally #(set-fetching? false))))))
+
+                           :item-render (fn [item {:keys [selected?]}]
+                                          (if item
+                                            (ui/dropdown-menu-checkbox-item
+                                             {:checked selected?
+                                              :on-click (fn []
+                                                          (if selected?
+                                                            (rm-item! item)
+                                                            (add-item! item))
                                               ;(set-open! false)
-                                              )}
-                                 [:div.flex.items-center.gap-2
-                                  [:span [:img {:src (:poster_path item)
-                                                :class "w-[20px]"}]]
-                                  [:span.flex.flex-col
-                                   [:b (:original_title item)]
-                                   [:small.opacity-50
-                                    {:class "text-[10px]"}
-                                    (:release_date item)]]])
-                               (ui/dropdown-menu-separator)))
-
-              :head-render (fn [] (when (and fetching? (not (string/blank? q)))
-                                    [:b.flex.items-center.justify-center.py-4
-                                     (ui/tabler-icon "loader" {:class "animate-spin"})]))
+                                                          )}
+                                             [:div.flex.items-center.gap-2
+                                              [:span [:img {:src (:poster_path item)
+                                                            :class "w-[20px]"}]]
+                                              [:span.flex.flex-col
+                                               [:b (:original_title item)]
+                                               [:small.opacity-50
+                                                {:class "text-[10px]"}
+                                                (:release_date item)]]])
+                                            (ui/dropdown-menu-separator)))
+
+                           :head-render (fn [] (when (and fetching? (not (string/blank? q)))
+                                                 [:b.flex.items-center.justify-center.py-4
+                                                  (ui/tabler-icon "loader" {:class "animate-spin"})]))
               ;:foot-render (fn [] [:b "footer"])
 
-              :content-props
-              {:align "start"
-               :class "w-80"}})))))
+                           :content-props
+                           {:align "start"
+                            :class "w-80"}})))))
 
    [:hr]
 
@@ -146,50 +147,50 @@
          [open? set-open!] (rum/use-state false)]
 
      (ui/card
-       (ui/card-header
-         (ui/card-title "Basic")
-         (ui/card-description "x multiselect for shui"))
-       (ui/card-content
-         [:label.block.flex.items-center.pb-3.cursor-pointer
-          (ui/checkbox {:checked search?
-                        :on-click #(set-search? (not search?))})
-          [:small.pl-2 "Enable basic search input"]]
+      (ui/card-header
+       (ui/card-title "Basic")
+       (ui/card-description "x multiselect for shui"))
+      (ui/card-content
+       [:label.block.flex.items-center.pb-3.cursor-pointer
+        (ui/checkbox {:checked search?
+                      :on-click #(set-search? (not search?))})
+        [:small.pl-2 "Enable basic search input"]]
          ;; Basic
-         (ui/dropdown-menu
-           {:open open?}
+       (ui/dropdown-menu
+        {:open open?}
            ;; trigger
-           (ui/dropdown-menu-trigger
-             [:p.border.p-2.rounded.w-full.cursor-pointer
-              {:on-click #(set-open! true)}
-              (for [{:keys [key value class]} selected-items]
-                (ui/badge {:variant :secondary :class class} (str "#" key " " value)))
-              (ui/button {:variant :link :size :sm} "+")])
+        (ui/dropdown-menu-trigger
+         [:p.border.p-2.rounded.w-full.cursor-pointer
+          {:on-click #(set-open! true)}
+          (for [{:keys [key value class]} selected-items]
+            (ui/badge {:variant :secondary :class class} (str "#" key " " value)))
+          (ui/button {:variant :link :size :sm} "+")])
            ;; content
-           (x-select-content items selected-items
-             {:close! #(set-open! false)
-              :search-enabled? search?
-              :search-key-render (fn [q {:keys [items]}]
-                                   (when (and (not (string/blank? q))
-                                           (not (seq items)))
-                                     [:b.flex.items-center.justify-center.py-4.gap-2.font-normal.opacity-80
-                                      (ui/tabler-icon "lemon") [:small "No fruits!"]]))
-              :on-chosen on-chosen
-              :value-render (fn [v {:keys [selected?]}]
-                              (if selected?
-                                [:b.text-red-800 v]
-                                [:b.text-green-800 v]))
-              :content-props
-              {:class "w-48"}})))))
+        (x-select-content items selected-items
+                          {:close! #(set-open! false)
+                           :search-enabled? search?
+                           :search-key-render (fn [q {:keys [items]}]
+                                                (when (and (not (string/blank? q))
+                                                           (not (seq items)))
+                                                  [:b.flex.items-center.justify-center.py-4.gap-2.font-normal.opacity-80
+                                                   (ui/tabler-icon "lemon") [:small "No fruits!"]]))
+                           :on-chosen on-chosen
+                           :value-render (fn [v {:keys [selected?]}]
+                                           (if selected?
+                                             [:b.text-red-800 v]
+                                             [:b.text-green-800 v]))
+                           :content-props
+                           {:class "w-48"}})))))
 
    [:hr]
 
    (let [[items set-items!]
          (rum/use-state
-           [{:key 1 :value "Apple" :class "bg-gray-800 text-gray-50"}
-            {:key 2 :value "Orange" :class "bg-orange-700 text-gray-50"}
-            nil
-            {:key 3 :value "Pear"}
-            {:key 4 :value "Banana" :class "bg-yellow-700 text-gray-700"}])
+          [{:key 1 :value "Apple" :class "bg-gray-800 text-gray-50"}
+           {:key 2 :value "Orange" :class "bg-orange-700 text-gray-50"}
+           nil
+           {:key 3 :value "Pear"}
+           {:key 4 :value "Banana" :class "bg-yellow-700 text-gray-700"}])
 
          [selected-items set-selected-items!]
          (rum/use-state [(last items) (first items)])
@@ -202,55 +203,54 @@
          [open? set-open!] (rum/use-state false)]
 
      (ui/card
-       (ui/card-header
-         (ui/card-title "Search & Custom")
-         (ui/card-description "x multiselect for shui"))
-       (ui/card-content
+      (ui/card-header
+       (ui/card-title "Search & Custom")
+       (ui/card-description "x multiselect for shui"))
+      (ui/card-content
 
          ;; Basic
-         (ui/dropdown-menu
-           {:open open?}
+       (ui/dropdown-menu
+        {:open open?}
            ;; trigger
-           (ui/dropdown-menu-trigger
-             [:p.border.p-2.rounded.w-full.cursor-pointer
-              {:on-click #(set-open! true)}
-              (for [{:keys [key value class]} selected-items]
-                (ui/badge {:variant :secondary :class class} (str "#" key " " value)))
-              (ui/button {:variant :link :size :sm} "+")])
+        (ui/dropdown-menu-trigger
+         [:p.border.p-2.rounded.w-full.cursor-pointer
+          {:on-click #(set-open! true)}
+          (for [{:keys [key value class]} selected-items]
+            (ui/badge {:variant :secondary :class class} (str "#" key " " value)))
+          (ui/button {:variant :link :size :sm} "+")])
            ;; content
-           (x-select-content items selected-items
-             {;; test item render
-              :open? open?
-              :close! #(set-open! false)
-              :search-enabled? true
-              :item-render (fn [item {:keys [selected?]}]
-                             (if item
-                               (ui/dropdown-menu-checkbox-item
-                                 {:checked selected?
-                                  :on-click (fn []
-                                              (if selected?
-                                                (rm-item! item)
-                                                (add-item! item)))}
-                                 (:value item))
-                               (ui/dropdown-menu-separator)))
-
-              :search-key-render
-              (fn [k {:keys [items x-item exist-fn]}]
-                (when (and
-                        (not (string/blank? k))
-                        (not (exist-fn)))
-                  (x-item
-                    {:on-click (fn []
-                                 (ui/toast! (str "Create: " k) :warning)
-                                 (set-open! false))}
-                    (str "+ create: " k))))
+        (x-select-content items selected-items
+                          {;; test item render
+                           :open? open?
+                           :close! #(set-open! false)
+                           :search-enabled? true
+                           :item-render (fn [item {:keys [selected?]}]
+                                          (if item
+                                            (ui/dropdown-menu-checkbox-item
+                                             {:checked selected?
+                                              :on-click (fn []
+                                                          (if selected?
+                                                            (rm-item! item)
+                                                            (add-item! item)))}
+                                             (:value item))
+                                            (ui/dropdown-menu-separator)))
+
+                           :search-key-render
+                           (fn [k {:keys [items x-item exist-fn]}]
+                             (when (and
+                                    (not (string/blank? k))
+                                    (not (exist-fn)))
+                               (x-item
+                                {:on-click (fn []
+                                             (ui/toast! (str "Create: " k) :warning)
+                                             (set-open! false))}
+                                (str "+ create: " k))))
 
               ;:head-render (fn [] [:b "header"])
               ;:foot-render (fn [] [:b "footer"])
-              :content-props
-              {:align "start"
-               :class "w-48"}})))))
-   ])
+                           :content-props
+                           {:align "start"
+                            :class "w-48"}})))))])
 
 (rum/defc icon-picker-demo
   []
@@ -282,27 +282,27 @@
             [:a.underline
              {:on-click
               #(ui/popup-show! %
-                 (fn [_config]
-                   [:div.max-h-72.overflow-auto.p-1
-                    (emojis-cp (take 80 emojis)
-                      {:on-chosen
-                       (fn [_ t]
-                         (set-emoji! t)
-                         (ui/popup-hide-all!))})])
-                 {:content-props {:class "w-72 p-0"}
-                  :as-dropdown? true})}
+                               (fn [_config]
+                                 [:div.max-h-72.overflow-auto.p-1
+                                  (emojis-cp (take 80 emojis)
+                                             {:on-chosen
+                                              (fn [_ t]
+                                                (set-emoji! t)
+                                                (ui/popup-hide-all!))})])
+                               {:content-props {:class "w-72 p-0"}
+                                :as-dropdown? true})}
              (if emoji [:strong.px-1.text-6xl [:em-emoji emoji]] "emoji :O")] "."])]
      [:<>
       (emoji-picker nil)
 
       [:p.py-4
        (ui/button
-         {:variant :secondary
-          :on-click #(ui/popup-show! %
-                       (fn []
-                         [:p.p-4
-                          (emoji-picker true)]))}
-         "Play a nested x popup.")]
+        {:variant :secondary
+         :on-click #(ui/popup-show! %
+                                    (fn []
+                                      [:p.p-4
+                                       (emoji-picker true)]))}
+        "Play a nested x popup.")]
 
       [:p.py-4
        (let [gen-content
@@ -312,60 +312,60 @@
                 (emoji-picker true)
                 [:strong.px-1.text-6xl q]])]
          (ui/input
-           {:placeholder "Select a fruit."
-            :ref *q-ref
-            :value q
-            :on-change (fn [^js e]
-                         (let [val (.-value (.-target e))]
-                           (set-q! val)
-                           (update-popup! :select-a-fruit-input [:content] (gen-content val))))
-            :class "w-1/5"
-            :on-focus (fn [^js e]
-                        (let [id :select-a-fruit-input
-                              [_ popup] (get-popup id)]
-                          (if (not popup)
-                            (ui/popup-show! (.-target e)
-                              (gen-content q)
-                              {:id id
-                               :align "start"
-                               :content-props
-                               {:class "x-input-popup-content"
-                                :onPointerDownOutside
-                                (fn [^js e]
-                                  (js/console.log "===>> onPointerDownOutside:" e (rum/deref *q-ref))
-                                  (when-let [q-ref (rum/deref *q-ref)]
-                                    (let [^js target (or (.-relatedTarget e)
-                                                       (.-target e))]
-                                      (js/console.log "t:" target)
-                                      (when (and
-                                              (not (.contains q-ref target))
-                                              (not (.closest target ".x-input-popup-content")))
-                                        (ui/popup-hide! id)))))
-                                :onOpenAutoFocus #(.preventDefault %)}})
+          {:placeholder "Select a fruit."
+           :ref *q-ref
+           :value q
+           :on-change (fn [^js e]
+                        (let [val (.-value (.-target e))]
+                          (set-q! val)
+                          (update-popup! :select-a-fruit-input [:content] (gen-content val))))
+           :class "w-1/5"
+           :on-focus (fn [^js e]
+                       (let [id :select-a-fruit-input
+                             [_ popup] (get-popup id)]
+                         (if (not popup)
+                           (ui/popup-show! (.-target e)
+                                           (gen-content q)
+                                           {:id id
+                                            :align "start"
+                                            :content-props
+                                            {:class "x-input-popup-content"
+                                             :onPointerDownOutside
+                                             (fn [^js e]
+                                               (js/console.log "===>> onPointerDownOutside:" e (rum/deref *q-ref))
+                                               (when-let [q-ref (rum/deref *q-ref)]
+                                                 (let [^js target (or (.-relatedTarget e)
+                                                                      (.-target e))]
+                                                   (js/console.log "t:" target)
+                                                   (when (and
+                                                          (not (.contains q-ref target))
+                                                          (not (.closest target ".x-input-popup-content")))
+                                                     (ui/popup-hide! id)))))
+                                             :onOpenAutoFocus #(.preventDefault %)}})
 
                             ;; update content
-                            (update-popup! id [:content]
-                              (gen-content q)))))
+                           (update-popup! id [:content]
+                                          (gen-content q)))))
             ;:on-blur     (fn [^js e]
             ;               (let [^js target (.-relatedTarget e)]
             ;                 (js/console.log "==>>>" target)
             ;                 (when-not (.closest target ".x-input-popup-content")
             ;                   (hide-x-popup! :select-a-fruit-input))))
-            }))]
+           }))]
 
       [:div.w-full.p-4.border.rounded.dotted.h-48.mt-8.bg-gray-02
        {:on-click #(ui/popup-show! %
-                     (->> (range 8)
-                       (map (fn [it]
-                              (ui/dropdown-menu-item
-                                {:on-select (fn []
-                                              (ui/toast! it)
-                                              (ui/popup-hide-all!))}
-                                [:strong it]))))
-                     {:as-dropdown? true
-                      :content-props {:class "w-48"}})
+                                   (->> (range 8)
+                                        (map (fn [it]
+                                               (ui/dropdown-menu-item
+                                                {:on-select (fn []
+                                                              (ui/toast! it)
+                                                              (ui/popup-hide-all!))}
+                                                [:strong it]))))
+                                   {:as-dropdown? true
+                                    :content-props {:class "w-48"}})
         :on-context-menu #(ui/popup-show! %
-                            [:h1.text-3xl.font-bold "hi x popup for custom context menu!"])}]])])
+                                          [:h1.text-3xl.font-bold "hi x popup for custom context menu!"])}]])])
 
 (rum/defc custom-trigger-content
   []
@@ -381,17 +381,16 @@
    [:h1.text-3xl.font-bold.border-b.pb-4 "Sample dropdown/menu trigger"]
    [:div.py-4
     (ui/dropdown-menu
-      (ui/dropdown-menu-trigger
-        {:as-child true}
-        (ui/trigger-child-wrap
-          {:class "border p-6 border"}
-          (custom-trigger-content)))
-      (ui/dropdown-menu-content
-        (ui/dropdown-menu-item "A item")
-        (ui/dropdown-menu-item "B item")
-        (ui/dropdown-menu-item "C item")))]
-   ])
+     (ui/dropdown-menu-trigger
+      {:as-child true}
+      (ui/trigger-child-wrap
+       {:class "border p-6 border"}
+       (custom-trigger-content)))
+     (ui/dropdown-menu-content
+      (ui/dropdown-menu-item "A item")
+      (ui/dropdown-menu-item "B item")
+      (ui/dropdown-menu-item "C item")))]])
 
 (rum/defc page
   []
-  (sample-dropdown-trigger))
+  (sample-dropdown-trigger))

+ 17 - 13
deps/shui/src/logseq/shui/dialog/core.cljs

@@ -1,11 +1,12 @@
 (ns logseq.shui.dialog.core
-  (:require [rum.core :as rum]
-            [daiquiri.interpreter :refer [interpret]]
-            [medley.core :as medley]
-            [logseq.shui.util :as util]
+  (:require [daiquiri.interpreter :refer [interpret]]
             [logseq.shui.base.core :as base]
             [logseq.shui.form.core :as form]
-            [promesa.core :as p]))
+            [logseq.shui.hooks :as hooks]
+            [logseq.shui.util :as util]
+            [medley.core :as medley]
+            [promesa.core :as p]
+            [rum.core :as rum]))
 
 ;; provider
 (def dialog (util/lsui-wrap "Dialog"))
@@ -130,10 +131,11 @@
                       :close :align :on-open-change :open? :root-props :content-props)
         props (assoc-in props [:overlay-props :data-align] (name (or align :center)))]
 
-    (rum/use-effect!
+    (hooks/use-effect!
      (fn []
        (when (false? open?)
-         (js/setTimeout #(detach-modal! id) 128)))
+         (let [timeout (js/setTimeout #(detach-modal! id) 128)]
+           #(js/clearTimeout timeout))))
      [open?])
 
     (dialog
@@ -171,10 +173,11 @@
   (let [{:keys [id title description content footer deferred open?]} config
         props (dissoc config :id :title :description :content :footer :deferred :open? :alert?)]
 
-    (rum/use-effect!
+    (hooks/use-effect!
      (fn []
        (when (false? open?)
-         (js/setTimeout #(detach-modal! id) 128)))
+         (let [timeout (js/setTimeout #(detach-modal! id) 128)]
+           #(js/clearTimeout timeout))))
      [open?])
 
     (alert-dialog
@@ -209,14 +212,15 @@
         *ok-ref (rum/use-ref nil)
         *reminder-ref (rum/use-ref nil)]
 
-    (rum/use-effect!
+    (hooks/use-effect!
      (fn []
        (when ready?
-         (js/setTimeout
-          #(some-> (rum/deref *ok-ref) (.focus)) 128)))
+         (let [timeout (js/setTimeout
+                        #(some-> (rum/deref *ok-ref) (.focus)) 128)]
+           #(js/clearTimeout timeout))))
      [ready?])
 
-    (rum/use-effect!
+    (hooks/use-effect!
      (fn []
        (try
          (if-let [reminder-v (and reminder? (js/localStorage.getItem (str id)))]

+ 13 - 7
src/main/frontend/hooks.cljs → deps/shui/src/logseq/shui/hooks.cljs

@@ -1,4 +1,4 @@
-(ns frontend.hooks
+(ns logseq.shui.hooks
   "React custom hooks."
   (:refer-clojure :exclude [ref deref])
   (:require [goog.functions :as gfun]
@@ -24,17 +24,23 @@
   "setup-fn will be invoked every render of component when no deps arg provided"
   ([setup-fn] (rum/use-effect! setup-fn))
   ([setup-fn deps & {:keys [equal-fn]}]
-   (rum/use-effect! setup-fn (if (empty? deps)
-                               deps
-                               #js[(memo-deps equal-fn deps)]))))
+   (rum/use-effect! (fn [& deps]
+                      (let [result (apply setup-fn deps)]
+                        (when (fn? result) result)))
+                    (if (empty? deps)
+                      deps
+                      #js[(memo-deps equal-fn deps)]))))
 
 #_{:clj-kondo/ignore [:discouraged-var]}
 (defn use-layout-effect!
   ([setup-fn] (rum/use-layout-effect! setup-fn))
   ([setup-fn deps & {:keys [equal-fn]}]
-   (rum/use-layout-effect! setup-fn (if (empty? deps)
-                                      deps
-                                      #js[(memo-deps equal-fn deps)]))))
+   (rum/use-layout-effect! (fn [& deps]
+                             (let [result (apply setup-fn deps)]
+                               (when (fn? result) result)))
+                           (if (empty? deps)
+                             deps
+                             #js[(memo-deps equal-fn deps)]))))
 
 #_{:clj-kondo/ignore [:discouraged-var]}
 (defn use-callback

+ 114 - 113
deps/shui/src/logseq/shui/select/multi.cljs

@@ -1,14 +1,15 @@
 (ns logseq.shui.select.multi
   (:require [clojure.string :as string]
-            [rum.core :as rum]
+            [logseq.shui.form.core :as form]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.popup.core :as popup]
-            [logseq.shui.form.core :as form]))
+            [rum.core :as rum]))
 
 (defn- get-k [item]
   (if (map? item)
     (some->> ((juxt :id :key :label) item)
-      (remove nil?)
-      (first))
+             (remove nil?)
+             (first))
     item))
 
 (defn- get-v
@@ -21,27 +22,27 @@
   (let [*el (rum/use-ref nil)
         [down set-down!] (rum/use-state 0)]
 
-    (rum/use-effect!
-      (fn []
-        (when-let [^js item (and (> down 0)
-                              (some-> (rum/deref *el)
-                                (.closest ".head")
-                                (.-nextSibling)))]
-          (some-> (if valid-search-key? (.-nextSibling item) item)
-            (.focus))))
-      [down])
+    (hooks/use-effect!
+     (fn []
+       (when-let [^js item (and (> down 0)
+                                (some-> (rum/deref *el)
+                                        (.closest ".head")
+                                        (.-nextSibling)))]
+         (some-> (if valid-search-key? (.-nextSibling item) item)
+                 (.focus))))
+     [down])
 
     [:div.search-input
      {:ref *el}
      (form/input
-       (merge {:placeholder "search"
-               :on-key-up #(case (.-key %)
-                             "ArrowDown" (set-down! (inc down))
-                             "ArrowUp" nil
-                             "Enter" (when (fn? on-enter) (on-enter))
-                             :dune)
-               :auto-focus true}
-         input-props))]))
+      (merge {:placeholder "search"
+              :on-key-up #(case (.-key %)
+                            "ArrowDown" (set-down! (inc down))
+                            "ArrowUp" nil
+                            "Enter" (when (fn? on-enter) (on-enter))
+                            :dune)
+              :auto-focus true}
+             input-props))]))
 
 (defn- simple-search-fn
   [items q]
@@ -49,8 +50,8 @@
     (if (string/blank? q)
       items
       (filter #(some-> (get-v %)
-                 (string/lower-case)
-                 (string/includes? q)) items))))
+                       (string/lower-case)
+                       (string/includes? q)) items))))
 
 (rum/defc x-select-content
   [items selected-items & {:keys [on-chosen item-render value-render
@@ -70,8 +71,8 @@
                               (when (and search-enabled? (not= "INPUT" (.-nodeName target)))
                                 ;; focus search input
                                 (some-> (get-content-el target)
-                                  (.querySelector "input")
-                                  (.focus))))
+                                        (.querySelector "input")
+                                        (.focus))))
         items (if search-enabled?
                 (if (fn? search-fn)
                   (search-fn items search-key1)
@@ -79,100 +80,100 @@
                 items)
         close1! #(when (fn? close!) (close!))]
 
-    (rum/use-effect!
-      (fn []
-        (when (fn? on-search-key-change)
-          (on-search-key-change search-key1')))
-      [search-key1'])
+    (hooks/use-effect!
+     (fn []
+       (when (fn? on-search-key-change)
+         (on-search-key-change search-key1')))
+     [search-key1'])
 
-    (rum/use-effect!
-      (fn []
-        (when-let [t (when (and search-enabled? (false? open?))
-                       (js/setTimeout #(set-search-key! "") 500))]
-          #(js/clearTimeout t)))
-      [open?])
+    (hooks/use-effect!
+     (fn []
+       (when-let [t (when (and search-enabled? (false? open?))
+                      (js/setTimeout #(set-search-key! "") 500))]
+         #(js/clearTimeout t)))
+     [open?])
 
     (x-content
-      (merge
-        {:onInteractOutside close1!
-         :onEscapeKeyDown close1!
-         :on-key-down (fn [^js e]
-                        (when-let [^js target (.-target e)]
-                          (case (.-key e)
-                            "ArrowUp"
-                            (when (= (some-> (get-item-nodes target) (first))
-                                    js/document.activeElement)
-                              (focus-search-input! target))
-                            "l" (when (or (.-metaKey e) (.-ctrlKey e))
-                                  (focus-search-input! target))
-                            :dune)))
-         :class (str (:class content-props)
-                  " ui__multi-select-content"
-                  (when valid-search-key? " has-search-key"))}
-        (dissoc content-props :class))
+     (merge
+      {:onInteractOutside close1!
+       :onEscapeKeyDown close1!
+       :on-key-down (fn [^js e]
+                      (when-let [^js target (.-target e)]
+                        (case (.-key e)
+                          "ArrowUp"
+                          (when (= (some-> (get-item-nodes target) (first))
+                                   js/document.activeElement)
+                            (focus-search-input! target))
+                          "l" (when (or (.-metaKey e) (.-ctrlKey e))
+                                (focus-search-input! target))
+                          :dune)))
+       :class (str (:class content-props)
+                   " ui__multi-select-content"
+                   (when valid-search-key? " has-search-key"))}
+      (dissoc content-props :class))
       ;; header
-      (when (or search-enabled? (fn? head-render))
-        [:div.head
-         {:ref *head-ref}
-         (when search-enabled?
-           (search-input
-             {:value search-key1
-              :on-key-down (fn [^js e]
-                             (.stopPropagation e)
-                             (case (.-key e)
-                               "Escape" (if (string/blank? search-key1)
-                                          (some-> (.-target e) (.closest "[data-radix-menu-content]") (.focus))
-                                          (set-search-key! ""))
-                               :dune))
-              :on-change #(set-search-key! (.-value (.-target %)))}
+     (when (or search-enabled? (fn? head-render))
+       [:div.head
+        {:ref *head-ref}
+        (when search-enabled?
+          (search-input
+           {:value search-key1
+            :on-key-down (fn [^js e]
+                           (.stopPropagation e)
+                           (case (.-key e)
+                             "Escape" (if (string/blank? search-key1)
+                                        (some-> (.-target e) (.closest "[data-radix-menu-content]") (.focus))
+                                        (set-search-key! ""))
+                             :dune))
+            :on-change #(set-search-key! (.-value (.-target %)))}
 
-             {:on-enter (fn []
-                          (when-let [head-el (and (not (string/blank? search-key1'))
-                                               (rum/deref *head-ref))]
-                            (when-let [^js item (.-nextSibling head-el)]
-                              (when (contains? #{"menuitemcheckbox" "menuitem"}
-                                      (.getAttribute item "role"))
-                                (.click item)))))
-              :valid-search-key? valid-search-key?}))
-         (when head-render (head-render))])
+           {:on-enter (fn []
+                        (when-let [head-el (and (not (string/blank? search-key1'))
+                                                (rum/deref *head-ref))]
+                          (when-let [^js item (.-nextSibling head-el)]
+                            (when (contains? #{"menuitemcheckbox" "menuitem"}
+                                             (.getAttribute item "role"))
+                              (.click item)))))
+            :valid-search-key? valid-search-key?}))
+        (when head-render (head-render))])
       ;; items
-      (for [item items
-            :let [selected? (some #(let [k (get-k item)
-                                         k' (get-k %)]
-                                     (or (= item %)
-                                       (and (not (nil? k))
-                                         (not (nil? k'))
-                                         (= k k'))))
-                              selected-items)]]
-        (if (fn? item-render)
-          (item-render item {:x-item x-item :selected? selected?})
-          (let [k (get-k item)
-                v (get-v item)]
-            (when k
-              (let [opts {:selected? selected?}
-                    on-click' (:on-click item-props)
-                    on-click (fn [e]
+     (for [item items
+           :let [selected? (some #(let [k (get-k item)
+                                        k' (get-k %)]
+                                    (or (= item %)
+                                        (and (not (nil? k))
+                                             (not (nil? k'))
+                                             (= k k'))))
+                                 selected-items)]]
+       (if (fn? item-render)
+         (item-render item {:x-item x-item :selected? selected?})
+         (let [k (get-k item)
+               v (get-v item)]
+           (when k
+             (let [opts {:selected? selected?}
+                   on-click' (:on-click item-props)
+                   on-click (fn [e]
                                ;; TODO: return value
-                               (when (fn? on-click') (on-click' e))
-                               (when (fn? on-chosen)
-                                 (on-chosen item opts)))]
-                (x-item (merge {:data-k k :on-click on-click} item-props)
-                  [:span.flex.items-center.gap-2.w-full
-                   (form/checkbox {:checked selected?})
-                   (let [v' (if (fn? v) (v item opts) v)]
-                     (if (fn? value-render)
-                       (value-render v' (assoc opts :item item)) v'))]))))))
+                              (when (fn? on-click') (on-click' e))
+                              (when (fn? on-chosen)
+                                (on-chosen item opts)))]
+               (x-item (merge {:data-k k :on-click on-click} item-props)
+                       [:span.flex.items-center.gap-2.w-full
+                        (form/checkbox {:checked selected?})
+                        (let [v' (if (fn? v) (v item opts) v)]
+                          (if (fn? value-render)
+                            (value-render v' (assoc opts :item item)) v'))]))))))
 
-      (when (and search-enabled?
-              (fn? search-key-render))
-        (let [exist-fn (fn []
-                         (and (not (string/blank? search-key1))
-                           (seq items)
-                           (contains? (into #{} (map #(some-> (get-v %) (string/lower-case)) items))
-                             (string/lower-case search-key1))))]
-          (search-key-render search-key1
-            {:items items :x-item x-item :exist-fn exist-fn})))
+     (when (and search-enabled?
+                (fn? search-key-render))
+       (let [exist-fn (fn []
+                        (and (not (string/blank? search-key1))
+                             (seq items)
+                             (contains? (into #{} (map #(some-> (get-v %) (string/lower-case)) items))
+                                        (string/lower-case search-key1))))]
+         (search-key-render search-key1
+                            {:items items :x-item x-item :exist-fn exist-fn})))
       ;; footer
-      (when (fn? foot-render)
-        [:div.foot
-         (foot-render)]))))
+     (when (fn? foot-render)
+       [:div.foot
+        (foot-render)]))))

+ 8 - 7
deps/shui/src/logseq/shui/table/core.cljc

@@ -2,6 +2,7 @@
   "Table"
   (:require [clojure.set :as set]
             [dommy.core :refer-macros [sel1]]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.table.impl :as impl]
             [rum.core :as rum]))
 
@@ -147,7 +148,7 @@
 ;; FIXME: ux
 (defn- use-sticky-element!
   [^js/HTMLElement container target-ref]
-  (rum/use-effect!
+  (hooks/use-effect!
    (fn []
      (let [^js el (rum/deref target-ref)
            ^js cls (.-classList el)
@@ -189,7 +190,7 @@
 ;; FIXME: another solution for the sticky header
 (defn- use-sticky-element2!
   [^js/HTMLDivElement target-ref]
-  (rum/use-effect!
+  (hooks/use-effect!
    (fn []
      (let [^js target (rum/deref target-ref)
            ^js container (or (.closest target ".sidebar-item-list") (get-main-scroll-container))
@@ -205,7 +206,7 @@
                update-target-top! (fn []
                                     (when (not (.contains target-cls "ls-fixed"))
                                       (vreset! *el-top (+ (-> target (.getBoundingClientRect) (.-top))
-                                                         (.-scrollTop container)))))
+                                                          (.-scrollTop container)))))
                update-footer! (fn []
                                 (let [tw (.-scrollWidth table)]
                                   (when (and table-footer (number? tw) (> tw 0))
@@ -228,7 +229,7 @@
                                        table-in-top (+ scroll-top head-height)
                                        table-bottom (.-bottom (.getBoundingClientRect table))
                                        fixed? (and (> table-bottom (+ head-height 90))
-                                                (> table-in-top @*el-top))]
+                                                   (> table-in-top @*el-top))]
                                    (if fixed?
                                      (.add target-cls "ls-fixed")
                                      (.remove target-cls "ls-fixed"))
@@ -236,7 +237,7 @@
                target-observe-handle! (fn [^js _e]
                                         (when (not @*ticking?)
                                           (js/window.requestAnimationFrame
-                                            #(do (target-observe!) (vreset! *ticking? false)))
+                                           #(do (target-observe!) (vreset! *ticking? false)))
                                           (vreset! *ticking? true)))
                resize-observer (js/ResizeObserver. update-target!)
                page-resize-observer (js/ResizeObserver. (fn [] (update-target-top!)))]
@@ -251,8 +252,8 @@
 
            ;; teardown
            #(do (.removeEventListener container "scroll" target-observe!)
-              (.disconnect resize-observer)
-              (.disconnect page-resize-observer))))))
+                (.disconnect resize-observer)
+                (.disconnect page-resize-observer))))))
    []))
 
 (rum/defc table-header < rum/static

+ 17 - 16
deps/shui/src/logseq/shui/toaster/core.cljs

@@ -1,8 +1,9 @@
 (ns logseq.shui.toaster.core
-  (:require [rum.core :as rum]
+  (:require [cljs-bean.core :as bean]
             [daiquiri.interpreter :refer [interpret]]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.util :as util]
-            [cljs-bean.core :as bean]))
+            [rum.core :as rum]))
 
 (defonce ^:private Toaster (util/lsui-wrap "Toaster"))
 (defonce ^:private *toast (atom nil))
@@ -23,22 +24,22 @@
   < rum/static
   []
   (let [^js js-toast (js/window.LSUI.useToast)]
-    (rum/use-effect!
-      (fn []
-        (reset! *toast {:toast   (.-toast js-toast)
-                        :dismiss (.-dismiss js-toast)
-                        :update  (.-update js-toast)})
-        #())
-      [])
+    (hooks/use-effect!
+     (fn []
+       (reset! *toast {:toast   (.-toast js-toast)
+                       :dismiss (.-dismiss js-toast)
+                       :update  (.-update js-toast)})
+       #())
+     [])
     [:<> (Toaster)]))
 
 (defn update-html-props
   [v]
   (update-keys v
-    #(case %
-       :class :className
-       :for :htmlFor
-       %)))
+               #(case %
+                  :class :className
+                  :for :htmlFor
+                  %)))
 
 (defn interpret-vals
   [config ks & args]
@@ -46,7 +47,7 @@
             (let [v (get config k)
                   v (if (fn? v) (apply v args) v)]
               (if (vector? v) (assoc config k (interpret v)) config)))
-    config ks))
+          config ks))
 
 (defn toast!
   ([content-or-config] (toast! content-or-config :default nil))
@@ -56,12 +57,12 @@
      (let [config (if (map? content-or-config)
                     content-or-config
                     (-> {:description content-or-config}
-                      (merge (if (map? status) status {:variant status}))))
+                        (merge (if (map? status) status {:variant status}))))
            config (update-html-props (merge config opts))
            id (or (:id config) (gen-id))
            config (assoc config :id id)
            config (interpret-vals config [:title :description :action :icon]
-                    {:id id :dismiss! #(dismiss id) :update! #(toast! (assoc %1 :id id))})]
+                                  {:id id :dismiss! #(dismiss id) :update! #(toast! (assoc %1 :id id))})]
        (js->clj (toast (clj->js config))))
      :exception)))
 

+ 2 - 2
package.json

@@ -155,8 +155,8 @@
         "pixi.js": "6.2.0",
         "posthog-js": "1.10.2",
         "prop-types": "^15.7.2",
-        "react": "17.0.2",
-        "react-dom": "17.0.2",
+        "react": "18.3.1",
+        "react-dom": "18.3.1",
         "react-grid-layout": "0.16.6",
         "react-intersection-observer": "^9.3.5",
         "react-resize-context": "3.0.0",

+ 1 - 1
src/main/frontend/components/all_pages.cljs

@@ -7,9 +7,9 @@
             [frontend.context.i18n :refer [t]]
             [frontend.db :as db]
             [frontend.handler.page :as page-handler]
-            [frontend.hooks :as hooks]
             [frontend.state :as state]
             [logseq.common.config :as common-config]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/components/assets.cljs

@@ -8,10 +8,10 @@
    [frontend.context.i18n :refer [t]]
    [frontend.handler.assets :as assets-handler]
    [frontend.handler.notification :as notification]
-   [frontend.hooks :as hooks]
    [frontend.state :as state]
    [frontend.ui :as ui]
    [frontend.util :as util]
+   [logseq.shui.hooks :as hooks]
    [logseq.shui.ui :as shui]
    [medley.core :as medley]
    [promesa.core :as p]

+ 1 - 1
src/main/frontend/components/block.cljs

@@ -55,7 +55,6 @@
             [frontend.handler.route :as route-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.whiteboard :as whiteboard-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.mobile.intent :as mobile-intent]
             [frontend.mobile.util :as mobile-util]
@@ -87,6 +86,7 @@
             [logseq.graph-parser.text :as text]
             [logseq.outliner.property :as outliner-property]
             [logseq.shui.dialog.core :as shui-dialog]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [medley.core :as medley]
             [promesa.core :as p]

+ 1 - 1
src/main/frontend/components/bug_report.cljs

@@ -3,9 +3,9 @@
             [frontend.components.header :as header]
             [frontend.context.i18n :refer [t]]
             [frontend.handler.notification :as notification]
-            [frontend.hooks :as hooks]
             [frontend.ui :as ui]
             [frontend.util :as util]
+            [logseq.shui.hooks :as hooks]
             [reitit.frontend.easy :as rfe]
             [rum.core :as rum]))
 

+ 1 - 1
src/main/frontend/components/cmdk/core.cljs

@@ -18,7 +18,6 @@
             [frontend.handler.page :as page-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.whiteboard :as whiteboard-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.modules.shortcut.core :as shortcut]
             [frontend.modules.shortcut.utils :as shortcut-utils]
@@ -36,6 +35,7 @@
             [logseq.common.util.block-ref :as block-ref]
             [logseq.db :as ldb]
             [logseq.graph-parser.text :as text]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/components/cmdk/list_item.cljs

@@ -2,8 +2,8 @@
   (:require
    ["remove-accents" :as remove-accents]
    [clojure.string :as string]
-   [frontend.hooks :as hooks]
    [goog.string :as gstring]
+   [logseq.shui.hooks :as hooks]
    [logseq.shui.ui :as shui]
    [rum.core :as rum]))
 

+ 1 - 1
src/main/frontend/components/container.cljs

@@ -31,7 +31,6 @@
             [frontend.handler.route :as route-handler]
             [frontend.handler.user :as user-handler]
             [frontend.handler.whiteboard :as whiteboard-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.mobile.action-bar :as action-bar]
             [frontend.mobile.footer :as footer]
@@ -52,6 +51,7 @@
             [logseq.common.util.namespace :as ns-util]
             [logseq.db :as ldb]
             [logseq.shui.dialog.core :as shui-dialog]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.popup.core :as shui-popup]
             [logseq.shui.toaster.core :as shui-toaster]
             [logseq.shui.ui :as shui]

+ 1 - 1
src/main/frontend/components/dnd.cljs

@@ -3,9 +3,9 @@
             ["@dnd-kit/sortable" :refer [useSortable arrayMove SortableContext verticalListSortingStrategy horizontalListSortingStrategy] :as sortable]
             ["@dnd-kit/utilities" :refer [CSS]]
             [cljs-bean.core :as bean]
-            [frontend.hooks :as hooks]
             [frontend.rum :as r]
             [frontend.state :as state]
+            [logseq.shui.hooks :as hooks]
             [rum.core :as rum]))
 
 (def dnd-context (r/adapt-class DndContext))

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

@@ -19,7 +19,6 @@
             [frontend.handler.paste :as paste-handler]
             [frontend.handler.property.util :as pu]
             [frontend.handler.search :as search-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.search :refer [fuzzy-search]]
             [frontend.state :as state]
@@ -34,6 +33,7 @@
             [logseq.db :as ldb]
             [logseq.db.frontend.class :as db-class]
             [logseq.graph-parser.property :as gp-property]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [react-draggable]

+ 1 - 1
src/main/frontend/components/file_based/block.cljs

@@ -4,12 +4,12 @@
             [frontend.components.file-based.datetime :as datetime-comp]
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.file-based.repeated :as repeated]
-            [frontend.hooks :as hooks]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [frontend.util.file-based.clock :as clock]
             [frontend.util.file-based.drawer :as drawer]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [reitit.frontend.easy :as rfe]
             [rum.core :as rum]))

+ 5 - 5
src/main/frontend/components/file_based/git.cljs

@@ -2,10 +2,10 @@
   (:require [clojure.string :as string]
             [frontend.handler.file-based.file :as file-handler]
             [frontend.handler.shell :as shell]
-            [frontend.hooks :as hooks]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
+            [logseq.shui.hooks :as hooks]
             [promesa.core :as p]
             [rum.core :as rum]))
 
@@ -73,7 +73,7 @@
        (ui/button "Revert"
                   :on-click (fn []
                               (file-handler/alter-file (state/get-current-repo)
-                                               path
-                                               content
-                                               {:re-render-root? true
-                                                :skip-compare? true})))]]]))
+                                                       path
+                                                       content
+                                                       {:re-render-root? true
+                                                        :skip-compare? true})))]]]))

+ 1 - 1
src/main/frontend/components/file_sync.cljs

@@ -19,7 +19,6 @@
             [frontend.handler.page :as page-handler]
             [frontend.handler.repo :as repo-handler]
             [frontend.handler.user :as user-handler]
-            [frontend.hooks :as hooks]
             [frontend.mobile.util :as mobile-util]
             [frontend.state :as state]
             [frontend.storage :as storage]
@@ -29,6 +28,7 @@
             [frontend.util.persist-var :as persist-var]
             [goog.functions :refer [debounce]]
             [logseq.common.util :as common-util]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [reitit.frontend.easy :as rfe]

+ 1 - 1
src/main/frontend/components/handbooks.cljs

@@ -1,9 +1,9 @@
 (ns frontend.components.handbooks
   (:require ;[shadow.lazy :as lazy]
    [frontend.extensions.handbooks.core :as handbooks]
-   [frontend.hooks :as hooks]
    [frontend.modules.layout.core :as layout]
    [frontend.state :as state]
+   [logseq.shui.hooks :as hooks]
    [rum.core :as rum]))
 
 #_:clj-kondo/ignore

+ 1 - 1
src/main/frontend/components/header.cljs

@@ -23,7 +23,6 @@
             [frontend.handler.plugin :as plugin-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.user :as user-handler]
-            [frontend.hooks :as hooks]
             [frontend.mobile.util :as mobile-util]
             [frontend.state :as state]
             [frontend.storage :as storage]
@@ -31,6 +30,7 @@
             [frontend.util :as util]
             [frontend.version :refer [version]]
             [logseq.db :as ldb]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [logseq.shui.util :as shui-util]
             [missionary.core :as m]

+ 1 - 1
src/main/frontend/components/icon.cljs

@@ -6,7 +6,6 @@
             [clojure.string :as string]
             [frontend.config :as config]
             [frontend.handler.property.util :as pu]
-            [frontend.hooks :as hooks]
             [frontend.search :as search]
             [frontend.storage :as storage]
             [frontend.ui :as ui]
@@ -14,6 +13,7 @@
             [goog.functions :refer [debounce]]
             [goog.object :as gobj]
             [logseq.db :as ldb]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [medley.core :as medley]
             [promesa.core :as p]

+ 1 - 1
src/main/frontend/components/imports.cljs

@@ -18,7 +18,6 @@
             [frontend.handler.repo :as repo-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.ui :as ui-handler]
-            [frontend.hooks :as hooks]
             [frontend.persist-db.browser :as db-browser]
             [frontend.state :as state]
             [frontend.ui :as ui]
@@ -32,6 +31,7 @@
             [logseq.graph-parser.exporter :as gp-exporter]
             [logseq.shui.dialog.core :as shui-dialog]
             [logseq.shui.form.core :as form-core]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/components/objects.cljs

@@ -8,7 +8,6 @@
             [frontend.db.model :as db-model]
             [frontend.db.react :as react]
             [frontend.handler.editor :as editor-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.modules.outliner.op :as outliner-op]
             [frontend.modules.outliner.ui :as ui-outliner-tx]
@@ -16,6 +15,7 @@
             [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.property :as db-property]
             [logseq.outliner.property :as outliner-property]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/components/page.cljs

@@ -33,7 +33,6 @@
             [frontend.handler.notification :as notification]
             [frontend.handler.page :as page-handler]
             [frontend.handler.route :as route-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.mobile.util :as mobile-util]
             [frontend.rum :as frontend-rum]
@@ -46,6 +45,7 @@
             [logseq.common.util.page-ref :as page-ref]
             [logseq.db :as ldb]
             [logseq.graph-parser.mldoc :as gp-mldoc]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [reitit.frontend.easy :as rfe]

+ 1 - 1
src/main/frontend/components/plugins.cljs

@@ -12,7 +12,6 @@
             [frontend.handler.plugin :as plugin-handler]
             [frontend.handler.plugin-config :as plugin-config-handler]
             [frontend.handler.ui :as ui-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.rum :as rum-utils]
             [frontend.search :as search]
@@ -20,6 +19,7 @@
             [frontend.storage :as storage]
             [frontend.ui :as ui]
             [frontend.util :as util]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/components/plugins_settings.cljs

@@ -3,10 +3,10 @@
             [frontend.components.lazy-editor :as lazy-editor]
             [frontend.handler.notification :as notification]
             [frontend.handler.plugin :as plugin-handler]
-            [frontend.hooks :as hooks]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [goog.functions :refer [debounce]]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [rum.core :as rum]))
 

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

@@ -18,7 +18,6 @@
             [frontend.handler.property :as property-handler]
             [frontend.handler.property.util :as pu]
             [frontend.handler.route :as route-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.modules.shortcut.core :as shortcut]
             [frontend.state :as state]
@@ -31,6 +30,7 @@
             [logseq.db.frontend.property.type :as db-property-type]
             [logseq.outliner.core :as outliner-core]
             [logseq.outliner.property :as outliner-property]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

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

@@ -15,7 +15,6 @@
             [frontend.handler.db-based.property :as db-property-handler]
             [frontend.handler.property :as property-handler]
             [frontend.handler.route :as route-handler]
-            [frontend.hooks :as hooks]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
@@ -25,6 +24,7 @@
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property.type :as db-property-type]
             [logseq.outliner.core :as outliner-core]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.popup.core :as shui-popup]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]

+ 9 - 9
src/main/frontend/components/property/value.cljs

@@ -23,7 +23,6 @@
             [frontend.handler.property :as property-handler]
             [frontend.handler.property.util :as pu]
             [frontend.handler.route :as route-handler]
-            [frontend.hooks :as hooks]
             [frontend.modules.outliner.ui :as ui-outliner-tx]
             [frontend.search :as search]
             [frontend.state :as state]
@@ -38,6 +37,7 @@
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property.type :as db-property-type]
             [logseq.outliner.property :as outliner-property]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))
@@ -1340,12 +1340,12 @@
                              value-cp)))]]
          (if show-tooltip?
            (shui/tooltip-provider
-             (shui/tooltip
-               {:delayDuration 1200}
-               (shui/tooltip-trigger
-                 {:onFocusCapture #(util/stop-propagation %)
-                  :as-child true}
-                 value-cp)
-               (shui/tooltip-content
-                 (str "Change " (:block/title property)))))
+            (shui/tooltip
+             {:delayDuration 1200}
+             (shui/tooltip-trigger
+              {:onFocusCapture #(util/stop-propagation %)
+               :as-child true}
+              value-cp)
+             (shui/tooltip-content
+              (str "Change " (:block/title property)))))
            value-cp))))))

+ 1 - 1
src/main/frontend/components/query.cljs

@@ -10,12 +10,12 @@
             [frontend.db-mixins :as db-mixins]
             [frontend.extensions.sci :as sci]
             [frontend.handler.editor :as editor-handler]
-            [frontend.hooks :as hooks]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [lambdaisland.glogi :as log]
             [logseq.db :as ldb]
+            [logseq.shui.hooks :as hooks]
             [rum.core :as rum]))
 
 (defn- built-in-custom-query?

+ 1 - 1
src/main/frontend/components/query/builder.cljs

@@ -11,7 +11,6 @@
             [frontend.db.query-dsl :as query-dsl]
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.query.builder :as query-builder]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.state :as state]
             [frontend.ui :as ui]
@@ -23,6 +22,7 @@
             [logseq.db.frontend.property.type :as db-property-type]
             [logseq.db.sqlite.util :as sqlite-util]
             [logseq.graph-parser.db :as gp-db]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/components/right_sidebar.cljs

@@ -16,11 +16,11 @@
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.ui :as ui-handler]
-            [frontend.hooks :as hooks]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [logseq.db :as ldb]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [medley.core :as medley]
             [reitit.frontend.easy :as rfe]

+ 1 - 1
src/main/frontend/components/server.cljs

@@ -3,10 +3,10 @@
    [clojure.string :as string]
    [electron.ipc :as ipc]
    [frontend.handler.notification :as notification]
-   [frontend.hooks :as hooks]
    [frontend.state :as state]
    [frontend.ui :as ui]
    [frontend.util :as util]
+   [logseq.shui.hooks :as hooks]
    [logseq.shui.ui :as shui]
    [medley.core :as medley]
    [promesa.core :as p]

+ 1 - 1
src/main/frontend/components/settings.cljs

@@ -21,7 +21,6 @@
             [frontend.handler.route :as route-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.user :as user-handler]
-            [frontend.hooks :as hooks]
             [frontend.mobile.util :as mobile-util]
             [frontend.modules.instrumentation.core :as instrument]
             [frontend.modules.shortcut.data-helper :as shortcut-helper]
@@ -34,6 +33,7 @@
             [goog.object :as gobj]
             [goog.string :as gstring]
             [logseq.db :as ldb]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [reitit.frontend.easy :as rfe]

+ 1 - 1
src/main/frontend/components/shortcut.cljs

@@ -3,7 +3,6 @@
             [clojure.string :as string]
             [frontend.context.i18n :refer [t]]
             [frontend.handler.notification :as notification]
-            [frontend.hooks :as hooks]
             [frontend.modules.shortcut.config :as shortcut-config]
             [frontend.modules.shortcut.core :as shortcut]
             [frontend.modules.shortcut.data-helper :as dh]
@@ -14,6 +13,7 @@
             [frontend.util :as util]
             [goog.events :as events]
             [logseq.shui.dialog.core :as shui-dialog]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum])

+ 1 - 1
src/main/frontend/components/theme.cljs

@@ -8,12 +8,12 @@
             [frontend.handler.plugin-config :as plugin-config-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.ui :as ui-handler]
-            [frontend.hooks :as hooks]
             [frontend.rum :refer [use-mounted]]
             [frontend.state :as state]
             [frontend.storage :as storage]
             [frontend.ui :as ui]
             [frontend.util :as util]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [rum.core :as rum]))
 

+ 1 - 1
src/main/frontend/components/user/login.cljs

@@ -6,10 +6,10 @@
             [frontend.handler.notification :as notification]
             [frontend.handler.route :as route-handler]
             [frontend.handler.user :as user]
-            [frontend.hooks :as hooks]
             [frontend.modules.shortcut.core :as shortcut]
             [frontend.rum :refer [adapt-class]]
             [frontend.state :as state]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [rum.core :as rum]))
 

+ 1 - 1
src/main/frontend/components/views.cljs

@@ -26,7 +26,6 @@
             [frontend.handler.property :as property-handler]
             [frontend.handler.property.util :as pu]
             [frontend.handler.ui :as ui-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.state :as state]
             [frontend.ui :as ui]
@@ -36,6 +35,7 @@
             [logseq.db :as ldb]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property.type :as db-property-type]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.table.core :as table-core]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]

+ 1 - 1
src/main/frontend/extensions/handbooks/core.cljs

@@ -9,7 +9,6 @@
             [frontend.extensions.lightbox :as lightbox]
             [frontend.extensions.video.youtube :as youtube]
             [frontend.handler.notification :as notification]
-            [frontend.hooks :as hooks]
             [frontend.modules.shortcut.config :as shortcut-config]
             [frontend.rum :as r]
             [frontend.search :as search]
@@ -17,6 +16,7 @@
             [frontend.storage :as storage]
             [frontend.ui :as ui]
             [frontend.util :as util]
+            [logseq.shui.hooks :as hooks]
             [medley.core :as medley]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/extensions/pdf/core.cljs

@@ -14,13 +14,13 @@
             [frontend.extensions.pdf.windows :as pdf-windows]
             [frontend.handler.notification :as notification]
             [frontend.handler.property :as property-handler]
-            [frontend.hooks :as hooks]
             [frontend.modules.shortcut.core :as shortcut]
             [frontend.rum :refer [use-atom]]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [goog.functions :refer [debounce]]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [medley.core :as medley]
             [promesa.core :as p]

+ 1 - 1
src/main/frontend/extensions/pdf/toolbar.cljs

@@ -13,13 +13,13 @@
             [frontend.extensions.pdf.windows :refer [resolve-own-container] :as pdf-windows]
             [frontend.handler.assets :as assets-handler]
             [frontend.handler.notification :as notification]
-            [frontend.hooks :as hooks]
             [frontend.rum :refer [use-atom]]
             [frontend.state :as state]
             [frontend.storage :as storage]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [logseq.publishing.db :as publish-db]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/extensions/tldraw.cljs

@@ -19,7 +19,6 @@
             [frontend.handler.page :as page-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.whiteboard :as whiteboard-handler]
-            [frontend.hooks :as hooks]
             [frontend.rum :as r]
             [frontend.search :as search]
             [frontend.state :as state]
@@ -28,6 +27,7 @@
             [frontend.util.text :as text-util]
             [goog.object :as gobj]
             [logseq.common.util :as common-util]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/extensions/zotero.cljs

@@ -9,11 +9,11 @@
             [frontend.extensions.zotero.setting :as setting]
             [frontend.handler.notification :as notification]
             [frontend.handler.route :as route-handler]
-            [frontend.hooks :as hooks]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [goog.dom :as gdom]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [promesa.core :as p]
             [rum.core :as rum]))

+ 1 - 1
src/main/frontend/mobile/graph_picker.cljs

@@ -6,13 +6,13 @@
    [frontend.handler.file-based.nfs :as nfs-handler]
    [frontend.handler.notification :as notification]
    [frontend.handler.page :as page-handler]
-   [frontend.hooks :as hooks]
    [frontend.mobile.util :as mobile-util]
    [frontend.modules.shortcut.core :as shortcut]
    [frontend.state :as state]
    [frontend.ui :as ui]
    [frontend.util :as util]
    [logseq.common.path :as path]
+   [logseq.shui.hooks :as hooks]
    [logseq.shui.ui :as shui]
    [promesa.core :as p]
    [rum.core :as rum]))

+ 1 - 1
src/main/frontend/rum.cljs

@@ -5,7 +5,7 @@
             [clojure.string :as string]
             [clojure.walk :as w]
             [daiquiri.interpreter :as interpreter]
-            [frontend.hooks :as hooks]
+            [logseq.shui.hooks :as hooks]
             [rum.core :refer [use-state] :as rum]))
 
 ;; copy from https://github.com/priornix/antizer/blob/35ba264cf48b84e6597743e28b3570d8aa473e74/src/antizer/core.cljs

+ 1 - 1
src/main/frontend/ui.cljs

@@ -18,7 +18,6 @@
             [frontend.db-mixins :as db-mixins]
             [frontend.handler.notification :as notification]
             [frontend.handler.plugin :as plugin-handler]
-            [frontend.hooks :as hooks]
             [frontend.mixins :as mixins]
             [frontend.mobile.util :as mobile-util]
             [frontend.modules.shortcut.config :as shortcut-config]
@@ -32,6 +31,7 @@
             [goog.dom :as gdom]
             [goog.object :as gobj]
             [lambdaisland.glogi :as log]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.icon.v2 :as shui.icon.v2]
             [logseq.shui.popup.core :as shui-popup]
             [logseq.shui.ui :as shui]

+ 13 - 16
yarn.lock

@@ -6943,14 +6943,13 @@ [email protected]:
     iconv-lite "0.4.24"
     unpipe "1.0.0"
 
-react-dom@17.0.2:
-  version "17.0.2"
-  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
-  integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
+react-dom@18.3.1:
+  version "18.3.1"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4"
+  integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
   dependencies:
     loose-envify "^1.1.0"
-    object-assign "^4.1.1"
-    scheduler "^0.20.2"
+    scheduler "^0.23.2"
 
 [email protected]:
   version "3.3.2"
@@ -7038,13 +7037,12 @@ [email protected]:
   resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-4.12.5.tgz#cf92efc2527e56d6df1d4d63c6e4dd3fac5a4030"
   integrity sha512-YeCbRRsC9CLf0buD0Rct7WsDbzf+yBU1wGbo05/XjbcN2nJuhgh040m3y3+6HVogTZxEqVm45ac9Fpae4/MxRQ==
 
-react@17.0.2:
-  version "17.0.2"
-  resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
-  integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+react@18.3.1:
+  version "18.3.1"
+  resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
+  integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
   dependencies:
     loose-envify "^1.1.0"
-    object-assign "^4.1.1"
 
 read-cache@^1.0.0:
   version "1.0.0"
@@ -7472,13 +7470,12 @@ sax@>=0.6.0:
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
 
-scheduler@^0.20.2:
-  version "0.20.2"
-  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
-  integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
+scheduler@^0.23.2:
+  version "0.23.2"
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3"
+  integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==
   dependencies:
     loose-envify "^1.1.0"
-    object-assign "^4.1.1"
 
 semver-compare@^1.0.0:
   version "1.0.0"