@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.
Files changed (264) hide show
  1. package/README.md +1 -1
  2. package/dist/css/badge.css +11 -8
  3. package/dist/css/button.css +106 -14
  4. package/dist/css/color-picker.css +555 -73
  5. package/dist/css/color.css +86 -86
  6. package/dist/css/combobox.css +98 -4
  7. package/dist/css/content.css +7 -6
  8. package/dist/css/floatable.css +1 -3
  9. package/dist/css/form.css +99 -6
  10. package/dist/css/icon.css +99 -0
  11. package/dist/css/listbox.css +3 -0
  12. package/dist/css/message.css +4 -3
  13. package/dist/css/mixins/button.mixins.css +1 -0
  14. package/dist/css/reset.css +1 -1
  15. package/dist/css/tabs.css +95 -3
  16. package/dist/css/typography.css +90 -0
  17. package/dist/js/color-picker/color-picker.constants.d.mts +2 -0
  18. package/dist/js/color-picker/color-picker.constants.mjs +60 -0
  19. package/dist/js/color-picker/color-picker.dom.d.mts +8 -0
  20. package/dist/js/color-picker/color-picker.dom.mjs +191 -0
  21. package/dist/js/color-picker/color-picker.event.d.mts +9 -0
  22. package/dist/js/color-picker/color-picker.event.mjs +2 -0
  23. package/dist/js/color-picker/color-picker.form.d.mts +5 -0
  24. package/dist/js/color-picker/color-picker.form.mjs +27 -0
  25. package/dist/js/color-picker/color-picker.misc.d.mts +2 -0
  26. package/dist/js/color-picker/color-picker.misc.mjs +2 -0
  27. package/dist/js/color-picker/color-picker.model.d.mts +2 -0
  28. package/dist/js/color-picker/color-picker.model.mjs +24 -0
  29. package/dist/js/color-picker/color-picker.output.d.mts +8 -0
  30. package/dist/js/color-picker/color-picker.output.mjs +235 -0
  31. package/dist/js/color-picker/color-picker.state.d.mts +8 -0
  32. package/dist/js/color-picker/color-picker.state.mjs +2 -0
  33. package/dist/js/{color-picker.d.mts → color-picker/index.d.mts} +10 -43
  34. package/dist/js/color-picker/index.mjs +305 -0
  35. package/dist/js/color-picker.constants-D1mxw_Le.d.mts +179 -0
  36. package/dist/js/color-picker.event-Cksj5TvS.mjs +500 -0
  37. package/dist/js/color-picker.misc-CtsXGrOe.d.mts +27 -0
  38. package/dist/js/combobox/combobox.constants.d.mts +2 -0
  39. package/dist/js/combobox/{constants.combobox.mjs → combobox.constants.mjs} +21 -21
  40. package/dist/js/combobox/combobox.dom.d.mts +26 -0
  41. package/dist/js/combobox/{dom.combobox.mjs → combobox.dom.mjs} +44 -37
  42. package/dist/js/combobox/combobox.event.d.mts +22 -0
  43. package/dist/js/combobox/{event.combobox.mjs → combobox.event.mjs} +1 -1
  44. package/dist/js/combobox/combobox.misc.d.mts +2 -0
  45. package/dist/js/combobox/{misc.combobox.mjs → combobox.misc.mjs} +1 -1
  46. package/dist/js/combobox/combobox.model.d.mts +2 -0
  47. package/dist/js/combobox/combobox.state.d.mts +10 -0
  48. package/dist/js/combobox/combobox.state.mjs +2 -0
  49. package/dist/js/combobox/index.d.mts +163 -2
  50. package/dist/js/combobox/index.mjs +53 -52
  51. package/dist/js/combobox.constants-DZVkMP5g.d.mts +19 -0
  52. package/dist/js/combobox.misc-C1tPZZDi.d.mts +22 -0
  53. package/dist/js/{combobox/models.combobox.d.mts → combobox.model-oDV06XCN.d.mts} +6 -6
  54. package/dist/js/{state.combobox-Qm3FWzYW.mjs → combobox.state-BfJ3Hxg8.mjs} +96 -82
  55. package/dist/js/constants.listbox-C5Ap6Ag_.d.mts +9 -0
  56. package/dist/js/dialog/dialog.model.d.mts +2 -0
  57. package/dist/js/dialog/dialog.model.mjs +11 -0
  58. package/dist/js/dialog/index.d.mts +12 -0
  59. package/dist/js/dialog/index.mjs +123 -0
  60. package/dist/js/dialog.model-DX2mndMh.d.mts +45 -0
  61. package/dist/js/floatable/floatable.embedded.d.mts +2 -2
  62. package/dist/js/floatable/floatable.embedded.mjs +64 -92
  63. package/dist/js/floatable/floatable.model.d.mts +2 -0
  64. package/dist/js/floatable/floatable.model.mjs +23 -0
  65. package/dist/js/floatable/floatable.standalone.d.mts +2 -1
  66. package/dist/js/floatable.embedded-MeTyXjFn.d.mts +17 -0
  67. package/dist/js/floatable.model-DXsQgoU7.d.mts +62 -0
  68. package/dist/js/focus-trap/focus-trap.embedded.d.mts +2 -2
  69. package/dist/js/focus-trap/focus-trap.embedded.mjs +112 -134
  70. package/dist/js/focus-trap/focus-trap.model.d.mts +2 -0
  71. package/dist/js/focus-trap/focus-trap.model.mjs +15 -0
  72. package/dist/js/focus-trap/focus-trap.standalone.d.mts +2 -1
  73. package/dist/js/focus-trap.embedded-DIU05m1z.d.mts +13 -0
  74. package/dist/js/{focus-trap.embedded-DR8NpZfr.d.mts → focus-trap.model-BeX6UYlw.d.mts} +16 -18
  75. package/dist/js/index.d.mts +26 -14
  76. package/dist/js/index.mjs +18 -15
  77. package/dist/js/internal/attributable.d.mts +2 -3
  78. package/dist/js/internal/attributable.mjs +3 -2
  79. package/dist/js/internal/draggable/draggable.model.d.mts +2 -0
  80. package/dist/js/internal/draggable/draggable.model.mjs +37 -0
  81. package/dist/js/internal/draggable/index.d.mts +13 -0
  82. package/dist/js/internal/{draggable.mjs → draggable/index.mjs} +83 -114
  83. package/dist/js/internal/listbox/listbox.constants.d.mts +7 -10
  84. package/dist/js/internal/listbox/listbox.constants.mjs +15 -16
  85. package/dist/js/internal/listbox/listbox.data.d.mts +9 -10
  86. package/dist/js/internal/listbox/listbox.data.mjs +1 -1
  87. package/dist/js/internal/listbox/listbox.dom.d.mts +19 -20
  88. package/dist/js/internal/listbox/listbox.dom.mjs +1 -1
  89. package/dist/js/internal/listbox/listbox.event.d.mts +3 -4
  90. package/dist/js/internal/listbox/listbox.event.mjs +23 -20
  91. package/dist/js/internal/listbox/listbox.form.d.mts +4 -5
  92. package/dist/js/internal/listbox/listbox.form.mjs +15 -12
  93. package/dist/js/internal/listbox/listbox.misc.d.mts +10 -11
  94. package/dist/js/internal/listbox/listbox.misc.mjs +1 -1
  95. package/dist/js/internal/listbox/listbox.model.d.mts +2 -2
  96. package/dist/js/internal/listbox/listbox.state.d.mts +5 -6
  97. package/dist/js/internal/listbox/listbox.state.mjs +19 -20
  98. package/dist/js/internal/misc.d.mts +5 -4
  99. package/dist/js/internal/misc.mjs +7 -1
  100. package/dist/js/internal/navigable/index.d.mts +6 -0
  101. package/dist/js/internal/navigable/index.mjs +125 -0
  102. package/dist/js/internal/navigable/navigable.model.d.mts +2 -0
  103. package/dist/js/internal/navigable/navigable.model.mjs +18 -0
  104. package/dist/js/l10n/index.d.mts +9 -0
  105. package/dist/js/{l10n.mjs → l10n/index.mjs} +50 -23
  106. package/dist/js/l10n/l10n.model.d.mts +2 -0
  107. package/dist/js/l10n/l10n.model.mjs +9 -0
  108. package/dist/js/l10n.model-D6a9frgl.d.mts +26 -0
  109. package/dist/js/listbox/constants.listbox.d.mts +2 -2
  110. package/dist/js/listbox/constants.listbox.mjs +10 -14
  111. package/dist/js/listbox/event.listbox.d.mts +6 -7
  112. package/dist/js/listbox/event.listbox.mjs +47 -1
  113. package/dist/js/listbox/index.d.mts +8 -6
  114. package/dist/js/listbox/index.mjs +47 -49
  115. package/dist/js/listbox/misc.listbox.d.mts +1 -1
  116. package/dist/js/listbox/misc.listbox.mjs +1 -1
  117. package/dist/js/listbox/state.listbox.d.mts +8 -10
  118. package/dist/js/listbox/state.listbox.mjs +2 -2
  119. package/dist/js/{listbox.data-C7CRa5Ya.mjs → listbox.data-BQyZGKgr.mjs} +83 -66
  120. package/dist/js/{listbox.model-CRReGOmu.d.mts → listbox.model-CuBOj4qe.d.mts} +15 -11
  121. package/dist/js/menu/index.mjs +167 -0
  122. package/dist/js/menu/menu.model.d.mts +33 -0
  123. package/dist/js/menu/menu.model.mjs +15 -0
  124. package/dist/js/{misc.listbox-Cyz2CRDy.mjs → misc.listbox-CjfBUbHD.mjs} +27 -69
  125. package/dist/js/{misc.listbox-gnoJhrTr.d.mts → misc.listbox-CtoGvXQo.d.mts} +2 -2
  126. package/dist/js/movable/movable.embedded.d.mts +2 -2
  127. package/dist/js/movable/movable.embedded.mjs +60 -72
  128. package/dist/js/movable/movable.model.d.mts +2 -0
  129. package/dist/js/movable/movable.model.mjs +12 -0
  130. package/dist/js/movable/movable.standalone.d.mts +2 -1
  131. package/dist/js/movable.embedded-DoyXLegc.d.mts +11 -0
  132. package/dist/js/movable.model-BHaK_mKw.d.mts +186 -0
  133. package/dist/js/navigable.model-BPOM8DZk.d.mts +44 -0
  134. package/dist/js/popover/index.d.mts +12 -0
  135. package/dist/js/{popover.mjs → popover/index.mjs} +40 -50
  136. package/dist/js/popover/popover.model.d.mts +2 -0
  137. package/dist/js/popover/popover.model.mjs +12 -0
  138. package/dist/js/popover.model-ubKNG612.d.mts +38 -0
  139. package/dist/js/resizable/resizable.embedded.d.mts +2 -2
  140. package/dist/js/resizable/resizable.embedded.mjs +44 -59
  141. package/dist/js/resizable/resizable.model.d.mts +2 -0
  142. package/dist/js/resizable/resizable.model.mjs +21 -0
  143. package/dist/js/resizable/resizable.standalone.d.mts +2 -1
  144. package/dist/js/resizable.embedded-Bf1qBUdt.d.mts +11 -0
  145. package/dist/js/resizable.model-BwzJcTVJ.d.mts +46 -0
  146. package/dist/js/sortable/sortable.embedded.d.mts +2 -2
  147. package/dist/js/sortable/sortable.embedded.mjs +69 -82
  148. package/dist/js/sortable/sortable.model.d.mts +2 -0
  149. package/dist/js/sortable/sortable.model.mjs +24 -0
  150. package/dist/js/sortable/sortable.standalone.d.mts +2 -1
  151. package/dist/js/sortable.embedded-DzBKAwSG.d.mts +11 -0
  152. package/dist/js/{splitter.d.mts → splitter/index.d.mts} +8 -7
  153. package/dist/js/splitter/index.mjs +284 -0
  154. package/dist/js/splitter/splitter.model.d.mts +2 -0
  155. package/dist/js/splitter/splitter.model.mjs +37 -0
  156. package/dist/js/splitter.model-DOLNjLVS.d.mts +57 -0
  157. package/dist/js/{tabs.d.mts → tabs/index.d.mts} +7 -8
  158. package/dist/js/{tabs.mjs → tabs/index.mjs} +58 -58
  159. package/dist/js/tabs/tabs.model.d.mts +2 -0
  160. package/dist/js/tabs/tabs.model.mjs +18 -0
  161. package/dist/js/tabs.model-DRBX_JtI.d.mts +40 -0
  162. package/dist/js/toolbar/index.mjs +27 -0
  163. package/dist/js/toolbar/toolbar.model.d.mts +11 -0
  164. package/dist/js/toolbar/toolbar.model.mjs +7 -0
  165. package/dist/js/tooltip/index.d.mts +19 -0
  166. package/dist/js/{tooltip.mjs → tooltip/index.mjs} +60 -85
  167. package/dist/js/tooltip/tooltip.model.d.mts +2 -0
  168. package/dist/js/tooltip/tooltip.model.mjs +15 -0
  169. package/dist/js/tooltip.model-DRkY_BsL.d.mts +37 -0
  170. package/package.json +43 -37
  171. package/dist/js/color-picker.mjs +0 -924
  172. package/dist/js/combobox/constants.combobox.d.mts +0 -2
  173. package/dist/js/combobox/dom.combobox.d.mts +0 -27
  174. package/dist/js/combobox/event.combobox.d.mts +0 -23
  175. package/dist/js/combobox/misc.combobox.d.mts +0 -2
  176. package/dist/js/combobox/state.combobox.d.mts +0 -12
  177. package/dist/js/combobox/state.combobox.mjs +0 -2
  178. package/dist/js/constants.combobox-DmRAMC64.d.mts +0 -26
  179. package/dist/js/constants.listbox-DRsXUxd3.d.mts +0 -14
  180. package/dist/js/dialog.d.mts +0 -47
  181. package/dist/js/dialog.mjs +0 -131
  182. package/dist/js/draggable-a6w0J1OD.d.mts +0 -154
  183. package/dist/js/floatable.embedded-Bct4U5Dm.d.mts +0 -69
  184. package/dist/js/index-DJdFlTLm.d.mts +0 -177
  185. package/dist/js/internal/draggable.d.mts +0 -2
  186. package/dist/js/internal/navigable.d.mts +0 -37
  187. package/dist/js/internal/navigable.mjs +0 -135
  188. package/dist/js/l10n-Bn-7RcwR.d.mts +0 -20
  189. package/dist/js/l10n.d.mts +0 -2
  190. package/dist/js/menu.mjs +0 -172
  191. package/dist/js/popover.d.mts +0 -38
  192. package/dist/js/resizable.embedded-3qoR0Bjm.d.mts +0 -34
  193. package/dist/js/splitter.mjs +0 -322
  194. package/dist/js/toolbar.mjs +0 -31
  195. package/dist/js/tooltip.d.mts +0 -45
  196. package/src/css/a11y.scss +0 -13
  197. package/src/css/badge.scss +0 -62
  198. package/src/css/button.scss +0 -50
  199. package/src/css/color-picker.scss +0 -344
  200. package/src/css/color.scss +0 -113
  201. package/src/css/combobox.scss +0 -255
  202. package/src/css/content.scss +0 -181
  203. package/src/css/flex.scss +0 -107
  204. package/src/css/floatable.scss +0 -155
  205. package/src/css/form.scss +0 -575
  206. package/src/css/listbox.scss +0 -121
  207. package/src/css/message.scss +0 -74
  208. package/src/css/mixins/badge.mixins.scss +0 -53
  209. package/src/css/mixins/button.mixins.scss +0 -112
  210. package/src/css/mixins/input.mixins.scss +0 -114
  211. package/src/css/mixins/message.mixins.scss +0 -41
  212. package/src/css/mixins/misc.mixins.scss +0 -48
  213. package/src/css/mixins/shadow.mixins.scss +0 -57
  214. package/src/css/reset.scss +0 -392
  215. package/src/css/splitter.scss +0 -89
  216. package/src/css/table.scss +0 -107
  217. package/src/css/tabs.scss +0 -74
  218. package/src/js/color-picker.ts +0 -1653
  219. package/src/js/combobox/constants.combobox.ts +0 -83
  220. package/src/js/combobox/dom.combobox.ts +0 -411
  221. package/src/js/combobox/event.combobox.ts +0 -365
  222. package/src/js/combobox/index.ts +0 -382
  223. package/src/js/combobox/misc.combobox.ts +0 -104
  224. package/src/js/combobox/models.combobox.ts +0 -54
  225. package/src/js/combobox/state.combobox.ts +0 -246
  226. package/src/js/dialog.ts +0 -255
  227. package/src/js/floatable/floatable.embedded.ts +0 -336
  228. package/src/js/floatable/floatable.standalone.ts +0 -6
  229. package/src/js/focus-trap/focus-trap.embedded.ts +0 -411
  230. package/src/js/focus-trap/focus-trap.standalone.ts +0 -1
  231. package/src/js/index.ts +0 -16
  232. package/src/js/internal/attributable.ts +0 -73
  233. package/src/js/internal/draggable.ts +0 -657
  234. package/src/js/internal/listbox/listbox.constants.ts +0 -25
  235. package/src/js/internal/listbox/listbox.data.ts +0 -287
  236. package/src/js/internal/listbox/listbox.dom.ts +0 -446
  237. package/src/js/internal/listbox/listbox.event.ts +0 -129
  238. package/src/js/internal/listbox/listbox.form.ts +0 -125
  239. package/src/js/internal/listbox/listbox.misc.ts +0 -135
  240. package/src/js/internal/listbox/listbox.model.ts +0 -169
  241. package/src/js/internal/listbox/listbox.state.ts +0 -82
  242. package/src/js/internal/misc.ts +0 -27
  243. package/src/js/internal/navigable.ts +0 -317
  244. package/src/js/l10n.ts +0 -192
  245. package/src/js/listbox/constants.listbox.ts +0 -61
  246. package/src/js/listbox/event.listbox.ts +0 -106
  247. package/src/js/listbox/index.ts +0 -364
  248. package/src/js/listbox/misc.listbox.ts +0 -70
  249. package/src/js/listbox/state.listbox.ts +0 -194
  250. package/src/js/menu.ts +0 -348
  251. package/src/js/movable/movable.embedded.ts +0 -318
  252. package/src/js/movable/movable.standalone.ts +0 -2
  253. package/src/js/popover.ts +0 -229
  254. package/src/js/resizable/resizable.embedded.ts +0 -413
  255. package/src/js/resizable/resizable.standalone.ts +0 -5
  256. package/src/js/sortable/sortable.embedded.ts +0 -527
  257. package/src/js/sortable/sortable.standalone.ts +0 -2
  258. package/src/js/splitter.ts +0 -583
  259. package/src/js/tabs.ts +0 -441
  260. package/src/js/toolbar.ts +0 -63
  261. package/src/js/tooltip.ts +0 -367
  262. /package/dist/js/combobox/{models.combobox.mjs → combobox.model.mjs} +0 -0
  263. /package/dist/js/{menu.d.mts → menu/index.d.mts} +0 -0
  264. /package/dist/js/{toolbar.d.mts → toolbar/index.d.mts} +0 -0
@@ -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