From 9d67d007fb271dc60b489360ce919156a31b86fa Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Mon, 9 Dec 2024 16:32:14 +0100 Subject: [PATCH 1/6] =?UTF-8?q?=F0=9F=93=8E=20Remove=20trailing=20space?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/translations/en.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index 4773520d36..78ce30c85c 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -6583,7 +6583,7 @@ msgstr "Name" #: src/app/main/ui/workspace/tokens/form.cljs msgid "workspace.token.enter-token-name" -msgstr "Enter %s token name" +msgstr "Enter %s token name" #: src/app/main/ui/workspace/tokens/form.cljs msgid "workspace.token.token-value" From 19ce9e8ce39a741a197208cc06e2a2a779fc0dd7 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Tue, 10 Dec 2024 11:55:33 +0100 Subject: [PATCH 2/6] =?UTF-8?q?=E2=9C=A8=20Include=20themes=20to=20dtcg=20?= =?UTF-8?q?encoding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/app/common/types/tokens_lib.cljc | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/common/src/app/common/types/tokens_lib.cljc b/common/src/app/common/types/tokens_lib.cljc index 1df9c698ce..e9ecdfa846 100644 --- a/common/src/app/common/types/tokens_lib.cljc +++ b/common/src/app/common/types/tokens_lib.cljc @@ -884,11 +884,20 @@ When `before-set-name` is nil, move set to bottom") (d/ordered-map) active-themes))) (encode-dtcg [_] - (into {} (comp - (filter (partial instance? TokenSet)) - (map (fn [token-set] - [(:name token-set) (get-dtcg-tokens-tree token-set)]))) - (tree-seq d/ordered-map? vals sets))) + (let [themes (into [] + (comp + (filter (partial instance? TokenTheme)) + (map (fn [token-theme] + (into {} token-theme)))) + (tree-seq d/ordered-map? vals themes)) + themes-set-names (apply clojure.set/union (map :sets themes)) + sets (into {} (comp + (filter #(and (instance? TokenSet %) + (contains? themes-set-names (:name %)))) + (map (fn [token-set] + [(:name token-set) (get-dtcg-tokens-tree token-set)]))) + (tree-seq d/ordered-map? vals sets))] + (assoc sets :$themes themes))) (decode-dtcg-json [_ parsed-json] (let [;; tokens-studio/plugin will add these meta properties, remove them for now From d0ad149e20f878ef0d25ccd2d3a4de3d7845d9c5 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Tue, 10 Dec 2024 07:54:48 +0100 Subject: [PATCH 3/6] =?UTF-8?q?=E2=9C=A8=20Add=20themes=20data=20to=20deco?= =?UTF-8?q?ding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/app/common/types/tokens_lib.cljc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/common/src/app/common/types/tokens_lib.cljc b/common/src/app/common/types/tokens_lib.cljc index e9ecdfa846..23ce9dd08e 100644 --- a/common/src/app/common/types/tokens_lib.cljc +++ b/common/src/app/common/types/tokens_lib.cljc @@ -902,6 +902,7 @@ When `before-set-name` is nil, move set to bottom") (decode-dtcg-json [_ parsed-json] (let [;; tokens-studio/plugin will add these meta properties, remove them for now sets-data (dissoc parsed-json "$themes" "$metadata") + themes-data (get parsed-json "$themes") lib (make-tokens-lib) lib' (reduce (fn [lib [set-name tokens]] @@ -909,7 +910,20 @@ When `before-set-name` is nil, move set to bottom") :name set-name :tokens (flatten-nested-tokens-json tokens "")))) lib sets-data)] - lib')) + (reduce + (fn [lib {:strs [name + group + description + is-source + modified-at + sets]}] + (add-theme lib (TokenTheme. name + group + description + is-source + (dt/parse-instant modified-at) + (set sets)))) + lib' themes-data))) (get-all-tokens [this] (reduce From 7e8de9aa241197dd815944eeca1f2d0a64d513c6 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Tue, 10 Dec 2024 12:01:40 +0100 Subject: [PATCH 4/6] =?UTF-8?q?=E2=9C=A8=20Fix=20encoding/decoding=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/app/common/types/tokens_lib.cljc | 17 +++++-------- .../types/data/tokens-multi-set-example.json | 9 ++++++- .../common_tests/types/tokens_lib_test.cljc | 25 +++++++++++++++---- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/common/src/app/common/types/tokens_lib.cljc b/common/src/app/common/types/tokens_lib.cljc index 23ce9dd08e..f29eb6aed6 100644 --- a/common/src/app/common/types/tokens_lib.cljc +++ b/common/src/app/common/types/tokens_lib.cljc @@ -888,16 +888,16 @@ When `before-set-name` is nil, move set to bottom") (comp (filter (partial instance? TokenTheme)) (map (fn [token-theme] - (into {} token-theme)))) + (->> token-theme + (into {}) + walk/stringify-keys)))) (tree-seq d/ordered-map? vals themes)) - themes-set-names (apply clojure.set/union (map :sets themes)) sets (into {} (comp - (filter #(and (instance? TokenSet %) - (contains? themes-set-names (:name %)))) + (filter (partial instance? TokenSet)) (map (fn [token-set] [(:name token-set) (get-dtcg-tokens-tree token-set)]))) (tree-seq d/ordered-map? vals sets))] - (assoc sets :$themes themes))) + (assoc sets "$themes" themes))) (decode-dtcg-json [_ parsed-json] (let [;; tokens-studio/plugin will add these meta properties, remove them for now @@ -911,12 +911,7 @@ When `before-set-name` is nil, move set to bottom") :tokens (flatten-nested-tokens-json tokens "")))) lib sets-data)] (reduce - (fn [lib {:strs [name - group - description - is-source - modified-at - sets]}] + (fn [lib {:strs [name group description is-source modified-at sets]}] (add-theme lib (TokenTheme. name group description diff --git a/common/test/common_tests/types/data/tokens-multi-set-example.json b/common/test/common_tests/types/data/tokens-multi-set-example.json index ca836d9612..7b44af9bc0 100644 --- a/common/test/common_tests/types/data/tokens-multi-set-example.json +++ b/common/test/common_tests/types/data/tokens-multi-set-example.json @@ -796,7 +796,14 @@ } } }, - "$themes": [], + "$themes": [ { + "name": "theme-1", + "group": "group-1", + "description": null, + "is-source": false, + "modified-at": "2024-01-01T00:00:00.000+00:00", + "sets": [ "light" ] + } ], "$metadata": { "tokenSetOrder": ["core", "light", "dark", "theme"] } diff --git a/common/test/common_tests/types/tokens_lib_test.cljc b/common/test/common_tests/types/tokens_lib_test.cljc index 89148a4e53..e77926be9d 100644 --- a/common/test/common_tests/types/tokens_lib_test.cljc +++ b/common/test/common_tests/types/tokens_lib_test.cljc @@ -1058,8 +1058,13 @@ get-set-token (fn [set-name token-name] (some-> (ctob/get-set lib set-name) (ctob/get-token token-name) - (dissoc :modified-at)))] + (dissoc :modified-at))) + token-theme (ctob/get-theme lib "group-1" "theme-1")] (t/is (= '("core" "light" "dark" "theme") (ctob/get-ordered-set-names lib))) + (t/testing "set exists in theme" + (t/is (= (:group token-theme) "group-1")) + (t/is (= (:name token-theme) "theme-1")) + (t/is (= (:sets token-theme) #{"light"}))) (t/testing "tokens exist in core set" (t/is (= (get-set-token "core" "colors.red.600") {:name "colors.red.600" @@ -1080,7 +1085,8 @@ (t/is (nil? (get-set-token "typography" "H1.Bold")))))) (t/testing "encode-dtcg-json" - (let [tokens-lib (-> (ctob/make-tokens-lib) + (let [now (dt/now) + tokens-lib (-> (ctob/make-tokens-lib) (ctob/add-set (ctob/make-token-set :name "core" :tokens {"colors.red.600" (ctob/make-token @@ -1097,9 +1103,19 @@ (ctob/make-token {:name "button.primary.background" :type :color - :value "{accent.default}"})}))) + :value "{accent.default}"})})) + (ctob/add-theme (ctob/make-token-theme :name "theme-1" + :group "group-1" + :modified-at now + :sets #{"core"}))) expected (ctob/encode-dtcg tokens-lib)] - (t/is (= {"core" + (t/is (= {"$themes" [{"description" nil + "group" "group-1" + "is-source" false + "modified-at" now + "name" "theme-1" + "sets" #{"core"}}] + "core" {"colors" {"red" {"600" {"$value" "#e53e3e" "$type" "color"}}} "spacing" @@ -1140,4 +1156,3 @@ (t/is (= @with-prev-tokens-lib @tokens-lib))) (t/testing "fresh tokens library is also equal" (= @with-empty-tokens-lib @tokens-lib))))))) - From 90e0021ceca5181f325dd1b42827f7a0668668f6 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 11 Dec 2024 13:18:48 +0100 Subject: [PATCH 5/6] :bug: Fix export crash when there's no tokens in the project --- frontend/src/app/main/ui/workspace/tokens/sidebar.cljs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/sidebar.cljs b/frontend/src/app/main/ui/workspace/tokens/sidebar.cljs index be90c259f0..be028c8cd5 100644 --- a/frontend/src/app/main/ui/workspace/tokens/sidebar.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/sidebar.cljs @@ -323,12 +323,12 @@ :timeout 9000}))))) (set! (.-value (mf/ref-val input-ref)) ""))) on-export (fn [] - (let [tokens-blob (some-> (deref refs/tokens-lib) + (let [tokens-json (some-> (deref refs/tokens-lib) (ctob/encode-dtcg) (clj->js) - (js/JSON.stringify nil 2) - (wapi/create-blob "application/json"))] - (dom/trigger-download "tokens.json" tokens-blob)))] + (js/JSON.stringify nil 2))] + (->> (wapi/create-blob (or tokens-json "{}") "application/json") + (dom/trigger-download "tokens.json"))))] [:div {:class (stl/css :import-export-button-wrapper)} [:input {:type "file" From 2264efa1cdc390d1c4b59b4ada686d2b11f9e809 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 11 Dec 2024 17:13:23 +0100 Subject: [PATCH 6/6] =?UTF-8?q?=E2=9C=A8=20Exclude=20hidden=20theme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/app/common/types/tokens_lib.cljc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/app/common/types/tokens_lib.cljc b/common/src/app/common/types/tokens_lib.cljc index f29eb6aed6..521eb87d3b 100644 --- a/common/src/app/common/types/tokens_lib.cljc +++ b/common/src/app/common/types/tokens_lib.cljc @@ -886,7 +886,8 @@ When `before-set-name` is nil, move set to bottom") (encode-dtcg [_] (let [themes (into [] (comp - (filter (partial instance? TokenTheme)) + (filter #(and (instance? TokenTheme %) + (not (hidden-temporary-theme? %)))) (map (fn [token-theme] (->> token-theme (into {})