Create a responsive UI block named "Column Time Picker" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#column-time-picker. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: column-time-picker
- Source description: Time field with a dropdown of hour, minute and AM/PM columns plus now and confirm actions.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/column-time-picker.html (repo path: blocks/ui-components/select-menus/iframes/pro/column-time-picker.html)
- Source markup reference:
- partials/pro/finance-tracker/sources/time-picker.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Source content inventory (from the source markup):
- A pill-shaped `bg-surface rounded-full` field holding a borderless `tabular-nums` time input and a round clock button that toggles the dropdown.
- The dropdown is three scrollable columns divided by `divide-dropdown-divider`: 12 hours, minutes in five-minute steps, and AM/PM.
- Every column entry is a radio styled as a button through `has-checked:bg-primary` — they are inputs, not buttons, so the selection is real form state.
- Each column is `max-h-56 overflow-y-auto` with a slim styled scrollbar, so the three columns scroll independently.
- A footer separated by `border-t border-dropdown-footer` carries a text-only `Now` action on the left and a primary `OK` on the right.
- The dropdown opens upward (`[--placement:top-right]`) with `[--strategy:fixed]` and `[--auto-close:inside]`, so picking hour, minute and meridiem does not dismiss it.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.
Create a responsive UI block named "Currency Select Button with Search" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#currency-select-button-with-search. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: currency-select-button-with-search
- Source description: Rounded button trigger opens a searchable currency list with flag icons and code labels.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/currency-select-button-with-search.html (repo path: blocks/ui-components/select-menus/iframes/pro/currency-select-button-with-search.html)
- Source markup reference:
- partials/pro/payments-dashboard/selects/currency-button-style.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Pill trigger: `py-1 ps-1.5 pe-7 flex items-center gap-x-1.5 text-nowrap bg-layer border border-layer-line rounded-full text-sm sm:text-base` inside `
`, with a chevron-down at `inset-e-2`; select placeholder copy is `Choose a currency`.
- `"hasSearch": true` with search placeholder `Type a currency`; the search field is sticky at the top of the panel (`bg-select p-2 -mx-1 sticky top-0`).
- Exactly three options after the hidden ``, in order `USD`, `GBP`, `EURO`, each with a right-aligned muted description: `United States Dollar`, `British Pound`, `EUR`.
- `USD` is selected on first load.
- Each row leads with a real `size-4 rounded-full` country flag PNG from the `svg-country-flags` package (`us.png`, `gb.png`, `eu.png`) - not emoji, initials, or generic icons.
- Dropdown is `w-72 max-h-72 p-1 pt-0 space-y-0.5 z-80 rounded-xl shadow-xl` with thin custom scrollbar utilities and `py-2 px-4 text-sm rounded-lg` rows. Closed by default - the preview iframe force-opens it via `HSSelect.getInstance("#hs-pro-select-currency").open()`, which is demo chrome.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.
Create a responsive UI block named "View Mode Select" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#view-mode-select. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: view-mode-select
- Source description: Compact select swaps between layout modes through icon-labeled option rows.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/view-mode-select.html (repo path: blocks/ui-components/select-menus/iframes/pro/view-mode-select.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-view.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Placeholder copy is `View`; the toggle template renders `` plus the title on a ghost button `py-1.5 px-2.5 inline-flex justify-center items-center text-start text-foreground text-[13px] rounded-lg align-middle hover:bg-surface-hover focus:bg-surface-focus`, inside `
`.
- Exactly three options after the hidden ``, in order: `Board`, `Table`, `Timeline`.
- `Table` is selected on first load.
- Each option has a `shrink-0 size-3.5` Lucide-style 24-viewBox outline icon drawn inside an 18x18 `rx="2"` rounded square: three vertical bars for `Board`, a centre divider plus two horizontal rules for `Table`, and three ragged indented lines for `Timeline`.
- Dropdown is `mt-2 z-50 w-36 p-1 space-y-0.5 rounded-xl shadow-xl` with `py-2 px-3 text-sm rounded-lg` rows; the trigger has no chevron/`extraMarkup` and selected rows have no check-mark markup - selection reads only from `hs-selected:bg-select-item-active`.
- The option template reserves a description line but no option supplies one. The source sets `"viewport": "#hs-modal-status-body"` for its host modal - drop or repoint it when standalone. Closed by default; the preview iframe force-opens it as demo chrome.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.
Create a responsive UI block named "Assignee Tag Select" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#assignee-tag-select. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: assignee-tag-select
- Source description: Multi-select turns chosen people into removable tags above the option list.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/assignee-tag-select.html (repo path: blocks/ui-components/select-menus/iframes/pro/assignee-tag-select.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-assignee.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Preline `HSSelect` (`data-hs-select`) in `"mode": "tags"` on a hidden `
Create a responsive UI block named "Tag-Style Multi-Select" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#tag-style-multi-select. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: tag-style-multi-select
- Source description: Multi-select keeps each chosen item as a compact tag while the dropdown stays open for more picks.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/tag-style-multi-select.html (repo path: blocks/ui-components/select-menus/iframes/pro/tag-style-multi-select.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-tag-style.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Preline `HSSelect` in `"mode": "tags"` on a hidden `` inside `
Create a responsive UI block named "Status Select with Color Bars" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#status-select-with-color-bars. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: status-select-with-color-bars
- Source description: Narrow color markers and stacked labels sit inside a compact single-select menu.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/status-select-with-color-bars.html (repo path: blocks/ui-components/select-menus/iframes/pro/status-select-with-color-bars.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-status.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Placeholder copy is `Status`; the trigger is an inline chip on `bg-surface` at `py-1 px-2 rounded-md` whose hover ring is drawn by `after:absolute after:-inset-1 after:rounded-lg hover:after:border-line-2`, and its toggle template renders `` plus the title.
- Six options after the hidden ``, in order: `No status`, `To do`, `In progress`, `Review`, `Completed 👏`, `Product Launch` - the clapping-hands emoji is part of the `Completed 👏` label.
- Each option's marker is a vertical bar `block w-1 h-3 rounded-full` colored `bg-surface-3` (No status), `bg-sky-500` (To do), `bg-orange-500` (In progress), `bg-indigo-500` (Review), `bg-green-500` (Completed 👏), `bg-surface-3` (Product Launch); these are literal status hues, not primary-token roles.
- `In progress` is selected on first load.
- Dropdown is `mt-2 z-50 w-full p-1 space-y-0.5 rounded-xl shadow-xl` with `py-1 px-2 text-sm gap-x-2 rounded-lg` rows and a check icon on the selected row only.
- Single-select, no search field, no avatars, and no option supplies description text even though the option template reserves a slot for it. Closed by default - the preview iframe force-opens it as demo chrome.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.
Create a responsive UI block named "Metric Filter Select" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#metric-filter-select. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: metric-filter-select
- Source description: Lightweight text-only menu keeps one metric active in a short filter list.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/metric-filter-select.html (repo path: blocks/ui-components/select-menus/iframes/pro/metric-filter-select.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-revenue.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Text-style trigger with no border or fill: `-ms-2.5 py-1.5 ps-2.5 pe-6 inline-flex shrink-0 justify-center items-center gap-x-1.5 text-sm text-foreground rounded-lg hover:bg-muted-hover`, inside `
`, with a chevron-down at `inset-e-2`; placeholder copy is `Select option...`.
- Eight options after the hidden ``, in order: `Revenue`, `Total sales`, `New sales`, `Refunds`, `New subscriptions`, `Trial conversion rate`, `Affiliate revenue`, `Affiliate clicks`.
- `Revenue` is selected on first load.
- Rows are plain text only - no icons, avatars, descriptions, badges, or counts; the selected row alone gets a trailing check `polyline points="20 6 9 17 4 12"`.
- Dropdown is `mt-2 z-50 w-48 p-1 space-y-0.5 rounded-xl shadow-xl` with thin custom scrollbar utilities and `py-1.5 px-2 text-[13px] rounded-lg` rows.
- Single-select, no search field, no option groups. Closed by default - the preview iframe force-opens it as demo chrome.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.
Create a searchable country select component named "Country Select with Search" that visually matches the reference as closely as possible. Use the current project's existing framework, styling conventions, tokens, form controls, select/listbox primitives, icons, floating-positioning utilities, and dark-mode strategy. Do not add external UI dependencies just to recreate a select if the project already has an equivalent searchable select/listbox component. Flag assets are separate from the select primitive: the Preline source uses the `svg-country-flags` package, so use that package or the destination project's existing flag asset pipeline for country flags.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#country-select-with-search. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Baseline fidelity gates:
- Preserve exact visible copy, data values, order, hierarchy, and default state unless the user explicitly asks to change them.
- Map semantic token roles to one coherent destination token vocabulary. Every source primary role must use the destination project's primary token/config, never Preline blue or fixed blue palette values unless the destination primary is explicitly blue.
- Verify every emitted utility or component class exists in the destination. Map or define a missing semantic token before use; do not leave any undefined source class in generated markup.
- Use exact source assets, image URLs, inline SVGs, avatars, logos, and brand marks when supplied; do not replace them with placeholders, initials, emojis, generic icons, or alternate stock media.
- Final QA: compare the implementation with the exact anchored Preview and HTML source at mobile and desktop widths, including open/alternate states, assets, layering, focus behavior, and dark mode.
Behavior runtime rule:
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
The details below are derived from the actual source block. Do not infer this from a generic country dropdown, native select, command palette, or language picker. The source is a full-width Preline HSSelect country selector with a sticky search input at the top of the dropdown and flag-led country rows underneath.
Keep the implementation Tailwind-first in Tailwind projects. Use utility classes directly in markup and reuse existing project component classes only when they already exist. Do not create new one-off classes such as `.country-select`, `.country-option`, `.select-menu`, or `@layer components` rules just to style this block.
Preserve source scale/layout utilities where the destination Tailwind setup supports them, and map missing custom scale values to the closest existing project scale or a reusable theme token. Do not replace source scale with scattered arbitrary bracket utilities. Source scale/layout examples for this block include `relative`, `w-full`, `max-w-xs`, `mx-auto`, `py-4`, `xl:py-0`, `px-4`, `xl:px-0`, `xl:mt-3`, `block`, `flex`, `items-center`, `gap-x-2`, `text-nowrap`, `py-1.5`, `sm:py-2`, `ps-3`, `pe-9`, `px-3`, `p-1`, `pt-0`, `p-2`, `-mx-1`, `space-y-0.5`, `max-h-64`, `overflow-hidden`, `overflow-y-auto`, `rounded-lg`, `rounded-xl`, `rounded-md`, `shadow-xl`, `text-sm`, `sm:text-sm`, `size-4`, `size-3.5`, and `z-80`.
Separate Tailwind scale from source token class names. Source token classes such as `bg-transparent`, `border-layer-line`, `text-layer-foreground`, `placeholder:text-muted-foreground-1`, `focus:border-primary-focus`, `focus:ring-primary-focus`, `text-foreground`, `bg-select`, `border-select-line`, `text-select-item-foreground`, `bg-select-item-active`, `bg-select-item-hover`, `bg-select-item-focus`, and `text-muted-foreground-1` describe roles. Map those roles to the destination project's actual token vocabulary. Do not copy Preline-only token names unless those exact classes already exist in the destination project.
Use one token vocabulary consistently. In common Tailwind/shadcn-style projects, use native tokens such as `bg-background`, `bg-popover`, `border-border`, `text-foreground`, `text-muted-foreground`, `bg-accent`, `text-accent-foreground`, `bg-primary`, and `ring-ring` when available. In tokenized Tailwind projects, combine structural utilities with semantic token utilities; do not use raw palette classes like `text-gray-900`, `text-gray-500`, `bg-white`, `bg-gray-50`, `dark:bg-gray-950`, `border-gray-200`, `bg-blue-600`, or `ring-indigo-600` for colors, surfaces, borders, focus rings, hover states, or selected states when semantic tokens exist. In Bootstrap projects, use native Bootstrap components/classes and variables such as `.form-select`, `.form-control`, `.dropdown-menu`, `.dropdown-item`, `.text-body`, `.text-muted`, `.border`, `--bs-primary`, and `--bs-primary-rgb`, including any app override such as a green/teal primary. Do not mix Preline token names, shadcn token names, Bootstrap classes, raw Tailwind palette colors, inline styles, and newly invented token classes in the same component.
Build only this country select and its dropdown/options. Do not append unrelated forms, profile pages, headers, footers, dashboards, marketing sections, language pickers, currency selectors, or extra demo blocks around it.
Overall component:
- The reference preview centers the select in a compact wrapper: body/demo wrapper `w-full max-w-xs mx-auto`, with `px-4 py-4` on small screens and no extra padding at `xl`.
- The actual select wrapper is only `relative`; do not introduce card chrome, labels, helper text, or surrounding form fields unless the destination page already requires them.
- The select is full width inside its local wrapper.
- Placeholder text is `Country`.
- The source includes a native hidden `` enhanced by Preline `HSSelect`. In a non-Preline project, implement the same behavior with the project's searchable select/listbox/combobox primitive instead of leaving a plain native select.
- When this select is composed in a toolbar or form row beside other controls, its full control contract must adapt to the neighboring control size variant. Match the row's existing button/input/select height, vertical padding, horizontal padding rhythm, radius, border width, shadow strength, font size, font weight, line-height, icon size, text color role, and baseline. In the screenshots, the select sits beside the `Today` date button and `Add project` button; it should visually share their control height and text treatment instead of becoming taller, shorter, more spacious, lighter, darker, bolder, or softer than the row.
Trigger:
- Trigger is a button generated from `toggleTag`, not a visible native ``.
- Trigger layout/scale: `relative py-1.5 sm:py-2 ps-3 pe-9 flex gap-x-2 text-nowrap w-full cursor-pointer text-start sm:text-sm rounded-lg`.
- Trigger includes a left icon slot for the selected country's flag, a title slot, and a right chevron.
- Trigger token roles: transparent/layer input background, layer border, foreground text, primary focus border, primary focus ring, disabled opacity and pointer state.
- Chevron sits absolutely at the right side, vertically centered, `size-4`, muted foreground role.
- Treat the trigger height and typography as a control-system relationship, not a fixed isolated measurement. If the destination row has existing `button`, `select`, or input size variants, choose the same size variant for this trigger and adjust only the inner flag/title/chevron layout needed to preserve the source behavior.
- The trigger's selected value and trigger placeholder both participate in the row's typography. Match the neighboring control labels for font size, font weight, line-height, baseline, and color role unless the source row intentionally uses a different placeholder treatment. Do not let a select component's default placeholder style make `Country` lighter, grayer, larger, smaller, lower, or less bold than the adjacent `Today` label when those controls are meant to match.
- Do not replace the trigger with a large card, pill badge, segmented control, button group, command button, or browser-default select.
Search field:
- Search is enabled by default. Preserve `hasSearch: true`.
- Search placeholder is exactly `Country`.
- Search field layout/scale: `block w-full sm:text-sm bg-transparent rounded-lg py-1.5 sm:py-2 px-3`.
- Search wrapper layout: `bg-select p-2 -mx-1 sticky top-0`.
- The search input is sticky at the top of the dropdown while country options scroll underneath it.
- Search token roles: transparent input background, layer border, layer/input foreground, muted placeholder, primary focus border/ring.
- Search input placeholder styling is separate from the trigger placeholder. The search field can use muted placeholder treatment, but the closed trigger placeholder `Country` must follow the trigger/neighbor control label treatment described above.
- Do not remove the search field, move it outside the dropdown, make it a separate page-level command palette, or replace it with browser find behavior.
Dropdown:
- Dropdown is full width relative to the trigger.
- Dropdown layout/scale: `max-h-64 p-1 pt-0 space-y-0.5 z-80 w-full overflow-hidden overflow-y-auto rounded-xl shadow-xl`.
- Dropdown token roles: select/popover surface, select border, selected item background, hover item background, focus item background, scrollbar track, and scrollbar thumb.
- Preserve the custom vertical scrollbar intent when the destination supports scrollbar utilities: scrollbar width `w-2`, square thumb radius, semantic track/thumb tokens.
- Preserve high stacking behavior so the dropdown is not clipped by surrounding preview containers, sticky headers, or scroll containers. The Preline source uses `dropdownScope: "window"` and a viewport binding.
- Do not render the dropdown as a modal, drawer, full-page picker, static screenshot, or always-visible list unless the destination context is explicitly a preview.
Country options:
- Include the full source country/territory option list, in source order, from `Afghanistan` through `Zimbabwe`. Do not shorten it to a few sample countries.
- The first empty value option is `Choose`; the visible placeholder remains `Country`.
- Each country row shows a round flag image before the country name.
- Do not inline, embed, generate, or manually paste flag artwork into the prompt or component. Call the flag files from the same package/source Preline uses: `node_modules/svg-country-flags/png100px/{lowercase-code}.png`, for example `af.png`, `gb.png`, and `us.png`.
- If the destination project does not already have flag assets, install or add the `svg-country-flags` package and reference its `png100px` files through the destination bundler/public-asset pipeline. If the app cannot serve `node_modules` paths directly, import/copy/serve those package assets correctly instead of leaving broken image URLs.
- Outside the Preline repo, a public URL fallback may use the same package path from Preline, for example `https://preline.co/node_modules/svg-country-flags/png100px/us.png`, but prefer the destination project's own installed package or asset pipeline when building an app.
- Flag image scale/shape: `inline-block size-4 rounded-full`.
- Flag alt text is the country/territory name.
- Option row layout/scale: `py-2 px-4 w-full text-sm rounded-md cursor-pointer`.
- Option template layout: flag/icon slot with `me-2`, country title, and a right-aligned selected checkmark.
- Selected checkmark is hidden by default and appears only for the selected option. It is a Lucide-style check icon at `size-3.5`.
- Country rows use hover, focus, and selected states. Do not flatten these states into plain text rows.
- Do not replace flags with emojis, generic globe icons, initials, colored dots, checkboxes, or missing-image placeholders.
Default state:
- In the block source, `United States` and `United Kingdom` are configurable selected examples, but this preview sets both selected flags to false, so the first-load trigger shows the placeholder `Country`.
- In the iframe/reference preview only, the select is opened on page load so viewers see the dropdown and search field immediately.
- In normal product usage, do not force the dropdown open on page load; open it from the trigger.
Interactions and dependencies:
- If the destination project already uses Preline, use `HSSelect` and preserve the relevant `data-hs-select` behavior: search, sticky search wrapper, option templates, selected checkmark, `preventSearchFocus` when used in the iframe preview, `dropdownScope: "window"`, and viewport binding.
- If the destination project has an equivalent searchable select/listbox/combobox primitive, use that native project primitive and map the source behavior to it.
- If no faithful equivalent exists, install/use Preline `HSSelect` with Floating UI and the source `svg-country-flags` asset package. Only under the explicit dependency-prohibition fallback above, implement a scoped searchable listbox/combobox with open/close state, filtered country options, keyboard navigation, selected state, outside-click close, Escape close, and focus management.
- Preserve the `svg-country-flags` asset dependency or equivalent served asset path for flags. Missing or broken flags are not acceptable; do not silently drop the flag slot when asset loading fails.
- Floating positioning should keep the dropdown attached to the trigger and above surrounding UI. The Preline demo requires Floating UI scripts: `@floating-ui/core` and `@floating-ui/dom`.
- Do not replace this with static HTML, a screenshot, a decorative SVG, a non-searchable native select, or a simplified autocomplete input without the dropdown row structure.
Icon rules:
- The source uses Lucide-style stroke SVGs for the chevron and selected checkmark.
- Use the destination project's existing icon system when it can provide visually equivalent chevron-down and check icons.
- If the project has no ordinary UI icon library, use Lucide or inline SVGs with the same stroke style.
- Flags are identity assets, not ordinary UI icons; keep them as flag images loaded from `svg-country-flags` or the destination's equivalent flag asset source. Do not replace flags with Lucide icons.
Theme and dark mode:
- The source is tokenized and supports theme/dark variants through surface, border, foreground, muted foreground, select item, primary focus, scrollbar, and selected/hover/focus roles.
- Implement intentional dark mode for the trigger, dropdown surface, search input, borders, country rows, selected state, hover/focus states, chevron, checkmark, scrollbar, and focus ring.
- Do not leave a bright white dropdown inside a dark UI unless the destination design system intentionally uses that pattern.
Responsive behavior:
- The select remains full width inside its local wrapper.
- The reference wrapper is compact (`max-w-xs`), not a wide form row or full settings page.
- The dropdown width matches the trigger width.
- The country text must not overflow the trigger or option rows; long country names should truncate or wrap according to the destination select primitive while preserving row density.
- Mobile and desktop preserve the same option order, flag size, search behavior, and dropdown structure.
- Across breakpoints and theme variants, compare the closed select trigger against the neighboring controls in the same row. The text baseline, label/placeholder weight, and perceived control height should remain matched after responsive wrapping or theme changes.
Accessibility:
- Use a semantic combobox/listbox/select pattern appropriate to the destination component system.
- Trigger exposes expanded/collapsed state with `aria-expanded`.
- Search input has an accessible name or placeholder of `Country`.
- Options expose selected state.
- Keyboard users can open the select, type to search, move through options, select an option, and close with Escape.
- Decorative chevron/check icons should be `aria-hidden="true"` when the accessible selected state is already exposed.
- Flag images should keep meaningful alt text when they are part of the option content; if the destination select also announces the country title separately, it is acceptable to mark duplicate flag images decorative.
Final QA checklist:
- The result is a compact full-width searchable country select, not a command palette, modal, language picker, currency select, or plain native select.
- First-load normal state shows placeholder `Country`; the reference iframe/demo may open the dropdown on load.
- Trigger has a selected flag/title slot on the left and a right-aligned chevron, with compact `rounded-lg` input geometry.
- When placed beside other controls, the select trigger height, vertical alignment, padding, radius, border/shadow strength, icon size, font size, font weight, line-height, baseline, and text color role match adjacent buttons/selects/inputs such as `Today` and `Add project`; it is not visibly taller, shorter, lighter, bolder, lower, or using a different density.
- The closed trigger placeholder `Country` and selected country labels match the neighboring control label treatment. A default select placeholder style must not make `Country` gray/regular if adjacent labels such as `Today` are foreground/semibold in the same row.
- Dropdown is `max-h-64`, scrollable, full width, rounded-xl, elevated, and not clipped by parent containers.
- Sticky search field remains at the top of the dropdown and uses placeholder `Country`.
- Country rows include round `size-4` flag images loaded from `svg-country-flags` or an equivalent served asset path, country names, hover/focus/selected states, and a right-aligned selected checkmark.
- The full source country/territory list is preserved in source order; it is not shortened to only popular countries.
- Flag asset paths or public URLs use the `svg-country-flags/png100px` source assets and are not replaced by broken images, empty spaces, emojis, generated art, or generic icons. If needed, the generated project installs/adds `svg-country-flags` and serves those assets correctly.
- `HSSelect` is preserved in Preline projects; otherwise the destination project's native searchable select/listbox primitive provides equivalent search, keyboard, selected, and floating dropdown behavior.
- Floating/dropdown behavior keeps the menu above surrounding UI and aligned to the trigger. In Preline demos, Floating UI dependencies are present.
- Generated Tailwind code preserves source scale/layout utilities where available, maps token roles to the destination token vocabulary, and does not mix Preline-only token names with another design system.
- In tokenized Tailwind projects, generated code uses semantic token classes for semantic color roles and does not mix in raw palette classes such as `text-gray-900`, `bg-white`, `dark:bg-gray-950`, `border-gray-200`, `bg-blue-600`, or `ring-indigo-600`.
- No unrelated page shell, form fields, dashboard cards, helper text, labels, or extra demo blocks are added.
- There are no one-off component classes created only for this block, no scattered raw hex/rgb values, no placeholder flags, no missing flag images, no generic select-menu defaults replacing the source geometry, no control-height drift against neighboring buttons or inputs, and no label/placeholder typography drift inside the closed trigger.
Create a responsive UI block named "Time Slot Select" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#time-slot-select. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: time-slot-select
- Source description: Tall single-column menu keeps one time slot active in a long scrolling list.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/time-slot-select.html (repo path: blocks/ui-components/select-menus/iframes/pro/time-slot-select.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-time.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Placeholder copy is `Select option...`; the trigger is a filled, borderless `py-2 px-4 pe-7 flex text-nowrap w-full cursor-pointer bg-surface rounded-lg text-start text-sm text-surface-foreground` control inside `
`, with a stacked up/down chevron at `inset-e-2`.
- Exactly 24 hourly options after the hidden ``, in order `12:01 AM`, `1:00 AM` through `11:00 AM`, then `12:01 PM`, `1:00 PM` through `11:00 PM` - the two twelve-o'clock entries read `12:01`, not `12:00`.
- `9:00 AM` is selected on first load.
- Rows are plain time strings with no icons or descriptions; only the selected row shows a trailing check `polyline points="20 6 9 17 4 12"`.
- Dropdown is `mt-2 z-50 w-full min-w-36 max-h-72 p-1 space-y-0.5 rounded-xl shadow-xl` with thin custom scrollbar utilities and `py-2 px-3 text-sm rounded-md` rows.
- The source sets `"viewport": "#hs-modal-status-body"` because it normally lives inside that modal - drop or repoint that option when the block is standalone. Closed by default; the preview iframe force-opens it as demo chrome.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.
Create a responsive UI block named "Visibility Select with Description Rows" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#visibility-select-with-description-rows. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: visibility-select-with-description-rows
- Source description: Each option row pairs an icon, title, and supporting copy in one stacked layout.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/visibility-select-with-description-rows.html (repo path: blocks/ui-components/select-menus/iframes/pro/visibility-select-with-description-rows.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-visibility.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- The placeholder string in the source is `Visibile to` - that exact spelling, typo included, is the shipped copy.
- Exactly two options after the hidden ``, in order `Anyone` then `Guideline`.
- `Anyone` is selected on first load and is the only option with a description row, reading `Your status will be visible to everyone`; `Guideline` has a title only.
- `Anyone` uses a 24-viewBox Lucide `globe-2` outline icon at `shrink-0 size-4`; `Guideline` uses a four-path multicolor brand SVG (`#A49DFF`, `#28289A`, `#5ADCEE`, `#7878FF`) at `inline-block size-4` - keep those literal brand fills rather than mapping them to the primary token.
- Option rows render the title as `font-semibold text-foreground` above a `text-sm text-muted-foreground-1` description, at `py-2 px-4 w-full rounded-lg`; the dropdown is `mt-2 z-50 w-48 p-1 space-y-0.5 rounded-xl shadow-xl`.
- Trigger is `py-2 ps-3 pe-7 inline-flex justify-center items-center bg-layer border border-layer-line text-layer-foreground text-sm rounded-lg shadow-2xs hover:bg-layer-hover` with a stacked up/down chevron at `inset-e-2`. Closed by default - the preview iframe force-opens it as demo chrome.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.
Create a responsive UI block named "Filter Select with Icons" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#filter-select-with-icons. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: filter-select-with-icons
- Source description: Icon-led option rows turn a simple filter control into a compact action menu.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/filter-select-with-icons.html (repo path: blocks/ui-components/select-menus/iframes/pro/filter-select-with-icons.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-with-icons.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Compact borderless trigger with placeholder copy `Filter`: `py-1.5 sm:py-2 ps-2 pe-8 inline-flex shrink-0 justify-center items-center gap-x-1.5 border border-transparent sm:text-sm text-muted-foreground-1 rounded-lg hover:bg-muted-hover hover:text-foreground`, inside `
`, with a chevron-down at `inset-e-2`.
- Seven options after the hidden ``, in order: `All files`, `Documents`, `Images`, `Snippets`, `Spreadsheets`, `Audio`, `Videos`.
- `All files` is selected on first load.
- Every row leads with a `shrink-0 size-3 sm:size-3.5` Lucide-style 24-viewBox outline icon (archive box, file-with-lines, image, angle brackets, spreadsheet, speaker, video camera) and the selected row adds a trailing check `polyline points="20 6 9 17 4 12"`.
- Dropdown is `mt-2 p-1 space-y-0.5 z-50 w-40 rounded-xl shadow-xl` with `py-1.5 px-2 text-[13px] gap-x-3` rows.
- Single-select with no search field, no descriptions, and no tag mode. Closed by default - the preview iframe force-opens it as demo chrome.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.
Create a responsive UI block named "Currency Code Select" that visually and behaviorally matches the Preline source block. Use the destination project's existing framework, Tailwind setup, semantic tokens, component primitives, icon system, routing/link conventions, and dark-mode strategy.
Implementation preflight:
- Exact public block reference: https://preline.co/blocks/ui-components/select-menus/#currency-code-select. Open this exact anchored block and inspect its Preview and HTML tabs when browsing is available; do not use neighboring examples or surrounding docs chrome as source.
- Before writing code, inspect the destination project's package manifest, Tailwind/theme configuration, global styles, app shell/container conventions, icon system, and existing components. Reuse or compose an existing implementation when it already represents the same source partial or behavior; do not duplicate its markup, state, assets, or interaction logic.
- If neither the public reference nor local source paths are accessible, use only the explicit source-derived details in this prompt. If those details are insufficient, request the source HTML instead of guessing from the block title or category.
Build only this source block. Do not add unrelated page chrome, marketing sections, dashboard widgets, extra cards, extra modals, placeholder states, or footer content unless they are present in the source block.
Source metadata:
- Catalog family: ui-components/select-menus
- Block ID: currency-code-select
- Source description: Plain currency codes sit in a narrow scrolling menu with no extra description layer.
- Preview iframe: https://preline.co/blocks/ui-components/select-menus/iframes/pro/currency-code-select.html (repo path: blocks/ui-components/select-menus/iframes/pro/currency-code-select.html)
- Source markup reference:
- partials/pro/admin-dashboard/sources/select-currency.html
Use the source HTML tab and referenced partials as the source of truth. Preserve exact visible copy, content order, hierarchy, component density, spacing relationships, borders, radii, icons, status markers, dropdown/menu rows, form states, responsive order, and interaction content. If the source imports shared partials or assets, reuse those local components/assets when the destination can import them; otherwise recreate their visible structure faithfully from the source.
Block-specific fidelity rules:
- Preserve labels, helper text, validation/error states, required markers, input grouping, focus behavior, control sizes, option order, selected/disabled states, and submit/cancel hierarchy.
- For selects, comboboxes, radios, checkboxes, switches, and upload controls, keep source trigger/control geometry and do not normalize intentionally different controls into generic pills or cards.
- Preserve trigger geometry, open panel placement, grouping, row order, scroll container, overlay/backdrop behavior, z-index, active/current states, and keyboard/focus semantics.
- Do not simplify grouped or nested menus, drawers, popovers, and modals into flat generic lists or default forms unless the source does.
- Source content inventory (from the source markup):
- Single Preline `HSSelect` on a hidden native `` inside `