• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
noche

noche

selectizeInput

Public
Like
selectizeInput
Home
Code
6
backend
4
shared
1
AGENTS.md
README.md
deno.json
H
selectizeInput.http.ts
Environment variables
Branches
1
Pull requests
Remixes
History
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
README.md
Code
/
README.md
Search
2/2/2026
Viewing readonly version of main branch: v11
View latest version
README.md

selectizeInput

Widget selector reutilizable, agnóstico del lenguaje cliente (R, Python). Expone un contrato declarativo y transforma inputs heterogéneos en HTML autocontenido. Val Town no mantiene estado: solo transforma inputs en HTML.

Flujo: configuración → normalización → validación → render.

Contrato (inputs externos)

Lo que R y Python pueden enviar por POST con body JSON:

CampoTipoRequeridoDescripción
inputIdstring | nullNoId del control (default: "selectize")
choicesver abajoSíOpciones: vector, lista de {value, label?}, o diccionario nombrado
selectedstring | string[] | nullNoValor o valores seleccionados (default: [])
min_itemsnumber | nullNoMínimo de ítems seleccionables (default: 0)
max_itemsnumber | nullNoMáximo (default: número de opciones)

Formas de choices

  • Vector simple: ["a", "b", "c"] → value y label iguales.
  • Lista de objetos: [{ "value": "a", "label": "A" }, ...] → label opcional (si falta, se usa value).
  • Diccionario nombrado: { "a": "A", "b": "B" } → clave = value, valor = label.

Se tolera NULL/None en campos opcionales.

Uso

  • POST /widget: body JSON con el contrato anterior. Respuesta: HTML del widget o 400 con { "code", "message" }.
  • GET /widget: para pruebas; parámetros por query (choices, selected, inputId, min_items, max_items). choices y selected en JSON string.

Validación

  • min_items ≤ max_items.
  • max_items ≤ número de opciones.
  • Cada valor en selected debe estar en choices.
  • Cantidad de seleccionados entre min_items y max_items.

Errores tempranos con códigos: MIN_MAX_INCOHERENT, MAX_EXCEEDS_OPTIONS, INVALID_SELECTION, BELOW_MIN_ITEMS, ABOVE_MAX_ITEMS.

Estructura

  • shared/types.ts: contrato y modelos internos.
  • backend/normalize.ts: RawInput → NormalizedModel.
  • backend/validate.ts: reglas de negocio.
  • backend/render.ts: RenderModel → HTML autocontenido.
  • backend/index.ts: app Hono y ruta /widget.
  • selectizeInput.http.ts: entry point HTTP (export default app.fetch).

Ejemplo R (body JSON)

body <- list( inputId = "mi_selector", choices = list(a = "Opción A", b = "Opción B", c = "Opción C"), selected = c("a", "b"), min_items = 1L, max_items = 3L ) httr::POST("https://.../widget", body = body, encode = "json")

Ejemplo Python (body JSON)

import requests payload = { "inputId": "mi_selector", "choices": {"a": "Opción A", "b": "Opción B", "c": "Opción C"}, "selected": ["a", "b"], "min_items": 1, "max_items": 3, } requests.post("https://.../widget", json=payload)
FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
© 2026 Val Town, Inc.