@oscarpalmer/oui 0.39.0 → 0.41.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.
- package/README.md +1 -1
- package/dist/css/color-picker.css +80 -69
- package/dist/css/listbox.css +169 -0
- package/dist/js/color-picker/color-picker.constants.d.mts +2 -0
- package/dist/js/color-picker/{constants.color-picker.mjs → color-picker.constants.mjs} +7 -4
- package/dist/js/color-picker/{dom.color-picker.d.mts → color-picker.dom.d.mts} +2 -2
- package/dist/js/color-picker/{dom.color-picker.mjs → color-picker.dom.mjs} +33 -16
- package/dist/js/color-picker/{event.color-picker.d.mts → color-picker.event.d.mts} +3 -3
- package/dist/js/color-picker/color-picker.event.mjs +233 -0
- package/dist/js/color-picker/{form.color-picker.d.mts → color-picker.form.d.mts} +2 -2
- package/dist/js/color-picker/{form.color-picker.mjs → color-picker.form.mjs} +9 -8
- package/dist/js/color-picker/color-picker.misc.d.mts +2 -0
- package/dist/js/color-picker/color-picker.misc.mjs +104 -0
- package/dist/js/color-picker/color-picker.model.d.mts +2 -0
- package/dist/js/color-picker/{models.color-picker.mjs → color-picker.model.mjs} +1 -1
- package/dist/js/color-picker/{output.color-picker.d.mts → color-picker.output.d.mts} +2 -2
- package/dist/js/color-picker/{output.color-picker.mjs → color-picker.output.mjs} +19 -18
- package/dist/js/color-picker/color-picker.state.d.mts +8 -0
- package/dist/js/color-picker/color-picker.state.mjs +168 -0
- package/dist/js/color-picker/index.d.mts +172 -2
- package/dist/js/color-picker/index.mjs +66 -59
- package/dist/js/color-picker.constants-BZgXQr5o.d.mts +177 -0
- package/dist/js/color-picker.misc-BIS3R6jk.d.mts +31 -0
- package/dist/js/combobox/combobox.constants.d.mts +2 -0
- package/dist/js/combobox/{constants.combobox.mjs → combobox.constants.mjs} +21 -21
- package/dist/js/combobox/combobox.dom.d.mts +25 -0
- package/dist/js/combobox/{dom.combobox.mjs → combobox.dom.mjs} +51 -49
- package/dist/js/combobox/{event.combobox.d.mts → combobox.event.d.mts} +9 -9
- package/dist/js/combobox/{event.combobox.mjs → combobox.event.mjs} +1 -1
- package/dist/js/combobox/combobox.misc.d.mts +2 -0
- package/dist/js/combobox/combobox.misc.mjs +2 -0
- package/dist/js/combobox/combobox.model.d.mts +2 -0
- package/dist/js/combobox/combobox.state.d.mts +9 -0
- package/dist/js/combobox/combobox.state.mjs +2 -0
- package/dist/js/combobox/index.d.mts +152 -2
- package/dist/js/combobox/index.mjs +54 -55
- package/dist/js/combobox.constants-Hb3bqqQJ.d.mts +19 -0
- package/dist/js/combobox.misc-DRDFk6X8.d.mts +26 -0
- package/dist/js/combobox.model-gjEI2VqZ.d.mts +46 -0
- package/dist/js/{state.combobox-BWDFHwoi.mjs → combobox.state-AstCICiH.mjs} +109 -106
- package/dist/js/dialog/dialog.model.d.mts +2 -0
- package/dist/js/dialog/dialog.model.mjs +11 -0
- package/dist/js/dialog/index.d.mts +12 -0
- package/dist/js/dialog/index.mjs +123 -0
- package/dist/js/dialog.model-HVzYWoDo.d.mts +45 -0
- package/dist/js/floatable/floatable.embedded.d.mts +2 -2
- package/dist/js/floatable/floatable.embedded.mjs +64 -92
- package/dist/js/floatable/floatable.model.d.mts +2 -0
- package/dist/js/floatable/floatable.model.mjs +23 -0
- package/dist/js/floatable/floatable.standalone.d.mts +2 -1
- package/dist/js/floatable.embedded-ncshL3Sa.d.mts +17 -0
- package/dist/js/{floatable.embedded-DQYkXt8X.d.mts → floatable.model-DXsQgoU7.d.mts} +13 -20
- package/dist/js/focus-trap/focus-trap.embedded.d.mts +2 -2
- package/dist/js/focus-trap/focus-trap.embedded.mjs +117 -138
- package/dist/js/focus-trap/focus-trap.model.d.mts +2 -0
- package/dist/js/focus-trap/focus-trap.model.mjs +15 -0
- package/dist/js/focus-trap/focus-trap.standalone.d.mts +2 -1
- package/dist/js/focus-trap.embedded-DpcPkP7c.d.mts +13 -0
- package/dist/js/{focus-trap.embedded-CjyFQYow.d.mts → focus-trap.model-CpltX5B5.d.mts} +16 -18
- package/dist/js/index.d.mts +26 -14
- package/dist/js/index.mjs +18 -17
- package/dist/js/internal/attributable.d.mts +1 -1
- package/dist/js/internal/attributable.mjs +3 -2
- package/dist/js/internal/draggable/draggable.model.d.mts +2 -0
- package/dist/js/internal/draggable/draggable.model.mjs +37 -0
- package/dist/js/internal/draggable/index.d.mts +13 -0
- package/dist/js/internal/draggable/index.mjs +243 -0
- package/dist/js/internal/l10n/index.d.mts +5 -0
- package/dist/js/internal/l10n/index.mjs +147 -0
- package/dist/js/internal/l10n/l10n.model.d.mts +2 -0
- package/dist/js/internal/l10n/l10n.model.mjs +12 -0
- package/dist/js/internal/misc.d.mts +3 -2
- package/dist/js/internal/misc.mjs +4 -6
- package/dist/js/internal/navigable/index.d.mts +6 -0
- package/dist/js/internal/navigable/index.mjs +125 -0
- package/dist/js/internal/navigable/navigable.model.d.mts +2 -0
- package/dist/js/internal/navigable/navigable.model.mjs +18 -0
- package/dist/js/internal/option-list/option-list.constants.d.mts +8 -0
- package/dist/js/internal/option-list/option-list.constants.mjs +22 -0
- package/dist/js/internal/option-list/option-list.data.d.mts +21 -0
- package/dist/js/internal/option-list/option-list.data.mjs +2 -0
- package/dist/js/internal/option-list/option-list.dom.d.mts +18 -0
- package/dist/js/internal/option-list/option-list.dom.mjs +2 -0
- package/dist/js/internal/option-list/option-list.event.d.mts +6 -0
- package/dist/js/internal/option-list/option-list.event.mjs +66 -0
- package/dist/js/internal/option-list/option-list.form.d.mts +7 -0
- package/dist/js/internal/option-list/option-list.form.mjs +53 -0
- package/dist/js/internal/option-list/option-list.misc.d.mts +13 -0
- package/dist/js/internal/option-list/option-list.misc.mjs +2 -0
- package/dist/js/internal/option-list/option-list.model.d.mts +2 -0
- package/dist/js/internal/option-list/option-list.state.d.mts +8 -0
- package/dist/js/internal/option-list/option-list.state.mjs +39 -0
- package/dist/js/l10n/index.d.mts +3 -0
- package/dist/js/l10n/index.mjs +2 -0
- package/dist/js/l10n.model-D1E1u35L.d.mts +54 -0
- package/dist/js/listbox/index.d.mts +9 -18
- package/dist/js/listbox/index.mjs +49 -52
- package/dist/js/listbox/listbox.constants.d.mts +2 -0
- package/dist/js/listbox/{constants.listbox.mjs → listbox.constants.mjs} +11 -15
- package/dist/js/listbox/listbox.dom.d.mts +5 -0
- package/dist/js/listbox/listbox.dom.mjs +2 -0
- package/dist/js/listbox/listbox.event.d.mts +9 -0
- package/dist/js/listbox/listbox.event.mjs +2 -0
- package/dist/js/listbox/listbox.misc.d.mts +2 -0
- package/dist/js/listbox/listbox.misc.mjs +2 -0
- package/dist/js/listbox/listbox.model.d.mts +2 -0
- package/dist/js/listbox/listbox.model.mjs +1 -0
- package/dist/js/listbox/listbox.state.d.mts +9 -0
- package/dist/js/listbox/listbox.state.mjs +2 -0
- package/dist/js/listbox.constants-DOBMwKup.d.mts +9 -0
- package/dist/js/listbox.misc-DwfB4Mu_.d.mts +24 -0
- package/dist/js/listbox.model-C0MYWXZe.d.mts +20 -0
- package/dist/js/listbox.state-BrN296BM.mjs +240 -0
- package/dist/js/menu/index.mjs +171 -0
- package/dist/js/menu/menu.model.d.mts +33 -0
- package/dist/js/menu/menu.model.mjs +15 -0
- package/dist/js/movable/movable.embedded.d.mts +2 -2
- package/dist/js/movable/movable.embedded.mjs +77 -86
- package/dist/js/movable/movable.model.d.mts +2 -0
- package/dist/js/movable/movable.model.mjs +12 -0
- package/dist/js/movable/movable.standalone.d.mts +2 -1
- package/dist/js/movable.embedded-C1bDTLGs.d.mts +11 -0
- package/dist/js/movable.model-D9nnPWKk.d.mts +186 -0
- package/dist/js/navigable.model-BqoR6iBv.d.mts +44 -0
- package/dist/js/option-list.data-CgMyUwPc.mjs +441 -0
- package/dist/js/option-list.model-CCPUlPeX.d.mts +169 -0
- package/dist/js/popover/index.d.mts +12 -0
- package/dist/js/{popover.mjs → popover/index.mjs} +41 -51
- package/dist/js/popover/popover.model.d.mts +2 -0
- package/dist/js/popover/popover.model.mjs +12 -0
- package/dist/js/popover.model-DiLdz0Hc.d.mts +38 -0
- package/dist/js/resizable/resizable.embedded.d.mts +2 -2
- package/dist/js/resizable/resizable.embedded.mjs +43 -58
- package/dist/js/resizable/resizable.model.d.mts +2 -0
- package/dist/js/resizable/resizable.model.mjs +21 -0
- package/dist/js/resizable/resizable.standalone.d.mts +2 -1
- package/dist/js/resizable.embedded-BemH-7Re.d.mts +11 -0
- package/dist/js/resizable.model-YEtcC9li.d.mts +46 -0
- package/dist/js/sortable/sortable.embedded.d.mts +2 -2
- package/dist/js/sortable/sortable.embedded.mjs +111 -116
- package/dist/js/sortable/sortable.model.d.mts +2 -0
- package/dist/js/sortable/sortable.model.mjs +24 -0
- package/dist/js/sortable/sortable.standalone.d.mts +2 -1
- package/dist/js/sortable.embedded-CrEGff9k.d.mts +11 -0
- package/dist/js/{splitter.d.mts → splitter/index.d.mts} +6 -4
- package/dist/js/{splitter.mjs → splitter/index.mjs} +90 -128
- package/dist/js/splitter/splitter.model.d.mts +2 -0
- package/dist/js/splitter/splitter.model.mjs +37 -0
- package/dist/js/splitter.model-C24W6eZ7.d.mts +57 -0
- package/dist/js/{tabs.d.mts → tabs/index.d.mts} +8 -8
- package/dist/js/{tabs.mjs → tabs/index.mjs} +58 -58
- package/dist/js/tabs/tabs.model.d.mts +2 -0
- package/dist/js/tabs/tabs.model.mjs +18 -0
- package/dist/js/tabs.model-BHPy7fPo.d.mts +40 -0
- package/dist/js/toolbar/index.mjs +27 -0
- package/dist/js/toolbar/toolbar.model.d.mts +11 -0
- package/dist/js/toolbar/toolbar.model.mjs +7 -0
- package/dist/js/tooltip/index.d.mts +19 -0
- package/dist/js/{tooltip.mjs → tooltip/index.mjs} +61 -86
- package/dist/js/tooltip/tooltip.model.d.mts +2 -0
- package/dist/js/tooltip/tooltip.model.mjs +15 -0
- package/dist/js/tooltip.model-BpNStw5z.d.mts +37 -0
- package/package.json +30 -24
- package/dist/js/color-picker/constants.color-picker.d.mts +0 -2
- package/dist/js/color-picker/event.color-picker.mjs +0 -2
- package/dist/js/color-picker/misc.color-picker.d.mts +0 -2
- package/dist/js/color-picker/misc.color-picker.mjs +0 -2
- package/dist/js/color-picker/models.color-picker.d.mts +0 -2
- package/dist/js/color-picker/state.color-picker.d.mts +0 -8
- package/dist/js/color-picker/state.color-picker.mjs +0 -2
- package/dist/js/combobox/constants.combobox.d.mts +0 -2
- package/dist/js/combobox/dom.combobox.d.mts +0 -26
- package/dist/js/combobox/misc.combobox.d.mts +0 -2
- package/dist/js/combobox/misc.combobox.mjs +0 -2
- package/dist/js/combobox/models.combobox.d.mts +0 -43
- package/dist/js/combobox/state.combobox.d.mts +0 -11
- package/dist/js/combobox/state.combobox.mjs +0 -2
- package/dist/js/constants.color-picker-B-gFjL8m.d.mts +0 -364
- package/dist/js/constants.combobox-8EMRmv09.d.mts +0 -18
- package/dist/js/constants.listbox-DGnX32kv.d.mts +0 -8
- package/dist/js/dialog.d.mts +0 -47
- package/dist/js/dialog.mjs +0 -131
- package/dist/js/draggable-B5-70SZm.d.mts +0 -155
- package/dist/js/event.color-picker-BEpq0Adu.mjs +0 -485
- package/dist/js/index-C5D3-oiI.d.mts +0 -177
- package/dist/js/internal/draggable.d.mts +0 -2
- package/dist/js/internal/draggable.mjs +0 -265
- package/dist/js/internal/listbox/listbox.constants.d.mts +0 -8
- package/dist/js/internal/listbox/listbox.constants.mjs +0 -22
- package/dist/js/internal/listbox/listbox.data.d.mts +0 -19
- package/dist/js/internal/listbox/listbox.data.mjs +0 -2
- package/dist/js/internal/listbox/listbox.dom.d.mts +0 -65
- package/dist/js/internal/listbox/listbox.dom.mjs +0 -2
- package/dist/js/internal/listbox/listbox.event.d.mts +0 -4
- package/dist/js/internal/listbox/listbox.event.mjs +0 -63
- package/dist/js/internal/listbox/listbox.form.d.mts +0 -5
- package/dist/js/internal/listbox/listbox.form.mjs +0 -53
- package/dist/js/internal/listbox/listbox.misc.d.mts +0 -11
- package/dist/js/internal/listbox/listbox.misc.mjs +0 -2
- package/dist/js/internal/listbox/listbox.model.d.mts +0 -2
- package/dist/js/internal/listbox/listbox.state.d.mts +0 -6
- package/dist/js/internal/listbox/listbox.state.mjs +0 -40
- package/dist/js/internal/navigable.d.mts +0 -36
- package/dist/js/internal/navigable.mjs +0 -135
- package/dist/js/l10n-Bn-7RcwR.d.mts +0 -20
- package/dist/js/l10n.d.mts +0 -2
- package/dist/js/l10n.mjs +0 -80
- package/dist/js/listbox/constants.listbox.d.mts +0 -2
- package/dist/js/listbox/event.listbox.d.mts +0 -7
- package/dist/js/listbox/event.listbox.mjs +0 -2
- package/dist/js/listbox/misc.listbox.d.mts +0 -2
- package/dist/js/listbox/misc.listbox.mjs +0 -2
- package/dist/js/listbox/state.listbox.d.mts +0 -10
- package/dist/js/listbox/state.listbox.mjs +0 -2
- package/dist/js/listbox.data-DQ7-x2uY.mjs +0 -425
- package/dist/js/listbox.model-BHPA7GM4.d.mts +0 -125
- package/dist/js/menu.mjs +0 -172
- package/dist/js/misc.listbox-DKB-j0UK.mjs +0 -196
- package/dist/js/misc.listbox-mZMuYOxg.d.mts +0 -20
- package/dist/js/popover.d.mts +0 -38
- package/dist/js/resizable.embedded-dvhdfQgt.d.mts +0 -34
- package/dist/js/toolbar.mjs +0 -31
- package/dist/js/tooltip.d.mts +0 -45
- /package/dist/js/combobox/{models.combobox.mjs → combobox.model.mjs} +0 -0
- /package/dist/js/internal/{listbox/listbox.model.mjs → option-list/option-list.model.mjs} +0 -0
- /package/dist/js/{menu.d.mts → menu/index.d.mts} +0 -0
- /package/dist/js/{toolbar.d.mts → toolbar/index.d.mts} +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
//#region src/js/listbox/constants.
|
|
1
|
+
//#region src/js/listbox/listbox.constants.ts
|
|
2
2
|
const LISTBOX_TAGNAME = "oui-listbox";
|
|
3
|
+
const LISTBOX_SYMBOL = Symbol(LISTBOX_TAGNAME);
|
|
3
4
|
const attributeContent = `${LISTBOX_TAGNAME}-content`;
|
|
4
5
|
const attributeFilter = `${LISTBOX_TAGNAME}-filter`;
|
|
5
6
|
const attributeFilterInput = `${attributeFilter}-input`;
|
|
@@ -10,13 +11,8 @@ const attributeList = `${LISTBOX_TAGNAME}-list`;
|
|
|
10
11
|
const attributeListEmpty = `${attributeList}-empty`;
|
|
11
12
|
const attributeMessage = `${LISTBOX_TAGNAME}-message`;
|
|
12
13
|
const attributeOption = `${LISTBOX_TAGNAME}-option`;
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
const messageSelect = `<${LISTBOX_TAGNAME}> must contain a valid <select> element`;
|
|
16
|
-
const selectorFilter = `[${attributeFilterInput}]`;
|
|
17
|
-
const selectorOption = `[${attributeOption}]`;
|
|
18
|
-
const LISTBOX_ATTRIBUTES = {
|
|
19
|
-
active: attributeOptionActive,
|
|
14
|
+
const listboxAttributes = {
|
|
15
|
+
active: `${LISTBOX_TAGNAME}-option-active`,
|
|
20
16
|
content: attributeContent,
|
|
21
17
|
empty: attributeListEmpty,
|
|
22
18
|
filter: attributeFilter,
|
|
@@ -28,13 +24,13 @@ const LISTBOX_ATTRIBUTES = {
|
|
|
28
24
|
message: attributeMessage,
|
|
29
25
|
option: attributeOption
|
|
30
26
|
};
|
|
31
|
-
const
|
|
32
|
-
label:
|
|
33
|
-
select:
|
|
27
|
+
const listboxMessages = {
|
|
28
|
+
label: `<${LISTBOX_TAGNAME}> must contain a <label> element for the <select> element`,
|
|
29
|
+
select: `<${LISTBOX_TAGNAME}> must contain a valid <select> element`
|
|
34
30
|
};
|
|
35
|
-
const
|
|
36
|
-
filter:
|
|
37
|
-
option:
|
|
31
|
+
const listboxSelectors = {
|
|
32
|
+
filter: `[${attributeFilterInput}]`,
|
|
33
|
+
option: `[${attributeOption}]`
|
|
38
34
|
};
|
|
39
35
|
//#endregion
|
|
40
|
-
export {
|
|
36
|
+
export { LISTBOX_SYMBOL, LISTBOX_TAGNAME, listboxAttributes, listboxMessages, listboxSelectors };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { r as OuiListboxState, t as OuiListboxFooter } from "../listbox.model-C0MYWXZe.mjs";
|
|
2
|
+
//#region src/js/listbox/listbox.dom.d.ts
|
|
3
|
+
export declare function createListboxFooter(): OuiListboxFooter;
|
|
4
|
+
export declare function updateListboxFooter(state: OuiListboxState): void;
|
|
5
|
+
//#endregion
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { h as OptionListPreview } from "../option-list.model-CCPUlPeX.mjs";
|
|
2
|
+
import { r as OuiListboxState } from "../listbox.model-C0MYWXZe.mjs";
|
|
3
|
+
//#region src/js/listbox/listbox.event.d.ts
|
|
4
|
+
export declare function onListboxApply(state: OuiListboxState): void;
|
|
5
|
+
export declare function onListboxEnter(state: OuiListboxState): void;
|
|
6
|
+
export declare function onListboxFilter(preview: OptionListPreview, state: OuiListboxState, _: boolean, active?: Element): void;
|
|
7
|
+
export declare function onListboxNavigation(preview: OptionListPreview, state: OuiListboxState, active?: HTMLElement): void;
|
|
8
|
+
export declare function onListboxToggle(state: OuiListboxState): void;
|
|
9
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { u as OuiDefaultLocalizations } from "../l10n.model-D1E1u35L.mjs";
|
|
2
|
+
import { n as OuiListboxLocalizations, r as OuiListboxState } from "../listbox.model-C0MYWXZe.mjs";
|
|
3
|
+
//#region src/js/listbox/listbox.state.d.ts
|
|
4
|
+
export declare function initializeListbox(element: Element, state: OuiListboxState): void;
|
|
5
|
+
export declare function onAttachListbox(state: OuiListboxState): void;
|
|
6
|
+
export declare function onDetachListbox(state: OuiListboxState): void;
|
|
7
|
+
export declare const listboxLocalizations: OuiDefaultLocalizations<OuiListboxLocalizations>;
|
|
8
|
+
export declare const listboxes: Set<OuiListboxState>;
|
|
9
|
+
//#endregion
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { c as OptionListAttributes } from "./option-list.model-CCPUlPeX.mjs";
|
|
2
|
+
//#region src/js/listbox/listbox.constants.d.ts
|
|
3
|
+
declare const LISTBOX_TAGNAME = "oui-listbox";
|
|
4
|
+
declare const LISTBOX_SYMBOL: unique symbol;
|
|
5
|
+
declare const listboxAttributes: OptionListAttributes;
|
|
6
|
+
declare const listboxMessages: Record<string, string>;
|
|
7
|
+
declare const listboxSelectors: Record<string, string>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { listboxSelectors as a, listboxMessages as i, LISTBOX_TAGNAME as n, listboxAttributes as r, LISTBOX_SYMBOL as t };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { p as OptionListLocalizationValues } from "./option-list.model-CCPUlPeX.mjs";
|
|
2
|
+
//#region src/js/listbox/listbox.misc.d.ts
|
|
3
|
+
declare function getListboxId(): string;
|
|
4
|
+
/**
|
|
5
|
+
* Set listbox localizations for a specific language
|
|
6
|
+
*
|
|
7
|
+
* @param language Language code
|
|
8
|
+
* @param localizations Localizations for language
|
|
9
|
+
*/
|
|
10
|
+
declare function setListboxLocalizations(language: string, localizations: Partial<OptionListLocalizationValues>): void;
|
|
11
|
+
/**
|
|
12
|
+
* Set default listbox localizations
|
|
13
|
+
*
|
|
14
|
+
* @param localizations Default localizations
|
|
15
|
+
*/
|
|
16
|
+
declare function setListboxLocalizations(localizations: Partial<OptionListLocalizationValues>, defaults: true): void;
|
|
17
|
+
/**
|
|
18
|
+
* Set listbox localizations for one or more languages
|
|
19
|
+
*
|
|
20
|
+
* @param localizations Localizations for one or more languages
|
|
21
|
+
*/
|
|
22
|
+
declare function setListboxLocalizations(localizations: Record<string, Partial<OptionListLocalizationValues>>): void;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { setListboxLocalizations as n, getListboxId as t };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { g as OptionListState, p as OptionListLocalizationValues } from "./option-list.model-CCPUlPeX.mjs";
|
|
2
|
+
//#region src/js/listbox/listbox.model.d.ts
|
|
3
|
+
type OuiListboxFooter = {
|
|
4
|
+
button: OuiListboxFooterButton;
|
|
5
|
+
container: Element;
|
|
6
|
+
};
|
|
7
|
+
type OuiListboxFooterButton = {
|
|
8
|
+
clear: HTMLButtonElement;
|
|
9
|
+
select: HTMLButtonElement;
|
|
10
|
+
};
|
|
11
|
+
type OuiListboxLocalizations = {
|
|
12
|
+
clearSelection: string | (() => string);
|
|
13
|
+
selectAll: string | (() => string);
|
|
14
|
+
} & OptionListLocalizationValues;
|
|
15
|
+
type OuiListboxState = OptionListState<OuiListboxStateExtras, OuiListboxLocalizations>;
|
|
16
|
+
type OuiListboxStateExtras = {
|
|
17
|
+
footer: OuiListboxFooter;
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { OuiListboxStateExtras as i, OuiListboxLocalizations as n, OuiListboxState as r, OuiListboxFooter as t };
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { createDefaultLocalizations, createLocalizations } from "./internal/l10n/index.mjs";
|
|
2
|
+
import { getBooleanAriaValue } from "./internal/misc.mjs";
|
|
3
|
+
import { c as createOptionListContent, n as filterOptionList, o as setOptionListValues, s as toggleOptionListOption, t as applyOptionListSelection, x as generateOptionListIds, y as updateOptionListPreview } from "./option-list.data-CgMyUwPc.mjs";
|
|
4
|
+
import { initializeOptionListState } from "./internal/option-list/option-list.state.mjs";
|
|
5
|
+
import { processOptionListKeydown } from "./internal/option-list/option-list.event.mjs";
|
|
6
|
+
import { LISTBOX_SYMBOL, LISTBOX_TAGNAME, listboxAttributes, listboxMessages, listboxSelectors } from "./listbox/listbox.constants.mjs";
|
|
7
|
+
import { getAria, setAria } from "@oscarpalmer/toretto/aria";
|
|
8
|
+
import { setAttributes } from "@oscarpalmer/toretto/attribute";
|
|
9
|
+
import { on } from "@oscarpalmer/toretto/event";
|
|
10
|
+
import { findAncestor } from "@oscarpalmer/toretto/find";
|
|
11
|
+
import { noop } from "@oscarpalmer/atoms/function";
|
|
12
|
+
import { createElement } from "@oscarpalmer/toretto/create";
|
|
13
|
+
import { getData } from "@oscarpalmer/toretto/data";
|
|
14
|
+
//#region src/js/listbox/listbox.dom.ts
|
|
15
|
+
function createListboxFooter() {
|
|
16
|
+
const container = createElement("div", { attribute: { [`${LISTBOX_TAGNAME}-footer`]: "" } });
|
|
17
|
+
const clear = createElement("button", {
|
|
18
|
+
attribute: { [`${LISTBOX_TAGNAME}-footer-button`]: "" },
|
|
19
|
+
property: { textContent: listboxLocalizations.localize("clearSelection") }
|
|
20
|
+
});
|
|
21
|
+
const select = createElement("button", {
|
|
22
|
+
attribute: { [`${LISTBOX_TAGNAME}-footer-button`]: "" },
|
|
23
|
+
property: { textContent: listboxLocalizations.localize("selectAll") }
|
|
24
|
+
});
|
|
25
|
+
container.append(select, clear);
|
|
26
|
+
return {
|
|
27
|
+
container,
|
|
28
|
+
button: {
|
|
29
|
+
clear,
|
|
30
|
+
select
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function updateListboxFooter(state) {
|
|
35
|
+
const { disabled, footer, options, readonly } = state.component;
|
|
36
|
+
setAria(footer.button.clear, "disabled", disabled || readonly || options.selected.length === 0);
|
|
37
|
+
setAria(footer.button.select, "disabled", disabled || readonly || options.selected.length === options.all.length);
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/js/listbox/listbox.event.ts
|
|
41
|
+
function onListboxApply(state) {
|
|
42
|
+
updateListboxFooter(state);
|
|
43
|
+
}
|
|
44
|
+
function onListboxClick(event) {
|
|
45
|
+
const listbox = findAncestor(event, LISTBOX_TAGNAME);
|
|
46
|
+
const state = listbox?.[LISTBOX_SYMBOL];
|
|
47
|
+
if (listbox == null || state == null) return;
|
|
48
|
+
const button = findAncestor(event, `[${LISTBOX_TAGNAME}-footer-button]`);
|
|
49
|
+
if (button instanceof HTMLElement) {
|
|
50
|
+
onListboxSelection(state, button);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const option = findAncestor(event, listboxSelectors.option);
|
|
54
|
+
if (!(option instanceof HTMLElement)) return;
|
|
55
|
+
const { disabled, filter, readonly } = state.component;
|
|
56
|
+
if (disabled) filter.element.focus();
|
|
57
|
+
else if (readonly) updateOptionListPreview("none", state, option, false);
|
|
58
|
+
else toggleOptionListOption(state, option);
|
|
59
|
+
}
|
|
60
|
+
function onListboxEnter(state) {
|
|
61
|
+
if (!state.component.disabled && !state.component.readonly) toggleOptionListOption(state, state.component.active);
|
|
62
|
+
}
|
|
63
|
+
function onListboxFilter(preview, state, _, active) {
|
|
64
|
+
updateOptionListPreview(preview, state, active);
|
|
65
|
+
}
|
|
66
|
+
function onListboxInput(event) {
|
|
67
|
+
const state = findAncestor(event, LISTBOX_TAGNAME)?.[LISTBOX_SYMBOL];
|
|
68
|
+
if (state?.component.filter.element === event.target) filterOptionList(event.inputType, state);
|
|
69
|
+
}
|
|
70
|
+
function onListboxKeydown(event) {
|
|
71
|
+
const state = findAncestor(event, LISTBOX_TAGNAME)?.[LISTBOX_SYMBOL];
|
|
72
|
+
if (state?.component.filter.element === event.target) processOptionListKeydown(event, state);
|
|
73
|
+
}
|
|
74
|
+
function onListboxNavigation(preview, state, active) {
|
|
75
|
+
if (state.component.multiple || state.component.readonly) updateOptionListPreview(preview, state, active);
|
|
76
|
+
else applyOptionListSelection({
|
|
77
|
+
state,
|
|
78
|
+
option: active,
|
|
79
|
+
added: true,
|
|
80
|
+
selected: active == null ? [] : [active]
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function onListboxSelection(state, button) {
|
|
84
|
+
if (getAria(button, "disabled") || state.component.options.all.length === 0) return;
|
|
85
|
+
const clear = button === state.component.footer.button.clear;
|
|
86
|
+
const select = button === state.component.footer.button.select;
|
|
87
|
+
if (clear || select) applyOptionListSelection({
|
|
88
|
+
state,
|
|
89
|
+
option: state.component.options.all[0],
|
|
90
|
+
added: false,
|
|
91
|
+
selected: clear ? [] : state.component.options.all
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function onListboxToggle(state) {
|
|
95
|
+
state.component.filter.element.focus();
|
|
96
|
+
}
|
|
97
|
+
on(document, "click", onListboxClick);
|
|
98
|
+
on(document, "input", onListboxInput);
|
|
99
|
+
on(document, "keydown", onListboxKeydown, { passive: false });
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/js/listbox/listbox.misc.ts
|
|
102
|
+
function getListboxId() {
|
|
103
|
+
index += 1;
|
|
104
|
+
return `oui_listbox_${index}`;
|
|
105
|
+
}
|
|
106
|
+
function setListboxLocalizations(first, second) {
|
|
107
|
+
if (second === true) listboxLocalizations.setDefaults(first);
|
|
108
|
+
else listboxLocalizations.setLanguages(first, second);
|
|
109
|
+
}
|
|
110
|
+
let index = 0;
|
|
111
|
+
//#endregion
|
|
112
|
+
//#region src/js/listbox/listbox.state.ts
|
|
113
|
+
function createComponentState(element, state) {
|
|
114
|
+
const select = element.querySelector("select");
|
|
115
|
+
if (!(select instanceof HTMLSelectElement)) throw new Error(listboxMessages.select);
|
|
116
|
+
const label = element.querySelector(`label[for="${select.id}"]`);
|
|
117
|
+
if (!(label instanceof HTMLLabelElement)) throw new Error(listboxMessages.label);
|
|
118
|
+
element.id = select.id;
|
|
119
|
+
const disabled = getBooleanAriaValue(element, "disabled") || select.disabled;
|
|
120
|
+
const multiple = element.multiple || select.multiple;
|
|
121
|
+
const readonly = getBooleanAriaValue(element, "readonly");
|
|
122
|
+
const required = getBooleanAriaValue(element, "required") || select.required;
|
|
123
|
+
setAttributes(element, {
|
|
124
|
+
autocomplete: "none",
|
|
125
|
+
name: select.name === "" ? select.id : select.name
|
|
126
|
+
});
|
|
127
|
+
const id = getListboxId();
|
|
128
|
+
const labelId = label.id;
|
|
129
|
+
label.htmlFor = id;
|
|
130
|
+
label.id = `${id}_label`;
|
|
131
|
+
generateOptionListIds(id, select);
|
|
132
|
+
const type = "select";
|
|
133
|
+
const content = createOptionListContent({
|
|
134
|
+
element,
|
|
135
|
+
id,
|
|
136
|
+
label,
|
|
137
|
+
multiple,
|
|
138
|
+
select,
|
|
139
|
+
type,
|
|
140
|
+
attributes: listboxAttributes,
|
|
141
|
+
autocomplete: listboxAutoComplete,
|
|
142
|
+
listbox: true
|
|
143
|
+
});
|
|
144
|
+
const footer = createListboxFooter();
|
|
145
|
+
content.element.append(footer.container);
|
|
146
|
+
const { selected } = content.list.options;
|
|
147
|
+
const values = selected.length === 0 ? [""] : selected.map((option) => getData(option, "value", false) ?? "");
|
|
148
|
+
state.component = {
|
|
149
|
+
disabled,
|
|
150
|
+
footer,
|
|
151
|
+
id,
|
|
152
|
+
multiple,
|
|
153
|
+
readonly,
|
|
154
|
+
required,
|
|
155
|
+
select,
|
|
156
|
+
type,
|
|
157
|
+
active: selected[0],
|
|
158
|
+
attributes: listboxAttributes,
|
|
159
|
+
autocomplete: listboxAutoComplete,
|
|
160
|
+
callbacks: listboxCallbacks,
|
|
161
|
+
content: content.element,
|
|
162
|
+
elements: [element, content.filter.element],
|
|
163
|
+
filter: {
|
|
164
|
+
element: content.filter.element,
|
|
165
|
+
value: ""
|
|
166
|
+
},
|
|
167
|
+
host: element,
|
|
168
|
+
label: {
|
|
169
|
+
id: labelId,
|
|
170
|
+
element: label
|
|
171
|
+
},
|
|
172
|
+
list: content.list.element,
|
|
173
|
+
listeners: [],
|
|
174
|
+
listbox: true,
|
|
175
|
+
localizations: createLocalizations(listboxLocalizations),
|
|
176
|
+
message: content.message,
|
|
177
|
+
name: element.name,
|
|
178
|
+
options: content.list.options,
|
|
179
|
+
values: {
|
|
180
|
+
current: values.slice(),
|
|
181
|
+
initial: values.slice(),
|
|
182
|
+
label: content.value
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
return initializeOptionListState(state, listboxes, onAttachListbox);
|
|
186
|
+
}
|
|
187
|
+
function initializeListbox(element, state) {
|
|
188
|
+
createComponentState(element, state);
|
|
189
|
+
if (state.form.restored != null) {
|
|
190
|
+
setOptionListValues(state, state.form.restored);
|
|
191
|
+
state.form.restored = void 0;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function onAttachListbox(state) {
|
|
195
|
+
const { content, select } = state.component;
|
|
196
|
+
select.hidden = true;
|
|
197
|
+
select.insertAdjacentElement("afterend", content);
|
|
198
|
+
select.remove();
|
|
199
|
+
}
|
|
200
|
+
function onDetachListbox(state) {
|
|
201
|
+
const { content, select } = state.component;
|
|
202
|
+
content.insertAdjacentElement("beforebegin", select);
|
|
203
|
+
content.remove();
|
|
204
|
+
select.hidden = false;
|
|
205
|
+
}
|
|
206
|
+
const listboxAutoComplete = {
|
|
207
|
+
both: false,
|
|
208
|
+
inline: false,
|
|
209
|
+
list: false,
|
|
210
|
+
none: true
|
|
211
|
+
};
|
|
212
|
+
const listboxCallbacks = {
|
|
213
|
+
data: {
|
|
214
|
+
onApply: onListboxApply,
|
|
215
|
+
onFilter: onListboxFilter,
|
|
216
|
+
onForm: noop,
|
|
217
|
+
onPreview: noop,
|
|
218
|
+
onToggle: onListboxToggle
|
|
219
|
+
},
|
|
220
|
+
keydown: {
|
|
221
|
+
onEnter: onListboxEnter,
|
|
222
|
+
onNavigation: onListboxNavigation,
|
|
223
|
+
onToggle: onListboxToggle
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
const listboxLocalizations = createDefaultLocalizations({
|
|
227
|
+
clearSelection: "Clear",
|
|
228
|
+
empty: "No results found",
|
|
229
|
+
input: "",
|
|
230
|
+
invalid: "Please select an option from the list",
|
|
231
|
+
max: (max) => `Please select fewer options (maximum is ${max})`,
|
|
232
|
+
min: (min) => `Please select more options (minimum is ${min})`,
|
|
233
|
+
remove: "",
|
|
234
|
+
results: (amount) => `${amount} results available`,
|
|
235
|
+
selectAll: "Select all",
|
|
236
|
+
selected: (amount) => `${amount} selected`
|
|
237
|
+
});
|
|
238
|
+
const listboxes = /* @__PURE__ */ new Set();
|
|
239
|
+
//#endregion
|
|
240
|
+
export { onDetachListbox as a, onListboxApply as c, onListboxNavigation as d, onListboxToggle as f, onAttachListbox as i, onListboxEnter as l, updateListboxFooter as m, listboxLocalizations as n, getListboxId as o, createListboxFooter as p, listboxes as r, setListboxLocalizations as s, initializeListbox as t, onListboxFilter as u };
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { createEmbeddedFloatable, getOnBeforeToggleListener } from "../floatable/floatable.embedded.mjs";
|
|
2
|
+
import { attributable } from "../internal/attributable.mjs";
|
|
3
|
+
import { NAVIGABLE_KEYS_HORIZONTAL, NAVIGABLE_KEYS_VERTICAL, NAVIGABLE_SYMBOL } from "../internal/navigable/navigable.model.mjs";
|
|
4
|
+
import { getNavigable, updateNavigableFocus } from "../internal/navigable/index.mjs";
|
|
5
|
+
import { MENUBAR_ATTRIBUTE, MENUBAR_SELECTOR_ITEM, MENU_ATTRIBUTE, MENU_ATTRIBUTE_POSITION, MENU_MENUBAR_SELECTORS, MENU_SELECTOR_CONTENT, MENU_SELECTOR_ITEM, MENU_SELECTOR_TOGGLE, menubars, menus } from "./menu.model.mjs";
|
|
6
|
+
import { setAria, setRole } from "@oscarpalmer/toretto/aria";
|
|
7
|
+
import { setAttribute, setAttributes } from "@oscarpalmer/toretto/attribute";
|
|
8
|
+
import { on } from "@oscarpalmer/toretto/event";
|
|
9
|
+
import { findAncestor } from "@oscarpalmer/toretto/find";
|
|
10
|
+
//#region src/js/menu/index.ts
|
|
11
|
+
function OuiMenu(element, navigable) {
|
|
12
|
+
const state = navigable[NAVIGABLE_SYMBOL];
|
|
13
|
+
this.content = state.element;
|
|
14
|
+
this.element = element;
|
|
15
|
+
this.navigable = navigable;
|
|
16
|
+
this.toggle = element.querySelector(MENU_SELECTOR_TOGGLE);
|
|
17
|
+
this.floatable = createEmbeddedFloatable(this.toggle, this.content, {
|
|
18
|
+
attribute: MENU_ATTRIBUTE_POSITION,
|
|
19
|
+
position: findAncestor(element.parentElement, MENU_SELECTOR_CONTENT) == null ? "below-start" : "end-top",
|
|
20
|
+
reusable: false
|
|
21
|
+
});
|
|
22
|
+
state.listeners.push(getOnBeforeToggleListener(this.content), on(this.content, "click", (event) => {
|
|
23
|
+
event.stopPropagation();
|
|
24
|
+
if (findAncestor(event, MENU_SELECTOR_TOGGLE) != null) return;
|
|
25
|
+
const elements = document.querySelectorAll(MENU_SELECTOR_CONTENT);
|
|
26
|
+
let firstElement;
|
|
27
|
+
for (const element of elements) {
|
|
28
|
+
firstElement ??= element;
|
|
29
|
+
menus.get(element)?.floatable.hide();
|
|
30
|
+
}
|
|
31
|
+
const menu = firstElement == null ? void 0 : menus.get(firstElement);
|
|
32
|
+
if (menu != null && event.pointerId === -1) updateNavigableFocus(menu.navigable, true);
|
|
33
|
+
}), on(this.content, "toggle", (event) => {
|
|
34
|
+
const expanded = event.newState === "open";
|
|
35
|
+
if (expanded) {
|
|
36
|
+
this.floatable?.update();
|
|
37
|
+
updateNavigableFocus(this.navigable, true);
|
|
38
|
+
}
|
|
39
|
+
setAria(this.toggle, "expanded", expanded);
|
|
40
|
+
}));
|
|
41
|
+
this.floatable.update();
|
|
42
|
+
initializeMenu(this);
|
|
43
|
+
updateNavigableFocus(this.navigable, false);
|
|
44
|
+
}
|
|
45
|
+
OuiMenu.prototype.destroy = destroyMenu;
|
|
46
|
+
Object.defineProperties(OuiMenu.prototype, { open: {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
get: getMenuOpen
|
|
49
|
+
} });
|
|
50
|
+
function OuiMenubar(element, navigable) {
|
|
51
|
+
this.element = element;
|
|
52
|
+
this.navigable = navigable;
|
|
53
|
+
updateNavigableFocus(this.navigable, false);
|
|
54
|
+
}
|
|
55
|
+
OuiMenubar.prototype.destroy = destroyMenubar;
|
|
56
|
+
function addInstance(instances, ctor, element, content, options) {
|
|
57
|
+
if (!instances.has(content)) instances.set(content, new ctor(element, getNavigable(content, {
|
|
58
|
+
...options,
|
|
59
|
+
onDeactivate,
|
|
60
|
+
onPreventNavigation,
|
|
61
|
+
onShouldActivate,
|
|
62
|
+
onShouldDeactivate
|
|
63
|
+
})));
|
|
64
|
+
}
|
|
65
|
+
function addMenu(element) {
|
|
66
|
+
const content = element.querySelector(MENU_SELECTOR_CONTENT);
|
|
67
|
+
const toggle = element.querySelector(MENU_SELECTOR_TOGGLE);
|
|
68
|
+
if (content != null && toggle != null) addInstance(menus, OuiMenu, element, content, {
|
|
69
|
+
selector: MENU_SELECTOR_ITEM,
|
|
70
|
+
vertical: true
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function addMenubar(element) {
|
|
74
|
+
addInstance(menubars, OuiMenubar, element, element, {
|
|
75
|
+
role: "menubar",
|
|
76
|
+
selector: MENUBAR_SELECTOR_ITEM,
|
|
77
|
+
vertical: false
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function destroyMenu() {
|
|
81
|
+
this.floatable.destroy();
|
|
82
|
+
this.navigable.destroy();
|
|
83
|
+
this.content = void 0;
|
|
84
|
+
this.element = void 0;
|
|
85
|
+
this.floatable = void 0;
|
|
86
|
+
this.navigable = void 0;
|
|
87
|
+
this.toggle = void 0;
|
|
88
|
+
}
|
|
89
|
+
function destroyMenubar() {
|
|
90
|
+
this.navigable.destroy();
|
|
91
|
+
this.element = void 0;
|
|
92
|
+
this.navigable = void 0;
|
|
93
|
+
}
|
|
94
|
+
function getId(element, value) {
|
|
95
|
+
let { id } = element;
|
|
96
|
+
if (id == null || id.trim().length === 0) {
|
|
97
|
+
id = value == null ? `oui_menu_${++index}` : `${value}_toggle`;
|
|
98
|
+
element.id = id;
|
|
99
|
+
}
|
|
100
|
+
return id;
|
|
101
|
+
}
|
|
102
|
+
function getMenuOpen() {
|
|
103
|
+
return this.floatable.open;
|
|
104
|
+
}
|
|
105
|
+
function initializeMenu(menu) {
|
|
106
|
+
const id = getId(menu.content);
|
|
107
|
+
setAttribute(menu.toggle, "popovertarget", id);
|
|
108
|
+
setAria(menu.toggle, {
|
|
109
|
+
controls: id,
|
|
110
|
+
expanded: "false",
|
|
111
|
+
haspopup: "menu"
|
|
112
|
+
});
|
|
113
|
+
setAttributes(menu.content, {
|
|
114
|
+
popover: "",
|
|
115
|
+
tabindex: "-1"
|
|
116
|
+
});
|
|
117
|
+
setRole(menu.content, "menu");
|
|
118
|
+
}
|
|
119
|
+
function onDeactivate(_, navigable) {
|
|
120
|
+
const menu = menus.get(navigable[NAVIGABLE_SYMBOL].element);
|
|
121
|
+
if (menu == null) return;
|
|
122
|
+
menu.floatable.hide();
|
|
123
|
+
const element = menu.element.parentElement == null ? void 0 : findAncestor(menu.element.parentElement, MENU_MENUBAR_SELECTORS);
|
|
124
|
+
if (element == null) return;
|
|
125
|
+
const instance = menubars.get(element) ?? menus.get(element);
|
|
126
|
+
if (instance != null) updateNavigableFocus(instance.navigable, true);
|
|
127
|
+
}
|
|
128
|
+
function onPreventNavigation(_, navigable) {
|
|
129
|
+
const { element } = navigable[NAVIGABLE_SYMBOL];
|
|
130
|
+
const instance = menubars.get(element) ?? menus.get(element);
|
|
131
|
+
return instance == null ? false : findAncestor(instance.element.parentElement, MENU_MENUBAR_SELECTORS) != null;
|
|
132
|
+
}
|
|
133
|
+
function onShouldActivate(event, navigable) {
|
|
134
|
+
const state = navigable[NAVIGABLE_SYMBOL];
|
|
135
|
+
const { element } = state;
|
|
136
|
+
let activate = false;
|
|
137
|
+
if (menubars.has(element)) activate = state.orientation === "horizontal" ? NAVIGABLE_KEYS_VERTICAL.has(event.key) : NAVIGABLE_KEYS_HORIZONTAL.has(event.key);
|
|
138
|
+
else if (menus.has(element)) activate = state.orientation === "horizontal" ? NAVIGABLE_KEYS_VERTICAL.has(event.key) : event.key === "ArrowRight";
|
|
139
|
+
if (activate) {
|
|
140
|
+
const target = event.target instanceof HTMLElement && event.target.matches(MENU_SELECTOR_TOGGLE) ? event.target : void 0;
|
|
141
|
+
if (target == null) activate = false;
|
|
142
|
+
else target.click();
|
|
143
|
+
}
|
|
144
|
+
return activate;
|
|
145
|
+
}
|
|
146
|
+
function onShouldDeactivate(event, navigable) {
|
|
147
|
+
const { element, orientation } = navigable[NAVIGABLE_SYMBOL];
|
|
148
|
+
if (menubars.has(element)) return;
|
|
149
|
+
const menu = menus.get(element);
|
|
150
|
+
if (menu == null) return;
|
|
151
|
+
const horizontal = orientation === "horizontal";
|
|
152
|
+
const altKey = horizontal ? "ArrowDown" : "ArrowRight";
|
|
153
|
+
const baseKey = horizontal ? "ArrowUp" : "ArrowLeft";
|
|
154
|
+
if (event.key === baseKey) return findAncestor(menu.element.parentElement, MENU_SELECTOR_CONTENT) != null;
|
|
155
|
+
if (event.key === altKey && event.target instanceof HTMLElement && !event.target.hasAttribute("popovertarget")) return false;
|
|
156
|
+
}
|
|
157
|
+
function removeInstance(instances, element) {
|
|
158
|
+
instances.get(element)?.destroy();
|
|
159
|
+
instances.delete(element);
|
|
160
|
+
}
|
|
161
|
+
function removeMenu(element) {
|
|
162
|
+
removeInstance(menus, element);
|
|
163
|
+
}
|
|
164
|
+
function removeMenubar(element) {
|
|
165
|
+
removeInstance(menubars, element);
|
|
166
|
+
}
|
|
167
|
+
let index = 0;
|
|
168
|
+
attributable(MENU_ATTRIBUTE, addMenu, removeMenu);
|
|
169
|
+
attributable(MENUBAR_ATTRIBUTE, addMenubar, removeMenubar);
|
|
170
|
+
//#endregion
|
|
171
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { c as OuiFloatable } from "../floatable.model-DXsQgoU7.mjs";
|
|
2
|
+
import { d as OuiNavigable, m as OuiNavigableOptions } from "../navigable.model-BqoR6iBv.mjs";
|
|
3
|
+
//#region src/js/menu/menu.model.d.ts
|
|
4
|
+
export type OuiBasicMenu = {
|
|
5
|
+
destroy(): void;
|
|
6
|
+
};
|
|
7
|
+
export type OuiBasicMenuOptions = Pick<OuiNavigableOptions, "role" | "selector" | "vertical">;
|
|
8
|
+
export type OuiMenu = {
|
|
9
|
+
content: Element;
|
|
10
|
+
element: Element;
|
|
11
|
+
floatable: OuiFloatable;
|
|
12
|
+
navigable: OuiNavigable;
|
|
13
|
+
toggle: Element;
|
|
14
|
+
get open(): boolean;
|
|
15
|
+
destroy(): void;
|
|
16
|
+
};
|
|
17
|
+
export type OuiMenubar = {
|
|
18
|
+
element: Element;
|
|
19
|
+
navigable: OuiNavigable;
|
|
20
|
+
destroy(): void;
|
|
21
|
+
};
|
|
22
|
+
export declare const MENU_ATTRIBUTE = "oui-menu";
|
|
23
|
+
export declare const MENU_ATTRIBUTE_POSITION: string;
|
|
24
|
+
export declare const MENUBAR_ATTRIBUTE = "oui-menubar";
|
|
25
|
+
export declare const MENU_SELECTOR_CONTENT: string;
|
|
26
|
+
export declare const MENU_SELECTOR_ITEM: string;
|
|
27
|
+
export declare const MENU_SELECTOR_TOGGLE: string;
|
|
28
|
+
export declare const MENUBAR_SELECTOR: string;
|
|
29
|
+
export declare const MENUBAR_SELECTOR_ITEM: string;
|
|
30
|
+
export declare const MENU_MENUBAR_SELECTORS: string;
|
|
31
|
+
export declare const menubars: WeakMap<Element, OuiMenubar>;
|
|
32
|
+
export declare const menus: WeakMap<Element, OuiMenu>;
|
|
33
|
+
//#endregion
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "../internal/navigable/navigable.model.mjs";
|
|
2
|
+
//#region src/js/menu/menu.model.ts
|
|
3
|
+
const MENU_ATTRIBUTE = "oui-menu";
|
|
4
|
+
const MENU_ATTRIBUTE_POSITION = `${MENU_ATTRIBUTE}-position`;
|
|
5
|
+
const MENUBAR_ATTRIBUTE = "oui-menubar";
|
|
6
|
+
const MENU_SELECTOR_CONTENT = `[${MENU_ATTRIBUTE}-content]`;
|
|
7
|
+
const MENU_SELECTOR_ITEM = `:scope > [${MENU_ATTRIBUTE}-item], :scope > * > [${MENU_ATTRIBUTE}-item]`;
|
|
8
|
+
const MENU_SELECTOR_TOGGLE = `[${MENU_ATTRIBUTE}-toggle]`;
|
|
9
|
+
const MENUBAR_SELECTOR = `[${MENUBAR_ATTRIBUTE}]`;
|
|
10
|
+
const MENUBAR_SELECTOR_ITEM = `:scope > [${MENUBAR_ATTRIBUTE}-item], :scope > * > [${MENUBAR_ATTRIBUTE}-item]`;
|
|
11
|
+
const MENU_MENUBAR_SELECTORS = `${MENUBAR_SELECTOR}, ${MENU_SELECTOR_CONTENT}`;
|
|
12
|
+
const menubars = /* @__PURE__ */ new WeakMap();
|
|
13
|
+
const menus = /* @__PURE__ */ new WeakMap();
|
|
14
|
+
//#endregion
|
|
15
|
+
export { MENUBAR_ATTRIBUTE, MENUBAR_SELECTOR, MENUBAR_SELECTOR_ITEM, MENU_ATTRIBUTE, MENU_ATTRIBUTE_POSITION, MENU_MENUBAR_SELECTORS, MENU_SELECTOR_CONTENT, MENU_SELECTOR_ITEM, MENU_SELECTOR_TOGGLE, menubars, menus };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { t as createMovable } from "../movable.embedded-C1bDTLGs.mjs";
|
|
2
|
+
export { createMovable };
|