@keepkit/ui 0.16.0 → 0.18.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.
@@ -14,6 +14,8 @@
14
14
  --keep-ring: var(--ring, var(--keep-primary));
15
15
  --keep-success: #15803d;
16
16
  --keep-warning: #b45309;
17
+ --keep-highlight-bg: #fef08a;
18
+ --keep-highlight-fg: #422006;
17
19
  --keep-accent: var(--primary, #2563eb);
18
20
  --keep-radius: var(--radius, 0.5rem);
19
21
  --keep-card-padding: 1rem;
@@ -66,6 +68,11 @@
66
68
  outline-offset: 2px;
67
69
  }
68
70
 
71
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"]:focus-visible {
72
+ outline: 2px solid var(--keep-ring);
73
+ outline-offset: 3px;
74
+ }
75
+
69
76
  :where(.keep-theme, [data-keep-theme]) :is(button, a) {
70
77
  min-height: var(--keep-button-size);
71
78
  }
@@ -221,6 +228,8 @@
221
228
  --keep-destructive-foreground: var(--destructive-foreground, #450a0a);
222
229
  --keep-success: #86efac;
223
230
  --keep-warning: #fdba74;
231
+ --keep-highlight-bg: #facc15;
232
+ --keep-highlight-fg: #422006;
224
233
  --keep-ring: var(--ring, var(--keep-primary));
225
234
  --keep-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-4-4'/%3E%3C/svg%3E");
226
235
  --keep-icon-sort: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m8 6 4-4 4 4M12 2v14M16 18l-4 4-4-4'/%3E%3C/svg%3E");
@@ -242,6 +251,8 @@
242
251
  --keep-destructive-foreground: var(--destructive-foreground, #450a0a);
243
252
  --keep-success: #86efac;
244
253
  --keep-warning: #fdba74;
254
+ --keep-highlight-bg: #facc15;
255
+ --keep-highlight-fg: #422006;
245
256
  --keep-ring: var(--ring, var(--keep-primary));
246
257
  --keep-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-4-4'/%3E%3C/svg%3E");
247
258
  --keep-icon-sort: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m8 6 4-4 4 4M12 2v14M16 18l-4 4-4-4'/%3E%3C/svg%3E");
@@ -360,6 +371,16 @@
360
371
  outline-offset: -2px;
361
372
  }
362
373
 
374
+ :where(.keep-theme, [data-keep-theme]) mark.keep-highlight {
375
+ border-radius: 0.2em;
376
+ padding-inline: 0.12em;
377
+ background: var(--keep-highlight-bg);
378
+ color: var(--keep-highlight-fg);
379
+ text-decoration: underline;
380
+ text-decoration-thickness: 0.12em;
381
+ text-underline-offset: 0.12em;
382
+ }
383
+
363
384
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="bulk-actions"][data-state="selected"] {
364
385
  border: 1px solid var(--keep-ring);
365
386
  background: var(--keep-muted);
@@ -110,6 +110,7 @@
110
110
  grid-row: 1 / span 2;
111
111
  width: var(--keep-thumbnail-size);
112
112
  height: var(--keep-thumbnail-size);
113
+ aspect-ratio: 1 / 1;
113
114
  overflow: hidden;
114
115
  border-radius: calc(var(--keep-radius) - 2px);
115
116
  background: var(--keep-muted);
@@ -123,6 +124,12 @@
123
124
  object-fit: cover;
124
125
  }
125
126
 
127
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="media"] > img {
128
+ width: 100%;
129
+ height: 100%;
130
+ object-fit: cover;
131
+ }
132
+
126
133
  :where(.keep-theme, [data-keep-theme]) [data-keep-card-fallback] {
127
134
  overflow: hidden;
128
135
  color: var(--keep-muted-foreground);
@@ -174,10 +181,24 @@
174
181
  }
175
182
 
176
183
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] :is(h2, h3, h4, h5, h6)[data-keep-card-part="title"] {
184
+ display: -webkit-box;
185
+ overflow: hidden;
177
186
  margin: 0;
178
187
  padding-inline-end: calc(var(--keep-button-size) + var(--keep-card-gap));
179
188
  font-size: var(--keep-title-size);
180
189
  line-height: 1.35;
190
+ -webkit-box-orient: vertical;
191
+ -webkit-line-clamp: 2;
192
+ line-clamp: 2;
193
+ }
194
+
195
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="memo-preview"],
196
+ :where(.keep-theme, [data-keep-theme]) [data-card-note-preview] {
197
+ display: -webkit-box;
198
+ overflow: hidden;
199
+ -webkit-box-orient: vertical;
200
+ -webkit-line-clamp: 3;
201
+ line-clamp: 3;
181
202
  }
182
203
 
183
204
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] [data-keep-card-part="title"] a {
@@ -326,6 +347,106 @@
326
347
  aspect-ratio: 16 / 9;
327
348
  }
328
349
 
350
+ :where(.keep-theme, [data-keep-theme])
351
+ [data-keepkit="list"]
352
+ > ul[data-layout="grid"]
353
+ [data-keepkit="card"]:has(> [data-keep-card-part="media"]),
354
+ :where(.keep-theme, [data-keep-theme])
355
+ [data-keepkit="list"]
356
+ > ul[data-layout="auto"]
357
+ [data-keepkit="card"]:has(> [data-keep-card-part="media"]) {
358
+ grid-template-columns: 1fr;
359
+ }
360
+
361
+ :where(.keep-theme, [data-keep-theme])
362
+ [data-keepkit="list"]
363
+ > ul:is([data-layout="grid"], [data-layout="auto"])
364
+ [data-keepkit="card"]
365
+ > [data-keep-card-part="media"] {
366
+ grid-column: 1;
367
+ grid-row: auto;
368
+ width: 100%;
369
+ height: auto;
370
+ aspect-ratio: 16 / 9;
371
+ }
372
+
373
+ :where(.keep-theme, [data-keep-theme])
374
+ [data-keepkit="list"]
375
+ > ul:is([data-layout="grid"], [data-layout="auto"])
376
+ [data-keepkit="card"]
377
+ > :is([data-keep-card-part="content"], [data-keep-card-part="actions"]) {
378
+ grid-column: 1;
379
+ }
380
+
381
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] {
382
+ position: relative;
383
+ }
384
+
385
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-reorder-index] {
386
+ position: relative;
387
+ }
388
+
389
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-drop-target]::before,
390
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-drop-target]::after {
391
+ content: "";
392
+ position: absolute;
393
+ z-index: 1;
394
+ right: 0;
395
+ left: 0;
396
+ height: 0.2rem;
397
+ border-radius: 999px;
398
+ background: var(--keep-primary);
399
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--keep-primary) 18%, transparent);
400
+ pointer-events: none;
401
+ }
402
+
403
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-drop-target="before"]::before {
404
+ top: calc(var(--keep-list-gap) / -2);
405
+ }
406
+
407
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-drop-target="after"]::after {
408
+ bottom: calc(var(--keep-list-gap) / -2);
409
+ }
410
+
411
+ :where(.keep-theme, [data-keep-theme]) [data-drag-handle] {
412
+ color: var(--keep-muted-foreground);
413
+ cursor: grab;
414
+ }
415
+
416
+ @media (pointer: coarse) {
417
+ :where(.keep-theme, [data-keep-theme]) [data-drag-handle] {
418
+ color: var(--keep-foreground);
419
+ opacity: 1;
420
+ }
421
+ }
422
+
423
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="tour-bar"] {
424
+ display: flex;
425
+ flex-wrap: wrap;
426
+ align-items: stretch;
427
+ gap: var(--keep-control-gap);
428
+ }
429
+
430
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="tour-bar"] [data-keep-action^="tour-"] {
431
+ display: inline-flex;
432
+ min-width: 7rem;
433
+ flex-direction: column;
434
+ align-items: center;
435
+ justify-content: center;
436
+ gap: 0.125rem;
437
+ text-align: center;
438
+ }
439
+
440
+ :where(.keep-theme, [data-keep-theme]) [data-tour-preview] {
441
+ max-width: 12rem;
442
+ overflow: hidden;
443
+ color: var(--keep-muted-foreground);
444
+ font-size: 0.75rem;
445
+ font-weight: 400;
446
+ text-overflow: ellipsis;
447
+ white-space: nowrap;
448
+ }
449
+
329
450
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"][data-layout="compact"] {
330
451
  --keep-skeleton-media-size: 2.75rem;
331
452
  --keep-skeleton-title-width: 64%;
@@ -0,0 +1,44 @@
1
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"] {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ gap: 0.3rem;
5
+ border: 1px solid color-mix(in srgb, var(--keep-border) 72%, transparent);
6
+ border-radius: 999px;
7
+ padding: 0.125rem 0.5rem;
8
+ background: var(--keep-muted);
9
+ color: var(--keep-card-foreground);
10
+ font-size: var(--keep-tag-size);
11
+ font-weight: 600;
12
+ }
13
+
14
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"] [data-status-icon] {
15
+ flex: 0 0 auto;
16
+ width: var(--keep-icon-size);
17
+ height: var(--keep-icon-size);
18
+ }
19
+
20
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="available"] {
21
+ border-color: color-mix(in srgb, var(--keep-success) 55%, var(--keep-border));
22
+ color: var(--keep-success);
23
+ }
24
+
25
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="expired"] {
26
+ border-style: dashed;
27
+ border-color: var(--keep-destructive);
28
+ color: var(--keep-destructive);
29
+ }
30
+
31
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="removed"] {
32
+ border-color: var(--keep-muted-foreground);
33
+ border-radius: var(--keep-radius);
34
+ background: color-mix(in srgb, var(--keep-muted-foreground) 12%, var(--keep-card));
35
+ color: var(--keep-muted-foreground);
36
+ filter: grayscale(1);
37
+ }
38
+
39
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="restricted"] {
40
+ border-color: var(--keep-destructive);
41
+ border-radius: var(--keep-radius);
42
+ background: var(--keep-destructive);
43
+ color: var(--keep-destructive-foreground);
44
+ }
@@ -12,20 +12,6 @@
12
12
  box-shadow: var(--keep-shadow);
13
13
  }
14
14
 
15
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"] {
16
- --keep-status-icon: var(--keep-icon-warning);
17
- display: inline-flex;
18
- align-items: center;
19
- gap: 0.25rem;
20
- border: 1px solid color-mix(in srgb, var(--keep-border) 72%, transparent);
21
- border-radius: 999px;
22
- padding: 0.125rem 0.5rem;
23
- background: var(--keep-muted);
24
- font-size: var(--keep-tag-size);
25
- font-weight: 600;
26
- }
27
-
28
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"]::before,
29
15
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="sync-status"]::before,
30
16
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="sync-recovery"]::before {
31
17
  content: "";
@@ -38,24 +24,6 @@
38
24
  -webkit-mask: var(--keep-status-icon) center / contain no-repeat;
39
25
  }
40
26
 
41
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-status="available"] {
42
- --keep-status-icon: var(--keep-icon-check);
43
- color: var(--keep-success);
44
- }
45
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-status="expired"],
46
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-status="removed"],
47
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-status="deleted"] {
48
- border-color: var(--keep-destructive);
49
- color: var(--keep-destructive);
50
- }
51
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="expired"],
52
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="removed"],
53
- :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="restricted"] {
54
- border-color: var(--keep-destructive);
55
- color: var(--keep-destructive);
56
- --keep-status-icon: var(--keep-icon-warning);
57
- }
58
-
59
27
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="stale-notice"],
60
28
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="sync-status"] {
61
29
  display: flex;
@@ -125,6 +93,51 @@
125
93
  animation: keepkit-undo-in 160ms ease-out;
126
94
  }
127
95
 
96
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="undo"] [data-keepkit="undo-message"] {
97
+ flex: 1 1 12rem;
98
+ }
99
+
100
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="undo-countdown"] {
101
+ color: var(--keep-muted-foreground);
102
+ font-variant-numeric: tabular-nums;
103
+ font-weight: 650;
104
+ }
105
+
106
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="undo-progress"] {
107
+ flex: 1 0 100%;
108
+ width: 100%;
109
+ height: 0.375rem;
110
+ overflow: hidden;
111
+ border: 0;
112
+ border-radius: 999px;
113
+ background: var(--keep-muted);
114
+ accent-color: var(--keep-primary);
115
+ }
116
+
117
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="undo-progress"]::-webkit-progress-bar {
118
+ border-radius: inherit;
119
+ background: var(--keep-muted);
120
+ }
121
+
122
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="undo-progress"]::-webkit-progress-value {
123
+ border-radius: inherit;
124
+ background: var(--keep-primary);
125
+ transition: width 250ms linear;
126
+ }
127
+
128
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="undo-progress"]::-moz-progress-bar {
129
+ border-radius: inherit;
130
+ background: var(--keep-primary);
131
+ transition: width 250ms linear;
132
+ }
133
+
134
+ @media (prefers-reduced-motion: reduce) {
135
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="undo-progress"]::-webkit-progress-value,
136
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="undo-progress"]::-moz-progress-bar {
137
+ transition: none;
138
+ }
139
+ }
140
+
128
141
  @keyframes keepkit-undo-in {
129
142
  from {
130
143
  opacity: 0;
package/dist/theme.css CHANGED
@@ -1,4 +1,5 @@
1
1
  @import "./styles/base.css";
2
2
  @import "./styles/button.css";
3
3
  @import "./styles/collection.css";
4
+ @import "./styles/status.css";
4
5
  @import "./styles/sync.css";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keepkit/ui",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "Headless, accessible React UI components for KeepKit.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -40,6 +40,9 @@
40
40
  "./styles/collection.css": {
41
41
  "default": "./dist/styles/collection.css"
42
42
  },
43
+ "./styles/status.css": {
44
+ "default": "./dist/styles/status.css"
45
+ },
43
46
  "./styles/sync.css": {
44
47
  "default": "./dist/styles/sync.css"
45
48
  }
@@ -54,7 +57,7 @@
54
57
  "react": ">=18"
55
58
  },
56
59
  "dependencies": {
57
- "@keepkit/core": "0.16.0"
60
+ "@keepkit/core": "0.18.0"
58
61
  },
59
62
  "devDependencies": {
60
63
  "@testing-library/react": "^16.3.3",