@octaviaflow/core 3.1.0-beta.58 → 3.1.0-beta.60

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.
@@ -11,6 +11,11 @@ export interface ConditionOperator {
11
11
  symbol?: string;
12
12
  description?: string;
13
13
  }
14
+ export interface ConditionValueOption {
15
+ value: string;
16
+ label: string;
17
+ description?: string;
18
+ }
14
19
  export interface Condition {
15
20
  field: string;
16
21
  operator: string;
@@ -30,6 +35,12 @@ export interface ConditionBuilderProps extends Omit<ComponentPropsWithoutRef<"di
30
35
  onChange: (conditions: Condition[]) => void;
31
36
  fields: ConditionField[];
32
37
  operators: ConditionOperator[];
38
+ /** Optional per-row value suggestions. When this returns a non-empty list
39
+ * for a condition, that row's value field becomes an editable combobox: a
40
+ * free-text input with an attached dropdown button listing the options —
41
+ * clicking one fills the input, and the user can still type any value not in
42
+ * the list. Omit / return [] to keep a plain text input. */
43
+ getValueOptions?: (condition: Condition, index: number) => ConditionValueOption[];
33
44
  /** Auto-enables search above 8 options. Force on/off via boolean. */
34
45
  searchable?: boolean;
35
46
  allowGroups?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionBuilder/ConditionBuilder.tsx"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,wBAAwB,EAG7B,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;;4DAEwD;IACxD,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,KAAK,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,CAAC,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACzD,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC;4EACwE;IACxE,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B;yEACqE;IACrE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,mDAAmD;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;mEAI+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA0OD,eAAO,MAAM,gBAAgB,kHA+M3B,CAAC"}
1
+ {"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionBuilder/ConditionBuilder.tsx"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,wBAAwB,EAG7B,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;;4DAEwD;IACxD,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,KAAK,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,CAAC,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACzD,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B;;;;iEAI6D;IAC7D,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,oBAAoB,EAAE,CAAC;IAClF,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC;4EACwE;IACxE,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B;yEACqE;IACrE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,mDAAmD;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;mEAI+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAiYD,eAAO,MAAM,gBAAgB,kHA4N3B,CAAC"}
@@ -1,2 +1,2 @@
1
- export { type Condition, ConditionBuilder, type ConditionBuilderProps, type ConditionField, type ConditionOperator, } from "./ConditionBuilder";
1
+ export { type Condition, ConditionBuilder, type ConditionBuilderProps, type ConditionField, type ConditionOperator, type ConditionValueOption, } from "./ConditionBuilder";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionBuilder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionBuilder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AASf,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;qDACiD;IACjD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;qDAIiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAyHD,eAAO,MAAM,MAAM,2GA0WjB,CAAC"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AASf,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;qDACiD;IACjD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;qDAIiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA+HD,eAAO,MAAM,MAAM,2GAiXjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../src/components/Switch/Switch.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAUf,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,KAAK,cAAc,GAAG,IAAI,CACxB,wBAAwB,CAAC,OAAO,CAAC,EACjC,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAC5D,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kDAAkD;IAClD,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAMD,eAAO,MAAM,MAAM,0GAkGjB,CAAC"}
1
+ {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../src/components/Switch/Switch.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAUf,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,KAAK,cAAc,GAAG,IAAI,CACxB,wBAAwB,CAAC,OAAO,CAAC,EACjC,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAC5D,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kDAAkD;IAClD,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAMD,eAAO,MAAM,MAAM,0GAyGjB,CAAC"}
package/dist/index.cjs CHANGED
@@ -2476,6 +2476,16 @@ function hasRenderableText(node) {
2476
2476
  }
2477
2477
  return false;
2478
2478
  }
2479
+ function getRenderableText(node) {
2480
+ if (node === null || node === void 0 || typeof node === "boolean") return "";
2481
+ if (typeof node === "string") return node;
2482
+ if (typeof node === "number") return String(node);
2483
+ if (Array.isArray(node)) return node.map(getRenderableText).join("");
2484
+ if ((0, import_react21.isValidElement)(node)) {
2485
+ return getRenderableText(node.props.children);
2486
+ }
2487
+ return "";
2488
+ }
2479
2489
  function resolveAccessibleName(input) {
2480
2490
  if (input.ariaLabelledby) {
2481
2491
  return { "aria-labelledby": input.ariaLabelledby };
@@ -4913,12 +4923,13 @@ function Option({
4913
4923
  }
4914
4924
  );
4915
4925
  }
4926
+ var DEFAULT_SELECT_PLACEHOLDER = "Select an option...";
4916
4927
  var Select = (0, import_react34.forwardRef)(function Select2({
4917
4928
  options,
4918
4929
  value,
4919
4930
  defaultValue,
4920
4931
  onChange,
4921
- placeholder = "Select an option...",
4932
+ placeholder = DEFAULT_SELECT_PLACEHOLDER,
4922
4933
  searchable = false,
4923
4934
  label,
4924
4935
  error = false,
@@ -4968,9 +4979,12 @@ var Select = (0, import_react34.forwardRef)(function Select2({
4968
4979
  label,
4969
4980
  ariaLabel,
4970
4981
  ariaLabelledby: ariaLabelledBy,
4971
- componentName: "Select"
4982
+ componentName: "Select",
4983
+ fallbacks: [
4984
+ placeholder && placeholder !== DEFAULT_SELECT_PLACEHOLDER ? placeholder : void 0
4985
+ ]
4972
4986
  }),
4973
- [label, ariaLabel, ariaLabelledBy]
4987
+ [label, ariaLabel, ariaLabelledBy, placeholder]
4974
4988
  );
4975
4989
  const ariaProps = (0, import_react34.useMemo)(() => {
4976
4990
  const items = filteredOptions.map((o) => ({
@@ -9062,11 +9076,155 @@ function OptionDropdown({
9062
9076
  )
9063
9077
  ] });
9064
9078
  }
9079
+ function ValueCombobox({ value, options, onChange, placeholder = "Value", ariaLabel }) {
9080
+ const [open, setOpen] = (0, import_react59.useState)(false);
9081
+ const [activeIdx, setActiveIdx] = (0, import_react59.useState)(0);
9082
+ const wrapRef = (0, import_react59.useRef)(null);
9083
+ const inputRef = (0, import_react59.useRef)(null);
9084
+ const panelRef = (0, import_react59.useRef)(null);
9085
+ const listboxId = (0, import_react59.useId)();
9086
+ const [panelPos, setPanelPos] = (0, import_react59.useState)(null);
9087
+ const updatePanelPos = (0, import_react59.useCallback)(() => {
9088
+ if (!wrapRef.current) return;
9089
+ const r = wrapRef.current.getBoundingClientRect();
9090
+ setPanelPos({ top: r.bottom + 4, left: r.left, width: r.width });
9091
+ }, []);
9092
+ (0, import_react59.useLayoutEffect)(() => {
9093
+ if (!open) return;
9094
+ updatePanelPos();
9095
+ window.addEventListener("scroll", updatePanelPos, true);
9096
+ window.addEventListener("resize", updatePanelPos);
9097
+ return () => {
9098
+ window.removeEventListener("scroll", updatePanelPos, true);
9099
+ window.removeEventListener("resize", updatePanelPos);
9100
+ };
9101
+ }, [open, updatePanelPos]);
9102
+ const filtered = (0, import_react59.useMemo)(() => {
9103
+ const q2 = value.trim().toLowerCase();
9104
+ if (!q2) return options;
9105
+ return options.filter(
9106
+ (o) => o.label.toLowerCase().includes(q2) || o.value.toLowerCase().includes(q2)
9107
+ );
9108
+ }, [options, value]);
9109
+ (0, import_react59.useEffect)(() => {
9110
+ setActiveIdx(0);
9111
+ }, [value, open]);
9112
+ (0, import_react59.useEffect)(() => {
9113
+ if (!open) return;
9114
+ const onDoc = (e) => {
9115
+ const t = e.target;
9116
+ if (!wrapRef.current?.contains(t) && !panelRef.current?.contains(t)) setOpen(false);
9117
+ };
9118
+ document.addEventListener("mousedown", onDoc);
9119
+ return () => document.removeEventListener("mousedown", onDoc);
9120
+ }, [open]);
9121
+ const pick = (v) => {
9122
+ onChange(v);
9123
+ setOpen(false);
9124
+ inputRef.current?.focus();
9125
+ };
9126
+ const handleKey = (e) => {
9127
+ if (e.key === "ArrowDown") {
9128
+ e.preventDefault();
9129
+ if (!open) {
9130
+ setOpen(true);
9131
+ return;
9132
+ }
9133
+ setActiveIdx((i) => Math.min(i + 1, Math.max(filtered.length - 1, 0)));
9134
+ } else if (e.key === "ArrowUp") {
9135
+ if (!open) return;
9136
+ e.preventDefault();
9137
+ setActiveIdx((i) => Math.max(i - 1, 0));
9138
+ } else if (e.key === "Enter") {
9139
+ if (open && filtered[activeIdx]) {
9140
+ e.preventDefault();
9141
+ pick(filtered[activeIdx].value);
9142
+ }
9143
+ } else if (e.key === "Escape") {
9144
+ if (open) {
9145
+ e.preventDefault();
9146
+ setOpen(false);
9147
+ }
9148
+ }
9149
+ };
9150
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { ref: wrapRef, className: "ods-cb-combo", onKeyDown: handleKey, children: [
9151
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9152
+ "input",
9153
+ {
9154
+ ref: inputRef,
9155
+ type: "text",
9156
+ className: "ods-cb-combo__input",
9157
+ value,
9158
+ onChange: (e) => {
9159
+ onChange(e.target.value);
9160
+ if (!open) setOpen(true);
9161
+ },
9162
+ placeholder,
9163
+ "aria-label": ariaLabel,
9164
+ role: "combobox",
9165
+ "aria-expanded": open,
9166
+ "aria-controls": open ? listboxId : void 0,
9167
+ "aria-autocomplete": "list"
9168
+ }
9169
+ ),
9170
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9171
+ "button",
9172
+ {
9173
+ type: "button",
9174
+ className: cn("ods-cb-combo__toggle", open && "ods-cb-combo__toggle--open"),
9175
+ onClick: () => {
9176
+ setOpen((o) => !o);
9177
+ inputRef.current?.focus();
9178
+ },
9179
+ "aria-label": `${ariaLabel} options`,
9180
+ "aria-haspopup": "listbox",
9181
+ "aria-expanded": open,
9182
+ tabIndex: -1,
9183
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_icons9.ChevronDownIcon, { "aria-hidden": "true", className: "ods-cb-combo__chev" })
9184
+ }
9185
+ ),
9186
+ open && panelPos && typeof document !== "undefined" && (0, import_react_dom5.createPortal)(
9187
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9188
+ "div",
9189
+ {
9190
+ ref: panelRef,
9191
+ className: "ods-cb-dd__panel ods-cb-dd__panel--portal",
9192
+ role: "presentation",
9193
+ style: { position: "fixed", top: panelPos.top, left: panelPos.left, minWidth: panelPos.width },
9194
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("ul", { id: listboxId, role: "listbox", "aria-label": ariaLabel, className: "ods-cb-dd__list", children: [
9195
+ filtered.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("li", { className: "ods-cb-dd__empty", children: "Type a custom value" }),
9196
+ filtered.map((opt, idx) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
9197
+ "button",
9198
+ {
9199
+ type: "button",
9200
+ role: "option",
9201
+ "aria-selected": opt.value === value,
9202
+ className: cn(
9203
+ "ods-cb-dd__opt",
9204
+ opt.value === value && "ods-cb-dd__opt--selected",
9205
+ idx === activeIdx && "ods-cb-dd__opt--active"
9206
+ ),
9207
+ onClick: () => pick(opt.value),
9208
+ onMouseEnter: () => setActiveIdx(idx),
9209
+ children: [
9210
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "ods-cb-dd__opt-text", children: opt.label }),
9211
+ opt.description && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "ods-cb-dd__opt-desc", children: opt.description })
9212
+ ]
9213
+ }
9214
+ ) }, opt.value))
9215
+ ] })
9216
+ }
9217
+ ),
9218
+ document.body
9219
+ )
9220
+ ] });
9221
+ }
9065
9222
  var ConditionBuilder = (0, import_react59.forwardRef)(function ConditionBuilder2({
9066
9223
  conditions,
9067
9224
  onChange,
9068
9225
  fields,
9069
9226
  operators,
9227
+ getValueOptions,
9070
9228
  searchable,
9071
9229
  joinMode = "global",
9072
9230
  joinOperator = "AND",
@@ -9199,17 +9357,28 @@ var ConditionBuilder = (0, import_react59.forwardRef)(function ConditionBuilder2
9199
9357
  minWidth: 140
9200
9358
  }
9201
9359
  ),
9202
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9203
- "input",
9204
- {
9205
- type: "text",
9206
- className: "ods-condition-row__value",
9207
- value: condition.value,
9208
- onChange: (e) => handleValueChange(index, e.target.value),
9209
- placeholder: "Value",
9210
- "aria-label": "Value"
9211
- }
9212
- ),
9360
+ (() => {
9361
+ const valueOpts = getValueOptions?.(condition, index) ?? [];
9362
+ return valueOpts.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9363
+ ValueCombobox,
9364
+ {
9365
+ ariaLabel: "Value",
9366
+ value: condition.value,
9367
+ options: valueOpts,
9368
+ onChange: (v) => handleValueChange(index, v)
9369
+ }
9370
+ ) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9371
+ "input",
9372
+ {
9373
+ type: "text",
9374
+ className: "ods-condition-row__value",
9375
+ value: condition.value,
9376
+ onChange: (e) => handleValueChange(index, e.target.value),
9377
+ placeholder: "Value",
9378
+ "aria-label": "Value"
9379
+ }
9380
+ );
9381
+ })(),
9213
9382
  /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9214
9383
  "button",
9215
9384
  {
@@ -28889,8 +29058,9 @@ var Switch = (0, import_react150.forwardRef)(function Switch2({
28889
29058
  defaultSelected: defaultChecked,
28890
29059
  onChange
28891
29060
  });
29061
+ const labelText = getRenderableText(label).trim();
28892
29062
  const ariaNameProps = resolveAccessibleName({
28893
- label: typeof label === "string" ? label : void 0,
29063
+ label: labelText || void 0,
28894
29064
  ariaLabel: props["aria-label"],
28895
29065
  ariaLabelledby: props["aria-labelledby"],
28896
29066
  componentName: "Switch"