@keepkit/ui 0.15.0 → 0.16.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.
@@ -1,5 +1,7 @@
1
1
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="collection"] {
2
2
  display: grid;
3
+ container-name: keepkit-collection;
4
+ container-type: inline-size;
3
5
  gap: calc(var(--keep-card-gap) * 1.5);
4
6
  color: var(--keep-foreground);
5
7
  }
@@ -21,7 +23,12 @@
21
23
  }
22
24
 
23
25
  :where(.keep-theme, [data-keep-theme])
24
- :is([data-keepkit="layout"], [data-keepkit="list"] > ul, [data-keepkit="list"] > [data-layout]) {
26
+ :is(
27
+ [data-keepkit="layout"],
28
+ [data-keepkit="list"] > ul,
29
+ [data-keepkit="list"] > [data-layout],
30
+ [data-keepkit="skeleton-list"]
31
+ ) {
25
32
  display: grid;
26
33
  grid-template-columns: repeat(var(--keep-list-columns), minmax(0, 1fr));
27
34
  gap: var(--keep-list-gap);
@@ -33,6 +40,11 @@
33
40
  list-style: none;
34
41
  }
35
42
 
43
+ :where(.keep-theme, [data-keep-theme]) :is([data-keepkit="layout"], [data-keepkit="list"]) {
44
+ container-name: keepkit-layout;
45
+ container-type: inline-size;
46
+ }
47
+
36
48
  :where(.keep-theme, [data-keep-theme])
37
49
  :is(
38
50
  [data-keepkit="layout"][data-layout="grid"],
@@ -52,6 +64,27 @@
52
64
  --keep-list-gap: 0.5rem;
53
65
  }
54
66
 
67
+ :where(.keep-theme, [data-keep-theme])
68
+ :is(
69
+ [data-keepkit="layout"][data-layout="auto"],
70
+ [data-keepkit="list"] > ul[data-layout="auto"],
71
+ [data-keepkit="list"] > [data-layout="auto"]
72
+ ) {
73
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--keep-auto-column-min, 16rem)), 1fr));
74
+ }
75
+
76
+ @container keepkit-layout (max-width: 31.999rem) {
77
+ :where([data-layout="auto"]) {
78
+ --keep-auto-column-min: 100%;
79
+ }
80
+ }
81
+
82
+ @container keepkit-layout (min-width: 48rem) {
83
+ :where([data-layout="auto"]) {
84
+ --keep-auto-column-min: 15rem;
85
+ }
86
+ }
87
+
55
88
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] {
56
89
  display: grid;
57
90
  position: relative;
@@ -69,6 +102,53 @@
69
102
  transform 160ms ease;
70
103
  }
71
104
 
105
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"]:has(> [data-keep-card-part="media"]) {
106
+ grid-template-columns: var(--keep-thumbnail-size) minmax(0, 1fr);
107
+ }
108
+
109
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="media"] {
110
+ grid-row: 1 / span 2;
111
+ width: var(--keep-thumbnail-size);
112
+ height: var(--keep-thumbnail-size);
113
+ overflow: hidden;
114
+ border-radius: calc(var(--keep-radius) - 2px);
115
+ background: var(--keep-muted);
116
+ }
117
+
118
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="media"] > :is(img, [data-keep-card-fallback]) {
119
+ display: grid;
120
+ place-items: center;
121
+ width: 100%;
122
+ height: 100%;
123
+ object-fit: cover;
124
+ }
125
+
126
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-fallback] {
127
+ overflow: hidden;
128
+ color: var(--keep-muted-foreground);
129
+ font-weight: 700;
130
+ text-overflow: ellipsis;
131
+ white-space: nowrap;
132
+ }
133
+
134
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="content"],
135
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="actions"] {
136
+ display: grid;
137
+ gap: var(--keep-card-gap);
138
+ min-width: 0;
139
+ }
140
+
141
+ :where(.keep-theme, [data-keep-theme])
142
+ [data-keepkit="card"]:has(> [data-keep-card-part="media"])
143
+ > :is([data-keep-card-part="content"], [data-keep-card-part="actions"]) {
144
+ grid-column: 2;
145
+ }
146
+
147
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="actions"] {
148
+ align-items: center;
149
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 8rem), max-content));
150
+ }
151
+
72
152
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"]:hover {
73
153
  border-color: color-mix(in srgb, var(--keep-primary) 32%, var(--keep-border));
74
154
  box-shadow:
@@ -93,36 +173,39 @@
93
173
  grid-column: 2;
94
174
  }
95
175
 
96
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] h3 {
176
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] :is(h2, h3, h4, h5, h6)[data-keep-card-part="title"] {
97
177
  margin: 0;
98
178
  padding-inline-end: calc(var(--keep-button-size) + var(--keep-card-gap));
99
179
  font-size: var(--keep-title-size);
100
180
  line-height: 1.35;
101
181
  }
102
182
 
103
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] h3 a {
183
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] [data-keep-card-part="title"] a {
104
184
  color: inherit;
105
185
  text-decoration-color: color-mix(in srgb, currentColor 25%, transparent);
106
186
  text-underline-offset: 0.2em;
107
187
  }
108
188
 
109
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] h3 a:hover {
189
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] [data-keep-card-part="title"] a:hover {
110
190
  color: var(--keep-primary);
111
191
  text-decoration-color: currentColor;
112
192
  }
113
193
 
114
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] > [data-keepkit="button"] {
194
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] [data-keep-card-part="actions"] > [data-keepkit="button"] {
115
195
  position: absolute;
116
196
  top: var(--keep-card-gap);
117
197
  right: var(--keep-card-gap);
118
198
  }
119
199
 
120
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] > [data-card-meta] {
200
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] [data-card-meta] {
121
201
  color: var(--keep-muted-foreground);
122
202
  font-size: 0.8125rem;
123
203
  }
124
204
 
125
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] > [data-keep-action="remove-item"] {
205
+ :where(.keep-theme, [data-keep-theme])
206
+ [data-keepkit="card"]
207
+ [data-keep-card-part="actions"]
208
+ > [data-keep-action="remove-item"] {
126
209
  justify-self: start;
127
210
  border-color: color-mix(in srgb, var(--keep-destructive) 28%, var(--keep-border));
128
211
  background: transparent;
@@ -130,7 +213,7 @@
130
213
  }
131
214
 
132
215
  :where(.keep-theme, [data-keep-theme])
133
- [data-keepkit="card"]:has(> [data-keepkit="button"])
216
+ [data-keep-card-part="actions"]:has(> [data-keepkit="button"])
134
217
  > [data-keep-action="remove-item"] {
135
218
  display: none;
136
219
  }
@@ -177,6 +260,95 @@
177
260
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--keep-border) 70%, transparent);
178
261
  }
179
262
 
263
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="loading-label"] {
264
+ position: absolute;
265
+ width: 1px;
266
+ height: 1px;
267
+ overflow: hidden;
268
+ clip: rect(0 0 0 0);
269
+ clip-path: inset(50%);
270
+ white-space: nowrap;
271
+ }
272
+
273
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"] {
274
+ display: grid;
275
+ grid-template-columns: var(--keep-skeleton-media-size, var(--keep-thumbnail-size)) minmax(0, 1fr);
276
+ grid-template-rows: repeat(3, min-content);
277
+ gap: var(--keep-card-gap);
278
+ min-height: calc(var(--keep-thumbnail-size) + 2 * var(--keep-card-padding));
279
+ border: 1px solid var(--keep-border);
280
+ border-radius: var(--keep-radius);
281
+ padding: var(--keep-card-padding);
282
+ background: var(--keep-card);
283
+ }
284
+
285
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"] [data-skeleton-part] {
286
+ height: 0.75rem;
287
+ border-radius: 999px;
288
+ background: color-mix(in srgb, var(--keep-muted) 78%, var(--keep-border));
289
+ animation: keepkit-skeleton-pulse 1.4s ease-in-out infinite;
290
+ }
291
+
292
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"] [data-skeleton-part="media"] {
293
+ grid-row: 1 / span 3;
294
+ width: var(--keep-skeleton-media-size, var(--keep-thumbnail-size));
295
+ height: var(--keep-skeleton-media-size, var(--keep-thumbnail-size));
296
+ border-radius: calc(var(--keep-radius) - 2px);
297
+ }
298
+
299
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"] [data-skeleton-part="title"] {
300
+ width: var(--keep-skeleton-title-width, 78%);
301
+ height: 1rem;
302
+ }
303
+
304
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"] [data-skeleton-part="meta"] {
305
+ width: 48%;
306
+ }
307
+
308
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"] [data-skeleton-part="tag"] {
309
+ display: inline-block;
310
+ grid-row: 3;
311
+ width: var(--keep-skeleton-tag-width, 4rem);
312
+ }
313
+
314
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"][data-layout="grid"],
315
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"][data-layout="auto"] {
316
+ --keep-skeleton-media-size: 100%;
317
+ --keep-skeleton-title-width: 88%;
318
+ grid-template-columns: 1fr 1fr;
319
+ }
320
+
321
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"][data-layout="grid"] [data-skeleton-part="media"],
322
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"][data-layout="auto"] [data-skeleton-part="media"] {
323
+ grid-column: 1 / -1;
324
+ grid-row: 1;
325
+ height: auto;
326
+ aspect-ratio: 16 / 9;
327
+ }
328
+
329
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"][data-layout="compact"] {
330
+ --keep-skeleton-media-size: 2.75rem;
331
+ --keep-skeleton-title-width: 64%;
332
+ --keep-skeleton-tag-width: 3rem;
333
+ }
334
+
335
+ @keyframes keepkit-skeleton-pulse {
336
+ 0%,
337
+ 100% {
338
+ opacity: 0.55;
339
+ }
340
+ 50% {
341
+ opacity: 1;
342
+ }
343
+ }
344
+
345
+ @media (prefers-reduced-motion: reduce) {
346
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"] [data-skeleton-part] {
347
+ animation: none;
348
+ background: var(--keep-muted);
349
+ }
350
+ }
351
+
180
352
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="pagination"] {
181
353
  display: flex;
182
354
  flex-wrap: wrap;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keepkit/ui",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "Headless, accessible React UI components for KeepKit.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -54,7 +54,7 @@
54
54
  "react": ">=18"
55
55
  },
56
56
  "dependencies": {
57
- "@keepkit/core": "0.15.0"
57
+ "@keepkit/core": "0.16.0"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@testing-library/react": "^16.3.3",