+
+ Rules Registry
+
+
+ Named rule definitions across the engine — conditions, descriptions, the features each rule references, and
+ how many WhenRules blocks include it.
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ dispatch({ type: 'toggleUnusedOnly' });
+ }}
+ onKeyDown={(e) => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ dispatch({ type: 'toggleUnusedOnly' });
+ }
+ }}
+ >
+
+
+
+
+
+
+ }
+ placeholder="Search rules..."
+ value={search}
+ onChange={(e) => {
+ dispatch({ type: 'setSearch', value: e.target.value });
+ }}
+ allowClear
+ style={{ width: 280 }}
+ />
+
+ size="small"
+ value={sortKey}
+ onChange={(value) => {
+ dispatch({ type: 'setSortKey', value });
+ }}
+ style={{ width: 170 }}
+ options={[
+ { value: SortKey.MostReferenced, label: 'Most referenced' },
+ { value: SortKey.LeastReferenced, label: 'Least referenced' },
+ { value: SortKey.Name, label: 'Name (A-Z)' },
+ ]}
+ />
+
+ {
+ dispatch({ type: 'setUnusedOnly', value });
+ }}
+ />
+ Unused only
+
+
+
+
+ Rules ({filtered.length})
+
+ {filtered.length === 0 ? (
+
+ ) : (
+ <>
+
+
{
+ dispatch({ type: 'setPage', page, pageSize });
+ }}
+ showSizeChanger
+ pageSizeOptions={['25', '50', '100', '200']}
+ showTotal={(total, [start, end]) => {
+ return `${start}–${end} of ${total}`;
+ }}
+ size="small"
+ align="center"
+ style={{ marginTop: 20 }}
+ />
+ >
+ )}
+