Skip to content

Commit 11c2aad

Browse files
committed
enhance portfolio and components
1 parent 997677e commit 11c2aad

File tree

10 files changed

+107
-25
lines changed

10 files changed

+107
-25
lines changed

package-lock.json

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@
117117
"style-to-object": "1.0.8",
118118
"svg-path-bbox": "2.1.0",
119119
"svgpath": "2.6.0",
120+
"tailwind-merge": "2.5.4",
120121
"tailwindcss": "3.4.14"
121122
},
122123
"dependencies": {

portfolio/src/components/button_scenes.cljs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
[:div.toolbar.bg-primary
99
[ui/icon-button "download" {:title "download"
1010
:on-click #(js/alert "Downloaded")}]
11+
[ui/icon-button "folder" {:title "open"
12+
:on-click #(js/alert "Opened")}]
1113
[ui/icon-button "save" {:title "save"
14+
:disabled true
1215
:on-click #(js/alert "Saved")}]])
1316

1417
(defscene radio-icon-buttons

portfolio/src/components/icon_scenes.cljs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,8 @@
167167
^{:key icon-name}
168168
[:div {:title icon-name}
169169
[ui/icon icon-name]])])
170+
171+
(defscene colored
172+
:title "Colored icon"
173+
[:div.flex.p-3
174+
[ui/icon "download" {:class "text-accent"}]])
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
(ns components.slider-scenes
2+
(:require
3+
[portfolio.reagent-18 :refer-macros [defscene]]
4+
[renderer.ui :as ui]))
5+
6+
(defscene slider
7+
:title "Deafult slider"
8+
:param (atom [25])
9+
[store]
10+
[:div.toolbar.bg-primary.flex.gap-2
11+
[:div.w-64
12+
[ui/slider {:min 0
13+
:max 50
14+
:step 1
15+
:default-value @store
16+
:on-value-change (fn [v] (reset! store v))}]]
17+
[:div (first @store)]])
18+
19+
(defscene slider-disabled
20+
:title "Disabled slider"
21+
:param (atom [25])
22+
[store]
23+
[:div.toolbar.bg-primary.flex.gap-2
24+
[:div.w-64
25+
[ui/slider {:min 0
26+
:max 50
27+
:step 1
28+
:disabled true
29+
:default-value @store
30+
:on-value-change (fn [v] (reset! store v))}]]
31+
[:div (first @store)]])

portfolio/src/components/switch_scenes.cljs

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,33 @@
44
[renderer.ui :as ui]))
55

66
(defscene switch
7-
:title "Switch"
8-
[:div.toolbar.bg-primary
9-
[ui/switch {:id "default-switch"
10-
:label "Switch label"
11-
:default-checked? true}]])
7+
:title "Default switch"
8+
:param (atom true)
9+
[store]
10+
[:div.toolbar.bg-primary.flex.gap-2
11+
[ui/switch "Switch label" {:id "default-switch"
12+
:default-checked @store
13+
:on-checked-change (fn [v] (reset! store v))}]
14+
(str "Checked: " @store)])
15+
16+
(defscene switch-disabled
17+
:title "Disabled switch"
18+
:param (atom true)
19+
[store]
20+
[:div.toolbar.bg-primary.flex.gap-2
21+
[ui/switch "Switch label" {:id "disabled-switch"
22+
:disabled true
23+
:default-checked @store
24+
:on-checked-change (fn [v] (reset! store v))}]
25+
(str "Checked: " @store)])
26+
27+
(defscene switch-custom
28+
:title "Custom color switch"
29+
:param (atom true)
30+
[store]
31+
[:div.toolbar.bg-primary.flex.gap-2
32+
[ui/switch "Switch label" {:id "disabled-switch"
33+
:class "data-[state=checked]:bg-white"
34+
:default-checked @store
35+
:on-checked-change (fn [v] (reset! store v))}]
36+
(str "Checked: " @store)])

portfolio/src/portfolio.cljs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
(ns portfolio
22
(:require [components.button-scenes]
33
[components.icon-scenes]
4+
[components.slider-scenes]
45
[components.switch-scenes]
56
[portfolio.ui :as ui]))
67

src/renderer/timeline/views.cljs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,14 @@
7070
guide-snap? @(rf/subscribe [::timeline.s/guide-snap?])]
7171
[:div.grow
7272
[ui/switch
73+
"Grid snap"
7374
{:id "grid-snap"
74-
:label "Grid snap"
75-
:default-checked? grid-snap?
75+
:default-checked grid-snap?
7676
:on-checked-change #(rf/dispatch [::timeline.e/set-grid-snap %])}]
7777
[ui/switch
78+
"Guide snap"
7879
{:id "guide-snap"
79-
:label "Guide snap"
80-
:default-checked? guide-snap?
80+
:default-checked guide-snap?
8181
:on-checked-change #(rf/dispatch [::timeline.e/set-guide-snap %])}]]))
8282

8383
(defn toolbar

src/renderer/ui.cljs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,23 @@
88
["@radix-ui/react-slider" :as Slider]
99
["@radix-ui/react-switch" :as Switch]
1010
["react-svg" :refer [ReactSVG]]
11+
["tailwind-merge" :refer [twMerge]]
1112
[malli.experimental :as mx]
1213
[re-frame.core :as rf]
1314
[renderer.app.subs :as-alias app.s]
1415
[renderer.utils.hiccup :refer [Props]]
1516
[renderer.utils.keyboard :as keyb]))
1617

18+
(mx/defn merge-with-class
19+
[classes props :- Props]
20+
(merge {:class (twMerge classes (:class props))}
21+
(dissoc props :class)))
22+
1723
(mx/defn icon
1824
[icon-name :- string?, props :- Props]
1925
[:> ReactSVG
20-
(merge props {:class ["icon" (:class props)]
21-
:src (str "icons/" icon-name ".svg")})])
26+
(merge (merge-with-class "icon" props)
27+
{:src (str "icons/" icon-name ".svg")})])
2228

2329
(mx/defn icon-button
2430
[icon-name :- string?, props :- Props]
@@ -32,22 +38,19 @@
3238
{:class "animate-spin"}])
3339

3440
(defn switch
35-
[{:keys [id label default-checked? on-checked-change]}]
41+
[label props]
3642
[:span.inline-flex.items-center
37-
[:label.h-auto.bg-transparent {:for id} label]
43+
[:label.h-auto.bg-transparent {:for (when (:id props) (:id props))} label]
3844
[:> Switch/Root
39-
{:class "overlay relative rounded-full w-10 h-6 data-[state=checked]:bg-accent"
40-
:id id
41-
:default-checked default-checked?
42-
:on-checked-change on-checked-change}
45+
(merge-with-class "overlay relative rounded-full w-10 h-6 data-[state=checked]:bg-accent data-[disabled]:opacity-50" props)
4346
[:> Switch/Thumb
4447
{:class "block bg-primary rounded-full shadow-sm w-5 h-5 will-change-transform
4548
transition-transform translate-x-0.5 data-[state=checked]:translate-x-[18px]"}]]])
4649

4750
(mx/defn slider
4851
[props :- Props]
4952
[:> Slider/Root
50-
(merge {:class "relative flex items-center select-none w-full touch-none h-full"} props)
53+
(merge-with-class "relative flex items-center select-none w-full touch-none h-full" props)
5154
[:> Slider/Track {:class "relative h-1 bg-secondary flex-1"}
5255
[:> Slider/Range {:class "absolute h-full overlay"}]]
5356
[:> Slider/Thumb {:class "slider-thumb"}]])
@@ -73,14 +76,14 @@
7376
(into [:span.inline-flex.text-muted {:class "gap-1.5"}])))))
7477

7578
(mx/defn radio-icon-button
76-
[icon-name :- string?, active :- boolean?, & {:keys [class] :as props} :- Props]
79+
[icon-name :- string?, active :- boolean?, props :- Props]
7780
[:button.icon-button.radio-icon-button
78-
(assoc props :class [class (when active "selected")])
81+
(merge-with-class (when active "selected") props)
7982
[renderer.ui/icon icon-name]])
8083

8184
(defn context-menu-item
82-
[{:keys [label action checked? disabled?] :as attrs}]
83-
(case (:type attrs)
85+
[{:keys [label action checked? disabled?] :as props}]
86+
(case (:type props)
8487
:separator
8588
[:> ContextMenu/Separator {:class "menu-separator"}]
8689

@@ -106,8 +109,8 @@
106109
[shortcuts action]]]))
107110

108111
(defn dropdown-menu-item
109-
[{:keys [label action checked?] :as attrs}]
110-
(case (:type attrs)
112+
[{:keys [label action checked?] :as props}]
113+
(case (:type props)
111114
:separator
112115
[:> DropdownMenu/Separator {:class "menu-separator"}]
113116

tailwind.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/** @type {import('tailwindcss').Config} */
22
module.exports = {
3-
content: ["./src/**/*.{html,js,cljs}"],
3+
content: ["./src/**/*.{html,js,cljs}", "./portfolio/src/**/*.{html,js,cljs}"
4+
],
45
theme: {
56
extend: {
67
fontSize: {

0 commit comments

Comments
 (0)