stimeo-ui 0.7.0 → 0.9.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 (77) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/dist/controllers/auto_submit_controller.d.ts +14 -3
  3. package/dist/controllers/auto_submit_controller.js +94 -16
  4. package/dist/controllers/auto_submit_controller.js.map +1 -1
  5. package/dist/controllers/bulk_select_controller.d.ts +62 -15
  6. package/dist/controllers/bulk_select_controller.js +139 -28
  7. package/dist/controllers/bulk_select_controller.js.map +1 -1
  8. package/dist/controllers/carousel_controller.d.ts +81 -47
  9. package/dist/controllers/carousel_controller.js +451 -100
  10. package/dist/controllers/carousel_controller.js.map +1 -1
  11. package/dist/controllers/clipboard_controller.d.ts +48 -15
  12. package/dist/controllers/clipboard_controller.js +102 -20
  13. package/dist/controllers/clipboard_controller.js.map +1 -1
  14. package/dist/controllers/color_picker_controller.d.ts +37 -6
  15. package/dist/controllers/color_picker_controller.js +180 -43
  16. package/dist/controllers/color_picker_controller.js.map +1 -1
  17. package/dist/controllers/currency_input_controller.d.ts +39 -5
  18. package/dist/controllers/currency_input_controller.js +305 -74
  19. package/dist/controllers/currency_input_controller.js.map +1 -1
  20. package/dist/controllers/data_grid_controller.d.ts +25 -9
  21. package/dist/controllers/data_grid_controller.js +150 -24
  22. package/dist/controllers/data_grid_controller.js.map +1 -1
  23. package/dist/controllers/direct_upload_controller.d.ts +3 -1
  24. package/dist/controllers/direct_upload_controller.js +12 -2
  25. package/dist/controllers/direct_upload_controller.js.map +1 -1
  26. package/dist/controllers/editable_controller.d.ts +34 -9
  27. package/dist/controllers/editable_controller.js +83 -30
  28. package/dist/controllers/editable_controller.js.map +1 -1
  29. package/dist/controllers/file_dropzone_controller.d.ts +123 -29
  30. package/dist/controllers/file_dropzone_controller.js +386 -63
  31. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  32. package/dist/controllers/filter_controller.d.ts +15 -3
  33. package/dist/controllers/filter_controller.js +32 -1
  34. package/dist/controllers/filter_controller.js.map +1 -1
  35. package/dist/controllers/flash_controller.d.ts +3 -1
  36. package/dist/controllers/flash_controller.js +3 -1
  37. package/dist/controllers/flash_controller.js.map +1 -1
  38. package/dist/controllers/frame_loading_controller.d.ts +4 -2
  39. package/dist/controllers/frame_loading_controller.js +2 -1
  40. package/dist/controllers/frame_loading_controller.js.map +1 -1
  41. package/dist/controllers/input_mask_controller.d.ts +42 -16
  42. package/dist/controllers/input_mask_controller.js +251 -76
  43. package/dist/controllers/input_mask_controller.js.map +1 -1
  44. package/dist/controllers/masonry_controller.d.ts +34 -5
  45. package/dist/controllers/masonry_controller.js +129 -17
  46. package/dist/controllers/masonry_controller.js.map +1 -1
  47. package/dist/controllers/nested_form_controller.d.ts +51 -14
  48. package/dist/controllers/nested_form_controller.js +450 -42
  49. package/dist/controllers/nested_form_controller.js.map +1 -1
  50. package/dist/controllers/otp_controller.d.ts +64 -25
  51. package/dist/controllers/otp_controller.js +485 -114
  52. package/dist/controllers/otp_controller.js.map +1 -1
  53. package/dist/controllers/reset_before_cache_controller.d.ts +25 -2
  54. package/dist/controllers/reset_before_cache_controller.js +51 -5
  55. package/dist/controllers/reset_before_cache_controller.js.map +1 -1
  56. package/dist/controllers/resizable_controller.d.ts +23 -7
  57. package/dist/controllers/resizable_controller.js +128 -55
  58. package/dist/controllers/resizable_controller.js.map +1 -1
  59. package/dist/controllers/spinner_controller.d.ts +3 -2
  60. package/dist/controllers/spinner_controller.js +7 -5
  61. package/dist/controllers/spinner_controller.js.map +1 -1
  62. package/dist/controllers/submit_once_controller.d.ts +4 -1
  63. package/dist/controllers/submit_once_controller.js +3 -1
  64. package/dist/controllers/submit_once_controller.js.map +1 -1
  65. package/dist/controllers/textarea_autosize_controller.d.ts +30 -10
  66. package/dist/controllers/textarea_autosize_controller.js +131 -3
  67. package/dist/controllers/textarea_autosize_controller.js.map +1 -1
  68. package/dist/index.js +2764 -923
  69. package/dist/index.js.map +1 -1
  70. package/dist/inspector/cli.d.ts +8 -1
  71. package/dist/inspector/cli.js +5 -1
  72. package/dist/inspector/cli.js.map +1 -1
  73. package/dist/inspector/cli_bin.js +5 -1
  74. package/dist/inspector/cli_bin.js.map +1 -1
  75. package/dist/inspector/examples.json +24 -24
  76. package/dist/inspector/manifest.json +193 -30
  77. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 12,
3
- "packageVersion": "0.7.0",
3
+ "packageVersion": "0.9.0",
4
4
  "controllers": {
5
5
  "stimeo--accordion": {
6
6
  "targets": [
@@ -167,7 +167,8 @@
167
167
  ],
168
168
  "events": [
169
169
  "submit",
170
- "done"
170
+ "done",
171
+ "reconcile"
171
172
  ],
172
173
  "requiredTargets": [],
173
174
  "conditionalTargets": [],
@@ -266,7 +267,7 @@
266
267
  ],
267
268
  "values": [
268
269
  "totalCount",
269
- "announce"
270
+ "announceText"
270
271
  ],
271
272
  "valueConstraints": [],
272
273
  "valueRelations": [],
@@ -275,7 +276,8 @@
275
276
  "selectAllPages"
276
277
  ],
277
278
  "events": [
278
- "change"
279
+ "change",
280
+ "reconcile"
279
281
  ],
280
282
  "requiredTargets": [
281
283
  "item",
@@ -349,7 +351,15 @@
349
351
  "interval",
350
352
  "loop"
351
353
  ],
352
- "valueConstraints": [],
354
+ "valueConstraints": [
355
+ {
356
+ "value": "interval",
357
+ "type": "number",
358
+ "finite": true,
359
+ "greaterThan": 0,
360
+ "suggestion": "Set interval to a finite number of milliseconds greater than 0 — anything else falls back to 5000 at runtime."
361
+ }
362
+ ],
353
363
  "valueRelations": [],
354
364
  "actions": [
355
365
  "goto",
@@ -367,10 +377,24 @@
367
377
  "reconcile"
368
378
  ],
369
379
  "requiredTargets": [
370
- "slide",
371
- "picker"
380
+ "slide"
381
+ ],
382
+ "conditionalTargets": [
383
+ {
384
+ "whenPresent": "prev",
385
+ "require": [
386
+ "next"
387
+ ],
388
+ "suggestion": "Add the \"next\" button that pairs with \"prev\" — a carousel the reader can only step backwards through cannot reach the slides ahead of it."
389
+ },
390
+ {
391
+ "whenPresent": "next",
392
+ "require": [
393
+ "prev"
394
+ ],
395
+ "suggestion": "Add the \"prev\" button that pairs with \"next\" — a carousel the reader can only step forwards through cannot return to a slide they passed."
396
+ }
372
397
  ],
373
- "conditionalTargets": [],
374
398
  "requiredActions": [],
375
399
  "actionCompletion": [],
376
400
  "a11y": [
@@ -400,7 +424,27 @@
400
424
  "values": [
401
425
  "tabpanel"
402
426
  ],
403
- "suggestion": "Add role=\"tabpanel\" to each slide target."
427
+ "whenContains": {
428
+ "target": "picker",
429
+ "within": "scope",
430
+ "min": 1
431
+ },
432
+ "suggestion": "Add role=\"tabpanel\" to each slide target — its picker is the tab."
433
+ },
434
+ {
435
+ "target": "slide",
436
+ "attrs": [
437
+ "role"
438
+ ],
439
+ "values": [
440
+ "group"
441
+ ],
442
+ "whenContains": {
443
+ "target": "picker",
444
+ "within": "scope",
445
+ "max": 0
446
+ },
447
+ "suggestion": "Add role=\"group\" to each slide target — a carousel with no pickers has no tabs, so its slides are groups rather than tabpanels."
404
448
  },
405
449
  {
406
450
  "target": "slide",
@@ -433,7 +477,44 @@
433
477
  ],
434
478
  "keyboard": [],
435
479
  "hosts": [],
436
- "managedAria": [],
480
+ "managedAria": [
481
+ {
482
+ "target": "playToggle",
483
+ "attrs": [
484
+ "aria-pressed"
485
+ ],
486
+ "suggestion": "Remove aria-pressed from the playToggle target — the controller mirrors the autoplay Value onto it. Set data-stimeo--carousel-autoplay-value to choose the initial state."
487
+ },
488
+ {
489
+ "target": "playToggle",
490
+ "attrs": [
491
+ "aria-disabled"
492
+ ],
493
+ "suggestion": "Remove aria-disabled from the playToggle target — the controller marks it when the carousel has no slide left to rotate to."
494
+ },
495
+ {
496
+ "target": "prev",
497
+ "attrs": [
498
+ "aria-disabled"
499
+ ],
500
+ "suggestion": "Remove aria-disabled from the prev target — the controller marks it at the first slide of a non-looping carousel."
501
+ },
502
+ {
503
+ "target": "next",
504
+ "attrs": [
505
+ "aria-disabled"
506
+ ],
507
+ "suggestion": "Remove aria-disabled from the next target — the controller marks it at the last slide of a non-looping carousel."
508
+ },
509
+ {
510
+ "target": "viewport",
511
+ "attrs": [
512
+ "aria-live",
513
+ "aria-atomic"
514
+ ],
515
+ "suggestion": "Remove aria-live and aria-atomic from the viewport target — the controller switches the region between off while rotating and polite while stopped."
516
+ }
517
+ ],
437
518
  "compositions": [],
438
519
  "companions": [],
439
520
  "targetDeclarations": [],
@@ -447,6 +528,20 @@
447
528
  ],
448
529
  "max": 1,
449
530
  "suggestion": "Leave aria-selected=\"true\" on exactly one picker and set the others to \"false\" — the carousel shows one slide, and connect keeps the first."
531
+ },
532
+ {
533
+ "within": "",
534
+ "target": "playToggle",
535
+ "min": 1,
536
+ "when": {
537
+ "value": "autoplay",
538
+ "type": "boolean",
539
+ "equals": [
540
+ "true"
541
+ ],
542
+ "default": "false"
543
+ },
544
+ "suggestion": "Add a \"playToggle\" button wired to stimeo--carousel#togglePlay — a carousel that rotates on its own needs a control that stops it (WCAG 2.2.2)."
450
545
  }
451
546
  ],
452
547
  "forbiddenAria": []
@@ -547,7 +642,9 @@
547
642
  "text",
548
643
  "feedbackDuration",
549
644
  "copiedLabel",
550
- "errorLabel"
645
+ "errorLabel",
646
+ "announceCopiedText",
647
+ "announceErrorText"
551
648
  ],
552
649
  "valueConstraints": [],
553
650
  "valueRelations": [],
@@ -558,8 +655,7 @@
558
655
  "copy"
559
656
  ],
560
657
  "requiredTargets": [
561
- "button",
562
- "feedback"
658
+ "button"
563
659
  ],
564
660
  "conditionalTargets": [],
565
661
  "requiredActions": [],
@@ -1468,7 +1564,8 @@
1468
1564
  "events": [
1469
1565
  "progress",
1470
1566
  "done",
1471
- "error"
1567
+ "error",
1568
+ "reconcile"
1472
1569
  ],
1473
1570
  "requiredTargets": [
1474
1571
  "list",
@@ -1653,10 +1750,12 @@
1653
1750
  "valueConstraints": [],
1654
1751
  "valueRelations": [],
1655
1752
  "actions": [
1753
+ "cancel",
1656
1754
  "edit",
1657
- "onBlur",
1658
1755
  "onDisplayKeydown",
1659
- "onKeydown"
1756
+ "onKeydown",
1757
+ "revert",
1758
+ "save"
1660
1759
  ],
1661
1760
  "events": [
1662
1761
  "cancel",
@@ -1719,12 +1818,21 @@
1719
1818
  "list",
1720
1819
  "item",
1721
1820
  "itemTemplate",
1722
- "status"
1821
+ "name",
1822
+ "thumb",
1823
+ "remove"
1723
1824
  ],
1724
1825
  "values": [
1725
1826
  "maxSize",
1726
1827
  "maxFiles",
1727
- "dragLabel"
1828
+ "allowDuplicates",
1829
+ "announceDragText",
1830
+ "announceAddedText",
1831
+ "announceRemovedText",
1832
+ "announceRejectedTypeText",
1833
+ "announceRejectedSizeText",
1834
+ "announceRejectedDuplicateText",
1835
+ "announceRejectedCountText"
1728
1836
  ],
1729
1837
  "valueConstraints": [],
1730
1838
  "valueRelations": [],
@@ -1737,7 +1845,8 @@
1737
1845
  ],
1738
1846
  "events": [
1739
1847
  "change",
1740
- "reject"
1848
+ "reject",
1849
+ "reconcile"
1741
1850
  ],
1742
1851
  "requiredTargets": [
1743
1852
  "input",
@@ -1757,6 +1866,16 @@
1757
1866
  "itemTemplate"
1758
1867
  ],
1759
1868
  "suggestion": "Add an \"itemTemplate\" target — a \"list\" has no item markup to clone without it."
1869
+ },
1870
+ {
1871
+ "whenPresent": "itemTemplate",
1872
+ "require": [
1873
+ "item",
1874
+ "name",
1875
+ "remove"
1876
+ ],
1877
+ "requireInside": true,
1878
+ "suggestion": "Complete the item template: inside it, it needs an \"item\" root, a \"name\" element for the file name, and a \"remove\" button. Parts declared outside the template never reach the clone, so no file can render."
1760
1879
  }
1761
1880
  ],
1762
1881
  "requiredActions": [],
@@ -1823,7 +1942,8 @@
1823
1942
  ],
1824
1943
  "events": [
1825
1944
  "show",
1826
- "dismiss"
1945
+ "dismiss",
1946
+ "reconcile"
1827
1947
  ],
1828
1948
  "requiredTargets": [
1829
1949
  "region"
@@ -1964,7 +2084,8 @@
1964
2084
  "actions": [],
1965
2085
  "events": [
1966
2086
  "start",
1967
- "end"
2087
+ "end",
2088
+ "reconcile"
1968
2089
  ],
1969
2090
  "requiredTargets": [],
1970
2091
  "conditionalTargets": [],
@@ -2083,7 +2204,8 @@
2083
2204
  "format"
2084
2205
  ],
2085
2206
  "events": [
2086
- "change"
2207
+ "change",
2208
+ "reconcile"
2087
2209
  ],
2088
2210
  "requiredTargets": [],
2089
2211
  "conditionalTargets": [],
@@ -2801,7 +2923,8 @@
2801
2923
  ],
2802
2924
  "events": [
2803
2925
  "add",
2804
- "remove"
2926
+ "remove",
2927
+ "reconcile"
2805
2928
  ],
2806
2929
  "requiredTargets": [
2807
2930
  "list",
@@ -2932,7 +3055,6 @@
2932
3055
  "error"
2933
3056
  ],
2934
3057
  "values": [
2935
- "length",
2936
3058
  "pattern"
2937
3059
  ],
2938
3060
  "valueConstraints": [],
@@ -2940,12 +3062,15 @@
2940
3062
  "actions": [
2941
3063
  "onInput",
2942
3064
  "onKeydown",
2943
- "onPaste"
3065
+ "onPaste",
3066
+ "onPointerDown",
3067
+ "clear"
2944
3068
  ],
2945
3069
  "events": [
2946
3070
  "change",
2947
3071
  "complete",
2948
- "invalid"
3072
+ "invalid",
3073
+ "reconcile"
2949
3074
  ],
2950
3075
  "requiredTargets": [
2951
3076
  "field"
@@ -2953,10 +3078,46 @@
2953
3078
  "conditionalTargets": [],
2954
3079
  "requiredActions": [],
2955
3080
  "actionCompletion": [],
2956
- "a11y": [],
3081
+ "a11y": [
3082
+ {
3083
+ "target": "",
3084
+ "attrs": [
3085
+ "role"
3086
+ ],
3087
+ "values": [
3088
+ "group"
3089
+ ],
3090
+ "suggestion": "Add role=\"group\" to the controller element."
3091
+ },
3092
+ {
3093
+ "target": "",
3094
+ "attrs": [
3095
+ "aria-label",
3096
+ "aria-labelledby"
3097
+ ],
3098
+ "suggestion": "Name the passcode group via aria-label or aria-labelledby."
3099
+ },
3100
+ {
3101
+ "target": "field",
3102
+ "attrs": [
3103
+ "aria-label",
3104
+ "aria-labelledby"
3105
+ ],
3106
+ "suggestion": "Name each field target after its position via aria-label or aria-labelledby."
3107
+ }
3108
+ ],
2957
3109
  "keyboard": [],
2958
3110
  "hosts": [],
2959
- "managedAria": [],
3111
+ "managedAria": [
3112
+ {
3113
+ "target": "field",
3114
+ "attrs": [
3115
+ "aria-invalid",
3116
+ "aria-errormessage"
3117
+ ],
3118
+ "suggestion": "Remove aria-invalid and aria-errormessage from the field target — the controller writes them while it reports discarded input and returns them once the input is accepted."
3119
+ }
3120
+ ],
2960
3121
  "compositions": [],
2961
3122
  "companions": [],
2962
3123
  "targetDeclarations": [],
@@ -4428,7 +4589,8 @@
4428
4589
  "events": [
4429
4590
  "hide",
4430
4591
  "show",
4431
- "timeout"
4592
+ "timeout",
4593
+ "reconcile"
4432
4594
  ],
4433
4595
  "requiredTargets": [],
4434
4596
  "conditionalTargets": [],
@@ -4595,7 +4757,8 @@
4595
4757
  ],
4596
4758
  "events": [
4597
4759
  "start",
4598
- "end"
4760
+ "end",
4761
+ "reconcile"
4599
4762
  ],
4600
4763
  "requiredTargets": [],
4601
4764
  "conditionalTargets": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stimeo-ui",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Headless Stimulus UI framework for Ruby on Rails — behavior-only, accessible components driven by HTML attributes.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -84,7 +84,7 @@
84
84
  }
85
85
  },
86
86
  "devDependencies": {
87
- "@biomejs/biome": "2.5.7",
87
+ "@biomejs/biome": "2.5.10",
88
88
  "@floating-ui/dom": "1.8.0",
89
89
  "@rails/actioncable": "8.1.301",
90
90
  "@types/rails__actioncable": "8.0.3",