@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.
- package/dist/.vite/manifest.json +152 -149
- package/dist/assets/{Form-BqIR54aK.js → Form-DurABL93.js} +1 -1
- package/dist/assets/{_environment-B9slLxIM.js → _environment-cvjo84jE.js} +1 -1
- package/dist/assets/{_tabs-8WlaRf6k.js → _tabs-CPULxPXH.js} +1 -1
- package/dist/assets/{_tabs-CGwO4MTn.js → _tabs-CvacR8ma.js} +1 -1
- package/dist/assets/{_variant-COPD7jVX.js → _variant-D-Su5y6J.js} +1 -1
- package/dist/assets/{_variants-D4jD1121.js → _variants-GQL6AngK.js} +1 -1
- package/dist/assets/{button-SaGwF9Mc.js → button-BEBWfv3K.js} +1 -1
- package/dist/assets/check-Ch_sNRmE.js +1 -0
- package/dist/assets/{chevron-right-BVwp1PEQ.js → chevron-right-CB5eOw5R.js} +1 -1
- package/dist/assets/configs-BKxrD14d.css +1 -0
- package/dist/assets/configs-Ckb1Gh45.js +1 -0
- package/dist/assets/{copy-DuziMpq3.js → copy-zjZRJuNG.js} +1 -1
- package/dist/assets/{environments-CDgsUGPY.js → environments-DtJ5Lpag.js} +1 -1
- package/dist/assets/favicon.ico +0 -0
- package/dist/assets/{formatDistance-BVFQcxMW.js → formatDistance-BLefUVjS.js} +1 -1
- package/dist/assets/{index-DVICBb7E.js → index-Bx7fi-TU.js} +1 -1
- package/dist/assets/index-D0RzYU3K.js +1 -0
- package/dist/assets/{index-g0mwFYMe.js → index-DnOI3CO7.js} +1 -1
- package/dist/assets/{index-Dp_a_2-B.css → index-JoHQ-XGK.css} +1 -1
- package/dist/assets/{index-D11QRy5x.js → index-P3WhIAgM.js} +2 -2
- package/dist/assets/{index.esm-Di60kgGW.js → index.esm-JXXIAvjH.js} +1 -1
- package/dist/assets/new-config-state.css-DYWW4gMw.js +1 -0
- package/dist/assets/{plus-D8bVejky.js → plus-NtaGeY4B.js} +1 -1
- package/dist/assets/{route-BAJxFoUd.js → route-CILbCcM1.js} +1 -1
- package/dist/assets/{route-Cve62xlf.js → route-O6imc6-P.js} +1 -1
- package/dist/assets/{secrets-Dfc4KsFB.js → secrets-C7EM3Vc4.js} +1 -1
- package/dist/assets/{settings-CkD4z_Hv.js → settings-BKtjj2be.js} +1 -1
- package/dist/assets/{settings-9UcgXAim.js → settings-BaUSziYN.js} +1 -1
- package/dist/assets/{table-Drk2TD58.js → table-3bd5M2VH.js} +1 -1
- package/dist/assets/{tabs.css-DM-zwDZg.js → tabs.css-BtjQBzCx.js} +1 -1
- package/dist/assets/{targeting-BjdUM5MM.js → targeting-ER2jmmgx.js} +1 -1
- package/dist/assets/{update-or-create-name-ChvLM3HZ.js → update-or-create-name-DL3P6ioS.js} +1 -1
- package/dist/assets/{useButton-B0pv7V1F.js → useButton-BsGawsAH.js} +1 -1
- package/dist/assets/{useConfigList-C8a_Opd6.js → useConfigList-82kvWQBI.js} +1 -1
- package/dist/assets/{useConfigVariants-COgsOizX.js → useConfigVariants-6VXcu6gd.js} +1 -1
- package/dist/assets/{useEnvironments-Byl0U2nG.js → useEnvironments-CnQLCTUT.js} +1 -1
- package/dist/assets/{useMutation-BfQR89Gz.js → useMutation-CfseLGia.js} +1 -1
- package/dist/assets/{useRole-BYxeh9v-.js → useRole-DgeL5bnU.js} +1 -1
- package/dist/assets/{useSetTargeting-DcIQi2U_.js → useSetTargeting-DaZE0wc4.js} +1 -1
- package/dist/assets/{useTargetingRules-BcM1fgTv.js → useTargetingRules-DQJaFv3c.js} +1 -1
- package/dist/assets/{useValueChanged-D6EOv1Ly.js → useValueChanged-CNJVEKor.js} +1 -1
- package/dist/assets/{variants-BiG-9VgB.js → variants-Ctf9tC34.js} +1 -1
- package/dist/assets/variants.css-C0L7Oivg.js +1 -0
- package/dist/index.cjs +13756 -0
- package/dist/index.d.cts +30 -0
- package/dist/index.mjs +59 -3
- package/package.json +14 -5
- package/dist/assets/check-ZX167PJq.js +0 -1
- package/dist/assets/configs-Cn2mggPE.js +0 -1
- package/dist/assets/index-qZssbb5m.js +0 -1
- package/dist/assets/new-config-state.css-DDvxSlIO.js +0 -1
- package/dist/assets/variants.css-CN3aJiTg.js +0 -1
package/dist/index.d.cts
ADDED
|
@@ -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-
|
|
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.
|
|
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.
|
|
20
|
+
"main": "./dist/index.cjs",
|
|
21
21
|
"module": "./dist/index.mjs",
|
|
22
22
|
"types": "./dist/index.d.mts",
|
|
23
23
|
"exports": {
|
|
24
|
-
".":
|
|
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/
|
|
59
|
-
"@llmops/
|
|
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};
|