@protobase/ui 0.62.1 → 0.62.2
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/app/app.js +6 -1
- package/dist/app/current-address.d.ts +1 -0
- package/dist/app/current-address.js +2 -1
- package/dist/calls/call-check.js +78 -0
- package/dist/calls/call-controls.js +50 -0
- package/dist/calls/call-layout.js +31 -0
- package/dist/calls/call-mark.d.ts +13 -0
- package/dist/calls/call-mark.js +57 -0
- package/dist/calls/call-message.js +25 -0
- package/dist/calls/call-people.js +46 -0
- package/dist/calls/call-rings.js +78 -0
- package/dist/calls/call-stage.js +111 -0
- package/dist/calls/call-tile.js +60 -0
- package/dist/calls/call-view.d.ts +20 -0
- package/dist/calls/call-view.js +88 -0
- package/dist/calls/devices.js +55 -0
- package/dist/calls/messages.js +76 -0
- package/dist/calls/record-call.d.ts +12 -0
- package/dist/calls/record-call.js +18 -0
- package/dist/calls/ring-tone.js +35 -0
- package/dist/calls/ringing.js +16 -0
- package/dist/calls/track-media.js +36 -0
- package/dist/calls/use-audio-levels.js +43 -0
- package/dist/calls/use-call-session.js +157 -0
- package/dist/calls/use-record-call-address.d.ts +17 -0
- package/dist/calls/use-record-call-address.js +30 -0
- package/dist/calls/use-record-calls.d.ts +172 -0
- package/dist/calls/use-record-calls.js +43 -0
- package/dist/calls/use-rings.js +52 -0
- package/dist/calls/use-width.js +18 -0
- package/dist/data/api-provider.d.ts +8 -0
- package/dist/data/meta-data.d.ts +2 -0
- package/dist/data/query-keys.js +8 -0
- package/dist/data/use-meta.js +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +6 -1
- package/dist/package.js +1 -1
- package/dist/primitives/route-link.d.ts +13 -1
- package/dist/shell/assets/app-i5V50MJx.js +9 -0
- package/dist/shell/assets/calls-DwVdIhNM.js +2 -0
- package/dist/shell/assets/index-BgcF_WZ0.css +2 -0
- package/dist/shell/assets/{index-CphPkbp2.js → index-jTcckwc-.js} +2 -2
- package/dist/shell/assets/{records-map-BVL8Bz3b.js → records-map-idUZ9NK2.js} +2 -2
- package/dist/shell/assets/shared-protobase-ui-55TVcKm3.js +2 -0
- package/dist/shell/index.html +4 -4
- package/dist/shell/protobase.shell.json +2 -2
- package/dist/shell/protobase.sw.js +2 -2
- package/dist/shell-source-maps/assets/app-i5V50MJx.js.map +1 -0
- package/dist/shell-source-maps/assets/calls-DwVdIhNM.js.map +1 -0
- package/dist/shell-source-maps/assets/{index-CphPkbp2.js.map → index-jTcckwc-.js.map} +1 -1
- package/dist/shell-source-maps/assets/{records-map-BVL8Bz3b.js.map → records-map-idUZ9NK2.js.map} +1 -1
- package/dist/shell-source-maps/assets/shared-protobase-ui-55TVcKm3.js.map +1 -0
- package/dist/toasts/toast-provider.js +3 -1
- package/dist/toasts/toast.js +6 -4
- package/package.json +4 -4
- package/dist/shell/assets/app-C-udyrvj.js +0 -9
- package/dist/shell/assets/index-Iii7afo2.css +0 -2
- package/dist/shell/assets/shared-protobase-ui-CmaYdEFn.js +0 -2
- package/dist/shell-source-maps/assets/app-C-udyrvj.js.map +0 -1
- package/dist/shell-source-maps/assets/shared-protobase-ui-CmaYdEFn.js.map +0 -1
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { RecordCall } from "@protobase/client";
|
|
2
|
+
//#region src/calls/use-record-calls.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* A record's latest calls, the one going on first, kept current over the record's channel, on the one socket the page
|
|
5
|
+
* shares for every channel it holds: the server sends the calls there whenever they change, so following a record's
|
|
6
|
+
* calls opens no connection of its own on a page that holds a channel already. Read again whenever the channel joins,
|
|
7
|
+
* as after a lost connection.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useRecordCalls: (resource: string, recordKey: string) => {
|
|
10
|
+
ongoing: RecordCall | undefined;
|
|
11
|
+
data: RecordCall[];
|
|
12
|
+
error: Error;
|
|
13
|
+
isError: true;
|
|
14
|
+
isPending: false;
|
|
15
|
+
isLoading: false;
|
|
16
|
+
isLoadingError: false;
|
|
17
|
+
isRefetchError: true;
|
|
18
|
+
isSuccess: false;
|
|
19
|
+
isPlaceholderData: false;
|
|
20
|
+
status: "error";
|
|
21
|
+
dataUpdatedAt: number;
|
|
22
|
+
errorUpdatedAt: number;
|
|
23
|
+
failureCount: number;
|
|
24
|
+
failureReason: Error | null;
|
|
25
|
+
errorUpdateCount: number;
|
|
26
|
+
isFetched: boolean;
|
|
27
|
+
isFetchedAfterMount: boolean;
|
|
28
|
+
isFetching: boolean;
|
|
29
|
+
isInitialLoading: boolean;
|
|
30
|
+
isPaused: boolean;
|
|
31
|
+
isRefetching: boolean;
|
|
32
|
+
isStale: boolean;
|
|
33
|
+
isEnabled: boolean;
|
|
34
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<RecordCall[], Error>>;
|
|
35
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
36
|
+
} | {
|
|
37
|
+
ongoing: RecordCall | undefined;
|
|
38
|
+
data: RecordCall[];
|
|
39
|
+
error: null;
|
|
40
|
+
isError: false;
|
|
41
|
+
isPending: false;
|
|
42
|
+
isLoading: false;
|
|
43
|
+
isLoadingError: false;
|
|
44
|
+
isRefetchError: false;
|
|
45
|
+
isSuccess: true;
|
|
46
|
+
isPlaceholderData: false;
|
|
47
|
+
status: "success";
|
|
48
|
+
dataUpdatedAt: number;
|
|
49
|
+
errorUpdatedAt: number;
|
|
50
|
+
failureCount: number;
|
|
51
|
+
failureReason: Error | null;
|
|
52
|
+
errorUpdateCount: number;
|
|
53
|
+
isFetched: boolean;
|
|
54
|
+
isFetchedAfterMount: boolean;
|
|
55
|
+
isFetching: boolean;
|
|
56
|
+
isInitialLoading: boolean;
|
|
57
|
+
isPaused: boolean;
|
|
58
|
+
isRefetching: boolean;
|
|
59
|
+
isStale: boolean;
|
|
60
|
+
isEnabled: boolean;
|
|
61
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<RecordCall[], Error>>;
|
|
62
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
63
|
+
} | {
|
|
64
|
+
ongoing: RecordCall | undefined;
|
|
65
|
+
data: undefined;
|
|
66
|
+
error: Error;
|
|
67
|
+
isError: true;
|
|
68
|
+
isPending: false;
|
|
69
|
+
isLoading: false;
|
|
70
|
+
isLoadingError: true;
|
|
71
|
+
isRefetchError: false;
|
|
72
|
+
isSuccess: false;
|
|
73
|
+
isPlaceholderData: false;
|
|
74
|
+
status: "error";
|
|
75
|
+
dataUpdatedAt: number;
|
|
76
|
+
errorUpdatedAt: number;
|
|
77
|
+
failureCount: number;
|
|
78
|
+
failureReason: Error | null;
|
|
79
|
+
errorUpdateCount: number;
|
|
80
|
+
isFetched: boolean;
|
|
81
|
+
isFetchedAfterMount: boolean;
|
|
82
|
+
isFetching: boolean;
|
|
83
|
+
isInitialLoading: boolean;
|
|
84
|
+
isPaused: boolean;
|
|
85
|
+
isRefetching: boolean;
|
|
86
|
+
isStale: boolean;
|
|
87
|
+
isEnabled: boolean;
|
|
88
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<RecordCall[], Error>>;
|
|
89
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
90
|
+
} | {
|
|
91
|
+
ongoing: RecordCall | undefined;
|
|
92
|
+
data: undefined;
|
|
93
|
+
error: null;
|
|
94
|
+
isError: false;
|
|
95
|
+
isPending: true;
|
|
96
|
+
isLoading: true;
|
|
97
|
+
isLoadingError: false;
|
|
98
|
+
isRefetchError: false;
|
|
99
|
+
isSuccess: false;
|
|
100
|
+
isPlaceholderData: false;
|
|
101
|
+
status: "pending";
|
|
102
|
+
dataUpdatedAt: number;
|
|
103
|
+
errorUpdatedAt: number;
|
|
104
|
+
failureCount: number;
|
|
105
|
+
failureReason: Error | null;
|
|
106
|
+
errorUpdateCount: number;
|
|
107
|
+
isFetched: boolean;
|
|
108
|
+
isFetchedAfterMount: boolean;
|
|
109
|
+
isFetching: boolean;
|
|
110
|
+
isInitialLoading: boolean;
|
|
111
|
+
isPaused: boolean;
|
|
112
|
+
isRefetching: boolean;
|
|
113
|
+
isStale: boolean;
|
|
114
|
+
isEnabled: boolean;
|
|
115
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<RecordCall[], Error>>;
|
|
116
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
117
|
+
} | {
|
|
118
|
+
ongoing: RecordCall | undefined;
|
|
119
|
+
data: undefined;
|
|
120
|
+
error: null;
|
|
121
|
+
isError: false;
|
|
122
|
+
isPending: true;
|
|
123
|
+
isLoadingError: false;
|
|
124
|
+
isRefetchError: false;
|
|
125
|
+
isSuccess: false;
|
|
126
|
+
isPlaceholderData: false;
|
|
127
|
+
status: "pending";
|
|
128
|
+
dataUpdatedAt: number;
|
|
129
|
+
errorUpdatedAt: number;
|
|
130
|
+
failureCount: number;
|
|
131
|
+
failureReason: Error | null;
|
|
132
|
+
errorUpdateCount: number;
|
|
133
|
+
isFetched: boolean;
|
|
134
|
+
isFetchedAfterMount: boolean;
|
|
135
|
+
isFetching: boolean;
|
|
136
|
+
isLoading: boolean;
|
|
137
|
+
isInitialLoading: boolean;
|
|
138
|
+
isPaused: boolean;
|
|
139
|
+
isRefetching: boolean;
|
|
140
|
+
isStale: boolean;
|
|
141
|
+
isEnabled: boolean;
|
|
142
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<RecordCall[], Error>>;
|
|
143
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
144
|
+
} | {
|
|
145
|
+
ongoing: RecordCall | undefined;
|
|
146
|
+
data: RecordCall[];
|
|
147
|
+
isError: false;
|
|
148
|
+
error: null;
|
|
149
|
+
isPending: false;
|
|
150
|
+
isLoading: false;
|
|
151
|
+
isLoadingError: false;
|
|
152
|
+
isRefetchError: false;
|
|
153
|
+
isSuccess: true;
|
|
154
|
+
isPlaceholderData: true;
|
|
155
|
+
status: "success";
|
|
156
|
+
dataUpdatedAt: number;
|
|
157
|
+
errorUpdatedAt: number;
|
|
158
|
+
failureCount: number;
|
|
159
|
+
failureReason: Error | null;
|
|
160
|
+
errorUpdateCount: number;
|
|
161
|
+
isFetched: boolean;
|
|
162
|
+
isFetchedAfterMount: boolean;
|
|
163
|
+
isFetching: boolean;
|
|
164
|
+
isInitialLoading: boolean;
|
|
165
|
+
isPaused: boolean;
|
|
166
|
+
isRefetching: boolean;
|
|
167
|
+
isStale: boolean;
|
|
168
|
+
isEnabled: boolean;
|
|
169
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<RecordCall[], Error>>;
|
|
170
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
171
|
+
};
|
|
172
|
+
//#endregion
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { keys } from "../data/query-keys.js";
|
|
2
|
+
import { useClient } from "../data/api-provider.js";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { callsChannelEvent } from "@protobase/schema/internal";
|
|
5
|
+
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
6
|
+
//#region src/calls/use-record-calls.ts
|
|
7
|
+
/**
|
|
8
|
+
* A record's latest calls, the one going on first, kept current over the record's channel, on the one socket the page
|
|
9
|
+
* shares for every channel it holds: the server sends the calls there whenever they change, so following a record's
|
|
10
|
+
* calls opens no connection of its own on a page that holds a channel already. Read again whenever the channel joins,
|
|
11
|
+
* as after a lost connection.
|
|
12
|
+
*/
|
|
13
|
+
const useRecordCalls = (resource, recordKey) => {
|
|
14
|
+
const client = useClient();
|
|
15
|
+
const queryClient = useQueryClient();
|
|
16
|
+
const key = keys.recordCalls(resource, recordKey);
|
|
17
|
+
const query = useQuery({
|
|
18
|
+
queryKey: key,
|
|
19
|
+
queryFn: () => client.calls(resource, recordKey)
|
|
20
|
+
});
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const queryKey = keys.recordCalls(resource, recordKey);
|
|
23
|
+
const channel = client.channel(resource, recordKey);
|
|
24
|
+
const offCalls = channel.on(callsChannelEvent, (message) => message.server && queryClient.setQueryData(queryKey, message.payload.items));
|
|
25
|
+
const offStatus = channel.onStatus((status) => status.state === "joined" && void queryClient.invalidateQueries({ queryKey }));
|
|
26
|
+
return () => {
|
|
27
|
+
offCalls();
|
|
28
|
+
offStatus();
|
|
29
|
+
channel.leave();
|
|
30
|
+
};
|
|
31
|
+
}, [
|
|
32
|
+
client,
|
|
33
|
+
queryClient,
|
|
34
|
+
resource,
|
|
35
|
+
recordKey
|
|
36
|
+
]);
|
|
37
|
+
return {
|
|
38
|
+
...query,
|
|
39
|
+
ongoing: query.data?.find((call) => call.ended_at === null)
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { useRecordCalls };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { keys } from "../data/query-keys.js";
|
|
2
|
+
import { useClient } from "../data/api-provider.js";
|
|
3
|
+
import { ringingAt, ringsUntil } from "./ringing.js";
|
|
4
|
+
import { useCallback, useEffect, useState } from "react";
|
|
5
|
+
import { ringNotice } from "@protobase/schema/internal";
|
|
6
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
7
|
+
//#region src/calls/use-rings.ts
|
|
8
|
+
/**
|
|
9
|
+
* The calls ringing the signed-in user now, while `enabled`: read on load, and again whenever the live stream the page
|
|
10
|
+
* already holds says they changed, as when the user answers on another device, declines or the call ends; each stops
|
|
11
|
+
* by itself once its time is up. `decline` stops one on every page of theirs, `hide` only on this one.
|
|
12
|
+
*/
|
|
13
|
+
const useRings = (enabled) => {
|
|
14
|
+
const client = useClient();
|
|
15
|
+
const queryClient = useQueryClient();
|
|
16
|
+
const query = useQuery({
|
|
17
|
+
queryKey: keys.rings,
|
|
18
|
+
queryFn: async () => ringsUntil(await client.rings.list(), Date.now()),
|
|
19
|
+
enabled
|
|
20
|
+
});
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (!enabled) return;
|
|
23
|
+
const again = () => void queryClient.invalidateQueries({ queryKey: keys.rings });
|
|
24
|
+
return client.live({
|
|
25
|
+
onChanges: (changes) => changes.some((change) => change.resource === ringNotice) && again(),
|
|
26
|
+
onResync: again
|
|
27
|
+
});
|
|
28
|
+
}, [
|
|
29
|
+
client,
|
|
30
|
+
queryClient,
|
|
31
|
+
enabled
|
|
32
|
+
]);
|
|
33
|
+
const [now, setNow] = useState(() => Date.now());
|
|
34
|
+
const { ringing, next } = ringingAt(query.data ?? [], Math.max(now, query.dataUpdatedAt));
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (next === void 0) return;
|
|
37
|
+
const timer = setTimeout(() => setNow(Date.now()), Math.max(0, next - Date.now()));
|
|
38
|
+
return () => clearTimeout(timer);
|
|
39
|
+
}, [next]);
|
|
40
|
+
const hide = useCallback((call) => queryClient.setQueryData(keys.rings, (rings) => rings?.filter((ring) => ring.call !== call)), [queryClient]);
|
|
41
|
+
return {
|
|
42
|
+
ringing,
|
|
43
|
+
decline: useMutation({
|
|
44
|
+
mutationFn: (call) => client.rings.decline(call),
|
|
45
|
+
onMutate: hide,
|
|
46
|
+
onSettled: () => queryClient.invalidateQueries({ queryKey: keys.rings })
|
|
47
|
+
}).mutate,
|
|
48
|
+
hide
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { useRings };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useCallback, useState } from "react";
|
|
2
|
+
//#region src/calls/use-width.ts
|
|
3
|
+
/** The width of the element the returned ref is put on, followed as it changes; 0 until it is drawn. */
|
|
4
|
+
const useWidth = () => {
|
|
5
|
+
const [width, setWidth] = useState(0);
|
|
6
|
+
return {
|
|
7
|
+
ref: useCallback((element) => {
|
|
8
|
+
if (!element) return;
|
|
9
|
+
setWidth(element.clientWidth);
|
|
10
|
+
const observer = new ResizeObserver(([entry]) => setWidth(entry.contentRect.width));
|
|
11
|
+
observer.observe(element);
|
|
12
|
+
return () => observer.disconnect();
|
|
13
|
+
}, []),
|
|
14
|
+
width
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
//#endregion
|
|
18
|
+
export { useWidth };
|
|
@@ -79,6 +79,10 @@ export declare const useClient: () => {
|
|
|
79
79
|
};
|
|
80
80
|
calls: (resource: import("@protobase/client").ResourceRef, key: import("@protobase/schema").KeyValue | readonly import("@protobase/schema").KeyValue[]) => Promise<import("@protobase/client").RecordCall[]>;
|
|
81
81
|
watchCalls: (resource: import("@protobase/client").ResourceRef, key: import("@protobase/schema").KeyValue | readonly import("@protobase/schema").KeyValue[], handlers: import("@protobase/client").RecordCallsHandlers) => () => void;
|
|
82
|
+
rings: {
|
|
83
|
+
list: () => Promise<import("@protobase/client").CallRing[]>;
|
|
84
|
+
decline: (call: string) => Promise<void>;
|
|
85
|
+
};
|
|
82
86
|
};
|
|
83
87
|
/**
|
|
84
88
|
* The client of the API that serves `resource`: a source's for a resource the app draws from one, the app's own
|
|
@@ -160,6 +164,10 @@ export declare const useResourceClient: (resource: string) => {
|
|
|
160
164
|
};
|
|
161
165
|
calls: (resource: import("@protobase/client").ResourceRef, key: import("@protobase/schema").KeyValue | readonly import("@protobase/schema").KeyValue[]) => Promise<import("@protobase/client").RecordCall[]>;
|
|
162
166
|
watchCalls: (resource: import("@protobase/client").ResourceRef, key: import("@protobase/schema").KeyValue | readonly import("@protobase/schema").KeyValue[], handlers: import("@protobase/client").RecordCallsHandlers) => () => void;
|
|
167
|
+
rings: {
|
|
168
|
+
list: () => Promise<import("@protobase/client").CallRing[]>;
|
|
169
|
+
decline: (call: string) => Promise<void>;
|
|
170
|
+
};
|
|
163
171
|
};
|
|
164
172
|
export type ApiProviderProps = {
|
|
165
173
|
/** Defaults to `/api/v1` on the current origin. */
|
package/dist/data/meta-data.d.ts
CHANGED
|
@@ -52,6 +52,8 @@ export type MetaData = {
|
|
|
52
52
|
bell?: boolean;
|
|
53
53
|
/** Whether people set their own status and see those they share an organization with (see `useStatuses`). */
|
|
54
54
|
status?: boolean;
|
|
55
|
+
/** Whether the app has calls, which ring people on any page they have open (see `CallRings`). */
|
|
56
|
+
calls?: boolean;
|
|
55
57
|
/** The language the app's screens are in for everyone, when it sets one (see `AppLocale`). */
|
|
56
58
|
locale?: Locale;
|
|
57
59
|
/** The hosts besides the app's own whose images are drawn with the page's referrer (see `FileImage`). */
|
package/dist/data/query-keys.js
CHANGED
|
@@ -172,6 +172,14 @@ const keys = {
|
|
|
172
172
|
userId,
|
|
173
173
|
"own"
|
|
174
174
|
],
|
|
175
|
+
/** The calls ringing the signed-in user (`useRings`). */
|
|
176
|
+
rings: ["call-rings"],
|
|
177
|
+
/** A record's calls, as its call mark shows them (`useRecordCalls`). */
|
|
178
|
+
recordCalls: (resource, key) => [
|
|
179
|
+
"record-calls",
|
|
180
|
+
resource,
|
|
181
|
+
key
|
|
182
|
+
],
|
|
175
183
|
/** A public form, as `/-/forms/<name>` draws it. */
|
|
176
184
|
publicForm: (name) => ["public-form", name]
|
|
177
185
|
};
|
package/dist/data/use-meta.js
CHANGED
|
@@ -46,6 +46,7 @@ const useMeta = () => {
|
|
|
46
46
|
...result.meta.maps && { maps: result.meta.maps },
|
|
47
47
|
...result.meta.notifications?.bell && { bell: true },
|
|
48
48
|
...result.meta.status && { status: true },
|
|
49
|
+
...result.meta.calls && { calls: true },
|
|
49
50
|
...result.meta.locale && { locale: result.meta.locale },
|
|
50
51
|
...result.meta.files && { files: result.meta.files },
|
|
51
52
|
...result.meta.plugins && { plugins: result.meta.plugins },
|
package/dist/index.d.ts
CHANGED
|
@@ -34,6 +34,11 @@ import { PushState } from "./notifications/push/web-push.js";
|
|
|
34
34
|
import { SignedInUser, useSignedInUser } from "./auth/use-signed-in-user.js";
|
|
35
35
|
import { Member, MembersResult, useMembers } from "./people/use-members.js";
|
|
36
36
|
import { statusRefreshMs, useOwnStatus, useStatuses } from "./status/use-statuses.js";
|
|
37
|
+
import { CallView, CallViewProps } from "./calls/call-view.js";
|
|
38
|
+
import { RecordCall, RecordCallProps } from "./calls/record-call.js";
|
|
39
|
+
import { CallMark, CallMarkProps } from "./calls/call-mark.js";
|
|
40
|
+
import { useRecordCalls } from "./calls/use-record-calls.js";
|
|
41
|
+
import { useRecordCallAddress } from "./calls/use-record-call-address.js";
|
|
37
42
|
import { usePushNotifications } from "./notifications/push/use-push-notifications.js";
|
|
38
43
|
import { useInbox, useMarkNotificationsRead, useUnreadNotifications } from "./notifications/bell/use-inbox.js";
|
|
39
44
|
import { SignInPrompt, SignInPromptProps } from "./auth/sign-in-prompt.js";
|
|
@@ -87,4 +92,4 @@ import { Section } from "./record-view/section.js";
|
|
|
87
92
|
import { Form, FormProps } from "./app/create/form.js";
|
|
88
93
|
import { RecordPicker, RecordPickerProps } from "./app/record-picker.js";
|
|
89
94
|
import { Spinner } from "./primitives/spinner.js";
|
|
90
|
-
export { ActionCard, type ActionCardProps, type ActionContext, type ActionHandler, ActionInputError, type ActionInputProps, ApiProvider, type ApiProviderProps, App, AppLink, type AppProps, AssistantDock, type AssistantDockProps, AuthLayout, type AuthLayoutProps, AvailabilityMark, type BackendData, type BackendRefresh, type BeforeSignInProps, type BoardDrop, type BoardDropContext, type BoardDropUndo, type BoardDropWrite, Button, type ButtonProps, type CardAction, type CardTone, Carousel, type CarouselImage, type CarouselProps, type ChatAuthor, ChatDivider, type ChatDividerProps, ChatMessage, type ChatMessageProps, ChatThread, type ChatThreadProps, type ChoiceOption, Choices, type ChoicesProps, CodeForm, type CodeFormProps, CompactTable, type CompactTableProps, Composer, type ComposerProps, type CurrentAddress, Dialog, type DialogProps, type DiffLine, DiffView, type DiffViewProps, type Drop, type DropRule, Field, FieldList, type FieldProps, type FieldWidget, type FieldWidgetEditorProps, type FieldWidgetProps, Form, type FormProps, Input, type InputProps, type LayoutRecord, type ListAddress, type ListChange, type ListDisplay, type ListDisplayRow, LogoMark, Markdown, type MarkdownContentProps as MarkdownProps, type MarksHook, type Member, type MembersResult, MentionBox, type MentionBoxProps, type MentionDraft, MentionedText, MenuSelect, type MenuSelectProps, type MetaData, OtpInput, type OtpInputProps, PartView, type PeopleSearch, type PickedUser, type PluginInfo, type Presence, type PresenceHook, type ProjectUi, type PushState, type RecordCardProps, RecordLink, type RecordMark, RecordPicker, type RecordPickerProps, ResendCodeButton, type ResendCodeButtonProps, ResponsiveDialog, type ResponsiveDialogProps, Section, Segmented, type SegmentedOption, type SegmentedProps, type ShellLogoProps, SidePanel, type SidePanelProps, SignInPrompt, type SignInPromptProps, type SignedInUser, Spinner, StatusMark, type StatusMarkProps, type Step, StepList, type StepState, Textarea, type TextareaProps, type TitleReader, type TitleRule, allowDelayMs, buttonClass, chatDayLabel, definePlugin, defineUi, diffStats, emptyDraft, isConflict, isFramed, mentionedIds, mergeUi, parseDiff, pluginApi, protobaseVersion, sameChatDay, statusRefreshMs, uiFromModule, useApiToken, useAppAddress, useArmedAfterFocus, useAssistant, useAssistantClient, useBackendData, useClient, useFacets, useFieldControl, useGuardedPress, useHistogram, useInbox, useLayoutRecord, useList, useListDisplay, useMarkNotificationsRead, useMembers, useMeta, useOwnStatus, usePlugin, usePresence, usePushNotifications, useRecord, useResourceClient, useSeries, useSignedInUser, useStatuses, useUnreadNotifications, useUpdateRecord };
|
|
95
|
+
export { ActionCard, type ActionCardProps, type ActionContext, type ActionHandler, ActionInputError, type ActionInputProps, ApiProvider, type ApiProviderProps, App, AppLink, type AppProps, AssistantDock, type AssistantDockProps, AuthLayout, type AuthLayoutProps, AvailabilityMark, type BackendData, type BackendRefresh, type BeforeSignInProps, type BoardDrop, type BoardDropContext, type BoardDropUndo, type BoardDropWrite, Button, type ButtonProps, CallMark, type CallMarkProps, CallView, type CallViewProps, type CardAction, type CardTone, Carousel, type CarouselImage, type CarouselProps, type ChatAuthor, ChatDivider, type ChatDividerProps, ChatMessage, type ChatMessageProps, ChatThread, type ChatThreadProps, type ChoiceOption, Choices, type ChoicesProps, CodeForm, type CodeFormProps, CompactTable, type CompactTableProps, Composer, type ComposerProps, type CurrentAddress, Dialog, type DialogProps, type DiffLine, DiffView, type DiffViewProps, type Drop, type DropRule, Field, FieldList, type FieldProps, type FieldWidget, type FieldWidgetEditorProps, type FieldWidgetProps, Form, type FormProps, Input, type InputProps, type LayoutRecord, type ListAddress, type ListChange, type ListDisplay, type ListDisplayRow, LogoMark, Markdown, type MarkdownContentProps as MarkdownProps, type MarksHook, type Member, type MembersResult, MentionBox, type MentionBoxProps, type MentionDraft, MentionedText, MenuSelect, type MenuSelectProps, type MetaData, OtpInput, type OtpInputProps, PartView, type PeopleSearch, type PickedUser, type PluginInfo, type Presence, type PresenceHook, type ProjectUi, type PushState, RecordCall, type RecordCallProps, type RecordCardProps, RecordLink, type RecordMark, RecordPicker, type RecordPickerProps, ResendCodeButton, type ResendCodeButtonProps, ResponsiveDialog, type ResponsiveDialogProps, Section, Segmented, type SegmentedOption, type SegmentedProps, type ShellLogoProps, SidePanel, type SidePanelProps, SignInPrompt, type SignInPromptProps, type SignedInUser, Spinner, StatusMark, type StatusMarkProps, type Step, StepList, type StepState, Textarea, type TextareaProps, type TitleReader, type TitleRule, allowDelayMs, buttonClass, chatDayLabel, definePlugin, defineUi, diffStats, emptyDraft, isConflict, isFramed, mentionedIds, mergeUi, parseDiff, pluginApi, protobaseVersion, sameChatDay, statusRefreshMs, uiFromModule, useApiToken, useAppAddress, useArmedAfterFocus, useAssistant, useAssistantClient, useBackendData, useClient, useFacets, useFieldControl, useGuardedPress, useHistogram, useInbox, useLayoutRecord, useList, useListDisplay, useMarkNotificationsRead, useMembers, useMeta, useOwnStatus, usePlugin, usePresence, usePushNotifications, useRecord, useRecordCallAddress, useRecordCalls, useResourceClient, useSeries, useSignedInUser, useStatuses, useUnreadNotifications, useUpdateRecord };
|
package/dist/index.js
CHANGED
|
@@ -63,7 +63,12 @@ import { isConflict, useUpdateRecord } from "./data/use-update-record.js";
|
|
|
63
63
|
import { App } from "./app/app.js";
|
|
64
64
|
import { RecordLink } from "./app/displays/record-link.js";
|
|
65
65
|
import { useSignedInUser } from "./auth/use-signed-in-user.js";
|
|
66
|
+
import { CallView } from "./calls/call-view.js";
|
|
67
|
+
import { useRecordCallAddress } from "./calls/use-record-call-address.js";
|
|
68
|
+
import { RecordCall } from "./calls/record-call.js";
|
|
69
|
+
import { useRecordCalls } from "./calls/use-record-calls.js";
|
|
70
|
+
import { CallMark } from "./calls/call-mark.js";
|
|
66
71
|
import { Carousel } from "./carousel/carousel.js";
|
|
67
72
|
import { Choices } from "./primitives/choices.js";
|
|
68
73
|
import { RecordPicker } from "./app/record-picker.js";
|
|
69
|
-
export { ActionCard, ActionInputError, ApiProvider, App, AppLink, AssistantDock, AuthLayout, AvailabilityMark, Button, Carousel, ChatDivider, ChatMessage, ChatThread, Choices, CodeForm, CompactTable, Composer, Dialog, DiffView, Field, FieldList, Form, Input, LogoMark, Markdown, MentionBox, MentionedText, MenuSelect, OtpInput, PartView, RecordLink, RecordPicker, ResendCodeButton, ResponsiveDialog, Section, Segmented, SidePanel, SignInPrompt, Spinner, StatusMark, StepList, Textarea, allowDelayMs, buttonClass, chatDayLabel, definePlugin, defineUi, diffStats, emptyDraft, isConflict, isFramed, mentionedIds, mergeUi, parseDiff, pluginApi, protobaseVersion, sameChatDay, statusRefreshMs, uiFromModule, useApiToken, useAppAddress, useArmedAfterFocus, useAssistant, useAssistantClient, useBackendData, useClient, useFacets, useFieldControl, useGuardedPress, useHistogram, useInbox, useLayoutRecord, useList, useListDisplay, useMarkNotificationsRead, useMembers, useMeta, useOwnStatus, usePlugin, usePresence, usePushNotifications, useRecord, useResourceClient, useSeries, useSignedInUser, useStatuses, useUnreadNotifications, useUpdateRecord };
|
|
74
|
+
export { ActionCard, ActionInputError, ApiProvider, App, AppLink, AssistantDock, AuthLayout, AvailabilityMark, Button, CallMark, CallView, Carousel, ChatDivider, ChatMessage, ChatThread, Choices, CodeForm, CompactTable, Composer, Dialog, DiffView, Field, FieldList, Form, Input, LogoMark, Markdown, MentionBox, MentionedText, MenuSelect, OtpInput, PartView, RecordCall, RecordLink, RecordPicker, ResendCodeButton, ResponsiveDialog, Section, Segmented, SidePanel, SignInPrompt, Spinner, StatusMark, StepList, Textarea, allowDelayMs, buttonClass, chatDayLabel, definePlugin, defineUi, diffStats, emptyDraft, isConflict, isFramed, mentionedIds, mergeUi, parseDiff, pluginApi, protobaseVersion, sameChatDay, statusRefreshMs, uiFromModule, useApiToken, useAppAddress, useArmedAfterFocus, useAssistant, useAssistantClient, useBackendData, useClient, useFacets, useFieldControl, useGuardedPress, useHistogram, useInbox, useLayoutRecord, useList, useListDisplay, useMarkNotificationsRead, useMembers, useMeta, useOwnStatus, usePlugin, usePresence, usePushNotifications, useRecord, useRecordCallAddress, useRecordCalls, useResourceClient, useSeries, useSignedInUser, useStatuses, useUnreadNotifications, useUpdateRecord };
|
package/dist/package.js
CHANGED
|
@@ -1 +1,13 @@
|
|
|
1
|
-
import { AnchorHTMLAttributes } from "react";
|
|
1
|
+
import { AnchorHTMLAttributes } from "react";
|
|
2
|
+
//#region src/primitives/route-link.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Where a link goes: the `href` the browser shows and opens, and how the app follows it in place. One without
|
|
5
|
+
* `onFollow`, a page outside the app, the browser follows itself, in a new tab without the app's window or address
|
|
6
|
+
* with `newTab`.
|
|
7
|
+
*/
|
|
8
|
+
export type RouteTarget = {
|
|
9
|
+
href: string;
|
|
10
|
+
onFollow?: () => void;
|
|
11
|
+
newTab?: boolean;
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|