MARKETPLACE
PLUGINS
1T - DROPDOWN & POPOVER
1T - Dropdown & Popover logo

1T - Dropdown & Popover

Published June 2023
   •    Updated today

Plugin details

1T Dropdowns v2.2.0: searchable dropdowns, multiselects, and now popover menus and drawers for Bubble. All set up and styled from the property editor.
NEW IN v2.2.0

1T - Dropdown v2 (use this for new work)
One element for single select, multiselect, and server-side search.
- Bind a "Search for" directly: pick the data type, the list, and the field to show. Each Thing becomes an option. No JSON formatting.
- Or use Options JSON with "text" and "value", plus an optional image, secondary text, and badge per option, and option groups.
- Multiselect with removable chips and an optional Maximum selections.
- Server-side search for large tables: the element waits while the user types, fires "Search changed", and you return results with "Set options".
- Let users create an option when nothing matches.
- Colors, borders, fonts for control, options, and chips, image size and shape, and panel placement, all in the editor.
- Selections come back as your Bubble data type. Keyboard and screen reader support built in.

1T - Popover
Open any Bubble Group as a menu or drawer, no custom code.
- Anchored beside a trigger (account menus, row actions), or a Bottom, Right, or Responsive drawer.
- Modal mode, nested drawers, close on Escape or outside click, focus returned to the trigger.
- Works in repeating groups, one popover per row, tested with 100 rows.
- Open, Close, and Toggle actions, "Is open" state, "Opened" and "Closed" events.

Also: pages that do not use the original elements no longer load the dropdown library, so they load lighter.

BACKWARDS COMPATIBILITY
1T - Dropdown, 1T - MultiSelect, and 1T - Dropdown (API) are unchanged: same fields, same states, same code. Existing pages keep working. As always, please test your pages after updating.

BROWSER SUPPORT FOR THE NEW ELEMENTS
1T - Dropdown v2 and 1T - Popover rely on native Popover and CSS Anchor Positioning. There is no fallback: a browser without them shows a short message instead of the element. We have verified them in Chromium-based browsers (Chrome, Edge), not yet in Safari or Firefox. The original elements are not affected. Check your users' browsers before moving a production page to the new elements.

WHO BUILDS IT
Built and maintained by Eli Beachy and Rico Trevisan. Rico, creator of Pled (a local build tool for Bubble plugins), joined the project for this release and built the two new elements.

$50

One time  •  Or  $20/mo

5.0 stars   •   4 ratings
427 installs  
This plugin does not collect or track your personal data.

Platform

Web

Contributor details

Eli logo
Eli
Joined 2016   •   11 Plugins
View contributor profile

Instructions

1T DROPDOWNS: SETUP GUIDE
Full documentation and examples: see the documentation link on this page.

WHICH ELEMENT TO USE

- 1T - Dropdown v2: single select, multiselect, and server-side search in one element. Recommended for all new pages.
- 1T - Popover: opens a Bubble Group as an anchored menu or a drawer.
- 1T - Dropdown, 1T - MultiSelect, 1T - Dropdown (API) - [BETA]: the original elements. Unchanged and still supported. Keep using them on existing pages if they work for you.

1T - Dropdown v2 and 1T - Popover need native Popover and CSS Anchor Positioning in the browser. See "Browser support" at the end.

--------------------------------------------------
1T - DROPDOWN V2
--------------------------------------------------

1. ADD THE ELEMENT
Drag "1T - Dropdown v2" onto the page (it is under Input forms). Give it a width; height fits its content.

2. CHOOSE WHERE OPTIONS COME FROM

Option A: Dynamic options (bind a Bubble list)
- Dynamic options type: the data type, for example Client.
- Dynamic options: a list expression of that type, for example "Search for Clients".
- Dynamic options text field: the field key to show as the option label, for example name_text. Enter the field key, not an expression. Keys are never treated as HTML.
Each Thing becomes an option. Its unique id is the option value. While Dynamic options is set, Options JSON is ignored.

Option B: Options JSON (static list or your own expression)
Paste or build a JSON array in "Options JSON":
[{"text":"Draft","value":"draft"},{"text":"Sent","value":"sent"}]
- "text" is the label, "value" is the id. Values must be unique and not empty. Text is never rendered as HTML.
- Optional keys per option: "image" (URL), "secondaryText", "badge".
- Groups: {"label":"Group name","options":[ ... ]}.
- If the JSON is invalid, the element keeps its last good state and sets the "Error message" state. The "Invalid options received" event fires.

3. RETURN DATA TYPE
Set "Return data type" to the data type your values represent. Values must be Bubble unique ids for this to work. The "Selected option" and "Selected options" states then return real Things. If your values are plain text, leave it empty and use "Selected value" / "Selected values" instead.

4. SINGLE OR MULTIPLE
- Leave "Allow multiple selections" off for a single select. Use "Default value" for the initial selection.
- Turn it on for a multiselect with removable chips. Use "Default values" for the initial list. "Maximum selections" caps the list (0 or empty = unlimited).

5. BASIC OPTIONS
Placeholder, Searchable, Clearable, Input is disabled, No-results text, Accessible label (the name screen readers announce, for example "Assignee").

6. SERVER-SIDE SEARCH (large data sets)
Turn on "Server-side search". The element stops filtering locally. Then:
- Set "Minimum characters" and "Search debounce (ms)" to control when "Search changed" fires. "Loading text" shows while you fetch.
- Add a workflow: When 1T - Dropdown v2's "Search changed" runs, do "Set options" on the element.
- In "Set options", either pass "Things type" + "Things" (for example Search for Clients with a constraint on the element's "Search term" state) + "Text field", or pass "Options JSON". Pass the element's "Search term" into the action's "Search term" so late results for an old query are discarded.

7. LET USERS CREATE OPTIONS
Turn on "Allow creating options". When a typed term has no match, the user can add it. The trimmed term becomes both text and value. The "Option created" event fires, and "Created option text" / "Created option value" hold what was added. Use that event to save the new record.

8. PLACEMENT AND STYLING
- Preferred placement: Auto, Down, Up, Right, Left, Bottom span-right, Right span-bottom. "Panel alignment" refines the side. Advanced users can set "Custom position-area" and "Custom position fallbacks" (CSS values).
- Colors: Background, Border, Placeholder, Focus, Active option background, Selected option background, Disabled background and text, Secondary text, Badge, Multi-select chip.
- Border width and radius, Item image size, shape, and fit.
- Fonts: family, size (pixels), and weight for the control, the options, and the chips. Empty fields inherit: options from the control, chips from options.

STATES
Selected option, Selected value, Selected label, Selected options, Selected values, Selected labels, Selection count, Search term, Is open, Is disabled, Is loading, Error message, Created option text, Created option value.

EVENTS
Selection changed, Selection cleared, Opened, Closed, Search changed, Invalid options received, Option created.

ACTIONS
Set selected value, Set selected values, Add selected value, Remove selected value, Clear selection, Set options, Open, Close, Focus, Reset.

--------------------------------------------------
1T - POPOVER
--------------------------------------------------

The popover does not draw its own content. It takes a Group you already built and opens it beside a trigger or as a drawer.

1. BUILD THE PIECES
- A trigger: any Bubble element (button, icon, group). Give it an ID Attribute, for example btn-account.
- A content Group: build it as normal, leave it visible on page load, and give it an ID Attribute, for example grp-account. The plugin hides it and shows it when opened.
- Drag "1T - Popover" onto the page (under Visual elements). It can be small; it is not visible at run time.

2. CONNECT THEM
- Instance key: a unique name for this popover, for example account.
- Trigger ID: btn-account
- Content ID: grp-account
- Open on trigger click: on by default. Turn it off if you only open it from workflows.

3. PICK A DISPLAY MODE
- Anchored: opens next to the trigger, like a Group Focus. Set "Preferred placement" with a CSS position-area value, for example bottom span-right (below, left edges aligned) or right span-top. "Position fallbacks" lists what to try if it does not fit; enter none to disable. "Gap" is the space from the trigger in pixels.
- Bottom drawer: slides up from the bottom of the window, centered.
- Right drawer: fills the height of the window against the right edge.
- Responsive drawer: Right drawer on wide screens, Bottom drawer at or below "Mobile breakpoint" (default 640).

4. SIZE AND BEHAVIOR
- Width mode: Fixed, Trigger, or Content. Drawers always use "Width".
- Width, Maximum height, Viewport inset.
- Scroll body ID: the ID of an inner Group that should scroll while the header and footer stay put.
- Modal: dims the page, locks scrolling, and keeps focus inside until closed. Works with any display mode. Required for nested drawers.
- Close on Escape, Close on outside click, Restore focus (return focus to the trigger after closing).
- Accessible label: the dialog name for screen readers.

5. NESTED DRAWERS
Open a drawer from inside another: set the child's "Parent instance key" to the parent's Instance key. Both must be modal drawers. Escape and outside click close only the top level.

6. REPEATING GROUPS
Put the trigger, the content Group, and the 1T - Popover element inside the cell. Give the cell's group an ID Attribute and enter it in "Scope ID" on the popover. Each row then gets its own popover with the same Instance key, Trigger ID, and Content ID.

STATES
Is open, Error message.

EVENTS
Opened, Closed, Configuration error (fires when IDs do not resolve or a setting is invalid; read "Error message").

ACTIONS
Open, Close, Toggle.

--------------------------------------------------
ORIGINAL ELEMENTS: 1T - DROPDOWN, 1T - MULTISELECT, 1T - DROPDOWN (API)
--------------------------------------------------

These elements are unchanged in this release.

- Add the element to the page and size it.
- Return data type: the type of data you want the "Selected option" (or "Selected options") state to return.
- Options: a JSON array with "text" and "value" keys, for example [{"text":"value1","value":"value1id"},{"text":"value2","value":"value2id"}].
- For dynamic data, do a search and use the "format as text" operator on the results to build that JSON array, then put the expression in "Options".
- For static data, paste the JSON array directly into "Options".
- "value" is the unique id used to set the selected state. For a custom data type use the record's Unique ID. For an option set use the Display attribute. For plain text use any value that makes sense for you.
- 1T - Dropdown (API) - [BETA] fetches options from an endpoint instead: it makes a GET request with "search" (what the user typed) and "value" (the default value) parameters. Return the same JSON array.

--------------------------------------------------
BROWSER SUPPORT
--------------------------------------------------

1T - Dropdown v2 and 1T - Popover require native Popover and CSS Anchor Positioning. There is no fallback for browsers that lack them: 1T - Dropdown v2 shows a short message in place of the control, and 1T - Popover reports the problem in its "Error message" state. We have verified the new elements in Chromium-based browsers (Chrome, Edge). We have not yet verified Safari or Firefox. The original three elements are not affected.

--------------------------------------------------
UPDATING
--------------------------------------------------

Updating to v3.0 does not change the original elements. Pages that use them keep working. Pages without them no longer load the dropdown library, which makes those pages lighter. Please test your pages after updating.

Built and maintained by Eli Beachy and Rico Trevisan.

Types

This plugin can be found under the following types:
Background Services   •   Element   •   Event   •   Action

Categories

This plugin can be found under the following categories:
Data (things)   •   Media   •   Small Business   •   Mobile   •   Productivity   •   Input Forms   •   Visual Elements

Resources

Support contact
Documentation
Tutorial

Rating and reviews

Average rating (5.0)

Really well built and functional plugin
October 17th, 2024
I use it for all my apps. It's a great plugin that can be use for simple lists but the magic happens with advanced formatting.
The best dropdown plugin on the market
January 14th, 2024
This plugin rocks. It's enabled me to remove multiple complex custom reusable dropdowns and replace them with a simple, fast and elegant element. Highly recommend this plugin.
Great dropdown
December 4th, 2023
I really like this tool, but there is one issue, maybe it's me who is making something wrong, but I tried a couple of things . I want to change value of the dropdown using set selected value. let's say I have a option {"text": "Google", "value": 49}. while setting up selected value via action I'm putting only the value 49 and it's not working, I also tried to put the whole option object just in case.
Simply fantastic!
July 7th, 2023
It offers tons more possibilities than the default Bubble element, both in terms of features and graphics. Very clear documentation complemented also by an explanatory step-by-step video. Virtually endless possibilities for expansion using the underlying library options - very easy to implement. Only two limitations: you cannot select multiple options (multiselect) and you cannot use the "(virtual) data types" of the Api Connector as options. But these are both things the author said he is working on and should be available in version 2, so this remark of mine will (hopefully soon) become obsolete.
Bubble