Add clsx utility

This commit is contained in:
Akira Tempaku 2025-05-19 23:33:22 +09:00
parent 314f7cb273
commit 22001ef3e2
Signed by: paku
GPG key ID: 5B4E8402BCC50607
4 changed files with 14 additions and 4 deletions

View file

@ -171,6 +171,10 @@ Or loop:
(hsx (li item)))))) (hsx (li item))))))
``` ```
## Utils
- `(clsx &rest strs)`: A utility function for constructing class strings conditionally. It removes `nil` from the string list, then joins the remaining strings with spaces.
## 📄 License ## 📄 License
MIT License MIT License

View file

@ -1,5 +1,5 @@
(defsystem "hsx" (defsystem "hsx"
:version "0.5.0" :version "0.6.0"
:description "Simple and powerful HTML generation library." :description "Simple and powerful HTML generation library."
:author "Akira Tempaku, Bo Yao" :author "Akira Tempaku, Bo Yao"
:maintainer "Akira Tempaku <paku@skyizwhite.dev>" :maintainer "Akira Tempaku <paku@skyizwhite.dev>"

View file

@ -2,9 +2,11 @@
(:nicknames #:hsx/main) (:nicknames #:hsx/main)
(:use #:cl (:use #:cl
#:hsx/element #:hsx/element
#:hsx/dsl) #:hsx/dsl
#:hsx/utils)
(:import-from #:hsx/builtin) (:import-from #:hsx/builtin)
(:export #:hsx (:export #:hsx
#:defcomp #:defcomp
#:render-to-string)) #:render-to-string
#:clsx))
(in-package :hsx) (in-package :hsx)

View file

@ -5,7 +5,8 @@
#:make-keyword #:make-keyword
#:symbolicate) #:symbolicate)
(:export #:escape-html-attribute (:export #:escape-html-attribute
#:escape-html-text-content)) #:escape-html-text-content
#:clsx))
(in-package #:hsx/utils) (in-package #:hsx/utils)
(defparameter *text-content-escape-map* (defparameter *text-content-escape-map*
@ -40,3 +41,6 @@
(defun escape-html-attribute (str) (defun escape-html-attribute (str)
(escape-string str *attribute-escape-map*)) (escape-string str *attribute-escape-map*))
(defun clsx (&rest strs)
(format nil "~{~a~^ ~}" (remove nil strs)))