@anzusystems/common-admin 1.47.0-beta.dev-1788935859 → 1.47.0-beta.dev-1789895853

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/labs.d.ts CHANGED
@@ -10,6 +10,7 @@ import { MaybeRefOrGetter } from 'vue';
10
10
  import { Method } from 'axios';
11
11
  import { PublicProps } from 'vue';
12
12
  import { Ref } from 'vue';
13
+ import { RouteLocationRaw } from 'vue-router';
13
14
  import { ShallowRef } from 'vue';
14
15
  import { ShallowUnwrapRef } from 'vue';
15
16
  import { UseDebounceFnReturn } from '@vueuse/shared';
@@ -36,8 +37,8 @@ declare const __VLS_base: DefineComponent<__VLS_PublicProps, {
36
37
  client: () => AxiosInstance;
37
38
  enableTop: boolean;
38
39
  hideButtons: boolean;
39
- formName: string;
40
40
  store: FilterStoreIdentifier | boolean;
41
+ formName: string;
41
42
  alwaysVisible: boolean;
42
43
  hideMore: boolean;
43
44
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
@@ -70,9 +71,9 @@ declare const __VLS_base_3: DefineComponent<__VLS_PublicProps_2, {
70
71
  userId: IntegerIdNullable;
71
72
  client: () => AxiosInstance;
72
73
  hideButtons: boolean;
74
+ store: FilterStoreIdentifier | boolean;
73
75
  formName: string;
74
76
  disableFilterUrlSync: boolean;
75
- store: FilterStoreIdentifier | boolean;
76
77
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
77
78
 
78
79
  declare const __VLS_base_4: DefineComponent<__VLS_Props_9, {
@@ -453,6 +454,10 @@ declare const __VLS_export_21: DefineComponent<__VLS_PublicProps_5, {}, {}, {},
453
454
  dirtyLabels: string[];
454
455
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
455
456
 
457
+ declare const __VLS_export_22: DefineComponent<__VLS_Props_15, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_15> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
458
+
459
+ declare const __VLS_export_23: DefineComponent<__VLS_Props_16, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_16> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
460
+
456
461
  declare const __VLS_export_3: __VLS_WithSlots_3<typeof __VLS_base_3, __VLS_Slots_3>;
457
462
 
458
463
  declare const __VLS_export_4: DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
@@ -634,6 +639,34 @@ declare type __VLS_Props_13 = {
634
639
 
635
640
  declare type __VLS_Props_14 = Props_4;
636
641
 
642
+ declare type __VLS_Props_15 = {
643
+ /** Which backend to ask. */
644
+ client: AxiosClientFn;
645
+ /** Identity used for api naming and error reporting -- `coreDam`, not `dam`, where they differ. */
646
+ system: string;
647
+ /** From the route, never component state: it picks the endpoint and has to survive a filter reset. */
648
+ type: LogTypeType;
649
+ /** Whole paths per type. Comes from the route-side descriptor, which the guard reads too. */
650
+ logPaths: LogPaths;
651
+ /** Where a row goes. The library cannot know an app's typed route names, so the app maps it. */
652
+ detailRoute: (log: Log) => RouteLocationRaw;
653
+ /** Where the app/audit dropdown goes. Same reason. */
654
+ typeRoute: (type: LogTypeType) => RouteLocationRaw;
655
+ /** Mandatory time bound, as admin-dam has today. Omitted means no bound at all. */
656
+ defaultTimeWindow?: LogTimeWindow | undefined;
657
+ /** `allowed` for the interval filter. Omitted means the library's full preset list. */
658
+ allowedTimeIntervals?: TimeIntervalToolsValue[] | undefined;
659
+ };
660
+
661
+ declare type __VLS_Props_16 = {
662
+ client: AxiosClientFn;
663
+ system: string;
664
+ /** From the route. A log id means nothing without the store it came from. */
665
+ type: LogTypeType;
666
+ id: string;
667
+ logPaths: LogPaths;
668
+ };
669
+
637
670
  declare type __VLS_Props_2 = {
638
671
  formName?: string;
639
672
  };
@@ -836,6 +869,10 @@ export declare const AListEditor: typeof __VLS_export_18;
836
869
 
837
870
  declare type AllowedFilterValues = number | number[] | string | string[] | null | undefined | boolean;
838
871
 
872
+ export declare const ALogDetailView: typeof __VLS_export_23;
873
+
874
+ export declare const ALogListView: typeof __VLS_export_22;
875
+
839
876
  export declare const ANestedSortableListEditor: typeof __VLS_export_20;
840
877
 
841
878
  declare interface AnzuUserAndTimeTrackingAware extends CreatedByAware {
@@ -848,6 +885,42 @@ declare interface AnzuUserMinimal extends BaseUser {
848
885
  id: IntegerId;
849
886
  }
850
887
 
888
+ export declare type ApiErrorContext = {
889
+ system: string;
890
+ entity: string;
891
+ /** The url actually requested, parameters substituted and query included -- not the template. */
892
+ url?: string;
893
+ /**
894
+ * The status the backend answered with, when it answered at all. Absent for a transport failure,
895
+ * where there is no response.
896
+ *
897
+ * It is here so an application can decide what is worth writing down without the call sites having
898
+ * to: a 404 that a caller probes for, for instance. Those used to be silenced per call, which made
899
+ * whether a failure was recorded depend on which call made it. The switch is the application's now,
900
+ * and this is what it needs to use it.
901
+ *
902
+ * Two statuses are not the application's to decide, and the library keeps them: 401 and 403. They
903
+ * are not an endpoint failing its contract, they are the session -- nobody is logged in, or this
904
+ * user may not -- and every admin in the fleet already branches on them and acts. Everything else
905
+ * reaches the logger and is filtered here, on this field.
906
+ */
907
+ status?: number;
908
+ };
909
+
910
+ export declare type ApiErrorLogger = (error: Error, context: ApiErrorContext) => void;
911
+
912
+ /**
913
+ * Called on every mount, not only when the type changes. The registry hands back the same
914
+ * `filterConfig` the previous visit left behind, so these flags still describe whichever type was
915
+ * open last. Landing straight on an `app` url after an audit visit -- a link, a bookmark, F5 --
916
+ * would otherwise send that visit's `resourceName` to the app endpoint.
917
+ *
918
+ * Three flags, not two -- `FiltersSelected` hides a chip on `render.selected`, so without the
919
+ * third one the bar would advertise a filter that is not being applied, and its close button
920
+ * would destroy the very value this approach exists to keep.
921
+ */
922
+ export declare const applyLogTypeVisibility: (filter: LogFilter, type: LogTypeType) => void;
923
+
851
924
  export declare const ASortableListEditor: typeof __VLS_export_19;
852
925
 
853
926
  export declare const ASubjectSelect: typeof __VLS_export_17;
@@ -1005,6 +1078,11 @@ declare interface DecoratedViewItem_2<T> extends ListViewItem<T> {
1005
1078
  canMoveDown: boolean;
1006
1079
  }
1007
1080
 
1081
+ export declare const DEFAULT_LOG_PATHS: LogPaths;
1082
+
1083
+ /** What reporting does until an application says otherwise; exported so a test can put it back. */
1084
+ export declare const defaultApiErrorLogger: ApiErrorLogger;
1085
+
1008
1086
  /**
1009
1087
  * UUID v4 as string.
1010
1088
  */
@@ -1034,10 +1112,12 @@ declare interface EmptySlotProps_3 {
1034
1112
  };
1035
1113
  }
1036
1114
 
1037
- declare type ExecuteRequestParams<T> = {
1115
+ export declare type ExecuteRequestParams<B> = {
1038
1116
  urlTemplate?: string;
1039
1117
  urlParams?: UrlParams;
1040
- object?: T;
1118
+ body?: B;
1119
+ /** Stops this one call, leaving the instance's other calls alone. */
1120
+ signal?: AbortSignal;
1041
1121
  };
1042
1122
 
1043
1123
  /**
@@ -1063,9 +1143,11 @@ export declare type ExposedNestedListEditorHandle<TItem extends Record<string, a
1063
1143
  hasUnsavedChanges: boolean;
1064
1144
  };
1065
1145
 
1066
- declare type FetchByIdsParams = {
1146
+ export declare type FetchByIdsParams = {
1067
1147
  urlTemplate?: string;
1068
1148
  urlParams?: UrlParams;
1149
+ /** Stops this one call, leaving the instance's other calls alone. */
1150
+ signal?: AbortSignal;
1069
1151
  };
1070
1152
 
1071
1153
  declare type FetchItemsMinimalByIdsType = ((ids: IntegerId[]) => Promise<any[]>) | ((ids: DocId[]) => Promise<any[]>);
@@ -1074,7 +1156,16 @@ declare type FetchItemsMinimalType = (pagination: Ref<Pagination>, filterData: F
1074
1156
 
1075
1157
  declare type FetchItemsMinimalType_2 = (pagination: Ref<Pagination>, filterData: FilterData, filterConfig: FilterConfig) => Promise<any[]>;
1076
1158
 
1077
- declare type FetchListBatchParams = {
1159
+ export declare type FetchItemsParams = {
1160
+ urlTemplate?: string;
1161
+ urlParams?: UrlParams;
1162
+ /** Stops this one call, leaving the instance's other calls alone. */
1163
+ signal?: AbortSignal;
1164
+ };
1165
+
1166
+ export declare type FetchListBatchParams = {
1167
+ /** Stops this one call, leaving the instance's other calls alone. */
1168
+ signal?: AbortSignal;
1078
1169
  urlTemplate?: string;
1079
1170
  urlParams?: UrlParams;
1080
1171
  sortBy?: string;
@@ -1083,10 +1174,12 @@ declare type FetchListBatchParams = {
1083
1174
  forceElastic?: boolean;
1084
1175
  };
1085
1176
 
1086
- declare type FetchListParams = {
1177
+ export declare type FetchListParams = {
1087
1178
  urlTemplate?: string;
1088
1179
  urlParams?: UrlParams;
1089
1180
  forceElastic?: boolean;
1181
+ /** Stops this one call, leaving the instance's other calls alone. */
1182
+ signal?: AbortSignal;
1090
1183
  };
1091
1184
 
1092
1185
  declare interface FilerRenderOptions {
@@ -1159,6 +1252,12 @@ declare type FilterVariant = 'search' | 'lt' | 'in' | 'notIn' | 'endsWith' | 'st
1159
1252
 
1160
1253
  declare type FilterVariant_2 = 'search' | 'lt' | 'in' | 'notIn' | 'endsWith' | 'startsWith' | 'memberOf' | 'contains' | 'neq' | 'gte' | 'gt' | 'eq' | 'lte' | 'custom';
1161
1254
 
1255
+ /**
1256
+ * Pretty-prints a JSON string, and hands back whatever it was given when that is not what it is.
1257
+ * Log context carries request and response bodies that are usually but not always JSON.
1258
+ */
1259
+ export declare const formatJson: (data: string) => string;
1260
+
1162
1261
  declare interface GeneralFilterOptions {
1163
1262
  system?: string;
1164
1263
  subject?: string;
@@ -1192,6 +1291,8 @@ declare type IntegerId = number;
1192
1291
  */
1193
1292
  declare type IntegerIdNullable = number | null;
1194
1293
 
1294
+ export declare const isLogType: (value: unknown) => value is LogTypeType;
1295
+
1195
1296
  /** Whether `router.push({ hash })` would leave the hash intact — see `buildFilterHash`. */
1196
1297
  export declare const isRouterSafeHash: (hash: string) => boolean;
1197
1298
 
@@ -1361,6 +1462,215 @@ export declare interface ListViewItem<TItem> {
1361
1462
  validationState?: ListEditorValidationState;
1362
1463
  }
1363
1464
 
1465
+ declare interface Log {
1466
+ id: string;
1467
+ message: string;
1468
+ datetime: DatetimeUTC;
1469
+ levelName: LogLevelType;
1470
+ context: {
1471
+ appVersion: string;
1472
+ appSystem: string;
1473
+ requestOriginAppVersion: string;
1474
+ path: string;
1475
+ method: string;
1476
+ contextId: string;
1477
+ userId: IntegerIdNullable;
1478
+ resourceName: string;
1479
+ resourceIds: string[];
1480
+ ip: string;
1481
+ response: string;
1482
+ content?: string;
1483
+ params: string;
1484
+ httpStatus: number;
1485
+ };
1486
+ _resourceName: string;
1487
+ _system: string;
1488
+ _type: string;
1489
+ }
1490
+
1491
+ export declare const LOG_ENTITY = "log";
1492
+
1493
+ declare interface LogActionsParams {
1494
+ client: AxiosClientFn;
1495
+ system: string;
1496
+ logPaths: LogPaths;
1497
+ type: LogTypeType;
1498
+ /**
1499
+ * Lets an ancestor own the flag, the way `usePagination` takes an external pagination ref --
1500
+ * the card that shows the spinner sits above the table that does the fetching.
1501
+ */
1502
+ loading?: Ref<boolean>;
1503
+ }
1504
+
1505
+ declare interface LogApiParams {
1506
+ client: AxiosClientFn;
1507
+ system: string;
1508
+ logPaths: LogPaths;
1509
+ type: LogTypeType;
1510
+ }
1511
+
1512
+ export declare interface LogFilter {
1513
+ filterConfig: FilterConfig<LogFilterFields>;
1514
+ filterData: FilterData<LogFilterFields>;
1515
+ }
1516
+
1517
+ declare type LogFilterFields = ReturnType<typeof logFilterFields>;
1518
+
1519
+ /**
1520
+ * A factory rather than a constant, because `defaultTimeWindow` cannot be expressed as a seeded
1521
+ * value: what makes the window always reach the query is `mandatory` plus `default` on the two
1522
+ * interval fields, and both are read out of this array when `createFilter` runs.
1523
+ */
1524
+ declare const logFilterFields: (window: LogTimeWindow | undefined) => ({
1525
+ name: "levelName";
1526
+ variant: "in";
1527
+ default: never[];
1528
+ type?: undefined;
1529
+ apiName?: undefined;
1530
+ render?: undefined;
1531
+ related?: undefined;
1532
+ mandatory?: undefined;
1533
+ exclude?: undefined;
1534
+ } | {
1535
+ name: "id";
1536
+ default: null;
1537
+ type: "string";
1538
+ variant?: undefined;
1539
+ apiName?: undefined;
1540
+ render?: undefined;
1541
+ related?: undefined;
1542
+ mandatory?: undefined;
1543
+ exclude?: undefined;
1544
+ } | {
1545
+ name: "contextId";
1546
+ apiName: string;
1547
+ default: null;
1548
+ type: "string";
1549
+ render: {
1550
+ skip: true;
1551
+ };
1552
+ variant?: undefined;
1553
+ related?: undefined;
1554
+ mandatory?: undefined;
1555
+ exclude?: undefined;
1556
+ } | {
1557
+ name: "message";
1558
+ variant: "startsWith";
1559
+ default: null;
1560
+ type: "string";
1561
+ render: {
1562
+ skip: true;
1563
+ };
1564
+ apiName?: undefined;
1565
+ related?: undefined;
1566
+ mandatory?: undefined;
1567
+ exclude?: undefined;
1568
+ } | {
1569
+ name: "appVersion";
1570
+ variant: "startsWith";
1571
+ apiName: string;
1572
+ default: null;
1573
+ type: "string";
1574
+ render?: undefined;
1575
+ related?: undefined;
1576
+ mandatory?: undefined;
1577
+ exclude?: undefined;
1578
+ } | {
1579
+ name: "userId";
1580
+ apiName: string;
1581
+ default: null;
1582
+ type: "integer";
1583
+ variant?: undefined;
1584
+ render?: undefined;
1585
+ related?: undefined;
1586
+ mandatory?: undefined;
1587
+ exclude?: undefined;
1588
+ } | {
1589
+ name: "resourceName";
1590
+ apiName: string;
1591
+ default: null;
1592
+ type: "string";
1593
+ variant?: undefined;
1594
+ render?: undefined;
1595
+ related?: undefined;
1596
+ mandatory?: undefined;
1597
+ exclude?: undefined;
1598
+ } | {
1599
+ name: "resourceIds";
1600
+ apiName: string;
1601
+ variant: "in";
1602
+ default: never[];
1603
+ type: "string";
1604
+ render?: undefined;
1605
+ related?: undefined;
1606
+ mandatory?: undefined;
1607
+ exclude?: undefined;
1608
+ } | {
1609
+ name: "datetimeFrom";
1610
+ apiName: string;
1611
+ type: "timeInterval";
1612
+ related: string;
1613
+ default: string | null;
1614
+ mandatory: boolean;
1615
+ render: {
1616
+ skip: true;
1617
+ };
1618
+ variant?: undefined;
1619
+ exclude?: undefined;
1620
+ } | {
1621
+ name: "datetimeTo";
1622
+ apiName: string;
1623
+ type: "timeInterval";
1624
+ exclude: true;
1625
+ default: string | null;
1626
+ mandatory: boolean;
1627
+ render: {
1628
+ skip: true;
1629
+ };
1630
+ variant?: undefined;
1631
+ related?: undefined;
1632
+ })[];
1633
+
1634
+ declare const LogLevel: {
1635
+ readonly Debug: "DEBUG";
1636
+ readonly Info: "INFO";
1637
+ readonly Notice: "NOTICE";
1638
+ readonly Warning: "WARNING";
1639
+ readonly Error: "ERROR";
1640
+ readonly Critical: "CRITICAL";
1641
+ readonly Alert: "ALERT";
1642
+ readonly Emergency: "EMERGENCY";
1643
+ };
1644
+
1645
+ declare type LogLevelType = (typeof LogLevel)[keyof typeof LogLevel];
1646
+
1647
+ /**
1648
+ * Full paths per type, not a segment appended to a shared prefix: brick exposes its app log at
1649
+ * `/adm/v1/log/journal` rather than `/adm/v1/log/app`, and nothing says the next backend will
1650
+ * differ in the same place.
1651
+ */
1652
+ export declare type LogPaths = Record<LogTypeType, string>;
1653
+
1654
+ export declare interface LogTimeWindow {
1655
+ from: DatetimeUTC;
1656
+ to: DatetimeUTC;
1657
+ }
1658
+
1659
+ /**
1660
+ * The two log stores every anzu backend exposes. This is a runtime value on purpose: the router
1661
+ * guard validates the `:type` path segment before any component mounts, and a bare TypeScript
1662
+ * type is erased by then. It is the single source of the valid set -- the dropdown iterates the
1663
+ * same object the guard checks against, so the two cannot drift apart.
1664
+ */
1665
+ export declare const LogType: {
1666
+ readonly App: "app";
1667
+ readonly Audit: "audit";
1668
+ };
1669
+
1670
+ export declare const LogTypeDefault: "app";
1671
+
1672
+ export declare type LogTypeType = (typeof LogType)[keyof typeof LogType];
1673
+
1364
1674
  export declare interface MakeFilterOption<TName extends string = string> {
1365
1675
  name: TName;
1366
1676
  default: AllowedFilterValues;
@@ -1642,7 +1952,12 @@ declare interface Props<TItem extends Record<string, any>> {
1642
1952
  disabled?: boolean;
1643
1953
  loading?: boolean;
1644
1954
  error?: string | null;
1955
+ /** Heading above the list. A ready translated string, like every text prop here. */
1645
1956
  title?: string | null;
1957
+ /**
1958
+ * Field shown in a collapsed row when no `#item-compact` slot is given. A dotted path reads
1959
+ * through nested objects (`texts.title`); a path that runs into nothing renders empty.
1960
+ */
1646
1961
  compactField?: string | null;
1647
1962
  statusField?: string | null;
1648
1963
  twoRows?: 'never' | 'mobile' | 'always';
@@ -1651,7 +1966,9 @@ declare interface Props<TItem extends Record<string, any>> {
1651
1966
  showDeleteButton?: boolean;
1652
1967
  showEditButton?: boolean;
1653
1968
  showAddAfterAction?: boolean;
1969
+ /** Label of the add button. A ready translated string; omit it for the library's own wording. */
1654
1970
  addLabel?: string | null;
1971
+ /** Heading of the empty state. A ready translated string. */
1655
1972
  emptyTitle?: string | null;
1656
1973
  disableRowClick?: boolean;
1657
1974
  disableDeleteConfirm?: boolean;
@@ -1745,7 +2062,12 @@ declare interface Props_2<TItem extends Record<string, any>> {
1745
2062
  disabled?: boolean;
1746
2063
  loading?: boolean;
1747
2064
  error?: string | null;
2065
+ /** Heading above the list. A ready translated string, like every text prop here. */
1748
2066
  title?: string | null;
2067
+ /**
2068
+ * Field shown in a collapsed row when no `#item-compact` slot is given. A dotted path reads
2069
+ * through nested objects (`texts.title`); a path that runs into nothing renders empty.
2070
+ */
1749
2071
  compactField?: string | null;
1750
2072
  statusField?: string | null;
1751
2073
  twoRows?: 'never' | 'mobile' | 'always';
@@ -1754,10 +2076,18 @@ declare interface Props_2<TItem extends Record<string, any>> {
1754
2076
  showDeleteButton?: boolean;
1755
2077
  showEditButton?: boolean;
1756
2078
  showAddAfterAction?: boolean;
2079
+ /** Label of the add button. A ready translated string; omit it for the library's own wording. */
1757
2080
  addLabel?: string | null;
2081
+ /** Heading of the empty state. A ready translated string. */
1758
2082
  emptyTitle?: string | null;
1759
2083
  disableRowClick?: boolean;
1760
2084
  disableDeleteConfirm?: boolean;
2085
+ /**
2086
+ * Disable unsaved-state tracking — no dirty markers, never reads as unsaved. For a list that is a
2087
+ * VIEW of data owned elsewhere (a display cache rebuilt from a parent's field, say): nothing in
2088
+ * such a component can ever clear an amber row, so it must not raise one. Mirrors `AListEditor`.
2089
+ */
2090
+ disableUnsaved?: boolean;
1761
2091
  deleteConfirmTitle?: string | null;
1762
2092
  deleteConfirmText?: string | null;
1763
2093
  /**
@@ -1853,7 +2183,12 @@ declare interface Props_3<TItem extends Record<string, any>> {
1853
2183
  disabled?: boolean;
1854
2184
  loading?: boolean;
1855
2185
  error?: string | null;
2186
+ /** Heading above the list. A ready translated string, like every text prop here. */
1856
2187
  title?: string | null;
2188
+ /**
2189
+ * Field shown in a collapsed row when no `#item-compact` slot is given. A dotted path reads
2190
+ * through nested objects (`texts.title`); a path that runs into nothing renders empty.
2191
+ */
1857
2192
  compactField?: string | null;
1858
2193
  statusField?: string | null;
1859
2194
  showAddButton?: boolean;
@@ -1864,10 +2199,18 @@ declare interface Props_3<TItem extends Record<string, any>> {
1864
2199
  showMoveToPosition?: boolean;
1865
2200
  showChangeParent?: boolean;
1866
2201
  showExpandToggle?: boolean;
2202
+ /** Label of the add button. A ready translated string; omit it for the library's own wording. */
1867
2203
  addLabel?: string | null;
2204
+ /** Heading of the empty state. A ready translated string. */
1868
2205
  emptyTitle?: string | null;
1869
2206
  disableRowClick?: boolean;
1870
2207
  disableDeleteConfirm?: boolean;
2208
+ /**
2209
+ * Disable unsaved-state tracking — no dirty markers, never reads as unsaved. For a list that is a
2210
+ * VIEW of data owned elsewhere (a display cache rebuilt from a parent's field, say): nothing in
2211
+ * such a component can ever clear an amber row, so it must not raise one. Mirrors `AListEditor`.
2212
+ */
2213
+ disableUnsaved?: boolean;
1871
2214
  deleteConfirmTitle?: string | null;
1872
2215
  deleteConfirmText?: string | null;
1873
2216
  /**
@@ -2081,6 +2424,19 @@ declare interface RowSlotProps_3<TItem extends Record<string, any>> {
2081
2424
  actions: RowActions_3<TItem>;
2082
2425
  }
2083
2426
 
2427
+ /**
2428
+ * Replaces the logger the api helpers report unexpected failures through, or turns reporting off
2429
+ * with `null`.
2430
+ *
2431
+ * It is one switch for the whole family rather than a flag on each instance, which is what it
2432
+ * replaces: whether a failure was written down used to depend on which helper made the call and how
2433
+ * that instance happened to be constructed.
2434
+ *
2435
+ * An application that wants these where it can see them passes its own:
2436
+ * `setApiErrorLogger((e, ctx) => Sentry.captureException(e, { extra: ctx }))`.
2437
+ */
2438
+ export declare const setApiErrorLogger: (fn: ApiErrorLogger | null) => void;
2439
+
2084
2440
  export declare interface SharedReorderRegistry {
2085
2441
  register: (id: symbol, movedCount: ComputedRef<number>, hasPendingChanges: ComputedRef<boolean>, validateAll: () => boolean) => void;
2086
2442
  unregister: (id: symbol) => void;
@@ -2197,62 +2553,146 @@ declare type UrlParams = {
2197
2553
  [key: string]: number | string;
2198
2554
  };
2199
2555
 
2200
- declare type UseApiAnyRequestReturnType<R, T = R> = {
2201
- executeRequest: (params?: ExecuteRequestParams<T>) => Promise<R>;
2202
- abortRequest: () => void;
2203
- };
2556
+ /**
2557
+ * A request that asks the backend to do something and reads nothing back -- a delete, or a call that
2558
+ * only starts work and answers 202. Any successful status resolves; a body, if one arrives, is
2559
+ * ignored rather than typed.
2560
+ */
2561
+ export declare const useApiCommand: <B = never>(params: UseApiRequestParams) => UseApiRequestReturnType<void, B>;
2204
2562
 
2205
- export declare const useApiFetchByIds: <R>(params: UseApiFetchByIdsParams) => UseApiFetchByIdsReturnType<R>;
2563
+ export declare const useApiFetchByIds: <T>(params: UseApiFetchByIdsParams) => UseApiFetchByIdsReturnType<T>;
2206
2564
 
2207
- declare type UseApiFetchByIdsParams = {
2565
+ export declare type UseApiFetchByIdsParams = {
2208
2566
  client: AxiosClientFn;
2209
2567
  system: string;
2210
2568
  entity: string;
2211
2569
  urlTemplate?: string;
2212
2570
  urlParams?: UrlParams;
2213
- options?: AxiosRequestConfig;
2571
+ /** Anything axios takes except what this helper decides: the method, the url, the body and the signal. */
2572
+ options?: Omit<AxiosRequestConfig, 'method' | 'url' | 'data' | 'signal'>;
2214
2573
  isSearchApi?: boolean;
2215
2574
  field?: string;
2216
- silentConsoleError?: boolean;
2575
+ cancelPrevious?: boolean;
2576
+ };
2577
+
2578
+ export declare type UseApiFetchByIdsReturnType<T> = {
2579
+ execute: (ids: DocId[] | IntegerId[], params?: FetchByIdsParams) => Promise<T[]>;
2580
+ abort: () => void;
2581
+ /**
2582
+ * True while this instance has a request in flight, false once the last one settles.
2583
+ *
2584
+ * It is here so a caller does not have to keep its own: the hand-rolled version is a ref cleared
2585
+ * in a `finally`, and that `finally` belongs to whichever call ended -- including one that
2586
+ * `cancelPrevious` just superseded, which turns the spinner off while the call the user is waiting
2587
+ * for is still running. This one never dips between a superseded call and the one that replaced it.
2588
+ */
2589
+ loading: Ref<boolean>;
2590
+ };
2591
+
2592
+ /**
2593
+ * A list read from an endpoint the caller has already written the query for, with no pagination.
2594
+ *
2595
+ * It exists because the fleet kept doing this through `useApiRequest<ApiResponseList<T[]>>`: build a
2596
+ * query by hand -- an order, a limit, a fixed filter -- bake it into the url, and read `.data` off
2597
+ * the envelope that comes back. That is a list fetch with the list part missing: nothing checks that
2598
+ * `data` is an array, so a malformed answer still hands back `undefined` typed as `T[]`, which is
2599
+ * the bug this whole family was built to end.
2600
+ *
2601
+ * `useApiFetchList` cannot serve them: it asks for a pagination ref, a `filterData` and a
2602
+ * `filterConfig`, and these calls have none -- their filters are decided at the call site and are
2603
+ * not the user's to change. So this is that helper with the pagination taken out: same core, same
2604
+ * error mapping, same list-body check, and it answers with the items rather than the envelope.
2605
+ *
2606
+ * It writes no metadata. An endpoint whose paging the user drives is `useApiFetchList`; a list read
2607
+ * page by page to the end is `useApiFetchListBatch`.
2608
+ */
2609
+ export declare const useApiFetchItems: <T>(params: UseApiFetchItemsParams) => UseApiFetchItemsReturnType<T>;
2610
+
2611
+ export declare type UseApiFetchItemsParams = {
2612
+ client: AxiosClientFn;
2613
+ system: string;
2614
+ entity: string;
2615
+ /**
2616
+ * The url, query and all: whatever built the query has already run by the time it gets here.
2617
+ *
2618
+ * `urlParams` are substituted into the PATH only -- `/article/:id/routes?locale=:locale` fills in
2619
+ * `:id` and sends `:locale` as it stands. This is the helper written for hand-made queries, so it
2620
+ * is the one place someone would reach for a placeholder in the query; put the value in the query
2621
+ * when building it, or pass it through `options.params` and let axios serialise it.
2622
+ */
2623
+ urlTemplate?: string;
2624
+ urlParams?: UrlParams;
2625
+ /** Anything axios takes except what this helper decides: the method, the url, the body and the signal. */
2626
+ options?: Omit<AxiosRequestConfig, 'method' | 'url' | 'data' | 'signal'>;
2627
+ cancelPrevious?: boolean;
2217
2628
  };
2218
2629
 
2219
- declare type UseApiFetchByIdsReturnType<R> = {
2220
- executeFetch: (ids: DocId[] | IntegerId[], params?: FetchByIdsParams) => Promise<R>;
2221
- abortFetch: () => void;
2630
+ export declare type UseApiFetchItemsReturnType<T> = {
2631
+ execute: (params?: FetchItemsParams) => Promise<T[]>;
2632
+ abort: () => void;
2633
+ /**
2634
+ * True while this instance has a request in flight, false once the last one settles.
2635
+ *
2636
+ * It is here so a caller does not have to keep its own: the hand-rolled version is a ref cleared
2637
+ * in a `finally`, and that `finally` belongs to whichever call ended -- including one that
2638
+ * `cancelPrevious` just superseded, which turns the spinner off while the call the user is waiting
2639
+ * for is still running. This one never dips between a superseded call and the one that replaced it.
2640
+ */
2641
+ loading: Ref<boolean>;
2222
2642
  };
2223
2643
 
2224
- export declare const useApiFetchList: <R>(params: UseApiFetchListParams) => UseApiFetchListReturnType<R>;
2644
+ export declare const useApiFetchList: <T>(params: UseApiFetchListParams) => UseApiFetchListReturnType<T>;
2225
2645
 
2226
- export declare const useApiFetchListBatch: <R>(params: UseApiFetchListBatchParams) => UseApiFetchListBatchReturnType<R>;
2646
+ export declare const useApiFetchListBatch: <T>(params: UseApiFetchListBatchParams) => UseApiFetchListBatchReturnType<T>;
2227
2647
 
2228
- declare type UseApiFetchListBatchParams = {
2648
+ export declare type UseApiFetchListBatchParams = {
2229
2649
  client: AxiosClientFn;
2230
2650
  system: string;
2231
2651
  entity: string;
2232
2652
  urlTemplate?: string;
2233
2653
  urlParams?: UrlParams;
2234
- options?: AxiosRequestConfig;
2235
- silentConsoleError?: boolean;
2654
+ /** Anything axios takes except what this helper decides: the method, the url, the body and the signal. */
2655
+ options?: Omit<AxiosRequestConfig, 'method' | 'url' | 'data' | 'signal'>;
2656
+ cancelPrevious?: boolean;
2236
2657
  };
2237
2658
 
2238
- declare type UseApiFetchListBatchReturnType<R> = {
2239
- executeFetch: (filterData: FilterData<any>, filterConfig: FilterConfig<any>, params?: FetchListBatchParams) => Promise<R>;
2240
- abortFetch: () => void;
2659
+ export declare type UseApiFetchListBatchReturnType<T> = {
2660
+ execute: (filterData: FilterData<any>, filterConfig: FilterConfig<any>, params?: FetchListBatchParams) => Promise<T[]>;
2661
+ abort: () => void;
2662
+ /**
2663
+ * True while this instance has a request in flight, false once the last one settles.
2664
+ *
2665
+ * It is here so a caller does not have to keep its own: the hand-rolled version is a ref cleared
2666
+ * in a `finally`, and that `finally` belongs to whichever call ended -- including one that
2667
+ * `cancelPrevious` just superseded, which turns the spinner off while the call the user is waiting
2668
+ * for is still running. This one never dips between a superseded call and the one that replaced it.
2669
+ */
2670
+ loading: Ref<boolean>;
2241
2671
  };
2242
2672
 
2243
- declare type UseApiFetchListParams = {
2673
+ export declare type UseApiFetchListParams = {
2244
2674
  client: AxiosClientFn;
2245
2675
  system: string;
2246
2676
  entity: string;
2247
2677
  urlTemplate?: string;
2248
2678
  urlParams?: UrlParams;
2249
- options?: AxiosRequestConfig;
2250
- silentConsoleError?: boolean;
2679
+ /** Anything axios takes except what this helper decides: the method, the url, the body and the signal. */
2680
+ options?: Omit<AxiosRequestConfig, 'method' | 'url' | 'data' | 'signal'>;
2681
+ cancelPrevious?: boolean;
2251
2682
  };
2252
2683
 
2253
- declare type UseApiFetchListReturnType<R> = {
2254
- executeFetch: (pagination: Ref<Pagination>, filterData: FilterData<any>, filterConfig: FilterConfig<any>, params?: FetchListParams) => Promise<R>;
2255
- abortFetch: () => void;
2684
+ export declare type UseApiFetchListReturnType<T> = {
2685
+ execute: (pagination: Ref<Pagination>, filterData: FilterData<any>, filterConfig: FilterConfig<any>, params?: FetchListParams) => Promise<T[]>;
2686
+ abort: () => void;
2687
+ /**
2688
+ * True while this instance has a request in flight, false once the last one settles.
2689
+ *
2690
+ * It is here so a caller does not have to keep its own: the hand-rolled version is a ref cleared
2691
+ * in a `finally`, and that `finally` belongs to whichever call ended -- including one that
2692
+ * `cancelPrevious` just superseded, which turns the spinner off while the call the user is waiting
2693
+ * for is still running. This one never dips between a superseded call and the one that replaced it.
2694
+ */
2695
+ loading: Ref<boolean>;
2256
2696
  };
2257
2697
 
2258
2698
  /**
@@ -2273,17 +2713,54 @@ export declare function useApiQueryBuilder(): {
2273
2713
  q: Ref<string[], string[]>;
2274
2714
  };
2275
2715
 
2276
- export declare const useApiRequest: <R, T = R>(params: UseApiRequestParams) => UseApiAnyRequestReturnType<R, T>;
2716
+ /**
2717
+ * A request to an endpoint that always answers with a body.
2718
+ *
2719
+ * A response without one is the endpoint breaking its own contract, not an empty answer, so it fails
2720
+ * like any other error rather than handing back a value the declared type does not admit. An
2721
+ * endpoint that answers nothing is `useApiCommand`; one that may answer either is `optionalBody`.
2722
+ *
2723
+ * `R` excludes `null`, `undefined` and `void` on purpose: those are ways of saying "no body", and a
2724
+ * caller saying that has chosen the wrong helper. It is also what makes the migration visible --
2725
+ * every `useApiRequest<void, …>` in the fleet stops compiling and names itself.
2726
+ */
2727
+ export declare function useApiRequest<R extends NonNullable<unknown>, B = never>(params: UseApiRequestParams & {
2728
+ optionalBody?: false;
2729
+ }): UseApiRequestReturnType<R, B>;
2730
+
2731
+ /**
2732
+ * The same, for an endpoint where a body is optional and its absence is a legitimate answer. The
2733
+ * caller narrows, which is the point -- use it only where the endpoint really is documented that way.
2734
+ */
2735
+ export declare function useApiRequest<R extends NonNullable<unknown>, B = never>(params: UseApiRequestParams & {
2736
+ optionalBody: true;
2737
+ }): UseApiRequestReturnType<R | undefined, B>;
2277
2738
 
2278
- declare type UseApiRequestParams = {
2739
+ export declare type UseApiRequestParams = {
2279
2740
  client: AxiosClientFn;
2280
2741
  method: Method;
2281
2742
  system: string;
2282
2743
  entity: string;
2283
2744
  urlTemplate?: string;
2284
2745
  urlParams?: UrlParams;
2285
- options?: AxiosRequestConfig;
2286
- silentConsoleError?: boolean;
2746
+ /** Anything axios takes except what this helper decides: the method, the url, the body and the signal. */
2747
+ options?: Omit<AxiosRequestConfig, 'method' | 'url' | 'data' | 'signal'>;
2748
+ /** Each call supersedes the one before it -- the autocomplete shape. */
2749
+ cancelPrevious?: boolean;
2750
+ };
2751
+
2752
+ export declare type UseApiRequestReturnType<R, B> = {
2753
+ execute: (params?: ExecuteRequestParams<B>) => Promise<R>;
2754
+ abort: () => void;
2755
+ /**
2756
+ * True while this instance has a request in flight, false once the last one settles.
2757
+ *
2758
+ * It is here so a caller does not have to keep its own: the hand-rolled version is a ref cleared
2759
+ * in a `finally`, and that `finally` belongs to whichever call ended -- including one that
2760
+ * `cancelPrevious` just superseded, which turns the spinner off while the call the user is waiting
2761
+ * for is still running. This one never dips between a superseded call and the one that replaced it.
2762
+ */
2763
+ loading: Ref<boolean>;
2287
2764
  };
2288
2765
 
2289
2766
  declare type UseCachedType = () => {
@@ -2292,6 +2769,15 @@ declare type UseCachedType = () => {
2292
2769
  addManualMinimal: any;
2293
2770
  };
2294
2771
 
2772
+ export declare const useFetchLog: ({ client, system, logPaths, type }: LogApiParams) => UseApiRequestReturnType<Log, null>;
2773
+
2774
+ /**
2775
+ * The backend and the endpoint both come from the caller, so these cannot be hoisted the way an
2776
+ * entity fetcher is -- every mount builds its own, which is also what gives each one its own
2777
+ * abort controller set.
2778
+ */
2779
+ export declare const useFetchLogList: ({ client, system, logPaths, type }: LogApiParams) => UseApiFetchListReturnType<Log>;
2780
+
2295
2781
  export declare function useFilterHelpers<F extends readonly MakeFilterOption<string>[] = readonly MakeFilterOption<string>[]>(filterData: FilterData<F>, filterConfig: FilterConfig<F>, moreOptions?: Partial<FilterHelpersMoreOptions>): {
2296
2782
  loadStoredFilters: (pagination: Ref<Pagination>, callback?: AnyFn) => boolean;
2297
2783
  resetFilter: (pagination: Ref<Pagination>, callback?: AnyFn) => void;
@@ -2323,10 +2809,10 @@ export declare function useFilterHelpers<F extends readonly MakeFilterOption<str
2323
2809
  export declare function useGuardedDelete<A extends unknown[], R>(guard: Pick<UseUnsavedChangesGuardApi, 'acknowledge' | 'unacknowledge'>, onDelete: (...args: A) => R): (...args: A) => R | Promise<Awaited<R>>;
2324
2810
 
2325
2811
  export declare function useJobApi<JobType extends JobBase = JobBase>(client: () => AxiosInstance, system: string): {
2326
- useFetchJobList: () => UseApiFetchListReturnType<JobType[]>;
2812
+ useFetchJobList: () => UseApiFetchListReturnType<JobType>;
2327
2813
  fetchJob: (id: number) => Promise<JobType>;
2328
2814
  createJob: (data: JobType) => Promise<JobType>;
2329
- deleteJob: (id: number) => Promise<JobType>;
2815
+ deleteJob: (id: number) => Promise<void>;
2330
2816
  };
2331
2817
 
2332
2818
  /**
@@ -2398,6 +2884,147 @@ export declare interface UseListEditorOptions {
2398
2884
  */
2399
2885
  export declare function useListEditorStateEntry<TItem extends Record<string, any>>(stateKey: string | undefined, bindings: ListEditorStateBindings<TItem>): ListEditorStateEntry<ListEditorHandle<TItem>> | null;
2400
2886
 
2887
+ export declare function useLogDetailActions(params: LogActionsParams): {
2888
+ log: Ref<{
2889
+ id: string;
2890
+ message: string;
2891
+ datetime: DatetimeUTC;
2892
+ levelName: LogLevelType;
2893
+ context: {
2894
+ appVersion: string;
2895
+ appSystem: string;
2896
+ requestOriginAppVersion: string;
2897
+ path: string;
2898
+ method: string;
2899
+ contextId: string;
2900
+ userId: IntegerIdNullable;
2901
+ resourceName: string;
2902
+ resourceIds: string[];
2903
+ ip: string;
2904
+ response: string;
2905
+ content?: string | undefined;
2906
+ params: string;
2907
+ httpStatus: number;
2908
+ };
2909
+ _resourceName: string;
2910
+ _system: string;
2911
+ _type: string;
2912
+ } | null, Log | {
2913
+ id: string;
2914
+ message: string;
2915
+ datetime: DatetimeUTC;
2916
+ levelName: LogLevelType;
2917
+ context: {
2918
+ appVersion: string;
2919
+ appSystem: string;
2920
+ requestOriginAppVersion: string;
2921
+ path: string;
2922
+ method: string;
2923
+ contextId: string;
2924
+ userId: IntegerIdNullable;
2925
+ resourceName: string;
2926
+ resourceIds: string[];
2927
+ ip: string;
2928
+ response: string;
2929
+ content?: string | undefined;
2930
+ params: string;
2931
+ httpStatus: number;
2932
+ };
2933
+ _resourceName: string;
2934
+ _system: string;
2935
+ _type: string;
2936
+ } | null>;
2937
+ detailLoading: Ref<boolean, boolean>;
2938
+ fetchData: (id: string) => Promise<void>;
2939
+ cancel: () => void;
2940
+ };
2941
+
2942
+ export declare function useLogFilter(system: string, window: LogTimeWindow | undefined): LogFilter;
2943
+
2944
+ /**
2945
+ * Everything here is per instance, unlike the module-level refs the admins used to keep: the
2946
+ * views are remounted on every system/type change, and a `finally` belonging to the instance
2947
+ * that just went away would otherwise clear the new one's loading flag.
2948
+ */
2949
+ export declare function useLogListActions(params: LogActionsParams): {
2950
+ listItems: Ref<{
2951
+ id: string;
2952
+ message: string;
2953
+ datetime: DatetimeUTC;
2954
+ levelName: LogLevelType;
2955
+ context: {
2956
+ appVersion: string;
2957
+ appSystem: string;
2958
+ requestOriginAppVersion: string;
2959
+ path: string;
2960
+ method: string;
2961
+ contextId: string;
2962
+ userId: IntegerIdNullable;
2963
+ resourceName: string;
2964
+ resourceIds: string[];
2965
+ ip: string;
2966
+ response: string;
2967
+ content?: string | undefined;
2968
+ params: string;
2969
+ httpStatus: number;
2970
+ };
2971
+ _resourceName: string;
2972
+ _system: string;
2973
+ _type: string;
2974
+ }[], Log[] | {
2975
+ id: string;
2976
+ message: string;
2977
+ datetime: DatetimeUTC;
2978
+ levelName: LogLevelType;
2979
+ context: {
2980
+ appVersion: string;
2981
+ appSystem: string;
2982
+ requestOriginAppVersion: string;
2983
+ path: string;
2984
+ method: string;
2985
+ contextId: string;
2986
+ userId: IntegerIdNullable;
2987
+ resourceName: string;
2988
+ resourceIds: string[];
2989
+ ip: string;
2990
+ response: string;
2991
+ content?: string | undefined;
2992
+ params: string;
2993
+ httpStatus: number;
2994
+ };
2995
+ _resourceName: string;
2996
+ _system: string;
2997
+ _type: string;
2998
+ }[]>;
2999
+ listLoading: Ref<boolean, boolean>;
3000
+ datatableHiddenColumns: Ref<string[], string[]>;
3001
+ fetchList: (pagination: Ref<Pagination>, filterData: FilterData<any>, filterConfig: FilterConfig<any>) => Promise<void>;
3002
+ cancel: () => void;
3003
+ };
3004
+
3005
+ export declare function useLogType(): {
3006
+ logTypeOptions: Ref<{
3007
+ value: LogTypeType;
3008
+ title: string;
3009
+ color?: string | undefined;
3010
+ active?: false | undefined;
3011
+ subtitle?: string | undefined;
3012
+ }[], ValueObjectOption<LogTypeType>[] | {
3013
+ value: LogTypeType;
3014
+ title: string;
3015
+ color?: string | undefined;
3016
+ active?: false | undefined;
3017
+ subtitle?: string | undefined;
3018
+ }[]>;
3019
+ getLogTypeOption: (value: LogTypeType) => {
3020
+ value: LogTypeType;
3021
+ title: string;
3022
+ color?: string | undefined;
3023
+ active?: false | undefined;
3024
+ subtitle?: string | undefined;
3025
+ } | undefined;
3026
+ };
3027
+
2401
3028
  /**
2402
3029
  * Nested list editor core. Pure data behavior shared by ANestedSortableListEditor.
2403
3030
  * Works on a tree of `{ data, children, meta }` nodes — shape-compatible with the
@@ -2553,7 +3180,7 @@ export declare const UserAdminConfigTypeDefault: "pinnedWidgets";
2553
3180
 
2554
3181
  export declare type UserAdminConfigTypeType = (typeof UserAdminConfigType)[keyof typeof UserAdminConfigType];
2555
3182
 
2556
- export declare function useSubjectSelect<TItem>(datatableConfig: any, datatableHiddenColumns: any, system: string, subject: string, executeFetch: (pagination: Ref<Pagination>, filterData: FilterData<any>, filterConfig: FilterConfig<any>, params?: FetchListParams) => Promise<TItem[]>, filterData: FilterData<any>, filterConfig: FilterConfig<any>, filterSortBy?: DatatableSortBy | null, fetchParams?: FetchListParams | undefined, enableActions?: boolean): {
3183
+ export declare function useSubjectSelect<TItem>(datatableConfig: any, datatableHiddenColumns: any, system: string, subject: string, execute: (pagination: Ref<Pagination>, filterData: FilterData<any>, filterConfig: FilterConfig<any>, params?: FetchListParams) => Promise<TItem[]>, filterData: FilterData<any>, filterConfig: FilterConfig<any>, filterSortBy?: DatatableSortBy | null, fetchParams?: FetchListParams | undefined, enableActions?: boolean): {
2557
3184
  items: Ref<TItem[], TItem[]>;
2558
3185
  selected: Ref<TItem[], TItem[]>;
2559
3186
  pagination: Ref<Pagination, Pagination>;
@@ -2667,11 +3294,11 @@ declare interface UseUnsavedChangesGuardOptions {
2667
3294
  export declare function useUnsavedSection(source: UnsavedSectionSource): void;
2668
3295
 
2669
3296
  export declare function useUserAdminConfigApi(client: () => AxiosInstance, system: string, entity?: string, endPoint?: string): {
2670
- useFetchUserAdminConfigList: () => UseApiFetchListReturnType<UserAdminConfig< UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets<string>>[]>;
3297
+ useFetchUserAdminConfigList: () => UseApiFetchListReturnType<UserAdminConfig< UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets<string>>>;
2671
3298
  fetchUserAdminConfig: (id: IntegerId) => Promise<UserAdminConfig< UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets<string>>>;
2672
3299
  createUserAdminConfig: (data: UserAdminConfig) => Promise<UserAdminConfig< UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets<string>>>;
2673
3300
  updateUserAdminConfig: (id: IntegerId, data: UserAdminConfig) => Promise<UserAdminConfig< UserAdminConfigDataFilterBookmark | UserAdminConfigDataPinnedWidgets<string>>>;
2674
- deleteUserAdminConfig: (id: IntegerId) => Promise<unknown>;
3301
+ deleteUserAdminConfig: (id: IntegerId) => Promise<void>;
2675
3302
  updateUserAdminConfigPositions: (ids: IntegerId[]) => Promise<{
2676
3303
  userAdminConfigs: IntegerId[];
2677
3304
  }>;
@@ -2699,20 +3326,10 @@ declare interface ViewBodySlotProps<TItem extends Record<string, any>> {
2699
3326
 
2700
3327
  export { }
2701
3328
 
2702
- declare global {
2703
- interface Window {
2704
- Sentry?: {
2705
- captureException(error: Error, context?: Record<string, any>): void;
2706
- captureMessage(message: string, context?: Record<string, any>): void;
2707
- setTag(key: string, value: string): void;
2708
- setUser(user: {
2709
- id: string;
2710
- email?: string;
2711
- username?: string;
2712
- }): void;
2713
- [key: string]: any;
2714
- };
2715
- }
3329
+
3330
+
3331
+ declare module 'vue-i18n' {
3332
+ export interface DefineLocaleMessage extends MessageSchema {}
2716
3333
  }
2717
3334
 
2718
3335