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