` tag with the exact * FluentCart data-attributes, native hooks, and `%%CHILDREN%%` for its 12 sub-elements. * All render logic lives in `src/Rendering/Checkout/CheckoutWrapperRenderer.php` (this * fork's own rendering layer); this file is metadata + control declarations only. * * Feature flag: `fcbd_atomized_checkout` (default OFF, * `CheckoutAdapter::ATOMIZED_OPTION`). While off, this element renders only the native * `[fluent_cart_checkout]` shortcode -- see `CheckoutWrapperRenderer::render()`. * * `nestingRule()`: `container-excluding-self`, the exact native Breakdance rule already * verified and used by `bd-elements/FC_Product_Builder/element.php` (itself verified * against `subplugins/breakdance-elements/elements/ProductBuilder/element.php:172`) to * stop a container nesting inside its own descendants at the builder-UI level. This is * the FIRST of two independent defenses against "geen geneste checkout" * (V1.1-audit punt 5); `CheckoutStructureValidator::evaluateForPost()` is the second, * server-side one (see that class's own docblock for why a second layer is needed: this * native rule is builder-UI-level only, not enforced against a hand-edited/migrated * tree). * * `defaultChildren()` returns Breakdance ChildElement descriptors for exactly * `CheckoutStructureValidator::ALL_SLUGS` (single source of truth shared with the * validator, architectuurprincipe 14 "geen dubbele bron van waarheid"), reordered into * the same logical sequence FluentCart's own * `CheckoutRenderer::renderCheckoutForm()` uses (name/email, create account, billing, * ship-to-different, shipping address, shipping methods, agree terms, payment methods, * order summary, order notes) with Coupon placed directly after Order Summary (task * instruction 2, "defaultChildren() levert een complete geldige checkout"; Coupon has no * native default position since `fluent_cart_show_coupon` is always a separately-placed * shortcode, this placement is this fork's own choice, flagged in the final report). */ final class FCCheckout extends \Breakdance\Elements\Element { public static function uiIcon() { return ''; } public static function tag() { return 'div'; } public static function tagOptions() { return []; } public static function tagControlPath() { return false; } public static function name() { return 'FC Checkout'; } public static function className() { return 'fcbd-fc-checkout-element'; } public static function category() { return 'fluentcart'; } public static function badge() { return ['label' => 'FC', 'backgroundColor' => '#3157d5', 'textColor' => '#fff']; } public static function slug() { return __CLASS__; } public static function template() { return file_get_contents(__DIR__ . '/html.twig'); } public static function defaultCss() { return file_get_contents(__DIR__ . '/default.css'); } /** * FIXTAAK TAAK 2 (heading audit, v0.6.0+1): CheckoutWrapperRenderer.php's own render * (this element's own markup, not its 12 children) is wrapperStart()/renderNotices()/ * a real `