Skip to content
CAI
Software that uses CAICheck a score

maxmarcon/live_select

55.2

Adequate · 18 September 2026

2.6k

lines of production code

Elixir

with JavaScript

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Phoenix LiveView library that provides a customizable autocomplete dropdown component for single and multi-select inputs. It integrates with Tailwind CSS and DaisyUI for styling, manages client-side interactions via JavaScript hooks, and supports real-time updates through server-side events. The project also includes a showcase application and comprehensive test suites to demonstrate usage and ensure reliability.

Features

Initial application configuration structure

The application now includes a standard Phoenix configuration structure with \config.exs\, environment-specific files (\dev.exs\, \test.exs\, \demo.exs\, \runtime.exs\), and runtime logic for selecting the JSON library based on the Elixir version. This establishes the baseline configuration for the LiveSelect application, including endpoint settings, logger formats, and asset build tools (esbuild, tailwind) for development and testing environments.

config · high confidence

Initial project scaffolding and configuration

The repository is initialized with essential configuration files for the LiveSelect library, including \.credo.exs\ for code linting, \.formatter.exs\ for Elixir/Phoenix formatting, and \.tool-versions\ specifying Elixir 1.17.3 and Erlang 27.1.3. Deployment and development infrastructure is added via \Dockerfile\, \fly.toml\, and \.dockerignore\. Comprehensive documentation is introduced, including \README.md\, \CHANGELOG.md\, \styling.md\, and \cheatsheet.cheatmd\, detailing usage, styling options, and implementation examples.

(repo-wide) · high confidence

Initial release of LiveSelect JavaScript assets

This change introduces the initial version of the LiveSelect client-side JavaScript library (live\_select.min.js) and a standard robots.txt file. The JavaScript hook implements the interactive behavior for the LiveSelect component, including debounced input handling, keyboard navigation (Enter key), mouse interaction for selecting and removing options, and styling for clear buttons. It also manages form input events (dispatching input events to single-mode text inputs, empty-state inputs, or hidden inputs) and communicates selection changes and scroll-to-view requests back to the server via Phoenix LiveView events.

priv/static · high confidence

Initial release of LiveSelect component

Introduces the LiveSelect component, a Phoenix LiveView helper that provides a text input with an autocomplete dropdown. It supports single selection, multi-select via tags, and a 'quick tags' mode where the dropdown remains open. The component allows for customizable options (atoms, strings, maps, keywords), styling via Tailwind or DaisyUI, and programmatic control of the selection state. It emits a \live\_select\_change\ event for real-time updates and integrates with standard Phoenix forms for submission.

lib · high confidence

Initial release of LiveSelect component with theme persistence and accessibility improvements

This change introduces the LiveSelect JavaScript component (assets/js/live\_select.js) and its application entry point (assets/js/app.js). The component provides a selectable input interface that debounces input events, handles single and multi-select modes via hidden or text inputs, and supports keyboard accessibility for removing tags. The application entry point integrates this component into the Phoenix LiveView socket, adds a dark-mode toggle that persists the user's theme preference in localStorage and syncs it with the server, and includes a clipboard copy feature with a temporary tooltip notification.

assets/js · high confidence

Initial setup of Tailwind CSS, DaisyUI, and loading indicator

The assets directory now includes a new CSS entry point (\app.css\) and Tailwind configuration (\tailwind.config.js\) that integrates the DaisyUI and Typography plugins, enabling class-based dark mode support. A vendor copy of the \topbar.js\ library is added to provide a visual page-loading progress bar, and the CSS file defines standard LiveView-specific utility classes for feedback states and modal overlays.

assets · high confidence

New Mix task to document default styles

A new Mix task, \dump\_style\_table\, has been added to generate a Markdown table of the default CSS classes used by the LiveSelect component. This tool helps users understand the styling options available for different elements, including class override and extension options, by extracting and formatting style data from the component's default options.

lib/mix · high confidence

New showcase and component demo applications for LiveSelect

The library now includes a dedicated showcase application and a live component demo to help users explore and configure LiveSelect features. The showcase app provides a visual interface for testing various modes (single, tags, quick\_tags), styling options (Tailwind, DaisyUI, none), and settings like dark mode, debouncing, and custom clear buttons. The new live component demo illustrates how to integrate LiveSelect within Phoenix LiveComponents, including the use of custom slots for options and tags, and handling form submissions. These additions serve as interactive documentation and testing grounds for the library's capabilities.

_lib/support/live\_select\web/live · high confidence

Security

Showcase app now enforces strict Content Security Policy

The LiveSelect showcase application now includes a strict Content Security Policy (CSP) header (\default-src 'self'\) applied to all browser requests. This change enhances the security posture of the demo environment by restricting resource loading to the same origin, mitigating potential cross-site scripting (XSS) and data injection attacks within the showcase context.

_lib/support/live\_select\web · high confidence

Behavioural changes

Enable LiveSelect server mode by default in release scripts

The release entry-point scripts (server and server.bat) now automatically set the PHX\_SERVER environment variable to true before starting the application. This ensures that the LiveSelect library initializes its server component by default when the release is run, removing the need for manual environment configuration to use LiveSelect features in production or deployed environments.

rel · high confidence

Extracts Phoenix web infrastructure into a shared support library

The \lib/support\ directory now contains the foundational Phoenix web stack, including the OTP application supervisor, a \CityFinder\ GenServer for city lookups, and the \LiveSelectWeb\ module that defines macros for controllers, live views, and components. This change consolidates web-related code, such as error HTML/JSON handlers and verified route helpers, into a reusable support layer, decoupling the core library logic from the Phoenix web interface implementation.

lib/support · high confidence

Introduce Tailwind and DaisyUI styling modes with granular CSS class control

The LiveSelect component now supports two built-in visual themes—Tailwind and DaisyUI—replacing the previous default style. Users can switch themes via the \style\ option and customize specific UI elements (such as the container, dropdown, tags, and clear buttons) by passing dedicated class options like \text\_input\_class\, \tag\_class\, or \clear\_button\_class\. A new utility module handles class merging and override logic (using \!\ prefixes), allowing for precise styling adjustments without breaking the default theme structure.

_lib/live\select · high confidence

Migrate layout templates to LiveView 1.0 function components

The application's layout structure has been updated to support LiveView 1.0 by replacing the previous \phoenix\_view\ approach with function component templates. The new \LiveSelectWeb.Layouts\ module uses \embed\_templates\ to render \app.html.heex\ and \root.html.heex\. These templates now utilize LiveView's native syntax, including \@inner\_content\ for slotting content and the \.live\_title\ component for dynamic page titles, ensuring compatibility with the latest LiveView standards.

_lib/support/live\_select\web/components · high confidence

Test coverage

Added test coverage for LiveSelect component and utility functions; Added test support infrastructure for LiveSelect; Initial test suite for LiveSelect component.

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 55.

Lenses

  • Code Health 97
  • Architecture 94
  • Maturity 57
  • Readiness 54
  • Security 81
  • Accessibility 46

Changes since last survey

  • 300 commits — 263 feature/other, 37 fixes

By area

  • (root) — 95 commits
  • lib/live_select — 49 commits
  • lib/support — 36 commits
  • lib/live_select.ex — 30 commits
  • assets/js — 26 commits
  • (repo) — 24 commits
  • .github/workflows — 11 commits
  • priv/static — 7 commits
  • test/live_select — 4 commits
  • test/support — 4 commits
  • test/live_select_quick_tags_test.exs — 3 commits
  • test/live_select_tags_test.exs — 3 commits
  • test/live_select_test.exs — 3 commits
  • .github/ISSUE_TEMPLATE — 2 commits
  • assets/package.json — 2 commits
  • test/test_helper.exs — 1 commit

Notable commits

  • fix: Add fix for single mode.
  • fix: Add tests for quick_tags and fix failing tags tests
  • fix: Can't remove items in quick_tags mode fixes #94
  • fix: Fix crash with key :disabled not found
  • fix: Fix example in cheatsheet.cheatmd
  • fix: Fix focus issue on first select
  • fix: Merge pull request #127 from mcass19/fix-nil-value-in-selection-list
  • fix: Merge pull request #76 from Munksgaard/fix-75
  • fix: Merge pull request #82 from arconautishche/fix-restore-selection
  • fix: Merge pull request #91 from kianmeng/fix-typos-again
  • fix: Merge pull request #97 from atcherry/fix-reconnected-pushto
  • fix: Merge pull request #99 from thoroai/fix/use-universal-encode-function
  • fix: Revert "update to daisyui 3"
  • fix: fix Error: key :label not found in :nil Fixes #125
  • fix: fix bug causing dropdown to overlfow container
  • fix: fix compiler warning
  • fix: fix compiler warnings
  • fix: fix credo complaint
  • fix: fix decoding of form values
  • fix: fix docs
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

maxmarcon/live_select was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 222b8c89f2868c3096e933adff445655d522cfda — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.