@oscarpalmer/oui 0.38.0 → 0.40.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/badge.css +11 -8
- package/dist/css/button.css +106 -14
- package/dist/css/color-picker.css +555 -73
- package/dist/css/color.css +86 -86
- package/dist/css/combobox.css +98 -4
- package/dist/css/content.css +7 -6
- package/dist/css/floatable.css +1 -3
- package/dist/css/form.css +99 -6
- package/dist/css/icon.css +99 -0
- package/dist/css/listbox.css +3 -0
- package/dist/css/message.css +4 -3
- package/dist/css/mixins/button.mixins.css +1 -0
- package/dist/css/reset.css +1 -1
- package/dist/css/tabs.css +95 -3
- package/dist/css/typography.css +90 -0
- package/dist/js/color-picker/color-picker.constants.d.mts +2 -0
- package/dist/js/color-picker/color-picker.constants.mjs +60 -0
- package/dist/js/color-picker/color-picker.dom.d.mts +8 -0
- package/dist/js/color-picker/color-picker.dom.mjs +191 -0
- package/dist/js/color-picker/color-picker.event.d.mts +9 -0
- package/dist/js/color-picker/color-picker.event.mjs +2 -0
- package/dist/js/color-picker/color-picker.form.d.mts +5 -0
- package/dist/js/color-picker/color-picker.form.mjs +27 -0
- package/dist/js/color-picker/color-picker.misc.d.mts +2 -0
- package/dist/js/color-picker/color-picker.misc.mjs +2 -0
- package/dist/js/color-picker/color-picker.model.d.mts +2 -0
- package/dist/js/color-picker/color-picker.model.mjs +24 -0
- package/dist/js/color-picker/color-picker.output.d.mts +8 -0
- package/dist/js/color-picker/color-picker.output.mjs +235 -0
- package/dist/js/color-picker/color-picker.state.d.mts +8 -0
- package/dist/js/color-picker/color-picker.state.mjs +2 -0
- package/dist/js/{color-picker.d.mts → color-picker/index.d.mts} +10 -43
- package/dist/js/color-picker/index.mjs +305 -0
- package/dist/js/color-picker.constants-D1mxw_Le.d.mts +179 -0
- package/dist/js/color-picker.event-Cksj5TvS.mjs +500 -0
- package/dist/js/color-picker.misc-CtsXGrOe.d.mts +27 -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 +26 -0
- package/dist/js/combobox/{dom.combobox.mjs → combobox.dom.mjs} +44 -37
- package/dist/js/combobox/combobox.event.d.mts +22 -0
- 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/{misc.combobox.mjs → combobox.misc.mjs} +1 -1
- package/dist/js/combobox/combobox.model.d.mts +2 -0
- package/dist/js/combobox/combobox.state.d.mts +10 -0
- package/dist/js/combobox/combobox.state.mjs +2 -0
- package/dist/js/combobox/index.d.mts +163 -2
- package/dist/js/combobox/index.mjs +53 -52
- package/dist/js/combobox.constants-DZVkMP5g.d.mts +19 -0
- package/dist/js/combobox.misc-C1tPZZDi.d.mts +22 -0
- package/dist/js/{combobox/models.combobox.d.mts → combobox.model-oDV06XCN.d.mts} +6 -6
- package/dist/js/{state.combobox-Qm3FWzYW.mjs → combobox.state-BfJ3Hxg8.mjs} +96 -82
- package/dist/js/constants.listbox-C5Ap6Ag_.d.mts +9 -0
- 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-DX2mndMh.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-MeTyXjFn.d.mts +17 -0
- package/dist/js/floatable.model-DXsQgoU7.d.mts +62 -0
- package/dist/js/focus-trap/focus-trap.embedded.d.mts +2 -2
- package/dist/js/focus-trap/focus-trap.embedded.mjs +112 -134
- 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-DIU05m1z.d.mts +13 -0
- package/dist/js/{focus-trap.embedded-DR8NpZfr.d.mts → focus-trap.model-BeX6UYlw.d.mts} +16 -18
- package/dist/js/index.d.mts +26 -14
- package/dist/js/index.mjs +18 -15
- package/dist/js/internal/attributable.d.mts +2 -3
- 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.mjs → draggable/index.mjs} +83 -114
- package/dist/js/internal/listbox/listbox.constants.d.mts +7 -10
- package/dist/js/internal/listbox/listbox.constants.mjs +15 -16
- package/dist/js/internal/listbox/listbox.data.d.mts +9 -10
- package/dist/js/internal/listbox/listbox.data.mjs +1 -1
- package/dist/js/internal/listbox/listbox.dom.d.mts +19 -20
- package/dist/js/internal/listbox/listbox.dom.mjs +1 -1
- package/dist/js/internal/listbox/listbox.event.d.mts +3 -4
- package/dist/js/internal/listbox/listbox.event.mjs +23 -20
- package/dist/js/internal/listbox/listbox.form.d.mts +4 -5
- package/dist/js/internal/listbox/listbox.form.mjs +15 -12
- package/dist/js/internal/listbox/listbox.misc.d.mts +10 -11
- package/dist/js/internal/listbox/listbox.misc.mjs +1 -1
- package/dist/js/internal/listbox/listbox.model.d.mts +2 -2
- package/dist/js/internal/listbox/listbox.state.d.mts +5 -6
- package/dist/js/internal/listbox/listbox.state.mjs +19 -20
- package/dist/js/internal/misc.d.mts +5 -4
- package/dist/js/internal/misc.mjs +7 -1
- 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/l10n/index.d.mts +9 -0
- package/dist/js/{l10n.mjs → l10n/index.mjs} +50 -23
- package/dist/js/l10n/l10n.model.d.mts +2 -0
- package/dist/js/l10n/l10n.model.mjs +9 -0
- package/dist/js/l10n.model-D6a9frgl.d.mts +26 -0
- package/dist/js/listbox/constants.listbox.d.mts +2 -2
- package/dist/js/listbox/constants.listbox.mjs +10 -14
- package/dist/js/listbox/event.listbox.d.mts +6 -7
- package/dist/js/listbox/event.listbox.mjs +47 -1
- package/dist/js/listbox/index.d.mts +8 -6
- package/dist/js/listbox/index.mjs +47 -49
- package/dist/js/listbox/misc.listbox.d.mts +1 -1
- package/dist/js/listbox/misc.listbox.mjs +1 -1
- package/dist/js/listbox/state.listbox.d.mts +8 -10
- package/dist/js/listbox/state.listbox.mjs +2 -2
- package/dist/js/{listbox.data-C7CRa5Ya.mjs → listbox.data-BQyZGKgr.mjs} +83 -66
- package/dist/js/{listbox.model-CRReGOmu.d.mts → listbox.model-CuBOj4qe.d.mts} +15 -11
- package/dist/js/menu/index.mjs +167 -0
- package/dist/js/menu/menu.model.d.mts +33 -0
- package/dist/js/menu/menu.model.mjs +15 -0
- package/dist/js/{misc.listbox-Cyz2CRDy.mjs → misc.listbox-CjfBUbHD.mjs} +27 -69
- package/dist/js/{misc.listbox-gnoJhrTr.d.mts → misc.listbox-CtoGvXQo.d.mts} +2 -2
- package/dist/js/movable/movable.embedded.d.mts +2 -2
- package/dist/js/movable/movable.embedded.mjs +60 -72
- 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-DoyXLegc.d.mts +11 -0
- package/dist/js/movable.model-BHaK_mKw.d.mts +186 -0
- package/dist/js/navigable.model-BPOM8DZk.d.mts +44 -0
- package/dist/js/popover/index.d.mts +12 -0
- package/dist/js/{popover.mjs → popover/index.mjs} +40 -50
- package/dist/js/popover/popover.model.d.mts +2 -0
- package/dist/js/popover/popover.model.mjs +12 -0
- package/dist/js/popover.model-ubKNG612.d.mts +38 -0
- package/dist/js/resizable/resizable.embedded.d.mts +2 -2
- package/dist/js/resizable/resizable.embedded.mjs +44 -59
- 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-Bf1qBUdt.d.mts +11 -0
- package/dist/js/resizable.model-BwzJcTVJ.d.mts +46 -0
- package/dist/js/sortable/sortable.embedded.d.mts +2 -2
- package/dist/js/sortable/sortable.embedded.mjs +69 -82
- 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-DzBKAwSG.d.mts +11 -0
- package/dist/js/{splitter.d.mts → splitter/index.d.mts} +8 -7
- package/dist/js/splitter/index.mjs +284 -0
- package/dist/js/splitter/splitter.model.d.mts +2 -0
- package/dist/js/splitter/splitter.model.mjs +37 -0
- package/dist/js/splitter.model-DOLNjLVS.d.mts +57 -0
- package/dist/js/{tabs.d.mts → tabs/index.d.mts} +7 -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-DRBX_JtI.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} +60 -85
- package/dist/js/tooltip/tooltip.model.d.mts +2 -0
- package/dist/js/tooltip/tooltip.model.mjs +15 -0
- package/dist/js/tooltip.model-DRkY_BsL.d.mts +37 -0
- package/package.json +43 -37
- package/dist/js/color-picker.mjs +0 -924
- package/dist/js/combobox/constants.combobox.d.mts +0 -2
- package/dist/js/combobox/dom.combobox.d.mts +0 -27
- package/dist/js/combobox/event.combobox.d.mts +0 -23
- package/dist/js/combobox/misc.combobox.d.mts +0 -2
- package/dist/js/combobox/state.combobox.d.mts +0 -12
- package/dist/js/combobox/state.combobox.mjs +0 -2
- package/dist/js/constants.combobox-DmRAMC64.d.mts +0 -26
- package/dist/js/constants.listbox-DRsXUxd3.d.mts +0 -14
- package/dist/js/dialog.d.mts +0 -47
- package/dist/js/dialog.mjs +0 -131
- package/dist/js/draggable-a6w0J1OD.d.mts +0 -154
- package/dist/js/floatable.embedded-Bct4U5Dm.d.mts +0 -69
- package/dist/js/index-DJdFlTLm.d.mts +0 -177
- package/dist/js/internal/draggable.d.mts +0 -2
- package/dist/js/internal/navigable.d.mts +0 -37
- 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/menu.mjs +0 -172
- package/dist/js/popover.d.mts +0 -38
- package/dist/js/resizable.embedded-3qoR0Bjm.d.mts +0 -34
- package/dist/js/splitter.mjs +0 -322
- package/dist/js/toolbar.mjs +0 -31
- package/dist/js/tooltip.d.mts +0 -45
- package/src/css/a11y.scss +0 -13
- package/src/css/badge.scss +0 -62
- package/src/css/button.scss +0 -50
- package/src/css/color-picker.scss +0 -344
- package/src/css/color.scss +0 -113
- package/src/css/combobox.scss +0 -255
- package/src/css/content.scss +0 -181
- package/src/css/flex.scss +0 -107
- package/src/css/floatable.scss +0 -155
- package/src/css/form.scss +0 -575
- package/src/css/listbox.scss +0 -121
- package/src/css/message.scss +0 -74
- package/src/css/mixins/badge.mixins.scss +0 -53
- package/src/css/mixins/button.mixins.scss +0 -112
- package/src/css/mixins/input.mixins.scss +0 -114
- package/src/css/mixins/message.mixins.scss +0 -41
- package/src/css/mixins/misc.mixins.scss +0 -48
- package/src/css/mixins/shadow.mixins.scss +0 -57
- package/src/css/reset.scss +0 -392
- package/src/css/splitter.scss +0 -89
- package/src/css/table.scss +0 -107
- package/src/css/tabs.scss +0 -74
- package/src/js/color-picker.ts +0 -1653
- package/src/js/combobox/constants.combobox.ts +0 -83
- package/src/js/combobox/dom.combobox.ts +0 -411
- package/src/js/combobox/event.combobox.ts +0 -365
- package/src/js/combobox/index.ts +0 -382
- package/src/js/combobox/misc.combobox.ts +0 -104
- package/src/js/combobox/models.combobox.ts +0 -54
- package/src/js/combobox/state.combobox.ts +0 -246
- package/src/js/dialog.ts +0 -255
- package/src/js/floatable/floatable.embedded.ts +0 -336
- package/src/js/floatable/floatable.standalone.ts +0 -6
- package/src/js/focus-trap/focus-trap.embedded.ts +0 -411
- package/src/js/focus-trap/focus-trap.standalone.ts +0 -1
- package/src/js/index.ts +0 -16
- package/src/js/internal/attributable.ts +0 -73
- package/src/js/internal/draggable.ts +0 -657
- package/src/js/internal/listbox/listbox.constants.ts +0 -25
- package/src/js/internal/listbox/listbox.data.ts +0 -287
- package/src/js/internal/listbox/listbox.dom.ts +0 -446
- package/src/js/internal/listbox/listbox.event.ts +0 -129
- package/src/js/internal/listbox/listbox.form.ts +0 -125
- package/src/js/internal/listbox/listbox.misc.ts +0 -135
- package/src/js/internal/listbox/listbox.model.ts +0 -169
- package/src/js/internal/listbox/listbox.state.ts +0 -82
- package/src/js/internal/misc.ts +0 -27
- package/src/js/internal/navigable.ts +0 -317
- package/src/js/l10n.ts +0 -192
- package/src/js/listbox/constants.listbox.ts +0 -61
- package/src/js/listbox/event.listbox.ts +0 -106
- package/src/js/listbox/index.ts +0 -364
- package/src/js/listbox/misc.listbox.ts +0 -70
- package/src/js/listbox/state.listbox.ts +0 -194
- package/src/js/menu.ts +0 -348
- package/src/js/movable/movable.embedded.ts +0 -318
- package/src/js/movable/movable.standalone.ts +0 -2
- package/src/js/popover.ts +0 -229
- package/src/js/resizable/resizable.embedded.ts +0 -413
- package/src/js/resizable/resizable.standalone.ts +0 -5
- package/src/js/sortable/sortable.embedded.ts +0 -527
- package/src/js/sortable/sortable.standalone.ts +0 -2
- package/src/js/splitter.ts +0 -583
- package/src/js/tabs.ts +0 -441
- package/src/js/toolbar.ts +0 -63
- package/src/js/tooltip.ts +0 -367
- /package/dist/js/combobox/{models.combobox.mjs → combobox.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
package/src/js/combobox/index.ts
DELETED
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
import {parse} from '@oscarpalmer/atoms/string';
|
|
2
|
-
import {getAttribute} from '@oscarpalmer/toretto/attribute';
|
|
3
|
-
import {setListboxValue, setListboxValues} from '../internal/listbox/listbox.data';
|
|
4
|
-
import {
|
|
5
|
-
setListboxDisabled,
|
|
6
|
-
setListboxFilter,
|
|
7
|
-
setListboxLimit,
|
|
8
|
-
setListboxReadonly,
|
|
9
|
-
setListboxRequired,
|
|
10
|
-
} from '../internal/listbox/listbox.misc';
|
|
11
|
-
import type {OuiListboxLocalizations, OuiListboxType} from '../internal/listbox/listbox.model';
|
|
12
|
-
import {attachListbox, detachListbox} from '../internal/listbox/listbox.state';
|
|
13
|
-
import {updateLocalizations} from '../l10n';
|
|
14
|
-
import {COMBOBOX_TAGNAME} from './constants.combobox';
|
|
15
|
-
import type {OuiComboboxState} from './models.combobox';
|
|
16
|
-
import {
|
|
17
|
-
comboboxStates,
|
|
18
|
-
createComboboxState,
|
|
19
|
-
onAttachCombobox,
|
|
20
|
-
onDetachCombobox,
|
|
21
|
-
} from './state.combobox';
|
|
22
|
-
|
|
23
|
-
// #region Types
|
|
24
|
-
|
|
25
|
-
declare global {
|
|
26
|
-
interface HTMLElementTagNameMap {
|
|
27
|
-
[COMBOBOX_TAGNAME]: OuiComboboxElement;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export class OuiComboboxElement extends HTMLElement {
|
|
32
|
-
static formAssociated = true;
|
|
33
|
-
|
|
34
|
-
static observedAttributes = ['max', 'min', 'required', 'value'];
|
|
35
|
-
|
|
36
|
-
readonly #internals: ElementInternals;
|
|
37
|
-
|
|
38
|
-
#restored?: string[];
|
|
39
|
-
|
|
40
|
-
#state!: OuiComboboxState;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Is the combobox disabled?
|
|
44
|
-
*/
|
|
45
|
-
get disabled(): boolean {
|
|
46
|
-
return this.#state?.disabled ?? false;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Should the combobox be disabled?
|
|
51
|
-
*/
|
|
52
|
-
set disabled(value: boolean) {
|
|
53
|
-
if (typeof value === 'boolean' && value !== this.disabled) {
|
|
54
|
-
setListboxDisabled(this.#state, value);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Current filter value
|
|
60
|
-
*/
|
|
61
|
-
get filter(): string {
|
|
62
|
-
return this.#state.filter.element.value;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Set the filter value
|
|
67
|
-
*/
|
|
68
|
-
set filter(value: string) {
|
|
69
|
-
setListboxFilter(this.#state, value);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Form element associated with the combobox
|
|
74
|
-
*/
|
|
75
|
-
get form(): HTMLFormElement | null {
|
|
76
|
-
return this.#internals.form;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Label elements associated with the combobox
|
|
81
|
-
*/
|
|
82
|
-
get labels(): NodeList {
|
|
83
|
-
return this.#internals.labels;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Maximum number of selected options
|
|
88
|
-
*/
|
|
89
|
-
get max(): number | undefined {
|
|
90
|
-
return this.#state?.max;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Set the maximum number of selected options
|
|
95
|
-
*/
|
|
96
|
-
set max(value: number) {
|
|
97
|
-
setListboxLimit('max', this.#state, value);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Minimum number of selected options
|
|
102
|
-
*/
|
|
103
|
-
get min(): number | undefined {
|
|
104
|
-
return this.#state?.min;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Set the minimum number of selected options
|
|
109
|
-
*/
|
|
110
|
-
set min(value: number) {
|
|
111
|
-
setListboxLimit('min', this.#state, value);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Does the combobox allow multiple values?
|
|
116
|
-
*/
|
|
117
|
-
get multiple(): boolean {
|
|
118
|
-
return this.hasAttribute('multiple');
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Name of the combobox
|
|
123
|
-
*/
|
|
124
|
-
get name(): string {
|
|
125
|
-
return getAttribute(this, 'name') ?? '';
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Is the combobox readonly?
|
|
130
|
-
*/
|
|
131
|
-
get readonly(): boolean {
|
|
132
|
-
return this.#state?.readonly ?? false;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Should the combobox be readonly?
|
|
137
|
-
*/
|
|
138
|
-
set readonly(value: boolean) {
|
|
139
|
-
if (typeof value === 'boolean' && value !== this.readonly) {
|
|
140
|
-
setListboxReadonly(this.#state, value);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Is the combobox required?
|
|
146
|
-
*/
|
|
147
|
-
get required(): boolean {
|
|
148
|
-
return this.#state?.required ?? false;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Should the combobox be required?
|
|
153
|
-
*/
|
|
154
|
-
set required(value: boolean) {
|
|
155
|
-
if (typeof value === 'boolean' && value !== this.required) {
|
|
156
|
-
setListboxRequired(this.#state, value);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Selected options
|
|
162
|
-
*/
|
|
163
|
-
get selected(): HTMLElement[] {
|
|
164
|
-
return this.#state.options.selected.slice();
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Type of combobox
|
|
169
|
-
*/
|
|
170
|
-
get type(): OuiListboxType {
|
|
171
|
-
return this.#state.type;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Validation message for the combobox
|
|
176
|
-
*/
|
|
177
|
-
get validationMessage(): string {
|
|
178
|
-
return this.#internals.validationMessage;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Validity state for the combobox
|
|
183
|
-
*/
|
|
184
|
-
get validity(): ValidityState {
|
|
185
|
-
return this.#internals.validity;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Current value
|
|
190
|
-
*/
|
|
191
|
-
get value(): string {
|
|
192
|
-
return this.#state.values.current[0];
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Set the value
|
|
197
|
-
*/
|
|
198
|
-
set value(value: unknown) {
|
|
199
|
-
setListboxValue(this.#state, value);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Current values
|
|
204
|
-
*/
|
|
205
|
-
get values(): string[] {
|
|
206
|
-
return this.#state.values.current.slice();
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Set the values
|
|
211
|
-
*/
|
|
212
|
-
set values(values: unknown[]) {
|
|
213
|
-
setListboxValues(this.#state, values);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Can the combobox be validated?
|
|
218
|
-
*/
|
|
219
|
-
get willValidate(): boolean {
|
|
220
|
-
return this.#internals.willValidate;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
constructor() {
|
|
224
|
-
super();
|
|
225
|
-
|
|
226
|
-
this.#internals = this.attachInternals();
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
attributeChangedCallback(name: string, _: string | null, value: string | null): void {
|
|
230
|
-
if (this.#state == null) {
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
switch (name) {
|
|
235
|
-
case 'required':
|
|
236
|
-
this[name] = this.hasAttribute(name);
|
|
237
|
-
break;
|
|
238
|
-
|
|
239
|
-
case 'max':
|
|
240
|
-
case 'min':
|
|
241
|
-
setListboxLimit(name, this.#state, value);
|
|
242
|
-
break;
|
|
243
|
-
|
|
244
|
-
case 'value':
|
|
245
|
-
this.value = value ?? '';
|
|
246
|
-
break;
|
|
247
|
-
|
|
248
|
-
default:
|
|
249
|
-
break;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Check if the combobox is valid
|
|
255
|
-
*
|
|
256
|
-
* @returns `true` if the combobox is valid, otherwise `false`
|
|
257
|
-
*/
|
|
258
|
-
checkValidity(): boolean {
|
|
259
|
-
return this.#internals.checkValidity();
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Clear all selected options
|
|
264
|
-
*/
|
|
265
|
-
clear(): void {
|
|
266
|
-
setListboxValues(this.#state, []);
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
connectedCallback(): void {
|
|
270
|
-
if (this.#state == null) {
|
|
271
|
-
this.#initialize();
|
|
272
|
-
} else {
|
|
273
|
-
attachListbox(this.#state, comboboxStates, onAttachCombobox);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
disconnectedCallback(): void {
|
|
278
|
-
if (this.#state != null) {
|
|
279
|
-
detachListbox(this.#state, comboboxStates, onDetachCombobox);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
formDisabledCallback(disabled: boolean): void {
|
|
284
|
-
this.disabled = disabled;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
formResetCallback(): void {
|
|
288
|
-
setListboxValues(this.#state, this.#state.values.initial);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
formStateRestoreCallback(state: unknown, reason: unknown): void {
|
|
292
|
-
if (reason !== 'restore') {
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
const parsed = typeof state === 'string' ? parse(state) : undefined;
|
|
297
|
-
|
|
298
|
-
if (!Array.isArray(parsed)) {
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
if (this.#state == null) {
|
|
303
|
-
this.#restored = parsed;
|
|
304
|
-
} else {
|
|
305
|
-
setListboxValues(this.#state, parsed);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Check if the combobox is valid and report any validation errors
|
|
311
|
-
*
|
|
312
|
-
* @returns `true` if the combobox is valid, otherwise `false`
|
|
313
|
-
*/
|
|
314
|
-
reportValidity(): boolean {
|
|
315
|
-
return this.#internals.reportValidity();
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
/**
|
|
319
|
-
* Set a custom validation message for the combobox
|
|
320
|
-
*
|
|
321
|
-
* @param message Validation message
|
|
322
|
-
*/
|
|
323
|
-
setCustomValidity(message: string): void {
|
|
324
|
-
this.#internals.setValidity({customError: message !== ''}, message, this);
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* Set combobox localizations for a specific language
|
|
329
|
-
*
|
|
330
|
-
* @param language Language code
|
|
331
|
-
* @param localizations Localizations for language
|
|
332
|
-
*/
|
|
333
|
-
setLocalizations(language: string, localizations: Partial<OuiListboxLocalizations>): void;
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Set combobox localizations for one or more languages
|
|
337
|
-
*
|
|
338
|
-
* @param localizations Localizations for one or more languages
|
|
339
|
-
*/
|
|
340
|
-
setLocalizations(localizations: Record<string, Partial<OuiListboxLocalizations>>): void;
|
|
341
|
-
|
|
342
|
-
setLocalizations(
|
|
343
|
-
first: string | Record<string, Partial<OuiListboxLocalizations>>,
|
|
344
|
-
second?: Partial<OuiListboxLocalizations>,
|
|
345
|
-
): void {
|
|
346
|
-
updateLocalizations(
|
|
347
|
-
this.#state.localizations.global,
|
|
348
|
-
typeof first === 'string'
|
|
349
|
-
? {
|
|
350
|
-
[first]: second!,
|
|
351
|
-
}
|
|
352
|
-
: first,
|
|
353
|
-
this.#state.localizations.component,
|
|
354
|
-
);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
#initialize(): void {
|
|
358
|
-
this.tabIndex = -1;
|
|
359
|
-
|
|
360
|
-
this.#state = createComboboxState(this, this.#internals);
|
|
361
|
-
|
|
362
|
-
if (this.#restored != null) {
|
|
363
|
-
setListboxValues(this.#state, this.#restored);
|
|
364
|
-
|
|
365
|
-
this.#restored = undefined;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
// #endregion
|
|
371
|
-
|
|
372
|
-
// #region Initialization
|
|
373
|
-
|
|
374
|
-
customElements.define(COMBOBOX_TAGNAME, OuiComboboxElement);
|
|
375
|
-
|
|
376
|
-
// #endregion
|
|
377
|
-
|
|
378
|
-
// #region Exports
|
|
379
|
-
|
|
380
|
-
export {setComboboxLocalizations} from './misc.combobox';
|
|
381
|
-
|
|
382
|
-
// #endregion
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import {updateListboxMessage, updateListboxValueLabel} from '../internal/listbox/listbox.dom';
|
|
2
|
-
import type {
|
|
3
|
-
OuiListboxAutoComplete,
|
|
4
|
-
OuiListboxAutoCompleteType,
|
|
5
|
-
OuiListboxLocalizations,
|
|
6
|
-
} from '../internal/listbox/listbox.model';
|
|
7
|
-
import {getAttributeValue} from '../internal/misc';
|
|
8
|
-
import {OuiLocalizations, updateLocalizations} from '../l10n';
|
|
9
|
-
import {COMBOBOX_AUTOCOMPLETES} from './constants.combobox';
|
|
10
|
-
import {updateComboboxSelectionItems} from './dom.combobox';
|
|
11
|
-
import type {OuiComboboxElement} from './index';
|
|
12
|
-
import {comboboxLocalizations, comboboxStates} from './state.combobox';
|
|
13
|
-
|
|
14
|
-
// #region Functions
|
|
15
|
-
|
|
16
|
-
export function getComboboxAutoComplete(
|
|
17
|
-
element: OuiComboboxElement,
|
|
18
|
-
select: boolean,
|
|
19
|
-
): OuiListboxAutoComplete {
|
|
20
|
-
let value: OuiListboxAutoCompleteType;
|
|
21
|
-
|
|
22
|
-
if (select) {
|
|
23
|
-
value = 'list';
|
|
24
|
-
} else {
|
|
25
|
-
value = getAttributeValue(element, 'autocomplete', COMBOBOX_AUTOCOMPLETES, 'none');
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
value,
|
|
30
|
-
both: value === 'both',
|
|
31
|
-
inline: value === 'inline',
|
|
32
|
-
list: value === 'list',
|
|
33
|
-
none: value === 'none',
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function getComboboxId(): string {
|
|
38
|
-
index += 1;
|
|
39
|
-
|
|
40
|
-
return `oui_combobox_${index}`;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function hasTextSelection(element: HTMLElement): element is HTMLInputElement {
|
|
44
|
-
return element instanceof HTMLInputElement && element.selectionStart !== element.selectionEnd;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Set combobox localizations for a specific language
|
|
49
|
-
*
|
|
50
|
-
* @param language Language code
|
|
51
|
-
* @param localizations Localizations for language
|
|
52
|
-
*/
|
|
53
|
-
export function setComboboxLocalizations(
|
|
54
|
-
language: string,
|
|
55
|
-
localizations: Partial<OuiListboxLocalizations>,
|
|
56
|
-
): void;
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Set combobox localizations for one or more languages
|
|
60
|
-
*
|
|
61
|
-
* @param localizations Localizations for one or more languages
|
|
62
|
-
*/
|
|
63
|
-
export function setComboboxLocalizations(
|
|
64
|
-
localizations: Record<string, Partial<OuiListboxLocalizations>>,
|
|
65
|
-
): void;
|
|
66
|
-
|
|
67
|
-
export function setComboboxLocalizations(
|
|
68
|
-
first: string | Record<string, Partial<OuiListboxLocalizations>>,
|
|
69
|
-
second?: Partial<OuiListboxLocalizations>,
|
|
70
|
-
): void {
|
|
71
|
-
updateComboboxLocalizations(comboboxLocalizations, comboboxLocalizations.values, first, second);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function updateComboboxLocalizations(
|
|
75
|
-
instance: OuiLocalizations<OuiListboxLocalizations>,
|
|
76
|
-
destination: Record<string, Partial<OuiListboxLocalizations>>,
|
|
77
|
-
first: string | Record<string, Partial<OuiListboxLocalizations>>,
|
|
78
|
-
second?: Partial<OuiListboxLocalizations>,
|
|
79
|
-
): void {
|
|
80
|
-
updateLocalizations(
|
|
81
|
-
instance,
|
|
82
|
-
typeof first === 'string'
|
|
83
|
-
? {
|
|
84
|
-
[first]: second!,
|
|
85
|
-
}
|
|
86
|
-
: first,
|
|
87
|
-
destination,
|
|
88
|
-
() => {
|
|
89
|
-
for (const state of comboboxStates.set) {
|
|
90
|
-
updateListboxMessage(state);
|
|
91
|
-
updateListboxValueLabel(state);
|
|
92
|
-
updateComboboxSelectionItems(state);
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// #endregion
|
|
99
|
-
|
|
100
|
-
// #region Variables
|
|
101
|
-
|
|
102
|
-
let index = 0;
|
|
103
|
-
|
|
104
|
-
// #endregion
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type {OuiFloatable} from '../floatable/floatable.embedded';
|
|
2
|
-
import type {OuiListboxState, OuiListboxType} from '../internal/listbox/listbox.model';
|
|
3
|
-
|
|
4
|
-
// #region Types
|
|
5
|
-
|
|
6
|
-
export type OuiComboboxAnchor = {
|
|
7
|
-
container?: HTMLElement;
|
|
8
|
-
element: HTMLElement;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export type OuiComboboxFilter = {
|
|
12
|
-
element: HTMLInputElement;
|
|
13
|
-
value: string;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export type OuiComboboxGroup = {
|
|
17
|
-
element: HTMLElement;
|
|
18
|
-
header: HTMLElement;
|
|
19
|
-
options: HTMLElement[];
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export type OuiComboboxLabel = {
|
|
23
|
-
element: HTMLLabelElement;
|
|
24
|
-
id: string;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export type OuiComboboxOptions = {
|
|
28
|
-
all: HTMLElement[];
|
|
29
|
-
selected: HTMLElement[];
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export type OuiComboboxSelection = {
|
|
33
|
-
container: HTMLElement;
|
|
34
|
-
items: OuiComboboxSelectionItem[];
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export type OuiComboboxSelectionItem = {
|
|
38
|
-
button: HTMLButtonElement;
|
|
39
|
-
element: HTMLElement;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export type OuiComboboxState = {
|
|
43
|
-
anchor: OuiComboboxAnchor;
|
|
44
|
-
floatable: OuiFloatable;
|
|
45
|
-
selection?: OuiComboboxSelection;
|
|
46
|
-
type: OuiListboxType;
|
|
47
|
-
} & OuiListboxState;
|
|
48
|
-
|
|
49
|
-
export type OuiComboboxValues = {
|
|
50
|
-
current: string[];
|
|
51
|
-
initial: string[];
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// #endregion
|