@shortwind/catalog 0.1.0-beta.3
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/dist/expand.js +3 -0
- package/dist/expand@0.0.1.js +3 -0
- package/dist/registry/badge/CHANGELOG.md +5 -0
- package/dist/registry/badge.css +44 -0
- package/dist/registry/badge@0.0.1.css +44 -0
- package/dist/registry/button/CHANGELOG.md +5 -0
- package/dist/registry/button.css +74 -0
- package/dist/registry/button@0.0.1.css +74 -0
- package/dist/registry/card/CHANGELOG.md +5 -0
- package/dist/registry/card.css +43 -0
- package/dist/registry/card@0.0.1.css +43 -0
- package/dist/registry/code/CHANGELOG.md +5 -0
- package/dist/registry/code.css +22 -0
- package/dist/registry/code@0.0.1.css +22 -0
- package/dist/registry/dialog/CHANGELOG.md +5 -0
- package/dist/registry/dialog.css +33 -0
- package/dist/registry/dialog@0.0.1.css +33 -0
- package/dist/registry/empty/CHANGELOG.md +5 -0
- package/dist/registry/empty.css +27 -0
- package/dist/registry/empty@0.0.1.css +27 -0
- package/dist/registry/feedback/CHANGELOG.md +5 -0
- package/dist/registry/feedback.css +47 -0
- package/dist/registry/feedback@0.0.1.css +47 -0
- package/dist/registry/form/CHANGELOG.md +5 -0
- package/dist/registry/form.css +67 -0
- package/dist/registry/form@0.0.1.css +67 -0
- package/dist/registry/icon/CHANGELOG.md +5 -0
- package/dist/registry/icon.css +27 -0
- package/dist/registry/icon@0.0.1.css +27 -0
- package/dist/registry/index.json +23 -0
- package/dist/registry/layout/CHANGELOG.md +5 -0
- package/dist/registry/layout.css +70 -0
- package/dist/registry/layout@0.0.1.css +70 -0
- package/dist/registry/list/CHANGELOG.md +5 -0
- package/dist/registry/list.css +37 -0
- package/dist/registry/list@0.0.1.css +37 -0
- package/dist/registry/manifest.json +1867 -0
- package/dist/registry/media/CHANGELOG.md +5 -0
- package/dist/registry/media.css +37 -0
- package/dist/registry/media@0.0.1.css +37 -0
- package/dist/registry/navigation/CHANGELOG.md +5 -0
- package/dist/registry/navigation.css +38 -0
- package/dist/registry/navigation@0.0.1.css +38 -0
- package/dist/registry/presets.json +6 -0
- package/dist/registry/progress/CHANGELOG.md +5 -0
- package/dist/registry/progress.css +22 -0
- package/dist/registry/progress@0.0.1.css +22 -0
- package/dist/registry/recipes/badge.css +44 -0
- package/dist/registry/recipes/button.css +74 -0
- package/dist/registry/recipes/card.css +43 -0
- package/dist/registry/recipes/code.css +22 -0
- package/dist/registry/recipes/dialog.css +33 -0
- package/dist/registry/recipes/empty.css +27 -0
- package/dist/registry/recipes/feedback.css +47 -0
- package/dist/registry/recipes/form.css +67 -0
- package/dist/registry/recipes/icon.css +27 -0
- package/dist/registry/recipes/layout.css +70 -0
- package/dist/registry/recipes/list.css +37 -0
- package/dist/registry/recipes/media.css +37 -0
- package/dist/registry/recipes/navigation.css +38 -0
- package/dist/registry/recipes/progress.css +22 -0
- package/dist/registry/recipes/skeleton.css +22 -0
- package/dist/registry/recipes/surface.css +45 -0
- package/dist/registry/recipes/table.css +37 -0
- package/dist/registry/recipes/text.css +59 -0
- package/dist/registry/recipes/tooltip.css +11 -0
- package/dist/registry/skeleton/CHANGELOG.md +5 -0
- package/dist/registry/skeleton.css +22 -0
- package/dist/registry/skeleton@0.0.1.css +22 -0
- package/dist/registry/surface/CHANGELOG.md +5 -0
- package/dist/registry/surface.css +45 -0
- package/dist/registry/surface@0.0.2.css +45 -0
- package/dist/registry/table/CHANGELOG.md +5 -0
- package/dist/registry/table.css +37 -0
- package/dist/registry/table@0.0.1.css +37 -0
- package/dist/registry/text/CHANGELOG.md +5 -0
- package/dist/registry/text.css +59 -0
- package/dist/registry/text@0.0.1.css +59 -0
- package/dist/registry/tooltip/CHANGELOG.md +5 -0
- package/dist/registry/tooltip.css +11 -0
- package/dist/registry/tooltip@0.0.1.css +11 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* shortwind: layout@0.0.1 sha:48a2a7b6e1a5d7ad */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Composition primitives. @stack-* stacks children vertically (flex-col);
|
|
5
|
+
@row* lays them out horizontally (flex-row). Choose the gap with the size
|
|
6
|
+
suffix (xs/sm/md/lg on stacks). Use @grid-2/3/4 only for true multi-column
|
|
7
|
+
grids, @center to center on both axes, @full to fill the parent. Common
|
|
8
|
+
slips: there is no @flex-row (use @row) or @flex-col (use a @stack-*), and
|
|
9
|
+
the grids are @grid-3, not @grid-cols-3.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/* Vertical stack with extra-small gap. */
|
|
13
|
+
@recipe stack-xs {
|
|
14
|
+
flex flex-col gap-1
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Vertical stack with small gap. */
|
|
18
|
+
@recipe stack-sm {
|
|
19
|
+
flex flex-col gap-2
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Vertical stack with medium gap. */
|
|
23
|
+
@recipe stack-md {
|
|
24
|
+
flex flex-col gap-4
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Vertical stack with large gap. */
|
|
28
|
+
@recipe stack-lg {
|
|
29
|
+
flex flex-col gap-8
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Horizontal row with default gap and centered items. */
|
|
33
|
+
@recipe row {
|
|
34
|
+
flex flex-row items-center gap-2
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Horizontal row with space between children. */
|
|
38
|
+
@recipe row-between {
|
|
39
|
+
flex flex-row items-center justify-between gap-2
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Horizontal row aligned to the end. */
|
|
43
|
+
@recipe row-end {
|
|
44
|
+
flex flex-row items-center justify-end gap-2
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Two-column responsive grid. */
|
|
48
|
+
@recipe grid-2 {
|
|
49
|
+
grid grid-cols-1 gap-4 sm:grid-cols-2
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Three-column responsive grid. */
|
|
53
|
+
@recipe grid-3 {
|
|
54
|
+
grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Four-column responsive grid. */
|
|
58
|
+
@recipe grid-4 {
|
|
59
|
+
grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Center content horizontally and vertically. */
|
|
63
|
+
@recipe center {
|
|
64
|
+
flex items-center justify-center
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Fill the available width and height. */
|
|
68
|
+
@recipe full {
|
|
69
|
+
h-full w-full
|
|
70
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* shortwind: list@0.0.1 sha:f662887791fabb8d */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
@list wraps a stack of @list-item rows; use @list-bordered for divided rows.
|
|
5
|
+
Definition lists are separate: @dl with @dt (term) and @dd (description).
|
|
6
|
+
For site navigation reach for the navigation family (@nav), not @list.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Vertical list with default gap. */
|
|
10
|
+
@recipe list {
|
|
11
|
+
flex flex-col gap-1
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Single list item. */
|
|
15
|
+
@recipe list-item {
|
|
16
|
+
flex items-center gap-2 rounded-md px-3 py-2 text-sm text-foreground
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* List with dividing borders between items. */
|
|
20
|
+
@recipe list-bordered {
|
|
21
|
+
divide-y divide-border rounded-md border border-border
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Definition list container. */
|
|
25
|
+
@recipe dl {
|
|
26
|
+
grid grid-cols-1 gap-2 sm:grid-cols-3 sm:gap-4
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Definition term. */
|
|
30
|
+
@recipe dt {
|
|
31
|
+
text-sm font-medium text-muted-foreground
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Definition description. */
|
|
35
|
+
@recipe dd {
|
|
36
|
+
text-sm text-foreground sm:col-span-2
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* shortwind: media@0.0.1 sha:dfc85633101b0637 */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
@avatar (with @avatar-sm/lg) is a round user image; @thumb is a small square
|
|
5
|
+
thumbnail. For responsive embeds use @aspect-square or @aspect-video. Avatars
|
|
6
|
+
are circular by default — don't restyle the radius.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* User/profile avatar. */
|
|
10
|
+
@recipe avatar {
|
|
11
|
+
inline-flex h-10 w-10 items-center justify-center overflow-hidden rounded-full bg-muted text-sm font-medium text-muted-foreground
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Small avatar. */
|
|
15
|
+
@recipe avatar-sm {
|
|
16
|
+
@avatar h-6 w-6 text-xs
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Large avatar. */
|
|
20
|
+
@recipe avatar-lg {
|
|
21
|
+
@avatar h-14 w-14 text-base
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Small image thumbnail. */
|
|
25
|
+
@recipe thumb {
|
|
26
|
+
h-16 w-16 rounded-md object-cover
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* 1:1 aspect-ratio wrapper. */
|
|
30
|
+
@recipe aspect-square {
|
|
31
|
+
aspect-square w-full overflow-hidden rounded-md
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* 16:9 aspect-ratio wrapper. */
|
|
35
|
+
@recipe aspect-video {
|
|
36
|
+
aspect-video w-full overflow-hidden rounded-md
|
|
37
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* shortwind: navigation@0.0.1 sha:73150057219b648a */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
@nav is the container; links are @nav-link with @nav-link-active for the
|
|
5
|
+
current page. Tabs mirror that pair: @tab and @tab-active. Use @breadcrumb
|
|
6
|
+
for trail navigation. Active and inactive are separate recipes — swap the
|
|
7
|
+
whole class rather than combining them.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/* Top-level nav container. */
|
|
11
|
+
@recipe nav {
|
|
12
|
+
flex items-center gap-1
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Inactive nav link with hover/focus states. */
|
|
16
|
+
@recipe nav-link {
|
|
17
|
+
inline-flex items-center gap-2 rounded-md px-3 py-1.5 text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Active nav link. */
|
|
21
|
+
@recipe nav-link-active {
|
|
22
|
+
inline-flex items-center gap-2 rounded-md bg-muted px-3 py-1.5 text-sm font-medium text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* Breadcrumb trail container. */
|
|
26
|
+
@recipe breadcrumb {
|
|
27
|
+
flex items-center gap-1.5 text-sm text-muted-foreground
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Inactive tab control. */
|
|
31
|
+
@recipe tab {
|
|
32
|
+
inline-flex items-center gap-2 border-b-2 border-transparent px-3 py-2 text-sm font-medium text-muted-foreground transition-colors hover:border-border hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Active tab control. */
|
|
36
|
+
@recipe tab-active {
|
|
37
|
+
inline-flex items-center gap-2 border-b-2 border-primary px-3 py-2 text-sm font-medium text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring
|
|
38
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* shortwind: progress@0.0.1 sha:37210e32d2cd555f */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
A bar is two pieces: @progress-track (the background) wrapping @progress-bar
|
|
5
|
+
(the fill). For an indeterminate state use @spinner instead — it's a
|
|
6
|
+
standalone loader, not a bar.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Progress bar track (background). */
|
|
10
|
+
@recipe progress-track {
|
|
11
|
+
h-2 w-full overflow-hidden rounded-full bg-muted
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Progress bar fill. */
|
|
15
|
+
@recipe progress-bar {
|
|
16
|
+
h-full rounded-full bg-primary transition-all
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Indeterminate loading spinner. */
|
|
20
|
+
@recipe spinner {
|
|
21
|
+
inline-block h-4 w-4 animate-spin rounded-full border-2 border-border border-t-primary
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* shortwind: skeleton@0.0.1 sha:cd2db5c1c48b16d3 */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Match the skeleton to the shape it stands in for: @skeleton (block),
|
|
5
|
+
@skeleton-text (a text line), @skeleton-circle (avatar/icon). Size block and
|
|
6
|
+
text skeletons with raw width/height utilities.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Default rectangular skeleton placeholder. */
|
|
10
|
+
@recipe skeleton {
|
|
11
|
+
animate-pulse rounded-md bg-muted
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Single-line text skeleton. */
|
|
15
|
+
@recipe skeleton-text {
|
|
16
|
+
h-4 w-full animate-pulse rounded bg-muted
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Circular skeleton (avatar/icon). */
|
|
20
|
+
@recipe skeleton-circle {
|
|
21
|
+
h-10 w-10 animate-pulse rounded-full bg-muted
|
|
22
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* shortwind: surface@0.0.2 sha:31716e4cbe81f93f */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
@surface / @surface-muted / @surface-accent set a background+foreground pair
|
|
5
|
+
for a region — one per section. @wrapper (or @wrapper-tight for prose)
|
|
6
|
+
centers and width-caps content; there is no @wrapper-lg, set a different cap
|
|
7
|
+
with max-w-* yourself. (Note: @container is reserved for Tailwind's
|
|
8
|
+
container-query utility, so the content wrapper is @wrapper.) @divider-h and
|
|
9
|
+
@divider-v are hairline rules.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/* Default page/section surface. */
|
|
13
|
+
@recipe surface {
|
|
14
|
+
bg-background text-foreground
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Muted surface — secondary background. */
|
|
18
|
+
@recipe surface-muted {
|
|
19
|
+
bg-muted text-foreground
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Accent surface — soft brand background. */
|
|
23
|
+
@recipe surface-accent {
|
|
24
|
+
bg-accent text-accent-foreground
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Centered content wrapper with a max width. */
|
|
28
|
+
@recipe wrapper {
|
|
29
|
+
mx-auto w-full max-w-6xl px-4 sm:px-6 lg:px-8
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Narrow content wrapper for prose. */
|
|
33
|
+
@recipe wrapper-tight {
|
|
34
|
+
mx-auto w-full max-w-3xl px-4 sm:px-6
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Horizontal divider line. */
|
|
38
|
+
@recipe divider-h {
|
|
39
|
+
shrink-0 h-px w-full bg-border
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Vertical divider line. */
|
|
43
|
+
@recipe divider-v {
|
|
44
|
+
shrink-0 h-full w-px bg-border
|
|
45
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* shortwind: table@0.0.1 sha:4f3295935b2a647c */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Wrap the table in @table-container for horizontal overflow, then put @table
|
|
5
|
+
(or @table-zebra for striped rows) on the <table>. Cells are @th (header) and
|
|
6
|
+
@td (body); add @tr-hover to a <tr> for row highlighting.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Scroll container for a wide table — keeps overflow horizontal. */
|
|
10
|
+
@recipe table-container {
|
|
11
|
+
w-full overflow-x-auto rounded-md border border-border
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Data table base. */
|
|
15
|
+
@recipe table {
|
|
16
|
+
w-full border-collapse text-left text-sm text-foreground
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Table header cell. */
|
|
20
|
+
@recipe th {
|
|
21
|
+
border-b border-border px-3 py-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Table body cell. */
|
|
25
|
+
@recipe td {
|
|
26
|
+
border-b border-border px-3 py-2
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Row hover state. */
|
|
30
|
+
@recipe tr-hover {
|
|
31
|
+
transition-colors hover:bg-muted
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Table with zebra striping on alternating rows. */
|
|
35
|
+
@recipe table-zebra {
|
|
36
|
+
w-full border-collapse text-left text-sm text-foreground [&_tbody_tr:nth-child(odd)]:bg-muted
|
|
37
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/* shortwind: text@0.0.1 sha:9c5d7ed7b1e3ef5a */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Headings are sized by weight, not HTML level: @heading-xl/lg/md/sm — there
|
|
5
|
+
is no @h1..@h6. Body copy: @body (default), @lead (intro paragraphs), @muted
|
|
6
|
+
(secondary), @caption (fine print). Use @label for form labels and @link for
|
|
7
|
+
inline links. Don't append a -text suffix: it's @body not @body-text, @muted
|
|
8
|
+
not @muted-text, @link not @link-text.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* Top-level page heading. */
|
|
12
|
+
@recipe heading-xl {
|
|
13
|
+
text-4xl font-bold tracking-tight text-foreground
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Large section heading. */
|
|
17
|
+
@recipe heading-lg {
|
|
18
|
+
text-2xl font-semibold tracking-tight text-foreground
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Medium heading. */
|
|
22
|
+
@recipe heading-md {
|
|
23
|
+
text-xl font-semibold text-foreground
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* Small heading. */
|
|
27
|
+
@recipe heading-sm {
|
|
28
|
+
text-base font-semibold text-foreground
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* Default body text. */
|
|
32
|
+
@recipe body {
|
|
33
|
+
text-sm leading-6 text-foreground
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Lead paragraph — larger body copy for hero/intro sections. */
|
|
37
|
+
@recipe lead {
|
|
38
|
+
text-lg leading-relaxed text-muted-foreground
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Muted secondary text. */
|
|
42
|
+
@recipe muted {
|
|
43
|
+
text-sm text-muted-foreground
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Form label text. */
|
|
47
|
+
@recipe label {
|
|
48
|
+
text-sm font-medium text-foreground
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Caption — small supporting text. */
|
|
52
|
+
@recipe caption {
|
|
53
|
+
text-xs text-muted-foreground
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Inline link with hover/focus states. */
|
|
57
|
+
@recipe link {
|
|
58
|
+
text-primary underline-offset-2 hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring
|
|
59
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* shortwind: tooltip@0.0.1 sha:1be3af4165357dcd */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
@tooltip is the floating label bubble — it styles appearance only, so pair it
|
|
5
|
+
with your own positioning.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* Floating tooltip bubble. */
|
|
9
|
+
@recipe tooltip {
|
|
10
|
+
pointer-events-none z-50 rounded-md bg-foreground px-2 py-1 text-xs font-medium text-background shadow-md
|
|
11
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* shortwind: skeleton@0.0.1 sha:cd2db5c1c48b16d3 */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Match the skeleton to the shape it stands in for: @skeleton (block),
|
|
5
|
+
@skeleton-text (a text line), @skeleton-circle (avatar/icon). Size block and
|
|
6
|
+
text skeletons with raw width/height utilities.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Default rectangular skeleton placeholder. */
|
|
10
|
+
@recipe skeleton {
|
|
11
|
+
animate-pulse rounded-md bg-muted
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Single-line text skeleton. */
|
|
15
|
+
@recipe skeleton-text {
|
|
16
|
+
h-4 w-full animate-pulse rounded bg-muted
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Circular skeleton (avatar/icon). */
|
|
20
|
+
@recipe skeleton-circle {
|
|
21
|
+
h-10 w-10 animate-pulse rounded-full bg-muted
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* shortwind: skeleton@0.0.1 sha:cd2db5c1c48b16d3 */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Match the skeleton to the shape it stands in for: @skeleton (block),
|
|
5
|
+
@skeleton-text (a text line), @skeleton-circle (avatar/icon). Size block and
|
|
6
|
+
text skeletons with raw width/height utilities.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Default rectangular skeleton placeholder. */
|
|
10
|
+
@recipe skeleton {
|
|
11
|
+
animate-pulse rounded-md bg-muted
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Single-line text skeleton. */
|
|
15
|
+
@recipe skeleton-text {
|
|
16
|
+
h-4 w-full animate-pulse rounded bg-muted
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Circular skeleton (avatar/icon). */
|
|
20
|
+
@recipe skeleton-circle {
|
|
21
|
+
h-10 w-10 animate-pulse rounded-full bg-muted
|
|
22
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* shortwind: surface@0.0.2 sha:31716e4cbe81f93f */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
@surface / @surface-muted / @surface-accent set a background+foreground pair
|
|
5
|
+
for a region — one per section. @wrapper (or @wrapper-tight for prose)
|
|
6
|
+
centers and width-caps content; there is no @wrapper-lg, set a different cap
|
|
7
|
+
with max-w-* yourself. (Note: @container is reserved for Tailwind's
|
|
8
|
+
container-query utility, so the content wrapper is @wrapper.) @divider-h and
|
|
9
|
+
@divider-v are hairline rules.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/* Default page/section surface. */
|
|
13
|
+
@recipe surface {
|
|
14
|
+
bg-background text-foreground
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Muted surface — secondary background. */
|
|
18
|
+
@recipe surface-muted {
|
|
19
|
+
bg-muted text-foreground
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Accent surface — soft brand background. */
|
|
23
|
+
@recipe surface-accent {
|
|
24
|
+
bg-accent text-accent-foreground
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Centered content wrapper with a max width. */
|
|
28
|
+
@recipe wrapper {
|
|
29
|
+
mx-auto w-full max-w-6xl px-4 sm:px-6 lg:px-8
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Narrow content wrapper for prose. */
|
|
33
|
+
@recipe wrapper-tight {
|
|
34
|
+
mx-auto w-full max-w-3xl px-4 sm:px-6
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Horizontal divider line. */
|
|
38
|
+
@recipe divider-h {
|
|
39
|
+
shrink-0 h-px w-full bg-border
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Vertical divider line. */
|
|
43
|
+
@recipe divider-v {
|
|
44
|
+
shrink-0 h-full w-px bg-border
|
|
45
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* shortwind: surface@0.0.2 sha:31716e4cbe81f93f */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
@surface / @surface-muted / @surface-accent set a background+foreground pair
|
|
5
|
+
for a region — one per section. @wrapper (or @wrapper-tight for prose)
|
|
6
|
+
centers and width-caps content; there is no @wrapper-lg, set a different cap
|
|
7
|
+
with max-w-* yourself. (Note: @container is reserved for Tailwind's
|
|
8
|
+
container-query utility, so the content wrapper is @wrapper.) @divider-h and
|
|
9
|
+
@divider-v are hairline rules.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/* Default page/section surface. */
|
|
13
|
+
@recipe surface {
|
|
14
|
+
bg-background text-foreground
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Muted surface — secondary background. */
|
|
18
|
+
@recipe surface-muted {
|
|
19
|
+
bg-muted text-foreground
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Accent surface — soft brand background. */
|
|
23
|
+
@recipe surface-accent {
|
|
24
|
+
bg-accent text-accent-foreground
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Centered content wrapper with a max width. */
|
|
28
|
+
@recipe wrapper {
|
|
29
|
+
mx-auto w-full max-w-6xl px-4 sm:px-6 lg:px-8
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Narrow content wrapper for prose. */
|
|
33
|
+
@recipe wrapper-tight {
|
|
34
|
+
mx-auto w-full max-w-3xl px-4 sm:px-6
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Horizontal divider line. */
|
|
38
|
+
@recipe divider-h {
|
|
39
|
+
shrink-0 h-px w-full bg-border
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Vertical divider line. */
|
|
43
|
+
@recipe divider-v {
|
|
44
|
+
shrink-0 h-full w-px bg-border
|
|
45
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* shortwind: table@0.0.1 sha:4f3295935b2a647c */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Wrap the table in @table-container for horizontal overflow, then put @table
|
|
5
|
+
(or @table-zebra for striped rows) on the <table>. Cells are @th (header) and
|
|
6
|
+
@td (body); add @tr-hover to a <tr> for row highlighting.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Scroll container for a wide table — keeps overflow horizontal. */
|
|
10
|
+
@recipe table-container {
|
|
11
|
+
w-full overflow-x-auto rounded-md border border-border
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Data table base. */
|
|
15
|
+
@recipe table {
|
|
16
|
+
w-full border-collapse text-left text-sm text-foreground
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Table header cell. */
|
|
20
|
+
@recipe th {
|
|
21
|
+
border-b border-border px-3 py-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Table body cell. */
|
|
25
|
+
@recipe td {
|
|
26
|
+
border-b border-border px-3 py-2
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Row hover state. */
|
|
30
|
+
@recipe tr-hover {
|
|
31
|
+
transition-colors hover:bg-muted
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Table with zebra striping on alternating rows. */
|
|
35
|
+
@recipe table-zebra {
|
|
36
|
+
w-full border-collapse text-left text-sm text-foreground [&_tbody_tr:nth-child(odd)]:bg-muted
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* shortwind: table@0.0.1 sha:4f3295935b2a647c */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Wrap the table in @table-container for horizontal overflow, then put @table
|
|
5
|
+
(or @table-zebra for striped rows) on the <table>. Cells are @th (header) and
|
|
6
|
+
@td (body); add @tr-hover to a <tr> for row highlighting.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* Scroll container for a wide table — keeps overflow horizontal. */
|
|
10
|
+
@recipe table-container {
|
|
11
|
+
w-full overflow-x-auto rounded-md border border-border
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Data table base. */
|
|
15
|
+
@recipe table {
|
|
16
|
+
w-full border-collapse text-left text-sm text-foreground
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Table header cell. */
|
|
20
|
+
@recipe th {
|
|
21
|
+
border-b border-border px-3 py-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Table body cell. */
|
|
25
|
+
@recipe td {
|
|
26
|
+
border-b border-border px-3 py-2
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Row hover state. */
|
|
30
|
+
@recipe tr-hover {
|
|
31
|
+
transition-colors hover:bg-muted
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Table with zebra striping on alternating rows. */
|
|
35
|
+
@recipe table-zebra {
|
|
36
|
+
w-full border-collapse text-left text-sm text-foreground [&_tbody_tr:nth-child(odd)]:bg-muted
|
|
37
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/* shortwind: text@0.0.1 sha:9c5d7ed7b1e3ef5a */
|
|
2
|
+
|
|
3
|
+
/* @guide
|
|
4
|
+
Headings are sized by weight, not HTML level: @heading-xl/lg/md/sm — there
|
|
5
|
+
is no @h1..@h6. Body copy: @body (default), @lead (intro paragraphs), @muted
|
|
6
|
+
(secondary), @caption (fine print). Use @label for form labels and @link for
|
|
7
|
+
inline links. Don't append a -text suffix: it's @body not @body-text, @muted
|
|
8
|
+
not @muted-text, @link not @link-text.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* Top-level page heading. */
|
|
12
|
+
@recipe heading-xl {
|
|
13
|
+
text-4xl font-bold tracking-tight text-foreground
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Large section heading. */
|
|
17
|
+
@recipe heading-lg {
|
|
18
|
+
text-2xl font-semibold tracking-tight text-foreground
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Medium heading. */
|
|
22
|
+
@recipe heading-md {
|
|
23
|
+
text-xl font-semibold text-foreground
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* Small heading. */
|
|
27
|
+
@recipe heading-sm {
|
|
28
|
+
text-base font-semibold text-foreground
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* Default body text. */
|
|
32
|
+
@recipe body {
|
|
33
|
+
text-sm leading-6 text-foreground
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Lead paragraph — larger body copy for hero/intro sections. */
|
|
37
|
+
@recipe lead {
|
|
38
|
+
text-lg leading-relaxed text-muted-foreground
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Muted secondary text. */
|
|
42
|
+
@recipe muted {
|
|
43
|
+
text-sm text-muted-foreground
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Form label text. */
|
|
47
|
+
@recipe label {
|
|
48
|
+
text-sm font-medium text-foreground
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Caption — small supporting text. */
|
|
52
|
+
@recipe caption {
|
|
53
|
+
text-xs text-muted-foreground
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Inline link with hover/focus states. */
|
|
57
|
+
@recipe link {
|
|
58
|
+
text-primary underline-offset-2 hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring
|
|
59
|
+
}
|