@montytools/cli 0.5.5 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/monty.mjs +289 -324
- package/lib/schemaCodegen.mjs +7 -3
- package/lib/schemaPull.mjs +36 -50
- package/lib/styleLint.mjs +181 -0
- package/lib/tokens-manifest.mjs +90 -0
- package/package.json +2 -2
- package/skills/monty-build/SKILL.md +7 -5
- package/skills/monty-design/SKILL.md +105 -55
- package/template/AGENTS.md +54 -30
- package/template/index.html +5 -5
- package/template/package.json +2 -2
- package/template/src/components/ui/badge.tsx +1 -1
- package/template/src/components/ui/button.tsx +7 -7
- package/template/src/components/ui/card.tsx +3 -3
- package/template/src/components/ui/empty.tsx +3 -3
- package/template/src/components/ui/field.tsx +5 -5
- package/template/src/components/ui/input.tsx +1 -1
- package/template/src/components/ui/label.tsx +1 -1
- package/template/src/components/ui/select.tsx +4 -4
- package/template/src/components/ui/table.tsx +3 -3
- package/template/src/index.css +7 -118
- package/template/src/main.tsx +1 -1
- package/template/src/monty.gen.ts +16 -0
- package/template/src/routes/index.tsx +1 -1
- package/template/tsconfig.json +1 -1
- package/template/monty.config.ts +0 -21
|
@@ -44,7 +44,7 @@ function SelectTrigger({
|
|
|
44
44
|
data-slot="select-trigger"
|
|
45
45
|
data-size={size}
|
|
46
46
|
className={cn(
|
|
47
|
-
"flex w-fit items-center justify-between gap-1.5 rounded-
|
|
47
|
+
"flex w-fit items-center justify-between gap-1.5 rounded-control border border-input bg-transparent py-2 pr-2 pl-2.5 text-body whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-control *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
48
48
|
className
|
|
49
49
|
)}
|
|
50
50
|
{...props}
|
|
@@ -69,7 +69,7 @@ function SelectContent({
|
|
|
69
69
|
<SelectPrimitive.Content
|
|
70
70
|
data-slot="select-content"
|
|
71
71
|
data-align-trigger={position === "item-aligned"}
|
|
72
|
-
className={cn("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-
|
|
72
|
+
className={cn("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-overlay bg-popover text-popover-foreground shadow-menu duration-100 data-[align-trigger=true]:animate-none 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", position ==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className )}
|
|
73
73
|
position={position}
|
|
74
74
|
align={align}
|
|
75
75
|
{...props}
|
|
@@ -97,7 +97,7 @@ function SelectLabel({
|
|
|
97
97
|
return (
|
|
98
98
|
<SelectPrimitive.Label
|
|
99
99
|
data-slot="select-label"
|
|
100
|
-
className={cn("px-2 py-2 text-
|
|
100
|
+
className={cn("px-2 py-2 text-meta text-muted-foreground", className)}
|
|
101
101
|
{...props}
|
|
102
102
|
/>
|
|
103
103
|
)
|
|
@@ -112,7 +112,7 @@ function SelectItem({
|
|
|
112
112
|
<SelectPrimitive.Item
|
|
113
113
|
data-slot="select-item"
|
|
114
114
|
className={cn(
|
|
115
|
-
"relative flex w-full cursor-default items-center gap-2 rounded-none py-2 pr-8 pl-2 text-
|
|
115
|
+
"relative flex w-full cursor-default items-center gap-2 rounded-none py-2 pr-8 pl-2 text-body outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
|
|
116
116
|
className
|
|
117
117
|
)}
|
|
118
118
|
{...props}
|
|
@@ -10,7 +10,7 @@ function Table({ className, ...props }: React.ComponentProps<"table">) {
|
|
|
10
10
|
>
|
|
11
11
|
<table
|
|
12
12
|
data-slot="table"
|
|
13
|
-
className={cn("w-full caption-bottom text-
|
|
13
|
+
className={cn("w-full caption-bottom text-body", className)}
|
|
14
14
|
{...props}
|
|
15
15
|
/>
|
|
16
16
|
</div>
|
|
@@ -68,7 +68,7 @@ function TableHead({ className, ...props }: React.ComponentProps<"th">) {
|
|
|
68
68
|
<th
|
|
69
69
|
data-slot="table-head"
|
|
70
70
|
className={cn(
|
|
71
|
-
"h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
|
|
71
|
+
"h-10 px-2 text-left align-middle text-meta font-medium whitespace-nowrap text-muted-foreground [&:has([role=checkbox])]:pr-0",
|
|
72
72
|
className
|
|
73
73
|
)}
|
|
74
74
|
{...props}
|
|
@@ -96,7 +96,7 @@ function TableCaption({
|
|
|
96
96
|
return (
|
|
97
97
|
<caption
|
|
98
98
|
data-slot="table-caption"
|
|
99
|
-
className={cn("mt-4 text-
|
|
99
|
+
className={cn("mt-4 text-meta text-muted-foreground", className)}
|
|
100
100
|
{...props}
|
|
101
101
|
/>
|
|
102
102
|
)
|
package/template/src/index.css
CHANGED
|
@@ -1,138 +1,27 @@
|
|
|
1
1
|
@import "tailwindcss";
|
|
2
2
|
@import "tw-animate-css";
|
|
3
3
|
@import "shadcn/tailwind.css";
|
|
4
|
-
@import "@fontsource-variable/
|
|
4
|
+
@import "@fontsource-variable/inter";
|
|
5
|
+
/* The Monty design tokens — colors, type ladder, radius policy, elevation.
|
|
6
|
+
The ONE place style values live; nothing in an app restates them. */
|
|
7
|
+
@import "@montytools/sdk/tokens.css";
|
|
5
8
|
|
|
6
9
|
/* Shared platform chrome (@montytools/sdk/ui) ships Tailwind classes in its
|
|
7
10
|
dist — scan it so they compile. */
|
|
8
|
-
@source "../node_modules/@montytools/sdk/dist
|
|
11
|
+
@source "../node_modules/@montytools/sdk/dist";
|
|
9
12
|
|
|
10
13
|
|
|
11
14
|
@custom-variant dark (&:is(.dark *));
|
|
12
15
|
|
|
13
|
-
@theme inline {
|
|
14
|
-
--font-heading: var(--font-sans);
|
|
15
|
-
--font-sans: 'Roboto Variable', sans-serif;
|
|
16
|
-
--color-sidebar-ring: var(--sidebar-ring);
|
|
17
|
-
--color-sidebar-border: var(--sidebar-border);
|
|
18
|
-
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
19
|
-
--color-sidebar-accent: var(--sidebar-accent);
|
|
20
|
-
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
21
|
-
--color-sidebar-primary: var(--sidebar-primary);
|
|
22
|
-
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
23
|
-
--color-sidebar: var(--sidebar);
|
|
24
|
-
--color-chart-5: var(--chart-5);
|
|
25
|
-
--color-chart-4: var(--chart-4);
|
|
26
|
-
--color-chart-3: var(--chart-3);
|
|
27
|
-
--color-chart-2: var(--chart-2);
|
|
28
|
-
--color-chart-1: var(--chart-1);
|
|
29
|
-
--color-ring: var(--ring);
|
|
30
|
-
--color-input: var(--input);
|
|
31
|
-
--color-border: var(--border);
|
|
32
|
-
--color-destructive: var(--destructive);
|
|
33
|
-
--color-accent-foreground: var(--accent-foreground);
|
|
34
|
-
--color-accent: var(--accent);
|
|
35
|
-
--color-muted-foreground: var(--muted-foreground);
|
|
36
|
-
--color-muted: var(--muted);
|
|
37
|
-
--color-secondary-foreground: var(--secondary-foreground);
|
|
38
|
-
--color-secondary: var(--secondary);
|
|
39
|
-
--color-primary-foreground: var(--primary-foreground);
|
|
40
|
-
--color-primary: var(--primary);
|
|
41
|
-
--color-popover-foreground: var(--popover-foreground);
|
|
42
|
-
--color-popover: var(--popover);
|
|
43
|
-
--color-card-foreground: var(--card-foreground);
|
|
44
|
-
--color-card: var(--card);
|
|
45
|
-
--color-foreground: var(--foreground);
|
|
46
|
-
--color-background: var(--background);
|
|
47
|
-
--radius-sm: calc(var(--radius) * 0.6);
|
|
48
|
-
--radius-md: calc(var(--radius) * 0.8);
|
|
49
|
-
--radius-lg: var(--radius);
|
|
50
|
-
--radius-xl: calc(var(--radius) * 1.4);
|
|
51
|
-
--radius-2xl: calc(var(--radius) * 1.8);
|
|
52
|
-
--radius-3xl: calc(var(--radius) * 2.2);
|
|
53
|
-
--radius-4xl: calc(var(--radius) * 2.6);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
:root {
|
|
57
|
-
--background: oklch(1 0 0);
|
|
58
|
-
--foreground: oklch(0.153 0.006 107.1);
|
|
59
|
-
--card: oklch(1 0 0);
|
|
60
|
-
--card-foreground: oklch(0.153 0.006 107.1);
|
|
61
|
-
--popover: oklch(1 0 0);
|
|
62
|
-
--popover-foreground: oklch(0.153 0.006 107.1);
|
|
63
|
-
--primary: oklch(0.511 0.096 186.391);
|
|
64
|
-
--primary-foreground: oklch(0.984 0.014 180.72);
|
|
65
|
-
--secondary: oklch(0.967 0.001 286.375);
|
|
66
|
-
--secondary-foreground: oklch(0.21 0.006 285.885);
|
|
67
|
-
--muted: oklch(0.966 0.005 106.5);
|
|
68
|
-
--muted-foreground: oklch(0.58 0.031 107.3);
|
|
69
|
-
--accent: oklch(0.966 0.005 106.5);
|
|
70
|
-
--accent-foreground: oklch(0.228 0.013 107.4);
|
|
71
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
72
|
-
--border: oklch(0.93 0.007 106.5);
|
|
73
|
-
--input: oklch(0.93 0.007 106.5);
|
|
74
|
-
--ring: oklch(0.737 0.021 106.9);
|
|
75
|
-
--chart-1: oklch(0.855 0.138 181.071);
|
|
76
|
-
--chart-2: oklch(0.704 0.14 182.503);
|
|
77
|
-
--chart-3: oklch(0.6 0.118 184.704);
|
|
78
|
-
--chart-4: oklch(0.511 0.096 186.391);
|
|
79
|
-
--chart-5: oklch(0.437 0.078 188.216);
|
|
80
|
-
--radius: 0.625rem;
|
|
81
|
-
--sidebar: oklch(0.988 0.003 106.5);
|
|
82
|
-
--sidebar-foreground: oklch(0.153 0.006 107.1);
|
|
83
|
-
--sidebar-primary: oklch(0.6 0.118 184.704);
|
|
84
|
-
--sidebar-primary-foreground: oklch(0.984 0.014 180.72);
|
|
85
|
-
--sidebar-accent: oklch(0.966 0.005 106.5);
|
|
86
|
-
--sidebar-accent-foreground: oklch(0.228 0.013 107.4);
|
|
87
|
-
--sidebar-border: oklch(0.93 0.007 106.5);
|
|
88
|
-
--sidebar-ring: oklch(0.737 0.021 106.9);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.dark {
|
|
92
|
-
--background: #101112;
|
|
93
|
-
--foreground: #F1F2F3;
|
|
94
|
-
--card: #17181A;
|
|
95
|
-
--card-foreground: #F1F2F3;
|
|
96
|
-
--popover: #17181A;
|
|
97
|
-
--popover-foreground: #F1F2F3;
|
|
98
|
-
--primary: #266DF0;
|
|
99
|
-
--primary-foreground: #FFFFFF;
|
|
100
|
-
--secondary: rgb(255 255 255 / 0.05);
|
|
101
|
-
--secondary-foreground: #F1F2F3;
|
|
102
|
-
--muted: rgb(255 255 255 / 0.05);
|
|
103
|
-
--muted-foreground: rgb(255 255 255 / 0.6);
|
|
104
|
-
--accent: rgb(255 255 255 / 0.05);
|
|
105
|
-
--accent-foreground: #F1F2F3;
|
|
106
|
-
--destructive: oklch(0.68 0.19 25);
|
|
107
|
-
--border: #1B1C1F;
|
|
108
|
-
--input: #212224;
|
|
109
|
-
--ring: #266DF0;
|
|
110
|
-
--chart-1: #266DF0;
|
|
111
|
-
--chart-2: #4E8CFC;
|
|
112
|
-
--chart-3: #9B69FF;
|
|
113
|
-
--chart-4: #6EA5F7;
|
|
114
|
-
--chart-5: #2D3A55;
|
|
115
|
-
--sidebar: #101112;
|
|
116
|
-
--sidebar-foreground: #F1F2F3;
|
|
117
|
-
--sidebar-primary: #266DF0;
|
|
118
|
-
--sidebar-primary-foreground: #FFFFFF;
|
|
119
|
-
--sidebar-accent: rgb(255 255 255 / 0.05);
|
|
120
|
-
--sidebar-accent-foreground: #F1F2F3;
|
|
121
|
-
--sidebar-border: #1B1C1F;
|
|
122
|
-
--sidebar-ring: #266DF0;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
16
|
@layer base {
|
|
126
17
|
* {
|
|
127
18
|
@apply border-border outline-ring/50;
|
|
128
19
|
}
|
|
129
20
|
body {
|
|
130
|
-
@apply bg-background text-foreground;
|
|
21
|
+
@apply bg-background font-sans text-body text-foreground;
|
|
22
|
+
-webkit-font-smoothing: antialiased;
|
|
131
23
|
}
|
|
132
24
|
button:not(:disabled), [role="button"]:not(:disabled) {
|
|
133
25
|
cursor: pointer;
|
|
134
26
|
}
|
|
135
|
-
html {
|
|
136
|
-
@apply font-sans;
|
|
137
|
-
}
|
|
138
27
|
}
|
package/template/src/main.tsx
CHANGED
|
@@ -4,7 +4,7 @@ import { RouterProvider, createRouter } from "@tanstack/react-router";
|
|
|
4
4
|
import { MontyProvider, MontySplash } from "@montytools/sdk/react";
|
|
5
5
|
|
|
6
6
|
import "./index.css";
|
|
7
|
-
import { app } from "
|
|
7
|
+
import { app } from "./monty.gen";
|
|
8
8
|
import { routeTree } from "./routeTree.gen";
|
|
9
9
|
|
|
10
10
|
// defaultPendingComponent: lazy route chunks show the same splash the rest
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineApp } from "@montytools/sdk";
|
|
2
|
+
|
|
3
|
+
// GENERATED by Monty from the app's config stored in the workspace.
|
|
4
|
+
// DO NOT EDIT: edits here never land anywhere, and this file is
|
|
5
|
+
// overwritten on every sync (a running `monty dev` regenerates it within
|
|
6
|
+
// a heartbeat of a remote change; `monty save` and `monty schema pull`
|
|
7
|
+
// refresh it too). Change the app through the doors instead:
|
|
8
|
+
// `monty schema set`, the MCP schema_update tool, or Configuration.
|
|
9
|
+
// Import { app } from it for typed SDK hooks — that part is yours.
|
|
10
|
+
export const app = defineApp({
|
|
11
|
+
slug: "new-app",
|
|
12
|
+
name: "New app",
|
|
13
|
+
icon: "layout-grid",
|
|
14
|
+
tables: {},
|
|
15
|
+
});
|
|
16
|
+
export type App = typeof app;
|
package/template/tsconfig.json
CHANGED
package/template/monty.config.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { defineApp } from "@montytools/sdk";
|
|
2
|
-
|
|
3
|
-
// This file is the ONLY place data shapes are defined. Edit it, save, and the
|
|
4
|
-
// typed hooks in your components update immediately. The starter ships with no
|
|
5
|
-
// tables — declare each one as a zod object as the app needs it, e.g.:
|
|
6
|
-
//
|
|
7
|
-
// import { z } from "zod";
|
|
8
|
-
// tables: {
|
|
9
|
-
// tasks: z.object({
|
|
10
|
-
// title: z.string().min(1),
|
|
11
|
-
// done: z.boolean().default(false),
|
|
12
|
-
// }),
|
|
13
|
-
// },
|
|
14
|
-
export const app = defineApp({
|
|
15
|
-
slug: "new-app",
|
|
16
|
-
name: "New app",
|
|
17
|
-
icon: "layout-grid",
|
|
18
|
-
tables: {},
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
export type App = typeof app;
|