@llmops/app 0.1.0-beta.8 → 0.1.1-beta.1

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.
Files changed (53) hide show
  1. package/dist/.vite/manifest.json +152 -149
  2. package/dist/assets/{Form-BqIR54aK.js → Form-DurABL93.js} +1 -1
  3. package/dist/assets/{_environment-B9slLxIM.js → _environment-cvjo84jE.js} +1 -1
  4. package/dist/assets/{_tabs-8WlaRf6k.js → _tabs-CPULxPXH.js} +1 -1
  5. package/dist/assets/{_tabs-CGwO4MTn.js → _tabs-CvacR8ma.js} +1 -1
  6. package/dist/assets/{_variant-COPD7jVX.js → _variant-D-Su5y6J.js} +1 -1
  7. package/dist/assets/{_variants-D4jD1121.js → _variants-GQL6AngK.js} +1 -1
  8. package/dist/assets/{button-SaGwF9Mc.js → button-BEBWfv3K.js} +1 -1
  9. package/dist/assets/check-Ch_sNRmE.js +1 -0
  10. package/dist/assets/{chevron-right-BVwp1PEQ.js → chevron-right-CB5eOw5R.js} +1 -1
  11. package/dist/assets/configs-BKxrD14d.css +1 -0
  12. package/dist/assets/configs-Ckb1Gh45.js +1 -0
  13. package/dist/assets/{copy-DuziMpq3.js → copy-zjZRJuNG.js} +1 -1
  14. package/dist/assets/{environments-CDgsUGPY.js → environments-DtJ5Lpag.js} +1 -1
  15. package/dist/assets/favicon.ico +0 -0
  16. package/dist/assets/{formatDistance-BVFQcxMW.js → formatDistance-BLefUVjS.js} +1 -1
  17. package/dist/assets/{index-DVICBb7E.js → index-Bx7fi-TU.js} +1 -1
  18. package/dist/assets/index-D0RzYU3K.js +1 -0
  19. package/dist/assets/{index-g0mwFYMe.js → index-DnOI3CO7.js} +1 -1
  20. package/dist/assets/{index-Dp_a_2-B.css → index-JoHQ-XGK.css} +1 -1
  21. package/dist/assets/{index-D11QRy5x.js → index-P3WhIAgM.js} +2 -2
  22. package/dist/assets/{index.esm-Di60kgGW.js → index.esm-JXXIAvjH.js} +1 -1
  23. package/dist/assets/new-config-state.css-DYWW4gMw.js +1 -0
  24. package/dist/assets/{plus-D8bVejky.js → plus-NtaGeY4B.js} +1 -1
  25. package/dist/assets/{route-BAJxFoUd.js → route-CILbCcM1.js} +1 -1
  26. package/dist/assets/{route-Cve62xlf.js → route-O6imc6-P.js} +1 -1
  27. package/dist/assets/{secrets-Dfc4KsFB.js → secrets-C7EM3Vc4.js} +1 -1
  28. package/dist/assets/{settings-CkD4z_Hv.js → settings-BKtjj2be.js} +1 -1
  29. package/dist/assets/{settings-9UcgXAim.js → settings-BaUSziYN.js} +1 -1
  30. package/dist/assets/{table-Drk2TD58.js → table-3bd5M2VH.js} +1 -1
  31. package/dist/assets/{tabs.css-DM-zwDZg.js → tabs.css-BtjQBzCx.js} +1 -1
  32. package/dist/assets/{targeting-BjdUM5MM.js → targeting-ER2jmmgx.js} +1 -1
  33. package/dist/assets/{update-or-create-name-ChvLM3HZ.js → update-or-create-name-DL3P6ioS.js} +1 -1
  34. package/dist/assets/{useButton-B0pv7V1F.js → useButton-BsGawsAH.js} +1 -1
  35. package/dist/assets/{useConfigList-C8a_Opd6.js → useConfigList-82kvWQBI.js} +1 -1
  36. package/dist/assets/{useConfigVariants-COgsOizX.js → useConfigVariants-6VXcu6gd.js} +1 -1
  37. package/dist/assets/{useEnvironments-Byl0U2nG.js → useEnvironments-CnQLCTUT.js} +1 -1
  38. package/dist/assets/{useMutation-BfQR89Gz.js → useMutation-CfseLGia.js} +1 -1
  39. package/dist/assets/{useRole-BYxeh9v-.js → useRole-DgeL5bnU.js} +1 -1
  40. package/dist/assets/{useSetTargeting-DcIQi2U_.js → useSetTargeting-DaZE0wc4.js} +1 -1
  41. package/dist/assets/{useTargetingRules-BcM1fgTv.js → useTargetingRules-DQJaFv3c.js} +1 -1
  42. package/dist/assets/{useValueChanged-D6EOv1Ly.js → useValueChanged-CNJVEKor.js} +1 -1
  43. package/dist/assets/{variants-BiG-9VgB.js → variants-Ctf9tC34.js} +1 -1
  44. package/dist/assets/variants.css-C0L7Oivg.js +1 -0
  45. package/dist/index.cjs +13756 -0
  46. package/dist/index.d.cts +30 -0
  47. package/dist/index.mjs +59 -3
  48. package/package.json +14 -5
  49. package/dist/assets/check-ZX167PJq.js +0 -1
  50. package/dist/assets/configs-Cn2mggPE.js +0 -1
  51. package/dist/assets/index-qZssbb5m.js +0 -1
  52. package/dist/assets/new-config-state.css-DDvxSlIO.js +0 -1
  53. package/dist/assets/variants.css-CN3aJiTg.js +0 -1
@@ -0,0 +1,30 @@
1
+ import * as hono_types1 from "hono/types";
2
+ import * as hono_hono_base0 from "hono/hono-base";
3
+ import { LLMOpsConfig, ValidatedLLMOpsConfig, createDataLayer } from "@llmops/core";
4
+ import { Hono } from "hono";
5
+
6
+ //#region src/server/types.d.ts
7
+ interface LLMProvider {
8
+ key: string;
9
+ name: string;
10
+ imageURI: string;
11
+ }
12
+ declare module 'hono' {
13
+ interface ContextVariableMap {
14
+ llmopsConfig: ValidatedLLMOpsConfig;
15
+ llmProviders: LLMProvider[];
16
+ db: Awaited<ReturnType<typeof createDataLayer>>;
17
+ }
18
+ }
19
+ //#endregion
20
+ //#region src/server/index.d.ts
21
+ declare const app: Hono<hono_types1.BlankEnv, hono_types1.BlankSchema, "/">;
22
+ //#endregion
23
+ //#region src/index.d.ts
24
+ declare const createApp: (config: LLMOpsConfig) => {
25
+ app: hono_hono_base0.HonoBase<{}, {
26
+ "*": {};
27
+ } | hono_types1.MergeSchemaPath<hono_types1.BlankSchema, "/">, string>;
28
+ };
29
+ //#endregion
30
+ export { createApp, app as default };
package/dist/index.mjs CHANGED
@@ -36,7 +36,7 @@ var __export = (all, symbols) => {
36
36
 
37
37
  //#endregion
38
38
  //#region src/client/index.tsx?url
39
- var client_default = "/assets/index-D11QRy5x.js";
39
+ var client_default = "/assets/index-P3WhIAgM.js";
40
40
 
41
41
  //#endregion
42
42
  //#region src/client/styles/styles.css?url
@@ -70,6 +70,7 @@ const manifest = existsSync(manifestPath) ? JSON.parse(readFileSync(manifestPath
70
70
  const renderer = ({ basePath = "", dev = false, llmProviders }) => {
71
71
  const stylesPath = basePath === "/" ? styles_default : basePath + styles_default;
72
72
  const clientPath = basePath === "/" ? client_default : basePath + client_default;
73
+ const faviconPath = basePath === "/" ? "/assets/favicon.ico" : basePath + "/assets/favicon.ico";
73
74
  const entryCSSFiles = Object.keys(manifest)?.filter((key) => manifest[key].isEntry && manifest[key].css)?.flatMap((key) => manifest[key].css || []).map((cssFile) => basePath === "/" ? `/${cssFile}` : basePath + `/${cssFile}`) || [].filter((cssFile) => {
74
75
  return cssFile !== stylesPath;
75
76
  });
@@ -94,6 +95,11 @@ const renderer = ({ basePath = "", dev = false, llmProviders }) => {
94
95
  href: "https://fonts.googleapis.com/css2?family=Geist+Mono:wght@100..900&family=Geist:wght@100..900&display=swap",
95
96
  rel: "stylesheet"
96
97
  }),
98
+ /* @__PURE__ */ jsx("link", {
99
+ rel: "icon",
100
+ href: faviconPath,
101
+ type: "image/x-icon"
102
+ }),
97
103
  /* @__PURE__ */ jsx("style", { children: `
98
104
  /*! modern-normalize v3.0.1 | MIT License | https://github.com/sindresorhus/modern-normalize */
99
105
 
@@ -13622,6 +13628,56 @@ const createSeedMiddleware = () => {
13622
13628
  };
13623
13629
  };
13624
13630
 
13631
+ //#endregion
13632
+ //#region src/server/middlewares/migration.ts
13633
+ /**
13634
+ * Creates a middleware that handles auto-migration based on config
13635
+ *
13636
+ * This middleware runs once on application startup and handles:
13637
+ * - autoMigrate: true - Always run migrations
13638
+ * - autoMigrate: false - Never run migrations (default)
13639
+ * - autoMigrate: 'development' - Only run when NODE_ENV is 'development'
13640
+ *
13641
+ * IMPORTANT: This middleware should run BEFORE the seed middleware
13642
+ * but AFTER the database middleware creates the connection.
13643
+ */
13644
+ const createMigrationMiddleware = (config$1) => {
13645
+ let migrationComplete = false;
13646
+ let migrationPromise = null;
13647
+ return async (c, next) => {
13648
+ const autoMigrate = config$1.autoMigrate ?? false;
13649
+ if (migrationComplete || autoMigrate === false) {
13650
+ await next();
13651
+ return;
13652
+ }
13653
+ if (!migrationPromise) migrationPromise = (async () => {
13654
+ try {
13655
+ const { detectDatabaseType, runAutoMigrations, createDatabaseFromConnection: createDatabaseFromConnection$1 } = await import("@llmops/core/db");
13656
+ const rawConnection = config$1.database;
13657
+ const dbType = detectDatabaseType(rawConnection);
13658
+ if (!dbType) {
13659
+ console.warn("[Migration] Could not detect database type, skipping auto-migration");
13660
+ return;
13661
+ }
13662
+ const schema = config$1.schema ?? "llmops";
13663
+ const db = await createDatabaseFromConnection$1(rawConnection, { schema });
13664
+ if (!db) {
13665
+ console.warn("[Migration] Could not create database connection, skipping auto-migration");
13666
+ return;
13667
+ }
13668
+ const result = await runAutoMigrations(db, dbType, autoMigrate, { schema });
13669
+ if (result.ran) console.log(`[Migration] Auto-migration completed: ${result.tables.length} table(s) created, ${result.fields.length} field(s) added`);
13670
+ } catch (error$45) {
13671
+ console.error("[Migration] Auto-migration failed:", error$45);
13672
+ } finally {
13673
+ migrationComplete = true;
13674
+ }
13675
+ })();
13676
+ await migrationPromise;
13677
+ await next();
13678
+ };
13679
+ };
13680
+
13625
13681
  //#endregion
13626
13682
  //#region src/index.ts
13627
13683
  const MODELS_DEV_LOGOS = "https://models.dev/logos";
@@ -13640,7 +13696,7 @@ const setConfigMiddleware = (config$1) => {
13640
13696
  };
13641
13697
  const createDatabaseMiddleware = (validatedConfig) => {
13642
13698
  return async (c, next) => {
13643
- const db = await createDatabaseFromConnection(validatedConfig.database);
13699
+ const db = await createDatabaseFromConnection(validatedConfig.database, { schema: validatedConfig.schema });
13644
13700
  if (!db) throw new Error("Failed to create database connection");
13645
13701
  const dataLayer = await createDataLayer(db);
13646
13702
  c.set("db", dataLayer);
@@ -13665,7 +13721,7 @@ const createLLMProvidersMiddleware = (config$1) => {
13665
13721
  };
13666
13722
  const createApp = (config$1) => {
13667
13723
  const validatedConfig = validateLLMOpsConfig(config$1);
13668
- return { app: new Hono().use("*", createEnvValidatorMiddleware()).use("*", setConfigMiddleware(validatedConfig)).use("*", createDatabaseMiddleware(validatedConfig)).use("*", createSeedMiddleware()).use("*", createLLMProvidersMiddleware(validatedConfig)).route("/", server_default).basePath(validatedConfig.basePath) };
13724
+ return { app: new Hono().use("*", createEnvValidatorMiddleware()).use("*", setConfigMiddleware(validatedConfig)).use("*", createMigrationMiddleware(validatedConfig)).use("*", createDatabaseMiddleware(validatedConfig)).use("*", createSeedMiddleware()).use("*", createLLMProvidersMiddleware(validatedConfig)).route("/", server_default).basePath(validatedConfig.basePath) };
13669
13725
  };
13670
13726
  var src_default = server_default;
13671
13727
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llmops/app",
3
- "version": "0.1.0-beta.8",
3
+ "version": "0.1.1-beta.1",
4
4
  "description": "LLMOps application with server and client",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -17,11 +17,20 @@
17
17
  "files": [
18
18
  "dist"
19
19
  ],
20
- "main": "./dist/index.mjs",
20
+ "main": "./dist/index.cjs",
21
21
  "module": "./dist/index.mjs",
22
22
  "types": "./dist/index.d.mts",
23
23
  "exports": {
24
- ".": "./dist/index.mjs",
24
+ ".": {
25
+ "import": {
26
+ "types": "./dist/index.d.mts",
27
+ "default": "./dist/index.mjs"
28
+ },
29
+ "require": {
30
+ "types": "./dist/index.d.cts",
31
+ "default": "./dist/index.cjs"
32
+ }
33
+ },
25
34
  "./package.json": "./package.json"
26
35
  },
27
36
  "publishConfig": {
@@ -55,8 +64,8 @@
55
64
  "motion": "^12.23.25",
56
65
  "react-aria-components": "^1.13.0",
57
66
  "react-hook-form": "^7.68.0",
58
- "@llmops/gateway": "0.1.0-beta.8",
59
- "@llmops/core": "0.1.0-beta.8"
67
+ "@llmops/core": "^0.1.1-beta.1",
68
+ "@llmops/gateway": "^0.1.1-beta.1"
60
69
  },
61
70
  "peerDependencies": {
62
71
  "react": "^19.2.1",
@@ -1 +0,0 @@
1
- import{k as c}from"./index-D11QRy5x.js";const e=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],t=c("check",e);export{t as C};
@@ -1 +0,0 @@
1
- import{k as J,r as N,b as B,e as z,f as E,l as Y,j as s,a as k,h as G,m as Z,I as H,u as ee,d as P,L as te,O as se}from"./index-D11QRy5x.js";import{c as ae,u as ie,g as ne,a as oe,b as le,d as ce,f as q,U as re,X as de,e as me,l as ue,r as fe,t as ge}from"./update-or-create-name-ChvLM3HZ.js";import{f as pe,u as he,w as A,b as Ce,C as xe,c as O,B as je,h as Q,H as be,a as ye,g as ve}from"./formatDistance-BVFQcxMW.js";import{T as Se,a as Ne,b as U,c as we,d as Re,e as Te}from"./table-Drk2TD58.js";import{u as De,q as W}from"./useConfigList-C8a_Opd6.js";import{B as L}from"./button-SaGwF9Mc.js";import{c as ke,a as _e,b as Me,d as $e,h as K}from"./index.esm-Di60kgGW.js";import{u as X}from"./useMutation-BfQR89Gz.js";import{C as Fe}from"./check-ZX167PJq.js";import{C as He}from"./copy-DuziMpq3.js";import{C as Be}from"./chevron-right-BVwp1PEQ.js";import{P as Ie}from"./plus-D8bVejky.js";/* empty css */import"./useButton-B0pv7V1F.js";/* empty css */const Le=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],ze=J("arrow-left",Le),V=ae();function Ee(){const[e,t]=N.useState([]),[a,n]=N.useState([]),[i,r]=N.useState(""),f=B(),{id:c}=z({strict:!1}),{data:v}=De(),p=E(),h=N.useCallback(o=>{p.prefetchQuery(Y(o))},[p]),b=N.useMemo(()=>[V.accessor("name",{header:"Name",cell:o=>o.getValue()}),V.accessor("createdAt",{header:"Creation Date",cell:o=>pe(new Date(o.getValue()),new Date,{addSuffix:!0})})],[]),g=ie({data:v||[],columns:b,state:{sorting:e,columnFilters:a,globalFilter:i},onSortingChange:t,onColumnFiltersChange:n,onGlobalFilterChange:r,getCoreRowModel:ce(),getFilteredRowModel:le(),getSortedRowModel:oe(),getPaginationRowModel:ne(),initialState:{pagination:{pageSize:100}}});return s.jsx("div",{children:s.jsxs(Se,{children:[s.jsx(Ne,{children:g.getHeaderGroups().map(o=>s.jsx(U,{children:o.headers.map(l=>{const d=l.column.getIsSorted();return s.jsx(we,{sortable:l.column.getCanSort(),onClick:l.column.getToggleSortingHandler(),sortDirection:d==="asc"?"asc":d==="desc"?"desc":null,children:l.isPlaceholder?null:q(l.column.columnDef.header,l.getContext())},l.id)})},o.id))}),s.jsx(Re,{children:g.getRowModel().rows.map(o=>s.jsx(U,{interactive:!0,selected:o.original.id===c,onMouseEnter:()=>h(o.original.id),onClick:()=>f({to:"/configs/$id",params:{id:o.original.id}}),children:o.getVisibleCells().map(l=>s.jsx(Te,{children:q(l.column.columnDef.cell,l.getContext())},l.id))},o.id))})]})})}const Pe=()=>{const e=k.c(3),t=B(),a=E();let n;return e[0]!==t||e[1]!==a?(n={mutationFn:qe,onSuccess:async i=>{await a.invalidateQueries({queryKey:W}),i?.id&&t({to:"/configs/$id",params:{id:i?.id}})}},e[0]=t,e[1]=a,e[2]=n):n=e[2],X(n)};async function qe(e){const a=await(await G.v1.configs.$post({json:{name:e.name}})).json();return"data"in a?a.data:void 0}const Ae=()=>{const e=k.c(2),t=E();let a;return e[0]!==t?(a={mutationFn:Oe,onSuccess:()=>{t.invalidateQueries({queryKey:W})}},e[0]=t,e[1]=a):a=e[1],X(a)};async function Oe(e){const a=await(await G.v1.configs[":id"].$patch({param:{id:e.id},json:{name:e.name}})).json();return"data"in a?a.data:void 0}const Qe=e=>{const t=k.c(6),{id:a,config:n,disabled:i}=e,{mutateAsync:r}=Pe(),{mutateAsync:f}=Ae();let c;return t[0]!==n||t[1]!==r||t[2]!==i||t[3]!==a||t[4]!==f?(c=s.jsx(re,{id:a,entity:n,placeholder:"Config Name",onCreate:r,onUpdate:f,disabled:i}),t[0]=n,t[1]=r,t[2]=i,t[3]=a,t[4]=f,t[5]=c):c=t[5],c},Ue=e=>{const t=k.c(25),{id:a}=e,n=B(),{data:i}=Z(a),[r,f]=N.useState(!1);let c;t[0]===Symbol.for("react.memo_cache_sentinel")?(c={strict:!1},t[0]=c):c=t[0];const v=z(c),p="variant"in v,h="environment"in v,b=p||h;let g;t[1]!==a||t[2]!==h||t[3]!==p||t[4]!==n?(g=()=>{n(p?{to:"/configs/$id/variants",params:{id:a}}:h?{to:"/configs/$id/targeting",params:{id:a}}:{to:"/configs"})},t[1]=a,t[2]=h,t[3]=p,t[4]=n,t[5]=g):g=t[5];const o=g;let l;t[6]!==i?(l=async()=>{i?.slug&&(await navigator.clipboard.writeText(i.slug),f(!0),setTimeout(()=>f(!1),2e3))},t[6]=i,t[7]=l):l=t[7];const d=l,S=b?ze:de;let m;t[8]!==S?(m=s.jsx(H,{icon:S}),t[8]=S,t[9]=m):m=t[9];let C;t[10]!==o||t[11]!==m?(C=s.jsx(L,{onClick:o,size:"icon",scheme:"gray",variant:"ghost",children:m}),t[10]=o,t[11]=m,t[12]=C):C=t[12];const y=i??void 0;let u;t[13]!==a||t[14]!==b||t[15]!==y?(u=s.jsx(Qe,{id:a,config:y,disabled:b},a),t[13]=a,t[14]=b,t[15]=y,t[16]=u):u=t[16];let x;t[17]!==r||t[18]!==i||t[19]!==d?(x=i?.slug&&s.jsxs("div",{className:ke,children:[s.jsx("span",{className:_e,children:"Config Id"}),s.jsx("span",{className:Me,children:i.slug}),s.jsx("button",{type:"button",className:$e,onClick:d,"aria-label":"Copy config ID",children:r?s.jsx(Fe,{size:14}):s.jsx(He,{size:14})})]}),t[17]=r,t[18]=i,t[19]=d,t[20]=x):x=t[20];let j;return t[21]!==C||t[22]!==u||t[23]!==x?(j=s.jsxs("div",{className:K,children:[C,u,x]}),t[21]=C,t[22]=u,t[23]=x,t[24]=j):j=t[24],j};function rt(){const e=k.c(40),{containerRef:t,setTileWidth:a}=me();let n;e[0]===Symbol.for("react.memo_cache_sentinel")?(n={strict:!1},e[0]=n):n=e[0];const i=z(n),r=B(),f=ee(),{toggleSidebar:c}=he();let v;e[1]!==f?(v=f.filter(Ge).map(Ve),e[1]=f,e[2]=v):v=e[2];const p=v;let h;e[3]!==r?(h=()=>{r({to:"/configs/$id",params:{id:"new"}})},e[3]=r,e[4]=h):h=e[4];const b=h;let g;e[5]!==i.id||e[6]!==a?(g=()=>{i?.id?a("25%"):a("100%")},e[5]=i.id,e[6]=a,e[7]=g):g=e[7];const o=i?.id;let l;e[8]!==o?(l=[o],e[8]=o,e[9]=l):l=e[9],N.useEffect(g,l);let d;e[10]!==c?(d=()=>{c()},e[10]=c,e[11]=d):d=e[11];let S;e[12]===Symbol.for("react.memo_cache_sentinel")?(S=s.jsx(H,{icon:xe}),e[12]=S):S=e[12];let m;e[13]!==d?(m=s.jsx(L,{onClick:d,size:"icon",variant:"ghost",scheme:"gray",children:S}),e[13]=d,e[14]=m):m=e[14];let C;e[15]===Symbol.for("react.memo_cache_sentinel")?(C=s.jsx(H,{icon:Be,className:O}),e[15]=C):C=e[15];let y;e[16]!==p?(y=s.jsx(je,{items:p}),e[16]=p,e[17]=y):y=e[17];let u;e[18]!==y||e[19]!==m?(u=s.jsxs("div",{className:Q,children:[m,C,y]}),e[18]=y,e[19]=m,e[20]=u):u=e[20];let x;e[21]===Symbol.for("react.memo_cache_sentinel")?(x=s.jsx(H,{icon:Ie,className:O}),e[21]=x):x=e[21];let j;e[22]!==b?(j=s.jsx("div",{className:Q,children:s.jsxs(L,{variant:"outline",scheme:"gray",onClick:b,children:[x,"New Config"]})}),e[22]=b,e[23]=j):j=e[23];let w;e[24]!==u||e[25]!==j?(w=s.jsxs(be,{className:ye,children:[u,j]}),e[24]=u,e[25]=j,e[26]=w):w=e[26];let _,M;e[27]===Symbol.for("react.memo_cache_sentinel")?(_=s.jsxs("div",{className:P(A,ue),children:[s.jsx("div",{className:K}),s.jsx(Ee,{})]}),M=P(A,fe),e[27]=_,e[28]=M):(_=e[27],M=e[28]);const I=i.id;let R;e[29]!==I?(R=s.jsx(Ue,{id:I}),e[29]=I,e[30]=R):R=e[30];let $;e[31]===Symbol.for("react.memo_cache_sentinel")?($=s.jsx(se,{}),e[31]=$):$=e[31];let T;e[32]!==R?(T=s.jsx("div",{className:M,children:s.jsxs("div",{children:[R,$]})}),e[32]=R,e[33]=T):T=e[33];let D;e[34]!==t||e[35]!==T?(D=s.jsx("div",{className:ve,children:s.jsxs("div",{ref:t,className:ge,children:[_,T]})}),e[34]=t,e[35]=T,e[36]=D):D=e[36];let F;return e[37]!==w||e[38]!==D?(F=s.jsxs(s.Fragment,{children:[w,D]}),e[37]=w,e[38]=D,e[39]=F):F=e[39],F}function Ve(e){const t=e.loaderData?.title,a=e.staticData.customData?.title,n=t??a;return{key:e.id,label:s.jsx(te,{to:e.pathname,className:Ce,children:n}),prefix:e.staticData.customData?.icon}}function Ge(e){return!!e.staticData.customData?.title||!!e.loaderData?.title}export{rt as component};
@@ -1 +0,0 @@
1
- import{c as H,a as L,u as E,b as I,d as V,j as s,L as A,I as y,S as $}from"./index-D11QRy5x.js";import{u as z,w as F,f as G,b as M,C as U,c as W,B as q,h as D,H as J,a as K,g as O}from"./formatDistance-BVFQcxMW.js";import{B as P}from"./button-SaGwF9Mc.js";import{T as Q,a as X,b as k,c as w,d as Y,e as B}from"./table-Drk2TD58.js";import{u as Z}from"./useConfigList-C8a_Opd6.js";import{C as ee}from"./chevron-right-BVwp1PEQ.js";/* empty css */import"./useButton-B0pv7V1F.js";var se="_1xlxh5s0",te="_1xlxh5s1",ae="_1xlxh5s2",le="_1xlxh5s3",ie="_1xlxh5s5 _1xlxh5s4 _1lg22bks0 _1lg22bksf _1lg22bktu",re=H({defaultClassName:"_1xlxh5s6",variantClassNames:{variant:{primary:"_1xlxh5s7"}},defaultVariants:{},compoundVariants:[]}),ne="_1xlxh5s9 _1xlxh5s8 _1lg22bkvx",R="_1xlxh5sb _1xlxh5sa _1lg22bkw0";function ve(){const e=L.c(38),{toggleSidebar:t}=z(),r=E(),u=I(),{data:N}=Z();let a,l,n,c,i;if(e[0]!==N||e[1]!==r||e[2]!==u||e[3]!==t){const S=N?.slice().sort(me).slice(0,3);let j;e[9]!==r?(j=r.filter(oe).map(ce),e[9]=r,e[10]=j):j=e[10];const T=j;let d;e[11]!==t?(d=()=>{t()},e[11]=t,e[12]=d):d=e[12];let b;e[13]===Symbol.for("react.memo_cache_sentinel")?(b=s.jsx(y,{icon:U}),e[13]=b):b=e[13];let x;e[14]!==d?(x=s.jsx(P,{onClick:d,size:"icon",variant:"ghost",scheme:"gray",children:b}),e[14]=d,e[15]=x):x=e[15];let v;e[16]===Symbol.for("react.memo_cache_sentinel")?(v=s.jsx(y,{icon:ee,className:W}),e[16]=v):v=e[16];let h;e[17]!==T?(h=s.jsx(q,{items:T}),e[17]=T,e[18]=h):h=e[18];let f;e[19]!==h||e[20]!==x?(f=s.jsxs("div",{className:D,children:[x,v,h]}),e[19]=h,e[20]=x,e[21]=f):f=e[21];let _;e[22]===Symbol.for("react.memo_cache_sentinel")?(_=s.jsx("div",{className:D}),e[22]=_):_=e[22],e[23]!==f?(i=s.jsxs(J,{className:K,children:[f,_]}),e[23]=f,e[24]=i):i=e[24],c=O,e[25]===Symbol.for("react.memo_cache_sentinel")?(a=V(F,se),e[25]=a):a=e[25];let g;e[26]===Symbol.for("react.memo_cache_sentinel")?(g=s.jsx("h2",{className:R,children:"Get Started"}),e[26]=g):g=e[26],e[27]===Symbol.for("react.memo_cache_sentinel")?(l=s.jsxs("div",{className:te,children:[g,s.jsx("div",{className:ie,children:s.jsxs(A,{to:"/configs/$id",params:{id:"new"},className:re({variant:"primary"}),children:[s.jsx(y,{icon:$,size:"lg"}),s.jsx("span",{className:ne,children:"Create New Config"})]})})]}),e[27]=l):l=e[27],n=S&&S.length>0&&s.jsxs("div",{className:ae,children:[s.jsx("h2",{className:R,children:"Recent"}),s.jsx("div",{className:le,children:s.jsxs(Q,{children:[s.jsx(X,{children:s.jsxs(k,{children:[s.jsx(w,{children:"Name"}),s.jsx(w,{children:"Updated"})]})}),s.jsx(Y,{children:S.map(C=>s.jsxs(k,{interactive:!0,onClick:()=>u({to:"/configs/$id",params:{id:C.id}}),children:[s.jsx(B,{children:C.name}),s.jsx(B,{children:G(new Date(C.updatedAt),new Date,{addSuffix:!0})})]},C.id))})]})})]}),e[0]=N,e[1]=r,e[2]=u,e[3]=t,e[4]=a,e[5]=l,e[6]=n,e[7]=c,e[8]=i}else a=e[4],l=e[5],n=e[6],c=e[7],i=e[8];let o;e[28]!==a||e[29]!==l||e[30]!==n?(o=s.jsxs("div",{className:a,children:[l,n]}),e[28]=a,e[29]=l,e[30]=n,e[31]=o):o=e[31];let m;e[32]!==c||e[33]!==o?(m=s.jsx("div",{className:c,children:o}),e[32]=c,e[33]=o,e[34]=m):m=e[34];let p;return e[35]!==i||e[36]!==m?(p=s.jsxs(s.Fragment,{children:[i,m]}),e[35]=i,e[36]=m,e[37]=p):p=e[37],p}function ce(e){const t=e.loaderData?.title,r=e.staticData.customData?.title,u=t??r;return{key:e.id,label:s.jsx(A,{to:e.pathname,className:M,children:u}),prefix:e.staticData.customData?.icon}}function oe(e){return!!e.staticData.customData?.title||!!e.loaderData?.title}function me(e,t){return new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()}export{ve as component};
@@ -1 +0,0 @@
1
- import"./index-D11QRy5x.js";var t="_1rf6rl0",a="_1rf6rl1",n="_1rf6rl2";export{a,n as b,t as n};
@@ -1 +0,0 @@
1
- import"./index-D11QRy5x.js";var r="tye0o0",t="tye0o1";export{r as a,t as v};