@wpmoo/ui 1.0.0-rc.3 → 1.0.0-rc.4
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/ASSET_LICENSE.md +3 -1
- package/README.md +51 -123
- package/certification.json +14 -2
- package/dist/assets/css/moo-ui.css +55 -15
- package/dist/assets/css/moo-ui.min.css +3 -3
- package/dist/assets/css/moo.css +49 -15
- package/dist/assets/css/moo.min.css +3 -3
- package/dist/js/chart.js +1 -1
- package/dist/js/chart.min.js +1 -1
- package/dist/js/combobox.js +71 -18
- package/dist/js/context-menu.js +1 -1
- package/dist/js/datatable.js +1 -1
- package/dist/js/datepicker.js +1 -1
- package/dist/js/datepicker.min.js +1 -1
- package/dist/js/moo-ui.js +18950 -0
- package/dist/js/moo-ui.min.js +27 -0
- package/dist/js/sidebar.js +1 -1
- package/dist/js/slider.js +1 -1
- package/package.json +12 -4
- package/scss/_components.scss +73 -0
- package/scss/_settings.scss +8 -0
- package/scss/components/_accordion.scss +59 -0
- package/scss/components/_alert.scss +94 -0
- package/scss/components/_avatar.scss +154 -0
- package/scss/components/_badge.scss +33 -0
- package/scss/components/_breadcrumb.scss +130 -0
- package/scss/components/_button.scss +228 -0
- package/scss/components/_button_group.scss +51 -0
- package/scss/components/_card.scss +142 -0
- package/scss/components/_checkbox.scss +115 -0
- package/scss/components/_close_button.scss +59 -0
- package/scss/components/_collapsible.scss +43 -0
- package/scss/components/_combobox.scss +258 -0
- package/scss/components/_context-menu.scss +28 -0
- package/scss/components/_datatable.scss +1082 -0
- package/scss/components/_datepicker.scss +236 -0
- package/scss/components/_dialog.scss +66 -0
- package/scss/components/_dropdown.scss +202 -0
- package/scss/components/_field.scss +125 -0
- package/scss/components/_input.scss +35 -0
- package/scss/components/_input_group.scss +201 -0
- package/scss/components/_kbd.scss +10 -0
- package/scss/components/_menubar.scss +16 -0
- package/scss/components/_navigation.scss +41 -0
- package/scss/components/_pagination.scss +70 -0
- package/scss/components/_popover.scss +47 -0
- package/scss/components/_progress.scss +7 -0
- package/scss/components/_radio_group.scss +9 -0
- package/scss/components/_select.scss +7 -0
- package/scss/components/_separator.scss +15 -0
- package/scss/components/_sheet.scss +32 -0
- package/scss/components/_sidebar.scss +7 -0
- package/scss/components/_skeleton.scss +17 -0
- package/scss/components/_slider.scss +214 -0
- package/scss/components/_spinner.scss +17 -0
- package/scss/components/_switch.scss +25 -0
- package/scss/components/_table.scss +7 -0
- package/scss/components/_tabs.scss +139 -0
- package/scss/components/_textarea.scss +7 -0
- package/scss/components/_toast.scss +119 -0
- package/scss/components/_toggle_group.scss +19 -0
- package/scss/components/_tooltip.scss +83 -0
- package/scss/components/sidebar/_collapsed.scss +187 -0
- package/scss/components/sidebar/_identity.scss +72 -0
- package/scss/components/sidebar/_inset.scss +59 -0
- package/scss/components/sidebar/_layout.scss +176 -0
- package/scss/components/sidebar/_menus.scss +236 -0
- package/scss/foundations/_core_global_primitives.scss +5 -0
- package/scss/foundations/_core_state_layer.scss +25 -0
- package/scss/foundations/_focus.scss +139 -0
- package/scss/foundations/_overlay_backdrop.scss +19 -0
- package/scss/moo-core.scss +47 -0
- package/scss/moo-ui.scss +50 -0
- package/scss/settings/_bootstrap_overrides.scss +11 -0
- package/scss/settings/_component_variables.scss +479 -0
- package/scss/settings/_forms.scss +65 -0
- package/scss/settings/_palette.scss +132 -0
- package/scss/themes/_scoped_core.scss +239 -0
- package/scss/themes/_standalone_root.scss +117 -0
- package/scss/utilities/_scroll_fade.scss +193 -0
- package/scss/utilities/_scroll_fade_primitives.scss +43 -0
- package/THIRD_PARTY_NOTICES.md +0 -53
package/dist/js/chart.js
CHANGED
package/dist/js/chart.min.js
CHANGED
package/dist/js/combobox.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Moo UI combobox.js v1.0.0-rc.
|
|
2
|
+
* Moo UI combobox.js v1.0.0-rc.4 (https://ui.wpmoo.org/)
|
|
3
3
|
* Copyright 2026 WPMoo (https://wpmoo.org)
|
|
4
4
|
* Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
|
|
5
5
|
*/
|
|
@@ -162,7 +162,10 @@ export default class Combobox {
|
|
|
162
162
|
this._menu.classList.remove("show");
|
|
163
163
|
this._input.setAttribute("aria-expanded", "false");
|
|
164
164
|
this._input.removeAttribute("aria-activedescendant");
|
|
165
|
-
this._options.forEach((option) =>
|
|
165
|
+
this._options.forEach((option) => {
|
|
166
|
+
option.removeAttribute("aria-current");
|
|
167
|
+
option.classList.remove("active");
|
|
168
|
+
});
|
|
166
169
|
if (wasOpen && emit) {
|
|
167
170
|
this._trigger("hidden");
|
|
168
171
|
}
|
|
@@ -292,16 +295,35 @@ export default class Combobox {
|
|
|
292
295
|
return this._visibleOptions().find((option) => option.id === activeId) || null;
|
|
293
296
|
}
|
|
294
297
|
|
|
295
|
-
|
|
298
|
+
_selectedOption() {
|
|
299
|
+
if (this._isMultiple) {
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
return (
|
|
303
|
+
this._visibleOptions().find(
|
|
304
|
+
(option) => option.getAttribute("aria-selected") === "true"
|
|
305
|
+
) || null
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
_preferredActiveOption() {
|
|
310
|
+
return this._selectedOption() || this._visibleOptions()[0] || null;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
_activatePreferredOptionIfNeeded() {
|
|
296
314
|
if (!this._activeOption()) {
|
|
297
|
-
this._setActiveOption(this.
|
|
315
|
+
this._setActiveOption(this._preferredActiveOption());
|
|
298
316
|
}
|
|
299
317
|
}
|
|
300
318
|
|
|
301
|
-
_setActiveOption(option) {
|
|
319
|
+
_setActiveOption(option, { scroll = true } = {}) {
|
|
302
320
|
this._options.forEach((candidate) => {
|
|
303
321
|
const active = candidate === option;
|
|
304
|
-
|
|
322
|
+
if (active) {
|
|
323
|
+
candidate.setAttribute("aria-current", "true");
|
|
324
|
+
} else {
|
|
325
|
+
candidate.removeAttribute("aria-current");
|
|
326
|
+
}
|
|
305
327
|
candidate.classList.toggle("active", active);
|
|
306
328
|
});
|
|
307
329
|
if (!option) {
|
|
@@ -309,12 +331,36 @@ export default class Combobox {
|
|
|
309
331
|
return;
|
|
310
332
|
}
|
|
311
333
|
this._input.setAttribute("aria-activedescendant", option.id);
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
334
|
+
if (scroll) {
|
|
335
|
+
const optionRect = option.getBoundingClientRect();
|
|
336
|
+
const menuRect = this._menu.getBoundingClientRect();
|
|
337
|
+
if (optionRect.top < menuRect.top) {
|
|
338
|
+
this._menu.scrollTop -= menuRect.top - optionRect.top;
|
|
339
|
+
} else if (optionRect.bottom > menuRect.bottom) {
|
|
340
|
+
this._menu.scrollTop += optionRect.bottom - menuRect.bottom;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
_activateOptionFromPointer(option, event) {
|
|
346
|
+
if (
|
|
347
|
+
event.pointerType === "touch" ||
|
|
348
|
+
option.disabled ||
|
|
349
|
+
option.getAttribute("aria-disabled") === "true" ||
|
|
350
|
+
option === this._activeOption()
|
|
351
|
+
) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
this._setActiveOption(option, { scroll: false });
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
_restoreSelectedActiveOption() {
|
|
358
|
+
if (!this._menu.classList.contains("show")) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
const selected = this._selectedOption();
|
|
362
|
+
if (selected) {
|
|
363
|
+
this._setActiveOption(selected, { scroll: false });
|
|
318
364
|
}
|
|
319
365
|
}
|
|
320
366
|
|
|
@@ -346,7 +392,7 @@ export default class Combobox {
|
|
|
346
392
|
this._emitChange();
|
|
347
393
|
}
|
|
348
394
|
|
|
349
|
-
_filterOptions({ open = true, activate = true } = {}) {
|
|
395
|
+
_filterOptions({ open = true, activate = true, resetActive = false } = {}) {
|
|
350
396
|
if (open) {
|
|
351
397
|
this._openMenu();
|
|
352
398
|
}
|
|
@@ -360,8 +406,11 @@ export default class Combobox {
|
|
|
360
406
|
this._syncGroupVisibility();
|
|
361
407
|
this._empty.hidden = count !== 0;
|
|
362
408
|
this._liveRegion.textContent = count === 0 ? "No results" : `${count} result${count === 1 ? "" : "s"}`;
|
|
409
|
+
if (resetActive) {
|
|
410
|
+
this._setActiveOption(null, { scroll: false });
|
|
411
|
+
}
|
|
363
412
|
if (activate) {
|
|
364
|
-
this.
|
|
413
|
+
this._activatePreferredOptionIfNeeded();
|
|
365
414
|
}
|
|
366
415
|
}
|
|
367
416
|
|
|
@@ -371,13 +420,13 @@ export default class Combobox {
|
|
|
371
420
|
if (!this._isMultiple && this._input.dataset.comboboxSelected === "true") {
|
|
372
421
|
this._input.select();
|
|
373
422
|
}
|
|
374
|
-
this.
|
|
423
|
+
this._activatePreferredOptionIfNeeded();
|
|
375
424
|
});
|
|
376
425
|
this._listen(this._input, "input", () => {
|
|
377
426
|
if (!this._isMultiple) {
|
|
378
427
|
this._clearSelection();
|
|
379
428
|
}
|
|
380
|
-
this._filterOptions();
|
|
429
|
+
this._filterOptions({ resetActive: true });
|
|
381
430
|
});
|
|
382
431
|
this._listen(this._input, "blur", (event) => {
|
|
383
432
|
const nextTarget = event.relatedTarget;
|
|
@@ -388,11 +437,14 @@ export default class Combobox {
|
|
|
388
437
|
});
|
|
389
438
|
this._listen(this._input, "click", () => {
|
|
390
439
|
this._openMenu();
|
|
391
|
-
this._setActiveOption(this.
|
|
440
|
+
this._setActiveOption(this._preferredActiveOption());
|
|
392
441
|
});
|
|
393
442
|
this._listen(this._input, "keydown", (event) => this._handleKeydown(event));
|
|
394
443
|
this._options.forEach((option) => {
|
|
395
444
|
this._listen(option, "keydown", (event) => this._handleKeydown(event));
|
|
445
|
+
this._listen(option, "pointerenter", (event) => {
|
|
446
|
+
this._activateOptionFromPointer(option, event);
|
|
447
|
+
});
|
|
396
448
|
this._listen(option, "click", () => {
|
|
397
449
|
this._chooseOption(option);
|
|
398
450
|
if (this._isMultiple) {
|
|
@@ -407,8 +459,9 @@ export default class Combobox {
|
|
|
407
459
|
this._clearSelection();
|
|
408
460
|
this._input.value = "";
|
|
409
461
|
this._input.focus();
|
|
410
|
-
this._filterOptions();
|
|
462
|
+
this._filterOptions({ resetActive: true });
|
|
411
463
|
});
|
|
464
|
+
this._listen(this._menu, "pointerleave", () => this._restoreSelectedActiveOption());
|
|
412
465
|
this._listen(this._element, "click", (event) => this._handleRootClick(event));
|
|
413
466
|
this._listen(this._document, "click", (event) => {
|
|
414
467
|
if (event.target instanceof this._window.Node && !this._element.contains(event.target)) {
|
package/dist/js/context-menu.js
CHANGED
package/dist/js/datatable.js
CHANGED
package/dist/js/datepicker.js
CHANGED