mirror of
https://github.com/penpot/penpot.git
synced 2025-12-11 22:14:05 +01:00
43 lines
1.9 KiB
Clojure
43 lines
1.9 KiB
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
;;
|
|
;; Copyright (c) KALEIDOS INC
|
|
|
|
(ns app.main.ui.ds.buttons.icon-button
|
|
(:require-macros
|
|
[app.common.data.macros :as dm]
|
|
[app.main.style :as stl])
|
|
(:require
|
|
[app.main.ui.ds.foundations.assets.icon :refer [icon* icon-list]]
|
|
[rumext.v2 :as mf]))
|
|
|
|
(def ^:private schema:icon-button
|
|
[:map
|
|
[:class {:optional true} :string]
|
|
[:icon-class {:optional true} :string]
|
|
[:tooltip-id {:optional true} :string]
|
|
[:icon
|
|
[:and :string [:fn #(contains? icon-list %)]]]
|
|
[:aria-label :string]
|
|
[:variant {:optional true}
|
|
[:maybe [:enum "primary" "secondary" "ghost" "destructive" "action"]]]])
|
|
|
|
(mf/defc icon-button*
|
|
{::mf/props :obj
|
|
::mf/schema schema:icon-button}
|
|
[{:keys [class icon icon-class variant aria-label children tooltip-id] :rest props}]
|
|
(let [variant (or variant "primary")
|
|
class (dm/str class " " (stl/css-case :icon-button true
|
|
:icon-button-primary (= variant "primary")
|
|
:icon-button-secondary (= variant "secondary")
|
|
:icon-button-ghost (= variant "ghost")
|
|
:icon-button-action (= variant "action")
|
|
:icon-button-destructive (= variant "destructive")))
|
|
props (if (some? tooltip-id)
|
|
(mf/spread-props props {:class class
|
|
:aria-describedby tooltip-id})
|
|
(mf/spread-props props {:class class
|
|
:aria-label aria-label
|
|
:title aria-label}))]
|
|
[:> "button" props [:> icon* {:icon-id icon :aria-hidden true :class icon-class}] children])) |