@darajs/core 0.4.8
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/LICENSE +201 -0
- package/README.md +101 -0
- package/dist/actions/download-variable.d.ts +8 -0
- package/dist/actions/download-variable.d.ts.map +1 -0
- package/dist/actions/download-variable.js +140 -0
- package/dist/actions/download-variable.js.map +1 -0
- package/dist/actions/index.d.ts +7 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +7 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/navigate-to.d.ts +8 -0
- package/dist/actions/navigate-to.d.ts.map +1 -0
- package/dist/actions/navigate-to.js +37 -0
- package/dist/actions/navigate-to.js.map +1 -0
- package/dist/actions/notify.d.ts +4 -0
- package/dist/actions/notify.d.ts.map +1 -0
- package/dist/actions/notify.js +11 -0
- package/dist/actions/notify.js.map +1 -0
- package/dist/actions/reset-variables.d.ts +8 -0
- package/dist/actions/reset-variables.d.ts.map +1 -0
- package/dist/actions/reset-variables.js +37 -0
- package/dist/actions/reset-variables.js.map +1 -0
- package/dist/actions/trigger-variable.d.ts +8 -0
- package/dist/actions/trigger-variable.d.ts.map +1 -0
- package/dist/actions/trigger-variable.js +14 -0
- package/dist/actions/trigger-variable.js.map +1 -0
- package/dist/actions/update-variable.d.ts +15 -0
- package/dist/actions/update-variable.d.ts.map +1 -0
- package/dist/actions/update-variable.js +56 -0
- package/dist/actions/update-variable.js.map +1 -0
- package/dist/api/core.d.ts +35 -0
- package/dist/api/core.d.ts.map +1 -0
- package/dist/api/core.js +112 -0
- package/dist/api/core.js.map +1 -0
- package/dist/api/http.d.ts +29 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +126 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +5 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/websocket.d.ts +222 -0
- package/dist/api/websocket.d.ts.map +1 -0
- package/dist/api/websocket.js +353 -0
- package/dist/api/websocket.js.map +1 -0
- package/dist/assets/causalens-dark.svg +29 -0
- package/dist/assets/causalens-light.svg +29 -0
- package/dist/assets/dara-dark.svg +20 -0
- package/dist/assets/dara-light.svg +15 -0
- package/dist/assets/fonts/Manrope-VariableFont_wght.ttf +0 -0
- package/dist/auth/auth-wrapper.d.ts +15 -0
- package/dist/auth/auth-wrapper.d.ts.map +1 -0
- package/dist/auth/auth-wrapper.js +72 -0
- package/dist/auth/auth-wrapper.js.map +1 -0
- package/dist/auth/auth.d.ts +61 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/auth.js +163 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/auth/basic/basic-auth-login.d.ts +6 -0
- package/dist/auth/basic/basic-auth-login.d.ts.map +1 -0
- package/dist/auth/basic/basic-auth-login.js +171 -0
- package/dist/auth/basic/basic-auth-login.js.map +1 -0
- package/dist/auth/basic/basic-auth-logout.d.ts +6 -0
- package/dist/auth/basic/basic-auth-logout.d.ts.map +1 -0
- package/dist/auth/basic/basic-auth-logout.js +18 -0
- package/dist/auth/basic/basic-auth-logout.js.map +1 -0
- package/dist/auth/default/default-auth-login.d.ts +6 -0
- package/dist/auth/default/default-auth-login.d.ts.map +1 -0
- package/dist/auth/default/default-auth-login.js +59 -0
- package/dist/auth/default/default-auth-login.js.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/use-session-token.d.ts +19 -0
- package/dist/auth/use-session-token.d.ts.map +1 -0
- package/dist/auth/use-session-token.js +30 -0
- package/dist/auth/use-session-token.js.map +1 -0
- package/dist/components/fallback/default.d.ts +5 -0
- package/dist/components/fallback/default.d.ts.map +1 -0
- package/dist/components/fallback/default.js +10 -0
- package/dist/components/fallback/default.js.map +1 -0
- package/dist/components/fallback/dots.d.ts +7 -0
- package/dist/components/fallback/dots.d.ts.map +1 -0
- package/dist/components/fallback/dots.js +78 -0
- package/dist/components/fallback/dots.js.map +1 -0
- package/dist/components/fallback/row.d.ts +5 -0
- package/dist/components/fallback/row.d.ts.map +1 -0
- package/dist/components/fallback/row.js +14 -0
- package/dist/components/fallback/row.js.map +1 -0
- package/dist/components/for/for.d.ts +35 -0
- package/dist/components/for/for.d.ts.map +1 -0
- package/dist/components/for/for.js +44 -0
- package/dist/components/for/for.js.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/menu/menu.d.ts +14 -0
- package/dist/components/menu/menu.d.ts.map +1 -0
- package/dist/components/menu/menu.js +58 -0
- package/dist/components/menu/menu.js.map +1 -0
- package/dist/components/progress-tracker/progress-tracker.d.ts +18 -0
- package/dist/components/progress-tracker/progress-tracker.d.ts.map +1 -0
- package/dist/components/progress-tracker/progress-tracker.js +204 -0
- package/dist/components/progress-tracker/progress-tracker.js.map +1 -0
- package/dist/components/router-content/router-content.d.ts +14 -0
- package/dist/components/router-content/router-content.d.ts.map +1 -0
- package/dist/components/router-content/router-content.js +17 -0
- package/dist/components/router-content/router-content.js.map +1 -0
- package/dist/components/side-bar-frame/side-bar-frame.d.ts +21 -0
- package/dist/components/side-bar-frame/side-bar-frame.d.ts.map +1 -0
- package/dist/components/side-bar-frame/side-bar-frame.js +87 -0
- package/dist/components/side-bar-frame/side-bar-frame.js.map +1 -0
- package/dist/components/top-bar-frame/top-bar-frame.d.ts +16 -0
- package/dist/components/top-bar-frame/top-bar-frame.d.ts.map +1 -0
- package/dist/components/top-bar-frame/top-bar-frame.js +89 -0
- package/dist/components/top-bar-frame/top-bar-frame.js.map +1 -0
- package/dist/dara_core-0.4.8-py3-none-any.whl +0 -0
- package/dist/devtools/backend-errors/backend-errors-ctx.d.ts +17 -0
- package/dist/devtools/backend-errors/backend-errors-ctx.d.ts.map +1 -0
- package/dist/devtools/backend-errors/backend-errors-ctx.js +37 -0
- package/dist/devtools/backend-errors/backend-errors-ctx.js.map +1 -0
- package/dist/devtools/backend-errors/backend-errors.d.ts +6 -0
- package/dist/devtools/backend-errors/backend-errors.d.ts.map +1 -0
- package/dist/devtools/backend-errors/backend-errors.js +57 -0
- package/dist/devtools/backend-errors/backend-errors.js.map +1 -0
- package/dist/devtools/backend-errors/error-display.d.ts +22 -0
- package/dist/devtools/backend-errors/error-display.d.ts.map +1 -0
- package/dist/devtools/backend-errors/error-display.js +101 -0
- package/dist/devtools/backend-errors/error-display.js.map +1 -0
- package/dist/devtools/backend-errors/index.d.ts +3 -0
- package/dist/devtools/backend-errors/index.d.ts.map +1 -0
- package/dist/devtools/backend-errors/index.js +3 -0
- package/dist/devtools/backend-errors/index.js.map +1 -0
- package/dist/devtools/devtools-content.d.ts +12 -0
- package/dist/devtools/devtools-content.d.ts.map +1 -0
- package/dist/devtools/devtools-content.js +73 -0
- package/dist/devtools/devtools-content.js.map +1 -0
- package/dist/devtools/devtools-context.d.ts +7 -0
- package/dist/devtools/devtools-context.d.ts.map +1 -0
- package/dist/devtools/devtools-context.js +9 -0
- package/dist/devtools/devtools-context.js.map +1 -0
- package/dist/devtools/devtools-wrapper.d.ts +8 -0
- package/dist/devtools/devtools-wrapper.d.ts.map +1 -0
- package/dist/devtools/devtools-wrapper.js +64 -0
- package/dist/devtools/devtools-wrapper.js.map +1 -0
- package/dist/devtools/devtools.d.ts +5 -0
- package/dist/devtools/devtools.d.ts.map +1 -0
- package/dist/devtools/devtools.js +10 -0
- package/dist/devtools/devtools.js.map +1 -0
- package/dist/devtools/floating-button.d.ts +23 -0
- package/dist/devtools/floating-button.d.ts.map +1 -0
- package/dist/devtools/floating-button.js +94 -0
- package/dist/devtools/floating-button.js.map +1 -0
- package/dist/devtools/index.d.ts +2 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools/index.js +2 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/devtools/resizer.d.ts +18 -0
- package/dist/devtools/resizer.d.ts.map +1 -0
- package/dist/devtools/resizer.js +49 -0
- package/dist/devtools/resizer.js.map +1 -0
- package/dist/devtools/use-move.d.ts +21 -0
- package/dist/devtools/use-move.d.ts.map +1 -0
- package/dist/devtools/use-move.js +56 -0
- package/dist/devtools/use-move.js.map +1 -0
- package/dist/index.css +95 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/jest-setup.d.ts +2 -0
- package/dist/jest-setup.d.ts.map +1 -0
- package/dist/jest-setup.js +18 -0
- package/dist/jest-setup.js.map +1 -0
- package/dist/pages/error-page.d.ts +3 -0
- package/dist/pages/error-page.d.ts.map +1 -0
- package/dist/pages/error-page.js +32 -0
- package/dist/pages/error-page.js.map +1 -0
- package/dist/pages/sso-callback-page.d.ts +6 -0
- package/dist/pages/sso-callback-page.d.ts.map +1 -0
- package/dist/pages/sso-callback-page.js +8 -0
- package/dist/pages/sso-callback-page.js.map +1 -0
- package/dist/run.d.ts +22 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +40 -0
- package/dist/run.js.map +1 -0
- package/dist/shared/center/center.d.ts +5 -0
- package/dist/shared/center/center.d.ts.map +1 -0
- package/dist/shared/center/center.js +15 -0
- package/dist/shared/center/center.js.map +1 -0
- package/dist/shared/context/direction-context.d.ts +6 -0
- package/dist/shared/context/direction-context.d.ts.map +1 -0
- package/dist/shared/context/direction-context.js +4 -0
- package/dist/shared/context/direction-context.js.map +1 -0
- package/dist/shared/context/display-context.d.ts +13 -0
- package/dist/shared/context/display-context.d.ts.map +1 -0
- package/dist/shared/context/display-context.js +4 -0
- package/dist/shared/context/display-context.js.map +1 -0
- package/dist/shared/context/fallback-context.d.ts +11 -0
- package/dist/shared/context/fallback-context.d.ts.map +1 -0
- package/dist/shared/context/fallback-context.js +4 -0
- package/dist/shared/context/fallback-context.js.map +1 -0
- package/dist/shared/context/global-task-context.d.ts +40 -0
- package/dist/shared/context/global-task-context.d.ts.map +1 -0
- package/dist/shared/context/global-task-context.js +81 -0
- package/dist/shared/context/global-task-context.js.map +1 -0
- package/dist/shared/context/importers-context.d.ts +6 -0
- package/dist/shared/context/importers-context.d.ts.map +1 -0
- package/dist/shared/context/importers-context.js +4 -0
- package/dist/shared/context/importers-context.js.map +1 -0
- package/dist/shared/context/index.d.ts +10 -0
- package/dist/shared/context/index.d.ts.map +1 -0
- package/dist/shared/context/index.js +10 -0
- package/dist/shared/context/index.js.map +1 -0
- package/dist/shared/context/registries-context.d.ts +20 -0
- package/dist/shared/context/registries-context.d.ts.map +1 -0
- package/dist/shared/context/registries-context.js +8 -0
- package/dist/shared/context/registries-context.js.map +1 -0
- package/dist/shared/context/request-extras-context.d.ts +33 -0
- package/dist/shared/context/request-extras-context.d.ts.map +1 -0
- package/dist/shared/context/request-extras-context.js +55 -0
- package/dist/shared/context/request-extras-context.js.map +1 -0
- package/dist/shared/context/variable-context.d.ts +10 -0
- package/dist/shared/context/variable-context.d.ts.map +1 -0
- package/dist/shared/context/variable-context.js +4 -0
- package/dist/shared/context/variable-context.js.map +1 -0
- package/dist/shared/context/websocket-context.d.ts +7 -0
- package/dist/shared/context/websocket-context.d.ts.map +1 -0
- package/dist/shared/context/websocket-context.js +4 -0
- package/dist/shared/context/websocket-context.js.map +1 -0
- package/dist/shared/dynamic-component/clean-props.d.ts +6 -0
- package/dist/shared/dynamic-component/clean-props.d.ts.map +1 -0
- package/dist/shared/dynamic-component/clean-props.js +13 -0
- package/dist/shared/dynamic-component/clean-props.js.map +1 -0
- package/dist/shared/dynamic-component/dynamic-component.d.ts +16 -0
- package/dist/shared/dynamic-component/dynamic-component.d.ts.map +1 -0
- package/dist/shared/dynamic-component/dynamic-component.js +252 -0
- package/dist/shared/dynamic-component/dynamic-component.js.map +1 -0
- package/dist/shared/error-handling/error-display.d.ts +8 -0
- package/dist/shared/error-handling/error-display.d.ts.map +1 -0
- package/dist/shared/error-handling/error-display.js +94 -0
- package/dist/shared/error-handling/error-display.js.map +1 -0
- package/dist/shared/error-handling/index.d.ts +3 -0
- package/dist/shared/error-handling/index.d.ts.map +1 -0
- package/dist/shared/error-handling/index.js +3 -0
- package/dist/shared/error-handling/index.js.map +1 -0
- package/dist/shared/error-handling/types.d.ts +11 -0
- package/dist/shared/error-handling/types.d.ts.map +1 -0
- package/dist/shared/error-handling/types.js +9 -0
- package/dist/shared/error-handling/types.js.map +1 -0
- package/dist/shared/event-bus/event-bus.d.ts +27 -0
- package/dist/shared/event-bus/event-bus.d.ts.map +1 -0
- package/dist/shared/event-bus/event-bus.js +58 -0
- package/dist/shared/event-bus/event-bus.js.map +1 -0
- package/dist/shared/global-state-store.d.ts +54 -0
- package/dist/shared/global-state-store.d.ts.map +1 -0
- package/dist/shared/global-state-store.js +168 -0
- package/dist/shared/global-state-store.js.map +1 -0
- package/dist/shared/index.d.ts +12 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +10 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/interactivity/data-variable.d.ts +78 -0
- package/dist/shared/interactivity/data-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/data-variable.js +218 -0
- package/dist/shared/interactivity/data-variable.js.map +1 -0
- package/dist/shared/interactivity/derived-variable.d.ts +160 -0
- package/dist/shared/interactivity/derived-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/derived-variable.js +446 -0
- package/dist/shared/interactivity/derived-variable.js.map +1 -0
- package/dist/shared/interactivity/filtering.d.ts +9 -0
- package/dist/shared/interactivity/filtering.d.ts.map +1 -0
- package/dist/shared/interactivity/filtering.js +20 -0
- package/dist/shared/interactivity/filtering.js.map +1 -0
- package/dist/shared/interactivity/index.d.ts +10 -0
- package/dist/shared/interactivity/index.d.ts.map +1 -0
- package/dist/shared/interactivity/index.js +9 -0
- package/dist/shared/interactivity/index.js.map +1 -0
- package/dist/shared/interactivity/internal.d.ts +9 -0
- package/dist/shared/interactivity/internal.d.ts.map +1 -0
- package/dist/shared/interactivity/internal.js +11 -0
- package/dist/shared/interactivity/internal.js.map +1 -0
- package/dist/shared/interactivity/nested.d.ts +16 -0
- package/dist/shared/interactivity/nested.d.ts.map +1 -0
- package/dist/shared/interactivity/nested.js +54 -0
- package/dist/shared/interactivity/nested.js.map +1 -0
- package/dist/shared/interactivity/persistence.d.ts +43 -0
- package/dist/shared/interactivity/persistence.d.ts.map +1 -0
- package/dist/shared/interactivity/persistence.js +215 -0
- package/dist/shared/interactivity/persistence.js.map +1 -0
- package/dist/shared/interactivity/plain-variable.d.ts +17 -0
- package/dist/shared/interactivity/plain-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/plain-variable.js +222 -0
- package/dist/shared/interactivity/plain-variable.js.map +1 -0
- package/dist/shared/interactivity/resolve-value.d.ts +13 -0
- package/dist/shared/interactivity/resolve-value.d.ts.map +1 -0
- package/dist/shared/interactivity/resolve-value.js +36 -0
- package/dist/shared/interactivity/resolve-value.js.map +1 -0
- package/dist/shared/interactivity/resolve-variable.d.ts +18 -0
- package/dist/shared/interactivity/resolve-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/resolve-variable.js +46 -0
- package/dist/shared/interactivity/resolve-variable.js.map +1 -0
- package/dist/shared/interactivity/store.d.ts +76 -0
- package/dist/shared/interactivity/store.d.ts.map +1 -0
- package/dist/shared/interactivity/store.js +99 -0
- package/dist/shared/interactivity/store.js.map +1 -0
- package/dist/shared/interactivity/triggers.d.ts +31 -0
- package/dist/shared/interactivity/triggers.d.ts.map +1 -0
- package/dist/shared/interactivity/triggers.js +105 -0
- package/dist/shared/interactivity/triggers.js.map +1 -0
- package/dist/shared/interactivity/url-variable.d.ts +12 -0
- package/dist/shared/interactivity/url-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/url-variable.js +27 -0
- package/dist/shared/interactivity/url-variable.js.map +1 -0
- package/dist/shared/interactivity/use-any-variable.d.ts +8 -0
- package/dist/shared/interactivity/use-any-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/use-any-variable.js +39 -0
- package/dist/shared/interactivity/use-any-variable.js.map +1 -0
- package/dist/shared/interactivity/use-data-variable.d.ts +18 -0
- package/dist/shared/interactivity/use-data-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/use-data-variable.js +58 -0
- package/dist/shared/interactivity/use-data-variable.js.map +1 -0
- package/dist/shared/interactivity/use-refresh-selector.d.ts +5 -0
- package/dist/shared/interactivity/use-refresh-selector.d.ts.map +1 -0
- package/dist/shared/interactivity/use-refresh-selector.js +20 -0
- package/dist/shared/interactivity/use-refresh-selector.js.map +1 -0
- package/dist/shared/interactivity/use-server-component.d.ts +24 -0
- package/dist/shared/interactivity/use-server-component.d.ts.map +1 -0
- package/dist/shared/interactivity/use-server-component.js +256 -0
- package/dist/shared/interactivity/use-server-component.js.map +1 -0
- package/dist/shared/interactivity/use-variable-state.d.ts +9 -0
- package/dist/shared/interactivity/use-variable-state.d.ts.map +1 -0
- package/dist/shared/interactivity/use-variable-state.js +26 -0
- package/dist/shared/interactivity/use-variable-state.js.map +1 -0
- package/dist/shared/interactivity/use-variable-value.d.ts +33 -0
- package/dist/shared/interactivity/use-variable-value.d.ts.map +1 -0
- package/dist/shared/interactivity/use-variable-value.js +94 -0
- package/dist/shared/interactivity/use-variable-value.js.map +1 -0
- package/dist/shared/interactivity/use-variable.d.ts +12 -0
- package/dist/shared/interactivity/use-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/use-variable.js +84 -0
- package/dist/shared/interactivity/use-variable.js.map +1 -0
- package/dist/shared/private-route/private-route.d.ts +19 -0
- package/dist/shared/private-route/private-route.d.ts.map +1 -0
- package/dist/shared/private-route/private-route.js +35 -0
- package/dist/shared/private-route/private-route.js.map +1 -0
- package/dist/shared/template-root/dynamic-context.d.ts +9 -0
- package/dist/shared/template-root/dynamic-context.d.ts.map +1 -0
- package/dist/shared/template-root/dynamic-context.js +29 -0
- package/dist/shared/template-root/dynamic-context.js.map +1 -0
- package/dist/shared/template-root/template-root.d.ts +12 -0
- package/dist/shared/template-root/template-root.d.ts.map +1 -0
- package/dist/shared/template-root/template-root.js +94 -0
- package/dist/shared/template-root/template-root.js.map +1 -0
- package/dist/shared/utils/clean-session-cache.d.ts +9 -0
- package/dist/shared/utils/clean-session-cache.d.ts.map +1 -0
- package/dist/shared/utils/clean-session-cache.js +19 -0
- package/dist/shared/utils/clean-session-cache.js.map +1 -0
- package/dist/shared/utils/embed.d.ts +22 -0
- package/dist/shared/utils/embed.d.ts.map +1 -0
- package/dist/shared/utils/embed.js +43 -0
- package/dist/shared/utils/embed.js.map +1 -0
- package/dist/shared/utils/get-icon.d.ts +9 -0
- package/dist/shared/utils/get-icon.d.ts.map +1 -0
- package/dist/shared/utils/get-icon.js +30 -0
- package/dist/shared/utils/get-icon.js.map +1 -0
- package/dist/shared/utils/hashing.d.ts +14 -0
- package/dist/shared/utils/hashing.d.ts.map +1 -0
- package/dist/shared/utils/hashing.js +26 -0
- package/dist/shared/utils/hashing.js.map +1 -0
- package/dist/shared/utils/index.d.ts +19 -0
- package/dist/shared/utils/index.d.ts.map +1 -0
- package/dist/shared/utils/index.js +17 -0
- package/dist/shared/utils/index.js.map +1 -0
- package/dist/shared/utils/inject-css.d.ts +12 -0
- package/dist/shared/utils/inject-css.d.ts.map +1 -0
- package/dist/shared/utils/inject-css.js +25 -0
- package/dist/shared/utils/inject-css.js.map +1 -0
- package/dist/shared/utils/is-js-component.d.ts +9 -0
- package/dist/shared/utils/is-js-component.d.ts.map +1 -0
- package/dist/shared/utils/is-js-component.js +11 -0
- package/dist/shared/utils/is-js-component.js.map +1 -0
- package/dist/shared/utils/normalization.d.ts +19 -0
- package/dist/shared/utils/normalization.d.ts.map +1 -0
- package/dist/shared/utils/normalization.js +121 -0
- package/dist/shared/utils/normalization.js.map +1 -0
- package/dist/shared/utils/resolve-theme.d.ts +9 -0
- package/dist/shared/utils/resolve-theme.d.ts.map +1 -0
- package/dist/shared/utils/resolve-theme.js +28 -0
- package/dist/shared/utils/resolve-theme.js.map +1 -0
- package/dist/shared/utils/templating.d.ts +24 -0
- package/dist/shared/utils/templating.d.ts.map +1 -0
- package/dist/shared/utils/templating.js +67 -0
- package/dist/shared/utils/templating.js.map +1 -0
- package/dist/shared/utils/use-action-registry.d.ts +11 -0
- package/dist/shared/utils/use-action-registry.d.ts.map +1 -0
- package/dist/shared/utils/use-action-registry.js +18 -0
- package/dist/shared/utils/use-action-registry.js.map +1 -0
- package/dist/shared/utils/use-action.d.ts +34 -0
- package/dist/shared/utils/use-action.d.ts.map +1 -0
- package/dist/shared/utils/use-action.js +314 -0
- package/dist/shared/utils/use-action.js.map +1 -0
- package/dist/shared/utils/use-component-registry.d.ts +11 -0
- package/dist/shared/utils/use-component-registry.d.ts.map +1 -0
- package/dist/shared/utils/use-component-registry.js +57 -0
- package/dist/shared/utils/use-component-registry.js.map +1 -0
- package/dist/shared/utils/use-component-styles.d.ts +24 -0
- package/dist/shared/utils/use-component-styles.d.ts.map +1 -0
- package/dist/shared/utils/use-component-styles.js +69 -0
- package/dist/shared/utils/use-component-styles.js.map +1 -0
- package/dist/shared/utils/use-defer-loadable.d.ts +8 -0
- package/dist/shared/utils/use-defer-loadable.d.ts.map +1 -0
- package/dist/shared/utils/use-defer-loadable.js +44 -0
- package/dist/shared/utils/use-defer-loadable.js.map +1 -0
- package/dist/shared/utils/use-interval.d.ts +9 -0
- package/dist/shared/utils/use-interval.d.ts.map +1 -0
- package/dist/shared/utils/use-interval.js +19 -0
- package/dist/shared/utils/use-interval.js.map +1 -0
- package/dist/shared/utils/use-previous.d.ts +10 -0
- package/dist/shared/utils/use-previous.d.ts.map +1 -0
- package/dist/shared/utils/use-previous.js +17 -0
- package/dist/shared/utils/use-previous.js.map +1 -0
- package/dist/shared/utils/use-url-sync.d.ts +20 -0
- package/dist/shared/utils/use-url-sync.d.ts.map +1 -0
- package/dist/shared/utils/use-url-sync.js +68 -0
- package/dist/shared/utils/use-url-sync.js.map +1 -0
- package/dist/shared/utils/use-window-title.d.ts +3 -0
- package/dist/shared/utils/use-window-title.d.ts.map +1 -0
- package/dist/shared/utils/use-window-title.js +14 -0
- package/dist/shared/utils/use-window-title.js.map +1 -0
- package/dist/shared/variable-state-provider/variable-state-provider.d.ts +10 -0
- package/dist/shared/variable-state-provider/variable-state-provider.d.ts.map +1 -0
- package/dist/shared/variable-state-provider/variable-state-provider.js +29 -0
- package/dist/shared/variable-state-provider/variable-state-provider.js.map +1 -0
- package/dist/shared/wrapper/wrapper.d.ts +7 -0
- package/dist/shared/wrapper/wrapper.d.ts.map +1 -0
- package/dist/shared/wrapper/wrapper.js +14 -0
- package/dist/shared/wrapper/wrapper.js.map +1 -0
- package/dist/types/auth.d.ts +15 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +6 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/core.d.ts +440 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +22 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utils.d.ts +56 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +93 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/umd/dara.core.umd.js +86508 -0
- package/dist/umd/style.css +848 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +20 -0
- package/dist/utils.js.map +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
3
|
+
import { useContext, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import styled from '@darajs/styled-components';
|
|
5
|
+
import { ProgressBar } from '@darajs/ui-components';
|
|
6
|
+
import { useTaskContext } from '../../shared/context/global-task-context';
|
|
7
|
+
import websocketCtx from '../../shared/context/websocket-context';
|
|
8
|
+
const POLLING_INTERVAL = 100;
|
|
9
|
+
const FAKE_PROGRESS_INTERVAL = 100;
|
|
10
|
+
const ESTIMATE_RATIO = 0.85;
|
|
11
|
+
/**
|
|
12
|
+
* Progress estimator function - roughly `y = 1 - exp(x)`.
|
|
13
|
+
*
|
|
14
|
+
* @param time time in milliseconds
|
|
15
|
+
* @param timeConstant seconds to reach 63%, then 86%, then 95%, then 98%
|
|
16
|
+
*/
|
|
17
|
+
function estimateProgress(time, timeConstant = 10) {
|
|
18
|
+
// This reaches in 63% in 10s, 86% in 20s
|
|
19
|
+
return 1 - Math.exp((-1 * time) / (FAKE_PROGRESS_INTERVAL * 10 * timeConstant));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build a generator which will return fake progress
|
|
23
|
+
*
|
|
24
|
+
* @param progressStart starting point
|
|
25
|
+
* @param progressEnd ending point
|
|
26
|
+
* @param estimatedTime estimated time the faking should take; if specified, the fake progress
|
|
27
|
+
* will use 'real'/estimated values for 60% of the estimated time before changing to a fake algo
|
|
28
|
+
*/
|
|
29
|
+
function fakeProgressGenerator(progressStart, progressEnd, estimatedTime) {
|
|
30
|
+
const difference = progressEnd - progressStart;
|
|
31
|
+
const estimatedProgressUpdates = [];
|
|
32
|
+
let timeConstant = 10;
|
|
33
|
+
// If estimated time is set, fake progress will start with estimated updates
|
|
34
|
+
if (estimatedTime && estimatedTime !== 0) {
|
|
35
|
+
const estimatedDifference = ESTIMATE_RATIO * difference;
|
|
36
|
+
const estimatedProgressTime = ESTIMATE_RATIO * estimatedTime;
|
|
37
|
+
const numberOfUpdates = estimatedProgressTime / FAKE_PROGRESS_INTERVAL;
|
|
38
|
+
const estimatedProgressChunk = estimatedDifference / numberOfUpdates;
|
|
39
|
+
let t = 0;
|
|
40
|
+
let p = progressStart;
|
|
41
|
+
// Compute list of 'estimated' (estimated) progress updates
|
|
42
|
+
while (t < estimatedProgressTime) {
|
|
43
|
+
p += estimatedProgressChunk;
|
|
44
|
+
t += FAKE_PROGRESS_INTERVAL;
|
|
45
|
+
estimatedProgressUpdates.push(p);
|
|
46
|
+
}
|
|
47
|
+
// Set time constant (time to reach 63% of the target) to the remaining chunk of estimated time
|
|
48
|
+
timeConstant = (1 - ESTIMATE_RATIO) * (estimatedTime / 1000);
|
|
49
|
+
}
|
|
50
|
+
// Build internal generator which returns estimated updates, then fake updates
|
|
51
|
+
function* getNextUpdate() {
|
|
52
|
+
let startFrom = progressStart;
|
|
53
|
+
// First we return estimated updates
|
|
54
|
+
while (estimatedProgressUpdates.length > 0) {
|
|
55
|
+
const update = estimatedProgressUpdates.shift();
|
|
56
|
+
startFrom = update;
|
|
57
|
+
yield update;
|
|
58
|
+
}
|
|
59
|
+
let i = 0;
|
|
60
|
+
// Then keep returning fake updates based on the estimate function
|
|
61
|
+
while (true) {
|
|
62
|
+
// Estimated is in range 0-1
|
|
63
|
+
const estimated = estimateProgress(FAKE_PROGRESS_INTERVAL * i, timeConstant);
|
|
64
|
+
// Rescale estimated to range of startFrom->progressEnd
|
|
65
|
+
yield estimated * (progressEnd - startFrom) + startFrom;
|
|
66
|
+
i++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return getNextUpdate();
|
|
70
|
+
}
|
|
71
|
+
const ProgressWrapper = styled.div `
|
|
72
|
+
display: flex;
|
|
73
|
+
flex-direction: column;
|
|
74
|
+
gap: 0.5rem;
|
|
75
|
+
padding: 1rem;
|
|
76
|
+
`;
|
|
77
|
+
const ProgressHeader = styled.h4 `
|
|
78
|
+
font-size: 1.2rem;
|
|
79
|
+
`;
|
|
80
|
+
const ProgressMessage = styled.span `
|
|
81
|
+
font-size: ${(props) => props.theme.font.size};
|
|
82
|
+
`;
|
|
83
|
+
/**
|
|
84
|
+
* Retrieve a list of running tasks if there are any
|
|
85
|
+
*
|
|
86
|
+
* @param tasksContext
|
|
87
|
+
* @param variablesRef
|
|
88
|
+
*/
|
|
89
|
+
function findRunningTasks(tasksContext, variablesRef) {
|
|
90
|
+
var _a;
|
|
91
|
+
// check if there are variables the component is subscribed to, and there are tasks running
|
|
92
|
+
if (!(((_a = variablesRef === null || variablesRef === void 0 ? void 0 : variablesRef.current) === null || _a === void 0 ? void 0 : _a.size) > 0 && tasksContext.hasRunningTasks())) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
return tasksContext.getVariableTasks(...variablesRef.current.values());
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* ProgressTracker component can be used as a placeholder to replace the standard loading spinner.
|
|
99
|
+
* If a task is running, data is captured from the task function and a ProgressBar with live updates in shown.
|
|
100
|
+
*/
|
|
101
|
+
function ProgressTracker(props) {
|
|
102
|
+
const taskContext = useTaskContext();
|
|
103
|
+
const { client: wsClient } = useContext(websocketCtx);
|
|
104
|
+
const [latestProgressUpdate, setLatestProgressUpdate] = useState(null); // latest progress message
|
|
105
|
+
const [progress, setProgress] = useState(null);
|
|
106
|
+
const fakeInterval = useRef(null);
|
|
107
|
+
const [subscribedTaskIds, setSubscribedTaskIds] = useState([]);
|
|
108
|
+
const [restartTrigger, setRestartTrigger] = useState(0); // used to trigger a restart of polling for a running task
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
let progressSubscription = null;
|
|
111
|
+
// Start polling and looking for running tasks
|
|
112
|
+
const timer = setInterval(() => {
|
|
113
|
+
const taskIds = findRunningTasks(taskContext, props.variablesRef);
|
|
114
|
+
// Once tasks are found, subscribe to their progress updates and stop polling
|
|
115
|
+
// This handles a component having multiple tasks running - it's a limitation that only one of them
|
|
116
|
+
// can be tracked; this is only an issue if a component calls useVariable for multiple inputs
|
|
117
|
+
if (taskIds.length > 0) {
|
|
118
|
+
setSubscribedTaskIds(taskIds);
|
|
119
|
+
progressSubscription = wsClient
|
|
120
|
+
.progressUpdates$(...taskIds)
|
|
121
|
+
.subscribe((notif) => setLatestProgressUpdate(notif.message));
|
|
122
|
+
clearInterval(timer);
|
|
123
|
+
}
|
|
124
|
+
}, POLLING_INTERVAL);
|
|
125
|
+
return () => {
|
|
126
|
+
// Clean up intervals and subscriptions
|
|
127
|
+
clearInterval(timer);
|
|
128
|
+
if (fakeInterval.current) {
|
|
129
|
+
clearInterval(fakeInterval.current);
|
|
130
|
+
}
|
|
131
|
+
progressSubscription === null || progressSubscription === void 0 ? void 0 : progressSubscription.unsubscribe();
|
|
132
|
+
};
|
|
133
|
+
}, [restartTrigger]);
|
|
134
|
+
/**
|
|
135
|
+
* Handle cancellations of subscribed task ids.
|
|
136
|
+
*/
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
let subscription = null;
|
|
139
|
+
if (subscribedTaskIds.length > 0) {
|
|
140
|
+
subscription = wsClient.taskStatusUpdates$(...subscribedTaskIds).subscribe((newStatus) => {
|
|
141
|
+
if (newStatus === 'CANCELED') {
|
|
142
|
+
// Reset component
|
|
143
|
+
if (fakeInterval.current) {
|
|
144
|
+
clearInterval(fakeInterval.current);
|
|
145
|
+
}
|
|
146
|
+
setLatestProgressUpdate(null);
|
|
147
|
+
setSubscribedTaskIds([]);
|
|
148
|
+
setProgress(null);
|
|
149
|
+
// Restart polling
|
|
150
|
+
setRestartTrigger((v) => v + 1);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
return () => {
|
|
155
|
+
subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();
|
|
156
|
+
};
|
|
157
|
+
}, [subscribedTaskIds]);
|
|
158
|
+
/**
|
|
159
|
+
* Handle progress updates.
|
|
160
|
+
* This is in a chained effect rather than in the subscription handler since it needs
|
|
161
|
+
* access to the latest state.
|
|
162
|
+
*/
|
|
163
|
+
useEffect(() => {
|
|
164
|
+
var _a, _b;
|
|
165
|
+
if (!latestProgressUpdate) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// Clear faking process interval if its set
|
|
169
|
+
if (fakeInterval.current) {
|
|
170
|
+
clearInterval(fakeInterval.current);
|
|
171
|
+
}
|
|
172
|
+
// whether we received a message to start fake mode
|
|
173
|
+
const shouldStartFakeProgress = latestProgressUpdate.message.startsWith('FAKE_PROGRESS__');
|
|
174
|
+
if (!shouldStartFakeProgress) {
|
|
175
|
+
// If not, just update progress
|
|
176
|
+
setProgress({
|
|
177
|
+
message: latestProgressUpdate.message,
|
|
178
|
+
progress: latestProgressUpdate.progress,
|
|
179
|
+
});
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// Start fake mode and update message to the sent message
|
|
183
|
+
const [, estimatedTime, message] = latestProgressUpdate.message.split('__');
|
|
184
|
+
setProgress({
|
|
185
|
+
message,
|
|
186
|
+
progress: (_a = progress === null || progress === void 0 ? void 0 : progress.progress) !== null && _a !== void 0 ? _a : 0,
|
|
187
|
+
});
|
|
188
|
+
const progressGenerator = fakeProgressGenerator((_b = progress === null || progress === void 0 ? void 0 : progress.progress) !== null && _b !== void 0 ? _b : 0, latestProgressUpdate.progress, parseFloat(estimatedTime));
|
|
189
|
+
fakeInterval.current = setInterval(() => {
|
|
190
|
+
const nextValue = progressGenerator.next().value;
|
|
191
|
+
setProgress({
|
|
192
|
+
message,
|
|
193
|
+
progress: nextValue,
|
|
194
|
+
});
|
|
195
|
+
}, FAKE_PROGRESS_INTERVAL);
|
|
196
|
+
}, [latestProgressUpdate]);
|
|
197
|
+
// If no task is running, just show a standard loading bar
|
|
198
|
+
if (subscribedTaskIds.length === 0) {
|
|
199
|
+
return props.fallback;
|
|
200
|
+
}
|
|
201
|
+
return (_jsxs(ProgressWrapper, { children: [_jsx(ProgressHeader, { children: "Task in progress" }), progress && (_jsxs(_Fragment, { children: [_jsx(ProgressMessage, { children: progress.message }), _jsx(ProgressBar, { progress: parseFloat(progress.progress.toFixed(2)) })] }))] }));
|
|
202
|
+
}
|
|
203
|
+
export default ProgressTracker;
|
|
204
|
+
//# sourceMappingURL=progress-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../../../js/components/progress-tracker/progress-tracker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RouteContent } from '../../types';
|
|
2
|
+
interface RouterContentProps {
|
|
3
|
+
/** The list of routes to render content conditionally from */
|
|
4
|
+
routes: Array<RouteContent>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The RouterContent component takes a list of RouterContent objects from the api and create a react-router based on
|
|
8
|
+
* them.
|
|
9
|
+
*
|
|
10
|
+
* @param props - the component props
|
|
11
|
+
*/
|
|
12
|
+
declare function RouterContent(props: RouterContentProps): JSX.Element;
|
|
13
|
+
export default RouterContent;
|
|
14
|
+
//# sourceMappingURL=router-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-content.d.ts","sourceRoot":"","sources":["../../../js/components/router-content/router-content.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUvC,UAAU,kBAAkB;IACxB,8DAA8D;IAC9D,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAC/B;AAED;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAkB7D;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Redirect, Route, Switch } from 'react-router-dom';
|
|
3
|
+
import { DynamicComponent, PrivateRoute } from '../../shared';
|
|
4
|
+
const PageNotFound = () => {
|
|
5
|
+
return (_jsx("div", { style: { alignItems: 'center', display: 'flex', justifyContent: 'center', width: '100%' }, children: _jsx("h2", { children: "404 - page not found" }) }));
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* The RouterContent component takes a list of RouterContent objects from the api and create a react-router based on
|
|
9
|
+
* them.
|
|
10
|
+
*
|
|
11
|
+
* @param props - the component props
|
|
12
|
+
*/
|
|
13
|
+
function RouterContent(props) {
|
|
14
|
+
return (_jsxs(Switch, { children: [props.routes.map(({ content, route, on_load, name }) => (_jsx(Route, { path: route, render: () => (_jsx(PrivateRoute, { name: name, on_load: on_load, children: _jsx(DynamicComponent, { component: content }) })) }, route))), _jsx(Route, { exact: true, path: "/", render: () => _jsx(Redirect, { to: props.routes[0].route }) }), _jsx(Route, { component: PageNotFound })] }));
|
|
15
|
+
}
|
|
16
|
+
export default RouterContent;
|
|
17
|
+
//# sourceMappingURL=router-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-content.js","sourceRoot":"","sources":["../../../js/components/router-content/router-content.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG1D,MAAM,YAAY,GAAG,GAAgB,EAAE;IACnC,OAAO,CACH,cAAK,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAC1F,gDAA6B,GAC3B,CACT,CAAC;AACN,CAAC,CAAC;AAOF;;;;;GAKG;AACH,SAAS,aAAa,CAAC,KAAyB;IAC5C,OAAO,CACH,MAAC,MAAM,eACF,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACrD,KAAC,KAAK,IAEF,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,GAAG,EAAE,CAAC,CACV,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,YACtC,KAAC,gBAAgB,IAAC,SAAS,EAAE,OAAO,GAAI,GAC7B,CAClB,IANI,KAAK,CAOZ,CACL,CAAC,EACF,KAAC,KAAK,IAAC,KAAK,QAAC,IAAI,EAAC,GAAG,EAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAC,QAAQ,IAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAI,GAAI,EAC/E,KAAC,KAAK,IAAC,SAAS,EAAE,YAAY,GAAI,IAC7B,CACZ,CAAC;AACN,CAAC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComponentInstance } from '../../types';
|
|
2
|
+
interface SideBarFrameProps {
|
|
3
|
+
content: ComponentInstance;
|
|
4
|
+
hide_logo?: boolean;
|
|
5
|
+
logo_path?: string;
|
|
6
|
+
logo_position: 'top' | 'bottom';
|
|
7
|
+
logo_width?: string;
|
|
8
|
+
side_bar: ComponentInstance;
|
|
9
|
+
side_bar_padding?: string;
|
|
10
|
+
side_bar_position?: 'left' | 'right';
|
|
11
|
+
side_bar_width?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The SideBarFrame component is designed as a root component for an app built using the Dara core framework. It adds
|
|
15
|
+
* a dark blue side bar to the left of the screen and displays a main content on a light grey background in the center
|
|
16
|
+
*
|
|
17
|
+
* It exposes two slots for registering content: side-bar & content
|
|
18
|
+
*/
|
|
19
|
+
declare function SideBarFrame(props: SideBarFrameProps): JSX.Element;
|
|
20
|
+
export default SideBarFrame;
|
|
21
|
+
//# sourceMappingURL=side-bar-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"side-bar-frame.d.ts","sourceRoot":"","sources":["../../../js/components/side-bar-frame/side-bar-frame.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAuF5C,UAAU,iBAAiB;IACvB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID;;;;;GAKG;AACH,iBAAS,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAkD3D;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { transparentize } from 'polished';
|
|
3
|
+
import styled, { ThemeContext, useTheme } from '@darajs/styled-components';
|
|
4
|
+
import { Button } from '@darajs/ui-components';
|
|
5
|
+
import { useConfig } from '../../api';
|
|
6
|
+
import CausalensDark from '../../assets/causalens-dark.svg';
|
|
7
|
+
import CausalensLight from '../../assets/causalens-light.svg';
|
|
8
|
+
import DaraDark from '../../assets/dara-dark.svg';
|
|
9
|
+
import DaraLight from '../../assets/dara-light.svg';
|
|
10
|
+
import { DirectionCtx, DynamicComponent, Wrapper, getIcon, resolveTheme } from '../../shared';
|
|
11
|
+
import { prependBaseUrl } from '../../utils';
|
|
12
|
+
const shouldForwardProp = (prop) => !['width'].includes(prop);
|
|
13
|
+
const SideBar = styled.div.withConfig({ shouldForwardProp }) `
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
align-items: center;
|
|
17
|
+
|
|
18
|
+
width: ${(props) => props.width || '240px'};
|
|
19
|
+
min-width: 150px;
|
|
20
|
+
max-width: 350px;
|
|
21
|
+
height: 100%;
|
|
22
|
+
padding: 2rem 1rem 1.5rem;
|
|
23
|
+
|
|
24
|
+
color: ${(props) => props.theme.colors.secondary};
|
|
25
|
+
|
|
26
|
+
background: ${(props) => {
|
|
27
|
+
return `radial-gradient(circle closest-corner at 10% 50%, ${transparentize(0.4, props.theme.colors.background)} 0%, ${transparentize(0.9, props.theme.colors.blue4)} 100%),radial-gradient(circle closest-corner at 5% 10%, ${transparentize(0.8, props.theme.colors.error)} 0%, ${transparentize(0.9, props.theme.colors.blue4)} 230%),radial-gradient(circle closest-corner at 50% 100%, ${transparentize(0.8, props.theme.colors.success)} 200%, ${transparentize(0.2, props.theme.colors.blue4)} 610%)`;
|
|
28
|
+
}};
|
|
29
|
+
box-shadow:
|
|
30
|
+
rgb(20 20 25 / 15%) 0 4px 16px,
|
|
31
|
+
rgb(20 20 25 / 15%) 0 8px 32px;
|
|
32
|
+
`;
|
|
33
|
+
const LogoutButton = styled(Button) `
|
|
34
|
+
width: 80%;
|
|
35
|
+
margin-bottom: 1.5rem;
|
|
36
|
+
padding: 1rem;
|
|
37
|
+
border-radius: 1rem;
|
|
38
|
+
|
|
39
|
+
a {
|
|
40
|
+
color: ${(props) => props.theme.colors.blue1};
|
|
41
|
+
text-decoration: none;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
svg {
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
margin-right: 1rem;
|
|
47
|
+
color: ${(props) => props.theme.colors.blue1};
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
const BuiltWithLink = styled.a `
|
|
51
|
+
display: flex;
|
|
52
|
+
gap: 0.2rem;
|
|
53
|
+
align-items: center;
|
|
54
|
+
|
|
55
|
+
font-size: 0.75rem;
|
|
56
|
+
color: inherit;
|
|
57
|
+
text-decoration: none;
|
|
58
|
+
|
|
59
|
+
:hover {
|
|
60
|
+
text-decoration: underline;
|
|
61
|
+
}
|
|
62
|
+
`;
|
|
63
|
+
const LogoImage = styled.img `
|
|
64
|
+
width: ${(props) => props.width};
|
|
65
|
+
max-width: 200px;
|
|
66
|
+
margin: 1rem 0 2rem;
|
|
67
|
+
`;
|
|
68
|
+
const LogoutArrow = getIcon('fa-solid fa-arrow-right-from-bracket');
|
|
69
|
+
/**
|
|
70
|
+
* The SideBarFrame component is designed as a root component for an app built using the Dara core framework. It adds
|
|
71
|
+
* a dark blue side bar to the left of the screen and displays a main content on a light grey background in the center
|
|
72
|
+
*
|
|
73
|
+
* It exposes two slots for registering content: side-bar & content
|
|
74
|
+
*/
|
|
75
|
+
function SideBarFrame(props) {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
const theme = useTheme();
|
|
78
|
+
const { data: config } = useConfig();
|
|
79
|
+
const logo = props.logo_path && (_jsx(LogoImage, { alt: "Logo", src: prependBaseUrl(props.logo_path), width: props.logo_width }));
|
|
80
|
+
const logoSrc = theme.themeType === 'dark' ? DaraDark : DaraLight;
|
|
81
|
+
const causalensLogoSrc = theme.themeType === 'dark' ? CausalensDark : CausalensLight;
|
|
82
|
+
const daraLogo = _jsx("img", { alt: "Dara Logo", src: logoSrc });
|
|
83
|
+
const causalensLogo = _jsx("img", { alt: "causaLens Logo", src: causalensLogoSrc });
|
|
84
|
+
return (_jsxs(Wrapper, { backgroundColor: theme.colors.background, children: [props.side_bar_position === 'right' && (_jsx(Wrapper, { children: props.content && _jsx(DynamicComponent, { component: props.content }) })), _jsx(ThemeContext.Provider, { value: resolveTheme((_a = config === null || config === void 0 ? void 0 : config.theme) === null || _a === void 0 ? void 0 : _a.main, (_b = config === null || config === void 0 ? void 0 : config.theme) === null || _b === void 0 ? void 0 : _b.base), children: _jsxs(SideBar, { style: { padding: props.side_bar_padding }, width: props.side_bar_width, children: [!props.hide_logo && props.logo_position !== 'bottom' && logo, _jsx(Wrapper, { direction: "column", children: _jsx(DirectionCtx.Provider, { value: { direction: 'column' }, children: props.side_bar && _jsx(DynamicComponent, { component: props.side_bar }) }) }), !props.hide_logo && props.logo_position === 'bottom' && logo, _jsxs(LogoutButton, { href: "/logout", styling: "error", children: [_jsx(LogoutArrow, { style: { marginRight: '0.5rem' } }), "Logout"] }), _jsxs(BuiltWithLink, { href: "https://github.com/causalens/dara", target: "_blank", rel: "noopener noreferrer", children: ["Built with ", daraLogo] }), (config === null || config === void 0 ? void 0 : config.powered_by_causalens) && (_jsxs(BuiltWithLink, { href: "https://causalens.com/?utm_source=dara&utm_medium=direct&utm_campaign=dara_platform", target: "_blank", rel: "noopener", children: [_jsx("span", { style: { marginTop: '0.4375rem' }, children: "Powered by" }), " ", causalensLogo] }))] }) }), props.side_bar_position !== 'right' && (_jsx(Wrapper, { style: { padding: '2rem 3rem' }, children: props.content && _jsx(DynamicComponent, { component: props.content }) }))] }));
|
|
85
|
+
}
|
|
86
|
+
export default SideBarFrame;
|
|
87
|
+
//# sourceMappingURL=side-bar-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"side-bar-frame.js","sourceRoot":"","sources":["../../../js/components/side-bar-frame/side-bar-frame.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ComponentInstance } from '../../types';
|
|
2
|
+
interface TopBarFrameProps {
|
|
3
|
+
content: ComponentInstance;
|
|
4
|
+
hide_logo?: boolean;
|
|
5
|
+
logo_path?: string;
|
|
6
|
+
logo_width?: string;
|
|
7
|
+
top_bar: ComponentInstance;
|
|
8
|
+
top_bar_height?: string;
|
|
9
|
+
top_bar_padding?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The TopBarFrame component is designed as a root component for an app built using the Dara core framework.
|
|
13
|
+
*/
|
|
14
|
+
declare function TopBarFrame(props: TopBarFrameProps): JSX.Element;
|
|
15
|
+
export default TopBarFrame;
|
|
16
|
+
//# sourceMappingURL=top-bar-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-bar-frame.d.ts","sourceRoot":"","sources":["../../../js/components/top-bar-frame/top-bar-frame.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA4F5C,UAAU,gBAAgB;IACtB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID;;GAEG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAoCzD;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { transparentize } from 'polished';
|
|
3
|
+
import styled, { ThemeContext, useTheme } from '@darajs/styled-components';
|
|
4
|
+
import { Button } from '@darajs/ui-components';
|
|
5
|
+
import { useConfig } from '../../api';
|
|
6
|
+
import DaraDark from '../../assets/dara-dark.svg';
|
|
7
|
+
import DaraLight from '../../assets/dara-light.svg';
|
|
8
|
+
import { DirectionCtx, DynamicComponent, Wrapper, getIcon, resolveTheme } from '../../shared';
|
|
9
|
+
import { prependBaseUrl } from '../../utils';
|
|
10
|
+
const shouldForwardProp = (prop) => !['width'].includes(prop);
|
|
11
|
+
const TopBar = styled.div.withConfig({ shouldForwardProp }) `
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
gap: 0.5rem;
|
|
15
|
+
align-items: flex-end;
|
|
16
|
+
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: ${(props) => props.height || '124px'};
|
|
19
|
+
min-height: 100px;
|
|
20
|
+
max-height: 350px;
|
|
21
|
+
padding: 2rem 3rem;
|
|
22
|
+
|
|
23
|
+
color: ${(props) => props.theme.colors.secondary};
|
|
24
|
+
|
|
25
|
+
background: ${(props) => {
|
|
26
|
+
return `
|
|
27
|
+
radial-gradient(farthest-side at 50% 0%, ${transparentize(0.7, props.theme.colors.background)} 0%, ${transparentize(0.9, props.theme.colors.blue4)} 50%),
|
|
28
|
+
radial-gradient(at -50% 90%, ${transparentize(0.5, props.theme.colors.error)} 0%, ${transparentize(0.7, props.theme.colors.blue4)} 45%),
|
|
29
|
+
radial-gradient(at 130% 100%, ${transparentize(0.4, props.theme.colors.success)} 0%, ${transparentize(0.5, props.theme.colors.blue4)} 50%)`;
|
|
30
|
+
}};
|
|
31
|
+
box-shadow:
|
|
32
|
+
rgb(20 20 25 / 15%) 0 4px 16px,
|
|
33
|
+
rgb(20 20 25 / 15%) 0 8px 32px;
|
|
34
|
+
`;
|
|
35
|
+
const TopBarContent = styled.div `
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: space-between;
|
|
39
|
+
width: 100%;
|
|
40
|
+
`;
|
|
41
|
+
const LogoutButton = styled(Button) `
|
|
42
|
+
width: 7rem;
|
|
43
|
+
height: 3rem;
|
|
44
|
+
margin-left: 0.5rem;
|
|
45
|
+
padding: 1rem;
|
|
46
|
+
|
|
47
|
+
border-radius: 1rem;
|
|
48
|
+
|
|
49
|
+
a {
|
|
50
|
+
color: ${(props) => props.theme.colors.blue1};
|
|
51
|
+
text-decoration: none;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
svg {
|
|
55
|
+
cursor: pointer;
|
|
56
|
+
margin-right: 1rem;
|
|
57
|
+
color: ${(props) => props.theme.colors.blue1};
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
const RouteButtons = styled(Wrapper) `
|
|
61
|
+
gap: 0.5rem;
|
|
62
|
+
align-items: center;
|
|
63
|
+
`;
|
|
64
|
+
const BuiltWithSpan = styled.span `
|
|
65
|
+
display: flex;
|
|
66
|
+
gap: 0.2rem;
|
|
67
|
+
align-items: center;
|
|
68
|
+
font-size: 0.75rem;
|
|
69
|
+
`;
|
|
70
|
+
const LogoImage = styled.img `
|
|
71
|
+
width: ${(props) => props.width};
|
|
72
|
+
max-width: 200px;
|
|
73
|
+
margin: 0 3rem 0 0;
|
|
74
|
+
`;
|
|
75
|
+
const LogoutArrow = getIcon('fa-solid fa-arrow-right-from-bracket');
|
|
76
|
+
/**
|
|
77
|
+
* The TopBarFrame component is designed as a root component for an app built using the Dara core framework.
|
|
78
|
+
*/
|
|
79
|
+
function TopBarFrame(props) {
|
|
80
|
+
var _a, _b;
|
|
81
|
+
const theme = useTheme();
|
|
82
|
+
const { data: config } = useConfig();
|
|
83
|
+
const logo = props.logo_path && (_jsx(LogoImage, { alt: "Logo", src: prependBaseUrl(props.logo_path), width: props.logo_width }));
|
|
84
|
+
const logoSrc = theme.themeType === 'dark' ? DaraDark : DaraLight;
|
|
85
|
+
const daraLogo = _jsx("img", { alt: "Dara", src: logoSrc });
|
|
86
|
+
return (_jsxs(Wrapper, { backgroundColor: theme.colors.background, direction: "column", children: [_jsx(ThemeContext.Provider, { value: resolveTheme((_a = config === null || config === void 0 ? void 0 : config.theme) === null || _a === void 0 ? void 0 : _a.main, (_b = config === null || config === void 0 ? void 0 : config.theme) === null || _b === void 0 ? void 0 : _b.base), children: _jsxs(TopBar, { height: props.top_bar_height, style: { padding: props.top_bar_padding }, children: [_jsxs(TopBarContent, { children: [!props.hide_logo && logo, props.top_bar && (_jsx(RouteButtons, { direction: "row", children: _jsx(DirectionCtx.Provider, { value: { direction: 'row' }, children: props.top_bar && _jsx(DynamicComponent, { component: props.top_bar }) }) })), _jsxs(LogoutButton, { href: "/logout", styling: "error", children: [_jsx(LogoutArrow, { style: { marginRight: '0.5rem' } }), "Logout"] })] }), _jsxs(BuiltWithSpan, { children: ["Built with ", daraLogo] })] }) }), _jsx(Wrapper, { style: { padding: '2rem 3rem' }, children: props.content && _jsx(DynamicComponent, { component: props.content }) })] }));
|
|
87
|
+
}
|
|
88
|
+
export default TopBarFrame;
|
|
89
|
+
//# sourceMappingURL=top-bar-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-bar-frame.js","sourceRoot":"","sources":["../../../js/components/top-bar-frame/top-bar-frame.tsx"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ServerErrorMessage } from '../../api/websocket';
|
|
2
|
+
interface BackendErrorContext {
|
|
3
|
+
clearErrors: () => void;
|
|
4
|
+
errors: ServerErrorMessage['message'][];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Provides a live stream of backend errors
|
|
8
|
+
*/
|
|
9
|
+
export declare function BackendErrorsProvider(props: {
|
|
10
|
+
children: JSX.Element;
|
|
11
|
+
}): JSX.Element;
|
|
12
|
+
/**
|
|
13
|
+
* Get the current backend errors from context
|
|
14
|
+
*/
|
|
15
|
+
export declare function useBackendErrors(): BackendErrorContext;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=backend-errors-ctx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-errors-ctx.d.ts","sourceRoot":"","sources":["../../../js/devtools/backend-errors/backend-errors-ctx.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AA2BrD,UAAU,mBAAmB;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;CAC3C;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAInF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,mBAAmB,CAEtD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useState } from 'react';
|
|
3
|
+
import WebSocketCtx from '../../shared/context/websocket-context';
|
|
4
|
+
/**
|
|
5
|
+
* Helper hook to subscribe to errors coming from the backend
|
|
6
|
+
*/
|
|
7
|
+
function useBackendErrorsSubscription() {
|
|
8
|
+
const [errors, setErrors] = useState([]);
|
|
9
|
+
const { client } = useContext(WebSocketCtx);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
const sub = client.serverErrors$().subscribe((err) => {
|
|
12
|
+
setErrors((prev) => [...prev, err.message]);
|
|
13
|
+
});
|
|
14
|
+
return () => {
|
|
15
|
+
sub.unsubscribe();
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
const clearErrors = useCallback(() => {
|
|
19
|
+
setErrors([]);
|
|
20
|
+
}, []);
|
|
21
|
+
return [errors, clearErrors];
|
|
22
|
+
}
|
|
23
|
+
const BackendErrorsCtx = createContext(null);
|
|
24
|
+
/**
|
|
25
|
+
* Provides a live stream of backend errors
|
|
26
|
+
*/
|
|
27
|
+
export function BackendErrorsProvider(props) {
|
|
28
|
+
const [errors, clearErrors] = useBackendErrorsSubscription();
|
|
29
|
+
return _jsx(BackendErrorsCtx.Provider, { value: { clearErrors, errors }, children: props.children });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the current backend errors from context
|
|
33
|
+
*/
|
|
34
|
+
export function useBackendErrors() {
|
|
35
|
+
return useContext(BackendErrorsCtx);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=backend-errors-ctx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-errors-ctx.js","sourceRoot":"","sources":["../../../js/devtools/backend-errors/backend-errors-ctx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGpF,OAAO,YAAY,MAAM,oCAAoC,CAAC;AAE9D;;GAEG;AACH,SAAS,4BAA4B;IACjC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YACjD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACR,GAAG,CAAC,WAAW,EAAE,CAAC;QACtB,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACjC,CAAC;AAOD,MAAM,gBAAgB,GAAG,aAAa,CAAsB,IAAI,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAgC;IAClE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,4BAA4B,EAAE,CAAC;IAE7D,OAAO,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,YAAG,KAAK,CAAC,QAAQ,GAA6B,CAAC;AACnH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC5B,OAAO,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-errors.d.ts","sourceRoot":"","sources":["../../../js/devtools/backend-errors/backend-errors.tsx"],"names":[],"mappings":"AAkDA;;GAEG;AACH,iBAAS,aAAa,IAAI,GAAG,CAAC,OAAO,CAuBpC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { isAfter } from 'date-fns';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import styled from '@darajs/styled-components';
|
|
5
|
+
import { Button, Input as UIInput } from '@darajs/ui-components';
|
|
6
|
+
import { useBackendErrors } from './backend-errors-ctx';
|
|
7
|
+
import ErrorDisplay, { parseErrorsForDisplay } from './error-display';
|
|
8
|
+
const ErrorsContainer = styled.div `
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
height: 100%;
|
|
13
|
+
`;
|
|
14
|
+
const ErrorList = styled.div `
|
|
15
|
+
overflow-y: auto;
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
gap: 0.25rem;
|
|
19
|
+
|
|
20
|
+
height: 100%;
|
|
21
|
+
`;
|
|
22
|
+
const ClearButton = styled(Button) `
|
|
23
|
+
padding: 0 0.5rem;
|
|
24
|
+
color: ${(props) => props.theme.colors.grey4};
|
|
25
|
+
background-color: inherit;
|
|
26
|
+
transition: color 100ms ease 0s;
|
|
27
|
+
|
|
28
|
+
:hover:not(:disabled) {
|
|
29
|
+
color: ${(props) => props.theme.colors.grey5};
|
|
30
|
+
background-color: inherit;
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
const Toolbar = styled.div `
|
|
34
|
+
display: flex;
|
|
35
|
+
gap: 0.5rem;
|
|
36
|
+
align-items: center;
|
|
37
|
+
|
|
38
|
+
padding-top: 0.25rem;
|
|
39
|
+
padding-bottom: 0.25rem;
|
|
40
|
+
padding-left: 0.5rem;
|
|
41
|
+
|
|
42
|
+
border-bottom: 1px solid;
|
|
43
|
+
border-bottom-color: ${(props) => props.theme.colors.grey5};
|
|
44
|
+
`;
|
|
45
|
+
/**
|
|
46
|
+
* Displays backend errors as an accordion list with a filter bar at the top
|
|
47
|
+
*/
|
|
48
|
+
function BackendErrors() {
|
|
49
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
50
|
+
const { errors, clearErrors } = useBackendErrors();
|
|
51
|
+
const parsedErrors = parseErrorsForDisplay(errors)
|
|
52
|
+
.filter((e) => e.description.toLowerCase().includes(searchQuery.toLowerCase()))
|
|
53
|
+
.sort((a, b) => (isAfter(b.time, a.time) ? 1 : -1));
|
|
54
|
+
return (_jsxs(ErrorsContainer, { children: [_jsxs(Toolbar, { children: [_jsx(ClearButton, { onClick: clearErrors, children: _jsx("i", { className: "fa-solid fa-ban fa-lg" }) }), _jsx(UIInput, { onChange: (e) => setSearchQuery(e), placeholder: "Filter", value: searchQuery })] }), _jsx(ErrorList, { children: parsedErrors.map((e) => (_jsx(ErrorDisplay, { errorMessage: e }, e.time.getTime()))) })] }));
|
|
55
|
+
}
|
|
56
|
+
export default BackendErrors;
|
|
57
|
+
//# sourceMappingURL=backend-errors.js.map
|