@sc4rfurryx/proteusjs 1.0.0 → 1.1.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 (65) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +331 -77
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/adapters/react.d.ts +139 -0
  5. package/dist/adapters/react.esm.js +848 -0
  6. package/dist/adapters/react.esm.js.map +1 -0
  7. package/dist/adapters/svelte.d.ts +181 -0
  8. package/dist/adapters/svelte.esm.js +908 -0
  9. package/dist/adapters/svelte.esm.js.map +1 -0
  10. package/dist/adapters/vue.d.ts +205 -0
  11. package/dist/adapters/vue.esm.js +872 -0
  12. package/dist/adapters/vue.esm.js.map +1 -0
  13. package/dist/modules/a11y-audit.d.ts +39 -0
  14. package/dist/modules/a11y-audit.esm.js +509 -0
  15. package/dist/modules/a11y-audit.esm.js.map +1 -0
  16. package/dist/modules/a11y-primitives.d.ts +69 -0
  17. package/dist/modules/a11y-primitives.esm.js +445 -0
  18. package/dist/modules/a11y-primitives.esm.js.map +1 -0
  19. package/dist/modules/anchor.d.ts +29 -0
  20. package/dist/modules/anchor.esm.js +218 -0
  21. package/dist/modules/anchor.esm.js.map +1 -0
  22. package/dist/modules/container.d.ts +60 -0
  23. package/dist/modules/container.esm.js +194 -0
  24. package/dist/modules/container.esm.js.map +1 -0
  25. package/dist/modules/perf.d.ts +82 -0
  26. package/dist/modules/perf.esm.js +257 -0
  27. package/dist/modules/perf.esm.js.map +1 -0
  28. package/dist/modules/popover.d.ts +33 -0
  29. package/dist/modules/popover.esm.js +191 -0
  30. package/dist/modules/popover.esm.js.map +1 -0
  31. package/dist/modules/scroll.d.ts +43 -0
  32. package/dist/modules/scroll.esm.js +195 -0
  33. package/dist/modules/scroll.esm.js.map +1 -0
  34. package/dist/modules/transitions.d.ts +35 -0
  35. package/dist/modules/transitions.esm.js +120 -0
  36. package/dist/modules/transitions.esm.js.map +1 -0
  37. package/dist/modules/typography.d.ts +72 -0
  38. package/dist/modules/typography.esm.js +168 -0
  39. package/dist/modules/typography.esm.js.map +1 -0
  40. package/dist/proteus.cjs.js +2332 -12
  41. package/dist/proteus.cjs.js.map +1 -1
  42. package/dist/proteus.d.ts +561 -12
  43. package/dist/proteus.esm.js +2323 -12
  44. package/dist/proteus.esm.js.map +1 -1
  45. package/dist/proteus.esm.min.js +3 -3
  46. package/dist/proteus.esm.min.js.map +1 -1
  47. package/dist/proteus.js +2332 -12
  48. package/dist/proteus.js.map +1 -1
  49. package/dist/proteus.min.js +3 -3
  50. package/dist/proteus.min.js.map +1 -1
  51. package/package.json +61 -4
  52. package/src/adapters/react.ts +264 -0
  53. package/src/adapters/svelte.ts +321 -0
  54. package/src/adapters/vue.ts +268 -0
  55. package/src/index.ts +33 -6
  56. package/src/modules/a11y-audit/index.ts +608 -0
  57. package/src/modules/a11y-primitives/index.ts +554 -0
  58. package/src/modules/anchor/index.ts +257 -0
  59. package/src/modules/container/index.ts +230 -0
  60. package/src/modules/perf/index.ts +291 -0
  61. package/src/modules/popover/index.ts +238 -0
  62. package/src/modules/scroll/index.ts +251 -0
  63. package/src/modules/transitions/index.ts +145 -0
  64. package/src/modules/typography/index.ts +239 -0
  65. package/src/utils/version.ts +1 -1
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @sc4rfurryx/proteusjs/a11y-primitives
3
+ * Headless accessibility patterns (no styles)
4
+ *
5
+ * @version 1.1.0
6
+ * @author sc4rfurry
7
+ * @license MIT
8
+ */
9
+ interface Controller {
10
+ destroy(): void;
11
+ }
12
+ interface DialogOptions {
13
+ modal?: boolean;
14
+ restoreFocus?: boolean;
15
+ }
16
+ interface TooltipOptions {
17
+ delay?: number;
18
+ }
19
+ interface ComboboxOptions {
20
+ multiselect?: boolean;
21
+ filtering?: (query: string) => Promise<unknown[]> | unknown[];
22
+ }
23
+ interface ListboxOptions {
24
+ multiselect?: boolean;
25
+ }
26
+ interface FocusTrapController {
27
+ activate(): void;
28
+ deactivate(): void;
29
+ }
30
+ /**
31
+ * Dialog primitive with proper ARIA and focus management
32
+ */
33
+ declare function dialog(root: Element | string, opts?: DialogOptions): Controller;
34
+ /**
35
+ * Tooltip primitive with delay and proper ARIA
36
+ */
37
+ declare function tooltip(trigger: Element | string, panel: Element | string, opts?: TooltipOptions): Controller;
38
+ /**
39
+ * Listbox primitive with keyboard navigation
40
+ */
41
+ declare function listbox(root: Element | string, opts?: ListboxOptions): Controller;
42
+ /**
43
+ * Combobox primitive with filtering and multiselect
44
+ */
45
+ declare function combobox(root: Element | string, opts?: ComboboxOptions): Controller;
46
+ /**
47
+ * Tabs primitive with keyboard navigation
48
+ */
49
+ declare function tabs(root: Element | string): Controller;
50
+ /**
51
+ * Menu primitive with keyboard navigation
52
+ */
53
+ declare function menu(root: Element | string): Controller;
54
+ /**
55
+ * Focus trap utility
56
+ */
57
+ declare function focusTrap(root: Element | string): FocusTrapController;
58
+ declare const _default: {
59
+ dialog: typeof dialog;
60
+ tooltip: typeof tooltip;
61
+ combobox: typeof combobox;
62
+ listbox: typeof listbox;
63
+ tabs: typeof tabs;
64
+ menu: typeof menu;
65
+ focusTrap: typeof focusTrap;
66
+ };
67
+
68
+ export { combobox, _default as default, dialog, focusTrap, listbox, menu, tabs, tooltip };
69
+ export type { ComboboxOptions, Controller, DialogOptions, FocusTrapController, ListboxOptions, TooltipOptions };
@@ -0,0 +1,445 @@
1
+ /*!
2
+ * ProteusJS v1.1.0
3
+ * Shape-shifting responsive design that adapts like the sea god himself
4
+ * (c) 2025 sc4rfurry
5
+ * Released under the MIT License
6
+ */
7
+ /**
8
+ * @sc4rfurryx/proteusjs/a11y-primitives
9
+ * Headless accessibility patterns (no styles)
10
+ *
11
+ * @version 1.1.0
12
+ * @author sc4rfurry
13
+ * @license MIT
14
+ */
15
+ /**
16
+ * Dialog primitive with proper ARIA and focus management
17
+ */
18
+ function dialog(root, opts = {}) {
19
+ const rootEl = typeof root === 'string' ? document.querySelector(root) : root;
20
+ if (!rootEl)
21
+ throw new Error('Dialog root element not found');
22
+ const { modal = true, restoreFocus = true } = opts;
23
+ let isOpen = false;
24
+ const setup = () => {
25
+ rootEl.setAttribute('role', 'dialog');
26
+ if (modal) {
27
+ rootEl.setAttribute('aria-modal', 'true');
28
+ }
29
+ // Ensure dialog is initially hidden
30
+ if (!rootEl.hasAttribute('hidden')) {
31
+ rootEl.setAttribute('hidden', '');
32
+ }
33
+ };
34
+ const handleKeyDown = (e) => {
35
+ if (e.key === 'Escape' && isOpen) ;
36
+ };
37
+ setup();
38
+ document.addEventListener('keydown', handleKeyDown);
39
+ return {
40
+ destroy: () => {
41
+ document.removeEventListener('keydown', handleKeyDown);
42
+ }
43
+ };
44
+ }
45
+ /**
46
+ * Tooltip primitive with delay and proper ARIA
47
+ */
48
+ function tooltip(trigger, panel, opts = {}) {
49
+ const triggerEl = typeof trigger === 'string' ? document.querySelector(trigger) : trigger;
50
+ const panelEl = typeof panel === 'string' ? document.querySelector(panel) : panel;
51
+ if (!triggerEl || !panelEl) {
52
+ throw new Error('Both trigger and panel elements must exist');
53
+ }
54
+ const { delay = 500 } = opts;
55
+ let timeoutId = null;
56
+ let isVisible = false;
57
+ const setup = () => {
58
+ const tooltipId = panelEl.id || `tooltip-${Math.random().toString(36).substring(2, 11)}`;
59
+ panelEl.id = tooltipId;
60
+ panelEl.setAttribute('role', 'tooltip');
61
+ triggerEl.setAttribute('aria-describedby', tooltipId);
62
+ // Initially hidden
63
+ panelEl.style.display = 'none';
64
+ };
65
+ const show = () => {
66
+ if (isVisible)
67
+ return;
68
+ panelEl.style.display = 'block';
69
+ isVisible = true;
70
+ };
71
+ const hide = () => {
72
+ if (!isVisible)
73
+ return;
74
+ panelEl.style.display = 'none';
75
+ isVisible = false;
76
+ };
77
+ const handleMouseEnter = () => {
78
+ if (timeoutId)
79
+ clearTimeout(timeoutId);
80
+ timeoutId = window.setTimeout(show, delay);
81
+ };
82
+ const handleMouseLeave = () => {
83
+ if (timeoutId) {
84
+ clearTimeout(timeoutId);
85
+ timeoutId = null;
86
+ }
87
+ hide();
88
+ };
89
+ const handleFocus = () => {
90
+ show();
91
+ };
92
+ const handleBlur = () => {
93
+ hide();
94
+ };
95
+ setup();
96
+ triggerEl.addEventListener('mouseenter', handleMouseEnter);
97
+ triggerEl.addEventListener('mouseleave', handleMouseLeave);
98
+ triggerEl.addEventListener('focus', handleFocus);
99
+ triggerEl.addEventListener('blur', handleBlur);
100
+ return {
101
+ destroy: () => {
102
+ if (timeoutId)
103
+ clearTimeout(timeoutId);
104
+ triggerEl.removeEventListener('mouseenter', handleMouseEnter);
105
+ triggerEl.removeEventListener('mouseleave', handleMouseLeave);
106
+ triggerEl.removeEventListener('focus', handleFocus);
107
+ triggerEl.removeEventListener('blur', handleBlur);
108
+ hide();
109
+ }
110
+ };
111
+ }
112
+ /**
113
+ * Listbox primitive with keyboard navigation
114
+ */
115
+ function listbox(root, opts = {}) {
116
+ const rootEl = typeof root === 'string' ? document.querySelector(root) : root;
117
+ if (!rootEl)
118
+ throw new Error('Listbox root element not found');
119
+ const { multiselect = false } = opts;
120
+ let currentIndex = -1;
121
+ const setup = () => {
122
+ rootEl.setAttribute('role', 'listbox');
123
+ if (multiselect) {
124
+ rootEl.setAttribute('aria-multiselectable', 'true');
125
+ }
126
+ // Set up options
127
+ const options = rootEl.querySelectorAll('[role="option"]');
128
+ options.forEach((option, _index) => {
129
+ option.setAttribute('aria-selected', 'false');
130
+ option.setAttribute('tabindex', '-1');
131
+ });
132
+ if (options.length > 0) {
133
+ options[0]?.setAttribute('tabindex', '0');
134
+ currentIndex = 0;
135
+ }
136
+ };
137
+ const getOptions = () => rootEl.querySelectorAll('[role="option"]');
138
+ const setCurrentIndex = (index) => {
139
+ const options = getOptions();
140
+ if (index < 0 || index >= options.length)
141
+ return;
142
+ // Remove tabindex from all options
143
+ options.forEach(option => option.setAttribute('tabindex', '-1'));
144
+ // Set current option
145
+ currentIndex = index;
146
+ options[currentIndex]?.setAttribute('tabindex', '0');
147
+ options[currentIndex]?.focus();
148
+ };
149
+ const selectOption = (index) => {
150
+ const options = getOptions();
151
+ if (index < 0 || index >= options.length)
152
+ return;
153
+ if (multiselect) {
154
+ const isSelected = options[index]?.getAttribute('aria-selected') === 'true';
155
+ options[index]?.setAttribute('aria-selected', (!isSelected).toString());
156
+ }
157
+ else {
158
+ // Single select - clear all others
159
+ options.forEach(option => option.setAttribute('aria-selected', 'false'));
160
+ options[index]?.setAttribute('aria-selected', 'true');
161
+ }
162
+ };
163
+ const handleKeyDown = (e) => {
164
+ const keyEvent = e;
165
+ const options = getOptions();
166
+ switch (keyEvent.key) {
167
+ case 'ArrowDown':
168
+ keyEvent.preventDefault();
169
+ setCurrentIndex(Math.min(currentIndex + 1, options.length - 1));
170
+ break;
171
+ case 'ArrowUp':
172
+ keyEvent.preventDefault();
173
+ setCurrentIndex(Math.max(currentIndex - 1, 0));
174
+ break;
175
+ case 'Home':
176
+ keyEvent.preventDefault();
177
+ setCurrentIndex(0);
178
+ break;
179
+ case 'End':
180
+ keyEvent.preventDefault();
181
+ setCurrentIndex(options.length - 1);
182
+ break;
183
+ case 'Enter':
184
+ case ' ':
185
+ keyEvent.preventDefault();
186
+ selectOption(currentIndex);
187
+ break;
188
+ }
189
+ };
190
+ const handleClick = (e) => {
191
+ const target = e.target;
192
+ const option = target.closest('[role="option"]');
193
+ if (!option)
194
+ return;
195
+ const options = Array.from(getOptions());
196
+ const index = options.indexOf(option);
197
+ if (index >= 0) {
198
+ setCurrentIndex(index);
199
+ selectOption(index);
200
+ }
201
+ };
202
+ setup();
203
+ rootEl.addEventListener('keydown', handleKeyDown);
204
+ rootEl.addEventListener('click', handleClick);
205
+ return {
206
+ destroy: () => {
207
+ rootEl.removeEventListener('keydown', handleKeyDown);
208
+ rootEl.removeEventListener('click', handleClick);
209
+ }
210
+ };
211
+ }
212
+ /**
213
+ * Combobox primitive with filtering and multiselect
214
+ */
215
+ function combobox(root, opts = {}) {
216
+ const rootEl = typeof root === 'string' ? document.querySelector(root) : root;
217
+ if (!rootEl)
218
+ throw new Error('Combobox root element not found');
219
+ const { multiselect = false, filtering: _filtering } = opts;
220
+ let isOpen = false;
221
+ const setup = () => {
222
+ rootEl.setAttribute('role', 'combobox');
223
+ rootEl.setAttribute('aria-expanded', 'false');
224
+ if (multiselect) {
225
+ rootEl.setAttribute('aria-multiselectable', 'true');
226
+ }
227
+ };
228
+ const handleKeyDown = (e) => {
229
+ const keyEvent = e;
230
+ switch (keyEvent.key) {
231
+ case 'ArrowDown':
232
+ keyEvent.preventDefault();
233
+ if (!isOpen) {
234
+ isOpen = true;
235
+ rootEl.setAttribute('aria-expanded', 'true');
236
+ }
237
+ // Navigate options logic would go here
238
+ break;
239
+ case 'Escape':
240
+ keyEvent.preventDefault();
241
+ isOpen = false;
242
+ rootEl.setAttribute('aria-expanded', 'false');
243
+ break;
244
+ }
245
+ };
246
+ setup();
247
+ rootEl.addEventListener('keydown', handleKeyDown);
248
+ return {
249
+ destroy: () => {
250
+ rootEl.removeEventListener('keydown', handleKeyDown);
251
+ }
252
+ };
253
+ }
254
+ /**
255
+ * Tabs primitive with keyboard navigation
256
+ */
257
+ function tabs(root) {
258
+ const rootEl = typeof root === 'string' ? document.querySelector(root) : root;
259
+ if (!rootEl)
260
+ throw new Error('Tabs root element not found');
261
+ let currentIndex = 0;
262
+ const setup = () => {
263
+ const tabList = rootEl.querySelector('[role="tablist"]');
264
+ const tabs = rootEl.querySelectorAll('[role="tab"]');
265
+ const panels = rootEl.querySelectorAll('[role="tabpanel"]');
266
+ if (!tabList) {
267
+ rootEl.setAttribute('role', 'tablist');
268
+ }
269
+ tabs.forEach((tab, index) => {
270
+ tab.setAttribute('tabindex', index === 0 ? '0' : '-1');
271
+ tab.setAttribute('aria-selected', index === 0 ? 'true' : 'false');
272
+ });
273
+ panels.forEach((panel, index) => {
274
+ panel.setAttribute('hidden', index === 0 ? '' : 'true');
275
+ });
276
+ };
277
+ const handleKeyDown = (e) => {
278
+ const keyEvent = e;
279
+ const tabs = Array.from(rootEl.querySelectorAll('[role="tab"]'));
280
+ switch (keyEvent.key) {
281
+ case 'ArrowRight':
282
+ keyEvent.preventDefault();
283
+ currentIndex = (currentIndex + 1) % tabs.length;
284
+ activateTab(currentIndex);
285
+ break;
286
+ case 'ArrowLeft':
287
+ keyEvent.preventDefault();
288
+ currentIndex = currentIndex === 0 ? tabs.length - 1 : currentIndex - 1;
289
+ activateTab(currentIndex);
290
+ break;
291
+ }
292
+ };
293
+ const activateTab = (index) => {
294
+ const tabs = rootEl.querySelectorAll('[role="tab"]');
295
+ const panels = rootEl.querySelectorAll('[role="tabpanel"]');
296
+ tabs.forEach((tab, i) => {
297
+ tab.setAttribute('tabindex', i === index ? '0' : '-1');
298
+ tab.setAttribute('aria-selected', i === index ? 'true' : 'false');
299
+ if (i === index) {
300
+ tab.focus();
301
+ }
302
+ });
303
+ panels.forEach((panel, i) => {
304
+ if (i === index) {
305
+ panel.removeAttribute('hidden');
306
+ }
307
+ else {
308
+ panel.setAttribute('hidden', 'true');
309
+ }
310
+ });
311
+ };
312
+ setup();
313
+ rootEl.addEventListener('keydown', handleKeyDown);
314
+ return {
315
+ destroy: () => {
316
+ rootEl.removeEventListener('keydown', handleKeyDown);
317
+ }
318
+ };
319
+ }
320
+ /**
321
+ * Menu primitive with keyboard navigation
322
+ */
323
+ function menu(root) {
324
+ const rootEl = typeof root === 'string' ? document.querySelector(root) : root;
325
+ if (!rootEl)
326
+ throw new Error('Menu root element not found');
327
+ let currentIndex = -1;
328
+ const setup = () => {
329
+ rootEl.setAttribute('role', 'menu');
330
+ const items = rootEl.querySelectorAll('[role="menuitem"]');
331
+ items.forEach((item, index) => {
332
+ item.setAttribute('tabindex', index === 0 ? '0' : '-1');
333
+ });
334
+ if (items.length > 0) {
335
+ currentIndex = 0;
336
+ }
337
+ };
338
+ const handleKeyDown = (e) => {
339
+ const keyEvent = e;
340
+ const items = Array.from(rootEl.querySelectorAll('[role="menuitem"]'));
341
+ switch (keyEvent.key) {
342
+ case 'ArrowDown':
343
+ keyEvent.preventDefault();
344
+ currentIndex = (currentIndex + 1) % items.length;
345
+ setCurrentItem(currentIndex);
346
+ break;
347
+ case 'ArrowUp':
348
+ keyEvent.preventDefault();
349
+ currentIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1;
350
+ setCurrentItem(currentIndex);
351
+ break;
352
+ case 'Enter':
353
+ case ' ':
354
+ keyEvent.preventDefault();
355
+ if (items[currentIndex]) {
356
+ items[currentIndex].click();
357
+ }
358
+ break;
359
+ }
360
+ };
361
+ const setCurrentItem = (index) => {
362
+ const items = rootEl.querySelectorAll('[role="menuitem"]');
363
+ items.forEach((item, i) => {
364
+ item.setAttribute('tabindex', i === index ? '0' : '-1');
365
+ if (i === index) {
366
+ item.focus();
367
+ }
368
+ });
369
+ };
370
+ setup();
371
+ rootEl.addEventListener('keydown', handleKeyDown);
372
+ return {
373
+ destroy: () => {
374
+ rootEl.removeEventListener('keydown', handleKeyDown);
375
+ }
376
+ };
377
+ }
378
+ /**
379
+ * Focus trap utility
380
+ */
381
+ function focusTrap(root) {
382
+ const rootEl = typeof root === 'string' ? document.querySelector(root) : root;
383
+ if (!rootEl)
384
+ throw new Error('Focus trap root element not found');
385
+ let isActive = false;
386
+ let focusableElements = [];
387
+ const updateFocusableElements = () => {
388
+ const selector = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
389
+ focusableElements = Array.from(rootEl.querySelectorAll(selector));
390
+ };
391
+ const handleKeyDown = (e) => {
392
+ if (!isActive || e.key !== 'Tab')
393
+ return;
394
+ updateFocusableElements();
395
+ if (focusableElements.length === 0)
396
+ return;
397
+ const firstElement = focusableElements[0];
398
+ const lastElement = focusableElements[focusableElements.length - 1];
399
+ if (e.shiftKey) {
400
+ if (document.activeElement === firstElement) {
401
+ e.preventDefault();
402
+ lastElement.focus();
403
+ }
404
+ }
405
+ else {
406
+ if (document.activeElement === lastElement) {
407
+ e.preventDefault();
408
+ firstElement.focus();
409
+ }
410
+ }
411
+ };
412
+ const activate = () => {
413
+ if (isActive)
414
+ return;
415
+ isActive = true;
416
+ updateFocusableElements();
417
+ if (focusableElements.length > 0) {
418
+ focusableElements[0].focus();
419
+ }
420
+ document.addEventListener('keydown', handleKeyDown);
421
+ };
422
+ const deactivate = () => {
423
+ if (!isActive)
424
+ return;
425
+ isActive = false;
426
+ document.removeEventListener('keydown', handleKeyDown);
427
+ };
428
+ return {
429
+ activate,
430
+ deactivate
431
+ };
432
+ }
433
+ // Export all functions
434
+ var index = {
435
+ dialog,
436
+ tooltip,
437
+ combobox,
438
+ listbox,
439
+ tabs,
440
+ menu,
441
+ focusTrap
442
+ };
443
+
444
+ export { combobox, index as default, dialog, focusTrap, listbox, menu, tabs, tooltip };
445
+ //# sourceMappingURL=a11y-primitives.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11y-primitives.esm.js","sources":["../../src/modules/a11y-primitives/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @sc4rfurryx/proteusjs/anchor
3
+ * CSS Anchor Positioning utilities with robust JS fallback
4
+ *
5
+ * @version 1.1.0
6
+ * @author sc4rfurry
7
+ * @license MIT
8
+ */
9
+ interface TetherOptions {
10
+ anchor: Element | string;
11
+ placement?: 'top' | 'bottom' | 'left' | 'right' | 'auto';
12
+ align?: 'start' | 'center' | 'end';
13
+ offset?: number;
14
+ strategy?: 'absolute' | 'fixed';
15
+ }
16
+ interface TetherController {
17
+ destroy(): void;
18
+ }
19
+ /**
20
+ * Declarative tethers (tooltips, callouts) via CSS Anchor Positioning when available;
21
+ * robust JS fallback with flip/collision detection
22
+ */
23
+ declare function tether(floating: Element | string, opts: TetherOptions): TetherController;
24
+ declare const _default: {
25
+ tether: typeof tether;
26
+ };
27
+
28
+ export { _default as default, tether };
29
+ export type { TetherController, TetherOptions };