@discuss-ds/ui 0.1.0 → 0.2.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/index.js CHANGED
@@ -1362,18 +1362,126 @@ var FormMessage = React23.forwardRef(
1362
1362
  );
1363
1363
  FormMessage.displayName = "FormMessage";
1364
1364
 
1365
- // src/components/Forms & Data Entry/Input.tsx
1365
+ // src/components/Forms & Data Entry/InlineEdit.tsx
1366
1366
  import * as React24 from "react";
1367
- import { jsx as jsx25 } from "react/jsx-runtime";
1367
+ import { PencilSimple } from "@phosphor-icons/react";
1368
+ import { jsx as jsx25, jsxs as jsxs16 } from "react/jsx-runtime";
1369
+ var InlineEdit = React24.forwardRef(
1370
+ ({
1371
+ className,
1372
+ textClassName,
1373
+ value: valueProp,
1374
+ defaultValue = "",
1375
+ onValueChange,
1376
+ placeholder = "Click to edit",
1377
+ multiline,
1378
+ maxLength,
1379
+ disabled,
1380
+ onEditingChange,
1381
+ "aria-label": ariaLabel,
1382
+ ...props
1383
+ }, ref) => {
1384
+ const [internal, setInternal] = React24.useState(defaultValue);
1385
+ const value = valueProp ?? internal;
1386
+ const [editing, setEditing] = React24.useState(false);
1387
+ const [draft, setDraft] = React24.useState(value);
1388
+ const fieldRef = React24.useRef(null);
1389
+ const readRef = React24.useRef(null);
1390
+ const cancelled = React24.useRef(false);
1391
+ const restoreFocus = React24.useRef(false);
1392
+ React24.useEffect(() => {
1393
+ if (editing) {
1394
+ fieldRef.current?.focus();
1395
+ fieldRef.current?.select();
1396
+ } else if (restoreFocus.current) {
1397
+ restoreFocus.current = false;
1398
+ readRef.current?.focus();
1399
+ }
1400
+ }, [editing]);
1401
+ const start = () => {
1402
+ if (disabled) return;
1403
+ setDraft(value);
1404
+ cancelled.current = false;
1405
+ setEditing(true);
1406
+ onEditingChange?.(true);
1407
+ };
1408
+ const finish = (commit, refocus) => {
1409
+ restoreFocus.current = refocus;
1410
+ if (commit && draft !== value) {
1411
+ if (valueProp === void 0) setInternal(draft);
1412
+ onValueChange?.(draft);
1413
+ }
1414
+ setEditing(false);
1415
+ onEditingChange?.(false);
1416
+ };
1417
+ const textClasses = cn("text-ui-input-value text-surface-foreground", textClassName);
1418
+ return /* @__PURE__ */ jsx25("div", { ref, className: cn("inline-flex min-w-0 max-w-full", className), ...props, children: editing ? React24.createElement(multiline ? "textarea" : "input", {
1419
+ ref: fieldRef,
1420
+ value: draft,
1421
+ maxLength,
1422
+ "aria-label": ariaLabel,
1423
+ ...multiline ? { rows: 1 } : { type: "text" },
1424
+ className: cn(
1425
+ "w-full rounded-md px-3 py-1 outline-none focus-visible:border-input-accent",
1426
+ multiline && "field-sizing-content resize-none",
1427
+ fieldSurfaceClasses("default"),
1428
+ textClasses
1429
+ ),
1430
+ onChange: (event) => setDraft(event.target.value),
1431
+ onKeyDown: (event) => {
1432
+ if (event.key === "Escape") {
1433
+ cancelled.current = true;
1434
+ finish(false, true);
1435
+ } else if (event.key === "Enter" && (!multiline || event.metaKey || event.ctrlKey)) {
1436
+ event.preventDefault();
1437
+ finish(true, true);
1438
+ }
1439
+ },
1440
+ onBlur: () => {
1441
+ if (!cancelled.current) finish(true, false);
1442
+ }
1443
+ }) : /* @__PURE__ */ jsxs16(
1444
+ "button",
1445
+ {
1446
+ ref: readRef,
1447
+ type: "button",
1448
+ disabled,
1449
+ "aria-label": `${ariaLabel}: ${value || placeholder}. Edit`,
1450
+ onClick: start,
1451
+ className: cn(
1452
+ "group inline-flex min-w-0 max-w-full items-center gap-2 rounded-md border border-transparent px-3 py-1 text-left outline-none",
1453
+ "enabled:hover:bg-secondary enabled:focus-visible:border-input-accent disabled:cursor-not-allowed disabled:opacity-50",
1454
+ textClasses
1455
+ ),
1456
+ children: [
1457
+ /* @__PURE__ */ jsx25("span", { className: cn("min-w-0 truncate", multiline && "whitespace-pre-wrap", !value && "text-muted-foreground"), children: value || placeholder }),
1458
+ /* @__PURE__ */ jsx25(
1459
+ PencilSimple,
1460
+ {
1461
+ size: 16,
1462
+ "aria-hidden": true,
1463
+ className: "shrink-0 text-secondary-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100"
1464
+ }
1465
+ )
1466
+ ]
1467
+ }
1468
+ ) });
1469
+ }
1470
+ );
1471
+ InlineEdit.displayName = "InlineEdit";
1472
+
1473
+ // src/components/Forms & Data Entry/Input.tsx
1474
+ import * as React25 from "react";
1475
+ import { jsx as jsx26 } from "react/jsx-runtime";
1368
1476
  var inputClasses = (status, className) => cn(
1369
1477
  "flex h-10 w-full rounded-md px-3 py-2 text-ui-input-value placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
1370
1478
  fieldSurfaceClasses(status),
1371
1479
  className
1372
1480
  );
1373
- var Input = React24.forwardRef(
1481
+ var Input = React25.forwardRef(
1374
1482
  ({ className, status = "default", label, description, message, id, ...props }, ref) => {
1375
1483
  if (label == null && description == null && message == null) {
1376
- return /* @__PURE__ */ jsx25(
1484
+ return /* @__PURE__ */ jsx26(
1377
1485
  "input",
1378
1486
  {
1379
1487
  ref,
@@ -1384,16 +1492,16 @@ var Input = React24.forwardRef(
1384
1492
  }
1385
1493
  );
1386
1494
  }
1387
- return /* @__PURE__ */ jsx25(Field, { label, description, message, status, id, children: (control) => /* @__PURE__ */ jsx25("input", { ref, className: inputClasses(status, className), ...control, ...props }) });
1495
+ return /* @__PURE__ */ jsx26(Field, { label, description, message, status, id, children: (control) => /* @__PURE__ */ jsx26("input", { ref, className: inputClasses(status, className), ...control, ...props }) });
1388
1496
  }
1389
1497
  );
1390
1498
  Input.displayName = "Input";
1391
1499
 
1392
1500
  // src/components/Forms & Data Entry/InputWithAction.tsx
1393
- import * as React25 from "react";
1394
- import { jsx as jsx26, jsxs as jsxs16 } from "react/jsx-runtime";
1395
- var InputWithAction = React25.forwardRef(
1396
- ({ className, actionLabel, onAction, tags, status = "default", label, description, message, id, disabled, placeholder, ...props }, ref) => /* @__PURE__ */ jsx26(Field, { label, description, message, status, id, children: (control) => /* @__PURE__ */ jsxs16(
1501
+ import * as React26 from "react";
1502
+ import { jsx as jsx27, jsxs as jsxs17 } from "react/jsx-runtime";
1503
+ var InputWithAction = React26.forwardRef(
1504
+ ({ className, actionLabel, onAction, tags, status = "default", label, description, message, id, disabled, placeholder, ...props }, ref) => /* @__PURE__ */ jsx27(Field, { label, description, message, status, id, children: (control) => /* @__PURE__ */ jsxs17(
1397
1505
  "div",
1398
1506
  {
1399
1507
  className: cn(
@@ -1405,8 +1513,8 @@ var InputWithAction = React25.forwardRef(
1405
1513
  className
1406
1514
  ),
1407
1515
  children: [
1408
- tags && /* @__PURE__ */ jsx26("div", { className: "flex shrink-0 items-center gap-1", children: tags }),
1409
- /* @__PURE__ */ jsx26(
1516
+ tags && /* @__PURE__ */ jsx27("div", { className: "flex shrink-0 items-center gap-1", children: tags }),
1517
+ /* @__PURE__ */ jsx27(
1410
1518
  "input",
1411
1519
  {
1412
1520
  ref,
@@ -1417,7 +1525,7 @@ var InputWithAction = React25.forwardRef(
1417
1525
  ...props
1418
1526
  }
1419
1527
  ),
1420
- /* @__PURE__ */ jsx26(Button, { type: "button", variant: "subtle", size: "sm", disabled, onClick: onAction, children: actionLabel })
1528
+ /* @__PURE__ */ jsx27(Button, { type: "button", variant: "subtle", size: "sm", disabled, onClick: onAction, children: actionLabel })
1421
1529
  ]
1422
1530
  }
1423
1531
  ) })
@@ -1425,10 +1533,10 @@ var InputWithAction = React25.forwardRef(
1425
1533
  InputWithAction.displayName = "InputWithAction";
1426
1534
 
1427
1535
  // src/components/Forms & Data Entry/NumberInput.tsx
1428
- import * as React26 from "react";
1536
+ import * as React27 from "react";
1429
1537
  import { Minus as Minus2, Plus as Plus2 } from "@phosphor-icons/react";
1430
- import { jsx as jsx27, jsxs as jsxs17 } from "react/jsx-runtime";
1431
- var NumberInput = React26.forwardRef(
1538
+ import { jsx as jsx28, jsxs as jsxs18 } from "react/jsx-runtime";
1539
+ var NumberInput = React27.forwardRef(
1432
1540
  ({
1433
1541
  className,
1434
1542
  value,
@@ -1446,7 +1554,7 @@ var NumberInput = React26.forwardRef(
1446
1554
  disabled,
1447
1555
  ...props
1448
1556
  }, ref) => {
1449
- const [internal, setInternal] = React26.useState(defaultValue);
1557
+ const [internal, setInternal] = React27.useState(defaultValue);
1450
1558
  const current = value ?? internal;
1451
1559
  const clamp = (next) => Math.min(max, Math.max(min, next));
1452
1560
  const commit = (next) => {
@@ -1454,7 +1562,7 @@ var NumberInput = React26.forwardRef(
1454
1562
  setInternal(clamped);
1455
1563
  onValueChange?.(clamped);
1456
1564
  };
1457
- return /* @__PURE__ */ jsx27(Field, { label, description, message, status, id, className: "w-50", children: (control) => /* @__PURE__ */ jsxs17(
1565
+ return /* @__PURE__ */ jsx28(Field, { label, description, message, status, id, className: "w-50", children: (control) => /* @__PURE__ */ jsxs18(
1458
1566
  "div",
1459
1567
  {
1460
1568
  className: cn(
@@ -1465,7 +1573,7 @@ var NumberInput = React26.forwardRef(
1465
1573
  className
1466
1574
  ),
1467
1575
  children: [
1468
- /* @__PURE__ */ jsx27(
1576
+ /* @__PURE__ */ jsx28(
1469
1577
  Button,
1470
1578
  {
1471
1579
  type: "button",
@@ -1474,11 +1582,11 @@ var NumberInput = React26.forwardRef(
1474
1582
  "aria-label": "Decrease",
1475
1583
  disabled: disabled || current <= min,
1476
1584
  onClick: () => commit(current - step),
1477
- children: /* @__PURE__ */ jsx27(Minus2, { size: 16, "aria-hidden": true })
1585
+ children: /* @__PURE__ */ jsx28(Minus2, { size: 16, "aria-hidden": true })
1478
1586
  }
1479
1587
  ),
1480
- /* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-center gap-1 text-center", children: [
1481
- /* @__PURE__ */ jsx27(
1588
+ /* @__PURE__ */ jsxs18("div", { className: "flex items-center justify-center gap-1 text-center", children: [
1589
+ /* @__PURE__ */ jsx28(
1482
1590
  "input",
1483
1591
  {
1484
1592
  ref,
@@ -1508,9 +1616,9 @@ var NumberInput = React26.forwardRef(
1508
1616
  ...props
1509
1617
  }
1510
1618
  ),
1511
- unit && /* @__PURE__ */ jsx27("span", { className: "text-body-small text-secondary-muted-foreground", children: unit })
1619
+ unit && /* @__PURE__ */ jsx28("span", { className: "text-body-small text-secondary-muted-foreground", children: unit })
1512
1620
  ] }),
1513
- /* @__PURE__ */ jsx27(
1621
+ /* @__PURE__ */ jsx28(
1514
1622
  Button,
1515
1623
  {
1516
1624
  type: "button",
@@ -1519,7 +1627,7 @@ var NumberInput = React26.forwardRef(
1519
1627
  "aria-label": "Increase",
1520
1628
  disabled: disabled || current >= max,
1521
1629
  onClick: () => commit(current + step),
1522
- children: /* @__PURE__ */ jsx27(Plus2, { size: 16, "aria-hidden": true })
1630
+ children: /* @__PURE__ */ jsx28(Plus2, { size: 16, "aria-hidden": true })
1523
1631
  }
1524
1632
  )
1525
1633
  ]
@@ -1530,14 +1638,14 @@ var NumberInput = React26.forwardRef(
1530
1638
  NumberInput.displayName = "NumberInput";
1531
1639
 
1532
1640
  // src/components/Forms & Data Entry/SearchBar.tsx
1533
- import * as React27 from "react";
1641
+ import * as React28 from "react";
1534
1642
  import { MagnifyingGlass, X as X2 } from "@phosphor-icons/react";
1535
- import { jsx as jsx28, jsxs as jsxs18 } from "react/jsx-runtime";
1536
- var SearchBar = React27.forwardRef(
1643
+ import { jsx as jsx29, jsxs as jsxs19 } from "react/jsx-runtime";
1644
+ var SearchBar = React28.forwardRef(
1537
1645
  ({ className, value, defaultValue, onChange, onClear, clearLabel = "Clear search", disabled, ...props }, ref) => {
1538
- const innerRef = React27.useRef(null);
1539
- React27.useImperativeHandle(ref, () => innerRef.current);
1540
- const [uncontrolled, setUncontrolled] = React27.useState(String(defaultValue ?? ""));
1646
+ const innerRef = React28.useRef(null);
1647
+ React28.useImperativeHandle(ref, () => innerRef.current);
1648
+ const [uncontrolled, setUncontrolled] = React28.useState(String(defaultValue ?? ""));
1541
1649
  const current = value !== void 0 ? String(value) : uncontrolled;
1542
1650
  const clear = () => {
1543
1651
  const input = innerRef.current;
@@ -1549,7 +1657,7 @@ var SearchBar = React27.forwardRef(
1549
1657
  }
1550
1658
  onClear?.();
1551
1659
  };
1552
- return /* @__PURE__ */ jsxs18(
1660
+ return /* @__PURE__ */ jsxs19(
1553
1661
  "div",
1554
1662
  {
1555
1663
  className: cn(
@@ -1560,8 +1668,8 @@ var SearchBar = React27.forwardRef(
1560
1668
  className
1561
1669
  ),
1562
1670
  children: [
1563
- /* @__PURE__ */ jsx28(MagnifyingGlass, { size: 16, "aria-hidden": true, className: "shrink-0 text-surface-foreground" }),
1564
- /* @__PURE__ */ jsx28(
1671
+ /* @__PURE__ */ jsx29(MagnifyingGlass, { size: 16, "aria-hidden": true, className: "shrink-0 text-surface-foreground" }),
1672
+ /* @__PURE__ */ jsx29(
1565
1673
  "input",
1566
1674
  {
1567
1675
  ref: innerRef,
@@ -1578,14 +1686,14 @@ var SearchBar = React27.forwardRef(
1578
1686
  ...props
1579
1687
  }
1580
1688
  ),
1581
- current !== "" && !disabled && /* @__PURE__ */ jsx28(
1689
+ current !== "" && !disabled && /* @__PURE__ */ jsx29(
1582
1690
  "button",
1583
1691
  {
1584
1692
  type: "button",
1585
1693
  "aria-label": clearLabel,
1586
1694
  onClick: clear,
1587
1695
  className: "inline-flex size-4 shrink-0 items-center justify-center rounded-xs text-surface-foreground",
1588
- children: /* @__PURE__ */ jsx28(X2, { size: 16, "aria-hidden": true })
1696
+ children: /* @__PURE__ */ jsx29(X2, { size: 16, "aria-hidden": true })
1589
1697
  }
1590
1698
  )
1591
1699
  ]
@@ -1596,16 +1704,16 @@ var SearchBar = React27.forwardRef(
1596
1704
  SearchBar.displayName = "SearchBar";
1597
1705
 
1598
1706
  // src/components/Forms & Data Entry/Select.tsx
1599
- import * as React28 from "react";
1707
+ import * as React29 from "react";
1600
1708
  import { CaretDown as CaretDown3 } from "@phosphor-icons/react";
1601
1709
  import { Select as SelectPrimitive } from "radix-ui";
1602
- import { jsx as jsx29, jsxs as jsxs19 } from "react/jsx-runtime";
1710
+ import { jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
1603
1711
  var Select = SelectPrimitive.Root;
1604
1712
  var SelectValue = SelectPrimitive.Value;
1605
1713
  var SelectGroup = SelectPrimitive.Group;
1606
- var CheckIcon = () => /* @__PURE__ */ jsx29("svg", { width: "10", height: "8", viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx29("path", { d: "M1 4L3.5 6.5L9 1", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
1607
- var SelectTrigger = React28.forwardRef(
1608
- ({ className, children, icon, ...props }, ref) => /* @__PURE__ */ jsxs19(
1714
+ var CheckIcon = () => /* @__PURE__ */ jsx30("svg", { width: "10", height: "8", viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx30("path", { d: "M1 4L3.5 6.5L9 1", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
1715
+ var SelectTrigger = React29.forwardRef(
1716
+ ({ className, children, icon, ...props }, ref) => /* @__PURE__ */ jsxs20(
1609
1717
  SelectPrimitive.Trigger,
1610
1718
  {
1611
1719
  ref,
@@ -1618,16 +1726,16 @@ var SelectTrigger = React28.forwardRef(
1618
1726
  ),
1619
1727
  ...props,
1620
1728
  children: [
1621
- icon && /* @__PURE__ */ jsx29("span", { className: "flex shrink-0 text-surface-foreground", children: icon }),
1622
- /* @__PURE__ */ jsx29("span", { className: "min-w-0 flex-1 truncate", children }),
1623
- /* @__PURE__ */ jsx29(SelectPrimitive.Icon, { className: "shrink-0 text-surface-foreground", children: /* @__PURE__ */ jsx29(CaretDown3, { size: 16, "aria-hidden": true }) })
1729
+ icon && /* @__PURE__ */ jsx30("span", { className: "flex shrink-0 text-surface-foreground", children: icon }),
1730
+ /* @__PURE__ */ jsx30("span", { className: "min-w-0 flex-1 truncate", children }),
1731
+ /* @__PURE__ */ jsx30(SelectPrimitive.Icon, { className: "shrink-0 text-surface-foreground", children: /* @__PURE__ */ jsx30(CaretDown3, { size: 16, "aria-hidden": true }) })
1624
1732
  ]
1625
1733
  }
1626
1734
  )
1627
1735
  );
1628
1736
  SelectTrigger.displayName = "SelectTrigger";
1629
- var SelectContent = React28.forwardRef(
1630
- ({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx29(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx29(
1737
+ var SelectContent = React29.forwardRef(
1738
+ ({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx30(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx30(
1631
1739
  SelectPrimitive.Content,
1632
1740
  {
1633
1741
  ref,
@@ -1641,13 +1749,13 @@ var SelectContent = React28.forwardRef(
1641
1749
  className
1642
1750
  ),
1643
1751
  ...props,
1644
- children: /* @__PURE__ */ jsx29(SelectPrimitive.Viewport, { className: "p-1", children })
1752
+ children: /* @__PURE__ */ jsx30(SelectPrimitive.Viewport, { className: "p-1", children })
1645
1753
  }
1646
1754
  ) })
1647
1755
  );
1648
1756
  SelectContent.displayName = "SelectContent";
1649
- var SelectItem = React28.forwardRef(
1650
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs19(
1757
+ var SelectItem = React29.forwardRef(
1758
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs20(
1651
1759
  SelectPrimitive.Item,
1652
1760
  {
1653
1761
  ref,
@@ -1658,8 +1766,8 @@ var SelectItem = React28.forwardRef(
1658
1766
  ),
1659
1767
  ...props,
1660
1768
  children: [
1661
- /* @__PURE__ */ jsx29("span", { className: "absolute left-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx29(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx29(CheckIcon, {}) }) }),
1662
- /* @__PURE__ */ jsx29(SelectPrimitive.ItemText, { children })
1769
+ /* @__PURE__ */ jsx30("span", { className: "absolute left-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx30(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(CheckIcon, {}) }) }),
1770
+ /* @__PURE__ */ jsx30(SelectPrimitive.ItemText, { children })
1663
1771
  ]
1664
1772
  }
1665
1773
  )
@@ -1667,10 +1775,10 @@ var SelectItem = React28.forwardRef(
1667
1775
  SelectItem.displayName = "SelectItem";
1668
1776
 
1669
1777
  // src/components/Forms & Data Entry/Slider.tsx
1670
- import * as React29 from "react";
1778
+ import * as React30 from "react";
1671
1779
  import { Slider as SliderPrimitive } from "radix-ui";
1672
- import { jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
1673
- var Slider = React29.forwardRef(
1780
+ import { jsx as jsx31, jsxs as jsxs21 } from "react/jsx-runtime";
1781
+ var Slider = React30.forwardRef(
1674
1782
  ({
1675
1783
  className,
1676
1784
  value,
@@ -1685,15 +1793,15 @@ var Slider = React29.forwardRef(
1685
1793
  "aria-labelledby": ariaLabelledBy,
1686
1794
  ...props
1687
1795
  }, ref) => {
1688
- const [internal, setInternal] = React29.useState(defaultValue ?? [min]);
1796
+ const [internal, setInternal] = React30.useState(defaultValue ?? [min]);
1689
1797
  const thumbValues = value ?? internal;
1690
1798
  const hasHeader = label != null || showRange;
1691
- return /* @__PURE__ */ jsxs20("div", { className: cn("flex w-full flex-col gap-2", className), children: [
1692
- hasHeader && /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between text-secondary-muted-foreground", children: [
1693
- label != null ? /* @__PURE__ */ jsx30("span", { className: "text-ui-label text-surface-foreground", children: label }) : /* @__PURE__ */ jsx30("span", { className: "text-ui-caption", children: min }),
1694
- /* @__PURE__ */ jsx30("span", { className: "text-body-small", children: max })
1799
+ return /* @__PURE__ */ jsxs21("div", { className: cn("flex w-full flex-col gap-2", className), children: [
1800
+ hasHeader && /* @__PURE__ */ jsxs21("div", { className: "flex items-center justify-between text-secondary-muted-foreground", children: [
1801
+ label != null ? /* @__PURE__ */ jsx31("span", { className: "text-ui-label text-surface-foreground", children: label }) : /* @__PURE__ */ jsx31("span", { className: "text-ui-caption", children: min }),
1802
+ /* @__PURE__ */ jsx31("span", { className: "text-body-small", children: max })
1695
1803
  ] }),
1696
- /* @__PURE__ */ jsxs20(
1804
+ /* @__PURE__ */ jsxs21(
1697
1805
  SliderPrimitive.Root,
1698
1806
  {
1699
1807
  ref,
@@ -1708,19 +1816,19 @@ var Slider = React29.forwardRef(
1708
1816
  className: "relative flex h-4 w-full touch-none items-center select-none",
1709
1817
  ...props,
1710
1818
  children: [
1711
- /* @__PURE__ */ jsx30(SliderPrimitive.Track, { className: "relative h-1 w-full grow overflow-hidden rounded-xxs bg-muted", children: /* @__PURE__ */ jsx30(SliderPrimitive.Range, { className: "absolute h-full bg-input-accent" }) }),
1819
+ /* @__PURE__ */ jsx31(SliderPrimitive.Track, { className: "relative h-1 w-full grow overflow-hidden rounded-xxs bg-muted", children: /* @__PURE__ */ jsx31(SliderPrimitive.Range, { className: "absolute h-full bg-input-accent" }) }),
1712
1820
  thumbValues.map((thumbValue, index) => (
1713
1821
  // The accessible name belongs on each individual thumb (the actual
1714
1822
  // role="slider" element) — Root is just a group container. With
1715
1823
  // more than one thumb this applies the same label to each; give a
1716
1824
  // range slider distinct per-thumb labels via aria-labelledby instead.
1717
- /* @__PURE__ */ jsx30(
1825
+ /* @__PURE__ */ jsx31(
1718
1826
  SliderPrimitive.Thumb,
1719
1827
  {
1720
1828
  "aria-label": ariaLabel,
1721
1829
  "aria-labelledby": ariaLabelledBy,
1722
1830
  className: "group relative block size-4 rounded-full border-2 border-surface bg-input-accent shadow-sm transition-colors disabled:pointer-events-none disabled:opacity-50",
1723
- children: showValue && /* @__PURE__ */ jsx30(
1831
+ children: showValue && /* @__PURE__ */ jsx31(
1724
1832
  "span",
1725
1833
  {
1726
1834
  "aria-hidden": "true",
@@ -1744,17 +1852,17 @@ var Slider = React29.forwardRef(
1744
1852
  Slider.displayName = "Slider";
1745
1853
 
1746
1854
  // src/components/Forms & Data Entry/Textarea.tsx
1747
- import * as React30 from "react";
1748
- import { jsx as jsx31 } from "react/jsx-runtime";
1855
+ import * as React31 from "react";
1856
+ import { jsx as jsx32 } from "react/jsx-runtime";
1749
1857
  var textareaClasses = (status, className) => cn(
1750
1858
  "flex field-sizing-content min-h-25 w-full rounded-md px-3 py-2.5 text-body-base placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
1751
1859
  fieldSurfaceClasses(status),
1752
1860
  className
1753
1861
  );
1754
- var Textarea = React30.forwardRef(
1862
+ var Textarea = React31.forwardRef(
1755
1863
  ({ className, status = "default", label, description, message, id, ...props }, ref) => {
1756
1864
  if (label == null && description == null && message == null) {
1757
- return /* @__PURE__ */ jsx31(
1865
+ return /* @__PURE__ */ jsx32(
1758
1866
  "textarea",
1759
1867
  {
1760
1868
  ref,
@@ -1765,29 +1873,29 @@ var Textarea = React30.forwardRef(
1765
1873
  }
1766
1874
  );
1767
1875
  }
1768
- return /* @__PURE__ */ jsx31(Field, { label, description, message, status, id, children: (control) => /* @__PURE__ */ jsx31("textarea", { ref, className: textareaClasses(status, className), ...control, ...props }) });
1876
+ return /* @__PURE__ */ jsx32(Field, { label, description, message, status, id, children: (control) => /* @__PURE__ */ jsx32("textarea", { ref, className: textareaClasses(status, className), ...control, ...props }) });
1769
1877
  }
1770
1878
  );
1771
1879
  Textarea.displayName = "Textarea";
1772
1880
 
1773
1881
  // src/components/Overlays & Feedback/Dialog.tsx
1774
- import * as React31 from "react";
1882
+ import * as React32 from "react";
1775
1883
  import { X as X3 } from "@phosphor-icons/react";
1776
1884
  import { Dialog as DialogPrimitive } from "radix-ui";
1777
- import { jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
1885
+ import { jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
1778
1886
  var Dialog = DialogPrimitive.Root;
1779
1887
  var DialogTrigger = DialogPrimitive.Trigger;
1780
1888
  var DialogClose = DialogPrimitive.Close;
1781
- var DialogContent = React31.forwardRef(
1782
- ({ className, children, closeLabel = "Close", hideClose, ...props }, ref) => /* @__PURE__ */ jsxs21(DialogPrimitive.Portal, { children: [
1783
- /* @__PURE__ */ jsx32(
1889
+ var DialogContent = React32.forwardRef(
1890
+ ({ className, children, closeLabel = "Close", hideClose, ...props }, ref) => /* @__PURE__ */ jsxs22(DialogPrimitive.Portal, { children: [
1891
+ /* @__PURE__ */ jsx33(
1784
1892
  DialogPrimitive.Overlay,
1785
1893
  {
1786
1894
  style: { zIndex: "var(--sys-z-30)" },
1787
1895
  className: "fixed inset-0 bg-primary/30"
1788
1896
  }
1789
1897
  ),
1790
- /* @__PURE__ */ jsxs21(
1898
+ /* @__PURE__ */ jsxs22(
1791
1899
  DialogPrimitive.Content,
1792
1900
  {
1793
1901
  ref,
@@ -1799,15 +1907,15 @@ var DialogContent = React31.forwardRef(
1799
1907
  ...props,
1800
1908
  children: [
1801
1909
  children,
1802
- !hideClose && /* @__PURE__ */ jsx32(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx32(Button, { variant: "ghost", size: "icon-sm", "aria-label": closeLabel, className: "absolute top-4 right-6", children: /* @__PURE__ */ jsx32(X3, { size: 16, "aria-hidden": true }) }) })
1910
+ !hideClose && /* @__PURE__ */ jsx33(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx33(Button, { variant: "ghost", size: "icon-sm", "aria-label": closeLabel, className: "absolute top-4 right-6", children: /* @__PURE__ */ jsx33(X3, { size: 16, "aria-hidden": true }) }) })
1803
1911
  ]
1804
1912
  }
1805
1913
  )
1806
1914
  ] })
1807
1915
  );
1808
1916
  DialogContent.displayName = "DialogContent";
1809
- var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx32("div", { className: cn("flex flex-col gap-1.5 border-b border-border px-6 py-4 pr-16", className), ...props });
1810
- var DialogTitle = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
1917
+ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx33("div", { className: cn("flex flex-col gap-1.5 border-b border-border px-6 py-4 pr-16", className), ...props });
1918
+ var DialogTitle = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
1811
1919
  DialogPrimitive.Title,
1812
1920
  {
1813
1921
  ref,
@@ -1816,7 +1924,7 @@ var DialogTitle = React31.forwardRef(({ className, ...props }, ref) => /* @__PUR
1816
1924
  }
1817
1925
  ));
1818
1926
  DialogTitle.displayName = "DialogTitle";
1819
- var DialogDescription = React31.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
1927
+ var DialogDescription = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
1820
1928
  DialogPrimitive.Description,
1821
1929
  {
1822
1930
  ref,
@@ -1825,15 +1933,15 @@ var DialogDescription = React31.forwardRef(({ className, ...props }, ref) => /*
1825
1933
  }
1826
1934
  ));
1827
1935
  DialogDescription.displayName = "DialogDescription";
1828
- var DialogBody = ({ className, ...props }) => /* @__PURE__ */ jsx32("div", { className: cn("flex flex-col gap-4 p-6", className), ...props });
1829
- var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx32("div", { className: cn("flex items-center justify-end gap-3 border-t border-border px-6 py-4", className), ...props });
1936
+ var DialogBody = ({ className, ...props }) => /* @__PURE__ */ jsx33("div", { className: cn("flex flex-col gap-4 p-6", className), ...props });
1937
+ var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx33("div", { className: cn("flex items-center justify-end gap-3 border-t border-border px-6 py-4", className), ...props });
1830
1938
 
1831
1939
  // src/components/Overlays & Feedback/Toast.tsx
1832
- import * as React32 from "react";
1940
+ import * as React33 from "react";
1833
1941
  import { CheckCircle as CheckCircle2, Info, Warning, WarningCircle as WarningCircle2, X as X4 } from "@phosphor-icons/react";
1834
1942
  import { cva as cva4 } from "class-variance-authority";
1835
1943
  import { Toast as ToastPrimitive } from "radix-ui";
1836
- import { jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
1944
+ import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
1837
1945
  var toastVariants = cva4("border", {
1838
1946
  variants: {
1839
1947
  variant: {
@@ -1859,13 +1967,13 @@ var titleColour = {
1859
1967
  };
1860
1968
  function VariantIcon({ variant, size }) {
1861
1969
  const props = { size, "aria-hidden": true, className: cn("shrink-0", iconColour[variant]) };
1862
- if (variant === "success") return /* @__PURE__ */ jsx33(CheckCircle2, { ...props });
1863
- if (variant === "warning") return /* @__PURE__ */ jsx33(Warning, { ...props });
1864
- if (variant === "destructive") return /* @__PURE__ */ jsx33(WarningCircle2, { ...props });
1865
- return /* @__PURE__ */ jsx33(Info, { ...props });
1970
+ if (variant === "success") return /* @__PURE__ */ jsx34(CheckCircle2, { ...props });
1971
+ if (variant === "warning") return /* @__PURE__ */ jsx34(Warning, { ...props });
1972
+ if (variant === "destructive") return /* @__PURE__ */ jsx34(WarningCircle2, { ...props });
1973
+ return /* @__PURE__ */ jsx34(Info, { ...props });
1866
1974
  }
1867
1975
  var ToastProvider = ToastPrimitive.Provider;
1868
- var ToastViewport = React32.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx33(
1976
+ var ToastViewport = React33.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx34(
1869
1977
  ToastPrimitive.Viewport,
1870
1978
  {
1871
1979
  ref,
@@ -1875,10 +1983,10 @@ var ToastViewport = React32.forwardRef(({ className, ...props }, ref) => /* @__P
1875
1983
  }
1876
1984
  ));
1877
1985
  ToastViewport.displayName = "ToastViewport";
1878
- var Toast = React32.forwardRef(
1986
+ var Toast = React33.forwardRef(
1879
1987
  ({ className, variant = "info", title, description, action, closeLabel = "Close", children, ...props }, ref) => {
1880
1988
  const v = variant ?? "info";
1881
- return /* @__PURE__ */ jsxs22(
1989
+ return /* @__PURE__ */ jsxs23(
1882
1990
  ToastPrimitive.Root,
1883
1991
  {
1884
1992
  ref,
@@ -1886,19 +1994,19 @@ var Toast = React32.forwardRef(
1886
1994
  className: cn("flex items-start gap-3 rounded-lg p-4 shadow-lg", toastVariants({ variant: v }), className),
1887
1995
  ...props,
1888
1996
  children: [
1889
- /* @__PURE__ */ jsx33(VariantIcon, { variant: v, size: 20 }),
1890
- /* @__PURE__ */ jsxs22("div", { className: "flex min-w-0 flex-1 flex-col gap-1 text-body-small", children: [
1891
- title != null && /* @__PURE__ */ jsx33(ToastPrimitive.Title, { className: cn("font-semibold", titleColour[v]), children: title }),
1892
- description != null && /* @__PURE__ */ jsx33(ToastPrimitive.Description, { className: "text-secondary-muted-foreground", children: description }),
1997
+ /* @__PURE__ */ jsx34(VariantIcon, { variant: v, size: 20 }),
1998
+ /* @__PURE__ */ jsxs23("div", { className: "flex min-w-0 flex-1 flex-col gap-1 text-body-small", children: [
1999
+ title != null && /* @__PURE__ */ jsx34(ToastPrimitive.Title, { className: cn("font-semibold", titleColour[v]), children: title }),
2000
+ description != null && /* @__PURE__ */ jsx34(ToastPrimitive.Description, { className: "text-secondary-muted-foreground", children: description }),
1893
2001
  children,
1894
2002
  action
1895
2003
  ] }),
1896
- /* @__PURE__ */ jsx33(
2004
+ /* @__PURE__ */ jsx34(
1897
2005
  ToastPrimitive.Close,
1898
2006
  {
1899
2007
  "aria-label": closeLabel,
1900
2008
  className: "inline-flex size-4 shrink-0 items-center justify-center rounded-xs text-surface-foreground",
1901
- children: /* @__PURE__ */ jsx33(X4, { size: 16, "aria-hidden": true })
2009
+ children: /* @__PURE__ */ jsx34(X4, { size: 16, "aria-hidden": true })
1902
2010
  }
1903
2011
  )
1904
2012
  ]
@@ -1908,10 +2016,10 @@ var Toast = React32.forwardRef(
1908
2016
  );
1909
2017
  Toast.displayName = "Toast";
1910
2018
  var ToastAction = ToastPrimitive.Action;
1911
- var ToastInline = React32.forwardRef(
2019
+ var ToastInline = React33.forwardRef(
1912
2020
  ({ className, variant = "info", onClose, closeLabel = "Close", children, ...props }, ref) => {
1913
2021
  const v = variant ?? "info";
1914
- return /* @__PURE__ */ jsxs22(
2022
+ return /* @__PURE__ */ jsxs23(
1915
2023
  "div",
1916
2024
  {
1917
2025
  ref,
@@ -1919,9 +2027,9 @@ var ToastInline = React32.forwardRef(
1919
2027
  className: cn("flex items-center gap-2 rounded-sm px-2 py-1.5", toastVariants({ variant: v }), className),
1920
2028
  ...props,
1921
2029
  children: [
1922
- /* @__PURE__ */ jsx33(VariantIcon, { variant: v, size: 16 }),
1923
- /* @__PURE__ */ jsx33("p", { className: "min-w-0 flex-1 text-body-small text-secondary-muted-foreground", children }),
1924
- onClose && /* @__PURE__ */ jsx33(Button, { type: "button", variant: "ghost", size: "icon-sm", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx33(X4, { size: 16, "aria-hidden": true }) })
2030
+ /* @__PURE__ */ jsx34(VariantIcon, { variant: v, size: 16 }),
2031
+ /* @__PURE__ */ jsx34("p", { className: "min-w-0 flex-1 text-body-small text-secondary-muted-foreground", children }),
2032
+ onClose && /* @__PURE__ */ jsx34(Button, { type: "button", variant: "ghost", size: "icon-sm", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx34(X4, { size: 16, "aria-hidden": true }) })
1925
2033
  ]
1926
2034
  }
1927
2035
  );
@@ -1930,16 +2038,16 @@ var ToastInline = React32.forwardRef(
1930
2038
  ToastInline.displayName = "ToastInline";
1931
2039
 
1932
2040
  // src/components/Overlays & Feedback/Tooltip.tsx
1933
- import * as React33 from "react";
2041
+ import * as React34 from "react";
1934
2042
  import { Tooltip as TooltipPrimitive } from "radix-ui";
1935
- import { Fragment as Fragment4, jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
2043
+ import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
1936
2044
  var TooltipProvider = TooltipPrimitive.Provider;
1937
2045
  var Tooltip = TooltipPrimitive.Root;
1938
2046
  var TooltipTrigger = TooltipPrimitive.Trigger;
1939
- var TooltipContent = React33.forwardRef(
2047
+ var TooltipContent = React34.forwardRef(
1940
2048
  ({ className, sideOffset = 4, title, description, action, arrow = true, children, ...props }, ref) => {
1941
2049
  const detailed = title != null || description != null;
1942
- return /* @__PURE__ */ jsx34(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs23(
2050
+ return /* @__PURE__ */ jsx35(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs24(
1943
2051
  TooltipPrimitive.Content,
1944
2052
  {
1945
2053
  ref,
@@ -1953,12 +2061,12 @@ var TooltipContent = React33.forwardRef(
1953
2061
  ),
1954
2062
  ...props,
1955
2063
  children: [
1956
- detailed ? /* @__PURE__ */ jsxs23(Fragment4, { children: [
1957
- title != null && /* @__PURE__ */ jsx34("p", { className: "text-xs leading-4 font-semibold text-label", children: title }),
1958
- description != null && /* @__PURE__ */ jsx34("p", { className: "text-xs leading-4.5 text-plum-200", children: description }),
1959
- action != null && /* @__PURE__ */ jsx34("div", { className: "mt-1 text-ui-caption text-plum-300 underline *:underline", children: action })
2064
+ detailed ? /* @__PURE__ */ jsxs24(Fragment4, { children: [
2065
+ title != null && /* @__PURE__ */ jsx35("p", { className: "text-xs leading-4 font-semibold text-label", children: title }),
2066
+ description != null && /* @__PURE__ */ jsx35("p", { className: "text-xs leading-4.5 text-plum-200", children: description }),
2067
+ action != null && /* @__PURE__ */ jsx35("div", { className: "mt-1 text-ui-caption text-plum-300 underline *:underline", children: action })
1960
2068
  ] }) : children,
1961
- arrow && /* @__PURE__ */ jsx34(TooltipPrimitive.Arrow, { width: 12, height: 8, className: "fill-primary-soft-foreground" })
2069
+ arrow && /* @__PURE__ */ jsx35(TooltipPrimitive.Arrow, { width: 12, height: 8, className: "fill-primary-soft-foreground" })
1962
2070
  ]
1963
2071
  }
1964
2072
  ) });
@@ -1967,14 +2075,14 @@ var TooltipContent = React33.forwardRef(
1967
2075
  TooltipContent.displayName = "TooltipContent";
1968
2076
 
1969
2077
  // src/components/Question Types/FileUpload.tsx
1970
- import * as React35 from "react";
2078
+ import * as React36 from "react";
1971
2079
  import { FileText, X as X5 } from "@phosphor-icons/react";
1972
2080
  import { Progress as ProgressPrimitive } from "radix-ui";
1973
2081
 
1974
2082
  // src/components/Tags & Badges/Tag.tsx
1975
- import * as React34 from "react";
2083
+ import * as React35 from "react";
1976
2084
  import { cva as cva5 } from "class-variance-authority";
1977
- import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
2085
+ import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
1978
2086
  var tagVariants = cva5(
1979
2087
  "inline-flex items-center gap-1.5 whitespace-nowrap rounded-sm border px-2.5 py-1 text-ui-caption",
1980
2088
  {
@@ -1990,7 +2098,7 @@ var tagVariants = cva5(
1990
2098
  defaultVariants: { variant: "neutral" }
1991
2099
  }
1992
2100
  );
1993
- var Tag = React34.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx35("span", { ref, className: cn(tagVariants({ variant }), className), ...props }));
2101
+ var Tag = React35.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx36("span", { ref, className: cn(tagVariants({ variant }), className), ...props }));
1994
2102
  Tag.displayName = "Tag";
1995
2103
  var statusDotVariants = cva5("size-1.5 shrink-0 rounded-full", {
1996
2104
  variants: {
@@ -2003,20 +2111,20 @@ var statusDotVariants = cva5("size-1.5 shrink-0 rounded-full", {
2003
2111
  },
2004
2112
  defaultVariants: { status: "active" }
2005
2113
  });
2006
- var StatusTag = React34.forwardRef(
2007
- ({ className, status, children, ...props }, ref) => /* @__PURE__ */ jsxs24("span", { ref, className: cn(tagVariants({ variant: "default" }), className), ...props, children: [
2008
- /* @__PURE__ */ jsx35("span", { className: statusDotVariants({ status }), "aria-hidden": "true" }),
2114
+ var StatusTag = React35.forwardRef(
2115
+ ({ className, status, children, ...props }, ref) => /* @__PURE__ */ jsxs25("span", { ref, className: cn(tagVariants({ variant: "default" }), className), ...props, children: [
2116
+ /* @__PURE__ */ jsx36("span", { className: statusDotVariants({ status }), "aria-hidden": "true" }),
2009
2117
  children
2010
2118
  ] })
2011
2119
  );
2012
2120
  StatusTag.displayName = "StatusTag";
2013
2121
 
2014
2122
  // src/components/Question Types/FileUpload.tsx
2015
- import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
2016
- var FileUploadZone = React35.forwardRef(
2123
+ import { Fragment as Fragment5, jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
2124
+ var FileUploadZone = React36.forwardRef(
2017
2125
  ({ className, title = "Upload document", hint, icon, onFiles, ...props }, ref) => {
2018
- const [over, setOver] = React35.useState(false);
2019
- return /* @__PURE__ */ jsxs25(
2126
+ const [over, setOver] = React36.useState(false);
2127
+ return /* @__PURE__ */ jsxs26(
2020
2128
  "label",
2021
2129
  {
2022
2130
  className: cn(
@@ -2036,12 +2144,12 @@ var FileUploadZone = React35.forwardRef(
2036
2144
  onFiles?.(Array.from(event.dataTransfer.files));
2037
2145
  },
2038
2146
  children: [
2039
- /* @__PURE__ */ jsx36("span", { className: "flex size-10 items-center justify-center rounded-full bg-background bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 text-surface-foreground", children: icon ?? /* @__PURE__ */ jsx36(FileText, { size: 24, "aria-hidden": true }) }),
2040
- /* @__PURE__ */ jsxs25("span", { className: "flex flex-col gap-1", children: [
2041
- /* @__PURE__ */ jsx36("span", { className: "text-body-small text-surface-foreground", children: title }),
2042
- hint && /* @__PURE__ */ jsx36("span", { className: "text-ui-caption text-secondary-muted-foreground", children: hint })
2147
+ /* @__PURE__ */ jsx37("span", { className: "flex size-10 items-center justify-center rounded-full bg-background bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 text-surface-foreground", children: icon ?? /* @__PURE__ */ jsx37(FileText, { size: 24, "aria-hidden": true }) }),
2148
+ /* @__PURE__ */ jsxs26("span", { className: "flex flex-col gap-1", children: [
2149
+ /* @__PURE__ */ jsx37("span", { className: "text-body-small text-surface-foreground", children: title }),
2150
+ hint && /* @__PURE__ */ jsx37("span", { className: "text-ui-caption text-secondary-muted-foreground", children: hint })
2043
2151
  ] }),
2044
- /* @__PURE__ */ jsx36(
2152
+ /* @__PURE__ */ jsx37(
2045
2153
  "input",
2046
2154
  {
2047
2155
  ref,
@@ -2057,49 +2165,49 @@ var FileUploadZone = React35.forwardRef(
2057
2165
  }
2058
2166
  );
2059
2167
  FileUploadZone.displayName = "FileUploadZone";
2060
- var FileUploadItem = React35.forwardRef(
2168
+ var FileUploadItem = React36.forwardRef(
2061
2169
  ({ className, name, size, status = "uploading", progress = 0, timeLeft, icon, onRemove, removeLabel, ...props }, ref) => {
2062
2170
  const uploading = status === "uploading";
2063
- return /* @__PURE__ */ jsxs25(
2171
+ return /* @__PURE__ */ jsxs26(
2064
2172
  "div",
2065
2173
  {
2066
2174
  ref,
2067
2175
  className: cn("flex w-full flex-col justify-center gap-2 overflow-hidden rounded-sm border border-border p-2", className),
2068
2176
  ...props,
2069
2177
  children: [
2070
- /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2", children: [
2071
- /* @__PURE__ */ jsx36("span", { className: "flex size-10 shrink-0 items-center justify-center rounded-full bg-background bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 text-surface-foreground", children: icon ?? /* @__PURE__ */ jsx36(FileText, { size: 24, "aria-hidden": true }) }),
2072
- /* @__PURE__ */ jsxs25("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
2073
- /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between gap-2", children: [
2074
- /* @__PURE__ */ jsxs25("div", { className: "flex min-w-0 items-center gap-2", children: [
2075
- /* @__PURE__ */ jsx36("p", { className: "truncate text-ui-label text-surface-foreground", children: name }),
2076
- status === "complete" && /* @__PURE__ */ jsx36(Tag, { variant: "success", children: "Complete" }),
2077
- status === "error" && /* @__PURE__ */ jsx36(Tag, { variant: "destructive", children: "Error" })
2178
+ /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2", children: [
2179
+ /* @__PURE__ */ jsx37("span", { className: "flex size-10 shrink-0 items-center justify-center rounded-full bg-background bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 text-surface-foreground", children: icon ?? /* @__PURE__ */ jsx37(FileText, { size: 24, "aria-hidden": true }) }),
2180
+ /* @__PURE__ */ jsxs26("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
2181
+ /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between gap-2", children: [
2182
+ /* @__PURE__ */ jsxs26("div", { className: "flex min-w-0 items-center gap-2", children: [
2183
+ /* @__PURE__ */ jsx37("p", { className: "truncate text-ui-label text-surface-foreground", children: name }),
2184
+ status === "complete" && /* @__PURE__ */ jsx37(Tag, { variant: "success", children: "Complete" }),
2185
+ status === "error" && /* @__PURE__ */ jsx37(Tag, { variant: "destructive", children: "Error" })
2078
2186
  ] }),
2079
- onRemove && /* @__PURE__ */ jsx36(Button, { type: "button", variant: "ghost", size: "icon-sm", "aria-label": removeLabel ?? `Remove ${name}`, onClick: onRemove, children: /* @__PURE__ */ jsx36(X5, { size: 16, "aria-hidden": true }) })
2187
+ onRemove && /* @__PURE__ */ jsx37(Button, { type: "button", variant: "ghost", size: "icon-sm", "aria-label": removeLabel ?? `Remove ${name}`, onClick: onRemove, children: /* @__PURE__ */ jsx37(X5, { size: 16, "aria-hidden": true }) })
2080
2188
  ] }),
2081
- /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between text-ui-caption text-secondary-muted-foreground", children: [
2082
- /* @__PURE__ */ jsxs25("span", { className: "flex items-center gap-2", children: [
2189
+ /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between text-ui-caption text-secondary-muted-foreground", children: [
2190
+ /* @__PURE__ */ jsxs26("span", { className: "flex items-center gap-2", children: [
2083
2191
  size,
2084
- uploading && timeLeft && /* @__PURE__ */ jsxs25(Fragment5, { children: [
2085
- /* @__PURE__ */ jsx36("span", { "aria-hidden": "true", className: "size-0.5 rounded-full bg-secondary-muted-foreground" }),
2192
+ uploading && timeLeft && /* @__PURE__ */ jsxs26(Fragment5, { children: [
2193
+ /* @__PURE__ */ jsx37("span", { "aria-hidden": "true", className: "size-0.5 rounded-full bg-secondary-muted-foreground" }),
2086
2194
  timeLeft
2087
2195
  ] })
2088
2196
  ] }),
2089
- uploading && /* @__PURE__ */ jsxs25("span", { className: "text-body-xxs font-normal", children: [
2197
+ uploading && /* @__PURE__ */ jsxs26("span", { className: "text-body-xxs font-normal", children: [
2090
2198
  Math.round(progress),
2091
2199
  "%"
2092
2200
  ] })
2093
2201
  ] })
2094
2202
  ] })
2095
2203
  ] }),
2096
- uploading && /* @__PURE__ */ jsx36(
2204
+ uploading && /* @__PURE__ */ jsx37(
2097
2205
  ProgressPrimitive.Root,
2098
2206
  {
2099
2207
  value: progress,
2100
2208
  "aria-label": `Uploading ${name}`,
2101
2209
  className: "h-0.75 w-full overflow-hidden rounded-sm bg-background bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5",
2102
- children: /* @__PURE__ */ jsx36(ProgressPrimitive.Indicator, { className: "h-full bg-accent transition-[width]", style: { width: `${progress}%` } })
2210
+ children: /* @__PURE__ */ jsx37(ProgressPrimitive.Indicator, { className: "h-full bg-accent transition-[width]", style: { width: `${progress}%` } })
2103
2211
  }
2104
2212
  )
2105
2213
  ]
@@ -2110,31 +2218,31 @@ var FileUploadItem = React35.forwardRef(
2110
2218
  FileUploadItem.displayName = "FileUploadItem";
2111
2219
 
2112
2220
  // src/components/Question Types/Media.tsx
2113
- import * as React36 from "react";
2221
+ import * as React37 from "react";
2114
2222
  import { CornersOut, DotsThree, Image as ImageIcon, Pause, Play, SpeakerSimpleHigh, SpeakerSimpleX, Trash as Trash2 } from "@phosphor-icons/react";
2115
2223
  import { Slider as SliderPrimitive2, ToggleGroup as ToggleGroupPrimitive2 } from "radix-ui";
2116
- import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
2224
+ import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
2117
2225
  function MediaInfo({ name, details, onRemove, removeLabel, large, className, ...props }) {
2118
- return /* @__PURE__ */ jsxs26("div", { className: cn("flex items-center justify-between border-t border-border bg-surface px-6 py-4", className), ...props, children: [
2119
- /* @__PURE__ */ jsxs26("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [
2120
- /* @__PURE__ */ jsx37("p", { className: cn("truncate text-surface-foreground", large ? "text-body-section" : "text-ui-label"), children: name }),
2121
- details && /* @__PURE__ */ jsx37("p", { className: cn("flex items-center gap-2 text-secondary-muted-foreground", large ? "text-body-small" : "text-ui-caption"), children: details.map((part, index) => /* @__PURE__ */ jsxs26(React36.Fragment, { children: [
2122
- index > 0 && /* @__PURE__ */ jsx37("span", { "aria-hidden": "true", className: "size-0.5 rounded-full bg-secondary-muted-foreground" }),
2226
+ return /* @__PURE__ */ jsxs27("div", { className: cn("flex items-center justify-between border-t border-border bg-surface px-6 py-4", className), ...props, children: [
2227
+ /* @__PURE__ */ jsxs27("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [
2228
+ /* @__PURE__ */ jsx38("p", { className: cn("truncate text-surface-foreground", large ? "text-body-section" : "text-ui-label"), children: name }),
2229
+ details && /* @__PURE__ */ jsx38("p", { className: cn("flex items-center gap-2 text-secondary-muted-foreground", large ? "text-body-small" : "text-ui-caption"), children: details.map((part, index) => /* @__PURE__ */ jsxs27(React37.Fragment, { children: [
2230
+ index > 0 && /* @__PURE__ */ jsx38("span", { "aria-hidden": "true", className: "size-0.5 rounded-full bg-secondary-muted-foreground" }),
2123
2231
  part
2124
2232
  ] }, part)) })
2125
2233
  ] }),
2126
- onRemove && /* @__PURE__ */ jsx37(Button, { type: "button", variant: "destructive", size: "icon", "aria-label": removeLabel ?? `Remove ${name}`, onClick: onRemove, children: /* @__PURE__ */ jsx37(Trash2, { size: 16, "aria-hidden": true }) })
2234
+ onRemove && /* @__PURE__ */ jsx38(Button, { type: "button", variant: "destructive", size: "icon", "aria-label": removeLabel ?? `Remove ${name}`, onClick: onRemove, children: /* @__PURE__ */ jsx38(Trash2, { size: 16, "aria-hidden": true }) })
2127
2235
  ] });
2128
2236
  }
2129
- var ImagePreview = React36.forwardRef(
2130
- ({ className, children, name, details, onRemove, ...props }, ref) => /* @__PURE__ */ jsxs26("div", { ref, className: cn("flex w-full flex-col overflow-hidden rounded-lg border border-border", className), ...props, children: [
2131
- /* @__PURE__ */ jsx37("div", { className: "flex h-84 w-full items-center justify-center bg-accent-soft [&>img]:size-full [&>img]:object-contain", children }),
2132
- /* @__PURE__ */ jsx37(MediaInfo, { name, details, onRemove, large: true })
2237
+ var ImagePreview = React37.forwardRef(
2238
+ ({ className, children, name, details, onRemove, ...props }, ref) => /* @__PURE__ */ jsxs27("div", { ref, className: cn("flex w-full flex-col overflow-hidden rounded-lg border border-border", className), ...props, children: [
2239
+ /* @__PURE__ */ jsx38("div", { className: "flex h-84 w-full items-center justify-center bg-accent-soft [&>img]:size-full [&>img]:object-contain", children }),
2240
+ /* @__PURE__ */ jsx38(MediaInfo, { name, details, onRemove, large: true })
2133
2241
  ] })
2134
2242
  );
2135
2243
  ImagePreview.displayName = "ImagePreview";
2136
- var ImageThumbnails = React36.forwardRef(
2137
- ({ className, max, images, value, onValueChange, ...props }, ref) => /* @__PURE__ */ jsx37(
2244
+ var ImageThumbnails = React37.forwardRef(
2245
+ ({ className, max, images, value, onValueChange, ...props }, ref) => /* @__PURE__ */ jsx38(
2138
2246
  ToggleGroupPrimitive2.Root,
2139
2247
  {
2140
2248
  ref,
@@ -2146,17 +2254,17 @@ var ImageThumbnails = React36.forwardRef(
2146
2254
  children: Array.from({ length: max }, (_, index) => {
2147
2255
  const image = images[index];
2148
2256
  if (!image) {
2149
- return /* @__PURE__ */ jsx37(
2257
+ return /* @__PURE__ */ jsx38(
2150
2258
  "span",
2151
2259
  {
2152
2260
  "aria-hidden": "true",
2153
2261
  className: "flex h-20 min-w-0 flex-1 items-center justify-center rounded-sm border border-dashed border-border text-accent-foreground",
2154
- children: /* @__PURE__ */ jsx37(ImageIcon, { size: 24 })
2262
+ children: /* @__PURE__ */ jsx38(ImageIcon, { size: 24 })
2155
2263
  },
2156
2264
  `empty-${index}`
2157
2265
  );
2158
2266
  }
2159
- return /* @__PURE__ */ jsx37(
2267
+ return /* @__PURE__ */ jsx38(
2160
2268
  ToggleGroupPrimitive2.Item,
2161
2269
  {
2162
2270
  value: image.id,
@@ -2166,7 +2274,7 @@ var ImageThumbnails = React36.forwardRef(
2166
2274
  "hover:bg-accent-soft hover:bg-none",
2167
2275
  "data-[state=on]:border-accent-foreground data-[state=on]:bg-accent-soft data-[state=on]:bg-none data-[state=on]:text-accent-foreground"
2168
2276
  ),
2169
- children: image.src ? /* @__PURE__ */ jsx37("img", { src: image.src, alt: "", className: "size-full object-cover" }) : /* @__PURE__ */ jsx37(ImageIcon, { size: 24, "aria-hidden": true })
2277
+ children: image.src ? /* @__PURE__ */ jsx38("img", { src: image.src, alt: "", className: "size-full object-cover" }) : /* @__PURE__ */ jsx38(ImageIcon, { size: 24, "aria-hidden": true })
2170
2278
  },
2171
2279
  image.id
2172
2280
  );
@@ -2179,13 +2287,13 @@ var formatTime = (seconds) => {
2179
2287
  const total = Math.max(0, Math.floor(Number.isFinite(seconds) ? seconds : 0));
2180
2288
  return `${Math.floor(total / 60)}:${String(total % 60).padStart(2, "0")}`;
2181
2289
  };
2182
- var VideoPlayer = React36.forwardRef(
2290
+ var VideoPlayer = React37.forwardRef(
2183
2291
  ({ className, src, name, details, onRemove, onMore, initialTime = 0, initialDuration = 0, ...props }, ref) => {
2184
- const video = React36.useRef(null);
2185
- const [playing, setPlaying] = React36.useState(false);
2186
- const [time, setTime] = React36.useState(initialTime);
2187
- const [duration, setDuration] = React36.useState(initialDuration);
2188
- const [volume, setVolume] = React36.useState(1);
2292
+ const video = React37.useRef(null);
2293
+ const [playing, setPlaying] = React37.useState(false);
2294
+ const [time, setTime] = React37.useState(initialTime);
2295
+ const [duration, setDuration] = React37.useState(initialDuration);
2296
+ const [volume, setVolume] = React37.useState(1);
2189
2297
  const muted = volume === 0;
2190
2298
  const toggle2 = () => {
2191
2299
  const el = video.current;
@@ -2193,9 +2301,9 @@ var VideoPlayer = React36.forwardRef(
2193
2301
  if (el.paused) void el.play();
2194
2302
  else el.pause();
2195
2303
  };
2196
- return /* @__PURE__ */ jsxs26("div", { ref, className: cn("flex w-full flex-col overflow-hidden rounded-lg border border-border bg-surface", className), ...props, children: [
2197
- /* @__PURE__ */ jsxs26("div", { className: "relative flex h-60.5 w-full items-end bg-accent-soft", children: [
2198
- src && /* @__PURE__ */ jsx37(
2304
+ return /* @__PURE__ */ jsxs27("div", { ref, className: cn("flex w-full flex-col overflow-hidden rounded-lg border border-border bg-surface", className), ...props, children: [
2305
+ /* @__PURE__ */ jsxs27("div", { className: "relative flex h-60.5 w-full items-end bg-accent-soft", children: [
2306
+ src && /* @__PURE__ */ jsx38(
2199
2307
  "video",
2200
2308
  {
2201
2309
  ref: video,
@@ -2208,8 +2316,8 @@ var VideoPlayer = React36.forwardRef(
2208
2316
  onVolumeChange: (event) => setVolume(event.currentTarget.muted ? 0 : event.currentTarget.volume)
2209
2317
  }
2210
2318
  ),
2211
- /* @__PURE__ */ jsxs26("div", { className: "relative flex w-full flex-col gap-2 bg-surface-foreground bg-linear-to-r from-primary/30 to-primary/30 px-4 pt-3 pb-4 text-surface", children: [
2212
- /* @__PURE__ */ jsxs26(
2319
+ /* @__PURE__ */ jsxs27("div", { className: "relative flex w-full flex-col gap-2 bg-surface-foreground bg-linear-to-r from-primary/30 to-primary/30 px-4 pt-3 pb-4 text-surface", children: [
2320
+ /* @__PURE__ */ jsxs27(
2213
2321
  SliderPrimitive2.Root,
2214
2322
  {
2215
2323
  min: 0,
@@ -2223,31 +2331,31 @@ var VideoPlayer = React36.forwardRef(
2223
2331
  },
2224
2332
  className: "relative flex h-4 w-full touch-none items-center select-none",
2225
2333
  children: [
2226
- /* @__PURE__ */ jsx37(SliderPrimitive2.Track, { className: "relative h-1 w-full grow overflow-hidden rounded-xxs bg-surface/20", children: /* @__PURE__ */ jsx37(SliderPrimitive2.Range, { className: "absolute h-full bg-accent-foreground" }) }),
2227
- /* @__PURE__ */ jsx37(SliderPrimitive2.Thumb, { "aria-label": "Seek", className: "block size-3 rounded-full border-2 border-surface bg-surface shadow-sm" })
2334
+ /* @__PURE__ */ jsx38(SliderPrimitive2.Track, { className: "relative h-1 w-full grow overflow-hidden rounded-xxs bg-surface/20", children: /* @__PURE__ */ jsx38(SliderPrimitive2.Range, { className: "absolute h-full bg-accent-foreground" }) }),
2335
+ /* @__PURE__ */ jsx38(SliderPrimitive2.Thumb, { "aria-label": "Seek", className: "block size-3 rounded-full border-2 border-surface bg-surface shadow-sm" })
2228
2336
  ]
2229
2337
  }
2230
2338
  ),
2231
- /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between", children: [
2232
- /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-4", children: [
2233
- /* @__PURE__ */ jsx37(
2339
+ /* @__PURE__ */ jsxs27("div", { className: "flex items-center justify-between", children: [
2340
+ /* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-4", children: [
2341
+ /* @__PURE__ */ jsx38(
2234
2342
  "button",
2235
2343
  {
2236
2344
  type: "button",
2237
2345
  "aria-label": playing ? "Pause" : "Play",
2238
2346
  onClick: toggle2,
2239
2347
  className: "inline-flex size-10 items-center justify-center rounded-full bg-surface/12 text-surface transition-colors hover:bg-surface/20",
2240
- children: playing ? /* @__PURE__ */ jsx37(Pause, { size: 16, weight: "fill", "aria-hidden": true }) : /* @__PURE__ */ jsx37(Play, { size: 16, weight: "fill", "aria-hidden": true })
2348
+ children: playing ? /* @__PURE__ */ jsx38(Pause, { size: 16, weight: "fill", "aria-hidden": true }) : /* @__PURE__ */ jsx38(Play, { size: 16, weight: "fill", "aria-hidden": true })
2241
2349
  }
2242
2350
  ),
2243
- /* @__PURE__ */ jsxs26("span", { className: "text-ui-label whitespace-nowrap text-surface/80", children: [
2351
+ /* @__PURE__ */ jsxs27("span", { className: "text-ui-label whitespace-nowrap text-surface/80", children: [
2244
2352
  formatTime(time),
2245
2353
  " / ",
2246
2354
  formatTime(duration)
2247
2355
  ] })
2248
2356
  ] }),
2249
- /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2", children: [
2250
- /* @__PURE__ */ jsx37(
2357
+ /* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2", children: [
2358
+ /* @__PURE__ */ jsx38(
2251
2359
  VolumeControl,
2252
2360
  {
2253
2361
  volume,
@@ -2260,41 +2368,41 @@ var VideoPlayer = React36.forwardRef(
2260
2368
  }
2261
2369
  }
2262
2370
  ),
2263
- /* @__PURE__ */ jsx37(
2371
+ /* @__PURE__ */ jsx38(
2264
2372
  "button",
2265
2373
  {
2266
2374
  type: "button",
2267
2375
  "aria-label": "Full screen",
2268
2376
  onClick: () => void video.current?.requestFullscreen?.(),
2269
2377
  className: "inline-flex size-10 items-center justify-center rounded-md text-surface transition-colors hover:bg-surface/12",
2270
- children: /* @__PURE__ */ jsx37(CornersOut, { size: 16, "aria-hidden": true })
2378
+ children: /* @__PURE__ */ jsx38(CornersOut, { size: 16, "aria-hidden": true })
2271
2379
  }
2272
2380
  ),
2273
- /* @__PURE__ */ jsx37(
2381
+ /* @__PURE__ */ jsx38(
2274
2382
  "button",
2275
2383
  {
2276
2384
  type: "button",
2277
2385
  "aria-label": "More",
2278
2386
  onClick: onMore,
2279
2387
  className: "inline-flex size-10 items-center justify-center rounded-md text-surface transition-colors hover:bg-surface/12",
2280
- children: /* @__PURE__ */ jsx37(DotsThree, { size: 16, "aria-hidden": true })
2388
+ children: /* @__PURE__ */ jsx38(DotsThree, { size: 16, "aria-hidden": true })
2281
2389
  }
2282
2390
  )
2283
2391
  ] })
2284
2392
  ] })
2285
2393
  ] })
2286
2394
  ] }),
2287
- name && /* @__PURE__ */ jsx37(MediaInfo, { name, details, onRemove }),
2288
- /* @__PURE__ */ jsx37("span", { className: "sr-only", "aria-live": "polite", children: muted ? "Muted" : "" })
2395
+ name && /* @__PURE__ */ jsx38(MediaInfo, { name, details, onRemove }),
2396
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", "aria-live": "polite", children: muted ? "Muted" : "" })
2289
2397
  ] });
2290
2398
  }
2291
2399
  );
2292
2400
  VideoPlayer.displayName = "VideoPlayer";
2293
2401
  function VolumeControl({ volume, onVolumeChange, className }) {
2294
- const last = React36.useRef(volume || 1);
2402
+ const last = React37.useRef(volume || 1);
2295
2403
  if (volume > 0) last.current = volume;
2296
- return /* @__PURE__ */ jsxs26("div", { className: cn("group/volume flex items-center", className), children: [
2297
- /* @__PURE__ */ jsx37("div", { className: "w-0 overflow-hidden opacity-0 transition-all group-focus-within/volume:w-16 group-focus-within/volume:opacity-100 group-hover/volume:w-16 group-hover/volume:opacity-100", children: /* @__PURE__ */ jsxs26(
2404
+ return /* @__PURE__ */ jsxs27("div", { className: cn("group/volume flex items-center", className), children: [
2405
+ /* @__PURE__ */ jsx38("div", { className: "w-0 overflow-hidden opacity-0 transition-all group-focus-within/volume:w-16 group-focus-within/volume:opacity-100 group-hover/volume:w-16 group-hover/volume:opacity-100", children: /* @__PURE__ */ jsxs27(
2298
2406
  SliderPrimitive2.Root,
2299
2407
  {
2300
2408
  min: 0,
@@ -2304,32 +2412,32 @@ function VolumeControl({ volume, onVolumeChange, className }) {
2304
2412
  onValueChange: ([next]) => next !== void 0 && onVolumeChange(next),
2305
2413
  className: "relative flex h-4 w-14 touch-none items-center select-none",
2306
2414
  children: [
2307
- /* @__PURE__ */ jsx37(SliderPrimitive2.Track, { className: "relative h-1 w-full grow overflow-hidden rounded-xxs bg-surface/20", children: /* @__PURE__ */ jsx37(SliderPrimitive2.Range, { className: "absolute h-full bg-surface" }) }),
2308
- /* @__PURE__ */ jsx37(SliderPrimitive2.Thumb, { "aria-label": "Volume", className: "block size-3 rounded-full bg-surface shadow-sm" })
2415
+ /* @__PURE__ */ jsx38(SliderPrimitive2.Track, { className: "relative h-1 w-full grow overflow-hidden rounded-xxs bg-surface/20", children: /* @__PURE__ */ jsx38(SliderPrimitive2.Range, { className: "absolute h-full bg-surface" }) }),
2416
+ /* @__PURE__ */ jsx38(SliderPrimitive2.Thumb, { "aria-label": "Volume", className: "block size-3 rounded-full bg-surface shadow-sm" })
2309
2417
  ]
2310
2418
  }
2311
2419
  ) }),
2312
- /* @__PURE__ */ jsx37(
2420
+ /* @__PURE__ */ jsx38(
2313
2421
  "button",
2314
2422
  {
2315
2423
  type: "button",
2316
2424
  "aria-label": volume === 0 ? "Unmute" : "Mute",
2317
2425
  onClick: () => onVolumeChange(volume === 0 ? last.current : 0),
2318
2426
  className: "inline-flex size-10 items-center justify-center rounded-md text-surface transition-colors hover:bg-surface/12",
2319
- children: volume === 0 ? /* @__PURE__ */ jsx37(SpeakerSimpleX, { size: 16, "aria-hidden": true }) : /* @__PURE__ */ jsx37(SpeakerSimpleHigh, { size: 16, "aria-hidden": true })
2427
+ children: volume === 0 ? /* @__PURE__ */ jsx38(SpeakerSimpleX, { size: 16, "aria-hidden": true }) : /* @__PURE__ */ jsx38(SpeakerSimpleHigh, { size: 16, "aria-hidden": true })
2320
2428
  }
2321
2429
  )
2322
2430
  ] });
2323
2431
  }
2324
2432
 
2325
2433
  // src/components/Question Types/OpenEndAnswer.tsx
2326
- import * as React37 from "react";
2327
- import { jsx as jsx38 } from "react/jsx-runtime";
2328
- var OpenEndAnswer = React37.forwardRef(
2434
+ import * as React38 from "react";
2435
+ import { jsx as jsx39 } from "react/jsx-runtime";
2436
+ var OpenEndAnswer = React38.forwardRef(
2329
2437
  ({ value, defaultValue, onChange, maxLength = 1e3, placeholder = "Write your answer", ...props }, ref) => {
2330
- const [internal, setInternal] = React37.useState(String(defaultValue ?? ""));
2438
+ const [internal, setInternal] = React38.useState(String(defaultValue ?? ""));
2331
2439
  const text = value !== void 0 ? String(value) : internal;
2332
- return /* @__PURE__ */ jsx38(
2440
+ return /* @__PURE__ */ jsx39(
2333
2441
  Textarea,
2334
2442
  {
2335
2443
  ref,
@@ -2349,10 +2457,10 @@ var OpenEndAnswer = React37.forwardRef(
2349
2457
  OpenEndAnswer.displayName = "OpenEndAnswer";
2350
2458
 
2351
2459
  // src/components/Question Types/QuestionCard.tsx
2352
- import * as React38 from "react";
2353
- import { jsx as jsx39 } from "react/jsx-runtime";
2354
- var QuestionCard = React38.forwardRef(
2355
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx39(
2460
+ import * as React39 from "react";
2461
+ import { jsx as jsx40 } from "react/jsx-runtime";
2462
+ var QuestionCard = React39.forwardRef(
2463
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx40(
2356
2464
  "div",
2357
2465
  {
2358
2466
  ref,
@@ -2364,7 +2472,7 @@ var QuestionCard = React38.forwardRef(
2364
2472
  QuestionCard.displayName = "QuestionCard";
2365
2473
 
2366
2474
  // src/components/Question Types/QuestionEditorCard.tsx
2367
- import * as React40 from "react";
2475
+ import * as React41 from "react";
2368
2476
  import {
2369
2477
  Clipboard,
2370
2478
  Copy,
@@ -2375,19 +2483,19 @@ import {
2375
2483
  } from "@phosphor-icons/react";
2376
2484
 
2377
2485
  // src/components/Question Types/QuestionHeader.tsx
2378
- import * as React39 from "react";
2486
+ import * as React40 from "react";
2379
2487
  import { DotsSixVertical } from "@phosphor-icons/react";
2380
- import { jsx as jsx40, jsxs as jsxs27 } from "react/jsx-runtime";
2488
+ import { jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
2381
2489
  var eyebrow = "text-ui-caption uppercase text-secondary-muted-foreground";
2382
- var QuestionHeader = React39.forwardRef(
2490
+ var QuestionHeader = React40.forwardRef(
2383
2491
  ({ className, number, title, required, error, onDismissError, editor, onTitleChange, actions, maxLength = 2e3, active, showCounter = true, ...props }, ref) => {
2384
2492
  const label = String(number).padStart(2, "0");
2385
2493
  const showError = error !== void 0 && error !== false;
2386
2494
  if (editor) {
2387
2495
  const text = typeof title === "string" ? title : "";
2388
- return /* @__PURE__ */ jsxs27("div", { ref, className: cn("group/header flex w-full flex-col gap-2", className), ...props, children: [
2389
- /* @__PURE__ */ jsxs27("div", { className: "flex items-center justify-between", children: [
2390
- /* @__PURE__ */ jsxs27(
2496
+ return /* @__PURE__ */ jsxs28("div", { ref, className: cn("group/header flex w-full flex-col gap-2", className), ...props, children: [
2497
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between", children: [
2498
+ /* @__PURE__ */ jsxs28(
2391
2499
  "span",
2392
2500
  {
2393
2501
  className: cn(
@@ -2395,15 +2503,15 @@ var QuestionHeader = React39.forwardRef(
2395
2503
  active ? "bg-accent-soft text-accent-soft-foreground" : "bg-secondary bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 text-surface-foreground"
2396
2504
  ),
2397
2505
  children: [
2398
- /* @__PURE__ */ jsx40(DotsSixVertical, { size: 16, "aria-hidden": true, className: "hidden shrink-0 group-hover/handle:block" }),
2506
+ /* @__PURE__ */ jsx41(DotsSixVertical, { size: 16, "aria-hidden": true, className: "hidden shrink-0 group-hover/handle:block" }),
2399
2507
  "Question ",
2400
2508
  number
2401
2509
  ]
2402
2510
  }
2403
2511
  ),
2404
- actions && /* @__PURE__ */ jsx40("div", { className: "flex items-center gap-2 opacity-0 transition-opacity group-focus-within/header:opacity-100 group-hover/header:opacity-100", children: actions })
2512
+ actions && /* @__PURE__ */ jsx41("div", { className: "flex items-center gap-2 opacity-0 transition-opacity group-focus-within/header:opacity-100 group-hover/header:opacity-100", children: actions })
2405
2513
  ] }),
2406
- /* @__PURE__ */ jsx40(
2514
+ /* @__PURE__ */ jsx41(
2407
2515
  "textarea",
2408
2516
  {
2409
2517
  rows: 1,
@@ -2414,7 +2522,7 @@ var QuestionHeader = React39.forwardRef(
2414
2522
  className: "field-sizing-content w-full resize-none bg-transparent text-heading-h4 text-surface-foreground outline-none"
2415
2523
  }
2416
2524
  ),
2417
- showCounter && /* @__PURE__ */ jsxs27("p", { className: "text-ui-caption text-secondary-muted-foreground", children: [
2525
+ showCounter && /* @__PURE__ */ jsxs28("p", { className: "text-ui-caption text-secondary-muted-foreground", children: [
2418
2526
  text.length,
2419
2527
  "/",
2420
2528
  maxLength,
@@ -2422,16 +2530,16 @@ var QuestionHeader = React39.forwardRef(
2422
2530
  ] })
2423
2531
  ] });
2424
2532
  }
2425
- return /* @__PURE__ */ jsxs27("div", { ref, className: cn("flex w-full flex-col gap-2", className), ...props, children: [
2426
- showError && /* @__PURE__ */ jsx40(ToastInline, { variant: "destructive", onClose: onDismissError, className: "min-h-10", children: /* @__PURE__ */ jsx40("span", { className: "text-ui-label text-destructive", children: error === true ? "This question is mandatory." : error }) }),
2427
- /* @__PURE__ */ jsxs27("p", { className: eyebrow, children: [
2533
+ return /* @__PURE__ */ jsxs28("div", { ref, className: cn("flex w-full flex-col gap-2", className), ...props, children: [
2534
+ showError && /* @__PURE__ */ jsx41(ToastInline, { variant: "destructive", onClose: onDismissError, className: "min-h-10", children: /* @__PURE__ */ jsx41("span", { className: "text-ui-label text-destructive", children: error === true ? "This question is mandatory." : error }) }),
2535
+ /* @__PURE__ */ jsxs28("p", { className: eyebrow, children: [
2428
2536
  "Question ",
2429
2537
  label
2430
2538
  ] }),
2431
- /* @__PURE__ */ jsxs27("h3", { className: "text-heading-h4 text-surface-foreground", children: [
2539
+ /* @__PURE__ */ jsxs28("h3", { className: "text-heading-h4 text-surface-foreground", children: [
2432
2540
  title,
2433
- required && /* @__PURE__ */ jsx40("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }),
2434
- required && /* @__PURE__ */ jsx40("span", { className: "sr-only", children: " (required)" })
2541
+ required && /* @__PURE__ */ jsx41("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }),
2542
+ required && /* @__PURE__ */ jsx41("span", { className: "sr-only", children: " (required)" })
2435
2543
  ] })
2436
2544
  ] });
2437
2545
  }
@@ -2439,8 +2547,8 @@ var QuestionHeader = React39.forwardRef(
2439
2547
  QuestionHeader.displayName = "QuestionHeader";
2440
2548
 
2441
2549
  // src/components/Question Types/QuestionEditorCard.tsx
2442
- import { Fragment as Fragment7, jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
2443
- var QuestionEditorCard = React40.forwardRef(
2550
+ import { Fragment as Fragment7, jsx as jsx42, jsxs as jsxs29 } from "react/jsx-runtime";
2551
+ var QuestionEditorCard = React41.forwardRef(
2444
2552
  ({
2445
2553
  className,
2446
2554
  number,
@@ -2461,14 +2569,14 @@ var QuestionEditorCard = React40.forwardRef(
2461
2569
  ...props
2462
2570
  }, ref) => {
2463
2571
  const footer = active && (countLabel != null || onAdd || onPaste);
2464
- return /* @__PURE__ */ jsxs28(
2572
+ return /* @__PURE__ */ jsxs29(
2465
2573
  "div",
2466
2574
  {
2467
2575
  ref,
2468
2576
  className: cn("group/editor flex w-full items-start gap-2", className),
2469
2577
  ...props,
2470
2578
  children: [
2471
- /* @__PURE__ */ jsxs28(
2579
+ /* @__PURE__ */ jsxs29(
2472
2580
  "div",
2473
2581
  {
2474
2582
  className: cn(
@@ -2476,9 +2584,9 @@ var QuestionEditorCard = React40.forwardRef(
2476
2584
  active ? "border-accent" : "border-border"
2477
2585
  ),
2478
2586
  children: [
2479
- /* @__PURE__ */ jsxs28("div", { className: cn("flex flex-col p-6", footer ? "gap-5" : "gap-4"), children: [
2480
- /* @__PURE__ */ jsxs28("div", { className: "flex flex-col gap-4", children: [
2481
- /* @__PURE__ */ jsx41(
2587
+ /* @__PURE__ */ jsxs29("div", { className: cn("flex flex-col p-6", footer ? "gap-5" : "gap-4"), children: [
2588
+ /* @__PURE__ */ jsxs29("div", { className: "flex flex-col gap-4", children: [
2589
+ /* @__PURE__ */ jsx42(
2482
2590
  QuestionHeader,
2483
2591
  {
2484
2592
  editor: true,
@@ -2488,8 +2596,8 @@ var QuestionEditorCard = React40.forwardRef(
2488
2596
  active,
2489
2597
  showCounter: !!active,
2490
2598
  maxLength,
2491
- actions: actions ?? /* @__PURE__ */ jsxs28(Fragment7, { children: [
2492
- /* @__PURE__ */ jsx41(
2599
+ actions: actions ?? /* @__PURE__ */ jsxs29(Fragment7, { children: [
2600
+ /* @__PURE__ */ jsx42(
2493
2601
  Button,
2494
2602
  {
2495
2603
  type: "button",
@@ -2497,10 +2605,10 @@ var QuestionEditorCard = React40.forwardRef(
2497
2605
  size: "icon-sm",
2498
2606
  "aria-label": "Duplicate question",
2499
2607
  onClick: onDuplicate,
2500
- children: /* @__PURE__ */ jsx41(Copy, { size: 16, "aria-hidden": true })
2608
+ children: /* @__PURE__ */ jsx42(Copy, { size: 16, "aria-hidden": true })
2501
2609
  }
2502
2610
  ),
2503
- /* @__PURE__ */ jsx41(
2611
+ /* @__PURE__ */ jsx42(
2504
2612
  Button,
2505
2613
  {
2506
2614
  type: "button",
@@ -2508,10 +2616,10 @@ var QuestionEditorCard = React40.forwardRef(
2508
2616
  size: "icon-sm",
2509
2617
  "aria-label": "Delete question",
2510
2618
  onClick: onDelete,
2511
- children: /* @__PURE__ */ jsx41(Trash3, { size: 16, "aria-hidden": true })
2619
+ children: /* @__PURE__ */ jsx42(Trash3, { size: 16, "aria-hidden": true })
2512
2620
  }
2513
2621
  ),
2514
- /* @__PURE__ */ jsx41(
2622
+ /* @__PURE__ */ jsx42(
2515
2623
  Button,
2516
2624
  {
2517
2625
  type: "button",
@@ -2519,7 +2627,7 @@ var QuestionEditorCard = React40.forwardRef(
2519
2627
  size: "icon-sm",
2520
2628
  "aria-label": "Preview question",
2521
2629
  onClick: onPreview,
2522
- children: /* @__PURE__ */ jsx41(Eye, { size: 16, "aria-hidden": true })
2630
+ children: /* @__PURE__ */ jsx42(Eye, { size: 16, "aria-hidden": true })
2523
2631
  }
2524
2632
  )
2525
2633
  ] })
@@ -2527,10 +2635,10 @@ var QuestionEditorCard = React40.forwardRef(
2527
2635
  ),
2528
2636
  children
2529
2637
  ] }),
2530
- footer && /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between", children: [
2531
- /* @__PURE__ */ jsx41("p", { className: "text-ui-caption text-secondary-muted-foreground", children: countLabel }),
2532
- /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2", children: [
2533
- onAdd && /* @__PURE__ */ jsx41(
2638
+ footer && /* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-between", children: [
2639
+ /* @__PURE__ */ jsx42("p", { className: "text-ui-caption text-secondary-muted-foreground", children: countLabel }),
2640
+ /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-2", children: [
2641
+ onAdd && /* @__PURE__ */ jsx42(
2534
2642
  Button,
2535
2643
  {
2536
2644
  type: "button",
@@ -2538,10 +2646,10 @@ var QuestionEditorCard = React40.forwardRef(
2538
2646
  size: "icon",
2539
2647
  "aria-label": "Add choice",
2540
2648
  onClick: onAdd,
2541
- children: /* @__PURE__ */ jsx41(Plus3, { size: 16, "aria-hidden": true })
2649
+ children: /* @__PURE__ */ jsx42(Plus3, { size: 16, "aria-hidden": true })
2542
2650
  }
2543
2651
  ),
2544
- onPaste && /* @__PURE__ */ jsx41(
2652
+ onPaste && /* @__PURE__ */ jsx42(
2545
2653
  Button,
2546
2654
  {
2547
2655
  type: "button",
@@ -2549,17 +2657,17 @@ var QuestionEditorCard = React40.forwardRef(
2549
2657
  size: "icon",
2550
2658
  "aria-label": "Paste choices",
2551
2659
  onClick: onPaste,
2552
- children: /* @__PURE__ */ jsx41(Clipboard, { size: 16, "aria-hidden": true })
2660
+ children: /* @__PURE__ */ jsx42(Clipboard, { size: 16, "aria-hidden": true })
2553
2661
  }
2554
2662
  )
2555
2663
  ] })
2556
2664
  ] })
2557
2665
  ] }),
2558
- note && /* @__PURE__ */ jsx41("div", { className: "border-t border-border px-2 py-2 text-body-small text-surface-foreground", children: note })
2666
+ note && /* @__PURE__ */ jsx42("div", { className: "border-t border-border px-2 py-2 text-body-small text-surface-foreground", children: note })
2559
2667
  ]
2560
2668
  }
2561
2669
  ),
2562
- onAskAi && /* @__PURE__ */ jsx41(
2670
+ onAskAi && /* @__PURE__ */ jsx42(
2563
2671
  Button,
2564
2672
  {
2565
2673
  type: "button",
@@ -2568,7 +2676,7 @@ var QuestionEditorCard = React40.forwardRef(
2568
2676
  "aria-label": "Ask AI",
2569
2677
  onClick: onAskAi,
2570
2678
  className: "shrink-0 opacity-0 transition-opacity group-hover/editor:opacity-100 group-focus-within/editor:opacity-100 focus-visible:opacity-100",
2571
- children: /* @__PURE__ */ jsx41(Sparkle2, { size: 16, "aria-hidden": true })
2679
+ children: /* @__PURE__ */ jsx42(Sparkle2, { size: 16, "aria-hidden": true })
2572
2680
  }
2573
2681
  )
2574
2682
  ]
@@ -2579,14 +2687,14 @@ var QuestionEditorCard = React40.forwardRef(
2579
2687
  QuestionEditorCard.displayName = "QuestionEditorCard";
2580
2688
 
2581
2689
  // src/components/Question Types/QuestionNavItem.tsx
2582
- import * as React42 from "react";
2690
+ import * as React43 from "react";
2583
2691
  import { DotsSixVertical as DotsSixVertical2, Warning as Warning2 } from "@phosphor-icons/react";
2584
2692
  import { Slot as Slot3 } from "radix-ui";
2585
2693
 
2586
2694
  // src/components/Question Types/QuestionTypeIcon.tsx
2587
2695
  import "react";
2588
2696
  import { ChatsCircle, CheckSquare, FileArrowUp, ListNumbers, RadioButton, StarHalf } from "@phosphor-icons/react";
2589
- import { jsx as jsx42 } from "react/jsx-runtime";
2697
+ import { jsx as jsx43 } from "react/jsx-runtime";
2590
2698
  var icons = {
2591
2699
  "select-one": RadioButton,
2592
2700
  "select-multiple": CheckSquare,
@@ -2597,15 +2705,15 @@ var icons = {
2597
2705
  };
2598
2706
  function QuestionTypeIcon({ type, size = 22.5, className, ...props }) {
2599
2707
  const Icon = icons[type];
2600
- return /* @__PURE__ */ jsx42(Icon, { size, weight: "duotone", "aria-hidden": true, className: className ?? "text-accent-foreground", ...props });
2708
+ return /* @__PURE__ */ jsx43(Icon, { size, weight: "duotone", "aria-hidden": true, className: className ?? "text-accent-foreground", ...props });
2601
2709
  }
2602
2710
 
2603
2711
  // src/components/Question Types/QuestionNavItem.tsx
2604
- import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
2605
- var QuestionNavItem = React42.forwardRef(
2712
+ import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
2713
+ var QuestionNavItem = React43.forwardRef(
2606
2714
  ({ className, questionType = "select-one", selected, error, asChild, children, ...props }, ref) => {
2607
2715
  const Comp = asChild ? Slot3.Root : "button";
2608
- return /* @__PURE__ */ jsxs29(
2716
+ return /* @__PURE__ */ jsxs30(
2609
2717
  Comp,
2610
2718
  {
2611
2719
  ref,
@@ -2621,12 +2729,12 @@ var QuestionNavItem = React42.forwardRef(
2621
2729
  ),
2622
2730
  ...props,
2623
2731
  children: [
2624
- /* @__PURE__ */ jsxs29("span", { "aria-hidden": "true", className: "relative flex size-4 shrink-0 items-center justify-center", children: [
2625
- /* @__PURE__ */ jsx43(DotsSixVertical2, { size: 16, className: "hidden group-hover/nav:block" }),
2626
- /* @__PURE__ */ jsx43("span", { className: "group-hover/nav:hidden", children: error ? /* @__PURE__ */ jsx43(Warning2, { size: 16, className: "text-destructive" }) : /* @__PURE__ */ jsx43(QuestionTypeIcon, { type: questionType, size: 16 }) })
2732
+ /* @__PURE__ */ jsxs30("span", { "aria-hidden": "true", className: "relative flex size-4 shrink-0 items-center justify-center", children: [
2733
+ /* @__PURE__ */ jsx44(DotsSixVertical2, { size: 16, className: "hidden group-hover/nav:block" }),
2734
+ /* @__PURE__ */ jsx44("span", { className: "group-hover/nav:hidden", children: error ? /* @__PURE__ */ jsx44(Warning2, { size: 16, className: "text-destructive" }) : /* @__PURE__ */ jsx44(QuestionTypeIcon, { type: questionType, size: 16 }) })
2627
2735
  ] }),
2628
- /* @__PURE__ */ jsx43("span", { className: "min-w-0 flex-1 truncate", children }),
2629
- error && /* @__PURE__ */ jsx43("span", { className: "sr-only", children: ", has errors" })
2736
+ /* @__PURE__ */ jsx44("span", { className: "min-w-0 flex-1 truncate", children }),
2737
+ error && /* @__PURE__ */ jsx44("span", { className: "sr-only", children: ", has errors" })
2630
2738
  ]
2631
2739
  }
2632
2740
  );
@@ -2635,14 +2743,14 @@ var QuestionNavItem = React42.forwardRef(
2635
2743
  QuestionNavItem.displayName = "QuestionNavItem";
2636
2744
 
2637
2745
  // src/components/Question Types/QuestionOption.tsx
2638
- import * as React43 from "react";
2746
+ import * as React44 from "react";
2639
2747
  import { Check as Check4, DotsSixVertical as DotsSixVertical3, Plus as Plus4, Trash as Trash4 } from "@phosphor-icons/react";
2640
- import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
2748
+ import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
2641
2749
  var optionClasses = "flex w-full max-w-150 cursor-pointer items-center gap-2 rounded-md border border-border bg-surface px-4 py-2 text-body-base text-surface-foreground transition-colors hover:border-input hover:bg-accent-soft hover:shadow-md has-[[data-state=checked]]:border-accent-foreground has-[[data-state=checked]]:hover:border-accent-foreground has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50";
2642
2750
  function QuestionOption(props) {
2643
- const id = React43.useId();
2644
- return /* @__PURE__ */ jsxs30("label", { htmlFor: id, className: cn(optionClasses, props.className), children: [
2645
- props.kind === "checkbox" ? /* @__PURE__ */ jsx44(
2751
+ const id = React44.useId();
2752
+ return /* @__PURE__ */ jsxs31("label", { htmlFor: id, className: cn(optionClasses, props.className), children: [
2753
+ props.kind === "checkbox" ? /* @__PURE__ */ jsx45(
2646
2754
  Checkbox,
2647
2755
  {
2648
2756
  id,
@@ -2651,16 +2759,16 @@ function QuestionOption(props) {
2651
2759
  onCheckedChange: (next) => props.onCheckedChange?.(next === true),
2652
2760
  disabled: props.disabled
2653
2761
  }
2654
- ) : /* @__PURE__ */ jsx44(RadioGroupItem, { id, value: props.value, disabled: props.disabled }),
2655
- /* @__PURE__ */ jsx44("span", { className: "min-w-0 flex-1", children: props.label })
2762
+ ) : /* @__PURE__ */ jsx45(RadioGroupItem, { id, value: props.value, disabled: props.disabled }),
2763
+ /* @__PURE__ */ jsx45("span", { className: "min-w-0 flex-1", children: props.label })
2656
2764
  ] });
2657
2765
  }
2658
- var QuestionOtherOption = React43.forwardRef(
2766
+ var QuestionOtherOption = React44.forwardRef(
2659
2767
  ({ className, onSubmit, confirmLabel = "Confirm answer", placeholder = "Type your answer", ...props }, ref) => {
2660
- const inner = React43.useRef(null);
2661
- React43.useImperativeHandle(ref, () => inner.current);
2768
+ const inner = React44.useRef(null);
2769
+ React44.useImperativeHandle(ref, () => inner.current);
2662
2770
  const submit = () => onSubmit?.(inner.current?.value ?? "");
2663
- return /* @__PURE__ */ jsxs30(
2771
+ return /* @__PURE__ */ jsxs31(
2664
2772
  "div",
2665
2773
  {
2666
2774
  className: cn(
@@ -2668,7 +2776,7 @@ var QuestionOtherOption = React43.forwardRef(
2668
2776
  className
2669
2777
  ),
2670
2778
  children: [
2671
- /* @__PURE__ */ jsx44(
2779
+ /* @__PURE__ */ jsx45(
2672
2780
  "input",
2673
2781
  {
2674
2782
  ref: inner,
@@ -2684,7 +2792,7 @@ var QuestionOtherOption = React43.forwardRef(
2684
2792
  ...props
2685
2793
  }
2686
2794
  ),
2687
- /* @__PURE__ */ jsx44(Button, { type: "button", variant: "subtle", size: "icon-sm", "aria-label": confirmLabel, onClick: submit, children: /* @__PURE__ */ jsx44(Check4, { size: 16, "aria-hidden": true }) })
2795
+ /* @__PURE__ */ jsx45(Button, { type: "button", variant: "subtle", size: "icon-sm", "aria-label": confirmLabel, onClick: submit, children: /* @__PURE__ */ jsx45(Check4, { size: 16, "aria-hidden": true }) })
2688
2796
  ]
2689
2797
  }
2690
2798
  );
@@ -2692,10 +2800,10 @@ var QuestionOtherOption = React43.forwardRef(
2692
2800
  );
2693
2801
  QuestionOtherOption.displayName = "QuestionOtherOption";
2694
2802
  function QuestionOptionEditor({ label, onLabelChange, onRemove, onAdd, className }) {
2695
- return /* @__PURE__ */ jsxs30("div", { className: cn("flex w-full items-center gap-2", className), children: [
2696
- /* @__PURE__ */ jsxs30("div", { className: "flex h-11.5 min-w-0 flex-1 items-center gap-2 rounded-md border border-border bg-surface px-4 py-2 focus-within:border-input-accent hover:border-input hover:shadow-md", children: [
2697
- /* @__PURE__ */ jsx44(DotsSixVertical3, { size: 20, "aria-hidden": true, className: "shrink-0 text-surface-foreground" }),
2698
- /* @__PURE__ */ jsx44(
2803
+ return /* @__PURE__ */ jsxs31("div", { className: cn("flex w-full items-center gap-2", className), children: [
2804
+ /* @__PURE__ */ jsxs31("div", { className: "flex h-11.5 min-w-0 flex-1 items-center gap-2 rounded-md border border-border bg-surface px-4 py-2 focus-within:border-input-accent hover:border-input hover:shadow-md", children: [
2805
+ /* @__PURE__ */ jsx45(DotsSixVertical3, { size: 20, "aria-hidden": true, className: "shrink-0 text-surface-foreground" }),
2806
+ /* @__PURE__ */ jsx45(
2699
2807
  "input",
2700
2808
  {
2701
2809
  "aria-label": "Option label",
@@ -2705,15 +2813,15 @@ function QuestionOptionEditor({ label, onLabelChange, onRemove, onAdd, className
2705
2813
  }
2706
2814
  )
2707
2815
  ] }),
2708
- /* @__PURE__ */ jsx44(Button, { type: "button", variant: "destructive", size: "icon-sm", "aria-label": "Remove option", onClick: onRemove, children: /* @__PURE__ */ jsx44(Trash4, { size: 16, "aria-hidden": true }) }),
2709
- /* @__PURE__ */ jsx44(Button, { type: "button", variant: "ghost", size: "icon-sm", "aria-label": "Add option", onClick: onAdd, children: /* @__PURE__ */ jsx44(Plus4, { size: 16, "aria-hidden": true }) })
2816
+ /* @__PURE__ */ jsx45(Button, { type: "button", variant: "destructive", size: "icon-sm", "aria-label": "Remove option", onClick: onRemove, children: /* @__PURE__ */ jsx45(Trash4, { size: 16, "aria-hidden": true }) }),
2817
+ /* @__PURE__ */ jsx45(Button, { type: "button", variant: "ghost", size: "icon-sm", "aria-label": "Add option", onClick: onAdd, children: /* @__PURE__ */ jsx45(Plus4, { size: 16, "aria-hidden": true }) })
2710
2818
  ] });
2711
2819
  }
2712
2820
 
2713
2821
  // src/components/Question Types/RankList.tsx
2714
- import * as React44 from "react";
2822
+ import * as React45 from "react";
2715
2823
  import { DotsSixVertical as DotsSixVertical4 } from "@phosphor-icons/react";
2716
- import { Fragment as Fragment8, jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
2824
+ import { Fragment as Fragment8, jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
2717
2825
  function move(list, from, to) {
2718
2826
  if (from === to || to < 0 || to >= list.length) return list;
2719
2827
  const next = list.slice();
@@ -2721,13 +2829,13 @@ function move(list, from, to) {
2721
2829
  next.splice(to, 0, item);
2722
2830
  return next;
2723
2831
  }
2724
- var RankList = React44.forwardRef(
2832
+ var RankList = React45.forwardRef(
2725
2833
  ({ className, items, onItemsChange, ...props }, ref) => {
2726
- const [dragIndex, setDragIndex] = React44.useState(null);
2727
- const [announcement, setAnnouncement] = React44.useState("");
2728
- const handles = React44.useRef(/* @__PURE__ */ new Map());
2729
- const refocus = React44.useRef(null);
2730
- React44.useEffect(() => {
2834
+ const [dragIndex, setDragIndex] = React45.useState(null);
2835
+ const [announcement, setAnnouncement] = React45.useState("");
2836
+ const handles = React45.useRef(/* @__PURE__ */ new Map());
2837
+ const refocus = React45.useRef(null);
2838
+ React45.useEffect(() => {
2731
2839
  if (refocus.current) {
2732
2840
  handles.current.get(refocus.current)?.focus();
2733
2841
  refocus.current = null;
@@ -2740,8 +2848,8 @@ var RankList = React44.forwardRef(
2740
2848
  setAnnouncement(`Moved to position ${to + 1} of ${items.length}`);
2741
2849
  onItemsChange(next);
2742
2850
  };
2743
- return /* @__PURE__ */ jsxs31(Fragment8, { children: [
2744
- /* @__PURE__ */ jsx45("ol", { ref, className: cn("flex w-full max-w-150 flex-col gap-4", className), ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs31(
2851
+ return /* @__PURE__ */ jsxs32(Fragment8, { children: [
2852
+ /* @__PURE__ */ jsx46("ol", { ref, className: cn("flex w-full max-w-150 flex-col gap-4", className), ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs32(
2745
2853
  "li",
2746
2854
  {
2747
2855
  draggable: true,
@@ -2758,7 +2866,7 @@ var RankList = React44.forwardRef(
2758
2866
  dragIndex === index && "opacity-50"
2759
2867
  ),
2760
2868
  children: [
2761
- /* @__PURE__ */ jsx45(
2869
+ /* @__PURE__ */ jsx46(
2762
2870
  "button",
2763
2871
  {
2764
2872
  type: "button",
@@ -2777,10 +2885,10 @@ var RankList = React44.forwardRef(
2777
2885
  }
2778
2886
  },
2779
2887
  className: "inline-flex shrink-0 cursor-grab rounded-xs text-surface-foreground",
2780
- children: /* @__PURE__ */ jsx45(DotsSixVertical4, { size: 16, "aria-hidden": true })
2888
+ children: /* @__PURE__ */ jsx46(DotsSixVertical4, { size: 16, "aria-hidden": true })
2781
2889
  }
2782
2890
  ),
2783
- /* @__PURE__ */ jsx45(
2891
+ /* @__PURE__ */ jsx46(
2784
2892
  "span",
2785
2893
  {
2786
2894
  "aria-hidden": "true",
@@ -2788,27 +2896,27 @@ var RankList = React44.forwardRef(
2788
2896
  children: index + 1
2789
2897
  }
2790
2898
  ),
2791
- /* @__PURE__ */ jsx45("span", { className: "min-w-0 flex-1", children: item.label })
2899
+ /* @__PURE__ */ jsx46("span", { className: "min-w-0 flex-1", children: item.label })
2792
2900
  ]
2793
2901
  },
2794
2902
  item.id
2795
2903
  )) }),
2796
- /* @__PURE__ */ jsx45("span", { role: "status", "aria-live": "polite", className: "sr-only", children: announcement })
2904
+ /* @__PURE__ */ jsx46("span", { role: "status", "aria-live": "polite", className: "sr-only", children: announcement })
2797
2905
  ] });
2798
2906
  }
2799
2907
  );
2800
2908
  RankList.displayName = "RankList";
2801
2909
 
2802
2910
  // src/components/Question Types/RatingScale.tsx
2803
- import * as React45 from "react";
2911
+ import * as React46 from "react";
2804
2912
  import { ToggleGroup as ToggleGroupPrimitive3 } from "radix-ui";
2805
- import { jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
2806
- var RatingScale = React45.forwardRef(
2913
+ import { jsx as jsx47, jsxs as jsxs33 } from "react/jsx-runtime";
2914
+ var RatingScale = React46.forwardRef(
2807
2915
  ({ className, max = 5, value, defaultValue, onValueChange, lowLabel, highLabel, ...props }, ref) => {
2808
- const [internal, setInternal] = React45.useState(defaultValue);
2916
+ const [internal, setInternal] = React46.useState(defaultValue);
2809
2917
  const current = value !== void 0 ? value : internal;
2810
- return /* @__PURE__ */ jsxs32("div", { className: cn("flex w-full max-w-150 flex-col gap-2", className), children: [
2811
- /* @__PURE__ */ jsx46(
2918
+ return /* @__PURE__ */ jsxs33("div", { className: cn("flex w-full max-w-150 flex-col gap-2", className), children: [
2919
+ /* @__PURE__ */ jsx47(
2812
2920
  ToggleGroupPrimitive3.Root,
2813
2921
  {
2814
2922
  ref,
@@ -2821,7 +2929,7 @@ var RatingScale = React45.forwardRef(
2821
2929
  },
2822
2930
  className: "flex gap-2",
2823
2931
  ...props,
2824
- children: Array.from({ length: max }, (_, i) => i + 1).map((n) => /* @__PURE__ */ jsx46(
2932
+ children: Array.from({ length: max }, (_, i) => i + 1).map((n) => /* @__PURE__ */ jsx47(
2825
2933
  ToggleGroupPrimitive3.Item,
2826
2934
  {
2827
2935
  value: String(n),
@@ -2837,9 +2945,9 @@ var RatingScale = React45.forwardRef(
2837
2945
  ))
2838
2946
  }
2839
2947
  ),
2840
- (lowLabel != null || highLabel != null) && /* @__PURE__ */ jsxs32("div", { className: "flex justify-between text-ui-caption text-secondary-muted-foreground", "aria-hidden": "true", children: [
2841
- /* @__PURE__ */ jsx46("span", { children: lowLabel }),
2842
- /* @__PURE__ */ jsx46("span", { children: highLabel })
2948
+ (lowLabel != null || highLabel != null) && /* @__PURE__ */ jsxs33("div", { className: "flex justify-between text-ui-caption text-secondary-muted-foreground", "aria-hidden": "true", children: [
2949
+ /* @__PURE__ */ jsx47("span", { children: lowLabel }),
2950
+ /* @__PURE__ */ jsx47("span", { children: highLabel })
2843
2951
  ] })
2844
2952
  ] });
2845
2953
  }
@@ -2847,27 +2955,27 @@ var RatingScale = React45.forwardRef(
2847
2955
  RatingScale.displayName = "RatingScale";
2848
2956
 
2849
2957
  // src/components/Data Display/Progress.tsx
2850
- import * as React46 from "react";
2958
+ import * as React47 from "react";
2851
2959
  import { Progress as ProgressPrimitive2 } from "radix-ui";
2852
- import { jsx as jsx47, jsxs as jsxs33 } from "react/jsx-runtime";
2853
- var Progress = React46.forwardRef(
2960
+ import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
2961
+ var Progress = React47.forwardRef(
2854
2962
  ({ className, value = 0, label, valueLabel, detailsStart, detailsEnd, ...props }, ref) => {
2855
2963
  const hasHeader = label != null || valueLabel != null;
2856
2964
  const hasDetails = detailsStart != null || detailsEnd != null;
2857
2965
  const clamped = Math.min(100, Math.max(0, value ?? 0));
2858
- return /* @__PURE__ */ jsxs33("div", { className: cn("flex w-full flex-col gap-2", className), children: [
2859
- hasHeader && /* @__PURE__ */ jsxs33("div", { className: "flex items-center justify-between text-ui-label text-surface-foreground", children: [
2860
- /* @__PURE__ */ jsx47("span", { children: label }),
2861
- /* @__PURE__ */ jsx47("span", { children: valueLabel === true ? `${Math.round(clamped)}%` : valueLabel })
2966
+ return /* @__PURE__ */ jsxs34("div", { className: cn("flex w-full flex-col gap-2", className), children: [
2967
+ hasHeader && /* @__PURE__ */ jsxs34("div", { className: "flex items-center justify-between text-ui-label text-surface-foreground", children: [
2968
+ /* @__PURE__ */ jsx48("span", { children: label }),
2969
+ /* @__PURE__ */ jsx48("span", { children: valueLabel === true ? `${Math.round(clamped)}%` : valueLabel })
2862
2970
  ] }),
2863
- /* @__PURE__ */ jsx47(
2971
+ /* @__PURE__ */ jsx48(
2864
2972
  ProgressPrimitive2.Root,
2865
2973
  {
2866
2974
  ref,
2867
2975
  value: clamped,
2868
2976
  className: "relative h-2 w-full overflow-hidden rounded-full bg-secondary",
2869
2977
  ...props,
2870
- children: /* @__PURE__ */ jsx47(
2978
+ children: /* @__PURE__ */ jsx48(
2871
2979
  ProgressPrimitive2.Indicator,
2872
2980
  {
2873
2981
  className: "h-full rounded-full bg-accent transition-[width]",
@@ -2876,9 +2984,9 @@ var Progress = React46.forwardRef(
2876
2984
  )
2877
2985
  }
2878
2986
  ),
2879
- hasDetails && /* @__PURE__ */ jsxs33("div", { className: "flex items-start justify-between text-ui-label leading-5 text-secondary-muted-foreground", children: [
2880
- /* @__PURE__ */ jsx47("span", { children: detailsStart }),
2881
- /* @__PURE__ */ jsx47("span", { children: detailsEnd })
2987
+ hasDetails && /* @__PURE__ */ jsxs34("div", { className: "flex items-start justify-between text-ui-label leading-5 text-secondary-muted-foreground", children: [
2988
+ /* @__PURE__ */ jsx48("span", { children: detailsStart }),
2989
+ /* @__PURE__ */ jsx48("span", { children: detailsEnd })
2882
2990
  ] })
2883
2991
  ] });
2884
2992
  }
@@ -2886,11 +2994,11 @@ var Progress = React46.forwardRef(
2886
2994
  Progress.displayName = "Progress";
2887
2995
 
2888
2996
  // src/components/Data Display/Table.tsx
2889
- import * as React47 from "react";
2997
+ import * as React48 from "react";
2890
2998
  import { CaretDown as CaretDown4, CaretUp } from "@phosphor-icons/react";
2891
- import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
2892
- var Table = React47.forwardRef(
2893
- ({ className, containerClassName, striped, ...props }, ref) => /* @__PURE__ */ jsx48("div", { className: cn("relative w-full overflow-auto rounded-lg border border-border bg-surface", containerClassName), children: /* @__PURE__ */ jsx48(
2999
+ import { jsx as jsx49, jsxs as jsxs35 } from "react/jsx-runtime";
3000
+ var Table = React48.forwardRef(
3001
+ ({ className, containerClassName, striped, ...props }, ref) => /* @__PURE__ */ jsx49("div", { className: cn("relative w-full overflow-auto rounded-lg border border-border bg-surface", containerClassName), children: /* @__PURE__ */ jsx49(
2894
3002
  "table",
2895
3003
  {
2896
3004
  ref,
@@ -2901,16 +3009,16 @@ var Table = React47.forwardRef(
2901
3009
  ) })
2902
3010
  );
2903
3011
  Table.displayName = "Table";
2904
- var TableHeader = React47.forwardRef(
2905
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx48("thead", { ref, className, ...props })
3012
+ var TableHeader = React48.forwardRef(
3013
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx49("thead", { ref, className, ...props })
2906
3014
  );
2907
3015
  TableHeader.displayName = "TableHeader";
2908
- var TableBody = React47.forwardRef(
2909
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx48("tbody", { ref, className, ...props })
3016
+ var TableBody = React48.forwardRef(
3017
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx49("tbody", { ref, className, ...props })
2910
3018
  );
2911
3019
  TableBody.displayName = "TableBody";
2912
- var TableRow = React47.forwardRef(
2913
- ({ className, selected, ...props }, ref) => /* @__PURE__ */ jsx48(
3020
+ var TableRow = React48.forwardRef(
3021
+ ({ className, selected, ...props }, ref) => /* @__PURE__ */ jsx49(
2914
3022
  "tr",
2915
3023
  {
2916
3024
  ref,
@@ -2927,10 +3035,10 @@ var TableRow = React47.forwardRef(
2927
3035
  );
2928
3036
  TableRow.displayName = "TableRow";
2929
3037
  var ariaSort = { none: "none", asc: "ascending", desc: "descending" };
2930
- var TableHead = React47.forwardRef(
3038
+ var TableHead = React48.forwardRef(
2931
3039
  ({ className, align = "left", sortable, sort = "none", onSort, checkbox, children, ...props }, ref) => {
2932
- const caret = sort === "asc" ? /* @__PURE__ */ jsx48(CaretUp, { size: 16, "aria-hidden": true, className: "shrink-0" }) : /* @__PURE__ */ jsx48(CaretDown4, { size: 16, "aria-hidden": true, className: "shrink-0" });
2933
- return /* @__PURE__ */ jsx48(
3040
+ const caret = sort === "asc" ? /* @__PURE__ */ jsx49(CaretUp, { size: 16, "aria-hidden": true, className: "shrink-0" }) : /* @__PURE__ */ jsx49(CaretDown4, { size: 16, "aria-hidden": true, className: "shrink-0" });
3041
+ return /* @__PURE__ */ jsx49(
2934
3042
  "th",
2935
3043
  {
2936
3044
  ref,
@@ -2943,7 +3051,7 @@ var TableHead = React47.forwardRef(
2943
3051
  className
2944
3052
  ),
2945
3053
  ...props,
2946
- children: sortable ? /* @__PURE__ */ jsxs34(
3054
+ children: sortable ? /* @__PURE__ */ jsxs35(
2947
3055
  "button",
2948
3056
  {
2949
3057
  type: "button",
@@ -2954,14 +3062,14 @@ var TableHead = React47.forwardRef(
2954
3062
  caret
2955
3063
  ]
2956
3064
  }
2957
- ) : checkbox ? /* @__PURE__ */ jsx48("div", { className: "flex items-center justify-center", children }) : children
3065
+ ) : checkbox ? /* @__PURE__ */ jsx49("div", { className: "flex items-center justify-center", children }) : children
2958
3066
  }
2959
3067
  );
2960
3068
  }
2961
3069
  );
2962
3070
  TableHead.displayName = "TableHead";
2963
- var TableCell = React47.forwardRef(
2964
- ({ className, align = "left", muted, checkbox, actions, children, ...props }, ref) => /* @__PURE__ */ jsx48(
3071
+ var TableCell = React48.forwardRef(
3072
+ ({ className, align = "left", muted, checkbox, actions, children, ...props }, ref) => /* @__PURE__ */ jsx49(
2965
3073
  "td",
2966
3074
  {
2967
3075
  ref,
@@ -2974,25 +3082,25 @@ var TableCell = React47.forwardRef(
2974
3082
  className
2975
3083
  ),
2976
3084
  ...props,
2977
- children: checkbox ? /* @__PURE__ */ jsx48("div", { className: "flex items-center justify-center", children }) : actions ? /* @__PURE__ */ jsx48("div", { className: "flex items-start justify-end gap-1", children }) : children
3085
+ children: checkbox ? /* @__PURE__ */ jsx49("div", { className: "flex items-center justify-center", children }) : actions ? /* @__PURE__ */ jsx49("div", { className: "flex items-start justify-end gap-1", children }) : children
2978
3086
  }
2979
3087
  )
2980
3088
  );
2981
3089
  TableCell.displayName = "TableCell";
2982
3090
  function TableCellTwoLines({ primary, secondary, avatar, className, ...props }) {
2983
- return /* @__PURE__ */ jsxs34("div", { className: cn("flex items-center gap-2", className), ...props, children: [
3091
+ return /* @__PURE__ */ jsxs35("div", { className: cn("flex items-center gap-2", className), ...props, children: [
2984
3092
  avatar,
2985
- /* @__PURE__ */ jsxs34("div", { className: "flex flex-col gap-0.5 whitespace-nowrap", children: [
2986
- /* @__PURE__ */ jsx48("span", { className: "text-ui-label text-surface-foreground", children: primary }),
2987
- secondary && /* @__PURE__ */ jsx48("span", { className: "text-ui-caption text-secondary-muted-foreground", children: secondary })
3093
+ /* @__PURE__ */ jsxs35("div", { className: "flex flex-col gap-0.5 whitespace-nowrap", children: [
3094
+ /* @__PURE__ */ jsx49("span", { className: "text-ui-label text-surface-foreground", children: primary }),
3095
+ secondary && /* @__PURE__ */ jsx49("span", { className: "text-ui-caption text-secondary-muted-foreground", children: secondary })
2988
3096
  ] })
2989
3097
  ] });
2990
3098
  }
2991
3099
 
2992
3100
  // src/components/Data Display/StatCard.tsx
2993
- import * as React48 from "react";
3101
+ import * as React49 from "react";
2994
3102
  import { cva as cva6 } from "class-variance-authority";
2995
- import { jsx as jsx49, jsxs as jsxs35 } from "react/jsx-runtime";
3103
+ import { jsx as jsx50, jsxs as jsxs36 } from "react/jsx-runtime";
2996
3104
  var statCardVariants = cva6("flex min-w-0 flex-col gap-2 rounded-md border p-3", {
2997
3105
  variants: {
2998
3106
  variant: {
@@ -3002,11 +3110,11 @@ var statCardVariants = cva6("flex min-w-0 flex-col gap-2 rounded-md border p-3",
3002
3110
  },
3003
3111
  defaultVariants: { variant: "default" }
3004
3112
  });
3005
- var StatCard = React48.forwardRef(
3006
- ({ className, variant, label, value, icon, ...props }, ref) => /* @__PURE__ */ jsxs35("div", { ref, className: cn(statCardVariants({ variant }), className), ...props, children: [
3007
- /* @__PURE__ */ jsx49("p", { className: "truncate text-ui-caption text-secondary-muted-foreground", children: label }),
3008
- /* @__PURE__ */ jsxs35("p", { className: "flex items-center gap-2 text-body-base text-surface-foreground", children: [
3009
- icon && /* @__PURE__ */ jsx49("span", { "aria-hidden": "true", className: "inline-flex size-6 shrink-0 items-center justify-center", children: icon }),
3113
+ var StatCard = React49.forwardRef(
3114
+ ({ className, variant, label, value, icon, ...props }, ref) => /* @__PURE__ */ jsxs36("div", { ref, className: cn(statCardVariants({ variant }), className), ...props, children: [
3115
+ /* @__PURE__ */ jsx50("p", { className: "truncate text-ui-caption text-secondary-muted-foreground", children: label }),
3116
+ /* @__PURE__ */ jsxs36("p", { className: "flex items-center gap-2 text-body-base text-surface-foreground", children: [
3117
+ icon && /* @__PURE__ */ jsx50("span", { "aria-hidden": "true", className: "inline-flex size-6 shrink-0 items-center justify-center", children: icon }),
3010
3118
  value
3011
3119
  ] })
3012
3120
  ] })
@@ -3014,13 +3122,13 @@ var StatCard = React48.forwardRef(
3014
3122
  StatCard.displayName = "StatCard";
3015
3123
 
3016
3124
  // src/components/Research-Specific/ActivityStructure.tsx
3017
- import * as React50 from "react";
3125
+ import * as React51 from "react";
3018
3126
 
3019
3127
  // src/components/Tags & Badges/EditableTag.tsx
3020
- import * as React49 from "react";
3128
+ import * as React50 from "react";
3021
3129
  import { Crown, Plus as Plus5, X as X6 } from "@phosphor-icons/react";
3022
3130
  import { cva as cva7 } from "class-variance-authority";
3023
- import { jsx as jsx50, jsxs as jsxs36 } from "react/jsx-runtime";
3131
+ import { jsx as jsx51, jsxs as jsxs37 } from "react/jsx-runtime";
3024
3132
  var editableTagVariants = cva7(
3025
3133
  "inline-flex h-6.5 items-center whitespace-nowrap rounded-sm py-1 text-ui-caption transition-colors",
3026
3134
  {
@@ -3035,27 +3143,27 @@ var editableTagVariants = cva7(
3035
3143
  defaultVariants: { type: "default" }
3036
3144
  }
3037
3145
  );
3038
- var EditableTag = React49.forwardRef(
3146
+ var EditableTag = React50.forwardRef(
3039
3147
  ({ className, type = "default", icon, onRemove, onClick, children, ...props }, ref) => {
3040
3148
  const classes = cn(editableTagVariants({ type }), className);
3041
- const leading = type === "add" ? /* @__PURE__ */ jsx50(Plus5, { size: 12, "aria-hidden": true }) : icon !== void 0 ? icon : type === "default" ? /* @__PURE__ */ jsx50(Crown, { size: 12, weight: "fill", "aria-hidden": true }) : null;
3149
+ const leading = type === "add" ? /* @__PURE__ */ jsx51(Plus5, { size: 12, "aria-hidden": true }) : icon !== void 0 ? icon : type === "default" ? /* @__PURE__ */ jsx51(Crown, { size: 12, weight: "fill", "aria-hidden": true }) : null;
3042
3150
  if (type === "add" || type === "multiple" && onClick) {
3043
- return /* @__PURE__ */ jsxs36("button", { ref, type: "button", className: classes, onClick, ...props, children: [
3151
+ return /* @__PURE__ */ jsxs37("button", { ref, type: "button", className: classes, onClick, ...props, children: [
3044
3152
  leading,
3045
3153
  children
3046
3154
  ] });
3047
3155
  }
3048
- return /* @__PURE__ */ jsxs36("span", { ref, className: classes, ...props, children: [
3156
+ return /* @__PURE__ */ jsxs37("span", { ref, className: classes, ...props, children: [
3049
3157
  leading,
3050
3158
  children,
3051
- onRemove && /* @__PURE__ */ jsx50(
3159
+ onRemove && /* @__PURE__ */ jsx51(
3052
3160
  "button",
3053
3161
  {
3054
3162
  type: "button",
3055
3163
  "aria-label": typeof children === "string" ? `Remove ${children}` : "Remove",
3056
3164
  onClick: onRemove,
3057
3165
  className: "inline-flex size-3 items-center justify-center rounded-xs",
3058
- children: /* @__PURE__ */ jsx50(X6, { size: 12, "aria-hidden": true })
3166
+ children: /* @__PURE__ */ jsx51(X6, { size: 12, "aria-hidden": true })
3059
3167
  }
3060
3168
  )
3061
3169
  ] });
@@ -3064,23 +3172,23 @@ var EditableTag = React49.forwardRef(
3064
3172
  EditableTag.displayName = "EditableTag";
3065
3173
 
3066
3174
  // src/components/Research-Specific/ActivityStructure.tsx
3067
- import { jsx as jsx51, jsxs as jsxs37 } from "react/jsx-runtime";
3068
- var ActivityStructure = React50.forwardRef(
3069
- ({ className, title = "Activity Structure", stats, sections, onRemoveTag, onAddTag, addTagLabel = "Add tag", ...props }, ref) => /* @__PURE__ */ jsxs37(
3175
+ import { jsx as jsx52, jsxs as jsxs38 } from "react/jsx-runtime";
3176
+ var ActivityStructure = React51.forwardRef(
3177
+ ({ className, title = "Activity Structure", stats, sections, onRemoveTag, onAddTag, addTagLabel = "Add tag", ...props }, ref) => /* @__PURE__ */ jsxs38(
3070
3178
  "section",
3071
3179
  {
3072
3180
  ref,
3073
3181
  className: cn("flex w-full max-w-96.5 flex-col gap-4 rounded-2xl border border-border bg-surface p-4", className),
3074
3182
  ...props,
3075
3183
  children: [
3076
- /* @__PURE__ */ jsx51("h3", { className: "text-heading-h3 text-surface-foreground", children: title }),
3077
- /* @__PURE__ */ jsx51("div", { className: "grid grid-cols-2 gap-3", children: stats.map(({ id, ...stat }) => /* @__PURE__ */ jsx51(StatCard, { ...stat }, id)) }),
3078
- sections?.map(({ id, heading, body, tags }) => /* @__PURE__ */ jsxs37("div", { className: "flex flex-col gap-2", children: [
3079
- /* @__PURE__ */ jsx51("h4", { className: "text-heading-h4 text-surface-foreground", children: heading }),
3080
- /* @__PURE__ */ jsx51("p", { className: "text-body-base text-surface-foreground", children: body }),
3081
- (tags?.length || onAddTag) && /* @__PURE__ */ jsxs37("div", { className: "flex flex-wrap items-center gap-2", children: [
3082
- tags?.map((tag) => /* @__PURE__ */ jsx51(EditableTag, { type: "editable", onRemove: onRemoveTag && (() => onRemoveTag(id, tag)), children: tag }, tag)),
3083
- onAddTag && /* @__PURE__ */ jsx51(EditableTag, { type: "add", onClick: () => onAddTag(id), children: addTagLabel })
3184
+ /* @__PURE__ */ jsx52("h3", { className: "text-heading-h3 text-surface-foreground", children: title }),
3185
+ /* @__PURE__ */ jsx52("div", { className: "grid grid-cols-2 gap-3", children: stats.map(({ id, ...stat }) => /* @__PURE__ */ jsx52(StatCard, { ...stat }, id)) }),
3186
+ sections?.map(({ id, heading, body, tags }) => /* @__PURE__ */ jsxs38("div", { className: "flex flex-col gap-2", children: [
3187
+ /* @__PURE__ */ jsx52("h4", { className: "text-heading-h4 text-surface-foreground", children: heading }),
3188
+ /* @__PURE__ */ jsx52("p", { className: "text-body-base text-surface-foreground", children: body }),
3189
+ (tags?.length || onAddTag) && /* @__PURE__ */ jsxs38("div", { className: "flex flex-wrap items-center gap-2", children: [
3190
+ tags?.map((tag) => /* @__PURE__ */ jsx52(EditableTag, { type: "editable", onRemove: onRemoveTag && (() => onRemoveTag(id, tag)), children: tag }, tag)),
3191
+ onAddTag && /* @__PURE__ */ jsx52(EditableTag, { type: "add", onClick: () => onAddTag(id), children: addTagLabel })
3084
3192
  ] })
3085
3193
  ] }, id))
3086
3194
  ]
@@ -3089,11 +3197,11 @@ var ActivityStructure = React50.forwardRef(
3089
3197
  );
3090
3198
  ActivityStructure.displayName = "ActivityStructure";
3091
3199
 
3092
- // src/components/Tags & Badges/RoleTag.tsx
3093
- import * as React51 from "react";
3200
+ // src/components/Tags & Badges/Badge.tsx
3201
+ import * as React52 from "react";
3094
3202
  import { DotsSixVertical as DotsSixVertical5, RadioButton as RadioButton2 } from "@phosphor-icons/react";
3095
3203
  import { cva as cva8 } from "class-variance-authority";
3096
- import { jsx as jsx52, jsxs as jsxs38 } from "react/jsx-runtime";
3204
+ import { jsx as jsx53, jsxs as jsxs39 } from "react/jsx-runtime";
3097
3205
  var roleTagVariants = cva8(
3098
3206
  "group inline-flex h-6 items-center whitespace-nowrap rounded-sm py-1 text-ui-caption transition-colors",
3099
3207
  {
@@ -3102,7 +3210,9 @@ var roleTagVariants = cva8(
3102
3210
  primary: "bg-primary-soft px-2.5 text-primary-soft-foreground",
3103
3211
  secondary: "bg-secondary bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 px-2.5 text-secondary-muted-foreground",
3104
3212
  question: "gap-1 bg-primary-soft pl-1 pr-2.5 text-plum-500",
3105
- interactable: "gap-1 pl-2.5 pr-2.5 hover:pl-1"
3213
+ interactable: "gap-1 pl-2.5 pr-2.5 hover:pl-1",
3214
+ id: "gap-1 bg-secondary bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 px-2.5 tabular-nums text-surface-foreground",
3215
+ count: "min-w-6 justify-center rounded-full bg-secondary bg-linear-to-r from-overlay-dark-5 to-overlay-dark-5 px-2 tabular-nums text-surface-foreground"
3106
3216
  },
3107
3217
  selected: { true: "", false: "" }
3108
3218
  },
@@ -3117,11 +3227,11 @@ var roleTagVariants = cva8(
3117
3227
  defaultVariants: { type: "primary", selected: false }
3118
3228
  }
3119
3229
  );
3120
- var RoleTag = React51.forwardRef(
3230
+ var Badge = React52.forwardRef(
3121
3231
  ({ className, type = "primary", selected = false, onClick, children, ...props }, ref) => {
3122
3232
  const classes = cn(roleTagVariants({ type, selected: type === "interactable" ? selected : false }), className);
3123
3233
  if (type === "interactable") {
3124
- return /* @__PURE__ */ jsxs38(
3234
+ return /* @__PURE__ */ jsxs39(
3125
3235
  "button",
3126
3236
  {
3127
3237
  ref,
@@ -3131,24 +3241,25 @@ var RoleTag = React51.forwardRef(
3131
3241
  onClick,
3132
3242
  ...props,
3133
3243
  children: [
3134
- /* @__PURE__ */ jsx52(DotsSixVertical5, { size: 16, "aria-hidden": true, className: "hidden shrink-0 group-hover:block" }),
3244
+ /* @__PURE__ */ jsx53(DotsSixVertical5, { size: 16, "aria-hidden": true, className: "hidden shrink-0 group-hover:block" }),
3135
3245
  children
3136
3246
  ]
3137
3247
  }
3138
3248
  );
3139
3249
  }
3140
- return /* @__PURE__ */ jsxs38("span", { ref, className: classes, ...props, children: [
3141
- type === "question" && /* @__PURE__ */ jsx52(RadioButton2, { size: 16, weight: "fill", "aria-hidden": true }),
3250
+ return /* @__PURE__ */ jsxs39("span", { ref, className: classes, ...props, children: [
3251
+ type === "question" && /* @__PURE__ */ jsx53(RadioButton2, { size: 16, weight: "fill", "aria-hidden": true }),
3252
+ type === "id" && /* @__PURE__ */ jsx53("span", { className: "text-secondary-muted-foreground", children: "ID" }),
3142
3253
  children
3143
3254
  ] });
3144
3255
  }
3145
3256
  );
3146
- RoleTag.displayName = "RoleTag";
3257
+ Badge.displayName = "Badge";
3147
3258
 
3148
3259
  // src/components/Utility/Pagination.tsx
3149
- import * as React52 from "react";
3260
+ import * as React53 from "react";
3150
3261
  import { ArrowLeft, ArrowRight, DotsThree as DotsThree2 } from "@phosphor-icons/react";
3151
- import { jsx as jsx53, jsxs as jsxs39 } from "react/jsx-runtime";
3262
+ import { jsx as jsx54, jsxs as jsxs40 } from "react/jsx-runtime";
3152
3263
  function getPaginationItems(page, pageCount, siblings = 1) {
3153
3264
  const keep = /* @__PURE__ */ new Set([1, pageCount]);
3154
3265
  for (let p = page - siblings; p <= page + siblings; p++) if (p >= 1 && p <= pageCount) keep.add(p);
@@ -3162,10 +3273,10 @@ function getPaginationItems(page, pageCount, siblings = 1) {
3162
3273
  });
3163
3274
  return items;
3164
3275
  }
3165
- var Pagination = React52.forwardRef(
3276
+ var Pagination = React53.forwardRef(
3166
3277
  ({ className, page, pageCount, onPageChange, variant = "full", siblings = 1, ...props }, ref) => {
3167
3278
  const go = (next2) => onPageChange(Math.min(pageCount, Math.max(1, next2)));
3168
- const previous = /* @__PURE__ */ jsx53(
3279
+ const previous = /* @__PURE__ */ jsx54(
3169
3280
  Button,
3170
3281
  {
3171
3282
  type: "button",
@@ -3174,10 +3285,10 @@ var Pagination = React52.forwardRef(
3174
3285
  "aria-label": "Previous page",
3175
3286
  disabled: page <= 1,
3176
3287
  onClick: () => go(page - 1),
3177
- children: /* @__PURE__ */ jsx53(ArrowLeft, { size: 16, "aria-hidden": true })
3288
+ children: /* @__PURE__ */ jsx54(ArrowLeft, { size: 16, "aria-hidden": true })
3178
3289
  }
3179
3290
  );
3180
- const next = /* @__PURE__ */ jsx53(
3291
+ const next = /* @__PURE__ */ jsx54(
3181
3292
  Button,
3182
3293
  {
3183
3294
  type: "button",
@@ -3186,10 +3297,10 @@ var Pagination = React52.forwardRef(
3186
3297
  "aria-label": "Next page",
3187
3298
  disabled: page >= pageCount,
3188
3299
  onClick: () => go(page + 1),
3189
- children: /* @__PURE__ */ jsx53(ArrowRight, { size: 16, "aria-hidden": true })
3300
+ children: /* @__PURE__ */ jsx54(ArrowRight, { size: 16, "aria-hidden": true })
3190
3301
  }
3191
3302
  );
3192
- return /* @__PURE__ */ jsxs39(
3303
+ return /* @__PURE__ */ jsxs40(
3193
3304
  "nav",
3194
3305
  {
3195
3306
  ref,
@@ -3198,14 +3309,14 @@ var Pagination = React52.forwardRef(
3198
3309
  ...props,
3199
3310
  children: [
3200
3311
  previous,
3201
- variant === "compact" ? /* @__PURE__ */ jsxs39("span", { className: "text-body-small text-surface-foreground", "aria-live": "polite", children: [
3312
+ variant === "compact" ? /* @__PURE__ */ jsxs40("span", { className: "text-body-small text-surface-foreground", "aria-live": "polite", children: [
3202
3313
  page,
3203
3314
  "/",
3204
3315
  pageCount
3205
- ] }) : /* @__PURE__ */ jsx53("ul", { className: "flex items-center gap-2", children: getPaginationItems(page, pageCount, siblings).map((item, index) => /* @__PURE__ */ jsx53("li", { children: item === "ellipsis" ? /* @__PURE__ */ jsxs39("span", { className: "inline-flex size-8 items-center justify-center rounded-sm border border-border bg-surface text-surface-foreground", children: [
3206
- /* @__PURE__ */ jsx53(DotsThree2, { size: 16, "aria-hidden": true }),
3207
- /* @__PURE__ */ jsx53("span", { className: "sr-only", children: "More pages" })
3208
- ] }) : /* @__PURE__ */ jsx53(
3316
+ ] }) : /* @__PURE__ */ jsx54("ul", { className: "flex items-center gap-2", children: getPaginationItems(page, pageCount, siblings).map((item, index) => /* @__PURE__ */ jsx54("li", { children: item === "ellipsis" ? /* @__PURE__ */ jsxs40("span", { className: "inline-flex size-8 items-center justify-center rounded-sm border border-border bg-surface text-surface-foreground", children: [
3317
+ /* @__PURE__ */ jsx54(DotsThree2, { size: 16, "aria-hidden": true }),
3318
+ /* @__PURE__ */ jsx54("span", { className: "sr-only", children: "More pages" })
3319
+ ] }) : /* @__PURE__ */ jsx54(
3209
3320
  Button,
3210
3321
  {
3211
3322
  type: "button",
@@ -3230,6 +3341,7 @@ export {
3230
3341
  ActivityStructure,
3231
3342
  AskAiInput,
3232
3343
  AskAiToggle,
3344
+ Badge,
3233
3345
  Button,
3234
3346
  Calendar,
3235
3347
  ChatChoices,
@@ -3275,6 +3387,7 @@ export {
3275
3387
  FormMessage,
3276
3388
  ImagePreview,
3277
3389
  ImageThumbnails,
3390
+ InlineEdit,
3278
3391
  Input,
3279
3392
  InputWithAction,
3280
3393
  Label,
@@ -3297,7 +3410,6 @@ export {
3297
3410
  RadioGroupItem,
3298
3411
  RankList,
3299
3412
  RatingScale,
3300
- RoleTag,
3301
3413
  SearchBar,
3302
3414
  Select,
3303
3415
  SelectContent,