@atscript/ui 0.1.102 → 0.1.104

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.
package/dist/index.d.mts CHANGED
@@ -29,7 +29,7 @@ declare const UI_FORM_SUFFIX_ICON: "ui.form.suffix.icon";
29
29
  declare const UI_TABLE_WIDTH: "ui.table.width";
30
30
  declare const UI_TABLE_COMPONENT: "ui.table.component";
31
31
  declare const UI_TABLE_SELECT_WITH: "ui.table.selectWith";
32
- declare const UI_TABLE_HIDDEN: "ui.table.hidden";
32
+ declare const UI_TABLE_EXCLUDE: "ui.table.exclude";
33
33
  declare const UI_TABLE_ATTR: "ui.table.attr";
34
34
  declare const UI_TABLE_CLASSES: "ui.table.classes";
35
35
  declare const UI_TABLE_STYLES: "ui.table.styles";
@@ -442,6 +442,20 @@ declare function getByPath(obj: Record<string, unknown>, path: string): unknown;
442
442
  * Creates intermediate objects if they do not exist.
443
443
  */
444
444
  declare function setByPath(obj: Record<string, unknown>, path: string, value: unknown): void;
445
+ /**
446
+ * Deletes the own key at a dot-separated path (form-data wrapper aware — derefs
447
+ * `obj.value` first). Walks to the parent WITHOUT vivifying intermediate nodes:
448
+ * if any ancestor is missing, the call is a no-op (nothing to delete).
449
+ *
450
+ * Unlike `setByPath(obj, path, undefined)`, this leaves NO own key behind — the
451
+ * leaf reads as absent (`'k' in parent === false`), which keeps `deepEqual`
452
+ * structural comparisons in sync (a present `undefined` own-key and an absent
453
+ * key are NOT structurally equal under the own-key walk). Used by
454
+ * {@link applyFormChanges} to apply a clear-to-`undefined` change as a delete.
455
+ *
456
+ * Empty path clears the root domain value (`obj.value = undefined`).
457
+ */
458
+ declare function deleteByPath(obj: Record<string, unknown>, path: string): void;
445
459
  /** Value resolver function type — created once per form, reused across calls. */
446
460
  type TFormValueResolver = (prop: TAtscriptAnnotatedType, path: string) => unknown;
447
461
  declare function createFormValueResolver(data?: Record<string, unknown>, context?: Record<string, unknown>): TFormValueResolver;
@@ -450,6 +464,28 @@ declare function createFormData<T extends TAtscriptAnnotatedType>(type: T, resol
450
464
  };
451
465
  declare function detectUnionVariant(value: unknown, variants: FormUnionVariant[]): number;
452
466
  //#endregion
467
+ //#region src/form/clone.d.ts
468
+ /**
469
+ * Optional per-value unwrap hook. Lets a framework caller strip a reactive
470
+ * proxy off every visited value before it is copied (e.g. Vue's `toRaw`). The
471
+ * core never needs it — it is `undefined` here and the value passes through.
472
+ */
473
+ type CloneUnwrap = (value: unknown) => unknown;
474
+ /**
475
+ * Structural deep clone of plain JSON-ish data (objects / arrays / primitives /
476
+ * `Date`). Walks OWN-ENUMERABLE keys only (matches the own-key discipline in
477
+ * `diff.ts` — never copies an accidental prototype) and copies leaves by value.
478
+ *
479
+ * `structuredClone` is deliberately NOT used: it throws on functions and on Vue
480
+ * reactive proxies. The optional `unwrap` hook lets a framework caller
481
+ * de-proxy each value first (vue-form passes `toRaw`); the core omits it.
482
+ *
483
+ * The SINGLE deep-clone primitive for the form engine — used by
484
+ * `applyFormChanges`, `buildFormRebase`, and vue-form's baseline snapshot. Do
485
+ * not reimplement structural cloning elsewhere.
486
+ */
487
+ declare function deepClone<T>(value: T, unwrap?: CloneUnwrap): T;
488
+ //#endregion
453
489
  //#region src/form/validate.d.ts
454
490
  /** Per-call options for the form validator function. */
455
491
  interface TFormValidatorCallOptions {
@@ -484,6 +520,235 @@ declare function createFieldValidator(prop: TAtscriptAnnotatedType, opts?: TFiel
484
520
  context: unknown;
485
521
  }) => true | string;
486
522
  //#endregion
523
+ //#region src/form/diff.d.ts
524
+ /**
525
+ * One field that differs between baseline and current.
526
+ *
527
+ * - `kind: 'set'` — scalar / object / union / tuple field whose value changed
528
+ * (including a clear-to-`null`). `before` / `after` are the whole values at
529
+ * `path`.
530
+ * - `kind: 'array'` — array field whose membership or item content changed.
531
+ * `before` / `after` are the whole arrays.
532
+ *
533
+ * NOTE: `before` / `after` hold live references into the supplied `baseline` /
534
+ * `current` containers — see {@link buildFormDiff} for the snapshot contract.
535
+ */
536
+ interface FormFieldChange {
537
+ /** Dot-separated path relative to the form root (matches FormFieldDef.path). */
538
+ path: string;
539
+ kind: "set" | "array";
540
+ before: unknown;
541
+ after: unknown;
542
+ }
543
+ /** Options for {@link buildFormDiff}. */
544
+ interface FormDiffOptions {
545
+ /**
546
+ * Optimistic-concurrency control. When `true` (default), a top-level
547
+ * `$cas: { [versionColumn]: baselineVersion }` sibling is auto-included in
548
+ * the patch whenever the form has a `@db.column.version` column AND the
549
+ * patch is non-empty AND a baseline version value exists. `false` suppresses
550
+ * it entirely.
551
+ *
552
+ * Independent of `$cas`, the `@db.column.version` column is ALWAYS excluded
553
+ * from the SET diff: it is server-managed, and a direct write to it is
554
+ * rejected by `@atscript/db` (`DbError('VERSION_COLUMN_WRITE')`). It is only
555
+ * ever round-tripped through `$cas`.
556
+ */
557
+ cas?: boolean;
558
+ }
559
+ /** Result of {@link buildFormDiff}. */
560
+ interface FormDiffResult {
561
+ /** True when at least one field changed (revert-aware). */
562
+ isDirty: boolean;
563
+ /** Per-field changes (revert-aware — reverted fields are absent). */
564
+ changes: FormFieldChange[];
565
+ /**
566
+ * `@atscript/db` patch object — flat, keyed by field name. Empty `{}` when
567
+ * nothing changed. Carries a top-level `$cas` sibling when `opts.cas` is on
568
+ * and a version column exists.
569
+ */
570
+ patch: Record<string, unknown>;
571
+ }
572
+ /**
573
+ * Diffs a form's `current` data against its `baseline` snapshot, producing both
574
+ * a changed-fields list and an `@atscript/db` patch object.
575
+ *
576
+ * Both `baseline` and `current` are the WRAPPED form-data container
577
+ * (`{ value: domainData }`) so this reuses {@link getByPath}.
578
+ *
579
+ * Revert-aware: a value edited back to its baseline produces no change and no
580
+ * patch entry.
581
+ *
582
+ * Snapshot contract: the result is NOT a deep copy. `$insert` items, `$replace`
583
+ * arrays, scalar leaf values, and `changes[].before/after` all hold live
584
+ * references into `baseline` / `current`. Callers that keep editing the form
585
+ * after building the patch must snapshot first (e.g. build the patch at submit
586
+ * time on a frozen clone). This is the common Vue v-model flow.
587
+ */
588
+ declare function buildFormDiff(def: FormDef, baseline: Record<string, unknown>, current: Record<string, unknown>, opts?: FormDiffOptions): FormDiffResult;
589
+ /**
590
+ * Structural deep equality (order-sensitive for arrays). `NaN` equals `NaN`
591
+ * (revert-aware for NaN scalars) while `0` / `-0` stay equal (matches DB
592
+ * intent — `===` treats them equal, only NaN is special-cased).
593
+ *
594
+ * The single comparator shared across the form engine: diff, conflict
595
+ * detection ({@link buildFormRebase}), and apply all route through this — never
596
+ * reimplement equality elsewhere.
597
+ */
598
+ declare function deepEqual(a: unknown, b: unknown): boolean;
599
+ //#endregion
600
+ //#region src/form/dirty.d.ts
601
+ /**
602
+ * True when the field at dot-path `path` is dirty given a {@link FormFieldChange}
603
+ * list (as produced by {@link buildFormDiff}).
604
+ *
605
+ * The change list is leaf-grained for scalars/objects but WHOLE-ARRAY for arrays,
606
+ * so a field at `path` is dirty iff some change path equals `path` OR starts with
607
+ * `path + "."`:
608
+ *
609
+ * - scalar / leaf field (incl. nested `address.city`) → exact match.
610
+ * - object / section container → no entry at its own path, only its leaves →
611
+ * matched by the PREFIX branch.
612
+ * - whole-array field → one entry at the array root → exact match.
613
+ * - a field rendered for an array-ITEM leaf (e.g. `items.0.qty`) → NOT detectable:
614
+ * the array diff emits a single whole-array change at the array root, never
615
+ * per-item leaf paths, so this correctly returns false (the array container
616
+ * lights up instead). This is a known, documented limitation.
617
+ *
618
+ * The prefix uses `path + "."` so field `item` never matches a change at `items`
619
+ * (no false positives).
620
+ *
621
+ * Empty `path` `''` is the wrapped form root — every change is nested under it,
622
+ * so it is considered dirty iff there are ANY changes.
623
+ */
624
+ declare function isPathDirty(changes: FormFieldChange[], path: string): boolean;
625
+ /**
626
+ * Precomputes the set of ALL dirty paths from a {@link FormFieldChange} list so
627
+ * that membership is an O(1) `Set.has(path)` instead of {@link isPathDirty}'s
628
+ * per-call O(changes) prefix scan. Callers that probe many fields against the
629
+ * same change list (e.g. a form rendering one field per leaf) build this once
630
+ * and query it per field.
631
+ *
632
+ * For each change path `C` it adds `C` AND every dot-prefix ancestor of `C`
633
+ * (so `'address.city'` adds both `'address.city'` and `'address'`), matching
634
+ * `isPathDirty`'s "exact OR `path + '.'` prefix" predicate — an ancestor
635
+ * container is dirty exactly when some change is nested under it. The wrapped
636
+ * root `''` is added iff there are ANY changes, mirroring `isPathDirty('')`.
637
+ *
638
+ * INVARIANT (locked, tested): for EVERY path `P`,
639
+ * `collectDirtyPaths(changes).has(P) === isPathDirty(changes, P)`. This is a
640
+ * precompute of the SAME predicate, not a second one — keep them in lockstep.
641
+ */
642
+ declare function collectDirtyPaths(changes: FormFieldChange[]): Set<string>;
643
+ //#endregion
644
+ //#region src/form/apply.d.ts
645
+ /**
646
+ * Applies a {@link FormFieldChange} list onto a WRAPPED form-data container
647
+ * (`{ value: domainData }`), mutating it in place and returning the same
648
+ * reference. The inverse direction of {@link buildFormDiff}: where the diff
649
+ * READS `(baseline, current)` into changes, this WRITES changes onto data.
650
+ *
651
+ * IMPORTANT: pass a CLONE, never the live fetched row — every write mutates
652
+ * `data` directly. Callers that need the original intact should
653
+ * `deepClone(data)` first (see {@link deepClone}).
654
+ *
655
+ * Per-change semantics (the single place the apply rules live, so
656
+ * {@link buildFormRebase} stays consistent):
657
+ *
658
+ * - `kind: 'set'`:
659
+ * - `change.after === undefined` → DELETE the own key at `change.path` (walk
660
+ * to parent, `delete`). A cleared field must read as ABSENT, not as a
661
+ * present `undefined` own-key — otherwise a re-diff sees a structural
662
+ * mismatch where the form intends "no value". `setByPath(…, undefined)`
663
+ * leaves an own key behind, so we use {@link deleteByPath} instead.
664
+ * - otherwise → `setByPath(data, change.path, change.after)`.
665
+ * - `kind: 'array'`: whole-array set via `setByPath(data, change.path,
666
+ * change.after)` (LOCKED Option A — no per-element merge; the diff already
667
+ * carried the full after-array).
668
+ *
669
+ * The `def` is currently unused by the apply walk (paths fully describe the
670
+ * write target) but is part of the signature for parity with
671
+ * `buildFormDiff`/`buildFormRebase`, so the rebase engine threads one `def`
672
+ * uniformly through diff + apply.
673
+ */
674
+ declare function applyFormChanges(_def: FormDef, data: Record<string, unknown>, changes: FormFieldChange[]): Record<string, unknown>;
675
+ //#endregion
676
+ //#region src/form/rebase.d.ts
677
+ /** Options for {@link buildFormRebase}. */
678
+ interface FormRebaseOptions {
679
+ /**
680
+ * How to resolve a field changed on BOTH sides (local edit vs. upstream
681
+ * edit) to a different value:
682
+ * - `'ours'` (default) — keep the local edit, discard upstream's value.
683
+ * - `'theirs'` — take upstream's value, discard the local edit.
684
+ *
685
+ * A field changed on both sides to the SAME value is never a conflict.
686
+ */
687
+ conflict?: "ours" | "theirs";
688
+ }
689
+ /** Result of {@link buildFormRebase}. */
690
+ interface FormRebaseResult {
691
+ /**
692
+ * The rebased WRAPPED form-data container (`{ value }`). Always a fresh deep
693
+ * clone of `upstream` with the local diff reapplied — never aliases any
694
+ * input container.
695
+ */
696
+ next: Record<string, unknown>;
697
+ /**
698
+ * Paths that were changed on both sides to different values (same-path
699
+ * conflicts), plus ancestor paths whose subtree upstream cleared while local
700
+ * still edited a leaf under it (ancestor-clear conflicts). De-duplicated.
701
+ */
702
+ conflicts: string[];
703
+ /**
704
+ * The diff of `next` against the NEW baseline (`upstream`) — i.e. exactly the
705
+ * changes that survive on top of upstream. Empty `[]` when the rebased form
706
+ * equals upstream (a fully clean / fully reverted rebase).
707
+ *
708
+ * The returned `reapplied` does NOT alias the returned `next`, so installing
709
+ * `next` as live form data never retroactively mutates the returned change set.
710
+ */
711
+ reapplied: FormFieldChange[];
712
+ }
713
+ /**
714
+ * Pure 3-way rebase for a change-tracked form. Given the current baseline `B0`,
715
+ * the live form `C`, and a fresh upstream `U`, produces the form rewritten as
716
+ * `U` + the local diff (`C` vs `B0`) reapplied on top:
717
+ *
718
+ * - Fields the user never touched adopt upstream's value.
719
+ * - Local edits survive (reapplied onto the upstream clone).
720
+ * - Fields changed on BOTH sides to different values are conflicts, resolved by
721
+ * `opts.conflict` (`'ours'` keeps local, `'theirs'` takes upstream).
722
+ *
723
+ * All inputs are WRAPPED form-data containers (`{ value: domainData }`). The
724
+ * result `next` is a fresh container; no input is mutated.
725
+ *
726
+ * `diffOptions` are forwarded to BOTH internal `buildFormDiff` passes so the
727
+ * same field exclusions apply (notably the `@db.column.version` column and the
728
+ * `$cas` policy) on the local and upstream sides — keep them identical to the
729
+ * options the caller uses for its own change tracking.
730
+ */
731
+ declare function buildFormRebase(def: FormDef, baseline: Record<string, unknown>, current: Record<string, unknown>, upstream: Record<string, unknown>, opts?: FormRebaseOptions, diffOptions?: FormDiffOptions): FormRebaseResult;
732
+ //#endregion
733
+ //#region src/form/union-detect.d.ts
734
+ /**
735
+ * True when ANY union field in the form resolves to a DIFFERENT discriminated
736
+ * variant between two wrapped data containers. A variant picker typically
737
+ * detects its variant index once at setup and keys the variant subtree on it,
738
+ * so a rebase that lands a different variant (via conflict OR an upstream-only
739
+ * switch) needs a remount to re-detect. This walks union + nested-object fields
740
+ * and compares `detectUnionVariant` at each union path.
741
+ *
742
+ * Scope note (pragmatic): walks standalone + nested-OBJECT union fields. Unions
743
+ * nested INSIDE array items are not walked — an array renderer that keeps a
744
+ * stable per-item key across in-place value mutations would not remount an
745
+ * existing row's picker on an upstream-driven variant flip, but that collision
746
+ * (a 3-way rebase landing a different union variant inside an unchanged array
747
+ * row) is a rare edge. TODO: extend to array-item unions if a real consumer
748
+ * hits a stuck picker inside an array row.
749
+ */
750
+ declare function unionVariantChanged(def: FormDef, before: Record<string, unknown>, after: Record<string, unknown>): boolean;
751
+ //#endregion
487
752
  //#region src/form/error-utils.d.ts
488
753
  /**
489
754
  * Framework-agnostic helpers for working with form-error maps keyed by
@@ -752,6 +1017,11 @@ interface TableDef {
752
1017
  * of re-walking the type.
753
1018
  */
754
1019
  flatMap: Map<string, TAtscriptAnnotatedType>;
1020
+ /**
1021
+ * Server-returnable field paths (from meta.fields) — the gate for
1022
+ * @ui.table.selectWith targets, includes @ui.table.exclude fields.
1023
+ */
1024
+ fetchableFields: Set<string>;
755
1025
  primaryKeys: string[];
756
1026
  /** Preferred row identifier — see `MetaResponse.preferredId`. */
757
1027
  preferredId: string[];
@@ -792,8 +1062,6 @@ interface ColumnDef {
792
1062
  * for non-nullable columns since they can never match.
793
1063
  */
794
1064
  nullable: boolean;
795
- /** Whether this column is visible by default. */
796
- visible: boolean;
797
1065
  /** Default column width from @ui.table.width. */
798
1066
  width?: string;
799
1067
  /** Maximum length constraint from @expect.maxLen — used to derive default column width. */
@@ -903,8 +1171,6 @@ declare function resetMetaCache(): void;
903
1171
  declare function str(value: unknown): string;
904
1172
  //#endregion
905
1173
  //#region src/table/column-resolver.d.ts
906
- /** Get visible columns only, already sorted by order. */
907
- declare function getVisibleColumns(def: TableDef): ColumnDef[];
908
1174
  /** Get sortable columns. */
909
1175
  declare function getSortableColumns(def: TableDef): ColumnDef[];
910
1176
  /** Get filterable columns. */
@@ -912,4 +1178,4 @@ declare function getFilterableColumns(def: TableDef): ColumnDef[];
912
1178
  /** Find a column by path. */
913
1179
  declare function getColumn(def: TableDef, path: string): ColumnDef | undefined;
914
1180
  //#endregion
915
- export { type ClientFactory, type ColumnDef, type CurrencyDisplay, DB_AMOUNT_CURRENCY, DB_AMOUNT_CURRENCY_REF, DB_COLUMN_PRECISION, DB_HTTP_PATH, DB_REL_FK, DB_UNIT, DB_UNIT_REF, DEFAULT_COL_SPAN, DEFAULT_ROW_SPAN, type DecimalParts, EXPECT_MAX_LENGTH, type FieldMeta, type FieldResolver, type FormActionInfo, type FormArrayFieldDef, type FormDef, type FormFieldDef, type FormObjectFieldDef, type FormTupleFieldDef, type FormUnionFieldDef, type FormUnionVariant, type FormatDecimalOptions, type GridSpanArgs, type GridSpec, META_DEFAULT, META_DESCRIPTION, META_ID, META_LABEL, META_READONLY, META_REQUIRED, META_SENSITIVE, type MeasurementInfo, type MetaCacheEntry, type MetaResponse, type PaginationControl, type RelationInfo, type ResolvedValueHelp, type SearchIndexInfo, type SortControl, StaticFieldResolver, type TCrudOp, type TCrudPermissions, type TDbActionInfo, type TDbActionIntent, type TDbActionLevel, type TDbActionProcessor, type TFieldValidatorOptions, type TFormAction, type TFormEntryOptions, type TFormValidatorCallOptions, type TFormValueResolver, type TResolveOptions, type TableActionsModel, type TableDef, type TableQueryState, UI_DICT_ATTR, UI_DICT_DESCR, UI_DICT_FILTERABLE, UI_DICT_LABEL, UI_DICT_SEARCHABLE, UI_DICT_SORTABLE, UI_FORM_ACTION, UI_FORM_ATTR, UI_FORM_AUTOCOMPLETE, UI_FORM_CLASSES, UI_FORM_COMPONENT, UI_FORM_DISABLED, UI_FORM_FN_ATTR, UI_FORM_FN_CLASSES, UI_FORM_FN_DESCRIPTION, UI_FORM_FN_DISABLED, UI_FORM_FN_HIDDEN, UI_FORM_FN_HINT, UI_FORM_FN_LABEL, UI_FORM_FN_OPTIONS, UI_FORM_FN_PLACEHOLDER, UI_FORM_FN_PREFIX, UI_FORM_FN_READONLY, UI_FORM_FN_STYLES, UI_FORM_FN_SUBMIT_DISABLED, UI_FORM_FN_SUBMIT_TEXT, UI_FORM_FN_TITLE, UI_FORM_FN_VALUE, UI_FORM_GRID_COL_SPAN, UI_FORM_GRID_ROW_SPAN, UI_FORM_HIDDEN, UI_FORM_HINT, UI_FORM_LABEL_SINGULAR, UI_FORM_OPTIONS, UI_FORM_ORDER, UI_FORM_PLACEHOLDER, UI_FORM_PREFIX, UI_FORM_PREFIX_ICON, UI_FORM_PREFIX_REF, UI_FORM_STYLES, UI_FORM_SUBMIT_TEXT, UI_FORM_SUFFIX, UI_FORM_SUFFIX_ICON, UI_FORM_SUFFIX_REF, UI_FORM_TYPE, UI_FORM_VALIDATE, UI_TABLE_ATTR, UI_TABLE_CLASSES, UI_TABLE_COMPONENT, UI_TABLE_FN_ATTR, UI_TABLE_FN_CLASSES, UI_TABLE_FN_PREFIX, UI_TABLE_FN_STYLES, UI_TABLE_HIDDEN, UI_TABLE_ORDER, UI_TABLE_SELECT_WITH, UI_TABLE_STYLES, UI_TABLE_TYPE, UI_TABLE_WIDTH, UI_TYPE, ValueHelpClient, type ValueHelpInfo, type ValueHelpResult, type ValueHelpSearchOptions, WF_ACTION_WITH_DATA, asArray, buildDescendantErrorCounts, buildGridClasses, buildUnionVariants, createFieldValidator, createFormData, createFormDef, createFormValueResolver, createTableDef, defaultResolver, detectUnionVariant, enforceScale, extractLiteralOptions, extractMeasurement, extractValueHelp, formatDecimalForDisplay, getByPath, getColumn, getCurrencyDecimals, getCurrencyDisplayParts, getDecimalSeparator, getDeclaredFormActions, getDefaultClientFactory, getDefaultValidatorPlugins, getFieldMeta, getFilterableColumns, getFormValidator, getMetaEntry, getResolver, getSortableColumns, getThousandsSeparator, getVisibleColumns, groupInteger, hasComputedAnnotations, isArrayField, isObjectField, isPureLiteralUnion, isTupleField, isUnionField, iteratePathAncestors, joinDecimalString, mergeErrorMaps, optKey, optLabel, parseColSpan, parseDecimalInput, parseRowSpan, parseStaticAttrs, parseStaticOptions, resetDefaultClientFactory, resetMetaCache, resetValueHelpCache, resolveAttrs, resolveFieldProp, resolveFormProp, resolveGridSpec, resolveOptions, resolveSingularLabel, resolveStatic, resolveValueHelp, setByPath, setDefaultClientFactory, setDefaultValidatorPlugins, setResolver, splitDecimalString, str, valueHelpDictPaths };
1181
+ export { type ClientFactory, type CloneUnwrap, type ColumnDef, type CurrencyDisplay, DB_AMOUNT_CURRENCY, DB_AMOUNT_CURRENCY_REF, DB_COLUMN_PRECISION, DB_HTTP_PATH, DB_REL_FK, DB_UNIT, DB_UNIT_REF, DEFAULT_COL_SPAN, DEFAULT_ROW_SPAN, type DecimalParts, EXPECT_MAX_LENGTH, type FieldMeta, type FieldResolver, type FormActionInfo, type FormArrayFieldDef, type FormDef, type FormDiffOptions, type FormDiffResult, type FormFieldChange, type FormFieldDef, type FormObjectFieldDef, type FormRebaseOptions, type FormRebaseResult, type FormTupleFieldDef, type FormUnionFieldDef, type FormUnionVariant, type FormatDecimalOptions, type GridSpanArgs, type GridSpec, META_DEFAULT, META_DESCRIPTION, META_ID, META_LABEL, META_READONLY, META_REQUIRED, META_SENSITIVE, type MeasurementInfo, type MetaCacheEntry, type MetaResponse, type PaginationControl, type RelationInfo, type ResolvedValueHelp, type SearchIndexInfo, type SortControl, StaticFieldResolver, type TCrudOp, type TCrudPermissions, type TDbActionInfo, type TDbActionIntent, type TDbActionLevel, type TDbActionProcessor, type TFieldValidatorOptions, type TFormAction, type TFormEntryOptions, type TFormValidatorCallOptions, type TFormValueResolver, type TResolveOptions, type TableActionsModel, type TableDef, type TableQueryState, UI_DICT_ATTR, UI_DICT_DESCR, UI_DICT_FILTERABLE, UI_DICT_LABEL, UI_DICT_SEARCHABLE, UI_DICT_SORTABLE, UI_FORM_ACTION, UI_FORM_ATTR, UI_FORM_AUTOCOMPLETE, UI_FORM_CLASSES, UI_FORM_COMPONENT, UI_FORM_DISABLED, UI_FORM_FN_ATTR, UI_FORM_FN_CLASSES, UI_FORM_FN_DESCRIPTION, UI_FORM_FN_DISABLED, UI_FORM_FN_HIDDEN, UI_FORM_FN_HINT, UI_FORM_FN_LABEL, UI_FORM_FN_OPTIONS, UI_FORM_FN_PLACEHOLDER, UI_FORM_FN_PREFIX, UI_FORM_FN_READONLY, UI_FORM_FN_STYLES, UI_FORM_FN_SUBMIT_DISABLED, UI_FORM_FN_SUBMIT_TEXT, UI_FORM_FN_TITLE, UI_FORM_FN_VALUE, UI_FORM_GRID_COL_SPAN, UI_FORM_GRID_ROW_SPAN, UI_FORM_HIDDEN, UI_FORM_HINT, UI_FORM_LABEL_SINGULAR, UI_FORM_OPTIONS, UI_FORM_ORDER, UI_FORM_PLACEHOLDER, UI_FORM_PREFIX, UI_FORM_PREFIX_ICON, UI_FORM_PREFIX_REF, UI_FORM_STYLES, UI_FORM_SUBMIT_TEXT, UI_FORM_SUFFIX, UI_FORM_SUFFIX_ICON, UI_FORM_SUFFIX_REF, UI_FORM_TYPE, UI_FORM_VALIDATE, UI_TABLE_ATTR, UI_TABLE_CLASSES, UI_TABLE_COMPONENT, UI_TABLE_EXCLUDE, UI_TABLE_FN_ATTR, UI_TABLE_FN_CLASSES, UI_TABLE_FN_PREFIX, UI_TABLE_FN_STYLES, UI_TABLE_ORDER, UI_TABLE_SELECT_WITH, UI_TABLE_STYLES, UI_TABLE_TYPE, UI_TABLE_WIDTH, UI_TYPE, ValueHelpClient, type ValueHelpInfo, type ValueHelpResult, type ValueHelpSearchOptions, WF_ACTION_WITH_DATA, applyFormChanges, asArray, buildDescendantErrorCounts, buildFormDiff, buildFormRebase, buildGridClasses, buildUnionVariants, collectDirtyPaths, createFieldValidator, createFormData, createFormDef, createFormValueResolver, createTableDef, deepClone, deepEqual, defaultResolver, deleteByPath, detectUnionVariant, enforceScale, extractLiteralOptions, extractMeasurement, extractValueHelp, formatDecimalForDisplay, getByPath, getColumn, getCurrencyDecimals, getCurrencyDisplayParts, getDecimalSeparator, getDeclaredFormActions, getDefaultClientFactory, getDefaultValidatorPlugins, getFieldMeta, getFilterableColumns, getFormValidator, getMetaEntry, getResolver, getSortableColumns, getThousandsSeparator, groupInteger, hasComputedAnnotations, isArrayField, isObjectField, isPathDirty, isPureLiteralUnion, isTupleField, isUnionField, iteratePathAncestors, joinDecimalString, mergeErrorMaps, optKey, optLabel, parseColSpan, parseDecimalInput, parseRowSpan, parseStaticAttrs, parseStaticOptions, resetDefaultClientFactory, resetMetaCache, resetValueHelpCache, resolveAttrs, resolveFieldProp, resolveFormProp, resolveGridSpec, resolveOptions, resolveSingularLabel, resolveStatic, resolveValueHelp, setByPath, setDefaultClientFactory, setDefaultValidatorPlugins, setResolver, splitDecimalString, str, unionVariantChanged, valueHelpDictPaths };