@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.cjs +731 -10
- package/dist/index.d.cts +272 -6
- package/dist/index.d.mts +272 -6
- package/dist/index.mjs +722 -9
- package/dist/plugin.cjs +2 -2
- package/dist/plugin.mjs +2 -2
- package/package.json +3 -3
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
|
|
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,
|
|
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 };
|