@loj-lang/rdsl-runtime 0.5.0 → 0.6.1
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/components/Badge.d.ts +2 -1
- package/dist/components/Badge.d.ts.map +1 -1
- package/dist/components/Badge.js +2 -2
- package/dist/components/ConfirmDialog.d.ts +6 -1
- package/dist/components/ConfirmDialog.d.ts.map +1 -1
- package/dist/components/ConfirmDialog.js +35 -6
- package/dist/components/DataTable.d.ts +35 -2
- package/dist/components/DataTable.d.ts.map +1 -1
- package/dist/components/DataTable.js +64 -38
- package/dist/components/DropdownButton.d.ts +11 -0
- package/dist/components/DropdownButton.d.ts.map +1 -0
- package/dist/components/DropdownButton.js +9 -0
- package/dist/components/ErrorBoundary.d.ts +18 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +19 -0
- package/dist/components/ErrorState.d.ts +6 -0
- package/dist/components/ErrorState.d.ts.map +1 -0
- package/dist/components/ErrorState.js +25 -0
- package/dist/components/FilterBar.d.ts +2 -0
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +3 -2
- package/dist/components/FormField.d.ts +7 -2
- package/dist/components/FormField.d.ts.map +1 -1
- package/dist/components/FormField.js +16 -5
- package/dist/components/GroupedDataTable.d.ts.map +1 -1
- package/dist/components/GroupedDataTable.js +40 -59
- package/dist/components/Pagination.js +1 -1
- package/dist/components/PivotDataTable.d.ts.map +1 -1
- package/dist/components/PivotDataTable.js +42 -65
- package/dist/components/Tag.d.ts +2 -1
- package/dist/components/Tag.d.ts.map +1 -1
- package/dist/components/Tag.js +2 -2
- package/dist/components/WorkflowSummary.js +6 -6
- package/dist/components/readFormatting.d.ts +2 -0
- package/dist/components/readFormatting.d.ts.map +1 -0
- package/dist/components/readFormatting.js +1 -0
- package/dist/derivations.d.ts +3 -0
- package/dist/derivations.d.ts.map +1 -0
- package/dist/derivations.js +1 -0
- package/dist/hooks/browserStorage.d.ts +3 -0
- package/dist/hooks/browserStorage.d.ts.map +1 -0
- package/dist/hooks/browserStorage.js +1 -0
- package/dist/hooks/deleteConfirmation.d.ts +20 -0
- package/dist/hooks/deleteConfirmation.d.ts.map +1 -0
- package/dist/hooks/deleteConfirmation.js +21 -0
- package/dist/hooks/exportDownload.d.ts +16 -0
- package/dist/hooks/exportDownload.d.ts.map +1 -0
- package/dist/hooks/exportDownload.js +55 -0
- package/dist/hooks/formDerivations.d.ts +7 -0
- package/dist/hooks/formDerivations.d.ts.map +1 -0
- package/dist/hooks/formDerivations.js +23 -0
- package/dist/hooks/formSeeds.d.ts +12 -0
- package/dist/hooks/formSeeds.d.ts.map +1 -0
- package/dist/hooks/formSeeds.js +26 -0
- package/dist/hooks/navigation.d.ts +37 -0
- package/dist/hooks/navigation.d.ts.map +1 -1
- package/dist/hooks/navigation.js +107 -70
- package/dist/hooks/readModelStore.d.ts +29 -0
- package/dist/hooks/readModelStore.d.ts.map +1 -0
- package/dist/hooks/readModelStore.js +135 -0
- package/dist/hooks/recordScopedWorkflow.d.ts +13 -0
- package/dist/hooks/recordScopedWorkflow.d.ts.map +1 -0
- package/dist/hooks/recordScopedWorkflow.js +40 -0
- package/dist/hooks/resourceClient.d.ts +39 -0
- package/dist/hooks/resourceClient.d.ts.map +1 -1
- package/dist/hooks/resourceClient.js +205 -71
- package/dist/hooks/resourceErrors.d.ts +13 -0
- package/dist/hooks/resourceErrors.d.ts.map +1 -0
- package/dist/hooks/resourceErrors.js +140 -0
- package/dist/hooks/resourceRowActions.d.ts +17 -0
- package/dist/hooks/resourceRowActions.d.ts.map +1 -0
- package/dist/hooks/resourceRowActions.js +48 -0
- package/dist/hooks/resourceStore.d.ts +2 -24
- package/dist/hooks/resourceStore.d.ts.map +1 -1
- package/dist/hooks/resourceStore.js +1 -164
- package/dist/hooks/resourceTarget.d.ts +1 -1
- package/dist/hooks/resourceTarget.d.ts.map +1 -1
- package/dist/hooks/resourceTarget.js +1 -22
- package/dist/hooks/serverListStore.d.ts +3 -0
- package/dist/hooks/serverListStore.d.ts.map +1 -0
- package/dist/hooks/serverListStore.js +1 -0
- package/dist/hooks/sessionCaches.d.ts +6 -0
- package/dist/hooks/sessionCaches.d.ts.map +1 -0
- package/dist/hooks/sessionCaches.js +14 -0
- package/dist/hooks/transitionedSetter.d.ts +2 -0
- package/dist/hooks/transitionedSetter.d.ts.map +1 -0
- package/dist/hooks/transitionedSetter.js +9 -0
- package/dist/hooks/useAuth.d.ts +18 -0
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +30 -0
- package/dist/hooks/useCollectionView.d.ts +2 -8
- package/dist/hooks/useCollectionView.d.ts.map +1 -1
- package/dist/hooks/useCollectionView.js +8 -36
- package/dist/hooks/useDocumentMetadata.d.ts.map +1 -1
- package/dist/hooks/useDocumentMetadata.js +57 -0
- package/dist/hooks/useGroupedCollectionView.d.ts +2 -7
- package/dist/hooks/useGroupedCollectionView.d.ts.map +1 -1
- package/dist/hooks/useGroupedCollectionView.js +8 -52
- package/dist/hooks/useI18n.d.ts +21 -0
- package/dist/hooks/useI18n.d.ts.map +1 -0
- package/dist/hooks/useI18n.js +86 -0
- package/dist/hooks/useReadModel.d.ts +15 -0
- package/dist/hooks/useReadModel.d.ts.map +1 -1
- package/dist/hooks/useReadModel.js +127 -40
- package/dist/hooks/useResource.d.ts +7 -0
- package/dist/hooks/useResource.d.ts.map +1 -1
- package/dist/hooks/useResource.js +159 -3
- package/dist/hooks/useStoredState.d.ts +15 -0
- package/dist/hooks/useStoredState.d.ts.map +1 -0
- package/dist/hooks/useStoredState.js +28 -0
- package/dist/hooks/useToast.d.ts.map +1 -1
- package/dist/hooks/useToast.js +1 -1
- package/dist/hooks/workflowTransition.d.ts +21 -0
- package/dist/hooks/workflowTransition.d.ts.map +1 -0
- package/dist/hooks/workflowTransition.js +54 -0
- package/dist/index.d.ts +35 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -5
- package/dist/policies/can.d.ts +2 -14
- package/dist/policies/can.d.ts.map +1 -1
- package/dist/policies/can.js +1 -160
- package/dist/workflow.d.ts +3 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +1 -0
- package/package.json +142 -26
|
@@ -1,67 +1,48 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
return '—';
|
|
5
|
-
if (format !== 'date')
|
|
6
|
-
return String(value);
|
|
7
|
-
const date = new Date(String(value));
|
|
8
|
-
return Number.isNaN(date.getTime()) ? String(value) : date.toLocaleString();
|
|
9
|
-
}
|
|
10
|
-
function nextSortState(current, field) {
|
|
11
|
-
if (!current || current.field !== field) {
|
|
12
|
-
return { field, direction: 'asc' };
|
|
13
|
-
}
|
|
14
|
-
if (current.direction === 'asc') {
|
|
15
|
-
return { field, direction: 'desc' };
|
|
16
|
-
}
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
2
|
+
import { nextTableSortState } from '../../../runtime-core/dist/tableUi.js';
|
|
3
|
+
import { formatDataTableValue, resolveDataTableActionIntent } from './DataTable.js';
|
|
19
4
|
export function GroupedDataTable({ columns, groupBy, groups, loading = false, sort = null, onSortChange, actions = [], selectedRowId = null, onSelectRow, selectionName = 'rdsl-grouped-table-selection', }) {
|
|
20
5
|
const groupColumns = columns.filter((column) => groupBy.includes(column.key));
|
|
21
6
|
const rowColumns = columns.filter((column) => !groupBy.includes(column.key));
|
|
22
7
|
const hasSelection = Boolean(onSelectRow);
|
|
23
|
-
return (React.createElement("div",
|
|
24
|
-
loading ? React.createElement("div",
|
|
25
|
-
!loading && groups.length === 0 ? React.createElement("div",
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
React.createElement("
|
|
37
|
-
React.createElement("
|
|
38
|
-
React.createElement("
|
|
39
|
-
hasSelection ? React.createElement("th", null, "Select") : null,
|
|
40
|
-
rowColumns.map((column) => {
|
|
41
|
-
const sortable = Boolean(column.sortable && onSortChange);
|
|
42
|
-
const activeSort = sort?.field === column.key ? sort.direction : null;
|
|
43
|
-
return (React.createElement("th", { key: column.key }, sortable ? (React.createElement("button", { type: "button", className: "rdsl-table-sort", onClick: () => onSortChange?.(nextSortState(sort, column.key)) },
|
|
44
|
-
column.label,
|
|
45
|
-
activeSort ? ` ${activeSort === 'asc' ? '↑' : '↓'}` : '')) : (column.label)));
|
|
46
|
-
}),
|
|
47
|
-
actions.length > 0 ? React.createElement("th", null, "Actions") : null)),
|
|
48
|
-
React.createElement("tbody", null, group.rows.map((record) => (React.createElement("tr", { key: record.id },
|
|
49
|
-
hasSelection ? (React.createElement("td", null,
|
|
50
|
-
React.createElement("input", { type: "radio", name: selectionName, checked: selectedRowId === String(record.id), onChange: () => onSelectRow?.(record) }))) : null,
|
|
8
|
+
return (React.createElement("div", null,
|
|
9
|
+
loading ? React.createElement("div", null, "Loading...") : null,
|
|
10
|
+
!loading && groups.length === 0 ? React.createElement("div", null, "No records") : null,
|
|
11
|
+
groups.map((group) => {
|
|
12
|
+
const firstRow = group.rows[0];
|
|
13
|
+
return (React.createElement("section", { key: group.id },
|
|
14
|
+
React.createElement("div", null, groupColumns.map((column) => {
|
|
15
|
+
const value = group.values[column.key];
|
|
16
|
+
return (React.createElement("div", { key: column.key },
|
|
17
|
+
React.createElement("strong", null, column.label),
|
|
18
|
+
React.createElement("span", null, column.render ? column.render(value, firstRow) : formatDataTableValue(value, column.format, column.enumKeyPrefix, column.enumLabels))));
|
|
19
|
+
})),
|
|
20
|
+
React.createElement("table", null,
|
|
21
|
+
React.createElement("thead", null,
|
|
22
|
+
React.createElement("tr", null,
|
|
23
|
+
hasSelection ? React.createElement("th", null, "Select") : null,
|
|
51
24
|
rowColumns.map((column) => {
|
|
52
|
-
const
|
|
53
|
-
|
|
25
|
+
const sortable = Boolean(column.sortable && onSortChange);
|
|
26
|
+
const activeSort = sort?.field === column.key ? sort.direction : null;
|
|
27
|
+
return (React.createElement("th", { key: column.key }, sortable ? (React.createElement("button", { type: "button", onClick: () => onSortChange?.(nextTableSortState(sort, column.key)) },
|
|
28
|
+
column.label,
|
|
29
|
+
activeSort ? ` ${activeSort === 'asc' ? '↑' : '↓'}` : '')) : (column.label)));
|
|
54
30
|
}),
|
|
55
|
-
actions.length > 0 ?
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
31
|
+
actions.length > 0 ? React.createElement("th", null, "Actions") : null)),
|
|
32
|
+
React.createElement("tbody", null, group.rows.map((record) => (React.createElement("tr", { key: record.id },
|
|
33
|
+
hasSelection ? (React.createElement("td", null,
|
|
34
|
+
React.createElement("input", { type: "radio", name: selectionName, checked: selectedRowId === String(record.id), onChange: () => onSelectRow?.(record) }))) : null,
|
|
35
|
+
rowColumns.map((column) => {
|
|
36
|
+
const value = record[column.key];
|
|
37
|
+
return (React.createElement("td", { key: column.key }, column.render ? column.render(value, record) : formatDataTableValue(value, column.format, column.enumKeyPrefix, column.enumLabels)));
|
|
38
|
+
}),
|
|
39
|
+
actions.length > 0 ? (React.createElement("td", null,
|
|
40
|
+
React.createElement("div", null, actions.map((action) => {
|
|
41
|
+
const intent = resolveDataTableActionIntent(action);
|
|
42
|
+
if (action.href) {
|
|
43
|
+
return (React.createElement("a", { key: action.label, "data-intent": intent, href: action.href(record) }, action.label));
|
|
44
|
+
}
|
|
45
|
+
return (React.createElement("button", { key: action.label, type: "button", "data-intent": intent, onClick: () => action.onClick?.(record) }, action.label));
|
|
46
|
+
})))) : null)))))));
|
|
47
|
+
})));
|
|
67
48
|
}
|
|
@@ -5,7 +5,7 @@ function clampPage(page, total) {
|
|
|
5
5
|
export function Pagination({ current, total, onChange }) {
|
|
6
6
|
const totalPages = Math.max(total, 1);
|
|
7
7
|
const currentPage = clampPage(current, totalPages);
|
|
8
|
-
return (React.createElement("nav", {
|
|
8
|
+
return (React.createElement("nav", { "aria-label": "Pagination" },
|
|
9
9
|
React.createElement("button", { type: "button", disabled: currentPage <= 1, onClick: () => onChange(currentPage - 1) }, "Previous"),
|
|
10
10
|
Array.from({ length: totalPages }, (_, index) => index + 1).map((page) => (React.createElement("button", { key: page, type: "button", "aria-current": page === currentPage ? 'page' : undefined, disabled: page === currentPage, onClick: () => onChange(page) }, page))),
|
|
11
11
|
React.createElement("button", { type: "button", disabled: currentPage >= totalPages, onClick: () => onChange(currentPage + 1) }, "Next")));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotDataTable.d.ts","sourceRoot":"","sources":["../../src/components/PivotDataTable.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PivotDataTable.d.ts","sourceRoot":"","sources":["../../src/components/PivotDataTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvE,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,EAAE,CAAC;CACX;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IAC3D,OAAO,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EACvD,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,EACN,OAAe,EACf,OAAY,EACZ,aAAoB,EACpB,WAAW,EACX,aAA4C,GAC7C,EAAE,mBAAmB,CAAC,CAAC,CAAC,eA2GxB"}
|
|
@@ -1,72 +1,49 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
return '—';
|
|
5
|
-
if (format !== 'date')
|
|
6
|
-
return String(value);
|
|
7
|
-
const date = new Date(String(value));
|
|
8
|
-
return Number.isNaN(date.getTime()) ? String(value) : date.toLocaleString();
|
|
9
|
-
}
|
|
10
|
-
function collectPivotValues(groups, pivotBy) {
|
|
11
|
-
const values = [];
|
|
12
|
-
for (const group of groups) {
|
|
13
|
-
for (const row of group.rows) {
|
|
14
|
-
const value = row[pivotBy];
|
|
15
|
-
const key = value == null ? '—' : String(value);
|
|
16
|
-
if (!values.includes(key)) {
|
|
17
|
-
values.push(key);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return values;
|
|
22
|
-
}
|
|
2
|
+
import { collectPivotValues } from '../../../runtime-core/dist/tableUi.js';
|
|
3
|
+
import { formatDataTableValue, resolveDataTableActionIntent } from './DataTable.js';
|
|
23
4
|
export function PivotDataTable({ columns, groupBy, pivotBy, groups, loading = false, actions = [], selectedRowId = null, onSelectRow, selectionName = 'rdsl-pivot-table-selection', }) {
|
|
24
5
|
const groupColumns = columns.filter((column) => groupBy.includes(column.key));
|
|
25
6
|
const pivotColumns = columns.filter((column) => !groupBy.includes(column.key) && column.key !== pivotBy);
|
|
26
7
|
const pivotValues = React.useMemo(() => collectPivotValues(groups, pivotBy), [groups, pivotBy]);
|
|
27
8
|
const hasSelection = Boolean(onSelectRow);
|
|
28
|
-
return (React.createElement("div",
|
|
29
|
-
loading ? React.createElement("div",
|
|
30
|
-
!loading && groups.length === 0 ? React.createElement("div",
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
React.createElement("
|
|
42
|
-
React.createElement("
|
|
43
|
-
|
|
44
|
-
React.createElement("
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}))) : null)))))));
|
|
69
|
-
}))))));
|
|
70
|
-
})
|
|
71
|
-
: null));
|
|
9
|
+
return (React.createElement("div", null,
|
|
10
|
+
loading ? React.createElement("div", null, "Loading...") : null,
|
|
11
|
+
!loading && groups.length === 0 ? React.createElement("div", null, "No records") : null,
|
|
12
|
+
groups.map((group) => {
|
|
13
|
+
const firstRow = group.rows[0];
|
|
14
|
+
return (React.createElement("section", { key: group.id },
|
|
15
|
+
React.createElement("div", null, groupColumns.map((column) => {
|
|
16
|
+
const value = group.values[column.key];
|
|
17
|
+
return (React.createElement("div", { key: column.key },
|
|
18
|
+
React.createElement("strong", null, column.label),
|
|
19
|
+
React.createElement("span", null, column.render ? column.render(value, firstRow) : formatDataTableValue(value, column.format, column.enumKeyPrefix, column.enumLabels))));
|
|
20
|
+
})),
|
|
21
|
+
React.createElement("table", null,
|
|
22
|
+
React.createElement("thead", null,
|
|
23
|
+
React.createElement("tr", null, pivotValues.map((value) => (React.createElement("th", { key: value }, value))))),
|
|
24
|
+
React.createElement("tbody", null,
|
|
25
|
+
React.createElement("tr", null, pivotValues.map((value) => {
|
|
26
|
+
const rows = group.rows.filter((row) => {
|
|
27
|
+
const rowValue = row[pivotBy];
|
|
28
|
+
return (rowValue == null ? '—' : String(rowValue)) === value;
|
|
29
|
+
});
|
|
30
|
+
return (React.createElement("td", { key: value }, rows.length === 0 ? (React.createElement("div", null, "\u2014")) : (React.createElement("div", null, rows.map((record) => (React.createElement("div", { key: record.id },
|
|
31
|
+
hasSelection ? (React.createElement("label", null,
|
|
32
|
+
React.createElement("strong", null, "Select"),
|
|
33
|
+
React.createElement("input", { type: "radio", name: selectionName, checked: selectedRowId === String(record.id), onChange: () => onSelectRow?.(record) }))) : null,
|
|
34
|
+
pivotColumns.map((column) => {
|
|
35
|
+
const columnValue = record[column.key];
|
|
36
|
+
return (React.createElement("div", { key: column.key },
|
|
37
|
+
React.createElement("strong", null, column.label),
|
|
38
|
+
React.createElement("span", null, column.render ? column.render(columnValue, record) : formatDataTableValue(columnValue, column.format, column.enumKeyPrefix, column.enumLabels))));
|
|
39
|
+
}),
|
|
40
|
+
actions.length > 0 ? (React.createElement("div", null, actions.map((action) => {
|
|
41
|
+
const intent = resolveDataTableActionIntent(action);
|
|
42
|
+
if (action.href) {
|
|
43
|
+
return (React.createElement("a", { key: action.label, "data-intent": intent, href: action.href(record) }, action.label));
|
|
44
|
+
}
|
|
45
|
+
return (React.createElement("button", { key: action.label, type: "button", "data-intent": intent, onClick: () => action.onClick?.(record) }, action.label));
|
|
46
|
+
}))) : null)))))));
|
|
47
|
+
}))))));
|
|
48
|
+
})));
|
|
72
49
|
}
|
package/dist/components/Tag.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export interface TagProps {
|
|
2
2
|
value: string;
|
|
3
3
|
colors: Record<string, string>;
|
|
4
|
+
displayValue?: string;
|
|
4
5
|
}
|
|
5
|
-
export declare function Tag({ value, colors }: TagProps): JSX.Element;
|
|
6
|
+
export declare function Tag({ value, colors, displayValue }: TagProps): JSX.Element;
|
|
6
7
|
//# sourceMappingURL=Tag.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tag.d.ts","sourceRoot":"","sources":["../../src/components/Tag.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Tag.d.ts","sourceRoot":"","sources":["../../src/components/Tag.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,QAAQ,eAO5D"}
|
package/dist/components/Tag.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export function Tag({ value, colors }) {
|
|
2
|
+
export function Tag({ value, colors, displayValue }) {
|
|
3
3
|
const color = colors[value] ?? 'gray';
|
|
4
|
-
return (React.createElement("span", { className: "rdsl-tag", style: { backgroundColor: color, color: 'white', padding: '0.125rem 0.5rem', borderRadius: '999px' } }, value));
|
|
4
|
+
return (React.createElement("span", { className: "rdsl-tag", style: { backgroundColor: color, color: 'white', padding: '0.125rem 0.5rem', borderRadius: '999px' } }, displayValue ?? value));
|
|
5
5
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export function WorkflowSummary({ stateHeading, stateLabel, currentStepName, nextStepName, steps, }) {
|
|
3
|
-
return (React.createElement("section",
|
|
4
|
-
React.createElement("div",
|
|
3
|
+
return (React.createElement("section", null,
|
|
4
|
+
React.createElement("div", null,
|
|
5
5
|
React.createElement("strong", null, stateHeading),
|
|
6
|
-
React.createElement("span", {
|
|
7
|
-
React.createElement("div",
|
|
6
|
+
React.createElement("span", { "data-intent": "default" }, stateLabel)),
|
|
7
|
+
React.createElement("div", null,
|
|
8
8
|
React.createElement("strong", null, "Current step"),
|
|
9
9
|
React.createElement("span", null, currentStepName ?? '—')),
|
|
10
|
-
nextStepName ? (React.createElement("div",
|
|
10
|
+
nextStepName ? (React.createElement("div", null,
|
|
11
11
|
React.createElement("strong", null, "Next step"),
|
|
12
12
|
React.createElement("span", null, nextStepName))) : null,
|
|
13
|
-
steps.length > 0 ? (React.createElement("ol",
|
|
13
|
+
steps.length > 0 ? (React.createElement("ol", null, steps.map((step) => (React.createElement("li", { key: step.name },
|
|
14
14
|
React.createElement("strong", null, step.name),
|
|
15
15
|
' ',
|
|
16
16
|
React.createElement("span", null, step.status)))))) : null));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readFormatting.d.ts","sourceRoot":"","sources":["../../src/components/readFormatting.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,wBAAwB,GACzB,MAAM,8CAA8C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { formatReadValue, resolveModelDisplayValue, } from '../../../runtime-core/dist/readFormatting.js';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { applyDerivedListItems, applyDerivedObjectFields, nativeExprCallBuiltin, nativeExprEquals, nativeExprInList, nativeExprLike, nativeExprQuantifier, nativeExprReadPath, } from '../../runtime-core/dist/derivations.js';
|
|
2
|
+
export type { CompiledDerivationEntry } from '../../runtime-core/dist/derivations.js';
|
|
3
|
+
//# sourceMappingURL=derivations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivations.d.ts","sourceRoot":"","sources":["../src/derivations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { applyDerivedListItems, applyDerivedObjectFields, nativeExprCallBuiltin, nativeExprEquals, nativeExprInList, nativeExprLike, nativeExprQuantifier, nativeExprReadPath, } from '../../runtime-core/dist/derivations.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserStorage.d.ts","sourceRoot":"","sources":["../../src/hooks/browserStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACzG,YAAY,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { readStoredJsonValue, writeStoredJsonValue } from '../../../runtime-core/dist/browserStorage.js';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface DeleteConfirmationResource {
|
|
2
|
+
deleteItem(id: string): Promise<unknown>;
|
|
3
|
+
}
|
|
4
|
+
export declare function useDeleteConfirmation(options: {
|
|
5
|
+
resource: DeleteConfirmationResource;
|
|
6
|
+
confirmMessage: string;
|
|
7
|
+
successMessage: string;
|
|
8
|
+
afterDelete?: () => void;
|
|
9
|
+
}): {
|
|
10
|
+
confirmState: {
|
|
11
|
+
open: boolean;
|
|
12
|
+
id?: string;
|
|
13
|
+
message?: string;
|
|
14
|
+
};
|
|
15
|
+
requestDelete: (id: string) => void;
|
|
16
|
+
confirmDelete: () => Promise<void>;
|
|
17
|
+
cancelDelete: () => void;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=deleteConfirmation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deleteConfirmation.d.ts","sourceRoot":"","sources":["../../src/hooks/deleteConfirmation.ts"],"names":[],"mappings":"AAGA,UAAU,0BAA0B;IAClC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,QAAQ,EAAE,0BAA0B,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B,GAAG;IACF,YAAY,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAsBA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useToast } from './useToast.js';
|
|
3
|
+
export function useDeleteConfirmation(options) {
|
|
4
|
+
const toast = useToast();
|
|
5
|
+
const [confirmState, setConfirmState] = React.useState({ open: false });
|
|
6
|
+
const requestDelete = React.useCallback((id) => {
|
|
7
|
+
setConfirmState({ open: true, id, message: options.confirmMessage });
|
|
8
|
+
}, [options.confirmMessage]);
|
|
9
|
+
const cancelDelete = React.useCallback(() => {
|
|
10
|
+
setConfirmState({ open: false });
|
|
11
|
+
}, []);
|
|
12
|
+
const confirmDelete = React.useCallback(async () => {
|
|
13
|
+
if (confirmState.id) {
|
|
14
|
+
await options.resource.deleteItem(confirmState.id);
|
|
15
|
+
toast.success(options.successMessage);
|
|
16
|
+
options.afterDelete?.();
|
|
17
|
+
}
|
|
18
|
+
setConfirmState({ open: false });
|
|
19
|
+
}, [confirmState.id, options.afterDelete, options.resource, options.successMessage, toast]);
|
|
20
|
+
return { confirmState, requestDelete, confirmDelete, cancelDelete };
|
|
21
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ResourceExportPayload, ResourceListQuery } from './resourceClient.js';
|
|
2
|
+
interface ExportDownloadResource {
|
|
3
|
+
exportList(format: string, query?: ResourceListQuery): Promise<ResourceExportPayload>;
|
|
4
|
+
}
|
|
5
|
+
export declare function useExportDownload(options: {
|
|
6
|
+
resource: ExportDownloadResource;
|
|
7
|
+
buildQuery: (format: 'csv' | 'xlsx') => ResourceListQuery;
|
|
8
|
+
resolveFallbackFilename: (format: 'csv' | 'xlsx') => string;
|
|
9
|
+
readyMessage: string;
|
|
10
|
+
failedMessage: string;
|
|
11
|
+
}): {
|
|
12
|
+
exportInFlight: boolean;
|
|
13
|
+
handleExport: (format: 'csv' | 'xlsx') => Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=exportDownload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exportDownload.d.ts","sourceRoot":"","sources":["../../src/hooks/exportDownload.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,UAAU,sBAAsB;IAC9B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACvF;AA8BD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,KAAK,iBAAiB,CAAC;IAC1D,uBAAuB,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,KAAK,MAAM,CAAC;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG;IACF,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CA2BA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { resolveDisplayableErrorMessage } from './resourceErrors.js';
|
|
3
|
+
import { useToast } from './useToast.js';
|
|
4
|
+
function downloadExportPayload(payload, format, fallbackFilename) {
|
|
5
|
+
if (typeof window === 'undefined') {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const blob = new Blob([payload.bytes], {
|
|
9
|
+
type: payload.contentType || (format === 'xlsx'
|
|
10
|
+
? 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
11
|
+
: 'text/csv; charset=utf-8'),
|
|
12
|
+
});
|
|
13
|
+
const downloadUrl = window.URL.createObjectURL(blob);
|
|
14
|
+
const anchor = document.createElement('a');
|
|
15
|
+
try {
|
|
16
|
+
anchor.href = downloadUrl;
|
|
17
|
+
anchor.download = payload.filename || fallbackFilename;
|
|
18
|
+
document.body.appendChild(anchor);
|
|
19
|
+
anchor.click();
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
if (anchor.parentNode) {
|
|
23
|
+
anchor.parentNode.removeChild(anchor);
|
|
24
|
+
}
|
|
25
|
+
window.URL.revokeObjectURL(downloadUrl);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function useExportDownload(options) {
|
|
29
|
+
const toast = useToast();
|
|
30
|
+
const [exportInFlight, setExportInFlight] = React.useState(false);
|
|
31
|
+
const exportInFlightRef = React.useRef(false);
|
|
32
|
+
const handleExport = React.useCallback(async (format) => {
|
|
33
|
+
if (exportInFlightRef.current) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
exportInFlightRef.current = true;
|
|
37
|
+
setExportInFlight(true);
|
|
38
|
+
try {
|
|
39
|
+
const exported = await options.resource.exportList(format, options.buildQuery(format));
|
|
40
|
+
downloadExportPayload(exported, format, options.resolveFallbackFilename(format));
|
|
41
|
+
toast.success(options.readyMessage);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
toast.error(resolveDisplayableErrorMessage(err, options.failedMessage));
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
exportInFlightRef.current = false;
|
|
48
|
+
setExportInFlight(false);
|
|
49
|
+
}
|
|
50
|
+
}, [options, toast]);
|
|
51
|
+
return {
|
|
52
|
+
exportInFlight,
|
|
53
|
+
handleExport,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface DerivedFieldSetterSpec {
|
|
2
|
+
name: string;
|
|
3
|
+
field: string;
|
|
4
|
+
kind: 'string' | 'number' | 'boolean';
|
|
5
|
+
}
|
|
6
|
+
export declare function buildDerivedFieldSetters<T extends object>(specs: readonly DerivedFieldSetterSpec[]): Record<string, (target: T, value: unknown) => void>;
|
|
7
|
+
//# sourceMappingURL=formDerivations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formDerivations.d.ts","sourceRoot":"","sources":["../../src/hooks/formDerivations.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CACvC;AAED,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,EACvD,KAAK,EAAE,SAAS,sBAAsB,EAAE,GACvC,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAsBrD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function buildDerivedFieldSetters(specs) {
|
|
2
|
+
return Object.fromEntries(specs.map((spec) => [
|
|
3
|
+
spec.name,
|
|
4
|
+
(target, value) => {
|
|
5
|
+
const record = target;
|
|
6
|
+
if (spec.kind === 'number') {
|
|
7
|
+
const parsed = Number(value);
|
|
8
|
+
if (!Number.isNaN(parsed)) {
|
|
9
|
+
record[spec.field] = parsed;
|
|
10
|
+
}
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (value == null) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (spec.kind === 'boolean') {
|
|
17
|
+
record[spec.field] = Boolean(value);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
record[spec.field] = String(value);
|
|
21
|
+
},
|
|
22
|
+
]));
|
|
23
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface SeedParamApplier<T extends object> {
|
|
2
|
+
name: string;
|
|
3
|
+
apply: (target: T, value: string) => void;
|
|
4
|
+
}
|
|
5
|
+
export interface SeedParamSpec {
|
|
6
|
+
name: string;
|
|
7
|
+
field: string;
|
|
8
|
+
kind: 'string' | 'number' | 'boolean' | 'enum';
|
|
9
|
+
enumValues?: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function buildSeedParamAppliers<T extends object>(specs: readonly SeedParamSpec[]): Array<SeedParamApplier<T>>;
|
|
12
|
+
//# sourceMappingURL=formSeeds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formSeeds.d.ts","sourceRoot":"","sources":["../../src/hooks/formSeeds.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EACrD,KAAK,EAAE,SAAS,aAAa,EAAE,GAC9B,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAyB5B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function buildSeedParamAppliers(specs) {
|
|
2
|
+
return specs.map((spec) => ({
|
|
3
|
+
name: spec.name,
|
|
4
|
+
apply: (target, value) => {
|
|
5
|
+
const record = target;
|
|
6
|
+
if (spec.kind === 'number') {
|
|
7
|
+
const parsed = Number(value);
|
|
8
|
+
if (!Number.isNaN(parsed)) {
|
|
9
|
+
record[spec.field] = parsed;
|
|
10
|
+
}
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (spec.kind === 'boolean') {
|
|
14
|
+
record[spec.field] = value === 'true';
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (spec.kind === 'enum') {
|
|
18
|
+
if (spec.enumValues?.includes(value)) {
|
|
19
|
+
record[spec.field] = value;
|
|
20
|
+
}
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
record[spec.field] = value;
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
@@ -2,10 +2,39 @@ export declare function normalizeAppBasePath(value: string | null | undefined):
|
|
|
2
2
|
export declare function configureAppBasePath(value: string | null | undefined): void;
|
|
3
3
|
export declare function getConfiguredAppBasePath(): string;
|
|
4
4
|
export declare function prefixAppBasePath(path: string): string;
|
|
5
|
+
export type AppHrefSearchEntry = readonly unknown[];
|
|
6
|
+
export declare function buildAppHrefWithSearchEntries(path: string, entries: readonly AppHrefSearchEntry[]): string;
|
|
7
|
+
export declare function buildResourceRecordHref(resourceName: string, recordId: string, options?: {
|
|
8
|
+
surface?: 'read' | 'edit' | 'workflow';
|
|
9
|
+
returnTo?: string | null;
|
|
10
|
+
}): string;
|
|
11
|
+
export declare function buildRelatedCollectionHref(parentResourceName: string, recordId: string, relatedPath: string, options?: {
|
|
12
|
+
returnTo?: string | null;
|
|
13
|
+
}): string;
|
|
14
|
+
export declare function buildRelatedCreateHref(resourceName: string, options?: {
|
|
15
|
+
inverseFieldName?: string | null;
|
|
16
|
+
parentId?: string | null;
|
|
17
|
+
returnTo?: string | null;
|
|
18
|
+
}): string;
|
|
19
|
+
export declare function buildWorkflowStepHref(step: {
|
|
20
|
+
surface?: string | null;
|
|
21
|
+
name?: string | null;
|
|
22
|
+
} | null | undefined, options: {
|
|
23
|
+
workflowPath: string;
|
|
24
|
+
readPath?: string | null;
|
|
25
|
+
editPath?: string | null;
|
|
26
|
+
returnTo?: string | null;
|
|
27
|
+
}): string | null;
|
|
5
28
|
export declare function stripAppBasePath(pathname: string): string;
|
|
6
29
|
export declare function getCurrentAppPathname(): string;
|
|
7
30
|
export declare function getCurrentAppHref(): string;
|
|
31
|
+
export declare function navigateToAppHref(href: string | null | undefined): boolean;
|
|
8
32
|
export declare function getLocationSearchParams(): URLSearchParams | null;
|
|
33
|
+
export declare function getCurrentReturnToNavigation<T extends string | null>(fallbackHref: T): {
|
|
34
|
+
searchParams: URLSearchParams | null;
|
|
35
|
+
returnTo: string | null;
|
|
36
|
+
href: string | T;
|
|
37
|
+
};
|
|
9
38
|
export declare function shiftDateInputValue(value: string, days: number): string;
|
|
10
39
|
export declare function getLocationSearchValues<T extends Record<string, string>>(defaultValues: T, options?: {
|
|
11
40
|
prefix?: string;
|
|
@@ -15,6 +44,14 @@ export declare function replaceLocationSearchValues(values: Record<string, strin
|
|
|
15
44
|
prefix?: string;
|
|
16
45
|
keys?: readonly string[];
|
|
17
46
|
}): void;
|
|
47
|
+
export declare function useLocationSearchState<T extends Record<string, string>>(defaultValues: T, options?: {
|
|
48
|
+
prefix?: string;
|
|
49
|
+
keys?: readonly string[];
|
|
50
|
+
}): readonly [
|
|
51
|
+
T,
|
|
52
|
+
(next: T | ((previous: T) => T)) => void,
|
|
53
|
+
T
|
|
54
|
+
];
|
|
18
55
|
export declare function sanitizeAppLocalHref(candidate: string | null | undefined): string | null;
|
|
19
56
|
export declare function getSanitizedReturnTo(searchParams?: URLSearchParams | null): string | null;
|
|
20
57
|
//# sourceMappingURL=navigation.d.ts.map
|