@emuanalytics/flow-rdf-ui 0.0.29 → 0.0.30

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.
package/dist/index.d.ts CHANGED
@@ -2640,8 +2640,7 @@ interface FlowQueryBuilderFieldBase<ValueType = any> {
2640
2640
  operators?: string[];
2641
2641
  defaultValue?: ValueType | (() => ValueType);
2642
2642
  defaultOperator?: string;
2643
- toDisplayValue?: (value: ValueType) => ValueType;
2644
- fromDisplayValue?: (value: ValueType) => ValueType;
2643
+ convertValue?: (value: ValueType) => any;
2645
2644
  validator?: (rule: FlowQueryBuilderRule<ValueType>) => string;
2646
2645
  }
2647
2646
  interface FlowQueryBuilderStringField extends FlowQueryBuilderFieldBase<string> {
@@ -2686,7 +2685,7 @@ interface FlowQueryBuilderFieldTypeMap {
2686
2685
  }
2687
2686
  type FlowQueryBuilderFieldType = keyof FlowQueryBuilderFieldTypeMap;
2688
2687
  type FlowQueryBuilderField = FlowQueryBuilderFieldTypeMap[keyof FlowQueryBuilderFieldTypeMap];
2689
- type FlowQueryBuilderTemplateFn<T extends FlowQueryBuilderFieldType> = (rule: FlowQueryBuilderRule<T>, field: FlowQueryBuilderFieldTypeMap[T], qb: FlowQueryBuilder, update: () => void) => TemplateResult;
2688
+ type FlowQueryBuilderTemplateFn<FieldType extends FlowQueryBuilderFieldType> = (rule: FlowQueryBuilderRule<FlowQueryBuilderFieldTypeMap[FieldType]['value']>, field: FlowQueryBuilderFieldTypeMap[FieldType], qb: FlowQueryBuilder, update: () => void) => TemplateResult;
2690
2689
  interface FlowQueryBuilderConfig {
2691
2690
  fields: FlowQueryBuilderFieldMap;
2692
2691
  }
@@ -2694,6 +2693,12 @@ interface FlowQueryBuilderFieldDefinition<Field extends FlowQueryBuilderFieldTyp
2694
2693
  operators: string[];
2695
2694
  template: FlowQueryBuilderTemplateFn<Field>;
2696
2695
  }
2696
+ interface FlowQueryBuilderConverterOptions {
2697
+ includeFields?: string[];
2698
+ excludeFields?: string[];
2699
+ renameFields?: Record<string, string>;
2700
+ }
2701
+ type FlowQueryBuilderConverter = (ruleSet: FlowQueryBuilderRuleSet, config: FlowQueryBuilderConfig, options?: FlowQueryBuilderConverterOptions) => any;
2697
2702
 
2698
2703
  type NoUnion<T, U = T> = T extends U ? ([U] extends [T] ? T : never) : never;
2699
2704
  /**
@@ -2718,6 +2723,62 @@ declare class FlowQueryBuilder extends FlowRdfElement {
2718
2723
  * @param fieldDefinition
2719
2724
  */
2720
2725
  static registerFieldDefinition<T extends FlowQueryBuilderFieldType>(type: T, fieldDefinition: FlowQueryBuilderFieldDefinition<NoUnion<T>>): void;
2726
+ /**
2727
+ *
2728
+ */
2729
+ static convertToFlowQuery: FlowQueryBuilderConverter;
2730
+ /**
2731
+ * Static helper method to determine if supplied argument is
2732
+ * a `FlowQueryBuilderRule`.
2733
+ *
2734
+ * @param value A value to test
2735
+ */
2736
+ static isRule(value: unknown): value is FlowQueryBuilderRule;
2737
+ /**
2738
+ * Static helper method to determine if supplied argument is
2739
+ * a `FlowQueryBuilderRuleSet`.
2740
+ *
2741
+ * @param value A value to test
2742
+ * @returns `true` if supplied value is a FlowQueryBuilderRuleSet
2743
+ */
2744
+ static isRuleSet(value: unknown): value is FlowQueryBuilderRuleSet;
2745
+ /**
2746
+ * Static helper method to recursively filter a `FlowQueryBuilderRuleSet`.
2747
+ *
2748
+ * This can be used to sanitize user queries before they are executed.
2749
+ *
2750
+ * @param ruleset Rule set to filter
2751
+ * @param options Fields to include or exclude
2752
+ * @returns The filtered rule set
2753
+ */
2754
+ static filterRuleSet(ruleset: FlowQueryBuilderRuleSet, options: {
2755
+ excludeFields?: string[];
2756
+ includeFields?: string[];
2757
+ }): FlowQueryBuilderRuleSet;
2758
+ /**
2759
+ * Static helper method to rename fields in a `FlowQueryBuilderRuleSet`.
2760
+ *
2761
+ * @param ruleSet A `FlowQueryBuilderRuleSet` to rename.
2762
+ * @param replacements Mapping of string to string for renaming fields.
2763
+ * @returns The renamed rule set.
2764
+ */
2765
+ static renameRuleSetFields(ruleset: FlowQueryBuilderRuleSet, replacements: Record<string, string>): FlowQueryBuilderRuleSet;
2766
+ /**
2767
+ * Static helper method to recursively apply a transform function to each rule
2768
+ * in a `FlowQueryBuilderRuleSet`.
2769
+ *
2770
+ * The transform fn should expect a single FlowQueryBuilderRule and return:
2771
+ *
2772
+ * - the same rule unmodifed or modified in place
2773
+ * - `undefined` to exclude the rule from the rule set
2774
+ *
2775
+ * This can be used to sanitize rule sets before they are used to perform queries.
2776
+ *
2777
+ * @param ruleSet query builder rule set
2778
+ * @param transformFn transform function
2779
+ * @returns The modified rule set
2780
+ */
2781
+ static transformRuleSet(ruleSet: FlowQueryBuilderRuleSet, transformFn: (rule: FlowQueryBuilderRule) => FlowQueryBuilderRule | undefined): FlowQueryBuilderRuleSet;
2721
2782
  private readonly hasSlotController;
2722
2783
  /** The query builder's value object. */
2723
2784
  value: FlowQueryBuilderRuleSet;
@@ -2755,10 +2816,10 @@ declare class FlowQueryBuilder extends FlowRdfElement {
2755
2816
  private operatorsForField;
2756
2817
  private defaultOperatorsForFieldType;
2757
2818
  private toolbarTemplate;
2758
- ruleTemplate(rule: FlowQueryBuilderRule, fieldConfig: FlowQueryBuilderField | undefined, index: number): lit.TemplateResult<1>;
2759
- ruleValueTemplate(rule: FlowQueryBuilderRule, fieldConfig: FlowQueryBuilderField | undefined): lit.TemplateResult<1>;
2760
- subQueryBuilderTemplate(ruleSet: FlowQueryBuilderRuleSet, index: number): lit.TemplateResult<1>;
2761
- emptyRulesetTemplate(): lit.TemplateResult<1>;
2819
+ private ruleTemplate;
2820
+ private ruleValueTemplate;
2821
+ private subQueryBuilderTemplate;
2822
+ private emptyRulesetTemplate;
2762
2823
  render(): lit.TemplateResult<1>;
2763
2824
  }
2764
2825
 
package/dist/index.mjs CHANGED
@@ -4153,6 +4153,8 @@ const isString = (val) => typeof val === "string";
4153
4153
  const hasLength = (val) => isDefined(val) && val.length > 0;
4154
4154
  const isStringFull = (val) => isString(val) && hasLength(val);
4155
4155
  const isArrayFull = (val) => Array.isArray(val) && hasLength(val);
4156
+ const isObject = (val) => typeof val === "object" && !isNull(val);
4157
+ const isObjectFull = (val) => isObject(val) && hasLength(Object.keys(val));
4156
4158
  const isNumber = (val) => typeof val === "number" && !Number.isNaN(val) && Number.isFinite(val);
4157
4159
  const isNumeric = (val) => isString(val) && /^[+-]?([0-9]*[.])?[0-9]+$/.test(val);
4158
4160
  const isFunction = (val) => typeof val === "function";
@@ -13066,6 +13068,149 @@ FlowProgressRing = __decorateClass$p([
13066
13068
  customElement("flow-ui-progress-ring")
13067
13069
  ], FlowProgressRing);
13068
13070
 
13071
+ function filterRuleSet(ruleset, options) {
13072
+ return transformRuleSet(ruleset, (rule) => {
13073
+ if (isDefined(rule.field)) {
13074
+ if (isDefined(options.excludeFields) && options.excludeFields.includes(rule.field)) {
13075
+ return;
13076
+ }
13077
+ if (isDefined(options.includeFields) && !options.includeFields.includes(rule.field)) {
13078
+ return;
13079
+ }
13080
+ return rule;
13081
+ }
13082
+ });
13083
+ }
13084
+ function renameRuleSetFields(ruleset, replacements) {
13085
+ return transformRuleSet(ruleset, (rule) => {
13086
+ if (isDefined(rule.field)) {
13087
+ rule.field = rule.field in replacements ? replacements[rule.field] : rule.field;
13088
+ return rule;
13089
+ }
13090
+ });
13091
+ }
13092
+ function transformRuleSet(ruleSet, transformFn, clone = true) {
13093
+ if (clone) {
13094
+ ruleSet = cloneDeep(ruleSet);
13095
+ }
13096
+ ruleSet.rules = ruleSet.rules.map((r) => {
13097
+ if (isRule(r)) {
13098
+ return transformFn(r);
13099
+ } else if (isRuleSet(r)) {
13100
+ return transformRuleSet(r, transformFn, false);
13101
+ }
13102
+ }).filter(isRuleOrRuleset);
13103
+ return ruleSet;
13104
+ }
13105
+ const isRule = (r) => isObjectFull(r) && "field" in r;
13106
+ const isRuleSet = (r) => isObjectFull(r) && "fields" in r;
13107
+ const isRuleOrRuleset = (r) => isRule(r) || isRuleSet(r);
13108
+
13109
+ function whereClausesFromRuleSet(rule, config, options) {
13110
+ if (isRule(rule)) {
13111
+ if (!rule.enabled) {
13112
+ return void 0;
13113
+ }
13114
+ if (isNil(rule.field) || isNil(rule.operator)) {
13115
+ console.warn(`flowQueryConverter: Skipping rule with missing field or operator`, rule);
13116
+ return void 0;
13117
+ }
13118
+ const field = config.fields[rule.field];
13119
+ if (!field) {
13120
+ console.warn(`flowQueryConverter: Skipping unknown field '${rule.field}' in rule`, rule);
13121
+ return void 0;
13122
+ }
13123
+ if (isNil(rule.value) && field.nullable !== true) {
13124
+ console.warn(`flowQueryConverter: Skipping nil field '${rule.field}' in rule (non-nullable)`, rule);
13125
+ return void 0;
13126
+ }
13127
+ let fieldName = rule.field;
13128
+ if (options?.renameFields && fieldName in options.renameFields) {
13129
+ fieldName = options.renameFields[fieldName];
13130
+ }
13131
+ let clause = ["is null", "not null"].includes(rule.operator) || !isNil(rule.value) ? { [fieldName]: predicateFromRule(rule, config) } : {};
13132
+ if ((rule.operator === "!=" || rule.operator === "not like") && isObjectFull(clause)) {
13133
+ clause = { $or: [{ [fieldName]: { $is: null } }, clause] };
13134
+ }
13135
+ return clause;
13136
+ } else {
13137
+ const condition = rule.condition === "and" ? "$and" : "$or";
13138
+ const rules = rule.rules.map((r) => whereClausesFromRuleSet(r, config, options)).filter((r) => isObjectFull(r));
13139
+ return rules.length ? { [condition]: rules } : {};
13140
+ }
13141
+ }
13142
+ function predicateFromRule(rule, config) {
13143
+ const field = config.fields[rule.field];
13144
+ let operator;
13145
+ let value = rule.value;
13146
+ if (isFunction(field.convertValue)) {
13147
+ value = field.convertValue(value);
13148
+ }
13149
+ switch (rule.operator) {
13150
+ case "=":
13151
+ operator = "$eq";
13152
+ break;
13153
+ case "!=":
13154
+ operator = "$ne";
13155
+ break;
13156
+ case "<":
13157
+ operator = "$lt";
13158
+ break;
13159
+ case "<=":
13160
+ operator = "$lte";
13161
+ break;
13162
+ case ">":
13163
+ operator = "$gt";
13164
+ break;
13165
+ case ">=":
13166
+ operator = "$gte";
13167
+ break;
13168
+ case "in":
13169
+ operator = "$in";
13170
+ break;
13171
+ case "not in":
13172
+ operator = "$notIn";
13173
+ break;
13174
+ case "like":
13175
+ operator = "$iLike";
13176
+ break;
13177
+ case "not like":
13178
+ operator = "$notILike";
13179
+ break;
13180
+ case "contains":
13181
+ operator = "$iLike";
13182
+ value = `%${value}%`;
13183
+ break;
13184
+ case "is null":
13185
+ operator = "$is";
13186
+ value = null;
13187
+ break;
13188
+ case "not null":
13189
+ operator = "$not";
13190
+ value = null;
13191
+ break;
13192
+ case "between":
13193
+ operator = "$between";
13194
+ break;
13195
+ default:
13196
+ throw new Error(`Unrecognized query operator '${rule.operator}'`);
13197
+ }
13198
+ if (config.fields?.[rule.field]?.type === "datetime") {
13199
+ if (rule.operator === "between") {
13200
+ value = [DateTime.fromISO(value[0] || 0).toISO(), DateTime.fromISO(value[1] || 0).toISO()];
13201
+ } else {
13202
+ value = DateTime.fromISO(value || 0).toISO();
13203
+ }
13204
+ }
13205
+ return { [operator]: value };
13206
+ }
13207
+ const converter = (ruleset, config, options) => {
13208
+ if (options) {
13209
+ ruleset = filterRuleSet(ruleset, options);
13210
+ }
13211
+ return whereClausesFromRuleSet(ruleset, config, options);
13212
+ };
13213
+
13069
13214
  function getDefault(defaultVal, fallback) {
13070
13215
  if (isFunction(defaultVal)) {
13071
13216
  return defaultVal();
@@ -13075,15 +13220,14 @@ function getDefault(defaultVal, fallback) {
13075
13220
  const defaultStringTemplate = (rule, field, qb, update) => {
13076
13221
  const handleChange = (ev) => {
13077
13222
  const target = ev.target;
13078
- rule.value = field.fromDisplayValue?.(target.value) ?? target.value;
13223
+ rule.value = target.value === "" ? void 0 : target.value;
13079
13224
  target.setCustomValidity?.(field.validator?.(rule) ?? "");
13080
13225
  update();
13081
13226
  };
13082
- const value = rule.value && field.toDisplayValue ? field.toDisplayValue(rule.value) : rule.value;
13083
13227
  return html`
13084
13228
  <flow-ui-input
13085
13229
  class="query-builder__rule-value-control"
13086
- value=${ifDefined(value)}
13230
+ value=${rule.value ?? ""}
13087
13231
  size=${qb.size}
13088
13232
  ?disabled=${!rule.enabled}
13089
13233
  @flow-ui-change=${handleChange}
@@ -13093,7 +13237,7 @@ const defaultStringTemplate = (rule, field, qb, update) => {
13093
13237
  const defaultNumberTemplate = (rule, field, qb, update) => {
13094
13238
  const handleChange = (ev) => {
13095
13239
  const target = ev.target;
13096
- rule.value = field.fromDisplayValue?.(+target.value) ?? target.value;
13240
+ rule.value = target.value === "" ? void 0 : +target.value;
13097
13241
  target.setCustomValidity?.(field.validator?.(rule) ?? "");
13098
13242
  update();
13099
13243
  };
@@ -13101,7 +13245,7 @@ const defaultNumberTemplate = (rule, field, qb, update) => {
13101
13245
  <flow-ui-input
13102
13246
  class="query-builder__rule-value-control"
13103
13247
  type="number"
13104
- value=${field.toDisplayValue ? field.toDisplayValue(rule.value) : rule.value}
13248
+ value=${rule.value ?? ""}
13105
13249
  size=${qb.size}
13106
13250
  min=${ifDefined(field.min)}
13107
13251
  max=${ifDefined(field.max)}
@@ -13114,7 +13258,7 @@ const defaultNumberTemplate = (rule, field, qb, update) => {
13114
13258
  const defaultDateTimeTemplate = (rule, field, qb, update) => {
13115
13259
  const handleChange = (ev) => {
13116
13260
  const target = ev.target;
13117
- rule.value = field.fromDisplayValue?.(target.value) ?? target.value;
13261
+ rule.value = target.value === "" ? void 0 : target.value;
13118
13262
  target.setCustomValidity(field.validator?.(rule) ?? "");
13119
13263
  update();
13120
13264
  };
@@ -13124,8 +13268,9 @@ const defaultDateTimeTemplate = (rule, field, qb, update) => {
13124
13268
  return html`
13125
13269
  <flow-ui-date-time-picker
13126
13270
  class="query-builder__rule-value-control"
13127
- value=${rule.value}
13271
+ value=${rule.value ?? ""}
13128
13272
  size=${qb.size}
13273
+ placeholder="Enter a date/time"
13129
13274
  format=${ifDefined(format)}
13130
13275
  timezone=${ifDefined(timezone)}
13131
13276
  locale=${ifDefined(locale)}
@@ -13137,7 +13282,7 @@ const defaultDateTimeTemplate = (rule, field, qb, update) => {
13137
13282
  const defaultDateTemplate = (rule, field, qb, update) => {
13138
13283
  const handleChange = (ev) => {
13139
13284
  const target = ev.target;
13140
- rule.value = field.fromDisplayValue?.(target.value) ?? target.value;
13285
+ rule.value = target.value === "" ? void 0 : target.value;
13141
13286
  target.setCustomValidity(field.validator?.(rule) ?? "");
13142
13287
  update();
13143
13288
  };
@@ -13147,9 +13292,10 @@ const defaultDateTemplate = (rule, field, qb, update) => {
13147
13292
  return html`
13148
13293
  <flow-ui-date-time-picker
13149
13294
  class="query-builder__rule-value-control"
13150
- value=${rule.value}
13295
+ value=${rule.value ?? ""}
13151
13296
  display-mode="date"
13152
13297
  size=${qb.size}
13298
+ placeholder="Enter a date"
13153
13299
  format=${ifDefined(format)}
13154
13300
  timezone=${ifDefined(timezone)}
13155
13301
  locale=${ifDefined(locale)}
@@ -13161,7 +13307,7 @@ const defaultDateTemplate = (rule, field, qb, update) => {
13161
13307
  const defaultTimeTemplate = (rule, field, qb, update) => {
13162
13308
  const handleChange = (ev) => {
13163
13309
  const target = ev.target;
13164
- rule.value = field.fromDisplayValue?.(target.value) ?? target.value;
13310
+ rule.value = target.value === "" ? void 0 : target.value;
13165
13311
  target.setCustomValidity(field.validator?.(rule) ?? "");
13166
13312
  update();
13167
13313
  };
@@ -13171,9 +13317,10 @@ const defaultTimeTemplate = (rule, field, qb, update) => {
13171
13317
  return html`
13172
13318
  <flow-ui-date-time-picker
13173
13319
  class="query-builder__rule-value-control"
13174
- value=${rule.value}
13320
+ value=${rule.value ?? ""}
13175
13321
  display-mode="time"
13176
13322
  size=${qb.size}
13323
+ placeholder="Enter a time"
13177
13324
  format=${ifDefined(format)}
13178
13325
  timezone=${ifDefined(timezone)}
13179
13326
  locale=${ifDefined(locale)}
@@ -13185,14 +13332,14 @@ const defaultTimeTemplate = (rule, field, qb, update) => {
13185
13332
  const defaultSelectTemplate = (rule, field, qb, update) => {
13186
13333
  const handleChange = (ev) => {
13187
13334
  const target = ev.target;
13188
- rule.value = field.fromDisplayValue?.(target.value) ?? target.value;
13335
+ rule.value = target.value === "" ? void 0 : target.value;
13189
13336
  target.setCustomValidity(field.validator?.(rule) ?? "");
13190
13337
  update();
13191
13338
  };
13192
13339
  return html`
13193
13340
  <flow-ui-select
13194
13341
  class="query-builder__rule-value-control"
13195
- value=${field.toDisplayValue ? field.toDisplayValue(rule.value) : rule.value}
13342
+ value=${rule.value ?? ""}
13196
13343
  size=${qb.size}
13197
13344
  ?disabled=${!rule.enabled}
13198
13345
  @flow-ui-change=${handleChange}
@@ -13208,14 +13355,14 @@ const defaultSelectTemplate = (rule, field, qb, update) => {
13208
13355
  const defaultMultiSelectTemplate = (rule, field, qb, update) => {
13209
13356
  const handleChange = (ev) => {
13210
13357
  const target = ev.target;
13211
- rule.value = field.fromDisplayValue?.(target.value) ?? target.value;
13358
+ rule.value = isArrayFull(target.value) ? target.value : void 0;
13212
13359
  target.setCustomValidity(field.validator?.(rule) ?? "");
13213
13360
  update();
13214
13361
  };
13215
13362
  return html`
13216
13363
  <flow-ui-select
13217
13364
  class="query-builder__rule-value-control"
13218
- value=${field.toDisplayValue ? field.toDisplayValue(rule.value) : rule.value}
13365
+ .value=${rule.value ?? []}
13219
13366
  size=${qb.size}
13220
13367
  ?disabled=${!rule.enabled}
13221
13368
  @flow-ui-change=${handleChange}
@@ -13500,6 +13647,65 @@ const _FlowQueryBuilder = class _FlowQueryBuilder extends FlowRdfElement {
13500
13647
  static registerFieldDefinition(type, fieldDefinition) {
13501
13648
  _FlowQueryBuilder.fieldDefinitions.set(type, fieldDefinition);
13502
13649
  }
13650
+ /**
13651
+ * Static helper method to determine if supplied argument is
13652
+ * a `FlowQueryBuilderRule`.
13653
+ *
13654
+ * @param value A value to test
13655
+ */
13656
+ static isRule(value) {
13657
+ return isRule(value);
13658
+ }
13659
+ /**
13660
+ * Static helper method to determine if supplied argument is
13661
+ * a `FlowQueryBuilderRuleSet`.
13662
+ *
13663
+ * @param value A value to test
13664
+ * @returns `true` if supplied value is a FlowQueryBuilderRuleSet
13665
+ */
13666
+ static isRuleSet(value) {
13667
+ return isRuleSet(value);
13668
+ }
13669
+ /**
13670
+ * Static helper method to recursively filter a `FlowQueryBuilderRuleSet`.
13671
+ *
13672
+ * This can be used to sanitize user queries before they are executed.
13673
+ *
13674
+ * @param ruleset Rule set to filter
13675
+ * @param options Fields to include or exclude
13676
+ * @returns The filtered rule set
13677
+ */
13678
+ static filterRuleSet(ruleset, options) {
13679
+ return filterRuleSet(ruleset, options);
13680
+ }
13681
+ /**
13682
+ * Static helper method to rename fields in a `FlowQueryBuilderRuleSet`.
13683
+ *
13684
+ * @param ruleSet A `FlowQueryBuilderRuleSet` to rename.
13685
+ * @param replacements Mapping of string to string for renaming fields.
13686
+ * @returns The renamed rule set.
13687
+ */
13688
+ static renameRuleSetFields(ruleset, replacements) {
13689
+ return renameRuleSetFields(ruleset, replacements);
13690
+ }
13691
+ /**
13692
+ * Static helper method to recursively apply a transform function to each rule
13693
+ * in a `FlowQueryBuilderRuleSet`.
13694
+ *
13695
+ * The transform fn should expect a single FlowQueryBuilderRule and return:
13696
+ *
13697
+ * - the same rule unmodifed or modified in place
13698
+ * - `undefined` to exclude the rule from the rule set
13699
+ *
13700
+ * This can be used to sanitize rule sets before they are used to perform queries.
13701
+ *
13702
+ * @param ruleSet query builder rule set
13703
+ * @param transformFn transform function
13704
+ * @returns The modified rule set
13705
+ */
13706
+ static transformRuleSet(ruleSet, transformFn) {
13707
+ return transformRuleSet(ruleSet, transformFn);
13708
+ }
13503
13709
  valueTemplateForRule(_rule, field) {
13504
13710
  const fieldDef = field?.type && _FlowQueryBuilder.fieldDefinitions.get(field.type);
13505
13711
  if (fieldDef?.template) {
@@ -13595,7 +13801,6 @@ const _FlowQueryBuilder = class _FlowQueryBuilder extends FlowRdfElement {
13595
13801
  emitValueChange() {
13596
13802
  if (!this.subQueryBuilder) {
13597
13803
  this.value = cloneDeep(this.value);
13598
- console.log("top-level value", this.value);
13599
13804
  }
13600
13805
  this.emit("flow-ui-change");
13601
13806
  }
@@ -13758,7 +13963,9 @@ const _FlowQueryBuilder = class _FlowQueryBuilder extends FlowRdfElement {
13758
13963
  }
13759
13964
  emptyRulesetTemplate() {
13760
13965
  return html`
13761
- <div class="query-builder__empty-ruleset"><i>A rule set cannot be empty. Please add a rule or remove the set.</div>
13966
+ <div class="query-builder__empty-ruleset">
13967
+ <i>A rule set cannot be empty. Please add a rule or remove the set.</i>
13968
+ </div>
13762
13969
  `;
13763
13970
  }
13764
13971
  render() {
@@ -13826,6 +14033,11 @@ const _FlowQueryBuilder = class _FlowQueryBuilder extends FlowRdfElement {
13826
14033
  };
13827
14034
  _FlowQueryBuilder.styles = styles$o;
13828
14035
  _FlowQueryBuilder.fieldDefinitions = /* @__PURE__ */ new Map();
14036
+ // Static converts and helpers
14037
+ /**
14038
+ *
14039
+ */
14040
+ _FlowQueryBuilder.convertToFlowQuery = converter;
13829
14041
  __decorateClass$o([
13830
14042
  property({ type: Object, reflect: false })
13831
14043
  ], _FlowQueryBuilder.prototype, "value", 2);
@@ -23146,7 +23358,7 @@ const translation = {
23146
23358
  };
23147
23359
  registerTranslation(translation);
23148
23360
 
23149
- const version = "0.0.29";
23361
+ const version = "0.0.30";
23150
23362
 
23151
23363
  const CONSOLE_HIGHLIGHT_STYLE = `
23152
23364
  padding: 2px 4px;