@limetech/lime-crm-building-blocks 1.98.0 → 1.100.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 (176) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/{index.esm-a894ac76.js → index.esm-d785eb6e.js} +2 -0
  3. package/dist/cjs/lime-crm-building-blocks.cjs.js +1 -1
  4. package/dist/cjs/limebb-browser.cjs.entry.js +1 -1
  5. package/dist/cjs/limebb-chat-item_2.cjs.entry.js +1 -1
  6. package/dist/cjs/limebb-chat-list.cjs.entry.js +1 -1
  7. package/dist/cjs/limebb-component-config.cjs.entry.js +1 -1
  8. package/dist/cjs/limebb-component-picker.cjs.entry.js +1 -1
  9. package/dist/cjs/limebb-currency-picker.cjs.entry.js +1 -1
  10. package/dist/cjs/limebb-date-picker.cjs.entry.js +1 -1
  11. package/dist/cjs/limebb-feed-timeline-item.cjs.entry.js +1 -1
  12. package/dist/cjs/limebb-feed.cjs.entry.js +1 -1
  13. package/dist/cjs/limebb-info-tile.cjs.entry.js +1 -1
  14. package/dist/cjs/limebb-kanban-group.cjs.entry.js +1 -1
  15. package/dist/cjs/limebb-kanban-item.cjs.entry.js +1 -1
  16. package/dist/cjs/limebb-lime-query-builder.cjs.entry.js +68 -179
  17. package/dist/cjs/limebb-lime-query-filter-and.cjs.entry.js +80 -0
  18. package/dist/cjs/{limebb-limetype-field_2.cjs.entry.js → limebb-lime-query-filter-builder_3.cjs.entry.js} +108 -6
  19. package/dist/cjs/limebb-lime-query-filter-comparison_5.cjs.entry.js +705 -0
  20. package/dist/cjs/limebb-lime-query-filter-expression.cjs.entry.js +45 -0
  21. package/dist/cjs/limebb-lime-query-filter-or.cjs.entry.js +68 -0
  22. package/dist/cjs/limebb-limeobject-file-viewer.cjs.entry.js +1 -1
  23. package/dist/cjs/limebb-live-docs-info.cjs.entry.js +2 -2
  24. package/dist/cjs/limebb-loader.cjs.entry.js +1 -1
  25. package/dist/cjs/limebb-locale-picker.cjs.entry.js +2 -2
  26. package/dist/cjs/limebb-mention-group-counter.cjs.entry.js +2 -2
  27. package/dist/cjs/limebb-mention.cjs.entry.js +1 -1
  28. package/dist/cjs/limebb-navigation-button_2.cjs.entry.js +3 -3
  29. package/dist/cjs/limebb-notification-item.cjs.entry.js +2 -2
  30. package/dist/cjs/limebb-notification-list.cjs.entry.js +1 -1
  31. package/dist/cjs/limebb-percentage-visualizer.cjs.entry.js +2 -2
  32. package/dist/cjs/limebb-text-editor.cjs.entry.js +3 -3
  33. package/dist/cjs/limebb-trend-indicator.cjs.entry.js +1 -1
  34. package/dist/cjs/{limetype-1fe0207f.js → limetype-f2e4376e.js} +1 -1
  35. package/dist/cjs/loader.cjs.js +1 -1
  36. package/dist/collection/collection-manifest.json +2 -0
  37. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-and.js +41 -49
  38. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-builder.css +5 -0
  39. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-builder.js +225 -0
  40. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison.js +77 -41
  41. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-expression.js +35 -46
  42. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.css +130 -0
  43. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.js +269 -0
  44. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-not.js +19 -25
  45. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-or.js +34 -34
  46. package/dist/collection/components/lime-query-builder/lime-query-builder.js +11 -26
  47. package/dist/collection/components/lime-query-builder/limetype-field/limetype-field.js +1 -1
  48. package/dist/collection/components/limeobject/file-viewer/live-docs-info.js +2 -2
  49. package/dist/collection/components/locale-picker/locale-picker.js +1 -1
  50. package/dist/collection/components/notification-list/notification-item/notification-item.js +1 -1
  51. package/dist/collection/components/percentage-visualizer/percentage-visualizer.js +2 -2
  52. package/dist/collection/components/summary-popover/summary-popover.js +3 -3
  53. package/dist/collection/components/text-editor/mention-group-counter.js +2 -2
  54. package/dist/collection/components/text-editor/text-editor.js +1 -1
  55. package/dist/collection/components/trend-indicator/trend-indicator.js +1 -1
  56. package/dist/components/index.esm.js +2 -1
  57. package/dist/components/lime-query-filter-builder.js +129 -0
  58. package/dist/components/lime-query-filter-comparison.js +32 -45
  59. package/dist/components/lime-query-filter-expression.js +315 -0
  60. package/dist/components/limebb-lime-query-builder.js +73 -182
  61. package/dist/components/limebb-lime-query-filter-and.js +130 -1
  62. package/dist/components/limebb-lime-query-filter-builder.d.ts +11 -0
  63. package/dist/components/limebb-lime-query-filter-builder.js +6 -0
  64. package/dist/components/limebb-lime-query-filter-comparison.js +1 -1
  65. package/dist/components/limebb-lime-query-filter-expression.js +1 -1
  66. package/dist/components/limebb-lime-query-filter-group.d.ts +11 -0
  67. package/dist/components/limebb-lime-query-filter-group.js +6 -0
  68. package/dist/components/limebb-lime-query-filter-not.js +1 -1
  69. package/dist/components/limebb-lime-query-filter-or.js +118 -1
  70. package/dist/components/limebb-locale-picker.js +1 -1
  71. package/dist/components/limebb-mention-group-counter.js +2 -2
  72. package/dist/components/limebb-percentage-visualizer.js +2 -2
  73. package/dist/components/limebb-text-editor.js +1 -1
  74. package/dist/components/limebb-trend-indicator.js +1 -1
  75. package/dist/components/limetype-field.js +34 -2
  76. package/dist/components/live-docs-info.js +2 -2
  77. package/dist/components/notification-item.js +1 -1
  78. package/dist/components/summary-popover.js +3 -3
  79. package/dist/esm/{index.esm-d8fdeb18.js → index.esm-bb569663.js} +2 -1
  80. package/dist/esm/lime-crm-building-blocks.js +1 -1
  81. package/dist/esm/limebb-browser.entry.js +1 -1
  82. package/dist/esm/limebb-chat-item_2.entry.js +1 -1
  83. package/dist/esm/limebb-chat-list.entry.js +1 -1
  84. package/dist/esm/limebb-component-config.entry.js +1 -1
  85. package/dist/esm/limebb-component-picker.entry.js +1 -1
  86. package/dist/esm/limebb-currency-picker.entry.js +1 -1
  87. package/dist/esm/limebb-date-picker.entry.js +1 -1
  88. package/dist/esm/limebb-feed-timeline-item.entry.js +1 -1
  89. package/dist/esm/limebb-feed.entry.js +1 -1
  90. package/dist/esm/limebb-info-tile.entry.js +1 -1
  91. package/dist/esm/limebb-kanban-group.entry.js +1 -1
  92. package/dist/esm/limebb-kanban-item.entry.js +1 -1
  93. package/dist/esm/limebb-lime-query-builder.entry.js +67 -178
  94. package/dist/esm/limebb-lime-query-filter-and.entry.js +76 -0
  95. package/dist/esm/{limebb-limetype-field_2.entry.js → limebb-lime-query-filter-builder_3.entry.js} +107 -6
  96. package/dist/esm/limebb-lime-query-filter-comparison_5.entry.js +697 -0
  97. package/dist/esm/limebb-lime-query-filter-expression.entry.js +41 -0
  98. package/dist/esm/limebb-lime-query-filter-or.entry.js +64 -0
  99. package/dist/esm/limebb-limeobject-file-viewer.entry.js +1 -1
  100. package/dist/esm/limebb-live-docs-info.entry.js +2 -2
  101. package/dist/esm/limebb-loader.entry.js +1 -1
  102. package/dist/esm/limebb-locale-picker.entry.js +2 -2
  103. package/dist/esm/limebb-mention-group-counter.entry.js +2 -2
  104. package/dist/esm/limebb-mention.entry.js +1 -1
  105. package/dist/esm/limebb-navigation-button_2.entry.js +3 -3
  106. package/dist/esm/limebb-notification-item.entry.js +2 -2
  107. package/dist/esm/limebb-notification-list.entry.js +1 -1
  108. package/dist/esm/limebb-percentage-visualizer.entry.js +2 -2
  109. package/dist/esm/limebb-text-editor.entry.js +3 -3
  110. package/dist/esm/limebb-trend-indicator.entry.js +1 -1
  111. package/dist/esm/{limetype-6e7552a7.js → limetype-c0e041f7.js} +1 -1
  112. package/dist/esm/loader.js +1 -1
  113. package/dist/lime-crm-building-blocks/lime-crm-building-blocks.esm.js +1 -1
  114. package/dist/lime-crm-building-blocks/{p-a1818969.entry.js → p-03af0e66.entry.js} +1 -1
  115. package/dist/lime-crm-building-blocks/{p-f402184f.entry.js → p-098ee6c1.entry.js} +1 -1
  116. package/dist/lime-crm-building-blocks/{p-42e52b50.entry.js → p-1be0eec7.entry.js} +1 -1
  117. package/dist/lime-crm-building-blocks/{p-2aa18c2b.entry.js → p-206575e4.entry.js} +1 -1
  118. package/dist/lime-crm-building-blocks/p-20bfca36.js +1 -0
  119. package/dist/lime-crm-building-blocks/p-24aeb928.entry.js +1 -0
  120. package/dist/lime-crm-building-blocks/{p-82d33d43.entry.js → p-2faaacbc.entry.js} +1 -1
  121. package/dist/lime-crm-building-blocks/{p-d4016891.entry.js → p-2fdcb868.entry.js} +1 -1
  122. package/dist/lime-crm-building-blocks/{p-f52125a0.entry.js → p-3122ea05.entry.js} +1 -1
  123. package/dist/lime-crm-building-blocks/{p-baf4e428.entry.js → p-3175883d.entry.js} +1 -1
  124. package/dist/lime-crm-building-blocks/{p-8c8b7115.entry.js → p-32534eb7.entry.js} +1 -1
  125. package/dist/lime-crm-building-blocks/{p-6c1146ca.entry.js → p-36ea13c0.entry.js} +1 -1
  126. package/dist/lime-crm-building-blocks/p-422f6d51.entry.js +1 -0
  127. package/dist/lime-crm-building-blocks/{p-1fba0ade.js → p-4838284a.js} +1 -1
  128. package/dist/lime-crm-building-blocks/{p-5e4ba110.entry.js → p-5464f0de.entry.js} +1 -1
  129. package/dist/lime-crm-building-blocks/{p-e9d23ef7.entry.js → p-569c86b5.entry.js} +1 -1
  130. package/dist/lime-crm-building-blocks/{p-90e1716a.entry.js → p-5dc574a3.entry.js} +1 -1
  131. package/dist/lime-crm-building-blocks/{p-00da9b24.entry.js → p-631ca5a5.entry.js} +1 -1
  132. package/dist/lime-crm-building-blocks/p-67dbaa4c.entry.js +1 -0
  133. package/dist/lime-crm-building-blocks/p-6d119dab.entry.js +1 -0
  134. package/dist/lime-crm-building-blocks/{p-beb0d164.entry.js → p-7271f47a.entry.js} +1 -1
  135. package/dist/lime-crm-building-blocks/{p-34357744.entry.js → p-9031f136.entry.js} +1 -1
  136. package/dist/lime-crm-building-blocks/p-91732502.entry.js +1 -0
  137. package/dist/lime-crm-building-blocks/{p-8c4eb49f.entry.js → p-93cadc1e.entry.js} +1 -1
  138. package/dist/lime-crm-building-blocks/{p-3932077b.entry.js → p-9cac4de2.entry.js} +1 -1
  139. package/dist/lime-crm-building-blocks/{p-79d4668a.entry.js → p-a200954f.entry.js} +1 -1
  140. package/dist/lime-crm-building-blocks/p-b198194a.entry.js +1 -0
  141. package/dist/lime-crm-building-blocks/{p-d89c44ad.entry.js → p-b9b954d9.entry.js} +1 -1
  142. package/dist/lime-crm-building-blocks/{p-3a620226.entry.js → p-cfa1a4ad.entry.js} +1 -1
  143. package/dist/lime-crm-building-blocks/{p-ef8a5266.entry.js → p-e8946134.entry.js} +1 -1
  144. package/dist/lime-crm-building-blocks/{p-9d9f25da.entry.js → p-eb81bceb.entry.js} +1 -1
  145. package/dist/lime-crm-building-blocks/{p-50d3d61a.entry.js → p-ee1b00b9.entry.js} +1 -1
  146. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-and.d.ts +5 -4
  147. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-builder.d.ts +50 -0
  148. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-comparison.d.ts +6 -4
  149. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-expression.d.ts +10 -14
  150. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-group.d.ts +60 -0
  151. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-not.d.ts +4 -4
  152. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-or.d.ts +5 -4
  153. package/dist/types/components/lime-query-builder/lime-query-builder.d.ts +1 -0
  154. package/dist/types/components/lime-query-builder/lime-query.types.d.ts +2 -1
  155. package/dist/types/components.d.ts +293 -65
  156. package/package.json +1 -1
  157. package/dist/cjs/isEqual-e77cce75.js +0 -37
  158. package/dist/cjs/lime-query.types-bcb63a22.js +0 -61
  159. package/dist/cjs/limebb-lime-query-filter-and_5.cjs.entry.js +0 -278
  160. package/dist/cjs/limebb-lime-query-value-input.cjs.entry.js +0 -239
  161. package/dist/cjs/limebb-property-selector.cjs.entry.js +0 -234
  162. package/dist/components/isEqual.js +0 -35
  163. package/dist/components/lime-query-filter-and.js +0 -408
  164. package/dist/esm/isEqual-57d0c223.js +0 -35
  165. package/dist/esm/lime-query.types-f72355e1.js +0 -59
  166. package/dist/esm/limebb-lime-query-filter-and_5.entry.js +0 -270
  167. package/dist/esm/limebb-lime-query-value-input.entry.js +0 -235
  168. package/dist/esm/limebb-property-selector.entry.js +0 -230
  169. package/dist/lime-crm-building-blocks/p-02c0cc04.entry.js +0 -1
  170. package/dist/lime-crm-building-blocks/p-0957b2a6.entry.js +0 -1
  171. package/dist/lime-crm-building-blocks/p-3b0a15ec.js +0 -1
  172. package/dist/lime-crm-building-blocks/p-5a6d2e7f.js +0 -1
  173. package/dist/lime-crm-building-blocks/p-60971d64.js +0 -1
  174. package/dist/lime-crm-building-blocks/p-70a28b93.entry.js +0 -1
  175. package/dist/lime-crm-building-blocks/p-96beaabc.entry.js +0 -1
  176. package/dist/lime-crm-building-blocks/p-f99c611d.entry.js +0 -1
@@ -0,0 +1,315 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
+ import { Z as Zt } from './index.esm.js';
3
+ import { d as defineCustomElement$3 } from './lime-query-filter-comparison.js';
4
+ import { d as defineCustomElement$5 } from './lime-query-value-input.js';
5
+ import { d as defineCustomElement$4 } from './property-selector.js';
6
+
7
+ const limeQueryFilterNotCss = "@charset \"UTF-8\";.expression{display:flex;flex-direction:column;margin-bottom:1rem;gap:1rem;padding:1rem;border-left:0.25rem solid rgb(var(--contrast-400));background-color:rgb(var(--contrast-100))}";
8
+ const LimebbLimeQueryFilterNotStyle0 = limeQueryFilterNotCss;
9
+
10
+ const LimeQueryFilterNotComponent = /*@__PURE__*/ proxyCustomElement(class LimeQueryFilterNotComponent extends HTMLElement {
11
+ constructor() {
12
+ super();
13
+ this.__registerHost();
14
+ this.__attachShadow();
15
+ this.expressionChange = createEvent(this, "expressionChange", 7);
16
+ this.handleExpressionChange = (event) => {
17
+ var _a;
18
+ event.stopPropagation();
19
+ const updatedExpression = (_a = event.detail) !== null && _a !== void 0 ? _a : undefined;
20
+ if (updatedExpression === undefined) {
21
+ this.expressionChange.emit(undefined);
22
+ return;
23
+ }
24
+ this.expressionChange.emit({
25
+ op: Zt.NOT,
26
+ exp: updatedExpression,
27
+ });
28
+ };
29
+ }
30
+ render() {
31
+ return (h("div", { key: 'f1dfd7fd4ec7dc1873841d1c8b3d2bb6677634fd', class: "expression" }, this.label && h("limel-header", { key: '91e1b754f6e45c70f49bf2a770898a590defaf22', heading: this.label }), 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 })));
32
+ }
33
+ static get style() { return LimebbLimeQueryFilterNotStyle0; }
34
+ }, [1, "limebb-lime-query-filter-not", {
35
+ "platform": [16],
36
+ "context": [16],
37
+ "label": [1],
38
+ "limetype": [1],
39
+ "activeLimetype": [1, "active-limetype"],
40
+ "expression": [16]
41
+ }]);
42
+ function defineCustomElement$2() {
43
+ if (typeof customElements === "undefined") {
44
+ return;
45
+ }
46
+ const components = ["limebb-lime-query-filter-not", "limebb-lime-query-filter-comparison", "limebb-lime-query-filter-expression", "limebb-lime-query-filter-group", "limebb-lime-query-filter-not"];
47
+ components.forEach(tagName => { switch (tagName) {
48
+ case "limebb-lime-query-filter-not":
49
+ if (!customElements.get(tagName)) {
50
+ customElements.define(tagName, LimeQueryFilterNotComponent);
51
+ }
52
+ break;
53
+ case "limebb-lime-query-filter-comparison":
54
+ if (!customElements.get(tagName)) {
55
+ defineCustomElement$3();
56
+ }
57
+ break;
58
+ case "limebb-lime-query-filter-expression":
59
+ if (!customElements.get(tagName)) {
60
+ defineCustomElement();
61
+ }
62
+ break;
63
+ case "limebb-lime-query-filter-group":
64
+ if (!customElements.get(tagName)) {
65
+ defineCustomElement$1();
66
+ }
67
+ break;
68
+ case "limebb-lime-query-filter-not":
69
+ if (!customElements.get(tagName)) {
70
+ defineCustomElement$2();
71
+ }
72
+ break;
73
+ } });
74
+ }
75
+
76
+ 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}";
77
+ const LimebbLimeQueryFilterGroupStyle0 = limeQueryFilterGroupCss;
78
+
79
+ const LimeQueryFilterGroupComponent = /*@__PURE__*/ proxyCustomElement(class LimeQueryFilterGroupComponent extends HTMLElement {
80
+ constructor() {
81
+ super();
82
+ this.__registerHost();
83
+ this.__attachShadow();
84
+ this.expressionChange = createEvent(this, "expressionChange", 7);
85
+ this.renderChildExpression = (expression, childIndex) => (h("li", null, h("limebb-lime-query-filter-expression", { platform: this.platform, context: this.context, limetype: this.limetype, activeLimetype: this.activeLimetype, expression: expression, onExpressionChange: this.handleExpressionChange(childIndex) })));
86
+ this.handleToggleOperator = () => {
87
+ const newOperator = this.expression.op === Zt.AND ? Zt.OR : Zt.AND;
88
+ this.expressionChange.emit({
89
+ op: newOperator,
90
+ exp: this.expression.exp,
91
+ });
92
+ };
93
+ this.handleAddChildExpression = () => {
94
+ // Always add a new comparison directly to the list
95
+ const newChild = {
96
+ key: '',
97
+ op: Zt.EQUALS,
98
+ exp: '',
99
+ };
100
+ this.expressionChange.emit({
101
+ op: this.expression.op,
102
+ exp: [...this.expression.exp, newChild],
103
+ });
104
+ };
105
+ this.handleAddChildGroup = () => {
106
+ // Add a nested group of the opposite type
107
+ const oppositeOp = this.expression.op === Zt.AND ? Zt.OR : Zt.AND;
108
+ const newChild = {
109
+ op: oppositeOp,
110
+ exp: [
111
+ {
112
+ key: '',
113
+ op: Zt.EQUALS,
114
+ exp: '',
115
+ },
116
+ ],
117
+ };
118
+ this.expressionChange.emit({
119
+ op: this.expression.op,
120
+ exp: [...this.expression.exp, newChild],
121
+ });
122
+ };
123
+ this.handleExpressionChange = (updatedChildIndex) => (event) => {
124
+ event.stopPropagation();
125
+ const updatedExpression = event.detail;
126
+ const expressions = [...this.expression.exp];
127
+ if (updatedExpression === undefined) {
128
+ // Deletion - remove the child and potentially unwrap
129
+ expressions.splice(updatedChildIndex, 1);
130
+ if (expressions.length === 0) {
131
+ this.expressionChange.emit(undefined);
132
+ return;
133
+ }
134
+ if (expressions.length === 1) {
135
+ // Unwrap when only one child remains after deletion
136
+ this.expressionChange.emit(expressions[0]);
137
+ return;
138
+ }
139
+ }
140
+ else {
141
+ // Update - replace the child, don't unwrap
142
+ expressions[updatedChildIndex] = updatedExpression;
143
+ }
144
+ this.expressionChange.emit({
145
+ op: this.expression.op,
146
+ exp: expressions,
147
+ });
148
+ };
149
+ }
150
+ render() {
151
+ const subheading = this.getSubheading();
152
+ return (h("div", { key: '43a1d99fd896e3ad49dd97594e54bccaf74c3aa0', class: "expression" }, subheading && (h("limel-header", { key: '534eb0a3db2f0194e8a28e2fb071beb545f38458', subheading: subheading, onClick: this.handleToggleOperator, class: "clickable-header" })), h("ul", { key: '9d29d98ab034bf2878e7dc19828bc045dbdd492f' }, this.expression.exp.map(this.renderChildExpression), h("li", { key: '44b266c8aeb390b8a68b3e08a51a0760a6421f93', class: "add-button" }, this.renderAddButton(), this.renderAddGroupButton()))));
153
+ }
154
+ getSubheading() {
155
+ if (this.expression.exp.length <= 1) {
156
+ return '';
157
+ }
158
+ return this.expression.op === Zt.AND
159
+ ? 'All of these conditions are true'
160
+ : 'Any of these conditions are true';
161
+ }
162
+ renderAddButton() {
163
+ const label = this.getAddButtonLabel();
164
+ return (h("limel-button", { label: label, icon: "plus_math", onClick: this.handleAddChildExpression }));
165
+ }
166
+ renderAddGroupButton() {
167
+ const label = this.getAddGroupButtonLabel();
168
+ return (h("limel-button", { label: label, icon: "tree_structure", onClick: this.handleAddChildGroup }));
169
+ }
170
+ getAddButtonLabel() {
171
+ const isAnd = this.expression.op === Zt.AND;
172
+ if (this.expression.exp.length === 0) {
173
+ return 'Add a condition';
174
+ }
175
+ return isAnd ? 'Add another condition' : 'Add alternative';
176
+ }
177
+ getAddGroupButtonLabel() {
178
+ const isAnd = this.expression.op === Zt.AND;
179
+ if (this.expression.exp.length === 0) {
180
+ return 'Add a group';
181
+ }
182
+ return isAnd ? 'Add another group' : 'Add alternative group';
183
+ }
184
+ static get style() { return LimebbLimeQueryFilterGroupStyle0; }
185
+ }, [1, "limebb-lime-query-filter-group", {
186
+ "platform": [16],
187
+ "context": [16],
188
+ "limetype": [1],
189
+ "activeLimetype": [1, "active-limetype"],
190
+ "expression": [16]
191
+ }]);
192
+ function defineCustomElement$1() {
193
+ if (typeof customElements === "undefined") {
194
+ return;
195
+ }
196
+ const components = ["limebb-lime-query-filter-group", "limebb-lime-query-filter-comparison", "limebb-lime-query-filter-expression", "limebb-lime-query-filter-group", "limebb-lime-query-filter-not"];
197
+ components.forEach(tagName => { switch (tagName) {
198
+ case "limebb-lime-query-filter-group":
199
+ if (!customElements.get(tagName)) {
200
+ customElements.define(tagName, LimeQueryFilterGroupComponent);
201
+ }
202
+ break;
203
+ case "limebb-lime-query-filter-comparison":
204
+ if (!customElements.get(tagName)) {
205
+ defineCustomElement$3();
206
+ }
207
+ break;
208
+ case "limebb-lime-query-filter-expression":
209
+ if (!customElements.get(tagName)) {
210
+ defineCustomElement();
211
+ }
212
+ break;
213
+ case "limebb-lime-query-filter-group":
214
+ if (!customElements.get(tagName)) {
215
+ defineCustomElement$1();
216
+ }
217
+ break;
218
+ case "limebb-lime-query-filter-not":
219
+ if (!customElements.get(tagName)) {
220
+ defineCustomElement$2();
221
+ }
222
+ break;
223
+ } });
224
+ }
225
+
226
+ const limeQueryFilterExpressionCss = "@charset \"UTF-8\";.expression{display:flex;flex-direction:column;margin-bottom:1rem;gap:1rem}";
227
+ const LimebbLimeQueryFilterExpressionStyle0 = limeQueryFilterExpressionCss;
228
+
229
+ const LimeQueryFilterExpressionComponent = /*@__PURE__*/ proxyCustomElement(class LimeQueryFilterExpressionComponent extends HTMLElement {
230
+ constructor() {
231
+ super();
232
+ this.__registerHost();
233
+ this.__attachShadow();
234
+ this.expressionChange = createEvent(this, "expressionChange", 7);
235
+ this.handleExpressionChange = (event) => {
236
+ event.stopPropagation();
237
+ this.expressionChange.emit(event.detail);
238
+ };
239
+ }
240
+ render() {
241
+ if (!this.expression) {
242
+ return;
243
+ }
244
+ const props = {
245
+ platform: this.platform,
246
+ context: this.context,
247
+ label: this.label,
248
+ limetype: this.limetype,
249
+ activeLimetype: this.activeLimetype,
250
+ };
251
+ if ('key' in this.expression) {
252
+ return (h("limebb-lime-query-filter-comparison", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
253
+ }
254
+ if (this.expression.op === Zt.AND ||
255
+ this.expression.op === Zt.OR) {
256
+ return (h("limebb-lime-query-filter-group", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
257
+ }
258
+ if (this.expression.op === Zt.NOT) {
259
+ return (h("limebb-lime-query-filter-not", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
260
+ }
261
+ }
262
+ static get style() { return LimebbLimeQueryFilterExpressionStyle0; }
263
+ }, [1, "limebb-lime-query-filter-expression", {
264
+ "platform": [16],
265
+ "context": [16],
266
+ "label": [1],
267
+ "limetype": [1],
268
+ "activeLimetype": [1, "active-limetype"],
269
+ "expression": [16]
270
+ }]);
271
+ function defineCustomElement() {
272
+ if (typeof customElements === "undefined") {
273
+ return;
274
+ }
275
+ const components = ["limebb-lime-query-filter-expression", "limebb-lime-query-filter-comparison", "limebb-lime-query-filter-expression", "limebb-lime-query-filter-group", "limebb-lime-query-filter-not", "limebb-lime-query-value-input", "limebb-property-selector"];
276
+ components.forEach(tagName => { switch (tagName) {
277
+ case "limebb-lime-query-filter-expression":
278
+ if (!customElements.get(tagName)) {
279
+ customElements.define(tagName, LimeQueryFilterExpressionComponent);
280
+ }
281
+ break;
282
+ case "limebb-lime-query-filter-comparison":
283
+ if (!customElements.get(tagName)) {
284
+ defineCustomElement$3();
285
+ }
286
+ break;
287
+ case "limebb-lime-query-filter-expression":
288
+ if (!customElements.get(tagName)) {
289
+ defineCustomElement();
290
+ }
291
+ break;
292
+ case "limebb-lime-query-filter-group":
293
+ if (!customElements.get(tagName)) {
294
+ defineCustomElement$1();
295
+ }
296
+ break;
297
+ case "limebb-lime-query-filter-not":
298
+ if (!customElements.get(tagName)) {
299
+ defineCustomElement$2();
300
+ }
301
+ break;
302
+ case "limebb-lime-query-value-input":
303
+ if (!customElements.get(tagName)) {
304
+ defineCustomElement$5();
305
+ }
306
+ break;
307
+ case "limebb-property-selector":
308
+ if (!customElements.get(tagName)) {
309
+ defineCustomElement$4();
310
+ }
311
+ break;
312
+ } });
313
+ }
314
+
315
+ export { LimeQueryFilterExpressionComponent as L, defineCustomElement$1 as a, defineCustomElement as b, LimeQueryFilterGroupComponent as c, defineCustomElement$2 as d, LimeQueryFilterNotComponent as e };
@@ -1,69 +1,72 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
2
  import { T as Te } from './index.esm.js';
3
- import { L as LIME_QUERY_OPERATORS, d as defineCustomElement$a } from './lime-query-filter-comparison.js';
4
3
  import { g as getNormalizedProperties, a as getPropertyFromPath, d as defineCustomElement$4 } from './property-selector.js';
5
- import { d as defineCustomElement$7, a as defineCustomElement$8, b as defineCustomElement$9, c as defineCustomElement$b } from './lime-query-filter-and.js';
4
+ import { d as defineCustomElement$b } from './lime-query-filter-builder.js';
5
+ import { d as defineCustomElement$a } from './lime-query-filter-comparison.js';
6
+ import { d as defineCustomElement$7, a as defineCustomElement$8, b as defineCustomElement$9 } from './lime-query-filter-expression.js';
6
7
  import { d as defineCustomElement$6 } from './lime-query-value-input.js';
7
8
  import { d as defineCustomElement$5 } from './limetype-field.js';
8
9
  import { d as defineCustomElement$3 } from './response-format-editor.js';
9
10
  import { d as defineCustomElement$2 } from './response-format-item.js';
10
11
 
11
12
  /**
12
- * Convert UI filter representation to Lime Query filter format
13
- * @param filter
13
+ * TypeScript type definitions for Lime Query DSL
14
+ *
15
+ * These types represent the structure of Lime Query as defined in:
16
+ * - lime-core/lime_query/schema.py
17
+ * - lime-core/lime_filter/schema.py
14
18
  */
15
- function guiFilterToLimeQuery(filter) {
16
- if (filter.filter_type === '') {
17
- return undefined;
18
- }
19
- if (filter.filter_type === 'comparison') {
20
- return {
21
- key: filter.property,
22
- op: filter.operator,
23
- exp: filter.value,
24
- };
25
- }
26
- if (filter.filter_type === 'AND') {
27
- const expressions = filter.expressions
28
- .map(guiFilterToLimeQuery)
29
- .filter((f) => f !== undefined);
30
- if (expressions.length === 0) {
31
- return undefined;
32
- }
33
- if (expressions.length === 1) {
34
- return expressions[0];
35
- }
36
- return {
37
- op: 'AND',
38
- exp: expressions,
39
- };
40
- }
41
- if (filter.filter_type === 'OR') {
42
- const expressions = filter.expressions
43
- .map(guiFilterToLimeQuery)
44
- .filter((f) => f !== undefined);
45
- if (expressions.length === 0) {
46
- return undefined;
47
- }
48
- if (expressions.length === 1) {
49
- return expressions[0];
50
- }
51
- return {
52
- op: 'OR',
53
- exp: expressions,
54
- };
55
- }
56
- if (filter.filter_type === 'NOT') {
57
- const innerFilter = guiFilterToLimeQuery(filter.expression);
58
- if (innerFilter) {
59
- return {
60
- op: '!',
61
- exp: innerFilter,
62
- };
63
- }
64
- }
65
- return undefined;
66
- }
19
+ /**
20
+ * Available operators with display metadata
21
+ */
22
+ const LIME_QUERY_OPERATORS = [
23
+ { value: '=', label: 'Equals', icon: 'equals' },
24
+ { value: '!=', label: 'Not Equals', icon: 'not-equal' },
25
+ {
26
+ value: '>',
27
+ label: 'Greater Than',
28
+ icon: 'greater-than',
29
+ applicableTypes: ['integer', 'decimal', 'date', 'time'],
30
+ },
31
+ {
32
+ value: '>=',
33
+ label: 'Greater or Equal',
34
+ icon: 'greater-or-equal',
35
+ applicableTypes: ['integer', 'decimal', 'date', 'time'],
36
+ },
37
+ {
38
+ value: '<',
39
+ label: 'Less Than',
40
+ icon: 'less-than',
41
+ applicableTypes: ['integer', 'decimal', 'date', 'time'],
42
+ },
43
+ {
44
+ value: '<=',
45
+ label: 'Less or Equal',
46
+ icon: 'less-or-equal',
47
+ applicableTypes: ['integer', 'decimal', 'date', 'time'],
48
+ },
49
+ { value: 'IN', label: 'In List', icon: 'list' },
50
+ {
51
+ value: '?',
52
+ label: 'Contains',
53
+ icon: '-lime-filter-contain',
54
+ applicableTypes: ['string', 'text'],
55
+ },
56
+ {
57
+ value: '=?',
58
+ label: 'Begins With',
59
+ icon: '-lime-filter-begin',
60
+ applicableTypes: ['string', 'text'],
61
+ },
62
+ {
63
+ value: '=$',
64
+ label: 'Ends With',
65
+ icon: '-lime-filter-end',
66
+ applicableTypes: ['string', 'text'],
67
+ },
68
+ ];
69
+
67
70
  /**
68
71
  * Validate and convert a FilterExpression (comparison filter)
69
72
  * @param filter
@@ -165,103 +168,6 @@ function limeQueryToGuiFilter(filter) {
165
168
  // It's a FilterGroup
166
169
  return validateAndConvertFilterGroup(filter);
167
170
  }
168
- /**
169
- * Normalize filter for GUI mode by ensuring proper AND/OR wrapper structure.
170
- * GUI mode requires filters to be wrapped in AND([OR(...)]) so users have
171
- * access to add/remove buttons on the AND and OR components.
172
- *
173
- * This function ensures that:
174
- * - Single comparisons are wrapped in AND([OR([comparison])])
175
- * - OR groups are wrapped in AND([OR group])
176
- * - AND groups have their comparison children wrapped in OR
177
- * - Empty/undefined filters become AND([])
178
- *
179
- * When converting back to Lime Query JSON, limeQueryFilterToLimeQuery()
180
- * automatically unwraps single-item AND/OR groups.
181
- *
182
- * @param filter The filter expression from limeQueryToLimeQueryFilter
183
- * @returns Normalized filter suitable for GUI editing
184
- */
185
- function normalizeLimeQueryFilterForGui(filter) {
186
- // Empty AND is already correct for GUI
187
- if (filter.filter_type === 'AND' && filter.expressions.length === 0) {
188
- return filter;
189
- }
190
- // Single comparison needs wrapping
191
- if (filter.filter_type === 'comparison') {
192
- return {
193
- filter_type: 'AND',
194
- expressions: [
195
- {
196
- filter_type: 'OR',
197
- expressions: [filter],
198
- },
199
- ],
200
- };
201
- }
202
- // OR needs wrapping in AND
203
- if (filter.filter_type === 'OR') {
204
- return {
205
- filter_type: 'AND',
206
- expressions: [filter],
207
- };
208
- }
209
- // NOT needs wrapping
210
- if (filter.filter_type === 'NOT') {
211
- return {
212
- filter_type: 'AND',
213
- expressions: [
214
- {
215
- filter_type: 'OR',
216
- expressions: [filter],
217
- },
218
- ],
219
- };
220
- }
221
- // AND group - check if children need OR wrappers
222
- if (filter.filter_type === 'AND') {
223
- const normalizedChildren = filter.expressions.map((child) => {
224
- // If child is already OR, keep it
225
- if (child.filter_type === 'OR') {
226
- return child;
227
- }
228
- // If child is NOT, keep it (NOT can be a direct child of AND)
229
- if (child.filter_type === 'NOT') {
230
- return child;
231
- }
232
- // If child is comparison, wrap in OR
233
- if (child.filter_type === 'comparison') {
234
- return {
235
- filter_type: 'OR',
236
- expressions: [child],
237
- };
238
- }
239
- // If child is nested AND, recursively normalize and wrap in OR
240
- if (child.filter_type === 'AND') {
241
- return {
242
- filter_type: 'OR',
243
- expressions: [normalizeLimeQueryFilterForGui(child)],
244
- };
245
- }
246
- // Unknown filter type, keep as is
247
- return child;
248
- });
249
- return {
250
- filter_type: 'AND',
251
- expressions: normalizedChildren,
252
- };
253
- }
254
- // Fallback: wrap in AND/OR structure
255
- return {
256
- filter_type: 'AND',
257
- expressions: [
258
- {
259
- filter_type: 'OR',
260
- expressions: [filter],
261
- },
262
- ],
263
- };
264
- }
265
171
 
266
172
  /**
267
173
  * Dynamic filter values and placeholders that are valid in Lime Query
@@ -662,18 +568,11 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
662
568
  this.mode = 'gui';
663
569
  this.codeValue = '';
664
570
  this.limetype = '';
665
- this.filter = {
666
- filter_type: 'AND',
667
- expressions: [],
668
- };
669
571
  this.handleLimetypeChange = (event) => {
670
572
  event.stopPropagation();
671
573
  this.limetype = event.detail;
672
574
  // Reset filter when limetype changes
673
- this.filter = {
674
- filter_type: 'AND',
675
- expressions: [],
676
- };
575
+ this.filter = undefined;
677
576
  // Reset response format when limetype changes
678
577
  this.internalResponseFormat = {
679
578
  object: {
@@ -683,17 +582,9 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
683
582
  this.emitChange();
684
583
  };
685
584
  this.handleFilterChange = (event) => {
585
+ var _a;
686
586
  event.stopPropagation();
687
- // Convert missing expression back to empty AND to keep the UI consistent
688
- if (event.detail.filter_type === '') {
689
- this.filter = {
690
- filter_type: 'AND',
691
- expressions: [],
692
- };
693
- }
694
- else {
695
- this.filter = event.detail;
696
- }
587
+ this.filter = (_a = event.detail) !== null && _a !== void 0 ? _a : undefined;
697
588
  this.emitChange();
698
589
  };
699
590
  this.handleResponseFormatChange = (event) => {
@@ -719,7 +610,7 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
719
610
  }
720
611
  // Update internal state from parsed query
721
612
  this.limetype = parsed.limetype || '';
722
- this.filter = normalizeLimeQueryFilterForGui(limeQueryToGuiFilter(parsed.filter));
613
+ this.filter = parsed.filter;
723
614
  this.internalResponseFormat = parsed.responseFormat;
724
615
  this.limit = parsed.limit;
725
616
  this.mode = 'gui';
@@ -760,7 +651,7 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
760
651
  }
761
652
  if (this.value) {
762
653
  this.limetype = this.value.limetype || '';
763
- this.filter = normalizeLimeQueryFilterForGui(limeQueryToGuiFilter(this.value.filter));
654
+ this.filter = this.value.filter;
764
655
  this.internalResponseFormat = this.value.responseFormat;
765
656
  this.limit = this.value.limit;
766
657
  }
@@ -775,7 +666,7 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
775
666
  render() {
776
667
  const guiSupported = this.checkGuiSupport();
777
668
  const showCodeMode = !this.guiModeEnabled || this.mode === 'code';
778
- return (h("div", { key: '96d1a933f699404c3806af3742e9ad30d53562aa', class: "lime-query-builder" }, this.renderLabel(), this.renderModeControls(guiSupported), showCodeMode
669
+ return (h("div", { key: '0b4d2bb5b4d503a775d8d3215e1e4c74fdb1eceb', class: "lime-query-builder" }, this.renderLabel(), this.renderModeControls(guiSupported), showCodeMode
779
670
  ? this.renderCodeMode(guiSupported)
780
671
  : this.renderGuiMode()));
781
672
  }
@@ -796,7 +687,7 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
796
687
  const limeQuery = {
797
688
  limetype: this.limetype,
798
689
  responseFormat: responseFormat,
799
- filter: guiFilterToLimeQuery(this.filter),
690
+ filter: this.filter,
800
691
  };
801
692
  if (this.limit !== undefined && this.limit > 0) {
802
693
  limeQuery.limit = this.limit;
@@ -817,7 +708,7 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
817
708
  const limeQuery = {
818
709
  limetype: this.limetype,
819
710
  responseFormat: responseFormat,
820
- filter: guiFilterToLimeQuery(this.filter),
711
+ filter: this.filter,
821
712
  };
822
713
  if (this.limit !== undefined && this.limit > 0) {
823
714
  limeQuery.limit = this.limit;
@@ -868,7 +759,7 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
868
759
  queryToCheck = {
869
760
  limetype: this.limetype,
870
761
  responseFormat: responseFormat,
871
- filter: guiFilterToLimeQuery(this.filter),
762
+ filter: this.filter,
872
763
  };
873
764
  if (this.limit !== undefined && this.limit > 0) {
874
765
  queryToCheck.limit = this.limit;
@@ -900,7 +791,7 @@ const LimeQueryBuilder = /*@__PURE__*/ proxyCustomElement(class LimeQueryBuilder
900
791
  if (!this.limetype) {
901
792
  return;
902
793
  }
903
- return (h("div", { class: "filter-section" }, h("h4", { class: "section-label" }, "Filter Conditions"), h("limebb-lime-query-filter-expression", { platform: this.platform, context: this.context, limetype: this.limetype, activeLimetype: this.activeLimetype, expression: this.filter, onExpressionChange: this.handleFilterChange })));
794
+ return (h("div", { class: "filter-section" }, h("h4", { class: "section-label" }, "Filter Conditions"), h("limebb-lime-query-filter-builder", { platform: this.platform, context: this.context, limetype: this.limetype, activeLimetype: this.activeLimetype, expression: this.filter, onExpressionChange: this.handleFilterChange })));
904
795
  }
905
796
  renderQueryOptionsSection() {
906
797
  var _a;
@@ -949,14 +840,14 @@ function defineCustomElement$1() {
949
840
  if (typeof customElements === "undefined") {
950
841
  return;
951
842
  }
952
- const components = ["limebb-lime-query-builder", "limebb-lime-query-filter-and", "limebb-lime-query-filter-comparison", "limebb-lime-query-filter-expression", "limebb-lime-query-filter-not", "limebb-lime-query-filter-or", "limebb-lime-query-value-input", "limebb-limetype-field", "limebb-property-selector", "limebb-response-format-editor", "limebb-response-format-item"];
843
+ const components = ["limebb-lime-query-builder", "limebb-lime-query-filter-builder", "limebb-lime-query-filter-comparison", "limebb-lime-query-filter-expression", "limebb-lime-query-filter-group", "limebb-lime-query-filter-not", "limebb-lime-query-value-input", "limebb-limetype-field", "limebb-property-selector", "limebb-response-format-editor", "limebb-response-format-item"];
953
844
  components.forEach(tagName => { switch (tagName) {
954
845
  case "limebb-lime-query-builder":
955
846
  if (!customElements.get(tagName)) {
956
847
  customElements.define(tagName, LimeQueryBuilder);
957
848
  }
958
849
  break;
959
- case "limebb-lime-query-filter-and":
850
+ case "limebb-lime-query-filter-builder":
960
851
  if (!customElements.get(tagName)) {
961
852
  defineCustomElement$b();
962
853
  }
@@ -971,12 +862,12 @@ function defineCustomElement$1() {
971
862
  defineCustomElement$9();
972
863
  }
973
864
  break;
974
- case "limebb-lime-query-filter-not":
865
+ case "limebb-lime-query-filter-group":
975
866
  if (!customElements.get(tagName)) {
976
867
  defineCustomElement$8();
977
868
  }
978
869
  break;
979
- case "limebb-lime-query-filter-or":
870
+ case "limebb-lime-query-filter-not":
980
871
  if (!customElements.get(tagName)) {
981
872
  defineCustomElement$7();
982
873
  }