@stndrds/schema 0.1.0-alpha.32 → 0.1.0-alpha.34

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.
@@ -643,8 +643,9 @@ interface FormulaAttribute extends Omit<BaseAttribute<never>, "defaultValue" | "
643
643
  * - Date (earliest, latest): Only for date type
644
644
  * - Count (count, countValues, countUniqueValues, countEmpty): Universal
645
645
  * - Percent (percentEmpty, percentNotEmpty): Universal
646
+ * - Lookup (original): Returns all values as array, rendered as target type
646
647
  */
647
- type RollupFunction = "sum" | "avg" | "min" | "max" | "earliest" | "latest" | "collect" | "count" | "countValues" | "countUniqueValues" | "countEmpty" | "percentEmpty" | "percentNotEmpty";
648
+ type RollupFunction = "sum" | "avg" | "earliest" | "latest" | "count" | "countValues" | "countUniqueValues" | "countEmpty" | "percentEmpty" | "percentNotEmpty" | "original";
648
649
  /**
649
650
  * RollupAttribute - Aggregates values from related records
650
651
  *
@@ -685,19 +686,14 @@ interface RollupAttribute extends Omit<BaseAttribute<never>, "defaultValue" | "r
685
686
  decimals?: number;
686
687
  /** Rollup is always not required (read-only) */
687
688
  required: false;
688
- /**
689
- * Display the rollup value using the target attribute's type formatter
690
- * @default false - use rollup-specific formatting (number, count, percent)
691
- */
692
- showAsOriginal?: boolean;
693
689
  /**
694
690
  * Cached type of the target attribute for display purposes
695
- * Stored to avoid re-fetching schema on every render
691
+ * Used when function="original" to render values as the target type
696
692
  */
697
693
  targetAttributeType?: AttributeType;
698
694
  /**
699
695
  * Cached options from target attribute (for select/status/multiselect display)
700
- * Required when showAsOriginal=true and target is a select-like type
696
+ * Required when function="original" and target is a select-like type
701
697
  */
702
698
  targetAttributeOptions?: Option[];
703
699
  }
@@ -1969,6 +1965,265 @@ interface AssignRoleInput {
1969
1965
  assignedBy?: Uuid;
1970
1966
  }
1971
1967
 
1968
+ /**
1969
+ * Inline attribute group configuration
1970
+ * Groups multiple attributes into a single composite field with dropdown editing
1971
+ */
1972
+ interface AttributeGroupField {
1973
+ /** Unique identifier for the group */
1974
+ id: string;
1975
+ /** Display label for the composite field */
1976
+ label: string;
1977
+ /** Description shown in the dropdown */
1978
+ description?: string;
1979
+ /** Attribute names to include in this group */
1980
+ attributes: string[];
1981
+ /**
1982
+ * Template for the display value
1983
+ * Uses {attributeName} syntax for interpolation
1984
+ * @example "{billing_street}, {billing_city} {billing_postal_code}"
1985
+ */
1986
+ displayTemplate?: string;
1987
+ }
1988
+ /**
1989
+ * Field definition within a form group
1990
+ * Can be either a single attribute or an inline attribute group
1991
+ */
1992
+ interface Field {
1993
+ /** Attribute name to display (for single attribute fields) */
1994
+ attribute?: string;
1995
+ /** Inline attribute group (groups multiple attributes into one composite field) */
1996
+ attributeGroup?: AttributeGroupField;
1997
+ /** Grid span (1-12 columns) */
1998
+ span?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
1999
+ /** Override label for this view (only for single attribute fields) */
2000
+ label?: string;
2001
+ /** Force read-only display */
2002
+ readOnly?: boolean;
2003
+ }
2004
+ /**
2005
+ * Group of fields for organizing forms
2006
+ */
2007
+ interface Group {
2008
+ id: string;
2009
+ label: string;
2010
+ description?: string;
2011
+ fields: Field[];
2012
+ collapsible?: boolean;
2013
+ collapsed?: boolean;
2014
+ order?: number;
2015
+ }
2016
+ type TabType = "form" | "table" | "custom" | "activity" | "notes";
2017
+ /**
2018
+ * Base properties shared by all tab types
2019
+ */
2020
+ interface BaseTab {
2021
+ id: string;
2022
+ name: string;
2023
+ label: string;
2024
+ icon?: IconName;
2025
+ order?: number;
2026
+ /** If true, tab is defined by developer (protected) */
2027
+ system?: boolean;
2028
+ }
2029
+ /**
2030
+ * Form tab - displays attributes organized in groups
2031
+ */
2032
+ interface FormTab extends BaseTab {
2033
+ type: "form";
2034
+ groups: Group[];
2035
+ }
2036
+ /**
2037
+ * Shared properties for table tabs
2038
+ */
2039
+ interface TableTabBase extends BaseTab {
2040
+ type: "table";
2041
+ /** Columns to display (attribute names from target object) */
2042
+ columns: string[];
2043
+ /** Allow creating new records */
2044
+ allowCreate?: boolean;
2045
+ /** Allow inline editing */
2046
+ allowEdit?: boolean;
2047
+ /** Allow deleting records */
2048
+ allowDelete?: boolean;
2049
+ /** Default filters applied to the table */
2050
+ filters?: FilterState;
2051
+ /** Default sort rules */
2052
+ sorts?: SortRule[];
2053
+ }
2054
+ /**
2055
+ * Direct table tab - displays records from a relation attribute on the current object
2056
+ *
2057
+ * @example Project.members → shows Users linked via the "members" relation
2058
+ * ```typescript
2059
+ * {
2060
+ * type: "table",
2061
+ * relationMode: "direct",
2062
+ * relationAttribute: "members",
2063
+ * columns: ["name", "email"]
2064
+ * }
2065
+ * ```
2066
+ */
2067
+ interface DirectTableTab extends TableTabBase {
2068
+ relationMode: "direct";
2069
+ /** Relation attribute name on the current object */
2070
+ relationAttribute: string;
2071
+ }
2072
+ /**
2073
+ * Inverse table tab - displays records from another object that have a relation to us
2074
+ *
2075
+ * @example Contact.company → on Company, shows Contacts that point to this Company
2076
+ * ```typescript
2077
+ * {
2078
+ * type: "table",
2079
+ * relationMode: "inverse",
2080
+ * sourceObject: "contacts",
2081
+ * relationAttribute: "company",
2082
+ * columns: ["firstName", "lastName", "email"]
2083
+ * }
2084
+ * ```
2085
+ */
2086
+ interface InverseTableTab extends TableTabBase {
2087
+ relationMode: "inverse";
2088
+ /** Object name that has the relation to us */
2089
+ sourceObject: string;
2090
+ /** Relation attribute name on the source object that points to us */
2091
+ relationAttribute: string;
2092
+ }
2093
+ /**
2094
+ * Table tab - displays related records in a table
2095
+ * Discriminated union by relationMode for type-safe configuration
2096
+ */
2097
+ type TableTab = DirectTableTab | InverseTableTab;
2098
+ /**
2099
+ * Custom tab - renders a developer-defined component
2100
+ */
2101
+ interface CustomTab extends BaseTab {
2102
+ type: "custom";
2103
+ /** Component identifier to render */
2104
+ component: string;
2105
+ /** Props to pass to the component */
2106
+ props?: Record<string, unknown>;
2107
+ }
2108
+ /**
2109
+ * Activity tab - displays activity feed for the current record
2110
+ */
2111
+ interface ActivityTab extends BaseTab {
2112
+ type: "activity";
2113
+ /** Maximum number of activities to display (optional) */
2114
+ limit?: number;
2115
+ }
2116
+ /**
2117
+ * Notes tab - displays notes linked to the current record
2118
+ *
2119
+ * Shows all notes where linked_object_name matches the current object
2120
+ * and linked_record_id matches the current record ID.
2121
+ * Respects visibility rules (private notes only visible to author).
2122
+ *
2123
+ * @example
2124
+ * ```typescript
2125
+ * {
2126
+ * type: "notes",
2127
+ * id: "notes",
2128
+ * name: "notes",
2129
+ * label: "Notes",
2130
+ * allowCreate: true
2131
+ * }
2132
+ * ```
2133
+ */
2134
+ interface NotesTab extends BaseTab {
2135
+ type: "notes";
2136
+ /** Show only private notes of the current user */
2137
+ privateOnly?: boolean;
2138
+ /** Allow creating new notes from this tab */
2139
+ allowCreate?: boolean;
2140
+ }
2141
+ /**
2142
+ * Union of all tab types
2143
+ */
2144
+ type Tab = FormTab | TableTab | CustomTab | ActivityTab | NotesTab;
2145
+ /**
2146
+ * View layout mode
2147
+ * - `page`: Full view with multiple tabs (form, table, activity, notes, custom)
2148
+ * - `modal`: Simplified view for modals, single FormTab without tabs UI
2149
+ */
2150
+ type ViewLayout = "page" | "modal";
2151
+ /**
2152
+ * View definition - organizes object attributes into tabs/pages
2153
+ *
2154
+ * @example
2155
+ * ```typescript
2156
+ * const companyView: ViewDefinition = {
2157
+ * name: "detail",
2158
+ * label: "Company Detail",
2159
+ * object: "companies",
2160
+ * layout: "page",
2161
+ * tabs: [
2162
+ * { type: "form", name: "general", label: "Info", groups: [...] },
2163
+ * { type: "table", relationMode: "inverse", sourceObject: "contacts", relationAttribute: "company", columns: [...] }
2164
+ * ],
2165
+ * default: true,
2166
+ * system: true
2167
+ * };
2168
+ * ```
2169
+ */
2170
+ interface ViewDefinition {
2171
+ id?: Uuid;
2172
+ /** Technical name (kebab-case) */
2173
+ name: string;
2174
+ /** Display label */
2175
+ label: string;
2176
+ /** Description */
2177
+ description?: string;
2178
+ /** Icon */
2179
+ icon?: IconName;
2180
+ /** Object this view belongs to (object name) */
2181
+ object: string;
2182
+ /**
2183
+ * Layout mode for the view
2184
+ * - `page`: Full view with multiple tabs
2185
+ * - `modal`: Simplified view for modals (single FormTab, no tabs UI)
2186
+ * @default "page"
2187
+ */
2188
+ layout?: ViewLayout;
2189
+ /** Tabs in this view */
2190
+ tabs: Tab[];
2191
+ /** Default view for this object (per layout) */
2192
+ default?: boolean;
2193
+ /** System view (defined by developer, protected) */
2194
+ system?: boolean;
2195
+ /** Extensible metadata */
2196
+ metadata?: Record<string, unknown>;
2197
+ }
2198
+ /**
2199
+ * Check if a tab is a form tab
2200
+ */
2201
+ declare function isFormTab(tab: Tab): tab is FormTab;
2202
+ /**
2203
+ * Check if a tab is a table tab
2204
+ */
2205
+ declare function isTableTab(tab: Tab): tab is TableTab;
2206
+ /**
2207
+ * Check if a table tab is a direct relation tab
2208
+ */
2209
+ declare function isDirectTableTab(tab: Tab): tab is DirectTableTab;
2210
+ /**
2211
+ * Check if a table tab is an inverse relation tab
2212
+ */
2213
+ declare function isInverseTableTab(tab: Tab): tab is InverseTableTab;
2214
+ /**
2215
+ * Check if a tab is a custom tab
2216
+ */
2217
+ declare function isCustomTab(tab: Tab): tab is CustomTab;
2218
+ /**
2219
+ * Check if a tab is an activity tab
2220
+ */
2221
+ declare function isActivityTab(tab: Tab): tab is ActivityTab;
2222
+ /**
2223
+ * Check if a tab is a notes tab
2224
+ */
2225
+ declare function isNotesTab(tab: Tab): tab is NotesTab;
2226
+
1972
2227
  /**
1973
2228
  * Object as stored in database (metadata)
1974
2229
  */
@@ -2174,6 +2429,8 @@ interface DBView extends Timestamps {
2174
2429
  label: string;
2175
2430
  description?: string;
2176
2431
  icon?: IconName;
2432
+ /** Layout mode: "page" (full tabs) or "modal" (single form) */
2433
+ layout?: ViewLayout;
2177
2434
  tabs: Tab[];
2178
2435
  default: boolean;
2179
2436
  system: boolean;
@@ -2190,6 +2447,8 @@ interface CreateDBView {
2190
2447
  label: string;
2191
2448
  description?: string;
2192
2449
  icon?: IconName;
2450
+ /** Layout mode: "page" (full tabs) or "modal" (single form) */
2451
+ layout?: ViewLayout;
2193
2452
  tabs: Tab[];
2194
2453
  default?: boolean;
2195
2454
  system?: boolean;
@@ -2199,6 +2458,8 @@ interface UpdateDBView {
2199
2458
  label?: string;
2200
2459
  description?: string;
2201
2460
  icon?: IconName;
2461
+ /** Layout mode: "page" (full tabs) or "modal" (single form) */
2462
+ layout?: ViewLayout;
2202
2463
  tabs?: Tab[];
2203
2464
  default?: boolean;
2204
2465
  metadata?: Record<string, unknown>;
@@ -2213,6 +2474,8 @@ interface UpsertDBView {
2213
2474
  label: string;
2214
2475
  description?: string;
2215
2476
  icon?: IconName;
2477
+ /** Layout mode: "page" (full tabs) or "modal" (single form) */
2478
+ layout?: ViewLayout;
2216
2479
  tabs: Tab[];
2217
2480
  default?: boolean;
2218
2481
  system?: boolean;
@@ -2531,251 +2794,6 @@ interface InviteUserInput {
2531
2794
  redirectTo?: string;
2532
2795
  }
2533
2796
 
2534
- /**
2535
- * Inline attribute group configuration
2536
- * Groups multiple attributes into a single composite field with dropdown editing
2537
- */
2538
- interface AttributeGroupField {
2539
- /** Unique identifier for the group */
2540
- id: string;
2541
- /** Display label for the composite field */
2542
- label: string;
2543
- /** Description shown in the dropdown */
2544
- description?: string;
2545
- /** Attribute names to include in this group */
2546
- attributes: string[];
2547
- /**
2548
- * Template for the display value
2549
- * Uses {attributeName} syntax for interpolation
2550
- * @example "{billing_street}, {billing_city} {billing_postal_code}"
2551
- */
2552
- displayTemplate?: string;
2553
- }
2554
- /**
2555
- * Field definition within a form group
2556
- * Can be either a single attribute or an inline attribute group
2557
- */
2558
- interface Field {
2559
- /** Attribute name to display (for single attribute fields) */
2560
- attribute?: string;
2561
- /** Inline attribute group (groups multiple attributes into one composite field) */
2562
- attributeGroup?: AttributeGroupField;
2563
- /** Grid span (1-12 columns) */
2564
- span?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
2565
- /** Override label for this view (only for single attribute fields) */
2566
- label?: string;
2567
- /** Force read-only display */
2568
- readOnly?: boolean;
2569
- }
2570
- /**
2571
- * Group of fields for organizing forms
2572
- */
2573
- interface Group {
2574
- id: string;
2575
- label: string;
2576
- description?: string;
2577
- fields: Field[];
2578
- collapsible?: boolean;
2579
- collapsed?: boolean;
2580
- order?: number;
2581
- }
2582
- type TabType = "form" | "table" | "custom" | "activity" | "notes";
2583
- /**
2584
- * Base properties shared by all tab types
2585
- */
2586
- interface BaseTab {
2587
- id: string;
2588
- name: string;
2589
- label: string;
2590
- icon?: IconName;
2591
- order?: number;
2592
- /** If true, tab is defined by developer (protected) */
2593
- system?: boolean;
2594
- }
2595
- /**
2596
- * Form tab - displays attributes organized in groups
2597
- */
2598
- interface FormTab extends BaseTab {
2599
- type: "form";
2600
- groups: Group[];
2601
- }
2602
- /**
2603
- * Shared properties for table tabs
2604
- */
2605
- interface TableTabBase extends BaseTab {
2606
- type: "table";
2607
- /** Columns to display (attribute names from target object) */
2608
- columns: string[];
2609
- /** Allow creating new records */
2610
- allowCreate?: boolean;
2611
- /** Allow inline editing */
2612
- allowEdit?: boolean;
2613
- /** Allow deleting records */
2614
- allowDelete?: boolean;
2615
- /** Default filters applied to the table */
2616
- filters?: FilterState;
2617
- /** Default sort rules */
2618
- sorts?: SortRule[];
2619
- }
2620
- /**
2621
- * Direct table tab - displays records from a relation attribute on the current object
2622
- *
2623
- * @example Project.members → shows Users linked via the "members" relation
2624
- * ```typescript
2625
- * {
2626
- * type: "table",
2627
- * relationMode: "direct",
2628
- * relationAttribute: "members",
2629
- * columns: ["name", "email"]
2630
- * }
2631
- * ```
2632
- */
2633
- interface DirectTableTab extends TableTabBase {
2634
- relationMode: "direct";
2635
- /** Relation attribute name on the current object */
2636
- relationAttribute: string;
2637
- }
2638
- /**
2639
- * Inverse table tab - displays records from another object that have a relation to us
2640
- *
2641
- * @example Contact.company → on Company, shows Contacts that point to this Company
2642
- * ```typescript
2643
- * {
2644
- * type: "table",
2645
- * relationMode: "inverse",
2646
- * sourceObject: "contacts",
2647
- * relationAttribute: "company",
2648
- * columns: ["firstName", "lastName", "email"]
2649
- * }
2650
- * ```
2651
- */
2652
- interface InverseTableTab extends TableTabBase {
2653
- relationMode: "inverse";
2654
- /** Object name that has the relation to us */
2655
- sourceObject: string;
2656
- /** Relation attribute name on the source object that points to us */
2657
- relationAttribute: string;
2658
- }
2659
- /**
2660
- * Table tab - displays related records in a table
2661
- * Discriminated union by relationMode for type-safe configuration
2662
- */
2663
- type TableTab = DirectTableTab | InverseTableTab;
2664
- /**
2665
- * Custom tab - renders a developer-defined component
2666
- */
2667
- interface CustomTab extends BaseTab {
2668
- type: "custom";
2669
- /** Component identifier to render */
2670
- component: string;
2671
- /** Props to pass to the component */
2672
- props?: Record<string, unknown>;
2673
- }
2674
- /**
2675
- * Activity tab - displays activity feed for the current record
2676
- */
2677
- interface ActivityTab extends BaseTab {
2678
- type: "activity";
2679
- /** Maximum number of activities to display (optional) */
2680
- limit?: number;
2681
- }
2682
- /**
2683
- * Notes tab - displays notes linked to the current record
2684
- *
2685
- * Shows all notes where linked_object_name matches the current object
2686
- * and linked_record_id matches the current record ID.
2687
- * Respects visibility rules (private notes only visible to author).
2688
- *
2689
- * @example
2690
- * ```typescript
2691
- * {
2692
- * type: "notes",
2693
- * id: "notes",
2694
- * name: "notes",
2695
- * label: "Notes",
2696
- * allowCreate: true
2697
- * }
2698
- * ```
2699
- */
2700
- interface NotesTab extends BaseTab {
2701
- type: "notes";
2702
- /** Show only private notes of the current user */
2703
- privateOnly?: boolean;
2704
- /** Allow creating new notes from this tab */
2705
- allowCreate?: boolean;
2706
- }
2707
- /**
2708
- * Union of all tab types
2709
- */
2710
- type Tab = FormTab | TableTab | CustomTab | ActivityTab | NotesTab;
2711
- /**
2712
- * View definition - organizes object attributes into tabs/pages
2713
- *
2714
- * @example
2715
- * ```typescript
2716
- * const companyView: ViewDefinition = {
2717
- * name: "detail",
2718
- * label: "Company Detail",
2719
- * object: "companies",
2720
- * tabs: [
2721
- * { type: "form", name: "general", label: "Info", groups: [...] },
2722
- * { type: "table", relationMode: "inverse", sourceObject: "contacts", relationAttribute: "company", columns: [...] }
2723
- * ],
2724
- * default: true,
2725
- * system: true
2726
- * };
2727
- * ```
2728
- */
2729
- interface ViewDefinition {
2730
- id?: Uuid;
2731
- /** Technical name (kebab-case) */
2732
- name: string;
2733
- /** Display label */
2734
- label: string;
2735
- /** Description */
2736
- description?: string;
2737
- /** Icon */
2738
- icon?: IconName;
2739
- /** Object this view belongs to (object name) */
2740
- object: string;
2741
- /** Tabs in this view */
2742
- tabs: Tab[];
2743
- /** Default view for this object */
2744
- default?: boolean;
2745
- /** System view (defined by developer, protected) */
2746
- system?: boolean;
2747
- /** Extensible metadata */
2748
- metadata?: Record<string, unknown>;
2749
- }
2750
- /**
2751
- * Check if a tab is a form tab
2752
- */
2753
- declare function isFormTab(tab: Tab): tab is FormTab;
2754
- /**
2755
- * Check if a tab is a table tab
2756
- */
2757
- declare function isTableTab(tab: Tab): tab is TableTab;
2758
- /**
2759
- * Check if a table tab is a direct relation tab
2760
- */
2761
- declare function isDirectTableTab(tab: Tab): tab is DirectTableTab;
2762
- /**
2763
- * Check if a table tab is an inverse relation tab
2764
- */
2765
- declare function isInverseTableTab(tab: Tab): tab is InverseTableTab;
2766
- /**
2767
- * Check if a tab is a custom tab
2768
- */
2769
- declare function isCustomTab(tab: Tab): tab is CustomTab;
2770
- /**
2771
- * Check if a tab is an activity tab
2772
- */
2773
- declare function isActivityTab(tab: Tab): tab is ActivityTab;
2774
- /**
2775
- * Check if a tab is a notes tab
2776
- */
2777
- declare function isNotesTab(tab: Tab): tab is NotesTab;
2778
-
2779
2797
  /**
2780
2798
  * Registry for native objects defined in code
2781
2799
  * Native objects are system objects that cannot be deleted/modified by clients
@@ -2981,6 +2999,31 @@ declare class ViewRegistry {
2981
2999
  */
2982
3000
  declare const viewRegistry: ViewRegistry;
2983
3001
 
3002
+ /**
3003
+ * Validation messages for Zod validators.
3004
+ * All functions receive the full Attribute to access label, type, etc.
3005
+ * Can be customized for i18n support.
3006
+ */
3007
+ interface ValidationMessages {
3008
+ required: (attr: Attribute) => string;
3009
+ invalidType: (attr: Attribute, expected: string) => string;
3010
+ minLength: (attr: Attribute, min: number) => string;
3011
+ maxLength: (attr: Attribute, max: number) => string;
3012
+ invalidPattern: (attr: Attribute) => string;
3013
+ minValue: (attr: Attribute, min: number) => string;
3014
+ maxValue: (attr: Attribute, max: number) => string;
3015
+ mustBeInteger: (attr: Attribute) => string;
3016
+ invalidDate: (attr: Attribute) => string;
3017
+ invalidOption: (attr: Attribute, options: string[]) => string;
3018
+ invalidId: (attr: Attribute) => string;
3019
+ minItems: (attr: Attribute, min: number) => string;
3020
+ maxItems: (attr: Attribute, max: number) => string;
3021
+ invalidRichtext: (attr: Attribute) => string;
3022
+ invalidPhone: (attr: Attribute) => string;
3023
+ invalidCurrency: (attr: Attribute) => string;
3024
+ invalidLocation: (attr: Attribute) => string;
3025
+ }
3026
+ declare const DEFAULT_VALIDATION_MESSAGES: ValidationMessages;
2984
3027
  /**
2985
3028
  * Text attribute config schema
2986
3029
  */
@@ -3385,9 +3428,9 @@ declare const rollupConfigSchema: z.ZodObject<{
3385
3428
  countEmpty: "countEmpty";
3386
3429
  percentEmpty: "percentEmpty";
3387
3430
  percentNotEmpty: "percentNotEmpty";
3431
+ original: "original";
3388
3432
  }>;
3389
3433
  decimals: z.ZodOptional<z.ZodNumber>;
3390
- showAsOriginal: z.ZodOptional<z.ZodBoolean>;
3391
3434
  targetAttributeType: z.ZodOptional<z.ZodString>;
3392
3435
  targetAttributeOptions: z.ZodOptional<z.ZodArray<z.ZodObject<{
3393
3436
  id: z.ZodString;
@@ -3434,45 +3477,45 @@ declare function safeParseAttributeConfig(type: AttributeType, config: Record<st
3434
3477
  /**
3435
3478
  * Create a Zod schema for a text attribute
3436
3479
  */
3437
- declare function createTextValidator(attr: TextAttribute): z.ZodString;
3480
+ declare function createTextValidator(attr: TextAttribute, messages?: ValidationMessages): z.ZodString;
3438
3481
  /**
3439
3482
  * Create a Zod schema for a number attribute
3440
3483
  */
3441
- declare function createNumberValidator(attr: NumberAttribute): z.ZodNumber;
3484
+ declare function createNumberValidator(attr: NumberAttribute, messages?: ValidationMessages): z.ZodNumber;
3442
3485
  /**
3443
3486
  * Create a Zod schema for a checkbox attribute
3444
3487
  */
3445
- declare function createCheckboxValidator(_attr: CheckboxAttribute): z.ZodBoolean;
3488
+ declare function createCheckboxValidator(_attr: CheckboxAttribute, _messages?: ValidationMessages): z.ZodBoolean;
3446
3489
  /**
3447
3490
  * Create a Zod schema for a date attribute
3448
3491
  */
3449
- declare function createDateValidator(attr: DateAttribute): z.ZodCoercedDate<unknown>;
3492
+ declare function createDateValidator(attr: DateAttribute, messages?: ValidationMessages): z.ZodTypeAny;
3450
3493
  /**
3451
3494
  * Create a Zod schema for a phone attribute
3452
3495
  */
3453
- declare function createPhoneValidator(_attr: PhoneAttribute): z.ZodType<{
3496
+ declare function createPhoneValidator(attr: PhoneAttribute, messages?: ValidationMessages): z.ZodType<{
3454
3497
  countryCode: string;
3455
3498
  phoneNumber: string;
3456
3499
  }>;
3457
3500
  /**
3458
3501
  * Create a Zod schema for a currency attribute
3459
3502
  */
3460
- declare function createCurrencyValidator(_attr: CurrencyAttribute): z.ZodType<{
3503
+ declare function createCurrencyValidator(attr: CurrencyAttribute, messages?: ValidationMessages): z.ZodType<{
3461
3504
  code: string;
3462
3505
  value: number;
3463
3506
  }>;
3464
3507
  /**
3465
3508
  * Create a Zod schema for a status attribute
3466
3509
  */
3467
- declare function createStatusValidator(attr: StatusAttribute): z.ZodEnum<Readonly<Record<string, string>>>;
3510
+ declare function createStatusValidator(attr: StatusAttribute, messages?: ValidationMessages): z.ZodEnum<Readonly<Record<string, string>>>;
3468
3511
  /**
3469
3512
  * Create a Zod schema for a select attribute
3470
3513
  */
3471
- declare function createSelectValidator(attr: SelectAttribute): z.ZodEnum<Readonly<Record<string, string>>>;
3514
+ declare function createSelectValidator(attr: SelectAttribute, messages?: ValidationMessages): z.ZodEnum<Readonly<Record<string, string>>>;
3472
3515
  /**
3473
3516
  * Create a Zod schema for a multiselect attribute
3474
3517
  */
3475
- declare function createMultiselectValidator(attr: MultiselectAttribute): z.ZodArray<z.ZodEnum<Readonly<Record<string, string>>>>;
3518
+ declare function createMultiselectValidator(attr: MultiselectAttribute, messages?: ValidationMessages): z.ZodArray<z.ZodEnum<Readonly<Record<string, string>>>>;
3476
3519
  /**
3477
3520
  * Create a Zod schema for a location attribute
3478
3521
  */
@@ -3486,51 +3529,51 @@ type LocationShape = {
3486
3529
  latitude?: number;
3487
3530
  longitude?: number;
3488
3531
  };
3489
- declare function createLocationValidator(_attr: LocationAttribute): z.ZodType<LocationShape>;
3532
+ declare function createLocationValidator(attr: LocationAttribute, messages?: ValidationMessages): z.ZodType<LocationShape>;
3490
3533
  /**
3491
3534
  * Create a Zod schema for a file attribute
3492
3535
  * Supports both single file (UUID) and multiple files (array of UUIDs)
3493
3536
  */
3494
- declare function createFileValidator(attr: FileAttribute): z.ZodTypeAny;
3537
+ declare function createFileValidator(attr: FileAttribute, messages?: ValidationMessages): z.ZodTypeAny;
3495
3538
  /**
3496
3539
  * Create a Zod schema for a user attribute
3497
3540
  * Supports both single user (UUID) and multiple users (array of UUIDs)
3498
3541
  */
3499
- declare function createUserValidator(attr: UserAttribute): z.ZodTypeAny;
3542
+ declare function createUserValidator(attr: UserAttribute, messages?: ValidationMessages): z.ZodTypeAny;
3500
3543
  /**
3501
3544
  * Create a Zod schema for a single relation attribute (cardinality: "one")
3502
3545
  */
3503
- declare function createSingleRelationValidator(attr: SingleRelationAttribute): z.ZodUnion<[z.ZodUUID, z.ZodNull]>;
3546
+ declare function createSingleRelationValidator(attr: SingleRelationAttribute, messages?: ValidationMessages): z.ZodUnion<[z.ZodUUID, z.ZodNull]>;
3504
3547
  /**
3505
3548
  * Create a Zod schema for a multi relation attribute (cardinality: "many")
3506
3549
  */
3507
- declare function createMultiRelationValidator(attr: MultiRelationAttribute): z.ZodArray<z.ZodUUID>;
3550
+ declare function createMultiRelationValidator(attr: MultiRelationAttribute, messages?: ValidationMessages): z.ZodArray<z.ZodUUID>;
3508
3551
  /**
3509
3552
  * Create a Zod schema for a relation attribute
3510
3553
  * Dispatches to single or multi validator based on cardinality
3511
3554
  */
3512
- declare function createRelationValidator(attr: RelationAttribute): z.ZodUnion<[z.ZodUUID, z.ZodNull]> | z.ZodArray<z.ZodUUID>;
3555
+ declare function createRelationValidator(attr: RelationAttribute, messages?: ValidationMessages): z.ZodUnion<[z.ZodUUID, z.ZodNull]> | z.ZodArray<z.ZodUUID>;
3513
3556
  /**
3514
3557
  * Create a Zod schema for a rating attribute
3515
3558
  */
3516
- declare function createRatingValidator(attr: RatingAttribute): z.ZodNumber;
3559
+ declare function createRatingValidator(attr: RatingAttribute, messages?: ValidationMessages): z.ZodNumber;
3517
3560
  /**
3518
3561
  * Create a Zod schema for a formula attribute.
3519
3562
  * Formula attributes are read-only (computed at runtime).
3520
3563
  * They accept any value during validation but are ignored during record creation/update.
3521
3564
  */
3522
- declare function createFormulaValidator(_attr: FormulaAttribute): z.ZodUnknown;
3565
+ declare function createFormulaValidator(_attr: FormulaAttribute, _messages?: ValidationMessages): z.ZodUnknown;
3523
3566
  /**
3524
3567
  * Create a Zod schema for a rollup attribute.
3525
3568
  * Rollup attributes are read-only (computed from related records).
3526
3569
  * They accept any value during validation but are ignored during record creation/update.
3527
3570
  */
3528
- declare function createRollupValidator(_attr: RollupAttribute): z.ZodUnknown;
3571
+ declare function createRollupValidator(_attr: RollupAttribute, _messages?: ValidationMessages): z.ZodUnknown;
3529
3572
  /**
3530
3573
  * Create a Zod schema for a textarea attribute.
3531
3574
  * Validates that the value is a string.
3532
3575
  */
3533
- declare function createTextAreaValidator(_attr: TextAreaAttribute): z.ZodString;
3576
+ declare function createTextAreaValidator(_attr: TextAreaAttribute, _messages?: ValidationMessages): z.ZodString;
3534
3577
  /**
3535
3578
  * Create a Zod schema for a richtext attribute.
3536
3579
  * Validates BlockNote content structure with strict block validation.
@@ -3548,11 +3591,27 @@ declare function createTextAreaValidator(_attr: TextAreaAttribute): z.ZodString;
3548
3591
  * ]
3549
3592
  * ```
3550
3593
  */
3551
- declare function createRichtextValidator(attr: RichtextAttribute): z.ZodTypeAny;
3594
+ declare function createRichtextValidator(attr: RichtextAttribute, messages?: ValidationMessages): z.ZodTypeAny;
3552
3595
  /**
3553
- * Create a Zod schema for any attribute type
3596
+ * Create a Zod schema for any attribute type.
3597
+ * Returns a strict validator that does NOT handle optional fields.
3598
+ * Use createFormAttributeValidator for form validation with optional support.
3599
+ *
3600
+ * @param attr - The attribute to create a validator for
3601
+ * @param messages - Custom validation messages for i18n support
3554
3602
  */
3555
- declare function createAttributeValidator(attr: Attribute): z.ZodTypeAny;
3603
+ declare function createAttributeValidator(attr: Attribute, messages?: ValidationMessages): z.ZodTypeAny;
3604
+ /**
3605
+ * Create a Zod schema for form validation.
3606
+ * - Uses nullish() for optional fields (accepts null and undefined)
3607
+ * - Accepts custom messages for i18n support
3608
+ *
3609
+ * Use this in UI forms where optional fields may have null/undefined values.
3610
+ *
3611
+ * @param attr - The attribute to create a validator for
3612
+ * @param messages - Custom validation messages for i18n support
3613
+ */
3614
+ declare function createFormAttributeValidator(attr: Attribute, messages?: ValidationMessages): z.ZodTypeAny;
3556
3615
  /**
3557
3616
  * Create a Zod schema for an entire object
3558
3617
  *
@@ -7837,6 +7896,8 @@ interface CreateViewInput {
7837
7896
  objectName: string;
7838
7897
  description?: string;
7839
7898
  icon?: IconName;
7899
+ /** Layout mode: "page" (full tabs) or "modal" (single form) */
7900
+ layout?: ViewLayout;
7840
7901
  tabs?: Tab[];
7841
7902
  default?: boolean;
7842
7903
  metadata?: Record<string, unknown>;
@@ -7848,6 +7909,8 @@ interface UpdateViewInput {
7848
7909
  label?: string;
7849
7910
  description?: string;
7850
7911
  icon?: IconName;
7912
+ /** Layout mode: "page" (full tabs) or "modal" (single form) */
7913
+ layout?: ViewLayout;
7851
7914
  tabs?: Tab[];
7852
7915
  default?: boolean;
7853
7916
  metadata?: Record<string, unknown>;
@@ -7882,14 +7945,15 @@ declare class ViewService extends TenantAwareService {
7882
7945
  * Get the default view for an object
7883
7946
  *
7884
7947
  * Priority:
7885
- * 1. Custom view marked as default
7886
- * 2. Native view marked as default
7887
- * 3. First available view
7948
+ * 1. Custom view marked as default (for the specified layout)
7949
+ * 2. Native view marked as default (for the specified layout)
7950
+ * 3. First available view (for the specified layout)
7888
7951
  *
7889
7952
  * @param objectName - Object name
7953
+ * @param layout - Optional layout filter ("page" or "modal")
7890
7954
  * @returns Default view or null
7891
7955
  */
7892
- getDefaultView(objectName: string): Promise<ViewDefinition | null>;
7956
+ getDefaultView(objectName: string, layout?: ViewLayout): Promise<ViewDefinition | null>;
7893
7957
  /**
7894
7958
  * Create a custom view.
7895
7959
  * Automatically uses tenant context from AsyncLocalStorage.
@@ -7913,7 +7977,8 @@ declare class ViewService extends TenantAwareService {
7913
7977
  */
7914
7978
  deleteView(viewId: string): Promise<void>;
7915
7979
  /**
7916
- * Set a view as default for its object.
7980
+ * Set a view as default for its object and layout.
7981
+ * Only unsets other defaults for the same layout.
7917
7982
  * Automatically uses tenant context from AsyncLocalStorage.
7918
7983
  *
7919
7984
  * @param viewId - View ID
@@ -7924,6 +7989,11 @@ declare class ViewService extends TenantAwareService {
7924
7989
  * Validate view name format (kebab-case)
7925
7990
  */
7926
7991
  private validateViewName;
7992
+ /**
7993
+ * Validate modal layout constraints.
7994
+ * Modal views must have exactly one form tab.
7995
+ */
7996
+ private validateModalLayout;
7927
7997
  /**
7928
7998
  * Convert database view to ViewDefinition
7929
7999
  */
@@ -8208,4 +8278,4 @@ declare function extractAttributeNames(template: string): string[];
8208
8278
  */
8209
8279
  declare function enrichValuesWithSelectLabels(values: Record<string, unknown>, attributes: Attribute[]): Record<string, unknown>;
8210
8280
 
8211
- export { type Location as $, type Attribute as A, type DirectTableTab as B, type CheckboxAttribute as C, type DateAttribute as D, type BlockNoteContent as E, type FileAttribute as F, type Group as G, type AttributeType as H, type InferAttributeValue as I, type StatusGroup as J, type AttributeGroup as K, type LocationAttribute as L, type MultiselectAttribute as M, type NumberAttribute as N, type ObjectAction as O, type PhoneAttribute as P, type BaseAttribute as Q, type RichtextAttribute as R, type SystemResource as S, type TextAttribute as T, type UserAttribute as U, type ViewDefinition as V, type NumberUnit as W, type DateFormat as X, type DateValue as Y, type Phone as Z, type Currency as _, type SystemAction as a, type FlowStatus as a$, type LocationGranularity as a0, RELATION_TARGET_ANY as a1, type RelationAttribute as a2, isUniversalRelation as a3, type BlockNoteBlock as a4, type BlockNoteCustomInlineContent as a5, type BlockNoteDefaultProps as a6, type BlockNoteInlineContent as a7, type BlockNoteLink as a8, type BlockNoteStyledText as a9, type CheckboxFilterOperator as aA, type DateFilterOperator as aB, type SelectFilterOperator as aC, type MultiselectFilterOperator as aD, type RelationFilterOperator as aE, type FilterOperator as aF, type RelativeDateValue as aG, type CurrencyFilterValue as aH, type PhoneFilterValue as aI, type FilterValue as aJ, type FilterRule as aK, type ExtendedFilterRule as aL, type FilterCombinator as aM, type FilterGroup as aN, type AdvancedFilterState as aO, isAdvancedFilterState as aP, toAdvancedFilterState as aQ, toSimpleFilterState as aR, type SortDirection as aS, type QueryState as aT, OPERATORS_BY_TYPE as aU, type NoValueOperator as aV, NO_VALUE_OPERATORS as aW, isNoValueOperator as aX, type FlowSlot as aY, type FlowRowField as aZ, type FlowRelation as a_, type BlockNoteStyles as aa, type BlockNoteTableCell as ab, type BlockNoteTableCellProps as ac, type BlockNoteTableContent as ad, type PartialBlockNoteBlock as ae, type PartialBlockNoteContent as af, type PartialBlockNoteInlineContent as ag, type PartialBlockNoteLink as ah, type PartialBlockNoteStyledText as ai, type PartialBlockNoteTableCell as aj, type PartialBlockNoteTableContent as ak, type AuditResourceType as al, type AuditAction as am, type AuditActorType as an, type AuditChange as ao, type AuditLogEntry as ap, type CreateAuditLogInput as aq, type AuditListOptions as ar, type AuditServiceOptions as as, type StorageProvider as at, type FileVisibility as au, type File as av, type CreateFile as aw, type UpdateFile as ax, type TextFilterOperator as ay, type NumberFilterOperator as az, type TextAreaAttribute as b, isTableTab as b$, isFlowDefinition as b0, isFlowPublished as b1, isSystemFlow as b2, type GeocodingSuggestion as b3, type GeocodingAutocompleteParams as b4, type ReverseGeocodingParams as b5, type GeocodingParams as b6, type GeocodingAdapter as b7, NoopGeocodingAdapter as b8, type AttributeSchema as b9, type ObjectRecord as bA, type PermissionScope as bB, type Role as bC, type Permission as bD, type UserRoleAssignment as bE, type EffectivePermissions as bF, type ObjectPermissions as bG, type SystemPermissions as bH, type CreateRoleInput as bI, type UpdateRoleInput as bJ, type CreatePermissionInput as bK, type AssignRoleInput as bL, type PolicyContext as bM, type RecordPolicy as bN, PolicyViolationError as bO, type UserRole as bP, type UserStatus as bQ, type UserProfile as bR, type CreateUserProfile as bS, type UpdateUserProfile as bT, type InviteUserInput as bU, type TabType as bV, type FormTab as bW, type CustomTab as bX, type ActivityTab as bY, type NotesTab as bZ, isFormTab as b_, type InferRecordFromSchema as ba, type InferRecordWithRequirements as bb, type TypedAttribute as bc, type AttributeMap as bd, type AddAttribute as be, type InferRecord as bf, type InferRecordInput as bg, type InferRecordUpdate as bh, type CustomAttributeValue as bi, type WithCustomAttributes as bj, type RecordMetadata as bk, type SystemFields as bl, type ExtractRecord as bm, type ExtractRecordStrict as bn, type ExtractRecordInput as bo, type ExtractRecordInputStrict as bp, type ExtractRecordUpdate as bq, type ExtractRecordUpdateStrict as br, type ExtractAttributes as bs, RESERVED_ATTRIBUTE_NAMES as bt, SYSTEM_FIELD_NAMES as bu, type ReservedAttributeName as bv, type SystemFieldName as bw, type Timestamps as bx, type ObjectAttribute as by, type CompletionStatus as bz, type RichtextFeature as c, createDraftValidator as c$, isDirectTableTab as c0, isInverseTableTab as c1, isCustomTab as c2, isActivityTab as c3, isNotesTab as c4, type Uuid as c5, type TenantId as c6, type UserId as c7, asTenantId as c8, asUserId as c9, safeParseAttributeConfig as cA, createTextValidator as cB, createNumberValidator as cC, createCheckboxValidator as cD, createDateValidator as cE, createPhoneValidator as cF, createCurrencyValidator as cG, createStatusValidator as cH, createSelectValidator as cI, createMultiselectValidator as cJ, createLocationValidator as cK, createFileValidator as cL, createUserValidator as cM, createSingleRelationValidator as cN, createMultiRelationValidator as cO, createRelationValidator as cP, createRatingValidator as cQ, createFormulaValidator as cR, createRollupValidator as cS, createTextAreaValidator as cT, createRichtextValidator as cU, createAttributeValidator as cV, createObjectValidator as cW, type ValidationResult as cX, validateAttribute as cY, validateObject as cZ, validateObjectOrThrow as c_, generateId as ca, generatePrefixedId as cb, registry as cc, viewRegistry as cd, textConfigSchema as ce, textareaConfigSchema as cf, richtextConfigSchema as cg, numberConfigSchema as ch, checkboxConfigSchema as ci, dateConfigSchema as cj, phoneConfigSchema as ck, currencyConfigSchema as cl, statusConfigSchema as cm, locationConfigSchema as cn, selectConfigSchema as co, multiselectConfigSchema as cp, fileConfigSchema as cq, userConfigSchema as cr, relationConfigSchema as cs, ratingConfigSchema as ct, formulaConfigSchema as cu, rollupConfigSchema as cv, attributeConfigSchemas as cw, getAttributeConfigSchema as cx, validateAttributeConfig as cy, parseAttributeConfig as cz, type CurrencyAttribute as d, type HookContext as d$, validateDraft as d0, validateDraftOrThrow as d1, getMissingRequiredAttributes as d2, isRecordComplete as d3, computeRecordStatus as d4, type DatabaseAdapter as d5, type FetchResult as d6, type FormattedRecord as d7, type GroupedFetchResult as d8, type InsertOptions as d9, evaluateFormulaWithResult as dA, extractFormulaVariables as dB, extractRelationNames as dC, extractRelationReferences as dD, flattenRelationsForEval as dE, formatFormulaResult as dF, hasRelationReferences as dG, validateFormulaExpression as dH, type FormulaResult as dI, getPathDepth as dJ, getRelationPath as dK, getTargetAttributeName as dL, InvalidPathError as dM, MaxDepthExceededError as dN, parsePath as dO, pathHasManyCardinality as dP, validatePath as dQ, type PathCardinality as dR, type PathSegment as dS, type PathSegmentType as dT, type SchemaResolver as dU, resolveMultiplePaths as dV, resolveSingleValue as dW, traversePath as dX, type TraversalOptions as dY, type TraversalResult as dZ, type AttributeChange as d_, type QueryBuilderState as da, type RegistryMap as db, type RegistryObjectNames as dc, type ShortcutOperator as dd, createDefaultState as de, formatRecord as df, formatRecords as dg, QueryMultipleResultsError as dh, QueryNoResultError as di, SHORTCUT_TO_FILTER_OPERATOR as dj, createQueryBuilder as dk, QueryBuilder as dl, type QueryBuilderOptions as dm, TenantContextError as dn, getContext as dp, getTenantId as dq, getUserId as dr, hasContext as ds, runWithContext as dt, withTenantContext as du, type TenantContext as dv, evaluateFormula as dw, evaluateFormulaAttribute as dx, evaluateFormulaAttributeWithRelations as dy, evaluateFormulaWithRelations as dz, type Option as e, type UploadFileInput as e$, type HookDefinition as e0, type HookHandler as e1, type HookType as e2, NoopHookRegistry as e3, type HookRegistry as e4, createMockAdapter as e5, defaultPolicyRegistry as e6, PolicyRegistry as e7, notesPolicy as e8, type ObjectsRepository as e9, type RecordServiceOptions as eA, RecordService as eB, type RelationValidationResult as eC, type RelationValidationError as eD, type RelationOption as eE, type RelationOptionsResponse as eF, type GetRelationOptionsParams as eG, RelationService as eH, type ResolvedRelations as eI, RelationResolverService as eJ, type RollupResult as eK, RollupService as eL, type RollupSchedulerOptions as eM, RollupScheduler as eN, type UserProfileServiceOptions as eO, UserProfileService as eP, type UserValidationResult as eQ, type UserValidationError as eR, UserService as eS, type CreateViewInput as eT, type UpdateViewInput as eU, ViewService as eV, type FileContent as eW, type StorageUploadInput as eX, type StorageUploadResult as eY, type SignedUrlOptions as eZ, type StorageAdapter as e_, type AttributesRepository as ea, type UserProfilesRepository as eb, type FilesRepository as ec, type ObjectRecordsRepository as ed, type ViewsRepository as ee, type FlowsRepository as ef, type AuditRepository as eg, type PermissionsRepository as eh, buildAuditChanges as ei, AuditService as ej, TenantAwareService as ek, TenantAwareRepository as el, type FileServiceOptions as em, FileService as en, type CreateFlowInput as eo, type UpdateFlowInput as ep, FlowService as eq, GeocodingService as er, GlobalSearchService as es, type CreateCustomObjectInput as et, type AddAttributeInput as eu, type UpdateObjectInput as ev, type ObjectSchemaServiceOptions as ew, ObjectSchemaService as ex, type PermissionServiceOptions as ey, PermissionService as ez, type StatusAttribute as f, type SyncResult as f0, type SyncOptions as f1, syncNativeObjects as f2, verifyNativeObjectsSync as f3, getSyncPreview as f4, type FullSyncResult as f5, type FullSyncOptions as f6, syncAll as f7, DEFAULT_LABEL_FALLBACK as f8, renderLabelExpression as f9, type ViewSyncOptions as fA, syncNativeViews as fB, verifyNativeViewsSync as fC, getViewSyncPreview as fD, isLabelExpression as fa, extractAttributeNames as fb, enrichValuesWithSelectLabels as fc, type DBObject as fd, type CreateDBObject as fe, type UpdateDBObject as ff, type UpsertDBObject as fg, type DBAttribute as fh, type CreateDBAttribute as fi, type UpdateDBAttribute as fj, type UpsertDBAttribute as fk, type CreateObjectRecord as fl, type ListOptions as fm, type SearchOptions as fn, type GlobalSearchOptions as fo, type GlobalSearchResultItem as fp, type FileListOptions as fq, type DBView as fr, type CreateDBView as fs, type UpdateDBView as ft, type UpsertDBView as fu, type DBFlow as fv, type CreateDBFlow as fw, type UpdateDBFlow as fx, type OperationResult as fy, type ViewSyncResult as fz, type SelectAttribute as g, type SingleRelationAttribute as h, type MultiRelationAttribute as i, type RelationTarget as j, type RatingAttribute as k, type FormulaAttribute as l, type FormulaReturnType as m, type RollupAttribute as n, type RollupFunction as o, type FlowDefinition as p, type FlowPage as q, type FlowRow as r, type ObjectDefinition as s, type Field as t, type AttributeGroupField as u, type TableTab as v, type InverseTableTab as w, type Tab as x, type FilterState as y, type SortRule as z };
8281
+ export { type Currency as $, type Attribute as A, type FilterState as B, type CheckboxAttribute as C, type DateAttribute as D, type SortRule as E, type FileAttribute as F, type Group as G, type DirectTableTab as H, type InferAttributeValue as I, type BlockNoteContent as J, type StatusGroup as K, type LocationAttribute as L, type MultiselectAttribute as M, type NumberAttribute as N, type ObjectAction as O, type PhoneAttribute as P, type AttributeGroup as Q, type RichtextAttribute as R, type SystemResource as S, type TextAttribute as T, type UserAttribute as U, type ViewLayout as V, type BaseAttribute as W, type NumberUnit as X, type DateFormat as Y, type DateValue as Z, type Phone as _, type SystemAction as a, type FlowRelation as a$, type Location as a0, type LocationGranularity as a1, RELATION_TARGET_ANY as a2, type RelationAttribute as a3, isUniversalRelation as a4, type BlockNoteBlock as a5, type BlockNoteCustomInlineContent as a6, type BlockNoteDefaultProps as a7, type BlockNoteInlineContent as a8, type BlockNoteLink as a9, type NumberFilterOperator as aA, type CheckboxFilterOperator as aB, type DateFilterOperator as aC, type SelectFilterOperator as aD, type MultiselectFilterOperator as aE, type RelationFilterOperator as aF, type FilterOperator as aG, type RelativeDateValue as aH, type CurrencyFilterValue as aI, type PhoneFilterValue as aJ, type FilterValue as aK, type FilterRule as aL, type ExtendedFilterRule as aM, type FilterCombinator as aN, type FilterGroup as aO, type AdvancedFilterState as aP, isAdvancedFilterState as aQ, toAdvancedFilterState as aR, toSimpleFilterState as aS, type SortDirection as aT, type QueryState as aU, OPERATORS_BY_TYPE as aV, type NoValueOperator as aW, NO_VALUE_OPERATORS as aX, isNoValueOperator as aY, type FlowSlot as aZ, type FlowRowField as a_, type BlockNoteStyledText as aa, type BlockNoteStyles as ab, type BlockNoteTableCell as ac, type BlockNoteTableCellProps as ad, type BlockNoteTableContent as ae, type PartialBlockNoteBlock as af, type PartialBlockNoteContent as ag, type PartialBlockNoteInlineContent as ah, type PartialBlockNoteLink as ai, type PartialBlockNoteStyledText as aj, type PartialBlockNoteTableCell as ak, type PartialBlockNoteTableContent as al, type AuditResourceType as am, type AuditAction as an, type AuditActorType as ao, type AuditChange as ap, type AuditLogEntry as aq, type CreateAuditLogInput as ar, type AuditListOptions as as, type AuditServiceOptions as at, type StorageProvider as au, type FileVisibility as av, type File as aw, type CreateFile as ax, type UpdateFile as ay, type TextFilterOperator as az, type TextAreaAttribute as b, isFormTab as b$, type FlowStatus as b0, isFlowDefinition as b1, isFlowPublished as b2, isSystemFlow as b3, type GeocodingSuggestion as b4, type GeocodingAutocompleteParams as b5, type ReverseGeocodingParams as b6, type GeocodingParams as b7, type GeocodingAdapter as b8, NoopGeocodingAdapter as b9, type CompletionStatus as bA, type ObjectRecord as bB, type PermissionScope as bC, type Role as bD, type Permission as bE, type UserRoleAssignment as bF, type EffectivePermissions as bG, type ObjectPermissions as bH, type SystemPermissions as bI, type CreateRoleInput as bJ, type UpdateRoleInput as bK, type CreatePermissionInput as bL, type AssignRoleInput as bM, type PolicyContext as bN, type RecordPolicy as bO, PolicyViolationError as bP, type UserRole as bQ, type UserStatus as bR, type UserProfile as bS, type CreateUserProfile as bT, type UpdateUserProfile as bU, type InviteUserInput as bV, type TabType as bW, type FormTab as bX, type CustomTab as bY, type ActivityTab as bZ, type NotesTab as b_, type AttributeSchema as ba, type InferRecordFromSchema as bb, type InferRecordWithRequirements as bc, type TypedAttribute as bd, type AttributeMap as be, type AddAttribute as bf, type InferRecord as bg, type InferRecordInput as bh, type InferRecordUpdate as bi, type CustomAttributeValue as bj, type WithCustomAttributes as bk, type RecordMetadata as bl, type SystemFields as bm, type ExtractRecord as bn, type ExtractRecordStrict as bo, type ExtractRecordInput as bp, type ExtractRecordInputStrict as bq, type ExtractRecordUpdate as br, type ExtractRecordUpdateStrict as bs, type ExtractAttributes as bt, RESERVED_ATTRIBUTE_NAMES as bu, SYSTEM_FIELD_NAMES as bv, type ReservedAttributeName as bw, type SystemFieldName as bx, type Timestamps as by, type ObjectAttribute as bz, type RichtextFeature as c, type ValidationResult as c$, isTableTab as c0, isDirectTableTab as c1, isInverseTableTab as c2, isCustomTab as c3, isActivityTab as c4, isNotesTab as c5, type Uuid as c6, type TenantId as c7, type UserId as c8, asTenantId as c9, getAttributeConfigSchema as cA, validateAttributeConfig as cB, parseAttributeConfig as cC, safeParseAttributeConfig as cD, createTextValidator as cE, createNumberValidator as cF, createCheckboxValidator as cG, createDateValidator as cH, createPhoneValidator as cI, createCurrencyValidator as cJ, createStatusValidator as cK, createSelectValidator as cL, createMultiselectValidator as cM, createLocationValidator as cN, createFileValidator as cO, createUserValidator as cP, createSingleRelationValidator as cQ, createMultiRelationValidator as cR, createRelationValidator as cS, createRatingValidator as cT, createFormulaValidator as cU, createRollupValidator as cV, createTextAreaValidator as cW, createRichtextValidator as cX, createAttributeValidator as cY, createFormAttributeValidator as cZ, createObjectValidator as c_, asUserId as ca, generateId as cb, generatePrefixedId as cc, registry as cd, viewRegistry as ce, type ValidationMessages as cf, DEFAULT_VALIDATION_MESSAGES as cg, textConfigSchema as ch, textareaConfigSchema as ci, richtextConfigSchema as cj, numberConfigSchema as ck, checkboxConfigSchema as cl, dateConfigSchema as cm, phoneConfigSchema as cn, currencyConfigSchema as co, statusConfigSchema as cp, locationConfigSchema as cq, selectConfigSchema as cr, multiselectConfigSchema as cs, fileConfigSchema as ct, userConfigSchema as cu, relationConfigSchema as cv, ratingConfigSchema as cw, formulaConfigSchema as cx, rollupConfigSchema as cy, attributeConfigSchemas as cz, type CurrencyAttribute as d, traversePath as d$, validateAttribute as d0, validateObject as d1, validateObjectOrThrow as d2, createDraftValidator as d3, validateDraft as d4, validateDraftOrThrow as d5, getMissingRequiredAttributes as d6, isRecordComplete as d7, computeRecordStatus as d8, type DatabaseAdapter as d9, evaluateFormula as dA, evaluateFormulaAttribute as dB, evaluateFormulaAttributeWithRelations as dC, evaluateFormulaWithRelations as dD, evaluateFormulaWithResult as dE, extractFormulaVariables as dF, extractRelationNames as dG, extractRelationReferences as dH, flattenRelationsForEval as dI, formatFormulaResult as dJ, hasRelationReferences as dK, validateFormulaExpression as dL, type FormulaResult as dM, getPathDepth as dN, getRelationPath as dO, getTargetAttributeName as dP, InvalidPathError as dQ, MaxDepthExceededError as dR, parsePath as dS, pathHasManyCardinality as dT, validatePath as dU, type PathCardinality as dV, type PathSegment as dW, type PathSegmentType as dX, type SchemaResolver as dY, resolveMultiplePaths as dZ, resolveSingleValue as d_, type FetchResult as da, type FormattedRecord as db, type GroupedFetchResult as dc, type InsertOptions as dd, type QueryBuilderState as de, type RegistryMap as df, type RegistryObjectNames as dg, type ShortcutOperator as dh, createDefaultState as di, formatRecord as dj, formatRecords as dk, QueryMultipleResultsError as dl, QueryNoResultError as dm, SHORTCUT_TO_FILTER_OPERATOR as dn, createQueryBuilder as dp, QueryBuilder as dq, type QueryBuilderOptions as dr, TenantContextError as ds, getContext as dt, getTenantId as du, getUserId as dv, hasContext as dw, runWithContext as dx, withTenantContext as dy, type TenantContext as dz, type Option as e, type StorageUploadInput as e$, type TraversalOptions as e0, type TraversalResult as e1, type AttributeChange as e2, type HookContext as e3, type HookDefinition as e4, type HookHandler as e5, type HookType as e6, NoopHookRegistry as e7, type HookRegistry as e8, createMockAdapter as e9, type ObjectSchemaServiceOptions as eA, ObjectSchemaService as eB, type PermissionServiceOptions as eC, PermissionService as eD, type RecordServiceOptions as eE, RecordService as eF, type RelationValidationResult as eG, type RelationValidationError as eH, type RelationOption as eI, type RelationOptionsResponse as eJ, type GetRelationOptionsParams as eK, RelationService as eL, type ResolvedRelations as eM, RelationResolverService as eN, type RollupResult as eO, RollupService as eP, type RollupSchedulerOptions as eQ, RollupScheduler as eR, type UserProfileServiceOptions as eS, UserProfileService as eT, type UserValidationResult as eU, type UserValidationError as eV, UserService as eW, type CreateViewInput as eX, type UpdateViewInput as eY, ViewService as eZ, type FileContent as e_, defaultPolicyRegistry as ea, PolicyRegistry as eb, notesPolicy as ec, type ObjectsRepository as ed, type AttributesRepository as ee, type UserProfilesRepository as ef, type FilesRepository as eg, type ObjectRecordsRepository as eh, type ViewsRepository as ei, type FlowsRepository as ej, type AuditRepository as ek, type PermissionsRepository as el, buildAuditChanges as em, AuditService as en, TenantAwareService as eo, TenantAwareRepository as ep, type FileServiceOptions as eq, FileService as er, type CreateFlowInput as es, type UpdateFlowInput as et, FlowService as eu, GeocodingService as ev, GlobalSearchService as ew, type CreateCustomObjectInput as ex, type AddAttributeInput as ey, type UpdateObjectInput as ez, type StatusAttribute as f, type StorageUploadResult as f0, type SignedUrlOptions as f1, type StorageAdapter as f2, type UploadFileInput as f3, type SyncResult as f4, type SyncOptions as f5, syncNativeObjects as f6, verifyNativeObjectsSync as f7, getSyncPreview as f8, type FullSyncResult as f9, type CreateDBFlow as fA, type UpdateDBFlow as fB, type OperationResult as fC, type ViewSyncResult as fD, type ViewSyncOptions as fE, syncNativeViews as fF, verifyNativeViewsSync as fG, getViewSyncPreview as fH, type FullSyncOptions as fa, syncAll as fb, DEFAULT_LABEL_FALLBACK as fc, renderLabelExpression as fd, isLabelExpression as fe, extractAttributeNames as ff, enrichValuesWithSelectLabels as fg, type DBObject as fh, type CreateDBObject as fi, type UpdateDBObject as fj, type UpsertDBObject as fk, type DBAttribute as fl, type CreateDBAttribute as fm, type UpdateDBAttribute as fn, type UpsertDBAttribute as fo, type CreateObjectRecord as fp, type ListOptions as fq, type SearchOptions as fr, type GlobalSearchOptions as fs, type GlobalSearchResultItem as ft, type FileListOptions as fu, type DBView as fv, type CreateDBView as fw, type UpdateDBView as fx, type UpsertDBView as fy, type DBFlow as fz, type SelectAttribute as g, type SingleRelationAttribute as h, type MultiRelationAttribute as i, type RelationTarget as j, type RatingAttribute as k, type FormulaAttribute as l, type FormulaReturnType as m, type RollupAttribute as n, type RollupFunction as o, type AttributeType as p, type FlowDefinition as q, type FlowPage as r, type FlowRow as s, type ObjectDefinition as t, type Field as u, type AttributeGroupField as v, type TableTab as w, type InverseTableTab as x, type ViewDefinition as y, type Tab as z };