@medialane/ui 0.2.0 → 0.3.1

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 (66) hide show
  1. package/dist/components/activity-feed-shell.cjs +90 -0
  2. package/dist/components/activity-feed-shell.cjs.map +1 -0
  3. package/dist/components/activity-feed-shell.d.cts +13 -0
  4. package/dist/components/activity-feed-shell.d.ts +13 -0
  5. package/dist/components/activity-feed-shell.js +56 -0
  6. package/dist/components/activity-feed-shell.js.map +1 -0
  7. package/dist/components/activity-row.cjs +95 -0
  8. package/dist/components/activity-row.cjs.map +1 -0
  9. package/dist/components/activity-row.d.cts +20 -0
  10. package/dist/components/activity-row.d.ts +20 -0
  11. package/dist/components/activity-row.js +61 -0
  12. package/dist/components/activity-row.js.map +1 -0
  13. package/dist/components/activity-ticker.cjs +92 -0
  14. package/dist/components/activity-ticker.cjs.map +1 -0
  15. package/dist/components/activity-ticker.d.cts +12 -0
  16. package/dist/components/activity-ticker.d.ts +12 -0
  17. package/dist/components/activity-ticker.js +58 -0
  18. package/dist/components/activity-ticker.js.map +1 -0
  19. package/dist/components/collection-card.cjs +2 -5
  20. package/dist/components/collection-card.cjs.map +1 -1
  21. package/dist/components/collection-card.js +3 -6
  22. package/dist/components/collection-card.js.map +1 -1
  23. package/dist/components/cta-card-grid.cjs +67 -0
  24. package/dist/components/cta-card-grid.cjs.map +1 -0
  25. package/dist/components/cta-card-grid.d.cts +23 -0
  26. package/dist/components/cta-card-grid.d.ts +23 -0
  27. package/dist/components/cta-card-grid.js +33 -0
  28. package/dist/components/cta-card-grid.js.map +1 -0
  29. package/dist/components/hero-slider.cjs +133 -0
  30. package/dist/components/hero-slider.cjs.map +1 -0
  31. package/dist/components/hero-slider.d.cts +12 -0
  32. package/dist/components/hero-slider.d.ts +12 -0
  33. package/dist/components/hero-slider.js +98 -0
  34. package/dist/components/hero-slider.js.map +1 -0
  35. package/dist/components/launchpad-grid.cjs +77 -0
  36. package/dist/components/launchpad-grid.cjs.map +1 -0
  37. package/dist/components/launchpad-grid.d.cts +20 -0
  38. package/dist/components/launchpad-grid.d.ts +20 -0
  39. package/dist/components/launchpad-grid.js +43 -0
  40. package/dist/components/launchpad-grid.js.map +1 -0
  41. package/dist/components/listing-card.cjs +146 -0
  42. package/dist/components/listing-card.cjs.map +1 -0
  43. package/dist/components/listing-card.d.cts +16 -0
  44. package/dist/components/listing-card.d.ts +16 -0
  45. package/dist/components/listing-card.js +111 -0
  46. package/dist/components/listing-card.js.map +1 -0
  47. package/dist/data/activity.cjs +48 -0
  48. package/dist/data/activity.cjs.map +1 -0
  49. package/dist/data/activity.d.cts +16 -0
  50. package/dist/data/activity.d.ts +16 -0
  51. package/dist/data/activity.js +23 -0
  52. package/dist/data/activity.js.map +1 -0
  53. package/dist/index.cjs +35 -2
  54. package/dist/index.cjs.map +1 -1
  55. package/dist/index.d.cts +11 -0
  56. package/dist/index.d.ts +11 -0
  57. package/dist/index.js +22 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/medialane.css +184 -0
  60. package/dist/utils/time.cjs +42 -0
  61. package/dist/utils/time.cjs.map +1 -0
  62. package/dist/utils/time.d.cts +7 -0
  63. package/dist/utils/time.d.ts +7 -0
  64. package/dist/utils/time.js +18 -0
  65. package/dist/utils/time.js.map +1 -0
  66. package/package.json +3 -2
@@ -0,0 +1,184 @@
1
+ /* Medialane Design System — shared CSS
2
+ Imported by apps via: import "@medialane/ui/styles"
3
+ Do NOT import @tailwind directives here — apps handle that.
4
+ All classes here are pure CSS, no @apply. */
5
+
6
+ /* ── Scrollbars ───────────────────────────────────────────────────────── */
7
+ ::-webkit-scrollbar { width: 4px; height: 4px; }
8
+ ::-webkit-scrollbar-track { background: transparent; }
9
+ ::-webkit-scrollbar-thumb { background: hsl(var(--border)); border-radius: 4px; }
10
+ .scrollbar-none { scrollbar-width: none; }
11
+ .scrollbar-none::-webkit-scrollbar { display: none; }
12
+ .scrollbar-hide { scrollbar-width: none; }
13
+ .scrollbar-hide::-webkit-scrollbar { display: none; }
14
+
15
+ /* ── Glass ────────────────────────────────────────────────────────────── */
16
+ .glass {
17
+ background: rgba(10, 14, 30, 0.60);
18
+ backdrop-filter: blur(16px);
19
+ -webkit-backdrop-filter: blur(16px);
20
+ border: 1px solid rgba(255, 255, 255, 0.06);
21
+ }
22
+ .glass-light {
23
+ background: rgba(255, 255, 255, 0.80);
24
+ backdrop-filter: blur(16px);
25
+ -webkit-backdrop-filter: blur(16px);
26
+ border: 1px solid rgba(255, 255, 255, 0.5);
27
+ }
28
+
29
+ /* ── Typography gradients ─────────────────────────────────────────────── */
30
+ .gradient-text {
31
+ background: linear-gradient(135deg, #a855f7 0%, #6366f1 40%, #2563eb 100%);
32
+ -webkit-background-clip: text;
33
+ -webkit-text-fill-color: transparent;
34
+ background-clip: text;
35
+ }
36
+ .gradient-text-warm {
37
+ background: linear-gradient(135deg, #f43f5e 0%, #ea580c 60%, #f59e0b 100%);
38
+ -webkit-background-clip: text;
39
+ -webkit-text-fill-color: transparent;
40
+ background-clip: text;
41
+ }
42
+ .gradient-text-gold {
43
+ background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 50%, #ea580c 100%);
44
+ -webkit-background-clip: text;
45
+ -webkit-text-fill-color: transparent;
46
+ background-clip: text;
47
+ }
48
+
49
+ /* ── Price ────────────────────────────────────────────────────────────── */
50
+ .price-value {
51
+ color: hsl(var(--price));
52
+ font-weight: 700;
53
+ font-variant-numeric: tabular-nums;
54
+ }
55
+
56
+ /* ── Section label ────────────────────────────────────────────────────── */
57
+ .section-label {
58
+ font-size: 0.625rem;
59
+ font-weight: 700;
60
+ letter-spacing: 0.14em;
61
+ text-transform: uppercase;
62
+ color: hsl(var(--muted-foreground));
63
+ }
64
+
65
+ /* ── Pill badge ───────────────────────────────────────────────────────── */
66
+ .pill-badge {
67
+ display: inline-flex;
68
+ align-items: center;
69
+ gap: 0.375rem;
70
+ border-radius: 9999px;
71
+ border: 1px solid hsl(var(--primary) / 0.25);
72
+ background: hsl(var(--primary) / 0.08);
73
+ padding: 0.25rem 0.875rem;
74
+ font-size: 0.6875rem;
75
+ font-weight: 700;
76
+ letter-spacing: 0.1em;
77
+ text-transform: uppercase;
78
+ color: hsl(var(--primary));
79
+ }
80
+
81
+ /* ── Aurora blobs ─────────────────────────────────────────────────────── */
82
+ .aurora-purple { position: absolute; border-radius: 9999px; background: #9333ea; filter: blur(100px); opacity: 0.07; }
83
+ .aurora-blue { position: absolute; border-radius: 9999px; background: #2563eb; filter: blur(120px); opacity: 0.06; }
84
+ .aurora-rose { position: absolute; border-radius: 9999px; background: #f43f5e; filter: blur(100px); opacity: 0.05; }
85
+ .aurora-orange { position: absolute; border-radius: 9999px; background: #ea580c; filter: blur(110px); opacity: 0.04; }
86
+ .dark .aurora-purple { opacity: 0.15; }
87
+ .dark .aurora-blue { opacity: 0.11; }
88
+ .dark .aurora-rose { opacity: 0.09; }
89
+ .dark .aurora-orange { opacity: 0.07; }
90
+
91
+ /* ── Card primitives ──────────────────────────────────────────────────── */
92
+ .card-base {
93
+ border-radius: calc(var(--radius) * 1.25);
94
+ border: 1px solid hsl(var(--border));
95
+ background: hsl(var(--card));
96
+ overflow: hidden;
97
+ will-change: transform;
98
+ }
99
+ .bento-cell {
100
+ border-radius: calc(var(--radius) * 1.25);
101
+ border: 1px solid hsl(var(--border));
102
+ background: hsl(var(--card));
103
+ overflow: hidden;
104
+ position: relative;
105
+ }
106
+
107
+ /* ── Background grid ──────────────────────────────────────────────────── */
108
+ .bg-grid {
109
+ background-image:
110
+ linear-gradient(hsl(var(--border) / 0.4) 1px, transparent 1px),
111
+ linear-gradient(90deg, hsl(var(--border) / 0.4) 1px, transparent 1px);
112
+ background-size: 48px 48px;
113
+ }
114
+
115
+ /* ── Snap scroll ──────────────────────────────────────────────────────── */
116
+ .snap-x-mandatory { scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; }
117
+ .snap-start { scroll-snap-align: start; }
118
+
119
+ /* ── Keyframes ────────────────────────────────────────────────────────── */
120
+ @keyframes float {
121
+ 0%, 100% { transform: translateY(0px); }
122
+ 50% { transform: translateY(-10px); }
123
+ }
124
+ @keyframes blob-pulse {
125
+ 0%, 100% { transform: scale(1) rotate(0deg); opacity: 0.07; }
126
+ 50% { transform: scale(1.15) rotate(10deg); opacity: 0.14; }
127
+ }
128
+ @keyframes blob-pulse-slow {
129
+ 0%, 100% { transform: scale(1) rotate(0deg); opacity: 0.05; }
130
+ 50% { transform: scale(1.2) rotate(-8deg); opacity: 0.11; }
131
+ }
132
+ @keyframes shimmer {
133
+ 0% { background-position: -200% 0; }
134
+ 100% { background-position: 200% 0; }
135
+ }
136
+ @keyframes pulse-glow {
137
+ 0%, 100% { opacity: 0.6; }
138
+ 50% { opacity: 1; }
139
+ }
140
+ @keyframes spin-slow { to { transform: rotate(360deg); } }
141
+ @keyframes digit-in {
142
+ from { transform: translateY(-14px); opacity: 0; }
143
+ to { transform: translateY(0); opacity: 1; }
144
+ }
145
+ @keyframes scroll-strip {
146
+ 0% { transform: translateX(0); }
147
+ 100% { transform: translateX(-50%); }
148
+ }
149
+ @keyframes kenburns {
150
+ 0% { transform: scale(1.0) translate(0%, 0%); }
151
+ 100% { transform: scale(1.08) translate(-1.5%, -1%); }
152
+ }
153
+ @keyframes border-flow {
154
+ 0%, 100% { background-position: 0% 50%; }
155
+ 50% { background-position: 100% 50%; }
156
+ }
157
+
158
+ /* ── Animation utilities ──────────────────────────────────────────────── */
159
+ .animate-float { animation: float 5s ease-in-out infinite; }
160
+ .animate-blob { animation: blob-pulse 7s ease-in-out infinite; }
161
+ .animate-blob-slow { animation: blob-pulse-slow 9s ease-in-out infinite 2s; }
162
+ .animate-pulse-glow { animation: pulse-glow 2s ease-in-out infinite; }
163
+ .animate-spin-slow { animation: spin-slow 24s linear infinite; }
164
+ .animate-sparkle { animation: pulse-glow 2.5s ease-in-out infinite; }
165
+ .animate-kenburns { animation: kenburns 8s ease-in-out infinite alternate; transform-origin: center center; }
166
+
167
+ /* ── Reduced motion ───────────────────────────────────────────────────── */
168
+ @media (prefers-reduced-motion: reduce) {
169
+ .animate-float, .animate-blob, .animate-blob-slow,
170
+ .animate-pulse-glow, .animate-spin-slow, .animate-sparkle,
171
+ .animate-kenburns { animation: none; }
172
+ }
173
+
174
+ /* ── Input spinners (price inputs use custom suffix) ──────────────────── */
175
+ input[type="number"]::-webkit-outer-spin-button,
176
+ input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
177
+ input[type="number"] { -moz-appearance: textfield; }
178
+
179
+ /* ── Animated gradient border (marketplace buy button) ────────────────── */
180
+ .btn-border-animated {
181
+ background: linear-gradient(270deg, #2563eb, #9333ea, #f43f5e, #ea580c, #2563eb);
182
+ background-size: 300% 300%;
183
+ animation: border-flow 5s ease infinite;
184
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var time_exports = {};
20
+ __export(time_exports, {
21
+ timeAgo: () => timeAgo
22
+ });
23
+ module.exports = __toCommonJS(time_exports);
24
+ function timeAgo(iso) {
25
+ const diff = Date.now() - new Date(iso).getTime();
26
+ const s = Math.floor(diff / 1e3);
27
+ if (s < 60) return "just now";
28
+ const m = Math.floor(s / 60);
29
+ if (m < 60) return `${m}m ago`;
30
+ const h = Math.floor(m / 60);
31
+ if (h < 24) return `${h}h ago`;
32
+ const d = Math.floor(h / 24);
33
+ if (d < 30) return `${d}d ago`;
34
+ const mo = Math.floor(d / 30);
35
+ if (mo < 12) return `${mo}mo ago`;
36
+ return `${Math.floor(mo / 12)}y ago`;
37
+ }
38
+ // Annotate the CommonJS export names for ESM import in node:
39
+ 0 && (module.exports = {
40
+ timeAgo
41
+ });
42
+ //# sourceMappingURL=time.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/time.ts"],"sourcesContent":["/**\n * Returns a human-readable relative time string.\n * e.g. \"just now\", \"2m ago\", \"3h ago\", \"5d ago\"\n */\nexport function timeAgo(iso: string): string {\n const diff = Date.now() - new Date(iso).getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return \"just now\";\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,SAAS,QAAQ,KAAqB;AAC3C,QAAM,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,QAAQ;AAChD,QAAM,IAAI,KAAK,MAAM,OAAO,GAAI;AAChC,MAAI,IAAI,GAAI,QAAO;AACnB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE;AAC5B,MAAI,KAAK,GAAI,QAAO,GAAG,EAAE;AACzB,SAAO,GAAG,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/B;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns a human-readable relative time string.
3
+ * e.g. "just now", "2m ago", "3h ago", "5d ago"
4
+ */
5
+ declare function timeAgo(iso: string): string;
6
+
7
+ export { timeAgo };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns a human-readable relative time string.
3
+ * e.g. "just now", "2m ago", "3h ago", "5d ago"
4
+ */
5
+ declare function timeAgo(iso: string): string;
6
+
7
+ export { timeAgo };
@@ -0,0 +1,18 @@
1
+ function timeAgo(iso) {
2
+ const diff = Date.now() - new Date(iso).getTime();
3
+ const s = Math.floor(diff / 1e3);
4
+ if (s < 60) return "just now";
5
+ const m = Math.floor(s / 60);
6
+ if (m < 60) return `${m}m ago`;
7
+ const h = Math.floor(m / 60);
8
+ if (h < 24) return `${h}h ago`;
9
+ const d = Math.floor(h / 24);
10
+ if (d < 30) return `${d}d ago`;
11
+ const mo = Math.floor(d / 30);
12
+ if (mo < 12) return `${mo}mo ago`;
13
+ return `${Math.floor(mo / 12)}y ago`;
14
+ }
15
+ export {
16
+ timeAgo
17
+ };
18
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/time.ts"],"sourcesContent":["/**\n * Returns a human-readable relative time string.\n * e.g. \"just now\", \"2m ago\", \"3h ago\", \"5d ago\"\n */\nexport function timeAgo(iso: string): string {\n const diff = Date.now() - new Date(iso).getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return \"just now\";\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n"],"mappings":"AAIO,SAAS,QAAQ,KAAqB;AAC3C,QAAM,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,QAAQ;AAChD,QAAM,IAAI,KAAK,MAAM,OAAO,GAAI;AAChC,MAAI,IAAI,GAAI,QAAO;AACnB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE;AAC5B,MAAI,KAAK,GAAI,QAAO,GAAG,EAAE;AACzB,SAAO,GAAG,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/B;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/ui",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "Shared UI components for Medialane apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -16,7 +16,8 @@
16
16
  "types": "./dist/preset/tailwind.d.ts",
17
17
  "import": "./dist/preset/tailwind.js",
18
18
  "require": "./dist/preset/tailwind.cjs"
19
- }
19
+ },
20
+ "./styles": "./dist/medialane.css"
20
21
  },
21
22
  "license": "MIT",
22
23
  "publishConfig": {