diff --git a/common/src/app/common/files/changes.cljc b/common/src/app/common/files/changes.cljc index f35e48fb06..875cb9abea 100644 --- a/common/src/app/common/files/changes.cljc +++ b/common/src/app/common/files/changes.cljc @@ -366,9 +366,34 @@ [:type [:= :del-typography]] [:id ::sm/uuid]]] - [:update-active-token-themes - [:map {:title "UpdateActiveTokenThemes"} - [:type [:= :update-active-token-themes]] + [:set-tokens-lib + [:map {:title "SetTokensLib"} + [:type [:= :set-tokens-lib]] + [:tokens-lib ::sm/any]]] ;; TODO: we should define a plain object schema for tokens-lib + + [:set-token + [:map {:title "SetTokenChange"} + [:type [:= :set-token]] + [:set-id ::sm/uuid] + [:token-id ::sm/uuid] + [:token [:maybe ctob/schema:token-attrs]]]] + + [:set-token-set + [:map {:title "SetTokenSetChange"} + [:type [:= :set-token-set]] + [:id ::sm/uuid] + [:token-set [:maybe ctob/schema:token-set-attrs]]]] + + [:set-token-theme + [:map {:title "SetTokenThemeChange"} + [:type [:= :set-token-theme]] + [:theme-name :string] + [:group :string] + [:theme [:maybe ctob/schema:token-theme-attrs]]]] + + [:set-active-token-themes + [:map {:title "SetActiveTokenThemes"} + [:type [:= :set-active-token-themes]] [:theme-paths [:set :string]]]] [:rename-token-set-group @@ -393,31 +418,6 @@ [:before-path [:maybe [:vector :string]]] [:before-group [:maybe :boolean]]]] - [:set-token-theme - [:map {:title "SetTokenThemeChange"} - [:type [:= :set-token-theme]] - [:theme-name :string] - [:group :string] - [:theme [:maybe ctob/schema:token-theme-attrs]]]] - - [:set-tokens-lib - [:map {:title "SetTokensLib"} - [:type [:= :set-tokens-lib]] - [:tokens-lib ::sm/any]]] - - [:set-token-set - [:map {:title "SetTokenSetChange"} - [:type [:= :set-token-set]] - [:id ::sm/uuid] - [:token-set [:maybe ctob/schema:token-set-attrs]]]] - - [:set-token - [:map {:title "SetTokenChange"} - [:type [:= :set-token]] - [:set-id ::sm/uuid] - [:token-id ::sm/uuid] - [:token [:maybe ctob/schema:token-attrs]]]] - [:set-base-font-size [:map {:title "ModBaseFontSize"} [:type [:= :set-base-font-size]] @@ -970,7 +970,7 @@ [data {:keys [id]}] (ctyl/delete-typography data id)) -;; -- Tokens +;; -- Design Tokens (defmethod process-change :set-tokens-lib [data {:keys [tokens-lib]}] @@ -1026,7 +1026,7 @@ (fn [prev-token-theme] (ctob/make-token-theme (merge prev-token-theme theme))))))))) -(defmethod process-change :update-active-token-themes +(defmethod process-change :set-active-token-themes [data {:keys [theme-paths]}] (update data :tokens-lib #(-> % (ctob/ensure-tokens-lib) (ctob/set-active-themes theme-paths)))) @@ -1050,7 +1050,7 @@ (ctob/ensure-tokens-lib) (ctob/move-set-group from-path to-path before-path before-group)))) -;; === Base font size +;; === Design Tokens configuration (defmethod process-change :set-base-font-size [data {:keys [base-font-size]}] diff --git a/common/src/app/common/files/changes_builder.cljc b/common/src/app/common/files/changes_builder.cljc index 4a4bbfc244..b75830762e 100644 --- a/common/src/app/common/files/changes_builder.cljc +++ b/common/src/app/common/files/changes_builder.cljc @@ -718,6 +718,7 @@ (reduce resize-parent changes all-parents))) ;; Library changes + (defn add-color [changes color] (-> changes @@ -799,139 +800,6 @@ (update :undo-changes conj {:type :add-typography :typography prev-typography}) (apply-changes-local)))) -(defn update-active-token-themes - [changes active-theme-paths] - (assert-library! changes) - (let [library-data (::library-data (meta changes)) - prev-active-theme-paths (d/nilv (some-> (get library-data :tokens-lib) - (ctob/get-active-theme-paths)) - #{})] - (-> changes - (update :redo-changes conj {:type :update-active-token-themes :theme-paths active-theme-paths}) - (update :undo-changes conj {:type :update-active-token-themes :theme-paths prev-active-theme-paths}) - (apply-changes-local)))) - -(defn set-token-theme [changes group theme-name theme] - (assert-library! changes) - (let [library-data (::library-data (meta changes)) - prev-theme (some-> (get library-data :tokens-lib) - (ctob/get-theme group theme-name))] - (-> changes - (update :redo-changes conj {:type :set-token-theme - :theme-name theme-name - :group group - :theme theme}) - (update :undo-changes conj (if prev-theme - {:type :set-token-theme - :group group - :theme-name (or - ;; Undo of edit - (:name theme) - ;; Undo of delete - theme-name) - :theme prev-theme} - ;; Undo of create - {:type :set-token-theme - :group group - :theme-name theme-name - :theme nil})) - (apply-changes-local)))) - -(defn rename-token-set-group - [changes set-group-path set-group-fname] - (let [undo-path (ctob/replace-last-path-name set-group-path set-group-fname) - undo-fname (last set-group-path)] - (-> changes - (update :redo-changes conj {:type :rename-token-set-group :set-group-path set-group-path :set-group-fname set-group-fname}) - (update :undo-changes conj {:type :rename-token-set-group :set-group-path undo-path :set-group-fname undo-fname}) - (apply-changes-local)))) - -(defn move-token-set - [changes {:keys [from-path to-path before-path before-group? prev-before-path prev-before-group?] :as opts}] - (-> changes - (update :redo-changes conj {:type :move-token-set - :from-path from-path - :to-path to-path - :before-path before-path - :before-group before-group?}) - (update :undo-changes conj {:type :move-token-set - :from-path to-path - :to-path from-path - :before-path prev-before-path - :before-group prev-before-group?}) - (apply-changes-local))) - -(defn move-token-set-group - [changes {:keys [from-path to-path before-path before-group? prev-before-path prev-before-group?]}] - (-> changes - (update :redo-changes conj {:type :move-token-set-group - :from-path from-path - :to-path to-path - :before-path before-path - :before-group before-group?}) - (update :undo-changes conj {:type :move-token-set-group - :from-path to-path - :to-path from-path - :before-path prev-before-path - :before-group prev-before-group?}) - (apply-changes-local))) - -(defn set-tokens-lib - [changes tokens-lib] - (assert-library! changes) - (let [library-data (::library-data (meta changes)) - prev-tokens-lib (get library-data :tokens-lib)] - (-> changes - (update :redo-changes conj {:type :set-tokens-lib :tokens-lib tokens-lib}) - (update :undo-changes conj {:type :set-tokens-lib :tokens-lib prev-tokens-lib}) - (apply-changes-local)))) - -(defn set-token [changes set-id token-id token] - (assert-library! changes) - (let [library-data (::library-data (meta changes)) - prev-token (some-> (get library-data :tokens-lib) - (ctob/get-token set-id token-id))] - (-> changes - (update :redo-changes conj {:type :set-token - :set-id set-id - :token-id token-id - :token token}) - (update :undo-changes conj {:type :set-token - :set-id set-id - :token-id token-id - :token prev-token}) - (apply-changes-local)))) - -(defn rename-token-set - [changes id new-name] - (assert-library! changes) - (let [library-data (::library-data (meta changes)) - prev-token-set (some-> (get library-data :tokens-lib) - (ctob/get-set id))] - (-> changes - (update :redo-changes conj {:type :set-token-set - :id id - :token-set (datafy (ctob/rename prev-token-set new-name))}) - (update :undo-changes conj {:type :set-token-set - :id id - :token-set (datafy prev-token-set)}) - (apply-changes-local)))) - -(defn set-token-set - [changes id token-set] - (assert-library! changes) - (let [library-data (::library-data (meta changes)) - prev-token-set (some-> (get library-data :tokens-lib) - (ctob/get-set id))] - (-> changes - (update :redo-changes conj {:type :set-token-set - :id id - :token-set (datafy token-set)}) - (update :undo-changes conj {:type :set-token-set - :id id - :token-set (datafy prev-token-set)}) - (apply-changes-local)))) - (defn add-component ([changes id path name updated-shapes main-instance-id main-instance-page] (add-component changes id path name updated-shapes main-instance-id main-instance-page nil nil nil)) @@ -1061,6 +929,156 @@ :id id :delta delta}))) +;; Design Tokens changes + +(defn set-tokens-lib + [changes tokens-lib] + (assert-library! changes) + (let [library-data (::library-data (meta changes)) + prev-tokens-lib (get library-data :tokens-lib)] + (-> changes + (update :redo-changes conj {:type :set-tokens-lib :tokens-lib tokens-lib}) + (update :undo-changes conj {:type :set-tokens-lib :tokens-lib prev-tokens-lib}) + (apply-changes-local)))) + +(defn set-token [changes set-id token-id token] + (assert-library! changes) + (let [library-data (::library-data (meta changes)) + prev-token (some-> (get library-data :tokens-lib) + (ctob/get-token set-id token-id))] + (-> changes + (update :redo-changes conj {:type :set-token + :set-id set-id + :token-id token-id + :token token}) + (update :undo-changes conj {:type :set-token + :set-id set-id + :token-id token-id + :token prev-token}) + (apply-changes-local)))) + +(defn set-token-set + [changes id token-set] + (assert-library! changes) + (let [library-data (::library-data (meta changes)) + prev-token-set (some-> (get library-data :tokens-lib) + (ctob/get-set id))] + (-> changes + (update :redo-changes conj {:type :set-token-set + :id id + :token-set (datafy token-set)}) + (update :undo-changes conj {:type :set-token-set + :id id + :token-set (datafy prev-token-set)}) + (apply-changes-local)))) + +(defn rename-token-set + [changes id new-name] + (assert-library! changes) + (let [library-data (::library-data (meta changes)) + prev-token-set (some-> (get library-data :tokens-lib) + (ctob/get-set id))] + (-> changes + (update :redo-changes conj {:type :set-token-set + :id id + :token-set (datafy (ctob/rename prev-token-set new-name))}) + (update :undo-changes conj {:type :set-token-set + :id id + :token-set (datafy prev-token-set)}) + (apply-changes-local)))) + +(defn set-token-theme [changes group theme-name theme] + (assert-library! changes) + (let [library-data (::library-data (meta changes)) + prev-theme (some-> (get library-data :tokens-lib) + (ctob/get-theme group theme-name))] + (-> changes + (update :redo-changes conj {:type :set-token-theme + :theme-name theme-name + :group group + :theme theme}) + (update :undo-changes conj (if prev-theme + {:type :set-token-theme + :group group + :theme-name (or + ;; Undo of edit + (:name theme) + ;; Undo of delete + theme-name) + :theme prev-theme} + ;; Undo of create + {:type :set-token-theme + :group group + :theme-name theme-name + :theme nil})) + (apply-changes-local)))) + +(defn set-active-token-themes + [changes active-theme-paths] + (assert-library! changes) + (let [library-data (::library-data (meta changes)) + prev-active-theme-paths (d/nilv (some-> (get library-data :tokens-lib) + (ctob/get-active-theme-paths)) + #{})] + (-> changes + (update :redo-changes conj {:type :set-active-token-themes :theme-paths active-theme-paths}) + (update :undo-changes conj {:type :set-active-token-themes :theme-paths prev-active-theme-paths}) + (apply-changes-local)))) + +(defn rename-token-set-group + [changes set-group-path set-group-fname] + (let [undo-path (ctob/replace-last-path-name set-group-path set-group-fname) + undo-fname (last set-group-path)] + (-> changes + (update :redo-changes conj {:type :rename-token-set-group :set-group-path set-group-path :set-group-fname set-group-fname}) + (update :undo-changes conj {:type :rename-token-set-group :set-group-path undo-path :set-group-fname undo-fname}) + (apply-changes-local)))) + +(defn move-token-set + [changes {:keys [from-path to-path before-path before-group? prev-before-path prev-before-group?] :as opts}] + (-> changes + (update :redo-changes conj {:type :move-token-set + :from-path from-path + :to-path to-path + :before-path before-path + :before-group before-group?}) + (update :undo-changes conj {:type :move-token-set + :from-path to-path + :to-path from-path + :before-path prev-before-path + :before-group prev-before-group?}) + (apply-changes-local))) + +(defn move-token-set-group + [changes {:keys [from-path to-path before-path before-group? prev-before-path prev-before-group?]}] + (-> changes + (update :redo-changes conj {:type :move-token-set-group + :from-path from-path + :to-path to-path + :before-path before-path + :before-group before-group?}) + (update :undo-changes conj {:type :move-token-set-group + :from-path to-path + :to-path from-path + :before-path prev-before-path + :before-group prev-before-group?}) + (apply-changes-local))) + +(defn set-base-font-size + [changes new-base-font-size] + (assert-file-data! changes) + (let [file-data (::file-data (meta changes)) + previous-font-size (ctf/get-base-font-size file-data)] + (-> changes + (update :redo-changes conj {:type :set-base-font-size + :base-font-size new-base-font-size}) + + (update :undo-changes conj {:type :set-base-font-size + :base-font-size previous-font-size}) + (apply-changes-local)))) + +;; Misc changes + (defn reorder-children [changes id children] (assert-page-id! changes) @@ -1143,15 +1161,3 @@ [changes] (::page-id (meta changes))) -(defn set-base-font-size - [changes new-base-font-size] - (assert-file-data! changes) - (let [file-data (::file-data (meta changes)) - previous-font-size (ctf/get-base-font-size file-data)] - (-> changes - (update :redo-changes conj {:type :set-base-font-size - :base-font-size new-base-font-size}) - - (update :undo-changes conj {:type :set-base-font-size - :base-font-size previous-font-size}) - (apply-changes-local)))) diff --git a/common/src/app/common/logic/tokens.cljc b/common/src/app/common/logic/tokens.cljc index 8bb9b48eb0..7d78a0da5a 100644 --- a/common/src/app/common/logic/tokens.cljc +++ b/common/src/app/common/logic/tokens.cljc @@ -24,7 +24,7 @@ (ctob/set-sets active-token-set-names)) (update-theme-fn))] (-> changes - (pcb/update-active-token-themes #{(ctob/get-theme-path hidden-theme')}) + (pcb/set-active-token-themes #{(ctob/get-theme-path hidden-theme')}) (pcb/set-token-theme (:group hidden-theme) (:name hidden-theme) hidden-theme')))) diff --git a/frontend/src/app/main/data/workspace/tokens/library_edit.cljs b/frontend/src/app/main/data/workspace/tokens/library_edit.cljs index e881e35469..ded56295f7 100644 --- a/frontend/src/app/main/data/workspace/tokens/library_edit.cljs +++ b/frontend/src/app/main/data/workspace/tokens/library_edit.cljs @@ -120,7 +120,7 @@ (disj active-token-themes ctob/hidden-theme-path)) changes (-> (pcb/empty-changes it) (pcb/with-library-data data) - (pcb/update-active-token-themes active-token-themes'))] + (pcb/set-active-token-themes active-token-themes'))] (rx/of (dch/commit-changes changes) (dwtp/propagate-workspace-tokens)))))) @@ -344,7 +344,7 @@ (pcb/set-token-theme (:group hidden-theme) (:name hidden-theme) hidden-theme-with-set) - (pcb/update-active-token-themes #{ctob/hidden-theme-path}))] + (pcb/set-active-token-themes #{ctob/hidden-theme-path}))] (rx/of (dch/commit-changes changes) (set-selected-token-set-id (ctob/get-id token-set)))))))