@limetech/lime-crm-building-blocks 1.139.1 → 1.140.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 (261) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/cjs/{filter-condition-icons-HypsDn6x.js → filter-condition-icons-QK5stWj6.js} +142 -0
  3. package/dist/cjs/filter-operators-BTWvpD6A.js +61 -0
  4. package/dist/cjs/index.cjs.js +8 -1
  5. package/dist/cjs/lime-crm-building-blocks.cjs.js +1 -1
  6. package/dist/cjs/limebb-alert-dialog.cjs.entry.js +1 -1
  7. package/dist/cjs/limebb-browser.cjs.entry.js +2 -2
  8. package/dist/cjs/limebb-chat-icon-list_3.cjs.entry.js +4 -4
  9. package/dist/cjs/limebb-chat-list.cjs.entry.js +1 -1
  10. package/dist/cjs/limebb-color-palette-picker.cjs.entry.js +1 -1
  11. package/dist/cjs/limebb-color-palette-swatches.cjs.entry.js +1 -1
  12. package/dist/cjs/limebb-composer-toolbar.cjs.entry.js +2 -2
  13. package/dist/cjs/limebb-currency-picker.cjs.entry.js +1 -1
  14. package/dist/cjs/limebb-dashboard-widget.cjs.entry.js +1 -1
  15. package/dist/cjs/limebb-date-picker.cjs.entry.js +1 -1
  16. package/dist/cjs/limebb-date-range.cjs.entry.js +1 -1
  17. package/dist/cjs/limebb-document-chips.cjs.entry.js +1 -1
  18. package/dist/cjs/limebb-document-item.cjs.entry.js +2 -2
  19. package/dist/cjs/limebb-document-picker.cjs.entry.js +1 -1
  20. package/dist/cjs/limebb-feed-item-thumbnail-file-info.cjs.entry.js +1 -1
  21. package/dist/cjs/limebb-feed-timeline-item.cjs.entry.js +1 -1
  22. package/dist/cjs/limebb-feed.cjs.entry.js +1 -1
  23. package/dist/cjs/{limebb-filter-chip_5.cjs.entry.js → limebb-filter-chip_6.cjs.entry.js} +115 -81
  24. package/dist/cjs/limebb-icon-picker.cjs.entry.js +1 -1
  25. package/dist/cjs/limebb-info-tile-format.cjs.entry.js +1 -1
  26. package/dist/cjs/limebb-info-tile.cjs.entry.js +1 -1
  27. package/dist/cjs/limebb-kanban-group.cjs.entry.js +1 -1
  28. package/dist/cjs/limebb-kanban-item.cjs.entry.js +1 -1
  29. package/dist/cjs/limebb-lime-query-builder.cjs.entry.js +1 -1
  30. package/dist/cjs/limebb-lime-query-filter-comparison_2.cjs.entry.js +7 -24
  31. package/dist/cjs/limebb-lime-query-order-by-editor_2.cjs.entry.js +2 -2
  32. package/dist/cjs/limebb-lime-query-order-by-item.cjs.entry.js +2 -2
  33. package/dist/cjs/limebb-lime-query-response-format-builder.cjs.entry.js +1 -1
  34. package/dist/cjs/limebb-lime-query-response-format-editor_2.cjs.entry.js +1 -1
  35. package/dist/cjs/limebb-live-docs-info.cjs.entry.js +2 -2
  36. package/dist/cjs/limebb-locale-picker.cjs.entry.js +1 -1
  37. package/dist/cjs/limebb-mention-group-counter.cjs.entry.js +2 -2
  38. package/dist/cjs/limebb-navigation-button_2.cjs.entry.js +2 -2
  39. package/dist/cjs/limebb-notification-item.cjs.entry.js +1 -1
  40. package/dist/cjs/limebb-percentage-visualizer.cjs.entry.js +2 -2
  41. package/dist/cjs/limebb-rule-chip-popover.cjs.entry.js +1 -1
  42. package/dist/cjs/limebb-rule-editor.cjs.entry.js +1 -1
  43. package/dist/cjs/limebb-rule-gate.cjs.entry.js +1 -1
  44. package/dist/cjs/limebb-text-editor.cjs.entry.js +1 -1
  45. package/dist/cjs/limebb-trend-indicator.cjs.entry.js +1 -1
  46. package/dist/cjs/limebb-value-comparison-editor.cjs.entry.js +37 -35
  47. package/dist/cjs/loader.cjs.js +1 -1
  48. package/dist/collection/collection-manifest.json +1 -0
  49. package/dist/collection/components/alert-dialog/alert-dialog.js +1 -1
  50. package/dist/collection/components/browser/browser.js +2 -2
  51. package/dist/collection/components/chat-list/chat-icon-list/chat-icon-list.js +1 -1
  52. package/dist/collection/components/chat-list/chat-item/chat-item.js +2 -2
  53. package/dist/collection/components/chat-list/chat-list.js +1 -1
  54. package/dist/collection/components/chat-list/typing-indicator/typing-indicator.js +1 -1
  55. package/dist/collection/components/color-palette-picker/color-palette-picker.js +1 -1
  56. package/dist/collection/components/color-palette-picker/color-palette-swatches/color-palette-swatches.js +1 -1
  57. package/dist/collection/components/composer-toolbar/composer-toolbar.js +2 -2
  58. package/dist/collection/components/currency-picker/currency-picker.js +1 -1
  59. package/dist/collection/components/dashboard-widget/dashboard-widget.js +1 -1
  60. package/dist/collection/components/date-picker/date-picker.js +1 -1
  61. package/dist/collection/components/date-range/date-range.js +1 -1
  62. package/dist/collection/components/document-chips/document-chips.js +1 -1
  63. package/dist/collection/components/document-picker/document-item/document-item.js +2 -2
  64. package/dist/collection/components/document-picker/document-picker.js +1 -1
  65. package/dist/collection/components/feed/feed-item/feed-timeline-item.js +1 -1
  66. package/dist/collection/components/feed/feed-item-thumbnail-file-info/feed-item-thumbnail-file-info.js +1 -1
  67. package/dist/collection/components/feed/feed.js +1 -1
  68. package/dist/collection/components/filter-chip/filter-chip.js +2 -2
  69. package/dist/collection/components/filter-chip/filter-condition-icons.js +141 -0
  70. package/dist/collection/components/filter-chip/filter-operators.js +54 -0
  71. package/dist/collection/components/filter-condition-picker/filter-condition-picker.css +7 -0
  72. package/dist/collection/components/filter-condition-picker/filter-condition-picker.js +256 -0
  73. package/dist/collection/components/icon-picker/icon-picker.js +1 -1
  74. package/dist/collection/components/info-tile/format/config/info-tile-format.js +1 -1
  75. package/dist/collection/components/info-tile/info-tile.js +1 -1
  76. package/dist/collection/components/kanban/kanban-group/kanban-group.js +1 -1
  77. package/dist/collection/components/kanban/kanban-item/kanban-item.js +1 -1
  78. package/dist/collection/components/lime-query-builder/expressions/compound-leaf.js +6 -6
  79. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison-editor.js +37 -20
  80. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison.js +8 -25
  81. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.js +2 -2
  82. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-not.js +1 -1
  83. package/dist/collection/components/lime-query-builder/expressions/lime-query-operators.js +23 -57
  84. package/dist/collection/components/lime-query-builder/lime-query-builder.js +1 -1
  85. package/dist/collection/components/lime-query-builder/lime-query-response-format-builder.js +1 -1
  86. package/dist/collection/components/lime-query-builder/limetype-field/limetype-field.js +1 -1
  87. package/dist/collection/components/lime-query-builder/order-by/order-by-editor.js +1 -1
  88. package/dist/collection/components/lime-query-builder/order-by/order-by-item.js +2 -2
  89. package/dist/collection/components/lime-query-builder/response-format/response-format-item.js +1 -1
  90. package/dist/collection/components/limeobject/file-viewer/live-docs-info.js +2 -2
  91. package/dist/collection/components/locale-picker/locale-picker.js +1 -1
  92. package/dist/collection/components/notification-list/notification-item/notification-item.js +1 -1
  93. package/dist/collection/components/percentage-visualizer/percentage-visualizer.js +2 -2
  94. package/dist/collection/components/rule-editor/rule-chip-popover/rule-chip-popover.js +1 -1
  95. package/dist/collection/components/rule-editor/rule-editor.js +1 -1
  96. package/dist/collection/components/rule-editor/value-comparison-editor/value-comparison-editor.js +62 -36
  97. package/dist/collection/components/rule-gate/rule-gate.js +1 -1
  98. package/dist/collection/components/summary-popover/summary-popover.js +2 -2
  99. package/dist/collection/components/text-editor/mention-group-counter.js +2 -2
  100. package/dist/collection/components/text-editor/text-editor.js +1 -1
  101. package/dist/collection/components/trend-indicator/trend-indicator.js +1 -1
  102. package/dist/collection/index.js +1 -0
  103. package/dist/components/chat-icon-list.js +1 -1
  104. package/dist/components/chat-item.js +1 -1
  105. package/dist/components/currency-picker.js +1 -1
  106. package/dist/components/date-picker.js +1 -1
  107. package/dist/components/document-item.js +1 -1
  108. package/dist/components/feed-item-thumbnail-file-info.js +1 -1
  109. package/dist/components/feed-timeline-item.js +1 -1
  110. package/dist/components/filter-chip.js +1 -1
  111. package/dist/components/filter-condition-icons.js +1 -1
  112. package/dist/components/filter-condition-picker.js +1 -0
  113. package/dist/components/filter-operators.js +1 -0
  114. package/dist/components/index.js +1 -1
  115. package/dist/components/kanban-group.js +1 -1
  116. package/dist/components/kanban-item.js +1 -1
  117. package/dist/components/lime-query-filter-builder.js +1 -1
  118. package/dist/components/lime-query-filter-comparison-editor.js +1 -1
  119. package/dist/components/lime-query-filter-comparison.js +1 -1
  120. package/dist/components/lime-query-filter-expression.js +1 -1
  121. package/dist/components/limebb-alert-dialog.js +1 -1
  122. package/dist/components/limebb-browser.js +1 -1
  123. package/dist/components/limebb-chat-list.js +1 -1
  124. package/dist/components/limebb-color-palette-picker.js +1 -1
  125. package/dist/components/limebb-color-palette-swatches.js +1 -1
  126. package/dist/components/limebb-composer-toolbar.js +1 -1
  127. package/dist/components/limebb-dashboard-widget.js +1 -1
  128. package/dist/components/limebb-date-range.js +1 -1
  129. package/dist/components/limebb-document-chips.js +1 -1
  130. package/dist/components/limebb-document-picker.js +1 -1
  131. package/dist/components/limebb-feed.js +1 -1
  132. package/dist/components/limebb-filter-condition-picker.d.ts +11 -0
  133. package/dist/components/limebb-filter-condition-picker.js +1 -0
  134. package/dist/components/limebb-icon-picker.js +1 -1
  135. package/dist/components/limebb-info-tile-format.js +1 -1
  136. package/dist/components/limebb-info-tile.js +1 -1
  137. package/dist/components/limebb-lime-query-builder.js +1 -1
  138. package/dist/components/limebb-lime-query-response-format-builder.js +1 -1
  139. package/dist/components/limebb-locale-picker.js +1 -1
  140. package/dist/components/limebb-mention-group-counter.js +1 -1
  141. package/dist/components/limebb-rule-arg-filter-editor.js +1 -1
  142. package/dist/components/limebb-rule-editor.js +1 -1
  143. package/dist/components/limebb-rule-gate.js +1 -1
  144. package/dist/components/limebb-text-editor.js +1 -1
  145. package/dist/components/limebb-trend-indicator.js +1 -1
  146. package/dist/components/limebb-value-comparison-editor.js +1 -1
  147. package/dist/components/limetype-field.js +1 -1
  148. package/dist/components/live-docs-info.js +1 -1
  149. package/dist/components/notification-item.js +1 -1
  150. package/dist/components/order-by-editor.js +1 -1
  151. package/dist/components/order-by-item.js +1 -1
  152. package/dist/components/percentage-visualizer.js +1 -1
  153. package/dist/components/response-format-item.js +1 -1
  154. package/dist/components/rule-chip-popover.js +1 -1
  155. package/dist/components/summary-popover.js +1 -1
  156. package/dist/components/typing-indicator.js +1 -1
  157. package/dist/esm/{filter-condition-icons-D8CJOcfs.js → filter-condition-icons-C_y3-T4Q.js} +142 -1
  158. package/dist/esm/filter-operators-Lw-ccmxQ.js +57 -0
  159. package/dist/esm/index.js +4 -1
  160. package/dist/esm/lime-crm-building-blocks.js +1 -1
  161. package/dist/esm/limebb-alert-dialog.entry.js +1 -1
  162. package/dist/esm/limebb-browser.entry.js +2 -2
  163. package/dist/esm/limebb-chat-icon-list_3.entry.js +4 -4
  164. package/dist/esm/limebb-chat-list.entry.js +1 -1
  165. package/dist/esm/limebb-color-palette-picker.entry.js +1 -1
  166. package/dist/esm/limebb-color-palette-swatches.entry.js +1 -1
  167. package/dist/esm/limebb-composer-toolbar.entry.js +2 -2
  168. package/dist/esm/limebb-currency-picker.entry.js +1 -1
  169. package/dist/esm/limebb-dashboard-widget.entry.js +1 -1
  170. package/dist/esm/limebb-date-picker.entry.js +1 -1
  171. package/dist/esm/limebb-date-range.entry.js +1 -1
  172. package/dist/esm/limebb-document-chips.entry.js +1 -1
  173. package/dist/esm/limebb-document-item.entry.js +2 -2
  174. package/dist/esm/limebb-document-picker.entry.js +1 -1
  175. package/dist/esm/limebb-feed-item-thumbnail-file-info.entry.js +1 -1
  176. package/dist/esm/limebb-feed-timeline-item.entry.js +1 -1
  177. package/dist/esm/limebb-feed.entry.js +1 -1
  178. package/dist/esm/{limebb-filter-chip_5.entry.js → limebb-filter-chip_6.entry.js} +115 -82
  179. package/dist/esm/limebb-icon-picker.entry.js +1 -1
  180. package/dist/esm/limebb-info-tile-format.entry.js +1 -1
  181. package/dist/esm/limebb-info-tile.entry.js +1 -1
  182. package/dist/esm/limebb-kanban-group.entry.js +1 -1
  183. package/dist/esm/limebb-kanban-item.entry.js +1 -1
  184. package/dist/esm/limebb-lime-query-builder.entry.js +1 -1
  185. package/dist/esm/limebb-lime-query-filter-comparison_2.entry.js +7 -24
  186. package/dist/esm/limebb-lime-query-order-by-editor_2.entry.js +2 -2
  187. package/dist/esm/limebb-lime-query-order-by-item.entry.js +2 -2
  188. package/dist/esm/limebb-lime-query-response-format-builder.entry.js +1 -1
  189. package/dist/esm/limebb-lime-query-response-format-editor_2.entry.js +1 -1
  190. package/dist/esm/limebb-live-docs-info.entry.js +2 -2
  191. package/dist/esm/limebb-locale-picker.entry.js +1 -1
  192. package/dist/esm/limebb-mention-group-counter.entry.js +2 -2
  193. package/dist/esm/limebb-navigation-button_2.entry.js +2 -2
  194. package/dist/esm/limebb-notification-item.entry.js +1 -1
  195. package/dist/esm/limebb-percentage-visualizer.entry.js +2 -2
  196. package/dist/esm/limebb-rule-chip-popover.entry.js +1 -1
  197. package/dist/esm/limebb-rule-editor.entry.js +1 -1
  198. package/dist/esm/limebb-rule-gate.entry.js +1 -1
  199. package/dist/esm/limebb-text-editor.entry.js +1 -1
  200. package/dist/esm/limebb-trend-indicator.entry.js +1 -1
  201. package/dist/esm/limebb-value-comparison-editor.entry.js +37 -35
  202. package/dist/esm/loader.js +1 -1
  203. package/dist/lime-crm-building-blocks/index.esm.js +1 -1
  204. package/dist/lime-crm-building-blocks/lime-crm-building-blocks.esm.js +1 -1
  205. package/dist/lime-crm-building-blocks/{p-0579d006.entry.js → p-05a1762a.entry.js} +1 -1
  206. package/dist/lime-crm-building-blocks/{p-e4cef02f.entry.js → p-19dc7242.entry.js} +1 -1
  207. package/dist/lime-crm-building-blocks/{p-96ea4550.entry.js → p-1f97e235.entry.js} +1 -1
  208. package/dist/lime-crm-building-blocks/{p-0f821315.entry.js → p-22e68812.entry.js} +1 -1
  209. package/dist/lime-crm-building-blocks/{p-3fc9866a.entry.js → p-251aca46.entry.js} +1 -1
  210. package/dist/lime-crm-building-blocks/{p-39009b47.entry.js → p-2dab7d4b.entry.js} +1 -1
  211. package/dist/lime-crm-building-blocks/{p-46dc34a6.entry.js → p-3f537135.entry.js} +1 -1
  212. package/dist/lime-crm-building-blocks/{p-f73e3da0.entry.js → p-430e3d11.entry.js} +1 -1
  213. package/dist/lime-crm-building-blocks/{p-817e2952.entry.js → p-43bdd66b.entry.js} +1 -1
  214. package/dist/lime-crm-building-blocks/p-58f18819.entry.js +1 -0
  215. package/dist/lime-crm-building-blocks/{p-302e6e3e.entry.js → p-6fe4c1cd.entry.js} +1 -1
  216. package/dist/lime-crm-building-blocks/{p-bf4b2a91.entry.js → p-7033d408.entry.js} +1 -1
  217. package/dist/lime-crm-building-blocks/{p-fce1a282.entry.js → p-73b71080.entry.js} +1 -1
  218. package/dist/lime-crm-building-blocks/{p-de785fee.entry.js → p-7b6c9cbf.entry.js} +1 -1
  219. package/dist/lime-crm-building-blocks/{p-be5c43bb.entry.js → p-863f456c.entry.js} +1 -1
  220. package/dist/lime-crm-building-blocks/{p-1cd148e2.entry.js → p-896e77b9.entry.js} +1 -1
  221. package/dist/lime-crm-building-blocks/{p-dacd1df3.entry.js → p-8986f27b.entry.js} +1 -1
  222. package/dist/lime-crm-building-blocks/{p-5b1ccfe1.entry.js → p-92bf5318.entry.js} +1 -1
  223. package/dist/lime-crm-building-blocks/{p-fd38bf57.entry.js → p-9452fb56.entry.js} +1 -1
  224. package/dist/lime-crm-building-blocks/{p-41ddbdde.entry.js → p-964b066d.entry.js} +1 -1
  225. package/dist/lime-crm-building-blocks/{p-D8CJOcfs.js → p-C_y3-T4Q.js} +1 -1
  226. package/dist/lime-crm-building-blocks/p-D1RJ1y7s.js +1 -0
  227. package/dist/lime-crm-building-blocks/p-a157233b.entry.js +1 -0
  228. package/dist/lime-crm-building-blocks/{p-13a35953.entry.js → p-a4e676a6.entry.js} +1 -1
  229. package/dist/lime-crm-building-blocks/{p-b0ec4121.entry.js → p-aafead4e.entry.js} +1 -1
  230. package/dist/lime-crm-building-blocks/{p-b7e5a10e.entry.js → p-b34817df.entry.js} +1 -1
  231. package/dist/lime-crm-building-blocks/{p-8d592755.entry.js → p-c0fa239a.entry.js} +1 -1
  232. package/dist/lime-crm-building-blocks/p-c4e2dca5.entry.js +1 -0
  233. package/dist/lime-crm-building-blocks/p-cac2a49f.entry.js +1 -0
  234. package/dist/lime-crm-building-blocks/{p-d95f66c8.entry.js → p-cd7106f7.entry.js} +1 -1
  235. package/dist/lime-crm-building-blocks/{p-bde3e779.entry.js → p-d40f53a5.entry.js} +1 -1
  236. package/dist/lime-crm-building-blocks/{p-e618ccd3.entry.js → p-d78370be.entry.js} +1 -1
  237. package/dist/lime-crm-building-blocks/{p-6cdefdc9.entry.js → p-d7d21bad.entry.js} +1 -1
  238. package/dist/lime-crm-building-blocks/{p-994296b0.entry.js → p-dba6f583.entry.js} +1 -1
  239. package/dist/lime-crm-building-blocks/p-dbbc5ba7.entry.js +1 -0
  240. package/dist/lime-crm-building-blocks/{p-69a3038b.entry.js → p-dec2b87d.entry.js} +1 -1
  241. package/dist/lime-crm-building-blocks/{p-9033acb5.entry.js → p-e242b955.entry.js} +1 -1
  242. package/dist/lime-crm-building-blocks/{p-5bc41701.entry.js → p-e29c27b8.entry.js} +1 -1
  243. package/dist/lime-crm-building-blocks/{p-d7d6d21b.entry.js → p-edeb359f.entry.js} +1 -1
  244. package/dist/lime-crm-building-blocks/{p-bd0a30d7.entry.js → p-f1090436.entry.js} +1 -1
  245. package/dist/lime-crm-building-blocks/{p-0f9a680c.entry.js → p-f3cb68d6.entry.js} +1 -1
  246. package/dist/lime-crm-building-blocks/{p-558915e4.entry.js → p-f4214745.entry.js} +1 -1
  247. package/dist/lime-crm-building-blocks/{p-e2420cde.entry.js → p-fb050628.entry.js} +1 -1
  248. package/dist/types/components/filter-chip/filter-condition-icons.d.ts +8 -0
  249. package/dist/types/components/filter-chip/filter-operators.d.ts +22 -0
  250. package/dist/types/components/filter-condition-picker/filter-condition-picker.d.ts +60 -0
  251. package/dist/types/components/lime-query-builder/expressions/lime-query-filter-comparison-editor.d.ts +8 -4
  252. package/dist/types/components/lime-query-builder/expressions/lime-query-operators.d.ts +16 -9
  253. package/dist/types/components/rule-editor/value-comparison-editor/value-comparison-editor.d.ts +7 -2
  254. package/dist/types/components.d.ts +164 -0
  255. package/dist/types/index.d.ts +1 -0
  256. package/package.json +5 -5
  257. package/dist/lime-crm-building-blocks/p-0843b50b.entry.js +0 -1
  258. package/dist/lime-crm-building-blocks/p-5b819d10.entry.js +0 -1
  259. package/dist/lime-crm-building-blocks/p-7a158104.entry.js +0 -1
  260. package/dist/lime-crm-building-blocks/p-92679e20.entry.js +0 -1
  261. package/dist/lime-crm-building-blocks/p-927e446d.entry.js +0 -1
@@ -197,3 +197,144 @@ export function getFilterConditionLabelKey(condition, propertyType) {
197
197
  }
198
198
  return undefined;
199
199
  }
200
+ /**
201
+ * Conditions for text-like properties (`string`, `text`, `phone`, `link`):
202
+ * "Contains … Matches", with equality reading as "Is" / "Is not".
203
+ */
204
+ const TEXT_CONDITIONS = [
205
+ 'contains',
206
+ 'not-contains',
207
+ 'equals',
208
+ 'not-equals',
209
+ 'begins-with',
210
+ 'not-begins-with',
211
+ 'ends-with',
212
+ 'not-ends-with',
213
+ 'between',
214
+ 'not-between',
215
+ 'empty',
216
+ 'not-empty',
217
+ 'matches',
218
+ ];
219
+ /**
220
+ * Conditions for numeric properties (`integer`, `decimal`, `percent`).
221
+ */
222
+ const NUMBER_CONDITIONS = [
223
+ 'equals',
224
+ 'not-equals',
225
+ 'greater-than',
226
+ 'greater-than-or-equal',
227
+ 'less-than',
228
+ 'less-than-or-equal',
229
+ 'between',
230
+ 'not-between',
231
+ 'empty',
232
+ 'not-empty',
233
+ 'matches',
234
+ ];
235
+ /**
236
+ * Conditions for date/time properties. Comparisons read as "After" / "Before" /
237
+ * "On"; there is intentionally no `greater-than-or-equal` / `less-than-or-equal`
238
+ * — an inclusive bound is expressed in the date value editor, not as a separate
239
+ * condition.
240
+ */
241
+ const DATE_CONDITIONS = [
242
+ 'greater-than',
243
+ 'less-than',
244
+ 'between',
245
+ 'not-between',
246
+ 'equals',
247
+ 'previous',
248
+ 'current',
249
+ 'next',
250
+ 'empty',
251
+ 'not-empty',
252
+ 'matches',
253
+ ];
254
+ /**
255
+ * Conditions for choice properties (`option`, `set`): "Is" / "Is not" (the
256
+ * latter was missing from the older CRM option popovers), plus "Matches".
257
+ */
258
+ const OPTION_CONDITIONS = [
259
+ 'equals',
260
+ 'not-equals',
261
+ 'matches',
262
+ ];
263
+ /**
264
+ * Conditions for boolean (`yesno`) properties: "Is" / "Is not", plus "Empty" /
265
+ * "Not empty" and "Matches".
266
+ *
267
+ * A yes/no value is effectively three-state — Yes, No, or *unset* (never
268
+ * answered) when the property is nullable, i.e. not required and without a
269
+ * default. "Empty" / "Not empty" filter on that third state — whether the value
270
+ * was ever set — which is distinct from filtering on Yes vs No. Consumers whose
271
+ * booleans are always populated can narrow this list via the picker's
272
+ * `conditions` prop. See the "Boolean (yes/no)" example.
273
+ */
274
+ const YESNO_CONDITIONS = [
275
+ 'equals',
276
+ 'not-equals',
277
+ 'empty',
278
+ 'not-empty',
279
+ 'matches',
280
+ ];
281
+ /**
282
+ * Conditions for relation properties (`belongsto`, `hasone`, `hasmany`,
283
+ * `hasandbelongstomany`): connected / not connected, filter-set membership,
284
+ * empty / not empty, and "Matches".
285
+ */
286
+ const RELATION_CONDITIONS = [
287
+ 'connected-to',
288
+ 'not-connected-to',
289
+ 'in-filter-set',
290
+ 'not-in-filter-set',
291
+ 'empty',
292
+ 'not-empty',
293
+ 'matches',
294
+ ];
295
+ /** Types with no filter catalog (`user`, `xml`, `file`, `system`). */
296
+ const NO_CONDITIONS = [];
297
+ /**
298
+ * Per-property-type catalogs, in the order a condition picker should list them.
299
+ * An exhaustive map, so a property type added upstream is a compile error here
300
+ * rather than a silent fall-through to no conditions.
301
+ */
302
+ const CONDITIONS_BY_PROPERTY_TYPE = {
303
+ string: TEXT_CONDITIONS,
304
+ text: TEXT_CONDITIONS,
305
+ phone: TEXT_CONDITIONS,
306
+ link: TEXT_CONDITIONS,
307
+ integer: NUMBER_CONDITIONS,
308
+ decimal: NUMBER_CONDITIONS,
309
+ percent: NUMBER_CONDITIONS,
310
+ date: DATE_CONDITIONS,
311
+ year: DATE_CONDITIONS,
312
+ quarter: DATE_CONDITIONS,
313
+ month: DATE_CONDITIONS,
314
+ time: DATE_CONDITIONS,
315
+ timeofday: DATE_CONDITIONS,
316
+ option: OPTION_CONDITIONS,
317
+ set: OPTION_CONDITIONS,
318
+ yesno: YESNO_CONDITIONS,
319
+ belongsto: RELATION_CONDITIONS,
320
+ hasone: RELATION_CONDITIONS,
321
+ hasmany: RELATION_CONDITIONS,
322
+ hasandbelongstomany: RELATION_CONDITIONS,
323
+ user: NO_CONDITIONS,
324
+ xml: NO_CONDITIONS,
325
+ file: NO_CONDITIONS,
326
+ system: NO_CONDITIONS,
327
+ };
328
+ /**
329
+ * The filter conditions a property of the given type can be filtered by, in the
330
+ * order `limebb-filter-condition-picker` should list them, or an empty array for
331
+ * a type without a catalog. A consumer that supports only a subset passes its
332
+ * own list to the picker instead.
333
+ * @param propertyType
334
+ */
335
+ export function getConditionsForPropertyType(propertyType) {
336
+ if (!propertyType) {
337
+ return [];
338
+ }
339
+ return CONDITIONS_BY_PROPERTY_TYPE[propertyType];
340
+ }
@@ -0,0 +1,54 @@
1
+ import { Operator } from "@limetech/lime-web-components";
2
+ /**
3
+ * The canonical operator↔condition translation for the *authoring* (write)
4
+ * direction, so consumers (the query builder, the rule editor, the CRM property
5
+ * filters) keep the mapping in one place instead of repeating it.
6
+ *
7
+ * Intentionally separate from the structural read-side map in `compound-leaf.ts`,
8
+ * which interprets *existing* expressions and maps some operators differently
9
+ * (a bare `NOT` reads as `not-equals`, a bare `IN` as `equals`). Do not merge
10
+ * the two.
11
+ */
12
+ const OPERATOR_CONDITION_PAIRS = [
13
+ [Operator.EQUALS, 'equals'],
14
+ [Operator.NOT_EQUALS, 'not-equals'],
15
+ [Operator.GREATER, 'greater-than'],
16
+ [Operator.GREATER_OR_EQUAL, 'greater-than-or-equal'],
17
+ [Operator.LESS, 'less-than'],
18
+ [Operator.LESS_OR_EQUAL, 'less-than-or-equal'],
19
+ [Operator.IN, 'in-filter-set'],
20
+ [Operator.LIKE, 'contains'],
21
+ [Operator.BEGINS, 'begins-with'],
22
+ [Operator.ENDS, 'ends-with'],
23
+ ];
24
+ /**
25
+ * The {@link Operator} that authors a condition, or `undefined` for a condition
26
+ * with no single operator (e.g. `between`, `empty`, `previous`).
27
+ * @param condition
28
+ */
29
+ export function conditionToOperator(condition) {
30
+ var _a;
31
+ return (_a = OPERATOR_CONDITION_PAIRS.find(([, mapped]) => mapped === condition)) === null || _a === void 0 ? void 0 : _a[0];
32
+ }
33
+ /**
34
+ * The conditions a list of operators authors, in order, dropping any operator
35
+ * with no authoring condition. Lets a consumer declare which operators it offers
36
+ * and hand the matching conditions to `limebb-filter-condition-picker`.
37
+ * @param operators
38
+ */
39
+ export function operatorsToConditions(operators) {
40
+ return operators
41
+ .map((operator) => { var _a; return (_a = OPERATOR_CONDITION_PAIRS.find(([op]) => op === operator)) === null || _a === void 0 ? void 0 : _a[1]; })
42
+ .filter((condition) => condition !== undefined);
43
+ }
44
+ /**
45
+ * The {@link FilterCondition} an operator authors, or `undefined` for an
46
+ * operator with no authoring condition (e.g. the structural `AND`/`OR`/`NOT`).
47
+ * @param operator
48
+ */
49
+ export function operatorToCondition(operator) {
50
+ if (!operator) {
51
+ return;
52
+ }
53
+ return operatorsToConditions([operator])[0];
54
+ }
@@ -0,0 +1,7 @@
1
+ :host(limebb-filter-condition-picker) {
2
+ display: inline-block;
3
+ }
4
+
5
+ .condition {
6
+ --limel-notched-outline-label-color: transparent;
7
+ }
@@ -0,0 +1,256 @@
1
+ import { Host, h } from "@stencil/core";
2
+ import { PlatformServiceName, } from "@limetech/lime-web-components";
3
+ import { getConditionsForPropertyType, getFilterConditionIcon, getFilterConditionLabelKey, } from "../filter-chip/filter-condition-icons";
4
+ /**
5
+ * Accessible label for the control: set for screen readers but hidden visually
6
+ * (see the stylesheet). Reuses the shared, localized "Operator" label.
7
+ */
8
+ const LABEL_KEY = 'webclient.operator';
9
+ /**
10
+ * Filter condition picker
11
+ *
12
+ * A dropdown for choosing a single filter condition, such as Is / Is not /
13
+ * Greater than / Contains / Between / After / Empty / …
14
+ *
15
+ * It is presentational and speaks the shared filter vocabulary: give it a
16
+ * `propertyType` and it lists the right conditions for that data type, each with
17
+ * the correct icon and localized wording (e.g. `greater-than` reads "Greater
18
+ * than" for a number but "After" for a date, and `equals` reads "Is" for an
19
+ * option).
20
+ *
21
+ * A consumer that supports only a subset of conditions passes its own
22
+ * list via `conditions`; the consumer maps its domain operators to and from the
23
+ * `FilterCondition` values itself.
24
+ *
25
+ * @exampleComponent limebb-example-filter-condition-picker-basic
26
+ * @exampleComponent limebb-example-filter-condition-picker-property-types
27
+ * @exampleComponent limebb-example-filter-condition-picker-boolean
28
+ * @exampleComponent limebb-example-filter-condition-picker-custom
29
+ */
30
+ export class FilterConditionPicker {
31
+ constructor() {
32
+ /**
33
+ * Whether the picker is disabled.
34
+ */
35
+ this.disabled = false;
36
+ this.handleChange = (event) => {
37
+ event.stopPropagation();
38
+ if (event.detail) {
39
+ this.change.emit(event.detail.value);
40
+ }
41
+ };
42
+ }
43
+ render() {
44
+ const items = this.buildItems();
45
+ const selected = this.selectedOption(items);
46
+ return (h(Host, { key: 'ca926963d368460db20fa8961f49825d19ae2c07' }, h("limel-select", { key: '5571b580b7da63d1a95fef6cb9b204ed3b32cf75', class: "condition", label: this.accessibleLabel, disabled: this.disabled, options: items, value: selected, onChange: this.handleChange })));
47
+ }
48
+ buildItems() {
49
+ var _a;
50
+ const conditions = (_a = this.conditions) !== null && _a !== void 0 ? _a : getConditionsForPropertyType(this.propertyType);
51
+ // Divider before the empty / not-empty group and before "matches".
52
+ const emptyGroupStart = conditions.findIndex((condition) => condition === 'empty' || condition === 'not-empty');
53
+ const matchesIndex = conditions.indexOf('matches');
54
+ const items = [];
55
+ for (const [index, condition] of conditions.entries()) {
56
+ if (index > 0 &&
57
+ (index === emptyGroupStart || index === matchesIndex)) {
58
+ items.push({ separator: true });
59
+ }
60
+ items.push({
61
+ value: condition,
62
+ text: this.conditionLabel(condition),
63
+ icon: getFilterConditionIcon(condition, this.propertyType),
64
+ });
65
+ }
66
+ return items;
67
+ }
68
+ selectedOption(items) {
69
+ const options = items.filter((item) => !('separator' in item));
70
+ return options.find((option) => option.value === this.value);
71
+ }
72
+ get accessibleLabel() {
73
+ var _a;
74
+ return (_a = this.translate(LABEL_KEY)) !== null && _a !== void 0 ? _a : 'Operator';
75
+ }
76
+ conditionLabel(condition) {
77
+ var _a;
78
+ const key = getFilterConditionLabelKey(condition, this.propertyType);
79
+ return (_a = (key ? this.translate(key) : undefined)) !== null && _a !== void 0 ? _a : condition;
80
+ }
81
+ translate(key) {
82
+ var _a;
83
+ const translated = (_a = this.translator) === null || _a === void 0 ? void 0 : _a.get(key);
84
+ return translated && translated !== key ? translated : undefined;
85
+ }
86
+ get translator() {
87
+ var _a;
88
+ try {
89
+ return (_a = this.platform) === null || _a === void 0 ? void 0 : _a.get(PlatformServiceName.Translate);
90
+ }
91
+ catch (_b) {
92
+ return;
93
+ }
94
+ }
95
+ static get is() { return "limebb-filter-condition-picker"; }
96
+ static get encapsulation() { return "shadow"; }
97
+ static get originalStyleUrls() {
98
+ return {
99
+ "$": ["filter-condition-picker.scss"]
100
+ };
101
+ }
102
+ static get styleUrls() {
103
+ return {
104
+ "$": ["filter-condition-picker.css"]
105
+ };
106
+ }
107
+ static get properties() {
108
+ return {
109
+ "platform": {
110
+ "type": "unknown",
111
+ "mutable": false,
112
+ "complexType": {
113
+ "original": "LimeWebComponentPlatform",
114
+ "resolved": "LimeWebComponentPlatform | undefined",
115
+ "references": {
116
+ "LimeWebComponentPlatform": {
117
+ "location": "import",
118
+ "path": "@limetech/lime-web-components",
119
+ "id": "node_modules::LimeWebComponentPlatform",
120
+ "referenceLocation": "LimeWebComponentPlatform"
121
+ }
122
+ }
123
+ },
124
+ "required": false,
125
+ "optional": true,
126
+ "docs": {
127
+ "tags": [],
128
+ "text": "Platform service provider"
129
+ },
130
+ "getter": false,
131
+ "setter": false
132
+ },
133
+ "value": {
134
+ "type": "string",
135
+ "mutable": false,
136
+ "complexType": {
137
+ "original": "FilterCondition",
138
+ "resolved": "\"begins-with\" | \"between\" | \"connected-to\" | \"contains\" | \"current\" | \"empty\" | \"ends-with\" | \"equals\" | \"greater-than\" | \"greater-than-or-equal\" | \"in-filter-set\" | \"less-than\" | \"less-than-or-equal\" | \"matches\" | \"next\" | \"not-begins-with\" | \"not-between\" | \"not-connected-to\" | \"not-contains\" | \"not-empty\" | \"not-ends-with\" | \"not-equals\" | \"not-in-filter-set\" | \"previous\" | undefined",
139
+ "references": {
140
+ "FilterCondition": {
141
+ "location": "import",
142
+ "path": "../filter-chip/filter-chip.types",
143
+ "id": "src/components/filter-chip/filter-chip.types.ts::FilterCondition",
144
+ "referenceLocation": "FilterCondition"
145
+ }
146
+ }
147
+ },
148
+ "required": false,
149
+ "optional": true,
150
+ "docs": {
151
+ "tags": [],
152
+ "text": "The currently selected condition."
153
+ },
154
+ "getter": false,
155
+ "setter": false,
156
+ "reflect": false,
157
+ "attribute": "value"
158
+ },
159
+ "propertyType": {
160
+ "type": "string",
161
+ "mutable": false,
162
+ "complexType": {
163
+ "original": "PropertyType",
164
+ "resolved": "\"belongsto\" | \"date\" | \"decimal\" | \"file\" | \"hasandbelongstomany\" | \"hasmany\" | \"hasone\" | \"integer\" | \"link\" | \"month\" | \"option\" | \"percent\" | \"phone\" | \"quarter\" | \"set\" | \"string\" | \"system\" | \"text\" | \"time\" | \"timeofday\" | \"user\" | \"xml\" | \"year\" | \"yesno\" | undefined",
165
+ "references": {
166
+ "PropertyType": {
167
+ "location": "import",
168
+ "path": "@limetech/lime-web-components",
169
+ "id": "node_modules::PropertyType",
170
+ "referenceLocation": "PropertyType"
171
+ }
172
+ }
173
+ },
174
+ "required": false,
175
+ "optional": true,
176
+ "docs": {
177
+ "tags": [],
178
+ "text": "Data type of the filtered property; selects which conditions are listed\nand their type-specific wording and icons."
179
+ },
180
+ "getter": false,
181
+ "setter": false,
182
+ "reflect": false,
183
+ "attribute": "property-type"
184
+ },
185
+ "conditions": {
186
+ "type": "unknown",
187
+ "mutable": false,
188
+ "complexType": {
189
+ "original": "FilterCondition[]",
190
+ "resolved": "FilterCondition[] | undefined",
191
+ "references": {
192
+ "FilterCondition": {
193
+ "location": "import",
194
+ "path": "../filter-chip/filter-chip.types",
195
+ "id": "src/components/filter-chip/filter-chip.types.ts::FilterCondition",
196
+ "referenceLocation": "FilterCondition"
197
+ }
198
+ }
199
+ },
200
+ "required": false,
201
+ "optional": true,
202
+ "docs": {
203
+ "tags": [],
204
+ "text": "Explicit conditions to offer, overriding the per-type catalog."
205
+ },
206
+ "getter": false,
207
+ "setter": false
208
+ },
209
+ "disabled": {
210
+ "type": "boolean",
211
+ "mutable": false,
212
+ "complexType": {
213
+ "original": "boolean",
214
+ "resolved": "boolean",
215
+ "references": {}
216
+ },
217
+ "required": false,
218
+ "optional": false,
219
+ "docs": {
220
+ "tags": [],
221
+ "text": "Whether the picker is disabled."
222
+ },
223
+ "getter": false,
224
+ "setter": false,
225
+ "reflect": true,
226
+ "attribute": "disabled",
227
+ "defaultValue": "false"
228
+ }
229
+ };
230
+ }
231
+ static get events() {
232
+ return [{
233
+ "method": "change",
234
+ "name": "change",
235
+ "bubbles": true,
236
+ "cancelable": true,
237
+ "composed": true,
238
+ "docs": {
239
+ "tags": [],
240
+ "text": "Emitted when the user selects a condition."
241
+ },
242
+ "complexType": {
243
+ "original": "FilterCondition",
244
+ "resolved": "\"begins-with\" | \"between\" | \"connected-to\" | \"contains\" | \"current\" | \"empty\" | \"ends-with\" | \"equals\" | \"greater-than\" | \"greater-than-or-equal\" | \"in-filter-set\" | \"less-than\" | \"less-than-or-equal\" | \"matches\" | \"next\" | \"not-begins-with\" | \"not-between\" | \"not-connected-to\" | \"not-contains\" | \"not-empty\" | \"not-ends-with\" | \"not-equals\" | \"not-in-filter-set\" | \"previous\"",
245
+ "references": {
246
+ "FilterCondition": {
247
+ "location": "import",
248
+ "path": "../filter-chip/filter-chip.types",
249
+ "id": "src/components/filter-chip/filter-chip.types.ts::FilterCondition",
250
+ "referenceLocation": "FilterCondition"
251
+ }
252
+ }
253
+ }
254
+ }];
255
+ }
256
+ }
@@ -35,7 +35,7 @@ export class IconPicker {
35
35
  icon: this.value,
36
36
  };
37
37
  }
38
- return (h("limel-picker", { key: 'd71d9babaf189723ccb3ece1722826054e109f70', label: this.label, helperText: this.helperText, disabled: this.disabled, readonly: this.readonly, invalid: this.invalid, required: this.required, value: value, searcher: this.search, onChange: this.handleChange, badgeIcons: false, leadingIcon: "search", searchLabel: "Start typing to find the right icon" }));
38
+ return (h("limel-picker", { key: 'bf6b76bbcea838150261e9e0037b1d7ca1ee08d1', label: this.label, helperText: this.helperText, disabled: this.disabled, readonly: this.readonly, invalid: this.invalid, required: this.required, value: value, searcher: this.search, onChange: this.handleChange, badgeIcons: false, leadingIcon: "search", searchLabel: "Start typing to find the right icon" }));
39
39
  }
40
40
  static get is() { return "limebb-icon-picker"; }
41
41
  static get encapsulation() { return "shadow"; }
@@ -92,7 +92,7 @@ export class InfoTileAdminConfig {
92
92
  },
93
93
  ];
94
94
  return [
95
- h("limel-button-group", { key: '5ec61e22f0049afba77310ef1162c361a71f3290', value: buttons.filter(this.isValidButton), onChange: this.handleChangeType }),
95
+ h("limel-button-group", { key: '68999f607fd66a5a451929d6720200734c6505ea', value: buttons.filter(this.isValidButton), onChange: this.handleChangeType }),
96
96
  this.renderFormatConfig(),
97
97
  ];
98
98
  }
@@ -116,7 +116,7 @@ export class InfoTile {
116
116
  const errorProps = Object.assign(Object.assign({}, baseProps), { icon: 'error', prefix: 'ERROR', loading: true, label: this.getLabel(filter) });
117
117
  const normalProps = Object.assign(Object.assign({}, baseProps), { label: this.getLabel(filter), link: this.getLink(filter), loading: this.loading, value: value === null || value === void 0 ? void 0 : value.value.trim() });
118
118
  const props = !filter || this.error ? errorProps : normalProps;
119
- return (h("limel-info-tile", Object.assign({ key: '8ce57413673c0feddc8cff70c66845ddacee5f74', class: { error: !filter || this.error } }, props)));
119
+ return (h("limel-info-tile", Object.assign({ key: '802c93fade2b3aff10e53c1a970798b994bff2d2', class: { error: !filter || this.error } }, props)));
120
120
  }
121
121
  /**
122
122
  * Effective `reducedPresence` for this render. The boolean prop
@@ -27,7 +27,7 @@ export class KanbanGroup {
27
27
  };
28
28
  }
29
29
  render() {
30
- return (h(Host, { key: '074640215f29d21e8d3f38b81850823e8a93ce3c' }, this.renderHelp(), this.renderGroupHeading(), this.renderGroupSummary(), this.renderItems()));
30
+ return (h(Host, { key: '5c0675c4edff236ac8b4d90c93d418e3b0c18a9c' }, this.renderHelp(), this.renderGroupHeading(), this.renderGroupSummary(), this.renderItems()));
31
31
  }
32
32
  renderGroupSummary() {
33
33
  if (!this.summary || !this.totalCount) {
@@ -55,7 +55,7 @@ export class KanbanItemComponent {
55
55
  }
56
56
  render() {
57
57
  var _a, _b;
58
- return (h(Host, { key: '6eb7fa30141a62e40588a59f17d27392dac78b90', id: this.item.id.toString(), class: {
58
+ return (h(Host, { key: '282342e6a11234154e4cbcc8df113aafd5cd9cd2', id: this.item.id.toString(), class: {
59
59
  'has-unpromoted-actions': !!((_a = this.item.unpromotedActions) === null || _a === void 0 ? void 0 : _a.length),
60
60
  'is-selected': !!((_b = this.item) === null || _b === void 0 ? void 0 : _b.selected),
61
61
  }, style: {
@@ -1,10 +1,10 @@
1
1
  import { Operator, } from "@limetech/lime-web-components";
2
- // Intentionally diverges from the same-named map in
3
- // `lime-query-filter-comparison.tsx` (the comparison-editor's operator
4
- // vocabulary): that map has no `NOT` entry and maps `IN` to `'in-filter-set'`,
5
- // whereas here a keyed bare `NOT` reads as `not-equals` and a bare `IN` set
6
- // reads as `equals` (see `describeKeyed`). They are deliberately not the same
7
- // table — do not reconcile them into one.
2
+ // Intentionally diverges from the write-side map in `filter-operators.ts` (the
3
+ // operator vocabulary the query builder and rule editor author with): that map
4
+ // has no `NOT` entry and maps `IN` to `'in-filter-set'`, whereas here a keyed
5
+ // bare `NOT` reads as `not-equals` and a bare `IN` set reads as `equals` (see
6
+ // `describeKeyed`). They are deliberately not the same table — do not reconcile
7
+ // them into one.
8
8
  // Prototype-free (`Object.create(null)`): a junk `op` such as `'__proto__'` or
9
9
  // `'constructor'` resolves to `undefined` rather than an inherited
10
10
  // `Object.prototype` member, so a malformed expression falls through to "stays
@@ -1,6 +1,7 @@
1
- import { Operator, PlatformServiceName, } from "@limetech/lime-web-components";
1
+ import { Operator, } from "@limetech/lime-web-components";
2
2
  import { Host, h } from "@stencil/core";
3
- import { LIME_QUERY_OPERATORS, } from "./lime-query-operators";
3
+ import { conditionToOperator, operatorToCondition, } from "../../filter-chip/filter-operators";
4
+ import { LIME_QUERY_CONDITIONS, } from "./lime-query-operators";
4
5
  /**
5
6
  * Inline editor for a single comparison expression. `shadow: true` so
6
7
  * its stylesheet travels with the host when `limel-popover` portals it
@@ -14,9 +15,12 @@ export class LimeQueryFilterComparisonEditorComponent {
14
15
  event.stopPropagation();
15
16
  this.expressionChange.emit(Object.assign(Object.assign({}, this.expression), { key: event.detail }));
16
17
  };
17
- this.handleOperatorChange = (event) => {
18
+ this.handleConditionChange = (event) => {
18
19
  event.stopPropagation();
19
- const newOperator = event.detail.value;
20
+ const newOperator = conditionToOperator(event.detail);
21
+ if (!newOperator) {
22
+ return;
23
+ }
20
24
  const oldOperator = this.expression.op;
21
25
  let convertedValue = this.expression.exp;
22
26
  // IN expects an array; other operators expect a single value.
@@ -48,23 +52,14 @@ export class LimeQueryFilterComparisonEditorComponent {
48
52
  (_a = this.propertySelectorEl) === null || _a === void 0 ? void 0 : _a.focus();
49
53
  }
50
54
  render() {
51
- return (h(Host, { key: '05ca2dc867f8c42e2ca1299cd33c0f3faae0ed31' }, this.renderPropertySelector(), this.renderOperator(), this.renderValueInput()));
55
+ return (h(Host, { key: '528f313843bb6e8e779fc3a5603c10769cbd183b' }, this.renderPropertySelector(), this.renderConditionPicker(), this.renderValueInput()));
52
56
  }
53
57
  renderPropertySelector() {
54
58
  return (h("limebb-property-selector", { ref: (el) => (this.propertySelectorEl = el), class: "property", label: "Property", platform: this.platform, context: this.context, limetype: this.limetype, value: this.expression.key, required: true, onChange: this.handlePropertyChange }));
55
59
  }
56
- renderOperator() {
60
+ renderConditionPicker() {
57
61
  const operatorHasBeenSet = !!this.expression.op;
58
- const options = LIME_QUERY_OPERATORS.map((op) => {
59
- var _a, _b;
60
- return ({
61
- text: (_b = (_a = this.translator) === null || _a === void 0 ? void 0 : _a.get(op.label)) !== null && _b !== void 0 ? _b : op.label,
62
- value: op.value,
63
- icon: op.icon ? { name: op.icon } : undefined,
64
- });
65
- });
66
- const selectedOption = options.find((o) => o.value === this.expression.op);
67
- return (h("limel-select", { class: "operator", label: "Operator", value: selectedOption, options: options, disabled: !operatorHasBeenSet && !this.expression.key, onChange: this.handleOperatorChange }));
62
+ return (h("limebb-filter-condition-picker", { class: "operator", platform: this.platform, propertyType: this.propertyType, conditions: LIME_QUERY_CONDITIONS, value: operatorToCondition(this.expression.op), disabled: !operatorHasBeenSet && !this.expression.key, onChange: this.handleConditionChange }));
68
63
  }
69
64
  renderValueInput() {
70
65
  if (!this.expression.op) {
@@ -72,10 +67,6 @@ export class LimeQueryFilterComparisonEditorComponent {
72
67
  }
73
68
  return (h("limebb-lime-query-value-input", { class: "value", label: "Value", 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 }));
74
69
  }
75
- get translator() {
76
- var _a;
77
- return (_a = this.platform) === null || _a === void 0 ? void 0 : _a.get(PlatformServiceName.Translate);
78
- }
79
70
  static get is() { return "limebb-lime-query-filter-comparison-editor"; }
80
71
  static get encapsulation() { return "shadow"; }
81
72
  static get delegatesFocus() { return true; }
@@ -200,6 +191,32 @@ export class LimeQueryFilterComparisonEditorComponent {
200
191
  },
201
192
  "getter": false,
202
193
  "setter": false
194
+ },
195
+ "propertyType": {
196
+ "type": "string",
197
+ "mutable": false,
198
+ "complexType": {
199
+ "original": "PropertyType",
200
+ "resolved": "\"belongsto\" | \"date\" | \"decimal\" | \"file\" | \"hasandbelongstomany\" | \"hasmany\" | \"hasone\" | \"integer\" | \"link\" | \"month\" | \"option\" | \"percent\" | \"phone\" | \"quarter\" | \"set\" | \"string\" | \"system\" | \"text\" | \"time\" | \"timeofday\" | \"user\" | \"xml\" | \"year\" | \"yesno\" | undefined",
201
+ "references": {
202
+ "PropertyType": {
203
+ "location": "import",
204
+ "path": "@limetech/lime-web-components",
205
+ "id": "node_modules::PropertyType",
206
+ "referenceLocation": "PropertyType"
207
+ }
208
+ }
209
+ },
210
+ "required": false,
211
+ "optional": true,
212
+ "docs": {
213
+ "tags": [],
214
+ "text": "Data type of the selected property; lets the picker pick type-specific\nwording and icons."
215
+ },
216
+ "getter": false,
217
+ "setter": false,
218
+ "reflect": false,
219
+ "attribute": "property-type"
203
220
  }
204
221
  };
205
222
  }