@superleapai/flow-ui 2.5.16 → 2.5.17
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.
- package/components/enum-multiselect.js +2 -2
- package/components/enum-select.js +2 -2
- package/components/multiselect.js +3 -3
- package/components/popover.js +60 -27
- package/components/record-multiselect.js +2 -2
- package/components/record-select.js +2 -2
- package/components/select.js +2 -2
- package/dist/output.css +1 -1
- package/dist/superleap-flow.min.js +2 -2
- package/package.json +1 -1
|
@@ -258,7 +258,7 @@
|
|
|
258
258
|
var content = document.createElement("div");
|
|
259
259
|
content.setAttribute("role", "listbox");
|
|
260
260
|
content.setAttribute("aria-multiselectable", "true");
|
|
261
|
-
content.className = "w-full min-w-[200px] max-h-[
|
|
261
|
+
content.className = "w-full min-w-[200px] max-h-[30vh] overflow-hidden flex flex-col";
|
|
262
262
|
|
|
263
263
|
// Search input (using InputComponent like enum-select)
|
|
264
264
|
var searchContainer = document.createElement("div");
|
|
@@ -319,7 +319,7 @@
|
|
|
319
319
|
// Options list
|
|
320
320
|
var optionsList = document.createElement("div");
|
|
321
321
|
optionsList.className =
|
|
322
|
-
"overflow-y-auto max-h-[
|
|
322
|
+
"overflow-y-auto max-h-[30vh] p-2 w-full rounded-4 bg-fill-quarternary-fill-white flex-1 min-h-0";
|
|
323
323
|
|
|
324
324
|
content.appendChild(searchContainer);
|
|
325
325
|
content.appendChild(optionsList);
|
|
@@ -231,7 +231,7 @@
|
|
|
231
231
|
// Create dropdown content
|
|
232
232
|
var content = document.createElement("div");
|
|
233
233
|
content.setAttribute("role", "listbox");
|
|
234
|
-
content.className = "w-full min-w-[200px] max-h-[
|
|
234
|
+
content.className = "w-full min-w-[200px] max-h-[30vh] overflow-hidden flex flex-col";
|
|
235
235
|
|
|
236
236
|
// Search input (using InputComponent like phone-input)
|
|
237
237
|
var searchContainer = document.createElement("div");
|
|
@@ -292,7 +292,7 @@
|
|
|
292
292
|
// Options list
|
|
293
293
|
var optionsList = document.createElement("div");
|
|
294
294
|
optionsList.className =
|
|
295
|
-
"overflow-y-auto max-h-[
|
|
295
|
+
"overflow-y-auto max-h-[30vh] p-2 w-full rounded-4 bg-fill-quarternary-fill-white flex-1 min-h-0";
|
|
296
296
|
|
|
297
297
|
content.appendChild(searchContainer);
|
|
298
298
|
content.appendChild(optionsList);
|
|
@@ -154,11 +154,11 @@
|
|
|
154
154
|
var content = document.createElement("div");
|
|
155
155
|
content.setAttribute("role", "listbox");
|
|
156
156
|
content.setAttribute("aria-multiselectable", "true");
|
|
157
|
-
content.className = "custom-multiselect-content w-full max-h-[
|
|
157
|
+
content.className = "custom-multiselect-content w-full max-h-[30vh] overflow-hidden flex flex-col";
|
|
158
158
|
|
|
159
159
|
var optionsList = document.createElement("div");
|
|
160
160
|
optionsList.className =
|
|
161
|
-
"overflow-y-auto max-h-[
|
|
161
|
+
"overflow-y-auto max-h-[30vh] p-2 w-full rounded-4 bg-fill-quarternary-fill-white";
|
|
162
162
|
|
|
163
163
|
function isSelected(optionValue) {
|
|
164
164
|
return values.some(function (v) {
|
|
@@ -263,7 +263,7 @@
|
|
|
263
263
|
align: "start",
|
|
264
264
|
closeOnClickOutside: true,
|
|
265
265
|
bodyClassName: "p-0 overflow-hidden",
|
|
266
|
-
panelClassName: "min-w-[var(--trigger-width)] max-h-[
|
|
266
|
+
panelClassName: "min-w-[var(--trigger-width)] max-h-[30vh] overflow-hidden",
|
|
267
267
|
onOpen: function () {
|
|
268
268
|
if (disabled) {
|
|
269
269
|
popover.hide();
|
package/components/popover.js
CHANGED
|
@@ -143,6 +143,8 @@
|
|
|
143
143
|
const triggerRect = triggerEl.getBoundingClientRect();
|
|
144
144
|
const panelRect = panel.getBoundingClientRect();
|
|
145
145
|
const gap = 8;
|
|
146
|
+
const topGap = 24;
|
|
147
|
+
const viewportPadding = 8;
|
|
146
148
|
const viewportHeight =
|
|
147
149
|
window.innerHeight || document.documentElement.clientHeight;
|
|
148
150
|
const viewportWidth =
|
|
@@ -152,32 +154,52 @@
|
|
|
152
154
|
const spaceRight = viewportWidth - triggerRect.right;
|
|
153
155
|
const spaceLeft = triggerRect.left;
|
|
154
156
|
|
|
155
|
-
//
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
placement === "bottom"
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
spaceRight
|
|
179
|
-
|
|
180
|
-
|
|
157
|
+
// Normalize placement and resolve to the best side when space is constrained.
|
|
158
|
+
const normalizedPlacement =
|
|
159
|
+
placement === "top" ||
|
|
160
|
+
placement === "bottom" ||
|
|
161
|
+
placement === "left" ||
|
|
162
|
+
placement === "right"
|
|
163
|
+
? placement
|
|
164
|
+
: "bottom";
|
|
165
|
+
const oppositeBySide = {
|
|
166
|
+
bottom: "top",
|
|
167
|
+
top: "bottom",
|
|
168
|
+
right: "left",
|
|
169
|
+
left: "right",
|
|
170
|
+
};
|
|
171
|
+
const requiredSpaceBySide = {
|
|
172
|
+
bottom: panelRect.height + gap,
|
|
173
|
+
top: panelRect.height + topGap,
|
|
174
|
+
right: panelRect.width + gap,
|
|
175
|
+
left: panelRect.width + gap,
|
|
176
|
+
};
|
|
177
|
+
const availableSpaceBySide = {
|
|
178
|
+
bottom: spaceBelow,
|
|
179
|
+
top: spaceAbove,
|
|
180
|
+
right: spaceRight,
|
|
181
|
+
left: spaceLeft,
|
|
182
|
+
};
|
|
183
|
+
const oppositePlacement = oppositeBySide[normalizedPlacement];
|
|
184
|
+
const preferredFits =
|
|
185
|
+
availableSpaceBySide[normalizedPlacement] >=
|
|
186
|
+
requiredSpaceBySide[normalizedPlacement];
|
|
187
|
+
const oppositeFits =
|
|
188
|
+
availableSpaceBySide[oppositePlacement] >=
|
|
189
|
+
requiredSpaceBySide[oppositePlacement];
|
|
190
|
+
|
|
191
|
+
let effectivePlacement = normalizedPlacement;
|
|
192
|
+
if (!preferredFits) {
|
|
193
|
+
if (oppositeFits) {
|
|
194
|
+
effectivePlacement = oppositePlacement;
|
|
195
|
+
} else {
|
|
196
|
+
// Neither side fully fits: use the side with more available room.
|
|
197
|
+
effectivePlacement =
|
|
198
|
+
availableSpaceBySide[normalizedPlacement] >=
|
|
199
|
+
availableSpaceBySide[oppositePlacement]
|
|
200
|
+
? normalizedPlacement
|
|
201
|
+
: oppositePlacement;
|
|
202
|
+
}
|
|
181
203
|
}
|
|
182
204
|
|
|
183
205
|
panel.setAttribute("data-side", effectivePlacement);
|
|
@@ -209,7 +231,6 @@
|
|
|
209
231
|
break;
|
|
210
232
|
case "top": {
|
|
211
233
|
// Larger gap when above the trigger so the popover doesn't overlap it.
|
|
212
|
-
const topGap = 24;
|
|
213
234
|
top = triggerRect.top - panelRect.height - topGap;
|
|
214
235
|
left = triggerRect.left + alignLeft;
|
|
215
236
|
// Cap panel height so when content loads/tall it doesn't grow downward into the trigger.
|
|
@@ -232,6 +253,18 @@
|
|
|
232
253
|
left = triggerRect.left + alignLeft;
|
|
233
254
|
}
|
|
234
255
|
|
|
256
|
+
// Keep popover within viewport on the non-placement axis.
|
|
257
|
+
const minTop = viewportPadding;
|
|
258
|
+
const maxTop = viewportHeight - panelRect.height - viewportPadding;
|
|
259
|
+
if (maxTop >= minTop) {
|
|
260
|
+
top = Math.min(Math.max(top, minTop), maxTop);
|
|
261
|
+
}
|
|
262
|
+
const minLeft = viewportPadding;
|
|
263
|
+
const maxLeft = viewportWidth - panelRect.width - viewportPadding;
|
|
264
|
+
if (maxLeft >= minLeft) {
|
|
265
|
+
left = Math.min(Math.max(left, minLeft), maxLeft);
|
|
266
|
+
}
|
|
267
|
+
|
|
235
268
|
wrapper.style.transform = "";
|
|
236
269
|
wrapper.style.top = top + "px";
|
|
237
270
|
wrapper.style.left = left + "px";
|
|
@@ -318,7 +318,7 @@
|
|
|
318
318
|
var content = document.createElement("div");
|
|
319
319
|
content.setAttribute("role", "listbox");
|
|
320
320
|
content.setAttribute("aria-multiselectable", "true");
|
|
321
|
-
content.className = "record-multiselect-content max-h-[
|
|
321
|
+
content.className = "record-multiselect-content max-h-[30vh] overflow-hidden flex flex-col";
|
|
322
322
|
|
|
323
323
|
var searchWrap = document.createElement("div");
|
|
324
324
|
searchWrap.className = "p-8 pb-4 border-b-1/2 border-border-primary ";
|
|
@@ -368,7 +368,7 @@
|
|
|
368
368
|
content.appendChild(searchWrap);
|
|
369
369
|
|
|
370
370
|
var optionsList = document.createElement("div");
|
|
371
|
-
optionsList.className = "overflow-y-auto max-h-[
|
|
371
|
+
optionsList.className = "overflow-y-auto max-h-[30vh] p-2 w-full rounded-4 bg-fill-quarternary-fill-white record-multiselect-options";
|
|
372
372
|
|
|
373
373
|
var loadMoreSentinel = null;
|
|
374
374
|
var loadMoreObserver =
|
|
@@ -315,7 +315,7 @@
|
|
|
315
315
|
content.setAttribute("role", "listbox");
|
|
316
316
|
content.setAttribute("data-field-id", fieldId);
|
|
317
317
|
content.className =
|
|
318
|
-
"record-select-content max-h-[
|
|
318
|
+
"record-select-content max-h-[30vh] overflow-hidden flex flex-col";
|
|
319
319
|
|
|
320
320
|
var searchWrap = document.createElement("div");
|
|
321
321
|
searchWrap.className = "py-8 border-b-1/2 border-border-primary";
|
|
@@ -366,7 +366,7 @@
|
|
|
366
366
|
|
|
367
367
|
var optionsList = document.createElement("div");
|
|
368
368
|
optionsList.className =
|
|
369
|
-
"overflow-y-auto max-h-[
|
|
369
|
+
"overflow-y-auto max-h-[30vh] p-2 w-full rounded-4 bg-fill-quarternary-fill-white record-select-options";
|
|
370
370
|
|
|
371
371
|
var loadMoreSentinel = null;
|
|
372
372
|
var loadMoreObserver =
|
package/components/select.js
CHANGED
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
var onClear = config.onClear;
|
|
87
87
|
var popoverWrapperClassName = config.popoverWrapperClassName || "";
|
|
88
88
|
var onOpenCallback = config.onOpenCallback || null;
|
|
89
|
-
var dropdownMaxHeightVh = config.dropdownMaxHeightVh != null ? config.dropdownMaxHeightVh :
|
|
89
|
+
var dropdownMaxHeightVh = config.dropdownMaxHeightVh != null ? config.dropdownMaxHeightVh : 30;
|
|
90
90
|
|
|
91
91
|
var disabled = config.disabled === true;
|
|
92
92
|
var value =
|
|
@@ -261,7 +261,7 @@
|
|
|
261
261
|
align: "start",
|
|
262
262
|
closeOnClickOutside: true,
|
|
263
263
|
bodyClassName: "p-0 overflow-hidden",
|
|
264
|
-
panelClassName: "min-w-[var(--trigger-width)] max-h-[
|
|
264
|
+
panelClassName: "min-w-[var(--trigger-width)] max-h-[30vh] overflow-hidden",
|
|
265
265
|
wrapperClassName: popoverWrapperClassName,
|
|
266
266
|
onOpen: function () {
|
|
267
267
|
if (disabled) {
|