canonrs-server 0.1.0

CanonRS server-side rendering support
id: select
label: Select
family: family-c-forms
category: Form
intent: Choose one option from a list
description: Dropdown select input
composable: true
capabilities: OpenClose, Disabled
required_parts: ["SelectTrigger", "SelectContent", "SelectItem"]
optional_parts: ["SelectValue", "SelectSeparator"]
tags: ["select", "dropdown", "choose", "options", "list", "combo"]
keywords: 
pain: Select components require manual state sync between trigger and options
promise: Selection, visibility and interaction fully governed by structure
why: |
  SelectPrimitive encodes open state, selection and disabled behavior via data attributes. Trigger and content are synchronized without id wiring. This guarantees consistent dropdown behavior.
rules: ["CR-001", "CR-004"]
use_cases: ["forms", "filters"]
related: ["combobox", "radio", "radio_group", "color_picker", "slider"]
file: select_ui.css
tokens: select-*, size-*, space-*, radius-*, border-*, shadow-*, font-*, motion-*
foundation: spacing, size, radius, border, shadow, motion, typography
states: ["open", "closed", "selected", "disabled"]
island: select_boundary.rs
pillar: select
badges: ["SSR Safe", "Hydration Safe", "Token Driven", "Deterministic API", "Zero Drift"]
before: |
  // ❌ Typical
  view! {
    <select>
      <option>"A"</option>
    </select>
  }
after: |
  // ✅ CanonRS
  view! {
    <Select>
      <SelectTrigger>
        <SelectValue placeholder="Select..." />
      </SelectTrigger>
      <SelectContent>
        <SelectItem value="a">"A"</SelectItem>
      </SelectContent>
    </Select>
  }
boundary_type: interaction
ix_group: ix_selection
block: []
blocks_primitives: [stack]