@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,336 +0,0 @@
1
- import {isPlainObject} from '@oscarpalmer/atoms/is';
2
- import {getAria, setAria} from '@oscarpalmer/toretto/aria';
3
- import {getAttribute, setAttribute} from '@oscarpalmer/toretto/attribute';
4
- import {on} from '@oscarpalmer/toretto/event';
5
- import {isHTMLOrSVGElement} from '@oscarpalmer/toretto/is';
6
- import type {RemovableEventListener} from '@oscarpalmer/toretto/models';
7
- import {setStyle, setStyles} from '@oscarpalmer/toretto/style';
8
-
9
- // #region Types
10
-
11
- export type CreateOuiFloatableOptions = {
12
- /**
13
- * Open the floatable when created? _(defaults to `true`)_
14
- */
15
- open?: boolean;
16
- /**
17
- * Position of the floatable _(defaults to `below`)_
18
- */
19
- position?: OuiFloatablePosition;
20
- };
21
-
22
- export class OuiFloatable {
23
- #destroyed = false;
24
-
25
- readonly #state: OuiFloatableState;
26
-
27
- /**
28
- * Is the floatable open?
29
- */
30
- get open(): boolean {
31
- return this.#state.content.checkVisibility();
32
- }
33
-
34
- /**
35
- * Open or close the floatable
36
- */
37
- set open(value: boolean) {
38
- if (value === true) {
39
- this.show();
40
- } else if (value === false) {
41
- this.hide();
42
- }
43
- }
44
-
45
- constructor(state: OuiFloatableState, standalone: boolean) {
46
- this.#state = state;
47
-
48
- this.#initialize(state, standalone);
49
- }
50
-
51
- /**
52
- * Destroy the floatable, removing it from the DOM and cleaning up references
53
- */
54
- destroy(): void {
55
- if (this.#destroyed) {
56
- return;
57
- }
58
-
59
- this.#destroyed = true;
60
-
61
- removeFloatable(this.#state.content);
62
-
63
- this.#state.anchor = null as never;
64
- this.#state.content = null as never;
65
- }
66
-
67
- /**
68
- * Closes the floatable
69
- */
70
- hide(): void {
71
- if (!this.#destroyed && this.open) {
72
- this.#state.content.hidePopover();
73
- }
74
- }
75
-
76
- /**
77
- * Opens the floatable
78
- */
79
- show(): void {
80
- if (!this.#destroyed && !this.open) {
81
- this.#state.content.showPopover();
82
- }
83
- }
84
-
85
- /**
86
- * Update the position of the floatable, with an optional new position
87
- *
88
- * @param position Optional new position
89
- */
90
- update(position?: OuiFloatablePosition): void {
91
- if (!this.#destroyed) {
92
- setPosition(this.#state, position);
93
- }
94
- }
95
-
96
- #initialize(state: OuiFloatableState, standalone: boolean): void {
97
- const {anchor, content} = state;
98
-
99
- if (standalone) {
100
- setAttribute(content, ATTRIBUTE_FLOATABLE, '');
101
-
102
- content.popover = 'manual';
103
- } else {
104
- content.popover ??= 'auto';
105
- }
106
-
107
- setStyle(anchor, 'anchorName', state.name);
108
- setStyle(content, 'positionAnchor', state.name);
109
- }
110
- }
111
-
112
- export type OuiFloatableOptions = {
113
- attribute?: string;
114
- position: OuiFloatablePosition;
115
- reusable: boolean;
116
- };
117
-
118
- export type OuiFloatablePosition =
119
- | 'above'
120
- | 'above-end'
121
- | 'above-start'
122
- | 'below'
123
- | 'below-end'
124
- | 'below-start'
125
- | 'end'
126
- | 'end-bottom'
127
- | 'end-top'
128
- | 'start'
129
- | 'start-bottom'
130
- | 'start-top';
131
-
132
- type OuiFloatableState = {
133
- anchor: HTMLElement;
134
- content: HTMLElement;
135
- name: string;
136
- options: OuiFloatableOptions;
137
- };
138
-
139
- // #endregion
140
-
141
- // #region Functions
142
-
143
- function getAnchorName(anchor: HTMLElement): string {
144
- let {anchorName} = anchor.style;
145
-
146
- if (anchorName.length > 0) {
147
- return anchorName;
148
- }
149
-
150
- index += 1;
151
-
152
- return `--oui-floatable-anchor-${index}`;
153
- }
154
-
155
- export function createEmbeddedFloatable(
156
- anchor: HTMLElement,
157
- content: HTMLElement,
158
- options: OuiFloatableOptions,
159
- ): OuiFloatable {
160
- return createInstance(anchor, content, options, false);
161
- }
162
-
163
- /**
164
- * Create a _OuiFloatable_ for an anchor and content element
165
- *
166
- * @param anchor Anchor element
167
- * @param content Content element
168
- * @param options _OuiFloatable_ options
169
- * @returns _OuiFloatable_ instance
170
- */
171
- export function createFloatable(
172
- anchor: HTMLElement,
173
- content: HTMLElement,
174
- options?: CreateOuiFloatableOptions,
175
- ): OuiFloatable {
176
- const {open, position} = getOptions(options);
177
-
178
- const floatable = createInstance(
179
- anchor,
180
- content,
181
- {
182
- position,
183
- reusable: false,
184
- },
185
- true,
186
- );
187
-
188
- floatable?.update(position);
189
-
190
- if (open) {
191
- floatable?.show();
192
- }
193
-
194
- return floatable;
195
- }
196
-
197
- function createInstance(
198
- anchor: HTMLElement,
199
- content: HTMLElement,
200
- options: OuiFloatableOptions,
201
- standalone: boolean,
202
- ): OuiFloatable {
203
- if (!isHTMLOrSVGElement(anchor) || !isHTMLOrSVGElement(content)) {
204
- throw new TypeError(MESSAGE);
205
- }
206
-
207
- let floatable = options.reusable ? undefined : instances.get(content);
208
-
209
- if (floatable == null) {
210
- floatable = new OuiFloatable(getState(anchor, content, options), standalone);
211
-
212
- if (!options.reusable) {
213
- instances.set(content, floatable);
214
- }
215
- }
216
-
217
- return floatable;
218
- }
219
-
220
- export function getOnBeforeToggleListener(element: HTMLElement): RemovableEventListener {
221
- return on(
222
- element,
223
- 'beforetoggle',
224
- event => {
225
- const {newState, source} = event;
226
-
227
- if (newState === 'open' && source != null && getAria(source, 'disabled') === true) {
228
- event.preventDefault();
229
- }
230
- },
231
- {
232
- passive: false,
233
- },
234
- );
235
- }
236
-
237
- function getOptions(input?: CreateOuiFloatableOptions): Required<CreateOuiFloatableOptions> {
238
- const object = isPlainObject(input) ? input : {};
239
-
240
- return {
241
- open: typeof object.open === 'boolean' ? object.open : true,
242
- position: object.position != null && object.position in AREAS ? object.position : 'below',
243
- };
244
- }
245
-
246
- function getPosition(
247
- state: OuiFloatableState,
248
- override?: OuiFloatablePosition,
249
- ): OuiFloatablePosition {
250
- if (override != null && override in AREAS) {
251
- return override;
252
- }
253
-
254
- const {anchor, options} = state;
255
-
256
- if (options.attribute == null) {
257
- return options.position;
258
- }
259
-
260
- const attribute = getAttribute(anchor, options.attribute);
261
-
262
- return attribute != null && attribute in AREAS
263
- ? (attribute as OuiFloatablePosition)
264
- : options.position;
265
- }
266
-
267
- function getState(
268
- anchor: HTMLElement,
269
- content: HTMLElement,
270
- options: OuiFloatableOptions,
271
- ): OuiFloatableState {
272
- const name = getAnchorName(anchor);
273
-
274
- const state: OuiFloatableState = {
275
- anchor,
276
- content,
277
- name,
278
- options,
279
- };
280
-
281
- return state;
282
- }
283
-
284
- export function removeFloatable(content: HTMLElement): void {
285
- instances.get(content)?.destroy();
286
-
287
- instances.delete(content);
288
- }
289
-
290
- function setPosition(state: OuiFloatableState, override?: OuiFloatablePosition): void {
291
- const position = getPosition(state, override);
292
-
293
- const area = AREAS[position];
294
-
295
- setAttribute(state.content, ATTRIBUTE_POSITION, POSITIONS[area]);
296
-
297
- setStyles(state.content, {
298
- positionAnchor: state.name,
299
- positionArea: area,
300
- });
301
- }
302
-
303
- // #endregion
304
-
305
- // #region Variables
306
-
307
- const AREAS: Record<OuiFloatablePosition, string> = {
308
- above: 'block-start',
309
- 'above-end': 'start span-start',
310
- 'above-start': 'start span-end',
311
- below: 'block-end',
312
- 'below-end': 'end span-start',
313
- 'below-start': 'end span-end',
314
- end: 'center end',
315
- 'end-bottom': 'span-start end',
316
- 'end-top': 'span-end end',
317
- start: 'center start',
318
- 'start-bottom': 'span-start start',
319
- 'start-top': 'span-end start',
320
- };
321
-
322
- export const ATTRIBUTE_FLOATABLE = 'oui-floatable';
323
-
324
- const ATTRIBUTE_POSITION = 'oui-position';
325
-
326
- const MESSAGE = 'Anchor and content must be an HTMLElement or SVGElement';
327
-
328
- const POSITIONS = Object.fromEntries(
329
- Object.entries(AREAS).map(([position, area]) => [area, position]),
330
- ) as Record<string, OuiFloatablePosition>;
331
-
332
- const instances = new WeakMap<HTMLElement, OuiFloatable>();
333
-
334
- let index = 0;
335
-
336
- // #endregion
@@ -1,6 +0,0 @@
1
- export {
2
- createFloatable,
3
- type CreateOuiFloatableOptions,
4
- type OuiFloatable,
5
- type OuiFloatablePosition,
6
- } from './floatable.embedded';