@ggui-ai/dev-stack 0.20.0 → 0.21.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.
@@ -21587,14 +21587,29 @@ var easing = {
21587
21587
  easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)",
21588
21588
  spring: "cubic-bezier(0.175, 0.885, 0.32, 1.275)"
21589
21589
  };
21590
+ var motionVar = {
21591
+ duration: {
21592
+ fast: "var(--ggui-motion-duration-fast)",
21593
+ base: "var(--ggui-motion-duration-base)",
21594
+ slow: "var(--ggui-motion-duration-slow)"
21595
+ },
21596
+ easing: {
21597
+ /** The system's ease-in-out — the default for colour, border and size changes. */
21598
+ standard: "var(--ggui-motion-easing-standard)",
21599
+ /** The decelerating arrival — transforms and entrances. */
21600
+ emphasized: "var(--ggui-motion-easing-emphasized)",
21601
+ /** The accelerating departure. */
21602
+ exit: "var(--ggui-motion-easing-exit)"
21603
+ }
21604
+ };
21590
21605
  var transition = {
21591
21606
  none: "none",
21592
- fast: `${duration.fast} ${easing.easeInOut}`,
21593
- normal: `${duration.normal} ${easing.easeInOut}`,
21594
- slow: `${duration.slow} ${easing.easeInOut}`,
21595
- colors: `color ${duration.normal} ${easing.easeInOut}, background-color ${duration.normal} ${easing.easeInOut}, border-color ${duration.normal} ${easing.easeInOut}`,
21596
- opacity: `opacity ${duration.normal} ${easing.easeInOut}`,
21597
- transform: `transform ${duration.normal} ${easing.easeOut}`
21607
+ fast: `${motionVar.duration.fast} ${motionVar.easing.standard}`,
21608
+ normal: `${motionVar.duration.base} ${motionVar.easing.standard}`,
21609
+ slow: `${motionVar.duration.slow} ${motionVar.easing.standard}`,
21610
+ colors: `color ${motionVar.duration.base} ${motionVar.easing.standard}, background-color ${motionVar.duration.base} ${motionVar.easing.standard}, border-color ${motionVar.duration.base} ${motionVar.easing.standard}`,
21611
+ opacity: `opacity ${motionVar.duration.base} ${motionVar.easing.standard}`,
21612
+ transform: `transform ${motionVar.duration.base} ${motionVar.easing.emphasized}`
21598
21613
  };
21599
21614
  var sizeStyles = {
21600
21615
  xs: {
@@ -21668,7 +21683,7 @@ function Button({ children, variant = "primary", size = "md", fullWidth, loading
21668
21683
  cursor: isDisabled ? "not-allowed" : "pointer",
21669
21684
  opacity: isDisabled ? 0.5 : 1,
21670
21685
  width: fullWidth ? "100%" : void 0,
21671
- transition: `background-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}, opacity ${duration.normal} ${easing.easeInOut}`,
21686
+ transition: `background-color ${motionVar.duration.base} ${motionVar.easing.standard}, box-shadow ${motionVar.duration.base} ${motionVar.easing.standard}, opacity ${motionVar.duration.base} ${motionVar.easing.standard}`,
21672
21687
  boxShadow: "var(--ggui-shape-shadow-sm, 0 1px 2px rgba(0,0,0,0.05))",
21673
21688
  ...style
21674
21689
  }, ...rest, children: loading ? (0, import_jsx_runtime9.jsx)(Spinner, { size: 16, tone: "inherit" }) : (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [leftIcon, children, rightIcon] }) });
@@ -21709,7 +21724,7 @@ function Input({ label, placeholder, value, onChange, type = "text", error, help
21709
21724
  border: `1px solid ${hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-outline, #d4d4d8)"}`,
21710
21725
  backgroundColor: disabled ? "var(--ggui-color-sunken, #fafafa)" : "var(--ggui-color-sunken, #ffffff)",
21711
21726
  color: "var(--ggui-color-onContainer, #18181b)",
21712
- transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`,
21727
+ transition: `border-color ${motionVar.duration.base} ${motionVar.easing.standard}, box-shadow ${motionVar.duration.base} ${motionVar.easing.standard}`,
21713
21728
  boxSizing: "border-box"
21714
21729
  }, ...rest }), hasMessage && (0, import_jsx_runtime11.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
21715
21730
  fontSize: "var(--ggui-font-size-xs, 12px)",
@@ -21741,7 +21756,7 @@ function TextArea({ label, placeholder, value, onChange, rows = 4, error, helper
21741
21756
  color: "var(--ggui-color-onContainer, #18181b)",
21742
21757
  fontSize: "var(--ggui-font-size-sm, 14px)",
21743
21758
  fontFamily: "inherit",
21744
- transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`,
21759
+ transition: `border-color ${motionVar.duration.base} ${motionVar.easing.standard}, box-shadow ${motionVar.duration.base} ${motionVar.easing.standard}`,
21745
21760
  boxSizing: "border-box",
21746
21761
  resize: autoResize ? "none" : "vertical"
21747
21762
  }, ...rest }), (0, import_jsx_runtime12.jsxs)("div", { style: { display: "flex", justifyContent: "space-between" }, children: [hasMessage && (0, import_jsx_runtime12.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
@@ -21782,7 +21797,7 @@ function Select({ label, value, onChange, options, placeholder, error, helperTex
21782
21797
  backgroundPosition: "right 12px center",
21783
21798
  paddingRight: "36px",
21784
21799
  boxSizing: "border-box",
21785
- transition: `border-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`
21800
+ transition: `border-color ${motionVar.duration.base} ${motionVar.easing.standard}, box-shadow ${motionVar.duration.base} ${motionVar.easing.standard}`
21786
21801
  }, ...rest, children: [placeholder && (0, import_jsx_runtime13.jsx)("option", { value: "", disabled: true, children: placeholder }), options.map((opt) => (0, import_jsx_runtime13.jsx)("option", { value: opt.value, disabled: opt.disabled, children: opt.label }, opt.value))] }), hasMessage && (0, import_jsx_runtime13.jsx)("span", { id: messageId, role: hasError ? "alert" : void 0, style: {
21787
21802
  fontSize: "var(--ggui-font-size-xs, 12px)",
21788
21803
  color: hasError ? "var(--ggui-color-error-500, #ef4444)" : "var(--ggui-color-onSunken, #52525b)"
@@ -21821,7 +21836,7 @@ function Checkbox({ label, checked, onChange, disabled, description, indetermina
21821
21836
  display: "flex",
21822
21837
  alignItems: "center",
21823
21838
  justifyContent: "center",
21824
- transition: "all 0.2s"
21839
+ transition: `all ${motionVar.duration.base} ${motionVar.easing.standard}`
21825
21840
  }, children: (checked || indeterminate) && (0, import_jsx_runtime14.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_runtime14.jsx)("path", { d: "M2.5 6H9.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) : (0, import_jsx_runtime14.jsx)("path", { d: "M2.5 6L5 8.5L9.5 3.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }), (label || description) && (0, import_jsx_runtime14.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "2px" }, children: [label && (0, import_jsx_runtime14.jsx)("span", { style: {
21826
21841
  fontSize: "var(--ggui-font-size-sm, 14px)",
21827
21842
  fontWeight: "var(--ggui-font-weight-medium, 500)",
@@ -21859,7 +21874,7 @@ function Toggle({ label, checked, onChange, disabled, size = "md", style, classN
21859
21874
  borderRadius: "9999px",
21860
21875
  backgroundColor: checked ? "var(--ggui-color-primary-600, #0284c7)" : "var(--ggui-color-outline, #d4d4d8)",
21861
21876
  position: "relative",
21862
- transition: `background-color ${duration.normal} ${easing.easeInOut}, box-shadow ${duration.normal} ${easing.easeInOut}`,
21877
+ transition: `background-color ${motionVar.duration.base} ${motionVar.easing.standard}, box-shadow ${motionVar.duration.base} ${motionVar.easing.standard}`,
21863
21878
  flexShrink: 0,
21864
21879
  outline: "none",
21865
21880
  boxShadow: focused ? "0 0 0 3px var(--ggui-color-primary-200, #bae6fd)" : void 0
@@ -21871,7 +21886,7 @@ function Toggle({ label, checked, onChange, disabled, size = "md", style, classN
21871
21886
  position: "absolute",
21872
21887
  top: (config.height - config.knob) / 2,
21873
21888
  left: checked ? config.width - config.knob - (config.height - config.knob) / 2 : (config.height - config.knob) / 2,
21874
- transition: `left ${duration.normal} ${easing.easeInOut}`,
21889
+ transition: `left ${motionVar.duration.base} ${motionVar.easing.standard}`,
21875
21890
  boxShadow: "var(--ggui-shape-shadow-sm, 0 1px 2px rgba(0,0,0,0.05))"
21876
21891
  } }) }), label && (0, import_jsx_runtime15.jsx)("span", { style: {
21877
21892
  fontSize: "var(--ggui-font-size-sm, 14px)",
@@ -21925,7 +21940,7 @@ function RadioGroup({ label, value, onChange, options, direction = "vertical", d
21925
21940
  display: "flex",
21926
21941
  alignItems: "center",
21927
21942
  justifyContent: "center",
21928
- transition: "all 0.2s"
21943
+ transition: `all ${motionVar.duration.base} ${motionVar.easing.standard}`
21929
21944
  }, children: isSelected && (0, import_jsx_runtime16.jsx)("div", { style: {
21930
21945
  width: "8px",
21931
21946
  height: "8px",
@@ -21969,7 +21984,7 @@ function Slider({ label, value = 0, onChange, min = 0, max = 100, step = 1, disa
21969
21984
  height: "6px",
21970
21985
  borderRadius: "3px",
21971
21986
  backgroundColor: disabled ? "var(--ggui-color-outline, #d4d4d8)" : "var(--ggui-color-primary-600, #0284c7)",
21972
- transition: "width 0.1s"
21987
+ transition: `width ${motionVar.duration.fast} ${motionVar.easing.standard}`
21973
21988
  } }), (0, import_jsx_runtime17.jsx)("input", { id: sliderId, type: "range", min, max, step, value, onChange: (e) => onChange?.(Number(e.target.value)), disabled, "aria-labelledby": label ? labelId : void 0, "aria-label": label ? void 0 : "Slider", "aria-valuenow": value, "aria-valuemin": min, "aria-valuemax": max, style: {
21974
21989
  position: "absolute",
21975
21990
  width: "100%",
@@ -21987,7 +22002,7 @@ function Slider({ label, value = 0, onChange, min = 0, max = 100, step = 1, disa
21987
22002
  backgroundColor: "#ffffff",
21988
22003
  border: `2px solid ${disabled ? "var(--ggui-color-outline, #d4d4d8)" : "var(--ggui-color-primary-600, #0284c7)"}`,
21989
22004
  boxShadow: "var(--ggui-shape-shadow-sm, 0 1px 2px rgba(0,0,0,0.05))",
21990
- transition: "left 0.1s",
22005
+ transition: `left ${motionVar.duration.fast} ${motionVar.easing.standard}`,
21991
22006
  pointerEvents: "none"
21992
22007
  } })] })] });
21993
22008
  }
@@ -22199,7 +22214,7 @@ function Progress({ value, max = 100, variant = "default", size = "md", label, s
22199
22214
  height: "100%",
22200
22215
  borderRadius: height / 2,
22201
22216
  backgroundColor: barColor,
22202
- transition: indeterminate ? "none" : "width 0.3s ease",
22217
+ transition: indeterminate ? "none" : `width ${motionVar.duration.slow} ${motionVar.easing.standard}`,
22203
22218
  ...indeterminate ? {
22204
22219
  width: "30%",
22205
22220
  animation: "ggui-progress-indeterminate 1.5s ease-in-out infinite"
@@ -26816,7 +26831,7 @@ function Link({ children, href, external, tone, underline = "hover", style, clas
26816
26831
  color: linkColor,
26817
26832
  textDecoration: underlineStyle,
26818
26833
  cursor: "pointer",
26819
- transition: "color 0.2s",
26834
+ transition: `color ${motionVar.duration.base} ${motionVar.easing.standard}`,
26820
26835
  ...style
26821
26836
  }, onMouseEnter: (e) => {
26822
26837
  if (underline === "hover") {
@@ -26968,7 +26983,7 @@ function Table({ columns, data, sortKey, sortDirection = "asc", onSort, striped
26968
26983
  cursor: col.sortable ? "pointer" : "default"
26969
26984
  }, children: (0, import_jsx_runtime27.jsxs)("span", { style: { display: "inline-flex", alignItems: "center" }, children: [col.header, col.sortable && sortIndicator(sortKey === col.key, sortDirection)] }) }, col.key)) }) }), (0, import_jsx_runtime27.jsx)("tbody", { children: data.map((row, rowIndex) => (0, import_jsx_runtime27.jsx)("tr", { onMouseEnter: hoverable ? () => setHoveredRow(rowIndex) : void 0, onMouseLeave: hoverable ? () => setHoveredRow(null) : void 0, style: {
26970
26985
  backgroundColor: hoverable && hoveredRow === rowIndex ? "var(--ggui-color-sunken, #fafafa)" : striped && rowIndex % 2 === 1 ? "var(--ggui-color-sunken, #fafafa)" : "transparent",
26971
- transition: "background-color 0.15s ease"
26986
+ transition: `background-color ${motionVar.duration.fast} ${motionVar.easing.standard}`
26972
26987
  }, children: columns.map((col) => (0, import_jsx_runtime27.jsx)("td", { style: {
26973
26988
  padding: cellPadding,
26974
26989
  textAlign: col.align || "left",
@@ -27038,7 +27053,7 @@ function Tabs({ items, activeKey, onChange, variant = "line", size = "md", fullW
27038
27053
  background: "none",
27039
27054
  border: "none",
27040
27055
  fontWeight: isActive ? "var(--ggui-font-weight-semibold, 600)" : "var(--ggui-font-weight-medium, 500)",
27041
- transition: `color ${duration.normal} ${easing.easeInOut}, background-color ${duration.normal} ${easing.easeInOut}, border-color ${duration.normal} ${easing.easeInOut}`,
27056
+ transition: `color ${motionVar.duration.base} ${motionVar.easing.standard}, background-color ${motionVar.duration.base} ${motionVar.easing.standard}, border-color ${motionVar.duration.base} ${motionVar.easing.standard}`,
27042
27057
  whiteSpace: "nowrap",
27043
27058
  flex: fullWidth ? 1 : void 0,
27044
27059
  justifyContent: fullWidth ? "center" : void 0
@@ -27320,7 +27335,7 @@ function Toast({ message, variant = "info", title, duration: duration2 = 5e3, on
27320
27335
  }, children: (0, import_jsx_runtime29.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "currentColor", children: (0, import_jsx_runtime29.jsx)("path", { fillRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z", clipRule: "evenodd" }) }) })] });
27321
27336
  }
27322
27337
  var chevron = (expanded) => (0, import_jsx_runtime30.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", style: {
27323
- transition: `transform ${duration.normal} ${easing.easeInOut}`,
27338
+ transition: `transform ${motionVar.duration.base} ${motionVar.easing.standard}`,
27324
27339
  transform: expanded ? "rotate(180deg)" : "rotate(0deg)",
27325
27340
  flexShrink: 0
27326
27341
  }, children: (0, import_jsx_runtime30.jsx)("path", { fillRule: "evenodd", d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z", clipRule: "evenodd" }) });
@@ -27393,7 +27408,7 @@ function Accordion({ items, expandedKeys, onChange, multiple = false, variant =
27393
27408
  fontWeight: "var(--ggui-font-weight-medium, 500)",
27394
27409
  color: "var(--ggui-color-onContainer, #18181b)",
27395
27410
  textAlign: "left",
27396
- transition: `background-color ${duration.fast} ${easing.easeInOut}`
27411
+ transition: `background-color ${motionVar.duration.fast} ${motionVar.easing.standard}`
27397
27412
  }, children: [(0, import_jsx_runtime30.jsx)("span", { children: item.title }), chevron(isExpanded)] }) }), (0, import_jsx_runtime30.jsx)("div", { id: `${uniqueId}-panel-${item.key}`, role: "region", "aria-labelledby": `${uniqueId}-header-${item.key}`, hidden: !isExpanded, style: {
27398
27413
  overflow: "hidden"
27399
27414
  }, children: isExpanded && (0, import_jsx_runtime30.jsx)("div", { style: {
@@ -27552,7 +27567,7 @@ function MenuItem({ label, icon, rightElement, onClick, disabled, active, danger
27552
27567
  fontWeight: active ? fontWeight.medium : fontWeight.normal,
27553
27568
  textAlign: "left",
27554
27569
  cursor: disabled ? "not-allowed" : "pointer",
27555
- transition: "background-color 0.15s",
27570
+ transition: `background-color ${motionVar.duration.fast} ${motionVar.easing.standard}`,
27556
27571
  ...style
27557
27572
  }, onMouseEnter: (e) => {
27558
27573
  if (!disabled && !active) {
@@ -27852,7 +27867,7 @@ function Pagination({ currentPage, totalPages, onPageChange, showFirstLast = tru
27852
27867
  fontWeight: active ? fontWeight.medium : fontWeight.normal,
27853
27868
  cursor: disabled ? "not-allowed" : "pointer",
27854
27869
  opacity: disabled ? 0.5 : 1,
27855
- transition: "all 0.15s"
27870
+ transition: `all ${motionVar.duration.fast} ${motionVar.easing.standard}`
27856
27871
  }, children: page });
27857
27872
  return (0, import_jsx_runtime38.jsxs)("nav", { "aria-label": "Pagination", className, style: {
27858
27873
  display: "flex",
@@ -27911,7 +27926,7 @@ function Marker({ index, state }) {
27911
27926
  justifyContent: "center",
27912
27927
  flexShrink: 0,
27913
27928
  boxSizing: "border-box",
27914
- transition: "background-color 0.2s, border-color 0.2s, color 0.2s",
27929
+ transition: `background-color ${motionVar.duration.base} ${motionVar.easing.standard}, border-color ${motionVar.duration.base} ${motionVar.easing.standard}, color ${motionVar.duration.base} ${motionVar.easing.standard}`,
27915
27930
  ...markerStyles[state]
27916
27931
  }, children: state === "completed" ? (0, import_jsx_runtime41.jsx)(Icon, { name: "check", size: 16, tone: "inherit" }) : (0, import_jsx_runtime41.jsx)(Text, { is: "span", size: "sm", weight: "semibold", tone: "inherit", children: index + 1 }) });
27917
27932
  }
@@ -29449,6 +29464,14 @@ var consumed_tokens_manifest_default = {
29449
29464
  "--ggui-font-weight-normal",
29450
29465
  "--ggui-font-weight-semibold",
29451
29466
  "--ggui-letter-spacing-heading",
29467
+ "--ggui-motion-duration-base",
29468
+ "--ggui-motion-duration-fast",
29469
+ "--ggui-motion-duration-slow",
29470
+ "--ggui-motion-easing-emphasized",
29471
+ "--ggui-motion-easing-exit",
29472
+ "--ggui-motion-easing-standard",
29473
+ "--ggui-scrim-opacity",
29474
+ "--ggui-scrim-tint",
29452
29475
  "--ggui-shape-radius-control",
29453
29476
  "--ggui-shape-radius-full",
29454
29477
  "--ggui-shape-radius-lg",
@@ -29600,6 +29623,7 @@ var NAMED_SPACING = { xs: "4px", sm: "8px", md: "16px", lg: "24px", xl: "32px",
29600
29623
  var SIZE_EXP = { xs: -2, sm: -1, base: 0, lg: 1, xl: 2, "2xl": 3, "3xl": 4, "4xl": 5 };
29601
29624
  var ROLE_STOP = { display: "4xl", h1: "3xl", h2: "2xl", body: "base", label: "xs" };
29602
29625
  var LAYER1_SPACING_UNIT_PX = 4;
29626
+ var SCRIM_DEFAULT_OPACITY = "0.45";
29603
29627
  function tokenValue(t) {
29604
29628
  if (t === void 0 || t === null || typeof t !== "object" || !("$value" in t))
29605
29629
  return void 0;
@@ -29631,6 +29655,15 @@ function readToken(t, path, report) {
29631
29655
  function stated(group, key) {
29632
29656
  return tokenValue(group?.[key]);
29633
29657
  }
29658
+ function scrimTint(tone) {
29659
+ if (tone === void 0)
29660
+ return void 0;
29661
+ if (tone === "light")
29662
+ return "#ffffff";
29663
+ if (tone === "dark")
29664
+ return "#000000";
29665
+ return tokenValue(tone);
29666
+ }
29634
29667
  function familyRamp(group, anchor) {
29635
29668
  const statedStops = {};
29636
29669
  for (const stop of STOPS) {
@@ -29833,6 +29866,16 @@ function deriveThemeVariables(doc, mode, options = {}) {
29833
29866
  const sh = doc.shape?.shadow;
29834
29867
  for (const [key, value] of Object.entries(shadow))
29835
29868
  V[`--ggui-shape-shadow-${key}`] = stated(sh, key) ?? String(value);
29869
+ const md = doc.motion?.duration;
29870
+ const me = doc.motion?.easing;
29871
+ V["--ggui-motion-duration-fast"] = stated(md, "fast") ?? duration.fast;
29872
+ V["--ggui-motion-duration-base"] = stated(md, "base") ?? duration.normal;
29873
+ V["--ggui-motion-duration-slow"] = stated(md, "slow") ?? duration.slow;
29874
+ V["--ggui-motion-easing-standard"] = stated(me, "standard") ?? easing.easeInOut;
29875
+ V["--ggui-motion-easing-emphasized"] = stated(me, "emphasized") ?? easing.easeOut;
29876
+ V["--ggui-motion-easing-exit"] = stated(me, "exit") ?? easing.easeIn;
29877
+ V["--ggui-scrim-tint"] = scrimTint(doc.scrim?.tone) ?? V["--ggui-color-ground"];
29878
+ V["--ggui-scrim-opacity"] = tokenValue(doc.scrim?.opacity) ?? SCRIM_DEFAULT_OPACITY;
29836
29879
  if (missing.length > 0)
29837
29880
  throw new ThemeDocumentInvalidError(missing);
29838
29881
  const floor = new Set(NON_THEME_DEFINABLE_TOKENS);
@@ -33025,6 +33068,7 @@ var TOKENS_EXPORTS = [
33025
33068
  "duration",
33026
33069
  "easing",
33027
33070
  "transition",
33071
+ "motionVar",
33028
33072
  "keyframes",
33029
33073
  "thinkingAnimation",
33030
33074
  "thinkingKeyframes",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ggui-ai/dev-stack",
3
- "version": "0.20.0",
3
+ "version": "0.21.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.28.2",
31
- "@ggui-ai/agent-runtime": "0.20.0",
32
- "@ggui-ai/project-config": "0.20.0",
33
- "@ggui-ai/ui-registry": "0.20.0"
31
+ "@ggui-ai/agent-runtime": "0.21.0",
32
+ "@ggui-ai/project-config": "0.21.0",
33
+ "@ggui-ai/ui-registry": "0.21.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/design": "0.20.0",
44
- "@ggui-ai/mcp-apps-react": "0.20.0",
45
- "@ggui-ai/wire": "0.20.0"
43
+ "@ggui-ai/mcp-apps-react": "0.21.0",
44
+ "@ggui-ai/wire": "0.21.0",
45
+ "@ggui-ai/design": "0.21.0"
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",