@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.
Files changed (136) hide show
  1. package/README.md +35 -9
  2. package/dist/alert.d.ts.map +1 -1
  3. package/dist/alert.js +1 -0
  4. package/dist/alert.js.map +1 -1
  5. package/dist/badge.d.ts.map +1 -1
  6. package/dist/badge.js.map +1 -1
  7. package/dist/button.d.ts.map +1 -1
  8. package/dist/button.js +1 -0
  9. package/dist/button.js.map +1 -1
  10. package/dist/card-skeleton.d.ts +10 -0
  11. package/dist/card-skeleton.d.ts.map +1 -0
  12. package/dist/card-skeleton.js +11 -0
  13. package/dist/card-skeleton.js.map +1 -0
  14. package/dist/card.d.ts.map +1 -1
  15. package/dist/card.js +1 -0
  16. package/dist/card.js.map +1 -1
  17. package/dist/checkbox.d.ts.map +1 -1
  18. package/dist/checkbox.js +1 -0
  19. package/dist/checkbox.js.map +1 -1
  20. package/dist/checkmark.d.ts +11 -0
  21. package/dist/checkmark.d.ts.map +1 -0
  22. package/dist/checkmark.js +12 -0
  23. package/dist/checkmark.js.map +1 -0
  24. package/dist/data-table-skeleton.d.ts +14 -0
  25. package/dist/data-table-skeleton.d.ts.map +1 -0
  26. package/dist/data-table-skeleton.js +13 -0
  27. package/dist/data-table-skeleton.js.map +1 -0
  28. package/dist/detail-panel-skeleton.d.ts +11 -0
  29. package/dist/detail-panel-skeleton.d.ts.map +1 -0
  30. package/dist/detail-panel-skeleton.js +11 -0
  31. package/dist/detail-panel-skeleton.js.map +1 -0
  32. package/dist/dialog.d.ts.map +1 -1
  33. package/dist/dialog.js +3 -2
  34. package/dist/dialog.js.map +1 -1
  35. package/dist/drawer.d.ts +30 -0
  36. package/dist/drawer.d.ts.map +1 -0
  37. package/dist/drawer.js +35 -0
  38. package/dist/drawer.js.map +1 -0
  39. package/dist/field.d.ts.map +1 -1
  40. package/dist/field.js +1 -0
  41. package/dist/field.js.map +1 -1
  42. package/dist/form.d.ts.map +1 -1
  43. package/dist/form.js +1 -0
  44. package/dist/form.js.map +1 -1
  45. package/dist/index.d.ts +10 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +10 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/input.d.ts.map +1 -1
  50. package/dist/input.js +1 -0
  51. package/dist/input.js.map +1 -1
  52. package/dist/label.d.ts.map +1 -1
  53. package/dist/label.js +1 -0
  54. package/dist/label.js.map +1 -1
  55. package/dist/live-pulse.d.ts.map +1 -1
  56. package/dist/live-pulse.js +2 -1
  57. package/dist/live-pulse.js.map +1 -1
  58. package/dist/page-header-skeleton.d.ts +12 -0
  59. package/dist/page-header-skeleton.d.ts.map +1 -0
  60. package/dist/page-header-skeleton.js +11 -0
  61. package/dist/page-header-skeleton.js.map +1 -0
  62. package/dist/progress-bar.d.ts +16 -0
  63. package/dist/progress-bar.d.ts.map +1 -0
  64. package/dist/progress-bar.js +16 -0
  65. package/dist/progress-bar.js.map +1 -0
  66. package/dist/select.d.ts.map +1 -1
  67. package/dist/select.js +1 -0
  68. package/dist/select.js.map +1 -1
  69. package/dist/separator.d.ts.map +1 -1
  70. package/dist/separator.js +1 -0
  71. package/dist/separator.js.map +1 -1
  72. package/dist/skeleton.d.ts.map +1 -1
  73. package/dist/skeleton.js +2 -1
  74. package/dist/skeleton.js.map +1 -1
  75. package/dist/sonner.d.ts.map +1 -1
  76. package/dist/sonner.js +1 -0
  77. package/dist/sonner.js.map +1 -1
  78. package/dist/status-dot.d.ts +13 -0
  79. package/dist/status-dot.d.ts.map +1 -0
  80. package/dist/status-dot.js +20 -0
  81. package/dist/status-dot.js.map +1 -0
  82. package/dist/status-label.d.ts +13 -0
  83. package/dist/status-label.d.ts.map +1 -0
  84. package/dist/status-label.js +30 -0
  85. package/dist/status-label.js.map +1 -0
  86. package/dist/switch.d.ts.map +1 -1
  87. package/dist/switch.js +1 -0
  88. package/dist/switch.js.map +1 -1
  89. package/dist/table.d.ts.map +1 -1
  90. package/dist/table.js.map +1 -1
  91. package/dist/tabs.d.ts.map +1 -1
  92. package/dist/tabs.js +1 -0
  93. package/dist/tabs.js.map +1 -1
  94. package/dist/textarea.d.ts.map +1 -1
  95. package/dist/textarea.js +1 -0
  96. package/dist/textarea.js.map +1 -1
  97. package/dist/updated-ago.d.ts +13 -0
  98. package/dist/updated-ago.d.ts.map +1 -0
  99. package/dist/updated-ago.js +29 -0
  100. package/dist/updated-ago.js.map +1 -0
  101. package/dist/utils.d.ts.map +1 -1
  102. package/dist/utils.js +1 -0
  103. package/dist/utils.js.map +1 -1
  104. package/package.json +23 -3
  105. package/src/alert.tsx +1 -0
  106. package/src/badge.tsx +1 -0
  107. package/src/button.tsx +1 -0
  108. package/src/card-skeleton.tsx +31 -0
  109. package/src/card.tsx +1 -0
  110. package/src/checkbox.tsx +1 -0
  111. package/src/checkmark.tsx +34 -0
  112. package/src/data-table-skeleton.tsx +53 -0
  113. package/src/detail-panel-skeleton.tsx +29 -0
  114. package/src/dialog.tsx +9 -1
  115. package/src/drawer.tsx +140 -0
  116. package/src/field.tsx +1 -0
  117. package/src/form.tsx +1 -0
  118. package/src/index.ts +22 -0
  119. package/src/input.tsx +1 -0
  120. package/src/label.tsx +1 -0
  121. package/src/live-pulse.tsx +2 -8
  122. package/src/page-header-skeleton.tsx +39 -0
  123. package/src/progress-bar.tsx +45 -0
  124. package/src/select.tsx +1 -0
  125. package/src/separator.tsx +1 -0
  126. package/src/skeleton.tsx +2 -1
  127. package/src/sonner.tsx +1 -0
  128. package/src/status-dot.tsx +42 -0
  129. package/src/status-label.tsx +53 -0
  130. package/src/styles.css +76 -0
  131. package/src/switch.tsx +1 -0
  132. package/src/table.tsx +1 -0
  133. package/src/tabs.tsx +1 -0
  134. package/src/textarea.tsx +1 -0
  135. package/src/updated-ago.tsx +38 -0
  136. 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
@@ -1,3 +1,4 @@
1
+ // Derived from shadcn/ui (switch) — see Provenance in packages/ui/README.md. Tolerated exception: migrated to custom code only when customization needs it.
1
2
  "use client";
2
3
 
3
4
  import * as React from "react";
package/src/table.tsx CHANGED
@@ -1,3 +1,4 @@
1
+ // Derived from shadcn/ui (table) — see Provenance in packages/ui/README.md. Tolerated exception: migrated to custom code only when customization needs it.
1
2
  import * as React from "react";
2
3
 
3
4
  import { cn } from "./utils.js";
package/src/tabs.tsx CHANGED
@@ -1,3 +1,4 @@
1
+ // Derived from shadcn/ui (tabs) — see Provenance in packages/ui/README.md. Tolerated exception: migrated to custom code only when customization needs it.
1
2
  "use client";
2
3
 
3
4
  import * as React from "react";
package/src/textarea.tsx CHANGED
@@ -1,3 +1,4 @@
1
+ // Derived from shadcn/ui (textarea) — see Provenance in packages/ui/README.md. Tolerated exception: migrated to custom code only when customization needs it.
1
2
  import * as React from "react";
2
3
 
3
4
  import { cn } from "./utils.js";
@@ -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
@@ -1,3 +1,4 @@
1
+ // Derived from shadcn/ui (utils (cn)) — see Provenance in packages/ui/README.md. Tolerated exception: migrated to custom code only when customization needs it.
1
2
  import { clsx, type ClassValue } from "clsx";
2
3
  import { twMerge } from "tailwind-merge";
3
4