@oscarpalmer/oui 0.38.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 (187) hide show
  1. package/dist/css/badge.css +11 -8
  2. package/dist/css/button.css +106 -14
  3. package/dist/css/color-picker.css +555 -73
  4. package/dist/css/color.css +86 -86
  5. package/dist/css/combobox.css +98 -4
  6. package/dist/css/content.css +7 -6
  7. package/dist/css/floatable.css +1 -3
  8. package/dist/css/form.css +99 -6
  9. package/dist/css/icon.css +99 -0
  10. package/dist/css/listbox.css +3 -0
  11. package/dist/css/message.css +4 -3
  12. package/dist/css/mixins/button.mixins.css +1 -0
  13. package/dist/css/reset.css +1 -1
  14. package/dist/css/tabs.css +95 -3
  15. package/dist/css/typography.css +90 -0
  16. package/dist/js/color-picker/constants.color-picker.d.mts +2 -0
  17. package/dist/js/color-picker/constants.color-picker.mjs +59 -0
  18. package/dist/js/color-picker/dom.color-picker.d.mts +8 -0
  19. package/dist/js/color-picker/dom.color-picker.mjs +191 -0
  20. package/dist/js/color-picker/event.color-picker.d.mts +9 -0
  21. package/dist/js/color-picker/event.color-picker.mjs +2 -0
  22. package/dist/js/color-picker/form.color-picker.d.mts +5 -0
  23. package/dist/js/color-picker/form.color-picker.mjs +24 -0
  24. package/dist/js/color-picker/index.d.mts +2 -0
  25. package/dist/js/color-picker/index.mjs +303 -0
  26. package/dist/js/color-picker/misc.color-picker.d.mts +2 -0
  27. package/dist/js/color-picker/misc.color-picker.mjs +2 -0
  28. package/dist/js/color-picker/models.color-picker.d.mts +2 -0
  29. package/dist/js/color-picker/models.color-picker.mjs +24 -0
  30. package/dist/js/color-picker/output.color-picker.d.mts +8 -0
  31. package/dist/js/color-picker/output.color-picker.mjs +233 -0
  32. package/dist/js/color-picker/state.color-picker.d.mts +8 -0
  33. package/dist/js/color-picker/state.color-picker.mjs +2 -0
  34. package/dist/js/combobox/constants.combobox.d.mts +1 -1
  35. package/dist/js/combobox/dom.combobox.d.mts +12 -13
  36. package/dist/js/combobox/dom.combobox.mjs +5 -2
  37. package/dist/js/combobox/event.combobox.d.mts +20 -21
  38. package/dist/js/combobox/event.combobox.mjs +1 -1
  39. package/dist/js/combobox/index.d.mts +1 -1
  40. package/dist/js/combobox/index.mjs +2 -2
  41. package/dist/js/combobox/misc.combobox.d.mts +1 -1
  42. package/dist/js/combobox/misc.combobox.mjs +1 -1
  43. package/dist/js/combobox/models.combobox.d.mts +12 -13
  44. package/dist/js/combobox/state.combobox.d.mts +8 -9
  45. package/dist/js/combobox/state.combobox.mjs +1 -1
  46. package/dist/js/constants.color-picker-B-gFjL8m.d.mts +364 -0
  47. package/dist/js/constants.combobox-8EMRmv09.d.mts +18 -0
  48. package/dist/js/constants.listbox-DGnX32kv.d.mts +8 -0
  49. package/dist/js/dialog.d.mts +2 -2
  50. package/dist/js/dialog.mjs +1 -1
  51. package/dist/js/{draggable-a6w0J1OD.d.mts → draggable-B5-70SZm.d.mts} +5 -4
  52. package/dist/js/event.color-picker-BEpq0Adu.mjs +485 -0
  53. package/dist/js/floatable/floatable.embedded.d.mts +1 -1
  54. package/dist/js/floatable/floatable.embedded.mjs +2 -2
  55. package/dist/js/floatable/floatable.standalone.d.mts +1 -1
  56. package/dist/js/{floatable.embedded-Bct4U5Dm.d.mts → floatable.embedded-DQYkXt8X.d.mts} +1 -1
  57. package/dist/js/focus-trap/focus-trap.embedded.d.mts +1 -1
  58. package/dist/js/focus-trap/focus-trap.embedded.mjs +3 -3
  59. package/dist/js/focus-trap/focus-trap.standalone.d.mts +1 -1
  60. package/dist/js/{focus-trap.embedded-DR8NpZfr.d.mts → focus-trap.embedded-CjyFQYow.d.mts} +2 -2
  61. package/dist/js/{index-DJdFlTLm.d.mts → index-C5D3-oiI.d.mts} +2 -2
  62. package/dist/js/index.d.mts +7 -7
  63. package/dist/js/index.mjs +5 -3
  64. package/dist/js/internal/attributable.d.mts +2 -3
  65. package/dist/js/internal/draggable.d.mts +1 -1
  66. package/dist/js/internal/draggable.mjs +5 -5
  67. package/dist/js/internal/listbox/listbox.constants.d.mts +7 -10
  68. package/dist/js/internal/listbox/listbox.constants.mjs +15 -16
  69. package/dist/js/internal/listbox/listbox.data.d.mts +9 -10
  70. package/dist/js/internal/listbox/listbox.data.mjs +1 -1
  71. package/dist/js/internal/listbox/listbox.dom.d.mts +19 -20
  72. package/dist/js/internal/listbox/listbox.dom.mjs +1 -1
  73. package/dist/js/internal/listbox/listbox.event.d.mts +3 -4
  74. package/dist/js/internal/listbox/listbox.event.mjs +4 -4
  75. package/dist/js/internal/listbox/listbox.form.d.mts +4 -5
  76. package/dist/js/internal/listbox/listbox.misc.d.mts +10 -11
  77. package/dist/js/internal/listbox/listbox.misc.mjs +1 -1
  78. package/dist/js/internal/listbox/listbox.model.d.mts +1 -1
  79. package/dist/js/internal/listbox/listbox.state.d.mts +5 -6
  80. package/dist/js/internal/listbox/listbox.state.mjs +1 -1
  81. package/dist/js/internal/misc.d.mts +4 -4
  82. package/dist/js/internal/misc.mjs +9 -1
  83. package/dist/js/internal/navigable.d.mts +9 -10
  84. package/dist/js/internal/navigable.mjs +3 -3
  85. package/dist/js/listbox/constants.listbox.d.mts +1 -1
  86. package/dist/js/listbox/event.listbox.d.mts +6 -7
  87. package/dist/js/listbox/event.listbox.mjs +1 -1
  88. package/dist/js/listbox/index.d.mts +5 -5
  89. package/dist/js/listbox/index.mjs +2 -2
  90. package/dist/js/listbox/misc.listbox.d.mts +1 -1
  91. package/dist/js/listbox/misc.listbox.mjs +1 -1
  92. package/dist/js/listbox/state.listbox.d.mts +7 -8
  93. package/dist/js/listbox/state.listbox.mjs +1 -1
  94. package/dist/js/{listbox.data-C7CRa5Ya.mjs → listbox.data-DQ7-x2uY.mjs} +5 -5
  95. package/dist/js/{listbox.model-CRReGOmu.d.mts → listbox.model-BHPA7GM4.d.mts} +3 -3
  96. package/dist/js/menu.mjs +2 -2
  97. package/dist/js/{misc.listbox-Cyz2CRDy.mjs → misc.listbox-DKB-j0UK.mjs} +4 -4
  98. package/dist/js/{misc.listbox-gnoJhrTr.d.mts → misc.listbox-mZMuYOxg.d.mts} +1 -1
  99. package/dist/js/movable/movable.embedded.d.mts +1 -1
  100. package/dist/js/movable/movable.embedded.mjs +2 -2
  101. package/dist/js/movable/movable.standalone.d.mts +1 -1
  102. package/dist/js/popover.d.mts +2 -2
  103. package/dist/js/popover.mjs +1 -1
  104. package/dist/js/resizable/resizable.embedded.d.mts +1 -1
  105. package/dist/js/resizable/resizable.embedded.mjs +5 -5
  106. package/dist/js/resizable/resizable.standalone.d.mts +1 -1
  107. package/dist/js/{resizable.embedded-3qoR0Bjm.d.mts → resizable.embedded-dvhdfQgt.d.mts} +1 -1
  108. package/dist/js/sortable/sortable.embedded.d.mts +1 -1
  109. package/dist/js/sortable/sortable.embedded.mjs +4 -4
  110. package/dist/js/sortable/sortable.standalone.d.mts +1 -1
  111. package/dist/js/splitter.d.mts +2 -3
  112. package/dist/js/splitter.mjs +7 -7
  113. package/dist/js/{state.combobox-Qm3FWzYW.mjs → state.combobox-BWDFHwoi.mjs} +11 -11
  114. package/dist/js/tabs.d.mts +4 -5
  115. package/dist/js/tooltip.d.mts +1 -1
  116. package/dist/js/tooltip.mjs +3 -3
  117. package/package.json +24 -24
  118. package/dist/js/color-picker.d.mts +0 -213
  119. package/dist/js/color-picker.mjs +0 -924
  120. package/dist/js/constants.combobox-DmRAMC64.d.mts +0 -26
  121. package/dist/js/constants.listbox-DRsXUxd3.d.mts +0 -14
  122. package/src/css/a11y.scss +0 -13
  123. package/src/css/badge.scss +0 -62
  124. package/src/css/button.scss +0 -50
  125. package/src/css/color-picker.scss +0 -344
  126. package/src/css/color.scss +0 -113
  127. package/src/css/combobox.scss +0 -255
  128. package/src/css/content.scss +0 -181
  129. package/src/css/flex.scss +0 -107
  130. package/src/css/floatable.scss +0 -155
  131. package/src/css/form.scss +0 -575
  132. package/src/css/listbox.scss +0 -121
  133. package/src/css/message.scss +0 -74
  134. package/src/css/mixins/badge.mixins.scss +0 -53
  135. package/src/css/mixins/button.mixins.scss +0 -112
  136. package/src/css/mixins/input.mixins.scss +0 -114
  137. package/src/css/mixins/message.mixins.scss +0 -41
  138. package/src/css/mixins/misc.mixins.scss +0 -48
  139. package/src/css/mixins/shadow.mixins.scss +0 -57
  140. package/src/css/reset.scss +0 -392
  141. package/src/css/splitter.scss +0 -89
  142. package/src/css/table.scss +0 -107
  143. package/src/css/tabs.scss +0 -74
  144. package/src/js/color-picker.ts +0 -1653
  145. package/src/js/combobox/constants.combobox.ts +0 -83
  146. package/src/js/combobox/dom.combobox.ts +0 -411
  147. package/src/js/combobox/event.combobox.ts +0 -365
  148. package/src/js/combobox/index.ts +0 -382
  149. package/src/js/combobox/misc.combobox.ts +0 -104
  150. package/src/js/combobox/models.combobox.ts +0 -54
  151. package/src/js/combobox/state.combobox.ts +0 -246
  152. package/src/js/dialog.ts +0 -255
  153. package/src/js/floatable/floatable.embedded.ts +0 -336
  154. package/src/js/floatable/floatable.standalone.ts +0 -6
  155. package/src/js/focus-trap/focus-trap.embedded.ts +0 -411
  156. package/src/js/focus-trap/focus-trap.standalone.ts +0 -1
  157. package/src/js/index.ts +0 -16
  158. package/src/js/internal/attributable.ts +0 -73
  159. package/src/js/internal/draggable.ts +0 -657
  160. package/src/js/internal/listbox/listbox.constants.ts +0 -25
  161. package/src/js/internal/listbox/listbox.data.ts +0 -287
  162. package/src/js/internal/listbox/listbox.dom.ts +0 -446
  163. package/src/js/internal/listbox/listbox.event.ts +0 -129
  164. package/src/js/internal/listbox/listbox.form.ts +0 -125
  165. package/src/js/internal/listbox/listbox.misc.ts +0 -135
  166. package/src/js/internal/listbox/listbox.model.ts +0 -169
  167. package/src/js/internal/listbox/listbox.state.ts +0 -82
  168. package/src/js/internal/misc.ts +0 -27
  169. package/src/js/internal/navigable.ts +0 -317
  170. package/src/js/l10n.ts +0 -192
  171. package/src/js/listbox/constants.listbox.ts +0 -61
  172. package/src/js/listbox/event.listbox.ts +0 -106
  173. package/src/js/listbox/index.ts +0 -364
  174. package/src/js/listbox/misc.listbox.ts +0 -70
  175. package/src/js/listbox/state.listbox.ts +0 -194
  176. package/src/js/menu.ts +0 -348
  177. package/src/js/movable/movable.embedded.ts +0 -318
  178. package/src/js/movable/movable.standalone.ts +0 -2
  179. package/src/js/popover.ts +0 -229
  180. package/src/js/resizable/resizable.embedded.ts +0 -413
  181. package/src/js/resizable/resizable.standalone.ts +0 -5
  182. package/src/js/sortable/sortable.embedded.ts +0 -527
  183. package/src/js/sortable/sortable.standalone.ts +0 -2
  184. package/src/js/splitter.ts +0 -583
  185. package/src/js/tabs.ts +0 -441
  186. package/src/js/toolbar.ts +0 -63
  187. package/src/js/tooltip.ts +0 -367
package/src/js/tabs.ts DELETED
@@ -1,441 +0,0 @@
1
- import {getAria, setAria} from '@oscarpalmer/toretto/aria';
2
- import {getAttribute, setAttribute} from '@oscarpalmer/toretto/attribute';
3
- import {createElement} from '@oscarpalmer/toretto/create';
4
- import {
5
- getNavigableOrientation,
6
- OuiNavigable,
7
- type OuiNavigableOrientation,
8
- } from './internal/navigable';
9
-
10
- // #region Types
11
-
12
- declare global {
13
- interface HTMLElementTagNameMap {
14
- [TAGNAME]: OuiTabsElement;
15
- }
16
- }
17
-
18
- export class OuiTabsEvent extends Event {
19
- constructor(
20
- name: 'oui:beforechange' | 'oui:change',
21
- public oldIndex: number,
22
- public newIndex: number,
23
- cancelable: boolean,
24
- ) {
25
- super(name, {
26
- cancelable,
27
- bubbles: true,
28
- composed: true,
29
- });
30
- }
31
- }
32
-
33
- type OuiTabsContent = {
34
- element: HTMLDivElement;
35
- panels: OuiTabsPanels;
36
- };
37
-
38
- export class OuiTabsElement extends HTMLElement {
39
- static observedAttributes = ['active'];
40
-
41
- #state?: OuiTabsState;
42
-
43
- get active(): number {
44
- return this.#state?.active ?? 0;
45
- }
46
-
47
- set active(value: number) {
48
- setActive(this.#state, value);
49
- }
50
-
51
- get panel(): HTMLElement {
52
- return this.#state?.panels.elements[this.active] as HTMLElement;
53
- }
54
-
55
- get tab(): HTMLButtonElement {
56
- return this.#state?.tabList.tabs[this.active] as HTMLButtonElement;
57
- }
58
-
59
- attributeChangedCallback(name: string, _: string | null, value: string | null): void {
60
- switch (name) {
61
- case 'active':
62
- setActive(this.#state, value);
63
- break;
64
-
65
- default:
66
- break;
67
- }
68
- }
69
-
70
- connectedCallback(): void {
71
- if (this.#state == null) {
72
- this.#state = initializeTabs(this);
73
- } else {
74
- attachTabs(this.#state);
75
- }
76
- }
77
-
78
- disconnectedCallback(): void {
79
- if (this.#state != null) {
80
- detachTabs(this.#state);
81
- }
82
- }
83
- }
84
-
85
- type OuiTabsPanels = {
86
- elements: HTMLElement[];
87
- hidden: Array<boolean | 'until-found'>;
88
- roles: Array<string | null>;
89
- };
90
-
91
- type OuiTabsState = {
92
- active: number;
93
- content: HTMLDivElement;
94
- host: OuiTabsElement;
95
- id: string;
96
- navigable?: OuiNavigable;
97
- orientation: OuiNavigableOrientation;
98
- panels: OuiTabsPanels;
99
- tabList: OuiTabsTabList;
100
- };
101
-
102
- type OuiTabsTabList = {
103
- element: HTMLDivElement;
104
- tabs: HTMLButtonElement[];
105
- };
106
-
107
- // #endregion
108
-
109
- // #region Functions
110
-
111
- function attachTabs(state: OuiTabsState): void {
112
- const navigable = new OuiNavigable(state.tabList.element, {
113
- orientation: state.orientation,
114
- selector: SELECTOR_TAB,
115
- vertical: false,
116
- onActivate: navigable => {
117
- const index = state.tabList.tabs.indexOf(navigable.active.element as HTMLButtonElement);
118
-
119
- if (index > -1 && index !== state.active) {
120
- onActivate(state, index);
121
- }
122
- },
123
- });
124
-
125
- state.navigable = navigable;
126
-
127
- const {length} = state.panels.elements;
128
-
129
- for (let index = 0; index < length; index += 1) {
130
- const panel = state.panels.elements[index];
131
-
132
- panel.hidden = index !== state.active;
133
- panel.role = 'tabpanel';
134
-
135
- if (index === 0) {
136
- panel.insertAdjacentElement('beforebegin', state.tabList.element);
137
- panel.insertAdjacentElement('beforebegin', state.content);
138
- }
139
-
140
- state.content.append(panel);
141
- }
142
- }
143
-
144
- function createContent(prefix: string, panels: HTMLElement[], active: number): OuiTabsContent {
145
- const content = createElement('div', {
146
- attribute: {
147
- [`${TAGNAME}-content`]: '',
148
- },
149
- });
150
-
151
- const {length} = panels;
152
-
153
- const hidden: Array<boolean | 'until-found'> = [];
154
- const roles: Array<string | null> = [];
155
-
156
- for (let index = 0; index < length; index += 1) {
157
- const panel = panels[index];
158
-
159
- hidden.push(panel.hidden);
160
- roles.push(panel.role);
161
-
162
- panel.hidden = index !== active;
163
-
164
- if (panel.id === '') {
165
- panel.id = `${prefix}_panel_${index}`;
166
- }
167
- }
168
-
169
- return {
170
- element: content,
171
- panels: {
172
- hidden,
173
- roles,
174
- elements: panels,
175
- },
176
- };
177
- }
178
-
179
- function createTab(
180
- prefix: string,
181
- index: number,
182
- panel: HTMLElement,
183
- label: string,
184
- selected: boolean,
185
- ): HTMLButtonElement {
186
- return createElement('button', {
187
- aria: {
188
- selected,
189
- controls: panel.id,
190
- },
191
- attribute: {
192
- [`${TAGNAME}-tab`]: '',
193
- },
194
- property: {
195
- id: `${prefix}_tab_${index}`,
196
- role: 'tab',
197
- tabIndex: selected ? 0 : -1,
198
- textContent: label,
199
- type: 'button',
200
- },
201
- });
202
- }
203
-
204
- function createTabList(
205
- prefix: string,
206
- panels: HTMLElement[],
207
- labels: string[],
208
- active: number,
209
- ): OuiTabsTabList {
210
- const element = createElement('div', {
211
- attribute: {
212
- [`${TAGNAME}-tablist`]: '',
213
- },
214
- property: {
215
- role: 'tablist',
216
- },
217
- });
218
-
219
- const {length} = panels;
220
-
221
- const tabs: HTMLButtonElement[] = [];
222
-
223
- for (let index = 0; index < length; index += 1) {
224
- const tab = createTab(prefix, index, panels[index], labels[index], index === active);
225
-
226
- element.append(tab);
227
- tabs.push(tab);
228
- }
229
-
230
- return {
231
- element,
232
- tabs,
233
- };
234
- }
235
-
236
- function detachTabs(state: OuiTabsState): void {
237
- state.navigable?.destroy();
238
-
239
- const {length} = state.panels.elements;
240
-
241
- for (let index = 0; index < length; index += 1) {
242
- const panel = state.panels.elements[index];
243
-
244
- panel.hidden = state.panels.hidden[index];
245
- panel.role = state.panels.roles[index];
246
-
247
- state.content.before(panel);
248
- }
249
-
250
- state.tabList.element.remove();
251
- state.content.remove();
252
- }
253
-
254
- function getActive(element: OuiTabsElement, max: number): number {
255
- const attribute = getAttribute(element, 'active');
256
-
257
- let index = 0;
258
-
259
- if (attribute != null) {
260
- const value = Number.parseInt(attribute, 10);
261
-
262
- if (!Number.isNaN(value) && value >= 0) {
263
- index = value > max ? max : value;
264
- }
265
- }
266
-
267
- return index;
268
- }
269
-
270
- function getId(): string {
271
- index += 1;
272
-
273
- return `oui_tabs_${index}`;
274
- }
275
-
276
- function getLabels(panels: HTMLElement[]): string[] | undefined {
277
- const labels: string[] = [];
278
-
279
- const {length} = panels;
280
-
281
- for (let index = 0; index < length; index += 1) {
282
- const panel = panels[index];
283
-
284
- const labelledBy = getAria(panel, 'labelledby');
285
-
286
- if (typeof labelledBy === 'string' && labelledBy.trim().length > 0) {
287
- const label: string[] = [];
288
- const selectors = labelledBy.split(/\s+/);
289
-
290
- for (const selector of selectors) {
291
- const element = document.getElementById(selector);
292
-
293
- if (element == null) {
294
- return;
295
- }
296
-
297
- label.push(element.textContent);
298
- }
299
-
300
- labels.push(label.join(' '));
301
-
302
- continue;
303
- }
304
-
305
- const label = getAria(panel, 'label');
306
-
307
- if (typeof label === 'string' && label.trim().length > 0) {
308
- labels.push(label);
309
-
310
- continue;
311
- }
312
-
313
- return;
314
- }
315
-
316
- return labels;
317
- }
318
-
319
- function initializeTabs(element: OuiTabsElement): OuiTabsState {
320
- const panels = [...element.querySelectorAll(SELECTOR_PANEL)] as HTMLElement[];
321
-
322
- if (panels.length === 0) {
323
- throw new Error(MESSAGE_EMPTY);
324
- }
325
-
326
- const labels = getLabels(panels);
327
-
328
- if (labels == null) {
329
- throw new Error(MESSAGE_INVALID);
330
- }
331
-
332
- let id: string;
333
-
334
- if (element.id === '') {
335
- id = getId();
336
- } else {
337
- id = element.id;
338
- }
339
-
340
- const active = getActive(element, panels.length - 1);
341
- const orientation = getNavigableOrientation(element, false, false);
342
-
343
- const content = createContent(id, panels, active);
344
- const tabList = createTabList(id, panels, labels, active);
345
-
346
- const state: OuiTabsState = {
347
- active,
348
- id,
349
- orientation,
350
- tabList,
351
- content: content.element,
352
- host: element,
353
- panels: content.panels,
354
- };
355
-
356
- attachTabs(state);
357
-
358
- return state;
359
- }
360
-
361
- function onActivate(state: OuiTabsState, next: number): void {
362
- const current = state.active;
363
-
364
- const event = new OuiTabsEvent('oui:beforechange', current, next, true);
365
-
366
- state.host.dispatchEvent(event);
367
-
368
- if (event.defaultPrevented) {
369
- return;
370
- }
371
-
372
- state.active = next;
373
-
374
- const {length} = state.panels.elements;
375
-
376
- for (let index = 0; index < length; index += 1) {
377
- const panel = state.panels.elements[index];
378
-
379
- panel.hidden = index !== next;
380
-
381
- setAria(state.tabList.tabs[index], 'selected', index === next);
382
- }
383
-
384
- setAttribute(state.host, 'active', next);
385
-
386
- state.host.dispatchEvent(new OuiTabsEvent('oui:change', current, next, false));
387
- }
388
-
389
- function setActive(state: OuiTabsState | undefined, value: unknown): void {
390
- if (state == null) {
391
- return;
392
- }
393
-
394
- const max = state.panels.elements.length - 1;
395
-
396
- let index: number | undefined;
397
-
398
- if (typeof value === 'number' && !Number.isNaN(value) && value >= 0) {
399
- index = value > max ? max : value;
400
- } else if (typeof value === 'string') {
401
- const parsed = Number.parseInt(value, 10);
402
-
403
- if (!Number.isNaN(parsed) && parsed >= 0) {
404
- index = parsed > max ? max : parsed;
405
- }
406
- }
407
-
408
- if (index == null) {
409
- setAttribute(state.host, 'active', state.active);
410
- } else if (index !== state.active) {
411
- state.navigable?.navigate(index, false);
412
-
413
- onActivate(state, index);
414
- }
415
- }
416
-
417
- // #endregion
418
-
419
- // #region Variables
420
-
421
- const TAGNAME = 'oui-tabs';
422
-
423
- const ATTRIBUTE_PANEL = `${TAGNAME}-panel`;
424
-
425
- const MESSAGE_EMPTY = `<${TAGNAME}> must contain at least one [${ATTRIBUTE_PANEL}] child element`;
426
-
427
- const MESSAGE_INVALID = `A [${ATTRIBUTE_PANEL}] child element of <${TAGNAME}> must have a valid 'aria-label' or 'aria-labelledby' attribute`;
428
-
429
- const SELECTOR_PANEL = `:scope > [${ATTRIBUTE_PANEL}]`;
430
-
431
- const SELECTOR_TAB = `[${TAGNAME}-tab]`;
432
-
433
- let index = 0;
434
-
435
- // #endregion
436
-
437
- // #region Initialization
438
-
439
- customElements.define(TAGNAME, OuiTabsElement);
440
-
441
- // #endregion
package/src/js/toolbar.ts DELETED
@@ -1,63 +0,0 @@
1
- import {attributable} from './internal/attributable';
2
- import {getNavigable, OuiNavigable, updateNavigableFocus} from './internal/navigable';
3
-
4
- // #region Types
5
-
6
- class OuiToolbar {
7
- #navigable: OuiNavigable;
8
-
9
- constructor(navigable: OuiNavigable) {
10
- this.#navigable = navigable;
11
-
12
- updateNavigableFocus(this.#navigable, false);
13
- }
14
-
15
- destroy(): void {
16
- this.#navigable.destroy();
17
-
18
- this.#navigable = undefined as never;
19
- }
20
- }
21
-
22
- // #endregion
23
-
24
- // #region Functions
25
-
26
- function addToolbar(element: HTMLElement): void {
27
- if (!instances.has(element)) {
28
- instances.set(
29
- element,
30
- new OuiToolbar(
31
- getNavigable(element, {
32
- role: 'toolbar',
33
- selector: SELECTOR,
34
- vertical: false,
35
- }),
36
- ),
37
- );
38
- }
39
- }
40
-
41
- function removeToolbar(element: HTMLElement): void {
42
- instances.get(element)?.destroy();
43
-
44
- instances.delete(element);
45
- }
46
-
47
- // #endregion
48
-
49
- // #region Variables
50
-
51
- const ATTRIBUTE = 'oui-toolbar';
52
-
53
- const SELECTOR = `[${ATTRIBUTE}-item]`;
54
-
55
- const instances = new WeakMap<HTMLElement, OuiToolbar>();
56
-
57
- // #endregion
58
-
59
- // #region Initialization
60
-
61
- attributable(ATTRIBUTE, addToolbar, removeToolbar);
62
-
63
- // #endregion