AtlatestRepositorysigil-web-styles
1
;;; (sigil web styles palette) - Color palettes for Sigil web apps.2
;;;3
;;; A palette is a record of named colors used by all component styles.4
;;; The default palette is black and gold. Apps can create custom palettes5
;;; with `make-palette` and pass them to component style functions.7
(define-library (sigil web styles palette)8
(import (sigil core)9
(sigil string)10
(sigil css))12
(export make-palette13
default-palette14
palette-background15
palette-surface16
palette-surface-hover17
palette-primary18
palette-primary-hover19
palette-text20
palette-text-muted21
palette-border22
palette-success23
palette-warning24
palette-error25
palette->css-vars)27
(begin29
;; A palette is a simple alist of named colors.30
;; Using an alist allows easy extension and customization.32
(define (make-palette (keys: background surface surface-hover33
primary primary-hover34
text text-muted border35
success warning error))36
(list (cons 'background background)37
(cons 'surface surface)38
(cons 'surface-hover surface-hover)39
(cons 'primary primary)40
(cons 'primary-hover primary-hover)41
(cons 'text text)42
(cons 'text-muted text-muted)43
(cons 'border border)44
(cons 'success success)45
(cons 'warning warning)46
(cons 'error error)))48
(define default-palette49
(make-palette50
background: "#0a0a0a"51
surface: "#141414"52
surface-hover: "#1e1e1e"53
primary: "#f0c040"54
primary-hover: "#b89830"55
text: "#e0e0e0"56
text-muted: "#888888"57
border: "#2a2a2a"58
success: "#22c55e"59
warning: "#f59e0b"60
error: "#ef4444"))62
;; Accessors63
(define (palette-ref p key)64
(let ((pair (assoc key p)))65
(if pair (cdr pair) #f)))67
(define (palette-background p) (palette-ref p 'background))68
(define (palette-surface p) (palette-ref p 'surface))69
(define (palette-surface-hover p) (palette-ref p 'surface-hover))70
(define (palette-primary p) (palette-ref p 'primary))71
(define (palette-primary-hover p) (palette-ref p 'primary-hover))72
(define (palette-text p) (palette-ref p 'text))73
(define (palette-text-muted p) (palette-ref p 'text-muted))74
(define (palette-border p) (palette-ref p 'border))75
(define (palette-success p) (palette-ref p 'success))76
(define (palette-warning p) (palette-ref p 'warning))77
(define (palette-error p) (palette-ref p 'error))79
;; Convert palette to CSS custom properties (:root block)80
(define (palette->css-vars p)81
(css-vars82
(--color-bg (palette-background p))83
(--color-surface (palette-surface p))84
(--color-surface-hover (palette-surface-hover p))85
(--color-primary (palette-primary p))86
(--color-primary-hover (palette-primary-hover p))87
(--color-text (palette-text p))88
(--color-text-muted (palette-text-muted p))89
(--color-border (palette-border p))90
(--color-success (palette-success p))91
(--color-warning (palette-warning p))92
(--color-error (palette-error p))))94
))