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])