@process.co/ui 0.0.10 → 0.0.12

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.
@@ -134,7 +134,7 @@ function _unsupported_iterable_to_array(o, minLen) {
134
134
  if (n === "Map" || n === "Set") return Array.from(n);
135
135
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
136
136
  }
137
- var React3 = require('react');
137
+ var React4 = require('react');
138
138
  var SelectPrimitive = require('@radix-ui/react-select');
139
139
  var lucideReact = require('lucide-react');
140
140
  function _interopNamespace(e) {
@@ -156,9 +156,10 @@ function _interopNamespace(e) {
156
156
  n.default = e;
157
157
  return Object.freeze(n);
158
158
  }
159
- var React3__namespace = /*#__PURE__*/ _interopNamespace(React3);
159
+ var React4__namespace = /*#__PURE__*/ _interopNamespace(React4);
160
160
  var SelectPrimitive__namespace = /*#__PURE__*/ _interopNamespace(SelectPrimitive);
161
161
  // src/components/fields/index.tsx
162
+ var DevContext = React4.createContext(null);
162
163
  // ../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
163
164
  function r(e) {
164
165
  var t, f, n = "";
@@ -4806,9 +4807,53 @@ function cn() {
4806
4807
  return twMerge(clsx(inputs));
4807
4808
  }
4808
4809
  // src/components/fields/Input.tsx
4810
+ function useResolvedExpectedType(expectedType, devCtx) {
4811
+ var inferredTypes = devCtx === null || devCtx === void 0 ? void 0 : devCtx.inferredTypes;
4812
+ return React4__namespace.useMemo(function() {
4813
+ var _match_;
4814
+ if (!expectedType) return "any";
4815
+ if (!expectedType.startsWith("$infer<")) {
4816
+ return expectedType;
4817
+ }
4818
+ var match = expectedType.match(/^\$infer<(.+)>$/);
4819
+ if (!match) return expectedType;
4820
+ var content = ((_match_ = match[1]) === null || _match_ === void 0 ? void 0 : _match_.trim()) || "";
4821
+ if (content.startsWith("[") && content.endsWith("]")) {
4822
+ var arrayContent = content.slice(1, -1);
4823
+ var fieldNames = arrayContent.split(",").map(function(s) {
4824
+ return s.trim().replace(/^["']|["']$/g, "");
4825
+ }).filter(Boolean);
4826
+ if (!inferredTypes) {
4827
+ return "Subscribing to: ".concat(fieldNames.join(", "));
4828
+ }
4829
+ var types = fieldNames.map(function(name) {
4830
+ return inferredTypes[name];
4831
+ }).filter(function(t) {
4832
+ return !!t && t.length > 0;
4833
+ });
4834
+ if (types.length === 0) {
4835
+ return "Waiting for: ".concat(fieldNames.join(", "));
4836
+ }
4837
+ return types.length === 1 ? types[0] : types.join(" & ");
4838
+ }
4839
+ if (!content.includes("|") && /^[a-zA-Z_][a-zA-Z0-9_\-]*$/.test(content)) {
4840
+ if (!inferredTypes) {
4841
+ return "Subscribing to: ".concat(content);
4842
+ }
4843
+ var resolvedType = inferredTypes[content];
4844
+ return resolvedType || "Waiting for: ".concat(content);
4845
+ }
4846
+ return content;
4847
+ }, [
4848
+ expectedType,
4849
+ inferredTypes
4850
+ ]);
4851
+ }
4809
4852
  function Input(param) {
4810
4853
  var fieldName = param.fieldName, label = param.label, value = param.value, onChange = param.onChange, _param_disabled = param.disabled, disabled = _param_disabled === void 0 ? false : _param_disabled, placeholder = param.placeholder, _param_expectedType = param.expectedType, expectedType = _param_expectedType === void 0 ? "string" : _param_expectedType, _param_required = param.required, required = _param_required === void 0 ? false : _param_required, _param_hasRequiredError = param.hasRequiredError, hasRequiredError = _param_hasRequiredError === void 0 ? false : _param_hasRequiredError, className = param.className, editorClassName = param.editorClassName;
4811
- var displayValue = React3__namespace.useMemo(function() {
4854
+ var devCtx = React4.useContext(DevContext);
4855
+ var resolvedExpectedType = useResolvedExpectedType(expectedType, devCtx);
4856
+ var displayValue = React4__namespace.useMemo(function() {
4812
4857
  if (value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "expression" in value) {
4813
4858
  return value.expression || "";
4814
4859
  }
@@ -4816,12 +4861,12 @@ function Input(param) {
4816
4861
  }, [
4817
4862
  value
4818
4863
  ]);
4819
- var isExpression = React3__namespace.useMemo(function() {
4864
+ var isExpression = React4__namespace.useMemo(function() {
4820
4865
  return value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "expression" in value;
4821
4866
  }, [
4822
4867
  value
4823
4868
  ]);
4824
- var handleChange = React3__namespace.useCallback(function(e) {
4869
+ var handleChange = React4__namespace.useCallback(function(e) {
4825
4870
  var newValue = e.target.value;
4826
4871
  if (newValue.includes("{{")) {
4827
4872
  onChange({
@@ -4835,20 +4880,22 @@ function Input(param) {
4835
4880
  onChange
4836
4881
  ]);
4837
4882
  var showError = hasRequiredError || required && !displayValue;
4838
- return /* @__PURE__ */ React3__namespace.createElement("div", {
4883
+ var isWaiting = resolvedExpectedType.startsWith("Waiting for:") || resolvedExpectedType.startsWith("Subscribing to:");
4884
+ return /* @__PURE__ */ React4__namespace.createElement("div", {
4839
4885
  className: cn("uii:mb-2", className)
4840
- }, /* @__PURE__ */ React3__namespace.createElement("div", {
4886
+ }, /* @__PURE__ */ React4__namespace.createElement("div", {
4841
4887
  className: "uii:flex uii:items-center uii:gap-2 uii:mt-2"
4842
- }, /* @__PURE__ */ React3__namespace.createElement("label", {
4888
+ }, /* @__PURE__ */ React4__namespace.createElement("label", {
4843
4889
  htmlFor: fieldName,
4844
4890
  className: "uii:text-xs uii:font-bold uii:text-muted-foreground"
4845
- }, label, ":"), expectedType !== "$.interface.timer" && /* @__PURE__ */ React3__namespace.createElement("span", {
4846
- className: "uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-gray-200 uii:rounded-sm uii:text-[10px] uii:font-mono uii:text-muted-foreground uii:font-light"
4847
- }, expectedType), showError && /* @__PURE__ */ React3__namespace.createElement("span", {
4891
+ }, label, ":"), resolvedExpectedType !== "$.interface.timer" && /* @__PURE__ */ React4__namespace.createElement("span", {
4892
+ className: cn("uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:rounded-sm uii:text-[10px] uii:font-mono uii:font-light uii:max-w-[300px] uii:truncate", isWaiting ? "uii:bg-yellow-100 uii:text-yellow-700" : "uii:bg-gray-200 uii:text-muted-foreground"),
4893
+ title: resolvedExpectedType
4894
+ }, resolvedExpectedType), showError && /* @__PURE__ */ React4__namespace.createElement("span", {
4848
4895
  className: "uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-red-100 uii:text-red-600 uii:rounded-sm uii:text-[10px] uii:font-medium"
4849
- }, "Required")), /* @__PURE__ */ React3__namespace.createElement("div", {
4896
+ }, "Required")), /* @__PURE__ */ React4__namespace.createElement("div", {
4850
4897
  className: "uii:mt-0.5"
4851
- }, /* @__PURE__ */ React3__namespace.createElement("input", {
4898
+ }, /* @__PURE__ */ React4__namespace.createElement("input", {
4852
4899
  id: fieldName,
4853
4900
  name: fieldName,
4854
4901
  type: "text",
@@ -4861,13 +4908,13 @@ function Input(param) {
4861
4908
  }
4862
4909
  function Select(_param) {
4863
4910
  var props = _extends({}, _object_destructuring_empty(_param));
4864
- return /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Root, _object_spread({
4911
+ return /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.Root, _object_spread({
4865
4912
  "data-slot": "select"
4866
4913
  }, props));
4867
4914
  }
4868
4915
  function SelectValue(_param) {
4869
4916
  var props = _extends({}, _object_destructuring_empty(_param));
4870
- return /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Value, _object_spread({
4917
+ return /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.Value, _object_spread({
4871
4918
  "data-slot": "select-value"
4872
4919
  }, props));
4873
4920
  }
@@ -4876,12 +4923,12 @@ function SelectTrigger(_param) {
4876
4923
  "className",
4877
4924
  "children"
4878
4925
  ]);
4879
- return /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Trigger, _object_spread({
4926
+ return /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.Trigger, _object_spread({
4880
4927
  "data-slot": "select-trigger",
4881
4928
  className: cn("uii:border-input uii:data-[placeholder]:text-muted-foreground uii:[&_svg:not([class*=text-])]:text-muted-foreground uii:focus-visible:border-ring uii:focus-visible:ring-ring/50 uii:aria-invalid:ring-destructive/20 uii:dark:aria-invalid:ring-destructive/40 uii:aria-invalid:border-destructive uii:flex uii:h-9 uii:w-full uii:items-center uii:justify-between uii:gap-2 uii:rounded-md uii:border uii:bg-transparent uii:px-3 uii:py-2 uii:text-sm uii:whitespace-nowrap uii:shadow-xs uii:transition-[color,box-shadow] uii:outline-none uii:focus-visible:ring-[3px] uii:disabled:cursor-not-allowed uii:disabled:opacity-50 uii:*:data-[slot=select-value]:line-clamp-1 uii:*:data-[slot=select-value]:flex uii:*:data-[slot=select-value]:items-center uii:*:data-[slot=select-value]:gap-2 uii:[&_svg]:pointer-events-none uii:[&_svg]:shrink-0 uii:[&_svg:not([class*=size-])]:size-4", className)
4882
- }, props), children, /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Icon, {
4929
+ }, props), children, /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.Icon, {
4883
4930
  asChild: true
4884
- }, /* @__PURE__ */ React3__namespace.createElement(lucideReact.ChevronDownIcon, {
4931
+ }, /* @__PURE__ */ React4__namespace.createElement(lucideReact.ChevronDownIcon, {
4885
4932
  className: "uii:size-4 uii:opacity-50"
4886
4933
  })));
4887
4934
  }
@@ -4894,38 +4941,38 @@ function SelectContent(_param) {
4894
4941
  "hideScrollUpButton",
4895
4942
  "hideScrollDownButton"
4896
4943
  ]);
4897
- return /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Portal, null, /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Content, _object_spread({
4944
+ return /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.Portal, null, /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.Content, _object_spread({
4898
4945
  "data-slot": "select-content",
4899
4946
  className: cn("uii:bg-popover uii:text-popover-foreground uii:data-[state=open]:animate-in uii:data-[state=closed]:animate-out uii:data-[state=closed]:fade-out-0 uii:data-[state=open]:fade-in-0 uii:data-[state=closed]:zoom-out-95 uii:data-[state=open]:zoom-in-95 uii:data-[side=bottom]:slide-in-from-top-2 uii:data-[side=left]:slide-in-from-right-2 uii:data-[side=right]:slide-in-from-left-2 uii:data-[side=top]:slide-in-from-bottom-2 uii:relative uii:z-50 uii:max-h-96 uii:min-w-[8rem] uii:overflow-hidden uii:rounded-md uii:border uii:shadow-md", position === "popper" && "uii:data-[side=bottom]:translate-y-1 uii:data-[side=left]:-translate-x-1 uii:data-[side=right]:translate-x-1 uii:data-[side=top]:-translate-y-1", "uii:slide-in-from-right-6", className),
4900
4947
  position: position
4901
- }, props), !hideScrollUpButton && /* @__PURE__ */ React3__namespace.createElement(SelectScrollUpButton, null), /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Viewport, {
4948
+ }, props), !hideScrollUpButton && /* @__PURE__ */ React4__namespace.createElement(SelectScrollUpButton, null), /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.Viewport, {
4902
4949
  className: cn("uii:p-1", position === "popper" && "uii:h-[var(--radix-select-trigger-height)] uii:w-full uii:min-w-[var(--radix-select-trigger-width)] uii:scroll-my-1")
4903
- }, children), footer ? /* @__PURE__ */ React3__namespace.createElement("div", {
4950
+ }, children), footer ? /* @__PURE__ */ React4__namespace.createElement("div", {
4904
4951
  className: "uii:border-t uii:p-2 uii:bg-popover"
4905
- }, footer) : null, !hideScrollDownButton && /* @__PURE__ */ React3__namespace.createElement(SelectScrollDownButton, null)));
4952
+ }, footer) : null, !hideScrollDownButton && /* @__PURE__ */ React4__namespace.createElement(SelectScrollDownButton, null)));
4906
4953
  }
4907
4954
  function SelectItem(_param) {
4908
4955
  var className = _param.className, children = _param.children, props = _object_without_properties(_param, [
4909
4956
  "className",
4910
4957
  "children"
4911
4958
  ]);
4912
- return /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Item, _object_spread({
4959
+ return /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.Item, _object_spread({
4913
4960
  "data-slot": "select-item",
4914
4961
  className: cn("uii:focus:bg-accent uii:focus:text-accent-foreground uii:[&_svg:not([class*=text-])]:text-muted-foreground uii:relative uii:flex uii:w-full uii:cursor-default uii:items-center uii:gap-2 uii:rounded-sm uii:py-1.5 uii:pr-8 uii:pl-2 uii:text-sm uii:outline-hidden uii:select-none uii:data-[disabled]:pointer-events-none uii:data-[disabled]:opacity-50 uii:[&_svg]:pointer-events-none uii:[&_svg]:shrink-0 uii:[&_svg:not([class*=size-])]:size-4 uii:*:[span]:last:flex uii:*:[span]:last:items-center uii:*:[span]:last:gap-2", className)
4915
- }, props), /* @__PURE__ */ React3__namespace.createElement("span", {
4962
+ }, props), /* @__PURE__ */ React4__namespace.createElement("span", {
4916
4963
  className: "uii:absolute uii:right-2 uii:flex uii:size-3.5 uii:items-center uii:justify-center"
4917
- }, /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React3__namespace.createElement(lucideReact.CheckIcon, {
4964
+ }, /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React4__namespace.createElement(lucideReact.CheckIcon, {
4918
4965
  className: "uii:size-4"
4919
- }))), /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.ItemText, null, children));
4966
+ }))), /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.ItemText, null, children));
4920
4967
  }
4921
4968
  function SelectScrollUpButton(_param) {
4922
4969
  var className = _param.className, props = _object_without_properties(_param, [
4923
4970
  "className"
4924
4971
  ]);
4925
- return /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.ScrollUpButton, _object_spread({
4972
+ return /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.ScrollUpButton, _object_spread({
4926
4973
  "data-slot": "select-scroll-up-button",
4927
4974
  className: cn("uii:flex uii:cursor-default uii:items-center uii:justify-center uii:py-1", className)
4928
- }, props), /* @__PURE__ */ React3__namespace.createElement(lucideReact.ChevronUpIcon, {
4975
+ }, props), /* @__PURE__ */ React4__namespace.createElement(lucideReact.ChevronUpIcon, {
4929
4976
  className: "uii:size-4"
4930
4977
  }));
4931
4978
  }
@@ -4933,19 +4980,63 @@ function SelectScrollDownButton(_param) {
4933
4980
  var className = _param.className, props = _object_without_properties(_param, [
4934
4981
  "className"
4935
4982
  ]);
4936
- return /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.ScrollDownButton, _object_spread({
4983
+ return /* @__PURE__ */ React4__namespace.createElement(SelectPrimitive__namespace.ScrollDownButton, _object_spread({
4937
4984
  "data-slot": "select-scroll-down-button",
4938
4985
  className: cn("uii:flex uii:cursor-default uii:items-center uii:justify-center uii:py-1", className)
4939
- }, props), /* @__PURE__ */ React3__namespace.createElement(lucideReact.ChevronDownIcon, {
4986
+ }, props), /* @__PURE__ */ React4__namespace.createElement(lucideReact.ChevronDownIcon, {
4940
4987
  className: "uii:size-4"
4941
4988
  }));
4942
4989
  }
4943
4990
  // src/components/fields/Select.tsx
4991
+ function useResolvedExpectedType2(expectedType, devCtx) {
4992
+ var inferredTypes = devCtx === null || devCtx === void 0 ? void 0 : devCtx.inferredTypes;
4993
+ return React4__namespace.useMemo(function() {
4994
+ var _match_;
4995
+ if (!expectedType) return "any";
4996
+ if (!expectedType.startsWith("$infer<")) {
4997
+ return expectedType;
4998
+ }
4999
+ var match = expectedType.match(/^\$infer<(.+)>$/);
5000
+ if (!match) return expectedType;
5001
+ var content = ((_match_ = match[1]) === null || _match_ === void 0 ? void 0 : _match_.trim()) || "";
5002
+ if (content.startsWith("[") && content.endsWith("]")) {
5003
+ var arrayContent = content.slice(1, -1);
5004
+ var fieldNames = arrayContent.split(",").map(function(s) {
5005
+ return s.trim().replace(/^["']|["']$/g, "");
5006
+ }).filter(Boolean);
5007
+ if (!inferredTypes) {
5008
+ return "Subscribing to: ".concat(fieldNames.join(", "));
5009
+ }
5010
+ var types = fieldNames.map(function(name) {
5011
+ return inferredTypes[name];
5012
+ }).filter(function(t) {
5013
+ return !!t && t.length > 0;
5014
+ });
5015
+ if (types.length === 0) {
5016
+ return "Waiting for: ".concat(fieldNames.join(", "));
5017
+ }
5018
+ return types.length === 1 ? types[0] : types.join(" & ");
5019
+ }
5020
+ if (!content.includes("|") && /^[a-zA-Z_][a-zA-Z0-9_\-]*$/.test(content)) {
5021
+ if (!inferredTypes) {
5022
+ return "Subscribing to: ".concat(content);
5023
+ }
5024
+ var resolvedType = inferredTypes[content];
5025
+ return resolvedType || "Waiting for: ".concat(content);
5026
+ }
5027
+ return content;
5028
+ }, [
5029
+ expectedType,
5030
+ inferredTypes
5031
+ ]);
5032
+ }
4944
5033
  function Select2(param) {
4945
5034
  var fieldName = param.fieldName, label = param.label, value = param.value, onChange = param.onChange, rawOptions = param.options, _param_disabled = param.disabled, disabled = _param_disabled === void 0 ? false : _param_disabled, placeholder = param.placeholder, _param_expectedType = param.expectedType, expectedType = _param_expectedType === void 0 ? "string" : _param_expectedType, _param_required = param.required, required = _param_required === void 0 ? false : _param_required, _param_hasRequiredError = param.hasRequiredError, hasRequiredError = _param_hasRequiredError === void 0 ? false : _param_hasRequiredError, className = param.className, children = param.children;
4946
- var _React3__namespace_useState = _sliced_to_array(React3__namespace.useState(false), 2), isExpressionMode = _React3__namespace_useState[0], setIsExpressionMode = _React3__namespace_useState[1];
4947
- var _React3__namespace_useState1 = _sliced_to_array(React3__namespace.useState(""), 2), expressionValue = _React3__namespace_useState1[0], setExpressionValue = _React3__namespace_useState1[1];
4948
- var options = React3__namespace.useMemo(function() {
5035
+ var devCtx = React4.useContext(DevContext);
5036
+ var resolvedExpectedType = useResolvedExpectedType2(expectedType, devCtx);
5037
+ var _React4__namespace_useState = _sliced_to_array(React4__namespace.useState(false), 2), isExpressionMode = _React4__namespace_useState[0], setIsExpressionMode = _React4__namespace_useState[1];
5038
+ var _React4__namespace_useState1 = _sliced_to_array(React4__namespace.useState(""), 2), expressionValue = _React4__namespace_useState1[0], setExpressionValue = _React4__namespace_useState1[1];
5039
+ var options = React4__namespace.useMemo(function() {
4949
5040
  return rawOptions.map(function(opt) {
4950
5041
  return typeof opt === "string" ? {
4951
5042
  value: opt,
@@ -4955,7 +5046,7 @@ function Select2(param) {
4955
5046
  }, [
4956
5047
  rawOptions
4957
5048
  ]);
4958
- var displayValue = React3__namespace.useMemo(function() {
5049
+ var displayValue = React4__namespace.useMemo(function() {
4959
5050
  if (value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "expression" in value) {
4960
5051
  return value.expression || "";
4961
5052
  }
@@ -4963,12 +5054,12 @@ function Select2(param) {
4963
5054
  }, [
4964
5055
  value
4965
5056
  ]);
4966
- var isExpression = React3__namespace.useMemo(function() {
5057
+ var isExpression = React4__namespace.useMemo(function() {
4967
5058
  return value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "expression" in value;
4968
5059
  }, [
4969
5060
  value
4970
5061
  ]);
4971
- React3__namespace.useEffect(function() {
5062
+ React4__namespace.useEffect(function() {
4972
5063
  if (isExpression) {
4973
5064
  setIsExpressionMode(true);
4974
5065
  setExpressionValue(displayValue);
@@ -4977,7 +5068,7 @@ function Select2(param) {
4977
5068
  isExpression,
4978
5069
  displayValue
4979
5070
  ]);
4980
- var handleSelectChange = React3__namespace.useCallback(function(newValue) {
5071
+ var handleSelectChange = React4__namespace.useCallback(function(newValue) {
4981
5072
  if (newValue === "__expression__") {
4982
5073
  setIsExpressionMode(true);
4983
5074
  return;
@@ -4986,7 +5077,7 @@ function Select2(param) {
4986
5077
  }, [
4987
5078
  onChange
4988
5079
  ]);
4989
- var handleExpressionChange = React3__namespace.useCallback(function(e) {
5080
+ var handleExpressionChange = React4__namespace.useCallback(function(e) {
4990
5081
  var newValue = e.target.value;
4991
5082
  setExpressionValue(newValue);
4992
5083
  onChange({
@@ -4996,7 +5087,7 @@ function Select2(param) {
4996
5087
  }, [
4997
5088
  onChange
4998
5089
  ]);
4999
- var handleSwitchToValue = React3__namespace.useCallback(function() {
5090
+ var handleSwitchToValue = React4__namespace.useCallback(function() {
5000
5091
  setIsExpressionMode(false);
5001
5092
  setExpressionValue("");
5002
5093
  onChange("");
@@ -5031,24 +5122,26 @@ function Select2(param) {
5031
5122
  },
5032
5123
  hasError: showError
5033
5124
  };
5034
- return /* @__PURE__ */ React3__namespace.createElement("div", {
5125
+ var isWaiting = resolvedExpectedType.startsWith("Waiting for:") || resolvedExpectedType.startsWith("Subscribing to:");
5126
+ return /* @__PURE__ */ React4__namespace.createElement("div", {
5035
5127
  className: cn("uii:mb-2", className)
5036
- }, /* @__PURE__ */ React3__namespace.createElement("div", {
5128
+ }, /* @__PURE__ */ React4__namespace.createElement("div", {
5037
5129
  className: "uii:flex uii:items-center uii:gap-2 uii:mt-2"
5038
- }, /* @__PURE__ */ React3__namespace.createElement("label", {
5130
+ }, /* @__PURE__ */ React4__namespace.createElement("label", {
5039
5131
  htmlFor: fieldName,
5040
5132
  className: "uii:text-xs uii:font-bold uii:text-muted-foreground"
5041
- }, label, ":"), expectedType !== "$.interface.timer" && /* @__PURE__ */ React3__namespace.createElement("span", {
5042
- className: "uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-gray-200 uii:rounded-sm uii:text-[10px] uii:font-mono uii:text-muted-foreground uii:font-light"
5043
- }, expectedType), showError && /* @__PURE__ */ React3__namespace.createElement("span", {
5133
+ }, label, ":"), resolvedExpectedType !== "$.interface.timer" && /* @__PURE__ */ React4__namespace.createElement("span", {
5134
+ className: cn("uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:rounded-sm uii:text-[10px] uii:font-mono uii:font-light uii:max-w-[300px] uii:truncate", isWaiting ? "uii:bg-yellow-100 uii:text-yellow-700" : "uii:bg-gray-200 uii:text-muted-foreground"),
5135
+ title: resolvedExpectedType
5136
+ }, resolvedExpectedType), showError && /* @__PURE__ */ React4__namespace.createElement("span", {
5044
5137
  className: "uii:-mt-2 uii:inline-flex uii:px-1 uii:py-0.5 uii:bg-red-100 uii:text-red-600 uii:rounded-sm uii:text-[10px] uii:font-medium"
5045
- }, "Required")), /* @__PURE__ */ React3__namespace.createElement("div", {
5138
+ }, "Required")), /* @__PURE__ */ React4__namespace.createElement("div", {
5046
5139
  className: "uii:mt-0.5"
5047
5140
  }, children ? // Use custom render function
5048
5141
  children(renderProps) : isExpressionMode ? // Expression mode - show input with clear button
5049
- /* @__PURE__ */ React3__namespace.createElement("div", {
5142
+ /* @__PURE__ */ React4__namespace.createElement("div", {
5050
5143
  className: "uii:flex uii:items-center uii:h-9 uii:rounded-sm uii:border uii:border-amber-500/50 uii:bg-amber-500/5"
5051
- }, /* @__PURE__ */ React3__namespace.createElement("input", {
5144
+ }, /* @__PURE__ */ React4__namespace.createElement("input", {
5052
5145
  id: fieldName,
5053
5146
  name: fieldName,
5054
5147
  type: "text",
@@ -5057,7 +5150,7 @@ function Select2(param) {
5057
5150
  disabled: disabled,
5058
5151
  placeholder: "Enter expression...",
5059
5152
  className: cn("uii:flex-1 uii:h-full uii:px-3 uii:bg-transparent uii:text-sm uii:font-mono uii:text-amber-600", "uii:outline-none uii:border-none", disabled && "uii:opacity-50 uii:cursor-not-allowed")
5060
- }), /* @__PURE__ */ React3__namespace.createElement("button", {
5153
+ }), /* @__PURE__ */ React4__namespace.createElement("button", {
5061
5154
  type: "button",
5062
5155
  onClick: handleSwitchToValue,
5063
5156
  className: "uii:flex uii:items-center uii:justify-center uii:h-full uii:px-2 uii:text-amber-600 hover:uii:text-red-600 uii:border-l uii:border-amber-500/30",
@@ -5093,21 +5186,21 @@ function Select2(param) {
5093
5186
  // 📝 Custom Expression
5094
5187
  // </option>
5095
5188
  // </select>
5096
- /* @__PURE__ */ React3__namespace.createElement(Select, {
5189
+ /* @__PURE__ */ React4__namespace.createElement(Select, {
5097
5190
  value: displayValue,
5098
5191
  onValueChange: function(e) {
5099
5192
  return handleSelectChange(e);
5100
5193
  },
5101
5194
  disabled: disabled !== null && disabled !== void 0 ? disabled : disabled
5102
- }, /* @__PURE__ */ React3__namespace.createElement(SelectTrigger, {
5195
+ }, /* @__PURE__ */ React4__namespace.createElement(SelectTrigger, {
5103
5196
  className: "ui:w-full ui:h-9 ui:px-3 ui:border ui:border-input ui:rounded-sm ui:bg-background"
5104
- }, /* @__PURE__ */ React3__namespace.createElement(SelectValue, {
5197
+ }, /* @__PURE__ */ React4__namespace.createElement(SelectValue, {
5105
5198
  placeholder: placeholder
5106
- })), /* @__PURE__ */ React3__namespace.createElement(SelectContent, null, options.map(function(opt) {
5107
- return /* @__PURE__ */ React3__namespace.createElement(SelectItem, {
5199
+ })), /* @__PURE__ */ React4__namespace.createElement(SelectContent, null, options.map(function(opt) {
5200
+ return /* @__PURE__ */ React4__namespace.createElement(SelectItem, {
5108
5201
  key: opt.value,
5109
5202
  value: opt.value
5110
- }, opt.node ? opt.node : /* @__PURE__ */ React3__namespace.createElement(React3__namespace.Fragment, null, opt.label));
5203
+ }, opt.node ? opt.node : /* @__PURE__ */ React4__namespace.createElement(React4__namespace.Fragment, null, opt.label));
5111
5204
  })))));
5112
5205
  }
5113
5206
  // src/components/template-editor/operatorTypes.ts
@@ -5177,26 +5270,29 @@ function parseInferredTypes(typeStr) {
5177
5270
  return result;
5178
5271
  }
5179
5272
  function computeExtendedType(inferredType, opDef) {
5180
- if (!opDef.extendsWithBase || opDef.narrowsTo === "never") {
5181
- return opDef.narrowsTo;
5273
+ if (opDef.narrowsTo === "never") {
5274
+ return "never";
5182
5275
  }
5183
5276
  var parsed = parseInferredTypes(inferredType);
5184
- var matchingTypes = [];
5277
+ var matchingLiterals = [];
5185
5278
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
5186
5279
  try {
5187
5280
  for(var _iterator = parsed.rawTypes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
5188
5281
  var t = _step.value;
5189
5282
  if (opDef.narrowsTo === "string") {
5190
- if (t === "string" || /^["'].*["']$/.test(t)) {
5191
- matchingTypes.push(t);
5283
+ if (t === "string") ;
5284
+ else if (/^["'].*["']$/.test(t)) {
5285
+ matchingLiterals.push(t);
5192
5286
  }
5193
5287
  } else if (opDef.narrowsTo === "number") {
5194
- if (t === "number" || /^-?\d+(\.\d+)?$/.test(t)) {
5195
- matchingTypes.push(t);
5288
+ if (t === "number") ;
5289
+ else if (/^-?\d+(\.\d+)?$/.test(t)) {
5290
+ matchingLiterals.push(t);
5196
5291
  }
5197
5292
  } else if (opDef.narrowsTo === "boolean") {
5198
- if (t === "boolean" || t === "true" || t === "false") {
5199
- matchingTypes.push(t);
5293
+ if (t === "boolean") ;
5294
+ else if (t === "true" || t === "false") {
5295
+ matchingLiterals.push(t);
5200
5296
  }
5201
5297
  }
5202
5298
  }
@@ -5214,10 +5310,13 @@ function computeExtendedType(inferredType, opDef) {
5214
5310
  }
5215
5311
  }
5216
5312
  }
5217
- if (opDef.extendsWithBase && !matchingTypes.includes(opDef.narrowsTo)) {
5218
- matchingTypes.push(opDef.narrowsTo);
5313
+ var result = _to_consumable_array(matchingLiterals);
5314
+ if (opDef.extendsWithBase || matchingLiterals.length === 0) {
5315
+ if (!result.includes(opDef.narrowsTo)) {
5316
+ result.push(opDef.narrowsTo);
5317
+ }
5219
5318
  }
5220
- return matchingTypes.length > 0 ? matchingTypes.join(" | ") : opDef.narrowsTo;
5319
+ return result.length > 0 ? result.join(" | ") : opDef.narrowsTo;
5221
5320
  }
5222
5321
  function filterOperatorsByType(operators, inferredType) {
5223
5322
  var parsed = parseInferredTypes(inferredType);
@@ -5262,19 +5361,30 @@ function useFieldPath(fieldName) {
5262
5361
  }
5263
5362
  function TemplateFieldProvider(param) {
5264
5363
  var children = param.children;
5265
- return /* @__PURE__ */ React3__namespace.default.createElement(React3__namespace.default.Fragment, null, children);
5364
+ return /* @__PURE__ */ React4__namespace.default.createElement(React4__namespace.default.Fragment, null, children);
5266
5365
  }
5267
5366
  function NestedFieldProvider(param) {
5268
5367
  var children = param.children;
5269
- return /* @__PURE__ */ React3__namespace.default.createElement(React3__namespace.default.Fragment, null, children);
5368
+ return /* @__PURE__ */ React4__namespace.default.createElement(React4__namespace.default.Fragment, null, children);
5270
5369
  }
5271
- var InferredTypesContext = React3.createContext(null);
5370
+ var InferredTypesContext = React4.createContext(null);
5272
5371
  function useInferredTypes() {
5273
- return React3.useContext(InferredTypesContext);
5372
+ var devContext = React4.useContext(DevContext);
5373
+ var realContext = React4.useContext(InferredTypesContext);
5374
+ if (devContext) {
5375
+ return {
5376
+ inferredTypes: devContext.inferredTypes,
5377
+ setInferredType: devContext.setInferredType,
5378
+ getInferredType: devContext.getInferredType,
5379
+ clearInferredType: devContext.clearInferredType,
5380
+ clearAllInferredTypes: devContext.clearAllInferredTypes
5381
+ };
5382
+ }
5383
+ return realContext;
5274
5384
  }
5275
5385
  function InferredTypesProvider(param) {
5276
5386
  var children = param.children;
5277
- return /* @__PURE__ */ React3__namespace.default.createElement(React3__namespace.default.Fragment, null, children);
5387
+ return /* @__PURE__ */ React4__namespace.default.createElement(React4__namespace.default.Fragment, null, children);
5278
5388
  }
5279
5389
  function intersectTypes(types) {
5280
5390
  var validTypes = types.filter(function(t) {
@@ -5397,64 +5507,208 @@ function getOperatorsForType(type) {
5397
5507
  }
5398
5508
  function NodePropertyProvider(param) {
5399
5509
  var children = param.children;
5400
- return /* @__PURE__ */ React3__namespace.default.createElement(React3__namespace.default.Fragment, null, children);
5510
+ return /* @__PURE__ */ React4__namespace.default.createElement(React4__namespace.default.Fragment, null, children);
5401
5511
  }
5402
5512
  function useIsInNodePropertyProvider() {
5403
- return false;
5513
+ var devContext = React4.useContext(DevContext);
5514
+ return devContext !== null;
5404
5515
  }
5405
5516
  function useNodeProperty(key) {
5406
- var noopSetter = React3.useCallback(function() {
5407
- console.warn('[useNodeProperty] Mock mode - cannot set "'.concat(key, '"'));
5517
+ var devContext = React4.useContext(DevContext);
5518
+ var _React4_useState = _sliced_to_array(React4.useState(function() {
5519
+ var _devContext_data;
5520
+ return devContext === null || devContext === void 0 ? void 0 : (_devContext_data = devContext.data) === null || _devContext_data === void 0 ? void 0 : _devContext_data[key];
5521
+ }), 2), devValue = _React4_useState[0], setDevValue = _React4_useState[1];
5522
+ React4__namespace.default.useEffect(function() {
5523
+ if (devContext) {
5524
+ setDevValue(devContext.data[key]);
5525
+ }
5526
+ }, [
5527
+ devContext,
5528
+ key
5529
+ ]);
5530
+ var devSetter = React4.useCallback(function(value) {
5531
+ if (devContext) {
5532
+ devContext.setProperty(key, value);
5533
+ setDevValue(value);
5534
+ }
5408
5535
  }, [
5536
+ devContext,
5409
5537
  key
5410
5538
  ]);
5539
+ var noopSetter = React4.useCallback(function() {
5540
+ console.warn('[useNodeProperty] No provider - cannot set "'.concat(key, '"'));
5541
+ }, [
5542
+ key
5543
+ ]);
5544
+ if (devContext) {
5545
+ return [
5546
+ devValue,
5547
+ devSetter
5548
+ ];
5549
+ }
5411
5550
  return [
5412
5551
  void 0,
5413
5552
  noopSetter
5414
5553
  ];
5415
5554
  }
5416
5555
  function useNodeProperties() {
5417
- var noopSetter = React3.useCallback(function() {
5418
- console.warn("[useNodeProperties] Mock mode - cannot set properties");
5556
+ var devContext = React4.useContext(DevContext);
5557
+ var _React4_useState = _sliced_to_array(React4.useState(function() {
5558
+ var _devContext_data;
5559
+ return (_devContext_data = devContext === null || devContext === void 0 ? void 0 : devContext.data) !== null && _devContext_data !== void 0 ? _devContext_data : {};
5560
+ }), 2), devData = _React4_useState[0], setDevData = _React4_useState[1];
5561
+ React4__namespace.default.useEffect(function() {
5562
+ if (devContext) {
5563
+ setDevData(_object_spread({}, devContext.data));
5564
+ }
5565
+ }, [
5566
+ devContext,
5567
+ devContext === null || devContext === void 0 ? void 0 : devContext.data
5568
+ ]);
5569
+ var devSetter = React4.useCallback(function(updates) {
5570
+ if (devContext) {
5571
+ Object.entries(updates).forEach(function(param) {
5572
+ var _param = _sliced_to_array(param, 2), key = _param[0], value = _param[1];
5573
+ devContext.setProperty(key, value);
5574
+ });
5575
+ setDevData(function(prev) {
5576
+ return _object_spread({}, prev, updates);
5577
+ });
5578
+ }
5579
+ }, [
5580
+ devContext
5581
+ ]);
5582
+ var noopSetter = React4.useCallback(function() {
5583
+ console.warn("[useNodeProperties] No provider - cannot set properties");
5419
5584
  }, []);
5585
+ if (devContext) {
5586
+ return [
5587
+ devData,
5588
+ devSetter
5589
+ ];
5590
+ }
5420
5591
  return [
5421
5592
  {},
5422
5593
  noopSetter
5423
5594
  ];
5424
5595
  }
5425
5596
  function useInferredType(fieldName) {
5597
+ var devContext = React4.useContext(DevContext);
5598
+ var _React4_useState = _sliced_to_array(React4.useState(function() {
5599
+ var _devContext_inferredTypes;
5600
+ return devContext === null || devContext === void 0 ? void 0 : (_devContext_inferredTypes = devContext.inferredTypes) === null || _devContext_inferredTypes === void 0 ? void 0 : _devContext_inferredTypes[fieldName];
5601
+ }), 2), devInferredType = _React4_useState[0], setDevInferredType = _React4_useState[1];
5602
+ React4__namespace.default.useEffect(function() {
5603
+ if (devContext) {
5604
+ setDevInferredType(devContext.inferredTypes[fieldName]);
5605
+ }
5606
+ }, [
5607
+ devContext,
5608
+ fieldName,
5609
+ devContext === null || devContext === void 0 ? void 0 : devContext.inferredTypes
5610
+ ]);
5611
+ if (devContext) {
5612
+ return devInferredType;
5613
+ }
5426
5614
  return void 0;
5427
5615
  }
5428
5616
  function useSetInferredType() {
5429
- return React3.useCallback(function(fieldName, type) {
5430
- console.warn('[useSetInferredType] Mock mode - cannot set "'.concat(fieldName, '" to "').concat(type, '"'));
5431
- }, []);
5617
+ var devContext = React4.useContext(DevContext);
5618
+ return React4.useCallback(function(fieldName, type) {
5619
+ if (devContext) {
5620
+ devContext.setInferredType(fieldName, type);
5621
+ } else {
5622
+ console.warn('[useSetInferredType] No provider - cannot set "'.concat(fieldName, '" to "').concat(type, '"'));
5623
+ }
5624
+ }, [
5625
+ devContext
5626
+ ]);
5627
+ }
5628
+ function useClearInferredType() {
5629
+ var devContext = React4.useContext(DevContext);
5630
+ return React4.useCallback(function(fieldName) {
5631
+ if (devContext) {
5632
+ devContext.clearInferredType(fieldName);
5633
+ } else {
5634
+ console.warn('[useClearInferredType] No provider - cannot clear "'.concat(fieldName, '"'));
5635
+ }
5636
+ }, [
5637
+ devContext
5638
+ ]);
5639
+ }
5640
+ function useClearAllInferredTypes() {
5641
+ var devContext = React4.useContext(DevContext);
5642
+ return React4.useCallback(function() {
5643
+ if (devContext) {
5644
+ devContext.clearAllInferredTypes();
5645
+ } else {
5646
+ console.warn("[useClearAllInferredTypes] No provider - cannot clear all types");
5647
+ }
5648
+ }, [
5649
+ devContext
5650
+ ]);
5432
5651
  }
5433
5652
  function useAllInferredTypes() {
5653
+ var devContext = React4.useContext(DevContext);
5654
+ var _React4_useState = _sliced_to_array(React4.useState(function() {
5655
+ var _devContext_inferredTypes;
5656
+ return (_devContext_inferredTypes = devContext === null || devContext === void 0 ? void 0 : devContext.inferredTypes) !== null && _devContext_inferredTypes !== void 0 ? _devContext_inferredTypes : {};
5657
+ }), 2), devTypes = _React4_useState[0], setDevTypes = _React4_useState[1];
5658
+ React4__namespace.default.useEffect(function() {
5659
+ if (devContext) {
5660
+ setDevTypes(_object_spread({}, devContext.inferredTypes));
5661
+ }
5662
+ }, [
5663
+ devContext,
5664
+ devContext === null || devContext === void 0 ? void 0 : devContext.inferredTypes
5665
+ ]);
5666
+ if (devContext) {
5667
+ return devTypes;
5668
+ }
5434
5669
  return {};
5435
5670
  }
5436
5671
  function useSetProperty() {
5437
- return React3.useCallback(function(key, value) {
5438
- console.warn('[useSetProperty] Mock mode - cannot set "'.concat(key, '"'));
5439
- }, []);
5672
+ var devContext = React4.useContext(DevContext);
5673
+ return React4.useCallback(function(key, value) {
5674
+ if (devContext) {
5675
+ devContext.setProperty(key, value);
5676
+ } else {
5677
+ console.warn('[useSetProperty] No provider - cannot set "'.concat(key, '"'));
5678
+ }
5679
+ }, [
5680
+ devContext
5681
+ ]);
5682
+ }
5683
+ function useTriggerLayoutUpdate() {
5684
+ var devContext = React4.useContext(DevContext);
5685
+ return React4.useCallback(function() {
5686
+ if (devContext) {
5687
+ console.log("[useTriggerLayoutUpdate] Dev mode - layout update is a no-op");
5688
+ } else {
5689
+ console.warn("[useTriggerLayoutUpdate] No provider - layout update ignored");
5690
+ }
5691
+ }, [
5692
+ devContext
5693
+ ]);
5440
5694
  }
5441
5695
  function useFieldValidation() {
5442
- var setFieldRequired = React3.useCallback(function(fieldName, required) {
5696
+ var setFieldRequired = React4.useCallback(function(fieldName, required) {
5443
5697
  console.warn('[useFieldValidation] Mock mode - cannot set required for "'.concat(fieldName, '"'));
5444
5698
  }, []);
5445
- var setFieldRequiredIf = React3.useCallback(function(fieldName, requiredIf) {
5699
+ var setFieldRequiredIf = React4.useCallback(function(fieldName, requiredIf) {
5446
5700
  console.warn('[useFieldValidation] Mock mode - cannot set requiredIf for "'.concat(fieldName, '"'));
5447
5701
  }, []);
5448
- var setFieldValidation = React3.useCallback(function(fieldName, customValidation) {
5702
+ var setFieldValidation = React4.useCallback(function(fieldName, customValidation) {
5449
5703
  console.warn('[useFieldValidation] Mock mode - cannot set validation for "'.concat(fieldName, '"'));
5450
5704
  }, []);
5451
- var clearFieldValidation = React3.useCallback(function(fieldName) {
5705
+ var clearFieldValidation = React4.useCallback(function(fieldName) {
5452
5706
  console.warn('[useFieldValidation] Mock mode - cannot clear validation for "'.concat(fieldName, '"'));
5453
5707
  }, []);
5454
- var isFieldRequired = React3.useCallback(function(fieldName) {
5708
+ var isFieldRequired = React4.useCallback(function(fieldName) {
5455
5709
  return false;
5456
5710
  }, []);
5457
- var validateField = React3.useCallback(function(fieldName) {
5711
+ var validateField = React4.useCallback(function(fieldName) {
5458
5712
  return null;
5459
5713
  }, []);
5460
5714
  return {
@@ -5483,6 +5737,8 @@ exports.intersectTypes = intersectTypes;
5483
5737
  exports.parseInferSyntax = parseInferSyntax;
5484
5738
  exports.parseInferredTypes = parseInferredTypes;
5485
5739
  exports.useAllInferredTypes = useAllInferredTypes;
5740
+ exports.useClearAllInferredTypes = useClearAllInferredTypes;
5741
+ exports.useClearInferredType = useClearInferredType;
5486
5742
  exports.useFieldPath = useFieldPath;
5487
5743
  exports.useFieldValidation = useFieldValidation;
5488
5744
  exports.useInferredType = useInferredType;
@@ -5493,5 +5749,6 @@ exports.useNodeProperties = useNodeProperties;
5493
5749
  exports.useNodeProperty = useNodeProperty;
5494
5750
  exports.useSetInferredType = useSetInferredType;
5495
5751
  exports.useSetProperty = useSetProperty;
5496
- exports.useTemplateFieldContext = useTemplateFieldContext; //# sourceMappingURL=index.cjs.map
5752
+ exports.useTemplateFieldContext = useTemplateFieldContext;
5753
+ exports.useTriggerLayoutUpdate = useTriggerLayoutUpdate; //# sourceMappingURL=index.cjs.map
5497
5754
  //# sourceMappingURL=index.cjs.map