cross-seed 7.0.0-23 → 7.0.0-24

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 (41) hide show
  1. package/dist/cmd.js +0 -0
  2. package/dist/migrations/17-api-key-settings-json.js +4 -4
  3. package/dist/migrations/17-api-key-settings-json.js.map +1 -1
  4. package/dist/startup.js +11 -0
  5. package/dist/startup.js.map +1 -1
  6. package/dist/trpc/routers/index.d.ts +1 -1
  7. package/dist/trpc/routers/library.d.ts +1 -1
  8. package/dist/trpc/routers/searchees.d.ts +51 -0
  9. package/dist/trpc/routers/searchees.js +90 -0
  10. package/dist/trpc/routers/searchees.js.map +1 -0
  11. package/dist/webui/assets/{Page-CKwSnUie.js → Page-DZliN5uq.js} +1 -1
  12. package/dist/webui/assets/{array-field-DM2mAVqa.js → array-field-BHBrqDld.js} +1 -1
  13. package/dist/webui/assets/{clients-B5C80D0F.js → clients-DEH8qC2q.js} +1 -1
  14. package/dist/webui/assets/{connect-BM7yGLAl.js → connect-C8l2EayP.js} +1 -1
  15. package/dist/webui/assets/{debug-C8d57uIb.js → debug-CjvfxV54.js} +1 -1
  16. package/dist/webui/assets/{directories-DkJnb01t.js → directories-DL0V-Cbw.js} +1 -1
  17. package/dist/webui/assets/{duration-field-w-qiOS_S.js → duration-field-FiL5cLWS.js} +1 -1
  18. package/dist/webui/assets/{general-2HmkyF5T.js → general-wl6lqc3Y.js} +1 -1
  19. package/dist/webui/assets/{health-D6tv4ioy.js → health-Be_kHa4q.js} +1 -1
  20. package/dist/webui/assets/index-5sKeftdo.css +2 -0
  21. package/dist/webui/assets/{index-NlorOk2I.js → index-HzJ-_tmu.js} +3 -3
  22. package/dist/webui/assets/{jobs-Do8vAIqy.js → jobs-DpxGgW5P.js} +1 -1
  23. package/dist/webui/assets/{library-B1r1nAY-.js → library-CiAWQeFl.js} +1 -1
  24. package/dist/webui/assets/{logs-_rm8bxf-.js → logs-Cc83N4hN.js} +1 -1
  25. package/dist/webui/assets/{number-field-CeKyqI7R.js → number-field-Cw5yWi7_.js} +1 -1
  26. package/dist/webui/assets/{required-indicator-Ba9NOQEP.js → required-indicator-DU_Lp1S1.js} +1 -1
  27. package/dist/webui/assets/{routes-Djgf7dZI.js → routes-LvAQTbMW.js} +1 -1
  28. package/dist/webui/assets/{search-DGY0ui92.js → search-DqCt1cvb.js} +1 -1
  29. package/dist/webui/assets/{select-BzZ418Yt.js → select-D1_fvqIj.js} +1 -1
  30. package/dist/webui/assets/{select-field-DsBowTDT.js → select-field-BUKFWBZw.js} +1 -1
  31. package/dist/webui/assets/settings-DzqjduYE.js +1 -0
  32. package/dist/webui/assets/{sidebar-Qy-rYdhU.js → sidebar-ClCnahDY.js} +1 -1
  33. package/dist/webui/assets/{submit-button-Bx2Dvr03.js → submit-button-Cm1eHd8x.js} +1 -1
  34. package/dist/webui/assets/{switch-field-p-JPVVvW.js → switch-field--cYuAHH7.js} +1 -1
  35. package/dist/webui/assets/{text-field-B0a3dEGb.js → text-field-PdzWz8yP.js} +1 -1
  36. package/dist/webui/assets/{trackers-DG-YCaaO.js → trackers-Dcl31Sh8.js} +1 -1
  37. package/dist/webui/assets/{use-settings-form-submit-CDmMUcwW.js → use-settings-form-submit-Lp26uOhf.js} +3 -3
  38. package/dist/webui/index.html +3 -3
  39. package/package.json +1 -1
  40. package/dist/webui/assets/index-UQKt4Igp.css +0 -2
  41. package/dist/webui/assets/settings-B4G8vHXc.js +0 -1
package/dist/cmd.js CHANGED
File without changes
@@ -1,11 +1,11 @@
1
1
  async function up(knex) {
2
2
  const rows = await knex("settings").select("id", "apikey", "settings_json");
3
3
  for (const row of rows) {
4
- if (!row.apikey)
4
+ // A legacy API key is not evidence that file configuration was imported.
5
+ // Startup preserves this key when it imports the v6 config.
6
+ if (!row.apikey || row.settings_json == null)
5
7
  continue;
6
- const settings = row.settings_json == null
7
- ? {}
8
- : JSON.parse(row.settings_json);
8
+ const settings = JSON.parse(row.settings_json);
9
9
  if (typeof settings.apiKey === "string" && settings.apiKey.length > 0) {
10
10
  continue;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"17-api-key-settings-json.js","sourceRoot":"","sources":["../../src/migrations/17-api-key-settings-json.ts"],"names":[],"mappings":"AAQA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAc,UAAU,CAAC,CAAC,MAAM,CACtD,IAAI,EACJ,QAAQ,EACR,eAAe,CACf,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,SAAS;QAE1B,MAAM,QAAQ,GACb,GAAG,CAAC,aAAa,IAAI,IAAI;YACxB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAA6B,CAAC;QAC/D,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,SAAS;QACV,CAAC;QAED,MAAM,IAAI,CAAC,UAAU,CAAC;aACpB,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;aACrB,MAAM,CAAC;YACP,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC7B,GAAG,QAAQ;gBACX,MAAM,EAAE,GAAG,CAAC,MAAM;aAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;AACF,CAAC;AAED,KAAK,UAAU,IAAI,KAAmB,CAAC;AAEvC,eAAe,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"17-api-key-settings-json.js","sourceRoot":"","sources":["../../src/migrations/17-api-key-settings-json.ts"],"names":[],"mappings":"AAQA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAc,UAAU,CAAC,CAAC,MAAM,CACtD,IAAI,EACJ,QAAQ,EACR,eAAe,CACf,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,yEAAyE;QACzE,4DAA4D;QAC5D,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,aAAa,IAAI,IAAI;YAAE,SAAS;QAEvD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAG5C,CAAC;QACF,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,SAAS;QACV,CAAC;QAED,MAAM,IAAI,CAAC,UAAU,CAAC;aACpB,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;aACrB,MAAM,CAAC;YACP,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC7B,GAAG,QAAQ;gBACX,MAAM,EAAE,GAAG,CAAC,MAAM;aAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;AACF,CAAC;AAED,KAAK,UAAU,IAAI,KAAmB,CAAC;AAEvC,eAAe,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
package/dist/startup.js CHANGED
@@ -113,6 +113,17 @@ export async function determineRuntimeConfig(rawOptions) {
113
113
  catch (dbError) {
114
114
  logger.debug("Unable to load configuration from database", dbError);
115
115
  }
116
+ // Recover upgrades where migration 17 created an API-key-only config before
117
+ // the file could be imported. Require the legacy key and original file so
118
+ // ordinary v7 database configuration continues to take precedence.
119
+ if (dbOverrides?.apiKey &&
120
+ Object.keys(dbOverrides).length === 1 &&
121
+ !(await notExists(getFileConfigPath()))) {
122
+ const legacySettings = await db("settings").select("apikey").first();
123
+ if (legacySettings?.apikey === dbOverrides.apiKey) {
124
+ dbOverrides = undefined;
125
+ }
126
+ }
116
127
  if (dbOverrides !== undefined) {
117
128
  return {
118
129
  ...getDefaultRuntimeConfig(),
@@ -1 +1 @@
1
- {"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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"}
@@ -416,7 +416,7 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
416
416
  limit?: number | undefined;
417
417
  offset?: number | undefined;
418
418
  cursor?: string | null | undefined;
419
- sortBy?: "title" | "length" | "source" | "lastSeenAt" | undefined;
419
+ sortBy?: "source" | "length" | "title" | "lastSeenAt" | undefined;
420
420
  sortDirection?: "asc" | "desc" | undefined;
421
421
  } | undefined;
422
422
  output: {
@@ -13,7 +13,7 @@ export declare const libraryRouter: import("@trpc/server").TRPCBuiltRouter<{
13
13
  limit?: number | undefined;
14
14
  offset?: number | undefined;
15
15
  cursor?: string | null | undefined;
16
- sortBy?: "title" | "length" | "source" | "lastSeenAt" | undefined;
16
+ sortBy?: "source" | "length" | "title" | "lastSeenAt" | undefined;
17
17
  sortDirection?: "asc" | "desc" | undefined;
18
18
  } | undefined;
19
19
  output: {
@@ -0,0 +1,51 @@
1
+ export declare const searcheesRouter: import("@trpc/server").TRPCBuiltRouter<{
2
+ ctx: import("../index.js").Context;
3
+ meta: object;
4
+ errorShape: import("@trpc/server").TRPCDefaultErrorShape;
5
+ transformer: false;
6
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
7
+ list: import("@trpc/server").TRPCQueryProcedure<{
8
+ input: {
9
+ search?: string | undefined;
10
+ limit?: number | undefined;
11
+ offset?: number | undefined;
12
+ } | undefined;
13
+ output: {
14
+ total: number;
15
+ pagination: {
16
+ limit: number;
17
+ offset: number;
18
+ };
19
+ sourceCounts: import("../../libraryInventory.js").LibrarySourceCount[];
20
+ indexerTotals: {
21
+ configured: number;
22
+ enabled: number;
23
+ };
24
+ items: {
25
+ id: string;
26
+ name: string;
27
+ indexerCount: number;
28
+ firstSearchedAt: null;
29
+ lastSearchedAt: null;
30
+ label: null;
31
+ source: "torrentClient" | "torrentFile" | "dataDir";
32
+ length: number;
33
+ clientHost: string | null;
34
+ }[];
35
+ };
36
+ meta: object;
37
+ }>;
38
+ bulkSearch: import("@trpc/server").TRPCMutationProcedure<{
39
+ input: {
40
+ names: string[];
41
+ force?: boolean | undefined;
42
+ };
43
+ output: {
44
+ requested: number;
45
+ attempted: number;
46
+ totalFound: number;
47
+ skipped: number;
48
+ };
49
+ meta: object;
50
+ }>;
51
+ }>>;
@@ -0,0 +1,90 @@
1
+ import { z } from "zod";
2
+ import { TRPCError } from "@trpc/server";
3
+ import { router, authedProcedure } from "../index.js";
4
+ import { bulkSearchByNames } from "../../pipeline.js";
5
+ import { getAllIndexers, getEnabledIndexers } from "../../indexers.js";
6
+ import { listLibraryItems } from "../../libraryInventory.js";
7
+ const DEFAULT_LIMIT = 50;
8
+ const MAX_BULK_SEARCH = 20;
9
+ export const searcheesRouter = router({
10
+ list: authedProcedure
11
+ .input(z
12
+ .object({
13
+ search: z.string().trim().min(1).max(200).optional(),
14
+ limit: z
15
+ .number()
16
+ .int()
17
+ .min(1)
18
+ .max(200)
19
+ .default(DEFAULT_LIMIT),
20
+ offset: z.number().int().min(0).default(0),
21
+ })
22
+ .default({
23
+ limit: DEFAULT_LIMIT,
24
+ offset: 0,
25
+ }))
26
+ .query(async ({ input }) => {
27
+ const { search, limit, offset } = input;
28
+ const [libraryItems, allIndexers, enabledIndexers] = await Promise.all([
29
+ listLibraryItems({ search, limit, offset }),
30
+ getAllIndexers(),
31
+ getEnabledIndexers(),
32
+ ]);
33
+ return {
34
+ total: libraryItems.total,
35
+ pagination: {
36
+ limit,
37
+ offset,
38
+ },
39
+ sourceCounts: libraryItems.sourceCounts,
40
+ indexerTotals: {
41
+ configured: allIndexers.length,
42
+ enabled: enabledIndexers.length,
43
+ },
44
+ items: libraryItems.items.map((item) => ({
45
+ id: item.sourceKey,
46
+ name: item.title || item.name,
47
+ indexerCount: 0,
48
+ firstSearchedAt: null,
49
+ lastSearchedAt: null,
50
+ label: null,
51
+ source: item.source,
52
+ length: item.length,
53
+ clientHost: item.clientHost,
54
+ })),
55
+ };
56
+ }),
57
+ bulkSearch: authedProcedure
58
+ .input(z.object({
59
+ names: z
60
+ .array(z.string().trim().min(1).max(500))
61
+ .min(1, "Select at least one item")
62
+ .max(MAX_BULK_SEARCH, `You can only bulk search up to ${MAX_BULK_SEARCH} items at a time`),
63
+ force: z.boolean().optional().default(false),
64
+ }))
65
+ .mutation(async ({ input }) => {
66
+ const uniqueNames = Array.from(new Set(input.names
67
+ .map((name) => name.trim())
68
+ .filter((name) => name.length > 0)));
69
+ if (!uniqueNames.length) {
70
+ throw new TRPCError({
71
+ code: "BAD_REQUEST",
72
+ message: "No valid item names provided for bulk search",
73
+ });
74
+ }
75
+ const configOverride = input.force
76
+ ? {
77
+ excludeRecentSearch: 1,
78
+ excludeOlder: Number.MAX_SAFE_INTEGER,
79
+ }
80
+ : undefined;
81
+ const { attempted, totalFound, requested } = await bulkSearchByNames(uniqueNames, configOverride ? { configOverride } : undefined);
82
+ return {
83
+ requested,
84
+ attempted,
85
+ totalFound,
86
+ skipped: Math.max(requested - attempted, 0),
87
+ };
88
+ }),
89
+ });
90
+ //# sourceMappingURL=searchees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchees.js","sourceRoot":"","sources":["../../../src/trpc/routers/searchees.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{B as r,N as i,P as a,ft as o,h as s}from"./sidebar-Qy-rYdhU.js";import{a as c,t as l}from"./useSelector-BoN-mufS.js";import{a as u,i as d,r as f}from"./dist-B7BqKb_s.js";import{t as p}from"./button-DoKPR9Fv.js";import{t as m}from"./createLucideIcon-Cv-_CLkr.js";import{c as h,i as g,n as _,r as v,s as y}from"./dist-ChMQZgJB.js";import{a as b,c as x,d as S,f as C,h as w,i as T,l as ee,m as E,o as D,p as te,r as ne,s as O,u as re}from"./dist-CXZZv-cf.js";function k(e){let t=c();return l(t.stores.location,r(e,t))}var ie=m(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),A=m(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),ae=m(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),j=e(n(),1),M=t();function N(e){let t=oe(e),n=j.forwardRef((e,n)=>{let{children:r,...i}=e,a=j.Children.toArray(r),o=a.find(ce);if(o){let e=o.props.children,r=a.map(t=>t===o?j.Children.count(e)>1?j.Children.only(null):j.isValidElement(e)?e.props.children:null:t);return(0,M.jsx)(t,{...i,ref:n,children:j.isValidElement(e)?j.cloneElement(e,void 0,r):null})}return(0,M.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function oe(e){let t=j.forwardRef((e,t)=>{let{children:n,...r}=e;if(j.isValidElement(n)){let e=le(n),i=P(r,n.props);return n.type!==j.Fragment&&(i.ref=t?f(t,e):e),j.cloneElement(n,i)}return j.Children.count(n)>1?j.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var se=Symbol(`radix.slottable`);function ce(e){return j.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===se}function P(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function le(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function ue(e){let t=e+`CollectionProvider`,[n,r]=y(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=e=>{let{scope:t,children:n}=e,r=j.useRef(null),a=j.useRef(new Map).current;return(0,M.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})};o.displayName=t;let s=e+`CollectionSlot`,c=N(s),l=j.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=a(s,n),o=d(t,i.collectionRef);return(0,M.jsx)(c,{ref:o,children:r})});l.displayName=s;let u=e+`CollectionItemSlot`,f=`data-radix-collection-item`,p=N(u),m=j.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=j.useRef(null),s=d(t,o),c=a(u,n);return j.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,M.jsx)(p,{[f]:``,ref:s,children:r})});m.displayName=u;function h(t){let n=a(e+`CollectionConsumer`,t);return j.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${f}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:o,Slot:l,ItemSlot:m},h,r]}var de=j.createContext(void 0);function fe(e){let t=j.useContext(de);return e||t||`ltr`}var pe=`rovingFocusGroup.onEntryFocus`,me={bubbles:!1,cancelable:!0},F=`RovingFocusGroup`,[he,ge,_e]=ue(F),[ve,ye]=y(F,[_e]),[be,xe]=ve(F),Se=j.forwardRef((e,t)=>(0,M.jsx)(he.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,M.jsx)(he.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,M.jsx)(Ce,{...e,ref:t})})}));Se.displayName=F;var Ce=j.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:l,preventScrollOnEntryFocus:u=!1,...f}=e,p=j.useRef(null),m=d(t,p),v=fe(a),[y,b]=g({prop:o,defaultProp:s??null,onChange:c,caller:F}),[x,S]=j.useState(!1),C=E(l),w=ge(n),T=j.useRef(!1),[ee,D]=j.useState(0);return j.useEffect(()=>{let e=p.current;if(e)return e.addEventListener(pe,C),()=>e.removeEventListener(pe,C)},[C]),(0,M.jsx)(be,{scope:n,orientation:r,dir:v,loop:i,currentTabStopId:y,onItemFocus:j.useCallback(e=>b(e),[b]),onItemShiftTab:j.useCallback(()=>S(!0),[]),onFocusableItemAdd:j.useCallback(()=>D(e=>e+1),[]),onFocusableItemRemove:j.useCallback(()=>D(e=>e-1),[]),children:(0,M.jsx)(_.div,{tabIndex:x||ee===0?-1:0,"data-orientation":r,...f,ref:m,style:{outline:`none`,...e.style},onMouseDown:h(e.onMouseDown,()=>{T.current=!0}),onFocus:h(e.onFocus,e=>{let t=!T.current;if(e.target===e.currentTarget&&t&&!x){let t=new CustomEvent(pe,me);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=w().filter(e=>e.focusable);ke([e.find(e=>e.active),e.find(e=>e.id===y),...e].filter(Boolean).map(e=>e.ref.current),u)}}T.current=!1}),onBlur:h(e.onBlur,()=>S(!1))})})}),we=`RovingFocusGroupItem`,Te=j.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=w(),l=a||c,u=xe(we,n),d=u.currentTabStopId===l,f=ge(n),{onFocusableItemAdd:p,onFocusableItemRemove:m,currentTabStopId:g}=u;return j.useEffect(()=>{if(r)return p(),()=>m()},[r,p,m]),(0,M.jsx)(he.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:(0,M.jsx)(_.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...s,ref:t,onMouseDown:h(e.onMouseDown,e=>{r?u.onItemFocus(l):e.preventDefault()}),onFocus:h(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:h(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){u.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=Oe(e,u.orientation,u.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=f().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=u.loop?Ae(n,r+1):n.slice(r+1)}setTimeout(()=>ke(n))}}),children:typeof o==`function`?o({isCurrentTabStop:d,hasTabStop:g!=null}):o})})});Te.displayName=we;var Ee={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function De(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function Oe(e,t,n){let r=De(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return Ee[r]}function ke(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function Ae(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var je=Se,Me=Te;function Ne(e){let t=Pe(e),n=j.forwardRef((e,n)=>{let{children:r,...i}=e,a=j.Children.toArray(r),o=a.find(Ie);if(o){let e=o.props.children,r=a.map(t=>t===o?j.Children.count(e)>1?j.Children.only(null):j.isValidElement(e)?e.props.children:null:t);return(0,M.jsx)(t,{...i,ref:n,children:j.isValidElement(e)?j.cloneElement(e,void 0,r):null})}return(0,M.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function Pe(e){let t=j.forwardRef((e,t)=>{let{children:n,...r}=e;if(j.isValidElement(n)){let e=Re(n),i=Le(r,n.props);return n.type!==j.Fragment&&(i.ref=t?f(t,e):e),j.cloneElement(n,i)}return j.Children.count(n)>1?j.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Fe=Symbol(`radix.slottable`);function Ie(e){return j.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===Fe}function Le(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function Re(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var I=[`Enter`,` `],ze=[`ArrowDown`,`PageUp`,`Home`],Be=[`ArrowUp`,`PageDown`,`End`],Ve=[...ze,...Be],He={ltr:[...I,`ArrowRight`],rtl:[...I,`ArrowLeft`]},Ue={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},L=`Menu`,[R,We,Ge]=ue(L),[z,Ke]=y(L,[Ge,O,ye]),B=O(),qe=ye(),[Je,V]=z(L),[Ye,H]=z(L),Xe=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=B(t),[c,l]=j.useState(null),u=j.useRef(!1),d=E(a),f=fe(i);return j.useEffect(()=>{let e=()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>u.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),(0,M.jsx)(D,{...s,children:(0,M.jsx)(Je,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,M.jsx)(Ye,{scope:t,onClose:j.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};Xe.displayName=L;var Ze=`MenuAnchor`,U=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=B(n);return(0,M.jsx)(ne,{...i,...r,ref:t})});U.displayName=Ze;var Qe=`MenuPortal`,[$e,et]=z(Qe,{forceMount:void 0}),tt=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:a}=e,o=V(Qe,t);return(0,M.jsx)($e,{scope:t,forceMount:n,children:(0,M.jsx)(i,{present:n||o.open,children:(0,M.jsx)(S,{asChild:!0,container:a,children:r})})})};tt.displayName=Qe;var W=`MenuContent`,[nt,rt]=z(W),it=j.forwardRef((e,t)=>{let n=et(W,e.__scopeMenu),{forceMount:r=n.forceMount,...a}=e,o=V(W,e.__scopeMenu),s=H(W,e.__scopeMenu);return(0,M.jsx)(R.Provider,{scope:e.__scopeMenu,children:(0,M.jsx)(i,{present:r||o.open,children:(0,M.jsx)(R.Slot,{scope:e.__scopeMenu,children:s.modal?(0,M.jsx)(at,{...a,ref:t}):(0,M.jsx)(ot,{...a,ref:t})})})})}),at=j.forwardRef((e,t)=>{let n=V(W,e.__scopeMenu),r=j.useRef(null),i=d(t,r);return j.useEffect(()=>{let e=r.current;if(e)return x(e)},[]),(0,M.jsx)(ct,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:h(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),ot=j.forwardRef((e,t)=>{let n=V(W,e.__scopeMenu);return(0,M.jsx)(ct,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),st=Ne(`MenuContent.ScrollLock`),ct=j.forwardRef((e,t)=>{let{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:o,disableOutsidePointerEvents:s,onEntryFocus:c,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:f,onInteractOutside:p,onDismiss:m,disableOutsideScroll:g,..._}=e,v=V(W,n),y=H(W,n),x=B(n),S=qe(n),w=We(n),[T,E]=j.useState(null),D=j.useRef(null),ne=d(t,D,v.onContentChange),O=j.useRef(0),k=j.useRef(``),ie=j.useRef(0),A=j.useRef(null),ae=j.useRef(`right`),N=j.useRef(0),oe=g?ee:j.Fragment,se=g?{as:st,allowPinchZoom:!0}:void 0,ce=e=>{let t=k.current+e,n=w().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=zt(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){k.current=t,window.clearTimeout(O.current),t!==``&&(O.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};j.useEffect(()=>()=>window.clearTimeout(O.current),[]),re();let P=j.useCallback(e=>ae.current===A.current?.side&&Vt(e,A.current?.area),[]);return(0,M.jsx)(nt,{scope:n,searchRef:k,onItemEnter:j.useCallback(e=>{P(e)&&e.preventDefault()},[P]),onItemLeave:j.useCallback(e=>{P(e)||(D.current?.focus(),E(null))},[P]),onTriggerLeave:j.useCallback(e=>{P(e)&&e.preventDefault()},[P]),pointerGraceTimerRef:ie,onPointerGraceIntentChange:j.useCallback(e=>{A.current=e},[]),children:(0,M.jsx)(oe,{...se,children:(0,M.jsx)(C,{asChild:!0,trapped:i,onMountAutoFocus:h(a,e=>{e.preventDefault(),D.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:(0,M.jsx)(te,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:f,onInteractOutside:p,onDismiss:m,children:(0,M.jsx)(je,{asChild:!0,...S,dir:y.dir,orientation:`vertical`,loop:r,currentTabStopId:T,onCurrentTabStopIdChange:E,onEntryFocus:h(c,e=>{y.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,M.jsx)(b,{role:`menu`,"aria-orientation":`vertical`,"data-state":Ft(v.open),"data-radix-menu-content":``,dir:y.dir,...x,..._,ref:ne,style:{outline:`none`,..._.style},onKeyDown:h(_.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&ce(e.key));let i=D.current;if(e.target!==i||!Ve.includes(e.key))return;e.preventDefault();let a=w().filter(e=>!e.disabled).map(e=>e.ref.current);Be.includes(e.key)&&a.reverse(),Lt(a)}),onBlur:h(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(O.current),k.current=``)}),onPointerMove:h(e.onPointerMove,X(e=>{let t=e.target,n=N.current!==e.clientX;if(e.currentTarget.contains(t)&&n){let t=e.clientX>N.current?`right`:`left`;ae.current=t,N.current=e.clientX}}))})})})})})})});it.displayName=W;var lt=`MenuGroup`,G=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,M.jsx)(_.div,{role:`group`,...r,ref:t})});G.displayName=lt;var ut=`MenuLabel`,dt=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,M.jsx)(_.div,{...r,ref:t})});dt.displayName=ut;var K=`MenuItem`,ft=`menu.itemSelect`,q=j.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:r,...i}=e,a=j.useRef(null),o=H(K,e.__scopeMenu),s=rt(K,e.__scopeMenu),c=d(t,a),l=j.useRef(!1),u=()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(ft,{bubbles:!0,cancelable:!0});e.addEventListener(ft,e=>r?.(e),{once:!0}),v(e,t),t.defaultPrevented?l.current=!1:o.onClose()}};return(0,M.jsx)(pt,{...i,ref:c,disabled:n,onClick:h(e.onClick,u),onPointerDown:t=>{e.onPointerDown?.(t),l.current=!0},onPointerUp:h(e.onPointerUp,e=>{l.current||e.currentTarget?.click()}),onKeyDown:h(e.onKeyDown,e=>{let t=s.searchRef.current!==``;n||t&&e.key===` `||I.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});q.displayName=K;var pt=j.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:i,...a}=e,o=rt(K,n),s=qe(n),c=j.useRef(null),l=d(t,c),[u,f]=j.useState(!1),[p,m]=j.useState(``);return j.useEffect(()=>{let e=c.current;e&&m((e.textContent??``).trim())},[a.children]),(0,M.jsx)(R.ItemSlot,{scope:n,disabled:r,textValue:i??p,children:(0,M.jsx)(Me,{asChild:!0,...s,focusable:!r,children:(0,M.jsx)(_.div,{role:`menuitem`,"data-highlighted":u?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...a,ref:l,onPointerMove:h(e.onPointerMove,X(e=>{r?o.onItemLeave(e):(o.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:h(e.onPointerLeave,X(e=>o.onItemLeave(e))),onFocus:h(e.onFocus,()=>f(!0)),onBlur:h(e.onBlur,()=>f(!1))})})})}),mt=`MenuCheckboxItem`,ht=j.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,M.jsx)(Ct,{scope:e.__scopeMenu,checked:n,children:(0,M.jsx)(q,{role:`menuitemcheckbox`,"aria-checked":Y(n)?`mixed`:n,...i,ref:t,"data-state":It(n),onSelect:h(i.onSelect,()=>r?.(Y(n)?!0:!n),{checkForDefaultPrevented:!1})})})});ht.displayName=mt;var gt=`MenuRadioGroup`,[_t,vt]=z(gt,{value:void 0,onValueChange:()=>{}}),yt=j.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=E(r);return(0,M.jsx)(_t,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,M.jsx)(G,{...i,ref:t})})});yt.displayName=gt;var bt=`MenuRadioItem`,xt=j.forwardRef((e,t)=>{let{value:n,...r}=e,i=vt(bt,e.__scopeMenu),a=n===i.value;return(0,M.jsx)(Ct,{scope:e.__scopeMenu,checked:a,children:(0,M.jsx)(q,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":It(a),onSelect:h(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});xt.displayName=bt;var St=`MenuItemIndicator`,[Ct,wt]=z(St,{checked:!1}),Tt=j.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...a}=e,o=wt(St,n);return(0,M.jsx)(i,{present:r||Y(o.checked)||o.checked===!0,children:(0,M.jsx)(_.span,{...a,ref:t,"data-state":It(o.checked)})})});Tt.displayName=St;var Et=`MenuSeparator`,Dt=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,M.jsx)(_.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});Dt.displayName=Et;var Ot=`MenuArrow`,kt=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=B(n);return(0,M.jsx)(T,{...i,...r,ref:t})});kt.displayName=Ot;var[At,jt]=z(`MenuSub`),J=`MenuSubTrigger`,Mt=j.forwardRef((e,t)=>{let n=V(J,e.__scopeMenu),r=H(J,e.__scopeMenu),i=jt(J,e.__scopeMenu),a=rt(J,e.__scopeMenu),o=j.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:c}=a,l={__scopeMenu:e.__scopeMenu},u=j.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return j.useEffect(()=>u,[u]),j.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),c(null)}},[s,c]),(0,M.jsx)(U,{asChild:!0,...l,children:(0,M.jsx)(pt,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":Ft(n.open),...e,ref:f(t,i.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:h(e.onPointerMove,X(t=>{a.onItemEnter(t),t.defaultPrevented||e.disabled||n.open||o.current||(a.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),u()},100))})),onPointerLeave:h(e.onPointerLeave,X(e=>{u();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,o=i?-5:5,c=t[i?`left`:`right`],l=t[i?`right`:`left`];a.onPointerGraceIntentChange({area:[{x:e.clientX+o,y:e.clientY},{x:c,y:t.top},{x:l,y:t.top},{x:l,y:t.bottom},{x:c,y:t.bottom}],side:r}),window.clearTimeout(s.current),s.current=window.setTimeout(()=>a.onPointerGraceIntentChange(null),300)}else{if(a.onTriggerLeave(e),e.defaultPrevented)return;a.onPointerGraceIntentChange(null)}})),onKeyDown:h(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||He[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});Mt.displayName=J;var Nt=`MenuSubContent`,Pt=j.forwardRef((e,t)=>{let n=et(W,e.__scopeMenu),{forceMount:r=n.forceMount,...a}=e,o=V(W,e.__scopeMenu),s=H(W,e.__scopeMenu),c=jt(Nt,e.__scopeMenu),l=j.useRef(null),u=d(t,l);return(0,M.jsx)(R.Provider,{scope:e.__scopeMenu,children:(0,M.jsx)(i,{present:r||o.open,children:(0,M.jsx)(R.Slot,{scope:e.__scopeMenu,children:(0,M.jsx)(ct,{id:c.contentId,"aria-labelledby":c.triggerId,...a,ref:u,align:`start`,side:s.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{s.isUsingKeyboardRef.current&&l.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:h(e.onFocusOutside,e=>{e.target!==c.trigger&&o.onOpenChange(!1)}),onEscapeKeyDown:h(e.onEscapeKeyDown,e=>{s.onClose(),e.preventDefault()}),onKeyDown:h(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=Ue[s.dir].includes(e.key);t&&n&&(o.onOpenChange(!1),c.trigger?.focus(),e.preventDefault())})})})})})});Pt.displayName=Nt;function Ft(e){return e?`open`:`closed`}function Y(e){return e===`indeterminate`}function It(e){return Y(e)?`indeterminate`:e?`checked`:`unchecked`}function Lt(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function Rt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function zt(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Rt(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Bt(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function Vt(e,t){return t?Bt({x:e.clientX,y:e.clientY},t):!1}function X(e){return t=>t.pointerType===`mouse`?e(t):void 0}var Ht=Xe,Ut=U,Wt=tt,Gt=it,Kt=G,qt=dt,Jt=q,Yt=ht,Xt=yt,Zt=xt,Qt=Tt,$t=Dt,en=kt,tn=Mt,nn=Pt,Z=`DropdownMenu`,[rn,an]=y(Z,[Ke]),Q=Ke(),[on,sn]=rn(Z),cn=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=Q(t),l=j.useRef(null),[u,d]=g({prop:i,defaultProp:a??!1,onChange:o,caller:Z});return(0,M.jsx)(on,{scope:t,triggerId:w(),triggerRef:l,contentId:w(),open:u,onOpenChange:d,onOpenToggle:j.useCallback(()=>d(e=>!e),[d]),modal:s,children:(0,M.jsx)(Ht,{...c,open:u,onOpenChange:d,dir:r,modal:s,children:n})})};cn.displayName=Z;var ln=`DropdownMenuTrigger`,un=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...i}=e,a=sn(ln,n),o=Q(n);return(0,M.jsx)(Ut,{asChild:!0,...o,children:(0,M.jsx)(_.button,{type:`button`,id:a.triggerId,"aria-haspopup":`menu`,"aria-expanded":a.open,"aria-controls":a.open?a.contentId:void 0,"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,disabled:r,...i,ref:f(t,a.triggerRef),onPointerDown:h(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(a.onOpenToggle(),a.open||e.preventDefault())}),onKeyDown:h(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&a.onOpenToggle(),e.key===`ArrowDown`&&a.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});un.displayName=ln;var dn=`DropdownMenuPortal`,fn=e=>{let{__scopeDropdownMenu:t,...n}=e,r=Q(t);return(0,M.jsx)(Wt,{...r,...n})};fn.displayName=dn;var pn=`DropdownMenuContent`,mn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=sn(pn,n),a=Q(n),o=j.useRef(!1);return(0,M.jsx)(Gt,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:h(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:h(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});mn.displayName=pn;var hn=`DropdownMenuGroup`,gn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Kt,{...i,...r,ref:t})});gn.displayName=hn;var _n=`DropdownMenuLabel`,vn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(qt,{...i,...r,ref:t})});vn.displayName=_n;var yn=`DropdownMenuItem`,bn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Jt,{...i,...r,ref:t})});bn.displayName=yn;var xn=`DropdownMenuCheckboxItem`,Sn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Yt,{...i,...r,ref:t})});Sn.displayName=xn;var Cn=`DropdownMenuRadioGroup`,wn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Xt,{...i,...r,ref:t})});wn.displayName=Cn;var Tn=`DropdownMenuRadioItem`,En=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Zt,{...i,...r,ref:t})});En.displayName=Tn;var Dn=`DropdownMenuItemIndicator`,On=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Qt,{...i,...r,ref:t})});On.displayName=Dn;var kn=`DropdownMenuSeparator`,An=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)($t,{...i,...r,ref:t})});An.displayName=kn;var jn=`DropdownMenuArrow`,Mn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(en,{...i,...r,ref:t})});Mn.displayName=jn;var Nn=`DropdownMenuSubTrigger`,Pn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(tn,{...i,...r,ref:t})});Pn.displayName=Nn;var Fn=`DropdownMenuSubContent`,In=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(nn,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});In.displayName=Fn;var Ln=cn,Rn=un,zn=fn,Bn=mn,Vn=vn,Hn=bn,Un=An;function Wn({...e}){return(0,M.jsx)(Ln,{"data-slot":`dropdown-menu`,...e})}function Gn({...e}){return(0,M.jsx)(Rn,{"data-slot":`dropdown-menu-trigger`,...e})}function Kn({className:e,sideOffset:t=4,...n}){return(0,M.jsx)(zn,{children:(0,M.jsx)(Bn,{"data-slot":`dropdown-menu-content`,sideOffset:t,className:u(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md`,e),...n})})}function $({className:e,inset:t,variant:n=`default`,...r}){return(0,M.jsx)(Hn,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:u(`focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r})}function qn({className:e,inset:t,...n}){return(0,M.jsx)(Vn,{"data-slot":`dropdown-menu-label`,"data-inset":t,className:u(`px-2 py-1.5 text-sm font-medium data-[inset]:pl-8`,e),...n})}function Jn({className:e,...t}){return(0,M.jsx)(Un,{"data-slot":`dropdown-menu-separator`,className:u(`bg-border -mx-1 my-1 h-px`,e),...t})}var Yn=({className:e})=>{let{setTheme:t}=o();return(0,M.jsxs)(Wn,{children:[(0,M.jsx)(Gn,{asChild:!0,children:(0,M.jsxs)(p,{variant:`ghost`,size:`icon`,className:e,children:[(0,M.jsx)(ae,{className:`h-[1.2rem] w-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90`}),(0,M.jsx)(A,{className:`absolute h-[1.2rem] w-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0`}),(0,M.jsx)(`span`,{className:`sr-only`,children:`Toggle theme`})]})}),(0,M.jsxs)(Kn,{children:[(0,M.jsx)($,{onClick:()=>t(`light`),children:`Light`}),(0,M.jsx)($,{onClick:()=>t(`dark`),children:`Dark`}),(0,M.jsx)($,{onClick:()=>t(`system`),children:`System`})]})]})};function Xn({...e}){return(0,M.jsx)(`nav`,{"aria-label":`breadcrumb`,"data-slot":`breadcrumb`,...e})}function Zn({className:e,...t}){return(0,M.jsx)(`ol`,{"data-slot":`breadcrumb-list`,className:u(`text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5`,e),...t})}function Qn({className:e,...t}){return(0,M.jsx)(`li`,{"data-slot":`breadcrumb-item`,className:u(`inline-flex items-center gap-1.5`,e),...t})}function $n({className:e,...t}){return(0,M.jsx)(`span`,{"data-slot":`breadcrumb-page`,role:`link`,"aria-disabled":`true`,"aria-current":`page`,className:u(`text-foreground font-normal`,e),...t})}function er({children:e,className:t,...n}){return(0,M.jsx)(`li`,{"data-slot":`breadcrumb-separator`,role:`presentation`,"aria-hidden":`true`,className:u(`[&>svg]:size-3.5`,t),...n,children:e??(0,M.jsx)(ie,{})})}function tr({breadcrumbs:e,actions:t,children:n}){let r=k(),i=(0,j.useMemo)(()=>e||r.pathname.split(`/`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)),[r.pathname,e]);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`header`,{className:`flex h-12 shrink-0 items-center gap-2 border-b px-4`,children:[(0,M.jsx)(s,{className:`-ml-1`}),(0,M.jsx)(a,{orientation:`vertical`,className:`mr-2 h-4`}),(0,M.jsx)(Xn,{children:(0,M.jsx)(Zn,{children:i.map((e,t)=>(0,M.jsxs)(j.Fragment,{children:[(0,M.jsx)(Qn,{children:t===i.length-1?(0,M.jsx)($n,{children:e}):e}),t<i.length-1&&(0,M.jsx)(er,{})]},t))})}),(0,M.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[t,(0,M.jsx)(Yn,{})]})]}),(0,M.jsx)(`div`,{className:`flex flex-1 flex-col`,children:(0,M.jsx)(`div`,{className:`@container/main`,children:(0,M.jsx)(`div`,{className:`flex flex-col gap-4 p-4`,children:n})})})]})}export{qn as a,fe as c,$ as i,ue as l,Wn as n,Jn as o,Kn as r,Gn as s,tr as t};
1
+ import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{B as r,N as i,P as a,ft as o,h as s}from"./sidebar-ClCnahDY.js";import{a as c,t as l}from"./useSelector-BoN-mufS.js";import{a as u,i as d,r as f}from"./dist-B7BqKb_s.js";import{t as p}from"./button-DoKPR9Fv.js";import{t as m}from"./createLucideIcon-Cv-_CLkr.js";import{c as h,i as g,n as _,r as v,s as y}from"./dist-ChMQZgJB.js";import{a as b,c as x,d as S,f as C,h as w,i as T,l as ee,m as E,o as D,p as te,r as ne,s as O,u as re}from"./dist-CXZZv-cf.js";function k(e){let t=c();return l(t.stores.location,r(e,t))}var ie=m(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),A=m(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),ae=m(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),j=e(n(),1),M=t();function N(e){let t=oe(e),n=j.forwardRef((e,n)=>{let{children:r,...i}=e,a=j.Children.toArray(r),o=a.find(ce);if(o){let e=o.props.children,r=a.map(t=>t===o?j.Children.count(e)>1?j.Children.only(null):j.isValidElement(e)?e.props.children:null:t);return(0,M.jsx)(t,{...i,ref:n,children:j.isValidElement(e)?j.cloneElement(e,void 0,r):null})}return(0,M.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function oe(e){let t=j.forwardRef((e,t)=>{let{children:n,...r}=e;if(j.isValidElement(n)){let e=le(n),i=P(r,n.props);return n.type!==j.Fragment&&(i.ref=t?f(t,e):e),j.cloneElement(n,i)}return j.Children.count(n)>1?j.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var se=Symbol(`radix.slottable`);function ce(e){return j.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===se}function P(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function le(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function ue(e){let t=e+`CollectionProvider`,[n,r]=y(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=e=>{let{scope:t,children:n}=e,r=j.useRef(null),a=j.useRef(new Map).current;return(0,M.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})};o.displayName=t;let s=e+`CollectionSlot`,c=N(s),l=j.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=a(s,n),o=d(t,i.collectionRef);return(0,M.jsx)(c,{ref:o,children:r})});l.displayName=s;let u=e+`CollectionItemSlot`,f=`data-radix-collection-item`,p=N(u),m=j.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=j.useRef(null),s=d(t,o),c=a(u,n);return j.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,M.jsx)(p,{[f]:``,ref:s,children:r})});m.displayName=u;function h(t){let n=a(e+`CollectionConsumer`,t);return j.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${f}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:o,Slot:l,ItemSlot:m},h,r]}var de=j.createContext(void 0);function fe(e){let t=j.useContext(de);return e||t||`ltr`}var pe=`rovingFocusGroup.onEntryFocus`,me={bubbles:!1,cancelable:!0},F=`RovingFocusGroup`,[he,ge,_e]=ue(F),[ve,ye]=y(F,[_e]),[be,xe]=ve(F),Se=j.forwardRef((e,t)=>(0,M.jsx)(he.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,M.jsx)(he.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,M.jsx)(Ce,{...e,ref:t})})}));Se.displayName=F;var Ce=j.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:l,preventScrollOnEntryFocus:u=!1,...f}=e,p=j.useRef(null),m=d(t,p),v=fe(a),[y,b]=g({prop:o,defaultProp:s??null,onChange:c,caller:F}),[x,S]=j.useState(!1),C=E(l),w=ge(n),T=j.useRef(!1),[ee,D]=j.useState(0);return j.useEffect(()=>{let e=p.current;if(e)return e.addEventListener(pe,C),()=>e.removeEventListener(pe,C)},[C]),(0,M.jsx)(be,{scope:n,orientation:r,dir:v,loop:i,currentTabStopId:y,onItemFocus:j.useCallback(e=>b(e),[b]),onItemShiftTab:j.useCallback(()=>S(!0),[]),onFocusableItemAdd:j.useCallback(()=>D(e=>e+1),[]),onFocusableItemRemove:j.useCallback(()=>D(e=>e-1),[]),children:(0,M.jsx)(_.div,{tabIndex:x||ee===0?-1:0,"data-orientation":r,...f,ref:m,style:{outline:`none`,...e.style},onMouseDown:h(e.onMouseDown,()=>{T.current=!0}),onFocus:h(e.onFocus,e=>{let t=!T.current;if(e.target===e.currentTarget&&t&&!x){let t=new CustomEvent(pe,me);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=w().filter(e=>e.focusable);ke([e.find(e=>e.active),e.find(e=>e.id===y),...e].filter(Boolean).map(e=>e.ref.current),u)}}T.current=!1}),onBlur:h(e.onBlur,()=>S(!1))})})}),we=`RovingFocusGroupItem`,Te=j.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=w(),l=a||c,u=xe(we,n),d=u.currentTabStopId===l,f=ge(n),{onFocusableItemAdd:p,onFocusableItemRemove:m,currentTabStopId:g}=u;return j.useEffect(()=>{if(r)return p(),()=>m()},[r,p,m]),(0,M.jsx)(he.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:(0,M.jsx)(_.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...s,ref:t,onMouseDown:h(e.onMouseDown,e=>{r?u.onItemFocus(l):e.preventDefault()}),onFocus:h(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:h(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){u.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=Oe(e,u.orientation,u.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=f().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=u.loop?Ae(n,r+1):n.slice(r+1)}setTimeout(()=>ke(n))}}),children:typeof o==`function`?o({isCurrentTabStop:d,hasTabStop:g!=null}):o})})});Te.displayName=we;var Ee={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function De(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function Oe(e,t,n){let r=De(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return Ee[r]}function ke(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function Ae(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var je=Se,Me=Te;function Ne(e){let t=Pe(e),n=j.forwardRef((e,n)=>{let{children:r,...i}=e,a=j.Children.toArray(r),o=a.find(Ie);if(o){let e=o.props.children,r=a.map(t=>t===o?j.Children.count(e)>1?j.Children.only(null):j.isValidElement(e)?e.props.children:null:t);return(0,M.jsx)(t,{...i,ref:n,children:j.isValidElement(e)?j.cloneElement(e,void 0,r):null})}return(0,M.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function Pe(e){let t=j.forwardRef((e,t)=>{let{children:n,...r}=e;if(j.isValidElement(n)){let e=Re(n),i=Le(r,n.props);return n.type!==j.Fragment&&(i.ref=t?f(t,e):e),j.cloneElement(n,i)}return j.Children.count(n)>1?j.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Fe=Symbol(`radix.slottable`);function Ie(e){return j.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===Fe}function Le(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function Re(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var I=[`Enter`,` `],ze=[`ArrowDown`,`PageUp`,`Home`],Be=[`ArrowUp`,`PageDown`,`End`],Ve=[...ze,...Be],He={ltr:[...I,`ArrowRight`],rtl:[...I,`ArrowLeft`]},Ue={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},L=`Menu`,[R,We,Ge]=ue(L),[z,Ke]=y(L,[Ge,O,ye]),B=O(),qe=ye(),[Je,V]=z(L),[Ye,H]=z(L),Xe=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=B(t),[c,l]=j.useState(null),u=j.useRef(!1),d=E(a),f=fe(i);return j.useEffect(()=>{let e=()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>u.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),(0,M.jsx)(D,{...s,children:(0,M.jsx)(Je,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,M.jsx)(Ye,{scope:t,onClose:j.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};Xe.displayName=L;var Ze=`MenuAnchor`,U=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=B(n);return(0,M.jsx)(ne,{...i,...r,ref:t})});U.displayName=Ze;var Qe=`MenuPortal`,[$e,et]=z(Qe,{forceMount:void 0}),tt=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:a}=e,o=V(Qe,t);return(0,M.jsx)($e,{scope:t,forceMount:n,children:(0,M.jsx)(i,{present:n||o.open,children:(0,M.jsx)(S,{asChild:!0,container:a,children:r})})})};tt.displayName=Qe;var W=`MenuContent`,[nt,rt]=z(W),it=j.forwardRef((e,t)=>{let n=et(W,e.__scopeMenu),{forceMount:r=n.forceMount,...a}=e,o=V(W,e.__scopeMenu),s=H(W,e.__scopeMenu);return(0,M.jsx)(R.Provider,{scope:e.__scopeMenu,children:(0,M.jsx)(i,{present:r||o.open,children:(0,M.jsx)(R.Slot,{scope:e.__scopeMenu,children:s.modal?(0,M.jsx)(at,{...a,ref:t}):(0,M.jsx)(ot,{...a,ref:t})})})})}),at=j.forwardRef((e,t)=>{let n=V(W,e.__scopeMenu),r=j.useRef(null),i=d(t,r);return j.useEffect(()=>{let e=r.current;if(e)return x(e)},[]),(0,M.jsx)(ct,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:h(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),ot=j.forwardRef((e,t)=>{let n=V(W,e.__scopeMenu);return(0,M.jsx)(ct,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),st=Ne(`MenuContent.ScrollLock`),ct=j.forwardRef((e,t)=>{let{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:o,disableOutsidePointerEvents:s,onEntryFocus:c,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:f,onInteractOutside:p,onDismiss:m,disableOutsideScroll:g,..._}=e,v=V(W,n),y=H(W,n),x=B(n),S=qe(n),w=We(n),[T,E]=j.useState(null),D=j.useRef(null),ne=d(t,D,v.onContentChange),O=j.useRef(0),k=j.useRef(``),ie=j.useRef(0),A=j.useRef(null),ae=j.useRef(`right`),N=j.useRef(0),oe=g?ee:j.Fragment,se=g?{as:st,allowPinchZoom:!0}:void 0,ce=e=>{let t=k.current+e,n=w().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=zt(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){k.current=t,window.clearTimeout(O.current),t!==``&&(O.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};j.useEffect(()=>()=>window.clearTimeout(O.current),[]),re();let P=j.useCallback(e=>ae.current===A.current?.side&&Vt(e,A.current?.area),[]);return(0,M.jsx)(nt,{scope:n,searchRef:k,onItemEnter:j.useCallback(e=>{P(e)&&e.preventDefault()},[P]),onItemLeave:j.useCallback(e=>{P(e)||(D.current?.focus(),E(null))},[P]),onTriggerLeave:j.useCallback(e=>{P(e)&&e.preventDefault()},[P]),pointerGraceTimerRef:ie,onPointerGraceIntentChange:j.useCallback(e=>{A.current=e},[]),children:(0,M.jsx)(oe,{...se,children:(0,M.jsx)(C,{asChild:!0,trapped:i,onMountAutoFocus:h(a,e=>{e.preventDefault(),D.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:(0,M.jsx)(te,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:f,onInteractOutside:p,onDismiss:m,children:(0,M.jsx)(je,{asChild:!0,...S,dir:y.dir,orientation:`vertical`,loop:r,currentTabStopId:T,onCurrentTabStopIdChange:E,onEntryFocus:h(c,e=>{y.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,M.jsx)(b,{role:`menu`,"aria-orientation":`vertical`,"data-state":Ft(v.open),"data-radix-menu-content":``,dir:y.dir,...x,..._,ref:ne,style:{outline:`none`,..._.style},onKeyDown:h(_.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&ce(e.key));let i=D.current;if(e.target!==i||!Ve.includes(e.key))return;e.preventDefault();let a=w().filter(e=>!e.disabled).map(e=>e.ref.current);Be.includes(e.key)&&a.reverse(),Lt(a)}),onBlur:h(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(O.current),k.current=``)}),onPointerMove:h(e.onPointerMove,X(e=>{let t=e.target,n=N.current!==e.clientX;if(e.currentTarget.contains(t)&&n){let t=e.clientX>N.current?`right`:`left`;ae.current=t,N.current=e.clientX}}))})})})})})})});it.displayName=W;var lt=`MenuGroup`,G=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,M.jsx)(_.div,{role:`group`,...r,ref:t})});G.displayName=lt;var ut=`MenuLabel`,dt=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,M.jsx)(_.div,{...r,ref:t})});dt.displayName=ut;var K=`MenuItem`,ft=`menu.itemSelect`,q=j.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:r,...i}=e,a=j.useRef(null),o=H(K,e.__scopeMenu),s=rt(K,e.__scopeMenu),c=d(t,a),l=j.useRef(!1),u=()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(ft,{bubbles:!0,cancelable:!0});e.addEventListener(ft,e=>r?.(e),{once:!0}),v(e,t),t.defaultPrevented?l.current=!1:o.onClose()}};return(0,M.jsx)(pt,{...i,ref:c,disabled:n,onClick:h(e.onClick,u),onPointerDown:t=>{e.onPointerDown?.(t),l.current=!0},onPointerUp:h(e.onPointerUp,e=>{l.current||e.currentTarget?.click()}),onKeyDown:h(e.onKeyDown,e=>{let t=s.searchRef.current!==``;n||t&&e.key===` `||I.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});q.displayName=K;var pt=j.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:i,...a}=e,o=rt(K,n),s=qe(n),c=j.useRef(null),l=d(t,c),[u,f]=j.useState(!1),[p,m]=j.useState(``);return j.useEffect(()=>{let e=c.current;e&&m((e.textContent??``).trim())},[a.children]),(0,M.jsx)(R.ItemSlot,{scope:n,disabled:r,textValue:i??p,children:(0,M.jsx)(Me,{asChild:!0,...s,focusable:!r,children:(0,M.jsx)(_.div,{role:`menuitem`,"data-highlighted":u?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...a,ref:l,onPointerMove:h(e.onPointerMove,X(e=>{r?o.onItemLeave(e):(o.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:h(e.onPointerLeave,X(e=>o.onItemLeave(e))),onFocus:h(e.onFocus,()=>f(!0)),onBlur:h(e.onBlur,()=>f(!1))})})})}),mt=`MenuCheckboxItem`,ht=j.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,M.jsx)(Ct,{scope:e.__scopeMenu,checked:n,children:(0,M.jsx)(q,{role:`menuitemcheckbox`,"aria-checked":Y(n)?`mixed`:n,...i,ref:t,"data-state":It(n),onSelect:h(i.onSelect,()=>r?.(Y(n)?!0:!n),{checkForDefaultPrevented:!1})})})});ht.displayName=mt;var gt=`MenuRadioGroup`,[_t,vt]=z(gt,{value:void 0,onValueChange:()=>{}}),yt=j.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=E(r);return(0,M.jsx)(_t,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,M.jsx)(G,{...i,ref:t})})});yt.displayName=gt;var bt=`MenuRadioItem`,xt=j.forwardRef((e,t)=>{let{value:n,...r}=e,i=vt(bt,e.__scopeMenu),a=n===i.value;return(0,M.jsx)(Ct,{scope:e.__scopeMenu,checked:a,children:(0,M.jsx)(q,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":It(a),onSelect:h(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});xt.displayName=bt;var St=`MenuItemIndicator`,[Ct,wt]=z(St,{checked:!1}),Tt=j.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...a}=e,o=wt(St,n);return(0,M.jsx)(i,{present:r||Y(o.checked)||o.checked===!0,children:(0,M.jsx)(_.span,{...a,ref:t,"data-state":It(o.checked)})})});Tt.displayName=St;var Et=`MenuSeparator`,Dt=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,M.jsx)(_.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});Dt.displayName=Et;var Ot=`MenuArrow`,kt=j.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=B(n);return(0,M.jsx)(T,{...i,...r,ref:t})});kt.displayName=Ot;var[At,jt]=z(`MenuSub`),J=`MenuSubTrigger`,Mt=j.forwardRef((e,t)=>{let n=V(J,e.__scopeMenu),r=H(J,e.__scopeMenu),i=jt(J,e.__scopeMenu),a=rt(J,e.__scopeMenu),o=j.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:c}=a,l={__scopeMenu:e.__scopeMenu},u=j.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return j.useEffect(()=>u,[u]),j.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),c(null)}},[s,c]),(0,M.jsx)(U,{asChild:!0,...l,children:(0,M.jsx)(pt,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":Ft(n.open),...e,ref:f(t,i.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:h(e.onPointerMove,X(t=>{a.onItemEnter(t),t.defaultPrevented||e.disabled||n.open||o.current||(a.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),u()},100))})),onPointerLeave:h(e.onPointerLeave,X(e=>{u();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,o=i?-5:5,c=t[i?`left`:`right`],l=t[i?`right`:`left`];a.onPointerGraceIntentChange({area:[{x:e.clientX+o,y:e.clientY},{x:c,y:t.top},{x:l,y:t.top},{x:l,y:t.bottom},{x:c,y:t.bottom}],side:r}),window.clearTimeout(s.current),s.current=window.setTimeout(()=>a.onPointerGraceIntentChange(null),300)}else{if(a.onTriggerLeave(e),e.defaultPrevented)return;a.onPointerGraceIntentChange(null)}})),onKeyDown:h(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||He[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});Mt.displayName=J;var Nt=`MenuSubContent`,Pt=j.forwardRef((e,t)=>{let n=et(W,e.__scopeMenu),{forceMount:r=n.forceMount,...a}=e,o=V(W,e.__scopeMenu),s=H(W,e.__scopeMenu),c=jt(Nt,e.__scopeMenu),l=j.useRef(null),u=d(t,l);return(0,M.jsx)(R.Provider,{scope:e.__scopeMenu,children:(0,M.jsx)(i,{present:r||o.open,children:(0,M.jsx)(R.Slot,{scope:e.__scopeMenu,children:(0,M.jsx)(ct,{id:c.contentId,"aria-labelledby":c.triggerId,...a,ref:u,align:`start`,side:s.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{s.isUsingKeyboardRef.current&&l.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:h(e.onFocusOutside,e=>{e.target!==c.trigger&&o.onOpenChange(!1)}),onEscapeKeyDown:h(e.onEscapeKeyDown,e=>{s.onClose(),e.preventDefault()}),onKeyDown:h(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=Ue[s.dir].includes(e.key);t&&n&&(o.onOpenChange(!1),c.trigger?.focus(),e.preventDefault())})})})})})});Pt.displayName=Nt;function Ft(e){return e?`open`:`closed`}function Y(e){return e===`indeterminate`}function It(e){return Y(e)?`indeterminate`:e?`checked`:`unchecked`}function Lt(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function Rt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function zt(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Rt(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Bt(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function Vt(e,t){return t?Bt({x:e.clientX,y:e.clientY},t):!1}function X(e){return t=>t.pointerType===`mouse`?e(t):void 0}var Ht=Xe,Ut=U,Wt=tt,Gt=it,Kt=G,qt=dt,Jt=q,Yt=ht,Xt=yt,Zt=xt,Qt=Tt,$t=Dt,en=kt,tn=Mt,nn=Pt,Z=`DropdownMenu`,[rn,an]=y(Z,[Ke]),Q=Ke(),[on,sn]=rn(Z),cn=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=Q(t),l=j.useRef(null),[u,d]=g({prop:i,defaultProp:a??!1,onChange:o,caller:Z});return(0,M.jsx)(on,{scope:t,triggerId:w(),triggerRef:l,contentId:w(),open:u,onOpenChange:d,onOpenToggle:j.useCallback(()=>d(e=>!e),[d]),modal:s,children:(0,M.jsx)(Ht,{...c,open:u,onOpenChange:d,dir:r,modal:s,children:n})})};cn.displayName=Z;var ln=`DropdownMenuTrigger`,un=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...i}=e,a=sn(ln,n),o=Q(n);return(0,M.jsx)(Ut,{asChild:!0,...o,children:(0,M.jsx)(_.button,{type:`button`,id:a.triggerId,"aria-haspopup":`menu`,"aria-expanded":a.open,"aria-controls":a.open?a.contentId:void 0,"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,disabled:r,...i,ref:f(t,a.triggerRef),onPointerDown:h(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(a.onOpenToggle(),a.open||e.preventDefault())}),onKeyDown:h(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&a.onOpenToggle(),e.key===`ArrowDown`&&a.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});un.displayName=ln;var dn=`DropdownMenuPortal`,fn=e=>{let{__scopeDropdownMenu:t,...n}=e,r=Q(t);return(0,M.jsx)(Wt,{...r,...n})};fn.displayName=dn;var pn=`DropdownMenuContent`,mn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=sn(pn,n),a=Q(n),o=j.useRef(!1);return(0,M.jsx)(Gt,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:h(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:h(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});mn.displayName=pn;var hn=`DropdownMenuGroup`,gn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Kt,{...i,...r,ref:t})});gn.displayName=hn;var _n=`DropdownMenuLabel`,vn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(qt,{...i,...r,ref:t})});vn.displayName=_n;var yn=`DropdownMenuItem`,bn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Jt,{...i,...r,ref:t})});bn.displayName=yn;var xn=`DropdownMenuCheckboxItem`,Sn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Yt,{...i,...r,ref:t})});Sn.displayName=xn;var Cn=`DropdownMenuRadioGroup`,wn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Xt,{...i,...r,ref:t})});wn.displayName=Cn;var Tn=`DropdownMenuRadioItem`,En=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Zt,{...i,...r,ref:t})});En.displayName=Tn;var Dn=`DropdownMenuItemIndicator`,On=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(Qt,{...i,...r,ref:t})});On.displayName=Dn;var kn=`DropdownMenuSeparator`,An=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)($t,{...i,...r,ref:t})});An.displayName=kn;var jn=`DropdownMenuArrow`,Mn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(en,{...i,...r,ref:t})});Mn.displayName=jn;var Nn=`DropdownMenuSubTrigger`,Pn=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(tn,{...i,...r,ref:t})});Pn.displayName=Nn;var Fn=`DropdownMenuSubContent`,In=j.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,M.jsx)(nn,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});In.displayName=Fn;var Ln=cn,Rn=un,zn=fn,Bn=mn,Vn=vn,Hn=bn,Un=An;function Wn({...e}){return(0,M.jsx)(Ln,{"data-slot":`dropdown-menu`,...e})}function Gn({...e}){return(0,M.jsx)(Rn,{"data-slot":`dropdown-menu-trigger`,...e})}function Kn({className:e,sideOffset:t=4,...n}){return(0,M.jsx)(zn,{children:(0,M.jsx)(Bn,{"data-slot":`dropdown-menu-content`,sideOffset:t,className:u(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md`,e),...n})})}function $({className:e,inset:t,variant:n=`default`,...r}){return(0,M.jsx)(Hn,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:u(`focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r})}function qn({className:e,inset:t,...n}){return(0,M.jsx)(Vn,{"data-slot":`dropdown-menu-label`,"data-inset":t,className:u(`px-2 py-1.5 text-sm font-medium data-[inset]:pl-8`,e),...n})}function Jn({className:e,...t}){return(0,M.jsx)(Un,{"data-slot":`dropdown-menu-separator`,className:u(`bg-border -mx-1 my-1 h-px`,e),...t})}var Yn=({className:e})=>{let{setTheme:t}=o();return(0,M.jsxs)(Wn,{children:[(0,M.jsx)(Gn,{asChild:!0,children:(0,M.jsxs)(p,{variant:`ghost`,size:`icon`,className:e,children:[(0,M.jsx)(ae,{className:`h-[1.2rem] w-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90`}),(0,M.jsx)(A,{className:`absolute h-[1.2rem] w-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0`}),(0,M.jsx)(`span`,{className:`sr-only`,children:`Toggle theme`})]})}),(0,M.jsxs)(Kn,{children:[(0,M.jsx)($,{onClick:()=>t(`light`),children:`Light`}),(0,M.jsx)($,{onClick:()=>t(`dark`),children:`Dark`}),(0,M.jsx)($,{onClick:()=>t(`system`),children:`System`})]})]})};function Xn({...e}){return(0,M.jsx)(`nav`,{"aria-label":`breadcrumb`,"data-slot":`breadcrumb`,...e})}function Zn({className:e,...t}){return(0,M.jsx)(`ol`,{"data-slot":`breadcrumb-list`,className:u(`text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5`,e),...t})}function Qn({className:e,...t}){return(0,M.jsx)(`li`,{"data-slot":`breadcrumb-item`,className:u(`inline-flex items-center gap-1.5`,e),...t})}function $n({className:e,...t}){return(0,M.jsx)(`span`,{"data-slot":`breadcrumb-page`,role:`link`,"aria-disabled":`true`,"aria-current":`page`,className:u(`text-foreground font-normal`,e),...t})}function er({children:e,className:t,...n}){return(0,M.jsx)(`li`,{"data-slot":`breadcrumb-separator`,role:`presentation`,"aria-hidden":`true`,className:u(`[&>svg]:size-3.5`,t),...n,children:e??(0,M.jsx)(ie,{})})}function tr({breadcrumbs:e,actions:t,children:n}){let r=k(),i=(0,j.useMemo)(()=>e||r.pathname.split(`/`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)),[r.pathname,e]);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`header`,{className:`flex h-12 shrink-0 items-center gap-2 border-b px-4`,children:[(0,M.jsx)(s,{className:`-ml-1`}),(0,M.jsx)(a,{orientation:`vertical`,className:`mr-2 h-4`}),(0,M.jsx)(Xn,{children:(0,M.jsx)(Zn,{children:i.map((e,t)=>(0,M.jsxs)(j.Fragment,{children:[(0,M.jsx)(Qn,{children:t===i.length-1?(0,M.jsx)($n,{children:e}):e}),t<i.length-1&&(0,M.jsx)(er,{})]},t))})}),(0,M.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[t,(0,M.jsx)(Yn,{})]})]}),(0,M.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain`,children:(0,M.jsx)(`div`,{className:`@container/main`,children:(0,M.jsx)(`div`,{className:`flex flex-col gap-4 p-4`,children:n})})})]})}export{qn as a,fe as c,$ as i,ue as l,Wn as n,Jn as o,Kn as r,Gn as s,tr as t};
@@ -1 +1 @@
1
- import{n as e}from"./with-selector-fbK2t2oY.js";import{a as t}from"./dist-B7BqKb_s.js";import{t as n}from"./input-BggK3IOz.js";import{t as r}from"./DeleteOption-DkdJCiOu.js";import{D as i}from"./use-settings-form-submit-CDmMUcwW.js";var a=e(),o=({className:e,showDelete:o=!1,onDelete:s})=>{let c=i();return(0,a.jsxs)(`div`,{className:t(`flex items-center gap-2`,e),children:[(0,a.jsx)(n,{type:`text`,id:`${c.name}`,className:`form-input`,value:c.state.value==null?``:String(c.state.value),"aria-invalid":!!(c.state.meta.isTouched&&c.state.meta.errorMap.onBlur?.length>0),onBlur:c.handleBlur,onChange:e=>c.handleChange(e.target.value)}),o&&(0,a.jsx)(r,{onClick:s})]})};export{o as default};
1
+ import{n as e}from"./with-selector-fbK2t2oY.js";import{a as t}from"./dist-B7BqKb_s.js";import{t as n}from"./input-BggK3IOz.js";import{t as r}from"./DeleteOption-DkdJCiOu.js";import{D as i}from"./use-settings-form-submit-Lp26uOhf.js";var a=e(),o=({className:e,showDelete:o=!1,onDelete:s})=>{let c=i();return(0,a.jsxs)(`div`,{className:t(`flex items-center gap-2`,e),children:[(0,a.jsx)(n,{type:`text`,id:`${c.name}`,className:`form-input`,value:c.state.value==null?``:String(c.state.value),"aria-invalid":!!(c.state.meta.isTouched&&c.state.meta.errorMap.onBlur?.length>0),onBlur:c.handleBlur,onChange:e=>c.handleChange(e.target.value)}),o&&(0,a.jsx)(r,{onClick:s})]})};export{o as default};
@@ -1 +1 @@
1
- import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{I as r,L as i,S as a,_ as o,b as s,g as c,v as l,x as u,y as d}from"./sidebar-Qy-rYdhU.js";import{a as f,i as p,n as m,r as h,s as g,t as _}from"./Page-CKwSnUie.js";import{t as v}from"./button-DoKPR9Fv.js";import{a as y,i as b,n as x,r as S,t as ee}from"./trash-PHXIGUCt.js";import{t as C}from"./loader-circle-D988WNxu.js";import{t as w}from"./test-tube-DD9Yz2bZ.js";import{i as T,t as E,u as D}from"./index-NlorOk2I.js";import{C as te,_ as O,a as k,c as ne,d as A,f as j,i as M,m as N,n as P,p as F,r as I,t as L}from"./use-settings-form-submit-CDmMUcwW.js";import{a as R,i as z,n as re,o as B,r as V,t as ie}from"./table-Bs6CQscS.js";var H=e(n(),1),U=t();function ae({open:e,onOpenChange:t,client:n,onEdit:r}){return(0,U.jsx)(c,{open:e,onOpenChange:t,children:(0,U.jsxs)(l,{className:`sm:max-w-md`,children:[(0,U.jsxs)(u,{children:[(0,U.jsx)(a,{children:`View Torrent Client`}),(0,U.jsx)(d,{children:`View torrent client details.`})]}),(0,U.jsxs)(`div`,{className:`grid flex-1 auto-rows-min gap-6 px-4`,children:[(0,U.jsxs)(`div`,{className:`grid gap-3`,children:[(0,U.jsx)(T,{children:`URL`}),(0,U.jsx)(`div`,{className:`bg-muted/50 rounded-md border px-3 py-2 font-mono text-sm break-all`,children:n?.url||`N/A`})]}),(0,U.jsxs)(`div`,{className:`grid gap-3`,children:[(0,U.jsx)(T,{children:`Username`}),(0,U.jsx)(`div`,{className:`bg-muted/50 rounded-md border px-3 py-2 font-mono text-sm break-all`,children:n?.user||`N/A`})]}),(0,U.jsxs)(`div`,{className:`grid gap-3`,children:[(0,U.jsx)(T,{children:`Password`}),(0,U.jsx)(`div`,{className:`bg-muted/50 rounded-md border px-3 py-2 font-mono text-sm break-all`,children:n?.password?`********`:`N/A`})]}),(0,U.jsxs)(`div`,{className:`grid gap-3`,children:[(0,U.jsx)(T,{children:`Read only`}),(0,U.jsx)(`div`,{className:`bg-muted/50 rounded-md border px-3 py-2 font-mono text-sm break-all`,children:n?.readOnly?`Yes`:`No`})]})]}),(0,U.jsxs)(s,{children:[r&&n&&(0,U.jsxs)(v,{type:`button`,onClick:()=>r(n),className:`flex-1`,children:[(0,U.jsx)(S,{className:`mr-2 h-4 w-4`}),`Edit`]}),(0,U.jsx)(o,{asChild:!0,className:`flex-1`,children:(0,U.jsx)(v,{type:`button`,variant:`outline`,className:`flex-1`,children:`Close`})})]})]})})}var W=e=>{try{return decodeURIComponent(e)}catch{return e}},G=e=>{let t=e.indexOf(`://`);if(t===-1)return e;let n=t+3,r=e.lastIndexOf(`@`);if(r<=n)return e;let i=e.slice(n,r),a=i.indexOf(`:`);if(a===-1)return e;let o=i.slice(0,a),s=i.slice(a+1),c=encodeURIComponent(W(o)),l=encodeURIComponent(W(s));return`${e.slice(0,n)}${c}:${l}${e.slice(r)}`},K=e=>new URL(G(e));function oe(e){return W(K(e).username)}function se(e){return W(K(e).password)}var q=e=>{try{let t=K(e);return`${t.protocol}//${t.host}${t.pathname}${t.search}${t.hash}`}catch(t){let n=e.indexOf(`://`),r=n===-1?-1:n+3,i=e.lastIndexOf(`@`);if(r!==-1&&i>r){let t=`${e.slice(0,r)}${e.slice(i+1)}`;try{let e=new URL(t);return`${e.protocol}//${e.host}`}catch{return t}}return console.warn(`Unable to strip credentials from client URL`,t),e}};function J({endpointUrl:e,username:t=``,password:n=``,includeUsername:r=!0}){let i=K(q(e));return i.username=r?t:``,i.password=n,i.toString()}function Y({client:e,endpointUrl:t,username:n=``,password:r=``,readonly:i=!1}){let a=J({endpointUrl:t,username:n,password:r,includeUsername:e.toLowerCase()!==`deluge`});return`${e.toLowerCase()}:${i?`readonly:`:``}${a}`}function X({client:e,endpointUrl:t,username:n=``,password:r=``}){return J({endpointUrl:t,username:n,password:r,includeUsername:e.toLowerCase()!==`deluge`})}function Z(e){return[`qbittorrent`,`rtorrent`,`transmission`,`deluge`].includes(e)}var Q=async({client:e,url:t,username:n=``,password:i})=>{try{let a=e.toLowerCase();return Z(a)?{success:(await r.clients.testConnection.mutate({client:a,url:t,username:n,password:i,readonly:!1})).success}:{success:!1}}catch(e){return console.error(`Error testing connection:`,e),{success:!1}}},$={qbittorrent:`qBittorrent`,rtorrent:`rTorrent`,transmission:`Transmission`,deluge:`Deluge`};function ce({open:e,onOpenChange:t,mode:n,client:r}){let[f,p]=(0,H.useState)(!1),{isFieldRequired:m}=j(N),h=i(),{data:g}=D(h.settings.get.queryOptions(void 0,{select:e=>e.config.torrentClients||[]})),{saveConfigAsync:_,isLoading:y}=P(),b=k({...A,defaultValues:r??{},onSubmit:async({value:e})=>{try{let i={...e,readOnly:e?.readOnly??!1},a=N.safeParse(i);if(a.success){let e=a.data,i=Y({client:e.client,endpointUrl:e.url,username:e.user??``,password:e.password??``,readonly:e.readOnly}),o;n===`edit`&&r&&r.index!==void 0?(o=[...g||[]],o[r.index]=i):o=[...g||[],i],await _({torrentClients:o}),t(!1)}else throw console.error(`FULL VALIDATION FAILED:`,a.error.format()),Error(`Validation failed`)}catch(e){return console.error(`Exception during full validation:`,e),{status:`error`,error:{_form:`An unexpected error occurred during validation`}}}},validators:{onSubmit:N}}),x=async()=>{p(!0);let e=String(b.getFieldValue(`client`)),t=String(b.getFieldValue(`url`)),n=String(b.getFieldValue(`user`)??``),r=String(b.getFieldValue(`password`)??``);(await Q({client:e,url:X({client:e,endpointUrl:t,username:n,password:r}),username:n,password:r})).success?(E.success(`Connection successful!`,{description:`The torrent client connection was successful.`}),p(!1)):(E.error(`Connection failed`,{description:`Failed to connect to the torrent client.`}),p(!1))},S=y||f;return(0,U.jsx)(c,{open:e,onOpenChange:t,children:(0,U.jsx)(l,{className:`sm:max-w-md`,children:(0,U.jsx)(M,{isFieldRequired:m,children:(0,U.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),e.stopPropagation(),b.handleSubmit()},children:[(0,U.jsxs)(u,{children:[(0,U.jsx)(a,{children:n===`edit`?`Edit Client`:`Create Client`}),(0,U.jsx)(d,{children:n===`edit`?`Edit the details of the torrent client.`:`Create a new torrent client.`})]}),(0,U.jsxs)(`div`,{className:`grid flex-1 auto-rows-min gap-6 px-4`,children:[(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`client`,children:e=>(0,U.jsx)(e.SelectField,{label:`Client`,options:$})})}),(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`url`,children:e=>(0,U.jsx)(e.TextField,{label:`Endpoint URL`})})}),(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`user`,children:e=>(0,U.jsx)(e.TextField,{label:`User`})})}),(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`password`,children:e=>(0,U.jsx)(e.TextField,{label:`Password`,type:`password`})})}),(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`readOnly`,children:e=>(0,U.jsx)(e.SwitchField,{label:`Read only`})})}),(0,U.jsx)(b.Subscribe,{selector:e=>({urlValue:e.values.url,urlMeta:e.fieldMeta.url,userValue:e.values.user,userMeta:e.fieldMeta.user,passwordValue:e.values.password,passwordMeta:e.fieldMeta.password,clientValue:e.values.client}),children:({urlValue:e,urlMeta:t,userValue:n,userMeta:r,passwordValue:i,passwordMeta:a,clientValue:o})=>{let s=e&&!t?.errors?.length,c=typeof e==`string`&&e.trimStart().toLowerCase().startsWith(`scgi:`),l=c||o===`transmission`&&i===void 0?!0:i&&!a?.errors?.length,u=c||o===`deluge`||o===`transmission`?!0:n&&!r?.errors?.length;return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(v,{type:`button`,variant:`outline`,onClick:()=>{x()},disabled:!(s&&l&&u),className:`w-full`,children:f?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(C,{className:`animate-spin`}),`Testing connection...`]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(w,{className:`mr-2`}),`Test Connection`]})}),o===`qbittorrent`&&(0,U.jsxs)(`p`,{className:`text-muted-foreground -mt-4 px-2 text-sm italic`,children:[`Note: Testing connections can return false positives if`,` `,(0,U.jsx)(`code`,{className:`bg-yellow-100 px-1`,children:`Bypass auth on localhost`}),` `,`is enabled in qBittorrent.`]})]})}})]}),(0,U.jsxs)(s,{className:`mt-6`,children:[(0,U.jsx)(b.AppForm,{children:(0,U.jsx)(b.SubmitButton,{label:n===`edit`?`Update`:`Create`,actionLabel:n===`edit`?`Updating...`:`Creating...`})}),(0,U.jsx)(o,{asChild:!0,children:(0,U.jsx)(v,{type:`button`,variant:`outline`,disabled:S,children:`Cancel`})})]})]})})})})}function le(){let e=i(),{saveConfig:t}=P(),[n,r]=(0,H.useState)(void 0),[a,o]=(0,H.useState)(null),[s,c]=(0,H.useState)(null),[l,u]=(0,H.useState)(!1),[d,C]=(0,H.useState)(!1),[w,T]=(0,H.useState)(`create`),{isFieldRequired:E}=j(O),{data:A}=D(e.settings.get.queryOptions(void 0,{select:e=>{let t=F(e.config);return{formData:I(O,t,{includeUndefined:!0}),torrentClients:e.config.torrentClients}}})),N=L(),W=k({defaultValues:A?.formData??ne,onSubmit:N,validators:{onSubmit:O}}),[G,K]=(0,H.useState)(null);(0,H.useEffect)(()=>{G&&(document.getElementById(G)?.focus(),K(null))},[G]),(0,H.useEffect)(()=>{let e=A?.torrentClients??[];if(!e.length){r([]);return}let t=e.map((e,t)=>{if(!e)return null;let n=``,r=``,i=!1,a=``,o=``;if(typeof e==`object`)n=e.client,i=e.readOnly||!1,r=e.url,a=e.user||``,o=e.password||``;else if(typeof e==`string`){let t=String(e);n=t.split(`:`)[0];let s=`${n}:readonly:`,c=`${n}:`;i=t.startsWith(s);let l=t.startsWith(s)?t.slice(s.length):t.slice(c.length);if(!l)return null;let u=q(l);if(!u)return null;r=u,a=oe(l),o=se(l)}return!n||!r?null:{index:t,client:n,url:r,user:a,password:o,readOnly:i}}).filter(Boolean);r(t)},[A]);let J=e=>{e.preventDefault(),e.stopPropagation(),c(null),T(`create`),C(!0)},X=e=>{u(e),e||o(null)},Z=(e,t)=>{e.preventDefault(),e.stopPropagation(),o(null),c(t),u(!0)},Q=e=>{o(null),c(e),T(`edit`),u(!1),C(!0)},$=e=>{o(null);let i=e.index===void 0?n?.filter(t=>t.url!==e.url):n?.filter(t=>t.index!==e.index);r(i);let a=(i||[]).map(e=>Y({client:e.client,endpointUrl:e.url,username:e.user??``,password:e.password??``,readonly:e.readOnly??!1}));t({torrentClients:a})};return(0,U.jsxs)(_,{breadcrumbs:[`Settings`,`Torrent Clients`],actions:(0,U.jsxs)(v,{onClick:J,type:`button`,size:`sm`,children:[(0,U.jsx)(x,{className:`mr-2 h-4 w-4`}),`Add Torrent Client`]}),children:[(0,U.jsxs)(`div`,{className:`space-y-4`,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Torrent Clients`}),(0,U.jsx)(`p`,{className:`text-muted-foreground`,children:`Manage your torrent clients`})]}),n?(0,U.jsx)(`div`,{className:`mt-4 mb-7 overflow-x-auto rounded-lg border`,children:(0,U.jsxs)(ie,{children:[(0,U.jsx)(R,{className:`bg-muted sticky top-0 z-10`,children:(0,U.jsxs)(B,{className:`border-b`,children:[(0,U.jsx)(z,{children:`Client`}),(0,U.jsx)(z,{children:`RPC URL`}),(0,U.jsx)(z,{children:`Read only`}),(0,U.jsx)(z,{className:`text-right`,children:`Actions`})]})}),(0,U.jsxs)(re,{children:[n?.length===0&&(0,U.jsx)(B,{children:(0,U.jsx)(V,{colSpan:6,className:`text-center`,children:(0,U.jsx)(`p`,{className:`text-muted-foreground`,children:`No torrent clients configured. Add a client to start downloading.`})})}),n?.map(e=>(0,U.jsxs)(B,{className:`hover:bg-muted/50 cursor-pointer`,onClick:t=>Z(t,e),children:[(0,U.jsx)(V,{className:`font-medium`,children:e.client}),(0,U.jsx)(V,{className:`font-mono text-sm`,children:e.url}),(0,U.jsx)(V,{children:e.readOnly?`Yes`:`No`}),(0,U.jsx)(V,{className:`text-right`,children:(0,U.jsxs)(m,{open:a===e.url,onOpenChange:t=>o(t?e.url:null),children:[(0,U.jsx)(g,{asChild:!0,children:(0,U.jsxs)(v,{variant:`ghost`,className:`h-8 w-8 p-0`,type:`button`,onClick:e=>{e.preventDefault(),e.stopPropagation()},children:[(0,U.jsx)(`span`,{className:`sr-only`,children:`Actions`}),(0,U.jsx)(y,{className:`h-4 w-4`})]})}),(0,U.jsxs)(h,{align:`end`,children:[(0,U.jsx)(f,{children:`Actions`}),(0,U.jsxs)(p,{onClick:t=>{Z(t,e)},children:[(0,U.jsx)(b,{className:`mr-2 h-4 w-4`}),`View Details`]}),(0,U.jsxs)(p,{onClick:t=>{t.stopPropagation(),Q(e)},children:[(0,U.jsx)(S,{className:`mr-2 h-4 w-4`}),`Edit`]}),(0,U.jsxs)(p,{variant:`destructive`,onClick:t=>{t.stopPropagation(),$(e)},children:[(0,U.jsx)(ee,{className:`mr-2 h-4 w-4`}),`Delete`]})]})]})})]},e.url))]})]})}):(0,U.jsx)(`p`,{className:`mb-4 text-lg`,children:`No torrent clients configured. Add a client`}),(0,U.jsx)(M,{isFieldRequired:E,children:(0,U.jsx)(`form`,{className:`form flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),e.stopPropagation(),W.handleSubmit()},noValidate:!0,children:(0,U.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(`h2`,{className:`text-xl font-bold`,children:`Torrent Client Options`}),(0,U.jsxs)(`fieldset`,{className:`form-fieldset w-full gap-6 rounded-md`,children:[(0,U.jsx)(`div`,{className:``,children:(0,U.jsx)(W.AppField,{name:`action`,children:e=>(0,U.jsx)(e.SelectField,{label:`Action`,options:te})})}),(0,U.jsx)(`div`,{className:``,children:(0,U.jsx)(W.AppField,{name:`linkCategory`,validators:{},children:e=>(0,U.jsx)(e.TextField,{label:`Link Category`,required:!1})})}),(0,U.jsx)(`div`,{className:``,children:(0,U.jsx)(W.AppField,{name:`torrentDir`,validators:{},children:e=>(0,U.jsx)(e.TextField,{label:`Torrent Directory`,required:!1})})}),(0,U.jsx)(`div`,{className:``,children:(0,U.jsx)(W.AppField,{name:`outputDir`,validators:{},children:e=>(0,U.jsx)(e.TextField,{label:`Output Directory`,required:!1})})}),(0,U.jsxs)(`div`,{className:`form-field-switches col-span-2 gap-x-12`,children:[(0,U.jsx)(W.AppField,{name:`skipRecheck`,children:e=>(0,U.jsx)(e.SwitchField,{label:`Skip Recheck`})}),(0,U.jsx)(W.AppField,{name:`useClientTorrents`,children:e=>(0,U.jsx)(e.SwitchField,{label:`Use Client Torrents`})}),(0,U.jsx)(W.AppField,{name:`duplicateCategories`,children:e=>(0,U.jsx)(e.SwitchField,{label:`Duplicate Categories`})})]})]}),(0,U.jsx)(W.AppForm,{children:(0,U.jsx)(W.SubmitButton,{})})]})})})]}),(0,U.jsx)(ae,{open:l,onOpenChange:X,client:s,onEdit:Q}),(0,U.jsx)(ce,{open:d,onOpenChange:e=>{C(e),e||o(null)},client:s,mode:w})]})}export{le as component};
1
+ import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{I as r,L as i,S as a,_ as o,b as s,g as c,v as l,x as u,y as d}from"./sidebar-ClCnahDY.js";import{a as f,i as p,n as m,r as h,s as g,t as _}from"./Page-DZliN5uq.js";import{t as v}from"./button-DoKPR9Fv.js";import{a as y,i as b,n as x,r as S,t as ee}from"./trash-PHXIGUCt.js";import{t as C}from"./loader-circle-D988WNxu.js";import{t as w}from"./test-tube-DD9Yz2bZ.js";import{i as T,t as E,u as D}from"./index-HzJ-_tmu.js";import{C as te,_ as O,a as k,c as ne,d as A,f as j,i as M,m as N,n as P,p as F,r as I,t as L}from"./use-settings-form-submit-Lp26uOhf.js";import{a as R,i as z,n as re,o as B,r as V,t as ie}from"./table-Bs6CQscS.js";var H=e(n(),1),U=t();function ae({open:e,onOpenChange:t,client:n,onEdit:r}){return(0,U.jsx)(c,{open:e,onOpenChange:t,children:(0,U.jsxs)(l,{className:`sm:max-w-md`,children:[(0,U.jsxs)(u,{children:[(0,U.jsx)(a,{children:`View Torrent Client`}),(0,U.jsx)(d,{children:`View torrent client details.`})]}),(0,U.jsxs)(`div`,{className:`grid flex-1 auto-rows-min gap-6 px-4`,children:[(0,U.jsxs)(`div`,{className:`grid gap-3`,children:[(0,U.jsx)(T,{children:`URL`}),(0,U.jsx)(`div`,{className:`bg-muted/50 rounded-md border px-3 py-2 font-mono text-sm break-all`,children:n?.url||`N/A`})]}),(0,U.jsxs)(`div`,{className:`grid gap-3`,children:[(0,U.jsx)(T,{children:`Username`}),(0,U.jsx)(`div`,{className:`bg-muted/50 rounded-md border px-3 py-2 font-mono text-sm break-all`,children:n?.user||`N/A`})]}),(0,U.jsxs)(`div`,{className:`grid gap-3`,children:[(0,U.jsx)(T,{children:`Password`}),(0,U.jsx)(`div`,{className:`bg-muted/50 rounded-md border px-3 py-2 font-mono text-sm break-all`,children:n?.password?`********`:`N/A`})]}),(0,U.jsxs)(`div`,{className:`grid gap-3`,children:[(0,U.jsx)(T,{children:`Read only`}),(0,U.jsx)(`div`,{className:`bg-muted/50 rounded-md border px-3 py-2 font-mono text-sm break-all`,children:n?.readOnly?`Yes`:`No`})]})]}),(0,U.jsxs)(s,{children:[r&&n&&(0,U.jsxs)(v,{type:`button`,onClick:()=>r(n),className:`flex-1`,children:[(0,U.jsx)(S,{className:`mr-2 h-4 w-4`}),`Edit`]}),(0,U.jsx)(o,{asChild:!0,className:`flex-1`,children:(0,U.jsx)(v,{type:`button`,variant:`outline`,className:`flex-1`,children:`Close`})})]})]})})}var W=e=>{try{return decodeURIComponent(e)}catch{return e}},G=e=>{let t=e.indexOf(`://`);if(t===-1)return e;let n=t+3,r=e.lastIndexOf(`@`);if(r<=n)return e;let i=e.slice(n,r),a=i.indexOf(`:`);if(a===-1)return e;let o=i.slice(0,a),s=i.slice(a+1),c=encodeURIComponent(W(o)),l=encodeURIComponent(W(s));return`${e.slice(0,n)}${c}:${l}${e.slice(r)}`},K=e=>new URL(G(e));function oe(e){return W(K(e).username)}function se(e){return W(K(e).password)}var q=e=>{try{let t=K(e);return`${t.protocol}//${t.host}${t.pathname}${t.search}${t.hash}`}catch(t){let n=e.indexOf(`://`),r=n===-1?-1:n+3,i=e.lastIndexOf(`@`);if(r!==-1&&i>r){let t=`${e.slice(0,r)}${e.slice(i+1)}`;try{let e=new URL(t);return`${e.protocol}//${e.host}`}catch{return t}}return console.warn(`Unable to strip credentials from client URL`,t),e}};function J({endpointUrl:e,username:t=``,password:n=``,includeUsername:r=!0}){let i=K(q(e));return i.username=r?t:``,i.password=n,i.toString()}function Y({client:e,endpointUrl:t,username:n=``,password:r=``,readonly:i=!1}){let a=J({endpointUrl:t,username:n,password:r,includeUsername:e.toLowerCase()!==`deluge`});return`${e.toLowerCase()}:${i?`readonly:`:``}${a}`}function X({client:e,endpointUrl:t,username:n=``,password:r=``}){return J({endpointUrl:t,username:n,password:r,includeUsername:e.toLowerCase()!==`deluge`})}function Z(e){return[`qbittorrent`,`rtorrent`,`transmission`,`deluge`].includes(e)}var Q=async({client:e,url:t,username:n=``,password:i})=>{try{let a=e.toLowerCase();return Z(a)?{success:(await r.clients.testConnection.mutate({client:a,url:t,username:n,password:i,readonly:!1})).success}:{success:!1}}catch(e){return console.error(`Error testing connection:`,e),{success:!1}}},$={qbittorrent:`qBittorrent`,rtorrent:`rTorrent`,transmission:`Transmission`,deluge:`Deluge`};function ce({open:e,onOpenChange:t,mode:n,client:r}){let[f,p]=(0,H.useState)(!1),{isFieldRequired:m}=j(N),h=i(),{data:g}=D(h.settings.get.queryOptions(void 0,{select:e=>e.config.torrentClients||[]})),{saveConfigAsync:_,isLoading:y}=P(),b=k({...A,defaultValues:r??{},onSubmit:async({value:e})=>{try{let i={...e,readOnly:e?.readOnly??!1},a=N.safeParse(i);if(a.success){let e=a.data,i=Y({client:e.client,endpointUrl:e.url,username:e.user??``,password:e.password??``,readonly:e.readOnly}),o;n===`edit`&&r&&r.index!==void 0?(o=[...g||[]],o[r.index]=i):o=[...g||[],i],await _({torrentClients:o}),t(!1)}else throw console.error(`FULL VALIDATION FAILED:`,a.error.format()),Error(`Validation failed`)}catch(e){return console.error(`Exception during full validation:`,e),{status:`error`,error:{_form:`An unexpected error occurred during validation`}}}},validators:{onSubmit:N}}),x=async()=>{p(!0);let e=String(b.getFieldValue(`client`)),t=String(b.getFieldValue(`url`)),n=String(b.getFieldValue(`user`)??``),r=String(b.getFieldValue(`password`)??``);(await Q({client:e,url:X({client:e,endpointUrl:t,username:n,password:r}),username:n,password:r})).success?(E.success(`Connection successful!`,{description:`The torrent client connection was successful.`}),p(!1)):(E.error(`Connection failed`,{description:`Failed to connect to the torrent client.`}),p(!1))},S=y||f;return(0,U.jsx)(c,{open:e,onOpenChange:t,children:(0,U.jsx)(l,{className:`sm:max-w-md`,children:(0,U.jsx)(M,{isFieldRequired:m,children:(0,U.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),e.stopPropagation(),b.handleSubmit()},children:[(0,U.jsxs)(u,{children:[(0,U.jsx)(a,{children:n===`edit`?`Edit Client`:`Create Client`}),(0,U.jsx)(d,{children:n===`edit`?`Edit the details of the torrent client.`:`Create a new torrent client.`})]}),(0,U.jsxs)(`div`,{className:`grid flex-1 auto-rows-min gap-6 px-4`,children:[(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`client`,children:e=>(0,U.jsx)(e.SelectField,{label:`Client`,options:$})})}),(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`url`,children:e=>(0,U.jsx)(e.TextField,{label:`Endpoint URL`})})}),(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`user`,children:e=>(0,U.jsx)(e.TextField,{label:`User`})})}),(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`password`,children:e=>(0,U.jsx)(e.TextField,{label:`Password`,type:`password`})})}),(0,U.jsx)(`div`,{className:`grid gap-3`,children:(0,U.jsx)(b.AppField,{name:`readOnly`,children:e=>(0,U.jsx)(e.SwitchField,{label:`Read only`})})}),(0,U.jsx)(b.Subscribe,{selector:e=>({urlValue:e.values.url,urlMeta:e.fieldMeta.url,userValue:e.values.user,userMeta:e.fieldMeta.user,passwordValue:e.values.password,passwordMeta:e.fieldMeta.password,clientValue:e.values.client}),children:({urlValue:e,urlMeta:t,userValue:n,userMeta:r,passwordValue:i,passwordMeta:a,clientValue:o})=>{let s=e&&!t?.errors?.length,c=typeof e==`string`&&e.trimStart().toLowerCase().startsWith(`scgi:`),l=c||o===`transmission`&&i===void 0?!0:i&&!a?.errors?.length,u=c||o===`deluge`||o===`transmission`?!0:n&&!r?.errors?.length;return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(v,{type:`button`,variant:`outline`,onClick:()=>{x()},disabled:!(s&&l&&u),className:`w-full`,children:f?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(C,{className:`animate-spin`}),`Testing connection...`]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(w,{className:`mr-2`}),`Test Connection`]})}),o===`qbittorrent`&&(0,U.jsxs)(`p`,{className:`text-muted-foreground -mt-4 px-2 text-sm italic`,children:[`Note: Testing connections can return false positives if`,` `,(0,U.jsx)(`code`,{className:`bg-yellow-100 px-1`,children:`Bypass auth on localhost`}),` `,`is enabled in qBittorrent.`]})]})}})]}),(0,U.jsxs)(s,{className:`mt-6`,children:[(0,U.jsx)(b.AppForm,{children:(0,U.jsx)(b.SubmitButton,{label:n===`edit`?`Update`:`Create`,actionLabel:n===`edit`?`Updating...`:`Creating...`})}),(0,U.jsx)(o,{asChild:!0,children:(0,U.jsx)(v,{type:`button`,variant:`outline`,disabled:S,children:`Cancel`})})]})]})})})})}function le(){let e=i(),{saveConfig:t}=P(),[n,r]=(0,H.useState)(void 0),[a,o]=(0,H.useState)(null),[s,c]=(0,H.useState)(null),[l,u]=(0,H.useState)(!1),[d,C]=(0,H.useState)(!1),[w,T]=(0,H.useState)(`create`),{isFieldRequired:E}=j(O),{data:A}=D(e.settings.get.queryOptions(void 0,{select:e=>{let t=F(e.config);return{formData:I(O,t,{includeUndefined:!0}),torrentClients:e.config.torrentClients}}})),N=L(),W=k({defaultValues:A?.formData??ne,onSubmit:N,validators:{onSubmit:O}}),[G,K]=(0,H.useState)(null);(0,H.useEffect)(()=>{G&&(document.getElementById(G)?.focus(),K(null))},[G]),(0,H.useEffect)(()=>{let e=A?.torrentClients??[];if(!e.length){r([]);return}let t=e.map((e,t)=>{if(!e)return null;let n=``,r=``,i=!1,a=``,o=``;if(typeof e==`object`)n=e.client,i=e.readOnly||!1,r=e.url,a=e.user||``,o=e.password||``;else if(typeof e==`string`){let t=String(e);n=t.split(`:`)[0];let s=`${n}:readonly:`,c=`${n}:`;i=t.startsWith(s);let l=t.startsWith(s)?t.slice(s.length):t.slice(c.length);if(!l)return null;let u=q(l);if(!u)return null;r=u,a=oe(l),o=se(l)}return!n||!r?null:{index:t,client:n,url:r,user:a,password:o,readOnly:i}}).filter(Boolean);r(t)},[A]);let J=e=>{e.preventDefault(),e.stopPropagation(),c(null),T(`create`),C(!0)},X=e=>{u(e),e||o(null)},Z=(e,t)=>{e.preventDefault(),e.stopPropagation(),o(null),c(t),u(!0)},Q=e=>{o(null),c(e),T(`edit`),u(!1),C(!0)},$=e=>{o(null);let i=e.index===void 0?n?.filter(t=>t.url!==e.url):n?.filter(t=>t.index!==e.index);r(i);let a=(i||[]).map(e=>Y({client:e.client,endpointUrl:e.url,username:e.user??``,password:e.password??``,readonly:e.readOnly??!1}));t({torrentClients:a})};return(0,U.jsxs)(_,{breadcrumbs:[`Settings`,`Torrent Clients`],actions:(0,U.jsxs)(v,{onClick:J,type:`button`,size:`sm`,children:[(0,U.jsx)(x,{className:`mr-2 h-4 w-4`}),`Add Torrent Client`]}),children:[(0,U.jsxs)(`div`,{className:`space-y-4`,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Torrent Clients`}),(0,U.jsx)(`p`,{className:`text-muted-foreground`,children:`Manage your torrent clients`})]}),n?(0,U.jsx)(`div`,{className:`mt-4 mb-7 overflow-x-auto rounded-lg border`,children:(0,U.jsxs)(ie,{children:[(0,U.jsx)(R,{className:`bg-muted sticky top-0 z-10`,children:(0,U.jsxs)(B,{className:`border-b`,children:[(0,U.jsx)(z,{children:`Client`}),(0,U.jsx)(z,{children:`RPC URL`}),(0,U.jsx)(z,{children:`Read only`}),(0,U.jsx)(z,{className:`text-right`,children:`Actions`})]})}),(0,U.jsxs)(re,{children:[n?.length===0&&(0,U.jsx)(B,{children:(0,U.jsx)(V,{colSpan:6,className:`text-center`,children:(0,U.jsx)(`p`,{className:`text-muted-foreground`,children:`No torrent clients configured. Add a client to start downloading.`})})}),n?.map(e=>(0,U.jsxs)(B,{className:`hover:bg-muted/50 cursor-pointer`,onClick:t=>Z(t,e),children:[(0,U.jsx)(V,{className:`font-medium`,children:e.client}),(0,U.jsx)(V,{className:`font-mono text-sm`,children:e.url}),(0,U.jsx)(V,{children:e.readOnly?`Yes`:`No`}),(0,U.jsx)(V,{className:`text-right`,children:(0,U.jsxs)(m,{open:a===e.url,onOpenChange:t=>o(t?e.url:null),children:[(0,U.jsx)(g,{asChild:!0,children:(0,U.jsxs)(v,{variant:`ghost`,className:`h-8 w-8 p-0`,type:`button`,onClick:e=>{e.preventDefault(),e.stopPropagation()},children:[(0,U.jsx)(`span`,{className:`sr-only`,children:`Actions`}),(0,U.jsx)(y,{className:`h-4 w-4`})]})}),(0,U.jsxs)(h,{align:`end`,children:[(0,U.jsx)(f,{children:`Actions`}),(0,U.jsxs)(p,{onClick:t=>{Z(t,e)},children:[(0,U.jsx)(b,{className:`mr-2 h-4 w-4`}),`View Details`]}),(0,U.jsxs)(p,{onClick:t=>{t.stopPropagation(),Q(e)},children:[(0,U.jsx)(S,{className:`mr-2 h-4 w-4`}),`Edit`]}),(0,U.jsxs)(p,{variant:`destructive`,onClick:t=>{t.stopPropagation(),$(e)},children:[(0,U.jsx)(ee,{className:`mr-2 h-4 w-4`}),`Delete`]})]})]})})]},e.url))]})]})}):(0,U.jsx)(`p`,{className:`mb-4 text-lg`,children:`No torrent clients configured. Add a client`}),(0,U.jsx)(M,{isFieldRequired:E,children:(0,U.jsx)(`form`,{className:`form flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),e.stopPropagation(),W.handleSubmit()},noValidate:!0,children:(0,U.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,U.jsx)(`h2`,{className:`text-xl font-bold`,children:`Torrent Client Options`}),(0,U.jsxs)(`fieldset`,{className:`form-fieldset w-full gap-6 rounded-md`,children:[(0,U.jsx)(`div`,{className:``,children:(0,U.jsx)(W.AppField,{name:`action`,children:e=>(0,U.jsx)(e.SelectField,{label:`Action`,options:te})})}),(0,U.jsx)(`div`,{className:``,children:(0,U.jsx)(W.AppField,{name:`linkCategory`,validators:{},children:e=>(0,U.jsx)(e.TextField,{label:`Link Category`,required:!1})})}),(0,U.jsx)(`div`,{className:``,children:(0,U.jsx)(W.AppField,{name:`torrentDir`,validators:{},children:e=>(0,U.jsx)(e.TextField,{label:`Torrent Directory`,required:!1})})}),(0,U.jsx)(`div`,{className:``,children:(0,U.jsx)(W.AppField,{name:`outputDir`,validators:{},children:e=>(0,U.jsx)(e.TextField,{label:`Output Directory`,required:!1})})}),(0,U.jsxs)(`div`,{className:`form-field-switches col-span-2 gap-x-12`,children:[(0,U.jsx)(W.AppField,{name:`skipRecheck`,children:e=>(0,U.jsx)(e.SwitchField,{label:`Skip Recheck`})}),(0,U.jsx)(W.AppField,{name:`useClientTorrents`,children:e=>(0,U.jsx)(e.SwitchField,{label:`Use Client Torrents`})}),(0,U.jsx)(W.AppField,{name:`duplicateCategories`,children:e=>(0,U.jsx)(e.SwitchField,{label:`Duplicate Categories`})})]})]}),(0,U.jsx)(W.AppForm,{children:(0,U.jsx)(W.SubmitButton,{})})]})})})]}),(0,U.jsx)(ae,{open:l,onOpenChange:X,client:s,onEdit:Q}),(0,U.jsx)(ce,{open:d,onOpenChange:e=>{C(e),e||o(null)},client:s,mode:w})]})}export{le as component};
@@ -1,2 +1,2 @@
1
- import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{L as r}from"./sidebar-Qy-rYdhU.js";import{t as i}from"./Page-CKwSnUie.js";import{a}from"./dist-B7BqKb_s.js";import{t as o}from"./button-DoKPR9Fv.js";import{t as s}from"./input-BggK3IOz.js";import{t as c}from"./loader-circle-D988WNxu.js";import{t as l}from"./test-tube-DD9Yz2bZ.js";import{t as u}from"./DeleteOption-DkdJCiOu.js";import{c as d,i as f,t as p,u as m}from"./index-NlorOk2I.js";import{S as h,a as g,b as _,f as v,h as y,i as b,o as x,p as S,r as C,t as w,x as T}from"./use-settings-form-submit-CDmMUcwW.js";import{t as E}from"./FieldInfo-rcCXc0d-.js";import{t as D}from"./switch-CttdmVGp.js";var O=e(n(),1),k=t();function A({className:e,...t}){return(0,k.jsx)(`textarea`,{"data-slot":`textarea`,className:a(`placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex w-full min-w-0 rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,e),...t})}var j=e=>typeof e==`object`&&!!e&&!Array.isArray(e),M=e=>j(e)&&Object.values(e).every(e=>typeof e==`string`);function N(e){return e.filter(e=>e.url!==``).map(e=>{if(!e.payload&&!e.headers)return e.url;let t={url:e.url};if(e.payload)try{let n=JSON.parse(e.payload);j(n)&&(t.payload=n)}catch{}if(e.headers)try{let n=JSON.parse(e.headers);M(n)&&(t.headers=n)}catch{}let n=_.safeParse(t);return n.success?n.data:e.url})}function P(){let{isFieldRequired:e}=v(y),t=r(),n=(0,O.useCallback)(e=>{let t=S(e.config);return C(y,t,{includeUndefined:!0})},[]),{data:a}=m(t.settings.get.queryOptions(void 0,{select:n})),_=w(),j=(0,O.useCallback)(({value:e})=>{let t={...e,notificationWebhookUrls:N(e.notificationWebhookUrls)};return _({value:t})},[_]),M=g({defaultValues:a??x,onSubmit:j,validators:{onSubmit:y}}),{mutate:P,isPending:F}=d(t.settings.testNotification.mutationOptions({onSuccess:e=>{let t=e.results,n=t.filter(e=>!e.ok),r=t.length===1?``:`s`;if(n.length===0)p.success(`All ${t.length} webhook${r} sent successfully!`);else{let e=n.map(e=>`${e.url.replace(/:\/\/[^@/]*@/,`://***@`)} — ${e.error}`).join(`
1
+ import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{L as r}from"./sidebar-ClCnahDY.js";import{t as i}from"./Page-DZliN5uq.js";import{a}from"./dist-B7BqKb_s.js";import{t as o}from"./button-DoKPR9Fv.js";import{t as s}from"./input-BggK3IOz.js";import{t as c}from"./loader-circle-D988WNxu.js";import{t as l}from"./test-tube-DD9Yz2bZ.js";import{t as u}from"./DeleteOption-DkdJCiOu.js";import{c as d,i as f,t as p,u as m}from"./index-HzJ-_tmu.js";import{S as h,a as g,b as _,f as v,h as y,i as b,o as x,p as S,r as C,t as w,x as T}from"./use-settings-form-submit-Lp26uOhf.js";import{t as E}from"./FieldInfo-rcCXc0d-.js";import{t as D}from"./switch-CttdmVGp.js";var O=e(n(),1),k=t();function A({className:e,...t}){return(0,k.jsx)(`textarea`,{"data-slot":`textarea`,className:a(`placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex w-full min-w-0 rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,e),...t})}var j=e=>typeof e==`object`&&!!e&&!Array.isArray(e),M=e=>j(e)&&Object.values(e).every(e=>typeof e==`string`);function N(e){return e.filter(e=>e.url!==``).map(e=>{if(!e.payload&&!e.headers)return e.url;let t={url:e.url};if(e.payload)try{let n=JSON.parse(e.payload);j(n)&&(t.payload=n)}catch{}if(e.headers)try{let n=JSON.parse(e.headers);M(n)&&(t.headers=n)}catch{}let n=_.safeParse(t);return n.success?n.data:e.url})}function P(){let{isFieldRequired:e}=v(y),t=r(),n=(0,O.useCallback)(e=>{let t=S(e.config);return C(y,t,{includeUndefined:!0})},[]),{data:a}=m(t.settings.get.queryOptions(void 0,{select:n})),_=w(),j=(0,O.useCallback)(({value:e})=>{let t={...e,notificationWebhookUrls:N(e.notificationWebhookUrls)};return _({value:t})},[_]),M=g({defaultValues:a??x,onSubmit:j,validators:{onSubmit:y}}),{mutate:P,isPending:F}=d(t.settings.testNotification.mutationOptions({onSuccess:e=>{let t=e.results,n=t.filter(e=>!e.ok),r=t.length===1?``:`s`;if(n.length===0)p.success(`All ${t.length} webhook${r} sent successfully!`);else{let e=n.map(e=>`${e.url.replace(/:\/\/[^@/]*@/,`://***@`)} — ${e.error}`).join(`
2
2
  `);p.error(`${n.length} of ${t.length} webhook${r} failed:\n${e}`)}},onError:e=>{p.error(`Test failed: ${e.message}`)}})),[I,L]=(0,O.useState)(null);return(0,O.useEffect)(()=>{I&&(document.getElementById(I)?.focus(),L(null))},[I]),(0,k.jsx)(i,{children:(0,k.jsxs)(`div`,{className:`space-y-4`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Connected App Settings`}),(0,k.jsx)(`p`,{className:`text-muted-foreground`,children:`Manage apps connected to Cross-seed.`})]}),(0,k.jsx)(b,{isFieldRequired:e,children:(0,k.jsx)(`form`,{className:`form flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),e.stopPropagation(),M.handleSubmit()},noValidate:!0,children:(0,k.jsxs)(`div`,{className:`flex flex-wrap gap-6`,children:[(0,k.jsxs)(`fieldset`,{className:`form-fieldset w-full gap-6`,children:[(0,k.jsx)(`div`,{children:(0,k.jsx)(M.AppField,{name:`host`,validators:{},children:e=>(0,k.jsx)(e.TextField,{label:`Host`})})}),(0,k.jsx)(`div`,{className:``,children:(0,k.jsx)(M.AppField,{name:`port`,validators:{},children:e=>(0,k.jsx)(e.NumberField,{label:`port`})})}),(0,k.jsx)(`div`,{children:(0,k.jsx)(M.AppField,{name:`apiKey`,validators:{},children:e=>(0,k.jsx)(e.TextField,{label:`API Key`})})})]}),(0,k.jsxs)(`fieldset`,{className:`form-fieldset border-border w-full gap-6 rounded-md border`,children:[(0,k.jsx)(`legend`,{children:`Connect to Other Apps`}),(0,k.jsx)(`div`,{className:``,children:(0,k.jsx)(M.Field,{name:`sonarr`,mode:`array`,validators:{},children:t=>(0,k.jsxs)(`div`,{className:`space-y-3`,children:[(0,k.jsxs)(f,{htmlFor:t.name,className:`block w-full`,children:[`Sonarr URL(s)`,e(t.name)&&(0,k.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value&&t.state.value.map((e,n)=>(0,k.jsxs)(`div`,{className:`gap-y- mb-3 flex flex-col`,children:[(0,k.jsx)(M.AppField,{name:`sonarr[${n}]`,validators:{onBlur:h().url().or(T(``))},children:e=>(0,k.jsx)(e.ArrayField,{showDelete:t.state.value&&t.state.value?.length>1,index:n,onDelete:()=>{t.removeValue(n)}})}),(0,k.jsx)(M.Subscribe,{selector:e=>e.fieldMeta[`${t.name}[${n}]`],children:e=>(0,k.jsx)(E,{fieldMeta:e})})]},n)),(0,k.jsx)(o,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue(``);let e=`${t.name}-${t.state.value?.length?t.state.value.length-1:0}`;L(e)},title:`Add ${t.name}`,children:`Add`})]})})}),(0,k.jsx)(`div`,{children:(0,k.jsx)(M.Field,{name:`radarr`,mode:`array`,validators:{},children:t=>(0,k.jsxs)(`div`,{className:`space-y-3`,children:[(0,k.jsxs)(f,{htmlFor:t.name,className:`block w-full`,children:[`Radarr URL(s)`,e(t.name)&&(0,k.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value&&t.state.value.map((e,n)=>(0,k.jsxs)(`div`,{className:`gap-y- mb-3 flex flex-col`,children:[(0,k.jsx)(M.AppField,{name:`radarr[${n}]`,validators:{onBlur:h().url().or(T(``))},children:e=>(0,k.jsx)(e.ArrayField,{showDelete:t.state.value&&t.state.value?.length>1,index:n,onDelete:()=>{t.removeValue(n)}})}),(0,k.jsx)(M.Subscribe,{selector:e=>e.fieldMeta[`${t.name}[${n}]`],children:e=>(0,k.jsx)(E,{fieldMeta:e})})]},n)),(0,k.jsx)(o,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue(``);let e=`${t.name}-${t.state.value?.length?t.state.value.length-1:0}`;L(e)},title:`Add ${t.name}`,children:`Add`})]})})}),(0,k.jsx)(`div`,{children:(0,k.jsx)(M.Field,{name:`notificationWebhookUrls`,mode:`array`,validators:{},children:t=>(0,k.jsxs)(`div`,{className:`space-y-3`,children:[(0,k.jsxs)(f,{htmlFor:t.name,className:`block w-full`,children:[`Notification Webhook(s)`,e(t.name)&&(0,k.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value?.map((e,n)=>(0,k.jsxs)(`fieldset`,{className:`border-border space-y-2 rounded-md border p-3`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(M.Field,{name:`notificationWebhookUrls[${n}].url`,validators:{onBlur:h().url().or(T(``))},children:e=>(0,k.jsx)(s,{id:`notificationWebhookUrls-${n}-url`,name:e.name,value:e.state.value,onChange:t=>e.handleChange(t.target.value),onBlur:e.handleBlur,placeholder:`https://example.com/webhook`,className:`flex-1`})}),(t.state.value?.length??0)>1&&(0,k.jsx)(u,{onClick:()=>t.removeValue(n)})]}),(0,k.jsx)(M.Subscribe,{selector:e=>e.fieldMeta[`notificationWebhookUrls[${n}].url`],children:e=>(0,k.jsx)(E,{fieldMeta:e})}),(0,k.jsxs)(`div`,{className:`mt-1 flex items-center gap-2`,children:[(0,k.jsx)(M.Field,{name:`notificationWebhookUrls[${n}].advancedOpen`,children:e=>(0,k.jsx)(D,{id:`notificationWebhookUrls-${n}-advanced`,checked:e.state.value,onCheckedChange:t=>e.handleChange(t)})}),(0,k.jsx)(f,{htmlFor:`notificationWebhookUrls-${n}-advanced`,className:`text-muted-foreground text-xs`,children:`Custom headers & payload`})]}),(0,k.jsx)(M.Subscribe,{selector:e=>e.values.notificationWebhookUrls?.[n]?.advancedOpen,children:e=>e?(0,k.jsxs)(`div`,{className:`mt-2 grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(f,{className:`text-muted-foreground text-xs`,children:`Headers (JSON)`}),(0,k.jsx)(M.Field,{name:`notificationWebhookUrls[${n}].headers`,children:e=>(0,k.jsx)(A,{name:e.name,value:e.state.value,onChange:t=>e.handleChange(t.target.value),onBlur:e.handleBlur,placeholder:`{"Authorization": "Bearer token"}`,rows:2,className:`resize-y font-mono text-xs`})}),(0,k.jsx)(M.Subscribe,{selector:e=>e.fieldMeta[`notificationWebhookUrls[${n}].headers`],children:e=>(0,k.jsx)(E,{fieldMeta:e})})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(f,{className:`text-muted-foreground text-xs`,children:`Payload (JSON)`}),(0,k.jsx)(M.Field,{name:`notificationWebhookUrls[${n}].payload`,children:e=>(0,k.jsx)(A,{name:e.name,value:e.state.value,onChange:t=>e.handleChange(t.target.value),onBlur:e.handleBlur,placeholder:`{"topic": "cross-seed", "priority": 3, "tags": ["seedbox"]}`,rows:2,className:`resize-y font-mono text-xs`})}),(0,k.jsx)(M.Subscribe,{selector:e=>e.fieldMeta[`notificationWebhookUrls[${n}].payload`],children:e=>(0,k.jsx)(E,{fieldMeta:e})})]})]}):null})]},n)),(0,k.jsxs)(`div`,{className:`flex gap-2`,children:[(0,k.jsx)(o,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue({url:``,payload:``,headers:``,advancedOpen:!1}),L(`notificationWebhookUrls-${t.state.value?.length??0}-url`)},title:`Add webhook`,children:`Add`}),(0,k.jsx)(o,{variant:`secondary`,type:`button`,disabled:F||!t.state.value?.some(e=>e.url),onClick:()=>{let e=t.state.value??[];if(e.some(e=>[e.headers,e.payload].some(e=>{if(!e)return!1;try{return JSON.parse(e),!1}catch{return!0}}))){p.error(`Fix invalid headers/payload JSON before testing.`);return}let n=N(e);n.length===0?p.error(`No webhooks to test.`):P({webhooks:n})},title:`Test all configured webhooks`,children:F?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(c,{className:`h-4 w-4 animate-spin`}),`Testing…`]}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(l,{className:`h-4 w-4`}),`Test Webhooks`]})})]})]})})})]}),(0,k.jsx)(M.AppForm,{children:(0,k.jsx)(M.SubmitButton,{})})]})})})]})})}export{P as component};
@@ -1 +1 @@
1
- import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{L as r}from"./sidebar-Qy-rYdhU.js";import{t as i}from"./Page-CKwSnUie.js";import{t as a}from"./button-DoKPR9Fv.js";import{c as o,f as s,t as c,u as l}from"./index-NlorOk2I.js";var u=e(n()),d=t();function f(){let[e,t]=(0,u.useState)(``),[n,f]=(0,u.useState)(!0),[p,m]=(0,u.useState)(``),h=(0,u.useRef)(null),g=r(),_=s(),{data:v,isLoading:y}=l(g.settings.get.queryOptions()),b=o(g.settings.replace.mutationOptions({onSuccess:()=>{c.success(`Settings saved successfully!`,{description:`Your changes will take effect on the next restart.`}),_.invalidateQueries({queryKey:[`settings.get`]})},onError:e=>{let t=e instanceof Error?e.message:`An unknown error occurred`;c.error(`Failed to save settings`,{description:t})}})),x=()=>{let e=h.current;if(e){let t=window.pageYOffset||document.documentElement.scrollTop;e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`,requestAnimationFrame(()=>{window.scrollTo(0,t)})}};(0,u.useEffect)(()=>{v?.config&&t(JSON.stringify(v.config,null,2))},[v]),(0,u.useEffect)(()=>{x()},[e]);let S=e=>{try{return JSON.parse(e),f(!0),m(``),!0}catch(e){return f(!1),m(e instanceof Error?e.message:`Invalid JSON`),!1}},C=e=>{t(e),S(e),setTimeout(x,0)},w=()=>{if(!n)c.error(`Cannot save invalid JSON`);else try{let t=JSON.parse(e);b.mutate(t)}catch{c.error(`Failed to parse JSON`)}},T=()=>{v?.config&&(t(JSON.stringify(v.config,null,2)),f(!0),m(``),setTimeout(x,0))};if(y)return(0,d.jsx)(i,{breadcrumbs:[`Diagnostics`,`Debug`],children:(0,d.jsx)(`div`,{className:`flex items-center justify-center p-8`,children:(0,d.jsx)(`div`,{children:`Loading settings...`})})});let E=(0,d.jsxs)(`div`,{className:`flex gap-2`,children:[(0,d.jsx)(a,{variant:`outline`,onClick:T,disabled:b.isPending,children:`Reset`}),(0,d.jsx)(a,{onClick:w,disabled:!n||b.isPending,children:b.isPending?`Saving...`:`Save`})]});return(0,d.jsx)(i,{breadcrumbs:[`Diagnostics`,`Debug`],actions:E,children:(0,d.jsxs)(`div`,{className:`space-y-4`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Debug Settings`}),(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`Raw JSON editor for debugging configuration issues`})]}),(0,d.jsx)(`div`,{className:`relative`,children:(0,d.jsx)(`textarea`,{ref:h,value:e,onChange:e=>C(e.target.value),className:`min-h-96 w-full resize-none overflow-hidden rounded-md border p-3 font-mono text-sm ${n?`border-gray-300 dark:border-gray-600`:`border-red-500 dark:border-red-400`} bg-white text-gray-900 dark:bg-gray-900 dark:text-gray-100`,spellCheck:!1,placeholder:`Loading settings...`})}),!n&&(0,d.jsxs)(`div`,{className:`rounded-md bg-red-50 p-3 text-sm text-red-700 dark:bg-red-900/20 dark:text-red-400`,children:[(0,d.jsx)(`strong`,{children:`JSON Error:`}),` `,p]})]})})}export{f as component};
1
+ import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{L as r}from"./sidebar-ClCnahDY.js";import{t as i}from"./Page-DZliN5uq.js";import{t as a}from"./button-DoKPR9Fv.js";import{c as o,f as s,t as c,u as l}from"./index-HzJ-_tmu.js";var u=e(n()),d=t();function f(){let[e,t]=(0,u.useState)(``),[n,f]=(0,u.useState)(!0),[p,m]=(0,u.useState)(``),h=(0,u.useRef)(null),g=r(),_=s(),{data:v,isLoading:y}=l(g.settings.get.queryOptions()),b=o(g.settings.replace.mutationOptions({onSuccess:()=>{c.success(`Settings saved successfully!`,{description:`Your changes will take effect on the next restart.`}),_.invalidateQueries({queryKey:[`settings.get`]})},onError:e=>{let t=e instanceof Error?e.message:`An unknown error occurred`;c.error(`Failed to save settings`,{description:t})}})),x=()=>{let e=h.current;if(e){let t=window.pageYOffset||document.documentElement.scrollTop;e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`,requestAnimationFrame(()=>{window.scrollTo(0,t)})}};(0,u.useEffect)(()=>{v?.config&&t(JSON.stringify(v.config,null,2))},[v]),(0,u.useEffect)(()=>{x()},[e]);let S=e=>{try{return JSON.parse(e),f(!0),m(``),!0}catch(e){return f(!1),m(e instanceof Error?e.message:`Invalid JSON`),!1}},C=e=>{t(e),S(e),setTimeout(x,0)},w=()=>{if(!n)c.error(`Cannot save invalid JSON`);else try{let t=JSON.parse(e);b.mutate(t)}catch{c.error(`Failed to parse JSON`)}},T=()=>{v?.config&&(t(JSON.stringify(v.config,null,2)),f(!0),m(``),setTimeout(x,0))};if(y)return(0,d.jsx)(i,{breadcrumbs:[`Diagnostics`,`Debug`],children:(0,d.jsx)(`div`,{className:`flex items-center justify-center p-8`,children:(0,d.jsx)(`div`,{children:`Loading settings...`})})});let E=(0,d.jsxs)(`div`,{className:`flex gap-2`,children:[(0,d.jsx)(a,{variant:`outline`,onClick:T,disabled:b.isPending,children:`Reset`}),(0,d.jsx)(a,{onClick:w,disabled:!n||b.isPending,children:b.isPending?`Saving...`:`Save`})]});return(0,d.jsx)(i,{breadcrumbs:[`Diagnostics`,`Debug`],actions:E,children:(0,d.jsxs)(`div`,{className:`space-y-4`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Debug Settings`}),(0,d.jsx)(`p`,{className:`text-muted-foreground`,children:`Raw JSON editor for debugging configuration issues`})]}),(0,d.jsx)(`div`,{className:`relative`,children:(0,d.jsx)(`textarea`,{ref:h,value:e,onChange:e=>C(e.target.value),className:`min-h-96 w-full resize-none overflow-hidden rounded-md border p-3 font-mono text-sm ${n?`border-gray-300 dark:border-gray-600`:`border-red-500 dark:border-red-400`} bg-white text-gray-900 dark:bg-gray-900 dark:text-gray-100`,spellCheck:!1,placeholder:`Loading settings...`})}),!n&&(0,d.jsxs)(`div`,{className:`rounded-md bg-red-50 p-3 text-sm text-red-700 dark:bg-red-900/20 dark:text-red-400`,children:[(0,d.jsx)(`strong`,{children:`JSON Error:`}),` `,p]})]})})}export{f as component};
@@ -1 +1 @@
1
- import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{L as r}from"./sidebar-Qy-rYdhU.js";import{t as i}from"./Page-CKwSnUie.js";import{t as a}from"./button-DoKPR9Fv.js";import{t as o}from"./input-BggK3IOz.js";import{t as s}from"./DeleteOption-DkdJCiOu.js";import{i as c,u as l}from"./index-NlorOk2I.js";import{S as u,a as d,f,g as p,i as m,p as h,r as g,s as _,t as v,w as y}from"./use-settings-form-submit-CDmMUcwW.js";import{t as b}from"./FieldInfo-rcCXc0d-.js";var x=e(n()),S=t();function C(){let{isFieldRequired:e}=f(p),t=r(),{data:n}=l(t.settings.get.queryOptions(void 0,{select:e=>{let t=h(e.config);return g(p,t,{includeUndefined:!0})}})),C=v(),w=d({defaultValues:n??_,onSubmit:C,validators:{onSubmit:p}}),[T,E]=(0,x.useState)(null);return(0,x.useEffect)(()=>{T&&(document.getElementById(T)?.focus(),E(null))},[T]),(0,S.jsx)(i,{children:(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Directory & Path Settings`}),(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`Manage the directories and paths used by cross-seed.`})]}),(0,S.jsx)(m,{isFieldRequired:e,children:(0,S.jsx)(`form`,{className:`form flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),e.stopPropagation(),w.handleSubmit()},noValidate:!0,children:(0,S.jsxs)(`div`,{className:`flex flex-wrap gap-6`,children:[(0,S.jsxs)(`fieldset`,{className:`form-fieldset w-full gap-6`,children:[(0,S.jsx)(`div`,{className:``,children:(0,S.jsx)(w.Field,{name:`dataDirs`,mode:`array`,children:t=>(0,S.jsxs)(`div`,{className:`space-y-3`,children:[(0,S.jsxs)(c,{htmlFor:t.name,className:`block w-full`,children:[`Data Directories`,e(t.name)&&(0,S.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value.map((e,n)=>(0,S.jsx)(w.Field,{name:`dataDirs[${n}]`,validators:{onBlur:u()},children:e=>(0,S.jsxs)(`div`,{className:`mb-3 flex flex-col gap-y-1`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(o,{type:`text`,className:`form-input`,value:e.state.value,"aria-invalid":!!(e.state.meta.isTouched&&e.state.meta.errorMap.onBlur),onBlur:e.handleBlur,onChange:t=>e.handleChange(t.target.value)}),t.state.value.length>1&&(0,S.jsx)(s,{onClick:()=>{t.removeValue(n)}})]}),e.state.meta.isTouched&&e.state.meta.errors&&(0,S.jsx)(b,{fieldMeta:e.state.meta})]})},`${t.name}-${n}`)),(0,S.jsx)(a,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue(``),E(`${t.name}-${t.state.value.length-1}`)},title:`Add ${t.name}`,children:`Add`})]})})}),(0,S.jsx)(w.AppField,{name:`flatLinking`,children:e=>(0,S.jsx)(e.SwitchField,{label:`Flat Linking`,className:`form-field__switch flex flex-col items-start gap-5`})}),(0,S.jsx)(`div`,{className:``,children:(0,S.jsx)(w.AppField,{name:`linkType`,children:e=>(0,S.jsx)(e.SelectField,{label:`Link Type`,options:y})})}),(0,S.jsx)(`div`,{className:``,children:(0,S.jsx)(w.Field,{name:`linkDirs`,mode:`array`,children:t=>(0,S.jsxs)(`div`,{className:`space-y-3`,children:[(0,S.jsxs)(c,{htmlFor:t.name,className:`block w-full`,children:[`Link Directories`,e(t.name)&&(0,S.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value?.map((e,n)=>(0,S.jsxs)(`div`,{className:`gap-y- mb-3 flex flex-col`,children:[(0,S.jsx)(w.AppField,{name:`linkDirs[${n}]`,validators:{onBlur:u()},children:e=>(0,S.jsx)(e.ArrayField,{showDelete:(t.state.value&&t.state.value?.length>1)??void 0,index:n,onDelete:()=>{t.removeValue(n)}})}),(0,S.jsx)(w.Subscribe,{selector:e=>e.fieldMeta[`${t.name}[${n}]`],children:e=>(0,S.jsx)(b,{fieldMeta:e})})]},n)),(0,S.jsx)(a,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue(``);let e=`${t.name}-${t.state.value?.length?t.state.value.length-1:0}`;E(e)},title:`Add ${t.name}`,children:`Add`})]})})}),(0,S.jsx)(`div`,{className:``,children:(0,S.jsx)(w.AppField,{name:`maxDataDepth`,children:e=>(0,S.jsx)(e.NumberField,{label:`Max Data Depth`})})})]}),(0,S.jsx)(w.AppForm,{children:(0,S.jsx)(w.SubmitButton,{})})]})})})]})})}export{C as component};
1
+ import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{L as r}from"./sidebar-ClCnahDY.js";import{t as i}from"./Page-DZliN5uq.js";import{t as a}from"./button-DoKPR9Fv.js";import{t as o}from"./input-BggK3IOz.js";import{t as s}from"./DeleteOption-DkdJCiOu.js";import{i as c,u as l}from"./index-HzJ-_tmu.js";import{S as u,a as d,f,g as p,i as m,p as h,r as g,s as _,t as v,w as y}from"./use-settings-form-submit-Lp26uOhf.js";import{t as b}from"./FieldInfo-rcCXc0d-.js";var x=e(n()),S=t();function C(){let{isFieldRequired:e}=f(p),t=r(),{data:n}=l(t.settings.get.queryOptions(void 0,{select:e=>{let t=h(e.config);return g(p,t,{includeUndefined:!0})}})),C=v(),w=d({defaultValues:n??_,onSubmit:C,validators:{onSubmit:p}}),[T,E]=(0,x.useState)(null);return(0,x.useEffect)(()=>{T&&(document.getElementById(T)?.focus(),E(null))},[T]),(0,S.jsx)(i,{children:(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h1`,{className:`text-2xl font-bold`,children:`Directory & Path Settings`}),(0,S.jsx)(`p`,{className:`text-muted-foreground`,children:`Manage the directories and paths used by cross-seed.`})]}),(0,S.jsx)(m,{isFieldRequired:e,children:(0,S.jsx)(`form`,{className:`form flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),e.stopPropagation(),w.handleSubmit()},noValidate:!0,children:(0,S.jsxs)(`div`,{className:`flex flex-wrap gap-6`,children:[(0,S.jsxs)(`fieldset`,{className:`form-fieldset w-full gap-6`,children:[(0,S.jsx)(`div`,{className:``,children:(0,S.jsx)(w.Field,{name:`dataDirs`,mode:`array`,children:t=>(0,S.jsxs)(`div`,{className:`space-y-3`,children:[(0,S.jsxs)(c,{htmlFor:t.name,className:`block w-full`,children:[`Data Directories`,e(t.name)&&(0,S.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value.map((e,n)=>(0,S.jsx)(w.Field,{name:`dataDirs[${n}]`,validators:{onBlur:u()},children:e=>(0,S.jsxs)(`div`,{className:`mb-3 flex flex-col gap-y-1`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(o,{type:`text`,className:`form-input`,value:e.state.value,"aria-invalid":!!(e.state.meta.isTouched&&e.state.meta.errorMap.onBlur),onBlur:e.handleBlur,onChange:t=>e.handleChange(t.target.value)}),t.state.value.length>1&&(0,S.jsx)(s,{onClick:()=>{t.removeValue(n)}})]}),e.state.meta.isTouched&&e.state.meta.errors&&(0,S.jsx)(b,{fieldMeta:e.state.meta})]})},`${t.name}-${n}`)),(0,S.jsx)(a,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue(``),E(`${t.name}-${t.state.value.length-1}`)},title:`Add ${t.name}`,children:`Add`})]})})}),(0,S.jsx)(w.AppField,{name:`flatLinking`,children:e=>(0,S.jsx)(e.SwitchField,{label:`Flat Linking`,className:`form-field__switch flex flex-col items-start gap-5`})}),(0,S.jsx)(`div`,{className:``,children:(0,S.jsx)(w.AppField,{name:`linkType`,children:e=>(0,S.jsx)(e.SelectField,{label:`Link Type`,options:y})})}),(0,S.jsx)(`div`,{className:``,children:(0,S.jsx)(w.Field,{name:`linkDirs`,mode:`array`,children:t=>(0,S.jsxs)(`div`,{className:`space-y-3`,children:[(0,S.jsxs)(c,{htmlFor:t.name,className:`block w-full`,children:[`Link Directories`,e(t.name)&&(0,S.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value?.map((e,n)=>(0,S.jsxs)(`div`,{className:`gap-y- mb-3 flex flex-col`,children:[(0,S.jsx)(w.AppField,{name:`linkDirs[${n}]`,validators:{onBlur:u()},children:e=>(0,S.jsx)(e.ArrayField,{showDelete:(t.state.value&&t.state.value?.length>1)??void 0,index:n,onDelete:()=>{t.removeValue(n)}})}),(0,S.jsx)(w.Subscribe,{selector:e=>e.fieldMeta[`${t.name}[${n}]`],children:e=>(0,S.jsx)(b,{fieldMeta:e})})]},n)),(0,S.jsx)(a,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue(``);let e=`${t.name}-${t.state.value?.length?t.state.value.length-1:0}`;E(e)},title:`Add ${t.name}`,children:`Add`})]})})}),(0,S.jsx)(`div`,{className:``,children:(0,S.jsx)(w.AppField,{name:`maxDataDepth`,children:e=>(0,S.jsx)(e.NumberField,{label:`Max Data Depth`})})})]}),(0,S.jsx)(w.AppForm,{children:(0,S.jsx)(w.SubmitButton,{})})]})})})]})})}export{C as component};
@@ -1 +1 @@
1
- import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{a as r}from"./dist-B7BqKb_s.js";import{t as i}from"./input-BggK3IOz.js";import{a,i as o,n as s,r as c,t as l}from"./select-BzZ418Yt.js";import{i as u}from"./index-NlorOk2I.js";import{D as d}from"./use-settings-form-submit-CDmMUcwW.js";import{n as f,t as p}from"./required-indicator-Ba9NOQEP.js";import{t as m}from"./FieldInfo-rcCXc0d-.js";var h=e(n(),1),g=t(),_=[{label:`Millisecond`,labelPlural:`Milliseconds`,value:`milliseconds`,ms:1},{label:`Second`,labelPlural:`Seconds`,value:`seconds`,ms:1e3},{label:`Minute`,labelPlural:`Minutes`,value:`minutes`,ms:6e4},{label:`Hour`,labelPlural:`Hours`,value:`hours`,ms:36e5},{label:`Day`,labelPlural:`Days`,value:`days`,ms:864e5}];function v({id:e,className:t,value:n,onChange:u,onBlur:d,units:f=_,disabled:p=!1}){let m=(0,h.useMemo)(()=>f,[f]),v=(0,h.useMemo)(()=>C(n),[n]),[S,T]=(0,h.useState)(()=>v==null?m[2]?.value??m[0].value:y(v,m).value),[E,D]=(0,h.useState)(``),[O,k]=(0,h.useState)(!1),A=m.find(e=>e.value===S)??m[0],j=w(A,b(E));(0,h.useEffect)(()=>{if(!O&&v!=null){let e=y(v,m);e.value!==S&&T(e.value)}},[O,v,S,m]),(0,h.useEffect)(()=>{if(v==null){D(``);return}let e=m.find(e=>e.value===S)??m[0];D(x(v,e.ms))},[v,S,m]);let M=e=>{k(!0),D(e);let t=b(e);u(t==null?null:t*A.ms)};return(0,g.jsxs)(`div`,{className:r(`flex items-center gap-3`,t),children:[(0,g.jsx)(i,{id:e,name:e,type:`number`,min:0,step:`any`,className:`flex-1 shadow-none`,value:E,onBlur:d,inputMode:`decimal`,disabled:p,onChange:e=>M(e.target.value)}),(0,g.jsxs)(l,{value:A.value,onValueChange:e=>{k(!0),T(e)},disabled:p,children:[(0,g.jsx)(o,{className:`w-32 shadow-none`,children:(0,g.jsx)(a,{"aria-label":j,children:j})}),(0,g.jsx)(s,{children:m.map(e=>(0,g.jsx)(c,{value:e.value,children:e.labelPlural},e.value))})]})]})}function y(e,t){if(!Number.isFinite(e)||e<=0)return t[0];for(let n=t.length-1;n>=0;--n){let r=t[n];if(e>=r.ms)return r}return t[0]}function b(e){if(!e||e.trim()===``)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:t}function x(e,t){if(t===0)return``;let n=e/t;return Number.isInteger(n)?n.toString():S(n.toFixed(6))}function S(e){return e.includes(`.`)?e.replace(/\.?0+$/,``):e}function C(e){if(e==null)return null;if(typeof e==`number`)return Number.isFinite(e)?e:null;let t=Number(e);return Number.isFinite(t)?t:null}function w(e,t){return t==null||t!==1?e.labelPlural:e.label}var T=({label:e,className:t,hideLabel:n=!1})=>{let i=d(),{isFieldRequired:a}=f();return(0,g.jsxs)(`div`,{className:r(`space-y-3`,t),children:[!n&&(0,g.jsxs)(u,{htmlFor:i.name,className:`block w-full`,children:[e,a(i.name)&&(0,g.jsx)(p,{})]}),(0,g.jsx)(v,{id:i.name,value:i.state.value??null,onBlur:i.handleBlur,onChange:e=>i.handleChange(e)}),(0,g.jsx)(m,{fieldMeta:i.state.meta})]})};export{T as default};
1
+ import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{a as r}from"./dist-B7BqKb_s.js";import{t as i}from"./input-BggK3IOz.js";import{a,i as o,n as s,r as c,t as l}from"./select-D1_fvqIj.js";import{i as u}from"./index-HzJ-_tmu.js";import{D as d}from"./use-settings-form-submit-Lp26uOhf.js";import{n as f,t as p}from"./required-indicator-DU_Lp1S1.js";import{t as m}from"./FieldInfo-rcCXc0d-.js";var h=e(n(),1),g=t(),_=[{label:`Millisecond`,labelPlural:`Milliseconds`,value:`milliseconds`,ms:1},{label:`Second`,labelPlural:`Seconds`,value:`seconds`,ms:1e3},{label:`Minute`,labelPlural:`Minutes`,value:`minutes`,ms:6e4},{label:`Hour`,labelPlural:`Hours`,value:`hours`,ms:36e5},{label:`Day`,labelPlural:`Days`,value:`days`,ms:864e5}];function v({id:e,className:t,value:n,onChange:u,onBlur:d,units:f=_,disabled:p=!1}){let m=(0,h.useMemo)(()=>f,[f]),v=(0,h.useMemo)(()=>C(n),[n]),[S,T]=(0,h.useState)(()=>v==null?m[2]?.value??m[0].value:y(v,m).value),[E,D]=(0,h.useState)(``),[O,k]=(0,h.useState)(!1),A=m.find(e=>e.value===S)??m[0],j=w(A,b(E));(0,h.useEffect)(()=>{if(!O&&v!=null){let e=y(v,m);e.value!==S&&T(e.value)}},[O,v,S,m]),(0,h.useEffect)(()=>{if(v==null){D(``);return}let e=m.find(e=>e.value===S)??m[0];D(x(v,e.ms))},[v,S,m]);let M=e=>{k(!0),D(e);let t=b(e);u(t==null?null:t*A.ms)};return(0,g.jsxs)(`div`,{className:r(`flex items-center gap-3`,t),children:[(0,g.jsx)(i,{id:e,name:e,type:`number`,min:0,step:`any`,className:`flex-1 shadow-none`,value:E,onBlur:d,inputMode:`decimal`,disabled:p,onChange:e=>M(e.target.value)}),(0,g.jsxs)(l,{value:A.value,onValueChange:e=>{k(!0),T(e)},disabled:p,children:[(0,g.jsx)(o,{className:`w-32 shadow-none`,children:(0,g.jsx)(a,{"aria-label":j,children:j})}),(0,g.jsx)(s,{children:m.map(e=>(0,g.jsx)(c,{value:e.value,children:e.labelPlural},e.value))})]})]})}function y(e,t){if(!Number.isFinite(e)||e<=0)return t[0];for(let n=t.length-1;n>=0;--n){let r=t[n];if(e>=r.ms)return r}return t[0]}function b(e){if(!e||e.trim()===``)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:t}function x(e,t){if(t===0)return``;let n=e/t;return Number.isInteger(n)?n.toString():S(n.toFixed(6))}function S(e){return e.includes(`.`)?e.replace(/\.?0+$/,``):e}function C(e){if(e==null)return null;if(typeof e==`number`)return Number.isFinite(e)?e:null;let t=Number(e);return Number.isFinite(t)?t:null}function w(e,t){return t==null||t!==1?e.labelPlural:e.label}var T=({label:e,className:t,hideLabel:n=!1})=>{let i=d(),{isFieldRequired:a}=f();return(0,g.jsxs)(`div`,{className:r(`space-y-3`,t),children:[!n&&(0,g.jsxs)(u,{htmlFor:i.name,className:`block w-full`,children:[e,a(i.name)&&(0,g.jsx)(p,{})]}),(0,g.jsx)(v,{id:i.name,value:i.state.value??null,onBlur:i.handleBlur,onChange:e=>i.handleChange(e)}),(0,g.jsx)(m,{fieldMeta:i.state.meta})]})};export{T as default};
@@ -1 +1 @@
1
- import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{L as r}from"./sidebar-Qy-rYdhU.js";import{t as i}from"./Page-CKwSnUie.js";import{t as a}from"./button-DoKPR9Fv.js";import{t as o}from"./input-BggK3IOz.js";import{t as s}from"./createLucideIcon-Cv-_CLkr.js";import{t as c}from"./DeleteOption-DkdJCiOu.js";import{c as l,f as u,i as d,t as f,u as p}from"./index-NlorOk2I.js";import{a as m,f as h,i as g,l as _,p as v,r as y,t as b,v as x}from"./use-settings-form-submit-CDmMUcwW.js";import{t as S}from"./FieldInfo-rcCXc0d-.js";var C=s(`clipboard`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}]]),w=s(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),T=e(n()),E=t();function D(){let{isFieldRequired:e}=h(x),t=r(),n=u(),{data:s}=p(t.settings.get.queryOptions(void 0)),D=s?.config?y(x,v(s.config),{includeUndefined:!0}):void 0,O=b(),k=m({defaultValues:D??_,onSubmit:O,validators:{onSubmit:x}}),[A,j]=(0,T.useState)(null),[M,N]=(0,T.useState)(``);(0,T.useEffect)(()=>{A&&(document.getElementById(A)?.focus(),j(null))},[A]),(0,T.useEffect)(()=>{s?.apiKey&&N(s.apiKey)},[s?.apiKey]);let P=l(t.settings.resetApiKey.mutationOptions({onSuccess:async({apiKey:e})=>{N(e),await n.invalidateQueries({queryKey:t.settings.get.queryKey(),exact:!1}),f.success(`API key regenerated and saved`)},onError:e=>{f.error(`Failed to regenerate API key`,{description:e.message||`An unknown error occurred`})}})),F=e=>{e.currentTarget.select()},I=async()=>{try{await navigator.clipboard.writeText(M),f.success(`API key copied`)}catch(e){f.error(`Failed to copy API key`,{description:e instanceof Error?e.message:`Clipboard unavailable`})}};return(0,E.jsx)(i,{children:(0,E.jsxs)(`div`,{className:`space-y-4`,children:[(0,E.jsx)(`div`,{children:(0,E.jsx)(`h1`,{className:`text-2xl font-bold`,children:`General Settings`})}),(0,E.jsx)(g,{isFieldRequired:e,children:(0,E.jsx)(`form`,{className:`form flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),e.stopPropagation(),k.handleSubmit()},noValidate:!0,children:(0,E.jsxs)(`div`,{className:`flex flex-wrap gap-6`,children:[(0,E.jsxs)(`fieldset`,{className:`form-fieldset w-full gap-6`,children:[(0,E.jsx)(k.AppField,{name:`includeNonVideos`,children:e=>(0,E.jsx)(e.SwitchField,{label:`Include Non-Videos`})}),(0,E.jsx)(k.AppField,{name:`includeSingleEpisodes`,children:e=>(0,E.jsx)(e.SwitchField,{label:`Include Single Episodes`})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.AppField,{name:`snatchTimeout`,validators:{},children:e=>(0,E.jsx)(e.DurationField,{label:`Snatch Timeout`})})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.AppField,{name:`fuzzySizeThreshold`,validators:{},children:e=>(0,E.jsx)(e.NumberField,{label:`Fuzzy Size Threshold`,step:`0.01`})})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.AppField,{name:`seasonFromEpisodes`,validators:{},children:e=>(0,E.jsx)(e.NumberField,{label:`Season from Episodes`,min:`0`})})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.AppField,{name:`autoResumeMaxDownload`,children:e=>(0,E.jsx)(e.NumberField,{label:`Auto-resume Max Download`})})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.Field,{name:`blockList`,mode:`array`,children:t=>(0,E.jsxs)(`div`,{className:`space-y-3`,children:[(0,E.jsxs)(d,{htmlFor:t.name,className:`block w-full`,children:[`Block List`,e(t.name)&&(0,E.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value.map((e,n)=>(0,E.jsx)(k.Field,{name:`blockList[${n}]`,children:e=>(0,E.jsxs)(`div`,{className:`gap-y- mb-3 flex flex-col`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(o,{type:`text`,className:`form-input`,value:e.state.value,"aria-invalid":!!(e.state.meta.isTouched&&e.state.meta.errorMap.onBlur),onBlur:e.handleBlur,onChange:t=>e.handleChange(t.target.value)}),t.state.value.length>1&&(0,E.jsx)(c,{onClick:()=>{t.removeValue(n)}})]}),e.state.meta.isTouched&&e.state.meta.errors&&(0,E.jsx)(S,{fieldMeta:e.state.meta})]})},`${t.name}-${n}`)),(0,E.jsx)(a,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue(``),j(`${t.name}-${t.state.value.length}`)},title:`Add ${t.name}`,children:`Add`})]})})}),(0,E.jsxs)(`div`,{className:`space-y-3`,children:[(0,E.jsx)(d,{htmlFor:`apiKey`,children:`API Key`}),(0,E.jsxs)(`div`,{className:`flex max-w-3xl flex-col gap-2 lg:flex-row`,children:[(0,E.jsx)(o,{id:`apiKey`,type:`text`,value:M,autoComplete:`off`,spellCheck:!1,readOnly:!0,onClick:F,onFocus:F}),(0,E.jsxs)(`div`,{className:`flex gap-2`,children:[(0,E.jsxs)(a,{type:`button`,variant:`outline`,disabled:!M,onClick:()=>{I()},children:[(0,E.jsx)(C,{}),`Copy`]}),(0,E.jsxs)(a,{type:`button`,variant:`outline`,disabled:P.isPending,onClick:()=>P.mutate(),children:[(0,E.jsx)(w,{}),`Regenerate & Save`]})]})]})]})]}),(0,E.jsx)(k.AppForm,{children:(0,E.jsx)(k.SubmitButton,{})})]})})})]})})}export{D as component};
1
+ import{a as e,n as t,r as n}from"./with-selector-fbK2t2oY.js";import{L as r}from"./sidebar-ClCnahDY.js";import{t as i}from"./Page-DZliN5uq.js";import{t as a}from"./button-DoKPR9Fv.js";import{t as o}from"./input-BggK3IOz.js";import{t as s}from"./createLucideIcon-Cv-_CLkr.js";import{t as c}from"./DeleteOption-DkdJCiOu.js";import{c as l,f as u,i as d,t as f,u as p}from"./index-HzJ-_tmu.js";import{a as m,f as h,i as g,l as _,p as v,r as y,t as b,v as x}from"./use-settings-form-submit-Lp26uOhf.js";import{t as S}from"./FieldInfo-rcCXc0d-.js";var C=s(`clipboard`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}]]),w=s(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),T=e(n()),E=t();function D(){let{isFieldRequired:e}=h(x),t=r(),n=u(),{data:s}=p(t.settings.get.queryOptions(void 0)),D=s?.config?y(x,v(s.config),{includeUndefined:!0}):void 0,O=b(),k=m({defaultValues:D??_,onSubmit:O,validators:{onSubmit:x}}),[A,j]=(0,T.useState)(null),[M,N]=(0,T.useState)(``);(0,T.useEffect)(()=>{A&&(document.getElementById(A)?.focus(),j(null))},[A]),(0,T.useEffect)(()=>{s?.apiKey&&N(s.apiKey)},[s?.apiKey]);let P=l(t.settings.resetApiKey.mutationOptions({onSuccess:async({apiKey:e})=>{N(e),await n.invalidateQueries({queryKey:t.settings.get.queryKey(),exact:!1}),f.success(`API key regenerated and saved`)},onError:e=>{f.error(`Failed to regenerate API key`,{description:e.message||`An unknown error occurred`})}})),F=e=>{e.currentTarget.select()},I=async()=>{try{await navigator.clipboard.writeText(M),f.success(`API key copied`)}catch(e){f.error(`Failed to copy API key`,{description:e instanceof Error?e.message:`Clipboard unavailable`})}};return(0,E.jsx)(i,{children:(0,E.jsxs)(`div`,{className:`space-y-4`,children:[(0,E.jsx)(`div`,{children:(0,E.jsx)(`h1`,{className:`text-2xl font-bold`,children:`General Settings`})}),(0,E.jsx)(g,{isFieldRequired:e,children:(0,E.jsx)(`form`,{className:`form flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),e.stopPropagation(),k.handleSubmit()},noValidate:!0,children:(0,E.jsxs)(`div`,{className:`flex flex-wrap gap-6`,children:[(0,E.jsxs)(`fieldset`,{className:`form-fieldset w-full gap-6`,children:[(0,E.jsx)(k.AppField,{name:`includeNonVideos`,children:e=>(0,E.jsx)(e.SwitchField,{label:`Include Non-Videos`})}),(0,E.jsx)(k.AppField,{name:`includeSingleEpisodes`,children:e=>(0,E.jsx)(e.SwitchField,{label:`Include Single Episodes`})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.AppField,{name:`snatchTimeout`,validators:{},children:e=>(0,E.jsx)(e.DurationField,{label:`Snatch Timeout`})})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.AppField,{name:`fuzzySizeThreshold`,validators:{},children:e=>(0,E.jsx)(e.NumberField,{label:`Fuzzy Size Threshold`,step:`0.01`})})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.AppField,{name:`seasonFromEpisodes`,validators:{},children:e=>(0,E.jsx)(e.NumberField,{label:`Season from Episodes`,min:`0`})})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.AppField,{name:`autoResumeMaxDownload`,children:e=>(0,E.jsx)(e.NumberField,{label:`Auto-resume Max Download`})})}),(0,E.jsx)(`div`,{className:``,children:(0,E.jsx)(k.Field,{name:`blockList`,mode:`array`,children:t=>(0,E.jsxs)(`div`,{className:`space-y-3`,children:[(0,E.jsxs)(d,{htmlFor:t.name,className:`block w-full`,children:[`Block List`,e(t.name)&&(0,E.jsx)(`span`,{className:`pl-1 text-red-500`,children:`*`})]}),t.state.value.map((e,n)=>(0,E.jsx)(k.Field,{name:`blockList[${n}]`,children:e=>(0,E.jsxs)(`div`,{className:`gap-y- mb-3 flex flex-col`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(o,{type:`text`,className:`form-input`,value:e.state.value,"aria-invalid":!!(e.state.meta.isTouched&&e.state.meta.errorMap.onBlur),onBlur:e.handleBlur,onChange:t=>e.handleChange(t.target.value)}),t.state.value.length>1&&(0,E.jsx)(c,{onClick:()=>{t.removeValue(n)}})]}),e.state.meta.isTouched&&e.state.meta.errors&&(0,E.jsx)(S,{fieldMeta:e.state.meta})]})},`${t.name}-${n}`)),(0,E.jsx)(a,{variant:`secondary`,type:`button`,onClick:()=>{t.pushValue(``),j(`${t.name}-${t.state.value.length}`)},title:`Add ${t.name}`,children:`Add`})]})})}),(0,E.jsxs)(`div`,{className:`space-y-3`,children:[(0,E.jsx)(d,{htmlFor:`apiKey`,children:`API Key`}),(0,E.jsxs)(`div`,{className:`flex max-w-3xl flex-col gap-2 lg:flex-row`,children:[(0,E.jsx)(o,{id:`apiKey`,type:`text`,value:M,autoComplete:`off`,spellCheck:!1,readOnly:!0,onClick:F,onFocus:F}),(0,E.jsxs)(`div`,{className:`flex gap-2`,children:[(0,E.jsxs)(a,{type:`button`,variant:`outline`,disabled:!M,onClick:()=>{I()},children:[(0,E.jsx)(C,{}),`Copy`]}),(0,E.jsxs)(a,{type:`button`,variant:`outline`,disabled:P.isPending,onClick:()=>P.mutate(),children:[(0,E.jsx)(w,{}),`Regenerate & Save`]})]})]})]})]}),(0,E.jsx)(k.AppForm,{children:(0,E.jsx)(k.SubmitButton,{})})]})})})]})})}export{D as component};