@limetech/lime-crm-building-blocks 1.100.0 → 1.101.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/lime-crm-building-blocks.cjs.js +1 -1
  3. package/dist/cjs/limebb-lime-query-builder.cjs.entry.js +177 -204
  4. package/dist/cjs/{limebb-lime-query-filter-builder_3.cjs.entry.js → limebb-lime-query-filter-builder_4.cjs.entry.js} +86 -1
  5. package/dist/cjs/limebb-lime-query-filter-comparison_2.cjs.entry.js +147 -0
  6. package/dist/cjs/{limebb-lime-query-filter-comparison_5.cjs.entry.js → limebb-lime-query-filter-group_3.cjs.entry.js} +5 -333
  7. package/dist/cjs/limebb-lime-query-order-by-item.cjs.entry.js +51 -0
  8. package/dist/cjs/limebb-live-docs-info.cjs.entry.js +2 -2
  9. package/dist/cjs/limebb-locale-picker.cjs.entry.js +1 -1
  10. package/dist/cjs/limebb-mention-group-counter.cjs.entry.js +2 -2
  11. package/dist/cjs/limebb-navigation-button_2.cjs.entry.js +3 -3
  12. package/dist/cjs/limebb-notification-item.cjs.entry.js +1 -1
  13. package/dist/cjs/limebb-percentage-visualizer.cjs.entry.js +2 -2
  14. package/dist/cjs/limebb-property-selector.cjs.entry.js +234 -0
  15. package/dist/cjs/limebb-text-editor.cjs.entry.js +1 -1
  16. package/dist/cjs/limebb-trend-indicator.cjs.entry.js +1 -1
  17. package/dist/cjs/loader.cjs.js +1 -1
  18. package/dist/collection/collection-manifest.json +2 -2
  19. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison.js +1 -1
  20. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.js +1 -1
  21. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-not.js +1 -1
  22. package/dist/collection/components/lime-query-builder/expressions/lime-query-value-input.js +7 -7
  23. package/dist/collection/components/lime-query-builder/lime-query-builder.css +2 -5
  24. package/dist/collection/components/lime-query-builder/lime-query-builder.js +19 -19
  25. package/dist/collection/components/lime-query-builder/lime-query-validation.js +160 -26
  26. package/dist/collection/components/lime-query-builder/lime-query.types.js +1 -57
  27. package/dist/collection/components/lime-query-builder/limetype-field/limetype-field.js +1 -1
  28. package/dist/collection/components/lime-query-builder/order-by/order-by-editor.css +72 -0
  29. package/dist/collection/components/lime-query-builder/order-by/order-by-editor.js +252 -0
  30. package/dist/collection/components/lime-query-builder/order-by/order-by-item.css +45 -0
  31. package/dist/collection/components/lime-query-builder/order-by/order-by-item.js +173 -0
  32. package/dist/collection/components/limeobject/file-viewer/live-docs-info.js +2 -2
  33. package/dist/collection/components/locale-picker/locale-picker.js +1 -1
  34. package/dist/collection/components/notification-list/notification-item/notification-item.js +1 -1
  35. package/dist/collection/components/percentage-visualizer/percentage-visualizer.js +2 -2
  36. package/dist/collection/components/summary-popover/summary-popover.js +3 -3
  37. package/dist/collection/components/text-editor/mention-group-counter.js +2 -2
  38. package/dist/collection/components/text-editor/text-editor.js +1 -1
  39. package/dist/collection/components/trend-indicator/trend-indicator.js +1 -1
  40. package/dist/components/lime-query-filter-comparison.js +1 -1
  41. package/dist/components/lime-query-filter-expression.js +2 -2
  42. package/dist/components/lime-query-value-input.js +3 -3
  43. package/dist/components/limebb-lime-query-builder.js +201 -215
  44. package/dist/components/limebb-lime-query-order-by-editor.d.ts +11 -0
  45. package/dist/components/limebb-lime-query-order-by-editor.js +6 -0
  46. package/dist/components/limebb-lime-query-order-by-item.d.ts +11 -0
  47. package/dist/components/limebb-lime-query-order-by-item.js +6 -0
  48. package/dist/components/limebb-locale-picker.js +1 -1
  49. package/dist/components/limebb-mention-group-counter.js +2 -2
  50. package/dist/components/limebb-percentage-visualizer.js +2 -2
  51. package/dist/components/limebb-text-editor.js +1 -1
  52. package/dist/components/limebb-trend-indicator.js +1 -1
  53. package/dist/components/limetype-field.js +1 -1
  54. package/dist/components/live-docs-info.js +2 -2
  55. package/dist/components/notification-item.js +1 -1
  56. package/dist/components/order-by-editor.js +123 -0
  57. package/dist/components/order-by-item.js +73 -0
  58. package/dist/components/property-selector.js +1 -1
  59. package/dist/components/summary-popover.js +3 -3
  60. package/dist/esm/lime-crm-building-blocks.js +1 -1
  61. package/dist/esm/limebb-lime-query-builder.entry.js +179 -206
  62. package/dist/esm/{limebb-lime-query-filter-builder_3.entry.js → limebb-lime-query-filter-builder_4.entry.js} +86 -2
  63. package/dist/esm/limebb-lime-query-filter-comparison_2.entry.js +142 -0
  64. package/dist/esm/{limebb-lime-query-filter-comparison_5.entry.js → limebb-lime-query-filter-group_3.entry.js} +7 -333
  65. package/dist/esm/limebb-lime-query-order-by-item.entry.js +47 -0
  66. package/dist/esm/limebb-live-docs-info.entry.js +2 -2
  67. package/dist/esm/limebb-locale-picker.entry.js +1 -1
  68. package/dist/esm/limebb-mention-group-counter.entry.js +2 -2
  69. package/dist/esm/limebb-navigation-button_2.entry.js +3 -3
  70. package/dist/esm/limebb-notification-item.entry.js +1 -1
  71. package/dist/esm/limebb-percentage-visualizer.entry.js +2 -2
  72. package/dist/esm/limebb-property-selector.entry.js +230 -0
  73. package/dist/esm/limebb-text-editor.entry.js +1 -1
  74. package/dist/esm/limebb-trend-indicator.entry.js +1 -1
  75. package/dist/esm/loader.js +1 -1
  76. package/dist/esm/{property-resolution-fde2375e.js → property-resolution-c21a1369.js} +1 -1
  77. package/dist/lime-crm-building-blocks/lime-crm-building-blocks.esm.js +1 -1
  78. package/dist/lime-crm-building-blocks/{p-631ca5a5.entry.js → p-0cd036ed.entry.js} +1 -1
  79. package/dist/lime-crm-building-blocks/p-2725671e.entry.js +1 -0
  80. package/dist/lime-crm-building-blocks/{p-9cac4de2.entry.js → p-425eaba2.entry.js} +1 -1
  81. package/dist/lime-crm-building-blocks/{p-e8946134.entry.js → p-5cf4898d.entry.js} +1 -1
  82. package/dist/lime-crm-building-blocks/p-67c174d0.entry.js +1 -0
  83. package/dist/lime-crm-building-blocks/p-6aa216ec.entry.js +1 -0
  84. package/dist/lime-crm-building-blocks/{p-93cadc1e.entry.js → p-8601eab5.entry.js} +1 -1
  85. package/dist/lime-crm-building-blocks/{p-b9b954d9.entry.js → p-8c2fb1c9.entry.js} +1 -1
  86. package/dist/lime-crm-building-blocks/{p-3122ea05.entry.js → p-92dfc5f8.entry.js} +1 -1
  87. package/dist/lime-crm-building-blocks/{p-569c86b5.entry.js → p-a1ee8990.entry.js} +1 -1
  88. package/dist/lime-crm-building-blocks/p-abfc7815.entry.js +1 -0
  89. package/dist/lime-crm-building-blocks/{p-e0ab1554.js → p-b748c770.js} +1 -1
  90. package/dist/lime-crm-building-blocks/p-ccf34631.entry.js +1 -0
  91. package/dist/lime-crm-building-blocks/{p-36ea13c0.entry.js → p-d84874dc.entry.js} +1 -1
  92. package/dist/lime-crm-building-blocks/p-f9efca1d.entry.js +1 -0
  93. package/dist/types/components/lime-query-builder/expressions/lime-query-value-input.d.ts +2 -3
  94. package/dist/types/components/lime-query-builder/lime-query-builder.d.ts +9 -6
  95. package/dist/types/components/lime-query-builder/lime-query.types.d.ts +0 -72
  96. package/dist/types/components/lime-query-builder/order-by/order-by-editor.d.ts +58 -0
  97. package/dist/types/components/lime-query-builder/order-by/order-by-item.d.ts +37 -0
  98. package/dist/types/components.d.ts +165 -205
  99. package/package.json +1 -1
  100. package/dist/cjs/limebb-lime-query-filter-and.cjs.entry.js +0 -80
  101. package/dist/cjs/limebb-lime-query-filter-expression.cjs.entry.js +0 -45
  102. package/dist/cjs/limebb-lime-query-filter-or.cjs.entry.js +0 -68
  103. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-and.css +0 -121
  104. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-and.js +0 -249
  105. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-or.css +0 -123
  106. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-or.js +0 -237
  107. package/dist/collection/components/lime-query-builder/filter-conversion.js +0 -255
  108. package/dist/components/limebb-lime-query-filter-and.d.ts +0 -11
  109. package/dist/components/limebb-lime-query-filter-and.js +0 -135
  110. package/dist/components/limebb-lime-query-filter-or.d.ts +0 -11
  111. package/dist/components/limebb-lime-query-filter-or.js +0 -123
  112. package/dist/esm/limebb-lime-query-filter-and.entry.js +0 -76
  113. package/dist/esm/limebb-lime-query-filter-expression.entry.js +0 -41
  114. package/dist/esm/limebb-lime-query-filter-or.entry.js +0 -64
  115. package/dist/lime-crm-building-blocks/p-24aeb928.entry.js +0 -1
  116. package/dist/lime-crm-building-blocks/p-422f6d51.entry.js +0 -1
  117. package/dist/lime-crm-building-blocks/p-67dbaa4c.entry.js +0 -1
  118. package/dist/lime-crm-building-blocks/p-6d119dab.entry.js +0 -1
  119. package/dist/lime-crm-building-blocks/p-91732502.entry.js +0 -1
  120. package/dist/lime-crm-building-blocks/p-b198194a.entry.js +0 -1
  121. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-and.d.ts +0 -57
  122. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-or.d.ts +0 -56
  123. package/dist/types/components/lime-query-builder/filter-conversion.d.ts +0 -31
@@ -139,6 +139,90 @@ const LimeQueryFilterBuilderComponent = class {
139
139
  };
140
140
  LimeQueryFilterBuilderComponent.style = LimebbLimeQueryFilterBuilderStyle0;
141
141
 
142
+ const orderByEditorCss = ":host(limebb-lime-query-order-by-editor){display:block;width:100%}.order-by-editor{display:flex;flex-direction:column;gap:1rem;padding:1rem}.header{display:flex;justify-content:space-between;align-items:center;gap:1rem}.header h4{margin:0;font-size:1rem;font-weight:600;color:rgb(var(--contrast-1000))}.order-by-list{display:flex;flex-direction:column;gap:1rem;padding:0.5rem;border:1px solid rgb(var(--contrast-300));border-radius:0.25rem;background-color:rgb(var(--contrast-50));min-height:4rem}.order-by-item{padding:0.5rem;border-radius:0.25rem;transition:background-color 0.2s}.order-by-item:hover{background-color:rgb(var(--contrast-100))}.actions{display:flex;justify-content:flex-start}.summary{display:flex;justify-content:space-between;align-items:center;padding-top:0.5rem;border-top:1px solid rgb(var(--contrast-300))}.summary .count{font-size:0.875rem;font-weight:500;color:rgb(var(--contrast-900))}.empty-state{padding:2rem;text-align:center;color:rgb(var(--contrast-700));font-style:italic}.empty-state p{margin:0}";
143
+ const LimebbLimeQueryOrderByEditorStyle0 = orderByEditorCss;
144
+
145
+ const OrderByEditor = class {
146
+ constructor(hostRef) {
147
+ index.registerInstance(this, hostRef);
148
+ this.change = index.createEvent(this, "change", 7);
149
+ /**
150
+ * Optional label
151
+ */
152
+ this.label = 'Sort Order';
153
+ this.items = [];
154
+ this.handleItemChange = (index) => (event) => {
155
+ event.stopPropagation();
156
+ const newItems = [...this.items];
157
+ if (event.detail === null) {
158
+ // Remove item
159
+ newItems.splice(index, 1);
160
+ }
161
+ else {
162
+ // Update item
163
+ newItems[index] = event.detail;
164
+ }
165
+ this.items = newItems;
166
+ this.emitChange();
167
+ };
168
+ this.handleAddSortField = () => {
169
+ // Add new item with empty path and ASC direction
170
+ this.items = [...this.items, { '': 'ASC' }];
171
+ this.emitChange();
172
+ };
173
+ }
174
+ componentWillLoad() {
175
+ if (this.value && this.value.length > 0) {
176
+ this.items = [...this.value];
177
+ }
178
+ }
179
+ handleValueChange(newValue) {
180
+ if (!newValue) {
181
+ return;
182
+ }
183
+ // Check if items have changed
184
+ const itemsChanged = newValue.length !== this.items.length ||
185
+ !newValue.every((item, index) => {
186
+ const currentItem = this.items[index];
187
+ if (!currentItem)
188
+ return false;
189
+ const itemKey = Object.keys(item)[0];
190
+ const currentKey = Object.keys(currentItem)[0];
191
+ return (itemKey === currentKey &&
192
+ item[itemKey] === currentItem[currentKey]);
193
+ });
194
+ if (itemsChanged) {
195
+ this.items = newValue.length > 0 ? [...newValue] : [];
196
+ }
197
+ }
198
+ render() {
199
+ if (!this.limetype) {
200
+ return (index.h("div", { class: "empty-state" }, index.h("p", null, "Select a limetype to configure sorting")));
201
+ }
202
+ return (index.h("div", { class: "order-by-editor" }, index.h("div", { class: "header" }, index.h("h4", null, this.label)), this.renderOrderByList(), this.renderActions()));
203
+ }
204
+ renderOrderByList() {
205
+ if (this.items.length === 0) {
206
+ return null;
207
+ }
208
+ return (index.h("div", { class: "order-by-list" }, this.items.map((item, index) => this.renderItem(item, index))));
209
+ }
210
+ renderActions() {
211
+ return (index.h("div", { class: "actions" }, index.h("limel-button", { label: "Add Sort Field", icon: "plus_math", onClick: this.handleAddSortField })));
212
+ }
213
+ renderItem(item, index$1) {
214
+ const propertyPath = Object.keys(item)[0] || '';
215
+ return (index.h("limebb-lime-query-order-by-item", { key: `${propertyPath}-${index$1}`, class: "order-by-item", platform: this.platform, context: this.context, limetype: this.limetype, item: item, onItemChange: this.handleItemChange(index$1) }));
216
+ }
217
+ emitChange() {
218
+ this.change.emit(this.items);
219
+ }
220
+ static get watchers() { return {
221
+ "value": ["handleValueChange"]
222
+ }; }
223
+ };
224
+ OrderByEditor.style = LimebbLimeQueryOrderByEditorStyle0;
225
+
142
226
  const RELATION_PROPERTY_TYPES = [
143
227
  'belongsto',
144
228
  'hasone',
@@ -224,7 +308,7 @@ const LimetypeField = class {
224
308
  value: '',
225
309
  };
226
310
  options.unshift(emptyOption);
227
- return (index.h("limel-select", { key: 'cf27b83c4751838e85436af443a275b3d7c9dfee', label: this.label, options: options, value: selectedOption, required: this.required, helperText: this.helperText, invalid: invalid, disabled: this.disabled || this.readonly, onChange: this.handleChange }));
311
+ return (index.h("limel-select", { key: 'fd9522c5df730f65a5ac57140bca6c05c5acd63d', label: this.label, options: options, value: selectedOption, required: this.required, helperText: this.helperText, invalid: invalid, disabled: this.disabled || this.readonly, onChange: this.handleChange }));
228
312
  }
229
313
  componentWillRender() {
230
314
  this.updatePropertyFields(this.value || '');
@@ -504,5 +588,6 @@ const ResponseFormatEditor = class {
504
588
  ResponseFormatEditor.style = LimebbResponseFormatEditorStyle0;
505
589
 
506
590
  exports.limebb_lime_query_filter_builder = LimeQueryFilterBuilderComponent;
591
+ exports.limebb_lime_query_order_by_editor = OrderByEditor;
507
592
  exports.limebb_limetype_field = LimetypeField;
508
593
  exports.limebb_response_format_editor = ResponseFormatEditor;
@@ -0,0 +1,147 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-ff255a0d.js');
6
+ const index_esm = require('./index.esm-d785eb6e.js');
7
+
8
+ const limeQueryFilterComparisonCss = ".expression-container{display:flex;flex-direction:row;align-items:flex-start;gap:1rem;flex-wrap:wrap}.expression-container>*{flex-grow:2;width:30%;max-width:calc(100% - 3.25rem)}.expression-container>.operator{flex-grow:1;width:calc(30% + 1rem);min-width:4rem}.expression-container>.remove{flex-grow:0;width:auto;margin-left:auto}@media (max-width: 768px){.expression-container{flex-direction:column}.expression-container>*{width:100%;max-width:100%}.expression-container>.operator{width:100%}.expression-container>.remove{margin-left:0;align-self:flex-end}}";
9
+ const LimebbLimeQueryFilterComparisonStyle0 = limeQueryFilterComparisonCss;
10
+
11
+ const LIME_QUERY_OPERATORS = [
12
+ { value: index_esm.Zt.EQUALS, label: 'Equals', icon: 'equals' },
13
+ { value: index_esm.Zt.NOT_EQUALS, label: 'Not Equals', icon: 'not-equal' },
14
+ {
15
+ value: index_esm.Zt.GREATER,
16
+ label: 'Greater Than',
17
+ icon: 'greater-than',
18
+ applicableTypes: ['integer', 'decimal', 'date', 'time'],
19
+ },
20
+ {
21
+ value: index_esm.Zt.GREATER_OR_EQUAL,
22
+ label: 'Greater or Equal',
23
+ icon: 'greater-or-equal',
24
+ applicableTypes: ['integer', 'decimal', 'date', 'time'],
25
+ },
26
+ {
27
+ value: index_esm.Zt.LESS,
28
+ label: 'Less Than',
29
+ icon: 'less-than',
30
+ applicableTypes: ['integer', 'decimal', 'date', 'time'],
31
+ },
32
+ {
33
+ value: index_esm.Zt.LESS_OR_EQUAL,
34
+ label: 'Less or Equal',
35
+ icon: 'less-or-equal',
36
+ applicableTypes: ['integer', 'decimal', 'date', 'time'],
37
+ },
38
+ { value: index_esm.Zt.IN, label: 'In List', icon: 'list' },
39
+ {
40
+ value: index_esm.Zt.LIKE,
41
+ label: 'Contains',
42
+ icon: '-lime-filter-contain',
43
+ applicableTypes: ['string', 'text'],
44
+ },
45
+ {
46
+ value: index_esm.Zt.BEGINS,
47
+ label: 'Begins With',
48
+ icon: '-lime-filter-begin',
49
+ applicableTypes: ['string', 'text'],
50
+ },
51
+ {
52
+ value: index_esm.Zt.ENDS,
53
+ label: 'Ends With',
54
+ icon: '-lime-filter-end',
55
+ applicableTypes: ['string', 'text'],
56
+ },
57
+ ];
58
+ const LimeQueryFilterComparisonComponent = class {
59
+ constructor(hostRef) {
60
+ index.registerInstance(this, hostRef);
61
+ this.expressionChange = index.createEvent(this, "expressionChange", 7);
62
+ this.handlePropertyChange = (event) => {
63
+ event.stopPropagation();
64
+ this.expressionChange.emit(Object.assign(Object.assign({}, this.expression), { key: event.detail }));
65
+ };
66
+ this.handleOperatorChange = (event) => {
67
+ event.stopPropagation();
68
+ // TODO: Clear value when switching between IN and other operators
69
+ // since array values are incompatible with single-value operators
70
+ this.expressionChange.emit({
71
+ key: this.expression.key,
72
+ op: event.detail.value,
73
+ exp: this.expression.exp,
74
+ });
75
+ };
76
+ this.handleValueChange = (event) => {
77
+ event.stopPropagation();
78
+ this.expressionChange.emit(Object.assign(Object.assign({}, this.expression), { exp: event.detail }));
79
+ };
80
+ this.removeExpression = () => {
81
+ this.expressionChange.emit(undefined);
82
+ };
83
+ }
84
+ render() {
85
+ return (index.h("div", { key: 'a077c982ced9840beec3e574cd3e2e336cff6071', class: "expression" }, this.label && index.h("limel-header", { key: 'fbcb5cf515aac2c8e68d29947c7560684f30822c', heading: this.label }), index.h("div", { key: 'ffea426ea1295ae11aaa3c910f835acbeed24cd9', class: "expression-container" }, this.renderPropertySelector(), this.renderOperator(), this.renderValueInput(), index.h("limel-icon-button", { key: '20064f9fe42a4dfa71b2e1e2d393d50bbe20e2cb', class: "remove", icon: "trash", label: "Remove condition", onClick: this.removeExpression }))));
86
+ }
87
+ renderPropertySelector() {
88
+ return (index.h("limebb-property-selector", { platform: this.platform, context: this.context, label: "Property", limetype: this.limetype, value: this.expression.key, required: true, onChange: this.handlePropertyChange }));
89
+ }
90
+ renderOperator() {
91
+ const operatorHasBeenSet = !!this.expression.op;
92
+ const options = LIME_QUERY_OPERATORS.map((op) => ({
93
+ text: op.label,
94
+ value: op.value,
95
+ icon: op.icon ? { name: op.icon } : undefined,
96
+ }));
97
+ const selectedOption = options.find((o) => o.value === this.expression.op);
98
+ return (index.h("limel-select", { class: "operator", label: "Operator", value: selectedOption, options: options, disabled: !operatorHasBeenSet && !this.expression.key, onChange: this.handleOperatorChange }));
99
+ }
100
+ renderValueInput() {
101
+ if (!this.expression.op) {
102
+ return null;
103
+ }
104
+ return (index.h("limebb-lime-query-value-input", { platform: this.platform, context: this.context, limetype: this.limetype, activeLimetype: this.activeLimetype, propertyPath: this.expression.key, operator: this.expression.op, value: this.expression.exp, onChange: this.handleValueChange }));
105
+ }
106
+ };
107
+ LimeQueryFilterComparisonComponent.style = LimebbLimeQueryFilterComparisonStyle0;
108
+
109
+ const limeQueryFilterExpressionCss = "@charset \"UTF-8\";.expression{display:flex;flex-direction:column;margin-bottom:1rem;gap:1rem}";
110
+ const LimebbLimeQueryFilterExpressionStyle0 = limeQueryFilterExpressionCss;
111
+
112
+ const LimeQueryFilterExpressionComponent = class {
113
+ constructor(hostRef) {
114
+ index.registerInstance(this, hostRef);
115
+ this.expressionChange = index.createEvent(this, "expressionChange", 7);
116
+ this.handleExpressionChange = (event) => {
117
+ event.stopPropagation();
118
+ this.expressionChange.emit(event.detail);
119
+ };
120
+ }
121
+ render() {
122
+ if (!this.expression) {
123
+ return;
124
+ }
125
+ const props = {
126
+ platform: this.platform,
127
+ context: this.context,
128
+ label: this.label,
129
+ limetype: this.limetype,
130
+ activeLimetype: this.activeLimetype,
131
+ };
132
+ if ('key' in this.expression) {
133
+ return (index.h("limebb-lime-query-filter-comparison", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
134
+ }
135
+ if (this.expression.op === index_esm.Zt.AND ||
136
+ this.expression.op === index_esm.Zt.OR) {
137
+ return (index.h("limebb-lime-query-filter-group", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
138
+ }
139
+ if (this.expression.op === index_esm.Zt.NOT) {
140
+ return (index.h("limebb-lime-query-filter-not", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
141
+ }
142
+ }
143
+ };
144
+ LimeQueryFilterExpressionComponent.style = LimebbLimeQueryFilterExpressionStyle0;
145
+
146
+ exports.limebb_lime_query_filter_comparison = LimeQueryFilterComparisonComponent;
147
+ exports.limebb_lime_query_filter_expression = LimeQueryFilterExpressionComponent;
@@ -6,107 +6,6 @@ const index = require('./index-ff255a0d.js');
6
6
  const index_esm = require('./index.esm-d785eb6e.js');
7
7
  const propertyResolution = require('./property-resolution-fb42a46b.js');
8
8
 
9
- const limeQueryFilterComparisonCss = ".expression-container{display:flex;flex-direction:row;align-items:flex-start;gap:1rem;flex-wrap:wrap}.expression-container>*{flex-grow:2;width:30%;max-width:calc(100% - 3.25rem)}.expression-container>.operator{flex-grow:1;width:calc(30% + 1rem);min-width:4rem}.expression-container>.remove{flex-grow:0;width:auto;margin-left:auto}@media (max-width: 768px){.expression-container{flex-direction:column}.expression-container>*{width:100%;max-width:100%}.expression-container>.operator{width:100%}.expression-container>.remove{margin-left:0;align-self:flex-end}}";
10
- const LimebbLimeQueryFilterComparisonStyle0 = limeQueryFilterComparisonCss;
11
-
12
- const LIME_QUERY_OPERATORS = [
13
- { value: index_esm.Zt.EQUALS, label: 'Equals', icon: 'equals' },
14
- { value: index_esm.Zt.NOT_EQUALS, label: 'Not Equals', icon: 'not-equal' },
15
- {
16
- value: index_esm.Zt.GREATER,
17
- label: 'Greater Than',
18
- icon: 'greater-than',
19
- applicableTypes: ['integer', 'decimal', 'date', 'time'],
20
- },
21
- {
22
- value: index_esm.Zt.GREATER_OR_EQUAL,
23
- label: 'Greater or Equal',
24
- icon: 'greater-or-equal',
25
- applicableTypes: ['integer', 'decimal', 'date', 'time'],
26
- },
27
- {
28
- value: index_esm.Zt.LESS,
29
- label: 'Less Than',
30
- icon: 'less-than',
31
- applicableTypes: ['integer', 'decimal', 'date', 'time'],
32
- },
33
- {
34
- value: index_esm.Zt.LESS_OR_EQUAL,
35
- label: 'Less or Equal',
36
- icon: 'less-or-equal',
37
- applicableTypes: ['integer', 'decimal', 'date', 'time'],
38
- },
39
- { value: index_esm.Zt.IN, label: 'In List', icon: 'list' },
40
- {
41
- value: index_esm.Zt.LIKE,
42
- label: 'Contains',
43
- icon: '-lime-filter-contain',
44
- applicableTypes: ['string', 'text'],
45
- },
46
- {
47
- value: index_esm.Zt.BEGINS,
48
- label: 'Begins With',
49
- icon: '-lime-filter-begin',
50
- applicableTypes: ['string', 'text'],
51
- },
52
- {
53
- value: index_esm.Zt.ENDS,
54
- label: 'Ends With',
55
- icon: '-lime-filter-end',
56
- applicableTypes: ['string', 'text'],
57
- },
58
- ];
59
- const LimeQueryFilterComparisonComponent = class {
60
- constructor(hostRef) {
61
- index.registerInstance(this, hostRef);
62
- this.expressionChange = index.createEvent(this, "expressionChange", 7);
63
- this.handlePropertyChange = (event) => {
64
- event.stopPropagation();
65
- this.expressionChange.emit(Object.assign(Object.assign({}, this.expression), { key: event.detail }));
66
- };
67
- this.handleOperatorChange = (event) => {
68
- event.stopPropagation();
69
- // TODO: Clear value when switching between IN and other operators
70
- // since array values are incompatible with single-value operators
71
- this.expressionChange.emit({
72
- key: this.expression.key,
73
- op: event.detail.value,
74
- exp: this.expression.exp,
75
- });
76
- };
77
- this.handleValueChange = (event) => {
78
- event.stopPropagation();
79
- this.expressionChange.emit(Object.assign(Object.assign({}, this.expression), { exp: event.detail }));
80
- };
81
- this.removeExpression = () => {
82
- this.expressionChange.emit(undefined);
83
- };
84
- }
85
- render() {
86
- return (index.h("div", { key: '668e0f05bdb1fb25ffd652ea650c34e5431a3332', class: "expression" }, this.label && index.h("limel-header", { key: '5034070b58afe31cf90699dd2a27f884e647f540', heading: this.label }), index.h("div", { key: '14a2b1270e5e6d7e158e29ebc5f61051e5670e80', class: "expression-container" }, this.renderPropertySelector(), this.renderOperator(), this.renderValueInput(), index.h("limel-icon-button", { key: 'b69bde6e88c40d2623ef015794db28cec3676c73', class: "remove", icon: "trash", label: "Remove condition", onClick: this.removeExpression }))));
87
- }
88
- renderPropertySelector() {
89
- return (index.h("limebb-property-selector", { platform: this.platform, context: this.context, label: "Property", limetype: this.limetype, value: this.expression.key, required: true, onChange: this.handlePropertyChange }));
90
- }
91
- renderOperator() {
92
- const operatorHasBeenSet = !!this.expression.op;
93
- const options = LIME_QUERY_OPERATORS.map((op) => ({
94
- text: op.label,
95
- value: op.value,
96
- icon: op.icon ? { name: op.icon } : undefined,
97
- }));
98
- const selectedOption = options.find((o) => o.value === this.expression.op);
99
- return (index.h("limel-select", { class: "operator", label: "Operator", value: selectedOption, options: options, disabled: !operatorHasBeenSet && !this.expression.key, onChange: this.handleOperatorChange }));
100
- }
101
- renderValueInput() {
102
- if (!this.expression.op) {
103
- return null;
104
- }
105
- return (index.h("limebb-lime-query-value-input", { platform: this.platform, context: this.context, limetype: this.limetype, activeLimetype: this.activeLimetype, propertyPath: this.expression.key, operator: this.expression.op, value: this.expression.exp, onChange: this.handleValueChange }));
106
- }
107
- };
108
- LimeQueryFilterComparisonComponent.style = LimebbLimeQueryFilterComparisonStyle0;
109
-
110
9
  const limeQueryFilterGroupCss = "@charset \"UTF-8\";.expression{display:flex;flex-direction:column;margin-bottom:1rem;gap:0;background-color:rgb(var(--contrast-100));border:1px solid rgb(var(--contrast-500));border-radius:0.75rem}.expression .clickable-header{cursor:pointer;user-select:none}.expression .clickable-header:hover{background-color:rgb(var(--contrast-200))}.expression>ul{margin-top:0;margin-right:1rem;margin-bottom:1rem;margin-left:1rem;padding-left:1rem;list-style:disc}.expression>ul li{margin-top:1rem}.expression>ul li.add-button{list-style:none;display:flex;gap:0.5rem}";
111
10
  const LimebbLimeQueryFilterGroupStyle0 = limeQueryFilterGroupCss;
112
11
 
@@ -181,7 +80,7 @@ const LimeQueryFilterGroupComponent = class {
181
80
  }
182
81
  render() {
183
82
  const subheading = this.getSubheading();
184
- return (index.h("div", { key: '43a1d99fd896e3ad49dd97594e54bccaf74c3aa0', class: "expression" }, subheading && (index.h("limel-header", { key: '534eb0a3db2f0194e8a28e2fb071beb545f38458', subheading: subheading, onClick: this.handleToggleOperator, class: "clickable-header" })), index.h("ul", { key: '9d29d98ab034bf2878e7dc19828bc045dbdd492f' }, this.expression.exp.map(this.renderChildExpression), index.h("li", { key: '44b266c8aeb390b8a68b3e08a51a0760a6421f93', class: "add-button" }, this.renderAddButton(), this.renderAddGroupButton()))));
83
+ return (index.h("div", { key: '0ed5a1403d9641926cd6d474910cedf9c7bba89e', class: "expression" }, subheading && (index.h("limel-header", { key: 'ea88a97df09f0fb5a21bf9afb4745256a611c7f8', subheading: subheading, onClick: this.handleToggleOperator, class: "clickable-header" })), index.h("ul", { key: 'cfbcdd539e84f79bf1d778e075cd3317d7409647' }, this.expression.exp.map(this.renderChildExpression), index.h("li", { key: 'ec443459245bf5852920bb4d3e341f2490a7b75b', class: "add-button" }, this.renderAddButton(), this.renderAddGroupButton()))));
185
84
  }
186
85
  getSubheading() {
187
86
  if (this.expression.exp.length <= 1) {
@@ -238,7 +137,7 @@ const LimeQueryFilterNotComponent = class {
238
137
  };
239
138
  }
240
139
  render() {
241
- return (index.h("div", { key: 'f1dfd7fd4ec7dc1873841d1c8b3d2bb6677634fd', class: "expression" }, this.label && index.h("limel-header", { key: '91e1b754f6e45c70f49bf2a770898a590defaf22', heading: this.label }), index.h("limebb-lime-query-filter-expression", { key: 'bf42f3c71521a413e5ecc49a8e0d6401b34384a2', platform: this.platform, context: this.context, label: "Not", limetype: this.limetype, activeLimetype: this.activeLimetype, expression: this.expression.exp, onExpressionChange: this.handleExpressionChange })));
140
+ return (index.h("div", { key: '9ab4a6b1e99668a0bcee3e3ba8cbbbe5185222e0', class: "expression" }, this.label && index.h("limel-header", { key: '85e997b0f96db306dd7a4433da959a74303aacfa', heading: this.label }), index.h("limebb-lime-query-filter-expression", { key: '14f634e125ee78f2aa70c7537b270a31699ba7c2', platform: this.platform, context: this.context, label: "Not", limetype: this.limetype, activeLimetype: this.activeLimetype, expression: this.expression.exp, onExpressionChange: this.handleExpressionChange })));
242
141
  }
243
142
  };
244
143
  LimeQueryFilterNotComponent.style = LimebbLimeQueryFilterNotStyle0;
@@ -246,7 +145,7 @@ LimeQueryFilterNotComponent.style = LimebbLimeQueryFilterNotStyle0;
246
145
  const limeQueryValueInputCss = ":host{display:block}.value-input-container{display:flex;flex-direction:row;align-items:flex-start;gap:0.5rem;width:100%}.mode-toggle{flex-shrink:0;margin-top:0.5rem;opacity:0.7;transition:opacity 0.2s ease}.mode-toggle:hover{opacity:1}.placeholder-input{flex-grow:1;display:flex;flex-direction:column;gap:0.5rem}.placeholder-preview{display:flex;align-items:center;gap:0.5rem;padding:0.5rem;background-color:rgba(var(--color-blue-light), 0.1);border-radius:var(--border-radius-small);font-size:0.875rem;color:rgb(var(--color-blue-default));border-left:3px solid rgb(var(--color-blue-default))}.placeholder-preview limel-icon{flex-shrink:0;color:rgb(var(--color-blue-default))}.placeholder-preview span{font-family:var(--font-monospace);word-break:break-all}";
247
146
  const LimebbLimeQueryValueInputStyle0 = limeQueryValueInputCss;
248
147
 
249
- var __decorate$1 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
148
+ var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
250
149
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
251
150
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
252
151
  r = Reflect.decorate(decorators, target, key, desc);
@@ -388,7 +287,7 @@ const LimeQueryValueInput = class {
388
287
  }
389
288
  renderValueInputByType() {
390
289
  // Special handling for IN operator - always use chip set for arrays
391
- if (this.operator === 'IN') {
290
+ if (this.operator === index_esm.Zt.IN) {
392
291
  return this.renderMultiValueInput();
393
292
  }
394
293
  const property = this.getProperty();
@@ -468,238 +367,11 @@ const LimeQueryValueInput = class {
468
367
  return propertyResolution.getPropertyFromPath(this.limetypes, this.limetype, this.propertyPath);
469
368
  }
470
369
  };
471
- __decorate$1([
370
+ __decorate([
472
371
  index_esm.Te()
473
372
  ], LimeQueryValueInput.prototype, "limetypes", void 0);
474
373
  LimeQueryValueInput.style = LimebbLimeQueryValueInputStyle0;
475
374
 
476
- const propertySelectorCss = ":host(limebb-property-selector){display:block}limel-menu{display:block;width:100%}";
477
- const LimebbPropertySelectorStyle0 = propertySelectorCss;
478
-
479
- var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
480
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
481
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
482
- r = Reflect.decorate(decorators, target, key, desc);
483
- else
484
- for (var i = decorators.length - 1; i >= 0; i--)
485
- if (d = decorators[i])
486
- r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
487
- return c > 3 && r && Object.defineProperty(target, key, r), r;
488
- };
489
- const PropertySelector = class {
490
- constructor(hostRef) {
491
- index.registerInstance(this, hostRef);
492
- this.change = index.createEvent(this, "change", 7);
493
- /**
494
- * Label for the input
495
- */
496
- this.label = 'Property';
497
- /**
498
- * Whether the field is required
499
- */
500
- this.required = false;
501
- this.isOpen = false;
502
- this.navigationPath = '';
503
- this.menuItems = [];
504
- this.handleChipSetWrapperClick = (event) => {
505
- // Stop all clicks on the chip-set from bubbling
506
- // This prevents the menu from opening when clicking chip remove buttons
507
- event.stopPropagation();
508
- };
509
- this.handleChipSetFocus = () => {
510
- // Open menu when the chip-set input receives focus
511
- // This happens when user clicks to type/edit
512
- if (!this.isOpen) {
513
- this.navigationPath = this.value || '';
514
- this.loadMenuItems();
515
- this.isOpen = true;
516
- }
517
- };
518
- this.handleSelect = (event) => {
519
- event.stopPropagation();
520
- const selectedPath = event.detail.value;
521
- if (!selectedPath) {
522
- return;
523
- }
524
- // Check if this is a complete path (leaf property, not a relation)
525
- const property = propertyResolution.getPropertyFromPath(this.limetypes, this.limetype, selectedPath);
526
- if (property === null || property === void 0 ? void 0 : property.relation) {
527
- // This is a relation - update navigation but don't emit
528
- this.navigationPath = selectedPath;
529
- }
530
- else {
531
- // This is a leaf property - emit and close
532
- this.change.emit(selectedPath);
533
- this.isOpen = false;
534
- this.navigationPath = '';
535
- }
536
- };
537
- this.handleNavigateMenu = (event) => {
538
- var _a;
539
- event.stopPropagation();
540
- if ((_a = event.detail) === null || _a === void 0 ? void 0 : _a.value) {
541
- // Update navigation path when drilling down
542
- this.navigationPath = event.detail.value;
543
- }
544
- };
545
- this.handleCancel = () => {
546
- this.isOpen = false;
547
- this.navigationPath = '';
548
- };
549
- this.handleChipSetChange = (event) => {
550
- event.stopPropagation();
551
- const detail = event.detail;
552
- // Handle both single chip and array of chips
553
- if (!detail) {
554
- // Clear all was clicked
555
- this.change.emit('');
556
- this.navigationPath = '';
557
- return;
558
- }
559
- // Convert to array if it's a single chip
560
- const chips = Array.isArray(detail) ? detail : [detail];
561
- if (chips.length === 0) {
562
- // All chips removed
563
- this.change.emit('');
564
- this.navigationPath = '';
565
- }
566
- else {
567
- // A chip was removed - emit the last remaining chip's value
568
- const lastChip = chips.at(-1);
569
- if (lastChip) {
570
- this.change.emit(lastChip.value);
571
- }
572
- this.navigationPath = '';
573
- }
574
- };
575
- }
576
- render() {
577
- if (!this.limetype || !this.limetypes) {
578
- return null;
579
- }
580
- const chips = this.getChipsForPath(this.navigationPath || this.value || '');
581
- return (index.h("limel-menu", { items: this.menuItems, open: this.isOpen, emptyResultMessage: "No available properties", surfaceWidth: "inherit-from-trigger", openDirection: "bottom-end", onSelect: this.handleSelect, onNavigateMenu: this.handleNavigateMenu, onCancel: this.handleCancel }, index.h("div", { slot: "trigger" }, index.h("div", { onClick: this.handleChipSetWrapperClick }, index.h("limel-chip-set", { type: "input", label: this.label, value: chips, required: this.required, helperText: this.helperText, delimiter: "\u203A", maxItems: 1, onChange: this.handleChipSetChange, onFocus: this.handleChipSetFocus })))));
582
- }
583
- loadMenuItems() {
584
- // Get the limetype we're currently navigating in
585
- const currentLimetype = this.getCurrentLimetype();
586
- if (!currentLimetype) {
587
- this.menuItems = [];
588
- return;
589
- }
590
- this.menuItems = this.createMenuItems(currentLimetype, '');
591
- }
592
- getCurrentLimetype() {
593
- if (!this.navigationPath) {
594
- return this.limetypes[this.limetype];
595
- }
596
- // Get the limetype at the current navigation path
597
- const property = propertyResolution.getPropertyFromPath(this.limetypes, this.limetype, this.navigationPath);
598
- if (property === null || property === void 0 ? void 0 : property.relation) {
599
- return property.relation.getLimetype();
600
- }
601
- return this.limetypes[this.limetype];
602
- }
603
- createMenuItems(limetype, pathPrefix) {
604
- const results = [];
605
- if (!limetype) {
606
- return results;
607
- }
608
- const normalizedProperties = propertyResolution.getNormalizedProperties(limetype);
609
- for (const [propName, property] of Object.entries(normalizedProperties)) {
610
- // Skip hasMany and hasAndBelongsToMany relations
611
- if (property.type === 'hasmany' ||
612
- property.type === 'hasandbelongstomany') {
613
- continue;
614
- }
615
- const fullPath = pathPrefix
616
- ? `${pathPrefix}.${propName}`
617
- : propName;
618
- const isRelation = !!property.relation;
619
- let items;
620
- if (isRelation && property.relation) {
621
- // Create submenu for relation (only belongsto at this point)
622
- const relatedLimetype = property.relation.getLimetype();
623
- if (relatedLimetype) {
624
- items = async () => this.createMenuItems(relatedLimetype, fullPath);
625
- }
626
- }
627
- results.push({
628
- text: property.localname || propName,
629
- secondaryText: this.getSecondaryText(property),
630
- icon: this.getIconForProperty(property),
631
- value: fullPath,
632
- items: items,
633
- });
634
- }
635
- if (results.length === 0) {
636
- return [
637
- {
638
- text: 'No available properties',
639
- value: '',
640
- disabled: true,
641
- },
642
- ];
643
- }
644
- return results;
645
- }
646
- getSecondaryText(property) {
647
- var _a;
648
- if (property.relation) {
649
- const relatedLimetype = property.relation.getLimetype();
650
- return ((_a = relatedLimetype === null || relatedLimetype === void 0 ? void 0 : relatedLimetype.localname) === null || _a === void 0 ? void 0 : _a.singular) || 'Object';
651
- }
652
- // Return the property type as the secondary text
653
- return property.type.charAt(0).toUpperCase() + property.type.slice(1);
654
- }
655
- getIconForProperty(property) {
656
- if (property.relation) {
657
- return {
658
- name: 'link',
659
- color: 'rgb(var(--color-sky-default))',
660
- };
661
- }
662
- // Use generic property icon
663
- return {
664
- name: 'decision',
665
- color: 'rgb(var(--color-gray-default))',
666
- };
667
- }
668
- getChipsForPath(path) {
669
- if (!path) {
670
- return [];
671
- }
672
- const parts = path.split('.');
673
- const chips = [];
674
- let currentLimetype = this.limetypes[this.limetype];
675
- let currentPath = '';
676
- for (const part of parts) {
677
- currentPath = currentPath ? `${currentPath}.${part}` : part;
678
- // Use getNormalizedProperties to include _id and _timestamp
679
- const normalizedProperties = propertyResolution.getNormalizedProperties(currentLimetype);
680
- const property = normalizedProperties[part];
681
- if (property) {
682
- chips.push({
683
- id: currentPath,
684
- text: property.localname || part,
685
- icon: this.getIconForProperty(property),
686
- value: currentPath,
687
- });
688
- if (property.relation) {
689
- currentLimetype = property.relation.getLimetype();
690
- }
691
- }
692
- }
693
- return chips;
694
- }
695
- };
696
- __decorate([
697
- index_esm.Te()
698
- ], PropertySelector.prototype, "limetypes", void 0);
699
- PropertySelector.style = LimebbPropertySelectorStyle0;
700
-
701
- exports.limebb_lime_query_filter_comparison = LimeQueryFilterComparisonComponent;
702
375
  exports.limebb_lime_query_filter_group = LimeQueryFilterGroupComponent;
703
376
  exports.limebb_lime_query_filter_not = LimeQueryFilterNotComponent;
704
377
  exports.limebb_lime_query_value_input = LimeQueryValueInput;
705
- exports.limebb_property_selector = PropertySelector;