@oscarpalmer/oui 0.39.0 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/README.md +1 -1
  2. package/dist/css/color-picker.css +80 -69
  3. package/dist/css/listbox.css +169 -0
  4. package/dist/js/color-picker/color-picker.constants.d.mts +2 -0
  5. package/dist/js/color-picker/{constants.color-picker.mjs → color-picker.constants.mjs} +7 -4
  6. package/dist/js/color-picker/{dom.color-picker.d.mts → color-picker.dom.d.mts} +2 -2
  7. package/dist/js/color-picker/{dom.color-picker.mjs → color-picker.dom.mjs} +33 -16
  8. package/dist/js/color-picker/{event.color-picker.d.mts → color-picker.event.d.mts} +3 -3
  9. package/dist/js/color-picker/color-picker.event.mjs +233 -0
  10. package/dist/js/color-picker/{form.color-picker.d.mts → color-picker.form.d.mts} +2 -2
  11. package/dist/js/color-picker/{form.color-picker.mjs → color-picker.form.mjs} +9 -8
  12. package/dist/js/color-picker/color-picker.misc.d.mts +2 -0
  13. package/dist/js/color-picker/color-picker.misc.mjs +104 -0
  14. package/dist/js/color-picker/color-picker.model.d.mts +2 -0
  15. package/dist/js/color-picker/{models.color-picker.mjs → color-picker.model.mjs} +1 -1
  16. package/dist/js/color-picker/{output.color-picker.d.mts → color-picker.output.d.mts} +2 -2
  17. package/dist/js/color-picker/{output.color-picker.mjs → color-picker.output.mjs} +19 -18
  18. package/dist/js/color-picker/color-picker.state.d.mts +8 -0
  19. package/dist/js/color-picker/color-picker.state.mjs +168 -0
  20. package/dist/js/color-picker/index.d.mts +172 -2
  21. package/dist/js/color-picker/index.mjs +66 -59
  22. package/dist/js/color-picker.constants-BZgXQr5o.d.mts +177 -0
  23. package/dist/js/color-picker.misc-BIS3R6jk.d.mts +31 -0
  24. package/dist/js/combobox/combobox.constants.d.mts +2 -0
  25. package/dist/js/combobox/{constants.combobox.mjs → combobox.constants.mjs} +21 -21
  26. package/dist/js/combobox/combobox.dom.d.mts +25 -0
  27. package/dist/js/combobox/{dom.combobox.mjs → combobox.dom.mjs} +51 -49
  28. package/dist/js/combobox/{event.combobox.d.mts → combobox.event.d.mts} +9 -9
  29. package/dist/js/combobox/{event.combobox.mjs → combobox.event.mjs} +1 -1
  30. package/dist/js/combobox/combobox.misc.d.mts +2 -0
  31. package/dist/js/combobox/combobox.misc.mjs +2 -0
  32. package/dist/js/combobox/combobox.model.d.mts +2 -0
  33. package/dist/js/combobox/combobox.state.d.mts +9 -0
  34. package/dist/js/combobox/combobox.state.mjs +2 -0
  35. package/dist/js/combobox/index.d.mts +152 -2
  36. package/dist/js/combobox/index.mjs +54 -55
  37. package/dist/js/combobox.constants-Hb3bqqQJ.d.mts +19 -0
  38. package/dist/js/combobox.misc-DRDFk6X8.d.mts +26 -0
  39. package/dist/js/combobox.model-gjEI2VqZ.d.mts +46 -0
  40. package/dist/js/{state.combobox-BWDFHwoi.mjs → combobox.state-AstCICiH.mjs} +109 -106
  41. package/dist/js/dialog/dialog.model.d.mts +2 -0
  42. package/dist/js/dialog/dialog.model.mjs +11 -0
  43. package/dist/js/dialog/index.d.mts +12 -0
  44. package/dist/js/dialog/index.mjs +123 -0
  45. package/dist/js/dialog.model-HVzYWoDo.d.mts +45 -0
  46. package/dist/js/floatable/floatable.embedded.d.mts +2 -2
  47. package/dist/js/floatable/floatable.embedded.mjs +64 -92
  48. package/dist/js/floatable/floatable.model.d.mts +2 -0
  49. package/dist/js/floatable/floatable.model.mjs +23 -0
  50. package/dist/js/floatable/floatable.standalone.d.mts +2 -1
  51. package/dist/js/floatable.embedded-ncshL3Sa.d.mts +17 -0
  52. package/dist/js/{floatable.embedded-DQYkXt8X.d.mts → floatable.model-DXsQgoU7.d.mts} +13 -20
  53. package/dist/js/focus-trap/focus-trap.embedded.d.mts +2 -2
  54. package/dist/js/focus-trap/focus-trap.embedded.mjs +117 -138
  55. package/dist/js/focus-trap/focus-trap.model.d.mts +2 -0
  56. package/dist/js/focus-trap/focus-trap.model.mjs +15 -0
  57. package/dist/js/focus-trap/focus-trap.standalone.d.mts +2 -1
  58. package/dist/js/focus-trap.embedded-DpcPkP7c.d.mts +13 -0
  59. package/dist/js/{focus-trap.embedded-CjyFQYow.d.mts → focus-trap.model-CpltX5B5.d.mts} +16 -18
  60. package/dist/js/index.d.mts +26 -14
  61. package/dist/js/index.mjs +18 -17
  62. package/dist/js/internal/attributable.d.mts +1 -1
  63. package/dist/js/internal/attributable.mjs +3 -2
  64. package/dist/js/internal/draggable/draggable.model.d.mts +2 -0
  65. package/dist/js/internal/draggable/draggable.model.mjs +37 -0
  66. package/dist/js/internal/draggable/index.d.mts +13 -0
  67. package/dist/js/internal/draggable/index.mjs +243 -0
  68. package/dist/js/internal/l10n/index.d.mts +5 -0
  69. package/dist/js/internal/l10n/index.mjs +147 -0
  70. package/dist/js/internal/l10n/l10n.model.d.mts +2 -0
  71. package/dist/js/internal/l10n/l10n.model.mjs +12 -0
  72. package/dist/js/internal/misc.d.mts +3 -2
  73. package/dist/js/internal/misc.mjs +4 -6
  74. package/dist/js/internal/navigable/index.d.mts +6 -0
  75. package/dist/js/internal/navigable/index.mjs +125 -0
  76. package/dist/js/internal/navigable/navigable.model.d.mts +2 -0
  77. package/dist/js/internal/navigable/navigable.model.mjs +18 -0
  78. package/dist/js/internal/option-list/option-list.constants.d.mts +8 -0
  79. package/dist/js/internal/option-list/option-list.constants.mjs +22 -0
  80. package/dist/js/internal/option-list/option-list.data.d.mts +21 -0
  81. package/dist/js/internal/option-list/option-list.data.mjs +2 -0
  82. package/dist/js/internal/option-list/option-list.dom.d.mts +18 -0
  83. package/dist/js/internal/option-list/option-list.dom.mjs +2 -0
  84. package/dist/js/internal/option-list/option-list.event.d.mts +6 -0
  85. package/dist/js/internal/option-list/option-list.event.mjs +66 -0
  86. package/dist/js/internal/option-list/option-list.form.d.mts +7 -0
  87. package/dist/js/internal/option-list/option-list.form.mjs +53 -0
  88. package/dist/js/internal/option-list/option-list.misc.d.mts +13 -0
  89. package/dist/js/internal/option-list/option-list.misc.mjs +2 -0
  90. package/dist/js/internal/option-list/option-list.model.d.mts +2 -0
  91. package/dist/js/internal/option-list/option-list.state.d.mts +8 -0
  92. package/dist/js/internal/option-list/option-list.state.mjs +39 -0
  93. package/dist/js/l10n/index.d.mts +3 -0
  94. package/dist/js/l10n/index.mjs +2 -0
  95. package/dist/js/l10n.model-D1E1u35L.d.mts +54 -0
  96. package/dist/js/listbox/index.d.mts +9 -18
  97. package/dist/js/listbox/index.mjs +49 -52
  98. package/dist/js/listbox/listbox.constants.d.mts +2 -0
  99. package/dist/js/listbox/{constants.listbox.mjs → listbox.constants.mjs} +11 -15
  100. package/dist/js/listbox/listbox.dom.d.mts +5 -0
  101. package/dist/js/listbox/listbox.dom.mjs +2 -0
  102. package/dist/js/listbox/listbox.event.d.mts +9 -0
  103. package/dist/js/listbox/listbox.event.mjs +2 -0
  104. package/dist/js/listbox/listbox.misc.d.mts +2 -0
  105. package/dist/js/listbox/listbox.misc.mjs +2 -0
  106. package/dist/js/listbox/listbox.model.d.mts +2 -0
  107. package/dist/js/listbox/listbox.model.mjs +1 -0
  108. package/dist/js/listbox/listbox.state.d.mts +9 -0
  109. package/dist/js/listbox/listbox.state.mjs +2 -0
  110. package/dist/js/listbox.constants-DOBMwKup.d.mts +9 -0
  111. package/dist/js/listbox.misc-DwfB4Mu_.d.mts +24 -0
  112. package/dist/js/listbox.model-C0MYWXZe.d.mts +20 -0
  113. package/dist/js/listbox.state-BrN296BM.mjs +240 -0
  114. package/dist/js/menu/index.mjs +171 -0
  115. package/dist/js/menu/menu.model.d.mts +33 -0
  116. package/dist/js/menu/menu.model.mjs +15 -0
  117. package/dist/js/movable/movable.embedded.d.mts +2 -2
  118. package/dist/js/movable/movable.embedded.mjs +77 -86
  119. package/dist/js/movable/movable.model.d.mts +2 -0
  120. package/dist/js/movable/movable.model.mjs +12 -0
  121. package/dist/js/movable/movable.standalone.d.mts +2 -1
  122. package/dist/js/movable.embedded-C1bDTLGs.d.mts +11 -0
  123. package/dist/js/movable.model-D9nnPWKk.d.mts +186 -0
  124. package/dist/js/navigable.model-BqoR6iBv.d.mts +44 -0
  125. package/dist/js/option-list.data-CgMyUwPc.mjs +441 -0
  126. package/dist/js/option-list.model-CCPUlPeX.d.mts +169 -0
  127. package/dist/js/popover/index.d.mts +12 -0
  128. package/dist/js/{popover.mjs → popover/index.mjs} +41 -51
  129. package/dist/js/popover/popover.model.d.mts +2 -0
  130. package/dist/js/popover/popover.model.mjs +12 -0
  131. package/dist/js/popover.model-DiLdz0Hc.d.mts +38 -0
  132. package/dist/js/resizable/resizable.embedded.d.mts +2 -2
  133. package/dist/js/resizable/resizable.embedded.mjs +43 -58
  134. package/dist/js/resizable/resizable.model.d.mts +2 -0
  135. package/dist/js/resizable/resizable.model.mjs +21 -0
  136. package/dist/js/resizable/resizable.standalone.d.mts +2 -1
  137. package/dist/js/resizable.embedded-BemH-7Re.d.mts +11 -0
  138. package/dist/js/resizable.model-YEtcC9li.d.mts +46 -0
  139. package/dist/js/sortable/sortable.embedded.d.mts +2 -2
  140. package/dist/js/sortable/sortable.embedded.mjs +111 -116
  141. package/dist/js/sortable/sortable.model.d.mts +2 -0
  142. package/dist/js/sortable/sortable.model.mjs +24 -0
  143. package/dist/js/sortable/sortable.standalone.d.mts +2 -1
  144. package/dist/js/sortable.embedded-CrEGff9k.d.mts +11 -0
  145. package/dist/js/{splitter.d.mts → splitter/index.d.mts} +6 -4
  146. package/dist/js/{splitter.mjs → splitter/index.mjs} +90 -128
  147. package/dist/js/splitter/splitter.model.d.mts +2 -0
  148. package/dist/js/splitter/splitter.model.mjs +37 -0
  149. package/dist/js/splitter.model-C24W6eZ7.d.mts +57 -0
  150. package/dist/js/{tabs.d.mts → tabs/index.d.mts} +8 -8
  151. package/dist/js/{tabs.mjs → tabs/index.mjs} +58 -58
  152. package/dist/js/tabs/tabs.model.d.mts +2 -0
  153. package/dist/js/tabs/tabs.model.mjs +18 -0
  154. package/dist/js/tabs.model-BHPy7fPo.d.mts +40 -0
  155. package/dist/js/toolbar/index.mjs +27 -0
  156. package/dist/js/toolbar/toolbar.model.d.mts +11 -0
  157. package/dist/js/toolbar/toolbar.model.mjs +7 -0
  158. package/dist/js/tooltip/index.d.mts +19 -0
  159. package/dist/js/{tooltip.mjs → tooltip/index.mjs} +61 -86
  160. package/dist/js/tooltip/tooltip.model.d.mts +2 -0
  161. package/dist/js/tooltip/tooltip.model.mjs +15 -0
  162. package/dist/js/tooltip.model-BpNStw5z.d.mts +37 -0
  163. package/package.json +30 -24
  164. package/dist/js/color-picker/constants.color-picker.d.mts +0 -2
  165. package/dist/js/color-picker/event.color-picker.mjs +0 -2
  166. package/dist/js/color-picker/misc.color-picker.d.mts +0 -2
  167. package/dist/js/color-picker/misc.color-picker.mjs +0 -2
  168. package/dist/js/color-picker/models.color-picker.d.mts +0 -2
  169. package/dist/js/color-picker/state.color-picker.d.mts +0 -8
  170. package/dist/js/color-picker/state.color-picker.mjs +0 -2
  171. package/dist/js/combobox/constants.combobox.d.mts +0 -2
  172. package/dist/js/combobox/dom.combobox.d.mts +0 -26
  173. package/dist/js/combobox/misc.combobox.d.mts +0 -2
  174. package/dist/js/combobox/misc.combobox.mjs +0 -2
  175. package/dist/js/combobox/models.combobox.d.mts +0 -43
  176. package/dist/js/combobox/state.combobox.d.mts +0 -11
  177. package/dist/js/combobox/state.combobox.mjs +0 -2
  178. package/dist/js/constants.color-picker-B-gFjL8m.d.mts +0 -364
  179. package/dist/js/constants.combobox-8EMRmv09.d.mts +0 -18
  180. package/dist/js/constants.listbox-DGnX32kv.d.mts +0 -8
  181. package/dist/js/dialog.d.mts +0 -47
  182. package/dist/js/dialog.mjs +0 -131
  183. package/dist/js/draggable-B5-70SZm.d.mts +0 -155
  184. package/dist/js/event.color-picker-BEpq0Adu.mjs +0 -485
  185. package/dist/js/index-C5D3-oiI.d.mts +0 -177
  186. package/dist/js/internal/draggable.d.mts +0 -2
  187. package/dist/js/internal/draggable.mjs +0 -265
  188. package/dist/js/internal/listbox/listbox.constants.d.mts +0 -8
  189. package/dist/js/internal/listbox/listbox.constants.mjs +0 -22
  190. package/dist/js/internal/listbox/listbox.data.d.mts +0 -19
  191. package/dist/js/internal/listbox/listbox.data.mjs +0 -2
  192. package/dist/js/internal/listbox/listbox.dom.d.mts +0 -65
  193. package/dist/js/internal/listbox/listbox.dom.mjs +0 -2
  194. package/dist/js/internal/listbox/listbox.event.d.mts +0 -4
  195. package/dist/js/internal/listbox/listbox.event.mjs +0 -63
  196. package/dist/js/internal/listbox/listbox.form.d.mts +0 -5
  197. package/dist/js/internal/listbox/listbox.form.mjs +0 -53
  198. package/dist/js/internal/listbox/listbox.misc.d.mts +0 -11
  199. package/dist/js/internal/listbox/listbox.misc.mjs +0 -2
  200. package/dist/js/internal/listbox/listbox.model.d.mts +0 -2
  201. package/dist/js/internal/listbox/listbox.state.d.mts +0 -6
  202. package/dist/js/internal/listbox/listbox.state.mjs +0 -40
  203. package/dist/js/internal/navigable.d.mts +0 -36
  204. package/dist/js/internal/navigable.mjs +0 -135
  205. package/dist/js/l10n-Bn-7RcwR.d.mts +0 -20
  206. package/dist/js/l10n.d.mts +0 -2
  207. package/dist/js/l10n.mjs +0 -80
  208. package/dist/js/listbox/constants.listbox.d.mts +0 -2
  209. package/dist/js/listbox/event.listbox.d.mts +0 -7
  210. package/dist/js/listbox/event.listbox.mjs +0 -2
  211. package/dist/js/listbox/misc.listbox.d.mts +0 -2
  212. package/dist/js/listbox/misc.listbox.mjs +0 -2
  213. package/dist/js/listbox/state.listbox.d.mts +0 -10
  214. package/dist/js/listbox/state.listbox.mjs +0 -2
  215. package/dist/js/listbox.data-DQ7-x2uY.mjs +0 -425
  216. package/dist/js/listbox.model-BHPA7GM4.d.mts +0 -125
  217. package/dist/js/menu.mjs +0 -172
  218. package/dist/js/misc.listbox-DKB-j0UK.mjs +0 -196
  219. package/dist/js/misc.listbox-mZMuYOxg.d.mts +0 -20
  220. package/dist/js/popover.d.mts +0 -38
  221. package/dist/js/resizable.embedded-dvhdfQgt.d.mts +0 -34
  222. package/dist/js/toolbar.mjs +0 -31
  223. package/dist/js/tooltip.d.mts +0 -45
  224. /package/dist/js/combobox/{models.combobox.mjs → combobox.model.mjs} +0 -0
  225. /package/dist/js/internal/{listbox/listbox.model.mjs → option-list/option-list.model.mjs} +0 -0
  226. /package/dist/js/{menu.d.mts → menu/index.d.mts} +0 -0
  227. /package/dist/js/{toolbar.d.mts → toolbar/index.d.mts} +0 -0
@@ -1,425 +0,0 @@
1
- import { getLocalization, localize } from "./l10n.mjs";
2
- import { listboxScrollOptions } from "./internal/listbox/listbox.constants.mjs";
3
- import { updateListboxForm, updateListboxValidity } from "./internal/listbox/listbox.form.mjs";
4
- import { setAria } from "@oscarpalmer/toretto/aria";
5
- import { dispatch } from "@oscarpalmer/toretto/event";
6
- import { setAttribute } from "@oscarpalmer/toretto/attribute";
7
- import { getString } from "@oscarpalmer/atoms/string";
8
- import { createElement, setAria as setAria$1, setAttribute as setAttribute$1 } from "@oscarpalmer/toretto";
9
- import { getData as getData$1 } from "@oscarpalmer/toretto/data";
10
- //#region src/js/internal/listbox/listbox.misc.ts
11
- 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 { length } = elements;
14
- for (let index = 0; index < length; index += 1) {
15
- const element = elements[index];
16
- if (element.id === "") element.id = `${prefix}${element instanceof HTMLOptGroupElement ? "_group_" : "_option_"}${index}`;
17
- }
18
- }
19
- function getListboxVisibleOptions(state) {
20
- return state.options.all.filter((option) => !option.hidden);
21
- }
22
- function setListboxDisabled(state, value) {
23
- state.filter.element.readOnly = state.readonly || value;
24
- setProperties("disabled", state, value);
25
- }
26
- function setListboxFilter(state, value) {
27
- if (typeof value !== "string") return;
28
- const type = value.length < state.filter.element.value.length ? "deleteContentBackward" : "insertText";
29
- state.filter.element.value = value;
30
- filterListbox(type, state);
31
- }
32
- function setListboxLimit(type, state, value) {
33
- let actual = value;
34
- 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
- updateListboxValidity(state);
39
- }
40
- }
41
- function setListboxMultiple(element, value) {
42
- if (value) element.setAttribute("multiple", "");
43
- else element.removeAttribute("multiple");
44
- }
45
- function setProperties(key, state, value) {
46
- state[key] = value;
47
- const { length } = state.elements;
48
- for (let index = 0; index < length; index += 1) {
49
- const element = state.elements[index];
50
- if (element == null) continue;
51
- setAria(element, key, key !== "readonly" || !(element instanceof HTMLButtonElement) ? value : void 0);
52
- }
53
- }
54
- function setListboxReadonly(state, value) {
55
- state.filter.element.readOnly = state.disabled || value;
56
- setProperties("readonly", state, value);
57
- }
58
- function setListboxRequired(state, value) {
59
- setProperties("required", state, value);
60
- updateListboxValidity(state);
61
- }
62
- //#endregion
63
- //#region src/js/internal/listbox/listbox.dom.ts
64
- function createListboxContent(parameters) {
65
- const element = createElement("div", { attribute: { [parameters.attributes.content]: "" } });
66
- const filter = createListboxFilter(parameters);
67
- const list = createListboxList(parameters);
68
- const message = createListboxMessage(parameters.attributes.message);
69
- const value = createListboxValueLabel(parameters.id);
70
- if (filter != null) element.append(filter.container);
71
- element.append(list.element, message, value);
72
- return {
73
- element,
74
- filter,
75
- list,
76
- message,
77
- value
78
- };
79
- }
80
- function createListboxFilter(parameters) {
81
- if (parameters.type === "autocomplete") return;
82
- const container = createElement("div", { attribute: { [parameters.attributes.filter]: "" } });
83
- const element = createListboxInput(parameters, "");
84
- setAttribute$1(element, parameters.attributes.input, "");
85
- container.append(element);
86
- return {
87
- container,
88
- element
89
- };
90
- }
91
- function createListboxGroup(parameters) {
92
- const { group, groupOptions, selected, type } = parameters;
93
- const element = createElement("li", {
94
- aria: { label: group.label },
95
- property: { role: "group" }
96
- });
97
- const list = createElement("ul", { property: { role: "none" } });
98
- const header = createListboxHeader(parameters, group);
99
- element.append(header, list);
100
- return {
101
- element,
102
- header,
103
- options: createListboxOptions({
104
- list,
105
- selected,
106
- type,
107
- group: header.id,
108
- options: groupOptions,
109
- original: parameters.original
110
- })
111
- };
112
- }
113
- function createListboxHeader(parameters, group) {
114
- return createElement("div", {
115
- aria: { hidden: true },
116
- attribute: { [parameters.original.attributes.header]: "" },
117
- property: {
118
- id: group.id,
119
- textContent: group.label
120
- }
121
- });
122
- }
123
- function createListboxInput(parameters, value) {
124
- const { autocomplete, id, label, listbox, type } = parameters;
125
- const isAutocomplete = type === "autocomplete";
126
- const input = createElement("input", {
127
- aria: {
128
- autocomplete: autocomplete.value,
129
- controls: `${id}_list`,
130
- haspopup: isAutocomplete ? "listbox" : void 0,
131
- labelledby: label.id
132
- },
133
- attribute: {
134
- autocorrect: "off",
135
- autocomplete: "off",
136
- form: "",
137
- inputmode: "text",
138
- spellcheck: "false"
139
- },
140
- property: {
141
- id,
142
- value,
143
- role: isAutocomplete || listbox ? "combobox" : "searchbox",
144
- type: "text"
145
- }
146
- });
147
- if (isAutocomplete || listbox) setAria$1(input, "expanded", listbox);
148
- return input;
149
- }
150
- function createListboxList(parameters) {
151
- const { attributes, id, label, multiple, select, type } = parameters;
152
- const element = createElement("ul", {
153
- aria: {
154
- labelledby: label.id,
155
- multiselectable: multiple
156
- },
157
- attribute: {
158
- [attributes.list]: "",
159
- tabindex: -1
160
- },
161
- property: {
162
- id: `${id}_list`,
163
- role: "listbox"
164
- }
165
- });
166
- const children = [...select.children];
167
- const childrenLength = children.length;
168
- const options = [];
169
- const selected = [];
170
- let groups;
171
- for (let childIndex = 0; childIndex < childrenLength; childIndex += 1) {
172
- const child = children[childIndex];
173
- if (child instanceof HTMLOptionElement) {
174
- const option = createListboxOption({
175
- type,
176
- option: child,
177
- original: parameters,
178
- index: childIndex
179
- });
180
- element.append(option);
181
- options.push(option);
182
- if (child.selected) selected.push(option);
183
- continue;
184
- }
185
- if (!(child instanceof HTMLOptGroupElement)) continue;
186
- const group = createListboxGroup({
187
- selected,
188
- type,
189
- group: child,
190
- groupOptions: [...child.children],
191
- original: parameters
192
- });
193
- groups ??= [];
194
- element.append(group.element);
195
- groups.push(group);
196
- options.push(...group.options);
197
- }
198
- return {
199
- element,
200
- groups,
201
- options: {
202
- selected,
203
- all: options
204
- }
205
- };
206
- }
207
- function createListboxMessage(attribute) {
208
- return createElement("div", {
209
- aria: { live: "polite" },
210
- attribute: { [attribute]: "" },
211
- property: {
212
- hidden: true,
213
- role: "status"
214
- }
215
- });
216
- }
217
- function createListboxOption(parameters) {
218
- const { group, option, original } = parameters;
219
- return createElement("li", {
220
- aria: { selected: (parameters.type === "select" || !original.autocomplete.none) && option.selected },
221
- attribute: { [original.attributes.option]: "" },
222
- data: {
223
- group,
224
- value: option.value
225
- },
226
- property: {
227
- id: option.id,
228
- role: "option",
229
- textContent: option.textContent
230
- }
231
- });
232
- }
233
- function createListboxOptions(parameters) {
234
- const { group, list, options, original, selected, type } = parameters;
235
- const items = [];
236
- for (let index = 0; index < options.length; index += 1) {
237
- const option = options[index];
238
- const item = createListboxOption({
239
- group,
240
- index,
241
- option,
242
- original,
243
- type
244
- });
245
- items.push(item);
246
- if (option.selected) selected.push(item);
247
- list.append(item);
248
- }
249
- return items;
250
- }
251
- function createListboxValueLabel(id) {
252
- return createElement("span", { property: {
253
- hidden: true,
254
- id: `${id}_value`
255
- } });
256
- }
257
- function updateListboxMessage(state) {
258
- const { attributes, host, localizations, message } = state;
259
- const visible = getListboxVisibleOptions(state).length;
260
- setAttribute$1(message, attributes.hidden, visible > 0 ? "" : void 0);
261
- let data = {};
262
- let parameters = [];
263
- let key;
264
- if (visible === 0) key = "empty";
265
- else {
266
- data = { amount: visible };
267
- key = "results";
268
- parameters = [visible];
269
- }
270
- const localization = getLocalization(localizations.global, host, key, localizations.component);
271
- message.textContent = localize(localization, data, parameters);
272
- message.hidden = false;
273
- }
274
- function updateListboxPreview(preview, state, active, scroll) {
275
- const { length } = state.options.all;
276
- 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);
279
- }
280
- state.active = active;
281
- setAria$1(state.filter.element, "activedescendant", state.content.checkVisibility() ? active?.id : void 0);
282
- if (scroll ?? true) active?.scrollIntoView(listboxScrollOptions);
283
- if (preview !== "none") state.callbacks.data.onPreview(preview, state, active);
284
- }
285
- function updateListboxValueLabel(state) {
286
- 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;
290
- 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;
293
- }
294
- //#endregion
295
- //#region src/js/internal/listbox/listbox.data.ts
296
- function applyListboxSelection(parameters) {
297
- const { added, emit, option, scroll, selected, state } = parameters;
298
- const { length } = state.options.all;
299
- 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));
302
- }
303
- const values = parameters.values ?? (state.autocomplete.none && !state.listbox ? [state.filter.element.value] : (selected ?? state.options.selected).map((option) => getData$1(option, "value", false) ?? ""));
304
- 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;
307
- updateListboxForm(state, values, emit);
308
- updateListboxMessage(state);
309
- updateListboxPreview("set", state, option, scroll);
310
- updateListboxValueLabel(state);
311
- state.callbacks.data.onApply(state, option, values, added, selected, emit);
312
- }
313
- function filterListbox(type, state) {
314
- if (state.disabled || state.readonly) return;
315
- const update = state.filter.element.value !== state.filter.value;
316
- const option = filterListboxOptions(state);
317
- let preview;
318
- if (type.includes("delete")) preview = "none";
319
- else if (type.includes("insert")) preview = "typed";
320
- if (preview != null) state.callbacks.data.onFilter(preview, state, update, option);
321
- if (update) {
322
- state.filter.value = state.filter.element.value;
323
- dispatch(state.host, "input");
324
- }
325
- }
326
- function filterListboxOption(state, value, textContent) {
327
- const filterTextContent = textContent ?? false;
328
- const filter = getString(value).toLocaleLowerCase();
329
- filterListboxOptions(state);
330
- const { length } = state.options.all;
331
- let match;
332
- for (let index = 0; index < length; index += 1) {
333
- const option = state.options.all[index];
334
- if ((filterTextContent ? option.textContent : getData$1(option, "value", false) ?? "").toLocaleLowerCase() === filter) {
335
- match = option;
336
- break;
337
- }
338
- }
339
- return match;
340
- }
341
- function filterListboxOptions(state) {
342
- function filter(options) {
343
- const { length } = options;
344
- let count = 0;
345
- for (let index = 0; index < length; index += 1) {
346
- const option = options[index];
347
- option.hidden = (state.type === "select" || !state.autocomplete.none) && !option.textContent.toLocaleLowerCase().includes(value);
348
- if (!option.hidden) {
349
- count += 1;
350
- visible.push(option);
351
- }
352
- }
353
- return count === 0;
354
- }
355
- const value = state.filter.element.value.toLocaleLowerCase();
356
- const visible = [];
357
- if (state.groups == null) filter(state.options.all);
358
- else {
359
- const groupsLength = state.groups.length;
360
- for (let groupIndex = 0; groupIndex < groupsLength; groupIndex += 1) {
361
- const { element, options } = state.groups[groupIndex];
362
- element.hidden = filter(options);
363
- }
364
- }
365
- setAttribute(state.list, state.attributes.empty, visible.length === 0 ? "" : void 0);
366
- updateListboxMessage(state);
367
- return state.active != null && visible.includes(state.active) ? state.active : visible[0];
368
- }
369
- function setListboxValue(state, value, emit) {
370
- if (state.autocomplete.none && !state.listbox) {
371
- setListboxFilter(state, getString(value));
372
- return;
373
- }
374
- if (filterListboxOption(state, value) != null) setListboxValues(state, [value], emit);
375
- }
376
- function setListboxValues(state, value, emit) {
377
- if (!Array.isArray(value)) return;
378
- const values = (state.multiple ? value : value.slice(0, 1)).map((value) => getString(value).toLocaleLowerCase());
379
- if (values.length === 0) values.push("");
380
- if (state.autocomplete.none && !state.listbox) {
381
- setListboxValue(state, values[0], emit);
382
- return;
383
- }
384
- const { length } = state.options.all;
385
- const selected = [];
386
- for (let index = 0; index < length; index += 1) {
387
- const option = state.options.all[index];
388
- if (values.includes(getData$1(option, "value", false)?.toLocaleLowerCase() ?? "")) selected.push(option);
389
- }
390
- applyListboxSelection({
391
- emit,
392
- selected,
393
- state,
394
- added: true,
395
- option: selected[0] ?? state.options.all[0],
396
- values: state.autocomplete.none && !state.listbox ? values : void 0
397
- });
398
- }
399
- function toggleListboxOption(state, option) {
400
- if (option == null || !state.multiple && state.options.selected.includes(option)) {
401
- state.callbacks.data.onToggle(state);
402
- return;
403
- }
404
- const selected = state.options.selected.slice();
405
- let added = true;
406
- if (state.multiple) {
407
- const index = selected.indexOf(option);
408
- if (index === -1) selected.push(option);
409
- else {
410
- added = false;
411
- selected.splice(index, 1);
412
- }
413
- } else selected.splice(0, selected.length, option);
414
- applyListboxSelection({
415
- added,
416
- option,
417
- selected,
418
- state,
419
- scroll: false,
420
- values: state.autocomplete.none && !state.listbox && option != null ? [option.textContent] : void 0
421
- });
422
- state.callbacks.data.onToggle(state);
423
- }
424
- //#endregion
425
- 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,125 +0,0 @@
1
- import { n as OuiLocalizationsValues, t as OuiLocalizations } from "./l10n-Bn-7RcwR.mjs";
2
- import { RemovableEventListener } from "@oscarpalmer/toretto/models";
3
- //#region src/js/internal/listbox/listbox.model.d.ts
4
- type OuiListboxAttributes = {
5
- active: string;
6
- content: string;
7
- empty: string;
8
- filter: string;
9
- group: string;
10
- header: string;
11
- hidden: string;
12
- input: string;
13
- list: string;
14
- message: string;
15
- option: string;
16
- };
17
- type OuiListboxAutoComplete = Record<OuiListboxAutoCompleteType, boolean> & {
18
- value?: OuiListboxAutoCompleteType;
19
- };
20
- type OuiListboxAutoCompleteType = "both" | "inline" | "list" | "none";
21
- type OuiListboxCallbacks<State extends OuiListboxState = OuiListboxState> = {
22
- data: OuiListboxCallbacksData<State>;
23
- keydown: OuiListboxCallbacksKeydown<State>;
24
- };
25
- type OuiListboxCallbacksData<State extends OuiListboxState = OuiListboxState> = {
26
- onApply: OuiListboxCallbacksDataOnApply<State>;
27
- onFilter: OuiListboxCallbacksDataOnFilter<State>;
28
- onForm: (state: State) => void;
29
- onPreview: OuiListboxCallbacksDataOnPreview<State>;
30
- onToggle: (state: State) => void;
31
- };
32
- type OuiListboxCallbacksDataOnApply<State extends OuiListboxState = OuiListboxState> = (state: State, option: HTMLElement | undefined, values: string[], added: boolean, selected?: HTMLElement[], emit?: boolean) => void;
33
- type OuiListboxCallbacksDataOnFilter<State extends OuiListboxState = OuiListboxState> = (preview: OuiListboxPreview, state: State, update: boolean, active?: HTMLElement, emit?: boolean) => void;
34
- type OuiListboxCallbacksDataOnPreview<State extends OuiListboxState = OuiListboxState> = (preview: OuiListboxPreview, state: State, active?: HTMLElement) => void;
35
- type OuiListboxCallbacksKeydown<State extends OuiListboxState = OuiListboxState> = {
36
- onActivation?: (state: State) => void;
37
- onEnter?: (state: State) => void;
38
- onEscape?: (state: State) => void;
39
- onNavigation: OuiListboxCallbacksDataOnNavigation<State>;
40
- onSelection?: (state: State) => void;
41
- onTab?: (state: State) => void;
42
- onToggle?: (state: State) => void;
43
- preventActivation?: (state: State) => boolean;
44
- skipNavigation?: (state: State) => boolean;
45
- };
46
- type OuiListboxCallbacksDataOnNavigation<State extends OuiListboxState = OuiListboxState> = (preview: OuiListboxPreview, state: State, active?: HTMLElement) => void;
47
- type OuiListboxFilter = {
48
- element: HTMLInputElement;
49
- value: string;
50
- };
51
- type OuiListboxFooter = {
52
- container: HTMLElement;
53
- message: HTMLElement;
54
- };
55
- type OuiListboxGroup = {
56
- element: HTMLElement;
57
- header: HTMLElement;
58
- options: HTMLElement[];
59
- };
60
- type OuiListboxLabel = {
61
- element: HTMLLabelElement;
62
- id: string;
63
- };
64
- type OuiListboxLocalization<Localizations extends OuiLocalizationsValues> = {
65
- component: Record<string, Partial<Localizations>>;
66
- global: OuiLocalizations<Localizations>;
67
- };
68
- type OuiListboxLocalizations = {
69
- empty: string | (() => string);
70
- input: string | (() => string);
71
- invalid: string | (() => string);
72
- max: string | ((max: number) => string);
73
- min: string | ((min: number) => string);
74
- remove: string | ((label: string, value: string) => string);
75
- results: string | ((amount: number) => string);
76
- selected: string | ((amount: number) => string);
77
- };
78
- type OuiListboxOptions = {
79
- all: HTMLElement[];
80
- selected: HTMLElement[];
81
- };
82
- type OuiListboxPreview = "none" | "set" | "typed";
83
- type OuiListboxState = {
84
- active?: HTMLElement;
85
- attributes: OuiListboxAttributes;
86
- autocomplete: OuiListboxAutoComplete;
87
- callbacks: OuiListboxCallbacks;
88
- content: HTMLDivElement;
89
- disabled: boolean;
90
- elements: Array<HTMLElement | undefined>;
91
- filter: OuiListboxFilter;
92
- footer?: OuiListboxFooter;
93
- groups?: OuiListboxGroup[];
94
- host: HTMLElement;
95
- id: string;
96
- internals: ElementInternals;
97
- label: OuiListboxLabel;
98
- list: HTMLUListElement;
99
- listbox: boolean;
100
- listeners: RemovableEventListener[];
101
- localizations: OuiListboxLocalization<OuiListboxLocalizations>;
102
- max?: number;
103
- min?: number;
104
- message: HTMLElement;
105
- multiple: boolean;
106
- name: string;
107
- options: OuiListboxOptions;
108
- readonly: boolean;
109
- required: boolean;
110
- select: HTMLSelectElement;
111
- type: OuiListboxType;
112
- values: OuiListboxValues;
113
- };
114
- type OuiListboxStates<State extends OuiListboxState = OuiListboxState> = {
115
- map: WeakMap<HTMLElement, State>;
116
- set: Set<State>;
117
- };
118
- type OuiListboxType = "autocomplete" | "select";
119
- type OuiListboxValues = {
120
- current: string[];
121
- initial: string[];
122
- label: HTMLElement;
123
- };
124
- //#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 };