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