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

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 (116) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/lime-crm-building-blocks.cjs.js +1 -1
  3. package/dist/cjs/lime-query-validation-6be10fa7.js +558 -0
  4. package/dist/cjs/limebb-lime-query-builder.cjs.entry.js +4 -514
  5. package/dist/cjs/{limebb-lime-query-filter-builder_4.cjs.entry.js → limebb-lime-query-filter-builder_3.cjs.entry.js} +1 -243
  6. package/dist/cjs/limebb-lime-query-filter-comparison_2.cjs.entry.js +1 -1
  7. package/dist/cjs/limebb-lime-query-filter-group_3.cjs.entry.js +165 -71
  8. package/dist/cjs/limebb-lime-query-order-by-item.cjs.entry.js +2 -2
  9. package/dist/cjs/limebb-lime-query-response-format-builder.cjs.entry.js +242 -0
  10. package/dist/cjs/limebb-lime-query-response-format-editor_2.cjs.entry.js +322 -0
  11. package/dist/cjs/limebb-live-docs-info.cjs.entry.js +2 -2
  12. package/dist/cjs/limebb-locale-picker.cjs.entry.js +1 -1
  13. package/dist/cjs/limebb-mention-group-counter.cjs.entry.js +2 -2
  14. package/dist/cjs/limebb-navigation-button_2.cjs.entry.js +3 -3
  15. package/dist/cjs/limebb-notification-item.cjs.entry.js +1 -1
  16. package/dist/cjs/limebb-percentage-visualizer.cjs.entry.js +2 -2
  17. package/dist/cjs/limebb-text-editor.cjs.entry.js +1 -1
  18. package/dist/cjs/limebb-trend-indicator.cjs.entry.js +1 -1
  19. package/dist/cjs/loader.cjs.js +1 -1
  20. package/dist/collection/collection-manifest.json +3 -2
  21. package/dist/collection/components/lime-query-builder/expressions/filter-group-logic.js +150 -0
  22. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison.js +1 -1
  23. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.js +15 -71
  24. package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-not.js +1 -1
  25. package/dist/collection/components/lime-query-builder/lime-query-builder.js +1 -1
  26. package/dist/collection/components/lime-query-builder/lime-query-response-format-builder.css +91 -0
  27. package/dist/collection/components/lime-query-builder/lime-query-response-format-builder.js +355 -0
  28. package/dist/collection/components/lime-query-builder/lime-query-validation.js +40 -0
  29. package/dist/collection/components/lime-query-builder/limetype-field/limetype-field.js +1 -1
  30. package/dist/collection/components/lime-query-builder/order-by/order-by-item.js +2 -2
  31. package/dist/collection/components/lime-query-builder/{response-format-editor.css → response-format/response-format-editor.css} +1 -1
  32. package/dist/collection/components/lime-query-builder/{response-format-editor.js → response-format/response-format-editor.js} +5 -5
  33. package/dist/collection/components/lime-query-builder/response-format/response-format-helpers.js +92 -0
  34. package/dist/collection/components/lime-query-builder/{response-format-item.css → response-format/response-format-item.css} +1 -1
  35. package/dist/collection/components/lime-query-builder/{response-format-item.js → response-format/response-format-item.js} +6 -6
  36. package/dist/collection/components/limeobject/file-viewer/live-docs-info.js +2 -2
  37. package/dist/collection/components/locale-picker/locale-picker.js +1 -1
  38. package/dist/collection/components/notification-list/notification-item/notification-item.js +1 -1
  39. package/dist/collection/components/percentage-visualizer/percentage-visualizer.js +2 -2
  40. package/dist/collection/components/summary-popover/summary-popover.js +3 -3
  41. package/dist/collection/components/text-editor/mention-group-counter.js +2 -2
  42. package/dist/collection/components/text-editor/text-editor.js +1 -1
  43. package/dist/collection/components/trend-indicator/trend-indicator.js +1 -1
  44. package/dist/components/lime-query-filter-comparison.js +1 -1
  45. package/dist/components/lime-query-filter-expression.js +165 -71
  46. package/dist/components/lime-query-validation.js +555 -0
  47. package/dist/components/limebb-lime-query-builder.js +14 -524
  48. package/dist/components/limebb-lime-query-response-format-builder.d.ts +11 -0
  49. package/dist/components/limebb-lime-query-response-format-builder.js +283 -0
  50. package/dist/components/limebb-lime-query-response-format-editor.d.ts +11 -0
  51. package/dist/components/{limebb-response-format-editor.js → limebb-lime-query-response-format-editor.js} +2 -2
  52. package/dist/components/limebb-lime-query-response-format-item.d.ts +11 -0
  53. package/dist/components/{limebb-response-format-item.js → limebb-lime-query-response-format-item.js} +2 -2
  54. package/dist/components/limebb-locale-picker.js +1 -1
  55. package/dist/components/limebb-mention-group-counter.js +2 -2
  56. package/dist/components/limebb-percentage-visualizer.js +2 -2
  57. package/dist/components/limebb-text-editor.js +1 -1
  58. package/dist/components/limebb-trend-indicator.js +1 -1
  59. package/dist/components/limetype-field.js +1 -1
  60. package/dist/components/live-docs-info.js +2 -2
  61. package/dist/components/notification-item.js +1 -1
  62. package/dist/components/order-by-item.js +2 -2
  63. package/dist/components/response-format-editor.js +11 -11
  64. package/dist/components/response-format-item.js +9 -9
  65. package/dist/components/summary-popover.js +3 -3
  66. package/dist/esm/lime-crm-building-blocks.js +1 -1
  67. package/dist/esm/lime-query-validation-573223a5.js +555 -0
  68. package/dist/esm/limebb-lime-query-builder.entry.js +4 -514
  69. package/dist/esm/{limebb-lime-query-filter-builder_4.entry.js → limebb-lime-query-filter-builder_3.entry.js} +2 -243
  70. package/dist/esm/limebb-lime-query-filter-comparison_2.entry.js +1 -1
  71. package/dist/esm/limebb-lime-query-filter-group_3.entry.js +165 -71
  72. package/dist/esm/limebb-lime-query-order-by-item.entry.js +2 -2
  73. package/dist/esm/limebb-lime-query-response-format-builder.entry.js +238 -0
  74. package/dist/esm/limebb-lime-query-response-format-editor_2.entry.js +317 -0
  75. package/dist/esm/limebb-live-docs-info.entry.js +2 -2
  76. package/dist/esm/limebb-locale-picker.entry.js +1 -1
  77. package/dist/esm/limebb-mention-group-counter.entry.js +2 -2
  78. package/dist/esm/limebb-navigation-button_2.entry.js +3 -3
  79. package/dist/esm/limebb-notification-item.entry.js +1 -1
  80. package/dist/esm/limebb-percentage-visualizer.entry.js +2 -2
  81. package/dist/esm/limebb-text-editor.entry.js +1 -1
  82. package/dist/esm/limebb-trend-indicator.entry.js +1 -1
  83. package/dist/esm/loader.js +1 -1
  84. package/dist/lime-crm-building-blocks/lime-crm-building-blocks.esm.js +1 -1
  85. package/dist/lime-crm-building-blocks/{p-5cf4898d.entry.js → p-0de79b7f.entry.js} +1 -1
  86. package/dist/lime-crm-building-blocks/{p-8c2fb1c9.entry.js → p-0f7135ff.entry.js} +1 -1
  87. package/dist/lime-crm-building-blocks/{p-6aa216ec.entry.js → p-186e9f1a.entry.js} +1 -1
  88. package/dist/lime-crm-building-blocks/p-289ce8b9.entry.js +1 -0
  89. package/dist/lime-crm-building-blocks/p-3351395b.entry.js +1 -0
  90. package/dist/lime-crm-building-blocks/p-33e6d0ec.entry.js +1 -0
  91. package/dist/lime-crm-building-blocks/{p-a1ee8990.entry.js → p-3d1be1c9.entry.js} +1 -1
  92. package/dist/lime-crm-building-blocks/{p-92dfc5f8.entry.js → p-577d8909.entry.js} +1 -1
  93. package/dist/lime-crm-building-blocks/{p-d84874dc.entry.js → p-6f6fed59.entry.js} +1 -1
  94. package/dist/lime-crm-building-blocks/p-7731e1b0.entry.js +1 -0
  95. package/dist/lime-crm-building-blocks/{p-0cd036ed.entry.js → p-7e5528f6.entry.js} +1 -1
  96. package/dist/lime-crm-building-blocks/{p-8601eab5.entry.js → p-a9ac501f.entry.js} +1 -1
  97. package/dist/lime-crm-building-blocks/p-be845252.entry.js +1 -0
  98. package/dist/lime-crm-building-blocks/{p-2725671e.entry.js → p-cb338753.entry.js} +1 -1
  99. package/dist/lime-crm-building-blocks/{p-425eaba2.entry.js → p-d0721b22.entry.js} +1 -1
  100. package/dist/lime-crm-building-blocks/p-fa2da6bc.js +1 -0
  101. package/dist/types/components/lime-query-builder/expressions/filter-group-logic.d.ts +89 -0
  102. package/dist/types/components/lime-query-builder/lime-query-response-format-builder.d.ts +102 -0
  103. package/dist/types/components/lime-query-builder/lime-query-validation.d.ts +13 -0
  104. package/dist/types/components/lime-query-builder/{response-format-editor.d.ts → response-format/response-format-editor.d.ts} +2 -2
  105. package/dist/types/components/lime-query-builder/response-format/response-format-helpers.d.ts +42 -0
  106. package/dist/types/components/lime-query-builder/{response-format-item.d.ts → response-format/response-format-item.d.ts} +2 -2
  107. package/dist/types/components.d.ts +394 -222
  108. package/package.json +1 -1
  109. package/dist/cjs/limebb-response-format-item.cjs.entry.js +0 -80
  110. package/dist/components/limebb-response-format-editor.d.ts +0 -11
  111. package/dist/components/limebb-response-format-item.d.ts +0 -11
  112. package/dist/esm/limebb-response-format-item.entry.js +0 -76
  113. package/dist/lime-crm-building-blocks/p-244ee55b.entry.js +0 -1
  114. package/dist/lime-crm-building-blocks/p-67c174d0.entry.js +0 -1
  115. package/dist/lime-crm-building-blocks/p-ccf34631.entry.js +0 -1
  116. package/dist/lime-crm-building-blocks/p-f9efca1d.entry.js +0 -1
@@ -0,0 +1,238 @@
1
+ import { r as registerInstance, c as createEvent, h } from './index-96dd111f.js';
2
+ import { T as Te } from './index.esm-bb569663.js';
3
+ import { v as validateResponseFormatOnly } from './lime-query-validation-573223a5.js';
4
+ import './property-resolution-c21a1369.js';
5
+
6
+ /**
7
+ * Helper functions for working with ResponseFormat objects
8
+ *
9
+ * These utilities handle parsing, stringifying, and default values
10
+ * for ResponseFormat in isolation (without full LimeQuery wrapper)
11
+ */
12
+ /**
13
+ * Parse JSON string to ResponseFormat
14
+ *
15
+ * @param json - JSON string to parse
16
+ * @returns Parsed ResponseFormat object
17
+ * @throws Error if JSON is invalid or not a ResponseFormat
18
+ */
19
+ function parseResponseFormat(json) {
20
+ let parsed;
21
+ try {
22
+ parsed = JSON.parse(json);
23
+ }
24
+ catch (error) {
25
+ throw new Error(`Invalid JSON: ${error.message}`);
26
+ }
27
+ if (parsed === null || typeof parsed !== 'object') {
28
+ throw new Error('Response format must be an object');
29
+ }
30
+ // Validate structure
31
+ const validKeys = new Set(['object', 'aggregates']);
32
+ const keys = Object.keys(parsed);
33
+ // Check for unexpected keys
34
+ const unexpectedKeys = keys.filter((key) => !validKeys.has(key));
35
+ if (unexpectedKeys.length > 0) {
36
+ throw new Error(`Unexpected properties in response format: ${unexpectedKeys.join(', ')}. ` +
37
+ `Only 'object' and 'aggregates' are allowed.`);
38
+ }
39
+ // Must have at least one of object or aggregates
40
+ if (!parsed.object && !parsed.aggregates) {
41
+ throw new Error('Response format must contain at least one of: object, aggregates');
42
+ }
43
+ return parsed;
44
+ }
45
+ /**
46
+ * Stringify ResponseFormat to JSON
47
+ *
48
+ * @param format - ResponseFormat object to stringify
49
+ * @returns Pretty-printed JSON string
50
+ */
51
+ function stringifyResponseFormat(format) {
52
+ return JSON.stringify(format, null, 2);
53
+ }
54
+ /**
55
+ * Get default ResponseFormat (just _id)
56
+ *
57
+ * @returns Default ResponseFormat with only _id selected
58
+ */
59
+ function getDefaultResponseFormat() {
60
+ return {
61
+ object: {
62
+ _id: null,
63
+ },
64
+ };
65
+ }
66
+
67
+ const limeQueryResponseFormatBuilderCss = ":host(limebb-lime-query-response-format-builder){display:block;width:100%}.response-format-builder{display:flex;flex-direction:column;gap:1.5rem}.builder-label{margin:0;font-size:1.25rem;font-weight:600;color:rgb(var(--contrast-1100))}.mode-controls{display:flex;align-items:center;gap:0.5rem;padding:0.5rem}.mode-switch{display:flex;align-items:center;gap:0.5rem}.mode-switch limel-button{min-width:5rem}.gui-mode,.code-mode{display:block}.code-editor-container{--code-editor-max-height:70vh;display:flex;flex-direction:column;gap:1rem}.code-editor-container .validation-errors{padding:0.75rem 1rem;color:rgb(var(--color-red-default));background-color:rgb(var(--color-red-lighter));border-left:0.25rem solid rgb(var(--color-red-default));border-radius:0.25rem;font-size:0.875rem}.code-editor-container .validation-errors strong{display:block;margin-bottom:0.5rem;font-weight:600}.code-editor-container .validation-errors ul{margin:0;padding-left:1.5rem}.code-editor-container .validation-errors li{margin:0.25rem 0}.code-editor-container .gui-limitations{padding:0.75rem 1rem;color:rgb(var(--color-blue-dark));background-color:rgb(var(--color-blue-lighter));border-left:0.25rem solid rgb(var(--color-blue-default));border-radius:0.25rem;font-size:0.875rem}.code-editor-container .gui-limitations strong{display:block;margin-bottom:0.5rem;font-weight:600}.code-editor-container .gui-limitations ul{margin:0;padding-left:1.5rem}.code-editor-container .gui-limitations li{margin:0.25rem 0}@media (max-width: 768px){.response-format-builder{gap:1rem}}";
68
+ const LimebbLimeQueryResponseFormatBuilderStyle0 = limeQueryResponseFormatBuilderCss;
69
+
70
+ var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
71
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
72
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
73
+ r = Reflect.decorate(decorators, target, key, desc);
74
+ else
75
+ for (var i = decorators.length - 1; i >= 0; i--)
76
+ if (d = decorators[i])
77
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
78
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
79
+ };
80
+ const LimeQueryResponseFormatBuilder = class {
81
+ constructor(hostRef) {
82
+ registerInstance(this, hostRef);
83
+ this.change = createEvent(this, "change", 7);
84
+ /**
85
+ * Optional label for the builder
86
+ */
87
+ this.label = 'Response Format';
88
+ this.mode = 'gui';
89
+ this.codeValue = '';
90
+ /**
91
+ * Switch from code mode to GUI mode
92
+ */
93
+ this.switchToGui = () => {
94
+ // Validate JSON before switching
95
+ try {
96
+ const parsed = parseResponseFormat(this.codeValue);
97
+ // Check if it's supported in GUI
98
+ const support = validateResponseFormatOnly(parsed, this.limetypes, this.limetype, this.guiModeEnabled);
99
+ if (!support.guiSupported) {
100
+ // Don't switch if GUI can't render this response format
101
+ return;
102
+ }
103
+ // Update internal state from parsed value
104
+ this.internalValue = parsed;
105
+ this.mode = 'gui';
106
+ this.change.emit(parsed);
107
+ }
108
+ catch (_a) {
109
+ // Don't switch if JSON is invalid (linter will show the error)
110
+ }
111
+ };
112
+ /**
113
+ * Switch from GUI mode to code mode
114
+ */
115
+ this.switchToCode = () => {
116
+ this.updateCodeValue();
117
+ this.mode = 'code';
118
+ };
119
+ /**
120
+ * Handle code editor changes
121
+ * @param event
122
+ */
123
+ this.handleCodeChange = (event) => {
124
+ event.stopPropagation();
125
+ this.codeValue = event.detail;
126
+ // Try to parse and emit if valid
127
+ try {
128
+ const parsed = parseResponseFormat(this.codeValue);
129
+ this.internalValue = parsed;
130
+ this.change.emit(parsed);
131
+ }
132
+ catch (_a) {
133
+ // Invalid JSON - don't emit change
134
+ // Validation errors will be shown by checkGuiSupport()
135
+ }
136
+ };
137
+ /**
138
+ * Handle GUI mode changes
139
+ * @param event
140
+ */
141
+ this.handleGuiChange = (event) => {
142
+ event.stopPropagation();
143
+ this.internalValue = event.detail;
144
+ this.updateCodeValue();
145
+ this.change.emit(event.detail);
146
+ };
147
+ }
148
+ /**
149
+ * Check if GUI mode is enabled via feature flag
150
+ */
151
+ get guiModeEnabled() {
152
+ var _a, _b, _c;
153
+ return ((_c = (_b = (_a = this.platform) === null || _a === void 0 ? void 0 : _a.isFeatureEnabled) === null || _b === void 0 ? void 0 : _b.call(_a, 'useLimeQueryBuilderGuiMode')) !== null && _c !== void 0 ? _c : false);
154
+ }
155
+ componentWillLoad() {
156
+ // Initialize internal value
157
+ this.internalValue = this.value || getDefaultResponseFormat();
158
+ // Update code value from internal value
159
+ this.updateCodeValue();
160
+ // Force code mode if GUI is disabled
161
+ if (!this.guiModeEnabled) {
162
+ this.mode = 'code';
163
+ return;
164
+ }
165
+ // Check if GUI mode is supported for current value
166
+ const support = this.checkGuiSupport();
167
+ if (!support.guiSupported) {
168
+ this.mode = 'code';
169
+ }
170
+ }
171
+ componentWillUpdate() {
172
+ // Sync internal value when prop changes externally
173
+ if (this.value && this.mode === 'gui') {
174
+ this.internalValue = this.value;
175
+ }
176
+ }
177
+ render() {
178
+ const guiSupported = this.checkGuiSupport();
179
+ return (h("div", { key: '2b5e4ee360d6997a176d24e5a7aa36158461ad4a', class: "response-format-builder" }, this.label && h("h3", { key: 'b81f58824e4cf3114efd4d2978c833f7f06f2004', class: "builder-label" }, this.label), this.guiModeEnabled && (h("div", { key: '1b2ec0cd39909568732be94707a9dcadaa4a1223', class: "mode-controls" }, this.renderModeSwitch(guiSupported))), !this.guiModeEnabled || this.mode === 'code' ? (h("div", { class: "code-mode" }, this.renderCodeEditor(guiSupported))) : (h("div", { class: "gui-mode" }, this.renderGuiMode()))));
180
+ }
181
+ renderModeSwitch(support) {
182
+ const guiDisabled = !support.guiSupported;
183
+ return (h("div", { class: "mode-switch" }, h("limel-button", { label: "GUI", primary: this.mode === 'gui', disabled: guiDisabled, onClick: this.switchToGui }), h("limel-button", { label: "Code", primary: this.mode === 'code', onClick: this.switchToCode })));
184
+ }
185
+ renderCodeEditor(support) {
186
+ return (h("div", { class: "code-editor-container" }, h("limel-code-editor", { value: this.codeValue, language: "json", lineNumbers: true, fold: true, lint: true, onChange: this.handleCodeChange }), !support.valid && support.validationErrors.length > 0 && (h("div", { class: "validation-errors" }, h("strong", null, "Invalid Response Format:"), h("ul", null, support.validationErrors.map((error) => (h("li", null, error)))))), this.guiModeEnabled &&
187
+ support.valid &&
188
+ !support.guiSupported &&
189
+ support.guiLimitations.length > 0 && (h("div", { class: "gui-limitations" }, h("strong", null, "Cannot switch to GUI mode:"), h("ul", null, support.guiLimitations.map((limitation) => (h("li", null, limitation))))))));
190
+ }
191
+ renderGuiMode() {
192
+ return (h("limebb-lime-query-response-format-editor", { platform: this.platform, context: this.context, limetype: this.limetype, value: this.internalValue, onChange: this.handleGuiChange }));
193
+ }
194
+ /**
195
+ * Check if current value can be rendered in GUI mode
196
+ */
197
+ checkGuiSupport() {
198
+ if (!this.limetypes) {
199
+ return {
200
+ valid: false,
201
+ guiSupported: false,
202
+ validationErrors: ['Limetypes not loaded'],
203
+ guiLimitations: [],
204
+ };
205
+ }
206
+ // Try to parse code value if in code mode
207
+ let valueToCheck;
208
+ if (this.mode === 'code') {
209
+ try {
210
+ valueToCheck = parseResponseFormat(this.codeValue);
211
+ }
212
+ catch (error) {
213
+ return {
214
+ valid: false,
215
+ guiSupported: false,
216
+ validationErrors: [error.message],
217
+ guiLimitations: [],
218
+ };
219
+ }
220
+ }
221
+ else {
222
+ valueToCheck = this.internalValue;
223
+ }
224
+ return validateResponseFormatOnly(valueToCheck, this.limetypes, this.limetype, this.guiModeEnabled);
225
+ }
226
+ /**
227
+ * Update code value from internal state
228
+ */
229
+ updateCodeValue() {
230
+ this.codeValue = stringifyResponseFormat(this.internalValue);
231
+ }
232
+ };
233
+ __decorate([
234
+ Te()
235
+ ], LimeQueryResponseFormatBuilder.prototype, "limetypes", void 0);
236
+ LimeQueryResponseFormatBuilder.style = LimebbLimeQueryResponseFormatBuilderStyle0;
237
+
238
+ export { LimeQueryResponseFormatBuilder as limebb_lime_query_response_format_builder };
@@ -0,0 +1,317 @@
1
+ import { r as registerInstance, c as createEvent, h } from './index-96dd111f.js';
2
+
3
+ /**
4
+ * Process a single property value and add to items array
5
+ * @param items Array to add items to
6
+ * @param fullPath Full property path
7
+ * @param value Property value to process
8
+ */
9
+ function processPropertyValue(items, fullPath, value) {
10
+ if (value === null) {
11
+ items.push({ path: fullPath });
12
+ return;
13
+ }
14
+ // Cast to record for checking
15
+ const valueObj = value;
16
+ const keys = Object.keys(valueObj);
17
+ const hasAlias = '_alias' in valueObj;
18
+ const hasDescription = '#description' in valueObj;
19
+ const otherKeys = keys.filter((k) => k !== '_alias' && k !== '#description');
20
+ // If it's {} or only has metadata (_alias, #description), treat as simple property
21
+ if (otherKeys.length === 0) {
22
+ const aliasValue = valueObj._alias;
23
+ const descriptionValue = valueObj['#description'];
24
+ if (aliasValue || descriptionValue) {
25
+ items.push({
26
+ path: fullPath,
27
+ alias: aliasValue,
28
+ description: descriptionValue,
29
+ });
30
+ }
31
+ else {
32
+ items.push({ path: fullPath });
33
+ }
34
+ return;
35
+ }
36
+ // If has metadata + other properties, we need to handle both
37
+ // Add the nested properties (metadata is preserved in conversion back)
38
+ if (hasAlias || hasDescription) {
39
+ // Build a PropertySelection without the metadata for recursion
40
+ const nestedSelection = {};
41
+ for (const key of otherKeys) {
42
+ nestedSelection[key] = valueObj[key];
43
+ }
44
+ items.push(...propertySelectionToItems(nestedSelection, fullPath));
45
+ return;
46
+ }
47
+ // Nested property selection without metadata
48
+ items.push(...propertySelectionToItems(value, fullPath));
49
+ }
50
+ /**
51
+ * Convert a nested PropertySelection to a flat list of property items
52
+ * @param selection The nested PropertySelection object
53
+ * @param prefix Current path prefix (used for recursion)
54
+ * @returns Flat array of PropertySelectionItem objects
55
+ */
56
+ function propertySelectionToItems(selection, prefix = '') {
57
+ if (!selection) {
58
+ return [];
59
+ }
60
+ const items = [];
61
+ for (const [key, value] of Object.entries(selection)) {
62
+ const fullPath = prefix ? `${prefix}.${key}` : key;
63
+ if (typeof value === 'object') {
64
+ // NOTE: We want to send null values to the processPropertyValue
65
+ // function but we don't need a special check for null, since
66
+ // `typeof null === 'object'`
67
+ processPropertyValue(items, fullPath, value);
68
+ }
69
+ }
70
+ return items;
71
+ }
72
+ /**
73
+ * Set the final property value (with or without alias/description)
74
+ * @param current Current PropertySelection object
75
+ * @param part Property name/key
76
+ * @param item Property selection item with path and optional alias/description
77
+ */
78
+ function setPropertyValue(current, part, item) {
79
+ // Check if there's already a nested PropertySelection with properties
80
+ const existing = current[part];
81
+ if (existing &&
82
+ typeof existing === 'object' &&
83
+ !('_alias' in existing) &&
84
+ !('#description' in existing)) {
85
+ // There's already a nested PropertySelection object with properties
86
+ // Don't overwrite it - preserve the nested selections
87
+ return;
88
+ }
89
+ // Build metadata object, stripping empty values
90
+ const metadata = {};
91
+ if (item.alias && item.alias.trim() !== '') {
92
+ metadata._alias = item.alias;
93
+ }
94
+ if (item.description && item.description.trim() !== '') {
95
+ metadata['#description'] = item.description;
96
+ }
97
+ // If we have metadata, use it; otherwise use null
98
+ if (Object.keys(metadata).length > 0) {
99
+ current[part] = metadata;
100
+ }
101
+ else {
102
+ current[part] = null;
103
+ }
104
+ }
105
+ /**
106
+ * Ensure a nested object exists and return it
107
+ * Preserves any existing _alias and #description when converting to nested object
108
+ * @param current Current PropertySelection object
109
+ * @param part Property name/key
110
+ * @returns The nested PropertySelection object
111
+ */
112
+ function ensureNestedObject(current, part) {
113
+ const existing = current[part];
114
+ // If doesn't exist or is null, create empty object
115
+ if (!existing) {
116
+ current[part] = {};
117
+ return current[part];
118
+ }
119
+ // If it's already a PropertySelection object, check for metadata
120
+ if (typeof existing === 'object') {
121
+ const existingObj = existing;
122
+ // If it has metadata but no other properties, preserve the metadata
123
+ const keys = Object.keys(existingObj);
124
+ const hasMetadata = '_alias' in existingObj || '#description' in existingObj;
125
+ const otherKeys = keys.filter((k) => k !== '_alias' && k !== '#description');
126
+ if (hasMetadata && otherKeys.length === 0) {
127
+ // Convert { _alias: "...", "#description": "..." } to { _alias: "...", "#description": "...", ...nested }
128
+ // Keep the existing object and return it (caller will add nested props)
129
+ return existingObj;
130
+ }
131
+ // Already has nested properties, return as is
132
+ return existingObj;
133
+ }
134
+ // Shouldn't reach here, but fallback to creating new object
135
+ current[part] = {};
136
+ return current[part];
137
+ }
138
+ /**
139
+ * Convert a flat list of property items to a nested PropertySelection structure
140
+ * @param items Array of PropertySelectionItem objects
141
+ * @returns Nested PropertySelection object
142
+ */
143
+ function itemsToPropertySelection(items) {
144
+ const result = {};
145
+ for (const item of items) {
146
+ const parts = item.path.split('.');
147
+ let current = result;
148
+ for (let i = 0; i < parts.length; i++) {
149
+ const part = parts[i];
150
+ const isLast = i === parts.length - 1;
151
+ if (isLast) {
152
+ setPropertyValue(current, part, item);
153
+ }
154
+ else {
155
+ current = ensureNestedObject(current, part);
156
+ }
157
+ }
158
+ }
159
+ return result;
160
+ }
161
+
162
+ const responseFormatEditorCss = ":host(limebb-lime-query-response-format-editor){display:block;width:100%}.response-format-editor{display:flex;flex-direction:column;gap:1rem;padding:1rem}.header{display:flex;justify-content:space-between;align-items:center;gap:1rem}.header h4{margin:0;font-size:1rem;font-weight:600;color:rgb(var(--contrast-1000))}.property-list{display:flex;flex-direction:column;gap:1rem;padding:0.5rem;border:1px solid rgb(var(--contrast-300));border-radius:0.25rem;background-color:rgb(var(--contrast-50));min-height:4rem}.property-item{padding:0.5rem;border-radius:0.25rem;transition:background-color 0.2s}.property-item:hover{background-color:rgb(var(--contrast-100))}.actions{display:flex;justify-content:flex-start}.summary{display:flex;justify-content:space-between;align-items:center;padding-top:0.5rem;border-top:1px solid rgb(var(--contrast-300))}.summary .count{font-size:0.875rem;font-weight:500;color:rgb(var(--contrast-900))}.empty-state{padding:2rem;text-align:center;color:rgb(var(--contrast-700));font-style:italic}.empty-state p{margin:0}";
163
+ const LimebbLimeQueryResponseFormatEditorStyle0 = responseFormatEditorCss;
164
+
165
+ const ResponseFormatEditor = class {
166
+ constructor(hostRef) {
167
+ registerInstance(this, hostRef);
168
+ this.change = createEvent(this, "change", 7);
169
+ /**
170
+ * Optional label
171
+ */
172
+ this.label = 'Select Properties to Return';
173
+ this.items = [{ path: '_id' }];
174
+ this.handleItemChange = (index) => (event) => {
175
+ event.stopPropagation();
176
+ const newItems = [...this.items];
177
+ if (event.detail === null) {
178
+ // Remove item
179
+ newItems.splice(index, 1);
180
+ }
181
+ else {
182
+ // Update item
183
+ newItems[index] = event.detail;
184
+ }
185
+ // Ensure we always have at least _id
186
+ if (newItems.length === 0) {
187
+ newItems.push({ path: '_id' });
188
+ }
189
+ this.items = newItems;
190
+ this.emitChange();
191
+ };
192
+ this.handleAddProperty = () => {
193
+ this.items = [...this.items, { path: '' }];
194
+ this.emitChange();
195
+ };
196
+ }
197
+ componentWillLoad() {
198
+ var _a;
199
+ if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.object) {
200
+ const converted = propertySelectionToItems(this.value.object);
201
+ if (converted.length > 0) {
202
+ this.items = converted;
203
+ }
204
+ }
205
+ }
206
+ componentWillUpdate() {
207
+ var _a;
208
+ if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.object) {
209
+ const currentItems = propertySelectionToItems(this.value.object);
210
+ // Check if items have changed
211
+ const itemsChanged = currentItems.length !== this.items.length ||
212
+ !currentItems.every((item, index) => {
213
+ const current = this.items[index];
214
+ return (current &&
215
+ item.path === current.path &&
216
+ item.alias === current.alias &&
217
+ item.description === current.description);
218
+ });
219
+ if (itemsChanged) {
220
+ this.items =
221
+ currentItems.length > 0 ? currentItems : [{ path: '_id' }];
222
+ }
223
+ }
224
+ }
225
+ render() {
226
+ if (!this.limetype) {
227
+ return (h("div", { class: "empty-state" }, h("p", null, "Select a limetype to choose properties")));
228
+ }
229
+ return (h("div", { class: "response-format-editor" }, h("div", { class: "header" }, h("h4", null, this.label)), h("div", { class: "property-list" }, this.items.map((item, index) => this.renderItem(item, index))), h("div", { class: "actions" }, h("limel-button", { label: "Add Property", icon: "plus_math", onClick: this.handleAddProperty })), h("div", { class: "summary" }, h("span", { class: "count" }, this.items.length, ' ', this.items.length === 1 ? 'property' : 'properties', ' ', "selected"))));
230
+ }
231
+ renderItem(item, index) {
232
+ return (h("limebb-lime-query-response-format-item", { key: `${item.path}-${index}`, class: "property-item", platform: this.platform, context: this.context, limetype: this.limetype, item: item, onItemChange: this.handleItemChange(index) }));
233
+ }
234
+ emitChange() {
235
+ const propertySelection = itemsToPropertySelection(this.items);
236
+ const responseFormat = {
237
+ object: propertySelection,
238
+ };
239
+ this.change.emit(responseFormat);
240
+ }
241
+ };
242
+ ResponseFormatEditor.style = LimebbLimeQueryResponseFormatEditorStyle0;
243
+
244
+ const responseFormatItemCss = ":host(limebb-lime-query-response-format-item){display:flex;flex-direction:column;gap:0.5rem;width:100%}.property-controls{display:flex;flex-direction:row;align-items:flex-start;gap:0.5rem;width:100%}.property-path{flex-grow:1;min-width:min(20rem, 100%)}.control-buttons{flex-shrink:0;display:flex;flex-direction:row;gap:0.25rem;align-items:center;padding-top:0.5rem}.control-buttons limel-icon-button{opacity:0.6;transition:opacity 0.2s ease}.control-buttons limel-icon-button:hover{opacity:1}.control-buttons limel-icon-button.has-value{opacity:1;color:rgb(var(--color-blue-default))}.alias,.description{padding-left:1.5rem;width:calc(100% - 1.5rem);max-width:40rem}@media (max-width: 768px){.property-controls{flex-direction:column;gap:0.5rem}.control-buttons{padding-top:0}.alias,.description{padding-left:0;width:100%}}";
245
+ const LimebbLimeQueryResponseFormatItemStyle0 = responseFormatItemCss;
246
+
247
+ const ResponseFormatItem = class {
248
+ constructor(hostRef) {
249
+ registerInstance(this, hostRef);
250
+ this.itemChange = createEvent(this, "itemChange", 7);
251
+ this.showAliasInput = false;
252
+ this.showDescriptionInput = false;
253
+ this.handlePathChange = (event) => {
254
+ event.stopPropagation();
255
+ this.itemChange.emit(Object.assign(Object.assign({}, this.item), { path: event.detail }));
256
+ };
257
+ this.toggleAliasInput = () => {
258
+ this.showAliasInput = !this.showAliasInput;
259
+ };
260
+ this.toggleDescriptionInput = () => {
261
+ this.showDescriptionInput = !this.showDescriptionInput;
262
+ };
263
+ this.handleAliasChange = (event) => {
264
+ event.stopPropagation();
265
+ const alias = event.detail;
266
+ this.itemChange.emit(Object.assign(Object.assign({}, this.item), { alias: alias || undefined }));
267
+ };
268
+ this.handleDescriptionChange = (event) => {
269
+ event.stopPropagation();
270
+ const description = event.detail;
271
+ this.itemChange.emit(Object.assign(Object.assign({}, this.item), { description: description || undefined }));
272
+ };
273
+ this.handleAliasBlur = () => {
274
+ if (this.item.alias) {
275
+ const trimmed = this.item.alias.trim();
276
+ if (trimmed !== this.item.alias) {
277
+ this.itemChange.emit(Object.assign(Object.assign({}, this.item), { alias: trimmed || undefined }));
278
+ }
279
+ }
280
+ };
281
+ this.handleDescriptionBlur = () => {
282
+ if (this.item.description) {
283
+ const trimmed = this.item.description.trim();
284
+ if (trimmed !== this.item.description) {
285
+ this.itemChange.emit(Object.assign(Object.assign({}, this.item), { description: trimmed || undefined }));
286
+ }
287
+ }
288
+ };
289
+ this.handleRemove = () => {
290
+ this.itemChange.emit(null);
291
+ };
292
+ }
293
+ componentWillLoad() {
294
+ // Initialize visibility based on whether fields have values
295
+ this.showAliasInput = !!this.item.alias;
296
+ this.showDescriptionInput = !!this.item.description;
297
+ }
298
+ componentWillUpdate() {
299
+ // Keep inputs visible if they have values
300
+ if (this.item.alias && !this.showAliasInput) {
301
+ this.showAliasInput = true;
302
+ }
303
+ if (this.item.description && !this.showDescriptionInput) {
304
+ this.showDescriptionInput = true;
305
+ }
306
+ }
307
+ render() {
308
+ return [
309
+ h("div", { key: 'e804c4feb61b44aeb2f141c5b5d3269a76ac9320', class: "property-controls" }, h("div", { key: 'becbf35e823b8b16df5366c099b98ce6566d514a', class: "property-path" }, h("limebb-property-selector", { key: '2b35ccefecb9dbd4d2c418566482d9903a1c0d02', platform: this.platform, context: this.context, limetype: this.limetype, label: "Property", value: this.item.path, required: true, onChange: this.handlePathChange })), h("div", { key: '1e598bbbb6df1c5e93bd4ae5f6b112a745a68df9', class: "control-buttons" }, h("limel-icon-button", { key: 'da7ec3bf553900c96149f2d762c2d40ab97d2fbd', icon: "add_tag", label: "Add alias", class: this.item.alias ? 'has-value' : '', onClick: this.toggleAliasInput }), h("limel-icon-button", { key: '3936855dd72388fc581770f561be809b4ebc0267', icon: "comments", label: "Add description", class: this.item.description ? 'has-value' : '', onClick: this.toggleDescriptionInput }), h("limel-icon-button", { key: '221a2f7399c7c781a583bc344c273f03ae181efb', icon: "trash", label: "Remove property", onClick: this.handleRemove }))),
310
+ this.showAliasInput && (h("div", { key: 'ddd9a21a4a83a3e8fd7d41b13c293746cf5467ae', class: "alias" }, h("limel-input-field", { key: '1c2ec668aa6d864897a57f8aebaf8b60012addb5', label: "Alias", value: this.item.alias || '', placeholder: "Custom property name...", onChange: this.handleAliasChange, onBlur: this.handleAliasBlur }))),
311
+ this.showDescriptionInput && (h("div", { key: 'e989a6293fb50b760e6e7e46a650f27cd44722ba', class: "description" }, h("limel-input-field", { key: '201e61a233a14d832fe450322e782d947ff7187a', label: "Description", value: this.item.description || '', placeholder: "Describe this property for AI...", onChange: this.handleDescriptionChange, onBlur: this.handleDescriptionBlur }))),
312
+ ];
313
+ }
314
+ };
315
+ ResponseFormatItem.style = LimebbLimeQueryResponseFormatItemStyle0;
316
+
317
+ export { ResponseFormatEditor as limebb_lime_query_response_format_editor, ResponseFormatItem as limebb_lime_query_response_format_item };
@@ -9,8 +9,8 @@ const LiveDocsInfo = class {
9
9
  }
10
10
  render() {
11
11
  return [
12
- h("div", { key: '7e6645d68a1fe53d0acc1b3dee259fe184515cee', class: "header" }, h("limel-icon", { key: 'b08f3f80ea09bf9dfb30fec69db91b58f52748bc', name: "not_showing_video_frames" }), h("h2", { key: '984c39002d8dc456df904ed631472ab5c7e434f7' }, "Viewing this file type requires ", h("em", { key: 'cc3aa66537ef0ca8bb201595fba8b63f0d287730' }, "Live Docs"))),
13
- h("p", { key: '38669b0342f36b1faee7599c0fd28fcebf993351' }, h("em", { key: '7e605cc3e057a8daffe575104272e9aa2634673a' }, "Live Docs"), " not only enables you to view many file formats such as Microsoft Office documents, but it also empowers you to edit them right in the CRM. No need to download anything on your device!", h("a", { key: 'ada35e1e88af734d219f03b7d68417c95ea837a5', target: "_blank", href: "https://www.lime-technologies.com/en/lime-crm/live-docs/" }, "Learn more")),
12
+ h("div", { key: '719c7b607dc66882cb8cee2275dc670c9ad53b73', class: "header" }, h("limel-icon", { key: 'a50b72a8266bf58feba9e92a8da2061ecc4fe855', name: "not_showing_video_frames" }), h("h2", { key: 'fad26ca7f04886af8e63c4bfbcf736459ce49906' }, "Viewing this file type requires ", h("em", { key: 'f99708d544005e572f7efebe5b352017f69abdf9' }, "Live Docs"))),
13
+ h("p", { key: 'd8433cc57b251319bc2d34e115df2a1d7d617ae3' }, h("em", { key: '559862e1cb8631a3209eedd2e2354ab53ec74a96' }, "Live Docs"), " not only enables you to view many file formats such as Microsoft Office documents, but it also empowers you to edit them right in the CRM. No need to download anything on your device!", h("a", { key: '367bccba15d2b591c267870bd7610cc86fe7fb5b', target: "_blank", href: "https://www.lime-technologies.com/en/lime-crm/live-docs/" }, "Learn more")),
14
14
  ];
15
15
  }
16
16
  };
@@ -1129,7 +1129,7 @@ const LocalePicker = class {
1129
1129
  const value = this.value;
1130
1130
  selectedOptions = options.find((option) => option.value === value);
1131
1131
  }
1132
- return (h("limel-select", { key: 'f0be5c869ed7ad1a32e2c0604584f26cc5a40522', value: selectedOptions, options: sortBy$1(options, 'text'), helperText: this.helperText, label: this.label, required: this.required, disabled: this.disabled, readonly: this.readonly, onChange: this.handleChange, multiple: this.multipleChoice }));
1132
+ return (h("limel-select", { key: '59ee26c288bf08161708bf6bcc6b304ebf1b456f', value: selectedOptions, options: sortBy$1(options, 'text'), helperText: this.helperText, label: this.label, required: this.required, disabled: this.disabled, readonly: this.readonly, onChange: this.handleChange, multiple: this.multipleChoice }));
1133
1133
  }
1134
1134
  };
1135
1135
 
@@ -11,8 +11,8 @@ const MentionGroupCounter = class {
11
11
  render() {
12
12
  const label = this.getLabel();
13
13
  return [
14
- h("span", { key: 'bb868b62f71fe65927d1cd9bad6ee08648a33c73', id: this.tooltipId }, label),
15
- h("limel-tooltip", { key: '5018e97cb9d5522b91ed1c55643ad33c3d7fd51d', elementId: this.tooltipId, label: label, helperLabel: this.helperLabel }),
14
+ h("span", { key: '2ed8fb232e05342565947976d2af9f212cc82331', id: this.tooltipId }, label),
15
+ h("limel-tooltip", { key: '404fcd53eec16a0b0b32a4358125354dd148e339', elementId: this.tooltipId, label: label, helperLabel: this.helperLabel }),
16
16
  ];
17
17
  }
18
18
  getLabel() {
@@ -120,14 +120,14 @@ const SummaryPopover = class {
120
120
  top: '0.125rem',
121
121
  right: '0.125rem',
122
122
  };
123
- return (h("limel-popover", { key: '3ddac967d05644e0e3b18979a051561e08f316c4', style: {
123
+ return (h("limel-popover", { key: '0d6f2ed3dddd353ee8228b84337e2924fc652088', style: {
124
124
  '--limebb-summary-popover-timeout': `${this.triggerDelay}ms`,
125
- }, open: this.isPopoverOpen, onClose: this.onPopoverClose, openDirection: this.openDirection }, h("div", { key: '6187ae07695296c905f2d0bf782b515d15183f05', slot: "trigger", tabIndex: 0, onMouseEnter: this.openPopoverWithDelay, onMouseLeave: this.resetTimeout, onFocus: this.openPopoverWithDelay }, h("slot", { key: '2b338b6ba353104031e0ae9bb1f1380a2f528f1c', name: "trigger" }), h("div", { key: 'ccce297cd4c8a6640a81a0ec54d1b17cafd090a4', class: "opening-countdown-indicator" })), h("limel-card", { key: 'c786b96ad260240ad28b45746f7f3974efe92670', style: {
125
+ }, open: this.isPopoverOpen, onClose: this.onPopoverClose, openDirection: this.openDirection }, h("div", { key: 'f644db3e5d485ace1a2748b4000aca49f3948a35', slot: "trigger", tabIndex: 0, onMouseEnter: this.openPopoverWithDelay, onMouseLeave: this.resetTimeout, onFocus: this.openPopoverWithDelay }, h("slot", { key: '0b5836a870f32b220496c0ddc0abc35a01dc86d8', name: "trigger" }), h("div", { key: '2ffe89c63ef52df0047e6329a21c460faa628c34', class: "opening-countdown-indicator" })), h("limel-card", { key: '786fc57e1de0a6a7e62f6dd844386e9c92045539', style: {
126
126
  'max-width': this.popoverMaxWidth,
127
127
  'max-height': this.popoverMaxHeight,
128
128
  'min-width': '7rem',
129
129
  'min-height': '3rem',
130
- }, orientation: "landscape", heading: this.heading, subheading: this.subheading, icon: this.icon, value: this.value, image: this.image, actions: this.actions, onActionSelected: this.handleSelected }, h("limebb-navigation-button", { key: 'de2b607312164f264c0a344662a69754e1afb7d9', slot: "component", type: "close", style: closeButtonStyle, tooltipLabel: "Close", tooltipHelperLabel: "Esc", onClick: this.handleCloseClick }))));
130
+ }, orientation: "landscape", heading: this.heading, subheading: this.subheading, icon: this.icon, value: this.value, image: this.image, actions: this.actions, onActionSelected: this.handleSelected }, h("limebb-navigation-button", { key: '3aae488dfb00e682400e2f169f98125db9eccd01', slot: "component", type: "close", style: closeButtonStyle, tooltipLabel: "Close", tooltipHelperLabel: "Esc", onClick: this.handleCloseClick }))));
131
131
  }
132
132
  };
133
133
  SummaryPopover.currentOpenPopover = null;
@@ -56,7 +56,7 @@ const NotificationListItem = class {
56
56
  }
57
57
  render() {
58
58
  var _a, _b;
59
- return (h(Host, { key: '17b7219101660b7f6bab37072d5de5d9f212863f', id: this.item.id, class: {
59
+ return (h(Host, { key: '48b4679d731d3f42abbdd12935fef881b29f1638', id: this.item.id, class: {
60
60
  'is-clickable': this.isItemClickable(),
61
61
  'is-read': !!((_a = this.item) === null || _a === void 0 ? void 0 : _a.read),
62
62
  'is-selected': !!((_b = this.item) === null || _b === void 0 ? void 0 : _b.selected),
@@ -74,11 +74,11 @@ const PercentageVisualizer = class {
74
74
  render() {
75
75
  const normalizedValue = this.getNormalizedValue();
76
76
  const zeroPoint = this.getZeroPointPosition();
77
- return (h(Host, { key: '728bef6c27bd5879d971411f812db124c3ac53b3', class: this.getContainerClassList(), style: {
77
+ return (h(Host, { key: 'be67c53d5eb98d9f1f76dfce49242f73c1a1f1ed', class: this.getContainerClassList(), style: {
78
78
  '--limebb-percentage-visualizer-zero-point-position': `${zeroPoint}%`,
79
79
  '--limebb-percentage-visualizer-width': `${Math.abs(normalizedValue)}%`,
80
80
  '--limebb-percentage-visualizer-rotate': `${normalizedValue >= 0 ? '0deg' : '180deg'}`,
81
- } }, h("limel-notched-outline", { key: '0cf575a7e896955572000dd906d98441dec808b1', tabIndex: 0, role: "meter", "aria-valuemin": this.rangeMin, "aria-valuemax": this.rangeMax, "aria-valuenow": this.numValue, "aria-labelledby": this.labelId, "aria-describedby": this.helperTextId, label: this.label, labelId: this.labelId, invalid: this.invalid, required: this.required, hasValue: true, hasFloatingLabel: true, "aria-controls": this.helperTextId }, h("div", { key: '6dc2beefea4d1a5b0a967fd1087db3fe88c8cdf5', slot: "content" }, this.renderVisualization())), this.renderHelperLine()));
81
+ } }, h("limel-notched-outline", { key: '839756a72aaccd97a5f6f2973d5110d1e6ff2aaf', tabIndex: 0, role: "meter", "aria-valuemin": this.rangeMin, "aria-valuemax": this.rangeMax, "aria-valuenow": this.numValue, "aria-labelledby": this.labelId, "aria-describedby": this.helperTextId, label: this.label, labelId: this.labelId, invalid: this.invalid, required: this.required, hasValue: true, hasFloatingLabel: true, "aria-controls": this.helperTextId }, h("div", { key: '02d00150e43a13e1be31e90f09599c067c09cf81', slot: "content" }, this.renderVisualization())), this.renderHelperLine()));
82
82
  }
83
83
  renderVisualization() {
84
84
  if (this.reducePresence && (this.numValue === 0 || !this.hasValue())) {
@@ -1770,7 +1770,7 @@ const LimeBBTextEditor = class {
1770
1770
  }
1771
1771
  render() {
1772
1772
  return [
1773
- h("limel-text-editor", { key: '3ad4c2bac61f34439bf94b42e0aa7ccceeff9c33', 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 }),
1773
+ h("limel-text-editor", { key: 'b866f4d7a1feabc9a7f04aa9333ec93a0dbb1c60', 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 }),
1774
1774
  this.renderPicker(),
1775
1775
  ];
1776
1776
  }