@homebridge-plugins/homebridge-sharkiq 1.3.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/CHANGELOG.md +12 -0
- package/LICENSE +176 -0
- package/README.md +92 -0
- package/config.schema.json +114 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +131 -0
- package/dist/config.js.map +1 -0
- package/dist/homebridge-ui/public/index.html +201 -0
- package/dist/homebridge-ui/server.d.ts +2 -0
- package/dist/homebridge-ui/server.d.ts.map +1 -0
- package/dist/homebridge-ui/server.js +47 -0
- package/dist/homebridge-ui/server.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/login.d.ts +16 -0
- package/dist/login.d.ts.map +1 -0
- package/dist/login.js +242 -0
- package/dist/login.js.map +1 -0
- package/dist/platform.d.ts +16 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +118 -0
- package/dist/platform.js.map +1 -0
- package/dist/platformAccessory.d.ts +29 -0
- package/dist/platformAccessory.d.ts.map +1 -0
- package/dist/platformAccessory.js +285 -0
- package/dist/platformAccessory.js.map +1 -0
- package/dist/settings.d.ts +3 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +3 -0
- package/dist/settings.js.map +1 -0
- package/dist/sharkiq-js/ayla_api.d.ts +39 -0
- package/dist/sharkiq-js/ayla_api.d.ts.map +1 -0
- package/dist/sharkiq-js/ayla_api.js +289 -0
- package/dist/sharkiq-js/ayla_api.js.map +1 -0
- package/dist/sharkiq-js/const.d.ts +22 -0
- package/dist/sharkiq-js/const.d.ts.map +1 -0
- package/dist/sharkiq-js/const.js +23 -0
- package/dist/sharkiq-js/const.js.map +1 -0
- package/dist/sharkiq-js/properties.d.ts +52 -0
- package/dist/sharkiq-js/properties.d.ts.map +1 -0
- package/dist/sharkiq-js/properties.js +56 -0
- package/dist/sharkiq-js/properties.js.map +1 -0
- package/dist/sharkiq-js/sharkiq.d.ts +59 -0
- package/dist/sharkiq-js/sharkiq.d.ts.map +1 -0
- package/dist/sharkiq-js/sharkiq.js +359 -0
- package/dist/sharkiq-js/sharkiq.js.map +1 -0
- package/dist/type.d.ts +12 -0
- package/dist/type.d.ts.map +1 -0
- package/dist/type.js +2 -0
- package/dist/type.js.map +1 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +35 -0
- package/dist/utils.js.map +1 -0
- package/docs/.nojekyll +1 -0
- package/docs/assets/dmt/dmt-component-data.js +1 -0
- package/docs/assets/dmt/dmt-components.css +20 -0
- package/docs/assets/dmt/dmt-components.js +67 -0
- package/docs/assets/dmt/dmt-search.cmp +0 -0
- package/docs/assets/dmt/dmt-theme.css +1 -0
- package/docs/assets/hierarchy.js +1 -0
- package/docs/assets/highlight.css +57 -0
- package/docs/assets/icons.js +18 -0
- package/docs/assets/icons.svg +1 -0
- package/docs/assets/main.js +60 -0
- package/docs/assets/style.css +1611 -0
- package/docs/functions/default.html +2 -0
- package/docs/index.html +50 -0
- package/docs/modules.html +2 -0
- package/eslint.config.js +49 -0
- package/package.json +87 -0
- package/typedoc.json +21 -0
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { Buffer, transcode } from 'node:buffer';
|
|
2
|
+
import { safeJsonParse } from '../utils.js';
|
|
3
|
+
import { global_vars } from './const.js';
|
|
4
|
+
import { OperatingModes, PowerModes, Properties } from './properties.js';
|
|
5
|
+
// Strip text from property name
|
|
6
|
+
function _clean_property_name(raw_property_name) {
|
|
7
|
+
const check_for = ['SET_', 'GET_'];
|
|
8
|
+
if (check_for.some(v => raw_property_name.slice(0, 4).toUpperCase().includes(v))) {
|
|
9
|
+
return raw_property_name.slice(4);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return raw_property_name;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const ERROR_DELAY = 10000;
|
|
16
|
+
const TIMEOUT_DELAY = 30000;
|
|
17
|
+
class SharkIqVacuum {
|
|
18
|
+
ayla_api;
|
|
19
|
+
_dsn;
|
|
20
|
+
_key;
|
|
21
|
+
_oem_model_number;
|
|
22
|
+
_vac_model_number;
|
|
23
|
+
_vac_serial_number;
|
|
24
|
+
properties_full;
|
|
25
|
+
property_values;
|
|
26
|
+
_settable_properties;
|
|
27
|
+
europe;
|
|
28
|
+
_name;
|
|
29
|
+
_firmware_version;
|
|
30
|
+
log;
|
|
31
|
+
_error;
|
|
32
|
+
// Shark IQ vacuum entity
|
|
33
|
+
constructor(ayla_api, device_dct, log, europe = false) {
|
|
34
|
+
this.ayla_api = ayla_api;
|
|
35
|
+
this._dsn = device_dct.dsn;
|
|
36
|
+
this._key = device_dct.key;
|
|
37
|
+
this._oem_model_number = device_dct.oem_model;
|
|
38
|
+
this._vac_model_number = '';
|
|
39
|
+
this._vac_serial_number = '';
|
|
40
|
+
this.properties_full = {};
|
|
41
|
+
this.property_values = {};
|
|
42
|
+
this._settable_properties = null;
|
|
43
|
+
this.europe = europe;
|
|
44
|
+
this._name = device_dct.product_name;
|
|
45
|
+
this._firmware_version = '';
|
|
46
|
+
this.log = log;
|
|
47
|
+
this._error = null;
|
|
48
|
+
}
|
|
49
|
+
// Get oem model number
|
|
50
|
+
get oem_model_number() {
|
|
51
|
+
return this._oem_model_number;
|
|
52
|
+
}
|
|
53
|
+
// Get vacuum model number
|
|
54
|
+
get vac_model_number() {
|
|
55
|
+
return this._vac_model_number;
|
|
56
|
+
}
|
|
57
|
+
// Get vacuum serial number
|
|
58
|
+
get vac_serial_number() {
|
|
59
|
+
return this._vac_serial_number;
|
|
60
|
+
}
|
|
61
|
+
// Get vacuum name
|
|
62
|
+
get name() {
|
|
63
|
+
return this._name;
|
|
64
|
+
}
|
|
65
|
+
// Get device serial number
|
|
66
|
+
get serial_number() {
|
|
67
|
+
return this._dsn;
|
|
68
|
+
}
|
|
69
|
+
// Get current operating mode
|
|
70
|
+
operating_mode() {
|
|
71
|
+
return this.get_property_value(Properties.OPERATING_MODE);
|
|
72
|
+
}
|
|
73
|
+
// Get current docked status
|
|
74
|
+
docked_status() {
|
|
75
|
+
return this.get_property_value(Properties.DOCKED_STATUS);
|
|
76
|
+
}
|
|
77
|
+
// Get current power mode
|
|
78
|
+
power_mode() {
|
|
79
|
+
return this.get_property_value(Properties.POWER_MODE);
|
|
80
|
+
}
|
|
81
|
+
// Update vacuum details such as the model and serial number.
|
|
82
|
+
_update_metadata() {
|
|
83
|
+
const model_and_serial = this.get_property_value(Properties.DEVICE_SERIAL_NUMBER);
|
|
84
|
+
const model_serial_split = model_and_serial.split(/(\s+)/).filter((e) => {
|
|
85
|
+
return e.trim().length > 0;
|
|
86
|
+
});
|
|
87
|
+
this._vac_model_number = model_serial_split[0];
|
|
88
|
+
this._vac_serial_number = model_serial_split[1];
|
|
89
|
+
this._firmware_version = this.get_property_value(Properties.ROBOT_FIRMWARE_VERSION);
|
|
90
|
+
}
|
|
91
|
+
// Get url for the endpoint of the setting a property API
|
|
92
|
+
set_property_endpoint(property_name) {
|
|
93
|
+
return `${this.europe ? global_vars.EU_DEVICE_URL : global_vars.DEVICE_URL}`
|
|
94
|
+
+ `/apiv1/dsns/${this._dsn}/properties/${property_name}/datapoints.json`;
|
|
95
|
+
}
|
|
96
|
+
// Get a device property value
|
|
97
|
+
get_property_value(property_name) {
|
|
98
|
+
if (property_name.value) {
|
|
99
|
+
property_name = property_name.value;
|
|
100
|
+
}
|
|
101
|
+
return this.property_values[property_name];
|
|
102
|
+
}
|
|
103
|
+
// Set a device property value
|
|
104
|
+
async set_property_value(property_name, value, attempt = 0) {
|
|
105
|
+
if (property_name.value) {
|
|
106
|
+
property_name = property_name.value;
|
|
107
|
+
}
|
|
108
|
+
if (value.value) {
|
|
109
|
+
value = value.value;
|
|
110
|
+
}
|
|
111
|
+
const end_point = this.set_property_endpoint(`SET_${property_name}`);
|
|
112
|
+
const data = { datapoint: { value } };
|
|
113
|
+
try {
|
|
114
|
+
const auth_header = await this.ayla_api.auth_header();
|
|
115
|
+
const resp = await this.ayla_api.makeRequest('POST', end_point, data, auth_header);
|
|
116
|
+
if (resp.ok !== true) {
|
|
117
|
+
this.log.warn('Error setting property value:', property_name, value);
|
|
118
|
+
this.log.debug(`API Error: ${resp.response}`);
|
|
119
|
+
const status = await this.ayla_api.attempt_refresh(attempt);
|
|
120
|
+
if (!status && attempt === 1) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
await this.set_property_value(property_name, value, attempt + 1);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
this.properties_full[property_name] = value;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
this.log.debug('Promise Rejected with setting property value.');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Get the url for the endpoint that gets property values
|
|
135
|
+
get update_url() {
|
|
136
|
+
return `${this.europe ? global_vars.EU_DEVICE_URL : global_vars.DEVICE_URL}/apiv1/dsns/${this.serial_number}/properties.json`;
|
|
137
|
+
}
|
|
138
|
+
// Get properties
|
|
139
|
+
async update(property_list, attempt = 0) {
|
|
140
|
+
if (property_list) {
|
|
141
|
+
if (!Array.isArray(property_list)) {
|
|
142
|
+
property_list = [property_list];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const full_update = !property_list;
|
|
146
|
+
const url = this.update_url;
|
|
147
|
+
try {
|
|
148
|
+
if (!full_update && property_list.length !== 0) {
|
|
149
|
+
const params = new URLSearchParams();
|
|
150
|
+
property_list.forEach((property) => {
|
|
151
|
+
params.append('names[]', `GET_${property}`);
|
|
152
|
+
});
|
|
153
|
+
const auth_header = await this.ayla_api.auth_header();
|
|
154
|
+
const resp = await this.ayla_api.makeRequest('GET', `${url}?${params.toString()}`, null, auth_header);
|
|
155
|
+
try {
|
|
156
|
+
// Log raw response for debugging
|
|
157
|
+
this.log.debug(`Raw API Response: ${resp.response}`);
|
|
158
|
+
this.log.debug(`Response Status: ${resp.status}`);
|
|
159
|
+
this.log.debug(`Response OK: ${resp.ok}`);
|
|
160
|
+
// Use safe JSON parsing utility
|
|
161
|
+
const parseResult = safeJsonParse(resp.response);
|
|
162
|
+
if (!parseResult.success) {
|
|
163
|
+
this.log.warn(`Error parsing JSON response for properties: ${property_list.join(', ')}`);
|
|
164
|
+
this.log.debug(`Parse Error: ${parseResult.error}`);
|
|
165
|
+
return ERROR_DELAY;
|
|
166
|
+
}
|
|
167
|
+
const properties = parseResult.data;
|
|
168
|
+
if (resp.status === 429) {
|
|
169
|
+
this.log.debug('API Error: Too many requests');
|
|
170
|
+
this.log.debug('Waiting an extra 30 seconds before retrying...');
|
|
171
|
+
return TIMEOUT_DELAY;
|
|
172
|
+
}
|
|
173
|
+
else if (resp.ok !== true) {
|
|
174
|
+
this.log.warn('Error getting property values', property_list.join(', '));
|
|
175
|
+
if (properties.error !== undefined) {
|
|
176
|
+
this.log.debug(`Error Message: ${JSON.stringify(properties.error)}`);
|
|
177
|
+
}
|
|
178
|
+
const status = await this.ayla_api.attempt_refresh(attempt);
|
|
179
|
+
if (!status && attempt === 1) {
|
|
180
|
+
return ERROR_DELAY;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
return await this.update(property_list, attempt + 1);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this._do_update(full_update, properties);
|
|
188
|
+
return 0;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
this.log.warn(`Error processing API response for properties: ${property_list.join(', ')}`);
|
|
193
|
+
this.log.debug(`Error Message: ${e}`);
|
|
194
|
+
this.log.debug(`Raw Response: ${resp.response}`);
|
|
195
|
+
return ERROR_DELAY;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
const auth_header = await this.ayla_api.auth_header();
|
|
200
|
+
const resp = await this.ayla_api.makeRequest('GET', url, null, auth_header);
|
|
201
|
+
try {
|
|
202
|
+
// Log raw response for debugging
|
|
203
|
+
this.log.debug(`Raw API Response (full update): ${resp.response}`);
|
|
204
|
+
this.log.debug(`Response Status: ${resp.status}`);
|
|
205
|
+
this.log.debug(`Response OK: ${resp.ok}`);
|
|
206
|
+
// Use safe JSON parsing utility
|
|
207
|
+
const parseResult = safeJsonParse(resp.response);
|
|
208
|
+
if (!parseResult.success) {
|
|
209
|
+
this.log.warn('Error parsing JSON response for full property update');
|
|
210
|
+
this.log.debug(`Parse Error: ${parseResult.error}`);
|
|
211
|
+
return ERROR_DELAY;
|
|
212
|
+
}
|
|
213
|
+
const properties = parseResult.data;
|
|
214
|
+
if (resp.status === 429) {
|
|
215
|
+
this.log.debug('API Error: Too many requests');
|
|
216
|
+
this.log.debug('Waiting an extra 30 seconds before retrying...');
|
|
217
|
+
return TIMEOUT_DELAY;
|
|
218
|
+
}
|
|
219
|
+
else if (resp.ok !== true) {
|
|
220
|
+
this.log.warn('Error getting property values.');
|
|
221
|
+
if (properties.error !== undefined) {
|
|
222
|
+
this.log.debug(`Error Message: ${JSON.stringify(properties.error)}`);
|
|
223
|
+
}
|
|
224
|
+
const status = await this.ayla_api.attempt_refresh(attempt);
|
|
225
|
+
if (!status && attempt === 1) {
|
|
226
|
+
return ERROR_DELAY;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
return await this.update(property_list, attempt + 1);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
this._do_update(full_update, properties);
|
|
234
|
+
return 0;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch (e) {
|
|
238
|
+
this.log.warn('Error processing API response for properties.');
|
|
239
|
+
this.log.debug(`Error Message: ${e}`);
|
|
240
|
+
this.log.debug(`Raw Response: ${resp.response}`);
|
|
241
|
+
return ERROR_DELAY;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
this.log.debug('Promise Rejected with updating properties.');
|
|
247
|
+
return ERROR_DELAY;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Update or set properties locally from update function
|
|
251
|
+
_do_update(full_update, properties) {
|
|
252
|
+
const property_names = properties.map((property) => {
|
|
253
|
+
return property.property.name;
|
|
254
|
+
});
|
|
255
|
+
let settable_properties = property_names.map((property_name) => {
|
|
256
|
+
if (property_name.toUpperCase().substring(0, 3) === 'SET') {
|
|
257
|
+
return _clean_property_name(property_name);
|
|
258
|
+
}
|
|
259
|
+
return null;
|
|
260
|
+
});
|
|
261
|
+
settable_properties = settable_properties.filter((el) => {
|
|
262
|
+
return el !== null;
|
|
263
|
+
});
|
|
264
|
+
const readable_properties = {};
|
|
265
|
+
for (let i = 0; i < properties.length; i++) {
|
|
266
|
+
if (properties[i].property.name.toUpperCase() !== 'SET') {
|
|
267
|
+
const property_name = _clean_property_name(properties[i].property.name);
|
|
268
|
+
readable_properties[property_name] = properties[i];
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (full_update || this._settable_properties === null) {
|
|
272
|
+
this._settable_properties = settable_properties;
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
const combined_settable_properties = this._settable_properties.concat(settable_properties);
|
|
276
|
+
const result = combined_settable_properties.filter((item, pos) => {
|
|
277
|
+
return combined_settable_properties.indexOf(item) === pos;
|
|
278
|
+
});
|
|
279
|
+
this._settable_properties = result;
|
|
280
|
+
}
|
|
281
|
+
if (full_update) {
|
|
282
|
+
this.properties_full = {};
|
|
283
|
+
}
|
|
284
|
+
this.properties_full = {
|
|
285
|
+
...this.properties_full,
|
|
286
|
+
...readable_properties,
|
|
287
|
+
};
|
|
288
|
+
for (const [key, value] of Object.entries(readable_properties)) {
|
|
289
|
+
this.property_values[key] = value.property.value;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// Set vacuum operating mode
|
|
293
|
+
async set_operating_mode(mode) {
|
|
294
|
+
try {
|
|
295
|
+
await this.set_property_value(Properties.OPERATING_MODE, mode);
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
this.log.debug('Promise Rejected with setting opertating mode.');
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Encode room list for specifying multiple rooms
|
|
302
|
+
_encode_room_list(rooms) {
|
|
303
|
+
if (!rooms) {
|
|
304
|
+
return '*';
|
|
305
|
+
}
|
|
306
|
+
else if (rooms.length === 0) {
|
|
307
|
+
return '*';
|
|
308
|
+
}
|
|
309
|
+
const room_list = this._get_device_room_list();
|
|
310
|
+
let header = '\x80\x01\x0B\xCA\x02';
|
|
311
|
+
let rooms_enc = '';
|
|
312
|
+
rooms.forEach((room) => {
|
|
313
|
+
rooms_enc += `${String.fromCharCode(room.length) + room}\n`;
|
|
314
|
+
});
|
|
315
|
+
rooms_enc = rooms_enc.replace(/\n$/, '');
|
|
316
|
+
const footer = `\x1A${String.fromCharCode(room_list.identifier.length)}${room_list.identifier}`;
|
|
317
|
+
const header_byte = String.fromCharCode(0 + 1 + rooms_enc.length + footer.length);
|
|
318
|
+
header += header_byte;
|
|
319
|
+
header += '\n';
|
|
320
|
+
const latin1Buffer = transcode(Buffer.from(header + rooms_enc + footer), 'utf8', 'latin1');
|
|
321
|
+
const encoded = Buffer.from(latin1Buffer).toString('base64');
|
|
322
|
+
return encoded;
|
|
323
|
+
}
|
|
324
|
+
// Get object of the device room list for starting a clean
|
|
325
|
+
_get_device_room_list() {
|
|
326
|
+
const room_list = this.get_property_value(Properties.ROBOT_ROOM_LIST);
|
|
327
|
+
const split = room_list.split(':');
|
|
328
|
+
return {
|
|
329
|
+
identifier: split[0],
|
|
330
|
+
rooms: split.slice(1),
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
// Get device room list (will output * for all)
|
|
334
|
+
get_room_list() {
|
|
335
|
+
return this._get_device_room_list().rooms;
|
|
336
|
+
}
|
|
337
|
+
// Start the vacuum cleaning
|
|
338
|
+
async clean_rooms(rooms) {
|
|
339
|
+
try {
|
|
340
|
+
const payload = this._encode_room_list(rooms);
|
|
341
|
+
await this.set_property_value(Properties.AREAS_TO_CLEAN, payload);
|
|
342
|
+
await this.set_operating_mode(OperatingModes.START);
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
this.log.debug('Promise Rejected with starting clean.');
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Stop or cancel a vacuum cleaning
|
|
349
|
+
async cancel_clean() {
|
|
350
|
+
try {
|
|
351
|
+
await this.set_operating_mode(OperatingModes.RETURN);
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
this.log.debug('Promise Rejected with canceling clean.');
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
export { OperatingModes, PowerModes, Properties, SharkIqVacuum };
|
|
359
|
+
//# sourceMappingURL=sharkiq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharkiq.js","sourceRoot":"","sources":["../../src/sharkiq-js/sharkiq.ts"],"names":[],"mappings":"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"}
|
package/dist/type.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface AuthData {
|
|
2
|
+
access_token: string;
|
|
3
|
+
refresh_token: string;
|
|
4
|
+
expiration: Date;
|
|
5
|
+
}
|
|
6
|
+
interface OAuthData {
|
|
7
|
+
state: string;
|
|
8
|
+
code_verify: string;
|
|
9
|
+
code_challenge: string;
|
|
10
|
+
}
|
|
11
|
+
export { AuthData, OAuthData };
|
|
12
|
+
//# sourceMappingURL=type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,IAAI,CAAA;CACjB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA"}
|
package/dist/type.js
ADDED
package/dist/type.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":""}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare function addSeconds(date: Date, seconds: number): Date;
|
|
2
|
+
declare function subtractSeconds(date: Date, seconds: number): Date;
|
|
3
|
+
declare function isValidDate(d: Date): boolean;
|
|
4
|
+
declare function safeJsonParse(jsonString: string): {
|
|
5
|
+
success: boolean;
|
|
6
|
+
data?: any;
|
|
7
|
+
error?: string;
|
|
8
|
+
};
|
|
9
|
+
export { addSeconds, isValidDate, safeJsonParse, subtractSeconds };
|
|
10
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,iBAAS,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAErD;AAGD,iBAAS,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,iBAAS,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAErC;AAGD,iBAAS,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAsB3F;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,CAAA"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Add seconds to a date
|
|
2
|
+
function addSeconds(date, seconds) {
|
|
3
|
+
return new Date(date.getTime() + seconds * 1000);
|
|
4
|
+
}
|
|
5
|
+
// Subtract seconds from a date
|
|
6
|
+
function subtractSeconds(date, seconds) {
|
|
7
|
+
return new Date(date.getTime() - seconds * 1000);
|
|
8
|
+
}
|
|
9
|
+
function isValidDate(d) {
|
|
10
|
+
return d instanceof Date && !Number.isNaN(d.getTime());
|
|
11
|
+
}
|
|
12
|
+
// Safely parse JSON with better error handling
|
|
13
|
+
function safeJsonParse(jsonString) {
|
|
14
|
+
try {
|
|
15
|
+
// Check if input is a string
|
|
16
|
+
if (typeof jsonString !== 'string') {
|
|
17
|
+
return { success: false, error: 'Input is not a string' };
|
|
18
|
+
}
|
|
19
|
+
// Check if string is empty
|
|
20
|
+
if (!jsonString.trim()) {
|
|
21
|
+
return { success: false, error: 'Input is empty' };
|
|
22
|
+
}
|
|
23
|
+
// Check if string looks like HTML (common error response)
|
|
24
|
+
if (jsonString.trim().startsWith('<')) {
|
|
25
|
+
return { success: false, error: 'Input appears to be HTML, not JSON' };
|
|
26
|
+
}
|
|
27
|
+
const parsed = JSON.parse(jsonString);
|
|
28
|
+
return { success: true, data: parsed };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return { success: false, error: error instanceof Error ? error.message : 'Unknown parsing error' };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export { addSeconds, isValidDate, safeJsonParse, subtractSeconds };
|
|
35
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,SAAS,UAAU,CAAC,IAAU,EAAE,OAAe;IAC7C,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAA;AAClD,CAAC;AAED,+BAA+B;AAC/B,SAAS,eAAe,CAAC,IAAU,EAAE,OAAe;IAClD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAA;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,CAAO;IAC1B,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;AACxD,CAAC;AAED,+CAA+C;AAC/C,SAAS,aAAa,CAAC,UAAkB;IACvC,IAAI,CAAC;QACH,6BAA6B;QAC7B,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAA;QAC3D,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAA;QACpD,CAAC;QAED,0DAA0D;QAC1D,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAA;QACxE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAA;IACpG,CAAC;AACH,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,CAAA"}
|
package/docs/.nojekyll
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
globalThis.dmtComponentDataBCMP = 'TZLPbhoxEMYNolKUZ+gh9yotuyxkcyNKWwm1aVFV9W7sgbXw2lvbmz83HoE+QsLC7qopufUB6LVw6qUXniUGNktO9ozm8/zG863RYc6IFB+ZGOo1qqYa1CUjME5iexvnER5AR1C4XqNKGkoac9D3xfk6MCF/2AUd3cVkaIsXDwJfsgE2TIpCWM1CrIZUXonxTMtYEfixRi8SA9cmpdDHMTdJhE3wux8LstHpN0V62yEZMkHbU8Kx1v8QykjAOFUg7H3+BfoctpoPtmiNXt56+Sccgo4wgVs/eSfi8K7hZt+wYrjH4a7lZe+LLhPH9afnm1cnbrOVd4QB1beySdNxf55bCqNiYqRKnLrrZV0lI1DmJnHrnj+7ABNIOm24Jy0/72JlW1r1zG25judlZ4SA1lKlbv30xGm6+debCM44wzr1nFOvUfdyCw52BgKp3/D9Vt3P3koShyDMnr+2xT8o4Y9K9PaO++9oT72soOfQyyoqkZc1VAAvD9CedjlCJekK1RDaY67QkQ1LxhVq239/AlyhEUK/NGBFgs/Rdl+bHfdjzjfoiylnITOHcw3GMDEoSyo5FizcGuPPXAfy6mLnHOu+xb1mFHpYFTZEc21nsG7qKohA0P+vqCT6uB3IEHqK0QEcRzweMOuUZykdWJux748=';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
label.svelte-1y7unmi{align-items:center;cursor:pointer;display:flex;-webkit-user-select:none;user-select:none;width:fit-content}input.svelte-1y7unmi{cursor:pointer;height:1.5em;opacity:0;position:absolute;width:1.5em}svg.svelte-1y7unmi{border-radius:.33em;cursor:pointer;height:1.5em;margin-right:.5em;opacity:.99;width:1.5em}
|
|
2
|
+
section.svelte-20evnz{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}
|
|
3
|
+
details.svelte-1kxmj7q.svelte-1kxmj7q{margin-left:var(--tjs-folder-details-margin-left,-.4em);padding-left:var(--tjs-folder-details-padding-left,.4em)}summary.svelte-1kxmj7q.svelte-1kxmj7q{align-items:center;background:var(--tjs-folder-summary-background,none);background-blend-mode:var(--tjs-folder-summary-background-blend-mode,initial);border:var(--tjs-folder-summary-border,none);border-radius:var(--tjs-folder-summary-border-radius,0);border-width:var(--tjs-folder-summary-border-width,initial);cursor:var(--tjs-folder-summary-cursor,pointer);display:flex;font-family:var(--tjs-folder-summary-font-family,inherit);font-size:var(--tjs-folder-summary-font-size,inherit);font-weight:var(--tjs-folder-summary-font-weight,bold);gap:var(--tjs-folder-summary-gap,.125em);list-style:none;margin:var(--tjs-folder-summary-margin,0 0 0 -.4em);padding:var(--tjs-folder-summary-padding,.25em) 0;position:relative;transition:var(--tjs-folder-summary-transition,background .1s);-webkit-user-select:none;user-select:none;width:var(--tjs-folder-summary-width,fit-content)}summary.svelte-1kxmj7q.svelte-1kxmj7q::-webkit-details-marker{display:none}.default-cursor.svelte-1kxmj7q.svelte-1kxmj7q{cursor:default}summary.svelte-1kxmj7q svg.svelte-1kxmj7q{border-radius:var(--tjs-folder-summary-chevron-border-radius,0);color:var(--tjs-folder-summary-chevron-color,currentColor);cursor:var(--tjs-folder-summary-cursor,pointer);flex-shrink:0;height:var(--tjs-folder-summary-chevron-size,var(--tjs-folder-summary-font-size,1.25em));margin:var(--tjs-folder-summary-chevron-margin,0);opacity:var(--tjs-folder-summary-chevron-opacity,.2);transform:var(--tjs-folder-summary-chevron-rotate-closed,rotate(-90deg));transition:var(--tjs-folder-summary-chevron-transition,opacity .2s,transform .1s);width:var(--tjs-folder-summary-chevron-size,var(--tjs-folder-summary-font-size,1.25em))}summary.disabled.svelte-1kxmj7q.svelte-1kxmj7q{color:var(--tjs-folder-summary-disabled-color,inherit);cursor:var(--tjs-folder-summary-disabled-cursor,default)}summary.disabled.svelte-1kxmj7q svg.svelte-1kxmj7q{color:var(--tjs-folder-summary-disabled-color,currentColor);cursor:var(--tjs-folder-summary-disabled-cursor,default)}summary.svelte-1kxmj7q.svelte-1kxmj7q:focus-visible{box-shadow:var(--tjs-folder-summary-box-shadow-focus-visible,var(--tjs-default-box-shadow-focus-visible));outline:var(--tjs-folder-summary-outline-focus-visible,var(--tjs-default-outline-focus-visible,revert));transition:var(--tjs-folder-summary-transition-focus-visible,var(--tjs-default-transition-focus-visible))}summary.svelte-1kxmj7q:focus-visible .label.svelte-1kxmj7q{text-shadow:var(--tjs-folder-summary-label-text-shadow-focus-visible,var(--tjs-default-text-shadow-focus-hover,revert))}summary.svelte-1kxmj7q:focus-visible .tjs-folder-focus-indicator.svelte-1kxmj7q{background:var(--tjs-folder-summary-focus-indicator-background,var(--tjs-default-focus-indicator-background,#fff))}summary.svelte-1kxmj7q:focus-visible svg.svelte-1kxmj7q{opacity:var(--tjs-folder-summary-chevron-opacity-focus-visible,1)}summary.svelte-1kxmj7q:focus-visible svg.focus-chevron.svelte-1kxmj7q{outline:var(--tjs-folder-summary-outline-focus-visible,var(--tjs-default-outline-focus-visible,revert))}summary:focus-visible.remove-focus-visible.svelte-1kxmj7q.svelte-1kxmj7q{outline:none}summary.svelte-1kxmj7q:hover:not(.disabled) svg.svelte-1kxmj7q{opacity:var(--tjs-folder-summary-chevron-opacity-hover,1)}.tjs-folder-focus-indicator.svelte-1kxmj7q.svelte-1kxmj7q{align-self:var(--tjs-folder-summary-focus-indicator-align-self,var(--tjs-default-focus-indicator-align-self,stretch));border:var(--tjs-folder-summary-focus-indicator-border,var(--tjs-default-focus-indicator-border));border-radius:var(--tjs-folder-summary-focus-indicator-border-radius,var(--tjs-default-focus-indicator-border-radius,.1em));flex:0 0 var(--tjs-folder-summary-focus-indicator-width,var(--tjs-default-focus-indicator-width,0.25em));height:var(--tjs-folder-summary-focus-indicator-height,var(--tjs-default-focus-indicator-height));pointer-events:none;transition:var(--tjs-folder-summary-focus-indicator-transition,var(--tjs-default-focus-indicator-transition))}details[open].svelte-1kxmj7q>summary.svelte-1kxmj7q{background:var(--tjs-folder-summary-background-open,var(--tjs-folder-summary-background,inherit))}[open].svelte-1kxmj7q:not(details[data-closing=true])>summary svg.svelte-1kxmj7q{transform:rotate(var(--tjs-folder-summary-chevron-rotate-open,0))}.contents.svelte-1kxmj7q.svelte-1kxmj7q{background:var(--tjs-folder-contents-background,none);background-blend-mode:var(--tjs-folder-contents-background-blend-mode,initial);border:var(--tjs-folder-contents-border,none);border-left:var(--tjs-folder-contents-border-left,none);display:var(--tjs-folder-contents-display,flex);flex-direction:var(--tjs-folder-contents-flex-direction,column);gap:var(--tjs-folder-contents-gap);margin:var(--tjs-folder-contents-margin,0 0 0 -.4em);padding:var(--tjs-folder-contents-padding,0 0 0 calc(var(--tjs-folder-summary-font-size, 1em)*.8));position:relative}.contents.svelte-1kxmj7q.svelte-1kxmj7q:before{content:"";height:calc(100% + .65em);left:0;position:absolute;top:-.65em;width:0}.contents.hidden.svelte-1kxmj7q.svelte-1kxmj7q{display:none}.label.svelte-1kxmj7q.svelte-1kxmj7q{overflow:var(--tjs-folder-summary-label-overflow,hidden);text-overflow:var(--tjs-folder-summary-label-text-overflow,ellipsis);white-space:var(--tjs-folder-summary-label-white-space,nowrap);width:var(--tjs-folder-summary-label-width,fit-content)}summary.svelte-1kxmj7q:focus-visible+.contents.svelte-1kxmj7q:before{height:100%;top:0}
|
|
4
|
+
details.svelte-ozx17m.svelte-ozx17m{margin-left:var(--tjs-folder-details-margin-left,-.4em);padding-left:var(--tjs-folder-details-padding-left,.4em)}summary.svelte-ozx17m.svelte-ozx17m{align-items:center;background:var(--tjs-folder-summary-background,none);background-blend-mode:var(--tjs-folder-summary-background-blend-mode,initial);border:var(--tjs-folder-summary-border,none);border-radius:var(--tjs-folder-summary-border-radius,0);border-width:var(--tjs-folder-summary-border-width,initial);cursor:var(--tjs-folder-summary-cursor,pointer);display:flex;font-family:var(--tjs-folder-summary-font-family,inherit);font-size:var(--tjs-folder-summary-font-size,inherit);font-weight:var(--tjs-folder-summary-font-weight,bold);gap:var(--tjs-folder-summary-gap,.125em);list-style:none;margin:var(--tjs-folder-summary-margin,0);padding:var(--tjs-folder-summary-padding,.25em) 0;position:relative;transition:var(--tjs-folder-summary-transition,background .1s);-webkit-user-select:none;user-select:none;width:var(--tjs-folder-summary-width,fit-content)}summary.svelte-ozx17m.svelte-ozx17m::-webkit-details-marker{display:none}summary.svelte-ozx17m i.svelte-ozx17m{border-radius:var(--tjs-folder-summary-chevron-border-radius,0);color:var(--tjs-folder-summary-chevron-color,inherit);cursor:var(--tjs-folder-summary-cursor,pointer);flex-shrink:0;margin:var(--tjs-folder-summary-chevron-margin,0 0 0 .25em);opacity:var(--tjs-folder-summary-chevron-opacity,1);transition:var(--tjs-folder-summary-chevron-transition,opacity .2s,transform .1s);width:var(--tjs-folder-summary-chevron-width,1.25em)}summary.disabled.svelte-ozx17m i.svelte-ozx17m,summary.disabled.svelte-ozx17m.svelte-ozx17m{color:var(--tjs-folder-summary-disabled-color,inherit);cursor:var(--tjs-folder-summary-disabled-cursor,default)}summary.svelte-ozx17m.svelte-ozx17m:focus-visible{box-shadow:var(--tjs-folder-summary-box-shadow-focus-visible,var(--tjs-default-box-shadow-focus-visible));outline:var(--tjs-folder-summary-outline-focus-visible,var(--tjs-default-outline-focus-visible,revert));transition:var(--tjs-folder-summary-transition-focus-visible,var(--tjs-default-transition-focus-visible))}summary.svelte-ozx17m:focus-visible .label.svelte-ozx17m{text-shadow:var(--tjs-folder-summary-label-text-shadow-focus-visible,var(--tjs-default-text-shadow-focus-hover,revert))}summary.svelte-ozx17m:focus-visible .tjs-folder-focus-indicator.svelte-ozx17m{background:var(--tjs-folder-summary-focus-indicator-background,var(--tjs-default-focus-indicator-background,#fff))}summary.svelte-ozx17m:focus-visible i.svelte-ozx17m{opacity:var(--tjs-folder-summary-chevron-opacity-focus-visible,1)}summary.svelte-ozx17m:focus-visible i.focus-chevron.svelte-ozx17m:before{outline:var(--tjs-folder-summary-outline-focus-visible,var(--tjs-default-outline-focus-visible,revert))}summary:focus-visible.remove-focus-visible.svelte-ozx17m.svelte-ozx17m{outline:none}summary.svelte-ozx17m:hover i.svelte-ozx17m{opacity:var(--tjs-folder-summary-chevron-opacity-hover,1)}.tjs-folder-focus-indicator.svelte-ozx17m.svelte-ozx17m{align-self:var(--tjs-folder-summary-focus-indicator-align-self,var(--tjs-default-focus-indicator-align-self,stretch));border:var(--tjs-folder-summary-focus-indicator-border,var(--tjs-default-focus-indicator-border));border-radius:var(--tjs-folder-summary-focus-indicator-border-radius,var(--tjs-default-focus-indicator-border-radius,.1em));flex:0 0 var(--tjs-folder-summary-focus-indicator-width,var(--tjs-default-focus-indicator-width,0.25em));height:var(--tjs-folder-summary-focus-indicator-height,var(--tjs-default-focus-indicator-height));pointer-events:none;transition:var(--tjs-folder-summary-focus-indicator-transition,var(--tjs-default-focus-indicator-transition))}.default-cursor.svelte-ozx17m.svelte-ozx17m{cursor:default}details[open].svelte-ozx17m>summary.svelte-ozx17m{background:var(--tjs-folder-summary-background-open,var(--tjs-folder-summary-background,inherit))}.contents.svelte-ozx17m.svelte-ozx17m{background:var(--tjs-folder-contents-background,none);background-blend-mode:var(--tjs-folder-contents-background-blend-mode,initial);border:var(--tjs-folder-contents-border,none);border-left:var(--tjs-folder-contents-border-left,none);display:var(--tjs-folder-contents-display,flex);flex-direction:var(--tjs-folder-contents-flex-direction,column);gap:var(--tjs-folder-contents-gap);margin:var(--tjs-folder-contents-margin,0 0 0 -.4em);padding:var(--tjs-folder-contents-padding,0 0 0 calc(var(--tjs-folder-summary-font-size, 1em)*.8));position:relative}.contents.svelte-ozx17m.svelte-ozx17m:before{content:"";height:calc(100% + .65em);left:0;position:absolute;top:-.65em;width:0}.contents.hidden.svelte-ozx17m.svelte-ozx17m{display:none}.label.svelte-ozx17m.svelte-ozx17m{overflow:var(--tjs-folder-summary-label-overflow,hidden);text-overflow:var(--tjs-folder-summary-label-text-overflow,ellipsis);white-space:var(--tjs-folder-summary-label-white-space,nowrap);width:var(--tjs-folder-summary-label-width,fit-content)}summary.svelte-ozx17m:focus-visible+.contents.svelte-ozx17m:before{height:100%;top:0}
|
|
5
|
+
a.svelte-14yttr0{width:fit-content}a.svelte-14yttr0,span.svelte-14yttr0{margin-right:.25rem}span.svelte-14yttr0,svg.svelte-14yttr0{pointer-events:none}.indent-icon.svelte-14yttr0{margin-left:var(--dmt-nav-entry-indent-icon,28px)}.indent-no-icon.svelte-14yttr0{margin-left:var(--dmt-nav-entry-indent-no-icon,18px)}.indent-none.svelte-14yttr0{margin-left:.25rem}
|
|
6
|
+
.dmt-navigation-tree.svelte-gftu0p{display:flex;flex-direction:column;--tjs-folder-summary-font-weight:normal;--tjs-folder-summary-font-size:1em;--tjs-folder-summary-margin:0;--tjs-folder-summary-padding:0;--tjs-folder-summary-width:100%;--tjs-folder-contents-margin:var(--dmt-nav-folder-contents-margin,0 0 0 7px);--tjs-folder-contents-border-left:var(--dmt-nav-folder-contents-border-left,2px solid var(--dmt-nav-folder-contents-border-color,#0003));--tjs-folder-contents-padding:var(--dmt-nav-folder-contents-padding,0 0 0 9px);overflow-x:auto;padding-left:var(--dmt-nav-tree-padding-left,3px);padding-top:var(--dmt-nav-tree-padding-top,.25rem);touch-action:pan-x pan-y}.dmt-navigation-tree.svelte-gftu0p:focus-visible{outline:#0000}.dmt-navigation-tree.svelte-gftu0p>:last-child{margin-bottom:var(--dmt-nav-tree-bottom-margin,.25rem)}
|
|
7
|
+
hr.svelte-wwxcg7{border:unset;border-bottom:var(--dmt-container-border);margin:.25rem .5rem 0 0}section.svelte-wwxcg7{--tjs-folder-summary-margin:0 0.25rem;--tjs-folder-summary-width:100%;background:var(--dmt-container-background);border:var(--dmt-container-border);border-radius:var(--dmt-container-border-radius);box-shadow:var(--dmt-container-box-shadow);margin:0 1rem 0 0;padding-bottom:.25rem}
|
|
8
|
+
a.svelte-gzwnip{display:block;overflow:var(--dmt-sidebarlinks-overflow,unset);text-overflow:var(--dmt-sidebarlinks-text-overflow,ellipsis);white-space:var(--dmt-sidebarlinks-white-space,normal)}section.dmt-sidebar-links.svelte-gzwnip{background:var(--dmt-container-background);border:var(--dmt-container-border);border-radius:var(--dmt-container-border-radius);box-shadow:var(--dmt-container-box-shadow);display:flex;flex-direction:column;gap:.25em;margin:0 1rem 0 0;padding:.25rem}section.dmt-sidebar-links.svelte-gzwnip:focus-visible{outline:#0000}
|
|
9
|
+
div.svelte-1uxeem0{background:var(--dmt-overlay-panel-background);border-bottom:1px solid #0003;border-left:1px solid #0003;border-radius:0 0 .25rem .25rem;border-right:1px solid #0003;box-shadow:-.25rem 0 .25rem -.25rem var(--dmt-box-shadow-color),.25rem 0 .25rem -.25rem var(--dmt-box-shadow-color),0 .75rem .75rem -.75rem var(--dmt-box-shadow-color);display:flex;flex-direction:column;gap:.25rem;height:fit-content;padding:.5rem;position:absolute;top:2.6rem;width:calc(100% - 1.5rem)}span.svelte-1uxeem0{align-items:center;display:flex;gap:.5rem}svg.svelte-1uxeem0{margin:0}.key.svelte-1uxeem0{background:#ffffff40;border:1px solid #999;border-radius:.25rem;box-shadow:1px 1px var(--dmt-help-panel-key-box-shadow-color);min-width:52px;padding:0 3px;text-align:center}.reflection-kinds.svelte-1uxeem0{display:grid;grid-template-columns:1fr 1fr;grid-row-gap:.1rem}.title.svelte-1uxeem0{-webkit-text-decoration:underline;text-decoration:underline}:root[data-theme=dark]{--dmt-help-panel-key-box-shadow-color:#aaa}:root[data-theme=light]{--dmt-help-panel-key-box-shadow-color:#444}@media(prefers-color-scheme:dark){:root{--dmt-help-panel-key-box-shadow-color:#aaa}}@media(prefers-color-scheme:light){:root{--dmt-help-panel-key-box-shadow-color:#444}}
|
|
10
|
+
button.svelte-1e7n8f7{background:#0000;border-radius:50%;cursor:pointer;height:2rem;line-height:0;width:2rem}section.svelte-1e7n8f7{align-items:center;background:var(--color-background);border-bottom:var(--dmt-container-border);display:flex;gap:.5rem;height:fit-content;padding:.25rem 1rem .25rem 0;position:sticky;top:0;width:inherit;z-index:10}section.svelte-1e7n8f7:focus-visible{outline:#0000}svg.svelte-1e7n8f7{height:1rem;width:1rem;fill:currentColor;stroke:currentColor;overflow:hidden}.flipped-vertical.svelte-1e7n8f7{transform:scaleY(-1)}
|
|
11
|
+
section.svelte-13h1skr{--dmt-nav-tree-bottom-margin:1rem}
|
|
12
|
+
button.svelte-10arjs8{background:#0000;border-radius:50%;cursor:pointer;height:33px;line-height:0;margin:0 3px 3px;width:33px}
|
|
13
|
+
li.svelte-5rxzhp{align-items:center;background-color:var(--color-background);cursor:pointer;display:flex;gap:.25rem;overflow:hidden;padding:0 10px;text-overflow:ellipsis;transition:background .15s ease-in-out}li.selected.svelte-5rxzhp{background:var(--dmt-menu-item-background-selected)}li.svelte-5rxzhp:hover{background:var(--dmt-menu-item-background-hover)}li.svelte-5rxzhp:not(:last-child){border-bottom:var(--dmt-container-separator-border)}li.svelte-5rxzhp:nth-child(2n):not(:hover):not(.selected){background-color:var(--color-background-secondary)}ul.svelte-5rxzhp{border:var(--dmt-container-floating-border);border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem;box-shadow:var(--dmt-container-floating-box-shadow);list-style:none;margin:0 0 0 -4px;overflow:hidden;padding:0;position:absolute;top:calc(var(--dmt-header-height) - 2px);width:calc(100% - 4px)}
|
|
14
|
+
#dmt-search-field.svelte-tuln0o,#tsd-search .field input{background:revert;border:1px solid var(--color-accent);border-radius:.5em;box-sizing:border-box;color:var(--color-text);font-size:16px;height:35px;opacity:1;outline:2px solid #0000;padding:revert;position:relative;right:4px;top:0;width:100%;z-index:10}
|
|
15
|
+
div.svelte-wmon9h{box-sizing:border-box;line-height:0;padding:4px 0;position:absolute;right:-40px;width:40px}.dmt-widget.svelte-wmon9h{display:inline-block;height:40px;opacity:.8;overflow:hidden;transition:opacity .1s,background-color .2s;vertical-align:bottom}
|
|
16
|
+
div.svelte-kjcljd{flex:0;height:0;width:0}div.svelte-kjcljd:focus{outline:none}
|
|
17
|
+
section.svelte-1pcybcf.svelte-1pcybcf{background:var(--color-background);border:var(--dmt-container-border);border-radius:var(--dmt-container-border-radius);box-shadow:0 0 6px #000;height:max-content;left:50%;overflow:hidden;padding:.25rem;position:absolute;top:calc(100% + 10px);transform:translateX(-50%);width:max-content;z-index:1}div.svelte-1pcybcf.svelte-1pcybcf{align-items:center;display:flex;flex-direction:column;flex-wrap:nowrap;gap:.5rem}section.svelte-1pcybcf.svelte-1pcybcf:focus-visible{outline:2px solid #0000}a.svelte-1pcybcf.svelte-1pcybcf{align-items:center;display:flex;flex-shrink:0}a.svelte-1pcybcf:focus-visible img.svelte-1pcybcf{filter:brightness(1.5)}img.svelte-1pcybcf.svelte-1pcybcf{max-height:24px;width:auto}img.svelte-1pcybcf.svelte-1pcybcf:hover{filter:brightness(1.5)}
|
|
18
|
+
button.svelte-1ebh1s9{background:#0000;border-radius:50%;cursor:pointer;height:33px;line-height:0;margin:1px 3px 0;width:33px}section.svelte-1ebh1s9{display:flex;margin-left:auto;min-width:fit-content;position:relative}svg.svelte-1ebh1s9{fill:var(--color-text)}
|
|
19
|
+
a.svelte-1f93d1m.svelte-1f93d1m{align-items:center;display:flex;flex-shrink:0;margin:4px}a.svelte-1f93d1m:focus-visible img.svelte-1f93d1m{filter:brightness(1.5)}img.svelte-1f93d1m.svelte-1f93d1m{height:24px;width:auto}img.svelte-1f93d1m.svelte-1f93d1m:hover{filter:brightness(1.5)}section.svelte-1f93d1m.svelte-1f93d1m{align-items:center;display:flex;flex-wrap:nowrap;gap:.35rem;margin-left:auto;min-width:0;overflow:hidden}
|
|
20
|
+
section.svelte-j9157o{align-items:center;display:flex;flex-wrap:nowrap;height:100%;margin-right:.5rem;width:100%}
|