dara-core 1.21.8__py3-none-any.whl → 1.21.9__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.
@@ -50738,9 +50738,11 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
50738
50738
  await validateResponse(res, `Failed to cancel task with id: ${taskId}`);
50739
50739
  return true;
50740
50740
  }
50741
- function getUniqueIdentifier(variable) {
50741
+ function getUniqueIdentifier(variable, opts = {
50742
+ useNested: true
50743
+ }) {
50742
50744
  let identifier = variable.uid;
50743
- if ("nested" in variable) {
50745
+ if (opts.useNested && "nested" in variable) {
50744
50746
  identifier += variable.nested.join(",");
50745
50747
  }
50746
50748
  return identifier;
@@ -50752,12 +50754,14 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
50752
50754
  const selectorFamilyRegistry = /* @__PURE__ */ new Map();
50753
50755
  const selectorFamilyMembersRegistry = /* @__PURE__ */ new Map();
50754
50756
  const depsRegistry = /* @__PURE__ */ new Map();
50757
+ const SHARED_KEY_TYPES = ["result-selector", "derived-selector"];
50755
50758
  function getRegistryKey(variable, type) {
50756
50759
  let extras = "";
50757
50760
  if (isDerivedVariable(variable)) {
50758
50761
  extras = variable.loop_instance_uid ?? "";
50759
50762
  }
50760
- return `${getUniqueIdentifier(variable)}-${type}-${extras}`;
50763
+ const opts = { useNested: !SHARED_KEY_TYPES.includes(type) };
50764
+ return `${getUniqueIdentifier(variable, opts)}-${type}-${extras}`;
50761
50765
  }
50762
50766
  function clearRegistries_TEST() {
50763
50767
  for (const registry2 of [
@@ -50789,7 +50793,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
50789
50793
  return atomFamilyMembersRegistry.get(family).size > 0;
50790
50794
  }
50791
50795
  case "DerivedVariable": {
50792
- const key = getRegistryKey(variable, "selector");
50796
+ const key = getRegistryKey(variable, "selector-nested");
50793
50797
  return selectorFamilyRegistry.has(key);
50794
50798
  }
50795
50799
  default:
@@ -50934,7 +50938,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
50934
50938
  return context.config;
50935
50939
  }
50936
50940
  /**
50937
- * react-router v7.8.2
50941
+ * react-router v7.9.1
50938
50942
  *
50939
50943
  * Copyright (c) Remix Software Inc.
50940
50944
  *
@@ -51293,13 +51297,13 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
51293
51297
  }
51294
51298
  return new URL(href2, base);
51295
51299
  }
51296
- function unstable_createContext(defaultValue) {
51300
+ function createContext(defaultValue) {
51297
51301
  return { defaultValue };
51298
51302
  }
51299
51303
  var _map;
51300
- var unstable_RouterContextProvider = class {
51304
+ var RouterContextProvider$1 = class RouterContextProvider {
51301
51305
  /**
51302
- * Create a new `unstable_RouterContextProvider` instance
51306
+ * Create a new `RouterContextProvider` instance
51303
51307
  * @param init An optional initial context map to populate the provider with
51304
51308
  */
51305
51309
  constructor(init) {
@@ -51359,7 +51363,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
51359
51363
  "path",
51360
51364
  "id",
51361
51365
  "index",
51362
- "unstable_middleware",
51366
+ "middleware",
51363
51367
  "children"
51364
51368
  ]);
51365
51369
  function isUnsupportedLazyRouteFunctionKey(key) {
@@ -52394,7 +52398,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
52394
52398
  pendingNavigationController.signal,
52395
52399
  opts && opts.submission
52396
52400
  );
52397
- let scopedContext = init.unstable_getContext ? await init.unstable_getContext() : new unstable_RouterContextProvider();
52401
+ let scopedContext = init.getContext ? await init.getContext() : new RouterContextProvider$1();
52398
52402
  let pendingActionResult;
52399
52403
  if (opts && opts.pendingError) {
52400
52404
  pendingActionResult = [
@@ -52684,7 +52688,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
52684
52688
  pendingActionResult
52685
52689
  );
52686
52690
  pendingNavigationLoadId = ++incrementingLoadId;
52687
- if (!init.dataStrategy && !dsMatches.some((m) => m.shouldLoad) && !dsMatches.some((m) => m.route.unstable_middleware) && revalidatingFetchers.length === 0) {
52691
+ if (!init.dataStrategy && !dsMatches.some((m) => m.shouldLoad) && !dsMatches.some((m) => m.route.middleware) && revalidatingFetchers.length === 0) {
52688
52692
  let updatedFetchers2 = markFetchRedirectsDone();
52689
52693
  completeNavigation(
52690
52694
  location2,
@@ -52838,7 +52842,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
52838
52842
  setFetcherError(key, routeId, error, { flushSync });
52839
52843
  return;
52840
52844
  }
52841
- let scopedContext = init.unstable_getContext ? await init.unstable_getContext() : new unstable_RouterContextProvider();
52845
+ let scopedContext = init.getContext ? await init.getContext() : new RouterContextProvider$1();
52842
52846
  let preventScrollReset = (opts && opts.preventScrollReset) === true;
52843
52847
  if (submission && isMutationMethod(submission.formMethod)) {
52844
52848
  await handleFetcherAction(
@@ -53689,13 +53693,13 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
53689
53693
  skipLoaderErrorBubbling,
53690
53694
  skipRevalidation,
53691
53695
  dataStrategy,
53692
- unstable_generateMiddlewareResponse: generateMiddlewareResponse
53696
+ generateMiddlewareResponse
53693
53697
  } = {}) {
53694
53698
  let url = new URL(request2.url);
53695
53699
  let method = request2.method;
53696
53700
  let location2 = createLocation("", createPath(url), null, "default");
53697
53701
  let matches2 = matchRoutes(dataRoutes, location2, basename);
53698
- requestContext = requestContext != null ? requestContext : new unstable_RouterContextProvider();
53702
+ requestContext = requestContext != null ? requestContext : new RouterContextProvider$1();
53699
53703
  if (!isValidMethod(method) && method !== "HEAD") {
53700
53704
  let error = getInternalRouterError(405, { method });
53701
53705
  let { matches: methodNotAllowedMatches, route } = getShortCircuitMatches(dataRoutes);
@@ -53733,8 +53737,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
53733
53737
  }
53734
53738
  if (generateMiddlewareResponse) {
53735
53739
  invariant(
53736
- requestContext instanceof unstable_RouterContextProvider,
53737
- "When using middleware in `staticHandler.query()`, any provided `requestContext` must be an instance of `unstable_RouterContextProvider`"
53740
+ requestContext instanceof RouterContextProvider$1,
53741
+ "When using middleware in `staticHandler.query()`, any provided `requestContext` must be an instance of `RouterContextProvider`"
53738
53742
  );
53739
53743
  try {
53740
53744
  await loadLazyMiddlewareForMatches(
@@ -53763,7 +53767,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
53763
53767
  dataStrategy || null,
53764
53768
  skipLoaderErrorBubbling === true,
53765
53769
  null,
53766
- "filterMatchesToLoad" in opts2 ? opts2.filterMatchesToLoad ?? null : null,
53770
+ "filterMatchesToLoad" in opts2 ? opts2.filterMatchesToLoad ?? null : filterMatchesToLoad ?? null,
53767
53771
  skipRevalidation === true
53768
53772
  );
53769
53773
  if (isResponse(result2)) {
@@ -53861,13 +53865,13 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
53861
53865
  routeId,
53862
53866
  requestContext,
53863
53867
  dataStrategy,
53864
- unstable_generateMiddlewareResponse: generateMiddlewareResponse
53868
+ generateMiddlewareResponse
53865
53869
  } = {}) {
53866
53870
  let url = new URL(request2.url);
53867
53871
  let method = request2.method;
53868
53872
  let location2 = createLocation("", createPath(url), null, "default");
53869
53873
  let matches2 = matchRoutes(dataRoutes, location2, basename);
53870
- requestContext = requestContext != null ? requestContext : new unstable_RouterContextProvider();
53874
+ requestContext = requestContext != null ? requestContext : new RouterContextProvider$1();
53871
53875
  if (!isValidMethod(method) && method !== "HEAD" && method !== "OPTIONS") {
53872
53876
  throw getInternalRouterError(405, { method });
53873
53877
  } else if (!matches2) {
@@ -53884,8 +53888,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
53884
53888
  }
53885
53889
  if (generateMiddlewareResponse) {
53886
53890
  invariant(
53887
- requestContext instanceof unstable_RouterContextProvider,
53888
- "When using middleware in `staticHandler.queryRoute()`, any provided `requestContext` must be an instance of `unstable_RouterContextProvider`"
53891
+ requestContext instanceof RouterContextProvider$1,
53892
+ "When using middleware in `staticHandler.queryRoute()`, any provided `requestContext` must be an instance of `RouterContextProvider`"
53889
53893
  );
53890
53894
  await loadLazyMiddlewareForMatches(matches2, manifest, mapRouteProperties2);
53891
53895
  let response = await runServerMiddlewarePipeline(
@@ -54875,11 +54879,11 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
54875
54879
  }
54876
54880
  function loadLazyMiddlewareForMatches(matches2, manifest, mapRouteProperties2) {
54877
54881
  let promises = matches2.map(({ route }) => {
54878
- if (typeof route.lazy !== "object" || !route.lazy.unstable_middleware) {
54882
+ if (typeof route.lazy !== "object" || !route.lazy.middleware) {
54879
54883
  return void 0;
54880
54884
  }
54881
54885
  return loadLazyRouteProperty({
54882
- key: "unstable_middleware",
54886
+ key: "middleware",
54883
54887
  route,
54884
54888
  manifest,
54885
54889
  mapRouteProperties: mapRouteProperties2
@@ -54897,7 +54901,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
54897
54901
  return keyedResults;
54898
54902
  }
54899
54903
  async function defaultDataStrategyWithMiddleware(args) {
54900
- if (!args.matches.some((m) => m.route.unstable_middleware)) {
54904
+ if (!args.matches.some((m) => m.route.middleware)) {
54901
54905
  return defaultDataStrategy(args);
54902
54906
  }
54903
54907
  return runClientMiddlewarePipeline(args, () => defaultDataStrategy(args));
@@ -54951,7 +54955,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
54951
54955
  async function runMiddlewarePipeline(args, handler, processResult, isResult, errorHandler) {
54952
54956
  let { matches: matches2, request: request2, params, context } = args;
54953
54957
  let tuples = matches2.flatMap(
54954
- (m) => m.route.unstable_middleware ? m.route.unstable_middleware.map((fn) => [m.route.id, fn]) : []
54958
+ (m) => m.route.middleware ? m.route.middleware.map((fn) => [m.route.id, fn]) : []
54955
54959
  );
54956
54960
  let result = await callRouteMiddleware(
54957
54961
  { request: request2, params, context },
@@ -55014,7 +55018,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
55014
55018
  }
55015
55019
  function getDataStrategyMatchLazyPromises(mapRouteProperties2, manifest, request2, match2, lazyRoutePropertiesToSkip) {
55016
55020
  let lazyMiddlewarePromise = loadLazyRouteProperty({
55017
- key: "unstable_middleware",
55021
+ key: "middleware",
55018
55022
  route: match2.route,
55019
55023
  manifest,
55020
55024
  mapRouteProperties: mapRouteProperties2
@@ -55114,9 +55118,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
55114
55118
  context: scopedContext,
55115
55119
  matches: matches2
55116
55120
  };
55117
- let unstable_runClientMiddleware = isStaticHandler ? () => {
55121
+ let runClientMiddleware = isStaticHandler ? () => {
55118
55122
  throw new Error(
55119
- "You cannot call `unstable_runClientMiddleware()` from a static handler `dataStrategy`. Middleware is run outside of `dataStrategy` during SSR in order to bubble up the Response. You can enable middleware via the `respond` API in `query`/`queryRoute`"
55123
+ "You cannot call `runClientMiddleware()` from a static handler `dataStrategy`. Middleware is run outside of `dataStrategy` during SSR in order to bubble up the Response. You can enable middleware via the `respond` API in `query`/`queryRoute`"
55120
55124
  );
55121
55125
  } : (cb) => {
55122
55126
  let typedDataStrategyArgs = dataStrategyArgs;
@@ -55124,9 +55128,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
55124
55128
  return cb({
55125
55129
  ...typedDataStrategyArgs,
55126
55130
  fetcherKey,
55127
- unstable_runClientMiddleware: () => {
55131
+ runClientMiddleware: () => {
55128
55132
  throw new Error(
55129
- "Cannot call `unstable_runClientMiddleware()` from within an `unstable_runClientMiddleware` handler"
55133
+ "Cannot call `runClientMiddleware()` from within an `runClientMiddleware` handler"
55130
55134
  );
55131
55135
  }
55132
55136
  });
@@ -55135,7 +55139,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
55135
55139
  let results = await dataStrategyImpl({
55136
55140
  ...dataStrategyArgs,
55137
55141
  fetcherKey,
55138
- unstable_runClientMiddleware
55142
+ runClientMiddleware
55139
55143
  });
55140
55144
  try {
55141
55145
  await Promise.all(
@@ -55851,6 +55855,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
55851
55855
  FetchersContext.displayName = "Fetchers";
55852
55856
  var AwaitContext = React__namespace.createContext(null);
55853
55857
  AwaitContext.displayName = "Await";
55858
+ var AwaitContextProvider = (props) => React__namespace.createElement(AwaitContext.Provider, props);
55854
55859
  var NavigationContext = React__namespace.createContext(
55855
55860
  null
55856
55861
  );
@@ -56554,7 +56559,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
56554
56559
  function createMemoryRouter(routes, opts) {
56555
56560
  return createRouter$1({
56556
56561
  basename: opts?.basename,
56557
- unstable_getContext: opts?.unstable_getContext,
56562
+ getContext: opts?.getContext,
56558
56563
  future: opts?.future,
56559
56564
  history: createMemoryHistory({
56560
56565
  initialEntries: opts?.initialEntries,
@@ -57930,19 +57935,16 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
57930
57935
  }
57931
57936
  return init;
57932
57937
  }
57933
- var ESCAPE_LOOKUP$1 = {
57938
+ var ESCAPE_LOOKUP = {
57934
57939
  "&": "\\u0026",
57935
57940
  ">": "\\u003e",
57936
57941
  "<": "\\u003c",
57937
57942
  "\u2028": "\\u2028",
57938
57943
  "\u2029": "\\u2029"
57939
57944
  };
57940
- var ESCAPE_REGEX$1 = /[&><\u2028\u2029]/g;
57941
- function escapeHtml$1(html) {
57942
- return html.replace(ESCAPE_REGEX$1, (match2) => ESCAPE_LOOKUP$1[match2]);
57943
- }
57944
- function createHtml(html) {
57945
- return { __html: html };
57945
+ var ESCAPE_REGEX = /[&><\u2028\u2029]/g;
57946
+ function escapeHtml(html) {
57947
+ return html.replace(ESCAPE_REGEX, (match2) => ESCAPE_LOOKUP[match2]);
57946
57948
  }
57947
57949
  function invariant2$1(value, message) {
57948
57950
  if (value === false || value === null || typeof value === "undefined") {
@@ -57991,7 +57993,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
57991
57993
  {
57992
57994
  nonce,
57993
57995
  dangerouslySetInnerHTML: {
57994
- __html: `window.__reactRouterContext.streamController.enqueue(${escapeHtml$1(
57996
+ __html: `window.__reactRouterContext.streamController.enqueue(${escapeHtml(
57995
57997
  JSON.stringify(value)
57996
57998
  )});`
57997
57999
  }
@@ -58037,7 +58039,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
58037
58039
  ssr,
58038
58040
  basename
58039
58041
  );
58040
- return async (args) => args.unstable_runClientMiddleware(dataStrategy);
58042
+ return async (args) => args.runClientMiddleware(dataStrategy);
58041
58043
  }
58042
58044
  function getSingleFetchDataStrategyImpl(getRouter, getRouteInfo, fetchAndDecode, ssr, basename, shouldAllowOptOut = () => true) {
58043
58045
  return async (args) => {
@@ -58810,7 +58812,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
58810
58812
  Object.assign(dataRoute, {
58811
58813
  ...dataRoute,
58812
58814
  ...getRouteComponents(route, routeModule, isSpaMode),
58813
- unstable_middleware: routeModule.unstable_clientMiddleware,
58815
+ middleware: routeModule.clientMiddleware,
58814
58816
  handle: routeModule.handle,
58815
58817
  shouldRevalidate: getShouldRevalidateFunction(
58816
58818
  dataRoute.path,
@@ -58952,17 +58954,14 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
58952
58954
  }
58953
58955
  });
58954
58956
  } : void 0,
58955
- unstable_middleware: route.hasClientMiddleware ? async () => {
58956
- let { unstable_clientMiddleware } = route.clientMiddlewareModule ? await import(
58957
+ middleware: route.hasClientMiddleware ? async () => {
58958
+ let { clientMiddleware } = route.clientMiddlewareModule ? await import(
58957
58959
  /* @vite-ignore */
58958
58960
  /* webpackIgnore: true */
58959
58961
  route.clientMiddlewareModule
58960
58962
  ) : await getLazyRoute();
58961
- invariant2$1(
58962
- unstable_clientMiddleware,
58963
- "No `unstable_clientMiddleware` export found"
58964
- );
58965
- return unstable_clientMiddleware;
58963
+ invariant2$1(clientMiddleware, "No `clientMiddleware` export found");
58964
+ return clientMiddleware;
58966
58965
  } : void 0,
58967
58966
  shouldRevalidate: async () => {
58968
58967
  let lazyRoute = await getLazyRoute();
@@ -59043,7 +59042,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
59043
59042
  return {
59044
59043
  Component: getRouteModuleComponent(routeModule),
59045
59044
  ErrorBoundary: routeModule.ErrorBoundary,
59046
- unstable_clientMiddleware: routeModule.unstable_clientMiddleware,
59045
+ clientMiddleware: routeModule.clientMiddleware,
59047
59046
  clientAction: routeModule.clientAction,
59048
59047
  clientLoader: routeModule.clientLoader,
59049
59048
  handle: routeModule.handle,
@@ -59591,7 +59590,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
59591
59590
  {
59592
59591
  key: `script:ld+json:${json}`,
59593
59592
  type: "application/ld+json",
59594
- dangerouslySetInnerHTML: { __html: json }
59593
+ dangerouslySetInnerHTML: { __html: escapeHtml(json) }
59595
59594
  }
59596
59595
  );
59597
59596
  } catch (err2) {
@@ -59696,7 +59695,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
59696
59695
  {
59697
59696
  ...scriptProps,
59698
59697
  suppressHydrationWarning: true,
59699
- dangerouslySetInnerHTML: createHtml(contextScript),
59698
+ dangerouslySetInnerHTML: { __html: contextScript },
59700
59699
  type: void 0
59701
59700
  }
59702
59701
  ), /* @__PURE__ */ React__namespace.createElement(
@@ -59704,7 +59703,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
59704
59703
  {
59705
59704
  ...scriptProps,
59706
59705
  suppressHydrationWarning: true,
59707
- dangerouslySetInnerHTML: createHtml(routeModulesScript),
59706
+ dangerouslySetInnerHTML: { __html: routeModulesScript },
59708
59707
  type: "module",
59709
59708
  async: true
59710
59709
  }
@@ -59877,14 +59876,14 @@ import(${JSON.stringify(manifest.entry.module)});`;
59877
59876
  try {
59878
59877
  if (isBrowser) {
59879
59878
  window.__reactRouterVersion = // @ts-expect-error
59880
- "7.8.2";
59879
+ "7.9.1";
59881
59880
  }
59882
59881
  } catch (e2) {
59883
59882
  }
59884
59883
  function createBrowserRouter(routes, opts) {
59885
59884
  return createRouter$1({
59886
59885
  basename: opts?.basename,
59887
- unstable_getContext: opts?.unstable_getContext,
59886
+ getContext: opts?.getContext,
59888
59887
  future: opts?.future,
59889
59888
  history: createBrowserHistory({ window: opts?.window }),
59890
59889
  hydrationData: opts?.hydrationData || parseHydrationData(),
@@ -59899,7 +59898,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
59899
59898
  function createHashRouter(routes, opts) {
59900
59899
  return createRouter$1({
59901
59900
  basename: opts?.basename,
59902
- unstable_getContext: opts?.unstable_getContext,
59901
+ getContext: opts?.getContext,
59903
59902
  future: opts?.future,
59904
59903
  history: createHashHistory({ window: opts?.window }),
59905
59904
  hydrationData: opts?.hydrationData || parseHydrationData(),
@@ -60882,7 +60881,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
60882
60881
  },
60883
60882
  get future() {
60884
60883
  return {
60885
- unstable_middleware: false,
60884
+ v8_middleware: false,
60886
60885
  ...opts?.future
60887
60886
  };
60888
60887
  },
@@ -61312,7 +61311,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
61312
61311
  }
61313
61312
  var setCookieExports = /* @__PURE__ */ requireSetCookie();
61314
61313
  /**
61315
- * react-router v7.8.2
61314
+ * react-router v7.9.1
61316
61315
  *
61317
61316
  * Copyright (c) Remix Software Inc.
61318
61317
  *
@@ -61401,7 +61400,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
61401
61400
  frameworkContextRef.current = {
61402
61401
  future: {
61403
61402
  unstable_subResourceIntegrity: future?.unstable_subResourceIntegrity === true,
61404
- unstable_middleware: future?.unstable_middleware === true
61403
+ v8_middleware: future?.v8_middleware === true
61405
61404
  },
61406
61405
  manifest: {
61407
61406
  routes: {},
@@ -61418,7 +61417,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
61418
61417
  // @ts-expect-error `StubRouteObject` is stricter about `loader`/`action`
61419
61418
  // types compared to `AgnosticRouteObject`
61420
61419
  convertRoutesToDataRoutes(routes, (r2) => r2),
61421
- _context !== void 0 ? _context : future?.unstable_middleware ? new unstable_RouterContextProvider() : {},
61420
+ _context !== void 0 ? _context : future?.v8_middleware ? new RouterContextProvider$1() : {},
61422
61421
  frameworkContextRef.current.manifest,
61423
61422
  frameworkContextRef.current.routeModules
61424
61423
  );
@@ -61845,7 +61844,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
61845
61844
  hasErrorBoundary: route.id === "root" || route.module.ErrorBoundary != null,
61846
61845
  id: route.id,
61847
61846
  path: route.path,
61848
- unstable_middleware: route.module.unstable_middleware,
61847
+ middleware: route.module.middleware,
61849
61848
  // Need to use RR's version in the param typed here to permit the optional
61850
61849
  // context even though we know it'll always be provided in remix
61851
61850
  loader: route.module.loader ? async (args) => {
@@ -61909,17 +61908,6 @@ import(${JSON.stringify(manifest.entry.module)});`;
61909
61908
  };
61910
61909
  });
61911
61910
  }
61912
- var ESCAPE_LOOKUP = {
61913
- "&": "\\u0026",
61914
- ">": "\\u003e",
61915
- "<": "\\u003c",
61916
- "\u2028": "\\u2028",
61917
- "\u2029": "\\u2029"
61918
- };
61919
- var ESCAPE_REGEX = /[&><\u2028\u2029]/g;
61920
- function escapeHtml(html) {
61921
- return html.replace(ESCAPE_REGEX, (match2) => ESCAPE_LOOKUP[match2]);
61922
- }
61923
61911
  function createServerHandoffString(serverHandoff) {
61924
61912
  return escapeHtml(JSON.stringify(serverHandoff));
61925
61913
  }
@@ -62009,7 +61997,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
62009
61997
  requestContext: loadContext,
62010
61998
  skipLoaderErrorBubbling: true,
62011
61999
  skipRevalidation: true,
62012
- unstable_generateMiddlewareResponse: build2.future.unstable_middleware ? async (query) => {
62000
+ generateMiddlewareResponse: build2.future.v8_middleware ? async (query) => {
62013
62001
  try {
62014
62002
  let innerResult = await query(handlerRequest);
62015
62003
  return handleQueryResult(innerResult);
@@ -62073,7 +62061,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
62073
62061
  requestContext: loadContext,
62074
62062
  filterMatchesToLoad: (m) => !loadRouteIds || loadRouteIds.has(m.route.id),
62075
62063
  skipLoaderErrorBubbling: true,
62076
- unstable_generateMiddlewareResponse: build2.future.unstable_middleware ? async (query) => {
62064
+ generateMiddlewareResponse: build2.future.v8_middleware ? async (query) => {
62077
62065
  try {
62078
62066
  let innerResult = await query(handlerRequest);
62079
62067
  return handleQueryResult(innerResult);
@@ -62288,15 +62276,15 @@ import(${JSON.stringify(manifest.entry.module)});`;
62288
62276
  request: request2
62289
62277
  });
62290
62278
  };
62291
- if (_build.future.unstable_middleware) {
62292
- if (initialContext && !(initialContext instanceof unstable_RouterContextProvider)) {
62279
+ if (_build.future.v8_middleware) {
62280
+ if (initialContext && !(initialContext instanceof RouterContextProvider$1)) {
62293
62281
  let error = new Error(
62294
- "Invalid `context` value provided to `handleRequest`. When middleware is enabled you must return an instance of `unstable_RouterContextProvider` from your `getLoadContext` function."
62282
+ "Invalid `context` value provided to `handleRequest`. When middleware is enabled you must return an instance of `RouterContextProvider` from your `getLoadContext` function."
62295
62283
  );
62296
62284
  handleError(error);
62297
62285
  return returnLastResortErrorResponse(error, serverMode);
62298
62286
  }
62299
- loadContext = initialContext || new unstable_RouterContextProvider();
62287
+ loadContext = initialContext || new RouterContextProvider$1();
62300
62288
  } else {
62301
62289
  loadContext = initialContext || {};
62302
62290
  }
@@ -62524,7 +62512,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
62524
62512
  try {
62525
62513
  let result = await staticHandler.query(request2, {
62526
62514
  requestContext: loadContext,
62527
- unstable_generateMiddlewareResponse: build2.future.unstable_middleware ? async (query) => {
62515
+ generateMiddlewareResponse: build2.future.v8_middleware ? async (query) => {
62528
62516
  try {
62529
62517
  let innerResult = await query(request2);
62530
62518
  if (!isResponse(innerResult)) {
@@ -62660,7 +62648,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
62660
62648
  let result = await staticHandler.queryRoute(request2, {
62661
62649
  routeId,
62662
62650
  requestContext: loadContext,
62663
- unstable_generateMiddlewareResponse: build2.future.unstable_middleware ? async (queryRoute) => {
62651
+ generateMiddlewareResponse: build2.future.v8_middleware ? async (queryRoute) => {
62664
62652
  try {
62665
62653
  let innerResult = await queryRoute(request2);
62666
62654
  return handleQueryRouteResult(innerResult);
@@ -62872,24 +62860,36 @@ ${String(error)}`;
62872
62860
  }
62873
62861
  function href(path, ...args) {
62874
62862
  let params = args[0];
62875
- return path.split("/").map((segment) => {
62876
- if (segment === "*") {
62877
- return params ? params["*"] : void 0;
62878
- }
62879
- const match2 = segment.match(/^:([\w-]+)(\?)?/);
62880
- if (!match2) return segment;
62881
- const param = match2[1];
62882
- const value = params ? params[param] : void 0;
62883
- const isRequired = match2[2] === void 0;
62884
- if (isRequired && value === void 0) {
62885
- throw Error(
62886
- `Path '${path}' requires param '${param}' but it was not provided`
62887
- );
62863
+ let result = path.replace(/\/*\*?$/, "").replace(
62864
+ /\/:([\w-]+)(\?)?/g,
62865
+ // same regex as in .\router\utils.ts: compilePath().
62866
+ (_, param, questionMark) => {
62867
+ const isRequired = questionMark === void 0;
62868
+ const value = params ? params[param] : void 0;
62869
+ if (isRequired && value === void 0) {
62870
+ throw new Error(
62871
+ `Path '${path}' requires param '${param}' but it was not provided`
62872
+ );
62873
+ }
62874
+ return value === void 0 ? "" : "/" + value;
62888
62875
  }
62889
- return value;
62890
- }).filter((segment) => segment !== void 0).join("/");
62876
+ );
62877
+ if (path.endsWith("*")) {
62878
+ const value = params ? params["*"] : void 0;
62879
+ if (value !== void 0) {
62880
+ result += "/" + value;
62881
+ }
62882
+ }
62883
+ return result || "/";
62891
62884
  }
62892
- function getHydrationData(state, routes, getRouteInfo, location2, basename, isSpaMode) {
62885
+ function getHydrationData({
62886
+ state,
62887
+ routes,
62888
+ getRouteInfo,
62889
+ location: location2,
62890
+ basename,
62891
+ isSpaMode
62892
+ }) {
62893
62893
  let hydrationData = {
62894
62894
  ...state,
62895
62895
  loaderData: { ...state.loaderData }
@@ -63134,7 +63134,7 @@ ${String(error)}`;
63134
63134
  function createRouterFromPayload({
63135
63135
  fetchImplementation,
63136
63136
  createFromReadableStream,
63137
- unstable_getContext,
63137
+ getContext,
63138
63138
  payload
63139
63139
  }) {
63140
63140
  const globalVar = window;
@@ -63172,17 +63172,17 @@ ${String(error)}`;
63172
63172
  }, []);
63173
63173
  globalVar.__reactRouterDataRouter = createRouter$1({
63174
63174
  routes,
63175
- unstable_getContext,
63175
+ getContext,
63176
63176
  basename: payload.basename,
63177
63177
  history: createBrowserHistory(),
63178
- hydrationData: getHydrationData(
63179
- {
63178
+ hydrationData: getHydrationData({
63179
+ state: {
63180
63180
  loaderData: payload.loaderData,
63181
63181
  actionData: payload.actionData,
63182
63182
  errors: payload.errors
63183
63183
  },
63184
63184
  routes,
63185
- (routeId) => {
63185
+ getRouteInfo: (routeId) => {
63186
63186
  let match2 = payload.matches.find((m) => m.id === routeId);
63187
63187
  invariant(match2, "Route not found in payload");
63188
63188
  return {
@@ -63191,10 +63191,10 @@ ${String(error)}`;
63191
63191
  hasHydrateFallback: match2.hydrateFallbackElement != null
63192
63192
  };
63193
63193
  },
63194
- payload.location,
63195
- void 0,
63196
- false
63197
- ),
63194
+ location: payload.location,
63195
+ basename: payload.basename,
63196
+ isSpaMode: false
63197
+ }),
63198
63198
  async patchRoutesOnNavigation({ path, signal }) {
63199
63199
  if (discoveredPaths.has(path)) {
63200
63200
  return;
@@ -63282,7 +63282,7 @@ ${String(error)}`;
63282
63282
  routeModules: globalVar.__reactRouterRouteModules
63283
63283
  };
63284
63284
  }
63285
- var renderedRoutesContext = unstable_createContext();
63285
+ var renderedRoutesContext = createContext();
63286
63286
  function getRSCSingleFetchDataStrategy(getRouter, ssr, basename, createFromReadableStream, fetchImplementation) {
63287
63287
  let dataStrategy = getSingleFetchDataStrategyImpl(
63288
63288
  getRouter,
@@ -63309,7 +63309,7 @@ ${String(error)}`;
63309
63309
  return M.route.hasComponent && !M.route.element;
63310
63310
  }
63311
63311
  );
63312
- return async (args) => args.unstable_runClientMiddleware(async () => {
63312
+ return async (args) => args.runClientMiddleware(async () => {
63313
63313
  let context = args.context;
63314
63314
  context.set(renderedRoutesContext, []);
63315
63315
  let results = await dataStrategy(args);
@@ -63395,22 +63395,17 @@ ${String(error)}`;
63395
63395
  fetch: fetchImplementation = fetch,
63396
63396
  payload,
63397
63397
  routeDiscovery = "eager",
63398
- unstable_getContext
63398
+ getContext
63399
63399
  }) {
63400
63400
  if (payload.type !== "render") throw new Error("Invalid payload type");
63401
63401
  let { router, routeModules } = React__namespace.useMemo(
63402
63402
  () => createRouterFromPayload({
63403
63403
  payload,
63404
63404
  fetchImplementation,
63405
- unstable_getContext,
63405
+ getContext,
63406
63406
  createFromReadableStream
63407
63407
  }),
63408
- [
63409
- createFromReadableStream,
63410
- payload,
63411
- fetchImplementation,
63412
- unstable_getContext
63413
- ]
63408
+ [createFromReadableStream, payload, fetchImplementation, getContext]
63414
63409
  );
63415
63410
  React__namespace.useEffect(() => {
63416
63411
  setIsHydrated();
@@ -63482,7 +63477,7 @@ ${String(error)}`;
63482
63477
  future: {
63483
63478
  // These flags have no runtime impact so can always be false. If we add
63484
63479
  // flags that drive runtime behavior they'll need to be proxied through.
63485
- unstable_middleware: false,
63480
+ v8_middleware: false,
63486
63481
  unstable_subResourceIntegrity: false
63487
63482
  },
63488
63483
  isSpaMode: false,
@@ -63768,19 +63763,48 @@ ${String(error)}`;
63768
63763
  if (!serverResponse.body) {
63769
63764
  throw new Error("Missing body in server response");
63770
63765
  }
63766
+ const detectRedirectResponse = serverResponse.clone();
63771
63767
  let serverResponseB = null;
63772
63768
  if (hydrate2) {
63773
63769
  serverResponseB = serverResponse.clone();
63774
63770
  }
63775
63771
  const body = serverResponse.body;
63776
- let payloadPromise;
63772
+ let buffer;
63773
+ let streamControllers = [];
63774
+ const createStream = () => {
63775
+ if (!buffer) {
63776
+ buffer = [];
63777
+ return body.pipeThrough(
63778
+ new TransformStream({
63779
+ transform(chunk, controller) {
63780
+ buffer.push(chunk);
63781
+ controller.enqueue(chunk);
63782
+ streamControllers.forEach((c) => c.enqueue(chunk));
63783
+ },
63784
+ flush() {
63785
+ streamControllers.forEach((c) => c.close());
63786
+ streamControllers = [];
63787
+ }
63788
+ })
63789
+ );
63790
+ }
63791
+ return new ReadableStream({
63792
+ start(controller) {
63793
+ buffer.forEach((chunk) => controller.enqueue(chunk));
63794
+ streamControllers.push(controller);
63795
+ }
63796
+ });
63797
+ };
63777
63798
  const getPayload = async () => {
63778
- if (payloadPromise) return payloadPromise;
63779
- payloadPromise = createFromReadableStream(body);
63780
- return payloadPromise;
63799
+ return createFromReadableStream(createStream());
63781
63800
  };
63782
63801
  try {
63783
- const payload = await getPayload();
63802
+ if (!detectRedirectResponse.body) {
63803
+ throw new Error("Failed to clone server response");
63804
+ }
63805
+ const payload = await createFromReadableStream(
63806
+ detectRedirectResponse.body
63807
+ );
63784
63808
  if (serverResponse.status === SINGLE_FETCH_REDIRECT_STATUS && payload.type === "redirect") {
63785
63809
  const headers2 = new Headers(serverResponse.headers);
63786
63810
  headers2.delete("Content-Encoding");
@@ -63891,7 +63915,7 @@ ${String(error)}`;
63891
63915
  future: {
63892
63916
  // These flags have no runtime impact so can always be false. If we add
63893
63917
  // flags that drive runtime behavior they'll need to be proxied through.
63894
- unstable_middleware: false,
63918
+ v8_middleware: false,
63895
63919
  unstable_subResourceIntegrity: false
63896
63920
  },
63897
63921
  isSpaMode: false,
@@ -63997,7 +64021,7 @@ ${String(error)}`;
63997
64021
  return /* @__PURE__ */ React__namespace.createElement(RouterProvider, { flushSync: ReactDOM__namespace.flushSync, ...props });
63998
64022
  }
63999
64023
  /**
64000
- * react-router v7.8.2
64024
+ * react-router v7.9.1
64001
64025
  *
64002
64026
  * Copyright (c) Remix Software Inc.
64003
64027
  *
@@ -64026,6 +64050,7 @@ ${String(error)}`;
64026
64050
  PrefetchPageLinks,
64027
64051
  Route,
64028
64052
  Router,
64053
+ RouterContextProvider: RouterContextProvider$1,
64029
64054
  RouterProvider,
64030
64055
  Routes,
64031
64056
  Scripts,
@@ -64033,6 +64058,7 @@ ${String(error)}`;
64033
64058
  ServerRouter,
64034
64059
  StaticRouter,
64035
64060
  StaticRouterProvider,
64061
+ UNSAFE_AwaitContextProvider: AwaitContextProvider,
64036
64062
  UNSAFE_DataRouterContext: DataRouterContext,
64037
64063
  UNSAFE_DataRouterStateContext: DataRouterStateContext,
64038
64064
  UNSAFE_ErrorResponseImpl: ErrorResponseImpl,
@@ -64068,6 +64094,7 @@ ${String(error)}`;
64068
64094
  UNSAFE_withErrorBoundaryProps: withErrorBoundaryProps,
64069
64095
  UNSAFE_withHydrateFallbackProps: withHydrateFallbackProps,
64070
64096
  createBrowserRouter,
64097
+ createContext,
64071
64098
  createCookie,
64072
64099
  createCookieSessionStorage,
64073
64100
  createHashRouter,
@@ -64100,9 +64127,7 @@ ${String(error)}`;
64100
64127
  unstable_HistoryRouter: HistoryRouter,
64101
64128
  unstable_RSCHydratedRouter: RSCHydratedRouter,
64102
64129
  unstable_RSCStaticRouter: RSCStaticRouter,
64103
- unstable_RouterContextProvider,
64104
64130
  unstable_createCallServer: createCallServer,
64105
- unstable_createContext,
64106
64131
  unstable_getRSCStream: getRSCStream,
64107
64132
  unstable_routeRSCServerRequest: routeRSCServerRequest,
64108
64133
  unstable_setDevServerHooks: setDevServerHooks,
@@ -64623,7 +64648,7 @@ Inferred class string: "${iconClasses}."`
64623
64648
  }
64624
64649
  atomFamilyMembersRegistry.get(family).set(extrasSerializable.toJSON(), atomInstance);
64625
64650
  if (isNested) {
64626
- const key = getRegistryKey(variable, "selector");
64651
+ const key = getRegistryKey(variable, "selector-nested");
64627
64652
  if (!selectorFamilyRegistry.has(key)) {
64628
64653
  selectorFamilyRegistry.set(
64629
64654
  key,
@@ -69912,8 +69937,8 @@ Inferred class string: "${iconClasses}."`
69912
69937
  return selectorInstance;
69913
69938
  }
69914
69939
  const NOT_SET$1 = Symbol("NOT_SET");
69915
- function getOrRegisterDerivedVariable(variable, wsClient, taskContext, currentExtras) {
69916
- const key = getRegistryKey(variable, "selector");
69940
+ function getOrRegisterDerivedVariableValue(variable, wsClient, taskContext, currentExtras) {
69941
+ const key = getRegistryKey(variable, "derived-selector");
69917
69942
  if (!selectorFamilyRegistry.has(key)) {
69918
69943
  getOrRegisterTrigger(variable);
69919
69944
  selectorFamilyRegistry.set(
@@ -70014,7 +70039,6 @@ Inferred class string: "${iconClasses}."`
70014
70039
  } else {
70015
70040
  variableValue = variableResponse.value;
70016
70041
  }
70017
- variableValue = "nested" in variable ? resolveNested(variableValue, variable.nested) : variableValue;
70018
70042
  depsRegistry.set(derivedResult.depsKey, {
70019
70043
  args: derivedResult.relevantValues,
70020
70044
  result: variableValue
@@ -70034,6 +70058,35 @@ Inferred class string: "${iconClasses}."`
70034
70058
  selectorFamilyMembersRegistry.get(family).set(serializableExtras.toJSON(), selectorInstance);
70035
70059
  return selectorInstance;
70036
70060
  }
70061
+ function getOrRegisterDerivedVariable(variable, wsClient, taskContext, currentExtras) {
70062
+ const key = getRegistryKey(variable, "selector-nested");
70063
+ if (!selectorFamilyRegistry.has(key)) {
70064
+ selectorFamilyRegistry.set(
70065
+ key,
70066
+ Recoil_index_11({
70067
+ get: (extrasSerializable) => ({ get }) => {
70068
+ const dvSelector = getOrRegisterDerivedVariableValue(
70069
+ variable,
70070
+ wsClient,
70071
+ taskContext,
70072
+ extrasSerializable.extras
70073
+ );
70074
+ const value = get(dvSelector);
70075
+ return "nested" in variable ? resolveNested(value, variable.nested) : value;
70076
+ },
70077
+ key: nanoid$1()
70078
+ })
70079
+ );
70080
+ }
70081
+ const family = selectorFamilyRegistry.get(key);
70082
+ const serializableExtras = new RequestExtrasSerializable(currentExtras);
70083
+ const selectorInstance = family(serializableExtras);
70084
+ if (!selectorFamilyMembersRegistry.has(family)) {
70085
+ selectorFamilyMembersRegistry.set(family, /* @__PURE__ */ new Map());
70086
+ }
70087
+ selectorFamilyMembersRegistry.get(family).set(serializableExtras.toJSON(), selectorInstance);
70088
+ return selectorInstance;
70089
+ }
70037
70090
  function preloadDerivedValue({
70038
70091
  key,
70039
70092
  variables,
@@ -74632,7 +74685,7 @@ body,
74632
74685
  element: /* @__PURE__ */ React__namespace.createElement(AuthenticatedRoot, { daraData: config2 }),
74633
74686
  loader: createAuthenticatedRootLoader(config2),
74634
74687
  // token must be set to access the authenticated routes
74635
- unstable_middleware: [
74688
+ middleware: [
74636
74689
  async () => {
74637
74690
  if (verifiedToken) {
74638
74691
  return;
@@ -98692,6 +98745,7 @@ body,
98692
98745
  exports.getIcon = getIcon;
98693
98746
  exports.getOrRegisterDerivedVariable = getOrRegisterDerivedVariable;
98694
98747
  exports.getOrRegisterDerivedVariableResult = getOrRegisterDerivedVariableResult;
98748
+ exports.getOrRegisterDerivedVariableValue = getOrRegisterDerivedVariableValue;
98695
98749
  exports.getOrRegisterServerVariable = getOrRegisterServerVariable;
98696
98750
  exports.getRegistryKey = getRegistryKey;
98697
98751
  exports.getSessionToken = getSessionToken;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dara-core
3
- Version: 1.21.8
3
+ Version: 1.21.9
4
4
  Summary: Dara Framework Core
5
5
  Home-page: https://dara.causalens.com/
6
6
  License: Apache-2.0
@@ -21,10 +21,10 @@ Requires-Dist: cachetools (>=5.0.0,<6.0.0)
21
21
  Requires-Dist: certifi (>=2024.7.4)
22
22
  Requires-Dist: click (==8.1.3)
23
23
  Requires-Dist: colorama (>=0.4.6,<0.5.0)
24
- Requires-Dist: create-dara-app (==1.21.8)
24
+ Requires-Dist: create-dara-app (==1.21.9)
25
25
  Requires-Dist: croniter (>=1.0.15,<3.0.0)
26
26
  Requires-Dist: cryptography (>=42.0.4)
27
- Requires-Dist: dara-components (==1.21.8) ; extra == "all"
27
+ Requires-Dist: dara-components (==1.21.9) ; extra == "all"
28
28
  Requires-Dist: exceptiongroup (>=1.1.3,<2.0.0)
29
29
  Requires-Dist: fastapi (>=0.115.0,<0.116.0)
30
30
  Requires-Dist: fastapi_vite_dara (==0.4.0)
@@ -55,7 +55,7 @@ Description-Content-Type: text/markdown
55
55
 
56
56
  # Dara Application Framework
57
57
 
58
- <img src="https://github.com/causalens/dara/blob/v1.21.8/img/dara_light.svg?raw=true">
58
+ <img src="https://github.com/causalens/dara/blob/v1.21.9/img/dara_light.svg?raw=true">
59
59
 
60
60
  ![Master tests](https://github.com/causalens/dara/actions/workflows/tests.yml/badge.svg?branch=master)
61
61
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
@@ -100,7 +100,7 @@ source .venv/bin/activate
100
100
  dara start
101
101
  ```
102
102
 
103
- ![Dara App](https://github.com/causalens/dara/blob/v1.21.8/img/components_gallery.png?raw=true)
103
+ ![Dara App](https://github.com/causalens/dara/blob/v1.21.9/img/components_gallery.png?raw=true)
104
104
 
105
105
  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:
106
106
 
@@ -117,9 +117,9 @@ Explore some of our favorite apps - a great way of getting started and getting t
117
117
 
118
118
  | Dara App | Description |
119
119
  | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
120
- | ![Large Language Model](https://github.com/causalens/dara/blob/v1.21.8/img/llm.png?raw=true) | Demonstrates how to use incorporate a LLM chat box into your decision app to understand model insights |
121
- | ![Plot Interactivity](https://github.com/causalens/dara/blob/v1.21.8/img/plot_interactivity.png?raw=true) | 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 |
122
- | ![Graph Editor](https://github.com/causalens/dara/blob/v1.21.8/img/graph_viewer.png?raw=true) | 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. |
120
+ | ![Large Language Model](https://github.com/causalens/dara/blob/v1.21.9/img/llm.png?raw=true) | Demonstrates how to use incorporate a LLM chat box into your decision app to understand model insights |
121
+ | ![Plot Interactivity](https://github.com/causalens/dara/blob/v1.21.9/img/plot_interactivity.png?raw=true) | 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 |
122
+ | ![Graph Editor](https://github.com/causalens/dara/blob/v1.21.9/img/graph_viewer.png?raw=true) | 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. |
123
123
 
124
124
  Check out our [App Gallery](https://dara.causalens.com/gallery) for more inspiration!
125
125
 
@@ -146,9 +146,9 @@ And the supporting UI packages and tools.
146
146
  - `ui-utils` - miscellaneous utility functions
147
147
  - `ui-widgets` - widget components
148
148
 
149
- More information on the repository structure can be found in the [CONTRIBUTING.md](https://github.com/causalens/dara/blob/v1.21.8/CONTRIBUTING.md) file.
149
+ More information on the repository structure can be found in the [CONTRIBUTING.md](https://github.com/causalens/dara/blob/v1.21.9/CONTRIBUTING.md) file.
150
150
 
151
151
  ## License
152
152
 
153
- Dara is open-source and licensed under the [Apache 2.0 License](https://github.com/causalens/dara/blob/v1.21.8/LICENSE).
153
+ Dara is open-source and licensed under the [Apache 2.0 License](https://github.com/causalens/dara/blob/v1.21.9/LICENSE).
154
154
 
@@ -93,7 +93,7 @@ dara/core/router/compat.py,sha256=WAVzDcJFJOVoIQ5inplIhXD58TWsWwTTebTCqpG4nGs,31
93
93
  dara/core/router/components.py,sha256=K6bj04_ZPJcU9JQjaxPJkbUeaHtA_jeJNEvCqQbDf3A,5090
94
94
  dara/core/router/dependency_graph.py,sha256=AyjSk3DuvCgACrgpID4oSpms1X6GQJUbt-scY5X_LN4,2305
95
95
  dara/core/router/router.py,sha256=1r3rFGiftOXC6GP66hKqTdcVNDRJsZWBWvL74wNG4dA,29719
96
- dara/core/umd/dara.core.umd.cjs,sha256=Cyy974YXbpht5yk_KPTu-RKahsPGVMVWXLEzE2S4-JU,5148693
96
+ dara/core/umd/dara.core.umd.cjs,sha256=_3lj4wdDwfrH5bP1BzlH_2cTZatXsiIOOHwRcxwIRY8,5150233
97
97
  dara/core/umd/style.css,sha256=yT3PKpi2sKI2-kQIF8xtVbTPQqgpK7-Ua7tfzDPuSsI,4095881
98
98
  dara/core/visual/__init__.py,sha256=QN0wbG9HPQ_vXh8BO8DnBXeYLIENVTNtRmYzZf1lx7c,577
99
99
  dara/core/visual/components/__init__.py,sha256=nmCsnMLXeZAjkhMYz-mIFodpVY-69IO1fvwwXbFlMQ4,2447
@@ -120,8 +120,8 @@ dara/core/visual/themes/__init__.py,sha256=aM4mgoIYo2neBSw5FRzswsht7PUKjLthiHLmF
120
120
  dara/core/visual/themes/dark.py,sha256=UQGDooOc8ric73eHs9E0ltYP4UCrwqQ3QxqN_fb4PwY,1942
121
121
  dara/core/visual/themes/definitions.py,sha256=5g83t24w8Ar51Cl9REBJfCU7_DtlashBQeUTKDg3D1M,2862
122
122
  dara/core/visual/themes/light.py,sha256=-Tviq8oEwGbdFULoDOqPuHO0UpAZGsBy8qFi0kAGolQ,1944
123
- dara_core-1.21.8.dist-info/LICENSE,sha256=r9u1w2RvpLMV6YjuXHIKXRBKzia3fx_roPwboGcLqCc,10944
124
- dara_core-1.21.8.dist-info/METADATA,sha256=IOMPENa646ji1i8pl_gLC0ByIC-isfV8jU6BuRFh2NE,7534
125
- dara_core-1.21.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
126
- dara_core-1.21.8.dist-info/entry_points.txt,sha256=H__D5sNIGuPIhVam0DChNL-To5k8Y7nY7TAFz9Mz6cc,139
127
- dara_core-1.21.8.dist-info/RECORD,,
123
+ dara_core-1.21.9.dist-info/LICENSE,sha256=r9u1w2RvpLMV6YjuXHIKXRBKzia3fx_roPwboGcLqCc,10944
124
+ dara_core-1.21.9.dist-info/METADATA,sha256=TNCrcVLJcY7-PIrkbEgbN1q2U5v6Zncu4DD5K1lnwR4,7534
125
+ dara_core-1.21.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
126
+ dara_core-1.21.9.dist-info/entry_points.txt,sha256=H__D5sNIGuPIhVam0DChNL-To5k8Y7nY7TAFz9Mz6cc,139
127
+ dara_core-1.21.9.dist-info/RECORD,,