@object-ui/i18n 17.2.0 → 17.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +1817 -1
  2. package/README.md +26 -13
  3. package/dist/index.d.ts +3 -1
  4. package/dist/index.js +14 -1
  5. package/dist/locales/ar.d.ts +550 -107
  6. package/dist/locales/ar.js +646 -156
  7. package/dist/locales/de.d.ts +550 -107
  8. package/dist/locales/de.js +661 -178
  9. package/dist/locales/en.d.ts +586 -143
  10. package/dist/locales/en.js +851 -143
  11. package/dist/locales/es.d.ts +550 -107
  12. package/dist/locales/es.js +647 -160
  13. package/dist/locales/fr.d.ts +550 -107
  14. package/dist/locales/fr.js +640 -155
  15. package/dist/locales/index.d.ts +5587 -1157
  16. package/dist/locales/ja.d.ts +550 -107
  17. package/dist/locales/ja.js +632 -149
  18. package/dist/locales/ko.d.ts +550 -107
  19. package/dist/locales/ko.js +638 -156
  20. package/dist/locales/pt.d.ts +550 -107
  21. package/dist/locales/pt.js +639 -157
  22. package/dist/locales/ru.d.ts +550 -107
  23. package/dist/locales/ru.js +650 -156
  24. package/dist/locales/zh.d.ts +588 -145
  25. package/dist/locales/zh.js +629 -145
  26. package/dist/pickLocalized.d.ts +21 -0
  27. package/dist/pickLocalized.js +40 -7
  28. package/dist/provider.d.ts +125 -1
  29. package/dist/provider.js +380 -4
  30. package/dist/useDisplayLocale.d.ts +49 -0
  31. package/dist/useDisplayLocale.js +55 -0
  32. package/dist/useObjectLabel.d.ts +8 -2
  33. package/dist/useObjectLabel.js +28 -8
  34. package/dist/useSafeTranslation.js +67 -3
  35. package/dist/utils/index.d.ts +1 -0
  36. package/dist/utils/index.js +1 -0
  37. package/dist/utils/number-display.d.ts +32 -0
  38. package/dist/utils/number-display.js +32 -0
  39. package/dist/utils/spec-formatters.d.ts +39 -13
  40. package/dist/utils/spec-formatters.js +3 -3
  41. package/package.json +5 -4
@@ -2,6 +2,16 @@
2
2
  * English (en) - Default language pack for Object UI
3
3
  */
4
4
  declare const en: {
5
+ readonly impersonation: {
6
+ readonly banner: {
7
+ readonly message: "You are impersonating {{user}} — every action is recorded as them.";
8
+ readonly startedBy: "Started by administrator {{admin}}.";
9
+ readonly stop: "Stop impersonating";
10
+ readonly stopping: "Stopping…";
11
+ readonly stopFailed: "Could not stop impersonating: {{reason}}";
12
+ readonly notRestored: "The server accepted the request but did not restore your administrator session — you are still impersonating {{user}}. Sign out and sign in again to end it.";
13
+ };
14
+ };
5
15
  readonly capability: {
6
16
  readonly group: {
7
17
  readonly platform: "Platform";
@@ -18,6 +28,23 @@ declare const en: {
18
28
  readonly studio_access: "Studio Access";
19
29
  };
20
30
  };
31
+ readonly perm: {
32
+ readonly facet: {
33
+ readonly none: "None";
34
+ readonly more: "+{{count}} more";
35
+ readonly objects: "{{count}} objects";
36
+ readonly objects_one: "{{count}} object";
37
+ readonly fields: "{{count}} field rules";
38
+ readonly fields_one: "{{count}} field rule";
39
+ readonly rls: "{{count}} RLS policies";
40
+ readonly rls_one: "{{count}} RLS policy";
41
+ readonly tabs: "{{count}} tab rules";
42
+ readonly tabs_one: "{{count}} tab rule";
43
+ readonly adminScope: "Delegated admin configured";
44
+ readonly designInStudio: "Design in Studio →";
45
+ readonly designInStudioHint: "Design in Studio";
46
+ };
47
+ };
21
48
  readonly lookup: {
22
49
  readonly recentlyUsed: "Recently used";
23
50
  readonly allResults: "All results";
@@ -46,13 +73,12 @@ declare const en: {
46
73
  readonly retry: "Retry";
47
74
  };
48
75
  readonly common: {
49
- readonly loading: "Loading...";
76
+ readonly loading: "Loading…";
50
77
  readonly save: "Save";
51
78
  readonly cancel: "Cancel";
52
79
  readonly delete: "Delete";
53
80
  readonly edit: "Edit";
54
81
  readonly create: "Create";
55
- readonly search: "Search";
56
82
  readonly filter: "Filter";
57
83
  readonly reset: "Reset";
58
84
  readonly confirm: "Confirm";
@@ -78,11 +104,20 @@ declare const en: {
78
104
  readonly required: "Required";
79
105
  readonly optional: "Optional";
80
106
  readonly selectOption: "Select an option";
81
- readonly select: "Select...";
107
+ readonly select: "Select…";
82
108
  readonly openChat: "Open chat";
83
109
  readonly closeChat: "Close chat";
110
+ readonly closePanel: "Close panel";
111
+ readonly resizeDrawer: "Resize drawer";
112
+ readonly itemCount: "{{count}} items";
113
+ readonly itemCountOne: "{{count}} item";
84
114
  readonly toggleSidebar: "Toggle sidebar";
85
115
  readonly package: "Package";
116
+ readonly done: "Done";
117
+ readonly editInStudio: "Edit in studio";
118
+ readonly record: "Record";
119
+ readonly retry: "Retry";
120
+ readonly printDialogHint: "Opens your browser’s print dialog (not a PDF export)";
86
121
  };
87
122
  readonly actions: {
88
123
  readonly decisionOutput: {
@@ -105,6 +140,7 @@ declare const en: {
105
140
  readonly url: "Please enter a valid URL";
106
141
  readonly pattern: "{{field}} format is invalid";
107
142
  readonly formInvalid: "Please check the highlighted fields: {{fields}}";
143
+ readonly formInvalidJoiner: ", ";
108
144
  readonly unique: "{{field}} must be unique";
109
145
  readonly type: "{{field}} must be a valid {{type}}";
110
146
  };
@@ -120,6 +156,7 @@ declare const en: {
120
156
  readonly unsavedChanges: "You have unsaved changes. Are you sure you want to leave?";
121
157
  readonly discardTitle: "Discard changes?";
122
158
  readonly discardMessage: "You have unsaved changes. If you close this form now, your edits will be lost.";
159
+ readonly dialogDescriptionFallback: "Complete the form fields, then submit or cancel.";
123
160
  readonly keepEditing: "Keep editing";
124
161
  readonly discard: "Discard";
125
162
  readonly conflictTitle: "Save conflict";
@@ -129,12 +166,21 @@ declare const en: {
129
166
  readonly stepOf: "Step {{current}} of {{total}}";
130
167
  readonly createTitle: "Create {{object}}";
131
168
  readonly editTitle: "Edit {{object}}";
169
+ readonly viewTitle: "View {{object}}";
170
+ readonly createTargetOrg: "Creates in {{org}}";
132
171
  readonly saveRecord: "Save";
133
172
  readonly create: "Create";
134
173
  readonly update: "Update";
135
174
  readonly createSuccess: "{{object}} created successfully";
136
175
  readonly updateSuccess: "{{object}} updated successfully";
137
176
  readonly deleteSuccess: "{{object}} deleted successfully";
177
+ readonly fullscreen: {
178
+ readonly title: "Edit text";
179
+ readonly description: "Edit the full text value, then save or cancel your changes.";
180
+ readonly done: "Done";
181
+ readonly toggle: "Edit {{label}} fullscreen";
182
+ readonly textFallback: "text";
183
+ };
138
184
  };
139
185
  readonly fields: {
140
186
  readonly relativeDate: {
@@ -172,7 +218,11 @@ declare const en: {
172
218
  readonly richText: {
173
219
  readonly format: "Format: {{format}}";
174
220
  readonly basicEditorHint: "Rich text editor (basic)";
175
- readonly placeholder: "Enter text...";
221
+ readonly placeholder: "Enter text…";
222
+ };
223
+ readonly options: {
224
+ readonly empty: "No options available";
225
+ readonly selectFirst: "Select {{fields}} first";
176
226
  };
177
227
  readonly objectRef: {
178
228
  readonly loading: "Loading objects…";
@@ -201,6 +251,13 @@ declare const en: {
201
251
  readonly editAsJson: "Edit as JSON";
202
252
  readonly useVisualBuilder: "Use visual builder";
203
253
  };
254
+ readonly tags: {
255
+ readonly placeholder: "Type and press Enter to add…";
256
+ };
257
+ readonly textarea: {
258
+ readonly characterCount: "Character count: {{count}} of {{max}}";
259
+ readonly charactersRemaining: "Characters remaining: {{count}}";
260
+ };
204
261
  };
205
262
  readonly table: {
206
263
  readonly rowsPerPage: "Rows per page";
@@ -227,7 +284,7 @@ declare const en: {
227
284
  readonly saveAll: "Save All ({{count}})";
228
285
  readonly addRecord: "Add record";
229
286
  readonly open: "Open";
230
- readonly search: "Search...";
287
+ readonly search: "Search…";
231
288
  readonly modified: "{{count}} row modified";
232
289
  readonly saveFailed: "Save failed";
233
290
  readonly selected: "{{count}} selected";
@@ -240,7 +297,7 @@ declare const en: {
240
297
  readonly delete: "Delete";
241
298
  readonly export: "Export";
242
299
  readonly exportAs: "Export as {{format}}";
243
- readonly loading: "Loading grid...";
300
+ readonly loading: "Loading grid…";
244
301
  readonly errorLoading: "Error loading grid";
245
302
  readonly pullToRefresh: "Pull to refresh";
246
303
  readonly refreshing: "Refreshing…";
@@ -257,6 +314,19 @@ declare const en: {
257
314
  readonly yes: "Yes";
258
315
  readonly no: "No";
259
316
  readonly systemFields: "System";
317
+ readonly summary: {
318
+ readonly pattern: "{{label}}: {{value}}";
319
+ readonly count: "Count";
320
+ readonly countEmpty: "Empty";
321
+ readonly countFilled: "Filled";
322
+ readonly countUnique: "Unique";
323
+ readonly percentEmpty: "Empty";
324
+ readonly percentFilled: "Filled";
325
+ readonly sum: "Sum";
326
+ readonly avg: "Avg";
327
+ readonly min: "Min";
328
+ readonly max: "Max";
329
+ };
260
330
  readonly toolbar: {
261
331
  readonly densityMode: "Density";
262
332
  readonly densityCompact: "Compact";
@@ -460,7 +530,8 @@ declare const en: {
460
530
  readonly sort: "Sort";
461
531
  readonly sortRecords: "Sort Records";
462
532
  readonly sortByIdSuffix: "(by ID)";
463
- readonly sortRelationalHint: "Columns that link to another record are not listed: they can only be sorted by the stored ID, not by the name shown in the cell. To sort by that name, add a formula field holding it.";
533
+ readonly sortRelationalHint: "Columns that link to another record are not listed: they can only be sorted by the stored ID, not by the name shown in the cell. To sort by that name, denormalize it onto this object as a stored field, written when the source changes, and sort by that. Not a formula field: it is virtual, so no column is stored for it and the server refuses to sort by one.";
534
+ readonly resetSortToDefault: "Reset to view default";
464
535
  readonly group: "Group";
465
536
  readonly groupBy: "Group By";
466
537
  readonly export: "Export";
@@ -485,6 +556,8 @@ declare const en: {
485
556
  readonly loadErrorUnauthorizedMessage: "Your session has expired or you are signed out. Sign in again to view these records.";
486
557
  readonly loadErrorRejectedTitle: "This view’s query was rejected";
487
558
  readonly loadErrorRejectedMessage: "The server could not process this view’s filter or query options. Clearing the filters usually fixes it; if the view is saved this way, an administrator needs to correct it.";
559
+ readonly loadErrorApiDisabledTitle: "This object isn’t available through the API";
560
+ readonly loadErrorApiDisabledMessage: "This page can’t load its records because the object is not exposed through the API. That is a setting on the object itself, not a permission — an administrator has to enable API access for it before this page can work.";
488
561
  readonly retry: "Retry";
489
562
  readonly managedBy: {
490
563
  readonly system: {
@@ -559,8 +632,11 @@ declare const en: {
559
632
  readonly deleteCard: "Delete card";
560
633
  readonly deleteColumn: "Delete column";
561
634
  readonly noCards: "No cards";
562
- readonly cardTitlePlaceholder: "Enter card title...";
635
+ readonly cardTitlePlaceholder: "Enter card title…";
563
636
  readonly uncategorized: "Uncategorized";
637
+ readonly columns: "columns";
638
+ readonly requiredFieldsTitle: "Complete required fields";
639
+ readonly requiredFieldsDescription: "This move makes the fields below required. Fill them in to continue.";
564
640
  };
565
641
  readonly timeline: {
566
642
  readonly bucket: {
@@ -573,6 +649,13 @@ declare const en: {
573
649
  readonly noDate: "No date";
574
650
  readonly unassigned: "Unassigned";
575
651
  };
652
+ readonly scale: {
653
+ readonly week: "Week {{n}}";
654
+ readonly quarter: "Q{{quarter}} {{year}}";
655
+ };
656
+ readonly gantt: {
657
+ readonly rowLabel: "Items";
658
+ };
576
659
  };
577
660
  readonly gantt: {
578
661
  readonly column: {
@@ -599,6 +682,7 @@ declare const en: {
599
682
  readonly exportPng: "Export as PNG";
600
683
  readonly exportPdf: "Export PDF";
601
684
  readonly saveLayout: "Save layout";
685
+ readonly refresh: "Refresh";
602
686
  readonly undo: "Undo";
603
687
  readonly redo: "Redo";
604
688
  };
@@ -646,6 +730,18 @@ declare const en: {
646
730
  readonly ff: "Finish → Finish";
647
731
  readonly sf: "Start → Finish";
648
732
  };
733
+ readonly linkEnd: {
734
+ readonly start: "start";
735
+ readonly end: "end";
736
+ };
737
+ readonly link: {
738
+ readonly rejected: {
739
+ readonly self: "A task cannot depend on itself.";
740
+ readonly locked: "This row is locked and cannot take a new dependency.";
741
+ readonly group: "A summary row cannot take a dependency — link one of its tasks instead.";
742
+ readonly cycle: "That link would create a circular dependency.";
743
+ };
744
+ };
649
745
  readonly conflict: {
650
746
  readonly title: "Schedule conflict";
651
747
  readonly body: "This move conflicts with dependency constraints. Auto-reschedule {{count}} affected task(s)?";
@@ -654,8 +750,8 @@ declare const en: {
654
750
  };
655
751
  readonly autoScheduleDlg: {
656
752
  readonly title: "Auto-schedule";
657
- readonly body: "Shift {count} task(s) later to satisfy dependency links?";
658
- readonly skipped: "{count} locked task(s) also violate links and were skipped.";
753
+ readonly body: "Shift {{count}} task(s) later to satisfy dependency links?";
754
+ readonly skipped: "{{count}} locked task(s) also violate links and were skipped.";
659
755
  readonly confirm: "Apply";
660
756
  readonly cancel: "Cancel";
661
757
  readonly none: "All dependencies satisfied — nothing to reschedule.";
@@ -666,6 +762,12 @@ declare const en: {
666
762
  readonly over: "overloaded";
667
763
  readonly empty: "No tasks to allocate.";
668
764
  };
765
+ readonly quickFilter: {
766
+ readonly all: "All";
767
+ readonly clear: "Clear filters";
768
+ readonly empty: "No options";
769
+ readonly resultSummary: "Showing {shown} / {total} tasks";
770
+ };
669
771
  readonly readOnly: "Read-only";
670
772
  readonly readOnlyHint: "Editing is disabled for this view.";
671
773
  readonly lockedHint: "No edit permission";
@@ -712,14 +814,15 @@ declare const en: {
712
814
  readonly editInlineHint: "Double-click to edit";
713
815
  readonly lockedByApproval: "Locked for approval";
714
816
  readonly lockedTooltip: "This record has a pending approval request; editing is locked";
715
- readonly writeStrippedTitle: "Some fields were not saved";
716
- readonly writeStrippedReadonly: "Read-only, so it was not saved: {{fields}}";
717
- readonly writeStrippedByState: "Not editable in this record's current state, so it was not saved: {{fields}}";
817
+ readonly writeStrippedTitle: "Saved — but some fields did not take effect";
818
+ readonly writeStrippedReadonly: "Read-only, so it did not take effect: {{fields}}";
819
+ readonly writeStrippedByState: "Not editable in this record's current state, so it did not take effect: {{fields}}";
718
820
  readonly approvalPendingEditable: "In approval · editable";
719
821
  readonly approvalPendingTooltip: "This record has a pending approval request; this step still allows editing";
720
822
  readonly approvalProgress: "Approvals — {{got}} of {{need}}";
721
823
  readonly approvalProgressGroups: "Sign-off — {{got}} of {{need}} groups";
722
824
  readonly approvalProgressLabel: "Approval progress";
825
+ readonly approvalsPanelTitle: "Approvals";
723
826
  readonly cancelApproval: "Recall approval";
724
827
  readonly cancelApprovalInFlight: "Recalling…";
725
828
  readonly cancelApprovalTooltip: "Recall the pending approval request to unlock this record";
@@ -740,6 +843,7 @@ declare const en: {
740
843
  readonly concurrentUpdateReload: "Reload latest";
741
844
  readonly concurrentUpdateOverwrite: "Overwrite anyway";
742
845
  readonly concurrentUpdateCancel: "Cancel";
846
+ readonly concurrentUpdateRecordLabel: "this record";
743
847
  readonly openInNewTab: "Open in new tab";
744
848
  readonly share: "Share";
745
849
  readonly duplicate: "Duplicate";
@@ -747,6 +851,15 @@ declare const en: {
747
851
  readonly viewHistory: "View history";
748
852
  readonly delete: "Delete";
749
853
  readonly moreActions: "More actions";
854
+ readonly addReaction: "Add reaction";
855
+ readonly pageHeaderActions: "Page header actions";
856
+ readonly emojiPicker: "Emoji picker";
857
+ readonly reactionCount: "{{emoji}} {{count}} reactions";
858
+ readonly reactionCountOne: "{{emoji}} {{count}} reaction";
859
+ readonly recordDetail: "Record Detail";
860
+ readonly recordDetailWithLabel: "{{label}} Detail";
861
+ readonly openAsFullPage: "Open as full page";
862
+ readonly recordDetailOverlay: "Record detail overlay for {{title}}.";
750
863
  readonly addToFavorites: "Add to favorites";
751
864
  readonly removeFromFavorites: "Remove from favorites";
752
865
  readonly previousRecord: "Previous record";
@@ -760,16 +873,19 @@ declare const en: {
760
873
  readonly relatedRecords: "{{count}} records";
761
874
  readonly relatedRecordOne: "{{count}} record";
762
875
  readonly noRelatedRecords: "No related records found";
763
- readonly loading: "Loading...";
876
+ readonly loading: "Loading…";
764
877
  readonly copyToClipboard: "Copy to clipboard";
765
878
  readonly copied: "Copied!";
766
879
  readonly deleteConfirmation: "Are you sure you want to delete this record?";
880
+ readonly deleted: "Record deleted";
767
881
  readonly editRecord: "Edit record";
768
882
  readonly viewAll: "View All";
769
883
  readonly new: "New";
884
+ readonly add: "Add";
770
885
  readonly emptyValue: "—";
771
886
  readonly activity: "Activity";
772
887
  readonly history: "History";
888
+ readonly historyEmpty: "No history yet";
773
889
  readonly editRow: "Edit";
774
890
  readonly deleteRow: "Delete";
775
891
  readonly deleteRowConfirmation: "Are you sure you want to delete this record?";
@@ -779,7 +895,7 @@ declare const en: {
779
895
  readonly nextPage: "Next";
780
896
  readonly pageOf: "Page {{current}} of {{total}}";
781
897
  readonly sortBy: "Sort by";
782
- readonly filterPlaceholder: "Filter...";
898
+ readonly filterPlaceholder: "Filter…";
783
899
  readonly highlightFields: "Key Fields";
784
900
  readonly comments: "Comments";
785
901
  readonly searchComments: "Search comments…";
@@ -838,6 +954,7 @@ declare const en: {
838
954
  readonly nextRecordKey: "Next record (→)";
839
955
  readonly lastRecord: "Last record (End)";
840
956
  readonly noRecords: "No records";
957
+ readonly showEmptyRelated: "+ {{count}} empty";
841
958
  readonly showEmptyRelated_one: "+ {{count}} empty";
842
959
  readonly showEmptyRelated_other: "+ {{count}} empty";
843
960
  readonly searchWhileNavigating: "Search while navigating";
@@ -851,6 +968,7 @@ declare const en: {
851
968
  readonly loadMore: "Load more";
852
969
  readonly edited: "(edited)";
853
970
  readonly via: "via {{source}}";
971
+ readonly viewSource: "View source";
854
972
  readonly replyCount: "{{count}} reply";
855
973
  readonly replyCountPlural: "{{count}} replies";
856
974
  readonly replyPlaceholder: "Reply…";
@@ -869,7 +987,8 @@ declare const en: {
869
987
  };
870
988
  readonly chart: {
871
989
  readonly noData: "No chart data available";
872
- readonly loading: "Loading chart...";
990
+ readonly loading: "Loading chart…";
991
+ readonly nullCategory: "(None)";
873
992
  };
874
993
  readonly report: {
875
994
  readonly total: "Total";
@@ -894,111 +1013,7 @@ declare const en: {
894
1013
  readonly first: "First";
895
1014
  };
896
1015
  readonly editor: {
897
- readonly breadcrumb: "Configuration";
898
- readonly basic: "Basic";
899
- readonly title: "Title";
900
- readonly titlePlaceholder: "e.g. Pipeline by Quarter";
901
- readonly description: "Description";
902
- readonly descriptionPlaceholder: "What does this report show?";
903
- readonly type: "Report type";
904
- readonly typeTabular: "Tabular — flat list";
905
- readonly typeSummary: "Summary — grouped with totals";
906
- readonly typeMatrix: "Matrix — pivot rows × columns";
907
- readonly typeJoined: "Joined — multiple blocks";
908
- readonly typeHelp: "Pick the layout that matches what you want to see.";
909
- readonly data: "Data";
910
- readonly objectName: "Data source";
911
- readonly objectNamePlaceholder: "e.g. opportunity";
912
- readonly objectNameHelp: "Which object should this report query?";
913
- readonly limit: "Row limit";
914
- readonly limitPlaceholder: "e.g. 100";
915
- readonly columns: "Columns";
916
- readonly columnsHint: "Pick which fields appear as columns. Add an aggregate (Sum, Count…) on Summary or Matrix reports.";
917
- readonly filters: "Filters";
918
- readonly filtersHint: "Limit the rows that go into this report.";
919
- readonly filtersComplex: "This report uses an advanced filter that cannot be edited here. Save will keep it unchanged.";
920
- readonly groupBy: "Group by";
921
- readonly groupByHint: "Group the data and compute subtotals.";
922
- readonly rows: "Rows";
923
- readonly rowsHint: "Group rows by these fields.";
924
- readonly columnsAxis: "Columns";
925
- readonly columnsAxisHint: "Pivot these fields across the top.";
926
- readonly values: "Values";
927
- readonly valuesHint: "Numbers shown in each cell. Pick one or more fields and add an aggregate (Sum, Count…).";
928
- readonly grouping: "Grouping";
929
- readonly addGrouping: "Add grouping";
930
- readonly dateGranularity: "Date bucket";
931
- readonly dateGranularityNone: "(use raw value)";
932
- readonly day: "Day";
933
- readonly week: "Week";
934
- readonly month: "Month";
935
- readonly quarter: "Quarter";
936
- readonly year: "Year";
937
- readonly sortAsc: "Ascending";
938
- readonly sortDesc: "Descending";
939
- readonly chart: "Chart";
940
- readonly chartHint: "Optional visualization rendered alongside the table.";
941
- readonly chartType: "Chart type";
942
- readonly chartTitle: "Chart title";
943
- readonly chartTitlePlaceholder: "Defaults to the report title";
944
- readonly chartXAxis: "X-axis (category)";
945
- readonly chartYAxis: "Y-axis (value)";
946
- readonly chartShowLegend: "Show legend";
947
- readonly chartShowDataLabels: "Show data labels";
948
- readonly chartNone: "(no chart)";
949
- readonly chartBar: "Bar";
950
- readonly chartLine: "Line";
951
- readonly chartArea: "Area";
952
- readonly chartPie: "Pie";
953
- readonly chartDonut: "Donut";
954
- readonly chartFunnel: "Funnel";
955
- readonly validationNeedsObject: "Pick a data source before adding columns.";
956
- readonly validationMatrixNeedsRowsCols: "Matrix reports need at least one Row and one Column.";
957
- readonly validationSummaryNeedsRows: "Summary reports need at least one grouping field.";
958
- readonly blocks: "Blocks";
959
- readonly blocksHint: "Each block is its own table or chart. Block-level filters are ANDed with the report filter.";
960
- readonly addBlock: "Add block";
961
- readonly removeBlock: "Remove block";
962
- readonly blockName: "Block name";
963
- readonly blockNamePlaceholder: "unique_block_name";
964
- readonly blockLabel: "Display label";
965
- readonly blockLabelPlaceholder: "Shown above the block";
966
- readonly blockDescription: "Description";
967
- readonly blockDescriptionPlaceholder: "Optional context for this block";
968
- readonly validationJoinedNeedsBlocks: "Joined reports need at least one block.";
969
- readonly validationBlockNameRequired: "Every block needs a non-empty name.";
970
- readonly validationBlockNameDuplicate: "Block names must be unique within the report.";
971
- readonly validationBlockNeedsColumns: "Every block needs at least one column.";
972
- readonly noneOption: "(none)";
973
- readonly addCondition: "Add condition";
974
- readonly combineLogic: "Combine with";
975
- readonly opContains: "contains";
976
- readonly opIsEmpty: "is empty";
977
- readonly opIsNotEmpty: "is not empty";
978
- readonly formatAuto: "Auto";
979
- readonly formatCurrency: "Currency";
980
- readonly formatPercent: "Percent";
981
- readonly formatInteger: "Integer";
982
- readonly formatDate: "Date";
983
- readonly formatDatetime: "Date & time";
984
- readonly columnLabelPlaceholder: "Label override";
985
- readonly aggregateColumn: "Aggregate";
986
- readonly formatColumn: "Format";
987
- readonly addColumns: "Add fields";
988
- readonly searchFields: "Search fields…";
989
- readonly noMatchingFields: "No fields match your search.";
990
- readonly noFieldsAvailable: "No fields available.";
991
- readonly columnsCount: "{n} column(s) selected";
992
- readonly columnsEmpty: "No columns selected yet.";
993
- readonly fieldPickerTitle: "Select fields";
994
- readonly fieldPickerDescription: "Pick one or more fields to add. Use the search box to narrow the list.";
995
- readonly fieldPickerChangeTitle: "Change field";
996
- readonly fieldPickerAddGroupingTitle: "Add grouping";
997
- readonly fieldPickerEmpty: "(pick field)";
998
- readonly fieldPickerSelected: "{n} selected";
999
- readonly fieldPickerClear: "Clear selection";
1000
- readonly fieldPickerAdd: "Add";
1001
- readonly fieldPickerAddN: "Add {n}";
1016
+ readonly panelTitle: "Edit report";
1002
1017
  };
1003
1018
  };
1004
1019
  readonly map: {
@@ -1021,8 +1036,8 @@ declare const en: {
1021
1036
  readonly properties: "Properties";
1022
1037
  readonly connections: "Connections";
1023
1038
  readonly quickConnect: "Quick Connect";
1024
- readonly fromPlaceholder: "From...";
1025
- readonly toPlaceholder: "To...";
1039
+ readonly fromPlaceholder: "From…";
1040
+ readonly toPlaceholder: "To…";
1026
1041
  readonly connect: "Connect";
1027
1042
  readonly label: "Label";
1028
1043
  readonly type: "Type";
@@ -1082,6 +1097,7 @@ declare const en: {
1082
1097
  readonly noDataAvailable: "No data available";
1083
1098
  readonly noDataSourceFor: "No data source available for";
1084
1099
  readonly noRows: "No rows";
1100
+ readonly loading: "Loading…";
1085
1101
  readonly pickMeasures: "Pick measures (values) for this dataset widget.";
1086
1102
  readonly datasetUnsupported: "This data source does not support dataset queries.";
1087
1103
  readonly details: "Details";
@@ -1331,8 +1347,9 @@ declare const en: {
1331
1347
  };
1332
1348
  };
1333
1349
  readonly console: {
1350
+ readonly saveAdvisoryTitle: "Saved — the authoring check raised {{count}} advisory finding(s)";
1334
1351
  readonly title: "ObjectOS";
1335
- readonly initializing: "Initializing application...";
1352
+ readonly initializing: "Initializing application…";
1336
1353
  readonly search: "Search…";
1337
1354
  readonly breadcrumb: {
1338
1355
  readonly dashboards: "Dashboards";
@@ -1362,6 +1379,28 @@ declare const en: {
1362
1379
  readonly Other: "Other";
1363
1380
  };
1364
1381
  };
1382
+ readonly settingsView: {
1383
+ readonly backToHub: "All settings";
1384
+ readonly back: "Back";
1385
+ readonly noNamespace: "No namespace selected.";
1386
+ readonly loadError: "Failed to load settings";
1387
+ readonly saved: "Settings saved";
1388
+ readonly saveFailed: "Save failed";
1389
+ readonly lockedByEnv: "Locked by environment: {{key}}";
1390
+ readonly lockedByEnvNoKey: "Locked by environment";
1391
+ readonly actionSucceeded: "Action succeeded";
1392
+ readonly actionFailed: "Action failed";
1393
+ readonly discard: "Discard";
1394
+ readonly saveChanges: "Save changes";
1395
+ readonly unsavedCount: "{{count}} unsaved changes";
1396
+ readonly unsavedCount_one: "{{count}} unsaved change";
1397
+ readonly unsavedCount_other: "{{count}} unsaved changes";
1398
+ readonly cryptoRefusalTitle: "This deployment cannot encrypt secrets";
1399
+ readonly cryptoRefusalSubjectSuffix: "is declared encrypted, so nothing was written.";
1400
+ readonly cryptoRefusalNoSubject: "The declared-encrypted value was refused, so nothing was written.";
1401
+ readonly cryptoRefusalToast: "Cannot encrypt secrets: {{subject}}";
1402
+ readonly cryptoRefusalToastNoSubject: "Cannot encrypt secrets";
1403
+ };
1365
1404
  readonly loadingSteps: {
1366
1405
  readonly connecting: "Connecting to data source";
1367
1406
  readonly loadingConfig: "Loading configuration";
@@ -1378,6 +1417,13 @@ declare const en: {
1378
1417
  readonly retry: "Retry";
1379
1418
  readonly retrying: "Retrying…";
1380
1419
  };
1420
+ readonly serverAction: {
1421
+ readonly openingTitle: "Opening…";
1422
+ readonly openingBody: "Opening… this may take a moment.";
1423
+ readonly popupBlockedTitle: "Popup blocked";
1424
+ readonly popupBlockedDescription: "Your browser blocked the new tab from opening.";
1425
+ readonly popupBlockedAction: "Open in new tab";
1426
+ };
1381
1427
  readonly shortcuts: {
1382
1428
  readonly title: "Keyboard Shortcuts";
1383
1429
  readonly description: "Quick reference for all available keyboard shortcuts.";
@@ -1385,6 +1431,7 @@ declare const en: {
1385
1431
  readonly general: "General";
1386
1432
  readonly navigation: "Navigation";
1387
1433
  readonly dataViews: "Data Views";
1434
+ readonly aiChat: "AI assistant";
1388
1435
  readonly preferences: "Preferences";
1389
1436
  };
1390
1437
  readonly openCommandPalette: "Open command palette";
@@ -1395,11 +1442,13 @@ declare const en: {
1395
1442
  readonly createRecord: "Create new record";
1396
1443
  readonly refreshData: "Refresh data";
1397
1444
  readonly editRecord: "Edit selected record";
1445
+ readonly newChat: "New chat";
1446
+ readonly toggleChatsList: "Toggle conversations list";
1398
1447
  readonly toggleDarkMode: "Toggle dark mode";
1399
1448
  };
1400
1449
  readonly commandPalette: {
1401
1450
  readonly title: "Command palette";
1402
- readonly placeholder: "Type a command or search...";
1451
+ readonly placeholder: "Type a command or search…";
1403
1452
  readonly noResults: "No results found.";
1404
1453
  readonly searching: "Searching…";
1405
1454
  readonly records: "Records";
@@ -1441,7 +1490,7 @@ declare const en: {
1441
1490
  readonly shareTitle: "Share this conversation";
1442
1491
  readonly shareDisabledTitle: "Start chatting to enable sharing";
1443
1492
  readonly newChat: "New";
1444
- readonly searchChats: "Search chats...";
1493
+ readonly searchChats: "Search chats…";
1445
1494
  readonly noChatsYet: "No chats yet";
1446
1495
  readonly noChatsDescription: "Start a new conversation to see it here.";
1447
1496
  readonly noMatchingChats: "No matching chats.";
@@ -1450,18 +1499,18 @@ declare const en: {
1450
1499
  readonly deleteConversation: "Delete conversation";
1451
1500
  readonly saveRename: "Save rename";
1452
1501
  readonly cancelRename: "Cancel rename";
1453
- readonly loadingHistory: "Loading conversation history...";
1502
+ readonly loadingHistory: "Loading conversation history…";
1454
1503
  readonly conversationReady: "Conversation ready";
1455
1504
  readonly preparingConversation: "Preparing a new conversation";
1456
1505
  readonly offlineDemoMode: "Offline demo mode — agent list unavailable";
1457
1506
  readonly sendFailedRateLimited: "You're sending messages too quickly. Your message is kept below — wait a moment and try again.";
1458
1507
  readonly sendFailedGeneric: "Couldn't send your message. It's kept below — please try again.";
1459
- readonly askAgent: "Ask {{agent}}...";
1508
+ readonly askAgent: "Ask {{agent}}…";
1460
1509
  readonly assistant: "Assistant";
1461
1510
  readonly liveCanvas: "Live preview — {{app}} (draft)";
1462
1511
  readonly liveCanvasUnlisted: "Live app — {{app}} (unlisted until published)";
1463
- readonly loadingAgents: "Loading agents...";
1464
- readonly askAnything: "Ask anything...";
1512
+ readonly loadingAgents: "Loading agents…";
1513
+ readonly askAnything: "Ask anything…";
1465
1514
  readonly emptyTitle: "Start a conversation";
1466
1515
  readonly emptyDescription: "Ask anything — the assistant has access to your current app context.";
1467
1516
  readonly switchAssistant: "Switch assistant";
@@ -1568,6 +1617,52 @@ declare const en: {
1568
1617
  readonly addAutomation: "Add an automation — an approval, a status flow, or a notification.";
1569
1618
  };
1570
1619
  };
1620
+ readonly collapseToDock: "Collapse to side panel";
1621
+ readonly switchApp: "Switch app";
1622
+ readonly switchAppLabel: "Build conversations by app";
1623
+ readonly newApp: "New app";
1624
+ readonly connectionWaiting: "Waiting for server…";
1625
+ readonly connectionStalled: "Still working…";
1626
+ readonly connectionOffline: "Connection lost — reconnecting…";
1627
+ readonly designingPlan: "Designing your app…";
1628
+ readonly designingPlanHint: {
1629
+ readonly data: "Mapping out the data you’ll track…";
1630
+ readonly objects: "Shaping objects and their fields…";
1631
+ readonly relations: "Connecting related records…";
1632
+ readonly lookups: "Setting up relationships and lookups…";
1633
+ readonly views: "Planning the screens and views…";
1634
+ readonly forms: "Laying out forms and lists…";
1635
+ readonly defaults: "Adding sensible defaults and validations…";
1636
+ readonly dashboard: "Sketching a dashboard to track it…";
1637
+ readonly review: "Double-checking the structure hangs together…";
1638
+ readonly finalize: "Pulling the plan together…";
1639
+ };
1640
+ readonly planBuilding: "Building…";
1641
+ readonly planBuilt: "Built";
1642
+ readonly planDeferred: "Not yet built";
1643
+ readonly planReady: "The plan is ready. Build it now, or tell me what to adjust.";
1644
+ readonly published: "Published";
1645
+ readonly publishFailed: "Publish failed";
1646
+ readonly unavailableTitle: "AI assistant unavailable";
1647
+ readonly unavailableDescription: "This deployment doesn't have an AI assistant enabled. Everything else works as usual.";
1648
+ readonly unavailableError: "Couldn't reach the AI service. It may be temporarily offline — try again, or head back home.";
1649
+ readonly unavailableRetry: "Try again";
1650
+ readonly unavailableHome: "Back to home";
1651
+ readonly dock: {
1652
+ readonly title: "Assistant";
1653
+ readonly description: "AI assistant chat";
1654
+ readonly resize: "Resize chat";
1655
+ readonly collapse: "Collapse chat";
1656
+ readonly maximize: "Open full page";
1657
+ readonly open: "Open assistant";
1658
+ };
1659
+ readonly group: {
1660
+ readonly today: "Today";
1661
+ readonly yesterday: "Yesterday";
1662
+ readonly previous7Days: "Previous 7 days";
1663
+ readonly previous30Days: "Previous 30 days";
1664
+ readonly older: "Older";
1665
+ };
1571
1666
  };
1572
1667
  readonly errors: {
1573
1668
  readonly somethingWentWrong: "Something went wrong";
@@ -1576,6 +1671,11 @@ declare const en: {
1576
1671
  readonly goHome: "Go Home";
1577
1672
  readonly errorDetails: "Error Details (dev only)";
1578
1673
  };
1674
+ readonly notFound: {
1675
+ readonly title: "Page not found";
1676
+ readonly description: "The URL you followed does not match any view in this app.";
1677
+ readonly back: "Go back";
1678
+ };
1579
1679
  readonly theme: {
1580
1680
  readonly toggle: "Toggle theme";
1581
1681
  readonly light: "Light";
@@ -1613,7 +1713,11 @@ declare const en: {
1613
1713
  readonly objectNotFound: "Object Not Found";
1614
1714
  readonly objectNotFoundDescription: "The object \"{{objectName}}\" does not exist in the current configuration.";
1615
1715
  readonly objectNotFoundHint: "Check your app navigation settings or select a different object from the sidebar.";
1716
+ readonly filterOrNotSavable: "This filter uses OR between conditions, which a saved view cannot store yet. It still applies to this list — remove the OR grouping to save it to the view.";
1717
+ readonly filterNestedNotSavable: "This filter uses nested condition groups, which a saved view cannot store. Flatten it to a single list of conditions to save it to the view.";
1616
1718
  readonly systemViewReadonly: "System view defined in code — read-only.";
1719
+ readonly cannotEditMetaView: "This view is built in and defined in code — it cannot be changed.";
1720
+ readonly cannotDeleteMetaView: "This view is built in and defined in code — it cannot be deleted.";
1617
1721
  readonly expandToPage: "Open as full page";
1618
1722
  readonly allRecords: "All Records";
1619
1723
  readonly exitDesignMode: "Exit Design Mode";
@@ -1647,7 +1751,7 @@ declare const en: {
1647
1751
  readonly exportPrintHint: "Export formats, printing, and record count display";
1648
1752
  readonly showAllFields: "Show All";
1649
1753
  readonly hideAllFields: "Hide All";
1650
- readonly searchFields: "Search fields...";
1754
+ readonly searchFields: "Search fields…";
1651
1755
  readonly title: "Title";
1652
1756
  readonly description: "Description";
1653
1757
  readonly data: "Data";
@@ -1726,8 +1830,8 @@ declare const en: {
1726
1830
  readonly imageField: "Image field";
1727
1831
  readonly imageFieldHelp: "The gallery cover comes from this image or attachment field.";
1728
1832
  readonly dateField: "Date field";
1729
- readonly selectField: "Select field...";
1730
- readonly selectOption: "Select...";
1833
+ readonly selectField: "Select field…";
1834
+ readonly selectOption: "Select…";
1731
1835
  readonly noEligibleFieldForType: "No eligible field of this type. Add one to the object first.";
1732
1836
  readonly viewTypeUnavailable: "This object has no field that can serve as \"{{field}}\".";
1733
1837
  readonly viewTypeUnavailableShort: "Not supported by this object.";
@@ -1801,7 +1905,7 @@ declare const en: {
1801
1905
  readonly ufDropdown: "Dropdown";
1802
1906
  readonly ufTabs: "Tabs";
1803
1907
  readonly ufToggle: "Toggle";
1804
- readonly ufAddField: "+ Add filter field...";
1908
+ readonly ufAddField: "+ Add filter field…";
1805
1909
  readonly ufNoFields: "No fields available";
1806
1910
  readonly ufAddTab: "+ Add tab";
1807
1911
  readonly ufTabLabel: "Label";
@@ -1833,11 +1937,21 @@ declare const en: {
1833
1937
  readonly passwordPlaceholder: "Enter your password";
1834
1938
  readonly forgotPasswordText: "Forgot password?";
1835
1939
  readonly submitButton: "Sign In";
1836
- readonly submittingButton: "Signing in...";
1940
+ readonly submittingButton: "Signing in…";
1837
1941
  readonly noAccountText: "Don't have an account?";
1838
1942
  readonly signUpText: "Sign up";
1839
1943
  readonly signingIn: "Signing you in…";
1840
1944
  readonly ssoHandoff: "Continue to {{target}}";
1945
+ readonly emailOrPhoneLabel: "Email or phone number";
1946
+ readonly emailOrPhonePlaceholder: "name@example.com or +1 555 000 0000";
1947
+ readonly phoneLabel: "Phone number";
1948
+ readonly phonePlaceholder: "+1 555 000 0000";
1949
+ readonly otpCodeLabel: "Verification code";
1950
+ readonly otpCodePlaceholder: "6-digit code";
1951
+ readonly sendOtpButton: "Get code";
1952
+ readonly resendOtpCountdownText: "Resend in {seconds}s";
1953
+ readonly usePhoneOtpText: "Sign in with verification code";
1954
+ readonly usePasswordSignInText: "Sign in with password instead";
1841
1955
  readonly devAdminHint: {
1842
1956
  readonly title: "Development instance";
1843
1957
  readonly body: "Sign in with the seeded dev admin:";
@@ -1863,7 +1977,7 @@ declare const en: {
1863
1977
  readonly passwordMismatchError: "Passwords do not match";
1864
1978
  readonly passwordTooShortError: "Password must be at least 8 characters";
1865
1979
  readonly submitButton: "Create Account";
1866
- readonly submittingButton: "Creating account...";
1980
+ readonly submittingButton: "Creating account…";
1867
1981
  readonly hasAccountText: "Already have an account?";
1868
1982
  readonly signInText: "Sign in";
1869
1983
  readonly errors: {
@@ -1884,12 +1998,25 @@ declare const en: {
1884
1998
  readonly emailLabel: "Email";
1885
1999
  readonly emailPlaceholder: "name@example.com";
1886
2000
  readonly submitButton: "Send Reset Link";
1887
- readonly submittingButton: "Sending...";
2001
+ readonly submittingButton: "Sending…";
1888
2002
  readonly successTitle: "Check your email";
1889
2003
  readonly successDescription: "We've sent a password reset link to {{email}}. Please check your inbox.";
1890
2004
  readonly backToSignInText: "Back to sign in";
1891
2005
  readonly rememberPasswordText: "Remember your password?";
1892
2006
  readonly signInText: "Sign in";
2007
+ readonly phoneLabel: "Phone number";
2008
+ readonly phonePlaceholder: "+1 555 000 0000";
2009
+ readonly otpCodeLabel: "Verification code";
2010
+ readonly otpCodePlaceholder: "6-digit code";
2011
+ readonly sendOtpButton: "Get code";
2012
+ readonly resendOtpCountdownText: "Resend in {seconds}s";
2013
+ readonly newPasswordLabel: "New password";
2014
+ readonly newPasswordPlaceholder: "Enter a new password";
2015
+ readonly resetButton: "Reset Password";
2016
+ readonly usePhoneResetText: "Reset via SMS code";
2017
+ readonly useEmailResetText: "Reset via email instead";
2018
+ readonly phoneSuccessTitle: "Password reset";
2019
+ readonly phoneSuccessDescription: "Your password has been reset. You can now sign in with your new password.";
1893
2020
  };
1894
2021
  readonly resetPassword: {
1895
2022
  readonly title: "Set a new password";
@@ -1923,6 +2050,7 @@ declare const en: {
1923
2050
  readonly resentSuccess: "Verification email sent!";
1924
2051
  readonly resentDescription: "Please check your inbox and click the verification link.";
1925
2052
  readonly resendFailed: "Cannot resend verification email";
2053
+ readonly resendUnavailable: "Email delivery may not be configured for this environment. Contact support if this persists.";
1926
2054
  readonly signInLink: "Go to sign in";
1927
2055
  readonly backToSignIn: "Back to sign in";
1928
2056
  readonly backToLogin: "Back to login";
@@ -1964,6 +2092,8 @@ declare const en: {
1964
2092
  readonly denyFailed: "Failed to deny request";
1965
2093
  readonly invalidTitle: "Invalid device link";
1966
2094
  readonly invalidDescription: "No device code was provided in the URL.";
2095
+ readonly disabledTitle: "Device authorization not enabled";
2096
+ readonly disabledDescription: "This deployment does not have device authorization enabled, so this device cannot be approved here.";
1967
2097
  readonly loading: "Loading…";
1968
2098
  readonly cancel: "Cancel";
1969
2099
  };
@@ -2019,6 +2149,28 @@ declare const en: {
2019
2149
  };
2020
2150
  };
2021
2151
  };
2152
+ readonly oauth: {
2153
+ readonly consent: {
2154
+ readonly title: "{{appName}} wants to access your account";
2155
+ readonly request: "{{appName}} is requesting permission{{suffix}}.";
2156
+ readonly unknownApp: "an application";
2157
+ readonly willAllow: "This app will be able to:";
2158
+ readonly scope: {
2159
+ readonly openid: "Confirm your identity";
2160
+ readonly profile: "Read your basic profile (name, picture)";
2161
+ readonly email: "Read your email address";
2162
+ readonly offlineAccess: "Stay signed in (refresh access)";
2163
+ };
2164
+ readonly deny: "Deny";
2165
+ readonly authorize: "Authorize";
2166
+ readonly submitting: "Authorizing…";
2167
+ readonly granted: "Access granted";
2168
+ readonly denied: "Access denied";
2169
+ readonly noRedirect: "No redirect URL returned by the server.";
2170
+ readonly failed: "Consent failed";
2171
+ readonly footer: "You can revoke access at any time from your account settings.";
2172
+ };
2173
+ };
2022
2174
  readonly profile: {
2023
2175
  readonly title: "Profile";
2024
2176
  readonly subtitle: "Manage your account settings";
@@ -2080,6 +2232,8 @@ declare const en: {
2080
2232
  readonly invite: "Invite member";
2081
2233
  readonly members: "Members";
2082
2234
  readonly settings: "Workspace settings";
2235
+ readonly multiOrgDisabled: "Creating new organizations is disabled on this instance.";
2236
+ readonly createFailed: "Failed to create workspace";
2083
2237
  };
2084
2238
  readonly help: {
2085
2239
  readonly onThisPage: "On this page";
@@ -2100,7 +2254,7 @@ declare const en: {
2100
2254
  readonly area: "Area";
2101
2255
  readonly scope: "Scope";
2102
2256
  readonly packageManagement: "Package management";
2103
- readonly searchNavigation: "Search navigation...";
2257
+ readonly searchNavigation: "Search navigation…";
2104
2258
  readonly recent: "Recent";
2105
2259
  readonly favorites: "Favorites";
2106
2260
  readonly starred: "Starred";
@@ -2116,8 +2270,8 @@ declare const en: {
2116
2270
  readonly switchObject: "Switch Object";
2117
2271
  readonly connection: {
2118
2272
  readonly connected: "Connected";
2119
- readonly connecting: "Connecting...";
2120
- readonly reconnecting: "Reconnecting...";
2273
+ readonly connecting: "Connecting…";
2274
+ readonly reconnecting: "Reconnecting…";
2121
2275
  readonly disconnected: "Disconnected";
2122
2276
  readonly error: "Connection Error";
2123
2277
  };
@@ -2159,7 +2313,7 @@ declare const en: {
2159
2313
  readonly starred: "Starred";
2160
2314
  readonly recent: "Recent items";
2161
2315
  };
2162
- readonly loading: "Loading workspace...";
2316
+ readonly loading: "Loading workspace…";
2163
2317
  readonly recent: "Recent";
2164
2318
  readonly starred: "Starred";
2165
2319
  readonly welcome: "Build your business system with AI";
@@ -2182,6 +2336,11 @@ declare const en: {
2182
2336
  readonly publishing: "Publishing…";
2183
2337
  readonly published: "Published! Your changes are live.";
2184
2338
  readonly publishFailed: "Publish failed";
2339
+ readonly nothing: "Nothing to publish.";
2340
+ readonly probeWarn: "Published, but verification found problems.";
2341
+ readonly seedWarn: "Published, but some sample data failed to load.";
2342
+ readonly publishedVerified: "Published & verified — {{count}} sample row(s) live.";
2343
+ readonly capabilityWarn: "Authoring check: {{count}} capability reference(s) resolve nowhere.";
2185
2344
  };
2186
2345
  readonly createFirstApp: "Create app manually";
2187
2346
  readonly systemSettings: "System Settings";
@@ -2239,6 +2398,9 @@ declare const en: {
2239
2398
  readonly roles: "Roles";
2240
2399
  readonly configuration: "Configuration";
2241
2400
  readonly createApp: "Create App";
2401
+ readonly administration: "Administration";
2402
+ readonly datasources: "Datasources";
2403
+ readonly documentation: "Documentation";
2242
2404
  };
2243
2405
  readonly activityFeed: {
2244
2406
  readonly title: "Recent Activity";
@@ -2267,7 +2429,7 @@ declare const en: {
2267
2429
  readonly search: {
2268
2430
  readonly title: "Search";
2269
2431
  readonly back: "Back";
2270
- readonly placeholder: "Search objects, dashboards, pages, reports...";
2432
+ readonly placeholder: "Search objects, dashboards, pages, reports…";
2271
2433
  readonly inputAriaLabel: "Search objects, dashboards, pages, reports";
2272
2434
  readonly resultsCount: "{{count}} result for \"{{query}}\"";
2273
2435
  readonly resultsCountPlural: "{{count}} results for \"{{query}}\"";
@@ -2286,6 +2448,7 @@ declare const en: {
2286
2448
  readonly empty: {
2287
2449
  readonly objectNotFound: "Object Not Found";
2288
2450
  readonly objectNotFoundDescription: "Object \"{{name}}\" definition missing. Check your configuration or navigate back to select a valid object.";
2451
+ readonly interfacePageSourceMissing: "This interface page references \"{{name}}\", which is not available.";
2289
2452
  readonly recordNotFound: "Record not found";
2290
2453
  readonly recordNotFoundDescription: "The record you are looking for does not exist or may have been deleted.";
2291
2454
  readonly pageNotFound: "Page Not Found";
@@ -2296,6 +2459,11 @@ declare const en: {
2296
2459
  readonly reportNotFoundDescription: "The report \"{{name}}\" could not be found. It may have been removed or renamed.";
2297
2460
  readonly noAppsConfigured: "No Apps Configured";
2298
2461
  readonly noAppsConfiguredDescription: "No applications have been registered. Create your first app or visit System Settings to configure your environment.";
2462
+ readonly appNotAvailable: "App not available";
2463
+ readonly appNotAvailableDescription: "This app is not available yet — it may still be publishing. Try again in a moment.";
2464
+ readonly appAccessDenied: "You don't have access to this app";
2465
+ readonly appAccessDeniedDescription: "This app exists, but your account is not authorized to open it. Ask an administrator to grant you access.";
2466
+ readonly appAccessDeniedHome: "Back to home";
2299
2467
  readonly createFirstApp: "Create Your First App";
2300
2468
  readonly systemSettings: "System Settings";
2301
2469
  readonly back: "Back";
@@ -2335,6 +2503,30 @@ declare const en: {
2335
2503
  readonly confirmNote: "Publishing releases all {{count}} pending drafts of this package atomically.";
2336
2504
  readonly publishConfirm: "Publish all";
2337
2505
  };
2506
+ readonly unpublishedBar: {
2507
+ readonly message: "Unpublished app — fully functional, but only builders can see it. Publish to make it visible to your users.";
2508
+ readonly publish: "Publish";
2509
+ readonly publishing: "Publishing…";
2510
+ readonly published: "Published! The app is now visible to your users.";
2511
+ readonly publishFailed: "Publish failed";
2512
+ };
2513
+ readonly history: {
2514
+ readonly button: "History";
2515
+ readonly title: "Build history";
2516
+ readonly description: "Every change to this app, newest first. Revert any step to undo it — no publish confirmation needed.";
2517
+ readonly loadFailed: "Could not load history:";
2518
+ readonly loadFailedUnavailable: "Commit store temporarily unreachable — this read did not happen, so no history is shown. Retry in a moment.";
2519
+ readonly loading: "Loading history…";
2520
+ readonly empty: "No history yet for this app.";
2521
+ readonly revertLabel: "Reverted a change";
2522
+ readonly applyLabel: "Build change";
2523
+ readonly revert: "revert";
2524
+ readonly items: "item(s)";
2525
+ readonly revertAction: "Revert";
2526
+ readonly reverted: "Reverted — the change has been undone.";
2527
+ readonly revertFailed: "Revert failed";
2528
+ readonly revertUnavailable: "Commit store temporarily unreachable — the revert may not have been applied. Reopen this history to check before retrying.";
2529
+ };
2338
2530
  };
2339
2531
  readonly renderer: {
2340
2532
  readonly noPageSchema: "No page schema provided";
@@ -2401,7 +2593,7 @@ declare const en: {
2401
2593
  readonly deleteFailed: "Failed to delete view";
2402
2594
  };
2403
2595
  readonly dashboardActions: {
2404
- readonly pdfPreparing: "Preparing PDF export…";
2596
+ readonly printDialogOpening: "Opening your browser’s print dialog (not a PDF export)";
2405
2597
  readonly exportFailed: "Export failed: {{message}}";
2406
2598
  readonly forecastSoon: "Forecast view coming soon";
2407
2599
  };
@@ -2436,6 +2628,140 @@ declare const en: {
2436
2628
  readonly emptyDescription: "Create your first workspace to get started.";
2437
2629
  readonly noMatches: "No workspaces match your search.";
2438
2630
  };
2631
+ readonly organization: {
2632
+ readonly roles: {
2633
+ readonly owner: "Owner";
2634
+ readonly admin: "Admin";
2635
+ readonly delegatedAdmin: "Delegated Admin";
2636
+ readonly member: "Member";
2637
+ };
2638
+ readonly errors: {
2639
+ readonly notAllowedToInvite: "You are not allowed to invite users to this organization";
2640
+ readonly notAllowedToInviteWithRole: "You are not allowed to invite a user with this role";
2641
+ readonly alreadyInvited: "This user has already been invited to this organization";
2642
+ readonly organizationExists: "Organization already exists";
2643
+ readonly slugTaken: "That URL slug is already taken";
2644
+ readonly notAllowedToCreate: "You are not allowed to create a new organization";
2645
+ readonly notTheRecipient: "You are not the recipient of the invitation";
2646
+ readonly invitationNotFound: "This invitation no longer exists or has expired";
2647
+ readonly unknown: "Something went wrong. Please try again.";
2648
+ };
2649
+ readonly backToList: "Back to organizations";
2650
+ readonly notFound: "Organization not found";
2651
+ readonly notFoundDescription: "This organization does not exist or you do not have access.";
2652
+ readonly tabs: {
2653
+ readonly members: "Members";
2654
+ readonly invitations: "Invitations";
2655
+ readonly settings: "Settings";
2656
+ };
2657
+ readonly members: {
2658
+ readonly title: "Members";
2659
+ readonly inviteMember: "Invite member";
2660
+ readonly inviteRestrictedNote: "Only organization admins can invite members.";
2661
+ readonly removeMember: "Remove member";
2662
+ readonly removeConfirmTitle: "Remove member?";
2663
+ readonly removeConfirmDescription: "This will remove {{name}} from the organization. They will lose access immediately.";
2664
+ readonly removeConfirmAction: "Remove";
2665
+ readonly memberRemoved: "Member removed";
2666
+ readonly removeFailed: "Failed to remove member";
2667
+ readonly roleUpdated: "Role updated";
2668
+ readonly roleUpdateFailed: "Failed to update role";
2669
+ readonly memberActions: "Member actions";
2670
+ readonly loadFailed: "Failed to load members";
2671
+ };
2672
+ readonly invitations: {
2673
+ readonly title: "Invitations";
2674
+ readonly empty: "No invitations found.";
2675
+ readonly expiresAt: "Expires";
2676
+ readonly linkCopied: "Invitation link copied";
2677
+ readonly copyFailed: "Failed to copy link";
2678
+ readonly canceled: "Invitation canceled";
2679
+ readonly cancelFailed: "Failed to cancel invitation";
2680
+ readonly cancelTitle: "Cancel invitation?";
2681
+ readonly cancelDescription: "The invitation for {{email}} will be revoked.";
2682
+ readonly cancelAction: "Cancel invitation";
2683
+ readonly inviteTitle: "Invite a member";
2684
+ readonly inviteDescription: "They will receive an invitation to join this organization.";
2685
+ readonly emailLabel: "Email";
2686
+ readonly roleLabel: "Role";
2687
+ readonly placementLabel: "Placement (optional)";
2688
+ readonly placementDescription: "Applied when the invitation is accepted. Only units and positions you may delegate are listed.";
2689
+ readonly businessUnitLabel: "Business unit";
2690
+ readonly businessUnitPlaceholder: "No placement";
2691
+ readonly positionsLabel: "Positions";
2692
+ readonly sendInvite: "Send invite";
2693
+ readonly sentTitle: "Invitation created";
2694
+ readonly sentDescription: "Share the link below with the invitee. They will need to sign in to accept.";
2695
+ readonly linkLabel: "Accept link";
2696
+ readonly invitedAs: "{{email}} invited as {{role}}";
2697
+ readonly copyLinkLabel: "Copy invitation link";
2698
+ readonly loadFailed: "Failed to load invitations";
2699
+ readonly inviteFailed: "Failed to invite member";
2700
+ readonly status: {
2701
+ readonly all: "All";
2702
+ readonly pending: "Pending";
2703
+ readonly accepted: "Accepted";
2704
+ readonly rejected: "Rejected";
2705
+ readonly canceled: "Canceled";
2706
+ };
2707
+ };
2708
+ readonly settings: {
2709
+ readonly generalTitle: "General";
2710
+ readonly generalDescription: "Update your organization information.";
2711
+ readonly readOnlyNote: "Only owners can change settings.";
2712
+ readonly nameLabel: "Organization name";
2713
+ readonly slugLabel: "Slug";
2714
+ readonly logoLabel: "Logo";
2715
+ readonly logoUpload: "Upload";
2716
+ readonly logoReplace: "Replace";
2717
+ readonly logoClear: "Remove";
2718
+ readonly logoUploaded: "Logo uploaded — save to apply";
2719
+ readonly logoUploadFailed: "Failed to upload logo";
2720
+ readonly save: "Save changes";
2721
+ readonly saved: "Settings saved";
2722
+ readonly saveFailed: "Failed to save settings";
2723
+ readonly leaveTitle: "Leave organization";
2724
+ readonly leaveDescription: "You will lose access to this organization.";
2725
+ readonly leaveAction: "Leave";
2726
+ readonly leaveConfirmTitle: "Leave organization?";
2727
+ readonly leaveConfirmDescription: "Are you sure you want to leave {{name}}? You will lose access immediately.";
2728
+ readonly leaveConfirmAction: "Leave";
2729
+ readonly leftOrg: "You have left the organization";
2730
+ readonly leaveFailed: "Failed to leave organization";
2731
+ readonly dangerZone: "Danger zone";
2732
+ readonly deleteTitle: "Delete organization";
2733
+ readonly deleteDescription: "Permanently delete this organization and all its data.";
2734
+ readonly deleteAction: "Delete";
2735
+ readonly deleteConfirmTitle: "Delete organization?";
2736
+ readonly deleteConfirmDescription: "This action is irreversible. All data will be permanently deleted. Type the organization slug to confirm.";
2737
+ readonly deleteConfirmSlugLabel: "Type \"{{slug}}\" to confirm";
2738
+ readonly deleteConfirmAction: "Delete organization";
2739
+ readonly deleted: "Organization deleted";
2740
+ readonly deleteFailed: "Failed to delete organization";
2741
+ };
2742
+ readonly accept: {
2743
+ readonly title: "You have been invited";
2744
+ readonly description: "You have been invited to join {{orgName}} as {{role}}.";
2745
+ readonly errorTitle: "Invitation unavailable";
2746
+ readonly goToOrgs: "Go to organizations";
2747
+ readonly loading: "Loading invitation…";
2748
+ readonly organization: "Organization";
2749
+ readonly role: "Role";
2750
+ readonly expiresAt: "Expires";
2751
+ readonly accept: "Accept invitation";
2752
+ readonly accepted: "Invitation accepted";
2753
+ readonly acceptFailed: "Failed to accept invitation";
2754
+ readonly decline: "Decline";
2755
+ readonly declined: "Invitation declined";
2756
+ readonly declineFailed: "Failed to decline invitation";
2757
+ };
2758
+ readonly switcher: {
2759
+ readonly label: "Switch organization";
2760
+ readonly groupLabel: "Working organization";
2761
+ readonly groupHint: "New records are created here. Views show data from all your organizations.";
2762
+ readonly manageMembers: "Manage members";
2763
+ };
2764
+ };
2439
2765
  readonly notifications: {
2440
2766
  readonly regionLabel: "Notifications";
2441
2767
  readonly empty: "No notifications";
@@ -2452,6 +2778,9 @@ declare const en: {
2452
2778
  readonly viewApprovals: "View approvals";
2453
2779
  readonly noPendingApprovals: "No pending approvals";
2454
2780
  readonly openApprovalsInbox: "Open Approvals Inbox";
2781
+ readonly badgeTotal: "{{total}} total";
2782
+ readonly badgeNotifications: "{{unread}} notifications";
2783
+ readonly badgeApprovals: "{{approvals}} pending approvals";
2455
2784
  };
2456
2785
  readonly publicForm: {
2457
2786
  readonly submit: "Submit";
@@ -2725,6 +3054,7 @@ declare const en: {
2725
3054
  readonly dismiss: "Dismiss";
2726
3055
  readonly openOnCloud: "Open on cloud";
2727
3056
  readonly backHome: "Back to home";
3057
+ readonly updateTo: "Update";
2728
3058
  };
2729
3059
  readonly install: {
2730
3060
  readonly dialogTitle: "Install {{name}}";
@@ -2741,6 +3071,33 @@ declare const en: {
2741
3071
  readonly localManifestConflict: "{{message}}\nTip: a local app already owns this manifest_id. Remove it from objectstack.config.ts first.";
2742
3072
  readonly localUnauthorized: "Sign in to this runtime first, then try again.";
2743
3073
  readonly localMarketplaceUnavailable: "This runtime has no OS_CLOUD_URL configured, so the marketplace catalog is unreachable.";
3074
+ readonly updateTo: "Update → v{{version}}";
3075
+ readonly installedVersion: "Installed v{{version}}";
3076
+ };
3077
+ readonly org: {
3078
+ readonly heading: "Your organization";
3079
+ readonly install: "Install";
3080
+ readonly installed: "Installed {{name}}";
3081
+ readonly installedBadge: "Installed";
3082
+ readonly installing: "Installing…";
3083
+ };
3084
+ readonly disclosure: {
3085
+ readonly containsCode: "This package contains code";
3086
+ readonly reviewed: "Reviewed & approved";
3087
+ readonly unreviewed: "Not yet reviewed";
3088
+ readonly signed: "Signed";
3089
+ readonly grantsIntro: "On install, this package will be granted:";
3090
+ readonly services: "Platform services";
3091
+ readonly hooks: "Lifecycle hooks";
3092
+ readonly network: "Network access";
3093
+ readonly fs: "Filesystem access";
3094
+ readonly noPermissions: "Requests no special permissions.";
3095
+ readonly acknowledge: "I understand this package runs code and grants the permissions above.";
3096
+ readonly runtime: {
3097
+ readonly node: "In-process · full trust";
3098
+ readonly sandbox: "Sandboxed";
3099
+ readonly worker: "Out-of-process";
3100
+ };
2744
3101
  };
2745
3102
  readonly suggestedBindings: {
2746
3103
  readonly promptEveryone: "This app suggests granting \"{{set}}\" to all signed-in users (the Everyone position).";
@@ -3007,6 +3364,92 @@ declare const en: {
3007
3364
  readonly addSort: "Add sort";
3008
3365
  readonly removeSort: "Remove sort";
3009
3366
  };
3367
+ readonly collaboration: {
3368
+ readonly commentCount: "{{count}} comments";
3369
+ readonly commentCountOne: "{{count}} comment";
3370
+ readonly resolvedSuffix: " · Resolved";
3371
+ readonly sortComments: "Sort comments";
3372
+ readonly sortOldest: "Oldest";
3373
+ readonly sortNewest: "Newest";
3374
+ readonly resolve: "Resolve";
3375
+ readonly reopen: "Reopen";
3376
+ readonly justNow: "just now";
3377
+ readonly minutesAgo: "{{count}}m ago";
3378
+ readonly hoursAgo: "{{count}}h ago";
3379
+ readonly daysAgo: "{{count}}d ago";
3380
+ readonly edited: "(edited)";
3381
+ readonly reactionCount: "{{count}} reactions";
3382
+ readonly reactionCountOne: "{{count}} reaction";
3383
+ readonly addThumbsUp: "Add thumbs up";
3384
+ readonly reply: "Reply";
3385
+ readonly reactThumbsUp: "React with thumbs up";
3386
+ readonly reactHeart: "React with heart";
3387
+ readonly cancelReply: "Cancel reply";
3388
+ readonly replyingTo: "Replying to {{name}}…";
3389
+ readonly replyingToComment: "Replying to comment…";
3390
+ readonly commentPlaceholder: "Add a comment… (use @ to mention)";
3391
+ readonly send: "Send";
3392
+ readonly presentUserCount: "{{count}} users present";
3393
+ readonly presentUserCountOne: "{{count}} user present";
3394
+ readonly moreUserCount: "{{count}} more users";
3395
+ readonly moreUserCountOne: "{{count}} more user";
3396
+ readonly userStatusTitle: "{{name}} ({{status}})";
3397
+ readonly statusActive: "active";
3398
+ readonly statusIdle: "idle";
3399
+ readonly statusAway: "away";
3400
+ };
3401
+ readonly wizard: {
3402
+ readonly missingRequired: "Please complete the required fields: {{fields}}";
3403
+ };
3404
+ readonly appManagement: {
3405
+ readonly title: "Applications";
3406
+ readonly subtitle: "Manage all configured applications";
3407
+ readonly newApp: "New App";
3408
+ readonly searchLabel: "Search apps";
3409
+ readonly searchPlaceholder: "Search apps…";
3410
+ readonly selectedCount: "{{n}} selected";
3411
+ readonly bulkEnable: "Enable";
3412
+ readonly bulkDisable: "Disable";
3413
+ readonly selectAll: "Select all ({{n}})";
3414
+ readonly empty: "No apps found.";
3415
+ readonly defaultBadge: "Default";
3416
+ readonly active: "Active";
3417
+ readonly inactive: "Inactive";
3418
+ readonly selectApp: "Select {{name}}";
3419
+ readonly openApp: "Open app";
3420
+ readonly openAppNamed: "Open {{name}}";
3421
+ readonly editApp: "Edit app";
3422
+ readonly editAppNamed: "Edit {{name}}";
3423
+ readonly editWithAi: "Edit with AI";
3424
+ readonly editWithAiNamed: "Edit {{name}} with AI";
3425
+ readonly enableApp: "Enable app";
3426
+ readonly disableApp: "Disable app";
3427
+ readonly enableAppNamed: "Enable {{name}}";
3428
+ readonly disableAppNamed: "Disable {{name}}";
3429
+ readonly setDefault: "Set as default";
3430
+ readonly setDefaultNamed: "Set {{name}} as default";
3431
+ readonly deleteApp: "Delete app";
3432
+ readonly deleteAppNamed: "Delete {{name}}";
3433
+ readonly confirmDelete: "Click again to confirm delete";
3434
+ readonly confirmDeleteNamed: "Confirm delete {{name}}";
3435
+ readonly toast: {
3436
+ readonly noClient: "Cannot reach the metadata service";
3437
+ readonly unknownError: "unknown error";
3438
+ readonly appEnabled: "{{name}} enabled";
3439
+ readonly appDisabled: "{{name}} disabled";
3440
+ readonly toggleFailed: "Failed to toggle app status: {{reason}}";
3441
+ readonly setDefaultDone: "{{name}} set as default";
3442
+ readonly setDefaultFailed: "Failed to set default app: {{reason}}";
3443
+ readonly appDeleted: "{{name}} deleted";
3444
+ readonly deleteFailed: "Failed to delete app: {{reason}}";
3445
+ readonly bulkEnabled: "{{n}} apps enabled";
3446
+ readonly bulkDisabled: "{{n}} apps disabled";
3447
+ readonly bulkFailed: "Failed for {{n}}: {{details}}";
3448
+ readonly bulkFailureEntry: "{{name}} ({{reason}})";
3449
+ readonly bulkFailureJoiner: "; ";
3450
+ readonly bulkOperationFailed: "Bulk operation failed: {{reason}}";
3451
+ };
3452
+ };
3010
3453
  };
3011
3454
  export default en;
3012
3455
  export type TranslationKeys = typeof en;