mirror of
https://github.com/logseq/logseq.git
synced 2026-02-01 22:47:36 +00:00
bump React to 18
This commit is contained in:
3
deps.edn
3
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"}
|
||||
|
||||
4
deps/shui/deps.edn
vendored
4
deps/shui/deps.edn
vendored
@@ -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"}}}
|
||||
|
||||
11
deps/shui/src/logseq/shui/demo.cljs
vendored
11
deps/shui/src/logseq/shui/demo.cljs
vendored
@@ -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)
|
||||
|
||||
465
deps/shui/src/logseq/shui/demo2.cljs
vendored
465
deps/shui/src/logseq/shui/demo2.cljs
vendored
@@ -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))))))
|
||||
(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))
|
||||
: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)))
|
||||
)}
|
||||
[: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"})]))
|
||||
: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)))
|
||||
(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))))
|
||||
: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))
|
||||
|
||||
30
deps/shui/src/logseq/shui/dialog/core.cljs
vendored
30
deps/shui/src/logseq/shui/dialog/core.cljs
vendored
@@ -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)))]
|
||||
|
||||
@@ -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
|
||||
227
deps/shui/src/logseq/shui/select/multi.cljs
vendored
227
deps/shui/src/logseq/shui/select/multi.cljs
vendored
@@ -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)]))))
|
||||
|
||||
15
deps/shui/src/logseq/shui/table/core.cljc
vendored
15
deps/shui/src/logseq/shui/table/core.cljc
vendored
@@ -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
|
||||
|
||||
33
deps/shui/src/logseq/shui/toaster/core.cljs
vendored
33
deps/shui/src/logseq/shui/toaster/core.cljs
vendored
@@ -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)))
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]))
|
||||
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]))
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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})))]]]))
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]))
|
||||
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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))))))
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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]))
|
||||
|
||||
|
||||
@@ -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]))
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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]))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
29
yarn.lock
29
yarn.lock
@@ -6943,14 +6943,13 @@ raw-body@2.5.2:
|
||||
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"
|
||||
|
||||
react-draggable@3.x:
|
||||
version "3.3.2"
|
||||
@@ -7038,13 +7037,12 @@ react-virtuoso@4.12.5:
|
||||
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"
|
||||
|
||||
Reference in New Issue
Block a user