@tangle-network/sandbox-ui 0.130.1 → 0.131.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/dist/assets.d.ts +16 -2
- package/dist/assets.js +138 -52
- package/dist/globals.css +47 -8
- package/dist/styles.css +47 -8
- package/package.json +1 -1
package/dist/assets.d.ts
CHANGED
|
@@ -189,11 +189,13 @@ interface ApprovalQueueProps {
|
|
|
189
189
|
onSave?: (spec: AssetSpec) => void;
|
|
190
190
|
onRevisionRequest?: (id: string, instruction: string) => void;
|
|
191
191
|
onRenderRequest?: (id: string) => void;
|
|
192
|
+
/** Opens one asset's detail view, with the ids the queue shows, in order, for previous and next. */
|
|
193
|
+
onOpen?: (id: string, visibleIds: string[]) => void;
|
|
192
194
|
renderingIds?: Set<string>;
|
|
193
195
|
previewUrls?: Record<string, string>;
|
|
194
196
|
className?: string;
|
|
195
197
|
}
|
|
196
|
-
export declare function ApprovalQueue({ assets, variantCounts, onApprove, onReject, onEdit, onSave, onRevisionRequest, onRenderRequest, renderingIds, previewUrls, className }: ApprovalQueueProps): React$1.JSX.Element;
|
|
198
|
+
export declare function ApprovalQueue({ assets, variantCounts, onApprove, onReject, onEdit, onSave, onRevisionRequest, onRenderRequest, onOpen, renderingIds, previewUrls, className }: ApprovalQueueProps): React$1.JSX.Element;
|
|
197
199
|
//#endregion
|
|
198
200
|
//#region src/assets/asset-card.d.ts
|
|
199
201
|
interface AssetCardProps {
|
|
@@ -202,9 +204,15 @@ interface AssetCardProps {
|
|
|
202
204
|
onApprove?: (id: string) => void;
|
|
203
205
|
onReject?: (id: string) => void;
|
|
204
206
|
onEdit?: (id: string) => void;
|
|
207
|
+
/** Opens the asset's detail view. When set, the thumbnail and card body are one click target. */
|
|
208
|
+
onOpen?: (id: string) => void;
|
|
205
209
|
className?: string;
|
|
206
210
|
}
|
|
207
|
-
|
|
211
|
+
/** The URL of an image slide that is one picture with nothing layered on it. */
|
|
212
|
+
export declare function imageOnlyUrl(content: ImageContent): string | null;
|
|
213
|
+
/** The still frame a video asset carries: its first image scene or image slide. */
|
|
214
|
+
export declare function videoPosterUrl(content: VideoContent): string | null;
|
|
215
|
+
export declare function AssetCard({ spec, variantCount, onApprove, onReject, onEdit, onOpen, className }: AssetCardProps): import("react").JSX.Element;
|
|
208
216
|
//#endregion
|
|
209
217
|
//#region src/assets/asset-editor.d.ts
|
|
210
218
|
interface AssetEditorProps {
|
|
@@ -218,6 +226,12 @@ interface AssetEditorProps {
|
|
|
218
226
|
}
|
|
219
227
|
export declare function AssetEditor({ spec, previewUrl, isRendering, onSave, onRenderRequest, onRevisionRequest, className }: AssetEditorProps): React$1.JSX.Element;
|
|
220
228
|
//#endregion
|
|
229
|
+
//#region src/assets/labels.d.ts
|
|
230
|
+
/** Reader-facing name for each asset format. */
|
|
231
|
+
export declare const ASSET_FORMAT_LABEL: Record<AssetFormat, string>;
|
|
232
|
+
/** Reader-facing name for each review status. */
|
|
233
|
+
export declare const ASSET_STATUS_LABEL: Record<AssetStatus, string>;
|
|
234
|
+
//#endregion
|
|
221
235
|
//#region src/assets/preview/copy-preview.d.ts
|
|
222
236
|
interface CopyPreviewProps {
|
|
223
237
|
content: CopyContent;
|
package/dist/assets.js
CHANGED
|
@@ -3,7 +3,7 @@ import { Badge, Button, Input, Label, Textarea } from "@tangle-network/ui/primit
|
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import * as React$1 from "react";
|
|
5
5
|
import { Fragment as Fragment$1 } from "react";
|
|
6
|
-
import { Check, CheckCheck, ChevronDown, ChevronLeft, ChevronRight, Film, GitBranch, Loader2, MessageSquare, Pencil, Play, Save, Search, X } from "lucide-react";
|
|
6
|
+
import { Check, CheckCheck, ChevronDown, ChevronLeft, ChevronRight, Film, GitBranch, Loader2, Maximize2, MessageSquare, Pencil, Play, Save, Search, X } from "lucide-react";
|
|
7
7
|
//#region src/assets/preview/image-preview.tsx
|
|
8
8
|
const ASPECT = {
|
|
9
9
|
feed: "aspect-square",
|
|
@@ -118,6 +118,29 @@ function ImagePreview({ content, brand, format = "feed", className }) {
|
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
//#endregion
|
|
121
|
+
//#region src/assets/labels.ts
|
|
122
|
+
/** Reader-facing name for each asset format. */
|
|
123
|
+
const ASSET_FORMAT_LABEL = {
|
|
124
|
+
email: "Email",
|
|
125
|
+
"image:feed": "Feed image",
|
|
126
|
+
"image:story": "Story",
|
|
127
|
+
"image:carousel": "Carousel",
|
|
128
|
+
"video:reel": "Reel",
|
|
129
|
+
"video:feed": "Feed video",
|
|
130
|
+
"copy:caption": "Caption",
|
|
131
|
+
"copy:headline": "Headline",
|
|
132
|
+
"copy:sms": "SMS"
|
|
133
|
+
};
|
|
134
|
+
/** Reader-facing name for each review status. */
|
|
135
|
+
const ASSET_STATUS_LABEL = {
|
|
136
|
+
draft: "Draft",
|
|
137
|
+
pending_review: "Pending review",
|
|
138
|
+
approved: "Approved",
|
|
139
|
+
rejected: "Rejected",
|
|
140
|
+
scheduled: "Scheduled",
|
|
141
|
+
published: "Published"
|
|
142
|
+
};
|
|
143
|
+
//#endregion
|
|
121
144
|
//#region src/assets/asset-card.tsx
|
|
122
145
|
const STATUS_VARIANT = {
|
|
123
146
|
draft: "secondary",
|
|
@@ -127,111 +150,173 @@ const STATUS_VARIANT = {
|
|
|
127
150
|
scheduled: "secondary",
|
|
128
151
|
published: "default"
|
|
129
152
|
};
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
153
|
+
/** The URL of an image slide that is one picture with nothing layered on it. */
|
|
154
|
+
function imageOnlyUrl(content) {
|
|
155
|
+
const slide = content.slides[0];
|
|
156
|
+
return slide && slide.layers.length === 0 && slide.background.type === "image" ? slide.background.url : null;
|
|
157
|
+
}
|
|
158
|
+
/** The still frame a video asset carries: its first image scene or image slide. */
|
|
159
|
+
function videoPosterUrl(content) {
|
|
160
|
+
for (const scene of content.scenes) {
|
|
161
|
+
if (scene.type === "image-reveal") return scene.imageUrl;
|
|
162
|
+
if (scene.type === "slide" && scene.slide.background.type === "image") return scene.slide.background.url;
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
function formatDuration(seconds) {
|
|
167
|
+
const whole = Math.max(0, Math.round(seconds));
|
|
168
|
+
return `${Math.floor(whole / 60)}:${String(whole % 60).padStart(2, "0")}`;
|
|
169
|
+
}
|
|
170
|
+
/** A short phrase that tells one asset from another of the same format. */
|
|
171
|
+
function assetSummary(spec) {
|
|
172
|
+
if (spec.format === "email") return spec.content.subject || null;
|
|
173
|
+
if (spec.format.startsWith("copy:")) return spec.content.headline || null;
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
138
176
|
function Thumbnail({ spec }) {
|
|
139
177
|
const { format, brand, content } = spec;
|
|
140
178
|
if (format === "email") {
|
|
141
179
|
const ec = content;
|
|
142
180
|
return /* @__PURE__ */ jsxs("div", {
|
|
143
|
-
className: "
|
|
181
|
+
className: "flex h-full flex-col gap-1 p-3 text-sm",
|
|
144
182
|
children: [/* @__PURE__ */ jsx("div", {
|
|
145
|
-
className: "font-medium
|
|
183
|
+
className: "line-clamp-3 font-medium",
|
|
146
184
|
children: ec.subject
|
|
147
185
|
}), /* @__PURE__ */ jsxs("div", {
|
|
148
|
-
className: "text-muted-foreground
|
|
186
|
+
className: "text-xs text-muted-foreground",
|
|
149
187
|
children: [ec.sections.length, " sections"]
|
|
150
188
|
})]
|
|
151
189
|
});
|
|
152
190
|
}
|
|
153
|
-
if (format.startsWith("image:"))
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
191
|
+
if (format.startsWith("image:")) {
|
|
192
|
+
const ic = content;
|
|
193
|
+
const url = imageOnlyUrl(ic);
|
|
194
|
+
if (url) return /* @__PURE__ */ jsx("img", {
|
|
195
|
+
src: url,
|
|
196
|
+
alt: "",
|
|
197
|
+
loading: "lazy",
|
|
198
|
+
decoding: "async",
|
|
199
|
+
className: "h-full w-full object-contain"
|
|
200
|
+
});
|
|
201
|
+
return /* @__PURE__ */ jsx("div", {
|
|
202
|
+
className: "h-full overflow-hidden",
|
|
203
|
+
children: /* @__PURE__ */ jsx(ImagePreview, {
|
|
204
|
+
content: ic,
|
|
205
|
+
brand,
|
|
206
|
+
format: format === "image:story" ? "story" : "feed"
|
|
207
|
+
})
|
|
208
|
+
});
|
|
209
|
+
}
|
|
162
210
|
if (format.startsWith("video:")) {
|
|
163
211
|
const vc = content;
|
|
212
|
+
const poster = videoPosterUrl(vc);
|
|
164
213
|
return /* @__PURE__ */ jsxs("div", {
|
|
165
|
-
className: "
|
|
166
|
-
children: [
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
214
|
+
className: "relative h-full w-full",
|
|
215
|
+
children: [
|
|
216
|
+
poster ? /* @__PURE__ */ jsx("img", {
|
|
217
|
+
src: poster,
|
|
218
|
+
alt: "",
|
|
219
|
+
loading: "lazy",
|
|
220
|
+
decoding: "async",
|
|
221
|
+
className: "h-full w-full object-contain"
|
|
222
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
223
|
+
className: "flex h-full flex-col gap-1 p-3 text-sm",
|
|
224
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
225
|
+
className: "font-medium",
|
|
226
|
+
children: [vc.scenes.length, " scenes"]
|
|
227
|
+
})
|
|
228
|
+
}),
|
|
229
|
+
/* @__PURE__ */ jsx("span", {
|
|
230
|
+
className: "pointer-events-none absolute top-1/2 left-1/2 flex size-10 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-black/60 text-white",
|
|
231
|
+
children: /* @__PURE__ */ jsx(Play, {
|
|
232
|
+
size: 18,
|
|
233
|
+
className: "translate-x-px",
|
|
234
|
+
"aria-hidden": true
|
|
235
|
+
})
|
|
236
|
+
}),
|
|
237
|
+
/* @__PURE__ */ jsx("span", {
|
|
238
|
+
className: "pointer-events-none absolute right-2 bottom-2 rounded bg-black/70 px-1.5 py-0.5 text-xs text-white tabular-nums",
|
|
239
|
+
children: formatDuration(vc.durationSeconds)
|
|
240
|
+
})
|
|
241
|
+
]
|
|
173
242
|
});
|
|
174
243
|
}
|
|
175
244
|
if (format.startsWith("copy:")) {
|
|
176
245
|
const cc = content;
|
|
177
246
|
return /* @__PURE__ */ jsxs("div", {
|
|
178
|
-
className: "
|
|
247
|
+
className: "flex h-full flex-col gap-1 p-3 text-sm",
|
|
179
248
|
children: [/* @__PURE__ */ jsx("div", {
|
|
180
|
-
className: "font-medium
|
|
249
|
+
className: "line-clamp-2 font-medium",
|
|
181
250
|
children: cc.headline
|
|
182
251
|
}), /* @__PURE__ */ jsx("div", {
|
|
183
|
-
className: "
|
|
252
|
+
className: "line-clamp-4 text-xs text-muted-foreground",
|
|
184
253
|
children: cc.body
|
|
185
254
|
})]
|
|
186
255
|
});
|
|
187
256
|
}
|
|
188
257
|
return null;
|
|
189
258
|
}
|
|
190
|
-
function AssetCard({ spec, variantCount, onApprove, onReject, onEdit, className }) {
|
|
259
|
+
function AssetCard({ spec, variantCount, onApprove, onReject, onEdit, onOpen, className }) {
|
|
260
|
+
const formatLabel = ASSET_FORMAT_LABEL[spec.format] ?? spec.format;
|
|
261
|
+
const statusLabel = ASSET_STATUS_LABEL[spec.status] ?? spec.status;
|
|
262
|
+
const summary = assetSummary(spec);
|
|
263
|
+
const hasActions = Boolean(onEdit || spec.status === "pending_review" && (onReject || onApprove));
|
|
191
264
|
return /* @__PURE__ */ jsxs("div", {
|
|
192
|
-
|
|
265
|
+
"data-asset-id": spec.id,
|
|
266
|
+
className: cn("group relative flex flex-col overflow-hidden rounded-lg border border-border bg-card transition-[border-color,box-shadow]", onOpen && "hover:border-primary/60 hover:shadow-md", className),
|
|
193
267
|
children: [
|
|
194
|
-
/* @__PURE__ */ jsx("
|
|
195
|
-
|
|
196
|
-
|
|
268
|
+
onOpen && /* @__PURE__ */ jsx("button", {
|
|
269
|
+
type: "button",
|
|
270
|
+
"data-asset-open": "",
|
|
271
|
+
onClick: () => onOpen(spec.id),
|
|
272
|
+
"aria-label": `Open ${formatLabel.toLowerCase()}${summary ? `: ${summary}` : ""}, ${statusLabel.toLowerCase()}`,
|
|
273
|
+
className: "absolute inset-0 z-[1] cursor-pointer rounded-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset"
|
|
197
274
|
}),
|
|
198
275
|
/* @__PURE__ */ jsxs("div", {
|
|
199
|
-
className: "
|
|
276
|
+
className: "relative aspect-square overflow-hidden bg-muted/40",
|
|
277
|
+
children: [/* @__PURE__ */ jsx(Thumbnail, { spec }), onOpen && /* @__PURE__ */ jsx("span", {
|
|
278
|
+
"aria-hidden": true,
|
|
279
|
+
className: "pointer-events-none absolute top-2 right-2 flex size-7 items-center justify-center rounded-md bg-background/90 text-foreground opacity-0 shadow-sm transition-opacity group-hover:opacity-100 group-focus-within:opacity-100",
|
|
280
|
+
children: /* @__PURE__ */ jsx(Maximize2, { size: 14 })
|
|
281
|
+
})]
|
|
282
|
+
}),
|
|
283
|
+
/* @__PURE__ */ jsxs("div", {
|
|
284
|
+
className: "flex items-center gap-2 px-2.5 py-2",
|
|
200
285
|
children: [
|
|
201
286
|
/* @__PURE__ */ jsx("span", {
|
|
202
|
-
className: "text-
|
|
203
|
-
children:
|
|
287
|
+
className: "min-w-0 flex-1 truncate text-xs text-muted-foreground",
|
|
288
|
+
children: formatLabel
|
|
204
289
|
}),
|
|
205
290
|
/* @__PURE__ */ jsx(Badge, {
|
|
206
291
|
variant: STATUS_VARIANT[spec.status],
|
|
207
|
-
className: "
|
|
208
|
-
children:
|
|
292
|
+
className: "shrink-0 text-xs",
|
|
293
|
+
children: statusLabel
|
|
209
294
|
}),
|
|
210
295
|
variantCount !== void 0 && variantCount > 0 && /* @__PURE__ */ jsxs("span", {
|
|
211
|
-
className: "flex items-center gap-0.5 text-
|
|
212
|
-
children: [/* @__PURE__ */ jsx(GitBranch, { size:
|
|
296
|
+
className: "flex shrink-0 items-center gap-0.5 text-xs text-muted-foreground",
|
|
297
|
+
children: [/* @__PURE__ */ jsx(GitBranch, { size: 12 }), variantCount]
|
|
213
298
|
})
|
|
214
299
|
]
|
|
215
300
|
}),
|
|
216
|
-
/* @__PURE__ */ jsxs("div", {
|
|
217
|
-
className: "flex border-t border-border",
|
|
301
|
+
hasActions && /* @__PURE__ */ jsxs("div", {
|
|
302
|
+
className: "relative z-[2] flex border-t border-border bg-card",
|
|
218
303
|
children: [
|
|
219
304
|
onEdit && /* @__PURE__ */ jsxs("button", {
|
|
220
305
|
type: "button",
|
|
221
306
|
onClick: () => onEdit(spec.id),
|
|
222
|
-
className: "flex-1
|
|
307
|
+
className: "flex flex-1 items-center justify-center gap-1 py-2 text-xs text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground",
|
|
223
308
|
children: [/* @__PURE__ */ jsx(Pencil, { size: 12 }), "Edit"]
|
|
224
309
|
}),
|
|
225
310
|
onReject && spec.status === "pending_review" && /* @__PURE__ */ jsxs("button", {
|
|
226
311
|
type: "button",
|
|
227
312
|
onClick: () => onReject(spec.id),
|
|
228
|
-
className: "flex-1
|
|
313
|
+
className: "flex flex-1 items-center justify-center gap-1 border-l border-border py-2 text-xs text-muted-foreground transition-colors hover:bg-destructive/5 hover:text-destructive",
|
|
229
314
|
children: [/* @__PURE__ */ jsx(X, { size: 12 }), "Reject"]
|
|
230
315
|
}),
|
|
231
316
|
onApprove && spec.status === "pending_review" && /* @__PURE__ */ jsxs("button", {
|
|
232
317
|
type: "button",
|
|
233
318
|
onClick: () => onApprove(spec.id),
|
|
234
|
-
className: "flex-1
|
|
319
|
+
className: "flex flex-1 items-center justify-center gap-1 border-l border-border py-2 text-xs text-muted-foreground transition-colors hover:bg-green-600/5 hover:text-green-600",
|
|
235
320
|
children: [/* @__PURE__ */ jsx(Check, { size: 12 }), "Approve"]
|
|
236
321
|
})
|
|
237
322
|
]
|
|
@@ -886,7 +971,7 @@ const STATUS_OPTIONS = [
|
|
|
886
971
|
label: "Published"
|
|
887
972
|
}
|
|
888
973
|
];
|
|
889
|
-
function ApprovalQueue({ assets, variantCounts = {}, onApprove, onReject, onEdit, onSave, onRevisionRequest, onRenderRequest, renderingIds = /* @__PURE__ */ new Set(), previewUrls = {}, className }) {
|
|
974
|
+
function ApprovalQueue({ assets, variantCounts = {}, onApprove, onReject, onEdit, onSave, onRevisionRequest, onRenderRequest, onOpen, renderingIds = /* @__PURE__ */ new Set(), previewUrls = {}, className }) {
|
|
890
975
|
const [search, setSearch] = React$1.useState("");
|
|
891
976
|
const [formatFilter, setFormatFilter] = React$1.useState("all");
|
|
892
977
|
const [statusFilter, setStatusFilter] = React$1.useState("pending_review");
|
|
@@ -1013,10 +1098,11 @@ function ApprovalQueue({ assets, variantCounts = {}, onApprove, onReject, onEdit
|
|
|
1013
1098
|
variantCount: variantCounts[a.id],
|
|
1014
1099
|
onApprove,
|
|
1015
1100
|
onReject,
|
|
1016
|
-
onEdit: () => setEditingId(a.id)
|
|
1101
|
+
onEdit: () => setEditingId(a.id),
|
|
1102
|
+
onOpen: onOpen ? (id) => onOpen(id, filtered.map((asset) => asset.id)) : void 0
|
|
1017
1103
|
}, a.id))
|
|
1018
1104
|
})]
|
|
1019
1105
|
});
|
|
1020
1106
|
}
|
|
1021
1107
|
//#endregion
|
|
1022
|
-
export { ApprovalQueue, AssetCard, AssetEditor, CopyPreview, EmailPreview, ImagePreview, VideoPreview };
|
|
1108
|
+
export { ASSET_FORMAT_LABEL, ASSET_STATUS_LABEL, ApprovalQueue, AssetCard, AssetEditor, CopyPreview, EmailPreview, ImagePreview, VideoPreview, imageOnlyUrl, videoPosterUrl };
|
package/dist/globals.css
CHANGED
|
@@ -435,6 +435,12 @@
|
|
|
435
435
|
.z-50 {
|
|
436
436
|
z-index: 50;
|
|
437
437
|
}
|
|
438
|
+
.z-\[1\] {
|
|
439
|
+
z-index: 1;
|
|
440
|
+
}
|
|
441
|
+
.z-\[2\] {
|
|
442
|
+
z-index: 2;
|
|
443
|
+
}
|
|
438
444
|
.z-\[70\] {
|
|
439
445
|
z-index: 70;
|
|
440
446
|
}
|
|
@@ -736,6 +742,10 @@
|
|
|
736
742
|
width: calc(var(--spacing) * 6);
|
|
737
743
|
height: calc(var(--spacing) * 6);
|
|
738
744
|
}
|
|
745
|
+
.size-7 {
|
|
746
|
+
width: calc(var(--spacing) * 7);
|
|
747
|
+
height: calc(var(--spacing) * 7);
|
|
748
|
+
}
|
|
739
749
|
.size-8 {
|
|
740
750
|
width: calc(var(--spacing) * 8);
|
|
741
751
|
height: calc(var(--spacing) * 8);
|
|
@@ -1680,6 +1690,10 @@
|
|
|
1680
1690
|
--tw-translate-x: -50%;
|
|
1681
1691
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1682
1692
|
}
|
|
1693
|
+
.translate-x-px {
|
|
1694
|
+
--tw-translate-x: 1px;
|
|
1695
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1696
|
+
}
|
|
1683
1697
|
.-translate-y-1\/2 {
|
|
1684
1698
|
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
|
|
1685
1699
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -2659,6 +2673,12 @@
|
|
|
2659
2673
|
background-color: color-mix(in oklab, hsl(var(--background)) 80%, transparent);
|
|
2660
2674
|
}
|
|
2661
2675
|
}
|
|
2676
|
+
.bg-background\/90 {
|
|
2677
|
+
background-color: hsl(var(--background));
|
|
2678
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2679
|
+
background-color: color-mix(in oklab, hsl(var(--background)) 90%, transparent);
|
|
2680
|
+
}
|
|
2681
|
+
}
|
|
2662
2682
|
.bg-black {
|
|
2663
2683
|
background-color: var(--color-black);
|
|
2664
2684
|
}
|
|
@@ -2674,6 +2694,18 @@
|
|
|
2674
2694
|
background-color: color-mix(in oklab, var(--color-black) 50%, transparent);
|
|
2675
2695
|
}
|
|
2676
2696
|
}
|
|
2697
|
+
.bg-black\/60 {
|
|
2698
|
+
background-color: color-mix(in srgb, #000 60%, transparent);
|
|
2699
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2700
|
+
background-color: color-mix(in oklab, var(--color-black) 60%, transparent);
|
|
2701
|
+
}
|
|
2702
|
+
}
|
|
2703
|
+
.bg-black\/70 {
|
|
2704
|
+
background-color: color-mix(in srgb, #000 70%, transparent);
|
|
2705
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2706
|
+
background-color: color-mix(in oklab, var(--color-black) 70%, transparent);
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2677
2709
|
.bg-black\/80 {
|
|
2678
2710
|
background-color: color-mix(in srgb, #000 80%, transparent);
|
|
2679
2711
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -4193,6 +4225,9 @@
|
|
|
4193
4225
|
.ring-inset {
|
|
4194
4226
|
--tw-ring-inset: inset;
|
|
4195
4227
|
}
|
|
4228
|
+
.group-focus-within\:opacity-100:is(:where(.group):focus-within *) {
|
|
4229
|
+
opacity: 100%;
|
|
4230
|
+
}
|
|
4196
4231
|
@media (hover: hover) {
|
|
4197
4232
|
.group-hover\:block:is(:where(.group):hover *) {
|
|
4198
4233
|
display: block;
|
|
@@ -4367,14 +4402,6 @@
|
|
|
4367
4402
|
border-color: color-mix(in oklab, hsl(var(--accent)) 50%, transparent);
|
|
4368
4403
|
}
|
|
4369
4404
|
}
|
|
4370
|
-
.hover\:border-border\/80:hover {
|
|
4371
|
-
border-color: hsl(var(--border));
|
|
4372
|
-
}
|
|
4373
|
-
@supports (color: color-mix(in lab, red, red)) {
|
|
4374
|
-
.hover\:border-border\/80:hover {
|
|
4375
|
-
border-color: color-mix(in oklab, hsl(var(--border)) 80%, transparent);
|
|
4376
|
-
}
|
|
4377
|
-
}
|
|
4378
4405
|
.hover\:border-destructive\/30:hover {
|
|
4379
4406
|
border-color: hsl(var(--destructive));
|
|
4380
4407
|
}
|
|
@@ -4434,6 +4461,14 @@
|
|
|
4434
4461
|
border-color: color-mix(in oklab, hsl(var(--primary)) 50%, transparent);
|
|
4435
4462
|
}
|
|
4436
4463
|
}
|
|
4464
|
+
.hover\:border-primary\/60:hover {
|
|
4465
|
+
border-color: hsl(var(--primary));
|
|
4466
|
+
}
|
|
4467
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4468
|
+
.hover\:border-primary\/60:hover {
|
|
4469
|
+
border-color: color-mix(in oklab, hsl(var(--primary)) 60%, transparent);
|
|
4470
|
+
}
|
|
4471
|
+
}
|
|
4437
4472
|
.hover\:\!bg-primary:hover {
|
|
4438
4473
|
background-color: hsl(var(--primary)) !important;
|
|
4439
4474
|
}
|
|
@@ -4738,6 +4773,10 @@
|
|
|
4738
4773
|
.hover\:opacity-100:hover {
|
|
4739
4774
|
opacity: 100%;
|
|
4740
4775
|
}
|
|
4776
|
+
.hover\:shadow-md:hover {
|
|
4777
|
+
--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
4778
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
4779
|
+
}
|
|
4741
4780
|
.hover\:shadow-sm:hover {
|
|
4742
4781
|
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
4743
4782
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
package/dist/styles.css
CHANGED
|
@@ -435,6 +435,12 @@
|
|
|
435
435
|
.z-50 {
|
|
436
436
|
z-index: 50;
|
|
437
437
|
}
|
|
438
|
+
.z-\[1\] {
|
|
439
|
+
z-index: 1;
|
|
440
|
+
}
|
|
441
|
+
.z-\[2\] {
|
|
442
|
+
z-index: 2;
|
|
443
|
+
}
|
|
438
444
|
.z-\[70\] {
|
|
439
445
|
z-index: 70;
|
|
440
446
|
}
|
|
@@ -736,6 +742,10 @@
|
|
|
736
742
|
width: calc(var(--spacing) * 6);
|
|
737
743
|
height: calc(var(--spacing) * 6);
|
|
738
744
|
}
|
|
745
|
+
.size-7 {
|
|
746
|
+
width: calc(var(--spacing) * 7);
|
|
747
|
+
height: calc(var(--spacing) * 7);
|
|
748
|
+
}
|
|
739
749
|
.size-8 {
|
|
740
750
|
width: calc(var(--spacing) * 8);
|
|
741
751
|
height: calc(var(--spacing) * 8);
|
|
@@ -1680,6 +1690,10 @@
|
|
|
1680
1690
|
--tw-translate-x: -50%;
|
|
1681
1691
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1682
1692
|
}
|
|
1693
|
+
.translate-x-px {
|
|
1694
|
+
--tw-translate-x: 1px;
|
|
1695
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1696
|
+
}
|
|
1683
1697
|
.-translate-y-1\/2 {
|
|
1684
1698
|
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
|
|
1685
1699
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -2659,6 +2673,12 @@
|
|
|
2659
2673
|
background-color: color-mix(in oklab, hsl(var(--background)) 80%, transparent);
|
|
2660
2674
|
}
|
|
2661
2675
|
}
|
|
2676
|
+
.bg-background\/90 {
|
|
2677
|
+
background-color: hsl(var(--background));
|
|
2678
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2679
|
+
background-color: color-mix(in oklab, hsl(var(--background)) 90%, transparent);
|
|
2680
|
+
}
|
|
2681
|
+
}
|
|
2662
2682
|
.bg-black {
|
|
2663
2683
|
background-color: var(--color-black);
|
|
2664
2684
|
}
|
|
@@ -2674,6 +2694,18 @@
|
|
|
2674
2694
|
background-color: color-mix(in oklab, var(--color-black) 50%, transparent);
|
|
2675
2695
|
}
|
|
2676
2696
|
}
|
|
2697
|
+
.bg-black\/60 {
|
|
2698
|
+
background-color: color-mix(in srgb, #000 60%, transparent);
|
|
2699
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2700
|
+
background-color: color-mix(in oklab, var(--color-black) 60%, transparent);
|
|
2701
|
+
}
|
|
2702
|
+
}
|
|
2703
|
+
.bg-black\/70 {
|
|
2704
|
+
background-color: color-mix(in srgb, #000 70%, transparent);
|
|
2705
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2706
|
+
background-color: color-mix(in oklab, var(--color-black) 70%, transparent);
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2677
2709
|
.bg-black\/80 {
|
|
2678
2710
|
background-color: color-mix(in srgb, #000 80%, transparent);
|
|
2679
2711
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -4193,6 +4225,9 @@
|
|
|
4193
4225
|
.ring-inset {
|
|
4194
4226
|
--tw-ring-inset: inset;
|
|
4195
4227
|
}
|
|
4228
|
+
.group-focus-within\:opacity-100:is(:where(.group):focus-within *) {
|
|
4229
|
+
opacity: 100%;
|
|
4230
|
+
}
|
|
4196
4231
|
@media (hover: hover) {
|
|
4197
4232
|
.group-hover\:block:is(:where(.group):hover *) {
|
|
4198
4233
|
display: block;
|
|
@@ -4367,14 +4402,6 @@
|
|
|
4367
4402
|
border-color: color-mix(in oklab, hsl(var(--accent)) 50%, transparent);
|
|
4368
4403
|
}
|
|
4369
4404
|
}
|
|
4370
|
-
.hover\:border-border\/80:hover {
|
|
4371
|
-
border-color: hsl(var(--border));
|
|
4372
|
-
}
|
|
4373
|
-
@supports (color: color-mix(in lab, red, red)) {
|
|
4374
|
-
.hover\:border-border\/80:hover {
|
|
4375
|
-
border-color: color-mix(in oklab, hsl(var(--border)) 80%, transparent);
|
|
4376
|
-
}
|
|
4377
|
-
}
|
|
4378
4405
|
.hover\:border-destructive\/30:hover {
|
|
4379
4406
|
border-color: hsl(var(--destructive));
|
|
4380
4407
|
}
|
|
@@ -4434,6 +4461,14 @@
|
|
|
4434
4461
|
border-color: color-mix(in oklab, hsl(var(--primary)) 50%, transparent);
|
|
4435
4462
|
}
|
|
4436
4463
|
}
|
|
4464
|
+
.hover\:border-primary\/60:hover {
|
|
4465
|
+
border-color: hsl(var(--primary));
|
|
4466
|
+
}
|
|
4467
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4468
|
+
.hover\:border-primary\/60:hover {
|
|
4469
|
+
border-color: color-mix(in oklab, hsl(var(--primary)) 60%, transparent);
|
|
4470
|
+
}
|
|
4471
|
+
}
|
|
4437
4472
|
.hover\:\!bg-primary:hover {
|
|
4438
4473
|
background-color: hsl(var(--primary)) !important;
|
|
4439
4474
|
}
|
|
@@ -4738,6 +4773,10 @@
|
|
|
4738
4773
|
.hover\:opacity-100:hover {
|
|
4739
4774
|
opacity: 100%;
|
|
4740
4775
|
}
|
|
4776
|
+
.hover\:shadow-md:hover {
|
|
4777
|
+
--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
4778
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
4779
|
+
}
|
|
4741
4780
|
.hover\:shadow-sm:hover {
|
|
4742
4781
|
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
4743
4782
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/sandbox-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.131.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
|
|
6
6
|
"repository": {
|