@zedtech/zedkit-ui 0.1.1 → 0.3.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.
- package/README.md +35 -9
- package/dist/alert.d.ts.map +1 -1
- package/dist/alert.js +1 -0
- package/dist/alert.js.map +1 -1
- package/dist/badge.d.ts.map +1 -1
- package/dist/badge.js.map +1 -1
- package/dist/button.d.ts.map +1 -1
- package/dist/button.js +1 -0
- package/dist/button.js.map +1 -1
- package/dist/card-skeleton.d.ts +10 -0
- package/dist/card-skeleton.d.ts.map +1 -0
- package/dist/card-skeleton.js +11 -0
- package/dist/card-skeleton.js.map +1 -0
- package/dist/card.d.ts.map +1 -1
- package/dist/card.js +1 -0
- package/dist/card.js.map +1 -1
- package/dist/checkbox.d.ts.map +1 -1
- package/dist/checkbox.js +1 -0
- package/dist/checkbox.js.map +1 -1
- package/dist/checkmark.d.ts +11 -0
- package/dist/checkmark.d.ts.map +1 -0
- package/dist/checkmark.js +12 -0
- package/dist/checkmark.js.map +1 -0
- package/dist/data-table-skeleton.d.ts +14 -0
- package/dist/data-table-skeleton.d.ts.map +1 -0
- package/dist/data-table-skeleton.js +13 -0
- package/dist/data-table-skeleton.js.map +1 -0
- package/dist/detail-panel-skeleton.d.ts +11 -0
- package/dist/detail-panel-skeleton.d.ts.map +1 -0
- package/dist/detail-panel-skeleton.js +11 -0
- package/dist/detail-panel-skeleton.js.map +1 -0
- package/dist/dialog.d.ts.map +1 -1
- package/dist/dialog.js +3 -2
- package/dist/dialog.js.map +1 -1
- package/dist/drawer.d.ts +30 -0
- package/dist/drawer.d.ts.map +1 -0
- package/dist/drawer.js +35 -0
- package/dist/drawer.js.map +1 -0
- package/dist/field.d.ts.map +1 -1
- package/dist/field.js +1 -0
- package/dist/field.js.map +1 -1
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +1 -0
- package/dist/form.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts.map +1 -1
- package/dist/input.js +1 -0
- package/dist/input.js.map +1 -1
- package/dist/label.d.ts.map +1 -1
- package/dist/label.js +1 -0
- package/dist/label.js.map +1 -1
- package/dist/live-pulse.d.ts.map +1 -1
- package/dist/live-pulse.js +2 -1
- package/dist/live-pulse.js.map +1 -1
- package/dist/page-header-skeleton.d.ts +12 -0
- package/dist/page-header-skeleton.d.ts.map +1 -0
- package/dist/page-header-skeleton.js +11 -0
- package/dist/page-header-skeleton.js.map +1 -0
- package/dist/progress-bar.d.ts +16 -0
- package/dist/progress-bar.d.ts.map +1 -0
- package/dist/progress-bar.js +16 -0
- package/dist/progress-bar.js.map +1 -0
- package/dist/select.d.ts.map +1 -1
- package/dist/select.js +1 -0
- package/dist/select.js.map +1 -1
- package/dist/separator.d.ts.map +1 -1
- package/dist/separator.js +1 -0
- package/dist/separator.js.map +1 -1
- package/dist/skeleton.d.ts.map +1 -1
- package/dist/skeleton.js +2 -1
- package/dist/skeleton.js.map +1 -1
- package/dist/sonner.d.ts.map +1 -1
- package/dist/sonner.js +1 -0
- package/dist/sonner.js.map +1 -1
- package/dist/status-dot.d.ts +13 -0
- package/dist/status-dot.d.ts.map +1 -0
- package/dist/status-dot.js +20 -0
- package/dist/status-dot.js.map +1 -0
- package/dist/status-label.d.ts +13 -0
- package/dist/status-label.d.ts.map +1 -0
- package/dist/status-label.js +30 -0
- package/dist/status-label.js.map +1 -0
- package/dist/switch.d.ts.map +1 -1
- package/dist/switch.js +1 -0
- package/dist/switch.js.map +1 -1
- package/dist/table.d.ts.map +1 -1
- package/dist/table.js.map +1 -1
- package/dist/tabs.d.ts.map +1 -1
- package/dist/tabs.js +1 -0
- package/dist/tabs.js.map +1 -1
- package/dist/textarea.d.ts.map +1 -1
- package/dist/textarea.js +1 -0
- package/dist/textarea.js.map +1 -1
- package/dist/updated-ago.d.ts +13 -0
- package/dist/updated-ago.d.ts.map +1 -0
- package/dist/updated-ago.js +29 -0
- package/dist/updated-ago.js.map +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -1
- package/package.json +23 -3
- package/src/alert.tsx +1 -0
- package/src/badge.tsx +1 -0
- package/src/button.tsx +1 -0
- package/src/card-skeleton.tsx +31 -0
- package/src/card.tsx +1 -0
- package/src/checkbox.tsx +1 -0
- package/src/checkmark.tsx +34 -0
- package/src/data-table-skeleton.tsx +53 -0
- package/src/detail-panel-skeleton.tsx +29 -0
- package/src/dialog.tsx +9 -1
- package/src/drawer.tsx +140 -0
- package/src/field.tsx +1 -0
- package/src/form.tsx +1 -0
- package/src/index.ts +22 -0
- package/src/input.tsx +1 -0
- package/src/label.tsx +1 -0
- package/src/live-pulse.tsx +2 -8
- package/src/page-header-skeleton.tsx +39 -0
- package/src/progress-bar.tsx +45 -0
- package/src/select.tsx +1 -0
- package/src/separator.tsx +1 -0
- package/src/skeleton.tsx +2 -1
- package/src/sonner.tsx +1 -0
- package/src/status-dot.tsx +42 -0
- package/src/status-label.tsx +53 -0
- package/src/styles.css +76 -0
- package/src/switch.tsx +1 -0
- package/src/table.tsx +1 -0
- package/src/tabs.tsx +1 -0
- package/src/textarea.tsx +1 -0
- package/src/updated-ago.tsx +38 -0
- package/src/utils.ts +1 -0
package/src/styles.css
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* Derived from shadcn/ui (theme) — see Provenance in packages/ui/README.md. Tolerated exception: migrated to custom code only when customization needs it. */
|
|
1
2
|
@import "tailwindcss";
|
|
2
3
|
|
|
3
4
|
/*
|
|
@@ -115,3 +116,78 @@
|
|
|
115
116
|
ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
116
117
|
}
|
|
117
118
|
}
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
* Kit-authored motion (not shadcn): one draw-on keyframe for the
|
|
122
|
+
* Checkmark state icon. The path carries the animation only under
|
|
123
|
+
* `motion-safe:`, so reduced motion shows the static full check.
|
|
124
|
+
*/
|
|
125
|
+
@keyframes zk-check-draw {
|
|
126
|
+
from {
|
|
127
|
+
stroke-dashoffset: 8;
|
|
128
|
+
}
|
|
129
|
+
to {
|
|
130
|
+
stroke-dashoffset: 0;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/*
|
|
135
|
+
* Motion tokens: every overlay animation references these durations
|
|
136
|
+
* and easings — apps never hardcode transition styles.
|
|
137
|
+
*/
|
|
138
|
+
:root {
|
|
139
|
+
--motion-fast: 150ms;
|
|
140
|
+
--motion-base: 200ms;
|
|
141
|
+
--motion-slow: 250ms;
|
|
142
|
+
--ease-enter: cubic-bezier(0.16, 1, 0.3, 1);
|
|
143
|
+
--ease-exit: cubic-bezier(0.4, 0, 1, 1);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@keyframes zk-fade-in {
|
|
147
|
+
from {
|
|
148
|
+
opacity: 0;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@keyframes zk-fade-out {
|
|
153
|
+
to {
|
|
154
|
+
opacity: 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@keyframes zk-zoom-in {
|
|
159
|
+
from {
|
|
160
|
+
opacity: 0;
|
|
161
|
+
transform: scale(0.96);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@keyframes zk-zoom-out {
|
|
166
|
+
to {
|
|
167
|
+
opacity: 0;
|
|
168
|
+
transform: scale(0.96);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/*
|
|
173
|
+
* Vaul (drawer) ships its own slide keyframes at 500ms with no
|
|
174
|
+
* reduced-motion guard: retune to the kit tokens, disable fully
|
|
175
|
+
* when motion is reduced. `!important` beats vaul's injected
|
|
176
|
+
* high-specificity state selectors — deliberately, in one place.
|
|
177
|
+
*/
|
|
178
|
+
html [data-vaul-drawer] {
|
|
179
|
+
animation-duration: var(--motion-slow);
|
|
180
|
+
transition-duration: var(--motion-slow);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
html [data-vaul-overlay] {
|
|
184
|
+
animation-duration: var(--motion-base);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
@media (prefers-reduced-motion: reduce) {
|
|
188
|
+
html [data-vaul-drawer],
|
|
189
|
+
html [data-vaul-overlay] {
|
|
190
|
+
animation: none !important;
|
|
191
|
+
transition: none !important;
|
|
192
|
+
}
|
|
193
|
+
}
|
package/src/switch.tsx
CHANGED
package/src/table.tsx
CHANGED
package/src/tabs.tsx
CHANGED
package/src/textarea.tsx
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { cn } from "./utils.js";
|
|
2
|
+
|
|
3
|
+
export interface UpdatedAgoProps {
|
|
4
|
+
/** What the timestamp counts from (anything future reads as now). */
|
|
5
|
+
date: Date | number;
|
|
6
|
+
prefix?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const SECOND = 1_000;
|
|
11
|
+
const MINUTE = 60 * SECOND;
|
|
12
|
+
const HOUR = 60 * MINUTE;
|
|
13
|
+
const DAY = 24 * HOUR;
|
|
14
|
+
|
|
15
|
+
const formatter = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
|
|
16
|
+
|
|
17
|
+
function relativeFrom(now: number, then: number): string {
|
|
18
|
+
const elapsed = Math.max(now - then, 0);
|
|
19
|
+
if (elapsed < 5 * SECOND) return "just now";
|
|
20
|
+
if (elapsed < MINUTE) return formatter.format(-Math.floor(elapsed / SECOND), "second");
|
|
21
|
+
if (elapsed < HOUR) return formatter.format(-Math.floor(elapsed / MINUTE), "minute");
|
|
22
|
+
if (elapsed < DAY) return formatter.format(-Math.floor(elapsed / HOUR), "hour");
|
|
23
|
+
return formatter.format(-Math.floor(elapsed / DAY), "day");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Stale-while-revalidate stamp ("Updated 3 minutes ago"): keep showing
|
|
28
|
+
* the old content and let this say how old it is. Static snapshot —
|
|
29
|
+
* re-render when the data refreshes.
|
|
30
|
+
*/
|
|
31
|
+
export function UpdatedAgo({ date, prefix = "Updated", className }: UpdatedAgoProps) {
|
|
32
|
+
const then = date instanceof Date ? date.getTime() : date;
|
|
33
|
+
return (
|
|
34
|
+
<span className={cn("text-xs text-muted-foreground", className)}>
|
|
35
|
+
{prefix} {relativeFrom(Date.now(), then)}
|
|
36
|
+
</span>
|
|
37
|
+
);
|
|
38
|
+
}
|
package/src/utils.ts
CHANGED