diff --git a/honk/Makefile b/honk/Makefile index 7b0732cc3..85b5fd2e9 100644 --- a/honk/Makefile +++ b/honk/Makefile @@ -3,16 +3,17 @@ include $(TOPDIR)/rules.mk PKG_NAME:=honk -PKG_VERSION:=0.0.1_beta83 -PKG_RELEASE:=5 +PKG_VERSION:=2026.10.3_pre2 +PKG_RELEASE:=6 # Raw upstream release tag. It keeps the dots in qualifiers (e.g. v0.0.1.beta.49) # because that is what the GitHub release asset name uses. -HONK_RELEASE_TAG:=v0.0.1.beta.83 +HONK_RELEASE_TAG:=debug.2026.10.3.native-api.2 +HONK_ASSET_TAG:=debug # SHA256 of each release tarball, kept in sync by scripts/update_honk_version.sh. -HONK_HASH_X86_64:=0d440bc094a4ceead94a897647b3c598f6ca7630c65a1675ed137e3d9c1c0c56 -HONK_HASH_AARCH64:=bb8c893c676f8f245332598ae701f50b803b922aef308dded4d0805c67692ab3 +HONK_HASH_X86_64:=7ce4585150c46e95829f916f843675ce3471fee48e13a012c0f3652028f137dd +HONK_HASH_AARCH64:=ee5ff000688237d1b1bde701f933736dfc7ed479cb84fdf2bddc6d64c95c33ab PKG_LICENSE:=AGPL-3.0-only PKG_LICENSE_FILE:=LICENSE @@ -29,10 +30,10 @@ endif # Default to the stock-malloc build: lower RSS high-water on small gateways. # Use an empty suffix to switch back to the mimalloc build (faster QUIC). HONK_SUFFIX:=-stock -HONK_ASSET:=honk-core-$(HONK_RELEASE_TAG)-$(HONK_TARGET)$(HONK_SUFFIX).tar.gz +HONK_ASSET:=honk-core-$(HONK_ASSET_TAG)-$(HONK_TARGET)$(HONK_SUFFIX).tar.gz PKG_SOURCE:=$(HONK_ASSET) -PKG_SOURCE_URL:=https://github.com/daeuniverse/honk/releases/download/$(HONK_RELEASE_TAG)/ +PKG_SOURCE_URL:=https://github.com/Glassyiris/honk/releases/download/$(HONK_RELEASE_TAG)/ PKG_HASH:=skip include $(INCLUDE_DIR)/package.mk @@ -42,7 +43,7 @@ define Package/honk CATEGORY:=Network SUBMENU:=Web Servers/Proxies TITLE:=honk - eBPF transparent proxy engine (dae-compatible) - URL:=https://github.com/daeuniverse/honk + URL:=https://github.com/Glassyiris/honk DEPENDS:=@(x86_64||aarch64) \ +ca-bundle +ip-full \ +kmod-sched-core +kmod-sched-bpf +kmod-veth +kmod-nft-queue \ diff --git a/luci-app-adguardhome/.official_channel b/luci-app-adguardhome/.official_channel index 49f33a8c6..d7025695e 100644 --- a/luci-app-adguardhome/.official_channel +++ b/luci-app-adguardhome/.official_channel @@ -1 +1 @@ -both +release diff --git a/luci-app-adguardhome/.official_version_release b/luci-app-adguardhome/.official_version_release index a9b889cb7..3f73b0d48 100644 --- a/luci-app-adguardhome/.official_version_release +++ b/luci-app-adguardhome/.official_version_release @@ -1 +1 @@ -26.273.20498~1fcad1e +26.275.27740~2858f8d diff --git a/luci-app-fchomo/docs/Ruleset-URI-Scheme.md b/luci-app-fchomo/docs/Ruleset-URI-Scheme.md index 498fabc15..eed71db56 100644 --- a/luci-app-fchomo/docs/Ruleset-URI-Scheme.md +++ b/luci-app-fchomo/docs/Ruleset-URI-Scheme.md @@ -32,7 +32,9 @@ The shortest format is `/`. + `behav`: Required. Available values ​​refer to **behavior**. + `sec`: Optional. Available under **remote**. Available values ​​refer to **interval**. + `rawq`: Optional. Available under **remote**. Available values ​​refer to **rawQuery**. ++ `hdr`: Optional. Available under **remote**. Available values ​​refer to **header**. + `fill`: Optional. Available under **local**. Available values ​​refer to **filler**. ++ `bpath`: Optional. Available when **format** is `mrs`. Available values ​​refer to **bundlePath**. #### format @@ -51,13 +53,23 @@ The update interval for the Rule set, in seconds or `/^(\d+)(s|m|h|d)?$/`. This parameter is required if the original link contains a url query.\ Encrypt the part `key1=value1&key2=value2` after `?` in the original link with `encodeURIComponent` and use it as the payload of this parameter. +#### header + +JSON format HTTP request headers. Example: `{"User-Agent":["mihomo/1.18.3"]}`.\ +Must be encoded as Base64edStr. + #### filler Base64edStr format file content. +#### bundlePath + +The `mrs` file path in `BundleMRS.7z`.\ +Need encrypt the original content with `encodeURIComponent`. + ### Base64edStr -Generation steps: +Encoded steps: 0. Payload only supports `string` format. 1. Compress payload using `gzip`. (Optional) diff --git a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/ruleset.js b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/ruleset.js index 164de6f67..9758d8eef 100644 --- a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/ruleset.js +++ b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/ruleset.js @@ -59,6 +59,8 @@ async function parseRulesetLink(section_type, uri) { var behavior = url.searchParams.get('behav'); var interval = url.searchParams.get('sec'); var rawquery = url.searchParams.get('rawq'); + var header = url.searchParams.get('hdr'); + var path_in_bundle = url.searchParams.get('bpath'); var name = hm.toUciname(decodeURI(url.pathname).split('/').pop()); if (filefmt.test(format) && filebehav.test(behavior)) { @@ -69,7 +71,11 @@ async function parseRulesetLink(section_type, uri) { format: format, behavior: behavior, url: String.format('%s://%s', uri[0], fullpath), + header: header?.match(/^H4sI/) // Gzip magic + Deflate + ? await hm.decompressGzip(header, true) + : hm.decodeBase64(header, true), interval: interval, + path_in_bundle: path_in_bundle ? decodeURIComponent(path_in_bundle) : null, id: hm.calcStringMD5(String.format('http://%s', fullpath)) }; } @@ -80,6 +86,7 @@ async function parseRulesetLink(section_type, uri) { var format = url.searchParams.get('fmt'); var behavior = url.searchParams.get('behav'); var filler = url.searchParams.get('fill'); + var path_in_bundle = url.searchParams.get('bpath'); var path = decodeURI(url.pathname); var name = hm.toUciname(path.split('/').pop()); @@ -89,6 +96,7 @@ async function parseRulesetLink(section_type, uri) { type: 'file', format: format, behavior: behavior, + path_in_bundle: path_in_bundle ? decodeURIComponent(path_in_bundle) : null, id: hm.calcStringMD5(String.format('file://%s%s', url.host, url.pathname)) }; if (filler?.match(/^H4sI/)) // Gzip magic + Deflate @@ -209,7 +217,8 @@ return view.extend({ .format('file, http, inline', 'text, yaml, mrs') + _('Please refer to %s for link format standards.') .format(rulesetdoc, _('Ruleset-URI-Scheme'))); - o.placeholder = 'http(s)://github.com/ACL4SSR/ACL4SSR/raw/refs/heads/master/Clash/Providers/BanAD.yaml?fmt=yaml&behav=classical&rawq=good%3Djob#BanAD\n' + + o.placeholder = 'https://github.com/ACL4SSR/ACL4SSR/raw/refs/heads/master/Clash/Providers/BanAD.yaml?fmt=yaml&behav=classical&rawq=good%3Djob#BanAD\n' + + 'https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/cn.mrs?fmt=mrs&behav=domain&bpath=geo%2Fgeosite%2Fcn.mrs&hdr=eyJVc2VyLUFnZW50IjpbIm1paG9tby8xLjE4LjMiXX0K#CN-Site\n' + 'file:///example.txt?fmt=text&behav=domain&fill=LmNuCg#CN%20TLD\n' + 'inline://LSAnLmhrJwoK?behav=domain#HK%20TLD\n' + 'inline://H4sIAAAAAAACA9NVUNcrKVcHANszKpEHAAAA?behav=domain#TW%20TLD\n'; @@ -387,7 +396,7 @@ return view.extend({ o = s.option(form.Value, 'path_in_bundle', _('Path in bundle'), _('Path in bundle: %s').format('BundleMRS.7z')); o.placeholder = 'geo/geosite/cn.mrs'; - o.depends({'type': /^(file|http)$/, 'format': 'mrs'}); + o.depends('format', 'mrs'); o.modalonly = true; o = s.option(form.Value, 'size_limit', _('Size limit'), diff --git a/luci-app-honk/Makefile b/luci-app-honk/Makefile index 1cbf7a41c..b71f082c1 100644 --- a/luci-app-honk/Makefile +++ b/luci-app-honk/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-honk PKG_VERSION:=1.1.4 -PKG_RELEASE:=10 +PKG_RELEASE:=11 LUCI_TITLE:=LuCI support for honk LUCI_PKGARCH:=all diff --git a/luci-app-honk/root/etc/honk/doona/THIRD-PARTY-NOTICES.txt b/luci-app-honk/root/etc/honk/doona/THIRD-PARTY-NOTICES.txt index ac43f82b5..6c062dbd7 100644 --- a/luci-app-honk/root/etc/honk/doona/THIRD-PARTY-NOTICES.txt +++ b/luci-app-honk/root/etc/honk/doona/THIRD-PARTY-NOTICES.txt @@ -123,7 +123,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@codemirror/state 6.7.5 (MIT) — LICENSE +@codemirror/state 6.7.6 (MIT) — LICENSE ======================================================================== MIT License @@ -148,7 +148,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@codemirror/view 6.43.12 (MIT) — LICENSE +@codemirror/view 6.43.13 (MIT) — LICENSE ======================================================================== MIT License @@ -173,6 +173,202 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +@fontsource-variable/noto-sans-sc 5.3.0 (OFL-1.1) — LICENSES/OFL-1.1.txt +======================================================================== +Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. + +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to +provide a free and open framework in which fonts may be shared and +improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software +components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, +deleting, or substituting -- in part or in whole -- any of the +components of the Original Version, by changing formats or by porting +the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, +modify, redistribute, and sell modified and unmodified copies of the +Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the +corresponding Copyright Holder. This restriction only applies to the +primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created using +the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + + +@fontsource-variable/noto-sans-tc 5.3.0 (OFL-1.1) — LICENSES/OFL-1.1.txt +======================================================================== +Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. + +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to +provide a free and open framework in which fonts may be shared and +improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software +components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, +deleting, or substituting -- in part or in whole -- any of the +components of the Original Version, by changing formats or by porting +the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, +modify, redistribute, and sell modified and unmodified copies of the +Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the +corresponding Copyright Holder. This restriction only applies to the +primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created using +the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + + @internationalized/date 3.12.4 (Apache-2.0) — LICENSE ======================================================================== Apache License @@ -813,7 +1009,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@lezer/highlight 1.2.3 (MIT) — LICENSE +@lezer/highlight 1.2.5 (MIT) — LICENSE ======================================================================== MIT License @@ -888,6 +1084,214 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +@react-aria/optimize-locales-plugin 2.0.2 (Apache-2.0) — LICENSE +======================================================================== +Only the empty.js locale helper emitted by the plugin ships. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Adobe + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + @react-types/shared 3.36.1 (Apache-2.0) — LICENSE ======================================================================== Apache License diff --git a/luci-app-honk/root/etc/honk/doona/assets/ActionGroup-BU73NzbX.js b/luci-app-honk/root/etc/honk/doona/assets/ActionGroup-BU73NzbX.js deleted file mode 100644 index 565d0962d..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/ActionGroup-BU73NzbX.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e}from"./vendor-react-Bf71BWbF.js";import{u as c,ec as o,eW as x,B as p,ed as u,ee as m,eX as d,c as j}from"./index-BOpK0UVB.js";const a=({action:n})=>e.jsxs(p,{isDisabled:n.isDisabled,isPending:n.isPending,tip:n.reason,onPress:n.onAction,children:[n.icon,n.label]});function $({actions:n,overflowMode:i="collapse"}){if(i==="wrap")return e.jsx(e.Fragment,{children:n.map(l=>e.jsx(a,{action:l},l.id))});const[s,...r]=n;return s?e.jsxs(e.Fragment,{children:[e.jsx(a,{action:s}),r.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"rp-wide-only",children:r.map(l=>e.jsx(a,{action:l},l.id))}),e.jsx("span",{className:"rp-narrow-only",children:e.jsx(b,{actions:r})})]})]}):null}function f({actions:n,label:i}){return e.jsx(u,{"aria-label":i,disabledKeys:n.filter(s=>s.isDisabled||s.isPending).map(s=>s.id),onAction:s=>n.find(r=>r.id===s)?.onAction(),children:n.map(s=>e.jsx(m,{id:s.id,className:j("rp-item plain",s.negative&&"negative"),textValue:s.label,children:e.jsxs("span",{className:"rp-item-text",children:[e.jsx(d,{slot:"label",children:s.label}),s.isDisabled&&s.reason&&e.jsx(d,{slot:"description",className:"desc reason",children:s.reason})]})},s.id))})}function b({actions:n,label:i,small:s,quiet:r}){const l=c(),t=i??l("ui.moreActions");return n.length===0?null:e.jsx(o,{chevron:!1,small:s,quiet:r,label:t,content:e.jsx(f,{actions:n,label:t}),children:e.jsx(x,{})})}export{$ as A,b as M}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AddCircle-0OKZjQ6F.js b/luci-app-honk/root/etc/honk/doona/assets/AddCircle-0OKZjQ6F.js deleted file mode 100644 index 99ac75304..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/AddCircle-0OKZjQ6F.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor-react-Bf71BWbF.js";import{c as t}from"./index-BOpK0UVB.js";function o({className:a,...s}){return r.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:20,viewBox:"0 0 20 20","aria-hidden":"true",focusable:"false",className:t("rp-icon",a),...s,children:r.jsx("path",{fill:"currentColor",d:"M10 1.5a8.5 8.5 0 1 0 0 17 8.5 8.5 0 0 0 0-17m0 15.5a7 7 0 1 1 0-14 7 7 0 0 1 0 14m3.75-7.75h-3v-3a.75.75 0 0 0-1.5 0v3h-3a.75.75 0 0 0 0 1.5h3v3a.75.75 0 0 0 1.5 0v-3h3a.75.75 0 0 0 0-1.5"})})}export{o as A}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AddCircle-prR7q573.js b/luci-app-honk/root/etc/honk/doona/assets/AddCircle-prR7q573.js new file mode 100644 index 000000000..b91f92ce7 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/AddCircle-prR7q573.js @@ -0,0 +1 @@ +import{j as r}from"./vendor-react-64fcanlc.js";import{I as a}from"./index-BgFj_VXE.js";function o(o){return r.jsx(a,{...o,children:r.jsx("path",{fill:"currentColor",d:"M10 1.5a8.5 8.5 0 1 0 0 17 8.5 8.5 0 0 0 0-17m0 15.5a7 7 0 1 1 0-14 7 7 0 0 1 0 14m3.75-7.75h-3v-3a.75.75 0 0 0-1.5 0v3h-3a.75.75 0 0 0 0 1.5h3v3a.75.75 0 0 0 1.5 0v-3h3a.75.75 0 0 0 0-1.5"})})}export{o as A}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AreaChart-8u_BHC3w.js b/luci-app-honk/root/etc/honk/doona/assets/AreaChart-8u_BHC3w.js new file mode 100644 index 000000000..cfdd991db --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/AreaChart-8u_BHC3w.js @@ -0,0 +1 @@ +import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{F as a,H as s}from"./index-BgFj_VXE.js";import{h as n}from"./format-s2EANuUb.js";import{z as o,b8 as i,b9 as l,ba as r,bb as u,bc as h,bd as m,be as c,bf as d}from"./activity-D06xJ7oH.js";import{G as p,C as x}from"./AreaCurve-DQSHOSpG.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./logs-BxISynQ4.js";import"./Select-CkiGmyVC.js";import"./array-C0VuvQyb.js";const f=[30,60,120,300,600,900,1800,3600,7200,21600,43200,86400].map(e=>1e3*e);function b(t,a){const[s,n]=e.useState([]),o=e.useRef("");return e.useLayoutEffect(()=>{const e=[a,...t].join("\0");if(e===o.current)return;o.current=e;const s=document.createElement("span");s.className="rp-area-tick",Object.assign(s.style,{position:"absolute",top:"-20000px",whiteSpace:"pre"}),document.body.appendChild(s),n(t.map(e=>{s.textContent=e;const{width:t,height:a}=s.getBoundingClientRect();return{width:t,height:a}})),s.remove()},[t,a]),s}function g({label:g,series:M,timestamps:y,fmt:j,locale:v,height:w=150,baseline:k="zero",window:C,fill:D,bare:F=!1,inset:N=2}){const S=a(),$=o(),L=e.useId(),[T,A]=s(Math.round,120),{tip:B,showAt:E,hide:P}=i(),[z,I]=e.useState(null),H=z&&z.indexvoid 0!==O&&void 0!==R?function(e,t){const a=t-e,s=f.find(e=>a/e<=6)??f[f.length-1],n=s>=864e5?6e4*new Date(t).getTimezoneOffset():0,o=[];for(let i=Math.ceil((e-n)/s)*s+n;i<=t;i+=s)i-e>=.04*a&&t-i>=.04*a&&o.push(i);return{ticks:o,step:s}}(O,R):void 0,[O,R]),G=W?W.step<6e4:K<18e4,_=W?W.step>=864e5:K>1296e5,q=e.useMemo(()=>new Intl.DateTimeFormat(v,_?{month:"numeric",day:"numeric"}:G?{hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}:{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),[v,G,_]),{yDomain:J,yTicks:Q}=e.useMemo(()=>{const e=M.flatMap(e=>e.values.filter(e=>null!==e));let t=0,a=(e=>{const t=Math.pow(10,Math.floor(Math.log10(e))),a=e/t;return([1,1.2,1.5,2,2.5,3,4,5,6,8,10].find(e=>a<=e)??10)*t})(1.08*Math.max(1,...e));if("auto"===k&&e.length){const s=Math.min(...e),n=Math.max(...e),o=(e=>{const t=Math.pow(10,Math.floor(Math.log10(Math.max(e,1e-9)))),a=e/t;return(a<=1?.2:a<=2?.5:a<=5?1:2)*t})(Math.max(n-s,.02*n,1));t=Math.max(0,Math.floor(s/o)*o-o),a=Math.ceil(n/o)*o+o}return{yDomain:[t,a],yTicks:"auto"===k?[t,(t+a)/2,a]:[a/2,a]}},[M,k]),U=e.useMemo(()=>{const e=y.length-1;return W?W.ticks:[...new Set((G?[0,Math.round(e/2),e]:[0,Math.round(e/3),Math.round(2*e/3),e]).map(e=>y[e]))]},[W,G,y]),V=e.useMemo(()=>void 0!==O&&void 0!==R?[O,R]:[Math.min(...y),Math.max(...y)],[O,R,y]),X=A?.width??0,Y=A?.height??w,Z=F?N:20,ee=F?2:8,te=Y-(F?2:30),ae=X-(F?N:64),se=e.useMemo(()=>[Math.min(V[0],...y),Math.max(V[1],...y)],[V,y]),ne=e.useCallback(e=>l(e,se,[Z,ae]),[se,Z,ae]),oe=e.useCallback(e=>l(e,J,[te,ee]),[J,te,ee]),ie=e.useMemo(()=>y.map(ne),[y,ne]),le=e.useMemo(()=>M.map(e=>y.map((t,a)=>null==e.values[a]?null:{x:ie[a],y:oe(e.values[a])})),[M,y,ie,oe]),re={x:Z,y:ee,width:ae-Z,height:te-ee},ue=(e,t)=>I({index:e,y:t}),he=()=>{I(null),P()};e.useLayoutEffect(()=>{null!==H&&M.some(e=>null!=e.values[H])?E({x:ie[H],y:z?.y??(ee+te)/2,width:X,bounds:F&&T.current?r(T.current):re,label:n(v).format(y[H]),lines:M.filter(e=>null!=e.values[H]).sort((e,t)=>e.labelt.label?1:0).map(e=>S("ui.valuePair",{label:e.label,value:j(e.values[H])}))}):P()});const me=u(y.length,ue,he),ce=e.useMemo(()=>U.map(e=>q.format(e)),[U,q]),de=e.useMemo(()=>Q.map(j),[Q,j]),pe=b(ce,v),xe=b(de,v),fe=W?h(U.map(ne),pe.map(e=>e.width),0,X,16,!0):U.map((e,t)=>({index:t,position:ne(e)})),be=h(Q.map(oe),xe.map(e=>e.height),0,Y,5,!1),ge=[...new Set([...(F?Q:be.map(e=>Q[e.index])).map(oe),ee,te])];return t.jsx("div",{ref:T,style:{height:w,width:"100%",flex:D?"1 0 auto":void 0,position:"relative"},onPointerLeave:me.onPointerLeave,children:y.length>0&&A&&t.jsxs(t.Fragment,{children:[t.jsx(m,{tip:B}),t.jsxs("svg",{className:"rp-activity-surface",width:X,height:Y,viewBox:`0 0 ${X} ${Y}`,style:{display:"block"},role:"application","aria-label":g,tabIndex:0,onFocus:me.onFocus,onBlur:me.onBlur,onKeyDown:me.onKeyDown,onPointerMove:e=>{const{x:t,y:a}=c(e,e.currentTarget,{width:X,height:Y});if(tae||ate)return void he();const s=d(ie,t);ue(s,a)},children:[t.jsx("g",{className:"rp-area-grid",children:ge.map(e=>t.jsx("line",{x1:Z,x2:ae,y1:e,y2:e,stroke:$["hl-med"],strokeDasharray:"2 4",fill:"none"},e))}),t.jsx("defs",{children:M.map((e,a)=>t.jsx(p,{id:L+a,color:e.color},e.label))}),M.map((e,a)=>t.jsx(x,{points:le[a],baseline:oe(Math.max(0,J[0])),color:e.color,id:L+a,strokeWidth:2},e.label)),null!==H&&t.jsx("path",{d:`M${ie[H]},${ee}L${ie[H]},${te}`,stroke:$.subtle,strokeDasharray:"3 3",fill:"none",pointerEvents:"none"}),!F&&t.jsxs(t.Fragment,{children:[t.jsx("g",{children:fe.map(({index:e,position:a})=>t.jsx("text",{x:a,y:te+8,className:"rp-area-tick",fill:$.subtle,textAnchor:"middle",children:t.jsx("tspan",{x:a,dy:"0.71em",children:ce[e]})},e))}),t.jsx("g",{className:"rp-area-y-ticks",children:be.map(({index:e,position:a})=>t.jsx("text",{x:ae+8,y:a,className:"rp-area-tick",fill:$.subtle,textAnchor:"start",children:t.jsx("tspan",{x:ae+8,dy:"0.355em",children:j(Q[e])})},e))})]}),null!==H&&M.map(e=>null==e.values[H]?null:t.jsx("circle",{cx:ie[H],cy:oe(e.values[H]),r:4,fill:e.color,stroke:$.base,strokeWidth:2},e.label))]})]})})}export{g as AreaPlot}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AreaChart-CsrRISMa.js b/luci-app-honk/root/etc/honk/doona/assets/AreaChart-CsrRISMa.js deleted file mode 100644 index cc746360d..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/AreaChart-CsrRISMa.js +++ /dev/null @@ -1 +0,0 @@ -import{r as u,j as a}from"./vendor-react-Bf71BWbF.js";import{u as ct,aI as it,fx as rt,fy as ut}from"./index-BOpK0UVB.js";import{u as ht,e as dt,v as H,C as xt,f as pt,n as ft,g as J}from"./layout-Bzzn7HLw.js";import{G as mt,C as yt}from"./AreaCurve-BriPYJva.js";import"./array-C0P64tl-.js";const Mt=l=>{const o=Math.pow(10,Math.floor(Math.log10(l))),e=l/o;return([1,1.2,1.5,2,2.5,3,4,5,6,8,10].find(h=>e<=h)??10)*o},gt=l=>{const o=Math.pow(10,Math.floor(Math.log10(Math.max(l,1e-9)))),e=l/o;return(e<=1?.2:e<=2?.5:e<=5?1:2)*o},I=[30,60,120,300,600,900,1800,3600,7200,21600,43200,86400].map(l=>l*1e3);function kt(l,o){const e=o-l,s=I.find(c=>e/c<=6)??I[I.length-1],h=s>=864e5?new Date(o).getTimezoneOffset()*6e4:0,y=Math.ceil((l-h)/s)*s+h,x=[];for(let c=y;c<=o;c+=s)c-l>=e*.04&&o-c>=e*.04&&x.push(c);return{ticks:x,step:s}}function Q(l){const[o,e]=u.useState([]);return u.useLayoutEffect(()=>{const s=document.createElement("span");Object.assign(s.style,{position:"absolute",top:"-20000px",whiteSpace:"pre",fontSize:"11px"}),document.body.appendChild(s),e(l.map(y=>{s.textContent=y;const{width:x,height:c}=s.getBoundingClientRect();return{width:x,height:c}})),s.remove()},[l]),o}function wt({label:l,series:o,timestamps:e,fmt:s,locale:h,height:y=150,baseline:x="zero",window:c,fill:U}){const X=ct(),C=it(),N=u.useId(),[Y,E]=rt(Math.round,120),{tip:Z,showAt:_,hide:F}=ht(),[z,$]=u.useState(null),i=z&&z.indexM!==void 0&&g!==void 0?kt(M,g):void 0,[M,g]),D=p?p.step<6e4:A<180*1e3,B=p?p.step>=864e5:A>2160*60*1e3,G=u.useMemo(()=>new Intl.DateTimeFormat(h,B?{month:"numeric",day:"numeric"}:D?{hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}:{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),[h,D,B]),{yDomain:K,yTicks:j}=u.useMemo(()=>{const t=o.flatMap(d=>d.values.filter(w=>w!==null));let n=0,r=Mt(Math.max(1,...t)*1.08);if(x==="auto"&&t.length){const d=Math.min(...t),w=Math.max(...t),b=gt(Math.max(w-d,w*.02,1));n=Math.max(0,Math.floor(d/b)*b-b),r=Math.ceil(w/b)*b+b}return{yDomain:[n,r],yTicks:x==="auto"?[n,(n+r)/2,r]:[r/2,r]}},[o,x]),P=u.useMemo(()=>{const t=e.length-1;return p?p.ticks:[...new Set((D?[0,Math.round(t/2),t]:[0,Math.round(t/3),Math.round(2*t/3),t]).map(n=>e[n]))]},[p,D,e]),O=u.useMemo(()=>M!==void 0&&g!==void 0?[M,g]:[Math.min(...e),Math.max(...e)],[M,g,e]),k=E?.width??0,S=E?.height??y,m=S-30,v=k-64,tt=[Math.min(O[0],...e),Math.max(O[1],...e)],f=t=>J(t,tt,[20,v]),T=t=>J(t,K,[m,8]),et={x:20,y:8,width:v-20,height:m-8},R=(t,n)=>$({index:t,y:n}),W=()=>{$(null),F()};u.useLayoutEffect(()=>{if(i===null){F();return}if(!o.some(t=>t.values[i]!=null)){F();return}_({x:f(e[i]),y:z?.y??(8+m)/2,width:k,bounds:et,label:ut(h).format(e[i]),lines:o.filter(t=>t.values[i]!=null).sort((t,n)=>t.labeln.label?1:0).map(t=>X("ui.valuePair",{label:t.label,value:s(t.values[i])}))})});const L=dt(e.length,R,W),V=u.useMemo(()=>P.map(t=>G.format(t)),[P,G]),nt=u.useMemo(()=>j.map(s),[j,s]),ot=Q(V),st=Q(nt),at=p?H(P.map(f),ot.map(t=>t.width),0,k,16,!0):P.map((t,n)=>({index:n,position:f(t)})),q=H(j.map(T),st.map(t=>t.height),0,S,5,!1),lt=[...new Set([...q.map(t=>T(j[t.index])),8,m])];return a.jsx("div",{ref:Y,style:{height:y,width:"100%",flex:U?"1 1 auto":void 0,position:"relative"},onPointerLeave:L.onPointerLeave,children:e.length>0&&E&&a.jsxs(a.Fragment,{children:[a.jsx(xt,{tip:Z}),a.jsxs("svg",{className:"rp-activity-surface",width:k,height:S,viewBox:`0 0 ${k} ${S}`,style:{display:"block"},role:"application","aria-label":l,tabIndex:0,onFocus:L.onFocus,onBlur:L.onBlur,onKeyDown:L.onKeyDown,onPointerMove:t=>{const{x:n,y:r}=pt(t,t.currentTarget,{width:k,height:S});if(n<20||n>v||r<8||r>m){W();return}const d=ft(e.map(f),n);R(d,r)},children:[a.jsx("g",{className:"rp-area-grid",children:lt.map(t=>a.jsx("line",{x1:20,x2:v,y1:t,y2:t,stroke:C["hl-med"],strokeDasharray:"2 4",fill:"none"},t))}),a.jsx("defs",{children:o.map((t,n)=>a.jsx(mt,{id:N+n,color:t.color},t.label))}),o.map((t,n)=>a.jsx(yt,{points:e.map((r,d)=>t.values[d]==null?null:{x:f(r),y:T(t.values[d])}),baseline:T(Math.max(0,K[0])),color:t.color,id:N+n,strokeWidth:2},t.label)),i!==null&&a.jsx("path",{d:`M${f(e[i])},8L${f(e[i])},${m}`,stroke:C.subtle,strokeDasharray:"3 3",fill:"none",pointerEvents:"none"}),a.jsx("g",{children:at.map(({index:t,position:n})=>a.jsx("text",{x:n,y:m+8,className:"rp-area-tick",fill:C.subtle,textAnchor:"middle",children:a.jsx("tspan",{x:n,dy:"0.71em",children:V[t]})},t))}),a.jsx("g",{className:"rp-area-y-ticks",children:q.map(({index:t,position:n})=>a.jsx("text",{x:v+8,y:n,className:"rp-area-tick",fill:C.subtle,textAnchor:"start",children:a.jsx("tspan",{x:v+8,dy:"0.355em",children:s(j[t])})},t))}),i!==null&&o.map(t=>t.values[i]==null?null:a.jsx("circle",{cx:f(e[i]),cy:T(t.values[i]),r:4,fill:t.color,stroke:"#fff",strokeWidth:2},t.label))]})]})})}export{wt as AreaPlot}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AreaCurve-BriPYJva.js b/luci-app-honk/root/etc/honk/doona/assets/AreaCurve-BriPYJva.js deleted file mode 100644 index 8f31e448e..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/AreaCurve-BriPYJva.js +++ /dev/null @@ -1 +0,0 @@ -import{j as p}from"./vendor-react-Bf71BWbF.js";import{w as C,c as h,a as M}from"./array-C0P64tl-.js";function O(n){this._context=n}O.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(n,t){switch(n=+n,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(n,t):this._context.moveTo(n,t);break;case 1:this._point=2;default:this._context.lineTo(n,t);break}}};function X(n){return new O(n)}function z(n){return n[0]}function G(n){return n[1]}function P(n,t){var u=h(!0),l=null,c=X,s=null,a=C(r);n=typeof n=="function"?n:n===void 0?z:h(n),t=typeof t=="function"?t:t===void 0?G:h(t);function r(i){var o,_=(i=M(i)).length,e,f=!1,d;for(l==null&&(s=c(d=a())),o=0;o<=_;++o)!(o<_&&u(e=i[o],o,i))===f&&((f=!f)?s.lineStart():s.lineEnd()),f&&s.point(+n(e,o,i),+t(e,o,i));if(d)return s=null,d+""||null}return r.x=function(i){return arguments.length?(n=typeof i=="function"?i:h(+i),r):n},r.y=function(i){return arguments.length?(t=typeof i=="function"?i:h(+i),r):t},r.defined=function(i){return arguments.length?(u=typeof i=="function"?i:h(!!i),r):u},r.curve=function(i){return arguments.length?(c=i,l!=null&&(s=c(l)),r):c},r.context=function(i){return arguments.length?(i==null?l=s=null:s=c(l=i),r):l},r}function A(n,t,u){var l=null,c=h(!0),s=null,a=X,r=null,i=C(o);n=typeof n=="function"?n:n===void 0?z:h(+n),t=typeof t=="function"?t:t===void 0?h(0):h(+t),u=typeof u=="function"?u:u===void 0?G:h(+u);function o(e){var f,d,g,m=(e=M(e)).length,x,v=!1,b,k=new Array(m),j=new Array(m);for(s==null&&(r=a(b=i())),f=0;f<=m;++f){if(!(f=d;--g)r.point(k[g],j[g]);r.lineEnd(),r.areaEnd()}v&&(k[f]=+n(x,f,e),j[f]=+t(x,f,e),r.point(l?+l(x,f,e):k[f],u?+u(x,f,e):j[f]))}if(b)return r=null,b+""||null}function _(){return P().defined(c).curve(a).context(s)}return o.x=function(e){return arguments.length?(n=typeof e=="function"?e:h(+e),l=null,o):n},o.x0=function(e){return arguments.length?(n=typeof e=="function"?e:h(+e),o):n},o.x1=function(e){return arguments.length?(l=e==null?null:typeof e=="function"?e:h(+e),o):l},o.y=function(e){return arguments.length?(t=typeof e=="function"?e:h(+e),u=null,o):t},o.y0=function(e){return arguments.length?(t=typeof e=="function"?e:h(+e),o):t},o.y1=function(e){return arguments.length?(u=e==null?null:typeof e=="function"?e:h(+e),o):u},o.lineX0=o.lineY0=function(){return _().x(n).y(t)},o.lineY1=function(){return _().x(n).y(u)},o.lineX1=function(){return _().x(l).y(t)},o.defined=function(e){return arguments.length?(c=typeof e=="function"?e:h(!!e),o):c},o.curve=function(e){return arguments.length?(a=e,s!=null&&(r=a(s)),o):a},o.context=function(e){return arguments.length?(e==null?s=r=null:r=a(s=e),o):s},o}function w(n){return n<0?-1:1}function E(n,t,u){var l=n._x1-n._x0,c=t-n._x1,s=(n._y1-n._y0)/(l||c<0&&-0),a=(u-n._y1)/(c||l<0&&-0),r=(s*c+a*l)/(l+c);return(w(s)+w(a))*Math.min(Math.abs(s),Math.abs(a),.5*Math.abs(r))||0}function S(n,t){var u=n._x1-n._x0;return u?(3*(n._y1-n._y0)/u-t)/2:t}function N(n,t,u){var l=n._x0,c=n._y0,s=n._x1,a=n._y1,r=(s-l)/3;n._context.bezierCurveTo(l+r,c+r*t,s-r,a-r*u,s,a)}function y(n){this._context=n}y.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:N(this,this._t0,S(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(n,t){var u=NaN;if(n=+n,t=+t,!(n===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(n,t):this._context.moveTo(n,t);break;case 1:this._point=2;break;case 2:this._point=3,N(this,S(this,u=E(this,n,t)),u);break;default:N(this,this._t0,u=E(this,n,t));break}this._x0=this._x1,this._x1=n,this._y0=this._y1,this._y1=t,this._t0=u}}};Object.create(y.prototype).point=function(n,t){y.prototype.point.call(this,t,n)};function T(n){return new y(n)}function Y({id:n,color:t}){return p.jsxs("linearGradient",{id:n,x1:"0",y1:"0",x2:"0",y2:"1",children:[p.jsx("stop",{offset:"0%",stopColor:t,stopOpacity:.35}),p.jsx("stop",{offset:"100%",stopColor:t,stopOpacity:.03})]})}function R({points:n,baseline:t,color:u,id:l,strokeWidth:c}){if(n.length===1){const i=n[0];return i?p.jsx("circle",{cx:i.x,cy:i.y,r:3,stroke:u,strokeWidth:c,fill:`url(#${l})`,fillOpacity:.6}):null}const s=i=>i!==null&&Number.isFinite(i.x)&&Number.isFinite(i.y),a=P().defined(s).x(i=>i.x).y(i=>i.y).curve(T).digits(3),r=A().defined(s).x(i=>i.x).y0(t).y1(i=>i.y).curve(T).digits(3);return p.jsxs("g",{children:[p.jsx("path",{d:r(n)??void 0,stroke:"none",fill:`url(#${l})`,fillOpacity:.6}),p.jsx("path",{className:"rp-area-curve",d:a(n)??void 0,stroke:u,strokeWidth:c,fill:"none"})]})}export{R as C,Y as G}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/AreaCurve-DQSHOSpG.js b/luci-app-honk/root/etc/honk/doona/assets/AreaCurve-DQSHOSpG.js new file mode 100644 index 000000000..a582e3edd --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/AreaCurve-DQSHOSpG.js @@ -0,0 +1 @@ +import{j as t,r as n}from"./vendor-react-64fcanlc.js";import{w as i,c as e,a as o}from"./array-C0VuvQyb.js";function r(t){this._context=t}function u(t){return new r(t)}function l(t){return t[0]}function s(t){return t[1]}function c(t,n){var r=e(!0),c=null,f=u,h=null,a=i(_);function _(i){var e,u,l,s=(i=o(i)).length,_=!1;for(null==c&&(h=f(l=a())),e=0;e<=s;++e)!(enull!==t&&Number.isFinite(t.x)&&Number.isFinite(t.y),p=c().defined(_).x(t=>t.x).y(t=>t.y).curve(y).digits(3),x=function(t,n,r){var f=null,h=e(!0),a=null,_=u,p=null,y=i(x);function x(i){var e,u,l,s,c,x=(i=o(i)).length,d=!1,v=new Array(x),g=new Array(x);for(null==a&&(p=_(c=y())),e=0;e<=x;++e){if(!(e=u;--l)p.point(v[l],g[l]);p.lineEnd(),p.areaEnd()}d&&(v[e]=+t(s,e,i),g[e]=+n(s,e,i),p.point(f?+f(s,e,i):v[e],r?+r(s,e,i):g[e]))}if(c)return p=null,c+""||null}function d(){return c().defined(h).curve(_).context(a)}return t="function"==typeof t?t:void 0===t?l:e(+t),n="function"==typeof n?n:e(void 0===n?0:+n),r="function"==typeof r?r:void 0===r?s:e(+r),x.x=function(n){return arguments.length?(t="function"==typeof n?n:e(+n),f=null,x):t},x.x0=function(n){return arguments.length?(t="function"==typeof n?n:e(+n),x):t},x.x1=function(t){return arguments.length?(f=null==t?null:"function"==typeof t?t:e(+t),x):f},x.y=function(t){return arguments.length?(n="function"==typeof t?t:e(+t),r=null,x):n},x.y0=function(t){return arguments.length?(n="function"==typeof t?t:e(+t),x):n},x.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:e(+t),x):r},x.lineX0=x.lineY0=function(){return d().x(t).y(n)},x.lineY1=function(){return d().x(t).y(r)},x.lineX1=function(){return d().x(f).y(n)},x.defined=function(t){return arguments.length?(h="function"==typeof t?t:e(!!t),x):h},x.curve=function(t){return arguments.length?(_=t,null!=a&&(p=_(a)),x):_},x.context=function(t){return arguments.length?(null==t?a=p=null:p=_(a=t),x):a},x}().defined(_).x(t=>t.x).y0(r).y1(t=>t.y).curve(y).digits(3);return t.jsxs("g",{children:[t.jsx("path",{d:x(n)??void 0,stroke:"none",fill:`url(#${h})`,fillOpacity:.6}),t.jsx("path",{className:"rp-area-curve",d:p(n)??void 0,stroke:f,strokeWidth:a,fill:"none"})]})});export{d as C,x as G}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Arrange-Bbxnsdc8.js b/luci-app-honk/root/etc/honk/doona/assets/Arrange-Bbxnsdc8.js deleted file mode 100644 index dc4b13936..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Arrange-Bbxnsdc8.js +++ /dev/null @@ -1,4 +0,0 @@ -import{r as E,$ as W,a as Pt,j as f}from"./vendor-react-Bf71BWbF.js";import{fk as Bt,fE as It,fe as ie,ca as H,c8 as M,fF as et,fG as tt,fH as At,c2 as Le,fb as S,fc as ae,fd as Ie,eZ as R,fq as rt,fI as Ot,fJ as Mt,fK as jt,b$ as Nt,cb as Rt,ci as Lt,fL as Vt,ck as Gt,cl as Ht,bZ as zt,fi as Yt,cn as Ut,bW as Xt,cp as qt,cr as _t,co as Wt,fM as Jt,fN as Zt,bX as Ke,aQ as Qt,fu as er,fr as tr,c7 as rr,fO as nt,fP as at,fQ as le,bY as nr,bU as ot,eY as ar,c as Ae,M as Ce,dR as Ve,dY as it,fR as Ge,fS as He,e6 as lt,u as J,aa as or,ad as ir,ac as ze,af as lr,cS as sr,et as ur,b as dr,bm as Ye,E as cr,j as pr,I as te,ak as st,B as V,dT as Ue,ah as ut,T as dt,a as ct,aO as Xe,aJ as fr,bQ as gr,a3 as pe,L as yr,h as mr,bR as hr,aN as Dr,bs as br,fv as $r,fw as vr,fT as Er,aL as xr,br as wr,aj as pt,cY as Tr}from"./index-BOpK0UVB.js";import{$ as kr,a as Kr}from"./Policies-DZOKUNEx.js";import{d as Cr}from"./Virtualizer-BIsXGNLZ.js";import{$ as Sr}from"./ListLayout-CkBMjK9o.js";import{D as ft}from"./DaeCode-B8yPDjSE.js";import{b as Fr,g as Pr}from"./policyText-y7dbn7hu.js";import{P as Br}from"./openGroup-B1VdMhOs.js";import{$ as Ir}from"./useFilter-6_o4NyOf.js";import"./ActionGroup-BU73NzbX.js";import"./useGridSelectionCheckbox-C4VxQajJ.js";import"./nav-BASDWt23.js";var P=(function(e){return e[e.none=0]="none",e[e.cancel=0]="cancel",e[e.move=1]="move",e[e.copy=2]="copy",e[e.link=4]="link",e[e.all=7]="all",e})({});const gt={...P,copyMove:3,copyLink:6,linkMove:5,all:7,uninitialized:7},yt=mt(gt);yt[7]="all";const re={none:"cancel",link:"link",copy:"copy",move:"move"},be=mt(re);function mt(e){let t={};for(let r in e)t[e[r]]=r;return t}const Ar=new Set(["text/plain","text/uri-list","text/html"]),ye="application/vnd.react-aria.items+json",me="application/octet-stream",Oe=new WeakMap,ht=Symbol();function Or(e){let{id:t}=Oe.get(e)||{};if(!t)throw new Error("Droppable item outside a droppable collection");return t}function Mr(e){let{ref:t}=Oe.get(e)||{};if(!t)throw new Error("Droppable item outside a droppable collection");return t}function z(e){let t=new Set;for(let r of e)for(let n of Object.keys(r))t.add(n);return t}function Dt(e){return e||(e="virtual"),e==="pointer"&&(e="virtual"),e==="virtual"&&typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(pointer: coarse)").matches&&(e="touch"),e}function Me(){return Dt(Bt())}function bt(){return Dt(It())}function Se(e,t){let r=new Map,n=!1,a=[];for(let o of t){let g=Object.keys(o);g.length>1&&(n=!0);let c={};for(let y of g){let $=r.get(y);$?n=!0:($=[],r.set(y,$));let m=o[y];c[y]=m,$.push(m)}a.push(c)}for(let[o,g]of r)if(Ar.has(o)){let c=g.join(` -`);e.items.add(c,o)}else e.items.add(g[0],o);if(n){let o=JSON.stringify(a);e.items.add(o,ye)}}class se{constructor(t){this.types=new Set;let r=!1;for(let n of t.items)n.type!==ye&&(n.kind==="file"&&(r=!0),n.type?this.types.add(n.type):this.types.add(me));this.includesUnknownTypes=!r&&t.types.includes("Files")}has(t){if(Array.isArray(t))return t.some(r=>this.has(r));if(this.includesUnknownTypes||t===ht&&this.types.has(me)||t==="*/*")return!0;if(typeof t=="string"){if(t.endsWith("/*")){for(let r of this.types)if(r.startsWith(t.slice(0,-2)))return!0;return!1}return this.types.has(t)}return!1}}function $t(e){let t=[];if(!e)return t;let r=!1;if(e.types.includes(ye))try{let n=e.getData(ye),a=JSON.parse(n);for(let o of a)t.push({kind:"text",types:new Set(Object.keys(o)),getText:g=>Promise.resolve(o[g])});r=!0}catch{}if(!r){let n=new Map;for(let a of e.items)if(a.kind==="string")n.set(a.type||me,e.getData(a.type));else if(a.kind==="file")if(typeof a.webkitGetAsEntry=="function"){let o=a.webkitGetAsEntry();if(!o)continue;o.isFile?t.push(Fe(a.getAsFile())):o.isDirectory&&t.push(vt(o))}else t.push(Fe(a.getAsFile()));n.size>0&&t.push({kind:"text",types:new Set(n.keys()),getText:a=>Promise.resolve(n.get(a))})}return t}function jr(e){return typeof e.text=="function"?e.text():new Promise((t,r)=>{let n=new FileReader;n.onload=()=>{t(n.result)},n.onerror=r,n.readAsText(e)})}function Fe(e){if(!e)throw new Error("No file provided");return{kind:"file",type:e.type||me,name:e.name,getText:()=>jr(e),getFile:()=>Promise.resolve(e)}}function vt(e){return{kind:"directory",name:e.name,getEntries:()=>Nr(e)}}async function*Nr(e){let t=e.createReader(),r;do{r=await new Promise((n,a)=>{t.readEntries(n,a)});for(let n of r)if(n.isFile){let a=await Rr(n);yield Fe(a)}else n.isDirectory&&(yield vt(n))}while(r.length>0)}function Rr(e){return new Promise((t,r)=>e.file(t,r))}function Lr(e){return e.kind==="text"}let B={draggingKeys:new Set};function Vr(e){B.draggingCollectionRef=e}function Gr(e){B.draggingKeys=e}function q(e){B.dropCollectionRef=e}function Et(){B={draggingKeys:new Set}}function Hr(e){B=e}function G(e){let{draggingCollectionRef:t,dropCollectionRef:r}=B;return t?.current!=null&&t.current===(e?.current||r?.current)}let fe;function he(e){fe=e}let Pe=P.none;function $e(e){Pe=e}let Be=new Map,ne=new Map,L=null,De=new Set;function xt(e){return Be.set(e.element,e),L?.updateValidDropTargets(),()=>{Be.delete(e.element),L?.updateValidDropTargets()}}function zr(e){return ne.set(e.element,e),()=>{ne.delete(e.element)}}function Yr(e,t){if(L)throw new Error("Cannot begin dragging while already dragging");L=new Wr(e,t),requestAnimationFrame(()=>{L&&(L.setup(),bt()==="keyboard"&&L.next())});for(let r of De)r()}function je(){let[e,t]=E.useState(L);return E.useEffect(()=>{let r=()=>t(L);return De.add(r),()=>{De.delete(r)}},[]),e}function Ur(){return!!L}function Xr(){L=null;for(let e of De)e()}const qe=["pointerdown","pointermove","pointerenter","pointerleave","pointerover","pointerout","pointerup","mousedown","mousemove","mouseenter","mouseleave","mouseover","mouseout","mouseup","touchstart","touchmove","touchend","focusin","focusout"],qr=["pointerup","mouseup","touchend"],_r={keyboard:"dragStartedKeyboard",touch:"dragStartedTouch",virtual:"dragStartedVirtual"};class Wr{constructor(t,r){this.validDropTargets=[],this.currentDropTarget=null,this.currentDropItem=null,this.dropOperation=null,this.mutationObserver=null,this.restoreAriaHidden=null,this.isVirtualClick=!1,this.dragTarget=t,this.stringFormatter=r,this.onKeyDown=this.onKeyDown.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.onClick=this.onClick.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.cancelEvent=this.cancelEvent.bind(this),this.initialFocused=!1}setup(){document.addEventListener("keydown",this.onKeyDown,!0),document.addEventListener("keyup",this.onKeyUp,!0),window.addEventListener("focus",this.onFocus,!0),window.addEventListener("blur",this.onBlur,!0),document.addEventListener("click",this.onClick,!0),document.addEventListener("pointerdown",this.onPointerDown,!0);for(let t of qe)document.addEventListener(t,this.cancelEvent,!0);this.mutationObserver=new MutationObserver(()=>this.updateValidDropTargets()),this.updateValidDropTargets(),ie(this.stringFormatter.format(_r[bt()]))}teardown(){document.removeEventListener("keydown",this.onKeyDown,!0),document.removeEventListener("keyup",this.onKeyUp,!0),window.removeEventListener("focus",this.onFocus,!0),window.removeEventListener("blur",this.onBlur,!0),document.removeEventListener("click",this.onClick,!0),document.removeEventListener("pointerdown",this.onPointerDown,!0);for(let t of qe)document.removeEventListener(t,this.cancelEvent,!0);this.mutationObserver?.disconnect(),this.restoreAriaHidden?.()}onKeyDown(t){if(this.cancelEvent(t),t.key==="Escape"){this.cancel();return}t.key==="Tab"&&!(t.metaKey||t.altKey||t.ctrlKey)&&(t.shiftKey?this.previous():this.next()),typeof this.currentDropTarget?.onKeyDown=="function"&&this.currentDropTarget.onKeyDown(t,this.dragTarget)}onKeyUp(t){this.cancelEvent(t),t.key==="Enter"&&(t.altKey||H(this.getCurrentActivateButton(),M(t))?this.activate(this.currentDropTarget,this.currentDropItem):this.drop())}getCurrentActivateButton(){return this.currentDropItem?.activateButtonRef?.current??this.currentDropTarget?.activateButtonRef?.current??null}onFocus(t){let r=this.getCurrentActivateButton(),n=M(t);if(n===r){this.cancelEvent(t);return}if(n!==this.dragTarget.element&&this.cancelEvent(t),!(n instanceof HTMLElement)||n===this.dragTarget.element)return;let a=this.validDropTargets.find(g=>g.element===n)||this.validDropTargets.find(g=>H(g.element,n));if(!a){this.currentDropTarget?this.currentDropTarget.element.focus():this.dragTarget.element.focus();return}let o=ne.get(n);a&&this.setCurrentDropTarget(a,o)}onBlur(t){let r=this.getCurrentActivateButton();if(r&&t.relatedTarget===r){this.cancelEvent(t);return}M(t)!==this.dragTarget.element&&this.cancelEvent(t),(!t.relatedTarget||!(t.relatedTarget instanceof HTMLElement))&&(this.currentDropTarget?this.currentDropTarget.element.focus():this.dragTarget.element.focus())}onClick(t){if(this.cancelEvent(t),et(t)||this.isVirtualClick){let r=ne.values(),n=M(t),a=[...r].find(c=>c.element===n||H(c.activateButtonRef?.current,n)),o=this.validDropTargets.find(c=>H(c.element,n)),g=a?.activateButtonRef?.current??o?.activateButtonRef?.current;if(H(g,n)&&o){this.activate(o,a);return}if(M(t)===this.dragTarget.element){this.cancel();return}o&&(this.setCurrentDropTarget(o,a),this.drop(a))}}onPointerDown(t){this.cancelEvent(t),this.isVirtualClick=tt(t)}cancelEvent(t){let r=M(t);(t.type==="focusin"||t.type==="focusout")&&(r===this.dragTarget?.element||r===this.getCurrentActivateButton())||(qr.includes(t.type)||t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation())}updateValidDropTargets(){if(!this.mutationObserver)return;if(this.mutationObserver.disconnect(),this.restoreAriaHidden&&this.restoreAriaHidden(),this.validDropTargets=Jr(this.dragTarget),this.validDropTargets.length>0){let a=this.findNearestDropTarget();this.validDropTargets=[...this.validDropTargets.slice(a),...this.validDropTargets.slice(0,a)]}this.currentDropTarget&&!this.validDropTargets.includes(this.currentDropTarget)&&this.setCurrentDropTarget(this.validDropTargets[0]);let t=z(this.dragTarget.items),r=[...ne.values()].filter(a=>typeof a.getDropOperation=="function"?a.getDropOperation(t,this.dragTarget.allowedDropOperations)!=="cancel":!0),n=this.validDropTargets.filter(a=>!r.some(o=>H(a.element,o.element)));this.restoreAriaHidden=At([this.dragTarget.element,...r.flatMap(a=>a.activateButtonRef?.current?[a.element,a.activateButtonRef?.current]:[a.element]),...n.flatMap(a=>a.activateButtonRef?.current?[a.element,a.activateButtonRef?.current]:[a.element])],{shouldUseInert:!0}),this.mutationObserver.observe(document.body,{subtree:!0,attributes:!0,attributeFilter:["aria-hidden","inert"]})}next(){if(!this.currentDropTarget){this.setCurrentDropTarget(this.validDropTargets[0]);return}let t=this.validDropTargets.indexOf(this.currentDropTarget);if(t<0){this.setCurrentDropTarget(this.validDropTargets[0]);return}t===this.validDropTargets.length-1?this.dragTarget.element.closest('[aria-hidden="true"], [inert]')?this.setCurrentDropTarget(this.validDropTargets[0]):(this.setCurrentDropTarget(null),this.dragTarget.element.focus()):this.setCurrentDropTarget(this.validDropTargets[t+1])}previous(){if(!this.currentDropTarget){this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]);return}let t=this.validDropTargets.indexOf(this.currentDropTarget);if(t<0){this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]);return}t===0?this.dragTarget.element.closest('[aria-hidden="true"], [inert]')?this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]):(this.setCurrentDropTarget(null),this.dragTarget.element.focus()):this.setCurrentDropTarget(this.validDropTargets[t-1])}findNearestDropTarget(){let t=this.dragTarget.element.getBoundingClientRect(),r=1/0,n=-1,a=-1;for(let o=0;o=0?a:n}setCurrentDropTarget(t,r){if(t!==this.currentDropTarget){if(this.currentDropTarget&&typeof this.currentDropTarget.onDropExit=="function"){let n=this.currentDropTarget.element.getBoundingClientRect();this.currentDropTarget.onDropExit({type:"dropexit",x:n.left+n.width/2,y:n.top+n.height/2})}if(this.currentDropTarget=t,t){if(typeof t.onDropEnter=="function"){let n=t.element.getBoundingClientRect();t.onDropEnter({type:"dropenter",x:n.left+n.width/2,y:n.top+n.height/2},this.dragTarget)}r||t?.element.focus()}}if(r!=null&&r!==this.currentDropItem&&(this.currentDropTarget&&typeof this.currentDropTarget.onDropTargetEnter=="function"&&this.currentDropTarget.onDropTargetEnter(r.target),r.element.focus(),this.currentDropItem=r,!this.initialFocused)){let n=r?.element.getAttribute("aria-label");n&&ie(n,"polite"),this.initialFocused=!0}}end(){if(this.teardown(),Xr(),typeof this.dragTarget.onDragEnd=="function"){let r=(this.currentDropTarget&&this.dropOperation!=="cancel"?this.currentDropTarget:this.dragTarget).element.getBoundingClientRect();this.dragTarget.onDragEnd({type:"dragend",x:r.x+r.width/2,y:r.y+r.height/2,dropOperation:this.dropOperation||"cancel"})}this.currentDropTarget&&!this.currentDropTarget.preventFocusOnDrop&&Le()?.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),this.setCurrentDropTarget(null)}cancel(){this.setCurrentDropTarget(null),this.end(),this.dragTarget.element.closest('[aria-hidden="true"], [inert]')||this.dragTarget.element.focus(),Le()?.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),ie(this.stringFormatter.format("dropCanceled"))}drop(t){if(!this.currentDropTarget){this.cancel();return}if(typeof t?.getDropOperation=="function"){let r=z(this.dragTarget.items);this.dropOperation=t.getDropOperation(r,this.dragTarget.allowedDropOperations)}else if(typeof this.currentDropTarget.getDropOperation=="function"){let r=z(this.dragTarget.items);this.dropOperation=this.currentDropTarget.getDropOperation(r,this.dragTarget.allowedDropOperations)}else this.dropOperation=this.dragTarget.allowedDropOperations[0];if(typeof this.currentDropTarget.onDrop=="function"){let r=this.dragTarget.items.map(a=>({kind:"text",types:new Set(Object.keys(a)),getText:o=>Promise.resolve(a[o])})),n=this.currentDropTarget.element.getBoundingClientRect();this.currentDropTarget.onDrop({type:"drop",x:n.left+n.width/2,y:n.top+n.height/2,items:r,dropOperation:this.dropOperation},t?.target??null)}this.end(),ie(this.stringFormatter.format("dropComplete"))}activate(t,r){if(t&&typeof t.onDropActivate=="function"){let n=r?.target??null,a=t.element.getBoundingClientRect();t.onDropActivate({type:"dropactivate",x:a.left+a.width/2,y:a.top+a.height/2},n)}}}function Jr(e){let t=z(e.items);return[...Be.values()].filter(r=>r.element.closest('[aria-hidden="true"], [inert]')?!1:typeof r.getDropOperation=="function"?r.getDropOperation(t,e.allowedDropOperations)!=="cancel":!0)}var wt={};wt={dragItem:e=>`Drag ${e.itemText}`,dragSelectedItems:(e,t)=>`Drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}`,dragDescriptionKeyboard:"Press Enter to start dragging.",dragDescriptionKeyboardAlt:"Press Alt + Enter to start dragging.",dragDescriptionTouch:"Double tap to start dragging.",dragDescriptionVirtual:"Click to start dragging.",dragDescriptionLongPress:"Long press to start dragging.",dragSelectedKeyboard:(e,t)=>`Press Enter to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragSelectedKeyboardAlt:(e,t)=>`Press Alt + Enter to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragSelectedLongPress:(e,t)=>`Long press to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragStartedKeyboard:"Started dragging. Press Tab to navigate to a drop target, then press Enter to drop, or press Escape to cancel.",dragStartedTouch:"Started dragging. Navigate to a drop target, then double tap to drop.",dragStartedVirtual:"Started dragging. Navigate to a drop target, then click or press Enter to drop.",endDragKeyboard:"Dragging. Press Enter to cancel drag.",endDragTouch:"Dragging. Double tap to cancel drag.",endDragVirtual:"Dragging. Click to cancel drag.",dropDescriptionKeyboard:"Press Enter to drop. Press Escape to cancel drag.",dropDescriptionTouch:"Double tap to drop.",dropDescriptionVirtual:"Click to drop.",dropCanceled:"Drop canceled.",dropComplete:"Drop complete.",dropIndicator:"drop indicator",dropOnRoot:"Drop on",dropOnItem:e=>`Drop on ${e.itemText}`,insertBefore:e=>`Insert before ${e.itemText}`,insertBetween:e=>`Insert between ${e.beforeItemText} and ${e.afterItemText}`,insertAfter:e=>`Insert after ${e.itemText}`};var Tt={};Tt={dragDescriptionKeyboard:"按 Enter 开始拖动。",dragDescriptionKeyboardAlt:"按 Alt + Enter 开始拖动。",dragDescriptionLongPress:"长按以开始拖动。",dragDescriptionTouch:"双击开始拖动。",dragDescriptionVirtual:"单击开始拖动。",dragItem:e=>`拖动 ${e.itemText}`,dragSelectedItems:(e,t)=>`拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 选中项目`,other:()=>`${t.number(e.count)} 选中项目`})}`,dragSelectedKeyboard:(e,t)=>`按 Enter 以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragSelectedKeyboardAlt:(e,t)=>`按 Alt + Enter 以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragSelectedLongPress:(e,t)=>`长按以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragStartedKeyboard:"已开始拖动。按 Tab 导航到放置目标,然后按 Enter 放置或按 Escape 取消。",dragStartedTouch:"已开始拖动。导航到放置目标,然后双击放置。",dragStartedVirtual:"已开始拖动。导航到放置目标,然后单击或按 Enter 放置。",dropCanceled:"放置已取消。",dropComplete:"放置已完成。",dropDescriptionKeyboard:"按 Enter 放置。按 Escape 取消拖动。",dropDescriptionTouch:"双击放置。",dropDescriptionVirtual:"单击放置。",dropIndicator:"放置标记",dropOnItem:e=>`放置于 ${e.itemText}`,dropOnRoot:"放置于",endDragKeyboard:"正在拖动。按 Enter 取消拖动。",endDragTouch:"正在拖动。双击取消拖动。",endDragVirtual:"正在拖动。单击取消拖动。",insertAfter:e=>`插入到 ${e.itemText} 之后`,insertBefore:e=>`插入到 ${e.itemText} 之前`,insertBetween:e=>`插入到 ${e.beforeItemText} 和 ${e.afterItemText} 之间`};var kt={};kt={dragDescriptionKeyboard:"按 Enter 鍵以開始拖曳。",dragDescriptionKeyboardAlt:"按 Alt+Enter 鍵以開始拖曳。",dragDescriptionLongPress:"長按以開始拖曳。",dragDescriptionTouch:"輕點兩下以開始拖曳。",dragDescriptionVirtual:"按一下滑鼠以開始拖曳。",dragItem:e=>`拖曳「${e.itemText}」`,dragSelectedItems:(e,t)=>`拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}`,dragSelectedKeyboard:(e,t)=>`按 Enter 鍵以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragSelectedKeyboardAlt:(e,t)=>`按 Alt+Enter 鍵以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragSelectedLongPress:(e,t)=>`長按以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragStartedKeyboard:"已開始拖曳。按 Tab 鍵以瀏覽至放置目標,然後按 Enter 鍵以放置,或按 Escape 鍵以取消。",dragStartedTouch:"已開始拖曳。瀏覽至放置目標,然後輕點兩下以放置。",dragStartedVirtual:"已開始拖曳。瀏覽至放置目標,然後按一下滑鼠或按 Enter 鍵以放置。",dropCanceled:"放置已取消。",dropComplete:"放置已完成。",dropDescriptionKeyboard:"按 Enter 鍵以放置。按 Escape 鍵以取消拖曳。",dropDescriptionTouch:"輕點兩下以放置。",dropDescriptionVirtual:"按一下滑鼠以放置。",dropIndicator:"放置指示器",dropOnItem:e=>`放置在「${e.itemText}」上`,dropOnRoot:"放置在",endDragKeyboard:"拖曳中。按 Enter 鍵以取消拖曳。",endDragTouch:"拖曳中。輕點兩下以取消拖曳。",endDragVirtual:"拖曳中。按一下滑鼠以取消拖曳。",insertAfter:e=>`插入至「${e.itemText}」之後`,insertBefore:e=>`插入至「${e.itemText}」之前`,insertBetween:e=>`插入至「${e.beforeItemText}」和「${e.afterItemText}」之間`};var oe={};oe={"ar-AE":S,"bg-BG":S,"cs-CZ":S,"da-DK":S,"de-DE":S,"el-GR":S,"en-US":wt,"es-ES":S,"et-EE":S,"fi-FI":S,"fr-FR":S,"he-IL":S,"hr-HR":S,"hu-HU":S,"it-IT":S,"ja-JP":S,"ko-KR":S,"lt-LT":S,"lv-LV":S,"nb-NO":S,"nl-NL":S,"pl-PL":S,"pt-BR":S,"pt-PT":S,"ro-RO":S,"ru-RU":S,"sk-SK":S,"sl-SI":S,"sr-SP":S,"sv-SE":S,"tr-TR":S,"uk-UA":S,"zh-CN":Tt,"zh-TW":kt};function Zr(e){return e&&e.__esModule?e.default:e}const Qr={keyboard:"dropDescriptionKeyboard",touch:"dropDescriptionTouch",virtual:"dropDescriptionVirtual"};function Kt(){let e=ae(Zr(oe),"@react-aria/dnd"),t=Me(),r=je();return{dropProps:{...Ie(r?e.format(Qr[t]):""),onClick:()=>{}}}}const en=800;function Ct(e){let{hasDropButton:t,isDisabled:r}=e,[n,a]=E.useState(!1),o=E.useRef({x:0,y:0,dragOverElements:new Set,dropEffect:"none",allowedOperations:P.all,dropActivateTimer:void 0}).current,g=i=>{if(a(!0),typeof e.onDropEnter=="function"){let s=i.currentTarget.getBoundingClientRect();e.onDropEnter({type:"dropenter",x:i.clientX-s.x,y:i.clientY-s.y})}},c=i=>{if(a(!1),typeof e.onDropExit=="function"){let s=i.currentTarget.getBoundingClientRect();e.onDropExit({type:"dropexit",x:i.clientX-s.x,y:i.clientY-s.y})}},y=i=>{i.preventDefault(),i.stopPropagation();let s=_e(i);if(i.clientX===o.x&&i.clientY===o.y&&s===o.allowedOperations){i.dataTransfer.dropEffect=o.dropEffect;return}o.x=i.clientX,o.y=i.clientY;let u=o.dropEffect;if(s!==o.allowedOperations){let D=ve(s),w=D[0];if(typeof e.getDropOperation=="function"){let k=new se(i.dataTransfer);w=ue(s,e.getDropOperation(k,D))}o.dropEffect=be[w]||"none"}if(typeof e.getDropOperationForPoint=="function"){let D=new se(i.dataTransfer),w=i.currentTarget.getBoundingClientRect(),k=ue(s,e.getDropOperationForPoint(D,ve(s),o.x-w.x,o.y-w.y));o.dropEffect=be[k]||"none"}if(o.allowedOperations=s,i.dataTransfer.dropEffect=o.dropEffect,o.dropEffect==="none"&&u!=="none"?c(i):o.dropEffect!=="none"&&u==="none"&&g(i),typeof e.onDropMove=="function"&&o.dropEffect!=="none"){let D=i.currentTarget.getBoundingClientRect();e.onDropMove({type:"dropmove",x:o.x-D.x,y:o.y-D.y})}if(clearTimeout(o.dropActivateTimer),e.onDropActivate&&typeof e.onDropActivate=="function"&&o.dropEffect!=="none"){let D=e.onDropActivate,w=i.currentTarget.getBoundingClientRect();o.dropActivateTimer=setTimeout(()=>{D({type:"dropactivate",x:o.x-w.x,y:o.y-w.y})},en)}},$=i=>{if(i.preventDefault(),i.stopPropagation(),o.dragOverElements.add(M(i)),o.dragOverElements.size>1)return;let s=_e(i),u=ve(s),D=u[0];if(typeof e.getDropOperation=="function"){let w=new se(i.dataTransfer);D=ue(s,e.getDropOperation(w,u))}if(typeof e.getDropOperationForPoint=="function"){let w=new se(i.dataTransfer),k=i.currentTarget.getBoundingClientRect();D=ue(s,e.getDropOperationForPoint(w,u,i.clientX-k.x,i.clientY-k.y))}o.x=i.clientX,o.y=i.clientY,o.allowedOperations=s,o.dropEffect=be[D]||"none",i.dataTransfer.dropEffect=o.dropEffect,D!=="cancel"&&g(i)},m=i=>{i.preventDefault(),i.stopPropagation();let s=M(i);if(o.dragOverElements.delete(s),s===i.currentTarget)for(let u of o.dragOverElements)H(i.currentTarget,u)||o.dragOverElements.delete(u);o.dragOverElements.size>0||(o.dropEffect!=="none"&&c(i),clearTimeout(o.dropActivateTimer))},v=i=>{if(i.preventDefault(),i.stopPropagation(),he(o.dropEffect),typeof e.onDrop=="function"){let u=re[o.dropEffect],D=$t(i.dataTransfer),w=i.currentTarget.getBoundingClientRect(),k={type:"drop",x:i.clientX-w.x,y:i.clientY-w.y,items:D,dropOperation:u};e.onDrop(k)}let s={...B};o.dragOverElements.clear(),c(i),clearTimeout(o.dropActivateTimer),s.draggingCollectionRef==null?he(void 0):Hr(s)},l=R(i=>{typeof e.onDropEnter=="function"&&e.onDropEnter(i)}),d=R(i=>{typeof e.onDropExit=="function"&&e.onDropExit(i)}),p=R(i=>{typeof e.onDropActivate=="function"&&e.onDropActivate(i)}),b=R(i=>{typeof e.onDrop=="function"&&e.onDrop(i)}),h=R((i,s)=>e.getDropOperation?e.getDropOperation(i,s):s[0]),{ref:x}=e;rt(()=>{if(!(r||!x.current))return xt({element:x.current,getDropOperation:h,onDropEnter(i){a(!0),l(i)},onDropExit(i){a(!1),d(i)},onDrop:b,onDropActivate:p})},[r,x]);let{dropProps:T}=Kt();return r?{dropProps:{},dropButtonProps:{isDisabled:!0},isDropTarget:!1}:{dropProps:{...!t&&T,onDragEnter:$,onDragOver:y,onDragLeave:m,onDrop:v},dropButtonProps:{...t&&T},isDropTarget:n}}function _e(e){let t=gt[e.dataTransfer.effectAllowed];Pe&&(t&=Pe);let r=P.none;return Ot()?(e.altKey&&(r|=P.copy),e.ctrlKey&&!Mt()&&(r|=P.link),e.metaKey&&(r|=P.move)):(e.altKey&&(r|=P.link),e.shiftKey&&(r|=P.move),e.ctrlKey&&(r|=P.copy)),r?t&r:t}function ve(e){let t=[];return e&P.move&&t.push("move"),e&P.copy&&t.push("copy"),e&P.link&&t.push("link"),t}function ue(e,t){let r=P[t];return e&r?t:"cancel"}const Ee=new Map;function _(e,t){let r=Ee.get(e);if(!r){let n=new Set,a=o=>{for(let g of n)g(o)};r={listener:a,handlers:n},Ee.set(e,r),document.addEventListener(e,a)}return r.handlers.add(t),()=>{r.handlers.delete(t),r.handlers.size===0&&(document.removeEventListener(e,r.listener),Ee.delete(e))}}function tn(e){let{isDisabled:t}=e,r=E.useRef(!1),{focusProps:n}=jt({onFocusChange:m=>{r.current=m}}),a=R(m=>{r.current&&e.getItems&&m.preventDefault()}),o=R(m=>{!r.current||!e.getItems||(m.preventDefault(),m.clipboardData&&(Se(m.clipboardData,e.getItems({action:"copy"})),e.onCopy?.()))}),g=R(m=>{r.current&&e.onCut&&e.getItems&&m.preventDefault()}),c=R(m=>{!r.current||!e.onCut||!e.getItems||(m.preventDefault(),m.clipboardData&&(Se(m.clipboardData,e.getItems({action:"cut"})),e.onCut()))}),y=R(m=>{r.current&&e.onPaste&&m.preventDefault()}),$=R(m=>{if(!(!r.current||!e.onPaste)&&(m.preventDefault(),m.clipboardData)){let v=$t(m.clipboardData);e.onPaste(v)}});return E.useEffect(()=>{if(!t)return Nt(_("beforecopy",a),_("copy",o),_("beforecut",g),_("cut",c),_("beforepaste",y),_("paste",$))},[t]),{clipboardProps:n}}function rn(e){return e&&e.__esModule?e.default:e}const nn=E.createContext(null),an=E.forwardRef(function(t,r){let{isDisabled:n=!1}=t;[t,r]=Rt(t,r,nn);let a=Lt(r),o=E.useRef(null),{dropProps:g,dropButtonProps:c,isDropTarget:y}=Ct({...t,ref:o,hasDropButton:!0}),{buttonProps:$}=Vt(c||{},o),{hoverProps:m,isHovered:v}=Gt(t),{focusProps:l,isFocused:d,isFocusVisible:p}=Ht(),b=ae(rn(er),"react-aria-components"),h=zt(),x=t["aria-label"]||b.format("dropzoneLabel"),T=t["aria-labelledby"],i=[h,T].filter(Boolean).join(" "),s=Yt({"aria-label":x,"aria-labelledby":i}),{clipboardProps:u}=tn({isDisabled:n,onPaste:k=>t.onDrop?.({type:"drop",items:k,x:0,y:0,dropOperation:"copy"})}),D=Ut({...t,values:{isHovered:v,isFocused:d,isFocusVisible:p,isDropTarget:y,isDisabled:n},defaultClassName:"react-aria-DropZone"}),w=Xt(t,{global:!0});return delete w.id,W.createElement(qt,{values:[[_t,{id:h,slot:"label"}]]},W.createElement(Wt.div,{...Ke(w,D,g,m),slot:t.slot||void 0,ref:a,onClick:k=>{let C=M(k);for(;C&&H(a.current,C)&&!Jt(C);){if(C===a.current&&o.current){Zt(o.current);break}C=C.parentElement}},"data-hovered":v||void 0,"data-focused":d||void 0,"data-focus-visible":p||void 0,"data-drop-target":y||void 0,"data-disabled":n||void 0},W.createElement(Qt,null,W.createElement("button",{...Ke($,l,u,s),ref:o})),D.children))});function on(e,t,r,n,a=!1,o=!1){switch(n){case"left":return a?xe(e,t,r,o,"left"):we(e,t,r,o,"left");case"right":return a?we(e,t,r,o,"right"):xe(e,t,r,o,"right");case"up":return we(e,t,r,o);case"down":return xe(e,t,r,o)}}function xe(e,t,r,n=!1,a=null){if(!r)return{type:"root"};if(r.type==="root"){let o=e.getFirstKey?.()??null;return o!=null?{type:"item",key:o,dropPosition:"before"}:null}if(r.type==="item"){let o=null;a?o=a==="right"?e.getKeyRightOf?.(r.key,{includeDisabled:!0}):e.getKeyLeftOf?.(r.key,{includeDisabled:!0}):o=e.getKeyBelow?.(r.key,{includeDisabled:!0});let g=Ne(t,r.key,c=>t.getKeyAfter(c));if(o!=null&&o!==g)return{type:"item",key:o,dropPosition:r.dropPosition};switch(r.dropPosition){case"before":return{type:"item",key:r.key,dropPosition:"on"};case"on":{let c=t.getItem(r.key),y=o!=null?t.getItem(o):null;return c&&y&&y.level>=c.level?{type:"item",key:y.key,dropPosition:"before"}:{type:"item",key:r.key,dropPosition:"after"}}case"after":{let c=t.getItem(r.key),y=c?.nextKey!=null?t.getItem(c.nextKey):null;for(;y!=null&&y.type!=="item";)y=y.nextKey!=null?t.getItem(y.nextKey):null;if(c&&y==null&&c.parentKey!=null){let $=t.getItem(c.parentKey);const m=$?.nextKey!=null?t.getItem($.nextKey):null;if(m?.type==="item")return{type:"item",key:m.key,dropPosition:"before"};if($?.type==="item")return{type:"item",key:$.key,dropPosition:"after"}}if(y)return{type:"item",key:y.key,dropPosition:"on"}}}}return n?{type:"root"}:null}function we(e,t,r,n=!1,a=null){if(!r||n&&r.type==="root"){let o=null,g=e.getLastKey?.();for(;g!=null;){let c=t.getItem(g);if(c?.type!=="item")break;o=g,g=c?.parentKey}return o!=null?{type:"item",key:o,dropPosition:"after"}:null}if(r.type==="item"){let o=null;a?o=a==="left"?e.getKeyLeftOf?.(r.key,{includeDisabled:!0}):e.getKeyRightOf?.(r.key,{includeDisabled:!0}):o=e.getKeyAbove?.(r.key,{includeDisabled:!0});let g=Ne(t,r.key,c=>t.getKeyBefore(c));if(o!=null&&o!==g)return{type:"item",key:o,dropPosition:r.dropPosition};switch(r.dropPosition){case"before":{let c=t.getItem(r.key);if(c&&c.prevKey!=null){let y=We(t,c.prevKey);if(y)return y}return o!=null?{type:"item",key:o,dropPosition:"on"}:{type:"root"}}case"on":return{type:"item",key:r.key,dropPosition:"before"};case"after":{let c=We(t,r.key);return c||{type:"item",key:r.key,dropPosition:"on"}}}}return r.type!=="root"?{type:"root"}:null}function We(e,t){let r=e.getItem(t),n=Ne(e,t,o=>e.getKeyAfter(o)),a=n!=null?e.getItem(n):null;if(r&&a&&a.level>r.level){let o=null;if("lastChildKey"in r)for(o=r.lastChildKey!=null?e.getItem(r.lastChildKey):null;o&&o.type!=="item"&&o.prevKey!=null;)o=e.getItem(o.prevKey);else o=Array.from(r.childNodes).findLast(g=>g.type==="item")||null;if(o)return{type:"item",key:o.key,dropPosition:"after"}}return null}function Ne(e,t,r){let n=r(t),a=n!=null?e.getItem(n):null;for(;a&&a.type!=="item";)n=r(a.key),a=n!=null?e.getItem(n):null;return n}const de=20;function ln(e){let t=E.useRef(null),r=E.useRef(!0),n=E.useRef(!0);E.useEffect(()=>{if(e.current){t.current=tr(e.current)?e.current:rr(e.current);let g=window.getComputedStyle(t.current);r.current=/(auto|scroll)/.test(g.overflowX),n.current=/(auto|scroll)/.test(g.overflowY)}},[e]);let a=E.useRef({timer:void 0,dx:0,dy:0}).current;E.useEffect(()=>()=>{a.timer&&(cancelAnimationFrame(a.timer),a.timer=void 0)},[a]);let o=E.useCallback(()=>{r.current&&t.current&&(t.current.scrollLeft+=a.dx),n.current&&t.current&&(t.current.scrollTop+=a.dy),a.timer&&(a.timer=requestAnimationFrame(o))},[t,a]);return{move(g,c){if(!nt()||at()||!t.current)return;let y=t.current.getBoundingClientRect(),$=de,m=de,v=y.height-de,l=y.width-de;g<$||g>l||cv?(g<$?a.dx=g-$:g>l&&(a.dx=g-l),cv&&(a.dy=c-v),a.timer||(a.timer=requestAnimationFrame(o))):this.stop()},stop(){a.timer&&(cancelAnimationFrame(a.timer),a.timer=void 0)}}}function sn(e,t,r){let n=E.useRef({props:e,state:t,nextTarget:null,dropOperation:null}).current;n.props=e,n.state=t;let a=E.useCallback(async l=>{let{onInsert:d,onRootDrop:p,onItemDrop:b,onReorder:h,onMove:x,acceptedDragTypes:T="all",shouldAcceptItemDrop:i}=n.props,{draggingKeys:s}=B,u=G(r),{target:D,dropOperation:w,items:k}=l,C=k;(T!=="all"||i)&&(C=k.filter(F=>{let I;return F.kind==="directory"?I=new Set([ht]):I=F.kind==="file"?new Set([F.type]):F.types,T==="all"||T.some(j=>I.has(j))?D.type==="item"&&D.dropPosition==="on"&&i?i(D,I):!0:!1})),C.length>0&&(D.type==="root"&&p&&await p({items:C,dropOperation:w}),D.type==="item"&&(D.dropPosition==="on"&&b&&await b({items:C,dropOperation:w,isInternal:u,target:D}),x&&u&&await x({keys:s,dropOperation:w,target:D}),D.dropPosition!=="on"&&(!u&&d&&await d({items:C,dropOperation:w,target:D}),u&&h&&await h({keys:s,dropOperation:w,target:D}))))},[n,r]),o=ln(r),{dropProps:g}=Ct({ref:r,onDropEnter(){n.nextTarget!=null&&t.setTarget(n.nextTarget)},onDropMove(l){n.nextTarget!=null&&t.setTarget(n.nextTarget),o.move(l.x,l.y)},getDropOperationForPoint(l,d,p,b){let{draggingKeys:h,dropCollectionRef:x}=B,T=G(r),i=u=>t.getDropOperation({target:u,types:l,allowedOperations:d,isInternal:T,draggingKeys:h})!=="cancel",s=e.dropTargetDelegate.getDropTargetFromPoint(p,b,i);if(!s)return n.dropOperation="cancel",n.nextTarget=null,"cancel";if(n.dropOperation=t.getDropOperation({target:s,types:l,allowedOperations:d,isInternal:T,draggingKeys:h}),n.dropOperation==="cancel"){let u={type:"root"},D=t.getDropOperation({target:u,types:l,allowedOperations:d,isInternal:T,draggingKeys:h});D!=="cancel"&&(s=u,n.dropOperation=D)}return s&&n.dropOperation!=="cancel"&&r?.current!==x?.current&&q(r),n.nextTarget=n.dropOperation==="cancel"?null:s,n.dropOperation},onDropExit(){q(void 0),t.setTarget(null),o.stop()},onDropActivate(l){t.target?.type==="item"&&typeof e.onDropActivate=="function"&&e.onDropActivate({type:"dropactivate",x:l.x,y:l.y,target:t.target})},onDrop(l){q(r),t.target&&$(l,t.target);let{draggingCollectionRef:d}=B;d==null&&Et()}}),c=E.useRef(null),y=E.useCallback(()=>{let{state:l}=n;if(c.current){let{target:d,collection:p,selectedKeys:b,focusedKey:h,isInternal:x,draggingKeys:T}=c.current;if(l.collection.size>p.size&&l.selectionManager.isSelectionEqual(b)){let i=new Set,s=l.collection.getFirstKey();for(;s!=null;){let u=l.collection.getItem(s);u?.type==="item"&&!p.getItem(u.key)&&i.add(u.key),u?.hasChildNodes&&l.collection.getItem(u.lastChildKey)?.type==="item"?s=u.firstChildKey:s=l.collection.getKeyAfter(s)}if(l.selectionManager.setSelectedKeys(i),l.selectionManager.focusedKey===h){let u=i.keys().next().value;if(u!=null){let D=l.collection.getItem(u),w=c.current.target,k=l.collection.expandedKeys?l.collection.expandedKeys.has(D?.parentKey):!1;D&&(D?.type==="cell"||w.type==="item"&&w.dropPosition==="on"&&!k)&&(u=D.parentKey),u!=null&&l.selectionManager.setFocusedKey(u),l.selectionManager.selectionMode==="none"&&le("keyboard")}}}else h!=null&&l.selectionManager.focusedKey===h&&x&&d.type==="item"&&d.dropPosition!=="on"&&T.has(l.collection.getItem(h)?.parentKey)?(l.selectionManager.setFocusedKey(l.collection.getItem(h)?.parentKey??null),le("keyboard")):l.selectionManager.focusedKey===h&&d.type==="item"&&d.dropPosition==="on"&&l.collection.getItem(d.key)!=null?(l.selectionManager.setFocusedKey(d.key),le("keyboard")):l.selectionManager.focusedKey!=null&&!l.selectionManager.isSelected(l.selectionManager.focusedKey)&&le("keyboard");l.selectionManager.setFocused(!0)}},[n]),$=E.useCallback((l,d)=>{let{state:p}=n;c.current={timeout:void 0,focusedKey:p.selectionManager.focusedKey,collection:p.collection,selectedKeys:p.selectionManager.selectedKeys,draggingKeys:B.draggingKeys,isInternal:G(r),target:d},(n.props.onDrop||a)({type:"drop",x:l.x,y:l.y,target:d,items:l.items,dropOperation:l.dropOperation}),c.current.timeout=setTimeout(()=>{y(),c.current=null},50)},[n,a,r,y]);E.useEffect(()=>()=>{c.current&&clearTimeout(c.current.timeout)},[]),rt(()=>{c.current&&t.collection!==c.current.collection&&y()});let{direction:m}=nr();E.useEffect(()=>{if(!r.current)return;let l=(b,h=!0,x="down")=>on(n.props.keyboardDelegate,n.state.collection,b,x,m==="rtl",h),d=(b,h=!0)=>l(b,h,"up"),p=(b,h,x,T,i=!0)=>{let s=0,u,{draggingKeys:D}=B,w=G(r);do{let k=T(b,i);if(!k)return null;b=k,u=n.state.getDropOperation({target:k,types:h,allowedOperations:x,isInternal:w,draggingKeys:D}),b.type==="root"&&s++}while(u==="cancel"&&!n.state.isDropTarget(b)&&s<2);return u==="cancel"?null:b};return xt({element:r.current,preventFocusOnDrop:!0,getDropOperation(b,h){if(n.state.target){let{draggingKeys:T}=B,i=G(r);return n.state.getDropOperation({target:n.state.target,types:b,allowedOperations:h,isInternal:i,draggingKeys:T})}return p(null,b,h,l)?"move":"cancel"},onDropEnter(b,h){let x=z(h.items),T=n.state.selectionManager,i=null;q(r);let s=T.focusedKey,u="after",D=s!=null?n.state.collection.getItem(s):null;if(D?.type==="cell"&&(s=D.parentKey),s!=null&&T.isSelected(s)&&(T.selectedKeys.size>1&&T.firstSelectedKey===s?u="before":s=T.lastSelectedKey),s!=null){i={type:"item",key:s,dropPosition:u};let{draggingKeys:w}=B,k=G(r);n.state.getDropOperation({target:i,types:x,allowedOperations:h.allowedDropOperations,isInternal:k,draggingKeys:w})==="cancel"&&(i=p(i,x,h.allowedDropOperations,l,!1)??p(i,x,h.allowedDropOperations,d,!1))}i||(i=p(null,x,h.allowedDropOperations,l)),n.state.setTarget(i)},onDropExit(){q(void 0),n.state.setTarget(null)},onDropTargetEnter(b){n.state.setTarget(b)},onDropActivate(b,h){h?.type==="item"&&h?.dropPosition==="on"&&typeof n.props.onDropActivate=="function"&&n.props.onDropActivate({type:"dropactivate",x:b.x,y:b.y,target:h})},onDrop(b,h){q(r),n.state.target&&$(b,h||n.state.target)},onKeyDown(b,h){let{keyboardDelegate:x}=n.props,T=z(h.items);switch(b.key){case"ArrowDown":if(x.getKeyBelow){let i=p(n.state.target,T,h.allowedDropOperations,(s,u)=>l(s,u,"down"));n.state.setTarget(i)}break;case"ArrowUp":if(x.getKeyAbove){let i=p(n.state.target,T,h.allowedDropOperations,(s,u)=>l(s,u,"up"));n.state.setTarget(i)}break;case"ArrowLeft":if(x.getKeyLeftOf){let i=p(n.state.target,T,h.allowedDropOperations,(s,u)=>l(s,u,"left"));n.state.setTarget(i)}break;case"ArrowRight":if(x.getKeyRightOf){let i=p(n.state.target,T,h.allowedDropOperations,(s,u)=>l(s,u,"right"));n.state.setTarget(i)}break;case"Home":if(x.getFirstKey){let i=p(null,T,h.allowedDropOperations,l);n.state.setTarget(i)}break;case"End":if(x.getLastKey){let i=p(null,T,h.allowedDropOperations,d);n.state.setTarget(i)}break;case"PageDown":if(x.getKeyPageBelow){let i=n.state.target;if(!i)i=p(null,T,h.allowedDropOperations,l);else{let s=x.getFirstKey?.();i.type==="item"&&(s=i.key);let u=null;s!=null&&(u=x.getKeyPageBelow(s));let D=i.type==="item"?i.dropPosition:"after";if((u==null||i.type==="item"&&i.key===x.getLastKey?.())&&(u=x.getLastKey?.()??null,D="after"),u==null)break;i={type:"item",key:u,dropPosition:D};let{draggingCollectionRef:w,draggingKeys:k}=B,C=w?.current===r?.current;n.state.getDropOperation({target:i,types:T,allowedOperations:h.allowedDropOperations,isInternal:C,draggingKeys:k})==="cancel"&&(i=p(i,T,h.allowedDropOperations,l,!1)??p(i,T,h.allowedDropOperations,d,!1))}n.state.setTarget(i??n.state.target)}break;case"PageUp":{if(!x.getKeyPageAbove)break;let i=n.state.target;if(!i)i=p(null,T,h.allowedDropOperations,d);else if(i.type==="item"){if(i.key===x.getFirstKey?.())i={type:"root"};else{let w=x.getKeyPageAbove(i.key),k=i.dropPosition;if(w==null&&(w=x.getFirstKey?.(),k="before"),w==null)break;i={type:"item",key:w,dropPosition:k}}let{draggingKeys:s}=B,u=G(r);n.state.getDropOperation({target:i,types:T,allowedOperations:h.allowedDropOperations,isInternal:u,draggingKeys:s})==="cancel"&&(i=p(i,T,h.allowedDropOperations,d,!1)??p(i,T,h.allowedDropOperations,l,!1))}n.state.setTarget(i??n.state.target);break}}n.props.onKeyDown?.(b)}})},[n,r,$,m]);let v=ot();return Oe.set(t,{id:v,ref:r}),{collectionProps:Ke(g,{id:v,"aria-describedby":null})}}function St(e,t,r){let{dropProps:n}=Kt(),a=Mr(t);E.useEffect(()=>{if(r.current)return zr({element:r.current,target:e.target,getDropOperation(m,v){let{draggingKeys:l}=B,d=G(a);return t.getDropOperation({target:e.target,types:m,allowedOperations:v,isInternal:d,draggingKeys:l})},activateButtonRef:e.activateButtonRef})},[r,e.target,t,a,e.activateButtonRef]);let o=je(),{draggingKeys:g}=B,c=G(a),y=o&&t.getDropOperation({target:e.target,types:z(o.dragTarget.items),allowedOperations:o.dragTarget.allowedDropOperations,isInternal:c,draggingKeys:g})!=="cancel",$=t.isDropTarget(e.target);return E.useEffect(()=>{o&&$&&r.current&&r.current.focus()},[$,o,r]),{dropProps:{...n,"aria-hidden":!o||y?void 0:"true"},isDropTarget:$}}function un(e){return e&&e.__esModule?e.default:e}function dn(e,t,r){let{target:n}=e,{collection:a}=t,o=ae(un(oe),"@react-aria/dnd"),g=je(),{dropProps:c}=St(e,t,r),y=ot(),$=p=>p==null?"":a.getTextValue?.(p)??a.getItem(p)?.textValue??"",m="",v;if(n.type==="root")m=o.format("dropOnRoot"),v=`${y} ${Or(t)}`;else if(n.dropPosition==="on")m=o.format("dropOnItem",{itemText:$(n.key)});else{let p,b;if(n.dropPosition==="before"){let h=a.getItem(n.key)?.prevKey,x=h!=null?a.getItem(h):null;p=x?.type==="item"?x.key:null}else p=n.key;if(n.dropPosition==="after"){let h=a.getItem(n.key)?.nextKey,x=h!=null?a.getItem(h):null;b=x?.type==="item"?x.key:null}else b=n.key;p!=null&&b!=null?m=o.format("insertBetween",{beforeItemText:$(p),afterItemText:$(b)}):p!=null?m=o.format("insertAfter",{itemText:$(p)}):b!=null&&(m=o.format("insertBefore",{itemText:$(b)}))}let l=t.isDropTarget(n),d=g?c["aria-hidden"]:"true";return{dropIndicatorProps:{...c,id:y,"aria-roledescription":o.format("dropIndicator"),"aria-label":m,"aria-labelledby":v,"aria-hidden":d,tabIndex:-1},isDropTarget:l,isHidden:!l&&!!d}}function cn(e){return e&&e.__esModule?e.default:e}const Je={keyboard:{start:"dragDescriptionKeyboard",end:"endDragKeyboard"},touch:{start:"dragDescriptionTouch",end:"endDragTouch"},virtual:{start:"dragDescriptionVirtual",end:"endDragVirtual"}};function pn(e){let{hasDragButton:t,isDisabled:r}=e,n=ae(cn(oe),"@react-aria/dnd"),a=E.useRef({options:e,x:0,y:0}).current;a.options=e;let o=E.useRef(null),[g,c]=E.useState(!1),y=u=>{o.current=u,c(!!u)},{addGlobalListener:$,removeAllGlobalListeners:m}=ar(),v=E.useRef(null),l=u=>{if(u.defaultPrevented)return;if(u.stopPropagation(),v.current==="virtual"){u.preventDefault(),h(M(u)),v.current=null;return}typeof e.onDragStart=="function"&&e.onDragStart({type:"dragstart",x:u.clientX,y:u.clientY});let D=e.getItems();u.dataTransfer.clearData?.(),Se(u.dataTransfer,D);let w=P.all;if(typeof e.getAllowedDropOperations=="function"){let F=e.getAllowedDropOperations();w=P.none;for(let I of F)w|=P[I]||P.none}$e(w);let k=yt[w]||"none";u.dataTransfer.effectAllowed=k==="cancel"?"none":k,typeof e.preview?.current=="function"&&e.preview.current(D,(F,I,j)=>{if(!F)return;let N=F.getBoundingClientRect(),Y=u.currentTarget.getBoundingClientRect(),Z=u.clientX-Y.x,Q=u.clientY-Y.y;(Z>N.width||Q>N.height)&&(Z=N.width/2,Q=N.height/2);let U=Z,X=Q;typeof I=="number"&&typeof j=="number"&&(U=I,X=j),U=Math.max(0,Math.min(U,N.width)),X=Math.max(0,Math.min(X,N.height));let K=2*Math.round(N.height/2);F.style.height=`${K}px`,u.dataTransfer.setDragImage(F,U,X)}),$(window,"drop",F=>{F.preventDefault(),F.stopPropagation(),console.warn("Drags initiated from the React Aria useDrag hook may only be dropped on a target created with useDrop. This ensures that a keyboard and screen reader accessible alternative is available.")},{once:!0}),a.x=u.clientX,a.y=u.clientY;let C=M(u);requestAnimationFrame(()=>{y(C)})},d=u=>{u.stopPropagation(),!(u.clientX===a.x&&u.clientY===a.y)&&(typeof e.onDragMove=="function"&&e.onDragMove({type:"dragmove",x:u.clientX,y:u.clientY}),a.x=u.clientX,a.y=u.clientY)},p=u=>{if(u.stopPropagation(),typeof e.onDragEnd=="function"){let D={type:"dragend",x:u.clientX,y:u.clientY,dropOperation:re[u.dataTransfer.dropEffect]};fe&&(D.dropOperation=re[fe]),e.onDragEnd(D)}y(null),m(),$e(P.none),he(void 0)};E.useEffect(()=>()=>{if(o.current&&(!o.current.isConnected||parseInt(E.version,10)<17)){if(typeof a.options.onDragEnd=="function"){let u={type:"dragend",x:0,y:0,dropOperation:re[fe||"none"]};a.options.onDragEnd(u)}y(null),$e(P.none),he(void 0)}},[a]);let b=u=>{u.pointerType!=="keyboard"&&u.pointerType!=="virtual"||h(u.target)},h=u=>{if(typeof a.options.onDragStart=="function"){let D=u.getBoundingClientRect();a.options.onDragStart({type:"dragstart",x:D.x+D.width/2,y:D.y+D.height/2})}Yr({element:u,items:a.options.getItems(),allowedDropOperations:typeof a.options.getAllowedDropOperations=="function"?a.options.getAllowedDropOperations():["move","copy","link"],onDragEnd(D){y(null),typeof a.options.onDragEnd=="function"&&a.options.onDragEnd(D)}},n),y(u)},x=Me(),T=g?Je[x].end:Je[x].start,i=Ie(n.format(T)),s={};return t||(s={...i,onPointerDown(u){if(v.current=tt(u.nativeEvent)?"virtual":u.pointerType,u.width<1&&u.height<1&&at()&&nt())v.current="virtual";else{let D=u.currentTarget.getBoundingClientRect(),w=u.clientX-D.x,k=u.clientY-D.y,C=D.width/2,F=D.height/2;Math.abs(w-C)<=.5&&Math.abs(k-F)<=.5?v.current="virtual":v.current=u.pointerType}},onKeyDownCapture(u){M(u)===u.currentTarget&&u.key==="Enter"&&(u.preventDefault(),u.stopPropagation())},onKeyUpCapture(u){M(u)===u.currentTarget&&u.key==="Enter"&&(u.preventDefault(),u.stopPropagation(),h(M(u)))},onClick(u){(et(u.nativeEvent)||v.current==="virtual")&&(u.preventDefault(),u.stopPropagation(),h(M(u)))}}),r?{dragProps:{draggable:"false"},dragButtonProps:{},isDragging:!1}:{dragProps:{...s,draggable:"true",onDragStart:l,onDrag:d,onDragEnd:p},dragButtonProps:{...i,onPress:b},isDragging:g}}function fn(e){return e&&e.__esModule?e.default:e}const gn={keyboard:{selected:"dragSelectedKeyboard",notSelected:"dragDescriptionKeyboard"},touch:{selected:"dragSelectedLongPress",notSelected:"dragDescriptionLongPress"},virtual:{selected:"dragDescriptionVirtual",notSelected:"dragDescriptionVirtual"}};function yn(e,t){let r=ae(fn(oe),"@react-aria/dnd"),n=t.isDisabled||t.selectionManager.isDisabled(e.key),{dragProps:a,dragButtonProps:o}=pn({getItems(){return t.getItems(e.key)},preview:t.preview,getAllowedDropOperations:t.getAllowedDropOperations,hasDragButton:e.hasDragButton,onDragStart(d){t.startDrag(e.key,d),Gr(t.draggingKeys)},onDragMove(d){t.moveDrag(d)},onDragEnd(d){let{dropOperation:p}=d,b=p==="cancel"?!1:G();t.endDrag({...d,keys:t.draggingKeys,isInternal:b}),Et()}}),g=t.collection.getItem(e.key),c=t.getKeysForDrag(e.key).size,y=c>1&&t.selectionManager.isSelected(e.key),$,m,v=Me();if(!e.hasDragButton&&t.selectionManager.selectionMode!=="none"){let d=gn[v][y?"selected":"notSelected"];e.hasAction&&v==="keyboard"&&(d+="Alt"),y?m=r.format(d,{count:c}):m=r.format(d),delete a.onClick}else if(y)$=r.format("dragSelectedItems",{count:c});else{let d=t.collection.getTextValue?.(e.key)??g?.textValue??"";$=r.format("dragItem",{itemText:d})}let l=Ie(m);if(m&&Object.assign(a,l),!e.hasDragButton&&e.hasAction){let{onKeyDownCapture:d,onKeyUpCapture:p}=a;v==="touch"&&delete a["aria-describedby"],a.onKeyDownCapture=b=>{b.altKey&&d?.(b)},a.onKeyUpCapture=b=>{b.altKey&&p?.(b)}}return{dragProps:n?{}:a,dragButtonProps:{...o,isDisabled:n,"aria-label":$}}}function mn(e,t,r){let{draggingCollectionRef:n}=B;t.draggingKeys.size>0&&n?.current!==r.current&&Vr(r)}const hn=W.forwardRef(function(t,r){let n=t.children,[a,o]=E.useState(null),g=E.useRef(null),c=E.useRef(void 0);return E.useImperativeHandle(r,()=>(y,$)=>{let m=n(y),v,l,d;m&&typeof m=="object"&&"element"in m?(v=m.element,l=m.x,d=m.y):v=m,Pt.flushSync(()=>{o(v)}),$(g.current,l,d),c.current=requestAnimationFrame(()=>{o(null)})},[n]),E.useEffect(()=>()=>{c.current&&cancelAnimationFrame(c.current)},[]),a?W.createElement("div",{style:{zIndex:-100,position:"fixed",top:0,left:-1e5},ref:g},a):null});function Dn(e){let{getItems:t,isDisabled:r,collection:n,selectionManager:a,onDragStart:o,onDragMove:g,onDragEnd:c,preview:y,getAllowedDropOperations:$}=e,[,m]=E.useState(!1),v=E.useRef(new Set),l=E.useRef(null),d=p=>{let b=new Set;if(a.isSelected(p))for(let h of a.selectedKeys){let x=n.getItem(h);if(x){let T=!1,i=x.parentKey;for(;i!=null;){if(a.selectedKeys.has(i)){T=!0;break}let s=n.getItem(i);i=s?s.parentKey:null}T||b.add(h)}}else b.add(p);return b};return{collection:n,selectionManager:a,get draggedKey(){return l.current},get draggingKeys(){return v.current},isDragging(p){return v.current.has(p)},getKeysForDrag:d,getItems(p){let b=d(p),h=[];for(let x of b){let T=n.getItem(x)?.value;T!=null&&h.push(T)}return t(d(p),h)},isDisabled:r,preview:y,getAllowedDropOperations:$,startDrag(p,b){let h=d(p);v.current=h,l.current=p,a.setFocused(!1),m(!0),typeof o=="function"&&o({...b,keys:h})},moveDrag(p){typeof g=="function"&&g({...p,keys:v.current})},endDrag(p){let{isInternal:b}=p;typeof c=="function"&&c({...p,keys:v.current,isInternal:b}),v.current=new Set,l.current=null,m(!1)}}}function bn(e){let{acceptedDragTypes:t="all",isDisabled:r,onInsert:n,onRootDrop:a,onItemDrop:o,onReorder:g,onMove:c,shouldAcceptItemDrop:y,collection:$,selectionManager:m,onDropEnter:v,getDropOperation:l,onDrop:d}=e,[p,b]=E.useState(null),h=E.useRef(null),x=i=>{if(i.dropPosition==="before"){let s=$.getItem(i.key);return s&&s.prevKey!=null?{type:"item",key:s.prevKey,dropPosition:"after"}:null}else if(i.dropPosition==="after"){let s=$.getItem(i.key);return s&&s.nextKey!=null?{type:"item",key:s.nextKey,dropPosition:"before"}:null}return null},T=E.useCallback(i=>{let{target:s,types:u,allowedOperations:D,isInternal:w,draggingKeys:k}=i;if(r||!s)return"cancel";if(t==="all"||t.some(C=>u.has(C))){let C=n&&s.type==="item"&&!w&&(s.dropPosition==="before"||s.dropPosition==="after"),F=g&&s.type==="item"&&w&&(s.dropPosition==="before"||s.dropPosition==="after")&&$n($,s,k),I=s.type!=="item"||s.dropPosition!=="on"||!y||y(s,u),j=c&&s.type==="item"&&w&&I,N=a&&s.type==="root"&&!w,Y=o&&s.type==="item"&&s.dropPosition==="on"&&!(w&&s.key!=null&&k.has(s.key))&&I;if(d||C||F||j||N||Y)return l?l(s,u,D):D[0]}return"cancel"},[r,$,t,l,n,a,o,y,g,c,d]);return{collection:$,selectionManager:m,isDisabled:r,target:p,setTarget(i){if(this.isDropTarget(i))return;let s=h.current;s&&typeof e.onDropExit=="function"&&e.onDropExit({type:"dropexit",x:0,y:0,target:s}),i&&typeof v=="function"&&v({type:"dropenter",x:0,y:0,target:i}),h.current=i??null,b(i??null)},isDropTarget(i){let s=h.current;return!s||!i?!1:Te(i,s)?!0:i?.type==="item"&&s?.type==="item"&&i.key!==s.key&&i.dropPosition!==s.dropPosition&&i.dropPosition!=="on"&&s.dropPosition!=="on"?Te(x(i),s)||Te(i,x(s)):!1},getDropOperation(i){let{target:s,isInternal:u,draggingKeys:D}=i;if(u&&s.type==="item"&&D.size>0){if(D.has(s.key)&&s.dropPosition==="on")return"cancel";let w=s.key;for(;w!=null;){let C=$.getItem(w)?.parentKey;if(C!=null&&D.has(C))return"cancel";w=C??null}}return T(i)}}}function Te(e,t){if(!e)return!t;switch(e.type){case"root":return t?.type==="root";case"item":return t?.type==="item"&&t?.key===e.key&&t?.dropPosition===e.dropPosition}}function $n(e,t,r){let n=e.getItem(t.key);for(let a of r)if(e.getItem(a)?.parentKey!==n?.parentKey)return!1;return!0}class vn{constructor(t,r,n){this.collection=t,this.ref=r,this.layout=n?.layout||"stack",this.orientation=n?.orientation||"vertical",this.direction=n?.direction||"ltr"}getPrimaryStart(t){return this.orientation==="horizontal"?t.left:t.top}getPrimaryEnd(t){return this.orientation==="horizontal"?t.right:t.bottom}getSecondaryStart(t){return this.orientation==="horizontal"?t.top:t.left}getSecondaryEnd(t){return this.orientation==="horizontal"?t.bottom:t.right}getFlowStart(t){return this.layout==="stack"?this.getPrimaryStart(t):this.getSecondaryStart(t)}getFlowEnd(t){return this.layout==="stack"?this.getPrimaryEnd(t):this.getSecondaryEnd(t)}getFlowSize(t){return this.getFlowEnd(t)-this.getFlowStart(t)}getDropTargetFromPoint(t,r,n){if(this.collection[Symbol.iterator]().next().done||!this.ref.current)return{type:"root"};let a=this.ref.current.getBoundingClientRect(),o=this.orientation==="horizontal"?t:r,g=this.orientation==="horizontal"?r:t;o+=this.getPrimaryStart(a),g+=this.getSecondaryStart(a);let c=this.layout==="stack"?o:g,y=this.orientation==="horizontal"&&this.direction==="rtl",$=this.layout==="grid"&&this.orientation==="vertical"&&this.direction==="rtl",m=this.layout==="stack"?y:$,v=this.ref.current?.dataset.collection,l=this.ref.current.querySelectorAll(v?`[data-collection="${CSS.escape(v)}"]`:"[data-key]"),d=new Map;for(let i of l)i instanceof HTMLElement&&i.dataset.key!=null&&d.set(i.dataset.key,i);let p=[...this.collection].filter(i=>i.type==="item");if(p.length<1)return{type:"root"};let b=0,h=p.length;for(;b{k?b=i+1:h=i};if(othis.getPrimaryEnd(D))w(!y);else if(gthis.getSecondaryEnd(D))w(!$);else{let k={type:"item",key:s.key,dropPosition:"on"};if(n(k))c<=this.getFlowStart(D)+5&&n({...k,dropPosition:"before"})?k.dropPosition=m?"after":"before":c>=this.getFlowEnd(D)-5&&n({...k,dropPosition:"after"})&&(k.dropPosition=m?"before":"after");else{let C=this.getFlowStart(D)+this.getFlowSize(D)/2;c<=C&&n({...k,dropPosition:"before"})?k.dropPosition=m?"after":"before":c>=C&&n({...k,dropPosition:"after"})&&(k.dropPosition=m?"before":"after")}return k}}let x=p[Math.min(b,p.length-1)];return a=d.get(String(x.key))?.getBoundingClientRect(),a&&(o{let{onDrop:r,onInsert:n,onItemDrop:a,onReorder:o,onMove:g,onRootDrop:c,getItems:y,renderDragPreview:$,renderDropIndicator:m,dropTargetDelegate:v}=e,l=!!y,d=!!(r||n||a||o||g||c),p={};return l&&(p.useDraggableCollectionState=function(h){return Dn({...h,...e})},p.useDraggableCollection=mn,p.useDraggableItem=yn,p.DragPreview=hn,p.renderDragPreview=$,p.isVirtualDragging=Ur),d&&(p.useDroppableCollectionState=function(h){return bn({...h,...e})},p.useDroppableItem=St,p.useDroppableCollection=function(h,x,T){return sn({...h,...e},x,T)},p.useDropIndicator=dn,p.renderDropIndicator=m,p.dropTargetDelegate=v,p.ListDropTargetDelegate=vn),p},[e])}}function ce({children:e,tone:t,action:r}){return f.jsxs("span",{className:Ae("rp-tag",t),children:[f.jsx("span",{className:"rp-tag-label",children:e}),r]})}function Ze({label:e,children:t}){return f.jsx("div",{className:"rp-tags",role:"group","aria-label":e,children:t})}function xn({label:e,message:t,children:r}){return f.jsxs("div",{className:"rp-actionbar",role:"region","aria-label":e,children:[f.jsx("span",{"aria-live":"polite",children:t}),f.jsx("div",{className:"rp-toolbar",children:r})]})}function wn({className:e,...t}){return f.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",focusable:"false",className:Ae("rp-icon",e),...t,children:[1.6,6,10.4].flatMap(r=>[3.8,8.2].map(n=>f.jsx("circle",{cx:n,cy:r,r:1.1,fill:"currentColor"},`${n}-${r}`)))})}function Tn(e,t){return e.flatMap(r=>{if(r.kind!=="subscription")return[];const n=t.filter(o=>o.provider_id===r.id),a=new Set(n.map(o=>o.subscription_tag).filter(Boolean));return a.size!==1?[]:[{tag:[...a][0],label:r.name,count:n.length}]})}const Qe=6;function kn(e,t,r,n,a){const o=new Map(Ce(e).map(l=>[l.name,Ve(l)])),g=it(e,t),c=Ce(g),y=new Map(r.map(l=>[l.tag,l])),$=a("arrange.lastMember"),m=c.map(l=>{const d=Ve(l),p=o.get(l.name),b=Ge(l.filters),h=d.rules.length?Ge(d.rules):null,x=t.filter(s=>s.group===l.name),T=new Set(x.flatMap(s=>s.kind==="removeNode"?n.filter(u=>u.name===s.value):s.kind==="removeSubscription"?n.filter(u=>u.subscription_tag===s.value):[])),i=h?n.filter(h).map(s=>s.name):[];return{name:l.name,isNew:!p,holdsAll:l.filters.length===0,names:d.names.map(s=>({name:s,isNew:!!p&&!p.names.includes(s),blocked:He(l,"name",s)?$:null})),subscriptions:d.subtags.map(s=>({tag:s,label:y.get(s)?.label??s,count:y.get(s)?.count??null,isNew:!!p&&!p.subtags.includes(s),blocked:He(l,"subtag",s)?$:null})),rules:d.rules,ruleNote:d.rules.length?a("arrange.ruleNote",{n:d.rules.length}):null,ruleNodes:i.slice(0,Qe),ruleMore:Math.max(0,i.length-Qe),stillIn:[...T].filter(b).map(s=>s.name),removedNames:x.flatMap(s=>s.kind==="removeNode"?[s.value]:[]),removedSubscriptions:x.flatMap(s=>s.kind==="removeSubscription"?[{tag:s.value,label:y.get(s.value)?.label??s.value}]:[])}}),v=new Set(n.map(l=>l.name));return{groups:m,stagedText:g,unknown:new Set(m.flatMap(l=>l.names.filter(d=>!v.has(d.name)).map(d=>d.name))),emptyNew:m.filter(l=>l.isNew&&l.holdsAll).map(l=>l.name)}}function Kn(e,t){return t?null:[...e.names,...e.subscriptions].find(r=>r.blocked)?.blocked??null}function Cn(e,t,r){return e??(t.length?r("arrange.emptyNew",{group:t[0]}):null)}function Ft(e,t){return e?t.kind==="node"?e.names.some(r=>r.name===t.value):e.subscriptions.some(r=>r.tag===t.value):!1}function Sn(e){try{const t=JSON.parse(e);if(!t||typeof t!="object")return null;const{kind:r,value:n}=t;return(r==="node"||r==="subscription")&&typeof n=="string"&&n?{kind:r,value:n}:null}catch{return null}}function Fn(e,t,r){const n=a=>t.find(o=>o.tag===a)?.label??a;switch(e.kind){case"addNode":return r("arrange.change.addNode",{name:e.value,group:e.group});case"removeNode":return r("arrange.change.removeNode",{name:e.value,group:e.group});case"addSubscription":return r("arrange.change.addSubscription",{name:n(e.value),group:e.group});case"removeSubscription":return r("arrange.change.removeSubscription",{name:n(e.value),group:e.group});case"createGroup":return r("arrange.change.createGroup",{group:e.group})}}function ke(e,t){const r={addNode:"removeNode",removeNode:"addNode",addSubscription:"removeSubscription",removeSubscription:"addSubscription"};if(t.kind==="createGroup")return e.some(a=>a.kind==="createGroup"&&a.group===t.group)?e:[...e,t];if((t.kind==="addNode"||t.kind==="addSubscription")&&!lt(t.value))return e;const n=e.findIndex(a=>a.kind===r[t.kind]&&a.group===t.group&&"value"in a&&a.value===t.value);return n!==-1?e.filter((a,o)=>o!==n):e.some(a=>a.kind===t.kind&&a.group===t.group&&"value"in a&&a.value===t.value)?e:[...e,t]}function Pn(e,t){const r=e[t];return e.filter((n,a)=>a!==t&&!(r.kind==="createGroup"&&n.group===r.group))}const ge="application/x-doona-placeable";function Bn(e,t){const r=J(),n=or(),a=n.data?.resources,o=ir(ze(a,"nodes",{whileLoading:!1})),g=lr(ze(a,"providers",{whileLoading:!1})),c=o.data,[y,$]=E.useState([]),m=sr(y.length>0,()=>$([])),v=e.main?.content??"",l=E.useMemo(()=>Tn(g.data?.providers??[],c??[]),[g.data,c]),d=E.useMemo(()=>kn(v,y,l,c??[],r),[v,y,l,c,r]),p=E.useMemo(()=>new Map(d.groups.map(K=>[K.name,K])),[d.groups]),{contains:b}=Ir({sensitivity:"base"}),[h,x]=E.useState(""),T=E.useDeferredValue(h).trim(),i=E.useMemo(()=>(c??[]).filter(K=>!T||b(K.name,T)||b(K.protocol??"",T)),[c,T,b]),s=E.useMemo(()=>l.filter(K=>!T||b(K.label,T)),[l,T,b]),[u,D]=E.useState(!1),[w,k]=E.useState(!1),[C,F]=E.useState(null),I=e.writable?e.main?null:"arrange.noMain":"arrange.readOnly",j=K=>{w||(F(null),$(K))},N=(K,O)=>{O.some(A=>!lt(A.value))&&Ye("negative",r("config.unquotable")),j(A=>O.filter(ee=>!Ft(p.get(K),ee)).reduce((ee,Re)=>ke(ee,{kind:Re.kind==="node"?"addNode":"addSubscription",group:K,value:Re.value}),A))},Y=(K,O)=>j(A=>ke(A,{kind:O.kind==="node"?"removeNode":"removeSubscription",group:K,value:O.value})),Z=new Set(d.groups.map(K=>K.name)),Q=K=>Fr(K,Z,r),U=async()=>{k(!0),F(null);try{const K=await e.apply(O=>it(O,y));if(K.kind==="invalid"&&F(r("ui.writeInvalid",{n:K.errors})),K.kind==="failed"&&F(r("arrange.failed",{error:dr(K.error,r)})),K.kind==="ok"){const O=[...new Set(y.map(ee=>ee.group))],A=O.length===1?O[0]:null;Ye("positive",r("arrange.applied",{n:y.length}),{action:{label:r(A===null?"policy.viewGroups":"policy.viewGroup"),onAction:()=>t(A),closeOnAction:!0}}),$([]),m.clear(),D(!1)}}finally{k(!1)}},X=E.useMemo(()=>{if(!y.length)return[];const K=d.stagedText.split(` -`),O=new Set(y.map(A=>A.group));return Ce(d.stagedText).filter(A=>O.has(A.name)).map(A=>({group:A.name,text:K.slice(A.from,A.to+1).join(` -`)}))},[d.stagedText,y]);return{groups:d.groups,unknown:d.unknown,byGroup:p,subscriptions:s,nodes:i,search:h,setSearch:x,loading:n.loading&&!n.data||o.loading&&!c||g.loading&&!g.data,error:[n,o,g].find(K=>K.error&&!K.data)?.error??(e.main?null:e.error),retry:E.useCallback(()=>void ur(),[]),blocked:I?r(I):null,busy:e.busy||w,applying:w,failure:C,changes:y,changeLines:y.map(K=>Fn(K,l,r)),pendingText:r("arrange.pending",{n:y.length}),place:N,unplace:Y,drop:K=>j(O=>Pn(O,K)),discard:()=>j(()=>[]),nameProblem:Q,create:(K,O)=>j(A=>ke(A,{kind:"createGroup",group:K,policy:O})),reviewing:u&&y.length>0,setReviewing:K=>{w||D(K)},preview:X,canApply:y.length>0&&d.emptyNew.length===0&&!I&&!w,applyNote:Cn(I?r(I):null,d.emptyNew,r),apply:U}}function _n({source:e,groups:t,viewGroup:r}){const n=J(),a=Bn(e,r),o=E.useMemo(()=>new Map((t??[]).map(g=>[g.name,g])),[t]);return a.error?f.jsx(cr,{error:a.error,onRetry:a.retry}):a.loading?f.jsx(pr,{}):f.jsxs("div",{className:"rp-arrange",children:[f.jsxs("div",{className:"rp-row",children:[f.jsxs("p",{className:"rp-note rp-grow",children:[f.jsx("span",{className:"rp-wide-only",children:n("arrange.note")}),f.jsx("span",{className:"rp-narrow-only",children:n("arrange.selectHint")})]}),f.jsx(On,{m:a})]}),a.blocked&&f.jsx(te,{tone:"informative",children:a.blocked}),f.jsxs("div",{className:"rp-arrange-grid",children:[f.jsx("div",{className:"rp-col",children:a.groups.length?a.groups.map(g=>f.jsx(In,{group:g,live:o.get(g.name),m:a},g.name)):f.jsx(st,{children:n("policy.empty")})}),f.jsx(An,{m:a})]}),a.changes.length>0&&f.jsxs(xn,{label:n("arrange.pendingRegion"),message:a.pendingText,children:[f.jsx(V,{quiet:!0,onPress:a.discard,isDisabled:a.busy,children:n("arrange.discard")}),f.jsx(V,{accent:!0,onPress:()=>a.setReviewing(!0),children:n("arrange.review")})]}),f.jsx(Mn,{m:a})]})}function In({group:e,live:t,m:r}){const n=J(),a=ct(),o=E.useId(),g=!!r.blocked,c=t?Pr(t.policy,n):null,y=async v=>{const l=await Promise.all(v.filter(Lr).filter(d=>d.types.has(ge)).map(d=>d.getText(ge)));r.place(e.name,l.flatMap(d=>Sn(d)??[]))},$=(v,l,d)=>f.jsx(V,{quiet:!0,icon:!0,small:!0,label:n("arrange.remove",{name:v,group:e.name}),isDisabled:g||r.applying||!!d,onPress:()=>r.unplace(e.name,l),children:f.jsx(pt,{})}),m=(v,l)=>f.jsx(V,{quiet:!0,small:!0,label:n("arrange.undoRemove",{name:v}),isDisabled:r.applying,onPress:()=>r.place(e.name,[l]),children:n("arrange.undoShort")});return f.jsx(an,{className:hr("rp-drop"),"aria-label":n("arrange.dropInto",{group:e.name}),isDisabled:g||r.applying,getDropOperation:v=>v.has(ge)?"copy":"cancel",onDrop:v=>void y(v.items),children:({isDropTarget:v})=>f.jsxs(f.Fragment,{children:[f.jsx("div",{className:"rp-row",children:f.jsxs("span",{className:"rp-cluster",children:[f.jsx("h3",{className:"rp-h3",id:o,children:e.name}),c&&f.jsx(Xe,{tip:c.id,children:c.label}),t&&f.jsx(fr,{small:!0,tone:"neutral",children:n("arrange.memberCount",{n:t.member_count})}),e.isNew&&f.jsx(Xe,{children:n("arrange.new")})]})}),e.holdsAll&&f.jsx("p",{className:"rp-note",children:n("arrange.holdsAll")}),f.jsxs(gr,{reason:Kn(e,g||r.applying),children:[(e.names.length>0||e.removedNames.length>0)&&f.jsxs(Ze,{label:n("arrange.byName"),children:[f.jsx("span",{className:"rp-label rp-tags-title",children:n("arrange.byName")}),e.names.map(l=>f.jsx(ce,{tone:l.isNew?"new":void 0,action:$(l.name,{kind:"node",value:l.name},l.blocked),children:l.name},l.name)),e.removedNames.map(l=>f.jsx(ce,{tone:"removed",action:m(l,{kind:"node",value:l}),children:l},l))]}),(e.subscriptions.length>0||e.removedSubscriptions.length>0)&&f.jsxs(Ze,{label:n("arrange.bySubscription"),children:[f.jsx("span",{className:"rp-label rp-tags-title",children:n("arrange.bySubscription")}),e.subscriptions.map(l=>f.jsx(ce,{tone:l.isNew?"new":void 0,action:$(l.label,{kind:"subscription",value:l.tag},l.blocked),children:l.count===null?l.label:n("arrange.subscriptionCount",{name:l.label,n:l.count})},l.tag)),e.removedSubscriptions.map(l=>f.jsx(ce,{tone:"removed",action:m(l.label,{kind:"subscription",value:l.tag}),children:l.label},l.tag))]})]}),e.rules.length>0&&f.jsxs("div",{className:"rp-arrange-rules",children:[f.jsx("span",{className:"rp-label",children:n("arrange.byRule")}),e.rules.map(l=>f.jsx(ft,{as:"code",text:l},l)),e.ruleNodes.length>0&&f.jsx("span",{children:e.ruleMore?n("arrange.ruleSelectsMore",{names:pe(a,e.ruleNodes),n:e.ruleMore}):n("arrange.ruleSelects",{names:pe(a,e.ruleNodes)})}),f.jsxs("span",{className:"rp-label",children:[e.ruleNote," ",f.jsx(yr,{appearance:"link",href:mr("config",{tab:"source"}),children:n("arrange.editSource")})]})]}),e.stillIn.length>0&&f.jsx(te,{tone:"informative",children:n("arrange.stillIn",{names:pe(a,e.stillIn)})}),v&&f.jsx("div",{className:"rp-drop-hint","aria-hidden":"true",children:n("arrange.dropHint")})]})})}function An({m:e}){const t=J(),r=E.useId(),n=!!e.blocked||e.applying,[a,o]=E.useState("all"),[g,c]=E.useState(new Set),y=E.useMemo(()=>[...a==="node"?[]:e.subscriptions.map(d=>({id:"subscription:"+d.tag,item:{kind:"subscription",value:d.tag},label:d.label,meta:t("arrange.subscriptionMeta",{n:d.count})})),...a==="subscription"?[]:e.nodes.map(d=>({id:"node:"+d.name,item:{kind:"node",value:d.name},label:d.name,meta:d.protocol??""}))],[a,e.subscriptions,e.nodes,t]),$=E.useMemo(()=>new Map(y.map(d=>[d.id,d])),[y]),m=g==="all"?y:[...g].flatMap(d=>$.get(String(d))??[]),{dragAndDropHooks:v}=En({getItems:d=>[...d].flatMap(p=>$.has(String(p))?[{[ge]:JSON.stringify($.get(String(p)).item),"text/plain":$.get(String(p)).label}]:[]),getAllowedDropOperations:()=>["copy"],isDisabled:n}),l=e.groups.filter(d=>m.some(p=>!Ft(d,p.item)));return f.jsxs(Dr,{title:t("arrange.tray"),titleId:r,className:"rp-tray",children:[f.jsx(dt,{search:!0,label:t("arrange.search"),value:e.search,onChange:e.setSearch}),f.jsx(br,{label:t("arrange.show"),value:a,onChange:d=>o(d),items:[["all",t("ui.all")],["subscription",t("arrange.subscriptions")],["node",t("arrange.nodes")]]}),f.jsx(Cr,{layout:Sr,layoutOptions:{rowHeight:48},children:f.jsx(kr,{"aria-labelledby":r,className:"rp-tray-list",items:y,selectionMode:"multiple",selectionBehavior:"toggle",selectedKeys:g,onSelectionChange:c,dragAndDropHooks:v,renderEmptyState:()=>f.jsx(st,{children:t("arrange.trayEmpty")}),children:d=>f.jsxs(Kr,{id:d.id,textValue:d.label,className:"rp-item rp-tray-row",children:[f.jsx($r,{slot:"drag",className:Ae(vr({quiet:!0,icon:!0,small:!0}),"rp-drag"),"aria-label":t("arrange.drag",{name:d.label}),children:f.jsx(wn,{})}),f.jsx(Er,{}),f.jsxs("span",{className:"rp-grow",children:[f.jsx(xr,{children:d.label}),f.jsx("span",{className:"desc",children:d.meta})]})]})})}),f.jsxs("div",{className:"rp-tray-bar",children:[f.jsx("span",{className:"rp-grow rp-label","aria-live":"polite",children:m.length?t("arrange.selected",{n:m.length}):t("arrange.selectHint")}),m.length>0&&f.jsx(V,{quiet:!0,small:!0,onPress:()=>c(new Set),children:t("arrange.clear")}),f.jsx(wr,{label:t("arrange.addSelected"),isDisabled:n||!l.length,items:l.map(d=>({id:d.name,label:d.name})),onAction:d=>{e.place(d,m.map(p=>p.item)),c(new Set)},children:t("arrange.addSelected")})]})]})}function On({m:e}){const t=J(),r=E.useId(),[n,a]=E.useState(!1),[o,g]=E.useState(""),[c,y]=E.useState(Ue[0].id),[$,m]=E.useState(!1),v=e.nameProblem(o.trim()),l=()=>{g(""),y(Ue[0].id),m(!1)};return f.jsxs(f.Fragment,{children:[f.jsx(V,{small:!0,onPress:()=>a(!0),isDisabled:!!e.blocked||e.applying,children:t("arrange.newGroup")}),f.jsx(ut,{title:t("arrange.newGroup"),narrow:!0,isOpen:n,onOpenChange:d=>{a(d),d||l()},footer:d=>f.jsxs(f.Fragment,{children:[f.jsx(V,{onPress:d,children:t("ui.cancel")}),f.jsx(V,{accent:!0,type:"submit",form:r,children:t("arrange.create")})]}),children:f.jsxs("form",{id:r,className:"rp-form",onSubmit:d=>{d.preventDefault(),m(!0),!v&&(e.create(o.trim(),c),a(!1),l())},children:[f.jsx(dt,{label:t("arrange.groupName"),value:o,onChange:g,description:t("arrange.groupNameHint"),error:$&&v?v:void 0,spellCheck:!1}),f.jsx(Br,{value:c,onChange:y}),f.jsx("p",{className:"rp-label",children:t("arrange.newGroupNote")})]})})]})}function Mn({m:e}){const t=J(),r=ct();return f.jsxs(ut,{title:t("arrange.reviewTitle"),isOpen:e.reviewing,onOpenChange:e.setReviewing,footer:n=>f.jsxs(f.Fragment,{children:[f.jsx(V,{onPress:n,isDisabled:e.applying,children:t("ui.cancel")}),f.jsx(V,{accent:!0,isPending:e.applying,isDisabled:!e.canApply,onPress:()=>void e.apply(),children:t("config.save")})]}),children:[e.failure&&f.jsx(te,{takeFocus:!0,children:e.failure}),e.applyNote&&f.jsx(te,{children:e.applyNote}),e.unknown.size>0&&f.jsx(te,{tone:"informative",children:t("arrange.unknown",{names:pe(r,[...e.unknown])})}),f.jsx("ol",{className:"rp-arrange-changes",children:e.changeLines.map((n,a)=>f.jsxs("li",{className:"rp-row",children:[f.jsx("span",{className:"rp-grow",children:n}),f.jsx(V,{quiet:!0,icon:!0,small:!0,label:t("arrange.undo",{change:n}),isDisabled:e.applying,onPress:()=>e.drop(a),children:f.jsx(pt,{})})]},a))}),f.jsx(Tr,{title:t("arrange.showText"),children:e.preview.map(n=>f.jsx(ft,{as:"pre",className:"rp-arrange-preview",text:n.text},n.group))}),f.jsx("p",{className:"rp-label",children:t("arrange.applyNote")})]})}export{_n as Arrange}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Arrange-Dd3j3leY.css b/luci-app-honk/root/etc/honk/doona/assets/Arrange-Dd3j3leY.css deleted file mode 100644 index 29204d81a..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Arrange-Dd3j3leY.css +++ /dev/null @@ -1 +0,0 @@ -.rp-arrange{padding-bottom:calc(var(--rp-control) + 48px);flex-direction:column;gap:16px;display:flex}.rp-arrange-grid{grid-template-columns:minmax(0,1fr);align-items:start;gap:16px;display:grid}.rp-drop{transition:background-color var(--rp-duration) var(--rp-ease), border-color var(--rp-duration) var(--rp-ease);outline:none;flex-direction:column;gap:12px;display:flex;position:relative}.rp-drop[data-drop-target]{border-color:var(--rp-accent);background:var(--rp-fill)}.rp-drop[data-focus-visible]{outline:2px solid var(--rp-accent);outline-offset:2px}.rp-drop-hint{border-radius:inherit;color:var(--rp-accent-text);background:color-mix(in srgb, var(--rp-surface) 70%, transparent);pointer-events:none;place-items:center;font-weight:600;display:grid;position:absolute;inset:0}.rp-tags-title{flex-basis:100%}.rp-arrange-rules{flex-direction:column;align-items:flex-start;gap:4px;display:flex}.rp-tray{flex-direction:column;gap:12px;height:60vh;min-height:0;display:flex}@media (width>=1024px){.rp-arrange-grid{grid-template-columns:minmax(0,3fr) minmax(0,2fr)}.rp-tray{top:calc(var(--rp-control) * 2 + 16px);height:calc(100vh - var(--rp-control) * 4 - 32px);position:sticky}}.rp-tray-list{outline:none;flex:1;min-height:0;overflow:auto}.rp-tray-row{grid-template-columns:auto 16px minmax(0,1fr);padding-inline-start:0}.rp-tray-row[data-dragging]{opacity:.5}.rp-tray-row .rp-grow{flex-direction:column;min-width:0;display:flex}.rp-drag{color:var(--rp-muted)}.rp-tray-bar{border-top:1px solid var(--rp-hl-med);align-items:center;gap:8px;padding-top:8px;display:flex}.rp-arrange-changes{flex-direction:column;gap:4px;margin:0;padding-inline-start:20px;display:flex}.rp-arrange-preview{white-space:pre-wrap;margin:0 0 8px} diff --git a/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-CmAHHzfr.js b/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-CmAHHzfr.js new file mode 100644 index 000000000..d310b31ba --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/ConditionRow-CmAHHzfr.js @@ -0,0 +1 @@ +import{r as e,j as s}from"./vendor-react-64fcanlc.js";import{f as a}from"./useGridSelectionCheckbox-BxnCShqN.js";import{f9 as r,I as i,dD as n,dr as l,O as c}from"./index-BgFj_VXE.js";function d({label:i,description:n,isSelected:l,onChange:c,isDisabled:d}){const o=e.useId(),t=e.useId();return s.jsxs(a,{className:"rp-radio rp-checkbox",isSelected:l,onChange:c,isDisabled:d,"aria-labelledby":o,"aria-describedby":n?t:void 0,children:[s.jsx("span",{className:"rp-checkbox-mark",children:s.jsx(r,{})}),s.jsxs("span",{className:"rp-radio-text",children:[s.jsx("span",{id:o,children:i}),n&&s.jsx("span",{id:t,className:"rp-note",children:n})]})]})}function o(e){return s.jsx(i,{...e,children:s.jsx("path",{fill:"currentColor",d:"M17.78 1.757C16.51.716 14.555.858 13.33 2.08L3.079 12.334c-.32.32-.559.717-.69 1.15l-1.384 4.584c-.08.265-.007.552.188.747.142.143.334.22.53.22q.11 0 .217-.032l4.582-1.384c.434-.13.832-.368 1.151-.688L18.028 6.575c.648-.647.993-1.545.948-2.46s-.482-1.775-1.195-2.358M2.846 17.163l.98-3.246q.042-.135.113-.257l2.41 2.409q-.123.07-.259.114zM16.966 5.516l-9.525 9.526-2.475-2.476 9.425-9.425c.386-.387.896-.586 1.39-.586.38 0 .752.119 1.05.362.392.321.621.772.646 1.272.025.494-.161.977-.51 1.327"})})}function t({children:e}){return s.jsx("div",{className:"rp-toolbar",children:e})}function h({children:e,negate:a,onNegate:r,negateLabel:i,removeLabel:d,onRemove:o,isDisabled:h,removeDisabled:x}){return s.jsxs(n,{children:[e,s.jsxs(t,{children:[s.jsx(l,{isDisabled:h,isSelected:a,onChange:r,children:i}),s.jsx("span",{className:"rp-grow"}),s.jsx(c,{small:!0,isDisabled:h||x,onPress:o,children:d})]})]})}export{d as C,o as E,h as a,t as b}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Config-DTOoA8Ct.js b/luci-app-honk/root/etc/honk/doona/assets/Config-DTOoA8Ct.js deleted file mode 100644 index 6f57c0a6b..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Config-DTOoA8Ct.js +++ /dev/null @@ -1,4 +0,0 @@ -import{r as b,j as o}from"./vendor-react-Bf71BWbF.js";import{a4 as Oe,aw as Ae,av as sn,e4 as tn,d9 as Y,e5 as de,a5 as je,dX as He,e6 as on,a3 as $e,y as _e,h as I,Q as re,O as rn,e7 as an,df as Be,u as F,a6 as ne,a as se,aa as ln,ag as cn,ac as Se,cP as ue,aF as Ie,ap as Ve,bk as dn,bj as un,A as fn,e8 as pn,bm as $,de as Ke,a0 as ae,bg as Z,cS as fe,e9 as We,ea as gn,D as mn,eb as bn,C as hn,B as T,ec as vn,ed as xn,ee as wn,I as ce,aN as pe,bQ as ee,aO as ge,L as Ue,aJ as B,ef as yn,eg as jn,eh as Sn,ei as kn,cR as Nn,ej as Dn,J as Cn,ek as Mn,b as Pn,ah as Rn,bt as me,T as K,bS as Tn,bs as En,aL as Ge,el as zn,bq as Ln,aj as Fn,em as On,aM as An,E as Hn,j as $n,aK as _n,bx as Bn}from"./index-BOpK0UVB.js";import{d as In}from"./files-BxEOxSF8.js";import{r as Vn,d as Kn,a as Wn,t as ke,b as Un,w as Ne,v as Gn,c as qn,n as Jn}from"./setup-V0SWKTBk.js";import{g as Qn}from"./policyText-y7dbn7hu.js";import{a as Xn,s as Yn,c as Zn}from"./nav-BFiTWnsa.js";import{S as es,a as ns,E as _,C as te,b as be,l as ss,h as ts,c as De,r as os,d as rs,e as as,f as is,i as ls,g as cs,s as ds,k as us,t as qe,j as Ce,m as fs,n as ps,o as gs,p as ms,q as bs,u as hs,v as vs,w as xs,x as ws,y as Je,D as q,R as ys,z as js,A as Ss,B as ks,F as Ns,G as Ds,H as Qe,I as Cs,J as V,K as Ms}from"./vendor-editor-2EGeBPxF.js";import{d as Ps,s as Rs,D as Xe}from"./DaeCode-B8yPDjSE.js";import{A as Ts}from"./AddCircle-0OKZjQ6F.js";import{D as Es}from"./Table-BkehX7fw.js";import"./useGridSelectionCheckbox-C4VxQajJ.js";import"./Virtualizer-BIsXGNLZ.js";import"./ListLayout-CkBMjK9o.js";const zs=["global","subscription","node","group","dns","routing"],Ls=(s,t,e)=>s?e("config.moduleEditBlocked"):t?e("ui.changeApplying"):void 0;function Me(s,t){return`${Y(s)}:${t.line+1}-${t.endLine+1}`}function Fs(s,t,e){return s.slice(0,t.from)+e+s.slice(t.to)}function Os(s,t){const{section:e,text:n}=s,a=t.find(f=>f.id===e.id);if(a?.source?.content_sha256===e.source.content_sha256)return{next:null,conflict:!1};if(!a?.source?.content||!a.block)return{next:null,conflict:!0};const r=a.source.content.slice(a.block.from,a.block.to),l=e.source.content.slice(e.block.from,e.block.to);return{next:{section:{...a,source:a.source,block:a.block},text:n===l?r:n},conflict:r!==l&&n!==l&&r!==n}}function As(s,t,e,n,a){const r=e.line+n.split(` -`).length;return s.filter(l=>l.source_id===t&&l.line!==null&&l.line>e.line&&l.line<=r).map(l=>({line:l.line-e.line,column:l.column,level:l.level,message:he(de(l,a),a)}))}function Hs(s,t,e){return s.filter(n=>n.source_id===t&&n.line!==null).map(n=>({line:n.line,column:n.column,level:n.level,message:he(de(n,e),e)}))}function he({summary:s,detail:t},e,n=s){return t?e("config.backendDetail",{text:n,message:t}):n}function ie(s,t,e){return e.filter(n=>n.from>t.open&&n.to<=t.close&&n.depth===t.depth+1&&n.parens===0&&n.kind==="text"&&s.slice(n.from,n.to)==="->").length}function Pe(s,t,e){const n=t.filter(a=>a.from>s.open&&a.to<=s.close&&a.depth===s.depth+1&&a.parens===0&&(a.kind==="quoted"||a.kind==="text")&&!e.some(r=>a.from>=r.from&&a.to<=r.to));return e.length+n.length}function $s(s,t,e,n,a,r){const l=re(t,e,n);switch(s){case"global":return r("config.moduleSettings",{n:l.length});case"subscription":return r("config.moduleSubscriptions",{n:Pe(e,n,l)});case"node":return r("config.moduleNodes",{n:Pe(e,n,l)});case"group":return r("config.moduleGroups",{n:e.children.length,policies:$e(a,e.children.map(c=>{const f=re(t,c,n).find(p=>p.name==="policy")?.value;if(!f)return c.name;const i=rn(f);return r("ui.valuePair",{label:c.name,value:i?Qn({kind:i,native:f},r).label:f})}))});case"dns":{const c=e.children.filter(i=>i.name==="upstream"),f=e.children.filter(i=>i.name==="routing").flatMap(i=>i.children);return[r("config.moduleDnsUpstreams",{n:c.reduce((i,p)=>i+re(t,p,n).length,0)}),r("config.moduleDnsRequests",{n:f.filter(i=>i.name==="request").reduce((i,p)=>i+ie(t,p,n),0)}),r("config.moduleDnsResponses",{n:f.filter(i=>i.name==="response").reduce((i,p)=>i+ie(t,p,n),0)})].join(r("ui.listSeparator"))}case"routing":{const c=r("config.moduleRules",{n:ie(t,e,n)}),f=l.find(i=>i.name==="fallback")?.value;return f?c+r("ui.separator")+r("ui.valuePair",{label:"fallback",value:f}):c}}}const _s={global:null,subscription:I("nodes"),node:I("nodes"),group:I("policies"),dns:I("rules",{tab:"dns"}),routing:I("rules",{tab:"list"})};function Bs(s,t,e,n){const r=s.filter(i=>i.kind==="main"||i.kind==="include").map(i=>({source:i,..._e(i.content)})),l=s.find(i=>i.kind==="main")??null,c=zs.flatMap(i=>{const p=_s[i],g=r.flatMap(({source:u,blocks:v,tokens:N})=>v.filter(x=>x.name===i).map((x,w)=>({id:`${u.id}:${i}:${w}`,kind:i,source:u,block:x,href:p,range:Me(u,x),summary:$s(i,u.content,x,N,e,n),note:null})));return g.length?g:[{id:i,kind:i,source:l,block:null,href:p,range:l?Y(l):"config.dae",summary:l?.writable?n("config.moduleAbsent",{file:Y(l)}):n("config.moduleAbsentReadOnly"),note:null}]}),f=r.flatMap(({source:i,blocks:p})=>t.redactedSections(p).map(({block:g,name:u},v)=>({id:`${i.id}:${g.name}:${v}`,kind:u,source:i,block:null,href:null,range:Me(i,g),summary:"",note:n("config.incomplete")})));return[...c,...f]}function J(s,t,e){const n=Oe(Xn,s.kind,e);return{id:s.id,label:tn(s)?`${n} ${s.id.slice(0,8)}`:s.path,kind:n,facts:e("config.sourceFacts",{n:s.line_count,size:sn(String(s.bytes),t)}),loaded:e("config.loadedAt",{time:Ae(s.loaded_at,t)})}}const Is={generated:{label:"config.kind.generated",note:"config.generatedNote"},subscription:{label:"config.kind.subscription",note:"config.subscriptionNote"},disabled:{label:"config.readOnly",note:"config.readOnlyNote",help:"config.readOnlyHelp"},secret:{label:"config.secretSource",note:"config.secretNote"},refused:{label:"config.readOnly",note:"config.refusedNote"},redacted:{label:"config.redactedSource",note:"config.redactedNote"}};function Vs(s,t,e,n,a){const r=s.kind==="generated"||s.kind==="subscription"?s.kind:t?s.writable?e===!1?"redacted":null:n.holdsCredentials(s)?"secret":"refused":"disabled";if(!r)return null;const l=Is[r],c=a(l.label);return{reason:r,label:c,note:a(l.note),...l.help&&{help:{title:c,text:a(l.help)}}}}const Ks={error:"err",warning:"warn",info:"info"},Ws={error:"config.level.error",warning:"config.level.warning",info:"config.level.info"};function oe(s,t,e,n){const a=new Map(t.map(l=>[l.id,Y(l)])),r=new Map;for(const l of s){const c=JSON.stringify([l.level,l.source_id,l.line,l.column,l.code,l.message,l.params]),f=r.get(c);f?f.count++:r.set(c,{item:l,count:1})}return[...r].map(([l,{item:c,count:f}])=>{const i=a.get(c.source_id)??c.source_id,p=de(c,n),g=p.summary,u=f>1?n("config.repeated",{text:g,n:je(f,e)}):g,v=he(p,n,u);return{id:l,level:c.level,tone:Ks[c.level],levelText:Oe(Ws,c.level,n),sourceId:c.source_id,line:c.line,where:c.line===null?i:`${i}:${c.line}`,message:u,code:c.code,detail:c.line===null?v:n("config.atFile",{file:i,line:je(c.line,e),message:v}),count:f}})}function le(s){return{...Vn(s),rules:s.trim()?"keep":Kn}}function Us(s,t,e){return t.content_sha256===e.content_sha256?null:s?"conflict":"follow"}function Gs(s,t,e){return{groupUsedText:s.rules==="keep"?null:ke[s.rules].groups.length?e("config.wizardNamedGroups",{names:$e(t,ke[s.rules].groups.map(n=>n.name))}):e("config.wizardGroupUsed",{name:s.group??Un}),rows:s.subscriptions.flatMap((n,a)=>n.raw!==void 0&&!n.raw.trim()?[]:[{index:a,name:n.name,url:n.url,raw:n.raw!==void 0&&!n.name?n.raw.trim():null,nameError:n.raw===void 0&&!on(n.name.trim())?e("config.unquotable"):void 0,error:n.url!==""&&!Wn(n.url)?e("config.wizardSubscriptionHelp"):n.raw===void 0&&!He(n.url.trim())?e("config.unquotable"):void 0,description:a===0?e("config.wizardSubscriptionHelp"):void 0,removeLabel:e("config.wizardRemove",{name:n.name||n.raw?.trim()||""})}])}}function qs(s,t,e,n,a){if(!t&&e)return{disabled:!0,tip:e};const r=a(s==="validate"?"config.saveValidating":n?"config.saveShortcutMac":"config.saveShortcut");return{disabled:!!s||!t,tip:r}}function ve({busy:s,complete:t=!0,conflict:e,invalid:n=null},a){return s||t===null?null:t?e?a("config.saveConflict"):n:a("config.incomplete")}function Ye(s,t,e,n){if(s)return null;const a=t.filter(l=>l.kind==="main"||l.kind==="include");if(a.some(l=>e(l)===void 0))return null;const r=a.find(l=>l.kind==="main");return n(r&&e(r)?"config.validateOther":"config.validateNoMain")}function Js(s,t){return[{label:t("config.revision"),value:s,help:{title:t("config.revision"),text:t("config.revisionHelp")}}]}function xe(s,t,e){const n=e?.id,a=e?.content;return b.useMemo(()=>{const r=s.filter(l=>l.kind==="main"||l.kind==="include");return r.some(l=>t(l)===void 0)?null:an(r.filter(l=>t(l)),n!==void 0&&a!==void 0?{id:n,content:a}:void 0)},[s,t,n,a])}const Qs=600,Xs=()=>{};function Ze(s,t){const{validate:e,cancel:n}=Be(Xs);b.useEffect(()=>{if(!s)return;let a=!0;const r=setTimeout(()=>{e({sources:s,mode:"full"}).then(l=>{a&&l&&t(l.diagnostics)})},Qs);return()=>{a=!1,clearTimeout(r),n()}},[s,e,n,t])}function Ys(s){const t=F(),e=Be(s),n=b.useMemo(()=>e.error instanceof fn&&e.error.status===422?e.error.details?.diagnostics??[]:null,[e.error]);return b.useEffect(()=>{if(e.error)if(n){const a=pn(n);$("negative",a?t("config.writeRestart",{n:a}):t("ui.writeInvalid",{n:n.filter(r=>r.level==="error").length}))}else Ke(e.error,t,t("ui.writeFailed"))},[e.error,n,t]),{...e,diagnostics:n}}function Zs({go:s,query:t}){const e=F(),n=ne[se()],a=ln().data?.resources,r=cn(Se(a,"config",{whileLoading:!0})),l=Ys(r.refetch),c=b.useMemo(()=>new URLSearchParams(t),[t]),f=b.useMemo(()=>r.data?.sources??[],[r.data]),i=f.find(C=>C.kind==="main")??null,p=f.find(C=>C.id===c.get("source"))??f[0]??null,g=p?.id??null,u=C=>s("config",ae(t,{source:C,line:null})),v=(C,z)=>s("config",ae(t,{tab:"source",source:C,line:z===null?null:String(z)})),N=Number(c.get("line"))||null,x=b.useMemo(()=>(r.data?.diagnostics??[]).filter(C=>C.source_id===g),[r.data,g]),w=b.useMemo(()=>{const C=r.data?.diagnostics??[];return{error:C.filter(z=>z.level==="error").length,warning:C.filter(z=>z.level==="warning").length}},[r.data]),h=Yn(a,i),y=Zn(h),P=Se(a,"config_validate",{whileLoading:!1})&&(a?.config_validate.modes??[]).includes("full"),D=a?.config.writable===!0,S=ue(f),m=Ie().data,k=b.useMemo(()=>Ve(m),[m]),M=p?Vs(p,D,S(p),k,e):null,R=!!p&&!M,O=c.has("source")||i?.content===void 0?"source":!i.content.trim()&&h?"setup":"modules",H=dn(t,y.map(C=>C.id),O),j=p?{source:p,sources:f,open:v,diagnostics:x,canValidate:P&&R,canWrite:R,readOnly:M,isComplete:S,editor:l,focusLine:N}:null,L=h&&i?{main:i,editor:l,onDone:()=>s("config",ae(t,{tab:"setup"}),{replace:!0}),next:[{id:"nodes",label:e("nav.nodes"),href:I("nodes")},{id:"policies",label:e("nav.policies"),href:I("policies")},{id:"rules",label:e("rule.listTitle"),href:I("rules",{tab:"list"})},{id:"source",label:e("config.openSource"),href:I("config",{tab:"source",source:i.id})}]}:null,W=a?.config.create===!0&&a.config.writable===!0?{sources:f,refetch:r.refetch,open:C=>v(C,null)}:null,U=r.data?{config:r.data,editor:l,canValidate:P,open:v}:null;return{error:r.error,reload:r.refetch,loading:r.loading&&!r.data,ready:!!r.data,metadata:r.data?Js(r.data.revision,e):[],redacted:!!r.data?.secrets_redacted,tabs:y.map(C=>({id:C.id,label:e(C.titleKey)})),tab:H,setTab:C=>s("config",un(t,C,null)),selectedId:g??"",select:u,sourceProps:j,newSourceProps:W,wizardProps:L,modulesProps:r.data?{config:r.data,editor:l,canWrite:D,canValidate:P,open:v}:null,validateProps:U,sourceModel:p?{...J(p,n,e),readOnly:M}:null,sourceOptions:f.map(C=>{const z=J(C,n,e);return{id:z.id,label:z.label,desc:z.kind}}),exportSource:()=>{p&&In(Y(p),p.content,"text/plain;charset=utf-8")},summaryTone:w.error?"err":w.warning?"warn":"ok",summaryText:w.error?e("config.errors",{n:w.error}):w.warning?e("config.warnings",{n:w.warning}):e("config.clean")}}function et({source:s,sources:t,diagnostics:e,canValidate:n,canWrite:a,readOnly:r,isComplete:l,editor:c,focusLine:f}){const i=F(),p=ne[se()],[g,u]=b.useState(null),[v,N]=b.useState(null),x=a&&l(s)===!0,w=b.useRef(!1),y=(c.errorSource===s.id?c.diagnostics:null)??v??e,P=b.useMemo(()=>Hs(y,s.id,i),[y,s.id,i]),D=g?.text??s.content??"",S=()=>We(t,{id:s.id,content:D}),[m,k]=b.useState(null);Z(f,()=>k(null));const M=g!==null&&g.text!==s.content,R=M&&g.origin.content_sha256!==s.content_sha256,O=fe(M,()=>{u(null),N(null)});b.useEffect(()=>c.cancel,[c.cancel,O.revision]);const H=g?.text,j=xe(t,l,{id:s.id,content:D});Ze(n&&H!==void 0?j:null,N);const L=(d,E=!0)=>{N(d.diagnostics);const A=d.diagnostics.find(G=>G.source_id===s.id&&G.level==="error"&&G.line!==null);return k(A?A.line:null),d.valid?E&&$("positive",i("config.valid")):$("negative",i("config.invalid",{n:d.diagnostics.filter(G=>G.level==="error").length})),d.valid},W=async()=>{if(!j)return!1;const d=await c.validate({sources:j,mode:"full"});return d?L(d):!1},U=async()=>{if(g===null||c.busy||!x||R)return;const d=await c.apply(g.origin,g.text);if(N(null),!!d){if(d.diagnostics){L({valid:!1,diagnostics:d.diagnostics},!1);return}$("positive",i("config.saved",{path:J(s,p,i).label})),O.clear(),u(null)}},C=()=>{u(null),N(null)},z=d=>{d===s.content?C():u(E=>({text:d,origin:E?.origin??s}))},Q=r?()=>{w.current||(w.current=!0,$("info",i("config.readOnlyAttempt"),{detail:r.note}))}:void 0,X=J(s,p,i);return{writable:x,note:r?.note??i(n?"config.editNoteValidate":"config.editNote"),refused:Q,shown:oe(y,t,p,i),marks:P,text:D,outbounds:S,focus:m??f,dirty:M,conflict:R?i("config.changedOnDisk"):null,keep:()=>u(d=>d&&{...d,origin:s}),validate:W,save:U,cancel:C,change:z,view:X,busy:!!c.busy,validating:c.busy==="validate",saving:c.busy==="save",saveButton:R?{disabled:!0,tip:i("config.changedOnDisk")}:qs(c.busy,x,r?.note??null,gn,i),validateDisabled:!!c.busy||!j,reason:M?!x&&r?r.note:ve({busy:!!c.busy,conflict:!!R},i):n&&!c.busy?Ye(j,t,l,i):null}}function nt({config:s,editor:t}){const e=F(),n=ne[se()],[a,r]=b.useState("all"),[l,c]=b.useState(null),[f,i]=b.useState(null);Z(s.generation_id,()=>{c(null),i(null)});const p=b.useMemo(()=>oe(l?.diagnostics??s.diagnostics,s.sources,n,e),[l,s.diagnostics,s.sources,n,e]),g=y=>p.reduce((P,D)=>P+(D.level===y?D.count:0),0),u=g("error"),v=g("warning"),N=a==="all"?p:p.filter(y=>y.level===a),x=ue(s.sources),w=xe(s.sources,x);return{level:a,setLevel:r,selected:f,setSelected:i,shown:N,validate:()=>{w&&t.validate({sources:w,mode:"full"}).then(y=>{y&&(c(y),i(null))})},summaryTone:u?"err":v?"warn":"ok",summary:u?e("config.failed",{errors:e("config.errors",{n:u}),warnings:e("config.warnings",{n:v})}):v?e("config.passedWarnings",{n:v}):e("config.passed"),lastRun:l?e("config.lastRun",{time:Ae(l.validated_at,n)}):e("config.acceptedDiagnostics",{generation:s.generation_id}),validating:t.busy==="validate",blocked:!!t.busy||!w,reason:t.busy?null:Ye(w,s.sources,x,e),levels:[["all",e("config.levelAll",{n:u+v+g("info")})],["error",e("config.levelErrors",{n:u})],["warning",e("config.levelWarnings",{n:v})],["info",e("config.levelInfo",{n:g("info")})]]}}const st=es.define({name:"dae",languageData:{commentTokens:{line:"#"},closeBrackets:{brackets:["(","{","'",'"']}},startState:Rs,token:Ps}),tt=["global","subscription","node","group","dns","routing"].map(s=>({label:s,type:"keyword"})),ot=hn.map(s=>({label:s,type:"property",apply:s+": "})),rt=["domain","dip","sip","dport","sport","l4proto","ipversion","pname","mac","dscp","qname","qtype","upstream"].map(s=>({label:s,type:"function",apply:s+"("})),at=["geosite","geoip","suffix","full","keyword","regex"].map(s=>({label:s,type:"constant",apply:s+":"})),Re=bn.map(s=>({label:s,type:"constant"})),it=mn.map(s=>({label:s,type:"keyword"})),lt=[{label:"fallback",type:"keyword",apply:"fallback: "},{label:"include",type:"keyword",apply:"include "}];function ct(s,t){const e=s.matchBefore(/[\w.-]*/);if(!e)return null;const n=s.state.doc.lineAt(s.pos),a=n.text.slice(0,s.pos-n.from),r=/->\s*[\w.-]*$/.test(a)||/^\s*fallback:\s*[\w.-]*$/.test(a);if(e.from===e.to&&!s.explicit&&!r)return null;const l=s.state.doc.sliceString(0,s.pos),{blocks:c,tokens:f}=_e(l),i=f.at(-1);if(i?.to===s.pos&&(i.kind==="quoted"||i.kind==="comment"))return null;const p=c.find(u=>u.close===s.pos)?.name;let g;if(r)g=[...t().map(u=>({label:u.name,apply:u.written,type:"variable"})),...it];else if(/\b(domain|dip|sip|qname)\(\s*[\w.-]*$/.test(a))g=at;else if(p===void 0)g=tt.map(u=>({...u,apply:(v,N,x,w)=>{const h=u.label+` { - -}`;v.dispatch({changes:{from:x,to:w,insert:h},selection:{anchor:x+u.label.length+4}})}}));else if(p==="routing"||p==="dns")g=[...rt,...lt];else if(p==="global")g=ot;else if(p==="group")g=/\bpolicy\s*:\s*[\w.-]*$/.test(a)?Re:[...Re.map(u=>({...u,apply:"policy: "+u.label})),{label:"filter",type:"property",apply:"filter: "}];else return null;return{from:e.from,options:g,validFor:/^[\w.-]*$/}}function dt(s){return ns({override:[t=>ct(t,s)]})}function ut(s,t){return t.filter(e=>e.line>=1&&e.line<=s.doc.lines).map(e=>{const n=s.doc.line(e.line),a=Math.max(0,(e.column??1)-1),r=new TextEncoder().encode(n.text);let l=0;for(let f=0;fa)break;f+=i,l+=i===4?2:1}return{from:n.from+l,to:n.to,severity:e.level,message:e.message}})}function ft(s){return s.key==="Backspace"||s.key==="Delete"||s.key==="Enter"?!0:[...s.key].length===1&&!s.ctrlKey&&!s.metaKey}function pt(s){let t=!1;const e=n=>(n.state.readOnly&&s(),!1);return _.domEventHandlers({keydown:(n,a)=>ft(n)&&e(a),paste:(n,a)=>e(a),cut:(n,a)=>e(a),pointerdown:n=>(t=n.pointerType==="touch",!1),click:(n,a)=>t&&e(a)})}const gt=[["Completions","cm.completions"],["Find","cm.find"],["Replace","cm.replace"],["next","cm.next"],["previous","cm.previous"],["all","cm.all"],["match case","cm.matchCase"],["regexp","cm.regexp"],["by word","cm.byWord"],["replace","cm.replaceOne"],["replace all","cm.replaceAll"],["close","ui.close"],["Go to line","cm.gotoLine"],["go","cm.go"],["current match","cm.currentMatch"],["replaced $ matches","cm.replacedMatches"],["replaced match on line $","cm.replacedOnLine"],["on line","cm.onLine"],["Selection deleted","cm.selectionDeleted"],["Control character","cm.controlCharacter"]],Te=s=>be.phrases.of(Object.fromEntries(gt.map(([t,e])=>[t,s(e)]))),mt=_.theme({"&":{backgroundColor:"var(--rp-base)",color:"var(--rp-text)",border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-md)",fontSize:"var(--rp-text-sm)"},"&.cm-focused":{outline:"none",borderColor:"var(--rp-accent)",boxShadow:"0 0 0 1px var(--rp-accent)"},".cm-scroller":{fontFamily:"ui-monospace, 'SF Mono', Menlo, Consolas, 'JetBrains Mono', 'Fira Code', 'DejaVu Sans Mono', 'Liberation Mono', 'Noto Sans Mono', monospace",lineHeight:"20px",maxHeight:"70vh",fontVariantLigatures:"none",borderRadius:"calc(var(--rp-r-md) - 1px)"},".cm-content":{padding:"8px 0",caretColor:"var(--rp-text)"},".cm-line":{padding:"0 12px"},".cm-gutters":{backgroundColor:"var(--rp-base)",color:"var(--rp-muted)",border:"none"},".cm-lineNumbers .cm-gutterElement":{padding:"0 8px 0 12px",minWidth:"40px"},".cm-activeLine, .cm-focusLine":{backgroundColor:"color-mix(in srgb, var(--rp-hl-med) 60%, transparent)"},".cm-activeLineGutter":{backgroundColor:"transparent",color:"var(--rp-text)"},".cm-selectionBackground, &.cm-focused .cm-selectionBackground, ::selection":{backgroundColor:"var(--rp-hl-high)"},".cm-cursor":{borderLeftColor:"var(--rp-text)"},".cm-matchingBracket":{backgroundColor:"color-mix(in srgb, var(--rp-accent) 20%, transparent)",outline:"none"},".cm-selectionMatch":{backgroundColor:"color-mix(in srgb, var(--rp-notice) 25%, transparent)"},".cm-tooltip.cm-tooltip-lint":{backgroundColor:"var(--rp-text)",color:"var(--rp-on-text)",border:"none",borderRadius:"var(--rp-r-sm)",padding:"2px 0"},".cm-tooltip-lint .cm-diagnostic":{border:"none",padding:"2px 8px",fontSize:"var(--rp-text-xs)",lineHeight:"16px",fontFamily:"inherit"},".cm-tooltip-lint .cm-diagnosticText":{color:"inherit"},".cm-diag-line-error":{backgroundColor:"color-mix(in srgb, var(--rp-negative) 14%, transparent)"},".cm-diag-line-warning":{backgroundColor:"color-mix(in srgb, var(--rp-notice) 16%, transparent)"},".cm-diag-line-info":{backgroundColor:"color-mix(in srgb, var(--rp-foam) 14%, transparent)"},".cm-lintRange-error":{backgroundImage:"none",textDecoration:"underline wavy var(--rp-negative)",textUnderlineOffset:"3px"},".cm-lintRange-warning":{backgroundImage:"none",textDecoration:"underline wavy var(--rp-notice)",textUnderlineOffset:"3px"},".cm-lintRange-info":{backgroundImage:"none",textDecoration:"underline dotted var(--rp-foam)",textUnderlineOffset:"3px"},".cm-tooltip":{backgroundColor:"var(--rp-surface)",border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-md)",color:"var(--rp-text)"},".cm-tooltip.cm-tooltip-autocomplete > ul > li[aria-selected]":{backgroundColor:"var(--rp-selected)",color:"var(--rp-text)"},".cm-tooltip.cm-tooltip-autocomplete > ul":{fontFamily:"ui-monospace, 'SF Mono', Menlo, Consolas, 'JetBrains Mono', 'Fira Code', 'DejaVu Sans Mono', 'Liberation Mono', 'Noto Sans Mono', monospace"},".cm-panels":{backgroundColor:"var(--rp-surface)",color:"var(--rp-text)"},".cm-panels-bottom":{borderTop:"1px solid var(--rp-hl-med)"},".cm-textfield":{border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-sm)",backgroundColor:"var(--rp-base)",color:"var(--rp-text)"},".cm-button":{border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-sm)",backgroundImage:"none",backgroundColor:"var(--rp-overlay)",color:"var(--rp-text)"}}),bt=Cs.define([{tag:V.comment,color:"var(--rp-code-comment)"},{tag:V.keyword,color:"var(--rp-code-keyword)",fontWeight:"700"},{tag:V.string,color:"var(--rp-code-string)"},{tag:V.number,color:"var(--rp-code-number)"},{tag:V.propertyName,color:"var(--rp-code-propertyName)"},{tag:V.variableName,color:"var(--rp-code-variableName)"},{tag:V.operator,color:"var(--rp-code-operator)"},{tag:V.punctuation,color:"var(--rp-code-punctuation)"}]),ht=js.of((s,t)=>{const e=s.lineAt(t,-1),n=e.from>0?s.lineAt(e.from-1,-1):null;if(!n)return 0;const a=/^\s*/.exec(n.text)[0].length,r=/\{\s*(#.*)?$/.test(n.text),l=/^\s*\}/.test(e.text);return Math.max(0,a+(r?2:0)-(l?2:0))}),en=Qe.define(),vt={error:q.line({class:"cm-diag-line cm-diag-line-error"}),warning:q.line({class:"cm-diag-line cm-diag-line-warning"}),info:q.line({class:"cm-diag-line cm-diag-line-info"})},xt=Je.define({create:()=>q.none,update(s,t){let e=s.map(t.changes);for(const n of t.effects){if(!n.is(en))continue;const a=new ys,r={error:0,warning:1,info:2},l=new Map;for(const c of n.value){if(c.line<1||c.line>t.state.doc.lines)continue;const f=l.get(c.line);(!f||r[c.level]f-i)){const f=t.state.doc.line(c).from;a.add(f,f,vt[l.get(c).level])}e=a.finish()}return e},provide:s=>_.decorations.from(s)}),Ee=[{id:"undo",label:"cm.undo",run:xs},{id:"redo",label:"cm.redo",run:ws},{id:"comment",label:"cm.toggleComment",run:qe}],wt=[],ze=Ds.define(),nn=Qe.define(),yt=q.line({class:"cm-focusLine"}),jt=Je.define({create:()=>q.none,update(s,t){let e=s.map(t.changes);for(const n of t.effects)n.is(nn)&&(e=q.set(yt.range(t.state.doc.line(n.value).from)));return e},provide:s=>_.decorations.from(s)}),Le=s=>[be.readOnly.of(s),_.editable.of(!s),s?jt:[Ss(),ks(),Ns()]];function we({value:s,onChange:t,readOnly:e=!1,marks:n=wt,focusLine:a,label:r,outbounds:l,onSave:c,onReadOnlyAttempt:f,compact:i}){const p=b.useRef(null),g=b.useRef(null),u=b.useRef(t),v=b.useRef(l),N=b.useRef(c),x=b.useRef(f);b.useEffect(()=>{u.current=t,v.current=l,N.current=c,x.current=f});const w=b.useRef(new te),h=F(),y=b.useRef(new te),P=b.useRef(new te),D=b.useRef(new te);b.useLayoutEffect(()=>{const m=new _({parent:p.current,state:be.create({doc:s,extensions:[ss(),ts(),D.current.of(De()),os(),xt,rs(),as(),is(),ls.of(" "),cs(),ht,dt(()=>v.current?.()??[]),st,ds(bt),mt,us.of([{key:"Mod-s",run:()=>(N.current?.(),!0)},{key:"Mod-/",run:qe},{key:"Mod-g",run:Ce},...fs,...ps,...gs,...ms,...bs,hs]),w.current.of(Le(e)),y.current.of(Te(h)),P.current.of(_.contentAttributes.of({"aria-label":r,tabindex:"0"})),pt(()=>x.current?.()),_.updateListener.of(k=>{k.docChanged&&!k.transactions.some(M=>M.annotation(ze))&&u.current?.(k.state.doc.toString())})]})});return g.current=m,()=>{m.destroy(),g.current=null}},[]),b.useEffect(()=>{const m=g.current;m&&m.dispatch({effects:w.current.reconfigure(Le(e))})},[e]),b.useEffect(()=>{g.current?.dispatch({effects:y.current.reconfigure(Te(h))})},[h]),b.useEffect(()=>{g.current?.dispatch({effects:P.current.reconfigure(_.contentAttributes.of({"aria-label":r,tabindex:"0"}))})},[r]),b.useEffect(()=>{const m=g.current;!m||m.state.doc.toString()===s||(m.dispatch({changes:{from:0,to:m.state.doc.length,insert:s},annotations:ze.of(!0),effects:D.current.reconfigure([])}),m.dispatch({effects:D.current.reconfigure(De())}))},[s]),b.useEffect(()=>{const m=g.current;if(!m)return;const k=vs(m.state,ut(m.state,n)),M=Array.isArray(k.effects)?k.effects:k.effects?[k.effects]:[];m.dispatch({...k,effects:[...M,en.of(n)]})},[n]),b.useEffect(()=>{const m=g.current;if(!m||!a||a<1||a>m.state.doc.lines)return;const k=m.state.doc.line(a);m.dispatch({selection:{anchor:k.from},effects:[nn.of(a),_.scrollIntoView(k.from,{y:"center"})]}),m.focus()},[a]);const S=m=>{g.current&&m(g.current)};return o.jsxs(o.Fragment,{children:[!i&&o.jsxs("div",{className:"rp-toolbar",children:[o.jsx(T,{onPress:()=>S(Ms),children:h(e?"cm.find":"cm.findReplace")}),o.jsx(T,{onPress:()=>S(Ce),children:h("cm.gotoLine")}),t&&o.jsx(vn,{label:h("cm.commands"),isDisabled:e,content:o.jsx(xn,{"aria-label":h("cm.commands"),onAction:m=>{const k=Ee.find(M=>M.id===m);k&&S(k.run)},children:Ee.map(m=>o.jsx(wn,{id:m.id,className:"rp-item plain",textValue:h(m.label),children:h(m.label)},m.id))}),children:h("cm.commands")})]}),o.jsx("div",{className:i?"rp-editor compact":"rp-editor",ref:p})]})}function ye({message:s,busy:t,keep:e,discard:n}){const a=F();return o.jsx(ce,{action:(e||n)&&o.jsxs("span",{className:"rp-toolbar",children:[e&&o.jsx(T,{isDisabled:t,onPress:e,children:a("config.keepChanges")}),n&&o.jsx(T,{isDisabled:t,onPress:n,children:a("config.discard")})]}),children:s})}function St({config:s,editor:t,canWrite:e,canValidate:n,open:a}){const r=F(),l=se(),c=ne[l],f=Ie().data,i=b.useMemo(()=>Ve(f),[f]),p=b.useMemo(()=>Bs(s.sources,i,l,r),[s,i,l,r]),g=ue(s.sources),[u,v]=b.useState(null),[N,x]=b.useState(null),w=u!==null&&u.text!==u.section.source.content.slice(u.section.block.from,u.section.block.to),h=b.useMemo(()=>u?Os(u,p):null,[u,p]),y=!!h?.conflict;Z(h&&!h.conflict?h.next:null,d=>{d&&v(d)});const P=fe(w,()=>{v(null),x(null)}),{clear:D}=P;b.useEffect(()=>t.cancel,[t.cancel,P.revision]);const S=b.useMemo(()=>u?Fs(u.section.source.content,u.section.block,u.text):null,[u]),m=u?.section.source.id,k=xe(s.sources,g,m&&S!==null?{id:m,content:S}:void 0);Ze(n&&S!==null?k:null,x);const M=(t.errorSource===m?t.diagnostics:null)??N??s.diagnostics,R=b.useMemo(()=>M.filter(d=>d.source_id===m),[M,m]),O=u?.section.id,H=b.useMemo(()=>({own:R,sectionId:O,t:r}),[R,O,r]),[j,L]=b.useState([]);Z(H,d=>L(u?As(d.own,u.section.source.id,u.section.block,u.text,d.t):[]));const W=b.useMemo(()=>We(s.sources,m&&S!==null?{id:m,content:S}:void 0),[m,S,s]),U=()=>{t.cancel(),D(),v(null),x(null)},C=(d,E)=>{x(E),$(d?"positive":"negative",d?r("config.valid"):r("config.invalid",{n:E.filter(A=>A.level==="error").length}))},z=async()=>{if(!u||!k||S===null||t.busy)return;const d=await t.validate({sources:k,mode:"full"});d&&C(d.valid,d.diagnostics)},Q=async()=>{if(!u||S===null||t.busy||!w||y)return;const d=await t.apply(u.section.source,S);if(d){if(d.diagnostics){C(!1,d.diagnostics);return}$("positive",r("config.saved",{path:J(u.section.source,c,r).label})),D(),v(null),x(null)}};return{cards:(u&&!p.some(d=>d.id===u.section.id)?[...p,u.section]:p).map(d=>{const E=u?.section.id===d.id,A=e&&!!d.source?.writable&&!!d.block&&g(d.source)===!0;return{...d,editing:E,canEdit:A,editDisabled:w||!!t.busy,editTip:Ls(w,!!t.busy,r),editReason:A&&!E&&w?r("config.moduleEditBlocked"):null,note:d.note??(d.source&&d.block&&g(d.source)===!1?r("config.incomplete"):null),muted:!d.block,manual:d.source?()=>a(d.source.id,d.block?d.block.line+1:null):null,edit:()=>{w||t.busy||!e||!d.source?.writable||!d.block||g(d.source)!==!0||(x(null),v({section:{...d,source:d.source,block:d.block},text:d.source.content.slice(d.block.from,d.block.to)}))}}}),text:u?.text??"",change:d=>v(E=>E?{...E,text:d}:null),marks:j,diagnostics:oe(R,s.sources,c,r),outbounds:()=>W,dirty:w,saveReason:ve({busy:!!t.busy,conflict:!!y},r),conflict:y?r("config.changedOnDisk"):null,keep:y&&h?.next?()=>v(h.next):null,busy:!!t.busy,saving:t.busy==="save",validating:t.busy==="validate",canValidate:n&&!!k,validate:z,save:Q,cancel:U}}function kt(s){const t=F(),e=St(s);return o.jsx("div",{className:"rp-page",children:e.cards.map(n=>o.jsxs(pe,{"aria-label":n.kind,children:[o.jsx(ee,{reason:n.editReason,children:o.jsxs("div",{className:"rp-row",children:[o.jsxs("span",{className:"rp-cluster",children:[o.jsx("h3",{className:"rp-h3 rp-code",children:n.kind}),o.jsx("span",{className:"rp-label rp-code",children:n.range}),n.editing&&e.dirty&&o.jsx(ge,{tone:"warn",children:t("config.unsaved")})]}),o.jsxs("span",{className:"rp-cluster",children:[n.href&&o.jsx(Ue,{appearance:"button",href:n.href,children:t("config.moduleOpen")}),n.canEdit&&!n.editing&&o.jsx(T,{isDisabled:n.editDisabled,tip:n.editTip,onPress:n.edit,children:t("config.edit")}),n.manual&&!n.editing&&o.jsx(T,{quiet:!0,tip:t("config.moduleManualTip"),onPress:n.manual,children:t("config.moduleManual")})]})]})}),o.jsx(B,{small:!0,tone:n.muted?"muted":"info",children:n.summary}),n.note&&o.jsx(B,{small:!0,tone:"muted",children:n.note}),n.editing&&o.jsxs(o.Fragment,{children:[o.jsx(we,{label:n.range,value:e.text,onChange:e.change,readOnly:e.busy,marks:e.marks,outbounds:e.outbounds,onSave:e.dirty&&!e.busy?()=>void e.save():void 0}),e.conflict&&o.jsx(ye,{message:e.conflict,busy:e.busy,keep:e.keep}),e.diagnostics.length>0&&o.jsx("div",{className:"rp-list rp-config-diagnostics",role:"list","aria-label":t("config.diagnostics"),children:e.diagnostics.map(a=>o.jsx("div",{role:"listitem",children:o.jsx(B,{small:!0,tone:a.tone,children:a.detail})},a.id))}),o.jsx(ee,{reason:e.saveReason,children:o.jsxs("div",{className:"rp-cluster",children:[e.canValidate&&o.jsx(T,{isPending:e.validating,isDisabled:e.busy,onPress:()=>void e.validate(),children:t("config.validate")}),o.jsx(T,{accent:!0,isPending:e.saving,isDisabled:e.busy||!e.dirty||!!e.conflict,onPress:()=>void e.save(),children:t("config.save")}),o.jsx(T,{isDisabled:e.busy,onPress:e.cancel,children:t("ui.cancel")})]})})]})]},n.id))})}function Nt({sources:s,refetch:t,open:e}){const n=F(),a=s.find(D=>D.kind==="main"),r=b.useMemo(()=>a?yn(a.content):null,[a]),l=b.useMemo(()=>jn(r??[]),[r]),c=b.useMemo(()=>Sn(s),[s]),[f,i]=b.useState(null),[p,g]=b.useState(null),{busy:u,create:v}=kn(t),N=Nn(),x=f?.text??"",w=l.find(D=>D.pattern===f?.pattern)??null,h=w?w.prefix+x+w.suffix:x,y=x?w?Dn(x,w):Cn(x):null,P=async D=>{if(!x||y||u)return;const S=N.start();try{const m=await v(h);if(!m||($("positive",n("config.newSourceCreated",{path:h})),!S()))return;D(),m.id&&e(m.id)}catch(m){S()?g(k=>({id:(k?.id??0)+1,text:Pn(m,n)})):Ke(m,n,n("config.newSourceFailed",{path:h}))}};return{isOpen:f!==null,show:()=>{N.next(),g(null),i({text:l.length?"":Mn(r??[]),pattern:l[0]?.pattern??""})},hide:()=>{N.next(),i(null)},choices:l,choice:w,setChoice:D=>i(S=>S&&{...S,pattern:D}),text:x,setText:D=>i(S=>S&&{...S,text:D}),error:y?n(y):void 0,unmatched:!!x&&!y&&c!==null&&!c(h),problem:p,busy:u,canSubmit:!!x&&!y&&!u,submit:P}}function Dt(s){const t=F(),e=Nt(s);return o.jsxs(o.Fragment,{children:[o.jsxs(T,{onPress:e.show,children:[o.jsx(Ts,{}),t("config.newSource")]}),o.jsxs(Rn,{title:t("config.newSourceTitle"),narrow:!0,isOpen:e.isOpen,onOpenChange:n=>{n||e.hide()},footer:n=>o.jsxs(o.Fragment,{children:[o.jsx(T,{onPress:n,children:t("ui.cancel")}),o.jsx(T,{accent:!0,isDisabled:!e.canSubmit,isPending:e.busy,onPress:()=>void e.submit(n),children:t("config.newSourceCreate")})]}),children:[e.problem&&o.jsx(ce,{takeFocus:!0,children:e.problem.text},e.problem.id),o.jsxs("div",{className:"rp-list",children:[o.jsx("span",{className:"rp-label",children:t(e.choice?"config.newSourceNameHelp":"config.newSourceHelp")}),e.choices.length>1&&o.jsx(me,{label:t("config.newSourcePattern"),items:e.choices.map(n=>({id:n.pattern,label:n.pattern})),value:e.choice?.pattern??"",onChange:e.setChoice,isDisabled:e.busy}),e.choice?o.jsx(K,{isDisabled:e.busy,label:t("config.newSourceName"),value:e.text,prefix:e.choice.prefix,suffix:e.choice.suffix,placeholder:"extra",spellCheck:!1,error:e.error,onChange:e.setText}):o.jsx(K,{isDisabled:e.busy,label:t("config.newSourcePath"),value:e.text,placeholder:"config.d/extra.dae",spellCheck:!1,error:e.error,onChange:e.setText}),e.unmatched&&o.jsx(ce,{tone:"informative",children:t("config.newSourceUnmatched")})]})]})]})}function Ct(s){const{canValidate:t}=s,e=F(),{writable:n,note:a,refused:r,shown:l,marks:c,text:f,outbounds:i,focus:p,dirty:g,conflict:u,keep:v,validate:N,save:x,cancel:w,change:h,view:y,busy:P,validating:D,saving:S,saveButton:m,validateDisabled:k,reason:M}=et(s);return o.jsxs(pe,{"aria-label":y.label,children:[o.jsx(ee,{reason:M,children:o.jsxs("div",{className:"rp-row rp-source-note",children:[o.jsx("span",{className:"rp-cluster",children:g?o.jsxs(o.Fragment,{children:[o.jsx(ge,{tone:"warn",children:e("config.unsaved")}),o.jsx("span",{className:"rp-label",children:e("config.unsavedHint")})]}):o.jsx("span",{className:"rp-label",children:a})}),(t||g)&&o.jsxs("span",{className:"rp-cluster nowrap",children:[t&&o.jsx(T,{isPending:D,isDisabled:k,onPress:()=>void N(),children:e("config.validate")}),g&&o.jsxs(o.Fragment,{children:[o.jsx(T,{isDisabled:P,onPress:w,children:e("ui.cancel")}),o.jsx(T,{accent:!0,isPending:S,isDisabled:m.disabled,tip:m.tip,onPress:()=>void x(),children:e("config.save")})]})]})]})}),u&&o.jsx(ye,{message:u,busy:P,keep:v}),l.length>0&&o.jsx("div",{className:"rp-list rp-config-diagnostics",role:"list","aria-label":e("config.diagnostics"),children:l.map((R,O)=>o.jsxs("div",{className:"rp-cluster",role:"listitem",children:[o.jsx(B,{small:!0,tone:R.tone,children:R.detail}),o.jsx(T,{small:!0,quiet:!0,label:e("config.openSourceAt",{where:R.where}),onPress:()=>s.open(R.sourceId,R.line),children:e("config.openSource")})]},O))}),o.jsx(we,{label:y.label,value:f,readOnly:!n||P,onChange:h,onReadOnlyAttempt:r,marks:c,focusLine:p,outbounds:i,onSave:g&&!P?()=>void x():void 0})]})}function Mt(s){const{canValidate:t,open:e}=s,n=F(),{level:a,setLevel:r,selected:l,setSelected:c,shown:f,validate:i,summaryTone:p,summary:g,lastRun:u,validating:v,blocked:N,reason:x,levels:w}=nt(s);return o.jsxs(o.Fragment,{children:[o.jsx(ee,{reason:t?x:null,children:o.jsxs("div",{className:"rp-toolbar",children:[o.jsx(B,{small:!0,tone:p,children:g}),o.jsx("span",{className:"rp-label",children:u}),o.jsx("span",{className:"rp-grow"}),t&&o.jsxs(T,{isPending:v,isDisabled:N,onPress:i,children:[o.jsx(Tn,{className:"rp-spin-on-press"}),n("config.revalidate")]})]})}),o.jsx("span",{className:"rp-label",children:n("config.validateNote")}),o.jsx(En,{label:n("config.level"),value:a,onChange:r,items:w}),o.jsx(Es,{label:n("config.diagnostics"),rows:f,height:360,selected:l,onSelect:c,detail:h=>o.jsxs("div",{className:"rp-cluster rp-config-diagnostics",children:[o.jsx(B,{small:!0,tone:h.tone,children:h.detail}),o.jsx(T,{label:n("config.openSourceAt",{where:h.where}),onPress:()=>e(h.sourceId,h.line),children:n("config.openSource")})]}),empty:n("config.noDiagnostics"),cols:[{id:"level",label:n("config.level"),minWidth:96,grow:0,render:h=>o.jsx(B,{small:!0,tone:h.tone,children:h.levelText})},{id:"where",label:n("config.where"),minWidth:150,grow:0,render:h=>o.jsx("span",{className:"rp-code",children:h.where})},{id:"message",label:n("config.message"),minWidth:240,grow:2,isRowHeader:!0,render:h=>o.jsx(Ge,{children:h.message})},{id:"code",label:n("config.code"),minWidth:140,drop:1,render:h=>o.jsx(Xe,{text:h.code})}]})]})}const Pt=["global","bypass","gfw","mini","standard","full"],Fe={global:["config.wizardGlobal","config.wizardGlobalHelp"],bypass:["config.wizardBypass","config.wizardBypassHelp"],gfw:["config.wizardGfw","config.wizardGfwHelp"],mini:["config.wizardMini","config.wizardMiniHelp"],standard:["config.wizardStandard","config.wizardStandardHelp"],full:["config.wizardFull","config.wizardFullHelp"]};function Rt({main:s,editor:t,onDone:e}){const n=F(),a=se(),r=ne[a],[l,c]=b.useState(()=>s),f=zn(l),i=l.content??"",[p,g]=b.useState(()=>le(i)),u=b.useMemo(()=>Ne(i,le(i)),[i]),v=b.useMemo(()=>{try{return{text:f?Ne(i,p):i,error:null}}catch(d){return{text:i,error:d}}},[f,i,p]),{text:N}=v,x=!!t.busy,[w,h]=b.useState(!1),y=!w&&(v.error!==null||f===!0&&N!==u),P=y||f===!0&&!i.trim(),[D,S]=b.useState(null),m=()=>{c(s),g(le(s.content??"")),S(null)},k=fe(y,m);b.useEffect(()=>t.cancel,[t.cancel,k.revision]);const M=Us(y,l,s),R=M==="conflict";Z(M==="follow"?s:null,d=>{d&&m()});const O=Gn(p.subscriptions),H=!!i.trim()||qn(p),j=O&&H,L=d=>{S(null),h(!1),g(E=>({...E,...d}))},W=(d,E)=>L({subscriptions:p.subscriptions.map((A,G)=>G===d?{...A,...E,raw:void 0}:A)}),U=async()=>{if(x||!j||R)return;if(v.error){$("negative",n("config.previewFailed"),Ln(v.error,n));return}const d=await t.apply(l,N);if(d){if(d.diagnostics){S(d.diagnostics),$("negative",n("ui.writeInvalid",{n:d.diagnostics.filter(E=>E.level==="error").length}));return}$("positive",n("config.saved",{path:C})),k.clear(),h(!0),e()}},C=J(s,r,n).label,z=Gs(p,a,n),Q=(t.errorSource===l.id?t.diagnostics:null)??D??[],X=d=>He(d.trim())?void 0:n("config.unquotable");return{state:p,text:N,busy:x,rows:z.rows,diagnostics:oe(Q,[s],r,n),defaultDnsError:X(p.defaultDns),chinaDnsError:X(p.chinaDns),groupUsedText:z.groupUsedText,templateHelp:p.rules==="keep"?null:n("config.wizardPresetHelp"),networkError:H?void 0:n("config.wizardNetworkError"),patch:L,setSubscription:W,apply:U,conflict:R?n("config.changedOnDisk"):null,keep:()=>c(s),discard:m,saveDisabled:!f||!j||x||!P||R,saving:t.busy==="save",saved:w,saveReason:ve({busy:x,complete:f,conflict:R,invalid:O?H?null:n("config.wizardNetworkError"):n("config.wizardSubsInvalid")},n),writeHelp:i.trim()?n("config.wizardWriteHelp",{path:C}):null,showLan:!i.trim(),templates:[...i.trim()?[{id:"keep",label:n("config.wizardKeep"),desc:n("config.wizardKeepHelp")}]:[],...Pt.map(d=>({id:d,label:n(Fe[d][0]),desc:n(Fe[d][1])}))],add:()=>L({subscriptions:[...p.subscriptions,{name:Jn(p.subscriptions),url:""}]}),remove:d=>L({subscriptions:p.subscriptions.filter((E,A)=>A!==d)})}}function Tt({next:s,...t}){const e=F(),{state:n,text:a,busy:r,rows:l,diagnostics:c,defaultDnsError:f,chinaDnsError:i,groupUsedText:p,templateHelp:g,networkError:u,patch:v,setSubscription:N,apply:x,conflict:w,keep:h,discard:y,saveDisabled:P,saving:D,saved:S,saveReason:m,writeHelp:k,showLan:M,templates:R,add:O,remove:H}=Rt(t);return o.jsxs(pe,{"aria-label":e("config.wizard"),children:[o.jsx("span",{className:"rp-label",children:e("config.wizardNote")}),o.jsx("h3",{className:"rp-h3",children:e("config.wizardSubscriptions")}),o.jsxs("div",{className:"rp-list",children:[l.map(j=>o.jsxs("div",{className:j.raw===null?"rp-toolbar top rp-sub-row":"rp-toolbar top",children:[j.raw!==null?o.jsx(Xe,{text:j.raw,className:"rp-grow rp-config-raw"}):o.jsxs(o.Fragment,{children:[o.jsx(K,{isDisabled:r,label:e("config.wizardSubscriptionName"),value:j.name,width:140,error:j.nameError,onChange:L=>N(j.index,{name:L})}),o.jsx(K,{isDisabled:r,className:"rp-sub-url",label:e("config.wizardSubscription"),value:j.url,width:520,placeholder:"https://example.org/sub?token=…",error:j.error,description:j.description,onChange:L=>N(j.index,{url:L})})]}),o.jsx("span",{className:j.raw===null?"rp-field-row rp-sub-remove":void 0,children:o.jsx(T,{isDisabled:r,quiet:!0,small:!0,label:j.removeLabel,onPress:()=>H(j.index),children:o.jsx(Fn,{})})})]},j.index)),o.jsx("div",{children:o.jsx(T,{isDisabled:r,small:!0,onPress:O,children:e("config.wizardAddSubscription")})})]}),o.jsx("h3",{className:"rp-h3",children:e("config.wizardTemplate")}),o.jsxs("div",{className:"rp-toolbar top",children:[o.jsx(me,{isDisabled:r,label:e("config.wizardTemplate"),value:n.rules,onChange:j=>v({rules:j}),items:R}),M&&o.jsx(K,{isDisabled:r,label:e("config.wizardLan"),value:n.lanInterface,width:140,placeholder:"auto",onChange:j=>v({lanInterface:j})})]}),p&&o.jsx("span",{className:"rp-label",children:p}),g&&o.jsx("span",{className:"rp-label",children:g}),M&&o.jsxs("div",{className:"rp-toolbar top",children:[o.jsx(K,{isDisabled:r,label:e("config.wizardListenerPort"),value:n.listenerPort,width:140,onChange:j=>v({listenerPort:j}),error:u}),o.jsx(K,{isDisabled:r,label:e("config.wizardDefaultDns"),value:n.defaultDns,error:f,onChange:j=>v({defaultDns:j})}),o.jsx(K,{isDisabled:r,label:e("config.wizardChinaDns"),value:n.chinaDns,error:i,onChange:j=>v({chinaDns:j})})]}),o.jsx("h3",{className:"rp-h3",children:e("config.wizardPreview")}),o.jsx(we,{label:e("config.wizardPreview"),value:a,readOnly:!0,compact:!0}),c.length>0&&o.jsx("div",{className:"rp-list rp-config-diagnostics",role:"list","aria-label":e("config.diagnostics"),children:c.map(j=>o.jsx("div",{role:"listitem",children:o.jsx(B,{small:!0,tone:j.tone,children:j.detail})},j.id))}),w&&o.jsx(ye,{message:w,busy:r,keep:h,discard:y}),o.jsx(ee,{reason:m,children:o.jsxs("div",{className:"rp-toolbar",children:[o.jsx(T,{accent:!0,isDisabled:P,isPending:D,onPress:()=>void x(),children:e("config.save")}),k&&o.jsx("span",{className:"rp-label",children:k}),S&&s.map(j=>o.jsx(Ue,{appearance:"button",quiet:!0,href:j.href,children:j.label},j.id))]})})]})}function Wt(s){const t=F(),{error:e,reload:n,loading:a,ready:r,metadata:l,redacted:c,tabs:f,tab:i,setTab:p,selectedId:g,select:u,sourceProps:v,newSourceProps:N,wizardProps:x,validateProps:w,modulesProps:h,sourceModel:y,sourceOptions:P,exportSource:D,summaryTone:S,summaryText:m}=Zs(s),k={modules:h&&o.jsx(kt,{...h}),setup:x&&o.jsx(Tt,{...x}),source:o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"rp-toolbar",children:[o.jsxs("span",{className:"rp-cluster nowrap rp-source-pick",children:[o.jsx(me,{side:!0,cut:"start",label:t("config.source"),value:g,onChange:u,items:P}),y&&o.jsxs(o.Fragment,{children:[y.readOnly&&o.jsxs("span",{className:"rp-help-row",children:[o.jsx(ge,{children:y.readOnly.label}),y.readOnly.help&&o.jsx(On,{...y.readOnly.help})]}),o.jsx(Ge,{className:"rp-label",text:y.loaded,children:y.facts})]})]}),(N||y)&&o.jsxs("span",{className:"rp-cluster nowrap",children:[N&&o.jsx(Dt,{...N}),y&&o.jsxs(T,{onPress:D,children:[o.jsx(An,{}),t("config.export")]})]})]}),y&&o.jsx("span",{className:"rp-label",children:t("config.exportWarning")}),v&&o.jsx(Ct,{...v},y.id)]}),validate:w&&o.jsx(Mt,{...w})};return o.jsxs("div",{className:"rp-page",children:[o.jsx(Hn,{error:e,onRetry:n}),a&&o.jsx($n,{}),r&&o.jsxs("div",{className:"rp-toolbar",children:[o.jsx(_n,{row:!0,items:l}),o.jsx(B,{small:!0,tone:S,children:m}),c&&o.jsx(B,{small:!0,tone:"muted",children:t("config.redacted")})]}),r&&o.jsx(Bn,{label:t("nav.config"),value:i,onChange:p,items:f.map(M=>({...M,content:k[M.id]}))})]})}export{Wt as Config}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Config-kDn1yln4.js b/luci-app-honk/root/etc/honk/doona/assets/Config-kDn1yln4.js new file mode 100644 index 000000000..12874fc71 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Config-kDn1yln4.js @@ -0,0 +1 @@ +import{r as e,j as n}from"./vendor-react-64fcanlc.js";import{s as r,h as i,j as s,fn as a,a2 as t,F as o,aC as l,V as c,$ as d,a1 as u,a0 as f,dL as p,a5 as g,dc as m,w as h,eQ as b,de as v,ag as x,fo as y,fp as j,a8 as w,eS as k,r as S,da as C,cC as N,fq as R,fr as D,f0 as O,fs as M,ap as T,c0 as E,ft as P,fu as A,a7 as L,dJ as F,fv as _,L as q,bD as $,b4 as I,O as H,aS as B,P as V,bP as W,D as K,aP as U,au as z,cD as G,bs as Q,dD as J,cE as Y,dC as Z,Q as X,G as ee,Y as ne,f8 as re,bQ as ie,fw as se,fx as ae,fy as te,fz as oe,fA as le,c2 as ce,fB as de,b_ as ue,fC as fe,bZ as pe,fD as ge,bk as me,fE as he,fF as be,fG as ve,Z as xe,aV as ye,aN as je,T as we}from"./index-BgFj_VXE.js";import{e as ke,u as Se,L as Ce,A as Ne,M as Re,S as De}from"./logs-BxISynQ4.js";import{T as Oe}from"./Tabs-CD2lZase.js";import{T as Me}from"./Toolbar-CIBfeuEz.js";import{r as Te,a0 as Ee,D as Pe}from"./activity-D06xJ7oH.js";import{d as Ae,c as Le,r as Fe,e as _e,f as qe,g as $e,h as Ie,i as He,j as Be,k as Ve,v as We,l as Ke,m as Ue,n as ze,o as Ge,p as Qe,s as Je,w as Ye}from"./nav-BidFSCY-.js";import{u as Ze,a as Xe}from"./flows-xKlsDqlH.js";import{d as en}from"./files-Dt8K7QfP.js";import{D as nn}from"./Table-Dprh3Btz.js";import{T as rn}from"./TimeCell-B4WLB8Ou.js";import{l as sn,b as an}from"./format-s2EANuUb.js";import{A as tn}from"./AddCircle-prR7q573.js";import{S as on,a as ln,E as cn,C as dn,b as un,l as fn,c as pn,h as gn,d as mn,r as hn,e as bn,f as vn,g as xn,i as yn,j as jn,s as wn,k as kn,t as Sn,m as Cn,n as Nn,o as Rn,p as Dn,q as On,u as Mn,v as Tn,w as En,x as Pn,y as An,z as Ln,D as Fn,R as _n,A as qn,B as $n,F as In,G as Hn,H as Bn,I as Vn,J as Wn,K as Kn,L as Un}from"./vendor-editor-BRV-W12m.js";import{d as zn,s as Gn}from"./daeTokens-BVtuNnWZ.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./Virtualizer-CZl-q5wo.js";import"./index-DUM-iwa2.js";function Qn(e,n,a,t="main"){if(!a.daeText)return[];const{blocks:o,tokens:l}=r(e),c=a.globalSettings;return o.flatMap(r=>{if(r.name===c?.name){const a=o.filter(e=>e.name===c.name).indexOf(r),t=i(e,r,l);return t.filter(e=>1===t.filter(n=>n.name===e.name).length&&c.fields.some(n=>n.key===e.name)).map(i=>({kind:r.name,from:i.from,to:i.to,label:i.name,line:e.slice(0,i.from).split("\n").length,href:s("config",{tab:"global",source:n,section:String(a),field:i.name})}))}const a=Ae[r.name];return"subscription"===r.name?"main"!==t?[]:Te(e).filter(e=>e.from>r.open&&e.to<=r.close).map(e=>({kind:r.name,from:e.from,to:e.to,label:e.tag,line:e.line,href:s("nodes",{editSubscriptionTag:e.tag})})):"dns"===r.name?r.children.filter(e=>"routing"===e.name).flatMap(e=>e.children.filter(e=>"request"===e.name||"response"===e.name).map(e=>({kind:r.name,from:e.from,to:e.to,label:e.name,line:e.line+1,href:a}))):a?[{kind:r.name,from:r.from,to:r.to,label:r.name,line:r.line+1,href:a}]:[]})}const Jn=()=>{};const Yn=new Map;function Zn({go:n,query:r}){const i=o(),s=l[c()],a=d(),S=a.data?.resources,C=u(f(S,"config",{whileLoading:!0})),N=function(n){const r=o(),i=t(n),s=e.useMemo(()=>{const e=y(i.error);return e?e.diagnostics??[]:null},[i.error]);return e.useEffect(()=>{if(i.error)if(s){const e=j(s);w("negative",e?r("config.writeRestart",{n:e}):r("ui.writeInvalid",{n:s.filter(e=>"error"===e.level).length}))}else k(i.error,r,r("ui.writeFailed"))},[i.error,s,r]),{...i,diagnostics:s}}(C.refetch),R=e.useMemo(()=>new URLSearchParams(r),[r]),D=e.useMemo(()=>C.data?.sources??[],[C.data]),O=D.find(e=>"main"===e.kind)??null,M=D.find(e=>e.id===R.get("source"))??D[0]??null,T=M?.id??null,E=(e,i)=>n("config",h(r,{tab:"source",source:e,line:null===i?null:String(i)})),P=Number(R.get("line"))||null,A=C.data?.diagnostics??[],L=e.useMemo(()=>{const e=C.data?.diagnostics??[];return{error:e.filter(e=>"error"===e.level).length,warning:e.filter(e=>"warning"===e.level).length}},[C.data]),F=f(S,"config_validate",{whileLoading:!1})&&(S?.config_validate.modes??[]).includes("full"),_=!0===S?.config.writable,q=p(D),$=g().data,I=e.useMemo(()=>ke($),[$]),H=Le(!!I.globalSettings,a.data),B=M?Fe(M,_,q(M),I,i):null,V=!!M&&!B,[W,K]=e.useState(Yn),[U,z]=e.useState(null),G=U??L.error,Q=R.has("source")||void 0===O?.content?"source":"modules",J=m("validate"===R.get("tab")?h(r,{tab:"source"}):r,H.map(e=>e.id),Q),Y=M?{source:M,sources:D,open:E,diagnostics:A,canValidate:F&&("main"===M.kind||"include"===M.kind),canWrite:V,readOnly:B,isComplete:q,editor:N,focusLine:P,generation:C.data?.generation_id??"",focusDiagnostics:"validate"===R.get("tab"),diagnosticsChoice:W.get(M.id)??null,chooseDiagnostics:e=>K(n=>new Map(n).set(M.id,e)),reportErrors:z}:null,Z=!0===S?.config.create&&!0===S.config.writable?{sources:D,refetch:C.refetch,open:e=>E(e,null)}:null;return{error:a.error??C.error,reload:()=>{a.refetch(),C.refetch()},loading:C.loading&&!C.data,ready:!!C.data,tabsReady:!!C.data||H.some(e=>"history"===e.id),metadata:C.data?qe(C.data.revision,i):[],redacted:!!C.data?.secrets_redacted,tabs:H.map(e=>({id:e.id,label:"source"===e.id&&G?i("ui.aside",{text:i(e.titleKey),note:x(G,s)}):i(e.titleKey)})),tab:J,setTab:e=>n("config",h(v(r,e,null),{field:null})),selectedId:T??"",select:e=>n("config",h(r,{source:e,line:null})),sourceProps:Y,newSourceProps:Z,modulesProps:C.data?{config:C.data}:null,sourceModel:M?{..._e(M,s,i),readOnly:B}:null,sourceOptions:D.map(e=>{const n=_e(e,s,i);return{id:n.id,label:n.label,desc:n.kind}}),exportSource:()=>{M&&en(b(M),M.content,"text/plain;charset=utf-8")},summaryTone:L.error?"err":L.warning?"warn":"ok",summaryText:L.error?i("config.errors",{n:L.error}):L.warning?i("config.warnings",{n:L.warning}):i("config.clean")}}function Xn({source:n,sources:r,diagnostics:i,canValidate:u,canWrite:f,readOnly:p,isComplete:m,editor:h,focusLine:b,generation:v,open:x,diagnosticsChoice:y,chooseDiagnostics:k,reportErrors:T}){const E=o(),P=l[c()],A=ke(g().data),L=d().data?.resources,F=Ze(!!b&&!0===L?.rules.available).data,_=Xe(!!b&&!0===L?.dns_rules.available).data,q=Se(!!b&&!0===L?.groups.available).data,$=b?S(n.content).find(e=>e.from=b-1):void 0,I=$&&Ee(q,$.name),H=F?.rules.find(e=>e.source?.source_id===n.id&&e.source.line===b),B=_?.request.some(e=>e.source?.source_id===n.id&&e.source.line===b)?"request":"response",V=_?.[B].find(e=>e.source?.source_id===n.id&&e.source.line===b),[W,K]=e.useState(null),[U,z]=e.useState(null),[G,Q]=e.useState(null),J=f&&!0===m(n),Y=e.useRef(!1),Z=h.errorSource===n.id?h.diagnostics:null,X=e.useMemo(()=>Z??U??(W?[]:i),[Z,U,W,i]);C(v,()=>z(null));const ee=e.useMemo(()=>$e(X,n.id,E),[X,n.id,E]),ne=W?.text??n.content??"",[re,ie]=e.useState(null),se=e.useRef(0),ae=e=>ie(null===e?null:{line:e,key:++se.current});C(b,()=>ie(null));const te=null!==W&&W.text!==n.content,oe=te&&W.origin.content_sha256!==n.content_sha256,le=N(te,()=>{K(null),z(null)});e.useEffect(()=>h.cancel,[h.cancel,le.revision]);const ce=W?.text,de=function(n,r,i){const s=i?.id,t=i?.content;return e.useMemo(()=>{const e=n.filter(e=>"main"===e.kind||"include"===e.kind);return e.some(e=>void 0===r(e))?null:a(e.filter(e=>r(e)),void 0!==s&&void 0!==t?{id:s,content:t}:void 0)},[n,r,s,t])}(r,m,{id:n.id,content:ne});!function(n,r){const{validate:i,cancel:s}=t(Jn);e.useEffect(()=>{if(!n)return;let e=!0;const a=setTimeout(()=>{i({sources:n,mode:"full"}).then(n=>{e&&n&&r(n.diagnostics)})},600);return()=>{e=!1,clearTimeout(a),s()}},[n,i,s,r])}(u&&void 0!==ce?de:null,z);const ue=(e,r=!0)=>{z(e.diagnostics);const i=e.diagnostics.find(e=>e.source_id===n.id&&"error"===e.level&&null!==e.line);ae(i?i.line:null);const s=j(e.diagnostics);return e.valid?r&&w("positive",E("config.valid")):w("negative",s?E("config.writeRestart",{n:s}):E("config.invalid",{n:e.diagnostics.filter(e=>"error"===e.level).length})),e.valid},fe=()=>{h.cancel(),K(null),z(null),Q(null)},pe=p?()=>{Y.current||(Y.current=!0,w("info",E("config.readOnlyAttempt"),{detail:p.note}))}:void 0,ge=_e(n,P,E),me=null!==U||null!==Z,he=e.useMemo(()=>Ie(X,r,P,E,n.id),[X,r,P,E,n.id]),be=He(he),[ve,xe]=e.useState("all"),ye=Be(he,ve),je=te&&!me;return e.useEffect(()=>T(je?null:be.errors),[T,je,be.errors]),e.useEffect(()=>()=>T(null),[T]),{writable:J,links:I?[{from:0,to:0,line:b,label:$.name,href:D("policies",I)}]:H||V?[{from:0,to:0,line:b,label:H?.expression??V.expression,href:s("rules",{tab:H?"list":"dns",view:H?"advanced":null,edit:H?.rule_id??V.rule_id,list:H?null:B})}]:Qn(ne,n.id,A,n.kind),note:p?.note??E(u?"config.editNoteValidate":"config.editNote"),refused:pe,diagnostics:{rows:ye.rows,errors:be.errors,warnings:be.warnings,level:ye.level,setLevel:e=>xe(e),levels:[["all",E("config.levelAll",{n:be.errors+be.warnings+be.infos})],["error",E("config.levelErrors",{n:be.errors})],["warning",E("config.levelWarnings",{n:be.warnings})],["info",E("config.levelInfo",{n:be.infos})]],scope:te?E("config.draftDiagnostics"):me?E("config.fileDiagnostics"):E("config.acceptedDiagnostics",{generation:v}),quiet:je?E("config.draftPending"):he.length?null:E("config.clean"),open:Ue(be.errorKeys,y),setOpen:e=>k({open:e,errorKeys:be.errorKeys}),go:e=>{"jump"===e.action?ae(e.line):"open"===e.action&&x(e.sourceId,e.line)}},restart:te?R(Z??G??[]):[],marks:ee,text:ne,outbounds:()=>O(r,{id:n.id,content:ne}),focus:re?.line??b,focusKey:re?.key??0,dirty:te,conflict:oe?E("config.changedOnDisk"):null,keep:()=>K(e=>e&&{...e,origin:n}),validate:async()=>{if(!de)return!1;const e=await h.validate({sources:de,mode:"full"});return!!e&&ue(e)},save:async()=>{if(null===W||h.busy||!J||oe)return;Q(null);const e=await h.apply(W.origin,W.text);if(z(null),e){if(e.diagnostics)return Q(e.diagnostics),void ue({valid:!1,diagnostics:e.diagnostics},!1);w("positive",E("config.saved",{path:_e(n,P,E).label})),le.clear(),K(null)}},cancel:fe,change:e=>{h.cancel(),e===n.content?fe():(z(null),Q(null),K(r=>({text:e,origin:r?.origin??n})))},view:ge,busy:!!h.busy,validating:"validate"===h.busy,saving:"save"===h.busy,saveButton:oe?{disabled:!0,tip:E("config.changedOnDisk")}:Ke(h.busy,J,p?.note??null,M,E),validateDisabled:!!h.busy||!de,reason:te?!J&&p?p.note:"validate"===h.busy?E("config.saveValidating"):Ve({busy:!!h.busy,conflict:!!oe},E):u&&!h.busy?We(de,r,m,E):null}}function er(){const n=o(),r=l[c()],i=T(),s=d().data,a=E(s),t=u(!0===s?.resources.config.available),f=P(a.revisions),p=A(),g=L(),m=F();e.useEffect(()=>()=>m.next(),[m]);const[h,b]=e.useState(null),[v,y]=e.useState(null),S=v&&{...v,...p.pending},[C,N]=e.useState(null),[R,D]=e.useState([]),O=function(e,n,r,i,s,a){const t=!1===n?.recorded;return{unrecorded:t,headNumber:null==a?void 0:x(a,i),rows:(e?.revisions??[]).map(n=>({...n,id:String(n.revision),number:x(n.revision,i),head:n.revision===e?.active,canRestore:r&&(n.revision!==e?.active||t),originText:"import"===n.origin?s("config.revisions.origin.import"):"write"===n.origin?s("config.revisions.origin.write"):"activate"===n.origin?s("config.revisions.origin.activate"):n.origin,size:an(n.bytes,i),metadata:[[s("config.revisions.revision"),x(n.revision,i)],[s("config.revisions.createdAt"),sn(n.created_at,i)],[s("config.revisions.parent"),null===n.parent?"—":x(n.parent,i)],[s("config.revisions.principal"),n.principal],[s("config.revisions.hash"),n.content_sha256]]}))}}(f.data,_(t.data),a.canActivate,r,n,S?.head),M=O.rows.find(e=>e.id===h),H=O.rows.find(e=>e.revision===S?.revision),B=()=>{m.next(),y(null)},V=async(e=!1)=>{if(!S||p.busy||(e?!p.pending:p.pending))return;const r=m.start();N(null),D([]);try{const s=e?await p.reread():await p.apply(S.revision,a.replaceRequired,S.head);if(T()!==i||!s)return;if("changed"in s)return void(r()&&(y({revision:S.revision,head:s.changed}),N({id:Date.now(),text:n("config.revisions.changed")})));w("positive",n(null===S.revision?"config.backup.imported":"config.revisions.restored")),r()&&B()}catch(s){if(T()!==i)return;if(k(s,n,n("ui.writeFailed")),r()){if(s instanceof q&&"ui.operationUnknown"===s.key)return;const e=(s instanceof $||s instanceof q?s.details:null)?.diagnostics;D(e??[]);const r=j(e??[]);N({id:Date.now(),text:r?n("config.writeRestart",{n:r}):I(s,n)})}}};return{management:a,list:f,view:O,detail:M,selected:h,setSelected:b,confirmation:S,target:H,problem:C,diagnostics:Ie(R,[],r,n),busy:!!p.busy,confirmDisabled:!!S?.operation||(null===S?.revision?!a.import:!H?.canRestore),show:e=>{m.next(),N(null),D([]),y(p.pending?{revision:p.pending.revision,head:p.pending.head}:{revision:e,head:f.error?void 0:f.data?.active})},close:B,submit:()=>V(),reread:()=>V(!0),exporting:!!g.busy,exportError:g.error,export:async()=>{const e=await g.run("export",e=>i.exportConfig(e));e&&T()===i&&en(e.filename,e.content,e.contentType)}}}function nr(){const e=o(),r=er();return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"rp-cluster",children:[r.management.export&&n.jsxs(H,{onPress:()=>{r.export()},isPending:r.exporting,children:[n.jsx(Pe,{}),e("config.backup.export")]}),r.management.import&&n.jsx(H,{onPress:()=>r.show(null),children:e("config.backup.import")}),(r.management.export||r.list.data)&&n.jsx(B,{title:e("config.tabHistory"),text:[...r.management.export?[e("config.backup.exportHelp")]:[],...r.list.data?[e("config.revisions.retention",{n:r.list.data.max_revisions})]:[]]})]}),n.jsx(V,{error:r.exportError,message:n=>e("config.backup.exportFailed",{error:n})}),r.view.unrecorded&&n.jsx(W,{tone:"informative",children:e("config.revisions.unrecorded")}),r.management.revisions&&n.jsxs(n.Fragment,{children:[n.jsx(V,{error:r.list.error,onRetry:r.list.refetch}),!r.list.data&&r.list.loading?n.jsx(K,{}):r.list.data&&n.jsx(n.Fragment,{children:r.view.rows.length?n.jsx(nn,{label:e("config.tabHistory"),rows:r.view.rows,fit:!0,loading:r.list.loading,selected:r.selected,onSelect:r.setSelected,rowDetail:!0,cols:[{id:"revision",label:e("config.revisions.revision"),minWidth:160,isRowHeader:!0,render:r=>n.jsxs("span",{className:"rp-cluster",children:[r.number,r.head&&n.jsx(U,{children:e("config.revisions.head")})]})},{id:"created",label:e("config.revisions.createdAt"),minWidth:150,render:e=>n.jsx(rn,{at:e.created_at})},{id:"origin",label:e("config.revisions.origin"),minWidth:110,render:e=>e.originText},{id:"size",label:e("config.revisions.bytes"),minWidth:100,render:e=>e.size}]}):n.jsx(z,{children:e("config.revisions.empty")})})]}),n.jsx(G,{title:e("config.revisions.details"),isOpen:!!r.detail,onOpenChange:e=>{e||r.setSelected(null)},scrollBody:!0,footer:i=>n.jsxs(n.Fragment,{children:[n.jsx(H,{onPress:i,children:e("ui.close")}),r.management.canActivate&&n.jsx(H,{isDisabled:!r.detail?.canRestore,onPress:()=>{r.show(r.detail.revision),r.setSelected(null)},children:e("config.revisions.restore")})]}),children:r.detail&&n.jsxs(n.Fragment,{children:[n.jsx(Q,{items:r.detail.metadata}),n.jsx(J,{title:e("config.revisions.sources"),children:r.detail.sources.map((r,i)=>n.jsx(Q,{items:[[e("config.source"),r.path],[e("config.revisions.hash"),r.sha256]]},i))})]})}),n.jsxs(Y,{title:null===r.confirmation?.revision?e("config.backup.importTitle"):e("config.revisions.restoreTitle",{revision:r.target?.number??""}),isOpen:!!r.confirmation,onCancel:r.close,onConfirm:()=>{r.submit()},isPending:r.busy,isDisabled:r.confirmDisabled,confirmLabel:e(null===r.confirmation?.revision?"config.backup.import":"config.revisions.restore"),error:r.problem,scrollBody:!0,children:[n.jsx("p",{children:null===r.confirmation?.revision?e("config.backup.importHelp"):e("config.revisions.restoreHelp")}),r.target&&n.jsx(Q,{items:r.target.metadata.slice(0,2)}),void 0!==r.view.headNumber&&n.jsx(Q,{items:[[e("config.revisions.head"),r.view.headNumber]]}),r.confirmation?.operation&&!r.busy&&n.jsxs(W,{tone:"informative",children:[n.jsx("p",{children:e("ui.operationUnknown")}),n.jsx(H,{onPress:()=>{r.reread()},children:e("ui.refresh")})]}),r.diagnostics.length>0&&n.jsx(nn,{label:e("config.diagnostics"),rows:r.diagnostics,fit:!0,cols:[{id:"message",isRowHeader:!0,label:e("config.diagnostics"),minWidth:220,text:"wrap",render:r=>n.jsxs("span",{children:[r.text,r.backend&&r.backend!==r.message&&n.jsx(Z,{flush:!0,title:e("config.backendText"),children:n.jsx("code",{children:r.backend})})]})}]})]})]})}function rr({config:r}){const i=o(),s=g().data,a=e.useMemo(()=>ke(s),[s]);return n.jsx("div",{className:"rp-page",children:ze(r.sources,a,i).map(e=>n.jsxs(X,{"aria-label":e.kind,children:[n.jsxs("div",{className:"rp-row",children:[n.jsxs("span",{className:"rp-cluster",children:[n.jsx("h2",{className:"rp-h3 rp-code",children:e.kind}),n.jsx("span",{className:"rp-label rp-code",children:e.range})]}),e.href&&n.jsx(ee,{appearance:"button",href:e.href,children:i("config.moduleOpen")})]}),n.jsx("span",{className:"rp-label",children:e.note??e.summary})]},e.id))})}const ir="systemctl restart honk-core";function sr({settings:e,sources:r}){const i=o(),s=c();return n.jsx(W,{takeFocus:!0,title:i("config.restart.title",{n:e.length}),action:n.jsxs(n.Fragment,{children:[n.jsx("span",{children:i("config.restart.planned")}),e.map(({key:e,sourceId:s,line:a},t)=>{const o=r.find(e=>e.id===s);return n.jsxs("span",{children:[e&&n.jsx("code",{className:"rp-code",children:e})," ",i("config.restart.effect"),null!==a&&o&&n.jsxs("span",{className:"rp-label",children:[" ",`${b(o)}:${a}`]})]},t)}),n.jsx("span",{children:i("config.restart.next")}),n.jsxs("span",{className:"rp-cluster",children:[n.jsx("code",{className:"rp-code rp-limit-snippet",children:ir}),n.jsx(H,{small:!0,onPress:()=>{(async()=>{const e=await re(ir);w(e?"positive":"negative",i(e?"config.restart.copied":"config.restart.copyFailed"))})()},children:i("config.restart.copy")})]}),n.jsxs(ee,{appearance:"link",external:!0,href:ne(s,"reload-and-restart"),children:[i("config.restart.docs"),n.jsx("span",{"aria-hidden":"true",children:"↗"})]})]}),children:i("config.restart.body")})}function ar(s){const l=o(),c=function({query:n,go:s}){const l=o(),c=d().data?.resources,m=f(c,"config",{whileLoading:!1}),v=u(m),x=g().data,j=ke(x),k=j.globalSettings,S=e.useMemo(()=>v.data?.sources??[],[v.data?.sources]),C=p(S),D=e.useMemo(()=>new URLSearchParams(n),[n]),O=S.filter(e=>"main"===e.kind||"include"===e.kind).flatMap(e=>{const n=r(e.content).blocks.filter(e=>e.name===k?.name);return(n.length?n:"main"===e.kind?[null]:[]).map((n,r)=>({id:`${e.id}:${r}`,source:e,block:n,index:r,label:`${b(e)}:${n?n.line+1:1}`}))}),M=O.find(e=>e.source.id===D.get("source")&&e.index===Number(D.get("section")??0))??O[0],T=M?.source,E=t(v.refetch),[P,A]=e.useState(null),[L,F]=e.useState(null),_=N(!!P,()=>{A(null),F(null)});e.useEffect(()=>E.cancel,[E.cancel,_.revision]);const $=P?.patch??{},I=P?.source.content??T?.content??"",H=r(I),B=H.blocks.filter(e=>e.name===k?.name)[M?.index??0],V=B?i(I,B,H.tokens):[],W=l("ui.listSeparator"),K=(k?.fields??[]).map(e=>{const n=V.filter(n=>n.name===e.key),r=$[e.key]??(n[0]?Ge(e,n[0].value):""),i="boolean"===e.type||!!e.choices&&"integer"!==e.type,s="boolean"===e.type?["true","false"]:e.choices??[];return{key:e.key,group:e.group,label:l(e.label),hint:(a=e,"list"===a.type?l("config.globalList"):a.choices&&"integer"===a.type?l("config.globalChoice",{choices:a.choices.join(W)}):a.max&&"18446744073709551615"!==a.max?l("config.globalRange",{max:a.max}):a.units?l("config.globalUnits",{units:a.units.filter(Boolean).join(W)}):void 0),items:i?[{id:"",label:l("config.globalUnset")},...[...s,...r&&!s.includes(r)?[r]:[]].map(e=>({id:e,label:e}))]:null,value:r,duplicate:n.length>1,invalid:null===Qe(e,r),change:r=>{if(!T||E.busy)return;E.cancel(),F(null);const i={...$,[e.key]:r};r===(n[0]?Ge(e,n[0].value):"")&&delete i[e.key],A(Object.keys(i).length?{source:P?.source??T,id:M.id,patch:i}:null)}};var a}),U=!!P&&(P.source.content_sha256!==T?.content_sha256||P.id!==M?.id),z=m&&!v.error&&!!T&&!0===c?.config.writable&&T.writable&&!0===C(T)&&!j.holdsCredentials(T),G=!!E.busy,Q=!P||!z||U||K.some(e=>e.key in $&&e.invalid),J=y(E.error)?.diagnostics??null,Y=E.error instanceof q&&"ui.writtenNotRead"===E.error.key,Z=L??J??null,X=P&&Array.isArray(Z)?R(Z):[];return e.useEffect(()=>{const e=D.get("field");if("global"!==D.get("tab")||!e)return;const n=document.getElementById("config-global-form")?.querySelector(`[data-setting="${CSS.escape(e)}"] input, [data-setting="${CSS.escape(e)}"] button`);n?.focus(),n?.scrollIntoView({block:"center"})},[D,T?.id,k,z]),{available:m&&!!k,fields:K,groups:Object.entries(Je).map(([e,n])=>({id:e,title:l(n),fields:K.filter(n=>n.group===e)})).filter(e=>e.fields.length>0),source:T,busy:G,blocked:Q,writable:z,dirty:!!P,conflict:U,failure:Array.isArray(Z)?X.length?null:l("config.invalid",{n:Z.filter(e=>"error"===e.level).length}):Z,restart:X,sources:S,unread:Y?l("ui.writtenNotRead"):null,error:(J||Y?null:E.error)??v.error,retry:v.refetch,save:async()=>{if(Q||G||!k||!M)return;const e=Ye(P.source.content,k,M.index,$),n=a(S.filter(e=>C(e)),{id:T.id,content:e});if(c?.config_validate.available&&c.config_validate.modes?.includes("full")){if(!n)return void F(l("config.incomplete"));const e=await E.validate({sources:n,mode:"full"});if(!e)return;if(!e.valid)return void F(e.diagnostics)}const r=await E.apply(P.source,e);r&&(r.diagnostics?F(r.diagnostics):(_.clear(),A(null),w("positive",l("config.globalSaved"))))},cancel:()=>{E.cancel(),_.clear(),A(null),F(null)},choices:O.map(({id:e,label:n})=>({id:e,label:n})),selected:M?.id??"",select:e=>{const r=O.find(n=>n.id===e);r&&s("config",h(n,{tab:"global",source:r.source.id,section:String(r.index),field:null}))}}}(s);return c.available?n.jsxs("form",{id:"config-global-form",className:"rp-page",onSubmit:e=>{e.preventDefault(),c.save()},children:[n.jsx(Me,{page:!0,children:n.jsx("span",{className:"rp-cluster nowrap rp-source-pick",children:n.jsx(Ce,{side:!0,cut:"path",label:l("config.source"),value:c.selected,items:c.choices,onChange:c.select,isDisabled:c.busy||!c.source})})}),n.jsx("span",{className:"rp-label",children:l("config.globalNote")}),c.unread&&n.jsx(W,{tone:"informative",children:c.unread}),n.jsx(V,{error:c.error,onRetry:c.retry}),c.failure&&n.jsx(W,{children:c.failure}),c.restart.length>0&&n.jsx(sr,{settings:c.restart,sources:c.sources}),c.conflict&&n.jsx(W,{children:l("config.changedOnDisk")}),c.source&&!c.writable&&n.jsx(W,{children:l("config.readOnly")}),c.groups.map(e=>n.jsx(X,{title:e.title,children:n.jsx(Me,{className:"top rp-fieldgrid",children:e.fields.map(e=>n.jsxs("div",{className:"rp-field","data-setting":e.key,children:[e.items?n.jsx(Ce,{label:e.label,value:e.value,isDisabled:!c.writable||c.busy||e.duplicate,onChange:e.change,items:e.items}):n.jsx(ie,{label:e.label,name:e.key,value:e.value,onChange:e.change,isDisabled:!c.writable||c.busy||e.duplicate,placeholder:l("config.globalUnset"),error:e.invalid?l("config.globalInvalid"):void 0,"aria-describedby":e.hint?`config-global-${e.key}`:void 0}),n.jsx("span",{className:"rp-label rp-code",children:e.key}),e.hint&&n.jsx("span",{id:`config-global-${e.key}`,className:"rp-label",children:e.hint}),e.duplicate&&n.jsx("span",{className:"rp-label",children:l("config.globalDuplicate")})]},e.key))})},e.id)),n.jsxs(Me,{page:!0,children:[n.jsx(H,{accent:!0,type:"submit",isPending:c.busy,isDisabled:c.blocked,children:l("config.globalSave")}),c.dirty&&n.jsx(H,{onPress:c.cancel,isDisabled:c.busy,children:l("config.discard")})]})]}):null}function tr(r){const i=o(),s=function({sources:n,refetch:r,open:i}){const s=o(),a=n.find(e=>"main"===e.kind),t=e.useMemo(()=>a?se(a.content):null,[a]),l=e.useMemo(()=>ae(t??[]),[t]),c=e.useMemo(()=>te(n),[n]),[d,u]=e.useState(null),[f,p]=e.useState(null),{busy:g,create:m}=oe(r),h=F(),b=d?.text??"",v=l.find(e=>e.pattern===d?.pattern)??null,x=v?v.prefix+b+v.suffix:b,y=b?v?le(b,v):ce(b):null;return{isOpen:null!==d,show:()=>{h.next(),p(null),u({text:l.length?"":de(t??[]),pattern:l[0]?.pattern??""})},hide:()=>{h.next(),u(null)},choices:l,choice:v,setChoice:e=>u(n=>n&&{...n,pattern:e}),text:b,setText:e=>u(n=>n&&{...n,text:e}),error:y?s(y):void 0,unmatched:!!b&&!y&&null!==c&&!c(x),problem:f,busy:g,canSubmit:!!b&&!y&&!g,submit:async e=>{if(!b||y||g)return;const n=h.start();try{const r=await m(x);if(!r)return;if(w("positive",s("config.newSourceCreated",{path:x})),!n())return;e(),r.id&&i(r.id)}catch(r){n()?p(e=>({id:(e?.id??0)+1,text:I(r,s)})):k(r,s,s("config.newSourceFailed",{path:x}))}}}}(r);return n.jsxs(n.Fragment,{children:[n.jsxs(H,{onPress:s.show,children:[n.jsx(tn,{}),i("config.newSource")]}),n.jsxs(G,{title:i("config.newSourceTitle"),narrow:!0,isOpen:s.isOpen,onOpenChange:e=>{e||s.hide()},footer:e=>n.jsxs(n.Fragment,{children:[n.jsx(H,{onPress:e,children:i("ui.cancel")}),n.jsx(H,{accent:!0,isDisabled:!s.canSubmit,isPending:s.busy,onPress:()=>{s.submit(e)},children:i("config.newSourceCreate")})]}),children:[s.problem&&n.jsx(W,{takeFocus:!0,children:s.problem.text},s.problem.id),n.jsxs("div",{className:"rp-list",children:[n.jsx("span",{className:"rp-label",children:i(s.choice?"config.newSourceNameHelp":"config.newSourceHelp")}),s.choices.length>1&&n.jsx(Ce,{label:i("config.newSourcePattern"),items:s.choices.map(e=>({id:e.pattern,label:e.pattern})),value:s.choice?.pattern??"",onChange:s.setChoice,isDisabled:s.busy}),s.choice?n.jsx(ie,{isDisabled:s.busy,label:i("config.newSourceName"),value:s.text,prefix:s.choice.prefix,suffix:s.choice.suffix,placeholder:"extra",spellCheck:!1,error:s.error,onChange:s.setText}):n.jsx(ie,{isDisabled:s.busy,label:i("config.newSourcePath"),value:s.text,placeholder:"config.d/extra.dae",spellCheck:!1,error:s.error,onChange:s.setText}),s.unmatched&&n.jsx(W,{tone:"informative",children:i("config.newSourceUnmatched")})]})]})]})}const or=on.define({name:"dae",languageData:{commentTokens:{line:"#"},closeBrackets:{brackets:["(","{","'",'"']}},startState:Gn,token:zn}),lr=["global","subscription","node","group","dns","routing"].map(e=>({label:e,type:"keyword"})),cr=pe.map(e=>({label:e,type:"property",apply:e+": "})),dr=["domain","dip","sip","dport","sport","l4proto","ipversion","pname","mac","dscp","qname","qtype","upstream"].map(e=>({label:e,type:"function",apply:e+"("})),ur=["geosite","geoip","suffix","full","keyword","regex"].map(e=>({label:e,type:"constant",apply:e+":"})),fr=fe.map(e=>({label:e,type:"constant"})),pr=ue.map(e=>({label:e,type:"keyword"})),gr=[{label:"fallback",type:"keyword",apply:"fallback: "},{label:"include",type:"keyword",apply:"include "}];function mr(e){return ln({override:[n=>function(e,n){const i=e.matchBefore(/[\w.-]*/);if(!i)return null;const s=e.state.doc.lineAt(e.pos),a=s.text.slice(0,e.pos-s.from),t=/->\s*[\w.-]*$/.test(a)||/^\s*fallback:\s*[\w.-]*$/.test(a);if(i.from===i.to&&!e.explicit&&!t)return null;const o=e.state.doc.sliceString(0,e.pos),{blocks:l,tokens:c}=r(o),d=c.at(-1);if(d?.to===e.pos&&("quoted"===d.kind||"comment"===d.kind))return null;const u=l.find(n=>n.close===e.pos)?.name;let f;if(t)f=[...n().map(e=>({label:e.name,apply:e.written,type:"variable"})),...pr];else if(/\b(domain|dip|sip|qname)\(\s*[\w.-]*$/.test(a))f=ur;else if(void 0===u)f=lr.map(e=>({...e,apply:(n,r,i,s)=>{const a=e.label+" {\n \n}";n.dispatch({changes:{from:i,to:s,insert:a},selection:{anchor:i+e.label.length+4}})}}));else if("routing"===u||"dns"===u)f=[...dr,...gr];else if("global"===u)f=cr;else{if("group"!==u)return null;f=/\bpolicy\s*:\s*[\w.-]*$/.test(a)?fr:[...fr.map(e=>({...e,apply:"policy: "+e.label})),{label:"filter",type:"property",apply:"filter: "}]}return{from:i.from,options:f,validFor:/^[\w.-]*$/}}(n,e)]})}function hr(e){let n=!1;const r=n=>(n.state.readOnly&&e(),!1);return cn.domEventHandlers({keydown:(e,n)=>function(e){return"Backspace"===e.key||"Delete"===e.key||"Enter"===e.key||1===[...e.key].length&&!e.ctrlKey&&!e.metaKey}(e)&&r(n),paste:(e,n)=>r(n),cut:(e,n)=>r(n),pointerdown:e=>(n="touch"===e.pointerType,!1),click:(e,i)=>n&&r(i)})}const br=[["Completions","cm.completions"],["Find","cm.find"],["Replace","cm.replace"],["next","cm.next"],["previous","cm.previous"],["all","cm.all"],["match case","cm.matchCase"],["regexp","cm.regexp"],["by word","cm.byWord"],["replace","cm.replaceOne"],["replace all","cm.replaceAll"],["close","ui.close"],["Go to line","cm.gotoLine"],["go","cm.go"],["current match","cm.currentMatch"],["replaced $ matches","cm.replacedMatches"],["replaced match on line $","cm.replacedOnLine"],["on line","cm.onLine"],["Selection deleted","cm.selectionDeleted"],["Control character","cm.controlCharacter"]],vr=e=>un.phrases.of(Object.fromEntries(br.map(([n,r])=>[n,e(r)]))),xr=cn.theme({"&":{backgroundColor:"var(--rp-base)",color:"var(--rp-text)",border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-md)",fontSize:"var(--rp-text-sm)"},"&.cm-focused":{outline:"none",borderColor:"var(--rp-text)"},".cm-scroller":{fontFamily:"var(--rp-font-mono)",lineHeight:"var(--rp-line-body)",fontVariantLigatures:"none",borderRadius:"calc(var(--rp-r-md) - 1px)"},".cm-content":{padding:"var(--rp-space-2) 0",caretColor:"var(--rp-text)"},".cm-line":{padding:"0 var(--rp-space-3)"},".cm-gutters":{backgroundColor:"var(--rp-base)",color:"var(--rp-muted)",border:"none"},".cm-lineNumbers .cm-gutterElement":{padding:"0 var(--rp-space-2) 0 var(--rp-space-3)",minWidth:"40px"},".cm-activeLine, .cm-focusLine":{backgroundColor:"color-mix(in srgb, var(--rp-hl-med) 60%, transparent)"},".cm-activeLineGutter":{backgroundColor:"transparent",color:"var(--rp-text)"},".cm-selectionBackground, &.cm-focused .cm-selectionBackground, ::selection":{backgroundColor:"var(--rp-hl-high)"},".cm-cursor":{borderLeftColor:"var(--rp-text)"},".cm-matchingBracket":{backgroundColor:"color-mix(in srgb, var(--rp-accent) 20%, transparent)",outline:"none"},".cm-selectionMatch":{backgroundColor:"color-mix(in srgb, var(--rp-notice) 25%, transparent)"},".cm-gutter-lint":{width:"12px"},".cm-gutter-lint .cm-gutterElement":{padding:"0"},".cm-lint-marker":{width:"8px",height:"8px",margin:"6px 2px",borderRadius:"50%"},".cm-lint-marker-error":{content:"none",backgroundColor:"var(--rp-negative)"},".cm-lint-marker-warning":{content:"none",backgroundColor:"var(--rp-notice)"},".cm-lint-marker-info":{content:"none",backgroundColor:"var(--rp-foam)"},".cm-tooltip.cm-tooltip-lint":{backgroundColor:"var(--rp-text)",color:"var(--rp-on-text)",border:"none",borderRadius:"var(--rp-r-sm)",padding:"var(--rp-space-half) 0"},".cm-tooltip-lint .cm-diagnostic":{border:"none",padding:"var(--rp-space-half) var(--rp-space-2)",fontSize:"var(--rp-text-xs)",lineHeight:"16px",fontFamily:"inherit"},".cm-tooltip-lint .cm-diagnosticText":{color:"inherit"},".cm-diag-line-error":{backgroundColor:"color-mix(in srgb, var(--rp-negative) 14%, transparent)"},".cm-diag-line-warning":{backgroundColor:"color-mix(in srgb, var(--rp-notice) 16%, transparent)"},".cm-diag-line-info":{backgroundColor:"color-mix(in srgb, var(--rp-foam) 14%, transparent)"},".cm-lintRange-error":{backgroundImage:"none",textDecoration:"underline wavy var(--rp-negative)",textUnderlineOffset:"3px"},".cm-lintRange-warning":{backgroundImage:"none",textDecoration:"underline wavy var(--rp-notice)",textUnderlineOffset:"3px"},".cm-lintRange-info":{backgroundImage:"none",textDecoration:"underline dotted var(--rp-foam)",textUnderlineOffset:"3px"},".cm-tooltip":{backgroundColor:"var(--rp-surface)",border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-md)",color:"var(--rp-text)"},".cm-tooltip.cm-tooltip-autocomplete > ul > li[aria-selected]":{backgroundColor:"var(--rp-selected)",color:"var(--rp-text)"},".cm-tooltip.cm-tooltip-autocomplete > ul":{fontFamily:"var(--rp-font-mono)",fontVariantLigatures:"none"},".cm-panels":{backgroundColor:"var(--rp-surface)",color:"var(--rp-text)"},".cm-panels-bottom":{borderTop:"1px solid var(--rp-hl-med)"},".cm-textfield":{border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-sm)",backgroundColor:"var(--rp-base)",color:"var(--rp-text)"},".cm-button":{border:"1px solid var(--rp-hl-high)",borderRadius:"var(--rp-r-sm)",backgroundImage:"none",backgroundColor:"var(--rp-overlay)",color:"var(--rp-text)"}}),yr=Wn.define([{tag:Kn.comment,color:"var(--rp-code-comment)"},{tag:Kn.keyword,color:"var(--rp-code-keyword)",fontWeight:"700"},{tag:Kn.string,color:"var(--rp-code-string)"},{tag:Kn.number,color:"var(--rp-code-number)"},{tag:Kn.propertyName,color:"var(--rp-code-propertyName)"},{tag:Kn.variableName,color:"var(--rp-code-variableName)"},{tag:Kn.operator,color:"var(--rp-code-operator)"},{tag:Kn.punctuation,color:"var(--rp-code-punctuation)"}]),jr=qn.of((e,n)=>{const r=e.lineAt(n,-1),i=r.from>0?e.lineAt(r.from-1,-1):null;if(!i)return 0;const s=/^\s*/.exec(i.text)[0].length,a=/\{\s*(#.*)?$/.test(i.text),t=/^\s*\}/.test(r.text);return Math.max(0,s+(a?2:0)-(t?2:0))}),wr=Vn.define(),kr={error:Fn.line({class:"cm-diag-line cm-diag-line-error"}),warning:Fn.line({class:"cm-diag-line cm-diag-line-warning"}),info:Fn.line({class:"cm-diag-line cm-diag-line-info"})},Sr=Ln.define({create:()=>Fn.none,update(e,n){let r=e.map(n.changes);for(const i of n.effects){if(!i.is(wr))continue;const e=new _n,s={error:0,warning:1,info:2},a=new Map;for(const r of i.value){if(r.line<1||r.line>n.state.doc.lines)continue;const e=a.get(r.line);(!e||s[r.level]e-n)){const i=n.state.doc.line(r).from;e.add(i,i,kr[a.get(r).level])}r=e.finish()}return r},provide:e=>cn.decorations.from(e)}),Cr=[{id:"undo",label:"cm.undo",run:Pn},{id:"redo",label:"cm.redo",run:An},{id:"comment",label:"cm.toggleComment",run:Sn}],Nr=[],Rr=Bn.define(),Dr=Vn.define(),Or=Fn.line({class:"cm-focusLine"}),Mr=Ln.define({create:()=>Fn.none,update(e,n){let r=e.map(n.changes);for(const i of n.effects)i.is(Dr)&&(r=Fn.set(Or.range(n.state.doc.line(i.value).from)));return r},provide:e=>cn.decorations.from(e)}),Tr=e=>[un.readOnly.of(e),cn.editable.of(!e),e?Mr:[$n(),In(),Hn()]];function Er({value:r,onChange:i,readOnly:s=!1,marks:a=Nr,focusLine:t,label:l,outbounds:c,onSave:d,onReadOnlyAttempt:u,compact:f,actions:p=[],focusKey:g,banner:m}){const h=e.useRef(null),b=ge(h,p.map(e=>e.label).join("\n")+s+l),v=e.useRef(null);e.useLayoutEffect(()=>{b&&h.current?.contains(document.activeElement)&&v.current?.querySelector("button")?.focus()},[b]);const x=e.useRef(null),{isFocusVisible:y}=me({isTextInput:!0}),j=e.useRef(null),w=e.useRef(null),k=e.useRef(i),S=e.useRef(c),C=e.useRef(d),N=e.useRef(u);e.useEffect(()=>{k.current=i,S.current=c,C.current=d,N.current=u});const R=e.useRef(new dn),D=o(),O=e.useRef(new dn),M=e.useRef(new dn),T=e.useRef(new dn);e.useLayoutEffect(()=>{const e=new cn({parent:x.current,state:un.create({doc:r,extensions:[fn(),pn(),cn.scrollMargins.of(e=>{const n=j.current?.getBoundingClientRect().bottom;return void 0===n?null:{top:Math.min(n,Math.max(0,n-e.scrollDOM.getBoundingClientRect().top))}}),gn(),T.current.of(mn()),hn(),Sr,bn(),vn(),xn(),yn.of(" "),jn(),jr,mr(()=>S.current?.()??[]),or,wn(yr),xr,kn.of([{key:"Mod-s",run:()=>(C.current?.(),!0)},{key:"Mod-/",run:Sn},{key:"Mod-g",run:Cn},...Nn,...Rn,...Dn,...On,...Mn,Tn]),R.current.of(Tr(s)),O.current.of(vr(D)),M.current.of(cn.contentAttributes.of({"aria-label":l,tabindex:"0"})),hr(()=>N.current?.()),cn.updateListener.of(e=>{e.docChanged&&!e.transactions.some(e=>e.annotation(Rr))&&k.current?.(e.state.doc.toString())})]})});return w.current=e,()=>{e.destroy(),w.current=null}},[]),e.useEffect(()=>{const e=w.current;e&&e.dispatch({effects:R.current.reconfigure(Tr(s))})},[s]),e.useEffect(()=>{w.current?.dispatch({effects:O.current.reconfigure(vr(D))})},[D]),e.useEffect(()=>{w.current?.dispatch({effects:M.current.reconfigure(cn.contentAttributes.of({"aria-label":l,tabindex:"0"}))})},[l]),e.useEffect(()=>{const e=w.current;e&&e.state.doc.toString()!==r&&(e.dispatch({changes:{from:0,to:e.state.doc.length,insert:r},annotations:Rr.of(!0),effects:T.current.reconfigure([])}),e.dispatch({effects:T.current.reconfigure(mn())}))},[r]),e.useEffect(()=>{const e=w.current;if(!e)return;const n=En(e.state,function(e,n){return n.filter(n=>n.line>=1&&n.line<=e.doc.lines).map(n=>{const r=e.doc.line(n.line),i=Math.max(0,(n.column??1)-1),s=(new TextEncoder).encode(r.text);let a=0;for(let e=0;ei)break;e+=n,a+=4===n?2:1}return{from:r.from+a,to:r.to,severity:n.level,message:n.message}})}(e.state,a)),r=Array.isArray(n.effects)?n.effects:n.effects?[n.effects]:[];e.dispatch({...n,effects:[...r,wr.of(a)]})},[a]),e.useEffect(()=>{const e=w.current;if(!e||!t||t<1||t>e.state.doc.lines)return;const n=e.state.doc.line(t);e.dispatch({selection:{anchor:n.from},effects:[Dr.of(t),cn.scrollIntoView(n.from,{y:"center"})]}),e.focus()},[t,g]);const E=e=>{w.current&&e(w.current)};return n.jsxs(n.Fragment,{children:[!f&&n.jsxs("div",{className:"rp-editor-head",ref:j,children:[n.jsxs("div",{className:"rp-toolbar rp-editor-toolbar",children:[n.jsx(Ne,{actions:p.slice(0,1),overflowMode:"wrap"}),n.jsxs("div",{className:"rp-editor-actions","data-collapsed":b||void 0,children:[n.jsxs("div",{className:"rp-toolbar",ref:h,children:[n.jsx(Ne,{actions:p.slice(1),overflowMode:"wrap"}),n.jsx(H,{onPress:()=>E(Un),children:D(s?"cm.find":"cm.findReplace")}),n.jsx(H,{onPress:()=>E(Cn),children:D("cm.gotoLine")}),i&&n.jsx(he,{label:D("cm.commands"),isDisabled:s,content:n.jsx(be,{"aria-label":D("cm.commands"),onAction:e=>{const n=Cr.find(n=>n.id===e);n&&E(n.run)},children:Cr.map(e=>n.jsx(ve,{id:e.id,className:"rp-item plain",textValue:D(e.label),children:D(e.label)},e.id))}),children:D("cm.commands")})]}),b&&n.jsx("div",{className:"rp-editor-overflow",ref:v,children:n.jsx(Re,{actions:[...p.slice(1),{id:"find",label:D(s?"cm.find":"cm.findReplace"),onAction:()=>requestAnimationFrame(()=>E(Un))},{id:"line",label:D("cm.gotoLine"),onAction:()=>requestAnimationFrame(()=>E(Cn))},...i?Cr.map(e=>({id:e.id,label:D(e.label),isDisabled:s,onAction:()=>requestAnimationFrame(()=>E(e.run))})):[]]})})]})]}),m]}),n.jsx("div",{className:f?"rp-editor compact":"rp-editor",ref:x,"data-keyboard":y||void 0})]})}function Pr({message:e,busy:r,keep:i,discard:s}){const a=o();return n.jsx(W,{action:(i||s)&&n.jsxs(Me,{children:[i&&n.jsx(H,{isDisabled:r,onPress:i,children:a("config.keepChanges")}),s&&n.jsx(H,{isDisabled:r,onPress:s,children:a("config.discard")})]}),children:e})}function Ar(r){const{canValidate:i}=r,s=o(),{writable:a,links:t,diagnostics:l,note:c,refused:d,restart:u,marks:f,text:p,outbounds:g,focus:m,focusKey:h,dirty:b,conflict:v,keep:x,validate:y,save:j,cancel:w,change:k,view:S,busy:C,validating:N,saving:R,saveButton:D,validateDisabled:O,reason:M}=Xn(r),T=e.useRef(null);e.useEffect(()=>{r.focusDiagnostics&&(T.current?.focus(),T.current?.scrollIntoView({block:"nearest"}))},[r.focusDiagnostics,r.focusLine,r.source.id]);const E=function(e,n,r){return e.filter(e=>e.line===n||n&&e.line<=n&&r.slice(0,e.to).split("\n").length>=n)}(t,m,p),P=E.length?E:t,A=n.jsx(Me,{"aria-label":s("config.forms"),children:P.map(e=>n.jsx(ee,{appearance:"button",href:e.href,children:e.label},e.from))}),L=n.jsx("div",{ref:T,tabIndex:-1,role:"region","aria-label":s("config.diagnostics"),className:"rp-config-diagnostics",children:l.quiet?n.jsx("span",{className:"rp-config-diagnostics-quiet rp-label",children:l.quiet}):n.jsxs(Z,{isExpanded:l.open,onExpandedChange:l.setOpen,title:n.jsxs("span",{className:"rp-config-diagnostics-summary",children:[n.jsx(U,{tone:l.errors?"negative":void 0,children:s("config.levelErrors",{n:l.errors})}),n.jsx(U,{tone:l.warnings?"warn":void 0,children:s("config.levelWarnings",{n:l.warnings})}),n.jsx("span",{className:"rp-label",children:l.scope})]}),children:[n.jsx("div",{className:"rp-config-diagnostic-filter",children:n.jsx(De,{label:s("config.level"),value:l.level,onChange:l.setLevel,items:l.levels})}),n.jsx("div",{className:"rp-config-diagnostic-list",role:"list","aria-label":s("config.diagnostics"),children:l.rows.map(e=>n.jsxs("div",{className:"rp-config-diagnostic",role:"listitem",children:[n.jsxs(xe,{small:!0,tone:e.tone,children:[n.jsx(ye,{children:`${e.levelText} `}),e.text]}),e.backend&&n.jsx(Z,{flush:!0,title:s("config.backendText"),children:n.jsx("code",{children:e.backend})}),e.action&&n.jsx(H,{small:!0,className:"rp-config-diagnostic-go",label:"jump"===e.action?s("config.jumpToLine",{line:e.line}):s("config.openSourceAt",{where:e.where}),onPress:()=>l.go(e),children:s("jump"===e.action?"cm.go":"config.openSource")})]},e.id))})]})}),F=[...i?[{id:"validate",label:s("config.validate"),isPending:N,isDisabled:O,reason:M??void 0,onAction:()=>{y()}}]:[],...b?[{id:"cancel",label:s("ui.cancel"),isDisabled:C,onAction:w},{id:"save",label:s("config.save"),accent:!0,isPending:R,isDisabled:D.disabled,reason:D.tip??M??void 0,onAction:()=>{j()}}]:[]];return n.jsxs(X,{title:s("config.editor"),className:"rp-source-card","aria-label":S.label,help:a?{title:s("config.editor"),text:s("config.writeHelp")}:void 0,reason:M,children:[n.jsx("div",{className:"rp-row rp-source-note",children:n.jsx("span",{className:"rp-cluster",children:b?n.jsxs(n.Fragment,{children:[n.jsx(U,{tone:"warn",children:s("config.unsaved")}),n.jsx("span",{className:"rp-label",children:s("config.unsavedHint")})]}):n.jsx("span",{className:"rp-label",children:c})})}),v&&n.jsx(Pr,{message:v,busy:C,keep:x}),u.length>0&&n.jsx(sr,{settings:u,sources:r.sources}),E.length?A:t.length>0&&n.jsx(Z,{title:s("config.forms"),children:A}),n.jsx(Er,{actions:F,label:S.label,value:p,readOnly:!a||C,onChange:k,onReadOnlyAttempt:d,marks:f,focusLine:m,focusKey:h,banner:L,outbounds:g,onSave:b&&!C?()=>{j()}:void 0})]})}function Lr(e){const r=o(),{error:i,reload:s,loading:a,ready:t,tabsReady:l,metadata:c,redacted:d,tabs:u,tab:f,setTab:p,selectedId:g,select:m,sourceProps:h,newSourceProps:b,modulesProps:v,sourceModel:x,sourceOptions:y,exportSource:j,summaryTone:w,summaryText:k}=Zn(e),S={history:n.jsx(nr,{}),modules:v&&n.jsx(rr,{...v}),global:n.jsx(ar,{...e}),source:n.jsxs(n.Fragment,{children:[n.jsxs(Me,{page:!0,children:[n.jsxs("span",{className:"rp-cluster nowrap rp-source-pick",children:[n.jsx(Ce,{side:!0,cut:"path",label:r("config.source"),value:g,onChange:m,items:y}),x&&n.jsxs(n.Fragment,{children:[x.readOnly&&n.jsx(je,{help:x.readOnly.help,children:n.jsx(U,{children:x.readOnly.label})}),n.jsx(we,{className:"rp-label",text:x.loaded,children:x.facts})]})]}),(b||x)&&n.jsxs("span",{className:"rp-cluster nowrap",children:[b&&n.jsx(tr,{...b}),x&&n.jsxs(H,{onPress:j,children:[n.jsx(Pe,{}),r("config.export")]})]})]}),x&&n.jsx("span",{className:"rp-label",children:r("config.exportWarning")}),h&&n.jsx(Ar,{...h},x.id)]})};return n.jsxs("div",{className:"rp-page",children:[n.jsx(V,{error:i,onRetry:s}),a&&n.jsx(K,{}),t&&n.jsxs(Me,{page:!0,children:[n.jsx(Q,{row:!0,items:c}),n.jsx(xe,{small:!0,tone:w,children:k}),d&&n.jsx(xe,{small:!0,tone:"muted",children:r("config.redacted")})]}),l&&n.jsx(Oe,{page:!0,label:r("nav.config"),value:f,onChange:p,items:u.map(e=>({...e,content:S[e.id]}))})]})}export{Lr as Config}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Connections-CjRavXMq.js b/luci-app-honk/root/etc/honk/doona/assets/Connections-CjRavXMq.js new file mode 100644 index 000000000..59d810658 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Connections-CjRavXMq.js @@ -0,0 +1 @@ +import{r as e,j as n}from"./vendor-react-64fcanlc.js";import{O as t}from"./OutboundTag-jvAhyeqj.js";import{F as o,aC as s,V as l,o as a,aT as r,Q as i,P as c,ag as d,x as u,aa as p,d3 as m,O as b,aP as h,N as g,T as f,d4 as w,w as v,cP as y,ad as x,d5 as j,d6 as _,$ as k,a0 as C,a1 as S,ab as A,d7 as N,i as L,d8 as T,av as M,am as R,d9 as P,bK as F,da as O,c7 as q,db as D,dc as W,dd as U,a9 as E,de as V,a8 as H,df as I,b4 as Q,dg as B,dh as G,bD as K,di as J,bQ as z,U as Z,dj as $,bB as X,aN as Y,Z as ee,bs as ne}from"./index-BgFj_VXE.js";import{R as te,d as oe,h as se,c as le,u as ae,S as re,L as ie,M as ce}from"./logs-BxISynQ4.js";import{T as de}from"./Tabs-CD2lZase.js";import{T as ue}from"./Toolbar-CIBfeuEz.js";import{z as pe,D as me,U as be,F as he,A as ge,B as fe,C as we,L as ve,E as ye,G as xe,H as je,I as _e,J as ke,K as Ce,M as Se}from"./activity-D06xJ7oH.js";import{S as Ae}from"./SearchSelect-CO6FsBaz.js";import{d as Ne,b as Le,c as Te,a as Me,l as Re}from"./format-s2EANuUb.js";import{D as Pe}from"./Table-Dprh3Btz.js";import{T as Fe}from"./TimeCell-B4WLB8Ou.js";import{A as Oe}from"./AddCircle-prR7q573.js";import{u as qe,r as De,R as We}from"./useQuickRule-fWQicp9K.js";import{u as Ue}from"./outbounds-BApwKyMu.js";import{c as Ee,d as Ve,e as He}from"./files-Dt8K7QfP.js";import{w as Ie}from"./labels-DPpd4zRF.js";import{u as Qe}from"./flows-xKlsDqlH.js";import{c as Be}from"./nav-Wiib71Wo.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Tag-PTwIjtR6.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./SearchList-Bhc2_bS4.js";import"./Virtualizer-CZl-q5wo.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";const Ge=[0,2,3,1,4,5,6,7],Ke=e.memo(function({records:t,outbounds:d,latency:u,latencyError:p,retryLatency:m,truncated:b,onSelect:h}){const g=o(),f=pe(),w=s[l()],v=e.useCallback(e=>Le(e,w),[w]),y=e.useMemo(()=>function(e,n){const t=new Map;let o=0;for(const r of e){if(null===r.upload_bytes||null===r.download_bytes){o++;continue}const e={id:r.id,up:Number(r.upload_bytes),down:Number(r.download_bytes),name:r.domain||r.dst||r.id},n=t.get(r.outbound);n?n.push(e):t.set(r.outbound,[e])}const s=[...t].map(([e,n])=>({outbound:e,points:n})).sort((e,t)=>Ne(n)(e.outbound??"",t.outbound??""));let l,a=-1n;for(const r of e){if(null===r.upload_bytes||null===r.download_bytes)continue;const e=BigInt(r.upload_bytes)+BigInt(r.download_bytes);e>a&&(a=e,l={id:r.id,up:Number(r.upload_bytes),down:Number(r.download_bytes),name:r.domain||r.dst||r.id,outbound:r.outbound})}return{series:s,unknown:o,heaviest:l,placed:e.length-o}}(t,w),[t,w]),x=e.useMemo(()=>{const e=d.filter(e=>"block"!==e);return y.series.map(n=>{return{id:n.outbound??"",label:a(n.outbound,g),color:(t=n.outbound,"block"===t?f.negative:f.cat[Ge[Math.max(0,e.indexOf(t))%Ge.length]]),points:n.points.map(e=>({id:e.id,x:e.up,y:e.down,name:e.name,detail:g("conn.chart.point",{download:v(e.down),upload:v(e.up)})}))};var t})},[y,d,f,g,v]),j=y.heaviest?[{label:g("conn.chart.busiest"),icon:n.jsx(r,{}),tint:"c3",value:y.heaviest.name,caption:a(y.heaviest.outbound,g)},{label:g("conn.chart.down"),value:v(y.heaviest.down),icon:n.jsx(me,{}),tint:"c1"},{label:g("conn.chart.up"),value:v(y.heaviest.up),icon:n.jsx(be,{}),tint:"c4"}]:[],_=y.unknown?g("conn.chart.sampleUnknown",{n:t.length,unknown:y.unknown}):g("conn.chart.sample",{n:t.length});return n.jsxs("div",{className:"rp-chart-page",children:[n.jsx(he,{facts:j,lead:!0}),n.jsxs(i,{title:g("conn.chart.title"),note:_,children:[b&&n.jsx("p",{className:"rp-note",children:g("conn.truncated")}),y.placed>0&&n.jsxs(n.Fragment,{children:[n.jsx(ge,{label:g("conn.chart.title"),series:x,fmt:v,onSelect:h,regions:{above:g("conn.chart.moreDown"),below:g("conn.chart.moreUp")}}),n.jsx(fe,{series:x}),n.jsx("p",{className:"rp-note",children:g("conn.chart.hint")})]})]}),u?n.jsx(Je,{latency:u}):p&&n.jsx(i,{title:g("ui.nodeLatency"),children:n.jsx(c,{error:p,onRetry:m})})]})});function Je({latency:e}){const t=o(),a=pe(),r=e=>Te(e,t),c=s[l()],u=n=>!e.chains||n?a.cat[0]:a.muted;return n.jsx(i,{title:t("ui.nodeLatency"),note:t("conn.latency.sample",{n:e.samples.length,missing:e.missing}),children:e.samples.length?n.jsxs(n.Fragment,{children:[n.jsx("p",{className:"rp-note",children:t("conn.latency.percentiles",{p50:r(e.p50),p90:r(e.p90)})}),null!==e.weightedP50&&n.jsx("p",{className:"rp-note",children:e.unplaced?t("conn.latency.weightedUnplaced",{p50:r(e.weightedP50),n:e.unplaced}):t("conn.latency.weighted",{p50:r(e.weightedP50)})}),n.jsx(we,{label:t("ui.nodeLatency"),points:e.samples.map(e=>({id:e.node,nodeName:!0,value:e.value,color:u(e.connections>0),lines:[e.name,r(e.value),...e.connections?[t("conn.chart.sample",{n:e.connections})]:[]]})),fmt:r}),e.chains&&n.jsxs("div",{className:"rp-legend",children:[n.jsx(ve,{swatch:u(!0),label:t("conn.latency.inUse"),value:d(e.used,c)}),n.jsx(ve,{swatch:u(!1),label:t("conn.latency.others"),value:d(e.samples.length-e.used,c)})]}),n.jsx("p",{className:"rp-note",children:t("conn.latency.hint")})]}):n.jsx("p",{className:"rp-note",children:t("conn.latency.pending")})})}const ze=[{id:"dst",label:"ui.target",minWidth:200,sortable:!0},{id:"src",label:"ui.device",minWidth:128,sortable:!0,drop:5},{id:"node",label:"conn.node",minWidth:120,drop:3},{id:"rule",label:"conn.rule",minWidth:220,drop:2},{id:"state",label:"ui.state",minWidth:112,sortable:!0,drop:7},{id:"down",label:"ui.download",minWidth:96,sortable:!0,drop:4},{id:"downRate",label:"conn.f.downloadRate",minWidth:128,sortable:!0,drop:1},{id:"age",label:"ui.started",minWidth:132,sortable:!0,drop:6}],Ze=u.connectionsView,$e=e=>({allCollapsed:e,exceptions:new Set}),Xe=(e,n)=>e.allCollapsed!==e.exceptions.has(n);function Ye(e,n){const t=new Set(e.exceptions);return t.delete(n)||t.add(n),{allCollapsed:e.allCollapsed,exceptions:t}}const en=(e,n)=>"source"===n?p(e.src??void 0)??e.src??"—":e.outbound??"unknown",nn=(e,n,t)=>"source"===n?e:a(e,t),tn=e=>"g:"+e,on=e=>e.startsWith("g:")||e.startsWith("\\")?"\\"+e:e;function sn(e){const n={hidden:[],sort:null,group:"source"};try{const t=JSON.parse(e??"null");if(!t||"object"!=typeof t)return n;const o=Array.isArray(t.hidden)?t.hidden.map(e=>"chain"===e?"node":e):[],s=ze.filter(e=>o.includes(e.id)).map(e=>e.id),l=t.sort;return{hidden:s.length===ze.length?[]:s,sort:l&&ze.some(e=>e.sortable&&e.id===l.column)&&["ascending","descending"].includes(l.direction)?{column:l.column,direction:l.direction}:null,group:"none"===t.group||"outbound"===t.group?t.group:"source"}}catch{return n}}const ln=e=>e.target;function an({collection:t,view:s,collapse:l,onToggleGroup:a,loading:r,selected:i,onSelect:c,selectOnFocus:d,onSort:u,rule:p}){const w=o(),[v,y]=m(442),x=e.useRef(p);e.useLayoutEffect(()=>{x.current=p});const j=e.useMemo(()=>{const e={dst:e=>n.jsx(f,{children:e.target}),src:e=>n.jsx(f,{className:"rp-code",children:e.source}),node:e=>e.nodeName?n.jsx(g,{name:e.node,className:"rp-chain",text:e.path??void 0}):n.jsx(f,{className:"rp-chain",text:e.path??void 0,children:e.node}),rule:e=>n.jsxs("span",{className:"rp-rule",children:[n.jsx(te,{...e.rule}),e.recomputed&&n.jsx(h,{children:e.recomputed})]}),state:e=>e.state,down:e=>e.download,downRate:e=>e.downloadRate,age:e=>n.jsx(Fe,{at:e.startedAt})};return[...ze.filter(e=>!s.hidden.includes(e.id)).map(n=>({...n,label:w(n.label),grow:1,render:e[n.id]})),{id:"actions",actions:!0,label:w("ui.actions"),minWidth:88,grow:0,render:e=>{const t=x.current,o=!t.canAdd(e.seed);return n.jsx(b,{quiet:!0,icon:!0,small:!0,label:t.label(e.target),tip:o?t.noTarget:void 0,isDisabled:o,onPress:()=>x.current.open(e.seed),children:n.jsx(Oe,{})})}}]},[s.hidden,w]),_=e.useMemo(()=>t.map(e=>"connection"in e?e.connection:e),[t]),k=e.useMemo(()=>({grouped:"none"!==s.group,collapsed:e=>Xe(l,e),onToggle:a}),[s.group,l,a]);return n.jsx("div",{ref:v,children:n.jsx(Pe,{label:w("nav.connections"),rowDetail:!0,cols:j,rows:_,height:y,selected:i&&on(i),onSelect:c&&(e=>c(e&&(e=>e.startsWith("\\")?e.slice(1):e)(e))),selectOnFocus:d,reveal:!0,empty:w("conn.empty"),loading:r,sort:s.sort&&{column:String(s.sort.column),direction:s.sort.direction},onSort:u,getTextValue:ln,stream:!0,tree:k})})}const rn={userspace:"conn.observed.userspace",ebpf:"conn.observed.ebpf",mixed:"conn.observed.mixed"},cn={evaluation:"conn.chainSource.evaluation",reconstructed:"conn.chainSource.reconstructed",unknown:"ui.unknown"};function dn(e,n){const t=e.chain_source?[["conn.f.chainSource",cn[e.chain_source]?{key:cn[e.chain_source]}:e.chain_source]]:[];return[["ui.device",e.src??"—"],["conn.f.dst",e.dst??"—"],["ui.domain",e.domain??"—"],["conn.f.ingress",Ie(e.ingress)],["conn.f.domainSource",Ie(e.domain_source)],...t,["ui.process",e.pname??"—"],["conn.f.observedBy",rn[e.observed_by]?{key:rn[e.observed_by]}:e.observed_by],["ui.upload",Le(e.upload_bytes,n)],["ui.download",Le(e.download_bytes,n)],["conn.f.uploadRate",Me(e.upload_bytes_per_second,n)],["conn.f.downloadRate",Me(e.download_bytes_per_second,n)],["conn.f.started",Re(e.started_at,n)]]}const un={observed:["conn.state.observed","conn.stateHelp.observed"],routing:["conn.state.routing","conn.stateHelp.routing"],dialing:["conn.state.dialing","conn.stateHelp.dialing"]};function pn(e,n){return Object.hasOwn(un,e)?{title:n("ui.state"),text:Object.values(un).map(([e,t])=>n("ui.valuePair",{label:n(e),value:n(t)}))}:null}const mn=e=>({domain:e.domain??null,dip:p(e.dst)??null,sip:p(e.src)??null,outbound:e.outbound,matched:e.rule_id&&"unknown"!==e.rule_source?{id:e.rule_id,expression:e.rule_expression}:null});const bn=new WeakMap;function hn(e,n,t,o,s,l){const a=e=>{const n=bn.get(e);if(n&&n.locale===t&&n.names===o&&n.rulesListed===s&&n.t===l)return n.row;const a={id:on(e.id),target:e.domain||e.dst||"—",seed:mn(e),source:e.src??"—",node:T(e,l,o),nodeName:!L(e.outbound)&&e.chain.length>0,path:N(e,l,o),rule:{expression:e.rule_expression,href:xe(e.rule_id,s)},recomputed:"recomputed"===e.rule_source?l("conn.recomputed"):null,state:x(j,e.state,l),download:Le(e.download_bytes,t),downloadRate:Me(e.download_bytes_per_second,t),startedAt:e.started_at};return bn.set(e,{locale:t,names:o,rulesListed:s,t:l,row:a}),a};return function(e,n,t,o){let s=e;if(n.sort){const{column:r,direction:i}=n.sort,c=Ne(t);l=e=>{switch(r){case"dst":return e.domain||e.dst;case"src":return e.src;case"state":return x(j,e.state,o);case"down":return M(e.download_bytes);case"downRate":return M(e.download_bytes_per_second);case"age":return e.started_at?Date.parse(e.started_at):null;default:return null}},a=(e,n)=>{if(null==e)return null==n?0:1;if(null==n)return-1;const t="string"==typeof e&&"string"==typeof n?c(e,n):en?1:0;return"descending"===i?-t:t},s=e.map(e=>({item:e,key:l(e)})).sort((e,n)=>a(e.key,n.key)).map(e=>e.item)}var l,a;if("none"===n.group)return s.map(e=>({id:on(e.id),connection:e}));const r=new Map;for(const i of s){const e=en(i,n.group),t=r.get(e);t?t.push(i):r.set(e,[i])}return[...r].map(([e,n])=>({id:tn(e),group:e,children:n,active:n.filter(e=>"active"===e.state).length,download:A(...n.map(e=>e.download_bytes))}))}(e,n,t,l).map(e=>"connection"in e?{id:e.id,connection:a(e.connection)}:{id:e.id,group:e.group,children:e.children.map(a),label:l("conn.groupCount",{name:nn(e.group,n.group,l),n:e.children.length}),totals:{down:Le(e.download,t),state:l("conn.activeCount",{n:e.active})}})}const gn=Be().map(e=>e.id),fn=e=>["id","src","network","out","rule","q"].some(n=>new URLSearchParams(e).has(n))?"list":"traffic",wn=(e,n)=>v(e,"list"===fn(e)?{tab:W(e,gn,"list"),...n}:n);function vn({go:n,query:t}){const r=o(),i=s[l()],[c,u]=e.useState(()=>{try{return sn(localStorage.getItem(Ze))}catch{return sn(null)}}),m=F(G),b=F(B),[h,g]=e.useState(()=>$e(!1)),f=e.useCallback(e=>g(n=>Ye(n,e)),[]),A=e=>{const n={...c,...e};n.group!==c.group&&g($e(!1)),u(n);try{localStorage.setItem(Ze,JSON.stringify(n))}catch{}},N=e.useMemo(()=>new URLSearchParams(t),[t]),[L,T]=e.useState(N.get("q")??""),M=N.get("network")??"all",z=N.get("out")??"all",Z=N.get("rule")??"all",$=(e,o)=>n("connections",wn(t,{[e]:"all"===o?null:o})),X=N.get("id"),[Y,ee]=e.useState(null);O(N.get("q"),e=>T(e??""));const ne=e.useRef(t);e.useEffect(()=>{ne.current=t});const te=e=>n("connections",wn(ne.current,{id:e})),re=e.useDeferredValue(L),ie=q(N.get("src")??""),ce=oe(ie),de=k(),ue=!0===de.data?.resources.connections.can_close,pe=C(de.data?.resources,"rules",{whileLoading:!1}),me=C(de.data?.resources,"flows",{whileLoading:!1});D(de.data?.resources);const be=Ue(),he=se(ce.refetch),ge=fn(t),fe=W(t,gn,ge),we=U(ce.data,"list"===fe),ve=U(ce.data,"traffic"===fe),Ae=e.useMemo(()=>E(we),[we]),Le=e.useMemo(()=>E(ve),[ve]),Te=C(de.data?.resources,"nodes",{whileLoading:!1}),Me=le(Te),Re=U(Me.data,"traffic"===fe),Pe=e.useMemo(()=>Te&&Re?function(e,n,t){if(!n.some(e=>e.health?.length))return null;const o=[];let s=0;for(const p of n){const e=R(P(p.health??[]));void 0===e?s++:o.push({node:p.id,name:p.name,value:e,connections:0})}o.sort((e,n)=>e.value-n.value||Ne(t)(e.name,n.name));const l=new Map(o.map(e=>[e.node,e])),a=e.some(e=>e.chain?.length);let r=0;for(const p of e){const e=p.chain?.at(-1);if(void 0===e)continue;const n=l.get(e);n?n.connections++:r++}const i=o.reduce((e,n)=>e+n.connections,0);let c=0;const d=o.find(e=>(c+=e.connections)>=Math.max(1,Math.ceil(i/2))),u=o.map(e=>e.value);return{samples:o,chains:a,missing:s,unplaced:r,used:o.filter(e=>e.connections).length,p50:ke(u,50),p90:ke(u,90),weightedP50:i?d.value:null}}(Le,Re,i):null,[Te,Re,Le,i]),Fe=Te&&!Me.data?Me.error:null,Oe=e.useMemo(()=>[...new Set(Le.map(e=>e.outbound))].sort((e,n)=>Ne(i)(e??"",n??"")),[Le,i]),We=re.trim().toLowerCase(),Ie=e.useMemo(()=>Ae.filter(e=>("all"===M||e.network===M)&&("all"===z||e.outbound===z)&&("all"===Z||e.rule_expression===Z)&&(!We||[e.dst,e.domain,e.src,e.pname,a(e.outbound,r),_(e.chain,be).join(" "),e.rule_expression].join(" ").toLowerCase().includes(We))),[Ae,M,z,Z,We,be,r]),Be=X?Ae.find(e=>e.id===X):void 0,[Ge,Ke]=e.useState(null);X||null===Ge||Ke(null);const Je=function(e,n){if(!e||"none"===n)return null;const t=en(e,n);return{group:t,token:JSON.stringify([e.id,n,t])}}(Be,c.group);var nn,tn;Je&&Ge!==Je.token&&(Ke(Je.token),g((nn=h,tn=Je.group,Xe(nn,tn)?Ye(nn,tn):nn)));const on=function(e,n){const t=o(),s=k().data?.resources,l=qe(n),a=C(s,"rules",{whileLoading:!1})&&C(s,"config",{whileLoading:!1})&&!0===s?.config.writable?e?.rule_id??null:null,r=Qe(!!a),i=S(!!a),c=e&&mn(e);return{canAdd:!!c&&l.canAdd(c),row:{canAdd:l.canAdd,open:l.open,label:e=>t("conn.addRuleFor",{target:e}),noTarget:t("conn.ruleNoTarget")},canShow:C(s,"rules",{whileLoading:!1})&&!!e?.rule_id,canEdit:!!a&&De(r.data?.rules.find(e=>e.rule_id===a),i.data?.sources??[]),openAdd:()=>{c&&l.open(c)},dialog:l.dialog}}(Be,n),ln=e.useMemo(()=>function(e,n,t,o,s,l,r){const i=new Set(e.flatMap(e=>e.outbound?[e.outbound]:[]));"all"!==s&&i.add(s);const c=e=>{const n=e.flatMap(e=>e?[e]:[]);return _e(n,1/0).top},u=[{id:"all",label:r("conn.allOutbounds")},...[...i].map(e=>({id:e,label:a(e,r)}))];return{networks:[["all",r("ui.allCount",{n:e.length})],["tcp",r("ui.tcp")],["udp",r("ui.udp")]],outbounds:u,outboundSections:[{id:"outbounds",items:u}],picks:[{title:r("ui.device"),value:je("src",t??""),items:c(e.map(e=>p(e.src))).map(({key:e,count:n})=>({id:je("src",e),label:e,desc:d(n,l)}))},{title:r("conn.rule"),value:je("rule",o),items:c(e.map(e=>e.rule_expression)).map(({key:e,count:n})=>({id:je("rule",e),label:e,desc:d(n,l)}))}],visibility:n&&"full"!==n.visibility?r("none"===n.visibility?"conn.visibilityNone":"conn.visibilityPartial"):null}}(Ae,we,ie,Z,z,i,r),[Ae,we,ie,Z,z,i,r]),an=ae(C(de.data?.resources,"groups",{whileLoading:!1})).data,rn=e.useMemo(()=>{const e=function(e,n,t,o,s){return e?{id:e.id,title:e.domain||e.dst||e.id,tone:"blocked"===e.state||"failed"===e.state?"err":"active"===e.state?"ok":"info",status:t("ui.aside",{text:x(j,e.state,t),note:e.network.toUpperCase()}),chain:y(e,t,o),outbound:e.outbound,rule:{expression:e.rule_expression,href:xe(e.rule_id,s)},fields:dn(e,n).map(([e,n])=>[t(e),"string"==typeof n?n:t(n.key,n.params)]),flowQuery:v("",{tab:"records",...e.flow_id?{id:e.flow_id}:{connection_id:e.id}}),traceQuery:e.domain||p(e.dst)?ye({network:"udp"===e.network?"udp":"tcp",domain:e.domain??"",dst_ip:p(e.dst),dst_port:w(e.dst),src_ip:p(e.src),src_port:w(e.src),pname:e.pname??""}):null,source:e.src?p(e.src)??e.src:null,closable:"active"===e.state||"dialing"===e.state||"routing"===e.state,closeReason:"ebpf"===e.observed_by?t("conn.notClosable"):null,stateHelp:pn(e.state,t)}:null}(Be,i,r,be,pe);return e&&{...e,outboundTag:Ce(e.outbound,an,r)}},[Be,i,r,be,pe,an]),cn={...ln,detail:rn},un=e.useMemo(()=>hn(Ie,c,i,be,pe,r),[Ie,c,i,be,pe,r]),bn=e=>{const o=Se(String(e),["src","rule"]);"src"===o?.kind?(T(""),n("connections",wn(t,{src:o.value&&ie!==o.value?o.value:null,q:null}))):"rule"===o?.kind&&$("rule",Z===o.value?"all":o.value)},vn=function(e,n,t){const[o,s]=e.picks,l=(e,n,t,o,s)=>({filter:e,label:n,sections:[{title:n,items:t,value:o}],searchLabel:s});return{active:["all"!==n.network,"all"!==n.out,!!n.src,"all"!==n.rule].filter(Boolean).length,submenus:[l("network",t("ui.network"),e.networks.map(([e,n])=>({id:e,label:n})),n.network),l("out",t("ui.outbound"),e.outbounds,n.out,t("ui.filterOutbounds")),l("src",o.title,[{id:je("src",""),label:t("conn.allDevices")},...o.items],o.value,t("ui.filterDevices")),l("rule",s.title,[{id:je("rule","all"),label:t("conn.allRules")},...s.items],s.value,t("ui.filterRules"))]}}(ln,{network:M,out:z,src:ie,rule:Z},r),yn={network:e=>$("network",e),out:e=>$("out",e),src:bn,rule:bn},xn={active:vn.active,submenus:vn.submenus.map(({filter:e,...n})=>({...n,sections:n.sections.map(n=>({...n,onChange:yn[e]}))}))},jn=e.useCallback(e=>n("connections",v(t,{tab:"list",id:e})),[n,t]);return{...cn,tab:fe,setTab:e=>n("connections",V(t,e,"traffic"===ge?ge:null)),openInList:jn,view:c,updateView:A,collapse:h,toggleCollapse:f,toggleCollapseAll:()=>g($e(!h.allCollapsed)),wide:m,text:L,setText:T,network:M,out:z,sel:X,select:te,collection:un,rows:Le,outboundKeys:Oe,latency:Pe,latencyError:Fe,retryLatency:Me.refetch,setNetwork:e=>$("network",e),setOut:e=>$("out",e),pick:bn,compact:b,filterMenu:xn,columns:ze.map(e=>({id:e.id,label:r(e.label)})),visibleColumns:ze.filter(e=>!c.hidden.includes(e.id)).map(e=>e.id),toggleColumn:e=>{const n=String(e),t=c.hidden.includes(n)?c.hidden.filter(e=>e!==n):[...c.hidden,n];t.length{T(""),n("connections",wn(t,{network:null,out:null,rule:null,q:null,src:null}))},error:ce.error,retry:ce.refetch,loading:ce.loading&&!ce.data,truncated:!!ce.data?.truncated,canClose:ue,canViewFlow:me,closeAll:{confirmationText:Y?.query?r("all"===Y.query.type?"conn.closeAllLive":"tcp"===Y.query.type?"conn.closeAllLiveTcp":"conn.closeAllLiveUdp",ie?{n:Y.count??Y.ids.length,source:ie}:{n:Y.count??Y.ids.length,source:r("conn.anySource")}):r("conn.closeAllHelp",{n:Y?.ids.length??0}),open:!!Y,setOpen:e=>ee(e?"all"!==N.get("scope")||"all"!==M||ie||"all"!==z||"all"!==Z||We?function(e,n){const t=e.map(e=>e.id),o=null!=n.bulkLimit&&t.length>n.bulkLimit;return n.narrowed||n.truncated||o?{ids:t}:{ids:t,query:{type:n.network,src:n.src,all:!0}}}(Ie,{network:M,src:ie,narrowed:"all"!==z||"all"!==Z||!!We,truncated:!!ce.data?.truncated,bulkLimit:de.data?.resources.connections.max_bulk_close}):{ids:[],query:{type:"all",all:!0},count:(ce.data?.total_tcp??0)+(ce.data?.total_udp??0)}:null),isDisabled:!Ie.length||!!he.busy||L!==re,isPending:"all"===he.busy,onConfirm:async()=>{if(Y)try{const e=await he.closeAll(Y);if(!e)return;te(null),H(I(e),r("conn.closedAll",{closed:e.closed,skipped:e.skipped}))}catch(e){return r("ui.valuePair",{label:r("conn.closeFailed"),value:Q(e,r)})}},onAbort:he.cancel},close:{pending:he.busy===Be?.id,disabled:!!he.busy,run:()=>{(async()=>{if(!cn.detail)return;const{id:e}=cn.detail;try{if(!(await he.close(e)))return;new URLSearchParams(ne.current).get("id")===e&&te(null),H("positive",r("conn.closed",{name:cn.detail.title}))}catch(n){n instanceof K&&"state_conflict"===n.code?H("negative",r("conn.notClosable"),{error:n}):H("negative",r("conn.closeFailed"),J(n,r))}})()}},ruleAction:on,showRule:(e=!1)=>{Be?.rule_id&&n("rules",v("",{tab:"list",rule:Be.rule_id,edit:e?Be.rule_id:null}))},canTrace:C(de.data?.resources,"routing_trace",{whileLoading:!1})&&!!cn.detail?.traceQuery,traceConnection:()=>{cn.detail?.traceQuery&&n("rules",cn.detail.traceQuery)},showFlow:()=>{cn.detail&&me&&n("flows",cn.detail.flowQuery)},onlyClient:()=>{cn.detail?.source&&(T(""),n("connections",wn(t,{src:cn.detail.source,q:null})))},canExport:Ie.length>0,export:()=>Ve(He("connections","csv"),function(e,n){return[Ee(["id","target","domain","source","network","state","outbound","chain","rule","upload_bytes","download_bytes","started_at"]),...e.map(e=>Ee([e.id,e.dst,e.domain,e.src,e.network,e.state,e.outbound,_(e.chain,n).join(" > "),e.rule_expression,e.upload_bytes,e.download_bytes,e.started_at]))].join("\n")+"\n"}(Ie,be),"text/csv;charset=utf-8"),detailTitle:cn.detail?.title??"",notInSnapshot:!!X&&!Be&&!!ce.data}}function yn(e){const s=o(),l=vn(e),a=l.detail,r={list:n.jsxs(n.Fragment,{children:[n.jsxs(ue,{page:!0,children:[l.compact?n.jsxs("span",{className:"rp-filter-row",children:[n.jsx(z,{search:!0,label:s("ui.filter"),value:l.text,onChange:l.setText,placeholder:s("conn.filterHint"),className:"rp-filter"}),n.jsx(Z,{label:l.filterMenu.active?s("conn.filtersActive",{n:l.filterMenu.active}):s("conn.filters"),count:l.filterMenu.active,submenus:l.filterMenu.submenus,children:s("conn.filters")})]}):n.jsxs(n.Fragment,{children:[n.jsx(z,{search:!0,label:s("ui.filter"),value:l.text,onChange:l.setText,placeholder:s("conn.filterHint"),className:"rp-filter"}),n.jsx(re,{label:s("ui.network"),value:l.network,onChange:l.setNetwork,items:l.networks}),n.jsx(Ae,{side:!0,label:s("ui.outbound"),searchLabel:s("ui.filterOutbounds"),value:l.out,onChange:l.setOut,sections:l.outboundSections}),n.jsx(Z,{label:s("conn.pick"),sections:l.picks,onAction:l.pick,searchLabel:s("conn.filterPick"),children:s("conn.pick")})]}),n.jsx(ie,{label:s("conn.group"),side:!0,value:l.view.group,onChange:e=>l.updateView({group:e}),items:[{id:"source",label:s("conn.byClient")},{id:"outbound",label:s("ui.outbound")},{id:"none",label:s("conn.ungrouped")}]}),"none"!==l.view.group&&n.jsx(b,{onPress:l.toggleCollapseAll,children:s(l.collapse.allCollapsed?"conn.expandAll":"conn.collapseAll")}),n.jsx(Z,{label:s("conn.columns"),selectionMode:"multiple",items:l.columns,value:l.visibleColumns,onAction:l.toggleColumn,children:s("conn.columns")}),l.filtered&&n.jsx(b,{quiet:!0,onPress:l.clear,children:s("ui.clearFilters")}),l.truncated&&n.jsx(h,{tone:"warn",children:s("conn.truncated")}),l.visibility&&n.jsx(f,{text:s("conn.visibilityNote"),children:n.jsx(h,{children:l.visibility})}),n.jsx("span",{className:"rp-grow"}),l.canClose&&n.jsx($,{label:s("conn.closeAll"),...l.closeAll}),n.jsxs(b,{isDisabled:!l.canExport,onPress:l.export,children:[n.jsx(me,{}),s("conn.export")]})]}),n.jsxs("div",{className:"rp-with-panel","data-open":a?"":void 0,children:[n.jsx(an,{collection:l.collection,loading:l.loading,selected:l.sel,onSelect:l.select,selectOnFocus:l.wide,view:l.view,collapse:l.collapse,onToggleGroup:l.toggleCollapse,onSort:e=>l.updateView({sort:e}),rule:l.ruleAction.row}),n.jsx(X,{open:!!a,title:l.detailTitle,onClose:()=>l.select(null),children:a&&n.jsxs(n.Fragment,{children:[n.jsx(Y,{help:a.stateHelp,children:n.jsx(ee,{small:!0,tone:a.tone,children:a.status})}),n.jsxs("div",{className:"rp-cluster",children:[l.ruleAction.canAdd&&n.jsx(b,{onPress:l.ruleAction.openAdd,children:s("rule.add")}),n.jsx(ce,{actions:[...l.ruleAction.canShow?[{id:"show-rule",label:s("conn.showRule"),onAction:()=>l.showRule()}]:[],...l.ruleAction.canEdit?[{id:"edit-rule",label:s("conn.editRule"),onAction:()=>l.showRule(!0)}]:[],...l.canViewFlow?[{id:"view-flow",label:s("conn.viewFlow"),onAction:l.showFlow}]:[],...l.canTrace?[{id:"trace",label:s("conn.trace"),onAction:l.traceConnection}]:[],...a.source?[{id:"only-client",label:s("conn.onlyThisClient"),onAction:l.onlyClient}]:[],...l.canClose&&a.closable?[{id:"close",label:s("conn.close"),negative:!0,isPending:l.close.pending,isDisabled:l.close.disabled||!!a.closeReason,reason:a.closeReason??void 0,onAction:l.close.run}]:[]]})]}),n.jsx(ne,{items:a.fields}),n.jsx(ne,{items:[[s("ui.outbound"),n.jsx(t,{...a.outboundTag})],[s("conn.chain"),a.chain]]}),n.jsxs("div",{className:"rp-list",children:[n.jsx("span",{className:"rp-label",children:s("conn.rule")}),n.jsx(te,{...a.rule})]})]})})]}),l.notInSnapshot&&n.jsx("span",{className:"rp-label",children:s("conn.notInSnapshot")}),n.jsx(We,{dialog:l.ruleAction.dialog})]}),traffic:n.jsx(Ke,{records:l.rows,outbounds:l.outboundKeys,latency:l.latency,latencyError:l.latencyError,retryLatency:l.retryLatency,truncated:l.truncated,onSelect:l.openInList})};return n.jsxs("div",{className:"rp-page",children:[l.error&&n.jsx(c,{error:l.error,onRetry:l.retry}),n.jsx(de,{page:!0,keepMounted:!0,label:s("nav.connections"),value:l.tab,onChange:l.setTab,items:Be().map(e=>({id:e.id,label:s(e.titleKey),content:r[e.id]}))})]})}export{yn as Connections}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Connections-ZaWxL_iR.js b/luci-app-honk/root/etc/honk/doona/assets/Connections-ZaWxL_iR.js deleted file mode 100644 index 807c93bc2..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Connections-ZaWxL_iR.js +++ /dev/null @@ -1,3 +0,0 @@ -import{j as o,r as x}from"./vendor-react-Bf71BWbF.js";import{aT as hn,aU as fn,aV as ue,aW as le,u as J,aI as Ue,a6 as he,a as fe,av as X,aX as K,aY as gn,aM as Ve,aZ as xn,aN as pe,E as Qe,a5 as se,a_ as wn,a$ as vn,Z as F,b0 as Q,b1 as yn,b2 as Ce,a0 as ae,b3 as Ke,a2 as jn,a4 as ge,b4 as xe,b5 as Je,b6 as me,aw as _n,b7 as kn,b8 as Cn,b9 as An,aB as Ae,ba as Nn,bb as Ge,aO as be,aL as oe,bc as Mn,bd as Ln,aa as Ye,ac as E,ag as Sn,be as Tn,bf as Rn,f as Ne,bg as Pn,Y as Fn,ab as Dn,bh as Wn,bi as In,a1 as On,ad as En,bj as Bn,bk as Ze,bl as Hn,bm as te,bn as Un,b as Vn,bo as Qn,bp as Kn,A as Jn,bq as Gn,T as Me,br as re,bs as Yn,bt as Le,B as Z,bu as Zn,bv as qn,bw as Xn,aJ as $n,aK as Se,bx as zn}from"./index-BOpK0UVB.js";import{M as et}from"./ActionGroup-BU73NzbX.js";import{F as nt}from"./FactStrip-CPXeRki4.js";import{B as tt,r as ot}from"./ranked-DDCHUGeL.js";import{u as st,C as at,s as Te,a as lt,p as Re}from"./layout-Bzzn7HLw.js";import{D as it}from"./Table-BkehX7fw.js";import{T as ct}from"./TimeCell-COfj2dEh.js";import{w as Pe}from"./labels-Bgu_ZhL8.js";import{c as Fe,d as rt,e as dt}from"./files-BxEOxSF8.js";import{u as ut,R as pt}from"./useQuickRule-qFvcUoSC.js";import{u as mt}from"./outbounds-BVwoUbXQ.js";import{u as bt}from"./flows-BW6GjUpE.js";import{c as qe}from"./nav-Wiib71Wo.js";import"./useGridSelectionCheckbox-C4VxQajJ.js";import"./Virtualizer-BIsXGNLZ.js";import"./ListLayout-CkBMjK9o.js";import"./DaeCode-B8yPDjSE.js";const O=64,ht=22,V=8,ft=28;function gt({label:n,series:t,fmt:e,onSelect:s,regions:r,height:d=260}){const l=hn(),[a,c]=fn(),{ref:u,tip:b,show:g,hide:p}=st(),w=Math.max(1,...t.flatMap(h=>h.points.flatMap(S=>[S.x,S.y]))),{end:_,ticks:v}=lt(w),m=Math.max((c??0)-O-ft,1),C=d-V-ht,y=h=>O+Te(h,_)*m,j=h=>V+(1-Te(h,_))*C,N=new Map,G=t.flatMap(h=>h.points.map(S=>{const A=y(S.x),k=j(S.y),M=A+","+k,D=N.get(M)??0;return N.set(M,D+1),{point:S,color:h.color,cx:A,cy:k,nth:D,spot:M}})).map(h=>({...h,twins:N.get(h.spot)}));return o.jsx("div",{className:"rp-scatter",ref:a,children:o.jsxs("div",{className:"rp-chart-hover",ref:u,onPointerLeave:p,children:[c!==null&&o.jsxs("svg",{width:c,height:d,role:"img","aria-label":n,"aria-describedby":l,children:[v.map(h=>o.jsxs("g",{children:[o.jsx("line",{className:"grid",x1:y(h),x2:y(h),y1:V,y2:V+C}),o.jsx("line",{className:"grid",x1:O,x2:O+m,y1:j(h),y2:j(h)}),o.jsx("text",{className:"tick",x:y(h),y:d-6,textAnchor:"middle",children:e(h)}),o.jsx("text",{className:"tick",x:O-8,y:j(h)+4,textAnchor:"end",children:e(h)})]},h)),r&&o.jsxs("g",{className:"diagonal",children:[o.jsx("line",{x1:y(0),y1:j(0),x2:y(_),y2:j(_)}),o.jsx("text",{x:O+8,y:V+14,children:r.above}),o.jsx("text",{x:O+m-8,y:V+C-8,textAnchor:"end",children:r.below})]}),G.map(({point:h,color:S,cx:A,cy:k,nth:M,twins:D})=>{const W=2*Math.PI*M/D,Y=D>1?6:0;return o.jsx("circle",{className:s?"pick":void 0,cx:A+Y*Math.cos(W),cy:k+Y*Math.sin(W),r:5,fill:S,onClick:s?()=>s(h.id):void 0,onPointerMove:R=>g(R,[h.name,h.detail])},h.id)})]}),o.jsx(at,{tip:b})]})})}function xt({series:n}){return o.jsx("div",{className:"rp-legend",children:n.map(t=>o.jsx(ue,{swatch:t.color,label:t.label,value:String(t.points.length)},t.id))})}function wt(n,t){const e=new Map;let s=0;for(const a of n){if(a.upload_bytes===null||a.download_bytes===null){s++;continue}const c={id:a.id,up:Number(a.upload_bytes),down:Number(a.download_bytes),name:a.domain||a.dst||a.id},u=e.get(a.outbound);u?u.push(c):e.set(a.outbound,[c])}const r=[...e].map(([a,c])=>({outbound:a,points:c})).sort((a,c)=>le(t)(a.outbound??"",c.outbound??""));let d,l=-1n;for(const a of n){if(a.upload_bytes===null||a.download_bytes===null)continue;const c=BigInt(a.upload_bytes)+BigInt(a.download_bytes);c>l&&(l=c,d={id:a.id,up:Number(a.upload_bytes),down:Number(a.download_bytes),name:a.domain||a.dst||a.id,outbound:a.outbound})}return{series:r,unknown:s,heaviest:d,placed:n.length-s}}const De=[0,2,3,1,4,5,6,7],vt=x.memo(function({records:t,outbounds:e,latency:s,latencyError:r,retryLatency:d,truncated:l,onSelect:a}){const c=J(),u=Ue(),b=he[fe()],g=x.useCallback(m=>X(m,b),[b]),p=x.useMemo(()=>wt(t,b),[t,b]),w=x.useMemo(()=>{const m=e.filter(y=>y!=="block"),C=y=>y==="block"?u.negative:u.cat[De[Math.max(0,m.indexOf(y))%De.length]];return p.series.map(y=>({id:y.outbound??"",label:K(y.outbound,c),color:C(y.outbound),points:y.points.map(j=>({id:j.id,x:j.up,y:j.down,name:j.name,detail:c("conn.chart.point",{download:g(j.down),upload:g(j.up)})}))}))},[p,e,u,c,g]),_=p.heaviest?[{label:c("conn.chart.busiest"),icon:o.jsx(gn,{}),tint:"c3",value:p.heaviest.name,caption:K(p.heaviest.outbound,c)},{label:c("conn.chart.down"),value:g(p.heaviest.down),icon:o.jsx(Ve,{}),tint:"c1"},{label:c("conn.chart.up"),value:g(p.heaviest.up),icon:o.jsx(xn,{}),tint:"c4"}]:[],v=p.unknown?c("conn.chart.sampleUnknown",{n:t.length,unknown:p.unknown}):c("conn.chart.sample",{n:t.length});return o.jsxs("div",{className:"rp-chart-page",children:[o.jsx(nt,{facts:_,lead:!0}),o.jsxs(pe,{title:c("conn.chart.title"),note:v,children:[l&&o.jsx("p",{className:"rp-note",children:c("conn.truncated")}),p.placed>0&&o.jsxs(o.Fragment,{children:[o.jsx(gt,{label:c("conn.chart.title"),series:w,fmt:g,onSelect:a,regions:{above:c("conn.chart.moreDown"),below:c("conn.chart.moreUp")}}),o.jsx(xt,{series:w}),o.jsx("p",{className:"rp-note",children:c("conn.chart.hint")})]})]}),s?o.jsx(yt,{latency:s}):r&&o.jsx(pe,{title:c("ui.nodeLatency"),children:o.jsx(Qe,{error:r,onRetry:d})})]})});function yt({latency:n}){const t=J(),e=Ue(),s=l=>wn(l,t),r=he[fe()],d=l=>!n.chains||l?e.cat[0]:e.muted;return o.jsx(pe,{title:t("ui.nodeLatency"),note:t("conn.latency.sample",{n:n.samples.length,missing:n.missing}),children:n.samples.length?o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"rp-note",children:t("conn.latency.percentiles",{p50:s(n.p50),p90:s(n.p90)})}),n.weightedP50!==null&&o.jsx("p",{className:"rp-note",children:n.unplaced?t("conn.latency.weightedUnplaced",{p50:s(n.weightedP50),n:n.unplaced}):t("conn.latency.weighted",{p50:s(n.weightedP50)})}),o.jsx(tt,{label:t("ui.nodeLatency"),points:n.samples.map(l=>({id:l.node,value:l.value,color:d(l.connections>0),lines:[l.name,s(l.value),...l.connections?[t("conn.chart.sample",{n:l.connections})]:[]]})),fmt:s}),n.chains&&o.jsxs("div",{className:"rp-legend",children:[o.jsx(ue,{swatch:d(!0),label:t("conn.latency.inUse"),value:se(n.used,r)}),o.jsx(ue,{swatch:d(!1),label:t("conn.latency.others"),value:se(n.samples.length-n.used,r)})]}),o.jsx("p",{className:"rp-note",children:t("conn.latency.hint")})]}):o.jsx("p",{className:"rp-note",children:t("conn.latency.pending")})})}const We={userspace:"conn.observed.userspace",ebpf:"conn.observed.ebpf",mixed:"conn.observed.mixed"},Ie={evaluation:"conn.chainSource.evaluation",reconstructed:"conn.chainSource.reconstructed",unknown:"ui.unknown"};function jt(n,t){const e=n.chain_source?[["conn.f.chainSource",Ie[n.chain_source]?{key:Ie[n.chain_source]}:n.chain_source]]:[];return[["ui.device",n.src??"—"],["conn.f.dst",n.dst??"—"],["ui.domain",n.domain??"—"],["conn.f.ingress",Pe(n.ingress)],["conn.f.domainSource",Pe(n.domain_source)],...e,["ui.process",n.pname??"—"],["conn.f.observedBy",We[n.observed_by]?{key:We[n.observed_by]}:n.observed_by],["ui.upload",X(n.upload_bytes,t)],["ui.download",X(n.download_bytes,t)],["conn.f.uploadRate",me(n.upload_bytes_per_second,t)],["conn.f.downloadRate",me(n.download_bytes_per_second,t)],["conn.f.started",_n(n.started_at,t)]]}const B=[{id:"dst",label:"ui.target",minWidth:200,sortable:!0},{id:"src",label:"ui.device",minWidth:128,sortable:!0,drop:5},{id:"node",label:"conn.node",minWidth:120,drop:3},{id:"rule",label:"conn.rule",minWidth:220,drop:2},{id:"state",label:"ui.state",minWidth:88,sortable:!0,drop:7},{id:"down",label:"ui.download",minWidth:96,align:"end",sortable:!0,drop:4},{id:"downRate",label:"conn.f.downloadRate",minWidth:128,align:"end",sortable:!0,drop:1},{id:"age",label:"ui.started",minWidth:132,align:"end",sortable:!0,drop:6}],Oe=vn.connectionsView,de=n=>({allCollapsed:n,exceptions:new Set}),Xe=(n,t)=>n.allCollapsed!==n.exceptions.has(t);function $e(n,t){const e=new Set(n.exceptions);return e.delete(t)||e.add(t),{allCollapsed:n.allCollapsed,exceptions:e}}const _t=(n,t)=>Xe(n,t)?$e(n,t):n,ze=(n,t)=>t==="source"?F(n.src??void 0)??n.src??"—":n.outbound??"unknown",kt=(n,t,e)=>t==="source"?n:K(n,e),Ct=n=>"g:"+n,we=n=>n.startsWith("g:")||n.startsWith("\\")?"\\"+n:n,At=n=>n.startsWith("\\")?n.slice(1):n;function Nt(n,t){if(!n||t==="none")return null;const e=ze(n,t);return{group:e,token:JSON.stringify([n.id,t,e])}}function Ee(n){const t={hidden:[],sort:null,group:"source"};try{const e=JSON.parse(n??"null");if(!e||typeof e!="object")return t;const s=Array.isArray(e.hidden)?e.hidden.map(l=>l==="chain"?"node":l):[],r=B.filter(l=>s.includes(l.id)).map(l=>l.id),d=e.sort;return{hidden:r.length===B.length?[]:r,sort:d&&B.some(l=>l.sortable&&l.id===d.column)&&["ascending","descending"].includes(d.direction)?{column:d.column,direction:d.direction}:null,group:e.group==="none"||e.group==="outbound"?e.group:"source"}}catch{return t}}function Mt(n,t,e){return n.map(s=>({item:s,key:t(s)})).sort((s,r)=>e(s.key,r.key)).map(s=>s.item)}function Lt(n,t,e,s){let r=n;if(t.sort){const{column:l,direction:a}=t.sort,c=le(e);r=Mt(n,b=>{switch(l){case"dst":return b.domain||b.dst;case"src":return b.src;case"state":return ge(xe,b.state,s);case"down":return Ae(b.download_bytes);case"downRate":return Ae(b.download_bytes_per_second);case"age":return b.started_at?Date.parse(b.started_at):null;default:return null}},(b,g)=>{if(b==null)return g==null?0:1;if(g==null)return-1;const p=typeof b=="string"&&typeof g=="string"?c(b,g):bg?1:0;return a==="descending"?-p:p})}if(t.group==="none")return r.map(l=>({id:we(l.id),connection:l}));const d=new Map;for(const l of r){const a=ze(l,t.group),c=d.get(a);c?c.push(l):d.set(a,[l])}return[...d].map(([l,a])=>({id:Ct(l),group:l,children:a,active:a.filter(c=>c.state==="active").length,download:kn(...a.map(c=>c.download_bytes))}))}const Be=new WeakMap;function St(n,t,e,s,r,d){const l=a=>{const c=Be.get(a);if(c&&c.locale===e&&c.names===s&&c.rulesListed===r&&c.t===d)return c.row;const u={id:we(a.id),target:a.domain||a.dst||"—",source:a.src??"—",node:An(a,d,s),path:Cn(a,d,s),rule:{expression:a.rule_expression,href:Ke(a.rule_id,r)},recomputed:a.rule_source==="recomputed"?d("conn.recomputed"):null,state:ge(xe,a.state,d),download:X(a.download_bytes,e),downloadRate:me(a.download_bytes_per_second,e),startedAt:a.started_at};return Be.set(a,{locale:e,names:s,rulesListed:r,t:d,row:u}),u};return Lt(n,t,e,d).map(a=>"connection"in a?{id:a.id,connection:l(a.connection)}:{id:a.id,group:a.group,children:a.children.map(l),label:d("conn.groupCount",{name:kt(a.group,t.group,d),n:a.children.length}),totals:{down:X(a.download,e),state:d("conn.activeCount",{n:a.active})}})}function Tt(n,t,e,s,r,d,l){const a=new Set(n.flatMap(u=>u.outbound?[u.outbound]:[]));r!=="all"&&a.add(r);const c=u=>{const b=u.flatMap(g=>g?[g]:[]);return ot(b,12).top};return{networks:[["all",l("ui.allCount",{n:n.length})],["tcp",l("ui.tcp")],["udp",l("ui.udp")]],outbounds:[{id:"all",label:l("conn.allOutbounds")},...[...a].map(u=>({id:u,label:K(u,l)}))],picks:[{title:l("ui.device"),value:Q("src",e??""),items:c(n.map(u=>F(u.src))).map(({key:u,count:b})=>({id:Q("src",u),label:u,desc:se(b,d)}))},{title:l("conn.rule"),value:Q("rule",s),items:c(n.map(u=>u.rule_expression)).map(({key:u,count:b})=>({id:Q("rule",u),label:u,desc:se(b,d)}))}],visibility:t&&t.visibility!=="full"?l(t.visibility==="none"?"conn.visibilityNone":"conn.visibilityPartial"):null}}function Rt(n,t,e){const[s,r]=n.picks,d=(l,a,c,u)=>({filter:l,label:a,sections:[{title:a,items:c,value:u}]});return{active:[t.network!=="all",t.out!=="all",!!t.src,t.rule!=="all"].filter(Boolean).length,submenus:[d("network",e("ui.network"),n.networks.map(([l,a])=>({id:l,label:a})),t.network),d("out",e("ui.outbound"),n.outbounds,t.out),d("src",s.title,[{id:Q("src",""),label:e("conn.allDevices")},...s.items],s.value),d("rule",r.title,[{id:Q("rule","all"),label:e("conn.allRules")},...r.items],r.value)]}}const He={observed:["conn.state.observed","conn.stateHelp.observed"],routing:["conn.state.routing","conn.stateHelp.routing"],dialing:["conn.state.dialing","conn.stateHelp.dialing"]};function Pt(n,t){return Object.hasOwn(He,n)?{title:t("ui.state"),text:Object.values(He).map(([e,s])=>t("ui.valuePair",{label:t(e),value:t(s)}))}:null}function Ft(n,t,e,s,r){return n?{id:n.id,title:n.domain||n.dst||n.id,tone:n.state==="blocked"||n.state==="failed"?"err":n.state==="active"?"ok":"info",status:e("ui.aside",{text:ge(xe,n.state,e),note:n.network.toUpperCase()}),chain:jn(n,e,s),outbound:K(n.outbound,e),rule:{expression:n.rule_expression,href:Ke(n.rule_id,r)},fields:jt(n,t).map(([d,l])=>[e(d),typeof l=="string"?l:e(l.key,l.params)]),flowQuery:ae("",{tab:"records",...n.flow_id?{id:n.flow_id}:{connection_id:n.id}}),traceQuery:n.domain||F(n.dst)?yn({network:n.network==="udp"?"udp":"tcp",domain:n.domain??"",dst_ip:F(n.dst),dst_port:Ce(n.dst),src_ip:F(n.src),src_port:Ce(n.src),pname:n.pname??""}):null,source:n.src?F(n.src)??n.src:null,closable:n.state==="active"||n.state==="dialing"||n.state==="routing",closeReason:n.observed_by==="ebpf"?e("conn.notClosable"):null,stateHelp:Pt(n.state,e)}:null}function Dt(n,t){return[Fe(["id","target","domain","source","network","state","outbound","chain","rule","upload_bytes","download_bytes","started_at"]),...n.map(e=>Fe([e.id,e.dst,e.domain,e.src,e.network,e.state,e.outbound,Je(e.chain,t).join(" > "),e.rule_expression,e.upload_bytes,e.download_bytes,e.started_at]))].join(` -`)+` -`}function Wt(n,t){const e=n.map(r=>r.id),s=t.bulkLimit!=null&&e.length>t.bulkLimit;return t.narrowed||t.truncated||s?{ids:e}:{ids:e,query:{type:t.network,src:t.src,all:!0}}}const It=n=>n.target;function Ot({collection:n,view:t,collapse:e,onToggleGroup:s,loading:r,selected:d,onSelect:l,selectOnFocus:a,onSort:c}){const u=J(),[b,g]=Nn(442),p=x.useMemo(()=>{const v={dst:m=>o.jsx(oe,{children:m.target}),src:m=>o.jsx(oe,{className:"rp-code",children:m.source}),node:m=>o.jsx(oe,{className:"rp-chain",text:m.path??void 0,children:m.node}),rule:m=>o.jsxs("span",{className:"rp-rule",children:[o.jsx(Ge,{...m.rule}),m.recomputed&&o.jsx(be,{children:m.recomputed})]}),state:m=>m.state,down:m=>m.download,downRate:m=>m.downloadRate,age:m=>o.jsx(ct,{at:m.startedAt})};return B.filter(m=>!t.hidden.includes(m.id)).map(m=>({...m,label:u(m.label),grow:1,render:v[m.id]}))},[t.hidden,u]),w=x.useMemo(()=>n.map(v=>"connection"in v?v.connection:v),[n]),_=x.useMemo(()=>({grouped:t.group!=="none",collapsed:v=>Xe(e,v),onToggle:s}),[t.group,e,s]);return o.jsx("div",{ref:b,children:o.jsx(it,{label:u("nav.connections"),rowDetail:!0,cols:p,rows:w,height:g,selected:d&&we(d),onSelect:l&&(v=>l(v&&At(v))),selectOnFocus:a,reveal:!0,empty:u("conn.empty"),loading:r,sort:t.sort&&{column:String(t.sort.column),direction:t.sort.direction},onSort:c,getTextValue:It,stream:!0,tree:_})})}function Et(n,t,e){if(!t.some(p=>p.health?.length))return null;const s=[];let r=0;for(const p of t){const w=Mn(Ln(p.health??[]));w===void 0?r++:s.push({node:p.id,name:p.name,value:w,connections:0})}s.sort((p,w)=>p.value-w.value||le(e)(p.name,w.name));const d=new Map(s.map(p=>[p.node,p])),l=n.some(p=>p.chain?.length);let a=0;for(const p of n){const w=p.chain?.at(-1);if(w===void 0)continue;const _=d.get(w);_?_.connections++:a++}const c=s.reduce((p,w)=>p+w.connections,0);let u=0;const b=s.find(p=>(u+=p.connections)>=Math.max(1,Math.ceil(c/2))),g=s.map(p=>p.value);return{samples:s,chains:l,missing:r,unplaced:a,used:s.filter(p=>p.connections).length,p50:Re(g,50),p90:Re(g,90),weightedP50:c?b.value:null}}const Bt=n=>({domain:n.domain??null,dip:F(n.dst)??null,sip:F(n.src)??null,outbound:n.outbound,matched:n.rule_id&&n.rule_source!=="unknown"?{id:n.rule_id,expression:n.rule_expression}:null});function Ht(n,t){const e=J(),s=Ye().data?.resources,r=ut(t),l=E(s,"rules",{whileLoading:!1})&&E(s,"config",{whileLoading:!1})&&s?.config.writable===!0?n?.rule_id??null:null,a=bt(!!l),c=Sn(!!l),u=n&&Bt(n);return{canAdd:!!u&&r.canAdd(u),addTip:u?Rn(u).length?void 0:e("conn.ruleNoTarget"):e("ui.selectRow"),canShow:E(s,"rules",{whileLoading:!1})&&!!n?.rule_id,canEdit:!!l&&Tn(a.data?.rules.find(b=>b.rule_id===l),c.data?.sources??[]),openAdd:()=>{u&&r.open(u)},dialog:r.dialog}}const en=qe().map(n=>n.id),nn=n=>["id","src","network","out","rule","q"].some(t=>new URLSearchParams(n).has(t))?"list":"traffic",q=(n,t)=>ae(n,nn(n)==="list"?{tab:Ze(n,en,"list"),...t}:t);function Ut({go:n,query:t}){const e=J(),s=he[fe()],[r,d]=x.useState(()=>{try{return Ee(localStorage.getItem(Oe))}catch{return Ee(null)}}),l=Ne(Kn),a=Ne(Qn),[c,u]=x.useState(()=>de(!1)),b=x.useCallback(i=>u(f=>$e(f,i)),[]),g=i=>{const f={...r,...i};f.group!==r.group&&u(de(!1)),d(f);try{localStorage.setItem(Oe,JSON.stringify(f))}catch{}},p=x.useMemo(()=>new URLSearchParams(t),[t]),[w,_]=x.useState(p.get("q")??""),v=p.get("network")??"all",m=p.get("out")??"all",C=p.get("rule")??"all",y=(i,f)=>n("connections",q(t,{[i]:f==="all"?null:f})),j=p.get("id"),[N,ve]=x.useState(null);Pn(p.get("q"),i=>_(i??""));const G=x.useRef(t);x.useEffect(()=>{G.current=t});const h=i=>n("connections",q(G.current,{id:i})),S=x.useDeferredValue(w),A=Fn(p.get("src")??""),k=Dn(A),M=Ye(),D=M.data?.resources.connections.can_close===!0,W=E(M.data?.resources,"rules",{whileLoading:!1}),Y=E(M.data?.resources,"flows",{whileLoading:!1});Wn(M.data?.resources);const R=mt(),I=In(k.refetch),T=x.useMemo(()=>On(k.data),[k.data]),$=E(M.data?.resources,"nodes",{whileLoading:!1}),H=En($),tn=x.useMemo(()=>$&&H.data?Et(T,H.data,s):null,[$,H.data,T,s]),on=$&&!H.data?H.error:null,sn=x.useMemo(()=>[...new Set(T.map(i=>i.outbound))].sort((i,f)=>le(s)(i??"",f??"")),[T,s]),z=S.trim().toLowerCase(),U=x.useMemo(()=>T.filter(i=>(v==="all"||i.network===v)&&(m==="all"||i.outbound===m)&&(C==="all"||i.rule_expression===C)&&(!z||[i.dst,i.domain,i.src,i.pname,K(i.outbound,e),Je(i.chain,R).join(" "),i.rule_expression].join(" ").toLowerCase().includes(z))),[T,v,m,C,z,R,e]),P=j?T.find(i=>i.id===j):void 0,[ye,je]=x.useState(null);!j&&ye!==null&&je(null);const ee=Nt(P,r.group);ee&&ye!==ee.token&&(je(ee.token),u(_t(c,ee.group)));const an=Ht(P,n),_e=x.useMemo(()=>Tt(T,k.data,A,C,m,s,e),[T,k.data,A,C,m,s,e]),ln=x.useMemo(()=>Ft(P,s,e,R,W),[P,s,e,R,W]),L={..._e,detail:ln},cn=x.useMemo(()=>St(U,r,s,R,W,e),[U,r,s,R,W,e]),rn=async()=>{if(!L.detail)return;const{id:i}=L.detail;try{if(!await I.close(i))return;new URLSearchParams(G.current).get("id")===i&&h(null),te("positive",e("conn.closed",{name:L.detail.title}))}catch(f){f instanceof Jn&&f.code==="state_conflict"?te("negative",e("conn.notClosable")):te("negative",e("conn.closeFailed"),Gn(f,e))}},dn=async()=>{if(N)try{const i=await I.closeAll(N);if(!i)return;h(null),te(Un(i),e("conn.closedAll",{closed:i.closed,skipped:i.skipped}))}catch(i){return e("ui.valuePair",{label:e("conn.closeFailed"),value:Vn(i,e)})}},ie=i=>{const f=Hn(String(i),["src","rule"]);f?.kind==="src"?(_(""),n("connections",q(t,{src:!f.value||A===f.value?null:f.value,q:null}))):f?.kind==="rule"&&y("rule",C===f.value?"all":f.value)},ke=Rt(_e,{network:v,out:m,src:A,rule:C},e),un={network:i=>y("network",i),out:i=>y("out",i),src:ie,rule:ie},pn={active:ke.active,submenus:ke.submenus.map(({filter:i,...f})=>({...f,sections:f.sections.map(ne=>({...ne,onChange:un[i]}))}))},ce=nn(t),mn=x.useCallback(i=>n("connections",ae(t,{tab:"list",id:i})),[n,t]);return{...L,tab:Ze(t,en,ce),setTab:i=>n("connections",Bn(t,i,ce==="traffic"?ce:null)),openInList:mn,view:r,updateView:g,collapse:c,toggleCollapse:b,toggleCollapseAll:()=>u(de(!c.allCollapsed)),wide:l,text:w,setText:_,network:v,out:m,sel:j,select:h,collection:cn,rows:T,outboundKeys:sn,latency:tn,latencyError:on,retryLatency:H.refetch,setNetwork:i=>y("network",i),setOut:i=>y("out",i),pick:ie,compact:a,filterMenu:pn,columns:B.map(i=>({id:i.id,label:e(i.label)})),visibleColumns:B.filter(i=>!r.hidden.includes(i.id)).map(i=>i.id),toggleColumn:i=>{const f=String(i),ne=r.hidden.includes(f)?r.hidden.filter(bn=>bn!==f):[...r.hidden,f];ne.length{_(""),n("connections",q(t,{network:null,out:null,rule:null,q:null,src:null}))},error:k.error,retry:k.refetch,loading:k.loading&&!k.data,truncated:!!k.data?.truncated,canClose:D,canViewFlow:Y,closeAll:{confirmationText:N?.query?e(N.query.type==="all"?"conn.closeAllLive":N.query.type==="tcp"?"conn.closeAllLiveTcp":"conn.closeAllLiveUdp",A?{n:N.ids.length,source:A}:{n:N.ids.length,source:e("conn.anySource")}):e("conn.closeAllHelp",{n:N?.ids.length??0}),open:!!N,setOpen:i=>ve(i?Wt(U,{network:v,src:A,narrowed:m!=="all"||C!=="all"||!!z,truncated:!!k.data?.truncated,bulkLimit:M.data?.resources.connections.max_bulk_close}):null),isDisabled:!U.length||!!I.busy||w!==S,isPending:I.busy==="all",onConfirm:dn,onAbort:I.cancel},close:{pending:I.busy===P?.id,disabled:!!I.busy,run:()=>void rn()},ruleAction:an,showRule:(i=!1)=>{P?.rule_id&&n("rules",ae("",{tab:"list",rule:P.rule_id,edit:i?P.rule_id:null}))},canTrace:E(M.data?.resources,"routing_trace",{whileLoading:!1})&&!!L.detail?.traceQuery,traceConnection:()=>{L.detail?.traceQuery&&n("rules",L.detail.traceQuery)},showFlow:()=>{L.detail&&Y&&n("flows",L.detail.flowQuery)},onlyClient:()=>{L.detail?.source&&(_(""),n("connections",q(t,{src:L.detail.source,q:null})))},canExport:U.length>0,export:()=>rt(dt("connections","csv"),Dt(U,R),"text/csv;charset=utf-8"),detailTitle:L.detail?.title??"",notInSnapshot:!!j&&!P&&!!k.data}}function io(n){const t=J(),e=Ut(n),s=e.detail,d={list:o.jsxs(o.Fragment,{children:[e.error&&o.jsx(Qe,{error:e.error,onRetry:e.retry}),o.jsxs("div",{className:"rp-toolbar",children:[e.compact?o.jsxs("span",{className:"rp-filter-row",children:[o.jsx(Me,{search:!0,label:t("ui.filter"),value:e.text,onChange:e.setText,placeholder:t("conn.filterHint"),className:"rp-filter"}),o.jsx(re,{label:e.filterMenu.active?t("conn.filtersActive",{n:e.filterMenu.active}):t("conn.filters"),count:e.filterMenu.active,submenus:e.filterMenu.submenus,children:t("conn.filters")})]}):o.jsxs(o.Fragment,{children:[o.jsx(Me,{search:!0,label:t("ui.filter"),value:e.text,onChange:e.setText,placeholder:t("conn.filterHint"),className:"rp-filter"}),o.jsx(Yn,{label:t("ui.network"),value:e.network,onChange:e.setNetwork,items:e.networks}),o.jsx(Le,{label:t("ui.outbound"),side:!0,value:e.out,onChange:e.setOut,items:e.outbounds}),o.jsx(re,{quiet:!0,label:t("conn.pick"),sections:e.picks,onAction:e.pick,children:t("conn.pick")})]}),o.jsx(Le,{label:t("conn.group"),side:!0,value:e.view.group,onChange:l=>e.updateView({group:l}),items:[{id:"source",label:t("conn.byClient")},{id:"outbound",label:t("ui.outbound")},{id:"none",label:t("conn.ungrouped")}]}),e.view.group!=="none"&&o.jsx(Z,{onPress:e.toggleCollapseAll,children:t(e.collapse.allCollapsed?"conn.expandAll":"conn.collapseAll")}),o.jsx(re,{label:t("conn.columns"),selectionMode:"multiple",items:e.columns,value:e.visibleColumns,onAction:e.toggleColumn,children:t("conn.columns")}),e.filtered&&o.jsx(Z,{quiet:!0,onPress:e.clear,children:t("ui.clearFilters")}),e.truncated&&o.jsx(be,{tone:"warn",children:t("conn.truncated")}),e.visibility&&o.jsx(oe,{text:t("conn.visibilityNote"),children:o.jsx(be,{children:e.visibility})}),o.jsx("span",{className:"rp-grow"}),o.jsx(Z,{isDisabled:!e.ruleAction.canAdd,tip:e.ruleAction.addTip,onPress:e.ruleAction.openAdd,children:t("rule.add")}),e.canClose&&o.jsx(Zn,{label:t("conn.closeAll"),...e.closeAll}),o.jsxs(Z,{isDisabled:!e.canExport,onPress:e.export,children:[o.jsx(Ve,{}),t("conn.export")]})]}),o.jsxs("div",{className:"rp-with-panel","data-open":s?"":void 0,children:[o.jsx(Ot,{collection:e.collection,loading:e.loading,selected:e.sel,onSelect:e.select,selectOnFocus:e.wide,view:e.view,collapse:e.collapse,onToggleGroup:e.toggleCollapse,onSort:l=>e.updateView({sort:l})}),o.jsx(qn,{open:!!s,title:e.detailTitle,onClose:()=>e.select(null),children:s&&o.jsxs(o.Fragment,{children:[o.jsx(Xn,{help:s.stateHelp,children:o.jsx($n,{small:!0,tone:s.tone,children:s.status})}),o.jsxs("div",{className:"rp-cluster",children:[e.ruleAction.canAdd&&o.jsx(Z,{onPress:e.ruleAction.openAdd,children:t("rule.add")}),o.jsx(et,{actions:[...e.ruleAction.canShow?[{id:"show-rule",label:t("conn.showRule"),onAction:()=>e.showRule()}]:[],...e.ruleAction.canEdit?[{id:"edit-rule",label:t("conn.editRule"),onAction:()=>e.showRule(!0)}]:[],...e.canViewFlow?[{id:"view-flow",label:t("conn.viewFlow"),onAction:e.showFlow}]:[],...e.canTrace?[{id:"trace",label:t("conn.trace"),onAction:e.traceConnection}]:[],...s.source?[{id:"only-client",label:t("conn.onlyThisClient"),onAction:e.onlyClient}]:[],...e.canClose&&s.closable?[{id:"close",label:t("conn.close"),negative:!0,isPending:e.close.pending,isDisabled:e.close.disabled||!!s.closeReason,reason:s.closeReason??void 0,onAction:e.close.run}]:[]]})]}),o.jsx(Se,{items:s.fields}),o.jsx(Se,{items:[[t("ui.outbound"),s.outbound],[t("conn.chain"),s.chain]]}),o.jsxs("div",{className:"rp-list",children:[o.jsx("span",{className:"rp-label",children:t("conn.rule")}),o.jsx(Ge,{...s.rule})]})]})})]}),e.notInSnapshot&&o.jsx("span",{className:"rp-label",children:t("conn.notInSnapshot")}),o.jsx(pt,{dialog:e.ruleAction.dialog})]}),traffic:o.jsx(vt,{records:e.rows,outbounds:e.outboundKeys,latency:e.latency,latencyError:e.latencyError,retryLatency:e.retryLatency,truncated:e.truncated,onSelect:e.openInList})};return o.jsx("div",{className:"rp-page",children:o.jsx(zn,{keepMounted:!0,label:t("nav.connections"),value:e.tab,onChange:e.setTab,items:qe().map(l=>({id:l.id,label:t(l.titleKey),content:d[l.id]}))})})}export{io as Connections}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Coverage-BJmgp_Br.js b/luci-app-honk/root/etc/honk/doona/assets/Coverage-BJmgp_Br.js deleted file mode 100644 index ae0de287a..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Coverage-BJmgp_Br.js +++ /dev/null @@ -1 +0,0 @@ -import{aB as u,a3 as d,a4 as t,u as f,aL as m,aJ as c}from"./index-BOpK0UVB.js";import{j as s}from"./vendor-react-Bf71BWbF.js";const g={userspace_tcp:"flow.userspaceTcp",userspace_udp:"flow.userspaceUdp",kernel_direct:"flow.kernelDirect",kernel_block:"flow.kernelBlock",dns_intercept:"flow.dnsIntercept",kernel_bypass:"flow.kernelBypass"},w={full:"flow.full",partial:"flow.partialVisibility",none:"ui.none"};function h(e,r,p){const l=Object.entries(e.coverage).filter(([,a])=>a!=="full"),o=u(e.dropped_records),n=o?r("flow.dropped",{n:o}):null;return!l.length&&!n?null:{summary:l.length?r("flow.coverageSummary",{n:l.length}):null,detail:d(p,l.map(([a,i])=>r("ui.valuePair",{label:t(g,a,r),value:t(w,i,r)}))),dropped:n}}function k({view:e}){const r=f();return s.jsxs("div",{className:"rp-cluster",role:"group","aria-label":r("flow.coverage"),children:[e.summary&&s.jsx(m,{text:e.detail,children:s.jsx(c,{small:!0,tone:"warn",children:e.summary})}),e.dropped&&s.jsx(c,{small:!0,tone:"warn",children:e.dropped})]})}export{k as C,h as c}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Coverage-VYQXivNr.js b/luci-app-honk/root/etc/honk/doona/assets/Coverage-VYQXivNr.js new file mode 100644 index 000000000..e6f7dfe40 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Coverage-VYQXivNr.js @@ -0,0 +1 @@ +import{av as e,aB as l,ad as r,F as a,T as s,Z as n}from"./index-BgFj_VXE.js";import{j as o}from"./vendor-react-64fcanlc.js";const t={userspace_tcp:"flow.userspaceTcp",userspace_udp:"flow.userspaceUdp",kernel_direct:"flow.kernelDirect",kernel_block:"flow.kernelBlock",dns_intercept:"flow.dnsIntercept",kernel_bypass:"flow.kernelBypass"},c={full:"flow.full",partial:"flow.partialVisibility",none:"ui.none"};function p(a,s,n){const o=Object.entries(a.coverage).filter(([,e])=>"full"!==e),p=e(a.dropped_records),i=p?s("flow.dropped",{n:p}):null;return o.length||i?{summary:o.length?s("flow.coverageSummary",{n:o.length}):null,detail:l(n,o.map(([e,l])=>s("ui.valuePair",{label:r(t,e,s),value:r(c,l,s)}))),dropped:i}:null}function i({view:e}){const l=a();return o.jsxs("div",{className:"rp-cluster",role:"group","aria-label":l("flow.coverage"),children:[e.summary&&o.jsx(s,{text:e.detail,children:o.jsx(n,{small:!0,tone:"warn",children:e.summary})}),e.dropped&&o.jsx(n,{small:!0,tone:"warn",children:e.dropped})]})}export{i as C,p as c}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/DaeCode-B8yPDjSE.js b/luci-app-honk/root/etc/honk/doona/assets/DaeCode-B8yPDjSE.js deleted file mode 100644 index c74bf29b7..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/DaeCode-B8yPDjSE.js +++ /dev/null @@ -1,3 +0,0 @@ -import{r as o}from"./vendor-react-Bf71BWbF.js";const h=/^(global|dns|upstream|routing|request|response|subscription|node|group|include|fallback)\b(?!\s*\()/,p=()=>({afterArrow:!1});function l(t,s){return t.sol()&&(s.afterArrow=!1),t.eatSpace()?null:t.match("#")?(t.skipToEnd(),"comment"):t.match(/^'[^']*'/)||t.match(/^"[^"]*"/)?"string":t.match("->")?(s.afterArrow=!0,"operator"):s.afterArrow&&t.match(/^[\w.-]+/)?(s.afterArrow=!1,"keyword"):(t.sol()||t.string.slice(0,t.pos).trim()==="")&&t.match(h)?"keyword":t.match(/^\d+(\.\d+)*(\/\d+)?[a-z]*/)?"number":t.match(/^[\w.-]+(?=\s*\()/)?"propertyName":t.match(/^[\w.-]+(?=\s*:)/)?"variableName":t.match(/^[A-Za-z_][\w.-]*/)?null:t.match(/^[{}()&|!,:]/)?"punctuation":(t.next(),null)}class f{pos=0;string;constructor(s){this.string=s}sol(){return this.pos===0}eatSpace(){const s=/^\s+/.exec(this.string.slice(this.pos));return s?(this.pos+=s[0].length,!0):!1}match(s){const e=typeof s=="string"?this.string.slice(this.pos).startsWith(s)&&s:s.exec(this.string.slice(this.pos));return e&&(this.pos+=typeof e=="string"?e.length:e[0].length),e}skipToEnd(){this.pos=this.string.length}next(){return this.pos{const i=new f(n);for(;i.posr.type?o.createElement("span",{key:n,className:`rp-dae-${r.type}`},r.text):r.text))}export{m as D,l as d,p as s}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/DaeCode-DEjXqvav.js b/luci-app-honk/root/etc/honk/doona/assets/DaeCode-DEjXqvav.js new file mode 100644 index 000000000..c8ff1df58 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/DaeCode-DEjXqvav.js @@ -0,0 +1 @@ +import{r as e}from"./vendor-react-64fcanlc.js";import{t}from"./daeTokens-BVtuNnWZ.js";function a({text:a,as:r="span",className:s=""}){return e.createElement(r,{className:`rp-code ${s}`.trim()},t(a).map((t,a)=>t.type?e.createElement("span",{key:a,className:`rp-dae-${t.type}`},t.text):t.text))}export{a as D}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Delete-DA-ArqRQ.js b/luci-app-honk/root/etc/honk/doona/assets/Delete-DA-ArqRQ.js new file mode 100644 index 000000000..c640998b6 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Delete-DA-ArqRQ.js @@ -0,0 +1 @@ +import{j as c}from"./vendor-react-64fcanlc.js";import{I as r}from"./index-BgFj_VXE.js";function l(l){return c.jsxs(r,{...l,children:[c.jsx("path",{fill:"currentColor",d:"M8.249 15.021c-.4 0-.733-.317-.748-.72l-.25-6.5c-.017-.414.307-.763.72-.779H8c.4 0 .733.317.748.72l.25 6.5c.017.414-.307.763-.72.778zM11.751 15.021h-.03c-.413-.016-.737-.365-.72-.779l.25-6.5c.015-.403.348-.72.748-.72h.03c.413.016.737.365.72.779l-.25 6.5c-.015.403-.348.72-.748.72"}),c.jsx("path",{fill:"currentColor",d:"M17 4h-3.5v-.75C13.5 2.01 12.49 1 11.25 1h-2.5C7.51 1 6.5 2.01 6.5 3.25V4H3c-.414 0-.75.336-.75.75s.336.75.75.75h.52l.422 10.342C3.99 17.052 4.98 18 6.19 18h7.62c1.211 0 2.2-.948 2.248-2.158L16.48 5.5H17c.414 0 .75-.336.75-.75S17.414 4 17 4m-9-.75c0-.413.337-.75.75-.75h2.5c.413 0 .75.337.75.75V4H8zm6.56 12.531c-.017.404-.346.719-.75.719H6.19c-.404 0-.733-.315-.75-.719L5.02 5.5h9.96z"})]})}export{l as D}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Dns-CTaKf4B9.js b/luci-app-honk/root/etc/honk/doona/assets/Dns-CTaKf4B9.js deleted file mode 100644 index 64506ebeb..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Dns-CTaKf4B9.js +++ /dev/null @@ -1,3 +0,0 @@ -import{r as h,j as s}from"./vendor-react-Bf71BWbF.js";import{u as v,aT as De,bE as Re,c as Ae,bF as me,Z as qe,a4 as ke,a_ as S,aw as Ee,a5 as fe,aq as Fe,A as ge,aB as Oe,bG as xe,aa as Y,bg as E,bH as be,ac as B,a0 as W,h as ce,bk as Pe,bj as Me,a6 as V,a as I,bI as de,Y as He,f as We,bp as Ue,bJ as Be,bm as U,bq as Ve,ag as Ie,bK as Qe,W as Ke,b as $e,bL as ze,aW as Je,ak as R,j as ve,E as O,aI as Z,bM as Ge,bN as Xe,bO as Ye,bP as Ze,aN as F,aV as oe,L as ee,aP as je,aL as A,bs as es,bQ as J,T as G,bt as ye,B as _,bR as ss,aO as we,aK as se,bx as as,aJ as ue,bw as ns,bS as ts,aM as rs,bv as ls,bu as is}from"./index-BOpK0UVB.js";import{D as Ne}from"./Table-BkehX7fw.js";import{T as X}from"./TimeCell-COfj2dEh.js";import{A as cs}from"./ActionGroup-BU73NzbX.js";import{q as ds,u as Ce,a as os,b as us}from"./dns-BY6DX1P3.js";import{c as pe,d as ps,e as hs}from"./files-BxEOxSF8.js";import{d as ms}from"./nav-B9ea5ZPQ.js";import{u as fs,R as gs}from"./useQuickRule-qFvcUoSC.js";import{F as xs}from"./FactStrip-CPXeRki4.js";import{r as he,B as bs}from"./ranked-DDCHUGeL.js";import{u as vs,w as js,C as ys,p as $}from"./layout-Bzzn7HLw.js";import"./useGridSelectionCheckbox-C4VxQajJ.js";import"./Virtualizer-BIsXGNLZ.js";import"./ListLayout-CkBMjK9o.js";import"./DaeCode-B8yPDjSE.js";import"./flows-BW6GjUpE.js";function ws({label:t,shares:n}){const a=v(),r=De(),{ref:c,tip:e,show:l,hide:o}=vs(),i=h.useMemo(()=>{const d=js(n.map(m=>m.count));return n.flatMap((m,f)=>Array.from({length:d[f]},()=>m))},[n]);return s.jsxs("div",{className:"rp-waffle rp-chart-hover",ref:c,onPointerLeave:o,children:[s.jsx("div",{className:"grid",role:"img","aria-describedby":r,"aria-label":Re(t,n,a),children:i.map((d,m)=>s.jsx("span",{style:{background:d.color},onPointerMove:f=>l(f,[d.label,d.text])},m))}),s.jsx("ul",{className:"legend",children:n.map(d=>s.jsxs("li",{children:[s.jsx("i",{className:"sw",style:{background:d.color}}),s.jsx("span",{children:d.label}),s.jsx("b",{children:d.text})]},d.id))}),s.jsx(ys,{tip:e})]})}function Ns({className:t,...n}){return s.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:20,viewBox:"0 0 20 20","aria-hidden":"true",focusable:"false",className:Ae("rp-icon",t),...n,children:[s.jsx("path",{fill:"currentColor",d:"M8.249 15.021c-.4 0-.733-.317-.748-.72l-.25-6.5c-.017-.414.307-.763.72-.779H8c.4 0 .733.317.748.72l.25 6.5c.017.414-.307.763-.72.778zM11.751 15.021h-.03c-.413-.016-.737-.365-.72-.779l.25-6.5c.015-.403.348-.72.748-.72h.03c.413.016.737.365.72.779l-.25 6.5c-.015.403-.348.72-.748.72"}),s.jsx("path",{fill:"currentColor",d:"M17 4h-3.5v-.75C13.5 2.01 12.49 1 11.25 1h-2.5C7.51 1 6.5 2.01 6.5 3.25V4H3c-.414 0-.75.336-.75.75s.336.75.75.75h.52l.422 10.342C3.99 17.052 4.98 18 6.19 18h7.62c1.211 0 2.2-.948 2.248-2.158L16.48 5.5H17c.414 0 .75-.336.75-.75S17.414 4 17 4m-9-.75c0-.413.337-.75.75-.75h2.5c.413 0 .75.337.75.75V4H8zm6.56 12.531c-.017.404-.346.719-.75.719H6.19c-.404 0-.733-.315-.75-.719L5.02 5.5h9.96z"})]})}function ae(t,n,a,r,c){return{domain:t,dip:null,sip:(c&&qe(c))??null,outbound:null,matched:null,dns:{type:n,answers:me(a),upstream:r,query:{name:t,type:n}}}}const Cs=(t,n,a)=>({domain:null,dip:t,sip:null,outbound:null,matched:null,dns:{type:a,answers:[t],upstream:null,query:{name:n,type:a}}}),Ss={forced:"dns.route.forced","dns.routing":"dns.route.rules",default:"dns.route.default"};function Se(t,n){return{fields:[[n("ui.state"),t.status],[n("ui.upstream"),t.upstream??"—"],[n("dns.routeSource"),ke(Ss,t.route.source,n)],[n("dns.routeRule"),t.route.rule??"—"],[n("ui.elapsed"),S(t.elapsed_ms,n)]],answers:(t.answers??[]).map(a=>n("dns.answer",{name:a.name,type:a.type,ttl:a.ttl,data:a.data})),cacheText:n(t.cached?"dns.hit":"dns.miss"),cacheTone:t.cached?void 0:"warn"}}function _s(t,n,a,r,c,e){const l=n?.dns_query.record_types??[],o=a==="all"?l.length>0:l.includes(a);return{types:l,choices:[...l.map(i=>({id:i,label:i})),{id:"all",label:e("dns.allTypes")}],disabled:c||!n?.dns_query.available||!o||!r.trim(),reason:!n||c?null:n.dns_query.available?o?null:e(a==="all"?"dns.noTypes":"dns.typeUnsupported"):e("dns.queryUnavailable"),showCache:!!n?.dns_cache.available,cards:t?.results.map(i=>({id:i.type,title:`${t.domain} ${i.type}`,...Se(i,e),seed:ae(t.domain,i.type,i.answers??[],i.upstream,null),answerSeeds:(i.answers??[]).map(d=>me([d]).length?{address:d.data,seed:Cs(d.data,t.domain,i.type)}:null)}))??[],tabs:ms(n).map(i=>({id:i.id,label:e(i.titleKey)}))}}function Ts(t,n,a,r,c,e){const l=a.toLowerCase(),o=n?.dns_cache,i=(t?.entries??[]).filter(d=>!l||d.domain.toLowerCase().includes(l));return{fields:[[e("dns.entries"),t?fe(t.total,c):"—"]],coverage:t?["positive","negative","persistent"].filter(d=>!t.coverage[d]).map(d=>({id:d,text:e("ui.valuePair",{label:e({positive:"dns.positive",negative:"dns.negative",persistent:"dns.persistent"}[d]),value:e(d==="persistent"?"dns.chart.memoryOnly":"dns.notCovered")})})):[],filterText:l?e("dns.cacheFilter",{domain:a}):"",confirmationText:t?e("dns.flushConfirm",{n:t.total}):e("dns.flushConfirmAll"),flushDisabled:!!r||!n?.dns_cache.available||!n.dns_cache.flush,flushReason:o&&!r&&(!o.available||!o.flush)?e("dns.flushUnsupported"):null,deleteReason:o&&!r&&i.length>0&&(!o.available||!o.delete_entry)?e("dns.deleteUnsupported"):null,empty:e(n?.dns_cache.available&&n.dns_cache.read?"dns.empty":"dns.cacheUnavailable"),rows:i.map(d=>({id:d.entry_id,domain:d.domain,type:d.type,status:d.status,expiresAt:d.expires_at,staleUntil:d.stale_until,deleteLabel:e("dns.deleteEntry",{domain:d.domain,type:d.type}),seed:ae(d.domain,d.type,[],null,null),pending:r===d.entry_id,disabled:!!r||!n?.dns_cache.available||!n.dns_cache.delete_entry}))}}function Ls(t,n,a,r){const c=t?.records.find(l=>l.id===n);if(!c)return null;const e=Se(c,r);return{id:c.id,title:c.question.name,answers:e.answers,seed:ae(c.question.name,c.question.type,c.answers,c.upstream,c.src),fields:[[r("ui.type"),c.question.type],[r("ui.device"),c.src??"—"],e.fields[0],[r("ui.cache"),e.cacheText],...e.fields.slice(1),[r("ui.time"),Ee(c.observed_at,a)]]}}function Ds(t,n,a,r=[]){const c=t?.records??[];return{choices:[{id:"all",label:a("dns.allTypes")},...[...new Set([...r,...c.map(e=>e.question.type)])].map(e=>({id:e,label:e}))],total:t?a("dns.logTotal",{n:t.total}):"",totalHelp:t?{title:a("dns.logTotal",{n:t.total}),text:a("dns.logTotalHelp")}:null,loaded:t?.next_cursor?a("dns.logLoaded",{n:c.length}):"",empty:a(n===void 0?"ui.loading":n?"dns.logEmpty":"dns.logUnavailable"),rows:c.map(e=>({id:e.id,observedAt:e.observed_at,name:e.question.name,type:e.question.type,source:e.src??"—",resultError:e.status!=="NOERROR",result:e.status!=="NOERROR"?e.status:e.answers.map(l=>l.data).join(", ")||"—",cached:e.cached,upstream:e.cached?a("dns.hit"):e.upstream??"—",elapsed:S(e.elapsed_ms,a)}))}}function Rs(t){return[pe(["id","observed_at","src","name","type","status","cached","upstream","route_source","route_rule","elapsed_ms","answers"]),...t.map(n=>pe([n.id,n.observed_at,n.src,n.question.name,n.question.type,n.status,n.cached?"true":"false",n.upstream,n.route.source,n.route.rule,n.elapsed_ms,n.answers.map(a=>a.data).join(" ")]))].join(` -`)+` -`}function As(t,n){const a=new Set(t.records.map(r=>r.id));return{...t,records:[...t.records,...n.records.filter(r=>!a.has(r.id))],next_cursor:n.next_cursor}}function qs(t,n){const a=n&&new Set(n.records.map(r=>r.id));return{data:n??t,newerWaiting:!!a&&!!t?.records.some(r=>!a.has(r.id))}}function ks(t,n,a){if(!t)return null;const{usage:r,coverage:c}=t,e=i=>{const d=Oe(i);return d===null?"—":fe(d,n)},l=r?.entry_capacity??null,o=r&&l!==null?Fe(r.entries,l):null;return{note:r?l===null?a("dns.chart.usageFacts",{entries:e(r.entries)}):void 0:a("dns.chart.cacheNote",{n:t.total}),usage:r&&l!==null&&o!==null?{pct:o,value:o>0&&o<.5?"<"+a("ui.percent",{n:1}):a("ui.percent",{n:Math.round(o)}),facts:a("dns.chart.usageFacts",{entries:a("ui.fraction",{part:e(r.entries),whole:e(l)})})}:null,coverage:a("dns.chart.coverage",{kinds:[c.positive&&a("dns.chart.positive"),c.negative&&a("dns.chart.negative")].filter(Boolean).join(a("ui.listSeparator")),persistent:a(c.persistent?"dns.chart.persistent":"dns.chart.memoryOnly")})}}function Es(t,n,a){return t?a instanceof ge&&a.status===503?"unavailable":n?"ready":a?"error":"loading":"unlisted"}function Fs({go:t,query:n}){const a=v(),r=xe(),c=Y(),e=h.useMemo(()=>new URLSearchParams(n),[n]),[l,o]=h.useState(e.get("domain")??""),[i,d]=h.useState(e.get("type")??"A");E(e.get("domain"),p=>o(p??"")),E(e.get("type"),p=>d(p??"A"));const[m,f]=h.useState(null),{busy:x,error:y,run:C}=be({rethrow:!0}),u=c.data?.resources,b=h.useMemo(()=>_s(m,u,i,l,!!x,a),[m,u,i,l,x,a]),w=b.tabs.map(p=>p.id),T=e.has("domain")||e.has("device"),q=w.includes("log")?T?"log":"stats":w.includes("query")?"query":w[0]??"query",N=async(p={domain:l,type:i})=>{try{await C("query",async g=>{const H=await ds(r.dnsQuery,p.domain.trim(),p.type==="all"?b.types:[p.type],u?.dns_query.limits?.max_types_per_request??1,g);return g.aborted||f(H),H})}catch{}},P=B(u,"dns_query",{whileLoading:!1})&&b.types.length>0,L=fs(t,{queryAgain:P?p=>{const g=b.types.includes(p.type)?p.type:"all";t("dns",W("",{tab:"query",domain:p.name.replace(/\.$/,""),type:g,run:"1"}))}:void 0}),k=e.has("run")&&u?n:null,M=h.useEffectEvent(p=>{const g=new URLSearchParams(p);t("dns",W(p,{run:null}),{replace:!0}),N({domain:g.get("domain")??"",type:g.get("type")??"A"})});return h.useEffect(()=>{k!==null&&M(k)},[k]),{...b,rule:L,domain:l,setDomain:o,type:i,setType:d,pending:x==="query",queryError:y,submit:()=>void N(),setTab:p=>t("dns",Me(n,p,u&&!T?q:null)),tab:Pe(n,b.tabs.map(p=>p.id),q),filterDomain:e.get("domain")??"",filterDevice:e.get("device")??"",cacheHref:w.includes("cache")?ce("dns",{tab:"cache"}):null,logHref:(p,g)=>ce("dns",{tab:"log",[p]:g}),logLinks:[...B(u,"dns_rules",{whileLoading:!1})?[{id:"rules",label:a("rule.dnsTitle"),onAction:()=>t("rules","tab=dns")}]:[],...u?.runtime_settings.available?[{id:"recording",label:a("ui.recordingSettings"),onAction:()=>t("settings","card=runtime")}]:[]],logEnabled:u?.dns_log.available,viewCache:()=>t("dns",W(n,{tab:"cache",domain:m?.domain??""})),clearCacheFilter:()=>t("dns",W(n,{tab:"cache",domain:null}))}}function Os(t){const n=v(),a=V[I()],r=os(!Be()),c=h.useMemo(()=>Ts(r.cache.data,r.capabilities.data?.resources,t,r.busy,a,n),[r.cache.data,r.capabilities.data,t,r.busy,a,n]),[e,l]=h.useState(null),o=c.rows.find(f=>f.id===e),{remove:i}=r,d=h.useCallback(f=>void i(f).then(x=>x&&U("positive",n("dns.deleted",{n:x.deleted})),x=>U("negative",n("dns.deleteFailed"),Ve(x,n))),[i,n]),m=async()=>{try{const f=await r.flush();f&&U("positive",n("dns.flushed",{matched:f.matched,deleted:f.deleted}))}catch(f){return n("dns.flushFailed",{error:$e(f,n)})}};return{...c,selected:o?e:null,setSelected:l,seed:o?.seed??null,error:r.cache.error,retry:r.cache.refetch,loading:(r.cache.loading||r.capabilities.loading)&&!r.cache.data,flushPending:r.busy==="flush",remove:d,flush:m,abortFlush:()=>{r.cancel(),r.cache.refetch()}}}function Ps(t){const n=Ce({},t===!0),a=Y().data?.resources,r=B(a,"config",{whileLoading:!1}),e=Ie(t===!0&&r).data?.sources,l=h.useMemo(()=>r&&e?Qe(e,"dns"):null,[r,e]);return{log:n,cacheListed:B(a,"dns_cache",{whileLoading:!1})&&a?.dns_cache.read===!0,configHref:l}}function Ms(t){const n=v(),a=V[I()],[r,c]=ze(),[e,l]=h.useState(!1),o=us(t,!c&&e);o.data&&!e&&l(!0);const i=h.useMemo(()=>ks(o.data,a,n),[o.data,a,n]);return{ref:r,card:i,state:Es(t,!!i,o.error),error:o.error,retry:o.refetch}}function Hs(t,n,a){const r=v(),c=V[I()],[e,l]=h.useState(n);E(n,l);const[o,i]=h.useState("all"),[d,m]=h.useState(a);E(a,m);const f=xe(),x=Y(),y=de(d),C=He(y),u=y.trim()!==""&&!C,[b,w]=h.useState(C);!u&&C!==b&&w(C);const T={name:de(e),type:o,src:u?b:C},q=JSON.stringify(T),N=Ce(T,t===!0),[P,L]=h.useState(null),[k,M]=h.useState(!1),p=be({scope:q});E(q,()=>L(null));const{data:g,newerWaiting:H}=h.useMemo(()=>qs(N.data,P),[N.data,P]),ne=()=>void p.run("older",async D=>{if(!g?.next_cursor)return;L(g);let le;try{le=await f.dnsLog({name:T.name.trim()||void 0,type:o==="all"?void 0:o,src:T.src,cursor:g.next_cursor,limit:N.limit},D)}catch(j){if(!(j instanceof ge)||D.aborted)throw j;const ie=j.status===503&&j.code==="snapshot_unavailable"&&j.retryAfter!==null;if(!(j.status===410&&j.code==="snapshot_expired"||j.status===400&&j.code==="invalid_request")&&!ie)throw j;ie&&await Ke(j.retryAfter,D),L(null),N.refetch(),U("info",r("dns.olderExpired"));return}D.aborted||L(As(g,le))}),te=()=>{p.cancel(),L(null);const D=N.refetch();D&&(M(!0),D.finally(()=>M(!1)))},[Q,_e]=h.useState(null),Te=We(Ue),re=x.data?.resources.dns_query.record_types,Le=h.useMemo(()=>Ds(g,t,r,re),[g,t,r,re]),K=h.useMemo(()=>Ls(g,Q,c,r),[g,Q,c,r]);return{...Le,detail:K,detailTitle:K?.title??"",name:e,newerWaiting:H,setName:l,type:o,setType:i,src:d,setSrc:m,srcError:u?r("ui.invalidIp"):void 0,selected:K?Q:null,setSelected:_e,wide:Te,error:p.error??N.error,loading:N.loading&&!g,hasOlder:!!g?.next_cursor,loadingOlder:!!p.busy,loadOlder:ne,refreshing:k,refresh:te,retry:p.error?ne:te,export:()=>ps(hs("dns-log","csv"),Rs(g?.records??[]),"text/csv;charset=utf-8")}}const Ws=["cached","answered","nxdomain","failed"],Us=t=>t.cached?"cached":t.status==="NOERROR"?"answered":t.status==="NXDOMAIN"?"nxdomain":"failed";function Bs(t,n){const a={cached:0,answered:0,nxdomain:0,failed:0},r=[];for(const i of t){const d=Us(i);a[d]++,!i.cached&&i.upstream!==null&&r.push({id:i.id,value:i.elapsed_ms,outcome:d,name:i.question.name,upstream:i.upstream})}const c=r.map(i=>i.value).sort((i,d)=>i-d),e=new Map;for(const i of r)e.set(i.upstream,[...e.get(i.upstream)??[],i]);const l=[...e].map(([i,d])=>({upstream:i,median:$(d.map(m=>m.value).sort((m,f)=>m-f),50),samples:d}));l.sort((i,d)=>d.samples.length-i.samples.length||Je(n)(i.upstream,d.upstream));const o=t.length-a.cached;return{domains:he(t.map(i=>i.question.name.replace(/\.$/,"")),8),devices:he(t.map(i=>i.src===null?null:Vs(i.src)),8),total:t.length,counts:a,uncached:o,samples:r,typical:$(c,50),slowest:$(c,95),failureRate:o?a.failed/o:null,cacheRate:t.length?a.cached/t.length:null,upstreams:l}}const Vs=t=>t.replace(/:\d+$/,""),Is=(t,n)=>!!t?.next_cursor&&n!==void 0&&t.records.lengthBs(t,o),[t,o]),d={cached:l.positive,answered:l.cat[2],nxdomain:l.notice,failed:l.negative},m=u=>e("ui.percent",{n:u===null?0:Math.round(u*100)}),f=(u,b)=>{const w=b?u/b:0;return u>0&&w<.005?"<"+e("ui.percent",{n:1}):u.995?">"+e("ui.percent",{n:99}):m(w)},x=u=>({id:u.id,value:u.value,color:d[u.outcome],lines:[u.name,S(u.value,e),e(z[u.outcome])]}),y=n??(i.total<5?s.jsx(R,{children:e("dns.chart.tooFew")}):null),C=[{label:e("dns.chart.median"),value:S(i.typical,e),icon:s.jsx(Ge,{}),tint:"c1"},{label:e("dns.chart.p95"),value:S(i.slowest,e),icon:s.jsx(Xe,{}),tint:"c4"},{label:e("dns.chart.cacheRate"),value:m(i.cacheRate),icon:s.jsx(Ye,{}),tint:"c2"},{label:e("dns.chart.failureRate"),value:m(i.failureRate),icon:s.jsx(Ze,{}),tint:"c5",tone:i.counts.failed?"negative":void 0}];return s.jsxs("div",{className:"rp-chart-page",children:[a,!y&&s.jsx(xs,{facts:C}),s.jsxs("div",{className:"rp-g21",children:[s.jsx(F,{title:e("dns.chart.speed",{n:i.samples.length}),note:y?void 0:e("dns.chart.sample",{n:i.total,uncached:i.uncached,upstream:i.samples.length}),aside:c.config&&s.jsx(ee,{appearance:"link",href:c.config,children:e("dns.openConfig")}),children:y??s.jsxs(s.Fragment,{children:[s.jsx(bs,{label:e("dns.chart.speed",{n:i.samples.length}),points:i.samples.map(x),marks:i.typical!==null&&i.slowest!==null?[{value:i.typical,label:e("dns.chart.typical",{value:S(i.typical,e)})},{value:i.slowest,label:e("dns.chart.slowest",{value:S(i.slowest,e)})}]:[],rows:i.upstreams.map(u=>({id:u.upstream,label:u.upstream,detail:e("dns.chart.upstream",{n:u.samples.length,median:S(u.median,e)}),points:u.samples.map(x),mark:u.median})),fmt:u=>S(u,e)}),s.jsxs("div",{className:"rp-legend",children:[["answered","nxdomain","failed"].map(u=>s.jsx(oe,{swatch:d[u],label:e(z[u])},u)),s.jsx(oe,{swatch:s.jsx("i",{className:"rp-median-key","aria-hidden":"true"}),label:e("dns.chart.medianKey")})]})]})}),s.jsx(F,{title:e("dns.chart.outcomes"),children:y??s.jsx(ws,{label:e("dns.chart.outcomes"),shares:Ws.map(u=>({id:u,label:e(z[u]),count:i.counts[u],color:d[u],text:e("dns.chart.share",{n:i.counts[u],share:f(i.counts[u],i.total)})}))})})]}),s.jsxs("div",{className:"rp-g21",children:[s.jsx(Js,{analysis:i,standIn:y,logHref:c.log}),s.jsx(zs,{listed:r,href:c.cache})]})]})}function zs({listed:t,href:n}){const a=v(),r=Z(),{ref:c,...e}=Ms(t);return s.jsx(F,{ref:c,title:a("dns.chart.cache"),note:e.state==="ready"?e.card?.note:void 0,aside:t&&n&&s.jsx(ee,{appearance:"link",href:n,children:a("dns.viewCache")}),children:e.state==="unlisted"?s.jsx(R,{children:a("dns.cacheUnavailable")}):e.state==="unavailable"?s.jsx(R,{children:a("dns.cacheBusy")}):e.state==="error"?s.jsx(O,{error:e.error,onRetry:e.retry}):e.card?s.jsxs(s.Fragment,{children:[e.card.usage&&s.jsxs("div",{className:"rp-form",children:[s.jsx(je,{label:a("dns.chart.usage"),value:e.card.usage.value,pct:e.card.usage.pct,color:r.accent}),s.jsx("span",{className:"rp-label",children:e.card.usage.facts})]}),s.jsx("p",{className:"rp-note",children:e.card.coverage})]}):s.jsx(ve,{})})}function Js({analysis:t,standIn:n,logHref:a}){const r=v(),c=Z(),[e,l]=h.useState("device"),o=e==="device"?t.devices:t.domains,i=o.top[0]?.count??1;return s.jsx(F,{title:r("dns.chart.ranking"),aside:!n&&s.jsx(es,{label:r("dns.chart.ranking"),value:e,onChange:l,items:[["device",r("dns.chart.byDevice")],["domain",r("dns.chart.byDomain")]]}),children:n??s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"rp-list",children:o.top.map(d=>s.jsx(je,{label:d.key===null?r("dns.chart.resolver"):s.jsx(ee,{appearance:"link",href:a(e==="device"?"device":"domain",d.key),children:s.jsx(A,{children:d.key})}),value:r("dns.chart.count",{n:d.count}),pct:d.count/i*100,color:e==="device"?c.cat[0]:c.cat[3]},d.key??""))}),o.rest>0&&s.jsx("p",{className:"rp-note",children:r("dns.chart.rest",{n:o.rest})})]})})}function ga(t){const n=v(),a=Fs(t),r=s.jsxs(s.Fragment,{children:[a.queryError&&s.jsx(O,{error:a.queryError,onRetry:a.submit,message:e=>n("dns.queryFailed",{error:e})}),s.jsx("form",{className:ss(),onSubmit:e=>{e.preventDefault(),a.submit()},children:s.jsx(J,{reason:a.reason,children:s.jsxs("div",{className:"rp-toolbar",children:[s.jsx(G,{side:!0,label:n("ui.domain"),value:a.domain,onChange:a.setDomain,width:280,placeholder:"example.com"}),s.jsx(ye,{label:n("ui.type"),side:!0,value:a.type,onChange:a.setType,items:a.choices}),s.jsx(_,{accent:!0,type:"submit",isPending:a.pending,isDisabled:a.disabled,children:n("dns.query")})]})})}),a.cards.length>0&&s.jsx("div",{className:"rp-col",children:a.cards.map(e=>s.jsxs(F,{className:"rp-col",children:[s.jsxs("div",{className:"rp-row",children:[s.jsxs("div",{className:"rp-cluster",children:[s.jsx("h3",{className:"rp-h3",children:e.title}),s.jsx(we,{tone:e.cacheTone,children:e.cacheText})]}),s.jsxs("div",{className:"rp-cluster",children:[a.rule.canAdd(e.seed)&&s.jsx(_,{quiet:!0,small:!0,onPress:()=>a.rule.open(e.seed),children:n("rule.add")}),a.showCache&&s.jsx(_,{quiet:!0,small:!0,onPress:a.viewCache,children:n("dns.viewCache")})]})]}),s.jsx(se,{inline:!0,items:e.fields}),e.answers.length?s.jsx("div",{className:"rp-list",children:e.answers.map((l,o)=>{const i=e.answerSeeds[o];return s.jsxs("div",{className:"rp-cluster",children:[s.jsx("div",{className:"rp-code",children:l}),i&&a.rule.canAdd(i.seed)&&s.jsx(_,{quiet:!0,small:!0,label:n("dns.addRuleFor",{value:i.address}),onPress:()=>a.rule.open(i.seed),children:n("rule.add")})]},o)})}):s.jsx(R,{children:n("dns.noAnswers")})]},e.id))})]}),c={stats:s.jsx(Qs,{enabled:a.logEnabled,links:{cache:a.cacheHref,log:a.logHref}}),query:r,cache:s.jsx(Gs,{domain:a.filterDomain,clearFilter:a.clearCacheFilter,rule:a.rule}),log:s.jsx(Xs,{enabled:a.logEnabled,initialName:a.filterDomain,initialSrc:a.filterDevice,links:a.logLinks,rule:a.rule})};return s.jsxs("div",{className:"rp-page",children:[s.jsx(as,{keepMounted:!0,label:n("nav.dns"),items:a.tabs.map(e=>({...e,content:c[e.id]})),value:a.tab,onChange:a.setTab}),s.jsx(gs,{dialog:a.rule.dialog})]})}function Gs({domain:t,clearFilter:n,rule:a}){const r=v(),c=Os(t),{remove:e}=c,l=h.useMemo(()=>[{id:"q",label:r("ui.domain"),minWidth:192,isRowHeader:!0,render:o=>s.jsx(A,{className:"rp-code",text:o.id,children:o.domain})},{id:"t",label:r("ui.type"),minWidth:88,grow:0,drop:3,render:o=>o.type},{id:"s",label:r("ui.state"),minWidth:104,grow:0,render:o=>o.status},{id:"e",label:r("dns.expires"),minWidth:128,drop:2,render:o=>s.jsx(X,{at:o.expiresAt})},{id:"st",label:r("dns.staleUntil"),minWidth:128,drop:1,render:o=>s.jsx(X,{at:o.staleUntil})},{id:"a",label:r("ui.delete"),minWidth:80,grow:0,render:o=>s.jsx(_,{quiet:!0,icon:!0,small:!0,label:o.deleteLabel,isPending:o.pending,isDisabled:o.disabled,onPress:()=>e(o.id),children:s.jsx(Ns,{})})}],[r,e]);return s.jsxs(s.Fragment,{children:[c.error&&s.jsx(O,{error:c.error,onRetry:c.retry}),s.jsx(J,{reason:c.flushReason,children:s.jsxs("div",{className:"rp-toolbar",children:[s.jsx(se,{row:!0,items:c.fields}),c.coverage.map(o=>s.jsx(we,{tone:"warn",children:o.text},o.id)),c.filterText&&s.jsx(_,{small:!0,onPress:n,children:c.filterText}),s.jsx("span",{className:"rp-grow"}),s.jsx(_,{isDisabled:!c.seed||!a.canAdd(c.seed),tip:c.seed?void 0:r("ui.selectRow"),onPress:()=>c.seed&&a.open(c.seed),children:r("rule.add")}),s.jsx(is,{label:r("dns.flushAll"),confirmationText:c.confirmationText,isPending:c.flushPending,isDisabled:c.flushPending||c.flushDisabled,onConfirm:c.flush,onAbort:c.abortFlush})]})}),s.jsx(J,{reason:c.deleteReason,above:!0,children:s.jsx(Ne,{label:r("ui.cache"),height:442,fit:!0,rows:c.rows,selected:c.selected,onSelect:c.setSelected,loading:c.loading,empty:c.empty,cols:l})})]})}function Xs({enabled:t,initialName:n,initialSrc:a,links:r,rule:c}){const e=v(),l=Hs(t,n,a),o=l.detail?.seed,i=h.useMemo(()=>[{id:"t",label:e("ui.time"),minWidth:140,grow:0,render:d=>s.jsx(X,{at:d.observedAt})},{id:"q",label:e("ui.domain"),minWidth:200,grow:2,isRowHeader:!0,render:d=>s.jsx(A,{children:d.name})},{id:"ty",label:e("ui.type"),minWidth:88,grow:0,drop:3,render:d=>d.type},{id:"s",label:e("ui.device"),minWidth:128,drop:2,render:d=>s.jsx(A,{className:"rp-code",children:d.source})},{id:"r",label:e("dns.result"),minWidth:160,grow:2,render:d=>d.resultError?s.jsx(ue,{small:!0,tone:"err",children:d.result}):s.jsx(A,{className:"rp-code",children:d.result})},{id:"u",label:e("ui.upstream"),minWidth:128,drop:1,render:d=>d.cached?s.jsx(ue,{small:!0,tone:"ok",children:d.upstream}):s.jsx(A,{children:d.upstream})},{id:"e",label:e("ui.elapsed"),minWidth:88,grow:0,align:"end",drop:4,render:d=>d.elapsed}],[e]);return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"rp-toolbar",children:[s.jsx(G,{search:!0,label:e("ui.domain"),value:l.name,onChange:l.setName,placeholder:e("dns.logFilterHint"),width:240}),s.jsx(ye,{label:e("ui.type"),side:!0,value:l.type,onChange:l.setType,items:l.choices}),s.jsx(G,{search:!0,label:e("ui.device"),value:l.src,onChange:l.setSrc,error:l.srcError,placeholder:"10.0.0.12",width:160}),l.total&&s.jsx(ns,{help:l.totalHelp,children:s.jsx("span",{className:"rp-label",children:l.total})}),l.loaded&&s.jsx("span",{className:"rp-label",children:l.loaded}),s.jsx("span",{className:"rp-grow"}),s.jsx(cs,{actions:[{id:"refresh",label:e("ui.refresh"),icon:s.jsx(ts,{className:"rp-spin-on-press"}),isPending:l.refreshing,onAction:l.refresh},{id:"export",label:e("dns.exportLog"),icon:s.jsx(rs,{}),isDisabled:!l.rows.length,onAction:l.export},{id:"rule",label:e("rule.add"),isDisabled:!o||!c.canAdd(o),reason:o?void 0:e("ui.selectRow"),onAction:()=>o&&c.open(o)},...r,...l.hasOlder?[{id:"older",label:e("dns.loadOlder"),isPending:l.loadingOlder,onAction:l.loadOlder}]:[]]})]}),l.error&&s.jsx(O,{error:l.error,onRetry:l.retry}),l.newerWaiting&&s.jsx("p",{className:"rp-note",children:e("dns.newerWaiting")}),s.jsxs("div",{className:"rp-with-panel","data-open":l.detail?"":void 0,children:[s.jsx(Ne,{label:e("dns.log"),rowDetail:!0,height:520,rows:l.rows,selected:l.selected,onSelect:l.setSelected,selectOnFocus:l.wide,loading:l.loading,empty:l.empty,cols:i}),s.jsx(ls,{open:!!l.detail,title:l.detailTitle,onClose:()=>l.setSelected(null),children:l.detail&&s.jsxs(s.Fragment,{children:[c.canAdd(l.detail.seed)&&s.jsx("div",{className:"rp-cluster",children:s.jsx(_,{small:!0,onPress:()=>c.open(l.detail.seed),children:e("rule.add")})}),s.jsx(se,{inline:!0,items:l.detail.fields}),l.detail.answers.length?s.jsx("div",{className:"rp-list",children:l.detail.answers.map((d,m)=>s.jsx("div",{className:"rp-code",children:d},m))}):s.jsx(R,{children:e("dns.noAnswers")})]})})]}),l.hasOlder&&s.jsx("div",{className:"rp-narrow-only",children:s.jsx("div",{className:"rp-cluster",children:s.jsx(_,{small:!0,isPending:l.loadingOlder,onPress:l.loadOlder,children:e("dns.loadOlder")})})})]})}export{ga as Dns}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Dns-muAKZqBa.js b/luci-app-honk/root/etc/honk/doona/assets/Dns-muAKZqBa.js new file mode 100644 index 000000000..3c1300c4b --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Dns-muAKZqBa.js @@ -0,0 +1 @@ +import{r as e,j as s}from"./vendor-react-64fcanlc.js";import{b$ as a,u as t,aa as n,ad as r,ag as l,ac as i,bD as d,av as o,F as c,ap as u,$ as m,da as h,a7 as p,dc as g,a0 as x,a1 as y,w as f,j as b,de as j,aC as v,V as w,dk as _,c7 as N,dl as T,bK as S,dh as q,a8 as C,di as k,b4 as R,c6 as M,aR as F,au as A,D,P as L,dm as P,dn as W,dp as E,Q as O,G as U,aQ as H,T as B,dq as K,bQ as Q,dr as $,O as I,ds as V,aP as G,bs as z,Z as X,aN as Y,dt as Z,bB as J,dj as ee}from"./index-BgFj_VXE.js";import{A as se}from"./AddCircle-prR7q573.js";import{D as ae}from"./Delete-DA-ArqRQ.js";import{Q as te,R as ne,z as re,T as le,V as ie,F as de,C as oe,L as ce,X as ue,Y as me,D as he}from"./activity-D06xJ7oH.js";import{q as pe,f as ge,j as xe,k as ye,S as fe,L as be,A as je}from"./logs-BxISynQ4.js";import{T as ve}from"./Tabs-CD2lZase.js";import{T as we}from"./Toolbar-CIBfeuEz.js";import{D as _e}from"./Table-Dprh3Btz.js";import{T as Ne}from"./TimeCell-B4WLB8Ou.js";import{$ as Te}from"./SearchList-Bhc2_bS4.js";import{c as Se,d as qe,e as Ce}from"./files-Dt8K7QfP.js";import{c as ke,l as Re}from"./format-s2EANuUb.js";import{d as Me}from"./nav-KYKfR_0p.js";import{a as Fe,u as Ae,R as De}from"./useQuickRule-fWQicp9K.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./Virtualizer-CZl-q5wo.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";import"./SearchSelect-CO6FsBaz.js";import"./flows-xKlsDqlH.js";function Le(e,s,a,t,r){return{domain:e,dip:null,sip:(r&&n(r))??null,outbound:null,matched:null,dns:{type:s,answers:Fe(a),upstream:t,query:{name:e,type:s}}}}const Pe=(e,s,a)=>({domain:null,dip:e,sip:null,outbound:null,matched:null,dns:{type:a,answers:[e],upstream:null,query:{name:s,type:a}}}),We={forced:"dns.route.forced","dns.routing":"dns.route.rules",default:"dns.route.default"};function Ee(e,s){return{fields:[[s("ui.state"),e.status],[s("ui.upstream"),e.upstream??"—"],[s("dns.routeSource"),r(We,e.route.source,s)],[s("dns.routeRule"),e.route.rule??"—"],[s("ui.elapsed"),ke(e.elapsed_ms,s)]],answers:(e.answers??[]).map(e=>s("dns.answer",{name:e.name,type:e.type,ttl:e.ttl,data:e.data})),cacheText:s(e.cached?"dns.hit":"dns.miss"),cacheTone:e.cached?void 0:"warn"}}function Oe(e,s,a){return e?a instanceof d&&503===a.status?"unavailable":s?"ready":a?"error":"loading":"unlisted"}const Ue=[{id:"full",label:"rule.kind.domain"},{id:"suffix",label:"rule.kind.domainSuffix"},{id:"keyword",label:"rule.kind.domainKeyword"},{id:"regex",label:"dns.matchRegex"}],He=e=>e.trim().toLowerCase().replace(/\.$/,"");function Be(e,s){if(!s.trim())return()=>!0;if("regex"===e){const e=function(e){try{return new RegExp(e,"iu")}catch{return null}}(s);return e&&(s=>e.test(He(s)))}if("keyword"===e){const e=s.trim().toLowerCase();return s=>He(s).includes(e)}const a=He(s),t="suffix"===e&&a.startsWith("."),n=t?a.slice(1):a;return n?"full"===e?e=>He(e)===n:e=>{const s=He(e);return s.endsWith("."+n)||!t&&s===n}:null}function Ke({go:s,query:n}){const r=c(),l=u(),i=m(),d=e.useMemo(()=>new URLSearchParams(n),[n]),[o,v]=e.useState(d.get("domain")??""),[w,_]=e.useState(d.get("type")??"A"),[N,T]=e.useState(!1);h(d.get("domain"),e=>v(e??"")),h(d.get("type"),e=>_(e??"A"));const[S,q]=e.useState(null),{busy:C,error:k,run:R}=p({rethrow:!0}),M=i.data?.resources,F=e.useMemo(()=>function(e,s,a,t,n,r){const l=s?.dns_query.record_types??[],i="all"===a?l.length>0:l.includes(a);return{types:l,choices:[...l.map(e=>({id:e,label:e})),{id:"all",label:r("dns.allTypes")}],disabled:n||!s?.dns_query.available||!i||!t.trim(),reason:!s||n?null:s.dns_query.available?i?null:r("all"===a?"dns.noTypes":"dns.typeUnsupported"):r("dns.queryUnavailable"),showCache:!!s?.dns_cache.available,cards:e?.results.map(s=>({id:s.type,title:`${e.domain} ${s.type}`,...Ee(s,r),seed:Le(e.domain,s.type,s.answers??[],s.upstream,null),answerSeeds:(s.answers??[]).map(a=>Fe([a]).length?{address:a.data,seed:Pe(a.data,e.domain,s.type)}:null)}))??[],tabs:Me(s).map(e=>({id:e.id,label:r(e.titleKey)}))}}(S,M,w,o,!!C,r),[S,M,w,o,C,r]),A=F.tabs.map(e=>e.id),D=d.has("domain")||d.has("device"),L=A.includes("log")?D?"log":"stats":A.includes("query")?"query":A[0]??"query",P=g(n,A,L),W=x(M,"config",{whileLoading:!1}),E=y("query"===P&&W&&x(M,"dns_query",{whileLoading:!1})),O=e.useMemo(()=>W?function(e,s){const n=[...new Set((e??[]).flatMap(e=>e.content?a(e.content).map(t):[]))];return n.length?[{id:"",label:s("dns.upstreamAuto")},...n.map(e=>({id:e,label:e}))]:[]}(E.data?.sources,r):[],[W,E.data,r]),[U,H]=e.useState(""),B=O.some(e=>e.id===U)?U:"";E.data&&U&&!B&&H("");const K=async(e={domain:o,type:w})=>{try{await R("query",async s=>{const a=await pe(l.dnsQuery,e.domain.trim(),"all"===e.type?F.types:[e.type],M?.dns_query.limits?.max_types_per_request??1,s,N?"bypass":"normal",B||void 0);return s.aborted||q(a),a})}catch{}},Q=x(M,"dns_query",{whileLoading:!1})&&F.types.length>0,$=Ae(s,{queryAgain:Q?e=>{const a=F.types.includes(e.type)?e.type:"all";s("dns",f("",{tab:"query",domain:e.name.replace(/\.$/,""),type:a,run:"1"}))}:void 0}),I=d.has("run")&&M?n:null,V=e.useEffectEvent(e=>{const a=new URLSearchParams(e);s("dns",f(e,{run:null}),{replace:!0}),K({domain:a.get("domain")??"",type:a.get("type")??"A"})});return e.useEffect(()=>{null!==I&&V(I)},[I]),{...F,rule:{...$,label:e=>r(x(M,"dns_rules",{whileLoading:!1})?"dns.addRequestRuleFor":"dns.addRoutingRuleFor",{domain:e})},domain:o,setDomain:v,type:w,setType:_,bypassCache:N,setBypassCache:T,upstreams:O,upstream:B,setUpstream:H,pending:"query"===C,queryError:k,submit:()=>{K()},setTab:e=>s("dns",j(n,e,M&&!D?L:null)),tab:P,filterDomain:d.get("domain")??"",filterDevice:d.get("device")??"",cacheHref:A.includes("cache")?b("dns",{tab:"cache"}):null,logHref:(e,s)=>b("dns",{tab:"log",[e]:s}),logLinks:[...x(M,"dns_rules",{whileLoading:!1})?[{id:"rules",label:r("rule.dnsTitle"),onAction:()=>s("rules","tab=dns")}]:[],...M?.runtime_settings.available?[{id:"recording",label:r("ui.recordingSettings"),onAction:()=>s("settings","card=runtime")}]:[]],logEnabled:M?.dns_log.available,viewCache:()=>s("dns",f(n,{tab:"cache",domain:S?.domain??""})),clearCacheFilter:()=>s("dns",f(n,{tab:"cache",domain:null}))}}function Qe(s){const a=c(),t=v[w()],n=xe(!T()),{contains:r}=Te({sensitivity:"base"}),i=e.useMemo(()=>function(e,s,a,t,n,r,i){const d=s?.dns_cache,o=(e?.entries??[]).filter(e=>!a||i(e.domain,a));return{fields:[[r("dns.entries"),e?l(e.total,n):"—"]],coverage:e?["positive","negative","persistent"].filter(s=>!e.coverage[s]).map(e=>({id:e,text:"persistent"===e?r("dns.memoryOnly"):r("ui.valuePair",{label:r("positive"===e?"dns.positive":"dns.negative"),value:r("dns.notCovered")})})):[],deleteBy:{name:!!d?.available&&!0===d.delete_name,entry:!!d?.available&&!0===d.delete_entry},filterText:a?r("dns.cacheFilter",{domain:a}):"",confirmationText:e?r("dns.flushConfirm",{n:e.total}):r("dns.flushConfirmAll"),flushDisabled:!!t||!s?.dns_cache.available||!s.dns_cache.flush,flushReason:!d||t||d.available&&d.flush?null:r("dns.flushUnsupported"),deleteReason:!(d&&!t&&o.length>0)||d.available&&d.delete_entry?null:r("dns.deleteUnsupported"),empty:r(s?.dns_cache.available&&s.dns_cache.read?"dns.empty":"dns.cacheUnavailable"),rows:o.map(e=>({id:e.entry_id,domain:e.domain,type:e.type,status:e.status,expiresAt:e.expires_at,staleUntil:e.stale_until,deleteLabel:r("dns.deleteEntry",{domain:e.domain,type:e.type}),seed:Le(e.domain,e.type,[],null,null),pending:t===e.entry_id,disabled:!!t||!s?.dns_cache.available||!s.dns_cache.delete_entry}))}}(n.cache.data,n.capabilities.data?.resources,s,n.busy,t,a,r),[n.cache.data,n.capabilities.data,s,n.busy,t,a,r]),[d,o]=e.useState("suffix"),[u,m]=e.useState(s),[p,g]=e.useState("all");h(s,m);const x=[...new Set([...n.capabilities.data?.resources.dns_query.record_types??[],...(n.cache.data?.entries??[]).map(e=>e.type)])],y=e.useMemo(()=>({kind:d,text:u}),[d,u]),f=_(y,250),b=f!==y,j=n.cache.data?.entries,N="full"===d&&!!u.trim()&&i.deleteBy.name,{matches:S,error:q,pending:M}=function(s,a,t){const n=e.useMemo(()=>(s??[]).filter(e=>"all"===t||e.type===t),[s,t]),r="regex"===a.kind&&!!a.text.trim(),[l,i]=e.useState(null);e.useEffect(()=>{if(!r)return;const e=new Worker(new URL(""+new URL("match.worker-B2aIccpg.js",import.meta.url).href,import.meta.url),{type:"module"});let s,t=!0;const l=(r,l)=>{t&&(t=!1,clearTimeout(s),e.terminate(),i({candidates:n,pattern:a,matches:r?.map(e=>n[e])??[],error:l??(null===r?"dns.invalidRegex":void 0)}))};return e.onmessage=r=>{t&&("ready"===r.data?(s=window.setTimeout(()=>l([],"dns.regexTimeout"),1e3),e.postMessage({text:a.text,names:n.map(e=>e.domain)})):l(r.data))},e.onerror=e=>{e.preventDefault(),l([],"dns.matchFailed")},()=>{t=!1,clearTimeout(s),e.terminate()}},[r,n,a]);const d=e.useMemo(()=>{if(r)return null;const e=Be(a.kind,a.text);return{matches:e?n.filter(s=>e(s.domain)):[],error:e?void 0:"dns.invalidName"}},[r,n,a]);if(d)return{...d,pending:!1};const o=l?.candidates===n&&l.pattern===a;return{matches:o?l.matches:[],error:o?l.error:void 0,pending:!o}}(j,f,p),{remove:F}=n,A=e.useCallback(e=>{F(e).then(e=>e&&C("positive",a("dns.deleted",{n:e.deleted})),e=>C("negative",a("dns.deleteFailed"),k(e,a)))},[F,a]);return{...i,matchKind:d,matchText:u,matchType:p,setMatchType:g,setMatchKind:o,setMatchText:e=>{const s=function(e,s){return s.startsWith("*.")?{kind:"suffix",text:s.slice(2)}:{kind:e,text:s}}(d,e);o(s.kind),m(s.text)},matchKinds:Ue.map(e=>({id:e.id,label:a(e.label)})),matchTypes:[{id:"all",label:a("dns.allTypes")},...x.map(e=>({id:e,label:e}))],matchError:q?a(q):void 0,matchReason:i.deleteBy.entry||!i.deleteBy.name||N||n.busy?null:a("dns.matchNameOnly"),matchPending:"delete-match"===n.busy,matchDisabled:!!n.busy||b||M||!!q||!N&&!S.length||!u.trim()&&"all"===p||!(i.deleteBy.entry||N),matchConfirmation:N?a("dns.deleteNameConfirm",{name:u.trim(),type:"all"===p?a("dns.allTypes"):p}):a("dns.deleteMatchingConfirm",{n:S.length}),matchListed:S.slice(0,100),matchMore:S.length>100?a("dns.matchMore",{n:S.length-100}):null,removeMatching:async()=>{try{if(N){const e=await n.removeName({name:u.trim(),type:"all"===p?void 0:[p]});return void(e&&C("positive",a("dns.deleted",{n:e.deleted})))}const e=await n.removeMany(S.map(e=>e.entry_id));if(!e)return;e.failed?e.deleted?C("negative",a("dns.deletePartial",{deleted:e.deleted,n:e.failed})):C("negative",a("dns.deleteAllFailed",{n:e.failed})):C("positive",a("dns.deleted",{n:e.deleted}))}catch(e){return a("dns.deleteMatchingFailed",{error:R(e,a)})}},error:n.cache.error,retry:n.cache.refetch,loading:(n.cache.loading||n.capabilities.loading)&&!n.cache.data,flushPending:"flush"===n.busy,remove:A,flush:async()=>{try{const e=await n.flush();e&&C("positive",a("dns.flushed",{matched:e.matched,deleted:e.deleted}))}catch(e){return a("dns.flushFailed",{error:R(e,a)})}},abortFlush:()=>{n.cancel(),n.cache.refetch()}}}function $e(s){const a=c(),t=v[w()],[n,r]=F(),[d,u]=e.useState(!1),m=ye(s,!r&&d);m.data&&!d&&u(!0);const h=e.useMemo(()=>function(e,s,a){if(!e)return null;const{usage:t,coverage:n}=e,r=e=>{const a=o(e);return null===a?"—":l(a,s)},d=t?.entry_capacity??null,c=t&&null!==d?i(t.entries,d):null;return{note:t?null===d?a("dns.chart.usageFacts",{entries:r(t.entries)}):void 0:a("dns.chart.cacheNote",{n:e.total}),usage:t&&null!==d&&null!==c?{pct:c,value:c>0&&c<.5?"<"+a("ui.percent",{n:1}):a("ui.percent",{n:Math.round(c)}),facts:[{label:a("dns.chart.entries"),value:r(t.entries)},{label:a("dns.chart.capacity"),value:r(d)}]}:null,coverage:a("dns.chart.coverage",{kinds:[n.positive&&a("dns.chart.positive"),n.negative&&a("dns.chart.negative")].filter(Boolean).join(a("ui.listSeparator")),persistent:a(n.persistent?"dns.chart.persistent":"dns.chart.memoryOnly")})}}(m.data,t,a),[m.data,t,a]);return{ref:n,card:h,state:Oe(s,!!h,m.error),error:m.error,retry:m.refetch}}function Ie(s,a,t){const n=c(),r=v[w()],[l,i]=e.useState(a);h(a,i);const[o,g]=e.useState("all"),[x,y]=e.useState(t);h(t,y);const f=u(),b=m(),j=_(x),k=N(j),R=""!==j.trim()&&!k,[F,A]=e.useState(k);R||k===F||A(k);const D={name:_(l),type:o,src:R?F:k},L=JSON.stringify(D),P=ge(D,!0===s,!T()),[W,E]=e.useState(null),[O,U]=e.useState(!1),H=p({scope:L});h(L,()=>E(null));const{data:B,newerWaiting:K}=e.useMemo(()=>function(e,s){const a=s&&new Set(s.records.map(e=>e.id));return{data:s??e,newerWaiting:!!a&&!!e?.records.some(e=>!a.has(e.id))}}(P.data,W),[P.data,W]),Q=()=>{H.run("older",async e=>{if(!B?.next_cursor)return;let s;E(B);try{s=await f.dnsLog({name:D.name.trim()||void 0,type:"all"===o?void 0:o,src:D.src,cursor:B.next_cursor,limit:B.limit},e)}catch(a){if(!(a instanceof d)||e.aborted)throw a;const s=503===a.status&&"snapshot_unavailable"===a.code&&null!==a.retryAfter;if(!(410===a.status&&"snapshot_expired"===a.code||400===a.status&&"invalid_request"===a.code)&&!s)throw a;return s&&await M(a.retryAfter,e),E(null),P.refetch(),void C("info",n("dns.olderExpired"))}e.aborted||E(function(e,s){const a=new Set(e.records.map(e=>e.id));return{...e,records:[...e.records,...s.records.filter(e=>!a.has(e.id))],next_cursor:s.next_cursor}}(B,s))})},$=()=>{H.cancel(),E(null);const e=P.refetch();e&&(U(!0),e.finally(()=>U(!1)))},[I,V]=e.useState(null),G=S(q),z=b.data?.resources.dns_query.record_types,X=e.useMemo(()=>function(e,s,a,t=[]){const n=e?.records??[];return{choices:[{id:"all",label:a("dns.allTypes")},...[...new Set([...t,...n.map(e=>e.question.type)])].map(e=>({id:e,label:e}))],total:e?a("dns.logTotal",{n:e.total}):"",totalHelp:e?{title:a("dns.logTotal",{n:e.total}),text:a("dns.logTotalHelp")}:null,loaded:e?.next_cursor?a("dns.logLoaded",{n:n.length}):"",empty:a(void 0===s?"ui.loading":s?"dns.logEmpty":"dns.logUnavailable"),rows:n.map(e=>({id:e.id,observedAt:e.observed_at,name:e.question.name,type:e.question.type,seed:Le(e.question.name,e.question.type,e.answers,e.upstream,e.src),source:e.src??"—",resultError:"NOERROR"!==e.status,result:"NOERROR"!==e.status?e.status:e.answers.map(e=>e.data).join(", ")||"—",cached:e.cached,upstream:e.cached?a("dns.hit"):e.upstream??"—",elapsed:ke(e.elapsed_ms,a)}))}}(B,s,n,z),[B,s,n,z]),Y=e.useMemo(()=>function(e,s,a,t){const n=e?.records.find(e=>e.id===s);if(!n)return null;const r=Ee(n,t);return{id:n.id,title:n.question.name,answers:r.answers,fields:[[t("ui.type"),n.question.type],[t("ui.device"),n.src??"—"],r.fields[0],[t("ui.cache"),r.cacheText],...r.fields.slice(1),[t("ui.time"),Re(n.observed_at,a)]]}}(B,I,r,n),[B,I,r,n]);return{...X,detail:Y,detailTitle:Y?.title??"",name:l,newerWaiting:K,setName:i,type:o,setType:g,src:x,setSrc:y,srcError:R?n("ui.invalidIp"):void 0,selected:Y?I:null,setSelected:V,wide:G,error:H.error??P.error,loading:P.loading&&!B,hasOlder:!!B?.next_cursor,loadingOlder:!!H.busy,loadOlder:Q,refreshing:O,refresh:$,retry:H.error?Q:$,export:()=>{return qe(Ce("dns-log","csv"),(e=B?.records??[],[Se(["id","observed_at","src","name","type","status","cached","upstream","route_source","route_rule","elapsed_ms","answers"]),...e.map(e=>Se([e.id,e.observed_at,e.src,e.question.name,e.question.type,e.status,e.cached?"true":"false",e.upstream,e.route.source,e.route.rule,e.elapsed_ms,e.answers.map(e=>e.data).join(" ")]))].join("\n")+"\n"),"text/csv;charset=utf-8");var e}}}const Ve={cached:"dns.outcome.cached",answered:"dns.outcome.answered",nxdomain:"dns.outcome.nxdomain",failed:"dns.outcome.failed"};function Ge({enabled:a,links:t}){const n=c(),{log:r,cacheListed:l,configHref:i}=function(s){const a=ge({},!0===s,!T()),t=m().data?.resources,n=x(t,"config",{whileLoading:!1}),r=y(!0===s&&n),l=r.data?.sources,i=e.useMemo(()=>n&&l?te(l,"dns"):null,[n,l]);return{log:a,cacheListed:x(t,"dns_cache",{whileLoading:!1})&&!0===t?.dns_cache.read,configHref:i}}(a);if(!1===a)return s.jsx(A,{children:n("dns.logUnavailable")});if(void 0===a)return null;const d=r.error,o=r.data?null:d?s.jsx(A,{children:n("dns.chart.noLog")}):s.jsx(D,{}),u=d?s.jsx(L,{error:d,onRetry:r.refetch}):ne(r.data,r.limit)?s.jsx("p",{className:"rp-note",children:n("dns.chart.shortPage",{n:r.data.records.length,limit:r.limit})}):null;return s.jsx(Xe,{records:r.data?.records??ze,pending:o,notice:u,cacheListed:l,links:{...t,config:i}})}const ze=[];function Xe({records:a,pending:t,notice:n,cacheListed:r,links:l}){const i=c(),d=re(),o=v[w()],u=e.useMemo(()=>le(a,o),[a,o]),m={cached:d.positive,answered:d.cat[2],nxdomain:d.notice,failed:d.negative},h=e=>i("ui.percent",{n:null===e?0:Math.round(100*e)}),p=(e,s)=>{const a=s?e/s:0;return e>0&&a<.005?"<"+i("ui.percent",{n:1}):e.995?">"+i("ui.percent",{n:99}):h(a)},g=e=>({id:e.id,value:e.value,color:m[e.outcome],lines:[e.name,ke(e.value,i),i(Ve[e.outcome])]}),x=t??(u.total<5?s.jsx(A,{children:i("dns.chart.tooFew")}):null),y=[{label:i("dns.chart.median"),value:ke(u.typical,i),icon:s.jsx(P,{}),tint:"c1"},{label:i("dns.chart.p95"),value:ke(u.slowest,i),icon:s.jsx(ie,{}),tint:"c4"},{label:i("dns.chart.cacheRate"),value:h(u.cacheRate),icon:s.jsx(W,{}),tint:"c2"},{label:i("dns.chart.failureRate"),value:h(u.failureRate),icon:s.jsx(E,{}),tint:"c5",tone:u.counts.failed?"negative":void 0}];return s.jsxs("div",{className:"rp-chart-page",children:[n,!x&&s.jsx(de,{facts:y}),s.jsxs("div",{className:"rp-g21",children:[s.jsx(O,{title:i("dns.chart.speed",{n:u.samples.length}),note:x?void 0:i("dns.chart.sample",{n:u.total,uncached:u.uncached,upstream:u.samples.length}),aside:l.config&&s.jsx(U,{appearance:"link",href:l.config,children:i("dns.openConfig")}),children:x??s.jsxs(s.Fragment,{children:[s.jsx(oe,{label:i("dns.chart.speed",{n:u.samples.length}),points:u.samples.map(g),marks:null!==u.typical&&null!==u.slowest?[{value:u.typical,label:i("dns.chart.typical",{value:ke(u.typical,i)})},{value:u.slowest,label:i("dns.chart.slowest",{value:ke(u.slowest,i)})}]:[],rows:u.upstreams.map(e=>({id:e.upstream,label:e.upstream,detail:i("dns.chart.upstream",{n:e.samples.length,median:ke(e.median,i)}),points:e.samples.map(g),mark:e.median})),fmt:e=>ke(e,i)}),s.jsxs("div",{className:"rp-legend",children:[["answered","nxdomain","failed"].map(e=>s.jsx(ce,{swatch:m[e],label:i(Ve[e])},e)),s.jsx(ce,{swatch:s.jsx("i",{className:"rp-median-key","aria-hidden":"true"}),label:i("dns.chart.medianKey")})]})]})}),s.jsx(O,{title:i("dns.chart.outcomes"),children:x??s.jsx(ue,{label:i("dns.chart.outcomes"),shares:me.map(e=>({id:e,label:i(Ve[e]),count:u.counts[e],color:m[e],text:i("dns.chart.share",{n:u.counts[e],share:p(u.counts[e],u.total)})}))})})]}),s.jsxs("div",{className:"rp-g21",children:[s.jsx(Ze,{analysis:u,standIn:x,logHref:l.log}),s.jsx(Ye,{listed:r,href:l.cache})]})]})}function Ye({listed:e,href:a}){const t=c(),n=re(),{ref:r,...l}=$e(e);return s.jsx(O,{ref:r,title:t("dns.chart.cache"),note:"ready"===l.state?l.card?.note:void 0,aside:e&&a&&s.jsx(U,{appearance:"link",href:a,children:t("dns.viewCache")}),children:"unlisted"===l.state?s.jsx(A,{children:t("dns.cacheUnavailable")}):"unavailable"===l.state?s.jsx(A,{children:t("dns.cacheBusy")}):"error"===l.state?s.jsx(L,{error:l.error,onRetry:l.retry}):l.card?s.jsxs(s.Fragment,{children:[l.card.usage&&s.jsxs("div",{className:"rp-form",children:[s.jsx(H,{label:t("dns.chart.usage"),value:l.card.usage.value,pct:l.card.usage.pct,color:n.accent}),s.jsx(de,{facts:l.card.usage.facts})]}),s.jsx("p",{className:"rp-note",children:l.card.coverage})]}):s.jsx(D,{})})}function Ze({analysis:a,standIn:t,logHref:n}){const r=c(),l=re(),[i,d]=e.useState("device"),o="device"===i?a.devices:a.domains,u=o.top[0]?.count??1;return s.jsx(O,{title:r("dns.chart.ranking"),aside:!t&&s.jsx(fe,{label:r("dns.chart.ranking"),value:i,onChange:d,items:[["device",r("dns.chart.byDevice")],["domain",r("dns.chart.byDomain")]]}),children:t??s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"rp-list",children:o.top.map(e=>s.jsx(H,{label:null===e.key?r("dns.chart.resolver"):s.jsx(U,{appearance:"link",href:n("device"===i?"device":"domain",e.key),children:s.jsx(B,{children:e.key})}),value:r("dns.chart.count",{n:e.count}),pct:e.count/u*100,color:"device"===i?l.cat[0]:l.cat[3]},e.key??""))}),o.rest>0&&s.jsx("p",{className:"rp-note",children:r("dns.chart.rest",{n:o.rest})})]})})}function Je(e){const a=c(),t=Ke(e),n=s.jsxs(s.Fragment,{children:[t.queryError&&s.jsx(L,{error:t.queryError,onRetry:t.submit,message:e=>a("dns.queryFailed",{error:e})}),s.jsx("form",{className:V(),onSubmit:e=>{e.preventDefault(),t.submit()},children:s.jsx(K,{reason:t.reason,children:s.jsxs(we,{children:[s.jsx(Q,{side:!0,label:a("ui.domain"),value:t.domain,onChange:t.setDomain,width:280,placeholder:"example.com"}),s.jsx(be,{label:a("ui.type"),side:!0,value:t.type,onChange:t.setType,items:t.choices}),t.upstreams.length>0&&s.jsx(be,{label:a("ui.upstream"),side:!0,value:t.upstream,onChange:t.setUpstream,items:t.upstreams}),s.jsx($,{isSelected:t.bypassCache,onChange:t.setBypassCache,children:a("dns.bypassCache")}),s.jsx(I,{accent:!0,type:"submit",isPending:t.pending,isDisabled:t.disabled,children:a("dns.query")})]})})}),t.cards.length>0&&s.jsx("div",{className:"rp-col",children:t.cards.map(e=>s.jsxs(O,{className:"rp-col",children:[s.jsxs("div",{className:"rp-row",children:[s.jsxs("div",{className:"rp-cluster",children:[s.jsx("h2",{className:"rp-h3",children:e.title}),s.jsx(G,{tone:e.cacheTone,children:e.cacheText})]}),s.jsxs("div",{className:"rp-cluster",children:[t.rule.canAdd(e.seed)&&s.jsx(I,{quiet:!0,small:!0,onPress:()=>t.rule.open(e.seed),children:a("rule.add")}),t.showCache&&s.jsx(I,{quiet:!0,small:!0,onPress:t.viewCache,children:a("dns.viewCache")})]})]}),s.jsx(z,{inline:!0,items:e.fields}),e.answers.length?s.jsx("div",{className:"rp-list",children:e.answers.map((n,r)=>{const l=e.answerSeeds[r];return s.jsxs("div",{className:"rp-cluster",children:[s.jsx("div",{className:"rp-code",children:n}),l&&t.rule.canAdd(l.seed)&&s.jsx(I,{quiet:!0,small:!0,label:a("dns.addRuleFor",{value:l.address}),onPress:()=>t.rule.open(l.seed),children:a("rule.add")})]},r)})}):s.jsx(A,{children:a("dns.noAnswers")})]},e.id))})]}),r={stats:s.jsx(Ge,{enabled:t.logEnabled,links:{cache:t.cacheHref,log:t.logHref}}),query:n,cache:s.jsx(es,{domain:t.filterDomain,clearFilter:t.clearCacheFilter,rule:t.rule}),log:s.jsx(ss,{enabled:t.logEnabled,initialName:t.filterDomain,initialSrc:t.filterDevice,links:t.logLinks,rule:t.rule})};return s.jsxs("div",{className:"rp-page",children:[s.jsx(ve,{page:!0,keepMounted:!0,label:a("nav.dns"),items:t.tabs.map(e=>({...e,content:r[e.id]})),value:t.tab,onChange:t.setTab}),s.jsx(De,{dialog:t.rule.dialog})]})}function es({domain:a,clearFilter:t,rule:n}){const r=c(),l=Qe(a),{remove:i}=l,d=e.useMemo(()=>[{id:"q",label:r("ui.domain"),text:"wrap",minWidth:320,isRowHeader:!0,render:e=>s.jsx("span",{className:"rp-code",children:e.domain})},{id:"t",label:r("ui.type"),minWidth:88,grow:0,drop:3,render:e=>e.type},{id:"s",label:r("ui.state"),minWidth:128,grow:0,render:e=>e.status},{id:"e",label:r("dns.expires"),minWidth:128,drop:2,render:e=>s.jsx(Ne,{at:e.expiresAt})},{id:"st",label:r("dns.staleUntil"),minWidth:128,drop:1,render:e=>s.jsx(Ne,{at:e.staleUntil})},{id:"a",actions:!0,label:r("ui.actions"),minWidth:104,grow:0,render:e=>s.jsxs("div",{className:"rp-cluster nowrap",children:[s.jsx(I,{quiet:!0,icon:!0,small:!0,label:n.label(e.domain),isDisabled:!n.canAdd(e.seed),onPress:()=>n.open(e.seed),children:s.jsx(se,{})}),s.jsx(I,{quiet:!0,icon:!0,small:!0,label:e.deleteLabel,isPending:e.pending,isDisabled:e.disabled,onPress:()=>i(e.id),children:s.jsx(ae,{})})]})}],[r,i,n]);return s.jsxs(s.Fragment,{children:[l.error&&s.jsx(L,{error:l.error,onRetry:l.retry}),s.jsxs(we,{page:!0,className:"top",children:[s.jsx(z,{row:!0,items:l.fields}),l.coverage.map(e=>s.jsx(G,{tone:"warn",children:e.text},e.id)),l.filterText&&s.jsx(I,{onPress:t,children:l.filterText}),s.jsx("span",{className:"rp-grow"}),s.jsx("div",{className:"rp-col",children:s.jsx(K,{reason:l.flushReason,children:s.jsx(ee,{label:r("dns.flushAll"),confirmationText:l.confirmationText,isPending:l.flushPending,isDisabled:l.flushPending||l.flushDisabled,onConfirm:l.flush,onAbort:l.abortFlush})})})]}),(l.deleteBy.name||l.deleteBy.entry)&&s.jsx(K,{reason:l.matchReason,children:s.jsxs(we,{page:!0,children:[s.jsx(be,{side:!0,label:r("rule.kind"),value:l.matchKind,onChange:e=>l.setMatchKind(e),items:l.matchKinds}),s.jsx(Q,{side:!0,label:r("dns.pattern"),value:l.matchText,onChange:l.setMatchText,error:l.matchError,help:"regex"===l.matchKind?{title:r("dns.pattern"),text:r("dns.regexHelp")}:void 0,width:280,placeholder:"example.com"}),s.jsx(be,{side:!0,label:r("ui.type"),value:l.matchType,onChange:l.setMatchType,items:l.matchTypes}),s.jsx(ee,{label:r("dns.deleteMatching"),confirmationText:l.matchConfirmation,details:s.jsxs("ul",{className:"rp-impact",children:[l.matchListed.map(e=>s.jsx("li",{children:s.jsxs("span",{className:"rp-cluster nowrap",children:[s.jsx(B,{className:"rp-code",children:e.domain}),s.jsx("span",{className:"rp-note",children:e.type})]})},e.entry_id)),l.matchMore&&s.jsx("li",{className:"rp-note",children:l.matchMore})]}),isPending:l.matchPending,isDisabled:l.matchDisabled,onConfirm:l.removeMatching,onAbort:l.abortFlush})]})}),s.jsx(K,{reason:l.deleteReason,children:s.jsx(_e,{label:r("ui.cache"),height:442,fit:!0,rows:l.rows,loading:l.loading,empty:l.empty,cols:d})})]})}function ss({enabled:a,initialName:t,initialSrc:n,links:r,rule:l}){const i=c(),d=Ie(a,t,n),o=e.useMemo(()=>[{id:"t",label:i("ui.time"),minWidth:140,grow:0,render:e=>s.jsx(Ne,{at:e.observedAt})},{id:"q",label:i("ui.domain"),minWidth:200,grow:2,isRowHeader:!0,render:e=>s.jsx(B,{children:e.name})},{id:"ty",label:i("ui.type"),minWidth:88,grow:0,drop:3,render:e=>e.type},{id:"s",label:i("ui.device"),minWidth:128,drop:2,render:e=>s.jsx(B,{className:"rp-code",children:e.source})},{id:"r",label:i("dns.result"),minWidth:160,grow:2,render:e=>e.resultError?s.jsx(X,{small:!0,tone:"err",children:e.result}):s.jsx(B,{className:"rp-code",children:e.result})},{id:"u",label:i("ui.upstream"),minWidth:128,drop:1,render:e=>e.cached?s.jsx(X,{small:!0,tone:"ok",children:e.upstream}):s.jsx(B,{children:e.upstream})},{id:"e",label:i("ui.elapsed"),minWidth:88,grow:0,drop:4,render:e=>e.elapsed},{id:"a",actions:!0,label:i("ui.actions"),minWidth:88,grow:0,render:e=>s.jsx(I,{quiet:!0,icon:!0,small:!0,label:l.label(e.name),isDisabled:!l.canAdd(e.seed),onPress:()=>l.open(e.seed),children:s.jsx(se,{})})}],[i,l]);return s.jsxs(s.Fragment,{children:[s.jsxs(we,{page:!0,children:[s.jsx(Q,{search:!0,label:i("ui.domain"),value:d.name,onChange:d.setName,placeholder:i("dns.logFilterHint"),width:240}),s.jsx(be,{label:i("ui.type"),side:!0,value:d.type,onChange:d.setType,items:d.choices}),s.jsx(Q,{search:!0,label:i("ui.device"),value:d.src,onChange:d.setSrc,error:d.srcError,placeholder:"10.0.0.12",width:160}),d.total&&s.jsx(Y,{help:d.totalHelp,children:s.jsx("span",{className:"rp-label",children:d.total})}),d.loaded&&s.jsx("span",{className:"rp-label",children:d.loaded}),s.jsx("span",{className:"rp-grow"}),s.jsx(je,{actions:[{id:"refresh",label:i("ui.refresh"),icon:s.jsx(Z,{className:"rp-spin-on-press"}),isPending:d.refreshing,onAction:d.refresh},{id:"export",label:i("dns.exportLog"),icon:s.jsx(he,{}),isDisabled:!d.rows.length,onAction:d.export},...r,...d.hasOlder?[{id:"older",label:i("dns.loadOlder"),isPending:d.loadingOlder,onAction:d.loadOlder}]:[]]})]}),d.error&&s.jsx(L,{error:d.error,onRetry:d.retry}),d.newerWaiting&&s.jsx("p",{className:"rp-note",children:i("dns.newerWaiting")}),s.jsxs("div",{className:"rp-with-panel","data-open":d.detail?"":void 0,children:[s.jsx(_e,{label:i("dns.log"),rowDetail:!0,height:520,rows:d.rows,selected:d.selected,onSelect:d.setSelected,selectOnFocus:d.wide,loading:d.loading,empty:d.empty,cols:o}),s.jsx(J,{open:!!d.detail,title:d.detailTitle,onClose:()=>d.setSelected(null),children:d.detail&&s.jsxs(s.Fragment,{children:[s.jsx(z,{inline:!0,items:d.detail.fields}),d.detail.answers.length?s.jsx("div",{className:"rp-list",children:d.detail.answers.map((e,a)=>s.jsx("div",{className:"rp-code",children:e},a))}):s.jsx(A,{children:i("dns.noAnswers")})]})})]}),d.hasOlder&&s.jsx("div",{className:"rp-narrow-only",children:s.jsx("div",{className:"rp-cluster",children:s.jsx(I,{small:!0,isPending:d.loadingOlder,onPress:d.loadOlder,children:i("dns.loadOlder")})})})]})}export{Je as Dns}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Donut-Bal7IeCD.js b/luci-app-honk/root/etc/honk/doona/assets/Donut-Bal7IeCD.js deleted file mode 100644 index a15bb7963..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Donut-Bal7IeCD.js +++ /dev/null @@ -1 +0,0 @@ -import{r as an,j as K}from"./vendor-react-Bf71BWbF.js";import{u as cn,fx as fn}from"./index-BOpK0UVB.js";import{u as gn,i as hn,e as pn,C as yn}from"./layout-Bzzn7HLw.js";import{w as dn,c as T,a as mn}from"./array-C0P64tl-.js";const on=Math.abs,P=Math.atan2,k=Math.cos,vn=Math.max,rn=Math.min,C=Math.sin,F=Math.sqrt,S=1e-12,V=Math.PI,X=V/2,W=2*V;function xn(t){return t>1?0:t<-1?V:Math.acos(t)}function ln(t){return t>=1?X:t<=-1?-X:Math.asin(t)}function An(t){return t.innerRadius}function Mn(t){return t.outerRadius}function Rn(t){return t.startAngle}function Pn(t){return t.endAngle}function wn(t){return t&&t.padAngle}function Tn(t,h,x,w,v,A,p,n){var f=x-t,u=w-h,e=p-v,y=n-A,r=y*f-e*u;if(!(r*ro*o+N*N&&($=b,B=E),{cx:$,cy:B,x01:-e,y01:-y,x11:$*(v/M-1),y11:B*(v/M-1)}}function jn(){var t=An,h=Mn,x=T(0),w=null,v=Rn,A=Pn,p=wn,n=null,f=dn(u);function u(){var e,y,r=+t.apply(this,arguments),a=+h.apply(this,arguments),g=v.apply(this,arguments)-X,d=A.apply(this,arguments)-X,j=on(d-g),c=d>g;if(n||(n=e=f()),aS))n.moveTo(0,0);else if(j>W-S)n.moveTo(a*k(g),a*C(g)),n.arc(0,0,a,g,d,!c),r>S&&(n.moveTo(r*k(d),r*C(d)),n.arc(0,0,r,d,g,c));else{var m=g,i=d,l=g,M=d,R=j,I=j,$=p.apply(this,arguments)/2,B=$>S&&(w?+w.apply(this,arguments):F(r*r+a*a)),b=rn(on(a-r)/2,+x.apply(this,arguments)),E=b,L=b,s,o;if(B>S){var N=ln(B/r*C($)),O=ln(B/a*C($));(R-=N*2)>S?(N*=c?1:-1,l+=N,M-=N):(R=0,l=M=(g+d)/2),(I-=O*2)>S?(O*=c?1:-1,m+=O,i-=O):(I=0,m=i=(g+d)/2)}var q=a*k(m),z=a*C(m),G=r*k(M),H=r*C(M);if(b>S){var J=a*k(i),Q=a*C(i),Y=r*k(l),Z=r*C(l),D;if(jS?L>S?(s=U(Y,Z,q,z,a,L,c),o=U(J,Q,G,H,a,L,c),n.moveTo(s.cx+s.x01,s.cy+s.y01),LS)||!(R>S)?n.lineTo(G,H):E>S?(s=U(G,H,J,Q,r,-E,c),o=U(q,z,Y,Z,r,-E,c),n.lineTo(s.cx+s.x01,s.cy+s.y01),Et?1:h>=t?0:NaN}function En(t){return t}function Ln(){var t=En,h=Sn,x=null,w=T(0),v=T(W),A=T(0);function p(n){var f,u=(n=mn(n)).length,e,y,r=0,a=new Array(u),g=new Array(u),d=+w.apply(this,arguments),j=Math.min(W,Math.max(-W,v.apply(this,arguments)-d)),c,m=Math.min(Math.abs(j)/u,A.apply(this,arguments)),i=m*(j<0?-1:1),l;for(f=0;f0&&(r+=l);for(h!=null?a.sort(function(M,R){return h(g[M],g[R])}):x!=null&&a.sort(function(M,R){return x(n[M],n[R])}),f=0,y=r?(j-u*i)/r:0;f0?l*y:0)+i,g[e]={data:n[e],index:f,value:l,startAngle:d,endAngle:c,padAngle:m};return g}return p.value=function(n){return arguments.length?(t=typeof n=="function"?n:T(+n),p):t},p.sortValues=function(n){return arguments.length?(h=n,x=null,p):h},p.sort=function(n){return arguments.length?(x=n,h=null,p):x},p.startAngle=function(n){return arguments.length?(w=typeof n=="function"?n:T(+n),p):w},p.endAngle=function(n){return arguments.length?(v=typeof n=="function"?n:T(+n),p):v},p.padAngle=function(n){return arguments.length?(A=typeof n=="function"?n:T(+n),p):A},p}function $n({label:t,rows:h}){const x=cn(),[w,v]=fn(Math.round,120),{tip:A,showAt:p,hide:n}=gn(),[f,u]=an.useState(null),e=h.filter(i=>i.value!==null&&i.value>0),y=v?.width??0,r=v?.height??0,a=hn(e.map(i=>i.value)),g=Ln().sort(null).value((i,l)=>a[l])(e),d=jn().innerRadius(44).outerRadius(56).digits(3),j=i=>u(i),c=()=>{u(null),n()};an.useLayoutEffect(()=>{const i=f===null?void 0:g[f];if(!i||f===null){n();return}const l=e[f],[M,R]=d.centroid(i);p({x:Math.round((y/2+M)*1e4)/1e4,y:Math.round((r/2+R)*1e4)/1e4,width:y,bounds:{x:0,y:0,width:y,height:r},lines:[x("ui.valuePair",{label:l.name,value:x("ui.share",{bytes:l.text,percent:String(l.value)})})]})});const m=pn(e.length,j,c);return K.jsxs("div",{ref:w,style:{height:"100%",width:"100%",position:"relative"},onPointerLeave:m.onPointerLeave,children:[K.jsx(yn,{tip:A}),v&&K.jsx("svg",{className:"rp-activity-surface",width:y,height:r,viewBox:`0 0 ${y} ${r}`,style:{display:"block"},role:"application","aria-label":t,tabIndex:0,onFocus:m.onFocus,onBlur:m.onBlur,onKeyDown:m.onKeyDown,children:K.jsx("g",{transform:`translate(${y/2},${r/2})`,children:g.map((i,l)=>K.jsx("path",{d:d({...i,endAngle:Math.min(i.endAngle,i.startAngle+359.999*Math.PI/180)})??void 0,fill:e[l].color,stroke:"none",onPointerEnter:()=>j(l),onPointerLeave:m.onPointerLeave},e[l].name))})})]})}export{$n as DonutPlot}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Donut-ICRrmfL0.js b/luci-app-honk/root/etc/honk/doona/assets/Donut-ICRrmfL0.js new file mode 100644 index 000000000..c419570df --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Donut-ICRrmfL0.js @@ -0,0 +1 @@ +import{r as n,j as t}from"./vendor-react-64fcanlc.js";import{F as e,H as r}from"./index-BgFj_VXE.js";import{b8 as o,bg as a,bb as i,bd as l}from"./activity-D06xJ7oH.js";import{w as u,c,a as s}from"./array-C0VuvQyb.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./logs-BxISynQ4.js";import"./Select-CkiGmyVC.js";import"./format-s2EANuUb.js";const f=Math.abs,h=Math.atan2,y=Math.cos,p=Math.max,d=Math.min,x=Math.sin,g=Math.sqrt,v=1e-12,m=Math.PI,M=m/2,A=2*m;function b(n){return n>=1?M:n<=-1?-M:Math.asin(n)}function j(n){return n.innerRadius}function w(n){return n.outerRadius}function P(n){return n.startAngle}function R(n){return n.endAngle}function T(n){return n&&n.padAngle}function L(n,t,e,r,o,a,i){var l=n-e,u=t-r,c=(i?a:-a)/g(l*l+u*u),s=c*u,f=-c*l,h=n+s,y=t+f,d=e+s,x=r+f,v=(h+d)/2,m=(y+x)/2,M=d-h,A=x-y,b=M*M+A*A,j=o-a,w=h*x-d*y,P=(A<0?-1:1)*g(p(0,j*j*b-w*w)),R=(w*A-M*P)/b,T=(-w*M-A*P)/b,L=(w*A+M*P)/b,$=(-w*M+A*P)/b,B=R-v,F=T-m,I=L-v,N=$-m;return B*B+F*F>I*I+N*N&&(R=L,T=$),{cx:R,cy:T,x01:-s,y01:-f,x11:R*(o/j-1),y11:T*(o/j-1)}}function $(){var n=j,t=w,e=c(0),r=null,o=P,a=R,i=T,l=null,s=u(p);function p(){var u,c,p,j=+n.apply(this,arguments),w=+t.apply(this,arguments),P=o.apply(this,arguments)-M,R=a.apply(this,arguments)-M,T=f(R-P),$=R>P;if(l||(l=u=s()),wv)if(T>A-v)l.moveTo(w*y(P),w*x(P)),l.arc(0,0,w,P,R,!$),j>v&&(l.moveTo(j*y(R),j*x(R)),l.arc(0,0,j,R,P,$));else{var B,F,I=P,N=R,S=P,k=R,D=T,E=T,H=i.apply(this,arguments)/2,K=H>v&&(r?+r.apply(this,arguments):g(j*j+w*w)),q=d(f(w-j)/2,+e.apply(this,arguments)),C=q,V=q;if(K>v){var _=b(K/j*x(H)),z=b(K/w*x(H));(D-=2*_)>v?(S+=_*=$?1:-1,k-=_):(D=0,S=k=(P+R)/2),(E-=2*z)>v?(I+=z*=$?1:-1,N-=z):(E=0,I=N=(P+R)/2)}var G=w*y(I),J=w*x(I),O=j*y(k),Q=j*x(k);if(q>v){var U,W=w*y(N),X=w*x(N),Y=j*y(S),Z=j*x(S);if(T1?0:p<-1?m:Math.acos(p))/2),an=g(U[0]*U[0]+U[1]*U[1]);C=d(q,(j-an)/(on-1)),V=d(q,(w-an)/(on+1))}else C=V=0}E>v?V>v?(B=L(Y,Z,G,J,w,V,$),F=L(W,X,O,Q,w,V,$),l.moveTo(B.cx+B.x01,B.cy+B.y01),Vv&&D>v?C>v?(B=L(O,Q,W,X,j,-C,$),F=L(G,J,Y,Z,j,-C,$),l.lineTo(B.cx+B.x01,B.cy+B.y01),Cn?1:t>=n?0:NaN}function F(n){return n}function I({label:u,rows:f}){const h=e(),[y,p]=r(Math.round,120),{tip:d,showAt:x,hide:g}=o(),[v,m]=n.useState(null),M=f.filter(n=>null!==n.value&&n.value>0),b=p?.width??0,j=p?.height??0,w=a(M.map(n=>n.value)),P=function(){var n=F,t=B,e=null,r=c(0),o=c(A),a=c(0);function i(i){var l,u,c,f,h,y=(i=s(i)).length,p=0,d=new Array(y),x=new Array(y),g=+r.apply(this,arguments),v=Math.min(A,Math.max(-A,o.apply(this,arguments)-g)),m=Math.min(Math.abs(v)/y,a.apply(this,arguments)),M=m*(v<0?-1:1);for(l=0;l0&&(p+=h);for(null!=t?d.sort(function(n,e){return t(x[n],x[e])}):null!=e&&d.sort(function(n,t){return e(i[n],i[t])}),l=0,c=p?(v-y*M)/p:0;l0?h*c:0)+M,x[u]={data:i[u],index:l,value:h,startAngle:g,endAngle:f,padAngle:m};return x}return i.value=function(t){return arguments.length?(n="function"==typeof t?t:c(+t),i):n},i.sortValues=function(n){return arguments.length?(t=n,e=null,i):t},i.sort=function(n){return arguments.length?(e=n,t=null,i):e},i.startAngle=function(n){return arguments.length?(r="function"==typeof n?n:c(+n),i):r},i.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:c(+n),i):o},i.padAngle=function(n){return arguments.length?(a="function"==typeof n?n:c(+n),i):a},i}().sort(null).value((n,t)=>w[t])(M),R=Math.min(56,b/2,j/2),T=$().innerRadius(R*(44/56)).outerRadius(R).digits(3),L=n=>m(n);n.useLayoutEffect(()=>{const n=null===v?void 0:P[v];if(!n||null===v)return void g();const t=M[v],[e,r]=T.centroid(n);x({x:Math.round(1e4*(b/2+e))/1e4,y:Math.round(1e4*(j/2+r))/1e4,width:b,bounds:{x:0,y:0,width:b,height:j},lines:[h("ui.valuePair",{label:t.name,value:h("ui.share",{bytes:t.text,percent:String(t.value)})})]})});const I=i(M.length,L,()=>{m(null),g()});return t.jsxs("div",{ref:y,style:{height:"100%",width:"100%",position:"relative"},onPointerLeave:I.onPointerLeave,children:[t.jsx(l,{tip:d}),p&&t.jsx("svg",{className:"rp-activity-surface",width:b,height:j,viewBox:`0 0 ${b} ${j}`,style:{display:"block"},role:M.length?"application":"img","aria-label":u,tabIndex:M.length?0:void 0,onFocus:M.length?I.onFocus:void 0,onBlur:I.onBlur,onKeyDown:M.length?I.onKeyDown:void 0,children:t.jsx("g",{transform:`translate(${b/2},${j/2})`,children:P.map((n,e)=>t.jsx("path",{d:T({...n,endAngle:Math.min(n.endAngle,n.startAngle+359.999*Math.PI/180)})??void 0,fill:M[e].color,stroke:"none",onPointerEnter:()=>L(e),onPointerLeave:I.onPointerLeave},M[e].name))})})]})}export{I as DonutPlot}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Editors-BWyc5snq.css b/luci-app-honk/root/etc/honk/doona/assets/Editors-BWyc5snq.css new file mode 100644 index 000000000..8dc11167f --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Editors-BWyc5snq.css @@ -0,0 +1 @@ +.rp-sortable-row{outline:none;min-inline-size:0;position:relative}.rp-sortable-row[data-focus-visible]{outline:none}.rp-sortable-row:is([data-focus-visible],[data-selected]):before{content:"";inset:calc(0px - var(--rp-sortable-gap,var(--rp-space-2)) - var(--rp-focus-width));border:var(--rp-focus-width) solid var(--rp-focus-color);pointer-events:none;position:absolute}.rp-sortable-grid{outline:none}.rp-sortable-row>[role=gridcell]{display:contents}.rp-sortable-grid[data-drop-target]{outline:2px dashed var(--rp-accent)}.rp-sortable-grid .rp-dashboard-tools{background:0 0;inset-block-start:calc(var(--rp-line-caption) / 2 - var(--rp-space-1));inset-inline-end:0;translate:0 -50%}.rp-sortable-grid .rp-widget-label{padding-inline-end:calc(var(--rp-control) + var(--rp-space-2))}.rp-sortable-row[data-module=divider] .rp-dashboard-tools{background:var(--rp-surface);padding-inline-start:var(--rp-space-1);inset-block-start:50%}.rp-widget-gallery-grid{gap:var(--rp-space-4);grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));display:grid}.rp-widget-gallery-tile{gap:var(--rp-space-3);min-inline-size:0;padding:var(--rp-space-4);border:1px solid var(--rp-line);border-radius:var(--rp-r-lg);flex-direction:column;display:flex}.rp-widget-gallery-tile>.rp-cluster{margin-block-start:auto}.rp-widget-gallery-tile[data-added]{background:var(--rp-fill);--rp-subtle:var(--rp-subtle-text)}.rp-widget-gallery-frame{pointer-events:none;block-size:200px;overflow:hidden;mask-image:linear-gradient(#000 80%,#0000)}.rp-widget-gallery-presets{align-items:flex-start;gap:var(--rp-space-3) var(--rp-preset-gap);flex-wrap:wrap;display:flex}.rp-widget-gallery-preset{gap:var(--rp-space-1);flex-direction:column;min-inline-size:0;display:flex}.rp-widget-gallery-thumb{position:relative;overflow:hidden}.rp-widget-gallery-thumb-card{transform-origin:0 0;pointer-events:none;container:rp-tile/inline-size}.rp-widget-gallery-thumb-card:dir(rtl){transform-origin:100% 0}.rp-widget-gallery-thumb-add{border-radius:var(--rp-r-lg);cursor:pointer;background:0 0;border:0;position:absolute;inset:0}.rp-widget-gallery-thumb-add[data-hovered]{outline:2px solid var(--rp-line);outline-offset:2px}.rp-widget-gallery-thumb-add[data-focus-visible]{outline:2px solid var(--rp-accent);outline-offset:2px}.rp-widget-gallery-thumb-add[data-disabled]{cursor:default;outline:none} diff --git a/luci-app-honk/root/etc/honk/doona/assets/Editors-CF-H0sca.js b/luci-app-honk/root/etc/honk/doona/assets/Editors-CF-H0sca.js new file mode 100644 index 000000000..ebdb7fa2a --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Editors-CF-H0sca.js @@ -0,0 +1 @@ +import{r as e,$ as t,a as r,j as n}from"./vendor-react-64fcanlc.js";import{c8 as o,c9 as i,ca as a,cb as s,cc as l,cd as d,ce as c,cf as p,cg as u,ch as g,ci as f,cj as m,ck as h,cl as y,cm as D,cn as v,co as b,cp as w,cq as x,cr as T,cs as k,bf as E,ct as P,cu as K,cv as O,bJ as S,aV as C,cw as I,cx as j,aR as A,bo as R,O as M,H as B,F as L,aZ as F,cy as $,m as N,R as z,cz as V,cA as H,bv as X,l as Y,$ as U,U as q,cB as G,bU as J,cC as W,cD as _,cE as Z,cF as Q,X as ee,cG as te,cH as re,bj as ne,cI as oe,cJ as ie,bu as ae,cK as se,cL as le,a8 as de}from"./index-BgFj_VXE.js";import{u as ce,b as pe,s as ue,d as ge,c as fe,S as me,W as he,p as ye,m as De,e as ve,f as be,h as we,i as xe,j as Te,k as ke,l as Ee,n as Pe,P as Ke,o as Oe}from"./activity-D06xJ7oH.js";import{$ as Se,a as Ce}from"./GridList-BUQihjaB.js";import{$ as Ie}from"./Select-CkiGmyVC.js";import{D as je}from"./Delete-DA-ArqRQ.js";import{S as Ae,u as Re,$ as Me}from"./logs-BxISynQ4.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./format-s2EANuUb.js";import"./useGridSelectionCheckbox-BxnCShqN.js";var Be=function(e){return e[e.none=0]="none",e[e.cancel=0]="cancel",e[e.move=1]="move",e[e.copy=2]="copy",e[e.link=4]="link",e[e.all=7]="all",e}({});const Le={...Be,copyMove:3,copyLink:6,linkMove:5,all:7,uninitialized:7},Fe=ze(Le);Fe[7]="all";const $e={none:"cancel",link:"link",copy:"copy",move:"move"},Ne=ze($e);function ze(e){let t={};for(let r in e)t[e[r]]=r;return t}const Ve=new Set(["text/plain","text/uri-list","text/html"]),He="application/vnd.react-aria.items+json",Xe="application/octet-stream",Ye=new WeakMap,Ue=Symbol();function qe(e){let t=new Set;for(let r of e)for(let e of Object.keys(r))t.add(e);return t}function Ge(e){return e||(e="virtual"),"pointer"===e&&(e="virtual"),"virtual"===e&&"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(pointer: coarse)").matches&&(e="touch"),e}function Je(){return Ge(o())}function We(){return Ge(i())}class _e{constructor(e){this.types=new Set;let t=!1;for(let r of e.items)r.type!==He&&("file"===r.kind&&(t=!0),r.type?this.types.add(r.type):this.types.add(Xe));this.includesUnknownTypes=!t&&e.types.includes("Files")}has(e){if(Array.isArray(e))return e.some(e=>this.has(e));if(this.includesUnknownTypes||e===Ue&&this.types.has(Xe)||"*/*"===e)return!0;if("string"==typeof e){if(e.endsWith("/*")){for(let t of this.types)if(t.startsWith(e.slice(0,-2)))return!0;return!1}return this.types.has(e)}return!1}}function Ze(e){if(!e)throw new Error("No file provided");return{kind:"file",type:e.type||Xe,name:e.name,getText:()=>{return"function"==typeof(t=e).text?t.text():new Promise((e,r)=>{let n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=r,n.readAsText(t)});var t},getFile:()=>Promise.resolve(e)}}function Qe(e){return{kind:"directory",name:e.name,getEntries:()=>async function*(e){let t,r=e.createReader();do{t=await new Promise((e,t)=>{r.readEntries(e,t)});for(let e of t)if(e.isFile){let t=await et(e);yield Ze(t)}else e.isDirectory&&(yield Qe(e))}while(t.length>0)}(e)}}function et(e){return new Promise((t,r)=>e.file(t,r))}let tt,rt={draggingKeys:new Set};function nt(e){rt.dropCollectionRef=e}function ot(){rt={draggingKeys:new Set}}function it(e){let{draggingCollectionRef:t,dropCollectionRef:r}=rt;return null!=t?.current&&t.current===(e?.current||r?.current)}function at(e){tt=e}let st=Be.none;function lt(e){st=e}let dt=new Map,ct=new Map,pt=null,ut=new Set;function gt(e){return dt.set(e.element,e),pt?.updateValidDropTargets(),()=>{dt.delete(e.element),pt?.updateValidDropTargets()}}function ft(){let[t,r]=e.useState(pt);return e.useEffect(()=>{let e=()=>r(pt);return ut.add(e),()=>{ut.delete(e)}},[]),t}function mt(){return!!pt}const ht=["pointerdown","pointermove","pointerenter","pointerleave","pointerover","pointerout","pointerup","mousedown","mousemove","mouseenter","mouseleave","mouseover","mouseout","mouseup","touchstart","touchmove","touchend","focusin","focusout"],yt=["pointerup","mouseup","touchend"],Dt={keyboard:"dragStartedKeyboard",touch:"dragStartedTouch",virtual:"dragStartedVirtual"};class vt{constructor(e,t){this.validDropTargets=[],this.currentDropTarget=null,this.currentDropItem=null,this.dropOperation=null,this.mutationObserver=null,this.restoreAriaHidden=null,this.isVirtualClick=!1,this.dragTarget=e,this.stringFormatter=t,this.onKeyDown=this.onKeyDown.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.onClick=this.onClick.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.cancelEvent=this.cancelEvent.bind(this),this.initialFocused=!1}setup(){document.addEventListener("keydown",this.onKeyDown,!0),document.addEventListener("keyup",this.onKeyUp,!0),window.addEventListener("focus",this.onFocus,!0),window.addEventListener("blur",this.onBlur,!0),document.addEventListener("click",this.onClick,!0),document.addEventListener("pointerdown",this.onPointerDown,!0);for(let e of ht)document.addEventListener(e,this.cancelEvent,!0);this.mutationObserver=new MutationObserver(()=>this.updateValidDropTargets()),this.updateValidDropTargets(),a(this.stringFormatter.format(Dt[We()]))}teardown(){document.removeEventListener("keydown",this.onKeyDown,!0),document.removeEventListener("keyup",this.onKeyUp,!0),window.removeEventListener("focus",this.onFocus,!0),window.removeEventListener("blur",this.onBlur,!0),document.removeEventListener("click",this.onClick,!0),document.removeEventListener("pointerdown",this.onPointerDown,!0);for(let e of ht)document.removeEventListener(e,this.cancelEvent,!0);this.mutationObserver?.disconnect(),this.restoreAriaHidden?.()}onKeyDown(e){this.cancelEvent(e),"Escape"!==e.key?("Tab"!==e.key||e.metaKey||e.altKey||e.ctrlKey||(e.shiftKey?this.previous():this.next()),"function"==typeof this.currentDropTarget?.onKeyDown&&this.currentDropTarget.onKeyDown(e,this.dragTarget)):this.cancel()}onKeyUp(e){this.cancelEvent(e),"Enter"===e.key&&(e.altKey||s(this.getCurrentActivateButton(),l(e))?this.activate(this.currentDropTarget,this.currentDropItem):this.drop())}getCurrentActivateButton(){return this.currentDropItem?.activateButtonRef?.current??this.currentDropTarget?.activateButtonRef?.current??null}onFocus(e){let t=this.getCurrentActivateButton(),r=l(e);if(r===t)return void this.cancelEvent(e);if(r!==this.dragTarget.element&&this.cancelEvent(e),!(r instanceof HTMLElement)||r===this.dragTarget.element)return;let n=this.validDropTargets.find(e=>e.element===r)||this.validDropTargets.find(e=>s(e.element,r));if(!n)return void(this.currentDropTarget?this.currentDropTarget.element.focus():this.dragTarget.element.focus());let o=ct.get(r);n&&this.setCurrentDropTarget(n,o)}onBlur(e){let t=this.getCurrentActivateButton();t&&e.relatedTarget===t?this.cancelEvent(e):(l(e)!==this.dragTarget.element&&this.cancelEvent(e),e.relatedTarget&&e.relatedTarget instanceof HTMLElement||(this.currentDropTarget?this.currentDropTarget.element.focus():this.dragTarget.element.focus()))}onClick(e){if(this.cancelEvent(e),d(e)||this.isVirtualClick){let t=ct.values(),r=l(e),n=[...t].find(e=>e.element===r||s(e.activateButtonRef?.current,r)),o=this.validDropTargets.find(e=>s(e.element,r));if(s(n?.activateButtonRef?.current??o?.activateButtonRef?.current,r)&&o)return void this.activate(o,n);if(l(e)===this.dragTarget.element)return void this.cancel();o&&(this.setCurrentDropTarget(o,n),this.drop(n))}}onPointerDown(e){this.cancelEvent(e),this.isVirtualClick=c(e)}cancelEvent(e){let t=l(e);("focusin"!==e.type&&"focusout"!==e.type||t!==this.dragTarget?.element&&t!==this.getCurrentActivateButton())&&(yt.includes(e.type)||e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation())}updateValidDropTargets(){if(!this.mutationObserver)return;if(this.mutationObserver.disconnect(),this.restoreAriaHidden&&this.restoreAriaHidden(),this.validDropTargets=function(e){let t=qe(e.items);return[...dt.values()].filter(r=>!r.element.closest('[aria-hidden="true"], [inert]')&&("function"!=typeof r.getDropOperation||"cancel"!==r.getDropOperation(t,e.allowedDropOperations)))}(this.dragTarget),this.validDropTargets.length>0){let e=this.findNearestDropTarget();this.validDropTargets=[...this.validDropTargets.slice(e),...this.validDropTargets.slice(0,e)]}this.currentDropTarget&&!this.validDropTargets.includes(this.currentDropTarget)&&this.setCurrentDropTarget(this.validDropTargets[0]);let e=qe(this.dragTarget.items),t=[...ct.values()].filter(t=>"function"!=typeof t.getDropOperation||"cancel"!==t.getDropOperation(e,this.dragTarget.allowedDropOperations)),r=this.validDropTargets.filter(e=>!t.some(t=>s(e.element,t.element)));this.restoreAriaHidden=p([this.dragTarget.element,...t.flatMap(e=>e.activateButtonRef?.current?[e.element,e.activateButtonRef?.current]:[e.element]),...r.flatMap(e=>e.activateButtonRef?.current?[e.element,e.activateButtonRef?.current]:[e.element])],{shouldUseInert:!0}),this.mutationObserver.observe(document.body,{subtree:!0,attributes:!0,attributeFilter:["aria-hidden","inert"]})}next(){if(!this.currentDropTarget)return void this.setCurrentDropTarget(this.validDropTargets[0]);let e=this.validDropTargets.indexOf(this.currentDropTarget);e<0?this.setCurrentDropTarget(this.validDropTargets[0]):e===this.validDropTargets.length-1?this.dragTarget.element.closest('[aria-hidden="true"], [inert]')?this.setCurrentDropTarget(this.validDropTargets[0]):(this.setCurrentDropTarget(null),this.dragTarget.element.focus()):this.setCurrentDropTarget(this.validDropTargets[e+1])}previous(){if(!this.currentDropTarget)return void this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]);let e=this.validDropTargets.indexOf(this.currentDropTarget);e<0?this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]):0===e?this.dragTarget.element.closest('[aria-hidden="true"], [inert]')?this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length-1]):(this.setCurrentDropTarget(null),this.dragTarget.element.focus()):this.setCurrentDropTarget(this.validDropTargets[e-1])}findNearestDropTarget(){let e=this.dragTarget.element.getBoundingClientRect(),t=1/0,r=-1,n=-1;for(let o=0;o=0?n:r}setCurrentDropTarget(e,t){if(e!==this.currentDropTarget){if(this.currentDropTarget&&"function"==typeof this.currentDropTarget.onDropExit){let e=this.currentDropTarget.element.getBoundingClientRect();this.currentDropTarget.onDropExit({type:"dropexit",x:e.left+e.width/2,y:e.top+e.height/2})}if(this.currentDropTarget=e,e){if("function"==typeof e.onDropEnter){let t=e.element.getBoundingClientRect();e.onDropEnter({type:"dropenter",x:t.left+t.width/2,y:t.top+t.height/2},this.dragTarget)}t||e?.element.focus()}}if(null!=t&&t!==this.currentDropItem&&(this.currentDropTarget&&"function"==typeof this.currentDropTarget.onDropTargetEnter&&this.currentDropTarget.onDropTargetEnter(t.target),t.element.focus(),this.currentDropItem=t,!this.initialFocused)){let e=t?.element.getAttribute("aria-label");e&&a(e,"polite"),this.initialFocused=!0}}end(){if(this.teardown(),function(){pt=null;for(let e of ut)e()}(),"function"==typeof this.dragTarget.onDragEnd){let e=(this.currentDropTarget&&"cancel"!==this.dropOperation?this.currentDropTarget:this.dragTarget).element.getBoundingClientRect();this.dragTarget.onDragEnd({type:"dragend",x:e.x+e.width/2,y:e.y+e.height/2,dropOperation:this.dropOperation||"cancel"})}this.currentDropTarget&&!this.currentDropTarget.preventFocusOnDrop&&u()?.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),this.setCurrentDropTarget(null)}cancel(){this.setCurrentDropTarget(null),this.end(),this.dragTarget.element.closest('[aria-hidden="true"], [inert]')||this.dragTarget.element.focus(),u()?.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),a(this.stringFormatter.format("dropCanceled"))}drop(e){if(this.currentDropTarget){if("function"==typeof e?.getDropOperation){let t=qe(this.dragTarget.items);this.dropOperation=e.getDropOperation(t,this.dragTarget.allowedDropOperations)}else if("function"==typeof this.currentDropTarget.getDropOperation){let e=qe(this.dragTarget.items);this.dropOperation=this.currentDropTarget.getDropOperation(e,this.dragTarget.allowedDropOperations)}else this.dropOperation=this.dragTarget.allowedDropOperations[0];if("function"==typeof this.currentDropTarget.onDrop){let t=this.dragTarget.items.map(e=>({kind:"text",types:new Set(Object.keys(e)),getText:t=>Promise.resolve(e[t])})),r=this.currentDropTarget.element.getBoundingClientRect();this.currentDropTarget.onDrop({type:"drop",x:r.left+r.width/2,y:r.top+r.height/2,items:t,dropOperation:this.dropOperation},e?.target??null)}this.end(),a(this.stringFormatter.format("dropComplete"))}else this.cancel()}activate(e,t){if(e&&"function"==typeof e.onDropActivate){let r=t?.target??null,n=e.element.getBoundingClientRect();e.onDropActivate({type:"dropactivate",x:n.left+n.width/2,y:n.top+n.height/2},r)}}}var bt;bt={"ar-AE":g,"bg-BG":g,"cs-CZ":g,"da-DK":g,"de-DE":g,"el-GR":g,"en-US":{dragItem:e=>`Drag ${e.itemText}`,dragSelectedItems:(e,t)=>`Drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}`,dragDescriptionKeyboard:"Press Enter to start dragging.",dragDescriptionKeyboardAlt:"Press Alt + Enter to start dragging.",dragDescriptionTouch:"Double tap to start dragging.",dragDescriptionVirtual:"Click to start dragging.",dragDescriptionLongPress:"Long press to start dragging.",dragSelectedKeyboard:(e,t)=>`Press Enter to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragSelectedKeyboardAlt:(e,t)=>`Press Alt + Enter to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragSelectedLongPress:(e,t)=>`Long press to drag ${t.plural(e.count,{one:()=>`${t.number(e.count)} selected item`,other:()=>`${t.number(e.count)} selected items`})}.`,dragStartedKeyboard:"Started dragging. Press Tab to navigate to a drop target, then press Enter to drop, or press Escape to cancel.",dragStartedTouch:"Started dragging. Navigate to a drop target, then double tap to drop.",dragStartedVirtual:"Started dragging. Navigate to a drop target, then click or press Enter to drop.",endDragKeyboard:"Dragging. Press Enter to cancel drag.",endDragTouch:"Dragging. Double tap to cancel drag.",endDragVirtual:"Dragging. Click to cancel drag.",dropDescriptionKeyboard:"Press Enter to drop. Press Escape to cancel drag.",dropDescriptionTouch:"Double tap to drop.",dropDescriptionVirtual:"Click to drop.",dropCanceled:"Drop canceled.",dropComplete:"Drop complete.",dropIndicator:"drop indicator",dropOnRoot:"Drop on",dropOnItem:e=>`Drop on ${e.itemText}`,insertBefore:e=>`Insert before ${e.itemText}`,insertBetween:e=>`Insert between ${e.beforeItemText} and ${e.afterItemText}`,insertAfter:e=>`Insert after ${e.itemText}`},"es-ES":g,"et-EE":g,"fi-FI":g,"fr-FR":g,"he-IL":g,"hr-HR":g,"hu-HU":g,"it-IT":g,"ja-JP":g,"ko-KR":g,"lt-LT":g,"lv-LV":g,"nb-NO":g,"nl-NL":g,"pl-PL":g,"pt-BR":g,"pt-PT":g,"ro-RO":g,"ru-RU":g,"sk-SK":g,"sl-SI":g,"sr-SP":g,"sv-SE":g,"tr-TR":g,"uk-UA":g,"zh-CN":{dragDescriptionKeyboard:"按 Enter 开始拖动。",dragDescriptionKeyboardAlt:"按 Alt + Enter 开始拖动。",dragDescriptionLongPress:"长按以开始拖动。",dragDescriptionTouch:"双击开始拖动。",dragDescriptionVirtual:"单击开始拖动。",dragItem:e=>`拖动 ${e.itemText}`,dragSelectedItems:(e,t)=>`拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 选中项目`,other:()=>`${t.number(e.count)} 选中项目`})}`,dragSelectedKeyboard:(e,t)=>`按 Enter 以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragSelectedKeyboardAlt:(e,t)=>`按 Alt + Enter 以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragSelectedLongPress:(e,t)=>`长按以拖动 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 个选定项`,other:()=>`${t.number(e.count)} 个选定项`})}。`,dragStartedKeyboard:"已开始拖动。按 Tab 导航到放置目标,然后按 Enter 放置或按 Escape 取消。",dragStartedTouch:"已开始拖动。导航到放置目标,然后双击放置。",dragStartedVirtual:"已开始拖动。导航到放置目标,然后单击或按 Enter 放置。",dropCanceled:"放置已取消。",dropComplete:"放置已完成。",dropDescriptionKeyboard:"按 Enter 放置。按 Escape 取消拖动。",dropDescriptionTouch:"双击放置。",dropDescriptionVirtual:"单击放置。",dropIndicator:"放置标记",dropOnItem:e=>`放置于 ${e.itemText}`,dropOnRoot:"放置于",endDragKeyboard:"正在拖动。按 Enter 取消拖动。",endDragTouch:"正在拖动。双击取消拖动。",endDragVirtual:"正在拖动。单击取消拖动。",insertAfter:e=>`插入到 ${e.itemText} 之后`,insertBefore:e=>`插入到 ${e.itemText} 之前`,insertBetween:e=>`插入到 ${e.beforeItemText} 和 ${e.afterItemText} 之间`},"zh-TW":{dragDescriptionKeyboard:"按 Enter 鍵以開始拖曳。",dragDescriptionKeyboardAlt:"按 Alt+Enter 鍵以開始拖曳。",dragDescriptionLongPress:"長按以開始拖曳。",dragDescriptionTouch:"輕點兩下以開始拖曳。",dragDescriptionVirtual:"按一下滑鼠以開始拖曳。",dragItem:e=>`拖曳「${e.itemText}」`,dragSelectedItems:(e,t)=>`拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}`,dragSelectedKeyboard:(e,t)=>`按 Enter 鍵以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragSelectedKeyboardAlt:(e,t)=>`按 Alt+Enter 鍵以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragSelectedLongPress:(e,t)=>`長按以拖曳 ${t.plural(e.count,{one:()=>`${t.number(e.count)} 個選定項目`,other:()=>`${t.number(e.count)} 個選定項目`})}。`,dragStartedKeyboard:"已開始拖曳。按 Tab 鍵以瀏覽至放置目標,然後按 Enter 鍵以放置,或按 Escape 鍵以取消。",dragStartedTouch:"已開始拖曳。瀏覽至放置目標,然後輕點兩下以放置。",dragStartedVirtual:"已開始拖曳。瀏覽至放置目標,然後按一下滑鼠或按 Enter 鍵以放置。",dropCanceled:"放置已取消。",dropComplete:"放置已完成。",dropDescriptionKeyboard:"按 Enter 鍵以放置。按 Escape 鍵以取消拖曳。",dropDescriptionTouch:"輕點兩下以放置。",dropDescriptionVirtual:"按一下滑鼠以放置。",dropIndicator:"放置指示器",dropOnItem:e=>`放置在「${e.itemText}」上`,dropOnRoot:"放置在",endDragKeyboard:"拖曳中。按 Enter 鍵以取消拖曳。",endDragTouch:"拖曳中。輕點兩下以取消拖曳。",endDragVirtual:"拖曳中。按一下滑鼠以取消拖曳。",insertAfter:e=>`插入至「${e.itemText}」之後`,insertBefore:e=>`插入至「${e.itemText}」之前`,insertBetween:e=>`插入至「${e.beforeItemText}」和「${e.afterItemText}」之間`}};const wt={keyboard:"dropDescriptionKeyboard",touch:"dropDescriptionTouch",virtual:"dropDescriptionVirtual"};function xt(){let e=f((t=bt)&&t.__esModule?t.default:t,"@react-aria/dnd");var t;let r=Je(),n=ft();return{dropProps:{...m(n?e.format(wt[r]):""),onClick:()=>{}}}}function Tt(t){let{hasDropButton:r,isDisabled:n}=t,[o,i]=e.useState(!1),a=e.useRef({x:0,y:0,dragOverElements:new Set,dropEffect:"none",allowedOperations:Be.all,dropActivateTimer:void 0}).current,d=e=>{if(i(!0),"function"==typeof t.onDropEnter){let r=e.currentTarget.getBoundingClientRect();t.onDropEnter({type:"dropenter",x:e.clientX-r.x,y:e.clientY-r.y})}},c=e=>{if(i(!1),"function"==typeof t.onDropExit){let r=e.currentTarget.getBoundingClientRect();t.onDropExit({type:"dropexit",x:e.clientX-r.x,y:e.clientY-r.y})}},p=h(e=>{"function"==typeof t.onDropEnter&&t.onDropEnter(e)}),u=h(e=>{"function"==typeof t.onDropExit&&t.onDropExit(e)}),g=h(e=>{"function"==typeof t.onDropActivate&&t.onDropActivate(e)}),f=h(e=>{"function"==typeof t.onDrop&&t.onDrop(e)}),m=h((e,r)=>t.getDropOperation?t.getDropOperation(e,r):r[0]),{ref:D}=t;y(()=>{if(!n&&D.current)return gt({element:D.current,getDropOperation:m,onDropEnter(e){i(!0),p(e)},onDropExit(e){i(!1),u(e)},onDrop:f,onDropActivate:g})},[n,D]);let{dropProps:v}=xt();return n?{dropProps:{},dropButtonProps:{isDisabled:!0},isDropTarget:!1}:{dropProps:{...!r&&v,onDragEnter:e=>{if(e.preventDefault(),e.stopPropagation(),a.dragOverElements.add(l(e)),a.dragOverElements.size>1)return;let r=kt(e),n=Et(r),o=n[0];if("function"==typeof t.getDropOperation){let i=new _e(e.dataTransfer);o=Pt(r,t.getDropOperation(i,n))}if("function"==typeof t.getDropOperationForPoint){let i=new _e(e.dataTransfer),a=e.currentTarget.getBoundingClientRect();o=Pt(r,t.getDropOperationForPoint(i,n,e.clientX-a.x,e.clientY-a.y))}a.x=e.clientX,a.y=e.clientY,a.allowedOperations=r,a.dropEffect=Ne[o]||"none",e.dataTransfer.dropEffect=a.dropEffect,"cancel"!==o&&d(e)},onDragOver:e=>{e.preventDefault(),e.stopPropagation();let r=kt(e);if(e.clientX===a.x&&e.clientY===a.y&&r===a.allowedOperations)return void(e.dataTransfer.dropEffect=a.dropEffect);a.x=e.clientX,a.y=e.clientY;let n=a.dropEffect;if(r!==a.allowedOperations){let n=Et(r),o=n[0];if("function"==typeof t.getDropOperation){let i=new _e(e.dataTransfer);o=Pt(r,t.getDropOperation(i,n))}a.dropEffect=Ne[o]||"none"}if("function"==typeof t.getDropOperationForPoint){let n=new _e(e.dataTransfer),o=e.currentTarget.getBoundingClientRect(),i=Pt(r,t.getDropOperationForPoint(n,Et(r),a.x-o.x,a.y-o.y));a.dropEffect=Ne[i]||"none"}if(a.allowedOperations=r,e.dataTransfer.dropEffect=a.dropEffect,"none"===a.dropEffect&&"none"!==n?c(e):"none"!==a.dropEffect&&"none"===n&&d(e),"function"==typeof t.onDropMove&&"none"!==a.dropEffect){let r=e.currentTarget.getBoundingClientRect();t.onDropMove({type:"dropmove",x:a.x-r.x,y:a.y-r.y})}if(clearTimeout(a.dropActivateTimer),t.onDropActivate&&"function"==typeof t.onDropActivate&&"none"!==a.dropEffect){let r=t.onDropActivate,n=e.currentTarget.getBoundingClientRect();a.dropActivateTimer=setTimeout(()=>{r({type:"dropactivate",x:a.x-n.x,y:a.y-n.y})},800)}},onDragLeave:e=>{e.preventDefault(),e.stopPropagation();let t=l(e);if(a.dragOverElements.delete(t),t===e.currentTarget)for(let r of a.dragOverElements)s(e.currentTarget,r)||a.dragOverElements.delete(r);a.dragOverElements.size>0||("none"!==a.dropEffect&&c(e),clearTimeout(a.dropActivateTimer))},onDrop:e=>{if(e.preventDefault(),e.stopPropagation(),at(a.dropEffect),"function"==typeof t.onDrop){let r=$e[a.dropEffect],n=function(e){let t=[];if(!e)return t;let r=!1;if(e.types.includes(He))try{let n=e.getData(He),o=JSON.parse(n);for(let e of o)t.push({kind:"text",types:new Set(Object.keys(e)),getText:t=>Promise.resolve(e[t])});r=!0}catch{}if(!r){let r=new Map;for(let n of e.items)if("string"===n.kind)r.set(n.type||Xe,e.getData(n.type));else if("file"===n.kind)if("function"==typeof n.webkitGetAsEntry){let e=n.webkitGetAsEntry();if(!e)continue;e.isFile?t.push(Ze(n.getAsFile())):e.isDirectory&&t.push(Qe(e))}else t.push(Ze(n.getAsFile()));r.size>0&&t.push({kind:"text",types:new Set(r.keys()),getText:e=>Promise.resolve(r.get(e))})}return t}(e.dataTransfer),o=e.currentTarget.getBoundingClientRect(),i={type:"drop",x:e.clientX-o.x,y:e.clientY-o.y,items:n,dropOperation:r};t.onDrop(i)}let r={...rt};a.dragOverElements.clear(),c(e),clearTimeout(a.dropActivateTimer),null==r.draggingCollectionRef?at(void 0):function(e){rt=e}(r)}},dropButtonProps:{...r&&v},isDropTarget:o}}function kt(e){let t=Le[e.dataTransfer.effectAllowed];st&&(t&=st);let r=Be.none;return D()?(e.altKey&&(r|=Be.copy),e.ctrlKey&&!v()&&(r|=Be.link),e.metaKey&&(r|=Be.move)):(e.altKey&&(r|=Be.link),e.shiftKey&&(r|=Be.move),e.ctrlKey&&(r|=Be.copy)),r?t&r:t}function Et(e){let t=[];return e&Be.move&&t.push("move"),e&Be.copy&&t.push("copy"),e&Be.link&&t.push("link"),t}function Pt(e,t){return e&Be[t]?t:"cancel"}function Kt(e,t,r,n=!1,o=null){if(!r)return{type:"root"};if("root"===r.type){let t=e.getFirstKey?.()??null;return null!=t?{type:"item",key:t,dropPosition:"before"}:null}if("item"===r.type){let n=null;n=o?"right"===o?e.getKeyRightOf?.(r.key,{includeDisabled:!0}):e.getKeyLeftOf?.(r.key,{includeDisabled:!0}):e.getKeyBelow?.(r.key,{includeDisabled:!0});let i=Ct(t,r.key,e=>t.getKeyAfter(e));if(null!=n&&n!==i)return{type:"item",key:n,dropPosition:r.dropPosition};switch(r.dropPosition){case"before":return{type:"item",key:r.key,dropPosition:"on"};case"on":{let e=t.getItem(r.key),o=null!=n?t.getItem(n):null;return e&&o&&o.level>=e.level?{type:"item",key:o.key,dropPosition:"before"}:{type:"item",key:r.key,dropPosition:"after"}}case"after":{let e=t.getItem(r.key),n=null!=e?.nextKey?t.getItem(e.nextKey):null;for(;null!=n&&"item"!==n.type;)n=null!=n.nextKey?t.getItem(n.nextKey):null;if(e&&null==n&&null!=e.parentKey){let r=t.getItem(e.parentKey);const n=null!=r?.nextKey?t.getItem(r.nextKey):null;if("item"===n?.type)return{type:"item",key:n.key,dropPosition:"before"};if("item"===r?.type)return{type:"item",key:r.key,dropPosition:"after"}}if(n)return{type:"item",key:n.key,dropPosition:"on"}}}}return n?{type:"root"}:null}function Ot(e,t,r,n=!1,o=null){if(!r||n&&"root"===r.type){let r=null,n=e.getLastKey?.();for(;null!=n;){let e=t.getItem(n);if("item"!==e?.type)break;r=n,n=e?.parentKey}return null!=r?{type:"item",key:r,dropPosition:"after"}:null}if("item"===r.type){let n=null;n=o?"left"===o?e.getKeyLeftOf?.(r.key,{includeDisabled:!0}):e.getKeyRightOf?.(r.key,{includeDisabled:!0}):e.getKeyAbove?.(r.key,{includeDisabled:!0});let i=Ct(t,r.key,e=>t.getKeyBefore(e));if(null!=n&&n!==i)return{type:"item",key:n,dropPosition:r.dropPosition};switch(r.dropPosition){case"before":{let e=t.getItem(r.key);if(e&&null!=e.prevKey){let r=St(t,e.prevKey);if(r)return r}return null!=n?{type:"item",key:n,dropPosition:"on"}:{type:"root"}}case"on":return{type:"item",key:r.key,dropPosition:"before"};case"after":{let e=St(t,r.key);return e||{type:"item",key:r.key,dropPosition:"on"}}}}return"root"!==r.type?{type:"root"}:null}function St(e,t){let r=e.getItem(t),n=Ct(e,t,t=>e.getKeyAfter(t)),o=null!=n?e.getItem(n):null;if(r&&o&&o.level>r.level){let t=null;if("lastChildKey"in r)for(t=null!=r.lastChildKey?e.getItem(r.lastChildKey):null;t&&"item"!==t.type&&null!=t.prevKey;)t=e.getItem(t.prevKey);else t=Array.from(r.childNodes).findLast(e=>"item"===e.type)||null;if(t)return{type:"item",key:t.key,dropPosition:"after"}}return null}function Ct(e,t,r){let n=r(t),o=null!=n?e.getItem(n):null;for(;o&&"item"!==o.type;)n=r(o.key),o=null!=n?e.getItem(n):null;return n}function It(t,r,n){let o=e.useRef({props:t,state:r,nextTarget:null,dropOperation:null}).current;o.props=t,o.state=r;let i=e.useCallback(async e=>{let{onInsert:t,onRootDrop:r,onItemDrop:i,onReorder:a,onMove:s,acceptedDragTypes:l="all",shouldAcceptItemDrop:d}=o.props,{draggingKeys:c}=rt,p=it(n),{target:u,dropOperation:g,items:f}=e,m=f;("all"!==l||d)&&(m=f.filter(e=>{let t;return t="directory"===e.kind?new Set([Ue]):"file"===e.kind?new Set([e.type]):e.types,!("all"!==l&&!l.some(e=>t.has(e)))&&("item"!==u.type||"on"!==u.dropPosition||!d||d(u,t))})),m.length>0&&("root"===u.type&&r&&await r({items:m,dropOperation:g}),"item"===u.type&&("on"===u.dropPosition&&i&&await i({items:m,dropOperation:g,isInternal:p,target:u}),s&&p&&await s({keys:c,dropOperation:g,target:u}),"on"!==u.dropPosition&&(!p&&t&&await t({items:m,dropOperation:g,target:u}),p&&a&&await a({keys:c,dropOperation:g,target:u}))))},[o,n]),a=function(t){let r=e.useRef(null),n=e.useRef(!0),o=e.useRef(!0);e.useEffect(()=>{if(t.current){r.current=b(t.current)?t.current:w(t.current);let e=window.getComputedStyle(r.current);n.current=/(auto|scroll)/.test(e.overflowX),o.current=/(auto|scroll)/.test(e.overflowY)}},[t]);let i=e.useRef({timer:void 0,dx:0,dy:0}).current;e.useEffect(()=>()=>{i.timer&&(cancelAnimationFrame(i.timer),i.timer=void 0)},[i]);let a=e.useCallback(()=>{n.current&&r.current&&(r.current.scrollLeft+=i.dx),o.current&&r.current&&(r.current.scrollTop+=i.dy),i.timer&&(i.timer=requestAnimationFrame(a))},[r,i]);return{move(e,t){if(!x()||T()||!r.current)return;let n=r.current.getBoundingClientRect(),o=n.height-20,s=n.width-20;e<20||e>s||t<20||t>o?(e<20?i.dx=e-20:e>s&&(i.dx=e-s),t<20?i.dy=t-20:t>o&&(i.dy=t-o),i.timer||(i.timer=requestAnimationFrame(a))):this.stop()},stop(){i.timer&&(cancelAnimationFrame(i.timer),i.timer=void 0)}}}(n),{dropProps:s}=Tt({ref:n,onDropEnter(){null!=o.nextTarget&&r.setTarget(o.nextTarget)},onDropMove(e){null!=o.nextTarget&&r.setTarget(o.nextTarget),a.move(e.x,e.y)},getDropOperationForPoint(e,i,a,s){let{draggingKeys:l,dropCollectionRef:d}=rt,c=it(n),p=t.dropTargetDelegate.getDropTargetFromPoint(a,s,t=>"cancel"!==r.getDropOperation({target:t,types:e,allowedOperations:i,isInternal:c,draggingKeys:l}));if(!p)return o.dropOperation="cancel",o.nextTarget=null,"cancel";if(o.dropOperation=r.getDropOperation({target:p,types:e,allowedOperations:i,isInternal:c,draggingKeys:l}),"cancel"===o.dropOperation){let t={type:"root"},n=r.getDropOperation({target:t,types:e,allowedOperations:i,isInternal:c,draggingKeys:l});"cancel"!==n&&(p=t,o.dropOperation=n)}return p&&"cancel"!==o.dropOperation&&n?.current!==d?.current&&nt(n),o.nextTarget="cancel"===o.dropOperation?null:p,o.dropOperation},onDropExit(){nt(void 0),r.setTarget(null),a.stop()},onDropActivate(e){"item"===r.target?.type&&"function"==typeof t.onDropActivate&&t.onDropActivate({type:"dropactivate",x:e.x,y:e.y,target:r.target})},onDrop(e){nt(n),r.target&&c(e,r.target);let{draggingCollectionRef:t}=rt;null==t&&ot()}}),l=e.useRef(null),d=e.useCallback(()=>{let{state:e}=o;if(l.current){let{target:t,collection:r,selectedKeys:n,focusedKey:o,isInternal:i,draggingKeys:a}=l.current;if(e.collection.size>r.size&&e.selectionManager.isSelectionEqual(n)){let t=new Set,n=e.collection.getFirstKey();for(;null!=n;){let o=e.collection.getItem(n);"item"!==o?.type||r.getItem(o.key)||t.add(o.key),n=o?.hasChildNodes&&"item"===e.collection.getItem(o.lastChildKey)?.type?o.firstChildKey:e.collection.getKeyAfter(n)}if(e.selectionManager.setSelectedKeys(t),e.selectionManager.focusedKey===o){let r=t.keys().next().value;if(null!=r){let t=e.collection.getItem(r),n=l.current.target,o=!!e.collection.expandedKeys&&e.collection.expandedKeys.has(t?.parentKey);t&&("cell"===t?.type||"item"===n.type&&"on"===n.dropPosition&&!o)&&(r=t.parentKey),null!=r&&e.selectionManager.setFocusedKey(r),"none"===e.selectionManager.selectionMode&&k("keyboard")}}}else null!=o&&e.selectionManager.focusedKey===o&&i&&"item"===t.type&&"on"!==t.dropPosition&&a.has(e.collection.getItem(o)?.parentKey)?(e.selectionManager.setFocusedKey(e.collection.getItem(o)?.parentKey??null),k("keyboard")):e.selectionManager.focusedKey===o&&"item"===t.type&&"on"===t.dropPosition&&null!=e.collection.getItem(t.key)?(e.selectionManager.setFocusedKey(t.key),k("keyboard")):null==e.selectionManager.focusedKey||e.selectionManager.isSelected(e.selectionManager.focusedKey)||k("keyboard");e.selectionManager.setFocused(!0)}},[o]),c=e.useCallback((e,t)=>{let{state:r}=o;l.current={timeout:void 0,focusedKey:r.selectionManager.focusedKey,collection:r.collection,selectedKeys:r.selectionManager.selectedKeys,draggingKeys:rt.draggingKeys,isInternal:it(n),target:t},(o.props.onDrop||i)({type:"drop",x:e.x,y:e.y,target:t,items:e.items,dropOperation:e.dropOperation}),l.current.timeout=setTimeout(()=>{d(),l.current=null},50)},[o,i,n,d]);e.useEffect(()=>()=>{l.current&&clearTimeout(l.current.timeout)},[]),y(()=>{l.current&&r.collection!==l.current.collection&&d()});let{direction:p}=E();e.useEffect(()=>{if(!n.current)return;let e=(e,t=!0,r="down")=>function(e,t,r,n,o=!1,i=!1){switch(n){case"left":return o?Kt(e,t,r,i,"left"):Ot(e,t,r,i,"left");case"right":return o?Ot(e,t,r,i,"right"):Kt(e,t,r,i,"right");case"up":return Ot(e,t,r,i);case"down":return Kt(e,t,r,i)}}(o.props.keyboardDelegate,o.state.collection,e,r,"rtl"===p,t),t=(t,r=!0)=>e(t,r,"up"),r=(e,t,r,i,a=!0)=>{let s,l=0,{draggingKeys:d}=rt,c=it(n);do{let n=i(e,a);if(!n)return null;e=n,s=o.state.getDropOperation({target:n,types:t,allowedOperations:r,isInternal:c,draggingKeys:d}),"root"===e.type&&l++}while("cancel"===s&&!o.state.isDropTarget(e)&&l<2);return"cancel"===s?null:e};return gt({element:n.current,preventFocusOnDrop:!0,getDropOperation(t,i){if(o.state.target){let{draggingKeys:e}=rt,r=it(n);return o.state.getDropOperation({target:o.state.target,types:t,allowedOperations:i,isInternal:r,draggingKeys:e})}return r(null,t,i,e)?"move":"cancel"},onDropEnter(i,a){let s=qe(a.items),l=o.state.selectionManager,d=null;nt(n);let c=l.focusedKey,p="after",u=null!=c?o.state.collection.getItem(c):null;if("cell"===u?.type&&(c=u.parentKey),null!=c&&l.isSelected(c)&&(l.selectedKeys.size>1&&l.firstSelectedKey===c?p="before":c=l.lastSelectedKey),null!=c){d={type:"item",key:c,dropPosition:p};let{draggingKeys:i}=rt,l=it(n);"cancel"===o.state.getDropOperation({target:d,types:s,allowedOperations:a.allowedDropOperations,isInternal:l,draggingKeys:i})&&(d=r(d,s,a.allowedDropOperations,e,!1)??r(d,s,a.allowedDropOperations,t,!1))}d||(d=r(null,s,a.allowedDropOperations,e)),o.state.setTarget(d)},onDropExit(){nt(void 0),o.state.setTarget(null)},onDropTargetEnter(e){o.state.setTarget(e)},onDropActivate(e,t){"item"===t?.type&&"on"===t?.dropPosition&&"function"==typeof o.props.onDropActivate&&o.props.onDropActivate({type:"dropactivate",x:e.x,y:e.y,target:t})},onDrop(e,t){nt(n),o.state.target&&c(e,t||o.state.target)},onKeyDown(i,a){let{keyboardDelegate:s}=o.props,l=qe(a.items);switch(i.key){case"ArrowDown":if(s.getKeyBelow){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"down"));o.state.setTarget(t)}break;case"ArrowUp":if(s.getKeyAbove){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"up"));o.state.setTarget(t)}break;case"ArrowLeft":if(s.getKeyLeftOf){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"left"));o.state.setTarget(t)}break;case"ArrowRight":if(s.getKeyRightOf){let t=r(o.state.target,l,a.allowedDropOperations,(t,r)=>e(t,r,"right"));o.state.setTarget(t)}break;case"Home":if(s.getFirstKey){let t=r(null,l,a.allowedDropOperations,e);o.state.setTarget(t)}break;case"End":if(s.getLastKey){let e=r(null,l,a.allowedDropOperations,t);o.state.setTarget(e)}break;case"PageDown":if(s.getKeyPageBelow){let i=o.state.target;if(i){let d=s.getFirstKey?.();"item"===i.type&&(d=i.key);let c=null;null!=d&&(c=s.getKeyPageBelow(d));let p="item"===i.type?i.dropPosition:"after";if((null==c||"item"===i.type&&i.key===s.getLastKey?.())&&(c=s.getLastKey?.()??null,p="after"),null==c)break;i={type:"item",key:c,dropPosition:p};let{draggingCollectionRef:u,draggingKeys:g}=rt,f=u?.current===n?.current;"cancel"===o.state.getDropOperation({target:i,types:l,allowedOperations:a.allowedDropOperations,isInternal:f,draggingKeys:g})&&(i=r(i,l,a.allowedDropOperations,e,!1)??r(i,l,a.allowedDropOperations,t,!1))}else i=r(null,l,a.allowedDropOperations,e);o.state.setTarget(i??o.state.target)}break;case"PageUp":{if(!s.getKeyPageAbove)break;let i=o.state.target;if(i){if("item"===i.type){if(i.key===s.getFirstKey?.())i={type:"root"};else{let e=s.getKeyPageAbove(i.key),t=i.dropPosition;if(null==e&&(e=s.getFirstKey?.(),t="before"),null==e)break;i={type:"item",key:e,dropPosition:t}}let{draggingKeys:d}=rt,c=it(n);"cancel"===o.state.getDropOperation({target:i,types:l,allowedOperations:a.allowedDropOperations,isInternal:c,draggingKeys:d})&&(i=r(i,l,a.allowedDropOperations,t,!1)??r(i,l,a.allowedDropOperations,e,!1))}}else i=r(null,l,a.allowedDropOperations,t);o.state.setTarget(i??o.state.target);break}}o.props.onKeyDown?.(i)}})},[o,n,c,p]);let u=P();return Ye.set(r,{id:u,ref:n}),{collectionProps:K(s,{id:u,"aria-describedby":null})}}function jt(t,r,n){let{dropProps:o}=xt(),i=function(e){let{ref:t}=Ye.get(e)||{};if(!t)throw new Error("Droppable item outside a droppable collection");return t}(r);e.useEffect(()=>{if(n.current)return e={element:n.current,target:t.target,getDropOperation(e,n){let{draggingKeys:o}=rt,a=it(i);return r.getDropOperation({target:t.target,types:e,allowedOperations:n,isInternal:a,draggingKeys:o})},activateButtonRef:t.activateButtonRef},ct.set(e.element,e),()=>{ct.delete(e.element)};var e},[n,t.target,r,i,t.activateButtonRef]);let a=ft(),{draggingKeys:s}=rt,l=it(i),d=a&&"cancel"!==r.getDropOperation({target:t.target,types:qe(a.dragTarget.items),allowedOperations:a.dragTarget.allowedDropOperations,isInternal:l,draggingKeys:s}),c=r.isDropTarget(t.target);return e.useEffect(()=>{a&&c&&n.current&&n.current.focus()},[c,a,n]),{dropProps:{...o,"aria-hidden":!a||d?void 0:"true"},isDropTarget:c}}function At(e,t,r){let{target:n}=e,{collection:o}=t,i=f((a=bt)&&a.__esModule?a.default:a,"@react-aria/dnd");var a;let s,l=ft(),{dropProps:d}=jt(e,t,r),c=P(),p=e=>null==e?"":o.getTextValue?.(e)??o.getItem(e)?.textValue??"",u="";if("root"===n.type)u=i.format("dropOnRoot"),s=`${c} ${function(e){let{id:t}=Ye.get(e)||{};if(!t)throw new Error("Droppable item outside a droppable collection");return t}(t)}`;else if("on"===n.dropPosition)u=i.format("dropOnItem",{itemText:p(n.key)});else{let e,t;if("before"===n.dropPosition){let t=o.getItem(n.key)?.prevKey,r=null!=t?o.getItem(t):null;e="item"===r?.type?r.key:null}else e=n.key;if("after"===n.dropPosition){let e=o.getItem(n.key)?.nextKey,r=null!=e?o.getItem(e):null;t="item"===r?.type?r.key:null}else t=n.key;null!=e&&null!=t?u=i.format("insertBetween",{beforeItemText:p(e),afterItemText:p(t)}):null!=e?u=i.format("insertAfter",{itemText:p(e)}):null!=t&&(u=i.format("insertBefore",{itemText:p(t)}))}let g=t.isDropTarget(n),m=l?d["aria-hidden"]:"true";return{dropIndicatorProps:{...d,id:c,"aria-roledescription":i.format("dropIndicator"),"aria-label":u,"aria-labelledby":s,"aria-hidden":m,tabIndex:-1},isDropTarget:g,isHidden:!g&&!!m}}const Rt={keyboard:{start:"dragDescriptionKeyboard",end:"endDragKeyboard"},touch:{start:"dragDescriptionTouch",end:"endDragTouch"},virtual:{start:"dragDescriptionVirtual",end:"endDragVirtual"}};function Mt(t){let{hasDragButton:r,isDisabled:n}=t,o=f((i=bt)&&i.__esModule?i.default:i,"@react-aria/dnd");var i;let a=e.useRef({options:t,x:0,y:0}).current;a.options=t;let s=e.useRef(null),[p,u]=e.useState(!1),g=e=>{s.current=e,u(!!e)},{addGlobalListener:h,removeAllGlobalListeners:y}=O(),D=e.useRef(null);e.useEffect(()=>()=>{if(s.current&&(!s.current.isConnected||parseInt(e.version,10)<17)){if("function"==typeof a.options.onDragEnd){let e={type:"dragend",x:0,y:0,dropOperation:$e[tt||"none"]};a.options.onDragEnd(e)}g(null),lt(Be.none),at(void 0)}},[a]);let v=e=>{if("function"==typeof a.options.onDragStart){let t=e.getBoundingClientRect();a.options.onDragStart({type:"dragstart",x:t.x+t.width/2,y:t.y+t.height/2})}!function(e,t){if(pt)throw new Error("Cannot begin dragging while already dragging");pt=new vt(e,t),requestAnimationFrame(()=>{pt&&(pt.setup(),"keyboard"===We()&&pt.next())});for(let r of ut)r()}({element:e,items:a.options.getItems(),allowedDropOperations:"function"==typeof a.options.getAllowedDropOperations?a.options.getAllowedDropOperations():["move","copy","link"],onDragEnd(e){g(null),"function"==typeof a.options.onDragEnd&&a.options.onDragEnd(e)}},o),g(e)},b=Je(),w=p?Rt[b].end:Rt[b].start,k=m(o.format(w)),E={};return r||(E={...k,onPointerDown(e){if(D.current=c(e.nativeEvent)?"virtual":e.pointerType,e.width<1&&e.height<1&&T()&&x())D.current="virtual";else{let t=e.currentTarget.getBoundingClientRect(),r=e.clientX-t.x,n=e.clientY-t.y,o=t.width/2,i=t.height/2;Math.abs(r-o)<=.5&&Math.abs(n-i)<=.5?D.current="virtual":D.current=e.pointerType}},onKeyDownCapture(e){l(e)===e.currentTarget&&"Enter"===e.key&&(e.preventDefault(),e.stopPropagation())},onKeyUpCapture(e){l(e)===e.currentTarget&&"Enter"===e.key&&(e.preventDefault(),e.stopPropagation(),v(l(e)))},onClick(e){(d(e.nativeEvent)||"virtual"===D.current)&&(e.preventDefault(),e.stopPropagation(),v(l(e)))}}),n?{dragProps:{draggable:"false"},dragButtonProps:{},isDragging:!1}:{dragProps:{...E,draggable:"true",onDragStart:e=>{if(e.defaultPrevented)return;if(e.stopPropagation(),"virtual"===D.current)return e.preventDefault(),v(l(e)),void(D.current=null);"function"==typeof t.onDragStart&&t.onDragStart({type:"dragstart",x:e.clientX,y:e.clientY});let r=t.getItems();e.dataTransfer.clearData?.(),function(e,t){let r=new Map,n=!1,o=[];for(let i of t){let e=Object.keys(i);e.length>1&&(n=!0);let t={};for(let o of e){let e=r.get(o);e?n=!0:(e=[],r.set(o,e));let a=i[o];t[o]=a,e.push(a)}o.push(t)}for(let[i,a]of r)if(Ve.has(i)){let t=a.join("\n");e.items.add(t,i)}else e.items.add(a[0],i);if(n){let t=JSON.stringify(o);e.items.add(t,He)}}(e.dataTransfer,r);let n=Be.all;if("function"==typeof t.getAllowedDropOperations){let e=t.getAllowedDropOperations();n=Be.none;for(let t of e)n|=Be[t]||Be.none}lt(n);let o=Fe[n]||"none";e.dataTransfer.effectAllowed="cancel"===o?"none":o,"function"==typeof t.preview?.current&&t.preview.current(r,(t,r,n)=>{if(!t)return;let o=t.getBoundingClientRect(),i=e.currentTarget.getBoundingClientRect(),a=e.clientX-i.x,s=e.clientY-i.y;(a>o.width||s>o.height)&&(a=o.width/2,s=o.height/2);let l=a,d=s;"number"==typeof r&&"number"==typeof n&&(l=r,d=n),l=Math.max(0,Math.min(l,o.width)),d=Math.max(0,Math.min(d,o.height));let c=2*Math.round(o.height/2);t.style.height=`${c}px`,e.dataTransfer.setDragImage(t,l,d)}),h(window,"drop",e=>{e.preventDefault(),e.stopPropagation(),console.warn("Drags initiated from the React Aria useDrag hook may only be dropped on a target created with useDrop. This ensures that a keyboard and screen reader accessible alternative is available.")},{once:!0}),a.x=e.clientX,a.y=e.clientY;let i=l(e);requestAnimationFrame(()=>{g(i)})},onDrag:e=>{e.stopPropagation(),e.clientX===a.x&&e.clientY===a.y||("function"==typeof t.onDragMove&&t.onDragMove({type:"dragmove",x:e.clientX,y:e.clientY}),a.x=e.clientX,a.y=e.clientY)},onDragEnd:e=>{if(e.stopPropagation(),"function"==typeof t.onDragEnd){let r={type:"dragend",x:e.clientX,y:e.clientY,dropOperation:$e[e.dataTransfer.dropEffect]};tt&&(r.dropOperation=$e[tt]),t.onDragEnd(r)}g(null),y(),lt(Be.none),at(void 0)}},dragButtonProps:{...k,onPress:e=>{"keyboard"!==e.pointerType&&"virtual"!==e.pointerType||v(e.target)}},isDragging:p}}const Bt={keyboard:{selected:"dragSelectedKeyboard",notSelected:"dragDescriptionKeyboard"},touch:{selected:"dragSelectedLongPress",notSelected:"dragDescriptionLongPress"},virtual:{selected:"dragDescriptionVirtual",notSelected:"dragDescriptionVirtual"}};function Lt(e,t){let r=f((n=bt)&&n.__esModule?n.default:n,"@react-aria/dnd");var n;let o,i,a=t.isDisabled||t.selectionManager.isDisabled(e.key),{dragProps:s,dragButtonProps:l}=Mt({getItems:()=>t.getItems(e.key),preview:t.preview,getAllowedDropOperations:t.getAllowedDropOperations,hasDragButton:e.hasDragButton,onDragStart(r){var n;t.startDrag(e.key,r),n=t.draggingKeys,rt.draggingKeys=n},onDragMove(e){t.moveDrag(e)},onDragEnd(e){let{dropOperation:r}=e,n="cancel"!==r&&it();t.endDrag({...e,keys:t.draggingKeys,isInternal:n}),ot()}}),d=t.collection.getItem(e.key),c=t.getKeysForDrag(e.key).size,p=c>1&&t.selectionManager.isSelected(e.key),u=Je();if(e.hasDragButton||"none"===t.selectionManager.selectionMode)if(p)o=r.format("dragSelectedItems",{count:c});else{let n=t.collection.getTextValue?.(e.key)??d?.textValue??"";o=r.format("dragItem",{itemText:n})}else{let t=Bt[u][p?"selected":"notSelected"];e.hasAction&&"keyboard"===u&&(t+="Alt"),i=p?r.format(t,{count:c}):r.format(t),delete s.onClick}let g=m(i);if(i&&Object.assign(s,g),!e.hasDragButton&&e.hasAction){let{onKeyDownCapture:e,onKeyUpCapture:t}=s;"touch"===u&&delete s["aria-describedby"],s.onKeyDownCapture=t=>{t.altKey&&e?.(t)},s.onKeyUpCapture=e=>{e.altKey&&t?.(e)}}return{dragProps:a?{}:s,dragButtonProps:{...l,isDisabled:a,"aria-label":o}}}function Ft(e,t,r){let{draggingCollectionRef:n}=rt;t.draggingKeys.size>0&&n?.current!==r.current&&function(e){rt.draggingCollectionRef=e}(r)}const $t=t.forwardRef(function(n,o){let i=n.children,[a,s]=e.useState(null),l=e.useRef(null),d=e.useRef(void 0);return e.useImperativeHandle(o,()=>(e,t)=>{let n,o,a,c=i(e);c&&"object"==typeof c&&"element"in c?(n=c.element,o=c.x,a=c.y):n=c,r.flushSync(()=>{s(n)}),t(l.current,o,a),d.current=requestAnimationFrame(()=>{s(null)})},[i]),e.useEffect(()=>()=>{d.current&&cancelAnimationFrame(d.current)},[]),a?t.createElement("div",{style:{zIndex:-100,position:"fixed",top:0,left:-1e5},ref:l},a):null});function Nt(e,t){if(!e)return!t;switch(e.type){case"root":return"root"===t?.type;case"item":return"item"===t?.type&&t?.key===e.key&&t?.dropPosition===e.dropPosition}}class zt{constructor(e,t,r){this.collection=e,this.ref=t,this.layout=r?.layout||"stack",this.orientation=r?.orientation||"vertical",this.direction=r?.direction||"ltr"}getPrimaryStart(e){return"horizontal"===this.orientation?e.left:e.top}getPrimaryEnd(e){return"horizontal"===this.orientation?e.right:e.bottom}getSecondaryStart(e){return"horizontal"===this.orientation?e.top:e.left}getSecondaryEnd(e){return"horizontal"===this.orientation?e.bottom:e.right}getFlowStart(e){return"stack"===this.layout?this.getPrimaryStart(e):this.getSecondaryStart(e)}getFlowEnd(e){return"stack"===this.layout?this.getPrimaryEnd(e):this.getSecondaryEnd(e)}getFlowSize(e){return this.getFlowEnd(e)-this.getFlowStart(e)}getDropTargetFromPoint(e,t,r){if(this.collection[Symbol.iterator]().next().done||!this.ref.current)return{type:"root"};let n=this.ref.current.getBoundingClientRect(),o="horizontal"===this.orientation?e:t,i="horizontal"===this.orientation?t:e;o+=this.getPrimaryStart(n),i+=this.getSecondaryStart(n);let a="stack"===this.layout?o:i,s="horizontal"===this.orientation&&"rtl"===this.direction,l="grid"===this.layout&&"vertical"===this.orientation&&"rtl"===this.direction,d="stack"===this.layout?s:l,c=this.ref.current?.dataset.collection,p=this.ref.current.querySelectorAll(c?`[data-collection="${CSS.escape(c)}"]`:"[data-key]"),u=new Map;for(let D of p)D instanceof HTMLElement&&null!=D.dataset.key&&u.set(D.dataset.key,D);let g=[...this.collection].filter(e=>"item"===e.type);if(g.length<1)return{type:"root"};let f=0,m=g.length;for(;f{t?f=e+1:m=e};if(othis.getPrimaryEnd(c))p(!s);else if(ithis.getSecondaryEnd(c))){let e={type:"item",key:t.key,dropPosition:"on"};if(r(e))a<=this.getFlowStart(c)+5&&r({...e,dropPosition:"before"})?e.dropPosition=d?"after":"before":a>=this.getFlowEnd(c)-5&&r({...e,dropPosition:"after"})&&(e.dropPosition=d?"before":"after");else{let t=this.getFlowStart(c)+this.getFlowSize(c)/2;a<=t&&r({...e,dropPosition:"before"})?e.dropPosition=d?"after":"before":a>=t&&r({...e,dropPosition:"after"})&&(e.dropPosition=d?"before":"after")}return e}p(!l)}}let h=g[Math.min(f,g.length-1)],y=u.get(String(h.key));return n=y?.getBoundingClientRect(),n&&(o{let{onDrop:r,onInsert:n,onItemDrop:o,onReorder:i,onMove:a,onRootDrop:s,getItems:l,renderDragPreview:d,renderDropIndicator:c,dropTargetDelegate:p}=t,u=!!(r||n||o||i||a||s),g={};return!!l&&(g.useDraggableCollectionState=function(r){return function(t){let{getItems:r,isDisabled:n,collection:o,selectionManager:i,onDragStart:a,onDragMove:s,onDragEnd:l,preview:d,getAllowedDropOperations:c}=t,[,p]=e.useState(!1),u=e.useRef(new Set),g=e.useRef(null),f=e=>{let t=new Set;if(i.isSelected(e))for(let r of i.selectedKeys){let e=o.getItem(r);if(e){let n=!1,a=e.parentKey;for(;null!=a;){if(i.selectedKeys.has(a)){n=!0;break}let e=o.getItem(a);a=e?e.parentKey:null}n||t.add(r)}}else t.add(e);return t};return{collection:o,selectionManager:i,get draggedKey(){return g.current},get draggingKeys(){return u.current},isDragging:e=>u.current.has(e),getKeysForDrag:f,getItems(e){let t=f(e),n=[];for(let r of t){let e=o.getItem(r)?.value;null!=e&&n.push(e)}return r(f(e),n)},isDisabled:n,preview:d,getAllowedDropOperations:c,startDrag(e,t){let r=f(e);u.current=r,g.current=e,i.setFocused(!1),p(!0),"function"==typeof a&&a({...t,keys:r})},moveDrag(e){"function"==typeof s&&s({...e,keys:u.current})},endDrag(e){let{isInternal:t}=e;"function"==typeof l&&l({...e,keys:u.current,isInternal:t}),u.current=new Set,g.current=null,p(!1)}}}({...r,...t})},g.useDraggableCollection=Ft,g.useDraggableItem=Lt,g.DragPreview=$t,g.renderDragPreview=d,g.isVirtualDragging=mt),u&&(g.useDroppableCollectionState=function(r){return function(t){let{acceptedDragTypes:r="all",isDisabled:n,onInsert:o,onRootDrop:i,onItemDrop:a,onReorder:s,onMove:l,shouldAcceptItemDrop:d,collection:c,selectionManager:p,onDropEnter:u,getDropOperation:g,onDrop:f}=t,[m,h]=e.useState(null),y=e.useRef(null),D=e=>{if("before"===e.dropPosition){let t=c.getItem(e.key);return t&&null!=t.prevKey?{type:"item",key:t.prevKey,dropPosition:"after"}:null}if("after"===e.dropPosition){let t=c.getItem(e.key);return t&&null!=t.nextKey?{type:"item",key:t.nextKey,dropPosition:"before"}:null}return null},v=e.useCallback(e=>{let{target:t,types:p,allowedOperations:u,isInternal:m,draggingKeys:h}=e;if(n||!t)return"cancel";if("all"===r||r.some(e=>p.has(e))){let e=o&&"item"===t.type&&!m&&("before"===t.dropPosition||"after"===t.dropPosition),r=s&&"item"===t.type&&m&&("before"===t.dropPosition||"after"===t.dropPosition)&&function(e,t,r){let n=e.getItem(t.key);for(let o of r){let t=e.getItem(o);if(t?.parentKey!==n?.parentKey)return!1}return!0}(c,t,h),n="item"!==t.type||"on"!==t.dropPosition||!d||d(t,p),y=l&&"item"===t.type&&m&&n,D=i&&"root"===t.type&&!m,v=a&&"item"===t.type&&"on"===t.dropPosition&&!(m&&null!=t.key&&h.has(t.key))&&n;if(f||e||r||y||D||v)return g?g(t,p,u):u[0]}return"cancel"},[n,c,r,g,o,i,a,d,s,l,f]);return{collection:c,selectionManager:p,isDisabled:n,target:m,setTarget(e){if(this.isDropTarget(e))return;let r=y.current;r&&"function"==typeof t.onDropExit&&t.onDropExit({type:"dropexit",x:0,y:0,target:r}),e&&"function"==typeof u&&u({type:"dropenter",x:0,y:0,target:e}),y.current=e??null,h(e??null)},isDropTarget(e){let t=y.current;return!(!t||!e)&&(!!Nt(e,t)||"item"===e?.type&&"item"===t?.type&&e.key!==t.key&&e.dropPosition!==t.dropPosition&&"on"!==e.dropPosition&&"on"!==t.dropPosition&&(Nt(D(e),t)||Nt(e,D(t))))},getDropOperation(e){let{target:t,isInternal:r,draggingKeys:n}=e;if(r&&"item"===t.type&&n.size>0){if(n.has(t.key)&&"on"===t.dropPosition)return"cancel";let e=t.key;for(;null!=e;){let t=c.getItem(e),r=t?.parentKey;if(null!=r&&n.has(r))return"cancel";e=r??null}}return v(e)}}}({...r,...t})},g.useDroppableItem=jt,g.useDroppableCollection=function(e,r,n){return It({...e,...t},r,n)},g.useDropIndicator=At,g.renderDropIndicator=c,g.dropTargetDelegate=p,g.ListDropTargetDelegate=zt),g},[t])}}function Ht({className:e,...t}){return n.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:20,viewBox:"0 0 12 12","aria-hidden":"true",focusable:"false",className:S("rp-icon",e),...t,children:[1.6,6,10.4].flatMap(e=>[3.8,8.2].map(t=>n.jsx("circle",{cx:t,cy:e,r:1.1,fill:"currentColor"},`${t}-${e}`)))})}const Xt="application/x-doona-card",Yt={},Ut=new Map,qt=new Set,Gt=e=>{if(Yt.card=e,Ut.clear(),void 0===e)for(const t of qt)t()},Jt=e=>[...document.querySelectorAll(".rp-dashboard-cell")].find(t=>t.dataset.instance===e);function Wt(e){let t=[1,1];for(let r=1;r<=12;r++){const n=Math.round(e*r);n>0&&Math.abs(e-n/r){const e=t.current;if(!e)return;const r=()=>{const t=e.parentElement.getBoundingClientRect(),r=getComputedStyle(e),n=Number.parseFloat(r.getPropertyValue("--rp-dash-gap"))||0,o=function(e,t,r,n){const o=n?e.map(e=>({...e,left:t-e.right,right:t-e.left})):e,i=new Map;for(const a of o)i.set(Math.round(a.top),[...i.get(Math.round(a.top))??[],a]);return[...i.values()].flatMap(e=>{const i=e[0].top,a=Math.max(...e.map(e=>e.bottom)),s=Math.max(...e.map(e=>e.right))+r;let l=t;for(const t of o)!e.includes(t)&&t.topi+.5&&t.right>s&&(l=Math.min(l,t.left-r));return(l-s+r)/(t+r)<1/6-.01?[]:[{after:e.at(-1).id,left:n?t-l:s,top:i,width:l-s,height:a-i}]})}([...e.querySelectorAll(":scope > .rp-dashboard-cell")].map(e=>{const r=e.getBoundingClientRect();return{id:e.dataset.instance,left:r.left-t.left,right:r.right-t.left,top:r.top-t.top,bottom:r.bottom-t.top}}),t.width,n,"rtl"===r.direction).map(e=>({...e,share:Wt((e.width+n)/(t.width+n))}));s(e=>JSON.stringify(e)===JSON.stringify(o)?e:o)};return r(),e.addEventListener("rp-packed",r),()=>e.removeEventListener("rp-packed",r)},[t]),a.map(e=>n.jsx(Zt,{section:t,gap:e,label:r(e.share),refusal:o,onPlace:i},e.after))}function Zt({section:t,gap:r,label:o,refusal:i,onPlace:a}){const s=e.useRef(null),[l,d]=e.useState(!1),c=(e=Yt.card)=>{const n=t.current;if(void 0===e||!n)return!1;const o=[e,r.after,r.width].join("\n");return Ut.has(o)||Ut.set(o,(function(e,t,r){const n=Jt(t),o=Jt(r);if(!n||o?.parentElement!==e)return;const i=document.createElement("div");i.className="rp-dashboard-cell",i.style.visibility="hidden";for(const d of["data-module","data-size","data-foot","data-width","data-height"]){const e=n.getAttribute(d);null!==e&&i.setAttribute(d,e)}const a=e.dataset.grid;i.dataset.width&&(e.dataset.grid="fraction");const s=n.parentElement===e;s&&n.classList.remove("rp-dashboard-cell"),o.after(i);const l=i.getBoundingClientRect().width;return i.remove(),s&&n.classList.add("rp-dashboard-cell"),void 0===a?delete e.dataset.grid:e.dataset.grid=a,l}(n,e,r.after)??1/0)<=r.width+1),Ut.get(o)},{dropProps:p,isDropTarget:u}=Tt({ref:s,getDropOperation:e=>e.has(Xt)&&c()?"move":"cancel",onDrop:async e=>{for(const t of e.items){if("text"!==t.kind||!t.types.has(Xt))continue;const e=await t.getText(Xt);c(e)&&a(e,{target:r.after,after:!0})}}}),g={onDragEnter:()=>d(void 0!==Yt.card&&!c()),onDragLeave:()=>d(!1),onDrop:()=>d(!1)};return e.useEffect(()=>{const e=()=>d(!1);return qt.add(e),()=>{qt.delete(e)}},[]),n.jsxs("div",{...K(p,g),ref:s,className:"rp-dashboard-gap rp-label","data-drop-target":u||void 0,"data-refused":l||void 0,style:{left:r.left,top:r.top,width:r.width,height:r.height},children:[o,n.jsx(C,{children:n.jsx("span",{role:"status",children:l?i:""})})]})}const Qt="application/x-doona-card",er={current:null};function tr({label:t,profile:r,items:o,textValue:i,dragLabel:a,tools:s,resize:l,gapLabel:d,refusal:c,rearm:p,children:u,onPlace:g,...f}){const m=e.useRef(null);ce(r?m:er),e.useEffect(()=>{!p?.focus||document.activeElement&&document.activeElement!==document.body||m.current?.querySelector(`[data-key="${CSS.escape(p.focus)}"]`)?.focus()},[p]);const h=async e=>{for(const t of e.items)if("text"===t.kind&&t.types.has(Qt))return t.getText(Qt)},{dragAndDropHooks:y}=function(t){const{dragAndDropHooks:r}=Vt(t);return{dragAndDropHooks:e.useMemo(()=>function(e){const{useDraggableItem:t,isVirtualDragging:r}=e;return t&&r?{...e,useDraggableItem:(e,n)=>{const o=t(e,n),i=o.dragButtonProps.onPress;return{...o,dragButtonProps:{...o.dragButtonProps,onPress:e=>{r()||i?.(e)}}}}}:e}(r),[r])}}({getItems:e=>[...e].map(e=>({[Qt]:String(e),"text/plain":i(o.find(t=>t.id===e))})),getAllowedDropOperations:()=>["move"],acceptedDragTypes:[Qt],getDropOperation:()=>"move",onDragStart:e=>Gt(String([...e.keys][0])),onDragEnd:()=>{Gt(void 0),function(){const e=()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("mousedown",t,!0)},t=t=>{e();const{clientX:r,clientY:n,screenX:o,screenY:i,button:a,buttons:s,ctrlKey:l,shiftKey:d,altKey:c,metaKey:p}=t;t.target?.dispatchEvent(new PointerEvent("pointerdown",{bubbles:!0,cancelable:!0,composed:!0,pointerId:1,pointerType:"mouse",isPrimary:!0,clientX:r,clientY:n,screenX:o,screenY:i,button:a,buttons:s,ctrlKey:l,shiftKey:d,altKey:c,metaKey:p}))};document.addEventListener("pointerdown",e,!0),document.addEventListener("mousedown",t,!0)}()},renderDropIndicator:e=>n.jsx(Ie,{target:e,className:"rp-canvas-drop"}),onReorder:e=>{for(const t of e.keys)g(String(t),{target:String(e.target.key),after:"after"===e.target.dropPosition})},onInsert:async e=>{const t=await h(e);t&&g(t,{target:String(e.target.key),after:"after"===e.target.dropPosition})},onRootDrop:async e=>{const t=await h(e);t&&g(t,{})}}),D=n.jsx(Se,{...f,ref:m,"aria-label":t,layout:"grid",className:r?"rp-dash-section":"rp-widget-grid rp-sortable-grid","data-profile":r,"data-grid":r?ue(o):void 0,items:o,dragAndDropHooks:y,dependencies:[u,s,l],children:e=>n.jsxs(Ce,{id:e.id,textValue:i(e),className:r?"rp-dashboard-cell":"rp-widget-cell rp-sortable-row",...r?pe(e):{"data-size":"wide"===e.size?"large":e.size,"data-module":e.module},children:[n.jsxs("div",{className:"rp-dashboard-tools",children:[n.jsx(I,{slot:"drag",className:j({quiet:!0,icon:!0,small:!r}),"aria-label":a(e),children:n.jsx(Ht,{})}),s?.(e)]}),n.jsx("div",{className:"rp-dashboard-body",inert:!0,children:u(e)}),l?.(e)]})});return r?n.jsxs("div",{className:"rp-dashboard-canvas","data-rearm":p?"":void 0,children:[D,d&&n.jsx(_t,{section:m,label:d,refusal:c,onPlace:g})]}):D}function rr({id:t,label:r,added:o,addLabel:i,count:a,onAdd:s,presets:l,row:d,children:c}){const[p,u]=A(void 0,200),[g,f]=e.useState(!1);return u&&!g&&f(!0),n.jsxs("section",{ref:p,className:"rp-widget-gallery-tile","data-added":o||void 0,"data-module":t,"aria-label":r,children:[n.jsx("h3",{className:"rp-h3",children:r}),l&&d?n.jsx(nr,{presets:l,row:d,loaded:g,disabled:o}):n.jsx("div",{className:"rp-widget-gallery-frame",inert:!0,children:n.jsx(R,{value:!1,children:g&&c})}),n.jsxs("div",{className:"rp-cluster",children:[n.jsx(M,{isDisabled:o,label:`${i} ${r}`,onPress:s,children:i}),n.jsx("span",{className:"rp-label",children:a})]})]})}function nr({presets:e,row:t,loaded:r,disabled:o}){const[i,a]=B(Math.round),s=a?a.width/t.width:0;return n.jsx("div",{ref:i,className:"rp-widget-gallery-presets",style:{"--rp-preset-gap":t.gap*s+"px"},children:r&&s>0&&e.map(e=>n.jsx(or,{preset:e,width:e.share*(t.width+t.gap)-t.gap,scale:s,disabled:o},e.key))})}function or({preset:e,width:t,scale:r,disabled:o}){const[i,a]=B(Math.round);return n.jsxs("div",{className:"rp-widget-gallery-preset",style:{inlineSize:t*r},children:[n.jsxs("div",{className:"rp-widget-gallery-thumb",style:{blockSize:(a?.height??0)*r},children:[n.jsx("div",{ref:i,className:"rp-widget-gallery-thumb-card",style:{inlineSize:t,scale:String(r)},inert:!0,children:n.jsx(R,{value:!1,children:e.preview})}),n.jsx(I,{className:"rp-widget-gallery-thumb-add","aria-label":e.addLabel,isDisabled:o,onPress:e.onAdd})]}),n.jsx("span",{className:"rp-label",children:e.label})]})}function ir({label:e,children:t}){return n.jsxs("div",{className:"rp-module-option",children:[n.jsx("span",{className:"rp-label",children:e}),t]})}function ar(){const e=document.querySelector(".rp-dashboard-canvas"),t=e&&getComputedStyle(e.querySelector(".rp-dash-section")??e);return{width:e?.getBoundingClientRect().width||1152,gap:Number.parseFloat(t?.getPropertyValue("--rp-dash-gap")??"")||12,snap:Number.parseFloat(t?.getPropertyValue("--rp-dash-snap")??"")||12}}function sr({items:t,add:r,surface:o="panel"}){const i=L(),[a]=e.useState(ar);return Object.keys(F).filter(e=>"panel"===o||!$(e)).map(e=>{const s=t.filter(t=>t.id===e).length,l=ge(fe()).find(t=>t.id===e)??N(e),d=e=>{const t=ke(e.width);return a.snap>=12?t:Math.ceil(t*a.snap-1e-6)/a.snap};return n.jsx(rr,{id:e,label:i(F[e].label),added:s>=V,addLabel:i("widgets.add"),count:i("widgets.placedCount",{n:s,max:V}),onAdd:()=>r(e),row:a,presets:"dashboard"===o?ye(l,De(l)).map(t=>{const o=ve(l,t),a=be(t,i);return{key:a,label:a,addLabel:i("widgets.addPreset",{name:i(F[e].label),size:a}),share:d(t),onAdd:()=>r(e,t),preview:n.jsx(me,{id:e,children:n.jsx(z,{value:!0,children:n.jsx("div",{className:"rp-dashboard-cell",...pe(xe(o)),"data-tile":"tall"===o.height?"stacked":void 0,children:n.jsx(we,{item:o,preview:!0})})})})}}):void 0,children:"panel"===o&&n.jsx(me,{id:e,children:n.jsx(he,{item:N(e),preview:!0,sample:!0})})},e)})}const lr={area:"dashboard.form.area",sparkline:"dashboard.form.sparkline",donut:"dashboard.form.donut",waffle:"dashboard.form.waffle",dots:"dashboard.form.dots",ranked:"dashboard.form.ranked",kv:"dashboard.form.kv",facts:"dashboard.form.facts"},dr={small:"widgets.small",medium:"widgets.medium",large:"widgets.large",wide:"dashboard.wide"};function cr({active:e,items:t,sizes:r=[],surface:o,update:i,move:a,remove:s}){const l=L();return e?n.jsxs(n.Fragment,{children:["dashboard"===o&&Object.values(Te(e,De(e),l)).map(e=>e&&n.jsx(ir,{label:e.label,children:n.jsx(Ae,{label:e.label,value:e.value,onChange:t=>i(e.set(t)),items:e.options.map(e=>[e.value,e.label])})},e.label)),r.length>1&&n.jsx(ir,{label:l("widgets.size"),children:n.jsx(Ae,{label:l("widgets.size"),value:e.size,onChange:t=>i({...e,size:t,form:"panel"===o&&"small"===t&&H(e.id,o).includes("kv")?"kv":e.form}),items:r.map(e=>[e,l(dr[e])])})}),H(e.id,o).length>1&&!("small"===e.size&&!e.width&&H(e.id,o).includes("sparkline"))&&n.jsx(ir,{label:l("widgets.form"),children:n.jsx(Ae,{label:l("widgets.form"),value:X(e,o),onChange:t=>i({...e,form:t}),items:H(e.id,o).map(e=>[e,l(lr[e])])})}),"ranking"===e.id&&n.jsx(ir,{label:l("widgets.rankBy"),children:n.jsx(Ae,{label:l("widgets.rankBy"),value:e.by??"dev",onChange:t=>i({...e,by:"domain"===t?"domain":"dev"}),items:[["dev",l("widgets.devices")],["domain",l("widgets.domains")]]})}),["nodeLatency","policyGroups","latency"].includes(e.id)&&n.jsx(pr,{item:e,update:i}),n.jsxs("div",{className:"rp-cluster rp-module-actions",children:[n.jsx(M,{isDisabled:Y(t[0])===Y(e),onPress:()=>a(-1),children:l("widgets.up")}),n.jsx(M,{isDisabled:Y(t.at(-1))===Y(e),onPress:()=>a(1),children:l("widgets.down")}),n.jsx(M,{negative:!0,onPress:s,children:l("widgets.remove")})]})]}):n.jsx("p",{className:"rp-label",children:l("widgets.select")})}function pr({item:e,update:t}){const r=U(),o=Re(!0===r.data?.resources.groups.available),i=L(),a=i("latency"===e.id?"act.groupFollow":"dashboard.allGroups");return n.jsx(ir,{label:i("ui.group"),children:n.jsx(q,{label:i("ui.group"),value:e.group??"",items:[{id:"",label:a},...(o.data??[]).map(e=>({id:e.id,label:e.name}))],onChange:r=>t({...e,group:r}),children:o.data?.find(t=>t.id===e.group)?.name??a})})}function ur(e,t,r){const n=ge(e).find(e=>Y(e)===t);if(!n||r.target===t)return e;const o=e.sections.map(e=>({...e,items:e.items.filter(e=>Y(e)!==t)})),i=o.find(e=>e.id===r.section);if(!i)return e;const a=void 0===r.target?-1:i.items.findIndex(e=>Y(e)===r.target);return i.items.splice(a<0?i.items.length:a+(r.after?1:0),0,n),{...e,sections:o}}function gr({width:e,height:t}){return n.jsxs(n.Fragment,{children:[n.jsx(vr,{axis:e,edge:"width"}),t&&n.jsx(vr,{axis:t,edge:"height"})]})}const fr=e=>{const[t,r=1]=e.split("/").map(Number);return t/r||0};function mr(e,t){const r=e.closest(".rp-dash-section"),n=getComputedStyle(r),o=getComputedStyle(e),i=Number.parseFloat(n.getPropertyValue("--rp-dash-snap"))||12,a=Number.parseFloat(n.getPropertyValue("--rp-dash-gap"))||0,s=r.getBoundingClientRect().width+Math.min(0,Number.parseFloat(n.marginInlineStart)||0),l=Number.parseFloat(o.getPropertyValue("--rp-span"))||420,d=fr(o.getPropertyValue("--rp-shift"))-fr(o.getPropertyValue("--rp-trim"));return t.map(t=>{if(void 0===t.fraction)return e.dataset.width?l/420*(s+a)-a+d*a:e.getBoundingClientRect().width;return(i>=12?t.fraction:Math.ceil(t.fraction*i-1e-6)/i)*(s+a)-a})}const hr=(e,t,r)=>t.reduce((n,o,i)=>{const a=Math.abs(o-r)-Math.abs(t[n]-r);return a<-.5||a<=.5&&void 0===e[n].fraction&&void 0!==e[i].fraction?i:n},0),yr=new Map,Dr=e=>e.target&&yr.get(e.target)?.(e);function vr({axis:t,edge:r}){const o=e.useRef(null),i=e.useRef(null),{focusProps:a,isFocusVisible:s}=G(),l=()=>o.current.closest(".rp-dashboard-cell"),d=()=>"rtl"===getComputedStyle(o.current).direction,c=Math.max(0,t.options.findIndex(e=>e.value===t.value)),p=e=>{i.current&&(i.current.index=e),t.options[e].value!==t.value&&t.onChange(t.options[e])},{moveProps:u}=Me({onMoveStart:()=>{const e=l().getBoundingClientRect(),n=Number.parseFloat(getComputedStyle(l()).getPropertyValue("--rp-space-16"))||1,o="width"===r?mr(l(),t.options):[];i.current={start:c,size:"width"===r?e.width:e.height,travel:0,sizes:o,step:n,index:c},l().dataset.resizing=""},onMove:({deltaX:e,deltaY:n,pointerType:o})=>{const a=i.current;if(!a||"keyboard"===o)return;a.travel+="width"===r?e*(d()?-1:1):n;const s="width"===r?hr(t.options,a.sizes,a.size+a.travel):Math.max(0,Math.min(t.options.length-1,a.start+Math.round(a.travel/a.step)));s!==a.index&&p(s)},onMoveEnd:()=>{i.current=null,delete l().dataset.resizing}}),g=e.useRef(e=>{});return e.useLayoutEffect(()=>{g.current=e=>{const n="width"===r?d()?"ArrowLeft":"ArrowRight":"ArrowDown",o="width"===r?d()?"ArrowRight":"ArrowLeft":"ArrowUp";e.key!==n&&e.key!==o||(e.preventDefault(),e.stopPropagation(),p((e=>{if("width"===r&&void 0===t.options[c].fraction){if(!e)return c;const r=l().getBoundingClientRect().width,n=mr(l(),t.options).findIndex((e,n)=>void 0!==t.options[n].fraction&&e>r+1);return n<0?t.options.length-1:n}return Math.max(0,Math.min(t.options.length-1,c+(e?1:-1)))})(e.key===n)))}}),e.useEffect(()=>{return e=o.current,t=e=>g.current(e),yr.size||addEventListener("keydown",Dr,!0),yr.set(e,t),()=>{yr.delete(e),yr.size||removeEventListener("keydown",Dr,!0)};var e,t},[]),n.jsx("div",{ref:o,role:"slider",tabIndex:0,...a,...u,onPointerDown:e=>{e.preventDefault(),e.stopPropagation(),u.onPointerDown?.(e)},className:"rp-dashboard-resize","data-edge":r,"data-focus-visible":s||void 0,"aria-label":t.label,"aria-orientation":"width"===r?"horizontal":"vertical","aria-valuemin":0,"aria-valuemax":t.options.length-1,"aria-valuenow":c,"aria-valuetext":t.options[c]?.label})}const br=(e,t)=>e.filter(e=>e.id===t).lengthY(e)===t)?{instance:J()}:{}}:null;const wr=(e,t)=>Oe(e,e=>Y(e)===Y(t)?t:e);function xr({draft:t,setDraft:r,render:o}){const i=L(),[a,s]=e.useState({text:"",serial:0}),l=ge(t),d=e=>s(t=>({text:e,serial:t.serial+1})),c=e.useRef([]);e.useEffect(()=>()=>c.current.forEach(e=>Q(e.key)),[]),e.useEffect(()=>{c.current=c.current.filter(e=>!!e.restorable(t)||(Q(e.key),!1))},[t]);const[p,u]=e.useState(null),g=e.useRef({x:Number.NaN,y:Number.NaN});e.useEffect(()=>{const e=e=>{g.current={x:e.clientX,y:e.clientY}};return document.addEventListener("pointerdown",e,!0),document.addEventListener("pointermove",e,!0),()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("pointermove",e,!0)}},[]),e.useEffect(()=>{if(!p)return;const{x:e,y:t}=g.current,r=r=>{r instanceof PointerEvent&&r.clientX===e&&r.clientY===t||u(null)};return document.addEventListener("pointermove",r,!0),document.addEventListener("keydown",r,!0),()=>{document.removeEventListener("pointermove",r,!0),document.removeEventListener("keydown",r,!0)}},[p]);const f=e=>{const{layout:n,restore:o,restorable:a}=function(e,t){const r=e.sections.find(e=>e.items.some(e=>Y(e)===t));if(!r)return{layout:e,restore:e=>e,restorable:()=>!1};const n=r.items.findIndex(e=>Y(e)===t),o=r.items[n],i=e=>{const r=ge(e);return!r.some(e=>Y(e)===t)&&r.filter(e=>e.id===o.id).lengthe===r?{...e,items:e.items.filter(e=>e!==o)}:e)},restore:e=>i(e)?{...e,sections:e.sections.map(e=>e.id===r.id?{...e,items:[...e.items.slice(0,n),o,...e.items.slice(n)]}:e)}:e,restorable:i}}(t,Y(e)),s=l.findIndex(t=>Y(t)===Y(e)),d=l[s+1]??l[s-1];u({focus:d&&Y(d)}),r(n);const p=de("neutral",i("widgets.removed",{name:i(F[e.id].label)}),{id:`removed:${Y(e)}`,action:{label:i("widgets.undo"),onAction:()=>r(e=>e&&o(e)),closeOnAction:!0}});c.current.push({key:p,restorable:a})};return n.jsxs(n.Fragment,{children:[t.sections.map(e=>n.jsx(tr,{label:i("widgets.order"),profile:e.id,items:e.items.map(e=>({...xe(e),item:e})),textValue:({item:e})=>i(F[e.id].label),dragLabel:({item:e})=>i("widgets.drag",{name:i(F[e.id].label)}),gapLabel:e=>i("dashboard.remaining",{space:e}),refusal:i("dashboard.noRoom"),rearm:p,resize:({item:e})=>{const o=Te(e,De(e),i),a=(e,n)=>e&&{label:n,value:e.value,options:e.options,onChange:n=>{r(wr(t,e.set(n.value))),d(`${e.label}: ${n.label}`)}};return n.jsx(gr,{width:a(o.width,i("dashboard.resizeWidth")),height:a(o.height,i("dashboard.resizeHeight"))})},onPlace:(n,o)=>{r(ur(t,n,{section:e.id,...o})),d(i("widgets.reordered"))},tools:({item:e})=>n.jsxs(n.Fragment,{children:[n.jsx(ee,{title:i(F[e.id].label),placement:"bottom end",trigger:n.jsx(M,{quiet:!0,icon:!0,label:i("widgets.inspector"),children:n.jsx(te,{})}),children:()=>n.jsx("div",{className:"rp-module-inspector",children:n.jsx(cr,{active:e,items:l,surface:"dashboard",update:e=>r(wr(t,e)),move:n=>{r(function(e,t,r){const n=e.sections.findIndex(e=>e.items.some(e=>Y(e)===t));if(n<0)return e;const o=e.sections[n].items,i=o.findIndex(e=>Y(e)===t),a=o[i+r];if(a)return ur(e,t,{section:e.sections[n].id,target:Y(a),after:r>0});const s=e.sections[n+r];if(!s)return e;const l=r>0?s.items[0]:s.items.at(-1);return ur(e,t,{section:s.id,...l?{target:Y(l),after:r<0}:{}})}(t,Y(e),n)),d(i("widgets.reordered"))},remove:()=>f(e)})})}),n.jsx(M,{quiet:!0,icon:!0,label:i("widgets.removeName",{name:i(F[e.id].label)}),onPress:()=>f(e),children:n.jsx(je,{})})]}),children:({item:e})=>o(e)},e.id)),n.jsx(C,{children:n.jsx("span",{role:"status",children:n.jsx("span",{children:a.text},a.serial)})})]})}function Tr({draft:t,saved:r,setDraft:o,onClose:i}){const a=L(),[s,l]=e.useState(!1),d=e.useMemo(()=>JSON.stringify(t)!==JSON.stringify(r),[t,r]);return W(d,i),n.jsxs(n.Fragment,{children:[n.jsx(_,{title:a("widgets.gallery"),size:"wide",scrollBody:!0,trigger:n.jsx(M,{children:a("widgets.gallery")}),footer:e=>n.jsx(M,{onPress:e,children:a("ui.close")}),children:n.jsx("div",{className:"rp-widget-gallery-grid",children:n.jsx(sr,{items:ge(t),add:(e,r)=>o(function(e,t,r){const n=br(ge(e),t);if(!n)return e;const o=r?ve(n,r):n;return{...e,sections:e.sections.map(e=>"extensions"===e.id?{...e,items:[...e.items,o]}:e)}}(t,e,r)),surface:"dashboard"})})}),n.jsx(M,{onPress:()=>o(fe()),children:a("widgets.reset")}),n.jsx(M,{onPress:()=>d?l(!0):i(),children:a("ui.cancel")}),n.jsx(M,{accent:!0,onPress:()=>{Ee(t),i()},children:a("ui.done")}),n.jsx(Z,{title:a("config.discardTitle"),isOpen:s,onCancel:()=>l(!1),confirmLabel:a("config.discard"),onConfirm:i,children:n.jsx("p",{children:a("widgets.discardHelp")})})]})}function kr({onClose:t,backend:r}){const o=L(),[i]=e.useState(re),a=i.items,[s,l]=e.useState(a),[d,c]=e.useState(!1),[p]=e.useState(()=>i.docked?document.querySelector(".rp-side-dock")?.offsetWidth:void 0),u=i.size?.width??ne.width,[g,f]=e.useState(u),[m,h]=e.useState(!1),y=g!==(d?ne.width:u),[D,v]=e.useState(null),[b,w]=e.useState(!1),[x,T]=e.useState({text:"",serial:0}),k=e=>T(t=>({text:e,serial:t.serial+1})),E=d&&oe(re()),P=e.useMemo(()=>JSON.stringify(a)!==JSON.stringify(s),[a,s])||E||y;W(P,t);const K=()=>P?w(!0):t(),O=s.find(e=>Y(e)===D);return n.jsxs(n.Fragment,{children:[n.jsxs(_,{title:o("widgets.edit"),size:"wide",scrollBody:!0,isOpen:!0,onOpenChange:e=>{e||K()},footer:()=>n.jsxs(n.Fragment,{children:[n.jsx(M,{onPress:()=>{l(ie().items),c(!0),f(ne.width),v(null)},children:o("widgets.reset")}),n.jsx(M,{onPress:K,children:o("ui.cancel")}),n.jsx(M,{accent:!0,onPress:()=>{ae(e=>({...e,version:4,items:s,...d&&le,...y&&{size:{width:g,height:(d?void 0:e.size?.height)??se}}})),t()},children:o("settings.save")})]}),children:[n.jsx(Pe,{panelWidth:(d||m?void 0:p)??g,onPanelWidth:e=>{h(!0),f(e)},resizeLabel:o("widgets.resizePreview"),header:n.jsx(Ke,{backend:r,preview:!0}),galleryLabel:o("widgets.gallery"),canvasLabel:o("widgets.canvas"),inspectorLabel:o(O?F[O.id].label:"widgets.inspector"),gallery:n.jsx(sr,{items:s,add:e=>{const t=br(s,e);t&&(l([...s,t]),v(Y(t)),k(o("widgets.addedName",{name:o(F[e].label)})))}}),canvas:n.jsx(tr,{label:o("widgets.order"),items:s.map(e=>({item:e,module:e.id,id:Y(e),size:e.size})),textValue:({item:e})=>o(F[e.id].label),selectionMode:"single",selectedKeys:D?new Set([D]):new Set,onSelectionChange:e=>{"all"!==e&&v(String([...e][0]))},dragLabel:({item:e})=>o("widgets.drag",{name:o(F[e.id].label)}),onPlace:(e,{target:t,after:r})=>{t&&(l(n=>{const o=function(e,t,r,n){if(t.has(r))return e;const o=e.filter(e=>!t.has(e)),i=o.indexOf(r);return i<0?e:(o.splice(i+("after"===n?1:0),0,...e.filter(e=>t.has(e))),o)}(n.map(Y),new Set([e]),t,r?"after":"before");return o.flatMap(e=>n.find(t=>Y(t)===e)??[])}),k(o("widgets.reordered")))},children:({item:e})=>n.jsx(he,{item:e,preview:!0})}),inspector:n.jsx(cr,{active:O,items:s,sizes:O?F[O.id].sizes:[],surface:"panel",update:e=>l(t=>t.map(t=>Y(t)===Y(e)?e:t)),move:e=>{O&&l(function(e,t,r){const n=e.findIndex(e=>Y(e)===t),o=n+r;if(n<0||o<0||o>=e.length)return e;const i=[...e];return i.splice(o,0,...i.splice(n,1)),i}(s,Y(O),e)),k(o("widgets.reordered"))},remove:()=>{O&&(e=>{const t=Y(e);l(e=>e.filter(e=>Y(e)!==t)),v(null),k(o("widgets.removed",{name:o(F[e.id].label)}))})(O)}})}),n.jsx(C,{children:n.jsx("span",{role:"status",children:n.jsx("span",{children:x.text},x.serial)})})]}),n.jsx(Z,{title:o("config.discardTitle"),isOpen:b,onCancel:()=>w(!1),confirmLabel:o("config.discard"),onConfirm:t,children:n.jsx("p",{children:o("widgets.discardHelp")})})]})}export{Tr as DashboardActions,xr as DashboardEditor,kr as WidgetEditor}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Events-Cryh0oVV.js b/luci-app-honk/root/etc/honk/doona/assets/Events-Cryh0oVV.js deleted file mode 100644 index 3c01eea80..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Events-Cryh0oVV.js +++ /dev/null @@ -1,2 +0,0 @@ -import{r as h,j as n}from"./vendor-react-Bf71BWbF.js";import{a4 as g,eq as j,er as b,aw as y,h as v,bD as E,bG as L,u as k,a6 as T,a as N,aa as H,es as _,bg as D,et as K,eu as M,ev as R,ew as S,aL as p,bw as C,aK as F,L as O,bt as W,aJ as A,B,aM as I,E as J}from"./index-BOpK0UVB.js";import{D as P}from"./Table-BkehX7fw.js";import{d as V,e as q}from"./files-BxEOxSF8.js";import"./useGridSelectionCheckbox-C4VxQajJ.js";import"./Virtualizer-BIsXGNLZ.js";import"./ListLayout-CkBMjK9o.js";const w={buffer_overflow:["event.gap.overflow","event.gapHelp.overflow"],evicted:["event.gap.evicted","event.gapHelp.evicted"]};function G(e,t){const r=e.event==="flow.gap"&&Object.hasOwn(w,e.data.reason)?w[e.data.reason]:void 0;return r&&{title:t(r[0]),text:t(r[1])}}function z(e,t){const r=l=>l?[{id:"flow",label:t("event.viewFlow"),href:v("flows",{tab:"records",id:l})}]:[];switch(e.event){case"flow.updated":return r(e.data.resource_id);case"flow.gap":return[...r(e.data.resource_id),{id:"recording",label:t("ui.recordingSettings"),href:E}];case"generation.changed":return[{id:"config",label:t("event.viewConfig"),href:v("config")}];default:return[]}}const x=new WeakMap;function Q(e,t,r,l){const s=x.get(e);if(s&&s.locale===t)return s.row;const i=l?{key:"event.lostHistory"}:j(e,r),o={id:e.id,timestamp:y(e.data.observed_at,t),iso:e.data.observed_at,kind:e.event,kindText:g(b,e.event,r),summary:r(i.key,i.params),help:G(e,r),links:z(e,r)};return x.set(e,{locale:t,row:o}),o}function U(e,t,r,l,s,i,o,u,a=!1,c=()=>!1){const m=t==="without-runtime"||u.includes(t)?t:"all",f=e.filter(d=>m==="all"||(m==="without-runtime"?d.event!=="runtime.updated":d.event===m)).slice(0,s);return{kind:m,rows:f.map(d=>Q(d,i,o,c(d))),kinds:[{id:"without-runtime",label:o("event.withoutRuntime")},{id:"all",label:o("event.allKinds")},...u.map(d=>({id:d,label:g(b,d,o)}))],status:a&&l!==!1?{tone:"err",text:o("event.disconnected")}:{tone:r?"ok":l===null?"muted":"warn",text:o(l===!1?"event.unavailable":r?"event.connected":l===null?"ui.loading":"event.reconnecting")},limitText:o("event.limit",{n:s}),shown:f}}function X(e){return JSON.stringify(e,null,2)+` -`}function Y(){const e=L(),t=k(),r=T[N()],s=H().data?.resources.events.kinds,[i,o]=h.useState("without-runtime"),u=i!=="all"&&i!=="runtime.updated"&&s?.includes(i),a=_(i!=="without-runtime"&&!u),c=h.useMemo(()=>U(a.events,i,a.connected,a.available,S,r,t,s??[],!!a.error,R),[a.events,i,a.connected,a.available,a.error,r,t,s]);return D(c.kind,o),{...c,setKind:o,cursor:a.cursor,error:a.error,retry:()=>void K().then(()=>M(e)),loading:!a.error&&!a.connected&&a.available!==!1&&!a.events.length,export:()=>V(q("doona-events","json"),X(c.shown),"application/json")}}function ae(){const e=k(),t=Y(),r=h.useMemo(()=>[{id:"t",label:e("ui.time"),minWidth:200,grow:0,drop:1,render:s=>n.jsx(p,{className:"rp-code",text:s.iso,children:s.timestamp})},{id:"k",label:e("event.kind"),minWidth:168,drop:2,render:s=>n.jsx(p,{text:s.kind,children:s.kindText})},{id:"m",label:e("event.summary"),minWidth:240,isRowHeader:!0,render:s=>n.jsx(C,{fill:!0,help:s.help,children:n.jsx(p,{children:s.summary})})}],[e]),l=h.useCallback(s=>n.jsxs(n.Fragment,{children:[n.jsx(F,{inline:!0,items:[[e("ui.time"),s.timestamp],[e("event.kind"),s.kindText],[e("event.summary"),s.summary]]}),s.links.length>0&&n.jsx("div",{className:"rp-cluster",children:s.links.map(i=>n.jsx(O,{appearance:"button",small:!0,href:i.href,children:i.label},i.id))})]}),[e]);return n.jsxs("div",{className:"rp-page",children:[n.jsxs("div",{className:"rp-toolbar",children:[n.jsx(W,{label:e("event.kind"),side:!0,value:t.kind,onChange:t.setKind,items:t.kinds}),n.jsx(A,{small:!0,tone:t.status.tone,children:t.status.text}),t.cursor&&n.jsx(p,{text:t.cursor,children:n.jsx("span",{className:"rp-label",children:e("event.cursor")})}),n.jsx("span",{className:"rp-label",children:t.limitText}),n.jsx("span",{className:"rp-grow"}),n.jsxs(B,{isDisabled:!t.rows.length,onPress:t.export,children:[n.jsx(I,{}),e("event.export")]})]}),t.error&&n.jsx(J,{error:t.error,onRetry:t.retry}),n.jsx(P,{label:e("nav.events"),stream:!0,fit:!0,height:442,loading:t.loading,rows:t.rows,empty:e("event.empty"),cols:r,detail:l})]})}export{ae as Events}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Events-DhkgQmOB.js b/luci-app-honk/root/etc/honk/doona/assets/Events-DhkgQmOB.js new file mode 100644 index 000000000..c333ca32b --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Events-DhkgQmOB.js @@ -0,0 +1 @@ +import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{ad as n,ak as s,ai as r,j as a,ap as i,F as o,aC as l,V as d,$ as c,da as m,ar as u,as as p,f_ as v,f$ as f,T as h,aN as j,bs as x,G as w,Z as b,O as g,P as k}from"./index-BgFj_VXE.js";import{v as y,L as T}from"./logs-BxISynQ4.js";import{T as N}from"./Toolbar-CIBfeuEz.js";import{D as _}from"./Table-Dprh3Btz.js";import{d as C,e as O}from"./files-Dt8K7QfP.js";import{l as H}from"./format-s2EANuUb.js";import{O as S,D as F}from"./activity-D06xJ7oH.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./Virtualizer-CZl-q5wo.js";const R={buffer_overflow:["event.gap.overflow","event.gapHelp.overflow"],evicted:["event.gap.evicted","event.gapHelp.evicted"]};function W(e,t){const n="flow.gap"===e.event&&Object.hasOwn(R,e.data.reason)?R[e.data.reason]:void 0;return n&&{title:t(n[0]),text:t(n[1])}}function D(e,t){const n=e=>e?[{id:"flow",label:t("event.viewFlow"),href:a("flows",{tab:"records",id:e})}]:[];switch(e.event){case"flow.updated":return n(e.data.resource_id);case"flow.gap":return[...n(e.data.resource_id),{id:"recording",label:t("ui.recordingSettings"),href:S}];case"generation.changed":return[{id:"config",label:t("event.viewConfig"),href:a("config")}];default:return[]}}const K=new WeakMap;function M(e,t,a,i,o,l,d,c,m=!1,u=()=>!1){const p="without-runtime"===t||c.includes(t)?t:"all",v=e.filter(e=>"all"===p||("without-runtime"===p?"runtime.updated"!==e.event:e.event===p)).slice(0,o);return{kind:p,rows:v.map(e=>function(e,t,a,i){const o=K.get(e);if(o&&o.locale===t)return o.row;const l=i?{key:"event.lostHistory"}:r(e,a),d={id:e.id,timestamp:H(e.data.observed_at,t),iso:e.data.observed_at,kind:e.event,kindText:n(s,e.event,a),summary:a(l.key,l.params),help:W(e,a),links:D(e,a)};return K.set(e,{locale:t,row:d}),d}(e,l,d,u(e))),kinds:[{id:"without-runtime",label:d("event.withoutRuntime")},{id:"all",label:d("event.allKinds")},...c.map(e=>({id:e,label:n(s,e,d)}))],status:m&&!1!==i?{tone:"err",text:d("event.disconnected")}:{tone:a?"ok":null===i?"muted":"warn",text:d(!1===i?"event.unavailable":a?"event.connected":null===i?"ui.loading":"event.reconnecting")},limitText:d("event.limit",{n:o}),shown:v}}function P(){const t=i(),n=o(),s=l[d()],r=c(),a=r.data?.resources.events.kinds,[h,j]=e.useState("without-runtime"),x="all"!==h&&"runtime.updated"!==h&&a?.includes(h),w=y("without-runtime"!==h&&!x),b=e.useMemo(()=>M(w.events,h,w.connected,w.available,f,s,n,a??[],!!w.error,v),[w.events,h,w.connected,w.available,w.error,s,n,a]);return m(b.kind,j),{...b,setKind:j,cursor:w.cursor,error:w.error,retry:()=>{u().then(()=>p(t))},loading:!w.error&&!w.connected&&!1!==w.available&&!w.events.length,export:()=>{return C(O("doona-events","json"),(e=b.shown,JSON.stringify(e,null,2)+"\n"),"application/json");var e}}}function V(){const n=o(),s=P(),r=e.useMemo(()=>[{id:"t",label:n("ui.time"),minWidth:200,grow:0,drop:1,render:e=>t.jsx(h,{className:"rp-code",text:e.iso,children:e.timestamp})},{id:"k",label:n("event.kind"),minWidth:224,drop:2,render:e=>t.jsx(h,{text:e.kind,children:e.kindText})},{id:"m",label:n("event.summary"),minWidth:240,isRowHeader:!0,render:e=>t.jsx(j,{fill:!0,help:e.help,children:t.jsx(h,{children:e.summary})})}],[n]),a=e.useCallback(e=>t.jsxs(t.Fragment,{children:[t.jsx(x,{inline:!0,items:[[n("ui.time"),e.timestamp],[n("event.kind"),e.kindText],[n("event.summary"),e.summary]]}),e.links.length>0&&t.jsx("div",{className:"rp-cluster",children:e.links.map(e=>t.jsx(w,{appearance:"button",small:!0,href:e.href,children:e.label},e.id))})]}),[n]);return t.jsxs("div",{className:"rp-page",children:[t.jsxs(N,{page:!0,children:[t.jsx(T,{label:n("event.kind"),side:!0,value:s.kind,onChange:s.setKind,items:s.kinds}),t.jsx(b,{small:!0,tone:s.status.tone,children:s.status.text}),s.cursor&&t.jsx(h,{text:s.cursor,children:t.jsx("span",{className:"rp-label",children:n("event.cursor")})}),t.jsx("span",{className:"rp-label",children:s.limitText}),t.jsx("span",{className:"rp-grow"}),t.jsxs(g,{isDisabled:!s.rows.length,onPress:s.export,children:[t.jsx(F,{}),n("event.export")]})]}),s.error&&t.jsx(k,{error:s.error,onRetry:s.retry}),t.jsx(_,{label:n("nav.events"),stream:!0,flow:!0,loading:s.loading,rows:s.rows,empty:n("event.empty"),cols:r,detail:a})]})}export{V as Events}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/FactStrip-CPXeRki4.js b/luci-app-honk/root/etc/honk/doona/assets/FactStrip-CPXeRki4.js deleted file mode 100644 index 1215898ca..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/FactStrip-CPXeRki4.js +++ /dev/null @@ -1 +0,0 @@ -import{j as s}from"./vendor-react-Bf71BWbF.js";import{aL as t}from"./index-BOpK0UVB.js";function p({facts:l,lead:r}){return l.length?s.jsx("dl",{className:"rp-strip rp-facts"+(r?" rp-facts-lead":""),style:{"--facts":l.length,"--facts-rest":l.length-1},children:l.map((e,i)=>s.jsxs("div",{className:"rp-card"+(e.tone?" "+e.tone:""),children:[s.jsxs("dt",{className:"rp-tile-head"+(e.tint?" rp-tint-"+e.tint:""),children:[e.icon,e.label]}),s.jsxs("dd",{className:"rp-tile-body",children:[r&&i===0?s.jsx(t,{className:"rp-big",cut:"start",children:e.value}):s.jsx("span",{className:"rp-big",title:e.value,children:e.value}),e.caption&&s.jsx("span",{className:"rp-fact-caption",title:e.caption,children:e.caption})]})]},e.label))}):null}export{p as F}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-DvzEtm7E.js b/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-DvzEtm7E.js new file mode 100644 index 000000000..e34af9ed1 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/FlagPicker-DvzEtm7E.js @@ -0,0 +1 @@ +import{r as e,j as a}from"./vendor-react-64fcanlc.js";import{F as s,V as l,dG as i,aC as n,fi as o,cD as r,O as t}from"./index-BgFj_VXE.js";import{S as c}from"./SearchSelect-CO6FsBaz.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Select-CkiGmyVC.js";import"./SearchList-Bhc2_bS4.js";import"./Virtualizer-CZl-q5wo.js";function m({name:r,value:t,automaticFlag:m,onChange:d}){const f=s(),g=l(),j=e.useMemo(()=>i(n[g]),[g]),p=o(r),u=j.find(e=>e.flag===m),h=u?f("flags.detected",{region:u.label}):f("flags.automatic");return a.jsx("div",{className:"rp-list",children:a.jsx(c,{label:f("flags.region"),description:f(p?"flags.embedded":"flags.help"),isDisabled:p,searchLabel:f("flags.search"),value:p?"automatic":t,onChange:d,sections:[{id:"flags",items:[{id:"automatic",label:h,flag:m},{id:"none",label:f("flags.none"),flag:null},...j]}]})})}function d({name:e,onClose:l,...i}){const n=s();return a.jsxs(r,{narrow:!0,title:n("flags.edit"),isOpen:!0,onOpenChange:e=>{e||l()},footer:()=>a.jsx(t,{onPress:l,children:n("ui.close")}),children:[a.jsx("p",{className:"rp-note",children:e}),a.jsx(m,{name:e,...i})]})}export{m as FlagField,d as FlagPicker}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Flows-Bc5zvW8x.js b/luci-app-honk/root/etc/honk/doona/assets/Flows-Bc5zvW8x.js new file mode 100644 index 000000000..856f96e29 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Flows-Bc5zvW8x.js @@ -0,0 +1 @@ +import{r as e,j as t}from"./vendor-react-64fcanlc.js";import{O as n}from"./OutboundTag-jvAhyeqj.js";import{l as a,i as o,u as s,c as r,R as l,S as i,L as d}from"./logs-BxISynQ4.js";import{i as u,aa as c,al as p,an as m,am as f,dc as g,de as w,w as h,d5 as b,ad as v,d7 as j,d8 as x,aC as y,j as k,aB as _,o as M,ag as N,F as L,V as S,K as C,O as P,N as T,bJ as O,aP as F,$ as R,a0 as H,bK as q,dh as E,db as W,D,P as $,T as A,aW as I,G as U,bB as B,bs as K,au as G,Q as J}from"./index-BgFj_VXE.js";import{M as Q,H as V,N as z,K as X,O as Y,G as Z}from"./activity-D06xJ7oH.js";import{w as ee}from"./labels-DPpd4zRF.js";import{l as te,c as ne}from"./format-s2EANuUb.js";import{c as ae,C as oe}from"./Coverage-VYQXivNr.js";import{f as se}from"./nav-D44ro1l_.js";import{T as re}from"./Tabs-CD2lZase.js";import{T as le}from"./Toolbar-CIBfeuEz.js";import{D as ie}from"./Table-Dprh3Btz.js";import{T as de}from"./TimeCell-B4WLB8Ou.js";import{A as ue}from"./AddCircle-prR7q573.js";import{b as ce,u as pe,c as me}from"./flows-xKlsDqlH.js";import{u as fe}from"./outbounds-BApwKyMu.js";import{u as ge,R as we}from"./useQuickRule-fWQicp9K.js";import"./_commonjsHelpers-CXUWDbkB.js";import"./Tag-PTwIjtR6.js";import"./Select-CkiGmyVC.js";import"./useGridSelectionCheckbox-BxnCShqN.js";import"./Virtualizer-CZl-q5wo.js";import"./DaeCode-DEjXqvav.js";import"./daeTokens-BVtuNnWZ.js";import"./SearchSelect-CO6FsBaz.js";import"./SearchList-Bhc2_bS4.js";const he=["client","rule","outbound","node"];function be(e,t){if(e.rule_id)return null!==e.rule_generation_id&&e.rule_generation_id===t?e.rule_id:e.rule_id+"\0"+e.rule_expression}function ve(e,t,n,a){switch(t){case"client":{const t=c(e.input?.src??void 0);return{label:t??"unknown",unknown:!t}}case"rule":return e.rule_expression?{label:e.rule_expression,unknown:!1,key:be(e,a)}:{label:"unknown",unknown:!0};case"outbound":return e.outbound?{label:e.outbound,unknown:!1}:{label:"unknown",unknown:!0};case"node":{if(u(e.outbound))return null;const t=e.chain.at(-1)??null;return t?{label:n.get(t)??t,unknown:!1,key:t}:{label:"unknown",unknown:!0}}}}const je=(e,t)=>V(e,t.unknown?"":t.key??t.label),xe=e=>Q(e,he)?.kind,ye=new Map;function ke(e,t,n){const a=xe(t);return a?e.filter(e=>{const o=ve(e,a,ye,n?.generation_id);return null!==o&&je(a,o)===t}):[]}function _e(e,t,n,a){const o=Q(e,he);if(!o||""===o.value)return a(null);const{kind:s,value:r}=o;return"rule"===s?r.includes("\0")?r.slice(r.indexOf("\0")+1):t.find(e=>e.rule_id===r)?.expression??r:"node"===s?n.get(r)??r:"client"===s?r:a(r)}function Me(e,t,n,a,o="rule"){const s=(e=>new Map(e.map(e=>[e.id,e.name])))(n),r=new Map(t.map(e=>[e.id,e])),l=new Map(t.map(e=>[e.name,e])),i=new Map(n.map(e=>[e.id,e])),d=new Map,c=new Map,g=new Map,w=new Map,h=(e,t)=>{const n=e+">"+t;let a=w.get(n);return a||w.set(n,a={source:e,target:t,count:0}),a},b=(e,t,n=!1)=>{const a=je("node",{key:e,label:t,unknown:n});let o=g.get(a);if(!o){const s=n?void 0:i.get(e),r=s&&m(s);g.set(a,o={id:a,label:t,count:0,unknown:n||void 0,latency:f(r),unavailable:"unavailable"===r?.state})}return o},v=(e,t=!1)=>{const n=je("outbound",{label:e,unknown:t});let a=c.get(n);if(a)return a;const o=t?void 0:l.get(e),d=t?{groups:[],member:null}:p(e,o?.selection.tcp_member_id?"tcp":"udp",l,r,i),m=d.groups.map(e=>({name:e.name,kind:e.policy.kind,policy:e.policy.native})),f=d.member;return a={id:n,label:e,count:0,unknown:t||void 0,kind:t?"unknown":u(e)?e:m.length?"group":"unknown",groups:m,node:f&&b(f,s.get(f)??f).id},c.set(n,a),a.node&&h(n,a.node),a},j=(e,t,n=!1)=>{let a=d.get(e);return a||d.set(e,a={id:e,label:t,count:0,unknown:n||void 0,outbound:null,must:!1}),a};if("rule"===o)for(const u of a?.rules??[]){const e=j(je("rule",{key:u.rule_id,label:u.expression}),u.expression);e.must=u.must,u.outbound&&(e.outbound=v(u.outbound).id,h(e.id,e.outbound))}const x=[o,"outbound","node"];for(const u of e){let e;for(const t of x){const n=ve(u,t,s,a?.generation_id);if(!n)break;const o="outbound"===t?v(n.label,n.unknown):"node"===t?b(n.key??n.label,n.label,n.unknown):j(je(t,n),n.label,n.unknown);o.count++,e&&h(e.id,o.id).count++,e=o}}for(const u of t)v(u.name);const y=new Set([...d.values()].map(e=>e.outbound)),k=new Set([...c.values()].flatMap(e=>e.groups.slice(1).map(e=>e.name))),_=[...c.values()].filter(e=>e.count||y.has(e.id)||!k.has(e.label)),M=new Set(_.map(e=>e.id)),N=[...w.values()].filter(e=>M.has(e.source)||M.has(e.target)),L=new Set(N.map(e=>e.target));return{by:o,leaves:[...d.values()],outbounds:_,nodes:[...g.values()].filter(e=>L.has(e.id)),links:N}}const Ne=new WeakMap;function Le(e){const t=Ne.get(e);if(t)return t;const n=new Map,a=new Map,o=new Map;for(const l of e.links){for(const[e,t]of[[n,l.source],[a,l.target]]){let n=e.get(t);n||e.set(t,n=[]),n.push(l)}(!o.has(l.source)||o.get(l.source).countnull==e?"—":{key:e?"ui.yes":"ui.no"};function Te(e,t,n,a,o,s){return{tree:e,state:t?e.leaves.length||e.outbounds.length?"ready":"empty":n?"error":"loading",pinLabel:a?s("flow.viewPinned",{n:o}):null}}const Oe={input:"flow.stage.input",route:"flow.stage.route",dial_mode:"flow.stage.dialMode",dns:"flow.stage.dns",outbound:"flow.stage.outbound",connection:"flow.stage.connection",datapath:"flow.stage.datapath",reroute:"flow.stage.reroute"},Fe={complete:"flow.status.complete",partial:"flow.status.partial",disabled:"flow.status.disabled"};function Re(e,t,n,a){if(!e)return null;const o=y[n];return{title:e.input.domain||e.input.dst||e.id,status:v(Fe,e.trace.status,t),tone:"complete"===e.trace.status?void 0:"warn",revision:t("flow.revision",{n:e.revision}),fields:[[t("ui.state"),v(b,e.state,t)],...a?[[t("conn.node"),a.path??a.node]]:[],...a?.expression?[[t("conn.rule"),a.expression]]:[],...e.trace.missing.length?[[t("flow.missing"),_(n,e.trace.missing.map(e=>v(Se,e,t)))]]:[]],connectionHref:e.connection_id?k("connections",{id:e.connection_id}):null,steps:[...e.trace.steps].sort((e,t)=>e.seq-t.seq).map(e=>{const n=function(e){const t=e=>null==e?"—":"object"==typeof e?JSON.stringify(e):String(e);switch(e.stage){case"input":return Object.entries(e.data.values).filter(([,e])=>null!=e&&""!==e).map(([e,n])=>{const a=Ce[e];return[void 0!==a&&a.includes(".")?a:{key:"flow.f.input",params:{name:a??e}},"string"!=typeof n||"ingress"!==e&&"domain_source"!==e?t(n):ee(n)]});case"route":return[["flow.f.chain",e.data.chain],["flow.f.plane",ee(e.data.plane)],["ui.rule",e.data.rules.filter(e=>"matched"===e.result).map(e=>e.expression??e.rule_id).join(", ")||"—"],["ui.outbound",t(e.data.outbound)],["flow.f.must",Pe(e.data.must)]];case"dial_mode":return[["flow.f.dialTarget",e.data.configured+" → "+e.data.effective_target],["flow.f.verification",ee(e.data.verification)]];case"dns":return[["ui.name",e.data.name],["flow.f.source",ee(e.data.source)],["flow.f.cache",ee(e.data.cache)],["ui.upstream",t(e.data.upstream)],["flow.f.selectedIp",t(e.data.selected_ip)]];case"outbound":return[["ui.outbound",t(e.data.routed_outbound)+" → "+t(e.data.effective_outbound)],["flow.f.selectionPath",e.data.selection_path.map(e=>e.group_id+" → "+t(e.member_name??e.member_id)).join(" / ")||"—"],["flow.f.leafNode",t(e.data.leaf_node_id)],["ui.target",t(e.data.target)],["ui.state",ee(e.data.status)]];case"connection":return[["ui.state",Object.hasOwn(b,e.data.state)?{key:b[e.data.state]}:e.data.state],["flow.f.milestone",ee(e.data.milestone)],["flow.f.reason",ee(e.data.reason)]];case"datapath":return[["flow.f.plane",ee(e.data.plane)],["flow.f.action",ee(e.data.action)],["flow.f.reason",ee(e.data.reason)]];case"reroute":return[["flow.f.performed",Pe(e.data.performed)],["flow.f.reason",ee(e.data.reason)]];default:return null}}(e);return{id:e.seq,stage:v(Oe,e.stage,t),observed:te(e.observed_at,o),elapsed:null==e.elapsed_us?"—":t("ui.microseconds",{n:e.elapsed_us}),fields:n?.map(([e,n])=>["string"==typeof e?t(e):t(e.key,e.params),"string"==typeof n?n:t(n.key,n.params)])??null,raw:n?"":JSON.stringify(e.data,null,2)}})}}const He=30,qe=[5,4,3],Ee={rule:0,client:0,outbound:1,node:2};function We(e,t,n,o){const s=null===t?void 0:Math.max(t,720),r=((s??0)-112)/qe.reduce((e,t)=>e+t),l=e=>{const t=Ee[e];return{left:qe.slice(0,t).reduce((e,t)=>e+t*r+56,0),width:qe[t]*r}},i=function(e){const t=new Map;let n=0;const a=new Map,{parents:o}=Le(e);for(const l of[...e.leaves,...e.outbounds]){const e=o.get(l.id);if(e){let t=a.get(e);t||a.set(e,t=[]),t.push(l.id)}}const s=e=>{const o=a.get(e)??[];if(o.length){for(const e of o)s(e);t.set(e,(t.get(o[0])+t.get(o[o.length-1]))/2)}else t.set(e,n++)},r=new Set;for(const l of e.outbounds)r.add(o.get(l.id)??l.id);for(const l of e.nodes)r.add(l.id);for(const l of e.leaves)o.has(l.id)||r.add(l.id);for(const l of r)s(l);return{rows:n,at:t}}(e),d=function(e,t,n){const o=(e,n)=>e.unknown?t("flow.mapUnknown"):n,s=[...e.leaves.map(t=>({id:t.id,stage:e.by,name:o(t,t.label),badge:t.must?"must":void 0,notes:[],count:t.count})),...e.outbounds.map(e=>({id:e.id,stage:"outbound",name:o(e,M(e.label,t)),notes:[...e.groups.slice(1).map(e=>({text:"› "+e.name})),...e.groups.slice(-1).map(e=>({text:z({kind:e.kind,native:e.policy},t).label})),..."group"!==e.kind||e.node?[]:[{text:t("flow.treeNoNode")}]],count:e.count})),...e.nodes.map(e=>({id:e.id,stage:"node",name:o(e,e.label),notes:null!=e.latency?[{text:ne(e.latency,t),tone:a(e.latency)}]:e.unavailable?[{text:t("ui.unavailable"),tone:"err"}]:[],count:e.count}))],r=new Map(s.map(e=>[e.id,e.name])),{outgoing:l,incoming:i}=Le(e);return s.map(e=>{const a=(l.get(e.id)??[]).map(e=>r.get(e.target)),o="node"===e.stage?(i.get(e.id)??[]).map(e=>r.get(e.source)):[],s=[e.name,...e.badge?[e.badge]:[],...e.notes.map(e=>e.text),t("flow.treeFlows",{n:e.count})];return o.length&&s.push(t("flow.treeFrom",{names:_(n,o)})),a.length&&s.push(t("flow.treeTo",{names:_(n,a)})),{...e,countText:N(e.count,y[n]),label:s.join(t("ui.separator"))}})}(e,n,o).map(e=>({view:e,style:{top:44*i.at.get(e.id),...l(e.stage)}})),u=new Map(e.outbounds.map(e=>[e.id,e])),c=e.links.flatMap(t=>{if(!i.at.has(t.source)||!i.at.has(t.target))return[];const n="outbound"===xe(t.source)?"outbound":e.by,a=l(n),o=a.left+a.width,s=l("outbound"===n?"node":"outbound").left,r=44*i.at.get(t.source)+18,d=44*i.at.get(t.target)+18,c=(o+s)/2;return[{link:t,id:t.source+">"+t.target,path:`M${o},${r} C${c},${r} ${c},${d} ${s},${d}`,width:Math.min(8,1.5+1.25*Math.log2(1+t.count)),dash:t.count?void 0:"4 4",kind:"outbound"===n?"node":u.get(t.target)?.kind??"group"}]});return{width:s,height:44*i.rows-8,captions:[{stage:e.by,label:n("rule"===e.by?"flow.mapRule":"flow.stageClient"),style:l(e.by)},{stage:"outbound",label:n("flow.mapOutbound"),style:l("outbound")},{stage:"node",label:n("flow.mapNode"),style:l("node")}],placed:d,geometry:c}}function De(t,n,a){const o=L(),s=S(),[r,l]=e.useState(He),[i,d]=e.useState(null),[u,c]=C(),p=e.useMemo(()=>Le(t),[t]),m=e.useMemo(()=>function(e,t){return e.leaves.length<=t?e:{...e,leaves:e.leaves.slice(0,t)}}(t,r),[t,r]),f=e.useMemo(()=>We(m,c,o,s),[m,c,o,s]),g=e.useMemo(()=>new Set(f.placed.map(e=>e.view.id)),[f.placed]),w=e.useMemo(()=>new Set([...t.leaves,...t.outbounds,...t.nodes].map(e=>e.id)),[t]),h=i&&g.has(i)?i:n&&w.has(n)?n:null,b=e.useMemo(()=>h?function(e,t){const n=new Set([t]),a=new Set;for(const[o,s]of[[e.outgoing,"target"],[e.incoming,"source"]]){const e=[t];for(const t of e)for(const r of o.get(t)??[])a.has(r)||(a.add(r),n.has(r[s])||(n.add(r[s]),e.push(r[s])))}return{items:n,edges:a}}(p,h):null,[p,h]);e.useEffect(()=>{if(!n)return;const e=e=>{"Escape"===e.key&&a(null)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[n,a]);const v=e.useRef(n);e.useLayoutEffect(()=>{v.current=n},[n]);const j=e.useCallback(e=>a(v.current===e?null:e),[a]);return{...f,ref:u,ready:void 0!==f.width,active:b,pinned:n,pin:j,hover:d,more:t.leaves.length>r?o("flow.treeShowMore",{n:Math.min(He,t.leaves.length-r)}):null,fewer:r>He?o("flow.treeFewer",{n:He}):null,showMore:()=>l(e=>Math.min(t.leaves.length,e+He)),showFewer:()=>l(He)}}const $e=e.memo(function({view:e,style:n,dim:a,selected:s,pin:r,hover:l}){return t.jsxs(o,{"aria-label":e.label,className:O("rp-tree-tile",a&&"dim"),"data-id":e.id,"data-stage":e.stage,style:n,isSelected:s,onChange:()=>r(e.id),onHoverStart:()=>l(e.id),onHoverEnd:()=>l(null),onFocus:()=>l(e.id),onBlur:()=>l(null),children:[t.jsxs("span",{className:"l",children:["node"===e.stage?t.jsx("b",{children:t.jsx(T,{name:e.name})}):"rule"===e.stage||"client"===e.stage?e.name:t.jsx("b",{children:e.name}),e.notes.map((e,n)=>t.jsx("span",{className:O("s",e.tone),children:e.text},n))]}),e.badge&&t.jsx(F,{children:e.badge}),t.jsx("span",{className:"c",children:e.countText})]})});function Ae({tree:e,pinned:n,onPin:a}){const{ref:o,...s}=De(e,n,a);return t.jsxs("div",{className:"rp-tree",ref:o,children:[t.jsx("div",{className:"rp-tree-captions",style:{width:s.width},children:s.captions.map(e=>t.jsx("span",{className:"rp-label",style:e.style,children:e.label},e.stage))}),t.jsxs("div",{className:"rp-tree-canvas",style:{height:s.height,width:s.width},children:[s.ready&&t.jsx("svg",{className:"rp-tree-links",width:s.width,height:s.height,"aria-hidden":!0,children:s.geometry.map(e=>t.jsx("path",{d:e.path,strokeWidth:e.width,"data-kind":e.kind,"data-state":s.active?s.active.edges.has(e.link)?"active":"dim":void 0,strokeDasharray:e.dash},e.id))}),s.ready&&s.placed.map(({view:e,style:n})=>t.jsx($e,{view:e,style:n,dim:!!s.active&&!s.active.items.has(e.id),selected:s.pinned===e.id,pin:s.pin,hover:s.hover},e.id))]}),s.more&&t.jsx(P,{small:!0,quiet:!0,onPress:s.showMore,children:s.more}),s.fewer&&t.jsx(P,{small:!0,quiet:!0,onPress:s.showFewer,children:s.fewer})]})}function Ie({go:t,query:n}){const a=L(),o=S(),r=q(E),l=e.useMemo(()=>new URLSearchParams(n),[n]),i=l.get("network"),d="tcp"===i||"udp"===i?i:"all",p=l.get("state")??"",m=Object.hasOwn(b,p)?p:"all",f=l.get("connection_id")??void 0,g=R().data?.resources,w=ce({connection_id:f,network:d,state:m},H(g,"flows",{whileLoading:!0})),y=H(g,"rules",{whileLoading:!1}),k=pe(y),_=fe(),N=l.get("id"),C=me(N),P=l.get("path"),T=e.useMemo(()=>{const e=w.data?.flows??[];return P?ke(e,P,k.data):e},[w.data,P,k.data]),O=k.data?.generation_id,F=e.useMemo(()=>function(e,t,n,a,o,s){return{rows:e.map(e=>({id:e.id,target:e.input?.domain||e.input?.dst||e.id,node:x(e,o,a),nodeName:!u(e.outbound)&&e.chain.length>0,path:j(e,o,a),expression:e.rule_expression,ruleId:null!==e.rule_generation_id&&e.rule_generation_id===n?e.rule_id:null,recomputed:"recomputed"===e.rule_source,network:e.network.toUpperCase(),state:v(b,e.state,o),startedAt:e.started_at,seed:{domain:e.input?.domain??null,dip:c(e.input?.dst??void 0)??null,sip:c(e.input?.src??void 0)??null,outbound:e.outbound,matched:e.rule_id&&"unknown"!==e.rule_source?{id:e.rule_id,expression:e.rule_expression,generation:e.rule_generation_id}:null}})),coverage:t?ae(t,o,s):null,stateOptions:[{id:"all",label:o("flow.allStates")},...Object.entries(b).map(([e,t])=>({id:e,label:o(t)}))]}}(T,w.data,O,_,a,o),[T,w.data,O,_,a,o]),W=F.rows.find(e=>e.id===N),D=s(H(g,"groups",{whileLoading:!1})).data,$=e.useMemo(()=>{const e=Re(C.data??void 0,a,o,W);return e&&{...e,outboundTag:X(C.data.outbound,D,a)}},[C.data,a,o,W,D]),A=ge(t);return{...F,detail:$,rule:{canAdd:A.canAdd,open:A.open,label:e=>a("conn.addRuleFor",{target:e}),noTarget:a("flow.ruleNoTarget"),dialog:A.dialog},network:d,setNetwork:e=>t("flows",h(n,{network:"all"===e?null:e})),state:m,setState:e=>t("flows",h(n,{state:"all"===e?null:e})),wide:r,id:N,rulesListed:y,error:w.error,retry:w.refetch,loading:w.loading&&!w.data,panelOpen:!!N&&(!!C.data||C.loading||!!C.error),panelTitle:$?.title??N??"",detailError:C.error,detailRetry:C.refetch,detailLoading:!C.data&&C.loading,select:e=>t("flows",h(n,{id:e}),{replace:null!==N}),pinLabel:P?a("flow.mapFilter",{label:_e(P,k.data?.rules??[],_,e=>null===e?a("flow.mapUnknown"):M(e,a))}):null,clearPin:()=>t("flows",h(n,{path:null})),connectionLabel:f?a("flow.connectionFilter",{connectionId:f}):null,clearConnection:()=>t("flows",h(n,{connection_id:null})),recordingHref:g?.runtime_settings.available?Y:null}}function Ue({go:e,query:t}){const n=L(),a=R(),o=function(e,t,n){const a=se(e).map(e=>({id:e.id,label:n(e.titleKey)})),o=a[0]?.id??"map";return{tabs:a,tab:g(t,a.map(e=>e.id),o),fallback:e?o:null}}(a.data?.resources,t,n);return W(a.data?.resources),{...o,loading:a.loading&&!a.data,error:a.error,retry:a.refetch,changeTab:n=>e("flows",function(e,t,n){return w(h(e,"map"===t?{id:null,connection_id:null}:{by:null}),t,n)}(t,n,o.fallback))}}function Be(e){const n=L(),a=Ue(e),o={map:t.jsx(Ke,{...e}),records:t.jsx(Ge,{...e})};return a.loading?t.jsx(D,{}):a.error?t.jsx($,{error:a.error,onRetry:a.retry}):t.jsx("div",{className:"rp-page",children:t.jsx(re,{page:!0,label:n("nav.flows"),items:a.tabs.map(e=>({...e,content:o[e.id]})),value:a.tab,onChange:a.changeTab})})}function Ke(n){const a=L(),o=function({go:t,query:n}){const a=L(),o=new URLSearchParams(n),l=R().data?.resources,i=ce({},H(l,"flows",{whileLoading:!0})),d=s(H(l,"groups",{whileLoading:!1})),u=r(H(l,"nodes",{whileLoading:!1})),c=pe(H(l,"rules",{whileLoading:!1})),p="client"===o.get("by")?"client":"rule",m=e.useMemo(()=>Me(i.data?.flows??[],d.data??[],u.data??[],c.data,p),[i.data,d.data,u.data,c.data,p]),f=o.get("path"),g=e.useRef(n);e.useLayoutEffect(()=>{g.current=n},[n]);const w=e.useCallback(e=>t("flows",h(g.current,{path:e})),[t]),b=e.useMemo(()=>f?ke(i.data?.flows??[],f,c.data).length:0,[i.data,f,c.data]);return{...Te(m,[i,c,d,u].every(e=>void 0!==e.data||e.error||!e.loading)&&!!(i.data||c.data||d.data),!!i.error,f,b,a),by:p,pinned:f,error:i.error??d.error??u.error??c.error,retry:()=>{i.refetch(),d.refetch(),u.refetch(),c.refetch()},pin:w,changeBy:e=>t("flows",h(n,{by:"client"===e?"client":null,path:null})),viewPinned:()=>t("flows",h(n,{tab:"records"}))}}(n);return t.jsxs("section",{className:"rp-col","aria-label":a("flow.map"),children:[t.jsxs(le,{page:!0,children:[o.pinLabel?t.jsx(P,{onPress:o.viewPinned,children:o.pinLabel}):t.jsx("span",{className:"rp-label",children:a("flow.mapFilterHint")}),t.jsx("span",{className:"rp-grow"}),t.jsx(P,{quiet:!0,isDisabled:!o.pinLabel,onPress:()=>o.pin(null),children:a("flow.clearMapFilter")})]}),t.jsx($,{error:o.error,onRetry:o.retry}),t.jsxs(J,{title:a("flow.topology"),note:a("flow.topologyNote"),className:"rp-topology",aside:t.jsx(i,{label:a("flow.topology"),value:o.by,onChange:o.changeBy,items:[["rule",a("flow.byRule")],["client",a("flow.byClient")]]}),children:["loading"===o.state&&t.jsx(D,{}),"empty"===o.state&&t.jsx(G,{children:a("flow.mapEmpty")}),"ready"===o.state&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"rp-tree-hint",children:a("flow.treePanHint")}),t.jsx(Ae,{tree:o.tree,pinned:o.pinned,onPin:o.pin})]})]})]})}function Ge(a){const o=L(),s=Ie(a),r=s.detail,u=e.useRef(s.rule);e.useLayoutEffect(()=>{u.current=s.rule});const c=e.useMemo(()=>[{id:"target",label:o("ui.target"),minWidth:128,grow:2,isRowHeader:!0,render:e=>t.jsx(A,{children:e.target})},{id:"node",label:o("conn.node"),minWidth:96,drop:2,render:e=>e.nodeName?t.jsx(T,{name:e.node,className:"rp-chain",text:e.path??void 0}):t.jsx(A,{className:"rp-chain",text:e.path??void 0,children:e.node})},{id:"rule",label:o("conn.rule"),minWidth:152,grow:2,drop:1,render:e=>t.jsxs("span",{className:"rp-rule",children:[t.jsx(l,{expression:e.expression,href:Z(e.ruleId,s.rulesListed)}),e.recomputed&&t.jsx(F,{children:o("conn.recomputed")})]})},{id:"network",label:o("ui.protocol"),minWidth:64,grow:0,drop:3,render:e=>e.network},{id:"state",label:o("ui.state"),minWidth:112,grow:0,drop:5,render:e=>e.state},{id:"started",label:o("ui.started"),minWidth:140,grow:0,drop:4,render:e=>t.jsx(de,{at:e.startedAt})},{id:"actions",actions:!0,label:o("ui.actions"),minWidth:88,grow:0,render:e=>{const n=u.current,a=!n.canAdd(e.seed);return t.jsx(P,{quiet:!0,icon:!0,small:!0,label:n.label(e.target),tip:a?n.noTarget:void 0,isDisabled:a,onPress:()=>u.current.open(e.seed),children:t.jsx(ue,{})})}}],[o,s.rulesListed]);return t.jsxs(t.Fragment,{children:[t.jsx($,{error:s.error,onRetry:s.retry}),t.jsxs(le,{page:!0,children:[t.jsx(i,{label:o("ui.network"),value:s.network,onChange:s.setNetwork,items:[["all",o("ui.all")],["tcp",o("ui.tcp")],["udp",o("ui.udp")]]}),t.jsx(d,{label:o("ui.state"),side:!0,value:s.state,onChange:s.setState,items:s.stateOptions}),s.pinLabel&&t.jsxs(P,{label:o("ui.valuePair",{label:o("flow.clearMapFilter"),value:s.pinLabel}),onPress:s.clearPin,children:[s.pinLabel,t.jsx(I,{})]}),s.connectionLabel&&t.jsxs(P,{label:o("ui.valuePair",{label:o("flow.clearConnectionFilter"),value:s.connectionLabel}),onPress:s.clearConnection,children:[s.connectionLabel,t.jsx(I,{})]}),s.coverage&&t.jsx(oe,{view:s.coverage}),s.recordingHref&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"rp-grow"}),t.jsx(U,{appearance:"button",quiet:!0,href:s.recordingHref,children:o("ui.recordingSettings")})]})]}),t.jsxs("div",{className:"rp-with-panel","data-open":s.panelOpen?"":void 0,children:[t.jsx(ie,{label:o("flow.records"),rowDetail:!0,loading:s.loading,rows:s.rows,height:442,selected:s.id,onSelect:s.select,selectOnFocus:s.wide,empty:o("flow.empty"),cols:c}),t.jsxs(B,{open:s.panelOpen,title:s.panelTitle,onClose:()=>s.select(null),children:[t.jsx($,{error:s.detailError,onRetry:s.detailRetry}),s.detailLoading&&t.jsx(D,{children:o("flow.detailLoading")}),r&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"rp-cluster",children:[t.jsx(F,{tone:r.tone,children:r.status}),t.jsx("span",{className:"rp-label",children:r.revision})]}),t.jsx(K,{inline:!0,items:[[o("ui.outbound"),t.jsx(n,{...r.outboundTag})],...r.fields]}),t.jsx("div",{className:"rp-cluster",children:r.connectionHref&&t.jsx(U,{appearance:"button",small:!0,href:r.connectionHref,children:o("flow.viewConnection")})}),t.jsxs("div",{className:"rp-list",children:[!r.steps.length&&t.jsx(G,{children:o("ui.empty")}),r.steps.map(e=>t.jsxs("div",{className:"rp-col rp-step",children:[t.jsxs("div",{className:"rp-cluster",children:[t.jsx(F,{children:e.stage}),t.jsx(A,{text:e.observed,className:"rp-label",children:e.elapsed})]}),e.fields?t.jsx(K,{inline:!0,items:e.fields}):t.jsx("pre",{className:"rp-flow-raw rp-code",children:t.jsx("code",{children:e.raw})})]},e.id))]})]})]})]}),t.jsx(we,{dialog:s.rule.dialog})]})}export{Be as Flows}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Flows-Bgp2RBuw.css b/luci-app-honk/root/etc/honk/doona/assets/Flows-Bgp2RBuw.css new file mode 100644 index 000000000..e5370e209 --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/Flows-Bgp2RBuw.css @@ -0,0 +1 @@ +.rp-topology{min-width:0;overflow:hidden}.rp-tree{gap:var(--rp-space-2);overscroll-behavior-x:contain;flex-direction:column;min-width:0;display:flex;overflow-x:auto}.rp-tree-hint{color:var(--rp-subtle);font-size:var(--rp-text-xs);line-height:16px;display:none}@media (width<=600px){.rp-tree-hint{display:block}}.rp-tree-captions{height:16px;position:relative}.rp-tree-captions>.rp-label{text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;position:absolute;top:0}.rp-tree-canvas{position:relative}.rp-tree-links{pointer-events:none;fill:none;stroke:var(--rp-muted);stroke-linecap:round;position:absolute;inset:0;overflow:visible}.rp-tree-links path{opacity:.55;transition:opacity var(--rp-duration) var(--rp-ease)}.rp-tree-links path[data-kind=direct]{stroke:var(--rp-positive)}.rp-tree-links path[data-kind=block]{stroke:var(--rp-negative)}.rp-tree-links path[data-kind=group]{stroke:var(--rp-iris)}.rp-tree-links path[data-kind=node]{stroke:var(--rp-accent)}.rp-tree-links path[data-state=active]{opacity:1}.rp-tree-links path[data-state=dim]{opacity:.1}.rp-tree-tile{box-sizing:border-box;align-items:center;gap:var(--rp-space-2);height:36px;padding:0 var(--rp-space-2h);border-radius:var(--rp-r-md);background:var(--rp-overlay);color:var(--rp-text);font:inherit;font-size:var(--rp-text-sm);text-align:start;cursor:pointer;border:2px solid #0000;line-height:16px;display:flex;position:absolute}.rp-tree-tile.dim{opacity:.35}.rp-tree-tile[data-hovered]{background:var(--rp-hl-med)}.rp-tree-tile[data-selected]{border-color:var(--rp-accent);background:var(--rp-selected)}.rp-tree-tile[data-focus-visible]{outline:var(--rp-focus-width) solid var(--rp-focus-color);outline-offset:calc(-1 * var(--rp-focus-width));border-color:#0000}.rp-tree-tile .l{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.rp-tree-tile[data-stage=rule] .l{font-family:var(--rp-font-mono);font-size:var(--rp-text-xs);font-variant-ligatures:none}.rp-tree-tile .s{font-size:var(--rp-text-xs);color:var(--rp-subtle);margin-inline-start:var(--rp-space-2)}.rp-tree-tile .s.ok{color:var(--rp-positive-text)}.rp-tree-tile .s.warn{color:var(--rp-notice-text)}.rp-tree-tile .s.err{color:var(--rp-negative-text)}.rp-tree-tile .c{font-variant-numeric:tabular-nums;color:var(--rp-subtle);flex:none;font-weight:700}.rp-impact-section{gap:var(--rp-space-2);flex-direction:column;min-width:0;display:flex}.rp-impact{gap:var(--rp-space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.rp-impact.grid{gap:var(--rp-space-2) var(--rp-space-6);grid-template-columns:repeat(auto-fill,minmax(min(100%,176px),1fr));display:grid}.rp-impact>li{align-items:flex-start;gap:var(--rp-space-1);flex-direction:column;min-width:0;display:flex}.rp-impact>li>.rp-cluster{gap:var(--rp-space-2);max-width:100%}.rp-impact>li>.rp-cluster>.rp-note{flex:none} diff --git a/luci-app-honk/root/etc/honk/doona/assets/Flows-C6wPx8Fw.js b/luci-app-honk/root/etc/honk/doona/assets/Flows-C6wPx8Fw.js deleted file mode 100644 index 41fa6bf8e..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Flows-C6wPx8Fw.js +++ /dev/null @@ -1 +0,0 @@ -import{r as b,j as l}from"./vendor-react-Bf71BWbF.js";import{bl as we,by as xe,Z as K,b0 as ve,bz as ye,bA as je,bc as ke,bk as _e,bj as Me,a0 as T,b4 as F,a4 as $,b8 as Le,b9 as Ne,a6 as ie,aw as Te,h as Se,aX as Z,a3 as J,bB as Re,a_ as Ce,a5 as Pe,u as C,a as ce,aU as Ie,B as R,bC as Oe,c as te,aO as z,aa as Y,ac as O,ae as Fe,ad as Ee,f as He,bp as De,bD as $e,bh as We,j as q,E as A,bx as Be,aL as V,bb as Ae,b3 as Ue,bs as de,bt as Ve,aj as ne,L as se,bv as Qe,aK as ae,ak as ue,aN as Ge}from"./index-BOpK0UVB.js";import{w as L}from"./labels-Bgu_ZhL8.js";import{c as Ke,C as Je}from"./Coverage-BJmgp_Br.js";import{g as ze}from"./policyText-y7dbn7hu.js";import{f as Xe}from"./nav-BiwTft4m.js";import{D as Ze}from"./Table-BkehX7fw.js";import{T as Ye}from"./TimeCell-COfj2dEh.js";import{b as fe,u as me,c as qe}from"./flows-BW6GjUpE.js";import{u as et}from"./outbounds-BVwoUbXQ.js";import{u as tt,R as nt}from"./useQuickRule-qFvcUoSC.js";import"./useGridSelectionCheckbox-C4VxQajJ.js";import"./Virtualizer-BIsXGNLZ.js";import"./ListLayout-CkBMjK9o.js";import"./DaeCode-B8yPDjSE.js";const st=["client","rule","outbound","node"],at=e=>new Map(e.map(t=>[t.id,t.name])),X="\0";function ot(e,t){if(e.rule_id)return e.rule_generation_id!==null&&e.rule_generation_id===t?e.rule_id:e.rule_id+X+e.rule_expression}function pe(e,t,n,r){switch(t){case"client":{const a=K(e.input?.src??void 0);return{label:a??"unknown",unknown:!a}}case"rule":return e.rule_expression?{label:e.rule_expression,unknown:!1,key:ot(e,r)}:{label:"unknown",unknown:!0};case"outbound":return e.outbound?{label:e.outbound,unknown:!1}:{label:"unknown",unknown:!0};case"node":{if(xe(e.outbound))return null;const a=e.chain.at(-1)??null;return a?{label:n.get(a)??a,unknown:!1,key:a}:{label:"unknown",unknown:!0}}}}const W=(e,t)=>ve(e,t.unknown?"":t.key??t.label),ge=e=>we(e,st)?.kind,rt=new Map;function he(e,t,n){const r=ge(t);return r?e.filter(a=>{const s=pe(a,r,rt,n?.generation_id);return s!==null&&W(r,s)===t}):[]}function lt(e,t,n,r){const a=e.slice(0,e.indexOf(":")),s=e.slice(e.indexOf(":")+1);return s===""?r(null):a==="rule"?s.includes(X)?s.slice(s.indexOf(X)+1):t.find(c=>c.rule_id===s)?.expression??s:a==="node"?n.get(s)??s:a==="client"?s:r(s)}function it(e,t,n,r,a="rule"){const s=at(n),c=new Map(t.map(d=>[d.id,d])),i=new Map(t.map(d=>[d.name,d])),o=new Map(n.map(d=>[d.id,d])),m=new Map,w=new Map,f=new Map,p=new Map,v=(d,g)=>{const x=d+">"+g;let u=p.get(x);return u||p.set(x,u={source:d,target:g,count:0}),u},j=(d,g,x=!1)=>{const u=W("node",{key:d,label:g,unknown:x});let N=f.get(u);if(!N){const E=x?void 0:o.get(d),H=E&&je(E);f.set(u,N={id:u,label:g,count:0,unknown:x||void 0,latency:ke(H),unavailable:H?.state==="unavailable"})}return N},_=(d,g=!1)=>{const x=W("outbound",{label:d,unknown:g});let u=w.get(x);if(u)return u;const N=g?void 0:i.get(d),E=g?{groups:[],member:null}:ye(d,N?.selection.tcp_member_id?"tcp":"udp",i,c,o),H=E.groups.map(U=>({name:U.name,kind:U.policy.kind,policy:U.policy.native})),B=E.member,be=g?"unknown":d==="direct"||d==="block"?d:H.length?"group":"unknown";return u={id:x,label:d,count:0,unknown:g||void 0,kind:be,groups:H,node:B&&j(B,s.get(B)??B).id},w.set(x,u),u.node&&v(x,u.node),u},h=(d,g,x=!1)=>{let u=m.get(d);return u||m.set(d,u={id:d,label:g,count:0,unknown:x||void 0,outbound:null,must:!1,fallback:!1}),u};if(a==="rule")for(const d of r?.rules??[]){const g=h(W("rule",{key:d.rule_id,label:d.expression}),d.expression);g.must=d.must,g.fallback=d.kind==="fallback",d.outbound&&(g.outbound=_(d.outbound).id,v(g.id,g.outbound))}const k=[a,"outbound","node"];for(const d of e){let g;for(const x of k){const u=pe(d,x,s,r?.generation_id);if(!u)break;const N=x==="outbound"?_(u.label,u.unknown):x==="node"?j(u.key??u.label,u.label,u.unknown):h(W(x,u),u.label,u.unknown);N.count++,g&&v(g.id,N.id).count++,g=N}}for(const d of t)_(d.name);const M=new Set([...m.values()].map(d=>d.outbound)),P=new Set([...w.values()].flatMap(d=>d.groups.slice(1).map(g=>g.name))),y=[...w.values()].filter(d=>d.count||M.has(d.id)||!P.has(d.label)),S=new Set(y.map(d=>d.id));return{by:a,leaves:[...m.values()],outbounds:y,nodes:[...f.values()],links:[...p.values()].filter(d=>S.has(d.source)||S.has(d.target))}}const oe=new WeakMap;function ee(e){const t=oe.get(e);if(t)return t;const n=new Map,r=new Map,a=new Map;for(const i of e.links){for(const[o,m]of[[n,i.source],[r,i.target]]){let w=o.get(m);w||o.set(m,w=[]),w.push(i)}(!a.has(i.source)||a.get(i.source).count{const o=r.get(i)??[];if(!o.length){t.set(i,n++);return}for(const m of o)s(m);t.set(i,(t.get(o[0])+t.get(o[o.length-1]))/2)},c=new Set;for(const i of e.outbounds)c.add(a.get(i.id)??i.id);for(const i of e.nodes)c.add(i.id);for(const i of e.leaves)a.has(i.id)||c.add(i.id);for(const i of c)s(i);return{rows:n,at:t}}function dt(e,t){const n=new Set([t]),r=new Set;for(const[a,s]of[[e.outgoing,"target"],[e.incoming,"source"]]){const c=[t];for(const i of c)for(const o of a.get(i)??[])r.has(o)||(r.add(o),n.has(o[s])||(n.add(o[s]),c.push(o[s])))}return{items:n,edges:r}}const ut={not_instrumented:"flow.m.notInstrumented",started_late:"flow.m.startedLate",buffer_overflow:"flow.m.bufferOverflow",sampled:"flow.m.sampled",redacted:"flow.m.redacted",evicted:"flow.m.evicted"},ft={src:"ui.device",dst:"conn.f.dst",domain:"ui.domain",domain_source:"conn.f.domainSource",ingress:"conn.f.ingress",pname:"ui.process",network:"ui.protocol",dscp:"DSCP",mark:"fwmark",uid:"UID",pid:"PID"},re=e=>e==null?"—":{key:e?"ui.yes":"ui.no"};function mt(e){const t=n=>n==null?"—":typeof n=="object"?JSON.stringify(n):String(n);switch(e.stage){case"input":return Object.entries(e.data.values).filter(([,n])=>n!=null&&n!=="").map(([n,r])=>{const a=ft[n];return[a===void 0||!a.includes(".")?{key:"flow.f.input",params:{name:a??n}}:a,typeof r=="string"&&(n==="ingress"||n==="domain_source")?L(r):t(r)]});case"route":return[["flow.f.chain",e.data.chain],["flow.f.plane",L(e.data.plane)],["ui.rule",e.data.rules.filter(n=>n.result==="matched").map(n=>n.expression??n.rule_id).join(", ")||"—"],["ui.outbound",t(e.data.outbound)],["flow.f.must",re(e.data.must)]];case"dial_mode":return[["flow.f.dialTarget",e.data.configured+" → "+e.data.effective_target],["flow.f.verification",L(e.data.verification)]];case"dns":return[["ui.name",e.data.name],["flow.f.source",L(e.data.source)],["flow.f.cache",L(e.data.cache)],["ui.upstream",t(e.data.upstream)],["flow.f.selectedIp",t(e.data.selected_ip)]];case"outbound":return[["ui.outbound",t(e.data.routed_outbound)+" → "+t(e.data.effective_outbound)],["flow.f.selectionPath",e.data.selection_path.map(n=>n.group_id+" → "+t(n.member_name??n.member_id)).join(" / ")||"—"],["flow.f.leafNode",t(e.data.leaf_node_id)],["ui.target",t(e.data.target)],["ui.state",L(e.data.status)]];case"connection":return[["ui.state",Object.hasOwn(F,e.data.state)?{key:F[e.data.state]}:e.data.state],["flow.f.milestone",L(e.data.milestone)],["flow.f.reason",L(e.data.reason)]];case"datapath":return[["flow.f.plane",L(e.data.plane)],["flow.f.action",L(e.data.action)],["flow.f.reason",L(e.data.reason)]];case"reroute":return[["flow.f.performed",re(e.data.performed)],["flow.f.reason",L(e.data.reason)]];default:return null}}function pt(e,t,n){const r=(o,m)=>o.unknown?t("flow.mapUnknown"):m,a=[...e.leaves.map(o=>({id:o.id,stage:e.by,name:r(o,o.label),badge:o.must?"must":void 0,notes:[],count:o.count})),...e.outbounds.map(o=>({id:o.id,stage:"outbound",name:r(o,Z(o.label,t)),notes:[...o.groups.slice(1).map(m=>({text:"› "+m.name})),...o.groups.slice(-1).map(m=>({text:ze({kind:m.kind,native:m.policy},t).label})),...o.kind==="group"&&!o.node?[{text:t("flow.treeNoNode")}]:[]],count:o.count})),...e.nodes.map(o=>({id:o.id,stage:"node",name:r(o,o.label),notes:o.latency!=null?[{text:Ce(o.latency,t),tone:Re(o.latency)}]:o.unavailable?[{text:t("ui.unavailable"),tone:"err"}]:[],count:o.count}))],s=new Map(a.map(o=>[o.id,o.name])),{outgoing:c,incoming:i}=ee(e);return a.map(o=>{const m=(c.get(o.id)??[]).map(p=>s.get(p.target)),w=o.stage==="node"?(i.get(o.id)??[]).map(p=>s.get(p.source)):[],f=[o.name,...o.badge?[o.badge]:[],...o.notes.map(p=>p.text),t("flow.treeFlows",{n:o.count})];return w.length&&f.push(t("flow.treeFrom",{names:J(n,w)})),m.length&&f.push(t("flow.treeTo",{names:J(n,m)})),{...o,countText:Pe(o.count,ie[n]),label:f.join(t("ui.separator"))}})}function gt(e,t,n,r,a,s){return{tree:e,state:t?!e.leaves.length&&!e.outbounds.length?"empty":"ready":n?"error":"loading",pinLabel:r?s("flow.viewPinned",{n:a}):null}}const ht={input:"flow.stage.input",route:"flow.stage.route",dial_mode:"flow.stage.dialMode",dns:"flow.stage.dns",outbound:"flow.stage.outbound",connection:"flow.stage.connection",datapath:"flow.stage.datapath",reroute:"flow.stage.reroute"},bt={complete:"flow.status.complete",partial:"flow.status.partial",disabled:"flow.status.disabled"};function wt(e,t,n,r,a,s){return{rows:e.map(c=>({id:c.id,target:c.input?.domain||c.input?.dst||c.id,node:Ne(c,a,r),path:Le(c,a,r),expression:c.rule_expression,ruleId:c.rule_generation_id!==null&&c.rule_generation_id===n?c.rule_id:null,recomputed:c.rule_source==="recomputed",network:c.network.toUpperCase(),state:$(F,c.state,a),startedAt:c.started_at})),coverage:t?Ke(t,a,s):null,stateOptions:[{id:"all",label:a("flow.allStates")},...Object.entries(F).map(([c,i])=>({id:c,label:a(i)}))]}}function xt(e,t,n,r){if(!e)return null;const a=ie[n];return{title:e.input.domain||e.input.dst||e.id,status:$(bt,e.trace.status,t),tone:e.trace.status==="complete"?void 0:"warn",revision:t("flow.revision",{n:e.revision}),fields:[[t("ui.state"),$(F,e.state,t)],[t("ui.outbound"),Z(e.outbound,t)],...r?[[t("conn.node"),r.path??r.node]]:[],...r?.expression?[[t("conn.rule"),r.expression]]:[],...e.trace.missing.length?[[t("flow.missing"),J(n,e.trace.missing.map(s=>$(ut,s,t)))]]:[]],connectionHref:e.connection_id?Se("connections",{id:e.connection_id}):null,seed:{domain:e.input.domain,dip:K(e.input.dst??void 0)??null,sip:K(e.input.src??void 0)??null,outbound:e.outbound,matched:e.rule_id&&e.rule_source!=="unknown"?{id:e.rule_id,expression:e.rule_expression}:null},steps:[...e.trace.steps].sort((s,c)=>s.seq-c.seq).map(s=>{const c=mt(s);return{id:s.seq,stage:$(ht,s.stage,t),observed:Te(s.observed_at,a),elapsed:s.elapsed_us==null?"—":t("ui.microseconds",{n:s.elapsed_us}),fields:c?.map(([i,o])=>[typeof i=="string"?t(i):t(i.key,i.params),typeof o=="string"?o:t(o.key,o.params)])??null,raw:c?"":JSON.stringify(s.data,null,2)}})}}const I=30,vt=720,D=44,Q=36,le=56,G=[5,4,3],yt={rule:0,client:0,outbound:1,node:2};function jt(e,t){return e.leaves.length<=t?e:{...e,leaves:e.leaves.slice(0,t)}}function kt(e,t,n,r){const a=t===null?void 0:Math.max(t,vt),s=((a??0)-2*le)/G.reduce((f,p)=>f+p),c=f=>{const p=yt[f];return{left:G.slice(0,p).reduce((v,j)=>v+j*s+le,0),width:G[p]*s}},i=ct(e),o=pt(e,n,r).map(f=>({view:f,style:{top:i.at.get(f.id)*D,...c(f.stage)}})),m=new Map(e.outbounds.map(f=>[f.id,f])),w=e.links.flatMap(f=>{if(!i.at.has(f.source)||!i.at.has(f.target))return[];const p=ge(f.source)==="outbound"?"outbound":e.by,v=c(p),j=v.left+v.width,_=c(p==="outbound"?"node":"outbound").left,h=i.at.get(f.source)*D+Q/2,k=i.at.get(f.target)*D+Q/2,M=(j+_)/2;return[{link:f,id:f.source+">"+f.target,path:`M${j},${h} C${M},${h} ${M},${k} ${_},${k}`,width:Math.min(8,1.5+Math.log2(1+f.count)*1.25),dash:f.count?void 0:"4 4",kind:p==="outbound"?"node":m.get(f.target)?.kind??"group"}]});return{width:a,height:i.rows*D-(D-Q),captions:[{stage:e.by,label:n(e.by==="rule"?"flow.mapRule":"flow.stageClient"),style:c(e.by)},{stage:"outbound",label:n("flow.mapOutbound"),style:c("outbound")},{stage:"node",label:n("flow.mapNode"),style:c("node")}],placed:o,geometry:w}}function _t(e,t,n){const r=Xe(e).map(s=>({id:s.id,label:n(s.titleKey)})),a=r[0]?.id??"map";return{tabs:r,tab:_e(t,r.map(s=>s.id),a),fallback:e?a:null}}function Mt(e,t,n){return Me(T(e,t==="map"?{id:null,connection_id:null}:{by:null}),t,n)}function Lt(e,t,n){const r=C(),a=ce(),[s,c]=b.useState(I),[i,o]=b.useState(null),[m,w]=Ie(),f=b.useMemo(()=>ee(e),[e]),p=b.useMemo(()=>jt(e,s),[e,s]),v=b.useMemo(()=>kt(p,w,r,a),[p,w,r,a]),j=b.useMemo(()=>new Set(v.placed.map(y=>y.view.id)),[v.placed]),_=b.useMemo(()=>new Set([...e.leaves,...e.outbounds,...e.nodes].map(y=>y.id)),[e]),h=i&&j.has(i)?i:t&&_.has(t)?t:null,k=b.useMemo(()=>h?dt(f,h):null,[f,h]);b.useEffect(()=>{if(!t)return;const y=S=>{S.key==="Escape"&&n(null)};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[t,n]);const M=b.useRef(t);b.useLayoutEffect(()=>{M.current=t},[t]);const P=b.useCallback(y=>n(M.current===y?null:y),[n]);return{...v,ref:m,ready:v.width!==void 0,active:k,pinned:t,pin:P,hover:o,more:e.leaves.length>s?r("flow.treeShowMore",{n:Math.min(I,e.leaves.length-s)}):null,fewer:s>I?r("flow.treeFewer",{n:I}):null,showMore:()=>c(y=>Math.min(e.leaves.length,y+I)),showFewer:()=>c(I)}}const Nt=b.memo(function({view:t,style:n,dim:r,selected:a,pin:s,hover:c}){return l.jsxs(Oe,{"aria-label":t.label,className:te("rp-tree-tile",r&&"dim"),"data-id":t.id,"data-stage":t.stage,style:n,isSelected:a,onChange:()=>s(t.id),onHoverStart:()=>c(t.id),onHoverEnd:()=>c(null),onFocus:()=>c(t.id),onBlur:()=>c(null),children:[l.jsxs("span",{className:"l",children:[t.stage==="rule"||t.stage==="client"?t.name:l.jsx("b",{children:t.name}),t.notes.map((i,o)=>l.jsx("span",{className:te("s",i.tone),children:i.text},o))]}),t.badge&&l.jsx(z,{children:t.badge}),l.jsx("span",{className:"c",children:t.countText})]})});function Tt({tree:e,pinned:t,onPin:n}){const{ref:r,...a}=Lt(e,t,n);return l.jsxs("div",{className:"rp-tree",ref:r,children:[l.jsx("div",{className:"rp-tree-captions",style:{width:a.width},children:a.captions.map(s=>l.jsx("span",{className:"rp-label",style:s.style,children:s.label},s.stage))}),l.jsxs("div",{className:"rp-tree-canvas",style:{height:a.height,width:a.width},children:[a.ready&&l.jsx("svg",{className:"rp-tree-links",width:a.width,height:a.height,"aria-hidden":!0,children:a.geometry.map(s=>l.jsx("path",{d:s.path,strokeWidth:s.width,"data-kind":s.kind,"data-state":a.active?a.active.edges.has(s.link)?"active":"dim":void 0,strokeDasharray:s.dash},s.id))}),a.ready&&a.placed.map(({view:s,style:c})=>l.jsx(Nt,{view:s,style:c,dim:!!a.active&&!a.active.items.has(s.id),selected:a.pinned===s.id,pin:a.pin,hover:a.hover},s.id))]}),a.more&&l.jsx(R,{small:!0,quiet:!0,onPress:a.showMore,children:a.more}),a.fewer&&l.jsx(R,{small:!0,quiet:!0,onPress:a.showFewer,children:a.fewer})]})}function St({go:e,query:t}){const n=C(),r=new URLSearchParams(t),a=Y().data?.resources,s=fe({},O(a,"flows",{whileLoading:!0})),c=Fe(O(a,"groups",{whileLoading:!1})),i=Ee(O(a,"nodes",{whileLoading:!1})),o=me(O(a,"rules",{whileLoading:!1})),m=r.get("by")==="client"?"client":"rule",w=b.useMemo(()=>it(s.data?.flows??[],c.data??[],i.data??[],o.data,m),[s.data,c.data,i.data,o.data,m]),f=r.get("path"),p=b.useRef(t);b.useLayoutEffect(()=>{p.current=t},[t]);const v=b.useCallback(h=>e("flows",T(p.current,{path:h})),[e]),j=b.useMemo(()=>f?he(s.data?.flows??[],f,o.data).length:0,[s.data,f,o.data]),_=[s,o,c,i].every(h=>h.data!==void 0||h.error||!h.loading);return{...gt(w,_&&!!(s.data||o.data||c.data),!!s.error,f,j,n),by:m,pinned:f,error:s.error??c.error??i.error??o.error,retry:()=>{s.refetch(),c.refetch(),i.refetch(),o.refetch()},pin:v,changeBy:h=>e("flows",T(t,{by:h==="client"?"client":null,path:null})),viewPinned:()=>e("flows",T(t,{tab:"records"}))}}function Rt({go:e,query:t}){const n=C(),r=ce(),a=He(De),s=b.useMemo(()=>new URLSearchParams(t),[t]),c=s.get("network"),i=c==="tcp"||c==="udp"?c:"all",o=s.get("state")??"",m=Object.hasOwn(F,o)?o:"all",w=s.get("connection_id")??void 0,f=Y().data?.resources,p=fe({connection_id:w,network:i,state:m},O(f,"flows",{whileLoading:!0})),v=O(f,"rules",{whileLoading:!1}),j=me(v),_=et(),h=s.get("id"),k=qe(h),M=s.get("path"),P=b.useMemo(()=>{const u=p.data?.flows??[];return M?he(u,M,j.data):u},[p.data,M,j.data]),y=j.data?.generation_id,S=b.useMemo(()=>wt(P,p.data,y,_,n,r),[P,p.data,y,_,n,r]),d=S.rows.find(u=>u.id===h),g=b.useMemo(()=>xt(k.data??void 0,n,r,d),[k.data,n,r,d]),x=tt(e);return{...S,detail:g,rule:{canAdd:!!g&&x.canAdd(g.seed),open:()=>{g&&x.open(g.seed)},dialog:x.dialog},network:i,setNetwork:u=>e("flows",T(t,{network:u==="all"?null:u})),state:m,setState:u=>e("flows",T(t,{state:u==="all"?null:u})),wide:a,id:h,rulesListed:v,error:p.error,retry:p.refetch,loading:p.loading&&!p.data,panelOpen:!!h&&(!!k.data||k.loading||!!k.error),panelTitle:g?.title??h??"",detailError:k.error,detailRetry:k.refetch,detailLoading:!k.data&&k.loading,select:u=>e("flows",T(t,{id:u}),{replace:h!==null}),pinLabel:M?n("flow.mapFilter",{label:lt(M,j.data?.rules??[],_,u=>u===null?n("flow.mapUnknown"):Z(u,n))}):null,clearPin:()=>e("flows",T(t,{path:null})),connectionLabel:w?n("flow.connectionFilter",{connectionId:w}):null,clearConnection:()=>e("flows",T(t,{connection_id:null})),recordingHref:f?.runtime_settings.available?$e:null}}function Ct({go:e,query:t}){const n=C(),r=Y(),a=_t(r.data?.resources,t,n);return We(r.data?.resources),{...a,loading:r.loading&&!r.data,error:r.error,retry:r.refetch,changeTab:s=>e("flows",Mt(t,s,a.fallback))}}function zt(e){const t=C(),n=Ct(e),r={map:l.jsx(Pt,{...e}),records:l.jsx(It,{...e})};return n.loading?l.jsx(q,{}):n.error?l.jsx(A,{error:n.error,onRetry:n.retry}):l.jsx("div",{className:"rp-page",children:l.jsx(Be,{label:t("nav.flows"),items:n.tabs.map(a=>({...a,content:r[a.id]})),value:n.tab,onChange:n.changeTab})})}function Pt(e){const t=C(),n=St(e);return l.jsxs("section",{className:"rp-col","aria-label":t("flow.map"),children:[l.jsx(A,{error:n.error,onRetry:n.retry}),l.jsxs(Ge,{title:t("flow.topology"),note:t("flow.topologyNote"),className:"rp-topology",aside:l.jsx(de,{label:t("flow.topology"),value:n.by,onChange:n.changeBy,items:[["rule",t("flow.byRule")],["client",t("flow.byClient")]]}),children:[n.state==="loading"&&l.jsx(q,{}),n.state==="empty"&&l.jsx(ue,{children:t("flow.mapEmpty")}),n.state==="ready"&&l.jsxs(l.Fragment,{children:[l.jsx("span",{className:"rp-tree-hint",children:t("flow.treePanHint")}),l.jsx(Tt,{tree:n.tree,pinned:n.pinned,onPin:n.pin})]})]}),n.pinLabel&&l.jsxs("div",{className:"rp-toolbar",children:[l.jsx(R,{small:!0,onPress:n.viewPinned,children:n.pinLabel}),l.jsx(R,{small:!0,quiet:!0,onPress:()=>n.pin(null),children:t("flow.clearMapFilter")})]})]})}function It(e){const t=C(),n=Rt(e),r=n.detail,a=b.useMemo(()=>[{id:"target",label:t("ui.target"),minWidth:128,grow:2,isRowHeader:!0,render:s=>l.jsx(V,{children:s.target})},{id:"node",label:t("conn.node"),minWidth:96,drop:2,render:s=>l.jsx(V,{className:"rp-chain",text:s.path??void 0,children:s.node})},{id:"rule",label:t("conn.rule"),minWidth:152,grow:2,drop:1,render:s=>l.jsxs("span",{className:"rp-rule",children:[l.jsx(Ae,{expression:s.expression,href:Ue(s.ruleId,n.rulesListed)}),s.recomputed&&l.jsx("small",{className:"rp-provenance",children:t("conn.recomputed")})]})},{id:"network",label:t("ui.protocol"),minWidth:64,grow:0,drop:3,render:s=>s.network},{id:"state",label:t("ui.state"),minWidth:80,grow:0,drop:5,render:s=>s.state},{id:"started",label:t("ui.started"),minWidth:80,grow:0,drop:4,render:s=>l.jsx(Ye,{at:s.startedAt})}],[t,n.rulesListed]);return l.jsxs(l.Fragment,{children:[l.jsx(A,{error:n.error,onRetry:n.retry}),l.jsxs("div",{className:"rp-toolbar",children:[l.jsx(de,{label:t("ui.network"),value:n.network,onChange:n.setNetwork,items:[["all",t("ui.all")],["tcp",t("ui.tcp")],["udp",t("ui.udp")]]}),l.jsx(Ve,{label:t("ui.state"),side:!0,value:n.state,onChange:n.setState,items:n.stateOptions}),n.pinLabel&&l.jsxs(R,{small:!0,label:t("ui.valuePair",{label:t("flow.clearMapFilter"),value:n.pinLabel}),onPress:n.clearPin,children:[n.pinLabel,l.jsx(ne,{})]}),n.connectionLabel&&l.jsxs(R,{small:!0,label:t("ui.valuePair",{label:t("flow.clearConnectionFilter"),value:n.connectionLabel}),onPress:n.clearConnection,children:[n.connectionLabel,l.jsx(ne,{})]}),n.coverage&&l.jsx(Je,{view:n.coverage}),n.recordingHref&&l.jsxs(l.Fragment,{children:[l.jsx("span",{className:"rp-grow"}),l.jsx(se,{appearance:"button",quiet:!0,small:!0,href:n.recordingHref,children:t("ui.recordingSettings")})]})]}),l.jsxs("div",{className:"rp-with-panel","data-open":n.panelOpen?"":void 0,children:[l.jsx(Ze,{label:t("flow.records"),rowDetail:!0,loading:n.loading,rows:n.rows,height:442,selected:n.id,onSelect:n.select,selectOnFocus:n.wide,empty:t("flow.empty"),cols:a}),l.jsxs(Qe,{open:n.panelOpen,title:n.panelTitle,onClose:()=>n.select(null),children:[l.jsx(A,{error:n.detailError,onRetry:n.detailRetry}),n.detailLoading&&l.jsx(q,{children:t("flow.detailLoading")}),r&&l.jsxs(l.Fragment,{children:[l.jsxs("div",{className:"rp-cluster",children:[l.jsx(z,{tone:r.tone,children:r.status}),l.jsx("span",{className:"rp-label",children:r.revision})]}),l.jsx(ae,{inline:!0,items:r.fields}),l.jsxs("div",{className:"rp-cluster",children:[r.connectionHref&&l.jsx(se,{appearance:"button",small:!0,href:r.connectionHref,children:t("flow.viewConnection")}),n.rule.canAdd&&l.jsx(R,{small:!0,onPress:n.rule.open,children:t("flow.addRule")})]}),l.jsxs("div",{className:"rp-list",children:[!r.steps.length&&l.jsx(ue,{children:t("ui.empty")}),r.steps.map(s=>l.jsxs("div",{className:"rp-col rp-step",children:[l.jsxs("div",{className:"rp-cluster",children:[l.jsx(z,{children:s.stage}),l.jsx(V,{text:s.observed,className:"rp-label",children:s.elapsed})]}),s.fields?l.jsx(ae,{inline:!0,items:s.fields}):l.jsx("pre",{className:"rp-flow-raw rp-code",children:l.jsx("code",{children:s.raw})})]},s.id))]})]})]})]}),l.jsx(nt,{dialog:n.rule.dialog})]})}export{zt as Flows}; diff --git a/luci-app-honk/root/etc/honk/doona/assets/Flows-l5FnUA9B.css b/luci-app-honk/root/etc/honk/doona/assets/Flows-l5FnUA9B.css deleted file mode 100644 index ef50ee949..000000000 --- a/luci-app-honk/root/etc/honk/doona/assets/Flows-l5FnUA9B.css +++ /dev/null @@ -1 +0,0 @@ -.rp-topology{min-width:0;overflow:hidden}.rp-tree{overscroll-behavior-x:contain;flex-direction:column;gap:8px;min-width:0;display:flex;overflow-x:auto}.rp-tree-hint{color:var(--rp-subtle);font-size:var(--rp-text-xs);line-height:16px;display:none}@media (width<=600px){.rp-tree-hint{display:block}}.rp-tree-captions{height:16px;position:relative}.rp-tree-captions>.rp-label{text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;position:absolute;top:0}.rp-tree-canvas{position:relative}.rp-tree-links{pointer-events:none;fill:none;stroke:var(--rp-muted);stroke-linecap:round;position:absolute;inset:0;overflow:visible}.rp-tree-links path{opacity:.55;transition:opacity var(--rp-duration) var(--rp-ease)}.rp-tree-links path[data-kind=direct]{stroke:var(--rp-positive)}.rp-tree-links path[data-kind=block]{stroke:var(--rp-negative)}.rp-tree-links path[data-kind=group]{stroke:var(--rp-iris)}.rp-tree-links path[data-kind=node]{stroke:var(--rp-accent)}.rp-tree-links path[data-state=active]{opacity:1}.rp-tree-links path[data-state=dim]{opacity:.1}.rp-tree-tile{box-sizing:border-box;border-radius:var(--rp-r-md);background:var(--rp-overlay);height:36px;color:var(--rp-text);font:inherit;font-size:var(--rp-text-sm);text-align:start;cursor:pointer;border:2px solid #0000;align-items:center;gap:8px;padding:0 10px;line-height:16px;display:flex;position:absolute}.rp-tree-tile.dim{opacity:.35}.rp-tree-tile[data-hovered]{background:var(--rp-hl-med)}.rp-tree-tile[data-selected]{border-color:var(--rp-accent);background:var(--rp-selected)}.rp-tree-tile[data-focus-visible]{outline:2px solid var(--rp-accent);outline-offset:2px}.rp-tree-tile .l{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.rp-tree-tile[data-stage=rule] .l{font-family:ui-monospace,SF Mono,Menlo,Consolas,JetBrains Mono,Fira Code,DejaVu Sans Mono,Liberation Mono,Noto Sans Mono,monospace;font-size:var(--rp-text-xs)}.rp-tree-tile .s{font-size:var(--rp-text-xs);color:var(--rp-subtle);margin-inline-start:8px}.rp-tree-tile .s.ok{color:var(--rp-positive-text)}.rp-tree-tile .s.warn{color:var(--rp-notice-text)}.rp-tree-tile .s.err{color:var(--rp-negative-text)}.rp-tree-tile .c{font-variant-numeric:tabular-nums;color:var(--rp-subtle);flex:none;font-weight:700} diff --git a/luci-app-honk/root/etc/honk/doona/assets/GridList-BUQihjaB.js b/luci-app-honk/root/etc/honk/doona/assets/GridList-BUQihjaB.js new file mode 100644 index 000000000..4a5c893ab --- /dev/null +++ b/luci-app-honk/root/etc/honk/doona/assets/GridList-BUQihjaB.js @@ -0,0 +1 @@ +import{dP as e,ct as t,dQ as r,cu as o,bf as a,dR as i,dS as l,dT as n,dU as s,dV as d,cg as c,dW as u,dX as p,dY as g,dZ as y,cp as f,cc as v,d_ as b,cb as h,d$ as m,e0 as k,e1 as D,e2 as w,e3 as E,e4 as P,e5 as M,e6 as x,cB as S,e7 as A,e8 as K,e9 as C,ea as T,eb as B,ec as N,ed as I,ee as F,ef as R,eg as V,eh as L,ei as H,ej as U,ek as O,el as z,em as $,en as j,eo as G}from"./index-BgFj_VXE.js";import{$ as W,a as _,b as q,c as Q,d as X,e as Y}from"./useGridSelectionCheckbox-BxnCShqN.js";import{d as Z,e as J,f as ee,g as te,h as re,i as oe,j as ae}from"./Select-CkiGmyVC.js";import{r as ie,$ as le}from"./vendor-react-64fcanlc.js";const ne=new WeakMap;function se(e,t){let{id:r}=ne.get(e)??{};if(!r)throw new Error("Unknown list");return`${r}-${function(e){return"string"==typeof e?e.replace(/\s*/g,""):""+e}(t)}`}const de={ltr:"ArrowRight",rtl:"ArrowLeft"},ce={ltr:"ArrowLeft",rtl:"ArrowRight"};function ue(e,t,r){let{node:m,isVirtualized:k,focusMode:D="row",allowsArrowNavigation:w}=e,{direction:E}=a(),{onAction:P,linkBehavior:M,keyboardNavigationBehavior:x,shouldSelectOnPressUp:S}=ne.get(t),A=i(),K=ie.useRef(null),C=()=>{if(null!==r.current){if("child"===D){if(d(r.current)&&r.current!==c(u(r.current)))return;let e=p(r.current,{tabbable:!0}).firstChild();if(e)return g(e),void y(e,{containingElement:f(e)})}(null!=K.current&&m.key!==K.current||!d(r.current))&&g(r.current)}},T={},B=e.hasChildItems,N=t.selectionManager.isLink(m.key);if(null!=m&&"expandedKeys"in t){let e=t.collection.getChildren?.(m.key);B=B||[...e??[]].length>1,null==P&&!N&&"none"===t.selectionManager.selectionMode&&B&&(P=()=>t.toggleKey(m.key));let r=B?t.expandedKeys.has(m.key):void 0,o=1,a=m.index;if(m.level>=0&&null!=m?.parentKey){let e=t.collection.getItem(m.parentKey);if(e){let r=function(e,t){let r=t.getChildren?.(e.key),o=r?Array.from(r):[],a=o.length>0?o[0]:null,i=[];for(;a;)i.push(a),a=null!=a.nextKey?t.getItem(a.nextKey):null;return i}(e,t.collection);o=[...r].filter(e=>"item"===e.type).length,a>0&&"item"!==r[0].type&&(a-=1)}}else o=[...t.collection].filter(e=>0===e.level&&"item"===e.type).length;T={"aria-expanded":r,"aria-level":m.level+1,"aria-posinset":a+1,"aria-setsize":o}}let{itemProps:I,...F}=l({selectionManager:t.selectionManager,key:m.key,ref:r,isVirtualized:k,shouldSelectOnPressUp:e.shouldSelectOnPressUp||S,onAction:P||m.props?.onAction?n(m.props?.onAction,P?()=>P(m.key):void 0):void 0,focus:C,linkBehavior:M}),R=s(m.props),V=F.hasAction?R:{},L=o(I,V,{role:"row",onKeyDownCapture:"arrow"===x||w?e=>{let o=c(u(r.current));if(!h(e.currentTarget,v(e))||!r.current||!o)return;let a=p(r.current);if(a.currentNode=o,!pe(e,t,m,B,E,o,r.current,w))switch(e.key){case"ArrowLeft":if("arrow"===x){let t="rtl"===E?a.nextNode():a.previousNode();if(t)e.preventDefault(),e.stopPropagation(),g(t),y(t,{containingElement:f(r.current)});else if(e.preventDefault(),e.stopPropagation(),"rtl"===E)g(r.current),y(r.current,{containingElement:f(r.current)});else{a.currentNode=r.current;let e=ge(a);e&&(g(e),y(e,{containingElement:f(r.current)}))}}break;case"ArrowRight":if("arrow"===x){let t="rtl"===E?a.previousNode():a.nextNode();if(t)e.preventDefault(),e.stopPropagation(),g(t),y(t,{containingElement:f(r.current)});else if(e.preventDefault(),e.stopPropagation(),"ltr"===E)g(r.current),y(r.current,{containingElement:f(r.current)});else{a.currentNode=r.current;let e=ge(a);e&&(g(e),y(e,{containingElement:f(r.current)}))}}break;case"ArrowUp":case"ArrowDown":!e.altKey&&h(r.current,v(e))&&(e.stopPropagation(),e.preventDefault(),r.current.parentElement?.dispatchEvent(new KeyboardEvent(e.nativeEvent.type,e.nativeEvent)))}}:void 0,onFocus:e=>{K.current=m.key,v(e)===r.current?"child"===D&&e.relatedTarget&&h(r.current,e.relatedTarget)||requestAnimationFrame(()=>{"child"===D&&c(u(r.current))===r.current&&C()}):b()||t.selectionManager.setFocusedKey(m.key)},"aria-label":m["aria-label"]||m.textValue||void 0,"aria-selected":t.selectionManager.canSelectItem(m.key)?t.selectionManager.isSelected(m.key):void 0,"aria-disabled":t.selectionManager.isDisabled(m.key)||void 0,"aria-labelledby":A&&(m["aria-label"]||m.textValue)?`${se(t,m.key)} ${A}`:void 0,id:se(t,m.key)});"child"===D&&w&&"tab"===x&&(L.tabIndex=-1);let H=L.onKeyDown;if(L.onKeyDown=e=>{(e=>{let o=c(u(r.current));if(h(e.currentTarget,v(e))&&r.current&&o){if("tab"===x){if(v(e)!==r.current&&"Tab"!==e.key)return void e.stopPropagation();if(pe(e,t,m,B,E,o,r.current,w))return}if("Tab"===e.key&&"tab"===x){let t=p(r.current,{tabbable:!0});t.currentNode=o,(e.shiftKey?t.previousNode():t.nextNode())&&e.stopPropagation()}}})(e),e.isPropagationStopped()||H?.(e)},k){let{collection:e}=t,r=[...e];L["aria-rowindex"]=r.find(e=>"section"===e.type)?[...e.getKeys()].filter(t=>"section"!==e.getItem(t)?.type).findIndex(e=>e===m.key)+1:m.index+1}return{rowProps:{...o(L,T)},gridCellProps:{role:"gridcell","aria-colindex":1},descriptionProps:{id:A},...F}}function pe(e,t,r,o,a,i,l,n){if(!("expandedKeys"in t)||!n&&i!==l)return!1;if(e.key===de[a]&&t.selectionManager.focusedKey===r.key&&o&&!t.expandedKeys.has(r.key))return t.toggleKey(r.key),e.stopPropagation(),!0;if(e.key===ce[a]&&t.selectionManager.focusedKey===r.key){if(o&&t.expandedKeys.has(r.key))return t.toggleKey(r.key),e.stopPropagation(),!0;if(!t.expandedKeys.has(r.key)&&r.parentKey&&"item"===t.collection.getItem(r.parentKey)?.type)return t.selectionManager.setFocusedKey(r.parentKey),e.stopPropagation(),!0}return!1}function ge(e){let t=null,r=null;do{r=e.lastChild(),r&&(t=r)}while(r);return t}const ye=ie.createContext(null),fe=ie.forwardRef(function(e,t){return[e,t]=m(e,t,ye),le.createElement(k,{content:le.createElement(D,e)},r=>le.createElement(ve,{props:e,collection:r,gridListRef:t}))});function ve({props:i,collection:l,gridListRef:n}){[i,n]=m(i,n,F);let s,d,c,{shouldUseVirtualFocus:u,filter:p,disallowTypeAhead:g,UNSTABLE_focusOnEntry:y,...f}=i,{dragAndDropHooks:v,keyboardNavigationBehavior:b="arrow",layout:h="stack",orientation:k="vertical"}=i,{CollectionRoot:D,isVirtualized:w,layoutDelegate:E,dropTargetDelegate:P}=ie.useContext(M),x=ee({...f,collection:l,children:void 0,layoutDelegate:E}),A=te(x,p),B=H({usage:"search",sensitivity:"base"}),{disabledBehavior:N,disabledKeys:I}=A.selectionManager,{direction:R}=a(),V=ie.useMemo(()=>new U({collection:A.collection,collator:B,ref:n,disabledKeys:I,disabledBehavior:N,layoutDelegate:E,layout:h,orientation:k,direction:R}),[A.collection,n,h,k,I,N,E,B,R]),{gridProps:L}=function(a,i,l){let{isVirtualized:n,keyboardDelegate:s,layoutDelegate:d,onAction:c,disallowTypeAhead:u,linkBehavior:p="action",keyboardNavigationBehavior:g="arrow",escapeKeyBehavior:y="clearSelection",shouldSelectOnPressUp:f}=a;a["aria-label"]||a["aria-labelledby"]||console.warn("An aria-label or aria-labelledby prop is required for accessibility.");let{listProps:v}=e({selectionManager:i.selectionManager,collection:i.collection,disabledKeys:i.disabledKeys,ref:l,keyboardDelegate:s,layoutDelegate:d,isVirtualized:n,selectOnFocus:"replace"===i.selectionManager.selectionBehavior,shouldFocusWrap:a.shouldFocusWrap,linkBehavior:p,disallowTypeAhead:u,autoFocus:a.autoFocus,escapeKeyBehavior:y,UNSTABLE_focusOnEntry:a.UNSTABLE_focusOnEntry}),b=t(a.id);ne.set(i,{id:b,onAction:c,linkBehavior:p,keyboardNavigationBehavior:g,shouldSelectOnPressUp:f});let h=W({selectionManager:i.selectionManager,hasItemActions:!!c}),m=_(l,{isDisabled:0!==i.collection.size}),k=r(a,{labelable:!0}),D=o(k,{role:"grid",id:b,"aria-multiselectable":"multiple"===i.selectionManager.selectionMode?"true":void 0},0===i.collection.size?{tabIndex:m?-1:0}:v,h);return n&&(D["aria-rowcount"]=i.collection.size,D["aria-colcount"]=1),q({},i),{gridProps:D}}({...f,keyboardDelegate:V,keyboardNavigationBehavior:"grid"===h?"tab":b,isVirtualized:w,shouldSelectOnPressUp:i.shouldSelectOnPressUp,disallowTypeAhead:g,UNSTABLE_focusOnEntry:y},A,n),$=A.selectionManager,j=!!v?.useDraggableCollectionState,G=!!v?.useDroppableCollectionState;ie.useRef(j),ie.useRef(G),ie.useEffect(()=>{},[j,G]);let Q=!1,X=null,Y=ie.useRef(null);if(j&&v){s=v.useDraggableCollectionState({collection:A.collection,selectionManager:$,preview:v.renderDragPreview?Y:void 0}),v.useDraggableCollection({},s,n);let e=v.DragPreview;X=v.renderDragPreview?le.createElement(e,{ref:Y},v.renderDragPreview):null}if(G&&v){d=v.useDroppableCollectionState({collection:A.collection,selectionManager:$});let e=v.dropTargetDelegate||P||new v.ListDropTargetDelegate(l,n,{layout:h,direction:R,orientation:k});c=v.useDroppableCollection({keyboardDelegate:V,dropTargetDelegate:e},d,n),Q=d.isDropTarget({type:"root"})}let{focusProps:se,isFocused:de,isFocusVisible:ce}=S(),ue=0===A.collection.size,pe={isDropTarget:Q,orientation:k,isEmpty:ue,isFocused:de,isFocusVisible:ce,layout:h,state:A},ge=K({...i,children:void 0,defaultClassName:"react-aria-GridList",values:pe}),ye=null;if(ue&&i.renderEmptyState){let e=i.renderEmptyState(pe);ye=le.createElement("div",{role:"row","aria-rowindex":1,style:{display:"contents"}},le.createElement("div",{role:"gridcell",style:{display:"contents"}},e))}let fe=r(i,{global:!0});return le.createElement(O,null,le.createElement(C.div,{...o(fe,ge,L,se,c?.collectionProps,null),ref:n,slot:i.slot||void 0,onScroll:i.onScroll,"data-drop-target":Q||void 0,"data-empty":ue||void 0,"data-focused":de||void 0,"data-focus-visible":ce||void 0,"data-layout":h,"data-orientation":k},le.createElement(T,{values:[[Z,A],[J,{dragAndDropHooks:v,dragState:s,dropState:d}],[re,{render:he}]]},G&&le.createElement(De,null),le.createElement(z,null,le.createElement(D,{collection:A.collection,scrollRef:n,persistedKeys:ae($,v,d),renderDropIndicator:oe(v,d)}))),ye,X))}const be=w(E,function(e,t,a){let i=ie.useContext(Z),{dragAndDropHooks:l,dragState:n,dropState:s}=ie.useContext(J),d=P(t),{isVirtualized:c}=ie.useContext(M),u=n&&!(n.isDisabled||n.selectionManager.isDisabled(a.key)),{rowProps:p,gridCellProps:g,descriptionProps:y,...f}=ue({node:a,shouldSelectOnPressUp:!!n,isVirtualized:c,focusMode:e.focusMode,allowsArrowNavigation:e.allowsArrowNavigation},i,d),{hoverProps:v,isHovered:b}=x({isDisabled:!f.allowsSelection&&!f.hasAction&&!u,onHoverStart:a.props.onHoverStart,onHoverChange:a.props.onHoverChange,onHoverEnd:a.props.onHoverEnd}),{isFocusVisible:h,focusProps:m}=S(),{isFocusVisible:k,focusProps:D}=S({within:!0}),{checkboxProps:w}=function(e,t){let{key:r}=e;const{checkboxProps:o}=Q(e,t);return{checkboxProps:{...o,"aria-labelledby":`${o.id} ${se(t,r)}`}}}({key:a.key},i),E="all"===i.selectionManager.disabledBehavior&&f.isDisabled?{isDisabled:!0}:{},H=null;n&&l&&(H=l.useDraggableItem({key:a.key,hasDragButton:!0},n));let U=null,O=ie.useRef(null),{visuallyHiddenProps:z}=A();s&&l&&(U=l.useDropIndicator({target:{type:"item",key:a.key,dropPosition:"on"}},s,O));let $=n&&n.isDragging(a.key),j=K({...e,id:void 0,children:a.rendered,defaultClassName:"react-aria-GridListItem",values:{...f,isHovered:b,isFocusVisible:h,isFocusVisibleWithin:k,selectionMode:i.selectionManager.selectionMode,selectionBehavior:i.selectionManager.selectionBehavior,allowsDragging:!!n,isDragging:$,isDropTarget:U?.isDropTarget,id:a.key,state:i}}),G=ie.useRef(null);ie.useEffect(()=>{n&&!G.current&&console.warn('Draggable items in a GridList must contain a