@process.co/ui 0.0.9 → 0.0.11

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.
@@ -133,11 +133,12 @@ function _unsupported_iterable_to_array(o, minLen) {
133
133
  if (n === "Map" || n === "Set") return Array.from(n);
134
134
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
135
135
  }
136
- import * as React3 from 'react';
137
- import React3__default, { createContext, useContext, useCallback } from 'react';
136
+ import * as React4 from 'react';
137
+ import React4__default, { createContext, useContext, useState, useCallback } from 'react';
138
138
  import * as SelectPrimitive from '@radix-ui/react-select';
139
139
  import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from 'lucide-react';
140
140
  // src/components/fields/index.tsx
141
+ var DevContext = createContext(null);
141
142
  // ../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
142
143
  function r(e) {
143
144
  var t, f, n = "";
@@ -4785,9 +4786,53 @@ function cn() {
4785
4786
  return twMerge(clsx(inputs));
4786
4787
  }
4787
4788
  // src/components/fields/Input.tsx
4789
+ function useResolvedExpectedType(expectedType, devCtx) {
4790
+ var inferredTypes = devCtx === null || devCtx === void 0 ? void 0 : devCtx.inferredTypes;
4791
+ return React4.useMemo(function() {
4792
+ var _match_;
4793
+ if (!expectedType) return "any";
4794
+ if (!expectedType.startsWith("$infer<")) {
4795
+ return expectedType;
4796
+ }
4797
+ var match = expectedType.match(/^\$infer<(.+)>$/);
4798
+ if (!match) return expectedType;
4799
+ var content = ((_match_ = match[1]) === null || _match_ === void 0 ? void 0 : _match_.trim()) || "";
4800
+ if (content.startsWith("[") && content.endsWith("]")) {
4801
+ var arrayContent = content.slice(1, -1);
4802
+ var fieldNames = arrayContent.split(",").map(function(s) {
4803
+ return s.trim().replace(/^["']|["']$/g, "");
4804
+ }).filter(Boolean);
4805
+ if (!inferredTypes) {
4806
+ return "Subscribing to: ".concat(fieldNames.join(", "));
4807
+ }
4808
+ var types = fieldNames.map(function(name) {
4809
+ return inferredTypes[name];
4810
+ }).filter(function(t) {
4811
+ return !!t && t.length > 0;
4812
+ });
4813
+ if (types.length === 0) {
4814
+ return "Waiting for: ".concat(fieldNames.join(", "));
4815
+ }
4816
+ return types.length === 1 ? types[0] : types.join(" & ");
4817
+ }
4818
+ if (!content.includes("|") && /^[a-zA-Z_][a-zA-Z0-9_\-]*$/.test(content)) {
4819
+ if (!inferredTypes) {
4820
+ return "Subscribing to: ".concat(content);
4821
+ }
4822
+ var resolvedType = inferredTypes[content];
4823
+ return resolvedType || "Waiting for: ".concat(content);
4824
+ }
4825
+ return content;
4826
+ }, [
4827
+ expectedType,
4828
+ inferredTypes
4829
+ ]);
4830
+ }
4788
4831
  function Input(param) {
4789
4832
  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;
4790
- var displayValue = React3.useMemo(function() {
4833
+ var devCtx = useContext(DevContext);
4834
+ var resolvedExpectedType = useResolvedExpectedType(expectedType, devCtx);
4835
+ var displayValue = React4.useMemo(function() {
4791
4836
  if (value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "expression" in value) {
4792
4837
  return value.expression || "";
4793
4838
  }
@@ -4795,12 +4840,12 @@ function Input(param) {
4795
4840
  }, [
4796
4841
  value
4797
4842
  ]);
4798
- var isExpression = React3.useMemo(function() {
4843
+ var isExpression = React4.useMemo(function() {
4799
4844
  return value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "expression" in value;
4800
4845
  }, [
4801
4846
  value
4802
4847
  ]);
4803
- var handleChange = React3.useCallback(function(e) {
4848
+ var handleChange = React4.useCallback(function(e) {
4804
4849
  var newValue = e.target.value;
4805
4850
  if (newValue.includes("{{")) {
4806
4851
  onChange({
@@ -4814,20 +4859,22 @@ function Input(param) {
4814
4859
  onChange
4815
4860
  ]);
4816
4861
  var showError = hasRequiredError || required && !displayValue;
4817
- return /* @__PURE__ */ React3.createElement("div", {
4862
+ var isWaiting = resolvedExpectedType.startsWith("Waiting for:") || resolvedExpectedType.startsWith("Subscribing to:");
4863
+ return /* @__PURE__ */ React4.createElement("div", {
4818
4864
  className: cn("uii:mb-2", className)
4819
- }, /* @__PURE__ */ React3.createElement("div", {
4865
+ }, /* @__PURE__ */ React4.createElement("div", {
4820
4866
  className: "uii:flex uii:items-center uii:gap-2 uii:mt-2"
4821
- }, /* @__PURE__ */ React3.createElement("label", {
4867
+ }, /* @__PURE__ */ React4.createElement("label", {
4822
4868
  htmlFor: fieldName,
4823
4869
  className: "uii:text-xs uii:font-bold uii:text-muted-foreground"
4824
- }, label, ":"), expectedType !== "$.interface.timer" && /* @__PURE__ */ React3.createElement("span", {
4825
- 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"
4826
- }, expectedType), showError && /* @__PURE__ */ React3.createElement("span", {
4870
+ }, label, ":"), resolvedExpectedType !== "$.interface.timer" && /* @__PURE__ */ React4.createElement("span", {
4871
+ 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"),
4872
+ title: resolvedExpectedType
4873
+ }, resolvedExpectedType), showError && /* @__PURE__ */ React4.createElement("span", {
4827
4874
  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"
4828
- }, "Required")), /* @__PURE__ */ React3.createElement("div", {
4875
+ }, "Required")), /* @__PURE__ */ React4.createElement("div", {
4829
4876
  className: "uii:mt-0.5"
4830
- }, /* @__PURE__ */ React3.createElement("input", {
4877
+ }, /* @__PURE__ */ React4.createElement("input", {
4831
4878
  id: fieldName,
4832
4879
  name: fieldName,
4833
4880
  type: "text",
@@ -4840,13 +4887,13 @@ function Input(param) {
4840
4887
  }
4841
4888
  function Select(_param) {
4842
4889
  var props = _extends({}, _object_destructuring_empty(_param));
4843
- return /* @__PURE__ */ React3.createElement(SelectPrimitive.Root, _object_spread({
4890
+ return /* @__PURE__ */ React4.createElement(SelectPrimitive.Root, _object_spread({
4844
4891
  "data-slot": "select"
4845
4892
  }, props));
4846
4893
  }
4847
4894
  function SelectValue(_param) {
4848
4895
  var props = _extends({}, _object_destructuring_empty(_param));
4849
- return /* @__PURE__ */ React3.createElement(SelectPrimitive.Value, _object_spread({
4896
+ return /* @__PURE__ */ React4.createElement(SelectPrimitive.Value, _object_spread({
4850
4897
  "data-slot": "select-value"
4851
4898
  }, props));
4852
4899
  }
@@ -4855,12 +4902,12 @@ function SelectTrigger(_param) {
4855
4902
  "className",
4856
4903
  "children"
4857
4904
  ]);
4858
- return /* @__PURE__ */ React3.createElement(SelectPrimitive.Trigger, _object_spread({
4905
+ return /* @__PURE__ */ React4.createElement(SelectPrimitive.Trigger, _object_spread({
4859
4906
  "data-slot": "select-trigger",
4860
4907
  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)
4861
- }, props), children, /* @__PURE__ */ React3.createElement(SelectPrimitive.Icon, {
4908
+ }, props), children, /* @__PURE__ */ React4.createElement(SelectPrimitive.Icon, {
4862
4909
  asChild: true
4863
- }, /* @__PURE__ */ React3.createElement(ChevronDownIcon, {
4910
+ }, /* @__PURE__ */ React4.createElement(ChevronDownIcon, {
4864
4911
  className: "uii:size-4 uii:opacity-50"
4865
4912
  })));
4866
4913
  }
@@ -4873,38 +4920,38 @@ function SelectContent(_param) {
4873
4920
  "hideScrollUpButton",
4874
4921
  "hideScrollDownButton"
4875
4922
  ]);
4876
- return /* @__PURE__ */ React3.createElement(SelectPrimitive.Portal, null, /* @__PURE__ */ React3.createElement(SelectPrimitive.Content, _object_spread({
4923
+ return /* @__PURE__ */ React4.createElement(SelectPrimitive.Portal, null, /* @__PURE__ */ React4.createElement(SelectPrimitive.Content, _object_spread({
4877
4924
  "data-slot": "select-content",
4878
4925
  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),
4879
4926
  position: position
4880
- }, props), !hideScrollUpButton && /* @__PURE__ */ React3.createElement(SelectScrollUpButton, null), /* @__PURE__ */ React3.createElement(SelectPrimitive.Viewport, {
4927
+ }, props), !hideScrollUpButton && /* @__PURE__ */ React4.createElement(SelectScrollUpButton, null), /* @__PURE__ */ React4.createElement(SelectPrimitive.Viewport, {
4881
4928
  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")
4882
- }, children), footer ? /* @__PURE__ */ React3.createElement("div", {
4929
+ }, children), footer ? /* @__PURE__ */ React4.createElement("div", {
4883
4930
  className: "uii:border-t uii:p-2 uii:bg-popover"
4884
- }, footer) : null, !hideScrollDownButton && /* @__PURE__ */ React3.createElement(SelectScrollDownButton, null)));
4931
+ }, footer) : null, !hideScrollDownButton && /* @__PURE__ */ React4.createElement(SelectScrollDownButton, null)));
4885
4932
  }
4886
4933
  function SelectItem(_param) {
4887
4934
  var className = _param.className, children = _param.children, props = _object_without_properties(_param, [
4888
4935
  "className",
4889
4936
  "children"
4890
4937
  ]);
4891
- return /* @__PURE__ */ React3.createElement(SelectPrimitive.Item, _object_spread({
4938
+ return /* @__PURE__ */ React4.createElement(SelectPrimitive.Item, _object_spread({
4892
4939
  "data-slot": "select-item",
4893
4940
  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)
4894
- }, props), /* @__PURE__ */ React3.createElement("span", {
4941
+ }, props), /* @__PURE__ */ React4.createElement("span", {
4895
4942
  className: "uii:absolute uii:right-2 uii:flex uii:size-3.5 uii:items-center uii:justify-center"
4896
- }, /* @__PURE__ */ React3.createElement(SelectPrimitive.ItemIndicator, null, /* @__PURE__ */ React3.createElement(CheckIcon, {
4943
+ }, /* @__PURE__ */ React4.createElement(SelectPrimitive.ItemIndicator, null, /* @__PURE__ */ React4.createElement(CheckIcon, {
4897
4944
  className: "uii:size-4"
4898
- }))), /* @__PURE__ */ React3.createElement(SelectPrimitive.ItemText, null, children));
4945
+ }))), /* @__PURE__ */ React4.createElement(SelectPrimitive.ItemText, null, children));
4899
4946
  }
4900
4947
  function SelectScrollUpButton(_param) {
4901
4948
  var className = _param.className, props = _object_without_properties(_param, [
4902
4949
  "className"
4903
4950
  ]);
4904
- return /* @__PURE__ */ React3.createElement(SelectPrimitive.ScrollUpButton, _object_spread({
4951
+ return /* @__PURE__ */ React4.createElement(SelectPrimitive.ScrollUpButton, _object_spread({
4905
4952
  "data-slot": "select-scroll-up-button",
4906
4953
  className: cn("uii:flex uii:cursor-default uii:items-center uii:justify-center uii:py-1", className)
4907
- }, props), /* @__PURE__ */ React3.createElement(ChevronUpIcon, {
4954
+ }, props), /* @__PURE__ */ React4.createElement(ChevronUpIcon, {
4908
4955
  className: "uii:size-4"
4909
4956
  }));
4910
4957
  }
@@ -4912,19 +4959,63 @@ function SelectScrollDownButton(_param) {
4912
4959
  var className = _param.className, props = _object_without_properties(_param, [
4913
4960
  "className"
4914
4961
  ]);
4915
- return /* @__PURE__ */ React3.createElement(SelectPrimitive.ScrollDownButton, _object_spread({
4962
+ return /* @__PURE__ */ React4.createElement(SelectPrimitive.ScrollDownButton, _object_spread({
4916
4963
  "data-slot": "select-scroll-down-button",
4917
4964
  className: cn("uii:flex uii:cursor-default uii:items-center uii:justify-center uii:py-1", className)
4918
- }, props), /* @__PURE__ */ React3.createElement(ChevronDownIcon, {
4965
+ }, props), /* @__PURE__ */ React4.createElement(ChevronDownIcon, {
4919
4966
  className: "uii:size-4"
4920
4967
  }));
4921
4968
  }
4922
4969
  // src/components/fields/Select.tsx
4970
+ function useResolvedExpectedType2(expectedType, devCtx) {
4971
+ var inferredTypes = devCtx === null || devCtx === void 0 ? void 0 : devCtx.inferredTypes;
4972
+ return React4.useMemo(function() {
4973
+ var _match_;
4974
+ if (!expectedType) return "any";
4975
+ if (!expectedType.startsWith("$infer<")) {
4976
+ return expectedType;
4977
+ }
4978
+ var match = expectedType.match(/^\$infer<(.+)>$/);
4979
+ if (!match) return expectedType;
4980
+ var content = ((_match_ = match[1]) === null || _match_ === void 0 ? void 0 : _match_.trim()) || "";
4981
+ if (content.startsWith("[") && content.endsWith("]")) {
4982
+ var arrayContent = content.slice(1, -1);
4983
+ var fieldNames = arrayContent.split(",").map(function(s) {
4984
+ return s.trim().replace(/^["']|["']$/g, "");
4985
+ }).filter(Boolean);
4986
+ if (!inferredTypes) {
4987
+ return "Subscribing to: ".concat(fieldNames.join(", "));
4988
+ }
4989
+ var types = fieldNames.map(function(name) {
4990
+ return inferredTypes[name];
4991
+ }).filter(function(t) {
4992
+ return !!t && t.length > 0;
4993
+ });
4994
+ if (types.length === 0) {
4995
+ return "Waiting for: ".concat(fieldNames.join(", "));
4996
+ }
4997
+ return types.length === 1 ? types[0] : types.join(" & ");
4998
+ }
4999
+ if (!content.includes("|") && /^[a-zA-Z_][a-zA-Z0-9_\-]*$/.test(content)) {
5000
+ if (!inferredTypes) {
5001
+ return "Subscribing to: ".concat(content);
5002
+ }
5003
+ var resolvedType = inferredTypes[content];
5004
+ return resolvedType || "Waiting for: ".concat(content);
5005
+ }
5006
+ return content;
5007
+ }, [
5008
+ expectedType,
5009
+ inferredTypes
5010
+ ]);
5011
+ }
4923
5012
  function Select2(param) {
4924
5013
  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;
4925
- var _React3_useState = _sliced_to_array(React3.useState(false), 2), isExpressionMode = _React3_useState[0], setIsExpressionMode = _React3_useState[1];
4926
- var _React3_useState1 = _sliced_to_array(React3.useState(""), 2), expressionValue = _React3_useState1[0], setExpressionValue = _React3_useState1[1];
4927
- var options = React3.useMemo(function() {
5014
+ var devCtx = useContext(DevContext);
5015
+ var resolvedExpectedType = useResolvedExpectedType2(expectedType, devCtx);
5016
+ var _React4_useState = _sliced_to_array(React4.useState(false), 2), isExpressionMode = _React4_useState[0], setIsExpressionMode = _React4_useState[1];
5017
+ var _React4_useState1 = _sliced_to_array(React4.useState(""), 2), expressionValue = _React4_useState1[0], setExpressionValue = _React4_useState1[1];
5018
+ var options = React4.useMemo(function() {
4928
5019
  return rawOptions.map(function(opt) {
4929
5020
  return typeof opt === "string" ? {
4930
5021
  value: opt,
@@ -4934,7 +5025,7 @@ function Select2(param) {
4934
5025
  }, [
4935
5026
  rawOptions
4936
5027
  ]);
4937
- var displayValue = React3.useMemo(function() {
5028
+ var displayValue = React4.useMemo(function() {
4938
5029
  if (value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "expression" in value) {
4939
5030
  return value.expression || "";
4940
5031
  }
@@ -4942,12 +5033,12 @@ function Select2(param) {
4942
5033
  }, [
4943
5034
  value
4944
5035
  ]);
4945
- var isExpression = React3.useMemo(function() {
5036
+ var isExpression = React4.useMemo(function() {
4946
5037
  return value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "expression" in value;
4947
5038
  }, [
4948
5039
  value
4949
5040
  ]);
4950
- React3.useEffect(function() {
5041
+ React4.useEffect(function() {
4951
5042
  if (isExpression) {
4952
5043
  setIsExpressionMode(true);
4953
5044
  setExpressionValue(displayValue);
@@ -4956,7 +5047,7 @@ function Select2(param) {
4956
5047
  isExpression,
4957
5048
  displayValue
4958
5049
  ]);
4959
- var handleSelectChange = React3.useCallback(function(newValue) {
5050
+ var handleSelectChange = React4.useCallback(function(newValue) {
4960
5051
  if (newValue === "__expression__") {
4961
5052
  setIsExpressionMode(true);
4962
5053
  return;
@@ -4965,7 +5056,7 @@ function Select2(param) {
4965
5056
  }, [
4966
5057
  onChange
4967
5058
  ]);
4968
- var handleExpressionChange = React3.useCallback(function(e) {
5059
+ var handleExpressionChange = React4.useCallback(function(e) {
4969
5060
  var newValue = e.target.value;
4970
5061
  setExpressionValue(newValue);
4971
5062
  onChange({
@@ -4975,7 +5066,7 @@ function Select2(param) {
4975
5066
  }, [
4976
5067
  onChange
4977
5068
  ]);
4978
- var handleSwitchToValue = React3.useCallback(function() {
5069
+ var handleSwitchToValue = React4.useCallback(function() {
4979
5070
  setIsExpressionMode(false);
4980
5071
  setExpressionValue("");
4981
5072
  onChange("");
@@ -5010,24 +5101,26 @@ function Select2(param) {
5010
5101
  },
5011
5102
  hasError: showError
5012
5103
  };
5013
- return /* @__PURE__ */ React3.createElement("div", {
5104
+ var isWaiting = resolvedExpectedType.startsWith("Waiting for:") || resolvedExpectedType.startsWith("Subscribing to:");
5105
+ return /* @__PURE__ */ React4.createElement("div", {
5014
5106
  className: cn("uii:mb-2", className)
5015
- }, /* @__PURE__ */ React3.createElement("div", {
5107
+ }, /* @__PURE__ */ React4.createElement("div", {
5016
5108
  className: "uii:flex uii:items-center uii:gap-2 uii:mt-2"
5017
- }, /* @__PURE__ */ React3.createElement("label", {
5109
+ }, /* @__PURE__ */ React4.createElement("label", {
5018
5110
  htmlFor: fieldName,
5019
5111
  className: "uii:text-xs uii:font-bold uii:text-muted-foreground"
5020
- }, label, ":"), expectedType !== "$.interface.timer" && /* @__PURE__ */ React3.createElement("span", {
5021
- 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"
5022
- }, expectedType), showError && /* @__PURE__ */ React3.createElement("span", {
5112
+ }, label, ":"), resolvedExpectedType !== "$.interface.timer" && /* @__PURE__ */ React4.createElement("span", {
5113
+ 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"),
5114
+ title: resolvedExpectedType
5115
+ }, resolvedExpectedType), showError && /* @__PURE__ */ React4.createElement("span", {
5023
5116
  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"
5024
- }, "Required")), /* @__PURE__ */ React3.createElement("div", {
5117
+ }, "Required")), /* @__PURE__ */ React4.createElement("div", {
5025
5118
  className: "uii:mt-0.5"
5026
5119
  }, children ? // Use custom render function
5027
5120
  children(renderProps) : isExpressionMode ? // Expression mode - show input with clear button
5028
- /* @__PURE__ */ React3.createElement("div", {
5121
+ /* @__PURE__ */ React4.createElement("div", {
5029
5122
  className: "uii:flex uii:items-center uii:h-9 uii:rounded-sm uii:border uii:border-amber-500/50 uii:bg-amber-500/5"
5030
- }, /* @__PURE__ */ React3.createElement("input", {
5123
+ }, /* @__PURE__ */ React4.createElement("input", {
5031
5124
  id: fieldName,
5032
5125
  name: fieldName,
5033
5126
  type: "text",
@@ -5036,7 +5129,7 @@ function Select2(param) {
5036
5129
  disabled: disabled,
5037
5130
  placeholder: "Enter expression...",
5038
5131
  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")
5039
- }), /* @__PURE__ */ React3.createElement("button", {
5132
+ }), /* @__PURE__ */ React4.createElement("button", {
5040
5133
  type: "button",
5041
5134
  onClick: handleSwitchToValue,
5042
5135
  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",
@@ -5072,23 +5165,154 @@ function Select2(param) {
5072
5165
  // 📝 Custom Expression
5073
5166
  // </option>
5074
5167
  // </select>
5075
- /* @__PURE__ */ React3.createElement(Select, {
5168
+ /* @__PURE__ */ React4.createElement(Select, {
5076
5169
  value: displayValue,
5077
5170
  onValueChange: function(e) {
5078
5171
  return handleSelectChange(e);
5079
5172
  },
5080
5173
  disabled: disabled !== null && disabled !== void 0 ? disabled : disabled
5081
- }, /* @__PURE__ */ React3.createElement(SelectTrigger, {
5174
+ }, /* @__PURE__ */ React4.createElement(SelectTrigger, {
5082
5175
  className: "ui:w-full ui:h-9 ui:px-3 ui:border ui:border-input ui:rounded-sm ui:bg-background"
5083
- }, /* @__PURE__ */ React3.createElement(SelectValue, {
5176
+ }, /* @__PURE__ */ React4.createElement(SelectValue, {
5084
5177
  placeholder: placeholder
5085
- })), /* @__PURE__ */ React3.createElement(SelectContent, null, options.map(function(opt) {
5086
- return /* @__PURE__ */ React3.createElement(SelectItem, {
5178
+ })), /* @__PURE__ */ React4.createElement(SelectContent, null, options.map(function(opt) {
5179
+ return /* @__PURE__ */ React4.createElement(SelectItem, {
5087
5180
  key: opt.value,
5088
5181
  value: opt.value
5089
- }, opt.node ? opt.node : /* @__PURE__ */ React3.createElement(React3.Fragment, null, opt.label));
5182
+ }, opt.node ? opt.node : /* @__PURE__ */ React4.createElement(React4.Fragment, null, opt.label));
5090
5183
  })))));
5091
5184
  }
5185
+ // src/components/template-editor/operatorTypes.ts
5186
+ function parseInferredTypes(typeStr) {
5187
+ var result = {
5188
+ baseTypes: [],
5189
+ stringConstants: [],
5190
+ numberConstants: [],
5191
+ hasConstants: false,
5192
+ rawTypes: []
5193
+ };
5194
+ if (!typeStr || typeStr === "any" || typeStr === "unknown") {
5195
+ result.baseTypes = [
5196
+ "any"
5197
+ ];
5198
+ result.rawTypes = [
5199
+ "any"
5200
+ ];
5201
+ return result;
5202
+ }
5203
+ var types = typeStr.split("|").map(function(t) {
5204
+ return t.trim();
5205
+ }).filter(Boolean);
5206
+ var baseTypesSet = /* @__PURE__ */ new Set();
5207
+ var rawTypesSet = /* @__PURE__ */ new Set();
5208
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
5209
+ try {
5210
+ for(var _iterator = types[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
5211
+ var t = _step.value;
5212
+ rawTypesSet.add(t);
5213
+ var stringLiteralMatch = t.match(/^["'](.*)["']$/);
5214
+ if (stringLiteralMatch && stringLiteralMatch[1] !== void 0) {
5215
+ result.stringConstants.push(stringLiteralMatch[1]);
5216
+ baseTypesSet.add("string");
5217
+ result.hasConstants = true;
5218
+ continue;
5219
+ }
5220
+ if (/^-?\d+(\.\d+)?$/.test(t)) {
5221
+ result.numberConstants.push(parseFloat(t));
5222
+ baseTypesSet.add("number");
5223
+ result.hasConstants = true;
5224
+ continue;
5225
+ }
5226
+ if (t === "true" || t === "false") {
5227
+ baseTypesSet.add("boolean");
5228
+ result.hasConstants = true;
5229
+ continue;
5230
+ }
5231
+ baseTypesSet.add(t);
5232
+ }
5233
+ } catch (err) {
5234
+ _didIteratorError = true;
5235
+ _iteratorError = err;
5236
+ } finally{
5237
+ try {
5238
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
5239
+ _iterator.return();
5240
+ }
5241
+ } finally{
5242
+ if (_didIteratorError) {
5243
+ throw _iteratorError;
5244
+ }
5245
+ }
5246
+ }
5247
+ result.baseTypes = Array.from(baseTypesSet);
5248
+ result.rawTypes = Array.from(rawTypesSet);
5249
+ return result;
5250
+ }
5251
+ function computeExtendedType(inferredType, opDef) {
5252
+ if (opDef.narrowsTo === "never") {
5253
+ return "never";
5254
+ }
5255
+ var parsed = parseInferredTypes(inferredType);
5256
+ var matchingLiterals = [];
5257
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
5258
+ try {
5259
+ for(var _iterator = parsed.rawTypes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
5260
+ var t = _step.value;
5261
+ if (opDef.narrowsTo === "string") {
5262
+ if (t === "string") ;
5263
+ else if (/^["'].*["']$/.test(t)) {
5264
+ matchingLiterals.push(t);
5265
+ }
5266
+ } else if (opDef.narrowsTo === "number") {
5267
+ if (t === "number") ;
5268
+ else if (/^-?\d+(\.\d+)?$/.test(t)) {
5269
+ matchingLiterals.push(t);
5270
+ }
5271
+ } else if (opDef.narrowsTo === "boolean") {
5272
+ if (t === "boolean") ;
5273
+ else if (t === "true" || t === "false") {
5274
+ matchingLiterals.push(t);
5275
+ }
5276
+ }
5277
+ }
5278
+ } catch (err) {
5279
+ _didIteratorError = true;
5280
+ _iteratorError = err;
5281
+ } finally{
5282
+ try {
5283
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
5284
+ _iterator.return();
5285
+ }
5286
+ } finally{
5287
+ if (_didIteratorError) {
5288
+ throw _iteratorError;
5289
+ }
5290
+ }
5291
+ }
5292
+ var result = _to_consumable_array(matchingLiterals);
5293
+ if (opDef.extendsWithBase || matchingLiterals.length === 0) {
5294
+ if (!result.includes(opDef.narrowsTo)) {
5295
+ result.push(opDef.narrowsTo);
5296
+ }
5297
+ }
5298
+ return result.length > 0 ? result.join(" | ") : opDef.narrowsTo;
5299
+ }
5300
+ function filterOperatorsByType(operators, inferredType) {
5301
+ var parsed = parseInferredTypes(inferredType);
5302
+ var baseTypes = parsed.baseTypes;
5303
+ return operators.filter(function(op) {
5304
+ if (op.types.includes("any")) return true;
5305
+ return op.types.some(function(t) {
5306
+ return baseTypes.includes(t) || baseTypes.includes("any");
5307
+ });
5308
+ });
5309
+ }
5310
+ function getStringConstants(inferredType) {
5311
+ return parseInferredTypes(inferredType).stringConstants;
5312
+ }
5313
+ function getNumberConstants(inferredType) {
5314
+ return parseInferredTypes(inferredType).numberConstants;
5315
+ }
5092
5316
  // src/components/fields/index.tsx
5093
5317
  function useTemplateFieldContext() {
5094
5318
  return {
@@ -5116,19 +5340,30 @@ function useFieldPath(fieldName) {
5116
5340
  }
5117
5341
  function TemplateFieldProvider(param) {
5118
5342
  var children = param.children;
5119
- return /* @__PURE__ */ React3__default.createElement(React3__default.Fragment, null, children);
5343
+ return /* @__PURE__ */ React4__default.createElement(React4__default.Fragment, null, children);
5120
5344
  }
5121
5345
  function NestedFieldProvider(param) {
5122
5346
  var children = param.children;
5123
- return /* @__PURE__ */ React3__default.createElement(React3__default.Fragment, null, children);
5347
+ return /* @__PURE__ */ React4__default.createElement(React4__default.Fragment, null, children);
5124
5348
  }
5125
5349
  var InferredTypesContext = createContext(null);
5126
5350
  function useInferredTypes() {
5127
- return useContext(InferredTypesContext);
5351
+ var devContext = useContext(DevContext);
5352
+ var realContext = useContext(InferredTypesContext);
5353
+ if (devContext) {
5354
+ return {
5355
+ inferredTypes: devContext.inferredTypes,
5356
+ setInferredType: devContext.setInferredType,
5357
+ getInferredType: devContext.getInferredType,
5358
+ clearInferredType: devContext.clearInferredType,
5359
+ clearAllInferredTypes: devContext.clearAllInferredTypes
5360
+ };
5361
+ }
5362
+ return realContext;
5128
5363
  }
5129
5364
  function InferredTypesProvider(param) {
5130
5365
  var children = param.children;
5131
- return /* @__PURE__ */ React3__default.createElement(React3__default.Fragment, null, children);
5366
+ return /* @__PURE__ */ React4__default.createElement(React4__default.Fragment, null, children);
5132
5367
  }
5133
5368
  function intersectTypes(types) {
5134
5369
  var validTypes = types.filter(function(t) {
@@ -5251,46 +5486,178 @@ function getOperatorsForType(type) {
5251
5486
  }
5252
5487
  function NodePropertyProvider(param) {
5253
5488
  var children = param.children;
5254
- return /* @__PURE__ */ React3__default.createElement(React3__default.Fragment, null, children);
5489
+ return /* @__PURE__ */ React4__default.createElement(React4__default.Fragment, null, children);
5255
5490
  }
5256
5491
  function useIsInNodePropertyProvider() {
5257
- return false;
5492
+ var devContext = useContext(DevContext);
5493
+ return devContext !== null;
5258
5494
  }
5259
5495
  function useNodeProperty(key) {
5496
+ var devContext = useContext(DevContext);
5497
+ var _useState = _sliced_to_array(useState(function() {
5498
+ var _devContext_data;
5499
+ return devContext === null || devContext === void 0 ? void 0 : (_devContext_data = devContext.data) === null || _devContext_data === void 0 ? void 0 : _devContext_data[key];
5500
+ }), 2), devValue = _useState[0], setDevValue = _useState[1];
5501
+ React4__default.useEffect(function() {
5502
+ if (devContext) {
5503
+ setDevValue(devContext.data[key]);
5504
+ }
5505
+ }, [
5506
+ devContext,
5507
+ key
5508
+ ]);
5509
+ var devSetter = useCallback(function(value) {
5510
+ if (devContext) {
5511
+ devContext.setProperty(key, value);
5512
+ setDevValue(value);
5513
+ }
5514
+ }, [
5515
+ devContext,
5516
+ key
5517
+ ]);
5260
5518
  var noopSetter = useCallback(function() {
5261
- console.warn('[useNodeProperty] Mock mode - cannot set "'.concat(key, '"'));
5519
+ console.warn('[useNodeProperty] No provider - cannot set "'.concat(key, '"'));
5262
5520
  }, [
5263
5521
  key
5264
5522
  ]);
5523
+ if (devContext) {
5524
+ return [
5525
+ devValue,
5526
+ devSetter
5527
+ ];
5528
+ }
5265
5529
  return [
5266
5530
  void 0,
5267
5531
  noopSetter
5268
5532
  ];
5269
5533
  }
5270
5534
  function useNodeProperties() {
5535
+ var devContext = useContext(DevContext);
5536
+ var _useState = _sliced_to_array(useState(function() {
5537
+ var _devContext_data;
5538
+ return (_devContext_data = devContext === null || devContext === void 0 ? void 0 : devContext.data) !== null && _devContext_data !== void 0 ? _devContext_data : {};
5539
+ }), 2), devData = _useState[0], setDevData = _useState[1];
5540
+ React4__default.useEffect(function() {
5541
+ if (devContext) {
5542
+ setDevData(_object_spread({}, devContext.data));
5543
+ }
5544
+ }, [
5545
+ devContext,
5546
+ devContext === null || devContext === void 0 ? void 0 : devContext.data
5547
+ ]);
5548
+ var devSetter = useCallback(function(updates) {
5549
+ if (devContext) {
5550
+ Object.entries(updates).forEach(function(param) {
5551
+ var _param = _sliced_to_array(param, 2), key = _param[0], value = _param[1];
5552
+ devContext.setProperty(key, value);
5553
+ });
5554
+ setDevData(function(prev) {
5555
+ return _object_spread({}, prev, updates);
5556
+ });
5557
+ }
5558
+ }, [
5559
+ devContext
5560
+ ]);
5271
5561
  var noopSetter = useCallback(function() {
5272
- console.warn("[useNodeProperties] Mock mode - cannot set properties");
5562
+ console.warn("[useNodeProperties] No provider - cannot set properties");
5273
5563
  }, []);
5564
+ if (devContext) {
5565
+ return [
5566
+ devData,
5567
+ devSetter
5568
+ ];
5569
+ }
5274
5570
  return [
5275
5571
  {},
5276
5572
  noopSetter
5277
5573
  ];
5278
5574
  }
5279
5575
  function useInferredType(fieldName) {
5576
+ var devContext = useContext(DevContext);
5577
+ var _useState = _sliced_to_array(useState(function() {
5578
+ var _devContext_inferredTypes;
5579
+ return devContext === null || devContext === void 0 ? void 0 : (_devContext_inferredTypes = devContext.inferredTypes) === null || _devContext_inferredTypes === void 0 ? void 0 : _devContext_inferredTypes[fieldName];
5580
+ }), 2), devInferredType = _useState[0], setDevInferredType = _useState[1];
5581
+ React4__default.useEffect(function() {
5582
+ if (devContext) {
5583
+ setDevInferredType(devContext.inferredTypes[fieldName]);
5584
+ }
5585
+ }, [
5586
+ devContext,
5587
+ fieldName,
5588
+ devContext === null || devContext === void 0 ? void 0 : devContext.inferredTypes
5589
+ ]);
5590
+ if (devContext) {
5591
+ return devInferredType;
5592
+ }
5280
5593
  return void 0;
5281
5594
  }
5282
5595
  function useSetInferredType() {
5596
+ var devContext = useContext(DevContext);
5283
5597
  return useCallback(function(fieldName, type) {
5284
- console.warn('[useSetInferredType] Mock mode - cannot set "'.concat(fieldName, '" to "').concat(type, '"'));
5285
- }, []);
5598
+ if (devContext) {
5599
+ devContext.setInferredType(fieldName, type);
5600
+ } else {
5601
+ console.warn('[useSetInferredType] No provider - cannot set "'.concat(fieldName, '" to "').concat(type, '"'));
5602
+ }
5603
+ }, [
5604
+ devContext
5605
+ ]);
5606
+ }
5607
+ function useClearInferredType() {
5608
+ var devContext = useContext(DevContext);
5609
+ return useCallback(function(fieldName) {
5610
+ if (devContext) {
5611
+ devContext.clearInferredType(fieldName);
5612
+ } else {
5613
+ console.warn('[useClearInferredType] No provider - cannot clear "'.concat(fieldName, '"'));
5614
+ }
5615
+ }, [
5616
+ devContext
5617
+ ]);
5618
+ }
5619
+ function useClearAllInferredTypes() {
5620
+ var devContext = useContext(DevContext);
5621
+ return useCallback(function() {
5622
+ if (devContext) {
5623
+ devContext.clearAllInferredTypes();
5624
+ } else {
5625
+ console.warn("[useClearAllInferredTypes] No provider - cannot clear all types");
5626
+ }
5627
+ }, [
5628
+ devContext
5629
+ ]);
5286
5630
  }
5287
5631
  function useAllInferredTypes() {
5632
+ var devContext = useContext(DevContext);
5633
+ var _useState = _sliced_to_array(useState(function() {
5634
+ var _devContext_inferredTypes;
5635
+ return (_devContext_inferredTypes = devContext === null || devContext === void 0 ? void 0 : devContext.inferredTypes) !== null && _devContext_inferredTypes !== void 0 ? _devContext_inferredTypes : {};
5636
+ }), 2), devTypes = _useState[0], setDevTypes = _useState[1];
5637
+ React4__default.useEffect(function() {
5638
+ if (devContext) {
5639
+ setDevTypes(_object_spread({}, devContext.inferredTypes));
5640
+ }
5641
+ }, [
5642
+ devContext,
5643
+ devContext === null || devContext === void 0 ? void 0 : devContext.inferredTypes
5644
+ ]);
5645
+ if (devContext) {
5646
+ return devTypes;
5647
+ }
5288
5648
  return {};
5289
5649
  }
5290
5650
  function useSetProperty() {
5651
+ var devContext = useContext(DevContext);
5291
5652
  return useCallback(function(key, value) {
5292
- console.warn('[useSetProperty] Mock mode - cannot set "'.concat(key, '"'));
5293
- }, []);
5653
+ if (devContext) {
5654
+ devContext.setProperty(key, value);
5655
+ } else {
5656
+ console.warn('[useSetProperty] No provider - cannot set "'.concat(key, '"'));
5657
+ }
5658
+ }, [
5659
+ devContext
5660
+ ]);
5294
5661
  }
5295
5662
  function useFieldValidation() {
5296
5663
  var setFieldRequired = useCallback(function(fieldName, required) {
@@ -5320,5 +5687,5 @@ function useFieldValidation() {
5320
5687
  validateField: validateField
5321
5688
  };
5322
5689
  }
5323
- export { InferredTypesContext, InferredTypesProvider, Input, NestedFieldProvider, NodePropertyProvider, OPERATORS_BY_TYPE, Select2 as Select, TemplateFieldProvider, getOperatorsForType, intersectTypes, parseInferSyntax, useAllInferredTypes, useFieldPath, useFieldValidation, useInferredType, useInferredTypes, useIsInNodePropertyProvider, useIsInTemplateFieldProvider, useNodeProperties, useNodeProperty, useSetInferredType, useSetProperty, useTemplateFieldContext }; //# sourceMappingURL=index.js.map
5690
+ export { InferredTypesContext, InferredTypesProvider, Input, NestedFieldProvider, NodePropertyProvider, OPERATORS_BY_TYPE, Select2 as Select, TemplateFieldProvider, computeExtendedType, filterOperatorsByType, getNumberConstants, getOperatorsForType, getStringConstants, intersectTypes, parseInferSyntax, parseInferredTypes, useAllInferredTypes, useClearAllInferredTypes, useClearInferredType, useFieldPath, useFieldValidation, useInferredType, useInferredTypes, useIsInNodePropertyProvider, useIsInTemplateFieldProvider, useNodeProperties, useNodeProperty, useSetInferredType, useSetProperty, useTemplateFieldContext }; //# sourceMappingURL=index.js.map
5324
5691
  //# sourceMappingURL=index.js.map