@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,15 +1,16 @@
1
- import { getLocalization, localize } from "./l10n.mjs";
1
+ import { getLocalization, localize } from "./l10n/index.mjs";
2
2
  import { listboxScrollOptions } from "./internal/listbox/listbox.constants.mjs";
3
3
  import { updateListboxForm, updateListboxValidity } from "./internal/listbox/listbox.form.mjs";
4
4
  import { setAria } from "@oscarpalmer/toretto/aria";
5
5
  import { setAttribute } from "@oscarpalmer/toretto/attribute";
6
6
  import { dispatch } from "@oscarpalmer/toretto/event";
7
+ import { filter } from "@oscarpalmer/atoms/array/filter";
8
+ import { createElement } from "@oscarpalmer/toretto/create";
7
9
  import { getString } from "@oscarpalmer/atoms/string";
8
10
  import { getData } from "@oscarpalmer/toretto/data";
9
- import { createElement, setAria as setAria$1, setAttribute as setAttribute$1 } from "@oscarpalmer/toretto";
10
11
  //#region src/js/internal/listbox/listbox.misc.ts
11
12
  function generateListboxIds(prefix, select) {
12
- const elements = [...select.children].flatMap((child) => child instanceof HTMLOptGroupElement ? [child, ...[...child.children].filter((groupChild) => groupChild instanceof HTMLOptionElement)] : child instanceof HTMLOptionElement ? [child] : []);
13
+ const elements = [...select.children].flatMap((child) => child instanceof HTMLOptGroupElement ? [child, ...filter([...child.children], (groupChild) => groupChild instanceof HTMLOptionElement)] : child instanceof HTMLOptionElement ? [child] : []);
13
14
  const { length } = elements;
14
15
  for (let index = 0; index < length; index += 1) {
15
16
  const element = elements[index];
@@ -17,24 +18,26 @@ function generateListboxIds(prefix, select) {
17
18
  }
18
19
  }
19
20
  function getListboxVisibleOptions(state) {
20
- return state.options.all.filter((option) => !option.hidden);
21
+ return state.component.options.all.filter((option) => !option.hidden);
21
22
  }
22
23
  function setListboxDisabled(state, value) {
23
- state.filter.element.readOnly = state.readonly || value;
24
+ state.component.filter.element.readOnly = state.component.readonly || value;
24
25
  setProperties("disabled", state, value);
25
26
  }
26
27
  function setListboxFilter(state, value) {
27
28
  if (typeof value !== "string") return;
28
- const type = value.length < state.filter.element.value.length ? "deleteContentBackward" : "insertText";
29
- state.filter.element.value = value;
29
+ const { filter } = state.component;
30
+ const type = value.length < filter.element.value.length ? "deleteContentBackward" : "insertText";
31
+ filter.element.value = value;
30
32
  filterListbox(type, state);
31
33
  }
32
34
  function setListboxLimit(type, state, value) {
35
+ const { component } = state;
33
36
  let actual = value;
34
37
  if (typeof actual === "string") actual = Number.parseInt(actual, 10);
35
- if (typeof actual === "number" && !Number.isNaN(actual) && actual >= 0 ? actual !== state[type] : actual == null) {
36
- state[type] = actual;
37
- setAttribute(state.host, type, actual);
38
+ if (typeof actual === "number" && !Number.isNaN(actual) && actual >= 0 ? actual !== component[type] : actual == null) {
39
+ component[type] = actual;
40
+ setAttribute(component.host, type, actual);
38
41
  updateListboxValidity(state);
39
42
  }
40
43
  }
@@ -43,16 +46,19 @@ function setListboxMultiple(element, value) {
43
46
  else element.removeAttribute("multiple");
44
47
  }
45
48
  function setProperties(key, state, value) {
46
- state[key] = value;
47
- const { length } = state.elements;
49
+ const { component } = state;
50
+ const { elements } = component;
51
+ component[key] = value;
52
+ const { length } = elements;
48
53
  for (let index = 0; index < length; index += 1) {
49
- const element = state.elements[index];
54
+ const element = elements[index];
50
55
  if (element == null) continue;
51
56
  setAria(element, key, key !== "readonly" || !(element instanceof HTMLButtonElement) ? value : void 0);
52
57
  }
53
58
  }
54
59
  function setListboxReadonly(state, value) {
55
- state.filter.element.readOnly = state.disabled || value;
60
+ const { disabled, filter } = state.component;
61
+ filter.element.readOnly = disabled || value;
56
62
  setProperties("readonly", state, value);
57
63
  }
58
64
  function setListboxRequired(state, value) {
@@ -81,7 +87,7 @@ function createListboxFilter(parameters) {
81
87
  if (parameters.type === "autocomplete") return;
82
88
  const container = createElement("div", { attribute: { [parameters.attributes.filter]: "" } });
83
89
  const element = createListboxInput(parameters, "");
84
- setAttribute$1(element, parameters.attributes.input, "");
90
+ setAttribute(element, parameters.attributes.input, "");
85
91
  container.append(element);
86
92
  return {
87
93
  container,
@@ -144,7 +150,7 @@ function createListboxInput(parameters, value) {
144
150
  type: "text"
145
151
  }
146
152
  });
147
- if (isAutocomplete || listbox) setAria$1(input, "expanded", listbox);
153
+ if (isAutocomplete || listbox) setAria(input, "expanded", listbox);
148
154
  return input;
149
155
  }
150
156
  function createListboxList(parameters) {
@@ -255,9 +261,9 @@ function createListboxValueLabel(id) {
255
261
  } });
256
262
  }
257
263
  function updateListboxMessage(state) {
258
- const { attributes, host, localizations, message } = state;
264
+ const { attributes, host, localizations, message } = state.component;
259
265
  const visible = getListboxVisibleOptions(state).length;
260
- setAttribute$1(message, attributes.hidden, visible > 0 ? "" : void 0);
266
+ setAttribute(message, attributes.hidden, visible > 0 ? "" : void 0);
261
267
  let data = {};
262
268
  let parameters = [];
263
269
  let key;
@@ -272,65 +278,71 @@ function updateListboxMessage(state) {
272
278
  message.hidden = false;
273
279
  }
274
280
  function updateListboxPreview(preview, state, active, scroll) {
275
- const { length } = state.options.all;
281
+ const { attributes, callbacks, content, filter, options } = state.component;
282
+ const { length } = options.all;
276
283
  for (let index = 0; index < length; index += 1) {
277
- const option = state.options.all[index];
278
- setAttribute$1(option, state.attributes.active, option === active ? "" : void 0);
284
+ const option = options.all[index];
285
+ setAttribute(option, attributes.active, option === active ? "" : void 0);
279
286
  }
280
- state.active = active;
281
- setAria$1(state.filter.element, "activedescendant", state.content.checkVisibility() ? active?.id : void 0);
287
+ state.component.active = active;
288
+ setAria(filter.element, "activedescendant", content.checkVisibility() ? active?.id : void 0);
282
289
  if (scroll ?? true) active?.scrollIntoView(listboxScrollOptions);
283
- if (preview !== "none") state.callbacks.data.onPreview(preview, state, active);
290
+ if (preview !== "none") callbacks.data.onPreview(preview, state, active);
284
291
  }
285
292
  function updateListboxValueLabel(state) {
293
+ const { autocomplete, filter, listbox, localizations, host, options, multiple, values } = state.component;
286
294
  let label;
287
- if (state.multiple) {
288
- const localization = getLocalization(state.localizations.global, state.host, "selected", state.localizations.component);
289
- const { length } = state.options.selected;
295
+ if (multiple) {
296
+ const localization = getLocalization(localizations.global, host, "selected", localizations.component);
297
+ const { length } = options.selected;
290
298
  label = localize(localization, { amount: length }, [length]);
291
- } else label = state.autocomplete.none && !state.listbox ? state.filter.element.value : state.options.selected[0]?.textContent ?? "";
292
- state.values.label.textContent = label;
299
+ } else label = autocomplete.none && !listbox ? filter.element.value : options.selected[0]?.textContent ?? "";
300
+ values.label.textContent = label;
293
301
  }
294
302
  //#endregion
295
303
  //#region src/js/internal/listbox/listbox.data.ts
296
304
  function applyListboxSelection(parameters) {
297
305
  const { added, emit, option, scroll, selected, state } = parameters;
298
- const { length } = state.options.all;
306
+ const { component } = state;
307
+ const { autocomplete, callbacks, filter, listbox, options, type } = component;
308
+ const { length } = options.all;
299
309
  for (let index = 0; index < length; index += 1) {
300
- const option = state.options.all[index];
301
- setAria(option, "selected", (state.type === "select" || !state.autocomplete.none) && (selected ?? state.options.selected).includes(option));
310
+ const option = options.all[index];
311
+ setAria(option, "selected", (type === "select" || !autocomplete.none) && (selected ?? options.selected).includes(option));
302
312
  }
303
- const values = parameters.values ?? (state.autocomplete.none && !state.listbox ? [state.filter.element.value] : (selected ?? state.options.selected).map((option) => getData(option, "value", false) ?? ""));
313
+ const values = parameters.values ?? (autocomplete.none && !listbox ? [filter.element.value] : (selected ?? options.selected).map((option) => getData(option, "value", false) ?? ""));
304
314
  if (values.length === 0) values.push("");
305
- if (selected != null) state.options.selected = selected;
306
- if (!(values.length === state.values.current.length ? values.some((value) => !state.values.current.includes(value)) : true)) return;
315
+ if (selected != null) options.selected = selected;
316
+ if (!(values.length === component.values.current.length ? values.some((value) => !component.values.current.includes(value)) : true)) return;
307
317
  updateListboxForm(state, values, emit);
308
318
  updateListboxMessage(state);
309
319
  updateListboxPreview("set", state, option, scroll);
310
320
  updateListboxValueLabel(state);
311
- state.callbacks.data.onApply(state, option, values, added, selected, emit);
321
+ callbacks.data.onApply(state, option, values, added, selected, emit);
312
322
  }
313
323
  function filterListbox(type, state) {
314
- if (state.disabled || state.readonly) return;
315
- const update = state.filter.element.value !== state.filter.value;
324
+ const { callbacks, disabled, filter, host, readonly } = state.component;
325
+ if (disabled || readonly) return;
326
+ const update = filter.element.value !== filter.value;
316
327
  const option = filterListboxOptions(state);
317
328
  let preview;
318
329
  if (type.includes("delete")) preview = "none";
319
330
  else if (type.includes("insert")) preview = "typed";
320
- if (preview != null) state.callbacks.data.onFilter(preview, state, update, option);
331
+ if (preview != null) callbacks.data.onFilter(preview, state, update, option);
321
332
  if (update) {
322
- state.filter.value = state.filter.element.value;
323
- dispatch(state.host, "input");
333
+ filter.value = filter.element.value;
334
+ dispatch(host, "input");
324
335
  }
325
336
  }
326
337
  function filterListboxOption(state, value, textContent) {
338
+ const { options } = state.component;
327
339
  const filterTextContent = textContent ?? false;
328
340
  const filter = getString(value).toLocaleLowerCase();
329
341
  filterListboxOptions(state);
330
- const { length } = state.options.all;
342
+ const { length } = options.all;
331
343
  let match;
332
344
  for (let index = 0; index < length; index += 1) {
333
- const option = state.options.all[index];
345
+ const option = options.all[index];
334
346
  if ((filterTextContent ? option.textContent : getData(option, "value", false) ?? "").toLocaleLowerCase() === filter) {
335
347
  match = option;
336
348
  break;
@@ -339,12 +351,12 @@ function filterListboxOption(state, value, textContent) {
339
351
  return match;
340
352
  }
341
353
  function filterListboxOptions(state) {
342
- function filter(options) {
354
+ function filterOptions(options) {
343
355
  const { length } = options;
344
356
  let count = 0;
345
357
  for (let index = 0; index < length; index += 1) {
346
358
  const option = options[index];
347
- option.hidden = (state.type === "select" || !state.autocomplete.none) && !option.textContent.toLocaleLowerCase().includes(value);
359
+ option.hidden = (type === "select" || !autocomplete.none) && !option.textContent.toLocaleLowerCase().includes(value);
348
360
  if (!option.hidden) {
349
361
  count += 1;
350
362
  visible.push(option);
@@ -352,22 +364,24 @@ function filterListboxOptions(state) {
352
364
  }
353
365
  return count === 0;
354
366
  }
355
- const value = state.filter.element.value.toLocaleLowerCase();
367
+ const { active, attributes, autocomplete, filter, groups, list, options, type } = state.component;
368
+ const value = filter.element.value.toLocaleLowerCase();
356
369
  const visible = [];
357
- if (state.groups == null) filter(state.options.all);
370
+ if (groups == null) filterOptions(options.all);
358
371
  else {
359
- const groupsLength = state.groups.length;
372
+ const groupsLength = groups.length;
360
373
  for (let groupIndex = 0; groupIndex < groupsLength; groupIndex += 1) {
361
- const { element, options } = state.groups[groupIndex];
362
- element.hidden = filter(options);
374
+ const { element, options } = groups[groupIndex];
375
+ element.hidden = filterOptions(options);
363
376
  }
364
377
  }
365
- setAttribute(state.list, state.attributes.empty, visible.length === 0 ? "" : void 0);
378
+ setAttribute(list, attributes.empty, visible.length === 0 ? "" : void 0);
366
379
  updateListboxMessage(state);
367
- return state.active != null && visible.includes(state.active) ? state.active : visible[0];
380
+ return active != null && visible.includes(active) ? active : visible[0];
368
381
  }
369
382
  function setListboxValue(state, value, emit) {
370
- if (state.autocomplete.none && !state.listbox) {
383
+ const { autocomplete, listbox } = state.component;
384
+ if (autocomplete.none && !listbox) {
371
385
  setListboxFilter(state, getString(value));
372
386
  return;
373
387
  }
@@ -375,16 +389,17 @@ function setListboxValue(state, value, emit) {
375
389
  }
376
390
  function setListboxValues(state, value, emit) {
377
391
  if (!Array.isArray(value)) return;
378
- const values = (state.multiple ? value : value.slice(0, 1)).map((value) => getString(value).toLocaleLowerCase());
392
+ const { autocomplete, listbox, multiple, options } = state.component;
393
+ const values = (multiple ? value : value.slice(0, 1)).map((value) => getString(value).toLocaleLowerCase());
379
394
  if (values.length === 0) values.push("");
380
- if (state.autocomplete.none && !state.listbox) {
395
+ if (autocomplete.none && !listbox) {
381
396
  setListboxValue(state, values[0], emit);
382
397
  return;
383
398
  }
384
- const { length } = state.options.all;
399
+ const { length } = options.all;
385
400
  const selected = [];
386
401
  for (let index = 0; index < length; index += 1) {
387
- const option = state.options.all[index];
402
+ const option = options.all[index];
388
403
  if (values.includes(getData(option, "value", false)?.toLocaleLowerCase() ?? "")) selected.push(option);
389
404
  }
390
405
  applyListboxSelection({
@@ -392,18 +407,19 @@ function setListboxValues(state, value, emit) {
392
407
  selected,
393
408
  state,
394
409
  added: true,
395
- option: selected[0] ?? state.options.all[0],
396
- values: state.autocomplete.none && !state.listbox ? values : void 0
410
+ option: selected[0] ?? options.all[0],
411
+ values: autocomplete.none && !listbox ? values : void 0
397
412
  });
398
413
  }
399
414
  function toggleListboxOption(state, option) {
400
- if (option == null || !state.multiple && state.options.selected.includes(option)) {
401
- state.callbacks.data.onToggle(state);
415
+ const { autocomplete, callbacks, listbox, multiple, options } = state.component;
416
+ if (option == null || !multiple && options.selected.includes(option)) {
417
+ callbacks.data.onToggle(state);
402
418
  return;
403
419
  }
404
- const selected = state.options.selected.slice();
420
+ const selected = options.selected.slice();
405
421
  let added = true;
406
- if (state.multiple) {
422
+ if (multiple) {
407
423
  const index = selected.indexOf(option);
408
424
  if (index === -1) selected.push(option);
409
425
  else {
@@ -411,15 +427,16 @@ function toggleListboxOption(state, option) {
411
427
  selected.splice(index, 1);
412
428
  }
413
429
  } else selected.splice(0, selected.length, option);
430
+ const values = autocomplete.none && !listbox && option != null ? [option.textContent] : void 0;
414
431
  applyListboxSelection({
415
432
  added,
416
433
  option,
417
434
  selected,
418
435
  state,
419
- scroll: false,
420
- values: state.autocomplete.none && !state.listbox && option != null ? [option.textContent] : void 0
436
+ values,
437
+ scroll: false
421
438
  });
422
- state.callbacks.data.onToggle(state);
439
+ callbacks.data.onToggle(state);
423
440
  }
424
441
  //#endregion
425
442
  export { setListboxDisabled as C, setListboxReadonly as D, setListboxMultiple as E, setListboxRequired as O, getListboxVisibleOptions as S, setListboxLimit as T, createListboxValueLabel as _, setListboxValue as a, updateListboxValueLabel as b, createListboxContent as c, createListboxHeader as d, createListboxInput as f, createListboxOptions as g, createListboxOption as h, filterListboxOptions as i, createListboxFilter as l, createListboxMessage as m, filterListbox as n, setListboxValues as o, createListboxList as p, filterListboxOption as r, toggleListboxOption as s, applyListboxSelection as t, createListboxGroup as u, updateListboxMessage as v, setListboxFilter as w, generateListboxIds as x, updateListboxPreview as y };
@@ -1,4 +1,5 @@
1
- import { n as OuiLocalizationsValues, t as OuiLocalizations } from "./l10n-Bn-7RcwR.mjs";
1
+ import { c as OuiLocalizations, u as OuiLocalizationsValues } from "./l10n.model-D6a9frgl.mjs";
2
+ import { PlainObject } from "@oscarpalmer/atoms/models";
2
3
  import { RemovableEventListener } from "@oscarpalmer/toretto/models";
3
4
  //#region src/js/internal/listbox/listbox.model.d.ts
4
5
  type OuiListboxAttributes = {
@@ -17,7 +18,7 @@ type OuiListboxAttributes = {
17
18
  type OuiListboxAutoComplete = Record<OuiListboxAutoCompleteType, boolean> & {
18
19
  value?: OuiListboxAutoCompleteType;
19
20
  };
20
- type OuiListboxAutoCompleteType = 'both' | 'inline' | 'list' | 'none';
21
+ type OuiListboxAutoCompleteType = "both" | "inline" | "list" | "none";
21
22
  type OuiListboxCallbacks<State extends OuiListboxState = OuiListboxState> = {
22
23
  data: OuiListboxCallbacksData<State>;
23
24
  keydown: OuiListboxCallbacksKeydown<State>;
@@ -79,8 +80,12 @@ type OuiListboxOptions = {
79
80
  all: HTMLElement[];
80
81
  selected: HTMLElement[];
81
82
  };
82
- type OuiListboxPreview = 'none' | 'set' | 'typed';
83
- type OuiListboxState = {
83
+ type OuiListboxPreview = "none" | "set" | "typed";
84
+ type OuiListboxState<State extends PlainObject = PlainObject> = {
85
+ component: OuiListboxStateComponent<State>;
86
+ form: OuiListboxStateForm;
87
+ };
88
+ type OuiListboxStateComponent<State extends PlainObject> = {
84
89
  active?: HTMLElement;
85
90
  attributes: OuiListboxAttributes;
86
91
  autocomplete: OuiListboxAutoComplete;
@@ -93,7 +98,6 @@ type OuiListboxState = {
93
98
  groups?: OuiListboxGroup[];
94
99
  host: HTMLElement;
95
100
  id: string;
96
- internals: ElementInternals;
97
101
  label: OuiListboxLabel;
98
102
  list: HTMLUListElement;
99
103
  listbox: boolean;
@@ -110,16 +114,16 @@ type OuiListboxState = {
110
114
  select: HTMLSelectElement;
111
115
  type: OuiListboxType;
112
116
  values: OuiListboxValues;
117
+ } & State;
118
+ type OuiListboxStateForm = {
119
+ internals: ElementInternals;
120
+ restored?: unknown[];
113
121
  };
114
- type OuiListboxStates<State extends OuiListboxState = OuiListboxState> = {
115
- map: WeakMap<HTMLElement, State>;
116
- set: Set<State>;
117
- };
118
- type OuiListboxType = 'autocomplete' | 'select';
122
+ type OuiListboxType = "autocomplete" | "select";
119
123
  type OuiListboxValues = {
120
124
  current: string[];
121
125
  initial: string[];
122
126
  label: HTMLElement;
123
127
  };
124
128
  //#endregion
125
- export { OuiListboxGroup as a, OuiListboxPreview as c, OuiListboxType as d, OuiListboxCallbacks as i, OuiListboxState as l, OuiListboxAutoComplete as n, OuiListboxLocalizations as o, OuiListboxAutoCompleteType as r, OuiListboxOptions as s, OuiListboxAttributes as t, OuiListboxStates as u };
129
+ export { OuiListboxGroup as a, OuiListboxPreview as c, OuiListboxStateForm as d, OuiListboxType as f, OuiListboxCallbacks as i, OuiListboxState as l, OuiListboxAutoComplete as n, OuiListboxLocalizations as o, OuiListboxAutoCompleteType as r, OuiListboxOptions as s, OuiListboxAttributes as t, OuiListboxStateComponent as u };
@@ -0,0 +1,167 @@
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
+ for (const element of elements) menus.get(element)?.floatable.hide();
27
+ const menu = menus.get(elements[0]);
28
+ if (menu != null && event.pointerId === -1) updateNavigableFocus(menu.navigable, true);
29
+ }), on(this.content, "toggle", (event) => {
30
+ const expanded = event.newState === "open";
31
+ if (expanded) {
32
+ this.floatable?.update();
33
+ updateNavigableFocus(this.navigable, true);
34
+ }
35
+ setAria(this.toggle, "expanded", expanded);
36
+ }));
37
+ this.floatable.update();
38
+ initializeMenu(this);
39
+ updateNavigableFocus(this.navigable, false);
40
+ }
41
+ OuiMenu.prototype.destroy = destroyMenu;
42
+ Object.defineProperties(OuiMenu.prototype, { open: {
43
+ enumerable: true,
44
+ get: getMenuOpen
45
+ } });
46
+ function OuiMenubar(element, navigable) {
47
+ this.element = element;
48
+ this.navigable = navigable;
49
+ updateNavigableFocus(this.navigable, false);
50
+ }
51
+ OuiMenubar.prototype.destroy = destroyMenubar;
52
+ function addInstance(instances, ctor, element, content, options) {
53
+ if (!instances.has(content)) instances.set(content, new ctor(element, getNavigable(content, {
54
+ ...options,
55
+ onDeactivate,
56
+ onPreventNavigation,
57
+ onShouldActivate,
58
+ onShouldDeactivate
59
+ })));
60
+ }
61
+ function addMenu(element) {
62
+ const content = element.querySelector(MENU_SELECTOR_CONTENT);
63
+ const toggle = element.querySelector(MENU_SELECTOR_TOGGLE);
64
+ if (content != null && toggle != null) addInstance(menus, OuiMenu, element, content, {
65
+ selector: MENU_SELECTOR_ITEM,
66
+ vertical: true
67
+ });
68
+ }
69
+ function addMenubar(element) {
70
+ addInstance(menubars, OuiMenubar, element, element, {
71
+ role: "menubar",
72
+ selector: MENUBAR_SELECTOR_ITEM,
73
+ vertical: false
74
+ });
75
+ }
76
+ function destroyMenu() {
77
+ this.floatable.destroy();
78
+ this.navigable.destroy();
79
+ this.content = void 0;
80
+ this.element = void 0;
81
+ this.floatable = void 0;
82
+ this.navigable = void 0;
83
+ this.toggle = void 0;
84
+ }
85
+ function destroyMenubar() {
86
+ this.navigable.destroy();
87
+ this.element = void 0;
88
+ this.navigable = void 0;
89
+ }
90
+ function getId(element, value) {
91
+ let { id } = element;
92
+ if (id == null || id.trim().length === 0) {
93
+ id = value == null ? `oui_menu_${++index}` : `${value}_toggle`;
94
+ element.id = id;
95
+ }
96
+ return id;
97
+ }
98
+ function getMenuOpen() {
99
+ return this.floatable.open;
100
+ }
101
+ function initializeMenu(menu) {
102
+ const id = getId(menu.content);
103
+ setAttribute(menu.toggle, "popovertarget", id);
104
+ setAria(menu.toggle, {
105
+ controls: id,
106
+ expanded: "false",
107
+ haspopup: "menu"
108
+ });
109
+ setAttributes(menu.content, {
110
+ popover: "",
111
+ tabindex: "-1"
112
+ });
113
+ setRole(menu.content, "menu");
114
+ }
115
+ function onDeactivate(_, navigable) {
116
+ const menu = menus.get(navigable[NAVIGABLE_SYMBOL].element);
117
+ if (menu == null) return;
118
+ menu.floatable.hide();
119
+ const element = findAncestor(menu.element.parentElement, MENU_MENUBAR_SELECTORS);
120
+ if (element == null) return;
121
+ const instance = menubars.get(element) ?? menus.get(element);
122
+ if (instance != null) updateNavigableFocus(instance.navigable, true);
123
+ }
124
+ function onPreventNavigation(_, navigable) {
125
+ const { element } = navigable[NAVIGABLE_SYMBOL];
126
+ const instance = menubars.get(element) ?? menus.get(element);
127
+ return instance == null ? false : findAncestor(instance.element.parentElement, MENU_MENUBAR_SELECTORS) != null;
128
+ }
129
+ function onShouldActivate(event, navigable) {
130
+ const state = navigable[NAVIGABLE_SYMBOL];
131
+ const { element } = state;
132
+ let activate = false;
133
+ if (menubars.has(element)) activate = state.orientation === "horizontal" ? NAVIGABLE_KEYS_VERTICAL.has(event.key) : NAVIGABLE_KEYS_HORIZONTAL.has(event.key);
134
+ else if (menus.has(element)) activate = state.orientation === "horizontal" ? NAVIGABLE_KEYS_VERTICAL.has(event.key) : event.key === "ArrowRight";
135
+ if (activate) {
136
+ const target = event.target instanceof HTMLElement && event.target.matches(MENU_SELECTOR_TOGGLE) ? event.target : void 0;
137
+ if (target == null) activate = false;
138
+ else target.click();
139
+ }
140
+ return activate;
141
+ }
142
+ function onShouldDeactivate(event, navigable) {
143
+ const { element, orientation } = navigable[NAVIGABLE_SYMBOL];
144
+ if (menubars.has(element)) return;
145
+ const menu = menus.get(element);
146
+ if (menu == null) return;
147
+ const horizontal = orientation === "horizontal";
148
+ const altKey = horizontal ? "ArrowDown" : "ArrowRight";
149
+ const baseKey = horizontal ? "ArrowUp" : "ArrowLeft";
150
+ if (event.key === baseKey) return findAncestor(menu.element.parentElement, MENU_SELECTOR_CONTENT) != null;
151
+ if (event.key === altKey && event.target instanceof HTMLElement && !event.target.hasAttribute("popovertarget")) return false;
152
+ }
153
+ function removeInstance(instances, element) {
154
+ instances.get(element)?.destroy();
155
+ instances.delete(element);
156
+ }
157
+ function removeMenu(element) {
158
+ removeInstance(menus, element);
159
+ }
160
+ function removeMenubar(element) {
161
+ removeInstance(menubars, element);
162
+ }
163
+ let index = 0;
164
+ attributable(MENU_ATTRIBUTE, addMenu, removeMenu);
165
+ attributable(MENUBAR_ATTRIBUTE, addMenubar, removeMenubar);
166
+ //#endregion
167
+ 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-BPOM8DZk.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: HTMLElement;
10
+ element: HTMLElement;
11
+ floatable: OuiFloatable;
12
+ navigable: OuiNavigable;
13
+ toggle: HTMLElement;
14
+ get open(): boolean;
15
+ destroy(): void;
16
+ };
17
+ export type OuiMenubar = {
18
+ element: HTMLElement;
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<HTMLElement, OuiMenubar>;
32
+ export declare const menus: WeakMap<HTMLElement, 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 };