{{- /* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Commercial */ -}} {{- /* SPDX-FileCopyrightText: 2025-2026 Christian Galo */ -}} {{/* operator_product_new.html The product create page, GET /operator/products/new, dispatched by GetProductNewPage. design D20 (round 4; maintainer 2026-09-03 "agree!"): record creation gets its own page, reached from the products list's one filled "New product" link, so the list stays a list and the form gets room for its labels and its help. The form itself is the product declaration rendered unbound (internal/server/operator_product_forms.go; spec form-library): this page writes no field, no label, no control and no box of its own, and the record page renders the same declaration bound to the product, so the two cannot drift and both are the same width. The form posts to the unchanged POST /partials/operator/products: on success the browser navigates to the new product with ?flash=created and its toast; a refusal re-renders this page at 422 with the field errors, the form-level slot, and the values that were typed. No blocker replaces the form when the deployment has no entitlement set yet: the select's first option creates one with the product (design D14). */}} {{ template "pageHeader" .Header }} {{ template "form" .Form }}