@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,108 @@
1
+ ---
2
+ import "../styles/spacing/padding.css";
3
+ import "../styles/border.css";
4
+ import { Border, createBorder } from "../lib/border";
5
+ import {
6
+ extractSpacingProps,
7
+ getSpacingClasses,
8
+ PaddingProps,
9
+ } from "../lib/spacing";
10
+ import type { Base } from "../types";
11
+
12
+ export interface SectionProps extends Base, PaddingProps {
13
+ as?: "div" | "section" | "article" | "main" | "header" | "footer";
14
+ border?: Border;
15
+ dark?: boolean;
16
+ }
17
+
18
+ const { padding, nonSpacing } = extractSpacingProps(
19
+ Astro.props as SectionProps
20
+ );
21
+
22
+ const { class: className, border, cross, dark = false, ...rest } = nonSpacing;
23
+ const p = Object.keys(padding).length === 0 ? "md" : padding.p;
24
+ const paddingClasses = getSpacingClasses({ ...padding, p });
25
+
26
+ const borderConfig =
27
+ typeof border === "string" ? { width: border } : border || {};
28
+ const { borderClasses, borderColors } = createBorder(borderConfig);
29
+ ---
30
+
31
+ <section
32
+ class:list={[
33
+ "naut-section",
34
+ dark && "dark",
35
+ ...borderClasses,
36
+ className,
37
+ ]}
38
+ {...rest}
39
+ >
40
+ <slot name="background" />
41
+ <slot name="before" />
42
+ <div class="naut-section--wrapper">
43
+ <div class="naut-section--left"><slot name="left" /></div>
44
+ <div class="naut-section--center">
45
+ <div class:list={["naut-section--content", ...paddingClasses]}>
46
+ <slot />
47
+ </div>
48
+ </div>
49
+ <div class="naut-section--right"><slot name="right" /></div>
50
+ </div>
51
+ <slot name="after" />
52
+ </section>
53
+
54
+ <style define:vars={{ ...borderColors }}>
55
+ .naut-section {
56
+ position: relative;
57
+
58
+ .naut-section--wrapper {
59
+ position: relative;
60
+ z-index: 1;
61
+ display: flex;
62
+
63
+ .naut-section--left,
64
+ .naut-section--right {
65
+ position: relative;
66
+ display: flex;
67
+ @media only screen and (min-width: 576px) {
68
+ flex-grow: 1;
69
+ }
70
+ }
71
+
72
+ .naut-section--left {
73
+ justify-content: flex-end;
74
+ }
75
+
76
+ .naut-section--right {
77
+ justify-content: flex-start;
78
+ }
79
+
80
+ .naut-section--center {
81
+ flex: 1;
82
+ overflow: hidden;
83
+
84
+ /*Mobile*/
85
+ @media only screen and (min-width: 576px) {
86
+ flex: 1 1 100%;
87
+ max-width: 576px;
88
+ margin: 0 auto;
89
+ }
90
+
91
+ /* Tablet */
92
+ @media only screen and (min-width: 818px) and (max-width: 1041px) {
93
+ max-width: 768px;
94
+ }
95
+
96
+ /* Desktop */
97
+ @media only screen and (min-width: 1042px) and (max-width: 1249px) {
98
+ max-width: 992px;
99
+ }
100
+
101
+ /* Large Desktop */
102
+ @media only screen and (min-width: 1250px) {
103
+ max-width: 1200px;
104
+ }
105
+ }
106
+ }
107
+ }
108
+ </style>
@@ -0,0 +1,400 @@
1
+ ---
2
+ import "../styles/spacing/display.css";
3
+ import { Base, Responsive, Size } from "../types";
4
+
5
+ type SpaceSize =
6
+ | "auto"
7
+ | Size
8
+ | "display"
9
+ | "display-lg"
10
+ | "display-xl"
11
+ | "full";
12
+
13
+ type ResponsiveSize = {
14
+ [key in Responsive]?: SpaceSize;
15
+ };
16
+
17
+ export interface SpaceProps extends Base {
18
+ grow?: boolean;
19
+ orientation?: "horizontal" | "vertical";
20
+ size?: ResponsiveSize;
21
+ }
22
+
23
+ const {
24
+ class: className,
25
+ orientation = "vertical",
26
+ grow = false,
27
+ size = "md",
28
+ } = Astro.props as SpaceProps;
29
+ const measure = orientation === "vertical" ? "height" : "width";
30
+ const spaceSize =
31
+ typeof size === "string" ? ({ base: size } as ResponsiveSize) : size;
32
+ const classlist = [
33
+ "naut-space",
34
+ orientation,
35
+ spaceSize?.base && `size-${spaceSize.base}`,
36
+ spaceSize?.sm && `sm-size-${spaceSize.sm}`,
37
+ spaceSize?.md && `md-size-${spaceSize.md}`,
38
+ spaceSize?.lg && `lg-size-${spaceSize.lg}`,
39
+ spaceSize?.xl && `xl-size-${spaceSize.xl}`,
40
+ grow && "grow",
41
+ ];
42
+ ---
43
+
44
+ <div class:list={classlist}><slot /></div>
45
+
46
+ <style>
47
+ .naut-space {
48
+ position: relative;
49
+ box-sizing: border-box;
50
+
51
+ &.grow {
52
+ flex-grow: 1;
53
+ }
54
+
55
+ &:not(.horizontal) {
56
+ &.size-auto {
57
+ height: auto;
58
+ }
59
+
60
+ &.size-sm {
61
+ height: var(--naut-spacing-sm);
62
+ }
63
+
64
+ &.size-md {
65
+ height: var(--naut-spacing-md);
66
+ }
67
+
68
+ &.size-lg {
69
+ height: var(--naut-spacing-lg);
70
+ }
71
+
72
+ &.size-xl {
73
+ height: var(--naut-spacing-xl);
74
+ }
75
+
76
+ &.size-display {
77
+ height: var(--naut-spacing-display);
78
+ }
79
+
80
+ &.size-display-lg {
81
+ height: var(--naut-spacing-display-lg);
82
+ }
83
+
84
+ &.size-display-xl {
85
+ height: var(--naut-spacing-display-xl);
86
+ }
87
+
88
+ @media only screen and (max-width: 817px) {
89
+ &.sm-size-auto {
90
+ height: auto;
91
+ }
92
+
93
+ &.sm-size-sm {
94
+ height: var(--naut-spacing-sm);
95
+ }
96
+
97
+ &.sm-size-md {
98
+ height: var(--naut-spacing-md);
99
+ }
100
+
101
+ &.sm-size-lg {
102
+ height: var(--naut-spacing-lg);
103
+ }
104
+
105
+ &.sm-size-xl {
106
+ height: var(--naut-spacing-xl);
107
+ }
108
+
109
+ &.sm-size-display {
110
+ height: var(--naut-spacing-display);
111
+ }
112
+
113
+ &.sm-size-display-lg {
114
+ height: var(--naut-spacing-display-lg);
115
+ }
116
+
117
+ &.sm-size-display-xl {
118
+ height: var(--naut-spacing-display-xl);
119
+ }
120
+ }
121
+
122
+ @media only screen and (min-width: 818px) and (max-width: 1041px) {
123
+ &.md-size-auto {
124
+ height: auto;
125
+ }
126
+
127
+ &.md-size-sm {
128
+ height: var(--naut-spacing-sm);
129
+ }
130
+
131
+ &.md-size-md {
132
+ height: var(--naut-spacing-md);
133
+ }
134
+
135
+ &.md-size-lg {
136
+ height: var(--naut-spacing-lg);
137
+ }
138
+
139
+ &.md-size-xl {
140
+ height: var(--naut-spacing-xl);
141
+ }
142
+
143
+ &.md-size-display {
144
+ height: var(--naut-spacing-display);
145
+ }
146
+
147
+ &.md-size-display-lg {
148
+ height: var(--naut-spacing-display-lg);
149
+ }
150
+
151
+ &.md-size-display-xl {
152
+ height: var(--naut-spacing-display-xl);
153
+ }
154
+ }
155
+
156
+ @media only screen and (min-width: 1042px) {
157
+ &.lg-size-auto {
158
+ height: auto;
159
+ }
160
+
161
+ &.lg-size-sm {
162
+ height: var(--naut-spacing-sm);
163
+ }
164
+
165
+ &.lg-size-md {
166
+ height: var(--naut-spacing-md);
167
+ }
168
+
169
+ &.lg-size-lg {
170
+ height: var(--naut-spacing-lg);
171
+ }
172
+
173
+ &.lg-size-xl {
174
+ height: var(--naut-spacing-xl);
175
+ }
176
+
177
+ &.lg-size-display {
178
+ height: var(--naut-spacing-display);
179
+ }
180
+
181
+ &.lg-size-display-lg {
182
+ height: var(--naut-spacing-display-lg);
183
+ }
184
+
185
+ &.lg-size-display-xl {
186
+ height: var(--naut-spacing-display-xl);
187
+ }
188
+ }
189
+
190
+ @media only screen and (min-width: 1250px) {
191
+ &.xl-size-auto {
192
+ height: auto;
193
+ }
194
+
195
+ &.xl-size-sm {
196
+ height: var(--naut-spacing-sm);
197
+ }
198
+
199
+ &.xl-size-md {
200
+ height: var(--naut-spacing-md);
201
+ }
202
+
203
+ &.xl-size-lg {
204
+ height: var(--naut-spacing-lg);
205
+ }
206
+
207
+ &.xl-size-xl {
208
+ height: var(--naut-spacing-xl);
209
+ }
210
+
211
+ &.xl-size-display {
212
+ height: var(--naut-spacing-display);
213
+ }
214
+
215
+ &.xl-size-display-lg {
216
+ height: var(--naut-spacing-display-lg);
217
+ }
218
+
219
+ &.xl-size-display-xl {
220
+ height: var(--naut-spacing-display-xl);
221
+ }
222
+ }
223
+ }
224
+
225
+ &.horizontal {
226
+ display: inline-block;
227
+ &.size-auto {
228
+ width: auto;
229
+ }
230
+
231
+ &.size-full {
232
+ width: 100%;
233
+ }
234
+
235
+ &.size-sm {
236
+ width: var(--naut-spacing-sm);
237
+ }
238
+
239
+ &.size-md {
240
+ width: var(--naut-spacing-md);
241
+ }
242
+
243
+ &.size-lg {
244
+ width: var(--naut-spacing-lg);
245
+ }
246
+
247
+ &.size-xl {
248
+ width: var(--naut-spacing-xl);
249
+ }
250
+
251
+ &.size-display {
252
+ width: var(--naut-spacing-display);
253
+ }
254
+
255
+ &.size-display-lg {
256
+ width: var(--naut-spacing-display-lg);
257
+ }
258
+
259
+ &.size-display-xl {
260
+ width: var(--naut-spacing-display-xl);
261
+ }
262
+
263
+ @media only screen and (max-width: 817px) {
264
+ &.sm-size-auto {
265
+ width: auto;
266
+ }
267
+
268
+ &.sm-size-sm {
269
+ width: var(--naut-spacing-sm);
270
+ }
271
+
272
+ &.sm-size-md {
273
+ width: var(--naut-spacing-md);
274
+ }
275
+
276
+ &.sm-size-lg {
277
+ width: var(--naut-spacing-lg);
278
+ }
279
+
280
+ &.sm-size-xl {
281
+ width: var(--naut-spacing-xl);
282
+ }
283
+
284
+ &.sm-size-display {
285
+ width: var(--naut-spacing-display);
286
+ }
287
+
288
+ &.sm-size-display-lg {
289
+ width: var(--naut-spacing-display-lg);
290
+ }
291
+
292
+ &.sm-size-display-xl {
293
+ width: var(--naut-spacing-display-xl);
294
+ }
295
+ }
296
+
297
+ @media only screen and (min-width: 818px) and (max-width: 1041px) {
298
+ &.md-size-auto {
299
+ width: auto;
300
+ }
301
+
302
+ &.md-size-sm {
303
+ width: var(--naut-spacing-sm);
304
+ }
305
+
306
+ &.md-size-md {
307
+ width: var(--naut-spacing-md);
308
+ }
309
+
310
+ &.md-size-lg {
311
+ width: var(--naut-spacing-lg);
312
+ }
313
+
314
+ &.md-size-xl {
315
+ width: var(--naut-spacing-xl);
316
+ }
317
+
318
+ &.md-size-display {
319
+ width: var(--naut-spacing-display);
320
+ }
321
+
322
+ &.md-size-display-lg {
323
+ width: var(--naut-spacing-display-lg);
324
+ }
325
+
326
+ &.md-size-display-xl {
327
+ width: var(--naut-spacing-display-xl);
328
+ }
329
+ }
330
+
331
+ @media only screen and (min-width: 1042px) {
332
+ &.lg-size-auto {
333
+ width: auto;
334
+ }
335
+
336
+ &.lg-size-sm {
337
+ width: var(--naut-spacing-sm);
338
+ }
339
+
340
+ &.lg-size-md {
341
+ width: var(--naut-spacing-md);
342
+ }
343
+
344
+ &.lg-size-lg {
345
+ width: var(--naut-spacing-lg);
346
+ }
347
+
348
+ &.lg-size-xl {
349
+ width: var(--naut-spacing-xl);
350
+ }
351
+
352
+ &.lg-size-display {
353
+ width: var(--naut-spacing-display);
354
+ }
355
+
356
+ &.lg-size-display-lg {
357
+ width: var(--naut-spacing-display-lg);
358
+ }
359
+
360
+ &.lg-size-display-xl {
361
+ width: var(--naut-spacing-display-xl);
362
+ }
363
+ }
364
+
365
+ @media only screen and (min-width: 1250px) {
366
+ &.xl-size-auto {
367
+ width: auto;
368
+ }
369
+
370
+ &.xl-size-sm {
371
+ width: var(--naut-spacing-sm);
372
+ }
373
+
374
+ &.xl-size-md {
375
+ width: var(--naut-spacing-md);
376
+ }
377
+
378
+ &.xl-size-lg {
379
+ width: var(--naut-spacing-lg);
380
+ }
381
+
382
+ &.xl-size-xl {
383
+ width: var(--naut-spacing-xl);
384
+ }
385
+
386
+ &.xl-size-display {
387
+ width: var(--naut-spacing-display);
388
+ }
389
+
390
+ &.xl-size-display-lg {
391
+ width: var(--naut-spacing-display-lg);
392
+ }
393
+
394
+ &.xl-size-display-xl {
395
+ width: var(--naut-spacing-display-xl);
396
+ }
397
+ }
398
+ }
399
+ }
400
+ </style>