@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,38 +1,43 @@
1
1
  import { attributable } from "../internal/attributable.mjs";
2
- import { OuiDraggable, addDraggable, getDraggableStates, removeDraggable } from "../internal/draggable.mjs";
2
+ import { DRAGGABLE_SYMBOL } from "../internal/draggable/draggable.model.mjs";
3
+ import { addDraggable, destroyDraggable, getDraggableElement, getDraggableStates, initializeDraggable, removeDraggable } from "../internal/draggable/index.mjs";
4
+ import { SORTABLE_ATTRIBUTE, SORTABLE_ATTRIBUTE_ACTIVE, SORTABLE_ATTRIBUTE_CONNECTIONS, SORTABLE_ATTRIBUTE_CONTAINER, SORTABLE_ATTRIBUTE_DIRECTION, SORTABLE_ATTRIBUTE_HORIZONTAL, SORTABLE_ATTRIBUTE_ORIGIN, SORTABLE_ATTRIBUTE_PLACEHOLDER_DRAG, SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION, SORTABLE_ATTRIBUTE_VERTICAL, SORTABLE_CONTAINERS, SORTABLE_MESSAGE, SORTABLE_SELECTOR_ITEM, sortablePlaceholder } from "./sortable.model.mjs";
3
5
  import { getAttribute, setAttribute, setAttributes } from "@oscarpalmer/toretto/attribute";
4
- import { createElement } from "@oscarpalmer/toretto/create";
5
6
  import { dispatch, getEventPosition } from "@oscarpalmer/toretto/event";
6
7
  import { findAncestor, getElementFromPosition } from "@oscarpalmer/toretto/find";
7
- import { setStyle } from "@oscarpalmer/toretto/style";
8
8
  import { isHTMLOrSVGElement } from "@oscarpalmer/toretto/is";
9
+ import { setStyle } from "@oscarpalmer/toretto/style";
10
+ import { createElement } from "@oscarpalmer/toretto/create";
9
11
  //#region src/js/sortable/sortable.embedded.ts
10
- var OuiSortable = class extends OuiDraggable {
11
- constructor(element, options) {
12
- super("sortable", "sort", ATTRIBUTE, element, {
13
- container: {
14
- attribute: ATTRIBUTE_CONTAINER,
15
- map: CONTAINERS
16
- },
17
- direction: { attribute: ATTRIBUTE_DIRECTION },
18
- drag: {
19
- onBegin,
20
- onCancel,
21
- onEnd,
22
- onMove
23
- },
24
- input: options,
25
- position: {
26
- getOffset: getOffsetPosition,
27
- getOriginal: getOriginalPosition
28
- },
29
- getDragged: getDragPlaceholder,
30
- getOrigin: () => (getDraggableStates(element)?.sortable)?.origin
31
- }, { connections: getAttribute(element, ATTRIBUTE_CONNECTIONS) });
32
- }
33
- };
12
+ function OuiSortable(element, options) {
13
+ this[DRAGGABLE_SYMBOL] = initializeDraggable(this, "sortable", "sort", SORTABLE_ATTRIBUTE, element, {
14
+ container: {
15
+ attribute: SORTABLE_ATTRIBUTE_CONTAINER,
16
+ map: SORTABLE_CONTAINERS
17
+ },
18
+ direction: { attribute: SORTABLE_ATTRIBUTE_DIRECTION },
19
+ drag: {
20
+ onBegin,
21
+ onCancel,
22
+ onEnd,
23
+ onMove
24
+ },
25
+ input: options,
26
+ position: {
27
+ getOffset: getOffsetPosition,
28
+ getOriginal: getOriginalPosition
29
+ },
30
+ getDragged: getDragPlaceholder,
31
+ getOrigin: () => (getDraggableStates(element)?.sortable)?.origin
32
+ }, { connections: getAttribute(element, SORTABLE_ATTRIBUTE_CONNECTIONS) });
33
+ }
34
+ OuiSortable.prototype.destroy = destroySortable;
35
+ Object.defineProperties(OuiSortable.prototype, { element: {
36
+ enumerable: true,
37
+ get: getDraggableElement
38
+ } });
34
39
  function afterEnd(insert, from, events, elements, position, valid) {
35
- elements.origin?.removeAttribute(ATTRIBUTE_ORIGIN);
40
+ elements.origin?.removeAttribute(SORTABLE_ATTRIBUTE_ORIGIN);
36
41
  from.state.origin = void 0;
37
42
  resetPlaceholders();
38
43
  if (!valid || events.some((event) => event?.defaultPrevented)) return;
@@ -46,7 +51,7 @@ function afterEnd(insert, from, events, elements, position, valid) {
46
51
  if (position.y < top + height / 2) insertion = "beforebegin";
47
52
  else insertion = "afterend";
48
53
  elements.target?.insertAdjacentElement(insertion, elements.origin);
49
- document.body.removeAttribute(ATTRIBUTE_ACTIVE);
54
+ document.body.removeAttribute(SORTABLE_ATTRIBUTE_ACTIVE);
50
55
  }
51
56
  /**
52
57
  * Creates _(or retrieves)_ a _OuiSortable_ instance for an element
@@ -55,12 +60,15 @@ function afterEnd(insert, from, events, elements, position, valid) {
55
60
  * @returns _OuiSortable_ instance
56
61
  */
57
62
  function createSortable(element, options) {
58
- if (!isHTMLOrSVGElement(element)) throw new TypeError(MESSAGE);
63
+ if (!isHTMLOrSVGElement(element)) throw new TypeError(SORTABLE_MESSAGE);
59
64
  return addSortable(element, options);
60
65
  }
66
+ function destroySortable() {
67
+ destroyDraggable(this);
68
+ }
61
69
  function getDragPlaceholder() {
62
- placeholder.drag.default ??= createElement("div");
63
- return placeholder.drag.custom ?? placeholder.drag.default;
70
+ sortablePlaceholder.drag.default ??= createElement("div");
71
+ return sortablePlaceholder.drag.custom ?? sortablePlaceholder.drag.default;
64
72
  }
65
73
  function getOffsetPosition(_, item, element, position) {
66
74
  const rectangle = element.getBoundingClientRect();
@@ -73,20 +81,20 @@ function getOriginalPosition(_, __, position) {
73
81
  return position;
74
82
  }
75
83
  function getPositionPlaceholder(item) {
76
- placeholder.position ??= createElement("div");
77
- setAttribute(placeholder.position, ATTRIBUTE_PLACEHOLDER_POSITION, "");
78
- if (item.state.origin != null) setStyle(placeholder.position, "--placeholder-height", `${item.state.origin.getBoundingClientRect().height}px`);
79
- return placeholder.position;
84
+ sortablePlaceholder.position ??= createElement("div");
85
+ setAttribute(sortablePlaceholder.position, SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION, "");
86
+ if (item.state.origin != null) setStyle(sortablePlaceholder.position, "--placeholder-height", `${item.state.origin.getBoundingClientRect().height}px`);
87
+ return sortablePlaceholder.position;
80
88
  }
81
89
  function onBegin(_, globals, item, element) {
82
90
  item.state.origin = element;
83
91
  setPlaceholder(globals, item, element);
84
- setAttribute(element, ATTRIBUTE_ORIGIN, "");
85
- setAttribute(document.body, ATTRIBUTE_ACTIVE, "");
92
+ setAttribute(element, SORTABLE_ATTRIBUTE_ORIGIN, "");
93
+ setAttribute(document.body, SORTABLE_ATTRIBUTE_ACTIVE, "");
86
94
  }
87
95
  function onCancel(_, item) {
88
- item.state.origin?.removeAttribute(ATTRIBUTE_ORIGIN);
89
- document.body.removeAttribute(ATTRIBUTE_ACTIVE);
96
+ item.state.origin?.removeAttribute(SORTABLE_ATTRIBUTE_ORIGIN);
97
+ document.body.removeAttribute(SORTABLE_ATTRIBUTE_ACTIVE);
90
98
  resetPlaceholders();
91
99
  item.state.origin = void 0;
92
100
  }
@@ -97,16 +105,16 @@ function onEnd(event, globals, item, reset) {
97
105
  y: 0
98
106
  };
99
107
  const target = getElementFromPosition(position)[0];
100
- let element = findAncestor(target, SELECTOR_ITEM);
101
- if (element?.hasAttribute(ATTRIBUTE_PLACEHOLDER_POSITION)) {
102
- if (getAttribute(element, ATTRIBUTE_PLACEHOLDER_POSITION) === "after") element = element.previousElementSibling;
108
+ let element = findAncestor(target, SORTABLE_SELECTOR_ITEM);
109
+ if (element?.hasAttribute(SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION)) {
110
+ if (getAttribute(element, SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION) === "after") element = element.previousElementSibling;
103
111
  else element = element.nextElementSibling;
104
112
  }
105
113
  let insert = "insert";
106
114
  let toInstance;
107
115
  let toState;
108
116
  if (element == null) {
109
- element = findAncestor(target, SELECTOR);
117
+ element = findAncestor(target, SORTABLE_SELECTOR_ITEM);
110
118
  toInstance = globals.instances.get(element)?.sortable;
111
119
  toState = globals.states.get(element)?.sortable;
112
120
  insert = element == null ? void 0 : element.children.length === 0 ? "append" : "prepend";
@@ -145,11 +153,11 @@ function onEnd(event, globals, item, reset) {
145
153
  }
146
154
  function onMove(event, globals, item, position) {
147
155
  const fromElement = item.state.origin;
148
- const toElement = findAncestor(event, SELECTOR_ITEM);
156
+ const toElement = findAncestor(event, SORTABLE_SELECTOR_ITEM);
149
157
  let toInstance;
150
158
  let toState;
151
159
  if (toElement == null) {
152
- const element = findAncestor(event, SELECTOR);
160
+ const element = findAncestor(event, SORTABLE_SELECTOR_ITEM);
153
161
  toInstance = globals.instances.get(element)?.sortable;
154
162
  toState = globals.states.get(element)?.sortable;
155
163
  } else {
@@ -171,7 +179,7 @@ function onMove(event, globals, item, position) {
171
179
  place = "after";
172
180
  toElement.insertAdjacentElement("afterend", placeholder);
173
181
  }
174
- setAttribute(placeholder, ATTRIBUTE_PLACEHOLDER_POSITION, place);
182
+ setAttribute(placeholder, SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION, place);
175
183
  } else placeholder.remove();
176
184
  return {
177
185
  from: {
@@ -185,23 +193,23 @@ function onMove(event, globals, item, position) {
185
193
  };
186
194
  }
187
195
  function resetPlaceholders() {
188
- placeholder.drag.custom?.remove();
189
- placeholder.drag.default?.remove();
190
- placeholder.position?.remove();
191
- placeholder.drag.custom = void 0;
196
+ sortablePlaceholder.drag.custom?.remove();
197
+ sortablePlaceholder.drag.default?.remove();
198
+ sortablePlaceholder.position?.remove();
199
+ sortablePlaceholder.drag.custom = void 0;
192
200
  }
193
201
  function setPlaceholder(state, item, origin) {
194
202
  const element = getDragPlaceholder();
195
- placeholder.drag.default.innerHTML = "";
203
+ if (sortablePlaceholder.drag.default != null) sortablePlaceholder.drag.default.innerHTML = "";
196
204
  updatePlaceholder(item, element);
197
205
  const dispatched = dispatch(item.instance.element, "sortable:placeholder", { detail: {
198
206
  origin,
199
- parent: item.state.element,
207
+ parent: item.instance.element,
200
208
  placeholder: element,
201
209
  create: (value) => {
202
210
  if (!isHTMLOrSVGElement(value)) return;
203
211
  const element = value;
204
- placeholder.drag.custom = element;
212
+ sortablePlaceholder.drag.custom = element;
205
213
  updatePlaceholder(item, element);
206
214
  state.element = {
207
215
  rectangle: element.getBoundingClientRect(),
@@ -210,18 +218,18 @@ function setPlaceholder(state, item, origin) {
210
218
  }
211
219
  } });
212
220
  setTimeout(() => {
213
- if (!dispatched.defaultPrevented && placeholder.drag.custom == null) placeholder.drag.default?.append(element.cloneNode(true));
214
- document.body.append(placeholder.drag.custom ?? placeholder.drag.default ?? "");
221
+ if (!dispatched.defaultPrevented && sortablePlaceholder.drag.custom == null) sortablePlaceholder.drag.default?.append(element.cloneNode(true));
222
+ document.body.append(sortablePlaceholder.drag.custom ?? sortablePlaceholder.drag.default ?? "");
215
223
  });
216
224
  }
217
225
  function updatePlaceholder(item, element) {
218
- setAttribute(element, ATTRIBUTE_PLACEHOLDER_DRAG, "");
226
+ setAttribute(element, SORTABLE_ATTRIBUTE_PLACEHOLDER_DRAG, "");
219
227
  setStyle(element, "position", "fixed");
220
228
  const state = getDraggableStates(item.state.element)?.sortable;
221
229
  if (state == null) return;
222
230
  setAttributes(element, {
223
- [ATTRIBUTE_HORIZONTAL]: state.horizontal ? "" : void 0,
224
- [ATTRIBUTE_VERTICAL]: state.vertical ? "" : void 0
231
+ [SORTABLE_ATTRIBUTE_HORIZONTAL]: state.horizontal ? "" : void 0,
232
+ [SORTABLE_ATTRIBUTE_VERTICAL]: state.vertical ? "" : void 0
225
233
  });
226
234
  }
227
235
  function validatePosition(_, from, to, position) {
@@ -234,33 +242,12 @@ function validatePosition(_, from, to, position) {
234
242
  if (valid && to?.state.connections != null) valid = from.state.element.matches(to.state.connections);
235
243
  return valid;
236
244
  }
237
- const ATTRIBUTE = "oui-sortable";
238
- const ATTRIBUTE_ACTIVE = `${ATTRIBUTE}-active`;
239
- const ATTRIBUTE_CONNECTIONS = `${ATTRIBUTE}-connections`;
240
- const ATTRIBUTE_CONTAINER = `${ATTRIBUTE}-container`;
241
- const ATTRIBUTE_DIRECTION = `${ATTRIBUTE}-direction`;
242
- const ATTRIBUTE_HORIZONTAL = `${ATTRIBUTE}-horizontal`;
243
- const ATTRIBUTE_ORIGIN = `${ATTRIBUTE}-origin`;
244
- const ATTRIBUTE_PLACEHOLDER_DRAG = `${ATTRIBUTE}-placeholder-drag`;
245
- const ATTRIBUTE_PLACEHOLDER_POSITION = `${ATTRIBUTE}-placeholder-position`;
246
- const ATTRIBUTE_VERTICAL = `${ATTRIBUTE}-vertical`;
247
- const CONTAINERS = /* @__PURE__ */ new Map();
248
- const MESSAGE = "The element must be an instance of HTMLElement or SVGElement";
249
- const SELECTOR = `[${ATTRIBUTE}]`;
250
- const SELECTOR_ITEM = `[${ATTRIBUTE}] > *`;
251
245
  const bound = {
252
246
  constructor: OuiSortable,
253
247
  property: "sortable"
254
248
  };
255
- const placeholder = {
256
- drag: {
257
- custom: void 0,
258
- default: void 0
259
- },
260
- position: void 0
261
- };
262
249
  const addSortable = addDraggable.bind(bound);
263
250
  const removeSortable = removeDraggable.bind(bound);
264
- attributable(ATTRIBUTE, addSortable, removeSortable);
251
+ attributable(SORTABLE_ATTRIBUTE, addSortable, removeSortable);
265
252
  //#endregion
266
- export { OuiSortable, createSortable };
253
+ export { createSortable };
@@ -0,0 +1,2 @@
1
+ import { $ as OuiSortable, _t as sortablePlaceholder, at as SORTABLE_ATTRIBUTE_CONNECTIONS, ct as SORTABLE_ATTRIBUTE_HORIZONTAL, dt as SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION, et as OuiSortablePlaceholder, ft as SORTABLE_ATTRIBUTE_VERTICAL, gt as SORTABLE_SELECTOR_ITEM, ht as SORTABLE_SELECTOR, it as SORTABLE_ATTRIBUTE_ACTIVE, lt as SORTABLE_ATTRIBUTE_ORIGIN, mt as SORTABLE_MESSAGE, nt as OuiSortableState, ot as SORTABLE_ATTRIBUTE_CONTAINER, pt as SORTABLE_CONTAINERS, rt as SORTABLE_ATTRIBUTE, st as SORTABLE_ATTRIBUTE_DIRECTION, tt as OuiSortablePlaceholderDrag, ut as SORTABLE_ATTRIBUTE_PLACEHOLDER_DRAG } from "../movable.model-BHaK_mKw.mjs";
2
+ export { OuiSortable, OuiSortablePlaceholder, OuiSortablePlaceholderDrag, OuiSortableState, SORTABLE_ATTRIBUTE, SORTABLE_ATTRIBUTE_ACTIVE, SORTABLE_ATTRIBUTE_CONNECTIONS, SORTABLE_ATTRIBUTE_CONTAINER, SORTABLE_ATTRIBUTE_DIRECTION, SORTABLE_ATTRIBUTE_HORIZONTAL, SORTABLE_ATTRIBUTE_ORIGIN, SORTABLE_ATTRIBUTE_PLACEHOLDER_DRAG, SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION, SORTABLE_ATTRIBUTE_VERTICAL, SORTABLE_CONTAINERS, SORTABLE_MESSAGE, SORTABLE_SELECTOR, SORTABLE_SELECTOR_ITEM, sortablePlaceholder };
@@ -0,0 +1,24 @@
1
+ //#region src/js/sortable/sortable.model.ts
2
+ const SORTABLE_ATTRIBUTE = "oui-sortable";
3
+ const SORTABLE_ATTRIBUTE_ACTIVE = `${SORTABLE_ATTRIBUTE}-active`;
4
+ const SORTABLE_ATTRIBUTE_CONNECTIONS = `${SORTABLE_ATTRIBUTE}-connections`;
5
+ const SORTABLE_ATTRIBUTE_CONTAINER = `${SORTABLE_ATTRIBUTE}-container`;
6
+ const SORTABLE_ATTRIBUTE_DIRECTION = `${SORTABLE_ATTRIBUTE}-direction`;
7
+ const SORTABLE_ATTRIBUTE_HORIZONTAL = `${SORTABLE_ATTRIBUTE}-horizontal`;
8
+ const SORTABLE_ATTRIBUTE_ORIGIN = `${SORTABLE_ATTRIBUTE}-origin`;
9
+ const SORTABLE_ATTRIBUTE_PLACEHOLDER_DRAG = `${SORTABLE_ATTRIBUTE}-placeholder-drag`;
10
+ const SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION = `${SORTABLE_ATTRIBUTE}-placeholder-position`;
11
+ const SORTABLE_ATTRIBUTE_VERTICAL = `${SORTABLE_ATTRIBUTE}-vertical`;
12
+ const SORTABLE_CONTAINERS = /* @__PURE__ */ new Map();
13
+ const SORTABLE_MESSAGE = "The element must be an instance of HTMLElement or SVGElement";
14
+ const SORTABLE_SELECTOR = `[${SORTABLE_ATTRIBUTE}]`;
15
+ const SORTABLE_SELECTOR_ITEM = `[${SORTABLE_ATTRIBUTE}] > *`;
16
+ const sortablePlaceholder = {
17
+ drag: {
18
+ custom: void 0,
19
+ default: void 0
20
+ },
21
+ position: void 0
22
+ };
23
+ //#endregion
24
+ export { SORTABLE_ATTRIBUTE, SORTABLE_ATTRIBUTE_ACTIVE, SORTABLE_ATTRIBUTE_CONNECTIONS, SORTABLE_ATTRIBUTE_CONTAINER, SORTABLE_ATTRIBUTE_DIRECTION, SORTABLE_ATTRIBUTE_HORIZONTAL, SORTABLE_ATTRIBUTE_ORIGIN, SORTABLE_ATTRIBUTE_PLACEHOLDER_DRAG, SORTABLE_ATTRIBUTE_PLACEHOLDER_POSITION, SORTABLE_ATTRIBUTE_VERTICAL, SORTABLE_CONTAINERS, SORTABLE_MESSAGE, SORTABLE_SELECTOR, SORTABLE_SELECTOR_ITEM, sortablePlaceholder };
@@ -1,2 +1,3 @@
1
- import { d as OuiSortable, f as createSortable, t as CreateOuiDraggableOptions } from "../draggable-a6w0J1OD.mjs";
1
+ import { $ as OuiSortable, p as CreateOuiDraggableOptions } from "../movable.model-BHaK_mKw.mjs";
2
+ import { t as createSortable } from "../sortable.embedded-DzBKAwSG.mjs";
2
3
  export { type CreateOuiDraggableOptions as CreateOuiSortableOptions, type OuiSortable, createSortable };
@@ -0,0 +1,11 @@
1
+ import { $ as OuiSortable, p as CreateOuiDraggableOptions } from "./movable.model-BHaK_mKw.mjs";
2
+ //#region src/js/sortable/sortable.embedded.d.ts
3
+ /**
4
+ * Creates _(or retrieves)_ a _OuiSortable_ instance for an element
5
+ *
6
+ * @param element Element to make sortable
7
+ * @returns _OuiSortable_ instance
8
+ */
9
+ declare function createSortable(element: HTMLElement, options?: CreateOuiDraggableOptions): OuiSortable;
10
+ //#endregion
11
+ export { createSortable as t };
@@ -1,11 +1,14 @@
1
- //#region src/js/splitter.d.ts
1
+ import { D as SPLITTER_SYMBOL, O as SPLITTER_TAGNAME, n as OuiSplitter } from "../splitter.model-DOLNjLVS.mjs";
2
+ //#region src/js/splitter/index.d.ts
2
3
  declare global {
3
4
  interface HTMLElementTagNameMap {
4
- [TAGNAME]: OuiSplitterElement;
5
+ [SPLITTER_TAGNAME]: OuiSplitterElement;
5
6
  }
6
7
  }
7
- declare class OuiSplitterElement extends HTMLElement {
8
- #private;
8
+ export interface OuiSplitterElement {
9
+ [SPLITTER_SYMBOL]: OuiSplitter;
10
+ }
11
+ export declare class OuiSplitterElement extends HTMLElement {
9
12
  static readonly observedAttributes: string[];
10
13
  /**
11
14
  * Maximum size for the first panel
@@ -44,6 +47,4 @@ declare class OuiSplitterElement extends HTMLElement {
44
47
  disconnectedCallback(): void;
45
48
  attributeChangedCallback(name: string): void;
46
49
  }
47
- declare const TAGNAME = "oui-splitter";
48
- //#endregion
49
- export { OuiSplitterElement };
50
+ //#endregion
@@ -0,0 +1,284 @@
1
+ import { SPLITTER_ATTRIBUTE_ACTIVE, SPLITTER_ATTRIBUTE_HANDLE, SPLITTER_ATTRIBUTE_HORIZONTAL, SPLITTER_ATTRIBUTE_SEPARATOR, SPLITTER_ATTRIBUTE_SIZE, SPLITTER_ATTRIBUTE_TYPE, SPLITTER_KEYS_ABSOLUTE, SPLITTER_KEYS_ALL, SPLITTER_KEYS_HORIZONTAL, SPLITTER_KEYS_NEGATIVE, SPLITTER_KEYS_VERTICAL, SPLITTER_MESSAGE, SPLITTER_METHODS_OBSERVE, SPLITTER_NAVIGATION_MAXIMUM_PERCENTAGE, SPLITTER_NAVIGATION_MINIMUM_PERCENTAGE, SPLITTER_NAVIGATION_MODIFIER, SPLITTER_SELECTOR_HANDLE, SPLITTER_SYMBOL, SPLITTER_TAGNAME, splitterStyling } from "./splitter.model.mjs";
2
+ import { setAria } from "@oscarpalmer/toretto/aria";
3
+ import { getAttribute, setAttribute } from "@oscarpalmer/toretto/attribute";
4
+ import { getEventPosition, on } from "@oscarpalmer/toretto/event";
5
+ import { findAncestor } from "@oscarpalmer/toretto/find";
6
+ import { isNullableOrWhitespace } from "@oscarpalmer/atoms/is";
7
+ import { setStyle } from "@oscarpalmer/toretto/style";
8
+ import { filter } from "@oscarpalmer/atoms/array/filter";
9
+ import { clamp } from "@oscarpalmer/atoms/number";
10
+ import { supportsTouch } from "@oscarpalmer/toretto/touch";
11
+ import { createElement } from "@oscarpalmer/toretto/create";
12
+ import { round } from "@oscarpalmer/atoms/math";
13
+ //#region src/js/splitter/index.ts
14
+ function OuiSplitter(element, panels) {
15
+ this.element = element;
16
+ this.panels = panels;
17
+ if (isNullableOrWhitespace(element.id)) element.id = `oui_splitter_${++index}`;
18
+ this.values = getValues(element);
19
+ this.handle = createHandle();
20
+ this.rectangle = element.getBoundingClientRect();
21
+ this.separator = createSeparator(this);
22
+ this.separator.append(this.handle);
23
+ panels[0].insertAdjacentElement("afterend", this.separator);
24
+ this.updateOrientation();
25
+ this.updateValues();
26
+ }
27
+ OuiSplitter.prototype.updateObserver = updateObserver;
28
+ OuiSplitter.prototype.updateOrientation = updateOrientation;
29
+ OuiSplitter.prototype.updateValues = updateValues;
30
+ var OuiSplitterElement = class extends HTMLElement {
31
+ static observedAttributes = [
32
+ "max",
33
+ "min",
34
+ SPLITTER_ATTRIBUTE_SIZE,
35
+ SPLITTER_ATTRIBUTE_TYPE
36
+ ];
37
+ /**
38
+ * Maximum size for the first panel
39
+ */
40
+ get max() {
41
+ return this[SPLITTER_SYMBOL].values.max;
42
+ }
43
+ /**
44
+ * Maximum size for the first panel
45
+ */
46
+ set max(value) {
47
+ if (typeof value === "number") setAttribute(this, "max", value.toString());
48
+ }
49
+ /**
50
+ * Minimum size for the first panel
51
+ */
52
+ get min() {
53
+ return this[SPLITTER_SYMBOL].values.min;
54
+ }
55
+ /**
56
+ * Minimum size for the first panel
57
+ */
58
+ set min(value) {
59
+ if (typeof value === "number") setAttribute(this, "min", value.toString());
60
+ }
61
+ /**
62
+ * Current size for the first panel
63
+ */
64
+ get size() {
65
+ return this[SPLITTER_SYMBOL].values.now.current;
66
+ }
67
+ /**
68
+ * Current size for the first panel
69
+ */
70
+ set size(value) {
71
+ if (typeof value === "number") setAttribute(this, SPLITTER_ATTRIBUTE_SIZE, value.toString());
72
+ }
73
+ /**
74
+ * Orientation of the splitter
75
+ */
76
+ get type() {
77
+ return getAttribute(this, "type") ?? "vertical";
78
+ }
79
+ /**
80
+ * Orientation of the splitter
81
+ */
82
+ set type(value) {
83
+ setAttribute(this, SPLITTER_ATTRIBUTE_TYPE, value);
84
+ }
85
+ constructor() {
86
+ super();
87
+ const panels = filter([...this.children], (child) => child instanceof Element);
88
+ if (panels.length !== 2) throw new Error(SPLITTER_MESSAGE);
89
+ this[SPLITTER_SYMBOL] = new OuiSplitter(this, panels);
90
+ }
91
+ connectedCallback() {
92
+ this[SPLITTER_SYMBOL].updateObserver(1);
93
+ }
94
+ disconnectedCallback() {
95
+ this[SPLITTER_SYMBOL].updateObserver(0);
96
+ }
97
+ attributeChangedCallback(name) {
98
+ switch (name) {
99
+ case "max":
100
+ case "min":
101
+ case SPLITTER_ATTRIBUTE_SIZE:
102
+ this[SPLITTER_SYMBOL].updateValues();
103
+ break;
104
+ case SPLITTER_ATTRIBUTE_TYPE: this[SPLITTER_SYMBOL].updateOrientation();
105
+ }
106
+ }
107
+ };
108
+ function createHandle() {
109
+ return createElement("span", {
110
+ aria: { hidden: true },
111
+ attribute: { [SPLITTER_ATTRIBUTE_HANDLE]: "" }
112
+ });
113
+ }
114
+ function createSeparator(splitter) {
115
+ return createElement("div", {
116
+ aria: {
117
+ controls: splitter.element.id,
118
+ label: "Resize panels"
119
+ },
120
+ attribute: { [SPLITTER_ATTRIBUTE_SEPARATOR]: "" },
121
+ property: {
122
+ role: "separator",
123
+ tabIndex: 0
124
+ }
125
+ });
126
+ }
127
+ function getContained(min, value, max) {
128
+ return round(clamp(value, min, max), 6);
129
+ }
130
+ function getSize(splitter, value) {
131
+ const { height, left, top, width } = splitter.rectangle;
132
+ const fraction = (value - (splitter.types.horizontal ? top : left)) / (splitter.types.horizontal ? height : width);
133
+ return getContained(splitter.values.min, fraction, splitter.values.max);
134
+ }
135
+ function getTypes(splitter, width, height) {
136
+ const type = getAttribute(splitter.element, "type");
137
+ if (type === "horizontal") return {
138
+ auto: false,
139
+ horizontal: true
140
+ };
141
+ if (type === "auto") return {
142
+ auto: true,
143
+ horizontal: (height ?? splitter.rectangle.height) > (width ?? splitter.rectangle.width)
144
+ };
145
+ return {
146
+ auto: false,
147
+ horizontal: false
148
+ };
149
+ }
150
+ function getValue(element, name, defaultValue) {
151
+ const value = getAttribute(element, name);
152
+ if (isNullableOrWhitespace(value)) return defaultValue;
153
+ const parsed = Number.parseFloat(value);
154
+ if (Number.isNaN(parsed)) return defaultValue;
155
+ if (parsed < 0) return defaultValue;
156
+ return parsed > 1 ? parsed / 100 : parsed;
157
+ }
158
+ function getValues(element) {
159
+ const values = {
160
+ max: getValue(element, "max", SPLITTER_NAVIGATION_MAXIMUM_PERCENTAGE),
161
+ min: getValue(element, "min", SPLITTER_NAVIGATION_MINIMUM_PERCENTAGE),
162
+ now: {
163
+ current: .5,
164
+ previous: .5
165
+ }
166
+ };
167
+ const value = getContained(values.min, getValue(element, SPLITTER_ATTRIBUTE_SIZE, values.now.current), values.max);
168
+ values.now.current = value;
169
+ values.now.previous = value;
170
+ return values;
171
+ }
172
+ function onEnd(reset) {
173
+ if (splitter == null) return;
174
+ splitter.handle.removeAttribute(SPLITTER_ATTRIBUTE_ACTIVE);
175
+ splitter.separator.removeAttribute(SPLITTER_ATTRIBUTE_ACTIVE);
176
+ if (reset) setSize(splitter, splitter.values.now.previous);
177
+ else splitter.values.now.previous = splitter.values.now.current;
178
+ splitter = void 0;
179
+ splitterStyling.remove();
180
+ }
181
+ function onKeydown(event) {
182
+ switch (true) {
183
+ case SPLITTER_KEYS_ALL.has(event.key):
184
+ onNavigate(event);
185
+ break;
186
+ case event.key === "Escape": onEnd(true);
187
+ }
188
+ }
189
+ function onNavigate(event) {
190
+ const separator = findAncestor(event, "[oui-splitter-separator]");
191
+ if (separator == null) return;
192
+ const splitter = findAncestor(separator, SPLITTER_TAGNAME)?.[SPLITTER_SYMBOL];
193
+ if (splitter == null) return;
194
+ const { types, values } = splitter;
195
+ if (SPLITTER_KEYS_ABSOLUTE.has(event.key)) {
196
+ setSize(splitter, event.key === "End" ? values.max : values.min, true);
197
+ return;
198
+ }
199
+ if (types.horizontal && !SPLITTER_KEYS_HORIZONTAL.has(event.key) || !(types.horizontal || SPLITTER_KEYS_VERTICAL.has(event.key))) return;
200
+ const offset = SPLITTER_KEYS_NEGATIVE.has(event.key) ? -1 : 1;
201
+ setSize(splitter, getContained(values.min, values.now.current + offset * SPLITTER_NAVIGATION_MODIFIER, values.max), true);
202
+ }
203
+ function onObservation(entries) {
204
+ if (frame != null) cancelAnimationFrame(frame);
205
+ frame = requestAnimationFrame(() => {
206
+ for (const entry of entries) {
207
+ const splitter = entry.target instanceof OuiSplitterElement || entry.target.hasAttribute(SPLITTER_ATTRIBUTE_HANDLE) || entry.target.hasAttribute(SPLITTER_ATTRIBUTE_SEPARATOR) ? findAncestor(entry.target, SPLITTER_TAGNAME)?.[SPLITTER_SYMBOL] : void 0;
208
+ if (splitter == null) return;
209
+ splitter.types = getTypes(splitter, entry.contentRect.width, entry.contentRect.height);
210
+ setAttribute(splitter.element, SPLITTER_ATTRIBUTE_HORIZONTAL, splitter.types.horizontal ? "" : void 0);
211
+ setAriaOrientation(splitter);
212
+ }
213
+ frame = void 0;
214
+ });
215
+ }
216
+ function onPointerdown(event) {
217
+ if (supportsTouch.value ? event.type === "mousedown" : event.type === "touchstart") return;
218
+ const handle = findAncestor(event, SPLITTER_SELECTOR_HANDLE);
219
+ if (handle == null) return;
220
+ splitter = findAncestor(handle, SPLITTER_TAGNAME)?.[SPLITTER_SYMBOL];
221
+ if (splitter == null) return;
222
+ if (supportsTouch.value) event.preventDefault();
223
+ setAttribute(splitter.handle, SPLITTER_ATTRIBUTE_ACTIVE, "");
224
+ setAttribute(splitter.separator, SPLITTER_ATTRIBUTE_ACTIVE, "");
225
+ splitter.rectangle = splitter.element.getBoundingClientRect();
226
+ splitterStyling.set();
227
+ }
228
+ function onPointermove(event) {
229
+ if (splitter == null) return;
230
+ const position = getEventPosition(event);
231
+ if (position != null) {
232
+ splitter.values.now.current = getSize(splitter, splitter.types.horizontal ? position.y : position.x);
233
+ setSize(splitter, splitter.values.now.current);
234
+ }
235
+ }
236
+ function onPointerup() {
237
+ if (splitter != null) onEnd(false);
238
+ }
239
+ function setAriaOrientation(splitter) {
240
+ setAria(splitter.separator, "orientation", splitter.types.horizontal ? "horizontal" : "vertical");
241
+ }
242
+ function setAriaValue(splitter) {
243
+ setAria(splitter.separator, {
244
+ valuemax: splitter.values.max,
245
+ valuemin: splitter.values.min,
246
+ valuenow: splitter.values.now.current
247
+ });
248
+ }
249
+ function setSize(splitter, size, previous) {
250
+ splitter.values.now.current = size;
251
+ if (previous) splitter.values.now.previous = size;
252
+ setStyle(splitter.element, "--oui-splitter-size", `${size}`);
253
+ setAriaValue(splitter);
254
+ }
255
+ function updateObserver(add) {
256
+ if (this.types.auto) observer[SPLITTER_METHODS_OBSERVE[add]](this.element);
257
+ }
258
+ function updateOrientation() {
259
+ this.types = getTypes(this);
260
+ if (this.types.auto) observer.observe(this.element);
261
+ else observer.unobserve(this.element);
262
+ setAttribute(this.element, SPLITTER_ATTRIBUTE_HORIZONTAL, this.types.horizontal ? "" : void 0);
263
+ setAriaOrientation(this);
264
+ }
265
+ function updateValues() {
266
+ this.values = getValues(this.element);
267
+ requestAnimationFrame(() => {
268
+ setSize(this, this.values.now.current);
269
+ setAriaValue(this);
270
+ });
271
+ }
272
+ const observer = new ResizeObserver(onObservation);
273
+ let index = 0;
274
+ let frame;
275
+ let splitter;
276
+ on(document, "keydown", onKeydown);
277
+ on(document, "mousedown", onPointerdown);
278
+ on(document, "pointermove", onPointermove);
279
+ on(document, "pointerup", onPointerup);
280
+ on(document, "touchcancel", onPointerup);
281
+ on(document, "touchstart", onPointerdown, { passive: false });
282
+ customElements.define(SPLITTER_TAGNAME, OuiSplitterElement);
283
+ //#endregion
284
+ export { OuiSplitterElement };
@@ -0,0 +1,2 @@
1
+ import { A as splitterStyling, C as SPLITTER_NAVIGATION_MAXIMUM_TOTAL, D as SPLITTER_SYMBOL, E as SPLITTER_SELECTOR_HANDLE, O as SPLITTER_TAGNAME, S as SPLITTER_NAVIGATION_MAXIMUM_PERCENTAGE, T as SPLITTER_NAVIGATION_MODIFIER, _ as SPLITTER_KEYS_NEGATIVE, a as OuiSplitterValuesNow, b as SPLITTER_METHODS_CONNECT, c as SPLITTER_ATTRIBUTE_HORIZONTAL, d as SPLITTER_ATTRIBUTE_SEPARATOR, f as SPLITTER_ATTRIBUTE_SIZE, g as SPLITTER_KEYS_HORIZONTAL, h as SPLITTER_KEYS_ALL, i as OuiSplitterValues, k as SPLITTER_VALUE_DECIMALS, l as SPLITTER_ATTRIBUTE_MAX, m as SPLITTER_KEYS_ABSOLUTE, n as OuiSplitter, o as SPLITTER_ATTRIBUTE_ACTIVE, p as SPLITTER_ATTRIBUTE_TYPE, r as OuiSplitterTypes, s as SPLITTER_ATTRIBUTE_HANDLE, t as GenericOuiSplitterElement, u as SPLITTER_ATTRIBUTE_MIN, v as SPLITTER_KEYS_VERTICAL, w as SPLITTER_NAVIGATION_MINIMUM_PERCENTAGE, x as SPLITTER_METHODS_OBSERVE, y as SPLITTER_MESSAGE } from "../splitter.model-DOLNjLVS.mjs";
2
+ export { GenericOuiSplitterElement, OuiSplitter, OuiSplitterTypes, OuiSplitterValues, OuiSplitterValuesNow, SPLITTER_ATTRIBUTE_ACTIVE, SPLITTER_ATTRIBUTE_HANDLE, SPLITTER_ATTRIBUTE_HORIZONTAL, SPLITTER_ATTRIBUTE_MAX, SPLITTER_ATTRIBUTE_MIN, SPLITTER_ATTRIBUTE_SEPARATOR, SPLITTER_ATTRIBUTE_SIZE, SPLITTER_ATTRIBUTE_TYPE, SPLITTER_KEYS_ABSOLUTE, SPLITTER_KEYS_ALL, SPLITTER_KEYS_HORIZONTAL, SPLITTER_KEYS_NEGATIVE, SPLITTER_KEYS_VERTICAL, SPLITTER_MESSAGE, SPLITTER_METHODS_CONNECT, SPLITTER_METHODS_OBSERVE, SPLITTER_NAVIGATION_MAXIMUM_PERCENTAGE, SPLITTER_NAVIGATION_MAXIMUM_TOTAL, SPLITTER_NAVIGATION_MINIMUM_PERCENTAGE, SPLITTER_NAVIGATION_MODIFIER, SPLITTER_SELECTOR_HANDLE, SPLITTER_SYMBOL, SPLITTER_TAGNAME, SPLITTER_VALUE_DECIMALS, splitterStyling };
@@ -0,0 +1,37 @@
1
+ import { toggleStyles } from "@oscarpalmer/toretto/style";
2
+ //#region src/js/splitter/splitter.model.ts
3
+ const SPLITTER_TAGNAME = "oui-splitter";
4
+ const SPLITTER_ATTRIBUTE_ACTIVE = `${SPLITTER_TAGNAME}-active`;
5
+ const SPLITTER_ATTRIBUTE_HANDLE = `${SPLITTER_TAGNAME}-handle`;
6
+ const SPLITTER_ATTRIBUTE_HORIZONTAL = `${SPLITTER_TAGNAME}-horizontal`;
7
+ const SPLITTER_ATTRIBUTE_MAX = "max";
8
+ const SPLITTER_ATTRIBUTE_MIN = "min";
9
+ const SPLITTER_ATTRIBUTE_SIZE = "size";
10
+ const SPLITTER_ATTRIBUTE_TYPE = "type";
11
+ const SPLITTER_ATTRIBUTE_SEPARATOR = `${SPLITTER_TAGNAME}-separator`;
12
+ const SPLITTER_KEYS_ABSOLUTE = /* @__PURE__ */ new Set(["End", "Home"]);
13
+ const SPLITTER_KEYS_HORIZONTAL = /* @__PURE__ */ new Set(["ArrowDown", "ArrowUp"]);
14
+ const SPLITTER_KEYS_NEGATIVE = /* @__PURE__ */ new Set(["ArrowLeft", "ArrowUp"]);
15
+ const SPLITTER_KEYS_VERTICAL = /* @__PURE__ */ new Set(["ArrowLeft", "ArrowRight"]);
16
+ const SPLITTER_KEYS_ALL = /* @__PURE__ */ new Set([
17
+ ...SPLITTER_KEYS_ABSOLUTE,
18
+ ...SPLITTER_KEYS_HORIZONTAL,
19
+ ...SPLITTER_KEYS_VERTICAL
20
+ ]);
21
+ const SPLITTER_MESSAGE = `<${SPLITTER_TAGNAME}> must have exactly two panels.`;
22
+ const SPLITTER_METHODS_CONNECT = ["delete", "set"];
23
+ const SPLITTER_METHODS_OBSERVE = ["unobserve", "observe"];
24
+ const SPLITTER_NAVIGATION_MAXIMUM_PERCENTAGE = .9;
25
+ const SPLITTER_NAVIGATION_MAXIMUM_TOTAL = 100;
26
+ const SPLITTER_NAVIGATION_MINIMUM_PERCENTAGE = .1;
27
+ const SPLITTER_NAVIGATION_MODIFIER = .05;
28
+ const SPLITTER_SELECTOR_HANDLE = `[${SPLITTER_ATTRIBUTE_HANDLE}]`;
29
+ const SPLITTER_SYMBOL = Symbol(SPLITTER_TAGNAME);
30
+ const SPLITTER_VALUE_DECIMALS = 6;
31
+ const splitterStyling = toggleStyles(document.body, {
32
+ touchAction: "none",
33
+ userSelect: "none",
34
+ webkitUserSelect: "none"
35
+ });
36
+ //#endregion
37
+ export { SPLITTER_ATTRIBUTE_ACTIVE, SPLITTER_ATTRIBUTE_HANDLE, SPLITTER_ATTRIBUTE_HORIZONTAL, SPLITTER_ATTRIBUTE_MAX, SPLITTER_ATTRIBUTE_MIN, SPLITTER_ATTRIBUTE_SEPARATOR, SPLITTER_ATTRIBUTE_SIZE, SPLITTER_ATTRIBUTE_TYPE, SPLITTER_KEYS_ABSOLUTE, SPLITTER_KEYS_ALL, SPLITTER_KEYS_HORIZONTAL, SPLITTER_KEYS_NEGATIVE, SPLITTER_KEYS_VERTICAL, SPLITTER_MESSAGE, SPLITTER_METHODS_CONNECT, SPLITTER_METHODS_OBSERVE, SPLITTER_NAVIGATION_MAXIMUM_PERCENTAGE, SPLITTER_NAVIGATION_MAXIMUM_TOTAL, SPLITTER_NAVIGATION_MINIMUM_PERCENTAGE, SPLITTER_NAVIGATION_MODIFIER, SPLITTER_SELECTOR_HANDLE, SPLITTER_SYMBOL, SPLITTER_TAGNAME, SPLITTER_VALUE_DECIMALS, splitterStyling };