{{- /* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Commercial */ -}} {{- /* SPDX-FileCopyrightText: 2025-2026 Christian Galo */ -}} {{/* operator_entitlement_sets.html Entitlement sets list body partial for GET /operator/entitlement-sets (a catalog surface below the Products rail entry: trail plus the shared catalog pill row), dispatched by GetEntitlementSetsPage. Built from the page-anatomy parts: the header carries the always-on explanation as the lead (ux-first-run 3.4), rows navigate through the set's name (chrome-conventions "Row navigation is the primary column's link"), the is_active flag renders as the Active badge (entitlement-set-management "The set's flag is called Active"). */}} {{ template "pageHeader" .Header }} {{ template "catalogPills" "entitlement-sets" }} {{ if .Error }} {{ end }} {{/* design D20 (round 4) "record creation gets its own page": the list is the page's one section; its header's "New entitlement set" action is the page's one filled call to action, a link to /operator/entitlement-sets/new. */}} {{ template "sectionHeader" .ListHeader }} {{ if eq (len .EntitlementSets) 0 }} {{ template "emptyState" .Empty }} {{ else }}
{{/* list-scale exempt: curated configuration list, one row per entitlement set */}} {{ range .EntitlementSets }} {{/* The failed count rides beside the rule count, in the attention tone and only when non-zero, so a set nobody is looking at still declares its dead letter (design.md "The drain", monitoring). */}} {{ end }}
Name Description Rules Active Created
{{ .Name }} {{ .Description }}{{ .RuleCount }}{{ with .FailedLabel }} {{ . }}{{ end }} {{ template "statusBadge" .StateBadge }} {{ .CreatedAt }}
{{ end }}