Create a responsive UI block named "Theme Appearance 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/forms/option-pickers/#theme-appearance-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: forms/option-pickers
- Block ID: theme-appearance-picker
- Source description: Small segmented picker offers appearance modes with one card-style tile per option.
- Preview iframe: https://preline.co/blocks/forms/option-pickers/iframes/pro/theme-appearance-picker.html (repo path: blocks/forms/option-pickers/iframes/pro/theme-appearance-picker.html)
- Source markup reference:
- partials/pro/video-call/radio-and-checkbox/appearance-grid-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.
- Source content inventory (from the source markup):
- Exactly 3 card radio tiles in this order, with captions `Light`, `Dark`, and `System settings` rendered under each swatch as `text-xs`.
- All three radios share `name="hs-pro-hs-pro-vcsap"` (ids `hs-pro-vcsapLight`, `hs-pro-vcsapDark`, `hs-pro-vcsapSystem`); the `Light` radio carries `checked` on first load.
- Wrapper is a single row: `
`, each option a ``.
- Each swatch is an `h-18` `rounded-lg` preview with `ring-2 ring-transparent peer-checked:ring-primary-checked`; the `System settings` swatch is split into a light half (`rounded-s-lg`) and a dark half (`rounded-e-lg`) side by side.
- Swatches contain no text and no icons, only an abstract mini-UI: a `w-5` full-height sidebar bar plus a `grow` content pane, both `rounded-sm`.
- Fully static: inputs are `class="hidden peer"` and selection is pure CSS `peer-checked` styling; no Preline JS plugin, no `data-hs-*` attributes, no custom JavaScript.
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 "Badge Icon Option Buttons" 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/forms/option-pickers/#badge-icon-option-buttons. 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: forms/option-pickers
- Block ID: badge-icon-option-buttons
- Source description: Pill-shaped toggle buttons combine icons and labels for a compact multi-option selector.
- Preview iframe: https://preline.co/blocks/forms/option-pickers/iframes/pro/badge-icon-option-buttons.html (repo path: blocks/forms/option-pickers/iframes/pro/badge-icon-option-buttons.html)
- Source markup reference:
- partials/pro/payments-dashboard/radio-and-checkbox/badge-style-button-with-icon-grid-view.html
- partials/pro/payments-dashboard/radio-and-checkbox/badge-style-button-with-icon.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):
- Exactly 10 options in a single `
`, in this exact order: `Transfers`, `Cash withdrawal`, `Card transactions`, `Direct debits`, `Batch transfers`, `Money added`, `Prefunding transfers`, `Auto conversions`, `Conversions`, `Asset fees`. Note `Auto conversions` precedes `Conversions`. There is no heading, helper text, or Clear/Apply footer.
- Each option is `type="checkbox"` (multi-select, not radio) sharing the group name `hs-pro-pytfmty`, with sequential ids `hs-pro-pytfmty-1` through `hs-pro-pytfmty-10`. None is checked or disabled on first load.
- Each control is a `` wrapping a visually hidden ``; the label is `py-2 px-2.5 text-[13px] rounded-xl bg-layer border border-layer-line ring-1 ring-transparent` - keep the `rounded-xl` radius and the 13px font size rather than substituting `text-sm`.
- The check indicator is the distinctive piece: a `size-0` circle that animates to `peer-checked:size-4 peer-checked:me-1.5` with `transition-all duration-200`, holding a `size-2.5` check icon at `stroke-width="4"`. Unchecked it occupies zero width, so the pill grows when selected.
- Checked styling is token-driven, not a solid primary fill: `has-checked:bg-primary-100 has-checked:border-primary-200 has-checked:ring-primary-200 has-checked:text-primary-800` with dark-mode counterparts at `primary-800/30` and `primary-500`.
- Fully CSS-driven; no Preline JS plugins and no `data-hs-*` attributes. Selection state comes only from the native checkbox plus `peer-checked`/`has-checked` variants.
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.
Transfers
Cash withdrawal
Card transactions
Direct debits
Batch transfers
Money added
Prefunding transfers
Auto conversions
Conversions
Asset fees
Create a responsive UI block named "Centered Icon Checkboxes" 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/forms/option-pickers/#centered-icon-checkboxes. 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: forms/option-pickers
- Block ID: centered-icon-checkboxes
- Source description: Centered three-column grid uses large checkbox cards with icons and labels for each choice.
- Preview iframe: https://preline.co/blocks/forms/option-pickers/iframes/pro/centered-icon-checkboxes.html (repo path: blocks/forms/option-pickers/iframes/pro/centered-icon-checkboxes.html)
- Source markup reference:
- partials/pro/storefront/radio-and-checkbox/center-aligned-checkbox-icons.html
- partials/pro/storefront/radio-and-checkbox/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.
- Source content inventory (from the source markup):
- One heading above the grid reading `Your interests`, styled `mb-4 font-medium text-foreground` - it is an `
`, not a form legend, and there is no subheading or helper text.
- Exactly 8 tiles in `
` - 3 columns on mobile, 4 from `sm` up - in this order: `Gaming`, `Golf`, `Fitness`, `Skiing`, `Biking`, `Sailing`, `Climbing`, `Hiking`.
- Three tiles are checked on first load: `Fitness`, `Biking`, and `Hiking`. The other five are unchecked; none is disabled.
- Controls are `type="checkbox"` (multi-select) sharing the group name `hs-pro-shenli` with ids `hs-pro-shenli1` through `hs-pro-shenli8`; each input has `value` equal to its visible title and is `class="hidden"` inside its ``.
- Each tile is `p-2 sm:p-3 text-xs sm:text-[13px] flex flex-col justify-center items-center text-center rounded-lg bg-layer border border-layer-line`; the icon is a `size-6 mx-auto` outline SVG at `stroke-width="1.5"` and the caption sits below it in a ``.
- Selected styling is border-and-ring only, no fill change: `has-checked:border-primary-checked has-checked:ring-1 has-checked:ring-primary-checked`. Do not add a checkmark badge, background tint, or scale effect.
- Fully CSS-driven; no Preline JS plugins and no `data-hs-*` attributes. Icons are Lucide-style line icons (gamepad, golf, dumbbell, tram/gondola, bike, sailboat, mountain, hiking).
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 "Size Option 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/forms/option-pickers/#size-option-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: forms/option-pickers
- Block ID: size-option-picker
- Source description: Dense size grid pairs one heading row with evenly spaced radio options for each size.
- Preview iframe: https://preline.co/blocks/forms/option-pickers/iframes/pro/size-option-picker.html (repo path: blocks/forms/option-pickers/iframes/pro/size-option-picker.html)
- Source markup reference:
- partials/pro/storefront/radio-and-checkbox/size.html
- partials/pro/storefront/radio-and-checkbox/size-selector.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):
- One heading only: an `
` reading `Size`, inside a `flex flex-wrap justify-between items-center gap-3` row. This variant does not render the optional `Size guide` link/modal trigger, so there is no `data-hs-overlay` button and no HSOverlay wiring anywhere in the block.
- Exactly 12 size tiles in `
` - always 4 columns, no responsive change - in this order: `6.5`, `7`, `7.5`, `8`, `8.5`, `9`, `9.5`, `10`, `10.5`, `11`, `11.5`, `12`.
- Five sizes are `disabled` (out of stock): `7.5`, `8.5`, `9`, `10`, and `11`. The other seven are selectable, and no size is checked on first load.
- Controls are `type="radio"` (single-select) sharing the group name `hs-pro-shfdsr`, with ids like `hs-pro-shfdsr-us-6and5`, `hs-pro-shfdsr-us-7`, `hs-pro-shfdsr-us-10and5` - half sizes spell the decimal as `and5`.
- Each tile is `p-2.5 group relative flex justify-center items-center text-center text-xs border border-layer-line rounded-lg` with a hidden input; the label text is the bare number, with no "US" prefix or unit suffix.
- Disabled tiles get a diagonal strike drawn with a CSS gradient pseudo-element, not an SVG or a line element: `has-disabled:after:absolute has-disabled:after:inset-0` plus a `linear-gradient(to right bottom, ...)` using `var(--color-line-2)`, alongside `has-disabled:opacity-70` and `has-disabled:pointer-events-none`. Preserve that strike-through treatment.
- Selected styling is `has-checked:text-primary-checked has-checked:border-primary-checked has-checked:ring-1 has-checked:ring-primary-checked` - outline and text color only, no filled background.
- Fully CSS-driven; no Preline JS plugins and no `data-hs-*` attributes in this variant.
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 "Color Options with Counts" 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/forms/option-pickers/#color-options-with-counts. 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: forms/option-pickers
- Block ID: color-options-with-counts
- Source description: Vertical filter list combines color checkboxes with right-aligned result counts on each row.
- Preview iframe: https://preline.co/blocks/forms/option-pickers/iframes/pro/color-options-with-counts.html (repo path: blocks/forms/option-pickers/iframes/pro/color-options-with-counts.html)
- Source markup reference:
- partials/pro/storefront/forms/filter-color.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):
- Exactly 8 rows in a `
`, in this order with these exact counts: `Black` `(70)`, `White` `(127)`, `Gray` `(63)`, `Red` `(32)`, `Orange` `(25)`, `Yellow` `(15)`, `Green` `(12)`, `Blue` `(86)`. Counts are rendered with literal parentheses. There is no section heading, search field, or "Show more" link.
- Each row is a full-width `` containing a real ``, the color name in `ms-2 text-foreground`, and the count pushed right with `ms-auto text-xs text-muted-foreground-1`.
- Checkboxes are multi-select and none is checked on first load; ids are `hs-pro-shflocss-black` for Black and `hs-pro-shfloc-` for the rest (note the extra `ss` in the Black id only).
- Each checkbox is `size-4.5 rounded-sm` and is tinted to its own color rather than the primary token: `bg-red-500 border-red-500 checked:text-red-500` and the same pattern for orange, yellow, green, and blue; Black uses `bg-inverse border-black checked:text-black` and Gray uses `bg-surface-2 border-line-3 checked:text-line-3`. These literal color utilities are intentional swatch content, not primary roles to remap.
- The `White` row is special-cased: its input uses `bg-plain checked:bg-none` so no built-in tick shows, and a sibling `size-4.5 -ms-4.5 fill-black` SVG check is overlaid, revealed by `group-has-checked:opacity-100`. Keep that overlay so the tick stays visible on a white swatch.
- The iframe frames the list as `w-full max-w-xs mx-auto bg-layer p-4`; every checkbox also carries `focus:ring-0 focus:ring-offset-0` and `disabled:opacity-50 disabled:pointer-events-none`.
- Fully static; no Preline JS plugins and no `data-hs-*` attributes - the counts do not update on selection.
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 "Centered Icon Radio Options" 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/forms/option-pickers/#centered-icon-radio-options. 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: forms/option-pickers
- Block ID: centered-icon-radio-options
- Source description: Three-column radio grid centers large icons and labels inside mutually exclusive option cards.
- Preview iframe: https://preline.co/blocks/forms/option-pickers/iframes/pro/centered-icon-radio-options.html (repo path: blocks/forms/option-pickers/iframes/pro/centered-icon-radio-options.html)
- Source markup reference:
- partials/pro/storefront/radio-and-checkbox/center-aligned-radio-icons.html
- partials/pro/storefront/radio-and-checkbox/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.
- Source content inventory (from the source markup):
- Exactly 3 tiles in `
` - three columns at every breakpoint, no responsive column change - in this order: `Preline Website`, `Customer Service`, `Our Store`. There is no heading, legend, or helper text above or below the grid.
- Controls are `type="radio"` (single-select) sharing the group name `hs-pro-shwrvtgri` with ids `hs-pro-shwrvtgri1` through `hs-pro-shwrvtgri3`; each input is `class="hidden"` inside its ``.
- No option is checked on first load - the group starts entirely unselected, so do not preselect the first tile.
- Each tile is `p-2 sm:p-3 text-xs sm:text-[13px] flex flex-col justify-center items-center text-center rounded-lg bg-layer border border-layer-line`; the icon is `size-7 mx-auto` (larger than the checkbox sibling's `size-6`) at `stroke-width="1.5"`, with the caption in a ``.
- Icons in order are a browser/monitor window with three dots, a headset, and a map-pin over a shopping-bag base - matching website, support, and physical store.
- Selected styling is border-and-ring only, no fill change: `has-checked:border-primary-checked has-checked:ring-1 has-checked:ring-primary-checked`. Do not add a radio dot, checkmark, or background tint.
- Fully CSS-driven; no Preline JS plugins and no `data-hs-*` attributes.
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 "Color Swatch 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/forms/option-pickers/#color-swatch-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: forms/option-pickers
- Block ID: color-swatch-picker
- Source description: Minimal swatch row presents color choices as small selectable blocks with a current label below.
- Preview iframe: https://preline.co/blocks/forms/option-pickers/iframes/pro/color-swatch-picker.html (repo path: blocks/forms/option-pickers/iframes/pro/color-swatch-picker.html)
- Source markup reference:
- partials/pro/storefront/radio-and-checkbox/colors.html
- partials/pro/storefront/radio-and-checkbox/simple-with-ring.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):
- Three text/layout parts in order: an `
` reading `Color`, the swatch row, then a caption `
` reading `Light Grey` naming the currently selected swatch.
- Exactly 3 swatches in `
`, in this order: a dark/inverse swatch (`bg-inverse`), a white swatch (`bg-plain border border-line-2`), and a light-grey swatch (`bg-surface-2`). No swatch has a text label of its own.
- The controls are `type="radio"` (single-select) sharing the group name `hs-pro-shgctn`; ids are `hs-pro-shgctn1`, `hs-pro-shgctn2`, and `hs-pro-shgctn4` - the sequence intentionally skips 3.
- The third swatch (light grey) is `checked` on first load, which is why the caption reads `Light Grey`; the other two start unselected.
- Each swatch is `size-7 rounded-md` on both the `` and the inner ``, with the input `class="hidden"` inside the label. The white swatch is the only one with a border, so it stays visible against a light background.
- Selected state is a double ring, not a checkmark: `has-checked:ring-2 has-checked:ring-offset-2 has-checked:ring-offset-layer has-checked:ring-primary-checked has-checked:border-primary-checked`. Do not add a tick, dot, or scale change.
- Fully CSS-driven; no Preline JS plugins and no `data-hs-*` attributes. The caption is static text - it does not update when a different swatch is picked.
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 "Split Selector with Options" 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/forms/option-pickers/#split-selector-with-options. 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: forms/option-pickers
- Block ID: split-selector-with-options
- Source description: Split selector combines a primary choice toggle with a dropdown list of secondary options.
- Preview iframe: https://preline.co/blocks/forms/option-pickers/iframes/pro/split-selector-with-options.html (repo path: blocks/forms/option-pickers/iframes/pro/split-selector-with-options.html)
- Source markup reference:
- partials/pro/admin-dashboard/cards/dropdown-button-with-select-options.html
- partials/pro/admin-dashboard/sources/dropdown-button-with-select-options.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):
- Despite the source partial name, the block renders as an always-visible panel, not an open dropdown: a fixed-width `w-60 mx-auto bg-card border border-card-line rounded-xl shadow-2xs` card with an inner `p-1`. There is no trigger button, no `hs-dropdown` wrapper, and no HSDropdown wiring - do not add one.
- Header block reads `Download Report` in `block font-semibold text-foreground` with the sub-line `Select Options` in `block text-xs text-muted-foreground-1`, inside `py-2 px-3`.
- The segmented control has exactly 2 segments in a `flex items-center bg-surface rounded-xl p-1` track: `Excel` then `Word`. They are `type="radio"` inputs sharing the name `hs-pro-dbrrtchddts` with ids `hs-pro-dbrrtchddts1` and `hs-pro-dbrrtchddts2`; `Excel` is checked on first load and neither is disabled.
- Each segment label is `relative py-1.5 px-3 w-full text-center text-sm rounded-lg has-checked:bg-layer has-checked:shadow-2xs` - the selected pill gets a raised layer background, not a primary fill.
- The `Excel` and `Word` icons are full-color Microsoft brand SVGs on a `32 32` viewBox rendered at `size-4` (Excel greens `#21A366`/`#107C41`/`#33C481`/`#185C37`, Word blues `#41A5EE`/`#2B7CD3`/`#185ABD`/`#103F91`). They are brand assets, not remappable outline icons; each sits inside the label with `me-1.5 inline-block align-middle`.
- Exactly 3 checkbox rows follow, in this order with `size-4` outline icons on the left: `Section name` (pencil), `Comparison stats` (file-pie-chart), `Legend indicator` (circle). All three are checked on first load, none is disabled, ids run `hs-pro-dbrrtchdds1` through `hs-pro-dbrrtchdds3`, and each row puts the label left (`flex flex-1 items-center gap-x-3 text-sm`) with the checkbox on the far right - not the usual checkbox-first order.
- The footer is one full-width primary button reading `Download`; three `border-t border-dropdown-divider` rules separate header/segments, segments/checkboxes, and checkboxes/button.
- Fully static apart from native inputs: no Preline JS plugins and no `data-hs-*` attributes.
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.