next-anvil 0.3.3 → 0.3.5

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/README.md CHANGED
@@ -1,24 +1,36 @@
1
- # Anvil CLI
1
+ # Next-anvil
2
2
 
3
- CLI tool for the Anvil framework - a Next.js framework for creating admin dashboards.
3
+ A Next.js framework for building admin dashboards. Next-anvil provides schema definitions, form field components, and a CLI tool to scaffold resources.
4
4
 
5
5
  ## Installation
6
6
 
7
+ ### CLI Tool
8
+
9
+ Install globally:
10
+
7
11
  ```bash
8
- npm install -g anvil
12
+ npm install -g next-anvil
9
13
  ```
10
14
 
11
15
  Or use it locally in your project:
12
16
 
13
17
  ```bash
14
- npm install --save-dev anvil
18
+ npm install --save-dev next-anvil
19
+ ```
20
+
21
+ ### Library
22
+
23
+ Install as a dependency in your Next.js project:
24
+
25
+ ```bash
26
+ npm install next-anvil
15
27
  ```
16
28
 
17
- ## Usage
29
+ ## CLI Usage
18
30
 
19
31
  ### Create a Resource
20
32
 
21
- Generate a new resource with form and table components:
33
+ Generate resource scaffolding files:
22
34
 
23
35
  ```bash
24
36
  anvil forge:resource <name>
@@ -29,12 +41,12 @@ Example:
29
41
  anvil forge:resource product
30
42
  ```
31
43
 
32
- This will create:
33
- - `src/lib/resources/products/index.ts`
34
- - `src/lib/resources/products/form.ts`
35
- - `src/lib/resources/products/table.ts`
44
+ This creates:
45
+ - `src/lib/resources/products/index.ts` - Resource definition
46
+ - `src/lib/resources/products/form.ts` - Form schema
47
+ - `src/lib/resources/products/table.ts` - Table schema
36
48
 
37
- Run Prisma migrations:
49
+ ### Run Database Migrations
38
50
 
39
51
  ```bash
40
52
  anvil db:migrate
@@ -42,13 +54,145 @@ anvil db:migrate
42
54
 
43
55
  This executes `npx prisma migrate dev && npx prisma generate`.
44
56
 
57
+ ## Library Usage
58
+
59
+ ### Import Styles
60
+
61
+ First, import the compiled Tailwind CSS:
62
+
63
+ ```javascript
64
+ import "next-anvil/styles.css";
65
+ ```
66
+
67
+ ### Defining Field Schemas
68
+
69
+ Next-anvil provides field definition functions for building form schemas:
70
+
71
+ ```typescript
72
+ import { text, email, number, select, date, textarea } from "next-anvil/fields";
73
+ import { defineFormSchema } from "next-anvil/form";
74
+
75
+ const formSchema = defineFormSchema({
76
+ fields: {
77
+ name: text({
78
+ label: "Name",
79
+ required: true,
80
+ placeholder: "Enter name",
81
+ }),
82
+ email: email({
83
+ label: "Email",
84
+ required: true,
85
+ unique: true,
86
+ }),
87
+ age: number({
88
+ label: "Age",
89
+ min: 0,
90
+ max: 120,
91
+ }),
92
+ status: select({
93
+ label: "Status",
94
+ options: [
95
+ { value: "active", label: "Active" },
96
+ { value: "inactive", label: "Inactive" },
97
+ ],
98
+ }),
99
+ birthDate: date({
100
+ label: "Birth Date",
101
+ }),
102
+ bio: textarea({
103
+ label: "Biography",
104
+ rows: 4,
105
+ }),
106
+ },
107
+ });
108
+ ```
109
+
110
+ ### Defining Table Schemas
111
+
112
+ ```typescript
113
+ import { defineTableSchema } from "next-anvil/table";
114
+
115
+ const tableSchema = defineTableSchema({
116
+ columns: [
117
+ { name: "id", label: "ID", visible: "never" },
118
+ { name: "name", label: "Name" },
119
+ { name: "email", label: "Email" },
120
+ { name: "createdAt", label: "Created At" },
121
+ ],
122
+ });
123
+ ```
124
+
125
+ ### Defining Resources
126
+
127
+ ```typescript
128
+ import { defineResource } from "next-anvil/resource";
129
+ import form from "./form";
130
+ import table from "./table";
131
+
132
+ const productResource = defineResource({
133
+ model: "Product",
134
+ label: "Products",
135
+ form,
136
+ table,
137
+ });
138
+ ```
139
+
140
+ ### Using Field Components
141
+
142
+ Next-anvil provides React components for rendering form fields:
143
+
144
+ ```tsx
145
+ import { TextField, EmailField, NumberField } from "next-anvil/components";
146
+
147
+ function MyForm() {
148
+ const [formData, setFormData] = useState({});
149
+
150
+ return (
151
+ <form>
152
+ <TextField
153
+ fieldName="name"
154
+ fieldSchema={formSchema.fields.name}
155
+ value={formData.name}
156
+ onChange={(value) => setFormData({ ...formData, name: value })}
157
+ />
158
+ <EmailField
159
+ fieldName="email"
160
+ fieldSchema={formSchema.fields.email}
161
+ value={formData.email}
162
+ onChange={(value) => setFormData({ ...formData, email: value })}
163
+ />
164
+ </form>
165
+ );
166
+ }
167
+ ```
168
+
169
+ Available field components:
170
+ - `TextField`
171
+ - `EmailField`
172
+ - `NumberField`
173
+ - `SelectField`
174
+ - `DateField`
175
+ - `TextareaField`
176
+ - `FieldWrapper` (base wrapper component)
177
+
178
+ ### Package Exports
179
+
180
+ Next-anvil provides the following exports:
181
+
182
+ - `next-anvil/fields` - Field schema definition functions (text, email, number, select, date, textarea, hidden)
183
+ - `next-anvil/form` - Form schema utilities (`defineFormSchema`)
184
+ - `next-anvil/table` - Table schema utilities (`defineTableSchema`)
185
+ - `next-anvil/resource` - Resource definition utilities (`defineResource`)
186
+ - `next-anvil/components` - React field components
187
+ - `next-anvil/styles.css` - Compiled Tailwind CSS
188
+
45
189
  ## Requirements
46
190
 
47
191
  - Node.js 18.0.0 or higher
48
- - A Next.js project
49
- - Prisma configured (`db:migrate` commands)
192
+ - React 18.0.0 or higher
193
+ - Next.js 14.0.0 or higher
194
+ - Prisma (for database operations)
50
195
 
51
196
  ## License
52
197
 
53
198
  ISC
54
-
@@ -13,7 +13,7 @@ async function forgeResource(name) {
13
13
  const plural = (0, pluralize_esm_1.default)(singular);
14
14
  const pluralLower = plural.toLowerCase();
15
15
  const singularLower = singular.toLowerCase();
16
- const resourceDir = path_1.default.join(process.cwd(), "src/lib/resources", pluralLower);
16
+ const resourceDir = path_1.default.join(process.cwd(), "src/lib/anvil/resources", pluralLower);
17
17
  if (await promises_1.default
18
18
  .access(resourceDir)
19
19
  .then(() => true)
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../../bin/commands/forge/resource.ts"],"names":[],"mappings":";;;;;AASA,sCAoCC;AA7CD,2DAA6B;AAC7B,gDAAwB;AACxB,kEAAsC;AACtC,uDAIkC;AAE3B,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAA,uBAAS,EAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAE7C,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAC3B,OAAO,CAAC,GAAG,EAAE,EACb,mBAAmB,EACnB,WAAW,CACZ,CAAC;IAEF,IACE,MAAM,kBAAE;SACL,MAAM,CAAC,WAAW,CAAC;SACnB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EACrB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,0BAA0B,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,MAAM,kBAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,IAAA,wBAAa,EAAC,QAAQ,CAAC,CAAC;QACzE,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,IAAA,uBAAY,EAAC,QAAQ,CAAC,CAAC;QACvE,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,IAAA,wBAAa,GAAE,CAAC;KAClE,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CACT,KAAK,QAAQ,0CAA0C,WAAW,GAAG,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../../bin/commands/forge/resource.ts"],"names":[],"mappings":";;;;;AASA,sCAoCC;AA7CD,2DAA6B;AAC7B,gDAAwB;AACxB,kEAAsC;AACtC,uDAIkC;AAE3B,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAA,uBAAS,EAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAE7C,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAC3B,OAAO,CAAC,GAAG,EAAE,EACb,yBAAyB,EACzB,WAAW,CACZ,CAAC;IAEF,IACE,MAAM,kBAAE;SACL,MAAM,CAAC,WAAW,CAAC;SACnB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EACrB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,0BAA0B,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,MAAM,kBAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,IAAA,wBAAa,EAAC,QAAQ,CAAC,CAAC;QACzE,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,IAAA,uBAAY,EAAC,QAAQ,CAAC,CAAC;QACvE,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,IAAA,wBAAa,GAAE,CAAC;KAClE,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CACT,KAAK,QAAQ,0CAA0C,WAAW,GAAG,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC/B,CAAC"}
package/dist/styles.css CHANGED
@@ -7,18 +7,49 @@
7
7
  "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
8
8
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
9
9
  "Courier New", monospace;
10
+ --color-red-50: oklch(97.1% 0.013 17.38);
11
+ --color-red-200: oklch(88.5% 0.062 18.334);
10
12
  --color-red-500: oklch(63.7% 0.237 25.331);
11
13
  --color-red-600: oklch(57.7% 0.245 27.325);
14
+ --color-red-700: oklch(50.5% 0.213 27.518);
15
+ --color-red-900: oklch(39.6% 0.141 25.723);
16
+ --color-green-100: oklch(96.2% 0.044 156.743);
17
+ --color-green-800: oklch(44.8% 0.119 151.328);
18
+ --color-blue-300: oklch(80.9% 0.105 251.813);
12
19
  --color-blue-500: oklch(62.3% 0.214 259.815);
20
+ --color-blue-600: oklch(54.6% 0.245 262.881);
21
+ --color-blue-700: oklch(48.8% 0.243 264.376);
22
+ --color-blue-900: oklch(37.9% 0.146 265.522);
23
+ --color-gray-50: oklch(98.5% 0.002 247.839);
13
24
  --color-gray-100: oklch(96.7% 0.003 264.542);
25
+ --color-gray-200: oklch(92.8% 0.006 264.531);
14
26
  --color-gray-300: oklch(87.2% 0.01 258.338);
27
+ --color-gray-400: oklch(70.7% 0.022 261.325);
28
+ --color-gray-500: oklch(55.1% 0.027 264.364);
29
+ --color-gray-600: oklch(44.6% 0.03 256.802);
15
30
  --color-gray-700: oklch(37.3% 0.034 259.733);
31
+ --color-gray-800: oklch(27.8% 0.033 256.848);
32
+ --color-gray-900: oklch(21% 0.034 264.665);
16
33
  --color-black: #000;
34
+ --color-white: #fff;
17
35
  --spacing: 0.25rem;
36
+ --container-7xl: 80rem;
37
+ --text-xs: 0.75rem;
38
+ --text-xs--line-height: calc(1 / 0.75);
18
39
  --text-sm: 0.875rem;
19
40
  --text-sm--line-height: calc(1.25 / 0.875);
41
+ --text-lg: 1.125rem;
42
+ --text-lg--line-height: calc(1.75 / 1.125);
43
+ --text-3xl: 1.875rem;
44
+ --text-3xl--line-height: calc(2.25 / 1.875);
20
45
  --font-weight-medium: 500;
46
+ --font-weight-semibold: 600;
47
+ --font-weight-bold: 700;
48
+ --tracking-wider: 0.05em;
21
49
  --radius-md: 0.375rem;
50
+ --radius-lg: 0.5rem;
51
+ --default-transition-duration: 150ms;
52
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
22
53
  --default-font-family: var(--font-sans);
23
54
  --default-mono-font-family: var(--font-mono);
24
55
  }
@@ -191,30 +222,117 @@
191
222
  .col-span-4 {
192
223
  grid-column: span 4 / span 4;
193
224
  }
225
+ .mx-auto {
226
+ margin-inline: auto;
227
+ }
194
228
  .mt-1 {
195
229
  margin-top: calc(var(--spacing) * 1);
196
230
  }
231
+ .mt-2 {
232
+ margin-top: calc(var(--spacing) * 2);
233
+ }
234
+ .mt-8 {
235
+ margin-top: calc(var(--spacing) * 8);
236
+ }
197
237
  .mb-1 {
198
238
  margin-bottom: calc(var(--spacing) * 1);
199
239
  }
240
+ .mb-4 {
241
+ margin-bottom: calc(var(--spacing) * 4);
242
+ }
243
+ .mb-6 {
244
+ margin-bottom: calc(var(--spacing) * 6);
245
+ }
200
246
  .ml-1 {
201
247
  margin-left: calc(var(--spacing) * 1);
202
248
  }
203
249
  .block {
204
250
  display: block;
205
251
  }
252
+ .flex {
253
+ display: flex;
254
+ }
206
255
  .grid {
207
256
  display: grid;
208
257
  }
209
258
  .hidden {
210
259
  display: none;
211
260
  }
261
+ .inline-flex {
262
+ display: inline-flex;
263
+ }
212
264
  .table {
213
265
  display: table;
214
266
  }
267
+ .h-16 {
268
+ height: calc(var(--spacing) * 16);
269
+ }
270
+ .min-h-screen {
271
+ min-height: 100vh;
272
+ }
215
273
  .w-full {
216
274
  width: 100%;
217
275
  }
276
+ .max-w-7xl {
277
+ max-width: var(--container-7xl);
278
+ }
279
+ .min-w-full {
280
+ min-width: 100%;
281
+ }
282
+ .grid-cols-4 {
283
+ grid-template-columns: repeat(4, minmax(0, 1fr));
284
+ }
285
+ .items-center {
286
+ align-items: center;
287
+ }
288
+ .justify-between {
289
+ justify-content: space-between;
290
+ }
291
+ .justify-end {
292
+ justify-content: flex-end;
293
+ }
294
+ .gap-3 {
295
+ gap: calc(var(--spacing) * 3);
296
+ }
297
+ .gap-4 {
298
+ gap: calc(var(--spacing) * 4);
299
+ }
300
+ .gap-6 {
301
+ gap: calc(var(--spacing) * 6);
302
+ }
303
+ .space-y-6 {
304
+ :where(& > :not(:last-child)) {
305
+ --tw-space-y-reverse: 0;
306
+ margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));
307
+ margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
308
+ }
309
+ }
310
+ .divide-y {
311
+ :where(& > :not(:last-child)) {
312
+ --tw-divide-y-reverse: 0;
313
+ border-bottom-style: var(--tw-border-style);
314
+ border-top-style: var(--tw-border-style);
315
+ border-top-width: calc(1px * var(--tw-divide-y-reverse));
316
+ border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
317
+ }
318
+ }
319
+ .divide-gray-200 {
320
+ :where(& > :not(:last-child)) {
321
+ border-color: var(--color-gray-200);
322
+ }
323
+ }
324
+ .overflow-hidden {
325
+ overflow: hidden;
326
+ }
327
+ .overflow-x-auto {
328
+ overflow-x: auto;
329
+ }
330
+ .rounded-full {
331
+ border-radius: calc(infinity * 1px);
332
+ }
333
+ .rounded-lg {
334
+ border-radius: var(--radius-lg);
335
+ }
218
336
  .rounded-md {
219
337
  border-radius: var(--radius-md);
220
338
  }
@@ -222,45 +340,253 @@
222
340
  border-style: var(--tw-border-style);
223
341
  border-width: 1px;
224
342
  }
343
+ .border-t {
344
+ border-top-style: var(--tw-border-style);
345
+ border-top-width: 1px;
346
+ }
347
+ .border-b {
348
+ border-bottom-style: var(--tw-border-style);
349
+ border-bottom-width: 1px;
350
+ }
351
+ .border-gray-200 {
352
+ border-color: var(--color-gray-200);
353
+ }
225
354
  .border-gray-300 {
226
355
  border-color: var(--color-gray-300);
227
356
  }
357
+ .border-red-200 {
358
+ border-color: var(--color-red-200);
359
+ }
228
360
  .border-red-500 {
229
361
  border-color: var(--color-red-500);
230
362
  }
363
+ .bg-blue-600 {
364
+ background-color: var(--color-blue-600);
365
+ }
366
+ .bg-gray-50 {
367
+ background-color: var(--color-gray-50);
368
+ }
231
369
  .bg-gray-100 {
232
370
  background-color: var(--color-gray-100);
233
371
  }
372
+ .bg-gray-200 {
373
+ background-color: var(--color-gray-200);
374
+ }
375
+ .bg-green-100 {
376
+ background-color: var(--color-green-100);
377
+ }
378
+ .bg-red-50 {
379
+ background-color: var(--color-red-50);
380
+ }
381
+ .bg-red-600 {
382
+ background-color: var(--color-red-600);
383
+ }
384
+ .bg-white {
385
+ background-color: var(--color-white);
386
+ }
387
+ .p-4 {
388
+ padding: calc(var(--spacing) * 4);
389
+ }
390
+ .p-6 {
391
+ padding: calc(var(--spacing) * 6);
392
+ }
393
+ .p-12 {
394
+ padding: calc(var(--spacing) * 12);
395
+ }
396
+ .px-2\.5 {
397
+ padding-inline: calc(var(--spacing) * 2.5);
398
+ }
234
399
  .px-3 {
235
400
  padding-inline: calc(var(--spacing) * 3);
236
401
  }
402
+ .px-4 {
403
+ padding-inline: calc(var(--spacing) * 4);
404
+ }
405
+ .px-6 {
406
+ padding-inline: calc(var(--spacing) * 6);
407
+ }
408
+ .py-0\.5 {
409
+ padding-block: calc(var(--spacing) * 0.5);
410
+ }
237
411
  .py-2 {
238
412
  padding-block: calc(var(--spacing) * 2);
239
413
  }
414
+ .py-3 {
415
+ padding-block: calc(var(--spacing) * 3);
416
+ }
417
+ .py-4 {
418
+ padding-block: calc(var(--spacing) * 4);
419
+ }
420
+ .py-8 {
421
+ padding-block: calc(var(--spacing) * 8);
422
+ }
423
+ .pt-6 {
424
+ padding-top: calc(var(--spacing) * 6);
425
+ }
426
+ .text-center {
427
+ text-align: center;
428
+ }
429
+ .text-left {
430
+ text-align: left;
431
+ }
432
+ .text-right {
433
+ text-align: right;
434
+ }
435
+ .text-3xl {
436
+ font-size: var(--text-3xl);
437
+ line-height: var(--tw-leading, var(--text-3xl--line-height));
438
+ }
439
+ .text-lg {
440
+ font-size: var(--text-lg);
441
+ line-height: var(--tw-leading, var(--text-lg--line-height));
442
+ }
240
443
  .text-sm {
241
444
  font-size: var(--text-sm);
242
445
  line-height: var(--tw-leading, var(--text-sm--line-height));
243
446
  }
447
+ .text-xs {
448
+ font-size: var(--text-xs);
449
+ line-height: var(--tw-leading, var(--text-xs--line-height));
450
+ }
451
+ .font-bold {
452
+ --tw-font-weight: var(--font-weight-bold);
453
+ font-weight: var(--font-weight-bold);
454
+ }
244
455
  .font-medium {
245
456
  --tw-font-weight: var(--font-weight-medium);
246
457
  font-weight: var(--font-weight-medium);
247
458
  }
459
+ .font-semibold {
460
+ --tw-font-weight: var(--font-weight-semibold);
461
+ font-weight: var(--font-weight-semibold);
462
+ }
463
+ .tracking-wider {
464
+ --tw-tracking: var(--tracking-wider);
465
+ letter-spacing: var(--tracking-wider);
466
+ }
467
+ .whitespace-nowrap {
468
+ white-space: nowrap;
469
+ }
248
470
  .text-black {
249
471
  color: var(--color-black);
250
472
  }
473
+ .text-blue-600 {
474
+ color: var(--color-blue-600);
475
+ }
476
+ .text-gray-400 {
477
+ color: var(--color-gray-400);
478
+ }
479
+ .text-gray-500 {
480
+ color: var(--color-gray-500);
481
+ }
482
+ .text-gray-600 {
483
+ color: var(--color-gray-600);
484
+ }
251
485
  .text-gray-700 {
252
486
  color: var(--color-gray-700);
253
487
  }
488
+ .text-gray-800 {
489
+ color: var(--color-gray-800);
490
+ }
491
+ .text-gray-900 {
492
+ color: var(--color-gray-900);
493
+ }
494
+ .text-green-800 {
495
+ color: var(--color-green-800);
496
+ }
254
497
  .text-red-500 {
255
498
  color: var(--color-red-500);
256
499
  }
257
500
  .text-red-600 {
258
501
  color: var(--color-red-600);
259
502
  }
503
+ .text-red-700 {
504
+ color: var(--color-red-700);
505
+ }
506
+ .text-white {
507
+ color: var(--color-white);
508
+ }
509
+ .uppercase {
510
+ text-transform: uppercase;
511
+ }
512
+ .italic {
513
+ font-style: italic;
514
+ }
515
+ .shadow {
516
+ --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
517
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
518
+ }
260
519
  .shadow-sm {
261
520
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
262
521
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
263
522
  }
523
+ .transition-all {
524
+ transition-property: all;
525
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
526
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
527
+ }
528
+ .transition-colors {
529
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
530
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
531
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
532
+ }
533
+ .hover\:border-blue-300 {
534
+ &:hover {
535
+ @media (hover: hover) {
536
+ border-color: var(--color-blue-300);
537
+ }
538
+ }
539
+ }
540
+ .hover\:bg-blue-700 {
541
+ &:hover {
542
+ @media (hover: hover) {
543
+ background-color: var(--color-blue-700);
544
+ }
545
+ }
546
+ }
547
+ .hover\:bg-gray-50 {
548
+ &:hover {
549
+ @media (hover: hover) {
550
+ background-color: var(--color-gray-50);
551
+ }
552
+ }
553
+ }
554
+ .hover\:bg-gray-300 {
555
+ &:hover {
556
+ @media (hover: hover) {
557
+ background-color: var(--color-gray-300);
558
+ }
559
+ }
560
+ }
561
+ .hover\:bg-red-700 {
562
+ &:hover {
563
+ @media (hover: hover) {
564
+ background-color: var(--color-red-700);
565
+ }
566
+ }
567
+ }
568
+ .hover\:text-blue-900 {
569
+ &:hover {
570
+ @media (hover: hover) {
571
+ color: var(--color-blue-900);
572
+ }
573
+ }
574
+ }
575
+ .hover\:text-red-900 {
576
+ &:hover {
577
+ @media (hover: hover) {
578
+ color: var(--color-red-900);
579
+ }
580
+ }
581
+ }
582
+ .hover\:shadow-md {
583
+ &:hover {
584
+ @media (hover: hover) {
585
+ --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
586
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
587
+ }
588
+ }
589
+ }
264
590
  .focus\:border-blue-500 {
265
591
  &:focus {
266
592
  border-color: var(--color-blue-500);
@@ -283,6 +609,21 @@
283
609
  outline-style: none;
284
610
  }
285
611
  }
612
+ .disabled\:cursor-not-allowed {
613
+ &:disabled {
614
+ cursor: not-allowed;
615
+ }
616
+ }
617
+ .disabled\:opacity-50 {
618
+ &:disabled {
619
+ opacity: 50%;
620
+ }
621
+ }
622
+ .sm\:px-6 {
623
+ @media (width >= 40rem) {
624
+ padding-inline: calc(var(--spacing) * 6);
625
+ }
626
+ }
286
627
  .md\:col-span-1 {
287
628
  @media (width >= 48rem) {
288
629
  grid-column: span 1 / span 1;
@@ -303,6 +644,31 @@
303
644
  grid-column: span 4 / span 4;
304
645
  }
305
646
  }
647
+ .md\:grid-cols-2 {
648
+ @media (width >= 48rem) {
649
+ grid-template-columns: repeat(2, minmax(0, 1fr));
650
+ }
651
+ }
652
+ .lg\:grid-cols-3 {
653
+ @media (width >= 64rem) {
654
+ grid-template-columns: repeat(3, minmax(0, 1fr));
655
+ }
656
+ }
657
+ .lg\:px-8 {
658
+ @media (width >= 64rem) {
659
+ padding-inline: calc(var(--spacing) * 8);
660
+ }
661
+ }
662
+ }
663
+ @property --tw-space-y-reverse {
664
+ syntax: "*";
665
+ inherits: false;
666
+ initial-value: 0;
667
+ }
668
+ @property --tw-divide-y-reverse {
669
+ syntax: "*";
670
+ inherits: false;
671
+ initial-value: 0;
306
672
  }
307
673
  @property --tw-border-style {
308
674
  syntax: "*";
@@ -313,6 +679,10 @@
313
679
  syntax: "*";
314
680
  inherits: false;
315
681
  }
682
+ @property --tw-tracking {
683
+ syntax: "*";
684
+ inherits: false;
685
+ }
316
686
  @property --tw-shadow {
317
687
  syntax: "*";
318
688
  inherits: false;
@@ -381,8 +751,11 @@
381
751
  @layer properties {
382
752
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
383
753
  *, ::before, ::after, ::backdrop {
754
+ --tw-space-y-reverse: 0;
755
+ --tw-divide-y-reverse: 0;
384
756
  --tw-border-style: solid;
385
757
  --tw-font-weight: initial;
758
+ --tw-tracking: initial;
386
759
  --tw-shadow: 0 0 #0000;
387
760
  --tw-shadow-color: initial;
388
761
  --tw-shadow-alpha: 100%;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-anvil",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "CLI tool for the Anvil framework - a Next.js framework for creating admin dashboards",
5
5
  "license": "ISC",
6
6
  "author": "Juan Sanchez <juan.sanchez@stallionstudios.net>",