@threadlabs/looma 0.37.4 → 0.37.6

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 (132) hide show
  1. package/components/shared/active-item-reveal.js +74 -0
  2. package/components/shared/menu-navigation.js +3 -1
  3. package/components/ui-button/ui-button.html +13 -0
  4. package/components/ui-combobox/ui-combobox.js +3 -1
  5. package/components/ui-context-menu/ui-context-menu.js +4 -1
  6. package/components/ui-editor-link-form/ui-editor-link-form.js +3 -1
  7. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +12 -5
  8. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +12 -5
  9. package/components/ui-listbox/ui-listbox.js +3 -1
  10. package/components/ui-menu/ui-menu.js +5 -1
  11. package/components/ui-pagination/ui-pagination.html +74 -0
  12. package/components/ui-pagination/ui-pagination.js +19 -0
  13. package/components/ui-search-shell/ui-search-shell.js +7 -4
  14. package/components/ui-skeleton/ui-skeleton.html +91 -0
  15. package/dist/index.js +20 -19
  16. package/docs/catalog.json +491 -1
  17. package/docs/examples/ui-pagination/examples/01-numbered.behavior.js +11 -0
  18. package/package.json +1 -1
  19. package/styles/ui-button.css +12 -0
  20. package/styles/ui-pagination.css +1 -0
  21. package/styles/ui-skeleton.css +91 -0
  22. package/vanilla/UiButton.d.ts +1 -0
  23. package/vanilla/UiButton.js +31 -31
  24. package/vanilla/UiPagination.d.ts +35 -0
  25. package/vanilla/UiPagination.js +202 -0
  26. package/vanilla/UiSkeleton.d.ts +26 -0
  27. package/vanilla/UiSkeleton.js +42 -0
  28. package/vanilla/index.js +2 -0
  29. package/vue/UiButton.d.ts +6 -0
  30. package/vue/UiButton.vue +34 -0
  31. package/vue/UiPagination.d.ts +115 -0
  32. package/vue/UiPagination.js +2 -0
  33. package/vue/UiPagination.vue +598 -0
  34. package/vue/UiSkeleton.d.ts +37 -0
  35. package/vue/UiSkeleton.js +2 -0
  36. package/vue/UiSkeleton.vue +235 -0
  37. package/vue/chunks/UiActionBar.js +1 -1
  38. package/vue/chunks/UiAffordanceScope.js +1 -1
  39. package/vue/chunks/UiAvatar.js +1 -1
  40. package/vue/chunks/UiAvatarGroup.js +1 -1
  41. package/vue/chunks/UiBadge.js +1 -1
  42. package/vue/chunks/UiBreadcrumbItem.js +1 -1
  43. package/vue/chunks/UiBreadcrumbs.js +1 -1
  44. package/vue/chunks/UiButton.js +30 -2
  45. package/vue/chunks/UiCallout.js +1 -1
  46. package/vue/chunks/UiCard.js +1 -1
  47. package/vue/chunks/UiCheckbox.js +1 -1
  48. package/vue/chunks/UiCluster.js +1 -1
  49. package/vue/chunks/UiColorPicker.js +1 -1
  50. package/vue/chunks/UiCombobox.js +1 -1
  51. package/vue/chunks/UiContainer.js +1 -1
  52. package/vue/chunks/UiContextMenu.js +1 -1
  53. package/vue/chunks/UiCover.js +1 -1
  54. package/vue/chunks/UiCurveEditor.js +1 -1
  55. package/vue/chunks/UiCycleButton.js +1 -1
  56. package/vue/chunks/UiDescriptionItem.js +1 -1
  57. package/vue/chunks/UiDescriptionList.js +1 -1
  58. package/vue/chunks/UiDialog.js +1 -1
  59. package/vue/chunks/UiDisclosure.js +1 -1
  60. package/vue/chunks/UiEditable.js +1 -1
  61. package/vue/chunks/UiEditorBlockActions.js +1 -1
  62. package/vue/chunks/UiEditorChipEditor.js +1 -1
  63. package/vue/chunks/UiEditorCodeLanguage.js +1 -1
  64. package/vue/chunks/UiEditorFootnoteEditor.js +1 -1
  65. package/vue/chunks/UiEditorImageToolbar.js +1 -1
  66. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  67. package/vue/chunks/UiEditorLinkCard.js +1 -1
  68. package/vue/chunks/UiEditorLinkForm.js +1 -1
  69. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  70. package/vue/chunks/UiEditorMentionMenuItem.js +1 -1
  71. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  72. package/vue/chunks/UiEditorSlashMenuGroup.js +1 -1
  73. package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
  74. package/vue/chunks/UiEditorSurface.js +1 -1
  75. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  76. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  77. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  78. package/vue/chunks/UiEditorToolbar.js +1 -1
  79. package/vue/chunks/UiFloatingActionButton.js +1 -1
  80. package/vue/chunks/UiFormField.js +1 -1
  81. package/vue/chunks/UiGrid.js +1 -1
  82. package/vue/chunks/UiIcon.js +1 -1
  83. package/vue/chunks/UiIconButton.js +1 -1
  84. package/vue/chunks/UiImage.js +1 -1
  85. package/vue/chunks/UiInput.js +1 -1
  86. package/vue/chunks/UiInputGroup.js +1 -1
  87. package/vue/chunks/UiLightEditor.js +1 -1
  88. package/vue/chunks/UiList.js +1 -1
  89. package/vue/chunks/UiListItem.js +1 -1
  90. package/vue/chunks/UiListbox.js +1 -1
  91. package/vue/chunks/UiMenu.js +1 -1
  92. package/vue/chunks/UiMenuGroup.js +1 -1
  93. package/vue/chunks/UiMenuItem.js +1 -1
  94. package/vue/chunks/UiMeter.js +1 -1
  95. package/vue/chunks/UiNavItem.js +1 -1
  96. package/vue/chunks/UiNumberInput.js +1 -1
  97. package/vue/chunks/UiPageHeader.js +1 -1
  98. package/vue/chunks/UiPagination.js +551 -0
  99. package/vue/chunks/UiPopover.js +1 -1
  100. package/vue/chunks/UiRadio.js +1 -1
  101. package/vue/chunks/UiRadioGroup.js +1 -1
  102. package/vue/chunks/UiReel.js +1 -1
  103. package/vue/chunks/UiScrollArea.js +1 -1
  104. package/vue/chunks/UiSearchResultRow.js +1 -1
  105. package/vue/chunks/UiSearchShell.js +1 -1
  106. package/vue/chunks/UiSection.js +1 -1
  107. package/vue/chunks/UiSelect.js +1 -1
  108. package/vue/chunks/UiSeparator.js +1 -1
  109. package/vue/chunks/UiSidebar.js +1 -1
  110. package/vue/chunks/UiSkeleton.js +151 -0
  111. package/vue/chunks/UiSlider.js +1 -1
  112. package/vue/chunks/UiSpinner.js +1 -1
  113. package/vue/chunks/UiStack.js +1 -1
  114. package/vue/chunks/UiStatusMessage.js +1 -1
  115. package/vue/chunks/UiSwatch.js +1 -1
  116. package/vue/chunks/UiSwitch.js +1 -1
  117. package/vue/chunks/UiSwitcher.js +1 -1
  118. package/vue/chunks/UiTable.js +1 -1
  119. package/vue/chunks/UiTabs.js +1 -1
  120. package/vue/chunks/UiText.js +1 -1
  121. package/vue/chunks/UiTextarea.js +1 -1
  122. package/vue/chunks/UiToast.js +1 -1
  123. package/vue/chunks/UiToastRegion.js +1 -1
  124. package/vue/chunks/UiTooltip.js +1 -1
  125. package/vue/chunks/UiTopBar.js +1 -1
  126. package/vue/chunks/UiTree.js +1 -1
  127. package/vue/chunks/UiTreeItem.js +1 -1
  128. package/vue/chunks/_plugin-vue_export-helper.js +27 -2
  129. package/vue/components.css +93 -0
  130. package/vue/editor/index.js +139 -35
  131. package/vue/index.d.ts +2 -0
  132. package/vue/index.js +3 -1
@@ -3505,6 +3505,7 @@ var A$3 = [
3505
3505
  "data-ui-button-prop-rel",
3506
3506
  "data-ui-button-prop-shape",
3507
3507
  "data-ui-button-prop-size",
3508
+ "data-ui-button-prop-square",
3508
3509
  "data-ui-button-prop-stretch",
3509
3510
  "data-ui-button-prop-target",
3510
3511
  "data-ui-button-prop-tone",
@@ -3538,6 +3539,7 @@ var A$3 = [
3538
3539
  "data-ui-button-prop-rel",
3539
3540
  "data-ui-button-prop-shape",
3540
3541
  "data-ui-button-prop-size",
3542
+ "data-ui-button-prop-square",
3541
3543
  "data-ui-button-prop-stretch",
3542
3544
  "data-ui-button-prop-target",
3543
3545
  "data-ui-button-prop-tone",
@@ -3569,6 +3571,7 @@ var A$3 = [
3569
3571
  "data-ui-button-prop-rel",
3570
3572
  "data-ui-button-prop-shape",
3571
3573
  "data-ui-button-prop-size",
3574
+ "data-ui-button-prop-square",
3572
3575
  "data-ui-button-prop-stretch",
3573
3576
  "data-ui-button-prop-target",
3574
3577
  "data-ui-button-prop-tone",
@@ -3602,6 +3605,7 @@ var A$3 = [
3602
3605
  "data-ui-button-prop-rel",
3603
3606
  "data-ui-button-prop-shape",
3604
3607
  "data-ui-button-prop-size",
3608
+ "data-ui-button-prop-square",
3605
3609
  "data-ui-button-prop-stretch",
3606
3610
  "data-ui-button-prop-target",
3607
3611
  "data-ui-button-prop-tone",
@@ -3719,6 +3723,14 @@ var D$18 = {
3719
3723
  j: 0,
3720
3724
  m: ["p", formatOf(keywordFormat)]
3721
3725
  },
3726
+ "square": {
3727
+ "required": false,
3728
+ "default": false,
3729
+ c: checkBoolean,
3730
+ t: "boolean",
3731
+ j: 0,
3732
+ m: "b"
3733
+ },
3722
3734
  "stretch": {
3723
3735
  "required": false,
3724
3736
  "default": false,
@@ -3802,6 +3814,7 @@ function createUiButton(options = {}, html) {
3802
3814
  null,
3803
3815
  null,
3804
3816
  null,
3817
+ null,
3805
3818
  null
3806
3819
  ];
3807
3820
  let B = acceptProps(void 0, D$18, S$18.n, v, componentProps, [], html);
@@ -3821,11 +3834,12 @@ function createUiButton(options = {}, html) {
3821
3834
  if (j === 9) return awaitInput(B, "rel", true);
3822
3835
  if (j === 10) return awaitInput(B, "shape", true);
3823
3836
  if (j === 11) return awaitInput(B, "size", true);
3824
- if (j === 12) return awaitInput(B, "stretch", true);
3825
- if (j === 13) return awaitInput(B, "target", true);
3826
- if (j === 14) return awaitInput(B, "tone", true);
3827
- if (j === 15) return awaitInput(B, "type", true);
3828
- if (j === 16) return awaitInput(B, "variant", true);
3837
+ if (j === 12) return awaitInput(B, "square", true);
3838
+ if (j === 13) return awaitInput(B, "stretch", true);
3839
+ if (j === 14) return awaitInput(B, "target", true);
3840
+ if (j === 15) return awaitInput(B, "tone", true);
3841
+ if (j === 16) return awaitInput(B, "type", true);
3842
+ if (j === 17) return awaitInput(B, "variant", true);
3829
3843
  return v[j] === void 0 ? UNRESOLVED_INPUT : READY_INPUT;
3830
3844
  };
3831
3845
  const X = {
@@ -3837,7 +3851,7 @@ function createUiButton(options = {}, html) {
3837
3851
  };
3838
3852
  const ke = [];
3839
3853
  const K = [() => readIndex({
3840
- "none": inputRead(v[16], inputStatus(16)),
3854
+ "none": inputRead(v[17], inputStatus(17)),
3841
3855
  "primary": "solid",
3842
3856
  "standard": "solid",
3843
3857
  "quiet": "ghost",
@@ -3851,8 +3865,8 @@ function createUiButton(options = {}, html) {
3851
3865
  ], [
3852
3866
  readIndex({
3853
3867
  "true": "danger",
3854
- "false": inputRead(v[14], inputStatus(14))
3855
- }, textCall("concat", [inputRead(v[16], inputStatus(16)) === "danger"])),
3868
+ "false": inputRead(v[15], inputStatus(15))
3869
+ }, textCall("concat", [inputRead(v[17], inputStatus(17)) === "danger"])),
3856
3870
  "accent",
3857
3871
  "neutral",
3858
3872
  "neutral",
@@ -4048,12 +4062,12 @@ function createUiButton(options = {}, html) {
4048
4062
  return r;
4049
4063
  };
4050
4064
  const p0 = (r, c, d) => {
4051
- if (c & 1073807616) {
4065
+ if (c & 1073873152) {
4052
4066
  const x0 = g(0);
4053
4067
  const s0 = toAttribute(x0, "data-appearance");
4054
4068
  if (s0 !== r.v0) writeAttribute(r.n, "data-appearance", r.v0 = s0);
4055
4069
  }
4056
- if (c & 1073824e3) {
4070
+ if (c & 1073905920) {
4057
4071
  const x1 = g(1);
4058
4072
  if (x1 !== NONCONFORMING) {
4059
4073
  const s1 = toAttribute(x1, "data-tone");
@@ -4070,8 +4084,8 @@ function createUiButton(options = {}, html) {
4070
4084
  if (s2 !== r.v2) writeUrlAttribute(r.n, "href", r.v2 = s2);
4071
4085
  }
4072
4086
  }
4073
- if (c & 8192) {
4074
- const x3 = v[13];
4087
+ if (c & 16384) {
4088
+ const x3 = v[14];
4075
4089
  const s3 = toAttribute(x3, "target");
4076
4090
  if (s3 !== r.v3) writeAttribute(r.n, "target", r.v3 = s3);
4077
4091
  }
@@ -4105,19 +4119,21 @@ function createUiButton(options = {}, html) {
4105
4119
  if (s7 !== r.v7) writeAttribute(r.n, "tabindex", r.v7 = s7);
4106
4120
  }
4107
4121
  }
4108
- if (c & 7364) {
4122
+ if (c & 15556) {
4109
4123
  const s8 = hostState([
4110
4124
  "align",
4111
4125
  "stretch",
4112
4126
  "size",
4113
4127
  "shape",
4128
+ "square",
4114
4129
  "loading",
4115
4130
  "pending"
4116
4131
  ], [
4117
4132
  v[2],
4118
- v[12],
4133
+ v[13],
4119
4134
  v[11],
4120
4135
  v[10],
4136
+ v[12],
4121
4137
  v[6],
4122
4138
  v[7]
4123
4139
  ]);
@@ -4204,20 +4220,20 @@ function createUiButton(options = {}, html) {
4204
4220
  return r;
4205
4221
  };
4206
4222
  const p6 = (r, c, d) => {
4207
- if (c & 1073807616) {
4223
+ if (c & 1073873152) {
4208
4224
  const x0 = g(0);
4209
4225
  const s0 = toAttribute(x0, "data-appearance");
4210
4226
  if (s0 !== r.v0) writeAttribute(r.n, "data-appearance", r.v0 = s0);
4211
4227
  }
4212
- if (c & 1073824e3) {
4228
+ if (c & 1073905920) {
4213
4229
  const x1 = g(1);
4214
4230
  if (x1 !== NONCONFORMING) {
4215
4231
  const s1 = toAttribute(x1, "data-tone");
4216
4232
  if (s1 !== r.v1) writeAttribute(r.n, "data-tone", r.v1 = s1);
4217
4233
  }
4218
4234
  }
4219
- if (c & 1073774592) {
4220
- const x2 = v[15];
4235
+ if (c & 1073807360) {
4236
+ const x2 = v[16];
4221
4237
  const s2 = toAttribute(x2, "type");
4222
4238
  if (s2 !== r.v2) writeAttribute(r.n, "type", r.v2 = s2);
4223
4239
  }
@@ -4241,19 +4257,21 @@ function createUiButton(options = {}, html) {
4241
4257
  const s5 = toAttribute(x5, "aria-busy");
4242
4258
  if (s5 !== r.v5) writeAttribute(r.n, "aria-busy", r.v5 = s5);
4243
4259
  }
4244
- if (c & 7364) {
4260
+ if (c & 15556) {
4245
4261
  const s6 = hostState([
4246
4262
  "align",
4247
4263
  "stretch",
4248
4264
  "size",
4249
4265
  "shape",
4266
+ "square",
4250
4267
  "loading",
4251
4268
  "pending"
4252
4269
  ], [
4253
4270
  v[2],
4254
- v[12],
4271
+ v[13],
4255
4272
  v[11],
4256
4273
  v[10],
4274
+ v[12],
4257
4275
  v[6],
4258
4276
  v[7]
4259
4277
  ]);
@@ -4335,12 +4353,12 @@ function createUiButton(options = {}, html) {
4335
4353
  return r;
4336
4354
  };
4337
4355
  const p12 = (r, c, d) => {
4338
- if (c & 1073807616) {
4356
+ if (c & 1073873152) {
4339
4357
  const x0 = g(0);
4340
4358
  const s0 = toAttribute(x0, "data-appearance");
4341
4359
  if (s0 !== r.v0) writeAttribute(r.n, "data-appearance", r.v0 = s0);
4342
4360
  }
4343
- if (c & 1073824e3) {
4361
+ if (c & 1073905920) {
4344
4362
  const x1 = g(1);
4345
4363
  if (x1 !== NONCONFORMING) {
4346
4364
  const s1 = toAttribute(x1, "data-tone");
@@ -4357,8 +4375,8 @@ function createUiButton(options = {}, html) {
4357
4375
  if (s2 !== r.v2) writeUrlAttribute(r.n, "href", r.v2 = s2);
4358
4376
  }
4359
4377
  }
4360
- if (c & 8192) {
4361
- const x3 = v[13];
4378
+ if (c & 16384) {
4379
+ const x3 = v[14];
4362
4380
  const s3 = toAttribute(x3, "target");
4363
4381
  if (s3 !== r.v3) writeAttribute(r.n, "target", r.v3 = s3);
4364
4382
  }
@@ -4392,19 +4410,21 @@ function createUiButton(options = {}, html) {
4392
4410
  if (s7 !== r.v7) writeAttribute(r.n, "tabindex", r.v7 = s7);
4393
4411
  }
4394
4412
  }
4395
- if (c & 7364) {
4413
+ if (c & 15556) {
4396
4414
  const s8 = hostState([
4397
4415
  "align",
4398
4416
  "stretch",
4399
4417
  "size",
4400
4418
  "shape",
4419
+ "square",
4401
4420
  "loading",
4402
4421
  "pending"
4403
4422
  ], [
4404
4423
  v[2],
4405
- v[12],
4424
+ v[13],
4406
4425
  v[11],
4407
4426
  v[10],
4427
+ v[12],
4408
4428
  v[6],
4409
4429
  v[7]
4410
4430
  ]);
@@ -4474,20 +4494,20 @@ function createUiButton(options = {}, html) {
4474
4494
  return r;
4475
4495
  };
4476
4496
  const p16 = (r, c, d) => {
4477
- if (c & 1073807616) {
4497
+ if (c & 1073873152) {
4478
4498
  const x0 = g(0);
4479
4499
  const s0 = toAttribute(x0, "data-appearance");
4480
4500
  if (s0 !== r.v0) writeAttribute(r.n, "data-appearance", r.v0 = s0);
4481
4501
  }
4482
- if (c & 1073824e3) {
4502
+ if (c & 1073905920) {
4483
4503
  const x1 = g(1);
4484
4504
  if (x1 !== NONCONFORMING) {
4485
4505
  const s1 = toAttribute(x1, "data-tone");
4486
4506
  if (s1 !== r.v1) writeAttribute(r.n, "data-tone", r.v1 = s1);
4487
4507
  }
4488
4508
  }
4489
- if (c & 1073774592) {
4490
- const x2 = v[15];
4509
+ if (c & 1073807360) {
4510
+ const x2 = v[16];
4491
4511
  const s2 = toAttribute(x2, "type");
4492
4512
  if (s2 !== r.v2) writeAttribute(r.n, "type", r.v2 = s2);
4493
4513
  }
@@ -4511,19 +4531,21 @@ function createUiButton(options = {}, html) {
4511
4531
  const s5 = toAttribute(x5, "aria-busy");
4512
4532
  if (s5 !== r.v5) writeAttribute(r.n, "aria-busy", r.v5 = s5);
4513
4533
  }
4514
- if (c & 7364) {
4534
+ if (c & 15556) {
4515
4535
  const s6 = hostState([
4516
4536
  "align",
4517
4537
  "stretch",
4518
4538
  "size",
4519
4539
  "shape",
4540
+ "square",
4520
4541
  "loading",
4521
4542
  "pending"
4522
4543
  ], [
4523
4544
  v[2],
4524
- v[12],
4545
+ v[13],
4525
4546
  v[11],
4526
4547
  v[10],
4548
+ v[12],
4527
4549
  v[6],
4528
4550
  v[7]
4529
4551
  ]);
@@ -4581,7 +4603,7 @@ function createUiButton(options = {}, html) {
4581
4603
  R = M[a](element, d);
4582
4604
  return;
4583
4605
  }
4584
- if (c & 1073807624) {
4606
+ if (c & 1073873160) {
4585
4607
  const t = g(0) === "card" && v[3] === "a" ? 0 : g(0) === "card" ? 1 : v[3] === "a" ? 2 : 3;
4586
4608
  if (t !== a) {
4587
4609
  dispose(R);
@@ -4614,6 +4636,7 @@ defineComponent$1("ui-button", createUiButton, [
4614
4636
  "rel",
4615
4637
  "shape",
4616
4638
  "size",
4639
+ "square",
4617
4640
  "stretch",
4618
4641
  "target",
4619
4642
  "tone",
@@ -8147,6 +8170,84 @@ defineComponent$1("ui-list", createUiList, [
8147
8170
  "markers"
8148
8171
  ]);
8149
8172
  //#endregion
8173
+ //#region components/shared/active-item-reveal.js
8174
+ var pending = /* @__PURE__ */ new WeakMap();
8175
+ function cancelActiveItemReveal(root) {
8176
+ const current = pending.get(root);
8177
+ if (!current) return;
8178
+ root.ownerDocument.defaultView.cancelAnimationFrame(current.frame);
8179
+ pending.delete(root);
8180
+ }
8181
+ function scrollport(root, item, view) {
8182
+ for (let parent = item.parentElement; parent && root.contains(parent); parent = parent.parentElement) {
8183
+ if (parent.scrollHeight > parent.clientHeight && /^(auto|scroll|hidden)$/.test(view.getComputedStyle(parent).overflowY)) return parent;
8184
+ if (parent === root) break;
8185
+ }
8186
+ return null;
8187
+ }
8188
+ function destination(port, item, view) {
8189
+ const bounds = port.getBoundingClientRect();
8190
+ const scale = port.offsetHeight ? bounds.height / port.offsetHeight : 1;
8191
+ if (!scale) return port.scrollTop;
8192
+ const style = view.getComputedStyle(port);
8193
+ const fade = style.maskImage !== "none" ? parseFloat(style.getPropertyValue("--_ui-scroll-fade-size")) || 0 : 0;
8194
+ const top = bounds.top + (port.clientTop + Math.max(parseFloat(style.scrollPaddingTop) || 0, fade)) * scale;
8195
+ const bottom = bounds.top + (port.clientTop + port.clientHeight - Math.max(parseFloat(style.scrollPaddingBottom) || 0, fade)) * scale;
8196
+ const row = item.getBoundingClientRect();
8197
+ const delta = row.top < top ? row.top - top : row.bottom > bottom ? Math.min(row.bottom - bottom, row.top - top) : 0;
8198
+ return Math.max(0, Math.min(port.scrollHeight - port.clientHeight, port.scrollTop + delta / scale));
8199
+ }
8200
+ /** Resolve after rendering so HTML and framework adapters reveal the same active row. */
8201
+ function revealActiveItem(root, resolve) {
8202
+ const view = root.ownerDocument.defaultView;
8203
+ const item = typeof resolve === "function" ? resolve() : resolve;
8204
+ if (item && pending.get(root)?.item === item) return;
8205
+ cancelActiveItemReveal(root);
8206
+ const current = {
8207
+ item,
8208
+ frame: 0
8209
+ };
8210
+ pending.set(root, current);
8211
+ current.frame = view.requestAnimationFrame(() => {
8212
+ current.item = typeof resolve === "function" ? resolve() : resolve;
8213
+ if (!root.isConnected || !current.item?.getClientRects().length || !root.contains(current.item)) {
8214
+ pending.delete(root);
8215
+ return;
8216
+ }
8217
+ const port = scrollport(root, current.item, view);
8218
+ if (!port) {
8219
+ pending.delete(root);
8220
+ return;
8221
+ }
8222
+ const from = port.scrollTop;
8223
+ const to = destination(port, current.item, view);
8224
+ const token = view.getComputedStyle(root).getPropertyValue("--ui-motion-fast").trim();
8225
+ const duration = view.matchMedia("(prefers-reduced-motion: reduce)").matches ? 0 : (parseFloat(token) || 0) * (token.endsWith("ms") ? 1 : 1e3);
8226
+ if (Math.abs(to - from) < 1 || duration <= 0) {
8227
+ port.scrollTop = to;
8228
+ pending.delete(root);
8229
+ return;
8230
+ }
8231
+ const started = view.performance.now();
8232
+ const animate = (now) => {
8233
+ if (!root.isConnected || !current.item.getClientRects().length) {
8234
+ pending.delete(root);
8235
+ return;
8236
+ }
8237
+ const progress = Math.min(1, (now - started) / duration);
8238
+ port.scrollTop = from + (to - from) * (1 - (1 - progress) ** 3);
8239
+ if (progress < 1) current.frame = view.requestAnimationFrame(animate);
8240
+ else pending.delete(root);
8241
+ };
8242
+ current.frame = view.requestAnimationFrame(animate);
8243
+ });
8244
+ }
8245
+ function focusAndRevealItem(root, item) {
8246
+ if (!item) return;
8247
+ item.focus({ preventScroll: true });
8248
+ revealActiveItem(root, item);
8249
+ }
8250
+ //#endregion
8150
8251
  //#region components/shared/menu-navigation.js
8151
8252
  var itemSelector = "[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]";
8152
8253
  var searches = /* @__PURE__ */ new WeakMap();
@@ -8200,7 +8301,7 @@ function navigateMenu(event, menu) {
8200
8301
  }
8201
8302
  }
8202
8303
  event.preventDefault();
8203
- if (next >= 0) items[next].focus();
8304
+ if (next >= 0) focusAndRevealItem(menu, items[next]);
8204
8305
  return true;
8205
8306
  }
8206
8307
  //#endregion
@@ -8236,11 +8337,12 @@ function connect$7(host) {
8236
8337
  reason: "action",
8237
8338
  trigger
8238
8339
  });
8239
- requestAnimationFrame(() => items()[0]?.focus());
8340
+ requestAnimationFrame(() => focusAndRevealItem(element, items()[0]));
8240
8341
  }
8241
8342
  };
8242
8343
  const close = (reason, trigger) => {
8243
8344
  if (!host.state.internalOpen) return;
8345
+ cancelActiveItemReveal(element);
8244
8346
  host.state.internalOpen = false;
8245
8347
  host.dispatch("close", {
8246
8348
  open: false,
@@ -8336,6 +8438,7 @@ function connect$7(host) {
8336
8438
  reason: "action",
8337
8439
  trigger
8338
8440
  });
8441
+ cancelActiveItemReveal(element);
8339
8442
  host.state.internalOpen = false;
8340
8443
  };
8341
8444
  const onClick = (event) => select(menuItemFrom(event.target), triggerFor(event));
@@ -8365,6 +8468,7 @@ function connect$7(host) {
8365
8468
  const stop = host.effect(apply);
8366
8469
  apply();
8367
8470
  return () => {
8471
+ cancelActiveItemReveal(element);
8368
8472
  stop();
8369
8473
  ids.stop();
8370
8474
  element.removeEventListener("click", onClick);
package/vue/index.d.ts CHANGED
@@ -59,6 +59,7 @@ export { default as Meter } from "./UiMeter.js";
59
59
  export { default as NavItem } from "./UiNavItem.js";
60
60
  export { default as NumberInput } from "./UiNumberInput.js";
61
61
  export { default as PageHeader } from "./UiPageHeader.js";
62
+ export { default as Pagination } from "./UiPagination.js";
62
63
  export { default as Popover } from "./UiPopover.js";
63
64
  export { default as Radio } from "./UiRadio.js";
64
65
  export { default as RadioGroup } from "./UiRadioGroup.js";
@@ -70,6 +71,7 @@ export { default as Section } from "./UiSection.js";
70
71
  export { default as Select } from "./UiSelect.js";
71
72
  export { default as Separator } from "./UiSeparator.js";
72
73
  export { default as Sidebar } from "./UiSidebar.js";
74
+ export { default as Skeleton } from "./UiSkeleton.js";
73
75
  export { default as Slider } from "./UiSlider.js";
74
76
  export { default as Spinner } from "./UiSpinner.js";
75
77
  export { default as Stack } from "./UiStack.js";
package/vue/index.js CHANGED
@@ -69,6 +69,7 @@ import { t as UiMenuGroup_default } from "./chunks/UiMenuGroup.js";
69
69
  import { t as UiMeter_default } from "./chunks/UiMeter.js";
70
70
  import { t as UiNavItem_default } from "./chunks/UiNavItem.js";
71
71
  import { t as UiPageHeader_default } from "./chunks/UiPageHeader.js";
72
+ import { t as UiPagination_default } from "./chunks/UiPagination.js";
72
73
  import { t as UiRadio_default } from "./chunks/UiRadio.js";
73
74
  import { t as UiReel_default } from "./chunks/UiReel.js";
74
75
  import { t as UiSearchShell_default } from "./chunks/UiSearchShell.js";
@@ -76,6 +77,7 @@ import { t as UiSection_default } from "./chunks/UiSection.js";
76
77
  import { t as UiSelect_default } from "./chunks/UiSelect.js";
77
78
  import { t as UiSeparator_default } from "./chunks/UiSeparator.js";
78
79
  import { t as UiSidebar_default } from "./chunks/UiSidebar.js";
80
+ import { t as UiSkeleton_default } from "./chunks/UiSkeleton.js";
79
81
  import { t as UiSlider_default } from "./chunks/UiSlider.js";
80
82
  import { t as UiStatusMessage_default } from "./chunks/UiStatusMessage.js";
81
83
  import { t as UiSwitch_default } from "./chunks/UiSwitch.js";
@@ -88,4 +90,4 @@ import { t as UiTopBar_default } from "./chunks/UiTopBar.js";
88
90
  import { t as UiTree_default } from "./chunks/UiTree.js";
89
91
  import { t as UiTreeItem_default } from "./chunks/UiTreeItem.js";
90
92
  import { trackInputModality } from "@threadlabs/looma/components/shared/input-modality.js";
91
- export { UiActionBar_default as ActionBar, UiAffordanceScope_default as AffordanceScope, UiAvatar_default as Avatar, UiAvatarGroup_default as AvatarGroup, UiBadge_default as Badge, UiBreadcrumbItem_default as BreadcrumbItem, UiBreadcrumbs_default as Breadcrumbs, UiButton_default as Button, UiCallout_default as Callout, UiCard_default as Card, UiCheckbox_default as Checkbox, UiCluster_default as Cluster, UiColorPicker_default as ColorPicker, UiCombobox_default as Combobox, UiContainer_default as Container, UiContextMenu_default as ContextMenu, UiCover_default as Cover, UiCurveEditor_default as CurveEditor, UiCycleButton_default as CycleButton, UiDescriptionItem_default as DescriptionItem, UiDescriptionList_default as DescriptionList, UiDialog_default as Dialog, UiDisclosure_default as Disclosure, UiEditable_default as Editable, UiEditorBlockActions_default as EditorBlockActions, UiEditorChipEditor_default as EditorChipEditor, UiEditorCodeLanguage_default as EditorCodeLanguage, UiEditorFootnoteEditor_default as EditorFootnoteEditor, UiEditorImageToolbar_default as EditorImageToolbar, UiEditorInsertTableGrid_default as EditorInsertTableGrid, UiEditorLinkCard_default as EditorLinkCard, UiEditorLinkForm_default as EditorLinkForm, UiEditorMentionMenu_default as EditorMentionMenu, UiEditorMentionMenuItem_default as EditorMentionMenuItem, UiEditorSlashMenu_default as EditorSlashMenu, UiEditorSlashMenuGroup_default as EditorSlashMenuGroup, UiEditorSlashMenuItem_default as EditorSlashMenuItem, UiEditorSurface_default as EditorSurface, UiEditorTableContextMenu_default as EditorTableContextMenu, UiEditorTableOverlay_default as EditorTableOverlay, UiEditorTableToolbar_default as EditorTableToolbar, UiEditorToolbar_default as EditorToolbar, UiFloatingActionButton_default as FloatingActionButton, UiFormField_default as FormField, UiGrid_default as Grid, UiIcon_default as Icon, UiIconButton_default as IconButton, UiImage_default as Image, UiInput_default as Input, UiInputGroup_default as InputGroup, UiLightEditor_default as LightEditor, UiList_default as List, UiListItem_default as ListItem, UiListbox_default as Listbox, UiMenu_default as Menu, UiMenuGroup_default as MenuGroup, UiMenuItem_default as MenuItem, UiMeter_default as Meter, UiNavItem_default as NavItem, UiNumberInput_default as NumberInput, UiPageHeader_default as PageHeader, UiPopover_default as Popover, UiRadio_default as Radio, UiRadioGroup_default as RadioGroup, UiReel_default as Reel, UiScrollArea_default as ScrollArea, UiSearchResultRow_default as SearchResultRow, UiSearchShell_default as SearchShell, UiSection_default as Section, UiSelect_default as Select, UiSeparator_default as Separator, UiSidebar_default as Sidebar, UiSlider_default as Slider, UiSpinner_default as Spinner, UiStack_default as Stack, UiStatusMessage_default as StatusMessage, UiSwatch_default as Swatch, UiSwitch_default as Switch, UiSwitcher_default as Switcher, UiTable_default as Table, UiTabs_default as Tabs, UiText_default as Text, UiTextarea_default as Textarea, UiToast_default as Toast, UiToastRegion_default as ToastRegion, UiTooltip_default as Tooltip, UiTopBar_default as TopBar, UiTree_default as Tree, UiTreeItem_default as TreeItem, trackInputModality };
93
+ export { UiActionBar_default as ActionBar, UiAffordanceScope_default as AffordanceScope, UiAvatar_default as Avatar, UiAvatarGroup_default as AvatarGroup, UiBadge_default as Badge, UiBreadcrumbItem_default as BreadcrumbItem, UiBreadcrumbs_default as Breadcrumbs, UiButton_default as Button, UiCallout_default as Callout, UiCard_default as Card, UiCheckbox_default as Checkbox, UiCluster_default as Cluster, UiColorPicker_default as ColorPicker, UiCombobox_default as Combobox, UiContainer_default as Container, UiContextMenu_default as ContextMenu, UiCover_default as Cover, UiCurveEditor_default as CurveEditor, UiCycleButton_default as CycleButton, UiDescriptionItem_default as DescriptionItem, UiDescriptionList_default as DescriptionList, UiDialog_default as Dialog, UiDisclosure_default as Disclosure, UiEditable_default as Editable, UiEditorBlockActions_default as EditorBlockActions, UiEditorChipEditor_default as EditorChipEditor, UiEditorCodeLanguage_default as EditorCodeLanguage, UiEditorFootnoteEditor_default as EditorFootnoteEditor, UiEditorImageToolbar_default as EditorImageToolbar, UiEditorInsertTableGrid_default as EditorInsertTableGrid, UiEditorLinkCard_default as EditorLinkCard, UiEditorLinkForm_default as EditorLinkForm, UiEditorMentionMenu_default as EditorMentionMenu, UiEditorMentionMenuItem_default as EditorMentionMenuItem, UiEditorSlashMenu_default as EditorSlashMenu, UiEditorSlashMenuGroup_default as EditorSlashMenuGroup, UiEditorSlashMenuItem_default as EditorSlashMenuItem, UiEditorSurface_default as EditorSurface, UiEditorTableContextMenu_default as EditorTableContextMenu, UiEditorTableOverlay_default as EditorTableOverlay, UiEditorTableToolbar_default as EditorTableToolbar, UiEditorToolbar_default as EditorToolbar, UiFloatingActionButton_default as FloatingActionButton, UiFormField_default as FormField, UiGrid_default as Grid, UiIcon_default as Icon, UiIconButton_default as IconButton, UiImage_default as Image, UiInput_default as Input, UiInputGroup_default as InputGroup, UiLightEditor_default as LightEditor, UiList_default as List, UiListItem_default as ListItem, UiListbox_default as Listbox, UiMenu_default as Menu, UiMenuGroup_default as MenuGroup, UiMenuItem_default as MenuItem, UiMeter_default as Meter, UiNavItem_default as NavItem, UiNumberInput_default as NumberInput, UiPageHeader_default as PageHeader, UiPagination_default as Pagination, UiPopover_default as Popover, UiRadio_default as Radio, UiRadioGroup_default as RadioGroup, UiReel_default as Reel, UiScrollArea_default as ScrollArea, UiSearchResultRow_default as SearchResultRow, UiSearchShell_default as SearchShell, UiSection_default as Section, UiSelect_default as Select, UiSeparator_default as Separator, UiSidebar_default as Sidebar, UiSkeleton_default as Skeleton, UiSlider_default as Slider, UiSpinner_default as Spinner, UiStack_default as Stack, UiStatusMessage_default as StatusMessage, UiSwatch_default as Swatch, UiSwitch_default as Switch, UiSwitcher_default as Switcher, UiTable_default as Table, UiTabs_default as Tabs, UiText_default as Text, UiTextarea_default as Textarea, UiToast_default as Toast, UiToastRegion_default as ToastRegion, UiTooltip_default as Tooltip, UiTopBar_default as TopBar, UiTree_default as Tree, UiTreeItem_default as TreeItem, trackInputModality };