@hot-updater/console 0.1.5 → 0.2.0

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 (35) hide show
  1. package/dist/index.cjs +1909 -2236
  2. package/dist/index.html +1 -1
  3. package/dist/index.js +1868 -2219
  4. package/dist/src/App.d.ts +2 -0
  5. package/dist/src/components/spash-screen.d.ts +1 -0
  6. package/dist/src/components/ui/button.d.ts +15 -0
  7. package/dist/src/components/ui/label.d.ts +3 -0
  8. package/dist/src/components/ui/navigation-menu.d.ts +35 -0
  9. package/dist/src/components/ui/pagination.d.ts +27 -0
  10. package/dist/src/components/ui/sheet.d.ts +26 -0
  11. package/dist/src/components/ui/sonner.d.ts +5 -0
  12. package/dist/src/components/ui/switch.d.ts +20 -0
  13. package/dist/src/components/ui/table.d.ts +10 -0
  14. package/dist/src/components/ui/text-field.d.ts +26 -0
  15. package/dist/src/index.d.ts +1 -0
  16. package/dist/src/lib/api.d.ts +98 -0
  17. package/dist/src/lib/extract-timestamp-from-uuidv7.d.ts +1 -0
  18. package/dist/src/lib/utils.d.ts +2 -0
  19. package/dist/src/routes/_components/columns.d.ts +3 -0
  20. package/dist/src/routes/_components/data-table.d.ts +9 -0
  21. package/dist/src/routes/_components/edit-bundle-sheet-content.d.ts +5 -0
  22. package/dist/src/routes/index.d.ts +1 -0
  23. package/dist/src-server/index.d.ts +112 -0
  24. package/dist/src-server/rpc.d.ts +112 -0
  25. package/dist/src-server/type.test.d.ts +1 -0
  26. package/dist/static/css/index.4ed6b07e.css +1 -0
  27. package/dist/static/js/742.e04944e6.js +5 -0
  28. package/dist/static/js/index.7055a4a0.js +1 -0
  29. package/package.json +8 -5
  30. package/dist/index.d.cts +0 -101
  31. package/dist/index.d.ts +0 -101
  32. package/dist/static/css/index.8b7116d7.css +0 -1
  33. package/dist/static/js/85.cfaeff33.js +0 -5
  34. package/dist/static/js/index.566f7a26.js +0 -1
  35. /package/dist/static/js/{85.cfaeff33.js.LICENSE.txt → 742.e04944e6.js.LICENSE.txt} +0 -0
@@ -0,0 +1,2 @@
1
+ import "./App.css";
2
+ export default function App(): import("solid-js").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const SplashScreen: () => import("solid-js").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import type { JSX, ValidComponent } from "solid-js";
2
+ import * as ButtonPrimitive from "@kobalte/core/button";
3
+ import type { PolymorphicProps } from "@kobalte/core/polymorphic";
4
+ import type { VariantProps } from "class-variance-authority";
5
+ declare const buttonVariants: (props?: ({
6
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
7
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
8
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
+ type ButtonProps<T extends ValidComponent = "button"> = ButtonPrimitive.ButtonRootProps<T> & VariantProps<typeof buttonVariants> & {
10
+ class?: string | undefined;
11
+ children?: JSX.Element;
12
+ };
13
+ declare const Button: <T extends ValidComponent = "button">(props: PolymorphicProps<T, ButtonProps<T>>) => JSX.Element;
14
+ export type { ButtonProps };
15
+ export { Button, buttonVariants };
@@ -0,0 +1,3 @@
1
+ import type { Component, ComponentProps } from "solid-js";
2
+ declare const Label: Component<ComponentProps<"label">>;
3
+ export { Label };
@@ -0,0 +1,35 @@
1
+ import type { JSX, ValidComponent } from "solid-js";
2
+ import type { PolymorphicProps } from "@kobalte/core";
3
+ import * as NavigationMenuPrimitive from "@kobalte/core/navigation-menu";
4
+ declare const NavigationMenuItem: typeof NavigationMenuPrimitive.Menu;
5
+ type NavigationMenuProps<T extends ValidComponent = "ul"> = NavigationMenuPrimitive.NavigationMenuRootProps<T> & {
6
+ class?: string | undefined;
7
+ children?: JSX.Element;
8
+ };
9
+ declare const NavigationMenu: <T extends ValidComponent = "ul">(props: PolymorphicProps<T, NavigationMenuProps<T>>) => JSX.Element;
10
+ type NavigationMenuTriggerProps<T extends ValidComponent = "button"> = NavigationMenuPrimitive.NavigationMenuTriggerProps<T> & {
11
+ class?: string | undefined;
12
+ };
13
+ declare const NavigationMenuTrigger: <T extends ValidComponent = "button">(props: PolymorphicProps<T, NavigationMenuTriggerProps<T>>) => JSX.Element;
14
+ declare const NavigationMenuIcon: () => JSX.Element;
15
+ type NavigationMenuViewportProps<T extends ValidComponent = "li"> = NavigationMenuPrimitive.NavigationMenuViewportProps<T> & {
16
+ class?: string | undefined;
17
+ };
18
+ declare const NavigationMenuViewport: <T extends ValidComponent = "li">(props: PolymorphicProps<T, NavigationMenuViewportProps<T>>) => JSX.Element;
19
+ type NavigationMenuContentProps<T extends ValidComponent = "ul"> = NavigationMenuPrimitive.NavigationMenuContentProps<T> & {
20
+ class?: string | undefined;
21
+ };
22
+ declare const NavigationMenuContent: <T extends ValidComponent = "ul">(props: PolymorphicProps<T, NavigationMenuContentProps<T>>) => JSX.Element;
23
+ type NavigationMenuLinkProps<T extends ValidComponent = "a"> = NavigationMenuPrimitive.NavigationMenuItemProps<T> & {
24
+ class?: string | undefined;
25
+ };
26
+ declare const NavigationMenuLink: <T extends ValidComponent = "a">(props: PolymorphicProps<T, NavigationMenuLinkProps<T>>) => JSX.Element;
27
+ type NavigationMenuLabelProps<T extends ValidComponent = "div"> = NavigationMenuPrimitive.NavigationMenuItemLabelProps<T> & {
28
+ class?: string | undefined;
29
+ };
30
+ declare const NavigationMenuLabel: <T extends ValidComponent = "div">(props: PolymorphicProps<T, NavigationMenuLabelProps<T>>) => JSX.Element;
31
+ type NavigationMenuDescriptionProps<T extends ValidComponent = "div"> = NavigationMenuPrimitive.NavigationMenuItemDescriptionProps<T> & {
32
+ class?: string | undefined;
33
+ };
34
+ declare const NavigationMenuDescription: <T extends ValidComponent = "div">(props: PolymorphicProps<T, NavigationMenuDescriptionProps<T>>) => JSX.Element;
35
+ export { NavigationMenu, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuIcon, NavigationMenuViewport, NavigationMenuContent, NavigationMenuLink, NavigationMenuLabel, NavigationMenuDescription, };
@@ -0,0 +1,27 @@
1
+ import type { JSX, ValidComponent } from "solid-js";
2
+ import * as PaginationPrimitive from "@kobalte/core/pagination";
3
+ import type { PolymorphicProps } from "@kobalte/core/polymorphic";
4
+ declare const PaginationItems: typeof PaginationPrimitive.Items;
5
+ type PaginationRootProps<T extends ValidComponent = "nav"> = PaginationPrimitive.PaginationRootProps<T> & {
6
+ class?: string | undefined;
7
+ };
8
+ declare const Pagination: <T extends ValidComponent = "nav">(props: PolymorphicProps<T, PaginationRootProps<T>>) => JSX.Element;
9
+ type PaginationItemProps<T extends ValidComponent = "button"> = PaginationPrimitive.PaginationItemProps<T> & {
10
+ class?: string | undefined;
11
+ };
12
+ declare const PaginationItem: <T extends ValidComponent = "button">(props: PolymorphicProps<T, PaginationItemProps<T>>) => JSX.Element;
13
+ type PaginationEllipsisProps<T extends ValidComponent = "div"> = PaginationPrimitive.PaginationEllipsisProps<T> & {
14
+ class?: string | undefined;
15
+ };
16
+ declare const PaginationEllipsis: <T extends ValidComponent = "div">(props: PolymorphicProps<T, PaginationEllipsisProps<T>>) => JSX.Element;
17
+ type PaginationPreviousProps<T extends ValidComponent = "button"> = PaginationPrimitive.PaginationPreviousProps<T> & {
18
+ class?: string | undefined;
19
+ children?: JSX.Element;
20
+ };
21
+ declare const PaginationPrevious: <T extends ValidComponent = "button">(props: PolymorphicProps<T, PaginationPreviousProps<T>>) => JSX.Element;
22
+ type PaginationNextProps<T extends ValidComponent = "button"> = PaginationPrimitive.PaginationNextProps<T> & {
23
+ class?: string | undefined;
24
+ children?: JSX.Element;
25
+ };
26
+ declare const PaginationNext: <T extends ValidComponent = "button">(props: PolymorphicProps<T, PaginationNextProps<T>>) => JSX.Element;
27
+ export { Pagination, PaginationItems, PaginationItem, PaginationEllipsis, PaginationPrevious, PaginationNext, };
@@ -0,0 +1,26 @@
1
+ import type { Component, ComponentProps, JSX, ValidComponent } from "solid-js";
2
+ import * as SheetPrimitive from "@kobalte/core/dialog";
3
+ import type { PolymorphicProps } from "@kobalte/core/polymorphic";
4
+ import { type VariantProps } from "class-variance-authority";
5
+ declare const Sheet: typeof SheetPrimitive.Root;
6
+ declare const SheetTrigger: typeof SheetPrimitive.Trigger;
7
+ declare const SheetClose: typeof SheetPrimitive.CloseButton;
8
+ declare const sheetVariants: (props?: ({
9
+ position?: "top" | "bottom" | "left" | "right" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ type DialogContentProps<T extends ValidComponent = "div"> = SheetPrimitive.DialogContentProps<T> & VariantProps<typeof sheetVariants> & {
12
+ class?: string | undefined;
13
+ children?: JSX.Element;
14
+ };
15
+ declare const SheetContent: <T extends ValidComponent = "div">(props: PolymorphicProps<T, DialogContentProps<T>>) => JSX.Element;
16
+ declare const SheetHeader: Component<ComponentProps<"div">>;
17
+ declare const SheetFooter: Component<ComponentProps<"div">>;
18
+ type DialogTitleProps<T extends ValidComponent = "h2"> = SheetPrimitive.DialogTitleProps<T> & {
19
+ class?: string | undefined;
20
+ };
21
+ declare const SheetTitle: <T extends ValidComponent = "h2">(props: PolymorphicProps<T, DialogTitleProps<T>>) => JSX.Element;
22
+ type DialogDescriptionProps<T extends ValidComponent = "p"> = SheetPrimitive.DialogDescriptionProps<T> & {
23
+ class?: string | undefined;
24
+ };
25
+ declare const SheetDescription: <T extends ValidComponent = "p">(props: PolymorphicProps<T, DialogDescriptionProps<T>>) => JSX.Element;
26
+ export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
@@ -0,0 +1,5 @@
1
+ import type { Component, ComponentProps } from "solid-js";
2
+ import { Toaster as Sonner } from "solid-sonner";
3
+ type ToasterProps = ComponentProps<typeof Sonner>;
4
+ declare const Toaster: Component<ToasterProps>;
5
+ export { Toaster };
@@ -0,0 +1,20 @@
1
+ import type { JSX, ValidComponent } from "solid-js";
2
+ import type { PolymorphicProps } from "@kobalte/core";
3
+ import * as SwitchPrimitive from "@kobalte/core/switch";
4
+ declare const Switch: typeof SwitchPrimitive.Root;
5
+ declare const SwitchDescription: typeof SwitchPrimitive.Description;
6
+ declare const SwitchErrorMessage: typeof SwitchPrimitive.ErrorMessage;
7
+ type SwitchControlProps = SwitchPrimitive.SwitchControlProps & {
8
+ class?: string | undefined;
9
+ children?: JSX.Element;
10
+ };
11
+ declare const SwitchControl: <T extends ValidComponent = "input">(props: PolymorphicProps<T, SwitchControlProps>) => JSX.Element;
12
+ type SwitchThumbProps = SwitchPrimitive.SwitchThumbProps & {
13
+ class?: string | undefined;
14
+ };
15
+ declare const SwitchThumb: <T extends ValidComponent = "div">(props: PolymorphicProps<T, SwitchThumbProps>) => JSX.Element;
16
+ type SwitchLabelProps = SwitchPrimitive.SwitchLabelProps & {
17
+ class?: string | undefined;
18
+ };
19
+ declare const SwitchLabel: <T extends ValidComponent = "label">(props: PolymorphicProps<T, SwitchLabelProps>) => JSX.Element;
20
+ export { Switch, SwitchControl, SwitchThumb, SwitchLabel, SwitchDescription, SwitchErrorMessage, };
@@ -0,0 +1,10 @@
1
+ import type { Component, ComponentProps } from "solid-js";
2
+ declare const Table: Component<ComponentProps<"table">>;
3
+ declare const TableHeader: Component<ComponentProps<"thead">>;
4
+ declare const TableBody: Component<ComponentProps<"tbody">>;
5
+ declare const TableFooter: Component<ComponentProps<"tfoot">>;
6
+ declare const TableRow: Component<ComponentProps<"tr">>;
7
+ declare const TableHead: Component<ComponentProps<"th">>;
8
+ declare const TableCell: Component<ComponentProps<"td">>;
9
+ declare const TableCaption: Component<ComponentProps<"caption">>;
10
+ export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, };
@@ -0,0 +1,26 @@
1
+ import type { ValidComponent } from "solid-js";
2
+ import type { PolymorphicProps } from "@kobalte/core";
3
+ import * as TextFieldPrimitive from "@kobalte/core/text-field";
4
+ declare const TextField: typeof TextFieldPrimitive.Root;
5
+ type TextFieldInputProps<T extends ValidComponent = "input"> = TextFieldPrimitive.TextFieldInputProps<T> & {
6
+ class?: string | undefined;
7
+ type: "button" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "file" | "hidden" | "image" | "month" | "number" | "password" | "radio" | "range" | "reset" | "search" | "submit" | "tel" | "text" | "time" | "url" | "week";
8
+ };
9
+ declare const TextFieldInput: <T extends ValidComponent = "input">(props: PolymorphicProps<T, TextFieldInputProps<T>>) => import("solid-js").JSX.Element;
10
+ type TextFieldTextAreaProps<T extends ValidComponent = "textarea"> = TextFieldPrimitive.TextFieldTextAreaProps<T> & {
11
+ class?: string | undefined;
12
+ };
13
+ declare const TextFieldTextArea: <T extends ValidComponent = "textarea">(props: PolymorphicProps<T, TextFieldTextAreaProps<T>>) => import("solid-js").JSX.Element;
14
+ type TextFieldLabelProps<T extends ValidComponent = "label"> = TextFieldPrimitive.TextFieldLabelProps<T> & {
15
+ class?: string | undefined;
16
+ };
17
+ declare const TextFieldLabel: <T extends ValidComponent = "label">(props: PolymorphicProps<T, TextFieldLabelProps<T>>) => import("solid-js").JSX.Element;
18
+ type TextFieldDescriptionProps<T extends ValidComponent = "div"> = TextFieldPrimitive.TextFieldDescriptionProps<T> & {
19
+ class?: string | undefined;
20
+ };
21
+ declare const TextFieldDescription: <T extends ValidComponent = "div">(props: PolymorphicProps<T, TextFieldDescriptionProps<T>>) => import("solid-js").JSX.Element;
22
+ type TextFieldErrorMessageProps<T extends ValidComponent = "div"> = TextFieldPrimitive.TextFieldErrorMessageProps<T> & {
23
+ class?: string | undefined;
24
+ };
25
+ declare const TextFieldErrorMessage: <T extends ValidComponent = "div">(props: PolymorphicProps<T, TextFieldErrorMessageProps<T>>) => import("solid-js").JSX.Element;
26
+ export { TextField, TextFieldInput, TextFieldTextArea, TextFieldLabel, TextFieldDescription, TextFieldErrorMessage, };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,98 @@
1
+ export declare const api: {
2
+ loadConfig: import("hono/client").ClientRequest<{
3
+ $get: {
4
+ input: {};
5
+ output: true;
6
+ outputFormat: "json";
7
+ status: import("hono/utils/http-status").StatusCode;
8
+ };
9
+ }>;
10
+ } & {
11
+ getConfig: import("hono/client").ClientRequest<{
12
+ $get: {
13
+ input: {};
14
+ output: {
15
+ console: {
16
+ gitUrl?: string | undefined;
17
+ port?: number | undefined;
18
+ } | undefined;
19
+ };
20
+ outputFormat: "json";
21
+ status: import("hono/utils/http-status").StatusCode;
22
+ };
23
+ }>;
24
+ } & {
25
+ isConfigLoaded: import("hono/client").ClientRequest<{
26
+ $get: {
27
+ input: {};
28
+ output: boolean;
29
+ outputFormat: "json";
30
+ status: import("hono/utils/http-status").StatusCode;
31
+ };
32
+ }>;
33
+ } & {
34
+ getBundles: import("hono/client").ClientRequest<{
35
+ $get: {
36
+ input: {};
37
+ output: {
38
+ id: string;
39
+ platform: import("@hot-updater/core").Platform;
40
+ targetAppVersion: string;
41
+ forceUpdate: boolean;
42
+ enabled: boolean;
43
+ fileUrl: string;
44
+ fileHash: string;
45
+ gitCommitHash: string | null;
46
+ message: string | null;
47
+ }[];
48
+ outputFormat: "json";
49
+ status: import("hono/utils/http-status").StatusCode;
50
+ };
51
+ }>;
52
+ } & {
53
+ getBundleById: import("hono/client").ClientRequest<{
54
+ $post: {
55
+ input: {
56
+ json: {
57
+ bundleId: string;
58
+ };
59
+ };
60
+ output: {
61
+ id: string;
62
+ platform: import("@hot-updater/core").Platform;
63
+ targetAppVersion: string;
64
+ forceUpdate: boolean;
65
+ enabled: boolean;
66
+ fileUrl: string;
67
+ fileHash: string;
68
+ gitCommitHash: string | null;
69
+ message: string | null;
70
+ } | null;
71
+ outputFormat: "json";
72
+ status: import("hono/utils/http-status").StatusCode;
73
+ };
74
+ }>;
75
+ } & {
76
+ updateBundle: import("hono/client").ClientRequest<{
77
+ $post: {
78
+ input: {
79
+ json: {
80
+ bundle: {
81
+ platform?: "ios" | "android" | undefined;
82
+ gitCommitHash?: string | null | undefined;
83
+ message?: string | null | undefined;
84
+ targetAppVersion?: string | undefined;
85
+ forceUpdate?: boolean | undefined;
86
+ enabled?: boolean | undefined;
87
+ fileUrl?: string | undefined;
88
+ fileHash?: string | undefined;
89
+ };
90
+ targetBundleId: string;
91
+ };
92
+ };
93
+ output: true;
94
+ outputFormat: "json";
95
+ status: import("hono/utils/http-status").StatusCode;
96
+ };
97
+ }>;
98
+ };
@@ -0,0 +1 @@
1
+ export declare const extractTimestampFromUUIDv7: (uuid: string) => number;
@@ -0,0 +1,2 @@
1
+ import { type ClassValue } from "clsx";
2
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,3 @@
1
+ import type { Bundle } from "@hot-updater/core";
2
+ import type { ColumnDef } from "@tanstack/solid-table";
3
+ export declare const columns: ColumnDef<Bundle>[];
@@ -0,0 +1,9 @@
1
+ import { type ColumnDef } from "@tanstack/solid-table";
2
+ import { type Accessor } from "solid-js";
3
+ interface DataTableProps<TData, TValue> {
4
+ columns: ColumnDef<TData, TValue>[];
5
+ data: Accessor<TData[] | undefined>;
6
+ onRowClick: (data: TData) => void;
7
+ }
8
+ export declare function DataTable<TData, TValue>(props: DataTableProps<TData, TValue>): import("solid-js").JSX.Element;
9
+ export {};
@@ -0,0 +1,5 @@
1
+ export interface EditBundleSheetContentProps {
2
+ bundleId: string;
3
+ onClose: () => void;
4
+ }
5
+ export declare const EditBundleSheetContent: ({ bundleId, onClose, }: EditBundleSheetContentProps) => import("solid-js").JSX.Element;
@@ -0,0 +1 @@
1
+ export default function Home(): import("solid-js").JSX.Element;
@@ -0,0 +1,112 @@
1
+ import { Hono } from "hono";
2
+ declare const app: Hono<{}, {
3
+ "/static/*": {
4
+ $get: {
5
+ input: {};
6
+ output: "pong";
7
+ outputFormat: "text";
8
+ status: import("hono/utils/http-status").StatusCode;
9
+ };
10
+ } | {
11
+ $get: {
12
+ input: {};
13
+ output: true;
14
+ outputFormat: "json";
15
+ status: import("hono/utils/http-status").StatusCode;
16
+ };
17
+ } | {
18
+ $get: {
19
+ input: {};
20
+ output: {
21
+ console: {
22
+ gitUrl?: string | undefined;
23
+ port?: number | undefined;
24
+ } | undefined;
25
+ };
26
+ outputFormat: "json";
27
+ status: import("hono/utils/http-status").StatusCode;
28
+ };
29
+ } | {
30
+ $get: {
31
+ input: {};
32
+ output: boolean;
33
+ outputFormat: "json";
34
+ status: import("hono/utils/http-status").StatusCode;
35
+ };
36
+ } | {
37
+ $get: {
38
+ input: {};
39
+ output: {
40
+ id: string;
41
+ platform: import("@hot-updater/core").Platform;
42
+ targetAppVersion: string;
43
+ forceUpdate: boolean;
44
+ enabled: boolean;
45
+ fileUrl: string;
46
+ fileHash: string;
47
+ gitCommitHash: string | null;
48
+ message: string | null;
49
+ }[];
50
+ outputFormat: "json";
51
+ status: import("hono/utils/http-status").StatusCode;
52
+ };
53
+ } | {
54
+ $post: {
55
+ input: {
56
+ json: {
57
+ bundleId: string;
58
+ };
59
+ };
60
+ output: {
61
+ id: string;
62
+ platform: import("@hot-updater/core").Platform;
63
+ targetAppVersion: string;
64
+ forceUpdate: boolean;
65
+ enabled: boolean;
66
+ fileUrl: string;
67
+ fileHash: string;
68
+ gitCommitHash: string | null;
69
+ message: string | null;
70
+ } | null;
71
+ outputFormat: "json";
72
+ status: import("hono/utils/http-status").StatusCode;
73
+ };
74
+ } | {
75
+ $post: {
76
+ input: {
77
+ json: {
78
+ bundle: {
79
+ platform?: "ios" | "android" | undefined;
80
+ gitCommitHash?: string | null | undefined;
81
+ message?: string | null | undefined;
82
+ targetAppVersion?: string | undefined;
83
+ forceUpdate?: boolean | undefined;
84
+ enabled?: boolean | undefined;
85
+ fileUrl?: string | undefined;
86
+ fileHash?: string | undefined;
87
+ };
88
+ targetBundleId: string;
89
+ };
90
+ };
91
+ output: true;
92
+ outputFormat: "json";
93
+ status: import("hono/utils/http-status").StatusCode;
94
+ };
95
+ };
96
+ } & {
97
+ "*": {
98
+ $get: {
99
+ input: {};
100
+ output: {};
101
+ outputFormat: string;
102
+ status: import("hono/utils/http-status").StatusCode;
103
+ } | {
104
+ input: {};
105
+ output: {};
106
+ outputFormat: string;
107
+ status: import("hono/utils/http-status").StatusCode;
108
+ };
109
+ };
110
+ }, "/">;
111
+ export type AppType = typeof app;
112
+ export default app;
@@ -0,0 +1,112 @@
1
+ import { Hono } from "hono";
2
+ import * as v from "valibot";
3
+ export declare const bundleSchema: v.ObjectSchema<{
4
+ readonly platform: v.UnionSchema<[v.LiteralSchema<"ios", undefined>, v.LiteralSchema<"android", undefined>], undefined>;
5
+ readonly targetAppVersion: v.StringSchema<undefined>;
6
+ readonly id: v.StringSchema<undefined>;
7
+ readonly forceUpdate: v.BooleanSchema<undefined>;
8
+ readonly enabled: v.BooleanSchema<undefined>;
9
+ readonly fileUrl: v.StringSchema<undefined>;
10
+ readonly fileHash: v.StringSchema<undefined>;
11
+ readonly gitCommitHash: v.NullableSchema<v.StringSchema<undefined>, never>;
12
+ readonly message: v.NullableSchema<v.StringSchema<undefined>, never>;
13
+ }, undefined>;
14
+ export declare const rpc: Hono<import("hono/types").BlankEnv, {
15
+ "/loadConfig": {
16
+ $get: {
17
+ input: {};
18
+ output: true;
19
+ outputFormat: "json";
20
+ status: import("hono/utils/http-status").StatusCode;
21
+ };
22
+ };
23
+ } & {
24
+ "/getConfig": {
25
+ $get: {
26
+ input: {};
27
+ output: {
28
+ console: {
29
+ gitUrl?: string | undefined;
30
+ port?: number | undefined;
31
+ } | undefined;
32
+ };
33
+ outputFormat: "json";
34
+ status: import("hono/utils/http-status").StatusCode;
35
+ };
36
+ };
37
+ } & {
38
+ "/isConfigLoaded": {
39
+ $get: {
40
+ input: {};
41
+ output: boolean;
42
+ outputFormat: "json";
43
+ status: import("hono/utils/http-status").StatusCode;
44
+ };
45
+ };
46
+ } & {
47
+ "/getBundles": {
48
+ $get: {
49
+ input: {};
50
+ output: {
51
+ id: string;
52
+ platform: import("@hot-updater/core").Platform;
53
+ targetAppVersion: string;
54
+ forceUpdate: boolean;
55
+ enabled: boolean;
56
+ fileUrl: string;
57
+ fileHash: string;
58
+ gitCommitHash: string | null;
59
+ message: string | null;
60
+ }[];
61
+ outputFormat: "json";
62
+ status: import("hono/utils/http-status").StatusCode;
63
+ };
64
+ };
65
+ } & {
66
+ "/getBundleById": {
67
+ $post: {
68
+ input: {
69
+ json: {
70
+ bundleId: string;
71
+ };
72
+ };
73
+ output: {
74
+ id: string;
75
+ platform: import("@hot-updater/core").Platform;
76
+ targetAppVersion: string;
77
+ forceUpdate: boolean;
78
+ enabled: boolean;
79
+ fileUrl: string;
80
+ fileHash: string;
81
+ gitCommitHash: string | null;
82
+ message: string | null;
83
+ } | null;
84
+ outputFormat: "json";
85
+ status: import("hono/utils/http-status").StatusCode;
86
+ };
87
+ };
88
+ } & {
89
+ "/updateBundle": {
90
+ $post: {
91
+ input: {
92
+ json: {
93
+ bundle: {
94
+ platform?: "ios" | "android" | undefined;
95
+ gitCommitHash?: string | null | undefined;
96
+ message?: string | null | undefined;
97
+ targetAppVersion?: string | undefined;
98
+ forceUpdate?: boolean | undefined;
99
+ enabled?: boolean | undefined;
100
+ fileUrl?: string | undefined;
101
+ fileHash?: string | undefined;
102
+ };
103
+ targetBundleId: string;
104
+ };
105
+ };
106
+ output: true;
107
+ outputFormat: "json";
108
+ status: import("hono/utils/http-status").StatusCode;
109
+ };
110
+ };
111
+ }, "/">;
112
+ export type RpcType = typeof rpc;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ @import "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap";*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button{-webkit-appearance:button;background-color:#0000;background-image:none}input:where([type=button]){-webkit-appearance:button;background-color:#0000;background-image:none}input:where([type=reset]){-webkit-appearance:button;background-color:#0000;background-image:none}input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:240 10% 3.9%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--border:240 5.9% 90%;--input:240 5.9% 90%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--info:204 94% 94%;--info-foreground:199 89% 48%;--success:149 80% 90%;--success-foreground:160 84% 39%;--warning:48 96% 89%;--warning-foreground:25 95% 53%;--error:0 93% 94%;--error-foreground:0 84% 60%;--ring:240 5.9% 10%;--radius:.5rem}.dark,[data-kb-theme=dark]{--background:240 10% 3.9%;--foreground:0 0% 98%;--muted:240 3.7% 15.9%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.9%;--accent-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--border:240 3.7% 15.9%;--input:240 3.7% 15.9%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--secondary:240 3.7% 15.9%;--secondary-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--info:204 94% 94%;--info-foreground:199 89% 48%;--success:149 80% 90%;--success-foreground:160 84% 39%;--warning:48 96% 89%;--warning-foreground:25 95% 53%;--error:0 93% 94%;--error-foreground:0 84% 60%;--ring:240 4.9% 83.9%;--radius:.5rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"rlig" 1,"calt" 1}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;bottom:0;left:0;right:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-4{top:1rem}.top-px{top:1px}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.mt-2\.5{margin-top:.625rem}.mt-4{margin-top:1rem}.mt-\[2px\]{margin-top:2px}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.grid{display:grid}.hidden{display:none}.size-10{width:2.5rem;height:2.5rem}.size-3{width:.75rem;height:.75rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-24{height:6rem}.h-32{height:8rem}.h-6{height:1.5rem}.h-9{height:2.25rem}.h-\[var\(--kb-navigation-menu-viewport-height\)\]{height:var(--kb-navigation-menu-viewport-height)}.h-full{height:100%}.max-h-screen{max-height:100vh}.min-h-\[80px\]{min-height:80px}.w-11{width:2.75rem}.w-12{width:3rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-\[var\(--kb-navigation-menu-viewport-width\)\]{width:var(--kb-navigation-menu-viewport-width)}.w-full{width:100%}.w-max{width:max-content}.max-w-sm{max-width:24rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\[var\(--kb-menu-content-transform-origin\)\]{transform-origin:var(--kb-menu-content-transform-origin)}.translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}@keyframes content-hide{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}.animate-content-hide{animation:.2s ease-out content-hide}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-clip{overflow-x:clip}.overflow-y-visible{overflow-y:visible}.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-input{border-color:hsl(var(--input))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-transparent{border-color:#0000}.bg-background{background-color:hsl(var(--background))}.bg-black\/80{background-color:#000c}.bg-destructive{background-color:hsl(var(--destructive))}.bg-input{background-color:hsl(var(--input))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-transparent{background-color:#0000}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.object-contain{-o-object-fit:contain;object-fit:contain}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-2\.5{padding-left:.625rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.leading-none{line-height:1}.leading-snug{line-height:1.375}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.no-underline{text-decoration-line:none}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,-webkit-backdrop-filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-\[color\,background-color\,box-shadow\]{transition-property:color,background-color,box-shadow;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-\[width\,height\]{transition-property:width,height;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.ease-in{animation-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}@media (max-width:640px){.container{padding-left:1rem;padding-right:1rem}}::-webkit-scrollbar{width:16px}::-webkit-scrollbar-thumb{background-clip:content-box;background-color:hsl(var(--accent));border:4px solid #0000;border-radius:9999px}::-webkit-scrollbar-corner{display:none}body{font-family:Lato,sans-serif}.file\:border-0::-webkit-file-upload-button{border-width:0}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::-webkit-file-upload-button{background-color:#0000}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::-webkit-file-upload-button{font-size:.875rem;line-height:1.25rem}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::-webkit-file-upload-button{font-weight:500}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive)/.9)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted)/.5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline-offset:2px;outline:2px solid #0000}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline-none:focus-visible{outline-offset:2px;outline:2px solid #0000}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-red-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toast .group-\[\.toast\]\:bg-muted{background-color:hsl(var(--muted))}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toaster .group-\[\.toaster\]\:bg-background{background-color:hsl(var(--background))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\:shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[expanded\]\:pointer-events-auto[data-expanded]{pointer-events:auto}.data-\[checked\]\:translate-x-5[data-checked]{--tw-translate-x:1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}@keyframes content-show{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.data-\[expanded\]\:animate-content-show[data-expanded]{animation:.2s ease-out content-show}.data-\[disabled\]\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.data-\[orientation\=vertical\]\:overflow-y-clip[data-orientation=vertical]{overflow-y:clip}.data-\[orientation\=vertical\]\:overflow-x-visible[data-orientation=vertical]{overflow-x:visible}.data-\[expanded\]\:rounded-md[data-expanded]{border-radius:calc(var(--radius) - 2px)}.data-\[current\]\:border[data-current]{border-width:1px}.data-\[active\]\:bg-accent\/50[data-active]{background-color:hsl(var(--accent)/.5)}.data-\[checked\]\:bg-primary[data-checked]{background-color:hsl(var(--primary))}.data-\[expanded\]\:bg-accent\/50[data-expanded]{background-color:hsl(var(--accent)/.5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[invalid\]\:text-destructive[data-invalid]{color:hsl(var(--destructive))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\]\:opacity-70[data-disabled]{opacity:.7}.data-\[expanded\]\:opacity-100[data-expanded]{opacity:1}.data-\[closed\=\]\:duration-300[data-closed=""]{transition-duration:.3s}.data-\[expanded\=\]\:duration-500[data-expanded=""]{transition-duration:.5s}.data-\[expanded\]\:ease-out[data-expanded]{transition-timing-function:cubic-bezier(0,0,.2,1)}.data-\[expanded\=\]\:animate-in[data-expanded=""],.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[closed\=\]\:animate-out[data-closed=""],.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[closed\=\]\:fade-out-0[data-closed=""]{--tw-exit-opacity:0}.data-\[expanded\=\]\:fade-in-0[data-expanded=""],.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.data-\[closed\=\]\:slide-out-to-bottom[data-closed=""]{--tw-exit-translate-y:100%}.data-\[closed\=\]\:slide-out-to-left[data-closed=""]{--tw-exit-translate-x:-100%}.data-\[closed\=\]\:slide-out-to-right[data-closed=""]{--tw-exit-translate-x:100%}.data-\[closed\=\]\:slide-out-to-top[data-closed=""]{--tw-exit-translate-y:-100%}.data-\[expanded\=\]\:slide-in-from-bottom[data-expanded=""]{--tw-enter-translate-y:100%}.data-\[expanded\=\]\:slide-in-from-right[data-expanded=""]{--tw-enter-translate-x:100%}.data-\[expanded\=\]\:slide-in-from-top[data-expanded=""]{--tw-enter-translate-y:-100%}.data-\[expanded\]\:slide-in-from-left[data-expanded]{--tw-enter-translate-x:-100%}.data-\[orientation\=horizontal\]\:data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end][data-orientation=horizontal]{--tw-enter-translate-x:13rem}.data-\[orientation\=horizontal\]\:data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start][data-orientation=horizontal]{--tw-enter-translate-x:-13rem}.data-\[orientation\=horizontal\]\:data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end][data-orientation=horizontal]{--tw-exit-translate-x:13rem}.data-\[orientation\=horizontal\]\:data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start][data-orientation=horizontal]{--tw-exit-translate-x:-13rem}.data-\[orientation\=vertical\]\:data-\[motion\=from-end\]\:slide-in-from-bottom-52[data-motion=from-end][data-orientation=vertical]{--tw-enter-translate-y:13rem}.data-\[orientation\=vertical\]\:data-\[motion\=from-start\]\:slide-in-from-top-52[data-motion=from-start][data-orientation=vertical]{--tw-enter-translate-y:-13rem}.data-\[orientation\=vertical\]\:data-\[motion\=to-end\]\:slide-out-to-bottom-52[data-motion=to-end][data-orientation=vertical],.data-\[orientation\=vertical\]\:data-\[motion\=to-start\]\:slide-out-to-bottom-52[data-motion=to-start][data-orientation=vertical]{--tw-exit-translate-y:13rem}.data-\[closed\=\]\:duration-300[data-closed=""]{animation-duration:.3s}.data-\[expanded\=\]\:duration-500[data-expanded=""]{animation-duration:.5s}.data-\[expanded\]\:ease-out[data-expanded]{animation-timing-function:cubic-bezier(0,0,.2,1)}.group\/trigger[data-expanded] .group-data-\[expanded\]\/trigger\:rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group\/menu[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/menu\:-rotate-90{--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group\/menu[data-orientation=vertical] .group\/trigger[data-expanded] .group-data-\[orientation\=vertical\]\/menu\:group-data-\[expanded\]\/trigger\:rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}@media (min-width:640px){.sm\:max-w-sm{max-width:24rem}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*calc(1 - var(--tw-space-x-reverse)))}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:h-48{height:12rem}.md\:w-48{width:12rem}}.\[\&\:focus-visible\+div\]\:outline-none:focus-visible+div{outline-offset:2px;outline:2px solid #0000}.\[\&\:focus-visible\+div\]\:ring-2:focus-visible+div{--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:focus-visible\+div\]\:ring-ring:focus-visible+div{--tw-ring-color:hsl(var(--ring))}.\[\&\:focus-visible\+div\]\:ring-offset-2:focus-visible+div{--tw-ring-offset-width:2px}.\[\&\:focus-visible\+div\]\:ring-offset-background:focus-visible+div{--tw-ring-offset-color:hsl(var(--background))}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>\*\]\:flex>*{display:flex}.\[\&\>\*\]\:flex-row>*{flex-direction:row}.\[\&\>\*\]\:items-center>*{align-items:center}.\[\&\>\*\]\:gap-1>*{gap:.25rem}.\[\&\>li\]\:w-full>li{width:100%}.\[\&\>ul\]\:justify-center>ul{justify-content:center}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}