@vizejs/ui 0.387.0 → 0.388.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.
- package/dist/alert-BX93FNvj.d.mts +92 -0
- package/dist/alert-DvhiFK_R.mjs +92 -0
- package/dist/alert-dialog-D9tqXQ_Q.mjs +176 -0
- package/dist/alert-dialog.d.mts +2 -0
- package/dist/alert-dialog.mjs +3 -0
- package/dist/alert.d.mts +2 -0
- package/dist/alert.mjs +2 -0
- package/dist/announcer-CW079p2E.mjs +258 -0
- package/dist/announcer-DGr2Iz0i.d.mts +6829 -0
- package/dist/announcer.d.mts +2 -0
- package/dist/announcer.mjs +2 -0
- package/dist/aspect-ratio-DDqVT6Hg.d.mts +62 -0
- package/dist/aspect-ratio-_HLW6_5i.mjs +63 -0
- package/dist/aspect-ratio.d.mts +2 -0
- package/dist/aspect-ratio.mjs +2 -0
- package/dist/avatar-6fQfQ-1x.mjs +195 -0
- package/dist/avatar.d.mts +2 -0
- package/dist/avatar.mjs +2 -0
- package/dist/badge-BTOyu4i6.mjs +53 -0
- package/dist/badge.d.mts +2 -0
- package/dist/badge.mjs +2 -0
- package/dist/banner-CYiSiZJW.mjs +288 -0
- package/dist/banner.d.mts +2 -0
- package/dist/banner.mjs +2 -0
- package/dist/block-ui-Bd2m1m3K.mjs +111 -0
- package/dist/block-ui.d.mts +2 -0
- package/dist/block-ui.mjs +2 -0
- package/dist/blockquote-eTqp3b_r.mjs +65 -0
- package/dist/blockquote.d.mts +2 -0
- package/dist/blockquote.mjs +2 -0
- package/dist/breadcrumb-BvuPBfkj.mjs +212 -0
- package/dist/breadcrumb-Cdyh20z-.d.mts +202 -0
- package/dist/breadcrumb.d.mts +2 -0
- package/dist/breadcrumb.mjs +2 -0
- package/dist/{button-DYg1mIIq.d.mts → button-Dye0M41O.d.mts} +3 -3
- package/dist/{button-DT8AKlds.mjs → button-VVxUavbS.mjs} +6 -6
- package/dist/button-group-C_mR0Jfw.d.mts +137 -0
- package/dist/button-group-DyQbTCnY.mjs +418 -0
- package/dist/button-group.d.mts +2 -0
- package/dist/button-group.mjs +2 -0
- package/dist/button.d.mts +1 -1
- package/dist/button.mjs +2 -2
- package/dist/callout-DAu-98Ti.mjs +277 -0
- package/dist/callout.d.mts +2 -0
- package/dist/callout.mjs +2 -0
- package/dist/card-D94n04s5.mjs +66 -0
- package/dist/card.d.mts +2 -0
- package/dist/card.mjs +2 -0
- package/dist/catalog.d.mts +2112 -302
- package/dist/catalog.mjs +3831 -433
- package/dist/{checkbox-BgIvwjyC.mjs → checkbox-bM5y7vH8.mjs} +8 -8
- package/dist/checkbox.d.mts +1 -1
- package/dist/checkbox.mjs +2 -2
- package/dist/cluster-BWF028Xt.d.mts +133 -0
- package/dist/cluster-BydJTp9X.mjs +149 -0
- package/dist/cluster.d.mts +2 -0
- package/dist/cluster.mjs +2 -0
- package/dist/code-D93YXaeJ.mjs +66 -0
- package/dist/code.d.mts +2 -0
- package/dist/code.mjs +2 -0
- package/dist/collapsible-Cra5y_if.mjs +269 -0
- package/dist/collapsible.d.mts +2 -0
- package/dist/collapsible.mjs +2 -0
- package/dist/{collection-B_dFZOHO.d.mts → collection-BaPf8lgw.d.mts} +3 -3
- package/dist/{collection-eHN150dT.mjs → collection-Cncgrq4U.mjs} +5 -5
- package/dist/collection.d.mts +1 -1
- package/dist/collection.mjs +1 -1
- package/dist/command-CAH0yrMT.d.mts +105 -0
- package/dist/command.d.mts +2 -0
- package/dist/command.mjs +123 -0
- package/dist/{composite-navigation-Skx3LZsv.mjs → composite-navigation-D6WKS_BY.mjs} +4 -4
- package/dist/{composite-navigation-QINW9GLy.d.mts → composite-navigation-i7ocwmio.d.mts} +4 -4
- package/dist/composite-navigation.d.mts +1 -1
- package/dist/composite-navigation.mjs +1 -1
- package/dist/container-5lSCSbeX.mjs +113 -0
- package/dist/container-CYSiwCA-.d.mts +99 -0
- package/dist/container.d.mts +2 -0
- package/dist/container.mjs +2 -0
- package/dist/context-7SpwFHtK.d.mts +25 -0
- package/dist/context.d.mts +1 -24
- package/dist/context.mjs +1 -1
- package/dist/{controllable-state-BtoxKahh.d.mts → controllable-state-CZZF9Pw5.d.mts} +1 -1
- package/dist/controllable-state.d.mts +1 -1
- package/dist/controllable-state.mjs +1 -1
- package/dist/copy-button-BH2em7nG.mjs +212 -0
- package/dist/copy-button.d.mts +2 -0
- package/dist/copy-button.mjs +2 -0
- package/dist/{id-BV9AJ3cm.d.mts → deterministic-id-DYQJ7KzM.d.mts} +2 -35
- package/dist/{id-mziSyAse.mjs → deterministic-id-yMq4HfmS.mjs} +3 -46
- package/dist/dialog-trigger-ppGKikEP.mjs +717 -0
- package/dist/dialog.d.mts +2 -0
- package/dist/dialog.mjs +2 -0
- package/dist/{dismissable-layer-4icKahVs.d.mts → dismissable-layer-CTWSFZwj.d.mts} +2 -2
- package/dist/{dismissable-layer-CwG1gtdz.mjs → dismissable-layer-CpS07KUV.mjs} +3 -3
- package/dist/dismissable-layer.d.mts +1 -1
- package/dist/dismissable-layer.mjs +1 -1
- package/dist/drag-and-drop-BjYgWGcG.mjs +918 -0
- package/dist/drag-and-drop-CagE25Kt.d.mts +47 -0
- package/dist/drag-and-drop-controller-types-DoTSR_aM.d.mts +304 -0
- package/dist/drag-and-drop.d.mts +3 -0
- package/dist/drag-and-drop.mjs +2 -0
- package/dist/empty-state-DtyOxCA4.mjs +73 -0
- package/dist/empty-state.d.mts +2 -0
- package/dist/empty-state.mjs +2 -0
- package/dist/error-summary-6Xis_769.d.mts +65 -0
- package/dist/error-summary-DMe4IlM9.mjs +209 -0
- package/dist/error-summary-types-5ePaC9O3.d.mts +74 -0
- package/dist/error-summary.d.mts +3 -0
- package/dist/error-summary.mjs +2 -0
- package/dist/field-CBs2-Z9B.mjs +254 -0
- package/dist/field-WWPaJT1x.d.mts +235 -0
- package/dist/field-wiring-9Fy-G1rf.d.mts +14 -0
- package/dist/field-wiring-runtime-fQ3GoLuG.mjs +64 -0
- package/dist/field-wiring-types-Bfyis5hO.d.mts +73 -0
- package/dist/field-wiring.d.mts +3 -0
- package/dist/field-wiring.mjs +2 -0
- package/dist/field.d.mts +2 -0
- package/dist/field.mjs +2 -0
- package/dist/{focus-CAWi_I-0.mjs → focus-XxVWOwbs.mjs} +3 -3
- package/dist/{focus-K6dOifoZ.d.mts → focus-eObxGOtP.d.mts} +2 -2
- package/dist/{focus-guards-Bt0C-0qS.d.mts → focus-guards-BZa7vm6O.d.mts} +2 -2
- package/dist/{focus-guards-DhMPQAT8.mjs → focus-guards-DSxiemx7.mjs} +4 -4
- package/dist/focus-guards.d.mts +1 -1
- package/dist/focus-guards.mjs +1 -1
- package/dist/{focus-scope-CavhKWx0.d.mts → focus-scope-CsnioDR4.d.mts} +3 -3
- package/dist/{focus-scope-dom-DBwNEWxG.mjs → focus-scope-dom-L_EC5GsX.mjs} +2 -2
- package/dist/{focus-scope-D9U1aj67.mjs → focus-scope-mEg8UoeE.mjs} +5 -5
- package/dist/focus-scope.d.mts +1 -1
- package/dist/focus-scope.mjs +1 -1
- package/dist/focus.d.mts +1 -1
- package/dist/focus.mjs +1 -1
- package/dist/form-1V2V30Sv.d.mts +20 -0
- package/dist/form-runtime-CcMDY0Iq.mjs +166 -0
- package/dist/form-types-DXwZRLcs.d.mts +183 -0
- package/dist/form.d.mts +3 -0
- package/dist/form.mjs +2 -0
- package/dist/fullscreen-button-NTbC4R0W.mjs +276 -0
- package/dist/fullscreen-button.d.mts +2 -0
- package/dist/fullscreen-button.mjs +2 -0
- package/dist/grid-BSM9h2dL.d.mts +154 -0
- package/dist/grid-DeC4Wn7Y.mjs +157 -0
- package/dist/grid.d.mts +2 -0
- package/dist/grid.mjs +2 -0
- package/dist/heading-DToVOKV3.mjs +86 -0
- package/dist/heading.d.mts +2 -0
- package/dist/heading.mjs +2 -0
- package/dist/history-BDgNOjcV.mjs +304 -0
- package/dist/history-BkcOSOWb.d.mts +157 -0
- package/dist/history.d.mts +2 -0
- package/dist/history.mjs +2 -0
- package/dist/{hover-BXwwbSaO.d.mts → hover-ZiPRiZkb.d.mts} +2 -2
- package/dist/hover.d.mts +1 -1
- package/dist/hover.mjs +1 -1
- package/dist/icon-DhTTndMu.mjs +233 -0
- package/dist/icon-button-BuXquME1.mjs +188 -0
- package/dist/icon-button.d.mts +2 -0
- package/dist/icon-button.mjs +2 -0
- package/dist/icon.d.mts +2 -0
- package/dist/icon.mjs +2 -0
- package/dist/id-BYG8aXPF.mjs +47 -0
- package/dist/id-Ba8FHjAo.d.mts +34 -0
- package/dist/id.d.mts +2 -1
- package/dist/id.mjs +3 -2
- package/dist/index.d.mts +74 -24
- package/dist/index.mjs +113 -21
- package/dist/{inert-outside-tuHRmaqJ.d.mts → inert-outside-B6KdwAHY.d.mts} +2 -2
- package/dist/{inert-outside-CyqtoKQ4.mjs → inert-outside-DOufBTyy.mjs} +4 -4
- package/dist/inert-outside.d.mts +1 -1
- package/dist/inert-outside.mjs +1 -1
- package/dist/input-Blyx59CR.mjs +256 -0
- package/dist/input-C0fgeRnS.d.mts +159 -0
- package/dist/input.d.mts +2 -0
- package/dist/input.mjs +2 -0
- package/dist/{interaction-modality-DOZK0BpZ.mjs → interaction-modality-BHnjtU4S.mjs} +3 -3
- package/dist/{interaction-modality-jgHKjPFB.d.mts → interaction-modality-BTiZ7j98.d.mts} +2 -2
- package/dist/interaction-modality.d.mts +1 -1
- package/dist/interaction-modality.mjs +1 -1
- package/dist/kbd-sJdXIdIm.mjs +66 -0
- package/dist/kbd.d.mts +2 -0
- package/dist/kbd.mjs +2 -0
- package/dist/link-DDaCjrI5.mjs +154 -0
- package/dist/link-MbRDN6wJ.d.mts +94 -0
- package/dist/link.d.mts +2 -0
- package/dist/link.mjs +2 -0
- package/dist/list-DjyCLVfG.mjs +66 -0
- package/dist/list.d.mts +2 -0
- package/dist/list.mjs +2 -0
- package/dist/listbox-IaqaoiRn.mjs +549 -0
- package/dist/listbox.d.mts +2 -0
- package/dist/listbox.mjs +2 -0
- package/dist/live-region-DYSpwCTk.mjs +48 -0
- package/dist/live-region-G1iobPK5.d.mts +67 -0
- package/dist/live-region-runtime-DVUch8Lu.mjs +62 -0
- package/dist/live-region.d.mts +2 -0
- package/dist/live-region.mjs +3 -0
- package/dist/locale-DzWqhJZs.mjs +206 -0
- package/dist/locale.d.mts +2 -0
- package/dist/locale.mjs +2 -0
- package/dist/{long-press-cll6z2K9.d.mts → long-press-DyYxp191.d.mts} +3 -3
- package/dist/{long-press-Dsul69gk.mjs → long-press-yJk5zK0j.mjs} +4 -4
- package/dist/long-press.d.mts +1 -1
- package/dist/long-press.mjs +1 -1
- package/dist/measure-4I0YOAXD.d.mts +97 -0
- package/dist/measure-runtime-C4qYJp3_.mjs +170 -0
- package/dist/measure.d.mts +2 -0
- package/dist/measure.mjs +2 -0
- package/dist/media-pdf.d.mts +1 -1
- package/dist/media-pdf.mjs +1 -1
- package/dist/media-source.d.mts +1 -1
- package/dist/media-source.mjs +1 -1
- package/dist/media.d.mts +1 -1
- package/dist/media.mjs +1 -1
- package/dist/meter-B3m17_8g.d.mts +174 -0
- package/dist/meter-BwOXVWH8.mjs +243 -0
- package/dist/meter.d.mts +2 -0
- package/dist/meter.mjs +2 -0
- package/dist/motion-OdERKfZR.mjs +174 -0
- package/dist/motion-iUSBdWaI.d.mts +98 -0
- package/dist/motion.d.mts +2 -0
- package/dist/motion.mjs +2 -0
- package/dist/{move-BOmXDYbh.d.mts → move-BJGaV7Y9.d.mts} +2 -2
- package/dist/move-internal-BM_7g70h.mjs +172 -0
- package/dist/move.d.mts +1 -1
- package/dist/move.mjs +216 -1
- package/dist/native-select-H9qvaqQH.mjs +309 -0
- package/dist/native-select.d.mts +2 -0
- package/dist/native-select.mjs +2 -0
- package/dist/pagination-Bs4SBSE4.mjs +791 -0
- package/dist/pagination.d.mts +2 -0
- package/dist/pagination.mjs +2 -0
- package/dist/{pdf-source-zu1LkCeE.mjs → pdf-source-B5JSDKkQ.mjs} +1 -1
- package/dist/{pdf-source-BYFK2Pks.d.mts → pdf-source-adS6ZSmR.d.mts} +1 -1
- package/dist/pointer-grace-CAFcO4om.d.mts +57 -0
- package/dist/pointer-grace-DI0G3oRJ.mjs +162 -0
- package/dist/pointer-grace.d.mts +2 -0
- package/dist/pointer-grace.mjs +2 -0
- package/dist/popover-DeENBKXE.mjs +714 -0
- package/dist/popover.d.mts +2 -0
- package/dist/popover.mjs +2 -0
- package/dist/portal-DeHaLxGL.mjs +114 -0
- package/dist/portal-DhWXejr1.d.mts +71 -0
- package/dist/portal.d.mts +2 -0
- package/dist/portal.mjs +2 -0
- package/dist/positioner-BYJVA3Uy.d.mts +477 -0
- package/dist/positioner-BYmQk86M.mjs +38 -0
- package/dist/positioner-DaPo2YxM.mjs +708 -0
- package/dist/positioner.d.mts +2 -0
- package/dist/positioner.mjs +3 -0
- package/dist/presence-Bhv1qtvn.d.mts +57 -0
- package/dist/presence-CTG1EV3w.mjs +62 -0
- package/dist/presence-runtime-CYwCafSh.mjs +105 -0
- package/dist/presence-types-CRB4HbML.d.mts +45 -0
- package/dist/presence.d.mts +3 -0
- package/dist/presence.mjs +3 -0
- package/dist/{press-N_mE3Mgx.mjs → press-BjLm6bKg.mjs} +6 -6
- package/dist/press-R0_juZq2.d.mts +14 -0
- package/dist/{press-event-Cd2OPpmw.mjs → press-event-xlWYF9py.mjs} +1 -1
- package/dist/{press-types-CNqStzJf.d.mts → press-types-DfTNpqby.d.mts} +1 -1
- package/dist/press.d.mts +2 -13
- package/dist/press.mjs +1 -1
- package/dist/{primitive-C8jW7DLd.d.mts → primitive-BE2mdUcw.d.mts} +2 -2
- package/dist/{primitive-BX31dogp.mjs → primitive-beb2EEOc.mjs} +5 -5
- package/dist/primitive.d.mts +1 -1
- package/dist/primitive.mjs +2 -2
- package/dist/print-button-FqD5HqTV.mjs +206 -0
- package/dist/print-button.d.mts +2 -0
- package/dist/print-button.mjs +2 -0
- package/dist/progress--vbV2wTx.mjs +145 -0
- package/dist/progress-C4PlKwWq.d.mts +128 -0
- package/dist/progress-bar-BqS94auR.mjs +301 -0
- package/dist/progress-bar.d.mts +2 -0
- package/dist/progress-bar.mjs +2 -0
- package/dist/progress.d.mts +2 -0
- package/dist/progress.mjs +2 -0
- package/dist/radio-group-DbTmWcxl.mjs +317 -0
- package/dist/radio-group.d.mts +2 -0
- package/dist/radio-group.mjs +2 -0
- package/dist/rating-BjKLGPP6.mjs +569 -0
- package/dist/rating-souDdL9t.d.mts +273 -0
- package/dist/rating.d.mts +2 -0
- package/dist/rating.mjs +2 -0
- package/dist/scroll-area-BRSwoi9w.mjs +338 -0
- package/dist/scroll-area.d.mts +2 -0
- package/dist/scroll-area.mjs +2 -0
- package/dist/{scroll-lock-Ckbmm0-J.mjs → scroll-lock-BcmK0baN.mjs} +4 -4
- package/dist/{scroll-lock-BgVtX4wT.d.mts → scroll-lock-OfSQnfi0.d.mts} +2 -2
- package/dist/scroll-lock.d.mts +1 -1
- package/dist/scroll-lock.mjs +1 -1
- package/dist/search-field-70Kr2616.mjs +319 -0
- package/dist/search-field-Biw9vApG.d.mts +158 -0
- package/dist/search-field.d.mts +2 -0
- package/dist/search-field.mjs +2 -0
- package/dist/separator-CnNDqbdR.d.mts +59 -0
- package/dist/separator-DDj3tEAz.mjs +66 -0
- package/dist/separator.d.mts +2 -0
- package/dist/separator.mjs +2 -0
- package/dist/share-button-DfvUDFC-.mjs +243 -0
- package/dist/share-button.d.mts +2 -0
- package/dist/share-button.mjs +2 -0
- package/dist/shortcut-CvA_o0_F.mjs +631 -0
- package/dist/shortcut-DAZJ9LEd.d.mts +231 -0
- package/dist/shortcut.d.mts +2 -0
- package/dist/shortcut.mjs +2 -0
- package/dist/skeleton-BYXXcwTH.mjs +101 -0
- package/dist/skeleton-CQW-Tsnt.d.mts +99 -0
- package/dist/skeleton.d.mts +2 -0
- package/dist/skeleton.mjs +2 -0
- package/dist/skip-link-BUp9HXXt.mjs +164 -0
- package/dist/skip-link-DHDrtnP2.d.mts +98 -0
- package/dist/skip-link.d.mts +2 -0
- package/dist/skip-link.mjs +2 -0
- package/dist/slider-BiZSZLDp.mjs +475 -0
- package/dist/slider-CYBbxeNy.d.mts +246 -0
- package/dist/slider.d.mts +2 -0
- package/dist/slider.mjs +2 -0
- package/dist/sortable-BntjgYra.mjs +499 -0
- package/dist/sortable-DQl92bwo.d.mts +206 -0
- package/dist/sortable.d.mts +2 -0
- package/dist/sortable.mjs +2 -0
- package/dist/spacer-Bc0dInvi.mjs +117 -0
- package/dist/spacer-DFstG4G-.d.mts +105 -0
- package/dist/spacer.d.mts +2 -0
- package/dist/spacer.mjs +2 -0
- package/dist/{spatial-navigation-CHj9mDZH.d.mts → spatial-navigation-BPVJGSiJ.d.mts} +3 -3
- package/dist/{spatial-navigation-D6-UDavU.mjs → spatial-navigation-DwcUYMyc.mjs} +2 -2
- package/dist/spatial-navigation.d.mts +1 -1
- package/dist/spatial-navigation.mjs +1 -1
- package/dist/spinner-JnRs8fp-.d.mts +155 -0
- package/dist/spinner-bizL-oOg.mjs +200 -0
- package/dist/spinner.d.mts +2 -0
- package/dist/spinner.mjs +2 -0
- package/dist/stack-C7DOIxo-.mjs +137 -0
- package/dist/stack-CPtBckZB.d.mts +127 -0
- package/dist/stack.d.mts +2 -0
- package/dist/stack.mjs +2 -0
- package/dist/status-light-BGWgQRRf.mjs +125 -0
- package/dist/status-light.d.mts +2 -0
- package/dist/status-light.mjs +2 -0
- package/dist/stepper-CwX6BZaN.mjs +912 -0
- package/dist/stepper.d.mts +2 -0
- package/dist/stepper.mjs +2 -0
- package/dist/style.css +1 -1
- package/dist/surface-C2fnxL3g.mjs +102 -0
- package/dist/surface.d.mts +2 -0
- package/dist/surface.mjs +2 -0
- package/dist/switch-Ck5YmfXb.mjs +197 -0
- package/dist/switch.d.mts +2 -0
- package/dist/switch.mjs +2 -0
- package/dist/table-BxU7htxc.mjs +349 -0
- package/dist/table-Ce3yWwlH.d.mts +415 -0
- package/dist/table.d.mts +2 -0
- package/dist/table.mjs +2 -0
- package/dist/tabs-DSXIomI_.mjs +595 -0
- package/dist/tabs.d.mts +2 -0
- package/dist/tabs.mjs +2 -0
- package/dist/text-BVeNKPiv.mjs +76 -0
- package/dist/text.d.mts +2 -0
- package/dist/text.mjs +2 -0
- package/dist/textarea-4eIDNcvv.d.mts +175 -0
- package/dist/textarea-BZimEPBR.mjs +279 -0
- package/dist/textarea.d.mts +2 -0
- package/dist/textarea.mjs +2 -0
- package/dist/theme-C8Crmb8V.mjs +139 -0
- package/dist/theme-CNK06Pja.d.mts +38 -0
- package/dist/theme-constants-DAwnxG-P.mjs +29 -0
- package/dist/theme-preset-atelier.css +1 -0
- package/dist/theme-preset-headless.css +1 -0
- package/dist/theme-preset-high-contrast.css +1 -0
- package/dist/theme-preset-midnight.css +1 -0
- package/dist/theme-preset-paper.css +1 -0
- package/dist/theme-preset-play.css +1 -0
- package/dist/theme-preset-signal.css +1 -0
- package/dist/theme-scope.d.mts +25 -0
- package/dist/theme-scope.mjs +89 -0
- package/dist/theme-types-CkIa4Sa3.d.mts +71 -0
- package/dist/theme.css +1 -0
- package/dist/theme.d.mts +3 -0
- package/dist/theme.mjs +3 -0
- package/dist/toggle-CBTXzwze.mjs +141 -0
- package/dist/toggle-group-DO7eGEs3.d.mts +147 -0
- package/dist/toggle-group-DybU9N7k.mjs +523 -0
- package/dist/toggle-group.d.mts +2 -0
- package/dist/toggle-group.mjs +2 -0
- package/dist/toggle.d.mts +2 -0
- package/dist/toggle.mjs +2 -0
- package/dist/toolbar-CIU1bor0.d.mts +259 -0
- package/dist/toolbar-CXE8YCX-.mjs +425 -0
- package/dist/toolbar.d.mts +2 -0
- package/dist/toolbar.mjs +2 -0
- package/dist/tooltip-Cgii5xMx.mjs +485 -0
- package/dist/tooltip.d.mts +2 -0
- package/dist/tooltip.mjs +2 -0
- package/dist/transition-BmgFyzA6.mjs +168 -0
- package/dist/transition-BtIWNEFU.d.mts +82 -0
- package/dist/transition.d.mts +2 -0
- package/dist/transition.mjs +2 -0
- package/dist/{typeahead-B7KDxE_u.mjs → typeahead-DZSBI5m5.mjs} +2 -2
- package/dist/{typeahead-BbgUB2Bj.d.mts → typeahead-Dl6w5PAN.d.mts} +3 -3
- package/dist/typeahead.d.mts +1 -1
- package/dist/typeahead.mjs +1 -1
- package/dist/virtualizer-BlxKjT3W.mjs +793 -0
- package/dist/virtualizer-D9qfT4wS.d.mts +349 -0
- package/dist/virtualizer.d.mts +2 -0
- package/dist/virtualizer.mjs +2 -0
- package/dist/{visually-hidden-BOqfqBFt.d.mts → visually-hidden-CUr9BX0K.d.mts} +1 -1
- package/dist/{visually-hidden-BwDOx5yf.mjs → visually-hidden-SDjRJYRK.mjs} +5 -5
- package/dist/visually-hidden.d.mts +1 -1
- package/dist/visually-hidden.mjs +2 -2
- package/package.json +426 -7
- package/dist/checkbox-DP3_ko7D.d.mts +0 -61
- package/dist/move-BVvMHzxr.mjs +0 -386
|
@@ -0,0 +1,793 @@
|
|
|
1
|
+
import { t as createSizeObserver } from "./measure-runtime-C4qYJp3_.mjs";
|
|
2
|
+
import { getCurrentScope, onScopeDispose, shallowReadonly, shallowRef, toValue, watch } from "vue";
|
|
3
|
+
//#region src/families/interaction/virtualizer/virtualizer-measure-cache.ts
|
|
4
|
+
/**
|
|
5
|
+
* Lane-aware measurement cache for the virtualizer.
|
|
6
|
+
*
|
|
7
|
+
* Items are assigned round-robin to lanes; each lane keeps a lazily built
|
|
8
|
+
* prefix-offset chain so estimated sizes, exact sizes, and dynamic
|
|
9
|
+
* measurements resolve to stable main-axis placements. Mutations truncate
|
|
10
|
+
* only the offsets they invalidate.
|
|
11
|
+
*/
|
|
12
|
+
const invalidOptionDiagnostic$1 = "VIZE_UI_VIRTUALIZER_OPTION";
|
|
13
|
+
function assertSize(size, source) {
|
|
14
|
+
if (typeof size !== "number" || !Number.isFinite(size) || size < 0) throw new TypeError(`${invalidOptionDiagnostic$1}: ${source} must resolve to a finite non-negative number`);
|
|
15
|
+
return size;
|
|
16
|
+
}
|
|
17
|
+
/** Create one measurement cache bound to live layout config. */
|
|
18
|
+
function createMeasureCache(config) {
|
|
19
|
+
/** `measured[index]` overrides the estimated base size once an item is measured. */
|
|
20
|
+
let measured = /* @__PURE__ */ new Map();
|
|
21
|
+
/** `laneOffsets[lane][position]` is the start offset of that lane slot. */
|
|
22
|
+
let laneOffsets = [];
|
|
23
|
+
const laneOf = (index) => index % config.getLanes();
|
|
24
|
+
const positionOf = (index) => Math.trunc(index / config.getLanes());
|
|
25
|
+
const laneIndexAt = (lane, position) => position * config.getLanes() + lane;
|
|
26
|
+
const laneLength = (lane) => {
|
|
27
|
+
const count = config.getCount();
|
|
28
|
+
if (lane >= count) return 0;
|
|
29
|
+
return Math.trunc((count - 1 - lane) / config.getLanes()) + 1;
|
|
30
|
+
};
|
|
31
|
+
const sizeOf = (index) => {
|
|
32
|
+
const base = () => assertSize(config.resolveBaseSize(index), "the item size");
|
|
33
|
+
if (config.usesExactSizes()) return base();
|
|
34
|
+
return measured.get(index) ?? base();
|
|
35
|
+
};
|
|
36
|
+
/** Build the whole prefix chain for one lane; results are cached until invalidated. */
|
|
37
|
+
const laneChain = (lane) => {
|
|
38
|
+
const length = laneLength(lane);
|
|
39
|
+
const chain = laneOffsets[lane] ??= [];
|
|
40
|
+
if (chain.length === 0) chain.push(config.getPaddingStart());
|
|
41
|
+
while (chain.length < length) {
|
|
42
|
+
const position = chain.length - 1;
|
|
43
|
+
const previous = chain[position] ?? 0;
|
|
44
|
+
chain.push(previous + sizeOf(laneIndexAt(lane, position)) + config.getGap());
|
|
45
|
+
}
|
|
46
|
+
return chain;
|
|
47
|
+
};
|
|
48
|
+
const assertIndex = (index) => {
|
|
49
|
+
const count = config.getCount();
|
|
50
|
+
if (!Number.isInteger(index) || index < 0 || index >= count) throw new RangeError(`${invalidOptionDiagnostic$1}: index ${index} is outside the collection of ${count}`);
|
|
51
|
+
};
|
|
52
|
+
const placement = (index) => {
|
|
53
|
+
assertIndex(index);
|
|
54
|
+
const lane = laneOf(index);
|
|
55
|
+
const start = laneChain(lane)[positionOf(index)] ?? config.getPaddingStart();
|
|
56
|
+
const size = sizeOf(index);
|
|
57
|
+
return Object.freeze({
|
|
58
|
+
start,
|
|
59
|
+
size,
|
|
60
|
+
end: start + size,
|
|
61
|
+
lane,
|
|
62
|
+
isMeasured: !config.usesExactSizes() && measured.has(index)
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const truncateFrom = (index) => {
|
|
66
|
+
for (let lane = 0; lane < laneOffsets.length; lane++) {
|
|
67
|
+
const chain = laneOffsets[lane];
|
|
68
|
+
if (!chain) continue;
|
|
69
|
+
const keep = index <= lane ? 1 : Math.ceil((index - lane) / config.getLanes()) + 1;
|
|
70
|
+
if (chain.length > keep) chain.length = keep;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
placement,
|
|
75
|
+
laneLength,
|
|
76
|
+
laneIndexAt,
|
|
77
|
+
contentEnd() {
|
|
78
|
+
const count = config.getCount();
|
|
79
|
+
if (count === 0) return config.getPaddingStart();
|
|
80
|
+
let end = config.getPaddingStart();
|
|
81
|
+
const laneCount = Math.min(config.getLanes(), count);
|
|
82
|
+
for (let lane = 0; lane < laneCount; lane++) {
|
|
83
|
+
const last = laneIndexAt(lane, laneLength(lane) - 1);
|
|
84
|
+
end = Math.max(end, placement(last).end);
|
|
85
|
+
}
|
|
86
|
+
return end;
|
|
87
|
+
},
|
|
88
|
+
firstVisiblePosition(lane, offset) {
|
|
89
|
+
const length = laneLength(lane);
|
|
90
|
+
if (length === 0) return 0;
|
|
91
|
+
const chain = laneChain(lane);
|
|
92
|
+
let low = 0;
|
|
93
|
+
let high = length - 1;
|
|
94
|
+
while (low < high) {
|
|
95
|
+
const middle = Math.trunc((low + high) / 2);
|
|
96
|
+
if ((chain[middle] ?? 0) + sizeOf(laneIndexAt(lane, middle)) > offset) high = middle;
|
|
97
|
+
else low = middle + 1;
|
|
98
|
+
}
|
|
99
|
+
return low;
|
|
100
|
+
},
|
|
101
|
+
measuredSize: (index) => measured.get(index),
|
|
102
|
+
setMeasured(index, size) {
|
|
103
|
+
assertIndex(index);
|
|
104
|
+
assertSize(size, "the measured size");
|
|
105
|
+
if (config.usesExactSizes()) return 0;
|
|
106
|
+
const previous = sizeOf(index);
|
|
107
|
+
measured.set(index, size);
|
|
108
|
+
const delta = size - previous;
|
|
109
|
+
if (delta !== 0) truncateFrom(index);
|
|
110
|
+
return delta;
|
|
111
|
+
},
|
|
112
|
+
clearMeasuredFrom(fromIndex) {
|
|
113
|
+
for (const index of measured.keys()) if (index >= fromIndex) measured.delete(index);
|
|
114
|
+
truncateFrom(fromIndex);
|
|
115
|
+
},
|
|
116
|
+
invalidateFrom(index) {
|
|
117
|
+
if (index <= 0) laneOffsets = [];
|
|
118
|
+
else truncateFrom(index);
|
|
119
|
+
},
|
|
120
|
+
shiftMeasurements(by) {
|
|
121
|
+
measured = new Map([...measured.entries()].map(([index, size]) => [index + by, size]));
|
|
122
|
+
laneOffsets = [];
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region src/families/interaction/virtualizer/virtualizer-options.ts
|
|
128
|
+
/** Validation and reactive readers for the public virtualizer options. */
|
|
129
|
+
const invalidOptionDiagnostic = "VIZE_UI_VIRTUALIZER_OPTION";
|
|
130
|
+
const disposedDiagnostic = "VIZE_UI_VIRTUALIZER_DISPOSED";
|
|
131
|
+
const setupDiagnostic = "VIZE_UI_VIRTUALIZER_SETUP";
|
|
132
|
+
const orientations = new Set(["horizontal", "vertical"]);
|
|
133
|
+
function fail(message) {
|
|
134
|
+
throw new TypeError(`${invalidOptionDiagnostic}: ${message}`);
|
|
135
|
+
}
|
|
136
|
+
function readNumber(value, name, { integer = false, minimum = 0, fallback }) {
|
|
137
|
+
const resolved = toValue(value) ?? fallback;
|
|
138
|
+
if (typeof resolved !== "number" || !Number.isFinite(resolved) || resolved < minimum || integer && !Number.isInteger(resolved)) fail(`${name} must resolve to a${integer ? "n integer" : " finite number"} of at least ${minimum}`);
|
|
139
|
+
return resolved;
|
|
140
|
+
}
|
|
141
|
+
function readSizeSource(value, name) {
|
|
142
|
+
if (typeof value === "function") return value;
|
|
143
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) return () => value;
|
|
144
|
+
return fail(`${name} must be a non-negative pixel size or a resolver function`);
|
|
145
|
+
}
|
|
146
|
+
function readStaticNumber(value, name, fallback) {
|
|
147
|
+
if (value === void 0) return fallback;
|
|
148
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) fail(`${name} must be a finite non-negative number`);
|
|
149
|
+
return value;
|
|
150
|
+
}
|
|
151
|
+
/** Validate static options once and wrap reactive options in checked readers. */
|
|
152
|
+
function resolveVirtualizerOptions(options) {
|
|
153
|
+
for (const name of ["getItemKey", "onRangeChange"]) {
|
|
154
|
+
const callback = options[name];
|
|
155
|
+
if (callback !== void 0 && typeof callback !== "function") fail(`${name} must be a function`);
|
|
156
|
+
}
|
|
157
|
+
if (options.anchorScroll !== void 0 && typeof options.anchorScroll !== "boolean") fail("anchorScroll must be a boolean");
|
|
158
|
+
if (options.itemSize === void 0 && options.estimateItemSize === void 0) fail("one of itemSize or estimateItemSize is required");
|
|
159
|
+
const usesExactSizes = options.itemSize !== void 0;
|
|
160
|
+
const resolveBaseSize = usesExactSizes ? readSizeSource(options.itemSize, "itemSize") : readSizeSource(options.estimateItemSize, "estimateItemSize");
|
|
161
|
+
const initialRect = Object.freeze({
|
|
162
|
+
width: readStaticNumber(options.initialRect?.width, "initialRect.width", 0),
|
|
163
|
+
height: readStaticNumber(options.initialRect?.height, "initialRect.height", 0)
|
|
164
|
+
});
|
|
165
|
+
const readers = Object.freeze({
|
|
166
|
+
readCount: () => readNumber(options.count, "count", {
|
|
167
|
+
integer: true,
|
|
168
|
+
fallback: 0
|
|
169
|
+
}),
|
|
170
|
+
readOrientation() {
|
|
171
|
+
const resolved = toValue(options.orientation) ?? "vertical";
|
|
172
|
+
if (!orientations.has(resolved)) fail("orientation must resolve to horizontal or vertical");
|
|
173
|
+
return resolved;
|
|
174
|
+
},
|
|
175
|
+
readGap: () => readNumber(options.gap, "gap", { fallback: 0 }),
|
|
176
|
+
readLanes: () => readNumber(options.lanes, "lanes", {
|
|
177
|
+
integer: true,
|
|
178
|
+
minimum: 1,
|
|
179
|
+
fallback: 1
|
|
180
|
+
}),
|
|
181
|
+
readOverscan: () => readNumber(options.overscan, "overscan", {
|
|
182
|
+
integer: true,
|
|
183
|
+
fallback: 2
|
|
184
|
+
}),
|
|
185
|
+
readStickyIndexes() {
|
|
186
|
+
const resolved = toValue(options.stickyIndexes) ?? [];
|
|
187
|
+
if (!Array.isArray(resolved)) fail("stickyIndexes must resolve to an array of indexes");
|
|
188
|
+
return resolved;
|
|
189
|
+
},
|
|
190
|
+
resolveBaseSize,
|
|
191
|
+
usesExactSizes: () => usesExactSizes,
|
|
192
|
+
getItemKey: options.getItemKey ?? ((index) => index),
|
|
193
|
+
paddingStart: readStaticNumber(options.paddingStart, "paddingStart", 0),
|
|
194
|
+
paddingEnd: readStaticNumber(options.paddingEnd, "paddingEnd", 0),
|
|
195
|
+
anchorScroll: options.anchorScroll ?? true,
|
|
196
|
+
initialRect,
|
|
197
|
+
initialScrollOffset: readStaticNumber(options.initialScrollOffset, "initialScrollOffset", 0)
|
|
198
|
+
});
|
|
199
|
+
if (typeof options.count !== "function") readers.readCount();
|
|
200
|
+
if (typeof options.orientation !== "function") readers.readOrientation();
|
|
201
|
+
if (typeof options.gap !== "function") readers.readGap();
|
|
202
|
+
if (typeof options.lanes !== "function") readers.readLanes();
|
|
203
|
+
if (typeof options.overscan !== "function") readers.readOverscan();
|
|
204
|
+
if (typeof options.stickyIndexes !== "function") readers.readStickyIndexes();
|
|
205
|
+
return readers;
|
|
206
|
+
}
|
|
207
|
+
//#endregion
|
|
208
|
+
//#region src/families/interaction/virtualizer/virtualizer-viewport.ts
|
|
209
|
+
/**
|
|
210
|
+
* DOM binding between one virtualizer and its scrollable viewport: scroll
|
|
211
|
+
* offset reads and writes plus SSR-safe viewport size observation.
|
|
212
|
+
*/
|
|
213
|
+
function readOffset(element, orientation) {
|
|
214
|
+
return orientation === "vertical" ? element.scrollTop : element.scrollLeft;
|
|
215
|
+
}
|
|
216
|
+
/** Create one viewport binding. Attachment is a no-op contract during SSR. */
|
|
217
|
+
function createViewportBinding(config) {
|
|
218
|
+
let element = null;
|
|
219
|
+
let releaseScroll = null;
|
|
220
|
+
const sizeObserver = createSizeObserver({ onResize(entries) {
|
|
221
|
+
for (const entry of entries) {
|
|
222
|
+
if (entry.target !== element) continue;
|
|
223
|
+
config.onViewportSize(Object.freeze({
|
|
224
|
+
width: entry.width,
|
|
225
|
+
height: entry.height
|
|
226
|
+
}));
|
|
227
|
+
}
|
|
228
|
+
} });
|
|
229
|
+
const detach = () => {
|
|
230
|
+
releaseScroll?.();
|
|
231
|
+
releaseScroll = null;
|
|
232
|
+
if (element) sizeObserver.unobserve(element);
|
|
233
|
+
element = null;
|
|
234
|
+
};
|
|
235
|
+
return Object.freeze({
|
|
236
|
+
element: () => element,
|
|
237
|
+
attach(next) {
|
|
238
|
+
if (next === element) return;
|
|
239
|
+
detach();
|
|
240
|
+
if (!next) return;
|
|
241
|
+
element = next;
|
|
242
|
+
const onScroll = () => {
|
|
243
|
+
if (element) config.onScrollOffset(readOffset(element, config.getOrientation()));
|
|
244
|
+
};
|
|
245
|
+
next.addEventListener("scroll", onScroll, { passive: true });
|
|
246
|
+
releaseScroll = () => next.removeEventListener("scroll", onScroll);
|
|
247
|
+
sizeObserver.observe(next);
|
|
248
|
+
if (next.clientWidth > 0 || next.clientHeight > 0) config.onViewportSize(Object.freeze({
|
|
249
|
+
width: next.clientWidth,
|
|
250
|
+
height: next.clientHeight
|
|
251
|
+
}));
|
|
252
|
+
config.onScrollOffset(readOffset(next, config.getOrientation()));
|
|
253
|
+
},
|
|
254
|
+
applyOffset(offset) {
|
|
255
|
+
if (!element) return;
|
|
256
|
+
if (typeof element.scrollTo === "function") element.scrollTo(config.getOrientation() === "vertical" ? { top: offset } : { left: offset });
|
|
257
|
+
else if (config.getOrientation() === "vertical") element.scrollTop = offset;
|
|
258
|
+
else element.scrollLeft = offset;
|
|
259
|
+
},
|
|
260
|
+
dispose() {
|
|
261
|
+
detach();
|
|
262
|
+
sizeObserver.dispose();
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
//#endregion
|
|
267
|
+
//#region src/families/interaction/virtualizer/virtualizer-window.ts
|
|
268
|
+
const emptyWindow = Object.freeze({
|
|
269
|
+
items: Object.freeze([]),
|
|
270
|
+
range: null,
|
|
271
|
+
activeStickyIndex: null
|
|
272
|
+
});
|
|
273
|
+
function laneVisibleSpan(input, lane, viewportEnd) {
|
|
274
|
+
const { cache, scrollOffset } = input;
|
|
275
|
+
const length = cache.laneLength(lane);
|
|
276
|
+
if (length === 0) return null;
|
|
277
|
+
const first = cache.firstVisiblePosition(lane, scrollOffset);
|
|
278
|
+
const zeroViewport = viewportEnd === scrollOffset;
|
|
279
|
+
let last = -1;
|
|
280
|
+
for (let position = first; position < length; position++) {
|
|
281
|
+
const placement = cache.placement(cache.laneIndexAt(lane, position));
|
|
282
|
+
if (!(placement.end > scrollOffset && (placement.start < viewportEnd || zeroViewport && placement.start <= scrollOffset))) break;
|
|
283
|
+
last = position;
|
|
284
|
+
}
|
|
285
|
+
return last < first ? null : {
|
|
286
|
+
firstVisible: first,
|
|
287
|
+
lastVisible: last
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
function activeSticky(input, stickySet) {
|
|
291
|
+
let active = null;
|
|
292
|
+
for (const index of stickySet) {
|
|
293
|
+
if (input.cache.placement(index).start > input.scrollOffset) continue;
|
|
294
|
+
if (active === null || index > active) active = index;
|
|
295
|
+
}
|
|
296
|
+
return active;
|
|
297
|
+
}
|
|
298
|
+
function buildItem(input, index, isSticky) {
|
|
299
|
+
const placement = input.cache.placement(index);
|
|
300
|
+
return Object.freeze({
|
|
301
|
+
index,
|
|
302
|
+
key: input.getItemKey(index),
|
|
303
|
+
lane: placement.lane,
|
|
304
|
+
start: placement.start,
|
|
305
|
+
size: placement.size,
|
|
306
|
+
end: placement.end,
|
|
307
|
+
isSticky,
|
|
308
|
+
isMeasured: placement.isMeasured
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
/** Compute the rendered window for the current scroll position. */
|
|
312
|
+
function computeVirtualWindow(input) {
|
|
313
|
+
const { cache, count, lanes, overscan, scrollOffset, viewportSize } = input;
|
|
314
|
+
const stickySet = new Set(input.stickyIndexes.filter((index) => Number.isInteger(index) && index >= 0 && index < count));
|
|
315
|
+
if (count <= 0) return emptyWindow;
|
|
316
|
+
const viewportEnd = scrollOffset + viewportSize;
|
|
317
|
+
const indexes = /* @__PURE__ */ new Set();
|
|
318
|
+
let rangeStart = Number.POSITIVE_INFINITY;
|
|
319
|
+
let rangeEnd = Number.NEGATIVE_INFINITY;
|
|
320
|
+
for (let lane = 0; lane < Math.min(lanes, count); lane++) {
|
|
321
|
+
const span = laneVisibleSpan(input, lane, viewportEnd);
|
|
322
|
+
if (!span) continue;
|
|
323
|
+
rangeStart = Math.min(rangeStart, cache.laneIndexAt(lane, span.firstVisible));
|
|
324
|
+
rangeEnd = Math.max(rangeEnd, cache.laneIndexAt(lane, span.lastVisible));
|
|
325
|
+
const firstRendered = Math.max(0, span.firstVisible - overscan);
|
|
326
|
+
const lastRendered = Math.min(cache.laneLength(lane) - 1, span.lastVisible + overscan);
|
|
327
|
+
for (let position = firstRendered; position <= lastRendered; position++) indexes.add(cache.laneIndexAt(lane, position));
|
|
328
|
+
}
|
|
329
|
+
const pinned = activeSticky(input, stickySet);
|
|
330
|
+
if (pinned !== null) indexes.add(pinned);
|
|
331
|
+
const items = [...indexes].sort((left, right) => left - right).map((index) => buildItem(input, index, index === pinned || stickySet.has(index)));
|
|
332
|
+
return Object.freeze({
|
|
333
|
+
items: Object.freeze(items),
|
|
334
|
+
range: rangeStart <= rangeEnd ? Object.freeze({
|
|
335
|
+
startIndex: rangeStart,
|
|
336
|
+
endIndex: rangeEnd
|
|
337
|
+
}) : null,
|
|
338
|
+
activeStickyIndex: pinned
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
//#endregion
|
|
342
|
+
//#region src/families/interaction/virtualizer/virtualizer-runtime.ts
|
|
343
|
+
const alignments = new Set([
|
|
344
|
+
"auto",
|
|
345
|
+
"center",
|
|
346
|
+
"end",
|
|
347
|
+
"start"
|
|
348
|
+
]);
|
|
349
|
+
function rangesEqual(left, right) {
|
|
350
|
+
if (left === right) return true;
|
|
351
|
+
return left !== null && right !== null && left.startIndex === right.startIndex && left.endIndex === right.endIndex;
|
|
352
|
+
}
|
|
353
|
+
/** Create an SSR-safe windowing controller for one scroll axis. */
|
|
354
|
+
function createVirtualizer(options) {
|
|
355
|
+
const readers = resolveVirtualizerOptions(options);
|
|
356
|
+
let disposed = false;
|
|
357
|
+
const scrollOffset = shallowRef(readers.initialScrollOffset);
|
|
358
|
+
const viewportRect = shallowRef(readers.initialRect);
|
|
359
|
+
const mainAxisSize = () => readers.readOrientation() === "vertical" ? viewportRect.value.height : viewportRect.value.width;
|
|
360
|
+
const viewportSize = shallowRef(mainAxisSize());
|
|
361
|
+
const layoutVersion = shallowRef(0);
|
|
362
|
+
const bump = () => {
|
|
363
|
+
layoutVersion.value++;
|
|
364
|
+
};
|
|
365
|
+
const cache = createMeasureCache({
|
|
366
|
+
getCount: readers.readCount,
|
|
367
|
+
getLanes: readers.readLanes,
|
|
368
|
+
getGap: readers.readGap,
|
|
369
|
+
getPaddingStart: () => readers.paddingStart,
|
|
370
|
+
resolveBaseSize: readers.resolveBaseSize,
|
|
371
|
+
usesExactSizes: readers.usesExactSizes
|
|
372
|
+
});
|
|
373
|
+
const virtualItems = shallowRef(Object.freeze([]));
|
|
374
|
+
const range = shallowRef(null);
|
|
375
|
+
const totalSize = shallowRef(0);
|
|
376
|
+
const activeStickyIndex = shallowRef(null);
|
|
377
|
+
const assertUsable = () => {
|
|
378
|
+
if (disposed) throw new Error(`${disposedDiagnostic}: the controller has been disposed`);
|
|
379
|
+
};
|
|
380
|
+
const assertIndex = (index) => {
|
|
381
|
+
const count = readers.readCount();
|
|
382
|
+
if (!Number.isInteger(index) || index < 0 || index >= count) throw new RangeError(`${invalidOptionDiagnostic}: index ${index} is outside the collection of ${count}`);
|
|
383
|
+
};
|
|
384
|
+
const recompute = () => {
|
|
385
|
+
const window = computeVirtualWindow({
|
|
386
|
+
cache,
|
|
387
|
+
count: readers.readCount(),
|
|
388
|
+
lanes: readers.readLanes(),
|
|
389
|
+
overscan: readers.readOverscan(),
|
|
390
|
+
scrollOffset: scrollOffset.value,
|
|
391
|
+
viewportSize: viewportSize.value,
|
|
392
|
+
stickyIndexes: readers.readStickyIndexes(),
|
|
393
|
+
getItemKey: readers.getItemKey
|
|
394
|
+
});
|
|
395
|
+
virtualItems.value = window.items;
|
|
396
|
+
totalSize.value = cache.contentEnd() + readers.paddingEnd;
|
|
397
|
+
activeStickyIndex.value = window.activeStickyIndex;
|
|
398
|
+
if (!rangesEqual(range.value, window.range)) {
|
|
399
|
+
range.value = window.range;
|
|
400
|
+
options.onRangeChange?.(window.range);
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
const binding = createViewportBinding({
|
|
404
|
+
getOrientation: readers.readOrientation,
|
|
405
|
+
onScrollOffset(offset) {
|
|
406
|
+
if (scrollOffset.value !== offset) scrollOffset.value = offset;
|
|
407
|
+
},
|
|
408
|
+
onViewportSize(rect) {
|
|
409
|
+
viewportRect.value = rect;
|
|
410
|
+
const next = mainAxisSize();
|
|
411
|
+
if (viewportSize.value !== next) viewportSize.value = next;
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
const anchorAdjust = (index, delta) => {
|
|
415
|
+
if (!readers.anchorScroll || delta === 0) return;
|
|
416
|
+
if (cache.placement(index).start >= scrollOffset.value) return;
|
|
417
|
+
const next = Math.max(0, scrollOffset.value + delta);
|
|
418
|
+
scrollOffset.value = next;
|
|
419
|
+
binding.applyOffset(next);
|
|
420
|
+
};
|
|
421
|
+
const applyMeasured = (index, size) => {
|
|
422
|
+
if (readers.usesExactSizes()) return;
|
|
423
|
+
const wasMeasured = cache.measuredSize(index) !== void 0;
|
|
424
|
+
const delta = cache.setMeasured(index, size);
|
|
425
|
+
if (delta === 0 && wasMeasured) return;
|
|
426
|
+
anchorAdjust(index, delta);
|
|
427
|
+
bump();
|
|
428
|
+
};
|
|
429
|
+
const indexElements = /* @__PURE__ */ new Map();
|
|
430
|
+
const elementIndexes = /* @__PURE__ */ new Map();
|
|
431
|
+
function forget(element) {
|
|
432
|
+
measureObserver.unobserve(element);
|
|
433
|
+
const index = elementIndexes.get(element);
|
|
434
|
+
elementIndexes.delete(element);
|
|
435
|
+
if (index !== void 0 && indexElements.get(index) === element) indexElements.delete(index);
|
|
436
|
+
}
|
|
437
|
+
const measureObserver = createSizeObserver({ onResize(entries) {
|
|
438
|
+
for (const entry of entries) {
|
|
439
|
+
const index = elementIndexes.get(entry.target);
|
|
440
|
+
if (index === void 0) continue;
|
|
441
|
+
if (!entry.target.isConnected) {
|
|
442
|
+
forget(entry.target);
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
applyMeasured(index, readers.readOrientation() === "vertical" ? entry.height : entry.width);
|
|
446
|
+
}
|
|
447
|
+
} });
|
|
448
|
+
const scrollToOffset = (offset) => {
|
|
449
|
+
assertUsable();
|
|
450
|
+
if (typeof offset !== "number" || !Number.isFinite(offset)) throw new TypeError(`${invalidOptionDiagnostic}: offset must be a finite number`);
|
|
451
|
+
const limit = Math.max(0, cache.contentEnd() + readers.paddingEnd - viewportSize.value);
|
|
452
|
+
const clamped = Math.min(Math.max(0, offset), limit);
|
|
453
|
+
if (scrollOffset.value !== clamped) scrollOffset.value = clamped;
|
|
454
|
+
binding.applyOffset(clamped);
|
|
455
|
+
};
|
|
456
|
+
const stopStructureWatch = watch(() => [
|
|
457
|
+
readers.readCount(),
|
|
458
|
+
readers.readLanes(),
|
|
459
|
+
readers.readGap(),
|
|
460
|
+
readers.readOrientation()
|
|
461
|
+
], (next, previous) => {
|
|
462
|
+
if (next[0] !== previous[0] || next[1] !== previous[1] || next[2] !== previous[2]) cache.invalidateFrom(0);
|
|
463
|
+
if (next[3] !== previous[3]) viewportSize.value = mainAxisSize();
|
|
464
|
+
recompute();
|
|
465
|
+
}, { flush: "sync" });
|
|
466
|
+
const stopWindowWatch = watch(() => [
|
|
467
|
+
scrollOffset.value,
|
|
468
|
+
viewportSize.value,
|
|
469
|
+
layoutVersion.value,
|
|
470
|
+
readers.readOverscan(),
|
|
471
|
+
readers.readStickyIndexes()
|
|
472
|
+
], recompute, { flush: "sync" });
|
|
473
|
+
recompute();
|
|
474
|
+
return Object.freeze({
|
|
475
|
+
virtualItems: shallowReadonly(virtualItems),
|
|
476
|
+
range: shallowReadonly(range),
|
|
477
|
+
totalSize: shallowReadonly(totalSize),
|
|
478
|
+
scrollOffset: shallowReadonly(scrollOffset),
|
|
479
|
+
viewportSize: shallowReadonly(viewportSize),
|
|
480
|
+
activeStickyIndex: shallowReadonly(activeStickyIndex),
|
|
481
|
+
setViewport(element) {
|
|
482
|
+
assertUsable();
|
|
483
|
+
if (element !== null && element.nodeType !== 1) throw new TypeError(`${invalidOptionDiagnostic}: the viewport must be an element`);
|
|
484
|
+
binding.attach(element);
|
|
485
|
+
},
|
|
486
|
+
measureElement(element, index) {
|
|
487
|
+
assertUsable();
|
|
488
|
+
if (element === null) {
|
|
489
|
+
const existing = indexElements.get(index);
|
|
490
|
+
if (existing) forget(existing);
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
if (element.nodeType !== 1) throw new TypeError(`${invalidOptionDiagnostic}: measured targets must be elements`);
|
|
494
|
+
assertIndex(index);
|
|
495
|
+
const previous = indexElements.get(index);
|
|
496
|
+
if (previous && previous !== element) forget(previous);
|
|
497
|
+
const previousIndex = elementIndexes.get(element);
|
|
498
|
+
if (previousIndex !== void 0 && previousIndex !== index) indexElements.delete(previousIndex);
|
|
499
|
+
indexElements.set(index, element);
|
|
500
|
+
elementIndexes.set(element, index);
|
|
501
|
+
measureObserver.observe(element);
|
|
502
|
+
const rect = typeof element.getBoundingClientRect === "function" ? element.getBoundingClientRect() : null;
|
|
503
|
+
const extent = rect === null ? 0 : readers.readOrientation() === "vertical" ? rect.height : rect.width;
|
|
504
|
+
if (extent > 0) applyMeasured(index, extent);
|
|
505
|
+
},
|
|
506
|
+
resizeItem(index, size) {
|
|
507
|
+
assertUsable();
|
|
508
|
+
assertIndex(index);
|
|
509
|
+
applyMeasured(index, size);
|
|
510
|
+
},
|
|
511
|
+
invalidateMeasurements(fromIndex = 0) {
|
|
512
|
+
assertUsable();
|
|
513
|
+
if (!Number.isInteger(fromIndex) || fromIndex < 0) throw new TypeError(`${invalidOptionDiagnostic}: fromIndex must be a non-negative integer`);
|
|
514
|
+
cache.clearMeasuredFrom(fromIndex);
|
|
515
|
+
bump();
|
|
516
|
+
},
|
|
517
|
+
notifyPrepended(prepended) {
|
|
518
|
+
assertUsable();
|
|
519
|
+
if (!Number.isInteger(prepended) || prepended <= 0) throw new TypeError(`${invalidOptionDiagnostic}: notifyPrepended requires a positive integer`);
|
|
520
|
+
cache.shiftMeasurements(prepended);
|
|
521
|
+
const shiftedIndexElements = [...indexElements.entries()];
|
|
522
|
+
indexElements.clear();
|
|
523
|
+
for (const [index, element] of shiftedIndexElements) {
|
|
524
|
+
indexElements.set(index + prepended, element);
|
|
525
|
+
elementIndexes.set(element, index + prepended);
|
|
526
|
+
}
|
|
527
|
+
if (readers.anchorScroll) {
|
|
528
|
+
let delta = 0;
|
|
529
|
+
const gap = readers.readGap();
|
|
530
|
+
const lanes = readers.readLanes();
|
|
531
|
+
for (let index = 0; index < prepended; index++) delta += readers.resolveBaseSize(index) + gap;
|
|
532
|
+
bump();
|
|
533
|
+
scrollToOffset(scrollOffset.value + delta / lanes);
|
|
534
|
+
} else bump();
|
|
535
|
+
},
|
|
536
|
+
scrollToOffset,
|
|
537
|
+
scrollToIndex(index, alignment = "auto") {
|
|
538
|
+
assertUsable();
|
|
539
|
+
assertIndex(index);
|
|
540
|
+
if (!alignments.has(alignment)) throw new TypeError(`${invalidOptionDiagnostic}: unknown alignment ${String(alignment)}`);
|
|
541
|
+
const placement = cache.placement(index);
|
|
542
|
+
const viewport = viewportSize.value;
|
|
543
|
+
let resolved = alignment;
|
|
544
|
+
if (resolved === "auto") if (placement.start < scrollOffset.value) resolved = "start";
|
|
545
|
+
else if (placement.end > scrollOffset.value + viewport) resolved = "end";
|
|
546
|
+
else return;
|
|
547
|
+
if (resolved === "start") scrollToOffset(placement.start);
|
|
548
|
+
else if (resolved === "end") scrollToOffset(placement.end - viewport);
|
|
549
|
+
else scrollToOffset(placement.start - (viewport - placement.size) / 2);
|
|
550
|
+
},
|
|
551
|
+
createScrollSnapshot() {
|
|
552
|
+
assertUsable();
|
|
553
|
+
const anchorIndex = range.value?.startIndex ?? null;
|
|
554
|
+
return Object.freeze({
|
|
555
|
+
offset: scrollOffset.value,
|
|
556
|
+
anchorIndex,
|
|
557
|
+
anchorGap: anchorIndex === null ? 0 : scrollOffset.value - cache.placement(anchorIndex).start
|
|
558
|
+
});
|
|
559
|
+
},
|
|
560
|
+
restoreScroll(snapshot) {
|
|
561
|
+
assertUsable();
|
|
562
|
+
const { anchorIndex } = snapshot;
|
|
563
|
+
if (anchorIndex !== null && Number.isInteger(anchorIndex) && anchorIndex >= 0 && anchorIndex < readers.readCount() && Number.isFinite(snapshot.anchorGap)) {
|
|
564
|
+
scrollToOffset(cache.placement(anchorIndex).start + snapshot.anchorGap);
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
scrollToOffset(snapshot.offset);
|
|
568
|
+
},
|
|
569
|
+
dispose() {
|
|
570
|
+
if (disposed) return;
|
|
571
|
+
disposed = true;
|
|
572
|
+
stopStructureWatch();
|
|
573
|
+
stopWindowWatch();
|
|
574
|
+
binding.dispose();
|
|
575
|
+
measureObserver.dispose();
|
|
576
|
+
indexElements.clear();
|
|
577
|
+
elementIndexes.clear();
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
/** Create a virtualizer disposed with the current Vue effect scope. */
|
|
582
|
+
function useVirtualizer(options) {
|
|
583
|
+
if (!getCurrentScope()) throw new Error(`${setupDiagnostic}: use inside component setup or an active effect scope`);
|
|
584
|
+
const controller = createVirtualizer(options);
|
|
585
|
+
onScopeDispose(controller.dispose);
|
|
586
|
+
return controller;
|
|
587
|
+
}
|
|
588
|
+
//#endregion
|
|
589
|
+
//#region src/families/interaction/virtualizer/virtualizer-grid.ts
|
|
590
|
+
/** Two-axis grid virtualization composed from one row and one column virtualizer. */
|
|
591
|
+
function axisOptions(options, axis) {
|
|
592
|
+
return {
|
|
593
|
+
count: axis.count,
|
|
594
|
+
orientation: axis.orientation,
|
|
595
|
+
...axis.size === void 0 ? {} : { itemSize: axis.size },
|
|
596
|
+
...axis.estimate === void 0 ? {} : { estimateItemSize: axis.estimate },
|
|
597
|
+
...axis.gap === void 0 ? {} : { gap: axis.gap },
|
|
598
|
+
...options.overscan === void 0 ? {} : { overscan: options.overscan },
|
|
599
|
+
...options.initialRect === void 0 ? {} : { initialRect: options.initialRect },
|
|
600
|
+
...axis.getKey === void 0 ? {} : { getItemKey: axis.getKey }
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
/** Create an SSR-safe two-axis grid virtualizer over one viewport. */
|
|
604
|
+
function createGridVirtualizer(options) {
|
|
605
|
+
const rows = createVirtualizer(axisOptions(options, {
|
|
606
|
+
count: options.rowCount,
|
|
607
|
+
orientation: "vertical",
|
|
608
|
+
size: options.rowSize,
|
|
609
|
+
estimate: options.estimateRowSize,
|
|
610
|
+
gap: options.rowGap,
|
|
611
|
+
getKey: options.getRowKey
|
|
612
|
+
}));
|
|
613
|
+
const columns = createVirtualizer(axisOptions(options, {
|
|
614
|
+
count: options.columnCount,
|
|
615
|
+
orientation: "horizontal",
|
|
616
|
+
size: options.columnSize,
|
|
617
|
+
estimate: options.estimateColumnSize,
|
|
618
|
+
gap: options.columnGap,
|
|
619
|
+
getKey: options.getColumnKey
|
|
620
|
+
}));
|
|
621
|
+
const virtualCells = shallowRef(Object.freeze([]));
|
|
622
|
+
const stopCellWatch = watch(() => [rows.virtualItems.value, columns.virtualItems.value], ([rowItems, columnItems]) => {
|
|
623
|
+
const cells = [];
|
|
624
|
+
for (const row of rowItems) for (const column of columnItems) cells.push(Object.freeze({
|
|
625
|
+
rowIndex: row.index,
|
|
626
|
+
columnIndex: column.index,
|
|
627
|
+
key: `${String(row.key)}:${String(column.key)}`,
|
|
628
|
+
top: row.start,
|
|
629
|
+
left: column.start,
|
|
630
|
+
width: column.size,
|
|
631
|
+
height: row.size
|
|
632
|
+
}));
|
|
633
|
+
virtualCells.value = Object.freeze(cells);
|
|
634
|
+
}, {
|
|
635
|
+
flush: "sync",
|
|
636
|
+
immediate: true
|
|
637
|
+
});
|
|
638
|
+
return Object.freeze({
|
|
639
|
+
rows,
|
|
640
|
+
columns,
|
|
641
|
+
virtualCells: shallowReadonly(virtualCells),
|
|
642
|
+
setViewport(element) {
|
|
643
|
+
rows.setViewport(element);
|
|
644
|
+
columns.setViewport(element);
|
|
645
|
+
},
|
|
646
|
+
scrollToCell(rowIndex, columnIndex, alignment = "auto") {
|
|
647
|
+
rows.scrollToIndex(rowIndex, alignment);
|
|
648
|
+
columns.scrollToIndex(columnIndex, alignment);
|
|
649
|
+
},
|
|
650
|
+
dispose() {
|
|
651
|
+
stopCellWatch();
|
|
652
|
+
rows.dispose();
|
|
653
|
+
columns.dispose();
|
|
654
|
+
}
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
/** Create a grid virtualizer disposed with the current Vue effect scope. */
|
|
658
|
+
function useGridVirtualizer(options) {
|
|
659
|
+
if (!getCurrentScope()) throw new Error(`${setupDiagnostic}: use inside component setup or an active effect scope`);
|
|
660
|
+
const controller = createGridVirtualizer(options);
|
|
661
|
+
onScopeDispose(controller.dispose);
|
|
662
|
+
return controller;
|
|
663
|
+
}
|
|
664
|
+
//#endregion
|
|
665
|
+
//#region src/families/interaction/virtualizer/virtualizer-infinite.ts
|
|
666
|
+
/** Bidirectional infinite loading over a virtualizer range, with stale-result cancellation. */
|
|
667
|
+
function readThreshold(value) {
|
|
668
|
+
const resolved = toValue(value) ?? 4;
|
|
669
|
+
if (!Number.isInteger(resolved) || resolved < 0) throw new TypeError(`${invalidOptionDiagnostic}: threshold must resolve to a non-negative integer`);
|
|
670
|
+
return resolved;
|
|
671
|
+
}
|
|
672
|
+
/** Create an SSR-safe bidirectional infinite loading controller. */
|
|
673
|
+
function createInfiniteLoader(options) {
|
|
674
|
+
for (const name of [
|
|
675
|
+
"onLoadBackward",
|
|
676
|
+
"onLoadForward",
|
|
677
|
+
"onLoadError"
|
|
678
|
+
]) if (options[name] !== void 0 && typeof options[name] !== "function") throw new TypeError(`${invalidOptionDiagnostic}: ${name} must be a function`);
|
|
679
|
+
if (typeof options.threshold !== "function") readThreshold(options.threshold);
|
|
680
|
+
const states = {
|
|
681
|
+
backward: {
|
|
682
|
+
status: shallowRef("idle"),
|
|
683
|
+
token: 0,
|
|
684
|
+
aborter: null
|
|
685
|
+
},
|
|
686
|
+
forward: {
|
|
687
|
+
status: shallowRef("idle"),
|
|
688
|
+
token: 0,
|
|
689
|
+
aborter: null
|
|
690
|
+
}
|
|
691
|
+
};
|
|
692
|
+
let disposed = false;
|
|
693
|
+
const assertUsable = () => {
|
|
694
|
+
if (disposed) throw new Error(`${disposedDiagnostic}: the loader has been disposed`);
|
|
695
|
+
};
|
|
696
|
+
const shouldLoad = (direction) => {
|
|
697
|
+
if (toValue(direction === "backward" ? options.canLoadBackward : options.canLoadForward) !== true) return false;
|
|
698
|
+
const count = toValue(options.count);
|
|
699
|
+
const range = toValue(options.range) ?? null;
|
|
700
|
+
const threshold = readThreshold(options.threshold);
|
|
701
|
+
if (range === null) return direction === "forward" && count === 0;
|
|
702
|
+
return direction === "backward" ? range.startIndex <= threshold : range.endIndex >= count - 1 - threshold;
|
|
703
|
+
};
|
|
704
|
+
function settle(state, token) {
|
|
705
|
+
if (disposed || token !== state.token || state.aborter?.signal.aborted) return false;
|
|
706
|
+
state.aborter = null;
|
|
707
|
+
state.status.value = "idle";
|
|
708
|
+
return true;
|
|
709
|
+
}
|
|
710
|
+
function trigger(direction) {
|
|
711
|
+
const state = states[direction];
|
|
712
|
+
const load = direction === "backward" ? options.onLoadBackward : options.onLoadForward;
|
|
713
|
+
if (!load || state.status.value === "loading" || !shouldLoad(direction)) return;
|
|
714
|
+
const token = ++state.token;
|
|
715
|
+
const aborter = new AbortController();
|
|
716
|
+
state.aborter = aborter;
|
|
717
|
+
state.status.value = "loading";
|
|
718
|
+
const context = Object.freeze({
|
|
719
|
+
direction,
|
|
720
|
+
signal: aborter.signal
|
|
721
|
+
});
|
|
722
|
+
let result;
|
|
723
|
+
try {
|
|
724
|
+
result = load(context);
|
|
725
|
+
} catch (error) {
|
|
726
|
+
if (settle(state, token)) {
|
|
727
|
+
if (!options.onLoadError) throw error;
|
|
728
|
+
options.onLoadError(direction, error);
|
|
729
|
+
}
|
|
730
|
+
return;
|
|
731
|
+
}
|
|
732
|
+
Promise.resolve(result).then(() => {
|
|
733
|
+
if (settle(state, token)) check();
|
|
734
|
+
}, (error) => {
|
|
735
|
+
if (!settle(state, token)) return;
|
|
736
|
+
if (options.onLoadError) options.onLoadError(direction, error);
|
|
737
|
+
else throw error;
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
function check() {
|
|
741
|
+
if (disposed) return;
|
|
742
|
+
trigger("backward");
|
|
743
|
+
trigger("forward");
|
|
744
|
+
}
|
|
745
|
+
function cancel(direction) {
|
|
746
|
+
for (const name of ["backward", "forward"]) {
|
|
747
|
+
if (direction !== void 0 && direction !== name) continue;
|
|
748
|
+
const state = states[name];
|
|
749
|
+
state.token++;
|
|
750
|
+
state.aborter?.abort();
|
|
751
|
+
state.aborter = null;
|
|
752
|
+
state.status.value = "idle";
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
const stopWatch = watch(() => {
|
|
756
|
+
const range = toValue(options.range) ?? null;
|
|
757
|
+
return [
|
|
758
|
+
range?.startIndex ?? -1,
|
|
759
|
+
range?.endIndex ?? -1,
|
|
760
|
+
toValue(options.count),
|
|
761
|
+
toValue(options.canLoadBackward) === true,
|
|
762
|
+
toValue(options.canLoadForward) === true
|
|
763
|
+
];
|
|
764
|
+
}, () => check(), { flush: "sync" });
|
|
765
|
+
check();
|
|
766
|
+
return Object.freeze({
|
|
767
|
+
backwardStatus: shallowReadonly(states.backward.status),
|
|
768
|
+
forwardStatus: shallowReadonly(states.forward.status),
|
|
769
|
+
check: () => {
|
|
770
|
+
assertUsable();
|
|
771
|
+
check();
|
|
772
|
+
},
|
|
773
|
+
cancel: (direction) => {
|
|
774
|
+
assertUsable();
|
|
775
|
+
cancel(direction);
|
|
776
|
+
},
|
|
777
|
+
dispose() {
|
|
778
|
+
if (disposed) return;
|
|
779
|
+
cancel();
|
|
780
|
+
disposed = true;
|
|
781
|
+
stopWatch();
|
|
782
|
+
}
|
|
783
|
+
});
|
|
784
|
+
}
|
|
785
|
+
/** Create an infinite loader disposed with the current Vue effect scope. */
|
|
786
|
+
function useInfiniteLoader(options) {
|
|
787
|
+
if (!getCurrentScope()) throw new Error(`${setupDiagnostic}: use inside component setup or an active effect scope`);
|
|
788
|
+
const controller = createInfiniteLoader(options);
|
|
789
|
+
onScopeDispose(controller.dispose);
|
|
790
|
+
return controller;
|
|
791
|
+
}
|
|
792
|
+
//#endregion
|
|
793
|
+
export { createVirtualizer as a, useGridVirtualizer as i, useInfiniteLoader as n, useVirtualizer as o, createGridVirtualizer as r, createInfiniteLoader as t };
|