@ggui-ai/ui-visual-tester 0.15.0 → 0.16.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.
@@ -20069,22 +20069,23 @@
20069
20069
  function resolveToneCss(tone) {
20070
20070
  switch (tone) {
20071
20071
  case "default":
20072
- return "var(--ggui-color-onSurface, #18181b)";
20072
+ return "var(--ggui-color-onContainer, #18181b)";
20073
20073
  case "muted":
20074
- return "var(--ggui-color-onSurfaceVariant, #52525b)";
20074
+ return "var(--ggui-color-onSunken, #52525b)";
20075
20075
  case "subtle":
20076
20076
  return "var(--ggui-color-neutral-500, #71717a)";
20077
20077
  case "emphasized":
20078
20078
  return "var(--ggui-color-primary-700, #0369a1)";
20079
20079
  case "loud":
20080
20080
  return "var(--ggui-color-primary-500, #0ea5e9)";
20081
+ case "error":
20082
+ return `var(--ggui-color-error, var(--ggui-color-error-500, ${SEMANTIC_TONE_FALLBACK.error}))`;
20081
20083
  case "success":
20082
20084
  case "warning":
20083
- case "error":
20084
20085
  case "info":
20085
20086
  return `var(--ggui-color-${tone}-500, ${SEMANTIC_TONE_FALLBACK[tone]})`;
20086
20087
  case "inverse":
20087
- return "var(--ggui-color-surface, #ffffff)";
20088
+ return "var(--ggui-color-container, #ffffff)";
20088
20089
  case "inherit":
20089
20090
  return "inherit";
20090
20091
  }
@@ -20098,14 +20099,15 @@
20098
20099
  function resolveSurfaceCss(surface) {
20099
20100
  switch (surface) {
20100
20101
  case "default":
20102
+ return "var(--ggui-color-container, #ffffff)";
20101
20103
  case "elevated":
20102
- return "var(--ggui-color-surface, #ffffff)";
20104
+ return "var(--ggui-color-elevated, #ffffff)";
20103
20105
  case "sunken":
20104
- return "var(--ggui-color-surfaceVariant, #f4f4f5)";
20106
+ return "var(--ggui-color-sunken, #f4f4f5)";
20105
20107
  case "accent":
20106
20108
  return "var(--ggui-color-primary-50, #f0f9ff)";
20107
20109
  case "inverted":
20108
- return "var(--ggui-color-onSurface, #18181b)";
20110
+ return "var(--ggui-color-onContainer, #18181b)";
20109
20111
  case "transparent":
20110
20112
  return "transparent";
20111
20113
  }
@@ -20348,7 +20350,7 @@
20348
20350
  "4xl": 1.25
20349
20351
  };
20350
20352
  function Text({ children, size = "base", weight = "normal", caps = false, tone, align, truncate, is = "p", id, htmlFor, style, className }) {
20351
- const resolvedColor = tone ? resolveToneCss(tone) : "var(--ggui-color-onSurface, #18181b)";
20353
+ const resolvedColor = tone ? resolveToneCss(tone) : "var(--ggui-color-onContainer, #18181b)";
20352
20354
  const textStyle = {
20353
20355
  fontSize: sizeMap[size],
20354
20356
  fontWeight: weightMap[weight],
@@ -20454,10 +20456,25 @@
20454
20456
  };
20455
20457
 
20456
20458
  // ../design/dist/primitives/Heading.js
20459
+ var HEADING_SIZE = {
20460
+ h1: "var(--ggui-font-size-4xl, 36px)",
20461
+ h2: "var(--ggui-font-size-3xl, 30px)",
20462
+ h3: "var(--ggui-font-size-2xl, 24px)",
20463
+ h4: "var(--ggui-font-size-xl, 20px)",
20464
+ h5: "var(--ggui-font-size-lg, 18px)",
20465
+ h6: "var(--ggui-font-size-base, 16px)"
20466
+ };
20457
20467
  function Heading({ children, level = 2, tone, align, style, className }) {
20458
20468
  const tag = `h${level}`;
20459
- const headingStyle = headingStyles[tag] || headingStyles.h2;
20460
- const resolvedColor = tone ? resolveToneCss(tone) : "var(--ggui-color-onSurface, #18181b)";
20469
+ const fallback = headingStyles[tag] || headingStyles.h2;
20470
+ const headingStyle = {
20471
+ fontSize: HEADING_SIZE[tag],
20472
+ fontWeight: `var(--ggui-font-weight-heading, ${fallback.fontWeight})`,
20473
+ fontFamily: "var(--ggui-font-family-heading, var(--ggui-font-family-sans, inherit))",
20474
+ lineHeight: fallback.lineHeight,
20475
+ letterSpacing: `var(--ggui-letter-spacing-heading, ${fallback.letterSpacing})`
20476
+ };
20477
+ const resolvedColor = tone ? resolveToneCss(tone) : "var(--ggui-color-onContainer, #18181b)";
20461
20478
  return (0, import_react4.createElement)(tag, {
20462
20479
  className,
20463
20480
  style: {
@@ -20541,8 +20558,8 @@
20541
20558
  border: "none"
20542
20559
  },
20543
20560
  secondary: {
20544
- backgroundColor: "var(--ggui-color-surfaceVariant, #f4f4f5)",
20545
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
20561
+ backgroundColor: "var(--ggui-color-sunken, #f4f4f5)",
20562
+ color: "var(--ggui-color-onSunken, #52525b)",
20546
20563
  border: "none"
20547
20564
  },
20548
20565
  outline: {
@@ -20552,7 +20569,7 @@
20552
20569
  },
20553
20570
  ghost: {
20554
20571
  backgroundColor: "transparent",
20555
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
20572
+ color: "var(--ggui-color-onSunken, #52525b)",
20556
20573
  border: "none"
20557
20574
  },
20558
20575
  danger: {
@@ -20613,19 +20630,19 @@
20613
20630
  }, children: [label && (0, import_jsx_runtime7.jsxs)("label", { htmlFor: inputId, style: {
20614
20631
  fontSize: "var(--ggui-font-size-sm, 14px)",
20615
20632
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20616
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20633
+ color: "var(--ggui-color-onSunken, #52525b)"
20617
20634
  }, children: [label, required && (0, import_jsx_runtime7.jsx)("span", { "aria-hidden": "true", style: { color: "var(--ggui-color-error-500, #ef4444)", marginLeft: "2px" }, children: "*" })] }), (0, import_jsx_runtime7.jsx)("input", { id: inputId, type, placeholder, value, onChange: (e) => onChange?.(e.target.value), disabled, required, "aria-invalid": hasError || void 0, "aria-describedby": hasMessage ? messageId : void 0, style: {
20618
20635
  ...sizeStyles2[size],
20619
20636
  width: "100%",
20620
20637
  borderRadius: "var(--ggui-shape-radius-md, 8px)",
20621
20638
  border: `1px solid ${hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20622
- backgroundColor: disabled ? "var(--ggui-color-surface, #fafafa)" : "var(--ggui-color-surface, #ffffff)",
20623
- color: "var(--ggui-color-onSurface, #18181b)",
20639
+ backgroundColor: disabled ? "var(--ggui-color-sunken, #fafafa)" : "var(--ggui-color-sunken, #ffffff)",
20640
+ color: "var(--ggui-color-onContainer, #18181b)",
20624
20641
  transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`,
20625
20642
  boxSizing: "border-box"
20626
20643
  }, ...rest }), hasMessage && (0, import_jsx_runtime7.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
20627
20644
  fontSize: "var(--ggui-font-size-xs, 12px)",
20628
- color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSurfaceVariant, #52525b)"
20645
+ color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSunken, #52525b)"
20629
20646
  }, children: error2 || helperText })] });
20630
20647
  }
20631
20648
 
@@ -20647,14 +20664,14 @@
20647
20664
  }, children: [label && (0, import_jsx_runtime8.jsxs)("label", { htmlFor: textareaId, style: {
20648
20665
  fontSize: "var(--ggui-font-size-sm, 14px)",
20649
20666
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20650
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20667
+ color: "var(--ggui-color-onSunken, #52525b)"
20651
20668
  }, children: [label, required && (0, import_jsx_runtime8.jsx)("span", { "aria-hidden": "true", style: { color: "var(--ggui-color-error-500, #ef4444)", marginLeft: "2px" }, children: "*" })] }), (0, import_jsx_runtime8.jsx)("textarea", { id: textareaId, placeholder, value, onChange: (e) => onChange?.(e.target.value), rows, disabled, required, maxLength, "aria-invalid": hasError || void 0, "aria-describedby": hasMessage ? messageId : void 0, style: {
20652
20669
  padding: "10px 12px",
20653
20670
  width: "100%",
20654
20671
  borderRadius: "var(--ggui-shape-radius-md, 8px)",
20655
20672
  border: `1px solid ${hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20656
- backgroundColor: disabled ? "var(--ggui-color-surface, #fafafa)" : "var(--ggui-color-surface, #ffffff)",
20657
- color: "var(--ggui-color-onSurface, #18181b)",
20673
+ backgroundColor: disabled ? "var(--ggui-color-sunken, #fafafa)" : "var(--ggui-color-sunken, #ffffff)",
20674
+ color: "var(--ggui-color-onContainer, #18181b)",
20658
20675
  fontSize: "var(--ggui-font-size-sm, 14px)",
20659
20676
  fontFamily: "inherit",
20660
20677
  transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`,
@@ -20662,10 +20679,10 @@
20662
20679
  resize: autoResize ? "none" : "vertical"
20663
20680
  }, ...rest }), (0, import_jsx_runtime8.jsxs)("div", { style: { display: "flex", justifyContent: "space-between" }, children: [hasMessage && (0, import_jsx_runtime8.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
20664
20681
  fontSize: "var(--ggui-font-size-xs, 12px)",
20665
- color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSurfaceVariant, #52525b)"
20682
+ color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSunken, #52525b)"
20666
20683
  }, children: error2 || helperText }), showCount && maxLength && (0, import_jsx_runtime8.jsxs)("span", { style: {
20667
20684
  fontSize: "var(--ggui-font-size-xs, 12px)",
20668
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
20685
+ color: "var(--ggui-color-onSunken, #52525b)",
20669
20686
  marginLeft: "auto"
20670
20687
  }, children: [charCount, "/", maxLength] })] })] });
20671
20688
  }
@@ -20687,14 +20704,14 @@
20687
20704
  return (0, import_jsx_runtime9.jsxs)("div", { className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-1, 4px)", ...style }, children: [label && (0, import_jsx_runtime9.jsxs)("label", { htmlFor: selectId, style: {
20688
20705
  fontSize: "var(--ggui-font-size-sm, 14px)",
20689
20706
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20690
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20707
+ color: "var(--ggui-color-onSunken, #52525b)"
20691
20708
  }, children: [label, required && (0, import_jsx_runtime9.jsx)("span", { "aria-hidden": "true", style: { color: "var(--ggui-color-error-500, #ef4444)", marginLeft: "2px" }, children: "*" })] }), (0, import_jsx_runtime9.jsxs)("select", { id: selectId, value, onChange: (e) => onChange?.(e.target.value), disabled, required, "aria-invalid": hasError || void 0, "aria-describedby": hasMessage ? messageId : void 0, style: {
20692
20709
  ...sizeStyles3[size],
20693
20710
  width: "100%",
20694
20711
  borderRadius: "var(--ggui-shape-radius-md, 8px)",
20695
20712
  border: `1px solid ${hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20696
- backgroundColor: disabled ? "var(--ggui-color-surface, #fafafa)" : "var(--ggui-color-surface, #ffffff)",
20697
- color: value ? "var(--ggui-color-onSurface, #18181b)" : "var(--ggui-color-onSurfaceVariant, #52525b)",
20713
+ backgroundColor: disabled ? "var(--ggui-color-sunken, #fafafa)" : "var(--ggui-color-sunken, #ffffff)",
20714
+ color: value ? "var(--ggui-color-onContainer, #18181b)" : "var(--ggui-color-onSunken, #52525b)",
20698
20715
  cursor: disabled ? "not-allowed" : "pointer",
20699
20716
  appearance: "none",
20700
20717
  backgroundImage: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M3 4.5L6 7.5L9 4.5'/%3E%3C/svg%3E")`,
@@ -20705,7 +20722,7 @@
20705
20722
  transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`
20706
20723
  }, ...rest, children: [placeholder && (0, import_jsx_runtime9.jsx)("option", { value: "", disabled: true, children: placeholder }), options.map((opt) => (0, import_jsx_runtime9.jsx)("option", { value: opt.value, disabled: opt.disabled, children: opt.label }, opt.value))] }), hasMessage && (0, import_jsx_runtime9.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
20707
20724
  fontSize: "var(--ggui-font-size-xs, 12px)",
20708
- color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSurfaceVariant, #52525b)"
20725
+ color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSunken, #52525b)"
20709
20726
  }, children: error2 || helperText })] });
20710
20727
  }
20711
20728
 
@@ -20740,7 +20757,7 @@
20740
20757
  height: "18px",
20741
20758
  borderRadius: "var(--ggui-shape-radius-sm, 4px)",
20742
20759
  border: `2px solid ${checked || indeterminate ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20743
- backgroundColor: checked || indeterminate ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-surface, #ffffff)",
20760
+ backgroundColor: checked || indeterminate ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-sunken, #ffffff)",
20744
20761
  display: "flex",
20745
20762
  alignItems: "center",
20746
20763
  justifyContent: "center",
@@ -20748,10 +20765,10 @@
20748
20765
  }, children: (checked || indeterminate) && (0, import_jsx_runtime10.jsx)("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", style: { color: "var(--ggui-color-onPrimary, #ffffff)" }, children: indeterminate ? (0, import_jsx_runtime10.jsx)("path", { d: "M2.5 6H9.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) : (0, import_jsx_runtime10.jsx)("path", { d: "M2.5 6L5 8.5L9.5 3.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }), (label || description) && (0, import_jsx_runtime10.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "2px" }, children: [label && (0, import_jsx_runtime10.jsx)("span", { style: {
20749
20766
  fontSize: "var(--ggui-font-size-sm, 14px)",
20750
20767
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20751
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20768
+ color: "var(--ggui-color-onSunken, #52525b)"
20752
20769
  }, children: label }), description && (0, import_jsx_runtime10.jsx)("span", { style: {
20753
20770
  fontSize: "var(--ggui-font-size-xs, 12px)",
20754
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20771
+ color: "var(--ggui-color-onSunken, #52525b)"
20755
20772
  }, children: description })] })] });
20756
20773
  }
20757
20774
 
@@ -20803,7 +20820,7 @@
20803
20820
  } }) }), label && (0, import_jsx_runtime11.jsx)("span", { style: {
20804
20821
  fontSize: "var(--ggui-font-size-sm, 14px)",
20805
20822
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20806
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20823
+ color: "var(--ggui-color-onSunken, #52525b)"
20807
20824
  }, children: label })] });
20808
20825
  }
20809
20826
 
@@ -20819,7 +20836,7 @@
20819
20836
  return (0, import_jsx_runtime12.jsxs)("div", { role: "radiogroup", "aria-labelledby": label ? labelId : void 0, "aria-describedby": hasError ? errorId : void 0, className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-2, 8px)", ...style }, children: [label && (0, import_jsx_runtime12.jsx)("span", { id: labelId, style: {
20820
20837
  fontSize: "var(--ggui-font-size-sm, 14px)",
20821
20838
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20822
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20839
+ color: "var(--ggui-color-onSunken, #52525b)"
20823
20840
  }, children: label }), (0, import_jsx_runtime12.jsx)("div", { style: {
20824
20841
  display: "flex",
20825
20842
  flexDirection: direction === "vertical" ? "column" : "row",
@@ -20852,7 +20869,7 @@
20852
20869
  height: "18px",
20853
20870
  borderRadius: "var(--ggui-shape-radius-full, 9999px)",
20854
20871
  border: `2px solid ${isSelected ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-outline, #d4d4d8)"}`,
20855
- backgroundColor: "var(--ggui-color-surface, #ffffff)",
20872
+ backgroundColor: "var(--ggui-color-sunken, #ffffff)",
20856
20873
  display: "flex",
20857
20874
  alignItems: "center",
20858
20875
  justifyContent: "center",
@@ -20865,10 +20882,10 @@
20865
20882
  } }) })] }), (0, import_jsx_runtime12.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "2px" }, children: [(0, import_jsx_runtime12.jsx)("span", { style: {
20866
20883
  fontSize: "var(--ggui-font-size-sm, 14px)",
20867
20884
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20868
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20885
+ color: "var(--ggui-color-onSunken, #52525b)"
20869
20886
  }, children: option.label }), option.description && (0, import_jsx_runtime12.jsx)("span", { style: {
20870
20887
  fontSize: "var(--ggui-font-size-xs, 12px)",
20871
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20888
+ color: "var(--ggui-color-onSunken, #52525b)"
20872
20889
  }, children: option.description })] })] }, option.value);
20873
20890
  }) }), error2 && (0, import_jsx_runtime12.jsx)("span", { id: errorId, role: "alert", style: {
20874
20891
  fontSize: "var(--ggui-font-size-xs, 12px)",
@@ -20887,7 +20904,7 @@
20887
20904
  return (0, import_jsx_runtime13.jsxs)("div", { className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-2, 8px)", ...style }, children: [(label || showValue) && (0, import_jsx_runtime13.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [label && (0, import_jsx_runtime13.jsx)("span", { id: labelId, style: {
20888
20905
  fontSize: "var(--ggui-font-size-sm, 14px)",
20889
20906
  fontWeight: "var(--ggui-font-weight-medium, 500)",
20890
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20907
+ color: "var(--ggui-color-onSunken, #52525b)"
20891
20908
  }, children: label }), showValue && (0, import_jsx_runtime13.jsx)("span", { style: {
20892
20909
  fontSize: "var(--ggui-font-size-sm, 14px)",
20893
20910
  fontWeight: "var(--ggui-font-weight-medium, 500)",
@@ -20931,8 +20948,8 @@
20931
20948
  var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
20932
20949
  var variantStyles2 = {
20933
20950
  default: {
20934
- backgroundColor: "var(--ggui-color-surfaceVariant, #f4f4f5)",
20935
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
20951
+ backgroundColor: "var(--ggui-color-sunken, #f4f4f5)",
20952
+ color: "var(--ggui-color-onSunken, #52525b)"
20936
20953
  },
20937
20954
  primary: {
20938
20955
  backgroundColor: "var(--ggui-color-primary-100, #e0f2fe)",
@@ -20940,7 +20957,7 @@
20940
20957
  },
20941
20958
  secondary: {
20942
20959
  backgroundColor: "var(--ggui-color-outlineVariant, #e4e4e7)",
20943
- color: "var(--ggui-color-onSurface, #18181b)"
20960
+ color: "var(--ggui-color-onContainer, #18181b)"
20944
20961
  },
20945
20962
  success: {
20946
20963
  backgroundColor: "var(--ggui-color-success-100, #dcfce7)",
@@ -20957,6 +20974,11 @@
20957
20974
  info: {
20958
20975
  backgroundColor: "var(--ggui-color-info-100, #cffafe)",
20959
20976
  color: "var(--ggui-color-info-700, #0e7490)"
20977
+ },
20978
+ // The second accent (ggui#987 §2.1): the tertiary container pair.
20979
+ tertiary: {
20980
+ backgroundColor: "var(--ggui-color-tertiaryContainer, #ccfbf1)",
20981
+ color: "var(--ggui-color-onTertiaryContainer, #134e4a)"
20960
20982
  }
20961
20983
  };
20962
20984
  var sizeStyles4 = {
@@ -20991,7 +21013,7 @@
20991
21013
  width: resolvedWidth,
20992
21014
  height: resolvedHeight,
20993
21015
  borderRadius: isCircle ? "9999px" : resolveRadius(radius2),
20994
- backgroundColor: "var(--ggui-color-surfaceVariant, #f4f4f5)",
21016
+ backgroundColor: "var(--ggui-color-sunken, #f4f4f5)",
20995
21017
  animation: "ggui-skeleton-pulse 1.5s ease-in-out infinite",
20996
21018
  ...style
20997
21019
  };
@@ -21131,10 +21153,10 @@
21131
21153
  const height = sizeHeights[size];
21132
21154
  const barColor = variantColors[variant];
21133
21155
  const accessibleName = label ?? "Progress";
21134
- return (0, import_jsx_runtime18.jsxs)("div", { className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-1, 4px)", ...style }, children: [showLabel && (0, import_jsx_runtime18.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [(0, import_jsx_runtime18.jsx)("span", { style: { fontSize: "var(--ggui-font-size-sm, 14px)", color: "var(--ggui-color-onSurfaceVariant, #52525b)" }, children: accessibleName }), (0, import_jsx_runtime18.jsxs)("span", { style: {
21156
+ return (0, import_jsx_runtime18.jsxs)("div", { className, style: { display: "flex", flexDirection: "column", gap: "var(--ggui-spacing-1, 4px)", ...style }, children: [showLabel && (0, import_jsx_runtime18.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [(0, import_jsx_runtime18.jsx)("span", { style: { fontSize: "var(--ggui-font-size-sm, 14px)", color: "var(--ggui-color-onSunken, #52525b)" }, children: accessibleName }), (0, import_jsx_runtime18.jsxs)("span", { style: {
21135
21157
  fontSize: "var(--ggui-font-size-sm, 14px)",
21136
21158
  fontWeight: "var(--ggui-font-weight-medium, 500)",
21137
- color: "var(--ggui-color-onSurface, #18181b)"
21159
+ color: "var(--ggui-color-onContainer, #18181b)"
21138
21160
  }, children: [Math.round(percentage), "%"] })] }), (0, import_jsx_runtime18.jsxs)("div", { role: "progressbar", "aria-valuenow": indeterminate ? void 0 : value, "aria-valuemin": 0, "aria-valuemax": max, "aria-label": accessibleName, style: {
21139
21161
  width: "100%",
21140
21162
  height,
@@ -21176,7 +21198,7 @@
21176
21198
  width: resolveSize2(width) || "100%",
21177
21199
  height: resolveSize2(height) || "auto",
21178
21200
  borderRadius: resolveRadius(radius2),
21179
- backgroundColor: "var(--ggui-color-surfaceVariant, #f4f4f5)",
21201
+ backgroundColor: "var(--ggui-color-sunken, #f4f4f5)",
21180
21202
  display: "flex",
21181
21203
  alignItems: "center",
21182
21204
  justifyContent: "center",
@@ -25225,7 +25247,7 @@
25225
25247
  // ../design/dist/primitives/Link.js
25226
25248
  var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
25227
25249
  function Link({ children, href, external, tone, underline = "hover", style, className, ...rest }) {
25228
- const linkColor = tone ? resolveToneCss(tone) : "var(--ggui-color-primary-600, #0284c7)";
25250
+ const linkColor = tone ? resolveToneCss(tone) : "var(--ggui-color-link, var(--ggui-color-primary-600, #0284c7))";
25229
25251
  const underlineStyle = {
25230
25252
  always: "underline",
25231
25253
  hover: "none",
@@ -25321,10 +25343,10 @@
25321
25343
  top: coords.top,
25322
25344
  left: coords.left,
25323
25345
  transform: getTransform(),
25324
- backgroundColor: "var(--ggui-color-onSurface, #18181b)",
25325
- // Inverse pair: text on the inverted (onSurface) ground is
25326
- // the surface color — white was only right for light themes.
25327
- color: "var(--ggui-color-surface, #ffffff)",
25346
+ // The inverse container pair (ggui#987 §2.1): a tooltip is
25347
+ // legible by inversion, not by lift — never `elevated`.
25348
+ backgroundColor: "var(--ggui-color-onContainer, #18181b)",
25349
+ color: "var(--ggui-color-container, #ffffff)",
25328
25350
  padding: "6px 10px",
25329
25351
  borderRadius: "var(--ggui-shape-radius-md, 8px)",
25330
25352
  fontSize: "var(--ggui-font-size-xs, 12px)",
@@ -25360,7 +25382,7 @@
25360
25382
  textAlign: "left",
25361
25383
  fontWeight: "var(--ggui-font-weight-semibold, 600)",
25362
25384
  fontSize: "var(--ggui-font-size-xs, 12px)",
25363
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
25385
+ color: "var(--ggui-color-onSunken, #52525b)",
25364
25386
  textTransform: "uppercase",
25365
25387
  letterSpacing: "0.05em",
25366
25388
  borderBottom: "2px solid var(--ggui-color-outlineVariant, #e4e4e7)",
@@ -25376,11 +25398,11 @@
25376
25398
  width: "100%",
25377
25399
  borderCollapse: "collapse",
25378
25400
  fontSize: "var(--ggui-font-size-sm, 14px)",
25379
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
25401
+ color: "var(--ggui-color-onSunken, #52525b)"
25380
25402
  }, children: [caption && (0, import_jsx_runtime23.jsx)("caption", { style: {
25381
25403
  padding: cellPadding,
25382
25404
  fontSize: "var(--ggui-font-size-sm, 14px)",
25383
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
25405
+ color: "var(--ggui-color-onSunken, #52525b)",
25384
25406
  textAlign: "left",
25385
25407
  captionSide: "top"
25386
25408
  }, children: caption }), (0, import_jsx_runtime23.jsx)("thead", { children: (0, import_jsx_runtime23.jsx)("tr", { children: columns.map((col) => (0, import_jsx_runtime23.jsx)("th", { scope: "col", "aria-sort": sortKey === col.key ? sortDirection === "asc" ? "ascending" : "descending" : void 0, onClick: col.sortable ? () => handleSort(col.key) : void 0, onKeyDown: col.sortable ? (e) => {
@@ -25394,13 +25416,13 @@
25394
25416
  width: col.width,
25395
25417
  cursor: col.sortable ? "pointer" : "default"
25396
25418
  }, children: (0, import_jsx_runtime23.jsxs)("span", { style: { display: "inline-flex", alignItems: "center" }, children: [col.header, col.sortable && sortIndicator(sortKey === col.key, sortDirection)] }) }, col.key)) }) }), (0, import_jsx_runtime23.jsx)("tbody", { children: data.map((row, rowIndex) => (0, import_jsx_runtime23.jsx)("tr", { onMouseEnter: hoverable ? () => setHoveredRow(rowIndex) : void 0, onMouseLeave: hoverable ? () => setHoveredRow(null) : void 0, style: {
25397
- backgroundColor: hoverable && hoveredRow === rowIndex ? "var(--ggui-color-surface, #fafafa)" : striped && rowIndex % 2 === 1 ? "var(--ggui-color-surface, #fafafa)" : "transparent",
25419
+ backgroundColor: hoverable && hoveredRow === rowIndex ? "var(--ggui-color-sunken, #fafafa)" : striped && rowIndex % 2 === 1 ? "var(--ggui-color-sunken, #fafafa)" : "transparent",
25398
25420
  transition: "background-color 0.15s ease"
25399
25421
  }, children: columns.map((col) => (0, import_jsx_runtime23.jsx)("td", { style: {
25400
25422
  padding: cellPadding,
25401
25423
  textAlign: col.align || "left",
25402
- borderBottom: "1px solid var(--ggui-color-surfaceVariant, #f4f4f5)",
25403
- borderRight: bordered ? "1px solid var(--ggui-color-surfaceVariant, #f4f4f5)" : void 0
25424
+ borderBottom: "1px solid var(--ggui-color-sunken, #f4f4f5)",
25425
+ borderRight: bordered ? "1px solid var(--ggui-color-sunken, #f4f4f5)" : void 0
25404
25426
  }, children: col.render ? col.render(row[col.key], row, rowIndex) : row[col.key] }, col.key)) }, rowIndex)) })] }) });
25405
25427
  }
25406
25428
 
@@ -25477,7 +25499,7 @@
25477
25499
  if (variant === "line") {
25478
25500
  return {
25479
25501
  ...base,
25480
- color: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-onSurfaceVariant, #52525b)",
25502
+ color: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-onSunken, #52525b)",
25481
25503
  borderBottom: isActive ? "2px solid var(--ggui-color-primary-600, #0284c7)" : "2px solid transparent",
25482
25504
  marginBottom: "-1px"
25483
25505
  };
@@ -25485,17 +25507,17 @@
25485
25507
  if (variant === "pills") {
25486
25508
  return {
25487
25509
  ...base,
25488
- color: isActive ? "var(--ggui-color-onPrimary, #ffffff)" : "var(--ggui-color-onSurfaceVariant, #52525b)",
25510
+ color: isActive ? "var(--ggui-color-onPrimary, #ffffff)" : "var(--ggui-color-onSunken, #52525b)",
25489
25511
  backgroundColor: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "transparent",
25490
25512
  borderRadius: "var(--ggui-shape-radius-md, 6px)"
25491
25513
  };
25492
25514
  }
25493
25515
  return {
25494
25516
  ...base,
25495
- color: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-onSurfaceVariant, #52525b)",
25496
- backgroundColor: isActive ? "var(--ggui-color-surface, #ffffff)" : "transparent",
25517
+ color: isActive ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-onSunken, #52525b)",
25518
+ backgroundColor: isActive ? "var(--ggui-color-container, #ffffff)" : "transparent",
25497
25519
  border: isActive ? "1px solid var(--ggui-color-outlineVariant, #e4e4e7)" : "1px solid transparent",
25498
- borderBottom: isActive ? "1px solid var(--ggui-color-surface, #ffffff)" : "1px solid transparent",
25520
+ borderBottom: isActive ? "1px solid var(--ggui-color-container, #ffffff)" : "1px solid transparent",
25499
25521
  borderRadius: "var(--ggui-shape-radius-md, 6px) var(--ggui-shape-radius-md, 6px) 0 0",
25500
25522
  marginBottom: "-1px"
25501
25523
  };
@@ -25504,7 +25526,7 @@
25504
25526
  display: "flex",
25505
25527
  gap: variant === "pills" ? "var(--ggui-spacing-1, 4px)" : "0",
25506
25528
  borderBottom: variant === "line" || variant === "enclosed" ? "1px solid var(--ggui-color-outlineVariant, #e4e4e7)" : void 0,
25507
- backgroundColor: variant === "pills" ? "var(--ggui-color-surfaceVariant, #f4f4f5)" : void 0,
25529
+ backgroundColor: variant === "pills" ? "var(--ggui-color-sunken, #f4f4f5)" : void 0,
25508
25530
  borderRadius: variant === "pills" ? "var(--ggui-shape-radius-lg, 8px)" : void 0,
25509
25531
  padding: variant === "pills" ? "var(--ggui-spacing-1, 4px)" : void 0
25510
25532
  };
@@ -25675,25 +25697,25 @@
25675
25697
  // ../design/dist/primitives/Toast.js
25676
25698
  var variantStyles4 = {
25677
25699
  info: {
25678
- bg: "var(--ggui-color-info-50, #ecfeff)",
25700
+ bg: "var(--ggui-color-elevated, #ecfeff)",
25679
25701
  border: "var(--ggui-color-info-200, #a5f3fc)",
25680
25702
  text: "var(--ggui-color-info-800, #155e75)",
25681
25703
  icon: "var(--ggui-color-info-500, #06b6d4)"
25682
25704
  },
25683
25705
  success: {
25684
- bg: "var(--ggui-color-success-50, #f0fdf4)",
25706
+ bg: "var(--ggui-color-elevated, #f0fdf4)",
25685
25707
  border: "var(--ggui-color-success-200, #bbf7d0)",
25686
25708
  text: "var(--ggui-color-success-800, #166534)",
25687
25709
  icon: "var(--ggui-color-success-500, #22c55e)"
25688
25710
  },
25689
25711
  warning: {
25690
- bg: "var(--ggui-color-warning-50, #fffbeb)",
25712
+ bg: "var(--ggui-color-elevated, #fffbeb)",
25691
25713
  border: "var(--ggui-color-warning-200, #fde68a)",
25692
25714
  text: "var(--ggui-color-warning-800, #92400e)",
25693
25715
  icon: "var(--ggui-color-warning-500, #f59e0b)"
25694
25716
  },
25695
25717
  error: {
25696
- bg: "var(--ggui-color-error-50, #fef2f2)",
25718
+ bg: "var(--ggui-color-elevated, #fef2f2)",
25697
25719
  border: "var(--ggui-color-error-200, #fecaca)",
25698
25720
  text: "var(--ggui-color-error-800, #991b1b)",
25699
25721
  icon: "var(--ggui-color-error-500, #ef4444)"
@@ -25834,7 +25856,7 @@
25834
25856
  opacity: isDisabled ? 0.5 : 1,
25835
25857
  fontSize: "var(--ggui-font-size-sm, 14px)",
25836
25858
  fontWeight: "var(--ggui-font-weight-medium, 500)",
25837
- color: "var(--ggui-color-onSurface, #18181b)",
25859
+ color: "var(--ggui-color-onContainer, #18181b)",
25838
25860
  textAlign: "left",
25839
25861
  transition: `background-color ${duration.fast} ${easing.easeInOut}`
25840
25862
  }, children: [(0, import_jsx_runtime26.jsx)("span", { children: item.title }), chevron(isExpanded)] }) }), (0, import_jsx_runtime26.jsx)("div", { id: `${uniqueId}-panel-${item.key}`, role: "region", "aria-labelledby": `${uniqueId}-header-${item.key}`, hidden: !isExpanded, style: {
@@ -25842,7 +25864,7 @@
25842
25864
  }, children: isExpanded && (0, import_jsx_runtime26.jsx)("div", { style: {
25843
25865
  padding: "0 var(--ggui-spacing-4, 16px) var(--ggui-spacing-4, 16px)",
25844
25866
  fontSize: "var(--ggui-font-size-sm, 14px)",
25845
- color: "var(--ggui-color-onSurfaceVariant, #52525b)",
25867
+ color: "var(--ggui-color-onSunken, #52525b)",
25846
25868
  lineHeight: "var(--ggui-font-lineHeight-normal, 1.5)"
25847
25869
  }, children: item.content }) })] }, item.key);
25848
25870
  }) });
@@ -26108,9 +26130,9 @@
26108
26130
  // ../design/dist/components/MenuItem.js
26109
26131
  var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1);
26110
26132
  function MenuItem({ label, icon, rightElement, onClick, disabled, active, danger, style, className }) {
26111
- const baseColor = danger ? colors.error[600] : colors.gray[700];
26112
- const hoverBg = danger ? colors.error[50] : colors.gray[100];
26113
- const activeBg = danger ? colors.error[100] : colors.primary[50];
26133
+ const baseColor = danger ? "var(--ggui-color-error-600, #dc2626)" : "var(--ggui-color-onElevated, #3f3f46)";
26134
+ const hoverBg = danger ? "var(--ggui-color-error-50, #fef2f2)" : "var(--ggui-color-sunken, #f4f4f5)";
26135
+ const activeBg = danger ? "var(--ggui-color-error-100, #fee2e2)" : "var(--ggui-color-primary-50, #f0f9ff)";
26114
26136
  return (0, import_jsx_runtime29.jsxs)("button", { onClick: disabled ? void 0 : onClick, disabled, className, style: {
26115
26137
  display: "flex",
26116
26138
  alignItems: "center",
@@ -26257,7 +26279,8 @@
26257
26279
  position: "absolute",
26258
26280
  ...getMenuPosition(),
26259
26281
  minWidth: "160px",
26260
- backgroundColor: colors.white,
26282
+ backgroundColor: "var(--ggui-color-elevated, #ffffff)",
26283
+ color: "var(--ggui-color-onElevated, #18181b)",
26261
26284
  border: `1px solid ${colors.gray[200]}`,
26262
26285
  borderRadius: radius.lg,
26263
26286
  boxShadow: shadow.lg,
@@ -26495,9 +26518,9 @@
26495
26518
  color: "var(--ggui-color-onPrimary, #ffffff)"
26496
26519
  },
26497
26520
  upcoming: {
26498
- backgroundColor: "var(--ggui-color-surface, #fafafa)",
26521
+ backgroundColor: "var(--ggui-color-sunken, #fafafa)",
26499
26522
  border: "1px solid var(--ggui-color-outline, #d4d4d8)",
26500
- color: "var(--ggui-color-onSurfaceVariant, #52525b)"
26523
+ color: "var(--ggui-color-onSunken, #52525b)"
26501
26524
  }
26502
26525
  };
26503
26526
  function Marker({ index, state }) {
@@ -26905,15 +26928,15 @@
26905
26928
  var CODE_INLINE = {
26906
26929
  fontFamily: "var(--ggui-font-family-mono, ui-monospace, monospace)",
26907
26930
  fontSize: "0.9em",
26908
- background: "var(--ggui-color-surface-sunken, rgba(0,0,0,0.06))",
26909
- borderRadius: "var(--ggui-radius-sm, 4px)",
26931
+ background: "var(--ggui-color-sunken, rgba(0,0,0,0.06))",
26932
+ borderRadius: "var(--ggui-shape-radius-sm, 4px)",
26910
26933
  padding: "0.1em 0.35em"
26911
26934
  };
26912
26935
  var CODE_FENCE = {
26913
26936
  fontFamily: "var(--ggui-font-family-mono, ui-monospace, monospace)",
26914
26937
  fontSize: "var(--ggui-font-size-sm, 14px)",
26915
- background: "var(--ggui-color-surface-sunken, rgba(0,0,0,0.06))",
26916
- borderRadius: "var(--ggui-radius-md, 8px)",
26938
+ background: "var(--ggui-color-sunken, rgba(0,0,0,0.06))",
26939
+ borderRadius: "var(--ggui-shape-radius-md, 8px)",
26917
26940
  padding: "var(--ggui-spacing-sm, 12px)",
26918
26941
  overflowX: "auto",
26919
26942
  whiteSpace: "pre",
@@ -26942,7 +26965,7 @@
26942
26965
  var TABLE_HEADER_CELL = {
26943
26966
  ...TABLE_CELL,
26944
26967
  fontWeight: "var(--ggui-font-weight-semibold, 600)",
26945
- background: "var(--ggui-color-surface-sunken, rgba(0,0,0,0.06))"
26968
+ background: "var(--ggui-color-sunken, rgba(0,0,0,0.06))"
26946
26969
  };
26947
26970
  function renderRichTextInlines(inlines) {
26948
26971
  return inlines.map((node, i) => {
@@ -27557,7 +27580,8 @@
27557
27580
  width: sizeWidths[size],
27558
27581
  maxWidth: isFullscreen ? "100%" : "calc(100vw - 48px)",
27559
27582
  maxHeight: isFullscreen ? "100%" : "calc(100vh - 48px)",
27560
- backgroundColor: colors.white,
27583
+ backgroundColor: "var(--ggui-color-elevated, #ffffff)",
27584
+ color: "var(--ggui-color-onElevated, #18181b)",
27561
27585
  borderRadius: isFullscreen ? 0 : radius.xl,
27562
27586
  boxShadow: shadow["2xl"],
27563
27587
  display: "flex",
@@ -28020,8 +28044,7 @@
28020
28044
  StreamBus: () => StreamBus,
28021
28045
  buildActionEnvelope: () => buildActionEnvelope,
28022
28046
  buildWireConfig: () => buildWireConfig,
28023
- connectionStore: () => connectionStore,
28024
- createConnectionStore: () => createConnectionStore,
28047
+ connectionSource: () => connectionSource,
28025
28048
  useAction: () => useAction,
28026
28049
  useApp: () => useApp,
28027
28050
  useAuth: () => useAuth,
@@ -28174,10 +28197,46 @@
28174
28197
  var import_react37 = __toESM(require_react(), 1);
28175
28198
 
28176
28199
  // ../wire/dist/connection-store.js
28200
+ var ConnectionWriterConflictError = class extends Error {
28201
+ owner;
28202
+ attemptedBy;
28203
+ constructor(owner, attemptedBy) {
28204
+ super(owner === attemptedBy ? `connection writer: '${owner}' already holds the claim and '${attemptedBy}' is claiming it again \u2014 two copies of '${owner}' in one document (a duplicate bundle of the runtime)` : `connection writer: '${owner}' holds the claim; '${attemptedBy}' cannot take it \u2014 exactly one party writes the connection state`);
28205
+ this.name = "ConnectionWriterConflictError";
28206
+ this.owner = owner;
28207
+ this.attemptedBy = attemptedBy;
28208
+ }
28209
+ };
28210
+ var ConnectionWriterReleasedError = class extends Error {
28211
+ claimant;
28212
+ constructor(claimant) {
28213
+ super(`connection writer: '${claimant}' released its claim and cannot set the connection state`);
28214
+ this.name = "ConnectionWriterReleasedError";
28215
+ this.claimant = claimant;
28216
+ }
28217
+ };
28218
+ var DOCUMENT_STORE_KEY = /* @__PURE__ */ Symbol.for("ai.ggui.wire/connection-store");
28219
+ var ConnectionStoreSlotError = class extends Error {
28220
+ key;
28221
+ constructor(key) {
28222
+ super(`connection store: the document slot ${String(key)} holds a value that is not a connection store \u2014 another copy of @ggui-ai/wire with an incompatible shape, or a foreign object. Refusing to adopt or overwrite it.`);
28223
+ this.key = key;
28224
+ this.name = "ConnectionStoreSlotError";
28225
+ }
28226
+ };
28227
+ function isConnectionStore(value) {
28228
+ if (typeof value !== "object" || value === null)
28229
+ return false;
28230
+ const source = Reflect.get(value, "source");
28231
+ if (typeof source !== "object" || source === null)
28232
+ return false;
28233
+ return typeof Reflect.get(value, "claim") === "function" && typeof Reflect.get(source, "subscribe") === "function" && typeof Reflect.get(source, "getSnapshot") === "function";
28234
+ }
28177
28235
  function createConnectionStore(initial = true) {
28178
28236
  let value = initial;
28237
+ let owner;
28179
28238
  const listeners = /* @__PURE__ */ new Set();
28180
- return {
28239
+ const source = {
28181
28240
  subscribe(listener) {
28182
28241
  listeners.add(listener);
28183
28242
  return () => {
@@ -28186,22 +28245,53 @@
28186
28245
  },
28187
28246
  getSnapshot() {
28188
28247
  return value;
28189
- },
28190
- set(connected) {
28191
- if (connected === value)
28192
- return;
28193
- value = connected;
28194
- for (const l of listeners)
28195
- l();
28196
28248
  }
28197
28249
  };
28250
+ return {
28251
+ source,
28252
+ claim(claimant) {
28253
+ if (owner !== void 0)
28254
+ throw new ConnectionWriterConflictError(owner, claimant);
28255
+ owner = claimant;
28256
+ let released = false;
28257
+ return {
28258
+ set(connected) {
28259
+ if (released)
28260
+ throw new ConnectionWriterReleasedError(claimant);
28261
+ if (connected === value)
28262
+ return;
28263
+ value = connected;
28264
+ for (const l of listeners)
28265
+ l();
28266
+ },
28267
+ release() {
28268
+ if (released)
28269
+ return;
28270
+ released = true;
28271
+ owner = void 0;
28272
+ }
28273
+ };
28274
+ }
28275
+ };
28276
+ }
28277
+ function documentConnectionStore() {
28278
+ const existing = Reflect.get(globalThis, DOCUMENT_STORE_KEY);
28279
+ if (existing !== void 0) {
28280
+ if (isConnectionStore(existing))
28281
+ return existing;
28282
+ throw new ConnectionStoreSlotError(DOCUMENT_STORE_KEY);
28283
+ }
28284
+ const created = createConnectionStore(true);
28285
+ Reflect.set(globalThis, DOCUMENT_STORE_KEY, created);
28286
+ return created;
28198
28287
  }
28199
- var connectionStore = createConnectionStore(true);
28288
+ var documentStore = documentConnectionStore();
28289
+ var connectionSource = documentStore.source;
28200
28290
 
28201
28291
  // ../wire/dist/useRender.js
28202
28292
  function useRender() {
28203
28293
  const { render } = useWireContext();
28204
- const isConnected = (0, import_react37.useSyncExternalStore)(connectionStore.subscribe, connectionStore.getSnapshot, connectionStore.getSnapshot);
28294
+ const isConnected = (0, import_react37.useSyncExternalStore)(connectionSource.subscribe, connectionSource.getSnapshot, connectionSource.getSnapshot);
28205
28295
  return { sessionId: render.sessionId, isConnected };
28206
28296
  }
28207
28297
 
@@ -28659,7 +28749,7 @@
28659
28749
  }
28660
28750
 
28661
28751
  // ../protocol/dist/version.js
28662
- var PROTOCOL_VERSION = "draft-2026-09-04";
28752
+ var PROTOCOL_VERSION = "draft-2026-09-10";
28663
28753
  var PROTOCOL_SCHEMA_VERSION = PROTOCOL_VERSION;
28664
28754
  var CLIENT_SUPPORTED_VERSIONS = Object.freeze([
28665
28755
  PROTOCOL_SCHEMA_VERSION
@@ -28855,9 +28945,11 @@
28855
28945
 
28856
28946
  // ../design/dist/themes/consumed-tokens.manifest.json
28857
28947
  var consumed_tokens_manifest_default = {
28858
- version: 1,
28948
+ version: 2,
28859
28949
  tokens: [
28860
28950
  "--ggui-color-container",
28951
+ "--ggui-color-elevated",
28952
+ "--ggui-color-error",
28861
28953
  "--ggui-color-error-100",
28862
28954
  "--ggui-color-error-200",
28863
28955
  "--ggui-color-error-50",
@@ -28865,12 +28957,16 @@
28865
28957
  "--ggui-color-error-600",
28866
28958
  "--ggui-color-error-700",
28867
28959
  "--ggui-color-error-800",
28960
+ "--ggui-color-ground",
28961
+ "--ggui-color-ground-gradient",
28962
+ "--ggui-color-ground-subtle",
28868
28963
  "--ggui-color-info-100",
28869
28964
  "--ggui-color-info-200",
28870
28965
  "--ggui-color-info-50",
28871
28966
  "--ggui-color-info-500",
28872
28967
  "--ggui-color-info-700",
28873
28968
  "--ggui-color-info-800",
28969
+ "--ggui-color-link",
28874
28970
  "--ggui-color-neutral-100",
28875
28971
  "--ggui-color-neutral-200",
28876
28972
  "--ggui-color-neutral-300",
@@ -28878,11 +28974,14 @@
28878
28974
  "--ggui-color-neutral-50",
28879
28975
  "--ggui-color-neutral-500",
28880
28976
  "--ggui-color-neutral-600",
28977
+ "--ggui-color-neutral-900",
28881
28978
  "--ggui-color-onContainer",
28979
+ "--ggui-color-onElevated",
28882
28980
  "--ggui-color-onError",
28981
+ "--ggui-color-onGround",
28883
28982
  "--ggui-color-onPrimary",
28884
- "--ggui-color-onSurface",
28885
- "--ggui-color-onSurfaceVariant",
28983
+ "--ggui-color-onSunken",
28984
+ "--ggui-color-onTertiaryContainer",
28886
28985
  "--ggui-color-outline",
28887
28986
  "--ggui-color-outlineVariant",
28888
28987
  "--ggui-color-primary",
@@ -28902,11 +29001,8 @@
28902
29001
  "--ggui-color-success-500",
28903
29002
  "--ggui-color-success-700",
28904
29003
  "--ggui-color-success-800",
28905
- "--ggui-color-surface",
28906
- "--ggui-color-surface-gradient",
28907
- "--ggui-color-surface-subtle",
28908
- "--ggui-color-surface-sunken",
28909
- "--ggui-color-surfaceVariant",
29004
+ "--ggui-color-sunken",
29005
+ "--ggui-color-tertiaryContainer",
28910
29006
  "--ggui-color-warning-100",
28911
29007
  "--ggui-color-warning-200",
28912
29008
  "--ggui-color-warning-50",
@@ -28914,6 +29010,7 @@
28914
29010
  "--ggui-color-warning-700",
28915
29011
  "--ggui-color-warning-800",
28916
29012
  "--ggui-flash-color",
29013
+ "--ggui-font-family-heading",
28917
29014
  "--ggui-font-family-mono",
28918
29015
  "--ggui-font-family-sans",
28919
29016
  "--ggui-font-lineHeight-normal",
@@ -28926,11 +29023,11 @@
28926
29023
  "--ggui-font-size-xl",
28927
29024
  "--ggui-font-size-xs",
28928
29025
  "--ggui-font-weight-bold",
29026
+ "--ggui-font-weight-heading",
28929
29027
  "--ggui-font-weight-medium",
28930
29028
  "--ggui-font-weight-normal",
28931
29029
  "--ggui-font-weight-semibold",
28932
- "--ggui-radius-md",
28933
- "--ggui-radius-sm",
29030
+ "--ggui-letter-spacing-heading",
28934
29031
  "--ggui-shape-radius-full",
28935
29032
  "--ggui-shape-radius-lg",
28936
29033
  "--ggui-shape-radius-md",
@@ -29119,28 +29216,11 @@
29119
29216
  $type: "fontFamily"
29120
29217
  }
29121
29218
  },
29122
- size: {
29123
- sm: { $value: "0.8125rem", $type: "dimension" },
29124
- // 13px
29125
- base: { $value: "0.875rem", $type: "dimension" },
29126
- // 14px — brand-kit body
29127
- lg: { $value: "1rem", $type: "dimension" },
29128
- // 16px
29129
- xl: { $value: "1.125rem", $type: "dimension" },
29130
- // 18px
29131
- "2xl": { $value: "1.375rem", $type: "dimension" }
29132
- // 22px — brand-kit hero tag
29133
- },
29134
29219
  weight: {
29135
29220
  normal: { $value: "400", $type: "fontWeight" },
29136
29221
  medium: { $value: "500", $type: "fontWeight" },
29137
29222
  semibold: { $value: "600", $type: "fontWeight" },
29138
29223
  bold: { $value: "700", $type: "fontWeight" }
29139
- },
29140
- lineHeight: {
29141
- tight: { $value: "1.2", $type: "number" },
29142
- normal: { $value: "1.5", $type: "number" },
29143
- relaxed: { $value: "1.6", $type: "number" }
29144
29224
  }
29145
29225
  },
29146
29226
  spacing: {
@@ -29201,26 +29281,6 @@
29201
29281
  }
29202
29282
  },
29203
29283
  motion: {
29204
- duration: {
29205
- fast: { $value: "120ms", $type: "duration" },
29206
- normal: { $value: "200ms", $type: "duration" },
29207
- slow: { $value: "400ms", $type: "duration" },
29208
- ambient: { $value: "2000ms", $type: "duration" }
29209
- },
29210
- easing: {
29211
- default: {
29212
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
29213
- $type: "cubicBezier"
29214
- },
29215
- bounce: {
29216
- $value: "cubic-bezier(0.34, 1.56, 0.64, 1)",
29217
- $type: "cubicBezier"
29218
- },
29219
- spring: {
29220
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
29221
- $type: "cubicBezier"
29222
- }
29223
- },
29224
29284
  transition: standardTransitions,
29225
29285
  keyframes: {
29226
29286
  "accent-pulse": {
@@ -29243,7 +29303,6 @@
29243
29303
  $description: "The default ggui theme \u2014 monochrome paper + ink, architectural, no decorative flourish.",
29244
29304
  $metadata: {
29245
29305
  font: "Inter",
29246
- fontUrl: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Geist+Mono:wght@400;500;700&display=swap",
29247
29306
  philosophy: "The interface is the artifact, not the chrome around it."
29248
29307
  },
29249
29308
  color: {
@@ -29336,15 +29395,15 @@
29336
29395
  "800": { $value: "#181818", $type: "color" }
29337
29396
  },
29338
29397
  // Semantic surface roles
29339
- surface: { $value: "#f4f3ed", $type: "color" },
29398
+ ground: { $value: "#f4f3ed", $type: "color" },
29340
29399
  // paper
29341
- onSurface: { $value: "#292929", $type: "color" },
29400
+ onGround: { $value: "#292929", $type: "color" },
29342
29401
  // ink
29343
- surfaceVariant: { $value: "#ebe9e1", $type: "color" },
29402
+ sunken: { $value: "#ebe9e1", $type: "color" },
29344
29403
  // paper-2
29345
- onSurfaceVariant: { $value: "#5a5a5a", $type: "color" },
29404
+ onSunken: { $value: "#5a5a5a", $type: "color" },
29346
29405
  // ink-3
29347
- container: { $value: "#ebe9e1", $type: "color" },
29406
+ container: { $value: "#f4f3ed", $type: "color" },
29348
29407
  // paper-2
29349
29408
  onContainer: { $value: "#292929", $type: "color" },
29350
29409
  // ink
@@ -29399,7 +29458,6 @@
29399
29458
  $description: "The default ggui theme (dark) \u2014 ink canvas, paper text, architectural and flat.",
29400
29459
  $metadata: {
29401
29460
  font: "Inter",
29402
- fontUrl: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Geist+Mono:wght@400;500;700&display=swap",
29403
29461
  philosophy: "The interface is the artifact, not the chrome around it."
29404
29462
  },
29405
29463
  color: {
@@ -29489,15 +29547,15 @@
29489
29547
  "700": { $value: "#e8e8e8", $type: "color" },
29490
29548
  "800": { $value: "#f0f0f0", $type: "color" }
29491
29549
  },
29492
- surface: { $value: "#1f1f1f", $type: "color" },
29550
+ ground: { $value: "#1f1f1f", $type: "color" },
29493
29551
  // surface above ink base
29494
- onSurface: { $value: "#f4f3ed", $type: "color" },
29552
+ onGround: { $value: "#f4f3ed", $type: "color" },
29495
29553
  // paper
29496
- surfaceVariant: { $value: "#292929", $type: "color" },
29554
+ sunken: { $value: "#292929", $type: "color" },
29497
29555
  // ink
29498
- onSurfaceVariant: { $value: "#d9d9d9", $type: "color" },
29556
+ onSunken: { $value: "#d9d9d9", $type: "color" },
29499
29557
  // chrome
29500
- container: { $value: "#292929", $type: "color" },
29558
+ container: { $value: "#1f1f1f", $type: "color" },
29501
29559
  // ink
29502
29560
  onContainer: { $value: "#f4f3ed", $type: "color" },
29503
29561
  // paper
@@ -29558,23 +29616,11 @@
29558
29616
  $type: "fontFamily"
29559
29617
  }
29560
29618
  },
29561
- size: {
29562
- sm: { $value: "0.8rem", $type: "dimension" },
29563
- base: { $value: "0.95rem", $type: "dimension" },
29564
- lg: { $value: "1.1rem", $type: "dimension" },
29565
- xl: { $value: "1.3rem", $type: "dimension" },
29566
- "2xl": { $value: "1.6rem", $type: "dimension" }
29567
- },
29568
29619
  weight: {
29569
29620
  normal: { $value: "400", $type: "fontWeight" },
29570
29621
  medium: { $value: "500", $type: "fontWeight" },
29571
29622
  semibold: { $value: "600", $type: "fontWeight" },
29572
29623
  bold: { $value: "700", $type: "fontWeight" }
29573
- },
29574
- lineHeight: {
29575
- tight: { $value: "1.2", $type: "number" },
29576
- normal: { $value: "1.5", $type: "number" },
29577
- relaxed: { $value: "1.7", $type: "number" }
29578
29624
  }
29579
29625
  },
29580
29626
  spacing: {
@@ -29607,26 +29653,6 @@
29607
29653
  }
29608
29654
  },
29609
29655
  motion: {
29610
- duration: {
29611
- fast: { $value: "100ms", $type: "duration" },
29612
- normal: { $value: "200ms", $type: "duration" },
29613
- slow: { $value: "600ms", $type: "duration" },
29614
- ambient: { $value: "2000ms", $type: "duration" }
29615
- },
29616
- easing: {
29617
- default: {
29618
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
29619
- $type: "cubicBezier"
29620
- },
29621
- bounce: {
29622
- $value: "cubic-bezier(0.68, -0.55, 0.27, 1.55)",
29623
- $type: "cubicBezier"
29624
- },
29625
- spring: {
29626
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
29627
- $type: "cubicBezier"
29628
- }
29629
- },
29630
29656
  keyframes: {
29631
29657
  "glitch-flicker": {
29632
29658
  $value: "0%{opacity:1;transform:none}7%{opacity:0.8;transform:translateX(-2px) skewX(-1deg)}10%{opacity:1;transform:none}47%{opacity:1;transform:none}50%{opacity:0.6;transform:translateX(3px) skewX(2deg)}53%{opacity:1;transform:none}100%{opacity:1;transform:none}",
@@ -29677,7 +29703,6 @@
29677
29703
  $description: "Neon-lit dystopian tech \u2014 cyan neon on dark chrome with glitch animations.",
29678
29704
  $metadata: {
29679
29705
  font: "Orbitron",
29680
- fontUrl: "https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700&display=swap",
29681
29706
  philosophy: "Chromatic noise, electric tension, digital rebellion."
29682
29707
  },
29683
29708
  color: {
@@ -29746,12 +29771,12 @@
29746
29771
  "800": { $value: "#005266", $type: "color" }
29747
29772
  },
29748
29773
  // Semantic roles (dark theme — inverted neutral scale)
29749
- surface: { $value: "#0a0a0f", $type: "color" },
29750
- onSurface: { $value: "#e8e8f0", $type: "color" },
29751
- surfaceVariant: { $value: "#111118", $type: "color" },
29752
- onSurfaceVariant: { $value: "#8888a0", $type: "color" },
29753
- container: { $value: "#155e75", $type: "color" },
29754
- onContainer: { $value: "#cffafe", $type: "color" },
29774
+ ground: { $value: "#0a0a0f", $type: "color" },
29775
+ onGround: { $value: "#e8e8f0", $type: "color" },
29776
+ sunken: { $value: "#111118", $type: "color" },
29777
+ onSunken: { $value: "#8888a0", $type: "color" },
29778
+ container: { $value: "#0a0a0f", $type: "color" },
29779
+ onContainer: { $value: "#e8e8f0", $type: "color" },
29755
29780
  outline: { $value: "#3a3a48", $type: "color" },
29756
29781
  outlineVariant: { $value: "#25252f", $type: "color" },
29757
29782
  // Primary role pair — onPrimary is the deep night chrome, container
@@ -29798,7 +29823,6 @@
29798
29823
  $description: "Neon-lit dystopian tech (dark) \u2014 brighter cyan on pure-black chrome, cranked neon contrast.",
29799
29824
  $metadata: {
29800
29825
  font: "Orbitron",
29801
- fontUrl: "https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700&display=swap",
29802
29826
  philosophy: "Chromatic noise, electric tension, digital rebellion."
29803
29827
  },
29804
29828
  color: {
@@ -29873,13 +29897,13 @@
29873
29897
  "700": { $value: "#85e6ff", $type: "color" },
29874
29898
  "800": { $value: "#adeeff", $type: "color" }
29875
29899
  },
29876
- surface: { $value: "#000005", $type: "color" },
29877
- onSurface: { $value: "#e8e8f0", $type: "color" },
29878
- surfaceVariant: { $value: "#0a0a0f", $type: "color" },
29879
- onSurfaceVariant: { $value: "#aaaabe", $type: "color" },
29880
- container: { $value: "#0e7490", $type: "color" },
29900
+ ground: { $value: "#000005", $type: "color" },
29901
+ onGround: { $value: "#e8e8f0", $type: "color" },
29902
+ sunken: { $value: "#0a0a0f", $type: "color" },
29903
+ onSunken: { $value: "#aaaabe", $type: "color" },
29904
+ container: { $value: "#000005", $type: "color" },
29881
29905
  // deeper teal
29882
- onContainer: { $value: "#cffafe", $type: "color" },
29906
+ onContainer: { $value: "#e8e8f0", $type: "color" },
29883
29907
  outline: { $value: "#1a1a24", $type: "color" },
29884
29908
  outlineVariant: { $value: "#111118", $type: "color" },
29885
29909
  // Primary role pair — dark: onPrimary is pure-black-ish, container = deeper teal.
@@ -29931,23 +29955,11 @@
29931
29955
  $type: "fontFamily"
29932
29956
  }
29933
29957
  },
29934
- size: {
29935
- sm: { $value: "0.875rem", $type: "dimension" },
29936
- base: { $value: "1rem", $type: "dimension" },
29937
- lg: { $value: "1.125rem", $type: "dimension" },
29938
- xl: { $value: "1.3rem", $type: "dimension" },
29939
- "2xl": { $value: "1.6rem", $type: "dimension" }
29940
- },
29941
29958
  weight: {
29942
29959
  normal: { $value: "400", $type: "fontWeight" },
29943
29960
  medium: { $value: "500", $type: "fontWeight" },
29944
29961
  semibold: { $value: "600", $type: "fontWeight" },
29945
29962
  bold: { $value: "700", $type: "fontWeight" }
29946
- },
29947
- lineHeight: {
29948
- tight: { $value: "1.3", $type: "number" },
29949
- normal: { $value: "1.6", $type: "number" },
29950
- relaxed: { $value: "1.9", $type: "number" }
29951
29963
  }
29952
29964
  },
29953
29965
  spacing: {
@@ -29989,26 +30001,6 @@
29989
30001
  }
29990
30002
  },
29991
30003
  motion: {
29992
- duration: {
29993
- fast: { $value: "200ms", $type: "duration" },
29994
- normal: { $value: "500ms", $type: "duration" },
29995
- slow: { $value: "1500ms", $type: "duration" },
29996
- ambient: { $value: "6000ms", $type: "duration" }
29997
- },
29998
- easing: {
29999
- default: {
30000
- $value: "cubic-bezier(0.33, 0, 0.67, 1)",
30001
- $type: "cubicBezier"
30002
- },
30003
- bounce: {
30004
- $value: "cubic-bezier(0.34, 1.2, 0.64, 1)",
30005
- $type: "cubicBezier"
30006
- },
30007
- spring: {
30008
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
30009
- $type: "cubicBezier"
30010
- }
30011
- },
30012
30004
  keyframes: {
30013
30005
  "slow-breathe": {
30014
30006
  $value: "0%{opacity:0.85}50%{opacity:1}100%{opacity:0.85}",
@@ -30038,7 +30030,6 @@
30038
30030
  $description: "Minimalist Japanese aesthetic \u2014 warm stone tones, deliberate space, and unhurried motion.",
30039
30031
  $metadata: {
30040
30032
  font: "Noto Serif JP",
30041
- fontUrl: "https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;500;600;700&display=swap",
30042
30033
  philosophy: "Beauty in imperfection. Stillness as presence."
30043
30034
  },
30044
30035
  color: {
@@ -30106,12 +30097,12 @@
30106
30097
  "800": { $type: "color", $value: "#2c3d46" }
30107
30098
  },
30108
30099
  // Semantic roles
30109
- surface: { $value: "#faf9f7", $type: "color" },
30110
- onSurface: { $value: "#2a2724", $type: "color" },
30111
- surfaceVariant: { $value: "#f3f1ed", $type: "color" },
30112
- onSurfaceVariant: { $value: "#6b635b", $type: "color" },
30113
- container: { $value: "#e8ebe2", $type: "color" },
30114
- onContainer: { $value: "#33392e", $type: "color" },
30100
+ ground: { $value: "#faf9f7", $type: "color" },
30101
+ onGround: { $value: "#2a2724", $type: "color" },
30102
+ sunken: { $value: "#f3f1ed", $type: "color" },
30103
+ onSunken: { $value: "#6b635b", $type: "color" },
30104
+ container: { $value: "#faf9f7", $type: "color" },
30105
+ onContainer: { $value: "#2a2724", $type: "color" },
30115
30106
  outline: { $value: "#d5d0c8", $type: "color" },
30116
30107
  outlineVariant: { $value: "#e7e4de", $type: "color" },
30117
30108
  // Primary role pair — onPrimary is stone ivory on moss.
@@ -30155,7 +30146,6 @@
30155
30146
  $description: "Minimalist Japanese aesthetic (dark) \u2014 dusk stone surfaces with restrained moss accents and unhurried motion.",
30156
30147
  $metadata: {
30157
30148
  font: "Noto Serif JP",
30158
- fontUrl: "https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;500;600;700&display=swap",
30159
30149
  philosophy: "Beauty in imperfection. Stillness as presence."
30160
30150
  },
30161
30151
  color: {
@@ -30224,14 +30214,14 @@
30224
30214
  "700": { $type: "color", $value: "#546771" },
30225
30215
  "800": { $type: "color", $value: "#38454d" }
30226
30216
  },
30227
- surface: { $value: "#2a2724", $type: "color" },
30228
- onSurface: { $value: "#f3f1ed", $type: "color" },
30217
+ ground: { $value: "#2a2724", $type: "color" },
30218
+ onGround: { $value: "#f3f1ed", $type: "color" },
30229
30219
  // muted off-cream, not pure white
30230
- surfaceVariant: { $value: "#3e3a36", $type: "color" },
30231
- onSurfaceVariant: { $value: "#b8b0a4", $type: "color" },
30232
- container: { $value: "#48543d", $type: "color" },
30220
+ sunken: { $value: "#3e3a36", $type: "color" },
30221
+ onSunken: { $value: "#b8b0a4", $type: "color" },
30222
+ container: { $value: "#2a2724", $type: "color" },
30233
30223
  // deep moss
30234
- onContainer: { $value: "#e8ebe2", $type: "color" },
30224
+ onContainer: { $value: "#f3f1ed", $type: "color" },
30235
30225
  // primary-100 in dark tree
30236
30226
  outline: { $value: "#5e5650", $type: "color" },
30237
30227
  outlineVariant: { $value: "#3e3a36", $type: "color" },
@@ -30283,23 +30273,11 @@
30283
30273
  $type: "fontFamily"
30284
30274
  }
30285
30275
  },
30286
- size: {
30287
- sm: { $value: "0.875rem", $type: "dimension" },
30288
- base: { $value: "1rem", $type: "dimension" },
30289
- lg: { $value: "1.125rem", $type: "dimension" },
30290
- xl: { $value: "1.25rem", $type: "dimension" },
30291
- "2xl": { $value: "1.5rem", $type: "dimension" }
30292
- },
30293
30276
  weight: {
30294
30277
  normal: { $value: "400", $type: "fontWeight" },
30295
30278
  medium: { $value: "500", $type: "fontWeight" },
30296
30279
  semibold: { $value: "600", $type: "fontWeight" },
30297
30280
  bold: { $value: "700", $type: "fontWeight" }
30298
- },
30299
- lineHeight: {
30300
- tight: { $value: "1.25", $type: "number" },
30301
- normal: { $value: "1.5", $type: "number" },
30302
- relaxed: { $value: "1.75", $type: "number" }
30303
30281
  }
30304
30282
  },
30305
30283
  spacing: {
@@ -30332,26 +30310,6 @@
30332
30310
  }
30333
30311
  },
30334
30312
  motion: {
30335
- duration: {
30336
- fast: { $value: "120ms", $type: "duration" },
30337
- normal: { $value: "250ms", $type: "duration" },
30338
- slow: { $value: "800ms", $type: "duration" },
30339
- ambient: { $value: "2500ms", $type: "duration" }
30340
- },
30341
- easing: {
30342
- default: {
30343
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
30344
- $type: "cubicBezier"
30345
- },
30346
- bounce: {
30347
- $value: "cubic-bezier(0.68, -0.55, 0.27, 1.55)",
30348
- $type: "cubicBezier"
30349
- },
30350
- spring: {
30351
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
30352
- $type: "cubicBezier"
30353
- }
30354
- },
30355
30313
  transition: {
30356
30314
  fast: {
30357
30315
  $value: "120ms cubic-bezier(0.4, 0, 0.2, 1)",
@@ -30399,7 +30357,6 @@
30399
30357
  $description: "Hot pink neon on dark \u2014 electric glow effects, neon flicker, and flowing magenta particles.",
30400
30358
  $metadata: {
30401
30359
  font: "Outfit",
30402
- fontUrl: "https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap",
30403
30360
  philosophy: "Midnight electricity. The city never sleeps."
30404
30361
  },
30405
30362
  color: {
@@ -30444,12 +30401,12 @@
30444
30401
  "500": { $value: "#38bdf8", $type: "color" }
30445
30402
  },
30446
30403
  // Semantic roles (dark theme — inverted neutral scale)
30447
- surface: { $value: "#09090b", $type: "color" },
30448
- onSurface: { $value: "#ececf0", $type: "color" },
30449
- surfaceVariant: { $value: "#111114", $type: "color" },
30450
- onSurfaceVariant: { $value: "#8a8a9a", $type: "color" },
30451
- container: { $value: "#9d174d", $type: "color" },
30452
- onContainer: { $value: "#fce7f3", $type: "color" },
30404
+ ground: { $value: "#09090b", $type: "color" },
30405
+ onGround: { $value: "#ececf0", $type: "color" },
30406
+ sunken: { $value: "#111114", $type: "color" },
30407
+ onSunken: { $value: "#8a8a9a", $type: "color" },
30408
+ container: { $value: "#09090b", $type: "color" },
30409
+ onContainer: { $value: "#ececf0", $type: "color" },
30453
30410
  outline: { $value: "#3b3b44", $type: "color" },
30454
30411
  outlineVariant: { $value: "#232329", $type: "color" },
30455
30412
  // Primary role pair — onPrimary is deep noir so hot pink CTAs pop.
@@ -30491,7 +30448,6 @@
30491
30448
  $description: "Hot pink neon on pure black (dark) \u2014 sharper noir contrast, brighter electric glow, deeper magenta containers.",
30492
30449
  $metadata: {
30493
30450
  font: "Outfit",
30494
- fontUrl: "https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap",
30495
30451
  philosophy: "Midnight electricity. The city never sleeps."
30496
30452
  },
30497
30453
  color: {
@@ -30537,13 +30493,13 @@
30537
30493
  ...standardSemanticScales.dark.info,
30538
30494
  "500": { $value: "#5acdff", $type: "color" }
30539
30495
  },
30540
- surface: { $value: "#000000", $type: "color" },
30541
- onSurface: { $value: "#ececf0", $type: "color" },
30542
- surfaceVariant: { $value: "#09090b", $type: "color" },
30543
- onSurfaceVariant: { $value: "#b0b0be", $type: "color" },
30544
- container: { $value: "#be185d", $type: "color" },
30496
+ ground: { $value: "#000000", $type: "color" },
30497
+ onGround: { $value: "#ececf0", $type: "color" },
30498
+ sunken: { $value: "#09090b", $type: "color" },
30499
+ onSunken: { $value: "#b0b0be", $type: "color" },
30500
+ container: { $value: "#000000", $type: "color" },
30545
30501
  // richer magenta
30546
- onContainer: { $value: "#fce7f3", $type: "color" },
30502
+ onContainer: { $value: "#ececf0", $type: "color" },
30547
30503
  outline: { $value: "#19191e", $type: "color" },
30548
30504
  outlineVariant: { $value: "#111114", $type: "color" },
30549
30505
  // Primary role pair — dark: onPrimary is pure black, container = richer magenta.
@@ -30591,23 +30547,11 @@
30591
30547
  $type: "fontFamily"
30592
30548
  }
30593
30549
  },
30594
- size: {
30595
- sm: { $value: "0.875rem", $type: "dimension" },
30596
- base: { $value: "1rem", $type: "dimension" },
30597
- lg: { $value: "1.15rem", $type: "dimension" },
30598
- xl: { $value: "1.3rem", $type: "dimension" },
30599
- "2xl": { $value: "1.625rem", $type: "dimension" }
30600
- },
30601
30550
  weight: {
30602
30551
  normal: { $value: "400", $type: "fontWeight" },
30603
30552
  medium: { $value: "500", $type: "fontWeight" },
30604
30553
  semibold: { $value: "600", $type: "fontWeight" },
30605
30554
  bold: { $value: "700", $type: "fontWeight" }
30606
- },
30607
- lineHeight: {
30608
- tight: { $value: "1.3", $type: "number" },
30609
- normal: { $value: "1.6", $type: "number" },
30610
- relaxed: { $value: "1.85", $type: "number" }
30611
30555
  }
30612
30556
  },
30613
30557
  spacing: {
@@ -30649,26 +30593,6 @@
30649
30593
  }
30650
30594
  },
30651
30595
  motion: {
30652
- duration: {
30653
- fast: { $value: "200ms", $type: "duration" },
30654
- normal: { $value: "400ms", $type: "duration" },
30655
- slow: { $value: "1200ms", $type: "duration" },
30656
- ambient: { $value: "5000ms", $type: "duration" }
30657
- },
30658
- easing: {
30659
- default: {
30660
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
30661
- $type: "cubicBezier"
30662
- },
30663
- bounce: {
30664
- $value: "cubic-bezier(0.34, 1.3, 0.64, 1)",
30665
- $type: "cubicBezier"
30666
- },
30667
- spring: {
30668
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
30669
- $type: "cubicBezier"
30670
- }
30671
- },
30672
30596
  keyframes: {
30673
30597
  "leaf-float": {
30674
30598
  $value: "0%{transform:translateY(0) rotate(0deg);opacity:0.7}25%{transform:translateY(-6px) rotate(3deg)}50%{transform:translateY(-2px) rotate(-2deg);opacity:1}75%{transform:translateY(-8px) rotate(2deg)}100%{transform:translateY(0) rotate(0deg);opacity:0.7}",
@@ -30691,7 +30615,6 @@
30691
30615
  $description: "Organic greens on warm cream \u2014 leaf-float animations and vine-grow motion.",
30692
30616
  $metadata: {
30693
30617
  font: "Lora",
30694
- fontUrl: "https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap",
30695
30618
  philosophy: "Rooted in nature. Growing with intention."
30696
30619
  },
30697
30620
  color: {
@@ -30740,12 +30663,12 @@
30740
30663
  },
30741
30664
  info: standardSemanticScales.light.info,
30742
30665
  // Semantic roles
30743
- surface: { $value: "#fefcf8", $type: "color" },
30744
- onSurface: { $value: "#352e20", $type: "color" },
30745
- surfaceVariant: { $value: "#fdf8ef", $type: "color" },
30746
- onSurfaceVariant: { $value: "#746448", $type: "color" },
30747
- container: { $value: "#dcfce7", $type: "color" },
30748
- onContainer: { $value: "#14532d", $type: "color" },
30666
+ ground: { $value: "#fefcf8", $type: "color" },
30667
+ onGround: { $value: "#352e20", $type: "color" },
30668
+ sunken: { $value: "#fdf8ef", $type: "color" },
30669
+ onSunken: { $value: "#746448", $type: "color" },
30670
+ container: { $value: "#fefcf8", $type: "color" },
30671
+ onContainer: { $value: "#352e20", $type: "color" },
30749
30672
  outline: { $value: "#f0e4c9", $type: "color" },
30750
30673
  outlineVariant: { $value: "#f8f0df", $type: "color" },
30751
30674
  // Primary role pair — onPrimary is cream for the leaf-green brand hex.
@@ -30787,7 +30710,6 @@
30787
30710
  $description: "Forest at night (dark) \u2014 deep soil surfaces with lifted leaf-green accents and gentle organic motion.",
30788
30711
  $metadata: {
30789
30712
  font: "Lora",
30790
- fontUrl: "https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap",
30791
30713
  philosophy: "Rooted in nature. Growing with intention."
30792
30714
  },
30793
30715
  color: {
@@ -30822,13 +30744,13 @@
30822
30744
  warning: standardSemanticScales.dark.warning,
30823
30745
  error: standardSemanticScales.dark.error,
30824
30746
  info: standardSemanticScales.dark.info,
30825
- surface: { $value: "#1f1c18", $type: "color" },
30826
- onSurface: { $value: "#fefcf8", $type: "color" },
30827
- surfaceVariant: { $value: "#352e20", $type: "color" },
30828
- onSurfaceVariant: { $value: "#dccba5", $type: "color" },
30829
- container: { $value: "#166534", $type: "color" },
30747
+ ground: { $value: "#1f1c18", $type: "color" },
30748
+ onGround: { $value: "#fefcf8", $type: "color" },
30749
+ sunken: { $value: "#352e20", $type: "color" },
30750
+ onSunken: { $value: "#dccba5", $type: "color" },
30751
+ container: { $value: "#1f1c18", $type: "color" },
30830
30752
  // deep forest
30831
- onContainer: { $value: "#dcfce7", $type: "color" },
30753
+ onContainer: { $value: "#fefcf8", $type: "color" },
30832
30754
  outline: { $value: "#504530", $type: "color" },
30833
30755
  outlineVariant: { $value: "#352e20", $type: "color" },
30834
30756
  // Primary role pair — dark: lifted leaf-green, onPrimary = forest soil.
@@ -30893,24 +30815,11 @@
30893
30815
  $type: "fontFamily"
30894
30816
  }
30895
30817
  },
30896
- size: {
30897
- sm: { $value: "0.875rem", $type: "dimension" },
30898
- base: { $value: "1rem", $type: "dimension" },
30899
- lg: { $value: "1.125rem", $type: "dimension" },
30900
- xl: { $value: "1.25rem", $type: "dimension" },
30901
- "2xl": { $value: "1.5rem", $type: "dimension" }
30902
- },
30903
30818
  weight: {
30904
30819
  normal: { $value: "400", $type: "fontWeight" },
30905
30820
  medium: { $value: "500", $type: "fontWeight" },
30906
30821
  semibold: { $value: "600", $type: "fontWeight" },
30907
30822
  bold: { $value: "700", $type: "fontWeight" }
30908
- },
30909
- lineHeight: {
30910
- tight: { $value: "1.25", $type: "number" },
30911
- normal: { $value: "1.55", $type: "number" },
30912
- // claude.ai-ish — slightly looser than Indigo
30913
- relaxed: { $value: "1.75", $type: "number" }
30914
30823
  }
30915
30824
  },
30916
30825
  // Same dual-key spacing scale as Indigo so primitives that
@@ -30968,21 +30877,6 @@
30968
30877
  motion: {
30969
30878
  // Claudic is calmer than Indigo — no `ambient` 3s breathing
30970
30879
  // duration is exposed. Animations stay snappy + functional only.
30971
- duration: {
30972
- fast: { $value: "120ms", $type: "duration" },
30973
- normal: { $value: "240ms", $type: "duration" },
30974
- slow: { $value: "480ms", $type: "duration" }
30975
- },
30976
- easing: {
30977
- default: {
30978
- $value: "cubic-bezier(0.4, 0, 0.2, 1)",
30979
- $type: "cubicBezier"
30980
- },
30981
- spring: {
30982
- $value: "cubic-bezier(0.22, 1, 0.36, 1)",
30983
- $type: "cubicBezier"
30984
- }
30985
- },
30986
30880
  keyframes: {
30987
30881
  entrance: {
30988
30882
  $value: "0%{opacity:0;transform:translateY(4px)}100%{opacity:1;transform:none}",
@@ -31083,15 +30977,15 @@
31083
30977
  "800": { $value: "#363432", $type: "color" }
31084
30978
  },
31085
30979
  // Two-tier semantic roles
31086
- surface: { $value: "#faf9f5", $type: "color" },
30980
+ ground: { $value: "#faf9f5", $type: "color" },
31087
30981
  // Ivory
31088
- onSurface: { $value: "#141413", $type: "color" },
30982
+ onGround: { $value: "#141413", $type: "color" },
31089
30983
  // Slate
31090
- surfaceVariant: { $value: "#f5f4ee", $type: "color" },
31091
- onSurfaceVariant: { $value: "#56544f", $type: "color" },
31092
- container: { $value: "#fbf2ee", $type: "color" },
30984
+ sunken: { $value: "#f5f4ee", $type: "color" },
30985
+ onSunken: { $value: "#56544f", $type: "color" },
30986
+ container: { $value: "#faf9f5", $type: "color" },
31093
30987
  // primary-50
31094
- onContainer: { $value: "#4d2920", $type: "color" },
30988
+ onContainer: { $value: "#141413", $type: "color" },
31095
30989
  // primary-900
31096
30990
  outline: { $value: "#dad8cc", $type: "color" },
31097
30991
  outlineVariant: { $value: "#ebe9df", $type: "color" },
@@ -31223,14 +31117,14 @@
31223
31117
  "700": { $value: "#d1cfca", $type: "color" },
31224
31118
  "800": { $value: "#e6e4e0", $type: "color" }
31225
31119
  },
31226
- surface: { $value: "#262624", $type: "color" },
31120
+ ground: { $value: "#262624", $type: "color" },
31227
31121
  // Charcoal
31228
- onSurface: { $value: "#faf9f5", $type: "color" },
31122
+ onGround: { $value: "#faf9f5", $type: "color" },
31229
31123
  // Ivory
31230
- surfaceVariant: { $value: "#2d2c2a", $type: "color" },
31231
- onSurfaceVariant: { $value: "#a8a59f", $type: "color" },
31232
- container: { $value: "#3d3b39", $type: "color" },
31233
- onContainer: { $value: "#fbf2ee", $type: "color" },
31124
+ sunken: { $value: "#2d2c2a", $type: "color" },
31125
+ onSunken: { $value: "#a8a59f", $type: "color" },
31126
+ container: { $value: "#262624", $type: "color" },
31127
+ onContainer: { $value: "#faf9f5", $type: "color" },
31234
31128
  outline: { $value: "#3d3b39", $type: "color" },
31235
31129
  outlineVariant: { $value: "#2d2c2a", $type: "color" },
31236
31130
  // Primary role pair — dark: onPrimary is charcoal so text reads on the
@@ -31293,31 +31187,12 @@
31293
31187
  $type: "fontFamily"
31294
31188
  }
31295
31189
  },
31296
- size: {
31297
- sm: { $value: "0.8125rem", $type: "dimension" },
31298
- // 13px
31299
- base: { $value: "0.9375rem", $type: "dimension" },
31300
- // 15px
31301
- lg: { $value: "1.0625rem", $type: "dimension" },
31302
- // 17px
31303
- xl: { $value: "1.3125rem", $type: "dimension" },
31304
- // 21px — bumped for display headings
31305
- "2xl": { $value: "1.75rem", $type: "dimension" }
31306
- // 28px — generous display
31307
- },
31308
31190
  weight: {
31309
31191
  normal: { $value: "400", $type: "fontWeight" },
31310
31192
  medium: { $value: "500", $type: "fontWeight" },
31311
31193
  semibold: { $value: "600", $type: "fontWeight" },
31312
31194
  bold: { $value: "680", $type: "fontWeight" }
31313
31195
  // variable-axis weight; reads bold without going harsh on Inter
31314
- },
31315
- lineHeight: {
31316
- tight: { $value: "1.1", $type: "number" },
31317
- // headings
31318
- normal: { $value: "1.55", $type: "number" },
31319
- // body — generous, editorial
31320
- relaxed: { $value: "1.7", $type: "number" }
31321
31196
  }
31322
31197
  },
31323
31198
  spacing: {
@@ -31374,24 +31249,6 @@
31374
31249
  }
31375
31250
  },
31376
31251
  motion: {
31377
- duration: {
31378
- fast: { $value: "150ms", $type: "duration" },
31379
- normal: { $value: "250ms", $type: "duration" },
31380
- slow: { $value: "420ms", $type: "duration" },
31381
- ambient: { $value: "8000ms", $type: "duration" }
31382
- // background breathing
31383
- },
31384
- easing: {
31385
- // Linear's signature easing — confident, slightly overshoots arrival.
31386
- default: {
31387
- $value: "cubic-bezier(0.32, 0.72, 0, 1)",
31388
- $type: "cubicBezier"
31389
- },
31390
- spring: {
31391
- $value: "cubic-bezier(0.16, 1, 0.3, 1)",
31392
- $type: "cubicBezier"
31393
- }
31394
- },
31395
31252
  keyframes: {
31396
31253
  entrance: {
31397
31254
  $value: "0%{opacity:0;transform:translateY(6px)}100%{opacity:1;transform:none}",
@@ -31490,15 +31347,15 @@
31490
31347
  "700": { $value: "#155e75", $type: "color" },
31491
31348
  "800": { $value: "#164e63", $type: "color" }
31492
31349
  },
31493
- surface: { $value: "#fafaf7", $type: "color" },
31350
+ ground: { $value: "#fafaf7", $type: "color" },
31494
31351
  // Paper
31495
- onSurface: { $value: "#15131f", $type: "color" },
31352
+ onGround: { $value: "#15131f", $type: "color" },
31496
31353
  // Ink
31497
- surfaceVariant: { $value: "#f4f4f0", $type: "color" },
31498
- onSurfaceVariant: { $value: "#4a4954", $type: "color" },
31499
- container: { $value: "#eef2ff", $type: "color" },
31354
+ sunken: { $value: "#f4f4f0", $type: "color" },
31355
+ onSunken: { $value: "#4a4954", $type: "color" },
31356
+ container: { $value: "#fafaf7", $type: "color" },
31500
31357
  // primary-50 — pale indigo whisper
31501
- onContainer: { $value: "#1e1b4b", $type: "color" },
31358
+ onContainer: { $value: "#15131f", $type: "color" },
31502
31359
  // primary-900
31503
31360
  outline: { $value: "#d4d3cf", $type: "color" },
31504
31361
  outlineVariant: { $value: "#e8e7e3", $type: "color" },
@@ -31632,13 +31489,13 @@
31632
31489
  // indistinguishable from default. Variant is now #221e35 (visible
31633
31490
  // 1-tier step) and outline #3e3c50 (matches neutral-400, gives
31634
31491
  // borders a hairline visibility on dark).
31635
- surface: { $value: "#15131f", $type: "color" },
31636
- onSurface: { $value: "#f5f4f9", $type: "color" },
31637
- surfaceVariant: { $value: "#221e35", $type: "color" },
31638
- onSurfaceVariant: { $value: "#c8c6d2", $type: "color" },
31639
- container: { $value: "#312e81", $type: "color" },
31492
+ ground: { $value: "#15131f", $type: "color" },
31493
+ onGround: { $value: "#f5f4f9", $type: "color" },
31494
+ sunken: { $value: "#221e35", $type: "color" },
31495
+ onSunken: { $value: "#c8c6d2", $type: "color" },
31496
+ container: { $value: "#15131f", $type: "color" },
31640
31497
  // primary-100 dark
31641
- onContainer: { $value: "#eef2ff", $type: "color" },
31498
+ onContainer: { $value: "#f5f4f9", $type: "color" },
31642
31499
  outline: { $value: "#3e3c50", $type: "color" },
31643
31500
  outlineVariant: { $value: "#2a2839", $type: "color" },
31644
31501
  // Primary role pair — dark: onPrimary is midnight, container = deep indigo.
@@ -31695,23 +31552,11 @@
31695
31552
  $type: "fontFamily"
31696
31553
  }
31697
31554
  },
31698
- size: {
31699
- sm: { $value: "0.875rem", $type: "dimension" },
31700
- base: { $value: "1rem", $type: "dimension" },
31701
- lg: { $value: "1.125rem", $type: "dimension" },
31702
- xl: { $value: "1.25rem", $type: "dimension" },
31703
- "2xl": { $value: "1.5rem", $type: "dimension" }
31704
- },
31705
31555
  weight: {
31706
31556
  normal: { $value: "400", $type: "fontWeight" },
31707
31557
  medium: { $value: "500", $type: "fontWeight" },
31708
31558
  semibold: { $value: "600", $type: "fontWeight" },
31709
31559
  bold: { $value: "700", $type: "fontWeight" }
31710
- },
31711
- lineHeight: {
31712
- tight: { $value: "1.25", $type: "number" },
31713
- normal: { $value: "1.5", $type: "number" },
31714
- relaxed: { $value: "1.75", $type: "number" }
31715
31560
  }
31716
31561
  },
31717
31562
  spacing: {
@@ -31731,20 +31576,6 @@
31731
31576
  // round-3 "borders looking ugly" residual's shadow half), light
31732
31577
  // wants classic soft grey.
31733
31578
  motion: {
31734
- duration: {
31735
- fast: { $value: "120ms", $type: "duration" },
31736
- normal: { $value: "200ms", $type: "duration" },
31737
- slow: { $value: "400ms", $type: "duration" },
31738
- ambient: { $value: "2000ms", $type: "duration" }
31739
- },
31740
- easing: {
31741
- default: { $value: "cubic-bezier(0.4, 0, 0.2, 1)", $type: "cubicBezier" },
31742
- bounce: {
31743
- $value: "cubic-bezier(0.68, -0.55, 0.27, 1.55)",
31744
- $type: "cubicBezier"
31745
- },
31746
- spring: { $value: "cubic-bezier(0.22, 1, 0.36, 1)", $type: "cubicBezier" }
31747
- },
31748
31579
  transition: {
31749
31580
  fast: { $value: "120ms cubic-bezier(0.4, 0, 0.2, 1)", $type: "transition" },
31750
31581
  normal: { $value: "200ms cubic-bezier(0.4, 0, 0.2, 1)", $type: "transition" },
@@ -31813,7 +31644,6 @@
31813
31644
  $description: "The guuey product brand (dark) \u2014 slate-ink surfaces, slime #B8FF3A accent, DM Sans.",
31814
31645
  $metadata: {
31815
31646
  font: "DM Sans",
31816
- fontUrl: "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
31817
31647
  philosophy: "Agent-native. Slime on slate.",
31818
31648
  // Round 5 (founder-ruled): the guuey host clips the view with its
31819
31649
  // own rounded rim — the HOST owns the card silhouette; the theme
@@ -31903,11 +31733,11 @@
31903
31733
  "800": { $value: "#BFECFF", $type: "color" }
31904
31734
  },
31905
31735
  // M3 roles — portal values verbatim.
31906
- surface: { $value: "#1A1D24", $type: "color" },
31907
- onSurface: { $value: "#F6F5EE", $type: "color" },
31908
- surfaceVariant: { $value: "#242938", $type: "color" },
31909
- onSurfaceVariant: { $value: "#B7BAC4", $type: "color" },
31910
- container: { $value: "#232630", $type: "color" },
31736
+ ground: { $value: "#1A1D24", $type: "color" },
31737
+ onGround: { $value: "#F6F5EE", $type: "color" },
31738
+ sunken: { $value: "#242938", $type: "color" },
31739
+ onSunken: { $value: "#B7BAC4", $type: "color" },
31740
+ container: { $value: "#1A1D24", $type: "color" },
31911
31741
  // elevated
31912
31742
  onContainer: { $value: "#F6F5EE", $type: "color" },
31913
31743
  // Round 4 (portal stops): .14 IS the base hairline; .18 is the
@@ -32006,11 +31836,11 @@
32006
31836
  "700": { $value: "#06455D", $type: "color" },
32007
31837
  "800": { $value: "#0A3346", $type: "color" }
32008
31838
  },
32009
- surface: { $value: "#FFFFFF", $type: "color" },
32010
- onSurface: { $value: "#1A1D24", $type: "color" },
32011
- surfaceVariant: { $value: "#F6F5EE", $type: "color" },
32012
- onSurfaceVariant: { $value: "#4A4F5C", $type: "color" },
32013
- container: { $value: "#FBFAF6", $type: "color" },
31839
+ ground: { $value: "#FFFFFF", $type: "color" },
31840
+ onGround: { $value: "#1A1D24", $type: "color" },
31841
+ sunken: { $value: "#F6F5EE", $type: "color" },
31842
+ onSunken: { $value: "#4A4F5C", $type: "color" },
31843
+ container: { $value: "#FFFFFF", $type: "color" },
32014
31844
  onContainer: { $value: "#1A1D24", $type: "color" },
32015
31845
  outline: { $value: "rgba(26, 29, 36, 0.18)", $type: "color" },
32016
31846
  outlineVariant: { $value: "rgba(26, 29, 36, 0.10)", $type: "color" },
@@ -32377,6 +32207,20 @@
32377
32207
  "@ggui-ai/wire": "wire",
32378
32208
  "@ggui-ai/gadgets": "gadgets"
32379
32209
  };
32210
+ function findBareImportSpecifiers(code) {
32211
+ const out = /* @__PURE__ */ new Set();
32212
+ const re = /(?:^|[^.\w$])(?:import|from)\s*['"]([^'"]+)['"]/g;
32213
+ let m;
32214
+ while ((m = re.exec(code)) !== null) {
32215
+ const spec = m[1];
32216
+ if (spec === void 0)
32217
+ continue;
32218
+ if (/^(?:[a-z][a-z0-9+.-]*:|\.{0,2}\/)/i.test(spec))
32219
+ continue;
32220
+ out.add(spec);
32221
+ }
32222
+ return [...out];
32223
+ }
32380
32224
  function rewriteAssetUrl(code, opts) {
32381
32225
  const base = opts.shimBaseUrl.replace(/\/$/, "");
32382
32226
  for (const [specifier, shimName] of Object.entries(ASSET_SHIM_FOR_SPECIFIER)) {
@@ -32391,7 +32235,21 @@
32391
32235
  code = replaceSpecifier(code, "react", base);
32392
32236
  return code;
32393
32237
  }
32238
+ var FORBIDDEN_IMPORT_SPECIFIERS = ["@ggui-ai/wire/internal"];
32239
+ var ForbiddenImportSpecifierError = class extends Error {
32240
+ specifier;
32241
+ constructor(specifier) {
32242
+ super(`import rewriter: generated component code imported '${specifier}', which is not available to components \u2014 it is the writer side of the wire; components read \`useRender().isConnected\` and never write it`);
32243
+ this.name = "ForbiddenImportSpecifierError";
32244
+ this.specifier = specifier;
32245
+ }
32246
+ };
32394
32247
  function rewriteImports(code, options) {
32248
+ const bare = findBareImportSpecifiers(code);
32249
+ for (const specifier of FORBIDDEN_IMPORT_SPECIFIERS) {
32250
+ if (bare.includes(specifier))
32251
+ throw new ForbiddenImportSpecifierError(specifier);
32252
+ }
32395
32253
  switch (options.mode) {
32396
32254
  case "data-url":
32397
32255
  return rewriteDataUrl(code, options);