jazz-tools 0.19.10 → 0.19.12
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/.turbo/turbo-build.log +58 -54
- package/CHANGELOG.md +23 -0
- package/dist/{chunk-FFEEPZEG.js → chunk-AGF4HEDH.js} +61 -28
- package/dist/chunk-AGF4HEDH.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/inspector/account-switcher.d.ts +4 -0
- package/dist/inspector/account-switcher.d.ts.map +1 -0
- package/dist/inspector/chunk-YQNK5Y7B.js +4108 -0
- package/dist/inspector/chunk-YQNK5Y7B.js.map +1 -0
- package/dist/inspector/contexts/node.d.ts +19 -0
- package/dist/inspector/contexts/node.d.ts.map +1 -0
- package/dist/inspector/{custom-element-P76EIWEV.js → custom-element-KYV64IOC.js} +1057 -918
- package/dist/inspector/custom-element-KYV64IOC.js.map +1 -0
- package/dist/inspector/{viewer/new-app.d.ts → in-app.d.ts} +3 -3
- package/dist/inspector/in-app.d.ts.map +1 -0
- package/dist/inspector/index.d.ts +0 -11
- package/dist/inspector/index.d.ts.map +1 -1
- package/dist/inspector/index.js +56 -3910
- package/dist/inspector/index.js.map +1 -1
- package/dist/inspector/pages/home.d.ts +2 -0
- package/dist/inspector/pages/home.d.ts.map +1 -0
- package/dist/inspector/register-custom-element.js +1 -1
- package/dist/inspector/router/context.d.ts +12 -0
- package/dist/inspector/router/context.d.ts.map +1 -0
- package/dist/inspector/router/hash-router.d.ts +7 -0
- package/dist/inspector/router/hash-router.d.ts.map +1 -0
- package/dist/inspector/router/in-memory-router.d.ts +7 -0
- package/dist/inspector/router/in-memory-router.d.ts.map +1 -0
- package/dist/inspector/router/index.d.ts +5 -0
- package/dist/inspector/router/index.d.ts.map +1 -0
- package/dist/inspector/standalone.d.ts +6 -0
- package/dist/inspector/standalone.d.ts.map +1 -0
- package/dist/inspector/standalone.js +420 -0
- package/dist/inspector/standalone.js.map +1 -0
- package/dist/inspector/tests/router/hash-router.test.d.ts +2 -0
- package/dist/inspector/tests/router/hash-router.test.d.ts.map +1 -0
- package/dist/inspector/tests/router/in-memory-router.test.d.ts +2 -0
- package/dist/inspector/tests/router/in-memory-router.test.d.ts.map +1 -0
- package/dist/inspector/tests/utils/transactions-changes.test.d.ts +2 -0
- package/dist/inspector/tests/utils/transactions-changes.test.d.ts.map +1 -0
- package/dist/inspector/ui/modal.d.ts +1 -0
- package/dist/inspector/ui/modal.d.ts.map +1 -1
- package/dist/inspector/utils/transactions-changes.d.ts +13 -13
- package/dist/inspector/utils/transactions-changes.d.ts.map +1 -1
- package/dist/inspector/viewer/breadcrumbs.d.ts +1 -7
- package/dist/inspector/viewer/breadcrumbs.d.ts.map +1 -1
- package/dist/inspector/viewer/header.d.ts +7 -0
- package/dist/inspector/viewer/header.d.ts.map +1 -0
- package/dist/inspector/viewer/page-stack.d.ts +4 -13
- package/dist/inspector/viewer/page-stack.d.ts.map +1 -1
- package/dist/inspector/viewer/page.d.ts.map +1 -1
- package/dist/react/index.js +4 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/provider.d.ts.map +1 -1
- package/dist/react-core/index.js +2 -2
- package/dist/react-core/index.js.map +1 -1
- package/dist/react-native/index.js +4 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native-core/index.js +4 -1
- package/dist/react-native-core/index.js.map +1 -1
- package/dist/react-native-core/provider.d.ts.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/tools/coValues/account.d.ts +7 -1
- package/dist/tools/coValues/account.d.ts.map +1 -1
- package/dist/tools/implementation/ContextManager.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts +8 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
- package/dist/tools/subscribe/SubscriptionScope.d.ts +3 -6
- package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
- package/dist/tools/testing.d.ts.map +1 -1
- package/package.json +9 -4
- package/src/inspector/account-switcher.tsx +440 -0
- package/src/inspector/contexts/node.tsx +129 -0
- package/src/inspector/custom-element.tsx +2 -2
- package/src/inspector/in-app.tsx +61 -0
- package/src/inspector/index.tsx +2 -22
- package/src/inspector/pages/home.tsx +77 -0
- package/src/inspector/router/context.ts +21 -0
- package/src/inspector/router/hash-router.tsx +128 -0
- package/src/inspector/{viewer/use-page-path.ts → router/in-memory-router.tsx} +31 -29
- package/src/inspector/router/index.ts +4 -0
- package/src/inspector/standalone.tsx +60 -0
- package/src/inspector/tests/router/hash-router.test.tsx +847 -0
- package/src/inspector/tests/router/in-memory-router.test.tsx +724 -0
- package/src/inspector/tests/utils/transactions-changes.test.ts +102 -0
- package/src/inspector/ui/icons/add-icon.tsx +3 -3
- package/src/inspector/ui/modal.tsx +5 -2
- package/src/inspector/utils/history.ts +6 -6
- package/src/inspector/utils/transactions-changes.ts +37 -3
- package/src/inspector/viewer/breadcrumbs.tsx +5 -11
- package/src/inspector/viewer/header.tsx +67 -0
- package/src/inspector/viewer/history-view.tsx +13 -13
- package/src/inspector/viewer/page-stack.tsx +18 -26
- package/src/inspector/viewer/page.tsx +0 -1
- package/src/react/provider.tsx +6 -1
- package/src/react-core/hooks.ts +2 -2
- package/src/react-core/tests/useSuspenseCoState.test.tsx +47 -0
- package/src/react-native-core/provider.tsx +6 -1
- package/src/tools/coValues/account.ts +13 -2
- package/src/tools/implementation/ContextManager.ts +10 -0
- package/src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts +8 -1
- package/src/tools/subscribe/SubscriptionScope.ts +61 -39
- package/src/tools/tests/account.test.ts +11 -4
- package/src/tools/tests/schema.resolved.test.ts +3 -3
- package/tsup.config.ts +1 -0
- package/dist/chunk-FFEEPZEG.js.map +0 -1
- package/dist/inspector/custom-element-P76EIWEV.js.map +0 -1
- package/dist/inspector/viewer/new-app.d.ts.map +0 -1
- package/dist/inspector/viewer/use-page-path.d.ts +0 -10
- package/dist/inspector/viewer/use-page-path.d.ts.map +0 -1
- package/src/inspector/viewer/new-app.tsx +0 -156
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../../src/inspector/pages/home.tsx"],"names":[],"mappings":"AAQA,wBAAgB,QAAQ,4CAmDvB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CoID, RawCoValue } from "cojson";
|
|
2
|
+
import { PageInfo } from "../viewer/types.js";
|
|
3
|
+
export interface Router {
|
|
4
|
+
path: PageInfo[];
|
|
5
|
+
setPage: (coId: CoID<RawCoValue>) => void;
|
|
6
|
+
addPages: (newPages: PageInfo[]) => void;
|
|
7
|
+
goToIndex: (index: number) => void;
|
|
8
|
+
goBack: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const RouterContext: import("react").Context<Router | null>;
|
|
11
|
+
export declare function useRouter(): Router;
|
|
12
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/inspector/router/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,wCAAqC,CAAC;AAEhE,wBAAgB,SAAS,IAAI,MAAM,CAMlC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { PageInfo } from "../viewer/types.js";
|
|
3
|
+
export declare function HashRouterProvider({ children, defaultPath, }: {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
defaultPath?: PageInfo[];
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=hash-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-router.d.ts","sourceRoot":"","sources":["../../../src/inspector/router/hash-router.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC1B,2CAyFA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { PageInfo } from "../viewer/types.js";
|
|
3
|
+
export declare function InMemoryRouterProvider({ children, defaultPath, }: {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
defaultPath?: PageInfo[];
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=in-memory-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-router.d.ts","sourceRoot":"","sources":["../../../src/inspector/router/in-memory-router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6C,MAAM,OAAO,CAAC;AAG7E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC1B,2CAsDA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspector/router/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../../src/inspector/standalone.tsx"],"names":[],"mappings":"AASA,KAAK,iBAAiB,GAAG;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAIF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,2CAuBnE"}
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
AccountOrGroupText,
|
|
4
|
+
Button,
|
|
5
|
+
GlobalStyles,
|
|
6
|
+
HashRouterProvider,
|
|
7
|
+
Header,
|
|
8
|
+
Icon,
|
|
9
|
+
Input,
|
|
10
|
+
Modal,
|
|
11
|
+
NodeContext,
|
|
12
|
+
NodeProvider,
|
|
13
|
+
PageStack,
|
|
14
|
+
useNode
|
|
15
|
+
} from "./chunk-YQNK5Y7B.js";
|
|
16
|
+
|
|
17
|
+
// src/inspector/standalone.tsx
|
|
18
|
+
import React2 from "react";
|
|
19
|
+
import { setup, styled as styled2 } from "goober";
|
|
20
|
+
|
|
21
|
+
// src/inspector/account-switcher.tsx
|
|
22
|
+
import { useCallback, useEffect, useState } from "react";
|
|
23
|
+
import { styled } from "goober";
|
|
24
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
25
|
+
function AccountSwitcher({
|
|
26
|
+
defaultSyncServer
|
|
27
|
+
}) {
|
|
28
|
+
const {
|
|
29
|
+
accountID: currentAccountId,
|
|
30
|
+
localNode,
|
|
31
|
+
createLocalNode,
|
|
32
|
+
reset
|
|
33
|
+
} = useNode();
|
|
34
|
+
const [accounts, setAccounts] = useState(() => {
|
|
35
|
+
const storedAccounts = localStorage.getItem("inspectorAccounts");
|
|
36
|
+
return storedAccounts ? JSON.parse(storedAccounts) : [];
|
|
37
|
+
});
|
|
38
|
+
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
39
|
+
const [selectedAccountId, setSelectedAccountId] = useState(() => {
|
|
40
|
+
const lastSelectedAccountId = localStorage.getItem(
|
|
41
|
+
"lastSelectedAccountId"
|
|
42
|
+
);
|
|
43
|
+
return lastSelectedAccountId ? lastSelectedAccountId : currentAccountId;
|
|
44
|
+
});
|
|
45
|
+
const [newAccountId, setNewAccountId] = useState("");
|
|
46
|
+
const [newAccountSecret, setNewAccountSecret] = useState("");
|
|
47
|
+
const [newAccountSyncServer, setNewAccountSyncServer] = useState(
|
|
48
|
+
"wss://cloud.jazz.tools"
|
|
49
|
+
);
|
|
50
|
+
const [addAccountError, setAddAccountError] = useState(null);
|
|
51
|
+
const addAccount = (id, secret, syncServer) => {
|
|
52
|
+
const newAccount = {
|
|
53
|
+
id,
|
|
54
|
+
secret,
|
|
55
|
+
syncServer
|
|
56
|
+
};
|
|
57
|
+
const accountExists = accounts.some((account) => account.id === id);
|
|
58
|
+
if (!accountExists) {
|
|
59
|
+
const updatedAccounts = [...accounts, newAccount];
|
|
60
|
+
setAccounts(updatedAccounts);
|
|
61
|
+
localStorage.setItem(
|
|
62
|
+
"inspectorAccounts",
|
|
63
|
+
JSON.stringify(updatedAccounts)
|
|
64
|
+
);
|
|
65
|
+
setSelectedAccountId(id);
|
|
66
|
+
} else {
|
|
67
|
+
setSelectedAccountId(id);
|
|
68
|
+
}
|
|
69
|
+
setNewAccountId("");
|
|
70
|
+
setNewAccountSecret("");
|
|
71
|
+
setNewAccountSyncServer(syncServer);
|
|
72
|
+
setAddAccountError(null);
|
|
73
|
+
};
|
|
74
|
+
const deleteAccount = (accountId) => {
|
|
75
|
+
const updatedAccounts = accounts.filter(
|
|
76
|
+
(account) => account.id !== accountId
|
|
77
|
+
);
|
|
78
|
+
setAccounts(updatedAccounts);
|
|
79
|
+
localStorage.setItem("inspectorAccounts", JSON.stringify(updatedAccounts));
|
|
80
|
+
if (updatedAccounts.length > 0) {
|
|
81
|
+
setCurrentAccount(updatedAccounts[0].id);
|
|
82
|
+
} else {
|
|
83
|
+
setSelectedAccountId(null);
|
|
84
|
+
localStorage.removeItem("lastSelectedAccountId");
|
|
85
|
+
reset();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const deleteCurrentAccount = () => {
|
|
89
|
+
if (currentAccountId) {
|
|
90
|
+
deleteAccount(currentAccountId);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const setCurrentAccount = useCallback(
|
|
94
|
+
async (accountId) => {
|
|
95
|
+
if (accountId === null) {
|
|
96
|
+
localStorage.removeItem("lastSelectedAccountId");
|
|
97
|
+
reset();
|
|
98
|
+
setSelectedAccountId(null);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const account = accounts.find((a) => a.id === accountId);
|
|
102
|
+
if (!account) {
|
|
103
|
+
throw new Error(`Account ${accountId} not found in accounts list`);
|
|
104
|
+
}
|
|
105
|
+
const syncServer = account.syncServer || defaultSyncServer || "wss://cloud.jazz.tools";
|
|
106
|
+
await createLocalNode(accountId, account.secret, syncServer);
|
|
107
|
+
setSelectedAccountId(accountId);
|
|
108
|
+
localStorage.setItem("lastSelectedAccountId", accountId);
|
|
109
|
+
},
|
|
110
|
+
[createLocalNode, accounts, defaultSyncServer]
|
|
111
|
+
);
|
|
112
|
+
const handleModalCancel = () => {
|
|
113
|
+
setSelectedAccountId(currentAccountId);
|
|
114
|
+
setNewAccountId("");
|
|
115
|
+
setNewAccountSecret("");
|
|
116
|
+
setNewAccountSyncServer("wss://cloud.jazz.tools/");
|
|
117
|
+
setAddAccountError(null);
|
|
118
|
+
setIsModalOpen(false);
|
|
119
|
+
};
|
|
120
|
+
const handleNewAccountIdChange = (e) => {
|
|
121
|
+
const value = e.target.value;
|
|
122
|
+
setNewAccountId(value);
|
|
123
|
+
if (value.trim().startsWith("{") && value.trim().endsWith("}")) {
|
|
124
|
+
try {
|
|
125
|
+
const parsed = JSON.parse(value);
|
|
126
|
+
if (parsed.accountID && parsed.accountSecret) {
|
|
127
|
+
setNewAccountId(parsed.accountID);
|
|
128
|
+
setNewAccountSecret(parsed.accountSecret);
|
|
129
|
+
}
|
|
130
|
+
} catch (error) {
|
|
131
|
+
console.log("Failed to parse JSON:", error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const handleAddAccountSubmit = async (e) => {
|
|
136
|
+
e.preventDefault();
|
|
137
|
+
if (!newAccountId || !newAccountSecret) {
|
|
138
|
+
setAddAccountError("Account ID and secret are required");
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
addAccount(
|
|
143
|
+
newAccountId,
|
|
144
|
+
newAccountSecret,
|
|
145
|
+
newAccountSyncServer
|
|
146
|
+
);
|
|
147
|
+
setSelectedAccountId(newAccountId);
|
|
148
|
+
setIsModalOpen(false);
|
|
149
|
+
} catch (error) {
|
|
150
|
+
setAddAccountError(
|
|
151
|
+
error instanceof Error ? error.message : "Failed to add account"
|
|
152
|
+
);
|
|
153
|
+
deleteAccount(newAccountId);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
useEffect(() => {
|
|
157
|
+
if (selectedAccountId) {
|
|
158
|
+
setCurrentAccount(selectedAccountId);
|
|
159
|
+
}
|
|
160
|
+
}, [selectedAccountId]);
|
|
161
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
162
|
+
/* @__PURE__ */ jsxs(AccountSwitcherContainer, { children: [
|
|
163
|
+
/* @__PURE__ */ jsx(
|
|
164
|
+
Button,
|
|
165
|
+
{
|
|
166
|
+
variant: "secondary",
|
|
167
|
+
onClick: () => {
|
|
168
|
+
setSelectedAccountId(currentAccountId);
|
|
169
|
+
setIsModalOpen(true);
|
|
170
|
+
},
|
|
171
|
+
className: "max-w-96",
|
|
172
|
+
children: currentAccountId ? localNode ? /* @__PURE__ */ jsx(
|
|
173
|
+
AccountOrGroupText,
|
|
174
|
+
{
|
|
175
|
+
coId: currentAccountId,
|
|
176
|
+
showId: true,
|
|
177
|
+
node: localNode
|
|
178
|
+
}
|
|
179
|
+
) : currentAccountId : "Select account"
|
|
180
|
+
}
|
|
181
|
+
),
|
|
182
|
+
currentAccountId && /* @__PURE__ */ jsx(
|
|
183
|
+
Button,
|
|
184
|
+
{
|
|
185
|
+
variant: "secondary",
|
|
186
|
+
onClick: deleteCurrentAccount,
|
|
187
|
+
className: "rounded-md p-2 ml-1",
|
|
188
|
+
"aria-label": "Remove account",
|
|
189
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "delete", className: "text-gray-500" })
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
] }),
|
|
193
|
+
/* @__PURE__ */ jsx(
|
|
194
|
+
Modal,
|
|
195
|
+
{
|
|
196
|
+
isOpen: isModalOpen,
|
|
197
|
+
onClose: handleModalCancel,
|
|
198
|
+
heading: "Select Account",
|
|
199
|
+
showButtons: false,
|
|
200
|
+
wide: true,
|
|
201
|
+
children: /* @__PURE__ */ jsxs(ModalContentGrid, { children: [
|
|
202
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(AccountSelectionFieldset, { children: [
|
|
203
|
+
/* @__PURE__ */ jsx("legend", { children: "Accounts" }),
|
|
204
|
+
accounts.length === 0 ? /* @__PURE__ */ jsx("p", { style: { color: "var(--j-text-color)", margin: "0.5rem 0" }, children: "No accounts available. Add one below." }) : accounts.map((account) => /* @__PURE__ */ jsxs(RadioOption, { children: [
|
|
205
|
+
/* @__PURE__ */ jsx(
|
|
206
|
+
"input",
|
|
207
|
+
{
|
|
208
|
+
type: "radio",
|
|
209
|
+
id: `account-${account.id}`,
|
|
210
|
+
name: "account-selection",
|
|
211
|
+
value: account.id,
|
|
212
|
+
checked: selectedAccountId === account.id,
|
|
213
|
+
onChange: (e) => setSelectedAccountId(e.target.value)
|
|
214
|
+
}
|
|
215
|
+
),
|
|
216
|
+
/* @__PURE__ */ jsx("label", { htmlFor: `account-${account.id}`, children: /* @__PURE__ */ jsxs(AccountLabelContent, { children: [
|
|
217
|
+
localNode ? /* @__PURE__ */ jsx(
|
|
218
|
+
AccountOrGroupText,
|
|
219
|
+
{
|
|
220
|
+
coId: account.id,
|
|
221
|
+
showId: true,
|
|
222
|
+
node: localNode
|
|
223
|
+
}
|
|
224
|
+
) : account.id,
|
|
225
|
+
/* @__PURE__ */ jsx(SyncServerText, { children: account.syncServer ?? "cloud.jazz.tools" })
|
|
226
|
+
] }) })
|
|
227
|
+
] }, account.id))
|
|
228
|
+
] }) }),
|
|
229
|
+
/* @__PURE__ */ jsxs(ModalAddAccountForm, { onSubmit: handleAddAccountSubmit, children: [
|
|
230
|
+
/* @__PURE__ */ jsx(FormHeading, { children: "Add an account to inspect" }),
|
|
231
|
+
/* @__PURE__ */ jsxs(FormDescription, { children: [
|
|
232
|
+
"Use the ",
|
|
233
|
+
/* @__PURE__ */ jsx(CodeInline, { children: "jazz-logged-in-secret" }),
|
|
234
|
+
" local storage key from within your Jazz app for your account credentials. You can paste the full JSON object or enter the ID and secret separately."
|
|
235
|
+
] }),
|
|
236
|
+
addAccountError && /* @__PURE__ */ jsx(ErrorText, { children: addAccountError }),
|
|
237
|
+
/* @__PURE__ */ jsx(
|
|
238
|
+
Input,
|
|
239
|
+
{
|
|
240
|
+
label: "Account ID",
|
|
241
|
+
value: newAccountId,
|
|
242
|
+
required: true,
|
|
243
|
+
placeholder: "co_z1234567890abcdef123456789 or paste full JSON",
|
|
244
|
+
onChange: handleNewAccountIdChange
|
|
245
|
+
}
|
|
246
|
+
),
|
|
247
|
+
/* @__PURE__ */ jsx(
|
|
248
|
+
Input,
|
|
249
|
+
{
|
|
250
|
+
label: "Account secret",
|
|
251
|
+
type: "password",
|
|
252
|
+
required: true,
|
|
253
|
+
value: newAccountSecret,
|
|
254
|
+
onChange: (e) => setNewAccountSecret(e.target.value),
|
|
255
|
+
placeholder: "sealerSecret_ziz7NA12340abcdef123789..."
|
|
256
|
+
}
|
|
257
|
+
),
|
|
258
|
+
/* @__PURE__ */ jsx(
|
|
259
|
+
Input,
|
|
260
|
+
{
|
|
261
|
+
label: "Sync server",
|
|
262
|
+
required: true,
|
|
263
|
+
value: newAccountSyncServer,
|
|
264
|
+
onChange: (e) => setNewAccountSyncServer(e.target.value),
|
|
265
|
+
placeholder: "wss://cloud.jazz.tools/"
|
|
266
|
+
}
|
|
267
|
+
),
|
|
268
|
+
/* @__PURE__ */ jsx(Button, { className: "mt-3", type: "submit", children: "Add account" })
|
|
269
|
+
] })
|
|
270
|
+
] })
|
|
271
|
+
}
|
|
272
|
+
)
|
|
273
|
+
] });
|
|
274
|
+
}
|
|
275
|
+
var AccountSwitcherContainer = styled("div")`
|
|
276
|
+
position: relative;
|
|
277
|
+
display: flex;
|
|
278
|
+
align-items: stretch;
|
|
279
|
+
gap: 0.25rem;
|
|
280
|
+
`;
|
|
281
|
+
var ModalContentGrid = styled("div")`
|
|
282
|
+
display: flex;
|
|
283
|
+
flex-direction: column;
|
|
284
|
+
gap: 1.5rem;
|
|
285
|
+
|
|
286
|
+
@media (min-width: 768px) {
|
|
287
|
+
display: grid;
|
|
288
|
+
grid-template-columns: 1fr 1fr;
|
|
289
|
+
gap: 1.5rem;
|
|
290
|
+
}
|
|
291
|
+
`;
|
|
292
|
+
var AccountSelectionFieldset = styled("fieldset")`
|
|
293
|
+
border: 1px solid var(--j-border-color);
|
|
294
|
+
border-radius: var(--j-radius-md);
|
|
295
|
+
padding: 1rem;
|
|
296
|
+
margin: 0;
|
|
297
|
+
display: flex;
|
|
298
|
+
flex-direction: column;
|
|
299
|
+
gap: 0.75rem;
|
|
300
|
+
|
|
301
|
+
legend {
|
|
302
|
+
padding: 0 0.5rem;
|
|
303
|
+
font-weight: 500;
|
|
304
|
+
color: var(--j-text-color);
|
|
305
|
+
}
|
|
306
|
+
`;
|
|
307
|
+
var ConfirmButtonContainer = styled("div")`
|
|
308
|
+
margin-top: 0.5rem;
|
|
309
|
+
display: flex;
|
|
310
|
+
justify-content: flex-end;
|
|
311
|
+
`;
|
|
312
|
+
var RadioOption = styled("div")`
|
|
313
|
+
display: flex;
|
|
314
|
+
align-items: flex-start;
|
|
315
|
+
gap: 0.5rem;
|
|
316
|
+
|
|
317
|
+
input[type="radio"] {
|
|
318
|
+
margin: 0;
|
|
319
|
+
cursor: pointer;
|
|
320
|
+
margin-top: 0.25rem;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
label {
|
|
324
|
+
cursor: pointer;
|
|
325
|
+
color: var(--j-text-color);
|
|
326
|
+
flex: 1;
|
|
327
|
+
}
|
|
328
|
+
`;
|
|
329
|
+
var AccountLabelContent = styled("div")`
|
|
330
|
+
display: flex;
|
|
331
|
+
flex-direction: column;
|
|
332
|
+
gap: 0.25rem;
|
|
333
|
+
`;
|
|
334
|
+
var SyncServerText = styled("span")`
|
|
335
|
+
font-style: italic;
|
|
336
|
+
font-size: 0.875rem;
|
|
337
|
+
color: var(--j-text-color);
|
|
338
|
+
opacity: 0.7;
|
|
339
|
+
`;
|
|
340
|
+
var ModalAddAccountForm = styled("form")`
|
|
341
|
+
display: flex;
|
|
342
|
+
flex-direction: column;
|
|
343
|
+
gap: 1rem;
|
|
344
|
+
|
|
345
|
+
@media (max-width: 767px) {
|
|
346
|
+
padding-top: 1rem;
|
|
347
|
+
border-top: 1px solid var(--j-border-color);
|
|
348
|
+
}
|
|
349
|
+
`;
|
|
350
|
+
var ErrorText = styled("p")`
|
|
351
|
+
color: #b91c1c;
|
|
352
|
+
font-size: 0.875rem;
|
|
353
|
+
margin: 0;
|
|
354
|
+
padding: 0.5rem;
|
|
355
|
+
background-color: #fee2e2;
|
|
356
|
+
border-radius: var(--j-radius-sm);
|
|
357
|
+
border: 1px solid #f87171;
|
|
358
|
+
|
|
359
|
+
@media (prefers-color-scheme: dark) {
|
|
360
|
+
color: #fca5a5;
|
|
361
|
+
background-color: #7f1d1d;
|
|
362
|
+
border-color: #991b1b;
|
|
363
|
+
}
|
|
364
|
+
`;
|
|
365
|
+
var FormHeading = styled("h2")`
|
|
366
|
+
font-size: 1.5rem;
|
|
367
|
+
font-weight: 500;
|
|
368
|
+
color: #111827;
|
|
369
|
+
|
|
370
|
+
@media (prefers-color-scheme: dark) {
|
|
371
|
+
color: #fff;
|
|
372
|
+
}
|
|
373
|
+
`;
|
|
374
|
+
var FormDescription = styled("p")`
|
|
375
|
+
margin-bottom: 1.25rem;
|
|
376
|
+
font-size: 0.875rem;
|
|
377
|
+
color: var(--j-text-color);
|
|
378
|
+
`;
|
|
379
|
+
var CodeInline = styled("code")`
|
|
380
|
+
white-space: nowrap;
|
|
381
|
+
color: #0c0a09;
|
|
382
|
+
font-weight: 600;
|
|
383
|
+
|
|
384
|
+
@media (prefers-color-scheme: dark) {
|
|
385
|
+
color: #fff;
|
|
386
|
+
}
|
|
387
|
+
`;
|
|
388
|
+
|
|
389
|
+
// src/inspector/standalone.tsx
|
|
390
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
391
|
+
setup(React2.createElement);
|
|
392
|
+
function InspectorStandalone(props) {
|
|
393
|
+
return /* @__PURE__ */ jsx2(HashRouterProvider, { children: /* @__PURE__ */ jsx2(NodeProvider, { children: /* @__PURE__ */ jsxs2(InspectorContainer, { as: GlobalStyles, children: [
|
|
394
|
+
/* @__PURE__ */ jsx2(Header, { children: /* @__PURE__ */ jsx2(AccountSwitcher, { defaultSyncServer: props.defaultSyncServer }) }),
|
|
395
|
+
/* @__PURE__ */ jsx2(NodeContext.Consumer, { children: ({ accountID }) => accountID ? /* @__PURE__ */ jsx2(PageStack, {}) : /* @__PURE__ */ jsx2(CenteredMessage, { children: "Select an account to connect to the inspector." }) })
|
|
396
|
+
] }) }) });
|
|
397
|
+
}
|
|
398
|
+
var InspectorContainer = styled2("div")`
|
|
399
|
+
height: 100vh;
|
|
400
|
+
overflow: hidden;
|
|
401
|
+
display: flex;
|
|
402
|
+
flex-direction: column;
|
|
403
|
+
color: #44403c; /* text-stone-700 */
|
|
404
|
+
background-color: #fff; /* bg-white */
|
|
405
|
+
|
|
406
|
+
@media (prefers-color-scheme: dark) {
|
|
407
|
+
color: #d6d3d1; /* text-stone-300 */
|
|
408
|
+
background-color: #0c0a09; /* bg-stone-950 */
|
|
409
|
+
}
|
|
410
|
+
`;
|
|
411
|
+
var CenteredMessage = styled2("p")`
|
|
412
|
+
text-align: center;
|
|
413
|
+
margin: 0;
|
|
414
|
+
padding: 1rem;
|
|
415
|
+
color: var(--j-text-color);
|
|
416
|
+
`;
|
|
417
|
+
export {
|
|
418
|
+
InspectorStandalone as default
|
|
419
|
+
};
|
|
420
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/inspector/standalone.tsx","../../src/inspector/account-switcher.tsx"],"sourcesContent":["import React from \"react\";\nimport { HashRouterProvider } from \"./router\";\nimport { setup, styled } from \"goober\";\nimport { NodeContext, NodeProvider } from \"./contexts/node\";\nimport { Header } from \"./viewer/header\";\nimport { GlobalStyles } from \"./ui/global-styles\";\nimport { PageStack } from \"./viewer/page-stack\";\nimport { AccountSwitcher } from \"./account-switcher\";\n\ntype InspectorAppProps = {\n defaultSyncServer?: string;\n};\n\nsetup(React.createElement);\n\nexport default function InspectorStandalone(props: InspectorAppProps) {\n return (\n <HashRouterProvider>\n <NodeProvider>\n <InspectorContainer as={GlobalStyles}>\n <Header>\n <AccountSwitcher defaultSyncServer={props.defaultSyncServer} />\n </Header>\n <NodeContext.Consumer>\n {({ accountID }) =>\n accountID ? (\n <PageStack />\n ) : (\n <CenteredMessage>\n Select an account to connect to the inspector.\n </CenteredMessage>\n )\n }\n </NodeContext.Consumer>\n </InspectorContainer>\n </NodeProvider>\n </HashRouterProvider>\n );\n}\n\nconst InspectorContainer = styled(\"div\")`\n height: 100vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n color: #44403c; /* text-stone-700 */\n background-color: #fff; /* bg-white */\n\n @media (prefers-color-scheme: dark) {\n color: #d6d3d1; /* text-stone-300 */\n background-color: #0c0a09; /* bg-stone-950 */\n }\n`;\n\nconst CenteredMessage = styled(\"p\")`\n text-align: center;\n margin: 0;\n padding: 1rem;\n color: var(--j-text-color);\n`;\n","import type { AgentSecret, RawAccountID } from \"cojson\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { styled } from \"goober\";\nimport { useNode } from \"./contexts/node\";\nimport { Button, Icon, Input, Modal } from \"./ui\";\nimport { AccountOrGroupText } from \"./viewer/account-or-group-text\";\n\ninterface Account {\n id: RawAccountID;\n secret: AgentSecret;\n syncServer?: string;\n}\n\ninterface JazzLoggedInSecret {\n accountID: string;\n accountSecret: string;\n secretSeed?: number[];\n provider?: string;\n}\n\nexport function AccountSwitcher({\n defaultSyncServer,\n}: {\n defaultSyncServer?: string;\n}) {\n const {\n accountID: currentAccountId,\n localNode,\n createLocalNode,\n reset,\n } = useNode();\n const [accounts, setAccounts] = useState<Account[]>(() => {\n const storedAccounts = localStorage.getItem(\"inspectorAccounts\");\n return storedAccounts ? JSON.parse(storedAccounts) : [];\n });\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [selectedAccountId, setSelectedAccountId] =\n useState<RawAccountID | null>(() => {\n const lastSelectedAccountId = localStorage.getItem(\n \"lastSelectedAccountId\",\n );\n return lastSelectedAccountId\n ? (lastSelectedAccountId as RawAccountID)\n : currentAccountId;\n });\n const [newAccountId, setNewAccountId] = useState(\"\");\n const [newAccountSecret, setNewAccountSecret] = useState(\"\");\n const [newAccountSyncServer, setNewAccountSyncServer] = useState(\n \"wss://cloud.jazz.tools\",\n );\n const [addAccountError, setAddAccountError] = useState<string | null>(null);\n\n const addAccount = (\n id: RawAccountID,\n secret: AgentSecret,\n syncServer: string,\n ) => {\n const newAccount: Account = {\n id,\n secret,\n syncServer,\n };\n const accountExists = accounts.some((account) => account.id === id);\n if (!accountExists) {\n const updatedAccounts = [...accounts, newAccount];\n setAccounts(updatedAccounts);\n localStorage.setItem(\n \"inspectorAccounts\",\n JSON.stringify(updatedAccounts),\n );\n setSelectedAccountId(id);\n } else {\n setSelectedAccountId(id);\n }\n\n setNewAccountId(\"\");\n setNewAccountSecret(\"\");\n setNewAccountSyncServer(syncServer);\n setAddAccountError(null);\n };\n\n const deleteAccount = (accountId: RawAccountID) => {\n const updatedAccounts = accounts.filter(\n (account) => account.id !== accountId,\n );\n setAccounts(updatedAccounts);\n localStorage.setItem(\"inspectorAccounts\", JSON.stringify(updatedAccounts));\n if (updatedAccounts.length > 0) {\n setCurrentAccount(updatedAccounts[0]!.id);\n } else {\n setSelectedAccountId(null);\n localStorage.removeItem(\"lastSelectedAccountId\");\n reset();\n }\n };\n\n const deleteCurrentAccount = () => {\n if (currentAccountId) {\n deleteAccount(currentAccountId);\n }\n };\n\n const setCurrentAccount = useCallback(\n async (accountId: RawAccountID | null) => {\n if (accountId === null) {\n localStorage.removeItem(\"lastSelectedAccountId\");\n reset();\n setSelectedAccountId(null);\n\n return;\n }\n\n const account = accounts.find((a) => a.id === accountId);\n if (!account) {\n throw new Error(`Account ${accountId} not found in accounts list`);\n }\n const syncServer =\n account.syncServer || defaultSyncServer || \"wss://cloud.jazz.tools\";\n\n await createLocalNode(accountId, account.secret, syncServer);\n\n setSelectedAccountId(accountId);\n localStorage.setItem(\"lastSelectedAccountId\", accountId);\n },\n [createLocalNode, accounts, defaultSyncServer],\n );\n\n const handleModalCancel = () => {\n setSelectedAccountId(currentAccountId);\n setNewAccountId(\"\");\n setNewAccountSecret(\"\");\n setNewAccountSyncServer(\"wss://cloud.jazz.tools/\");\n setAddAccountError(null);\n setIsModalOpen(false);\n };\n\n const handleNewAccountIdChange = (\n e: React.ChangeEvent<HTMLInputElement>,\n ): void => {\n const value = e.target.value;\n setNewAccountId(value);\n\n if (value.trim().startsWith(\"{\") && value.trim().endsWith(\"}\")) {\n try {\n const parsed: JazzLoggedInSecret = JSON.parse(value);\n if (parsed.accountID && parsed.accountSecret) {\n setNewAccountId(parsed.accountID);\n setNewAccountSecret(parsed.accountSecret);\n }\n } catch (error) {\n console.log(\"Failed to parse JSON:\", error);\n }\n }\n };\n\n const handleAddAccountSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!newAccountId || !newAccountSecret) {\n setAddAccountError(\"Account ID and secret are required\");\n return;\n }\n try {\n // first: try to use the credentials\n // if successful, add the account to the list\n addAccount(\n newAccountId as RawAccountID,\n newAccountSecret as AgentSecret,\n newAccountSyncServer,\n );\n\n // await setCurrentAccount(newAccountId as RawAccountID);\n setSelectedAccountId(newAccountId as RawAccountID);\n\n setIsModalOpen(false);\n } catch (error) {\n setAddAccountError(\n error instanceof Error ? error.message : \"Failed to add account\",\n );\n deleteAccount(newAccountId as RawAccountID);\n }\n };\n\n useEffect(() => {\n if (selectedAccountId) {\n setCurrentAccount(selectedAccountId);\n }\n }, [selectedAccountId]);\n\n return (\n <>\n <AccountSwitcherContainer>\n <Button\n variant=\"secondary\"\n onClick={() => {\n setSelectedAccountId(currentAccountId);\n setIsModalOpen(true);\n }}\n className=\"max-w-96\"\n >\n {currentAccountId ? (\n localNode ? (\n <AccountOrGroupText\n coId={currentAccountId}\n showId\n node={localNode}\n />\n ) : (\n currentAccountId\n )\n ) : (\n \"Select account\"\n )}\n </Button>\n {currentAccountId && (\n <Button\n variant=\"secondary\"\n onClick={deleteCurrentAccount}\n className=\"rounded-md p-2 ml-1\"\n aria-label=\"Remove account\"\n >\n <Icon name=\"delete\" className=\"text-gray-500\" />\n </Button>\n )}\n </AccountSwitcherContainer>\n\n <Modal\n isOpen={isModalOpen}\n onClose={handleModalCancel}\n heading=\"Select Account\"\n showButtons={false}\n wide={true}\n >\n <ModalContentGrid>\n <div>\n <AccountSelectionFieldset>\n <legend>Accounts</legend>\n {accounts.length === 0 ? (\n <p style={{ color: \"var(--j-text-color)\", margin: \"0.5rem 0\" }}>\n No accounts available. Add one below.\n </p>\n ) : (\n accounts.map((account) => (\n <RadioOption key={account.id}>\n <input\n type=\"radio\"\n id={`account-${account.id}`}\n name=\"account-selection\"\n value={account.id}\n checked={selectedAccountId === account.id}\n onChange={(e) =>\n setSelectedAccountId(e.target.value as RawAccountID)\n }\n />\n <label htmlFor={`account-${account.id}`}>\n <AccountLabelContent>\n {localNode ? (\n <AccountOrGroupText\n coId={account.id}\n showId\n node={localNode}\n />\n ) : (\n account.id\n )}\n <SyncServerText>\n {account.syncServer ?? \"cloud.jazz.tools\"}\n </SyncServerText>\n </AccountLabelContent>\n </label>\n </RadioOption>\n ))\n )}\n </AccountSelectionFieldset>\n </div>\n\n <ModalAddAccountForm onSubmit={handleAddAccountSubmit}>\n <FormHeading>Add an account to inspect</FormHeading>\n <FormDescription>\n Use the <CodeInline>jazz-logged-in-secret</CodeInline> local\n storage key from within your Jazz app for your account\n credentials. You can paste the full JSON object or enter the ID\n and secret separately.\n </FormDescription>\n {addAccountError && <ErrorText>{addAccountError}</ErrorText>}\n <Input\n label=\"Account ID\"\n value={newAccountId}\n required\n placeholder=\"co_z1234567890abcdef123456789 or paste full JSON\"\n onChange={handleNewAccountIdChange}\n />\n <Input\n label=\"Account secret\"\n type=\"password\"\n required\n value={newAccountSecret}\n onChange={(e) => setNewAccountSecret(e.target.value)}\n placeholder=\"sealerSecret_ziz7NA12340abcdef123789...\"\n />\n <Input\n label=\"Sync server\"\n required\n value={newAccountSyncServer}\n onChange={(e) => setNewAccountSyncServer(e.target.value)}\n placeholder=\"wss://cloud.jazz.tools/\"\n />\n <Button className=\"mt-3\" type=\"submit\">\n Add account\n </Button>\n </ModalAddAccountForm>\n </ModalContentGrid>\n </Modal>\n </>\n );\n}\n\nconst AccountSwitcherContainer = styled(\"div\")`\n position: relative;\n display: flex;\n align-items: stretch;\n gap: 0.25rem;\n`;\n\nconst ModalContentGrid = styled(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n\n @media (min-width: 768px) {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.5rem;\n }\n`;\n\nconst AccountSelectionFieldset = styled(\"fieldset\")`\n border: 1px solid var(--j-border-color);\n border-radius: var(--j-radius-md);\n padding: 1rem;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n\n legend {\n padding: 0 0.5rem;\n font-weight: 500;\n color: var(--j-text-color);\n }\n`;\n\nconst ConfirmButtonContainer = styled(\"div\")`\n margin-top: 0.5rem;\n display: flex;\n justify-content: flex-end;\n`;\n\nconst RadioOption = styled(\"div\")`\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n\n input[type=\"radio\"] {\n margin: 0;\n cursor: pointer;\n margin-top: 0.25rem;\n }\n\n label {\n cursor: pointer;\n color: var(--j-text-color);\n flex: 1;\n }\n`;\n\nconst AccountLabelContent = styled(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n`;\n\nconst SyncServerText = styled(\"span\")`\n font-style: italic;\n font-size: 0.875rem;\n color: var(--j-text-color);\n opacity: 0.7;\n`;\n\nconst ModalAddAccountForm = styled(\"form\")`\n display: flex;\n flex-direction: column;\n gap: 1rem;\n\n @media (max-width: 767px) {\n padding-top: 1rem;\n border-top: 1px solid var(--j-border-color);\n }\n`;\n\nconst ErrorText = styled(\"p\")`\n color: #b91c1c;\n font-size: 0.875rem;\n margin: 0;\n padding: 0.5rem;\n background-color: #fee2e2;\n border-radius: var(--j-radius-sm);\n border: 1px solid #f87171;\n\n @media (prefers-color-scheme: dark) {\n color: #fca5a5;\n background-color: #7f1d1d;\n border-color: #991b1b;\n }\n`;\n\nconst FormHeading = styled(\"h2\")`\n font-size: 1.5rem;\n font-weight: 500;\n color: #111827;\n\n @media (prefers-color-scheme: dark) {\n color: #fff;\n }\n`;\n\nconst FormDescription = styled(\"p\")`\n margin-bottom: 1.25rem;\n font-size: 0.875rem;\n color: var(--j-text-color);\n`;\n\nconst CodeInline = styled(\"code\")`\n white-space: nowrap;\n color: #0c0a09;\n font-weight: 600;\n\n @media (prefers-color-scheme: dark) {\n color: #fff;\n }\n`;\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,OAAOA,YAAW;AAElB,SAAS,OAAO,UAAAC,eAAc;;;ACD9B,SAAgB,aAAa,WAAW,gBAAgB;AACxD,SAAS,cAAc;AA2LnB,mBAYU,KAXR,YADF;AAzKG,SAAS,gBAAgB;AAAA,EAC9B;AACF,GAEG;AACD,QAAM;AAAA,IACJ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,QAAQ;AACZ,QAAM,CAAC,UAAU,WAAW,IAAI,SAAoB,MAAM;AACxD,UAAM,iBAAiB,aAAa,QAAQ,mBAAmB;AAC/D,WAAO,iBAAiB,KAAK,MAAM,cAAc,IAAI,CAAC;AAAA,EACxD,CAAC;AACD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,QAAM,CAAC,mBAAmB,oBAAoB,IAC5C,SAA8B,MAAM;AAClC,UAAM,wBAAwB,aAAa;AAAA,MACzC;AAAA,IACF;AACA,WAAO,wBACF,wBACD;AAAA,EACN,CAAC;AACH,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,EAAE;AACnD,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,EAAE;AAC3D,QAAM,CAAC,sBAAsB,uBAAuB,IAAI;AAAA,IACtD;AAAA,EACF;AACA,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAwB,IAAI;AAE1E,QAAM,aAAa,CACjB,IACA,QACA,eACG;AACH,UAAM,aAAsB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,gBAAgB,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,EAAE;AAClE,QAAI,CAAC,eAAe;AAClB,YAAM,kBAAkB,CAAC,GAAG,UAAU,UAAU;AAChD,kBAAY,eAAe;AAC3B,mBAAa;AAAA,QACX;AAAA,QACA,KAAK,UAAU,eAAe;AAAA,MAChC;AACA,2BAAqB,EAAE;AAAA,IACzB,OAAO;AACL,2BAAqB,EAAE;AAAA,IACzB;AAEA,oBAAgB,EAAE;AAClB,wBAAoB,EAAE;AACtB,4BAAwB,UAAU;AAClC,uBAAmB,IAAI;AAAA,EACzB;AAEA,QAAM,gBAAgB,CAAC,cAA4B;AACjD,UAAM,kBAAkB,SAAS;AAAA,MAC/B,CAAC,YAAY,QAAQ,OAAO;AAAA,IAC9B;AACA,gBAAY,eAAe;AAC3B,iBAAa,QAAQ,qBAAqB,KAAK,UAAU,eAAe,CAAC;AACzE,QAAI,gBAAgB,SAAS,GAAG;AAC9B,wBAAkB,gBAAgB,CAAC,EAAG,EAAE;AAAA,IAC1C,OAAO;AACL,2BAAqB,IAAI;AACzB,mBAAa,WAAW,uBAAuB;AAC/C,YAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,uBAAuB,MAAM;AACjC,QAAI,kBAAkB;AACpB,oBAAc,gBAAgB;AAAA,IAChC;AAAA,EACF;AAEA,QAAM,oBAAoB;AAAA,IACxB,OAAO,cAAmC;AACxC,UAAI,cAAc,MAAM;AACtB,qBAAa,WAAW,uBAAuB;AAC/C,cAAM;AACN,6BAAqB,IAAI;AAEzB;AAAA,MACF;AAEA,YAAM,UAAU,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS;AACvD,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,WAAW,SAAS,6BAA6B;AAAA,MACnE;AACA,YAAM,aACJ,QAAQ,cAAc,qBAAqB;AAE7C,YAAM,gBAAgB,WAAW,QAAQ,QAAQ,UAAU;AAE3D,2BAAqB,SAAS;AAC9B,mBAAa,QAAQ,yBAAyB,SAAS;AAAA,IACzD;AAAA,IACA,CAAC,iBAAiB,UAAU,iBAAiB;AAAA,EAC/C;AAEA,QAAM,oBAAoB,MAAM;AAC9B,yBAAqB,gBAAgB;AACrC,oBAAgB,EAAE;AAClB,wBAAoB,EAAE;AACtB,4BAAwB,yBAAyB;AACjD,uBAAmB,IAAI;AACvB,mBAAe,KAAK;AAAA,EACtB;AAEA,QAAM,2BAA2B,CAC/B,MACS;AACT,UAAM,QAAQ,EAAE,OAAO;AACvB,oBAAgB,KAAK;AAErB,QAAI,MAAM,KAAK,EAAE,WAAW,GAAG,KAAK,MAAM,KAAK,EAAE,SAAS,GAAG,GAAG;AAC9D,UAAI;AACF,cAAM,SAA6B,KAAK,MAAM,KAAK;AACnD,YAAI,OAAO,aAAa,OAAO,eAAe;AAC5C,0BAAgB,OAAO,SAAS;AAChC,8BAAoB,OAAO,aAAa;AAAA,QAC1C;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,IAAI,yBAAyB,KAAK;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,yBAAyB,OAAO,MAAuB;AAC3D,MAAE,eAAe;AACjB,QAAI,CAAC,gBAAgB,CAAC,kBAAkB;AACtC,yBAAmB,oCAAoC;AACvD;AAAA,IACF;AACA,QAAI;AAGF;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAGA,2BAAqB,YAA4B;AAEjD,qBAAe,KAAK;AAAA,IACtB,SAAS,OAAO;AACd;AAAA,QACE,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC3C;AACA,oBAAc,YAA4B;AAAA,IAC5C;AAAA,EACF;AAEA,YAAU,MAAM;AACd,QAAI,mBAAmB;AACrB,wBAAkB,iBAAiB;AAAA,IACrC;AAAA,EACF,GAAG,CAAC,iBAAiB,CAAC;AAEtB,SACE,iCACE;AAAA,yBAAC,4BACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,MAAM;AACb,iCAAqB,gBAAgB;AACrC,2BAAe,IAAI;AAAA,UACrB;AAAA,UACA,WAAU;AAAA,UAET,6BACC,YACE;AAAA,YAAC;AAAA;AAAA,cACC,MAAM;AAAA,cACN,QAAM;AAAA,cACN,MAAM;AAAA;AAAA,UACR,IAEA,mBAGF;AAAA;AAAA,MAEJ;AAAA,MACC,oBACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS;AAAA,UACT,WAAU;AAAA,UACV,cAAW;AAAA,UAEX,8BAAC,QAAK,MAAK,UAAS,WAAU,iBAAgB;AAAA;AAAA,MAChD;AAAA,OAEJ;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAQ;AAAA,QACR,aAAa;AAAA,QACb,MAAM;AAAA,QAEN,+BAAC,oBACC;AAAA,8BAAC,SACC,+BAAC,4BACC;AAAA,gCAAC,YAAO,sBAAQ;AAAA,YACf,SAAS,WAAW,IACnB,oBAAC,OAAE,OAAO,EAAE,OAAO,uBAAuB,QAAQ,WAAW,GAAG,mDAEhE,IAEA,SAAS,IAAI,CAAC,YACZ,qBAAC,eACC;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,IAAI,WAAW,QAAQ,EAAE;AAAA,kBACzB,MAAK;AAAA,kBACL,OAAO,QAAQ;AAAA,kBACf,SAAS,sBAAsB,QAAQ;AAAA,kBACvC,UAAU,CAAC,MACT,qBAAqB,EAAE,OAAO,KAAqB;AAAA;AAAA,cAEvD;AAAA,cACA,oBAAC,WAAM,SAAS,WAAW,QAAQ,EAAE,IACnC,+BAAC,uBACE;AAAA,4BACC;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM,QAAQ;AAAA,oBACd,QAAM;AAAA,oBACN,MAAM;AAAA;AAAA,gBACR,IAEA,QAAQ;AAAA,gBAEV,oBAAC,kBACE,kBAAQ,cAAc,oBACzB;AAAA,iBACF,GACF;AAAA,iBA1BgB,QAAQ,EA2B1B,CACD;AAAA,aAEL,GACF;AAAA,UAEA,qBAAC,uBAAoB,UAAU,wBAC7B;AAAA,gCAAC,eAAY,uCAAyB;AAAA,YACtC,qBAAC,mBAAgB;AAAA;AAAA,cACP,oBAAC,cAAW,mCAAqB;AAAA,cAAa;AAAA,eAIxD;AAAA,YACC,mBAAmB,oBAAC,aAAW,2BAAgB;AAAA,YAChD;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAQ;AAAA,gBACR,aAAY;AAAA,gBACZ,UAAU;AAAA;AAAA,YACZ;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,MAAK;AAAA,gBACL,UAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,oBAAoB,EAAE,OAAO,KAAK;AAAA,gBACnD,aAAY;AAAA;AAAA,YACd;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,UAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,wBAAwB,EAAE,OAAO,KAAK;AAAA,gBACvD,aAAY;AAAA;AAAA,YACd;AAAA,YACA,oBAAC,UAAO,WAAU,QAAO,MAAK,UAAS,yBAEvC;AAAA,aACF;AAAA,WACF;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,IAAM,2BAA2B,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAO7C,IAAM,mBAAmB,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYrC,IAAM,2BAA2B,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBlD,IAAM,yBAAyB,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAM3C,IAAM,cAAc,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBhC,IAAM,sBAAsB,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMxC,IAAM,iBAAiB,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,IAAM,sBAAsB,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWzC,IAAM,YAAY,OAAO,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB5B,IAAM,cAAc,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU/B,IAAM,kBAAkB,OAAO,GAAG;AAAA;AAAA;AAAA;AAAA;AAMlC,IAAM,aAAa,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AD5ZxB,SAEI,OAAAC,MAFJ,QAAAC,aAAA;AANR,MAAMC,OAAM,aAAa;AAEV,SAAR,oBAAqC,OAA0B;AACpE,SACE,gBAAAF,KAAC,sBACC,0BAAAA,KAAC,gBACC,0BAAAC,MAAC,sBAAmB,IAAI,cACtB;AAAA,oBAAAD,KAAC,UACC,0BAAAA,KAAC,mBAAgB,mBAAmB,MAAM,mBAAmB,GAC/D;AAAA,IACA,gBAAAA,KAAC,YAAY,UAAZ,EACE,WAAC,EAAE,UAAU,MACZ,YACE,gBAAAA,KAAC,aAAU,IAEX,gBAAAA,KAAC,mBAAgB,4DAEjB,GAGN;AAAA,KACF,GACF,GACF;AAEJ;AAEA,IAAM,qBAAqBG,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcvC,IAAM,kBAAkBA,QAAO,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;","names":["React","styled","jsx","jsxs","React","styled"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-router.test.d.ts","sourceRoot":"","sources":["../../../../src/inspector/tests/router/hash-router.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-router.test.d.ts","sourceRoot":"","sources":["../../../../src/inspector/tests/router/in-memory-router.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions-changes.test.d.ts","sourceRoot":"","sources":["../../../../src/inspector/tests/utils/transactions-changes.test.ts"],"names":[],"mappings":""}
|
|
@@ -10,6 +10,7 @@ interface ModalProps {
|
|
|
10
10
|
onCancel?: () => void;
|
|
11
11
|
showButtons?: boolean;
|
|
12
12
|
className?: string;
|
|
13
|
+
wide?: boolean;
|
|
13
14
|
}
|
|
14
15
|
export declare const Modal: import("react").ForwardRefExoticComponent<ModalProps & import("react").RefAttributes<HTMLDialogElement>>;
|
|
15
16
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/inspector/ui/modal.tsx"],"names":[],"mappings":"AAKA,UAAU,UAAU;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/inspector/ui/modal.tsx"],"names":[],"mappings":"AAKA,UAAU,UAAU;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA6DD,eAAO,MAAM,KAAK,0GA+EjB,CAAC"}
|
|
@@ -2,37 +2,37 @@ import type { AccountRole, BinaryStreamStart, CoID, RawCoValue, Role } from "coj
|
|
|
2
2
|
import type { ListOpPayload } from "cojson/dist/coValues/coList.js";
|
|
3
3
|
import type { MapOpPayload } from "cojson/dist/coValues/coMap.js";
|
|
4
4
|
import type { BinaryStreamChunk, BinaryStreamEnd } from "cojson/dist/coValues/coStream.js";
|
|
5
|
-
export declare const isGroupExtension: (change: any) => change is Extract<MapOpPayload<`child_${string}`, "extend">, {
|
|
5
|
+
export declare const isGroupExtension: (coValue: RawCoValue, change: any) => change is Extract<MapOpPayload<`child_${string}`, "extend">, {
|
|
6
6
|
op: "set";
|
|
7
7
|
}>;
|
|
8
|
-
export declare const isGroupExtendRevocation: (change: any) => change is Extract<MapOpPayload<`child_${string}`, "revoked">, {
|
|
8
|
+
export declare const isGroupExtendRevocation: (coValue: RawCoValue, change: any) => change is Extract<MapOpPayload<`child_${string}`, "revoked">, {
|
|
9
9
|
op: "set";
|
|
10
10
|
}>;
|
|
11
|
-
export declare const isGroupPromotion: (change: any) => change is Extract<MapOpPayload<`parent_co_${string}`, AccountRole>, {
|
|
11
|
+
export declare const isGroupPromotion: (coValue: RawCoValue, change: any) => change is Extract<MapOpPayload<`parent_co_${string}`, AccountRole>, {
|
|
12
12
|
op: "set";
|
|
13
13
|
}>;
|
|
14
|
-
export declare const isUserPromotion: (change: any) => change is Extract<MapOpPayload<CoID<RawCoValue>, Role>, {
|
|
14
|
+
export declare const isUserPromotion: (coValue: RawCoValue, change: any) => change is Extract<MapOpPayload<CoID<RawCoValue>, Role>, {
|
|
15
15
|
op: "set";
|
|
16
16
|
}>;
|
|
17
|
-
export declare const isKeyRevelation: (change: any) => change is Extract<MapOpPayload<`${string}_for_${string}`, string>, {
|
|
17
|
+
export declare const isKeyRevelation: (coValue: RawCoValue, change: any) => change is Extract<MapOpPayload<`${string}_for_${string}`, string>, {
|
|
18
18
|
op: "set";
|
|
19
19
|
}>;
|
|
20
|
-
export declare const isPropertySet: (change: any) => change is Extract<MapOpPayload<string, any>, {
|
|
20
|
+
export declare const isPropertySet: (coValue: RawCoValue, change: any) => change is Extract<MapOpPayload<string, any>, {
|
|
21
21
|
op: "set";
|
|
22
22
|
}>;
|
|
23
|
-
export declare const isPropertyDeletion: (change: any) => change is Extract<MapOpPayload<string, any>, {
|
|
23
|
+
export declare const isPropertyDeletion: (coValue: RawCoValue, change: any) => change is Extract<MapOpPayload<string, any>, {
|
|
24
24
|
op: "del";
|
|
25
25
|
}>;
|
|
26
|
-
export declare const isItemAppend: (change: any) => change is Extract<ListOpPayload<any>, {
|
|
26
|
+
export declare const isItemAppend: (coValue: RawCoValue, change: any) => change is Extract<ListOpPayload<any>, {
|
|
27
27
|
op: "app";
|
|
28
28
|
}>;
|
|
29
|
-
export declare const isItemPrepend: (change: any) => change is Extract<ListOpPayload<any>, {
|
|
29
|
+
export declare const isItemPrepend: (coValue: RawCoValue, change: any) => change is Extract<ListOpPayload<any>, {
|
|
30
30
|
op: "pre";
|
|
31
31
|
}>;
|
|
32
|
-
export declare const isItemDeletion: (change: any) => change is Extract<ListOpPayload<any>, {
|
|
32
|
+
export declare const isItemDeletion: (coValue: RawCoValue, change: any) => change is Extract<ListOpPayload<any>, {
|
|
33
33
|
op: "del";
|
|
34
34
|
}>;
|
|
35
|
-
export declare const isStreamStart: (change: any) => change is BinaryStreamStart;
|
|
36
|
-
export declare const isStreamChunk: (change: any) => change is BinaryStreamChunk;
|
|
37
|
-
export declare const isStreamEnd: (change: any) => change is BinaryStreamEnd;
|
|
35
|
+
export declare const isStreamStart: (coValue: RawCoValue, change: any) => change is BinaryStreamStart;
|
|
36
|
+
export declare const isStreamChunk: (coValue: RawCoValue, change: any) => change is BinaryStreamChunk;
|
|
37
|
+
export declare const isStreamEnd: (coValue: RawCoValue, change: any) => change is BinaryStreamEnd;
|
|
38
38
|
//# sourceMappingURL=transactions-changes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions-changes.d.ts","sourceRoot":"","sources":["../../../src/inspector/utils/transactions-changes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,IAAI,EACL,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAG1C,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"transactions-changes.d.ts","sourceRoot":"","sources":["../../../src/inspector/utils/transactions-changes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,IAAI,EACL,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAG1C,eAAO,MAAM,gBAAgB,YAClB,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAClB,YAAY,CAAC,SAAS,MAAM,EAAE,EAAE,QAAQ,CAAC,EACzC;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAId,CAAC;AAEF,eAAO,MAAM,uBAAuB,YACzB,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAClB,YAAY,CAAC,SAAS,MAAM,EAAE,EAAE,SAAS,CAAC,EAC1C;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAId,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAClB,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAClB,YAAY,CAAC,aAAa,MAAM,EAAE,EAAE,WAAW,CAAC,EAChD;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAId,CAAC;AAEF,eAAO,MAAM,eAAe,YACjB,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAKvE,CAAC;AAEF,eAAO,MAAM,eAAe,YACjB,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAClB,YAAY,CAAC,GAAG,MAAM,QAAQ,MAAM,EAAE,EAAE,MAAM,CAAC,EAC/C;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAQd,CAAC;AAEF,eAAO,MAAM,aAAa,YACf,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAE5D,CAAC;AACF,eAAO,MAAM,kBAAkB,YACpB,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAE5D,CAAC;AAEF,eAAO,MAAM,YAAY,YACd,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAGrD,CAAC;AACF,eAAO,MAAM,aAAa,YACf,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAGrD,CAAC;AAEF,eAAO,MAAM,cAAc,YAChB,UAAU,UACX,GAAG,KACV,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAGrD,CAAC;AAEF,eAAO,MAAM,aAAa,YACf,UAAU,UACX,GAAG,KACV,MAAM,IAAI,iBAGZ,CAAC;AAEF,eAAO,MAAM,aAAa,YACf,UAAU,UACX,GAAG,KACV,MAAM,IAAI,iBAGZ,CAAC;AAEF,eAAO,MAAM,WAAW,YACb,UAAU,UACX,GAAG,KACV,MAAM,IAAI,eAGZ,CAAC"}
|