@nautui/core 0.1.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 (54) hide show
  1. package/README.md +148 -0
  2. package/package.json +35 -0
  3. package/src/components/Accordion.astro +24 -0
  4. package/src/components/AccordionItem.astro +172 -0
  5. package/src/components/Background.astro +75 -0
  6. package/src/components/Badge.astro +140 -0
  7. package/src/components/Bento.astro +37 -0
  8. package/src/components/BentoItem.astro +26 -0
  9. package/src/components/Box.astro +189 -0
  10. package/src/components/Breadcrumb.astro +62 -0
  11. package/src/components/Button.astro +273 -0
  12. package/src/components/Card.astro +228 -0
  13. package/src/components/Container.astro +76 -0
  14. package/src/components/Divider.astro +85 -0
  15. package/src/components/Drawer.astro +139 -0
  16. package/src/components/Flex.astro +150 -0
  17. package/src/components/Flow.astro +119 -0
  18. package/src/components/Grid.astro +335 -0
  19. package/src/components/GridItem.astro +225 -0
  20. package/src/components/Group.astro +106 -0
  21. package/src/components/Image.astro +191 -0
  22. package/src/components/Link.astro +118 -0
  23. package/src/components/List.astro +57 -0
  24. package/src/components/ListItem.astro +31 -0
  25. package/src/components/Mark.astro +161 -0
  26. package/src/components/Marquee.astro +193 -0
  27. package/src/components/Masonry.astro +75 -0
  28. package/src/components/MasonryItem.astro +28 -0
  29. package/src/components/Menu.astro +71 -0
  30. package/src/components/MenuItem.astro +93 -0
  31. package/src/components/NavBar.astro +211 -0
  32. package/src/components/Section.astro +108 -0
  33. package/src/components/Space.astro +400 -0
  34. package/src/components/Stack.astro +237 -0
  35. package/src/components/Text.astro +270 -0
  36. package/src/components/Theme.astro +37 -0
  37. package/src/components/ThemeToggle.astro +141 -0
  38. package/src/components/Title.astro +141 -0
  39. package/src/index.d.ts +80 -0
  40. package/src/index.ts +77 -0
  41. package/src/lib/border.ts +92 -0
  42. package/src/lib/pattern.ts +37 -0
  43. package/src/lib/spacing.ts +48 -0
  44. package/src/styles/border.css +180 -0
  45. package/src/styles/colors.css +99 -0
  46. package/src/styles/global.css +57 -0
  47. package/src/styles/radius.css +22 -0
  48. package/src/styles/shadow.css +11 -0
  49. package/src/styles/spacing/display.css +198 -0
  50. package/src/styles/spacing/gap.css +19 -0
  51. package/src/styles/spacing/margin.css +157 -0
  52. package/src/styles/spacing/padding.css +154 -0
  53. package/src/styles/spacing/spacing.css +2 -0
  54. package/src/types.ts +10 -0
@@ -0,0 +1,119 @@
1
+ ---
2
+ import { Base, Responsive, Size } from "../types";
3
+
4
+ type Direction = "left" | "center" | "right";
5
+ type ResponsiveDirection = {
6
+ [key in Responsive]?: Direction;
7
+ };
8
+
9
+ export interface FlowProps extends Base {
10
+ direction?: Direction | ResponsiveDirection;
11
+ maxWidth?: Size;
12
+ }
13
+
14
+ const {
15
+ class: className,
16
+ direction = "left",
17
+ maxWidth,
18
+ ...rest
19
+ } = Astro.props as FlowProps;
20
+ const dir = typeof direction === "string" ? { base: direction } : direction;
21
+ ---
22
+
23
+ <div
24
+ class:list={[
25
+ "naut-flow",
26
+ dir.base && `${dir.base}`,
27
+ dir.sm && `sm-${dir.sm}`,
28
+ dir.md && `md-${dir.md}`,
29
+ dir.lg && `lg-${dir.lg}`,
30
+ dir.xl && `xl-${dir.xl}`,
31
+ maxWidth && `max-w max-w-${maxWidth}`,
32
+ className
33
+ ]}
34
+ {...rest}
35
+ >
36
+ <slot />
37
+ </div>
38
+ <style>
39
+ .naut-flow {
40
+ &.left {
41
+ text-align: left;
42
+ }
43
+ &.center {
44
+ text-align: center;
45
+ }
46
+ &.right {
47
+ text-align: right;
48
+ }
49
+
50
+ &.max-w {
51
+ margin-right: auto;
52
+ margin-left: auto;
53
+ }
54
+
55
+ &.max-w-sm {
56
+ max-width: 640px;
57
+ }
58
+
59
+ &.max-w-md {
60
+ max-width: 768px;
61
+ }
62
+
63
+ &.max-w-lg {
64
+ max-width: 1024px;
65
+ }
66
+
67
+ &.max-w-xl {
68
+ max-width: 1280px;
69
+ }
70
+
71
+ @media only screen and (max-width: 817px) {
72
+ &.sm-left {
73
+ text-align: left;
74
+ }
75
+ &.sm-center {
76
+ text-align: center;
77
+ }
78
+ &.sm-right {
79
+ text-align: right;
80
+ }
81
+ }
82
+
83
+ @media only screen and (min-width: 818px) and (max-width: 1041px) {
84
+ &.md-left {
85
+ text-align: left;
86
+ }
87
+ &.md-center {
88
+ text-align: center;
89
+ }
90
+ &.md-right {
91
+ text-align: right;
92
+ }
93
+ }
94
+
95
+ @media only screen and (min-width: 1042px) {
96
+ &.lg-left {
97
+ text-align: left;
98
+ }
99
+ &.lg-center {
100
+ text-align: center;
101
+ }
102
+ &.lg-right {
103
+ text-align: right;
104
+ }
105
+ }
106
+
107
+ @media only screen and (min-width: 1250px) {
108
+ &.xl-left {
109
+ text-align: left;
110
+ }
111
+ &.xl-center {
112
+ text-align: center;
113
+ }
114
+ &.xl-right {
115
+ text-align: right;
116
+ }
117
+ }
118
+ }
119
+ </style>
@@ -0,0 +1,335 @@
1
+ ---
2
+ import "../styles/border.css";
3
+ import "../styles/spacing/gap.css";
4
+ import { Border, createBorder } from "../lib/border";
5
+ import type { Base, Gap, Radius, Responsive } from "../types";
6
+
7
+ export type Columns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
8
+
9
+ export type ResponsiveColumns = {
10
+ [key in Responsive]?: Columns;
11
+ };
12
+
13
+ export interface GridProps extends Base {
14
+ border?: Border;
15
+ columns?: Columns | ResponsiveColumns;
16
+ gap?: Gap;
17
+ radius?: Radius;
18
+ }
19
+
20
+ const {
21
+ class: className,
22
+ columns = 12,
23
+ gap = "md",
24
+ bordered = false,
25
+ border,
26
+ radius,
27
+ ...rest
28
+ } = Astro.props as GridProps;
29
+
30
+ const col = typeof columns === "number" ? { base: columns } : columns;
31
+ const config = typeof border === "string" ? { width: border } : border || {};
32
+ const { borderClasses, borderColors } = createBorder(config);
33
+ ---
34
+
35
+ <div
36
+ class:list={[
37
+ "naut-grid",
38
+ `gap-${gap}`,
39
+ col?.base && `columns-${col.base}`,
40
+ col?.sm && `sm-columns-${col.sm}`,
41
+ col?.md && `md-columns-${col.md}`,
42
+ col?.lg && `lg-columns-${col.lg}`,
43
+ col?.xl && `xl-columns-${col.xl}`,
44
+ bordered && "bordered",
45
+ radius && `radius radius-${radius}`,
46
+ ...borderClasses,
47
+ className
48
+ ]}
49
+ {...rest}
50
+ >
51
+ <slot />
52
+ </div>
53
+
54
+ <style define:vars={{ ...borderColors }}>
55
+ .naut-grid {
56
+ display: grid;
57
+
58
+ &.border {
59
+ gap: 1px;
60
+ background-color: var(--naut-color-border);
61
+ }
62
+
63
+ /* Radius */
64
+ &.radius {
65
+ overflow: hidden;
66
+ }
67
+
68
+ &.radius-sm {
69
+ border-radius: var(--naut-border-radius-sm);
70
+ }
71
+ &.radius-md {
72
+ border-radius: var(--naut-border-radius-md);
73
+ }
74
+ &.radius-lg {
75
+ border-radius: var(--naut-border-radius-lg);
76
+ }
77
+ &.radius-xl {
78
+ border-radius: var(--naut-border-radius-xl);
79
+ }
80
+
81
+ /* === columns === */
82
+
83
+ &.columns-1 {
84
+ grid-template-columns: repeat(1, 1fr);
85
+ }
86
+
87
+ &.columns-2 {
88
+ grid-template-columns: repeat(2, 1fr);
89
+ }
90
+
91
+ &.columns-3 {
92
+ grid-template-columns: repeat(3, 1fr);
93
+ }
94
+
95
+ &.columns-4 {
96
+ grid-template-columns: repeat(4, 1fr);
97
+ }
98
+
99
+ &.columns-5 {
100
+ grid-template-columns: repeat(5, 1fr);
101
+ }
102
+
103
+ &.columns-6 {
104
+ grid-template-columns: repeat(6, 1fr);
105
+ }
106
+
107
+ &.columns-7 {
108
+ grid-template-columns: repeat(7, 1fr);
109
+ }
110
+
111
+ &.columns-8 {
112
+ grid-template-columns: repeat(8, 1fr);
113
+ }
114
+
115
+ &.columns-9 {
116
+ grid-template-columns: repeat(9, 1fr);
117
+ }
118
+
119
+ &.columns-10 {
120
+ grid-template-columns: repeat(10, 1fr);
121
+ }
122
+
123
+ &.columns-11 {
124
+ grid-template-columns: repeat(11, 1fr);
125
+ }
126
+
127
+ &.columns-12 {
128
+ grid-template-columns: repeat(12, 1fr);
129
+ }
130
+
131
+ @media only screen and (max-width: 817px) {
132
+ &.sm-columns-1 {
133
+ grid-template-columns: repeat(1, 1fr);
134
+ }
135
+
136
+ &.sm-columns-2 {
137
+ grid-template-columns: repeat(2, 1fr);
138
+ }
139
+
140
+ &.sm-columns-3 {
141
+ grid-template-columns: repeat(3, 1fr);
142
+ }
143
+
144
+ &.sm-columns-4 {
145
+ grid-template-columns: repeat(4, 1fr);
146
+ }
147
+
148
+ &.sm-columns-5 {
149
+ grid-template-columns: repeat(5, 1fr);
150
+ }
151
+
152
+ &.sm-columns-6 {
153
+ grid-template-columns: repeat(6, 1fr);
154
+ }
155
+
156
+ &.sm-columns-7 {
157
+ grid-template-columns: repeat(7, 1fr);
158
+ }
159
+
160
+ &.sm-columns-8 {
161
+ grid-template-columns: repeat(8, 1fr);
162
+ }
163
+
164
+ &.sm-columns-9 {
165
+ grid-template-columns: repeat(9, 1fr);
166
+ }
167
+
168
+ &.sm-columns-10 {
169
+ grid-template-columns: repeat(10, 1fr);
170
+ }
171
+
172
+ &.sm-columns-11 {
173
+ grid-template-columns: repeat(11, 1fr);
174
+ }
175
+
176
+ &.sm-columns-12 {
177
+ grid-template-columns: repeat(12, 1fr);
178
+ }
179
+ }
180
+
181
+ @media only screen and (min-width: 818px) and (max-width: 1041px) {
182
+ &.md-columns-1 {
183
+ grid-template-columns: repeat(1, 1fr);
184
+ }
185
+
186
+ &.md-columns-2 {
187
+ grid-template-columns: repeat(2, 1fr);
188
+ }
189
+
190
+ &.md-columns-3 {
191
+ grid-template-columns: repeat(3, 1fr);
192
+ }
193
+
194
+ &.md-columns-4 {
195
+ grid-template-columns: repeat(4, 1fr);
196
+ }
197
+
198
+ &.md-columns-5 {
199
+ grid-template-columns: repeat(5, 1fr);
200
+ }
201
+
202
+ &.md-columns-6 {
203
+ grid-template-columns: repeat(6, 1fr);
204
+ }
205
+
206
+ &.md-columns-7 {
207
+ grid-template-columns: repeat(7, 1fr);
208
+ }
209
+
210
+ &.md-columns-8 {
211
+ grid-template-columns: repeat(8, 1fr);
212
+ }
213
+
214
+ &.md-columns-9 {
215
+ grid-template-columns: repeat(9, 1fr);
216
+ }
217
+
218
+ &.md-columns-10 {
219
+ grid-template-columns: repeat(10, 1fr);
220
+ }
221
+
222
+ &.md-columns-11 {
223
+ grid-template-columns: repeat(11, 1fr);
224
+ }
225
+
226
+ &.md-columns-12 {
227
+ grid-template-columns: repeat(12, 1fr);
228
+ }
229
+ }
230
+
231
+ @media only screen and (min-width: 1042px) {
232
+ &.lg-columns-1 {
233
+ grid-template-columns: repeat(1, 1fr);
234
+ }
235
+
236
+ &.lg-columns-2 {
237
+ grid-template-columns: repeat(2, 1fr);
238
+ }
239
+
240
+ &.lg-columns-3 {
241
+ grid-template-columns: repeat(3, 1fr);
242
+ }
243
+
244
+ &.lg-columns-4 {
245
+ grid-template-columns: repeat(4, 1fr);
246
+ }
247
+
248
+ &.lg-columns-5 {
249
+ grid-template-columns: repeat(5, 1fr);
250
+ }
251
+
252
+ &.lg-columns-6 {
253
+ grid-template-columns: repeat(6, 1fr);
254
+ }
255
+
256
+ &.lg-columns-7 {
257
+ grid-template-columns: repeat(7, 1fr);
258
+ }
259
+
260
+ &.lg-columns-8 {
261
+ grid-template-columns: repeat(8, 1fr);
262
+ }
263
+
264
+ &.lg-columns-9 {
265
+ grid-template-columns: repeat(9, 1fr);
266
+ }
267
+
268
+ &.lg-columns-10 {
269
+ grid-template-columns: repeat(10, 1fr);
270
+ }
271
+
272
+ &.lg-columns-11 {
273
+ grid-template-columns: repeat(11, 1fr);
274
+ }
275
+
276
+ &.lg-columns-12 {
277
+ grid-template-columns: repeat(12, 1fr);
278
+ }
279
+ }
280
+
281
+ @media only screen and (min-width: 1250px) {
282
+ &.xl-columns-1 {
283
+ grid-template-columns: repeat(1, 1fr);
284
+ }
285
+
286
+ &.xl-columns-2 {
287
+ grid-template-columns: repeat(2, 1fr);
288
+ }
289
+
290
+ &.xl-columns-3 {
291
+ grid-template-columns: repeat(3, 1fr);
292
+ }
293
+
294
+ &.xl-columns-4 {
295
+ grid-template-columns: repeat(4, 1fr);
296
+ }
297
+
298
+ &.xl-columns-5 {
299
+ grid-template-columns: repeat(5, 1fr);
300
+ }
301
+
302
+ &.xl-columns-6 {
303
+ grid-template-columns: repeat(6, 1fr);
304
+ }
305
+
306
+ &.xl-columns-7 {
307
+ grid-template-columns: repeat(7, 1fr);
308
+ }
309
+
310
+ &.xl-columns-8 {
311
+ grid-template-columns: repeat(8, 1fr);
312
+ }
313
+
314
+ &.xl-columns-9 {
315
+ grid-template-columns: repeat(9, 1fr);
316
+ }
317
+
318
+ &.xl-columns-10 {
319
+ grid-template-columns: repeat(10, 1fr);
320
+ }
321
+
322
+ &.xl-columns-11 {
323
+ grid-template-columns: repeat(11, 1fr);
324
+ }
325
+
326
+ &.xl-columns-12 {
327
+ grid-template-columns: repeat(12, 1fr);
328
+ }
329
+ }
330
+ }
331
+
332
+ :global(.naut-grid.border > .naut-grid-item) {
333
+ background-color: var(--naut-color-base);
334
+ }
335
+ </style>
@@ -0,0 +1,225 @@
1
+ ---
2
+ import type { Base } from "../types";
3
+ import { type Columns, ResponsiveColumns } from "./Grid.astro";
4
+
5
+ export interface GridItemProps extends Base {
6
+ span?: Columns | ResponsiveColumns;
7
+ }
8
+
9
+ const { class: className, span, ...rest } = Astro.props as GridItemProps;
10
+
11
+ const col = typeof span === "number" ? { base: span } : span || {};
12
+ ---
13
+
14
+ <div
15
+ class:list={[
16
+ "naut-grid-item",
17
+ col?.base && `span-${col.base}`,
18
+ col?.sm && `sm-span-${col.sm}`,
19
+ col?.md && `md-span-${col.md}`,
20
+ col?.lg && `lg-span-${col.lg}`,
21
+ col?.xl && `xl-span-${col.xl}`,
22
+ className
23
+ ]}
24
+ {...rest}
25
+ >
26
+ <slot />
27
+ </div>
28
+
29
+ <style>
30
+ .naut-grid-item {
31
+ grid-column: auto;
32
+ &.span-1 {
33
+ grid-column: span 1 / span 1;
34
+ }
35
+ &.span-2 {
36
+ grid-column: span 2 / span 2;
37
+ }
38
+ &.span-3 {
39
+ grid-column: span 3 / span 3;
40
+ }
41
+ &.span-4 {
42
+ grid-column: span 4 / span 4;
43
+ }
44
+ &.span-5 {
45
+ grid-column: span 5 / span 5;
46
+ }
47
+ &.span-6 {
48
+ grid-column: span 6 / span 6;
49
+ }
50
+ &.span-7 {
51
+ grid-column: span 7 / span 7;
52
+ }
53
+ &.span-8 {
54
+ grid-column: span 8 / span 8;
55
+ }
56
+ &.span-9 {
57
+ grid-column: span 9 / span 9;
58
+ }
59
+ &.span-10 {
60
+ grid-column: span 10 / span 10;
61
+ }
62
+ &.span-11 {
63
+ grid-column: span 11 / span 11;
64
+ }
65
+ &.span-12 {
66
+ grid-column: span 12 / span 12;
67
+ }
68
+
69
+ @media only screen and (max-width: 817px) {
70
+ &.sm-span-1 {
71
+ grid-column: span 1 / span 1;
72
+ }
73
+ &.sm-span-2 {
74
+ grid-column: span 2 / span 2;
75
+ }
76
+ &.sm-span-3 {
77
+ grid-column: span 3 / span 3;
78
+ }
79
+ &.sm-span-4 {
80
+ grid-column: span 4 / span 4;
81
+ }
82
+ &.sm-span-5 {
83
+ grid-column: span 5 / span 5;
84
+ }
85
+ &.sm-span-6 {
86
+ grid-column: span 6 / span 6;
87
+ }
88
+ &.sm-span-7 {
89
+ grid-column: span 7 / span 7;
90
+ }
91
+ &.sm-span-8 {
92
+ grid-column: span 8 / span 8;
93
+ }
94
+ &.sm-span-9 {
95
+ grid-column: span 9 / span 9;
96
+ }
97
+ &.sm-span-10 {
98
+ grid-column: span 10 / span 10;
99
+ }
100
+ &.sm-span-11 {
101
+ grid-column: span 11 / span 11;
102
+ }
103
+ &.sm-span-12 {
104
+ grid-column: span 12 / span 12;
105
+ }
106
+ }
107
+
108
+ @media only screen and (min-width: 818px) and (max-width: 1041px) {
109
+ &.md-span-1 {
110
+ grid-column: span 1 / span 1;
111
+ }
112
+ &.md-span-2 {
113
+ grid-column: span 2 / span 2;
114
+ }
115
+ &.md-span-3 {
116
+ grid-column: span 3 / span 3;
117
+ }
118
+ &.md-span-4 {
119
+ grid-column: span 4 / span 4;
120
+ }
121
+ &.md-span-5 {
122
+ grid-column: span 5 / span 5;
123
+ }
124
+ &.md-span-6 {
125
+ grid-column: span 6 / span 6;
126
+ }
127
+ &.md-span-7 {
128
+ grid-column: span 7 / span 7;
129
+ }
130
+ &.md-span-8 {
131
+ grid-column: span 8 / span 8;
132
+ }
133
+ &.md-span-9 {
134
+ grid-column: span 9 / span 9;
135
+ }
136
+ &.md-span-10 {
137
+ grid-column: span 10 / span 10;
138
+ }
139
+ &.md-span-11 {
140
+ grid-column: span 11 / span 11;
141
+ }
142
+ &.md-span-12 {
143
+ grid-column: span 12 / span 12;
144
+ }
145
+ }
146
+
147
+ @media only screen and (min-width: 1042px) {
148
+ &.lg-span-1 {
149
+ grid-column: span 1 / span 1;
150
+ }
151
+ &.lg-span-2 {
152
+ grid-column: span 2 / span 2;
153
+ }
154
+ &.lg-span-3 {
155
+ grid-column: span 3 / span 3;
156
+ }
157
+ &.lg-span-4 {
158
+ grid-column: span 4 / span 4;
159
+ }
160
+ &.lg-span-5 {
161
+ grid-column: span 5 / span 5;
162
+ }
163
+ &.lg-span-6 {
164
+ grid-column: span 6 / span 6;
165
+ }
166
+ &.lg-span-7 {
167
+ grid-column: span 7 / span 7;
168
+ }
169
+ &.lg-span-8 {
170
+ grid-column: span 8 / span 8;
171
+ }
172
+ &.lg-span-9 {
173
+ grid-column: span 9 / span 9;
174
+ }
175
+ &.lg-span-10 {
176
+ grid-column: span 10 / span 10;
177
+ }
178
+ &.lg-span-11 {
179
+ grid-column: span 11 / span 11;
180
+ }
181
+ &.lg-span-12 {
182
+ grid-column: span 12 / span 12;
183
+ }
184
+ }
185
+
186
+ @media only screen and (min-width: 1250px) {
187
+ &.xl-span-1 {
188
+ grid-column: span 1 / span 1;
189
+ }
190
+ &.xl-span-2 {
191
+ grid-column: span 2 / span 2;
192
+ }
193
+ &.xl-span-3 {
194
+ grid-column: span 3 / span 3;
195
+ }
196
+ &.xl-span-4 {
197
+ grid-column: span 4 / span 4;
198
+ }
199
+ &.xl-span-5 {
200
+ grid-column: span 5 / span 5;
201
+ }
202
+ &.xl-span-6 {
203
+ grid-column: span 6 / span 6;
204
+ }
205
+ &.xl-span-7 {
206
+ grid-column: span 7 / span 7;
207
+ }
208
+ &.xl-span-8 {
209
+ grid-column: span 8 / span 8;
210
+ }
211
+ &.xl-span-9 {
212
+ grid-column: span 9 / span 9;
213
+ }
214
+ &.xl-span-10 {
215
+ grid-column: span 10 / span 10;
216
+ }
217
+ &.xl-span-11 {
218
+ grid-column: span 11 / span 11;
219
+ }
220
+ &.xl-span-12 {
221
+ grid-column: span 12 / span 12;
222
+ }
223
+ }
224
+ }
225
+ </style>