@lovett/ui 0.0.5 → 0.0.6
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/index.d.ts +279 -115
- package/dist/index.js +479 -66
- package/dist/index.js.map +1 -1
- package/dist/styles.css +74 -0
- package/dist/tokens.css +181 -60
- package/package.json +21 -4
- package/src/__tests__/button.test.tsx +137 -0
- package/src/__tests__/card.test.tsx +103 -0
- package/src/__tests__/dead-render.test.tsx +117 -0
- package/src/__tests__/input.test.tsx +134 -0
- package/src/__tests__/modal.test.tsx +154 -0
- package/src/__tests__/page-shell.test.tsx +128 -0
- package/src/__tests__/setup.ts +43 -0
- package/src/__tests__/token-shape.test.ts +193 -0
- package/src/card.tsx +1 -1
- package/src/collapsible-card.tsx +85 -0
- package/src/data-grid/table-body.tsx +8 -1
- package/src/dropdown-menu.tsx +1 -1
- package/src/floating-status-bar.tsx +1 -1
- package/src/folder-tree-picker.tsx +5 -6
- package/src/frame-stack.tsx +27 -10
- package/src/hero-form-card.tsx +2 -2
- package/src/icons/brand.tsx +187 -0
- package/src/index.ts +32 -0
- package/src/lib/clipboard.ts +14 -0
- package/src/lib/color.ts +111 -0
- package/src/meta-cell.tsx +52 -0
- package/src/meta-previews/MetaFeedCarousel.tsx +1 -1
- package/src/meta-previews/MetaFeedPreview.tsx +1 -1
- package/src/modal.tsx +77 -6
- package/src/pill-button.tsx +23 -5
- package/src/profile-section.tsx +40 -9
- package/src/sortable-table.tsx +5 -1
- package/src/styles.css +74 -0
- package/src/tabs.tsx +4 -0
- package/src/tag-chip-input.tsx +1 -1
- package/src/theme-v2.css +466 -0
- package/src/tokens.css +181 -60
- package/src/v2/README.md +208 -0
- package/src/v2/__demo__/showcase.tsx +1045 -0
- package/src/v2/action.tsx +91 -0
- package/src/v2/callout.tsx +76 -0
- package/src/v2/document-section.tsx +82 -0
- package/src/v2/document-shell.tsx +0 -0
- package/src/v2/field-row.tsx +113 -0
- package/src/v2/icons.tsx +165 -0
- package/src/v2/index.ts +147 -0
- package/src/v2/layout.tsx +293 -0
- package/src/v2/progress-track.tsx +89 -0
- package/src/v2/stat-tile.tsx +129 -0
- package/src/v2/states.tsx +271 -0
- package/src/v2/status-pill.tsx +74 -0
- package/src/v2/theme.css +1861 -0
- package/src/v2/timeline.tsx +81 -0
- package/src/v2/tokens.ts +228 -0
- package/src/value-chip.tsx +76 -0
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
|
5
5
|
import { Minus, Check, EyeOff, Eye, ChevronDown, Search, Play, VolumeX, Volume2, X, Pencil, GripVertical, Loader2, ChevronUp, ChevronsUpDown, ChevronLeft, ChevronRight, SlidersHorizontal, Copy, Plus, FolderClosed, FolderPlus, Folder, Paperclip, Upload, Image, Code, Table as Table$1, FileText, FileType, AlertCircle, RotateCcw, Link2, ArrowRight, MoreHorizontal, ThumbsUp as ThumbsUp$1, MessageCircle, Share2, Lock, Info, BarChart3, ExternalLink } from 'lucide-react';
|
|
6
6
|
import { createPortal } from 'react-dom';
|
|
7
7
|
import { Link } from 'react-router-dom';
|
|
8
|
-
import { Toaster as Toaster$1
|
|
8
|
+
import { toast, Toaster as Toaster$1 } from 'sonner';
|
|
9
9
|
export { toast } from 'sonner';
|
|
10
10
|
import { useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCenter } from '@dnd-kit/core';
|
|
11
11
|
import { sortableKeyboardCoordinates, SortableContext, horizontalListSortingStrategy, rectSortingStrategy, verticalListSortingStrategy, useSortable, arrayMove } from '@dnd-kit/sortable';
|
|
@@ -17,7 +17,7 @@ import css from 'react-syntax-highlighter/dist/esm/languages/prism/css';
|
|
|
17
17
|
import diff from 'react-syntax-highlighter/dist/esm/languages/prism/diff';
|
|
18
18
|
import javascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript';
|
|
19
19
|
import json from 'react-syntax-highlighter/dist/esm/languages/prism/json';
|
|
20
|
-
import
|
|
20
|
+
import jsx66 from 'react-syntax-highlighter/dist/esm/languages/prism/jsx';
|
|
21
21
|
import markdown from 'react-syntax-highlighter/dist/esm/languages/prism/markdown';
|
|
22
22
|
import markup from 'react-syntax-highlighter/dist/esm/languages/prism/markup';
|
|
23
23
|
import python from 'react-syntax-highlighter/dist/esm/languages/prism/python';
|
|
@@ -167,7 +167,7 @@ function MetaItem({
|
|
|
167
167
|
style: { color: "rgb(var(--text-tertiary))" },
|
|
168
168
|
children: [
|
|
169
169
|
icon && /* @__PURE__ */ jsx("span", { style: { opacity: 0.7 }, className: "shrink-0 inline-flex", children: icon }),
|
|
170
|
-
/* @__PURE__ */ jsx("span", { className: "truncate
|
|
170
|
+
/* @__PURE__ */ jsx("span", { className: "truncate tabular-nums", children })
|
|
171
171
|
]
|
|
172
172
|
}
|
|
173
173
|
);
|
|
@@ -291,6 +291,59 @@ Card2.ActionButton = ActionButton;
|
|
|
291
291
|
Card2.IconTile = IconTile;
|
|
292
292
|
Card2.TagRow = TagRow;
|
|
293
293
|
var card_default = Card2;
|
|
294
|
+
function CollapsibleCard({
|
|
295
|
+
title,
|
|
296
|
+
icon,
|
|
297
|
+
meta,
|
|
298
|
+
actions,
|
|
299
|
+
defaultOpen = true,
|
|
300
|
+
contentClassName = "px-4 py-4",
|
|
301
|
+
children
|
|
302
|
+
}) {
|
|
303
|
+
const [open, setOpen] = useState(defaultOpen);
|
|
304
|
+
const bodyId = useId();
|
|
305
|
+
return /* @__PURE__ */ jsxs(card_default, { children: [
|
|
306
|
+
/* @__PURE__ */ jsxs(
|
|
307
|
+
"div",
|
|
308
|
+
{
|
|
309
|
+
className: "flex items-center justify-between gap-3 px-4 py-3",
|
|
310
|
+
style: {
|
|
311
|
+
borderBottom: `1px solid ${open ? "rgb(var(--border))" : "transparent"}`
|
|
312
|
+
},
|
|
313
|
+
children: [
|
|
314
|
+
/* @__PURE__ */ jsxs(
|
|
315
|
+
"button",
|
|
316
|
+
{
|
|
317
|
+
type: "button",
|
|
318
|
+
onClick: () => setOpen((o) => !o),
|
|
319
|
+
"aria-expanded": open,
|
|
320
|
+
"aria-controls": bodyId,
|
|
321
|
+
className: "flex min-w-0 flex-1 items-center gap-2 rounded-[var(--radius-sm)] py-0.5 text-left transition-colors focus-visible:outline-none focus-visible:[box-shadow:var(--ring-focus)]",
|
|
322
|
+
children: [
|
|
323
|
+
/* @__PURE__ */ jsx(
|
|
324
|
+
ChevronDown,
|
|
325
|
+
{
|
|
326
|
+
className: "h-4 w-4 shrink-0 transition-transform duration-200 ease-out motion-reduce:transition-none",
|
|
327
|
+
style: {
|
|
328
|
+
color: "rgb(var(--text-tertiary))",
|
|
329
|
+
transform: open ? "rotate(0deg)" : "rotate(-90deg)"
|
|
330
|
+
},
|
|
331
|
+
"aria-hidden": "true"
|
|
332
|
+
}
|
|
333
|
+
),
|
|
334
|
+
icon,
|
|
335
|
+
/* @__PURE__ */ jsx("span", { className: "truncate text-[14px] font-semibold", style: { color: "rgb(var(--foreground))" }, children: title }),
|
|
336
|
+
meta
|
|
337
|
+
]
|
|
338
|
+
}
|
|
339
|
+
),
|
|
340
|
+
actions && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2", children: actions })
|
|
341
|
+
]
|
|
342
|
+
}
|
|
343
|
+
),
|
|
344
|
+
open && /* @__PURE__ */ jsx("div", { id: bodyId, className: contentClassName, children })
|
|
345
|
+
] });
|
|
346
|
+
}
|
|
294
347
|
var VARIANT_CLASS = {
|
|
295
348
|
primary: "btn-primary",
|
|
296
349
|
secondary: "btn-secondary",
|
|
@@ -457,24 +510,60 @@ function Modal({ isOpen, onClose, title, children, className }) {
|
|
|
457
510
|
),
|
|
458
511
|
style: { borderRadius: "var(--radius-xl)" },
|
|
459
512
|
children: [
|
|
460
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between shrink-0 px-
|
|
461
|
-
/* @__PURE__ */ jsx("h2", { className: "text-
|
|
513
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 shrink-0 px-4 py-3", children: [
|
|
514
|
+
/* @__PURE__ */ jsx("h2", { className: "text-[15px] font-bold tracking-[-0.01em] text-[rgb(var(--foreground))]", children: title }),
|
|
462
515
|
/* @__PURE__ */ jsx(
|
|
463
516
|
"button",
|
|
464
517
|
{
|
|
465
518
|
onClick: onClose,
|
|
466
|
-
className: "
|
|
519
|
+
className: "inline-flex items-center justify-center w-6 h-6 shrink-0 rounded-[var(--radius-sm)] text-[rgb(var(--text-tertiary))] hover:bg-[rgb(var(--surface-hover))] hover:text-[rgb(var(--foreground))] transition-colors",
|
|
467
520
|
"aria-label": "Close",
|
|
468
|
-
children: /* @__PURE__ */ jsx(X, { className: "h-
|
|
521
|
+
children: /* @__PURE__ */ jsx(X, { className: "h-[15px] w-[15px]" })
|
|
469
522
|
}
|
|
470
523
|
)
|
|
471
524
|
] }),
|
|
472
|
-
children
|
|
525
|
+
renderBody(children)
|
|
473
526
|
]
|
|
474
527
|
}
|
|
475
528
|
)
|
|
476
529
|
] });
|
|
477
530
|
}
|
|
531
|
+
function renderBody(children) {
|
|
532
|
+
const kids = Children.toArray(children);
|
|
533
|
+
const tray = kids.find(
|
|
534
|
+
(c) => isValidElement(c) && c.type === Tray2
|
|
535
|
+
);
|
|
536
|
+
const footer = kids.find(
|
|
537
|
+
(c) => isValidElement(c) && c.type === Footer
|
|
538
|
+
);
|
|
539
|
+
if (!tray || !footer) return children;
|
|
540
|
+
const rest = kids.filter((c) => c !== tray && c !== footer);
|
|
541
|
+
const trayProps = tray.props;
|
|
542
|
+
const footerProps = footer.props;
|
|
543
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
544
|
+
rest,
|
|
545
|
+
/* @__PURE__ */ jsxs("div", { className: "ds-card-tray flex flex-col flex-1 min-h-0", children: [
|
|
546
|
+
/* @__PURE__ */ jsx(
|
|
547
|
+
"div",
|
|
548
|
+
{
|
|
549
|
+
...trayProps,
|
|
550
|
+
className: cn("flex-1 min-h-0 overflow-y-auto p-5", trayProps.className)
|
|
551
|
+
}
|
|
552
|
+
),
|
|
553
|
+
/* @__PURE__ */ jsx(
|
|
554
|
+
"div",
|
|
555
|
+
{
|
|
556
|
+
...footerProps,
|
|
557
|
+
className: cn(
|
|
558
|
+
"flex items-center justify-end gap-2 shrink-0 px-5 py-3.5 border-t",
|
|
559
|
+
footerProps.className
|
|
560
|
+
),
|
|
561
|
+
style: { borderColor: "rgb(var(--border))", ...footerProps.style }
|
|
562
|
+
}
|
|
563
|
+
)
|
|
564
|
+
] })
|
|
565
|
+
] });
|
|
566
|
+
}
|
|
478
567
|
function Tray2({ className, ...rest }) {
|
|
479
568
|
return /* @__PURE__ */ jsx(
|
|
480
569
|
"div",
|
|
@@ -863,10 +952,14 @@ function SectionHead({ icon, title, subtitle, actions }) {
|
|
|
863
952
|
const sizedIcon = isValidElement(icon) ? cloneElement(
|
|
864
953
|
icon,
|
|
865
954
|
{
|
|
955
|
+
// Sizing rides on `size`, which Lucide honours. A previous
|
|
956
|
+
// `h-[${HEAD_ICON_SIZE}px]` here never did anything: Tailwind
|
|
957
|
+
// scans source statically, so an interpolated class is never
|
|
958
|
+
// generated. Keep the literal in sync with HEAD_ICON_SIZE.
|
|
866
959
|
size: HEAD_ICON_SIZE,
|
|
867
960
|
className: cn(
|
|
868
961
|
icon.props.className,
|
|
869
|
-
|
|
962
|
+
"h-[17px] w-[17px]"
|
|
870
963
|
)
|
|
871
964
|
}
|
|
872
965
|
) : icon;
|
|
@@ -1045,12 +1138,13 @@ function ProfileSection(props) {
|
|
|
1045
1138
|
}
|
|
1046
1139
|
) : props.actions ?? /* @__PURE__ */ jsx(ActionButton3, { label: "Edit", children: /* @__PURE__ */ jsx(Pencil, { className: "h-[14px] w-[14px]" }) });
|
|
1047
1140
|
const children = editable ? props.children(isEditing) : props.children;
|
|
1141
|
+
const flat = props.flat ?? false;
|
|
1048
1142
|
return /* @__PURE__ */ jsxs(
|
|
1049
1143
|
"section",
|
|
1050
1144
|
{
|
|
1051
1145
|
id,
|
|
1052
1146
|
"data-section-id": id,
|
|
1053
|
-
"data-framed": "true",
|
|
1147
|
+
"data-framed": flat ? void 0 : "true",
|
|
1054
1148
|
className: cn("ds-card-surface flex flex-col", className),
|
|
1055
1149
|
style: { scrollMarginTop: "var(--section-scroll-offset)" },
|
|
1056
1150
|
children: [
|
|
@@ -1063,7 +1157,24 @@ function ProfileSection(props) {
|
|
|
1063
1157
|
actions: headActions
|
|
1064
1158
|
}
|
|
1065
1159
|
),
|
|
1066
|
-
|
|
1160
|
+
flat ? (
|
|
1161
|
+
/* One surface. The divider does the separating that the tray's
|
|
1162
|
+
fill does in the default shape. */
|
|
1163
|
+
/* @__PURE__ */ jsx(
|
|
1164
|
+
"div",
|
|
1165
|
+
{
|
|
1166
|
+
className: "px-4 pb-4 pt-4 border-t",
|
|
1167
|
+
style: { flex: "1 1 auto", borderColor: "rgb(var(--border))" },
|
|
1168
|
+
children
|
|
1169
|
+
}
|
|
1170
|
+
)
|
|
1171
|
+
) : (
|
|
1172
|
+
/* flex:1 lets the tray fill remaining height when the section is
|
|
1173
|
+
stretched (e.g. side-by-side in an equal-height grid), so trays
|
|
1174
|
+
bottom-align instead of leaving a gap under a shorter-header card.
|
|
1175
|
+
No effect on un-stretched (vertically-stacked) sections. */
|
|
1176
|
+
/* @__PURE__ */ jsx("div", { className: "ds-card-tray p-5", style: { flex: "1 1 auto" }, children })
|
|
1177
|
+
),
|
|
1067
1178
|
foot && /* @__PURE__ */ jsx(Foot2, { ...foot })
|
|
1068
1179
|
]
|
|
1069
1180
|
}
|
|
@@ -1374,6 +1485,147 @@ function MicrosoftLogo({ size = 18, className }) {
|
|
|
1374
1485
|
}
|
|
1375
1486
|
);
|
|
1376
1487
|
}
|
|
1488
|
+
function BrandMeta({ size = 16, className }) {
|
|
1489
|
+
return /* @__PURE__ */ jsxs(
|
|
1490
|
+
"svg",
|
|
1491
|
+
{
|
|
1492
|
+
width: size,
|
|
1493
|
+
height: size,
|
|
1494
|
+
viewBox: "-5.12 -5.12 266.24 180.28",
|
|
1495
|
+
className,
|
|
1496
|
+
"aria-hidden": "true",
|
|
1497
|
+
focusable: "false",
|
|
1498
|
+
children: [
|
|
1499
|
+
/* @__PURE__ */ jsx("path", { d: "M27.651 112.136c0 9.775 2.146 17.28 4.95 21.82c3.677 5.947 9.16 8.466 14.751 8.466c7.211 0 13.808-1.79 26.52-19.372c10.185-14.092 22.186-33.874 30.26-46.275l13.675-21.01c9.499-14.591 20.493-30.811 33.1-41.806C161.196 4.985 172.298 0 183.47 0c18.758 0 36.625 10.87 50.3 31.257C248.735 53.584 256 81.707 256 110.729c0 17.253-3.4 29.93-9.187 39.946c-5.591 9.686-16.488 19.363-34.818 19.363v-27.616c15.695 0 19.612-14.422 19.612-30.927c0-23.52-5.484-49.623-17.564-68.273c-8.574-13.23-19.684-21.313-31.907-21.313c-13.22 0-23.859 9.97-35.815 27.75c-6.356 9.445-12.882 20.956-20.208 33.944l-8.066 14.289c-16.203 28.728-20.307 35.271-28.408 46.07c-14.2 18.91-26.324 26.076-42.287 26.076c-18.935 0-30.91-8.2-38.325-20.556C2.973 139.413 0 126.202 0 111.148z", fill: "currentColor" }),
|
|
1500
|
+
/* @__PURE__ */ jsx("path", { d: "M21.802 33.206C34.48 13.666 52.774 0 73.757 0C85.91 0 97.99 3.597 110.605 13.897c13.798 11.261 28.505 29.805 46.853 60.368l6.58 10.967c15.881 26.459 24.917 40.07 30.205 46.49c6.802 8.243 11.565 10.7 17.752 10.7c15.695 0 19.612-14.422 19.612-30.927l24.393-.766c0 17.253-3.4 29.93-9.187 39.946c-5.591 9.686-16.488 19.363-34.818 19.363c-11.395 0-21.49-2.475-32.654-13.007c-8.582-8.083-18.615-22.443-26.334-35.352l-22.96-38.352C118.528 64.08 107.96 49.73 101.845 43.23c-6.578-6.988-15.036-15.428-28.532-15.428c-10.923 0-20.2 7.666-27.963 19.39z", fill: "currentColor" }),
|
|
1501
|
+
/* @__PURE__ */ jsx("path", { d: "M73.312 27.802c-10.923 0-20.2 7.666-27.963 19.39c-10.976 16.568-17.698 41.245-17.698 64.944c0 9.775 2.146 17.28 4.95 21.82L9.027 149.482C2.973 139.413 0 126.202 0 111.148C0 83.772 7.514 55.24 21.802 33.206C34.48 13.666 52.774 0 73.757 0z", fill: "currentColor" })
|
|
1502
|
+
]
|
|
1503
|
+
}
|
|
1504
|
+
);
|
|
1505
|
+
}
|
|
1506
|
+
function BrandFacebook({ size = 16, className }) {
|
|
1507
|
+
return /* @__PURE__ */ jsx(
|
|
1508
|
+
"svg",
|
|
1509
|
+
{
|
|
1510
|
+
width: size,
|
|
1511
|
+
height: size,
|
|
1512
|
+
viewBox: "-5.12 -5.12 266.24 264.69",
|
|
1513
|
+
className,
|
|
1514
|
+
"aria-hidden": "true",
|
|
1515
|
+
focusable: "false",
|
|
1516
|
+
children: /* @__PURE__ */ jsx("path", { d: "M256 128C256 57.308 198.692 0 128 0S0 57.308 0 128c0 63.888 46.808 116.843 108 126.445V165H75.5v-37H108V99.8c0-32.08 19.11-49.8 48.348-49.8C170.352 50 185 52.5 185 52.5V84h-16.14C152.959 84 148 93.867 148 103.99V128h35.5l-5.675 37H148v89.445c61.192-9.602 108-62.556 108-126.445", fill: "currentColor" })
|
|
1517
|
+
}
|
|
1518
|
+
);
|
|
1519
|
+
}
|
|
1520
|
+
function BrandInstagram({ size = 16, className }) {
|
|
1521
|
+
return /* @__PURE__ */ jsx(
|
|
1522
|
+
"svg",
|
|
1523
|
+
{
|
|
1524
|
+
width: size,
|
|
1525
|
+
height: size,
|
|
1526
|
+
viewBox: "-5.12 -5.12 266.24 266.24",
|
|
1527
|
+
className,
|
|
1528
|
+
"aria-hidden": "true",
|
|
1529
|
+
focusable: "false",
|
|
1530
|
+
children: /* @__PURE__ */ jsx("path", { d: "M128 23.064c34.177 0 38.225.13 51.722.745c12.48.57 19.258 2.655 23.769 4.408c5.974 2.322 10.238 5.096 14.717 9.575s7.253 8.743 9.575 14.717c1.753 4.511 3.838 11.289 4.408 23.768c.615 13.498.745 17.546.745 51.723s-.13 38.226-.745 51.723c-.57 12.48-2.655 19.257-4.408 23.768c-2.322 5.974-5.096 10.239-9.575 14.718s-8.743 7.253-14.717 9.574c-4.511 1.753-11.289 3.839-23.769 4.408c-13.495.616-17.543.746-51.722.746s-38.228-.13-51.723-.746c-12.48-.57-19.257-2.655-23.768-4.408c-5.974-2.321-10.239-5.095-14.718-9.574c-4.479-4.48-7.253-8.744-9.574-14.718c-1.753-4.51-3.839-11.288-4.408-23.768c-.616-13.497-.746-17.545-.746-51.723s.13-38.225.746-51.722c.57-12.48 2.655-19.258 4.408-23.769c2.321-5.974 5.095-10.238 9.574-14.717c4.48-4.48 8.744-7.253 14.718-9.575c4.51-1.753 11.288-3.838 23.768-4.408c13.497-.615 17.545-.745 51.723-.745M128 0C93.237 0 88.878.147 75.226.77c-13.625.622-22.93 2.786-31.071 5.95c-8.418 3.271-15.556 7.648-22.672 14.764S9.991 35.738 6.72 44.155C3.555 52.297 1.392 61.602.77 75.226C.147 88.878 0 93.237 0 128s.147 39.122.77 52.774c.622 13.625 2.785 22.93 5.95 31.071c3.27 8.417 7.647 15.556 14.763 22.672s14.254 11.492 22.672 14.763c8.142 3.165 17.446 5.328 31.07 5.95c13.653.623 18.012.77 52.775.77s39.122-.147 52.774-.77c13.624-.622 22.929-2.785 31.07-5.95c8.418-3.27 15.556-7.647 22.672-14.763s11.493-14.254 14.764-22.672c3.164-8.142 5.328-17.446 5.95-31.07c.623-13.653.77-18.012.77-52.775s-.147-39.122-.77-52.774c-.622-13.624-2.786-22.929-5.95-31.07c-3.271-8.418-7.648-15.556-14.764-22.672S220.262 9.99 211.845 6.72c-8.142-3.164-17.447-5.328-31.071-5.95C167.122.147 162.763 0 128 0m0 62.27c-36.302 0-65.73 29.43-65.73 65.73s29.428 65.73 65.73 65.73c36.301 0 65.73-29.428 65.73-65.73c0-36.301-29.429-65.73-65.73-65.73m0 108.397c-23.564 0-42.667-19.103-42.667-42.667S104.436 85.333 128 85.333s42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667m83.686-110.994c0 8.484-6.876 15.36-15.36 15.36s-15.36-6.876-15.36-15.36s6.877-15.36 15.36-15.36s15.36 6.877 15.36 15.36", fill: "currentColor" })
|
|
1531
|
+
}
|
|
1532
|
+
);
|
|
1533
|
+
}
|
|
1534
|
+
function BrandMessenger({ size = 16, className }) {
|
|
1535
|
+
return /* @__PURE__ */ jsx(
|
|
1536
|
+
"svg",
|
|
1537
|
+
{
|
|
1538
|
+
width: size,
|
|
1539
|
+
height: size,
|
|
1540
|
+
viewBox: "-5.12 -5.12 266.24 266.24",
|
|
1541
|
+
className,
|
|
1542
|
+
"aria-hidden": "true",
|
|
1543
|
+
focusable: "false",
|
|
1544
|
+
children: /* @__PURE__ */ jsx("path", { d: "M128,0c-72.106,0 -128,52.818 -128,124.16c0,37.317 15.293,69.562 40.2,91.835c2.09,1.871 3.352,4.493 3.438,7.298l0.697,22.77c0.223,7.262 7.724,11.988 14.37,9.054l25.406,-11.217c2.15335,-0.94916 4.56829,-1.12613 6.837,-0.501c11.675,3.21 24.1,4.92 37.052,4.92c72.106,0 128,-52.818 128,-124.16c0,-71.342 -55.894,-124.159 -128,-124.159 M51.137,160.47l37.6,-59.653c5.98,-9.49 18.788,-11.853 27.762,-5.123l29.905,22.43c2.744,2.05808 6.52006,2.04706 9.252,-0.027l40.388,-30.652c5.39,-4.091 12.428,2.36 8.82,8.085l-37.6,59.654c-5.981,9.489 -18.79,11.852 -27.763,5.122l-29.906,-22.43c-2.74359,-2.05707 -6.51846,-2.04605 -9.25,0.027l-40.39,30.652c-5.39,4.09 -12.427,-2.36 -8.818,-8.085", fill: "currentColor" })
|
|
1545
|
+
}
|
|
1546
|
+
);
|
|
1547
|
+
}
|
|
1548
|
+
function BrandLinkedIn({ size = 16, className }) {
|
|
1549
|
+
return /* @__PURE__ */ jsx(
|
|
1550
|
+
"svg",
|
|
1551
|
+
{
|
|
1552
|
+
width: size,
|
|
1553
|
+
height: size,
|
|
1554
|
+
viewBox: "1.44 -0.56 29.12 29.12",
|
|
1555
|
+
className,
|
|
1556
|
+
"aria-hidden": "true",
|
|
1557
|
+
focusable: "false",
|
|
1558
|
+
children: /* @__PURE__ */ jsx("path", { d: "M8.268 28H2.463V9.306h5.805zM5.362 6.756C3.506 6.756 2 5.218 2 3.362a3.362 3.362 0 0 1 6.724 0c0 1.856-1.506 3.394-3.362 3.394M29.994 28h-5.792v-9.1c0-2.169-.044-4.95-3.018-4.95c-3.018 0-3.481 2.356-3.481 4.794V28h-5.799V9.306h5.567v2.55h.081c.775-1.469 2.668-3.019 5.492-3.019c5.875 0 6.955 3.869 6.955 8.894V28z", fill: "currentColor" })
|
|
1559
|
+
}
|
|
1560
|
+
);
|
|
1561
|
+
}
|
|
1562
|
+
function BrandNextdoor({ size = 16, className }) {
|
|
1563
|
+
return /* @__PURE__ */ jsx(
|
|
1564
|
+
"svg",
|
|
1565
|
+
{
|
|
1566
|
+
width: size,
|
|
1567
|
+
height: size,
|
|
1568
|
+
viewBox: "-1.28 5.29 66.56 53.4",
|
|
1569
|
+
className,
|
|
1570
|
+
"aria-hidden": "true",
|
|
1571
|
+
focusable: "false",
|
|
1572
|
+
children: /* @__PURE__ */ jsx("path", { d: "M0 25.993c.285-.085.56-.2.82-.343l9.538-5.894c.166-.125.325-.26.477-.4V6.708h10.168v6.524L32 6.574l32 19.6-5.265 8.622-5.475-3.338h-.172a.21.21 0 0 0 0 .114v25.58c-1.068.267-38.343.362-41.967.134V56.8q0-12.533 0-25.104l-.114-.23-5.76 3.32L3.1 31.373c-.916-1.488-1.908-2.976-2.766-4.464A1.91 1.91 0 0 0 0 26.508z", fill: "currentColor" })
|
|
1573
|
+
}
|
|
1574
|
+
);
|
|
1575
|
+
}
|
|
1576
|
+
function BrandPinterest({ size = 16, className }) {
|
|
1577
|
+
return /* @__PURE__ */ jsx(
|
|
1578
|
+
"svg",
|
|
1579
|
+
{
|
|
1580
|
+
width: size,
|
|
1581
|
+
height: size,
|
|
1582
|
+
viewBox: "3.38 -0.22 25.25 32.44",
|
|
1583
|
+
className,
|
|
1584
|
+
"aria-hidden": "true",
|
|
1585
|
+
focusable: "false",
|
|
1586
|
+
children: /* @__PURE__ */ jsx("path", { d: "M16.75.406C10.337.406 4 4.681 4 11.6c0 4.4 2.475 6.9 3.975 6.9c.619 0 .975-1.725.975-2.212c0-.581-1.481-1.819-1.481-4.238c0-5.025 3.825-8.588 8.775-8.588c4.256 0 7.406 2.419 7.406 6.863c0 3.319-1.331 9.544-5.644 9.544c-1.556 0-2.888-1.125-2.888-2.737c0-2.363 1.65-4.65 1.65-7.088c0-4.137-5.869-3.387-5.869 1.613c0 1.05.131 2.212.6 3.169c-.863 3.713-2.625 9.244-2.625 13.069c0 1.181.169 2.344.281 3.525c.212.238.106.213.431.094c3.15-4.313 3.038-5.156 4.463-10.8c.769 1.463 2.756 2.25 4.331 2.25c6.637 0 9.619-6.469 9.619-12.3c0-6.206-5.363-10.256-11.25-10.256z", fill: "currentColor" })
|
|
1587
|
+
}
|
|
1588
|
+
);
|
|
1589
|
+
}
|
|
1590
|
+
function BrandSnapchat({ size = 16, className }) {
|
|
1591
|
+
return /* @__PURE__ */ jsx(
|
|
1592
|
+
"svg",
|
|
1593
|
+
{
|
|
1594
|
+
width: size,
|
|
1595
|
+
height: size,
|
|
1596
|
+
viewBox: "208.68 112.18 391.9 368.85",
|
|
1597
|
+
className,
|
|
1598
|
+
"aria-hidden": "true",
|
|
1599
|
+
focusable: "false",
|
|
1600
|
+
children: /* @__PURE__ */ jsx("path", { d: "M407.001,473.488c-1.068,0-2.087-0.039-2.862-0.076c-0.615,0.053-1.25,0.076-1.886,0.076 c-22.437,0-37.439-10.607-50.678-19.973c-9.489-6.703-18.438-13.031-28.922-14.775c-5.149-0.854-10.271-1.287-15.22-1.287 c-8.917,0-15.964,1.383-21.109,2.389c-3.166,0.617-5.896,1.148-8.006,1.148c-2.21,0-4.895-0.49-6.014-4.311 c-0.887-3.014-1.523-5.934-2.137-8.746c-1.536-7.027-2.65-11.316-5.281-11.723c-28.141-4.342-44.768-10.738-48.08-18.484 c-0.347-0.814-0.541-1.633-0.584-2.443c-0.129-2.309,1.501-4.334,3.777-4.711c22.348-3.68,42.219-15.492,59.064-35.119 c13.049-15.195,19.457-29.713,20.145-31.316c0.03-0.072,0.065-0.148,0.101-0.217c3.247-6.588,3.893-12.281,1.926-16.916 c-3.626-8.551-15.635-12.361-23.58-14.882c-1.976-0.625-3.845-1.217-5.334-1.808c-7.043-2.782-18.626-8.66-17.083-16.773 c1.124-5.916,8.949-10.036,15.273-10.036c1.756,0,3.312,0.308,4.622,0.923c7.146,3.348,13.575,5.045,19.104,5.045 c6.876,0,10.197-2.618,11-3.362c-0.198-3.668-0.44-7.546-0.674-11.214c0-0.004-0.005-0.048-0.005-0.048 c-1.614-25.675-3.627-57.627,4.546-75.95c24.462-54.847,76.339-59.112,91.651-59.112c0.408,0,6.674-0.062,6.674-0.062 c0.283-0.005,0.59-0.009,0.908-0.009c15.354,0,67.339,4.27,91.816,59.15c8.173,18.335,6.158,50.314,4.539,76.016l-0.076,1.23 c-0.222,3.49-0.427,6.793-0.6,9.995c0.756,0.696,3.795,3.096,9.978,3.339c5.271-0.202,11.328-1.891,17.998-5.014 c2.062-0.968,4.345-1.169,5.895-1.169c2.343,0,4.727,0.456,6.714,1.285l0.106,0.041c5.66,2.009,9.367,6.024,9.447,10.242 c0.071,3.932-2.851,9.809-17.223,15.485c-1.472,0.583-3.35,1.179-5.334,1.808c-7.952,2.524-19.951,6.332-23.577,14.878 c-1.97,4.635-1.322,10.326,1.926,16.912c0.036,0.072,0.067,0.145,0.102,0.221c1,2.344,25.205,57.535,79.209,66.432 c2.275,0.379,3.908,2.406,3.778,4.711c-0.048,0.828-0.248,1.656-0.598,2.465c-3.289,7.703-19.915,14.09-48.064,18.438 c-2.642,0.408-3.755,4.678-5.277,11.668c-0.63,2.887-1.271,5.717-2.146,8.691c-0.819,2.797-2.641,4.164-5.567,4.164h-0.441 c-1.905,0-4.604-0.346-8.008-1.012c-5.95-1.158-12.623-2.236-21.109-2.236c-4.948,0-10.069,0.434-15.224,1.287 c-10.473,1.744-19.421,8.062-28.893,14.758C444.443,462.88,429.436,473.488,407.001,473.488", fill: "currentColor" })
|
|
1601
|
+
}
|
|
1602
|
+
);
|
|
1603
|
+
}
|
|
1604
|
+
function BrandTikTok({ size = 16, className }) {
|
|
1605
|
+
return /* @__PURE__ */ jsx(
|
|
1606
|
+
"svg",
|
|
1607
|
+
{
|
|
1608
|
+
width: size,
|
|
1609
|
+
height: size,
|
|
1610
|
+
viewBox: "-5.79 -5.79 267.56 300.84",
|
|
1611
|
+
className,
|
|
1612
|
+
"aria-hidden": "true",
|
|
1613
|
+
focusable: "false",
|
|
1614
|
+
children: /* @__PURE__ */ jsx("path", { d: "M189.722,104.42243l0,96.99357c0,48.525 -39.357,87.857 -87.905,87.857c-24.62405,0 -46.88248,-10.1174 -62.84421,-26.42813c-0.00093,-0.00062 -0.00186,-0.00125 -0.00279,-0.00187c-0.00254,-0.00259 -0.00508,-0.00519 -0.00761,-0.00778c-23.49917,-15.76977 -38.96239,-42.57494 -38.96239,-72.99022c0,-48.518 39.355,-87.852 87.905,-87.852c4.03423,-0.001 8.06385,0.2723 12.061,0.818l0,10.76898c4.64967,-0.09894 9.30133,0.17007 13.911,0.80102v48.593c-3.94487,-1.25017 -8.05877,-1.88528 -12.197,-1.883c-22.209,0 -40.21,17.994 -40.21,40.186c-0.00942,6.11418 1.38223,12.11209 4.025,17.54894l-17.941,-29.11894c0,-6.79366 1.68644,-13.19354 4.66379,-18.8042c-2.97797,5.61107 -4.66479,12.01139 -4.66479,18.8052c0,15.692 8.998,29.28 22.118,35.898c0.00103,0.00136 0.00207,0.00271 0.0031,0.00407c5.60932,2.82644 11.80469,4.29426 18.0859,4.28493c22.162,0 40.132,-17.92 40.208,-40.05v-189.845h47.834v6.113c0.1689,1.82808 0.41177,3.64857 0.728,5.457l-34.643,0.001v189.844c-0.078,22.132 -18.05,40.05 -40.21,40.05c-5.67604,0 -11.07698,-1.17525 -15.97293,-3.29552c4.89621,2.12093 10.2975,3.29652 15.97393,3.29652c22.161,0 40.131,-17.92 40.21,-40.052v-189.843l47.832,0v6.113c1.356,14.892 7.624,28.362 17.17,38.785h-0.001c10.55395,6.58342 22.74707,10.06504 35.186,10.047v10.116c4.57579,0.96983 9.24056,1.45782 13.918,1.456v47.53c-24.71212,0 -47.59337,-7.85144 -66.271,-21.19557zM99.964,151.40168c0.00033,0.00011 0.00067,0.00021 0.001,0.00032l0,-37.82098c-0.00033,0.00001 -0.00067,0.00001 -0.001,0.00002zM242.075,114.045v-0.001c-24.712,0 -47.589,-7.851 -66.272,-21.195v0.001c18.682,13.344 41.561,21.195 66.272,21.195zM69.673,225.607c-1.62409,-2.12792 -3.02095,-4.40072 -4.178,-6.78106zM228.74787,72.27412c3.67381,1.65002 7.52454,2.97698 11.51604,3.94463c-3.9686,-0.96405 -7.82207,-2.2874 -11.51604,-3.94463z", fill: "currentColor" })
|
|
1615
|
+
}
|
|
1616
|
+
);
|
|
1617
|
+
}
|
|
1618
|
+
var BRAND_ICONS = {
|
|
1619
|
+
meta: BrandMeta,
|
|
1620
|
+
facebook: BrandFacebook,
|
|
1621
|
+
instagram: BrandInstagram,
|
|
1622
|
+
messenger: BrandMessenger,
|
|
1623
|
+
linkedin: BrandLinkedIn,
|
|
1624
|
+
nextdoor: BrandNextdoor,
|
|
1625
|
+
pinterest: BrandPinterest,
|
|
1626
|
+
snapchat: BrandSnapchat,
|
|
1627
|
+
tiktok: BrandTikTok
|
|
1628
|
+
};
|
|
1377
1629
|
var RING_FILLS = ["rgb(var(--accent) / 0.45)", "rgb(var(--accent) / 0.28)", "rgb(var(--accent) / 0.14)"];
|
|
1378
1630
|
var RING_STROKE = "rgb(var(--accent) / 0.5)";
|
|
1379
1631
|
var GRID_STROKE = "rgb(var(--foreground) / 0.04)";
|
|
@@ -2475,6 +2727,150 @@ function TokenBadge({
|
|
|
2475
2727
|
}
|
|
2476
2728
|
);
|
|
2477
2729
|
}
|
|
2730
|
+
|
|
2731
|
+
// src/lib/clipboard.ts
|
|
2732
|
+
async function copyText(value, label) {
|
|
2733
|
+
try {
|
|
2734
|
+
await navigator.clipboard.writeText(value);
|
|
2735
|
+
toast.success(label ? `Copied ${label}` : `Copied ${value}`);
|
|
2736
|
+
} catch {
|
|
2737
|
+
toast.error("Copy failed");
|
|
2738
|
+
}
|
|
2739
|
+
}
|
|
2740
|
+
var ValueChip = forwardRef(
|
|
2741
|
+
function ValueChip2({ children, copyValue, copyLabel, size = "md", fill, className, ...rest }, ref) {
|
|
2742
|
+
const shared = cn(
|
|
2743
|
+
"inline-flex items-center justify-center px-2 py-1 font-mono tabular-nums truncate",
|
|
2744
|
+
size === "sm" ? "text-[10px]" : "text-[11px]",
|
|
2745
|
+
fill && "flex-1 min-w-0",
|
|
2746
|
+
className
|
|
2747
|
+
);
|
|
2748
|
+
const surface = {
|
|
2749
|
+
background: "rgb(var(--surface-inset))",
|
|
2750
|
+
border: "1px solid rgb(var(--border))",
|
|
2751
|
+
borderRadius: "var(--radius-sm)",
|
|
2752
|
+
color: "rgb(var(--text-secondary))"
|
|
2753
|
+
};
|
|
2754
|
+
if (!copyValue) {
|
|
2755
|
+
return /* @__PURE__ */ jsx("span", { className: shared, style: surface, children });
|
|
2756
|
+
}
|
|
2757
|
+
return /* @__PURE__ */ jsx(
|
|
2758
|
+
"button",
|
|
2759
|
+
{
|
|
2760
|
+
ref,
|
|
2761
|
+
type: "button",
|
|
2762
|
+
onClick: () => void copyText(copyValue, copyLabel),
|
|
2763
|
+
className: cn(
|
|
2764
|
+
shared,
|
|
2765
|
+
"cursor-pointer transition-colors",
|
|
2766
|
+
"hover:border-[rgb(var(--border-strong))] hover:text-[rgb(var(--foreground))]",
|
|
2767
|
+
"focus-visible:outline-none focus-visible:[box-shadow:var(--ring-focus)]"
|
|
2768
|
+
),
|
|
2769
|
+
style: surface,
|
|
2770
|
+
...rest,
|
|
2771
|
+
children
|
|
2772
|
+
}
|
|
2773
|
+
);
|
|
2774
|
+
}
|
|
2775
|
+
);
|
|
2776
|
+
var MetaCell = forwardRef(
|
|
2777
|
+
function MetaCell2({ label, children, icon, className, style, ...rest }, ref) {
|
|
2778
|
+
return /* @__PURE__ */ jsxs(
|
|
2779
|
+
"div",
|
|
2780
|
+
{
|
|
2781
|
+
ref,
|
|
2782
|
+
className: cn("flex flex-col gap-0.5 px-2.5 py-2 min-w-0", className),
|
|
2783
|
+
style: {
|
|
2784
|
+
background: "rgb(var(--surface-inset))",
|
|
2785
|
+
border: "1px solid rgb(var(--border))",
|
|
2786
|
+
borderRadius: "var(--radius-sm)",
|
|
2787
|
+
...style
|
|
2788
|
+
},
|
|
2789
|
+
...rest,
|
|
2790
|
+
children: [
|
|
2791
|
+
/* @__PURE__ */ jsxs(
|
|
2792
|
+
"span",
|
|
2793
|
+
{
|
|
2794
|
+
className: "inline-flex items-center gap-1 text-[9px] font-semibold uppercase tracking-[0.06em]",
|
|
2795
|
+
style: { color: "rgb(var(--text-tertiary))" },
|
|
2796
|
+
children: [
|
|
2797
|
+
icon,
|
|
2798
|
+
label
|
|
2799
|
+
]
|
|
2800
|
+
}
|
|
2801
|
+
),
|
|
2802
|
+
/* @__PURE__ */ jsx(
|
|
2803
|
+
"span",
|
|
2804
|
+
{
|
|
2805
|
+
className: "text-[12px] font-semibold tabular-nums truncate",
|
|
2806
|
+
style: { color: "rgb(var(--foreground))" },
|
|
2807
|
+
children
|
|
2808
|
+
}
|
|
2809
|
+
)
|
|
2810
|
+
]
|
|
2811
|
+
}
|
|
2812
|
+
);
|
|
2813
|
+
}
|
|
2814
|
+
);
|
|
2815
|
+
|
|
2816
|
+
// src/lib/color.ts
|
|
2817
|
+
function hexToRgbTuple(hex) {
|
|
2818
|
+
const h = hex.replace("#", "");
|
|
2819
|
+
const full = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
|
|
2820
|
+
const r = parseInt(full.slice(0, 2), 16) || 0;
|
|
2821
|
+
const g = parseInt(full.slice(2, 4), 16) || 0;
|
|
2822
|
+
const b = parseInt(full.slice(4, 6), 16) || 0;
|
|
2823
|
+
return [r, g, b];
|
|
2824
|
+
}
|
|
2825
|
+
function rgbString(hex) {
|
|
2826
|
+
const [r, g, b] = hexToRgbTuple(hex);
|
|
2827
|
+
return `${r}, ${g}, ${b}`;
|
|
2828
|
+
}
|
|
2829
|
+
function rgbCss(hex) {
|
|
2830
|
+
return `rgb(${rgbString(hex)})`;
|
|
2831
|
+
}
|
|
2832
|
+
function hslString(hex) {
|
|
2833
|
+
const [r, g, b] = hexToRgbTuple(hex).map((v) => v / 255);
|
|
2834
|
+
const max = Math.max(r, g, b);
|
|
2835
|
+
const min = Math.min(r, g, b);
|
|
2836
|
+
const l = (max + min) / 2;
|
|
2837
|
+
let h = 0;
|
|
2838
|
+
let s = 0;
|
|
2839
|
+
if (max !== min) {
|
|
2840
|
+
const d = max - min;
|
|
2841
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
2842
|
+
if (max === r) h = (g - b) / d + (g < b ? 6 : 0);
|
|
2843
|
+
else if (max === g) h = (b - r) / d + 2;
|
|
2844
|
+
else h = (r - g) / d + 4;
|
|
2845
|
+
h /= 6;
|
|
2846
|
+
}
|
|
2847
|
+
return `${Math.round(h * 360)}\xB0 ${Math.round(s * 100)}% ${Math.round(l * 100)}%`;
|
|
2848
|
+
}
|
|
2849
|
+
function relativeLuminance(hex) {
|
|
2850
|
+
const lin = hexToRgbTuple(hex).map((v) => {
|
|
2851
|
+
const c = v / 255;
|
|
2852
|
+
return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
|
|
2853
|
+
});
|
|
2854
|
+
return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
|
|
2855
|
+
}
|
|
2856
|
+
function contrastRatio(a, b) {
|
|
2857
|
+
const [hi, lo] = a > b ? [a, b] : [b, a];
|
|
2858
|
+
return (hi + 0.05) / (lo + 0.05);
|
|
2859
|
+
}
|
|
2860
|
+
function bestTextOn(hex) {
|
|
2861
|
+
const l = relativeLuminance(hex);
|
|
2862
|
+
const vsWhite = contrastRatio(l, 1);
|
|
2863
|
+
const vsBlack = contrastRatio(l, 0);
|
|
2864
|
+
return { onLight: vsBlack >= vsWhite, ratio: Math.max(vsWhite, vsBlack) };
|
|
2865
|
+
}
|
|
2866
|
+
function wcagBadges(hex) {
|
|
2867
|
+
const best = bestTextOn(hex).ratio;
|
|
2868
|
+
return [
|
|
2869
|
+
{ label: "AA Large", pass: best >= 3 },
|
|
2870
|
+
{ label: "AA", pass: best >= 4.5 },
|
|
2871
|
+
{ label: "AAA", pass: best >= 7 }
|
|
2872
|
+
];
|
|
2873
|
+
}
|
|
2478
2874
|
function AllocationSparkbar({
|
|
2479
2875
|
values,
|
|
2480
2876
|
baseColorVar,
|
|
@@ -2559,7 +2955,7 @@ function FloatingStatusBar({
|
|
|
2559
2955
|
role: "status",
|
|
2560
2956
|
className: cn(
|
|
2561
2957
|
"fixed bottom-4 left-1/2 z-30 flex -translate-x-1/2 items-center gap-3.5 px-3.5 py-2.5",
|
|
2562
|
-
"
|
|
2958
|
+
"ds-enter-rise",
|
|
2563
2959
|
className
|
|
2564
2960
|
),
|
|
2565
2961
|
style: {
|
|
@@ -2725,7 +3121,13 @@ function SortableTable({
|
|
|
2725
3121
|
onClick: onRowClick ? () => onRowClick(row) : void 0,
|
|
2726
3122
|
className: onRowClick ? "cursor-pointer transition-colors" : void 0,
|
|
2727
3123
|
style: {
|
|
2728
|
-
background:
|
|
3124
|
+
background: (
|
|
3125
|
+
/* --surface-overlay-soft already carries an alpha; nesting a
|
|
3126
|
+
second one produced `rgb(0 0 0 / 0.03 / 0.5)` — invalid, so
|
|
3127
|
+
the banding never painted. --muted is the opaque zebra fill
|
|
3128
|
+
the data-display recipe (CLAUDE.md §2) calls for. */
|
|
3129
|
+
zebra && idx % 2 === 1 ? "rgb(var(--muted))" : "transparent"
|
|
3130
|
+
)
|
|
2729
3131
|
},
|
|
2730
3132
|
children: columns.map((col) => /* @__PURE__ */ jsx(
|
|
2731
3133
|
"td",
|
|
@@ -2875,6 +3277,7 @@ function Tabs({
|
|
|
2875
3277
|
role: "tab",
|
|
2876
3278
|
type: "button",
|
|
2877
3279
|
"aria-selected": isActive,
|
|
3280
|
+
"aria-label": tab.ariaLabel,
|
|
2878
3281
|
disabled: tab.disabled,
|
|
2879
3282
|
onClick: () => onTabChange(tab.id),
|
|
2880
3283
|
className: `${className2} ${tab.disabled ? "cursor-not-allowed opacity-40" : "cursor-pointer"}`,
|
|
@@ -2907,19 +3310,19 @@ function Tabs({
|
|
|
2907
3310
|
var ACTIVE_STYLE = {
|
|
2908
3311
|
neutral: {
|
|
2909
3312
|
bg: "rgb(var(--accent))",
|
|
2910
|
-
color: "rgb(var(--accent
|
|
3313
|
+
color: "rgb(var(--surface-on-accent))"
|
|
2911
3314
|
},
|
|
2912
3315
|
accent: {
|
|
2913
3316
|
bg: "rgb(var(--accent))",
|
|
2914
|
-
color: "rgb(var(--accent
|
|
3317
|
+
color: "rgb(var(--surface-on-accent))"
|
|
2915
3318
|
},
|
|
2916
3319
|
success: {
|
|
2917
3320
|
bg: "rgb(var(--success))",
|
|
2918
|
-
color: "rgb(var(--
|
|
3321
|
+
color: "rgb(var(--surface-on-accent))"
|
|
2919
3322
|
},
|
|
2920
3323
|
warning: {
|
|
2921
3324
|
bg: "rgb(var(--warning))",
|
|
2922
|
-
color: "rgb(var(--
|
|
3325
|
+
color: "rgb(var(--surface-on-accent))"
|
|
2923
3326
|
},
|
|
2924
3327
|
destructive: {
|
|
2925
3328
|
bg: "rgb(var(--destructive))",
|
|
@@ -2927,7 +3330,7 @@ var ACTIVE_STYLE = {
|
|
|
2927
3330
|
},
|
|
2928
3331
|
info: {
|
|
2929
3332
|
bg: "rgb(var(--info))",
|
|
2930
|
-
color: "rgb(var(--
|
|
3333
|
+
color: "rgb(var(--surface-on-accent))"
|
|
2931
3334
|
}
|
|
2932
3335
|
};
|
|
2933
3336
|
function PillButton({
|
|
@@ -3174,7 +3577,7 @@ function DropdownMenuContent({
|
|
|
3174
3577
|
"fixed z-[100] min-w-48 max-w-[min(28rem,calc(100vw-16px))]",
|
|
3175
3578
|
"p-1.5 overflow-y-auto",
|
|
3176
3579
|
"rounded-[var(--radius-lg)]",
|
|
3177
|
-
isPositioned && "
|
|
3580
|
+
isPositioned && "ds-enter-pop",
|
|
3178
3581
|
className
|
|
3179
3582
|
),
|
|
3180
3583
|
style: {
|
|
@@ -3999,40 +4402,51 @@ function DataGridTableBody({
|
|
|
3999
4402
|
);
|
|
4000
4403
|
};
|
|
4001
4404
|
return /* @__PURE__ */ jsxs(TableBody, { children: [
|
|
4002
|
-
visibleRows.map((row, rowIndex) =>
|
|
4003
|
-
|
|
4004
|
-
|
|
4405
|
+
visibleRows.map((row, rowIndex) => (
|
|
4406
|
+
// TableRow styles `data-[state=selected]`; without this attribute a
|
|
4407
|
+
// checked row had no visual state at all — only the checkbox changed.
|
|
4408
|
+
/* @__PURE__ */ jsxs(
|
|
4409
|
+
TableRow,
|
|
4005
4410
|
{
|
|
4006
|
-
|
|
4007
|
-
|
|
4008
|
-
|
|
4009
|
-
|
|
4010
|
-
|
|
4011
|
-
|
|
4012
|
-
|
|
4013
|
-
|
|
4014
|
-
|
|
4015
|
-
|
|
4016
|
-
|
|
4017
|
-
|
|
4018
|
-
|
|
4019
|
-
|
|
4020
|
-
|
|
4021
|
-
|
|
4022
|
-
|
|
4023
|
-
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4028
|
-
|
|
4029
|
-
|
|
4030
|
-
|
|
4031
|
-
|
|
4032
|
-
|
|
4033
|
-
|
|
4411
|
+
...selectedRowIds.includes(row.id) ? { "data-state": "selected" } : {},
|
|
4412
|
+
children: [
|
|
4413
|
+
/* @__PURE__ */ jsx(
|
|
4414
|
+
TableCell,
|
|
4415
|
+
{
|
|
4416
|
+
className: "h-10 px-0 text-center",
|
|
4417
|
+
style: {
|
|
4418
|
+
borderRight: "1px solid rgb(var(--border))",
|
|
4419
|
+
...controlStyle
|
|
4420
|
+
},
|
|
4421
|
+
children: /* @__PURE__ */ jsx(
|
|
4422
|
+
Checkbox,
|
|
4423
|
+
{
|
|
4424
|
+
"aria-label": `Select ${getRowLabel(row)}`,
|
|
4425
|
+
checked: selectedRowIds.includes(row.id),
|
|
4426
|
+
onCheckedChange: (checked) => onToggleRowSelection(row.id, checked === true),
|
|
4427
|
+
className: "mx-auto"
|
|
4428
|
+
}
|
|
4429
|
+
)
|
|
4430
|
+
}
|
|
4431
|
+
),
|
|
4432
|
+
leading.map(
|
|
4433
|
+
(column, colIndex) => renderDataCell(row, rowIndex, column, colIndex)
|
|
4434
|
+
),
|
|
4435
|
+
fillWidth ? /* @__PURE__ */ jsx("td", { "aria-hidden": true, style: { width: "auto", padding: 0 } }) : null,
|
|
4436
|
+
rightPinned.map(
|
|
4437
|
+
(column, i) => renderDataCell(
|
|
4438
|
+
row,
|
|
4439
|
+
rowIndex,
|
|
4440
|
+
column,
|
|
4441
|
+
leading.length + i,
|
|
4442
|
+
i === rightPinned.length - 1
|
|
4443
|
+
)
|
|
4444
|
+
)
|
|
4445
|
+
]
|
|
4446
|
+
},
|
|
4447
|
+
row.id
|
|
4034
4448
|
)
|
|
4035
|
-
|
|
4449
|
+
)),
|
|
4036
4450
|
fillHeight ? (
|
|
4037
4451
|
// Filler row absorbs the leftover height (table is height:100%) so
|
|
4038
4452
|
// the summary footer stays pinned to the bottom even with few rows.
|
|
@@ -5589,7 +6003,7 @@ function TagChipInput({
|
|
|
5589
6003
|
className: cn(
|
|
5590
6004
|
"flex flex-wrap items-center gap-1.5 px-2 py-1.5 min-h-10 cursor-text",
|
|
5591
6005
|
"border transition-colors",
|
|
5592
|
-
error ? "border-[rgb(var(--
|
|
6006
|
+
error ? "border-[rgb(var(--destructive))] focus-within:border-[rgb(var(--destructive))]" : "border-[rgb(var(--border))] focus-within:border-[rgb(var(--accent))]",
|
|
5593
6007
|
isDisabled && "opacity-60 cursor-not-allowed",
|
|
5594
6008
|
className
|
|
5595
6009
|
),
|
|
@@ -5916,13 +6330,12 @@ function FolderTreePicker({
|
|
|
5916
6330
|
"aria-controls": open ? popoverId : void 0,
|
|
5917
6331
|
disabled,
|
|
5918
6332
|
onClick: () => setOpen((o) => !o),
|
|
5919
|
-
className: cn(
|
|
5920
|
-
"btn btn-secondary justify-between w-full",
|
|
5921
|
-
error && "is-error",
|
|
5922
|
-
className
|
|
5923
|
-
),
|
|
6333
|
+
className: cn("btn btn-secondary justify-between w-full", className),
|
|
5924
6334
|
style: {
|
|
5925
|
-
|
|
6335
|
+
/* --ring-error is a box-shadow LIST, not a colour; rgb(var(--ring-error))
|
|
6336
|
+
is invalid CSS and gets dropped, which left this error state inert.
|
|
6337
|
+
The colour token is --destructive (what .input-shell.is-error uses). */
|
|
6338
|
+
borderColor: error ? "rgb(var(--destructive))" : void 0
|
|
5926
6339
|
},
|
|
5927
6340
|
children: [
|
|
5928
6341
|
/* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2 min-w-0", children: [
|
|
@@ -6637,8 +7050,8 @@ var BANNER_TONE = {
|
|
|
6637
7050
|
icon: "rgb(var(--warning))"
|
|
6638
7051
|
},
|
|
6639
7052
|
destructive: {
|
|
6640
|
-
bg: "rgb(var(--
|
|
6641
|
-
border: "rgb(var(--
|
|
7053
|
+
bg: "rgb(var(--destructive-bg))",
|
|
7054
|
+
border: "rgb(var(--destructive))",
|
|
6642
7055
|
icon: "rgb(var(--destructive))"
|
|
6643
7056
|
}
|
|
6644
7057
|
};
|
|
@@ -7833,7 +8246,7 @@ var LANGUAGES = {
|
|
|
7833
8246
|
javascript,
|
|
7834
8247
|
js: javascript,
|
|
7835
8248
|
json,
|
|
7836
|
-
jsx:
|
|
8249
|
+
jsx: jsx66,
|
|
7837
8250
|
markdown,
|
|
7838
8251
|
md: markdown,
|
|
7839
8252
|
html: markup,
|
|
@@ -8329,7 +8742,7 @@ function Kbd({ children, size = "md" }) {
|
|
|
8329
8742
|
return /* @__PURE__ */ jsx("kbd", { style, children });
|
|
8330
8743
|
}
|
|
8331
8744
|
var FrameStack = forwardRef(
|
|
8332
|
-
function FrameStack2({ className, style, gap = "10px", children, ...rest }, ref) {
|
|
8745
|
+
function FrameStack2({ className, style, gap = "10px", padding = "var(--tray-inset)", children, ...rest }, ref) {
|
|
8333
8746
|
return /* @__PURE__ */ jsx(
|
|
8334
8747
|
"div",
|
|
8335
8748
|
{
|
|
@@ -8340,7 +8753,7 @@ var FrameStack = forwardRef(
|
|
|
8340
8753
|
background: "rgb(var(--card-frame-bg))",
|
|
8341
8754
|
border: "1px solid rgb(var(--border-card))",
|
|
8342
8755
|
borderRadius: "var(--radius-xl)",
|
|
8343
|
-
padding
|
|
8756
|
+
padding,
|
|
8344
8757
|
gap,
|
|
8345
8758
|
...style
|
|
8346
8759
|
},
|
|
@@ -9793,7 +10206,7 @@ var C = {
|
|
|
9793
10206
|
name: "rgb(8, 8, 8)",
|
|
9794
10207
|
sub: "rgb(101, 103, 107)",
|
|
9795
10208
|
body: "rgb(0, 0, 0)",
|
|
9796
|
-
seeMore: "
|
|
10209
|
+
seeMore: "var(--color-meta-blue)",
|
|
9797
10210
|
imageBg: "#F0F2F5",
|
|
9798
10211
|
imageEdge: "rgba(0, 0, 0, 0.06)",
|
|
9799
10212
|
card: "#F7F8FA",
|
|
@@ -13603,7 +14016,7 @@ var C3 = {
|
|
|
13603
14016
|
name: "rgb(8, 8, 8)",
|
|
13604
14017
|
sub: "rgb(101, 103, 107)",
|
|
13605
14018
|
body: "rgb(0, 0, 0)",
|
|
13606
|
-
seeMore: "
|
|
14019
|
+
seeMore: "var(--color-meta-blue)",
|
|
13607
14020
|
imageBg: "#F0F2F5",
|
|
13608
14021
|
cardBorder: "rgba(0, 0, 0, 0.1)",
|
|
13609
14022
|
headline: "rgb(28, 32, 40)",
|
|
@@ -14033,6 +14446,6 @@ var PLACEMENT_CONFIGS = [
|
|
|
14033
14446
|
}
|
|
14034
14447
|
];
|
|
14035
14448
|
|
|
14036
|
-
export { AccordionCompound as Accordion, AllocationSparkbar, AppScroll, Badge, BrandLogoTile, BulkActionBar, Button, ButtonGroup, CalculatorShell, CalculatorShellV2, card_default as Card, Checkbox, ChipNav, Choropleth, CodeBlock, CompletionRing, CopyField, DataGrid, DataGridColumnOptionsMenu, DataGridDragOverlay, DataGridDropIndicator, DataGridToolbar, DetailSection, DeviceFrame, DragHandle, DropdownButton, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EmptyPlaceholder, EmptyState, FOLDER_COLOR_KEYS, FileDropZone, FilePreviewGrid, FilePreviewItem, FileThumbnail, FileUploadButton, FilterBar, FilterDropdown, FloatingDrawer, FloatingStatusBar, FolderCard, FolderTreePicker, FrameStack, HEADER_HEIGHT, HeroFormCardCompound as HeroFormCard, IconTile, IdentityLabel, IdentityValue, Input, Kbd, ListItem, MarkdownCode, MarkdownRenderer, MenuButton, meta_previews_exports as MetaPreviews, MetricCard, MicrosoftLogo, modal_default as Modal, OptionTile, OptionTileGroup, PLACEMENT_CONFIGS, PageHeaderHost, PageHeaderSlotProvider, PageHero, page_shell_default as PageShell, Pagination, PillButton, profile_section_default as ProfileSection, ProgressBar, Radio, RadioGroup, RangeSlider, ResizableHandle, ResizablePane, SECTION_SCROLL_OFFSET, SearchBar, SectionLabel, SegmentedPill, Shell2 as Shell, ShellStat, Slider, SortableItem, SortableList, SortableTable, StatRow, StatsGrid, StepLoader, Tabs, TagChipInput, TagRow, TextInput, Textarea, TextareaInput, Toaster, TokenBadge, cn, folderColorVar, formatCurrency, formatNumber, formatPercent, formatRatio, useFileUpload };
|
|
14449
|
+
export { AccordionCompound as Accordion, AllocationSparkbar, AppScroll, BRAND_ICONS, Badge, BrandFacebook, BrandInstagram, BrandLinkedIn, BrandLogoTile, BrandMessenger, BrandMeta, BrandNextdoor, BrandPinterest, BrandSnapchat, BrandTikTok, BulkActionBar, Button, ButtonGroup, CalculatorShell, CalculatorShellV2, card_default as Card, Checkbox, ChipNav, Choropleth, CodeBlock, CollapsibleCard, CompletionRing, CopyField, DataGrid, DataGridColumnOptionsMenu, DataGridDragOverlay, DataGridDropIndicator, DataGridToolbar, DetailSection, DeviceFrame, DragHandle, DropdownButton, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EmptyPlaceholder, EmptyState, FOLDER_COLOR_KEYS, FileDropZone, FilePreviewGrid, FilePreviewItem, FileThumbnail, FileUploadButton, FilterBar, FilterDropdown, FloatingDrawer, FloatingStatusBar, FolderCard, FolderTreePicker, FrameStack, HEADER_HEIGHT, HeroFormCardCompound as HeroFormCard, IconTile, IdentityLabel, IdentityValue, Input, Kbd, ListItem, MarkdownCode, MarkdownRenderer, MenuButton, MetaCell, meta_previews_exports as MetaPreviews, MetricCard, MicrosoftLogo, modal_default as Modal, OptionTile, OptionTileGroup, PLACEMENT_CONFIGS, PageHeaderHost, PageHeaderSlotProvider, PageHero, page_shell_default as PageShell, Pagination, PillButton, profile_section_default as ProfileSection, ProgressBar, Radio, RadioGroup, RangeSlider, ResizableHandle, ResizablePane, SECTION_SCROLL_OFFSET, SearchBar, SectionLabel, SegmentedPill, Shell2 as Shell, ShellStat, Slider, SortableItem, SortableList, SortableTable, StatRow, StatsGrid, StepLoader, Tabs, TagChipInput, TagRow, TextInput, Textarea, TextareaInput, Toaster, TokenBadge, ValueChip, bestTextOn, cn, contrastRatio, copyText, folderColorVar, formatCurrency, formatNumber, formatPercent, formatRatio, hexToRgbTuple, hslString, relativeLuminance, rgbCss, rgbString, useFileUpload, wcagBadges };
|
|
14037
14450
|
//# sourceMappingURL=index.js.map
|
|
14038
14451
|
//# sourceMappingURL=index.js.map
|