stimeo-ui 0.5.0 → 0.6.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 (96) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/dist/controllers/aspect_ratio_controller.d.ts +1 -3
  3. package/dist/controllers/aspect_ratio_controller.js +19 -11
  4. package/dist/controllers/aspect_ratio_controller.js.map +1 -1
  5. package/dist/controllers/avatar_controller.d.ts +36 -15
  6. package/dist/controllers/avatar_controller.js +195 -40
  7. package/dist/controllers/avatar_controller.js.map +1 -1
  8. package/dist/controllers/carousel_controller.d.ts +12 -3
  9. package/dist/controllers/carousel_controller.js +85 -9
  10. package/dist/controllers/carousel_controller.js.map +1 -1
  11. package/dist/controllers/checkbox_controller.d.ts +31 -5
  12. package/dist/controllers/checkbox_controller.js +136 -25
  13. package/dist/controllers/checkbox_controller.js.map +1 -1
  14. package/dist/controllers/color_picker_controller.d.ts +7 -1
  15. package/dist/controllers/color_picker_controller.js +35 -9
  16. package/dist/controllers/color_picker_controller.js.map +1 -1
  17. package/dist/controllers/date_range_picker_controller.d.ts +23 -4
  18. package/dist/controllers/date_range_picker_controller.js +157 -30
  19. package/dist/controllers/date_range_picker_controller.js.map +1 -1
  20. package/dist/controllers/file_dropzone_controller.d.ts +7 -1
  21. package/dist/controllers/file_dropzone_controller.js +26 -3
  22. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  23. package/dist/controllers/focus_controller.d.ts +2 -3
  24. package/dist/controllers/focus_controller.js.map +1 -1
  25. package/dist/controllers/hover_card_controller.d.ts +2 -2
  26. package/dist/controllers/hover_card_controller.js.map +1 -1
  27. package/dist/controllers/idle_controller.d.ts +3 -3
  28. package/dist/controllers/idle_controller.js +27 -5
  29. package/dist/controllers/idle_controller.js.map +1 -1
  30. package/dist/controllers/menubar_controller.js +5 -3
  31. package/dist/controllers/menubar_controller.js.map +1 -1
  32. package/dist/controllers/multi_select_controller.d.ts +46 -12
  33. package/dist/controllers/multi_select_controller.js +460 -151
  34. package/dist/controllers/multi_select_controller.js.map +1 -1
  35. package/dist/controllers/number_input_controller.d.ts +24 -6
  36. package/dist/controllers/number_input_controller.js +275 -51
  37. package/dist/controllers/number_input_controller.js.map +1 -1
  38. package/dist/controllers/overflow_menu_controller.js +4 -0
  39. package/dist/controllers/overflow_menu_controller.js.map +1 -1
  40. package/dist/controllers/pagination_controller.js +33 -0
  41. package/dist/controllers/pagination_controller.js.map +1 -1
  42. package/dist/controllers/password_strength_controller.d.ts +3 -3
  43. package/dist/controllers/password_strength_controller.js +20 -2
  44. package/dist/controllers/password_strength_controller.js.map +1 -1
  45. package/dist/controllers/persist_controller.d.ts +4 -4
  46. package/dist/controllers/persist_controller.js +24 -5
  47. package/dist/controllers/persist_controller.js.map +1 -1
  48. package/dist/controllers/popover_controller.d.ts +2 -2
  49. package/dist/controllers/popover_controller.js.map +1 -1
  50. package/dist/controllers/portal_controller.d.ts +1 -2
  51. package/dist/controllers/portal_controller.js.map +1 -1
  52. package/dist/controllers/radio_group_controller.d.ts +41 -15
  53. package/dist/controllers/radio_group_controller.js +540 -56
  54. package/dist/controllers/radio_group_controller.js.map +1 -1
  55. package/dist/controllers/rating_controller.d.ts +36 -31
  56. package/dist/controllers/rating_controller.js +272 -89
  57. package/dist/controllers/rating_controller.js.map +1 -1
  58. package/dist/controllers/resizable_controller.js +33 -0
  59. package/dist/controllers/resizable_controller.js.map +1 -1
  60. package/dist/controllers/roving_controller.d.ts +4 -0
  61. package/dist/controllers/roving_controller.js +60 -5
  62. package/dist/controllers/roving_controller.js.map +1 -1
  63. package/dist/controllers/scroll_area_controller.d.ts +6 -0
  64. package/dist/controllers/scroll_area_controller.js +154 -22
  65. package/dist/controllers/scroll_area_controller.js.map +1 -1
  66. package/dist/controllers/scroll_visibility_controller.js +33 -0
  67. package/dist/controllers/scroll_visibility_controller.js.map +1 -1
  68. package/dist/controllers/tags_input_controller.d.ts +41 -11
  69. package/dist/controllers/tags_input_controller.js +356 -120
  70. package/dist/controllers/tags_input_controller.js.map +1 -1
  71. package/dist/controllers/time_picker_controller.d.ts +42 -13
  72. package/dist/controllers/time_picker_controller.js +296 -107
  73. package/dist/controllers/time_picker_controller.js.map +1 -1
  74. package/dist/controllers/toggle_group_controller.d.ts +39 -13
  75. package/dist/controllers/toggle_group_controller.js +378 -55
  76. package/dist/controllers/toggle_group_controller.js.map +1 -1
  77. package/dist/controllers/toolbar_controller.js +5 -3
  78. package/dist/controllers/toolbar_controller.js.map +1 -1
  79. package/dist/controllers/tooltip_controller.d.ts +2 -2
  80. package/dist/controllers/tooltip_controller.js.map +1 -1
  81. package/dist/controllers/transition_controller.d.ts +2 -3
  82. package/dist/controllers/transition_controller.js.map +1 -1
  83. package/dist/controllers/tree_view_controller.js +5 -3
  84. package/dist/controllers/tree_view_controller.js.map +1 -1
  85. package/dist/index.js +2637 -781
  86. package/dist/index.js.map +1 -1
  87. package/dist/inspector/cli.d.ts +16 -3
  88. package/dist/inspector/cli.js +22 -6
  89. package/dist/inspector/cli.js.map +1 -1
  90. package/dist/inspector/cli_bin.js +22 -6
  91. package/dist/inspector/cli_bin.js.map +1 -1
  92. package/dist/inspector/examples.json +8 -8
  93. package/dist/inspector/manifest.json +169 -37
  94. package/dist/positioning/index.d.ts +2 -2
  95. package/dist/positioning/index.js.map +1 -1
  96. package/package.json +1 -1
@@ -969,6 +969,12 @@ var DIAGNOSTIC_CODES = [
969
969
  ];
970
970
 
971
971
  // src/inspector/check.ts
972
+ function isInside(node, ancestor) {
973
+ for (let current = node.parent; current; current = current.parent) {
974
+ if (current === ancestor) return true;
975
+ }
976
+ return false;
977
+ }
972
978
  function checkSource(source, manifest) {
973
979
  const diagnostics = [];
974
980
  const tree = parseHtml(neutralizeErb(source), erbElements(source));
@@ -1366,13 +1372,16 @@ function checkSource(source, manifest) {
1366
1372
  const present = presence.get(node)?.get(identifier) ?? /* @__PURE__ */ new Set();
1367
1373
  for (const rule of controller.conditionalTargets) {
1368
1374
  if (!present.has(rule.whenPresent)) continue;
1369
- const missing = rule.require.filter((target) => !present.has(target));
1375
+ const nodesOf = (target) => targetNodes.get(node)?.get(identifier)?.get(target) ?? [];
1376
+ const owners = nodesOf(rule.whenPresent);
1377
+ const satisfied = (target) => rule.requireInside ? nodesOf(target).some((el) => owners.some((owner) => isInside(el, owner))) : present.has(target);
1378
+ const missing = rule.require.filter((target) => !satisfied(target));
1370
1379
  if (missing.length === 0) continue;
1371
1380
  report(
1372
1381
  node,
1373
1382
  "missing-conditional-target",
1374
1383
  complete ? "error" : "warning",
1375
- `"${identifier}" has a "${rule.whenPresent}" target, which also requires ${list(missing)}.`,
1384
+ rule.requireInside ? `"${identifier}" requires ${list(missing)} inside its "${rule.whenPresent}".` : `"${identifier}" has a "${rule.whenPresent}" target, which also requires ${list(missing)}.`,
1376
1385
  node,
1377
1386
  complete ? rule.suggestion : UNRESOLVED_TARGET_HINT
1378
1387
  );
@@ -1390,7 +1399,7 @@ function checkSource(source, manifest) {
1390
1399
  if (!hasReadableMarkup(el)) continue;
1391
1400
  if (!contentHolds(node, identifier, el, req.whenContains)) continue;
1392
1401
  if (!elementHolds(el, req.whenElement)) continue;
1393
- checkA11y(report, el, identifier, req, severity);
1402
+ checkA11y(report, el, identifier, req, severity, isDynamicValue);
1394
1403
  }
1395
1404
  }
1396
1405
  }
@@ -1684,6 +1693,7 @@ function valueSatisfiesConstraint(raw, constraint) {
1684
1693
  if (Number.isNaN(value)) return false;
1685
1694
  if (constraint.finite && !Number.isFinite(value)) return false;
1686
1695
  if (constraint.greaterThan !== void 0 && !(value > constraint.greaterThan)) return false;
1696
+ if (constraint.integer && !Number.isInteger(value)) return false;
1687
1697
  return true;
1688
1698
  }
1689
1699
  function decodeNumericValue(raw) {
@@ -1694,6 +1704,7 @@ function describeValueConstraint(constraint) {
1694
1704
  if (constraint.greaterThan !== void 0) {
1695
1705
  parts.push(`greater than ${constraint.greaterThan}`);
1696
1706
  }
1707
+ if (constraint.integer) parts.push("with no fractional part");
1697
1708
  return parts.join(" ");
1698
1709
  }
1699
1710
  var UNRESOLVED_TARGET_HINT = "Part of this scope is rendered by a helper or a non-literal data: hash, so the target may exist at runtime.";
@@ -1701,7 +1712,7 @@ var UNRESOLVED_HOST_HINT = "An enclosing helper's data: option is not a literal
1701
1712
  function hasReadableMarkup(el) {
1702
1713
  return el.origin === "markup";
1703
1714
  }
1704
- function checkA11y(report, el, identifier, req, severity) {
1715
+ function checkA11y(report, el, identifier, req, severity, isDynamicValue) {
1705
1716
  const groups = [
1706
1717
  { attrs: req.attrs, values: req.values },
1707
1718
  ...req.or ?? []
@@ -1721,9 +1732,14 @@ function checkA11y(report, el, identifier, req, severity) {
1721
1732
  }
1722
1733
  const invalid = [];
1723
1734
  let anyPresent = false;
1735
+ let blank;
1724
1736
  for (const [name, allowed] of allowedByAttr) {
1725
1737
  const attr = el.attrs.find((a) => a.name === name);
1726
1738
  if (!attr) continue;
1739
+ if (allowed.anyValue && attr.value.trim() === "" && !isDynamicValue(attr)) {
1740
+ blank ??= attr;
1741
+ continue;
1742
+ }
1727
1743
  anyPresent = true;
1728
1744
  if (!allowed.anyValue && !allowed.values.has(attr.value.trim())) {
1729
1745
  invalid.push({ attr, values: [...allowed.values] });
@@ -1735,8 +1751,8 @@ function checkA11y(report, el, identifier, req, severity) {
1735
1751
  el,
1736
1752
  "missing-aria",
1737
1753
  severity,
1738
- `"${identifier}" ${verb} ${describeAttrs([...allowedByAttr.keys()])} on its ${where}.`,
1739
- el,
1754
+ blank ? `${blank.name} is empty on the ${where} of "${identifier}", which ${verb} a value there.` : `"${identifier}" ${verb} ${describeAttrs([...allowedByAttr.keys()])} on its ${where}.`,
1755
+ blank ?? el,
1740
1756
  req.suggestion
1741
1757
  );
1742
1758
  return;