diff --git a/docs/Masa.Blazor.Docs/Examples/components/application/DefaultAppMarkup.razor b/docs/Masa.Blazor.Docs/Examples/components/application/DefaultAppMarkup.razor index 5275d1a1b6..561d7620e3 100644 --- a/docs/Masa.Blazor.Docs/Examples/components/application/DefaultAppMarkup.razor +++ b/docs/Masa.Blazor.Docs/Examples/components/application/DefaultAppMarkup.razor @@ -1,6 +1,6 @@ @attribute [JSCustomElement] - + @code { [Parameter] diff --git a/docs/Masa.Blazor.Docs/Examples/labs/scroll-to-target/ChipGroup.razor b/docs/Masa.Blazor.Docs/Examples/labs/scroll-to-target/ChipGroup.razor new file mode 100644 index 0000000000..03b5647ac0 --- /dev/null +++ b/docs/Masa.Blazor.Docs/Examples/labs/scroll-to-target/ChipGroup.razor @@ -0,0 +1,45 @@ + + + @foreach (var item in _items) + { + + + @item + + + } + +
+
+ @foreach (var item in _items) + { +
+ Content for @item +
+ } +
+
+
+ +@code { + + private List _items = + [ + "chip-1", + "chip-2", + "chip-3" + ]; + +} diff --git a/docs/Masa.Blazor.Docs/Examples/labs/scroll-to-target/Tabs.razor b/docs/Masa.Blazor.Docs/Examples/labs/scroll-to-target/Tabs.razor new file mode 100644 index 0000000000..cd9443e7c2 --- /dev/null +++ b/docs/Masa.Blazor.Docs/Examples/labs/scroll-to-target/Tabs.razor @@ -0,0 +1,46 @@ +
+ + + @foreach (var item in _items) + { + + + @item + + + } + +
+ @foreach (var item in _items) + { +
+ Content for @item +
+ } +
+
+
+ +@code { + + private List _items = + [ + "menu-1", + "menu-2", + "menu-3" + ]; + +} diff --git a/docs/Masa.Blazor.Docs/Pages/Components.razor b/docs/Masa.Blazor.Docs/Pages/Components.razor index 4a5d402024..e87bfea2bc 100644 --- a/docs/Masa.Blazor.Docs/Pages/Components.razor +++ b/docs/Masa.Blazor.Docs/Pages/Components.razor @@ -4,8 +4,8 @@ - +
@if (_frontMatterMeta is not null) { @@ -23,18 +23,14 @@ } - @if (IsApiTab && _apiData.Count == 0) - { - - } - else if (!IsApiTab && _md == null) - { - - } - else - { - - + + + @if (_md == null) + { + + } + else + { @@ -43,16 +39,23 @@ { } - - + } + + + @if (_apiData.Count == 0) + { + + } + else + { - - - } + } + + - +
diff --git a/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTarget-en-US.json b/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTarget-en-US.json new file mode 100644 index 0000000000..9393378110 --- /dev/null +++ b/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTarget-en-US.json @@ -0,0 +1,18 @@ +{ + "props": { + "activeClass": "A css class to be added to the observed target when it is intersecting", + "autoRootMargin": "A boolean which specifies whether the rootMargin should be calculated automatically", + "Offset": "Scroll offset", + "RootMarginBottom": "The bottom margin of the root's bounding box", + "RootMarginLeft": "The left margin of the root's bounding box", + "RootMarginRight": "The right margin of the root's bounding box", + "RootMarginTop": "The top margin of the root's bounding box", + "RootSelector": "A string which specifies a set of offsets to add to the root's bounding_box when calculating intersections", + "ScrollContainerSelector": "A string which specifies a selector for the scroll container of the observed targets", + "Threshold": "specifying a ratio of intersection area to total bounding box area for the observed target.", + "DisableIntersectAfterTriggering": "Whether to disable intersection activation briefly when scrolling after clicking to trigger" + }, + "methods": { + "scrollToTarget": "Scroll to the target element, input argument is the target element `id`" + } +} \ No newline at end of file diff --git a/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTarget-zh-CN.json b/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTarget-zh-CN.json new file mode 100644 index 0000000000..52a4ebfcfd --- /dev/null +++ b/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTarget-zh-CN.json @@ -0,0 +1,18 @@ +{ + "props": { + "activeClass": "目标元素与视区相交时需要添加的类名,可以通过 context 获取", + "autoRootMargin": "是否自动计算 rootMargin", + "Offset": "滚动偏移量", + "RootMarginBottom": "根元素的底部边界", + "RootMarginLeft": "根元素的左边界", + "RootMarginRight": "根元素的右边界", + "RootMarginTop": "根元素的顶部边界", + "RootSelector": "根元素的选择器", + "ScrollContainerSelector": "滚动容器的选择器", + "Threshold": "交叉比例阈值", + "DisableIntersectAfterTriggering": "是否在点击触发后滚动时短暂禁用交叉激活" + }, + "methods": { + "scrollToTarget": "滚动到目标元素,入参为目标元素的`id`" + } +} \ No newline at end of file diff --git a/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTargetTrigger-en-US.json b/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTargetTrigger-en-US.json new file mode 100644 index 0000000000..33ea3b4a29 --- /dev/null +++ b/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTargetTrigger-en-US.json @@ -0,0 +1,5 @@ +{ + "props": { + "target": "The `id` of the target element, also used to register the intersection observer" + } +} diff --git a/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTargetTrigger-zh-CN.json b/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTargetTrigger-zh-CN.json new file mode 100644 index 0000000000..0a9b20a502 --- /dev/null +++ b/docs/Masa.Blazor.Docs/wwwroot/data/apis/scroll-to-target/MScrollToTargetTrigger-zh-CN.json @@ -0,0 +1,5 @@ +{ + "props": { + "target": "目标元素的`id`,也用于注册交叉观察器" + } +} diff --git a/docs/Masa.Blazor.Docs/wwwroot/data/nav.json b/docs/Masa.Blazor.Docs/wwwroot/data/nav.json index 12fa138106..8d8095e0ab 100644 --- a/docs/Masa.Blazor.Docs/wwwroot/data/nav.json +++ b/docs/Masa.Blazor.Docs/wwwroot/data/nav.json @@ -296,6 +296,11 @@ "state": "new", "releasedOn": "v1.1.1" }, + { + "title": "scroll-to-target", + "state": "new", + "releasedOn": "v1.3.4" + }, { "title": "splitters", "state": "new", diff --git a/docs/Masa.Blazor.Docs/wwwroot/data/page-to-api.json b/docs/Masa.Blazor.Docs/wwwroot/data/page-to-api.json index 5592b66a9c..dfd563f92f 100644 --- a/docs/Masa.Blazor.Docs/wwwroot/data/page-to-api.json +++ b/docs/Masa.Blazor.Docs/wwwroot/data/page-to-api.json @@ -148,6 +148,10 @@ "date-pickers-month": [ "MDatePicker" ], + "scroll-to-target": [ + "MScrollToTarget", + "MScrollToTargetTrigger" + ], "steppers": [ "MStepper", "MStepperContent", @@ -187,6 +191,7 @@ "MXgMusicPlayer", "MXgplayerControls", "MXgplayerPlay", - "MXgplayerTime" + "MXgplayerTime", + "MXgplayerStart" ] } \ No newline at end of file diff --git a/docs/Masa.Blazor.Docs/wwwroot/pages/labs/scroll-to-target/en-US.md b/docs/Masa.Blazor.Docs/wwwroot/pages/labs/scroll-to-target/en-US.md new file mode 100644 index 0000000000..7c0985aa40 --- /dev/null +++ b/docs/Masa.Blazor.Docs/wwwroot/pages/labs/scroll-to-target/en-US.md @@ -0,0 +1,24 @@ +--- +title: Scroll to target +desc: "Provides a set of components that support automatic scrolling to the specified element and highlighting of the active item." +related: + - /docs/components/tabs + - /docs/components/chip-groups +--- + +**MScrollToTarget** component is used to set the configuration of the intersection observer API so that the active item is set when scrolling to the target element. + +**MScrollToTargetTrigger** component provides the ability to trigger scrolling to the target element, and provides the `Target` of the tracked element, that is, the `id` of the target element. + +## Examples + +### Misc + +#### Tabs + + + +#### Chip group + + + diff --git a/docs/Masa.Blazor.Docs/wwwroot/pages/labs/scroll-to-target/zh-CN.md b/docs/Masa.Blazor.Docs/wwwroot/pages/labs/scroll-to-target/zh-CN.md new file mode 100644 index 0000000000..ca9df2a7f8 --- /dev/null +++ b/docs/Masa.Blazor.Docs/wwwroot/pages/labs/scroll-to-target/zh-CN.md @@ -0,0 +1,23 @@ +--- +title: Scroll to target(滚动到目标) +desc: "提供一组组件,支持自动滚动到指定元素和高亮激活项。" +related: + - /docs/components/tabs + - /docs/components/chip-groups +--- + +**MScrollToTarget** 组件用于设置交叉点观察者API的配置,以便在滚动到目标元素时设置激活项。 + +**MScrollToTargetTrigger** 组件提供触发滚动到目标元素的功能,并提供跟踪的元素的`Target`,即目标元素的 `id`。 + +## 示例 + +### 其他 + +#### 选项卡 + + + +#### 纸片组 + + diff --git a/docs/Masa.Docs.Core/Components/AppCodeGroup.razor b/docs/Masa.Docs.Core/Components/AppCodeGroup.razor index 365d5757db..566580ced8 100644 --- a/docs/Masa.Docs.Core/Components/AppCodeGroup.razor +++ b/docs/Masa.Docs.Core/Components/AppCodeGroup.razor @@ -1,7 +1,7 @@ @using System.Text.Json.Serialization @attribute [JSCustomElement] -
+
@if (Model is not null) { diff --git a/docs/Masa.Docs.Core/Components/DocumentMarkdownIt.razor b/docs/Masa.Docs.Core/Components/DocumentMarkdownIt.razor index 54b6a1aa04..9486720cb1 100644 --- a/docs/Masa.Docs.Core/Components/DocumentMarkdownIt.razor +++ b/docs/Masa.Docs.Core/Components/DocumentMarkdownIt.razor @@ -15,6 +15,9 @@ @code { + [CascadingParameter] + private MScrollToTarget? ScrollToTargetComp { get; set; } + [CascadingParameter(Name = "IsDark")] private bool IsDark { get; set; } diff --git a/docs/Masa.Docs.Shared/Pages/Document.razor b/docs/Masa.Docs.Shared/Pages/Document.razor index 6ca00fb63f..ce333b0d2d 100644 --- a/docs/Masa.Docs.Shared/Pages/Document.razor +++ b/docs/Masa.Docs.Shared/Pages/Document.razor @@ -4,11 +4,11 @@ - +
- + - +
diff --git a/docs/Masa.Docs.Shared/Pages/Index.razor b/docs/Masa.Docs.Shared/Pages/Index.razor index 3ae6d2fefd..5636cbfea9 100644 --- a/docs/Masa.Docs.Shared/Pages/Index.razor +++ b/docs/Masa.Docs.Shared/Pages/Index.razor @@ -3,12 +3,8 @@ @inject DocService DocService @inject I18n I18n @inject IJSRuntime JsRuntime -@inject NavigationManager NavigationManager @inject MasaBlazor MasaBlazor -@inject IntersectJSModule IntersectJSModule -@using Element = BlazorComponent.Web.Element @inherits NextTickComponentBase -@implements IAsyncDisposable (JsInteropConstants.GetDomInfo, "document"); - var marginBottom = document.ClientHeight - marginTop - 36; - - var navHashes = new[] { "#getting-started" }.Concat(_projectToNavs.Select(u => $"#{u.Key}")); - foreach (var hash in navHashes) - { - await IntersectJSModule.ObserverAsync(hash, (e) => HandleOnIntersect(e, hash), new IntersectionObserverInit() - { - RootMargin = $"-{marginTop}px 0px -{marginBottom}px 0px" - }); } } - - private async Task UnobserveToc() - { - var navHashes = new[] { "#getting-started" }.Concat(_projectToNavs.Select(u => $"#{u.Key}")); - foreach (var hash in navHashes) - { - await IntersectJSModule.UnobserveAsync(hash); - } - } - - private async Task HandleOnIntersect(IntersectEventArgs e, string hash) - { - if (_internalScrolling) - { - return; - } - - if (e.IsIntersecting) - { - _activeHash = hash; - - _ctsForIntersect.Cancel(); - _ctsForIntersect = new CancellationTokenSource(); - - try - { - await Task.Delay(300, _ctsForIntersect.Token); - await InvokeAsync(StateHasChanged); - } - catch (TaskCanceledException) - { - // ignored - } - } - } - + private RenderFragment ProductCard(IEnumerable<(string title, string href)> items, string? group = null) => __builder => { @@ -268,27 +208,8 @@ private async Task ScrollIntoView(string hash) { - _internalScrolling = true; _activeHash = hash; _ = JsRuntime.InvokeVoidAsync("scrollToElement", hash, AppService.AppBarHeight + 48); - - await Task.Run(async () => - { - await Task.Delay(1000); - _internalScrolling = false; - }); - } - - async ValueTask IAsyncDisposable.DisposeAsync() - { - try - { - await UnobserveToc(); - } - catch (Exception) - { - // ignored - } } } diff --git a/docs/Masa.Docs.Shared/Shared/DocLayout.razor b/docs/Masa.Docs.Shared/Shared/DocLayout.razor index aadfccb1f8..71aff8450e 100644 --- a/docs/Masa.Docs.Shared/Shared/DocLayout.razor +++ b/docs/Masa.Docs.Shared/Shared/DocLayout.razor @@ -2,13 +2,21 @@ @layout BaseLayout @inherits LayoutComponentBase @implements IAsyncDisposable +@inject NavigationManager NavigationManager -@Body + + + @Body + - + + @@ -30,6 +38,8 @@ private bool? _showDrawer; private bool _showBackTop; + private int Offset => AppService.AppBarHeight + 12; + protected override void OnInitialized() { base.OnInitialized(); diff --git a/docs/Masa.Docs.Shared/Shared/Toc.razor b/docs/Masa.Docs.Shared/Shared/Toc.razor index c2c44082a1..c939a94a40 100644 --- a/docs/Masa.Docs.Shared/Shared/Toc.razor +++ b/docs/Masa.Docs.Shared/Shared/Toc.razor @@ -27,22 +27,28 @@ { var hash = $"#{item.Anchor}"; -
  • - - @item.Content - @if (item.Attrs.ContainsKey("released-on")) - { - mdi-circle-medium - } - else if (item.Attrs.ContainsKey("updated-in")) - { - mdi-circle-medium - } - -
  • + + @{ + var color = context.IsActive ? "primary--text" : "secondary--text"; + } + +
  • + + @item.Content + @if (item.Attrs.ContainsKey("released-on")) + { + mdi-circle-medium + } + else if (item.Attrs.ContainsKey("updated-in")) + { + mdi-circle-medium + } + +
  • +
    } diff --git a/docs/Masa.Docs.Shared/Shared/Toc.razor.cs b/docs/Masa.Docs.Shared/Shared/Toc.razor.cs index 2b8151734d..60df9b91e7 100644 --- a/docs/Masa.Docs.Shared/Shared/Toc.razor.cs +++ b/docs/Masa.Docs.Shared/Shared/Toc.razor.cs @@ -12,14 +12,14 @@ public partial class Toc : NextTickComponentBase [Inject] private IJSRuntime JsRuntime { get; set; } = null!; - [Inject] private IntersectJSModule IntersectJSModule { get; set; } = null!; - [Inject] private NavigationManager NavigationManager { get; set; } = null!; [Inject] private I18n I18n { get; set; } = null!; [CascadingParameter(Name = "Culture")] private string? Culture { get; set; } + [CascadingParameter] private MScrollToTarget? ScrollToTargetComp { get; set; } + [Parameter] public bool RTL { get; set; } private List _toc = new(); @@ -34,7 +34,8 @@ protected override void OnInitialized() AppService.TocChanged += AppServiceOnTocChanged; } - private string? ActiveItem + [Parameter] + public string? ActiveItem { get => _activeItem; set @@ -43,64 +44,11 @@ private string? ActiveItem { _activeItem = value; - _ = JsRuntime.TryInvokeVoidAsync("updateHash", value); + _ = JsRuntime.TryInvokeVoidAsync("updateHash", $"#{value}"); } } } - private async Task ObserveToc() - { - const double titleHeight = 32; - - var document = await JsRuntime.InvokeAsync(JsInteropConstants.GetDomInfo, "document"); - var documentClientHeight = document.ClientHeight; - var bottomMargin = documentClientHeight - AppService.AppBarHeight - titleHeight; - - foreach (var item in _toc) - { - await IntersectJSModule.ObserverAsync($"#{item.Anchor}", HandleOnIntersect, new IntersectionObserverInit() - { - RootMargin = $"-{AppService.AppBarHeight}px 0px -{bottomMargin}px 0px", - }); - } - } - - private async Task HandleOnIntersect(IntersectEventArgs e) - { - e.Entries.ForEach(entry => - { - if (entry.IsIntersecting) - { - _activeStack.Add(entry.Target.Selector); - } - else if (_activeStack.Contains(entry.Target.Selector)) - { - _activeStack.Remove(entry.Target.Selector); - } - }); - - if (_activeStack.Count > 0) - { - ActiveItem = _activeStack.Last(); - } - else if (ActiveItem is null) - { - ActiveItem = "#" + _toc.First().Anchor; - } - - StateHasChanged(); - } - - private async Task ScrollIntoView(string hash, bool force = false) - { - if (NavigationManager.GetHash() == hash && !force) - { - return; - } - - await JsRuntime.InvokeVoidAsync("scrollToElement", hash, AppService.AppBarHeight + 12); - } - private async void AppServiceOnTocChanged(object? sender, List? toc) { if (toc is null) @@ -112,29 +60,15 @@ private async void AppServiceOnTocChanged(object? sender, List { await Task.Delay(300); - await ScrollIntoView(ActiveItem, force: true); - StateHasChanged(); + ScrollToTargetComp?.ScrollToTarget(hash.TrimStart('#')); }); } - else - { - _activeStack.Clear(); - ActiveItem = null; - } - - foreach (var item in _toc) - { - await IntersectJSModule.UnobserveAsync($"#{item.Anchor}"); - } _toc = toc.Where(c => c.Level > 1).ToList(); - await ObserveToc(); - await InvokeAsync(StateHasChanged); } @@ -155,15 +89,6 @@ private string GenClass(MarkdownItTocContent tocContent) break; } - if (!string.IsNullOrWhiteSpace(ActiveItem) && ActiveItem[1..].Equals(tocContent.Anchor, StringComparison.OrdinalIgnoreCase)) - { - builder.Append(" primary--text"); - } - else - { - builder.Append(" secondary--text"); - } - return builder.ToString(); } diff --git a/docs/Masa.Docs.Shared/wwwroot/css/docs.css b/docs/Masa.Docs.Shared/wwwroot/css/docs.css index 63b3943fe5..672e89d380 100644 --- a/docs/Masa.Docs.Shared/wwwroot/css/docs.css +++ b/docs/Masa.Docs.Shared/wwwroot/css/docs.css @@ -560,10 +560,6 @@ app-alert p { } } -default-app-markup { - margin-bottom: 16px; -} - .tooltip-code { border-width: 1px; border-style: dashed; @@ -578,11 +574,12 @@ default-app-markup { } .doc-markdown-body > section { - margin-bottom: 3rem; + /*margin-bottom: 3rem;*/ } - .doc-markdown-body > section section { - margin-bottom: 1.5rem; + .doc-markdown-body > section > section > section { + /*margin-bottom: 1.5rem;*/ + padding-bottom: 1.5rem; } .doc-markdown-body code { diff --git a/docs/Masa.Docs.Shared/wwwroot/locale/en-US.json b/docs/Masa.Docs.Shared/wwwroot/locale/en-US.json index c59bb2110a..2150e0db31 100644 --- a/docs/Masa.Docs.Shared/wwwroot/locale/en-US.json +++ b/docs/Masa.Docs.Shared/wwwroot/locale/en-US.json @@ -227,6 +227,7 @@ "progress-linear": "Progress linear", "pull-refresh": "Pull refresh", "ratings": "Ratings", + "scroll-to-target": "Scroll to target", "sheets": "Sheets", "skeleton-loaders": "Skeleton loaders", "snackbars": "Snackbars", diff --git a/docs/Masa.Docs.Shared/wwwroot/locale/zh-CN.json b/docs/Masa.Docs.Shared/wwwroot/locale/zh-CN.json index 8ddd1ec278..ae282c84da 100644 --- a/docs/Masa.Docs.Shared/wwwroot/locale/zh-CN.json +++ b/docs/Masa.Docs.Shared/wwwroot/locale/zh-CN.json @@ -230,6 +230,7 @@ "progress-linear": "Progress linear(进度条)", "pull-refresh": "Pull to refresh(下拉刷新)", "ratings": "Ratings(评级)", + "scroll-to-target": "Scroll to target(滚动到目标)", "sheets": "Sheets(工作表)", "skeleton-loaders": "Skeleton loaders(骨架装载器)", "snackbars": "Snackbars(消息条)", diff --git a/src/Masa.Blazor/Components/Lazy/AutoRootMargin.cs b/src/Masa.Blazor/Components/Lazy/AutoRootMargin.cs new file mode 100644 index 0000000000..a5eb21071c --- /dev/null +++ b/src/Masa.Blazor/Components/Lazy/AutoRootMargin.cs @@ -0,0 +1,10 @@ +namespace Masa.Blazor; + +public enum AutoRootMargin +{ + None, + Top, + Right, + Bottom, + Left, +} diff --git a/src/Masa.Blazor/Components/Lazy/IntersectionObserverInit.cs b/src/Masa.Blazor/Components/Lazy/IntersectionObserverInit.cs index cb96eb2960..736cb0449c 100644 --- a/src/Masa.Blazor/Components/Lazy/IntersectionObserverInit.cs +++ b/src/Masa.Blazor/Components/Lazy/IntersectionObserverInit.cs @@ -21,12 +21,36 @@ public IntersectionObserverInit(bool once) } /// - /// An Element or Document object which is an ancestor of the intended target, - /// whose bounding rectangle will be considered the viewport. - /// Any part of the target not visible in the visible area of the root - /// is not considered visible. + /// The top value of RootMargin. + /// For details: https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/rootMargin /// - public string? RootMargin { get; set; } = "0px"; + public string RootMarginTop { get; set; } = "0px"; + + /// + /// The right value of RootMargin. + /// For details: https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/rootMargin + /// + public string RootMarginRight { get; set; } = "0px"; + + /// + /// The bottom value of RootMargin. + /// For details: https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/rootMargin + /// + public string RootMarginBottom { get; set; } = "0px"; + + /// + /// The left value of RootMargin. + /// For details: https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/rootMargin + /// + public string RootMarginLeft { get; set; } = "0px"; + + /// + /// The margin value of RootMargin that will be automatically calculated. + /// For example, if you set to 64px, + /// the value of RootMargin bottom will be `calc(64px - 100%)`. + /// + [JsonConverter(typeof(JsonStringEnumConverter))] + public AutoRootMargin AutoRootMargin { get; set; } /// /// A string which specifies a set of offsets to add to the root's bounding_box diff --git a/src/Masa.Blazor/Components/ScrollToTarget/MScrollToTarget.cs b/src/Masa.Blazor/Components/ScrollToTarget/MScrollToTarget.cs new file mode 100644 index 0000000000..1c94f71ba0 --- /dev/null +++ b/src/Masa.Blazor/Components/ScrollToTarget/MScrollToTarget.cs @@ -0,0 +1,226 @@ +using Masa.Blazor.Components.ScrollToTarget; +using Masa.Blazor.ScrollToTarget; + +namespace Masa.Blazor; + +public class MScrollToTarget : ComponentBase, IAsyncDisposable +{ + [Inject] private ScrollToTargetJSModule ScrollToTargetJSModule { get; set; } = null!; + + [Inject] private IJSRuntime JSRuntime { get; set; } = null!; + + [Parameter] [EditorRequired] public RenderFragment ChildContent { get; set; } = default!; + + [Parameter] public string? ActiveClass { get; set; } + + /// + /// The top value of RootMargin for IntersectionObserver + /// + [Parameter] [MasaApiParameter("0px")] public string RootMarginTop { get; set; } = "0px;"; + + /// + /// The right value of RootMargin for IntersectionObserver + /// + [Parameter] [MasaApiParameter("0px")] public string RootMarginRight { get; set; } = "0px"; + + /// + /// THe bottom value of RootMargin for IntersectionObserver + /// + [Parameter] [MasaApiParameter("0px")] public string RootMarginBottom { get; set; } = "0px"; + + /// + /// The left value of RootMargin for IntersectionObserver + /// + [Parameter] [MasaApiParameter("0px")] public string RootMarginLeft { get; set; } = "0px"; + + /// + /// The margin value of RootMargin that will be automatically calculated. + /// For example, if you set to 64px, + /// the value of RootMargin bottom will be `calc(64px - 100%)`. + /// + [Parameter] public AutoRootMargin AutoRootMargin { get; set; } + + [Parameter] public string? RootSelector { get; set; } + + [Parameter] public int Offset { get; set; } + + [Parameter] public double[] Threshold { get; set; } = { }; + + [Parameter] public string? ScrollContainerSelector { get; set; } + + [Parameter] public bool DisableIntersectAfterTriggering { get; set; } + + private bool _task; + + private TargetContext _targetContext = new(); + private List _activeStack = new(); + private bool _hasRendered; + private List? _tasks; + + private DotNetObjectReference? _jsInteropHandle; + private ScrollToTargetJSObjectReference? _scrollToTargetJSObjectReference; + + private bool _disableIntersecting; + private CancellationTokenSource? _ctsForDisableIntersecting; + + private List Targets { get; } = new(); + + public string? ActiveTarget => _targetContext.ActiveTarget; + + protected override void OnInitialized() + { + base.OnInitialized(); + + Targets.ThrowIfNull(nameof(MScrollToTarget)); + + _jsInteropHandle = DotNetObjectReference.Create(new ScrollToTargetJSInteropHandle(this)); + } + + protected override void OnParametersSet() + { + base.OnParametersSet(); + + RootMarginTop ??= "0px"; + RootMarginRight ??= "0px"; + RootMarginBottom ??= "0px"; + RootMarginLeft ??= "0px"; + + _targetContext.ScrollToTarget ??= ScrollToTarget; + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _scrollToTargetJSObjectReference = await ScrollToTargetJSModule.InitAsync(_jsInteropHandle!, new IntersectionObserverInit() + { + RootMarginTop = RootMarginTop, + RootMarginRight = RootMarginRight, + RootMarginBottom = RootMarginBottom, + RootMarginLeft = RootMarginLeft, + AutoRootMargin = AutoRootMargin, + RootSelector = RootSelector, + Threshold = Threshold + }); + + _hasRendered = true; + + if (_tasks is { Count: > 0 }) + { + _tasks.ForEach(item => item.Invoke()); + } + } + } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + builder.OpenComponent>(0); + builder.AddAttribute(1, "IsFixed", true); + builder.AddAttribute(2, "Value", this); + builder.AddAttribute(3, "ChildContent", ChildContent.Invoke(_targetContext)); + builder.CloseElement(); + } + + internal void RegisterTarget(string target) + { + if (_hasRendered) + { + Observer(); + } + else + { + _tasks ??= new(); + _tasks.Add(Observer); + } + + return; + + void Observer() => _ = ObserverAsync(target); + } + + internal void UnregisterTarget(string target) + { + Targets.Remove(target); + + _scrollToTargetJSObjectReference?.UnobserveAsync(target); + } + + private async Task DisableIntersect() + { + _ctsForDisableIntersecting?.Cancel(); + _ctsForDisableIntersecting = new(); + + try + { + _disableIntersecting = true; + await Task.Delay(500, _ctsForDisableIntersecting.Token); // smooth scroll animation time is 200~500ms + _disableIntersecting = false; + if (lastTarget is not null) + { + _targetContext.ActiveTarget = lastTarget; + lastTarget = null; + StateHasChanged(); + } + } + catch (TaskCanceledException) + { + // ignored + } + } + + private async ValueTask ObserverAsync(string target) + { + if (!Targets.Contains(target)) + { + Targets.Add(target); + } + + _scrollToTargetJSObjectReference?.ObserveAsync(target); + } + + private string lastTarget; + + internal async ValueTask UpdateActiveTarget(string target) + { + lastTarget = target; + + if (_disableIntersecting) + { + return; + } + + _targetContext.ActiveTarget = target; + await InvokeAsync(StateHasChanged); + } + + [MasaApiPublicMethod] + public void ScrollToTarget(string target) + { + if (DisableIntersectAfterTriggering) + { + _ = DisableIntersect(); + } + + _ = JSRuntime.InvokeVoidAsync( + JsInteropConstants.ScrollToTarget, + $"#{target}", + ScrollContainerSelector, + Offset); + } + + public async ValueTask DisposeAsync() + { + try + { + foreach (var target in Targets) + { + _ = _scrollToTargetJSObjectReference?.UnobserveAsync(target); + _ = _scrollToTargetJSObjectReference?.DisposeAsync(); + } + } + catch (JSDisconnectedException) + { + // ignored + } + } +} diff --git a/src/Masa.Blazor/Components/ScrollToTarget/MScrollToTargetTrigger.cs b/src/Masa.Blazor/Components/ScrollToTarget/MScrollToTargetTrigger.cs new file mode 100644 index 0000000000..6bba4f87c1 --- /dev/null +++ b/src/Masa.Blazor/Components/ScrollToTarget/MScrollToTargetTrigger.cs @@ -0,0 +1,55 @@ +using Masa.Blazor.Components.ScrollToTarget; +using Masa.Blazor.ScrollToTarget; + +namespace Masa.Blazor; + +public class MScrollToTargetTrigger : ComponentBase, IAsyncDisposable +{ + [Inject] private IJSRuntime JSRuntime { get; set; } = null!; + + [CascadingParameter] private MScrollToTarget? ScrollToTarget { get; set; } + + [Parameter] [EditorRequired] public string Target { get; set; } = null!; + + [Parameter] public RenderFragment? ChildContent { get; set; } + + private TargetTriggerContext _context = new(); + + protected override void OnAfterRender(bool firstRender) + { + if (firstRender) + { + ScrollToTarget?.RegisterTarget(Target); + } + } + + protected override void OnParametersSet() + { + base.OnParametersSet(); + + Target.ThrowIfNull(nameof(MScrollToTargetTrigger)); + + UpdateTargetTriggerContext(); + } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + => builder.AddContent(0, ChildContent?.Invoke(_context)); + + private void UpdateTargetTriggerContext() + { + _context.IsActive = ScrollToTarget?.ActiveTarget == Target; + _context.ActiveClass = _context.IsActive ? ScrollToTarget?.ActiveClass : null; + _context.ScrollToTarget ??= InvokeScrollToTarget; + } + + private void InvokeScrollToTarget() + { + ScrollToTarget?.ScrollToTarget(Target); + } + + ValueTask IAsyncDisposable.DisposeAsync() + { + ScrollToTarget?.UnregisterTarget(Target); + return ValueTask.CompletedTask; + } +} diff --git a/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSInteropHandle.cs b/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSInteropHandle.cs new file mode 100644 index 0000000000..7d9380102b --- /dev/null +++ b/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSInteropHandle.cs @@ -0,0 +1,14 @@ +namespace Masa.Blazor.Components.ScrollToTarget; + +public class ScrollToTargetJSInteropHandle +{ + private readonly MScrollToTarget _component; + + public ScrollToTargetJSInteropHandle(MScrollToTarget component) + { + _component = component; + } + + [JSInvokable] + public ValueTask UpdateActiveTarget(string target) => _component.UpdateActiveTarget(target); +} diff --git a/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSModule.cs b/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSModule.cs new file mode 100644 index 0000000000..a910d6a485 --- /dev/null +++ b/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSModule.cs @@ -0,0 +1,17 @@ +namespace Masa.Blazor.Components.ScrollToTarget; + +public class ScrollToTargetJSModule : JSModule +{ + public ScrollToTargetJSModule(IJSRuntime js) : base(js, "./_content/Masa.Blazor/js/components/scroll-to-target.js") + { + } + + public async ValueTask InitAsync( + DotNetObjectReference interopHandle, + IntersectionObserverInit options + ) + { + var jsObjectReference = await InvokeAsync("init", interopHandle, options); + return new ScrollToTargetJSObjectReference(jsObjectReference); + } +} diff --git a/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSObjectReference.cs b/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSObjectReference.cs new file mode 100644 index 0000000000..25591247e6 --- /dev/null +++ b/src/Masa.Blazor/Components/ScrollToTarget/ScrollToTargetJSObjectReference.cs @@ -0,0 +1,16 @@ +using Masa.Blazor.JSModules; + +namespace Masa.Blazor.Components.ScrollToTarget; + +public class ScrollToTargetJSObjectReference : JSObjectReferenceBase +{ + public ScrollToTargetJSObjectReference(IJSObjectReference jsObjectReference) : base(jsObjectReference) + { + } + + public ValueTask ObserveAsync(string id) => JSObjectReference.InvokeVoidAsync("observe", id); + + public ValueTask UnobserveAsync(string id) => JSObjectReference.InvokeVoidAsync("unobserve", id); + + public ValueTask DisposeAsync() => JSObjectReference.InvokeVoidAsync("dispose"); +} diff --git a/src/Masa.Blazor/Components/ScrollToTarget/TargetContext.cs b/src/Masa.Blazor/Components/ScrollToTarget/TargetContext.cs new file mode 100644 index 0000000000..b684200152 --- /dev/null +++ b/src/Masa.Blazor/Components/ScrollToTarget/TargetContext.cs @@ -0,0 +1,8 @@ +namespace Masa.Blazor.ScrollToTarget; + +public class TargetContext +{ + public string? ActiveTarget { get; set; } + + public Action ScrollToTarget { get; set; } = default!; +} diff --git a/src/Masa.Blazor/Components/ScrollToTarget/TargetTriggerContext.cs b/src/Masa.Blazor/Components/ScrollToTarget/TargetTriggerContext.cs new file mode 100644 index 0000000000..a6c8b29ca4 --- /dev/null +++ b/src/Masa.Blazor/Components/ScrollToTarget/TargetTriggerContext.cs @@ -0,0 +1,10 @@ +namespace Masa.Blazor.Components.ScrollToTarget; + +public class TargetTriggerContext +{ + public bool IsActive { get; internal set; } + + public string? ActiveClass { get; internal set; } + + public Action ScrollToTarget { get; internal set; } = null!; +} diff --git a/src/Masa.Blazor/Components/Xgplayer/JSInterops/XgplayerJSObjectReference.cs b/src/Masa.Blazor/Components/Xgplayer/JSInterops/XgplayerJSObjectReference.cs index 148c9b0ef3..8499b9ac7f 100644 --- a/src/Masa.Blazor/Components/Xgplayer/JSInterops/XgplayerJSObjectReference.cs +++ b/src/Masa.Blazor/Components/Xgplayer/JSInterops/XgplayerJSObjectReference.cs @@ -1,14 +1,12 @@ using Masa.Blazor.Components.Xgplayer; +using Masa.Blazor.JSModules; namespace Masa.Blazor; -public class XgplayerJSObjectReference : IAsyncDisposable +public class XgplayerJSObjectReference : JSObjectReferenceBase { - private readonly IJSObjectReference _jsObjectReference; - - public XgplayerJSObjectReference(IJSObjectReference jsObjectReference) + public XgplayerJSObjectReference(IJSObjectReference jsObjectReference) : base(jsObjectReference) { - _jsObjectReference = jsObjectReference; } public async ValueTask UpdateUrlAsync(XgplayerUrl url) @@ -16,33 +14,28 @@ public async ValueTask UpdateUrlAsync(XgplayerUrl url) await InvokeVoidAsync("playNext", new { url }); } - public async ValueTask InvokeVoidAsync(string identity, params object[] args) - { - await _jsObjectReference.InvokeVoidAsync("invokeVoid", identity, args); - } - public async ValueTask GetPropsAndStatesAsync() { - return await _jsObjectReference.InvokeAsync("getPropsAndStates"); + return await JSObjectReference.InvokeAsync("getPropsAndStates"); } public async ValueTask SwitchToMusicAsync(XgplayerUrl url) { - await _jsObjectReference.InvokeVoidAsync("switchMusic", url); + await JSObjectReference.InvokeVoidAsync("switchMusic", url); } public async ValueTask SwitchToVideoAsync(XgplayerUrl url) { - await _jsObjectReference.InvokeVoidAsync("switchVideo", url); + await JSObjectReference.InvokeVoidAsync("switchVideo", url); } public async Task DestroyAsync() { - await _jsObjectReference.InvokeVoidAsync("destroy"); + await JSObjectReference.InvokeVoidAsync("destroy"); } public async ValueTask DisposeAsync() { - await _jsObjectReference.DisposeAsync(); + await JSObjectReference.DisposeAsync(); } } diff --git a/src/Masa.Blazor/Extensions/DependencyInjection/ServiceCollectionExtensions.cs b/src/Masa.Blazor/Extensions/DependencyInjection/ServiceCollectionExtensions.cs index 4b4a6e625d..f60e4a7230 100644 --- a/src/Masa.Blazor/Extensions/DependencyInjection/ServiceCollectionExtensions.cs +++ b/src/Masa.Blazor/Extensions/DependencyInjection/ServiceCollectionExtensions.cs @@ -1,5 +1,6 @@ using Masa.Blazor; using Masa.Blazor.Components.Drawflow; +using Masa.Blazor.Components.ScrollToTarget; using Masa.Blazor.Components.Xgplayer; using Microsoft.Extensions.DependencyInjection.Extensions; @@ -56,6 +57,7 @@ private static IMasaBlazorBuilder AddMasaBlazorInternal(this IServiceCollection services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); + services.TryAddScoped(); return new MasaBlazorBuilder(services); } diff --git a/src/Masa.Blazor/JSModules/JSObjectReferenceBase.cs b/src/Masa.Blazor/JSModules/JSObjectReferenceBase.cs new file mode 100644 index 0000000000..5a9dfe4d6e --- /dev/null +++ b/src/Masa.Blazor/JSModules/JSObjectReferenceBase.cs @@ -0,0 +1,21 @@ +namespace Masa.Blazor.JSModules; + +public class JSObjectReferenceBase : IAsyncDisposable +{ + protected IJSObjectReference JSObjectReference { get; init; } + + public JSObjectReferenceBase(IJSObjectReference jsObjectReference) + { + JSObjectReference = jsObjectReference; + } + + public async ValueTask InvokeVoidAsync(string identity, params object[] args) + { + await JSObjectReference.InvokeVoidAsync("invokeVoid", identity, args); + } + + async ValueTask IAsyncDisposable.DisposeAsync() + { + await JSObjectReference.DisposeAsync(); + } +} diff --git a/src/Masa.Blazor/wwwroot/js/components/scroll-to-target.js b/src/Masa.Blazor/wwwroot/js/components/scroll-to-target.js new file mode 100644 index 0000000000..f04059b963 --- /dev/null +++ b/src/Masa.Blazor/wwwroot/js/components/scroll-to-target.js @@ -0,0 +1,2 @@ +function t(t,e,o,n){return new(o||(o=Promise))((function(r,i){function a(t){try{c(n.next(t))}catch(t){i(t)}}function s(t){try{c(n.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?r(t.value):(e=t.value,e instanceof o?e:new o((function(t){t(e)}))).then(a,s)}c((n=n.apply(t,e||[])).next())}))}let e=!1;try{if("undefined"!=typeof window){const t=Object.defineProperty({},"passive",{get:()=>{e=!0}});window.addEventListener("testListener",t,t),window.removeEventListener("testListener",t,t)}}catch(t){console.warn(t)}function o(t,e,o){t=t||document.documentElement;const n=parseInt(e);if(isNaN(n))return 0;var r=o?t.clientWidth:t.clientHeight;return Math.abs(n)-r}Object.freeze({enter:13,tab:9,delete:46,esc:27,space:32,up:38,down:40,left:37,right:39,end:35,home:36,del:46,backspace:8,insert:45,pageup:33,pagedown:34,shift:16});class n{constructor(t,e){this.activeStack=[],this.handle=t,this.options=function(t){if(!t)return null;const e=t.rootSelector?document.querySelector(t.rootSelector):null;return"None"!==t.autoRootMargin&&("Top"===t.autoRootMargin&&"0px"!==t.rootMarginBottom?t.rootMarginTop=o(e,t.rootMarginBottom,!1)+"px":"Right"===t.autoRootMargin&&"0px"!==t.rootMarginLeft?t.rootMarginRight=o(e,t.rootMarginLeft,!1)+"px":"Bottom"===t.autoRootMargin&&"0px"!==t.rootMarginTop?t.rootMarginBottom=o(e,t.rootMarginTop,!1)+"px":"Left"===t.autoRootMargin&&"0px"!==t.rootMarginRight&&(t.rootMarginLeft=o(e,t.rootMarginRight,!1)+"px")),{rootMargin:`${t.rootMarginTop} ${t.rootMarginRight} ${t.rootMarginBottom} ${t.rootMarginLeft}`,root:e,threshold:t.threshold}}(e)}observe(e){const o=document.getElementById(e);if(!o)return;const n=new IntersectionObserver(((o=[],n)=>t(this,void 0,void 0,(function*(){o.some((t=>t.isIntersecting))?this.activeStack.push(e):this.activeStack.includes(e)&&this.activeStack.splice(this.activeStack.indexOf(e),1),yield this.handle.invokeMethodAsync("UpdateActiveTarget",this.activeStack[this.activeStack.length-1])}))),this.options);o._observe=Object(o._observe),o._observe={handle:this.handle,observer:n},n.observe(o)}unobserve(t){const e=document.getElementById(t);if(!e)return;const o=e._observe;o&&(o.observer.unobserve(e),delete e._observe)}dispose(){this.handle&&(this.handle.dispose(),this.handle=null)}}function r(t,e){return new n(t,e)}export{r as init}; +//# sourceMappingURL=scroll-to-target.js.map diff --git a/src/Masa.Blazor/wwwroot/js/components/scroll-to-target.js.map b/src/Masa.Blazor/wwwroot/js/components/scroll-to-target.js.map new file mode 100644 index 0000000000..37001ef8bf --- /dev/null +++ b/src/Masa.Blazor/wwwroot/js/components/scroll-to-target.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scroll-to-target.js","sources":["../../../../BlazorComponent/src/Component/BlazorComponent.Web/node_modules/tslib/tslib.es6.js","../../../../BlazorComponent/src/Component/BlazorComponent.Web/src/utils/helper.ts","../../../../BlazorComponent/src/Component/BlazorComponent.Web/src/mixins/intersect/index.ts","../../../../BlazorComponent/src/Component/BlazorComponent.Web/src/components/scroll-to-target/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.push(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.push(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export function addOnceEventListener (\r\n el: EventTarget,\r\n eventName: string,\r\n cb: (event: Event) => void,\r\n options: boolean | AddEventListenerOptions = false\r\n): void {\r\n const once = (event: Event) => {\r\n cb(event)\r\n el.removeEventListener(eventName, once, options)\r\n }\r\n\r\n el.addEventListener(eventName, once, options)\r\n}\r\n\r\nlet passiveSupported = false\r\ntry {\r\n if (typeof window !== 'undefined') {\r\n const testListenerOpts = Object.defineProperty({}, 'passive', {\r\n get: () => {\r\n passiveSupported = true\r\n },\r\n })\r\n\r\n window.addEventListener('testListener' as any, testListenerOpts as any, testListenerOpts)\r\n window.removeEventListener('testListener' as any, testListenerOpts as any, testListenerOpts)\r\n }\r\n} catch (e) { console.warn(e) } /* eslint-disable-line no-console */\r\nexport { passiveSupported }\r\n\r\nexport function addPassiveEventListener (\r\n el: EventTarget,\r\n event: string,\r\n cb: ((e: any) => void),\r\n options: {}\r\n): void {\r\n el.addEventListener(event, cb, passiveSupported ? options : false)\r\n}\r\n\r\nexport function getZIndex (el?: Element | null): number {\r\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\r\n\r\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\r\n\r\n if (!index) return getZIndex(el.parentNode as Element)\r\n return index\r\n}\r\n\r\n// KeyboardEvent.keyCode aliases\r\nexport const keyCodes = Object.freeze({\r\n enter: 13,\r\n tab: 9,\r\n delete: 46,\r\n esc: 27,\r\n space: 32,\r\n up: 38,\r\n down: 40,\r\n left: 37,\r\n right: 39,\r\n end: 35,\r\n home: 36,\r\n del: 46,\r\n backspace: 8,\r\n insert: 45,\r\n pageup: 33,\r\n pagedown: 34,\r\n shift: 16,\r\n})\r\n\r\n/** Polyfill for Event.prototype.composedPath */\r\nexport function composedPath (e: Event): EventTarget[] {\r\n if (e.composedPath) return e.composedPath()\r\n\r\n const path = []\r\n let el = e.target as Element\r\n\r\n while (el) {\r\n path.push(el)\r\n\r\n if (el.tagName === 'HTML') {\r\n path.push(document)\r\n path.push(window)\r\n\r\n return path\r\n }\r\n\r\n el = el.parentElement!\r\n }\r\n return path\r\n}\r\n\r\nexport function getBlazorId(el) {\r\n if (!el) {\r\n return null;\r\n }\r\n let _bl_ = el.getAttributeNames().find(a => a.startsWith('_bl_'))\r\n if (_bl_) {\r\n _bl_ = _bl_.substring(4);\r\n }\r\n\r\n return _bl_;\r\n}\r\n\r\nexport function getElementSelector(el) {\r\n if (!(el instanceof Element))\r\n return;\r\n var path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n var selector = el.nodeName.toLowerCase();\r\n if (el.id) {\r\n selector = '#' + el.id;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n var sib = el, nth = 1;\r\n while (sib = sib.previousElementSibling) {\r\n if (sib.nodeName.toLowerCase() == selector)\r\n nth++;\r\n }\r\n if (nth != 1)\r\n selector += \":nth-of-type(\" + nth + \")\";\r\n }\r\n path.unshift(selector);\r\n el = el.parentNode;\r\n }\r\n return path.join(\" > \");\r\n}\r\n\r\nexport function getEventTarget(target: HTMLElement | EventTarget): MbEventTarget {\r\n const el = target as HTMLElement;\r\n const eventTarget: MbEventTarget = {};\r\n const elementReferenceId = el\r\n .getAttributeNames()\r\n .find((a) => a.startsWith(\"_bl_\"));\r\n if (elementReferenceId) {\r\n eventTarget.elementReferenceId = elementReferenceId;\r\n eventTarget.selector = `[${elementReferenceId}]`;\r\n } else {\r\n eventTarget.selector = getElementSelector(el);\r\n }\r\n\r\n eventTarget.class = el.getAttribute(\"class\");\r\n\r\n return eventTarget;\r\n}\r\n\r\nexport function getDom(elOrString: Element | string | undefined) {\r\n let element: HTMLElement;\r\n\r\n try {\r\n if (!elOrString) {\r\n element = document.body;\r\n } else if (typeof elOrString === \"string\") {\r\n if (elOrString === \"document\") {\r\n element = document.documentElement;\r\n } else if (elOrString.indexOf(\"__.__\") > 0) {\r\n // for example: el__.__parentElement\r\n let array = elOrString.split(\"__.__\");\r\n let i = 0;\r\n let el = document.querySelector(array[i++]);\r\n\r\n if (el) {\r\n while (array[i]) {\r\n el = el[array[i]];\r\n i++;\r\n }\r\n }\r\n\r\n if (el instanceof HTMLElement) {\r\n element = el;\r\n }\r\n } else {\r\n element = document.querySelector(elOrString);\r\n }\r\n } else {\r\n element = elOrString as HTMLElement;\r\n }\r\n\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n\r\n return element;\r\n}\r\n\r\nexport const canUseDom = !!(\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n window.document &&\r\n window.document.createElement\r\n)\r\n\r\nexport function convertToUnit (str: number, unit?: string): string\r\nexport function convertToUnit (str: string | number | null | undefined, unit?: string): string | undefined\r\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\r\n if (str == null || str === '') {\r\n return undefined\r\n } else if (isNaN(+str!)) {\r\n return String(str)\r\n } else if (!isFinite(+str!)) {\r\n return undefined\r\n } else {\r\n return `${Number(str)}${unit}`\r\n }\r\n}","import { getEventTarget } from \"utils/helper\";\r\n\r\nexport interface IntersectionObserverOptions {\r\n rootSelector?: string;\r\n rootMarginLeft?: string;\r\n rootMarginRight?: string;\r\n rootMarginTop?: string;\r\n rootMarginBottom?: string;\r\n autoRootMargin: \"None\" | \"Top\" | \"Right\" | \"Bottom\" | \"Left\";\r\n threshold: number[];\r\n once: boolean;\r\n}\r\n\r\nfunction observe(\r\n el: HTMLElement,\r\n handle: DotNet.DotNetObject,\r\n options?: IntersectionObserverOptions\r\n) {\r\n if (!handle) {\r\n throw new Error(\"the handle cannot be null\");\r\n }\r\n\r\n if (!el) {\r\n handle.dispose();\r\n return;\r\n }\r\n\r\n if (el[\"_observe\"]) {\r\n return;\r\n }\r\n\r\n const once = options?.once ?? false;\r\n\r\n const standardOptions = formatToStandardOptions(options);\r\n\r\n const observer = new IntersectionObserver(\r\n async (\r\n entries: IntersectionObserverEntry[] = [],\r\n observer: IntersectionObserver\r\n ) => {\r\n\r\n const computedEntries = entries.map((entry) => ({\r\n isIntersecting: entry.isIntersecting,\r\n target: getEventTarget(entry.target),\r\n }));\r\n\r\n const isIntersecting = computedEntries.some((e) => e.isIntersecting);\r\n\r\n if (!once || isIntersecting) {\r\n await handle.invokeMethodAsync(\"Invoke\", {\r\n isIntersecting,\r\n entries: computedEntries,\r\n });\r\n }\r\n\r\n if (isIntersecting && once) {\r\n unobserve(el);\r\n }\r\n },\r\n standardOptions\r\n );\r\n\r\n el[\"_observe\"] = Object(el[\"_observe\"]);\r\n el[\"_observe\"] = { handle, observer };\r\n\r\n observer.observe(el);\r\n}\r\n\r\nfunction unobserve(el: HTMLElement) {\r\n if (!el) return;\r\n\r\n const observe = el[\"_observe\"];\r\n if (!observe) return;\r\n\r\n observe.observer.unobserve(el);\r\n observe.handle.dispose();\r\n delete el[\"_observe\"];\r\n}\r\n\r\nfunction observeSelector(\r\n selector: string,\r\n handle: DotNet.DotNetObject,\r\n options?: IntersectionObserverOptions\r\n) {\r\n\r\n if (selector) {\r\n const el = document.querySelector(selector) as HTMLElement;\r\n el && observe(el, handle, options);\r\n }\r\n}\r\n\r\nfunction unobserveSelector(selector: string) {\r\n if (selector) {\r\n const el = document.querySelector(selector) as HTMLElement;\r\n el && unobserve(el);\r\n }\r\n}\r\n\r\nexport function formatToStandardOptions(\r\n options?: IntersectionObserverOptions\r\n): IntersectionObserverInit | null {\r\n if (!options) {\r\n return null;\r\n }\r\n\r\n const root: HTMLLIElement = options.rootSelector\r\n ? document.querySelector(options.rootSelector)\r\n : null;\r\n\r\n if (options.autoRootMargin !== \"None\") {\r\n if (\r\n options.autoRootMargin === \"Top\" &&\r\n options.rootMarginBottom !== \"0px\"\r\n ) {\r\n options.rootMarginTop =\r\n calcAuto(root, options.rootMarginBottom, false) + \"px\";\r\n } else if (\r\n options.autoRootMargin === \"Right\" &&\r\n options.rootMarginLeft !== \"0px\"\r\n ) {\r\n options.rootMarginRight =\r\n calcAuto(root, options.rootMarginLeft, false) + \"px\";\r\n } else if (\r\n options.autoRootMargin === \"Bottom\" &&\r\n options.rootMarginTop !== \"0px\"\r\n ) {\r\n options.rootMarginBottom =\r\n calcAuto(root, options.rootMarginTop, false) + \"px\";\r\n } else if (\r\n options.autoRootMargin === \"Left\" &&\r\n options.rootMarginRight !== \"0px\"\r\n ) {\r\n options.rootMarginLeft =\r\n calcAuto(root, options.rootMarginRight, false) + \"px\";\r\n }\r\n }\r\n\r\n return {\r\n rootMargin: `${options.rootMarginTop} ${options.rootMarginRight} ${options.rootMarginBottom} ${options.rootMarginLeft}`,\r\n root,\r\n threshold: options.threshold,\r\n };\r\n}\r\n\r\nfunction calcAuto(container: HTMLElement, margin: string, x: boolean) {\r\n container = container || document.documentElement;\r\n const marginValue = parseInt(margin);\r\n if (isNaN(marginValue)) {\r\n return 0;\r\n }\r\n\r\n var clientValue = x ? container.clientWidth : container.clientHeight;\r\n\r\n return Math.abs(marginValue) - clientValue;\r\n}\r\n\r\nexport { observe, unobserve, observeSelector, unobserveSelector };\r\n","import { formatToStandardOptions, IntersectionObserverOptions } from \"../../mixins/intersect\";\n\nclass ScrollToTargetJSInterop {\n activeStack: string[] = [];\n handle: DotNet.DotNetObject;\n options?: IntersectionObserverInit | null;\n\n constructor(\n handle: DotNet.DotNetObject,\n options?: IntersectionObserverOptions\n ) {\n this.handle = handle;\n this.options = formatToStandardOptions(options);\n }\n\n observe(id: string) {\n const el = document.getElementById(id);\n if (!el) return;\n\n const observer = new IntersectionObserver(\n async (\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver\n ) => {\n const isIntersecting = entries.some((e) => e.isIntersecting);\n if (isIntersecting) {\n this.activeStack.push(id);\n } else if (this.activeStack.includes(id)) {\n this.activeStack.splice(this.activeStack.indexOf(id), 1);\n }\n\n await this.handle.invokeMethodAsync(\n \"UpdateActiveTarget\",\n this.activeStack[this.activeStack.length - 1]\n );\n },\n this.options\n );\n\n el[\"_observe\"] = Object(el[\"_observe\"]);\n el[\"_observe\"] = { handle: this.handle, observer };\n\n observer.observe(el);\n }\n\n unobserve(id: string) {\n const el = document.getElementById(id);\n if (!el) return;\n\n const observe = el[\"_observe\"];\n if (!observe) return;\n\n observe.observer.unobserve(el);\n delete el[\"_observe\"];\n }\n\n dispose() {\n if (this.handle) {\n this.handle.dispose();\n this.handle = null\n }\n }\n}\n\nfunction init(\n handle: DotNet.DotNetObject,\n options?: IntersectionObserverOptions\n) {\n return new ScrollToTargetJSInterop(handle, options);\n}\n\nexport { init };\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","passiveSupported","window","testListenerOpts","Object","defineProperty","get","addEventListener","removeEventListener","console","warn","calcAuto","container","margin","x","document","documentElement","marginValue","parseInt","isNaN","clientValue","clientWidth","clientHeight","Math","abs","freeze","enter","tab","delete","esc","space","up","down","left","right","end","home","del","backspace","insert","pageup","pagedown","shift","ScrollToTargetJSInterop","constructor","handle","options","this","activeStack","root","rootSelector","querySelector","autoRootMargin","rootMarginBottom","rootMarginTop","rootMarginLeft","rootMarginRight","rootMargin","threshold","formatToStandardOptions","observe","id","el","getElementById","observer","IntersectionObserver","entries","some","isIntersecting","push","includes","splice","indexOf","invokeMethodAsync","length","unobserve","dispose","init"],"mappings":"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"} \ No newline at end of file diff --git a/src/Masa.Blazor/wwwroot/js/intersect.js b/src/Masa.Blazor/wwwroot/js/intersect.js index 009d5cc93a..7f7e125ab2 100644 --- a/src/Masa.Blazor/wwwroot/js/intersect.js +++ b/src/Masa.Blazor/wwwroot/js/intersect.js @@ -1,2 +1,2 @@ -function e(e,t,n,o){return new(n||(n=Promise))((function(r,i){function s(e){try{u(o.next(e))}catch(e){i(e)}}function c(e){try{u(o.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,c)}u((o=o.apply(e,t||[])).next())}))}let t=!1;try{if("undefined"!=typeof window){const e=Object.defineProperty({},"passive",{get:()=>{t=!0}});window.addEventListener("testListener",e,e),window.removeEventListener("testListener",e,e)}}catch(e){console.warn(e)}function n(e){const t=e,n={},o=t.getAttributeNames().find((e=>e.startsWith("_bl_")));return o?(n.elementReferenceId=o,n.selector=`[${o}]`):n.selector=function(e){if(e instanceof Element){for(var t=[];e.nodeType===Node.ELEMENT_NODE;){var n=e.nodeName.toLowerCase();if(e.id){n="#"+e.id,t.unshift(n);break}for(var o=e,r=1;o=o.previousElementSibling;)o.nodeName.toLowerCase()==n&&r++;1!=r&&(n+=":nth-of-type("+r+")"),t.unshift(n),e=e.parentNode}return t.join(" > ")}}(t),n.class=t.getAttribute("class"),n}function o(t,o,i){var s;if(!o)throw new Error("the handle cannot be null");if(!t)return void o.dispose();const c=null!==(s=null==i?void 0:i.once)&&void 0!==s&&s,u=function(e){if(!e)return null;return{rootMargin:e.rootMargin,root:e.rootSelector?document.querySelector(e.rootSelector):null,threshold:e.threshold}}(i),a=new IntersectionObserver(((i=[],s)=>e(this,void 0,void 0,(function*(){const e=i.map((e=>({isIntersecting:e.isIntersecting,target:n(e.target)}))),s=e.some((e=>e.isIntersecting));c&&!s||(yield o.invokeMethodAsync("Invoke",{isIntersecting:s,entries:e})),s&&c&&r(t)}))),u);t._observe=Object(t._observe),t._observe={handle:o,observer:a},a.observe(t)}function r(e){if(!e)return;const t=e._observe;t&&(t.observer.unobserve(e),t.handle.dispose(),delete e._observe)}function i(e,t,n){if(e){const r=document.querySelector(e);r&&o(r,t,n)}}function s(e){if(e){const t=document.querySelector(e);t&&r(t)}}Object.freeze({enter:13,tab:9,delete:46,esc:27,space:32,up:38,down:40,left:37,right:39,end:35,home:36,del:46,backspace:8,insert:45,pageup:33,pagedown:34,shift:16});export{o as observe,i as observeSelector,r as unobserve,s as unobserveSelector}; +function e(e,t,o,n){return new(o||(o=Promise))((function(r,i){function s(e){try{c(n.next(e))}catch(e){i(e)}}function a(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))}let t=!1;try{if("undefined"!=typeof window){const e=Object.defineProperty({},"passive",{get:()=>{t=!0}});window.addEventListener("testListener",e,e),window.removeEventListener("testListener",e,e)}}catch(e){console.warn(e)}function o(e){const t=e,o={},n=t.getAttributeNames().find((e=>e.startsWith("_bl_")));return n?(o.elementReferenceId=n,o.selector=`[${n}]`):o.selector=function(e){if(e instanceof Element){for(var t=[];e.nodeType===Node.ELEMENT_NODE;){var o=e.nodeName.toLowerCase();if(e.id){o="#"+e.id,t.unshift(o);break}for(var n=e,r=1;n=n.previousElementSibling;)n.nodeName.toLowerCase()==o&&r++;1!=r&&(o+=":nth-of-type("+r+")"),t.unshift(o),e=e.parentNode}return t.join(" > ")}}(t),o.class=t.getAttribute("class"),o}function n(t,n,i){var s;if(!n)throw new Error("the handle cannot be null");if(!t)return void n.dispose();if(t._observe)return;const c=null!==(s=null==i?void 0:i.once)&&void 0!==s&&s,u=a(i),f=new IntersectionObserver(((i=[],s)=>e(this,void 0,void 0,(function*(){const e=i.map((e=>({isIntersecting:e.isIntersecting,target:o(e.target)}))),s=e.some((e=>e.isIntersecting));c&&!s||(yield n.invokeMethodAsync("Invoke",{isIntersecting:s,entries:e})),s&&c&&r(t)}))),u);t._observe=Object(t._observe),t._observe={handle:n,observer:f},f.observe(t)}function r(e){if(!e)return;const t=e._observe;t&&(t.observer.unobserve(e),t.handle.dispose(),delete e._observe)}function i(e,t,o){if(e){const r=document.querySelector(e);r&&n(r,t,o)}}function s(e){if(e){const t=document.querySelector(e);t&&r(t)}}function a(e){if(!e)return null;const t=e.rootSelector?document.querySelector(e.rootSelector):null;return"None"!==e.autoRootMargin&&("Top"===e.autoRootMargin&&"0px"!==e.rootMarginBottom?e.rootMarginTop=c(t,e.rootMarginBottom,!1)+"px":"Right"===e.autoRootMargin&&"0px"!==e.rootMarginLeft?e.rootMarginRight=c(t,e.rootMarginLeft,!1)+"px":"Bottom"===e.autoRootMargin&&"0px"!==e.rootMarginTop?e.rootMarginBottom=c(t,e.rootMarginTop,!1)+"px":"Left"===e.autoRootMargin&&"0px"!==e.rootMarginRight&&(e.rootMarginLeft=c(t,e.rootMarginRight,!1)+"px")),{rootMargin:`${e.rootMarginTop} ${e.rootMarginRight} ${e.rootMarginBottom} ${e.rootMarginLeft}`,root:t,threshold:e.threshold}}function c(e,t,o){e=e||document.documentElement;const n=parseInt(t);if(isNaN(n))return 0;var r=o?e.clientWidth:e.clientHeight;return Math.abs(n)-r}Object.freeze({enter:13,tab:9,delete:46,esc:27,space:32,up:38,down:40,left:37,right:39,end:35,home:36,del:46,backspace:8,insert:45,pageup:33,pagedown:34,shift:16});export{a as formatToStandardOptions,n as observe,i as observeSelector,r as unobserve,s as unobserveSelector}; //# sourceMappingURL=intersect.js.map diff --git a/src/Masa.Blazor/wwwroot/js/intersect.js.map b/src/Masa.Blazor/wwwroot/js/intersect.js.map index cb8fdcbd04..ac1bae4bff 100644 --- a/src/Masa.Blazor/wwwroot/js/intersect.js.map +++ b/src/Masa.Blazor/wwwroot/js/intersect.js.map @@ -1 +1 @@ -{"version":3,"file":"intersect.js","sources":["../../../BlazorComponent/src/Component/BlazorComponent.Web/node_modules/tslib/tslib.es6.js","../../../BlazorComponent/src/Component/BlazorComponent.Web/src/utils/helper.ts","../../../BlazorComponent/src/Component/BlazorComponent.Web/src/mixins/intersect/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.push(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.push(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export function addOnceEventListener (\r\n el: EventTarget,\r\n eventName: string,\r\n cb: (event: Event) => void,\r\n options: boolean | AddEventListenerOptions = false\r\n): void {\r\n const once = (event: Event) => {\r\n cb(event)\r\n el.removeEventListener(eventName, once, options)\r\n }\r\n\r\n el.addEventListener(eventName, once, options)\r\n}\r\n\r\nlet passiveSupported = false\r\ntry {\r\n if (typeof window !== 'undefined') {\r\n const testListenerOpts = Object.defineProperty({}, 'passive', {\r\n get: () => {\r\n passiveSupported = true\r\n },\r\n })\r\n\r\n window.addEventListener('testListener' as any, testListenerOpts as any, testListenerOpts)\r\n window.removeEventListener('testListener' as any, testListenerOpts as any, testListenerOpts)\r\n }\r\n} catch (e) { console.warn(e) } /* eslint-disable-line no-console */\r\nexport { passiveSupported }\r\n\r\nexport function addPassiveEventListener (\r\n el: EventTarget,\r\n event: string,\r\n cb: ((e: any) => void),\r\n options: {}\r\n): void {\r\n el.addEventListener(event, cb, passiveSupported ? options : false)\r\n}\r\n\r\nexport function getZIndex (el?: Element | null): number {\r\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\r\n\r\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\r\n\r\n if (!index) return getZIndex(el.parentNode as Element)\r\n return index\r\n}\r\n\r\n// KeyboardEvent.keyCode aliases\r\nexport const keyCodes = Object.freeze({\r\n enter: 13,\r\n tab: 9,\r\n delete: 46,\r\n esc: 27,\r\n space: 32,\r\n up: 38,\r\n down: 40,\r\n left: 37,\r\n right: 39,\r\n end: 35,\r\n home: 36,\r\n del: 46,\r\n backspace: 8,\r\n insert: 45,\r\n pageup: 33,\r\n pagedown: 34,\r\n shift: 16,\r\n})\r\n\r\n/** Polyfill for Event.prototype.composedPath */\r\nexport function composedPath (e: Event): EventTarget[] {\r\n if (e.composedPath) return e.composedPath()\r\n\r\n const path = []\r\n let el = e.target as Element\r\n\r\n while (el) {\r\n path.push(el)\r\n\r\n if (el.tagName === 'HTML') {\r\n path.push(document)\r\n path.push(window)\r\n\r\n return path\r\n }\r\n\r\n el = el.parentElement!\r\n }\r\n return path\r\n}\r\n\r\nexport function getBlazorId(el) {\r\n if (!el) {\r\n return null;\r\n }\r\n let _bl_ = el.getAttributeNames().find(a => a.startsWith('_bl_'))\r\n if (_bl_) {\r\n _bl_ = _bl_.substring(4);\r\n }\r\n\r\n return _bl_;\r\n}\r\n\r\nexport function getElementSelector(el) {\r\n if (!(el instanceof Element))\r\n return;\r\n var path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n var selector = el.nodeName.toLowerCase();\r\n if (el.id) {\r\n selector = '#' + el.id;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n var sib = el, nth = 1;\r\n while (sib = sib.previousElementSibling) {\r\n if (sib.nodeName.toLowerCase() == selector)\r\n nth++;\r\n }\r\n if (nth != 1)\r\n selector += \":nth-of-type(\" + nth + \")\";\r\n }\r\n path.unshift(selector);\r\n el = el.parentNode;\r\n }\r\n return path.join(\" > \");\r\n}\r\n\r\nexport function getEventTarget(target: HTMLElement | EventTarget) {\r\n const el = target as HTMLElement;\r\n const eventTarget: MbEventTarget = {};\r\n const elementReferenceId = el\r\n .getAttributeNames()\r\n .find((a) => a.startsWith(\"_bl_\"));\r\n if (elementReferenceId) {\r\n eventTarget.elementReferenceId = elementReferenceId;\r\n eventTarget.selector = `[${elementReferenceId}]`;\r\n } else {\r\n eventTarget.selector = getElementSelector(el);\r\n }\r\n\r\n eventTarget.class = el.getAttribute(\"class\");\r\n\r\n return eventTarget;\r\n}\r\n\r\nexport function getDom(elOrString: Element | string | undefined) {\r\n let element: HTMLElement;\r\n\r\n try {\r\n if (!elOrString) {\r\n element = document.body;\r\n } else if (typeof elOrString === \"string\") {\r\n if (elOrString === \"document\") {\r\n element = document.documentElement;\r\n } else if (elOrString.indexOf(\"__.__\") > 0) {\r\n // for example: el__.__parentElement\r\n let array = elOrString.split(\"__.__\");\r\n let i = 0;\r\n let el = document.querySelector(array[i++]);\r\n\r\n if (el) {\r\n while (array[i]) {\r\n el = el[array[i]];\r\n i++;\r\n }\r\n }\r\n\r\n if (el instanceof HTMLElement) {\r\n element = el;\r\n }\r\n } else {\r\n element = document.querySelector(elOrString);\r\n }\r\n } else {\r\n element = elOrString as HTMLElement;\r\n }\r\n\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n\r\n return element;\r\n}\r\n\r\nexport const canUseDom = !!(\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n window.document &&\r\n window.document.createElement\r\n)\r\n\r\nexport function convertToUnit (str: number, unit?: string): string\r\nexport function convertToUnit (str: string | number | null | undefined, unit?: string): string | undefined\r\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\r\n if (str == null || str === '') {\r\n return undefined\r\n } else if (isNaN(+str!)) {\r\n return String(str)\r\n } else if (!isFinite(+str!)) {\r\n return undefined\r\n } else {\r\n return `${Number(str)}${unit}`\r\n }\r\n}","import { getEventTarget } from \"utils/helper\";\r\n\r\ninterface IntersectionObserverOptions {\r\n rootSelector?: string;\r\n rootMargin?: string;\r\n threshold: number[];\r\n once: boolean;\r\n}\r\n\r\nfunction observe(\r\n el: HTMLElement,\r\n handle: DotNet.DotNetObject,\r\n options?: IntersectionObserverOptions\r\n) {\r\n if (!handle) {\r\n throw new Error(\"the handle cannot be null\");\r\n }\r\n\r\n if (!el) {\r\n handle.dispose();\r\n return;\r\n }\r\n\r\n const once = options?.once ?? false;\r\n const standardOptions = formatToStandardOptions(options);\r\n\r\n const observer = new IntersectionObserver(\r\n async (\r\n entries: IntersectionObserverEntry[] = [],\r\n observer: IntersectionObserver\r\n ) => {\r\n const computedEntries = entries.map(entry => ({\r\n isIntersecting: entry.isIntersecting,\r\n target: getEventTarget(entry.target)\r\n }));\r\n\r\n const isIntersecting = computedEntries.some(e => e.isIntersecting);\r\n\r\n if (!once || isIntersecting) {\r\n await handle.invokeMethodAsync(\"Invoke\", { isIntersecting, entries: computedEntries });\r\n }\r\n\r\n if (isIntersecting && once) {\r\n unobserve(el);\r\n }\r\n },\r\n standardOptions\r\n );\r\n\r\n el[\"_observe\"] = Object(el[\"_observe\"]);\r\n el[\"_observe\"] = { handle, observer };\r\n\r\n observer.observe(el);\r\n}\r\n\r\nfunction unobserve(el: HTMLElement) {\r\n if (!el) return;\r\n\r\n const observe = el[\"_observe\"];\r\n if (!observe) return;\r\n\r\n observe.observer.unobserve(el);\r\n observe.handle.dispose();\r\n delete el[\"_observe\"];\r\n}\r\n\r\nfunction observeSelector(\r\n selector: string,\r\n handle: DotNet.DotNetObject,\r\n options?: IntersectionObserverOptions\r\n) {\r\n if (selector) {\r\n const el = document.querySelector(selector) as HTMLElement;\r\n el && observe(el, handle, options);\r\n }\r\n}\r\n\r\nfunction unobserveSelector(selector: string) {\r\n if (selector) {\r\n const el = document.querySelector(selector) as HTMLElement;\r\n el && unobserve(el);\r\n }\r\n}\r\n\r\nfunction formatToStandardOptions(\r\n options?: IntersectionObserverOptions\r\n): IntersectionObserverInit | null {\r\n if (!options) {\r\n return null;\r\n }\r\n\r\n return {\r\n rootMargin: options.rootMargin,\r\n root: options.rootSelector\r\n ? document.querySelector(options.rootSelector)\r\n : null,\r\n threshold: options.threshold,\r\n };\r\n}\r\n\r\nexport { observe, unobserve, observeSelector, unobserveSelector };\r\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","passiveSupported","window","testListenerOpts","Object","defineProperty","get","addEventListener","removeEventListener","console","warn","getEventTarget","target","el","eventTarget","elementReferenceId","getAttributeNames","find","a","startsWith","selector","Element","path","nodeType","Node","ELEMENT_NODE","nodeName","toLowerCase","id","unshift","sib","nth","previousElementSibling","parentNode","join","getElementSelector","class","getAttribute","observe","handle","options","Error","dispose","once","_a","standardOptions","rootMargin","root","rootSelector","document","querySelector","threshold","formatToStandardOptions","observer","IntersectionObserver","entries","this","computedEntries","map","entry","isIntersecting","some","invokeMethodAsync","unobserve","observeSelector","unobserveSelector","freeze","enter","tab","delete","esc","space","up","down","left","right","end","home","del","backspace","insert","pageup","pagedown","shift"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"intersect.js","sources":["../../../BlazorComponent/src/Component/BlazorComponent.Web/node_modules/tslib/tslib.es6.js","../../../BlazorComponent/src/Component/BlazorComponent.Web/src/utils/helper.ts","../../../BlazorComponent/src/Component/BlazorComponent.Web/src/mixins/intersect/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.push(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.push(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export function addOnceEventListener (\r\n el: EventTarget,\r\n eventName: string,\r\n cb: (event: Event) => void,\r\n options: boolean | AddEventListenerOptions = false\r\n): void {\r\n const once = (event: Event) => {\r\n cb(event)\r\n el.removeEventListener(eventName, once, options)\r\n }\r\n\r\n el.addEventListener(eventName, once, options)\r\n}\r\n\r\nlet passiveSupported = false\r\ntry {\r\n if (typeof window !== 'undefined') {\r\n const testListenerOpts = Object.defineProperty({}, 'passive', {\r\n get: () => {\r\n passiveSupported = true\r\n },\r\n })\r\n\r\n window.addEventListener('testListener' as any, testListenerOpts as any, testListenerOpts)\r\n window.removeEventListener('testListener' as any, testListenerOpts as any, testListenerOpts)\r\n }\r\n} catch (e) { console.warn(e) } /* eslint-disable-line no-console */\r\nexport { passiveSupported }\r\n\r\nexport function addPassiveEventListener (\r\n el: EventTarget,\r\n event: string,\r\n cb: ((e: any) => void),\r\n options: {}\r\n): void {\r\n el.addEventListener(event, cb, passiveSupported ? options : false)\r\n}\r\n\r\nexport function getZIndex (el?: Element | null): number {\r\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\r\n\r\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\r\n\r\n if (!index) return getZIndex(el.parentNode as Element)\r\n return index\r\n}\r\n\r\n// KeyboardEvent.keyCode aliases\r\nexport const keyCodes = Object.freeze({\r\n enter: 13,\r\n tab: 9,\r\n delete: 46,\r\n esc: 27,\r\n space: 32,\r\n up: 38,\r\n down: 40,\r\n left: 37,\r\n right: 39,\r\n end: 35,\r\n home: 36,\r\n del: 46,\r\n backspace: 8,\r\n insert: 45,\r\n pageup: 33,\r\n pagedown: 34,\r\n shift: 16,\r\n})\r\n\r\n/** Polyfill for Event.prototype.composedPath */\r\nexport function composedPath (e: Event): EventTarget[] {\r\n if (e.composedPath) return e.composedPath()\r\n\r\n const path = []\r\n let el = e.target as Element\r\n\r\n while (el) {\r\n path.push(el)\r\n\r\n if (el.tagName === 'HTML') {\r\n path.push(document)\r\n path.push(window)\r\n\r\n return path\r\n }\r\n\r\n el = el.parentElement!\r\n }\r\n return path\r\n}\r\n\r\nexport function getBlazorId(el) {\r\n if (!el) {\r\n return null;\r\n }\r\n let _bl_ = el.getAttributeNames().find(a => a.startsWith('_bl_'))\r\n if (_bl_) {\r\n _bl_ = _bl_.substring(4);\r\n }\r\n\r\n return _bl_;\r\n}\r\n\r\nexport function getElementSelector(el) {\r\n if (!(el instanceof Element))\r\n return;\r\n var path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n var selector = el.nodeName.toLowerCase();\r\n if (el.id) {\r\n selector = '#' + el.id;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n var sib = el, nth = 1;\r\n while (sib = sib.previousElementSibling) {\r\n if (sib.nodeName.toLowerCase() == selector)\r\n nth++;\r\n }\r\n if (nth != 1)\r\n selector += \":nth-of-type(\" + nth + \")\";\r\n }\r\n path.unshift(selector);\r\n el = el.parentNode;\r\n }\r\n return path.join(\" > \");\r\n}\r\n\r\nexport function getEventTarget(target: HTMLElement | EventTarget): MbEventTarget {\r\n const el = target as HTMLElement;\r\n const eventTarget: MbEventTarget = {};\r\n const elementReferenceId = el\r\n .getAttributeNames()\r\n .find((a) => a.startsWith(\"_bl_\"));\r\n if (elementReferenceId) {\r\n eventTarget.elementReferenceId = elementReferenceId;\r\n eventTarget.selector = `[${elementReferenceId}]`;\r\n } else {\r\n eventTarget.selector = getElementSelector(el);\r\n }\r\n\r\n eventTarget.class = el.getAttribute(\"class\");\r\n\r\n return eventTarget;\r\n}\r\n\r\nexport function getDom(elOrString: Element | string | undefined) {\r\n let element: HTMLElement;\r\n\r\n try {\r\n if (!elOrString) {\r\n element = document.body;\r\n } else if (typeof elOrString === \"string\") {\r\n if (elOrString === \"document\") {\r\n element = document.documentElement;\r\n } else if (elOrString.indexOf(\"__.__\") > 0) {\r\n // for example: el__.__parentElement\r\n let array = elOrString.split(\"__.__\");\r\n let i = 0;\r\n let el = document.querySelector(array[i++]);\r\n\r\n if (el) {\r\n while (array[i]) {\r\n el = el[array[i]];\r\n i++;\r\n }\r\n }\r\n\r\n if (el instanceof HTMLElement) {\r\n element = el;\r\n }\r\n } else {\r\n element = document.querySelector(elOrString);\r\n }\r\n } else {\r\n element = elOrString as HTMLElement;\r\n }\r\n\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n\r\n return element;\r\n}\r\n\r\nexport const canUseDom = !!(\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n window.document &&\r\n window.document.createElement\r\n)\r\n\r\nexport function convertToUnit (str: number, unit?: string): string\r\nexport function convertToUnit (str: string | number | null | undefined, unit?: string): string | undefined\r\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\r\n if (str == null || str === '') {\r\n return undefined\r\n } else if (isNaN(+str!)) {\r\n return String(str)\r\n } else if (!isFinite(+str!)) {\r\n return undefined\r\n } else {\r\n return `${Number(str)}${unit}`\r\n }\r\n}","import { getEventTarget } from \"utils/helper\";\r\n\r\nexport interface IntersectionObserverOptions {\r\n rootSelector?: string;\r\n rootMarginLeft?: string;\r\n rootMarginRight?: string;\r\n rootMarginTop?: string;\r\n rootMarginBottom?: string;\r\n autoRootMargin: \"None\" | \"Top\" | \"Right\" | \"Bottom\" | \"Left\";\r\n threshold: number[];\r\n once: boolean;\r\n}\r\n\r\nfunction observe(\r\n el: HTMLElement,\r\n handle: DotNet.DotNetObject,\r\n options?: IntersectionObserverOptions\r\n) {\r\n if (!handle) {\r\n throw new Error(\"the handle cannot be null\");\r\n }\r\n\r\n if (!el) {\r\n handle.dispose();\r\n return;\r\n }\r\n\r\n if (el[\"_observe\"]) {\r\n return;\r\n }\r\n\r\n const once = options?.once ?? false;\r\n\r\n const standardOptions = formatToStandardOptions(options);\r\n\r\n const observer = new IntersectionObserver(\r\n async (\r\n entries: IntersectionObserverEntry[] = [],\r\n observer: IntersectionObserver\r\n ) => {\r\n\r\n const computedEntries = entries.map((entry) => ({\r\n isIntersecting: entry.isIntersecting,\r\n target: getEventTarget(entry.target),\r\n }));\r\n\r\n const isIntersecting = computedEntries.some((e) => e.isIntersecting);\r\n\r\n if (!once || isIntersecting) {\r\n await handle.invokeMethodAsync(\"Invoke\", {\r\n isIntersecting,\r\n entries: computedEntries,\r\n });\r\n }\r\n\r\n if (isIntersecting && once) {\r\n unobserve(el);\r\n }\r\n },\r\n standardOptions\r\n );\r\n\r\n el[\"_observe\"] = Object(el[\"_observe\"]);\r\n el[\"_observe\"] = { handle, observer };\r\n\r\n observer.observe(el);\r\n}\r\n\r\nfunction unobserve(el: HTMLElement) {\r\n if (!el) return;\r\n\r\n const observe = el[\"_observe\"];\r\n if (!observe) return;\r\n\r\n observe.observer.unobserve(el);\r\n observe.handle.dispose();\r\n delete el[\"_observe\"];\r\n}\r\n\r\nfunction observeSelector(\r\n selector: string,\r\n handle: DotNet.DotNetObject,\r\n options?: IntersectionObserverOptions\r\n) {\r\n\r\n if (selector) {\r\n const el = document.querySelector(selector) as HTMLElement;\r\n el && observe(el, handle, options);\r\n }\r\n}\r\n\r\nfunction unobserveSelector(selector: string) {\r\n if (selector) {\r\n const el = document.querySelector(selector) as HTMLElement;\r\n el && unobserve(el);\r\n }\r\n}\r\n\r\nexport function formatToStandardOptions(\r\n options?: IntersectionObserverOptions\r\n): IntersectionObserverInit | null {\r\n if (!options) {\r\n return null;\r\n }\r\n\r\n const root: HTMLLIElement = options.rootSelector\r\n ? document.querySelector(options.rootSelector)\r\n : null;\r\n\r\n if (options.autoRootMargin !== \"None\") {\r\n if (\r\n options.autoRootMargin === \"Top\" &&\r\n options.rootMarginBottom !== \"0px\"\r\n ) {\r\n options.rootMarginTop =\r\n calcAuto(root, options.rootMarginBottom, false) + \"px\";\r\n } else if (\r\n options.autoRootMargin === \"Right\" &&\r\n options.rootMarginLeft !== \"0px\"\r\n ) {\r\n options.rootMarginRight =\r\n calcAuto(root, options.rootMarginLeft, false) + \"px\";\r\n } else if (\r\n options.autoRootMargin === \"Bottom\" &&\r\n options.rootMarginTop !== \"0px\"\r\n ) {\r\n options.rootMarginBottom =\r\n calcAuto(root, options.rootMarginTop, false) + \"px\";\r\n } else if (\r\n options.autoRootMargin === \"Left\" &&\r\n options.rootMarginRight !== \"0px\"\r\n ) {\r\n options.rootMarginLeft =\r\n calcAuto(root, options.rootMarginRight, false) + \"px\";\r\n }\r\n }\r\n\r\n return {\r\n rootMargin: `${options.rootMarginTop} ${options.rootMarginRight} ${options.rootMarginBottom} ${options.rootMarginLeft}`,\r\n root,\r\n threshold: options.threshold,\r\n };\r\n}\r\n\r\nfunction calcAuto(container: HTMLElement, margin: string, x: boolean) {\r\n container = container || document.documentElement;\r\n const marginValue = parseInt(margin);\r\n if (isNaN(marginValue)) {\r\n return 0;\r\n }\r\n\r\n var clientValue = x ? container.clientWidth : container.clientHeight;\r\n\r\n return Math.abs(marginValue) - clientValue;\r\n}\r\n\r\nexport { observe, unobserve, observeSelector, unobserveSelector };\r\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","passiveSupported","window","testListenerOpts","Object","defineProperty","get","addEventListener","removeEventListener","console","warn","getEventTarget","target","el","eventTarget","elementReferenceId","getAttributeNames","find","a","startsWith","selector","Element","path","nodeType","Node","ELEMENT_NODE","nodeName","toLowerCase","id","unshift","sib","nth","previousElementSibling","parentNode","join","getElementSelector","class","getAttribute","observe","handle","options","Error","dispose","once","_a","standardOptions","formatToStandardOptions","observer","IntersectionObserver","entries","this","computedEntries","map","entry","isIntersecting","some","invokeMethodAsync","unobserve","observeSelector","document","querySelector","unobserveSelector","root","rootSelector","autoRootMargin","rootMarginBottom","rootMarginTop","calcAuto","rootMarginLeft","rootMarginRight","rootMargin","threshold","container","margin","x","documentElement","marginValue","parseInt","isNaN","clientValue","clientWidth","clientHeight","Math","abs","freeze","enter","tab","delete","esc","space","up","down","left","right","end","home","del","backspace","insert","pageup","pagedown","shift"],"mappings":"AAkHO,SAASA,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAQ,CAAG,MAAOG,GAAKL,EAAOK,GAAO,CAC3F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAU,CAAC,MAAOG,GAAKL,EAAOK,GAAO,CAC9F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAO,KAIhBO,KAAKR,EAAWK,EAAY,CAC9GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OACtE,GACA,CC5GA,IAAIO,GAAmB,EACvB,IACE,GAAsB,oBAAXC,OAAwB,CACjC,MAAMC,EAAmBC,OAAOC,eAAe,CAAA,EAAI,UAAW,CAC5DC,IAAK,KACHL,GAAmB,CAAI,IAI3BC,OAAOK,iBAAiB,eAAuBJ,EAAyBA,GACxED,OAAOM,oBAAoB,eAAuBL,EAAyBA,EAC5E,CACF,CAAC,MAAOR,GAAKc,QAAQC,KAAKf,EAAI,CAqGzB,SAAUgB,EAAeC,GAC7B,MAAMC,EAAKD,EACLE,EAA6B,CAAA,EAC7BC,EAAqBF,EACxBG,oBACAC,MAAMC,GAAMA,EAAEC,WAAW,UAU5B,OATIJ,GACFD,EAAYC,mBAAqBA,EACjCD,EAAYM,SAAW,IAAIL,MAE3BD,EAAYM,SAnCV,SAA6BP,GACjC,GAAMA,aAAcQ,QAApB,CAGA,IADA,IAAIC,EAAO,GACJT,EAAGU,WAAaC,KAAKC,cAAc,CACxC,IAAIL,EAAWP,EAAGa,SAASC,cAC3B,GAAId,EAAGe,GAAI,CACTR,EAAW,IAAMP,EAAGe,GACpBN,EAAKO,QAAQT,GACb,KACD,CAEC,IADA,IAAIU,EAAMjB,EAAIkB,EAAM,EACbD,EAAMA,EAAIE,wBACXF,EAAIJ,SAASC,eAAiBP,GAChCW,IAEO,GAAPA,IACFX,GAAY,gBAAkBW,EAAM,KAExCT,EAAKO,QAAQT,GACbP,EAAKA,EAAGoB,UACT,CACD,OAAOX,EAAKY,KAAK,MApBR,CAqBX,CAY2BC,CAAmBtB,GAG5CC,EAAYsB,MAAQvB,EAAGwB,aAAa,SAE7BvB,CACT,CClIA,SAASwB,EACPzB,EACA0B,EACAC,SAEA,IAAKD,EACH,MAAM,IAAIE,MAAM,6BAGlB,IAAK5B,EAEH,YADA0B,EAAOG,UAIT,GAAI7B,EAAa,SACf,OAGF,MAAM8B,EAAwB,QAAjBC,EAAAJ,aAAA,EAAAA,EAASG,YAAQ,IAAAC,GAAAA,EAExBC,EAAkBC,EAAwBN,GAE1CO,EAAW,IAAIC,sBACnB,CACEC,EAAuC,GACvCF,IACEhE,EAAAmE,UAAA,OAAA,GAAA,YAEF,MAAMC,EAAkBF,EAAQG,KAAKC,IAAW,CAC9CC,eAAgBD,EAAMC,eACtB1C,OAAQD,EAAe0C,EAAMzC,YAGzB0C,EAAiBH,EAAgBI,MAAM5D,GAAMA,EAAE2D,iBAEhDX,IAAQW,UACLf,EAAOiB,kBAAkB,SAAU,CACvCF,iBACAL,QAASE,KAITG,GAAkBX,GACpBc,EAAU5C,EAEd,KACAgC,GAGFhC,EAAa,SAAIT,OAAOS,EAAa,UACrCA,EAAa,SAAI,CAAE0B,SAAQQ,YAE3BA,EAAST,QAAQzB,EACnB,CAEA,SAAS4C,EAAU5C,GACjB,IAAKA,EAAI,OAET,MAAMyB,EAAUzB,EAAa,SACxByB,IAELA,EAAQS,SAASU,UAAU5C,GAC3ByB,EAAQC,OAAOG,iBACR7B,EAAa,SACtB,CAEA,SAAS6C,EACPtC,EACAmB,EACAC,GAGA,GAAIpB,EAAU,CACZ,MAAMP,EAAK8C,SAASC,cAAcxC,GAClCP,GAAMyB,EAAQzB,EAAI0B,EAAQC,EAC3B,CACH,CAEA,SAASqB,EAAkBzC,GACzB,GAAIA,EAAU,CACZ,MAAMP,EAAK8C,SAASC,cAAcxC,GAClCP,GAAM4C,EAAU5C,EACjB,CACH,CAEM,SAAUiC,EACdN,GAEA,IAAKA,EACH,OAAO,KAGT,MAAMsB,EAAsBtB,EAAQuB,aAChCJ,SAASC,cAAcpB,EAAQuB,cAC/B,KA8BJ,MA5B+B,SAA3BvB,EAAQwB,iBAEmB,QAA3BxB,EAAQwB,gBACqB,QAA7BxB,EAAQyB,iBAERzB,EAAQ0B,cACNC,EAASL,EAAMtB,EAAQyB,kBAAkB,GAAS,KAEzB,UAA3BzB,EAAQwB,gBACmB,QAA3BxB,EAAQ4B,eAER5B,EAAQ6B,gBACNF,EAASL,EAAMtB,EAAQ4B,gBAAgB,GAAS,KAEvB,WAA3B5B,EAAQwB,gBACkB,QAA1BxB,EAAQ0B,cAER1B,EAAQyB,iBACNE,EAASL,EAAMtB,EAAQ0B,eAAe,GAAS,KAEtB,SAA3B1B,EAAQwB,gBACoB,QAA5BxB,EAAQ6B,kBAER7B,EAAQ4B,eACND,EAASL,EAAMtB,EAAQ6B,iBAAiB,GAAS,OAIhD,CACLC,WAAY,GAAG9B,EAAQ0B,iBAAiB1B,EAAQ6B,mBAAmB7B,EAAQyB,oBAAoBzB,EAAQ4B,iBACvGN,OACAS,UAAW/B,EAAQ+B,UAEvB,CAEA,SAASJ,EAASK,EAAwBC,EAAgBC,GACxDF,EAAYA,GAAab,SAASgB,gBAClC,MAAMC,EAAcC,SAASJ,GAC7B,GAAIK,MAAMF,GACR,OAAO,EAGT,IAAIG,EAAcL,EAAIF,EAAUQ,YAAcR,EAAUS,aAExD,OAAOC,KAAKC,IAAIP,GAAeG,CACjC,CD1GwB3E,OAAOgF,OAAO,CACpCC,MAAO,GACPC,IAAK,EACLC,OAAQ,GACRC,IAAK,GACLC,MAAO,GACPC,GAAI,GACJC,KAAM,GACNC,KAAM,GACNC,MAAO,GACPC,IAAK,GACLC,KAAM,GACNC,IAAK,GACLC,UAAW,EACXC,OAAQ,GACRC,OAAQ,GACRC,SAAU,GACVC,MAAO"} \ No newline at end of file