@keepkit/ui 0.17.0 → 0.19.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;
@@ -226,6 +228,8 @@
226
228
  --keep-destructive-foreground: var(--destructive-foreground, #450a0a);
227
229
  --keep-success: #86efac;
228
230
  --keep-warning: #fdba74;
231
+ --keep-highlight-bg: #facc15;
232
+ --keep-highlight-fg: #422006;
229
233
  --keep-ring: var(--ring, var(--keep-primary));
230
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");
231
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");
@@ -247,6 +251,8 @@
247
251
  --keep-destructive-foreground: var(--destructive-foreground, #450a0a);
248
252
  --keep-success: #86efac;
249
253
  --keep-warning: #fdba74;
254
+ --keep-highlight-bg: #facc15;
255
+ --keep-highlight-fg: #422006;
250
256
  --keep-ring: var(--ring, var(--keep-primary));
251
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");
252
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");
@@ -365,6 +371,16 @@
365
371
  outline-offset: -2px;
366
372
  }
367
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
+
368
384
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="bulk-actions"][data-state="selected"] {
369
385
  border: 1px solid var(--keep-ring);
370
386
  background: var(--keep-muted);
@@ -22,6 +22,48 @@
22
22
  flex: 1 1 12rem;
23
23
  }
24
24
 
25
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="active-filters"] {
26
+ display: flex;
27
+ flex-wrap: wrap;
28
+ align-items: center;
29
+ gap: var(--keep-control-gap);
30
+ color: var(--keep-muted-foreground);
31
+ font-size: var(--keep-tag-size);
32
+ }
33
+
34
+ :where(.keep-theme, [data-keep-theme]) [data-active-filters-list="true"] {
35
+ display: flex;
36
+ flex-wrap: wrap;
37
+ gap: var(--keep-control-gap);
38
+ margin: 0;
39
+ padding: 0;
40
+ list-style: none;
41
+ }
42
+
43
+ :where(.keep-theme, [data-keep-theme]) [data-active-filters-list="true"] li {
44
+ display: inline-flex;
45
+ align-items: center;
46
+ gap: 0.25rem;
47
+ border: 1px solid var(--keep-border);
48
+ border-radius: 999px;
49
+ padding: 0.2rem 0.35rem 0.2rem 0.6rem;
50
+ background: var(--keep-muted);
51
+ color: var(--keep-foreground);
52
+ }
53
+
54
+ :where(.keep-theme, [data-keep-theme]) [data-active-filters-list="true"] button {
55
+ min-height: 1.25rem;
56
+ width: 1.25rem;
57
+ border: 0;
58
+ border-radius: 999px;
59
+ padding: 0;
60
+ background: transparent;
61
+ color: inherit;
62
+ cursor: pointer;
63
+ font: inherit;
64
+ line-height: 1;
65
+ }
66
+
25
67
  :where(.keep-theme, [data-keep-theme])
26
68
  :is(
27
69
  [data-keepkit="layout"],
@@ -110,6 +152,7 @@
110
152
  grid-row: 1 / span 2;
111
153
  width: var(--keep-thumbnail-size);
112
154
  height: var(--keep-thumbnail-size);
155
+ aspect-ratio: 1 / 1;
113
156
  overflow: hidden;
114
157
  border-radius: calc(var(--keep-radius) - 2px);
115
158
  background: var(--keep-muted);
@@ -123,6 +166,12 @@
123
166
  object-fit: cover;
124
167
  }
125
168
 
169
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="media"] > img {
170
+ width: 100%;
171
+ height: 100%;
172
+ object-fit: cover;
173
+ }
174
+
126
175
  :where(.keep-theme, [data-keep-theme]) [data-keep-card-fallback] {
127
176
  overflow: hidden;
128
177
  color: var(--keep-muted-foreground);
@@ -174,10 +223,24 @@
174
223
  }
175
224
 
176
225
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] :is(h2, h3, h4, h5, h6)[data-keep-card-part="title"] {
226
+ display: -webkit-box;
227
+ overflow: hidden;
177
228
  margin: 0;
178
229
  padding-inline-end: calc(var(--keep-button-size) + var(--keep-card-gap));
179
230
  font-size: var(--keep-title-size);
180
231
  line-height: 1.35;
232
+ -webkit-box-orient: vertical;
233
+ -webkit-line-clamp: 2;
234
+ line-clamp: 2;
235
+ }
236
+
237
+ :where(.keep-theme, [data-keep-theme]) [data-keep-card-part="memo-preview"],
238
+ :where(.keep-theme, [data-keep-theme]) [data-card-note-preview] {
239
+ display: -webkit-box;
240
+ overflow: hidden;
241
+ -webkit-box-orient: vertical;
242
+ -webkit-line-clamp: 3;
243
+ line-clamp: 3;
181
244
  }
182
245
 
183
246
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="card"] [data-keep-card-part="title"] a {
@@ -326,6 +389,106 @@
326
389
  aspect-ratio: 16 / 9;
327
390
  }
328
391
 
392
+ :where(.keep-theme, [data-keep-theme])
393
+ [data-keepkit="list"]
394
+ > ul[data-layout="grid"]
395
+ [data-keepkit="card"]:has(> [data-keep-card-part="media"]),
396
+ :where(.keep-theme, [data-keep-theme])
397
+ [data-keepkit="list"]
398
+ > ul[data-layout="auto"]
399
+ [data-keepkit="card"]:has(> [data-keep-card-part="media"]) {
400
+ grid-template-columns: 1fr;
401
+ }
402
+
403
+ :where(.keep-theme, [data-keep-theme])
404
+ [data-keepkit="list"]
405
+ > ul:is([data-layout="grid"], [data-layout="auto"])
406
+ [data-keepkit="card"]
407
+ > [data-keep-card-part="media"] {
408
+ grid-column: 1;
409
+ grid-row: auto;
410
+ width: 100%;
411
+ height: auto;
412
+ aspect-ratio: 16 / 9;
413
+ }
414
+
415
+ :where(.keep-theme, [data-keep-theme])
416
+ [data-keepkit="list"]
417
+ > ul:is([data-layout="grid"], [data-layout="auto"])
418
+ [data-keepkit="card"]
419
+ > :is([data-keep-card-part="content"], [data-keep-card-part="actions"]) {
420
+ grid-column: 1;
421
+ }
422
+
423
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] {
424
+ position: relative;
425
+ }
426
+
427
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-reorder-index] {
428
+ position: relative;
429
+ }
430
+
431
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-drop-target]::before,
432
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-drop-target]::after {
433
+ content: "";
434
+ position: absolute;
435
+ z-index: 1;
436
+ right: 0;
437
+ left: 0;
438
+ height: 0.2rem;
439
+ border-radius: 999px;
440
+ background: var(--keep-primary);
441
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--keep-primary) 18%, transparent);
442
+ pointer-events: none;
443
+ }
444
+
445
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-drop-target="before"]::before {
446
+ top: calc(var(--keep-list-gap) / -2);
447
+ }
448
+
449
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="reorderable-list"] > li[data-drop-target="after"]::after {
450
+ bottom: calc(var(--keep-list-gap) / -2);
451
+ }
452
+
453
+ :where(.keep-theme, [data-keep-theme]) [data-drag-handle] {
454
+ color: var(--keep-muted-foreground);
455
+ cursor: grab;
456
+ }
457
+
458
+ @media (pointer: coarse) {
459
+ :where(.keep-theme, [data-keep-theme]) [data-drag-handle] {
460
+ color: var(--keep-foreground);
461
+ opacity: 1;
462
+ }
463
+ }
464
+
465
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="tour-bar"] {
466
+ display: flex;
467
+ flex-wrap: wrap;
468
+ align-items: stretch;
469
+ gap: var(--keep-control-gap);
470
+ }
471
+
472
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="tour-bar"] [data-keep-action^="tour-"] {
473
+ display: inline-flex;
474
+ min-width: 7rem;
475
+ flex-direction: column;
476
+ align-items: center;
477
+ justify-content: center;
478
+ gap: 0.125rem;
479
+ text-align: center;
480
+ }
481
+
482
+ :where(.keep-theme, [data-keep-theme]) [data-tour-preview] {
483
+ max-width: 12rem;
484
+ overflow: hidden;
485
+ color: var(--keep-muted-foreground);
486
+ font-size: 0.75rem;
487
+ font-weight: 400;
488
+ text-overflow: ellipsis;
489
+ white-space: nowrap;
490
+ }
491
+
329
492
  :where(.keep-theme, [data-keep-theme]) [data-keepkit="card-skeleton"][data-layout="compact"] {
330
493
  --keep-skeleton-media-size: 2.75rem;
331
494
  --keep-skeleton-title-width: 64%;
@@ -0,0 +1,76 @@
1
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="empty-state"] {
2
+ display: grid;
3
+ gap: var(--keep-card-gap);
4
+ justify-items: start;
5
+ }
6
+
7
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="empty-state"] h2,
8
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="empty-state"] p {
9
+ margin: 0;
10
+ }
11
+
12
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="shortcut-hint"] {
13
+ display: inline-flex;
14
+ align-items: center;
15
+ gap: 0.15rem;
16
+ margin-inline-start: 0.35rem;
17
+ color: var(--keep-muted-foreground);
18
+ font-size: 0.75em;
19
+ font-weight: 500;
20
+ }
21
+
22
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="shortcut-hint"] kbd {
23
+ border: 1px solid var(--keep-border);
24
+ border-bottom-width: 2px;
25
+ border-radius: 0.25rem;
26
+ padding: 0.05rem 0.25rem;
27
+ background: var(--keep-card);
28
+ color: inherit;
29
+ font: inherit;
30
+ line-height: 1.2;
31
+ }
32
+
33
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"] {
34
+ display: inline-flex;
35
+ align-items: center;
36
+ gap: 0.3rem;
37
+ border: 1px solid color-mix(in srgb, var(--keep-border) 72%, transparent);
38
+ border-radius: 999px;
39
+ padding: 0.125rem 0.5rem;
40
+ background: var(--keep-muted);
41
+ color: var(--keep-card-foreground);
42
+ font-size: var(--keep-tag-size);
43
+ font-weight: 600;
44
+ }
45
+
46
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"] [data-status-icon] {
47
+ flex: 0 0 auto;
48
+ width: var(--keep-icon-size);
49
+ height: var(--keep-icon-size);
50
+ }
51
+
52
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="available"] {
53
+ border-color: color-mix(in srgb, var(--keep-success) 55%, var(--keep-border));
54
+ color: var(--keep-success);
55
+ }
56
+
57
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="expired"] {
58
+ border-style: dashed;
59
+ border-color: var(--keep-destructive);
60
+ color: var(--keep-destructive);
61
+ }
62
+
63
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="removed"] {
64
+ border-color: var(--keep-muted-foreground);
65
+ border-radius: var(--keep-radius);
66
+ background: color-mix(in srgb, var(--keep-muted-foreground) 12%, var(--keep-card));
67
+ color: var(--keep-muted-foreground);
68
+ filter: grayscale(1);
69
+ }
70
+
71
+ :where(.keep-theme, [data-keep-theme]) [data-keepkit="status-badge"][data-item-status="restricted"] {
72
+ border-color: var(--keep-destructive);
73
+ border-radius: var(--keep-radius);
74
+ background: var(--keep-destructive);
75
+ color: var(--keep-destructive-foreground);
76
+ }
@@ -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.17.0",
3
+ "version": "0.19.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.17.0"
60
+ "@keepkit/core": "0.19.0"
58
61
  },
59
62
  "devDependencies": {
60
63
  "@testing-library/react": "^16.3.3",