User-specific UI components based on User schema.
This namespace contains pure functions for generating user-related Hiccup structures. Components are derived from the User schema and handle user-specific business logic for display and forms.
User-specific UI components based on User schema. This namespace contains pure functions for generating user-related Hiccup structures. Components are derived from the User schema and handle user-specific business logic for display and forms.
(action-badge action)Display action type with appropriate styling.
Args: action - keyword action type (:create, :update, :delete, etc.)
Returns: Hiccup span with styled badge
Pure: true
Display action type with appropriate styling. Args: action - keyword action type (:create, :update, :delete, etc.) Returns: Hiccup span with styled badge Pure: true
(audit-detail-modal)Reusable modal for viewing audit log details.
Reusable modal for viewing audit log details.
(audit-detail-modal-script)Script for wiring audit detail buttons to modal.
Script for wiring audit detail buttons to modal.
(audit-filters filters)Generate filter form for audit logs.
Args: filters - current filter values
Returns: Hiccup form for filtering
Pure: true
Generate filter form for audit logs. Args: filters - current filter values Returns: Hiccup form for filtering Pure: true
(audit-log-row audit-log)Generate audit log table row.
Args: audit-log - audit log entity map
Returns: Hiccup table row
Pure: true
Generate audit log table row. Args: audit-log - audit log entity map Returns: Hiccup table row Pure: true
(audit-logs-table audit-logs table-query total-count)(audit-logs-table audit-logs table-query total-count filters)Generate audit logs table.
Args: audit-logs - collection of audit log entity maps table-query - normalized TableQuery total-count - total number of audit logs filters - optional map of parsed search filters
Returns: Hiccup structure for audit logs table
Pure: true
Generate audit logs table. Args: audit-logs - collection of audit log entity maps table-query - normalized TableQuery total-count - total number of audit logs filters - optional map of parsed search filters Returns: Hiccup structure for audit logs table Pure: true
(audit-page audit-logs table-query total-count opts)(audit-page audit-logs table-query total-count filters opts)Full audit logs page with layout.
Args: audit-logs - collection of audit log entity maps table-query - normalized TableQuery total-count - total number of audit logs filters - optional map of parsed search filters opts - page options (user context, flash messages, etc.)
Returns: Complete page hiccup
Pure: false
Full audit logs page with layout. Args: audit-logs - collection of audit log entity maps table-query - normalized TableQuery total-count - total number of audit logs filters - optional map of parsed search filters opts - page options (user context, flash messages, etc.) Returns: Complete page hiccup Pure: false
(create-user-form)(create-user-form data errors)(create-user-form data errors password-violations policy)(create-user-form data errors password-violations policy opts)Generate a form for creating new users based on CreateUserRequest schema.
Args: data: Optional form data map for pre-filling errors: Optional validation errors map password-violations: Optional password violations from policy check policy: Optional password policy configuration opts: Optional map with :return-to URL for post-create redirect
Returns: Hiccup structure for create user form
Generate a form for creating new users based on CreateUserRequest schema. Args: data: Optional form data map for pre-filling errors: Optional validation errors map password-violations: Optional password violations from policy check policy: Optional password policy configuration opts: Optional map with :return-to URL for post-create redirect Returns: Hiccup structure for create user form
(create-user-page & [data errors opts])Complete create user page.
Args: data: Optional form data for pre-filling errors: Optional validation errors opts: Optional page options. Supports :return-to for the 'Back to users' button target and to thread through the form as a hidden field so the HTMX POST handler can redirect to the same URL on success, and :password-policy for the rules the form lists — the shell reads that from config, so the page and the failed POST advertise the same set.
Returns: Complete HTML page for creating users
Complete create user page.
Args:
data: Optional form data for pre-filling
errors: Optional validation errors
opts: Optional page options. Supports :return-to for the 'Back to users'
button target and to thread through the form as a hidden field so
the HTMX POST handler can redirect to the same URL on success, and
:password-policy for the rules the form lists — the shell reads that
from config, so the page and the failed POST advertise the same set.
Returns:
Complete HTML page for creating users(dashboard-page user dashboard-data opts)User dashboard/welcome page with account statistics.
Args: user - authenticated user entity dashboard-data - map containing: :active-sessions-count - number of active sessions :mfa-enabled - boolean indicating MFA status opts - page options (flash messages, etc.)
Returns: Complete page hiccup
Pure: false
User dashboard/welcome page with account statistics.
Args:
user - authenticated user entity
dashboard-data - map containing:
:active-sessions-count - number of active sessions
:mfa-enabled - boolean indicating MFA status
opts - page options (flash messages, etc.)
Returns:
Complete page hiccup
Pure: false(format-audit-timestamp timestamp)Format timestamp for audit log display.
Args: timestamp - java.time.Instant or similar
Returns: Formatted timestamp string like '2026-02-01 07:39:15'
Pure: true
Format timestamp for audit log display. Args: timestamp - java.time.Instant or similar Returns: Formatted timestamp string like '2026-02-01 07:39:15' Pure: true
(format-relative-time* timestamp now zone-id)Format a timestamp as relative time (e.g., '2 hours ago', 'just now').
Args: timestamp - java.time.Instant or similar now - java.time.Instant supplied by the shell
Returns: String describing time relative to the explicit reference time
Pure: true
Format a timestamp as relative time (e.g., '2 hours ago', 'just now'). Args: timestamp - java.time.Instant or similar now - java.time.Instant supplied by the shell Returns: String describing time relative to the explicit reference time Pure: true
(login-form data errors)Login form for email/password sign-in.
Args: data - map with optional :email / :remember / :return-to errors - map of field keyword -> vector of error messages
Login form for email/password sign-in. Args: data - map with optional :email / :remember / :return-to errors - map of field keyword -> vector of error messages
(login-page & [data errors opts])Complete login page.
Args: data - form data map (may be empty) errors - validation errors (may be nil) opts - page options (user context, flash messages, return-to URL, etc.)
Complete login page. Args: data - form data map (may be empty) errors - validation errors (may be nil) opts - page options (user context, flash messages, return-to URL, etc.)
(mfa-login-form data errors)Form for entering MFA code during login.
Args: data - map with :email, :password, :remember, :return-to errors - map of field keyword -> vector of error messages
Form for entering MFA code during login. Args: data - map with :email, :password, :remember, :return-to errors - map of field keyword -> vector of error messages
(mfa-login-page & [data errors opts])Complete MFA login page (shown after successful password verification).
Args: data - form data map (must contain :email and :password) errors - validation errors (may be nil) opts - page options (user context, flash messages, return-to URL, etc.)
Complete MFA login page (shown after successful password verification). Args: data - form data map (must contain :email and :password) errors - validation errors (may be nil) opts - page options (user context, flash messages, return-to URL, etc.)
(parse-user-agent user-agent)Extract browser and device information from user-agent string.
Args: user-agent - user-agent string
Returns: A translation marker rendering as 'Chrome on Desktop' or 'Safari on Mobile', or nil for no user-agent.
A marker rather than a string: word order differs between languages, so the browser and device names are passed as parameters and the sentence lives in the catalogue. The parameters are themselves markers — the renderer resolves those first, so each name is translated before the sentence is assembled.
The :user/browser-* and :user/device-* keys already existed in the catalogue, unreferenced. They were added for this and never wired up.
Pure: true
Extract browser and device information from user-agent string. Args: user-agent - user-agent string Returns: A translation marker rendering as 'Chrome on Desktop' or 'Safari on Mobile', or nil for no user-agent. A marker rather than a string: word order differs between languages, so the browser and device names are passed as parameters and the sentence lives in the catalogue. The parameters are themselves markers — the renderer resolves those first, so each name is translated before the sentence is assembled. The :user/browser-* and :user/device-* keys already existed in the catalogue, unreferenced. They were added for this and never wired up. Pure: true
(password-requirement-item requirement)Display a single password requirement with status indicator.
Args: requirement - map with :met?, :message. A nil :met? means the state is not known — the server cannot see what is in the field — and renders as a neutral bullet rather than a ✓ or a ✗.
Returns: Hiccup list item with status indicator
Pure: true
Display a single password requirement with status indicator.
Args:
requirement - map with :met?, :message. A nil :met? means the state is not
known — the server cannot see what is in the field — and
renders as a neutral bullet rather than a ✓ or a ✗.
Returns:
Hiccup list item with status indicator
Pure: true(password-requirements-list violations policy)Display list of password requirements with current status.
Args: violations - vector of violation maps from meets-password-policy?, or nil when nothing has been checked. nil is not an empty list: a password box is never pre-filled, so on a re-render the server has no idea what is in it, and the rules render as neither met nor unmet. Reading nil as "no violations" ticked every rule green above an empty field (BOU-381). policy - password policy configuration map
Returns: Hiccup list of requirements
Pure: true
Display list of password requirements with current status.
Args:
violations - vector of violation maps from meets-password-policy?, or nil
when nothing has been checked. nil is not an empty list: a
password box is never pre-filled, so on a re-render the server
has no idea what is in it, and the rules render as neither met
nor unmet. Reading nil as "no violations" ticked every rule
green above an empty field (BOU-381).
policy - password policy configuration map
Returns:
Hiccup list of requirements
Pure: true(password-strength-indicator violations)Display password strength meter based on violation count.
Args: violations - vector of violation maps
Returns: Hiccup structure for strength meter
Pure: true
Display password strength meter based on violation count. Args: violations - vector of violation maps Returns: Hiccup structure for strength meter Pure: true
(register-form data errors)(register-form data errors password-violations policy)Form for self-service account creation.
Args: data - map with optional :name / :email / :return-to errors - map of field keyword -> vector of error messages password-violations - optional password violations from policy check policy - optional password policy configuration
Form for self-service account creation. Args: data - map with optional :name / :email / :return-to errors - map of field keyword -> vector of error messages password-violations - optional password violations from policy check policy - optional password policy configuration
(register-page & [data errors opts])Complete self-service registration page.
Args: data - form data map (may be empty) errors - validation errors (may be nil) opts - page options (user context, flash messages, etc.)
Complete self-service registration page. Args: data - form data map (may be empty) errors - validation errors (may be nil) opts - page options (user context, flash messages, etc.)
(result-badge result)Display result status with appropriate styling.
Args: result - keyword result (:success or :failure)
Returns: Hiccup span with styled badge
Pure: true
Display result status with appropriate styling. Args: result - keyword result (:success or :failure) Returns: Hiccup span with styled badge Pure: true
(session-row session current-token user-id current-time zone-id)Single row in the sessions table.
Args: session - session map with :token, :ip-address, :user-agent, :created-at, :last-active current-token - the current session token (to mark current session) user-id - user ID for action URLs
Returns: Hiccup table row
Pure: true
Single row in the sessions table. Args: session - session map with :token, :ip-address, :user-agent, :created-at, :last-active current-token - the current session token (to mark current session) user-id - user ID for action URLs Returns: Hiccup table row Pure: true
(sessions-list sessions current-token user-id current-time zone-id)Table displaying all user sessions.
Args: sessions - collection of session maps current-token - the current session token user-id - user ID for action URLs
Returns: Hiccup table
Pure: true
Table displaying all user sessions. Args: sessions - collection of session maps current-token - the current session token user-id - user ID for action URLs Returns: Hiccup table Pure: true
(user-created-success user)Generate success message for user creation based on User schema.
Args: user: Created User entity map
Returns: Hiccup structure showing success message
Generate success message for user creation based on User schema. Args: user: Created User entity map Returns: Hiccup structure showing success message
(user-deleted-success user-id)Generate success message for user deletion.
Args: user-id: ID of deleted user
Returns: Hiccup structure showing success message
Generate success message for user deletion. Args: user-id: ID of deleted user Returns: Hiccup structure showing success message
(user-detail-form user)(user-detail-form user errors)(user-detail-form user errors opts)Generate a form for viewing/editing user details based on User schema.
Args: user: User entity map (from User schema) errors: Optional validation errors map, field keyword -> messages opts: Optional map; :notice is rendered at the top of the form
Returns: Hiccup structure for user detail form
Generate a form for viewing/editing user details based on User schema. Args: user: User entity map (from User schema) errors: Optional validation errors map, field keyword -> messages opts: Optional map; :notice is rendered at the top of the form Returns: Hiccup structure for user detail form
(user-detail-page user & [opts])Complete user detail page.
Args: user: User entity opts: Optional page options (user context, flash messages, etc.)
Returns: Complete HTML page for user details
Complete user detail page. Args: user: User entity opts: Optional page options (user context, flash messages, etc.) Returns: Complete HTML page for user details
(user-row user)Generate user table row data based on User schema.
Args: user: User entity map (from User schema)
Returns: Vector of cell values for table row (some as Hiccup structures)
Generate user table row data based on User schema. Args: user: User entity map (from User schema) Returns: Vector of cell values for table row (some as Hiccup structures)
(user-sessions-page user sessions current-token opts)Complete page for managing user sessions.
Args: user - user map sessions - collection of session maps current-token - the current session token opts - page options (user context, flash messages, etc.)
Returns: Complete page hiccup
Pure: false
Complete page for managing user sessions. Args: user - user map sessions - collection of session maps current-token - the current session token opts - page options (user context, flash messages, etc.) Returns: Complete page hiccup Pure: false
(user-updated-success user)Generate success message for user update based on User schema.
Args: user: Updated User entity map
Returns: Hiccup structure showing success message
Generate success message for user update based on User schema. Args: user: Updated User entity map Returns: Hiccup structure showing success message
(user-validation-errors errors)Generate validation error display for user forms based on User schema.
Args: errors: Map of field -> error messages from user validation
Returns: Hiccup structure for validation errors
Generate validation error display for user forms based on User schema. Args: errors: Map of field -> error messages from user validation Returns: Hiccup structure for validation errors
(users-page users)(users-page users opts)(users-page users total-count opts)Complete users listing page.
Arities:
Args (3-arity): users: Collection of User entities total-count: Total number of users opts: Optional page options (user context, flash messages, etc.) May contain :table-query for sorting/paging and :filters.
Returns: Complete HTML page for users listing
Complete users listing page.
Arities:
- ([users]) ; infer total-count and no extra options
- ([users opts]) ; infer total-count, with page options
- ([users total-count opts]) ; full control
Args (3-arity):
users: Collection of User entities
total-count: Total number of users
opts: Optional page options (user context, flash messages, etc.)
May contain :table-query for sorting/paging and :filters.
Returns:
Complete HTML page for users listing(users-table users)(users-table users table-query total-count)(users-table users table-query total-count filters)Generate a table displaying users based on User schema.
Arities:
Args (3-arity): users: Collection of User entity maps table-query: TableQuery map (sorting/paging) total-count: Total number of users
Returns: Hiccup structure for users table
Generate a table displaying users based on User schema. Arities: - ([users]) ; basic table with default sorting, no query params in hx-get - ([users table-query total-count]) ; full control for paging/sorting - ([users table-query total-count filters]) ; with search filters Args (3-arity): users: Collection of User entity maps table-query: TableQuery map (sorting/paging) total-count: Total number of users Returns: Hiccup structure for users table
(users-table-fragment users table-query total-count)(users-table-fragment users table-query total-count filters)Generate just the users table container fragment (for HTMX refresh).
Args: users: Collection of User entity maps table-query: Normalized TableQuery (see wagoe.platform.shell.web.table) total-count: Total number of users filters: Optional map of parsed search filters (see wagoe.platform.shell.web.table)
Returns: Hiccup structure for users table container (no page layout)
Generate just the users table container fragment (for HTMX refresh). Args: users: Collection of User entity maps table-query: Normalized TableQuery (see wagoe.platform.shell.web.table) total-count: Total number of users filters: Optional map of parsed search filters (see wagoe.platform.shell.web.table) Returns: Hiccup structure for users table container (no page layout)
(web-root-page & [opts])Landing page shown at /web — logo, welcome message, and login link.
Args: opts: Optional page options (flash messages, etc.)
Returns: Complete HTML page structure
Landing page shown at /web — logo, welcome message, and login link. Args: opts: Optional page options (flash messages, etc.) Returns: Complete HTML page structure
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |