jigsaw_engine 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +18 -0
- data/Rakefile +6 -0
- data/app/assets/stylesheets/jigsaw/grid_resize.css +21 -0
- data/app/assets/stylesheets/jigsaw/layout_editor.css +356 -0
- data/app/components/custom_module_component.rb +38 -0
- data/app/controllers/jigsaw/application_controller.rb +5 -0
- data/app/controllers/jigsaw/dashboard_controller.rb +8 -0
- data/app/controllers/jigsaw/layout_templates_controller.rb +73 -0
- data/app/controllers/jigsaw/pages_controller.rb +114 -0
- data/app/controllers/jigsaw/slot_templates_controller.rb +71 -0
- data/app/controllers/jigsaw/slots_controller.rb +54 -0
- data/app/helpers/jigsaw/custom_module_helper.rb +7 -0
- data/app/helpers/jigsaw/pages_helper.rb +7 -0
- data/app/javascript/jigsaw/components/ui/button.js +53 -0
- data/app/javascript/jigsaw/components/ui/dropdown-menu.js +157 -0
- data/app/javascript/jigsaw/components/ui/sheet.js +122 -0
- data/app/javascript/jigsaw/components/ui/utils.js +8 -0
- data/app/javascript/jigsaw/controllers/custom_module_controller.js +75 -0
- data/app/javascript/jigsaw/controllers/custom_page_controller.js +23 -0
- data/app/javascript/jigsaw/controllers/flyout_resize_controller.js +60 -0
- data/app/javascript/jigsaw/controllers/grid_resize_controller.js +228 -0
- data/app/javascript/jigsaw/controllers/layout_editor_controller.js +502 -0
- data/app/javascript/jigsaw/controllers/module_editor_controller.js +146 -0
- data/app/javascript/jigsaw/controllers/monaco_editor_controller.js +49 -0
- data/app/javascript/jigsaw/lib/generate_layout_css.js +52 -0
- data/app/javascript/seeds/blocks/authentication-forms-1/config.json +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-1/data.js +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-1/render.jsx +80 -0
- data/app/javascript/seeds/blocks/authentication-forms-2/config.json +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-2/data.js +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-2/render.jsx +90 -0
- data/app/javascript/seeds/blocks/authentication-forms-3/config.json +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-3/data.js +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-3/render.jsx +94 -0
- data/app/javascript/seeds/blocks/authentication-forms-4/config.json +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-4/data.js +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-4/render.jsx +97 -0
- data/app/javascript/seeds/blocks/authentication-forms-5/config.json +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-5/data.js +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-5/render.jsx +82 -0
- data/app/javascript/seeds/blocks/authentication-forms-6/config.json +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-6/data.js +1 -0
- data/app/javascript/seeds/blocks/authentication-forms-6/render.jsx +34 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-1/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-1/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-1/render.jsx +98 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-10/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-10/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-10/render.jsx +181 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-11/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-11/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-11/render.jsx +184 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-12/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-12/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-12/render.jsx +180 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-13/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-13/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-13/render.jsx +151 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-14/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-14/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-14/render.jsx +169 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-15/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-15/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-15/render.jsx +115 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-16/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-16/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-16/render.jsx +128 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-17/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-17/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-17/render.jsx +84 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-18/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-18/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-18/render.jsx +139 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-19/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-19/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-19/render.jsx +146 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-2/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-2/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-2/render.jsx +163 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-20/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-20/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-20/render.jsx +71 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-3/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-3/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-3/render.jsx +122 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-4/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-4/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-4/render.jsx +136 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-5/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-5/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-5/render.jsx +294 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-6/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-6/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-6/render.jsx +139 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-7/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-7/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-7/render.jsx +219 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-8/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-8/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-8/render.jsx +249 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-9/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-9/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/charts-9/render.jsx +213 -0
- data/app/javascript/seeds/blocks/dashboard-ui/form-layouts-1/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/form-layouts-1/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/form-layouts-1/render.jsx +434 -0
- data/app/javascript/seeds/blocks/dashboard-ui/form-layouts-2/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/form-layouts-2/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/form-layouts-2/render.jsx +332 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-1/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-1/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-1/render.jsx +121 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-2/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-2/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-2/render.jsx +99 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-3/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-3/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/modal-dialogs-3/render.jsx +176 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-1/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-1/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-1/render.jsx +20 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-2/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-2/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-2/render.jsx +22 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-3/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-3/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/page-layouts-3/render.jsx +22 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sidebar-layouts-1/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sidebar-layouts-1/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sidebar-layouts-1/render.jsx +20 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-1/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-1/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-1/render.jsx +98 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-2/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-2/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-2/render.jsx +116 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-3/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-3/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/sign-in-forms-3/render.jsx +104 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-1/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-1/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-1/render.jsx +147 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-2/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-2/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-2/render.jsx +120 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-3/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-3/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-3/render.jsx +62 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-4/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-4/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-4/render.jsx +49 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-5/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-5/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-5/render.jsx +106 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-6/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-6/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-6/render.jsx +79 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-7/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-7/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-7/render.jsx +57 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-8/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-8/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/stat-cards-8/render.jsx +234 -0
- data/app/javascript/seeds/blocks/dashboard-ui/tables-1/config.json +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/tables-1/data.js +1 -0
- data/app/javascript/seeds/blocks/dashboard-ui/tables-1/render.jsx +295 -0
- data/app/javascript/seeds/blocks/datepicker-1/config.json +1 -0
- data/app/javascript/seeds/blocks/datepicker-1/data.js +1 -0
- data/app/javascript/seeds/blocks/datepicker-1/render.jsx +14 -0
- data/app/javascript/seeds/blocks/datepicker-2/config.json +1 -0
- data/app/javascript/seeds/blocks/datepicker-2/data.js +1 -0
- data/app/javascript/seeds/blocks/datepicker-2/render.jsx +29 -0
- data/app/javascript/seeds/blocks/datepicker-3/config.json +1 -0
- data/app/javascript/seeds/blocks/datepicker-3/data.js +1 -0
- data/app/javascript/seeds/blocks/datepicker-3/render.jsx +163 -0
- data/app/javascript/seeds/blocks/datepicker-4/config.json +1 -0
- data/app/javascript/seeds/blocks/datepicker-4/data.js +1 -0
- data/app/javascript/seeds/blocks/datepicker-4/render.jsx +192 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-1/render.jsx +723 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-2/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-2/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-2/render.jsx +508 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-3/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-3/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-3/render.jsx +632 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-4/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-4/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-4/render.jsx +1013 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-5/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-5/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/checkout-page-5/render.jsx +520 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-1/render.jsx +121 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-2/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-2/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-2/render.jsx +126 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-3/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-3/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-3/render.jsx +81 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-4/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-4/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-category-4/render.jsx +85 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-1/render.jsx +80 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-2/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-2/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-2/render.jsx +226 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-3/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-3/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-3/render.jsx +315 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-4/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-4/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-4/render.jsx +269 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-5/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-5/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-5/render.jsx +265 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-6/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-6/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-6/render.jsx +477 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-7/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-7/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-detail-7/render.jsx +405 -0
- data/app/javascript/seeds/blocks/ecommerce/product-features-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-features-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-features-1/render.jsx +71 -0
- data/app/javascript/seeds/blocks/ecommerce/product-features-2/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-features-2/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-features-2/render.jsx +135 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-1/render.jsx +87 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-2/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-2/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-2/render.jsx +151 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-3/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-3/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-3/render.jsx +313 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-4/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-4/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-4/render.jsx +223 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-5/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-5/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-5/render.jsx +200 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-6/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-6/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-6/render.jsx +177 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-7/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-7/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-7/render.jsx +175 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-8/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-8/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-list-8/render.jsx +231 -0
- data/app/javascript/seeds/blocks/ecommerce/product-quickview-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-quickview-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-quickview-1/render.jsx +64 -0
- data/app/javascript/seeds/blocks/ecommerce/product-quickview-2/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-quickview-2/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/product-quickview-2/render.jsx +62 -0
- data/app/javascript/seeds/blocks/ecommerce/promo-sections-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/promo-sections-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/promo-sections-1/render.jsx +75 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-1/render.jsx +197 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-2/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-2/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-2/render.jsx +143 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-3/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-3/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-3/render.jsx +225 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-4/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-4/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/shopping-cart-4/render.jsx +93 -0
- data/app/javascript/seeds/blocks/ecommerce/store-navigation-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce/store-navigation-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce/store-navigation-1/render.jsx +290 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-1/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-1/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-1/render.jsx +86 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-2/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-2/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-2/render.jsx +119 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-3/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-3/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-3/render.jsx +97 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-4/config.json +1 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-4/data.js +1 -0
- data/app/javascript/seeds/blocks/ecommerce-charts-4/render.jsx +108 -0
- data/app/javascript/seeds/blocks/line-charts-1/config.json +1 -0
- data/app/javascript/seeds/blocks/line-charts-1/data.js +1 -0
- data/app/javascript/seeds/blocks/line-charts-1/render.jsx +230 -0
- data/app/javascript/seeds/blocks/line-charts-2/config.json +1 -0
- data/app/javascript/seeds/blocks/line-charts-2/data.js +1 -0
- data/app/javascript/seeds/blocks/line-charts-2/render.jsx +118 -0
- data/app/javascript/seeds/blocks/line-charts-3/config.json +1 -0
- data/app/javascript/seeds/blocks/line-charts-3/data.js +1 -0
- data/app/javascript/seeds/blocks/line-charts-3/render.jsx +134 -0
- data/app/javascript/seeds/blocks/line-charts-4/config.json +1 -0
- data/app/javascript/seeds/blocks/line-charts-4/data.js +1 -0
- data/app/javascript/seeds/blocks/line-charts-4/render.jsx +115 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-1/render.jsx +31 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-10/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-10/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-10/render.jsx +76 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-2/render.jsx +78 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-3/render.jsx +50 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-4/render.jsx +24 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-5/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-5/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-5/render.jsx +66 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-6/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-6/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-6/render.jsx +69 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-7/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-7/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-7/render.jsx +43 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-8/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-8/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-8/render.jsx +63 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-9/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-9/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/call-to-action-9/render.jsx +27 -0
- data/app/javascript/seeds/blocks/marketing/changelog-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/changelog-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/changelog-1/render.jsx +106 -0
- data/app/javascript/seeds/blocks/marketing/changelog-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/changelog-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/changelog-2/render.jsx +157 -0
- data/app/javascript/seeds/blocks/marketing/changelog-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/changelog-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/changelog-3/render.jsx +204 -0
- data/app/javascript/seeds/blocks/marketing/changelog-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/changelog-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/changelog-4/render.jsx +199 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-1/render.jsx +155 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-10/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-10/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-10/render.jsx +83 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-11/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-11/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-11/render.jsx +338 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-12/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-12/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-12/render.jsx +96 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-13/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-13/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-13/render.jsx +77 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-2/render.jsx +117 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-3/render.jsx +105 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-4/render.jsx +127 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-5/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-5/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-5/render.jsx +78 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-6/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-6/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-6/render.jsx +79 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-7/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-7/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-7/render.jsx +138 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-8/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-8/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-8/render.jsx +215 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-9/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-9/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/feature-section-9/render.jsx +81 -0
- data/app/javascript/seeds/blocks/marketing/footers-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-1/render.jsx +106 -0
- data/app/javascript/seeds/blocks/marketing/footers-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-2/render.jsx +76 -0
- data/app/javascript/seeds/blocks/marketing/footers-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-3/render.jsx +160 -0
- data/app/javascript/seeds/blocks/marketing/footers-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-4/render.jsx +167 -0
- data/app/javascript/seeds/blocks/marketing/footers-5/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-5/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/footers-5/render.jsx +223 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-1/render.jsx +49 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-10/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-10/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-10/render.jsx +147 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-11/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-11/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-11/render.jsx +218 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-12/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-12/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-12/render.jsx +287 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-13/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-13/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-13/render.jsx +113 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-14/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-14/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-14/render.jsx +249 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-2/render.jsx +94 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-3/render.jsx +51 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-4/render.jsx +153 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-5/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-5/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-5/render.jsx +210 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-6/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-6/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-6/render.jsx +191 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-7/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-7/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-7/render.jsx +306 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-8/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-8/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-8/render.jsx +103 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-9/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-9/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/hero-section-9/render.jsx +354 -0
- data/app/javascript/seeds/blocks/marketing/integrations-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-1/render.jsx +483 -0
- data/app/javascript/seeds/blocks/marketing/integrations-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-2/render.jsx +468 -0
- data/app/javascript/seeds/blocks/marketing/integrations-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-3/render.jsx +441 -0
- data/app/javascript/seeds/blocks/marketing/integrations-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-4/render.jsx +433 -0
- data/app/javascript/seeds/blocks/marketing/integrations-5/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-5/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-5/render.jsx +477 -0
- data/app/javascript/seeds/blocks/marketing/integrations-6/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-6/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/integrations-6/render.jsx +468 -0
- data/app/javascript/seeds/blocks/marketing/navbars-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/navbars-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/navbars-1/render.jsx +133 -0
- data/app/javascript/seeds/blocks/marketing/navbars-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/navbars-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/navbars-2/render.jsx +95 -0
- data/app/javascript/seeds/blocks/marketing/navbars-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/navbars-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/navbars-3/render.jsx +246 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-1/render.jsx +45 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-2/render.jsx +55 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/newsletter-sections-3/render.jsx +29 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-1/render.jsx +110 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-2/render.jsx +71 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-3/render.jsx +124 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-4/render.jsx +205 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-5/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-5/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-5/render.jsx +143 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-6/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-6/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-6/render.jsx +195 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-7/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-7/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/pricing-table-7/render.jsx +351 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-1/render.jsx +71 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-2/render.jsx +125 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-3/render.jsx +136 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-4/render.jsx +107 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-5/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-5/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/team-sections-5/render.jsx +124 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-1/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-1/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-1/render.jsx +112 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-10/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-10/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-10/render.jsx +106 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-11/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-11/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-11/render.jsx +79 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-12/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-12/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-12/render.jsx +173 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-13/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-13/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-13/render.jsx +121 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-14/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-14/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-14/render.jsx +158 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-15/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-15/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-15/render.jsx +109 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-2/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-2/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-2/render.jsx +81 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-3/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-3/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-3/render.jsx +149 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-4/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-4/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-4/render.jsx +148 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-5/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-5/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-5/render.jsx +153 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-6/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-6/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-6/render.jsx +155 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-7/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-7/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-7/render.jsx +102 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-8/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-8/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-8/render.jsx +161 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-9/config.json +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-9/data.js +1 -0
- data/app/javascript/seeds/blocks/marketing/testimonials-9/render.jsx +195 -0
- data/app/javascript/seeds/blocks/project-management-charts-1/config.json +1 -0
- data/app/javascript/seeds/blocks/project-management-charts-1/data.js +1 -0
- data/app/javascript/seeds/blocks/project-management-charts-1/render.jsx +172 -0
- data/app/javascript/seeds/blocks/project-management-charts-2/config.json +1 -0
- data/app/javascript/seeds/blocks/project-management-charts-2/data.js +1 -0
- data/app/javascript/seeds/blocks/project-management-charts-2/render.jsx +147 -0
- data/app/javascript/seeds/blocks/switch-cards-1/config.json +1 -0
- data/app/javascript/seeds/blocks/switch-cards-1/data.js +1 -0
- data/app/javascript/seeds/blocks/switch-cards-1/render.jsx +116 -0
- data/app/javascript/seeds/blocks/theme-switchers-1/config.json +1 -0
- data/app/javascript/seeds/blocks/theme-switchers-1/data.js +1 -0
- data/app/javascript/seeds/blocks/theme-switchers-1/render.jsx +22 -0
- data/app/javascript/seeds/blocks/theme-switchers-2/config.json +1 -0
- data/app/javascript/seeds/blocks/theme-switchers-2/data.js +1 -0
- data/app/javascript/seeds/blocks/theme-switchers-2/render.jsx +51 -0
- data/app/javascript/seeds/blocks/theme-switchers-3/config.json +1 -0
- data/app/javascript/seeds/blocks/theme-switchers-3/data.js +1 -0
- data/app/javascript/seeds/blocks/theme-switchers-3/render.jsx +37 -0
- data/app/javascript/seeds/examples/blog-cards-1/config.json +1 -0
- data/app/javascript/seeds/examples/blog-cards-1/data.js +1 -0
- data/app/javascript/seeds/examples/blog-cards-1/render.jsx +81 -0
- data/app/javascript/seeds/examples/blog-cards-2/config.json +1 -0
- data/app/javascript/seeds/examples/blog-cards-2/data.js +1 -0
- data/app/javascript/seeds/examples/blog-cards-2/render.jsx +78 -0
- data/app/javascript/seeds/examples/blog-cards-3/config.json +1 -0
- data/app/javascript/seeds/examples/blog-cards-3/data.js +1 -0
- data/app/javascript/seeds/examples/blog-cards-3/render.jsx +80 -0
- data/app/javascript/seeds/examples/blog-cards-4/config.json +1 -0
- data/app/javascript/seeds/examples/blog-cards-4/data.js +1 -0
- data/app/javascript/seeds/examples/blog-cards-4/render.jsx +32 -0
- data/app/javascript/seeds/examples/chat-bubbles-1/config.json +1 -0
- data/app/javascript/seeds/examples/chat-bubbles-1/data.js +1 -0
- data/app/javascript/seeds/examples/chat-bubbles-1/render.jsx +154 -0
- data/app/javascript/seeds/examples/chat-bubbles-2/config.json +1 -0
- data/app/javascript/seeds/examples/chat-bubbles-2/data.js +1 -0
- data/app/javascript/seeds/examples/chat-bubbles-2/render.jsx +88 -0
- data/app/javascript/seeds/examples/chat-bubbles-3/config.json +1 -0
- data/app/javascript/seeds/examples/chat-bubbles-3/data.js +1 -0
- data/app/javascript/seeds/examples/chat-bubbles-3/render.jsx +90 -0
- data/app/javascript/seeds/examples/chat-bubbles-4/config.json +1 -0
- data/app/javascript/seeds/examples/chat-bubbles-4/data.js +1 -0
- data/app/javascript/seeds/examples/chat-bubbles-4/render.jsx +169 -0
- data/app/javascript/seeds/examples/payment-methods-1/config.json +1 -0
- data/app/javascript/seeds/examples/payment-methods-1/data.js +1 -0
- data/app/javascript/seeds/examples/payment-methods-1/render.jsx +128 -0
- data/app/javascript/seeds/examples/payment-methods-2/config.json +1 -0
- data/app/javascript/seeds/examples/payment-methods-2/data.js +1 -0
- data/app/javascript/seeds/examples/payment-methods-2/render.jsx +80 -0
- data/app/javascript/seeds/examples/payment-methods-3/config.json +1 -0
- data/app/javascript/seeds/examples/payment-methods-3/data.js +1 -0
- data/app/javascript/seeds/examples/payment-methods-3/render.jsx +1 -0
- data/app/javascript/seeds/examples/product-cards-1/config.json +1 -0
- data/app/javascript/seeds/examples/product-cards-1/data.js +1 -0
- data/app/javascript/seeds/examples/product-cards-1/render.jsx +48 -0
- data/app/javascript/seeds/examples/product-cards-2/config.json +1 -0
- data/app/javascript/seeds/examples/product-cards-2/data.js +1 -0
- data/app/javascript/seeds/examples/product-cards-2/render.jsx +53 -0
- data/app/javascript/seeds/examples/product-cards-3/config.json +1 -0
- data/app/javascript/seeds/examples/product-cards-3/data.js +1 -0
- data/app/javascript/seeds/examples/product-cards-3/render.jsx +102 -0
- data/app/javascript/seeds/examples/product-cards-4/config.json +1 -0
- data/app/javascript/seeds/examples/product-cards-4/data.js +1 -0
- data/app/javascript/seeds/examples/product-cards-4/render.jsx +40 -0
- data/app/javascript/seeds/examples/product-cards-5/config.json +1 -0
- data/app/javascript/seeds/examples/product-cards-5/data.js +1 -0
- data/app/javascript/seeds/examples/product-cards-5/render.jsx +79 -0
- data/app/javascript/seeds/examples/product-cards-6/config.json +1 -0
- data/app/javascript/seeds/examples/product-cards-6/data.js +1 -0
- data/app/javascript/seeds/examples/product-cards-6/render.jsx +180 -0
- data/app/javascript/seeds/examples/product-cards-7/config.json +1 -0
- data/app/javascript/seeds/examples/product-cards-7/data.js +1 -0
- data/app/javascript/seeds/examples/product-cards-7/render.jsx +181 -0
- data/app/javascript/seeds/examples/product-list-1/config.json +1 -0
- data/app/javascript/seeds/examples/product-list-1/data.js +1 -0
- data/app/javascript/seeds/examples/product-list-1/render.jsx +114 -0
- data/app/javascript/seeds/examples/review-cards-1/config.json +1 -0
- data/app/javascript/seeds/examples/review-cards-1/data.js +1 -0
- data/app/javascript/seeds/examples/review-cards-1/render.jsx +54 -0
- data/app/javascript/seeds/examples/review-cards-2/config.json +1 -0
- data/app/javascript/seeds/examples/review-cards-2/data.js +1 -0
- data/app/javascript/seeds/examples/review-cards-2/render.jsx +68 -0
- data/app/javascript/seeds/examples/review-cards-3/config.json +1 -0
- data/app/javascript/seeds/examples/review-cards-3/data.js +1 -0
- data/app/javascript/seeds/examples/review-cards-3/render.jsx +101 -0
- data/app/javascript/seeds/examples/social-media-post-1/config.json +1 -0
- data/app/javascript/seeds/examples/social-media-post-1/data.js +1 -0
- data/app/javascript/seeds/examples/social-media-post-1/render.jsx +162 -0
- data/app/javascript/seeds/examples/social-media-post-2/config.json +1 -0
- data/app/javascript/seeds/examples/social-media-post-2/data.js +1 -0
- data/app/javascript/seeds/examples/social-media-post-2/render.jsx +172 -0
- data/app/javascript/seeds/examples/social-media-post-3/config.json +1 -0
- data/app/javascript/seeds/examples/social-media-post-3/data.js +1 -0
- data/app/javascript/seeds/examples/social-media-post-3/render.jsx +270 -0
- data/app/javascript/seeds/examples/social-media-post-4/config.json +1 -0
- data/app/javascript/seeds/examples/social-media-post-4/data.js +1 -0
- data/app/javascript/seeds/examples/social-media-post-4/render.jsx +188 -0
- data/app/javascript/seeds/examples/stat-cards-1/config.json +1 -0
- data/app/javascript/seeds/examples/stat-cards-1/data.js +1 -0
- data/app/javascript/seeds/examples/stat-cards-1/render.jsx +31 -0
- data/app/javascript/seeds/examples/stat-cards-2/config.json +1 -0
- data/app/javascript/seeds/examples/stat-cards-2/data.js +1 -0
- data/app/javascript/seeds/examples/stat-cards-2/render.jsx +42 -0
- data/app/javascript/seeds/examples/stat-cards-3/config.json +1 -0
- data/app/javascript/seeds/examples/stat-cards-3/data.js +1 -0
- data/app/javascript/seeds/examples/stat-cards-3/render.jsx +114 -0
- data/app/javascript/seeds/examples/stat-cards-4/config.json +1 -0
- data/app/javascript/seeds/examples/stat-cards-4/data.js +1 -0
- data/app/javascript/seeds/examples/stat-cards-4/render.jsx +117 -0
- data/app/javascript/seeds/examples/task-cards-1/config.json +1 -0
- data/app/javascript/seeds/examples/task-cards-1/data.js +1 -0
- data/app/javascript/seeds/examples/task-cards-1/render.jsx +133 -0
- data/app/javascript/seeds/examples/task-cards-2/config.json +1 -0
- data/app/javascript/seeds/examples/task-cards-2/data.js +1 -0
- data/app/javascript/seeds/examples/task-cards-2/render.jsx +122 -0
- data/app/javascript/seeds/examples/welcome-cards-1/config.json +1 -0
- data/app/javascript/seeds/examples/welcome-cards-1/data.js +1 -0
- data/app/javascript/seeds/examples/welcome-cards-1/render.jsx +40 -0
- data/app/javascript/seeds/examples/welcome-cards-2/config.json +1 -0
- data/app/javascript/seeds/examples/welcome-cards-2/data.js +1 -0
- data/app/javascript/seeds/examples/welcome-cards-2/render.jsx +58 -0
- data/app/javascript/seeds/examples/welcome-cards-3/config.json +1 -0
- data/app/javascript/seeds/examples/welcome-cards-3/data.js +1 -0
- data/app/javascript/seeds/examples/welcome-cards-3/render.jsx +91 -0
- data/app/javascript/seeds/ide-editor/config.json +4 -0
- data/app/javascript/seeds/ide-editor/data.js +16 -0
- data/app/javascript/seeds/ide-editor/render.jsx +132 -0
- data/app/javascript/seeds/ide-file-tree/config.json +4 -0
- data/app/javascript/seeds/ide-file-tree/data.js +50 -0
- data/app/javascript/seeds/ide-file-tree/render.jsx +426 -0
- data/app/javascript/seeds/ide-preview/config.json +4 -0
- data/app/javascript/seeds/ide-preview/data.js +4 -0
- data/app/javascript/seeds/ide-preview/render.jsx +49 -0
- data/app/javascript/seeds/ide-terminal/config.json +4 -0
- data/app/javascript/seeds/ide-terminal/data.js +4 -0
- data/app/javascript/seeds/ide-terminal/render.jsx +247 -0
- data/app/javascript/seeds/main-menu/config.json +9 -0
- data/app/javascript/seeds/main-menu/data.js +6 -0
- data/app/javascript/seeds/main-menu/render.jsx +70 -0
- data/app/models/concerns/jigsaw/grid_configurable.rb +89 -0
- data/app/models/concerns/jigsaw/slot_compilable.rb +69 -0
- data/app/models/jigsaw/application_record.rb +5 -0
- data/app/models/jigsaw/layout.rb +61 -0
- data/app/models/jigsaw/layout_template.rb +16 -0
- data/app/models/jigsaw/page.rb +35 -0
- data/app/models/jigsaw/schemas/layout_config.json +54 -0
- data/app/models/jigsaw/slot.rb +109 -0
- data/app/models/jigsaw/slot_template.rb +29 -0
- data/app/views/jigsaw/dashboard/index.html.ruby +23 -0
- data/app/views/jigsaw/layout_templates/_form.html.ruby +69 -0
- data/app/views/jigsaw/layout_templates/edit.html.ruby +72 -0
- data/app/views/jigsaw/layout_templates/index.html.ruby +48 -0
- data/app/views/jigsaw/layout_templates/new.html.ruby +19 -0
- data/app/views/jigsaw/pages/_form.html.ruby +75 -0
- data/app/views/jigsaw/pages/edit.html.ruby +104 -0
- data/app/views/jigsaw/pages/index.html.ruby +65 -0
- data/app/views/jigsaw/pages/new.html.ruby +34 -0
- data/app/views/jigsaw/pages/show.html.ruby +28 -0
- data/app/views/jigsaw/slot_templates/edit.html.ruby +42 -0
- data/app/views/jigsaw/slot_templates/index.html.ruby +73 -0
- data/app/views/jigsaw/slot_templates/new.html.ruby +21 -0
- data/app/views/jigsaw/slot_templates/show.html.ruby +38 -0
- data/app/views/jigsaw/slots/_shared/_menu.html.ruby +7 -0
- data/app/views/jigsaw/slots/edit.html.ruby +52 -0
- data/app/views/jigsaw/slots/index.html.ruby +17 -0
- data/app/views/layouts/jigsaw/application.html.ruby +31 -0
- data/config/importmap.rb +35 -0
- data/config/routes.rb +27 -0
- data/db/migrate/20260505185636_create_jigsaw_custom_pages.rb +12 -0
- data/db/migrate/20260505185637_create_jigsaw_data_functions.rb +15 -0
- data/db/migrate/20260505185638_create_jigsaw_render_functions.rb +15 -0
- data/db/migrate/20260505185639_create_jigsaw_page_modules.rb +15 -0
- data/db/migrate/20260505185640_create_jigsaw_layouts.rb +14 -0
- data/db/migrate/20260506000001_remove_slot_from_jigsaw_page_modules.rb +5 -0
- data/db/migrate/20260506000002_make_page_module_functions_optional.rb +6 -0
- data/db/migrate/20260506000003_inline_functions_on_page_modules.rb +55 -0
- data/db/migrate/20260507000001_move_layout_fk_to_layouts_table.rb +30 -0
- data/db/migrate/20260507000002_move_page_modules_to_layouts.rb +30 -0
- data/db/migrate/20260508000001_rename_custom_pages_to_pages.rb +18 -0
- data/db/migrate/20260508000002_rename_page_modules_to_slots.rb +7 -0
- data/db/migrate/20260509000001_create_jigsaw_templates.rb +13 -0
- data/db/migrate/20260509000002_create_jigsaw_template_layouts.rb +12 -0
- data/db/migrate/20260509000003_create_jigsaw_template_slots.rb +22 -0
- data/db/migrate/20260509000004_add_template_linking_to_layouts.rb +6 -0
- data/db/migrate/20260509000005_add_linked_to_template_to_slots.rb +5 -0
- data/db/migrate/20260510000001_refactor_templates_to_layout_and_slot_templates.rb +104 -0
- data/db/seeds/01_pages.rb +69 -0
- data/db/seeds/02_main_menu_slot.rb +15 -0
- data/db/seeds/03_webcontainer_ide.rb +51 -0
- data/db/seeds.rb +120 -0
- data/lib/jigsaw/engine.rb +29 -0
- data/lib/jigsaw/grid_layout_generator.rb +55 -0
- data/lib/jigsaw/jsx_compiler.rb +21 -0
- data/lib/jigsaw/version.rb +3 -0
- data/lib/jigsaw/version.rb.erb +3 -0
- data/lib/jigsaw.rb +11 -0
- data/lib/jigsaw_engine.rb +4 -0
- data/lib/tasks/kube_tasks.rake +4 -0
- data/lib/tasks/shadcn.rake +171 -0
- metadata +1033 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
class RefactorTemplatesToLayoutAndSlotTemplates < ActiveRecord::Migration[8.0]
|
|
2
|
+
def change
|
|
3
|
+
# --- Merge template_layouts into templates (becoming layout_templates) ---
|
|
4
|
+
|
|
5
|
+
# Add grid config columns directly to jigsaw_templates
|
|
6
|
+
add_column :jigsaw_templates, :config, :jsonb, null: false, default: {}
|
|
7
|
+
add_column :jigsaw_templates, :compiled_css, :text
|
|
8
|
+
add_column :jigsaw_templates, :compiled_digest, :string
|
|
9
|
+
|
|
10
|
+
# Copy data from template_layouts into templates
|
|
11
|
+
reversible do |dir|
|
|
12
|
+
dir.up do
|
|
13
|
+
execute <<~SQL
|
|
14
|
+
UPDATE jigsaw_templates
|
|
15
|
+
SET config = tl.config,
|
|
16
|
+
compiled_css = tl.compiled_css,
|
|
17
|
+
compiled_digest = tl.compiled_digest
|
|
18
|
+
FROM jigsaw_template_layouts tl
|
|
19
|
+
WHERE tl.template_id = jigsaw_templates.id
|
|
20
|
+
SQL
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Drop template_slots first (depends on template_layouts)
|
|
25
|
+
drop_table :jigsaw_template_slots do |t|
|
|
26
|
+
t.references :template_layout, null: false, foreign_key: { to_table: :jigsaw_template_layouts }
|
|
27
|
+
t.string :area_name, null: false
|
|
28
|
+
t.integer :position, null: false, default: 0
|
|
29
|
+
t.jsonb :config, default: {}
|
|
30
|
+
t.jsonb :shares, default: []
|
|
31
|
+
t.text :data_source
|
|
32
|
+
t.text :data_compiled_source
|
|
33
|
+
t.string :data_compiled_digest
|
|
34
|
+
t.text :render_source
|
|
35
|
+
t.text :render_compiled_source
|
|
36
|
+
t.string :render_compiled_digest
|
|
37
|
+
t.string :render_language, null: false, default: "javascript"
|
|
38
|
+
t.timestamps
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Drop template_layouts (merged into templates)
|
|
42
|
+
drop_table :jigsaw_template_layouts do |t|
|
|
43
|
+
t.references :template, null: false, foreign_key: { to_table: :jigsaw_templates }
|
|
44
|
+
t.jsonb :config, null: false, default: {}
|
|
45
|
+
t.text :compiled_css
|
|
46
|
+
t.string :compiled_digest
|
|
47
|
+
t.timestamps
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Rename jigsaw_templates -> jigsaw_layout_templates
|
|
51
|
+
rename_table :jigsaw_templates, :jigsaw_layout_templates
|
|
52
|
+
|
|
53
|
+
# --- Rename FK on layouts ---
|
|
54
|
+
# Remove old FK and index, rename column, re-add
|
|
55
|
+
remove_foreign_key :jigsaw_layouts, column: :template_id
|
|
56
|
+
remove_index :jigsaw_layouts, :template_id if index_exists?(:jigsaw_layouts, :template_id)
|
|
57
|
+
rename_column :jigsaw_layouts, :template_id, :layout_template_id
|
|
58
|
+
add_foreign_key :jigsaw_layouts, :jigsaw_layout_templates, column: :layout_template_id
|
|
59
|
+
add_index :jigsaw_layouts, :layout_template_id
|
|
60
|
+
|
|
61
|
+
# --- Create slot_templates ---
|
|
62
|
+
create_table :jigsaw_slot_templates do |t|
|
|
63
|
+
t.string :name, null: false
|
|
64
|
+
t.text :description
|
|
65
|
+
t.string :thumbnail
|
|
66
|
+
t.jsonb :config, default: {}
|
|
67
|
+
t.jsonb :shares, default: []
|
|
68
|
+
t.text :data_source
|
|
69
|
+
t.text :data_compiled_source
|
|
70
|
+
t.string :data_compiled_digest
|
|
71
|
+
t.text :render_source
|
|
72
|
+
t.text :render_compiled_source
|
|
73
|
+
t.string :render_compiled_digest
|
|
74
|
+
t.string :render_language, null: false, default: "javascript"
|
|
75
|
+
|
|
76
|
+
t.timestamps
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
add_index :jigsaw_slot_templates, :name, unique: true
|
|
80
|
+
|
|
81
|
+
# --- Add slot_template_id FK to slots ---
|
|
82
|
+
add_reference :jigsaw_slots, :slot_template, foreign_key: { to_table: :jigsaw_slot_templates }, null: true
|
|
83
|
+
|
|
84
|
+
# --- acts-as-taggable-on tables ---
|
|
85
|
+
create_table :tags do |t|
|
|
86
|
+
t.string :name
|
|
87
|
+
t.timestamps
|
|
88
|
+
end
|
|
89
|
+
add_index :tags, :name, unique: true
|
|
90
|
+
|
|
91
|
+
create_table :taggings do |t|
|
|
92
|
+
t.references :tag, foreign_key: true
|
|
93
|
+
t.references :taggable, polymorphic: true
|
|
94
|
+
t.references :tagger, polymorphic: true
|
|
95
|
+
t.string :context, limit: 128
|
|
96
|
+
|
|
97
|
+
t.timestamps
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
add_index :taggings, [:taggable_type, :taggable_id, :context], name: "taggings_taggable_context_idx"
|
|
101
|
+
add_index :taggings, [:tag_id, :taggable_id, :taggable_type, :context, :tagger_id, :tagger_type],
|
|
102
|
+
unique: true, name: "taggings_idx"
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
module Jigsaw
|
|
2
|
+
HOLY_GRAIL_CONFIG = {
|
|
3
|
+
"type" => "grid",
|
|
4
|
+
"areas" => [
|
|
5
|
+
["header", "header", "header"],
|
|
6
|
+
["left", "main", "right"],
|
|
7
|
+
["footer", "footer", "footer"]
|
|
8
|
+
],
|
|
9
|
+
"columns" => ["120px", "4fr", "1fr"],
|
|
10
|
+
"rows" => ["80px", "1fr", "60px"],
|
|
11
|
+
"gridWidth" => "100%",
|
|
12
|
+
"gridHeight" => "100%",
|
|
13
|
+
"rowGap" => 8,
|
|
14
|
+
"colGap" => 8,
|
|
15
|
+
"rowGapUnit" => "px",
|
|
16
|
+
"colGapUnit" => "px"
|
|
17
|
+
}.freeze
|
|
18
|
+
|
|
19
|
+
SIMPLE_CONFIG = {
|
|
20
|
+
"type" => "grid",
|
|
21
|
+
"areas" => [["main"]],
|
|
22
|
+
"columns" => ["1fr"],
|
|
23
|
+
"rows" => ["1fr"],
|
|
24
|
+
"gridWidth" => "100%",
|
|
25
|
+
"gridHeight" => "100%",
|
|
26
|
+
"rowGap" => 0,
|
|
27
|
+
"colGap" => 0,
|
|
28
|
+
"rowGapUnit" => "px",
|
|
29
|
+
"colGapUnit" => "px"
|
|
30
|
+
}.freeze
|
|
31
|
+
|
|
32
|
+
TWO_COL_CONFIG = {
|
|
33
|
+
"type" => "grid",
|
|
34
|
+
"areas" => [
|
|
35
|
+
["header", "header"],
|
|
36
|
+
["sidebar", "content"],
|
|
37
|
+
["footer", "footer"]
|
|
38
|
+
],
|
|
39
|
+
"columns" => ["240px", "1fr"],
|
|
40
|
+
"rows" => ["80px", "1fr", "60px"],
|
|
41
|
+
"gridWidth" => "100%",
|
|
42
|
+
"gridHeight" => "100%",
|
|
43
|
+
"rowGap" => 12,
|
|
44
|
+
"colGap" => 12,
|
|
45
|
+
"rowGapUnit" => "px",
|
|
46
|
+
"colGapUnit" => "px"
|
|
47
|
+
}.freeze
|
|
48
|
+
|
|
49
|
+
PAGE_DATA = [
|
|
50
|
+
{ title: "Home", path: "home", config: HOLY_GRAIL_CONFIG },
|
|
51
|
+
{ title: "About", path: "about", config: TWO_COL_CONFIG },
|
|
52
|
+
{ title: "Blog", path: "blog", config: TWO_COL_CONFIG },
|
|
53
|
+
{ title: "Contact", path: "contact", config: SIMPLE_CONFIG }
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
PAGE_DATA.each do |attrs|
|
|
57
|
+
page = Page.find_or_initialize_by(path: attrs[:path])
|
|
58
|
+
page.title = attrs[:title]
|
|
59
|
+
page.save!
|
|
60
|
+
|
|
61
|
+
layout = page.layout || page.build_layout
|
|
62
|
+
layout.name = "#{page.title} Layout"
|
|
63
|
+
layout.config = attrs[:config]
|
|
64
|
+
layout.save!
|
|
65
|
+
layout.sync_slots
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
puts "[seeds] Pages: #{Page.count}, Layouts: #{Layout.count}, Slots: #{Slot.count}"
|
|
69
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Jigsaw
|
|
2
|
+
SEEDS = Engine.root.join("app/javascript/seeds")
|
|
3
|
+
|
|
4
|
+
home = Page.find_by!(path: "home")
|
|
5
|
+
slot = home.layout.slots.find_by!(area_name: "header")
|
|
6
|
+
|
|
7
|
+
slot.update!(
|
|
8
|
+
render_language: "jsx",
|
|
9
|
+
config: JSON.parse(SEEDS.join("main-menu/config.json").read),
|
|
10
|
+
data_source: SEEDS.join("main-menu/data.js").read,
|
|
11
|
+
render_source: SEEDS.join("main-menu/render.jsx").read,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
puts "[seeds] Main menu slot updated: ##{slot.id} (#{slot.area_name})"
|
|
15
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Jigsaw
|
|
2
|
+
SEEDS = Engine.root.join("app/javascript/seeds") unless defined?(SEEDS)
|
|
3
|
+
|
|
4
|
+
IDE_CONFIG = {
|
|
5
|
+
"type" => "grid",
|
|
6
|
+
"areas" => [
|
|
7
|
+
["filetree", "editor", "preview"],
|
|
8
|
+
["filetree", "terminal", "preview"]
|
|
9
|
+
],
|
|
10
|
+
"columns" => ["220px", "1fr", "1fr"],
|
|
11
|
+
"rows" => ["1fr", "250px"],
|
|
12
|
+
"gridWidth" => "100vw",
|
|
13
|
+
"gridHeight" => "100vh",
|
|
14
|
+
"rowGap" => 0, "colGap" => 0,
|
|
15
|
+
"rowGapUnit" => "px", "colGapUnit" => "px"
|
|
16
|
+
}.freeze
|
|
17
|
+
|
|
18
|
+
page = Page.find_or_initialize_by(path: "ide")
|
|
19
|
+
page.title = "WebContainer IDE"
|
|
20
|
+
page.save!
|
|
21
|
+
|
|
22
|
+
layout = page.layout || page.build_layout
|
|
23
|
+
layout.name = "IDE Layout"
|
|
24
|
+
layout.config = IDE_CONFIG
|
|
25
|
+
layout.save!
|
|
26
|
+
layout.sync_slots
|
|
27
|
+
|
|
28
|
+
SLOT_MAP = {
|
|
29
|
+
"filetree" => "ide-file-tree",
|
|
30
|
+
"editor" => "ide-editor",
|
|
31
|
+
"terminal" => "ide-terminal",
|
|
32
|
+
"preview" => "ide-preview",
|
|
33
|
+
}.freeze
|
|
34
|
+
|
|
35
|
+
SLOT_MAP.each do |area, seed_dir|
|
|
36
|
+
config_data = JSON.parse(SEEDS.join("#{seed_dir}/config.json").read)
|
|
37
|
+
shares = config_data.delete("shares") || []
|
|
38
|
+
|
|
39
|
+
layout.slots.find_by!(area_name: area).update!(
|
|
40
|
+
render_language: "jsx",
|
|
41
|
+
shares: shares,
|
|
42
|
+
config: config_data,
|
|
43
|
+
data_source: SEEDS.join("#{seed_dir}/data.js").read,
|
|
44
|
+
render_source: SEEDS.join("#{seed_dir}/render.jsx").read,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
puts "[seeds] #{area} slot updated"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
puts "[seeds] WebContainer IDE page created"
|
|
51
|
+
end
|
data/db/seeds.rb
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Jigsaw Engine Seeds
|
|
2
|
+
#
|
|
3
|
+
# Seeds the database with SlotTemplate records from the
|
|
4
|
+
# app/javascript/seeds/ directory structure.
|
|
5
|
+
#
|
|
6
|
+
# Each leaf directory containing config.json, data.js, and render.jsx
|
|
7
|
+
# becomes a SlotTemplate record. Tags are derived from the path segments.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# bin/rails db:seed
|
|
11
|
+
# # or load directly:
|
|
12
|
+
# load Jigsaw::Engine.root.join("db/seeds.rb")
|
|
13
|
+
|
|
14
|
+
module Jigsaw
|
|
15
|
+
class SeedLoader
|
|
16
|
+
SEEDS_PATH = Engine.root.join("app/javascript/seeds")
|
|
17
|
+
|
|
18
|
+
def call
|
|
19
|
+
puts "[jigsaw] Seeding slot templates from #{SEEDS_PATH}..."
|
|
20
|
+
|
|
21
|
+
count = 0
|
|
22
|
+
seed_dirs.each do |dir|
|
|
23
|
+
seed_slot_template(dir)
|
|
24
|
+
count += 1
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
puts "[jigsaw] Seeded #{count} slot templates."
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def seed_dirs
|
|
33
|
+
Dir.glob(SEEDS_PATH.join("**/config.json")).map { |f| File.dirname(f) }.sort
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def seed_slot_template(dir)
|
|
37
|
+
relative_path = Pathname.new(dir).relative_path_from(SEEDS_PATH).to_s
|
|
38
|
+
name = humanize_path(relative_path)
|
|
39
|
+
tags = derive_tags(relative_path)
|
|
40
|
+
|
|
41
|
+
config_json = File.read(File.join(dir, "config.json"))
|
|
42
|
+
data_js = File.read(File.join(dir, "data.js"))
|
|
43
|
+
render_file = Dir.glob(File.join(dir, "render.*")).first
|
|
44
|
+
render_source = render_file ? File.read(render_file) : ""
|
|
45
|
+
render_language = render_file&.end_with?(".jsx") ? "jsx" : "javascript"
|
|
46
|
+
|
|
47
|
+
config = begin
|
|
48
|
+
JSON.parse(config_json)
|
|
49
|
+
rescue JSON::ParserError
|
|
50
|
+
{}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Extract shares from config if present (it's a slot-level concept)
|
|
54
|
+
shares = config.delete("shares") || []
|
|
55
|
+
|
|
56
|
+
st = SlotTemplate.find_or_initialize_by(name: name)
|
|
57
|
+
st.assign_attributes(
|
|
58
|
+
data_source: data_js,
|
|
59
|
+
render_source: render_source,
|
|
60
|
+
render_language: render_language,
|
|
61
|
+
config: config,
|
|
62
|
+
shares: shares
|
|
63
|
+
)
|
|
64
|
+
st.tag_list = tags.join(", ")
|
|
65
|
+
st.save!
|
|
66
|
+
|
|
67
|
+
print "."
|
|
68
|
+
rescue => e
|
|
69
|
+
puts "\n[jigsaw] ERROR seeding #{dir}: #{e.message}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def humanize_path(relative_path)
|
|
73
|
+
# "blocks/marketing/hero-section-1" -> "Marketing / Hero Section 1"
|
|
74
|
+
# "ide-editor" -> "IDE Editor"
|
|
75
|
+
# "examples/blog-cards-2" -> "Examples / Blog Cards 2"
|
|
76
|
+
segments = relative_path.split("/")
|
|
77
|
+
segments.map { |s| humanize_segment(s) }.join(" / ")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def humanize_segment(segment)
|
|
81
|
+
segment
|
|
82
|
+
.gsub("-", " ")
|
|
83
|
+
.gsub(/\b(ui|ide|css|html|js|jsx)\b/i) { |m| m.upcase }
|
|
84
|
+
.split(" ")
|
|
85
|
+
.map(&:capitalize)
|
|
86
|
+
.join(" ")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def derive_tags(relative_path)
|
|
90
|
+
# "blocks/marketing/hero-section-1" -> ["blocks", "marketing", "hero-section"]
|
|
91
|
+
# "blocks/ecommerce/product-list-3" -> ["blocks", "ecommerce", "product-list"]
|
|
92
|
+
# "ide-editor" -> ["ide"]
|
|
93
|
+
# "examples/chat-bubbles-4" -> ["examples", "chat-bubbles"]
|
|
94
|
+
segments = relative_path.split("/")
|
|
95
|
+
tags = []
|
|
96
|
+
|
|
97
|
+
segments.each_with_index do |segment, i|
|
|
98
|
+
if i == segments.length - 1
|
|
99
|
+
# Last segment: strip trailing variant number
|
|
100
|
+
tag = strip_variant_number(segment)
|
|
101
|
+
else
|
|
102
|
+
tag = segment
|
|
103
|
+
end
|
|
104
|
+
tags << tag unless tag.blank?
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
tags.uniq
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def strip_variant_number(segment)
|
|
111
|
+
# "hero-section-1" -> "hero-section"
|
|
112
|
+
# "charts-20" -> "charts"
|
|
113
|
+
# "ide-editor" -> "ide-editor" (no trailing number after last hyphen? keep as-is)
|
|
114
|
+
# "authentication-forms-3" -> "authentication-forms"
|
|
115
|
+
segment.sub(/-\d+\z/, "")
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
Jigsaw::SeedLoader.new.call
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require "acts_as_list"
|
|
2
|
+
require "acts-as-taggable-on"
|
|
3
|
+
require "json_schemer"
|
|
4
|
+
require "jigsaw"
|
|
5
|
+
require "jigsaw/version"
|
|
6
|
+
require "jigsaw/jsx_compiler"
|
|
7
|
+
require "jigsaw/grid_layout_generator"
|
|
8
|
+
|
|
9
|
+
module Jigsaw
|
|
10
|
+
class Engine < ::Rails::Engine
|
|
11
|
+
isolate_namespace Jigsaw
|
|
12
|
+
|
|
13
|
+
initializer "jigsaw_engine.importmap", before: "importmap" do |app|
|
|
14
|
+
if app.config.respond_to?(:importmap)
|
|
15
|
+
app.config.importmap.paths << Engine.root.join("config/importmap.rb")
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
initializer "jigsaw_engine.assets" do |app|
|
|
20
|
+
if app.config.respond_to?(:assets) && app.config.assets.respond_to?(:paths)
|
|
21
|
+
ui_gem = Gem::Specification.find_by_name("rails-active-ui")
|
|
22
|
+
app.config.assets.paths << File.join(ui_gem.gem_dir, "app/assets")
|
|
23
|
+
app.config.assets.paths << root.join("app/assets/stylesheets")
|
|
24
|
+
app.config.assets.paths << root.join("app/javascript")
|
|
25
|
+
app.config.assets.paths << Rails.root.join("app/assets/stylesheets")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Jigsaw
|
|
2
|
+
class GridLayoutGenerator
|
|
3
|
+
def initialize(config, layout_id)
|
|
4
|
+
@config = config
|
|
5
|
+
@id = layout_id
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def call
|
|
9
|
+
rules = [container_rule]
|
|
10
|
+
rules << area_rules if has_areas?
|
|
11
|
+
rules.compact.join("\n\n")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def selector = ".jigsaw-layout-#{@id}"
|
|
17
|
+
|
|
18
|
+
def container_rule
|
|
19
|
+
props = {
|
|
20
|
+
"width" => @config["gridWidth"] || "100%",
|
|
21
|
+
"height" => @config["gridHeight"] || "100%",
|
|
22
|
+
"display" => "grid"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
props["grid-template-rows"] = @config["rows"]&.join(" ") || "1fr"
|
|
26
|
+
props["grid-template-columns"] = @config["columns"]&.join(" ") || "1fr"
|
|
27
|
+
|
|
28
|
+
if has_areas?
|
|
29
|
+
props["grid-template-areas"] = @config["areas"].map { |row| "\"#{row.join(' ')}\"" }.join("\n ")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
props["gap"] = gap_shorthand
|
|
33
|
+
|
|
34
|
+
body = props.map { |k, v| " #{k}: #{v};" }.join("\n")
|
|
35
|
+
"#{selector} {\n#{body}\n}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def gap_shorthand
|
|
39
|
+
row_gap = "#{@config['rowGap']}#{@config['rowGapUnit'] || 'px'}"
|
|
40
|
+
col_gap = "#{@config['colGap']}#{@config['colGapUnit'] || 'px'}"
|
|
41
|
+
row_gap == col_gap ? row_gap : "#{row_gap} #{col_gap}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def has_areas?
|
|
45
|
+
@config["areas"].present? && @config["areas"].flatten.any? { |s| s != "." }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def area_rules
|
|
49
|
+
names = @config["areas"].flatten.uniq.reject { |s| s == "." }
|
|
50
|
+
return nil if names.empty?
|
|
51
|
+
|
|
52
|
+
names.map { |name| "#{selector} > .#{name} { grid-area: #{name}; }" }.join("\n")
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require "mini_racer"
|
|
2
|
+
|
|
3
|
+
module Jigsaw
|
|
4
|
+
class JsxCompiler
|
|
5
|
+
def self.compile(source)
|
|
6
|
+
context = MiniRacer::Context.new
|
|
7
|
+
context.eval(babel_source)
|
|
8
|
+
context.eval(<<~JS)
|
|
9
|
+
Babel.transform(#{source.to_json}, {
|
|
10
|
+
presets: [['react', { runtime: 'automatic' }]]
|
|
11
|
+
}).code
|
|
12
|
+
JS
|
|
13
|
+
ensure
|
|
14
|
+
context&.dispose
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.babel_source
|
|
18
|
+
@babel_source ||= File.read(Engine.root.join("vendor/javascript/babel.min.js"))
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/lib/jigsaw.rb
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module Jigsaw
|
|
2
|
+
def self.dynamic_page_routes(mapper)
|
|
3
|
+
if ActiveRecord::Base.connection.data_source_exists?("jigsaw_pages")
|
|
4
|
+
Jigsaw::Page.where.not(path: [nil, ""]).find_each do |page|
|
|
5
|
+
mapper.get page.path, to: "jigsaw/pages#show", defaults: { path: page.path }, as: "page_#{page.id}_route"
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
rescue StandardError => e
|
|
9
|
+
Rails.logger.warn("[jigsaw] skipping dynamic page routes: #{e.class}: #{e.message}") if defined?(Rails.logger)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
namespace :jigsaw do
|
|
2
|
+
namespace :shadcn do
|
|
3
|
+
desc "Install shadcn components into the engine. Usage: rake jigsaw:shadcn:install[button,dropdown-menu,sheet]"
|
|
4
|
+
task :install, [:components] => :environment do |_t, args|
|
|
5
|
+
components = args[:components]&.split(",") || []
|
|
6
|
+
components += args.extras if args.extras.any?
|
|
7
|
+
|
|
8
|
+
if components.empty?
|
|
9
|
+
puts "Usage: rake jigsaw:shadcn:install[button,dropdown-menu,sheet]"
|
|
10
|
+
abort "Error: No components specified."
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
engine_root = Jigsaw::Engine.root
|
|
14
|
+
components_dir = engine_root.join("app/javascript/jigsaw/components/ui")
|
|
15
|
+
importmap_path = engine_root.join("config/importmap.rb")
|
|
16
|
+
|
|
17
|
+
# Create temp project for shadcn CLI
|
|
18
|
+
require "tmpdir"
|
|
19
|
+
Dir.mktmpdir("shadcn") do |tmpdir|
|
|
20
|
+
puts "Setting up temporary shadcn project..."
|
|
21
|
+
|
|
22
|
+
# Minimal package.json
|
|
23
|
+
File.write("#{tmpdir}/package.json", <<~JSON)
|
|
24
|
+
{
|
|
25
|
+
"name": "shadcn-tmp",
|
|
26
|
+
"private": true,
|
|
27
|
+
"type": "module",
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"react": "^19.0.0",
|
|
30
|
+
"react-dom": "^19.0.0"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
JSON
|
|
34
|
+
|
|
35
|
+
# Minimal tsconfig
|
|
36
|
+
File.write("#{tmpdir}/tsconfig.json", <<~JSON)
|
|
37
|
+
{
|
|
38
|
+
"compilerOptions": {
|
|
39
|
+
"target": "ESNext",
|
|
40
|
+
"module": "ESNext",
|
|
41
|
+
"moduleResolution": "bundler",
|
|
42
|
+
"jsx": "react-jsx",
|
|
43
|
+
"baseUrl": ".",
|
|
44
|
+
"paths": { "@/*": ["./src/*"] }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
JSON
|
|
48
|
+
|
|
49
|
+
# shadcn components.json
|
|
50
|
+
File.write("#{tmpdir}/components.json", <<~JSON)
|
|
51
|
+
{
|
|
52
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
53
|
+
"style": "new-york",
|
|
54
|
+
"rsc": false,
|
|
55
|
+
"tsx": true,
|
|
56
|
+
"tailwind": {
|
|
57
|
+
"config": "tailwind.config.js",
|
|
58
|
+
"css": "src/index.css",
|
|
59
|
+
"baseColor": "neutral",
|
|
60
|
+
"cssVariables": true
|
|
61
|
+
},
|
|
62
|
+
"aliases": {
|
|
63
|
+
"components": "@/components",
|
|
64
|
+
"utils": "@/lib/utils",
|
|
65
|
+
"ui": "@/components/ui",
|
|
66
|
+
"lib": "@/lib",
|
|
67
|
+
"hooks": "@/hooks"
|
|
68
|
+
},
|
|
69
|
+
"iconLibrary": "lucide"
|
|
70
|
+
}
|
|
71
|
+
JSON
|
|
72
|
+
|
|
73
|
+
# Minimal tailwind config (required by shadcn CLI)
|
|
74
|
+
File.write("#{tmpdir}/tailwind.config.js", "export default { content: ['./src/**/*.{ts,tsx}'] }\n")
|
|
75
|
+
|
|
76
|
+
# Required directories and utility file
|
|
77
|
+
FileUtils.mkdir_p("#{tmpdir}/src/lib")
|
|
78
|
+
FileUtils.mkdir_p("#{tmpdir}/src/components/ui")
|
|
79
|
+
FileUtils.mkdir_p("#{tmpdir}/src/hooks")
|
|
80
|
+
|
|
81
|
+
File.write("#{tmpdir}/src/lib/utils.ts", <<~TS)
|
|
82
|
+
import { clsx, type ClassValue } from "clsx"
|
|
83
|
+
|
|
84
|
+
export function cn(...inputs: ClassValue[]) {
|
|
85
|
+
return clsx(inputs)
|
|
86
|
+
}
|
|
87
|
+
TS
|
|
88
|
+
|
|
89
|
+
File.write("#{tmpdir}/src/index.css", "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n")
|
|
90
|
+
|
|
91
|
+
# Download components via shadcn CLI
|
|
92
|
+
puts "Downloading components: #{components.join(', ')}"
|
|
93
|
+
system("cd #{tmpdir} && npx shadcn@latest add #{components.join(' ')} --yes --overwrite", exception: true)
|
|
94
|
+
|
|
95
|
+
# Compile TSX → JS with esbuild
|
|
96
|
+
puts "\nCompiling TSX → JS..."
|
|
97
|
+
FileUtils.mkdir_p("#{tmpdir}/out")
|
|
98
|
+
|
|
99
|
+
Dir.glob("#{tmpdir}/src/components/ui/*.tsx").each do |file|
|
|
100
|
+
basename = File.basename(file, ".tsx")
|
|
101
|
+
outfile = "#{tmpdir}/out/#{basename}.js"
|
|
102
|
+
|
|
103
|
+
system(
|
|
104
|
+
"npx esbuild #{file}" \
|
|
105
|
+
" --bundle" \
|
|
106
|
+
" --format=esm" \
|
|
107
|
+
" --target=esnext" \
|
|
108
|
+
" --jsx=automatic" \
|
|
109
|
+
" --external:react" \
|
|
110
|
+
" --external:react-dom" \
|
|
111
|
+
" --external:react/jsx-runtime" \
|
|
112
|
+
" '--external:@radix-ui/*'" \
|
|
113
|
+
" --external:clsx" \
|
|
114
|
+
" --external:class-variance-authority" \
|
|
115
|
+
" --external:lucide-react" \
|
|
116
|
+
" --outfile=#{outfile}",
|
|
117
|
+
exception: true
|
|
118
|
+
)
|
|
119
|
+
puts " Compiled: #{basename}.js"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Compile utils
|
|
123
|
+
utils_file = "#{tmpdir}/src/lib/utils.ts"
|
|
124
|
+
if File.exist?(utils_file)
|
|
125
|
+
system(
|
|
126
|
+
"npx esbuild #{utils_file}" \
|
|
127
|
+
" --bundle" \
|
|
128
|
+
" --format=esm" \
|
|
129
|
+
" --target=esnext" \
|
|
130
|
+
" --external:clsx" \
|
|
131
|
+
" --external:tailwind-merge" \
|
|
132
|
+
" --outfile=#{tmpdir}/out/utils.js",
|
|
133
|
+
exception: true
|
|
134
|
+
)
|
|
135
|
+
puts " Compiled: utils.js"
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Install compiled files
|
|
139
|
+
puts "\nInstalling to #{components_dir}..."
|
|
140
|
+
FileUtils.mkdir_p(components_dir)
|
|
141
|
+
|
|
142
|
+
importmap_content = File.read(importmap_path)
|
|
143
|
+
|
|
144
|
+
Dir.glob("#{tmpdir}/out/*.js").each do |file|
|
|
145
|
+
basename = File.basename(file)
|
|
146
|
+
pin_name = File.basename(file, ".js")
|
|
147
|
+
|
|
148
|
+
FileUtils.cp(file, components_dir.join(basename))
|
|
149
|
+
puts " Installed: #{basename}"
|
|
150
|
+
|
|
151
|
+
# Add importmap pin if not present
|
|
152
|
+
pin_path = if pin_name == "utils"
|
|
153
|
+
"@/lib/utils"
|
|
154
|
+
else
|
|
155
|
+
"@/components/ui/#{pin_name}"
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
if importmap_content.exclude?(pin_path)
|
|
159
|
+
pin_line = "pin \"#{pin_path}\", to: \"jigsaw/components/ui/#{basename}\"\n"
|
|
160
|
+
File.open(importmap_path, "a") { |f| f.write(pin_line) }
|
|
161
|
+
puts " Added importmap pin: #{pin_path}"
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
puts "\nDone! Next steps:"
|
|
167
|
+
puts " 1. Edit files in #{components_dir}/ to replace Tailwind classes with Fomantic-UI classes"
|
|
168
|
+
puts " 2. Add any missing Radix importmap pins to config/importmap.rb"
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|