@limetech/lime-crm-building-blocks 1.138.0 → 1.139.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 (230) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/lime-crm-building-blocks.cjs.js +1 -1
  3. package/dist/cjs/limebb-alert-dialog.cjs.entry.js +1 -1
  4. package/dist/cjs/limebb-browser.cjs.entry.js +2 -2
  5. package/dist/cjs/limebb-chat-icon-list_3.cjs.entry.js +4 -4
  6. package/dist/cjs/limebb-chat-list.cjs.entry.js +1 -1
  7. package/dist/cjs/limebb-color-palette-picker.cjs.entry.js +1 -1
  8. package/dist/cjs/limebb-color-palette-swatches.cjs.entry.js +1 -1
  9. package/dist/cjs/limebb-composer-toolbar.cjs.entry.js +2 -2
  10. package/dist/cjs/limebb-currency-picker.cjs.entry.js +1 -1
  11. package/dist/cjs/limebb-dashboard-widget.cjs.entry.js +1 -1
  12. package/dist/cjs/limebb-date-picker.cjs.entry.js +1 -1
  13. package/dist/cjs/limebb-date-range.cjs.entry.js +1 -1
  14. package/dist/cjs/limebb-document-chips.cjs.entry.js +1 -1
  15. package/dist/cjs/limebb-document-item.cjs.entry.js +2 -2
  16. package/dist/cjs/limebb-document-picker.cjs.entry.js +1 -1
  17. package/dist/cjs/limebb-feed-item-thumbnail-file-info.cjs.entry.js +1 -1
  18. package/dist/cjs/limebb-feed-timeline-item.cjs.entry.js +1 -1
  19. package/dist/cjs/limebb-feed.cjs.entry.js +1 -1
  20. package/dist/cjs/limebb-filter-chip_5.cjs.entry.js +6 -6
  21. package/dist/cjs/limebb-icon-picker.cjs.entry.js +1 -1
  22. package/dist/cjs/limebb-info-tile-format.cjs.entry.js +1 -1
  23. package/dist/cjs/limebb-info-tile.cjs.entry.js +1 -1
  24. package/dist/cjs/limebb-kanban-group.cjs.entry.js +1 -1
  25. package/dist/cjs/limebb-kanban-item.cjs.entry.js +1 -1
  26. package/dist/cjs/limebb-lime-query-builder.cjs.entry.js +1 -1
  27. package/dist/cjs/limebb-lime-query-filter-comparison_2.cjs.entry.js +2 -2
  28. package/dist/cjs/limebb-lime-query-order-by-editor_2.cjs.entry.js +2 -2
  29. package/dist/cjs/limebb-lime-query-order-by-item.cjs.entry.js +2 -2
  30. package/dist/cjs/limebb-lime-query-response-format-builder.cjs.entry.js +1 -1
  31. package/dist/cjs/limebb-lime-query-response-format-editor_2.cjs.entry.js +1 -1
  32. package/dist/cjs/limebb-live-docs-info.cjs.entry.js +2 -2
  33. package/dist/cjs/limebb-locale-picker.cjs.entry.js +1 -1
  34. package/dist/cjs/limebb-mention-group-counter.cjs.entry.js +2 -2
  35. package/dist/cjs/limebb-navigation-button_2.cjs.entry.js +2 -2
  36. package/dist/cjs/limebb-notification-item.cjs.entry.js +1 -1
  37. package/dist/cjs/limebb-percentage-visualizer.cjs.entry.js +2 -2
  38. package/dist/cjs/limebb-rule-chip-popover.cjs.entry.js +1 -1
  39. package/dist/cjs/limebb-rule-editor.cjs.entry.js +1 -1
  40. package/dist/cjs/limebb-rule-gate.cjs.entry.js +1 -1
  41. package/dist/cjs/limebb-text-editor.cjs.entry.js +1 -1
  42. package/dist/cjs/limebb-trend-indicator.cjs.entry.js +1 -1
  43. package/dist/cjs/limebb-value-comparison-editor.cjs.entry.js +280 -24
  44. package/dist/cjs/loader.cjs.js +1 -1
  45. package/dist/collection/components/alert-dialog/alert-dialog.js +1 -1
  46. package/dist/collection/components/browser/browser.js +2 -2
  47. package/dist/collection/components/chat-list/chat-icon-list/chat-icon-list.js +1 -1
  48. package/dist/collection/components/chat-list/chat-item/chat-item.js +2 -2
  49. package/dist/collection/components/chat-list/chat-list.js +1 -1
  50. package/dist/collection/components/chat-list/typing-indicator/typing-indicator.js +1 -1
  51. package/dist/collection/components/color-palette-picker/color-palette-picker.js +1 -1
  52. package/dist/collection/components/color-palette-picker/color-palette-swatches/color-palette-swatches.js +1 -1
  53. package/dist/collection/components/composer-toolbar/composer-toolbar.js +2 -2
  54. package/dist/collection/components/currency-picker/currency-picker.js +1 -1
  55. package/dist/collection/components/dashboard-widget/dashboard-widget.js +1 -1
  56. package/dist/collection/components/date-picker/date-picker.js +1 -1
  57. package/dist/collection/components/date-range/date-range.js +1 -1
  58. package/dist/collection/components/document-chips/document-chips.js +1 -1
  59. package/dist/collection/components/document-picker/document-item/document-item.js +2 -2
  60. package/dist/collection/components/document-picker/document-picker.js +1 -1
  61. package/dist/collection/components/feed/feed-item/feed-timeline-item.js +1 -1
  62. package/dist/collection/components/feed/feed-item-thumbnail-file-info/feed-item-thumbnail-file-info.js +1 -1
  63. package/dist/collection/components/feed/feed.js +1 -1
  64. package/dist/collection/components/filter-chip/filter-chip.js +2 -2
  65. package/dist/collection/components/icon-picker/icon-picker.js +1 -1
  66. package/dist/collection/components/info-tile/format/config/info-tile-format.js +1 -1
  67. package/dist/collection/components/info-tile/info-tile.js +1 -1
  68. package/dist/collection/components/kanban/kanban-group/kanban-group.js +1 -1
  69. package/dist/collection/components/kanban/kanban-item/kanban-item.js +1 -1
  70. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison-editor.js +1 -1
  71. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison.js +2 -2
  72. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.js +2 -2
  73. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-not.js +1 -1
  74. package/dist/collection/components/lime-query-builder/lime-query-builder.js +1 -1
  75. package/dist/collection/components/lime-query-builder/lime-query-response-format-builder.js +1 -1
  76. package/dist/collection/components/lime-query-builder/limetype-field/limetype-field.js +1 -1
  77. package/dist/collection/components/lime-query-builder/order-by/order-by-editor.js +1 -1
  78. package/dist/collection/components/lime-query-builder/order-by/order-by-item.js +2 -2
  79. package/dist/collection/components/lime-query-builder/response-format/response-format-item.js +1 -1
  80. package/dist/collection/components/limeobject/file-viewer/live-docs-info.js +2 -2
  81. package/dist/collection/components/locale-picker/locale-picker.js +1 -1
  82. package/dist/collection/components/notification-list/notification-item/notification-item.js +1 -1
  83. package/dist/collection/components/percentage-visualizer/percentage-visualizer.js +2 -2
  84. package/dist/collection/components/rule-editor/rule-chip-popover/rule-chip-popover.js +1 -1
  85. package/dist/collection/components/rule-editor/rule-editor.js +1 -1
  86. package/dist/collection/components/rule-editor/value-comparison-editor/value-comparison-editor.css +11 -0
  87. package/dist/collection/components/rule-editor/value-comparison-editor/value-comparison-editor.js +297 -33
  88. package/dist/collection/components/rule-gate/rule-gate.js +1 -1
  89. package/dist/collection/components/summary-popover/summary-popover.js +2 -2
  90. package/dist/collection/components/text-editor/mention-group-counter.js +2 -2
  91. package/dist/collection/components/text-editor/text-editor.js +1 -1
  92. package/dist/collection/components/trend-indicator/trend-indicator.js +1 -1
  93. package/dist/components/chat-icon-list.js +1 -1
  94. package/dist/components/chat-item.js +1 -1
  95. package/dist/components/currency-picker.js +1 -1
  96. package/dist/components/date-picker.js +1 -1
  97. package/dist/components/document-item.js +1 -1
  98. package/dist/components/feed-item-thumbnail-file-info.js +1 -1
  99. package/dist/components/feed-timeline-item.js +1 -1
  100. package/dist/components/filter-chip.js +1 -1
  101. package/dist/components/kanban-group.js +1 -1
  102. package/dist/components/kanban-item.js +1 -1
  103. package/dist/components/lime-query-filter-comparison-editor.js +1 -1
  104. package/dist/components/lime-query-filter-comparison.js +1 -1
  105. package/dist/components/lime-query-filter-expression.js +1 -1
  106. package/dist/components/limebb-alert-dialog.js +1 -1
  107. package/dist/components/limebb-browser.js +1 -1
  108. package/dist/components/limebb-chat-list.js +1 -1
  109. package/dist/components/limebb-color-palette-picker.js +1 -1
  110. package/dist/components/limebb-color-palette-swatches.js +1 -1
  111. package/dist/components/limebb-composer-toolbar.js +1 -1
  112. package/dist/components/limebb-dashboard-widget.js +1 -1
  113. package/dist/components/limebb-date-range.js +1 -1
  114. package/dist/components/limebb-document-chips.js +1 -1
  115. package/dist/components/limebb-document-picker.js +1 -1
  116. package/dist/components/limebb-feed.js +1 -1
  117. package/dist/components/limebb-icon-picker.js +1 -1
  118. package/dist/components/limebb-info-tile-format.js +1 -1
  119. package/dist/components/limebb-info-tile.js +1 -1
  120. package/dist/components/limebb-lime-query-builder.js +1 -1
  121. package/dist/components/limebb-lime-query-response-format-builder.js +1 -1
  122. package/dist/components/limebb-locale-picker.js +1 -1
  123. package/dist/components/limebb-mention-group-counter.js +1 -1
  124. package/dist/components/limebb-rule-editor.js +1 -1
  125. package/dist/components/limebb-rule-gate.js +1 -1
  126. package/dist/components/limebb-text-editor.js +1 -1
  127. package/dist/components/limebb-trend-indicator.js +1 -1
  128. package/dist/components/limebb-value-comparison-editor.js +1 -1
  129. package/dist/components/limetype-field.js +1 -1
  130. package/dist/components/live-docs-info.js +1 -1
  131. package/dist/components/notification-item.js +1 -1
  132. package/dist/components/order-by-editor.js +1 -1
  133. package/dist/components/order-by-item.js +1 -1
  134. package/dist/components/percentage-visualizer.js +1 -1
  135. package/dist/components/response-format-item.js +1 -1
  136. package/dist/components/rule-chip-popover.js +1 -1
  137. package/dist/components/summary-popover.js +1 -1
  138. package/dist/components/typing-indicator.js +1 -1
  139. package/dist/esm/lime-crm-building-blocks.js +1 -1
  140. package/dist/esm/limebb-alert-dialog.entry.js +1 -1
  141. package/dist/esm/limebb-browser.entry.js +2 -2
  142. package/dist/esm/limebb-chat-icon-list_3.entry.js +4 -4
  143. package/dist/esm/limebb-chat-list.entry.js +1 -1
  144. package/dist/esm/limebb-color-palette-picker.entry.js +1 -1
  145. package/dist/esm/limebb-color-palette-swatches.entry.js +1 -1
  146. package/dist/esm/limebb-composer-toolbar.entry.js +2 -2
  147. package/dist/esm/limebb-currency-picker.entry.js +1 -1
  148. package/dist/esm/limebb-dashboard-widget.entry.js +1 -1
  149. package/dist/esm/limebb-date-picker.entry.js +1 -1
  150. package/dist/esm/limebb-date-range.entry.js +1 -1
  151. package/dist/esm/limebb-document-chips.entry.js +1 -1
  152. package/dist/esm/limebb-document-item.entry.js +2 -2
  153. package/dist/esm/limebb-document-picker.entry.js +1 -1
  154. package/dist/esm/limebb-feed-item-thumbnail-file-info.entry.js +1 -1
  155. package/dist/esm/limebb-feed-timeline-item.entry.js +1 -1
  156. package/dist/esm/limebb-feed.entry.js +1 -1
  157. package/dist/esm/limebb-filter-chip_5.entry.js +6 -6
  158. package/dist/esm/limebb-icon-picker.entry.js +1 -1
  159. package/dist/esm/limebb-info-tile-format.entry.js +1 -1
  160. package/dist/esm/limebb-info-tile.entry.js +1 -1
  161. package/dist/esm/limebb-kanban-group.entry.js +1 -1
  162. package/dist/esm/limebb-kanban-item.entry.js +1 -1
  163. package/dist/esm/limebb-lime-query-builder.entry.js +1 -1
  164. package/dist/esm/limebb-lime-query-filter-comparison_2.entry.js +2 -2
  165. package/dist/esm/limebb-lime-query-order-by-editor_2.entry.js +2 -2
  166. package/dist/esm/limebb-lime-query-order-by-item.entry.js +2 -2
  167. package/dist/esm/limebb-lime-query-response-format-builder.entry.js +1 -1
  168. package/dist/esm/limebb-lime-query-response-format-editor_2.entry.js +1 -1
  169. package/dist/esm/limebb-live-docs-info.entry.js +2 -2
  170. package/dist/esm/limebb-locale-picker.entry.js +1 -1
  171. package/dist/esm/limebb-mention-group-counter.entry.js +2 -2
  172. package/dist/esm/limebb-navigation-button_2.entry.js +2 -2
  173. package/dist/esm/limebb-notification-item.entry.js +1 -1
  174. package/dist/esm/limebb-percentage-visualizer.entry.js +2 -2
  175. package/dist/esm/limebb-rule-chip-popover.entry.js +1 -1
  176. package/dist/esm/limebb-rule-editor.entry.js +1 -1
  177. package/dist/esm/limebb-rule-gate.entry.js +1 -1
  178. package/dist/esm/limebb-text-editor.entry.js +1 -1
  179. package/dist/esm/limebb-trend-indicator.entry.js +1 -1
  180. package/dist/esm/limebb-value-comparison-editor.entry.js +280 -24
  181. package/dist/esm/loader.js +1 -1
  182. package/dist/lime-crm-building-blocks/lime-crm-building-blocks.esm.js +1 -1
  183. package/dist/lime-crm-building-blocks/{p-0bdfd7ab.entry.js → p-05f8b18e.entry.js} +1 -1
  184. package/dist/lime-crm-building-blocks/{p-cf687fcd.entry.js → p-0b13889c.entry.js} +1 -1
  185. package/dist/lime-crm-building-blocks/{p-3c25e289.entry.js → p-19b95901.entry.js} +1 -1
  186. package/dist/lime-crm-building-blocks/{p-5095a168.entry.js → p-1cd45d56.entry.js} +1 -1
  187. package/dist/lime-crm-building-blocks/{p-23556cb1.entry.js → p-22af159d.entry.js} +1 -1
  188. package/dist/lime-crm-building-blocks/{p-7dedd057.entry.js → p-27f700c9.entry.js} +1 -1
  189. package/dist/lime-crm-building-blocks/{p-46cc4edb.entry.js → p-2cac740d.entry.js} +1 -1
  190. package/dist/lime-crm-building-blocks/p-357c5a54.entry.js +1 -0
  191. package/dist/lime-crm-building-blocks/{p-b8e4a0d1.entry.js → p-37c0a17f.entry.js} +1 -1
  192. package/dist/lime-crm-building-blocks/{p-8d41a7f8.entry.js → p-3c19f792.entry.js} +1 -1
  193. package/dist/lime-crm-building-blocks/{p-61ee03f9.entry.js → p-3c6fb9d1.entry.js} +1 -1
  194. package/dist/lime-crm-building-blocks/p-3e9de50b.entry.js +1 -0
  195. package/dist/lime-crm-building-blocks/{p-00860497.entry.js → p-46f2667e.entry.js} +1 -1
  196. package/dist/lime-crm-building-blocks/{p-e3d8fd1b.entry.js → p-47912c60.entry.js} +1 -1
  197. package/dist/lime-crm-building-blocks/{p-cfc3f16b.entry.js → p-4bdf9821.entry.js} +1 -1
  198. package/dist/lime-crm-building-blocks/{p-22e4b5e9.entry.js → p-655f028c.entry.js} +1 -1
  199. package/dist/lime-crm-building-blocks/{p-342aae30.entry.js → p-6a7eb5b2.entry.js} +1 -1
  200. package/dist/lime-crm-building-blocks/{p-4fcb97ea.entry.js → p-6e298dd5.entry.js} +1 -1
  201. package/dist/lime-crm-building-blocks/{p-c84136ae.entry.js → p-7dc9923f.entry.js} +1 -1
  202. package/dist/lime-crm-building-blocks/{p-7b119566.entry.js → p-80f2f76c.entry.js} +1 -1
  203. package/dist/lime-crm-building-blocks/{p-31580e01.entry.js → p-8eec03b7.entry.js} +1 -1
  204. package/dist/lime-crm-building-blocks/p-8f7c054d.entry.js +1 -0
  205. package/dist/lime-crm-building-blocks/{p-45d89e49.entry.js → p-94cee387.entry.js} +1 -1
  206. package/dist/lime-crm-building-blocks/{p-b2b595cc.entry.js → p-9b411072.entry.js} +1 -1
  207. package/dist/lime-crm-building-blocks/{p-d8d30ec3.entry.js → p-ae802651.entry.js} +1 -1
  208. package/dist/lime-crm-building-blocks/{p-4e66111a.entry.js → p-ae9780ff.entry.js} +1 -1
  209. package/dist/lime-crm-building-blocks/{p-5e4c9115.entry.js → p-b0ac4a5f.entry.js} +1 -1
  210. package/dist/lime-crm-building-blocks/{p-d7462e93.entry.js → p-b6b8dad7.entry.js} +1 -1
  211. package/dist/lime-crm-building-blocks/{p-00be69ac.entry.js → p-bae91ba0.entry.js} +1 -1
  212. package/dist/lime-crm-building-blocks/{p-90f3e299.entry.js → p-be4829f3.entry.js} +1 -1
  213. package/dist/lime-crm-building-blocks/{p-e0107a69.entry.js → p-c90ef898.entry.js} +1 -1
  214. package/dist/lime-crm-building-blocks/{p-6cfebec1.entry.js → p-cac27f2c.entry.js} +1 -1
  215. package/dist/lime-crm-building-blocks/{p-f5c44de2.entry.js → p-d5ad0cd9.entry.js} +1 -1
  216. package/dist/lime-crm-building-blocks/{p-840b817b.entry.js → p-d99e57aa.entry.js} +1 -1
  217. package/dist/lime-crm-building-blocks/{p-b9c4df08.entry.js → p-e031c267.entry.js} +1 -1
  218. package/dist/lime-crm-building-blocks/{p-c85e44a9.entry.js → p-e4aeb4fe.entry.js} +1 -1
  219. package/dist/lime-crm-building-blocks/{p-88bdf554.entry.js → p-e4ccc690.entry.js} +1 -1
  220. package/dist/lime-crm-building-blocks/{p-4e7b8559.entry.js → p-edf566e7.entry.js} +1 -1
  221. package/dist/lime-crm-building-blocks/p-f93a749f.entry.js +1 -0
  222. package/dist/lime-crm-building-blocks/{p-50f5380d.entry.js → p-fdd63bcc.entry.js} +1 -1
  223. package/dist/lime-crm-building-blocks/{p-1c67e198.entry.js → p-fe9cbbdd.entry.js} +1 -1
  224. package/dist/types/components/rule-editor/value-comparison-editor/value-comparison-editor.d.ts +40 -19
  225. package/dist/types/components.d.ts +20 -32
  226. package/package.json +1 -1
  227. package/dist/lime-crm-building-blocks/p-01ddcb14.entry.js +0 -1
  228. package/dist/lime-crm-building-blocks/p-52f39097.entry.js +0 -1
  229. package/dist/lime-crm-building-blocks/p-9ad269dd.entry.js +0 -1
  230. package/dist/lime-crm-building-blocks/p-f382f2fa.entry.js +0 -1
@@ -1,5 +1,12 @@
1
- import { h } from "@stencil/core";
1
+ import { h, } from "@stencil/core";
2
2
  import { Operator } from "@limetech/lime-web-components";
3
+ const TYPE_OPTIONS = [
4
+ { value: 'string', text: 'Text' },
5
+ { value: 'number', text: 'Number' },
6
+ { value: 'date', text: 'Date' },
7
+ { value: 'datetime', text: 'Date & time' },
8
+ { value: 'time', text: 'Time' },
9
+ ];
3
10
  const OPERATOR_OPTIONS = [
4
11
  { value: Operator.EQUALS, text: 'Equals' },
5
12
  { value: Operator.NOT_EQUALS, text: 'Does not equal' },
@@ -8,16 +15,43 @@ const OPERATOR_OPTIONS = [
8
15
  { value: Operator.GREATER, text: 'Greater than' },
9
16
  { value: Operator.GREATER_OR_EQUAL, text: 'Greater than or equal to' },
10
17
  ];
18
+ const RELATIVE_OFFSET_KEY = '__relative_offset__';
19
+ const SPECIFIC_KEY = '__specific__';
20
+ const FIXED_TOKEN_OPTIONS = [
21
+ { value: '$now', text: 'Now' },
22
+ { value: '$today', text: 'Today' },
23
+ { value: '$tomorrow', text: 'Tomorrow' },
24
+ { value: '$yesterday', text: 'Yesterday' },
25
+ { value: '$this_week', text: 'This week' },
26
+ { value: '$this_month', text: 'This month' },
27
+ { value: '$this_quarter', text: 'This quarter' },
28
+ { value: '$this_year', text: 'This year' },
29
+ ];
30
+ const FIXED_TOKENS = new Set(FIXED_TOKEN_OPTIONS.map((option) => option.value));
31
+ const DIRECTION_OPTIONS = [
32
+ { value: 'next', text: 'Next' },
33
+ { value: 'previous', text: 'Previous' },
34
+ ];
35
+ const UNIT_OPTIONS = [
36
+ { value: 'day', text: 'days' },
37
+ { value: 'week', text: 'weeks' },
38
+ { value: 'month', text: 'months' },
39
+ { value: 'quarter', text: 'quarters' },
40
+ { value: 'year', text: 'years' },
41
+ ];
42
+ // Same grammar the primitive parses in limeclient.js `relative-dates.ts`.
43
+ const PARAMETERIZED_TOKEN = /^\$(next|previous)_(day|week|month|quarter|year)\((\d+)\)$/;
44
+ const TEMPORAL_TYPES = new Set([
45
+ 'date',
46
+ 'datetime',
47
+ 'time',
48
+ ]);
11
49
  /**
12
- * Args editor for the `limetech.value-comparison` rule primitive: an
13
- * operator from the match-filter {@link Operator} vocabulary plus the value
14
- * to compare against. The operand is emitted as a number when it parses as
15
- * one and as a string otherwise; the `valueType` follows from it so the
16
- * primitive orders numerically for numbers and lexically for strings (ISO
17
- * date strings sort correctly that way).
18
- *
19
- * Emptiness is a separate concern handled by the `limetech.value-is-empty`
20
- * primitive, so this editor offers comparison operators only.
50
+ * Args editor for the `limetech.value-comparison` rule primitive: a comparison
51
+ * type, an operator from the match-filter {@link Operator} vocabulary, and the
52
+ * value to compare against. The chosen type drives the operand input text and
53
+ * numbers use a plain field; dates, datetimes and times offer a date picker plus
54
+ * relative-date choices.
21
55
  *
22
56
  * @alpha
23
57
  * @private
@@ -28,46 +62,263 @@ export class ValueComparisonEditor {
28
62
  * @inheritdoc
29
63
  */
30
64
  this.value = {};
65
+ this.direction = 'next';
66
+ this.unit = 'week';
67
+ this.count = 1;
68
+ this.countInput = '1';
69
+ this.countInvalid = false;
70
+ this.handleTypeChange = (event) => {
71
+ var _a, _b;
72
+ event.stopPropagation();
73
+ this.resetOperandState();
74
+ this.emit(this.value.operator, undefined, (_b = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 'string');
75
+ };
31
76
  this.handleOperatorChange = (event) => {
32
77
  var _a;
33
78
  event.stopPropagation();
34
79
  const operator = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value;
35
80
  if (!operator) {
36
- this.change.emit({});
81
+ this.emit(undefined, undefined);
82
+ return;
83
+ }
84
+ this.emit(operator, this.value.operand);
85
+ };
86
+ this.handleScalarOperandChange = (event) => {
87
+ event.stopPropagation();
88
+ const operator = this.value.operator;
89
+ if (!operator) {
90
+ return;
91
+ }
92
+ this.emit(operator, this.parseScalarOperand(event.detail));
93
+ };
94
+ this.handleOperandKeyChange = (event) => {
95
+ var _a;
96
+ event.stopPropagation();
97
+ const operator = this.value.operator;
98
+ if (!operator) {
99
+ return;
100
+ }
101
+ const key = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value;
102
+ this.operandKey = key;
103
+ if (key === RELATIVE_OFFSET_KEY) {
104
+ this.emit(operator, this.relativeOffsetToken());
105
+ return;
106
+ }
107
+ if (key === SPECIFIC_KEY) {
108
+ // Default to now so the operand is always a real, rebuildable value.
109
+ if (!this.specificDate) {
110
+ this.specificDate = new Date();
111
+ }
112
+ this.emit(operator, this.formatSpecific(this.specificDate));
37
113
  return;
38
114
  }
39
- this.change.emit(this.withOperand(operator, this.value.operand));
115
+ // A fixed token (or nothing selected).
116
+ this.emit(operator, key || undefined);
117
+ };
118
+ this.handleDirectionChange = (event) => {
119
+ var _a, _b;
120
+ event.stopPropagation();
121
+ this.direction = (_b = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 'next';
122
+ this.emitRelativeOffset();
123
+ };
124
+ this.handleUnitChange = (event) => {
125
+ var _a, _b;
126
+ event.stopPropagation();
127
+ this.unit = (_b = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 'week';
128
+ this.emitRelativeOffset();
40
129
  };
41
- this.handleOperandChange = (event) => {
130
+ this.handleCountChange = (event) => {
131
+ event.stopPropagation();
132
+ this.countInput = String(event.detail);
133
+ const parsed = Number.parseInt(this.countInput, 10);
134
+ if (Number.isNaN(parsed) || parsed < 1) {
135
+ // Keep showing what the author typed, but flag it instead of
136
+ // emitting an operand that disagrees with the field.
137
+ this.countInvalid = true;
138
+ return;
139
+ }
140
+ this.countInvalid = false;
141
+ this.count = parsed;
142
+ this.emitRelativeOffset();
143
+ };
144
+ this.handleSpecificDateChange = (event) => {
42
145
  event.stopPropagation();
43
146
  const operator = this.value.operator;
44
147
  if (!operator) {
45
148
  return;
46
149
  }
47
- this.change.emit(this.withOperand(operator, parseOperand(event.detail)));
150
+ const date = event.detail instanceof Date ? event.detail : undefined;
151
+ this.specificDate = date;
152
+ this.emit(operator, date ? this.formatSpecific(date) : undefined);
48
153
  };
49
154
  }
155
+ componentWillLoad() {
156
+ this.syncFromValue(this.value);
157
+ }
158
+ onValueChange(value) {
159
+ this.syncFromValue(value);
160
+ }
161
+ get valueType() {
162
+ var _a;
163
+ return (_a = this.value.valueType) !== null && _a !== void 0 ? _a : 'string';
164
+ }
50
165
  render() {
51
- const selected = OPERATOR_OPTIONS.find((option) => option.value === this.value.operator);
52
- return (h("div", { key: 'e3589c48dc94a8a191e46adcd19947c825f12562', class: "rule" }, h("limel-select", { key: '8cb50df76bd8adb26d4bbab185258f1d594f71d8', label: "When the value", options: OPERATOR_OPTIONS, value: selected, onChange: this.handleOperatorChange }), this.renderOperandInput()));
166
+ const selectedType = TYPE_OPTIONS.find((option) => option.value === this.valueType);
167
+ const selectedOperator = OPERATOR_OPTIONS.find((option) => option.value === this.value.operator);
168
+ return (h("div", { key: 'b7ed0eedaa937029a3e51d53630cd9a352804deb', class: "rule" }, h("limel-select", { key: '402c121d9f06c1c60b6c03c7b82049127a9cd272', class: "type-select", label: "Compare as", options: TYPE_OPTIONS, value: selectedType, onChange: this.handleTypeChange }), h("limel-select", { key: 'aa59ca982dbca9a5b17d50c721fde57c6ab888d8', class: "operator-select", label: "When the value", options: OPERATOR_OPTIONS, value: selectedOperator, onChange: this.handleOperatorChange }), this.renderOperand()));
53
169
  }
54
- renderOperandInput() {
170
+ renderOperand() {
55
171
  if (!this.value.operator) {
56
172
  return null;
57
173
  }
58
- return (h("limel-input-field", { label: "Compared with", value: this.value.operand === undefined
174
+ if (TEMPORAL_TYPES.has(this.valueType)) {
175
+ return this.renderTemporalOperand();
176
+ }
177
+ return this.renderScalarInput();
178
+ }
179
+ renderScalarInput() {
180
+ return (h("limel-input-field", { class: "operand-input", label: "Compared with", type: this.valueType === 'number' ? 'number' : 'text', value: this.value.operand === undefined
59
181
  ? ''
60
- : String(this.value.operand), onChange: this.handleOperandChange }));
182
+ : String(this.value.operand), onChange: this.handleScalarOperandChange }));
61
183
  }
62
- withOperand(operator, operand) {
63
- if (operand === undefined) {
64
- return { operator };
184
+ renderTemporalOperand() {
185
+ const options = this.operandOptions();
186
+ const selected = options.find((option) => option.value === this.operandKey);
187
+ return [
188
+ h("limel-select", { key: "operand-select", class: "operand-select", label: "Compared with", options: options, value: selected, onChange: this.handleOperandKeyChange }),
189
+ this.renderTemporalSubControl(),
190
+ ];
191
+ }
192
+ operandOptions() {
193
+ if (this.valueType === 'time') {
194
+ return [
195
+ { value: '$now', text: 'Now' },
196
+ { value: SPECIFIC_KEY, text: 'Specific time…' },
197
+ ];
65
198
  }
66
- return {
67
- operator,
68
- operand,
69
- valueType: typeof operand === 'number' ? 'number' : 'string',
70
- };
199
+ const specificText = this.valueType === 'datetime'
200
+ ? 'Specific date & time…'
201
+ : 'Specific date…';
202
+ // For a pure date `$now` resolves to the same value as `$today`, so
203
+ // only datetime (where the time component matters) offers it.
204
+ const fixedTokens = this.valueType === 'date'
205
+ ? FIXED_TOKEN_OPTIONS.filter((option) => option.value !== '$now')
206
+ : FIXED_TOKEN_OPTIONS;
207
+ return [
208
+ ...fixedTokens,
209
+ { value: RELATIVE_OFFSET_KEY, text: 'Relative offset…' },
210
+ { value: SPECIFIC_KEY, text: specificText },
211
+ ];
212
+ }
213
+ renderTemporalSubControl() {
214
+ if (this.operandKey === RELATIVE_OFFSET_KEY) {
215
+ return this.renderOffsetBuilder();
216
+ }
217
+ if (this.operandKey === SPECIFIC_KEY) {
218
+ return this.renderDatePicker();
219
+ }
220
+ return null;
221
+ }
222
+ renderOffsetBuilder() {
223
+ const selectedDirection = DIRECTION_OPTIONS.find((option) => option.value === this.direction);
224
+ const selectedUnit = UNIT_OPTIONS.find((option) => option.value === this.unit);
225
+ return (h("div", { key: "offset-builder", class: "offset-builder" }, h("limel-select", { class: "offset-direction", options: DIRECTION_OPTIONS, value: selectedDirection, onChange: this.handleDirectionChange }), h("limel-input-field", { class: "offset-count", label: "Amount", type: "number", required: true, invalid: this.countInvalid, value: this.countInput, onChange: this.handleCountChange }), h("limel-select", { class: "offset-unit", options: UNIT_OPTIONS, value: selectedUnit, onChange: this.handleUnitChange })));
226
+ }
227
+ renderDatePicker() {
228
+ return (h("limel-date-picker", { key: "specific-picker", class: "operand-picker", label: "Compared with", type: this.valueType, value: this.specificDate, onChange: this.handleSpecificDateChange }));
229
+ }
230
+ emitRelativeOffset() {
231
+ const operator = this.value.operator;
232
+ if (!operator) {
233
+ return;
234
+ }
235
+ this.emit(operator, this.relativeOffsetToken());
236
+ }
237
+ relativeOffsetToken() {
238
+ return `$${this.direction}_${this.unit}(${this.count})`;
239
+ }
240
+ parseScalarOperand(raw) {
241
+ const text = String(raw);
242
+ if (text.trim() === '') {
243
+ return undefined;
244
+ }
245
+ if (this.valueType !== 'number') {
246
+ return text;
247
+ }
248
+ const parsed = Number(text);
249
+ return Number.isNaN(parsed) ? undefined : parsed;
250
+ }
251
+ formatSpecific(date) {
252
+ if (this.valueType === 'datetime') {
253
+ return date.toISOString();
254
+ }
255
+ if (this.valueType === 'time') {
256
+ return `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
257
+ }
258
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
259
+ }
260
+ emit(operator, operand, valueType = this.valueType) {
261
+ // Always carry valueType so the type selection round-trips through
262
+ // value even when there's no operand yet; the primitive ignores it
263
+ // until an operand is present.
264
+ const next = { valueType };
265
+ if (operator) {
266
+ next.operator = operator;
267
+ }
268
+ if (operand !== undefined) {
269
+ next.operand = operand;
270
+ }
271
+ this.change.emit(next);
272
+ }
273
+ resetOperandState() {
274
+ this.operandKey = undefined;
275
+ this.specificDate = undefined;
276
+ this.direction = 'next';
277
+ this.unit = 'week';
278
+ this.count = 1;
279
+ this.countInput = '1';
280
+ this.countInvalid = false;
281
+ }
282
+ syncFromValue(value) {
283
+ const operand = value === null || value === void 0 ? void 0 : value.operand;
284
+ if (typeof operand !== 'string' || operand === '') {
285
+ // No operand: keep the sub-control the author has open.
286
+ return;
287
+ }
288
+ if (!TEMPORAL_TYPES.has(this.valueType)) {
289
+ this.operandKey = undefined;
290
+ return;
291
+ }
292
+ const match = PARAMETERIZED_TOKEN.exec(operand);
293
+ if (match) {
294
+ const [, direction, unit, count] = match;
295
+ this.operandKey = RELATIVE_OFFSET_KEY;
296
+ this.direction = direction;
297
+ this.unit = unit;
298
+ this.count = Number(count);
299
+ this.countInput = count;
300
+ this.countInvalid = false;
301
+ return;
302
+ }
303
+ if (FIXED_TOKENS.has(operand)) {
304
+ this.operandKey = operand;
305
+ return;
306
+ }
307
+ this.operandKey = SPECIFIC_KEY;
308
+ this.specificDate = this.parseSpecific(operand);
309
+ }
310
+ parseSpecific(operand) {
311
+ const date = new Date(this.specificDateText(operand));
312
+ return Number.isNaN(date.getTime()) ? undefined : date;
313
+ }
314
+ specificDateText(operand) {
315
+ if (this.valueType === 'time') {
316
+ return `1970-01-01T${operand}`;
317
+ }
318
+ if (this.valueType === 'date') {
319
+ return `${operand}T00:00:00`;
320
+ }
321
+ return operand;
71
322
  }
72
323
  static get is() { return "limebb-value-comparison-editor"; }
73
324
  static get encapsulation() { return "shadow"; }
@@ -112,6 +363,17 @@ export class ValueComparisonEditor {
112
363
  }
113
364
  };
114
365
  }
366
+ static get states() {
367
+ return {
368
+ "operandKey": {},
369
+ "direction": {},
370
+ "unit": {},
371
+ "count": {},
372
+ "countInput": {},
373
+ "countInvalid": {},
374
+ "specificDate": {}
375
+ };
376
+ }
115
377
  static get events() {
116
378
  return [{
117
379
  "method": "change",
@@ -139,11 +401,13 @@ export class ValueComparisonEditor {
139
401
  }
140
402
  }];
141
403
  }
142
- }
143
- function parseOperand(raw) {
144
- if (raw.trim() === '') {
145
- return undefined;
404
+ static get watchers() {
405
+ return [{
406
+ "propName": "value",
407
+ "methodName": "onValueChange"
408
+ }];
146
409
  }
147
- const parsed = Number(raw);
148
- return Number.isNaN(parsed) ? raw : parsed;
410
+ }
411
+ function pad(value) {
412
+ return String(value).padStart(2, '0');
149
413
  }
@@ -33,7 +33,7 @@ export class RuleGate {
33
33
  this.evaluate();
34
34
  }
35
35
  render() {
36
- return (h(Host, { key: 'fd7edf7439ea87b25e48c6f39a92f957b08ed49a', hidden: !this.shouldRender }, h("slot", { key: 'b7996f2833b46fa5ed41e37047380b0f7ce46d17' })));
36
+ return (h(Host, { key: '1aebc90e382bed53ff293634f4aa37cbc5b1f9d0', hidden: !this.shouldRender }, h("slot", { key: 'f28d6bc819101c43c980b80b4467dcb0d15292fa' })));
37
37
  }
38
38
  get ruleRegistry() {
39
39
  return this.platform.get(PlatformServiceName.RuleRegistry);
@@ -128,9 +128,9 @@ export class SummaryPopover {
128
128
  top: '0.125rem',
129
129
  right: '0.125rem',
130
130
  };
131
- return (h("limel-popover", { key: 'eaa26f8cd3c778f154d1ddab917819cef43967f2', style: {
131
+ return (h("limel-popover", { key: '3dac27c083b2d950d473e5f0f686cd19278eb0a0', style: {
132
132
  '--limebb-summary-popover-timeout': `${this.triggerDelay}ms`,
133
- }, open: this.isPopoverOpen, onClose: this.onPopoverClose, openDirection: this.openDirection }, h("div", { key: 'd9c24139c31ad10e544d7c88cfc2f7e246a825b4', slot: "trigger", onMouseEnter: this.openPopoverWithDelay, onMouseLeave: this.resetTimeout, onFocusin: this.openPopoverWithDelay }, h("slot", { key: '261c91114ae898c2cfad0b5108a3db3209517911', name: "trigger" }), h("div", { key: 'f5274138994499992e3ff98d37d339c255c4526a', class: "opening-countdown-indicator" })), this.renderCard(closeButtonStyle)));
133
+ }, open: this.isPopoverOpen, onClose: this.onPopoverClose, openDirection: this.openDirection }, h("div", { key: 'acc7cc0472a6af2b53b38915111a7c4a8c5e20a1', slot: "trigger", onMouseEnter: this.openPopoverWithDelay, onMouseLeave: this.resetTimeout, onFocusin: this.openPopoverWithDelay }, h("slot", { key: 'd6bdbf59b1d39793484de55dcfb2e43d890468bf', name: "trigger" }), h("div", { key: 'dc462c2b1b787de54b22aed6ca51cac245df3c09', class: "opening-countdown-indicator" })), this.renderCard(closeButtonStyle)));
134
134
  }
135
135
  renderCard(closeButtonStyle) {
136
136
  return (h("limel-card", { style: {
@@ -13,8 +13,8 @@ export class MentionGroupCounter {
13
13
  render() {
14
14
  const label = this.getLabel();
15
15
  return [
16
- h("span", { key: '2eee86762d277a56502e0ddfe6c40e25ebcffabf', id: this.tooltipId }, label),
17
- h("limel-tooltip", { key: '612f0b91e7b0ba20ab912e8d77fa3de4eee40212', elementId: this.tooltipId, label: label, helperLabel: this.helperLabel }),
16
+ h("span", { key: '638df46fb134015d8f9402830580d36dc759bcd1', id: this.tooltipId }, label),
17
+ h("limel-tooltip", { key: 'bdd49e3025be834b9d808473d456341a50d6f50d', elementId: this.tooltipId, label: label, helperLabel: this.helperLabel }),
18
18
  ];
19
19
  }
20
20
  getLabel() {
@@ -391,7 +391,7 @@ export class LimeBBTextEditor {
391
391
  }
392
392
  render() {
393
393
  return [
394
- h("limel-text-editor", { key: 'e25b69ff667cd11469723be202e3c0fe2f97c64e', ref: (el) => (this.textEditor = el), tabindex: this.disabled ? -1 : 0, value: this.value, contentType: this.contentType, customElements: this.registeredCustomElements, "aria-disabled": this.disabled, language: this.language, triggers: this.registeredTriggers, onTriggerStart: this.handleTriggerStart, onTriggerStop: this.handleTriggerStop, onTriggerChange: this.handleTriggerChange, onImagePasted: this.handleImagePasted, onMetadataChange: this.handleMetadataChange, ui: this.ui, allowResize: this.allowResize, required: this.required, disabled: this.disabled, readonly: this.readonly, helperText: this.helperText, placeholder: this.placeholder, label: this.label, invalid: this.invalid }),
394
+ h("limel-text-editor", { key: '0f1423f13a517aaeea8efbacab475a37e38aa857', ref: (el) => (this.textEditor = el), tabindex: this.disabled ? -1 : 0, value: this.value, contentType: this.contentType, customElements: this.registeredCustomElements, "aria-disabled": this.disabled, language: this.language, triggers: this.registeredTriggers, onTriggerStart: this.handleTriggerStart, onTriggerStop: this.handleTriggerStop, onTriggerChange: this.handleTriggerChange, onImagePasted: this.handleImagePasted, onMetadataChange: this.handleMetadataChange, ui: this.ui, allowResize: this.allowResize, required: this.required, disabled: this.disabled, readonly: this.readonly, helperText: this.helperText, placeholder: this.placeholder, label: this.label, invalid: this.invalid }),
395
395
  this.renderPicker(),
396
396
  ];
397
397
  }
@@ -69,7 +69,7 @@ export class TrendIndicator {
69
69
  this.numValue = this.parseValue(this.value);
70
70
  }
71
71
  render() {
72
- return (h(Host, { key: 'c42f5bbc24bb06b91db44591fe6c6720887e6762', class: this.getContainerClassList() }, h("limel-notched-outline", { key: '6b278dd73d5222723b5fb1476e938849ce92d5f4', id: this.tooltipId, label: this.label, labelId: this.labelId, invalid: this.invalid, required: this.required, hasValue: true, hasFloatingLabel: true, "aria-labelledby": this.labelId, "aria-describedby": this.helperTextId, "aria-controls": this.helperTextId }, h("div", { key: '90002d49b80d88f4f62ce3f182cc0d73a9099d7e', slot: "content", tabIndex: 0 }, this.renderVisualization())), this.renderHelperLine(), this.renderTooltip()));
72
+ return (h(Host, { key: 'fbf631c6889091e9efe5790397b26f804d27d93b', class: this.getContainerClassList() }, h("limel-notched-outline", { key: '832d2d338bf86da41b0a19a813f0dc7e3b3eb8c9', id: this.tooltipId, label: this.label, labelId: this.labelId, invalid: this.invalid, required: this.required, hasValue: true, hasFloatingLabel: true, "aria-labelledby": this.labelId, "aria-describedby": this.helperTextId, "aria-controls": this.helperTextId }, h("div", { key: 'b3266118df54e2c3a4d7729f0e36d7c7e1fbc13c', slot: "content", tabIndex: 0 }, this.renderVisualization())), this.renderHelperLine(), this.renderTooltip()));
73
73
  }
74
74
  renderVisualization() {
75
75
  if (this.reducePresence && (this.numValue === 0 || !this.hasValue())) {
@@ -1 +1 @@
1
- import{proxyCustomElement as e,HTMLElement as i,h as n,Host as o,transformTag as t}from"@stencil/core/internal/client";const r=e(class extends i{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow()}render(){return n(o,{key:"1c1b3b024a7ab249ccc3f88aa512604859332e5b",id:this.item.id},this.renderLabel(),n("div",{key:"ade364f36a75b1a79376b17ac0288a7bc684f685",class:"icons"},this.item.icons.map(((e,i)=>this.renderIcon(e,i)))))}renderLabel(){if(this.item.label)return n("span",{class:"label"},this.item.label)}renderIcon(e,i){const o=`icon-${this.item.id}-${i}`;return[n("limel-icon",{tabIndex:0,key:i,id:o,badge:!0,name:e.name,class:{"is-pending":!!e.pending,"is-clickable":!!e.onClick},style:{color:e.color,"background-color":e.backgroundColor},onClick:e.onClick}),this.renderTooltip(e,o)]}renderTooltip(e,i){if(e.title)return n("limel-tooltip",{label:e.title,elementId:i})}static get style(){return'@charset "UTF-8";*,*:before,*:after{box-sizing:border-box}:host(limebb-chat-icon-list){display:flex;align-items:center;gap:0.5rem;margin-right:auto;max-width:calc(100% - 2rem);padding:0 0.25rem}.label{font-size:0.75rem;color:rgb(var(--contrast-900))}.icons{display:flex;align-items:center;gap:0.25rem}.icons:hover limel-icon,.icons:focus-within limel-icon{margin-left:0 !important}limel-icon{--icon-background-color:rgb(var(--contrast-500), 0.5);transition:margin-left 0.2s cubic-bezier(0.075, 0.82, 0.165, 1), opacity 0.2s ease, box-shadow 0.2s ease;position:relative;width:1.75rem;padding:0.375rem;flex-shrink:0}limel-icon.is-clickable{cursor:pointer}limel-icon:focus{outline:none}limel-icon:focus-visible{outline:none;box-shadow:var(--shadow-depth-8-focused)}limel-icon:not(.is-pending):not(:first-child){margin-left:-0.75rem}limel-icon.is-pending{animation:pending 3s linear infinite;padding:0.5rem}limel-icon.is-pending:after{content:"";position:absolute;inset:0;width:1.75rem;height:1.75rem;border-radius:50%;pointer-events:none;border-radius:50%;border:0.125rem solid rgb(var(--color-white), 0.5);border-top-color:rgb(var(--color-black), 0.8);mix-blend-mode:color-dodge;animation:spin 1s cubic-bezier(0.4, 0, 0.2, 1) infinite}@keyframes pending{0%,20%,80%,100%{filter:grayscale(0%)}45%,55%{filter:grayscale(100%)}}@keyframes spin{to{transform:rotate(360deg)}}'}},[1,"limebb-chat-icon-list",{item:[16]}]);function s(){"undefined"!=typeof customElements&&["limebb-chat-icon-list"].forEach((e=>{"limebb-chat-icon-list"===e&&(customElements.get(t(e))||customElements.define(t(e),r))}))}export{r as C,s as d}
1
+ import{proxyCustomElement as e,HTMLElement as i,h as n,Host as o,transformTag as t}from"@stencil/core/internal/client";const r=e(class extends i{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow()}render(){return n(o,{key:"37f41429c85d430370847b6ba08927757d97868f",id:this.item.id},this.renderLabel(),n("div",{key:"958ef591606e10f95e43f4968110cb785f022dc7",class:"icons"},this.item.icons.map(((e,i)=>this.renderIcon(e,i)))))}renderLabel(){if(this.item.label)return n("span",{class:"label"},this.item.label)}renderIcon(e,i){const o=`icon-${this.item.id}-${i}`;return[n("limel-icon",{tabIndex:0,key:i,id:o,badge:!0,name:e.name,class:{"is-pending":!!e.pending,"is-clickable":!!e.onClick},style:{color:e.color,"background-color":e.backgroundColor},onClick:e.onClick}),this.renderTooltip(e,o)]}renderTooltip(e,i){if(e.title)return n("limel-tooltip",{label:e.title,elementId:i})}static get style(){return'@charset "UTF-8";*,*:before,*:after{box-sizing:border-box}:host(limebb-chat-icon-list){display:flex;align-items:center;gap:0.5rem;margin-right:auto;max-width:calc(100% - 2rem);padding:0 0.25rem}.label{font-size:0.75rem;color:rgb(var(--contrast-900))}.icons{display:flex;align-items:center;gap:0.25rem}.icons:hover limel-icon,.icons:focus-within limel-icon{margin-left:0 !important}limel-icon{--icon-background-color:rgb(var(--contrast-500), 0.5);transition:margin-left 0.2s cubic-bezier(0.075, 0.82, 0.165, 1), opacity 0.2s ease, box-shadow 0.2s ease;position:relative;width:1.75rem;padding:0.375rem;flex-shrink:0}limel-icon.is-clickable{cursor:pointer}limel-icon:focus{outline:none}limel-icon:focus-visible{outline:none;box-shadow:var(--shadow-depth-8-focused)}limel-icon:not(.is-pending):not(:first-child){margin-left:-0.75rem}limel-icon.is-pending{animation:pending 3s linear infinite;padding:0.5rem}limel-icon.is-pending:after{content:"";position:absolute;inset:0;width:1.75rem;height:1.75rem;border-radius:50%;pointer-events:none;border-radius:50%;border:0.125rem solid rgb(var(--color-white), 0.5);border-top-color:rgb(var(--color-black), 0.8);mix-blend-mode:color-dodge;animation:spin 1s cubic-bezier(0.4, 0, 0.2, 1) infinite}@keyframes pending{0%,20%,80%,100%{filter:grayscale(0%)}45%,55%{filter:grayscale(100%)}}@keyframes spin{to{transform:rotate(360deg)}}'}},[1,"limebb-chat-icon-list",{item:[16]}]);function s(){"undefined"!=typeof customElements&&["limebb-chat-icon-list"].forEach((e=>{"limebb-chat-icon-list"===e&&(customElements.get(t(e))||customElements.define(t(e),r))}))}export{r as C,s as d}
@@ -1 +1 @@
1
- import{proxyCustomElement as t,HTMLElement as e,h as i,Host as r,transformTag as o}from"@stencil/core/internal/client";import{b as a}from"./index.esm.js";const s=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.hasError=!1,this.createActionBarItem=t=>{var e,i;if("separator"in t)return t;let r={value:t,text:null!==(e=t.label)&&void 0!==e?e:"",secondaryText:t.description,disabled:t.disabled};return!t.label&&t.icon?r=Object.assign(Object.assign({},r),{icon:t.icon,text:null!==(i=t.description)&&void 0!==i?i:r.text,iconOnly:!0}):t.icon&&(r=Object.assign(Object.assign({},r),{icon:t.icon})),r},this.handleActionBarItemSelect=t=>{var e;t.stopPropagation();const i=null===(e=t.detail.value)||void 0===e?void 0:e.command;i&&this.commandbus.handle(i)},this.createMenuItem=t=>{var e,i;return"separator"in t?t:{value:t,text:null!==(e=t.label)&&void 0!==e?e:"",secondaryText:t.description,disabled:t.disabled,icon:null!==(i=t.icon)&&void 0!==i?i:""}},this.handleMenuItemSelect=t=>{var e;t.stopPropagation();const i=null===(e=t.detail.value)||void 0===e?void 0:e.command;i&&this.commandbus.handle(i)}}render(){const t=`helper-text-${this.item.id}`;return i(r,{key:"08d19994a11ae1d96291ca67179a02e322e3fcca",id:this.item.id,"aria-describedby":this.helperText?t:void 0,"aria-live":this.hasError?"assertive":"off",class:{[`${this.item.ui}`]:!0}},i("div",{key:"11c0a1121f006bd06ed1a1ff5d7b4274f04002e2",class:"bubble-content"},i("div",{key:"76df4d1fbcaa035eb10646e85f936789700fbba4",class:"icon-picture"},this.renderIcon(),this.renderAuthorPicture()),this.renderErrorSign(),i("div",{key:"db83fa94a036a4209c20919705b1de4462c13d59",class:"item"},this.renderHeader(),this.renderValue(),i("footer",{key:"13e2ff2fa47f4cfe882f3db4a3c60c0905537c32"},this.renderHelperText(t),this.renderTimestamp()))),this.renderPromotedAction())}renderErrorSign(){if(this.hasError)return i("limel-icon",{class:"error-sign",name:"brake_warning"})}renderHeader(){var t;if(null===(t=this.item.author)||void 0===t?void 0:t.name)return i("header",null,this.renderAuthorName(),i("div",{class:"action-buttons"},this.renderUnpromotedActionsMenu()))}renderIcon(){var t,e,r,o;if(this.item.icon)return i("limel-icon",{class:"icon",badge:!0,name:null!==(e=null===(t=this.item.icon)||void 0===t?void 0:t.name)&&void 0!==e?e:"dot_circle",style:{color:`${null===(r=this.item.icon)||void 0===r?void 0:r.color}`,"background-color":`${null===(o=this.item.icon)||void 0===o?void 0:o.backgroundColor}`}})}renderHelperText(t){if(this.helperText)return i("span",{class:"helper-text",id:t},this.helperText)}renderValue(){if(this.item.value)return i("limel-markdown",{class:"body-text reset-img-height",value:this.item.value})}renderAuthorName(){var t,e;if("string"==typeof(null===(t=this.item.author)||void 0===t?void 0:t.name))return i("span",{class:"author"},this.item.author.name);if("object"==typeof(null===(e=this.item.author)||void 0===e?void 0:e.name)){const{href:t,title:e,text:r}=this.item.author.name;return i("a",{class:"author",href:t,title:e},r)}}renderAuthorPicture(){var t;if(null===(t=this.item.author)||void 0===t?void 0:t.picture)return"limel-ai-avatar"===this.item.author.picture?i("limel-ai-avatar",{class:"author-avatar"}):i("img",{class:"author-avatar",loading:"lazy",src:this.item.author.picture})}renderUnpromotedActionsMenu(){var t,e;if(!(null===(t=this.item.unpromotedActions)||void 0===t?void 0:t.length))return;const r=this.item.unpromotedActions.map(this.createMenuItem);return i("limel-menu",{class:"unpromoted-actions-menu",items:r,openDirection:"bottom-end",onSelect:this.handleMenuItemSelect},i("limel-icon-button",{icon:"menu_2",slot:"trigger",label:null===(e=this.translator)||void 0===e?void 0:e.get("webclient.more-actions")}))}renderPromotedAction(){if(!this.item.promotedActions)return;const t=this.item.promotedActions.map(this.createActionBarItem);return i("div",{class:"action-bar"},i("div",{class:"action-bar-hider"},i("limel-action-bar",{accessibleLabel:"Action bar",actions:t,layout:"fullWidth",onItemSelected:this.handleActionBarItemSelect})))}renderTimestamp(){const t=this.item.timestamp;if(t)return i("span",{class:"timestamp"},this.dateTimeFormatter.format(t,"timeofday"))}get dateTimeFormatter(){return this.platform.get(a.DateTimeFormatter)}get translator(){var t;return null===(t=this.platform)||void 0===t?void 0:t.get(a.Translate)}get commandbus(){var t;return null===(t=this.platform)||void 0===t?void 0:t.get(a.CommandBus)}static get style(){return'@charset "UTF-8";*{box-sizing:border-box}:host(limebb-chat-item){display:flex;flex-direction:column;gap:0.25rem;min-width:0;min-height:0;max-width:calc(100% - 2rem)}.bubble-content{display:flex;gap:0.25rem;min-width:0;min-height:0}:host(limebb-chat-item:hover) .helper-text,:host(limebb-chat-item:hover) .timestamp,:host(limebb-chat-item:focus-within) .helper-text,:host(limebb-chat-item:focus-within) .timestamp{opacity:1}:host(limebb-chat-item.mine){margin-left:auto}:host(limebb-chat-item.mine) .item{border-bottom-right-radius:0.125rem;background-color:rgb(var(--color-sky-default), 0.2)}:host(limebb-chat-item.mine) .bubble-content{justify-content:end}:host(limebb-chat-item.mine) .icon-picture{order:2}:host(limebb-chat-item.theirs){margin-right:auto}:host(limebb-chat-item.theirs) .item{border-bottom-left-radius:0.125rem;background-color:rgb(var(--contrast-300), 0.7)}.item{display:flex;flex-direction:column;min-width:0;border-radius:1.25rem;padding:0 0.25rem 0.25rem 0.25rem;backdrop-filter:blur(0.5rem);-webkit-backdrop-filter:blur(0.5rem)}.icon-picture{display:flex;flex-direction:column;gap:0.5rem;align-items:center;justify-content:flex-end}.icon-picture:has(.author-avatar) limel-icon{width:1.25rem;padding:0.125rem}.icon{--icon-background-color:rgb(var(--contrast-500), 0.5);flex-shrink:0;padding:0.375rem;width:2.25rem;backdrop-filter:blur(0.5rem);-webkit-backdrop-filter:blur(0.5rem)}limel-ai-avatar.author-avatar{background-color:rgb(var(--color-glaucous-darker))}header{display:flex;justify-content:space-between;align-items:center;min-height:2rem;padding-left:0.5rem}header:not(:has(.unpromoted-actions-menu)){padding-right:0.5rem}.body-text{padding:0.25rem 0.5rem}footer{display:flex;justify-content:space-between;align-items:end;gap:0.5rem;font-size:x-small}footer:not(:empty){padding:0 0.25rem 0.125rem 0.5rem}footer *{transition:opacity 0.2s ease;opacity:0.4}.timestamp{margin-left:auto}.author-avatar{border-radius:50%;width:2rem;height:2rem;object-fit:cover;box-shadow:0 0 0 1px rgb(var(--contrast-600))}.author{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:500;text-decoration:none}a.author{position:relative;cursor:pointer;transition:color 0.2s ease;color:var(--mdc-theme-primary)}a.author:before{transition:opacity 0.2s ease, transform 0.3s ease-out;content:"";position:absolute;inset:auto 0 0 0;width:calc(100% - 0.5rem);margin:auto;height:0.125rem;border-radius:1rem;background-color:currentColor;opacity:0;transform:scale(0.6)}a.author:hover{color:rgb(var(--color-teal-light))}a.author:hover:before{opacity:0.3;transform:scale(1)}limel-action-bar{--action-bar-item-height:1.75rem;transition:opacity 0.2s ease;justify-content:flex-start;opacity:0.8}.action-bar{display:grid;transition:grid-template-rows var(--limebb-promoted-action-bar-grid-template-rows-transition-speed, 0.2s) cubic-bezier(1, 0.09, 0, 0.89) var(--limebb-promoted-action-bar-grid-template-rows-transition-delay, 0s);grid-template-rows:var(--limebb-promoted-action-bar-grid-template-rows, 1fr)}.action-bar-hider{overflow:hidden}limel-action-bar{transition:padding var(--limebb-promoted-action-bar-grid-template-rows-transition-speed) cubic-bezier(1, 0.09, 0, 0.89) var(--limebb-promoted-action-bar-grid-template-rows-transition-delay);padding-top:0;padding-bottom:0.75rem}:host(limebb-chat-item:hover) .action-bar,:host(limebb-chat-item:focus-within) .action-bar,:host(limebb-chat-item:focus-visible) .action-bar{--limebb-promoted-action-bar-grid-template-rows:1fr;will-change:grid-template-rows}:host(limebb-chat-item:hover) limel-action-bar,:host(limebb-chat-item:focus-within) limel-action-bar,:host(limebb-chat-item:focus-visible) limel-action-bar{will-change:opacity;opacity:1}:host(limebb-chat-item:hover),:host(limebb-chat-item:focus-within){--limebb-promoted-action-bar-grid-template-rows-transition-speed:0.46s;--limebb-promoted-action-bar-grid-template-rows-transition-delay:0.7s}.action-bar{min-width:0;width:calc(100% - calc(2rem + 0.25rem))}:host(limebb-chat-item.theirs) .action-bar{margin-left:calc(2rem + 0.25rem)}:host(limebb-chat-item[has-error]:not([has-error=false])) .bubble-content{cursor:help}:host(limebb-chat-item[has-error]:not([has-error=false])) .item{border:1px solid rgb(var(--color-red-default))}:host(limebb-chat-item[has-error]:not([has-error=false])) .error-sign{color:rgb(var(--color-red-default));flex-shrink:0;width:1.25rem;align-self:center}:host(limebb-chat-item.mine[has-error]:not([has-error=false])) .action-bar{padding-left:1.25rem}:host(limebb-chat-item.mine[has-error]:not([has-error=false])) .helper-text{opacity:1;color:rgb(var(--color-red-default))}'}},[1,"limebb-chat-item",{platform:[16],context:[16],item:[16],helperText:[1,"helper-text"],hasError:[516,"has-error"]}]);function n(){"undefined"!=typeof customElements&&["limebb-chat-item"].forEach((t=>{"limebb-chat-item"===t&&(customElements.get(o(t))||customElements.define(o(t),s))}))}export{s as C,n as d}
1
+ import{proxyCustomElement as e,HTMLElement as t,h as i,Host as r,transformTag as o}from"@stencil/core/internal/client";import{b as a}from"./index.esm.js";const s=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.hasError=!1,this.createActionBarItem=e=>{var t,i;if("separator"in e)return e;let r={value:e,text:null!==(t=e.label)&&void 0!==t?t:"",secondaryText:e.description,disabled:e.disabled};return!e.label&&e.icon?r=Object.assign(Object.assign({},r),{icon:e.icon,text:null!==(i=e.description)&&void 0!==i?i:r.text,iconOnly:!0}):e.icon&&(r=Object.assign(Object.assign({},r),{icon:e.icon})),r},this.handleActionBarItemSelect=e=>{var t;e.stopPropagation();const i=null===(t=e.detail.value)||void 0===t?void 0:t.command;i&&this.commandbus.handle(i)},this.createMenuItem=e=>{var t,i;return"separator"in e?e:{value:e,text:null!==(t=e.label)&&void 0!==t?t:"",secondaryText:e.description,disabled:e.disabled,icon:null!==(i=e.icon)&&void 0!==i?i:""}},this.handleMenuItemSelect=e=>{var t;e.stopPropagation();const i=null===(t=e.detail.value)||void 0===t?void 0:t.command;i&&this.commandbus.handle(i)}}render(){const e=`helper-text-${this.item.id}`;return i(r,{key:"1e6c1cea485ef290ccaf883a7206e2db140a03de",id:this.item.id,"aria-describedby":this.helperText?e:void 0,"aria-live":this.hasError?"assertive":"off",class:{[`${this.item.ui}`]:!0}},i("div",{key:"9e726745a4e577fb56141693f94ad548a0dbb428",class:"bubble-content"},i("div",{key:"30b9d1b5d27f658f43d65f60a8dfeb7c752ece7c",class:"icon-picture"},this.renderIcon(),this.renderAuthorPicture()),this.renderErrorSign(),i("div",{key:"809b0064268e9ac537611a7244845d3622afd146",class:"item"},this.renderHeader(),this.renderValue(),i("footer",{key:"5f5a9bfd1abe7b82d0bc8b5e04a0033de196d97f"},this.renderHelperText(e),this.renderTimestamp()))),this.renderPromotedAction())}renderErrorSign(){if(this.hasError)return i("limel-icon",{class:"error-sign",name:"brake_warning"})}renderHeader(){var e;if(null===(e=this.item.author)||void 0===e?void 0:e.name)return i("header",null,this.renderAuthorName(),i("div",{class:"action-buttons"},this.renderUnpromotedActionsMenu()))}renderIcon(){var e,t,r,o;if(this.item.icon)return i("limel-icon",{class:"icon",badge:!0,name:null!==(t=null===(e=this.item.icon)||void 0===e?void 0:e.name)&&void 0!==t?t:"dot_circle",style:{color:`${null===(r=this.item.icon)||void 0===r?void 0:r.color}`,"background-color":`${null===(o=this.item.icon)||void 0===o?void 0:o.backgroundColor}`}})}renderHelperText(e){if(this.helperText)return i("span",{class:"helper-text",id:e},this.helperText)}renderValue(){if(this.item.value)return i("limel-markdown",{class:"body-text reset-img-height",value:this.item.value})}renderAuthorName(){var e,t;if("string"==typeof(null===(e=this.item.author)||void 0===e?void 0:e.name))return i("span",{class:"author"},this.item.author.name);if("object"==typeof(null===(t=this.item.author)||void 0===t?void 0:t.name)){const{href:e,title:t,text:r}=this.item.author.name;return i("a",{class:"author",href:e,title:t},r)}}renderAuthorPicture(){var e;if(null===(e=this.item.author)||void 0===e?void 0:e.picture)return"limel-ai-avatar"===this.item.author.picture?i("limel-ai-avatar",{class:"author-avatar"}):i("img",{class:"author-avatar",loading:"lazy",src:this.item.author.picture})}renderUnpromotedActionsMenu(){var e,t;if(!(null===(e=this.item.unpromotedActions)||void 0===e?void 0:e.length))return;const r=this.item.unpromotedActions.map(this.createMenuItem);return i("limel-menu",{class:"unpromoted-actions-menu",items:r,openDirection:"bottom-end",onSelect:this.handleMenuItemSelect},i("limel-icon-button",{icon:"menu_2",slot:"trigger",label:null===(t=this.translator)||void 0===t?void 0:t.get("webclient.more-actions")}))}renderPromotedAction(){if(!this.item.promotedActions)return;const e=this.item.promotedActions.map(this.createActionBarItem);return i("div",{class:"action-bar"},i("div",{class:"action-bar-hider"},i("limel-action-bar",{accessibleLabel:"Action bar",actions:e,layout:"fullWidth",onItemSelected:this.handleActionBarItemSelect})))}renderTimestamp(){const e=this.item.timestamp;if(e)return i("span",{class:"timestamp"},this.dateTimeFormatter.format(e,"timeofday"))}get dateTimeFormatter(){return this.platform.get(a.DateTimeFormatter)}get translator(){var e;return null===(e=this.platform)||void 0===e?void 0:e.get(a.Translate)}get commandbus(){var e;return null===(e=this.platform)||void 0===e?void 0:e.get(a.CommandBus)}static get style(){return'@charset "UTF-8";*{box-sizing:border-box}:host(limebb-chat-item){display:flex;flex-direction:column;gap:0.25rem;min-width:0;min-height:0;max-width:calc(100% - 2rem)}.bubble-content{display:flex;gap:0.25rem;min-width:0;min-height:0}:host(limebb-chat-item:hover) .helper-text,:host(limebb-chat-item:hover) .timestamp,:host(limebb-chat-item:focus-within) .helper-text,:host(limebb-chat-item:focus-within) .timestamp{opacity:1}:host(limebb-chat-item.mine){margin-left:auto}:host(limebb-chat-item.mine) .item{border-bottom-right-radius:0.125rem;background-color:rgb(var(--color-sky-default), 0.2)}:host(limebb-chat-item.mine) .bubble-content{justify-content:end}:host(limebb-chat-item.mine) .icon-picture{order:2}:host(limebb-chat-item.theirs){margin-right:auto}:host(limebb-chat-item.theirs) .item{border-bottom-left-radius:0.125rem;background-color:rgb(var(--contrast-300), 0.7)}.item{display:flex;flex-direction:column;min-width:0;border-radius:1.25rem;padding:0 0.25rem 0.25rem 0.25rem;backdrop-filter:blur(0.5rem);-webkit-backdrop-filter:blur(0.5rem)}.icon-picture{display:flex;flex-direction:column;gap:0.5rem;align-items:center;justify-content:flex-end}.icon-picture:has(.author-avatar) limel-icon{width:1.25rem;padding:0.125rem}.icon{--icon-background-color:rgb(var(--contrast-500), 0.5);flex-shrink:0;padding:0.375rem;width:2.25rem;backdrop-filter:blur(0.5rem);-webkit-backdrop-filter:blur(0.5rem)}limel-ai-avatar.author-avatar{background-color:rgb(var(--color-glaucous-darker))}header{display:flex;justify-content:space-between;align-items:center;min-height:2rem;padding-left:0.5rem}header:not(:has(.unpromoted-actions-menu)){padding-right:0.5rem}.body-text{padding:0.25rem 0.5rem}footer{display:flex;justify-content:space-between;align-items:end;gap:0.5rem;font-size:x-small}footer:not(:empty){padding:0 0.25rem 0.125rem 0.5rem}footer *{transition:opacity 0.2s ease;opacity:0.4}.timestamp{margin-left:auto}.author-avatar{border-radius:50%;width:2rem;height:2rem;object-fit:cover;box-shadow:0 0 0 1px rgb(var(--contrast-600))}.author{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:500;text-decoration:none}a.author{position:relative;cursor:pointer;transition:color 0.2s ease;color:var(--mdc-theme-primary)}a.author:before{transition:opacity 0.2s ease, transform 0.3s ease-out;content:"";position:absolute;inset:auto 0 0 0;width:calc(100% - 0.5rem);margin:auto;height:0.125rem;border-radius:1rem;background-color:currentColor;opacity:0;transform:scale(0.6)}a.author:hover{color:rgb(var(--color-teal-light))}a.author:hover:before{opacity:0.3;transform:scale(1)}limel-action-bar{--action-bar-item-height:1.75rem;transition:opacity 0.2s ease;justify-content:flex-start;opacity:0.8}.action-bar{display:grid;transition:grid-template-rows var(--limebb-promoted-action-bar-grid-template-rows-transition-speed, 0.2s) cubic-bezier(1, 0.09, 0, 0.89) var(--limebb-promoted-action-bar-grid-template-rows-transition-delay, 0s);grid-template-rows:var(--limebb-promoted-action-bar-grid-template-rows, 1fr)}.action-bar-hider{overflow:hidden}limel-action-bar{transition:padding var(--limebb-promoted-action-bar-grid-template-rows-transition-speed) cubic-bezier(1, 0.09, 0, 0.89) var(--limebb-promoted-action-bar-grid-template-rows-transition-delay);padding-top:0;padding-bottom:0.75rem}:host(limebb-chat-item:hover) .action-bar,:host(limebb-chat-item:focus-within) .action-bar,:host(limebb-chat-item:focus-visible) .action-bar{--limebb-promoted-action-bar-grid-template-rows:1fr;will-change:grid-template-rows}:host(limebb-chat-item:hover) limel-action-bar,:host(limebb-chat-item:focus-within) limel-action-bar,:host(limebb-chat-item:focus-visible) limel-action-bar{will-change:opacity;opacity:1}:host(limebb-chat-item:hover),:host(limebb-chat-item:focus-within){--limebb-promoted-action-bar-grid-template-rows-transition-speed:0.46s;--limebb-promoted-action-bar-grid-template-rows-transition-delay:0.7s}.action-bar{min-width:0;width:calc(100% - calc(2rem + 0.25rem))}:host(limebb-chat-item.theirs) .action-bar{margin-left:calc(2rem + 0.25rem)}:host(limebb-chat-item[has-error]:not([has-error=false])) .bubble-content{cursor:help}:host(limebb-chat-item[has-error]:not([has-error=false])) .item{border:1px solid rgb(var(--color-red-default))}:host(limebb-chat-item[has-error]:not([has-error=false])) .error-sign{color:rgb(var(--color-red-default));flex-shrink:0;width:1.25rem;align-self:center}:host(limebb-chat-item.mine[has-error]:not([has-error=false])) .action-bar{padding-left:1.25rem}:host(limebb-chat-item.mine[has-error]:not([has-error=false])) .helper-text{opacity:1;color:rgb(var(--color-red-default))}'}},[1,"limebb-chat-item",{platform:[16],context:[16],item:[16],helperText:[1,"helper-text"],hasError:[516,"has-error"]}]);function n(){"undefined"!=typeof customElements&&["limebb-chat-item"].forEach((e=>{"limebb-chat-item"===e&&(customElements.get(o(e))||customElements.define(o(e),s))}))}export{s as C,n as d}