├── .clj-kondo
├── babashka
│ └── sci
│ │ ├── config.edn
│ │ └── sci
│ │ └── core.clj
├── cjohansen
│ └── dumdom
│ │ ├── config.edn
│ │ └── dumdom
│ │ └── defcomponent.clj
├── config.edn
├── funcool
│ └── promesa
│ │ └── config.edn
├── hooks.clj
├── metosin
│ ├── malli-types-clj
│ │ └── config.edn
│ └── malli
│ │ └── config.edn
├── no.cjohansen
│ └── portfolio
│ │ ├── config.edn
│ │ └── portfolio
│ │ └── defscene.clj
├── reagent
│ └── reagent
│ │ └── config.edn
├── rewrite-clj
│ └── rewrite-clj
│ │ └── config.edn
└── taoensso
│ └── encore
│ ├── config.edn
│ └── taoensso
│ └── encore.clj
├── .cljfmt.edn
├── .editorconfig
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── pull_request_template.md
└── workflows
│ ├── cla.yml
│ ├── clj-holmes.yml
│ ├── demo.yml
│ ├── dependencies.yml
│ ├── sponsors.yml
│ └── studio.yml
├── .gitignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── cla.json
├── deps.edn
├── karma.conf.js
├── package-lock.json
├── package.json
├── portfolio
├── resources
│ └── public
│ │ ├── .gitignore
│ │ └── index.html
└── src
│ ├── pages
│ ├── components.cljs
│ ├── icons.cljs
│ └── sections.cljs
│ └── portfolio.cljs
├── resources
└── public
│ ├── icons
│ ├── LICENSE
│ ├── README.md
│ ├── a11y.svg
│ ├── android_head.svg
│ ├── animation.svg
│ ├── arc.svg
│ ├── arrow-minimize.svg
│ ├── bezier-curve.svg
│ ├── blob.svg
│ ├── bring-forward.svg
│ ├── bring-front.svg
│ ├── brush.svg
│ ├── bug.svg
│ ├── checkmark.svg
│ ├── chemical-element.svg
│ ├── chevron-down.svg
│ ├── chevron-left.svg
│ ├── chevron-right.svg
│ ├── chevron-up.svg
│ ├── chrome.svg
│ ├── circle-tool.svg
│ ├── circle.svg
│ ├── code.svg
│ ├── command.svg
│ ├── commit.svg
│ ├── copy.svg
│ ├── cut.svg
│ ├── dark.svg
│ ├── degrees.svg
│ ├── delete.svg
│ ├── deselect-all.svg
│ ├── distribute-spacing-horizontal.svg
│ ├── distribute-spacing-vertical.svg
│ ├── divide.svg
│ ├── dot.svg
│ ├── download.svg
│ ├── earth.svg
│ ├── edge.svg
│ ├── edit.svg
│ ├── ellipse-tool.svg
│ ├── ellipse.svg
│ ├── ellipsis-h.svg
│ ├── ellipsis-v.svg
│ ├── exclude.svg
│ ├── exit.svg
│ ├── export.svg
│ ├── eye-closed.svg
│ ├── eye-dropper.svg
│ ├── eye.svg
│ ├── file.svg
│ ├── fill.svg
│ ├── firefox.svg
│ ├── flip-horizontal.svg
│ ├── flip-vertical.svg
│ ├── focus.svg
│ ├── folder-plus.svg
│ ├── folder.svg
│ ├── go-to-end.svg
│ ├── go-to-start.svg
│ ├── grid.svg
│ ├── group.svg
│ ├── hand.svg
│ ├── history.svg
│ ├── icon-template.svg
│ ├── ie.svg
│ ├── image.svg
│ ├── import.svg
│ ├── info.svg
│ ├── intersect.svg
│ ├── invert-selection.svg
│ ├── lgpl.svg
│ ├── light.svg
│ ├── line-tool.svg
│ ├── line.svg
│ ├── linecap-butt.svg
│ ├── linecap-round.svg
│ ├── linecap-square.svg
│ ├── list.svg
│ ├── lock.svg
│ ├── magnet.svg
│ ├── magnifier.svg
│ ├── minus.svg
│ ├── objects-align-bottom.svg
│ ├── objects-align-center-horizontal.svg
│ ├── objects-align-center-vertical.svg
│ ├── objects-align-left.svg
│ ├── objects-align-right.svg
│ ├── objects-align-top.svg
│ ├── oculus.svg
│ ├── opera.svg
│ ├── page-plus.svg
│ ├── page.svg
│ ├── paste.svg
│ ├── pause.svg
│ ├── pencil.svg
│ ├── play.svg
│ ├── plus.svg
│ ├── pointer.svg
│ ├── polygon-tool.svg
│ ├── polygon.svg
│ ├── polyline.svg
│ ├── printer.svg
│ ├── properties.svg
│ ├── rectangle-tool.svg
│ ├── rectangle.svg
│ ├── redo.svg
│ ├── refresh.svg
│ ├── rotate-clockwise.svg
│ ├── rotate-counterclockwise.svg
│ ├── ruler-combined.svg
│ ├── ruler-triangle.svg
│ ├── safari.svg
│ ├── samsunginternet_android.svg
│ ├── save-as.svg
│ ├── save.svg
│ ├── select-all.svg
│ ├── select-same.svg
│ ├── send-back.svg
│ ├── send-backward.svg
│ ├── shell.svg
│ ├── spinner.svg
│ ├── square+plus.svg
│ ├── square-minus.svg
│ ├── stop.svg
│ ├── subtract.svg
│ ├── svg.svg
│ ├── swap-horizontal.svg
│ ├── swap-vertical.svg
│ ├── system.svg
│ ├── text.svg
│ ├── timeline.svg
│ ├── times.svg
│ ├── tree.svg
│ ├── triangle.svg
│ ├── undo.svg
│ ├── ungroup.svg
│ ├── unite.svg
│ ├── unlock.svg
│ ├── warning.svg
│ ├── webview_android.svg
│ ├── window-close.svg
│ ├── window-maximize.svg
│ ├── window-minimize.svg
│ ├── window-restore.svg
│ ├── zoom-in.svg
│ └── zoom-out.svg
│ ├── img
│ ├── banner.svg
│ ├── favicon.png
│ ├── icon-no-bg.svg
│ ├── icon.png
│ └── icon.svg
│ ├── index.html
│ └── loading.html
├── shadow-cljs.edn
├── src
├── config.cljs
├── dev.cljs
├── electron
│ ├── file.cljs
│ ├── main.cljs
│ └── preload.cljs
├── lang
│ ├── el-GR.edn
│ └── en-US.edn
├── renderer
│ ├── animations.css
│ ├── app
│ │ ├── db.cljs
│ │ ├── effects.cljs
│ │ ├── events.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── attribute
│ │ ├── hierarchy.cljs
│ │ ├── impl
│ │ │ ├── angle.cljs
│ │ │ ├── clock.cljs
│ │ │ ├── color.cljs
│ │ │ ├── core.cljs
│ │ │ ├── d.cljs
│ │ │ ├── font_family.cljs
│ │ │ ├── font_size.cljs
│ │ │ ├── font_weight.cljs
│ │ │ ├── href.cljs
│ │ │ ├── length.cljs
│ │ │ ├── overflow.cljs
│ │ │ ├── points.cljs
│ │ │ ├── range.cljs
│ │ │ ├── stroke_linecap.cljs
│ │ │ ├── stroke_linejoin.cljs
│ │ │ ├── style.cljs
│ │ │ └── transform.cljs
│ │ └── views.cljs
│ ├── components.css
│ ├── core.cljs
│ ├── dialog
│ │ ├── db.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── document
│ │ ├── db.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── effects.cljs
│ ├── element
│ │ ├── db.cljs
│ │ ├── effects.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── hierarchy.cljs
│ │ ├── impl
│ │ │ ├── animation
│ │ │ │ ├── animate.cljs
│ │ │ │ ├── animate_motion.cljs
│ │ │ │ ├── animate_transform.cljs
│ │ │ │ └── core.cljs
│ │ │ ├── box.cljs
│ │ │ ├── container
│ │ │ │ ├── canvas.cljs
│ │ │ │ ├── core.cljs
│ │ │ │ ├── group.cljs
│ │ │ │ └── svg.cljs
│ │ │ ├── core.cljs
│ │ │ ├── custom
│ │ │ │ ├── blob.cljs
│ │ │ │ ├── brush.cljs
│ │ │ │ ├── core.cljs
│ │ │ │ └── measure.cljs
│ │ │ ├── renderable.cljs
│ │ │ ├── shape
│ │ │ │ ├── circle.cljs
│ │ │ │ ├── core.cljs
│ │ │ │ ├── ellipse.cljs
│ │ │ │ ├── image.cljs
│ │ │ │ ├── line.cljs
│ │ │ │ ├── path.cljs
│ │ │ │ ├── polygon.cljs
│ │ │ │ ├── polyline.cljs
│ │ │ │ ├── polyshape.cljs
│ │ │ │ └── rect.cljs
│ │ │ └── text.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── event
│ │ ├── db.cljs
│ │ ├── effects.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ └── impl
│ │ │ ├── drag.cljs
│ │ │ ├── keyboard.cljs
│ │ │ ├── pointer.cljs
│ │ │ └── wheel.cljs
│ ├── events.cljs
│ ├── frame
│ │ ├── README.md
│ │ ├── db.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── history
│ │ ├── README.md
│ │ ├── db.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── main.css
│ ├── menubar
│ │ ├── events.cljs
│ │ ├── filters.cljs
│ │ ├── styles.css
│ │ └── views.cljs
│ ├── notification
│ │ ├── db.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── overrides.css
│ ├── reepl
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── codemirror.cljs
│ │ ├── db.cljs
│ │ ├── handlers.cljs
│ │ ├── replumb.cljs
│ │ ├── show_devtools.cljs
│ │ ├── show_function.cljs
│ │ ├── show_value.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── ruler
│ │ ├── db.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── snap
│ │ ├── db.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── theme
│ │ ├── db.cljs
│ │ ├── effects.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── styles.css
│ │ └── subs.cljs
│ ├── timeline
│ │ ├── db.cljs
│ │ ├── effects.cljs
│ │ ├── events.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── tool
│ │ ├── db.cljs
│ │ ├── events.cljs
│ │ ├── handlers.cljs
│ │ ├── hierarchy.cljs
│ │ ├── impl
│ │ │ ├── base
│ │ │ │ ├── core.cljs
│ │ │ │ ├── edit.cljs
│ │ │ │ ├── pan.cljs
│ │ │ │ ├── transform.cljs
│ │ │ │ └── zoom.cljs
│ │ │ ├── core.cljs
│ │ │ ├── draw
│ │ │ │ ├── brush.cljs
│ │ │ │ ├── core.cljs
│ │ │ │ └── pen.cljs
│ │ │ ├── element
│ │ │ │ ├── circle.cljs
│ │ │ │ ├── core.cljs
│ │ │ │ ├── ellipse.cljs
│ │ │ │ ├── image.cljs
│ │ │ │ ├── line.cljs
│ │ │ │ ├── polygon.cljs
│ │ │ │ ├── polyline.cljs
│ │ │ │ ├── polyshape.cljs
│ │ │ │ ├── rect.cljs
│ │ │ │ ├── svg.cljs
│ │ │ │ └── text.cljs
│ │ │ ├── extension
│ │ │ │ ├── blob.cljs
│ │ │ │ └── core.cljs
│ │ │ └── misc
│ │ │ │ ├── core.cljs
│ │ │ │ ├── dropper.cljs
│ │ │ │ ├── fill.cljs
│ │ │ │ └── measure.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ ├── toolbar
│ │ ├── object.cljs
│ │ ├── status.cljs
│ │ ├── tools.cljs
│ │ └── views.cljs
│ ├── tree
│ │ ├── effects.cljs
│ │ ├── events.cljs
│ │ └── views.cljs
│ ├── utilities.css
│ ├── utils
│ │ ├── attribute.cljs
│ │ ├── bounds.cljs
│ │ ├── compatibility.cljs
│ │ ├── dom.cljs
│ │ ├── element.cljs
│ │ ├── error.cljs
│ │ ├── extra.cljs
│ │ ├── hiccup.cljs
│ │ ├── i18n.cljs
│ │ ├── length.cljs
│ │ ├── map.cljs
│ │ ├── math.cljs
│ │ ├── migration.cljs
│ │ ├── path.cljs
│ │ ├── svg.cljs
│ │ ├── unit.cljs
│ │ └── vec.cljs
│ ├── views.cljs
│ ├── window
│ │ ├── db.cljs
│ │ ├── effects.cljs
│ │ ├── events.cljs
│ │ ├── subs.cljs
│ │ └── views.cljs
│ └── worker
│ │ ├── effects.cljs
│ │ ├── events.cljs
│ │ └── subs.cljs
├── user.cljs
└── worker
│ └── core.cljs
├── test
├── app_test.cljs
├── benchmark.cljs
├── core_test.cljs
├── document_test.cljs
├── element_impl_test.cljs
├── element_test.cljs
├── frame_test.cljs
├── history_test.cljs
├── notification_test.cljs
├── theme_test.cljs
├── tool_test.cljs
├── utils
│ ├── attribute_test.cljs
│ ├── bounds_test.cljs
│ ├── compatibility_test.cljs
│ ├── element_test.cljs
│ ├── extra_test.cljs
│ ├── length_test.cljs
│ ├── map_test.cljs
│ ├── unit_test.cljs
│ └── vec_test.cljs
└── window_test.cljs
└── typos.toml
/.clj-kondo/babashka/sci/config.edn:
--------------------------------------------------------------------------------
1 | {:hooks {:macroexpand {sci.core/copy-ns sci.core/copy-ns}}}
2 |
--------------------------------------------------------------------------------
/.clj-kondo/babashka/sci/sci/core.clj:
--------------------------------------------------------------------------------
1 | (ns sci.core)
2 |
3 | (defmacro copy-ns
4 | ([ns-sym sci-ns]
5 | `(copy-ns ~ns-sym ~sci-ns nil))
6 | ([ns-sym sci-ns opts]
7 | `[(quote ~ns-sym)
8 | ~sci-ns
9 | (quote ~opts)]))
10 |
--------------------------------------------------------------------------------
/.clj-kondo/cjohansen/dumdom/config.edn:
--------------------------------------------------------------------------------
1 | {:linters {:dumdom/component-options {:level :warning}}
2 | :hooks {:analyze-call {dumdom.core/defcomponent dumdom.defcomponent/defcomponent}}}
3 |
--------------------------------------------------------------------------------
/.clj-kondo/funcool/promesa/config.edn:
--------------------------------------------------------------------------------
1 | {:lint-as {promesa.core/-> clojure.core/->
2 | promesa.core/->> clojure.core/->>
3 | promesa.core/as-> clojure.core/as->
4 | promesa.core/let clojure.core/let
5 | promesa.core/plet clojure.core/let
6 | promesa.core/loop clojure.core/loop
7 | promesa.core/recur clojure.core/recur
8 | promesa.core/with-redefs clojure.core/with-redefs
9 | promesa.core/doseq clojure.core/doseq}}
10 |
--------------------------------------------------------------------------------
/.clj-kondo/hooks.clj:
--------------------------------------------------------------------------------
1 | (ns hooks
2 | (:require [clj-kondo.hooks-api :as api]))
3 |
4 | (defn ^:export => [{:keys [node]}]
5 | (let [[macro-sym name-node & schema-nodes] (:children node)
6 | name-with-meta (with-meta name-node {:clj-kondo/ignore-reference true})]
7 | {:node (api/list-node (list* macro-sym name-with-meta schema-nodes))}))
8 |
--------------------------------------------------------------------------------
/.clj-kondo/metosin/malli-types-clj/config.edn:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/.clj-kondo/metosin/malli/config.edn:
--------------------------------------------------------------------------------
1 | {:lint-as {malli.experimental/defn schema.core/defn}
2 | :linters {:unresolved-symbol {:exclude [(malli.core/=>)]}}}
3 |
--------------------------------------------------------------------------------
/.clj-kondo/no.cjohansen/portfolio/config.edn:
--------------------------------------------------------------------------------
1 | {:linters {:portfolio/component-options {:level :warning}}
2 | :hooks {:analyze-call {portfolio.dom/defscene portfolio.defscene/defscene
3 | portfolio.dumdom/defscene portfolio.defscene/defscene
4 | portfolio.html/defscene portfolio.defscene/defscene
5 | portfolio.react/defscene portfolio.defscene/defscene
6 | portfolio.react-18/defscene portfolio.defscene/defscene
7 | portfolio.reagent/defscene portfolio.defscene/defscene
8 | portfolio.reagent-18/defscene portfolio.defscene/defscene
9 | portfolio.replicant/defscene portfolio.defscene/defscene
10 | portfolio.rum/defscene portfolio.defscene/defscene}}}
11 |
--------------------------------------------------------------------------------
/.clj-kondo/reagent/reagent/config.edn:
--------------------------------------------------------------------------------
1 | {:lint-as {reagent.core/with-let clojure.core/let}}
2 |
--------------------------------------------------------------------------------
/.clj-kondo/rewrite-clj/rewrite-clj/config.edn:
--------------------------------------------------------------------------------
1 | {:lint-as
2 | {rewrite-clj.zip/subedit-> clojure.core/->
3 | rewrite-clj.zip/subedit->> clojure.core/->>
4 | rewrite-clj.zip/edit-> clojure.core/->
5 | rewrite-clj.zip/edit->> clojure.core/->>}}
6 |
--------------------------------------------------------------------------------
/.clj-kondo/taoensso/encore/config.edn:
--------------------------------------------------------------------------------
1 | {:hooks
2 | {:analyze-call
3 | {taoensso.encore/defalias taoensso.encore/defalias
4 | taoensso.encore/defn-cached taoensso.encore/defn-cached}}}
5 |
--------------------------------------------------------------------------------
/.clj-kondo/taoensso/encore/taoensso/encore.clj:
--------------------------------------------------------------------------------
1 | (ns taoensso.encore
2 | "I don't personally use clj-kondo, so these hooks are
3 | kindly authored and maintained by contributors.
4 | PRs very welcome! - Peter Taoussanis"
5 | (:require
6 | [clj-kondo.hooks-api :as hooks]))
7 |
8 | (defn defalias
9 | [{:keys [node]}]
10 | (let [[sym-raw src-raw] (rest (:children node))
11 | src (if src-raw src-raw sym-raw)
12 | sym
13 | (if src-raw
14 | sym-raw
15 | (symbol (name (hooks/sexpr src))))]
16 |
17 | {:node
18 | (with-meta
19 | (hooks/list-node
20 | [(hooks/token-node 'def)
21 | (hooks/token-node (hooks/sexpr sym))
22 | (hooks/token-node (hooks/sexpr src))])
23 | (meta src))}))
24 |
25 | (defn defn-cached
26 | [{:keys [node] :as x}]
27 | (let [[sym _opts binding-vec & body] (rest (:children node))]
28 | {:node
29 | (hooks/list-node
30 | (list
31 | (hooks/token-node 'def)
32 | sym
33 | (hooks/list-node
34 | (list*
35 | (hooks/token-node 'fn)
36 | binding-vec
37 | body))))}))
38 |
--------------------------------------------------------------------------------
/.cljfmt.edn:
--------------------------------------------------------------------------------
1 | {:sort-ns-references? true}
2 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | end_of_line = lf
5 | charset = utf-8
6 | trim_trailing_whitespace = true
7 | insert_final_newline = true
8 |
9 | [*{clj,cljc,cljs,js,edn,css}]
10 | indent_style = space
11 | indent_size = 2
12 |
13 | [*.md]
14 | trim_trailing_whitespace = false
15 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [repath-project]
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **System (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Version [e.g. 22]
29 |
30 | **Additional context**
31 | Add any other context about the problem here.
32 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | # Description
2 |
3 | Please include a summary of the changes and the related issue. Please also include relevant motivation and context.
4 |
5 | Fixes # (issue)
6 |
7 | ## Type of change
8 |
9 | Please delete options that are not relevant.
10 |
11 | - [ ] Bug fix (non-breaking change which fixes an issue)
12 | - [ ] New feature (non-breaking change which adds functionality)
13 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
14 | - [ ] This change requires a documentation update
15 |
16 | # How Has This Been Tested?
17 |
18 | Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
19 |
20 | - [ ] Test A
21 | - [ ] Test B
22 |
23 | **Test Configuration**:
24 | * Firmware version:
25 | * Hardware:
26 | * Toolchain:
27 | * SDK:
28 |
29 | # Checklist:
30 |
31 | - [ ] My code follows the style guidelines of this project
32 | - [ ] I have performed a self-review of my code
33 | - [ ] I have commented my code, particularly in hard-to-understand areas
34 | - [ ] I have made corresponding changes to the documentation
35 | - [ ] My changes generate no new warnings
36 | - [ ] I have added tests that prove my fix is effective or that my feature works
37 | - [ ] New and existing unit tests pass locally with my changes
38 | - [ ] Any dependent changes have been merged and published in downstream modules
39 |
--------------------------------------------------------------------------------
/.github/workflows/clj-holmes.yml:
--------------------------------------------------------------------------------
1 | # This workflow uses actions that are not certified by GitHub.
2 | # They are provided by a third-party and are governed by
3 | # separate terms of service, privacy policy, and support
4 | # documentation.
5 |
6 | name: Security testing
7 |
8 | on:
9 | push:
10 | branches: [ main ]
11 | pull_request:
12 | # The branches below must be a subset of the branches above
13 | branches: [ main ]
14 | schedule:
15 | - cron: '40 14 * * 6'
16 |
17 | permissions:
18 | contents: read
19 |
20 | jobs:
21 | clj-holmes:
22 | name: Run clj-holmes scanning
23 | runs-on: ubuntu-latest
24 | permissions:
25 | contents: read
26 | security-events: write
27 | steps:
28 | - name: Checkout code
29 | uses: actions/checkout@v4
30 | with:
31 | persist-credentials: false
32 |
33 | - name: Scan code
34 | uses: clj-holmes/clj-holmes-action@53daa4da4ff495cccf791e4ba4222a8317ddae9e
35 | with:
36 | rules-repository: 'git://clj-holmes/clj-holmes-rules#main'
37 | output-type: 'sarif'
38 | output-file: 'clj-holmes-results.sarif'
39 | fail-on-result: 'false'
40 |
41 | - name: Upload analysis results to GitHub Security tab
42 | uses: github/codeql-action/upload-sarif@v3
43 | with:
44 | sarif_file: ${{github.workspace}}/clj-holmes-results.sarif
45 | wait-for-processing: true
46 |
--------------------------------------------------------------------------------
/.github/workflows/dependencies.yml:
--------------------------------------------------------------------------------
1 | name: Outdated dependencies
2 |
3 | on:
4 | push:
5 | schedule:
6 | - cron: '0 21 * * *'
7 |
8 | jobs:
9 | antq:
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 | - uses: actions/checkout@v4
14 | with:
15 | persist-credentials: false
16 | - uses: liquidz/antq-action@main
17 | with:
18 | excludes: 'org.clojure/tools.deps.alpha lambdaisland/deep-diff2'
19 |
--------------------------------------------------------------------------------
/.github/workflows/sponsors.yml:
--------------------------------------------------------------------------------
1 | name: Add GitHub Sponsors to Readme
2 |
3 | on:
4 | workflow_dispatch:
5 | schedule:
6 | - cron: 30 15 * * 0-6
7 |
8 | jobs:
9 | deploy:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout 🛎️
13 | uses: actions/checkout@v4
14 | with:
15 | persist-credentials: false
16 |
17 | - name: Generate Sponsors 💖
18 | uses: JamesIves/github-sponsors-readme-action@v1
19 | with:
20 | token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
21 | file: 'README.md'
22 |
23 | - name: Deploy to GitHub Pages 🚀
24 | uses: JamesIves/github-pages-deploy-action@v4
25 | with:
26 | branch: main
27 | folder: '.'
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | /.calva/
3 | /.cpcache/
4 | /.lsp/
5 | /.vscode/
6 | /resources/public/js/
7 | /resources/public/css/
8 | /resources/public/src/
9 | /resources/*.js
10 | /target/
11 | /*-init.clj
12 | /*.log
13 |
14 | # Node.js dependencies
15 | /node_modules/
16 |
17 | # shadow-cljs cache, port files
18 | /.shadow-cljs/
19 |
20 | # clj-kondo cache
21 | /.clj-kondo/.cache
22 |
23 | # Build
24 | /dist/
25 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Reporting a Vulnerability
4 |
5 | Please [open a security advisory](https://github.com/repath-project/repath-studio/security/advisories/new) or send a detailed mail to contact@repath.studio to report security vulnerabilities.
6 | Even when unsure whether the bug in question is an exploitable vulnerability, it is recommended to use the above methods and not discuss the issue anywhere else.
7 |
--------------------------------------------------------------------------------
/cla.json:
--------------------------------------------------------------------------------
1 | {
2 | "signedContributors": [
3 | {
4 | "name": "WonderlustKing",
5 | "id": 6639267,
6 | "comment_id": 1060054205,
7 | "created_at": "2022-03-06T22:46:20Z",
8 | "repoId": 374744219,
9 | "pullRequestNo": 32
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/portfolio/resources/public/.gitignore:
--------------------------------------------------------------------------------
1 | js
2 |
--------------------------------------------------------------------------------
/portfolio/resources/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Hello, Portfolio!
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/portfolio/src/pages/sections.cljs:
--------------------------------------------------------------------------------
1 | (ns pages.sections
2 | (:require
3 | [portfolio.reagent-18 :refer-macros [defscene]]
4 | [renderer.app.subs]
5 | [renderer.app.views :as app.views]))
6 |
7 | (defscene home
8 | :title "Home"
9 | :params (atom ["path/to/file/name.rps"])
10 | [store]
11 | [:div.flex.flex-col.h-dvh.overflow-hidden
12 | [app.views/home @store]])
13 |
--------------------------------------------------------------------------------
/portfolio/src/portfolio.cljs:
--------------------------------------------------------------------------------
1 | (ns portfolio
2 | (:require [pages.components]
3 | [pages.sections]
4 | [portfolio.ui :as ui]))
5 |
6 | (ui/start!
7 | {:config
8 | {:css-paths ["/main.css"]
9 | :background/options [{:id :light-mode
10 | :title "Light mode"
11 | :value {:background/background-color "#fff"
12 | :background/document-data {:theme "light"}}}
13 | {:id :dark-mode
14 | :title "Dark mode"
15 | :value {:background/background-color "#111"
16 | :background/document-data {:theme "dark"}}}]
17 | :background/default-option-id :dark-mode
18 | :viewport/defaults {:viewport/padding [0]
19 | :viewport/width "100%"
20 | :viewport/height "500px"}
21 | :canvas/gallery-defaults {:viewport/padding [0]
22 | :viewport/width "100%"
23 | :viewport/height 41}}})
24 |
25 | (defn ^:export init! [])
26 |
--------------------------------------------------------------------------------
/resources/public/icons/LICENSE:
--------------------------------------------------------------------------------
1 | # Brand Icons
2 |
3 | - android_head
4 | - chrome
5 | - chrome_android
6 | - edge
7 | - firefox
8 | - firefox_android
9 | - ie
10 | - oculus
11 | - opera
12 | - opera_android
13 | - safari
14 | - safari_ios
15 | - samsunginternet_android
16 | - webview_android
17 |
18 | All brand icons are trademarks of their respective owners.
19 | Brand icons should only be used to represent the company or product to which they refer.
20 | Please do not use brand logos for any purpose except to represent that particular brand or service.
21 |
--------------------------------------------------------------------------------
/resources/public/icons/a11y.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/android_head.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/animation.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/arc.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/bezier-curve.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/bring-forward.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/bring-front.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/checkmark.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/chemical-element.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/chevron-down.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/chevron-left.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/chevron-right.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/chevron-up.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/chrome.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/circle-tool.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/circle.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/code.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/commit.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/copy.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/cut.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/degrees.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/delete.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/deselect-all.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/distribute-spacing-horizontal.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/distribute-spacing-vertical.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/dot.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/download.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/public/icons/edit.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/ellipse-tool.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/ellipse.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/ellipsis-h.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/ellipsis-v.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/exit.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/public/icons/export.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/eye-closed.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/eye-dropper.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/eye.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/file.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/fill.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/flip-horizontal.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/flip-vertical.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/focus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/folder-plus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/folder.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/go-to-end.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/go-to-start.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/grid.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/group.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/hand.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/history.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/ie.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/image.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/import.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/info.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/intersect.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/lgpl.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/light.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/line-tool.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/line.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/linecap-butt.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/linecap-round.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/linecap-square.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/list.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/public/icons/lock.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/magnet.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/magnifier.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/minus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/objects-align-bottom.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/objects-align-center-horizontal.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/objects-align-center-vertical.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/objects-align-left.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/objects-align-right.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/objects-align-top.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/oculus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/opera.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/page-plus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/page.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/paste.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/pause.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/pencil.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/play.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/plus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/pointer.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/polygon-tool.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/polygon.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/polyline.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/printer.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/properties.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/rectangle-tool.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/rectangle.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/redo.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/refresh.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/rotate-clockwise.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/rotate-counterclockwise.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/ruler-combined.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/ruler-triangle.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/save-as.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/public/icons/save.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/send-back.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/send-backward.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/shell.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/public/icons/spinner.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/square+plus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/square-minus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/stop.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/subtract.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/svg.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/swap-horizontal.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/swap-vertical.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/system.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/text.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/timeline.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/times.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/tree.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/triangle.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/undo.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/ungroup.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/unlock.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/warning.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/webview_android.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/window-close.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/window-maximize.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/window-minimize.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/window-restore.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/zoom-in.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/icons/zoom-out.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/resources/public/img/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/repath-project/repath-studio/1c9c08aebd0915538a169898470aea55c3f67af0/resources/public/img/favicon.png
--------------------------------------------------------------------------------
/resources/public/img/icon-no-bg.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/resources/public/img/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/repath-project/repath-studio/1c9c08aebd0915538a169898470aea55c3f67af0/resources/public/img/icon.png
--------------------------------------------------------------------------------
/resources/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Repath Studio
9 |
10 |
11 |
12 |
13 |
14 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/resources/public/loading.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Loading
7 |
8 |
9 |
10 |
11 |
12 |

13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/config.cljs:
--------------------------------------------------------------------------------
1 | (ns config)
2 |
3 | (goog-define ^js/String version "unknown")
4 |
5 | (def debug? ^boolean goog.DEBUG)
6 |
7 | (def ext "rps")
8 |
9 | (def app-key :repath-studio)
10 |
11 | (def app-name "Repath Studio")
12 |
13 | (def mime-type "application/x-repath-studio")
14 |
15 | (def default-path "documents")
16 |
--------------------------------------------------------------------------------
/src/dev.cljs:
--------------------------------------------------------------------------------
1 | (ns dev
2 | {:dev/always true}
3 | (:require
4 | [clojure.pprint :refer (pprint)]
5 | [clojure.string :as string]
6 | [malli.dev.cljs :as dev]
7 | [re-frame.core :as rf]
8 | [renderer.app.events :as app.events]))
9 |
10 | (comment
11 | ;; Enable full db validation
12 | (rf/reg-global-interceptor app.events/schema-validator)
13 | (rf/clear-global-interceptor ::app.events/schema-validator)
14 |
15 | ;; Enable function instrumentation
16 | ;; https://github.com/metosin/malli/blob/master/docs/clojurescript-function-instrumentation.md
17 | (dev/start!)
18 | (dev/stop!)
19 |
20 | (pprint (string/trim "This line suppresses some clj-kondo warnings.")))
21 |
--------------------------------------------------------------------------------
/src/electron/preload.cljs:
--------------------------------------------------------------------------------
1 | (ns electron.preload
2 | "https://www.electronjs.org/docs/latest/tutorial/tutorial-preload"
3 | (:require
4 | ["electron" :refer [contextBridge ipcRenderer]]
5 | ["font-scanner" :as fontManager]
6 | ["opentype.js" :as opentype]
7 | ["os" :as os]))
8 |
9 | (defn text->path
10 | "https://github.com/opentypejs/opentype.js#loading-a-font-synchronously-nodejs"
11 | [text {:keys [font-url x y font-size]}]
12 | (let [font (.loadSync opentype font-url)
13 | path (.getPath font text x y font-size)]
14 | (.toPathData path)))
15 |
16 | (defonce api
17 | {;; Strip event as it includes `sender`
18 | ;; https://www.electronjs.org/docs/latest/api/ipc-renderer#ipcrendereronchannel-listener
19 | :on (fn [channel f] (.on ipcRenderer channel (fn [_e args] (f args))))
20 | :send (fn [channel args] (.send ipcRenderer channel args))
21 | :invoke (fn [channel args] (.invoke ipcRenderer channel args))
22 | :platform (.platform os)
23 | :findFont (fn [descriptor] (.findFontSync fontManager descriptor))
24 | :textToPath (fn [s options] (text->path s (js->clj options :keywordize-keys true)))})
25 |
26 | (defn ^:export init! []
27 | ;; Expose protected methods that allow the renderer process to use the
28 | ;; ipcRenderer without exposing the entire object
29 | ;; https://www.electronjs.org/docs/api/context-bridge
30 | (.exposeInMainWorld contextBridge "api" (clj->js api)))
31 |
--------------------------------------------------------------------------------
/src/lang/el-GR.edn:
--------------------------------------------------------------------------------
1 | {:missing "Λείπει η μετάφραση για :el-GR"
2 | :cmdk
3 | {:search-command "Αναζήτηση για εντολή"
4 | :no-results "Δεν βρέθηκαν αποτελέσματα."}
5 |
6 | :color
7 | {:swap "Ανταλλάξτε το γέμισμα με τη γραμμή"}}
8 |
--------------------------------------------------------------------------------
/src/lang/en-US.edn:
--------------------------------------------------------------------------------
1 | {:missing "Missing translation for :en-US"
2 | :cmdk
3 | {:search-command "Search for a command"
4 | :no-results "No results found."}
5 |
6 | :color
7 | {:swap "Swap fill with stroke"}}
8 |
--------------------------------------------------------------------------------
/src/renderer/attribute/hierarchy.cljs:
--------------------------------------------------------------------------------
1 | (ns renderer.attribute.hierarchy)
2 |
3 | (defmulti update-attr (fn [_ k & _more] k))
4 | (defmulti description (fn [tag k] [tag k]))
5 | (defmulti form-element (fn [tag k _v _attrs] [tag k]))
6 |
7 | (defmethod update-attr :default
8 | [el k f & more]
9 | (apply update-in el [:attrs k] f more))
10 |
--------------------------------------------------------------------------------
/src/renderer/attribute/impl/angle.cljs:
--------------------------------------------------------------------------------
1 | (ns renderer.attribute.impl.angle
2 | "https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#angle"
3 | (:require
4 | ["@radix-ui/react-popover" :as Popover]
5 | [renderer.attribute.hierarchy :as attribute.hierarchy]
6 | [renderer.attribute.views :as attribute.views]
7 | [renderer.views :as views]))
8 |
9 | (defmethod attribute.hierarchy/form-element [:default ::angle]
10 | [_ k v attrs]
11 | [:div.flex.gap-px.w-full
12 | [attribute.views/form-input k v attrs]
13 | [:> Popover/Root {:modal true}
14 | [:> Popover/Trigger
15 | {:title "Pick angle"
16 | :class "form-control-button"}
17 | [views/icon "degrees"]]
18 | [:> Popover/Portal
19 | [:> Popover/Content
20 | {:sideOffset 5
21 | :className "popover-content"
22 | :align "end"}
23 | [:div.circular-slider]
24 | [:> Popover/Arrow {:class "popover-arrow"}]]]]])
25 |
--------------------------------------------------------------------------------
/src/renderer/attribute/impl/clock.cljs:
--------------------------------------------------------------------------------
1 | (ns renderer.attribute.impl.clock
2 | "https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#clock-value")
3 |
4 | #_(def units
5 | {:ms 0.001
6 | :s 1
7 | :m 60
8 | :h 3600})
9 |
--------------------------------------------------------------------------------
/src/renderer/attribute/impl/color.cljs:
--------------------------------------------------------------------------------
1 | (ns renderer.attribute.impl.color
2 | "https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#color"
3 | (:require
4 | ["@radix-ui/react-popover" :as Popover]
5 | ["@repath-project/react-color" :refer [ChromePicker]]
6 | [re-frame.core :as rf]
7 | [renderer.attribute.hierarchy :as attribute.hierarchy]
8 | [renderer.attribute.views :as attribute.views]
9 | [renderer.element.events :as-alias element.events]))
10 |
11 | (derive :stroke ::color)
12 | (derive :fill ::color)
13 | (derive :color ::color)
14 |
15 | (defmethod attribute.hierarchy/form-element [:default ::color]
16 | [_ k v {:keys [disabled] :as attrs}]
17 | [:div.flex.gap-px.w-full
18 | [attribute.views/form-input k v attrs]
19 | [:> Popover/Root {:modal true}
20 | [:> Popover/Trigger
21 | {:as-child true
22 | :disabled disabled}
23 | [:button.button.color-drip.inline-block
24 | {:title "Pick color"
25 | :style {:border "5px solid var(--bg-primary)"
26 | :background v}}]]
27 | [:> Popover/Portal
28 | [:> Popover/Content
29 | {:sideOffset 5
30 | :className "popover-content"
31 | :align "end"}
32 | [:> ChromePicker
33 | {:color (or v "")
34 | :on-change-complete #(rf/dispatch [::element.events/set-attr k (.-hex %)])
35 | :on-change #(rf/dispatch [::element.events/preview-attr k (.-hex %)])}]]]]])
36 |
--------------------------------------------------------------------------------
/src/renderer/attribute/impl/font_size.cljs:
--------------------------------------------------------------------------------
1 | (ns renderer.attribute.impl.font-size
2 | "https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/font-size"
3 | (:require
4 | [renderer.attribute.hierarchy :as attribute.hierarchy]))
5 |
6 | (defmethod attribute.hierarchy/description [:default :font-size]
7 | []
8 | "The font-size attribute refers to the size of the font from baseline to
9 | baseline when multiple lines of text are set solid in a multiline layout environment.")
10 |
11 | (defmethod attribute.hierarchy/update-attr :font-size
12 | [el attribute f & more]
13 | (let [font-size (js/parseFloat (or (-> el :attrs attribute) 16))]
14 | (assoc-in el [:attrs attribute] (str (apply f font-size more)))))
15 |
--------------------------------------------------------------------------------
/src/renderer/attribute/impl/font_weight.cljs:
--------------------------------------------------------------------------------
1 | (ns renderer.attribute.impl.font-weight
2 | "https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/font-weight"
3 | (:require
4 | [re-frame.core :as rf]
5 | [renderer.attribute.hierarchy :as attribute.hierarchy]
6 | [renderer.attribute.views :as attribute.views]
7 | [renderer.element.subs :as-alias element.subs]))
8 |
9 | (defmethod attribute.hierarchy/description [:default :font-weight]
10 | []
11 | "The font-weight attribute refers to the boldness or lightness of the glyphs
12 | used to render the text, relative to other fonts in the same font family.")
13 |
14 | (def name-mapping
15 | "https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-weight#common_weight_name_mapping"
16 | {100 "Thin (Hairline)"
17 | 200 "Extra Light (Ultra Light)"
18 | 300 "Light"
19 | 400 "Normal"
20 | 500 "Medium"
21 | 600 "Semi Bold (Demi Bold)"
22 | 700 "Bold"
23 | 800 "Extra Bold (Ultra Bold)"
24 | 900 "Black (Heavy)"})
25 |
26 | (defmethod attribute.hierarchy/form-element [:default :font-weight]
27 | [_ k v attrs]
28 | (let [weights @(rf/subscribe [::element.subs/font-weights])
29 | weights (if (seq weights) weights (sort (keys name-mapping)))]
30 | [attribute.views/select-input k v
31 | (merge attrs
32 | {:default-value "400"
33 | :items (mapv #(do {:key %
34 | :label (str % " - " (-> % name-mapping))
35 | :value (str %)}) weights)})]))
36 |
--------------------------------------------------------------------------------
/src/renderer/attribute/impl/overflow.cljs:
--------------------------------------------------------------------------------
1 | (ns renderer.attribute.impl.overflow
2 | "https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/overflow"
3 | (:require
4 | [renderer.attribute.hierarchy :as attribute.hierarchy]
5 | [renderer.attribute.views :as attribute.views]))
6 |
7 | (defmethod attribute.hierarchy/description [:default :overflow]
8 | []
9 | "The overflow attribute sets what to do when an element's content is too big
10 | to fit in its block formatting context. This feature is not widely
11 | implemented yet.")
12 |
13 | (defmethod attribute.hierarchy/form-element [:default :overflow]
14 | [_ k v {:keys [disabled]}]
15 | [attribute.views/select-input k v
16 | {:disabled disabled
17 | ;; Although the initial value for overflow is auto, it is overwritten
18 | ;; in the User Agent style sheet for the