dara-core 1.14.0a1__py3-none-any.whl → 1.14.0a3__py3-none-any.whl
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.
- dara/core/auth/base.py +0 -8
- dara/core/auth/routes.py +14 -3
- dara/core/auth/utils.py +120 -1
- dara/core/internal/routing.py +0 -1
- dara/core/internal/websocket.py +22 -12
- dara/core/umd/dara.core.umd.js +90 -180
- {dara_core-1.14.0a1.dist-info → dara_core-1.14.0a3.dist-info}/METADATA +10 -10
- {dara_core-1.14.0a1.dist-info → dara_core-1.14.0a3.dist-info}/RECORD +11 -11
- {dara_core-1.14.0a1.dist-info → dara_core-1.14.0a3.dist-info}/LICENSE +0 -0
- {dara_core-1.14.0a1.dist-info → dara_core-1.14.0a3.dist-info}/WHEEL +0 -0
- {dara_core-1.14.0a1.dist-info → dara_core-1.14.0a3.dist-info}/entry_points.txt +0 -0
dara/core/auth/base.py
CHANGED
|
@@ -69,14 +69,6 @@ class BaseAuthConfig(BaseModel, abc.ABC):
|
|
|
69
69
|
Defines components to use for auth routes
|
|
70
70
|
"""
|
|
71
71
|
|
|
72
|
-
supports_token_refresh: ClassVar[bool] = False
|
|
73
|
-
"""
|
|
74
|
-
Whether this auth config supports token refresh.
|
|
75
|
-
|
|
76
|
-
If an auth config supports token refresh, it should override the refresh_token method
|
|
77
|
-
and set this to True.
|
|
78
|
-
"""
|
|
79
|
-
|
|
80
72
|
@abc.abstractmethod
|
|
81
73
|
def get_token(self, body: SessionRequestBody) -> Union[TokenResponse, RedirectResponse]:
|
|
82
74
|
"""
|
dara/core/auth/routes.py
CHANGED
|
@@ -19,7 +19,15 @@ from inspect import iscoroutinefunction
|
|
|
19
19
|
from typing import Union, cast
|
|
20
20
|
|
|
21
21
|
import jwt
|
|
22
|
-
from fastapi import
|
|
22
|
+
from fastapi import (
|
|
23
|
+
APIRouter,
|
|
24
|
+
BackgroundTasks,
|
|
25
|
+
Cookie,
|
|
26
|
+
Depends,
|
|
27
|
+
HTTPException,
|
|
28
|
+
Request,
|
|
29
|
+
Response,
|
|
30
|
+
)
|
|
23
31
|
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
|
|
24
32
|
|
|
25
33
|
from dara.core.auth.base import BaseAuthConfig
|
|
@@ -32,7 +40,7 @@ from dara.core.auth.definitions import (
|
|
|
32
40
|
AuthError,
|
|
33
41
|
SessionRequestBody,
|
|
34
42
|
)
|
|
35
|
-
from dara.core.auth.utils import decode_token
|
|
43
|
+
from dara.core.auth.utils import cached_refresh_token, decode_token
|
|
36
44
|
from dara.core.logging import dev_logger
|
|
37
45
|
|
|
38
46
|
auth_router = APIRouter()
|
|
@@ -108,6 +116,7 @@ async def _revoke_session(response: Response, credentials: HTTPAuthorizationCred
|
|
|
108
116
|
@auth_router.post('/refresh-token')
|
|
109
117
|
async def handle_refresh_token(
|
|
110
118
|
response: Response,
|
|
119
|
+
background_tasks: BackgroundTasks,
|
|
111
120
|
dara_refresh_token: Union[str, None] = Cookie(default=None),
|
|
112
121
|
credentials: HTTPAuthorizationCredentials = Depends(HTTPBearer()),
|
|
113
122
|
):
|
|
@@ -139,7 +148,9 @@ async def handle_refresh_token(
|
|
|
139
148
|
old_token_data = decode_token(credentials.credentials, options={'verify_exp': False})
|
|
140
149
|
|
|
141
150
|
# Refresh logic up to implementation - passing in old token data so session_id can be preserved
|
|
142
|
-
session_token, refresh_token =
|
|
151
|
+
session_token, refresh_token = await cached_refresh_token(
|
|
152
|
+
auth_config.refresh_token, old_token_data, dara_refresh_token
|
|
153
|
+
)
|
|
143
154
|
|
|
144
155
|
# Using 'Strict' as it is only used for the refresh-token endpoint so cross-site requests are not expected
|
|
145
156
|
response.set_cookie(
|
dara/core/auth/utils.py
CHANGED
|
@@ -15,11 +15,13 @@ See the License for the specific language governing permissions and
|
|
|
15
15
|
limitations under the License.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
+
import asyncio
|
|
18
19
|
import uuid
|
|
19
20
|
from datetime import datetime, timedelta, timezone
|
|
20
|
-
from typing import List, Optional, Union
|
|
21
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
21
22
|
|
|
22
23
|
import jwt
|
|
24
|
+
from anyio import to_thread
|
|
23
25
|
|
|
24
26
|
from dara.core.auth.definitions import (
|
|
25
27
|
EXPIRED_TOKEN_ERROR,
|
|
@@ -100,3 +102,120 @@ def get_user_data():
|
|
|
100
102
|
)
|
|
101
103
|
|
|
102
104
|
return user_data
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class AsyncTokenRefreshCache:
|
|
108
|
+
"""
|
|
109
|
+
An asynchronous cache for token refresh operations that handles concurrent requests
|
|
110
|
+
and provides time-based cache invalidation.
|
|
111
|
+
|
|
112
|
+
This cache is designed to prevent multiple simultaneous refresh attempts with the
|
|
113
|
+
same refresh token, while also providing a short-term cache to reduce unnecessary
|
|
114
|
+
token refreshes from multiple tabs/windows.
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
def __init__(self, ttl_seconds: int = 5):
|
|
118
|
+
self.cache: Dict[str, Tuple[Any, datetime]] = {}
|
|
119
|
+
self.locks: Dict[str, asyncio.Lock] = {}
|
|
120
|
+
self.locks_lock = asyncio.Lock()
|
|
121
|
+
self.ttl = timedelta(seconds=ttl_seconds)
|
|
122
|
+
|
|
123
|
+
async def _get_or_create_lock(self, key: str) -> asyncio.Lock:
|
|
124
|
+
"""
|
|
125
|
+
Get an existing lock for the given key or create a new one if it doesn't exist.
|
|
126
|
+
|
|
127
|
+
This method is thread-safe and ensures that only one lock exists per key.
|
|
128
|
+
|
|
129
|
+
:param key: The key to get or create a lock for.
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
async with self.locks_lock:
|
|
133
|
+
if key not in self.locks:
|
|
134
|
+
self.locks[key] = asyncio.Lock()
|
|
135
|
+
return self.locks[key]
|
|
136
|
+
|
|
137
|
+
def _cleanup_old_entries(self):
|
|
138
|
+
"""
|
|
139
|
+
Remove expired entries from both the cache and locks dictionaries.
|
|
140
|
+
|
|
141
|
+
This method is called before each cache access to prevent memory leaks
|
|
142
|
+
from accumulated expired entries.
|
|
143
|
+
"""
|
|
144
|
+
current_time = datetime.now()
|
|
145
|
+
expired_keys = [key for key, (_, timestamp) in self.cache.items() if current_time - timestamp > self.ttl]
|
|
146
|
+
for key in expired_keys:
|
|
147
|
+
self.cache.pop(key, None)
|
|
148
|
+
# We can modify self.locks here because we're always under an async lock when calling this
|
|
149
|
+
self.locks.pop(key, None)
|
|
150
|
+
|
|
151
|
+
def get_cached_value(self, key: str) -> Tuple[Any, bool]:
|
|
152
|
+
"""
|
|
153
|
+
Retrieve a value from the cache if it exists and hasn't expired.
|
|
154
|
+
|
|
155
|
+
:param key: The key to retrieve from the cache.
|
|
156
|
+
:return: A tuple containing the value and a boolean indicating whether the value was found.
|
|
157
|
+
"""
|
|
158
|
+
self._cleanup_old_entries()
|
|
159
|
+
if key in self.cache:
|
|
160
|
+
value, timestamp = self.cache[key]
|
|
161
|
+
if datetime.now() - timestamp <= self.ttl:
|
|
162
|
+
return value, True
|
|
163
|
+
return None, False
|
|
164
|
+
|
|
165
|
+
def set_cached_value(self, key: str, value: Any):
|
|
166
|
+
"""
|
|
167
|
+
Set a value in the cache with the current timestamp.
|
|
168
|
+
|
|
169
|
+
:param key: The key to set in the cache.
|
|
170
|
+
:param value: The value to set in the cache.
|
|
171
|
+
"""
|
|
172
|
+
self.cache[key] = (value, datetime.now())
|
|
173
|
+
|
|
174
|
+
def clear(self):
|
|
175
|
+
"""
|
|
176
|
+
Clear the cache and locks dictionaries.
|
|
177
|
+
"""
|
|
178
|
+
self.cache.clear()
|
|
179
|
+
self.locks.clear()
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
token_refresh_cache = AsyncTokenRefreshCache(ttl_seconds=5)
|
|
183
|
+
"""
|
|
184
|
+
Shared token refresh cache instance
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
async def cached_refresh_token(
|
|
189
|
+
func: Callable[[TokenData, str], Tuple[str, str]], old_token_data: TokenData, refresh_token: str
|
|
190
|
+
):
|
|
191
|
+
"""
|
|
192
|
+
A utility to run a token refresh method with caching to prevent multiple concurrent refreshes
|
|
193
|
+
and short-term caching to reduce unnecessary refreshes from multiple tabs/windows.
|
|
194
|
+
|
|
195
|
+
:param func: The function to run to refresh the token
|
|
196
|
+
:param old_token_data: The old token data
|
|
197
|
+
:param refresh_token: The refresh token to use
|
|
198
|
+
"""
|
|
199
|
+
cache_key = refresh_token
|
|
200
|
+
|
|
201
|
+
# check for cache hit
|
|
202
|
+
cached_result, found = token_refresh_cache.get_cached_value(cache_key)
|
|
203
|
+
if found:
|
|
204
|
+
return cached_result
|
|
205
|
+
|
|
206
|
+
# cache miss, acquire lock so only one call for given refresh_token is allowed
|
|
207
|
+
lock = await token_refresh_cache._get_or_create_lock(cache_key)
|
|
208
|
+
|
|
209
|
+
async with lock:
|
|
210
|
+
# check cache again in case another call already refreshed the token while we were waiting
|
|
211
|
+
cached_result, found = token_refresh_cache.get_cached_value(cache_key)
|
|
212
|
+
if found:
|
|
213
|
+
return cached_result
|
|
214
|
+
|
|
215
|
+
# Run the refresh function
|
|
216
|
+
result = await to_thread.run_sync(func, old_token_data, refresh_token)
|
|
217
|
+
|
|
218
|
+
# update cache
|
|
219
|
+
token_refresh_cache.set_cached_value(cache_key, result)
|
|
220
|
+
|
|
221
|
+
return result
|
dara/core/internal/routing.py
CHANGED
|
@@ -212,7 +212,6 @@ def create_router(config: Configuration):
|
|
|
212
212
|
async def get_auth_config(): # pylint: disable=unused-variable
|
|
213
213
|
return {
|
|
214
214
|
'auth_components': config.auth_config.component_config.dict(),
|
|
215
|
-
'supports_token_refresh': config.auth_config.supports_token_refresh,
|
|
216
215
|
}
|
|
217
216
|
|
|
218
217
|
@core_api_router.get('/components', dependencies=[Depends(verify_session)])
|
dara/core/internal/websocket.py
CHANGED
|
@@ -167,9 +167,10 @@ class WebSocketHandler:
|
|
|
167
167
|
|
|
168
168
|
def __init__(self, channel_id: str):
|
|
169
169
|
send_stream, receive_stream = create_memory_object_stream[ServerMessage](math.inf)
|
|
170
|
-
self.channel_id = channel_id
|
|
171
|
-
self.send_stream = send_stream
|
|
172
170
|
self.receive_stream = receive_stream
|
|
171
|
+
self.send_stream = send_stream
|
|
172
|
+
|
|
173
|
+
self.channel_id = channel_id
|
|
173
174
|
self.pending_responses = {}
|
|
174
175
|
|
|
175
176
|
async def send_message(self, message: ServerMessage):
|
|
@@ -446,17 +447,20 @@ async def ws_handler(websocket: WebSocket, token: Optional[str] = Query(default=
|
|
|
446
447
|
else:
|
|
447
448
|
sessions_registry.set(user_identifier, {token_content.session_id})
|
|
448
449
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
450
|
+
def update_context(token_data: TokenData):
|
|
451
|
+
USER.set(
|
|
452
|
+
UserData(
|
|
453
|
+
identity_id=token_data.identity_id,
|
|
454
|
+
identity_name=token_data.identity_name,
|
|
455
|
+
identity_email=token_data.identity_email,
|
|
456
|
+
groups=token_data.groups,
|
|
457
|
+
)
|
|
456
458
|
)
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
459
|
+
SESSION_ID.set(token_data.session_id)
|
|
460
|
+
ID_TOKEN.set(token_data.id_token)
|
|
461
|
+
|
|
462
|
+
# Set initial Auth context vars for the WS connection
|
|
463
|
+
update_context(token_content)
|
|
460
464
|
|
|
461
465
|
# Change protocol from http to ws - from this point exceptions can't be raised
|
|
462
466
|
await websocket.accept()
|
|
@@ -491,6 +495,12 @@ async def ws_handler(websocket: WebSocket, token: Optional[str] = Query(default=
|
|
|
491
495
|
# Heartbeat to keep connection alive
|
|
492
496
|
if data['type'] == 'ping':
|
|
493
497
|
await websocket.send_json({'type': 'pong', 'message': None})
|
|
498
|
+
if data['type'] == 'token_update':
|
|
499
|
+
try:
|
|
500
|
+
# update Auth context vars for the WS connection
|
|
501
|
+
update_context(decode_token(data['message']))
|
|
502
|
+
except Exception as e:
|
|
503
|
+
eng_logger.error('Error updating token data', error=e)
|
|
494
504
|
else:
|
|
495
505
|
try:
|
|
496
506
|
parsed_data = parse_obj_as(ClientMessage, data)
|
dara/core/umd/dara.core.umd.js
CHANGED
|
@@ -30,14 +30,10 @@ var __privateWrapper = (obj, member, setter, getter) => ({
|
|
|
30
30
|
return __privateGet(obj, member, getter);
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
|
-
var __privateMethod = (obj, member, method) => {
|
|
34
|
-
__accessCheck(obj, member, "access private method");
|
|
35
|
-
return method;
|
|
36
|
-
};
|
|
37
33
|
(function(global2, factory) {
|
|
38
34
|
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react"), require("@tanstack/react-query"), require("react-dom"), require("styled-components")) : typeof define === "function" && define.amd ? define(["exports", "react", "@tanstack/react-query", "react-dom", "styled-components"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory((global2.dara = global2.dara || {}, global2.dara.core = {}), global2.React, global2.ReactQuery, global2.ReactDOM, global2.styled));
|
|
39
35
|
})(this, function(exports, React, reactQuery, ReactDOM, styled) {
|
|
40
|
-
var
|
|
36
|
+
var _locks, _subscribers, _pingInterval, _socketUrl, _reconnectCount, _events$, _parentBus, _instance, _observers;
|
|
41
37
|
"use strict";
|
|
42
38
|
const _interopDefaultLegacy = (e3) => e3 && typeof e3 === "object" && "default" in e3 ? e3 : { default: e3 };
|
|
43
39
|
function _interopNamespace(e3) {
|
|
@@ -1200,7 +1196,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
1200
1196
|
* This source code is licensed under the MIT license found in the
|
|
1201
1197
|
* LICENSE file in the root directory of this source tree.
|
|
1202
1198
|
*/
|
|
1203
|
-
var b$1 = "function" === typeof Symbol && Symbol.for, c$1 = b$1 ? Symbol.for("react.element") : 60103, d$2 = b$1 ? Symbol.for("react.portal") : 60106, e$
|
|
1199
|
+
var b$1 = "function" === typeof Symbol && Symbol.for, c$1 = b$1 ? Symbol.for("react.element") : 60103, d$2 = b$1 ? Symbol.for("react.portal") : 60106, e$2 = b$1 ? Symbol.for("react.fragment") : 60107, f$2 = b$1 ? Symbol.for("react.strict_mode") : 60108, g$1 = b$1 ? Symbol.for("react.profiler") : 60114, h$1 = b$1 ? Symbol.for("react.provider") : 60109, k$2 = b$1 ? Symbol.for("react.context") : 60110, l$3 = b$1 ? Symbol.for("react.async_mode") : 60111, m$2 = b$1 ? Symbol.for("react.concurrent_mode") : 60111, n$3 = b$1 ? Symbol.for("react.forward_ref") : 60112, p$3 = b$1 ? Symbol.for("react.suspense") : 60113, q$2 = b$1 ? Symbol.for("react.suspense_list") : 60120, r$2 = b$1 ? Symbol.for("react.memo") : 60115, t$1 = b$1 ? Symbol.for("react.lazy") : 60116, v$1 = b$1 ? Symbol.for("react.block") : 60121, w$2 = b$1 ? Symbol.for("react.fundamental") : 60117, x$1 = b$1 ? Symbol.for("react.responder") : 60118, y$1 = b$1 ? Symbol.for("react.scope") : 60119;
|
|
1204
1200
|
function z$1(a2) {
|
|
1205
1201
|
if ("object" === typeof a2 && null !== a2) {
|
|
1206
1202
|
var u2 = a2.$$typeof;
|
|
@@ -1209,7 +1205,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
1209
1205
|
switch (a2 = a2.type, a2) {
|
|
1210
1206
|
case l$3:
|
|
1211
1207
|
case m$2:
|
|
1212
|
-
case e$
|
|
1208
|
+
case e$2:
|
|
1213
1209
|
case g$1:
|
|
1214
1210
|
case f$2:
|
|
1215
1211
|
case p$3:
|
|
@@ -1217,9 +1213,9 @@ var __privateMethod = (obj, member, method) => {
|
|
|
1217
1213
|
default:
|
|
1218
1214
|
switch (a2 = a2 && a2.$$typeof, a2) {
|
|
1219
1215
|
case k$2:
|
|
1220
|
-
case n$
|
|
1221
|
-
case t$
|
|
1222
|
-
case r$
|
|
1216
|
+
case n$3:
|
|
1217
|
+
case t$1:
|
|
1218
|
+
case r$2:
|
|
1223
1219
|
case h$1:
|
|
1224
1220
|
return a2;
|
|
1225
1221
|
default:
|
|
@@ -1239,10 +1235,10 @@ var __privateMethod = (obj, member, method) => {
|
|
|
1239
1235
|
reactIs_production_min$1.ContextConsumer = k$2;
|
|
1240
1236
|
reactIs_production_min$1.ContextProvider = h$1;
|
|
1241
1237
|
reactIs_production_min$1.Element = c$1;
|
|
1242
|
-
reactIs_production_min$1.ForwardRef = n$
|
|
1243
|
-
reactIs_production_min$1.Fragment = e$
|
|
1244
|
-
reactIs_production_min$1.Lazy = t$
|
|
1245
|
-
reactIs_production_min$1.Memo = r$
|
|
1238
|
+
reactIs_production_min$1.ForwardRef = n$3;
|
|
1239
|
+
reactIs_production_min$1.Fragment = e$2;
|
|
1240
|
+
reactIs_production_min$1.Lazy = t$1;
|
|
1241
|
+
reactIs_production_min$1.Memo = r$2;
|
|
1246
1242
|
reactIs_production_min$1.Portal = d$2;
|
|
1247
1243
|
reactIs_production_min$1.Profiler = g$1;
|
|
1248
1244
|
reactIs_production_min$1.StrictMode = f$2;
|
|
@@ -1261,16 +1257,16 @@ var __privateMethod = (obj, member, method) => {
|
|
|
1261
1257
|
return "object" === typeof a2 && null !== a2 && a2.$$typeof === c$1;
|
|
1262
1258
|
};
|
|
1263
1259
|
reactIs_production_min$1.isForwardRef = function(a2) {
|
|
1264
|
-
return z$1(a2) === n$
|
|
1260
|
+
return z$1(a2) === n$3;
|
|
1265
1261
|
};
|
|
1266
1262
|
reactIs_production_min$1.isFragment = function(a2) {
|
|
1267
|
-
return z$1(a2) === e$
|
|
1263
|
+
return z$1(a2) === e$2;
|
|
1268
1264
|
};
|
|
1269
1265
|
reactIs_production_min$1.isLazy = function(a2) {
|
|
1270
|
-
return z$1(a2) === t$
|
|
1266
|
+
return z$1(a2) === t$1;
|
|
1271
1267
|
};
|
|
1272
1268
|
reactIs_production_min$1.isMemo = function(a2) {
|
|
1273
|
-
return z$1(a2) === r$
|
|
1269
|
+
return z$1(a2) === r$2;
|
|
1274
1270
|
};
|
|
1275
1271
|
reactIs_production_min$1.isPortal = function(a2) {
|
|
1276
1272
|
return z$1(a2) === d$2;
|
|
@@ -1285,7 +1281,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
1285
1281
|
return z$1(a2) === p$3;
|
|
1286
1282
|
};
|
|
1287
1283
|
reactIs_production_min$1.isValidElementType = function(a2) {
|
|
1288
|
-
return "string" === typeof a2 || "function" === typeof a2 || a2 === e$
|
|
1284
|
+
return "string" === typeof a2 || "function" === typeof a2 || a2 === e$2 || a2 === m$2 || a2 === g$1 || a2 === f$2 || a2 === p$3 || a2 === q$2 || "object" === typeof a2 && null !== a2 && (a2.$$typeof === t$1 || a2.$$typeof === r$2 || a2.$$typeof === h$1 || a2.$$typeof === k$2 || a2.$$typeof === n$3 || a2.$$typeof === w$2 || a2.$$typeof === x$1 || a2.$$typeof === y$1 || a2.$$typeof === v$1);
|
|
1289
1285
|
};
|
|
1290
1286
|
reactIs_production_min$1.typeOf = z$1;
|
|
1291
1287
|
(function(module2) {
|
|
@@ -5095,7 +5091,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
5095
5091
|
subscriptions.current.delete(key);
|
|
5096
5092
|
}
|
|
5097
5093
|
}, [subscriptions]);
|
|
5098
|
-
const updateState = useCallback$1$1((
|
|
5094
|
+
const updateState = useCallback$1$1((_state, key) => {
|
|
5099
5095
|
if (subscriptions.current.has(key)) {
|
|
5100
5096
|
forceUpdate([]);
|
|
5101
5097
|
}
|
|
@@ -5265,7 +5261,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
5265
5261
|
return prevState.loadable.is(nextState.loadable) && prevState.key === nextState.key ? prevState : nextState;
|
|
5266
5262
|
}, [getState2]);
|
|
5267
5263
|
useEffect$3$1(() => {
|
|
5268
|
-
const subscription = subscribeToRecoilValue$1(storeRef.current, recoilValue, (
|
|
5264
|
+
const subscription = subscribeToRecoilValue$1(storeRef.current, recoilValue, (_state) => {
|
|
5269
5265
|
setState(updateState);
|
|
5270
5266
|
}, componentName);
|
|
5271
5267
|
setState(updateState);
|
|
@@ -5293,7 +5289,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
5293
5289
|
useEffect$3$1(() => {
|
|
5294
5290
|
const store2 = storeRef.current;
|
|
5295
5291
|
const storeState = store2.getState();
|
|
5296
|
-
const subscription = subscribeToRecoilValue$1(store2, recoilValue, (
|
|
5292
|
+
const subscription = subscribeToRecoilValue$1(store2, recoilValue, (_state) => {
|
|
5297
5293
|
var _prevLoadableRef$curr;
|
|
5298
5294
|
if (!Recoil_gkx("recoil_suppress_rerender_in_callback")) {
|
|
5299
5295
|
return forceUpdate([]);
|
|
@@ -12153,7 +12149,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
12153
12149
|
* This source code is licensed under the MIT license found in the
|
|
12154
12150
|
* LICENSE file in the root directory of this source tree.
|
|
12155
12151
|
*/
|
|
12156
|
-
var f$1 = React__default.default, k$1 = Symbol.for("react.element"), l$2 = Symbol.for("react.fragment"), m$1 = Object.prototype.hasOwnProperty, n$
|
|
12152
|
+
var f$1 = React__default.default, k$1 = Symbol.for("react.element"), l$2 = Symbol.for("react.fragment"), m$1 = Object.prototype.hasOwnProperty, n$2 = f$1.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p$2 = { key: true, ref: true, __self: true, __source: true };
|
|
12157
12153
|
function q$1(c2, a2, g2) {
|
|
12158
12154
|
var b2, d2 = {}, e3 = null, h2 = null;
|
|
12159
12155
|
void 0 !== g2 && (e3 = "" + g2);
|
|
@@ -12164,7 +12160,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
12164
12160
|
if (c2 && c2.defaultProps)
|
|
12165
12161
|
for (b2 in a2 = c2.defaultProps, a2)
|
|
12166
12162
|
void 0 === d2[b2] && (d2[b2] = a2[b2]);
|
|
12167
|
-
return { $$typeof: k$1, type: c2, key: e3, ref: h2, props: d2, _owner: n$
|
|
12163
|
+
return { $$typeof: k$1, type: c2, key: e3, ref: h2, props: d2, _owner: n$2.current };
|
|
12168
12164
|
}
|
|
12169
12165
|
reactJsxRuntime_production_min.Fragment = l$2;
|
|
12170
12166
|
reactJsxRuntime_production_min.jsx = q$1;
|
|
@@ -34373,23 +34369,23 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34373
34369
|
* This source code is licensed under the MIT license found in the
|
|
34374
34370
|
* LICENSE file in the root directory of this source tree.
|
|
34375
34371
|
*/
|
|
34376
|
-
var b = 60103, c = 60106, d = 60107, e$
|
|
34372
|
+
var b = 60103, c = 60106, d = 60107, e$1 = 60108, f = 60114, g = 60109, h = 60110, k = 60112, l$1 = 60113, m = 60120, n$1 = 60115, p = 60116, q = 60121, r$1 = 60122, u = 60117, v = 60129, w = 60131;
|
|
34377
34373
|
if ("function" === typeof Symbol && Symbol.for) {
|
|
34378
34374
|
var x = Symbol.for;
|
|
34379
34375
|
b = x("react.element");
|
|
34380
34376
|
c = x("react.portal");
|
|
34381
34377
|
d = x("react.fragment");
|
|
34382
|
-
e$
|
|
34378
|
+
e$1 = x("react.strict_mode");
|
|
34383
34379
|
f = x("react.profiler");
|
|
34384
34380
|
g = x("react.provider");
|
|
34385
34381
|
h = x("react.context");
|
|
34386
34382
|
k = x("react.forward_ref");
|
|
34387
34383
|
l$1 = x("react.suspense");
|
|
34388
34384
|
m = x("react.suspense_list");
|
|
34389
|
-
n$
|
|
34385
|
+
n$1 = x("react.memo");
|
|
34390
34386
|
p = x("react.lazy");
|
|
34391
34387
|
q = x("react.block");
|
|
34392
|
-
r$
|
|
34388
|
+
r$1 = x("react.server.block");
|
|
34393
34389
|
u = x("react.fundamental");
|
|
34394
34390
|
v = x("react.debug_trace_mode");
|
|
34395
34391
|
w = x("react.legacy_hidden");
|
|
@@ -34402,7 +34398,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34402
34398
|
switch (a2 = a2.type, a2) {
|
|
34403
34399
|
case d:
|
|
34404
34400
|
case f:
|
|
34405
|
-
case e$
|
|
34401
|
+
case e$1:
|
|
34406
34402
|
case l$1:
|
|
34407
34403
|
case m:
|
|
34408
34404
|
return a2;
|
|
@@ -34411,7 +34407,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34411
34407
|
case h:
|
|
34412
34408
|
case k:
|
|
34413
34409
|
case p:
|
|
34414
|
-
case n$
|
|
34410
|
+
case n$1:
|
|
34415
34411
|
case g:
|
|
34416
34412
|
return a2;
|
|
34417
34413
|
default:
|
|
@@ -34423,7 +34419,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34423
34419
|
}
|
|
34424
34420
|
}
|
|
34425
34421
|
}
|
|
34426
|
-
var z = g, A = b, B = k, C = d, D = p, E = n$
|
|
34422
|
+
var z = g, A = b, B = k, C = d, D = p, E = n$1, F = c, G = f, H = e$1, I = l$1;
|
|
34427
34423
|
reactIs_production_min.ContextConsumer = h;
|
|
34428
34424
|
reactIs_production_min.ContextProvider = z;
|
|
34429
34425
|
reactIs_production_min.Element = A;
|
|
@@ -34460,7 +34456,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34460
34456
|
return y(a2) === p;
|
|
34461
34457
|
};
|
|
34462
34458
|
reactIs_production_min.isMemo = function(a2) {
|
|
34463
|
-
return y(a2) === n$
|
|
34459
|
+
return y(a2) === n$1;
|
|
34464
34460
|
};
|
|
34465
34461
|
reactIs_production_min.isPortal = function(a2) {
|
|
34466
34462
|
return y(a2) === c;
|
|
@@ -34469,13 +34465,13 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34469
34465
|
return y(a2) === f;
|
|
34470
34466
|
};
|
|
34471
34467
|
reactIs_production_min.isStrictMode = function(a2) {
|
|
34472
|
-
return y(a2) === e$
|
|
34468
|
+
return y(a2) === e$1;
|
|
34473
34469
|
};
|
|
34474
34470
|
reactIs_production_min.isSuspense = function(a2) {
|
|
34475
34471
|
return y(a2) === l$1;
|
|
34476
34472
|
};
|
|
34477
34473
|
reactIs_production_min.isValidElementType = function(a2) {
|
|
34478
|
-
return "string" === typeof a2 || "function" === typeof a2 || a2 === d || a2 === f || a2 === v || a2 === e$
|
|
34474
|
+
return "string" === typeof a2 || "function" === typeof a2 || a2 === d || a2 === f || a2 === v || a2 === e$1 || a2 === l$1 || a2 === m || a2 === w || "object" === typeof a2 && null !== a2 && (a2.$$typeof === p || a2.$$typeof === n$1 || a2.$$typeof === g || a2.$$typeof === h || a2.$$typeof === k || a2.$$typeof === u || a2.$$typeof === q || a2[0] === r$1) ? true : false;
|
|
34479
34475
|
};
|
|
34480
34476
|
reactIs_production_min.typeOf = y;
|
|
34481
34477
|
(function(module2) {
|
|
@@ -34483,10 +34479,10 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34483
34479
|
module2.exports = reactIs_production_min;
|
|
34484
34480
|
}
|
|
34485
34481
|
})(reactIs);
|
|
34486
|
-
let e
|
|
34482
|
+
let e = (e3) => "object" == typeof e3 && null != e3 && 1 === e3.nodeType, t = (e3, t2) => (!t2 || "hidden" !== e3) && ("visible" !== e3 && "clip" !== e3), n = (e3, n2) => {
|
|
34487
34483
|
if (e3.clientHeight < e3.scrollHeight || e3.clientWidth < e3.scrollWidth) {
|
|
34488
34484
|
let l2 = getComputedStyle(e3, null);
|
|
34489
|
-
return t
|
|
34485
|
+
return t(l2.overflowY, n2) || t(l2.overflowX, n2) || ((e4) => {
|
|
34490
34486
|
let t2 = ((e6) => {
|
|
34491
34487
|
if (!e6.ownerDocument || !e6.ownerDocument.defaultView)
|
|
34492
34488
|
return null;
|
|
@@ -34504,20 +34500,20 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34504
34500
|
let t2 = e3.parentElement;
|
|
34505
34501
|
return null == t2 ? e3.getRootNode().host || null : t2;
|
|
34506
34502
|
};
|
|
34507
|
-
var o
|
|
34503
|
+
var o = (t2, o2) => {
|
|
34508
34504
|
var r2, d2, h2, f2, u2, s;
|
|
34509
34505
|
if ("undefined" == typeof document)
|
|
34510
34506
|
return [];
|
|
34511
34507
|
let { scrollMode: a2, block: c2, inline: g2, boundary: m2, skipOverflowHiddenElements: p2 } = o2, w2 = "function" == typeof m2 ? m2 : (e3) => e3 !== m2;
|
|
34512
|
-
if (!e
|
|
34508
|
+
if (!e(t2))
|
|
34513
34509
|
throw new TypeError("Invalid target");
|
|
34514
34510
|
let W = document.scrollingElement || document.documentElement, H2 = [], b2 = t2;
|
|
34515
|
-
for (; e
|
|
34511
|
+
for (; e(b2) && w2(b2); ) {
|
|
34516
34512
|
if (b2 = i(b2), b2 === W) {
|
|
34517
34513
|
H2.push(b2);
|
|
34518
34514
|
break;
|
|
34519
34515
|
}
|
|
34520
|
-
null != b2 && b2 === document.body && n
|
|
34516
|
+
null != b2 && b2 === document.body && n(b2) && !n(document.documentElement) || null != b2 && n(b2, p2) && H2.push(b2);
|
|
34521
34517
|
}
|
|
34522
34518
|
let v2 = null != (d2 = null == (r2 = window.visualViewport) ? void 0 : r2.width) ? d2 : innerWidth, y2 = null != (f2 = null == (h2 = window.visualViewport) ? void 0 : h2.height) ? f2 : innerHeight, E2 = null != (u2 = window.scrollX) ? u2 : pageXOffset, M = null != (s = window.scrollY) ? s : pageYOffset, { height: x2, width: I2, top: C2, right: R, bottom: T, left: V } = t2.getBoundingClientRect(), k2 = "start" === c2 || "nearest" === c2 ? C2 : "end" === c2 ? T : C2 + x2 / 2, B2 = "center" === g2 ? V + I2 / 2 : "end" === g2 ? R : V, D2 = [];
|
|
34523
34519
|
for (let e3 = 0; e3 < H2.length; e3++) {
|
|
@@ -34799,7 +34795,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
34799
34795
|
if (!node) {
|
|
34800
34796
|
return;
|
|
34801
34797
|
}
|
|
34802
|
-
var actions = o
|
|
34798
|
+
var actions = o(node, {
|
|
34803
34799
|
boundary: menuNode,
|
|
34804
34800
|
block: "nearest",
|
|
34805
34801
|
scrollMode: "if-needed"
|
|
@@ -36777,7 +36773,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
36777
36773
|
}
|
|
36778
36774
|
})();
|
|
36779
36775
|
})(classnames);
|
|
36780
|
-
const r
|
|
36776
|
+
const r = classnames.exports;
|
|
36781
36777
|
function _typeof(o2) {
|
|
36782
36778
|
"@babel/helpers - typeof";
|
|
36783
36779
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o3) {
|
|
@@ -42072,7 +42068,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42072
42068
|
var e3 = this.dropdownRef.current;
|
|
42073
42069
|
e3 && (e3.scrollTop = e3.scrollHeight / 2 - e3.clientHeight / 2);
|
|
42074
42070
|
} }, { key: "render", value: function() {
|
|
42075
|
-
var t2 = r
|
|
42071
|
+
var t2 = r({ "react-datepicker__year-dropdown": true, "react-datepicker__year-dropdown--scrollable": this.props.scrollableYearDropdown });
|
|
42076
42072
|
return React__default.default.createElement("div", { className: t2, ref: this.dropdownRef }, this.renderOptions());
|
|
42077
42073
|
} }]), a2;
|
|
42078
42074
|
}()), gt = function(t2) {
|
|
@@ -42215,7 +42211,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42215
42211
|
}), r2.state = { monthYearsList: Ct(r2.props.minDate, r2.props.maxDate) }, r2;
|
|
42216
42212
|
}
|
|
42217
42213
|
return le(o2, [{ key: "render", value: function() {
|
|
42218
|
-
var t3 = r
|
|
42214
|
+
var t3 = r({ "react-datepicker__month-year-dropdown": true, "react-datepicker__month-year-dropdown--scrollable": this.props.scrollableMonthYearDropdown });
|
|
42219
42215
|
return React__default.default.createElement("div", { className: t3 }, this.renderOptions());
|
|
42220
42216
|
} }]), o2;
|
|
42221
42217
|
}()), _t = function(t2) {
|
|
@@ -42330,7 +42326,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42330
42326
|
return t3.isSameDay(t3.props.selected);
|
|
42331
42327
|
}), de(ye(t3), "getClassNames", function(e3) {
|
|
42332
42328
|
var n3 = t3.props.dayClassName ? t3.props.dayClassName(e3) : void 0;
|
|
42333
|
-
return r
|
|
42329
|
+
return r("react-datepicker__day", n3, "react-datepicker__day--" + Oe(t3.props.day), { "react-datepicker__day--disabled": t3.isDisabled(), "react-datepicker__day--excluded": t3.isExcluded(), "react-datepicker__day--selected": t3.isSelected(), "react-datepicker__day--keyboard-selected": t3.isKeyboardSelected(), "react-datepicker__day--range-start": t3.isRangeStart(), "react-datepicker__day--range-end": t3.isRangeEnd(), "react-datepicker__day--in-range": t3.isInRange(), "react-datepicker__day--in-selecting-range": t3.isInSelectingRange(), "react-datepicker__day--selecting-range-start": t3.isSelectingRangeStart(), "react-datepicker__day--selecting-range-end": t3.isSelectingRangeEnd(), "react-datepicker__day--today": t3.isCurrentDay(), "react-datepicker__day--weekend": t3.isWeekend(), "react-datepicker__day--outside-month": t3.isAfterMonth() || t3.isBeforeMonth() }, t3.getHighLightedClass("react-datepicker__day--highlighted"));
|
|
42334
42330
|
}), de(ye(t3), "getAriaLabel", function() {
|
|
42335
42331
|
var e3 = t3.props, r2 = e3.day, n3 = e3.ariaLabelPrefixWhenEnabled, o3 = void 0 === n3 ? "Choose" : n3, a3 = e3.ariaLabelPrefixWhenDisabled, s2 = void 0 === a3 ? "Not available" : a3, i3 = t3.isDisabled() || t3.isExcluded() ? s2 : o3;
|
|
42336
42332
|
return "".concat(i3, " ").concat(Ee(r2, "PPPP", t3.props.locale));
|
|
@@ -42365,7 +42361,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42365
42361
|
}
|
|
42366
42362
|
return le(o2, [{ key: "render", value: function() {
|
|
42367
42363
|
var t3 = this.props, n3 = t3.weekNumber, o3 = t3.ariaLabelPrefix, a2 = void 0 === o3 ? "week " : o3, s = { "react-datepicker__week-number": true, "react-datepicker__week-number--clickable": !!t3.onClick };
|
|
42368
|
-
return React__default.default.createElement("div", { className: r
|
|
42364
|
+
return React__default.default.createElement("div", { className: r(s), "aria-label": "".concat(a2, " ").concat(this.props.weekNumber), onClick: this.handleClick }, n3);
|
|
42369
42365
|
} }]), o2;
|
|
42370
42366
|
}(), Et = function(t2) {
|
|
42371
42367
|
he(n2, React__default.default.Component);
|
|
@@ -42473,7 +42469,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42473
42469
|
t3.handleDayClick(Fe(setQuarter(t3.props.day, r2)), e3);
|
|
42474
42470
|
}), de(ye(t3), "getMonthClassNames", function(e3) {
|
|
42475
42471
|
var n3 = t3.props, o3 = n3.day, a3 = n3.startDate, s2 = n3.endDate, i3 = n3.selected, p2 = n3.minDate, c2 = n3.maxDate, l2 = n3.preSelection, d2 = n3.monthClassName, u2 = d2 ? d2(o3) : void 0;
|
|
42476
|
-
return r
|
|
42472
|
+
return r("react-datepicker__month-text", "react-datepicker__month-".concat(e3), u2, { "react-datepicker__month--disabled": (p2 || c2) && Ze(setMonth(o3, e3), t3.props), "react-datepicker__month--selected": t3.isSelectedMonth(o3, e3, i3), "react-datepicker__month-text--keyboard-selected": getMonth(l2) === e3, "react-datepicker__month--in-range": et(a3, s2, e3, o3), "react-datepicker__month--range-start": t3.isRangeStartMonth(e3), "react-datepicker__month--range-end": t3.isRangeEndMonth(e3), "react-datepicker__month-text--today": t3.isCurrentMonth(o3, e3) });
|
|
42477
42473
|
}), de(ye(t3), "getTabIndex", function(e3) {
|
|
42478
42474
|
var r2 = getMonth(t3.props.preSelection);
|
|
42479
42475
|
return t3.props.disabledKeyboardNavigation || e3 !== r2 ? "-1" : "0";
|
|
@@ -42482,7 +42478,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42482
42478
|
return "".concat(c2, " ").concat(Ee(p2, "MMMM yyyy"));
|
|
42483
42479
|
}), de(ye(t3), "getQuarterClassNames", function(e3) {
|
|
42484
42480
|
var n3 = t3.props, o3 = n3.day, a3 = n3.startDate, s2 = n3.endDate, i3 = n3.selected, p2 = n3.minDate, c2 = n3.maxDate;
|
|
42485
|
-
return r
|
|
42481
|
+
return r("react-datepicker__quarter-text", "react-datepicker__quarter-".concat(e3), { "react-datepicker__quarter--disabled": (p2 || c2) && tt(setQuarter(o3, e3), t3.props), "react-datepicker__quarter--selected": t3.isSelectedQuarter(o3, e3, i3), "react-datepicker__quarter--in-range": nt(a3, s2, e3, o3), "react-datepicker__quarter--range-start": t3.isRangeStartQuarter(e3), "react-datepicker__quarter--range-end": t3.isRangeEndQuarter(e3) });
|
|
42486
42482
|
}), de(ye(t3), "renderMonths", function() {
|
|
42487
42483
|
var r2 = t3.props, n3 = r2.showFullMonthYearPicker, o3 = r2.showTwoColumnMonthYearPicker, a3 = r2.showFourColumnMonthYearPicker, s2 = r2.locale, i3 = r2.day, p2 = r2.selected;
|
|
42488
42484
|
return (a3 ? [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]] : o3 ? [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11]] : [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]).map(function(r3, o4) {
|
|
@@ -42505,7 +42501,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42505
42501
|
var e3 = t3.props;
|
|
42506
42502
|
e3.day;
|
|
42507
42503
|
var n3 = e3.selectingDate, o3 = e3.selectsStart, a3 = e3.selectsEnd, s2 = e3.showMonthYearPicker, i3 = e3.showQuarterYearPicker;
|
|
42508
|
-
return r
|
|
42504
|
+
return r("react-datepicker__month", { "react-datepicker__month--selecting-range": n3 && (o3 || a3) }, { "react-datepicker__monthPicker": s2 }, { "react-datepicker__quarterPicker": i3 });
|
|
42509
42505
|
}), t3;
|
|
42510
42506
|
}
|
|
42511
42507
|
return le(o2, [{ key: "render", value: function() {
|
|
@@ -42611,7 +42607,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42611
42607
|
}
|
|
42612
42608
|
}), de(ye(a2), "getYearClassNames", function(e3) {
|
|
42613
42609
|
var t4 = a2.props, n3 = t4.minDate, o3 = t4.maxDate, s = t4.selected;
|
|
42614
|
-
return r
|
|
42610
|
+
return r("react-datepicker__year-text", { "react-datepicker__year-text--selected": e3 === getYear(s), "react-datepicker__year-text--disabled": (n3 || o3) && rt(e3, a2.props), "react-datepicker__year-text--keyboard-selected": a2.isKeyboardSelected(e3), "react-datepicker__year-text--today": a2.isCurrentYear(e3) });
|
|
42615
42611
|
}), de(ye(a2), "getYearTabIndex", function(e3) {
|
|
42616
42612
|
return a2.props.disabledKeyboardNavigation ? "-1" : e3 === getYear(a2.props.preSelection) ? "0" : "-1";
|
|
42617
42613
|
}), a2;
|
|
@@ -42723,7 +42719,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42723
42719
|
var t4 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : a2.state.date, n3 = Te(t4, a2.props.locale, a2.props.calendarStartDay), o3 = [];
|
|
42724
42720
|
return a2.props.showWeekNumbers && o3.push(React__default.default.createElement("div", { key: "W", className: "react-datepicker__day-name" }, a2.props.weekLabel || "#")), o3.concat([0, 1, 2, 3, 4, 5, 6].map(function(t5) {
|
|
42725
42721
|
var o4 = addDays(n3, t5), s = a2.formatWeekday(o4, a2.props.locale), i2 = a2.props.weekDayClassName ? a2.props.weekDayClassName(o4) : void 0;
|
|
42726
|
-
return React__default.default.createElement("div", { key: t5, className: r
|
|
42722
|
+
return React__default.default.createElement("div", { key: t5, className: r("react-datepicker__day-name", i2) }, s);
|
|
42727
42723
|
}));
|
|
42728
42724
|
}), de(ye(a2), "formatWeekday", function(e3, t4) {
|
|
42729
42725
|
return a2.props.formatWeekDay ? function(e4, t5, r2) {
|
|
@@ -42865,7 +42861,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42865
42861
|
this.props.preSelection && !We(this.props.preSelection, e3.preSelection) ? this.setState({ date: this.props.preSelection }) : this.props.openToDate && !We(this.props.openToDate, e3.openToDate) && this.setState({ date: this.props.openToDate });
|
|
42866
42862
|
} }, { key: "render", value: function() {
|
|
42867
42863
|
var t3 = this.props.container || It;
|
|
42868
|
-
return React__default.default.createElement("div", { ref: this.containerRef }, React__default.default.createElement(t3, { className: r
|
|
42864
|
+
return React__default.default.createElement("div", { ref: this.containerRef }, React__default.default.createElement(t3, { className: r("react-datepicker", this.props.className, { "react-datepicker--time-only": this.props.showTimeSelectOnly }), showPopperArrow: this.props.showPopperArrow, arrowProps: this.props.arrowProps }, this.renderPreviousButton(), this.renderNextButton(), this.renderMonths(), this.renderYears(), this.renderTodayButton(), this.renderTimeSection(), this.renderInputTimeSection(), this.props.children));
|
|
42869
42865
|
} }], [{ key: "defaultProps", get: function() {
|
|
42870
42866
|
return { onDropdownFocus: function() {
|
|
42871
42867
|
}, monthsShown: 1, monthSelectedIn: 0, forceShowMonthNavigation: false, timeCaption: "Time", previousYearButtonLabel: "Previous Year", nextYearButtonLabel: "Next Year", previousMonthButtonLabel: "Previous Month", nextMonthButtonLabel: "Next Month", customTimeInput: null, yearItemNumber: 12 };
|
|
@@ -42915,14 +42911,14 @@ var __privateMethod = (obj, member, method) => {
|
|
|
42915
42911
|
return le(o2, [{ key: "render", value: function() {
|
|
42916
42912
|
var t3, n3 = this.props, o3 = n3.className, a2 = n3.wrapperClassName, s = n3.hidePopper, i2 = n3.popperComponent, p2 = n3.popperModifiers, c2 = n3.popperPlacement, l2 = n3.popperProps, d2 = n3.targetComponent, u2 = n3.enableTabLoop, h2 = n3.popperOnKeyDown, m2 = n3.portalId, f2 = n3.portalHost;
|
|
42917
42913
|
if (!s) {
|
|
42918
|
-
var y2 = r
|
|
42914
|
+
var y2 = r("react-datepicker-popper", o3);
|
|
42919
42915
|
t3 = React__default.default.createElement(Popper, ue({ modifiers: p2, placement: c2 }, l2), function(t4) {
|
|
42920
42916
|
var r2 = t4.ref, n4 = t4.style, o4 = t4.placement, a3 = t4.arrowProps;
|
|
42921
42917
|
return React__default.default.createElement(At, { enableTabLoop: u2 }, React__default.default.createElement("div", { ref: r2, style: n4, className: y2, "data-placement": o4, onKeyDown: h2 }, React__default.default.cloneElement(i2, { arrowProps: a3 })));
|
|
42922
42918
|
});
|
|
42923
42919
|
}
|
|
42924
42920
|
this.props.popperContainer && (t3 = React__default.default.createElement(this.props.popperContainer, {}, t3)), m2 && !s && (t3 = React__default.default.createElement(Rt, { portalId: m2, portalHost: f2 }, t3));
|
|
42925
|
-
var v2 = r
|
|
42921
|
+
var v2 = r("react-datepicker-wrapper", a2);
|
|
42926
42922
|
return React__default.default.createElement(Manager, { className: "react-datepicker-manager" }, React__default.default.createElement(Reference, null, function(t4) {
|
|
42927
42923
|
var r2 = t4.ref;
|
|
42928
42924
|
return React__default.default.createElement("div", { ref: r2, className: v2 }, d2);
|
|
@@ -43100,7 +43096,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
43100
43096
|
s.calendar = e3;
|
|
43101
43097
|
}, locale: s.props.locale, calendarStartDay: s.props.calendarStartDay, chooseDayAriaLabelPrefix: s.props.chooseDayAriaLabelPrefix, disabledDayAriaLabelPrefix: s.props.disabledDayAriaLabelPrefix, weekAriaLabelPrefix: s.props.weekAriaLabelPrefix, monthAriaLabelPrefix: s.props.monthAriaLabelPrefix, adjustDateOnChange: s.props.adjustDateOnChange, setOpen: s.setOpen, shouldCloseOnSelect: s.props.shouldCloseOnSelect, dateFormat: s.props.dateFormatCalendar, useWeekdaysShort: s.props.useWeekdaysShort, formatWeekDay: s.props.formatWeekDay, dropdownMode: s.props.dropdownMode, selected: s.props.selected, preSelection: s.state.preSelection, onSelect: s.handleSelect, onWeekSelect: s.props.onWeekSelect, openToDate: s.props.openToDate, minDate: s.props.minDate, maxDate: s.props.maxDate, selectsStart: s.props.selectsStart, selectsEnd: s.props.selectsEnd, selectsRange: s.props.selectsRange, startDate: s.props.startDate, endDate: s.props.endDate, excludeDates: s.props.excludeDates, excludeDateIntervals: s.props.excludeDateIntervals, filterDate: s.props.filterDate, onClickOutside: s.handleCalendarClickOutside, formatWeekNumber: s.props.formatWeekNumber, highlightDates: s.state.highlightDates, includeDates: s.props.includeDates, includeDateIntervals: s.props.includeDateIntervals, includeTimes: s.props.includeTimes, injectTimes: s.props.injectTimes, inline: s.props.inline, shouldFocusDayInline: s.state.shouldFocusDayInline, peekNextMonth: s.props.peekNextMonth, showMonthDropdown: s.props.showMonthDropdown, showPreviousMonths: s.props.showPreviousMonths, useShortMonthInDropdown: s.props.useShortMonthInDropdown, showMonthYearDropdown: s.props.showMonthYearDropdown, showWeekNumbers: s.props.showWeekNumbers, showYearDropdown: s.props.showYearDropdown, withPortal: s.props.withPortal, forceShowMonthNavigation: s.props.forceShowMonthNavigation, showDisabledMonthNavigation: s.props.showDisabledMonthNavigation, scrollableYearDropdown: s.props.scrollableYearDropdown, scrollableMonthYearDropdown: s.props.scrollableMonthYearDropdown, todayButton: s.props.todayButton, weekLabel: s.props.weekLabel, outsideClickIgnoreClass: "react-datepicker-ignore-onclickoutside", fixedHeight: s.props.fixedHeight, monthsShown: s.props.monthsShown, monthSelectedIn: s.state.monthSelectedIn, onDropdownFocus: s.handleDropdownFocus, onMonthChange: s.props.onMonthChange, onYearChange: s.props.onYearChange, dayClassName: s.props.dayClassName, weekDayClassName: s.props.weekDayClassName, monthClassName: s.props.monthClassName, timeClassName: s.props.timeClassName, showTimeSelect: s.props.showTimeSelect, showTimeSelectOnly: s.props.showTimeSelectOnly, onTimeChange: s.handleTimeChange, timeFormat: s.props.timeFormat, timeIntervals: s.props.timeIntervals, minTime: s.props.minTime, maxTime: s.props.maxTime, excludeTimes: s.props.excludeTimes, filterTime: s.props.filterTime, timeCaption: s.props.timeCaption, className: s.props.calendarClassName, container: s.props.calendarContainer, yearItemNumber: s.props.yearItemNumber, yearDropdownItemNumber: s.props.yearDropdownItemNumber, previousMonthAriaLabel: s.props.previousMonthAriaLabel, previousMonthButtonLabel: s.props.previousMonthButtonLabel, nextMonthAriaLabel: s.props.nextMonthAriaLabel, nextMonthButtonLabel: s.props.nextMonthButtonLabel, previousYearAriaLabel: s.props.previousYearAriaLabel, previousYearButtonLabel: s.props.previousYearButtonLabel, nextYearAriaLabel: s.props.nextYearAriaLabel, nextYearButtonLabel: s.props.nextYearButtonLabel, timeInputLabel: s.props.timeInputLabel, disabledKeyboardNavigation: s.props.disabledKeyboardNavigation, renderCustomHeader: s.props.renderCustomHeader, popperProps: s.props.popperProps, renderDayContents: s.props.renderDayContents, onDayMouseEnter: s.props.onDayMouseEnter, onMonthMouseLeave: s.props.onMonthMouseLeave, selectsDisabledDaysInRange: s.props.selectsDisabledDaysInRange, showTimeInput: s.props.showTimeInput, showMonthYearPicker: s.props.showMonthYearPicker, showFullMonthYearPicker: s.props.showFullMonthYearPicker, showTwoColumnMonthYearPicker: s.props.showTwoColumnMonthYearPicker, showFourColumnMonthYearPicker: s.props.showFourColumnMonthYearPicker, showYearPicker: s.props.showYearPicker, showQuarterYearPicker: s.props.showQuarterYearPicker, showPopperArrow: s.props.showPopperArrow, excludeScrollbar: s.props.excludeScrollbar, handleOnKeyDown: s.props.onKeyDown, handleOnDayKeyDown: s.onDayKeyDown, isInputFocused: s.state.focused, customTimeInput: s.props.customTimeInput, setPreSelection: s.setPreSelection }, s.props.children) : null;
|
|
43102
43098
|
}), de(ye(s), "renderDateInput", function() {
|
|
43103
|
-
var t4, n2 = r
|
|
43099
|
+
var t4, n2 = r(s.props.className, de({}, "react-datepicker-ignore-onclickoutside", s.state.open)), o3 = s.props.customInput || React__default.default.createElement("input", { type: "text" }), a3 = s.props.customInputRef || "ref", i2 = "string" == typeof s.props.value ? s.props.value : "string" == typeof s.state.inputValue ? s.state.inputValue : s.props.selectsRange ? function(e3, t5, r2) {
|
|
43104
43100
|
if (!e3)
|
|
43105
43101
|
return "";
|
|
43106
43102
|
var n3 = Ne(e3, r2), o4 = t5 ? Ne(t5, r2) : "";
|
|
@@ -43108,7 +43104,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
43108
43104
|
}(s.props.startDate, s.props.endDate, s.props) : Ne(s.props.selected, s.props);
|
|
43109
43105
|
return React__default.default.cloneElement(o3, (de(t4 = {}, a3, function(e3) {
|
|
43110
43106
|
s.input = e3;
|
|
43111
|
-
}), de(t4, "value", i2), de(t4, "onBlur", s.handleBlur), de(t4, "onChange", s.handleChange), de(t4, "onClick", s.onInputClick), de(t4, "onFocus", s.handleFocus), de(t4, "onKeyDown", s.onInputKeyDown), de(t4, "id", s.props.id), de(t4, "name", s.props.name), de(t4, "autoFocus", s.props.autoFocus), de(t4, "placeholder", s.props.placeholderText), de(t4, "disabled", s.props.disabled), de(t4, "autoComplete", s.props.autoComplete), de(t4, "className", r
|
|
43107
|
+
}), de(t4, "value", i2), de(t4, "onBlur", s.handleBlur), de(t4, "onChange", s.handleChange), de(t4, "onClick", s.onInputClick), de(t4, "onFocus", s.handleFocus), de(t4, "onKeyDown", s.onInputKeyDown), de(t4, "id", s.props.id), de(t4, "name", s.props.name), de(t4, "autoFocus", s.props.autoFocus), de(t4, "placeholder", s.props.placeholderText), de(t4, "disabled", s.props.disabled), de(t4, "autoComplete", s.props.autoComplete), de(t4, "className", r(o3.props.className, n2)), de(t4, "title", s.props.title), de(t4, "readOnly", s.props.readOnly), de(t4, "required", s.props.required), de(t4, "tabIndex", s.props.tabIndex), de(t4, "aria-describedby", s.props.ariaDescribedBy), de(t4, "aria-invalid", s.props.ariaInvalid), de(t4, "aria-labelledby", s.props.ariaLabelledBy), de(t4, "aria-required", s.props.ariaRequired), t4));
|
|
43112
43108
|
}), de(ye(s), "renderClearButton", function() {
|
|
43113
43109
|
var t4 = s.props, r2 = t4.isClearable, n2 = t4.selected, o3 = t4.startDate, a3 = t4.endDate, i2 = t4.clearButtonTitle, p2 = t4.clearButtonClassName, c2 = void 0 === p2 ? "" : p2, l2 = t4.ariaLabelClose, d2 = void 0 === l2 ? "Close" : l2;
|
|
43114
43110
|
return !r2 || null == n2 && null == o3 && null == a3 ? null : React__default.default.createElement("button", { type: "button", className: "react-datepicker__close-icon ".concat(c2).trim(), "aria-label": d2, onClick: s.onClearClick, title: i2, tabIndex: -1 });
|
|
@@ -49400,7 +49396,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
49400
49396
|
key: "render",
|
|
49401
49397
|
value: function render2() {
|
|
49402
49398
|
var _props = this.props, children = _props.children, className = _props.className, disableHeight = _props.disableHeight, disableWidth = _props.disableWidth, style = _props.style;
|
|
49403
|
-
var
|
|
49399
|
+
var _state = this.state, height = _state.height, width = _state.width;
|
|
49404
49400
|
var outerStyle = { overflow: "visible" };
|
|
49405
49401
|
var childParams = {};
|
|
49406
49402
|
var bailoutOnChildren = false;
|
|
@@ -54958,16 +54954,12 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
54958
54954
|
var cloneDeep_1 = cloneDeep;
|
|
54959
54955
|
class GlobalStore {
|
|
54960
54956
|
constructor() {
|
|
54961
|
-
__privateAdd(this, _notify);
|
|
54962
|
-
__privateAdd(this, _state, void 0);
|
|
54963
54957
|
__privateAdd(this, _locks, void 0);
|
|
54964
54958
|
__privateAdd(this, _subscribers, void 0);
|
|
54965
|
-
__privateSet(this, _state, {});
|
|
54966
54959
|
__privateSet(this, _locks, {});
|
|
54967
54960
|
__privateSet(this, _subscribers, {});
|
|
54968
54961
|
}
|
|
54969
54962
|
clear() {
|
|
54970
|
-
__privateSet(this, _state, {});
|
|
54971
54963
|
__privateSet(this, _locks, {});
|
|
54972
54964
|
__privateSet(this, _subscribers, {});
|
|
54973
54965
|
}
|
|
@@ -54975,14 +54967,17 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
54975
54967
|
if (__privateGet(this, _locks)[key]) {
|
|
54976
54968
|
return __privateGet(this, _locks)[key];
|
|
54977
54969
|
}
|
|
54978
|
-
return
|
|
54970
|
+
return localStorage.getItem(key);
|
|
54979
54971
|
}
|
|
54980
54972
|
getValueSync(key) {
|
|
54981
|
-
return
|
|
54973
|
+
return localStorage.getItem(key);
|
|
54982
54974
|
}
|
|
54983
54975
|
setValue(key, value) {
|
|
54984
|
-
|
|
54985
|
-
|
|
54976
|
+
if (value === null) {
|
|
54977
|
+
localStorage.removeItem(key);
|
|
54978
|
+
} else {
|
|
54979
|
+
localStorage.setItem(key, value);
|
|
54980
|
+
}
|
|
54986
54981
|
}
|
|
54987
54982
|
async replaceValue(key, fn) {
|
|
54988
54983
|
if (__privateGet(this, _locks)[key]) {
|
|
@@ -54998,10 +54993,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
54998
54993
|
let result;
|
|
54999
54994
|
try {
|
|
55000
54995
|
result = await fn();
|
|
55001
|
-
__privateGet(this, _state)[key] = result;
|
|
55002
|
-
__privateMethod(this, _notify, notify_fn).call(this, key, result);
|
|
55003
|
-
unlock(result);
|
|
55004
54996
|
this.setValue(key, result);
|
|
54997
|
+
unlock(result);
|
|
55005
54998
|
} catch (e3) {
|
|
55006
54999
|
unlockError(e3);
|
|
55007
55000
|
} finally {
|
|
@@ -55013,21 +55006,19 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
55013
55006
|
if (!__privateGet(this, _subscribers)[key]) {
|
|
55014
55007
|
__privateGet(this, _subscribers)[key] = [];
|
|
55015
55008
|
}
|
|
55016
|
-
|
|
55009
|
+
const subFunc = (e3) => {
|
|
55010
|
+
if (e3.storageArea === localStorage && e3.key === key) {
|
|
55011
|
+
callback(e3.newValue);
|
|
55012
|
+
}
|
|
55013
|
+
};
|
|
55014
|
+
window.addEventListener("storage", subFunc);
|
|
55017
55015
|
return () => {
|
|
55018
|
-
|
|
55016
|
+
window.removeEventListener("storage", subFunc);
|
|
55019
55017
|
};
|
|
55020
55018
|
}
|
|
55021
55019
|
}
|
|
55022
|
-
_state = new WeakMap();
|
|
55023
55020
|
_locks = new WeakMap();
|
|
55024
55021
|
_subscribers = new WeakMap();
|
|
55025
|
-
_notify = new WeakSet();
|
|
55026
|
-
notify_fn = function(key, value) {
|
|
55027
|
-
if (__privateGet(this, _subscribers)[key]) {
|
|
55028
|
-
__privateGet(this, _subscribers)[key].forEach((cb) => cb(value));
|
|
55029
|
-
}
|
|
55030
|
-
};
|
|
55031
55022
|
const store = new GlobalStore();
|
|
55032
55023
|
class RequestExtrasSerializable {
|
|
55033
55024
|
constructor(extras) {
|
|
@@ -55058,7 +55049,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
55058
55049
|
}
|
|
55059
55050
|
async function request(url, options, extras) {
|
|
55060
55051
|
var _a, _b;
|
|
55061
|
-
const sessionToken = await store.getValue(
|
|
55052
|
+
const sessionToken = await store.getValue(getTokenKey());
|
|
55062
55053
|
const mergedOptions = extras ? { ...options, ...extras } : options;
|
|
55063
55054
|
const { headers, ...other } = mergedOptions;
|
|
55064
55055
|
const headersInterface = new Headers(headers);
|
|
@@ -55079,7 +55070,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
55079
55070
|
});
|
|
55080
55071
|
if (response.status === 401 || response.status === 403) {
|
|
55081
55072
|
try {
|
|
55082
|
-
const refreshedToken = await store.replaceValue(
|
|
55073
|
+
const refreshedToken = await store.replaceValue(getTokenKey(), async () => {
|
|
55083
55074
|
const refreshResponse = await fetch(`${baseUrl}/api/auth/refresh-token`, {
|
|
55084
55075
|
headers: headersInterface,
|
|
55085
55076
|
...other,
|
|
@@ -56575,6 +56566,16 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
56575
56566
|
);
|
|
56576
56567
|
}
|
|
56577
56568
|
}
|
|
56569
|
+
updateToken(newToken) {
|
|
56570
|
+
if (this.socket.readyState === WebSocket.OPEN) {
|
|
56571
|
+
this.socket.send(
|
|
56572
|
+
JSON.stringify({
|
|
56573
|
+
message: newToken,
|
|
56574
|
+
type: "token_update"
|
|
56575
|
+
})
|
|
56576
|
+
);
|
|
56577
|
+
}
|
|
56578
|
+
}
|
|
56578
56579
|
sendCustomMessage(kind, data, awaitResponse = false) {
|
|
56579
56580
|
if (this.socket.readyState === WebSocket.OPEN) {
|
|
56580
56581
|
if (awaitResponse) {
|
|
@@ -58095,13 +58096,13 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
|
|
|
58095
58096
|
return resolver(getOrRegisterPlainVariable(variable, client, taskContext, extras));
|
|
58096
58097
|
}
|
|
58097
58098
|
function tokenSubscribe(cb) {
|
|
58098
|
-
return store.subscribe(
|
|
58099
|
+
return store.subscribe(getTokenKey(), cb);
|
|
58099
58100
|
}
|
|
58100
58101
|
function getSessionToken() {
|
|
58101
|
-
return store.getValueSync(
|
|
58102
|
+
return store.getValueSync(getTokenKey());
|
|
58102
58103
|
}
|
|
58103
58104
|
function setSessionToken(token) {
|
|
58104
|
-
store.setValue(
|
|
58105
|
+
store.setValue(getTokenKey(), token);
|
|
58105
58106
|
}
|
|
58106
58107
|
function useSessionToken() {
|
|
58107
58108
|
return React__namespace.useSyncExternalStore(tokenSubscribe, getSessionToken);
|
|
@@ -58960,57 +58961,6 @@ Inferred class string: "${iconClasses}."`
|
|
|
58960
58961
|
}
|
|
58961
58962
|
return templateCopy;
|
|
58962
58963
|
}
|
|
58963
|
-
function e(e3) {
|
|
58964
|
-
this.message = e3;
|
|
58965
|
-
}
|
|
58966
|
-
e.prototype = new Error(), e.prototype.name = "InvalidCharacterError";
|
|
58967
|
-
var r = "undefined" != typeof window && window.atob && window.atob.bind(window) || function(r2) {
|
|
58968
|
-
var t2 = String(r2).replace(/=+$/, "");
|
|
58969
|
-
if (t2.length % 4 == 1)
|
|
58970
|
-
throw new e("'atob' failed: The string to be decoded is not correctly encoded.");
|
|
58971
|
-
for (var n2, o2, a2 = 0, i2 = 0, c2 = ""; o2 = t2.charAt(i2++); ~o2 && (n2 = a2 % 4 ? 64 * n2 + o2 : o2, a2++ % 4) ? c2 += String.fromCharCode(255 & n2 >> (-2 * a2 & 6)) : 0)
|
|
58972
|
-
o2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o2);
|
|
58973
|
-
return c2;
|
|
58974
|
-
};
|
|
58975
|
-
function t(e3) {
|
|
58976
|
-
var t2 = e3.replace(/-/g, "+").replace(/_/g, "/");
|
|
58977
|
-
switch (t2.length % 4) {
|
|
58978
|
-
case 0:
|
|
58979
|
-
break;
|
|
58980
|
-
case 2:
|
|
58981
|
-
t2 += "==";
|
|
58982
|
-
break;
|
|
58983
|
-
case 3:
|
|
58984
|
-
t2 += "=";
|
|
58985
|
-
break;
|
|
58986
|
-
default:
|
|
58987
|
-
throw "Illegal base64url string!";
|
|
58988
|
-
}
|
|
58989
|
-
try {
|
|
58990
|
-
return function(e4) {
|
|
58991
|
-
return decodeURIComponent(r(e4).replace(/(.)/g, function(e6, r2) {
|
|
58992
|
-
var t3 = r2.charCodeAt(0).toString(16).toUpperCase();
|
|
58993
|
-
return t3.length < 2 && (t3 = "0" + t3), "%" + t3;
|
|
58994
|
-
}));
|
|
58995
|
-
}(t2);
|
|
58996
|
-
} catch (e4) {
|
|
58997
|
-
return r(t2);
|
|
58998
|
-
}
|
|
58999
|
-
}
|
|
59000
|
-
function n(e3) {
|
|
59001
|
-
this.message = e3;
|
|
59002
|
-
}
|
|
59003
|
-
function o(e3, r2) {
|
|
59004
|
-
if ("string" != typeof e3)
|
|
59005
|
-
throw new n("Invalid token specified");
|
|
59006
|
-
var o2 = true === (r2 = r2 || {}).header ? 0 : 1;
|
|
59007
|
-
try {
|
|
59008
|
-
return JSON.parse(t(e3.split(".")[o2]));
|
|
59009
|
-
} catch (e4) {
|
|
59010
|
-
throw new n("Invalid token specified: " + e4.message);
|
|
59011
|
-
}
|
|
59012
|
-
}
|
|
59013
|
-
n.prototype = new Error(), n.prototype.name = "InvalidTokenError";
|
|
59014
58964
|
const Wrapper$2 = styled__default.default.div`
|
|
59015
58965
|
display: flex;
|
|
59016
58966
|
align-items: center;
|
|
@@ -59148,28 +59098,6 @@ Inferred class string: "${iconClasses}."`
|
|
|
59148
59098
|
}
|
|
59149
59099
|
return isLoading ? /* @__PURE__ */ React__default.default.createElement(DefaultFallback, null) : children;
|
|
59150
59100
|
}
|
|
59151
|
-
async function checkTokenExpiry(token) {
|
|
59152
|
-
if (token) {
|
|
59153
|
-
try {
|
|
59154
|
-
const decoded = o(token);
|
|
59155
|
-
if (decoded.exp * 1e3 - Date.now() < 5 * 60 * 1e3) {
|
|
59156
|
-
const res = await request("/api/auth/refresh-token", {
|
|
59157
|
-
headers: {
|
|
59158
|
-
Accept: "application/json",
|
|
59159
|
-
"Content-Type": "application/json"
|
|
59160
|
-
},
|
|
59161
|
-
method: "POST"
|
|
59162
|
-
});
|
|
59163
|
-
if (res.ok) {
|
|
59164
|
-
const { token: newToken } = await res.json();
|
|
59165
|
-
return newToken;
|
|
59166
|
-
}
|
|
59167
|
-
}
|
|
59168
|
-
} catch (e3) {
|
|
59169
|
-
console.warn("Failed to refresh token", e3);
|
|
59170
|
-
}
|
|
59171
|
-
}
|
|
59172
|
-
}
|
|
59173
59101
|
function DynamicAuthComponent(props) {
|
|
59174
59102
|
const importers = React.useContext(importersCtx);
|
|
59175
59103
|
const [component, setComponent] = React.useState(() => /* @__PURE__ */ React__default.default.createElement(DefaultFallback, null));
|
|
@@ -59197,31 +59125,8 @@ Inferred class string: "${iconClasses}."`
|
|
|
59197
59125
|
const isMounted = React.useRef(false);
|
|
59198
59126
|
if (!isMounted.current) {
|
|
59199
59127
|
isMounted.current = true;
|
|
59200
|
-
|
|
59128
|
+
setSessionToken(getToken());
|
|
59201
59129
|
}
|
|
59202
|
-
React.useEffect(() => {
|
|
59203
|
-
if (!(authConfig == null ? void 0 : authConfig.supports_token_refresh)) {
|
|
59204
|
-
return;
|
|
59205
|
-
}
|
|
59206
|
-
const interval = setInterval(async () => {
|
|
59207
|
-
const token = await store.getValue("sessionToken");
|
|
59208
|
-
const newToken = await checkTokenExpiry(token);
|
|
59209
|
-
if (newToken) {
|
|
59210
|
-
store.setValue("sessionToken", newToken);
|
|
59211
|
-
}
|
|
59212
|
-
}, 60 * 1e3);
|
|
59213
|
-
return () => clearInterval(interval);
|
|
59214
|
-
}, [authConfig]);
|
|
59215
|
-
React.useEffect(() => {
|
|
59216
|
-
return store.subscribe("sessionToken", (newToken) => {
|
|
59217
|
-
const key = getTokenKey();
|
|
59218
|
-
if (newToken) {
|
|
59219
|
-
localStorage.setItem(key, newToken);
|
|
59220
|
-
} else {
|
|
59221
|
-
localStorage.removeItem(key);
|
|
59222
|
-
}
|
|
59223
|
-
});
|
|
59224
|
-
}, []);
|
|
59225
59130
|
if (isLoading) {
|
|
59226
59131
|
return /* @__PURE__ */ React__default.default.createElement(Center, null, /* @__PURE__ */ React__default.default.createElement(DefaultFallback, null));
|
|
59227
59132
|
}
|
|
@@ -60486,6 +60391,7 @@ Inferred class string: "${iconClasses}."`
|
|
|
60486
60391
|
function TemplateRoot() {
|
|
60487
60392
|
var _a, _b, _c;
|
|
60488
60393
|
const token = useSessionToken();
|
|
60394
|
+
const [previousToken, setPreviousToken] = React.useState(token);
|
|
60489
60395
|
const { data: config2 } = useConfig();
|
|
60490
60396
|
const { data: template, isLoading: templateLoading } = useTemplate(config2 == null ? void 0 : config2.template);
|
|
60491
60397
|
const { data: actions, isLoading: actionsLoading } = useActions();
|
|
@@ -60493,7 +60399,11 @@ Inferred class string: "${iconClasses}."`
|
|
|
60493
60399
|
const [wsClient, setWsClient] = React.useState();
|
|
60494
60400
|
React.useEffect(() => {
|
|
60495
60401
|
cleanSessionCache(token);
|
|
60496
|
-
|
|
60402
|
+
if (token !== previousToken) {
|
|
60403
|
+
wsClient.updateToken(token);
|
|
60404
|
+
setPreviousToken(token);
|
|
60405
|
+
}
|
|
60406
|
+
}, [token, previousToken]);
|
|
60497
60407
|
React.useEffect(() => {
|
|
60498
60408
|
if (config2 == null ? void 0 : config2.title) {
|
|
60499
60409
|
document.title = config2.title;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dara-core
|
|
3
|
-
Version: 1.14.
|
|
3
|
+
Version: 1.14.0a3
|
|
4
4
|
Summary: Dara Framework Core
|
|
5
5
|
Home-page: https://dara.causalens.com/
|
|
6
6
|
License: Apache-2.0
|
|
@@ -20,10 +20,10 @@ Requires-Dist: async-asgi-testclient (>=1.4.11,<2.0.0)
|
|
|
20
20
|
Requires-Dist: certifi (>=2024.7.4)
|
|
21
21
|
Requires-Dist: click (==8.1.3)
|
|
22
22
|
Requires-Dist: colorama (>=0.4.6,<0.5.0)
|
|
23
|
-
Requires-Dist: create-dara-app (==1.14.0-alpha.
|
|
23
|
+
Requires-Dist: create-dara-app (==1.14.0-alpha.3)
|
|
24
24
|
Requires-Dist: croniter (>=1.0.15,<2.0.0)
|
|
25
25
|
Requires-Dist: cryptography (>=42.0.4)
|
|
26
|
-
Requires-Dist: dara-components (==1.14.0-alpha.
|
|
26
|
+
Requires-Dist: dara-components (==1.14.0-alpha.3) ; extra == "all"
|
|
27
27
|
Requires-Dist: exceptiongroup (>=1.1.3,<2.0.0)
|
|
28
28
|
Requires-Dist: fastapi (==0.109.0)
|
|
29
29
|
Requires-Dist: fastapi-vite (==0.3.1)
|
|
@@ -51,7 +51,7 @@ Description-Content-Type: text/markdown
|
|
|
51
51
|
|
|
52
52
|
# Dara Application Framework
|
|
53
53
|
|
|
54
|
-
<img src="https://github.com/causalens/dara/blob/v1.14.0-alpha.
|
|
54
|
+
<img src="https://github.com/causalens/dara/blob/v1.14.0-alpha.3/img/dara_light.svg?raw=true">
|
|
55
55
|
|
|
56
56
|

|
|
57
57
|
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
@@ -96,7 +96,7 @@ source .venv/bin/activate
|
|
|
96
96
|
dara start
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-

|
|
100
100
|
|
|
101
101
|
Note: `pip` installation uses [PEP 660](https://peps.python.org/pep-0660/) `pyproject.toml`-based editable installs which require `pip >= 21.3` and `setuptools >= 64.0.0`. You can upgrade both with:
|
|
102
102
|
|
|
@@ -113,9 +113,9 @@ Explore some of our favorite apps - a great way of getting started and getting t
|
|
|
113
113
|
|
|
114
114
|
| Dara App | Description |
|
|
115
115
|
| -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
116
|
-
|  | Demonstrates how to use incorporate a LLM chat box into your decision app to understand model insights |
|
|
117
|
+
|  | Demonstrates how to enable the user to interact with plots, trigger actions based on clicks, mouse movements and other interactions with `Bokeh` or `Plotly` plots |
|
|
118
|
+
|  | Demonstrates how to use the `CausalGraphViewer` component to display your graphs or networks, customising the displayed information through colors and tooltips, and updating the page based on user interaction. |
|
|
119
119
|
|
|
120
120
|
Check out our [App Gallery](https://dara.causalens.com/gallery) for more inspiration!
|
|
121
121
|
|
|
@@ -142,9 +142,9 @@ And the supporting UI packages and tools.
|
|
|
142
142
|
- `ui-utils` - miscellaneous utility functions
|
|
143
143
|
- `ui-widgets` - widget components
|
|
144
144
|
|
|
145
|
-
More information on the repository structure can be found in the [CONTRIBUTING.md](https://github.com/causalens/dara/blob/v1.14.0-alpha.
|
|
145
|
+
More information on the repository structure can be found in the [CONTRIBUTING.md](https://github.com/causalens/dara/blob/v1.14.0-alpha.3/CONTRIBUTING.md) file.
|
|
146
146
|
|
|
147
147
|
## License
|
|
148
148
|
|
|
149
|
-
Dara is open-source and licensed under the [Apache 2.0 License](https://github.com/causalens/dara/blob/v1.14.0-alpha.
|
|
149
|
+
Dara is open-source and licensed under the [Apache 2.0 License](https://github.com/causalens/dara/blob/v1.14.0-alpha.3/LICENSE).
|
|
150
150
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
dara/core/__init__.py,sha256=w3OUU03lGXA45_Sf99CsNWL6SZ7tr7y4wRYq6pdGmhM,2186
|
|
2
2
|
dara/core/actions.py,sha256=gARcrrtzYuBAVJUCtuHwpFc6PPVPb7x3ITIISCLw0GA,965
|
|
3
3
|
dara/core/auth/__init__.py,sha256=H0bJoXff5wIRZmHvvQ3y9p5SXA9lM8OuLCGceYGqfb0,851
|
|
4
|
-
dara/core/auth/base.py,sha256=
|
|
4
|
+
dara/core/auth/base.py,sha256=jZNuCMoBHQcxWeLpTUzcxdbkbWUJ42jbtKgnnrwvNVA,3201
|
|
5
5
|
dara/core/auth/basic.py,sha256=IMkoC1OeeRmnmjIqPHpybs8zSdbLlNKYLRvj08ajirg,4692
|
|
6
6
|
dara/core/auth/definitions.py,sha256=fx-VCsElP9X97gM0Eql-4lFpLa0UryokmGZhQQat2NU,3511
|
|
7
|
-
dara/core/auth/routes.py,sha256=
|
|
8
|
-
dara/core/auth/utils.py,sha256=
|
|
7
|
+
dara/core/auth/routes.py,sha256=k5y9G-mBDNM3sYX3rk1p1khZPKBD97rPdrs8PV2LSJs,7269
|
|
8
|
+
dara/core/auth/utils.py,sha256=KRLKTd3bGxChGREBEzPVarmwxIwb8SB0JazBtUTDTc4,7277
|
|
9
9
|
dara/core/base_definitions.py,sha256=r_W_qk6_VvvskbPEPjTF6xUh3o_lkNBWMFhN1Pic8Ks,14868
|
|
10
10
|
dara/core/cli.py,sha256=ycTB7QHCB-74OnKnjXqkXq-GBqyjBqo7u4v1kTgv2jE,7656
|
|
11
11
|
dara/core/configuration.py,sha256=8VynDds7a_uKXSpeNvjOUK3qfclg0WPniFEspL-6fi8,21153
|
|
@@ -54,13 +54,13 @@ dara/core/internal/port_utils.py,sha256=AQOUNiFNBYKVUwQ7i9UlY1NQ3sWb5xh5GkO6P1Bm
|
|
|
54
54
|
dara/core/internal/registries.py,sha256=9WDczIsNeSmzi6aViIq_b14lmmYGGkdsUGHpv0Sg9zo,3278
|
|
55
55
|
dara/core/internal/registry.py,sha256=ONCDusqaL0q59Py_r8-fFVN3vbkkDf5TXzNvbB9SrGQ,4305
|
|
56
56
|
dara/core/internal/registry_lookup.py,sha256=8snHu2wUUsngXjHyHh6eZqL_WwonTTQB6-WBX-R_WZg,2238
|
|
57
|
-
dara/core/internal/routing.py,sha256=
|
|
57
|
+
dara/core/internal/routing.py,sha256=Wdy11iWDeAf2PyHXZv5mPeJ_BEcoR0XftOl3M8vUhJU,22782
|
|
58
58
|
dara/core/internal/scheduler.py,sha256=z6OYwazBf3GYo8CzMC9IuGC2P96gI7JwxquT8GaoTMk,12944
|
|
59
59
|
dara/core/internal/settings.py,sha256=wAWxl-HXjq7PW3twe_CrR-UuMRw9VBudC3eRmevZAhM,3869
|
|
60
60
|
dara/core/internal/store.py,sha256=qVyU7JfC3zE2vYC2mfjmvECWMlFS9b-nMF1k-alg4Y8,7756
|
|
61
61
|
dara/core/internal/tasks.py,sha256=XK-GTIyge8RBYAfzNs3rmLYVNSKIarCzPdqRSVGg-4M,24728
|
|
62
62
|
dara/core/internal/utils.py,sha256=b1YYkn8qHl6-GY6cCm2MS1NXRS9j_rElYCKMZOxJgrY,8232
|
|
63
|
-
dara/core/internal/websocket.py,sha256=
|
|
63
|
+
dara/core/internal/websocket.py,sha256=Im4a5iqdsf8aqjkimleKOX99wE-kvHlHDyICw7bgcCk,20640
|
|
64
64
|
dara/core/jinja/index.html,sha256=iykqiRh3H_HkcjHJeeSRXRu45nZ2y1sZX5FLdPRhlQY,726
|
|
65
65
|
dara/core/jinja/index_autojs.html,sha256=MRF5J0vNfzZQm9kPEeLl23sbr08fVSRd_PAUD6Fkc_0,1253
|
|
66
66
|
dara/core/js_tooling/custom_js_scaffold/index.tsx,sha256=FEzSV5o5Nyzxw6eXvGLi7BkEBkXf3brV34_7ATLnY7o,68
|
|
@@ -81,7 +81,7 @@ dara/core/metrics/cache.py,sha256=ybofUhZO0TCHeyhB_AtldWk1QTmTKh7GucTXpOkeTFA,25
|
|
|
81
81
|
dara/core/metrics/runtime.py,sha256=YP-6Dz0GeI9_Yr7bUk_-OqShyFySGH_AKpDO126l6es,1833
|
|
82
82
|
dara/core/metrics/utils.py,sha256=rYlBinxFc7VehFT5cTNXLk8gC74UEj7ZGq6vLgIDpSg,2247
|
|
83
83
|
dara/core/persistence.py,sha256=TO94rPAN7jxZKVCC5YA4eE7GGDoNlCPe-BkkItV2VUE,10379
|
|
84
|
-
dara/core/umd/dara.core.umd.js,sha256=
|
|
84
|
+
dara/core/umd/dara.core.umd.js,sha256=NS7UoNAICvBgpZmZlKQzv9a2x5IhQO8vA_Jfq2HO73E,4877537
|
|
85
85
|
dara/core/umd/style.css,sha256=YQtQ4veiSktnyONl0CU1iU1kKfcQhreH4iASi1MP7Ak,4095007
|
|
86
86
|
dara/core/visual/__init__.py,sha256=QN0wbG9HPQ_vXh8BO8DnBXeYLIENVTNtRmYzZf1lx7c,577
|
|
87
87
|
dara/core/visual/components/__init__.py,sha256=O-Em_glGdZNO0LLl2RWmJSrQiXKxliXg_PuhVXGT81I,1811
|
|
@@ -105,8 +105,8 @@ dara/core/visual/themes/__init__.py,sha256=aM4mgoIYo2neBSw5FRzswsht7PUKjLthiHLmF
|
|
|
105
105
|
dara/core/visual/themes/dark.py,sha256=UQGDooOc8ric73eHs9E0ltYP4UCrwqQ3QxqN_fb4PwY,1942
|
|
106
106
|
dara/core/visual/themes/definitions.py,sha256=m3oN0txs65MZepqjj7AKMMxybf2aq5fTjcTwJmHqEbk,2744
|
|
107
107
|
dara/core/visual/themes/light.py,sha256=-Tviq8oEwGbdFULoDOqPuHO0UpAZGsBy8qFi0kAGolQ,1944
|
|
108
|
-
dara_core-1.14.
|
|
109
|
-
dara_core-1.14.
|
|
110
|
-
dara_core-1.14.
|
|
111
|
-
dara_core-1.14.
|
|
112
|
-
dara_core-1.14.
|
|
108
|
+
dara_core-1.14.0a3.dist-info/LICENSE,sha256=r9u1w2RvpLMV6YjuXHIKXRBKzia3fx_roPwboGcLqCc,10944
|
|
109
|
+
dara_core-1.14.0a3.dist-info/METADATA,sha256=InpFqVDrz4d-lYG2gFDs175nDCJB3923gfqcEiLRyc4,7457
|
|
110
|
+
dara_core-1.14.0a3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
111
|
+
dara_core-1.14.0a3.dist-info/entry_points.txt,sha256=H__D5sNIGuPIhVam0DChNL-To5k8Y7nY7TAFz9Mz6cc,139
|
|
112
|
+
dara_core-1.14.0a3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|