Gallery › Filters › Kinds

Filter kinds

Each kind is one facets: entry, {property, as: <kind>, …options}, and every kind edits the same Bases filters tree, so a pick shows in every view and what the rail cannot draw stays as a custom clause. An unknown kind draws as values with a warning. Options common to all: label, info (the ⓘ), diagram, collapsed. The snippets below are cut from this case's views.base. Sites accessed 2026-10-26.

values copies Algolia refinementList

checkboxes with counts, "Show N more", a find box over a long list; counts are disjunctive. Options: label, limit, sort (count | alpha | value), searchable, exclude. Try it: ?brand=Steadywin,CubeMars

facets:
  - { property: brand, as: values, exclude: true, label: Brand, searchable: true }

values + exclude copies Kibana's filter pills, Exclude results

a ⊘ beside each value writes {not: [p == v]}; the value is struck through. Options: exclude: true. Try it: ?brand!=KST,Feetech

facets:
  - { property: brand, as: values, exclude: true, label: Brand, searchable: true }

select copies Algolia menu / menuSelect

one value or Any, as radio buttons or (dropdown: true) a select. Options: any, dropdown, limit, sort. Try it: ?in_stock=no

facets:
  - { property: in_stock, as: select, label: Stock }

toggle copies Algolia toggleRefinement

a switch for one value ("In stock only", "Has CAD"); Algolia's on is value: here. Options: value (default true), text. Try it: ?in_stock=yes

facets:
  - { property: in_stock, as: toggle, value: "yes", text: In stock only }

has copies Tableau quick filters' Special (null / non-null)

has a value, for one property or a group, matching all of or any of. Options: properties, match (all | any). Try it: ?hasany=photo,price

facets:
  - { property: photo, as: has, properties: [photo, torque_density, price], label: Has data, match: all }

range copies Algolia rangeInput; Zillow's min / max dropdowns (choices:)

min and max boxes (dates on a date property), or dropdown pairs of round numbers. Options: unit, choices, diagram. Try it: ?price=100..500

facets:
  - { property: price, as: range, choices: [25, 50, 100, 250, 500, 1000, 2500], label: Price (min / max) }

slider copies Algolia rangeSlider; WAI-ARIA multi-thumb slider

two thumbs on one rail; arrows and Page Up / Down move a thumb, release applies. Options: log, unit. Try it: ?mass=..1800

facets:
  - { property: mass, as: slider, log: true, label: Mass }

slider-histogram copies Airbnb's price filter

the distribution above the slider; bars outside the range dim; a bar's count on hover. Options: log, bins, unit. Try it: ?peak_torque=10..

facets:
  - { property: peak_torque, as: slider-histogram, log: true, label: Peak torque }

buckets copies Algolia numericMenu; Amazon's price bands

preset ranges as chips, p >= a and p < b; edges given or nice ones from the data. Options: buckets ([edges] or [{label, min, max}]), log, unit. Try it: ?price=50..<100

facets:
  - { property: price, as: buckets, buckets: [50, 100, 250, 500], unit: USD, label: Price }

rating copies Algolia ratingMenu (Amazon's "& Up")

★★★☆☆ & up, top level first, each with its count. Options: max, min, style. Try it: ?level=2..

facets:
  - { property: level, as: rating, max: 5, label: robotparts level }

min-level copies Algolia ratingMenu, drawn as steps

"Level ≥ N" for robotparts' levels. Options: max, min. Try it: ?level=4..

facets:
  - { property: level, as: min-level, max: 5, label: Level }

date copies Tableau relative date filters

from / until boxes, "Last 7 days" presets and "Older than" for staleness (stored as ISO dates). Options: presets, older. Try it: ?listed=..<2026-10-12

facets:
  - { property: listed, as: date, presets: [7d, 30d, year], older: [14d, 90d], label: First listed }

chips copies Linear's label filter

pressable chips for a list property's tags, any of them. Options: limit, sort. Try it: ?buses=can,ethercat

facets:
  - { property: buses, as: chips, label: Bus }

swatch copies Shopify filter presentation SWATCH / IMAGE

a logo or colour per value with its count; a monogram where there is none. Options: images, image, colors, columns. Try it: ?brand=Steadywin

facets:
  - property: brand
    as: swatch
    label: Brand (logos)
    limit: 12
    images:
      Steadywin: logos/steadywin.webp
      Damiao: logos/damiao.webp
      JMC: logos/jmc.webp

picture-list copies McMaster-Carr's "Threading" list

a small drawing beside each value. Options: images, image. Try it: ?drivetrain=direct_drive

facets:
  - property: drivetrain
    as: picture-list
    label: Drivetrain
    images:
      geared: icons/drivetrain-geared.svg
      direct_drive: icons/drivetrain-direct_drive.svg
      motor: icons/drivetrain-motor.svg

grid copies McMaster-Carr's "Thread Pitch" grid

compact values in columns, no checkboxes, click to pick. Options: columns, sort, limit, searchable. Try it: ?gear_ratio=9,10

facets:
  - { property: gear_ratio, as: grid, columns: 3, sort: value, limit: 15, label: Gear ratio, info: "Output turns per motor turn; 1 is direct drive." }

diagram (any kind) copies McMaster-Carr's dimension drawings ("Head Diameter")

a drawing at the top of a facet showing which dimension it filters. Options: diagram. Try it: ?od=50..100

facets:
  - { property: od, as: range, diagram: diagrams/od.svg, label: Outer diameter, info: "Across the actuator's face, housing to housing; not the output flange." }

listbox copies Digi-Key's parametric columns

a native multi-select list: click, Ctrl-click, Shift-range; a stack of them is Digi-Key's grid. Options: size, sort, searchable. Try it: ?voltage=24,48

facets:
  - { property: voltage, as: listbox, sort: value, label: Voltage }

tree copies Algolia hierarchicalMenu

form › brand: a level opens under its pick; deeper counts apply the levels above. Options: levels, limit, sort. Try it: ?form=hobby servo&brand=Feetech

facets:
  - { property: form, as: tree, levels: [form, brand], label: Form › brand }

current copies Algolia currentRefinements + clearRefinements

every pick as a removable chip, "+N custom", Clear all. Options: label. Try it: ?brand=Steadywin&buses=can

facets:
  - { as: current, label: Current filters }

Also looked at

Obsidian Bases filtersthe stored model: and / or / not over expressions; the rail edits its facet-shaped part (the Obsidian recipe)
Notion filterssimple filters promote to an advanced group; data-ui's Filter menu is that builder
Datasette facetsthe readable URL: col=value per pick
Shopify storefront filteringcomma lists OR within a filter, filters AND together; .gte / .lte bounds (data-ui writes a..b)
Algolia routing URLsstate -> route -> URL, flat keys rather than nested brackets
WAI-ARIA listboxthe listbox's keyboard: the native select multiple already does it
Octopart parametric searcha numeric parameter opens a range slider; the URL is hand-editable (secondary source)
Kayak time-of-day slidersnot built: no time-of-day column in the data; slider covers it when one exists
PCPartPickernot reached (403); its sliders and "show all" lists are covered by slider and values
Zillow / Redfinnot reached (403); their min / max dropdown pairs are range with choices:, from memory