@agridea/suibi-module 0.1.0-preview.09bcbd4

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.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -0
  3. package/dist/elements/browser/main.js +78 -0
  4. package/dist/elements/browser/polyfills.js +1 -0
  5. package/dist/elements/browser/styles.css +1 -0
  6. package/dist/elements/browser/suibi-module-latest.css +1 -0
  7. package/dist/elements/browser/suibi-module-latest.js +78 -0
  8. package/dist/elements/browser/suibi-module.v0.1.0-preview.09bcbd4.css +1 -0
  9. package/dist/elements/browser/suibi-module.v0.1.0-preview.09bcbd4.js +78 -0
  10. package/dist/elements/browser/suibi-theme-dark.css +1 -0
  11. package/dist/elements/browser/version.txt +1 -0
  12. package/dist/elements/browser/wc-global-utilities.css +1 -0
  13. package/dist/types/app/app.config.d.ts +2 -0
  14. package/dist/types/app/app.d.ts +34 -0
  15. package/dist/types/app/components/add-dashed-button/add-dashed-button.component.d.ts +9 -0
  16. package/dist/types/app/components/data-preview/data-preview.component.d.ts +12 -0
  17. package/dist/types/app/components/empty-state/empty-state.component.d.ts +12 -0
  18. package/dist/types/app/components/module-placeholder-page/module-placeholder-page.component.d.ts +6 -0
  19. package/dist/types/app/components/planning-result/planning-result.component.d.ts +46 -0
  20. package/dist/types/app/components/planning-result/planning-trigger.component.d.ts +13 -0
  21. package/dist/types/app/components/results-page/results-page.component.d.ts +13 -0
  22. package/dist/types/app/components/suissebilanz-dashboard/gauge-arc.component.d.ts +47 -0
  23. package/dist/types/app/components/suissebilanz-dashboard/suissebilanz-dashboard.component.d.ts +24 -0
  24. package/dist/types/app/components/suissebilanz-dashboard/suissebilanz-metrics.service.d.ts +21 -0
  25. package/dist/types/app/components/suissebilanz-dashboard/suissebilanz-minibar.component.d.ts +19 -0
  26. package/dist/types/app/components/validation-page/validation-page.component.d.ts +18 -0
  27. package/dist/types/app/components/welcome-page/metadata.types.d.ts +1 -0
  28. package/dist/types/app/components/welcome-page/welcome-page.component.d.ts +28 -0
  29. package/dist/types/app/components/workflow-stepper/workflow-stepper.component.d.ts +49 -0
  30. package/dist/types/app/core/data/naebi-data.service.d.ts +278 -0
  31. package/dist/types/app/core/error/global-error-handler.d.ts +6 -0
  32. package/dist/types/app/core/events/suibi-data-emitter.service.d.ts +13 -0
  33. package/dist/types/app/core/events/suibi-data-event.d.ts +26 -0
  34. package/dist/types/app/core/i18n/i18n.service.d.ts +20 -0
  35. package/dist/types/app/core/i18n/locales/de.d.ts +2 -0
  36. package/dist/types/app/core/i18n/locales/en.d.ts +2 -0
  37. package/dist/types/app/core/master-data/master-data.service.d.ts +32 -0
  38. package/dist/types/app/core/metadata/suibi-metadata.service.d.ts +6 -0
  39. package/dist/types/app/core/metadata/suibi-metadata.types.d.ts +8 -0
  40. package/dist/types/app/core/navigation/navigation.service.d.ts +100 -0
  41. package/dist/types/app/core/planning/planning-balance.service.d.ts +37 -0
  42. package/dist/types/app/core/planning/planning-balance.types.d.ts +206 -0
  43. package/dist/types/app/core/planning/planning-balance.utils.d.ts +10 -0
  44. package/dist/types/app/core/schemas/index.d.ts +18 -0
  45. package/dist/types/app/core/schemas/schema-localization.util.d.ts +18 -0
  46. package/dist/types/app/core/schemas/schema-merge.util.d.ts +26 -0
  47. package/dist/types/app/core/schemas/ui-helper-registry.d.ts +16 -0
  48. package/dist/types/app/core/telemetry/telemetry.service.d.ts +12 -0
  49. package/dist/types/app/core/utils/object.util.d.ts +24 -0
  50. package/dist/types/app/core/validation/ajv-custom.d.ts +15 -0
  51. package/dist/types/app/core/validation/capabilities.d.ts +18 -0
  52. package/dist/types/app/core/validation/error-formatter.d.ts +19 -0
  53. package/dist/types/app/core/validation/global-validation.service.d.ts +59 -0
  54. package/dist/types/app/core/validation/validation-errors-panel.d.ts +36 -0
  55. package/dist/types/app/header-bar.d.ts +14 -0
  56. package/dist/types/app/jsonforms/constraints/constraint-resolvers.d.ts +50 -0
  57. package/dist/types/app/jsonforms/filters/code-list-filter-resolvers.d.ts +63 -0
  58. package/dist/types/app/jsonforms/registry/renderers.registry.d.ts +34 -0
  59. package/dist/types/app/jsonforms/renderers/controls/selects/animal-category/animal-category-select.renderer.d.ts +21 -0
  60. package/dist/types/app/jsonforms/renderers/controls/selects/code-list/code-list-select.renderer.d.ts +34 -0
  61. package/dist/types/app/jsonforms/renderers/layout/array/array-layout.renderer.d.ts +43 -0
  62. package/dist/types/app/jsonforms/renderers/layout/categorization/selected-category-categorization.renderer.d.ts +34 -0
  63. package/dist/types/app/jsonforms/renderers/layout/constraint/constraint-layout.renderer.d.ts +30 -0
  64. package/dist/types/app/jsonforms/renderers/layout/group/base-group.renderer.d.ts +29 -0
  65. package/dist/types/app/jsonforms/renderers/layout/group/card-group.renderer.d.ts +6 -0
  66. package/dist/types/app/jsonforms/renderers/layout/group/group-testers.d.ts +4 -0
  67. package/dist/types/app/jsonforms/renderers/layout/group/logical-group.renderer.d.ts +6 -0
  68. package/dist/types/app/jsonforms/renderers/layout/group/plain-group.renderer.d.ts +6 -0
  69. package/dist/types/app/jsonforms/shared/base-control/base-select-control.d.ts +16 -0
  70. package/dist/types/app/jsonforms/shared/option-sources/code-lists.d.ts +11 -0
  71. package/dist/types/app/jsonforms/shared/validation/field-error.service.d.ts +18 -0
  72. package/dist/types/app/nutrient-cycle/animal-stock/animal-stock-detail.component.d.ts +22 -0
  73. package/dist/types/app/nutrient-cycle/animal-stock/animal-stock-list.component.d.ts +21 -0
  74. package/dist/types/app/nutrient-cycle/animal-stock/animal-stock-master-detail.component.d.ts +24 -0
  75. package/dist/types/app/nutrient-cycle/animal-stock/animal-stock.types.d.ts +69 -0
  76. package/dist/types/app/nutrient-cycle/animal-stock/index.d.ts +4 -0
  77. package/dist/types/app/nutrient-cycle/farm-manure-trading/farm-manure-trading-detail.component.d.ts +27 -0
  78. package/dist/types/app/nutrient-cycle/farm-manure-trading/farm-manure-trading-list.component.d.ts +23 -0
  79. package/dist/types/app/nutrient-cycle/farm-manure-trading/farm-manure-trading-master-detail.component.d.ts +25 -0
  80. package/dist/types/app/nutrient-cycle/farm-manure-trading/farm-manure-trading.types.d.ts +27 -0
  81. package/dist/types/app/nutrient-cycle/farm-manure-trading/index.d.ts +4 -0
  82. package/dist/types/app/nutrient-cycle/farm-manure-trading/transaction-unit.util.d.ts +1 -0
  83. package/dist/types/app/nutrient-cycle/field-cultivation/field-cultivation-detail.component.d.ts +22 -0
  84. package/dist/types/app/nutrient-cycle/field-cultivation/field-cultivation-general.component.d.ts +22 -0
  85. package/dist/types/app/nutrient-cycle/field-cultivation/field-cultivation-list.component.d.ts +17 -0
  86. package/dist/types/app/nutrient-cycle/field-cultivation/field-cultivation-master-detail.component.d.ts +36 -0
  87. package/dist/types/app/nutrient-cycle/field-cultivation/field-cultivation.types.d.ts +40 -0
  88. package/dist/types/app/nutrient-cycle/field-cultivation/field-cultivation.util.d.ts +6 -0
  89. package/dist/types/app/nutrient-cycle/field-spreading/field-spreading.component.d.ts +21 -0
  90. package/dist/types/app/nutrient-cycle/field-spreading/field-spreading.types.d.ts +43 -0
  91. package/dist/types/app/nutrient-cycle/field-spreading/index.d.ts +2 -0
  92. package/dist/types/app/nutrient-cycle/fodder/fodder-detail.component.d.ts +32 -0
  93. package/dist/types/app/nutrient-cycle/fodder/fodder-list.component.d.ts +21 -0
  94. package/dist/types/app/nutrient-cycle/fodder/fodder-master-detail.component.d.ts +37 -0
  95. package/dist/types/app/nutrient-cycle/fodder/fodder.types.d.ts +27 -0
  96. package/dist/types/app/nutrient-cycle/fodder/transaction-unit.util.d.ts +2 -0
  97. package/dist/types/app/nutrient-cycle/lifetime-performance/lifetime-performance-form.component.d.ts +27 -0
  98. package/dist/types/app/nutrient-cycle/lifetime-performance/lifetime-performance.types.d.ts +5 -0
  99. package/dist/types/app/nutrient-cycle/storage/storage-detail.component.d.ts +30 -0
  100. package/dist/types/app/nutrient-cycle/storage/storage-general.component.d.ts +29 -0
  101. package/dist/types/app/nutrient-cycle/storage/storage-list.component.d.ts +20 -0
  102. package/dist/types/app/nutrient-cycle/storage/storage-master-detail.component.d.ts +31 -0
  103. package/dist/types/app/nutrient-cycle/storage/storage.types.d.ts +40 -0
  104. package/dist/types/environments/environment.d.ts +11 -0
  105. package/dist/types/public-api.d.ts +6 -0
  106. package/dist/types/shared/material-icons.d.ts +16 -0
  107. package/package.json +91 -0
@@ -0,0 +1,21 @@
1
+ import { JsonFormsAngularService } from '@jsonforms/angular';
2
+ import { RankedTester } from '@jsonforms/core';
3
+ import { BaseSelectControl } from '../../../../shared/base-control/base-select-control';
4
+ interface AnimalCategoryPrifEntry {
5
+ id: number;
6
+ animalGroup?: string;
7
+ descriptor?: {
8
+ designation_ita?: string;
9
+ [k: string]: unknown;
10
+ };
11
+ }
12
+ export declare class AnimalCategorySelectRenderer extends BaseSelectControl<number> {
13
+ options: AnimalCategoryPrifEntry[];
14
+ private readonly masterData;
15
+ constructor(jsonFormsService: JsonFormsAngularService);
16
+ getEventValue: (event: any) => any;
17
+ optLabel(opt: AnimalCategoryPrifEntry): string;
18
+ onSelectionChange(value: number): void;
19
+ }
20
+ export declare const animalCategorySelectTester: RankedTester;
21
+ export {};
@@ -0,0 +1,34 @@
1
+ import { Signal } from '@angular/core';
2
+ import { JsonFormsAngularService } from '@jsonforms/angular';
3
+ import { ControlElement, RankedTester } from '@jsonforms/core';
4
+ import { BaseSelectControl } from '../../../../shared/base-control/base-select-control';
5
+ import { BaseCodeListEntry } from '../../../../shared/option-sources/code-lists';
6
+ export declare function replaceDataPathLeaf(path: string | null | undefined, replacement: string): string | null;
7
+ export declare function deriveSiblingDependencyPath(uischema: ControlElement | null | undefined, path: string | null | undefined, replacement: string): string | null;
8
+ export declare class CodeListSelectRenderer extends BaseSelectControl<number | string> {
9
+ private readonly masterData;
10
+ private readonly i18n;
11
+ private readonly naebiData;
12
+ private readonly formData;
13
+ private readonly controlScope;
14
+ private explicitCodeListKey;
15
+ private controlKey;
16
+ private listKey;
17
+ readonly options: Signal<BaseCodeListEntry[]>;
18
+ readonly isMultiSelect: Signal<boolean>;
19
+ private readonly filterConfig;
20
+ private readonly emptyHintKey;
21
+ private readonly dependsOnDataPath;
22
+ private readonly autoDependsOnDataPath;
23
+ private scopePointerToDataPath;
24
+ private inferListKeyFromScope;
25
+ private readValueAtPath;
26
+ readonly filteredOptions: Signal<BaseCodeListEntry[]>;
27
+ constructor(jsonFormsService: JsonFormsAngularService);
28
+ getEventValue: (event: any) => any;
29
+ optionLabel(opt: BaseCodeListEntry): string;
30
+ emptyHint(): string;
31
+ shouldShowEmptyHint(): boolean;
32
+ onSelectionChange(value: number | string | Array<number | string>): void;
33
+ }
34
+ export declare const codeListSelectTester: RankedTester;
@@ -0,0 +1,43 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { JsonFormsAbstractControl, JsonFormsAngularService } from '@jsonforms/angular';
3
+ import { ArrayLayoutProps, ArrayTranslations, JsonFormsState, OwnPropsOfRenderer, RankedTester, StatePropsOfArrayLayout, UISchemaElement, UISchemaTester } from '@jsonforms/core';
4
+ /**
5
+ * CustomArrayLayoutRenderer
6
+ * Overrides the stock JSONForms `ArrayLayoutRenderer` (rank 4 → this is rank 5) to apply
7
+ * the project UX pattern: centered empty-state placeholder when the array has no entries,
8
+ * and the full-width dashed add-button always anchored below the list.
9
+ *
10
+ * The add button label is driven by `translations.addTooltip` resolved via the JSONForms
11
+ * i18n pipeline — configure per-array labels there.
12
+ */
13
+ export declare class CustomArrayLayoutRenderer extends JsonFormsAbstractControl<StatePropsOfArrayLayout> implements OnInit {
14
+ noData: boolean;
15
+ /** Indices 0..n-1 used to render per-item cards and drive sort-button disabled state. */
16
+ indices: number[];
17
+ translations: ArrayTranslations;
18
+ showSortButtons: boolean;
19
+ addItem: (path: string, value: unknown) => () => void;
20
+ moveItemUp: (path: string, index: number) => () => void;
21
+ moveItemDown: (path: string, index: number) => () => void;
22
+ removeItems: (path: string, toDelete: number[]) => () => void;
23
+ uischemas: {
24
+ tester: UISchemaTester;
25
+ uischema: UISchemaElement;
26
+ }[];
27
+ constructor(jsonFormsService: JsonFormsAngularService);
28
+ get emptyText(): string;
29
+ get addLabel(): string;
30
+ mapToProps(state: JsonFormsState): StatePropsOfArrayLayout & {
31
+ translations: ArrayTranslations;
32
+ };
33
+ mapAdditionalProps(props: ArrayLayoutProps & {
34
+ translations: ArrayTranslations;
35
+ }): void;
36
+ remove(index: number): void;
37
+ add(): void;
38
+ up(index: number): void;
39
+ down(index: number): void;
40
+ ngOnInit(): void;
41
+ getProps(index: number): OwnPropsOfRenderer;
42
+ }
43
+ export declare const customArrayLayoutRendererTester: RankedTester;
@@ -0,0 +1,34 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { JsonFormsBaseRenderer } from '@jsonforms/angular';
3
+ import { Categorization, Category } from '@jsonforms/core';
4
+ /**
5
+ * Custom categorization renderer with programmatic tab selection via NavigationService.
6
+ *
7
+ * Extends JSONForms default categorization by reading category keys from UI schema options
8
+ * and syncing with NavigationService.selectedCategory signal for deep-linking (e.g., validation errors).
9
+ *
10
+ * UI Schema: Add "options": { "categoryKey": "<key>" } to each Category element.
11
+ * Navigation: Call navigationSvc.setCategory(page, key) or navigate methods to select tabs programmatically.
12
+ * Bidirectional: User tab clicks update NavigationService state automatically.
13
+ */
14
+ export declare class SelectedCategoryCategorizationRenderer extends JsonFormsBaseRenderer<Categorization> implements OnInit {
15
+ private readonly jsonFormsService;
16
+ private readonly navigationSvc;
17
+ hidden: boolean;
18
+ visibleCategories: (Category | Categorization)[];
19
+ categoryLabels: string[];
20
+ private readonly categoryKeyToIndex;
21
+ private readonly indexToCategoryKey;
22
+ private _prevCategorySignature;
23
+ readonly selectedTabIndex: import("@angular/core").Signal<number>;
24
+ ngOnInit(): void;
25
+ /**
26
+ * Build bidirectional category key ↔ tab index mapping from UI schema.
27
+ * Reads options.categoryKey from each visible Category element.
28
+ * Example: { base: 0, formOfDetention: 1, feeding: 2 }
29
+ * Skips signal writes when the tab structure hasn't changed (pure data changes
30
+ * fire $state on every keystroke; no need to mark selectedTabIndex stale each time).
31
+ */
32
+ private buildCategoryMappings;
33
+ onTabChange(newIndex: number): void;
34
+ }
@@ -0,0 +1,30 @@
1
+ import { JsonFormsBaseRenderer } from '@jsonforms/angular';
2
+ import { Layout } from '@jsonforms/core';
3
+ /**
4
+ * Layout renderer for a custom UI schema element:
5
+ * { type: 'Constraint', options: { constraint: { resolver, args } }, elements: [ ... ] }
6
+ *
7
+ * It conditionally instantiates its children based on a named constraint
8
+ * resolver (see constraint-resolvers.ts). No additional DOM wrapper is added;
9
+ * children participate directly in surrounding layout.
10
+ */
11
+ export declare class ConstraintLayoutRenderer extends JsonFormsBaseRenderer<Layout> {
12
+ private readonly service;
13
+ private childrenHost?;
14
+ private subscription;
15
+ private _elements;
16
+ private _schema;
17
+ private _path;
18
+ private _renderers;
19
+ private _cells;
20
+ private _constraintCfg;
21
+ private readonly masterData;
22
+ private readonly i18n;
23
+ private visible;
24
+ /** Test-only helper (not used in templates). */
25
+ isVisibleForTest(): boolean;
26
+ ngOnInit(): void;
27
+ ngOnDestroy(): void;
28
+ private renderChildren;
29
+ private pickRenderer;
30
+ }
@@ -0,0 +1,29 @@
1
+ import { ChangeDetectorRef, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';
2
+ import { GroupLayout, JsonFormsCellRendererRegistryEntry, JsonFormsRendererRegistryEntry } from '@jsonforms/core';
3
+ import { JsonFormsAngularService, JsonFormsBaseRenderer } from '@jsonforms/angular';
4
+ export declare class BaseGroupRenderer extends JsonFormsBaseRenderer<GroupLayout> implements OnInit, OnDestroy {
5
+ protected readonly service: JsonFormsAngularService;
6
+ protected readonly cdr: ChangeDetectorRef;
7
+ protected _hidden: import("@angular/core").WritableSignal<boolean>;
8
+ protected _label: import("@angular/core").WritableSignal<string | undefined>;
9
+ protected _elements: import("@angular/core").WritableSignal<import("@jsonforms/core").UISchemaElement[]>;
10
+ protected _schema: import("@angular/core").WritableSignal<any>;
11
+ protected _path: import("@angular/core").WritableSignal<string>;
12
+ protected _renderers: import("@angular/core").WritableSignal<JsonFormsRendererRegistryEntry[]>;
13
+ protected _cells: import("@angular/core").WritableSignal<JsonFormsCellRendererRegistryEntry[] | undefined>;
14
+ protected _id: string;
15
+ hidden(): boolean;
16
+ label(): string | undefined;
17
+ labelId(): string | null;
18
+ elements(): import("@jsonforms/core").UISchemaElement[];
19
+ get currentPath(): string;
20
+ get currentSchema(): any;
21
+ registryRenderers(): JsonFormsRendererRegistryEntry[];
22
+ registryCells(): JsonFormsCellRendererRegistryEntry[] | undefined;
23
+ private subscription;
24
+ ngOnInit(): void;
25
+ ngOnDestroy(): void;
26
+ protected resolveHost(): ViewContainerRef | undefined;
27
+ protected renderChildren(): void;
28
+ private pickRenderer;
29
+ }
@@ -0,0 +1,6 @@
1
+ import { ViewContainerRef } from '@angular/core';
2
+ import { BaseGroupRenderer } from './base-group.renderer';
3
+ export declare class CardGroupRenderer extends BaseGroupRenderer {
4
+ private childrenHost?;
5
+ protected resolveHost(): ViewContainerRef | undefined;
6
+ }
@@ -0,0 +1,4 @@
1
+ import { RankedTester } from '@jsonforms/core';
2
+ export declare const cardGroupTester: RankedTester;
3
+ export declare const plainGroupTester: RankedTester;
4
+ export declare const logicalGroupTester: RankedTester;
@@ -0,0 +1,6 @@
1
+ import { ViewContainerRef } from '@angular/core';
2
+ import { BaseGroupRenderer } from './base-group.renderer';
3
+ export declare class LogicalGroupRenderer extends BaseGroupRenderer {
4
+ private childrenHost?;
5
+ protected resolveHost(): ViewContainerRef | undefined;
6
+ }
@@ -0,0 +1,6 @@
1
+ import { ViewContainerRef } from '@angular/core';
2
+ import { BaseGroupRenderer } from './base-group.renderer';
3
+ export declare class PlainGroupRenderer extends BaseGroupRenderer {
4
+ private childrenHost?;
5
+ protected resolveHost(): ViewContainerRef | undefined;
6
+ }
@@ -0,0 +1,16 @@
1
+ import { JsonFormsAngularService, JsonFormsControl } from '@jsonforms/angular';
2
+ /**
3
+ * Lightweight abstraction for select-like JsonForms controls.
4
+ * Provides a uniform selection change handler and validation trigger.
5
+ * Concrete subclasses supply template + option source + label logic.
6
+ *
7
+ * Also injects custom validation errors from FieldErrorService into the FormControl
8
+ * so Angular Material mat-error displays them automatically.
9
+ */
10
+ export declare abstract class BaseSelectControl<TValue = number> extends JsonFormsControl {
11
+ constructor(jsonFormsService: JsonFormsAngularService);
12
+ /** Override if event value extraction differs */
13
+ getEventValue: (event: any) => any;
14
+ /** Invoke when the user picks a new value. */
15
+ protected commitValue(value: TValue): void;
16
+ }
@@ -0,0 +1,11 @@
1
+ export interface BaseCodeListEntry {
2
+ id: number | string;
3
+ [k: string]: unknown;
4
+ descriptor?: Record<string, unknown>;
5
+ }
6
+ export declare const CODE_LISTS: Record<string, BaseCodeListEntry[]>;
7
+ export declare const PATH_TO_LIST_KEY: Array<{
8
+ regex: RegExp;
9
+ key: keyof typeof CODE_LISTS;
10
+ }>;
11
+ export declare function resolveCodeListKey(tail: string): string | null;
@@ -0,0 +1,18 @@
1
+ import { ErrorObject } from 'ajv';
2
+ /**
3
+ * Service to share validation errors from JSONForms across custom renderers.
4
+ * Allows renderers to display field-specific errors from custom AJV keywords.
5
+ */
6
+ export declare class FieldErrorService {
7
+ private readonly errors;
8
+ /** Update the global error list from JSONForms validation */
9
+ setErrors(errors: ErrorObject[] | null): void;
10
+ /** Get error message for a specific field path */
11
+ getErrorForPath(scopeOrInstancePath: string): string | null;
12
+ /** Get all errors for a specific field path */
13
+ getErrorsForPath(scopeOrInstancePath: string): ErrorObject[];
14
+ /** Clear all errors */
15
+ clearErrors(): void;
16
+ private normalizeScope;
17
+ private normalizeInstancePath;
18
+ }
@@ -0,0 +1,22 @@
1
+ import { EventEmitter, Signal } from '@angular/core';
2
+ import { JsonSchema, UISchemaElement } from '@jsonforms/core';
3
+ import { AnimalStockRow } from './animal-stock.types';
4
+ import { ErrorObject } from 'ajv';
5
+ export declare class AnimalStockDetailComponent {
6
+ private readonly i18n;
7
+ row: Signal<AnimalStockRow | null>;
8
+ index: Signal<number | null>;
9
+ rowChange: EventEmitter<AnimalStockRow>;
10
+ close: EventEmitter<void>;
11
+ itemSchema: Signal<JsonSchema>;
12
+ private readonly baseUi;
13
+ localizedUi: Signal<UISchemaElement>;
14
+ jsonFormsData: Signal<(AnimalStockRow & import("../../core/schemas/ui-helper-registry").UiHelperDefinitions) | null>;
15
+ readonly renderers: {
16
+ tester: import("@jsonforms/core").RankedTester;
17
+ renderer: any;
18
+ }[];
19
+ readonly suibiAjv: import("ajv").Ajv;
20
+ onDataChange(newData: any): void;
21
+ onValidationErrors(_errors: ErrorObject[] | null | undefined): void;
22
+ }
@@ -0,0 +1,21 @@
1
+ import { EventEmitter, Signal } from '@angular/core';
2
+ import { MatTable } from '@angular/material/table';
3
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
4
+ import { AnimalStockRow } from './animal-stock.types';
5
+ export declare class AnimalStockListComponent {
6
+ private readonly masterData;
7
+ table: MatTable<AnimalStockRow>;
8
+ rows: Signal<AnimalStockRow[]>;
9
+ select: EventEmitter<number>;
10
+ add: EventEmitter<void>;
11
+ delete: EventEmitter<number>;
12
+ reorder: EventEmitter<{
13
+ previousIndex: number;
14
+ currentIndex: number;
15
+ }>;
16
+ displayedColumns: string[];
17
+ onDelete(index: number, event: Event): void;
18
+ drop(event: CdkDragDrop<AnimalStockRow[]>): void;
19
+ resolveAnimalCategory(id: unknown): string;
20
+ resolveUtilisation(id: unknown): string;
21
+ }
@@ -0,0 +1,24 @@
1
+ import { AnimalStockRow } from './animal-stock.types';
2
+ import { LifetimePerformance } from '../lifetime-performance/lifetime-performance.types';
3
+ export declare class AnimalStockMasterDetailComponent {
4
+ private readonly dataSvc;
5
+ private readonly navigationSvc;
6
+ constructor();
7
+ readonly rows: import("@angular/core").Signal<AnimalStockRow[]>;
8
+ readonly lifetimePerformance: import("@angular/core").Signal<LifetimePerformance | null>;
9
+ readonly selectedIndex: import("@angular/core").WritableSignal<number | null>;
10
+ readonly detailData: import("@angular/core").Signal<any>;
11
+ openDetail(index: number): void;
12
+ closeDetail(): void;
13
+ onRowClick(_row: AnimalStockRow, index: number): void;
14
+ addRow(): void;
15
+ deleteRow(index: number): void;
16
+ reorderRow(event: {
17
+ previousIndex: number;
18
+ currentIndex: number;
19
+ }): void;
20
+ onDetailChange(newData: any): void;
21
+ onLifetimePerformanceChange(payload: LifetimePerformance): void;
22
+ private patchRows;
23
+ private patchLifetimePerformance;
24
+ }
@@ -0,0 +1,69 @@
1
+ export interface FeedingRoutineItem {
2
+ typeOfFeedstuffProduct?: string;
3
+ transactionUnit?: string;
4
+ quantity?: number;
5
+ }
6
+ export interface SeasonalFeeding {
7
+ feedingRoutine?: FeedingRoutineItem[];
8
+ dailyConcentratedFeedstuff?: {
9
+ quantity?: number;
10
+ };
11
+ }
12
+ export interface Feeding {
13
+ fodderConsumption?: number;
14
+ concentratedFeedstuffConsumption?: number;
15
+ winterFeeding?: SeasonalFeeding;
16
+ summerFeeding?: SeasonalFeeding;
17
+ }
18
+ export interface Stall {
19
+ stableSystem?: number;
20
+ stableCapacity?: number;
21
+ stableVentilationType?: number | null;
22
+ stableAirPurification?: number | null;
23
+ hasStableDeepLitter?: boolean;
24
+ hasStableManureBeltDrying?: boolean;
25
+ stableManureRemovalFrequency?: number | null;
26
+ stableWaterSupply?: number | null;
27
+ hasStableManureAndSlurryProduction?: boolean;
28
+ hasStableFeedingStationElevated?: boolean;
29
+ hasStableFloorSlopedUrineDrainage?: boolean;
30
+ hasYard?: boolean;
31
+ yardFeeding?: number | null;
32
+ yardFloorType?: number | null;
33
+ yardDays?: number;
34
+ yardHoursPerDay?: number;
35
+ }
36
+ export interface Pasture {
37
+ days?: number;
38
+ hoursPerDay?: number;
39
+ }
40
+ export interface FormOfDetention {
41
+ hasGrazing?: boolean;
42
+ pasture?: Pasture;
43
+ stall?: Stall;
44
+ }
45
+ export interface LivestockReport {
46
+ durationSumTotalNutrientBalance?: number;
47
+ }
48
+ export interface SelfReportedLivestock {
49
+ averageQuantity?: number;
50
+ }
51
+ export interface LinearCorrection {
52
+ duration?: number;
53
+ }
54
+ export interface AnimalStockRow {
55
+ order?: number | string;
56
+ animalCategoryPRIF?: number;
57
+ livestockReportViaAnimalTracingOriginal?: LivestockReport;
58
+ livestockReportedViaAnimalTracingFinal?: LivestockReport;
59
+ selfReportedLivestock?: SelfReportedLivestock;
60
+ durationCorrectionQuantity?: number;
61
+ durationCorrectionDays?: number;
62
+ hasImpexDerivedExcretion?: boolean;
63
+ hasLinearCorrectionDerivedExcretion?: boolean;
64
+ linearCorrection?: LinearCorrection;
65
+ utilisation?: number;
66
+ formOfDetention?: FormOfDetention;
67
+ feeding?: Feeding;
68
+ [key: string]: unknown;
69
+ }
@@ -0,0 +1,4 @@
1
+ export * from './animal-stock-list.component';
2
+ export * from './animal-stock-detail.component';
3
+ export * from './animal-stock-master-detail.component';
4
+ export * from './animal-stock.types';
@@ -0,0 +1,27 @@
1
+ import { EventEmitter, Signal } from '@angular/core';
2
+ import { JsonSchema, UISchemaElement } from '@jsonforms/core';
3
+ import { FarmManureTradingSupply, FarmManureTradingDispense } from './farm-manure-trading.types';
4
+ type Mode = 'supply' | 'dispense';
5
+ type TradingRow = FarmManureTradingSupply | FarmManureTradingDispense;
6
+ export declare class FarmManureTradingDetailComponent {
7
+ private readonly i18n;
8
+ row: Signal<TradingRow | null>;
9
+ index: Signal<number | null>;
10
+ mode: import("@angular/core").InputSignal<Mode>;
11
+ rowChange: EventEmitter<TradingRow>;
12
+ close: EventEmitter<void>;
13
+ readonly renderers: {
14
+ tester: import("@jsonforms/core").RankedTester;
15
+ renderer: any;
16
+ }[];
17
+ readonly suibiAjv: import("ajv").Ajv;
18
+ private readonly baseSchemas;
19
+ private readonly baseUis;
20
+ itemSchema: Signal<JsonSchema>;
21
+ localizedUi: Signal<UISchemaElement>;
22
+ detailTitle: Signal<string>;
23
+ jsonFormsData: Signal<(FarmManureTradingSupply & import("../../core/schemas/ui-helper-registry").UiHelperDefinitions) | null>;
24
+ onDataChange(event: any): void;
25
+ private applyDerivedFields;
26
+ }
27
+ export {};
@@ -0,0 +1,23 @@
1
+ import { EventEmitter, Signal } from '@angular/core';
2
+ import { FarmManureTradingSupply, FarmManureTradingDispense } from './farm-manure-trading.types';
3
+ import { FarmManureTradingMode } from '../../core/navigation/navigation.service';
4
+ export type TradingMode = FarmManureTradingMode;
5
+ type TradingRow = FarmManureTradingSupply | FarmManureTradingDispense;
6
+ export declare class FarmManureTradingListComponent {
7
+ private readonly masterData;
8
+ private readonly i18n;
9
+ rows: Signal<TradingRow[]>;
10
+ selectedIndex: Signal<number | null>;
11
+ mode: TradingMode;
12
+ select: EventEmitter<number>;
13
+ add: EventEmitter<void>;
14
+ delete: EventEmitter<number>;
15
+ readonly displayedColumns: string[];
16
+ resolveProduct(code: string | null | undefined): string;
17
+ emptyLabel(): string;
18
+ emptyHintLabel(): string;
19
+ addLabel(): string;
20
+ headerLabel(): string;
21
+ onDelete(index: number, event: Event): void;
22
+ }
23
+ export {};
@@ -0,0 +1,25 @@
1
+ import { TradingMode } from './farm-manure-trading-list.component';
2
+ import { FarmManureTradingSupply, FarmManureTradingDispense } from './farm-manure-trading.types';
3
+ export declare class FarmManureTradingMasterDetailComponent {
4
+ private readonly dataSvc;
5
+ private readonly navigationSvc;
6
+ constructor();
7
+ readonly supplyRows: import("@angular/core").Signal<FarmManureTradingSupply[]>;
8
+ readonly dispenseRows: import("@angular/core").Signal<FarmManureTradingDispense[]>;
9
+ readonly activeTab: import("@angular/core").WritableSignal<import("../../core/navigation/navigation.service").FarmManureTradingMode>;
10
+ readonly selectedSupplyIndex: import("@angular/core").WritableSignal<number | null>;
11
+ readonly selectedDispenseIndex: import("@angular/core").WritableSignal<number | null>;
12
+ readonly currentDetail: import("@angular/core").Signal<FarmManureTradingSupply | null>;
13
+ readonly currentIndex: import("@angular/core").Signal<number | null>;
14
+ readonly detailOpen: import("@angular/core").Signal<boolean>;
15
+ readonly activeTabIndex: import("@angular/core").Signal<0 | 1>;
16
+ onTabChange(index: number): void;
17
+ openDetail(mode: TradingMode, index: number): void;
18
+ closeDetail(): void;
19
+ addEntry(mode: TradingMode): void;
20
+ deleteEntry(mode: TradingMode, index: number): void;
21
+ onDetailChange(payload: FarmManureTradingSupply | FarmManureTradingDispense): void;
22
+ private createEmptyEntry;
23
+ private patchRows;
24
+ private cloneTrading;
25
+ }
@@ -0,0 +1,27 @@
1
+ export interface ManureIngredient {
2
+ quantity?: number;
3
+ molecularFormula?: string;
4
+ unit?: string;
5
+ }
6
+ export interface ManureDerivation {
7
+ zoologicalAnimal?: string;
8
+ percentageAllocation?: number;
9
+ }
10
+ export interface FarmManureTradingSupply {
11
+ quantity?: number;
12
+ typeOfManureRecyclingProduct?: string;
13
+ transactionUnit?: string;
14
+ manureDerivation?: ManureDerivation[];
15
+ ingredient?: ManureIngredient[];
16
+ }
17
+ export interface FarmManureTradingDispense {
18
+ quantity?: number;
19
+ typeOfManureRecyclingProduct?: string;
20
+ transactionUnit?: string;
21
+ manureDerivation?: ManureDerivation[];
22
+ ingredient?: ManureIngredient[];
23
+ }
24
+ export interface FarmManureTradingData {
25
+ supply?: FarmManureTradingSupply[];
26
+ dispense?: FarmManureTradingDispense[];
27
+ }
@@ -0,0 +1,4 @@
1
+ export * from './farm-manure-trading-list.component';
2
+ export * from './farm-manure-trading-detail.component';
3
+ export * from './farm-manure-trading-master-detail.component';
4
+ export * from './farm-manure-trading.types';
@@ -0,0 +1 @@
1
+ export declare function deriveTransactionUnit(productCode: string | null | undefined): string | undefined;
@@ -0,0 +1,22 @@
1
+ import { JsonSchema, UISchemaElement } from '@jsonforms/core';
2
+ import { FieldCultivationDetailEntry, FieldCultivationDetailMode } from './field-cultivation.types';
3
+ export declare class FieldCultivationDetailComponent {
4
+ private readonly i18n;
5
+ readonly row: import("@angular/core").InputSignal<FieldCultivationDetailEntry | null>;
6
+ readonly index: import("@angular/core").InputSignal<number | null>;
7
+ readonly mode: import("@angular/core").InputSignal<FieldCultivationDetailMode>;
8
+ readonly rowChange: import("@angular/core").OutputEmitterRef<FieldCultivationDetailEntry>;
9
+ readonly close: import("@angular/core").OutputEmitterRef<void>;
10
+ readonly renderers: {
11
+ tester: import("@jsonforms/core").RankedTester;
12
+ renderer: any;
13
+ }[];
14
+ readonly suibiAjv: import("ajv").Ajv;
15
+ private readonly baseSchemas;
16
+ private readonly baseUis;
17
+ readonly itemSchema: import("@angular/core").Signal<JsonSchema>;
18
+ readonly localizedUi: import("@angular/core").Signal<UISchemaElement>;
19
+ readonly detailTitle: import("@angular/core").Signal<string>;
20
+ readonly jsonFormsData: import("@angular/core").Signal<(import("./field-cultivation.types").FieldCultivationFodderCropland & import("../../core/schemas/ui-helper-registry").UiHelperDefinitions) | (import("./field-cultivation.types").FieldCultivationSpecial & import("../../core/schemas/ui-helper-registry").UiHelperDefinitions) | null>;
21
+ onDataChange(event: unknown): void;
22
+ }
@@ -0,0 +1,22 @@
1
+ import { JsonSchema } from '@jsonforms/core';
2
+ import { FieldCultivationCropHarvest, FieldCultivationData } from './field-cultivation.types';
3
+ export declare class FieldCultivationGeneralComponent {
4
+ private readonly i18n;
5
+ readonly value: import("@angular/core").InputSignal<FieldCultivationData>;
6
+ readonly valueChange: import("@angular/core").OutputEmitterRef<FieldCultivationData>;
7
+ readonly renderers: {
8
+ tester: import("@jsonforms/core").RankedTester;
9
+ renderer: any;
10
+ }[];
11
+ readonly ajv: import("ajv").Ajv;
12
+ readonly schema: import("@angular/core").Signal<JsonSchema>;
13
+ readonly localizedUi: import("@angular/core").Signal<import("@jsonforms/core").UISchemaElement>;
14
+ readonly jsonFormsData: import("@angular/core").Signal<({
15
+ buildingZoneAreaSize: number | null | undefined;
16
+ outdoorVegetableMainCropAreaSize: number | null | undefined;
17
+ indoorVegetableMainCropAreaSize: number | null | undefined;
18
+ feedingOfCropHarvest: FieldCultivationCropHarvest[] | undefined;
19
+ dispenseOfCropHarvest: FieldCultivationCropHarvest[] | undefined;
20
+ } & import("../../core/schemas/ui-helper-registry").UiHelperDefinitions) | null>;
21
+ onDataChange(event: unknown): void;
22
+ }
@@ -0,0 +1,17 @@
1
+ import { FieldCultivationDetailEntry, FieldCultivationDetailMode } from './field-cultivation.types';
2
+ export declare class FieldCultivationListComponent {
3
+ private readonly masterData;
4
+ private readonly i18n;
5
+ readonly rows: import("@angular/core").InputSignal<FieldCultivationDetailEntry[]>;
6
+ readonly selectedIndex: import("@angular/core").InputSignal<number | null>;
7
+ readonly mode: import("@angular/core").InputSignal<FieldCultivationDetailMode>;
8
+ readonly select: import("@angular/core").OutputEmitterRef<number>;
9
+ readonly add: import("@angular/core").OutputEmitterRef<void>;
10
+ readonly delete: import("@angular/core").OutputEmitterRef<number>;
11
+ readonly displayedColumns: string[];
12
+ resolveCrop(code: string | null | undefined): string;
13
+ emptyLabel(): string;
14
+ emptyHintLabel(): string;
15
+ addLabel(): string;
16
+ onDelete(index: number, event: Event): void;
17
+ }
@@ -0,0 +1,36 @@
1
+ import { FieldCultivationTab } from '../../core/navigation/navigation.service';
2
+ import { FieldCultivationArableLand, FieldCultivationData, FieldCultivationDetailEntry, FieldCultivationDetailMode, FieldCultivationFodderCropland, FieldCultivationSpecial } from './field-cultivation.types';
3
+ export declare class FieldCultivationMasterDetailComponent {
4
+ private readonly dataSvc;
5
+ private readonly navigationSvc;
6
+ constructor();
7
+ readonly fieldCultivation: import("@angular/core").Signal<FieldCultivationData>;
8
+ readonly fodderCroplandRows: import("@angular/core").Signal<FieldCultivationFodderCropland[]>;
9
+ readonly arableLandRows: import("@angular/core").Signal<FieldCultivationArableLand[]>;
10
+ readonly specialRows: import("@angular/core").Signal<FieldCultivationSpecial[]>;
11
+ readonly activeTab: import("@angular/core").WritableSignal<FieldCultivationTab>;
12
+ readonly selectedFodderCroplandIndex: import("@angular/core").WritableSignal<number | null>;
13
+ readonly selectedArableLandIndex: import("@angular/core").WritableSignal<number | null>;
14
+ readonly selectedSpecialIndex: import("@angular/core").WritableSignal<number | null>;
15
+ readonly detailOpen: import("@angular/core").Signal<boolean>;
16
+ readonly currentIndex: import("@angular/core").Signal<number | null>;
17
+ readonly currentDetail: import("@angular/core").Signal<FieldCultivationDetailEntry | null>;
18
+ readonly selectedFodderCroplandListIndex: import("@angular/core").Signal<number | null>;
19
+ readonly selectedArableLandListIndex: import("@angular/core").Signal<number | null>;
20
+ readonly selectedSpecialListIndex: import("@angular/core").Signal<number | null>;
21
+ readonly activeTabIndex: import("@angular/core").Signal<0 | 1 | 3 | 2>;
22
+ onTabChange(index: number): void;
23
+ openDetail(mode: FieldCultivationDetailMode, index: number): void;
24
+ closeDetail(): void;
25
+ addEntry(mode: FieldCultivationDetailMode): void;
26
+ deleteEntry(mode: FieldCultivationDetailMode, index: number): void;
27
+ onGeneralChange(value: FieldCultivationData): void;
28
+ onDetailChange(value: FieldCultivationDetailEntry): void;
29
+ private patchRows;
30
+ private patchFieldCultivation;
31
+ private rowsForMode;
32
+ private selectedIndexSignal;
33
+ private clearSelections;
34
+ private clearInvalidSelection;
35
+ private parseTab;
36
+ }