@oscarpalmer/oui 0.37.0 → 0.39.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 (183) hide show
  1. package/dist/css/a11y.css +1 -0
  2. package/dist/css/badge.css +12 -8
  3. package/dist/css/button.css +111 -14
  4. package/dist/css/color-picker.css +859 -0
  5. package/dist/css/color.css +86 -87
  6. package/dist/css/combobox.css +105 -4
  7. package/dist/css/content.css +8 -6
  8. package/dist/css/floatable.css +3 -3
  9. package/dist/css/form.css +106 -6
  10. package/dist/css/icon.css +99 -0
  11. package/dist/css/listbox.css +5 -0
  12. package/dist/css/message.css +6 -3
  13. package/dist/css/mixins/badge.mixins.css +2 -0
  14. package/dist/css/mixins/button.mixins.css +3 -0
  15. package/dist/css/mixins/message.mixins.css +1 -0
  16. package/dist/css/mixins/misc.mixins.css +2 -0
  17. package/dist/css/mixins/shadow.mixins.css +1 -0
  18. package/dist/css/reset.css +3 -3
  19. package/dist/css/splitter.css +1 -1
  20. package/dist/css/tabs.css +115 -23
  21. package/dist/css/typography.css +90 -0
  22. package/dist/js/color-picker/constants.color-picker.d.mts +2 -0
  23. package/dist/js/color-picker/constants.color-picker.mjs +59 -0
  24. package/dist/js/color-picker/dom.color-picker.d.mts +8 -0
  25. package/dist/js/color-picker/dom.color-picker.mjs +191 -0
  26. package/dist/js/color-picker/event.color-picker.d.mts +9 -0
  27. package/dist/js/color-picker/event.color-picker.mjs +2 -0
  28. package/dist/js/color-picker/form.color-picker.d.mts +5 -0
  29. package/dist/js/color-picker/form.color-picker.mjs +24 -0
  30. package/dist/js/color-picker/index.d.mts +2 -0
  31. package/dist/js/color-picker/index.mjs +303 -0
  32. package/dist/js/color-picker/misc.color-picker.d.mts +2 -0
  33. package/dist/js/color-picker/misc.color-picker.mjs +2 -0
  34. package/dist/js/color-picker/models.color-picker.d.mts +2 -0
  35. package/dist/js/color-picker/models.color-picker.mjs +24 -0
  36. package/dist/js/color-picker/output.color-picker.d.mts +8 -0
  37. package/dist/js/color-picker/output.color-picker.mjs +233 -0
  38. package/dist/js/color-picker/state.color-picker.d.mts +8 -0
  39. package/dist/js/color-picker/state.color-picker.mjs +2 -0
  40. package/dist/js/combobox/constants.combobox.d.mts +1 -1
  41. package/dist/js/combobox/dom.combobox.d.mts +12 -13
  42. package/dist/js/combobox/dom.combobox.mjs +12 -5
  43. package/dist/js/combobox/event.combobox.d.mts +20 -21
  44. package/dist/js/combobox/event.combobox.mjs +1 -1
  45. package/dist/js/combobox/index.d.mts +1 -1
  46. package/dist/js/combobox/index.mjs +56 -2
  47. package/dist/js/combobox/misc.combobox.d.mts +1 -1
  48. package/dist/js/combobox/misc.combobox.mjs +1 -1
  49. package/dist/js/combobox/models.combobox.d.mts +12 -13
  50. package/dist/js/combobox/state.combobox.d.mts +8 -9
  51. package/dist/js/combobox/state.combobox.mjs +1 -1
  52. package/dist/js/constants.color-picker-B-gFjL8m.d.mts +364 -0
  53. package/dist/js/constants.combobox-8EMRmv09.d.mts +18 -0
  54. package/dist/js/constants.listbox-DGnX32kv.d.mts +8 -0
  55. package/dist/js/dialog.d.mts +2 -2
  56. package/dist/js/dialog.mjs +1 -1
  57. package/dist/js/{draggable-a6w0J1OD.d.mts → draggable-B5-70SZm.d.mts} +5 -4
  58. package/dist/js/event.color-picker-BEpq0Adu.mjs +485 -0
  59. package/dist/js/floatable/floatable.embedded.d.mts +1 -1
  60. package/dist/js/floatable/floatable.embedded.mjs +11 -8
  61. package/dist/js/floatable/floatable.standalone.d.mts +1 -1
  62. package/dist/js/{floatable.embedded-Bct4U5Dm.d.mts → floatable.embedded-DQYkXt8X.d.mts} +1 -1
  63. package/dist/js/focus-trap/focus-trap.embedded.d.mts +1 -1
  64. package/dist/js/focus-trap/focus-trap.standalone.d.mts +1 -1
  65. package/dist/js/{focus-trap.embedded-DR8NpZfr.d.mts → focus-trap.embedded-CjyFQYow.d.mts} +2 -2
  66. package/dist/js/{index-EfkUSals.d.mts → index-C5D3-oiI.d.mts} +41 -3
  67. package/dist/js/index.d.mts +8 -7
  68. package/dist/js/index.mjs +6 -3
  69. package/dist/js/internal/attributable.d.mts +2 -3
  70. package/dist/js/internal/draggable.d.mts +1 -1
  71. package/dist/js/internal/draggable.mjs +1 -1
  72. package/dist/js/internal/listbox/listbox.constants.d.mts +7 -10
  73. package/dist/js/internal/listbox/listbox.constants.mjs +15 -16
  74. package/dist/js/internal/listbox/listbox.data.d.mts +9 -10
  75. package/dist/js/internal/listbox/listbox.data.mjs +1 -1
  76. package/dist/js/internal/listbox/listbox.dom.d.mts +19 -20
  77. package/dist/js/internal/listbox/listbox.dom.mjs +1 -1
  78. package/dist/js/internal/listbox/listbox.event.d.mts +3 -4
  79. package/dist/js/internal/listbox/listbox.event.mjs +4 -4
  80. package/dist/js/internal/listbox/listbox.form.d.mts +4 -5
  81. package/dist/js/internal/listbox/listbox.form.mjs +16 -15
  82. package/dist/js/internal/listbox/listbox.misc.d.mts +10 -11
  83. package/dist/js/internal/listbox/listbox.misc.mjs +1 -1
  84. package/dist/js/internal/listbox/listbox.model.d.mts +1 -1
  85. package/dist/js/internal/listbox/listbox.state.d.mts +5 -6
  86. package/dist/js/internal/listbox/listbox.state.mjs +3 -3
  87. package/dist/js/internal/misc.d.mts +4 -4
  88. package/dist/js/internal/misc.mjs +9 -1
  89. package/dist/js/internal/navigable.d.mts +9 -10
  90. package/dist/js/internal/navigable.mjs +1 -0
  91. package/dist/js/listbox/constants.listbox.d.mts +1 -1
  92. package/dist/js/listbox/event.listbox.d.mts +6 -7
  93. package/dist/js/listbox/event.listbox.mjs +1 -1
  94. package/dist/js/listbox/index.d.mts +43 -5
  95. package/dist/js/listbox/index.mjs +56 -2
  96. package/dist/js/listbox/misc.listbox.d.mts +1 -1
  97. package/dist/js/listbox/misc.listbox.mjs +1 -1
  98. package/dist/js/listbox/state.listbox.d.mts +7 -8
  99. package/dist/js/listbox/state.listbox.mjs +1 -1
  100. package/dist/js/{listbox.data-BWd0PCy7.mjs → listbox.data-DQ7-x2uY.mjs} +8 -7
  101. package/dist/js/{listbox.model-CRReGOmu.d.mts → listbox.model-BHPA7GM4.d.mts} +3 -3
  102. package/dist/js/menu.mjs +1 -1
  103. package/dist/js/{misc.listbox-BI-XsTOf.mjs → misc.listbox-DKB-j0UK.mjs} +4 -5
  104. package/dist/js/{misc.listbox-gnoJhrTr.d.mts → misc.listbox-mZMuYOxg.d.mts} +1 -1
  105. package/dist/js/movable/movable.embedded.d.mts +1 -1
  106. package/dist/js/movable/movable.standalone.d.mts +1 -1
  107. package/dist/js/popover.d.mts +2 -2
  108. package/dist/js/popover.mjs +1 -1
  109. package/dist/js/resizable/resizable.embedded.d.mts +1 -1
  110. package/dist/js/resizable/resizable.embedded.mjs +1 -1
  111. package/dist/js/resizable/resizable.standalone.d.mts +1 -1
  112. package/dist/js/{resizable.embedded-3qoR0Bjm.d.mts → resizable.embedded-dvhdfQgt.d.mts} +1 -1
  113. package/dist/js/sortable/sortable.embedded.d.mts +1 -1
  114. package/dist/js/sortable/sortable.standalone.d.mts +1 -1
  115. package/dist/js/splitter.d.mts +2 -3
  116. package/dist/js/splitter.mjs +2 -2
  117. package/dist/js/{state.combobox-4xq0FPCF.mjs → state.combobox-BWDFHwoi.mjs} +9 -9
  118. package/dist/js/tabs.d.mts +4 -5
  119. package/dist/js/tabs.mjs +4 -7
  120. package/dist/js/tooltip.d.mts +1 -1
  121. package/package.json +24 -22
  122. package/dist/js/constants.combobox-DmRAMC64.d.mts +0 -26
  123. package/dist/js/constants.listbox-DRsXUxd3.d.mts +0 -14
  124. package/src/css/a11y.scss +0 -13
  125. package/src/css/badge.scss +0 -62
  126. package/src/css/button.scss +0 -50
  127. package/src/css/color.scss +0 -115
  128. package/src/css/combobox.scss +0 -252
  129. package/src/css/content.scss +0 -180
  130. package/src/css/flex.scss +0 -107
  131. package/src/css/floatable.scss +0 -152
  132. package/src/css/form.scss +0 -573
  133. package/src/css/listbox.scss +0 -120
  134. package/src/css/message.scss +0 -73
  135. package/src/css/mixins.scss +0 -419
  136. package/src/css/reset.scss +0 -392
  137. package/src/css/splitter.scss +0 -89
  138. package/src/css/table.scss +0 -107
  139. package/src/css/tabs.scss +0 -85
  140. package/src/js/combobox/constants.combobox.ts +0 -83
  141. package/src/js/combobox/dom.combobox.ts +0 -407
  142. package/src/js/combobox/event.combobox.ts +0 -365
  143. package/src/js/combobox/index.ts +0 -320
  144. package/src/js/combobox/misc.combobox.ts +0 -104
  145. package/src/js/combobox/models.combobox.ts +0 -54
  146. package/src/js/combobox/state.combobox.ts +0 -246
  147. package/src/js/dialog.ts +0 -255
  148. package/src/js/floatable/floatable.embedded.ts +0 -332
  149. package/src/js/floatable/floatable.standalone.ts +0 -6
  150. package/src/js/focus-trap/focus-trap.embedded.ts +0 -411
  151. package/src/js/focus-trap/focus-trap.standalone.ts +0 -1
  152. package/src/js/index.ts +0 -15
  153. package/src/js/internal/attributable.ts +0 -73
  154. package/src/js/internal/draggable.ts +0 -657
  155. package/src/js/internal/listbox/listbox.constants.ts +0 -25
  156. package/src/js/internal/listbox/listbox.data.ts +0 -287
  157. package/src/js/internal/listbox/listbox.dom.ts +0 -445
  158. package/src/js/internal/listbox/listbox.event.ts +0 -129
  159. package/src/js/internal/listbox/listbox.form.ts +0 -115
  160. package/src/js/internal/listbox/listbox.misc.ts +0 -135
  161. package/src/js/internal/listbox/listbox.model.ts +0 -169
  162. package/src/js/internal/listbox/listbox.state.ts +0 -82
  163. package/src/js/internal/misc.ts +0 -27
  164. package/src/js/internal/navigable.ts +0 -315
  165. package/src/js/l10n.ts +0 -192
  166. package/src/js/listbox/constants.listbox.ts +0 -61
  167. package/src/js/listbox/event.listbox.ts +0 -106
  168. package/src/js/listbox/index.ts +0 -302
  169. package/src/js/listbox/misc.listbox.ts +0 -70
  170. package/src/js/listbox/state.listbox.ts +0 -196
  171. package/src/js/menu.ts +0 -348
  172. package/src/js/movable/movable.embedded.ts +0 -318
  173. package/src/js/movable/movable.standalone.ts +0 -2
  174. package/src/js/popover.ts +0 -229
  175. package/src/js/resizable/resizable.embedded.ts +0 -413
  176. package/src/js/resizable/resizable.standalone.ts +0 -5
  177. package/src/js/sortable/sortable.embedded.ts +0 -527
  178. package/src/js/sortable/sortable.standalone.ts +0 -2
  179. package/src/js/splitter.ts +0 -583
  180. package/src/js/tabs.ts +0 -447
  181. package/src/js/toolbar.ts +0 -63
  182. package/src/js/tooltip.ts +0 -367
  183. /package/dist/css/{mixins.css → mixins/input.mixins.css} +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