{"id":14054,"date":"2025-04-26T08:59:37","date_gmt":"2025-04-26T06:59:37","guid":{"rendered":"\/docs\/piny\/"},"modified":"2025-06-02T11:33:30","modified_gmt":"2025-06-02T09:33:30","slug":"piny","status":"publish","type":"page","link":"\/docs\/piny\/","title":{"rendered":"Piny"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n\n\n\n<p>Piny is an extension for Visual Studio Code, Cursor, Windsurf and other IDEs based on Visual Studio Code.<\/p>\n\n\n\n<p>Open the Extensions panel and search for Piny, then install the extension.<\/p>\n\n\n\n<p>Keep <em>Update<\/em> checked so you always have the latest version.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Piny requires that at least one folder is open in the editor Workspace. Otherwise Piny will not open and an error message is shown.<\/p>\n<\/blockquote>\n\n\n\n<p>To open Piny, right-click anywhere in the code and choose <strong>Edit&nbsp;in&nbsp;Piny<\/strong>. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-edit-in-piny.jpg\" data-rel=\"lightbox-image-0\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1400\" height=\"917\" src=\"\/wp-content\/uploads\/piny-edit-in-piny.jpg\" alt=\"\" class=\"wp-image-14057\" srcset=\"\/wp-content\/uploads\/piny-edit-in-piny.jpg 1400w, \/wp-content\/uploads\/piny-edit-in-piny-645x422.jpg 645w, \/wp-content\/uploads\/piny-edit-in-piny-845x553.jpg 845w, \/wp-content\/uploads\/piny-edit-in-piny-768x503.jpg 768w\" sizes=\"(max-width: 1400px) 100vw, 1400px\" \/><\/a><\/figure>\n\n\n\n<p>Use Visual Studio Code settings to assign a keyboard shortcut to that command.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-shortcut.jpg\" data-rel=\"lightbox-image-1\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1788\" height=\"500\" src=\"\/wp-content\/uploads\/piny-shortcut.jpg\" alt=\"\" class=\"wp-image-14058\" srcset=\"\/wp-content\/uploads\/piny-shortcut.jpg 1788w, \/wp-content\/uploads\/piny-shortcut-645x180.jpg 645w, \/wp-content\/uploads\/piny-shortcut-845x236.jpg 845w, \/wp-content\/uploads\/piny-shortcut-768x215.jpg 768w, \/wp-content\/uploads\/piny-shortcut-1536x430.jpg 1536w, \/wp-content\/uploads\/piny-shortcut-1440x403.jpg 1440w\" sizes=\"(max-width: 1788px) 100vw, 1788px\" \/><\/a><\/figure>\n\n\n\n<p>You can freely switch away from the Piny tab\u2014the editor state is preserved. Close the tab when you\u2019re done; reopen it any time with <strong>Edit&nbsp;in&nbsp;Piny<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-close.jpg\" data-rel=\"lightbox-image-2\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1490\" height=\"664\" src=\"\/wp-content\/uploads\/piny-close.jpg\" alt=\"\" class=\"wp-image-14059\" srcset=\"\/wp-content\/uploads\/piny-close.jpg 1490w, \/wp-content\/uploads\/piny-close-645x287.jpg 645w, \/wp-content\/uploads\/piny-close-845x377.jpg 845w, \/wp-content\/uploads\/piny-close-768x342.jpg 768w, \/wp-content\/uploads\/piny-close-1440x642.jpg 1440w\" sizes=\"(max-width: 1490px) 100vw, 1490px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Preview<\/h2>\n\n\n\n<p>Piny shows a responsive browser preview of your project.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-preview.jpg\" data-rel=\"lightbox-image-3\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1400\" height=\"985\" src=\"\/wp-content\/uploads\/piny-preview.jpg\" alt=\"\" class=\"wp-image-14060\" srcset=\"\/wp-content\/uploads\/piny-preview.jpg 1400w, \/wp-content\/uploads\/piny-preview-645x454.jpg 645w, \/wp-content\/uploads\/piny-preview-845x595.jpg 845w, \/wp-content\/uploads\/piny-preview-768x540.jpg 768w\" sizes=\"(max-width: 1400px) 100vw, 1400px\" \/><\/a><\/figure>\n\n\n\n<p>Use the route dropdown to add and select a route displayed in the preview.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-routes.jpg\" data-rel=\"lightbox-image-4\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"900\" height=\"644\" src=\"\/wp-content\/uploads\/piny-routes.jpg\" alt=\"\" class=\"wp-image-14061\" srcset=\"\/wp-content\/uploads\/piny-routes.jpg 900w, \/wp-content\/uploads\/piny-routes-645x462.jpg 645w, \/wp-content\/uploads\/piny-routes-845x605.jpg 845w, \/wp-content\/uploads\/piny-routes-768x550.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/a><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Piny Pro<\/strong>: when Visual Select is active, Piny tracks visited routes and lists them in the route menu.<\/p>\n<\/blockquote>\n\n\n\n<p>If you don\u2019t need the preview, hide it with the icon in the preview toolbar. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-hide-preview.jpg\" data-rel=\"lightbox-image-5\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1073\" height=\"688\" src=\"\/wp-content\/uploads\/piny-hide-preview.jpg\" alt=\"\" class=\"wp-image-14062\" srcset=\"\/wp-content\/uploads\/piny-hide-preview.jpg 1073w, \/wp-content\/uploads\/piny-hide-preview-645x414.jpg 645w, \/wp-content\/uploads\/piny-hide-preview-845x542.jpg 845w, \/wp-content\/uploads\/piny-hide-preview-768x492.jpg 768w\" sizes=\"(max-width: 1073px) 100vw, 1073px\" \/><\/a><\/figure>\n\n\n\n<p>To get it back click on the collapsed Preview.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-show-review.jpg\" data-rel=\"lightbox-image-6\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"826\" height=\"578\" src=\"\/wp-content\/uploads\/piny-show-review.jpg\" alt=\"\" class=\"wp-image-14063\" srcset=\"\/wp-content\/uploads\/piny-show-review.jpg 826w, \/wp-content\/uploads\/piny-show-review-645x451.jpg 645w, \/wp-content\/uploads\/piny-show-review-768x537.jpg 768w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/a><\/figure>\n\n\n\n<p>In the Preview toolbar you can also set the zoom level and reload the preview.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-preview-zoom.jpg\" data-rel=\"lightbox-image-7\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"906\" height=\"696\" src=\"\/wp-content\/uploads\/piny-preview-zoom.jpg\" alt=\"\" class=\"wp-image-14064\" srcset=\"\/wp-content\/uploads\/piny-preview-zoom.jpg 906w, \/wp-content\/uploads\/piny-preview-zoom-645x495.jpg 645w, \/wp-content\/uploads\/piny-preview-zoom-845x649.jpg 845w, \/wp-content\/uploads\/piny-preview-zoom-768x590.jpg 768w\" sizes=\"(max-width: 906px) 100vw, 906px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Selecting Components and Elements<\/h2>\n\n\n\n<p>One component can be edited at a time. Its JSX structure appears in the <em>Tree<\/em> panel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-tree.jpg\" data-rel=\"lightbox-image-8\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"582\" height=\"1012\" src=\"\/wp-content\/uploads\/piny-tree.jpg\" alt=\"\" class=\"wp-image-14066\"\/><\/a><\/figure>\n\n\n\n<p>Select a JSX element or string in one of three ways:<\/p>\n\n\n\n<p>Place the cursor in the code (the element under the cursor is selected) or click the element in the <em>Tree<\/em> panel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-selected-el.jpg\" data-rel=\"lightbox-image-9\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1512\" height=\"1112\" src=\"\/wp-content\/uploads\/piny-selected-el.jpg\" alt=\"\" class=\"wp-image-14067\" srcset=\"\/wp-content\/uploads\/piny-selected-el.jpg 1512w, \/wp-content\/uploads\/piny-selected-el-645x474.jpg 645w, \/wp-content\/uploads\/piny-selected-el-845x621.jpg 845w, \/wp-content\/uploads\/piny-selected-el-768x565.jpg 768w, \/wp-content\/uploads\/piny-selected-el-1440x1059.jpg 1440w\" sizes=\"(max-width: 1512px) 100vw, 1512px\" \/><\/a><\/figure>\n\n\n\n<p><br>Use <strong>Visual Select<\/strong> (Piny Pro) to click elements directly in the preview.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-select.jpg\" data-rel=\"lightbox-image-10\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1400\" height=\"904\" src=\"\/wp-content\/uploads\/piny-visual-select.jpg\" alt=\"\" class=\"wp-image-14071\" srcset=\"\/wp-content\/uploads\/piny-visual-select.jpg 1400w, \/wp-content\/uploads\/piny-visual-select-645x416.jpg 645w, \/wp-content\/uploads\/piny-visual-select-845x546.jpg 845w, \/wp-content\/uploads\/piny-visual-select-768x496.jpg 768w\" sizes=\"(max-width: 1400px) 100vw, 1400px\" \/><\/a><\/figure>\n\n\n\n<p>With Piny Pro you can multi-select elements: <kbd>Ctrl<\/kbd>\/<kbd>Cmd<\/kbd> + Click to add or remove, <kbd>Shift<\/kbd> + Click to select a range.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-multi-select.jpg\" data-rel=\"lightbox-image-11\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1611\" height=\"870\" src=\"\/wp-content\/uploads\/piny-multi-select.jpg\" alt=\"\" class=\"wp-image-14069\" srcset=\"\/wp-content\/uploads\/piny-multi-select.jpg 1611w, \/wp-content\/uploads\/piny-multi-select-645x348.jpg 645w, \/wp-content\/uploads\/piny-multi-select-845x456.jpg 845w, \/wp-content\/uploads\/piny-multi-select-768x415.jpg 768w, \/wp-content\/uploads\/piny-multi-select-1536x829.jpg 1536w, \/wp-content\/uploads\/piny-multi-select-1440x778.jpg 1440w\" sizes=\"(max-width: 1611px) 100vw, 1611px\" \/><\/a><\/figure>\n\n\n\n<p>If the cursor is inside a string (for example a class list), a special \u201cCode\u201d element is selected; you can still edit Tailwind classes via Visual Controls and Inspector.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-edit-any-class.jpg\" data-rel=\"lightbox-image-12\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1468\" height=\"1092\" src=\"\/wp-content\/uploads\/piny-edit-any-class.jpg\" alt=\"\" class=\"wp-image-14070\" srcset=\"\/wp-content\/uploads\/piny-edit-any-class.jpg 1468w, \/wp-content\/uploads\/piny-edit-any-class-645x480.jpg 645w, \/wp-content\/uploads\/piny-edit-any-class-845x629.jpg 845w, \/wp-content\/uploads\/piny-edit-any-class-768x571.jpg 768w, \/wp-content\/uploads\/piny-edit-any-class-1440x1071.jpg 1440w\" sizes=\"(max-width: 1468px) 100vw, 1468px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Visual Controls<\/h2>\n\n\n\n<p>Visual Controls let you edit Tailwind styling for the selected element.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-controls.jpg\" data-rel=\"lightbox-image-13\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"744\" height=\"1250\" src=\"\/wp-content\/uploads\/piny-visual-controls.jpg\" alt=\"\" class=\"wp-image-14072\" srcset=\"\/wp-content\/uploads\/piny-visual-controls.jpg 744w, \/wp-content\/uploads\/piny-visual-controls-645x1084.jpg 645w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><\/a><\/figure>\n\n\n\n<p>Choose a screen-size tab (right-click to also resize the preview). <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-screen-size.jpg\" data-rel=\"lightbox-image-14\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"809\" height=\"630\" src=\"\/wp-content\/uploads\/piny-screen-size.jpg\" alt=\"\" class=\"wp-image-14073\" srcset=\"\/wp-content\/uploads\/piny-screen-size.jpg 809w, \/wp-content\/uploads\/piny-screen-size-645x502.jpg 645w, \/wp-content\/uploads\/piny-screen-size-768x598.jpg 768w\" sizes=\"(max-width: 809px) 100vw, 809px\" \/><\/a><\/figure>\n\n\n\n<p>Use the <em>States<\/em> dropdown to pick a state (hover, focus, active\u2026).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-states.jpg\" data-rel=\"lightbox-image-15\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"742\" height=\"548\" src=\"\/wp-content\/uploads\/piny-visual-states.jpg\" alt=\"\" class=\"wp-image-14074\" srcset=\"\/wp-content\/uploads\/piny-visual-states.jpg 742w, \/wp-content\/uploads\/piny-visual-states-645x476.jpg 645w\" sizes=\"(max-width: 742px) 100vw, 742px\" \/><\/a><\/figure>\n\n\n\n<p>This opens up the states menu:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-select-state.jpg\" data-rel=\"lightbox-image-16\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"742\" height=\"1052\" src=\"\/wp-content\/uploads\/piny-select-state.jpg\" alt=\"\" class=\"wp-image-14075\" srcset=\"\/wp-content\/uploads\/piny-select-state.jpg 742w, \/wp-content\/uploads\/piny-select-state-645x914.jpg 645w\" sizes=\"(max-width: 742px) 100vw, 742px\" \/><\/a><\/figure>\n\n\n\n<p>Your edits apply to the current size \u00d7 state combination. Changes are written straight to code and saved automatically; rely on git and Undo to discard unwanted edits.<\/p>\n\n\n\n<p>For complex combinations, use the <strong>Inspector<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Inspector<\/h2>\n\n\n\n<p>Inspector shows Tailwind classes of the selected element and its parents in an editable tree\u2014ideal for visualizing and tweaking complex styles.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-inspector.jpg\" data-rel=\"lightbox-image-17\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"742\" height=\"1250\" src=\"\/wp-content\/uploads\/piny-inspector.jpg\" alt=\"\" class=\"wp-image-14076\" srcset=\"\/wp-content\/uploads\/piny-inspector.jpg 742w, \/wp-content\/uploads\/piny-inspector-645x1087.jpg 645w\" sizes=\"(max-width: 742px) 100vw, 742px\" \/><\/a><\/figure>\n\n\n\n<p>Click a class to change its value.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-inspector-change.jpg\" data-rel=\"lightbox-image-18\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"520\" height=\"730\" src=\"\/wp-content\/uploads\/piny-inspector-change.jpg\" alt=\"\" class=\"wp-image-14079\"\/><\/a><\/figure>\n\n\n\n<p>Uncheck the class to toggle visibility.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-inspector-toggle.jpg\" data-rel=\"lightbox-image-19\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"688\" height=\"534\" src=\"\/wp-content\/uploads\/piny-inspector-toggle.jpg\" alt=\"\" class=\"wp-image-14077\" srcset=\"\/wp-content\/uploads\/piny-inspector-toggle.jpg 688w, \/wp-content\/uploads\/piny-inspector-toggle-645x501.jpg 645w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/a><\/figure>\n\n\n\n<p>Add classes or states from the menus or with smart search.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-inspector-add-class.jpg\" data-rel=\"lightbox-image-20\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"687\" height=\"823\" src=\"\/wp-content\/uploads\/piny-inspector-add-class.jpg\" alt=\"\" class=\"wp-image-14080\" srcset=\"\/wp-content\/uploads\/piny-inspector-add-class.jpg 687w, \/wp-content\/uploads\/piny-inspector-add-class-645x773.jpg 645w\" sizes=\"(max-width: 687px) 100vw, 687px\" \/><\/a><\/figure>\n\n\n\n<p>Add states with the states menu.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-inspector-add-state.jpg\" data-rel=\"lightbox-image-21\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"716\" height=\"1245\" src=\"\/wp-content\/uploads\/piny-inspector-add-state.jpg\" alt=\"\" class=\"wp-image-14081\" srcset=\"\/wp-content\/uploads\/piny-inspector-add-state.jpg 716w, \/wp-content\/uploads\/piny-inspector-add-state-645x1122.jpg 645w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><\/a><\/figure>\n\n\n\n<p>Click on states to edit them. Selecting a different state will combine the original state with the selected state (unless you are selecting a different screen size).<\/p>\n\n\n\n<p>Right-click classes to move or duplicate them to another state; duplicate is handy for responsive overrides. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-inspector-right-click.jpg\" data-rel=\"lightbox-image-22\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"592\" height=\"614\" src=\"\/wp-content\/uploads\/piny-inspector-right-click.jpg\" alt=\"\" class=\"wp-image-14082\"\/><\/a><\/figure>\n\n\n\n<p>Drag numeric sliders or use the color picker for custom values.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-inspector-scrub.jpg\" data-rel=\"lightbox-image-23\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"747\" height=\"811\" src=\"\/wp-content\/uploads\/piny-inspector-scrub.jpg\" alt=\"\" class=\"wp-image-14083\" srcset=\"\/wp-content\/uploads\/piny-inspector-scrub.jpg 747w, \/wp-content\/uploads\/piny-inspector-scrub-645x700.jpg 645w\" sizes=\"(max-width: 747px) 100vw, 747px\" \/><\/a><\/figure>\n\n\n\n<p>Narrow down properties with the search bar.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-inspector-search.jpg\" data-rel=\"lightbox-image-24\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"630\" height=\"574\" src=\"\/wp-content\/uploads\/piny-inspector-search.jpg\" alt=\"\" class=\"wp-image-14084\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Components Bar<\/h2>\n\n\n\n<p>The components bar above the preview lets you quickly switch between components. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-comp-bar.jpg\" data-rel=\"lightbox-image-25\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1112\" height=\"662\" src=\"\/wp-content\/uploads\/piny-comp-bar.jpg\" alt=\"\" class=\"wp-image-14086\" srcset=\"\/wp-content\/uploads\/piny-comp-bar.jpg 1112w, \/wp-content\/uploads\/piny-comp-bar-645x384.jpg 645w, \/wp-content\/uploads\/piny-comp-bar-845x503.jpg 845w, \/wp-content\/uploads\/piny-comp-bar-768x457.jpg 768w\" sizes=\"(max-width: 1112px) 100vw, 1112px\" \/><\/a><\/figure>\n\n\n\n<p>It works in two modes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When Visual select is disabled, the bar shows a list of recently viewed components.<\/li>\n\n\n\n<li>With Visual select enabled, the bar shows the selected component and its parents, like breadcrumbs.<\/li>\n<\/ul>\n\n\n\n<p>Click on a component to select it in Piny and in the code.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-comp-bar-click.jpg\" data-rel=\"lightbox-image-26\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1072\" height=\"512\" src=\"\/wp-content\/uploads\/piny-comp-bar-click.jpg\" alt=\"\" class=\"wp-image-14088\" srcset=\"\/wp-content\/uploads\/piny-comp-bar-click.jpg 1072w, \/wp-content\/uploads\/piny-comp-bar-click-645x308.jpg 645w, \/wp-content\/uploads\/piny-comp-bar-click-845x404.jpg 845w, \/wp-content\/uploads\/piny-comp-bar-click-768x367.jpg 768w\" sizes=\"(max-width: 1072px) 100vw, 1072px\" \/><\/a><\/figure>\n\n\n\n<p>Use the dropdown menu to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ignore the component in Visual select<\/strong> (prevents drilling down into the components, will be explained in detail in the chapter about Visual select).<\/li>\n\n\n\n<li><strong>Assign a route<\/strong> to the component. Whenever the component will be selected, the preview will show the associated route.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-comp-bar-dropdown.jpg\" data-rel=\"lightbox-image-27\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1072\" height=\"658\" src=\"\/wp-content\/uploads\/piny-comp-bar-dropdown.jpg\" alt=\"\" class=\"wp-image-14089\" srcset=\"\/wp-content\/uploads\/piny-comp-bar-dropdown.jpg 1072w, \/wp-content\/uploads\/piny-comp-bar-dropdown-645x396.jpg 645w, \/wp-content\/uploads\/piny-comp-bar-dropdown-845x519.jpg 845w, \/wp-content\/uploads\/piny-comp-bar-dropdown-768x471.jpg 768w\" sizes=\"(max-width: 1072px) 100vw, 1072px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">AI Assistant<\/h2>\n\n\n\n<p>After activating the AI Assistant in Settings &#8211; with your own API key for any OpenAI compatible endpoint &#8211; you can use the assistant in two ways:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Drag &amp; Drop<\/h3>\n\n\n\n<p>Click on the Insert button to open the insert panel where you describe the feature, optionally select a referenced component, and than drag it to the desired place in the Tree panel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-ai-insert.jpg\" data-rel=\"lightbox-image-28\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"928\" height=\"1038\" src=\"\/wp-content\/uploads\/piny-ai-insert.jpg\" alt=\"\" class=\"wp-image-14090\" srcset=\"\/wp-content\/uploads\/piny-ai-insert.jpg 928w, \/wp-content\/uploads\/piny-ai-insert-645x721.jpg 645w, \/wp-content\/uploads\/piny-ai-insert-845x945.jpg 845w, \/wp-content\/uploads\/piny-ai-insert-768x859.jpg 768w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><\/a><\/figure>\n\n\n\n<p>This triggers a command in the AI panel where you can followup with further requests.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">AI Panel<\/h3>\n\n\n\n<p>Use chat interface to guide the AI Assistant.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-ai-panel.jpg\" data-rel=\"lightbox-image-29\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1602\" height=\"1235\" src=\"\/wp-content\/uploads\/piny-ai-panel.jpg\" alt=\"\" class=\"wp-image-14091\" srcset=\"\/wp-content\/uploads\/piny-ai-panel.jpg 1602w, \/wp-content\/uploads\/piny-ai-panel-645x497.jpg 645w, \/wp-content\/uploads\/piny-ai-panel-845x651.jpg 845w, \/wp-content\/uploads\/piny-ai-panel-768x592.jpg 768w, \/wp-content\/uploads\/piny-ai-panel-1536x1184.jpg 1536w, \/wp-content\/uploads\/piny-ai-panel-1440x1110.jpg 1440w\" sizes=\"(max-width: 1602px) 100vw, 1602px\" \/><\/a><\/figure>\n\n\n\n<p>Use one of the available actions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Project<\/strong> will do project-wide changes with the ability to read and write multiple files. This action can use up a lot of tokens. Use it for complex tasks such as refactoring components, adding features that span multiple files.<\/li>\n\n\n\n<li><strong>Selected code<\/strong> transforms only the selected code (or selected JSX element) without getting any context of the surrounding code. It is very cost and time efficient and perfect for styling elements and doing changes that only affect the selected element.<\/li>\n\n\n\n<li><strong>Just chatting<\/strong> has no effect on the code.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-ai-action.jpg\" data-rel=\"lightbox-image-30\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"741\" height=\"381\" src=\"\/wp-content\/uploads\/piny-ai-action.jpg\" alt=\"\" class=\"wp-image-14092\" srcset=\"\/wp-content\/uploads\/piny-ai-action.jpg 741w, \/wp-content\/uploads\/piny-ai-action-645x332.jpg 645w\" sizes=\"(max-width: 741px) 100vw, 741px\" \/><\/a><\/figure>\n\n\n\n<p>AI Assistant settings let you designate two models as the quick and the smart model.<\/p>\n\n\n\n<p>Use the Smart toggle to quickly switch between them.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-ai-toggles.jpg\" data-rel=\"lightbox-image-31\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"748\" height=\"390\" src=\"\/wp-content\/uploads\/piny-ai-toggles.jpg\" alt=\"\" class=\"wp-image-14094\" srcset=\"\/wp-content\/uploads\/piny-ai-toggles.jpg 748w, \/wp-content\/uploads\/piny-ai-toggles-645x336.jpg 645w\" sizes=\"(max-width: 748px) 100vw, 748px\" \/><\/a><\/figure>\n\n\n\n<p>Sources toggle lets you insert one or more knowledge sources into the prompt. Right-click on Sources to manage them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Visual Select<\/h2>\n\n\n\n<p>Click on elements in the preview to select them in Piny and in the code.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-select-click.jpg\" data-rel=\"lightbox-image-32\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1612\" height=\"951\" src=\"\/wp-content\/uploads\/piny-visual-select-click.jpg\" alt=\"\" class=\"wp-image-14097\" srcset=\"\/wp-content\/uploads\/piny-visual-select-click.jpg 1612w, \/wp-content\/uploads\/piny-visual-select-click-645x381.jpg 645w, \/wp-content\/uploads\/piny-visual-select-click-845x499.jpg 845w, \/wp-content\/uploads\/piny-visual-select-click-768x453.jpg 768w, \/wp-content\/uploads\/piny-visual-select-click-1536x906.jpg 1536w, \/wp-content\/uploads\/piny-visual-select-click-1440x850.jpg 1440w\" sizes=\"(max-width: 1612px) 100vw, 1612px\" \/><\/a><\/figure>\n\n\n\n<p>Visual select requires a small script to be inserted into the layout of your project. The script is only inserted in development mode and has no effect unless the project is viewed through Piny.<\/p>\n\n\n\n<p>At the moment <code>React Vite<\/code> projects and <code>Next.js<\/code> projects are supported.<\/p>\n\n\n\n<p>Follow the specific instructions provided in Settings to enable Visual select in your project.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-select-settings.jpg\" data-rel=\"lightbox-image-33\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1500\" height=\"833\" src=\"\/wp-content\/uploads\/piny-visual-select-settings.jpg\" alt=\"\" class=\"wp-image-14098\" srcset=\"\/wp-content\/uploads\/piny-visual-select-settings.jpg 1500w, \/wp-content\/uploads\/piny-visual-select-settings-645x358.jpg 645w, \/wp-content\/uploads\/piny-visual-select-settings-845x469.jpg 845w, \/wp-content\/uploads\/piny-visual-select-settings-768x426.jpg 768w, \/wp-content\/uploads\/piny-visual-select-settings-1440x800.jpg 1440w\" sizes=\"(max-width: 1500px) 100vw, 1500px\" \/><\/a><\/figure>\n\n\n\n<p>Use the Click to Select button to switch between visually selecting elements and interacting with your app.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-select-toggle.jpg\" data-rel=\"lightbox-image-34\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"816\" height=\"450\" src=\"\/wp-content\/uploads\/piny-visual-select-toggle.jpg\" alt=\"\" class=\"wp-image-14099\" srcset=\"\/wp-content\/uploads\/piny-visual-select-toggle.jpg 816w, \/wp-content\/uploads\/piny-visual-select-toggle-645x356.jpg 645w, \/wp-content\/uploads\/piny-visual-select-toggle-768x424.jpg 768w\" sizes=\"(max-width: 816px) 100vw, 816px\" \/><\/a><\/figure>\n\n\n\n<p>Activating the Click to Select button also refreshes the DOM mapping, so that\u2019s the first thing to try in case of any issues.<\/p>\n\n\n\n<p>If selected elements borders and menus get in the way you can toggle them with the visual helpers menu.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-select-helpers.jpg\" data-rel=\"lightbox-image-35\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"988\" height=\"362\" src=\"\/wp-content\/uploads\/piny-visual-select-helpers.jpg\" alt=\"\" class=\"wp-image-14100\" srcset=\"\/wp-content\/uploads\/piny-visual-select-helpers.jpg 988w, \/wp-content\/uploads\/piny-visual-select-helpers-645x236.jpg 645w, \/wp-content\/uploads\/piny-visual-select-helpers-845x310.jpg 845w, \/wp-content\/uploads\/piny-visual-select-helpers-768x281.jpg 768w\" sizes=\"(max-width: 988px) 100vw, 988px\" \/><\/a><\/figure>\n\n\n\n<p>Check the Ignore in visual select option on individual components, if you are not interested in drilling down into them.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-select-ignore.jpg\" data-rel=\"lightbox-image-36\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"824\" height=\"448\" src=\"\/wp-content\/uploads\/piny-visual-select-ignore.jpg\" alt=\"\" class=\"wp-image-14101\" srcset=\"\/wp-content\/uploads\/piny-visual-select-ignore.jpg 824w, \/wp-content\/uploads\/piny-visual-select-ignore-645x351.jpg 645w, \/wp-content\/uploads\/piny-visual-select-ignore-768x418.jpg 768w\" sizes=\"(max-width: 824px) 100vw, 824px\" \/><\/a><\/figure>\n\n\n\n<p>For example, clicking on the button will normally select the Button component itself in Piny and code. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-select-ignore-ex2.jpg\" data-rel=\"lightbox-image-37\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1422\" height=\"1014\" src=\"\/wp-content\/uploads\/piny-visual-select-ignore-ex2.jpg\" alt=\"\" class=\"wp-image-14102\" srcset=\"\/wp-content\/uploads\/piny-visual-select-ignore-ex2.jpg 1422w, \/wp-content\/uploads\/piny-visual-select-ignore-ex2-645x460.jpg 645w, \/wp-content\/uploads\/piny-visual-select-ignore-ex2-845x603.jpg 845w, \/wp-content\/uploads\/piny-visual-select-ignore-ex2-768x548.jpg 768w\" sizes=\"(max-width: 1422px) 100vw, 1422px\" \/><\/a><\/figure>\n\n\n\n<p>But, when Button is ignored, the instances of the button in the components where they are used will be selected instead.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-visual-select-ignore-ex2-1.jpg\" data-rel=\"lightbox-image-38\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1422\" height=\"1014\" src=\"\/wp-content\/uploads\/piny-visual-select-ignore-ex2-1.jpg\" alt=\"\" class=\"wp-image-14103\" srcset=\"\/wp-content\/uploads\/piny-visual-select-ignore-ex2-1.jpg 1422w, \/wp-content\/uploads\/piny-visual-select-ignore-ex2-1-645x460.jpg 645w, \/wp-content\/uploads\/piny-visual-select-ignore-ex2-1-845x603.jpg 845w, \/wp-content\/uploads\/piny-visual-select-ignore-ex2-1-768x548.jpg 768w\" sizes=\"(max-width: 1422px) 100vw, 1422px\" \/><\/a><\/figure>\n\n\n\n<p>Under the hood, Visual select is doing some advanced DOM to JSX element mapping. This works even for NextJS projects where source mapping information is not always present. That\u2019s why the mapping might not always be 100% accurate. But even in those cases, it will usually select the JSX element that is close to the correct one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Whole Project Scan &amp; Navigation<\/h2>\n\n\n\n<p>Piny can scan the whole project for components, so that it can recognize them during visual select.&nbsp;<\/p>\n\n\n\n<p>Use the Select tool&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-comp-bar-select.jpg\" data-rel=\"lightbox-image-39\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"941\" height=\"284\" src=\"\/wp-content\/uploads\/piny-comp-bar-select.jpg\" alt=\"\" class=\"wp-image-14106\" srcset=\"\/wp-content\/uploads\/piny-comp-bar-select.jpg 941w, \/wp-content\/uploads\/piny-comp-bar-select-645x195.jpg 645w, \/wp-content\/uploads\/piny-comp-bar-select-845x255.jpg 845w, \/wp-content\/uploads\/piny-comp-bar-select-768x232.jpg 768w\" sizes=\"(max-width: 941px) 100vw, 941px\" \/><\/a><\/figure>\n\n\n\n<p>&#8230; to quickly jump to any component in the project.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-comp-bar-select-list.jpg\" data-rel=\"lightbox-image-40\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1188\" height=\"570\" src=\"\/wp-content\/uploads\/piny-comp-bar-select-list.jpg\" alt=\"\" class=\"wp-image-14108\" srcset=\"\/wp-content\/uploads\/piny-comp-bar-select-list.jpg 1188w, \/wp-content\/uploads\/piny-comp-bar-select-list-645x309.jpg 645w, \/wp-content\/uploads\/piny-comp-bar-select-list-845x405.jpg 845w, \/wp-content\/uploads\/piny-comp-bar-select-list-768x368.jpg 768w\" sizes=\"(max-width: 1188px) 100vw, 1188px\" \/><\/a><\/figure>\n\n\n\n<p>When Visual Select is active, Right-click on the Select to only display components that are visible in the preview.<\/p>\n\n\n\n<p>Also, when Visual Select is active the top bar shows parents of the currently selected component. When Visual Select is off, the recently edited components are shown instead.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-comp-bar-breadcrumbs.jpg\" data-rel=\"lightbox-image-41\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1430\" height=\"658\" src=\"\/wp-content\/uploads\/piny-comp-bar-breadcrumbs.jpg\" alt=\"\" class=\"wp-image-14109\" srcset=\"\/wp-content\/uploads\/piny-comp-bar-breadcrumbs.jpg 1430w, \/wp-content\/uploads\/piny-comp-bar-breadcrumbs-645x297.jpg 645w, \/wp-content\/uploads\/piny-comp-bar-breadcrumbs-845x389.jpg 845w, \/wp-content\/uploads\/piny-comp-bar-breadcrumbs-768x353.jpg 768w\" sizes=\"(max-width: 1430px) 100vw, 1430px\" \/><\/a><\/figure>\n\n\n\n<p>Drag &amp; Drop tool lets you choose which component you want to add to the layout.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-ai-insert-components.jpg\" data-rel=\"lightbox-image-42\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"864\" height=\"890\" src=\"\/wp-content\/uploads\/piny-ai-insert-components.jpg\" alt=\"\" class=\"wp-image-14110\" srcset=\"\/wp-content\/uploads\/piny-ai-insert-components.jpg 864w, \/wp-content\/uploads\/piny-ai-insert-components-645x664.jpg 645w, \/wp-content\/uploads\/piny-ai-insert-components-845x870.jpg 845w, \/wp-content\/uploads\/piny-ai-insert-components-768x791.jpg 768w\" sizes=\"(max-width: 864px) 100vw, 864px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Import Tailwind Theme<\/h2>\n\n\n\n<p>Piny Pro can automatically import colors, fonts, breakpoints and other visual properties from your Tailwind theme. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-tailwind-config.jpg\" data-rel=\"lightbox-image-43\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"826\" height=\"818\" src=\"\/wp-content\/uploads\/piny-tailwind-config.jpg\" alt=\"\" class=\"wp-image-14111\" srcset=\"\/wp-content\/uploads\/piny-tailwind-config.jpg 826w, \/wp-content\/uploads\/piny-tailwind-config-645x639.jpg 645w, \/wp-content\/uploads\/piny-tailwind-config-150x150.jpg 150w, \/wp-content\/uploads\/piny-tailwind-config-768x761.jpg 768w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/a><\/figure>\n\n\n\n<p>Once you point it to your Tailwind source files, Visual controls and inspector will reflect your custom theme values.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-tailwind-display.jpg\" data-rel=\"lightbox-image-44\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"657\" height=\"813\" src=\"\/wp-content\/uploads\/piny-tailwind-display.jpg\" alt=\"\" class=\"wp-image-14112\" srcset=\"\/wp-content\/uploads\/piny-tailwind-display.jpg 657w, \/wp-content\/uploads\/piny-tailwind-display-645x798.jpg 645w\" sizes=\"(max-width: 657px) 100vw, 657px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Settings<\/h2>\n\n\n\n<p>Some features require a little bit of setup.<\/p>\n\n\n\n<p>Click on the Settings button to open the dialog.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-settings.jpg\" data-rel=\"lightbox-image-45\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"648\" height=\"442\" src=\"\/wp-content\/uploads\/piny-settings.jpg\" alt=\"\" class=\"wp-image-14114\" srcset=\"\/wp-content\/uploads\/piny-settings.jpg 648w, \/wp-content\/uploads\/piny-settings-645x440.jpg 645w\" sizes=\"(max-width: 648px) 100vw, 648px\" \/><\/a><\/figure>\n\n\n\n<p>Piny tries to auto detect the URL of the development server. In rare cases where that doesn\u2019t work, enter the URL here, under Live preview.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-settings-url.jpg\" data-rel=\"lightbox-image-46\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1800\" height=\"622\" src=\"\/wp-content\/uploads\/piny-settings-url.jpg\" alt=\"\" class=\"wp-image-14115\" srcset=\"\/wp-content\/uploads\/piny-settings-url.jpg 1800w, \/wp-content\/uploads\/piny-settings-url-645x223.jpg 645w, \/wp-content\/uploads\/piny-settings-url-845x292.jpg 845w, \/wp-content\/uploads\/piny-settings-url-768x265.jpg 768w, \/wp-content\/uploads\/piny-settings-url-1536x531.jpg 1536w, \/wp-content\/uploads\/piny-settings-url-1440x498.jpg 1440w\" sizes=\"(max-width: 1800px) 100vw, 1800px\" \/><\/a><\/figure>\n\n\n\n<p>Piny\u2019s AI assistant works with multiple AI providers and your own API keys. Open AI Assistant Settings to activate providers and choose a Quick and Smart models.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-settings-ai.jpg\" data-rel=\"lightbox-image-47\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1754\" height=\"770\" src=\"\/wp-content\/uploads\/piny-settings-ai.jpg\" alt=\"\" class=\"wp-image-14117\" srcset=\"\/wp-content\/uploads\/piny-settings-ai.jpg 1754w, \/wp-content\/uploads\/piny-settings-ai-645x283.jpg 645w, \/wp-content\/uploads\/piny-settings-ai-845x371.jpg 845w, \/wp-content\/uploads\/piny-settings-ai-768x337.jpg 768w, \/wp-content\/uploads\/piny-settings-ai-1536x674.jpg 1536w, \/wp-content\/uploads\/piny-settings-ai-1440x632.jpg 1440w\" sizes=\"(max-width: 1754px) 100vw, 1754px\" \/><\/a><\/figure>\n\n\n\n<p>Use Project Brief field to enter any custom instructions for the current project.&nbsp;<\/p>\n\n\n\n<p>You can also define Knowledge Sources that can then be included in AI Assistant prompts.<\/p>\n\n\n\n<p>If you don\u2019t need Piny\u2019s AI Assistant select this checkbox and the AI panel will be hidden.<\/p>\n\n\n\n<p>To import your custom Tailwind theme, point Piny to the Tailwind config and source file. For Tailwind 4 only the source file is required.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-settings-tailwind.jpg\" data-rel=\"lightbox-image-48\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1754\" height=\"556\" src=\"\/wp-content\/uploads\/piny-settings-tailwind.jpg\" alt=\"\" class=\"wp-image-14118\" srcset=\"\/wp-content\/uploads\/piny-settings-tailwind.jpg 1754w, \/wp-content\/uploads\/piny-settings-tailwind-645x204.jpg 645w, \/wp-content\/uploads\/piny-settings-tailwind-845x268.jpg 845w, \/wp-content\/uploads\/piny-settings-tailwind-768x243.jpg 768w, \/wp-content\/uploads\/piny-settings-tailwind-1536x487.jpg 1536w, \/wp-content\/uploads\/piny-settings-tailwind-1440x456.jpg 1440w\" sizes=\"(max-width: 1754px) 100vw, 1754px\" \/><\/a><\/figure>\n\n\n\n<p>Source folders contain a list of project folders that Piny scans for components. By default, src, pages and components folders are scanned.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-settings-source-folders.jpg\" data-rel=\"lightbox-image-49\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1752\" height=\"592\" src=\"\/wp-content\/uploads\/piny-settings-source-folders.jpg\" alt=\"\" class=\"wp-image-14119\" srcset=\"\/wp-content\/uploads\/piny-settings-source-folders.jpg 1752w, \/wp-content\/uploads\/piny-settings-source-folders-645x218.jpg 645w, \/wp-content\/uploads\/piny-settings-source-folders-845x286.jpg 845w, \/wp-content\/uploads\/piny-settings-source-folders-768x260.jpg 768w, \/wp-content\/uploads\/piny-settings-source-folders-1536x519.jpg 1536w, \/wp-content\/uploads\/piny-settings-source-folders-1440x487.jpg 1440w\" sizes=\"(max-width: 1752px) 100vw, 1752px\" \/><\/a><\/figure>\n\n\n\n<p>For very large projects, it makes sense to only enter specific folders that contain subset of components that you are actively working on.<\/p>\n\n\n\n<p>Visual Select requires that a small script is included in the layout of your project.<\/p>\n\n\n\n<p>Follow the setup instructions to do that.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-settings-vis-sel.jpg\" data-rel=\"lightbox-image-50\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"1754\" height=\"1196\" src=\"\/wp-content\/uploads\/piny-settings-vis-sel.jpg\" alt=\"\" class=\"wp-image-14120\" srcset=\"\/wp-content\/uploads\/piny-settings-vis-sel.jpg 1754w, \/wp-content\/uploads\/piny-settings-vis-sel-645x440.jpg 645w, \/wp-content\/uploads\/piny-settings-vis-sel-845x576.jpg 845w, \/wp-content\/uploads\/piny-settings-vis-sel-768x524.jpg 768w, \/wp-content\/uploads\/piny-settings-vis-sel-1536x1047.jpg 1536w, \/wp-content\/uploads\/piny-settings-vis-sel-1440x982.jpg 1440w\" sizes=\"(max-width: 1754px) 100vw, 1754px\" \/><\/a><\/figure>\n\n\n\n<p>The point is to include the Piny script in the layout, but only in development mode, and to optionally toggle it with an environment setting. But even if the script is included, it is only activated when the preview runs in Piny.<\/p>\n\n\n\n<p>Not all build methods are supported yet. Let me know what you are using so that we can prioritize implementing the support for most commonly used stacks.<\/p>\n\n\n\n<p>The Piny UI is fully customizable. Use the Workspace menu to save and restore panel positions. That\u2019s also useful if the workspace gets messed up.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-settings-workspace.jpg\" data-rel=\"lightbox-image-51\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"904\" height=\"466\" src=\"\/wp-content\/uploads\/piny-settings-workspace.jpg\" alt=\"\" class=\"wp-image-14121\" srcset=\"\/wp-content\/uploads\/piny-settings-workspace.jpg 904w, \/wp-content\/uploads\/piny-settings-workspace-645x332.jpg 645w, \/wp-content\/uploads\/piny-settings-workspace-845x436.jpg 845w, \/wp-content\/uploads\/piny-settings-workspace-768x396.jpg 768w\" sizes=\"(max-width: 904px) 100vw, 904px\" \/><\/a><\/figure>\n\n\n\n<p>And, finally, use Manage License dialog to buy and activate your Piny PRO license.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"\/wp-content\/uploads\/piny-settings-manage.jpg\" data-rel=\"lightbox-image-52\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img decoding=\"async\" width=\"930\" height=\"322\" src=\"\/wp-content\/uploads\/piny-settings-manage.jpg\" alt=\"\" class=\"wp-image-14122\" srcset=\"\/wp-content\/uploads\/piny-settings-manage.jpg 930w, \/wp-content\/uploads\/piny-settings-manage-645x223.jpg 645w, \/wp-content\/uploads\/piny-settings-manage-845x293.jpg 845w, \/wp-content\/uploads\/piny-settings-manage-768x266.jpg 768w\" sizes=\"(max-width: 930px) 100vw, 930px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to install and use Piny.<\/p>\n","protected":false},"author":2,"featured_media":14057,"parent":1574,"menu_order":19,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-14054","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/pages\/14054","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/comments?post=14054"}],"version-history":[{"count":4,"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/pages\/14054\/revisions"}],"predecessor-version":[{"id":14173,"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/pages\/14054\/revisions\/14173"}],"up":[{"embeddable":true,"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/pages\/1574"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/media\/14057"}],"wp:attachment":[{"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/media?parent=14054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/categories?post=14054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.pinegrow.com\/wp-json\/wp\/v2\/tags?post=14054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}