@stnd/ui 0.5.0 → 0.5.2
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/Accordion.astro +10 -8
- package/AccordionItem.astro +10 -7
- package/Alert.svelte +14 -10
- package/AlertDialog.svelte +16 -9
- package/CHANGELOG.md +12 -0
- package/CfImage.astro +19 -13
- package/Combobox.svelte +17 -11
- package/ContextMenu.svelte +73 -88
- package/ContextMenuItem.svelte +7 -1
- package/ContextMenuItemCheckbox.svelte +6 -0
- package/ContextMenuLabel.svelte +6 -0
- package/ContextMenuSeparator.svelte +7 -0
- package/Dialog.svelte +60 -0
- package/DialogManager.svelte +12 -0
- package/Dropdown.svelte +46 -11
- package/DropdownItem.svelte +7 -1
- package/DropdownLabel.svelte +8 -0
- package/DropdownSeparator.svelte +7 -0
- package/LauncherHint.astro +7 -3
- package/Pagination.astro +9 -10
- package/Panel.svelte +2 -2
- package/Popover.svelte +83 -0
- package/README.md +45 -4
- package/Scroller.astro +6 -3
- package/Scroller.svelte +6 -0
- package/TableOfContents.astro +33 -16
- package/Toast.astro +21 -17
- package/menu.css +12 -0
- package/menu.js +33 -0
- package/menu.test.js +44 -0
- package/package.json +7 -5
package/menu.test.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { clampMenuPosition, menuItems, navigateMenu } from "./menu.js";
|
|
4
|
+
|
|
5
|
+
test("context menus fit the viewport, including oversized content", () => {
|
|
6
|
+
assert.deepEqual(clampMenuPosition(980, 740, 220, 500, 1000, 768), { x: 772, y: 260 });
|
|
7
|
+
assert.deepEqual(clampMenuPosition(-10, -5, 1200, 900, 1000, 768), { x: 8, y: 8 });
|
|
8
|
+
assert.deepEqual(clampMenuPosition(30, 40, 100, 100, 1000, 768), { x: 30, y: 40 });
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test("keyboard navigation skips disabled items, wraps, and consumes Escape", () => {
|
|
12
|
+
const doc = { activeElement: null };
|
|
13
|
+
const item = (disabled = false) => ({
|
|
14
|
+
disabled, getAttribute: () => null, focus() { doc.activeElement = this; },
|
|
15
|
+
});
|
|
16
|
+
const first = item(), disabled = item(true), last = item();
|
|
17
|
+
const element = { ownerDocument: doc, querySelectorAll: () => [first, disabled, last] };
|
|
18
|
+
assert.deepEqual(menuItems(element), [first, last]);
|
|
19
|
+
let closed = 0;
|
|
20
|
+
function press(key) {
|
|
21
|
+
const event = { key, stopped: false, prevented: false,
|
|
22
|
+
stopPropagation() { this.stopped = true; }, preventDefault() { this.prevented = true; } };
|
|
23
|
+
navigateMenu(event, element, () => closed++);
|
|
24
|
+
assert.equal(event.stopped, true);
|
|
25
|
+
return event;
|
|
26
|
+
}
|
|
27
|
+
press("ArrowDown");
|
|
28
|
+
assert.equal(doc.activeElement, first);
|
|
29
|
+
press("ArrowUp");
|
|
30
|
+
assert.equal(doc.activeElement, last);
|
|
31
|
+
press("Home");
|
|
32
|
+
assert.equal(doc.activeElement, first);
|
|
33
|
+
press("End");
|
|
34
|
+
assert.equal(doc.activeElement, last);
|
|
35
|
+
assert.equal(press("Escape").prevented, true);
|
|
36
|
+
assert.equal(closed, 1);
|
|
37
|
+
assert.equal(press("Tab").prevented, false);
|
|
38
|
+
assert.equal(closed, 2);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("empty menus still dismiss safely", () => {
|
|
42
|
+
const element = { ownerDocument: { activeElement: null }, querySelectorAll: () => [] };
|
|
43
|
+
assert.doesNotThrow(() => navigateMenu({ key: "ArrowDown", preventDefault() {}, stopPropagation() {} }, element, () => {}));
|
|
44
|
+
});
|
package/package.json
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stnd/ui",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"svelte": "./Combobox.svelte",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./transitions.js": "./transitions.js",
|
|
8
|
+
"./*.js": "./*.js",
|
|
9
|
+
"./*.css": "./*.css",
|
|
8
10
|
"./ui/*.astro": "./ui/*.astro",
|
|
9
11
|
"./ui/*.svelte": "./ui/*.svelte",
|
|
10
12
|
"./ui/*": {
|
|
@@ -27,9 +29,9 @@
|
|
|
27
29
|
"access": "public"
|
|
28
30
|
},
|
|
29
31
|
"dependencies": {
|
|
30
|
-
"wrangler": "^4.
|
|
31
|
-
"@stnd/icon": "0.2.
|
|
32
|
-
"@stnd/store": "0.5.
|
|
33
|
-
"@stnd/utils": "0.5.
|
|
32
|
+
"wrangler": "^4.129.0",
|
|
33
|
+
"@stnd/icon": "0.2.1",
|
|
34
|
+
"@stnd/store": "0.5.1",
|
|
35
|
+
"@stnd/utils": "0.5.1"
|
|
34
36
|
}
|
|
35
37
|
}
|