@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
package/src/js/tooltip.ts DELETED
@@ -1,367 +0,0 @@
1
- import {isNullableOrWhitespace} from '@oscarpalmer/atoms/is';
2
- import {getAria} from '@oscarpalmer/toretto/aria';
3
- import {setAttribute} from '@oscarpalmer/toretto/attribute';
4
- import {createElement} from '@oscarpalmer/toretto/create';
5
- import {on} from '@oscarpalmer/toretto/event';
6
- import {findAncestor} from '@oscarpalmer/toretto/find';
7
- import {
8
- createEmbeddedFloatable,
9
- type OuiFloatable,
10
- type OuiFloatableOptions,
11
- } from './floatable/floatable.embedded';
12
- import {attributable} from './internal/attributable';
13
-
14
- // #region Types
15
-
16
- class OuiTooltip {
17
- readonly #state: OuiTooltipState;
18
-
19
- /**
20
- * Is the tooltip open?
21
- */
22
- get open(): boolean {
23
- return this === activeTooltip && content.checkVisibility();
24
- }
25
-
26
- /**
27
- * Open or close the tooltip
28
- */
29
- set open(value: boolean) {
30
- if (value === true) {
31
- this.show();
32
- } else if (value === false) {
33
- this.hide();
34
- }
35
- }
36
-
37
- constructor(state: OuiTooltipState) {
38
- this.#state = state;
39
-
40
- state.floatable.update();
41
- }
42
-
43
- /**
44
- * Closes the tooltip
45
- */
46
- hide(): void {
47
- this.#state.floatable.hide();
48
- }
49
-
50
- /**
51
- * Opens the tooltip
52
- */
53
- show(): void {
54
- this.#state.floatable.show();
55
- }
56
- }
57
-
58
- type OuiTooltipState = {
59
- anchor: HTMLElement;
60
- elements: HTMLElement[];
61
- floatable: OuiFloatable;
62
- timer?: number;
63
- tooltip: OuiTooltip;
64
- };
65
-
66
- // #endregion
67
-
68
- // #region Functions
69
-
70
- function activate(event: Event, focus: boolean): void {
71
- const targetAnchor = findAncestor(event, SELECTOR) as HTMLElement | null;
72
- const targetContent = findAncestor(event, SELECTOR_CONTENT) as HTMLElement | null;
73
-
74
- if (targetAnchor == null && targetContent == null) {
75
- if (!focused) {
76
- closeTooltip(true, activeState);
77
-
78
- activeState = undefined;
79
- activeTooltip = undefined;
80
- }
81
-
82
- return;
83
- }
84
-
85
- const state = states.get((targetAnchor ?? targetContent)!);
86
-
87
- if (state == null || state.tooltip === activeTooltip) {
88
- return;
89
- }
90
-
91
- const shouldDelay = activeTooltip == null;
92
-
93
- closeTooltip(false, activeState);
94
-
95
- activeState = state;
96
- activeTooltip = state.tooltip;
97
-
98
- focused = focus;
99
-
100
- state.timer = setTimeout(
101
- () => {
102
- content.innerHTML = '';
103
-
104
- content.append(...state.elements);
105
-
106
- state.floatable.show();
107
-
108
- setTimeout(() => {
109
- state.floatable.update();
110
- });
111
- },
112
- shouldDelay ? delay : 0,
113
- );
114
- }
115
-
116
- function addTooltip(element: HTMLElement): void {
117
- if (!states.has(element)) {
118
- createTooltip(element);
119
- }
120
- }
121
-
122
- function closeTooltip(clear: boolean, state?: OuiTooltipState): void {
123
- if (state == null) {
124
- return;
125
- }
126
-
127
- if (state.timer != null) {
128
- clearTimeout(state.timer);
129
- }
130
-
131
- if (clear) {
132
- content?.hidePopover();
133
- }
134
- }
135
-
136
- function createTooltip(anchor: HTMLElement): void {
137
- const elements = getElements(anchor);
138
-
139
- if (elements == null) {
140
- return;
141
- }
142
-
143
- states.set(anchor, getState(anchor, elements));
144
- }
145
-
146
- function destroyTooltip(state: OuiTooltipState): void {
147
- clearTimeout(state.timer);
148
-
149
- state.floatable.destroy();
150
-
151
- state.anchor = undefined as never;
152
- state.elements = undefined as never;
153
- state.floatable = undefined as never;
154
- state.tooltip = undefined as never;
155
- }
156
-
157
- function findElements(attribute?: string): HTMLElement[] | undefined {
158
- if (attribute == null) {
159
- return;
160
- }
161
-
162
- const ids = attribute?.split(EXPRESSION_WHITESPACE) ?? [];
163
- const elements: HTMLElement[] = [];
164
-
165
- for (const id of ids) {
166
- if (isNullableOrWhitespace(id)) {
167
- continue;
168
- }
169
-
170
- const element = document.querySelector(`#${id}`);
171
-
172
- if (element != null) {
173
- const cloned = element.cloneNode(true) as HTMLElement;
174
-
175
- cloned.hidden = false;
176
-
177
- elements.push(cloned);
178
- }
179
- }
180
-
181
- return elements;
182
- }
183
-
184
- function getContent(): HTMLElement {
185
- return createElement('div', {
186
- attribute: {
187
- [ATTRIBUTE_CONTENT]: '',
188
- popover: 'hint',
189
- },
190
- property: {
191
- role: 'tooltip',
192
- tabIndex: -1,
193
- },
194
- });
195
- }
196
-
197
- function getElements(anchor: HTMLElement): HTMLElement[] | undefined {
198
- let elements = findElements(getAria(anchor, 'labelledby'));
199
-
200
- if (elements == null || elements.length === 0) {
201
- elements = findElements(getAria(anchor, 'describedby'));
202
- }
203
-
204
- if (elements != null && elements.length > 0) {
205
- return elements as HTMLElement[];
206
- }
207
-
208
- let textContent = getAria(anchor, 'label');
209
-
210
- if (isNullableOrWhitespace(textContent)) {
211
- textContent = getAria(anchor, 'description');
212
- }
213
-
214
- if (isNullableOrWhitespace(textContent)) {
215
- return;
216
- }
217
-
218
- return [
219
- createElement('p', {
220
- property: {
221
- textContent,
222
- },
223
- }),
224
- ];
225
- }
226
-
227
- function getState(anchor: HTMLElement, elements: HTMLElement[]): OuiTooltipState {
228
- const state: OuiTooltipState = {
229
- anchor,
230
- elements,
231
- floatable: createEmbeddedFloatable(anchor, content, options),
232
- tooltip: null as never,
233
- };
234
-
235
- state.tooltip = new OuiTooltip(state);
236
-
237
- return state;
238
- }
239
-
240
- /**
241
- * Get the _OuiTooltip_ for an element
242
- *
243
- * @param element Element to get _OuiTooltip_ for
244
- * @returns _OuiTooltip_ instance
245
- */
246
- function getTooltip(element: HTMLElement): OuiTooltip | undefined {
247
- return states.get(element)?.tooltip;
248
- }
249
-
250
- function onFocusin(event: Event): void {
251
- activate(event, true);
252
- }
253
-
254
- function onFocusout(): void {
255
- if (activeTooltip == null) {
256
- return;
257
- }
258
-
259
- if (focusTimer != null) {
260
- clearTimeout(focusTimer);
261
- }
262
-
263
- focusTimer = setTimeout(() => {
264
- if (
265
- activeTooltip == null ||
266
- document.activeElement == null ||
267
- findAncestor(document.activeElement, SELECTOR) != null
268
- ) {
269
- return;
270
- }
271
-
272
- closeTooltip(true, activeState);
273
-
274
- activeState = undefined;
275
- activeTooltip = undefined;
276
- });
277
- }
278
-
279
- function onPointermove(event: Event): void {
280
- activate(event, false);
281
- }
282
-
283
- function onToggle(event: ToggleEvent): void {
284
- setAttribute(content, ATTRIBUTE_CONTENT_OPEN, event.newState === 'open' ? '' : undefined);
285
- }
286
-
287
- function removeTooltip(element: HTMLElement): void {
288
- const state = states.get(element);
289
-
290
- if (state == null) {
291
- return;
292
- }
293
-
294
- destroyTooltip(state);
295
-
296
- states.delete(element);
297
- }
298
-
299
- /**
300
- * Set the delay before showing the tooltip, in milliseconds
301
- *
302
- * _(Default delay is half a second, or 500 milliseconds)_
303
- * @param value Delay in milliseconds
304
- */
305
- function setTooltipDelay(value: number): void {
306
- if (typeof value === 'number' && !Number.isNaN(value) && value >= 0) {
307
- delay = value;
308
- }
309
- }
310
-
311
- // #endregion
312
-
313
- // #region Variables
314
-
315
- const EXPRESSION_WHITESPACE = /\s+/;
316
-
317
- const ATTRIBUTE = 'oui-tooltip';
318
-
319
- const ATTRIBUTE_CONTENT = `${ATTRIBUTE}-content`;
320
-
321
- const ATTRIBUTE_CONTENT_OPEN = `${ATTRIBUTE_CONTENT}-open`;
322
-
323
- const SELECTOR = `[${ATTRIBUTE}]`;
324
-
325
- const SELECTOR_CONTENT = `[${ATTRIBUTE_CONTENT}]`;
326
-
327
- const content = getContent();
328
-
329
- const states = new WeakMap<HTMLElement, OuiTooltipState>();
330
-
331
- const options: OuiFloatableOptions = {
332
- attribute: `${ATTRIBUTE}-position`,
333
- position: 'above',
334
- reusable: true,
335
- };
336
-
337
- let delay = 500;
338
-
339
- let focused = false;
340
-
341
- let activeState: OuiTooltipState | undefined;
342
-
343
- let activeTooltip: OuiTooltip | undefined;
344
-
345
- let focusTimer: number | undefined;
346
-
347
- // #endregion
348
-
349
- // #region Initialization
350
-
351
- document.body.append(content);
352
-
353
- on(content, 'toggle', onToggle);
354
-
355
- on(document, 'focusin', onFocusin);
356
- on(document, 'focusout', onFocusout);
357
- on(document, 'pointermove', onPointermove);
358
-
359
- attributable(ATTRIBUTE, addTooltip, removeTooltip);
360
-
361
- // #endregion
362
-
363
- // #region Exports
364
-
365
- export {getTooltip, setTooltipDelay, type OuiTooltip};
366
-
367
- // #endregion
File without changes
File without changes