diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn
index 06c7c6c..e28b78c 100644
--- a/.clj-kondo/config.edn
+++ b/.clj-kondo/config.edn
@@ -1,2 +1,4 @@
-{:lint-as {devcards.core/defcard clojure.core/def
- devcards.core/defcard-rg clojure.core/def}}
+{:hooks {:analyze-call {portfolio.react-18/defscene hooks.portfolio.react-18/defscene-hook}}
+ :lint-as {devcards.core/defcard clojure.core/def
+ devcards.core/defcard-rg clojure.core/def
+ portfolio.reagent/defscene clojure.core/defn}}
diff --git a/.clj-kondo/hooks/portfolio/react_18.clj b/.clj-kondo/hooks/portfolio/react_18.clj
new file mode 100644
index 0000000..44d2c9b
--- /dev/null
+++ b/.clj-kondo/hooks/portfolio/react_18.clj
@@ -0,0 +1,24 @@
+(ns hooks.portfolio.react-18
+ (:require
+ [clj-kondo.hooks-api :as api]))
+
+(defn defscene-hook
+ [{:keys [node]}]
+ (let [[_defscene name & more] (:children node)
+ forms more
+ first-form (first forms)]
+ (cond
+ (and (api/string-node? first-form) (api/keyword-node? (second forms)))
+ (let [[docstring _params _params-value fn-params & body] forms
+ body-node (api/list-node (cons (api/token-node 'do) body))
+ def-node (api/list-node [(api/token-node 'defn) name docstring fn-params body-node])]
+ {:node def-node})
+ (api/string-node? first-form)
+ (let [[docstring & body] forms
+ body-node (api/list-node (cons (api/token-node 'do) body))
+ def-node (api/list-node [(api/token-node 'def) name docstring body-node])]
+ {:node def-node})
+ :else (let [body-node (api/list-node (cons (api/token-node 'do) forms))
+ def-node (api/list-node [(api/token-node 'def) name body-node])]
+ {:node def-node}))))
+
diff --git a/.gitignore b/.gitignore
index 6bde38b..feec678 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@
**/.clever.json
**/tmp
**/target
+**/public/js
### Intellij
.idea/
diff --git a/auto_web_clj/deps.edn b/auto_web_clj/deps.edn
new file mode 100644
index 0000000..20bde6c
--- /dev/null
+++ b/auto_web_clj/deps.edn
@@ -0,0 +1,10 @@
+{:deps {amalloy/ring-gzip-middleware {:mvn/version "0.1.4"}
+ clj-http/clj-http {:mvn/version "3.13.1"}
+ http-kit/http-kit {:mvn/version "2.8.1"}
+ mount/mount {:mvn/version "0.1.23"}
+ ring-cors/ring-cors {:mvn/version "0.1.13"}
+ ring/ring {:mvn/version "1.15.2"}
+ ring/ring-anti-forgery {:mvn/version "1.4.0"}
+ ring/ring-headers {:mvn/version "0.4.0"}
+ ring/ring-ssl {:mvn/version "0.4.0"}}
+ :paths ["src" "resources"]}
diff --git a/resources/log_config/log4j2.properties b/auto_web_clj/resources/log_config/log4j2.properties
similarity index 100%
rename from resources/log_config/log4j2.properties
rename to auto_web_clj/resources/log_config/log4j2.properties
diff --git a/resources/log_config/logging-tests.properties b/auto_web_clj/resources/log_config/logging-tests.properties
similarity index 100%
rename from resources/log_config/logging-tests.properties
rename to auto_web_clj/resources/log_config/logging-tests.properties
diff --git a/resources/public/css/components.css b/auto_web_clj/resources/public/css/components.css
similarity index 99%
rename from resources/public/css/components.css
rename to auto_web_clj/resources/public/css/components.css
index 7853cf4..dfb14de 100644
--- a/resources/public/css/components.css
+++ b/auto_web_clj/resources/public/css/components.css
@@ -14,6 +14,7 @@
body, h1, h2, h3, h4, h5, h6, p {
font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
+}
h1,h2,h3,h4,h5,h6,p,div,li,ul{
user-select: none;
diff --git a/resources/public/css/w3_colors_flat.css b/auto_web_clj/resources/public/css/w3_colors_flat.css
similarity index 100%
rename from resources/public/css/w3_colors_flat.css
rename to auto_web_clj/resources/public/css/w3_colors_flat.css
diff --git a/resources/public/css/w3_schools.css b/auto_web_clj/resources/public/css/w3_schools.css
similarity index 100%
rename from resources/public/css/w3_schools.css
rename to auto_web_clj/resources/public/css/w3_schools.css
diff --git a/resources/public/font/PlusJakartaSans-Bold.ttf b/auto_web_clj/resources/public/font/PlusJakartaSans-Bold.ttf
similarity index 100%
rename from resources/public/font/PlusJakartaSans-Bold.ttf
rename to auto_web_clj/resources/public/font/PlusJakartaSans-Bold.ttf
diff --git a/resources/public/font/PlusJakartaSans-Regular.ttf b/auto_web_clj/resources/public/font/PlusJakartaSans-Regular.ttf
similarity index 100%
rename from resources/public/font/PlusJakartaSans-Regular.ttf
rename to auto_web_clj/resources/public/font/PlusJakartaSans-Regular.ttf
diff --git a/resources/public/fontawesome/css/all.css b/auto_web_clj/resources/public/fontawesome/css/all.css
similarity index 100%
rename from resources/public/fontawesome/css/all.css
rename to auto_web_clj/resources/public/fontawesome/css/all.css
diff --git a/resources/public/fontawesome/css/all.min.css b/auto_web_clj/resources/public/fontawesome/css/all.min.css
similarity index 100%
rename from resources/public/fontawesome/css/all.min.css
rename to auto_web_clj/resources/public/fontawesome/css/all.min.css
diff --git a/resources/public/fontawesome/css/brands.css b/auto_web_clj/resources/public/fontawesome/css/brands.css
similarity index 100%
rename from resources/public/fontawesome/css/brands.css
rename to auto_web_clj/resources/public/fontawesome/css/brands.css
diff --git a/resources/public/fontawesome/css/brands.min.css b/auto_web_clj/resources/public/fontawesome/css/brands.min.css
similarity index 100%
rename from resources/public/fontawesome/css/brands.min.css
rename to auto_web_clj/resources/public/fontawesome/css/brands.min.css
diff --git a/resources/public/fontawesome/css/fontawesome.css b/auto_web_clj/resources/public/fontawesome/css/fontawesome.css
similarity index 100%
rename from resources/public/fontawesome/css/fontawesome.css
rename to auto_web_clj/resources/public/fontawesome/css/fontawesome.css
diff --git a/resources/public/fontawesome/css/fontawesome.min.css b/auto_web_clj/resources/public/fontawesome/css/fontawesome.min.css
similarity index 100%
rename from resources/public/fontawesome/css/fontawesome.min.css
rename to auto_web_clj/resources/public/fontawesome/css/fontawesome.min.css
diff --git a/resources/public/fontawesome/css/regular.css b/auto_web_clj/resources/public/fontawesome/css/regular.css
similarity index 100%
rename from resources/public/fontawesome/css/regular.css
rename to auto_web_clj/resources/public/fontawesome/css/regular.css
diff --git a/resources/public/fontawesome/css/regular.min.css b/auto_web_clj/resources/public/fontawesome/css/regular.min.css
similarity index 100%
rename from resources/public/fontawesome/css/regular.min.css
rename to auto_web_clj/resources/public/fontawesome/css/regular.min.css
diff --git a/resources/public/fontawesome/css/solid.css b/auto_web_clj/resources/public/fontawesome/css/solid.css
similarity index 100%
rename from resources/public/fontawesome/css/solid.css
rename to auto_web_clj/resources/public/fontawesome/css/solid.css
diff --git a/resources/public/fontawesome/css/solid.min.css b/auto_web_clj/resources/public/fontawesome/css/solid.min.css
similarity index 100%
rename from resources/public/fontawesome/css/solid.min.css
rename to auto_web_clj/resources/public/fontawesome/css/solid.min.css
diff --git a/resources/public/fontawesome/css/svg-with-js.css b/auto_web_clj/resources/public/fontawesome/css/svg-with-js.css
similarity index 100%
rename from resources/public/fontawesome/css/svg-with-js.css
rename to auto_web_clj/resources/public/fontawesome/css/svg-with-js.css
diff --git a/resources/public/fontawesome/css/svg-with-js.min.css b/auto_web_clj/resources/public/fontawesome/css/svg-with-js.min.css
similarity index 100%
rename from resources/public/fontawesome/css/svg-with-js.min.css
rename to auto_web_clj/resources/public/fontawesome/css/svg-with-js.min.css
diff --git a/resources/public/fontawesome/css/v4-font-face.css b/auto_web_clj/resources/public/fontawesome/css/v4-font-face.css
similarity index 100%
rename from resources/public/fontawesome/css/v4-font-face.css
rename to auto_web_clj/resources/public/fontawesome/css/v4-font-face.css
diff --git a/resources/public/fontawesome/css/v4-font-face.min.css b/auto_web_clj/resources/public/fontawesome/css/v4-font-face.min.css
similarity index 100%
rename from resources/public/fontawesome/css/v4-font-face.min.css
rename to auto_web_clj/resources/public/fontawesome/css/v4-font-face.min.css
diff --git a/resources/public/fontawesome/css/v4-shims.css b/auto_web_clj/resources/public/fontawesome/css/v4-shims.css
similarity index 100%
rename from resources/public/fontawesome/css/v4-shims.css
rename to auto_web_clj/resources/public/fontawesome/css/v4-shims.css
diff --git a/resources/public/fontawesome/css/v4-shims.min.css b/auto_web_clj/resources/public/fontawesome/css/v4-shims.min.css
similarity index 100%
rename from resources/public/fontawesome/css/v4-shims.min.css
rename to auto_web_clj/resources/public/fontawesome/css/v4-shims.min.css
diff --git a/resources/public/fontawesome/css/v5-font-face.css b/auto_web_clj/resources/public/fontawesome/css/v5-font-face.css
similarity index 100%
rename from resources/public/fontawesome/css/v5-font-face.css
rename to auto_web_clj/resources/public/fontawesome/css/v5-font-face.css
diff --git a/resources/public/fontawesome/css/v5-font-face.min.css b/auto_web_clj/resources/public/fontawesome/css/v5-font-face.min.css
similarity index 100%
rename from resources/public/fontawesome/css/v5-font-face.min.css
rename to auto_web_clj/resources/public/fontawesome/css/v5-font-face.min.css
diff --git a/resources/public/fontawesome/webfonts/fa-brands-400.ttf b/auto_web_clj/resources/public/fontawesome/webfonts/fa-brands-400.ttf
similarity index 100%
rename from resources/public/fontawesome/webfonts/fa-brands-400.ttf
rename to auto_web_clj/resources/public/fontawesome/webfonts/fa-brands-400.ttf
diff --git a/resources/public/fontawesome/webfonts/fa-brands-400.woff2 b/auto_web_clj/resources/public/fontawesome/webfonts/fa-brands-400.woff2
similarity index 100%
rename from resources/public/fontawesome/webfonts/fa-brands-400.woff2
rename to auto_web_clj/resources/public/fontawesome/webfonts/fa-brands-400.woff2
diff --git a/resources/public/fontawesome/webfonts/fa-solid-900.ttf b/auto_web_clj/resources/public/fontawesome/webfonts/fa-solid-900.ttf
similarity index 100%
rename from resources/public/fontawesome/webfonts/fa-solid-900.ttf
rename to auto_web_clj/resources/public/fontawesome/webfonts/fa-solid-900.ttf
diff --git a/resources/public/fontawesome/webfonts/fa-solid-900.woff2 b/auto_web_clj/resources/public/fontawesome/webfonts/fa-solid-900.woff2
similarity index 100%
rename from resources/public/fontawesome/webfonts/fa-solid-900.woff2
rename to auto_web_clj/resources/public/fontawesome/webfonts/fa-solid-900.woff2
diff --git a/resources/public/images/factory.jpg b/auto_web_clj/resources/public/images/factory.jpg
similarity index 100%
rename from resources/public/images/factory.jpg
rename to auto_web_clj/resources/public/images/factory.jpg
diff --git a/resources/public/images/factory_plain.jpg b/auto_web_clj/resources/public/images/factory_plain.jpg
similarity index 100%
rename from resources/public/images/factory_plain.jpg
rename to auto_web_clj/resources/public/images/factory_plain.jpg
diff --git a/auto_web_clj/resources/public/images/logos/hephaistox.png b/auto_web_clj/resources/public/images/logos/hephaistox.png
new file mode 100644
index 0000000..4740c00
Binary files /dev/null and b/auto_web_clj/resources/public/images/logos/hephaistox.png differ
diff --git a/auto_web_clj/resources/public/images/logos/hephaistox_logo.png b/auto_web_clj/resources/public/images/logos/hephaistox_logo.png
new file mode 100644
index 0000000..029513c
Binary files /dev/null and b/auto_web_clj/resources/public/images/logos/hephaistox_logo.png differ
diff --git a/resources/public/images/logos/javascript.png b/auto_web_clj/resources/public/images/logos/javascript.png
similarity index 100%
rename from resources/public/images/logos/javascript.png
rename to auto_web_clj/resources/public/images/logos/javascript.png
diff --git a/resources/public/images/logos/not_def.png b/auto_web_clj/resources/public/images/logos/not_def.png
similarity index 100%
rename from resources/public/images/logos/not_def.png
rename to auto_web_clj/resources/public/images/logos/not_def.png
diff --git a/resources/public/images/not_found.jpg b/auto_web_clj/resources/public/images/not_found.jpg
similarity index 100%
rename from resources/public/images/not_found.jpg
rename to auto_web_clj/resources/public/images/not_found.jpg
diff --git a/resources/public/images/toolings/spinner.gif b/auto_web_clj/resources/public/images/toolings/spinner.gif
similarity index 100%
rename from resources/public/images/toolings/spinner.gif
rename to auto_web_clj/resources/public/images/toolings/spinner.gif
diff --git a/src/clj/auto_web/http_request/lang.clj b/auto_web_clj/src/auto_web/http_request/lang.clj
similarity index 100%
rename from src/clj/auto_web/http_request/lang.clj
rename to auto_web_clj/src/auto_web/http_request/lang.clj
diff --git a/src/clj/auto_web/middleware.clj b/auto_web_clj/src/auto_web/middleware.clj
similarity index 100%
rename from src/clj/auto_web/middleware.clj
rename to auto_web_clj/src/auto_web/middleware.clj
diff --git a/auto_web_clj/src/auto_web/middleware/rate_limit.clj b/auto_web_clj/src/auto_web/middleware/rate_limit.clj
new file mode 100644
index 0000000..90ac185
--- /dev/null
+++ b/auto_web_clj/src/auto_web/middleware/rate_limit.clj
@@ -0,0 +1,138 @@
+(ns auto-web.middleware.rate-limit
+ "Rate limit middleware to prevent attacks."
+ (:import [java.time Instant Duration]
+ [java.util.concurrent Executors TimeUnit])
+ (:require
+ [auto-core.uuid :refer [unguessable]]
+ [clojure.string :as str]
+ [ring.util.response :as response]))
+
+(defn make-rate-limiter
+ "Returns a newly created limiter, a map with:
+ - `middleware-fn` function wrapping the handler to add this behavior, add it early in the chain so unncessary computation.
+ - `executor` the single thread scheduled excecutor that is used to track limiter and update it.
+ - `id` an id generated for each instance.
+ - `stop` function to call with parameter `rate-limiter` to stop.
+
+ Options are `:limit`, `:window-ms`"
+ [{:keys [limit window-ms cleanup-interval-ms name]
+ :as pars}]
+ (let [state (atom {})
+ executor (Executors/newSingleThreadScheduledExecutor)
+ id (unguessable)
+ out *out*
+ err *err*]
+ ;; Async cleanup thread
+ (.scheduleAtFixedRate
+ executor
+ (fn []
+ (binding [*out* out
+ *err* err]
+ (when (pos? (count @state))
+ (println (format "Rate limiter cleanup thread: `%s-%s` (%d IPs): %s"
+ name
+ id
+ (count @state)
+ (str/join ", " (keys @state)))))
+ (let [now (Instant/now)]
+ (swap! state (fn [m]
+ (->> m
+ (remove (fn [[_ {:keys [start]}]]
+ (> (.toMillis (Duration/between start now)) window-ms)))
+ (into {}))))
+ (flush))))
+ cleanup-interval-ms
+ cleanup-interval-ms
+ TimeUnit/MILLISECONDS)
+ (println (format "`%s-%s` is a new rate limiter. (%d queries in %d ms, cleanup every %d)"
+ name
+ id
+ limit
+ window-ms
+ cleanup-interval-ms))
+ (flush)
+ {:middleware-fn
+ (fn [handler]
+ (fn [req]
+ (let [{:keys [remote-addr]} req
+ ip remote-addr
+ now (Instant/now)
+ {:keys [count start]
+ :or {count 0
+ start now}}
+ (get @state ip)
+ elapsed (.toMillis (Duration/between start now))
+ header (format "Middleware `%s-%s`, request (ip %s) at time %s" name id ip now)]
+ (if (< elapsed window-ms)
+ (if (< count limit)
+ (do (println (format "%s, request accepted in window [%s, +%d], [%d < %d]"
+ header
+ start
+ window-ms
+ count
+ limit))
+ (swap! state update
+ ip
+ #(-> %
+ (update :count (fnil inc 0))
+ (assoc :start start)))
+ (handler req))
+ (do (println (format "%s, request refused in window [%s, +%d], [%d >= %d]"
+ header
+ start
+ window-ms
+ count
+ limit))
+ (-> (response/response "Too many requests")
+ (response/status 429))))
+ (do (println (format "%s, is beyond window [%s, +%d]" header start window-ms))
+ (swap! state assoc
+ ip
+ {:count 1
+ :start now})
+ (handler req))))))
+ :executor executor
+ :state state
+ :pars (assoc pars :id id)
+ :stop (fn [{:keys [executor id]
+ :as _rate-limiter}]
+ (println (format "Stopping rate limit middleware `%s-%s`:" name id))
+ (flush)
+ (.shutdownNow executor))
+ :id id}))
+
+(defn stop-rate-limit [rate-limiter] (let [{:keys [stop]} rate-limiter] (stop rate-limiter)))
+
+(comment
+ (def limiter
+ (make-rate-limiter {:limit 2
+ :window-ms 10000}))
+ (defn handler-test [_] {:response :hey})
+ ((-> handler-test
+ limiter)
+ {:remote-addr "192.168.1.1"})
+ ;;
+ ;
+)
+
+
+(defn rate-limiter-desc
+ [rate-limiter]
+ (let [{:keys [limit id window-ms name cleanup-interval-ms]} (:pars rate-limiter)]
+ (format "Endpoint `%s-%s`authorizes %d queries every %d. Cleaned every `%d` ms.\n%s"
+ name
+ id
+ limit
+ window-ms
+ cleanup-interval-ms
+ (pr-str (:pars rate-limiter)))))
+
+(comment
+ (-> {:limit 3
+ :window-ms 7000
+ :name "test"
+ :cleanup-interval-ms 5000}
+ make-rate-limiter
+ rate-limiter-desc)
+ ;;
+)
diff --git a/src/clj/auto_web/page/be_middleware.clj b/auto_web_clj/src/auto_web/page/be_middleware.clj
similarity index 100%
rename from src/clj/auto_web/page/be_middleware.clj
rename to auto_web_clj/src/auto_web/page/be_middleware.clj
diff --git a/src/clj/auto_web/page/be_structure.clj b/auto_web_clj/src/auto_web/page/be_structure.clj
similarity index 100%
rename from src/clj/auto_web/page/be_structure.clj
rename to auto_web_clj/src/auto_web/page/be_structure.clj
diff --git a/test/clj/auto_web/http_request/lang_test.clj b/auto_web_clj/test/auto_web/http_request/lang_test.clj
similarity index 100%
rename from test/clj/auto_web/http_request/lang_test.clj
rename to auto_web_clj/test/auto_web/http_request/lang_test.clj
diff --git a/test/clj/auto_web/middleware_test.clj b/auto_web_clj/test/auto_web/middleware_test.clj
similarity index 100%
rename from test/clj/auto_web/middleware_test.clj
rename to auto_web_clj/test/auto_web/middleware_test.clj
diff --git a/auto_web_cljc/deps.edn b/auto_web_cljc/deps.edn
new file mode 100644
index 0000000..baf66bf
--- /dev/null
+++ b/auto_web_cljc/deps.edn
@@ -0,0 +1,10 @@
+{:deps {com.github.hephaistox/auto-core
+ {:git/sha "e72b9a127cd0d7a2665be1db69673babed722ee5",
+ :git/url "https://github.com/hephaistox/auto-core",
+ :hephaistox/dir "../../auto_core",
+ :hephaistox/url "https://github.com/hephaistox/auto-core"},
+ com.taoensso/sente {:mvn/version "1.20.0"},
+ hiccup/hiccup {:mvn/version "2.0.0"},
+ metosin/muuntaja {:mvn/version "0.6.11"},
+ metosin/reitit {:mvn/version "0.9.1"}},
+ :paths ["src"]}
\ No newline at end of file
diff --git a/src/cljc/auto_web/assembled/people_card.cljc b/auto_web_cljc/src/auto_web/assembled/people_card.cljc
similarity index 85%
rename from src/cljc/auto_web/assembled/people_card.cljc
rename to auto_web_cljc/src/auto_web/assembled/people_card.cljc
index 8de397a..138c9a4 100644
--- a/src/cljc/auto_web/assembled/people_card.cljc
+++ b/auto_web_cljc/src/auto_web/assembled/people_card.cljc
@@ -6,13 +6,13 @@
(defn- on-close-modal
[modal-kw]
- #?(:cljs (fn [_] (set! (.-style.display (.getElementById js/document (name modal-kw))) "none"))
- :clj (str "document.getElementById(\"" (name modal-kw) "\").style.display = \"none\";")))
+ #?(:cljs (fn [_] (set! (.-style.display (.getElementById js/document modal-kw)) "none"))
+ :clj (str "document.getElementById(\"" modal-kw "\").style.display = \"none\";")))
(defn- on-open-modal
[modal-kw]
- #?(:cljs (fn [_] (set! (.-style.display (.getElementById js/document (name modal-kw))) "block"))
- :clj (str "document.getElementById(\"" (name modal-kw) "\").style.display = \"block\";")))
+ #?(:cljs (fn [_] (set! (.-style.display (.getElementById js/document modal-kw)) "block"))
+ :clj (str "document.getElementById(\"" modal-kw "\").style.display = \"block\";")))
(defn cpeople-modal*
"What is displayed when the modal opens"
@@ -40,10 +40,10 @@
[:div.w3-round-xxlarge.w3-col.m4.w3-card
opts
[:div.w3-modal {:id modal-kw
- :onclick (on-close-modal modal-kw)}
+ :on-click (on-close-modal modal-kw)}
[:div.w3-modal-content.w3-animate-top.w3-round-xxlarge {:style {:z-index "-9999!important"}}
modal-content]]
- [:div.w3-padding-24.w3-row {:onclick (on-open-modal modal-kw)}
+ [:div.w3-padding-24.w3-row {:on-click (on-open-modal modal-kw)}
[:div.w3-center.w3-row (cimg {:class "w3-circle w3-center w3-margin"} :xsmall img)]
[:div.w3-row.w3-center
[:div.w3-large.w3-bold people-name]
diff --git a/src/cljc/auto_web/components/badge.cljc b/auto_web_cljc/src/auto_web/components/badge.cljc
similarity index 100%
rename from src/cljc/auto_web/components/badge.cljc
rename to auto_web_cljc/src/auto_web/components/badge.cljc
diff --git a/auto_web_cljc/src/auto_web/components/button.cljc b/auto_web_cljc/src/auto_web/components/button.cljc
new file mode 100644
index 0000000..fca9d85
--- /dev/null
+++ b/auto_web_cljc/src/auto_web/components/button.cljc
@@ -0,0 +1,31 @@
+(ns auto-web.components.button
+ "Buttons"
+ (:require
+ [auto-web.components.link :refer [link-opts]]))
+
+(defn- clink-button*
+ [opts link text]
+ [:a
+ (-> opts
+ (update :class #(str "w3-button w3-ripple " %))
+ (merge (link-opts link)))
+ text])
+
+(defn clink-button
+ "A link visually like a button"
+ [opts link text]
+ (if (map? opts) (clink-button* opts link text) (clink-button* {} opts link)))
+
+
+(defn- cbutton*
+ [opts link text]
+ [:a
+ (-> opts
+ (update :class #(str "w3-button w3-ripple " %))
+ (merge (link-opts link)))
+ text])
+
+(defn cbutton
+ "A link visually like a button"
+ [opts link text]
+ (if (map? opts) (cbutton* opts link text) (cbutton* {} opts link)))
diff --git a/src/cljc/auto_web/components/dark_mode.cljc b/auto_web_cljc/src/auto_web/components/dark_mode.cljc
similarity index 100%
rename from src/cljc/auto_web/components/dark_mode.cljc
rename to auto_web_cljc/src/auto_web/components/dark_mode.cljc
diff --git a/src/cljc/auto_web/components/img.cljc b/auto_web_cljc/src/auto_web/components/img.cljc
similarity index 97%
rename from src/cljc/auto_web/components/img.cljc
rename to auto_web_cljc/src/auto_web/components/img.cljc
index 178ecb1..c28ffaf 100644
--- a/src/cljc/auto_web/components/img.cljc
+++ b/auto_web_cljc/src/auto_web/components/img.cljc
@@ -51,7 +51,9 @@
"Metadata of an img html element."
[img]
(let [{:keys [url target alt img-id]
- :or {url "images/logos/not_def.png"}}
+ :or {url (-> images
+ :not-def
+ :url)}}
img]
{:src url
:target target
diff --git a/src/cljc/auto_web/components/lang.cljc b/auto_web_cljc/src/auto_web/components/lang.cljc
similarity index 100%
rename from src/cljc/auto_web/components/lang.cljc
rename to auto_web_cljc/src/auto_web/components/lang.cljc
diff --git a/auto_web_cljc/src/auto_web/components/link.cljc b/auto_web_cljc/src/auto_web/components/link.cljc
new file mode 100644
index 0000000..96795a7
--- /dev/null
+++ b/auto_web_cljc/src/auto_web/components/link.cljc
@@ -0,0 +1,14 @@
+(ns auto-web.components.link
+ "A link is made of
+ * `url` where the link lead into
+ * `target` as defined in the html `:a` target
+ * `link-id` the internal name of it")
+
+(defn link-opts
+ "Returns link options for a link"
+ [link]
+ (let [{:keys [url target link-id]} link]
+ {:href url
+ :target target
+ "data-link-name" (some-> link-id
+ name)}))
diff --git a/src/cljc/auto_web/components/list.cljc b/auto_web_cljc/src/auto_web/components/list.cljc
similarity index 68%
rename from src/cljc/auto_web/components/list.cljc
rename to auto_web_cljc/src/auto_web/components/list.cljc
index 9f5dbcd..f2624b9 100644
--- a/src/cljc/auto_web/components/list.cljc
+++ b/auto_web_cljc/src/auto_web/components/list.cljc
@@ -12,7 +12,7 @@
(:require
[auto-core.uuid :refer [unguessable]]
[auto-web.components.img :refer [cicon cicon-img]]
- [auto-web.components.link :refer [clink]]
+ [auto-web.components.link :refer [link-opts]]
[clojure.string :refer [blank?]]))
(defn cbullet
@@ -30,8 +30,8 @@
[:i.fa {:class (str fa-icon " w3-center")
:style {:width "1em"}}]
(if-not (blank? label)
- [:b.w3-margin-right.w3-button.w3-hover-opacity
- (clink {} link (str label ":"))]
+ [:b.w3-margin.w3-button.w3-hover-opacity
+ [:a (link-opts link) (str label ":")]]
[:b.w3-margin-right])
(when tooltip
[:span.w3-text.w3-tag {:style {:position "absolute"
@@ -52,15 +52,15 @@
item*]
[:div.w3-tooltip
(assoc-in opts* [:style :overflow] "visible")
- (clink {}
- link
- [:i.fa.w3-btn.w3-center {:class fa-icon
- :style {:overflow "visible"}}]
- (when tooltip
- [:span.w3-text.w3-tag {:style {:position "absolute"
- :left "0"
- :bottom "2.5em"}}
- tooltip]))]))
+ [:a
+ (link-opts link)
+ [:i.fa.w3-btn.w3-center {:class fa-icon
+ :style {:overflow "visible"}}]]
+ (when tooltip
+ [:span.w3-text.w3-tag {:style {:position "absolute"
+ :left "0"
+ :bottom "2.5em"}}
+ tooltip])]))
(defn cbar
"Display as a bar of icons"
@@ -86,14 +86,12 @@
^{:key react-key}
[:div.w3-tooltip
(assoc-in opts [:style :overflow] "visible")
- (clink {}
- link
- [:i.fa.w3-btn.w3-center (cicon-img {} img)]
- (when tooltip
- [:span.w3-text.w3-tag {:style {:position "absolute"
- :left "0"
- :bottom "2em"}}
- tooltip]))])
+ [:a (link-opts link) [:i.fa.w3-btn.w3-center (cicon-img {} img)]]
+ (when tooltip
+ [:span.w3-text.w3-tag {:style {:position "absolute"
+ :left "0"
+ :bottom "2em"}}
+ tooltip])])
(defn csmall-imgs
"List `items` to display as small buttons all on the same row."
@@ -104,15 +102,15 @@
(let [{:keys [fa-icon link label]} item]
(conj hiccup
(when (seq item)
- (clink {}
- link
- [:div.w3-tooltip.w3-button {:style {:overflow "visible"}}
- [:div.w3-hover-opacity (cicon {} fa-icon)]
- (when label
- [:div.w3-text.w3-tag {:style {:bottom "-2em"
- :left "0em"
- :position "absolute"}}
- label])])))))
+ [:a
+ (link-opts link)
+ [:div.w3-tooltip.w3-button {:style {:overflow "visible"}}
+ [:div.w3-hover-opacity (cicon {} fa-icon)]
+ (when label
+ [:div.w3-text.w3-tag {:style {:bottom "-2em"
+ :left "0em"
+ :position "absolute"}}
+ label])]]))))
[:div.w3-container.w3-content.w3-flex
(assoc-in opts [:style :justify-content] "center")]
items)))
diff --git a/src/cljc/auto_web/components/menu.cljc b/auto_web_cljc/src/auto_web/components/menu.cljc
similarity index 67%
rename from src/cljc/auto_web/components/menu.cljc
rename to auto_web_cljc/src/auto_web/components/menu.cljc
index af3f948..ca3b469 100644
--- a/src/cljc/auto_web/components/menu.cljc
+++ b/auto_web_cljc/src/auto_web/components/menu.cljc
@@ -1,6 +1,6 @@
(ns auto-web.components.menu
(:require
- [auto-web.components.link :refer [clink]]))
+ [auto-web.components.link :refer [link-opts]]))
(defn chorizontal-text-menu
"A menu made of text elements only, organized horizontally."
@@ -8,8 +8,7 @@
(let [opts* (if (coll? links) opts {})
links* (if (coll? links) links opts)]
(vec (concat [:div.w3-flex (assoc-in opts* [:style :justify-content] "center")]
- (map (fn [link]
- (clink {:class "w3-bar-item w3-button w3-mobile"} link (:text link)))
+ (map (fn [link] [:a.w3-bar-item.w3-button.w3-mobile (link-opts link) (:text link)])
links*)))))
(defn cvertical-text-menu
@@ -18,6 +17,5 @@
(let [opts* (if (coll? links) opts {})
links* (if (coll? links) links opts)]
(vec (concat [:div.w3-bar-block opts*]
- (map (fn [link]
- (clink {:class "w3-bar-item w3-button w3-mobile"} link (:text link)))
+ (map (fn [link] [:a.w3-bar-item.w3-button.w3-mobile (link-opts link) (:text link)])
links*)))))
diff --git a/src/cljc/auto_web/components/selector.cljc b/auto_web_cljc/src/auto_web/components/selector.cljc
similarity index 100%
rename from src/cljc/auto_web/components/selector.cljc
rename to auto_web_cljc/src/auto_web/components/selector.cljc
diff --git a/src/cljc/auto_web/components/sizes.cljc b/auto_web_cljc/src/auto_web/components/sizes.cljc
similarity index 100%
rename from src/cljc/auto_web/components/sizes.cljc
rename to auto_web_cljc/src/auto_web/components/sizes.cljc
diff --git a/src/cljc/auto_web/lang.cljc b/auto_web_cljc/src/auto_web/lang.cljc
similarity index 100%
rename from src/cljc/auto_web/lang.cljc
rename to auto_web_cljc/src/auto_web/lang.cljc
diff --git a/src/cljc/auto_web/page/builder.cljc b/auto_web_cljc/src/auto_web/page/builder.cljc
similarity index 100%
rename from src/cljc/auto_web/page/builder.cljc
rename to auto_web_cljc/src/auto_web/page/builder.cljc
diff --git a/test/cljc/auto_web/lang_test.cljc b/auto_web_cljc/test/auto_web/lang_test.cljc
similarity index 100%
rename from test/cljc/auto_web/lang_test.cljc
rename to auto_web_cljc/test/auto_web/lang_test.cljc
diff --git a/auto_web_cljs/deps.edn b/auto_web_cljs/deps.edn
new file mode 100644
index 0000000..b5a0904
--- /dev/null
+++ b/auto_web_cljs/deps.edn
@@ -0,0 +1,4 @@
+{:deps {no.cjohansen/portfolio {:mvn/version "2025.10.1"}
+ re-frame/re-frame {:mvn/version "1.4.3"}
+ thheller/shadow-cljs {:mvn/version "3.2.0"}}
+ :paths ["src" "env/devcards/src"]}
diff --git a/auto_web_cljs/env/portfolio/resources/index.html b/auto_web_cljs/env/portfolio/resources/index.html
new file mode 100644
index 0000000..487f075
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/resources/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Auto-web UI Components
+
+
+
+
+
+
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio.cljs
new file mode 100644
index 0000000..2839599
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio.cljs
@@ -0,0 +1,33 @@
+(ns auto-web.portfolio
+ (:require
+ [auto-web.portfolio.badge-cards]
+ [auto-web.portfolio.button-cards]
+ [auto-web.portfolio.img-cards]
+ [auto-web.portfolio.lang]
+ [auto-web.portfolio.link-cards]
+ [auto-web.portfolio.list-cards]
+ [auto-web.portfolio.menu-cards]
+ [auto-web.portfolio.people-cards]
+ [auto-web.portfolio.selector-cards]
+ [auto-web.portfolio.size-cards]
+ [portfolio.ui :as ui]))
+
+::auto-web.portfolio.people-cards/keep
+::auto-web.portfolio.badge-cards/keep
+::auto-web.portfolio.button-cards/keep
+::auto-web.portfolio.img-cards/keep
+::auto-web.portfolio.lang/keep
+::auto-web.portfolio.link-cards/keep
+::auto-web.portfolio.list-cards/keep
+::auto-web.portfolio.menu-cards/keep
+::auto-web.portfolio.selector-cards/keep
+::auto-web.portfolio.size-cards/keep
+
+(ui/start! {:config {:css-paths ["/css/w3_schools.css"
+ "/css/w3_colors_flat.css"
+ "/fontawesome/css/fontawesome.css"
+ "/fontawesome/css/brands.css"
+ "/fontawesome/css/solid.css"
+ "/css/components.css"]}})
+
+(defn init [])
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/badge_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/badge_cards.cljs
new file mode 100644
index 0000000..581aff9
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/badge_cards.cljs
@@ -0,0 +1,24 @@
+(ns auto-web.portfolio.badge-cards
+ (:require
+ [auto-web.components.badge :refer [cbadge cinvalid copyright-str cspinner cunknown cvalid]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defscene badge
+ "# Badge with custom bullets and tooltip message"
+ (reagent/as-element
+ [:ul
+ [:li "Exclamation " [cbadge "fa-exclamation" "fa-question" true "Tooltip message"]]
+ [:li "Question " [cbadge "fa-exclamation" "fa-question" false "Tooltip message"]]]))
+
+(defscene
+ status-badges
+ "## Predefined status badges"
+ (reagent/as-element
+ [:div.w3-row
+ [:ul [:li "Unknown " [cunknown]] [:li "Valid: " [cvalid]] [:li "Invalid: " [cinvalid]]]]))
+
+(defscene copyright "## Copyright badge" (reagent/as-element [copyright-str]))
+
+(defscene spinner "## Spinner to symbolize a waiting time" (reagent/as-element [cspinner]))
+
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/button_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/button_cards.cljs
new file mode 100644
index 0000000..287f3a4
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/button_cards.cljs
@@ -0,0 +1,37 @@
+(ns auto-web.portfolio.button-cards
+ (:require
+ [auto-web.components.button :refer [clink-button]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defscene button-nolink
+ "# A simple button, no link defined"
+ :params
+ "w3-orange"
+ [params]
+ (reagent/as-element [clink-button {:class params}
+ {}
+ "Testing"]))
+
+(defscene button
+ "# A simple button, a link is defnied"
+ :params
+ "w3-orange"
+ [params]
+ (reagent/as-element [clink-button {:class params}
+ {:url "https://hephaistox.fr"}
+ "Testing"]))
+
+(defscene
+ button-with-options
+ "# A simple button showing an alert when clicked
+
+Note that:
+- The orange background is added
+- The link has been removed in the example, but it could have been kept
+- So is the the on-click behavior"
+ (reagent/as-element [clink-button {:on-click #(js/alert "Simple button alert")
+ :class "w3-orange"}
+ {}
+ "testing"]))
+
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/img_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/img_cards.cljs
new file mode 100644
index 0000000..4f921ae
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/img_cards.cljs
@@ -0,0 +1,44 @@
+(ns auto-web.portfolio.img-cards
+ (:require
+ [auto-web.components.img :refer [cicon cicon-img cimg clabelled-img]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defscene
+ img-no-image
+ "# No valid image provided
+
+- Hephaistox has its own broken link image shown when no valid link id is provided.
+- If a link is defined, and the image is broken, the broken link image won't be shown. To detect this, please consult admin page."
+ (reagent/as-element [cimg :tiny {}]))
+
+(defscene img-test
+ "# A valid image provided"
+ (reagent/as-element [cimg
+ :tiny
+ {:url "/images/logos/hephaistox_logo.png"
+ :img-id :logo
+ :alt "alt message"}]))
+
+
+(defscene labelled-img-test
+ "# A labelled image"
+ (reagent/as-element [clabelled-img
+ :tiny
+ {:url "/images/logos/hephaistox_logo.png"
+ :img-id :logo
+ :label "Got it"
+ :alt "alt message"}]))
+
+(defscene icon-img-test
+ "# An cicon image"
+ (reagent/as-element [:div.w3-cell
+ [cicon-img {:url "/images/logos/hephaistox_logo.png"
+ :img-id :logo
+ :label "Got it"
+ :alt "alt message"}]]))
+
+(defscene icon-test
+ "# A small font awesome icon"
+ (reagent/as-element [cicon {}
+ "fa-exclamation"]))
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/lang.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/lang.cljs
new file mode 100644
index 0000000..9bad454
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/lang.cljs
@@ -0,0 +1,18 @@
+(ns auto-web.portfolio.lang
+ (:require
+ [auto-web.components.lang :refer [clang-bar]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defscene lang-bar-test
+ "# A lang bar"
+ :params
+ (atom {:lang :fr})
+ [params]
+ (let [{:keys [lang]} @params]
+ (reagent/as-element [:div.w3-cell
+ [clang-bar {:class "w3-orange"}
+ lang
+ [:fr :pl :en]
+ #(swap! params assoc :lang %)]
+ lang])))
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/link_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/link_cards.cljs
new file mode 100644
index 0000000..56937d1
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/link_cards.cljs
@@ -0,0 +1,33 @@
+(ns auto-web.portfolio.link-cards
+ (:require
+ [auto-web.components.link :refer [link-opts]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defscene a-test
+ "# A link with an :a, opt is an orange background"
+ (reagent/as-element [:a
+ (-> (link-opts {:url "http://google.fr"
+ :link-id :id-test})
+ (assoc :class "w3-orange"))
+ "testing"]))
+
+(defscene a-div
+ "# A link on a div"
+ (reagent/as-element [:a
+ (-> (link-opts {:url "http://google.fr"
+ :link-id :id-test})
+ (assoc :class "w3-orange"))
+ [:div.w3-cell.w3-yellow {:style {:width "4em"
+ :height "4em"}}
+ "Arg"]]))
+
+(defscene a-with-target
+ "# An anchor with target"
+ (reagent/as-element [:a
+ (-> (link-opts {:url "http://google.fr"
+ :target "blank"
+ :link-id :id-test})
+ (assoc :class "w3-orange"))
+ "with blank target"]))
+
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/list_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/list_cards.cljs
new file mode 100644
index 0000000..48524a7
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/list_cards.cljs
@@ -0,0 +1,129 @@
+(ns auto-web.portfolio.list-cards
+ (:require
+ [auto-web.components.list :refer [cbar cbar-img cbar-item cbullet csmall-imgs]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defscene
+ bullet
+ "# Bullets list - Each item in the list is a bullet.
+
+Note that:
+- Opts with boder is applied.
+- Bullets are customizable with `fa-icon`.
+- The default bullet is a circle.
+- You can define a tooltip.
+- Labels can be linked."
+ (let [v [{:fa-icon "fa-exclamation"
+ :react-key :fa
+ :link {:url "https://hephaistox.fr"}
+ :label "This is the label"
+ :desc "This is the description"}
+ {:link {:url "https://hephaistox.com"}
+ :label "This is the label"
+ :desc "This one has the default bullet"}
+ {:desc "With desc only"}
+ {:desc "With a tooltip"
+ :tooltip "This is a tooltip"}]]
+ (reagent/as-element [:div
+ [cbullet {:class "w3-border"}
+ v]
+ [:p (pr-str v)]])))
+
+(defscene
+ bullet-with-no-opts
+ "# Bullets list - Opts are missing
+
+Note that:
+- Borders have disappeared,
+- But the rest is the same than the previous card"
+ (reagent/as-element [cbullet
+ [{:fa-icon "fa-exclamation"
+ :react-key :fa
+ :link {:url "https://hephaistox.fr"}
+ :label "This is the label"
+ :desc "This is the description"}
+ {:link {:url "https://hephaistox.com"}
+ :label "This is the label"
+ :desc "This one has the default bullet"}
+ {:desc "With desc only"}
+ {:desc "With a tooltip"
+ :tooltip "This is a tooltip"}]]))
+
+(defscene
+ bar-item
+ "# One item in a bar
+
+Note that:
+- The element looks like a button when hovered,
+- Has a tooltip"
+ (reagent/as-element [:div.w3-cell
+ [cbar-item {}
+ {:fa-icon "fa-exclamation"
+ :link {:url "https://hephaistox.fr"}
+ :tooltip "This is a tooltip"}]]))
+
+(defscene bar-item-with-no-tooltip
+ "# One item of a list bar, with no tooltip"
+ (reagent/as-element [cbar-item {}
+ {:fa-icon "fa-exclamation"
+ :link {:url "https://hephaistox.fr"}}]))
+
+(defscene bar-item-with-no-opts
+ "# One bar item with no options"
+ (reagent/as-element [cbar-item {:fa-icon "fa-exclamation"
+ :link {:url "https://hephaistox.fr"}}]))
+
+(defscene bar
+ "# One bar of icon lists"
+ (reagent/as-element [:div.w3-display-container {:style {:height "100px"}}
+ [:div.w3-display-middle
+ [cbar {:class "w3-cell"}
+ [{:fa-icon "fa-exclamation"
+ :react-key :fa
+ :link {:url "https://hephaistox.fr"
+ :link-id :hephaistox-1}}
+ {:link {:url "https://hephaistox.com"
+ :link-id :hephaistox-2}}
+ {}
+ {:tooltip "This is a tooltip"}]]]]))
+
+(defscene
+ bar-img
+ "# Same with icons replacing images
+
+Note that:
+- Tooltip has non breakable spaces
+- Now the element is an image, not an icon"
+ (reagent/as-element [:div.w3-cell
+ [cbar-img {}
+ {:img {:url "/images/logos/hephaistox_logo.png"}
+ :react-key :fa
+ :link {:url "https://hephaistox.fr"}
+ :tooltip "This is a tooltip"
+ :label "This is the label"
+ :desc "This is the description"}]]))
+
+(defscene bar-img-no-image
+ "# When the image is missing"
+ (reagent/as-element [:div.w3-cell
+ [cbar-img {}
+ {:img {}
+ :react-key :fa
+ :link {:url "https://hephaistox.fr"}
+ :tooltip "This is a tooltip"
+ :label "This is the label"
+ :desc "This is the description"}]]))
+
+
+(defscene small-imgs
+ "# With a small image"
+ (reagent/as-element [:div.w3-cell
+ [csmall-imgs {}
+ [{:fa-icon "fa-exclamation"
+ :link {:url "https://hephaistox.fr"}
+ :label "This is the exclamation label"}
+ {:fa-icon "fa-question"
+ :link {:url "https://hephaistox.fr"}
+ :tooltip "This is the question tooltip"
+ :label "This is the label"}]]]))
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/menu_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/menu_cards.cljs
new file mode 100644
index 0000000..2e42a68
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/menu_cards.cljs
@@ -0,0 +1,43 @@
+(ns auto-web.portfolio.menu-cards
+ (:require
+ [auto-web.components.menu :refer [chorizontal-text-menu cvertical-text-menu]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defscene
+ horizontal-text-menu
+ "# A menu displayed with texts,
+
+Note that
+- the border is added by the options
+- the bar is all screen large"
+ (reagent/as-element [chorizontal-text-menu {:class "w3-border"}
+ [{:url "https://hephaistox.com"
+ :link-id :foo
+ :text "site en .com"}
+ {:url "https://hephaistox.fr"
+ :link-id :bar
+ :text "site en .fr"}]]))
+
+(defscene horizontal-text-menu-no-opts
+ "# A menu with no options"
+ (reagent/as-element [chorizontal-text-menu
+ [{:url "https://hephaistox.com"
+ :link-id "foo2"
+ :text "site en .com"}
+ {:url "https://hephaistox.fr"
+ :link-id "bar2"
+ :text "site en .fr"}]]))
+
+(defscene vertical-text-menu-no-opts
+ "# A vertical menu with no options
+
+Note that:
+- Each elements are the whole width"
+ (reagent/as-element [cvertical-text-menu {:class "w3-border"}
+ [{:url "https://hephaistox.com"
+ :link-id "foo3"
+ :text "site en .com"}
+ {:url "https://hephaistox.fr"
+ :link-id "bar3"
+ :text "site en .fr"}]]))
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/people_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/people_cards.cljs
new file mode 100644
index 0000000..176a6a7
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/people_cards.cljs
@@ -0,0 +1,55 @@
+(ns auto-web.portfolio.people-cards
+ (:require
+ [auto-web.assembled.people-card :refer [cpeople-card cpeople-card-with-modal cpeople-modal]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defscene
+ people-modal-test
+ "## The modal window"
+ (reagent/as-element
+ [cpeople-modal {}
+ {:url "/images/logos/hephaistox_logo.png"}
+ "John Doe"
+ "North Pole"
+ [:div
+ [:p
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]
+ [:p
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]]]))
+
+(defscene
+ people-card-test
+ "## A card"
+ (reagent/as-element
+ [cpeople-card {}
+ "card-modal-id"
+ []
+ {:url "/images/logos/hephaistox_logo.png"}
+ "John Doe"
+ "North Pole"
+ [:div
+ [:p
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]
+ [:p
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]]]))
+
+(defscene
+ people-card-with-modal-test
+ "## A card with its modal"
+ (reagent/as-element
+ [cpeople-card-with-modal {}
+ "test-modal-id2"
+ []
+ {:url "/images/logos/hephaistox_logo.png"}
+ "Jane Doe"
+ "Atlantide"
+ [:div
+ [:p
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]
+ [:p
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]]]))
+
+(comment
+ ;;
+)
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/selector_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/selector_cards.cljs
new file mode 100644
index 0000000..d515ab0
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/selector_cards.cljs
@@ -0,0 +1,34 @@
+(ns auto-web.portfolio.selector-cards
+ (:require
+ [auto-web.components.selector :refer [cselector]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(def page-selected
+ (atom {:selected 1
+ :n 10}))
+
+(defscene page-selected-card "# Page selected" (reagent/as-element [:p (pr-str @page-selected)]))
+
+(defscene
+ selector
+ "# A selector, opt is tested with the w3-orange class
+
+Note that
+- Currently selected element is disactivated.
+- Next and before buttons are disactivated respectively when on the first or last item."
+ :params
+ page-selected
+ [page-selected]
+ (let [{:keys [n selected]} @page-selected]
+ (reagent/as-element
+ [:div.w3-cell
+ [cselector {:class "w3-orange"}
+ {:n n
+ :selected selected}
+ (fn [target-page] {:on-click #(swap! page-selected assoc :selected target-page)})
+ (fn [rel-page]
+ {:on-click (fn [_] (swap! page-selected update :selected (fn [page] (+ page rel-page))))})]
+ [:p "Page " (pr-str selected) "/" n]])))
+
+
diff --git a/auto_web_cljs/env/portfolio/src/auto_web/portfolio/size_cards.cljs b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/size_cards.cljs
new file mode 100644
index 0000000..ae4ad3d
--- /dev/null
+++ b/auto_web_cljs/env/portfolio/src/auto_web/portfolio/size_cards.cljs
@@ -0,0 +1,23 @@
+(ns auto-web.portfolio.size-cards
+ (:require
+ [auto-web.components.sizes :refer [predefined-size]]
+ [portfolio.react-18 :refer-macros [defscene]]
+ [reagent.core :as reagent]))
+
+(defn- show-size
+ [s]
+ [:div.w3-blue.w3-display-container {:style {:width (predefined-size s)
+ :height (predefined-size s)}}
+ [:div.w3-display-middle.w3-text-black.w3-bold s]])
+
+(defscene text-of-all-sizes
+ "# Badge with customizable appearance and tooltip message"
+ (reagent/as-element [:div.w3-flex {:style {:gap "8px"
+ :flex-wrap "wrap"}}
+ (show-size :icon)
+ (show-size :tiny)
+ (show-size :xsmall)
+ (show-size :small)
+ (show-size :default)
+ (show-size :medium)
+ (show-size :big)]))
diff --git a/src/cljs/auto_web/lang_fe.cljs b/auto_web_cljs/src/auto_web/lang_fe.cljs
similarity index 100%
rename from src/cljs/auto_web/lang_fe.cljs
rename to auto_web_cljs/src/auto_web/lang_fe.cljs
diff --git a/src/cljs/auto_web/local_storage.cljs b/auto_web_cljs/src/auto_web/local_storage.cljs
similarity index 100%
rename from src/cljs/auto_web/local_storage.cljs
rename to auto_web_cljs/src/auto_web/local_storage.cljs
diff --git a/src/cljs/auto_web/styling.cljs b/auto_web_cljs/src/auto_web/styling.cljs
similarity index 100%
rename from src/cljs/auto_web/styling.cljs
rename to auto_web_cljs/src/auto_web/styling.cljs
diff --git a/bb.edn b/bb.edn
index 3bef37b..f07e2c3 100644
--- a/bb.edn
+++ b/bb.edn
@@ -29,21 +29,22 @@
:requires [[auto-build.tasks.clj-test :as build-clj-test]
[auto-build.echo :refer [level1-header]]]
:task (->
- (build-clj-test/clj-test level1-header "." "clj-test-runner" (current-task) ["test-clj"])
+ (build-clj-test/clj-test level1-header "." "clj-test-runner" (current-task) ["clj-test"])
exit)}
cljs-browser-test
{:doc "Test with cljs in browser"
:requires [[auto-build.tasks.cljs-browser-test :as build-cljs-browser]
[auto-build.echo :refer [level1-header]]]
- :task (->
- (build-cljs-browser/cljs-browser-test level1-header "." (current-task) ["browser-test"])
- exit)}
+ :task
+ (-> (build-cljs-browser/cljs-browser-test level1-header "." (current-task) ["cljs-browser-test"])
+ exit)}
cljs-node-test
{:doc "Test with cljs"
:requires [[auto-build.tasks.cljs-node-test :as build-cljs-node-test]
[auto-build.echo :refer [level1-header]]]
- :task (-> (build-cljs-node-test/cljs-node-test level1-header "." (current-task) ["ltest"])
- exit)}
+ :task (->
+ (build-cljs-node-test/cljs-node-test level1-header "." (current-task) ["cljs-node-test"])
+ exit)}
copy {:doc "Copy files from source projects (as defined in ext_src.edn)"
:requires [[auto-build.tasks.copy :as tc] [auto-build.echo :refer [level1-header]]]
:task (tc/run level1-header "ext_src.edn")}
@@ -64,7 +65,7 @@
:task (-> (task-format/format level1-header "." (current-task))
exit)}
gha {:doc "To be run by github action"
- :task (do (shell "bb clj-test test-clj -v") (shell "bb cljs-node-test all -v"))}
+ :task (do (shell "bb clj-test -v") (shell "bb cljs-node-test all -v"))}
heph-info {:doc "Hephaistox project info"
:extra-paths []
:requires [[auto-build.tasks.heph-info :as heph-info]
@@ -73,10 +74,19 @@
exit)}
lint {:doc "Lint source code"
:requires [[auto-build.tasks.lint :as task-lint] [auto-build.echo :refer [level1-header]]]
- :task (-> (task-lint/lint level1-header ["src" "test"] "." (current-task))
+ :task (-> (task-lint/lint level1-header
+ ["auto_web_clj/src"
+ "auto_web_cljs/src"
+ "auto_web_cljc/src"
+ "auto_web_clj/test"
+ "auto_web_cljc/test"]
+ "."
+ (current-task))
exit)}
+ portfolio {:doc ""
+ :task (shell "npx" "shadow-cljs" "watch" ":portfolio")}
repl {:doc "Clojure repl based on cider"
:override-builtin true
:requires [[auto-build.tasks.repl :as build-repl] [auto-build.echo :refer [level1-header]]]
- :task (-> (build-repl/repl level1-header "." (current-task) [:cljs-deps] 7006)
+ :task (-> (build-repl/repl level1-header "." (current-task) [:clj-test] 7006)
exit)}}}
diff --git a/deps.edn b/deps.edn
index 1a5ffca..8425388 100644
--- a/deps.edn
+++ b/deps.edn
@@ -2,14 +2,21 @@
{:antq {:deps {com.github.liquidz/antq {:mvn/version "2.11.1276"}
org.slf4j/slf4j-nop {:mvn/version "2.0.17"}}
:main-opts ["-m" "antq.core"]}
+ :clj-test
+ {:main-opts
+ ["-m" "cognitect.test-runner" "-r" ".*-test.*" "-d" "auto_web_clj/test" "auto_web_cljc/test"]}
:clj-test-runner {:exec-fn cognitect.test-runner.api/test
:extra-deps {com.cognitect/test-runner
{:git/url "https://github.com/cognitect-labs/test-runner"
- :sha "3f288f1f16d167723ad87cc35b1dfee3c1681e10"}}}
- :cljs-deps {:extra-deps {devcards/devcards {:mvn/version "0.2.7"}
- thheller/shadow-cljs {:mvn/version "3.2.0"}}
- :extra-paths
- ["src/cljc" "src/cljs" "test/cljc" "env/devcards/src/cljs" "env/devcards/resources"]}
+ :sha "3f288f1f16d167723ad87cc35b1dfee3c1681e10"}}
+ :extra-paths ["auto_web_cljc/test" "auto_web_clj/test"]}
+ :cljs-deps {:extra-deps {com.github.hephaistox/auto-web-cljc {:local/root "auto_web_cljc"}
+ com.github.hephaistox/auto-web-cljs {:local/root "auto_web_cljs"}}
+ :extra-paths ["auto_web_cljc/test"
+ "auto_web_clj/test"
+ "auto_web_clj/resources"
+ "auto_web_cljs/env/portfolio/src"
+ "auto_web_cljs/env/portfolio/resources"]}
:codox {:exec-args {:description "`auto-web` provide web feature to ease Hephaistox web apps"
:doc-paths ["docs/codox"]
:metadata {:doc/format :markdown}
@@ -17,23 +24,6 @@
:source-uri
"https://github.com/hephaistox/auto-web/blob/{version}/{filepath}#L{line}"}
:exec-fn codox.main/generate-docs
- :extra-deps {codox/codox {:mvn/version "0.10.8"}}}
- :test-clj {:extra-paths ["test/cljc" "test/clj"]
- :main-opts
- ["-m" "cognitect.test-runner" "-r" ".*-test.*" "-d" "test/clj" "test/cljc"]}}
- :deps {amalloy/ring-gzip-middleware {:mvn/version "0.1.4"}
- clj-http/clj-http {:mvn/version "3.13.1"}
- com.github.hephaistox/auto-core {:git/sha "e72b9a127cd0d7a2665be1db69673babed722ee5"}
- com.taoensso/sente {:mvn/version "1.20.0"}
- hiccup/hiccup {:mvn/version "2.0.0"}
- http-kit/http-kit {:mvn/version "2.8.1"}
- metosin/muuntaja {:mvn/version "0.6.11"}
- metosin/reitit {:mvn/version "0.9.1"}
- mount/mount {:mvn/version "0.1.23"}
- re-frame/re-frame {:mvn/version "1.4.3"}
- ring-cors/ring-cors {:mvn/version "0.1.13"}
- ring/ring {:mvn/version "1.15.2"}
- ring/ring-anti-forgery {:mvn/version "1.4.0"}
- ring/ring-headers {:mvn/version "0.4.0"}
- ring/ring-ssl {:mvn/version "0.4.0"}}
- :paths ["src/clj" "src/cljc" "resources"]}
+ :extra-deps {codox/codox {:mvn/version "0.10.8"}}}}
+ :deps {com.github.hephaistox/auto-web-clj {:local/root "auto_web_clj"}
+ com.github.hephaistox/auto-web-cljc {:local/root "auto_web_cljc"}}}
diff --git a/env/devcards/src/cljs/auto_web/app.cljs b/env/devcards/src/cljs/auto_web/app.cljs
deleted file mode 100644
index 9cc2be4..0000000
--- a/env/devcards/src/cljs/auto_web/app.cljs
+++ /dev/null
@@ -1,21 +0,0 @@
-(ns auto-web.app
- (:require
- [reagent.core :as r]
- [reagent.dom :as dom]))
-
-(defn app
- []
- (let [state (r/atom {:counter 0})
- change (fn [event f] (.preventDefault event) (swap! state update-in [:counter] f))]
- (fn [] [:h2
- "Counter"
- [:div
- [:button {:on-click #(change % dec)}
- "-"]
- [:span (:counter @state)]
- [:button {:on-click #(change % inc)}
- "+"]]])))
-
-(defn ^:dev/after-load start! [] (dom/render [app] (.getElementById js/document "app")))
-
-(defn init! [] (start!))
diff --git a/env/devcards/src/cljs/auto_web/assembled/people_card_cards.cljs b/env/devcards/src/cljs/auto_web/assembled/people_card_cards.cljs
deleted file mode 100644
index 641a39d..0000000
--- a/env/devcards/src/cljs/auto_web/assembled/people_card_cards.cljs
+++ /dev/null
@@ -1,38 +0,0 @@
-(ns auto-web.assembled.people-card-cards
- (:require
- [auto-web.assembled.people-card :refer [cpeople-card cpeople-card-with-modal cpeople-modal]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defcard
- people-modal-test
- "## The modal displayed"
- (reagent/as-element
- [cpeople-modal {:url "/images/logos/hephaistox_logo.png"}
- "John Doe"
- "North Pole"
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]))
-
-(defcard people-card-test
- "## The card"
- (reagent/as-element [:div.w3-row
- [cpeople-card
- :test-modal-id
- []
- {:url "/images/logos/hephaistox_logo.png"}
- "Saaska"
- "Au collège"
- "En 6ème 1"]]))
-
-(defcard people-card-with-modal-test
- "## The card and its modal"
- (reagent/as-element [:div.w3-row
- [cpeople-card-with-modal {}
- :test-modal-id2
- []
- {:url "/images/logos/hephaistox_logo.png"}
- "Jane Doe"
- "Atlantide"
- "Somewhere"]]))
diff --git a/env/devcards/src/cljs/auto_web/components/badge_cards.cljs b/env/devcards/src/cljs/auto_web/components/badge_cards.cljs
deleted file mode 100644
index 4e94390..0000000
--- a/env/devcards/src/cljs/auto_web/components/badge_cards.cljs
+++ /dev/null
@@ -1,24 +0,0 @@
-(ns auto-web.components.badge-cards
- (:require
- [auto-web.components.badge :refer [cbadge cinvalid copyright-str cspinner cunknown cvalid]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defcard badge
- "## Badge with custom bullets and tooltip message"
- (reagent/as-element
- [:ul
- [:li "Exclamation " [cbadge "fa-exclamation" "fa-question" true "Tooltip message"]]
- [:li "Question " [cbadge "fa-exclamation" "fa-question" false "Tooltip message"]]]))
-
-
-(defcard
- status-badges
- "## Predefined status badges"
- (reagent/as-element
- [:div.w3-row
- [:ul [:li "Unknown " [cunknown]] [:li "Valid: " [cvalid]] [:li "Invalid: " [cinvalid]]]]))
-
-(defcard copyright "## Copyright" (reagent/as-element [copyright-str]))
-
-(defcard spinner "## Spinner to symbolize a waiting time" (reagent/as-element [cspinner]))
diff --git a/env/devcards/src/cljs/auto_web/components/button_cards.cljs b/env/devcards/src/cljs/auto_web/components/button_cards.cljs
deleted file mode 100644
index c74707c..0000000
--- a/env/devcards/src/cljs/auto_web/components/button_cards.cljs
+++ /dev/null
@@ -1,49 +0,0 @@
-(ns auto-web.components.button-cards
- (:require
- [auto-web.components.button :refer [cbutton clink-button]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defcard button
- "### A simple noop button, no on-click defined"
- (fn [data-atom _]
- (reagent/as-element [:div.w3-cell
- [cbutton @data-atom "Testing" {:url "https://hephaistox.fr"}]]))
- {}
- {:inspect-data true})
-
-(defcard
- button-with-options
- "### A simple button showing an alert when clicked
-
-Note that:
-- The orange background is added
-- So is the the on-click behavior"
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-cell
- [cbutton
- @data-atom
- "testing"
- {:url "https://hephaistox.fr"
- :link-id :foo}]]))
- {:on-click #(js/alert "Simple button alert")
- :class "w3-orange"}
- {:inspect-data true})
-
-(defcard link-button
- "### A simple link-button, on-click is defined by the link"
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-cell [clink-button "Testing" @data-atom]]))
- {:url "https://hephaistox.fr"
- :link-id "bar"}
- {:inspect-data true})
-
-(defcard link-button-with-options
- "### A simple button showing an alert when clicked"
- (fn [data-atom _owner]
- (let [{:keys [opts link]} @data-atom]
- (reagent/as-element [:div.w3-cell [clink-button opts "testing" link]])))
- {:link {}
- :opts {:on-click #(js/alert "Simple button alert")
- :class "w3-orange"}}
- {:inspect-data true})
diff --git a/env/devcards/src/cljs/auto_web/components/img_cards.cljs b/env/devcards/src/cljs/auto_web/components/img_cards.cljs
deleted file mode 100644
index 3f947f2..0000000
--- a/env/devcards/src/cljs/auto_web/components/img_cards.cljs
+++ /dev/null
@@ -1,55 +0,0 @@
-(ns auto-web.components.img-cards
- (:require
- [auto-web.components.img :refer [cicon cicon-img cimg clabelled-img]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defcard img-no-image
- "### No valid image provided"
- (fn [data-atom _owner] (reagent/as-element [cimg :tiny @data-atom]))
- {}
- {:inspect-data true})
-
-(defcard img-test
- "### A valid image provided"
- (fn [data-atom _owner] (reagent/as-element [cimg :tiny @data-atom]))
- {:url "/images/logos/hephaistox_logo.png"
- :img-id :logo
- :alt "alt message"}
- {:inspect-data true})
-
-(defcard labelled-img-wo-label
- "### A labelled image with no label is like an image!"
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-cell [clabelled-img :tiny @data-atom]]))
- {:url "/images/logos/hephaistox_logo.png"
- :img-id :logo
- :alt "alt message"}
- {:inspect-data true})
-
-(defcard labelled-img-test
- "### A labelled image"
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-cell [clabelled-img :tiny @data-atom]]))
- {:url "/images/logos/hephaistox_logo.png"
- :img-id :logo
- :label "Got it"
- :alt "alt message"}
- {:inspect-data true})
-
-(defcard icon-img-test
- "### An cicon image"
- (fn [data-atom _owner] (reagent/as-element [:div.w3-cell [cicon-img @data-atom]]))
- {:url "/images/logos/hephaistox_logo.png"
- :img-id :logo
- :label "Got it"
- :alt "alt message"}
- {:inspect-data true})
-
-(defcard icon-test
- "### A small font awesome icon"
- (reagent/as-element [:div.w3-center
- [cicon {}
- "fa-exclamation"]])
- {}
- {:inspect-data true})
diff --git a/env/devcards/src/cljs/auto_web/components/lang_cards.cljs b/env/devcards/src/cljs/auto_web/components/lang_cards.cljs
deleted file mode 100644
index 1942ce4..0000000
--- a/env/devcards/src/cljs/auto_web/components/lang_cards.cljs
+++ /dev/null
@@ -1,15 +0,0 @@
-(ns auto-web.components.lang-cards
- (:require
- [auto-web.components.lang :refer [clang-bar]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defcard lang-bar-test
- "### A lang bar"
- (fn [data-atom _owner]
- (let [{:keys [lang opts]} @data-atom]
- (reagent/as-element
- [:div.w3-cell [clang-bar opts lang [:fr :pl :en] #(swap! data-atom assoc :lang %)]])))
- {:opts {:class "w3-orange"}
- :lang :fr}
- {:inspect-data true})
diff --git a/env/devcards/src/cljs/auto_web/components/link_cards.cljs b/env/devcards/src/cljs/auto_web/components/link_cards.cljs
deleted file mode 100644
index ab95c4e..0000000
--- a/env/devcards/src/cljs/auto_web/components/link_cards.cljs
+++ /dev/null
@@ -1,53 +0,0 @@
-(ns auto-web.components.link-cards
- (:require
- [auto-web.components.link :refer [clink]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defcard a-test
- "### An anchor of a string, opt is an orange background"
- (fn [data-atom _owner]
- (let [{:keys [link opts]} @data-atom]
- (reagent/as-element [:div.w3-cell [clink opts link "testing"]])))
- {:link {:url "http://google.fr"
- :link-id :id-test}
- :opts {:class "w3-orange"}}
- {:inspect-data true})
-
-(defcard a-div
- "### An anchor of a div"
- (fn [data-atom _owner]
- (let [{:keys [link opts]} @data-atom]
- (reagent/as-element [:div.w3-cell
- [clink
- opts
- link
- [:div.w3-cell.w3-yellow {:style {:width "4em"
- :height "4em"}}
- "Arg"]]])))
- {:link {:url "http://google.fr"
- :link-id :id-test}
- :opts {:class "w3-orange"}}
- {:inspect-data true})
-
-(defcard a-w-target
- "### An anchor with target"
- (fn [data-atom _owner]
- (let [{:keys [link opts]} @data-atom]
- (reagent/as-element [:div.w3-cell [clink opts link "with blank target"]])))
- {:link {:url "http://google.fr"
- :target "blank"
- :link-id :id-test}
- :opts {:class "w3-orange"}}
- {:inspect-data true})
-
-(defcard a-downloadable?
- "### A download anchor, the cursor is different, a tooltip tells it is a download"
- (fn [data-atom _owner]
- (let [{:keys [link opts]} @data-atom]
- (reagent/as-element [:div.w3-cell [clink opts link "testing"]])))
- {:link {:url "/images/logos/hephaistox_logo.png"
- :download? true
- :link-id :logo}
- :opts {:class "w3-orange"}}
- {:inspect-data true})
diff --git a/env/devcards/src/cljs/auto_web/components/list_cards.cljs b/env/devcards/src/cljs/auto_web/components/list_cards.cljs
deleted file mode 100644
index d154f3d..0000000
--- a/env/devcards/src/cljs/auto_web/components/list_cards.cljs
+++ /dev/null
@@ -1,149 +0,0 @@
-(ns auto-web.components.list-cards
- (:require
- [auto-web.components.list :refer [cbar cbar-img cbar-item cbullet csmall-imgs]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defcard
- bullet
- "### Bullets list - Each item in the list is a bullet.
-
-Note that:
-- Opts with boder is applied.
-- Bullets are customizable.
-- The default bullet is a circle.
-- You can define a tooltip.
-- Labels can be linked."
- (fn [data-atom _owner]
- (reagent/as-element [cbullet {:class "w3-border"}
- @data-atom]))
- [{:fa-icon "fa-exclamation"
- :react-key :fa
- :link {:url "https://hephaistox.fr"}
- :label "This is the label"
- :desc "This is the description"}
- {:link {:url "https://hephaistox.com"}
- :label "This is the label"
- :desc "This one has the default bullet"}
- {:desc "With desc only"}
- {:desc "With a tooltip"
- :tooltip "This is a tooltip"}]
- {:inspect-data true})
-
-(defcard
- bullet-with-no-opts
- "### Bullets list - Opts are missing
-
-Note that:
-- Borders have disappeared,
-- But the rest is the same than the previous card"
- (fn [data-atom _owner] (reagent/as-element [cbullet @data-atom]))
- [{:fa-icon "fa-exclamation"
- :react-key :fa
- :link {:url "https://hephaistox.fr"}
- :label "This is the label"
- :desc "This is the description"}
- {:link {:url "https://hephaistox.com"}
- :label "This is the label"
- :desc "This one has the default bullet"}
- {:desc "With desc only"}
- {:desc "With a tooltip"
- :tooltip "This is a tooltip"}]
- {:inspect-data true})
-
-(defcard
- bar-item
- "### One item in a bar
-
-Note that:
-- The element looks like a button when hovered,
-- Has a tooltip"
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-cell
- [cbar-item {}
- @data-atom]]))
- {:fa-icon "fa-exclamation"
- :link {:url "https://hephaistox.fr"}
- :tooltip "This is a tooltip"}
- {:inspect-data true})
-
-(defcard bar-item-with-no-tooltip
- "### One item of a list bar, with no tooltip"
- (fn [data-atom _owner]
- (reagent/as-element [cbar-item {}
- @data-atom]))
- {:fa-icon "fa-exclamation"
- :link {:url "https://hephaistox.fr"}}
- {:inspect-data true})
-
-(defcard bar-item-with-no-opts
- "### One bar item with no options"
- (fn [data-atom _owner] (reagent/as-element [cbar-item @data-atom]))
- {:fa-icon "fa-exclamation"
- :link {:url "https://hephaistox.fr"}}
- {:inspect-data true})
-
-(defcard bar
- "### One bar of icon lists"
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-display-container {:style {:height "100px"}}
- [:div.w3-display-middle
- [cbar {:class "w3-cell"}
- @data-atom]]]))
- [{:fa-icon "fa-exclamation"
- :react-key :fa
- :link {:url "https://hephaistox.fr"
- :link-id :hephaistox-1}}
- {:link {:url "https://hephaistox.com"
- :link-id :hephaistox-2}}
- {}
- {:tooltip "This is a tooltip"}]
- {:inspect-data true})
-
-(defcard
- bar-img
- "## Same with icons replacing images
-
-Note that:
-- Tooltip has non breakable spaces
-- Now the element is an image, not an icon"
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-cell
- [cbar-img {}
- @data-atom]]))
- {:img {:url "images/logos/hephaistox_logo.png"}
- :react-key :fa
- :link {:url "https://hephaistox.fr"}
- :tooltip "This is a tooltip"
- :label "This is the label"
- :desc "This is the description"}
- {:inspect-data true})
-
-(defcard bar-img-no-image
- "## When the image is missing"
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-cell
- [cbar-img {}
- @data-atom]]))
- {:img {}
- :react-key :fa
- :link {:url "https://hephaistox.fr"}
- :tooltip "This is a tooltip"
- :label "This is the label"
- :desc "This is the description"}
- {:inspect-data true})
-
-
-(defcard small-imgs
- (fn [data-atom _owner]
- (reagent/as-element [:div.w3-cell
- [csmall-imgs {}
- @data-atom]]))
- [{:fa-icon "fa-exclamation"
- :link {:url "https://hephaistox.fr"}
- :label "This is the exclamation label"}
- {:fa-icon "fa-question"
- :link {:url "https://hephaistox.fr"}
- :tooltip "This is the question tooltip"
- :label "This is the label"}]
- {:inspect-data true})
diff --git a/env/devcards/src/cljs/auto_web/components/menu_cards.cljs b/env/devcards/src/cljs/auto_web/components/menu_cards.cljs
deleted file mode 100644
index 697715c..0000000
--- a/env/devcards/src/cljs/auto_web/components/menu_cards.cljs
+++ /dev/null
@@ -1,50 +0,0 @@
-(ns auto-web.components.menu-cards
- (:require
- [auto-web.components.menu :refer [chorizontal-text-menu cvertical-text-menu]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defcard
- horizontal-text-menu
- "### A menu displayed with texts,
-
-Note that
-- the border is added by the options
-- the bar is all screen large"
- (fn [data-atom _owner]
- (reagent/as-element [chorizontal-text-menu {:class "w3-border"}
- @data-atom]))
- [{:url "https://hephaistox.com"
- :link-id :foo
- :text "site en .com"}
- {:url "https://hephaistox.fr"
- :link-id :bar
- :text "site en .fr"}]
- {:inspect-data true})
-
-(defcard horizontal-text-menu-no-opts
- "### A menu with no options"
- (fn [data-atom _owner] (reagent/as-element [chorizontal-text-menu @data-atom]))
- [{:url "https://hephaistox.com"
- :link-id "foo2"
- :text "site en .com"}
- {:url "https://hephaistox.fr"
- :link-id "bar2"
- :text "site en .fr"}]
- {:inspect-data true})
-
-(defcard vertical-text-menu-no-opts
- "### A vertical menu with no options
-
-Note that:
-- Each elements are the whole width"
- (fn [data-atom _owner]
- (reagent/as-element [cvertical-text-menu {:class "w3-border"}
- @data-atom]))
- [{:url "https://hephaistox.com"
- :link-id "foo3"
- :text "site en .com"}
- {:url "https://hephaistox.fr"
- :link-id "bar3"
- :text "site en .fr"}]
- {:inspect-data true})
diff --git a/env/devcards/src/cljs/auto_web/components/selector_cards.cljs b/env/devcards/src/cljs/auto_web/components/selector_cards.cljs
deleted file mode 100644
index a39171e..0000000
--- a/env/devcards/src/cljs/auto_web/components/selector_cards.cljs
+++ /dev/null
@@ -1,55 +0,0 @@
-(ns auto-web.components.selector-cards
- (:require
- [auto-web.components.selector :refer [cselector]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(def page-selected
- (atom {:selected 1
- :n 10}))
-
-(defcard page-selected "### Page selected" page-selected)
-
-(defcard
- selector
- "### A selector, opt is tested with the w3-orange class
-
-Note that
-- Currently selected element is disactivated.
-- Next and before buttons are disactivated respectively when on the first or last item."
- (fn [data-atom _owner]
- (let [{:keys [selected n]} @data-atom]
- (reagent/as-element
- [:div.w3-cell
- [cselector {:class "w3-yellow"}
- {:n n
- :selected selected}
- (fn [target-page] {:on-click #(swap! page-selected assoc :selected target-page)})
- (fn [rel-page]
- {:on-click (fn [_]
- (swap! page-selected update :selected (fn [page] (+ page rel-page))))})]])))
- page-selected
- {:inspect-data true})
-
-(defcard
- selector
- "### A selector, opt is tested with the w3-orange class
-
-Note that
-- Currently selected element is disactivated.
-- Next and before buttons are disactivated respectively when on the first or last item."
- (fn [data-atom _owner]
- (let [{:keys [selected n]} @data-atom]
- (reagent/as-element
- [:div.w3-cell
- [cselector {:class "w3-yellow"}
- {:n n
- :max-before 3
- :max-after 2
- :selected selected}
- (fn [target-page] {:on-click #(swap! page-selected assoc :selected target-page)})
- (fn [rel-page]
- {:on-click (fn [_]
- (swap! page-selected update :selected (fn [page] (+ page rel-page))))})]])))
- page-selected
- {:inspect-data true})
diff --git a/env/devcards/src/cljs/auto_web/components/sizes_cards.cljs b/env/devcards/src/cljs/auto_web/components/sizes_cards.cljs
deleted file mode 100644
index e6780b6..0000000
--- a/env/devcards/src/cljs/auto_web/components/sizes_cards.cljs
+++ /dev/null
@@ -1,23 +0,0 @@
-(ns auto-web.components.sizes-cards
- (:require
- [auto-web.components.sizes :refer [predefined-size]]
- [devcards.core :refer [defcard]]
- [reagent.core :as reagent]))
-
-(defn- show-size
- [s]
- [:div.w3-blue.w3-display-container {:style {:width (predefined-size s)
- :height (predefined-size s)}}
- [:div.w3-display-middle.w3-text-black.w3-bold s]])
-
-(defcard text-of-all-sizes
- "## Badge with customizable appearance and tooltip message"
- (reagent/as-element [:div.w3-flex {:style {:gap "8px"
- :flex-wrap "wrap"}}
- (show-size :icon)
- (show-size :tiny)
- (show-size :xsmall)
- (show-size :small)
- (show-size :default)
- (show-size :medium)
- (show-size :big)]))
diff --git a/env/devcards/src/cljs/auto_web/devcards.cljs b/env/devcards/src/cljs/auto_web/devcards.cljs
deleted file mode 100644
index 1fcdcff..0000000
--- a/env/devcards/src/cljs/auto_web/devcards.cljs
+++ /dev/null
@@ -1,30 +0,0 @@
-(ns auto-web.devcards
- "Entry point for devcard app"
- (:require
- ["highlight.js" :as hljs]
- ["marked" :as marked]
- [devcards.core :as dc
- :include-macros true]))
-
-;; devcards uses global DevcardsSyntaxHighlighter and DevcardsMarked
-;; ex. https://github.com/bhauman/devcards/blob/master/src/devcards/util/markdown.cljs#L28
-;; therefore we need to define them
-(js/goog.exportSymbol "DevcardsSyntaxHighlighter" hljs)
-(js/goog.exportSymbol "DevcardsMarked" marked)
-
-(defn add-css-link!
- [href]
- (let [link (.createElement js/document "link")]
- (set! (.-rel link) "stylesheet")
- (set! (.-type link) "text/css")
- (set! (.-href link) href)
- (.appendChild (.-head js/document) link)))
-
-(defn ^:export init
- []
- (add-css-link! "/css/components.css")
- (add-css-link! "/css/w3_colors_flat.css")
- (add-css-link! "fontawesome/css/all.css")
- (add-css-link! "fontawesome/css/all.min.css")
- (add-css-link! "/css/w3_schools.css")
- (dc/start-devcard-ui!))
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c771834
--- /dev/null
+++ b/index.html
@@ -0,0 +1,2 @@
+
+shadow.test.browser
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 8934788..9c77641 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,1701 +1,1933 @@
{
- "name": "auto-web",
- "version": "0.0.1",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "auto-web",
- "version": "0.0.1",
- "license": "MIT",
- "dependencies": {
- "create-react-class": "15.6.3",
- "react": "16.13.1",
- "react-dom": "16.13.1"
- },
- "devDependencies": {
- "highlight.js": "^10.6.0",
- "marked": "^2.0.1",
- "react-highlight.js": "^1.0.7",
- "shadow-cljs": "^2.28.20",
- "source-map-support": "^0.5.21"
- }
- },
- "node_modules/asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
- "license": "MIT"
- },
- "node_modules/asn1.js": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
- "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "node_modules/asn1.js/node_modules/bn.js": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
- "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/assert": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz",
- "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "object.assign": "^4.1.4",
- "util": "^0.10.4"
- }
- },
- "node_modules/assert/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/assert/node_modules/util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "2.0.3"
- }
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "node_modules/browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/browserify-rsa": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz",
- "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^5.2.1",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.2.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/browserify-sign": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz",
- "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "bn.js": "^5.2.1",
- "browserify-rsa": "^4.1.0",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.5",
- "hash-base": "~3.0",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.7",
- "readable-stream": "^2.3.8",
- "safe-buffer": "^5.2.1"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pako": "~1.0.5"
- }
- },
- "node_modules/buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/cipher-base": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz",
- "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.4",
- "safe-buffer": "^5.2.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "node_modules/constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/core-js": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
- "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==",
- "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
- "license": "MIT"
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- }
- },
- "node_modules/create-ecdh/node_modules/bn.js": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
- "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "node_modules/create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "node_modules/create-react-class": {
- "version": "15.6.3",
- "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
- "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
- "license": "MIT",
- "dependencies": {
- "fbjs": "^0.8.9",
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
- }
- },
- "node_modules/crypto-browserify": {
- "version": "3.12.1",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz",
- "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "browserify-cipher": "^1.0.1",
- "browserify-sign": "^4.2.3",
- "create-ecdh": "^4.0.4",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "diffie-hellman": "^5.0.3",
- "hash-base": "~3.0.4",
- "inherits": "^2.0.4",
- "pbkdf2": "^3.1.2",
- "public-encrypt": "^4.0.3",
- "randombytes": "^2.1.0",
- "randomfill": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/des.js": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
- "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "node_modules/diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- }
- },
- "node_modules/diffie-hellman/node_modules/bn.js": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
- "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4",
- "npm": ">=1.2"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/elliptic": {
- "version": "6.6.1",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
- "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
- "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "license": "MIT",
- "dependencies": {
- "iconv-lite": "^0.6.2"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/fbjs": {
- "version": "0.8.18",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz",
- "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==",
- "license": "MIT",
- "dependencies": {
- "core-js": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.30"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hash-base": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz",
- "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.4",
- "safe-buffer": "^5.2.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/highlight.js": {
- "version": "10.7.3",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
- "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/isomorphic-fetch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
- "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==",
- "license": "MIT",
- "dependencies": {
- "node-fetch": "^1.0.1",
- "whatwg-fetch": ">=0.10.0"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "license": "MIT"
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/marked": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz",
- "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "marked": "bin/marked"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "bin": {
- "miller-rabin": "bin/miller-rabin"
- }
- },
- "node_modules/miller-rabin/node_modules/bn.js": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
- "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-fetch": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
- "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
- "license": "MIT",
- "dependencies": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
- }
- },
- "node_modules/node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
- "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0",
- "has-symbols": "^1.1.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true,
- "license": "(MIT AND Zlib)"
- },
- "node_modules/parse-asn1": {
- "version": "5.1.7",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz",
- "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "asn1.js": "^4.10.1",
- "browserify-aes": "^1.2.0",
- "evp_bytestokey": "^1.0.3",
- "hash-base": "~3.0",
- "pbkdf2": "^3.1.2",
- "safe-buffer": "^5.2.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "license": "MIT",
- "dependencies": {
- "asap": "~2.0.3"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/public-encrypt/node_modules/bn.js": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz",
- "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/qs": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
- "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/react": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
- "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
- "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.19.1"
- },
- "peerDependencies": {
- "react": "^16.13.1"
- }
- },
- "node_modules/react-highlight.js": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/react-highlight.js/-/react-highlight.js-1.0.7.tgz",
- "integrity": "sha512-OVPKnV0ZvU+V//HExwbV8M9CWy49Eo/9y9pBN2OsNWUFPN6dE4YZBLmJW/5sM2DxI5v/QQLyxOnTnSSfGCP+9Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "highlight.js": "^9.3.0",
- "prop-types": "^15.6.0"
- },
- "peerDependencies": {
- "react": "^0.14.0 || ^15.0.0 || ^16.0.0",
- "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0"
- }
- },
- "node_modules/react-highlight.js/node_modules/highlight.js": {
- "version": "9.18.5",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz",
- "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==",
- "deprecated": "Support has ended for 9.x series. Upgrade to @latest",
- "dev": true,
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "license": "MIT"
- },
- "node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/readable-stream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/readable-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/readline-sync": {
- "version": "1.4.10",
- "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz",
- "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "license": "MIT"
- },
- "node_modules/scheduler": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
- "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
- "license": "MIT"
- },
- "node_modules/sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "license": "(MIT AND BSD-3-Clause)",
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- },
- "bin": {
- "sha.js": "bin.js"
- }
- },
- "node_modules/shadow-cljs": {
- "version": "2.28.23",
- "resolved": "https://registry.npmjs.org/shadow-cljs/-/shadow-cljs-2.28.23.tgz",
- "integrity": "sha512-SM7LeLctZLLCm6Y3NxWOH4GvHqHDZ6Jz9bUgfpJrk1jMADqIp3rliD6Rrd12gLX2b9/oEh6UyD7X+yw6O1++sw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "node-libs-browser": "^2.2.1",
- "readline-sync": "^1.4.7",
- "shadow-cljs-jar": "1.3.4",
- "source-map-support": "^0.4.15",
- "which": "^1.3.1",
- "ws": "^7.4.6"
- },
- "bin": {
- "shadow-cljs": "cli/runner.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/shadow-cljs-jar": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/shadow-cljs-jar/-/shadow-cljs-jar-1.3.4.tgz",
- "integrity": "sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/shadow-cljs/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shadow-cljs/node_modules/source-map-support": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
- "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "source-map": "^0.5.6"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "node_modules/stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "setimmediate": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/ua-parser-js": {
- "version": "0.7.40",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz",
- "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/ua-parser-js"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/faisalman"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/faisalman"
- }
- ],
- "license": "MIT",
- "bin": {
- "ua-parser-js": "script/cli.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/url": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
- "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "punycode": "^1.4.1",
- "qs": "^6.12.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "2.0.3"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/util/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/whatwg-fetch": {
- "version": "3.6.20",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
- "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==",
- "license": "MIT"
- },
- "node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
+ "name": "auto-web",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "auto-web",
+ "version": "1.0.0",
+ "dependencies": {
+ "create-react-class": "^15.7.0",
+ "highlight.js": "^11.11.1",
+ "marked": "^16.4.1",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "snabbdom": "3.5.1"
+ },
+ "devDependencies": {
+ "shadow-cljs": "^3.2.1",
+ "stylelint-config-standard": "^39.0.1"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@cacheable/memoize": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@cacheable/memoize/-/memoize-2.0.3.tgz",
+ "integrity": "sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@cacheable/utils": "^2.0.3"
+ }
+ },
+ "node_modules/@cacheable/memory": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.4.tgz",
+ "integrity": "sha512-cCmJKCKlT1t7hNBI1+gFCwmKFd9I4pS3zqBeNGXTSODnpa0EeDmORHY8oEMTuozfdg3cgsVh8ojLaPYb6eC7Cg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@cacheable/utils": "^2.2.0",
+ "@keyv/bigmap": "^1.1.0",
+ "hookified": "^1.12.2",
+ "keyv": "^5.5.3"
+ }
+ },
+ "node_modules/@cacheable/utils": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.2.0.tgz",
+ "integrity": "sha512-7xaQayO3msdVcxXLYcLU5wDqJBNdQcPPPHr6mdTEIQI7N7TbtSVVTpWOTfjyhg0L6AQwQdq7miKdWtTDBoBldQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "keyv": "^5.5.3"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
+ "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
+ "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/media-query-list-parser": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz",
+ "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/selector-specificity": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
+ "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.0.0"
+ }
+ },
+ "node_modules/@dual-bundle/import-meta-resolve": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz",
+ "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/JounQin"
+ }
+ },
+ "node_modules/@keyv/bigmap": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.1.0.tgz",
+ "integrity": "sha512-MX7XIUNwVRK+hjZcAbNJ0Z8DREo+Weu9vinBOjGU1thEi9F6vPhICzBbk4CCf3eEefKRz7n6TfZXwUFZTSgj8Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "hookified": "^1.12.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "keyv": "^5.5.3"
+ }
+ },
+ "node_modules/@keyv/serialize": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
+ "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0",
+ "peer": true
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cacheable": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.1.1.tgz",
+ "integrity": "sha512-LmF4AXiSNdiRbI2UjH8pAp9NIXxeQsTotpEaegPiDcnN0YPygDJDV3l/Urc0mL72JWdATEorKqIHEx55nDlONg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@cacheable/memoize": "^2.0.3",
+ "@cacheable/memory": "^2.0.3",
+ "@cacheable/utils": "^2.1.0",
+ "hookified": "^1.12.2",
+ "keyv": "^5.5.3",
+ "qified": "^0.5.0"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/colord": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/cosmiconfig": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/create-react-class": {
+ "version": "15.7.0",
+ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz",
+ "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "node_modules/css-functions-list": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+ "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12 || >=16"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "mdn-data": "2.12.2",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 4.9.1"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.4.tgz",
+ "integrity": "sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "flat-cache": "^6.1.13"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "6.1.18",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.18.tgz",
+ "integrity": "sha512-JUPnFgHMuAVmLmoH9/zoZ6RHOt5n9NlUw/sDXsTbROJ2SFoS2DS4s+swAV6UTeTbGH/CAsZIE6M8TaG/3jVxgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cacheable": "^2.1.0",
+ "flatted": "^3.3.3",
+ "hookified": "^1.12.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "global-prefix": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix/node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/global-prefix/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby/node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/globjoin": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "11.11.1",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
+ "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/hookified": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.12.2.tgz",
+ "integrity": "sha512-aokUX1VdTpI0DUsndvW+OiwmBpKCu/NgRsSSkuSY0zq8PY6Q6a+lmOfAFDXAAOtBqJELvcWY9L1EVtzjbQcMdg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/html-tags": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
+ "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/keyv": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.3.tgz",
+ "integrity": "sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@keyv/serialize": "^1.1.1"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/known-css-properties": {
+ "version": "0.37.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz",
+ "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/marked": {
+ "version": "16.4.1",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.1.tgz",
+ "integrity": "sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==",
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/mathml-tag-names": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+ "dev": true,
+ "license": "CC0-1.0",
+ "peer": true
+ },
+ "node_modules/meow": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-resolve-nested-selector": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz",
+ "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/postcss-safe-parser": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+ "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.31"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/qified": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/qified/-/qified-0.5.1.tgz",
+ "integrity": "sha512-+BtFN3dCP+IaFA6IYNOu/f/uK1B8xD2QWyOeCse0rjtAebBmkzgd2d1OAXi3ikAzJMIBSdzZDNZ3wZKEUDQs5w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "hookified": "^1.12.2"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/readline-sync": {
+ "version": "1.4.10",
+ "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz",
+ "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/shadow-cljs": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/shadow-cljs/-/shadow-cljs-3.2.1.tgz",
+ "integrity": "sha512-xsTSHGUBGZqotbjdKTbKUuPaYoj41ozMPbylr0aQNHvpG+TEner7YTALPdthNGUsIseE+U7kNHV9HNTfRXc/Zw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "process": "^0.11.10",
+ "readline-sync": "^1.4.10",
+ "shadow-cljs-jar": "1.3.4",
+ "source-map-support": "^0.5.21",
+ "which": "^5.0.0",
+ "ws": "^8.18.1"
+ },
+ "bin": {
+ "shadow-cljs": "cli/runner.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/shadow-cljs-jar": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/shadow-cljs-jar/-/shadow-cljs-jar-1.3.4.tgz",
+ "integrity": "sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/snabbdom": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.5.1.tgz",
+ "integrity": "sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stylelint": {
+ "version": "16.25.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.25.0.tgz",
+ "integrity": "sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "@csstools/media-query-list-parser": "^4.0.3",
+ "@csstools/selector-specificity": "^5.0.0",
+ "@dual-bundle/import-meta-resolve": "^4.2.1",
+ "balanced-match": "^2.0.0",
+ "colord": "^2.9.3",
+ "cosmiconfig": "^9.0.0",
+ "css-functions-list": "^3.2.3",
+ "css-tree": "^3.1.0",
+ "debug": "^4.4.3",
+ "fast-glob": "^3.3.3",
+ "fastest-levenshtein": "^1.0.16",
+ "file-entry-cache": "^10.1.4",
+ "global-modules": "^2.0.0",
+ "globby": "^11.1.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.3.1",
+ "ignore": "^7.0.5",
+ "imurmurhash": "^0.1.4",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.37.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^13.2.0",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.5.6",
+ "postcss-resolve-nested-selector": "^0.1.6",
+ "postcss-safe-parser": "^7.0.1",
+ "postcss-selector-parser": "^7.1.0",
+ "postcss-value-parser": "^4.2.0",
+ "resolve-from": "^5.0.0",
+ "string-width": "^4.2.3",
+ "supports-hyperlinks": "^3.2.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.9.0",
+ "write-file-atomic": "^5.0.1"
+ },
+ "bin": {
+ "stylelint": "bin/stylelint.mjs"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ }
+ },
+ "node_modules/stylelint-config-recommended": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-17.0.0.tgz",
+ "integrity": "sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^16.23.0"
+ }
+ },
+ "node_modules/stylelint-config-standard": {
+ "version": "39.0.1",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-39.0.1.tgz",
+ "integrity": "sha512-b7Fja59EYHRNOTa3aXiuWnhUWXFU2Nfg6h61bLfAb5GS5fX3LMUD0U5t4S8N/4tpHQg3Acs2UVPR9jy2l1g/3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "stylelint-config-recommended": "^17.0.0"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^16.23.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-hyperlinks": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz",
+ "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1"
+ }
+ },
+ "node_modules/svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/table": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
+ "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/which": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+ "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^3.1.1"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/write-file-atomic": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.18.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
}
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4"
- }
}
- }
}
diff --git a/package.json b/package.json
index afd3954..285a697 100644
--- a/package.json
+++ b/package.json
@@ -1,23 +1,19 @@
{
- "name": "auto-web",
- "repository": "https://github.com/hephaistox/auto-web",
- "license": "MIT",
- "scripts": {},
- "private": true,
- "description": "`auto-web` are common features for all optimization technologies",
- "version": "0.0.1",
- "author": "Hephaistox ",
- "workspaces": [],
- "devDependencies": {
- "highlight.js": "^10.6.0",
- "marked": "^2.0.1",
- "react-highlight.js": "^1.0.7",
- "shadow-cljs": "^2.28.20",
- "source-map-support": "^0.5.21"
- },
- "dependencies": {
- "create-react-class": "15.6.3",
- "react": "16.13.1",
- "react-dom": "16.13.1"
- }
+ "name": "auto-web",
+ "repository": "https://github.com/hephaistox/auto_web",
+ "licence": "MIT",
+ "version": "1.0.0",
+ "author": "Hephaistox ",
+ "dependencies": {
+ "create-react-class": "^15.7.0",
+ "highlight.js": "^11.11.1",
+ "marked": "^16.4.1",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "snabbdom": "3.5.1"
+ },
+ "devDependencies": {
+ "shadow-cljs": "^3.2.1",
+ "stylelint-config-standard": "^39.0.1"
+ }
}
diff --git a/resources/public/images/logos/hephaistox_logo.png b/resources/public/images/logos/hephaistox_logo.png
deleted file mode 100644
index 4ede511..0000000
Binary files a/resources/public/images/logos/hephaistox_logo.png and /dev/null differ
diff --git a/shadow-cljs.edn b/shadow-cljs.edn
index 9f50ba1..c5027dc 100644
--- a/shadow-cljs.edn
+++ b/shadow-cljs.edn
@@ -1,26 +1,21 @@
-{:builds
- {:browser-test {:ns-regexp "-test$"
- :runner-ns shadow.test.browser
- :target :browser-test
- :test-dir "target/browser-test"}
- :devcards {:target :browser-test
- :ns-regexp "-cards$"
- :test-dir "target/devcards"
- :runner-ns auto-web.devcards ; must have init fn to run
- :devtools {:http-root "env/devcards/resources"
- :index-page "cards.html"}
- :compiler-options {:devcards true
- :output-feature-set :es8}
- :js-options {:resolve {"devcards-marked" {:require "marked"
- :target :npm}
- "devcards-syntax-highlighter" {:require "highlight.js"
- :target :npm}}}}
- :ltest {:autorun true
- :ns-regexp "-test$"
- :output-to "target/ltest.js"
- :target :node-test}}
+{:builds {:cljs-browser-test {:ns-regexp "-test$"
+ :runner-ns shadow.test.browser
+ :target :browser-test
+ :test-dir "target/browser-test"}
+ :cljs-node-test {:autorun true
+ :ns-regexp "-test$"
+ :output-to "target/cljs-node-test.js"
+ :target :node-test}
+ :portfolio {:asset-path "/"
+ :modules {:main {:init-fn auto-web.portfolio/init}}
+ :output-dir "target/portfolio"
+ :target :browser}}
:deps {:aliases [:cljs-deps]}
- :dev-http {3001 ["target/devcards" "resources/public" "env/devcards/resources"]
+ :dev-http {3002 ["public"
+ "classpath:public"
+ "auto_web_cljs/env/portfolio/resources"
+ "target/portfolio"
+ "auto_web_clj/resources/public/"]
9606 ["target/browser-test"]}
:http {:port 9506}
:nrepl {:port 7106}}
diff --git a/src/cljc/auto_web/components/button.cljc b/src/cljc/auto_web/components/button.cljc
deleted file mode 100644
index 02e78be..0000000
--- a/src/cljc/auto_web/components/button.cljc
+++ /dev/null
@@ -1,18 +0,0 @@
-(ns auto-web.components.button
- "Buttons"
- (:require
- [auto-web.components.link :refer [clink]]))
-
-(defn cbutton* [opts text link] (clink {} link [:button.w3-button opts text]))
-
-(defn cbutton
- "A button from a `link`"
- [opts text link]
- (if (nil? link) (cbutton* {} opts text) (cbutton* opts text link)))
-
-(defn clink-button* [opts text link] (clink (update opts :class #(str "w3-button " %)) link text))
-
-(defn clink-button
- "A link visually like a button"
- [opts text link]
- (if (map? opts) (clink-button* opts text link) (clink-button* {} opts text)))
diff --git a/src/cljc/auto_web/components/link.cljc b/src/cljc/auto_web/components/link.cljc
deleted file mode 100644
index abc9545..0000000
--- a/src/cljc/auto_web/components/link.cljc
+++ /dev/null
@@ -1,56 +0,0 @@
-(ns auto-web.components.link
- "A link is made of
- * `url`
- * `target`
- * `link-id`
- * `download?`
- * `ping`
- * `skip-test?` is optional and used by test only to check."
- (:require
- [auto-web.page.builder :refer [merge-opts]]))
-
-(defn link-schema
- [_link]
- [:map
- [:url :string]
- [:target {:optional true}
- [:enum "blank"]]
- [:link-id :keyword]
- [:download? {:optional true}
- :boolean]
- [:ping {:optional true}
- :string]
- [:skip-test? {:optional true}
- :boolean]])
-
-(defn- link-opts
- "Options for an `a` html tag"
- [{:keys [url target link-id download? ping]}]
- (cond-> {:href url
- "data-link-name" (some-> link-id
- name)}
- ping (assoc :ping ping)
- target (assoc :target target)
- download? (assoc :download download?)
- download? (assoc-in [:style :cursor] "alias")))
-
-(defn clink
- "An hiccup `:a` tag to the [[auto-web.components.link]].
- `content` is what is wrapped by the `:a` tag."
- [opts link & content]
- [:div.w3-tooltip
- (vec (concat (cond
- link [:a (merge-opts (link-opts link) opts)]
- opts [:span opts])
- content))
- (when (:download? link)
- [:div.w3-tag.w3-text {:style {:position "absolute"
- :left "0"
- :bottom "1.5em"}}
- "Download"])])
-
-(defn cspan-link
- "An hiccup `:a` tag to the [[auto-web.components.link]].
- `content` is what is wrapped by the `:a` tag."
- [opts link & content]
- [:a (merge-opts (link-opts link) (assoc-in opts [:style :text-decoration] "underline")) content])