@ggui-ai/dev-stack 0.10.0 → 0.11.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.
@@ -34212,7 +34212,7 @@ config(en_default());
34212
34212
 
34213
34213
  // ../protocol/dist/gadgets/stdlib-gadgets.js
34214
34214
  var STDLIB_GADGETS_PACKAGE = "@ggui-ai/gadgets";
34215
- var STDLIB_GADGETS_VERSION = "0.10.0";
34215
+ var STDLIB_GADGETS_VERSION = "0.11.0";
34216
34216
  var STDLIB_GADGETS = [
34217
34217
  {
34218
34218
  package: STDLIB_GADGETS_PACKAGE,
@@ -43840,19 +43840,19 @@ function walkTokens(obj, prefix, out) {
43840
43840
  }
43841
43841
  }
43842
43842
  }
43843
- function buildCssVariables(theme8) {
43843
+ function buildCssVariables(theme9) {
43844
43844
  const lines = [];
43845
- walkTokens(theme8.color, "color", lines);
43846
- walkTokens(theme8.font, "font", lines);
43847
- walkTokens(theme8.spacing, "spacing", lines);
43848
- walkTokens(theme8.shape, "shape", lines);
43845
+ walkTokens(theme9.color, "color", lines);
43846
+ walkTokens(theme9.font, "font", lines);
43847
+ walkTokens(theme9.spacing, "spacing", lines);
43848
+ walkTokens(theme9.shape, "shape", lines);
43849
43849
  walkTokens({
43850
- duration: theme8.motion.duration,
43851
- easing: theme8.motion.easing,
43852
- transition: theme8.motion.transition
43850
+ duration: theme9.motion.duration,
43851
+ easing: theme9.motion.easing,
43852
+ transition: theme9.motion.transition
43853
43853
  }, "motion", lines);
43854
- walkTokens(theme8.accessibility, "accessibility", lines);
43855
- walkTokens(theme8.zIndex, "zIndex", lines);
43854
+ walkTokens(theme9.accessibility, "accessibility", lines);
43855
+ walkTokens(theme9.zIndex, "zIndex", lines);
43856
43856
  return lines.join("\n");
43857
43857
  }
43858
43858
  function expandKeyframe(name, compact) {
@@ -43869,29 +43869,29 @@ function expandKeyframe(name, compact) {
43869
43869
  ${stops.join("\n")}
43870
43870
  }`;
43871
43871
  }
43872
- function buildCssKeyframes(theme8) {
43872
+ function buildCssKeyframes(theme9) {
43873
43873
  const blocks = [];
43874
- for (const [name, token] of Object.entries(theme8.motion.keyframes)) {
43874
+ for (const [name, token] of Object.entries(theme9.motion.keyframes)) {
43875
43875
  if (name.startsWith("$"))
43876
43876
  continue;
43877
43877
  blocks.push(expandKeyframe(name, String(token.$value)));
43878
43878
  }
43879
43879
  return blocks.join("\n\n");
43880
43880
  }
43881
- function parseTheme(id, theme8) {
43882
- const cssVariablesBody = buildCssVariables(theme8);
43881
+ function parseTheme(id, theme9) {
43882
+ const cssVariablesBody = buildCssVariables(theme9);
43883
43883
  const cssVariables = `:root {
43884
43884
  ${cssVariablesBody}
43885
43885
  }`;
43886
- const cssKeyframes = buildCssKeyframes(theme8);
43886
+ const cssKeyframes = buildCssKeyframes(theme9);
43887
43887
  const css = cssKeyframes ? `${cssVariables}
43888
43888
 
43889
43889
  ${cssKeyframes}` : cssVariables;
43890
43890
  return {
43891
43891
  id,
43892
- name: theme8.$name,
43893
- description: theme8.$description,
43894
- metadata: theme8.$metadata,
43892
+ name: theme9.$name,
43893
+ description: theme9.$description,
43894
+ metadata: theme9.$metadata,
43895
43895
  cssVariables,
43896
43896
  cssKeyframes,
43897
43897
  css
@@ -46614,6 +46614,351 @@ var theme7 = {
46614
46614
  light: indigoLight,
46615
46615
  dark: indigoDark
46616
46616
  };
46617
+ var shared8 = {
46618
+ font: {
46619
+ family: {
46620
+ sans: {
46621
+ $value: '"DM Sans", system-ui, -apple-system, sans-serif',
46622
+ $type: "fontFamily"
46623
+ },
46624
+ mono: {
46625
+ $value: '"JetBrains Mono", ui-monospace, monospace',
46626
+ $type: "fontFamily"
46627
+ }
46628
+ },
46629
+ size: {
46630
+ sm: { $value: "0.875rem", $type: "dimension" },
46631
+ base: { $value: "1rem", $type: "dimension" },
46632
+ lg: { $value: "1.125rem", $type: "dimension" },
46633
+ xl: { $value: "1.25rem", $type: "dimension" },
46634
+ "2xl": { $value: "1.5rem", $type: "dimension" }
46635
+ },
46636
+ weight: {
46637
+ normal: { $value: "400", $type: "fontWeight" },
46638
+ medium: { $value: "500", $type: "fontWeight" },
46639
+ semibold: { $value: "600", $type: "fontWeight" },
46640
+ bold: { $value: "700", $type: "fontWeight" }
46641
+ },
46642
+ lineHeight: {
46643
+ tight: { $value: "1.25", $type: "number" },
46644
+ normal: { $value: "1.5", $type: "number" },
46645
+ relaxed: { $value: "1.75", $type: "number" }
46646
+ }
46647
+ },
46648
+ spacing: {
46649
+ "1": { $value: "0.25rem", $type: "dimension" },
46650
+ "2": { $value: "0.5rem", $type: "dimension" },
46651
+ "3": { $value: "0.75rem", $type: "dimension" },
46652
+ "4": { $value: "1rem", $type: "dimension" },
46653
+ "5": { $value: "1.25rem", $type: "dimension" },
46654
+ "6": { $value: "1.5rem", $type: "dimension" },
46655
+ "8": { $value: "2rem", $type: "dimension" },
46656
+ "10": { $value: "2.5rem", $type: "dimension" },
46657
+ "12": { $value: "3rem", $type: "dimension" }
46658
+ },
46659
+ // NOTE: `shape` is per-mode (round 4) — radius is shared via
46660
+ // `sharedRadius` below, but shadows split: dark wants near-none ink
46661
+ // (a visible black blob under a card on a dark surface was the
46662
+ // round-3 "borders looking ugly" residual's shadow half), light
46663
+ // wants classic soft grey.
46664
+ motion: {
46665
+ duration: {
46666
+ fast: { $value: "120ms", $type: "duration" },
46667
+ normal: { $value: "200ms", $type: "duration" },
46668
+ slow: { $value: "400ms", $type: "duration" },
46669
+ ambient: { $value: "2000ms", $type: "duration" }
46670
+ },
46671
+ easing: {
46672
+ default: { $value: "cubic-bezier(0.4, 0, 0.2, 1)", $type: "cubicBezier" },
46673
+ bounce: {
46674
+ $value: "cubic-bezier(0.68, -0.55, 0.27, 1.55)",
46675
+ $type: "cubicBezier"
46676
+ },
46677
+ spring: { $value: "cubic-bezier(0.22, 1, 0.36, 1)", $type: "cubicBezier" }
46678
+ },
46679
+ transition: {
46680
+ fast: { $value: "120ms cubic-bezier(0.4, 0, 0.2, 1)", $type: "transition" },
46681
+ normal: { $value: "200ms cubic-bezier(0.4, 0, 0.2, 1)", $type: "transition" },
46682
+ slow: { $value: "400ms cubic-bezier(0.4, 0, 0.2, 1)", $type: "transition" },
46683
+ colors: {
46684
+ $value: "color 200ms cubic-bezier(0.4, 0, 0.2, 1), background-color 200ms cubic-bezier(0.4, 0, 0.2, 1), border-color 200ms cubic-bezier(0.4, 0, 0.2, 1)",
46685
+ $type: "transition"
46686
+ },
46687
+ opacity: { $value: "opacity 200ms cubic-bezier(0.4, 0, 0.2, 1)", $type: "transition" },
46688
+ transform: { $value: "transform 200ms cubic-bezier(0.22, 1, 0.36, 1)", $type: "transition" }
46689
+ },
46690
+ keyframes: {
46691
+ "fade-in": {
46692
+ $value: "0%{opacity:0}100%{opacity:1}",
46693
+ $type: "keyframes"
46694
+ },
46695
+ "slide-up": {
46696
+ $value: "0%{opacity:0;transform:translateY(8px)}100%{opacity:1;transform:translateY(0)}",
46697
+ $type: "keyframes"
46698
+ },
46699
+ "pulse-soft": {
46700
+ $value: "0%{opacity:1}50%{opacity:0.65}100%{opacity:1}",
46701
+ $type: "keyframes"
46702
+ }
46703
+ }
46704
+ },
46705
+ accessibility: {
46706
+ focusRing: {
46707
+ color: { $value: "#B8FF3A", $type: "color" },
46708
+ width: { $value: "2px", $type: "dimension" },
46709
+ offset: { $value: "2px", $type: "dimension" }
46710
+ },
46711
+ reducedMotion: {
46712
+ duration: { $value: "0ms", $type: "duration" }
46713
+ },
46714
+ highContrast: {
46715
+ borderWidth: { $value: "2px", $type: "dimension" },
46716
+ textColor: { $value: "#FFFFFF", $type: "color" },
46717
+ backgroundColor: { $value: "#000000", $type: "color" },
46718
+ linkColor: { $value: "#CCFF66", $type: "color" }
46719
+ }
46720
+ },
46721
+ zIndex: standardZIndex
46722
+ };
46723
+ var sharedRadius = {
46724
+ sm: { $value: "0.375rem", $type: "dimension" },
46725
+ md: { $value: "0.5rem", $type: "dimension" },
46726
+ lg: { $value: "0.75rem", $type: "dimension" },
46727
+ xl: { $value: "1rem", $type: "dimension" },
46728
+ full: { $value: "9999px", $type: "dimension" }
46729
+ };
46730
+ var darkShadows = {
46731
+ sm: { $value: "0 1px 2px rgba(0, 0, 0, 0.2)", $type: "shadow" },
46732
+ md: { $value: "0 2px 8px rgba(0, 0, 0, 0.25)", $type: "shadow" },
46733
+ lg: { $value: "0 6px 16px rgba(0, 0, 0, 0.28)", $type: "shadow" },
46734
+ xl: { $value: "0 10px 24px rgba(0, 0, 0, 0.3)", $type: "shadow" }
46735
+ };
46736
+ var lightShadows = {
46737
+ sm: { $value: "0 1px 2px rgba(26, 29, 36, 0.06)", $type: "shadow" },
46738
+ md: { $value: "0 2px 8px rgba(26, 29, 36, 0.08)", $type: "shadow" },
46739
+ lg: { $value: "0 6px 16px rgba(26, 29, 36, 0.1)", $type: "shadow" },
46740
+ xl: { $value: "0 12px 28px rgba(26, 29, 36, 0.12)", $type: "shadow" }
46741
+ };
46742
+ var guueyBrandDark = {
46743
+ $name: "guuey-brand-v1",
46744
+ $description: "The guuey product brand (dark) \u2014 slate-ink surfaces, slime #B8FF3A accent, DM Sans.",
46745
+ $metadata: {
46746
+ font: "DM Sans",
46747
+ fontUrl: "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
46748
+ philosophy: "Agent-native. Slime on slate.",
46749
+ // Round 5 (founder-ruled): the guuey host clips the view with its
46750
+ // own rounded rim — the HOST owns the card silhouette; the theme
46751
+ // paints no border on the root layer. Inner hairlines stay.
46752
+ frameless: true
46753
+ },
46754
+ color: {
46755
+ // Inverted dark ladder — 50 darkest, 900 lightest; slime pinned at
46756
+ // 500, the portal's lifted #CCFF66 at the hover stop (600).
46757
+ primary: {
46758
+ "50": { $value: "#141D05", $type: "color" },
46759
+ "100": { $value: "#28390B", $type: "color" },
46760
+ "200": { $value: "#3F5A11", $type: "color" },
46761
+ "300": { $value: "#5F8719", $type: "color" },
46762
+ "400": { $value: "#8CC627", $type: "color" },
46763
+ "500": { $value: "#B8FF3A", $type: "color" },
46764
+ // slime (brand)
46765
+ "600": { $value: "#CCFF66", $type: "color" },
46766
+ // lifted hover (portal)
46767
+ "700": { $value: "#DBFF8F", $type: "color" },
46768
+ // pressed / emphasized
46769
+ "800": { $value: "#E9FFB8", $type: "color" },
46770
+ "900": { $value: "#F6FFE0", $type: "color" }
46771
+ },
46772
+ // Slate-ink foundation from the portal surface family: sunken →
46773
+ // surface → elevated → surfaceVariant, then up through the greys
46774
+ // to paper (#F6F5EE).
46775
+ neutral: {
46776
+ "50": { $value: "#0E1014", $type: "color" },
46777
+ // sunken
46778
+ "100": { $value: "#1A1D24", $type: "color" },
46779
+ // surface
46780
+ "200": { $value: "#232630", $type: "color" },
46781
+ // elevated
46782
+ "300": { $value: "#242938", $type: "color" },
46783
+ // surfaceVariant
46784
+ "400": { $value: "#3B4152", $type: "color" },
46785
+ "500": { $value: "#878C99", $type: "color" },
46786
+ // hint text
46787
+ "600": { $value: "#B7BAC4", $type: "color" },
46788
+ // secondary text
46789
+ "700": { $value: "#D5D6DC", $type: "color" },
46790
+ "800": { $value: "#E8E7E2", $type: "color" },
46791
+ "900": { $value: "#F6F5EE", $type: "color" }
46792
+ // paper (text)
46793
+ },
46794
+ // BRAND RULE: success IS slime — never green. Same family as
46795
+ // primary so an "Available" pill and a slime CTA read as one brand.
46796
+ success: {
46797
+ "50": { $value: "#141D05", $type: "color" },
46798
+ "100": { $value: "#28390B", $type: "color" },
46799
+ "200": { $value: "#3F5A11", $type: "color" },
46800
+ "500": { $value: "#B8FF3A", $type: "color" },
46801
+ // slime (brand rule)
46802
+ "600": { $value: "#CCFF66", $type: "color" },
46803
+ "700": { $value: "#DBFF8F", $type: "color" },
46804
+ "800": { $value: "#E9FFB8", $type: "color" }
46805
+ },
46806
+ warning: {
46807
+ "50": { $value: "#33240A", $type: "color" },
46808
+ "100": { $value: "#5C420F", $type: "color" },
46809
+ "200": { $value: "#8A6318", $type: "color" },
46810
+ "500": { $value: "#FFB020", $type: "color" },
46811
+ // portal warning
46812
+ "600": { $value: "#FFC24D", $type: "color" },
46813
+ "700": { $value: "#FFD37D", $type: "color" },
46814
+ "800": { $value: "#FFE5AE", $type: "color" }
46815
+ },
46816
+ error: {
46817
+ "50": { $value: "#33110E", $type: "color" },
46818
+ "100": { $value: "#5E1F1B", $type: "color" },
46819
+ "200": { $value: "#8F2F2A", $type: "color" },
46820
+ "500": { $value: "#FF5B5B", $type: "color" },
46821
+ // portal error
46822
+ "600": { $value: "#FF7D7A", $type: "color" },
46823
+ "700": { $value: "#FF9F9C", $type: "color" },
46824
+ "800": { $value: "#FFC3C0", $type: "color" }
46825
+ },
46826
+ info: {
46827
+ "50": { $value: "#0A2733", $type: "color" },
46828
+ "100": { $value: "#12455C", $type: "color" },
46829
+ "200": { $value: "#1E6A8A", $type: "color" },
46830
+ "500": { $value: "#3AC8FF", $type: "color" },
46831
+ // portal info
46832
+ "600": { $value: "#66D4FF", $type: "color" },
46833
+ "700": { $value: "#92E0FF", $type: "color" },
46834
+ "800": { $value: "#BFECFF", $type: "color" }
46835
+ },
46836
+ // M3 roles — portal values verbatim.
46837
+ surface: { $value: "#1A1D24", $type: "color" },
46838
+ onSurface: { $value: "#F6F5EE", $type: "color" },
46839
+ surfaceVariant: { $value: "#242938", $type: "color" },
46840
+ onSurfaceVariant: { $value: "#B7BAC4", $type: "color" },
46841
+ container: { $value: "#232630", $type: "color" },
46842
+ // elevated
46843
+ onContainer: { $value: "#F6F5EE", $type: "color" },
46844
+ // Round 4 (portal stops): .14 IS the base hairline; .18 is the
46845
+ // STRONG stop (no DtcgTheme slot — strong/interactive strokes
46846
+ // ride primary borders + the slime focusRing, receipted by the
46847
+ // Select button). Dividers sit softer still.
46848
+ outline: { $value: "rgba(246, 245, 238, 0.14)", $type: "color" },
46849
+ outlineVariant: { $value: "rgba(246, 245, 238, 0.1)", $type: "color" },
46850
+ onPrimary: { $value: "#0E1014", $type: "color" },
46851
+ // ink on slime
46852
+ primaryContainer: { $value: "#242938", $type: "color" },
46853
+ // portal
46854
+ onPrimaryContainer: { $value: "#CCFF66", $type: "color" },
46855
+ // portal
46856
+ onError: { $value: "#33110E", $type: "color" },
46857
+ errorContainer: { $value: "#5E1F1B", $type: "color" },
46858
+ onErrorContainer: { $value: "#FFC3C0", $type: "color" },
46859
+ // Pink accent — the portal's tertiary. (Purple #9B6AFF has no
46860
+ // DtcgTheme slot; see the file docstring.)
46861
+ tertiary: { $value: "#FF4FB0", $type: "color" },
46862
+ onTertiary: { $value: "#0E1014", $type: "color" },
46863
+ tertiaryContainer: { $value: "#451A35", $type: "color" },
46864
+ onTertiaryContainer: { $value: "#FFC1E4", $type: "color" }
46865
+ },
46866
+ ...shared8,
46867
+ shape: { radius: sharedRadius, shadow: darkShadows }
46868
+ };
46869
+ var guueyBrandLight = {
46870
+ $name: "guuey-brand-v1",
46871
+ $description: "The guuey product brand (light, provisional) \u2014 paper surfaces, slime accent held for fills, darkened slime for text emphasis.",
46872
+ $metadata: guueyBrandDark.$metadata,
46873
+ color: {
46874
+ // Normal (non-inverted) ramps; slime stays the 500 fill anchor,
46875
+ // text-emphasis stops (600/700) darken for contrast on paper.
46876
+ primary: {
46877
+ "50": { $value: "#F6FFE0", $type: "color" },
46878
+ "100": { $value: "#E9FFB8", $type: "color" },
46879
+ "200": { $value: "#DBFF8F", $type: "color" },
46880
+ "300": { $value: "#CCFF66", $type: "color" },
46881
+ "400": { $value: "#B8FF3A", $type: "color" },
46882
+ "500": { $value: "#9FE01C", $type: "color" },
46883
+ "600": { $value: "#7DB214", $type: "color" },
46884
+ "700": { $value: "#5C850D", $type: "color" },
46885
+ "800": { $value: "#3F5A11", $type: "color" },
46886
+ "900": { $value: "#28390B", $type: "color" }
46887
+ },
46888
+ neutral: {
46889
+ "50": { $value: "#FBFAF6", $type: "color" },
46890
+ "100": { $value: "#F6F5EE", $type: "color" },
46891
+ "200": { $value: "#E8E7E2", $type: "color" },
46892
+ "300": { $value: "#D5D6DC", $type: "color" },
46893
+ "400": { $value: "#B7BAC4", $type: "color" },
46894
+ "500": { $value: "#6E7380", $type: "color" },
46895
+ "600": { $value: "#4A4F5C", $type: "color" },
46896
+ "700": { $value: "#333846", $type: "color" },
46897
+ "800": { $value: "#242938", $type: "color" },
46898
+ "900": { $value: "#1A1D24", $type: "color" }
46899
+ },
46900
+ success: {
46901
+ "50": { $value: "#F6FFE0", $type: "color" },
46902
+ "100": { $value: "#E9FFB8", $type: "color" },
46903
+ "200": { $value: "#DBFF8F", $type: "color" },
46904
+ "500": { $value: "#7DB214", $type: "color" },
46905
+ "600": { $value: "#5C850D", $type: "color" },
46906
+ "700": { $value: "#476809", $type: "color" },
46907
+ "800": { $value: "#28390B", $type: "color" }
46908
+ },
46909
+ warning: {
46910
+ "50": { $value: "#FFF4DD", $type: "color" },
46911
+ "100": { $value: "#FFE5AE", $type: "color" },
46912
+ "200": { $value: "#FFD37D", $type: "color" },
46913
+ "500": { $value: "#D98A0A", $type: "color" },
46914
+ "600": { $value: "#A96A06", $type: "color" },
46915
+ "700": { $value: "#7C4D04", $type: "color" },
46916
+ "800": { $value: "#523203", $type: "color" }
46917
+ },
46918
+ error: {
46919
+ "50": { $value: "#FFE9E8", $type: "color" },
46920
+ "100": { $value: "#FFC3C0", $type: "color" },
46921
+ "200": { $value: "#FF9F9C", $type: "color" },
46922
+ "500": { $value: "#E23B3B", $type: "color" },
46923
+ "600": { $value: "#B62C2C", $type: "color" },
46924
+ "700": { $value: "#8A1F1F", $type: "color" },
46925
+ "800": { $value: "#5E1F1B", $type: "color" }
46926
+ },
46927
+ info: {
46928
+ "50": { $value: "#E5F7FF", $type: "color" },
46929
+ "100": { $value: "#BFECFF", $type: "color" },
46930
+ "200": { $value: "#92E0FF", $type: "color" },
46931
+ "500": { $value: "#0E93C9", $type: "color" },
46932
+ "600": { $value: "#0B739E", $type: "color" },
46933
+ "700": { $value: "#085572", $type: "color" },
46934
+ "800": { $value: "#12455C", $type: "color" }
46935
+ },
46936
+ surface: { $value: "#FFFFFF", $type: "color" },
46937
+ onSurface: { $value: "#1A1D24", $type: "color" },
46938
+ surfaceVariant: { $value: "#F6F5EE", $type: "color" },
46939
+ onSurfaceVariant: { $value: "#4A4F5C", $type: "color" },
46940
+ container: { $value: "#FBFAF6", $type: "color" },
46941
+ onContainer: { $value: "#1A1D24", $type: "color" },
46942
+ outline: { $value: "rgba(26, 29, 36, 0.18)", $type: "color" },
46943
+ outlineVariant: { $value: "rgba(26, 29, 36, 0.10)", $type: "color" },
46944
+ onPrimary: { $value: "#0E1014", $type: "color" },
46945
+ primaryContainer: { $value: "#E9FFB8", $type: "color" },
46946
+ onPrimaryContainer: { $value: "#28390B", $type: "color" },
46947
+ onError: { $value: "#FFFFFF", $type: "color" },
46948
+ errorContainer: { $value: "#FFE9E8", $type: "color" },
46949
+ onErrorContainer: { $value: "#8A1F1F", $type: "color" },
46950
+ tertiary: { $value: "#D6247F", $type: "color" },
46951
+ onTertiary: { $value: "#FFFFFF", $type: "color" },
46952
+ tertiaryContainer: { $value: "#FFDCEE", $type: "color" },
46953
+ onTertiaryContainer: { $value: "#6B1240", $type: "color" }
46954
+ },
46955
+ ...shared8,
46956
+ shape: { radius: sharedRadius, shadow: lightShadows }
46957
+ };
46958
+ var theme8 = {
46959
+ light: guueyBrandLight,
46960
+ dark: guueyBrandDark
46961
+ };
46617
46962
  var themes = /* @__PURE__ */ new Map([
46618
46963
  ["ggui", theme],
46619
46964
  ["indigo", theme7],
@@ -46621,7 +46966,11 @@ var themes = /* @__PURE__ */ new Map([
46621
46966
  ["premium-cyberpunk", theme2],
46622
46967
  ["premium-zen", theme3],
46623
46968
  ["premium-neon-noir", theme4],
46624
- ["premium-botanical", theme5]
46969
+ ["premium-botanical", theme5],
46970
+ // Registered under the EXACT AppTheme.name the guuey widget stamps,
46971
+ // so the runtime's theme-name→registry binding (ggui#589 ask 3)
46972
+ // selects it as the base ladder with no sender-side change.
46973
+ ["guuey-brand-v1", theme8]
46625
46974
  ]);
46626
46975
  var parsedCache = /* @__PURE__ */ new Map();
46627
46976
  function resolveMode(reg, requested) {
@@ -46723,27 +47072,29 @@ function getScopedCssTokens(scopeClass, mode = "light") {
46723
47072
  return getScopedThemeCss(getDefaultThemeId(), scopeClass, mode);
46724
47073
  }
46725
47074
  function getScopedThemeCss(themeId, scopeClass, mode = "light") {
46726
- const theme8 = getTheme(themeId, mode);
46727
- if (!theme8) {
47075
+ const theme9 = getTheme(themeId, mode);
47076
+ if (!theme9) {
46728
47077
  const defaultId = getDefaultThemeId();
46729
47078
  if (themeId === defaultId)
46730
47079
  return "";
46731
47080
  return getScopedThemeCss(defaultId, scopeClass, mode);
46732
47081
  }
46733
- const primary500 = resolvePrimary500Hex(theme8.cssVariables);
46734
- const scoped = withColorMixFallback(theme8.cssVariables.replace(/^:root\s*\{/, `.${scopeClass} {`), `.${scopeClass}`, primary500);
47082
+ const primary500 = resolvePrimary500Hex(theme9.cssVariables);
47083
+ const scoped = withColorMixFallback(theme9.cssVariables.replace(/^:root\s*\{/, `.${scopeClass} {`), `.${scopeClass}`, primary500);
46735
47084
  const baseInherits = `.${scopeClass} {
46736
47085
  font-family: var(--ggui-font-family-sans);
46737
47086
  color: var(--ggui-color-onSurface);
46738
47087
  background-color: transparent;
46739
47088
  }`;
46740
47089
  const gradientTokens = buildGradientTokens(scopeClass, primary500);
47090
+ const framelessRule = theme9.metadata?.frameless === true ? `
47091
+ .${scopeClass} > :where(:not(style)) { border: none !important; }` : "";
46741
47092
  return `${scoped}
46742
47093
  ${baseInherits}
46743
47094
  ${gradientTokens}
46744
- ${theme8.cssKeyframes}
47095
+ ${theme9.cssKeyframes}
46745
47096
  .${scopeClass} *, .${scopeClass} *::before, .${scopeClass} *::after { box-sizing: border-box; }
46746
- .${scopeClass} h1, .${scopeClass} h2, .${scopeClass} h3, .${scopeClass} h4, .${scopeClass} h5, .${scopeClass} h6, .${scopeClass} button, .${scopeClass} input, .${scopeClass} textarea, .${scopeClass} select { font-family: inherit; }`;
47097
+ .${scopeClass} h1, .${scopeClass} h2, .${scopeClass} h3, .${scopeClass} h4, .${scopeClass} h5, .${scopeClass} h6, .${scopeClass} button, .${scopeClass} input, .${scopeClass} textarea, .${scopeClass} select { font-family: inherit; }${framelessRule}`;
46747
47098
  }
46748
47099
  function buildGradientTokens(scopeClass, primary500Hex) {
46749
47100
  const selector = `.${scopeClass}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ggui-ai/dev-stack",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Shared local dev engine for the ggui protocol: local UI registry discovery, compile-on-demand, filesystem watcher with SSE, and a read-only HTTP surface for dev tooling. Framework-neutral — agent runtime supervision plugs in via an adapter seam, so no agent SDK is hardcoded.",
5
5
  "keywords": [
6
6
  "ggui",
@@ -28,9 +28,9 @@
28
28
  "dependencies": {
29
29
  "chokidar": "^4.0.3",
30
30
  "esbuild": "^0.25.12",
31
- "@ggui-ai/project-config": "0.10.0",
32
- "@ggui-ai/agent-runtime": "0.10.0",
33
- "@ggui-ai/ui-registry": "0.10.0"
31
+ "@ggui-ai/agent-runtime": "0.11.0",
32
+ "@ggui-ai/ui-registry": "0.11.0",
33
+ "@ggui-ai/project-config": "0.11.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^24.0.0",
@@ -40,9 +40,9 @@
40
40
  "react-dom": "^19.0.0",
41
41
  "typescript": "^5.0.0",
42
42
  "vitest": "^3.2.6",
43
- "@ggui-ai/mcp-apps-react": "0.10.0",
44
- "@ggui-ai/design": "0.10.0",
45
- "@ggui-ai/wire": "0.10.0"
43
+ "@ggui-ai/design": "0.11.0",
44
+ "@ggui-ai/mcp-apps-react": "0.11.0",
45
+ "@ggui-ai/wire": "0.11.0"
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",