Compare commits

...
77 Commits
Author SHA1 Message Date
Gani Georgiev 9d0ea7635b [#204] fixed query string parsing 2022-08-01 14:20:21 +03:00
Yin Shanyang d35134e913 [#250] added armv7 on linux as a build target 2022-08-01 10:29:06 +03:00
Gani Georgiev ce8af46fff unified file field styles 2022-07-31 23:28:47 +03:00
Gani Georgiev 87ecb1114c cleaning up no longer needed ui helper methods 2022-07-31 23:21:55 +03:00
Gani Georgiev c070be2c47 [#238] removed implicit select items grouping 2022-07-31 18:52:51 +03:00
Gani Georgiev 4f0041a128 added dart-sdk to the readme 2022-07-31 13:05:05 +03:00
Gani Georgiev 0ac24af7c9 updated ui/dist 2022-07-31 11:51:06 +03:00
Gani Georgiev 96b2c5fedf added Dart to the api preview examples 2022-07-30 21:04:44 +03:00
Gani Georgiev 4019ca5f00 [#223] change the default prod backend url to relative path to support sub-path deployment 2022-07-30 20:59:09 +03:00
Gani Georgiev 20fe3c8c91 added debug log for the invalid uploaded file(s) 2022-07-30 14:11:08 +03:00
Gani Georgiev d87a5e544c updated admin ui dependencies 2022-07-30 08:02:41 +03:00
Gani Georgiev bb527be493 fixed panic on expanding existing byt non-relation type field 2022-07-30 07:58:42 +03:00
Gani Georgiev 9e3b230c8e added debug log for established realtime connection 2022-07-28 08:26:05 +03:00
Gani Georgiev 686198a22e normalize number filter literals
Always cast number literals to provide consistent eq/neq behavior when combined with COALESCE, because '1' = 1 is TRUE but COALESCE('1', '') = COALESCE(1, '') will result to FALSE.
2022-07-28 05:23:58 +03:00
Gani Georgiev 086b992c7d [#228] added target=_blank to the email links 2022-07-26 15:17:10 +03:00
Takeshi Sato 88d8cec3d9 [#207] use read-only scopes for the GitHub OAuth2 provider 2022-07-24 18:04:53 +03:00
Gani Georgiev 7926501649 updated comments and added CSP header check in the tests 2022-07-21 17:22:31 +03:00
Gani Georgiev 4c2cd5a534 simplify the svg extension check 2022-07-21 12:58:06 +03:00
Gani Georgiev 5d8fc939e2 [#164] serve common media files inline and fix svg content-type 2022-07-21 12:56:17 +03:00
Gani Georgiev 1a5180d7d3 added support to filter request.user.profile relation fields 2022-07-20 22:33:24 +03:00
Gani Georgiev 8a08a4764d [#166] fixed api preview examples 2022-07-19 19:41:03 +03:00
Gani Georgiev 66b317f01c run tests before goreleaser 2022-07-19 17:24:58 +03:00
Gani Georgiev ab5a770346 updated tests 2022-07-19 17:23:34 +03:00
Gani Georgiev 65697add43 temporary skip tests in the release action until the async email hooks get fixed 2022-07-19 14:46:02 +03:00
Gani Georgiev 841415f0ff move field delete in a dropdown to prevent accidental clicks 2022-07-19 14:36:35 +03:00
Gani Georgiev f295ce9403 run added password reset and verification sent hooks tests 2022-07-19 14:20:28 +03:00
Gani Georgiev 383b2a1279 [#160] support expand query parameter for create and update requests 2022-07-19 13:31:52 +03:00
Gani Georgiev 73fb12c2bc [#156] added forcePathStyle to the s3 config 2022-07-19 10:45:38 +03:00
Kenneth Lee 571c4dcc8d [#163] fixed migrate down cmd 2022-07-18 23:00:54 +03:00
Gani Georgiev f56adf26f4 added the app name in the document title and fixed the double initial load on records list 2022-07-18 19:44:10 +03:00
Gani Georgiev f8f3ca25ee updated duplicated field name error 2022-07-18 18:10:30 +03:00
Gani Georgiev e01f76d37b allow switching schema field names when renaming fields 2022-07-18 16:26:37 +03:00
Gani Georgiev 47fc9b1066 normalized null handling in search filters 2022-07-18 14:07:25 +03:00
Gani Georgiev eaf08a5c15 [#151] updated the tests to ensure that the cascaded record files are also deleted 2022-07-18 13:19:07 +03:00
Gani Georgiev 8ef3d4e966 [#151] remove files on cascade deletion 2022-07-18 12:04:27 +03:00
Gani Georgiev 04e0cec32c updated ui/dist 2022-07-18 01:06:55 +03:00
Gani Georgiev 9a231ba7b3 applied some of the changes from #149 2022-07-18 01:03:09 +03:00
Gani Georgiev 7f959011b8 moved field option btns inside the panel 2022-07-18 00:55:53 +03:00
Gani Georgiev 994761b728 normalized the caster to return always non-null value and fixed minor ui issues 2022-07-18 00:16:09 +03:00
Gani Georgiev f19b9e3552 commented golangci-lint action as it is not go1.18+ ready 2022-07-17 22:25:28 +03:00
Gani Georgiev 36783b8f04 added golangci-lint action 2022-07-17 22:20:40 +03:00
Gani Georgiev a076cc906f [#147] added CONTRIBUTING.md 2022-07-17 20:33:12 +03:00
Gani Georgiev b1a30f4050 fixed figure tag typo 2022-07-16 11:57:31 +03:00
Gani Georgiev 4506fb17e9 adding video presets to the file options 2022-07-16 11:54:54 +03:00
Gani Georgiev 72f72bc84f added invalid form-group styles 2022-07-16 10:40:04 +03:00
Gani Georgiev 7fd5102fb5 updated EmailOptions domain input tooltips 2022-07-16 10:39:19 +03:00
Gani Georgiev d6bdc51009 changed the storage slide panel transition to local 2022-07-16 10:38:47 +03:00
Gani Georgiev 789373d15d [#100] resets the initial loadList results 2022-07-15 19:37:30 +03:00
Gani Georgiev 2dc000da65 improve error reporting on OAuth2 user profile fetch 2022-07-15 18:52:37 +03:00
Simon Krauter 1095637bcd [#116] fix BaseModel.RefreshUpdated comment 2022-07-14 23:17:53 +03:00
Gani Georgiev c4fcba5210 [#109] prealocated handlers and replaced OnRecordBeforeDeleteRequest with OnModelBeforeDelete 2022-07-14 22:35:57 +03:00
Gani Georgiev d8c8289269 added odd default circle icon size for better visual vertical alignment in firefox 2022-07-14 21:21:47 +03:00
Gani Georgiev dbbfa243bc added new lines for readability and consistency 2022-07-14 20:01:53 +03:00
Valley a16b0c9004 [#114] simplified some code by returning early and added cap for slices 2022-07-14 19:26:08 +03:00
Gani Georgiev 03a7bafa66 use the original vite2 default port and bump the min js-sdk to v0.2.1 2022-07-14 17:09:08 +03:00
Gani Georgiev d129959098 added store.RemoveAll() helper method 2022-07-14 16:39:42 +03:00
Gani Georgiev 6749559a22 log the response error not the handler one 2022-07-14 11:52:35 +03:00
Gani Georgiev 28bc2678e9 minor ui improvements and upgraded dependencies 2022-07-14 09:58:53 +03:00
Gani Georgiev d4202e696b [#99] fix AutoExpandTextArea scrolling 2022-07-13 22:44:59 +03:00
Gani Georgiev 9de3cc99a0 updated api preview body params col sizes 2022-07-13 08:48:38 +03:00
Franco Profeti 111bc59472 [#93] improved the README for no golang devs 2022-07-13 08:12:25 +03:00
Gani Georgiev b2647ebca9 synced refresh button js timeout with the css animation 2022-07-12 20:03:13 +03:00
Gani Georgiev ef226cf9c1 added refresh button to the other listing pages 2022-07-12 19:56:22 +03:00
Valley 63d5a8d633 [#89] simplified some code by returning early and reducing local variable scopes 2022-07-12 19:52:09 +03:00
Gani Georgiev d71c3cd19c updated ui/dist 2022-07-12 18:11:50 +03:00
Cornelius Müller 240bd6790a [#83] added refresh button to page records view 2022-07-12 18:08:57 +03:00
Gani Georgiev 05a4071eba [#80] fixed before hooks data and added optional interceptor to upsert submit 2022-07-12 13:42:06 +03:00
Valley ce857985be [#82] removed version cmd and make use of cobra.Version 2022-07-12 07:57:36 +03:00
Gani Georgiev 320d1482a4 [#77] add warning on storage type change 2022-07-11 22:23:22 +03:00
Gani Georgiev 46399dddac [#78] enable fully qualified URIs for S3 endpoints and improved error reporting when uploading or deleting files 2022-07-11 21:00:17 +03:00
Gani Georgiev 52c288d9db added linter skip comments and removed the Presentator specific inflector.Usernamify 2022-07-11 16:16:01 +03:00
Gani Georgiev ed741662b2 removed the v prefix from the version command 2022-07-11 10:30:34 +03:00
Gani Georgiev 0c14f32822 added additional info about the @expand query parameter 2022-07-11 10:30:20 +03:00
毛亚琛 ec0d3b0d3d [#69] automatically add version information 2022-07-11 10:26:55 +03:00
wenqingl 10d7faea31 [#62] fixed typo in README
defintions -> definitions
2022-07-11 07:36:38 +03:00
Gani Georgiev f62664098e updated ui/dist 2022-07-10 21:14:38 +03:00
毛亚琛 1dfc314bc1 [#60] fix list api docs example 2022-07-10 21:07:04 +03:00
151 changed files with 3655 additions and 2677 deletions

No files matched your search

+8
View File
@@ -29,6 +29,14 @@ jobs:
- name: Build Admin dashboard UI - name: Build Admin dashboard UI
run: npm --prefix=./ui ci && npm --prefix=./ui run build run: npm --prefix=./ui ci && npm --prefix=./ui run build
# The prebuilt golangci-lint doesn't support go 1.18+ yet
# https://github.com/golangci/golangci-lint/issues/2649
# - name: Run linter
# uses: golangci/golangci-lint-action@v3
- name: Run tests
run: go test ./...
- name: Run GoReleaser - name: Run GoReleaser
uses: goreleaser/goreleaser-action@v3 uses: goreleaser/goreleaser-action@v3
with: with:
+12 -3
View File
@@ -9,6 +9,8 @@ before:
builds: builds:
- main: ./examples/base - main: ./examples/base
binary: pocketbase binary: pocketbase
ldflags:
- -s -w -X github.com/pocketbase/pocketbase.Version={{ .Version }}
env: env:
- CGO_ENABLED=0 - CGO_ENABLED=0
goos: goos:
@@ -18,13 +20,20 @@ builds:
goarch: goarch:
- amd64 - amd64
- arm64 - arm64
- arm
goarm:
- 7
ignore:
- goos: windows
goarch: arm
- goos: darwin
goarch: arm
release: release:
draft: true draft: true
archives: archives:
- - format: zip
format: zip
files: files:
- LICENSE* - LICENSE*
- CHANGELOG* - CHANGELOG*
@@ -33,7 +42,7 @@ checksum:
name_template: 'checksums.txt' name_template: 'checksums.txt'
snapshot: snapshot:
name_template: "{{ incpatch .Version }}-next" name_template: '{{ incpatch .Version }}-next'
changelog: changelog:
sort: asc sort: asc
+80
View File
@@ -0,0 +1,80 @@
Contributing to PocketBase
======================================================================
Thanks for taking the time to improve PocketBase!
This document describes how to prepare a PR for a change in the main repository.
- [Prerequisites](#prerequisites)
- [Making changes in the Go code](#making-changes-in-the-go-code)
- [Making changes in the Admin UI](#making-changes-in-the-admin-ui)
## Prerequisites
- Go 1.18+ (for making changes in the Go code)
- Node 16+ (for making changes in the Admin UI)
If you haven't already, you can fork the main repository and clone your fork so that you can work locally:
```
git clone https://github.com/your_username/pocketbase.git
```
> It is recommended to create a new branch from master for each of your bugfixes and features.
> This is required if you are planning to submit multiple PRs in order to keep the changes separate for review until they eventually get merged.
## Making changes in the Go code
PocketBase is a Go package, which means that in order to run the project you'll have to create a Go `main` program that imports the package.
The repository already includes such program, located in `/examples/base`, that is also used for the prebuilt executables.
So, let's assume that you already done some changes in the PocketBase Go code and you want now to run them:
1. Navigate to `examples/base`
2. Run `go run main.go serve`
This will start a web server on `http://localhost:8090` with the embedded prebuilt Admin UI from `ui/dist`. And that's it!
**Before making a PR to the main repository, it is a good idea to:**
- Add unit/integration tests for your changes (we are using the standard `testing` go package).
To run the tests, you could execute (while in the root project directory):
```sh
go test ./...
# or using the Makefile
make test
```
- Run the linter - **golangci** ([see how to install](https://golangci-lint.run/usage/install/#local-installation)):
```sh
golangci-lint run -c ./golangci.yml ./...
# or using the Makefile
make lint
```
## Making changes in the Admin UI
PocketBase Admin UI is a single-page application (SPA) built with Svelte and Vite.
To start the Admin UI:
1. Navigate to the `ui` project directory
2. Run `npm install` to install the node dependencies
3. Start vite's dev server
```sh
npm run dev
```
You could open the browser and access the running Admin UI at `http://localhost:3000`.
Since the Admin UI is just a client-side application, you need to have the PocketBase backend server also running in the background (either manually running the `examples/base/main.go` or download a prebuilt executable).
> By default, the Admin UI is expecting the backend server to be started at `http://localhost:8090`, but you could change that by creating a new `ui/.env.development.local` file with `PB_BACKEND_URL = YOUR_ADDRESS` variable inside it.
Every change you make in the Admin UI should be automatically reflected in the browser at `http://localhost:3000` without reloading the page.
Once you are done with your changes, you have to build the Admin UI with `npm run build`, so that it can be embedded in the go package. And that's it - you can make your PR to the main PocketBase repository.
+8 -5
View File
@@ -19,7 +19,7 @@
**For documentation and examples, please visit https://pocketbase.io/docs.** **For documentation and examples, please visit https://pocketbase.io/docs.**
> ⚠️ Although the web API defintions are considered stable, > ⚠️ Although the web API definitions are considered stable,
> please keep in mind that PocketBase is still under active development > please keep in mind that PocketBase is still under active development
> and therefore full backward compatibility is not guaranteed before reaching v1.0.0. > and therefore full backward compatibility is not guaranteed before reaching v1.0.0.
@@ -29,7 +29,7 @@
The easiest way to interact with the API is to use one of the official SDK clients: The easiest way to interact with the API is to use one of the official SDK clients:
- **JavaScript - [pocketbase/js-sdk](https://github.com/pocketbase/js-sdk)** (_browser and node_) - **JavaScript - [pocketbase/js-sdk](https://github.com/pocketbase/js-sdk)** (_browser and node_)
- **Dart** - _soon_ - **Dart - [pocketbase/dart-sdk](https://github.com/pocketbase/dart-sdk)** (_web, mobile, desktop_)
## Overview ## Overview
@@ -91,10 +91,12 @@ Running/building the application is the same as for any other Go program, aka. j
**PocketBase embeds SQLite, but doesn't require CGO.** **PocketBase embeds SQLite, but doesn't require CGO.**
If CGO is enabled, it will use [mattn/go-sqlite3](https://pkg.go.dev/github.com/mattn/go-sqlite3) driver, otherwise - [modernc.org/sqlite](https://pkg.go.dev/modernc.org/sqlite). If CGO is enabled, it will use [mattn/go-sqlite3](https://pkg.go.dev/github.com/mattn/go-sqlite3) driver, otherwise - [modernc.org/sqlite](https://pkg.go.dev/modernc.org/sqlite). You can enable and disable CGO by setting the `CGO_ENABLED` enviroment variable to `1` or `0` respectively.
Enable CGO only if you really need to squeeze the read/write query performance at the expense of complicating cross compilation. Enable CGO only if you really need to squeeze the read/write query performance at the expense of complicating cross compilation.
To build the minimal standalone executable, like the prebuilt ones in the releases page, you can simply run `go build` inside the `examples/base` directory.
### Testing ### Testing
PocketBase comes with mixed bag of unit and integration tests. PocketBase comes with mixed bag of unit and integration tests.
@@ -118,8 +120,9 @@ PocketBase is free and open source project licensed under the [MIT License](LICE
You could help continuing its development by: You could help continuing its development by:
- [Suggest new features, report issues and fix bugs](https://github.com/pocketbase/pocketbase/issues) - [Contribute to the source code](CONTRIBUTING.md)
- [Suggest new features and report issues](https://github.com/pocketbase/pocketbase/issues)
- [Donate a small amount](https://pocketbase.io/support-us) - [Donate a small amount](https://pocketbase.io/support-us)
> Please also note that PocketBase was initially created to serve as a new backend for my other open source project - [Presentator](https://presentator.io) (see [#183](https://github.com/presentator/presentator/issues/183)), > Please note that PocketBase was initially created to serve as a new backend for my other open source project - [Presentator](https://presentator.io) (see [#183](https://github.com/presentator/presentator/issues/183)),
so all feature requests will be first aligned with what we need for Presentator v3. so all feature requests will be first aligned with what we need for Presentator v3.
+26 -18
View File
@@ -166,7 +166,7 @@ func (api *adminApi) create(c echo.Context) error {
// load request // load request
if err := c.Bind(form); err != nil { if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
event := &core.AdminCreateEvent{ event := &core.AdminCreateEvent{
@@ -174,20 +174,24 @@ func (api *adminApi) create(c echo.Context) error {
Admin: admin, Admin: admin,
} }
handlerErr := api.app.OnAdminBeforeCreateRequest().Trigger(event, func(e *core.AdminCreateEvent) error { // create the admin
// create the admin submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
if err := form.Submit(); err != nil { return func() error {
return rest.NewBadRequestError("Failed to create admin.", err) return api.app.OnAdminBeforeCreateRequest().Trigger(event, func(e *core.AdminCreateEvent) error {
} if err := next(); err != nil {
return rest.NewBadRequestError("Failed to create admin.", err)
}
return e.HttpContext.JSON(http.StatusOK, e.Admin) return e.HttpContext.JSON(http.StatusOK, e.Admin)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnAdminAfterCreateRequest().Trigger(event) api.app.OnAdminAfterCreateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
func (api *adminApi) update(c echo.Context) error { func (api *adminApi) update(c echo.Context) error {
@@ -205,7 +209,7 @@ func (api *adminApi) update(c echo.Context) error {
// load request // load request
if err := c.Bind(form); err != nil { if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
event := &core.AdminUpdateEvent{ event := &core.AdminUpdateEvent{
@@ -213,20 +217,24 @@ func (api *adminApi) update(c echo.Context) error {
Admin: admin, Admin: admin,
} }
handlerErr := api.app.OnAdminBeforeUpdateRequest().Trigger(event, func(e *core.AdminUpdateEvent) error { // update the admin
// update the admin submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
if err := form.Submit(); err != nil { return func() error {
return rest.NewBadRequestError("Failed to update admin.", err) return api.app.OnAdminBeforeUpdateRequest().Trigger(event, func(e *core.AdminUpdateEvent) error {
} if err := next(); err != nil {
return rest.NewBadRequestError("Failed to update admin.", err)
}
return e.HttpContext.JSON(http.StatusOK, e.Admin) return e.HttpContext.JSON(http.StatusOK, e.Admin)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnAdminAfterUpdateRequest().Trigger(event) api.app.OnAdminAfterUpdateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
func (api *adminApi) delete(c echo.Context) error { func (api *adminApi) delete(c echo.Context) error {
+24 -17
View File
@@ -4,11 +4,14 @@ import (
"net/http" "net/http"
"strings" "strings"
"testing" "testing"
"time"
"github.com/labstack/echo/v5" "github.com/labstack/echo/v5"
"github.com/pocketbase/dbx" "github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase/daos"
"github.com/pocketbase/pocketbase/models" "github.com/pocketbase/pocketbase/models"
"github.com/pocketbase/pocketbase/tests" "github.com/pocketbase/pocketbase/tests"
"github.com/pocketbase/pocketbase/tools/types"
) )
func TestAdminAuth(t *testing.T) { func TestAdminAuth(t *testing.T) {
@@ -92,6 +95,7 @@ func TestAdminRequestPasswordReset(t *testing.T) {
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/admins/request-password-reset", Url: "/api/admins/request-password-reset",
Body: strings.NewReader(`{"email":"missing@example.com"}`), Body: strings.NewReader(`{"email":"missing@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
}, },
{ {
@@ -99,22 +103,34 @@ func TestAdminRequestPasswordReset(t *testing.T) {
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/admins/request-password-reset", Url: "/api/admins/request-password-reset",
Body: strings.NewReader(`{"email":"test@example.com"}`), Body: strings.NewReader(`{"email":"test@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
// usually this events are fired but since the submit is ExpectedEvents: map[string]int{
// executed in a separate go routine they are fired async "OnModelBeforeUpdate": 1,
// ExpectedEvents: map[string]int{ "OnModelAfterUpdate": 1,
// "OnModelBeforeUpdate": 1, "OnMailerBeforeAdminResetPasswordSend": 1,
// "OnModelAfterUpdate": 1, "OnMailerAfterAdminResetPasswordSend": 1,
// "OnMailerBeforeUserResetPasswordSend:1": 1, },
// "OnMailerAfterUserResetPasswordSend:1": 1,
// },
}, },
{ {
Name: "existing admin (after already sent)", Name: "existing admin (after already sent)",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/admins/request-password-reset", Url: "/api/admins/request-password-reset",
Body: strings.NewReader(`{"email":"test@example.com"}`), Body: strings.NewReader(`{"email":"test@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
BeforeFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
// simulate recent password request
admin, err := app.Dao().FindAdminByEmail("test@example.com")
if err != nil {
t.Fatal(err)
}
admin.LastResetSentAt = types.NowDateTime()
dao := daos.New(app.Dao().DB()) // new dao to ignore hooks
if err := dao.Save(admin); err != nil {
t.Fatal(err)
}
},
}, },
} }
@@ -507,9 +523,6 @@ func TestAdminCreate(t *testing.T) {
}, },
ExpectedStatus: 400, ExpectedStatus: 400,
ExpectedContent: []string{`"data":{"email":{"code":"validation_required","message":"Cannot be blank."},"password":{"code":"validation_required","message":"Cannot be blank."}}`}, ExpectedContent: []string{`"data":{"email":{"code":"validation_required","message":"Cannot be blank."},"password":{"code":"validation_required","message":"Cannot be blank."}}`},
ExpectedEvents: map[string]int{
"OnAdminBeforeCreateRequest": 1,
},
}, },
{ {
Name: "authorized as admin + invalid data format", Name: "authorized as admin + invalid data format",
@@ -532,9 +545,6 @@ func TestAdminCreate(t *testing.T) {
}, },
ExpectedStatus: 400, ExpectedStatus: 400,
ExpectedContent: []string{`"data":{"avatar":{"code":"validation_max_less_equal_than_required","message":"Must be no greater than 9."},"email":{"code":"validation_admin_email_exists","message":"Admin email already exists."},"password":{"code":"validation_length_out_of_range","message":"The length must be between 10 and 100."},"passwordConfirm":{"code":"validation_values_mismatch","message":"Values don't match."}}`}, ExpectedContent: []string{`"data":{"avatar":{"code":"validation_max_less_equal_than_required","message":"Must be no greater than 9."},"email":{"code":"validation_admin_email_exists","message":"Admin email already exists."},"password":{"code":"validation_length_out_of_range","message":"The length must be between 10 and 100."},"passwordConfirm":{"code":"validation_values_mismatch","message":"Values don't match."}}`},
ExpectedEvents: map[string]int{
"OnAdminBeforeCreateRequest": 1,
},
}, },
{ {
Name: "authorized as admin + valid data", Name: "authorized as admin + valid data",
@@ -647,9 +657,6 @@ func TestAdminUpdate(t *testing.T) {
}, },
ExpectedStatus: 400, ExpectedStatus: 400,
ExpectedContent: []string{`"data":{"avatar":{"code":"validation_max_less_equal_than_required","message":"Must be no greater than 9."},"email":{"code":"validation_admin_email_exists","message":"Admin email already exists."},"password":{"code":"validation_length_out_of_range","message":"The length must be between 10 and 100."},"passwordConfirm":{"code":"validation_values_mismatch","message":"Values don't match."}}`}, ExpectedContent: []string{`"data":{"avatar":{"code":"validation_max_less_equal_than_required","message":"Must be no greater than 9."},"email":{"code":"validation_admin_email_exists","message":"Admin email already exists."},"password":{"code":"validation_length_out_of_range","message":"The length must be between 10 and 100."},"passwordConfirm":{"code":"validation_values_mismatch","message":"Values don't match."}}`},
ExpectedEvents: map[string]int{
"OnAdminBeforeUpdateRequest": 1,
},
}, },
{ {
Method: http.MethodPatch, Method: http.MethodPatch,
+1 -1
View File
@@ -68,7 +68,7 @@ func InitApi(app core.App) (*echo.Echo, error) {
// truly rare case; eg. client already disconnected // truly rare case; eg. client already disconnected
if cErr != nil && app.IsDebug() { if cErr != nil && app.IsDebug() {
log.Println(err) log.Println(cErr)
} }
} }
+28 -44
View File
@@ -1,8 +1,6 @@
package apis package apis
import ( import (
"errors"
"log"
"net/http" "net/http"
"github.com/labstack/echo/v5" "github.com/labstack/echo/v5"
@@ -76,9 +74,9 @@ func (api *collectionApi) create(c echo.Context) error {
form := forms.NewCollectionUpsert(api.app, collection) form := forms.NewCollectionUpsert(api.app, collection)
// read // load request
if err := c.Bind(form); err != nil { if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
event := &core.CollectionCreateEvent{ event := &core.CollectionCreateEvent{
@@ -86,20 +84,24 @@ func (api *collectionApi) create(c echo.Context) error {
Collection: collection, Collection: collection,
} }
handlerErr := api.app.OnCollectionBeforeCreateRequest().Trigger(event, func(e *core.CollectionCreateEvent) error { // create the collection
// submit submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
if err := form.Submit(); err != nil { return func() error {
return rest.NewBadRequestError("Failed to create the collection.", err) return api.app.OnCollectionBeforeCreateRequest().Trigger(event, func(e *core.CollectionCreateEvent) error {
} if err := next(); err != nil {
return rest.NewBadRequestError("Failed to create the collection.", err)
}
return e.HttpContext.JSON(http.StatusOK, e.Collection) return e.HttpContext.JSON(http.StatusOK, e.Collection)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnCollectionAfterCreateRequest().Trigger(event) api.app.OnCollectionAfterCreateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
func (api *collectionApi) update(c echo.Context) error { func (api *collectionApi) update(c echo.Context) error {
@@ -110,9 +112,9 @@ func (api *collectionApi) update(c echo.Context) error {
form := forms.NewCollectionUpsert(api.app, collection) form := forms.NewCollectionUpsert(api.app, collection)
// read // load request
if err := c.Bind(form); err != nil { if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
event := &core.CollectionUpdateEvent{ event := &core.CollectionUpdateEvent{
@@ -120,20 +122,24 @@ func (api *collectionApi) update(c echo.Context) error {
Collection: collection, Collection: collection,
} }
handlerErr := api.app.OnCollectionBeforeUpdateRequest().Trigger(event, func(e *core.CollectionUpdateEvent) error { // update the collection
// submit submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
if err := form.Submit(); err != nil { return func() error {
return rest.NewBadRequestError("Failed to update the collection.", err) return api.app.OnCollectionBeforeUpdateRequest().Trigger(event, func(e *core.CollectionUpdateEvent) error {
} if err := next(); err != nil {
return rest.NewBadRequestError("Failed to update the collection.", err)
}
return e.HttpContext.JSON(http.StatusOK, e.Collection) return e.HttpContext.JSON(http.StatusOK, e.Collection)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnCollectionAfterUpdateRequest().Trigger(event) api.app.OnCollectionAfterUpdateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
func (api *collectionApi) delete(c echo.Context) error { func (api *collectionApi) delete(c echo.Context) error {
@@ -152,13 +158,6 @@ func (api *collectionApi) delete(c echo.Context) error {
return rest.NewBadRequestError("Failed to delete collection. Make sure that the collection is not referenced by other collections.", err) return rest.NewBadRequestError("Failed to delete collection. Make sure that the collection is not referenced by other collections.", err)
} }
// try to delete the collection files
if err := api.deleteCollectionFiles(e.Collection); err != nil && api.app.IsDebug() {
// non critical error - only log for debug
// (usually could happen because of S3 api limits)
log.Println(err)
}
return e.HttpContext.NoContent(http.StatusNoContent) return e.HttpContext.NoContent(http.StatusNoContent)
}) })
@@ -168,18 +167,3 @@ func (api *collectionApi) delete(c echo.Context) error {
return handlerErr return handlerErr
} }
func (api *collectionApi) deleteCollectionFiles(collection *models.Collection) error {
fs, err := api.app.NewFilesystem()
if err != nil {
return err
}
defer fs.Close()
failed := fs.DeletePrefix(collection.BaseFilesPath())
if len(failed) > 0 {
return errors.New("Failed to delete all record files.")
}
return nil
}
-9
View File
@@ -297,9 +297,6 @@ func TestCollectionCreate(t *testing.T) {
`"name":{"code":"validation_required"`, `"name":{"code":"validation_required"`,
`"schema":{"code":"validation_required"`, `"schema":{"code":"validation_required"`,
}, },
ExpectedEvents: map[string]int{
"OnCollectionBeforeCreateRequest": 1,
},
}, },
{ {
Name: "authorized as admin + invalid data (eg. existing name)", Name: "authorized as admin + invalid data (eg. existing name)",
@@ -315,9 +312,6 @@ func TestCollectionCreate(t *testing.T) {
`"name":{"code":"validation_collection_name_exists"`, `"name":{"code":"validation_collection_name_exists"`,
`"schema":{"0":{"name":{"code":"validation_required"`, `"schema":{"0":{"name":{"code":"validation_required"`,
}, },
ExpectedEvents: map[string]int{
"OnCollectionBeforeCreateRequest": 1,
},
}, },
{ {
Name: "authorized as admin + valid data", Name: "authorized as admin + valid data",
@@ -399,9 +393,6 @@ func TestCollectionUpdate(t *testing.T) {
`"data":{`, `"data":{`,
`"name":{"code":"validation_collection_name_exists"`, `"name":{"code":"validation_collection_name_exists"`,
}, },
ExpectedEvents: map[string]int{
"OnCollectionBeforeUpdateRequest": 1,
},
}, },
{ {
Name: "authorized as admin + valid data", Name: "authorized as admin + valid data",
+1 -1
View File
@@ -77,7 +77,7 @@ func RequireAdminAuth() echo.MiddlewareFunc {
} }
} }
// RequireAdminAuthIfAny middleware requires a request to have // RequireAdminAuthOnlyIfAny middleware requires a request to have
// a valid admin Authorization header set (aka. `Authorization: Admin ...`) // a valid admin Authorization header set (aka. `Authorization: Admin ...`)
// ONLY if the application has at least 1 existing Admin model. // ONLY if the application has at least 1 existing Admin model.
func RequireAdminAuthOnlyIfAny(app core.App) echo.MiddlewareFunc { func RequireAdminAuthOnlyIfAny(app core.App) echo.MiddlewareFunc {
+32 -21
View File
@@ -58,6 +58,10 @@ func (api *realtimeApi) connect(c echo.Context) error {
return err return err
} }
if api.app.IsDebug() {
log.Printf("Realtime connection establisehd: %s\n", client.Id())
}
// signalize established connection (aka. fire "connect" message) // signalize established connection (aka. fire "connect" message)
fmt.Fprint(c.Response(), "id:"+client.Id()+"\n") fmt.Fprint(c.Response(), "id:"+client.Id()+"\n")
fmt.Fprint(c.Response(), "event:PB_CONNECT\n") fmt.Fprint(c.Response(), "event:PB_CONNECT\n")
@@ -159,8 +163,8 @@ func (api *realtimeApi) bindEvents() {
adminTable := (&models.Admin{}).TableName() adminTable := (&models.Admin{}).TableName()
// update user/admin auth state // update user/admin auth state
api.app.OnModelAfterUpdate().Add(func(data *core.ModelEvent) error { api.app.OnModelAfterUpdate().Add(func(e *core.ModelEvent) error {
modelTable := data.Model.TableName() modelTable := e.Model.TableName()
var contextKey string var contextKey string
switch modelTable { switch modelTable {
@@ -174,8 +178,8 @@ func (api *realtimeApi) bindEvents() {
for _, client := range api.app.SubscriptionsBroker().Clients() { for _, client := range api.app.SubscriptionsBroker().Clients() {
model, _ := client.Get(contextKey).(models.Model) model, _ := client.Get(contextKey).(models.Model)
if model != nil && model.GetId() == data.Model.GetId() { if model != nil && model.GetId() == e.Model.GetId() {
client.Set(contextKey, data.Model) client.Set(contextKey, e.Model)
} }
} }
@@ -183,8 +187,8 @@ func (api *realtimeApi) bindEvents() {
}) })
// remove user/admin client(s) // remove user/admin client(s)
api.app.OnModelAfterDelete().Add(func(data *core.ModelEvent) error { api.app.OnModelAfterDelete().Add(func(e *core.ModelEvent) error {
modelTable := data.Model.TableName() modelTable := e.Model.TableName()
var contextKey string var contextKey string
switch modelTable { switch modelTable {
@@ -198,7 +202,7 @@ func (api *realtimeApi) bindEvents() {
for _, client := range api.app.SubscriptionsBroker().Clients() { for _, client := range api.app.SubscriptionsBroker().Clients() {
model, _ := client.Get(contextKey).(models.Model) model, _ := client.Get(contextKey).(models.Model)
if model != nil && model.GetId() == data.Model.GetId() { if model != nil && model.GetId() == e.Model.GetId() {
api.app.SubscriptionsBroker().Unregister(client.Id()) api.app.SubscriptionsBroker().Unregister(client.Id())
} }
} }
@@ -206,18 +210,20 @@ func (api *realtimeApi) bindEvents() {
return nil return nil
}) })
api.app.OnRecordAfterCreateRequest().Add(func(data *core.RecordCreateEvent) error { api.app.OnRecordAfterCreateRequest().Add(func(e *core.RecordCreateEvent) error {
api.broadcastRecord("create", data.Record) api.broadcastRecord("create", e.Record)
return nil return nil
}) })
api.app.OnRecordAfterUpdateRequest().Add(func(data *core.RecordUpdateEvent) error { api.app.OnRecordAfterUpdateRequest().Add(func(e *core.RecordUpdateEvent) error {
api.broadcastRecord("update", data.Record) api.broadcastRecord("update", e.Record)
return nil return nil
}) })
api.app.OnRecordAfterDeleteRequest().Add(func(data *core.RecordDeleteEvent) error { api.app.OnModelBeforeDelete().Add(func(e *core.ModelEvent) error {
api.broadcastRecord("delete", data.Record) if record, ok := e.Model.(*models.Record); ok {
api.broadcastRecord("delete", record)
}
return nil return nil
}) })
} }
@@ -286,19 +292,24 @@ func (api *realtimeApi) broadcastRecord(action string, record *models.Record) er
return nil // no subscribers return nil // no subscribers
} }
// remove the expand from the broadcasted record because we don't
// know if the clients have access to view the expanded records
cleanRecord := *record
cleanRecord.SetExpand(nil)
subscriptionRuleMap := map[string]*string{ subscriptionRuleMap := map[string]*string{
(collection.Name + "/" + record.Id): collection.ViewRule, (collection.Name + "/" + cleanRecord.Id): collection.ViewRule,
(collection.Id + "/" + record.Id): collection.ViewRule, (collection.Id + "/" + cleanRecord.Id): collection.ViewRule,
collection.Name: collection.ListRule, collection.Name: collection.ListRule,
collection.Id: collection.ListRule, collection.Id: collection.ListRule,
} }
recordData := &recordData{ data := &recordData{
Action: action, Action: action,
Record: record, Record: &cleanRecord,
} }
serializedData, err := json.Marshal(recordData) serializedData, err := json.Marshal(data)
if err != nil { if err != nil {
if api.app.IsDebug() { if api.app.IsDebug() {
log.Println(err) log.Println(err)
@@ -312,7 +323,7 @@ func (api *realtimeApi) broadcastRecord(action string, record *models.Record) er
continue continue
} }
if !api.canAccessRecord(client, record, rule) { if !api.canAccessRecord(client, data.Record, rule) {
continue continue
} }
+82 -60
View File
@@ -52,10 +52,9 @@ func (api *recordApi) list(c echo.Context) error {
return rest.NewForbiddenError("Only admins can perform this action.", nil) return rest.NewForbiddenError("Only admins can perform this action.", nil)
} }
// forbid user/guest defined non-relational joins (aka. @collection.*) // forbid users and guests to query special filter/sort fields
queryStr := c.QueryString() if err := api.checkForForbiddenQueryFields(c); err != nil {
if admin == nil && queryStr != "" && (strings.Contains(queryStr, "@collection") || strings.Contains(queryStr, "%40collection")) { return err
return rest.NewForbiddenError("Only admins can filter by @collection.", nil)
} }
requestData := api.exportRequestData(c) requestData := api.exportRequestData(c)
@@ -63,14 +62,15 @@ func (api *recordApi) list(c echo.Context) error {
fieldsResolver := resolvers.NewRecordFieldResolver(api.app.Dao(), collection, requestData) fieldsResolver := resolvers.NewRecordFieldResolver(api.app.Dao(), collection, requestData)
searchProvider := search.NewProvider(fieldsResolver). searchProvider := search.NewProvider(fieldsResolver).
Query(api.app.Dao().RecordQuery(collection)) Query(api.app.Dao().RecordQuery(collection)).
CountColumn(fmt.Sprintf("%s.id", api.app.Dao().DB().QuoteSimpleColumnName(collection.Name)))
if admin == nil && collection.ListRule != nil { if admin == nil && collection.ListRule != nil {
searchProvider.AddFilter(search.FilterData(*collection.ListRule)) searchProvider.AddFilter(search.FilterData(*collection.ListRule))
} }
var rawRecords = []dbx.NullStringMap{} var rawRecords = []dbx.NullStringMap{}
result, err := searchProvider.ParseAndExec(queryStr, &rawRecords) result, err := searchProvider.ParseAndExec(c.QueryString(), &rawRecords)
if err != nil { if err != nil {
return rest.NewBadRequestError("Invalid filter parameters.", err) return rest.NewBadRequestError("Invalid filter parameters.", err)
} }
@@ -80,13 +80,13 @@ func (api *recordApi) list(c echo.Context) error {
// expand records relations // expand records relations
expands := strings.Split(c.QueryParam(expandQueryParam), ",") expands := strings.Split(c.QueryParam(expandQueryParam), ",")
if len(expands) > 0 { if len(expands) > 0 {
expandErr := api.app.Dao().ExpandRecords( failed := api.app.Dao().ExpandRecords(
records, records,
expands, expands,
api.expandFunc(c, requestData), api.expandFunc(c, requestData),
) )
if expandErr != nil && api.app.IsDebug() { if len(failed) > 0 && api.app.IsDebug() {
log.Println("Failed to expand relations: ", expandErr) log.Println("Failed to expand relations: ", failed)
} }
} }
@@ -141,16 +141,14 @@ func (api *recordApi) view(c echo.Context) error {
return rest.NewNotFoundError("", fetchErr) return rest.NewNotFoundError("", fetchErr)
} }
expands := strings.Split(c.QueryParam(expandQueryParam), ",") // expand record relations
if len(expands) > 0 { failed := api.app.Dao().ExpandRecord(
expandErr := api.app.Dao().ExpandRecord( record,
record, strings.Split(c.QueryParam(expandQueryParam), ","),
expands, api.expandFunc(c, requestData),
api.expandFunc(c, requestData), )
) if len(failed) > 0 && api.app.IsDebug() {
if expandErr != nil && api.app.IsDebug() { log.Println("Failed to expand relations: ", failed)
log.Println("Failed to expand relations: ", expandErr)
}
} }
event := &core.RecordViewEvent{ event := &core.RecordViewEvent{
@@ -193,7 +191,7 @@ func (api *recordApi) create(c echo.Context) error {
testRecord := models.NewRecord(collection) testRecord := models.NewRecord(collection)
testForm := forms.NewRecordUpsert(api.app, testRecord) testForm := forms.NewRecordUpsert(api.app, testRecord)
if err := testForm.LoadData(c.Request()); err != nil { if err := testForm.LoadData(c.Request()); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
testErr := testForm.DrySubmit(func(txDao *daos.Dao) error { testErr := testForm.DrySubmit(func(txDao *daos.Dao) error {
@@ -210,7 +208,7 @@ func (api *recordApi) create(c echo.Context) error {
// load request // load request
if err := form.LoadData(c.Request()); err != nil { if err := form.LoadData(c.Request()); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
event := &core.RecordCreateEvent{ event := &core.RecordCreateEvent{
@@ -218,20 +216,34 @@ func (api *recordApi) create(c echo.Context) error {
Record: record, Record: record,
} }
handlerErr := api.app.OnRecordBeforeCreateRequest().Trigger(event, func(e *core.RecordCreateEvent) error { // create the record
// create the record submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
if err := form.Submit(); err != nil { return func() error {
return rest.NewBadRequestError("Failed to create record.", err) return api.app.OnRecordBeforeCreateRequest().Trigger(event, func(e *core.RecordCreateEvent) error {
} if err := next(); err != nil {
return rest.NewBadRequestError("Failed to create record.", err)
}
return e.HttpContext.JSON(http.StatusOK, e.Record) // expand record relations
failed := api.app.Dao().ExpandRecord(
e.Record,
strings.Split(e.HttpContext.QueryParam(expandQueryParam), ","),
api.expandFunc(e.HttpContext, requestData),
)
if len(failed) > 0 && api.app.IsDebug() {
log.Println("Failed to expand relations: ", failed)
}
return e.HttpContext.JSON(http.StatusOK, e.Record)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnRecordAfterCreateRequest().Trigger(event) api.app.OnRecordAfterCreateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
func (api *recordApi) update(c echo.Context) error { func (api *recordApi) update(c echo.Context) error {
@@ -276,7 +288,7 @@ func (api *recordApi) update(c echo.Context) error {
// load request // load request
if err := form.LoadData(c.Request()); err != nil { if err := form.LoadData(c.Request()); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
event := &core.RecordUpdateEvent{ event := &core.RecordUpdateEvent{
@@ -284,20 +296,34 @@ func (api *recordApi) update(c echo.Context) error {
Record: record, Record: record,
} }
handlerErr := api.app.OnRecordBeforeUpdateRequest().Trigger(event, func(e *core.RecordUpdateEvent) error { // update the record
// update the record submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
if err := form.Submit(); err != nil { return func() error {
return rest.NewBadRequestError("Failed to update record.", err) return api.app.OnRecordBeforeUpdateRequest().Trigger(event, func(e *core.RecordUpdateEvent) error {
} if err := next(); err != nil {
return rest.NewBadRequestError("Failed to update record.", err)
}
return e.HttpContext.JSON(http.StatusOK, e.Record) // expand record relations
failed := api.app.Dao().ExpandRecord(
e.Record,
strings.Split(e.HttpContext.QueryParam(expandQueryParam), ","),
api.expandFunc(e.HttpContext, requestData),
)
if len(failed) > 0 && api.app.IsDebug() {
log.Println("Failed to expand relations: ", failed)
}
return e.HttpContext.JSON(http.StatusOK, e.Record)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnRecordAfterUpdateRequest().Trigger(event) api.app.OnRecordAfterUpdateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
func (api *recordApi) delete(c echo.Context) error { func (api *recordApi) delete(c echo.Context) error {
@@ -348,13 +374,6 @@ func (api *recordApi) delete(c echo.Context) error {
return rest.NewBadRequestError("Failed to delete record. Make sure that the record is not part of a required relation reference.", err) return rest.NewBadRequestError("Failed to delete record. Make sure that the record is not part of a required relation reference.", err)
} }
// try to delete the record files
if err := api.deleteRecordFiles(e.Record); err != nil && api.app.IsDebug() {
// non critical error - only log for debug
// (usually could happen due to S3 api limits)
log.Println(err)
}
return e.HttpContext.NoContent(http.StatusNoContent) return e.HttpContext.NoContent(http.StatusNoContent)
}) })
@@ -365,21 +384,6 @@ func (api *recordApi) delete(c echo.Context) error {
return handlerErr return handlerErr
} }
func (api *recordApi) deleteRecordFiles(record *models.Record) error {
fs, err := api.app.NewFilesystem()
if err != nil {
return err
}
defer fs.Close()
failed := fs.DeletePrefix(record.BaseFilesPath())
if len(failed) > 0 {
return fmt.Errorf("Failed to delete %d record files.", len(failed))
}
return nil
}
func (api *recordApi) exportRequestData(c echo.Context) map[string]any { func (api *recordApi) exportRequestData(c echo.Context) map[string]any {
result := map[string]any{} result := map[string]any{}
queryParams := map[string]any{} queryParams := map[string]any{}
@@ -403,6 +407,24 @@ func (api *recordApi) exportRequestData(c echo.Context) map[string]any {
return result return result
} }
func (api *recordApi) checkForForbiddenQueryFields(c echo.Context) error {
admin, _ := c.Get(ContextAdminKey).(*models.Admin)
if admin != nil {
return nil // admins are allowed to query everything
}
decodedQuery := c.QueryParam(search.FilterQueryParam) + c.QueryParam(search.SortQueryParam)
forbiddenFields := []string{"@collection.", "@request."}
for _, field := range forbiddenFields {
if strings.Contains(decodedQuery, field) {
return rest.NewForbiddenError("Only admins can filter by @collection and @request query params", nil)
}
}
return nil
}
func (api *recordApi) expandFunc(c echo.Context, requestData map[string]any) daos.ExpandFetchFunc { func (api *recordApi) expandFunc(c echo.Context, requestData map[string]any) daos.ExpandFetchFunc {
admin, _ := c.Get(ContextAdminKey).(*models.Admin) admin, _ := c.Get(ContextAdminKey).(*models.Admin)
+114 -32
View File
@@ -127,7 +127,7 @@ func TestRecordsList(t *testing.T) {
ExpectedContent: []string{`"data":{}`}, ExpectedContent: []string{`"data":{}`},
}, },
{ {
Name: "expand", Name: "expand relations",
Method: http.MethodGet, Method: http.MethodGet,
Url: "/api/collections/demo2/records?expand=manyrels,onerel&perPage=2&sort=created", Url: "/api/collections/demo2/records?expand=manyrels,onerel&perPage=2&sort=created",
RequestHeaders: map[string]string{ RequestHeaders: map[string]string{
@@ -139,17 +139,17 @@ func TestRecordsList(t *testing.T) {
`"perPage":2`, `"perPage":2`,
`"totalItems":2`, `"totalItems":2`,
`"items":[{`, `"items":[{`,
`"@expand":{`,
`"id":"577bd676-aacb-4072-b7da-99d00ee210a4"`, `"id":"577bd676-aacb-4072-b7da-99d00ee210a4"`,
`"id":"848a1dea-5ddd-42d6-a00d-030547bffcfe"`, `"id":"848a1dea-5ddd-42d6-a00d-030547bffcfe"`,
`"manyrels":[{`, `"manyrels":[{`,
`"manyrels":[]`, `"manyrels":[]`,
`"rel_cascade":"`, `"cascaderel":"`,
`"rel_cascade":null`,
`"onerel":{"@collectionId":"3f2888f8-075d-49fe-9d09-ea7e951000dc","@collectionName":"demo",`, `"onerel":{"@collectionId":"3f2888f8-075d-49fe-9d09-ea7e951000dc","@collectionName":"demo",`,
`"json":[1,2,3]`, `"json":[1,2,3]`,
`"select":["a","b"]`, `"select":["a","b"]`,
`"select":[]`, `"select":[]`,
`"user":null`, `"user":""`,
`"bool":true`, `"bool":true`,
`"number":456`, `"number":456`,
`"user":"97cc3d3d-6ba2-383f-b42a-7bc84d27410c"`, `"user":"97cc3d3d-6ba2-383f-b42a-7bc84d27410c"`,
@@ -357,6 +357,7 @@ func TestRecordView(t *testing.T) {
`"@collectionId":"2c1010aa-b8fe-41d9-a980-99534ca8a167"`, `"@collectionId":"2c1010aa-b8fe-41d9-a980-99534ca8a167"`,
`"@collectionName":"demo2"`, `"@collectionName":"demo2"`,
`"id":"63c2ab80-84ab-4057-a592-4604a731f78f"`, `"id":"63c2ab80-84ab-4057-a592-4604a731f78f"`,
`"@expand":{`,
`"manyrels":[{`, `"manyrels":[{`,
`"onerel":{`, `"onerel":{`,
`"@collectionId":"3f2888f8-075d-49fe-9d09-ea7e951000dc"`, `"@collectionId":"3f2888f8-075d-49fe-9d09-ea7e951000dc"`,
@@ -455,11 +456,13 @@ func TestRecordDelete(t *testing.T) {
"OnRecordAfterDeleteRequest": 1, "OnRecordAfterDeleteRequest": 1,
"OnModelAfterUpdate": 1, // nullify related record "OnModelAfterUpdate": 1, // nullify related record
"OnModelBeforeUpdate": 1, // nullify related record "OnModelBeforeUpdate": 1, // nullify related record
"OnModelBeforeDelete": 2, // +1 cascade delete related record "OnModelBeforeDelete": 3, // +2 cascade delete related records
"OnModelAfterDelete": 2, // +1 cascade delete related record "OnModelAfterDelete": 3, // +2 cascade delete related records
}, },
AfterFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) { AfterFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
ensureDeletedFiles(app, "3f2888f8-075d-49fe-9d09-ea7e951000dc", "577bd676-aacb-4072-b7da-99d00ee210a4") ensureDeletedFiles(app, "3f2888f8-075d-49fe-9d09-ea7e951000dc", "577bd676-aacb-4072-b7da-99d00ee210a4")
ensureDeletedFiles(app, "2c1010aa-b8fe-41d9-a980-99534ca8a167", "94568ca2-0bee-49d7-b749-06cb97956fd9")
ensureDeletedFiles(app, "2c1010aa-b8fe-41d9-a980-99534ca8a167", "63c2ab80-84ab-4057-a592-4604a731f78f")
}, },
}, },
{ {
@@ -475,11 +478,13 @@ func TestRecordDelete(t *testing.T) {
"OnRecordAfterDeleteRequest": 1, "OnRecordAfterDeleteRequest": 1,
"OnModelAfterUpdate": 1, // nullify related record "OnModelAfterUpdate": 1, // nullify related record
"OnModelBeforeUpdate": 1, // nullify related record "OnModelBeforeUpdate": 1, // nullify related record
"OnModelBeforeDelete": 2, // +1 cascade delete related record "OnModelBeforeDelete": 3, // +2 cascade delete related records
"OnModelAfterDelete": 2, // +1 cascade delete related record "OnModelAfterDelete": 3, // +2 cascade delete related records
}, },
AfterFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) { AfterFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
ensureDeletedFiles(app, "3f2888f8-075d-49fe-9d09-ea7e951000dc", "577bd676-aacb-4072-b7da-99d00ee210a4") ensureDeletedFiles(app, "3f2888f8-075d-49fe-9d09-ea7e951000dc", "577bd676-aacb-4072-b7da-99d00ee210a4")
ensureDeletedFiles(app, "2c1010aa-b8fe-41d9-a980-99534ca8a167", "94568ca2-0bee-49d7-b749-06cb97956fd9")
ensureDeletedFiles(app, "2c1010aa-b8fe-41d9-a980-99534ca8a167", "63c2ab80-84ab-4057-a592-4604a731f78f")
}, },
}, },
{ {
@@ -554,8 +559,8 @@ func TestRecordDelete(t *testing.T) {
"OnRecordAfterDeleteRequest": 1, "OnRecordAfterDeleteRequest": 1,
"OnModelBeforeUpdate": 1, "OnModelBeforeUpdate": 1,
"OnModelAfterUpdate": 1, "OnModelAfterUpdate": 1,
"OnModelBeforeDelete": 2, "OnModelBeforeDelete": 3,
"OnModelAfterDelete": 2, "OnModelAfterDelete": 3,
}, },
AfterFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) { AfterFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
recId := "63c2ab80-84ab-4057-a592-4604a731f78f" recId := "63c2ab80-84ab-4057-a592-4604a731f78f"
@@ -565,6 +570,7 @@ func TestRecordDelete(t *testing.T) {
t.Errorf("Expected record %s to be cascade deleted", recId) t.Errorf("Expected record %s to be cascade deleted", recId)
} }
ensureDeletedFiles(app, "3f2888f8-075d-49fe-9d09-ea7e951000dc", "577bd676-aacb-4072-b7da-99d00ee210a4") ensureDeletedFiles(app, "3f2888f8-075d-49fe-9d09-ea7e951000dc", "577bd676-aacb-4072-b7da-99d00ee210a4")
ensureDeletedFiles(app, "2c1010aa-b8fe-41d9-a980-99534ca8a167", "94568ca2-0bee-49d7-b749-06cb97956fd9")
ensureDeletedFiles(app, "2c1010aa-b8fe-41d9-a980-99534ca8a167", "63c2ab80-84ab-4057-a592-4604a731f78f") ensureDeletedFiles(app, "2c1010aa-b8fe-41d9-a980-99534ca8a167", "63c2ab80-84ab-4057-a592-4604a731f78f")
}, },
}, },
@@ -646,11 +652,12 @@ func TestRecordCreate(t *testing.T) {
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/collections/demo2/records", Url: "/api/collections/demo2/records",
Body: strings.NewReader(`{ Body: strings.NewReader(`{
"rel_cascade": "577bd676-aacb-4072-b7da-99d00ee210a4", "cascaderel": "577bd676-aacb-4072-b7da-99d00ee210a4",
"onerel": "577bd676-aacb-4072-b7da-99d00ee210a4", "onerel": "577bd676-aacb-4072-b7da-99d00ee210a4",
"manyrels": ["577bd676-aacb-4072-b7da-99d00ee210a4"], "manyrels": ["577bd676-aacb-4072-b7da-99d00ee210a4"],
"text": "test123", "text": "test123",
"bool": "false" "bool": "false",
"number": 1
}`), }`),
RequestHeaders: map[string]string{ RequestHeaders: map[string]string{
// test@example.com // test@example.com
@@ -660,15 +667,17 @@ func TestRecordCreate(t *testing.T) {
ExpectedContent: []string{`"data":{}`}, ExpectedContent: []string{`"data":{}`},
}, },
{ {
Name: "user submit in restricted collection (rule pass check)", Name: "user submit in restricted collection (rule pass check) + expand relations",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/collections/demo2/records", Url: "/api/collections/demo2/records?expand=missing,onerel,manyrels,selfrel",
Body: strings.NewReader(`{ Body: strings.NewReader(`{
"rel_cascade":"577bd676-aacb-4072-b7da-99d00ee210a4", "cascaderel":"577bd676-aacb-4072-b7da-99d00ee210a4",
"onerel":"577bd676-aacb-4072-b7da-99d00ee210a4", "onerel":"577bd676-aacb-4072-b7da-99d00ee210a4",
"manyrels":["577bd676-aacb-4072-b7da-99d00ee210a4"], "manyrels":["577bd676-aacb-4072-b7da-99d00ee210a4"],
"selfrel":"63c2ab80-84ab-4057-a592-4604a731f78f",
"text":"test123", "text":"test123",
"bool":true "bool":true,
"number":1
}`), }`),
RequestHeaders: map[string]string{ RequestHeaders: map[string]string{
// test3@example.com // test3@example.com
@@ -677,11 +686,21 @@ func TestRecordCreate(t *testing.T) {
ExpectedStatus: 200, ExpectedStatus: 200,
ExpectedContent: []string{ ExpectedContent: []string{
`"id":`, `"id":`,
`"rel_cascade":"577bd676-aacb-4072-b7da-99d00ee210a4"`, `"cascaderel":"577bd676-aacb-4072-b7da-99d00ee210a4"`,
`"onerel":"577bd676-aacb-4072-b7da-99d00ee210a4"`, `"onerel":"577bd676-aacb-4072-b7da-99d00ee210a4"`,
`"manyrels":["577bd676-aacb-4072-b7da-99d00ee210a4"]`, `"manyrels":["577bd676-aacb-4072-b7da-99d00ee210a4"]`,
`"selfrel":"63c2ab80-84ab-4057-a592-4604a731f78f"`,
`"text":"test123"`, `"text":"test123"`,
`"bool":true`, `"bool":true`,
`"number":1`,
`"@expand":{`,
`"selfrel":{`,
`"id":"63c2ab80-84ab-4057-a592-4604a731f78f"`,
},
NotExpectedContent: []string{
// user don't have access to view the below expands
`"manyrels":[{`,
`"onerel":{`,
}, },
ExpectedEvents: map[string]int{ ExpectedEvents: map[string]int{
"OnRecordBeforeCreateRequest": 1, "OnRecordBeforeCreateRequest": 1,
@@ -691,15 +710,17 @@ func TestRecordCreate(t *testing.T) {
}, },
}, },
{ {
Name: "admin submit in restricted collection (rule skip check)", Name: "admin submit in restricted collection (rule skip check) + expand relations",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/collections/demo2/records", Url: "/api/collections/demo2/records?expand=missing,onerel,manyrels,selfrel",
Body: strings.NewReader(`{ Body: strings.NewReader(`{
"rel_cascade":"577bd676-aacb-4072-b7da-99d00ee210a4", "cascaderel": "577bd676-aacb-4072-b7da-99d00ee210a4",
"onerel":"577bd676-aacb-4072-b7da-99d00ee210a4", "onerel": "577bd676-aacb-4072-b7da-99d00ee210a4",
"manyrels":["577bd676-aacb-4072-b7da-99d00ee210a4"], "manyrels":["577bd676-aacb-4072-b7da-99d00ee210a4"],
"text":"test123", "selfrel":"94568ca2-0bee-49d7-b749-06cb97956fd9",
"bool":false "text": "test123",
"bool": false,
"number": 1
}`), }`),
RequestHeaders: map[string]string{ RequestHeaders: map[string]string{
"Authorization": "Admin eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJiNGE5N2NjLTNmODMtNGQwMS1hMjZiLTNkNzdiYzg0MmQzYyIsInR5cGUiOiJhZG1pbiIsImV4cCI6MTg3MzQ2Mjc5Mn0.AtRtXR6FHBrCUGkj5OffhmxLbSZaQ4L_Qgw4gfoHyfo", "Authorization": "Admin eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJiNGE5N2NjLTNmODMtNGQwMS1hMjZiLTNkNzdiYzg0MmQzYyIsInR5cGUiOiJhZG1pbiIsImV4cCI6MTg3MzQ2Mjc5Mn0.AtRtXR6FHBrCUGkj5OffhmxLbSZaQ4L_Qgw4gfoHyfo",
@@ -707,11 +728,20 @@ func TestRecordCreate(t *testing.T) {
ExpectedStatus: 200, ExpectedStatus: 200,
ExpectedContent: []string{ ExpectedContent: []string{
`"id":`, `"id":`,
`"rel_cascade":"577bd676-aacb-4072-b7da-99d00ee210a4"`, `"cascaderel":"577bd676-aacb-4072-b7da-99d00ee210a4"`,
`"onerel":"577bd676-aacb-4072-b7da-99d00ee210a4"`, `"onerel":"577bd676-aacb-4072-b7da-99d00ee210a4"`,
`"manyrels":["577bd676-aacb-4072-b7da-99d00ee210a4"]`, `"manyrels":["577bd676-aacb-4072-b7da-99d00ee210a4"]`,
`"text":"test123"`, `"text":"test123"`,
`"bool":false`, `"bool":false`,
`"number":1`,
`"@expand":{`,
`"manyrels":[{`,
`"onerel":{`,
`"selfrel":{`,
`"@collectionId":"3f2888f8-075d-49fe-9d09-ea7e951000dc"`,
`"@collectionName":"demo"`,
`"id":"577bd676-aacb-4072-b7da-99d00ee210a4"`,
`"id":"94568ca2-0bee-49d7-b749-06cb97956fd9"`,
}, },
ExpectedEvents: map[string]int{ ExpectedEvents: map[string]int{
"OnRecordBeforeCreateRequest": 1, "OnRecordBeforeCreateRequest": 1,
@@ -835,12 +865,13 @@ func TestRecordUpdate(t *testing.T) {
ExpectedContent: []string{`"data":{}`}, ExpectedContent: []string{`"data":{}`},
}, },
{ {
Name: "user submit in restricted collection (rule pass check)", Name: "user submit in restricted collection (rule pass check) + expand relations",
Method: http.MethodPatch, Method: http.MethodPatch,
Url: "/api/collections/demo2/records/63c2ab80-84ab-4057-a592-4604a731f78f", Url: "/api/collections/demo2/records/63c2ab80-84ab-4057-a592-4604a731f78f?expand=missing,onerel,manyrels,selfrel",
Body: strings.NewReader(`{ Body: strings.NewReader(`{
"text":"test_new", "text":"test_new",
"bool":false "selfrel":"63c2ab80-84ab-4057-a592-4604a731f78f",
"bool":true
}`), }`),
RequestHeaders: map[string]string{ RequestHeaders: map[string]string{
// test3@example.com // test3@example.com
@@ -849,11 +880,19 @@ func TestRecordUpdate(t *testing.T) {
ExpectedStatus: 200, ExpectedStatus: 200,
ExpectedContent: []string{ ExpectedContent: []string{
`"id":"63c2ab80-84ab-4057-a592-4604a731f78f"`, `"id":"63c2ab80-84ab-4057-a592-4604a731f78f"`,
`"rel_cascade":"577bd676-aacb-4072-b7da-99d00ee210a4"`, `"cascaderel":"577bd676-aacb-4072-b7da-99d00ee210a4"`,
`"onerel":"848a1dea-5ddd-42d6-a00d-030547bffcfe"`, `"onerel":"848a1dea-5ddd-42d6-a00d-030547bffcfe"`,
`"manyrels":["848a1dea-5ddd-42d6-a00d-030547bffcfe","577bd676-aacb-4072-b7da-99d00ee210a4"]`, `"manyrels":["848a1dea-5ddd-42d6-a00d-030547bffcfe","577bd676-aacb-4072-b7da-99d00ee210a4"]`,
`"bool":false`, `"bool":true`,
`"text":"test_new"`, `"text":"test_new"`,
`"selfrel":"63c2ab80-84ab-4057-a592-4604a731f78f"`,
`"@expand":{`,
`"selfrel":{`,
},
NotExpectedContent: []string{
// user don't have access to view the below expands
`"manyrels":[{`,
`"onerel":{`,
}, },
ExpectedEvents: map[string]int{ ExpectedEvents: map[string]int{
"OnRecordBeforeUpdateRequest": 1, "OnRecordBeforeUpdateRequest": 1,
@@ -863,11 +902,44 @@ func TestRecordUpdate(t *testing.T) {
}, },
}, },
{ {
Name: "admin submit in restricted collection (rule skip check)", Name: "user submit in restricted collection (rule pass check) + expand relations (no view rule access when bool is false)",
Method: http.MethodPatch, Method: http.MethodPatch,
Url: "/api/collections/demo2/records/63c2ab80-84ab-4057-a592-4604a731f78f", Url: "/api/collections/demo2/records/63c2ab80-84ab-4057-a592-4604a731f78f?expand=missing,onerel,manyrels,selfrel",
Body: strings.NewReader(`{ Body: strings.NewReader(`{
"text":"test_new" "selfrel":"63c2ab80-84ab-4057-a592-4604a731f78f",
"bool":false
}`),
RequestHeaders: map[string]string{
// test3@example.com
"Authorization": "User eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlIjoidXNlciIsImVtYWlsIjoidGVzdDNAZXhhbXBsZS5jb20iLCJpZCI6Ijk3Y2MzZDNkLTZiYTItMzgzZi1iNDJhLTdiYzg0ZDI3NDEwYyIsImV4cCI6MTg5MzUxNTU3Nn0.Q965uvlTxxOsZbACXSgJQNXykYK0TKZ87nyPzemvN4E",
},
ExpectedStatus: 200,
ExpectedContent: []string{
`"id":"63c2ab80-84ab-4057-a592-4604a731f78f"`,
`"bool":false`,
`"selfrel":"63c2ab80-84ab-4057-a592-4604a731f78f"`,
},
NotExpectedContent: []string{
`"@expand":{`,
`"manyrels":[{`, // admin only
`"onerel":{`, // admin only
`"selfrel":{`, // bool=true view rule
},
ExpectedEvents: map[string]int{
"OnRecordBeforeUpdateRequest": 1,
"OnRecordAfterUpdateRequest": 1,
"OnModelBeforeUpdate": 1,
"OnModelAfterUpdate": 1,
},
},
{
Name: "admin submit in restricted collection (rule skip check) + expand relations",
Method: http.MethodPatch,
Url: "/api/collections/demo2/records/63c2ab80-84ab-4057-a592-4604a731f78f?expand=onerel,manyrels,selfrel,missing",
Body: strings.NewReader(`{
"text":"test_new",
"number":1,
"selfrel":"94568ca2-0bee-49d7-b749-06cb97956fd9"
}`), }`),
RequestHeaders: map[string]string{ RequestHeaders: map[string]string{
"Authorization": "Admin eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJiNGE5N2NjLTNmODMtNGQwMS1hMjZiLTNkNzdiYzg0MmQzYyIsInR5cGUiOiJhZG1pbiIsImV4cCI6MTg3MzQ2Mjc5Mn0.AtRtXR6FHBrCUGkj5OffhmxLbSZaQ4L_Qgw4gfoHyfo", "Authorization": "Admin eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJiNGE5N2NjLTNmODMtNGQwMS1hMjZiLTNkNzdiYzg0MmQzYyIsInR5cGUiOiJhZG1pbiIsImV4cCI6MTg3MzQ2Mjc5Mn0.AtRtXR6FHBrCUGkj5OffhmxLbSZaQ4L_Qgw4gfoHyfo",
@@ -876,6 +948,16 @@ func TestRecordUpdate(t *testing.T) {
ExpectedContent: []string{ ExpectedContent: []string{
`"id":"63c2ab80-84ab-4057-a592-4604a731f78f"`, `"id":"63c2ab80-84ab-4057-a592-4604a731f78f"`,
`"text":"test_new"`, `"text":"test_new"`,
`"number":1`,
`"@expand":{`,
`"manyrels":[{`,
`"onerel":{`,
`"selfrel":{`,
`"@collectionId":"3f2888f8-075d-49fe-9d09-ea7e951000dc"`,
`"@collectionName":"demo"`,
`"id":"848a1dea-5ddd-42d6-a00d-030547bffcfe"`,
`"id":"577bd676-aacb-4072-b7da-99d00ee210a4"`,
`"id":"94568ca2-0bee-49d7-b749-06cb97956fd9"`,
}, },
ExpectedEvents: map[string]int{ ExpectedEvents: map[string]int{
"OnRecordBeforeUpdateRequest": 1, "OnRecordBeforeUpdateRequest": 1,
+18 -11
View File
@@ -40,6 +40,8 @@ func (api *settingsApi) list(c echo.Context) error {
func (api *settingsApi) set(c echo.Context) error { func (api *settingsApi) set(c echo.Context) error {
form := forms.NewSettingsUpsert(api.app) form := forms.NewSettingsUpsert(api.app)
// load request
if err := c.Bind(form); err != nil { if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("An error occurred while reading the submitted data.", err) return rest.NewBadRequestError("An error occurred while reading the submitted data.", err)
} }
@@ -50,22 +52,27 @@ func (api *settingsApi) set(c echo.Context) error {
NewSettings: form.Settings, NewSettings: form.Settings,
} }
handlerErr := api.app.OnSettingsBeforeUpdateRequest().Trigger(event, func(e *core.SettingsUpdateEvent) error { // update the settings
if err := form.Submit(); err != nil { submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return rest.NewBadRequestError("An error occurred while submitting the form.", err) return func() error {
} return api.app.OnSettingsBeforeUpdateRequest().Trigger(event, func(e *core.SettingsUpdateEvent) error {
if err := next(); err != nil {
return rest.NewBadRequestError("An error occurred while submitting the form.", err)
}
redactedSettings, err := api.app.Settings().RedactClone() redactedSettings, err := api.app.Settings().RedactClone()
if err != nil { if err != nil {
return rest.NewBadRequestError("", err) return rest.NewBadRequestError("", err)
} }
return e.HttpContext.JSON(http.StatusOK, redactedSettings) return e.HttpContext.JSON(http.StatusOK, redactedSettings)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnSettingsAfterUpdateRequest().Trigger(event) api.app.OnSettingsAfterUpdateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
-3
View File
@@ -139,9 +139,6 @@ func TestSettingsSet(t *testing.T) {
`"emailAuth":{"minPasswordLength":{"code":"validation_min_greater_equal_than_required","message":"Must be no less than 5."}}`, `"emailAuth":{"minPasswordLength":{"code":"validation_min_greater_equal_than_required","message":"Must be no less than 5."}}`,
`"meta":{"appName":{"code":"validation_required","message":"Cannot be blank."}}`, `"meta":{"appName":{"code":"validation_required","message":"Cannot be blank."}}`,
}, },
ExpectedEvents: map[string]int{
"OnSettingsBeforeUpdateRequest": 1,
},
}, },
{ {
Name: "authorized as admin submitting valid data", Name: "authorized as admin submitting valid data",
+26 -18
View File
@@ -348,7 +348,7 @@ func (api *userApi) create(c echo.Context) error {
// load request // load request
if err := c.Bind(form); err != nil { if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
event := &core.UserCreateEvent{ event := &core.UserCreateEvent{
@@ -356,20 +356,24 @@ func (api *userApi) create(c echo.Context) error {
User: user, User: user,
} }
handlerErr := api.app.OnUserBeforeCreateRequest().Trigger(event, func(e *core.UserCreateEvent) error { // create the user
// create the user submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
if err := form.Submit(); err != nil { return func() error {
return rest.NewBadRequestError("Failed to create user.", err) return api.app.OnUserBeforeCreateRequest().Trigger(event, func(e *core.UserCreateEvent) error {
} if err := next(); err != nil {
return rest.NewBadRequestError("Failed to create user.", err)
}
return e.HttpContext.JSON(http.StatusOK, e.User) return e.HttpContext.JSON(http.StatusOK, e.User)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnUserAfterCreateRequest().Trigger(event) api.app.OnUserAfterCreateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
func (api *userApi) update(c echo.Context) error { func (api *userApi) update(c echo.Context) error {
@@ -387,7 +391,7 @@ func (api *userApi) update(c echo.Context) error {
// load request // load request
if err := c.Bind(form); err != nil { if err := c.Bind(form); err != nil {
return rest.NewBadRequestError("Failed to read the submitted data due to invalid formatting.", err) return rest.NewBadRequestError("Failed to load the submitted data due to invalid formatting.", err)
} }
event := &core.UserUpdateEvent{ event := &core.UserUpdateEvent{
@@ -395,20 +399,24 @@ func (api *userApi) update(c echo.Context) error {
User: user, User: user,
} }
handlerErr := api.app.OnUserBeforeUpdateRequest().Trigger(event, func(e *core.UserUpdateEvent) error { // update the user
// update the user submitErr := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
if err := form.Submit(); err != nil { return func() error {
return rest.NewBadRequestError("Failed to update user.", err) return api.app.OnUserBeforeUpdateRequest().Trigger(event, func(e *core.UserUpdateEvent) error {
} if err := next(); err != nil {
return rest.NewBadRequestError("Failed to update user.", err)
}
return e.HttpContext.JSON(http.StatusOK, e.User) return e.HttpContext.JSON(http.StatusOK, e.User)
})
}
}) })
if handlerErr == nil { if submitErr == nil {
api.app.OnUserAfterUpdateRequest().Trigger(event) api.app.OnUserAfterUpdateRequest().Trigger(event)
} }
return handlerErr return submitErr
} }
func (api *userApi) delete(c echo.Context) error { func (api *userApi) delete(c echo.Context) error {
+58 -30
View File
@@ -4,9 +4,12 @@ import (
"net/http" "net/http"
"strings" "strings"
"testing" "testing"
"time"
"github.com/labstack/echo/v5" "github.com/labstack/echo/v5"
"github.com/pocketbase/pocketbase/daos"
"github.com/pocketbase/pocketbase/tests" "github.com/pocketbase/pocketbase/tests"
"github.com/pocketbase/pocketbase/tools/types"
) )
func TestUsersAuthMethods(t *testing.T) { func TestUsersAuthMethods(t *testing.T) {
@@ -132,6 +135,7 @@ func TestUserRequestPasswordReset(t *testing.T) {
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/users/request-password-reset", Url: "/api/users/request-password-reset",
Body: strings.NewReader(`{"email":"missing@example.com"}`), Body: strings.NewReader(`{"email":"missing@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
}, },
{ {
@@ -139,22 +143,34 @@ func TestUserRequestPasswordReset(t *testing.T) {
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/users/request-password-reset", Url: "/api/users/request-password-reset",
Body: strings.NewReader(`{"email":"test@example.com"}`), Body: strings.NewReader(`{"email":"test@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
// usually this events are fired but since the submit is ExpectedEvents: map[string]int{
// executed in a separate go routine they are fired async "OnModelBeforeUpdate": 1,
// ExpectedEvents: map[string]int{ "OnModelAfterUpdate": 1,
// "OnModelBeforeUpdate": 1, "OnMailerBeforeUserResetPasswordSend": 1,
// "OnModelAfterUpdate": 1, "OnMailerAfterUserResetPasswordSend": 1,
// "OnMailerBeforeUserResetPasswordSend": 1, },
// "OnMailerAfterUserResetPasswordSend": 1,
// },
}, },
{ {
Name: "existing user (after already sent)", Name: "existing user (after already sent)",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/users/request-password-reset", Url: "/api/users/request-password-reset",
Body: strings.NewReader(`{"email":"test@example.com"}`), Body: strings.NewReader(`{"email":"test@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
BeforeFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
// simulate recent password request
user, err := app.Dao().FindUserByEmail("test@example.com")
if err != nil {
t.Fatal(err)
}
user.LastResetSentAt = types.NowDateTime()
dao := daos.New(app.Dao().DB()) // new dao to ignore hooks
if err := dao.Save(user); err != nil {
t.Fatal(err)
}
},
}, },
} }
@@ -216,50 +232,71 @@ func TestUserConfirmPasswordReset(t *testing.T) {
func TestUserRequestVerification(t *testing.T) { func TestUserRequestVerification(t *testing.T) {
scenarios := []tests.ApiScenario{ scenarios := []tests.ApiScenario{
// empty data
{ {
Name: "empty data",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/users/request-verification", Url: "/api/users/request-verification",
Body: strings.NewReader(``), Body: strings.NewReader(``),
ExpectedStatus: 400, ExpectedStatus: 400,
ExpectedContent: []string{`"data":{"email":{"code":"validation_required","message":"Cannot be blank."}}`}, ExpectedContent: []string{`"data":{"email":{"code":"validation_required","message":"Cannot be blank."}}`},
}, },
// invalid data
{ {
Name: "invalid data",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/users/request-verification", Url: "/api/users/request-verification",
Body: strings.NewReader(`{"email`), Body: strings.NewReader(`{"email`),
ExpectedStatus: 400, ExpectedStatus: 400,
ExpectedContent: []string{`"data":{}`}, ExpectedContent: []string{`"data":{}`},
}, },
// missing user
{ {
Name: "missing user",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/users/request-verification", Url: "/api/users/request-verification",
Body: strings.NewReader(`{"email":"missing@example.com"}`), Body: strings.NewReader(`{"email":"missing@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
}, },
// existing already verified user
{ {
Name: "existing already verified user",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/users/request-verification", Url: "/api/users/request-verification",
Body: strings.NewReader(`{"email":"test@example.com"}`), Body: strings.NewReader(`{"email":"test@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
}, },
// existing unverified user
{ {
Name: "existing unverified user",
Method: http.MethodPost, Method: http.MethodPost,
Url: "/api/users/request-verification", Url: "/api/users/request-verification",
Body: strings.NewReader(`{"email":"test2@example.com"}`), Body: strings.NewReader(`{"email":"test2@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204, ExpectedStatus: 204,
// usually this events are fired but since the submit is ExpectedEvents: map[string]int{
// executed in a separate go routine they are fired async "OnModelBeforeUpdate": 1,
// ExpectedEvents: map[string]int{ "OnModelAfterUpdate": 1,
// "OnModelBeforeUpdate": 1, "OnMailerBeforeUserVerificationSend": 1,
// "OnModelAfterUpdate": 1, "OnMailerAfterUserVerificationSend": 1,
// "OnMailerBeforeUserVerificationSend": 1, },
// "OnMailerAfterUserVerificationSend": 1, },
// }, {
Name: "existing unverified user (after already sent)",
Method: http.MethodPost,
Url: "/api/users/request-verification",
Body: strings.NewReader(`{"email":"test2@example.com"}`),
Delay: 100 * time.Millisecond,
ExpectedStatus: 204,
BeforeFunc: func(t *testing.T, app *tests.TestApp, e *echo.Echo) {
// simulate recent verification sent
user, err := app.Dao().FindUserByEmail("test2@example.com")
if err != nil {
t.Fatal(err)
}
user.LastVerificationSentAt = types.NowDateTime()
dao := daos.New(app.Dao().DB()) // new dao to ignore hooks
if err := dao.Save(user); err != nil {
t.Fatal(err)
}
},
}, },
} }
@@ -748,9 +785,6 @@ func TestUserCreate(t *testing.T) {
`"email":{"code":"validation_required"`, `"email":{"code":"validation_required"`,
`"password":{"code":"validation_required"`, `"password":{"code":"validation_required"`,
}, },
ExpectedEvents: map[string]int{
"OnUserBeforeCreateRequest": 1,
},
}, },
{ {
Name: "invalid data", Name: "invalid data",
@@ -764,9 +798,6 @@ func TestUserCreate(t *testing.T) {
`"password":{"code":"validation_length_out_of_range"`, `"password":{"code":"validation_length_out_of_range"`,
`"passwordConfirm":{"code":"validation_values_mismatch"`, `"passwordConfirm":{"code":"validation_values_mismatch"`,
}, },
ExpectedEvents: map[string]int{
"OnUserBeforeCreateRequest": 1,
},
}, },
{ {
Name: "valid data but with disabled email/pass auth", Name: "valid data but with disabled email/pass auth",
@@ -868,9 +899,6 @@ func TestUserUpdate(t *testing.T) {
`"data":{`, `"data":{`,
`"email":{"code":"validation_user_email_exists"`, `"email":{"code":"validation_user_email_exists"`,
}, },
ExpectedEvents: map[string]int{
"OnUserBeforeUpdateRequest": 1,
},
}, },
{ {
Name: "authorized as admin - valid data", Name: "authorized as admin - valid data",
-21
View File
@@ -1,21 +0,0 @@
// Package cmd implements various PocketBase system commands.
package cmd
import (
"fmt"
"github.com/pocketbase/pocketbase/core"
"github.com/spf13/cobra"
)
// NewVersionCommand creates and returns new command that prints
// the current PocketBase version.
func NewVersionCommand(app core.App, version string) *cobra.Command {
return &cobra.Command{
Use: "version",
Short: "Prints the current PocketBase app version",
Run: func(command *cobra.Command, args []string) {
fmt.Printf("PocketBase v%s\n", version)
},
}
}
+37 -1
View File
@@ -5,6 +5,7 @@ import (
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"errors" "errors"
"log"
"os" "os"
"path/filepath" "path/filepath"
"time" "time"
@@ -123,7 +124,7 @@ type BaseApp struct {
// //
// To initialize the app, you need to call `app.Bootsrap()`. // To initialize the app, you need to call `app.Bootsrap()`.
func NewBaseApp(dataDir string, encryptionEnv string, isDebug bool) *BaseApp { func NewBaseApp(dataDir string, encryptionEnv string, isDebug bool) *BaseApp {
return &BaseApp{ app := &BaseApp{
dataDir: dataDir, dataDir: dataDir,
isDebug: isDebug, isDebug: isDebug,
encryptionEnv: encryptionEnv, encryptionEnv: encryptionEnv,
@@ -209,6 +210,10 @@ func NewBaseApp(dataDir string, encryptionEnv string, isDebug bool) *BaseApp {
onCollectionBeforeDeleteRequest: &hook.Hook[*CollectionDeleteEvent]{}, onCollectionBeforeDeleteRequest: &hook.Hook[*CollectionDeleteEvent]{},
onCollectionAfterDeleteRequest: &hook.Hook[*CollectionDeleteEvent]{}, onCollectionAfterDeleteRequest: &hook.Hook[*CollectionDeleteEvent]{},
} }
app.registerDefaultHooks()
return app
} }
// Bootstrap initializes the application // Bootstrap initializes the application
@@ -342,6 +347,7 @@ func (app *BaseApp) NewFilesystem() (*filesystem.System, error) {
app.settings.S3.Endpoint, app.settings.S3.Endpoint,
app.settings.S3.AccessKey, app.settings.S3.AccessKey,
app.settings.S3.Secret, app.settings.S3.Secret,
app.settings.S3.ForcePathStyle,
) )
} }
@@ -750,3 +756,33 @@ func (app *BaseApp) createDao(db dbx.Builder) *daos.Dao {
return dao return dao
} }
func (app *BaseApp) registerDefaultHooks() {
deletePrefix := func(prefix string) error {
fs, err := app.NewFilesystem()
if err != nil {
return err
}
defer fs.Close()
failed := fs.DeletePrefix(prefix)
if len(failed) > 0 {
return errors.New("Failed to delete the files at " + prefix)
}
return nil
}
// delete storage files from deleted Collection, Records, etc.
app.OnModelAfterDelete().Add(func(e *ModelEvent) error {
if m, ok := e.Model.(models.FilesManager); ok && m.BaseFilesPath() != "" {
if err := deletePrefix(m.BaseFilesPath()); err != nil && app.IsDebug() {
// non critical error - only log for debug
// (usually could happen because of S3 api limits)
log.Println(err)
}
}
return nil
})
}
+8 -7
View File
@@ -244,18 +244,19 @@ func (c SmtpConfig) Validate() error {
// ------------------------------------------------------------------- // -------------------------------------------------------------------
type S3Config struct { type S3Config struct {
Enabled bool `form:"enabled" json:"enabled"` Enabled bool `form:"enabled" json:"enabled"`
Bucket string `form:"bucket" json:"bucket"` Bucket string `form:"bucket" json:"bucket"`
Region string `form:"region" json:"region"` Region string `form:"region" json:"region"`
Endpoint string `form:"endpoint" json:"endpoint"` Endpoint string `form:"endpoint" json:"endpoint"`
AccessKey string `form:"accessKey" json:"accessKey"` AccessKey string `form:"accessKey" json:"accessKey"`
Secret string `form:"secret" json:"secret"` Secret string `form:"secret" json:"secret"`
ForcePathStyle bool `form:"forcePathStyle" json:"forcePathStyle"`
} }
// Validate makes S3Config validatable by implementing [validation.Validatable] interface. // Validate makes S3Config validatable by implementing [validation.Validatable] interface.
func (c S3Config) Validate() error { func (c S3Config) Validate() error {
return validation.ValidateStruct(&c, return validation.ValidateStruct(&c,
validation.Field(&c.Endpoint, is.Host, validation.When(c.Enabled, validation.Required)), validation.Field(&c.Endpoint, is.URL, validation.When(c.Enabled, validation.Required)),
validation.Field(&c.Bucket, validation.When(c.Enabled, validation.Required)), validation.Field(&c.Bucket, validation.When(c.Enabled, validation.Required)),
validation.Field(&c.Region, validation.When(c.Enabled, validation.Required)), validation.Field(&c.Region, validation.When(c.Enabled, validation.Required)),
validation.Field(&c.AccessKey, validation.When(c.Enabled, validation.Required)), validation.Field(&c.AccessKey, validation.When(c.Enabled, validation.Required)),
+14 -2
View File
@@ -172,7 +172,7 @@ func TestSettingsRedactClone(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
expected := `{"meta":{"appName":"test123","appUrl":"http://localhost:8090","senderName":"Support","senderAddress":"support@example.com","userVerificationUrl":"%APP_URL%/_/#/users/confirm-verification/%TOKEN%","userResetPasswordUrl":"%APP_URL%/_/#/users/confirm-password-reset/%TOKEN%","userConfirmEmailChangeUrl":"%APP_URL%/_/#/users/confirm-email-change/%TOKEN%"},"logs":{"maxDays":7},"smtp":{"enabled":false,"host":"smtp.example.com","port":587,"username":"","password":"******","tls":true},"s3":{"enabled":false,"bucket":"","region":"","endpoint":"","accessKey":"","secret":"******"},"adminAuthToken":{"secret":"******","duration":1209600},"adminPasswordResetToken":{"secret":"******","duration":1800},"userAuthToken":{"secret":"******","duration":1209600},"userPasswordResetToken":{"secret":"******","duration":1800},"userEmailChangeToken":{"secret":"******","duration":1800},"userVerificationToken":{"secret":"******","duration":604800},"emailAuth":{"enabled":true,"exceptDomains":null,"onlyDomains":null,"minPasswordLength":8},"googleAuth":{"enabled":false,"allowRegistrations":true,"clientSecret":"******"},"facebookAuth":{"enabled":false,"allowRegistrations":true,"clientSecret":"******"},"githubAuth":{"enabled":false,"allowRegistrations":true,"clientSecret":"******"},"gitlabAuth":{"enabled":false,"allowRegistrations":true,"clientSecret":"******"}}` expected := `{"meta":{"appName":"test123","appUrl":"http://localhost:8090","senderName":"Support","senderAddress":"support@example.com","userVerificationUrl":"%APP_URL%/_/#/users/confirm-verification/%TOKEN%","userResetPasswordUrl":"%APP_URL%/_/#/users/confirm-password-reset/%TOKEN%","userConfirmEmailChangeUrl":"%APP_URL%/_/#/users/confirm-email-change/%TOKEN%"},"logs":{"maxDays":7},"smtp":{"enabled":false,"host":"smtp.example.com","port":587,"username":"","password":"******","tls":true},"s3":{"enabled":false,"bucket":"","region":"","endpoint":"","accessKey":"","secret":"******","forcePathStyle":false},"adminAuthToken":{"secret":"******","duration":1209600},"adminPasswordResetToken":{"secret":"******","duration":1800},"userAuthToken":{"secret":"******","duration":1209600},"userPasswordResetToken":{"secret":"******","duration":1800},"userEmailChangeToken":{"secret":"******","duration":1800},"userVerificationToken":{"secret":"******","duration":604800},"emailAuth":{"enabled":true,"exceptDomains":null,"onlyDomains":null,"minPasswordLength":8},"googleAuth":{"enabled":false,"allowRegistrations":true,"clientSecret":"******"},"facebookAuth":{"enabled":false,"allowRegistrations":true,"clientSecret":"******"},"githubAuth":{"enabled":false,"allowRegistrations":true,"clientSecret":"******"},"gitlabAuth":{"enabled":false,"allowRegistrations":true,"clientSecret":"******"}}`
if encodedStr := string(encoded); encodedStr != expected { if encodedStr := string(encoded); encodedStr != expected {
t.Fatalf("Expected %v, got \n%v", expected, encodedStr) t.Fatalf("Expected %v, got \n%v", expected, encodedStr)
@@ -315,7 +315,19 @@ func TestS3ConfigValidate(t *testing.T) {
}, },
true, true,
}, },
// valid data // valid data (url endpoint)
{
core.S3Config{
Enabled: true,
Endpoint: "https://localhost:8090",
Bucket: "test",
Region: "test",
AccessKey: "test",
Secret: "test",
},
false,
},
// valid data (hostname endpoint)
{ {
core.S3Config{ core.S3Config{
Enabled: true, Enabled: true,
+4 -7
View File
@@ -115,9 +115,8 @@ func (dao *Dao) Delete(m models.Model) error {
} }
} }
deleteErr := dao.db.Model(m).Delete() if err := dao.db.Model(m).Delete(); err != nil {
if deleteErr != nil { return err
return deleteErr
} }
if dao.AfterDeleteFunc != nil { if dao.AfterDeleteFunc != nil {
@@ -162,8 +161,7 @@ func (dao *Dao) update(m models.Model) error {
return err return err
} }
} else { } else {
err := dao.db.Model(m).Update() if err := dao.db.Model(m).Update(); err != nil {
if err != nil {
return err return err
} }
} }
@@ -203,8 +201,7 @@ func (dao *Dao) create(m models.Model) error {
return err return err
} }
} else { } else {
err := dao.db.Model(m).Insert() if err := dao.db.Model(m).Insert(); err != nil {
if err != nil {
return err return err
} }
} }
+1 -1
View File
@@ -113,7 +113,7 @@ func TestFindCollectionReferences(t *testing.T) {
t.Fatalf("Expected 1 collection, got %d: %v", len(result), result) t.Fatalf("Expected 1 collection, got %d: %v", len(result), result)
} }
expectedFields := []string{"onerel", "manyrels", "rel_cascade"} expectedFields := []string{"onerel", "manyrels", "cascaderel"}
for col, fields := range result { for col, fields := range result {
if col.Name != "demo2" { if col.Name != "demo2" {
+1 -3
View File
@@ -40,7 +40,7 @@ func (dao *Dao) SaveParam(key string, value any, optEncryptionKey ...string) err
param = &models.Param{Key: key} param = &models.Param{Key: key}
} }
var normalizedValue any normalizedValue := value
// encrypt if optEncryptionKey is set // encrypt if optEncryptionKey is set
if len(optEncryptionKey) > 0 && optEncryptionKey[0] != "" { if len(optEncryptionKey) > 0 && optEncryptionKey[0] != "" {
@@ -55,8 +55,6 @@ func (dao *Dao) SaveParam(key string, value any, optEncryptionKey ...string) err
} }
normalizedValue = encryptVal normalizedValue = encryptVal
} else {
normalizedValue = value
} }
encodedValue := types.JsonRaw{} encodedValue := types.JsonRaw{}
+32 -6
View File
@@ -9,6 +9,7 @@ import (
"github.com/pocketbase/pocketbase/models" "github.com/pocketbase/pocketbase/models"
"github.com/pocketbase/pocketbase/models/schema" "github.com/pocketbase/pocketbase/models/schema"
"github.com/pocketbase/pocketbase/tools/list" "github.com/pocketbase/pocketbase/tools/list"
"github.com/pocketbase/pocketbase/tools/security"
"github.com/pocketbase/pocketbase/tools/types" "github.com/pocketbase/pocketbase/tools/types"
) )
@@ -149,6 +150,10 @@ func (dao *Dao) IsRecordValueUnique(
// FindUserRelatedRecords returns all records that has a reference // FindUserRelatedRecords returns all records that has a reference
// to the provided User model (via the user shema field). // to the provided User model (via the user shema field).
func (dao *Dao) FindUserRelatedRecords(user *models.User) ([]*models.Record, error) { func (dao *Dao) FindUserRelatedRecords(user *models.User) ([]*models.Record, error) {
if user.Id == "" {
return []*models.Record{}, nil
}
collections, err := dao.FindCollectionsWithUserFields() collections, err := dao.FindCollectionsWithUserFields()
if err != nil { if err != nil {
return nil, err return nil, err
@@ -329,23 +334,44 @@ func (dao *Dao) SyncRecordTableSchema(newCollection *models.Collection, oldColle
} }
// check for new or renamed columns // check for new or renamed columns
toRename := map[string]string{}
for _, field := range newSchema.Fields() { for _, field := range newSchema.Fields() {
oldField := oldSchema.GetFieldById(field.Id) oldField := oldSchema.GetFieldById(field.Id)
if oldField != nil { // Note:
// rename // We are using a temporary column name when adding or renaming columns
_, err := txDao.DB().RenameColumn(newTableName, oldField.Name, field.Name).Execute() // to ensure that there are no name collisions in case there is
// names switch/reuse of existing columns (eg. name, title -> title, name).
// This way we are always doing 1 more rename operation but it provides better dev experience.
if oldField == nil {
tempName := field.Name + security.RandomString(5)
toRename[tempName] = field.Name
// add
_, err := txDao.DB().AddColumn(newTableName, tempName, field.ColDefinition()).Execute()
if err != nil { if err != nil {
return err return err
} }
} else { } else if oldField.Name != field.Name {
// add tempName := field.Name + security.RandomString(5)
_, err := txDao.DB().AddColumn(newTableName, field.Name, field.ColDefinition()).Execute() toRename[tempName] = field.Name
// rename
_, err := txDao.DB().RenameColumn(newTableName, oldField.Name, tempName).Execute()
if err != nil { if err != nil {
return err return err
} }
} }
} }
// set the actual columns name
for tempName, actualName := range toRename {
_, err := txDao.DB().RenameColumn(newTableName, tempName, actualName).Execute()
if err != nil {
return err
}
}
return nil return nil
}) })
} }
+24 -17
View File
@@ -17,21 +17,27 @@ const MaxExpandDepth = 6
type ExpandFetchFunc func(relCollection *models.Collection, relIds []string) ([]*models.Record, error) type ExpandFetchFunc func(relCollection *models.Collection, relIds []string) ([]*models.Record, error)
// ExpandRecord expands the relations of a single Record model. // ExpandRecord expands the relations of a single Record model.
func (dao *Dao) ExpandRecord(record *models.Record, expands []string, fetchFunc ExpandFetchFunc) error { //
// Returns a map with the failed expand parameters and their errors.
func (dao *Dao) ExpandRecord(record *models.Record, expands []string, fetchFunc ExpandFetchFunc) map[string]error {
return dao.ExpandRecords([]*models.Record{record}, expands, fetchFunc) return dao.ExpandRecords([]*models.Record{record}, expands, fetchFunc)
} }
// ExpandRecords expands the relations of the provided Record models list. // ExpandRecords expands the relations of the provided Record models list.
func (dao *Dao) ExpandRecords(records []*models.Record, expands []string, fetchFunc ExpandFetchFunc) error { //
// Returns a map with the failed expand parameters and their errors.
func (dao *Dao) ExpandRecords(records []*models.Record, expands []string, fetchFunc ExpandFetchFunc) map[string]error {
normalized := normalizeExpands(expands) normalized := normalizeExpands(expands)
failed := map[string]error{}
for _, expand := range normalized { for _, expand := range normalized {
if err := dao.expandRecords(records, expand, fetchFunc, 1); err != nil { if err := dao.expandRecords(records, expand, fetchFunc, 1); err != nil {
return err failed[expand] = err
} }
} }
return nil return failed
} }
// notes: // notes:
@@ -52,11 +58,14 @@ func (dao *Dao) expandRecords(records []*models.Record, expandPath string, fetch
// extract the relation field (if exist) // extract the relation field (if exist)
mainCollection := records[0].Collection() mainCollection := records[0].Collection()
relField := mainCollection.Schema.GetFieldByName(parts[0]) relField := mainCollection.Schema.GetFieldByName(parts[0])
if relField == nil { if relField == nil || relField.Type != schema.FieldTypeRelation {
return fmt.Errorf("Couldn't find field %q in collection %q.", parts[0], mainCollection.Name) return fmt.Errorf("Couldn't find relation field %q in collection %q.", parts[0], mainCollection.Name)
} }
relField.InitOptions() relField.InitOptions()
relFieldOptions, _ := relField.Options.(*schema.RelationOptions) relFieldOptions, ok := relField.Options.(*schema.RelationOptions)
if !ok {
return fmt.Errorf("Cannot initialize the options of relation field %q.", parts[0])
}
relCollection, err := dao.FindCollectionByNameOrId(relFieldOptions.CollectionId) relCollection, err := dao.FindCollectionByNameOrId(relFieldOptions.CollectionId)
if err != nil { if err != nil {
@@ -64,7 +73,7 @@ func (dao *Dao) expandRecords(records []*models.Record, expandPath string, fetch
} }
// extract the id of the relations to expand // extract the id of the relations to expand
relIds := []string{} relIds := make([]string, 0, len(records))
for _, record := range records { for _, record := range records {
relIds = append(relIds, record.GetStringSliceDataValue(relField.Name)...) relIds = append(relIds, record.GetStringSliceDataValue(relField.Name)...)
} }
@@ -92,7 +101,7 @@ func (dao *Dao) expandRecords(records []*models.Record, expandPath string, fetch
for _, model := range records { for _, model := range records {
relIds := model.GetStringSliceDataValue(relField.Name) relIds := model.GetStringSliceDataValue(relField.Name)
validRels := []*models.Record{} validRels := make([]*models.Record, 0, len(relIds))
for _, id := range relIds { for _, id := range relIds {
if rel, ok := indexedRels[id]; ok { if rel, ok := indexedRels[id]; ok {
validRels = append(validRels, rel) validRels = append(validRels, rel)
@@ -120,20 +129,18 @@ func (dao *Dao) expandRecords(records []*models.Record, expandPath string, fetch
// normalizeExpands normalizes expand strings and merges self containing paths // normalizeExpands normalizes expand strings and merges self containing paths
// (eg. ["a.b.c", "a.b", " test ", " ", "test"] -> ["a.b.c", "test"]). // (eg. ["a.b.c", "a.b", " test ", " ", "test"] -> ["a.b.c", "test"]).
func normalizeExpands(paths []string) []string { func normalizeExpands(paths []string) []string {
result := []string{}
// normalize paths // normalize paths
normalized := []string{} normalized := make([]string, 0, len(paths))
for _, p := range paths { for _, p := range paths {
p := strings.ReplaceAll(p, " ", "") // replace spaces p = strings.ReplaceAll(p, " ", "") // replace spaces
p = strings.Trim(p, ".") // trim incomplete paths p = strings.Trim(p, ".") // trim incomplete paths
if p == "" { if p != "" {
continue normalized = append(normalized, p)
} }
normalized = append(normalized, p)
} }
// merge containing paths // merge containing paths
result := make([]string, 0, len(normalized))
for i, p1 := range normalized { for i, p1 := range normalized {
var skip bool var skip bool
for j, p2 := range normalized { for j, p2 := range normalized {
+47 -39
View File
@@ -19,11 +19,11 @@ func TestExpandRecords(t *testing.T) {
col, _ := app.Dao().FindCollectionByNameOrId("demo4") col, _ := app.Dao().FindCollectionByNameOrId("demo4")
scenarios := []struct { scenarios := []struct {
recordIds []string recordIds []string
expands []string expands []string
fetchFunc daos.ExpandFetchFunc fetchFunc daos.ExpandFetchFunc
expectExpandProps int expectExpandProps int
expectError bool expectExpandFailures int
}{ }{
// empty records // empty records
{ {
@@ -33,7 +33,7 @@ func TestExpandRecords(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
0, 0,
false, 0,
}, },
// empty expand // empty expand
{ {
@@ -43,7 +43,7 @@ func TestExpandRecords(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
0, 0,
false, 0,
}, },
// empty fetchFunc // empty fetchFunc
{ {
@@ -51,7 +51,7 @@ func TestExpandRecords(t *testing.T) {
[]string{"onerel", "manyrels.onerel.manyrels"}, []string{"onerel", "manyrels.onerel.manyrels"},
nil, nil,
0, 0,
true, 2,
}, },
// fetchFunc with error // fetchFunc with error
{ {
@@ -61,9 +61,9 @@ func TestExpandRecords(t *testing.T) {
return nil, errors.New("test error") return nil, errors.New("test error")
}, },
0, 0,
true, 2,
}, },
// invalid missing first level expand // missing relation field
{ {
[]string{"b8ba58f9-e2d7-42a0-b0e7-a11efd98236b", "df55c8ff-45ef-4c82-8aed-6e2183fe1125"}, []string{"b8ba58f9-e2d7-42a0-b0e7-a11efd98236b", "df55c8ff-45ef-4c82-8aed-6e2183fe1125"},
[]string{"invalid"}, []string{"invalid"},
@@ -71,9 +71,19 @@ func TestExpandRecords(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
0, 0,
true, 1,
}, },
// invalid missing second level expand // existing, but non-relation type field
{
[]string{"b8ba58f9-e2d7-42a0-b0e7-a11efd98236b", "df55c8ff-45ef-4c82-8aed-6e2183fe1125"},
[]string{"title"},
func(c *models.Collection, ids []string) ([]*models.Record, error) {
return app.Dao().FindRecordsByIds(c, ids, nil)
},
0,
1,
},
// invalid/missing second level expand
{ {
[]string{"b8ba58f9-e2d7-42a0-b0e7-a11efd98236b", "df55c8ff-45ef-4c82-8aed-6e2183fe1125"}, []string{"b8ba58f9-e2d7-42a0-b0e7-a11efd98236b", "df55c8ff-45ef-4c82-8aed-6e2183fe1125"},
[]string{"manyrels.invalid"}, []string{"manyrels.invalid"},
@@ -81,7 +91,7 @@ func TestExpandRecords(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
0, 0,
true, 1,
}, },
// expand normalizations // expand normalizations
{ {
@@ -96,7 +106,7 @@ func TestExpandRecords(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
9, 9,
false, 0,
}, },
// single expand // single expand
{ {
@@ -111,7 +121,7 @@ func TestExpandRecords(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
2, 2,
false, 0,
}, },
// maxExpandDepth reached // maxExpandDepth reached
{ {
@@ -121,18 +131,17 @@ func TestExpandRecords(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
6, 6,
false, 0,
}, },
} }
for i, s := range scenarios { for i, s := range scenarios {
ids := list.ToUniqueStringSlice(s.recordIds) ids := list.ToUniqueStringSlice(s.recordIds)
records, _ := app.Dao().FindRecordsByIds(col, ids, nil) records, _ := app.Dao().FindRecordsByIds(col, ids, nil)
err := app.Dao().ExpandRecords(records, s.expands, s.fetchFunc) failed := app.Dao().ExpandRecords(records, s.expands, s.fetchFunc)
hasErr := err != nil if len(failed) != s.expectExpandFailures {
if hasErr != s.expectError { t.Errorf("(%d) Expected %d failures, got %d: \n%v", i, s.expectExpandFailures, len(failed), failed)
t.Errorf("(%d) Expected hasErr to be %v, got %v (%v)", i, s.expectError, hasErr, err)
} }
encoded, _ := json.Marshal(records) encoded, _ := json.Marshal(records)
@@ -140,7 +149,7 @@ func TestExpandRecords(t *testing.T) {
totalExpandProps := strings.Count(encodedStr, "@expand") totalExpandProps := strings.Count(encodedStr, "@expand")
if s.expectExpandProps != totalExpandProps { if s.expectExpandProps != totalExpandProps {
t.Errorf("(%d) Expected %d @expand props in %v, got %d", i, s.expectExpandProps, encodedStr, totalExpandProps) t.Errorf("(%d) Expected %d @expand props, got %d: \n%v", i, s.expectExpandProps, totalExpandProps, encodedStr)
} }
} }
} }
@@ -152,11 +161,11 @@ func TestExpandRecord(t *testing.T) {
col, _ := app.Dao().FindCollectionByNameOrId("demo4") col, _ := app.Dao().FindCollectionByNameOrId("demo4")
scenarios := []struct { scenarios := []struct {
recordId string recordId string
expands []string expands []string
fetchFunc daos.ExpandFetchFunc fetchFunc daos.ExpandFetchFunc
expectExpandProps int expectExpandProps int
expectError bool expectExpandFailures int
}{ }{
// empty expand // empty expand
{ {
@@ -166,7 +175,7 @@ func TestExpandRecord(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
0, 0,
false, 0,
}, },
// empty fetchFunc // empty fetchFunc
{ {
@@ -174,7 +183,7 @@ func TestExpandRecord(t *testing.T) {
[]string{"onerel", "manyrels.onerel.manyrels"}, []string{"onerel", "manyrels.onerel.manyrels"},
nil, nil,
0, 0,
true, 2,
}, },
// fetchFunc with error // fetchFunc with error
{ {
@@ -184,7 +193,7 @@ func TestExpandRecord(t *testing.T) {
return nil, errors.New("test error") return nil, errors.New("test error")
}, },
0, 0,
true, 2,
}, },
// invalid missing first level expand // invalid missing first level expand
{ {
@@ -194,7 +203,7 @@ func TestExpandRecord(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
0, 0,
true, 1,
}, },
// invalid missing second level expand // invalid missing second level expand
{ {
@@ -204,7 +213,7 @@ func TestExpandRecord(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
0, 0,
true, 1,
}, },
// expand normalizations // expand normalizations
{ {
@@ -214,7 +223,7 @@ func TestExpandRecord(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
3, 3,
false, 0,
}, },
// single expand // single expand
{ {
@@ -224,7 +233,7 @@ func TestExpandRecord(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
1, 1,
false, 0,
}, },
// maxExpandDepth reached // maxExpandDepth reached
{ {
@@ -234,17 +243,16 @@ func TestExpandRecord(t *testing.T) {
return app.Dao().FindRecordsByIds(c, ids, nil) return app.Dao().FindRecordsByIds(c, ids, nil)
}, },
6, 6,
false, 0,
}, },
} }
for i, s := range scenarios { for i, s := range scenarios {
record, _ := app.Dao().FindFirstRecordByData(col, "id", s.recordId) record, _ := app.Dao().FindFirstRecordByData(col, "id", s.recordId)
err := app.Dao().ExpandRecord(record, s.expands, s.fetchFunc) failed := app.Dao().ExpandRecord(record, s.expands, s.fetchFunc)
hasErr := err != nil if len(failed) != s.expectExpandFailures {
if hasErr != s.expectError { t.Errorf("(%d) Expected %d failures, got %d: \n%v", i, s.expectExpandFailures, len(failed), failed)
t.Errorf("(%d) Expected hasErr to be %v, got %v (%v)", i, s.expectError, hasErr, err)
} }
encoded, _ := json.Marshal(record) encoded, _ := json.Marshal(record)
@@ -252,7 +260,7 @@ func TestExpandRecord(t *testing.T) {
totalExpandProps := strings.Count(encodedStr, "@expand") totalExpandProps := strings.Count(encodedStr, "@expand")
if s.expectExpandProps != totalExpandProps { if s.expectExpandProps != totalExpandProps {
t.Errorf("(%d) Expected %d @expand props in %v, got %d", i, s.expectExpandProps, encodedStr, totalExpandProps) t.Errorf("(%d) Expected %d @expand props, got %d: \n%v", i, s.expectExpandProps, totalExpandProps, encodedStr)
} }
} }
} }
+1
View File
@@ -298,6 +298,7 @@ func TestFindUserRelatedRecords(t *testing.T) {
} }
if len(records) != len(scenario.expectedIds) { if len(records) != len(scenario.expectedIds) {
fmt.Println(records[0])
t.Errorf("(%d) Expected %d records, got %d (%v)", i, len(scenario.expectedIds), len(records), records) t.Errorf("(%d) Expected %d records, got %d (%v)", i, len(scenario.expectedIds), len(records), records)
continue continue
} }
+3 -3
View File
@@ -43,10 +43,10 @@ func (dao *Dao) LoadProfiles(users []*models.User) error {
} }
// extract user ids // extract user ids
ids := []string{} ids := make([]string, len(users))
usersMap := map[string]*models.User{} usersMap := map[string]*models.User{}
for _, user := range users { for i, user := range users {
ids = append(ids, user.Id) ids[i] = user.Id
usersMap[user.Id] = user usersMap[user.Id] = user
} }
+8 -3
View File
@@ -74,8 +74,11 @@ func (form *AdminUpsert) checkUniqueEmail(value any) error {
return validation.NewError("validation_admin_email_exists", "Admin email already exists.") return validation.NewError("validation_admin_email_exists", "Admin email already exists.")
} }
// Submit validates the form and upserts the form's admin model. // Submit validates the form and upserts the form admin model.
func (form *AdminUpsert) Submit() error { //
// You can optionally provide a list of InterceptorFunc to further
// modify the form behavior before persisting it.
func (form *AdminUpsert) Submit(interceptors ...InterceptorFunc) error {
if err := form.Validate(); err != nil { if err := form.Validate(); err != nil {
return err return err
} }
@@ -87,5 +90,7 @@ func (form *AdminUpsert) Submit() error {
form.admin.SetPassword(form.Password) form.admin.SetPassword(form.Password)
} }
return form.app.Dao().SaveAdmin(form.admin) return runInterceptors(func() error {
return form.app.Dao().SaveAdmin(form.admin)
}, interceptors...)
} }
+65 -1
View File
@@ -2,6 +2,7 @@ package forms_test
import ( import (
"encoding/json" "encoding/json"
"errors"
"testing" "testing"
validation "github.com/go-ozzo/ozzo-validation/v4" validation "github.com/go-ozzo/ozzo-validation/v4"
@@ -252,7 +253,14 @@ func TestAdminUpsertSubmit(t *testing.T) {
continue continue
} }
err := form.Submit() interceptorCalls := 0
err := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorCalls++
return next()
}
})
hasErr := err != nil hasErr := err != nil
if hasErr != s.expectError { if hasErr != s.expectError {
@@ -266,6 +274,14 @@ func TestAdminUpsertSubmit(t *testing.T) {
continue continue
} }
expectInterceptorCall := 1
if s.expectError {
expectInterceptorCall = 0
}
if interceptorCalls != expectInterceptorCall {
t.Errorf("(%d) Expected interceptor to be called %d, got %d", i, expectInterceptorCall, interceptorCalls)
}
if s.expectError { if s.expectError {
continue // skip persistence check continue // skip persistence check
} }
@@ -283,3 +299,51 @@ func TestAdminUpsertSubmit(t *testing.T) {
} }
} }
} }
func TestAdminUpsertSubmitInterceptors(t *testing.T) {
app, _ := tests.NewTestApp()
defer app.Cleanup()
admin := &models.Admin{}
form := forms.NewAdminUpsert(app, admin)
form.Email = "test_new@example.com"
form.Password = "1234567890"
form.PasswordConfirm = form.Password
testErr := errors.New("test_error")
interceptorAdminEmail := ""
interceptor1Called := false
interceptor1 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptor1Called = true
return next()
}
}
interceptor2Called := false
interceptor2 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorAdminEmail = admin.Email // to check if the record was filled
interceptor2Called = true
return testErr
}
}
err := form.Submit(interceptor1, interceptor2)
if err != testErr {
t.Fatalf("Expected error %v, got %v", testErr, err)
}
if !interceptor1Called {
t.Fatalf("Expected interceptor1 to be called")
}
if !interceptor2Called {
t.Fatalf("Expected interceptor2 to be called")
}
if interceptorAdminEmail != form.Email {
t.Fatalf("Expected the form model to be filled before calling the interceptors")
}
}
+19
View File
@@ -0,0 +1,19 @@
// Package models implements various services used for request data
// validation and applying changes to existing DB models through the app Dao.
package forms
// InterceptorNextFunc is a interceptor handler function.
// Usually used in combination with InterceptorFunc.
type InterceptorNextFunc = func() error
// InterceptorFunc defines a single interceptor function that will execute the provided next func handler.
type InterceptorFunc func(next InterceptorNextFunc) InterceptorNextFunc
// runInterceptors executes the provided list of interceptors.
func runInterceptors(next InterceptorNextFunc, interceptors ...InterceptorFunc) error {
for i := len(interceptors) - 1; i >= 0; i-- {
next = interceptors[i](next)
}
return next()
}
+7 -17
View File
@@ -78,7 +78,6 @@ func (form *CollectionUpsert) Validate() error {
&form.Schema, &form.Schema,
validation.By(form.ensureNoSystemFieldsChange), validation.By(form.ensureNoSystemFieldsChange),
validation.By(form.ensureNoFieldsTypeChange), validation.By(form.ensureNoFieldsTypeChange),
validation.By(form.ensureNoFieldsNameReuse),
), ),
validation.Field(&form.ListRule, validation.By(form.checkRule)), validation.Field(&form.ListRule, validation.By(form.checkRule)),
validation.Field(&form.ViewRule, validation.By(form.checkRule)), validation.Field(&form.ViewRule, validation.By(form.checkRule)),
@@ -154,20 +153,6 @@ func (form *CollectionUpsert) ensureNoSystemFieldsChange(value any) error {
return nil return nil
} }
func (form *CollectionUpsert) ensureNoFieldsNameReuse(value any) error {
v, _ := value.(schema.Schema)
for _, field := range v.Fields() {
oldField := form.collection.Schema.GetFieldByName(field.Name)
if oldField != nil && oldField.Id != field.Id {
return validation.NewError("validation_field_old_field_exist", "Cannot use existing schema field names when renaming fields.")
}
}
return nil
}
func (form *CollectionUpsert) checkRule(value any) error { func (form *CollectionUpsert) checkRule(value any) error {
v, _ := value.(*string) v, _ := value.(*string)
@@ -189,7 +174,10 @@ func (form *CollectionUpsert) checkRule(value any) error {
// Submit validates the form and upserts the form's Collection model. // Submit validates the form and upserts the form's Collection model.
// //
// On success the related record table schema will be auto updated. // On success the related record table schema will be auto updated.
func (form *CollectionUpsert) Submit() error { //
// You can optionally provide a list of InterceptorFunc to further
// modify the form behavior before persisting it.
func (form *CollectionUpsert) Submit(interceptors ...InterceptorFunc) error {
if err := form.Validate(); err != nil { if err := form.Validate(); err != nil {
return err return err
} }
@@ -211,5 +199,7 @@ func (form *CollectionUpsert) Submit() error {
form.collection.UpdateRule = form.UpdateRule form.collection.UpdateRule = form.UpdateRule
form.collection.DeleteRule = form.DeleteRule form.collection.DeleteRule = form.DeleteRule
return form.app.Dao().SaveCollection(form.collection) return runInterceptors(func() error {
return form.app.Dao().SaveCollection(form.collection)
}, interceptors...)
} }
+71 -3
View File
@@ -2,6 +2,7 @@ package forms_test
import ( import (
"encoding/json" "encoding/json"
"errors"
"testing" "testing"
validation "github.com/go-ozzo/ozzo-validation/v4" validation "github.com/go-ozzo/ozzo-validation/v4"
@@ -260,7 +261,7 @@ func TestCollectionUpsertSubmit(t *testing.T) {
}`, }`,
[]string{"schema"}, []string{"schema"},
}, },
// update failure - rename fields to existing field names (aka. reusing field names) // update success - rename fields to existing field names (aka. reusing field names)
{ {
"test_new", "test_new",
`{ `{
@@ -269,7 +270,7 @@ func TestCollectionUpsertSubmit(t *testing.T) {
{"id":"b123456","name":"test1","type":"email"} {"id":"b123456","name":"test1","type":"email"}
] ]
}`, }`,
[]string{"schema"}, []string{},
}, },
// update failure - existing name // update failure - existing name
{ {
@@ -387,14 +388,31 @@ func TestCollectionUpsertSubmit(t *testing.T) {
continue continue
} }
interceptorCalls := 0
interceptor := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorCalls++
return next()
}
}
// parse errors // parse errors
result := form.Submit() result := form.Submit(interceptor)
errs, ok := result.(validation.Errors) errs, ok := result.(validation.Errors)
if !ok && result != nil { if !ok && result != nil {
t.Errorf("(%d) Failed to parse errors %v", i, result) t.Errorf("(%d) Failed to parse errors %v", i, result)
continue continue
} }
// check interceptor calls
expectInterceptorCall := 1
if len(s.expectedErrors) > 0 {
expectInterceptorCall = 0
}
if interceptorCalls != expectInterceptorCall {
t.Errorf("(%d) Expected interceptor to be called %d, got %d", i, expectInterceptorCall, interceptorCalls)
}
// check errors // check errors
if len(errs) > len(s.expectedErrors) { if len(errs) > len(s.expectedErrors) {
t.Errorf("(%d) Expected error keys %v, got %v", i, s.expectedErrors, errs) t.Errorf("(%d) Expected error keys %v, got %v", i, s.expectedErrors, errs)
@@ -450,3 +468,53 @@ func TestCollectionUpsertSubmit(t *testing.T) {
} }
} }
} }
func TestCollectionUpsertSubmitInterceptors(t *testing.T) {
app, _ := tests.NewTestApp()
defer app.Cleanup()
collection, err := app.Dao().FindCollectionByNameOrId("demo")
if err != nil {
t.Fatal(err)
}
form := forms.NewCollectionUpsert(app, collection)
form.Name = "test_new"
testErr := errors.New("test_error")
interceptorCollectionName := ""
interceptor1Called := false
interceptor1 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptor1Called = true
return next()
}
}
interceptor2Called := false
interceptor2 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorCollectionName = collection.Name // to check if the record was filled
interceptor2Called = true
return testErr
}
}
submitErr := form.Submit(interceptor1, interceptor2)
if submitErr != testErr {
t.Fatalf("Expected submitError %v, got %v", testErr, submitErr)
}
if !interceptor1Called {
t.Fatalf("Expected interceptor1 to be called")
}
if !interceptor2Called {
t.Fatalf("Expected interceptor2 to be called")
}
if interceptorCollectionName != form.Name {
t.Fatalf("Expected the form model to be filled before calling the interceptors")
}
}
+101 -79
View File
@@ -3,6 +3,8 @@ package forms
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"log"
"net/http" "net/http"
"regexp" "regexp"
"strconv" "strconv"
@@ -149,76 +151,81 @@ func (form *RecordUpsert) LoadData(r *http.Request) error {
value := extendedData[key] value := extendedData[key]
value = field.PrepareValue(value) value = field.PrepareValue(value)
if field.Type == schema.FieldTypeFile { if field.Type != schema.FieldTypeFile {
options, _ := field.Options.(*schema.FileOptions) form.Data[key] = value
oldNames := list.ToUniqueStringSlice(form.Data[key]) continue
}
// delete previously uploaded file(s) options, _ := field.Options.(*schema.FileOptions)
if options.MaxSelect == 1 { oldNames := list.ToUniqueStringSlice(form.Data[key])
// search for unset zero indexed key as a fallback
indexedKeyValue, hasIndexedKey := extendedData[key+".0"]
if cast.ToString(value) == "" || (hasIndexedKey && cast.ToString(indexedKeyValue) == "") { // delete previously uploaded file(s)
if len(oldNames) > 0 { if options.MaxSelect == 1 {
form.filesToDelete = append(form.filesToDelete, oldNames...) // search for unset zero indexed key as a fallback
} indexedKeyValue, hasIndexedKey := extendedData[key+".0"]
form.Data[key] = nil
if cast.ToString(value) == "" || (hasIndexedKey && cast.ToString(indexedKeyValue) == "") {
if len(oldNames) > 0 {
form.filesToDelete = append(form.filesToDelete, oldNames...)
} }
} else if options.MaxSelect > 1 { form.Data[key] = ""
// search for individual file index to delete (eg. "file.0") }
keyExp, _ := regexp.Compile(`^` + regexp.QuoteMeta(key) + `\.\d+$`) } else if options.MaxSelect > 1 {
indexesToDelete := []int{} // search for individual file index to delete (eg. "file.0")
for indexedKey := range extendedData { keyExp, _ := regexp.Compile(`^` + regexp.QuoteMeta(key) + `\.\d+$`)
if keyExp.MatchString(indexedKey) && cast.ToString(extendedData[indexedKey]) == "" { indexesToDelete := make([]int, 0, len(extendedData))
index, indexErr := strconv.Atoi(indexedKey[len(key)+1:]) for indexedKey := range extendedData {
if indexErr != nil || index >= len(oldNames) { if keyExp.MatchString(indexedKey) && cast.ToString(extendedData[indexedKey]) == "" {
continue index, indexErr := strconv.Atoi(indexedKey[len(key)+1:])
} if indexErr != nil || index >= len(oldNames) {
indexesToDelete = append(indexesToDelete, index)
}
}
// slice to fill only with the non-deleted indexes
nonDeleted := []string{}
for i, name := range oldNames {
// not marked for deletion
if !list.ExistInSlice(i, indexesToDelete) {
nonDeleted = append(nonDeleted, name)
continue continue
} }
indexesToDelete = append(indexesToDelete, index)
// store the id to actually delete the file later
form.filesToDelete = append(form.filesToDelete, name)
} }
form.Data[key] = nonDeleted
} }
// check if there are any new uploaded form files // slice to fill only with the non-deleted indexes
files, err := rest.FindUploadedFiles(r, key) nonDeleted := make([]string, 0, len(oldNames))
if err != nil { for i, name := range oldNames {
continue // skip invalid or missing file(s) // not marked for deletion
if !list.ExistInSlice(i, indexesToDelete) {
nonDeleted = append(nonDeleted, name)
continue
}
// store the id to actually delete the file later
form.filesToDelete = append(form.filesToDelete, name)
}
form.Data[key] = nonDeleted
}
// check if there are any new uploaded form files
files, err := rest.FindUploadedFiles(r, key)
if err != nil {
if form.app.IsDebug() {
log.Printf("%q uploaded file error: %v\n", key, err)
} }
// refresh oldNames list continue // skip invalid or missing file(s)
oldNames = list.ToUniqueStringSlice(form.Data[key]) }
if options.MaxSelect == 1 { // refresh oldNames list
// delete previous file(s) before replacing oldNames = list.ToUniqueStringSlice(form.Data[key])
if len(oldNames) > 0 {
form.filesToDelete = list.ToUniqueStringSlice(append(form.filesToDelete, oldNames...)) if options.MaxSelect == 1 {
} // delete previous file(s) before replacing
form.filesToUpload = append(form.filesToUpload, files[0]) if len(oldNames) > 0 {
form.Data[key] = files[0].Name() form.filesToDelete = list.ToUniqueStringSlice(append(form.filesToDelete, oldNames...))
} else if options.MaxSelect > 1 {
// append the id of each uploaded file instance
form.filesToUpload = append(form.filesToUpload, files...)
for _, file := range files {
oldNames = append(oldNames, file.Name())
}
form.Data[key] = oldNames
} }
} else { form.filesToUpload = append(form.filesToUpload, files[0])
form.Data[key] = value form.Data[key] = files[0].Name()
} else if options.MaxSelect > 1 {
// append the id of each uploaded file instance
form.filesToUpload = append(form.filesToUpload, files...)
for _, file := range files {
oldNames = append(oldNames, file.Name())
}
form.Data[key] = oldNames
} }
} }
@@ -270,7 +277,10 @@ func (form *RecordUpsert) DrySubmit(callback func(txDao *daos.Dao) error) error
} }
// Submit validates the form and upserts the form Record model. // Submit validates the form and upserts the form Record model.
func (form *RecordUpsert) Submit() error { //
// You can optionally provide a list of InterceptorFunc to further
// modify the form behavior before persisting it.
func (form *RecordUpsert) Submit(interceptors ...InterceptorFunc) error {
if err := form.Validate(); err != nil { if err := form.Validate(); err != nil {
return err return err
} }
@@ -280,25 +290,27 @@ func (form *RecordUpsert) Submit() error {
return err return err
} }
return form.app.Dao().RunInTransaction(func(txDao *daos.Dao) error { return runInterceptors(func() error {
// persist record model return form.app.Dao().RunInTransaction(func(txDao *daos.Dao) error {
if err := txDao.SaveRecord(form.record); err != nil { // persist record model
return err if err := txDao.SaveRecord(form.record); err != nil {
} return err
}
// upload new files (if any) // upload new files (if any)
if err := form.processFilesToUpload(); err != nil { if err := form.processFilesToUpload(); err != nil {
return err return err
} }
// delete old files (if any) // delete old files (if any)
if err := form.processFilesToDelete(); err != nil { if err := form.processFilesToDelete(); err != nil { //nolint:staticcheck
// for now fail silently to avoid reupload when `form.Submit()` // for now fail silently to avoid reupload when `form.Submit()`
// is called manually (aka. not from an api request)... // is called manually (aka. not from an api request)...
} }
return nil return nil
}) })
}, interceptors...)
} }
func (form *RecordUpsert) processFilesToUpload() error { func (form *RecordUpsert) processFilesToUpload() error {
@@ -316,17 +328,22 @@ func (form *RecordUpsert) processFilesToUpload() error {
} }
defer fs.Close() defer fs.Close()
var uploadErrors []error
for i := len(form.filesToUpload) - 1; i >= 0; i-- { for i := len(form.filesToUpload) - 1; i >= 0; i-- {
file := form.filesToUpload[i] file := form.filesToUpload[i]
path := form.record.BaseFilesPath() + "/" + file.Name() path := form.record.BaseFilesPath() + "/" + file.Name()
if err := fs.Upload(file.Bytes(), path); err == nil { if err := fs.Upload(file.Bytes(), path); err == nil {
// remove the uploaded file from the list
form.filesToUpload = append(form.filesToUpload[:i], form.filesToUpload[i+1:]...) form.filesToUpload = append(form.filesToUpload[:i], form.filesToUpload[i+1:]...)
} else {
// store the upload error
uploadErrors = append(uploadErrors, fmt.Errorf("File %d: %v", i, err))
} }
} }
if len(form.filesToUpload) > 0 { if len(uploadErrors) > 0 {
return errors.New("Failed to upload all files.") return fmt.Errorf("Failed to upload all files: %v", uploadErrors)
} }
return nil return nil
@@ -347,20 +364,25 @@ func (form *RecordUpsert) processFilesToDelete() error {
} }
defer fs.Close() defer fs.Close()
var deleteErrors []error
for i := len(form.filesToDelete) - 1; i >= 0; i-- { for i := len(form.filesToDelete) - 1; i >= 0; i-- {
filename := form.filesToDelete[i] filename := form.filesToDelete[i]
path := form.record.BaseFilesPath() + "/" + filename path := form.record.BaseFilesPath() + "/" + filename
if err := fs.Delete(path); err == nil { if err := fs.Delete(path); err == nil {
// remove the deleted file from the list
form.filesToDelete = append(form.filesToDelete[:i], form.filesToDelete[i+1:]...) form.filesToDelete = append(form.filesToDelete[:i], form.filesToDelete[i+1:]...)
} else {
// store the delete error
deleteErrors = append(deleteErrors, fmt.Errorf("File %d: %v", i, err))
} }
// try to delete the related file thumbs (if any) // try to delete the related file thumbs (if any)
fs.DeletePrefix(form.record.BaseFilesPath() + "/thumbs_" + filename + "/") fs.DeletePrefix(form.record.BaseFilesPath() + "/thumbs_" + filename + "/")
} }
if len(form.filesToDelete) > 0 { if len(deleteErrors) > 0 {
return errors.New("Failed to delete all files.") return fmt.Errorf("Failed to delete all files: %v", deleteErrors)
} }
return nil return nil
+86 -6
View File
@@ -3,6 +3,7 @@ package forms_test
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"path/filepath" "path/filepath"
@@ -97,8 +98,8 @@ func TestRecordUpsertLoadDataJson(t *testing.T) {
if !ok { if !ok {
t.Fatal("Expect onefile field to be set") t.Fatal("Expect onefile field to be set")
} }
if onefile != nil { if onefile != "" {
t.Fatalf("Expect onefile field to be nil, got %v", onefile) t.Fatalf("Expect onefile field to be empty string, got %v", onefile)
} }
manyfiles, ok := form.Data["manyfiles"] manyfiles, ok := form.Data["manyfiles"]
@@ -165,8 +166,8 @@ func TestRecordUpsertLoadDataMultipart(t *testing.T) {
if !ok { if !ok {
t.Fatal("Expect onefile field to be set") t.Fatal("Expect onefile field to be set")
} }
if onefile != nil { if onefile != "" {
t.Fatalf("Expect onefile field to be nil, got %v", onefile) t.Fatalf("Expect onefile field to be empty string, got %v", onefile)
} }
manyfiles, ok := form.Data["manyfiles"] manyfiles, ok := form.Data["manyfiles"]
@@ -400,13 +401,27 @@ func TestRecordUpsertSubmitFailure(t *testing.T) {
req.Header.Set(echo.HeaderContentType, mp.FormDataContentType()) req.Header.Set(echo.HeaderContentType, mp.FormDataContentType())
form.LoadData(req) form.LoadData(req)
interceptorCalls := 0
interceptor := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorCalls++
return next()
}
}
// ensure that validate is triggered // ensure that validate is triggered
// --- // ---
result := form.Submit() result := form.Submit(interceptor)
if result == nil { if result == nil {
t.Fatal("Expected error, got nil") t.Fatal("Expected error, got nil")
} }
// check interceptor calls
// ---
if interceptorCalls != 0 {
t.Fatalf("Expected interceptor to be called 0 times, got %d", interceptorCalls)
}
// ensure that the record changes weren't persisted // ensure that the record changes weren't persisted
// --- // ---
recordAfter, err := app.Dao().FindFirstRecordByData(collection, "id", recordBefore.Id) recordAfter, err := app.Dao().FindFirstRecordByData(collection, "id", recordBefore.Id)
@@ -451,11 +466,25 @@ func TestRecordUpsertSubmitSuccess(t *testing.T) {
req.Header.Set(echo.HeaderContentType, mp.FormDataContentType()) req.Header.Set(echo.HeaderContentType, mp.FormDataContentType())
form.LoadData(req) form.LoadData(req)
result := form.Submit() interceptorCalls := 0
interceptor := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorCalls++
return next()
}
}
result := form.Submit(interceptor)
if result != nil { if result != nil {
t.Fatalf("Expected nil, got error %v", result) t.Fatalf("Expected nil, got error %v", result)
} }
// check interceptor calls
// ---
if interceptorCalls != 1 {
t.Fatalf("Expected interceptor to be called 1 time, got %d", interceptorCalls)
}
// ensure that the record changes were persisted // ensure that the record changes were persisted
// --- // ---
recordAfter, err := app.Dao().FindFirstRecordByData(collection, "id", recordBefore.Id) recordAfter, err := app.Dao().FindFirstRecordByData(collection, "id", recordBefore.Id)
@@ -482,6 +511,57 @@ func TestRecordUpsertSubmitSuccess(t *testing.T) {
} }
} }
func TestRecordUpsertSubmitInterceptors(t *testing.T) {
app, _ := tests.NewTestApp()
defer app.Cleanup()
collection, _ := app.Dao().FindCollectionByNameOrId("demo4")
record, err := app.Dao().FindFirstRecordByData(collection, "id", "054f9f24-0a0a-4e09-87b1-bc7ff2b336a2")
if err != nil {
t.Fatal(err)
}
form := forms.NewRecordUpsert(app, record)
form.Data["title"] = "test_new"
testErr := errors.New("test_error")
interceptorRecordTitle := ""
interceptor1Called := false
interceptor1 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptor1Called = true
return next()
}
}
interceptor2Called := false
interceptor2 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorRecordTitle = record.GetStringDataValue("title") // to check if the record was filled
interceptor2Called = true
return testErr
}
}
submitErr := form.Submit(interceptor1, interceptor2)
if submitErr != testErr {
t.Fatalf("Expected submitError %v, got %v", testErr, submitErr)
}
if !interceptor1Called {
t.Fatalf("Expected interceptor1 to be called")
}
if !interceptor2Called {
t.Fatalf("Expected interceptor2 to be called")
}
if interceptorRecordTitle != form.Data["title"].(string) {
t.Fatalf("Expected the form model to be filled before calling the interceptors")
}
}
func hasRecordFile(app core.App, record *models.Record, filename string) bool { func hasRecordFile(app core.App, record *models.Record, filename string) bool {
fs, _ := app.NewFilesystem() fs, _ := app.NewFilesystem()
defer fs.Close() defer fs.Close()
+20 -15
View File
@@ -33,27 +33,32 @@ func (form *SettingsUpsert) Validate() error {
// Submit validates the form and upserts the loaded settings. // Submit validates the form and upserts the loaded settings.
// //
// On success the app settings will be refreshed with the form ones. // On success the app settings will be refreshed with the form ones.
func (form *SettingsUpsert) Submit() error { //
// You can optionally provide a list of InterceptorFunc to further
// modify the form behavior before persisting it.
func (form *SettingsUpsert) Submit(interceptors ...InterceptorFunc) error {
if err := form.Validate(); err != nil { if err := form.Validate(); err != nil {
return err return err
} }
encryptionKey := os.Getenv(form.app.EncryptionEnv()) encryptionKey := os.Getenv(form.app.EncryptionEnv())
saveErr := form.app.Dao().SaveParam( return runInterceptors(func() error {
models.ParamAppSettings, saveErr := form.app.Dao().SaveParam(
form.Settings, models.ParamAppSettings,
encryptionKey, form.Settings,
) encryptionKey,
if saveErr != nil { )
return saveErr if saveErr != nil {
} return saveErr
}
// explicitly trigger old logs deletion // explicitly trigger old logs deletion
form.app.LogsDao().DeleteOldRequests( form.app.LogsDao().DeleteOldRequests(
time.Now().AddDate(0, 0, -1*form.Settings.Logs.MaxDays), time.Now().AddDate(0, 0, -1*form.Settings.Logs.MaxDays),
) )
// merge the application settings with the form ones // merge the application settings with the form ones
return form.app.Settings().Merge(form.Settings) return form.app.Settings().Merge(form.Settings)
}, interceptors...)
} }
+58 -1
View File
@@ -2,6 +2,7 @@ package forms_test
import ( import (
"encoding/json" "encoding/json"
"errors"
"os" "os"
"testing" "testing"
@@ -98,14 +99,31 @@ func TestSettingsUpsertSubmit(t *testing.T) {
continue continue
} }
interceptorCalls := 0
interceptor := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorCalls++
return next()
}
}
// parse errors // parse errors
result := form.Submit() result := form.Submit(interceptor)
errs, ok := result.(validation.Errors) errs, ok := result.(validation.Errors)
if !ok && result != nil { if !ok && result != nil {
t.Errorf("(%d) Failed to parse errors %v", i, result) t.Errorf("(%d) Failed to parse errors %v", i, result)
continue continue
} }
// check interceptor calls
expectInterceptorCall := 1
if len(s.expectedErrors) > 0 {
expectInterceptorCall = 0
}
if interceptorCalls != expectInterceptorCall {
t.Errorf("(%d) Expected interceptor to be called %d, got %d", i, expectInterceptorCall, interceptorCalls)
}
// check errors // check errors
if len(errs) > len(s.expectedErrors) { if len(errs) > len(s.expectedErrors) {
t.Errorf("(%d) Expected error keys %v, got %v", i, s.expectedErrors, errs) t.Errorf("(%d) Expected error keys %v, got %v", i, s.expectedErrors, errs)
@@ -128,3 +146,42 @@ func TestSettingsUpsertSubmit(t *testing.T) {
} }
} }
} }
func TestSettingsUpsertSubmitInterceptors(t *testing.T) {
app, _ := tests.NewTestApp()
defer app.Cleanup()
form := forms.NewSettingsUpsert(app)
form.Meta.AppName = "test_new"
testErr := errors.New("test_error")
interceptor1Called := false
interceptor1 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptor1Called = true
return next()
}
}
interceptor2Called := false
interceptor2 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptor2Called = true
return testErr
}
}
submitErr := form.Submit(interceptor1, interceptor2)
if submitErr != testErr {
t.Fatalf("Expected submitError %v, got %v", testErr, submitErr)
}
if !interceptor1Called {
t.Fatalf("Expected interceptor1 to be called")
}
if !interceptor2Called {
t.Fatalf("Expected interceptor2 to be called")
}
}
+25 -24
View File
@@ -98,35 +98,36 @@ func (form *UserOauth2Login) Submit() (*models.User, *auth.AuthUser, error) {
return nil, authData, err return nil, authData, err
} }
} }
} else { return user, authData, nil
if !config.AllowRegistrations { }
// registration of new users is not allowed via the Oauth2 provider
return nil, authData, errors.New("Cannot find user with the authorized email.")
}
// create new user if !config.AllowRegistrations {
user = &models.User{Verified: true} // registration of new users is not allowed via the Oauth2 provider
upsertForm := NewUserUpsert(form.app, user) return nil, authData, errors.New("Cannot find user with the authorized email.")
upsertForm.Email = authData.Email }
upsertForm.Password = security.RandomString(30)
upsertForm.PasswordConfirm = upsertForm.Password
event := &core.UserOauth2RegisterEvent{ // create new user
User: user, user = &models.User{Verified: true}
AuthData: authData, upsertForm := NewUserUpsert(form.app, user)
} upsertForm.Email = authData.Email
upsertForm.Password = security.RandomString(30)
upsertForm.PasswordConfirm = upsertForm.Password
if err := form.app.OnUserBeforeOauth2Register().Trigger(event); err != nil { event := &core.UserOauth2RegisterEvent{
return nil, authData, err User: user,
} AuthData: authData,
}
if err := upsertForm.Submit(); err != nil { if err := form.app.OnUserBeforeOauth2Register().Trigger(event); err != nil {
return nil, authData, err return nil, authData, err
} }
if err := form.app.OnUserAfterOauth2Register().Trigger(event); err != nil { if err := upsertForm.Submit(); err != nil {
return nil, authData, err return nil, authData, err
} }
if err := form.app.OnUserAfterOauth2Register().Trigger(event); err != nil {
return nil, authData, err
} }
return user, authData, nil return user, authData, nil
+7 -2
View File
@@ -98,7 +98,10 @@ func (form *UserUpsert) checkEmailDomain(value any) error {
} }
// Submit validates the form and upserts the form user model. // Submit validates the form and upserts the form user model.
func (form *UserUpsert) Submit() error { //
// You can optionally provide a list of InterceptorFunc to further
// modify the form behavior before persisting it.
func (form *UserUpsert) Submit(interceptors ...InterceptorFunc) error {
if err := form.Validate(); err != nil { if err := form.Validate(); err != nil {
return err return err
} }
@@ -114,5 +117,7 @@ func (form *UserUpsert) Submit() error {
form.user.Email = form.Email form.user.Email = form.Email
return form.app.Dao().SaveUser(form.user) return runInterceptors(func() error {
return form.app.Dao().SaveUser(form.user)
}, interceptors...)
} }
+65 -1
View File
@@ -2,6 +2,7 @@ package forms_test
import ( import (
"encoding/json" "encoding/json"
"errors"
"testing" "testing"
validation "github.com/go-ozzo/ozzo-validation/v4" validation "github.com/go-ozzo/ozzo-validation/v4"
@@ -212,13 +213,28 @@ func TestUserUpsertSubmit(t *testing.T) {
continue continue
} }
err := form.Submit() interceptorCalls := 0
err := form.Submit(func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorCalls++
return next()
}
})
hasErr := err != nil hasErr := err != nil
if hasErr != s.expectError { if hasErr != s.expectError {
t.Errorf("(%d) Expected hasErr to be %v, got %v (%v)", i, s.expectError, hasErr, err) t.Errorf("(%d) Expected hasErr to be %v, got %v (%v)", i, s.expectError, hasErr, err)
} }
expectInterceptorCall := 1
if s.expectError {
expectInterceptorCall = 0
}
if interceptorCalls != expectInterceptorCall {
t.Errorf("(%d) Expected interceptor to be called %d, got %d", i, expectInterceptorCall, interceptorCalls)
}
if s.expectError { if s.expectError {
continue continue
} }
@@ -240,3 +256,51 @@ func TestUserUpsertSubmit(t *testing.T) {
} }
} }
} }
func TestUserUpsertSubmitInterceptors(t *testing.T) {
app, _ := tests.NewTestApp()
defer app.Cleanup()
user := &models.User{}
form := forms.NewUserUpsert(app, user)
form.Email = "test_new@example.com"
form.Password = "1234567890"
form.PasswordConfirm = form.Password
testErr := errors.New("test_error")
interceptorUserEmail := ""
interceptor1Called := false
interceptor1 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptor1Called = true
return next()
}
}
interceptor2Called := false
interceptor2 := func(next forms.InterceptorNextFunc) forms.InterceptorNextFunc {
return func() error {
interceptorUserEmail = user.Email // to check if the record was filled
interceptor2Called = true
return testErr
}
}
err := form.Submit(interceptor1, interceptor2)
if err != testErr {
t.Fatalf("Expected error %v, got %v", testErr, err)
}
if !interceptor1Called {
t.Fatalf("Expected interceptor1 to be called")
}
if !interceptor2Called {
t.Fatalf("Expected interceptor2 to be called")
}
if interceptorUserEmail != form.Email {
t.Fatalf("Expected the form model to be filled before calling the interceptors")
}
}
+18 -32
View File
@@ -240,7 +240,6 @@ func (validator *RecordDataValidator) checkUrlValue(field *schema.SchemaField, v
func (validator *RecordDataValidator) checkDateValue(field *schema.SchemaField, value any) error { func (validator *RecordDataValidator) checkDateValue(field *schema.SchemaField, value any) error {
val, _ := value.(types.DateTime) val, _ := value.(types.DateTime)
if val.IsZero() { if val.IsZero() {
if field.Required { if field.Required {
return requiredErr return requiredErr
@@ -268,6 +267,9 @@ func (validator *RecordDataValidator) checkDateValue(field *schema.SchemaField,
func (validator *RecordDataValidator) checkSelectValue(field *schema.SchemaField, value any) error { func (validator *RecordDataValidator) checkSelectValue(field *schema.SchemaField, value any) error {
normalizedVal := list.ToUniqueStringSlice(value) normalizedVal := list.ToUniqueStringSlice(value)
if len(normalizedVal) == 0 { if len(normalizedVal) == 0 {
if field.Required {
return requiredErr
}
return nil // nothing to check return nil // nothing to check
} }
@@ -302,13 +304,9 @@ func (validator *RecordDataValidator) checkJsonValue(field *schema.SchemaField,
} }
func (validator *RecordDataValidator) checkFileValue(field *schema.SchemaField, value any) error { func (validator *RecordDataValidator) checkFileValue(field *schema.SchemaField, value any) error {
// normalize value access names := list.ToUniqueStringSlice(value)
var names []string if len(names) == 0 && field.Required {
switch v := value.(type) { return requiredErr
case []string:
names = v
case string:
names = []string{v}
} }
options, _ := field.Options.(*schema.FileOptions) options, _ := field.Options.(*schema.FileOptions)
@@ -318,12 +316,10 @@ func (validator *RecordDataValidator) checkFileValue(field *schema.SchemaField,
} }
// extract the uploaded files // extract the uploaded files
files := []*rest.UploadedFile{} files := make([]*rest.UploadedFile, 0, len(validator.uploadedFiles))
if len(validator.uploadedFiles) > 0 { for _, file := range validator.uploadedFiles {
for _, file := range validator.uploadedFiles { if list.ExistInSlice(file.Name(), names) {
if list.ExistInSlice(file.Name(), names) { files = append(files, file)
files = append(files, file)
}
} }
} }
@@ -345,16 +341,11 @@ func (validator *RecordDataValidator) checkFileValue(field *schema.SchemaField,
} }
func (validator *RecordDataValidator) checkRelationValue(field *schema.SchemaField, value any) error { func (validator *RecordDataValidator) checkRelationValue(field *schema.SchemaField, value any) error {
// normalize value access ids := list.ToUniqueStringSlice(value)
var ids []string
switch v := value.(type) {
case []string:
ids = v
case string:
ids = []string{v}
}
if len(ids) == 0 { if len(ids) == 0 {
if field.Required {
return requiredErr
}
return nil // nothing to check return nil // nothing to check
} }
@@ -385,16 +376,11 @@ func (validator *RecordDataValidator) checkRelationValue(field *schema.SchemaFie
} }
func (validator *RecordDataValidator) checkUserValue(field *schema.SchemaField, value any) error { func (validator *RecordDataValidator) checkUserValue(field *schema.SchemaField, value any) error {
// normalize value access ids := list.ToUniqueStringSlice(value)
var ids []string
switch v := value.(type) {
case []string:
ids = v
case string:
ids = []string{v}
}
if len(ids) == 0 { if len(ids) == 0 {
if field.Required {
return requiredErr
}
return nil // nothing to check return nil // nothing to check
} }
+62 -62
View File
@@ -89,7 +89,7 @@ func TestRecordDataValidatorValidateText(t *testing.T) {
scenarios := []testDataFieldScenario{ scenarios := []testDataFieldScenario{
{ {
"check required constraint", "(text) check required constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": nil, "field2": nil,
@@ -99,7 +99,7 @@ func TestRecordDataValidatorValidateText(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check unique constraint", "(text) check unique constraint",
map[string]any{ map[string]any{
"field1": "test", "field1": "test",
"field2": "test", "field2": "test",
@@ -109,7 +109,7 @@ func TestRecordDataValidatorValidateText(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check min constraint", "(text) check min constraint",
map[string]any{ map[string]any{
"field1": "test", "field1": "test",
"field2": "test", "field2": "test",
@@ -119,7 +119,7 @@ func TestRecordDataValidatorValidateText(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check max constraint", "(text) check max constraint",
map[string]any{ map[string]any{
"field1": "test", "field1": "test",
"field2": "test", "field2": "test",
@@ -129,7 +129,7 @@ func TestRecordDataValidatorValidateText(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check pattern constraint", "(text) check pattern constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": "test", "field2": "test",
@@ -139,7 +139,7 @@ func TestRecordDataValidatorValidateText(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"valid data (only required)", "(text) valid data (only required)",
map[string]any{ map[string]any{
"field2": "test", "field2": "test",
}, },
@@ -147,7 +147,7 @@ func TestRecordDataValidatorValidateText(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"valid data (all)", "(text) valid data (all)",
map[string]any{ map[string]any{
"field1": "test", "field1": "test",
"field2": 12345, // test value cast "field2": 12345, // test value cast
@@ -168,7 +168,7 @@ func TestRecordDataValidatorValidateNumber(t *testing.T) {
// create new test collection // create new test collection
collection := &models.Collection{} collection := &models.Collection{}
collection.Name = "validate_test" collection.Name = "validate_test"
min := 1.0 min := 0.0
max := 150.0 max := 150.0
collection.Schema = schema.NewSchema( collection.Schema = schema.NewSchema(
&schema.SchemaField{ &schema.SchemaField{
@@ -205,7 +205,7 @@ func TestRecordDataValidatorValidateNumber(t *testing.T) {
scenarios := []testDataFieldScenario{ scenarios := []testDataFieldScenario{
{ {
"check required constraint", "(number) check required constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": nil, "field2": nil,
@@ -215,17 +215,17 @@ func TestRecordDataValidatorValidateNumber(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check required constraint + casting", "(number) check required constraint + casting",
map[string]any{ map[string]any{
"field1": "invalid", "field1": "invalid",
"field2": "invalid", "field2": "invalid",
"field3": "invalid", "field3": "invalid",
}, },
nil, nil,
[]string{"field2", "field3"}, []string{"field2"},
}, },
{ {
"check unique constraint", "(number) check unique constraint",
map[string]any{ map[string]any{
"field1": 123, "field1": 123,
"field2": 123, "field2": 123,
@@ -235,7 +235,7 @@ func TestRecordDataValidatorValidateNumber(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check min constraint", "(number) check min constraint",
map[string]any{ map[string]any{
"field1": 0.5, "field1": 0.5,
"field2": 1, "field2": 1,
@@ -245,7 +245,7 @@ func TestRecordDataValidatorValidateNumber(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check max constraint", "(number) check max constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": max, "field2": max,
@@ -255,7 +255,7 @@ func TestRecordDataValidatorValidateNumber(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"valid data (only required)", "(number) valid data (only required)",
map[string]any{ map[string]any{
"field2": 1, "field2": 1,
}, },
@@ -263,7 +263,7 @@ func TestRecordDataValidatorValidateNumber(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"valid data (all)", "(number) valid data (all)",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": 123, // test value cast "field2": 123, // test value cast
@@ -316,7 +316,7 @@ func TestRecordDataValidatorValidateBool(t *testing.T) {
scenarios := []testDataFieldScenario{ scenarios := []testDataFieldScenario{
{ {
"check required constraint", "(bool) check required constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": nil, "field2": nil,
@@ -326,7 +326,7 @@ func TestRecordDataValidatorValidateBool(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check required constraint + casting", "(bool) check required constraint + casting",
map[string]any{ map[string]any{
"field1": "invalid", "field1": "invalid",
"field2": "invalid", "field2": "invalid",
@@ -336,7 +336,7 @@ func TestRecordDataValidatorValidateBool(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check unique constraint", "(bool) check unique constraint",
map[string]any{ map[string]any{
"field1": true, "field1": true,
"field2": true, "field2": true,
@@ -346,7 +346,7 @@ func TestRecordDataValidatorValidateBool(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"valid data (only required)", "(bool) valid data (only required)",
map[string]any{ map[string]any{
"field2": 1, "field2": 1,
}, },
@@ -354,7 +354,7 @@ func TestRecordDataValidatorValidateBool(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"valid data (all)", "(bool) valid data (all)",
map[string]any{ map[string]any{
"field1": false, "field1": false,
"field2": true, "field2": true,
@@ -412,7 +412,7 @@ func TestRecordDataValidatorValidateEmail(t *testing.T) {
scenarios := []testDataFieldScenario{ scenarios := []testDataFieldScenario{
{ {
"check required constraint", "(email) check required constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": nil, "field2": nil,
@@ -422,7 +422,7 @@ func TestRecordDataValidatorValidateEmail(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check email format validator", "(email) check email format validator",
map[string]any{ map[string]any{
"field1": "test", "field1": "test",
"field2": "test.com", "field2": "test.com",
@@ -432,7 +432,7 @@ func TestRecordDataValidatorValidateEmail(t *testing.T) {
[]string{"field1", "field2", "field3"}, []string{"field1", "field2", "field3"},
}, },
{ {
"check unique constraint", "(email) check unique constraint",
map[string]any{ map[string]any{
"field1": "test@example.com", "field1": "test@example.com",
"field2": "test@test.com", "field2": "test@test.com",
@@ -442,7 +442,7 @@ func TestRecordDataValidatorValidateEmail(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check ExceptDomains constraint", "(email) check ExceptDomains constraint",
map[string]any{ map[string]any{
"field1": "test@example.com", "field1": "test@example.com",
"field2": "test@example.com", "field2": "test@example.com",
@@ -452,7 +452,7 @@ func TestRecordDataValidatorValidateEmail(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check OnlyDomains constraint", "(email) check OnlyDomains constraint",
map[string]any{ map[string]any{
"field1": "test@test.com", "field1": "test@test.com",
"field2": "test@test.com", "field2": "test@test.com",
@@ -462,7 +462,7 @@ func TestRecordDataValidatorValidateEmail(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"valid data (only required)", "(email) valid data (only required)",
map[string]any{ map[string]any{
"field2": "test@test.com", "field2": "test@test.com",
}, },
@@ -470,7 +470,7 @@ func TestRecordDataValidatorValidateEmail(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"valid data (all)", "(email) valid data (all)",
map[string]any{ map[string]any{
"field1": "123@example.com", "field1": "123@example.com",
"field2": "test@test.com", "field2": "test@test.com",
@@ -528,7 +528,7 @@ func TestRecordDataValidatorValidateUrl(t *testing.T) {
scenarios := []testDataFieldScenario{ scenarios := []testDataFieldScenario{
{ {
"check required constraint", "(url) check required constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": nil, "field2": nil,
@@ -538,7 +538,7 @@ func TestRecordDataValidatorValidateUrl(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check url format validator", "(url) check url format validator",
map[string]any{ map[string]any{
"field1": "/abc", "field1": "/abc",
"field2": "test.com", // valid "field2": "test.com", // valid
@@ -548,7 +548,7 @@ func TestRecordDataValidatorValidateUrl(t *testing.T) {
[]string{"field1", "field3"}, []string{"field1", "field3"},
}, },
{ {
"check unique constraint", "(url) check unique constraint",
map[string]any{ map[string]any{
"field1": "http://example.com", "field1": "http://example.com",
"field2": "http://test.com", "field2": "http://test.com",
@@ -558,7 +558,7 @@ func TestRecordDataValidatorValidateUrl(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check ExceptDomains constraint", "(url) check ExceptDomains constraint",
map[string]any{ map[string]any{
"field1": "http://example.com", "field1": "http://example.com",
"field2": "http://example.com", "field2": "http://example.com",
@@ -568,7 +568,7 @@ func TestRecordDataValidatorValidateUrl(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check OnlyDomains constraint", "(url) check OnlyDomains constraint",
map[string]any{ map[string]any{
"field1": "http://test.com/abc", "field1": "http://test.com/abc",
"field2": "http://test.com/abc", "field2": "http://test.com/abc",
@@ -578,7 +578,7 @@ func TestRecordDataValidatorValidateUrl(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check subdomains constraint", "(url) check subdomains constraint",
map[string]any{ map[string]any{
"field1": "http://test.test.com", "field1": "http://test.test.com",
"field2": "http://test.example.com", "field2": "http://test.example.com",
@@ -588,7 +588,7 @@ func TestRecordDataValidatorValidateUrl(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"valid data (only required)", "(url) valid data (only required)",
map[string]any{ map[string]any{
"field2": "http://sub.test.com/abc", "field2": "http://sub.test.com/abc",
}, },
@@ -596,7 +596,7 @@ func TestRecordDataValidatorValidateUrl(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"valid data (all)", "(url) valid data (all)",
map[string]any{ map[string]any{
"field1": "http://example.com/123", "field1": "http://example.com/123",
"field2": "http://test.com/", "field2": "http://test.com/",
@@ -656,7 +656,7 @@ func TestRecordDataValidatorValidateDate(t *testing.T) {
scenarios := []testDataFieldScenario{ scenarios := []testDataFieldScenario{
{ {
"check required constraint", "(date) check required constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": nil, "field2": nil,
@@ -666,7 +666,7 @@ func TestRecordDataValidatorValidateDate(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check required constraint + cast", "(date) check required constraint + cast",
map[string]any{ map[string]any{
"field1": "invalid", "field1": "invalid",
"field2": "invalid", "field2": "invalid",
@@ -676,7 +676,7 @@ func TestRecordDataValidatorValidateDate(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check required constraint + zero datetime", "(date) check required constraint + zero datetime",
map[string]any{ map[string]any{
"field1": "January 1, year 1, 00:00:00 UTC", "field1": "January 1, year 1, 00:00:00 UTC",
"field2": "0001-01-01 00:00:00", "field2": "0001-01-01 00:00:00",
@@ -686,7 +686,7 @@ func TestRecordDataValidatorValidateDate(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check unique constraint", "(date) check unique constraint",
map[string]any{ map[string]any{
"field1": "2029-01-01 01:01:01.123", "field1": "2029-01-01 01:01:01.123",
"field2": "2029-01-01 01:01:01.123", "field2": "2029-01-01 01:01:01.123",
@@ -696,7 +696,7 @@ func TestRecordDataValidatorValidateDate(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check min date constraint", "(date) check min date constraint",
map[string]any{ map[string]any{
"field1": "2021-01-01 01:01:01", "field1": "2021-01-01 01:01:01",
"field2": "2021-01-01 01:01:01", "field2": "2021-01-01 01:01:01",
@@ -706,7 +706,7 @@ func TestRecordDataValidatorValidateDate(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check max date constraint", "(date) check max date constraint",
map[string]any{ map[string]any{
"field1": "2030-02-01 01:01:01", "field1": "2030-02-01 01:01:01",
"field2": "2030-02-01 01:01:01", "field2": "2030-02-01 01:01:01",
@@ -716,7 +716,7 @@ func TestRecordDataValidatorValidateDate(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"valid data (only required)", "(date) valid data (only required)",
map[string]any{ map[string]any{
"field2": "2029-01-01 01:01:01", "field2": "2029-01-01 01:01:01",
}, },
@@ -724,7 +724,7 @@ func TestRecordDataValidatorValidateDate(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"valid data (all)", "(date) valid data (all)",
map[string]any{ map[string]any{
"field1": "2029-01-01 01:01:01.000", "field1": "2029-01-01 01:01:01.000",
"field2": "2029-01-01 01:01:01", "field2": "2029-01-01 01:01:01",
@@ -788,7 +788,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
scenarios := []testDataFieldScenario{ scenarios := []testDataFieldScenario{
{ {
"check required constraint", "(select) check required constraint",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": nil, "field2": nil,
@@ -798,7 +798,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check required constraint - empty values", "(select) check required constraint - empty values",
map[string]any{ map[string]any{
"field1": "", "field1": "",
"field2": "", "field2": "",
@@ -808,7 +808,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check required constraint - multiple select cast", "(select) check required constraint - multiple select cast",
map[string]any{ map[string]any{
"field1": "a", "field1": "a",
"field2": "a", "field2": "a",
@@ -818,7 +818,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"check unique constraint", "(select) check unique constraint",
map[string]any{ map[string]any{
"field1": "a", "field1": "a",
"field2": "b", "field2": "b",
@@ -828,7 +828,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check unique constraint - same elements but different order", "(select) check unique constraint - same elements but different order",
map[string]any{ map[string]any{
"field1": "a", "field1": "a",
"field2": "b", "field2": "b",
@@ -838,7 +838,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"check Values constraint", "(select) check Values constraint",
map[string]any{ map[string]any{
"field1": 1, "field1": 1,
"field2": "d", "field2": "d",
@@ -848,7 +848,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
[]string{"field2", "field3"}, []string{"field2", "field3"},
}, },
{ {
"check MaxSelect constraint", "(select) check MaxSelect constraint",
map[string]any{ map[string]any{
"field1": []string{"a", "b"}, // this will be normalized to a single string value "field1": []string{"a", "b"}, // this will be normalized to a single string value
"field2": []string{"a", "b", "c"}, "field2": []string{"a", "b", "c"},
@@ -858,7 +858,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"valid data - only required fields", "(select) valid data - only required fields",
map[string]any{ map[string]any{
"field2": []string{"a", "b"}, "field2": []string{"a", "b"},
}, },
@@ -866,7 +866,7 @@ func TestRecordDataValidatorValidateSelect(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"valid data - all fields with normalizations", "(select) valid data - all fields with normalizations",
map[string]any{ map[string]any{
"field1": "a", "field1": "a",
"field2": []string{"a", "b", "b"}, // will be collapsed "field2": []string{"a", "b", "b"}, // will be collapsed
@@ -918,7 +918,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
scenarios := []testDataFieldScenario{ scenarios := []testDataFieldScenario{
{ {
"check required constraint - nil", "(json) check required constraint - nil",
map[string]any{ map[string]any{
"field1": nil, "field1": nil,
"field2": nil, "field2": nil,
@@ -928,7 +928,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check required constraint - zero string", "(json) check required constraint - zero string",
map[string]any{ map[string]any{
"field1": "", "field1": "",
"field2": "", "field2": "",
@@ -938,7 +938,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
[]string{"field2"}, []string{"field2"},
}, },
{ {
"check required constraint - zero number", "(json) check required constraint - zero number",
map[string]any{ map[string]any{
"field1": 0, "field1": 0,
"field2": 0, "field2": 0,
@@ -948,7 +948,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"check required constraint - zero slice", "(json) check required constraint - zero slice",
map[string]any{ map[string]any{
"field1": []string{}, "field1": []string{},
"field2": []string{}, "field2": []string{},
@@ -958,7 +958,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"check required constraint - zero map", "(json) check required constraint - zero map",
map[string]any{ map[string]any{
"field1": map[string]string{}, "field1": map[string]string{},
"field2": map[string]string{}, "field2": map[string]string{},
@@ -968,7 +968,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"check unique constraint", "(json) check unique constraint",
map[string]any{ map[string]any{
"field1": `{"test":123}`, "field1": `{"test":123}`,
"field2": `{"test":123}`, "field2": `{"test":123}`,
@@ -978,7 +978,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
[]string{"field3"}, []string{"field3"},
}, },
{ {
"check json text validator", "(json) check json text validator",
map[string]any{ map[string]any{
"field1": `[1, 2, 3`, "field1": `[1, 2, 3`,
"field2": `invalid`, "field2": `invalid`,
@@ -988,7 +988,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
[]string{"field1", "field2"}, []string{"field1", "field2"},
}, },
{ {
"valid data - only required fields", "(json) valid data - only required fields",
map[string]any{ map[string]any{
"field2": `{"test":123}`, "field2": `{"test":123}`,
}, },
@@ -996,7 +996,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
[]string{}, []string{},
}, },
{ {
"valid data - all fields with normalizations", "(json) valid data - all fields with normalizations",
map[string]any{ map[string]any{
"field1": []string{"a", "b", "c"}, "field1": []string{"a", "b", "c"},
"field2": 123, "field2": 123,
+2 -2
View File
@@ -16,8 +16,8 @@ const AdminPasswordResetBody = `
<p>Follow this link to reset your admin password for {{.AppName}}.</p> <p>Follow this link to reset your admin password for {{.AppName}}.</p>
<p> <p>
<a class="btn" href="{{.ActionUrl}}">Reset password</a> <a class="btn" href="{{.ActionUrl}}" target="_blank" rel="noopener">Reset password</a>
<a class="fallback-link" href="{{.ActionUrl}}">{{.ActionUrl}}</a> <a class="fallback-link" href="{{.ActionUrl}}" target="_blank" rel="noopener">{{.ActionUrl}}</a>
</p> </p>
<p><i>If you did not request to reset your password, please ignore this email and the link will expire on its own.</i></p> <p><i>If you did not request to reset your password, please ignore this email and the link will expire on its own.</i></p>
+2 -2
View File
@@ -14,8 +14,8 @@ const UserConfirmEmailChangeBody = `
<p>Hello,</p> <p>Hello,</p>
<p>Click on the button below to confirm your new email address.</p> <p>Click on the button below to confirm your new email address.</p>
<p> <p>
<a class="btn" href="{{.ActionUrl}}">Confirm new email</a> <a class="btn" href="{{.ActionUrl}}" target="_blank" rel="noopener">Confirm new email</a>
<a class="fallback-link" href="{{.ActionUrl}}">{{.ActionUrl}}</a> <a class="fallback-link" href="{{.ActionUrl}}" target="_blank" rel="noopener">{{.ActionUrl}}</a>
</p> </p>
<p><i>If you didn’t ask to change your email address, you can ignore this email.</i></p> <p><i>If you didn’t ask to change your email address, you can ignore this email.</i></p>
<p> <p>
+2 -2
View File
@@ -14,8 +14,8 @@ const UserPasswordResetBody = `
<p>Hello,</p> <p>Hello,</p>
<p>Click on the button below to reset your password.</p> <p>Click on the button below to reset your password.</p>
<p> <p>
<a class="btn" href="{{.ActionUrl}}">Reset password</a> <a class="btn" href="{{.ActionUrl}}" target="_blank" rel="noopener">Reset password</a>
<a class="fallback-link" href="{{.ActionUrl}}">{{.ActionUrl}}</a> <a class="fallback-link" href="{{.ActionUrl}}" target="_blank" rel="noopener">{{.ActionUrl}}</a>
</p> </p>
<p><i>If you didn’t ask to reset your password, you can ignore this email.</i></p> <p><i>If you didn’t ask to reset your password, you can ignore this email.</i></p>
<p> <p>
+2 -2
View File
@@ -15,8 +15,8 @@ const UserVerificationBody = `
<p>Thank you for joining us at {{.AppName}}.</p> <p>Thank you for joining us at {{.AppName}}.</p>
<p>Click on the button below to verify your email address.</p> <p>Click on the button below to verify your email address.</p>
<p> <p>
<a class="btn" href="{{.ActionUrl}}">Verify</a> <a class="btn" href="{{.ActionUrl}}" target="_blank" rel="noopener">Verify</a>
<a class="fallback-link" href="{{.ActionUrl}}">{{.ActionUrl}}</a> <a class="fallback-link" href="{{.ActionUrl}}" target="_blank" rel="noopener">{{.ActionUrl}}</a>
</p> </p>
<p> <p>
Thanks,<br/> Thanks,<br/>
+7 -1
View File
@@ -15,6 +15,12 @@ type ColumnValueMapper interface {
ColumnValueMap() map[string]any ColumnValueMap() map[string]any
} }
// FilesManager defines an interface with common methods that files manager models should implement.
type FilesManager interface {
// BaseFilesPath returns the storage dir path used by the interface instance.
BaseFilesPath() string
}
// Model defines an interface with common methods that all db models should have. // Model defines an interface with common methods that all db models should have.
type Model interface { type Model interface {
TableName() string TableName() string
@@ -71,7 +77,7 @@ func (m *BaseModel) RefreshCreated() {
m.Created = types.NowDateTime() m.Created = types.NowDateTime()
} }
// RefreshUpdated updates the model's Created field with the current datetime. // RefreshUpdated updates the model's Updated field with the current datetime.
func (m *BaseModel) RefreshUpdated() { func (m *BaseModel) RefreshUpdated() {
m.Updated = types.NowDateTime() m.Updated = types.NowDateTime()
} }
+1
View File
@@ -3,6 +3,7 @@ package models
import "github.com/pocketbase/pocketbase/models/schema" import "github.com/pocketbase/pocketbase/models/schema"
var _ Model = (*Collection)(nil) var _ Model = (*Collection)(nil)
var _ FilesManager = (*Collection)(nil)
type Collection struct { type Collection struct {
BaseModel BaseModel
+4 -3
View File
@@ -16,6 +16,7 @@ import (
var _ Model = (*Record)(nil) var _ Model = (*Record)(nil)
var _ ColumnValueMapper = (*Record)(nil) var _ ColumnValueMapper = (*Record)(nil)
var _ FilesManager = (*Record)(nil)
type Record struct { type Record struct {
BaseModel BaseModel
@@ -68,10 +69,10 @@ func NewRecordFromNullStringMap(collection *Collection, data dbx.NullStringMap)
// NewRecordsFromNullStringMaps initializes a new Record model for // NewRecordsFromNullStringMaps initializes a new Record model for
// each row in the provided NullStringMap slice. // each row in the provided NullStringMap slice.
func NewRecordsFromNullStringMaps(collection *Collection, rows []dbx.NullStringMap) []*Record { func NewRecordsFromNullStringMaps(collection *Collection, rows []dbx.NullStringMap) []*Record {
result := []*Record{} result := make([]*Record, len(rows))
for _, row := range rows { for i, row := range rows {
result = append(result, NewRecordFromNullStringMap(collection, row)) result[i] = NewRecordFromNullStringMap(collection, row)
} }
return result return result
+3 -3
View File
@@ -118,7 +118,7 @@ func TestNewRecordFromNullStringMap(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
expected := `{"@collectionId":"","@collectionName":"test","created":"2022-01-01 10:00:00.123","field1":"test","field2":null,"field3":true,"field4":123.123,"field5":"test1","field6":["test"],"id":"c23eb053-d07e-4fbe-86b3-b8ac31982e9a","updated":"2022-01-01 10:00:00.456"}` expected := `{"@collectionId":"","@collectionName":"test","created":"2022-01-01 10:00:00.123","field1":"test","field2":"","field3":true,"field4":123.123,"field5":"test1","field6":["test"],"id":"c23eb053-d07e-4fbe-86b3-b8ac31982e9a","updated":"2022-01-01 10:00:00.456"}`
if string(encoded) != expected { if string(encoded) != expected {
t.Fatalf("Expected %v, got \n%v", expected, string(encoded)) t.Fatalf("Expected %v, got \n%v", expected, string(encoded))
@@ -185,10 +185,10 @@ func TestNewRecordsFromNullStringMaps(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
expected := `[{"@collectionId":"","@collectionName":"test","created":"2022-01-01 10:00:00.123","field1":"test1","field2":null,"id":"11111111-d07e-4fbe-86b3-b8ac31982e9a","updated":"2022-01-01 10:00:00.456"},{"@collectionId":"","@collectionName":"test","created":"","field1":"test2","field2":123,"id":"22222222-d07e-4fbe-86b3-b8ac31982e9a","updated":""}]` expected := `[{"@collectionId":"","@collectionName":"test","created":"2022-01-01 10:00:00.123","field1":"test1","field2":0,"id":"11111111-d07e-4fbe-86b3-b8ac31982e9a","updated":"2022-01-01 10:00:00.456"},{"@collectionId":"","@collectionName":"test","created":"","field1":"test2","field2":123,"id":"22222222-d07e-4fbe-86b3-b8ac31982e9a","updated":""}]`
if string(encoded) != expected { if string(encoded) != expected {
t.Fatalf("Expected %v, got \n%v", expected, string(encoded)) t.Fatalf("Expected \n%v, got \n%v", expected, string(encoded))
} }
} }
+13 -25
View File
@@ -218,31 +218,19 @@ func (f *SchemaField) PrepareValue(value any) any {
f.InitOptions() f.InitOptions()
switch f.Type { switch f.Type {
case FieldTypeText, FieldTypeEmail, FieldTypeUrl: // string case FieldTypeText, FieldTypeEmail, FieldTypeUrl:
if value == nil {
return nil
}
return cast.ToString(value) return cast.ToString(value)
case FieldTypeJson: // string case FieldTypeJson:
if value == nil {
return nil
}
val, _ := types.ParseJsonRaw(value) val, _ := types.ParseJsonRaw(value)
return val return val
case FieldTypeNumber: // nil, int or float case FieldTypeNumber:
if value == nil {
return nil
}
return cast.ToFloat64(value) return cast.ToFloat64(value)
case FieldTypeBool: // bool case FieldTypeBool:
return cast.ToBool(value) return cast.ToBool(value)
case FieldTypeDate: // string, DateTime or time.Time case FieldTypeDate:
if value == nil {
return nil
}
val, _ := types.ParseDateTime(value) val, _ := types.ParseDateTime(value)
return val return val
case FieldTypeSelect: // nil, string or slice of strings case FieldTypeSelect:
val := list.ToUniqueStringSlice(value) val := list.ToUniqueStringSlice(value)
options, _ := f.Options.(*SelectOptions) options, _ := f.Options.(*SelectOptions)
@@ -250,11 +238,11 @@ func (f *SchemaField) PrepareValue(value any) any {
if len(val) > 0 { if len(val) > 0 {
return val[0] return val[0]
} }
return nil return ""
} }
return val return val
case FieldTypeFile: // nil, string or slice of strings case FieldTypeFile:
val := list.ToUniqueStringSlice(value) val := list.ToUniqueStringSlice(value)
options, _ := f.Options.(*FileOptions) options, _ := f.Options.(*FileOptions)
@@ -262,11 +250,11 @@ func (f *SchemaField) PrepareValue(value any) any {
if len(val) > 0 { if len(val) > 0 {
return val[0] return val[0]
} }
return nil return ""
} }
return val return val
case FieldTypeRelation: // nil, string or slice of strings case FieldTypeRelation:
ids := list.ToUniqueStringSlice(value) ids := list.ToUniqueStringSlice(value)
options, _ := f.Options.(*RelationOptions) options, _ := f.Options.(*RelationOptions)
@@ -274,11 +262,11 @@ func (f *SchemaField) PrepareValue(value any) any {
if len(ids) > 0 { if len(ids) > 0 {
return ids[0] return ids[0]
} }
return nil return ""
} }
return ids return ids
case FieldTypeUser: // nil, string or slice of strings case FieldTypeUser:
ids := list.ToUniqueStringSlice(value) ids := list.ToUniqueStringSlice(value)
options, _ := f.Options.(*UserOptions) options, _ := f.Options.(*UserOptions)
@@ -286,7 +274,7 @@ func (f *SchemaField) PrepareValue(value any) any {
if len(ids) > 0 { if len(ids) > 0 {
return ids[0] return ids[0]
} }
return nil return ""
} }
return ids return ids
+20 -13
View File
@@ -498,19 +498,22 @@ func TestSchemaFieldPrepareValue(t *testing.T) {
{schema.SchemaField{Type: "unknown"}, []int{1, 2, 1}, "[1,2,1]"}, {schema.SchemaField{Type: "unknown"}, []int{1, 2, 1}, "[1,2,1]"},
// text // text
{schema.SchemaField{Type: schema.FieldTypeText}, nil, `null`}, {schema.SchemaField{Type: schema.FieldTypeText}, nil, `""`},
{schema.SchemaField{Type: schema.FieldTypeText}, "", `""`},
{schema.SchemaField{Type: schema.FieldTypeText}, []int{1, 2}, `""`}, {schema.SchemaField{Type: schema.FieldTypeText}, []int{1, 2}, `""`},
{schema.SchemaField{Type: schema.FieldTypeText}, "test", `"test"`}, {schema.SchemaField{Type: schema.FieldTypeText}, "test", `"test"`},
{schema.SchemaField{Type: schema.FieldTypeText}, 123, `"123"`}, {schema.SchemaField{Type: schema.FieldTypeText}, 123, `"123"`},
// email // email
{schema.SchemaField{Type: schema.FieldTypeEmail}, nil, `null`}, {schema.SchemaField{Type: schema.FieldTypeEmail}, nil, `""`},
{schema.SchemaField{Type: schema.FieldTypeEmail}, "", `""`},
{schema.SchemaField{Type: schema.FieldTypeEmail}, []int{1, 2}, `""`}, {schema.SchemaField{Type: schema.FieldTypeEmail}, []int{1, 2}, `""`},
{schema.SchemaField{Type: schema.FieldTypeEmail}, "test", `"test"`}, {schema.SchemaField{Type: schema.FieldTypeEmail}, "test", `"test"`},
{schema.SchemaField{Type: schema.FieldTypeEmail}, 123, `"123"`}, {schema.SchemaField{Type: schema.FieldTypeEmail}, 123, `"123"`},
// url // url
{schema.SchemaField{Type: schema.FieldTypeUrl}, nil, `null`}, {schema.SchemaField{Type: schema.FieldTypeUrl}, nil, `""`},
{schema.SchemaField{Type: schema.FieldTypeUrl}, "", `""`},
{schema.SchemaField{Type: schema.FieldTypeUrl}, []int{1, 2}, `""`}, {schema.SchemaField{Type: schema.FieldTypeUrl}, []int{1, 2}, `""`},
{schema.SchemaField{Type: schema.FieldTypeUrl}, "test", `"test"`}, {schema.SchemaField{Type: schema.FieldTypeUrl}, "test", `"test"`},
{schema.SchemaField{Type: schema.FieldTypeUrl}, 123, `"123"`}, {schema.SchemaField{Type: schema.FieldTypeUrl}, 123, `"123"`},
@@ -523,7 +526,9 @@ func TestSchemaFieldPrepareValue(t *testing.T) {
{schema.SchemaField{Type: schema.FieldTypeJson}, []int{1, 2, 1}, `[1,2,1]`}, {schema.SchemaField{Type: schema.FieldTypeJson}, []int{1, 2, 1}, `[1,2,1]`},
// number // number
{schema.SchemaField{Type: schema.FieldTypeNumber}, nil, "null"}, {schema.SchemaField{Type: schema.FieldTypeNumber}, nil, "0"},
{schema.SchemaField{Type: schema.FieldTypeNumber}, "", "0"},
{schema.SchemaField{Type: schema.FieldTypeNumber}, "test", "0"},
{schema.SchemaField{Type: schema.FieldTypeNumber}, 1, "1"}, {schema.SchemaField{Type: schema.FieldTypeNumber}, 1, "1"},
{schema.SchemaField{Type: schema.FieldTypeNumber}, 1.5, "1.5"}, {schema.SchemaField{Type: schema.FieldTypeNumber}, 1.5, "1.5"},
{schema.SchemaField{Type: schema.FieldTypeNumber}, "1.5", "1.5"}, {schema.SchemaField{Type: schema.FieldTypeNumber}, "1.5", "1.5"},
@@ -533,22 +538,24 @@ func TestSchemaFieldPrepareValue(t *testing.T) {
{schema.SchemaField{Type: schema.FieldTypeBool}, 1, "true"}, {schema.SchemaField{Type: schema.FieldTypeBool}, 1, "true"},
{schema.SchemaField{Type: schema.FieldTypeBool}, 0, "false"}, {schema.SchemaField{Type: schema.FieldTypeBool}, 0, "false"},
{schema.SchemaField{Type: schema.FieldTypeBool}, "", "false"}, {schema.SchemaField{Type: schema.FieldTypeBool}, "", "false"},
{schema.SchemaField{Type: schema.FieldTypeBool}, "test", "false"},
{schema.SchemaField{Type: schema.FieldTypeBool}, "false", "false"}, {schema.SchemaField{Type: schema.FieldTypeBool}, "false", "false"},
{schema.SchemaField{Type: schema.FieldTypeBool}, "true", "true"}, {schema.SchemaField{Type: schema.FieldTypeBool}, "true", "true"},
{schema.SchemaField{Type: schema.FieldTypeBool}, false, "false"}, {schema.SchemaField{Type: schema.FieldTypeBool}, false, "false"},
{schema.SchemaField{Type: schema.FieldTypeBool}, true, "true"}, {schema.SchemaField{Type: schema.FieldTypeBool}, true, "true"},
// date // date
{schema.SchemaField{Type: schema.FieldTypeDate}, nil, "null"}, {schema.SchemaField{Type: schema.FieldTypeDate}, nil, `""`},
{schema.SchemaField{Type: schema.FieldTypeDate}, "", `""`}, {schema.SchemaField{Type: schema.FieldTypeDate}, "", `""`},
{schema.SchemaField{Type: schema.FieldTypeDate}, "test", `""`},
{schema.SchemaField{Type: schema.FieldTypeDate}, 1641024040, `"2022-01-01 08:00:40.000"`}, {schema.SchemaField{Type: schema.FieldTypeDate}, 1641024040, `"2022-01-01 08:00:40.000"`},
{schema.SchemaField{Type: schema.FieldTypeDate}, "2022-01-01 11:27:10.123", `"2022-01-01 11:27:10.123"`}, {schema.SchemaField{Type: schema.FieldTypeDate}, "2022-01-01 11:27:10.123", `"2022-01-01 11:27:10.123"`},
{schema.SchemaField{Type: schema.FieldTypeDate}, types.DateTime{}, `""`}, {schema.SchemaField{Type: schema.FieldTypeDate}, types.DateTime{}, `""`},
{schema.SchemaField{Type: schema.FieldTypeDate}, time.Time{}, `""`}, {schema.SchemaField{Type: schema.FieldTypeDate}, time.Time{}, `""`},
// select (single) // select (single)
{schema.SchemaField{Type: schema.FieldTypeSelect}, nil, `null`}, {schema.SchemaField{Type: schema.FieldTypeSelect}, nil, `""`},
{schema.SchemaField{Type: schema.FieldTypeSelect}, "", `null`}, {schema.SchemaField{Type: schema.FieldTypeSelect}, "", `""`},
{schema.SchemaField{Type: schema.FieldTypeSelect}, 123, `"123"`}, {schema.SchemaField{Type: schema.FieldTypeSelect}, 123, `"123"`},
{schema.SchemaField{Type: schema.FieldTypeSelect}, "test", `"test"`}, {schema.SchemaField{Type: schema.FieldTypeSelect}, "test", `"test"`},
{schema.SchemaField{Type: schema.FieldTypeSelect}, []string{"test1", "test2"}, `"test1"`}, {schema.SchemaField{Type: schema.FieldTypeSelect}, []string{"test1", "test2"}, `"test1"`},
@@ -624,8 +631,8 @@ func TestSchemaFieldPrepareValue(t *testing.T) {
}, },
// file (single) // file (single)
{schema.SchemaField{Type: schema.FieldTypeFile}, nil, `null`}, {schema.SchemaField{Type: schema.FieldTypeFile}, nil, `""`},
{schema.SchemaField{Type: schema.FieldTypeFile}, "", `null`}, {schema.SchemaField{Type: schema.FieldTypeFile}, "", `""`},
{schema.SchemaField{Type: schema.FieldTypeFile}, 123, `"123"`}, {schema.SchemaField{Type: schema.FieldTypeFile}, 123, `"123"`},
{schema.SchemaField{Type: schema.FieldTypeFile}, "test", `"test"`}, {schema.SchemaField{Type: schema.FieldTypeFile}, "test", `"test"`},
{schema.SchemaField{Type: schema.FieldTypeFile}, []string{"test1", "test2"}, `"test1"`}, {schema.SchemaField{Type: schema.FieldTypeFile}, []string{"test1", "test2"}, `"test1"`},
@@ -690,8 +697,8 @@ func TestSchemaFieldPrepareValue(t *testing.T) {
}, },
// relation (single) // relation (single)
{schema.SchemaField{Type: schema.FieldTypeRelation}, nil, `null`}, {schema.SchemaField{Type: schema.FieldTypeRelation}, nil, `""`},
{schema.SchemaField{Type: schema.FieldTypeRelation}, "", `null`}, {schema.SchemaField{Type: schema.FieldTypeRelation}, "", `""`},
{schema.SchemaField{Type: schema.FieldTypeRelation}, 123, `"123"`}, {schema.SchemaField{Type: schema.FieldTypeRelation}, 123, `"123"`},
{schema.SchemaField{Type: schema.FieldTypeRelation}, "abc", `"abc"`}, {schema.SchemaField{Type: schema.FieldTypeRelation}, "abc", `"abc"`},
{schema.SchemaField{Type: schema.FieldTypeRelation}, "1ba88b4f-e9da-42f0-9764-9a55c953e724", `"1ba88b4f-e9da-42f0-9764-9a55c953e724"`}, {schema.SchemaField{Type: schema.FieldTypeRelation}, "1ba88b4f-e9da-42f0-9764-9a55c953e724", `"1ba88b4f-e9da-42f0-9764-9a55c953e724"`},
@@ -761,8 +768,8 @@ func TestSchemaFieldPrepareValue(t *testing.T) {
}, },
// user (single) // user (single)
{schema.SchemaField{Type: schema.FieldTypeUser}, nil, `null`}, {schema.SchemaField{Type: schema.FieldTypeUser}, nil, `""`},
{schema.SchemaField{Type: schema.FieldTypeUser}, "", `null`}, {schema.SchemaField{Type: schema.FieldTypeUser}, "", `""`},
{schema.SchemaField{Type: schema.FieldTypeUser}, 123, `"123"`}, {schema.SchemaField{Type: schema.FieldTypeUser}, 123, `"123"`},
{schema.SchemaField{Type: schema.FieldTypeUser}, "1ba88b4f-e9da-42f0-9764-9a55c953e724", `"1ba88b4f-e9da-42f0-9764-9a55c953e724"`}, {schema.SchemaField{Type: schema.FieldTypeUser}, "1ba88b4f-e9da-42f0-9764-9a55c953e724", `"1ba88b4f-e9da-42f0-9764-9a55c953e724"`},
{ {
+2 -2
View File
@@ -9,10 +9,10 @@ import (
var _ Model = (*User)(nil) var _ Model = (*User)(nil)
const ( const (
// The name of the system user profiles collection. // ProfileCollectionName is the name of the system user profiles collection.
ProfileCollectionName = "profiles" ProfileCollectionName = "profiles"
// The name of the user field from the system user profiles collection. // ProfileCollectionUserFieldName is the name of the user field from the system user profiles collection.
ProfileCollectionUserFieldName = "userId" ProfileCollectionUserFieldName = "userId"
) )
+8 -7
View File
@@ -17,7 +17,7 @@ import (
var _ core.App = (*PocketBase)(nil) var _ core.App = (*PocketBase)(nil)
// Version of PocketBase // Version of PocketBase
const Version = "0.1.0" var Version = "(untracked)"
// appWrapper serves as a private core.App instance wrapper. // appWrapper serves as a private core.App instance wrapper.
type appWrapper struct { type appWrapper struct {
@@ -73,11 +73,16 @@ func New() *PocketBase {
pb := &PocketBase{ pb := &PocketBase{
RootCmd: &cobra.Command{ RootCmd: &cobra.Command{
Use: "pocketbase", Use: "pocketbase",
Short: "PocketBase CLI", Short: "PocketBase CLI",
Version: Version,
FParseErrWhitelist: cobra.FParseErrWhitelist{ FParseErrWhitelist: cobra.FParseErrWhitelist{
UnknownFlags: true, UnknownFlags: true,
}, },
// no need to provide the default cobra completion command
CompletionOptions: cobra.CompletionOptions{
DisableDefaultCmd: true,
},
}, },
defaultDebug: withGoRun, defaultDebug: withGoRun,
defaultDataDir: defaultDir, defaultDataDir: defaultDir,
@@ -85,9 +90,6 @@ func New() *PocketBase {
showStartBanner: true, showStartBanner: true,
} }
// no need to provide the default cobra completion command
pb.RootCmd.CompletionOptions.DisableDefaultCmd = true
// parse base flags // parse base flags
// (errors are ignored, since the full flags parsing happens on Execute()) // (errors are ignored, since the full flags parsing happens on Execute())
pb.eagerParseFlags() pb.eagerParseFlags()
@@ -130,7 +132,6 @@ func (pb *PocketBase) ShowStartBanner(val bool) *PocketBase {
func (pb *PocketBase) Start() error { func (pb *PocketBase) Start() error {
// register system commands // register system commands
pb.RootCmd.AddCommand(cmd.NewServeCommand(pb, pb.showStartBanner)) pb.RootCmd.AddCommand(cmd.NewServeCommand(pb, pb.showStartBanner))
pb.RootCmd.AddCommand(cmd.NewVersionCommand(pb, Version))
pb.RootCmd.AddCommand(cmd.NewMigrateCommand(pb)) pb.RootCmd.AddCommand(cmd.NewMigrateCommand(pb))
return pb.Execute() return pb.Execute()
+70 -31
View File
@@ -20,6 +20,7 @@ import (
var _ search.FieldResolver = (*RecordFieldResolver)(nil) var _ search.FieldResolver = (*RecordFieldResolver)(nil)
type join struct { type join struct {
id string
table string table string
on dbx.Expression on dbx.Expression
} }
@@ -36,7 +37,7 @@ type RecordFieldResolver struct {
baseCollection *models.Collection baseCollection *models.Collection
allowedFields []string allowedFields []string
requestData map[string]any requestData map[string]any
joins map[string]join joins []join // we cannot use a map because the insertion order is not preserved
loadedCollections []*models.Collection loadedCollections []*models.Collection
} }
@@ -50,7 +51,7 @@ func NewRecordFieldResolver(
dao: dao, dao: dao,
baseCollection: baseCollection, baseCollection: baseCollection,
requestData: requestData, requestData: requestData,
joins: make(map[string]join), joins: []join{},
loadedCollections: []*models.Collection{baseCollection}, loadedCollections: []*models.Collection{baseCollection},
allowedFields: []string{ allowedFields: []string{
`^\w+[\w\.]*$`, `^\w+[\w\.]*$`,
@@ -85,6 +86,7 @@ func (r *RecordFieldResolver) UpdateQuery(query *dbx.SelectQuery) error {
// id // id
// project.screen.status // project.screen.status
// @request.status // @request.status
// @request.user.profile.someRelation.name
// @collection.product.name // @collection.product.name
func (r *RecordFieldResolver) Resolve(fieldName string) (resultName string, placeholderParams dbx.Params, err error) { func (r *RecordFieldResolver) Resolve(fieldName string) (resultName string, placeholderParams dbx.Params, err error) {
if len(r.allowedFields) > 0 && !list.ExistInSliceWithRegex(fieldName, r.allowedFields) { if len(r.allowedFields) > 0 && !list.ExistInSliceWithRegex(fieldName, r.allowedFields) {
@@ -93,15 +95,6 @@ func (r *RecordFieldResolver) Resolve(fieldName string) (resultName string, plac
props := strings.Split(fieldName, ".") props := strings.Split(fieldName, ".")
// check for @request field
if props[0] == "@request" {
if len(props) == 1 {
return "", nil, fmt.Errorf("Invalid @request data field path in %q.", fieldName)
}
return r.resolveRequestField(props[1:]...)
}
currentCollectionName := r.baseCollection.Name currentCollectionName := r.baseCollection.Name
currentTableAlias := currentCollectionName currentTableAlias := currentCollectionName
@@ -113,16 +106,54 @@ func (r *RecordFieldResolver) Resolve(fieldName string) (resultName string, plac
} }
currentCollectionName = props[1] currentCollectionName = props[1]
currentTableAlias = "c_" + currentCollectionName currentTableAlias = "__collection_" + currentCollectionName
collection, err := r.loadCollection(currentCollectionName) collection, err := r.loadCollection(currentCollectionName)
if err != nil { if err != nil {
return "", nil, fmt.Errorf("Failed to load collection %q from field path %q.", currentCollectionName, fieldName) return "", nil, fmt.Errorf("Failed to load collection %q from field path %q.", currentCollectionName, fieldName)
} }
r.addJoin(collection.Name, currentTableAlias, "", "", "") r.addJoin(collection.Name, currentTableAlias, nil)
props = props[2:] // leave only the collection fields props = props[2:] // leave only the collection fields
} else if props[0] == "@request" {
// check for @request field
if len(props) == 1 {
return "", nil, fmt.Errorf("Invalid @request data field path in %q.", fieldName)
}
// not a profile relational field
if len(props) <= 4 || !strings.HasPrefix(fieldName, "@request.user.profile.") {
return r.resolveStaticRequestField(props[1:]...)
}
// resolve the profile collection fields
currentCollectionName = models.ProfileCollectionName
currentTableAlias = "__user_" + currentCollectionName
collection, err := r.loadCollection(currentCollectionName)
if err != nil {
return "", nil, fmt.Errorf("Failed to load collection %q from field path %q.", currentCollectionName, fieldName)
}
profileIdPlaceholder, profileIdPlaceholderParam, err := r.resolveStaticRequestField("user", "profile", "id")
if err != nil {
return "", nil, fmt.Errorf("Failed to resolve @request.user.profile.id path in %q.", fieldName)
}
if strings.ToLower(profileIdPlaceholder) == "null" {
// the user doesn't have an associated profile
return "NULL", nil, nil
}
// join the profile collection
r.addJoin(collection.Name, currentTableAlias, dbx.NewExp(fmt.Sprintf(
// aka. profiles.id = profileId
"[[%s.id]] = %s",
inflector.Columnify(currentTableAlias),
profileIdPlaceholder,
), profileIdPlaceholderParam))
props = props[3:] // leave only the profile fields
} }
baseModelFields := schema.ReservedFieldNames() baseModelFields := schema.ReservedFieldNames()
@@ -168,14 +199,19 @@ func (r *RecordFieldResolver) Resolve(fieldName string) (resultName string, plac
return "", nil, fmt.Errorf("Failed to find field %q collection.", prop) return "", nil, fmt.Errorf("Failed to find field %q collection.", prop)
} }
newCollectionName := relCollection.Name newCollectionName := relCollection.Name
newTableAlias := (currentTableAlias + "_" + field.Name) newTableAlias := currentTableAlias + "_" + field.Name
r.addJoin( r.addJoin(
newCollectionName, newCollectionName,
newTableAlias, newTableAlias,
"id", dbx.NewExp(fmt.Sprintf(
currentTableAlias, // 'LIKE' expr is used to handle the case when the reference field supports multiple values (aka. is json array)
field.Name, "[[%s.%s]] LIKE ('%%' || [[%s.%s]] || '%%')",
inflector.Columnify(currentTableAlias),
inflector.Columnify(field.Name),
inflector.Columnify(newTableAlias),
inflector.Columnify("id"),
)),
) )
currentCollectionName = newCollectionName currentCollectionName = newCollectionName
@@ -185,7 +221,7 @@ func (r *RecordFieldResolver) Resolve(fieldName string) (resultName string, plac
return "", nil, fmt.Errorf("Failed to resolve field %q.", fieldName) return "", nil, fmt.Errorf("Failed to resolve field %q.", fieldName)
} }
func (r *RecordFieldResolver) resolveRequestField(path ...string) (resultName string, placeholderParams dbx.Params, err error) { func (r *RecordFieldResolver) resolveStaticRequestField(path ...string) (resultName string, placeholderParams dbx.Params, err error) {
// ignore error because requestData is dynamic and some of the // ignore error because requestData is dynamic and some of the
// lookup keys may not be defined for the request // lookup keys may not be defined for the request
resultVal, _ := extractNestedMapVal(r.requestData, path...) resultVal, _ := extractNestedMapVal(r.requestData, path...)
@@ -259,24 +295,27 @@ func (r *RecordFieldResolver) loadCollection(collectionNameOrId string) (*models
return collection, nil return collection, nil
} }
func (r *RecordFieldResolver) addJoin(tableName, tableAlias, fieldName, ref, refFieldName string) { func (r *RecordFieldResolver) addJoin(tableName string, tableAlias string, on dbx.Expression) {
table := fmt.Sprintf( tableExpr := fmt.Sprintf(
"%s %s", "%s %s",
inflector.Columnify(tableName), inflector.Columnify(tableName),
inflector.Columnify(tableAlias), inflector.Columnify(tableAlias),
) )
var on dbx.Expression join := join{
if ref != "" { id: tableAlias,
on = dbx.NewExp(fmt.Sprintf( table: tableExpr,
// 'LIKE' expr is used to handle the case when the reference field supports multiple values (aka. is json array) on: on,
"[[%s.%s]] LIKE ('%%' || [[%s.%s]] || '%%')",
inflector.Columnify(ref),
inflector.Columnify(refFieldName),
inflector.Columnify(tableAlias),
inflector.Columnify(fieldName),
))
} }
r.joins[tableAlias] = join{table, on} // replace existing join
for i, j := range r.joins {
if j.id == join.id {
r.joins[i] = join
return
}
}
// register new join
r.joins = append(r.joins, join)
} }
+116 -63
View File
@@ -2,11 +2,12 @@ package resolvers_test
import ( import (
"encoding/json" "encoding/json"
"strings" "regexp"
"testing" "testing"
"github.com/pocketbase/pocketbase/resolvers" "github.com/pocketbase/pocketbase/resolvers"
"github.com/pocketbase/pocketbase/tests" "github.com/pocketbase/pocketbase/tests"
"github.com/pocketbase/pocketbase/tools/list"
) )
func TestRecordFieldResolverUpdateQuery(t *testing.T) { func TestRecordFieldResolverUpdateQuery(t *testing.T) {
@@ -18,54 +19,94 @@ func TestRecordFieldResolverUpdateQuery(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
requestData := map[string]any{
"user": map[string]any{
"id": "4d0197cc-2b4a-3f83-a26b-d77bc8423d3c",
"profile": map[string]any{
"id": "d13f60a4-5765-48c7-9e1d-3e782340f833",
"name": "test",
},
},
}
scenarios := []struct { scenarios := []struct {
fieldName string name string
expectQueryParts []string // we are matching parts of the query fields []string
// since joins are added with map iteration and the order is not guaranteed expectQuery string
}{ }{
// missing field {
{"", []string{ "missing field",
[]string{""},
"SELECT `demo4`.* FROM `demo4`", "SELECT `demo4`.* FROM `demo4`",
}}, },
// non relation field {
{"title", []string{ "non relation field",
[]string{"title"},
"SELECT `demo4`.* FROM `demo4`", "SELECT `demo4`.* FROM `demo4`",
}}, },
// incomplete rel {
{"onerel", []string{ "incomplete rel",
[]string{"onerel"},
"SELECT `demo4`.* FROM `demo4`", "SELECT `demo4`.* FROM `demo4`",
}}, },
// single rel {
{"onerel.title", []string{ "single rel",
"SELECT DISTINCT `demo4`.* FROM `demo4`", []string{"onerel.title"},
" LEFT JOIN `demo4` `demo4_onerel` ON [[demo4.onerel]] LIKE ('%' || [[demo4_onerel.id]] || '%')", "SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `demo4` `demo4_onerel` ON [[demo4.onerel]] LIKE ('%' || [[demo4_onerel.id]] || '%')",
}}, },
// nested incomplete rels {
{"manyrels.onerel", []string{ "non-relation field + single rel",
"SELECT DISTINCT `demo4`.* FROM `demo4`", []string{"title", "onerel.title"},
" LEFT JOIN `demo4` `demo4_manyrels` ON [[demo4.manyrels]] LIKE ('%' || [[demo4_manyrels.id]] || '%')", "SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `demo4` `demo4_onerel` ON [[demo4.onerel]] LIKE ('%' || [[demo4_onerel.id]] || '%')",
}}, },
// nested complete rels {
{"manyrels.onerel.title", []string{ "nested incomplete rels",
"SELECT DISTINCT `demo4`.* FROM `demo4`", []string{"manyrels.onerel"},
" LEFT JOIN `demo4` `demo4_manyrels` ON [[demo4.manyrels]] LIKE ('%' || [[demo4_manyrels.id]] || '%')", "SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `demo4` `demo4_manyrels` ON [[demo4.manyrels]] LIKE ('%' || [[demo4_manyrels.id]] || '%')",
" LEFT JOIN `demo4` `demo4_manyrels_onerel` ON [[demo4_manyrels.onerel]] LIKE ('%' || [[demo4_manyrels_onerel.id]] || '%')", },
}}, {
// // repeated nested rels "nested complete rels",
{"manyrels.onerel.manyrels.onerel.title", []string{ []string{"manyrels.onerel.title"},
"SELECT DISTINCT `demo4`.* FROM `demo4`", "SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `demo4` `demo4_manyrels` ON [[demo4.manyrels]] LIKE ('%' || [[demo4_manyrels.id]] || '%') LEFT JOIN `demo4` `demo4_manyrels_onerel` ON [[demo4_manyrels.onerel]] LIKE ('%' || [[demo4_manyrels_onerel.id]] || '%')",
" LEFT JOIN `demo4` `demo4_manyrels` ON [[demo4.manyrels]] LIKE ('%' || [[demo4_manyrels.id]] || '%')", },
" LEFT JOIN `demo4` `demo4_manyrels_onerel` ON [[demo4_manyrels.onerel]] LIKE ('%' || [[demo4_manyrels_onerel.id]] || '%')", {
" LEFT JOIN `demo4` `demo4_manyrels_onerel_manyrels` ON [[demo4_manyrels_onerel.manyrels]] LIKE ('%' || [[demo4_manyrels_onerel_manyrels.id]] || '%')", "repeated nested rels",
" LEFT JOIN `demo4` `demo4_manyrels_onerel_manyrels_onerel` ON [[demo4_manyrels_onerel_manyrels.onerel]] LIKE ('%' || [[demo4_manyrels_onerel_manyrels_onerel.id]] || '%')", []string{"manyrels.onerel.manyrels.onerel.title"},
}}, "SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `demo4` `demo4_manyrels` ON [[demo4.manyrels]] LIKE ('%' || [[demo4_manyrels.id]] || '%') LEFT JOIN `demo4` `demo4_manyrels_onerel` ON [[demo4_manyrels.onerel]] LIKE ('%' || [[demo4_manyrels_onerel.id]] || '%') LEFT JOIN `demo4` `demo4_manyrels_onerel_manyrels` ON [[demo4_manyrels_onerel.manyrels]] LIKE ('%' || [[demo4_manyrels_onerel_manyrels.id]] || '%') LEFT JOIN `demo4` `demo4_manyrels_onerel_manyrels_onerel` ON [[demo4_manyrels_onerel_manyrels.onerel]] LIKE ('%' || [[demo4_manyrels_onerel_manyrels_onerel.id]] || '%')",
},
{
"multiple rels",
[]string{"manyrels.title", "onerel.onefile"},
"SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `demo4` `demo4_manyrels` ON [[demo4.manyrels]] LIKE ('%' || [[demo4_manyrels.id]] || '%') LEFT JOIN `demo4` `demo4_onerel` ON [[demo4.onerel]] LIKE ('%' || [[demo4_onerel.id]] || '%')",
},
{
"@collection join",
[]string{"@collection.demo.title", "@collection.demo2.text", "@collection.demo.file"},
"SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `demo` `__collection_demo` LEFT JOIN `demo2` `__collection_demo2`",
},
{
"static @request.user.profile fields",
[]string{"@request.user.id", "@request.user.profile.id", "@request.data.demo"},
"SELECT `demo4`.* FROM `demo4`",
},
{
"relational @request.user.profile fields",
[]string{"@request.user.profile.rel.id", "@request.user.profile.rel.name"},
"^" +
regexp.QuoteMeta("SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `profiles` `__user_profiles` ON [[__user_profiles.id]] =") +
" {:.*} " +
regexp.QuoteMeta("LEFT JOIN `profiles` `__user_profiles_rel` ON [[__user_profiles.rel]] LIKE ('%' || [[__user_profiles_rel.id]] || '%')") +
"$",
},
} }
for i, s := range scenarios { for i, s := range scenarios {
query := app.Dao().RecordQuery(collection) query := app.Dao().RecordQuery(collection)
r := resolvers.NewRecordFieldResolver(app.Dao(), collection, nil) r := resolvers.NewRecordFieldResolver(app.Dao(), collection, requestData)
r.Resolve(s.fieldName) for _, field := range s.fields {
r.Resolve(field)
}
if err := r.UpdateQuery(query); err != nil { if err := r.UpdateQuery(query); err != nil {
t.Errorf("(%d) UpdateQuery failed with error %v", i, err) t.Errorf("(%d) UpdateQuery failed with error %v", i, err)
@@ -74,16 +115,8 @@ func TestRecordFieldResolverUpdateQuery(t *testing.T) {
rawQuery := query.Build().SQL() rawQuery := query.Build().SQL()
partsLength := 0 if !list.ExistInSliceWithRegex(rawQuery, []string{s.expectQuery}) {
for _, part := range s.expectQueryParts { t.Errorf("(%d) Expected query\n %v \ngot:\n %v", i, s.expectQuery, rawQuery)
partsLength += len(part)
if !strings.Contains(rawQuery, part) {
t.Errorf("(%d) Part %v is missing from query \n%v", i, part, rawQuery)
}
}
if partsLength != len(rawQuery) {
t.Errorf("(%d) Expected %d characters, got %d in \n%v", i, partsLength, len(rawQuery), rawQuery)
} }
} }
} }
@@ -97,7 +130,16 @@ func TestRecordFieldResolverResolveSchemaFields(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
r := resolvers.NewRecordFieldResolver(app.Dao(), collection, nil) requestData := map[string]any{
"user": map[string]any{
"id": "4d0197cc-2b4a-3f83-a26b-d77bc8423d3c",
"profile": map[string]any{
"id": "d13f60a4-5765-48c7-9e1d-3e782340f833",
},
},
}
r := resolvers.NewRecordFieldResolver(app.Dao(), collection, requestData)
scenarios := []struct { scenarios := []struct {
fieldName string fieldName string
@@ -118,42 +160,45 @@ func TestRecordFieldResolverResolveSchemaFields(t *testing.T) {
{"manyrels.unknown", true, ""}, {"manyrels.unknown", true, ""},
{"manyrels.title", false, "[[demo4_manyrels.title]]"}, {"manyrels.title", false, "[[demo4_manyrels.title]]"},
{"manyrels.onerel.manyrels.onefile", false, "[[demo4_manyrels_onerel_manyrels.onefile]]"}, {"manyrels.onerel.manyrels.onefile", false, "[[demo4_manyrels_onerel_manyrels.onefile]]"},
// @request.user.profile relation join:
{"@request.user.profile.rel.name", false, "[[__user_profiles_rel.name]]"},
// @collection fieds:
{"@collect", true, ""}, {"@collect", true, ""},
{"collection.demo4.title", true, ""}, {"collection.demo4.title", true, ""},
{"@collection", true, ""}, {"@collection", true, ""},
{"@collection.unknown", true, ""}, {"@collection.unknown", true, ""},
{"@collection.demo", true, ""}, {"@collection.demo", true, ""},
{"@collection.demo.", true, ""}, {"@collection.demo.", true, ""},
{"@collection.demo.title", false, "[[c_demo.title]]"}, {"@collection.demo.title", false, "[[__collection_demo.title]]"},
{"@collection.demo4.title", false, "[[c_demo4.title]]"}, {"@collection.demo4.title", false, "[[__collection_demo4.title]]"},
{"@collection.demo4.id", false, "[[c_demo4.id]]"}, {"@collection.demo4.id", false, "[[__collection_demo4.id]]"},
{"@collection.demo4.created", false, "[[c_demo4.created]]"}, {"@collection.demo4.created", false, "[[__collection_demo4.created]]"},
{"@collection.demo4.updated", false, "[[c_demo4.updated]]"}, {"@collection.demo4.updated", false, "[[__collection_demo4.updated]]"},
{"@collection.demo4.manyrels.missing", true, ""}, {"@collection.demo4.manyrels.missing", true, ""},
{"@collection.demo4.manyrels.onerel.manyrels.onerel.onefile", false, "[[c_demo4_manyrels_onerel_manyrels_onerel.onefile]]"}, {"@collection.demo4.manyrels.onerel.manyrels.onerel.onefile", false, "[[__collection_demo4_manyrels_onerel_manyrels_onerel.onefile]]"},
} }
for i, s := range scenarios { for _, s := range scenarios {
name, params, err := r.Resolve(s.fieldName) name, params, err := r.Resolve(s.fieldName)
hasErr := err != nil hasErr := err != nil
if hasErr != s.expectError { if hasErr != s.expectError {
t.Errorf("(%d) Expected hasErr %v, got %v (%v)", i, s.expectError, hasErr, err) t.Errorf("(%q) Expected hasErr %v, got %v (%v)", s.fieldName, s.expectError, hasErr, err)
continue continue
} }
if name != s.expectName { if name != s.expectName {
t.Errorf("(%d) Expected name %q, got %q", i, s.expectName, name) t.Errorf("(%q) Expected name %q, got %q", s.fieldName, s.expectName, name)
} }
// params should be empty for non @request fields // params should be empty for non @request fields
if len(params) != 0 { if len(params) != 0 {
t.Errorf("(%d) Expected 0 params, got %v", i, params) t.Errorf("(%q) Expected 0 params, got %v", s.fieldName, params)
} }
} }
} }
func TestRecordFieldResolverResolveRequestDataFields(t *testing.T) { func TestRecordFieldResolverResolveStaticRequestDataFields(t *testing.T) {
app, _ := tests.NewTestApp() app, _ := tests.NewTestApp()
defer app.Cleanup() defer app.Cleanup()
@@ -171,7 +216,13 @@ func TestRecordFieldResolverResolveRequestDataFields(t *testing.T) {
"b": 456, "b": 456,
"c": map[string]int{"sub": 1}, "c": map[string]int{"sub": 1},
}, },
"user": nil, "user": map[string]any{
"id": "4d0197cc-2b4a-3f83-a26b-d77bc8423d3c",
"profile": map[string]any{
"id": "d13f60a4-5765-48c7-9e1d-3e782340f833",
"name": "test",
},
},
} }
r := resolvers.NewRecordFieldResolver(app.Dao(), collection, requestData) r := resolvers.NewRecordFieldResolver(app.Dao(), collection, requestData)
@@ -194,7 +245,9 @@ func TestRecordFieldResolverResolveRequestDataFields(t *testing.T) {
{"@request.data.b.missing", false, ``}, {"@request.data.b.missing", false, ``},
{"@request.data.c", false, `"{\"sub\":1}"`}, {"@request.data.c", false, `"{\"sub\":1}"`},
{"@request.user", true, ""}, {"@request.user", true, ""},
{"@request.user.id", false, ""}, {"@request.user.id", false, `"4d0197cc-2b4a-3f83-a26b-d77bc8423d3c"`},
{"@request.user.profile", false, `"{\"id\":\"d13f60a4-5765-48c7-9e1d-3e782340f833\",\"name\":\"test\"}"`},
{"@request.user.profile.name", false, `"test"`},
} }
for i, s := range scenarios { for i, s := range scenarios {
+28 -8
View File
@@ -22,11 +22,20 @@ type ApiScenario struct {
Url string Url string
Body io.Reader Body io.Reader
RequestHeaders map[string]string RequestHeaders map[string]string
// Delay adds a delay before checking the expectations usually
// to ensure that all fired non-awaited go routines have finished
Delay time.Duration
// expectations // expectations
ExpectedStatus int // ---
ExpectedContent []string ExpectedStatus int
ExpectedEvents map[string]int ExpectedContent []string
// test events NotExpectedContent []string
ExpectedEvents map[string]int
// test hooks
// ---
BeforeFunc func(t *testing.T, app *TestApp, e *echo.Echo) BeforeFunc func(t *testing.T, app *TestApp, e *echo.Echo)
AfterFunc func(t *testing.T, app *TestApp, e *echo.Echo) AfterFunc func(t *testing.T, app *TestApp, e *echo.Echo)
} }
@@ -48,7 +57,7 @@ func (scenario *ApiScenario) Test(t *testing.T) {
recorder := httptest.NewRecorder() recorder := httptest.NewRecorder()
req := httptest.NewRequest(scenario.Method, scenario.Url, scenario.Body) req := httptest.NewRequest(scenario.Method, scenario.Url, scenario.Body)
// add middeware to timeout long running requests (eg. keep-alive routes) // add middleware to timeout long-running requests (eg. keep-alive routes)
e.Pre(func(next echo.HandlerFunc) echo.HandlerFunc { e.Pre(func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error { return func(c echo.Context) error {
ctx, cancelFunc := context.WithTimeout(c.Request().Context(), 100*time.Millisecond) ctx, cancelFunc := context.WithTimeout(c.Request().Context(), 100*time.Millisecond)
@@ -80,9 +89,13 @@ func (scenario *ApiScenario) Test(t *testing.T) {
t.Errorf("[%s] Expected status code %d, got %d", prefix, scenario.ExpectedStatus, res.StatusCode) t.Errorf("[%s] Expected status code %d, got %d", prefix, scenario.ExpectedStatus, res.StatusCode)
} }
if len(scenario.ExpectedContent) == 0 { if scenario.Delay > 0 {
time.Sleep(scenario.Delay)
}
if len(scenario.ExpectedContent) == 0 && len(scenario.NotExpectedContent) == 0 {
if len(recorder.Body.Bytes()) != 0 { if len(recorder.Body.Bytes()) != 0 {
t.Errorf("[%s] Expected empty body, got %v", prefix, recorder.Body.String()) t.Errorf("[%s] Expected empty body, got \n%v", prefix, recorder.Body.String())
} }
} else { } else {
// normalize json response format // normalize json response format
@@ -98,7 +111,14 @@ func (scenario *ApiScenario) Test(t *testing.T) {
for _, item := range scenario.ExpectedContent { for _, item := range scenario.ExpectedContent {
if !strings.Contains(normalizedBody, item) { if !strings.Contains(normalizedBody, item) {
t.Errorf("[%s] Cannot find %v in response body %v", prefix, item, normalizedBody) t.Errorf("[%s] Cannot find %v in response body \n%v", prefix, item, normalizedBody)
break
}
}
for _, item := range scenario.NotExpectedContent {
if strings.Contains(normalizedBody, item) {
t.Errorf("[%s] Didn't expect %v in response body \n%v", prefix, item, normalizedBody)
break break
} }
} }
Binary file not shown.
+11
View File
@@ -3,6 +3,7 @@ package auth
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@@ -120,6 +121,16 @@ func (p *baseProvider) FetchRawUserData(token *oauth2.Token, result any) error {
return err return err
} }
// http.Client.Get doesn't treat non 2xx responses as error
if response.StatusCode >= 400 {
return fmt.Errorf(
"Failed to fetch OAuth2 user profile via %s (%d):\n%s",
p.userApiUrl,
response.StatusCode,
string(content),
)
}
return json.Unmarshal(content, &result) return json.Unmarshal(content, &result)
} }
+1 -1
View File
@@ -21,7 +21,7 @@ type Github struct {
// NewGithubProvider creates new Github provider instance with some defaults. // NewGithubProvider creates new Github provider instance with some defaults.
func NewGithubProvider() *Github { func NewGithubProvider() *Github {
return &Github{&baseProvider{ return &Github{&baseProvider{
scopes: []string{"user"}, scopes: []string{"read:user", "user:email"},
authUrl: "https://github.com/login/oauth/authorize", authUrl: "https://github.com/login/oauth/authorize",
tokenUrl: "https://github.com/login/oauth/access_token", tokenUrl: "https://github.com/login/oauth/access_token",
userApiUrl: "https://api.github.com/user", userApiUrl: "https://api.github.com/user",
+29 -6
View File
@@ -16,6 +16,7 @@ import (
"github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/session"
"github.com/disintegration/imaging" "github.com/disintegration/imaging"
"github.com/pocketbase/pocketbase/tools/list"
"gocloud.dev/blob" "gocloud.dev/blob"
"gocloud.dev/blob/fileblob" "gocloud.dev/blob/fileblob"
"gocloud.dev/blob/s3blob" "gocloud.dev/blob/s3blob"
@@ -35,15 +36,17 @@ func NewS3(
endpoint string, endpoint string,
accessKey string, accessKey string,
secretKey string, secretKey string,
s3ForcePathStyle bool,
) (*System, error) { ) (*System, error) {
ctx := context.Background() // default context ctx := context.Background() // default context
cred := credentials.NewStaticCredentials(accessKey, secretKey, "") cred := credentials.NewStaticCredentials(accessKey, secretKey, "")
sess, err := session.NewSession(&aws.Config{ sess, err := session.NewSession(&aws.Config{
Region: aws.String(region), Region: aws.String(region),
Endpoint: aws.String(endpoint), Endpoint: aws.String(endpoint),
Credentials: cred, Credentials: cred,
S3ForcePathStyle: aws.Bool(s3ForcePathStyle),
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@@ -153,7 +156,7 @@ func (s *System) DeletePrefix(prefix string) []error {
// (this operation usually is optional and there is no need to strictly check the result) // (this operation usually is optional and there is no need to strictly check the result)
// --- // ---
// fill dirs slice // fill dirs slice
dirs := []string{} dirs := make([]string, 0, len(dirsMap))
for d := range dirsMap { for d := range dirsMap {
dirs = append(dirs, d) dirs = append(dirs, d)
} }
@@ -174,6 +177,11 @@ func (s *System) DeletePrefix(prefix string) []error {
return failed return failed
} }
var inlineServeContentTypes = []string{
"image/png", "image/jpg", "image/jpeg", "image/gif",
"video/mp4", "video/3gpp", "video/quicktime", " video/x-ms-wmv",
}
// Serve serves the file at fileKey location to an HTTP response. // Serve serves the file at fileKey location to an HTTP response.
func (s *System) Serve(response http.ResponseWriter, fileKey string, name string) error { func (s *System) Serve(response http.ResponseWriter, fileKey string, name string) error {
r, readErr := s.bucket.NewReader(s.ctx, fileKey, nil) r, readErr := s.bucket.NewReader(s.ctx, fileKey, nil)
@@ -182,9 +190,24 @@ func (s *System) Serve(response http.ResponseWriter, fileKey string, name string
} }
defer r.Close() defer r.Close()
response.Header().Set("Content-Disposition", "attachment; filename="+name) disposition := "attachment"
response.Header().Set("Content-Type", r.ContentType()) realContentType := r.ContentType()
if list.ExistInSlice(realContentType, inlineServeContentTypes) {
disposition = "inline"
}
// make an exception for svg and use a custom content type
// to send in the response so that it can be loaded in a img tag
// (see https://github.com/whatwg/mimesniff/issues/7)
extContentType := realContentType
if filepath.Ext(name) == ".svg" {
extContentType = "image/svg+xml"
}
response.Header().Set("Content-Disposition", disposition+"; filename="+name)
response.Header().Set("Content-Type", extContentType)
response.Header().Set("Content-Length", strconv.FormatInt(r.Size(), 10)) response.Header().Set("Content-Length", strconv.FormatInt(r.Size(), 10))
response.Header().Set("Content-Security-Policy", "default-src 'none'; style-src 'unsafe-inline'; sandbox")
// All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT) // All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT)
// (see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1) // (see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)
+91 -38
View File
@@ -28,7 +28,7 @@ func TestFileSystemExists(t *testing.T) {
{"sub1.txt", false}, {"sub1.txt", false},
{"test/sub1.txt", true}, {"test/sub1.txt", true},
{"test/sub2.txt", true}, {"test/sub2.txt", true},
{"file.png", true}, {"image.png", true},
} }
for i, scenario := range scenarios { for i, scenario := range scenarios {
@@ -51,13 +51,14 @@ func TestFileSystemAttributes(t *testing.T) {
defer fs.Close() defer fs.Close()
scenarios := []struct { scenarios := []struct {
file string file string
expectError bool expectError bool
expectContentType string
}{ }{
{"sub1.txt", true}, {"sub1.txt", true, ""},
{"test/sub1.txt", false}, {"test/sub1.txt", false, "application/octet-stream"},
{"test/sub2.txt", false}, {"test/sub2.txt", false, "application/octet-stream"},
{"file.png", false}, {"image.png", false, "image/png"},
} }
for i, scenario := range scenarios { for i, scenario := range scenarios {
@@ -71,8 +72,8 @@ func TestFileSystemAttributes(t *testing.T) {
t.Errorf("(%d) Expected nil, got error, %v", i, err) t.Errorf("(%d) Expected nil, got error, %v", i, err)
} }
if err == nil && attr.ContentType != "application/octet-stream" { if err == nil && attr.ContentType != scenario.expectContentType {
t.Errorf("(%d) Expected attr.ContentType to be %q, got %q", i, "application/octet-stream", attr.ContentType) t.Errorf("(%d) Expected attr.ContentType to be %q, got %q", i, scenario.expectContentType, attr.ContentType)
} }
} }
} }
@@ -91,7 +92,7 @@ func TestFileSystemDelete(t *testing.T) {
t.Fatal("Expected error, got nil") t.Fatal("Expected error, got nil")
} }
if err := fs.Delete("file.png"); err != nil { if err := fs.Delete("image.png"); err != nil {
t.Fatalf("Expected nil, got error %v", err) t.Fatalf("Expected nil, got error %v", err)
} }
} }
@@ -157,33 +158,75 @@ func TestFileSystemServe(t *testing.T) {
} }
defer fs.Close() defer fs.Close()
r := httptest.NewRecorder()
// serve missing file
if err := fs.Serve(r, "missing.txt", "download.txt"); err == nil {
t.Fatal("Expected error, got nil")
}
// serve existing file
if err := fs.Serve(r, "test/sub1.txt", "download.txt"); err != nil {
t.Fatal("Expected nil, got error")
}
result := r.Result()
// check headers
scenarios := []struct { scenarios := []struct {
header string path string
expected string name string
expectError bool
expectHeaders map[string]string
}{ }{
{"Content-Disposition", "attachment; filename=download.txt"}, {
{"Content-Type", "application/octet-stream"}, // missing
{"Content-Length", "0"}, "missing.txt",
"test_name.txt",
true,
nil,
},
{
// existing regular file
"test/sub1.txt",
"test_name.txt",
false,
map[string]string{
"Content-Disposition": "attachment; filename=test_name.txt",
"Content-Type": "application/octet-stream",
"Content-Length": "0",
"Content-Security-Policy": "default-src 'none'; style-src 'unsafe-inline'; sandbox",
},
},
{
// png inline
"image.png",
"test_name.png",
false,
map[string]string{
"Content-Disposition": "inline; filename=test_name.png",
"Content-Type": "image/png",
"Content-Length": "73",
"Content-Security-Policy": "default-src 'none'; style-src 'unsafe-inline'; sandbox",
},
},
{
// svg exception
"image.svg",
"test_name.svg",
false,
map[string]string{
"Content-Disposition": "attachment; filename=test_name.svg",
"Content-Type": "image/svg+xml",
"Content-Length": "0",
"Content-Security-Policy": "default-src 'none'; style-src 'unsafe-inline'; sandbox",
},
},
} }
for i, scenario := range scenarios {
v := result.Header.Get(scenario.header) for _, scenario := range scenarios {
if v != scenario.expected { r := httptest.NewRecorder()
t.Errorf("(%d) Expected value %q for header %q, got %q", i, scenario.expected, scenario.header, v)
err := fs.Serve(r, scenario.path, scenario.name)
hasErr := err != nil
if hasErr != scenario.expectError {
t.Errorf("(%s) Expected hasError %v, got %v", scenario.path, scenario.expectError, hasErr)
continue
}
result := r.Result()
for hName, hValue := range scenario.expectHeaders {
v := result.Header.Get(hName)
if v != hValue {
t.Errorf("(%s) Expected value %q for header %q, got %q", scenario.path, hValue, hName, v)
}
} }
} }
} }
@@ -209,11 +252,11 @@ func TestFileSystemCreateThumb(t *testing.T) {
// non-image existing file // non-image existing file
{"test/sub1.txt", "thumb_test_sub1", true, true}, {"test/sub1.txt", "thumb_test_sub1", true, true},
// existing image file - crop center // existing image file - crop center
{"file.png", "thumb_file_center", true, false}, {"image.png", "thumb_file_center", true, false},
// existing image file - crop top // existing image file - crop top
{"file.png", "thumb_file_top", false, false}, {"image.png", "thumb_file_top", false, false},
// existing image file with existing thumb path = should fail // existing image file with existing thumb path = should fail
{"file.png", "test", true, true}, {"image.png", "test", true, true},
} }
for i, scenario := range scenarios { for i, scenario := range scenarios {
@@ -259,7 +302,7 @@ func createTestDir(t *testing.T) string {
} }
file2.Close() file2.Close()
file3, err := os.OpenFile(filepath.Join(dir, "file.png"), os.O_WRONLY|os.O_CREATE, 0666) file3, err := os.OpenFile(filepath.Join(dir, "image.png"), os.O_WRONLY|os.O_CREATE, 0666)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@@ -267,6 +310,16 @@ func createTestDir(t *testing.T) string {
imgRect := image.Rect(0, 0, 1, 1) imgRect := image.Rect(0, 0, 1, 1)
png.Encode(file3, imgRect) png.Encode(file3, imgRect)
file3.Close() file3.Close()
err2 := os.WriteFile(filepath.Join(dir, "image.png.attrs"), []byte(`{"user.cache_control":"","user.content_disposition":"","user.content_encoding":"","user.content_language":"","user.content_type":"image/png","user.metadata":null}`), 0666)
if err2 != nil {
t.Fatal(err2)
}
file4, err := os.OpenFile(filepath.Join(dir, "image.svg"), os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
t.Fatal(err)
}
file4.Close()
return dir return dir
} }
+5 -2
View File
@@ -44,8 +44,11 @@ func (h *Hook[T]) Reset() {
// - any non-nil error is returned in one of the handlers // - any non-nil error is returned in one of the handlers
func (h *Hook[T]) Trigger(data T, oneOffHandlers ...Handler[T]) error { func (h *Hook[T]) Trigger(data T, oneOffHandlers ...Handler[T]) error {
h.mux.Lock() h.mux.Lock()
handlers := append(h.handlers, oneOffHandlers...) handlers := make([]Handler[T], 0, len(h.handlers)+len(oneOffHandlers))
h.mux.Unlock() // unlock is not deferred to avoid deadlocks when Trigger is called recursive in the handlers handlers = append(handlers, h.handlers...)
handlers = append(handlers, oneOffHandlers...)
// unlock is not deferred to avoid deadlocks when Trigger is called recursive by the handlers
h.mux.Unlock()
for _, fn := range handlers { for _, fn := range handlers {
err := fn(data) err := fn(data)
+4 -37
View File
@@ -8,7 +8,6 @@ import (
var columnifyRemoveRegex = regexp.MustCompile(`[^\w\.\*\-\_\@\#]+`) var columnifyRemoveRegex = regexp.MustCompile(`[^\w\.\*\-\_\@\#]+`)
var snakecaseSplitRegex = regexp.MustCompile(`[\W_]+`) var snakecaseSplitRegex = regexp.MustCompile(`[\W_]+`)
var usernamifySplitRegex = regexp.MustCompile(`\W+`)
// UcFirst converts the first character of a string into uppercase. // UcFirst converts the first character of a string into uppercase.
func UcFirst(str string) string { func UcFirst(str string) string {
@@ -33,15 +32,14 @@ func Sentenize(str string) string {
return "" return ""
} }
s := []rune(str) str = UcFirst(str)
sentence := string(unicode.ToUpper(s[0])) + string(s[1:])
lastChar := string(s[len(s)-1:]) lastChar := str[len(str)-1:]
if lastChar != "." && lastChar != "?" && lastChar != "!" { if lastChar != "." && lastChar != "?" && lastChar != "!" {
return sentence + "." return str + "."
} }
return sentence return str
} }
// Sanitize sanitizes `str` by removing all characters satisfying `removePattern`. // Sanitize sanitizes `str` by removing all characters satisfying `removePattern`.
@@ -85,34 +83,3 @@ func Snakecase(str string) string {
return strings.ToLower(result.String()) return strings.ToLower(result.String())
} }
// Usernamify generates a properly formatted username from the provided string.
// Returns "unknown" if `str` is empty or contains only non word characters.
//
// ```go
// Usernamify("John Doe, hello") // "john.doe.hello"
// ```
func Usernamify(str string) string {
// split at any non word character
words := usernamifySplitRegex.Split(strings.ToLower(str), -1)
// concatenate any non empty word with a dot
var result strings.Builder
for _, word := range words {
if word == "" {
continue
}
if result.Len() > 0 {
result.WriteString(".")
}
result.WriteString(word)
}
if result.Len() == 0 {
return "unknown"
}
return result.String()
}
+4 -23
View File
@@ -12,6 +12,7 @@ func TestUcFirst(t *testing.T) {
expected string expected string
}{ }{
{"", ""}, {"", ""},
{" ", " "},
{"Test", "Test"}, {"Test", "Test"},
{"test", "Test"}, {"test", "Test"},
{"test test2", "Test test2"}, {"test test2", "Test test2"},
@@ -55,6 +56,9 @@ func TestSentenize(t *testing.T) {
}{ }{
{"", ""}, {"", ""},
{" ", ""}, {" ", ""},
{".", "."},
{"?", "?"},
{"!", "!"},
{"Test", "Test."}, {"Test", "Test."},
{" test ", "Test."}, {" test ", "Test."},
{"hello world", "Hello world."}, {"hello world", "Hello world."},
@@ -128,26 +132,3 @@ func TestSnakecase(t *testing.T) {
} }
} }
} }
func TestUsernamify(t *testing.T) {
scenarios := []struct {
val string
expected string
}{
{"", "unknown"},
{" ", "unknown"},
{"!@#$%^", "unknown"},
{"...", "unknown"},
{"_", "_"}, // underscore is valid word character
{"John Doe", "john.doe"},
{"John_Doe", "john_doe"},
{".a!b@c#d$e%123. ", "a.b.c.d.e.123"},
{"Hello, world", "hello.world"},
}
for i, scenario := range scenarios {
if result := inflector.Usernamify(scenario.val); result != scenario.expected {
t.Errorf("(%d) Expected %q, got %q", i, scenario.expected, result)
}
}
}
+29 -28
View File
@@ -38,21 +38,23 @@ func ExistInSliceWithRegex(str string, list []string) bool {
if str == field { if str == field {
return true return true
} }
} else { continue
// check for regex match }
pattern, ok := cachedPatterns[field]
if !ok { // check for regex match
var patternErr error pattern, ok := cachedPatterns[field]
pattern, patternErr = regexp.Compile(field) if !ok {
if patternErr != nil { var err error
continue pattern, err = regexp.Compile(field)
} if err != nil {
// "cache" the pattern to avoid compiling it every time continue
cachedPatterns[field] = pattern
}
if pattern != nil && pattern.MatchString(str) {
return true
} }
// "cache" the pattern to avoid compiling it every time
cachedPatterns[field] = pattern
}
if pattern != nil && pattern.MatchString(str) {
return true
} }
} }
@@ -72,46 +74,45 @@ func ToInterfaceSlice[T any](list []T) []any {
// NonzeroUniques returns only the nonzero unique values from a slice. // NonzeroUniques returns only the nonzero unique values from a slice.
func NonzeroUniques[T comparable](list []T) []T { func NonzeroUniques[T comparable](list []T) []T {
result := []T{} result := make([]T, 0, len(list))
existMap := map[T]bool{} existMap := make(map[T]struct{}, len(list))
var zeroVal T var zeroVal T
for _, val := range list { for _, val := range list {
if !existMap[val] && val != zeroVal { if _, ok := existMap[val]; ok || val == zeroVal {
existMap[val] = true continue
result = append(result, val)
} }
existMap[val] = struct{}{}
result = append(result, val)
} }
return result return result
} }
// ToUniqueStringSlice casts `value` to a slice of non-zero unique strings. // ToUniqueStringSlice casts `value` to a slice of non-zero unique strings.
func ToUniqueStringSlice(value any) []string { func ToUniqueStringSlice(value any) (result []string) {
strings := []string{}
switch val := value.(type) { switch val := value.(type) {
case nil: case nil:
// nothing to cast // nothing to cast
case []string: case []string:
strings = val result = val
case string: case string:
if val == "" { if val == "" {
break break
} }
// check if it is a json encoded array of strings // check if it is a json encoded array of strings
if err := json.Unmarshal([]byte(val), &strings); err != nil { if err := json.Unmarshal([]byte(val), &result); err != nil {
// not a json array, just add the string as single array element // not a json array, just add the string as single array element
strings = append(strings, val) result = append(result, val)
} }
case json.Marshaler: // eg. JsonArray case json.Marshaler: // eg. JsonArray
raw, _ := val.MarshalJSON() raw, _ := val.MarshalJSON()
json.Unmarshal(raw, &strings) _ = json.Unmarshal(raw, &result)
default: default:
strings = cast.ToStringSlice(value) result = cast.ToStringSlice(value)
} }
return NonzeroUniques(strings) return NonzeroUniques(result)
} }
+4 -6
View File
@@ -194,11 +194,9 @@ func (r *Runner) Up() ([]string, error) {
// //
// On success returns list with the reverted migrations file names. // On success returns list with the reverted migrations file names.
func (r *Runner) Down(toRevertCount int) ([]string, error) { func (r *Runner) Down(toRevertCount int) ([]string, error) {
applied := []string{} reverted := make([]string, 0, toRevertCount)
err := r.db.Transactional(func(tx *dbx.Tx) error { err := r.db.Transactional(func(tx *dbx.Tx) error {
totalReverted := 0
for i := len(r.migrationsList.Items()) - 1; i >= 0; i-- { for i := len(r.migrationsList.Items()) - 1; i >= 0; i-- {
m := r.migrationsList.Item(i) m := r.migrationsList.Item(i)
@@ -208,7 +206,7 @@ func (r *Runner) Down(toRevertCount int) ([]string, error) {
} }
// revert limit reached // revert limit reached
if toRevertCount-totalReverted <= 0 { if toRevertCount-len(reverted) <= 0 {
break break
} }
@@ -220,7 +218,7 @@ func (r *Runner) Down(toRevertCount int) ([]string, error) {
return fmt.Errorf("Failed to save reverted migration info for %s: %w", m.file, err) return fmt.Errorf("Failed to save reverted migration info for %s: %w", m.file, err)
} }
applied = append(applied, m.file) reverted = append(reverted, m.file)
} }
return nil return nil
@@ -229,7 +227,7 @@ func (r *Runner) Down(toRevertCount int) ([]string, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
return applied, nil return reverted, nil
} }
func (r *Runner) createMigrationsTable() error { func (r *Runner) createMigrationsTable() error {
+8 -3
View File
@@ -104,7 +104,8 @@ func TestRunnerUpAndDown(t *testing.T) {
// Down() // Down()
// --- // ---
if _, err := r.Down(2); err != nil { // revert one migration
if _, err := r.Down(1); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@@ -112,8 +113,12 @@ func TestRunnerUpAndDown(t *testing.T) {
t.Fatal("Didn't expect 3_test to be reverted.") t.Fatal("Didn't expect 3_test to be reverted.")
} }
if !test1DownCalled || !test2DownCalled { if !test2DownCalled {
t.Fatalf("Expected 1_test and 2_test to be reverted, got %v and %v", test1DownCalled, test2DownCalled) t.Fatal("Expected 2_test to be reverted.")
}
if test1DownCalled {
t.Fatal("Didn't expect 1_test to be reverted.")
} }
} }
+6 -1
View File
@@ -7,6 +7,7 @@ import (
"mime/multipart" "mime/multipart"
"net/http" "net/http"
"path/filepath" "path/filepath"
"regexp"
"github.com/pocketbase/pocketbase/tools/security" "github.com/pocketbase/pocketbase/tools/security"
) )
@@ -15,6 +16,8 @@ import (
// will be used when parsing a form request body. // will be used when parsing a form request body.
const DefaultMaxMemory = 32 << 20 // 32mb const DefaultMaxMemory = 32 << 20 // 32mb
var extensionInvalidCharsRegex = regexp.MustCompile(`[^\w\.\*\-\+\=\#]+`)
// UploadedFile defines a single multipart uploaded file instance. // UploadedFile defines a single multipart uploaded file instance.
type UploadedFile struct { type UploadedFile struct {
name string name string
@@ -65,8 +68,10 @@ func FindUploadedFiles(r *http.Request, key string) ([]*UploadedFile, error) {
return nil, err return nil, err
} }
ext := extensionInvalidCharsRegex.ReplaceAllString(filepath.Ext(fh.Filename), "")
result[i] = &UploadedFile{ result[i] = &UploadedFile{
name: fmt.Sprintf("%s%s", security.RandomString(32), filepath.Ext(fh.Filename)), name: fmt.Sprintf("%s%s", security.RandomString(32), ext),
header: fh, header: fh,
bytes: buf.Bytes(), bytes: buf.Bytes(),
} }
+33 -52
View File
@@ -27,21 +27,16 @@ var parsedFilterData = store.New(make(map[string][]fexpr.ExprGroup, 50))
// BuildExpr parses the current filter data and returns a new db WHERE expression. // BuildExpr parses the current filter data and returns a new db WHERE expression.
func (f FilterData) BuildExpr(fieldResolver FieldResolver) (dbx.Expression, error) { func (f FilterData) BuildExpr(fieldResolver FieldResolver) (dbx.Expression, error) {
raw := string(f) raw := string(f)
var data []fexpr.ExprGroup
if parsedFilterData.Has(raw) { if parsedFilterData.Has(raw) {
data = parsedFilterData.Get(raw) return f.build(parsedFilterData.Get(raw), fieldResolver)
} else {
var err error
data, err = fexpr.Parse(raw)
if err != nil {
return nil, err
}
// store in cache
// (the limit size is arbitrary and it is there to prevent the cache growing too big)
parsedFilterData.SetIfLessThanLimit(raw, data, 500)
} }
data, err := fexpr.Parse(raw)
if err != nil {
return nil, err
}
// store in cache
// (the limit size is arbitrary and it is there to prevent the cache growing too big)
parsedFilterData.SetIfLessThanLimit(raw, data, 500)
return f.build(data, fieldResolver) return f.build(data, fieldResolver)
} }
@@ -94,30 +89,18 @@ func (f FilterData) resolveTokenizedExpr(expr fexpr.Expr, fieldResolver FieldRes
// merge both operands parameters (if any) // merge both operands parameters (if any)
params := dbx.Params{} params := dbx.Params{}
if len(lParams) > 0 { for k, v := range lParams {
for k, v := range lParams { params[k] = v
params[k] = v
}
} }
if len(rParams) > 0 { for k, v := range rParams {
for k, v := range rParams { params[k] = v
params[k] = v
}
} }
switch expr.Op { switch expr.Op {
case fexpr.SignEq: case fexpr.SignEq:
op := "=" return dbx.NewExp(fmt.Sprintf("COALESCE(%s, '') = COALESCE(%s, '')", lName, rName), params), nil
if strings.ToLower(lName) == "null" || strings.ToLower(rName) == "null" {
op = "IS"
}
return dbx.NewExp(fmt.Sprintf("%s %s %s", lName, op, rName), params), nil
case fexpr.SignNeq: case fexpr.SignNeq:
op := "!=" return dbx.NewExp(fmt.Sprintf("COALESCE(%s, '') != COALESCE(%s, '')", lName, rName), params), nil
if strings.ToLower(lName) == "null" || strings.ToLower(rName) == "null" {
op = "IS NOT"
}
return dbx.NewExp(fmt.Sprintf("%s %s %s", lName, op, rName), params), nil
case fexpr.SignLike: case fexpr.SignLike:
// normalize operands and switch sides if the left operand is a number or text // normalize operands and switch sides if the left operand is a number or text
if len(lParams) > 0 { if len(lParams) > 0 {
@@ -144,35 +127,37 @@ func (f FilterData) resolveTokenizedExpr(expr fexpr.Expr, fieldResolver FieldRes
} }
func (f FilterData) resolveToken(token fexpr.Token, fieldResolver FieldResolver) (name string, params dbx.Params, err error) { func (f FilterData) resolveToken(token fexpr.Token, fieldResolver FieldResolver) (name string, params dbx.Params, err error) {
if token.Type == fexpr.TokenIdentifier { switch token.Type {
case fexpr.TokenIdentifier:
name, params, err := fieldResolver.Resolve(token.Literal) name, params, err := fieldResolver.Resolve(token.Literal)
if name == "" || err != nil { if name == "" || err != nil {
// if `null` field is missing, treat `null` identifier as NULL token m := map[string]string{
if strings.ToLower(token.Literal) == "null" { // if `null` field is missing, treat `null` identifier as NULL token
return "NULL", nil, nil "null": "NULL",
// if `true` field is missing, treat `true` identifier as TRUE token
"true": "1",
// if `false` field is missing, treat `false` identifier as FALSE token
"false": "0",
} }
if v, ok := m[strings.ToLower(token.Literal)]; ok {
// if `true` field is missing, treat `true` identifier as TRUE token return v, nil, nil
if strings.ToLower(token.Literal) == "true" {
return "1", nil, nil
} }
// if `false` field is missing, treat `false` identifier as FALSE token
if strings.ToLower(token.Literal) == "false" {
return "0", nil, nil
}
return "", nil, err return "", nil, err
} }
return name, params, err return name, params, err
} case fexpr.TokenText:
if token.Type == fexpr.TokenNumber || token.Type == fexpr.TokenText {
placeholder := "t" + security.RandomString(7) placeholder := "t" + security.RandomString(7)
name := fmt.Sprintf("{:%s}", placeholder) name := fmt.Sprintf("{:%s}", placeholder)
params := dbx.Params{placeholder: token.Literal} params := dbx.Params{placeholder: token.Literal}
return name, params, nil
case fexpr.TokenNumber:
placeholder := "t" + security.RandomString(7)
name := fmt.Sprintf("{:%s}", placeholder)
params := dbx.Params{placeholder: cast.ToFloat64(token.Literal)}
return name, params, nil return name, params, nil
} }
@@ -182,10 +167,6 @@ func (f FilterData) resolveToken(token fexpr.Token, fieldResolver FieldResolver)
func (f FilterData) normalizeLikeParams(params dbx.Params) dbx.Params { func (f FilterData) normalizeLikeParams(params dbx.Params) dbx.Params {
result := dbx.Params{} result := dbx.Params{}
if len(params) == 0 {
return result
}
for k, v := range params { for k, v := range params {
vStr := cast.ToString(v) vStr := cast.ToString(v)
if !strings.Contains(vStr, "%") { if !strings.Contains(vStr, "%") {
+5 -5
View File
@@ -39,25 +39,25 @@ func TestFilterDataBuildExpr(t *testing.T) {
"^" + "^" +
regexp.QuoteMeta("((([[test1]] > {:") + regexp.QuoteMeta("((([[test1]] > {:") +
".+" + ".+" +
regexp.QuoteMeta("}) OR ([[test2]] != {:") + regexp.QuoteMeta("}) OR (COALESCE([[test2]], '') != COALESCE({:") +
".+" + ".+" +
regexp.QuoteMeta("})) AND ([[test3]] LIKE {:") + regexp.QuoteMeta("}, ''))) AND ([[test3]] LIKE {:") +
".+" + ".+" +
regexp.QuoteMeta("})) AND ([[test4.sub]] IS NULL)") + regexp.QuoteMeta("})) AND (COALESCE([[test4.sub]], '') = COALESCE(NULL, ''))") +
"$", "$",
}, },
// combination of special literals (null, true, false) // combination of special literals (null, true, false)
{ {
"test1=true && test2 != false && test3 = null || test4.sub != null", "test1=true && test2 != false && test3 = null || test4.sub != null",
false, false,
"^" + regexp.QuoteMeta("((([[test1]] = 1) AND ([[test2]] != 0)) AND ([[test3]] IS NULL)) OR ([[test4.sub]] IS NOT NULL)") + "$", "^" + regexp.QuoteMeta("(((COALESCE([[test1]], '') = COALESCE(1, '')) AND (COALESCE([[test2]], '') != COALESCE(0, ''))) AND (COALESCE([[test3]], '') = COALESCE(NULL, ''))) OR (COALESCE([[test4.sub]], '') != COALESCE(NULL, ''))") + "$",
}, },
// all operators // all operators
{ {
"(test1 = test2 || test2 != test3) && (test2 ~ 'example' || test2 !~ '%%abc') && 'switch1%%' ~ test1 && 'switch2' !~ test2 && test3 > 1 && test3 >= 0 && test3 <= 4 && 2 < 5", "(test1 = test2 || test2 != test3) && (test2 ~ 'example' || test2 !~ '%%abc') && 'switch1%%' ~ test1 && 'switch2' !~ test2 && test3 > 1 && test3 >= 0 && test3 <= 4 && 2 < 5",
false, false,
"^" + "^" +
regexp.QuoteMeta("(((((((([[test1]] = [[test2]]) OR ([[test2]] != [[test3]])) AND (([[test2]] LIKE {:") + regexp.QuoteMeta("((((((((COALESCE([[test1]], '') = COALESCE([[test2]], '')) OR (COALESCE([[test2]], '') != COALESCE([[test3]], ''))) AND (([[test2]] LIKE {:") +
".+" + ".+" +
regexp.QuoteMeta("}) OR ([[test2]] NOT LIKE {:") + regexp.QuoteMeta("}) OR ([[test2]] NOT LIKE {:") +
".+" + ".+" +
+33 -30
View File
@@ -37,6 +37,7 @@ type Provider struct {
query *dbx.SelectQuery query *dbx.SelectQuery
page int page int
perPage int perPage int
countColumn string
sort []SortField sort []SortField
filter []FilterData filter []FilterData
} }
@@ -67,6 +68,13 @@ func (s *Provider) Query(query *dbx.SelectQuery) *Provider {
return s return s
} }
// CountColumn specifies an optional distinct column to use in the
// SELECT COUNT query.
func (s *Provider) CountColumn(countColumn string) *Provider {
s.countColumn = countColumn
return s
}
// Page sets the `page` field of the current search provider. // Page sets the `page` field of the current search provider.
// //
// Normalization on the `page` value is done during `Exec()`. // Normalization on the `page` value is done during `Exec()`.
@@ -121,8 +129,7 @@ func (s *Provider) Parse(urlQuery string) error {
return err return err
} }
rawPage := params.Get(PageQueryParam) if rawPage := params.Get(PageQueryParam); rawPage != "" {
if rawPage != "" {
page, err := strconv.Atoi(rawPage) page, err := strconv.Atoi(rawPage)
if err != nil { if err != nil {
return err return err
@@ -130,8 +137,7 @@ func (s *Provider) Parse(urlQuery string) error {
s.Page(page) s.Page(page)
} }
rawPerPage := params.Get(PerPageQueryParam) if rawPerPage := params.Get(PerPageQueryParam); rawPerPage != "" {
if rawPerPage != "" {
perPage, err := strconv.Atoi(rawPerPage) perPage, err := strconv.Atoi(rawPerPage)
if err != nil { if err != nil {
return err return err
@@ -139,15 +145,13 @@ func (s *Provider) Parse(urlQuery string) error {
s.PerPage(perPage) s.PerPage(perPage)
} }
rawSort := params.Get(SortQueryParam) if rawSort := params.Get(SortQueryParam); rawSort != "" {
if rawSort != "" {
for _, sortField := range ParseSortFromString(rawSort) { for _, sortField := range ParseSortFromString(rawSort) {
s.AddSort(sortField) s.AddSort(sortField)
} }
} }
rawFilter := params.Get(FilterQueryParam) if rawFilter := params.Get(FilterQueryParam); rawFilter != "" {
if rawFilter != "" {
s.AddFilter(FilterData(rawFilter)) s.AddFilter(FilterData(rawFilter))
} }
@@ -165,41 +169,40 @@ func (s *Provider) Exec(items any) (*Result, error) {
modelsQuery := *s.query modelsQuery := *s.query
// apply filters // apply filters
if len(s.filter) > 0 { for _, f := range s.filter {
for _, f := range s.filter { expr, err := f.BuildExpr(s.fieldResolver)
expr, err := f.BuildExpr(s.fieldResolver) if err != nil {
if err != nil { return nil, err
return nil, err }
} if expr != nil {
if expr != nil { modelsQuery.AndWhere(expr)
modelsQuery.AndWhere(expr)
}
} }
} }
// apply sorting // apply sorting
if len(s.sort) > 0 { for _, sortField := range s.sort {
for _, sortField := range s.sort { expr, err := sortField.BuildExpr(s.fieldResolver)
expr, err := sortField.BuildExpr(s.fieldResolver) if err != nil {
if err != nil { return nil, err
return nil, err }
} if expr != "" {
if expr != "" { modelsQuery.AndOrderBy(expr)
modelsQuery.AndOrderBy(expr)
}
} }
} }
// apply field resolver query modifications (if any) // apply field resolver query modifications (if any)
updateQueryErr := s.fieldResolver.UpdateQuery(&modelsQuery) if err := s.fieldResolver.UpdateQuery(&modelsQuery); err != nil {
if updateQueryErr != nil { return nil, err
return nil, updateQueryErr
} }
// count // count
var totalCount int64 var totalCount int64
countQuery := modelsQuery countQuery := modelsQuery
if err := countQuery.Select("count(*)").Row(&totalCount); err != nil { countQuery.Distinct(false).Select("COUNT(*)")
if s.countColumn != "" {
countQuery.Select("COUNT(DISTINCT(" + s.countColumn + "))")
}
if err := countQuery.Row(&totalCount); err != nil {
return nil, err return nil, err
} }
+41 -9
View File
@@ -60,6 +60,15 @@ func TestProviderPerPage(t *testing.T) {
} }
} }
func TestProviderCountColumn(t *testing.T) {
r := &testFieldResolver{}
p := NewProvider(r).CountColumn("test")
if p.countColumn != "test" {
t.Fatalf("Expected distinct count column %v, got %v", "test", p.countColumn)
}
}
func TestProviderSort(t *testing.T) { func TestProviderSort(t *testing.T) {
initialSort := []SortField{{"test1", SortAsc}, {"test2", SortAsc}} initialSort := []SortField{{"test1", SortAsc}, {"test2", SortAsc}}
r := &testFieldResolver{} r := &testFieldResolver{}
@@ -214,6 +223,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
perPage int perPage int
sort []SortField sort []SortField
filter []FilterData filter []FilterData
countColumn string
expectError bool expectError bool
expectResult string expectResult string
expectQueries []string expectQueries []string
@@ -224,10 +234,11 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
10, 10,
[]SortField{}, []SortField{},
[]FilterData{}, []FilterData{},
"",
false, false,
`{"page":1,"perPage":10,"totalItems":2,"items":[{"test1":1,"test2":"test2.1","test3":""},{"test1":2,"test2":"test2.2","test3":""}]}`, `{"page":1,"perPage":10,"totalItems":2,"items":[{"test1":1,"test2":"test2.1","test3":""},{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{ []string{
"SELECT count(*) FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC", "SELECT COUNT(*) FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC",
"SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 10", "SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 10",
}, },
}, },
@@ -237,10 +248,11 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
0, // fallback to default 0, // fallback to default
[]SortField{}, []SortField{},
[]FilterData{}, []FilterData{},
"",
false, false,
`{"page":1,"perPage":30,"totalItems":2,"items":[{"test1":1,"test2":"test2.1","test3":""},{"test1":2,"test2":"test2.2","test3":""}]}`, `{"page":1,"perPage":30,"totalItems":2,"items":[{"test1":1,"test2":"test2.1","test3":""},{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{ []string{
"SELECT count(*) FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC", "SELECT COUNT(*) FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC",
"SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 30", "SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 30",
}, },
}, },
@@ -250,6 +262,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
10, 10,
[]SortField{{"unknown", SortAsc}}, []SortField{{"unknown", SortAsc}},
[]FilterData{}, []FilterData{},
"",
true, true,
"", "",
nil, nil,
@@ -260,6 +273,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
10, 10,
[]SortField{}, []SortField{},
[]FilterData{"test2 = 'test2.1'", "invalid"}, []FilterData{"test2 = 'test2.1'", "invalid"},
"",
true, true,
"", "",
nil, nil,
@@ -270,11 +284,12 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
5555, // will be limited by MaxPerPage 5555, // will be limited by MaxPerPage
[]SortField{{"test2", SortDesc}}, []SortField{{"test2", SortDesc}},
[]FilterData{"test2 != null", "test1 >= 2"}, []FilterData{"test2 != null", "test1 >= 2"},
"",
false, false,
`{"page":1,"perPage":` + fmt.Sprint(MaxPerPage) + `,"totalItems":1,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`, `{"page":1,"perPage":` + fmt.Sprint(MaxPerPage) + `,"totalItems":1,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{ []string{
"SELECT count(*) FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (test2 IS NOT null)) AND (test1 >= '2') ORDER BY `test1` ASC, `test2` DESC", "SELECT COUNT(*) FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= 2) ORDER BY `test1` ASC, `test2` DESC",
"SELECT * FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (test2 IS NOT null)) AND (test1 >= '2') ORDER BY `test1` ASC, `test2` DESC LIMIT 200", "SELECT * FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= 2) ORDER BY `test1` ASC, `test2` DESC LIMIT 200",
}, },
}, },
// valid sort and filter fields (zero results) // valid sort and filter fields (zero results)
@@ -283,11 +298,12 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
10, 10,
[]SortField{{"test3", SortAsc}}, []SortField{{"test3", SortAsc}},
[]FilterData{"test3 != ''"}, []FilterData{"test3 != ''"},
"",
false, false,
`{"page":1,"perPage":10,"totalItems":0,"items":[]}`, `{"page":1,"perPage":10,"totalItems":0,"items":[]}`,
[]string{ []string{
"SELECT count(*) FROM `test` WHERE (NOT (`test1` IS NULL)) AND (test3 != '') ORDER BY `test1` ASC, `test3` ASC", "SELECT COUNT(*) FROM `test` WHERE (NOT (`test1` IS NULL)) AND (COALESCE(test3, '') != COALESCE('', '')) ORDER BY `test1` ASC, `test3` ASC",
"SELECT * FROM `test` WHERE (NOT (`test1` IS NULL)) AND (test3 != '') ORDER BY `test1` ASC, `test3` ASC LIMIT 10", "SELECT * FROM `test` WHERE (NOT (`test1` IS NULL)) AND (COALESCE(test3, '') != COALESCE('', '')) ORDER BY `test1` ASC, `test3` ASC LIMIT 10",
}, },
}, },
// pagination test // pagination test
@@ -296,10 +312,25 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
1, 1,
[]SortField{}, []SortField{},
[]FilterData{}, []FilterData{},
"",
false, false,
`{"page":2,"perPage":1,"totalItems":2,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`, `{"page":2,"perPage":1,"totalItems":2,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{ []string{
"SELECT count(*) FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC", "SELECT COUNT(*) FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC",
"SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 1 OFFSET 1",
},
},
// distinct count column
{
3,
1,
[]SortField{},
[]FilterData{},
"test.test1",
false,
`{"page":2,"perPage":1,"totalItems":2,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{
"SELECT COUNT(DISTINCT(test.test1)) FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC",
"SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 1 OFFSET 1", "SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 1 OFFSET 1",
}, },
}, },
@@ -314,7 +345,8 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
Page(s.page). Page(s.page).
PerPage(s.perPage). PerPage(s.perPage).
Sort(s.sort). Sort(s.sort).
Filter(s.filter) Filter(s.filter).
CountColumn(s.countColumn)
result, err := p.Exec(&[]testTableStruct{}) result, err := p.Exec(&[]testTableStruct{})
@@ -344,7 +376,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
for _, q := range testDB.CalledQueries { for _, q := range testDB.CalledQueries {
if !list.ExistInSliceWithRegex(q, s.expectQueries) { if !list.ExistInSliceWithRegex(q, s.expectQueries) {
t.Errorf("(%d) Didn't expect query %v", i, q) t.Errorf("(%d) Didn't expect query \n%v", i, q)
} }
} }
} }
+4 -12
View File
@@ -34,26 +34,18 @@ func (s *SortField) BuildExpr(fieldResolver FieldResolver) (string, error) {
// //
// Example: // Example:
// fields := search.ParseSortFromString("-name,+created") // fields := search.ParseSortFromString("-name,+created")
func ParseSortFromString(str string) []SortField { func ParseSortFromString(str string) (fields []SortField) {
result := []SortField{}
data := strings.Split(str, ",") data := strings.Split(str, ",")
for _, field := range data { for _, field := range data {
// trim whitespaces // trim whitespaces
field = strings.TrimSpace(field) field = strings.TrimSpace(field)
var dir string
if strings.HasPrefix(field, "-") { if strings.HasPrefix(field, "-") {
dir = SortDesc fields = append(fields, SortField{strings.TrimPrefix(field, "-"), SortDesc})
field = strings.TrimPrefix(field, "-")
} else { } else {
dir = SortAsc fields = append(fields, SortField{strings.TrimPrefix(field, "+"), SortAsc})
field = strings.TrimPrefix(field, "+")
} }
result = append(result, SortField{field, dir})
} }
return result return
} }
+1 -6
View File
@@ -66,10 +66,5 @@ func Decrypt(cipherText string, key string) ([]byte, error) {
} }
nonce, cipherByteClean := cipherByte[:nonceSize], cipherByte[nonceSize:] nonce, cipherByteClean := cipherByte[:nonceSize], cipherByte[nonceSize:]
plainData, err := gcm.Open(nil, nonce, cipherByteClean, nil) return gcm.Open(nil, nonce, cipherByteClean, nil)
if err != nil {
return nil, err
}
return plainData, nil
} }
+3 -7
View File
@@ -24,9 +24,7 @@ func ParseUnverifiedJWT(token string) (jwt.MapClaims, error) {
// ParseJWT verifies and parses JWT token and returns its claims. // ParseJWT verifies and parses JWT token and returns its claims.
func ParseJWT(token string, verificationKey string) (jwt.MapClaims, error) { func ParseJWT(token string, verificationKey string) (jwt.MapClaims, error) {
parser := &jwt.Parser{ parser := jwt.NewParser(jwt.WithValidMethods([]string{"HS256"}))
ValidMethods: []string{"HS256"},
}
parsedToken, err := parser.Parse(token, func(t *jwt.Token) (any, error) { parsedToken, err := parser.Parse(token, func(t *jwt.Token) (any, error) {
return []byte(verificationKey), nil return []byte(verificationKey), nil
@@ -50,10 +48,8 @@ func NewToken(payload jwt.MapClaims, signingKey string, secondsDuration int64) (
"exp": time.Now().Add(seconds).Unix(), "exp": time.Now().Add(seconds).Unix(),
} }
if len(payload) > 0 { for k, v := range payload {
for k, v := range payload { claims[k] = v
claims[k] = v
}
} }
return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString([]byte(signingKey)) return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString([]byte(signingKey))
+8
View File
@@ -13,6 +13,14 @@ func New[T any](data map[string]T) *Store[T] {
return &Store[T]{data: data} return &Store[T]{data: data}
} }
// RemoveAll removes all the existing store entries.
func (s *Store[T]) RemoveAll() {
s.mux.Lock()
defer s.mux.Unlock()
s.data = make(map[string]T)
}
// Remove removes a single entry from the store. // Remove removes a single entry from the store.
// //
// Remove does nothing if key doesn't exist in the store. // Remove does nothing if key doesn't exist in the store.
+14
View File
@@ -14,6 +14,20 @@ func TestNew(t *testing.T) {
} }
} }
func TestRemoveAll(t *testing.T) {
s := store.New(map[string]bool{"test1": true, "test2": true})
keys := []string{"test1", "test2"}
s.RemoveAll()
for i, key := range keys {
if s.Has(key) {
t.Errorf("(%d) Expected %q to be removed", i, key)
}
}
}
func TestRemove(t *testing.T) { func TestRemove(t *testing.T) {
s := store.New(map[string]bool{"test": true}) s := store.New(map[string]bool{"test": true})
+1 -1
View File
@@ -1,5 +1,5 @@
# all environments should start with 'PB_' prefix # all environments should start with 'PB_' prefix
PB_BACKEND_URL = / PB_BACKEND_URL = ../
PB_PROFILE_COLLECTION = profiles PB_PROFILE_COLLECTION = profiles
PB_RULES_SYNTAX_DOCS = https://pocketbase.io/docs/manage-collections#rules-filters-syntax PB_RULES_SYNTAX_DOCS = https://pocketbase.io/docs/manage-collections#rules-filters-syntax
PB_INSTALLER_PARAM = installer PB_INSTALLER_PARAM = installer
-12
View File
@@ -1,12 +0,0 @@
import{S as Sa,i as va,s as Ca,e as Aa,f as Ma,g as Da,y as xn,o as Oa,G as Ta,H as Ba,I as Ra,P as Pa,J as La,C as kn,K as Ea}from"./index.c63abb6b.js";class z{constructor(){}lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Ve.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){let i=[];return this.decompose(e,t,i,0),Ve.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Zt(this),r=new Zt(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Zt(this,e)}iterRange(e,t=this.length){return new zo(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new qo(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?z.empty:e.length<=32?new Q(e):Ve.from(Q.split(e,[]))}}class Q extends z{constructor(e,t=Ia(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Na(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new Q(hr(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Pi(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new Q(l,o.length+r.length));else{let h=l.length>>1;i.push(new Q(l.slice(0,h)),new Q(l.slice(h)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof Q))return super.replace(e,t,i);let s=Pi(this.text,Pi(i.text,hr(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new Q(s,r):Ve.from(Q.split(s,[]),r)}sliceString(e,t=this.length,i=`
`){let s="";for(let r=0,o=0;r<=t&&o<this.text.length;o++){let l=this.text[o],h=r+l.length;r>e&&o&&(s+=i),e<h&&t>r&&(s+=l.slice(Math.max(0,e-r),t-r)),r=h+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new Q(i,s)),i=[],s=-1);return s>-1&&t.push(new Q(i,s)),t}}class Ve extends z{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,h=i+o.lines-1;if((t?h:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=h+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r<this.children.length;r++){let l=this.children[r],h=o+l.length;if(e<=h&&t>=o){let a=s&((o<=e?1:0)|(h>=t?2:0));o>=e&&h<=t&&!a?i.push(l):l.decompose(e-o,t-o,i,a)}o=h+1}}replace(e,t,i){if(i.lines<this.lines)for(let s=0,r=0;s<this.children.length;s++){let o=this.children[s],l=r+o.length;if(e>=r&&t<=l){let h=o.replace(e-r,t-r,i),a=this.lines-o.lines+h.lines;if(h.lines<a>>5-1&&h.lines>a>>5+1){let c=this.children.slice();return c[s]=h,new Ve(c,this.length-(t-e)+i.length)}return super.replace(r,l,h)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=`
`){let s="";for(let r=0,o=0;r<this.children.length&&o<=t;r++){let l=this.children[r],h=o+l.length;o>e&&r&&(s+=i),e<h&&t>o&&(s+=l.sliceString(e-o,t-o,i)),o=h+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Ve))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let h=this.children[s],a=e.children[r];if(h!=a)return i+h.scanIdentical(a,t);i+=h.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new Q(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],h=0,a=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof Ve)for(let g of d.children)f(g);else d.lines>o&&(h>o||!h)?(u(),l.push(d)):d instanceof Q&&h&&(p=c[c.length-1])instanceof Q&&d.lines+p.lines<=32?(h+=d.lines,a+=d.length+1,c[c.length-1]=new Q(p.text.concat(d.text),p.length+1+d.length)):(h+d.lines>s&&u(),h+=d.lines,a+=d.length+1,c.push(d))}function u(){h!=0&&(l.push(c.length==1?c[0]:Ve.from(c,a)),a=-1,h=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Ve(l,t)}}z.empty=new Q([""],0);function Ia(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Pi(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r<n.length&&s<=i;r++){let l=n[r],h=s+l.length;h>=t&&(h>i&&(l=l.slice(0,i-s)),s<t&&(l=l.slice(t-s)),o?(e[e.length-1]+=l,o=!1):e.push(l)),s=h+1}return e}function hr(n,e,t){return Pi(n,[""],e,t)}class Zt{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value="",this.nodes=[e],this.offsets=[t>0?1:(e instanceof Q?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof Q?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=`
`,this;e--}else if(s instanceof Q){let h=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,h.length>Math.max(0,e))return this.value=e==0?h:t>0?h.slice(e):h.slice(0,h.length-e),this;e-=h.length}else{let h=s.children[o+(t<0?-1:0)];e>h.length?(e-=h.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(h),this.offsets.push(t>0?1:(h instanceof Q?h.text.length:h.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class zo{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Zt(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class qo{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol!="undefined"&&(z.prototype[Symbol.iterator]=function(){return this.iter()},Zt.prototype[Symbol.iterator]=zo.prototype[Symbol.iterator]=qo.prototype[Symbol.iterator]=function(){return this});class Na{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}let Dt="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(n=>n?parseInt(n,36):1);for(let n=1;n<Dt.length;n++)Dt[n]+=Dt[n-1];function Va(n){for(let e=1;e<Dt.length;e+=2)if(Dt[e]>n)return Dt[e-1]<=n;return!1}function ar(n){return n>=127462&&n<=127487}const cr=8205;function Ae(n,e,t=!0,i=!0){return(t?Ko:Fa)(n,e,i)}function Ko(n,e,t){if(e==n.length)return e;e&&Uo(n.charCodeAt(e))&&jo(n.charCodeAt(e-1))&&e--;let i=re(n,e);for(e+=ve(i);e<n.length;){let s=re(n,e);if(i==cr||s==cr||t&&Va(s))e+=ve(s),i=s;else if(ar(s)){let r=0,o=e-2;for(;o>=0&&ar(re(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Fa(n,e,t){for(;e>0;){let i=Ko(n,e-2,t);if(i<e)return i;e--}return 0}function Uo(n){return n>=56320&&n<57344}function jo(n){return n>=55296&&n<56320}function re(n,e){let t=n.charCodeAt(e);if(!jo(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return Uo(i)?(t-55296<<10)+(i-56320)+65536:t}function Rs(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function ve(n){return n<65536?1:2}const Kn=/\r\n?|\n/;var me=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(me||(me={}));class We{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t+1];e+=i<0?this.sections[t]:i}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,i=0,s=0;t<this.sections.length;){let r=this.sections[t++],o=this.sections[t++];o<0?(e(i,s,r),s+=r):s+=o,i+=r}}iterChangedRanges(e,t=!1){Un(this,e,t)}get invertedDesc(){let e=[];for(let t=0;t<this.sections.length;){let i=this.sections[t++],s=this.sections[t++];s<0?e.push(i,s) Line truncated
`}get readOnly(){return this.facet(tl)}phrase(e,...t){for(let i of this.facet(V.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(Xo))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){return Xa(this.languageDataAt("wordChars",e).join(""))}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let h=Ae(t,o,!1);if(r(t.slice(h,o))!=ce.Word)break;o=h}for(;l<s;){let h=Ae(t,l);if(r(t.slice(l,h))!=ce.Word)break;l=h}return o==l?null:m.range(o+i,l+i)}}V.allowMultipleSelections=Yo;V.tabSize=T.define({combine:n=>n.length?n[0]:4});V.lineSeparator=_o;V.readOnly=tl;V.phrases=T.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});V.languageData=Xo;V.changeFilter=Qo;V.transactionFilter=Zo;V.transactionExtender=el;_e.reconfigure=H.define();function zt(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}class pt{eq(e){return this==e}range(e,t=e){return ri.create(e,t,this)}}pt.prototype.startSide=pt.prototype.endSide=0;pt.prototype.point=!1;pt.prototype.mapMode=me.TrackDel;class ri{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new ri(e,t,i)}}function Yn(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class Es{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let h=o+l>>1,a=r[h]-e||(i?this.value[h].endSide:this.value[h].startSide)-t;if(h==o)return a>=0?o:l;a>=0?l=h:o=h+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);r<o;r++)if(s(this.from[r]+e,this.to[r]+e,this.value[r])===!1)return!1}map(e,t){let i=[],s=[],r=[],o=-1,l=-1;for(let h=0;h<this.value.length;h++){let a=this.value[h],c=this.from[h]+e,f=this.to[h]+e,u,d;if(c==f){let p=t.mapPos(c,a.startSide,a.mapMode);if(p==null||(u=d=p,a.startSide!=a.endSide&&(d=t.mapPos(c,a.endSide),d<u)))continue}else if(u=t.mapPos(c,a.startSide),d=t.mapPos(f,a.endSide),u>d||u==d&&a.startSide>0&&a.endSide<=0)continue;(d-u||a.endSide-a.startSide)<0||(o<0&&(o=u),a.point&&(l=Math.max(l,d-u)),i.push(a),s.push(u-o),r.push(d-o))}return{mapped:i.length?new Es(s,r,i,l):null,pos:o}}}class Y{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new Y(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(Yn)),this.isEmpty)return t.length?Y.of(t):this;let l=new sl(this,null,-1).goto(0),h=0,a=[],c=new gt;for(;l.value||h<t.length;)if(h<t.length&&(l.from-t[h].from||l.startSide-t[h].value.startSide)>=0){let f=t[h++];c.addInner(f.from,f.to,f.value)||a.push(f)}else l.rangeIndex==1&&l.chunkIndex<this.chunk.length&&(h==t.length||this.chunkEnd(l.chunkIndex)<t[h].from)&&(!o||s>this.chunkEnd(l.chunkIndex)||r<this.chunkPos[l.chunkIndex])&&c.addChunk(this.chunkPos[l.chunkIndex],this.chunk[l.chunkIndex])?l.nextChunk():((!o||s>l.to||r<l.from||o(l.from,l.to,l.value))&&(c.addInner(l.from,l.to,l.value)||a.push(ri.create(l.from,l.to,l.value))),l.next());return c.finishInner(this.nextLayer.isEmpty&&!a.length?Y.empty:this.nextLayer.update({add:a,filter:o,filterFrom:s,filterTo:r}))}map(e){if(e.empty||this.isEmpty)return this;let t=[],i=[],s=-1;for(let o=0;o<this.chunk.length;o++){let l=this.chunkPos[o],h=this.chunk[o],a=e.touchesRange(l,l+h.length);if(a===!1)s=Math.max(s,h.maxPoint),t.push(h),i.push(e.mapPos(l));else if(a===!0){let{mapped:c,pos:f}=h.map(l,e);c&&(s=Math.max(s,c.maxPoint),t.push(c),i.push(f))}}let r=this.nextLayer.map(e);return t.length==0?r:new Y(i,t,r||Y.empty,s)}between(e,t,i){if(!this.isEmpty){for(let s=0;s<this.chunk.length;s++){let r=this.chunkPos[s],o=this.chunk[s];if(t>=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return oi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return oi.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),h=dr(o,l,i),a=new Ut(o,h,r),c=new Ut(l Line truncated
`)}static newName(){let e=yr[mr]||1;return yr[mr]=e+1,Zn+e.toString(36)}static mount(e,t){(e[es]||new _a(e)).mount(Array.isArray(t)?t:[t])}}let bi=null;class _a{constructor(e){if(!e.head&&e.adoptedStyleSheets&&typeof CSSStyleSheet!="undefined"){if(bi)return e.adoptedStyleSheets=[bi.sheet].concat(e.adoptedStyleSheets),e[es]=bi;this.sheet=new CSSStyleSheet,e.adoptedStyleSheets=[this.sheet].concat(e.adoptedStyleSheets),bi=this}else{this.styleTag=(e.ownerDocument||e).createElement("style");let t=e.head||e;t.insertBefore(this.styleTag,t.firstChild)}this.modules=[],e[es]=this}mount(e){let t=this.sheet,i=0,s=0;for(let r=0;r<e.length;r++){let o=e[r],l=this.modules.indexOf(o);if(l<s&&l>-1&&(this.modules.splice(l,1),s--,l=-1),l==-1){if(this.modules.splice(s++,0,o),t)for(let h=0;h<o.rules.length;h++)t.insertRule(o.rules[h],i++)}else{for(;s<l;)i+=this.modules[s++].rules.length;i+=o.rules.length,s++}}if(!t){let r="";for(let o=0;o<this.modules.length;o++)r+=this.modules[o].getRules()+`
`;this.styleTag.textContent=r}}}var rt={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",229:"q"},Rt={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"',229:"Q"},br=typeof navigator!="undefined"&&/Chrome\/(\d+)/.exec(navigator.userAgent),Qa=typeof navigator!="undefined"&&/Apple Computer/.test(navigator.vendor),Za=typeof navigator!="undefined"&&/Gecko\/\d+/.test(navigator.userAgent),wr=typeof navigator!="undefined"&&/Mac/.test(navigator.platform),ec=typeof navigator!="undefined"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),tc=br&&(wr||+br[1]<57)||Za&&wr;for(var oe=0;oe<10;oe++)rt[48+oe]=rt[96+oe]=String(oe);for(var oe=1;oe<=24;oe++)rt[oe+111]="F"+oe;for(var oe=65;oe<=90;oe++)rt[oe]=String.fromCharCode(oe+32),Rt[oe]=String.fromCharCode(oe);for(var vn in rt)Rt.hasOwnProperty(vn)||(Rt[vn]=rt[vn]);function ic(n){var e=tc&&(n.ctrlKey||n.altKey||n.metaKey)||(Qa||ec)&&n.shiftKey&&n.key&&n.key.length==1,t=!e&&n.key||(n.shiftKey?Rt:rt)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function Hi(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Pt(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function nc(){let n=document.activeElement;for(;n&&n.shadowRoot;)n=n.shadowRoot.activeElement;return n}function ts(n,e){if(!e.anchorNode)return!1;try{return Pt(n,e.anchorNode)}catch{return!1}}function li(n){return n.nodeType==3?Lt(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Wi(n,e,t,i){return t?xr(n,e,t,i,-1)||xr(n,e,t,i,1):!1}function is(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function xr(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:zi(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=is(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?zi(n):0}else return!1}}function zi(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}const rl={left:0,right:0,top:0,bottom:0};function on(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function sc(n){return{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function rc(n,e,t,i,s,r,o,l){let h=n.ownerDocument,a=h.defaultView;for(let c=n;c;)if(c.nodeType==1){let f,u=c==h.body;if(u)f=sc(a);else{if(c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.parentNode;continue}let g=c.getBoundingClientRect();f={left:g.left,right:g.left+c.clientWidth,top:g.top,bottom:g.top+c.clientHeight}}let d=0,p=0;if(s=="nearest")e.top<f.top?(p=-(f.top-e.top+o),t>0&&e.bottom>f.bottom+p&&(p=e.bottom-f.bottom+p+o)):e.bottom>f.bottom&&(p=e.bottom-f.bottom+o,t<0&&e.top-p<f.top&&(p=-(f.top+p-e.top+o)));else{let g=e.bottom-e.top,y=f.bottom-f.top;p=(s=="center"&&g<=y?e.top+g/2-y/2:s=="start"||s=="center"&&t<0?e.top-o:e.bottom-y+o)-f.top}if(i=="nearest"?e.left<f.left?(d=-(f.left-e.left+r),t>0&&e.right>f.right+d&&(d=e.right-f.right+d+r)):e.right>f.right&&(d=e.right-f.right+r,t<0&&e.left<f.left+d&&(d=-(f.left+d-e.left+r))):d=(i=="center"?e.left+(e.right-e.left)/2-(f.right-f.left)/2:i=="start"==l?e.left-r:e.right-(f.right-f.left)+r)-f.left,d||p)if(u)a.scrollBy(d,p);else{if(p){let g=c.scrollTop;c.scrollTop+=p,p=c.scrollTop-g}if(d){let g=c.scrollLeft;c.scrollLeft+=d,d=c.scrollLeft-g}e={left:e.left-d,top:e.top-p,right:e.right-d,bottom:e.bottom-p}}if(u)break;c=c.assignedSlot||c.parentNode,i=s="nearest"}else if(c.nodeType==11)c=c.host;else break}class oc{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){this.set(e.anchorNode,e.anchorOffset,e.focusNode,e.focusOffset)}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}}let vt=null;function ol(n){if(n.setActive)return n.setActive();if(vt)return n.focus(vt);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(vt==null?{get preventScroll(){return vt={preventScroll:!0},!0}}:void 0),!vt){vt=!1;for(let t=0;t<e.length;){let iLine truncated
`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),a=m.cursor(t?s.from:s.to)}if(h){if(!h(c))return l}else{if(!i)return a;h=i(c)}l=a}}function Pc(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==ce.Space&&(s=o),s==o}}function Lc(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return m.cursor(s,e.assoc);let o=e.goalColumn,l,h=n.contentDOM.getBoundingClientRect(),a=n.coordsAtPos(s),c=n.documentTop;if(a)o==null&&(o=a.left-h.left),l=r<0?a.top:a.bottom;else{let d=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(h.right-h.left,n.defaultCharacterWidth*(s-d.from))),l=(r<0?d.top:d.bottom)+c}let f=h.left+o,u=i!=null?i:n.defaultLineHeight>>1;for(let d=0;;d+=10){let p=l+(u+d)*r,g=Il(n,{x:f,y:p},!1,r);if(p<h.top||p>h.bottom||(r<0?g<s:g>s))return m.cursor(g,e.assoc,void 0,o)}}function Dn(n,e,t){let i=n.state.facet(Dl).map(s=>s(n));for(;;){let s=!1;for(let r of i)r.between(t.from-1,t.from+1,(o,l,h)=>{t.from>o&&t.from<l&&(t=e.from>t.from?m.cursor(o,1):m.cursor(l,-1),s=!0)});if(!s)return t}}class Ec{constructor(e){this.lastKeyCode=0,this.lastKeyTime=0,this.chromeScrollHack=-1,this.pendingIOSKey=void 0,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastEscPress=0,this.lastContextMenu=0,this.scrollHandlers=[],this.registeredEvents=[],this.customHandlers=[],this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.rapidCompositionStart=!1,this.mouseSelection=null;for(let t in ie){let i=ie[t];e.contentDOM.addEventListener(t,s=>{!Vr(e,s)||this.ignoreDuringComposition(s)||t=="keydown"&&this.keydown(e,s)||(this.mustFlushObserver(s)&&e.observer.forceFlush(),this.runCustomHandlers(t,e,s)?s.preventDefault():i(e,s))}),this.registeredEvents.push(t)}M.chrome&&M.chrome_version>=102&&e.scrollDOM.addEventListener("wheel",()=>{this.chromeScrollHack<0?e.contentDOM.style.pointerEvents="none":window.clearTimeout(this.chromeScrollHack),this.chromeScrollHack=setTimeout(()=>{this.chromeScrollHack=-1,e.contentDOM.style.pointerEvents=""},100)},{passive:!0}),this.notifiedFocused=e.hasFocus,M.safari&&e.contentDOM.addEventListener("input",()=>null)}setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}ensureHandlers(e,t){var i;let s;this.customHandlers=[];for(let r of t)if(s=(i=r.update(e).spec)===null||i===void 0?void 0:i.domEventHandlers){this.customHandlers.push({plugin:r.value,handlers:s});for(let o in s)this.registeredEvents.indexOf(o)<0&&o!="scroll"&&(this.registeredEvents.push(o),e.contentDOM.addEventListener(o,l=>{!Vr(e,l)||this.runCustomHandlers(o,e,l)&&l.preventDefault()}))}}runCustomHandlers(e,t,i){for(let s of this.customHandlers){let r=s.handlers[e];if(r)try{if(r.call(s.plugin,i,t)||i.defaultPrevented)return!0}catch(o){Re(t.state,o)}}return!1}runScrollHandlers(e,t){for(let i of this.customHandlers){let s=i.handlers.scroll;if(s)try{s.call(i.plugin,t,e)}catch(r){Re(e.state,r)}}}keydown(e,t){if(this.lastKeyCode=t.keyCode,this.lastKeyTime=Date.now(),t.keyCode==9&&Date.now()<this.lastEscPress+2e3)return!0;if(M.android&&M.chrome&&!t.synthetic&&(t.keyCode==13||t.keyCode==8))return e.observer.delayAndroidKey(t.key,t.keyCode),!0;let i;return M.ios&&(i=Nl.find(s=>s.keyCode==t.keyCode))&&!(t.ctrlKey||t.altKey||t.metaKey)&&!t.synthetic?(this.pendingIOSKey=i,setTimeout(()=>this.flushIOSKey(e),250),!0):!1}flushIOSKey(e){let t=this.pendingIOSKey;return t?(this.pendingIOSKey=void 0,ti(e.contentDOM,t.key,t.keyCode)):!1}ignoreDuringComposition(e){return/^key/.test(e.type)?this.composing>0?!0:M.safari&&Date.now()-this.compositionEndedAt<100?(this.compositionEndedAt=0,!0):!1:!1}mustFlushObserver(e){return e.type=="keydown"&&e.keyCode!=229||e.type=="compositionend"&&!M.ios}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.mouseSelection&&this.mouseSelection.update(e),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}const Nl=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Vl=[16,17,18,20,91,92,224,225];class Ic{constructor(e,t,i,s){this.view=e,this.style=i,this.mustSelect=s,this.lastEvent=t;let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(V.allowMultipleSelections)&&Nc(e,t),this.dragMove=Vc(e,t),this.dragging=Fc(e,t)&&Fs(t)==1?null:!1,this.dragging===!1&&(t.preventDefault(),this.select(t))}move(e){if(e.buttons==0)return this.destroy();this.dragging===!1&&this.select(this.lastEvent=e)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.i Line truncated
-\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\uFEFF\uFFF9-\uFFFC]`,ws),Bf={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let Bn=null;function Rf(){var n;if(Bn==null&&typeof document!="undefined"&&document.body){let e=document.body.style;Bn=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Bn||!1}const Ii=T.define({combine(n){let e=zt(n,{render:null,specialChars:Tf,addSpecialChars:null});return(e.replaceTabs=!Rf())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,ws)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,ws)),e}});function Pf(n={}){return[Ii.of(n),Lf()]}let so=null;function Lf(){return so||(so=ue.fromClass(class{constructor(n){this.view=n,this.decorations=R.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(Ii)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Of({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=re(e[0],0);if(r==9){let o=s.lineAt(i),l=t.state.tabSize,h=ui(o.text,l,i-o.from);return R.replace({widget:new Vf((l-h%l)*this.view.defaultCharacterWidth)})}return this.decorationCache[r]||(this.decorationCache[r]=R.replace({widget:new Nf(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(Ii);n.startState.facet(Ii)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const Ef="\u2022";function If(n){return n>=32?Ef:n==10?"\u2424":String.fromCharCode(9216+n)}class Nf extends xt{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=If(this.code),i=e.state.phrase("Control character")+" "+(Bf[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement("span");return r.textContent=t,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}}class Vf extends xt{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}class Ff extends xt{constructor(e){super(),this.content=e}toDOM(){let e=document.createElement("span");return e.className="cm-placeholder",e.style.pointerEvents="none",e.appendChild(typeof this.content=="string"?document.createTextNode(this.content):this.content),typeof this.content=="string"?e.setAttribute("aria-label","placeholder "+this.content):e.setAttribute("aria-hidden","true"),e}ignoreEvent(){return!1}}function ro(n){return ue.fromClass(class{constructor(e){this.view=e,this.placeholder=R.set([R.widget({widget:new Ff(n),side:1}).range(0)])}get decorations(){return this.view.state.doc.length?R.none:this.placeholder}},{decorations:e=>e.decorations})}const xs=2e3;function Hf(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>xs||t.off>xs||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let h=i;h<=s;h++){let a=n.doc.line(h);a.length<=l&&r.push(m.range(a.from+o,a.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let h=i;h<=s;h++){let a=n.doc.line(h),c=Qn(a.text,o,n.tabSize,!0);if(c>-1){let f=Qn(a.text,l,n.tabSize);r.push(m.range(a.from+c,a.from+f))}}}return r}function Wf(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function oo(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>xs?-1:s==i.length?Wf(n,e.clientX):ui(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function zf(n,e){let t=oo(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let l=oo(n,s);if(!l)return i;let h=Hf(n.state,t,l);return h.length?o?m.create(h.concat(i.ranges)):m.create(h):i}}:null}function qf(n){let e=(n==null?void 0:n.eventFilter)||(t=>t.altKey&&t.button==0);return O.mouseSelectionStyle.of((t,i)=>e(i)?zf(t,i):null)}const Rn="-10000px";class Kf{constructor(e,t,i){this.facet=t,this.createTooltipView=i,this.input=e.state.facet(t),this.tooltips=this.input.filter(s=>s),this.tooltipViews=this.tooltips.map(i)}update(e){let t=e.state.facet(this.facet),i=t.filter(r=>r);if(t===this.input){for(let r of this.tooltipViews)r.update&&r.update(e);return!1}let s=[] Line truncated
`&&(t="");else{let i=t.indexOf(`
`);i>-1&&(t=t.slice(0,i))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),i=e+t.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(t=t.slice(0,r-(i-t.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);t+=l,i=o+l.length}return{line:t,end:i}}skipGapsTo(e,t,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=e+t;if(i>0?s>r:s>=r)break;t+=this.ranges[++this.rangeIndex].from-s}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to<this.parsedPos;)this.rangeIndex++}emitToken(e,t,i,s,r){if(this.ranges.length>1){r=this.skipGapsTo(t,r,1),t+=r;let o=this.chunk.length;r=this.skipGapsTo(i,r,-1),i+=r,s+=this.chunk.length-o}return this.chunk.push(e,t,i,s),r}parseLine(e){let{line:t,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new bh(t,e?e.state.tabSize:4,e?bt(e.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=xh(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,4,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPos<this.to&&this.parsedPos++}finishChunk(){let e=_.build({buffer:this.chunk,start:this.chunkStart,length:this.parsedPos-this.chunkStart,nodeSet:Wu,topID:0,maxBufferLength:2048,reused:this.chunkReused});e=new _(e.type,e.children,e.positions,e.length,[[this.lang.stateAfter,this.lang.streamParser.copyState(this.state)]]),this.chunks.push(e),this.chunkPos.push(this.chunkStart-this.ranges[0].from),this.chunk=[],this.chunkReused=void 0,this.chunkStart=this.parsedPos}finish(){return new _(this.lang.topNode,this.chunks,this.chunkPos,this.parsedPos-this.ranges[0].from).balance()}}function xh(n,e,t){e.start=e.pos;for(let i=0;i<10;i++){let s=n(e,t);if(e.pos>e.start)return s}throw new Error("Stream parser failed to advance stream.")}const Xs=Object.create(null),ci=[we.none],Wu=new zs(ci),yo=[],kh=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])kh[n]=vh(Xs,e);class Sh{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),kh)}resolve(e){return e?this.table[e]||(this.table[e]=vh(this.extra,e)):0}}const zu=new Sh(Xs);function Fn(n,e){yo.indexOf(n)>-1||(yo.push(n),console.warn(e))}function vh(n,e){let t=null;for(let r of e.split(".")){let o=n[r]||k[r];o?typeof o=="function"?t?t=o(t):Fn(r,`Modifier ${r} used at start of tag`):t?Fn(r,`Tag ${r} used as modifier`):t=o:Fn(r,`Unknown highlighting tag ${r}`)}if(!t)return 0;let i=e.replace(/ /g,"_"),s=we.define({id:ci.length,name:i,props:[lu({[i]:t})]});return ci.push(s),s.id}function qu(n){let e=we.define({id:ci.length,name:"Document",props:[ai.add(()=>n)]});return ci.push(e),e}const Ku=n=>{let e=_s(n.state);return e.line?Uu(n):e.block?Gu(n):!1};function Ys(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}const Uu=Ys(Xu,0),ju=Ys(Ch,0),Gu=Ys((n,e)=>Ch(n,e,$u(e)),0);function _s(n,e=n.selection.main.head){let t=n.languageDataAt("commentTokens",e);return t.length?t[0]:{}}const Jt=50;function Ju(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-Jt,i),o=n.sliceDoc(s,s+Jt),l=/\s*$/.exec(r)[0].length,h=/^\s*/.exec(o)[0].length,a=r.length-l;if(r.slice(a-e.length,a)==e&&o.slice(h,h+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+h,margin:h&&1}};let c,f;s-i<=2*Jt?c=f=n.sliceDoc(i,s):(c=n.sliceDoc(i,i+Jt),f=n.sliceDoc(s-Jt,s));let u=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(c.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(f.charAt(p-1))?1:0}}:null}function $u(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to),r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from,to:s.to})}return e}function Ch(n,e,t=e.selection.ranges){let i=t.map(r=>_s(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>Ju(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;o<s.length;o++)if(l=s[o]){let h=i[o],{open:a,close:c}=l;r.push({from:a.pos-h.open.length,to:a.pos+a.margin},{from:c.pos-c.margin,to:c.pos+h.close.length})}return{changes:r}}return null}function Xu(n,e,t=e.selection.ranges){let i=[],s=-1;for(let{from:r,to:o}of t){let l=i.length,h=1e9;for(let a=r;a<=o;){let c=e.doc.lineAt(a);if(c.from>s&&(r==o||o>c.from)){s=c.from;let f=_s(e,a).line;if(!f)continue;let u=/^\s*/.exec(c.text)[0].length,d=u==c Line truncated
`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp}create(){return this.regexp?new op(this):new rp(this)}getCursor(e,t=0,i=e.length){return this.regexp?Mt(this,e,t,i):At(this,e,t,i)}}class la{constructor(e){this.spec=e}}function At(n,e,t,i){return new Ht(e,n.unquoted,t,i,n.caseSensitive?void 0:s=>s.toLowerCase())}class rp extends la{constructor(e){super(e)}nextMatch(e,t,i){let s=At(this.spec,e,i,e.length).nextOverlapping();return s.done&&(s=At(this.spec,e,0,t).nextOverlapping()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=i;;){let r=Math.max(t,s-1e4-this.spec.unquoted.length),o=At(this.spec,e,r,s),l=null;for(;!o.nextOverlapping().done;)l=o.value;if(l)return l;if(r==t)return null;s-=1e4}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.length)}getReplacement(e){return this.spec.replace}matchAll(e,t){let i=At(this.spec,e,0,e.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=At(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function Mt(n,e,t,i){return new na(e,n.search,n.caseSensitive?void 0:{ignoreCase:!0},t,i)}class op extends la{nextMatch(e,t,i){let s=Mt(this.spec,e,i,e.length).next();return s.done&&(s=Mt(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Mt(this.spec,e,r,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(r==t||l.from>r+10))return l;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.length)}getReplacement(e){return this.spec.replace.replace(/\$([$&\d+])/g,(t,i)=>i=="$"?"$":i=="&"?e.match[0]:i!="0"&&+i<e.match.length?e.match[i]:t)}matchAll(e,t){let i=Mt(this.spec,e,0,e.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Mt(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const fi=H.define(),tr=H.define(),it=ke.define({create(n){return new zn(Ts(n).create(),null)},update(n,e){for(let t of e.effects)t.is(fi)?n=new zn(t.value.create(),n.panel):t.is(tr)&&(n=new zn(n.query,t.value?ir:null));return n},provide:n=>Gi.from(n,e=>e.panel)});class zn{constructor(e,t){this.query=e,this.panel=t}}const lp=R.mark({class:"cm-searchMatch"}),hp=R.mark({class:"cm-searchMatch cm-searchMatch-selected"}),ap=ue.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(it))}update(n){let e=n.state.field(it);(e!=n.startState.field(it)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return R.none;let{view:t}=this,i=new gt;for(let s=0,r=t.visibleRanges,o=r.length;s<o;s++){let{from:l,to:h}=r[s];for(;s<o-1&&h>r[s+1].from-2*250;)h=r[++s].to;n.highlight(t.state.doc,l,h,(a,c)=>{let f=t.state.selection.ranges.some(u=>u.from==a&&u.to==c);i.add(a,c,f?hp:lp)})}return i.finish()}},{decorations:n=>n.decorations});function pi(n){return e=>{let t=e.state.field(it,!1);return t&&t.query.spec.valid?n(e,t):ha(e)}}const en=pi((n,{query:e})=>{let{from:t,to:i}=n.state.selection.main,s=e.nextMatch(n.state.doc,t,i);return!s||s.from==t&&s.to==i?!1:(n.dispatch({selection:{anchor:s.from,head:s.to},scrollIntoView:!0,effects:nr(n,s),userEvent:"select.search"}),!0)}),tn=pi((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main,r=e.prevMatch(t.doc,i,s);return r?(n.dispatch({selection:{anchor:r.from,head:r.to},scrollIntoView:!0,effects:nr(n,r),userEvent:"select.search"}),!0):!1}),cp=pi((n,{query:e})=>{let t=e.matchAll(n.state.doc,1e3);return!t||!t.length?!1:(n.dispatch({selection:m.create(t.map(i=>m.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),fp=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let l=new Ht(n.doc,n.sliceDoc(i,s));!l.next().done;){if(r.length>1e3)return!1;l.value.from==i&&(o=r.length),r.push(m.range(l.value.from,l.value.to))}return e(n.update({selection:m.create(r,o),userEvent:"select.search.matches"})),!0},Po=pi((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t.doc,i,i);if(!r)return!1;let o=[],l,h,a=[];if(r.from==i&&r.to==s&&(h=t.toText(e.getReplacement(r)),o.push({from:r.from,to:r.to,insert:h}),r=e.nextMatch(t.doc,r.from,r.to),a.push(O.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))),r){let c=o.length==0||o[0].from>=r.to?0:r.to-r.from-h.length;l={anchor:r.from-c,head:r.to-c},a.push(nr(n,r))}return n.dispatch({changes:o,selection:l,scrollIntoView:!!l,effects:a,userEvent:"input.replace"}),!0}),up=pi((n,{query:e})=>{if(n.state.readOnly)return!1;let t=e.matchAll(n.state.doc,1e9).map(s=>{let{from:r,to:o}=s;re Line truncated
+12
View File
@@ -0,0 +1,12 @@
import{S as Sa,i as va,s as Ca,e as Aa,f as Ma,g as Da,y as Sn,o as Oa,G as Ta,H as Ba,I as Ra,J as La,K as Pa,C as vn,L as Ea}from"./index.9681f446.js";class z{constructor(){}lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),Ve.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){let i=[];return this.decompose(e,t,i,0),Ve.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new Zt(this),r=new Zt(e);for(let o=t,l=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(l+=s.value.length,s.done||l>=i)return!0}}iter(e=1){return new Zt(this,e)}iterRange(e,t=this.length){return new qo(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Ko(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?z.empty:e.length<=32?new Q(e):Ve.from(Q.split(e,[]))}}class Q extends z{constructor(e,t=Ia(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],l=s+o.length;if((t?i:l)>=e)return new Na(s,l,i,o);s=l+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new Q(ar(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),l=Pi(r.text,o.text.slice(),0,r.length);if(l.length<=32)i.push(new Q(l,o.length+r.length));else{let h=l.length>>1;i.push(new Q(l.slice(0,h)),new Q(l.slice(h)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof Q))return super.replace(e,t,i);let s=Pi(this.text,Pi(i.text,ar(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new Q(s,r):Ve.from(Q.split(s,[]),r)}sliceString(e,t=this.length,i=`
`){let s="";for(let r=0,o=0;r<=t&&o<this.text.length;o++){let l=this.text[o],h=r+l.length;r>e&&o&&(s+=i),e<h&&t>r&&(s+=l.slice(Math.max(0,e-r),t-r)),r=h+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new Q(i,s)),i=[],s=-1);return s>-1&&t.push(new Q(i,s)),t}}class Ve extends z{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],l=s+o.length,h=i+o.lines-1;if((t?h:l)>=e)return o.lineInner(e,t,i,s);s=l+1,i=h+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r<this.children.length;r++){let l=this.children[r],h=o+l.length;if(e<=h&&t>=o){let a=s&((o<=e?1:0)|(h>=t?2:0));o>=e&&h<=t&&!a?i.push(l):l.decompose(e-o,t-o,i,a)}o=h+1}}replace(e,t,i){if(i.lines<this.lines)for(let s=0,r=0;s<this.children.length;s++){let o=this.children[s],l=r+o.length;if(e>=r&&t<=l){let h=o.replace(e-r,t-r,i),a=this.lines-o.lines+h.lines;if(h.lines<a>>5-1&&h.lines>a>>5+1){let c=this.children.slice();return c[s]=h,new Ve(c,this.length-(t-e)+i.length)}return super.replace(r,l,h)}r=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=`
`){let s="";for(let r=0,o=0;r<this.children.length&&o<=t;r++){let l=this.children[r],h=o+l.length;o>e&&r&&(s+=i),e<h&&t>o&&(s+=l.sliceString(e-o,t-o,i)),o=h+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Ve))return 0;let i=0,[s,r,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==l)return i;let h=this.children[s],a=e.children[r];if(h!=a)return i+h.scanIdentical(a,t);i+=h.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new Q(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,l=[],h=0,a=-1,c=[];function f(d){let p;if(d.lines>r&&d instanceof Ve)for(let g of d.children)f(g);else d.lines>o&&(h>o||!h)?(u(),l.push(d)):d instanceof Q&&h&&(p=c[c.length-1])instanceof Q&&d.lines+p.lines<=32?(h+=d.lines,a+=d.length+1,c[c.length-1]=new Q(p.text.concat(d.text),p.length+1+d.length)):(h+d.lines>s&&u(),h+=d.lines,a+=d.length+1,c.push(d))}function u(){h!=0&&(l.push(c.length==1?c[0]:Ve.from(c,a)),a=-1,h=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Ve(l,t)}}z.empty=new Q([""],0);function Ia(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Pi(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r<n.length&&s<=i;r++){let l=n[r],h=s+l.length;h>=t&&(h>i&&(l=l.slice(0,i-s)),s<t&&(l=l.slice(t-s)),o?(e[e.length-1]+=l,o=!1):e.push(l)),s=h+1}return e}function ar(n,e,t){return Pi(n,[""],e,t)}class Zt{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value="",this.nodes=[e],this.offsets=[t>0?1:(e instanceof Q?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,l=s instanceof Q?s.text.length:s.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=`
`,this;e--}else if(s instanceof Q){let h=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,h.length>Math.max(0,e))return this.value=e==0?h:t>0?h.slice(e):h.slice(0,h.length-e),this;e-=h.length}else{let h=s.children[o+(t<0?-1:0)];e>h.length?(e-=h.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(h),this.offsets.push(t>0?1:(h instanceof Q?h.text.length:h.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class qo{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new Zt(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class Ko{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(z.prototype[Symbol.iterator]=function(){return this.iter()},Zt.prototype[Symbol.iterator]=qo.prototype[Symbol.iterator]=Ko.prototype[Symbol.iterator]=function(){return this});class Na{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}let Dt="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(n=>n?parseInt(n,36):1);for(let n=1;n<Dt.length;n++)Dt[n]+=Dt[n-1];function Va(n){for(let e=1;e<Dt.length;e+=2)if(Dt[e]>n)return Dt[e-1]<=n;return!1}function cr(n){return n>=127462&&n<=127487}const fr=8205;function Ae(n,e,t=!0,i=!0){return(t?Uo:Fa)(n,e,i)}function Uo(n,e,t){if(e==n.length)return e;e&&jo(n.charCodeAt(e))&&Go(n.charCodeAt(e-1))&&e--;let i=re(n,e);for(e+=ve(i);e<n.length;){let s=re(n,e);if(i==fr||s==fr||t&&Va(s))e+=ve(s),i=s;else if(cr(s)){let r=0,o=e-2;for(;o>=0&&cr(re(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function Fa(n,e,t){for(;e>0;){let i=Uo(n,e-2,t);if(i<e)return i;e--}return 0}function jo(n){return n>=56320&&n<57344}function Go(n){return n>=55296&&n<56320}function re(n,e){let t=n.charCodeAt(e);if(!Go(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return jo(i)?(t-55296<<10)+(i-56320)+65536:t}function Ls(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function ve(n){return n<65536?1:2}const jn=/\r\n?|\n/;var me=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(me||(me={}));class We{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t+1];e+=i<0?this.sections[t]:i}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,i=0,s=0;t<this.sections.length;){let r=this.sections[t++],o=this.sections[t++];o<0?(e(i,s,r),s+=r):s+=o,i+=r}}iterChangedRanges(e,t=!1){Gn(this,e,t)}get invertedDesc(){let e=[];for(let t=0;t<this.sections.length;){let i=this.sections[t++],s=this.sections[t++];s<0?e.push(i,s):e.push(s Line truncated
`}get readOnly(){return this.facet(il)}phrase(e,...t){for(let i of this.facet(V.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(Yo))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){return Xa(this.languageDataAt("wordChars",e).join(""))}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let h=Ae(t,o,!1);if(r(t.slice(h,o))!=ce.Word)break;o=h}for(;l<s;){let h=Ae(t,l);if(r(t.slice(l,h))!=ce.Word)break;l=h}return o==l?null:m.range(o+i,l+i)}}V.allowMultipleSelections=_o;V.tabSize=T.define({combine:n=>n.length?n[0]:4});V.lineSeparator=Qo;V.readOnly=il;V.phrases=T.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});V.languageData=Yo;V.changeFilter=Zo;V.transactionFilter=el;V.transactionExtender=tl;Qe.reconfigure=H.define();function zt(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],l=i[r];if(l===void 0)i[r]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](l,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}class pt{eq(e){return this==e}range(e,t=e){return ri.create(e,t,this)}}pt.prototype.startSide=pt.prototype.endSide=0;pt.prototype.point=!1;pt.prototype.mapMode=me.TrackDel;class ri{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new ri(e,t,i)}}function Qn(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class Is{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,l=r.length;;){if(o==l)return o;let h=o+l>>1,a=r[h]-e||(i?this.value[h].endSide:this.value[h].startSide)-t;if(h==o)return a>=0?o:l;a>=0?l=h:o=h+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);r<o;r++)if(s(this.from[r]+e,this.to[r]+e,this.value[r])===!1)return!1}map(e,t){let i=[],s=[],r=[],o=-1,l=-1;for(let h=0;h<this.value.length;h++){let a=this.value[h],c=this.from[h]+e,f=this.to[h]+e,u,d;if(c==f){let p=t.mapPos(c,a.startSide,a.mapMode);if(p==null||(u=d=p,a.startSide!=a.endSide&&(d=t.mapPos(c,a.endSide),d<u)))continue}else if(u=t.mapPos(c,a.startSide),d=t.mapPos(f,a.endSide),u>d||u==d&&a.startSide>0&&a.endSide<=0)continue;(d-u||a.endSide-a.startSide)<0||(o<0&&(o=u),a.point&&(l=Math.max(l,d-u)),i.push(a),s.push(u-o),r.push(d-o))}return{mapped:i.length?new Is(s,r,i,l):null,pos:o}}}class Y{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new Y(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(Qn)),this.isEmpty)return t.length?Y.of(t):this;let l=new rl(this,null,-1).goto(0),h=0,a=[],c=new gt;for(;l.value||h<t.length;)if(h<t.length&&(l.from-t[h].from||l.startSide-t[h].value.startSide)>=0){let f=t[h++];c.addInner(f.from,f.to,f.value)||a.push(f)}else l.rangeIndex==1&&l.chunkIndex<this.chunk.length&&(h==t.length||this.chunkEnd(l.chunkIndex)<t[h].from)&&(!o||s>this.chunkEnd(l.chunkIndex)||r<this.chunkPos[l.chunkIndex])&&c.addChunk(this.chunkPos[l.chunkIndex],this.chunk[l.chunkIndex])?l.nextChunk():((!o||s>l.to||r<l.from||o(l.from,l.to,l.value))&&(c.addInner(l.from,l.to,l.value)||a.push(ri.create(l.from,l.to,l.value))),l.next());return c.finishInner(this.nextLayer.isEmpty&&!a.length?Y.empty:this.nextLayer.update({add:a,filter:o,filterFrom:s,filterTo:r}))}map(e){if(e.empty||this.isEmpty)return this;let t=[],i=[],s=-1;for(let o=0;o<this.chunk.length;o++){let l=this.chunkPos[o],h=this.chunk[o],a=e.touchesRange(l,l+h.length);if(a===!1)s=Math.max(s,h.maxPoint),t.push(h),i.push(e.mapPos(l));else if(a===!0){let{mapped:c,pos:f}=h.map(l,e);c&&(s=Math.max(s,c.maxPoint),t.push(c),i.push(f))}}let r=this.nextLayer.map(e);return t.length==0?r:new Y(i,t,r||Y.empty,s)}between(e,t,i){if(!this.isEmpty){for(let s=0;s<this.chunk.length;s++){let r=this.chunkPos[s],o=this.chunk[s];if(t>=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return oi.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return oi.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=r),h=pr(o,l,i),a=new Ut(o,h,r),c=new Ut(l Line truncated
`)}static newName(){let e=br[yr]||1;return br[yr]=e+1,ts+e.toString(36)}static mount(e,t){(e[is]||new _a(e)).mount(Array.isArray(t)?t:[t])}}let wi=null;class _a{constructor(e){if(!e.head&&e.adoptedStyleSheets&&typeof CSSStyleSheet<"u"){if(wi)return e.adoptedStyleSheets=[wi.sheet].concat(e.adoptedStyleSheets),e[is]=wi;this.sheet=new CSSStyleSheet,e.adoptedStyleSheets=[this.sheet].concat(e.adoptedStyleSheets),wi=this}else{this.styleTag=(e.ownerDocument||e).createElement("style");let t=e.head||e;t.insertBefore(this.styleTag,t.firstChild)}this.modules=[],e[is]=this}mount(e){let t=this.sheet,i=0,s=0;for(let r=0;r<e.length;r++){let o=e[r],l=this.modules.indexOf(o);if(l<s&&l>-1&&(this.modules.splice(l,1),s--,l=-1),l==-1){if(this.modules.splice(s++,0,o),t)for(let h=0;h<o.rules.length;h++)t.insertRule(o.rules[h],i++)}else{for(;s<l;)i+=this.modules[s++].rules.length;i+=o.rules.length,s++}}if(!t){let r="";for(let o=0;o<this.modules.length;o++)r+=this.modules[o].getRules()+`
`;this.styleTag.textContent=r}}}var ot={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},Rt={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},wr=typeof navigator<"u"&&/Chrome\/(\d+)/.exec(navigator.userAgent),Qa=typeof navigator<"u"&&/Apple Computer/.test(navigator.vendor),Za=typeof navigator<"u"&&/Gecko\/\d+/.test(navigator.userAgent),xr=typeof navigator<"u"&&/Mac/.test(navigator.platform),ec=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),tc=wr&&(xr||+wr[1]<57)||Za&&xr;for(var oe=0;oe<10;oe++)ot[48+oe]=ot[96+oe]=String(oe);for(var oe=1;oe<=24;oe++)ot[oe+111]="F"+oe;for(var oe=65;oe<=90;oe++)ot[oe]=String.fromCharCode(oe+32),Rt[oe]=String.fromCharCode(oe);for(var An in ot)Rt.hasOwnProperty(An)||(Rt[An]=ot[An]);function ic(n){var e=tc&&(n.ctrlKey||n.altKey||n.metaKey)||(Qa||ec)&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Rt:ot)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function zi(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Lt(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function nc(){let n=document.activeElement;for(;n&&n.shadowRoot;)n=n.shadowRoot.activeElement;return n}function Ii(n,e){if(!e.anchorNode)return!1;try{return Lt(n,e.anchorNode)}catch{return!1}}function li(n){return n.nodeType==3?Pt(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function qi(n,e,t,i){return t?kr(n,e,t,i,-1)||kr(n,e,t,i,1):!1}function Ki(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function kr(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:hi(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=Ki(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?hi(n):0}else return!1}}function hi(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}const ol={left:0,right:0,top:0,bottom:0};function hn(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function sc(n){return{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function rc(n,e,t,i,s,r,o,l){let h=n.ownerDocument,a=h.defaultView;for(let c=n;c;)if(c.nodeType==1){let f,u=c==h.body;if(u)f=sc(a);else{if(c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.parentNode;continue}let g=c.getBoundingClientRect();f={left:g.left,right:g.left+c.clientWidth,top:g.top,bottom:g.top+c.clientHeight}}let d=0,p=0;if(s=="nearest")e.top<f.top?(p=-(f.top-e.top+o),t>0&&e.bottom>f.bottom+p&&(p=e.bottom-f.bottom+p+o)):e.bottom>f.bottom&&(p=e.bottom-f.bottom+o,t<0&&e.top-p<f.top&&(p=-(f.top+p-e.top+o)));else{let g=e.bottom-e.top,y=f.bottom-f.top;p=(s=="center"&&g<=y?e.top+g/2-y/2:s=="start"||s=="center"&&t<0?e.top-o:e.bottom-y+o)-f.top}if(i=="nearest"?e.left<f.left?(d=-(f.left-e.left+r),t>0&&e.right>f.right+d&&(d=e.right-f.right+d+r)):e.right>f.right&&(d=e.right-f.right+r,t<0&&e.left<f.left+d&&(d=-(f.left+d-e.left+r))):d=(i=="center"?e.left+(e.right-e.left)/2-(f.right-f.left)/2:i=="start"==l?e.left-r:e.right-(f.right-f.left)+r)-f.left,d||p)if(u)a.scrollBy(d,p);else{if(p){let g=c.scrollTop;c.scrollTop+=p,p=c.scrollTop-g}if(d){let g=c.scrollLeft;c.scrollLeft+=d,d=c.scrollLeft-g}e={left:e.left-d,top:e.top-p,right:e.right-d,bottom:e.bottom-p}}if(u)break;c=c.assignedSlot||c.parentNode,i=s="nearest"}else if(c.nodeType==11)c=c.host;else break}class oc{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){this.set(e.anchorNode,e.anchorOffset,e.focusNode,e.focusOffset)}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}}let vt=null;function ll(n){if(n.setActive)return n.setActive();if(vt)return n.focus(vt);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(vt==null?{get preventScroll(){return vt={preventScroll:!0},!0}}:void 0),!vt){vt=!1;for(let t=0;t<e.length;){let i=e[t++],s=e[t++],r=e[t++];i.scrollTop!Line truncated
`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),a=m.cursor(t?s.from:s.to)}if(h){if(!h(c))return l}else{if(!i)return a;h=i(c)}l=a}}function Pc(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==ce.Space&&(s=o),s==o}}function Ec(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return m.cursor(s,e.assoc);let o=e.goalColumn,l,h=n.contentDOM.getBoundingClientRect(),a=n.coordsAtPos(s),c=n.documentTop;if(a)o==null&&(o=a.left-h.left),l=r<0?a.top:a.bottom;else{let d=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(h.right-h.left,n.defaultCharacterWidth*(s-d.from))),l=(r<0?d.top:d.bottom)+c}let f=h.left+o,u=i!=null?i:n.defaultLineHeight>>1;for(let d=0;;d+=10){let p=l+(u+d)*r,g=Nl(n,{x:f,y:p},!1,r);if(p<h.top||p>h.bottom||(r<0?g<s:g>s))return m.cursor(g,e.assoc,void 0,o)}}function Tn(n,e,t){let i=n.state.facet(Ol).map(s=>s(n));for(;;){let s=!1;for(let r of i)r.between(t.from-1,t.from+1,(o,l,h)=>{t.from>o&&t.from<l&&(t=e.from>t.from?m.cursor(o,1):m.cursor(l,-1),s=!0)});if(!s)return t}}class Ic{constructor(e){this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.chromeScrollHack=-1,this.pendingIOSKey=void 0,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastEscPress=0,this.lastContextMenu=0,this.scrollHandlers=[],this.registeredEvents=[],this.customHandlers=[],this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.rapidCompositionStart=!1,this.mouseSelection=null;for(let t in ie){let i=ie[t];e.contentDOM.addEventListener(t,s=>{!Fr(e,s)||this.ignoreDuringComposition(s)||t=="keydown"&&this.keydown(e,s)||(this.mustFlushObserver(s)&&e.observer.forceFlush(),this.runCustomHandlers(t,e,s)?s.preventDefault():i(e,s))},gs[t]),this.registeredEvents.push(t)}A.chrome&&A.chrome_version==102&&e.scrollDOM.addEventListener("wheel",()=>{this.chromeScrollHack<0?e.contentDOM.style.pointerEvents="none":window.clearTimeout(this.chromeScrollHack),this.chromeScrollHack=setTimeout(()=>{this.chromeScrollHack=-1,e.contentDOM.style.pointerEvents=""},100)},{passive:!0}),this.notifiedFocused=e.hasFocus,A.safari&&e.contentDOM.addEventListener("input",()=>null)}setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}ensureHandlers(e,t){var i;let s;this.customHandlers=[];for(let r of t)if(s=(i=r.update(e).spec)===null||i===void 0?void 0:i.domEventHandlers){this.customHandlers.push({plugin:r.value,handlers:s});for(let o in s)this.registeredEvents.indexOf(o)<0&&o!="scroll"&&(this.registeredEvents.push(o),e.contentDOM.addEventListener(o,l=>{!Fr(e,l)||this.runCustomHandlers(o,e,l)&&l.preventDefault()}))}}runCustomHandlers(e,t,i){for(let s of this.customHandlers){let r=s.handlers[e];if(r)try{if(r.call(s.plugin,i,t)||i.defaultPrevented)return!0}catch(o){Re(t.state,o)}}return!1}runScrollHandlers(e,t){this.lastScrollTop=e.scrollDOM.scrollTop,this.lastScrollLeft=e.scrollDOM.scrollLeft;for(let i of this.customHandlers){let s=i.handlers.scroll;if(s)try{s.call(i.plugin,t,e)}catch(r){Re(e.state,r)}}}keydown(e,t){if(this.lastKeyCode=t.keyCode,this.lastKeyTime=Date.now(),t.keyCode==9&&Date.now()<this.lastEscPress+2e3)return!0;if(A.android&&A.chrome&&!t.synthetic&&(t.keyCode==13||t.keyCode==8))return e.observer.delayAndroidKey(t.key,t.keyCode),!0;let i;return A.ios&&(i=Vl.find(s=>s.keyCode==t.keyCode))&&!(t.ctrlKey||t.altKey||t.metaKey)&&!t.synthetic?(this.pendingIOSKey=i,setTimeout(()=>this.flushIOSKey(e),250),!0):!1}flushIOSKey(e){let t=this.pendingIOSKey;return t?(this.pendingIOSKey=void 0,ti(e.contentDOM,t.key,t.keyCode)):!1}ignoreDuringComposition(e){return/^key/.test(e.type)?this.composing>0?!0:A.safari&&!A.ios&&Date.now()-this.compositionEndedAt<100?(this.compositionEndedAt=0,!0):!1:!1}mustFlushObserver(e){return e.type=="keydown"&&e.keyCode!=229||e.type=="compositionend"&&!A.ios}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.mouseSelection&&this.mouseSelection.update(e),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}const Vl=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Fl=[16,17,18,20,91,92,224,225];class Nc{constructor(e,t,i,s){this.view=e,this.style=i,this.mustSelect=s,this.lastEvent=t;let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(V.allowMultipleSelections)&&Vc(e,t),this.dragMove=Fc(e,t),this.dragging=Hc(e,t)&&Hs(t)==1?null:!1,this.dragging===!1&&(t.preventDefault(),this.select(t))}move(e){if(e.buttons==0)return this.destroy();this.dragging===!1&&this.select(this.lastEvent=e)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging| Line truncated
-\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,xs),Rf={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let Ln=null;function Lf(){var n;if(Ln==null&&typeof document<"u"&&document.body){let e=document.body.style;Ln=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Ln||!1}const Vi=T.define({combine(n){let e=zt(n,{render:null,specialChars:Bf,addSpecialChars:null});return(e.replaceTabs=!Lf())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,xs)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,xs)),e}});function Pf(n={}){return[Vi.of(n),Ef()]}let ro=null;function Ef(){return ro||(ro=ue.fromClass(class{constructor(n){this.view=n,this.decorations=R.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(Vi)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Tf({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=re(e[0],0);if(r==9){let o=s.lineAt(i),l=t.state.tabSize,h=di(o.text,l,i-o.from);return R.replace({widget:new Ff((l-h%l)*this.view.defaultCharacterWidth)})}return this.decorationCache[r]||(this.decorationCache[r]=R.replace({widget:new Vf(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(Vi);n.startState.facet(Vi)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const If="\u2022";function Nf(n){return n>=32?If:n==10?"\u2424":String.fromCharCode(9216+n)}class Vf extends xt{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=Nf(this.code),i=e.state.phrase("Control character")+" "+(Rf[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement("span");return r.textContent=t,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}}class Ff extends xt{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}class Hf extends xt{constructor(e){super(),this.content=e}toDOM(){let e=document.createElement("span");return e.className="cm-placeholder",e.style.pointerEvents="none",e.appendChild(typeof this.content=="string"?document.createTextNode(this.content):this.content),typeof this.content=="string"?e.setAttribute("aria-label","placeholder "+this.content):e.setAttribute("aria-hidden","true"),e}ignoreEvent(){return!1}}function oo(n){return ue.fromClass(class{constructor(e){this.view=e,this.placeholder=R.set([R.widget({widget:new Hf(n),side:1}).range(0)])}get decorations(){return this.view.state.doc.length?R.none:this.placeholder}},{decorations:e=>e.decorations})}const ks=2e3;function Wf(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>ks||t.off>ks||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let h=i;h<=s;h++){let a=n.doc.line(h);a.length<=l&&r.push(m.range(a.from+o,a.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let h=i;h<=s;h++){let a=n.doc.line(h),c=es(a.text,o,n.tabSize,!0);if(c>-1){let f=es(a.text,l,n.tabSize);r.push(m.range(a.from+c,a.from+f))}}}return r}function zf(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function lo(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>ks?-1:s==i.length?zf(n,e.clientX):di(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function qf(n,e){let t=lo(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let l=lo(n,s);if(!l)return i;let h=Wf(n.state,t,l);return h.length?o?m.create(h.concat(i.ranges)):m.create(h):i}}:null}function Kf(n){let e=(n==null?void 0:n.eventFilter)||(t=>t.altKey&&t.button==0);return O.mouseSelectionStyle.of((t,i)=>e(i)?qf(t,i):null)}const Pn="-10000px";class Uf{constructor(e,t,i){this.facet=t,this.createTooltipView=i,this.input=e.state.facet(t),this.tooltips=this.input.filter(s=>s),this.tooltipViews=this.tooltips.map(i)}update(e){let t=e.state.facet(this.facet),i=t.filt Line truncated
`&&(t="");else{let i=t.indexOf(`
`);i>-1&&(t=t.slice(0,i))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),i=e+t.length;for(let s=this.rangeIndex;;){let r=this.ranges[s].to;if(r>=i||(t=t.slice(0,r-(i-t.length)),s++,s==this.ranges.length))break;let o=this.ranges[s].from,l=this.lineAfter(o);t+=l,i=o+l.length}return{line:t,end:i}}skipGapsTo(e,t,i){for(;;){let s=this.ranges[this.rangeIndex].to,r=e+t;if(i>0?s>r:s>=r)break;t+=this.ranges[++this.rangeIndex].from-s}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to<this.parsedPos;)this.rangeIndex++}emitToken(e,t,i,s,r){if(this.ranges.length>1){r=this.skipGapsTo(t,r,1),t+=r;let o=this.chunk.length;r=this.skipGapsTo(i,r,-1),i+=r,s+=this.chunk.length-o}return this.chunk.push(e,t,i,s),r}parseLine(e){let{line:t,end:i}=this.nextLine(),s=0,{streamParser:r}=this.lang,o=new bh(t,e?e.state.tabSize:4,e?bt(e.state):2);if(o.eol())r.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=xh(r.token,o,this.state);if(l&&(s=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,4,s)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPos<this.to&&this.parsedPos++}finishChunk(){let e=_.build({buffer:this.chunk,start:this.chunkStart,length:this.parsedPos-this.chunkStart,nodeSet:zu,topID:0,maxBufferLength:2048,reused:this.chunkReused});e=new _(e.type,e.children,e.positions,e.length,[[this.lang.stateAfter,this.lang.streamParser.copyState(this.state)]]),this.chunks.push(e),this.chunkPos.push(this.chunkStart-this.ranges[0].from),this.chunk=[],this.chunkReused=void 0,this.chunkStart=this.parsedPos}finish(){return new _(this.lang.topNode,this.chunks,this.chunkPos,this.parsedPos-this.ranges[0].from).balance()}}function xh(n,e,t){e.start=e.pos;for(let i=0;i<10;i++){let s=n(e,t);if(e.pos>e.start)return s}throw new Error("Stream parser failed to advance stream.")}const Ys=Object.create(null),fi=[we.none],zu=new qs(fi),bo=[],kh=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])kh[n]=vh(Ys,e);class Sh{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),kh)}resolve(e){return e?this.table[e]||(this.table[e]=vh(this.extra,e)):0}}const qu=new Sh(Ys);function Wn(n,e){bo.indexOf(n)>-1||(bo.push(n),console.warn(e))}function vh(n,e){let t=null;for(let r of e.split(".")){let o=n[r]||k[r];o?typeof o=="function"?t?t=o(t):Wn(r,`Modifier ${r} used at start of tag`):t?Wn(r,`Tag ${r} used as modifier`):t=o:Wn(r,`Unknown highlighting tag ${r}`)}if(!t)return 0;let i=e.replace(/ /g,"_"),s=we.define({id:fi.length,name:i,props:[hu({[i]:t})]});return fi.push(s),s.id}function Ku(n){let e=we.define({id:fi.length,name:"Document",props:[ci.add(()=>n)]});return fi.push(e),e}const Uu=n=>{let e=Qs(n.state);return e.line?ju(n):e.block?Ju(n):!1};function _s(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}const ju=_s(Yu,0),Gu=_s(Ch,0),Ju=_s((n,e)=>Ch(n,e,Xu(e)),0);function Qs(n,e=n.selection.main.head){let t=n.languageDataAt("commentTokens",e);return t.length?t[0]:{}}const Jt=50;function $u(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-Jt,i),o=n.sliceDoc(s,s+Jt),l=/\s*$/.exec(r)[0].length,h=/^\s*/.exec(o)[0].length,a=r.length-l;if(r.slice(a-e.length,a)==e&&o.slice(h,h+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:s+h,margin:h&&1}};let c,f;s-i<=2*Jt?c=f=n.sliceDoc(i,s):(c=n.sliceDoc(i,i+Jt),f=n.sliceDoc(s-Jt,s));let u=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(c.charAt(u+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(f.charAt(p-1))?1:0}}:null}function Xu(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to),r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from,to:s.to})}return e}function Ch(n,e,t=e.selection.ranges){let i=t.map(r=>Qs(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>$u(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,l;o<s.length;o++)if(l=s[o]){let h=i[o],{open:a,close:c}=l;r.push({from:a.pos-h.open.length,to:a.pos+a.margin},{from:c.pos-c.margin,to:c.pos+h.close.length})}return{changes:r}}return null}function Yu(n,e,t=e.selection.ranges){let i=[],s=-1;for(let{from:r,to:o}of t){let l=i.length,h=1e9;for(let a=r;a<=o;){let c=e.doc.lineAt(a);if(c.from>s&&(r==o||o>c.from)){s=c.from;let f=Qs(e,a).line;if(!f)continue;let u=/^\s*/.exec(c.text)[0].length,d=u==c Line truncated
`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp}create(){return this.regexp?new lp(this):new op(this)}getCursor(e,t=0,i=e.length){return this.regexp?Mt(this,e,t,i):At(this,e,t,i)}}class la{constructor(e){this.spec=e}}function At(n,e,t,i){return new Ht(e,n.unquoted,t,i,n.caseSensitive?void 0:s=>s.toLowerCase())}class op extends la{constructor(e){super(e)}nextMatch(e,t,i){let s=At(this.spec,e,i,e.length).nextOverlapping();return s.done&&(s=At(this.spec,e,0,t).nextOverlapping()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=i;;){let r=Math.max(t,s-1e4-this.spec.unquoted.length),o=At(this.spec,e,r,s),l=null;for(;!o.nextOverlapping().done;)l=o.value;if(l)return l;if(r==t)return null;s-=1e4}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.length)}getReplacement(e){return this.spec.replace}matchAll(e,t){let i=At(this.spec,e,0,e.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=At(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function Mt(n,e,t,i){return new na(e,n.search,n.caseSensitive?void 0:{ignoreCase:!0},t,i)}class lp extends la{nextMatch(e,t,i){let s=Mt(this.spec,e,i,e.length).next();return s.done&&(s=Mt(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Mt(this.spec,e,r,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(r==t||l.from>r+10))return l;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.length)}getReplacement(e){return this.spec.replace.replace(/\$([$&\d+])/g,(t,i)=>i=="$"?"$":i=="&"?e.match[0]:i!="0"&&+i<e.match.length?e.match[i]:t)}matchAll(e,t){let i=Mt(this.spec,e,0,e.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Mt(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const ui=H.define(),ir=H.define(),nt=ke.define({create(n){return new Kn(Bs(n).create(),null)},update(n,e){for(let t of e.effects)t.is(ui)?n=new Kn(t.value.create(),n.panel):t.is(ir)&&(n=new Kn(n.query,t.value?nr:null));return n},provide:n=>$i.from(n,e=>e.panel)});class Kn{constructor(e,t){this.query=e,this.panel=t}}const hp=R.mark({class:"cm-searchMatch"}),ap=R.mark({class:"cm-searchMatch cm-searchMatch-selected"}),cp=ue.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(nt))}update(n){let e=n.state.field(nt);(e!=n.startState.field(nt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return R.none;let{view:t}=this,i=new gt;for(let s=0,r=t.visibleRanges,o=r.length;s<o;s++){let{from:l,to:h}=r[s];for(;s<o-1&&h>r[s+1].from-2*250;)h=r[++s].to;n.highlight(t.state.doc,l,h,(a,c)=>{let f=t.state.selection.ranges.some(u=>u.from==a&&u.to==c);i.add(a,c,f?ap:hp)})}return i.finish()}},{decorations:n=>n.decorations});function gi(n){return e=>{let t=e.state.field(nt,!1);return t&&t.query.spec.valid?n(e,t):ha(e)}}const nn=gi((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state.doc,t,t);return i?(n.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:sr(n,i),userEvent:"select.search"}),!0):!1}),sn=gi((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t.doc,i,i);return s?(n.dispatch({selection:{anchor:s.from,head:s.to},scrollIntoView:!0,effects:sr(n,s),userEvent:"select.search"}),!0):!1}),fp=gi((n,{query:e})=>{let t=e.matchAll(n.state.doc,1e3);return!t||!t.length?!1:(n.dispatch({selection:m.create(t.map(i=>m.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),up=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let l=new Ht(n.doc,n.sliceDoc(i,s));!l.next().done;){if(r.length>1e3)return!1;l.value.from==i&&(o=r.length),r.push(m.range(l.value.from,l.value.to))}return e(n.update({selection:m.create(r,o),userEvent:"select.search.matches"})),!0},Po=gi((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t.doc,i,i);if(!r)return!1;let o=[],l,h,a=[];if(r.from==i&&r.to==s&&(h=t.toText(e.getReplacement(r)),o.push({from:r.from,to:r.to,insert:h}),r=e.nextMatch(t.doc,r.from,r.to),a.push(O.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))),r){let c=o.length==0||o[0].from>=r.to?0:r.to-r.from-h.length;l={anchor:r.from-c,head:r.to-c},a.push(sr(n,r))}return n.dispatch({changes:o,selection:l,scrollIntoView:!!l,effects:a,userEvent:"input.replace"}),!0}),dp=gi((n,{query:e})=>{if(n.state.readOnly)return!1;let t=e.matchAll(n.state.doc,1e9).map(s=>{let{from:r,to:o}=s;return{from:r,to:o,insert:e.getRep Line truncated
@@ -1,2 +1,2 @@
import{S as E,i as G,s as I,F as K,c as F,m as B,t as H,a as N,d as T,C as M,w as q,e as c,f as u,g as b,h as _,x as O,o as w,q as J,b as k,r as L,u as h,v as Q,j as U,l as V,A as X,p as W,B as Y,D as Z,z as S}from"./index.c63abb6b.js";function y(f){let e,o,s;return{c(){e=q("for "),o=c("strong"),s=q(f[3]),u(o,"class","txt-nowrap")},m(l,t){b(l,e,t),b(l,o,t),_(o,s)},p(l,t){t&8&&O(s,l[3])},d(l){l&&w(e),l&&w(o)}}}function x(f){let e,o,s,l,t,r,p,d;return{c(){e=c("label"),o=q("New password"),l=k(),t=c("input"),u(e,"for",s=f[8]),u(t,"type","password"),u(t,"id",r=f[8]),t.required=!0,t.autofocus=!0},m(n,i){b(n,e,i),_(e,o),b(n,l,i),b(n,t,i),S(t,f[0]),t.focus(),p||(d=h(t,"input",f[6]),p=!0)},p(n,i){i&256&&s!==(s=n[8])&&u(e,"for",s),i&256&&r!==(r=n[8])&&u(t,"id",r),i&1&&t.value!==n[0]&&S(t,n[0])},d(n){n&&w(e),n&&w(l),n&&w(t),p=!1,d()}}}function ee(f){let e,o,s,l,t,r,p,d;return{c(){e=c("label"),o=q("New password confirm"),l=k(),t=c("input"),u(e,"for",s=f[8]),u(t,"type","password"),u(t,"id",r=f[8]),t.required=!0},m(n,i){b(n,e,i),_(e,o),b(n,l,i),b(n,t,i),S(t,f[1]),p||(d=h(t,"input",f[7]),p=!0)},p(n,i){i&256&&s!==(s=n[8])&&u(e,"for",s),i&256&&r!==(r=n[8])&&u(t,"id",r),i&2&&t.value!==n[1]&&S(t,n[1])},d(n){n&&w(e),n&&w(l),n&&w(t),p=!1,d()}}}function te(f){let e,o,s,l,t,r,p,d,n,i,g,R,C,v,P,A,j,m=f[3]&&y(f);return r=new J({props:{class:"form-field required",name:"password",$$slots:{default:[x,({uniqueId:a})=>({8:a}),({uniqueId:a})=>a?256:0]},$$scope:{ctx:f}}}),d=new J({props:{class:"form-field required",name:"passwordConfirm",$$slots:{default:[ee,({uniqueId:a})=>({8:a}),({uniqueId:a})=>a?256:0]},$$scope:{ctx:f}}}),{c(){e=c("form"),o=c("div"),s=c("h4"),l=q(`Reset your admin password import{S as E,i as G,s as I,F as K,c as F,m as B,t as H,a as N,d as T,C as M,q as J,e as c,w as q,b as k,f as u,r as L,g as b,h as _,u as h,v as O,j as Q,l as U,o as w,A as V,p as W,B as X,D as Y,x as Z,z as S}from"./index.9681f446.js";function y(f){let e,o,s;return{c(){e=q("for "),o=c("strong"),s=q(f[3]),u(o,"class","txt-nowrap")},m(l,t){b(l,e,t),b(l,o,t),_(o,s)},p(l,t){t&8&&Z(s,l[3])},d(l){l&&w(e),l&&w(o)}}}function x(f){let e,o,s,l,t,r,p,d;return{c(){e=c("label"),o=q("New password"),l=k(),t=c("input"),u(e,"for",s=f[8]),u(t,"type","password"),u(t,"id",r=f[8]),t.required=!0,t.autofocus=!0},m(n,i){b(n,e,i),_(e,o),b(n,l,i),b(n,t,i),S(t,f[0]),t.focus(),p||(d=h(t,"input",f[6]),p=!0)},p(n,i){i&256&&s!==(s=n[8])&&u(e,"for",s),i&256&&r!==(r=n[8])&&u(t,"id",r),i&1&&t.value!==n[0]&&S(t,n[0])},d(n){n&&w(e),n&&w(l),n&&w(t),p=!1,d()}}}function ee(f){let e,o,s,l,t,r,p,d;return{c(){e=c("label"),o=q("New password confirm"),l=k(),t=c("input"),u(e,"for",s=f[8]),u(t,"type","password"),u(t,"id",r=f[8]),t.required=!0},m(n,i){b(n,e,i),_(e,o),b(n,l,i),b(n,t,i),S(t,f[1]),p||(d=h(t,"input",f[7]),p=!0)},p(n,i){i&256&&s!==(s=n[8])&&u(e,"for",s),i&256&&r!==(r=n[8])&&u(t,"id",r),i&2&&t.value!==n[1]&&S(t,n[1])},d(n){n&&w(e),n&&w(l),n&&w(t),p=!1,d()}}}function te(f){let e,o,s,l,t,r,p,d,n,i,g,R,C,v,P,A,j,m=f[3]&&y(f);return r=new J({props:{class:"form-field required",name:"password",$$slots:{default:[x,({uniqueId:a})=>({8:a}),({uniqueId:a})=>a?256:0]},$$scope:{ctx:f}}}),d=new J({props:{class:"form-field required",name:"passwordConfirm",$$slots:{default:[ee,({uniqueId:a})=>({8:a}),({uniqueId:a})=>a?256:0]},$$scope:{ctx:f}}}),{c(){e=c("form"),o=c("div"),s=c("h4"),l=q(`Reset your admin password
`),m&&m.c(),t=k(),F(r.$$.fragment),p=k(),F(d.$$.fragment),n=k(),i=c("button"),g=c("span"),g.textContent="Set new password",R=k(),C=c("div"),v=c("a"),v.textContent="Back to login",u(s,"class","m-b-xs"),u(o,"class","content txt-center m-b-sm"),u(g,"class","txt"),u(i,"type","submit"),u(i,"class","btn btn-lg btn-block"),i.disabled=f[2],L(i,"btn-loading",f[2]),u(e,"class","m-b-base"),u(v,"href","/login"),u(v,"class","link-hint"),u(C,"class","content txt-center")},m(a,$){b(a,e,$),_(e,o),_(o,s),_(s,l),m&&m.m(s,null),_(e,t),B(r,e,null),_(e,p),B(d,e,null),_(e,n),_(e,i),_(i,g),b(a,R,$),b(a,C,$),_(C,v),P=!0,A||(j=[h(e,"submit",Q(f[4])),U(V.call(null,v))],A=!0)},p(a,$){a[3]?m?m.p(a,$):(m=y(a),m.c(),m.m(s,null)):m&&(m.d(1),m=null);const z={};$&769&&(z.$$scope={dirty:$,ctx:a}),r.$set(z);const D={};$&770&&(D.$$scope={dirty:$,ctx:a}),d.$set(D),(!P||$&4)&&(i.disabled=a[2]),$&4&&L(i,"btn-loading",a[2])},i(a){P||(H(r.$$.fragment,a),H(d.$$.fragment,a),P=!0)},o(a){N(r.$$.fragment,a),N(d.$$.fragment,a),P=!1},d(a){a&&w(e),m&&m.d(),T(r),T(d),a&&w(R),a&&w(C),A=!1,X(j)}}}function se(f){let e,o;return e=new K({props:{$$slots:{default:[te]},$$scope:{ctx:f}}}),{c(){F(e.$$.fragment)},m(s,l){B(e,s,l),o=!0},p(s,[l]){const t={};l&527&&(t.$$scope={dirty:l,ctx:s}),e.$set(t)},i(s){o||(H(e.$$.fragment,s),o=!0)},o(s){N(e.$$.fragment,s),o=!1},d(s){T(e,s)}}}function le(f,e,o){let s,{params:l}=e,t="",r="",p=!1;async function d(){if(!p){o(2,p=!0);try{await W.Admins.confirmPasswordReset(l==null?void 0:l.token,t,r),Y("Successfully set a new admin password."),Z("/")}catch(g){W.errorResponseHandler(g)}o(2,p=!1)}}function n(){t=this.value,o(0,t)}function i(){r=this.value,o(1,r)}return f.$$set=g=>{"params"in g&&o(5,l=g.params)},f.$$.update=()=>{f.$$.dirty&32&&o(3,s=M.getJWTPayload(l==null?void 0:l.token).email||"")},[t,r,p,s,d,l,n,i]}class ae extends E{constructor(e){super(),G(this,e,le,se,I,{params:5})}}export{ae as default}; `),m&&m.c(),t=k(),F(r.$$.fragment),p=k(),F(d.$$.fragment),n=k(),i=c("button"),g=c("span"),g.textContent="Set new password",R=k(),C=c("div"),v=c("a"),v.textContent="Back to login",u(s,"class","m-b-xs"),u(o,"class","content txt-center m-b-sm"),u(g,"class","txt"),u(i,"type","submit"),u(i,"class","btn btn-lg btn-block"),i.disabled=f[2],L(i,"btn-loading",f[2]),u(e,"class","m-b-base"),u(v,"href","/login"),u(v,"class","link-hint"),u(C,"class","content txt-center")},m(a,$){b(a,e,$),_(e,o),_(o,s),_(s,l),m&&m.m(s,null),_(e,t),B(r,e,null),_(e,p),B(d,e,null),_(e,n),_(e,i),_(i,g),b(a,R,$),b(a,C,$),_(C,v),P=!0,A||(j=[h(e,"submit",O(f[4])),Q(U.call(null,v))],A=!0)},p(a,$){a[3]?m?m.p(a,$):(m=y(a),m.c(),m.m(s,null)):m&&(m.d(1),m=null);const z={};$&769&&(z.$$scope={dirty:$,ctx:a}),r.$set(z);const D={};$&770&&(D.$$scope={dirty:$,ctx:a}),d.$set(D),(!P||$&4)&&(i.disabled=a[2]),$&4&&L(i,"btn-loading",a[2])},i(a){P||(H(r.$$.fragment,a),H(d.$$.fragment,a),P=!0)},o(a){N(r.$$.fragment,a),N(d.$$.fragment,a),P=!1},d(a){a&&w(e),m&&m.d(),T(r),T(d),a&&w(R),a&&w(C),A=!1,V(j)}}}function se(f){let e,o;return e=new K({props:{$$slots:{default:[te]},$$scope:{ctx:f}}}),{c(){F(e.$$.fragment)},m(s,l){B(e,s,l),o=!0},p(s,[l]){const t={};l&527&&(t.$$scope={dirty:l,ctx:s}),e.$set(t)},i(s){o||(H(e.$$.fragment,s),o=!0)},o(s){N(e.$$.fragment,s),o=!1},d(s){T(e,s)}}}function le(f,e,o){let s,{params:l}=e,t="",r="",p=!1;async function d(){if(!p){o(2,p=!0);try{await W.Admins.confirmPasswordReset(l==null?void 0:l.token,t,r),X("Successfully set a new admin password."),Y("/")}catch(g){W.errorResponseHandler(g)}o(2,p=!1)}}function n(){t=this.value,o(0,t)}function i(){r=this.value,o(1,r)}return f.$$set=g=>{"params"in g&&o(5,l=g.params)},f.$$.update=()=>{f.$$.dirty&32&&o(3,s=M.getJWTPayload(l==null?void 0:l.token).email||"")},[t,r,p,s,d,l,n,i]}class ae extends E{constructor(e){super(),G(this,e,le,se,I,{params:5})}}export{ae as default};
@@ -1,2 +1,2 @@
import{S as E,i as M,s as T,F as j,c as H,m as L,t as w,a as y,d as S,b as g,e as _,f as p,g as k,h as d,j as z,l as B,k as N,n as D,o as v,p as C,q as G,r as F,u as A,v as I,w as h,x as J,y as P,z as R}from"./index.c63abb6b.js";function K(c){let e,s,n,l,t,o,f,m,i,a,b,u;return l=new G({props:{class:"form-field required",name:"email",$$slots:{default:[Q,({uniqueId:r})=>({5:r}),({uniqueId:r})=>r?32:0]},$$scope:{ctx:c}}}),{c(){e=_("form"),s=_("div"),s.innerHTML=`<h4 class="m-b-xs">Forgotten admin password</h4> import{S as E,i as M,s as T,F as j,c as H,m as L,t as w,a as y,d as S,b as g,e as _,f as p,g as k,h as d,j as z,l as B,k as N,n as D,o as v,p as C,q as G,r as F,u as A,v as I,w as h,x as J,y as P,z as R}from"./index.9681f446.js";function K(c){let e,s,n,l,t,o,f,m,i,a,b,u;return l=new G({props:{class:"form-field required",name:"email",$$slots:{default:[Q,({uniqueId:r})=>({5:r}),({uniqueId:r})=>r?32:0]},$$scope:{ctx:c}}}),{c(){e=_("form"),s=_("div"),s.innerHTML=`<h4 class="m-b-xs">Forgotten admin password</h4>
<p>Enter the email associated with your account and we\u2019ll send you a recovery link:</p>`,n=g(),H(l.$$.fragment),t=g(),o=_("button"),f=_("i"),m=g(),i=_("span"),i.textContent="Send recovery link",p(s,"class","content txt-center m-b-sm"),p(f,"class","ri-mail-send-line"),p(i,"class","txt"),p(o,"type","submit"),p(o,"class","btn btn-lg btn-block"),o.disabled=c[1],F(o,"btn-loading",c[1]),p(e,"class","m-b-base")},m(r,$){k(r,e,$),d(e,s),d(e,n),L(l,e,null),d(e,t),d(e,o),d(o,f),d(o,m),d(o,i),a=!0,b||(u=A(e,"submit",I(c[3])),b=!0)},p(r,$){const q={};$&97&&(q.$$scope={dirty:$,ctx:r}),l.$set(q),(!a||$&2)&&(o.disabled=r[1]),$&2&&F(o,"btn-loading",r[1])},i(r){a||(w(l.$$.fragment,r),a=!0)},o(r){y(l.$$.fragment,r),a=!1},d(r){r&&v(e),S(l),b=!1,u()}}}function O(c){let e,s,n,l,t,o,f,m,i;return{c(){e=_("div"),s=_("div"),s.innerHTML='<i class="ri-checkbox-circle-line"></i>',n=g(),l=_("div"),t=_("p"),o=h("Check "),f=_("strong"),m=h(c[0]),i=h(" for the recovery link."),p(s,"class","icon"),p(f,"class","txt-nowrap"),p(l,"class","content"),p(e,"class","alert alert-success")},m(a,b){k(a,e,b),d(e,s),d(e,n),d(e,l),d(l,t),d(t,o),d(t,f),d(f,m),d(t,i)},p(a,b){b&1&&J(m,a[0])},i:P,o:P,d(a){a&&v(e)}}}function Q(c){let e,s,n,l,t,o,f,m;return{c(){e=_("label"),s=h("Email"),l=g(),t=_("input"),p(e,"for",n=c[5]),p(t,"type","email"),p(t,"id",o=c[5]),t.required=!0,t.autofocus=!0},m(i,a){k(i,e,a),d(e,s),k(i,l,a),k(i,t,a),R(t,c[0]),t.focus(),f||(m=A(t,"input",c[4]),f=!0)},p(i,a){a&32&&n!==(n=i[5])&&p(e,"for",n),a&32&&o!==(o=i[5])&&p(t,"id",o),a&1&&t.value!==i[0]&&R(t,i[0])},d(i){i&&v(e),i&&v(l),i&&v(t),f=!1,m()}}}function U(c){let e,s,n,l,t,o,f,m;const i=[O,K],a=[];function b(u,r){return u[2]?0:1}return e=b(c),s=a[e]=i[e](c),{c(){s.c(),n=g(),l=_("div"),t=_("a"),t.textContent="Back to login",p(t,"href","/login"),p(t,"class","link-hint"),p(l,"class","content txt-center")},m(u,r){a[e].m(u,r),k(u,n,r),k(u,l,r),d(l,t),o=!0,f||(m=z(B.call(null,t)),f=!0)},p(u,r){let $=e;e=b(u),e===$?a[e].p(u,r):(N(),y(a[$],1,1,()=>{a[$]=null}),D(),s=a[e],s?s.p(u,r):(s=a[e]=i[e](u),s.c()),w(s,1),s.m(n.parentNode,n))},i(u){o||(w(s),o=!0)},o(u){y(s),o=!1},d(u){a[e].d(u),u&&v(n),u&&v(l),f=!1,m()}}}function V(c){let e,s;return e=new j({props:{$$slots:{default:[U]},$$scope:{ctx:c}}}),{c(){H(e.$$.fragment)},m(n,l){L(e,n,l),s=!0},p(n,[l]){const t={};l&71&&(t.$$scope={dirty:l,ctx:n}),e.$set(t)},i(n){s||(w(e.$$.fragment,n),s=!0)},o(n){y(e.$$.fragment,n),s=!1},d(n){S(e,n)}}}function W(c,e,s){let n="",l=!1,t=!1;async function o(){if(!l){s(1,l=!0);try{await C.Admins.requestPasswordReset(n),s(2,t=!0)}catch(m){C.errorResponseHandler(m)}s(1,l=!1)}}function f(){n=this.value,s(0,n)}return[n,l,t,o,f]}class Y extends E{constructor(e){super(),M(this,e,W,V,T,{})}}export{Y as default}; <p>Enter the email associated with your account and we\u2019ll send you a recovery link:</p>`,n=g(),H(l.$$.fragment),t=g(),o=_("button"),f=_("i"),m=g(),i=_("span"),i.textContent="Send recovery link",p(s,"class","content txt-center m-b-sm"),p(f,"class","ri-mail-send-line"),p(i,"class","txt"),p(o,"type","submit"),p(o,"class","btn btn-lg btn-block"),o.disabled=c[1],F(o,"btn-loading",c[1]),p(e,"class","m-b-base")},m(r,$){k(r,e,$),d(e,s),d(e,n),L(l,e,null),d(e,t),d(e,o),d(o,f),d(o,m),d(o,i),a=!0,b||(u=A(e,"submit",I(c[3])),b=!0)},p(r,$){const q={};$&97&&(q.$$scope={dirty:$,ctx:r}),l.$set(q),(!a||$&2)&&(o.disabled=r[1]),$&2&&F(o,"btn-loading",r[1])},i(r){a||(w(l.$$.fragment,r),a=!0)},o(r){y(l.$$.fragment,r),a=!1},d(r){r&&v(e),S(l),b=!1,u()}}}function O(c){let e,s,n,l,t,o,f,m,i;return{c(){e=_("div"),s=_("div"),s.innerHTML='<i class="ri-checkbox-circle-line"></i>',n=g(),l=_("div"),t=_("p"),o=h("Check "),f=_("strong"),m=h(c[0]),i=h(" for the recovery link."),p(s,"class","icon"),p(f,"class","txt-nowrap"),p(l,"class","content"),p(e,"class","alert alert-success")},m(a,b){k(a,e,b),d(e,s),d(e,n),d(e,l),d(l,t),d(t,o),d(t,f),d(f,m),d(t,i)},p(a,b){b&1&&J(m,a[0])},i:P,o:P,d(a){a&&v(e)}}}function Q(c){let e,s,n,l,t,o,f,m;return{c(){e=_("label"),s=h("Email"),l=g(),t=_("input"),p(e,"for",n=c[5]),p(t,"type","email"),p(t,"id",o=c[5]),t.required=!0,t.autofocus=!0},m(i,a){k(i,e,a),d(e,s),k(i,l,a),k(i,t,a),R(t,c[0]),t.focus(),f||(m=A(t,"input",c[4]),f=!0)},p(i,a){a&32&&n!==(n=i[5])&&p(e,"for",n),a&32&&o!==(o=i[5])&&p(t,"id",o),a&1&&t.value!==i[0]&&R(t,i[0])},d(i){i&&v(e),i&&v(l),i&&v(t),f=!1,m()}}}function U(c){let e,s,n,l,t,o,f,m;const i=[O,K],a=[];function b(u,r){return u[2]?0:1}return e=b(c),s=a[e]=i[e](c),{c(){s.c(),n=g(),l=_("div"),t=_("a"),t.textContent="Back to login",p(t,"href","/login"),p(t,"class","link-hint"),p(l,"class","content txt-center")},m(u,r){a[e].m(u,r),k(u,n,r),k(u,l,r),d(l,t),o=!0,f||(m=z(B.call(null,t)),f=!0)},p(u,r){let $=e;e=b(u),e===$?a[e].p(u,r):(N(),y(a[$],1,1,()=>{a[$]=null}),D(),s=a[e],s?s.p(u,r):(s=a[e]=i[e](u),s.c()),w(s,1),s.m(n.parentNode,n))},i(u){o||(w(s),o=!0)},o(u){y(s),o=!1},d(u){a[e].d(u),u&&v(n),u&&v(l),f=!1,m()}}}function V(c){let e,s;return e=new j({props:{$$slots:{default:[U]},$$scope:{ctx:c}}}),{c(){H(e.$$.fragment)},m(n,l){L(e,n,l),s=!0},p(n,[l]){const t={};l&71&&(t.$$scope={dirty:l,ctx:n}),e.$set(t)},i(n){s||(w(e.$$.fragment,n),s=!0)},o(n){y(e.$$.fragment,n),s=!1},d(n){S(e,n)}}}function W(c,e,s){let n="",l=!1,t=!1;async function o(){if(!l){s(1,l=!0);try{await C.Admins.requestPasswordReset(n),s(2,t=!0)}catch(m){C.errorResponseHandler(m)}s(1,l=!1)}}function f(){n=this.value,s(0,n)}return[n,l,t,o,f]}class Y extends E{constructor(e){super(),M(this,e,W,V,T,{})}}export{Y as default};
@@ -1,4 +1,4 @@
import{S as J,i as M,s as N,F as R,c as S,m as U,t as $,a as v,d as z,C as W,E as Y,g as _,k as j,n as A,o as b,p as F,w as y,e as m,f as d,h as k,x as B,q as D,b as C,r as H,u as E,v as G,y as h,z as T}from"./index.c63abb6b.js";function I(r){let e,s,t,l,n,o,c,a,i,u,g,q,p=r[3]&&L(r);return o=new D({props:{class:"form-field required",name:"password",$$slots:{default:[O,({uniqueId:f})=>({8:f}),({uniqueId:f})=>f?256:0]},$$scope:{ctx:r}}}),{c(){e=m("form"),s=m("div"),t=m("h4"),l=y(`Type your password to confirm changing your email address import{S as J,i as M,s as N,F as R,c as S,m as U,t as $,a as v,d as z,C as W,E as Y,g as _,k as j,n as A,o as b,p as F,q as B,e as m,w as y,b as C,f as d,r as H,h as k,u as E,v as D,y as h,x as G,z as T}from"./index.9681f446.js";function I(r){let e,s,t,l,n,o,c,a,i,u,g,q,p=r[3]&&L(r);return o=new B({props:{class:"form-field required",name:"password",$$slots:{default:[O,({uniqueId:f})=>({8:f}),({uniqueId:f})=>f?256:0]},$$scope:{ctx:r}}}),{c(){e=m("form"),s=m("div"),t=m("h4"),l=y(`Type your password to confirm changing your email address
`),p&&p.c(),n=C(),S(o.$$.fragment),c=C(),a=m("button"),i=m("span"),i.textContent="Confirm new email",d(t,"class","m-b-xs"),d(s,"class","content txt-center m-b-sm"),d(i,"class","txt"),d(a,"type","submit"),d(a,"class","btn btn-lg btn-block"),a.disabled=r[1],H(a,"btn-loading",r[1])},m(f,w){_(f,e,w),k(e,s),k(s,t),k(t,l),p&&p.m(t,null),k(e,n),U(o,e,null),k(e,c),k(e,a),k(a,i),u=!0,g||(q=E(e,"submit",G(r[4])),g=!0)},p(f,w){f[3]?p?p.p(f,w):(p=L(f),p.c(),p.m(t,null)):p&&(p.d(1),p=null);const P={};w&769&&(P.$$scope={dirty:w,ctx:f}),o.$set(P),(!u||w&2)&&(a.disabled=f[1]),w&2&&H(a,"btn-loading",f[1])},i(f){u||($(o.$$.fragment,f),u=!0)},o(f){v(o.$$.fragment,f),u=!1},d(f){f&&b(e),p&&p.d(),z(o),g=!1,q()}}}function K(r){let e,s,t,l,n;return{c(){e=m("div"),e.innerHTML=`<div class="icon"><i class="ri-checkbox-circle-line"></i></div> `),p&&p.c(),n=C(),S(o.$$.fragment),c=C(),a=m("button"),i=m("span"),i.textContent="Confirm new email",d(t,"class","m-b-xs"),d(s,"class","content txt-center m-b-sm"),d(i,"class","txt"),d(a,"type","submit"),d(a,"class","btn btn-lg btn-block"),a.disabled=r[1],H(a,"btn-loading",r[1])},m(f,w){_(f,e,w),k(e,s),k(s,t),k(t,l),p&&p.m(t,null),k(e,n),U(o,e,null),k(e,c),k(e,a),k(a,i),u=!0,g||(q=E(e,"submit",D(r[4])),g=!0)},p(f,w){f[3]?p?p.p(f,w):(p=L(f),p.c(),p.m(t,null)):p&&(p.d(1),p=null);const P={};w&769&&(P.$$scope={dirty:w,ctx:f}),o.$set(P),(!u||w&2)&&(a.disabled=f[1]),w&2&&H(a,"btn-loading",f[1])},i(f){u||($(o.$$.fragment,f),u=!0)},o(f){v(o.$$.fragment,f),u=!1},d(f){f&&b(e),p&&p.d(),z(o),g=!1,q()}}}function K(r){let e,s,t,l,n;return{c(){e=m("div"),e.innerHTML=`<div class="icon"><i class="ri-checkbox-circle-line"></i></div>
<div class="content txt-bold"><p>Email address changed</p> <div class="content txt-bold"><p>Email address changed</p>
<p>You can now sign in with your new email address.</p></div>`,s=C(),t=m("button"),t.textContent="Close",d(e,"class","alert alert-success"),d(t,"type","button"),d(t,"class","btn btn-secondary btn-block")},m(o,c){_(o,e,c),_(o,s,c),_(o,t,c),l||(n=E(t,"click",r[6]),l=!0)},p:h,i:h,o:h,d(o){o&&b(e),o&&b(s),o&&b(t),l=!1,n()}}}function L(r){let e,s,t;return{c(){e=y("to "),s=m("strong"),t=y(r[3]),d(s,"class","txt-nowrap")},m(l,n){_(l,e,n),_(l,s,n),k(s,t)},p(l,n){n&8&&B(t,l[3])},d(l){l&&b(e),l&&b(s)}}}function O(r){let e,s,t,l,n,o,c,a;return{c(){e=m("label"),s=y("Password"),l=C(),n=m("input"),d(e,"for",t=r[8]),d(n,"type","password"),d(n,"id",o=r[8]),n.required=!0,n.autofocus=!0},m(i,u){_(i,e,u),k(e,s),_(i,l,u),_(i,n,u),T(n,r[0]),n.focus(),c||(a=E(n,"input",r[7]),c=!0)},p(i,u){u&256&&t!==(t=i[8])&&d(e,"for",t),u&256&&o!==(o=i[8])&&d(n,"id",o),u&1&&n.value!==i[0]&&T(n,i[0])},d(i){i&&b(e),i&&b(l),i&&b(n),c=!1,a()}}}function Q(r){let e,s,t,l;const n=[K,I],o=[];function c(a,i){return a[2]?0:1}return e=c(r),s=o[e]=n[e](r),{c(){s.c(),t=Y()},m(a,i){o[e].m(a,i),_(a,t,i),l=!0},p(a,i){let u=e;e=c(a),e===u?o[e].p(a,i):(j(),v(o[u],1,1,()=>{o[u]=null}),A(),s=o[e],s?s.p(a,i):(s=o[e]=n[e](a),s.c()),$(s,1),s.m(t.parentNode,t))},i(a){l||($(s),l=!0)},o(a){v(s),l=!1},d(a){o[e].d(a),a&&b(t)}}}function V(r){let e,s;return e=new R({props:{nobranding:!0,$$slots:{default:[Q]},$$scope:{ctx:r}}}),{c(){S(e.$$.fragment)},m(t,l){U(e,t,l),s=!0},p(t,[l]){const n={};l&527&&(n.$$scope={dirty:l,ctx:t}),e.$set(n)},i(t){s||($(e.$$.fragment,t),s=!0)},o(t){v(e.$$.fragment,t),s=!1},d(t){z(e,t)}}}function X(r,e,s){let t,{params:l}=e,n="",o=!1,c=!1;async function a(){if(!o){s(1,o=!0);try{await F.Users.confirmEmailChange(l==null?void 0:l.token,n),s(2,c=!0)}catch(g){F.errorResponseHandler(g)}s(1,o=!1)}}const i=()=>window.close();function u(){n=this.value,s(0,n)}return r.$$set=g=>{"params"in g&&s(5,l=g.params)},r.$$.update=()=>{r.$$.dirty&32&&s(3,t=W.getJWTPayload(l==null?void 0:l.token).newEmail||"")},[n,o,c,t,a,l,i,u]}class x extends J{constructor(e){super(),M(this,e,X,V,N,{params:5})}}export{x as default}; <p>You can now sign in with your new email address.</p></div>`,s=C(),t=m("button"),t.textContent="Close",d(e,"class","alert alert-success"),d(t,"type","button"),d(t,"class","btn btn-secondary btn-block")},m(o,c){_(o,e,c),_(o,s,c),_(o,t,c),l||(n=E(t,"click",r[6]),l=!0)},p:h,i:h,o:h,d(o){o&&b(e),o&&b(s),o&&b(t),l=!1,n()}}}function L(r){let e,s,t;return{c(){e=y("to "),s=m("strong"),t=y(r[3]),d(s,"class","txt-nowrap")},m(l,n){_(l,e,n),_(l,s,n),k(s,t)},p(l,n){n&8&&G(t,l[3])},d(l){l&&b(e),l&&b(s)}}}function O(r){let e,s,t,l,n,o,c,a;return{c(){e=m("label"),s=y("Password"),l=C(),n=m("input"),d(e,"for",t=r[8]),d(n,"type","password"),d(n,"id",o=r[8]),n.required=!0,n.autofocus=!0},m(i,u){_(i,e,u),k(e,s),_(i,l,u),_(i,n,u),T(n,r[0]),n.focus(),c||(a=E(n,"input",r[7]),c=!0)},p(i,u){u&256&&t!==(t=i[8])&&d(e,"for",t),u&256&&o!==(o=i[8])&&d(n,"id",o),u&1&&n.value!==i[0]&&T(n,i[0])},d(i){i&&b(e),i&&b(l),i&&b(n),c=!1,a()}}}function Q(r){let e,s,t,l;const n=[K,I],o=[];function c(a,i){return a[2]?0:1}return e=c(r),s=o[e]=n[e](r),{c(){s.c(),t=Y()},m(a,i){o[e].m(a,i),_(a,t,i),l=!0},p(a,i){let u=e;e=c(a),e===u?o[e].p(a,i):(j(),v(o[u],1,1,()=>{o[u]=null}),A(),s=o[e],s?s.p(a,i):(s=o[e]=n[e](a),s.c()),$(s,1),s.m(t.parentNode,t))},i(a){l||($(s),l=!0)},o(a){v(s),l=!1},d(a){o[e].d(a),a&&b(t)}}}function V(r){let e,s;return e=new R({props:{nobranding:!0,$$slots:{default:[Q]},$$scope:{ctx:r}}}),{c(){S(e.$$.fragment)},m(t,l){U(e,t,l),s=!0},p(t,[l]){const n={};l&527&&(n.$$scope={dirty:l,ctx:t}),e.$set(n)},i(t){s||($(e.$$.fragment,t),s=!0)},o(t){v(e.$$.fragment,t),s=!1},d(t){z(e,t)}}}function X(r,e,s){let t,{params:l}=e,n="",o=!1,c=!1;async function a(){if(!o){s(1,o=!0);try{await F.Users.confirmEmailChange(l==null?void 0:l.token,n),s(2,c=!0)}catch(g){F.errorResponseHandler(g)}s(1,o=!1)}}const i=()=>window.close();function u(){n=this.value,s(0,n)}return r.$$set=g=>{"params"in g&&s(5,l=g.params)},r.$$.update=()=>{r.$$.dirty&32&&s(3,t=W.getJWTPayload(l==null?void 0:l.token).newEmail||"")},[n,o,c,t,a,l,i,u]}class x extends J{constructor(e){super(),M(this,e,X,V,N,{params:5})}}export{x as default};
@@ -1,4 +1,4 @@
import{S as W,i as Y,s as j,F as A,c as H,m as N,t as P,a as q,d as S,C as B,E as D,g as _,k as G,n as I,o as m,p as z,w as y,e as b,h as w,x as K,q as E,b as C,f as c,r as J,u as h,v as O,y as F,z as R}from"./index.c63abb6b.js";function Q(i){let e,l,t,n,s,o,p,a,r,u,v,g,k,L,d=i[4]&&M(i);return o=new E({props:{class:"form-field required",name:"password",$$slots:{default:[X,({uniqueId:f})=>({10:f}),({uniqueId:f})=>f?1024:0]},$$scope:{ctx:i}}}),a=new E({props:{class:"form-field required",name:"passwordConfirm",$$slots:{default:[Z,({uniqueId:f})=>({10:f}),({uniqueId:f})=>f?1024:0]},$$scope:{ctx:i}}}),{c(){e=b("form"),l=b("div"),t=b("h4"),n=y(`Reset your user password import{S as W,i as Y,s as j,F as A,c as H,m as N,t as P,a as q,d as S,C as B,E as D,g as _,k as G,n as I,o as m,p as z,q as E,e as b,w as y,b as C,f as c,r as J,h as w,u as h,v as K,y as F,x as O,z as R}from"./index.9681f446.js";function Q(i){let e,l,t,n,s,o,p,a,r,u,v,g,k,L,d=i[4]&&M(i);return o=new E({props:{class:"form-field required",name:"password",$$slots:{default:[X,({uniqueId:f})=>({10:f}),({uniqueId:f})=>f?1024:0]},$$scope:{ctx:i}}}),a=new E({props:{class:"form-field required",name:"passwordConfirm",$$slots:{default:[Z,({uniqueId:f})=>({10:f}),({uniqueId:f})=>f?1024:0]},$$scope:{ctx:i}}}),{c(){e=b("form"),l=b("div"),t=b("h4"),n=y(`Reset your user password
`),d&&d.c(),s=C(),H(o.$$.fragment),p=C(),H(a.$$.fragment),r=C(),u=b("button"),v=b("span"),v.textContent="Set new password",c(t,"class","m-b-xs"),c(l,"class","content txt-center m-b-sm"),c(v,"class","txt"),c(u,"type","submit"),c(u,"class","btn btn-lg btn-block"),u.disabled=i[2],J(u,"btn-loading",i[2])},m(f,$){_(f,e,$),w(e,l),w(l,t),w(t,n),d&&d.m(t,null),w(e,s),N(o,e,null),w(e,p),N(a,e,null),w(e,r),w(e,u),w(u,v),g=!0,k||(L=h(e,"submit",O(i[5])),k=!0)},p(f,$){f[4]?d?d.p(f,$):(d=M(f),d.c(),d.m(t,null)):d&&(d.d(1),d=null);const T={};$&3073&&(T.$$scope={dirty:$,ctx:f}),o.$set(T);const U={};$&3074&&(U.$$scope={dirty:$,ctx:f}),a.$set(U),(!g||$&4)&&(u.disabled=f[2]),$&4&&J(u,"btn-loading",f[2])},i(f){g||(P(o.$$.fragment,f),P(a.$$.fragment,f),g=!0)},o(f){q(o.$$.fragment,f),q(a.$$.fragment,f),g=!1},d(f){f&&m(e),d&&d.d(),S(o),S(a),k=!1,L()}}}function V(i){let e,l,t,n,s;return{c(){e=b("div"),e.innerHTML=`<div class="icon"><i class="ri-checkbox-circle-line"></i></div> `),d&&d.c(),s=C(),H(o.$$.fragment),p=C(),H(a.$$.fragment),r=C(),u=b("button"),v=b("span"),v.textContent="Set new password",c(t,"class","m-b-xs"),c(l,"class","content txt-center m-b-sm"),c(v,"class","txt"),c(u,"type","submit"),c(u,"class","btn btn-lg btn-block"),u.disabled=i[2],J(u,"btn-loading",i[2])},m(f,$){_(f,e,$),w(e,l),w(l,t),w(t,n),d&&d.m(t,null),w(e,s),N(o,e,null),w(e,p),N(a,e,null),w(e,r),w(e,u),w(u,v),g=!0,k||(L=h(e,"submit",K(i[5])),k=!0)},p(f,$){f[4]?d?d.p(f,$):(d=M(f),d.c(),d.m(t,null)):d&&(d.d(1),d=null);const T={};$&3073&&(T.$$scope={dirty:$,ctx:f}),o.$set(T);const U={};$&3074&&(U.$$scope={dirty:$,ctx:f}),a.$set(U),(!g||$&4)&&(u.disabled=f[2]),$&4&&J(u,"btn-loading",f[2])},i(f){g||(P(o.$$.fragment,f),P(a.$$.fragment,f),g=!0)},o(f){q(o.$$.fragment,f),q(a.$$.fragment,f),g=!1},d(f){f&&m(e),d&&d.d(),S(o),S(a),k=!1,L()}}}function V(i){let e,l,t,n,s;return{c(){e=b("div"),e.innerHTML=`<div class="icon"><i class="ri-checkbox-circle-line"></i></div>
<div class="content txt-bold"><p>Password changed</p> <div class="content txt-bold"><p>Password changed</p>
<p>You can now sign in with your new password.</p></div>`,l=C(),t=b("button"),t.textContent="Close",c(e,"class","alert alert-success"),c(t,"type","button"),c(t,"class","btn btn-secondary btn-block")},m(o,p){_(o,e,p),_(o,l,p),_(o,t,p),n||(s=h(t,"click",i[7]),n=!0)},p:F,i:F,o:F,d(o){o&&m(e),o&&m(l),o&&m(t),n=!1,s()}}}function M(i){let e,l,t;return{c(){e=y("for "),l=b("strong"),t=y(i[4])},m(n,s){_(n,e,s),_(n,l,s),w(l,t)},p(n,s){s&16&&K(t,n[4])},d(n){n&&m(e),n&&m(l)}}}function X(i){let e,l,t,n,s,o,p,a;return{c(){e=b("label"),l=y("New password"),n=C(),s=b("input"),c(e,"for",t=i[10]),c(s,"type","password"),c(s,"id",o=i[10]),s.required=!0,s.autofocus=!0},m(r,u){_(r,e,u),w(e,l),_(r,n,u),_(r,s,u),R(s,i[0]),s.focus(),p||(a=h(s,"input",i[8]),p=!0)},p(r,u){u&1024&&t!==(t=r[10])&&c(e,"for",t),u&1024&&o!==(o=r[10])&&c(s,"id",o),u&1&&s.value!==r[0]&&R(s,r[0])},d(r){r&&m(e),r&&m(n),r&&m(s),p=!1,a()}}}function Z(i){let e,l,t,n,s,o,p,a;return{c(){e=b("label"),l=y("New password confirm"),n=C(),s=b("input"),c(e,"for",t=i[10]),c(s,"type","password"),c(s,"id",o=i[10]),s.required=!0},m(r,u){_(r,e,u),w(e,l),_(r,n,u),_(r,s,u),R(s,i[1]),p||(a=h(s,"input",i[9]),p=!0)},p(r,u){u&1024&&t!==(t=r[10])&&c(e,"for",t),u&1024&&o!==(o=r[10])&&c(s,"id",o),u&2&&s.value!==r[1]&&R(s,r[1])},d(r){r&&m(e),r&&m(n),r&&m(s),p=!1,a()}}}function x(i){let e,l,t,n;const s=[V,Q],o=[];function p(a,r){return a[3]?0:1}return e=p(i),l=o[e]=s[e](i),{c(){l.c(),t=D()},m(a,r){o[e].m(a,r),_(a,t,r),n=!0},p(a,r){let u=e;e=p(a),e===u?o[e].p(a,r):(G(),q(o[u],1,1,()=>{o[u]=null}),I(),l=o[e],l?l.p(a,r):(l=o[e]=s[e](a),l.c()),P(l,1),l.m(t.parentNode,t))},i(a){n||(P(l),n=!0)},o(a){q(l),n=!1},d(a){o[e].d(a),a&&m(t)}}}function ee(i){let e,l;return e=new A({props:{nobranding:!0,$$slots:{default:[x]},$$scope:{ctx:i}}}),{c(){H(e.$$.fragment)},m(t,n){N(e,t,n),l=!0},p(t,[n]){const s={};n&2079&&(s.$$scope={dirty:n,ctx:t}),e.$set(s)},i(t){l||(P(e.$$.fragment,t),l=!0)},o(t){q(e.$$.fragment,t),l=!1},d(t){S(e,t)}}}function te(i,e,l){let t,{params:n}=e,s="",o="",p=!1,a=!1;async function r(){if(!p){l(2,p=!0);try{await z.Users.confirmPasswordReset(n==null?void 0:n.token,s,o),l(3,a=!0)}catch(k){z.errorResponseHandler(k)}l(2,p=!1)}}const u=()=>window.close();function v(){s=this.value,l(0,s)}function g(){o=this.value,l(1,o)}return i.$$set=k=>{"params"in k&&l(6,n=k.params)},i.$$.update=()=>{i.$$.dirty&64&&l(4,t=B.getJWTPayload(n==null?void 0:n.token).email||"")},[s,o,p,a,t,r,n,u,v,g]}class le extends W{constructor(e){super(),Y(this,e,te,ee,j,{params:6})}}export{le as default}; <p>You can now sign in with your new password.</p></div>`,l=C(),t=b("button"),t.textContent="Close",c(e,"class","alert alert-success"),c(t,"type","button"),c(t,"class","btn btn-secondary btn-block")},m(o,p){_(o,e,p),_(o,l,p),_(o,t,p),n||(s=h(t,"click",i[7]),n=!0)},p:F,i:F,o:F,d(o){o&&m(e),o&&m(l),o&&m(t),n=!1,s()}}}function M(i){let e,l,t;return{c(){e=y("for "),l=b("strong"),t=y(i[4])},m(n,s){_(n,e,s),_(n,l,s),w(l,t)},p(n,s){s&16&&O(t,n[4])},d(n){n&&m(e),n&&m(l)}}}function X(i){let e,l,t,n,s,o,p,a;return{c(){e=b("label"),l=y("New password"),n=C(),s=b("input"),c(e,"for",t=i[10]),c(s,"type","password"),c(s,"id",o=i[10]),s.required=!0,s.autofocus=!0},m(r,u){_(r,e,u),w(e,l),_(r,n,u),_(r,s,u),R(s,i[0]),s.focus(),p||(a=h(s,"input",i[8]),p=!0)},p(r,u){u&1024&&t!==(t=r[10])&&c(e,"for",t),u&1024&&o!==(o=r[10])&&c(s,"id",o),u&1&&s.value!==r[0]&&R(s,r[0])},d(r){r&&m(e),r&&m(n),r&&m(s),p=!1,a()}}}function Z(i){let e,l,t,n,s,o,p,a;return{c(){e=b("label"),l=y("New password confirm"),n=C(),s=b("input"),c(e,"for",t=i[10]),c(s,"type","password"),c(s,"id",o=i[10]),s.required=!0},m(r,u){_(r,e,u),w(e,l),_(r,n,u),_(r,s,u),R(s,i[1]),p||(a=h(s,"input",i[9]),p=!0)},p(r,u){u&1024&&t!==(t=r[10])&&c(e,"for",t),u&1024&&o!==(o=r[10])&&c(s,"id",o),u&2&&s.value!==r[1]&&R(s,r[1])},d(r){r&&m(e),r&&m(n),r&&m(s),p=!1,a()}}}function x(i){let e,l,t,n;const s=[V,Q],o=[];function p(a,r){return a[3]?0:1}return e=p(i),l=o[e]=s[e](i),{c(){l.c(),t=D()},m(a,r){o[e].m(a,r),_(a,t,r),n=!0},p(a,r){let u=e;e=p(a),e===u?o[e].p(a,r):(G(),q(o[u],1,1,()=>{o[u]=null}),I(),l=o[e],l?l.p(a,r):(l=o[e]=s[e](a),l.c()),P(l,1),l.m(t.parentNode,t))},i(a){n||(P(l),n=!0)},o(a){q(l),n=!1},d(a){o[e].d(a),a&&m(t)}}}function ee(i){let e,l;return e=new A({props:{nobranding:!0,$$slots:{default:[x]},$$scope:{ctx:i}}}),{c(){H(e.$$.fragment)},m(t,n){N(e,t,n),l=!0},p(t,[n]){const s={};n&2079&&(s.$$scope={dirty:n,ctx:t}),e.$set(s)},i(t){l||(P(e.$$.fragment,t),l=!0)},o(t){q(e.$$.fragment,t),l=!1},d(t){S(e,t)}}}function te(i,e,l){let t,{params:n}=e,s="",o="",p=!1,a=!1;async function r(){if(!p){l(2,p=!0);try{await z.Users.confirmPasswordReset(n==null?void 0:n.token,s,o),l(3,a=!0)}catch(k){z.errorResponseHandler(k)}l(2,p=!1)}}const u=()=>window.close();function v(){s=this.value,l(0,s)}function g(){o=this.value,l(1,o)}return i.$$set=k=>{"params"in k&&l(6,n=k.params)},i.$$.update=()=>{i.$$.dirty&64&&l(4,t=B.getJWTPayload(n==null?void 0:n.token).email||"")},[s,o,p,a,t,r,n,u,v,g]}class le extends W{constructor(e){super(),Y(this,e,te,ee,j,{params:6})}}export{le as default};
@@ -1,3 +1,3 @@
import{S as k,i as v,s as y,F as w,c as x,m as C,t as g,a as $,d as L,p as H,E as M,g as r,o as a,e as u,b as m,f,u as _,y as p}from"./index.c63abb6b.js";function P(o){let t,s,e,n,i;return{c(){t=u("div"),t.innerHTML=`<div class="icon"><i class="ri-error-warning-line"></i></div> import{S as k,i as v,s as y,F as w,c as x,m as C,t as g,a as $,d as L,p as H,E as M,g as r,o as a,e as u,b as m,f,u as _,y as p}from"./index.9681f446.js";function P(o){let t,s,e,n,i;return{c(){t=u("div"),t.innerHTML=`<div class="icon"><i class="ri-error-warning-line"></i></div>
<div class="content txt-bold"><p>Invalid or expired verification token.</p></div>`,s=m(),e=u("button"),e.textContent="Close",f(t,"class","alert alert-danger"),f(e,"type","button"),f(e,"class","btn btn-secondary btn-block")},m(l,c){r(l,t,c),r(l,s,c),r(l,e,c),n||(i=_(e,"click",o[4]),n=!0)},p,d(l){l&&a(t),l&&a(s),l&&a(e),n=!1,i()}}}function S(o){let t,s,e,n,i;return{c(){t=u("div"),t.innerHTML=`<div class="icon"><i class="ri-checkbox-circle-line"></i></div> <div class="content txt-bold"><p>Invalid or expired verification token.</p></div>`,s=m(),e=u("button"),e.textContent="Close",f(t,"class","alert alert-danger"),f(e,"type","button"),f(e,"class","btn btn-secondary btn-block")},m(l,c){r(l,t,c),r(l,s,c),r(l,e,c),n||(i=_(e,"click",o[4]),n=!0)},p,d(l){l&&a(t),l&&a(s),l&&a(e),n=!1,i()}}}function S(o){let t,s,e,n,i;return{c(){t=u("div"),t.innerHTML=`<div class="icon"><i class="ri-checkbox-circle-line"></i></div>
<div class="content txt-bold"><p>Successfully verified email address.</p></div>`,s=m(),e=u("button"),e.textContent="Close",f(t,"class","alert alert-success"),f(e,"type","button"),f(e,"class","btn btn-secondary btn-block")},m(l,c){r(l,t,c),r(l,s,c),r(l,e,c),n||(i=_(e,"click",o[3]),n=!0)},p,d(l){l&&a(t),l&&a(s),l&&a(e),n=!1,i()}}}function T(o){let t;return{c(){t=u("div"),t.innerHTML='<div class="loader loader-lg"><em>Please wait...</em></div>',f(t,"class","txt-center")},m(s,e){r(s,t,e)},p,d(s){s&&a(t)}}}function F(o){let t;function s(i,l){return i[1]?T:i[0]?S:P}let e=s(o),n=e(o);return{c(){n.c(),t=M()},m(i,l){n.m(i,l),r(i,t,l)},p(i,l){e===(e=s(i))&&n?n.p(i,l):(n.d(1),n=e(i),n&&(n.c(),n.m(t.parentNode,t)))},d(i){n.d(i),i&&a(t)}}}function U(o){let t,s;return t=new w({props:{nobranding:!0,$$slots:{default:[F]},$$scope:{ctx:o}}}),{c(){x(t.$$.fragment)},m(e,n){C(t,e,n),s=!0},p(e,[n]){const i={};n&67&&(i.$$scope={dirty:n,ctx:e}),t.$set(i)},i(e){s||(g(t.$$.fragment,e),s=!0)},o(e){$(t.$$.fragment,e),s=!1},d(e){L(t,e)}}}function V(o,t,s){let{params:e}=t,n=!1,i=!1;l();async function l(){s(1,i=!0);try{await H.Users.confirmVerification(e==null?void 0:e.token),s(0,n=!0)}catch(d){console.warn(d),s(0,n=!1)}s(1,i=!1)}const c=()=>window.close(),b=()=>window.close();return o.$$set=d=>{"params"in d&&s(2,e=d.params)},[n,i,e,c,b]}class E extends k{constructor(t){super(),v(this,t,V,U,y,{params:2})}}export{E as default}; <div class="content txt-bold"><p>Successfully verified email address.</p></div>`,s=m(),e=u("button"),e.textContent="Close",f(t,"class","alert alert-success"),f(e,"type","button"),f(e,"class","btn btn-secondary btn-block")},m(l,c){r(l,t,c),r(l,s,c),r(l,e,c),n||(i=_(e,"click",o[3]),n=!0)},p,d(l){l&&a(t),l&&a(s),l&&a(e),n=!1,i()}}}function T(o){let t;return{c(){t=u("div"),t.innerHTML='<div class="loader loader-lg"><em>Please wait...</em></div>',f(t,"class","txt-center")},m(s,e){r(s,t,e)},p,d(s){s&&a(t)}}}function F(o){let t;function s(i,l){return i[1]?T:i[0]?S:P}let e=s(o),n=e(o);return{c(){n.c(),t=M()},m(i,l){n.m(i,l),r(i,t,l)},p(i,l){e===(e=s(i))&&n?n.p(i,l):(n.d(1),n=e(i),n&&(n.c(),n.m(t.parentNode,t)))},d(i){n.d(i),i&&a(t)}}}function U(o){let t,s;return t=new w({props:{nobranding:!0,$$slots:{default:[F]},$$scope:{ctx:o}}}),{c(){x(t.$$.fragment)},m(e,n){C(t,e,n),s=!0},p(e,[n]){const i={};n&67&&(i.$$scope={dirty:n,ctx:e}),t.$set(i)},i(e){s||(g(t.$$.fragment,e),s=!0)},o(e){$(t.$$.fragment,e),s=!1},d(e){L(t,e)}}}function V(o,t,s){let{params:e}=t,n=!1,i=!1;l();async function l(){s(1,i=!0);try{await H.Users.confirmVerification(e==null?void 0:e.token),s(0,n=!0)}catch(d){console.warn(d),s(0,n=!1)}s(1,i=!1)}const c=()=>window.close(),b=()=>window.close();return o.$$set=d=>{"params"in d&&s(2,e=d.params)},[n,i,e,c,b]}class E extends k{constructor(t){super(),v(this,t,V,U,y,{params:2})}}export{E as default};
+620
View File
@@ -0,0 +1,620 @@
const Zg=function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const l of s)if(l.type==="childList")for(const o of l.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(s){const l={};return s.integrity&&(l.integrity=s.integrity),s.referrerpolicy&&(l.referrerPolicy=s.referrerpolicy),s.crossorigin==="use-credentials"?l.credentials="include":s.crossorigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function i(s){if(s.ep)return;s.ep=!0;const l=t(s);fetch(s.href,l)}};Zg();function re(){}const hl=n=>n;function ft(n,e){for(const t in e)n[t]=e[t];return n}function gp(n){return n()}function Ua(){return Object.create(null)}function Qe(n){n.forEach(gp)}function Vn(n){return typeof n=="function"}function Te(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}let Al;function Kn(n,e){return Al||(Al=document.createElement("a")),Al.href=e,n===Al.href}function Gg(n){return Object.keys(n).length===0}function _p(n,...e){if(n==null)return re;const t=n.subscribe(...e);return t.unsubscribe?()=>t.unsubscribe():t}function kt(n,e,t){n.$$.on_destroy.push(_p(e,t))}function $n(n,e,t,i){if(n){const s=bp(n,e,t,i);return n[0](s)}}function bp(n,e,t,i){return n[1]&&i?ft(t.ctx.slice(),n[1](i(e))):t.ctx}function Cn(n,e,t,i){if(n[2]&&i){const s=n[2](i(t));if(e.dirty===void 0)return s;if(typeof s=="object"){const l=[],o=Math.max(e.dirty.length,s.length);for(let r=0;r<o;r+=1)l[r]=e.dirty[r]|s[r];return l}return e.dirty|s}return e.dirty}function Mn(n,e,t,i,s,l){if(s){const o=bp(e,t,i,l);n.p(o,s)}}function Tn(n){if(n.ctx.length>32){const e=[],t=n.ctx.length/32;for(let i=0;i<t;i++)e[i]=-1;return e}return-1}function li(n){const e={};for(const t in n)t[0]!=="$"&&(e[t]=n[t]);return e}function Zt(n,e){const t={};e=new Set(e);for(const i in n)!e.has(i)&&i[0]!=="$"&&(t[i]=n[i]);return t}function Wa(n){return n==null?"":n}function _n(n,e,t){return n.set(t),e}function Ye(n){return n&&Vn(n.destroy)?n.destroy:re}const vp=typeof window<"u";let Eo=vp?()=>window.performance.now():()=>Date.now(),na=vp?n=>requestAnimationFrame(n):re;const ds=new Set;function yp(n){ds.forEach(e=>{e.c(n)||(ds.delete(e),e.f())}),ds.size!==0&&na(yp)}function Ao(n){let e;return ds.size===0&&na(yp),{promise:new Promise(t=>{ds.add(e={c:n,f:t})}),abort(){ds.delete(e)}}}function m(n,e){n.appendChild(e)}function kp(n){if(!n)return document;const e=n.getRootNode?n.getRootNode():n.ownerDocument;return e&&e.host?e:n.ownerDocument}function Jg(n){const e=_("style");return Xg(kp(n),e),e.sheet}function Xg(n,e){m(n.head||n,e)}function w(n,e,t){n.insertBefore(e,t||null)}function k(n){n.parentNode.removeChild(n)}function Zn(n,e){for(let t=0;t<n.length;t+=1)n[t]&&n[t].d(e)}function _(n){return document.createElement(n)}function N(n){return document.createTextNode(n)}function T(){return N(" ")}function st(){return N("")}function Q(n,e,t,i){return n.addEventListener(e,t,i),()=>n.removeEventListener(e,t,i)}function Wt(n){return function(e){return e.preventDefault(),n.call(this,e)}}function Gn(n){return function(e){return e.stopPropagation(),n.call(this,e)}}function wp(n){return function(e){e.target===this&&n.call(this,e)}}function h(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function si(n,e){const t=Object.getOwnPropertyDescriptors(n.__proto__);for(const i in e)e[i]==null?n.removeAttribute(i):i==="style"?n.style.cssText=e[i]:i==="__value"?n.value=n[i]=e[i]:t[i]&&t[i].set?n[i]=e[i]:h(n,i,e[i])}function Pt(n){return n===""?null:+n}function Qg(n){return Array.from(n.childNodes)}function ge(n,e){e=""+e,n.wholeText!==e&&(n.data=e)}function we(n,e){n.value=e==null?"":e}function Ya(n,e,t,i){t===null?n.style.removeProperty(e):n.style.setProperty(e,t,i?"important":"")}function se(n,e,t){n.classList[t?"add":"remove"](e)}function Sp(n,e,{bubbles:t=!1,cancelable:i=!1}={}){const s=document.createEvent("CustomEvent");return s.initCustomEvent(n,t,i,e),s}const oo=new Map;let ro=0;function xg(n){let e=5381,t=n.length;for(;t--;)e=(e<<5)-e^n.charCodeAt(t);return e>>>0}function e_(n,e){const t={stylesheet:Jg(e),rules:{}};return oo.set(n,t),t}function nl(n,e,t,i,s,l,o,r=0){const a=16.666/i;let u=`{
`;for(let b=0;b<=1;b+=a){const y=e+(t-e)*l(b);u+=b*100+`%{${o(y,1-y)}}
`}const f=u+`100% {${o(t,1-t)}}
}`,c=`__svelte_${xg(f)}_${r}`,d=kp(n),{stylesheet:p,rules:g}=oo.get(d)||e_(d,n);g[c]||(g[c]=!0,p.insertRule(`@keyframes ${c} ${f}`,p.cssRules.length));const v=n.style.animation||"";return n.style.animation=`${v?`${v}, `:""}${c} ${i}ms linear ${s}ms 1 both`,ro+=1,c}function il(n,e){const t=(n.style.animation||"").split(", "),i=t.filter(e?l=>l.indexOf(e)<0:l=>l.indexOf("__svelte")===-1),s=t.length-i.length;s&&(n.style.animation=i.join(", "),ro-=s,ro||t_())}function t_(){na(()=>{ro||(oo.forEach(n=>{const{stylesheet:e}=n;let t=e.cssRules.length;for(;t--;)e.deleteRule(t);n.rules={}}),oo.clear())})}function n_(n,e,t,i){if(!e)return re;const s=n.getBoundingClientRect();if(e.left===s.left&&e.right===s.right&&e.top===s.top&&e.bottom===s.bottom)return re;const{delay:l=0,duration:o=300,easing:r=hl,start:a=Eo()+l,end:u=a+o,tick:f=re,css:c}=t(n,{from:e,to:s},i);let d=!0,p=!1,g;function v(){c&&(g=nl(n,0,1,o,l,r,c)),l||(p=!0)}function b(){c&&il(n,g),d=!1}return Ao(y=>{if(!p&&y>=a&&(p=!0),p&&y>=u&&(f(1,0),b()),!d)return!1;if(p){const $=y-a,S=0+1*r($/o);f(S,1-S)}return!0}),v(),f(0,1),b}function i_(n){const e=getComputedStyle(n);if(e.position!=="absolute"&&e.position!=="fixed"){const{width:t,height:i}=e,s=n.getBoundingClientRect();n.style.position="absolute",n.style.width=t,n.style.height=i,$p(n,s)}}function $p(n,e){const t=n.getBoundingClientRect();if(e.left!==t.left||e.top!==t.top){const i=getComputedStyle(n),s=i.transform==="none"?"":i.transform;n.style.transform=`${s} translate(${e.left-t.left}px, ${e.top-t.top}px)`}}let sl;function Ws(n){sl=n}function Po(){if(!sl)throw new Error("Function called outside component initialization");return sl}function zn(n){Po().$$.on_mount.push(n)}function s_(n){Po().$$.after_update.push(n)}function l_(n){Po().$$.on_destroy.push(n)}function rn(){const n=Po();return(e,t,{cancelable:i=!1}={})=>{const s=n.$$.callbacks[e];if(s){const l=Sp(e,t,{cancelable:i});return s.slice().forEach(o=>{o.call(n,l)}),!l.defaultPrevented}return!0}}function at(n,e){const t=n.$$.callbacks[e.type];t&&t.slice().forEach(i=>i.call(this,e))}const qs=[],me=[],eo=[],$r=[],Cp=Promise.resolve();let Cr=!1;function Mp(){Cr||(Cr=!0,Cp.then(Tp))}function oi(){return Mp(),Cp}function Ot(n){eo.push(n)}function Ie(n){$r.push(n)}const Zo=new Set;let Pl=0;function Tp(){const n=sl;do{for(;Pl<qs.length;){const e=qs[Pl];Pl++,Ws(e),o_(e.$$)}for(Ws(null),qs.length=0,Pl=0;me.length;)me.pop()();for(let e=0;e<eo.length;e+=1){const t=eo[e];Zo.has(t)||(Zo.add(t),t())}eo.length=0}while(qs.length);for(;$r.length;)$r.pop()();Cr=!1,Zo.clear(),Ws(n)}function o_(n){if(n.fragment!==null){n.update(),Qe(n.before_update);const e=n.dirty;n.dirty=[-1],n.fragment&&n.fragment.p(n.ctx,e),n.after_update.forEach(Ot)}}let Ds;function ia(){return Ds||(Ds=Promise.resolve(),Ds.then(()=>{Ds=null})),Ds}function Ji(n,e,t){n.dispatchEvent(Sp(`${e?"intro":"outro"}${t}`))}const to=new Set;let ti;function Ee(){ti={r:0,c:[],p:ti}}function Ae(){ti.r||Qe(ti.c),ti=ti.p}function A(n,e){n&&n.i&&(to.delete(n),n.i(e))}function P(n,e,t,i){if(n&&n.o){if(to.has(n))return;to.add(n),ti.c.push(()=>{to.delete(n),i&&(t&&n.d(1),i())}),n.o(e)}else i&&i()}const sa={duration:0};function Dp(n,e,t){let i=e(n,t),s=!1,l,o,r=0;function a(){l&&il(n,l)}function u(){const{delay:c=0,duration:d=300,easing:p=hl,tick:g=re,css:v}=i||sa;v&&(l=nl(n,0,1,d,c,p,v,r++)),g(0,1);const b=Eo()+c,y=b+d;o&&o.abort(),s=!0,Ot(()=>Ji(n,!0,"start")),o=Ao($=>{if(s){if($>=y)return g(1,0),Ji(n,!0,"end"),a(),s=!1;if($>=b){const S=p(($-b)/d);g(S,1-S)}}return s})}let f=!1;return{start(){f||(f=!0,il(n),Vn(i)?(i=i(),ia().then(u)):u())},invalidate(){f=!1},end(){s&&(a(),s=!1)}}}function Op(n,e,t){let i=e(n,t),s=!0,l;const o=ti;o.r+=1;function r(){const{delay:a=0,duration:u=300,easing:f=hl,tick:c=re,css:d}=i||sa;d&&(l=nl(n,1,0,u,a,f,d));const p=Eo()+a,g=p+u;Ot(()=>Ji(n,!1,"start")),Ao(v=>{if(s){if(v>=g)return c(0,1),Ji(n,!1,"end"),--o.r||Qe(o.c),!1;if(v>=p){const b=f((v-p)/u);c(1-b,b)}}return s})}return Vn(i)?ia().then(()=>{i=i(),r()}):r(),{end(a){a&&i.tick&&i.tick(1,0),s&&(l&&il(n,l),s=!1)}}}function lt(n,e,t,i){let s=e(n,t),l=i?0:1,o=null,r=null,a=null;function u(){a&&il(n,a)}function f(d,p){const g=d.b-l;return p*=Math.abs(g),{a:l,b:d.b,d:g,duration:p,start:d.start,end:d.start+p,group:d.group}}function c(d){const{delay:p=0,duration:g=300,easing:v=hl,tick:b=re,css:y}=s||sa,$={start:Eo()+p,b:d};d||($.group=ti,ti.r+=1),o||r?r=$:(y&&(u(),a=nl(n,l,d,g,p,v,y)),d&&b(0,1),o=f($,g),Ot(()=>Ji(n,d,"start")),Ao(S=>{if(r&&S>r.start&&(o=f(r,g),r=null,Ji(n,o.b,"start"),y&&(u(),a=nl(n,l,o.b,o.duration,0,v,s.css))),o){if(S>=o.end)b(l=o.b,1-l),Ji(n,o.b,"end"),r||(o.b?u():--o.group.r||Qe(o.group.c)),o=null;else if(S>=o.start){const M=S-o.start;l=o.a+o.d*v(M/o.duration),b(l,1-l)}}return!!(o||r)}))}return{run(d){Vn(s)?ia().then(()=>{s=s(),c(d)}):c(d)},end(){u(),o=r=null}}}function Jn(n,e){n.d(1),e.delete(n.key)}function Gt(n,e){P(n,1,1,()=>{e.delete(n.key)})}function r_(n,e){n.f(),Gt(n,e)}function St(n,e,t,i,s,l,o,r,a,u,f,c){let d=n.length,p= Line truncated
<span class="txt">Pocket<strong>Base</strong></span></figure>`,t=T(),i=_("div"),h(e,"class","block txt-center m-b-lg"),h(i,"class","clearfix")},m(s,l){w(s,e,l),w(s,t,l),w(s,i,l)},d(s){s&&k(e),s&&k(t),s&&k(i)}}}function C0(n){let e,t,i,s,l,o,r,a,u=!n[0]&&Su();const f=n[2].default,c=$n(f,n,n[1],null);return{c(){e=_("div"),t=_("div"),i=T(),s=_("div"),u&&u.c(),l=T(),c&&c.c(),o=T(),r=_("div"),h(t,"class","flex-fill"),h(s,"class","wrapper wrapper-sm m-b-xl svelte-1wbawr2"),h(r,"class","flex-fill"),h(e,"class","page-wrapper full-page-panel svelte-1wbawr2")},m(d,p){w(d,e,p),m(e,t),m(e,i),m(e,s),u&&u.m(s,null),m(s,l),c&&c.m(s,null),m(e,o),m(e,r),a=!0},p(d,[p]){d[0]?u&&(u.d(1),u=null):u||(u=Su(),u.c(),u.m(s,l)),c&&c.p&&(!a||p&2)&&Mn(c,f,d,d[1],a?Cn(f,d[1],p,null):Tn(d[1]),null)},i(d){a||(A(c,d),a=!0)},o(d){P(c,d),a=!1},d(d){d&&k(e),u&&u.d(),c&&c.d(d)}}}function M0(n,e,t){let{$$slots:i={},$$scope:s}=e,{nobranding:l=!1}=e;return n.$$set=o=>{"nobranding"in o&&t(0,l=o.nobranding),"$$scope"in o&&t(1,s=o.$$scope)},[l,s,i]}class Vm extends Oe{constructor(e){super(),De(this,e,M0,C0,Te,{nobranding:0})}}function $u(n,e,t){const i=n.slice();return i[11]=e[t],i}const T0=n=>({}),Cu=n=>({uniqueId:n[3]});function D0(n){let e=(n[11]||po)+"",t;return{c(){t=N(e)},m(i,s){w(i,t,s)},p(i,s){s&4&&e!==(e=(i[11]||po)+"")&&ge(t,e)},d(i){i&&k(t)}}}function O0(n){var i,s;let e=(((i=n[11])==null?void 0:i.message)||((s=n[11])==null?void 0:s.code)||po)+"",t;return{c(){t=N(e)},m(l,o){w(l,t,o)},p(l,o){var r,a;o&4&&e!==(e=(((r=l[11])==null?void 0:r.message)||((a=l[11])==null?void 0:a.code)||po)+"")&&ge(t,e)},d(l){l&&k(t)}}}function Mu(n){let e,t;function i(o,r){return typeof o[11]=="object"?O0:D0}let s=i(n),l=s(n);return{c(){e=_("div"),l.c(),t=T(),h(e,"class","help-block help-block-error")},m(o,r){w(o,e,r),l.m(e,null),m(e,t)},p(o,r){s===(s=i(o))&&l?l.p(o,r):(l.d(1),l=s(o),l&&(l.c(),l.m(e,t)))},d(o){o&&k(e),l.d()}}}function E0(n){let e,t,i,s,l;const o=n[7].default,r=$n(o,n,n[6],Cu);let a=n[2],u=[];for(let f=0;f<a.length;f+=1)u[f]=Mu($u(n,a,f));return{c(){e=_("div"),r&&r.c(),t=T();for(let f=0;f<u.length;f+=1)u[f].c();h(e,"class",n[0]),se(e,"error",n[2].length)},m(f,c){w(f,e,c),r&&r.m(e,null),m(e,t);for(let d=0;d<u.length;d+=1)u[d].m(e,null);n[9](e),i=!0,s||(l=Q(e,"click",n[8]),s=!0)},p(f,[c]){if(r&&r.p&&(!i||c&64)&&Mn(r,o,f,f[6],i?Cn(o,f[6],c,T0):Tn(f[6]),Cu),c&4){a=f[2];let d;for(d=0;d<a.length;d+=1){const p=$u(f,a,d);u[d]?u[d].p(p,c):(u[d]=Mu(p),u[d].c(),u[d].m(e,null))}for(;d<u.length;d+=1)u[d].d(1);u.length=a.length}(!i||c&1)&&h(e,"class",f[0]),c&5&&se(e,"error",f[2].length)},i(f){i||(A(r,f),i=!0)},o(f){P(r,f),i=!1},d(f){f&&k(e),r&&r.d(f),Zn(u,f),n[9](null),s=!1,l()}}}const po="Invalid value";function A0(n,e,t){let i;kt(n,ns,g=>t(5,i=g));let{$$slots:s={},$$scope:l}=e;const o="field_"+G.randomString(7);let{name:r=""}=e,{class:a=void 0}=e,u,f=[];function c(){qm(r)}zn(()=>(u.addEventListener("input",c),u.addEventListener("change",c),()=>{u.removeEventListener("input",c),u.removeEventListener("change",c)}));function d(g){at.call(this,n,g)}function p(g){me[g?"unshift":"push"](()=>{u=g,t(1,u)})}return n.$$set=g=>{"name"in g&&t(4,r=g.name),"class"in g&&t(0,a=g.class),"$$scope"in g&&t(6,l=g.$$scope)},n.$$.update=()=>{n.$$.dirty&48&&t(2,f=G.toArray(G.getNestedVal(i,r)))},[a,u,f,o,r,i,l,s,d,p]}class Pe extends Oe{constructor(e){super(),De(this,e,A0,E0,Te,{name:4,class:0})}}function P0(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Email"),s=T(),l=_("input"),h(e,"for",i=n[9]),h(l,"type","email"),h(l,"autocomplete","off"),h(l,"id",o=n[9]),l.required=!0,l.autofocus=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0]),l.focus(),r||(a=Q(l,"input",n[5]),r=!0)},p(u,f){f&512&&i!==(i=u[9])&&h(e,"for",i),f&512&&o!==(o=u[9])&&h(l,"id",o),f&1&&l.value!==u[0]&&we(l,u[0])},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function L0(n){let e,t,i,s,l,o,r,a,u,f;return{c(){e=_("label"),t=N("Password"),s=T(),l=_("input"),r=T(),a=_("div"),a.textContent="Minimum 10 characters.",h(e,"for",i=n[9]),h(l,"type","password"),h(l,"autocomplete","new-password"),h(l,"minlength","10"),h(l,"id",o=n[9]),l.required=!0,h(a,"class","help-block")},m(c,d){w(c,e,d),m(e,t),w(c,s,d),w(c,l,d),we(l,n[1]),w(c,r,d),w(c,a,d),u||(f=Q(l,"input",n[6]),u=!0)},p(c,d){d&512&&i!==(i=c[9])&&h(e,"for",i),d&512&&o!==(o=c[9])&&h(l,"id",o),d&2&&l.value!==c[1]&&we(l,c[1])},d(c){c&&k(e),c&&k(s),c&&k(l),c&&k(r),c&&k(a),u=!1,f()}}}function F0(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Password confirm"),s=T(),l=_("input"),h(e,"for",i=n[9]),h(l,"type","password"),h(l,"minlength","10"),h(l,"id",o=n[9]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[2]),r||(a=Q(l,"input",n[7]),r=!0)},p(u,f){f&512&&i!==(i=u[9])&&h(e,"for",i),f&512&&o!==(o=u[9])&&h(l,"id",o),f&4&&l.value!==u[2]&&we(l,u[2])},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function I0(n){let e,t,i,s,l,o,r,a,u,f,c,d,p;return s=new Pe({props:{class:"form-field required",name:"email",$$slots:{default:[P0,({uniqueId:g})=>({9:gLine truncated
<i class="ri-arrow-right-line"></i>`,h(t,"class","content txt-center m-b-base"),h(f,"type","submit"),h(f,"class","btn btn-lg btn-block btn-next"),se(f,"btn-disabled",n[3]),se(f,"btn-loading",n[3]),h(e,"class","block"),h(e,"autocomplete","off")},m(g,v){w(g,e,v),m(e,t),m(e,i),V(s,e,null),m(e,l),V(o,e,null),m(e,r),V(a,e,null),m(e,u),m(e,f),c=!0,d||(p=Q(e,"submit",Wt(n[4])),d=!0)},p(g,[v]){const b={};v&1537&&(b.$$scope={dirty:v,ctx:g}),s.$set(b);const y={};v&1538&&(y.$$scope={dirty:v,ctx:g}),o.$set(y);const $={};v&1540&&($.$$scope={dirty:v,ctx:g}),a.$set($),v&8&&se(f,"btn-disabled",g[3]),v&8&&se(f,"btn-loading",g[3])},i(g){c||(A(s.$$.fragment,g),A(o.$$.fragment,g),A(a.$$.fragment,g),c=!0)},o(g){P(s.$$.fragment,g),P(o.$$.fragment,g),P(a.$$.fragment,g),c=!1},d(g){g&&k(e),z(s),z(o),z(a),d=!1,p()}}}function R0(n,e,t){const i=rn();let s="",l="",o="",r=!1;async function a(){if(!r){t(3,r=!0);try{await ye.Admins.create({email:s,password:l,passwordConfirm:o}),await ye.Admins.authViaEmail(s,l),i("submit")}catch(d){ye.errorResponseHandler(d)}t(3,r=!1)}}function u(){s=this.value,t(0,s)}function f(){l=this.value,t(1,l)}function c(){o=this.value,t(2,o)}return[s,l,o,r,a,u,f,c]}class N0 extends Oe{constructor(e){super(),De(this,e,R0,I0,Te,{})}}function Tu(n){let e,t;return e=new Vm({props:{$$slots:{default:[H0]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s&9&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){P(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function H0(n){let e,t;return e=new N0({}),e.$on("submit",n[1]),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p:re,i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){P(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function j0(n){let e,t,i=n[0]&&Tu(n);return{c(){i&&i.c(),e=st()},m(s,l){i&&i.m(s,l),w(s,e,l),t=!0},p(s,[l]){s[0]?i?(i.p(s,l),l&1&&A(i,1)):(i=Tu(s),i.c(),A(i,1),i.m(e.parentNode,e)):i&&(Ee(),P(i,1,1,()=>{i=null}),Ae())},i(s){t||(A(i),t=!0)},o(s){P(i),t=!1},d(s){i&&i.d(s),s&&k(e)}}}function q0(n,e,t){let i=!1;s();function s(){if(t(0,i=!1),new URLSearchParams(window.location.search).has("installer")){ye.logout(!1),t(0,i=!0);return}ye.AuthStore.isValid?vi("/collections"):ye.logout()}return[i,async()=>{t(0,i=!1),await oi(),window.location.search=""}]}class V0 extends Oe{constructor(e){super(),De(this,e,q0,j0,Te,{})}}const Jt=Qn(""),mo=Qn("");function jo(n){const e=n-1;return e*e*e+1}function go(n,{delay:e=0,duration:t=400,easing:i=hl}={}){const s=+getComputedStyle(n).opacity;return{delay:e,duration:t,easing:i,css:l=>`opacity: ${l*s}`}}function Nn(n,{delay:e=0,duration:t=400,easing:i=jo,x:s=0,y:l=0,opacity:o=0}={}){const r=getComputedStyle(n),a=+r.opacity,u=r.transform==="none"?"":r.transform,f=a*(1-o);return{delay:e,duration:t,easing:i,css:(c,d)=>`
transform: ${u} translate(${(1-c)*s}px, ${(1-c)*l}px);
opacity: ${a-f*d}`}}function xt(n,{delay:e=0,duration:t=400,easing:i=jo}={}){const s=getComputedStyle(n),l=+s.opacity,o=parseFloat(s.height),r=parseFloat(s.paddingTop),a=parseFloat(s.paddingBottom),u=parseFloat(s.marginTop),f=parseFloat(s.marginBottom),c=parseFloat(s.borderTopWidth),d=parseFloat(s.borderBottomWidth);return{delay:e,duration:t,easing:i,css:p=>`overflow: hidden;opacity: ${Math.min(p*20,1)*l};height: ${p*o}px;padding-top: ${p*r}px;padding-bottom: ${p*a}px;margin-top: ${p*u}px;margin-bottom: ${p*f}px;border-top-width: ${p*c}px;border-bottom-width: ${p*d}px;`}}function Hn(n,{delay:e=0,duration:t=400,easing:i=jo,start:s=0,opacity:l=0}={}){const o=getComputedStyle(n),r=+o.opacity,a=o.transform==="none"?"":o.transform,u=1-s,f=r*(1-l);return{delay:e,duration:t,easing:i,css:(c,d)=>`
transform: ${a} scale(${1-u*d});
opacity: ${r-f*d}
`}}function z0(n){let e,t,i,s;return{c(){e=_("input"),h(e,"type","text"),h(e,"id",n[8]),h(e,"placeholder",t=n[0]||n[1])},m(l,o){w(l,e,o),n[13](e),we(e,n[7]),i||(s=Q(e,"input",n[14]),i=!0)},p(l,o){o&3&&t!==(t=l[0]||l[1])&&h(e,"placeholder",t),o&128&&e.value!==l[7]&&we(e,l[7])},i:re,o:re,d(l){l&&k(e),n[13](null),i=!1,s()}}}function B0(n){let e,t,i,s;function l(a){n[12](a)}var o=n[4];function r(a){let u={singleLine:!0,disableRequestKeys:!0,disableIndirectCollectionsKeys:!0,extraAutocompleteKeys:a[3],baseCollection:a[2],placeholder:a[0]||a[1]};return a[7]!==void 0&&(u.value=a[7]),{props:u}}return o&&(e=new o(r(n)),me.push(()=>Le(e,"value",l)),e.$on("submit",n[10])),{c(){e&&B(e.$$.fragment),i=st()},m(a,u){e&&V(e,a,u),w(a,i,u),s=!0},p(a,u){const f={};if(u&8&&(f.extraAutocompleteKeys=a[3]),u&4&&(f.baseCollection=a[2]),u&3&&(f.placeholder=a[0]||a[1]),!t&&u&128&&(t=!0,f.value=a[7],Ie(()=>t=!1)),o!==(o=a[4])){if(e){Ee();const c=e;P(c.$$.fragment,1,0,()=>{z(c,1)}),Ae()}o?(e=new o(r(a)),me.push(()=>Le(e,"value",l)),e.$on("submit",a[10]),B(e.$$.fragment),A(e.$$.fragment,1),V(e,i.parentNode,i)):e=null}else o&&e.$set(f)},i(a){s||(e&&A(e.$$.fragment,a),s=!0)},o(a){e&&P(e.$$.fragment,a),s=!1},d(a){a&&k(i),e&&z(e,a)}}}function Du(n){let e,t,i,s,l,o,r=n[7]!==n[0]&&Ou();return{c(){r&&r.c(),e=T(),t=_("button"),t.innerHTML='<span class="txt">Clear</span>',h(t,"type","button"),h(t,"class","btn btn-secondary btn-sm btn-hint p-l-xs p-r-xs m-l-10")},m(a,u){r&&r.m(a,u),w(a,e,u),w(a,t,u),s=!0,l||(o=Q(t,"click",n[15]),l=!0)},p(a,u){a[7]!==a[0]?r?u&129&&A(r,1):(r=Ou(),r.c(),A(r,1),r.m(e.parentNode,e)):r&&(Ee(),P(r,1,1,()=>{r=null}),Ae())},i(a){s||(A(r),Ot(()=>{i||(i=lt(t,Nn,{duration:150,x:5},!0)),i.run(1)}),s=!0)},o(a){P(r),i||(i=lt(t,Nn,{duration:150,x:5},!1)),i.run(0),s=!1},d(a){r&&r.d(a),a&&k(e),a&&k(t),a&&i&&i.end(),l=!1,o()}}}function Ou(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Search</span>',h(e,"type","submit"),h(e,"class","btn btn-expanded btn-sm btn-warning")},m(s,l){w(s,e,l),i=!0},i(s){i||(Ot(()=>{t||(t=lt(e,Nn,{duration:150,x:5},!0)),t.run(1)}),i=!0)},o(s){t||(t=lt(e,Nn,{duration:150,x:5},!1)),t.run(0),i=!1},d(s){s&&k(e),s&&t&&t.end()}}}function U0(n){let e,t,i,s,l,o,r,a,u,f,c;const d=[B0,z0],p=[];function g(b,y){return b[4]&&!b[5]?0:1}o=g(n),r=p[o]=d[o](n);let v=(n[0].length||n[7].length)&&Du(n);return{c(){e=_("div"),t=_("form"),i=_("label"),s=_("i"),l=T(),r.c(),a=T(),v&&v.c(),h(s,"class","ri-search-line"),h(i,"for",n[8]),h(i,"class","m-l-10 txt-xl"),h(t,"class","searchbar"),h(e,"class","searchbar-wrapper")},m(b,y){w(b,e,y),m(e,t),m(t,i),m(i,s),m(t,l),p[o].m(t,null),m(t,a),v&&v.m(t,null),u=!0,f||(c=[Q(t,"submit",Wt(n[10])),Q(e,"click",Gn(n[11]))],f=!0)},p(b,[y]){let $=o;o=g(b),o===$?p[o].p(b,y):(Ee(),P(p[$],1,1,()=>{p[$]=null}),Ae(),r=p[o],r?r.p(b,y):(r=p[o]=d[o](b),r.c()),A(r,1),r.m(t,a)),b[0].length||b[7].length?v?(v.p(b,y),y&129&&A(v,1)):(v=Du(b),v.c(),A(v,1),v.m(t,null)):v&&(Ee(),P(v,1,1,()=>{v=null}),Ae())},i(b){u||(A(r),A(v),u=!0)},o(b){P(r),P(v),u=!1},d(b){b&&k(e),p[o].d(),v&&v.d(),f=!1,Qe(c)}}}function W0(n,e,t){const i=rn(),s="search_"+G.randomString(7);let{value:l=""}=e,{placeholder:o='Search filter, ex. created > "2022-01-01"...'}=e,{autocompleteCollection:r=new On}=e,{extraAutocompleteKeys:a=[]}=e,u,f=!1,c,d="";function p(C=!0){t(7,d=""),C&&(c==null||c.focus()),i("clear")}function g(){t(0,l=d),i("submit",l)}async function v(){u||f||(t(5,f=!0),t(4,u=(await Ki(()=>import("./FilterAutocompleteInput.9d9a35b4.js"),[])).default),t(5,f=!1))}zn(()=>{v()});function b(C){at.call(this,n,C)}function y(C){d=C,t(7,d),t(0,l)}function $(C){me[C?"unshift":"push"](()=>{c=C,t(6,c)})}function S(){d=this.value,t(7,d),t(0,l)}const M=()=>{p(!1),g()};return n.$$set=C=>{"value"in C&&t(0,l=C.value),"placeholder"in C&&t(1,o=C.placeholder),"autocompleteCollection"in C&&t(2,r=C.autocompleteCollection),"extraAutocompleteKeys"in C&&t(3,a=C.extraAutocompleteKeys)},n.$$.update=()=>{n.$$.dirty&1&&typeof l=="string"&&t(7,d=l)},[l,o,r,a,u,f,c,d,s,p,g,b,y,$,S,M]}class qo extends Oe{constructor(e){super(),De(this,e,W0,U0,Te,{value:0,placeholder:1,autocompleteCollection:2,extraAutocompleteKeys:3})}}let Nr,qi;const Hr="app-tooltip";function Eu(n){return typeof n=="string"?{text:n,position:"bottom",hideOnClick:null}:n||{}}function Ei(){return qi=qi||document.querySelector("."+Hr),qi||(qi=document.createElement("div"),qi.classList.add(Hr),document.body.appendChild(qi)),qi}function zm(n,e){let t=Ei();if(!t.classList.contains("active")||!(e!=null&&e.text)){jr();return}t.textContent=e.text,t.className=Hr+" active",e.class&&t.classList.add(e.class),t.style.top="0px",t.style.left="0px";let i=t.offsetHeight,s=t.offsetWidth,l=n.getBoundingClientRect(),o=0,r=0,a=5;e.position=="left"?(o=l.top+l.height/2-i/2,r=l.left-s-a):e.position=="right"?(o=l.top+l.height/2-i/2,r=l.right+a):e.position=="top"?(o=l.top-i-a,r=l.left+l.width/2-s/2):e.position=="top-left"?(o=l.top-i-a,r=l.left):e.position=="top-right"?(o=l.top-i-a,r=l.right-s):e.posi Line truncated
<span class="txt">method</span>`,h(e,"class","col-header-content")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function n1(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="url",h(t,"class",G.getFieldTypeIcon("url")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function i1(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="referer",h(t,"class",G.getFieldTypeIcon("url")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function s1(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="status",h(t,"class",G.getFieldTypeIcon("number")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function l1(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="created",h(t,"class",G.getFieldTypeIcon("date")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function Pu(n){let e;function t(l,o){return l[6]?r1:o1}let i=t(n),s=i(n);return{c(){s.c(),e=st()},m(l,o){s.m(l,o),w(l,e,o)},p(l,o){i===(i=t(l))&&s?s.p(l,o):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},d(l){s.d(l),l&&k(e)}}}function o1(n){var r;let e,t,i,s,l,o=((r=n[0])==null?void 0:r.length)&&Lu(n);return{c(){e=_("tr"),t=_("td"),i=_("h6"),i.textContent="No logs found.",s=T(),o&&o.c(),l=T(),h(t,"colspan","99"),h(t,"class","txt-center txt-hint p-xs")},m(a,u){w(a,e,u),m(e,t),m(t,i),m(t,s),o&&o.m(t,null),m(e,l)},p(a,u){var f;(f=a[0])!=null&&f.length?o?o.p(a,u):(o=Lu(a),o.c(),o.m(t,null)):o&&(o.d(1),o=null)},d(a){a&&k(e),o&&o.d()}}}function r1(n){let e;return{c(){e=_("tr"),e.innerHTML=`<td colspan="99" class="p-xs"><span class="skeleton-loader"></span></td>
`},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Lu(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Clear filters</span>',h(e,"type","button"),h(e,"class","btn btn-hint btn-expanded m-t-sm")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[18]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function Fu(n){let e;return{c(){e=_("i"),h(e,"class","ri-error-warning-line txt-danger m-l-5 m-r-5"),h(e,"title","Error")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Iu(n,e){var oe,he,be;let t,i,s,l=((oe=e[21].method)==null?void 0:oe.toUpperCase())+"",o,r,a,u,f,c=e[21].url+"",d,p,g,v,b,y,$=(e[21].referer||"N/A")+"",S,M,C,D,O,E=e[21].status+"",F,L,R,H,te,le,q,Y,W,X,ne=(((he=e[21].meta)==null?void 0:he.errorMessage)||((be=e[21].meta)==null?void 0:be.errorData))&&Fu();H=new _i({props:{date:e[21].created}});function ue(){return e[16](e[21])}function Me(...K){return e[17](e[21],...K)}return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("span"),o=N(l),a=T(),u=_("td"),f=_("span"),d=N(c),g=T(),ne&&ne.c(),v=T(),b=_("td"),y=_("span"),S=N($),C=T(),D=_("td"),O=_("span"),F=N(E),L=T(),R=_("td"),B(H.$$.fragment),te=T(),le=_("td"),le.innerHTML='<i class="ri-arrow-right-line"></i>',q=T(),h(s,"class",r="label txt-uppercase "+e[9][e[21].method.toLowerCase()]),h(i,"class","col-type-text col-field-method min-width"),h(f,"class","txt txt-ellipsis"),h(f,"title",p=e[21].url),h(u,"class","col-type-text col-field-url"),h(y,"class","txt txt-ellipsis"),h(y,"title",M=e[21].referer),se(y,"txt-hint",!e[21].referer),h(b,"class","col-type-text col-field-referer"),h(O,"class","label"),se(O,"label-danger",e[21].status>=400),h(D,"class","col-type-number col-field-status"),h(R,"class","col-type-date col-field-created"),h(le,"class","col-type-action min-width"),h(t,"tabindex","0"),h(t,"class","row-handle"),this.first=t},m(K,Se){w(K,t,Se),m(t,i),m(i,s),m(s,o),m(t,a),m(t,u),m(u,f),m(f,d),m(u,g),ne&&ne.m(u,null),m(t,v),m(t,b),m(b,y),m(y,S),m(t,C),m(t,D),m(D,O),m(O,F),m(t,L),m(t,R),V(H,R,null),m(t,te),m(t,le),m(t,q),Y=!0,W||(X=[Q(t,"click",ue),Q(t,"keydown",Me)],W=!0)},p(K,Se){var J,ve,Re;e=K,(!Y||Se&8)&&l!==(l=((J=e[21].method)==null?void 0:J.toUpperCase())+"")&&ge(o,l),(!Y||Se&8&&r!==(r="label txt-uppercase "+e[9][e[21].method.toLowerCase()]))&&h(s,"class",r),(!Y||Se&8)&&c!==(c=e[21].url+"")&&ge(d,c),(!Y||Se&8&&p!==(p=e[21].url))&&h(f,"title",p),((ve=e[21].meta)==null?void 0:ve.errorMessage)||((Re=e[21].meta)==null?void 0:Re.errorData)?ne||(ne=Fu(),ne.c(),ne.m(u,null)):ne&&(ne.d(1),ne=null),(!Y||Se&8)&&$!==($=(e[21].referer||"N/A")+"")&&ge(S,$),(!Y||Se&8&&M!==(M=e[21].referer))&&h(y,"title",M),Se&8&&se(y,"txt-hint",!e[21].referer),(!Y||Se&8)&&E!==(E=e[21].status+"")&&ge(F,E),Se&8&&se(O,"label-danger",e[21].status>=400);const x={};Se&8&&(x.date=e[21].created),H.$set(x)},i(K){Y||(A(H.$$.fragment,K),Y=!0)},o(K){P(H.$$.fragment,K),Y=!1},d(K){K&&k(t),ne&&ne.d(),z(H),W=!1,Qe(X)}}}function Ru(n){let e,t,i=n[3].length+"",s,l,o;return{c(){e=_("small"),t=N("Showing "),s=N(i),l=N(" of "),o=N(n[4]),h(e,"class","block txt-hint txt-right m-t-sm")},m(r,a){w(r,e,a),m(e,t),m(e,s),m(e,l),m(e,o)},p(r,a){a&8&&i!==(i=r[3].length+"")&&ge(s,i),a&16&&ge(o,r[4])},d(r){r&&k(e)}}}function Nu(n){let e,t,i,s,l=n[4]-n[3].length+"",o,r,a,u;return{c(){e=_("div"),t=_("button"),i=_("span"),s=N("Load more ("),o=N(l),r=N(")"),h(i,"class","txt"),h(t,"type","button"),h(t,"class","btn btn-lg btn-secondary btn-expanded"),se(t,"btn-loading",n[6]),se(t,"btn-disabled",n[6]),h(e,"class","block txt-center m-t-xs")},m(f,c){w(f,e,c),m(e,t),m(t,i),m(i,s),m(i,o),m(i,r),a||(u=Q(t,"click",n[19]),a=!0)},p(f,c){c&24&&l!==(l=f[4]-f[3].length+"")&&ge(o,l),c&64&&se(t,"btn-loading",f[6]),c&64&&se(t,"btn-disabled",f[6])},d(f){f&&k(e),a=!1,u()}}}function a1(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$,S,M,C,D,O=[],E=new Map,F,L,R,H;function te(J){n[11](J)}let le={disable:!0,class:"col-field-method",name:"method",$$slots:{default:[t1]},$$scope:{ctx:n}};n[1]!==void 0&&(le.sort=n[1]),l=new en({props:le}),me.push(()=>Le(l,"sort",te));function q(J){n[12](J)}let Y={disable:!0,class:"col-type-text col-field-url",name:"url",$$slots:{default:[n1]},$$scope:{ctx:n}};n[1]!==void 0&&(Y.sort=n[1]),a=new en({props:Y}),me.push(()=>Le(a,"sort",q));function W(J){n[13](J)}let X={disable:!0,class:"col-type-text col-field-referer",name:"referer",$$slots:{default:[i1]},$$scope:{ctx:n}};n[1]!==void 0&&(X.sort=n[1]),c=new en({props:X}),me.push(()=>Le(c,"sort",W));function ne(J){n[14](J)}let ue={disable:!0,class:"col-type-number col-field-status",name:"status",$$slots:{default:[s1]},$$scope:{ctx:n}};n[1]!==void 0&&(ue.sort=n[1]),g=new en({props:ue}),me.push(()=>Le(g,"sort",ne));function Me(J){n[15](J)}let oe={disable:!0,class:"col-type-date col-field-created",name:"created",$$slots:{default:[l1]},$$scope:{ctx:n}};n[1]!==void 0&&(oe.sort=n[1]),y=new en({props:oe}),me.push(()=>Le(y,"sort",Me));let he=n[3];const be=J=>J[21].id;for(let J=0;J<he.length;J+=1){let ve=Au(n,he,J),Re=be(ve);E.set(Re,O[J]=Iu(Re,ve))}let K=null;he.length||( Line truncated
* Chart.js v3.8.2
* https://www.chartjs.org
* (c) 2022 Chart.js Contributors
* Released under the MIT License
*/const Bm=function(){return typeof window>"u"?function(n){return n()}:window.requestAnimationFrame}();function Um(n,e,t){const i=t||(o=>Array.prototype.slice.call(o));let s=!1,l=[];return function(...o){l=i(o),s||(s=!0,Bm.call(window,()=>{s=!1,n.apply(e,l)}))}}function c1(n,e){let t;return function(...i){return e?(clearTimeout(t),t=setTimeout(n,e,i)):n.apply(this,i),e}}const d1=n=>n==="start"?"left":n==="end"?"right":"center",Hu=(n,e,t)=>n==="start"?e:n==="end"?t:(e+t)/2;function fi(){}const h1=function(){let n=0;return function(){return n++}}();function Dt(n){return n===null||typeof n>"u"}function Nt(n){if(Array.isArray&&Array.isArray(n))return!0;const e=Object.prototype.toString.call(n);return e.slice(0,7)==="[object"&&e.slice(-6)==="Array]"}function ut(n){return n!==null&&Object.prototype.toString.call(n)==="[object Object]"}const Ut=n=>(typeof n=="number"||n instanceof Number)&&isFinite(+n);function Pn(n,e){return Ut(n)?n:e}function mt(n,e){return typeof n>"u"?e:n}const p1=(n,e)=>typeof n=="string"&&n.endsWith("%")?parseFloat(n)/100:n/e,Wm=(n,e)=>typeof n=="string"&&n.endsWith("%")?parseFloat(n)/100*e:+n;function Vt(n,e,t){if(n&&typeof n.call=="function")return n.apply(t,e)}function Tt(n,e,t,i){let s,l,o;if(Nt(n))if(l=n.length,i)for(s=l-1;s>=0;s--)e.call(t,n[s],s);else for(s=0;s<l;s++)e.call(t,n[s],s);else if(ut(n))for(o=Object.keys(n),l=o.length,s=0;s<l;s++)e.call(t,n[o[s]],o[s])}function _o(n,e){let t,i,s,l;if(!n||!e||n.length!==e.length)return!1;for(t=0,i=n.length;t<i;++t)if(s=n[t],l=e[t],s.datasetIndex!==l.datasetIndex||s.index!==l.index)return!1;return!0}function bo(n){if(Nt(n))return n.map(bo);if(ut(n)){const e=Object.create(null),t=Object.keys(n),i=t.length;let s=0;for(;s<i;++s)e[t[s]]=bo(n[t[s]]);return e}return n}function Ym(n){return["__proto__","prototype","constructor"].indexOf(n)===-1}function m1(n,e,t,i){if(!Ym(n))return;const s=e[n],l=t[n];ut(s)&&ut(l)?ll(s,l,i):e[n]=bo(l)}function ll(n,e,t){const i=Nt(e)?e:[e],s=i.length;if(!ut(n))return n;t=t||{};const l=t.merger||m1;for(let o=0;o<s;++o){if(e=i[o],!ut(e))continue;const r=Object.keys(e);for(let a=0,u=r.length;a<u;++a)l(r[a],n,e,t)}return n}function Js(n,e){return ll(n,e,{merger:g1})}function g1(n,e,t){if(!Ym(n))return;const i=e[n],s=t[n];ut(i)&&ut(s)?Js(i,s):Object.prototype.hasOwnProperty.call(e,n)||(e[n]=bo(s))}const _1="",b1=".";function ju(n,e){const t=n.indexOf(b1,e);return t===-1?n.length:t}function Pi(n,e){if(e===_1)return n;let t=0,i=ju(e,t);for(;n&&i>t;)n=n[e.slice(t,i)],t=i+1,i=ju(e,t);return n}function _a(n){return n.charAt(0).toUpperCase()+n.slice(1)}const jn=n=>typeof n<"u",Li=n=>typeof n=="function",qu=(n,e)=>{if(n.size!==e.size)return!1;for(const t of n)if(!e.has(t))return!1;return!0};function v1(n){return n.type==="mouseup"||n.type==="click"||n.type==="contextmenu"}const Bt=Math.PI,At=2*Bt,y1=At+Bt,vo=Number.POSITIVE_INFINITY,k1=Bt/180,zt=Bt/2,Ls=Bt/4,Vu=Bt*2/3,In=Math.log10,ni=Math.sign;function zu(n){const e=Math.round(n);n=Xs(n,e,n/1e3)?e:n;const t=Math.pow(10,Math.floor(In(n))),i=n/t;return(i<=1?1:i<=2?2:i<=5?5:10)*t}function w1(n){const e=[],t=Math.sqrt(n);let i;for(i=1;i<t;i++)n%i===0&&(e.push(i),e.push(n/i));return t===(t|0)&&e.push(t),e.sort((s,l)=>s-l).pop(),e}function ol(n){return!isNaN(parseFloat(n))&&isFinite(n)}function Xs(n,e,t){return Math.abs(n-e)<t}function S1(n,e){const t=Math.round(n);return t-e<=n&&t+e>=n}function Km(n,e,t){let i,s,l;for(i=0,s=n.length;i<s;i++)l=n[i][t],isNaN(l)||(e.min=Math.min(e.min,l),e.max=Math.max(e.max,l))}function Yn(n){return n*(Bt/180)}function ba(n){return n*(180/Bt)}function Bu(n){if(!Ut(n))return;let e=1,t=0;for(;Math.round(n*e)/e!==n;)e*=10,t++;return t}function Zm(n,e){const t=e.x-n.x,i=e.y-n.y,s=Math.sqrt(t*t+i*i);let l=Math.atan2(i,t);return l<-.5*Bt&&(l+=At),{angle:l,distance:s}}function qr(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))}function $1(n,e){return(n-e+y1)%At-Bt}function kn(n){return(n%At+At)%At}function rl(n,e,t,i){const s=kn(n),l=kn(e),o=kn(t),r=kn(l-s),a=kn(o-s),u=kn(s-l),f=kn(s-o);return s===l||s===o||i&&l===o||r>a&&u<f}function ln(n,e,t){return Math.max(e,Math.min(t,n))}function C1(n){return ln(n,-32768,32767)}function al(n,e,t,i=1e-6){return n>=Math.min(e,t)-i&&n<=Math.max(e,t)+i}const Hl=n=>n===0||n===1,Uu=(n,e,t)=>-(Math.pow(2,10*(n-=1))*Math.sin((n-e)*At/t)),Wu=(n,e,t)=>Math.pow(2,-10*n)*Math.sin((n-e)*At/t)+1,Qs={linear:n=>n,easeInQuad:n=>n*n,easeOutQuad:n=>-n*(n-2),easeInOutQuad:n=>(n/=.5)<1?.5*n*n:-.5*(--n*(n-2)-1),easeInCubic:n=>n*n*n,easeOutCubic:n=>(n-=1)*n*n+1,easeInOutCubic:n=>(n/=.5)<1?.5*n*n*n:.5*((n-=2)*n*n+2),easeInQuart:n=>n*n*n*n,easeOutQuart:n=>-((n-=1)*n*n*n-1),easeInOutQuart:n=>(n/=.5)<1?.5*n*n*n*n:-.5*((n-=2)*n*n*n-2),easeInQuint:n=>n*n*n*n*n,easeOutQuint:n=>(n-=1)*n*n*n*n+1,easeInOutQuint:n=>(n/=.5)<1?.5*n*n*n*n*n:.5*((n-=2)*n*n*n*n+2),easeInSine:n=>-Math.cos(n*zt)+1,easeOutSine:n=>Math.sin(n*zt),easeInOutSine:n=>-.5*(Math.cos(Bt*n)-1),easeInExpo:n=>n===0?0:Math.pow(2,10*(n-1)),easeOutExpo:n=>n===1?1:-Math.pow(Line truncated
* @kurkle/color v0.2.1
* https://github.com/kurkle/color#readme
* (c) 2022 Jukka Kurkela
* Released under the MIT License
*/function vl(n){return n+.5|0}const Di=(n,e,t)=>Math.max(Math.min(n,t),e);function Bs(n){return Di(vl(n*2.55),0,255)}function Ai(n){return Di(vl(n*255),0,255)}function hi(n){return Di(vl(n/2.55)/100,0,1)}function Yu(n){return Di(vl(n*100),0,100)}const An={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Vr=[..."0123456789ABCDEF"],M1=n=>Vr[n&15],T1=n=>Vr[(n&240)>>4]+Vr[n&15],jl=n=>(n&240)>>4===(n&15),D1=n=>jl(n.r)&&jl(n.g)&&jl(n.b)&&jl(n.a);function O1(n){var e=n.length,t;return n[0]==="#"&&(e===4||e===5?t={r:255&An[n[1]]*17,g:255&An[n[2]]*17,b:255&An[n[3]]*17,a:e===5?An[n[4]]*17:255}:(e===7||e===9)&&(t={r:An[n[1]]<<4|An[n[2]],g:An[n[3]]<<4|An[n[4]],b:An[n[5]]<<4|An[n[6]],a:e===9?An[n[7]]<<4|An[n[8]]:255})),t}const E1=(n,e)=>n<255?e(n):"";function A1(n){var e=D1(n)?M1:T1;return n?"#"+e(n.r)+e(n.g)+e(n.b)+E1(n.a,e):void 0}const P1=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Gm(n,e,t){const i=e*Math.min(t,1-t),s=(l,o=(l+n/30)%12)=>t-i*Math.max(Math.min(o-3,9-o,1),-1);return[s(0),s(8),s(4)]}function L1(n,e,t){const i=(s,l=(s+n/60)%6)=>t-t*e*Math.max(Math.min(l,4-l,1),0);return[i(5),i(3),i(1)]}function F1(n,e,t){const i=Gm(n,1,.5);let s;for(e+t>1&&(s=1/(e+t),e*=s,t*=s),s=0;s<3;s++)i[s]*=1-e-t,i[s]+=e;return i}function I1(n,e,t,i,s){return n===s?(e-t)/i+(e<t?6:0):e===s?(t-n)/i+2:(n-e)/i+4}function va(n){const t=n.r/255,i=n.g/255,s=n.b/255,l=Math.max(t,i,s),o=Math.min(t,i,s),r=(l+o)/2;let a,u,f;return l!==o&&(f=l-o,u=r>.5?f/(2-l-o):f/(l+o),a=I1(t,i,s,f,l),a=a*60+.5),[a|0,u||0,r]}function ya(n,e,t,i){return(Array.isArray(e)?n(e[0],e[1],e[2]):n(e,t,i)).map(Ai)}function ka(n,e,t){return ya(Gm,n,e,t)}function R1(n,e,t){return ya(F1,n,e,t)}function N1(n,e,t){return ya(L1,n,e,t)}function Jm(n){return(n%360+360)%360}function H1(n){const e=P1.exec(n);let t=255,i;if(!e)return;e[5]!==i&&(t=e[6]?Bs(+e[5]):Ai(+e[5]));const s=Jm(+e[2]),l=+e[3]/100,o=+e[4]/100;return e[1]==="hwb"?i=R1(s,l,o):e[1]==="hsv"?i=N1(s,l,o):i=ka(s,l,o),{r:i[0],g:i[1],b:i[2],a:t}}function j1(n,e){var t=va(n);t[0]=Jm(t[0]+e),t=ka(t),n.r=t[0],n.g=t[1],n.b=t[2]}function q1(n){if(!n)return;const e=va(n),t=e[0],i=Yu(e[1]),s=Yu(e[2]);return n.a<255?`hsla(${t}, ${i}%, ${s}%, ${hi(n.a)})`:`hsl(${t}, ${i}%, ${s}%)`}const Ku={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Zu={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function V1(){const n={},e=Object.keys(Zu),t=Object.keys(Ku);let i,s,l,o,r;for(i=0;i<e.length;i++){for(o=r=e[i],s=0;s<t.length;s++)l=t[s]Line truncated
* Chart.js v3.8.2
* https://www.chartjs.org
* (c) 2022 Chart.js Contributors
* Released under the MIT License
*/class Yv{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(e,t,i,s){const l=t.listeners[s],o=t.duration;l.forEach(r=>r({chart:e,initial:t.initial,numSteps:o,currentStep:Math.min(i-t.start,o)}))}_refresh(){this._request||(this._running=!0,this._request=Bm.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let t=0;this._charts.forEach((i,s)=>{if(!i.running||!i.items.length)return;const l=i.items;let o=l.length-1,r=!1,a;for(;o>=0;--o)a=l[o],a._active?(a._total>i.duration&&(i.duration=a._total),a.tick(e),r=!0):(l[o]=l[l.length-1],l.pop());r&&(s.draw(),this._notify(s,i,e,"progress")),l.length||(i.running=!1,this._notify(s,i,e,"complete"),i.initial=!1),t+=l.length}),this._lastDate=e,t===0&&(this._running=!1)}_getAnims(e){const t=this._charts;let i=t.get(e);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,i)),i}listen(e,t,i){this._getAnims(e).listeners[t].push(i)}add(e,t){!t||!t.length||this._getAnims(e).items.push(...t)}has(e){return this._getAnims(e).items.length>0}start(e){const t=this._charts.get(e);!t||(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((i,s)=>Math.max(i,s._duration),0),this._refresh())}running(e){if(!this._running)return!1;const t=this._charts.get(e);return!(!t||!t.running||!t.items.length)}stop(e){const t=this._charts.get(e);if(!t||!t.items.length)return;const i=t.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();t.items=[],this._notify(e,t,Date.now(),"complete")}remove(e){return this._charts.delete(e)}}var ci=new Yv;const af="transparent",Kv={boolean(n,e,t){return t>.5?e:n},color(n,e,t){const i=Ju(n||af),s=i.valid&&Ju(e||af);return s&&s.valid?s.mix(i,t).hexString():e},number(n,e,t){return n+(e-n)*t}};class Zv{constructor(e,t,i,s){const l=t[i];s=zl([e.to,s,l,e.from]);const o=zl([e.from,l,s]);this._active=!0,this._fn=e.fn||Kv[e.type||typeof o],this._easing=Qs[e.easing]||Qs.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=t,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(e,t,i){if(this._active){this._notify(!1);const s=this._target[this._prop],l=i-this._start,o=this._duration-l;this._start=i,this._duration=Math.floor(Math.max(o,e.duration)),this._total+=l,this._loop=!!e.loop,this._to=zl([e.to,t,s,e.from]),this._from=zl([e.from,s,t])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){const t=e-this._start,i=this._duration,s=this._prop,l=this._from,o=this._loop,r=this._to;let a;if(this._active=l!==r&&(o||t<i),!this._active){this._target[s]=r,this._notify(!0);return}if(t<0){this._target[s]=l;return}a=t/i%2,a=o&&a>1?2-a:a,a=this._easing(Math.min(1,Math.max(0,a))),this._target[s]=this._fn(l,r,a)}wait(){const e=this._promises||(this._promises=[]);return new Promise((t,i)=>{e.push({res:t,rej:i})})}_notify(e){const t=e?"res":"rej",i=this._promises||[];for(let s=0;s<i.length;s++)i[s][t]()}}const Gv=["x","y","borderWidth","radius","tension"],Jv=["color","borderColor","backgroundColor"];gt.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const Xv=Object.keys(gt.animation);gt.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:n=>n!=="onProgress"&&n!=="onComplete"&&n!=="fn"});gt.set("animations",{colors:{type:"color",properties:Jv},numbers:{type:"number",properties:Gv}});gt.describe("animations",{_fallback:"animation"});gt.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:n=>n|0}}}});class hg{constructor(e,t){this._chart=e,this._properties=new Map,this.configure(t)}configure(e){if(!ut(e))return;const t=this._properties;Object.getOwnPropertyNames(e).forEach(i=>{const s=e[i];if(!ut(s))return;const l={};for(const o of Xv)l[o]=s[o];(Nt(s.properties)&&s.properties||[i]).forEach(o=>{(o===i||!t.has(o))&&t.set(o,l)})})}_animateOptions(e,t){const i=t.options,s=xv(e,i);if(!s)return[];const l=this._createAnimations(s,i);return i.$shared&&Qv(e.options.$animations,i).then(()=>{e.options=i},()=>{}),l}_createAnimations(e,t){const i=this._properties,s=[],l=e.$animations||(e.$animations={}),o=Object.keys(t),r=Date.now();let a;for(a=o.length-1;a>=0;--a){const u=o[a];if(u.charAt(0)==="$")continue;if(u==="options"){s.push(...this._animateOptions(e,t));continue}const f=t[u];let c=l[u];const d=i.get(u);if(c)if(d&&c.active()){c.update(d,f,r);continue}else c.cancel();if(!d||!d.duration){e[u]=f;continue}l[u]=c=new Zv(d,e,u,f),s.push(c)}return s}update(e,t){if(this._properties.size===0){Object.assign(e,t);return}const i=this._createAnimations(e,t);if(i.length)return ci.add(this._chart,i),!0}}function Qv(n,e){const t=[]Line truncated
`)>-1?n.split(`
`):n}function mw(n,e){const{element:t,datasetIndex:i,index:s}=e,l=n.getDatasetMeta(i).controller,{label:o,value:r}=l.getLabelAndValue(s);return{chart:n,label:o,parsed:l.getParsed(s),raw:n.data.datasets[i].data[s],formattedValue:r,dataset:l.getDataset(),dataIndex:s,datasetIndex:i,element:t}}function jf(n,e){const t=n.chart.ctx,{body:i,footer:s,title:l}=n,{boxWidth:o,boxHeight:r}=e,a=Sn(e.bodyFont),u=Sn(e.titleFont),f=Sn(e.footerFont),c=l.length,d=s.length,p=i.length,g=qn(e.padding);let v=g.height,b=0,y=i.reduce((M,C)=>M+C.before.length+C.lines.length+C.after.length,0);if(y+=n.beforeBody.length+n.afterBody.length,c&&(v+=c*u.lineHeight+(c-1)*e.titleSpacing+e.titleMarginBottom),y){const M=e.displayColors?Math.max(r,a.lineHeight):a.lineHeight;v+=p*M+(y-p)*a.lineHeight+(y-1)*e.bodySpacing}d&&(v+=e.footerMarginTop+d*f.lineHeight+(d-1)*e.footerSpacing);let $=0;const S=function(M){b=Math.max(b,t.measureText(M).width+$)};return t.save(),t.font=u.string,Tt(n.title,S),t.font=a.string,Tt(n.beforeBody.concat(n.afterBody),S),$=e.displayColors?o+2+e.boxPadding:0,Tt(i,M=>{Tt(M.before,S),Tt(M.lines,S),Tt(M.after,S)}),$=0,t.font=f.string,Tt(n.footer,S),t.restore(),b+=g.width,{width:b,height:v}}function gw(n,e){const{y:t,height:i}=e;return t<i/2?"top":t>n.height-i/2?"bottom":"center"}function _w(n,e,t,i){const{x:s,width:l}=i,o=t.caretSize+t.caretPadding;if(n==="left"&&s+l+o>e.width||n==="right"&&s-l-o<0)return!0}function bw(n,e,t,i){const{x:s,width:l}=t,{width:o,chartArea:{left:r,right:a}}=n;let u="center";return i==="center"?u=s<=(r+a)/2?"left":"right":s<=l/2?u="left":s>=o-l/2&&(u="right"),_w(u,n,e,t)&&(u="center"),u}function qf(n,e,t){const i=t.yAlign||e.yAlign||gw(n,t);return{xAlign:t.xAlign||e.xAlign||bw(n,e,t,i),yAlign:i}}function vw(n,e){let{x:t,width:i}=n;return e==="right"?t-=i:e==="center"&&(t-=i/2),t}function yw(n,e,t){let{y:i,height:s}=n;return e==="top"?i+=t:e==="bottom"?i-=s+t:i-=s/2,i}function Vf(n,e,t,i){const{caretSize:s,caretPadding:l,cornerRadius:o}=n,{xAlign:r,yAlign:a}=t,u=s+l,{topLeft:f,topRight:c,bottomLeft:d,bottomRight:p}=ps(o);let g=vw(e,r);const v=yw(e,a,u);return a==="center"?r==="left"?g+=u:r==="right"&&(g-=u):r==="left"?g-=Math.max(f,d)+s:r==="right"&&(g+=Math.max(c,p)+s),{x:ln(g,0,i.width-e.width),y:ln(v,0,i.height-e.height)}}function Gl(n,e,t){const i=qn(t.padding);return e==="center"?n.x+n.width/2:e==="right"?n.x+n.width-i.right:n.x+i.left}function zf(n){return xn([],di(n))}function kw(n,e,t){return Ii(n,{tooltip:e,tooltipItems:t,type:"tooltip"})}function Bf(n,e){const t=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return t?n.override(t):n}class Jr extends yi{constructor(e){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=e.chart||e._chart,this._chart=this.chart,this.options=e.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(e){this.options=e,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const e=this._cachedAnimations;if(e)return e;const t=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&t.options.animation&&i.animations,l=new hg(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(l)),l}getContext(){return this.$context||(this.$context=kw(this.chart.getContext(),this,this._tooltipItems))}getTitle(e,t){const{callbacks:i}=t,s=i.beforeTitle.apply(this,[e]),l=i.title.apply(this,[e]),o=i.afterTitle.apply(this,[e]);let r=[];return r=xn(r,di(s)),r=xn(r,di(l)),r=xn(r,di(o)),r}getBeforeBody(e,t){return zf(t.callbacks.beforeBody.apply(this,[e]))}getBody(e,t){const{callbacks:i}=t,s=[];return Tt(e,l=>{const o={before:[],lines:[],after:[]},r=Bf(i,l);xn(o.before,di(r.beforeLabel.call(this,l))),xn(o.lines,r.label.call(this,l)),xn(o.after,di(r.afterLabel.call(this,l))),s.push(o)}),s}getAfterBody(e,t){return zf(t.callbacks.afterBody.apply(this,[e]))}getFooter(e,t){const{callbacks:i}=t,s=i.beforeFooter.apply(this,[e]),l=i.footer.apply(this,[e]),o=i.afterFooter.apply(this,[e]);let r=[];return r=xn(r,di(s)),r=xn(r,di(l)),r=xn(r,di(o)),r}_createItems(e){const t=this._active,i=this.chart.data,s=[],l=[],o=[];let r=[],a,u;for(a=0,u=t.length;a<u;++a)r.push(mw(this.chart,t[a]));return e.filter&&(r=r.filter((f,c,d)=>e.filter(f,c,d,i))),e.itemSort&&(r=r.sort((f,c)=>e.itemSort(f,c,i))),Tt(r,f=>{const c=Bf(e.callbacks,f);s.push(c.labelColor.call(this,f)),l.push(c.labelPointStyle.call(this,f)),o.push(c.labelTextColor.call(this,f))}),this.labelColors=s,this.labelPointStyles=l,this.labelTextColors=o,this.dataPoints=r,r}update(e,t){const i=this.options.setContext(this.getContext()),s=this._active;l Line truncated
* chartjs-adapter-luxon v1.1.0
* https://www.chartjs.org
* (c) 2021 chartjs-adapter-luxon Contributors
* Released under the MIT license
*/const zw={datetime:Ze.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:Ze.TIME_WITH_SECONDS,minute:Ze.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};_g._date.override({_id:"luxon",_create:function(n){return Ze.fromMillis(n,this.options)},formats:function(){return zw},parse:function(n,e){const t=this.options;if(n===null||typeof n>"u")return null;const i=typeof n;return i==="number"?n=this._create(n):i==="string"?typeof e=="string"?n=Ze.fromFormat(n,e,t):n=Ze.fromISO(n,t):n instanceof Date?n=Ze.fromJSDate(n,t):i==="object"&&!(n instanceof Ze)&&(n=Ze.fromObject(n)),n.isValid?n.valueOf():null},format:function(n,e){const t=this._create(n);return typeof e=="string"?t.toFormat(e,this.options):t.toLocaleString(e)},add:function(n,e,t){const i={};return i[t]=e,this._create(n).plus(i).valueOf()},diff:function(n,e,t){return this._create(n).diff(this._create(e)).as(t).valueOf()},startOf:function(n,e,t){if(e==="isoWeek"){t=Math.trunc(Math.min(Math.max(0,t),6));const i=this._create(n);return i.minus({days:(i.weekday-t+7)%7}).startOf("day").valueOf()}return e?this._create(n).startOf(e).valueOf():n},endOf:function(n,e){return this._create(n).endOf(e).valueOf()}});function Xf(n){let e,t,i;return{c(){e=_("div"),h(e,"class","chart-loader loader svelte-vh4sl8")},m(s,l){w(s,e,l),i=!0},i(s){i||(Ot(()=>{t||(t=lt(e,Hn,{duration:150},!0)),t.run(1)}),i=!0)},o(s){t||(t=lt(e,Hn,{duration:150},!1)),t.run(0),i=!1},d(s){s&&k(e),s&&t&&t.end()}}}function Bw(n){let e,t,i=n[1]===1?"log":"logs",s;return{c(){e=N(n[1]),t=T(),s=N(i)},m(l,o){w(l,e,o),w(l,t,o),w(l,s,o)},p(l,o){o&2&&ge(e,l[1]),o&2&&i!==(i=l[1]===1?"log":"logs")&&ge(s,i)},d(l){l&&k(e),l&&k(t),l&&k(s)}}}function Uw(n){let e;return{c(){e=N("Loading...")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Ww(n){let e,t,i,s,l,o,r=n[2]&&Xf();function a(c,d){return c[2]?Uw:Bw}let u=a(n),f=u(n);return{c(){e=_("div"),r&&r.c(),t=T(),i=_("canvas"),s=T(),l=_("div"),f.c(),h(i,"class","chart-canvas svelte-vh4sl8"),Ya(i,"height","250px"),Ya(i,"width","100%"),h(e,"class","chart-wrapper svelte-vh4sl8"),se(e,"loading",n[2]),h(l,"class","txt-hint m-t-xs txt-right")},m(c,d){w(c,e,d),r&&r.m(e,null),m(e,t),m(e,i),n[8](i),w(c,s,d),w(c,l,d),f.m(l,null),o=!0},p(c,[d]){c[2]?r?d&4&&A(r,1):(r=Xf(),r.c(),A(r,1),r.m(e,t)):r&&(Ee(),P(r,1,1,()=>{r=null}),Ae()),d&4&&se(e,"loading",c[2]),u===(u=a(c))&&f?f.p(c,d):(f.d(1),f=u(c),f&&(f.c(),f.m(l,null)))},i(c){o||(A(r),o=!0)},o(c){P(r),o=!1},d(c){c&&k(e),r&&r.d(),n[8](null),c&&k(s),c&&k(l),f.d()}}}function Yw(n,e,t){let{filter:i=""}=e,{presets:s=""}=e,l,o,r=[],a=0,u=!1;async function f(){return t(2,u=!0),ye.Logs.getRequestsStats({filter:[s,i].filter(Boolean).join("&&")}).then(p=>{c();for(let g of p)r.push({x:G.getDateTime(g.date).toLocal().toJSDate(),y:g.total}),t(1,a+=g.total);r.push({x:new Date,y:void 0})}).catch(p=>{p!=null&&p.isAbort||(c(),console.warn(p),ye.errorResponseHandler(p,!1))}).finally(()=>{t(2,u=!1)})}function c(){t(1,a=0),t(7,r=[])}zn(()=>(To.register(Ri,Uo,wl,Ha,$l,pw,ww),t(6,o=new To(l,{type:"line",data:{datasets:[{label:"Total requests",data:r,borderColor:"#ef4565",pointBackgroundColor:"#ef4565",backgroundColor:"rgb(239,69,101,0.05)",borderWidth:2,pointRadius:1,pointBorderWidth:0,fill:!0}]},options:{animation:!1,interaction:{intersect:!1,mode:"index"},scales:{y:{beginAtZero:!0,grid:{color:"#edf0f3",borderColor:"#dee3e8"},ticks:{precision:0,maxTicksLimit:6,autoSkip:!0,color:"#666f75"}},x:{type:"time",time:{unit:"hour",tooltipFormat:"DD h a"},grid:{borderColor:"#dee3e8",color:p=>p.tick.major?"#edf0f3":""},ticks:{maxTicksLimit:15,autoSkip:!0,maxRotation:0,major:{enabled:!0},color:p=>p.tick.major?"#16161a":"#666f75"}}},plugins:{legend:{display:!1}}}})),()=>o==null?void 0:o.destroy()));function d(p){me[p?"unshift":"push"](()=>{l=p,t(0,l)})}return n.$$set=p=>{"filter"in p&&t(3,i=p.filter),"presets"in p&&t(4,s=p.presets)},n.$$.update=()=>{n.$$.dirty&24&&(typeof i<"u"||typeof s<"u")&&f(),n.$$.dirty&192&&typeof r<"u"&&o&&(t(6,o.data.datasets[0].data=r,o),o.update())},[l,a,u,i,s,f,o,r,d]}class Kw extends Oe{constructor(e){super(),De(this,e,Yw,Ww,Te,{filter:3,presets:4,load:5})}get load(){return this.$$.ctx[5]}}var Qf=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Hg={exports:{}};(function(n){var e=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/**
* Prism: Lightweight, robust, elegant syntax highlighting
*
* @license MIT <https://opensource.org/licenses/MIT>
* @author Lea Verou <https://lea.verou.me>
* @namespace
* @public
*/var t=function(i){var s=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,l=0,o={},r={manual:i.Prism&&i.Prism.manual,disableWorkerMessageHandler:i.Prism&&i.Prism.disableWorkerMessageHandler,util:{encode:function $(S){return S instanceof a?new a(S.type,$(S.content),S.alias):Array.isArray(S)?S.map($):S.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function($){return Object.prototype.toString.call($).slice(8,-1)},objId:function($){return $.__id||Object.defineProperty($,"__id",{value:++l}),$.__id},clone:function $(S,M){M=M||{};var C,D;switch(r.util.type(S)){case"Object":if(D=r.util.objId(S),M[D])return M[D];C={},M[D]=C;for(var O in S)S.hasOwnProperty(O)&&(C[O]=$(S[O],M));return C;case"Array":return D=r.util.objId(S),M[D]?M[D]:(C=[],M[D]=C,S.forEach(function(E,F){C[F]=$(E,M)}),C);default:return S}},getLanguage:function($){for(;$;){var S=s.exec($.className);if(S)return S[1].toLowerCase();$=$.parentElement}return"none"},setLanguage:function($,S){$.className=$.className.replace(RegExp(s,"gi"),""),$.classList.add("language-"+S)},currentScript:function(){if(typeof document>"u")return null;if("currentScript"in document&&1<2)return document.currentScript;try{throw new Error}catch(C){var $=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(C.stack)||[])[1];if($){var S=document.getElementsByTagName("script");for(var M in S)if(S[M].src==$)return S[M]}return null}},isActive:function($,S,M){for(var C="no-"+S;$;){var D=$.classList;if(D.contains(S))return!0;if(D.contains(C))return!1;$=$.parentElement}return!!M}},languages:{plain:o,plaintext:o,text:o,txt:o,extend:function($,S){var M=r.util.clone(r.languages[$]);for(var C in S)M[C]=S[C];return M},insertBefore:function($,S,M,C){C=C||r.languages;var D=C[$],O={};for(var E in D)if(D.hasOwnProperty(E)){if(E==S)for(var F in M)M.hasOwnProperty(F)&&(O[F]=M[F]);M.hasOwnProperty(E)||(O[E]=D[E])}var L=C[$];return C[$]=O,r.languages.DFS(r.languages,function(R,H){H===L&&R!=$&&(this[R]=O)}),O},DFS:function $(S,M,C,D){D=D||{};var O=r.util.objId;for(var E in S)if(S.hasOwnProperty(E)){M.call(S,E,S[E],C||E);var F=S[E],L=r.util.type(F);L==="Object"&&!D[O(F)]?(D[O(F)]=!0,$(F,M,null,D)):L==="Array"&&!D[O(F)]&&(D[O(F)]=!0,$(F,M,E,D))}}},plugins:{},highlightAll:function($,S){r.highlightAllUnder(document,$,S)},highlightAllUnder:function($,S,M){var C={callback:M,container:$,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};r.hooks.run("before-highlightall",C),C.elements=Array.prototype.slice.apply(C.container.querySelectorAll(C.selector)),r.hooks.run("before-all-elements-highlight",C);for(var D=0,O;O=C.elements[D++];)r.highlightElement(O,S===!0,C.callback)},highlightElement:function($,S,M){var C=r.util.getLanguage($),D=r.languages[C];r.util.setLanguage($,C);var O=$.parentElement;O&&O.nodeName.toLowerCase()==="pre"&&r.util.setLanguage(O,C);var E=$.textContent,F={element:$,language:C,grammar:D,code:E};function L(H){F.highlightedCode=H,r.hooks.run("before-insert",F),F.element.innerHTML=F.highlightedCode,r.hooks.run("after-highlight",F),r.hooks.run("complete",F),M&&M.call(F.element)}if(r.hooks.run("before-sanity-check",F),O=F.element.parentElement,O&&O.nodeName.toLowerCase()==="pre"&&!O.hasAttribute("tabindex")&&O.setAttribute("tabindex","0"),!F.code){r.hooks.run("complete",F),M&&M.call(F.element);return}if(r.hooks.run("before-highlight",F),!F.grammar){L(r.util.encode(F.code));return}if(S&&i.Worker){var R=new Worker(r.filename);R.onmessage=function(H){L(H.data)},R.postMessage(JSON.stringify({language:F.language,code:F.code,immediateClose:!0}))}else L(r.highlight(F.code,F.grammar,F.language))},highlight:function($,S,M){var C={code:$,grammar:S,language:M};if(r.hooks.run("before-tokenize",C),!C.grammar)throw new Error('The language "'+C.language+'" has no grammar.');return C.tokens=r.tokenize(C.code,C.grammar),r.hooks.run("after-tokenize",C),a.stringify(r.util.encode(C.tokens),C.language)},tokenize:function($,S){var M=S.rest;if(M){for(var C in M)S[C]=M[C];delete S.rest}var D=new c;return d(D,D.head,$),f($,D,S,D.head,0),g(D)},hooks:{all:{},add:function($,S){var M=r.hooks.all;M[$]=M[$]||[],M[$].push(S)},run:function($,S){var M=r.hooks.all[$];if(!(!M||!M.length))for(var C=0,D;D=M[C++];)D(S)}},Token:a};i.Prism=r;function a($,S,M,C){this.type=$,this.content=S,this.alias=M,this.length=(C||"").length|0}a.stringify=function $(S,M){if(typeof S=="string")return S;if(Array.isArray(S)){var C="";return S.forEach(function(L){C+=$(L,M)}),C}var D={type:S.type,content:$(S.content,M),tag:"span",classes:["token",S.type],attributes:{},language:M},O=S.alias;O&&(Array.isArray(O)?Array.prototype.push.apply(D.classes,O):D.classes.push(O)),r.hooks.run("wrap",D);var E="";for(var F in D.attributes)E+=" "+F+'="'+(D.attributes[F]||"").replace(/"/g,"&quot;")+'"';return"<"+D.tag+' class="'+D.classes.join(" ")+'"'+E+">"+D.content+"</"+D.tag+">"};function u($,S,M,C){$.lastIndex=S;var D=$.exec(M);if(D&&C&&D[1]){var O=D[1].length;D.index+=O,D[0]=D[0].slice(O)}return D}funLine truncated
`),b.hasAttribute("data-start")||b.setAttribute("data-start",String(F+1))}y.textContent=D,t.highlightElement(y)},function(D){b.setAttribute(r,f),y.textContent=D})}}),t.plugins.fileHighlight={highlight:function(b){for(var y=(b||document).querySelectorAll(c),$=0,S;S=y[$++];)t.highlightElement(S)}};var g=!1;t.fileHighlight=function(){g||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),g=!0),t.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(Hg);const js=Hg.exports;var Zw={exports:{}};(function(n){(function(){if(typeof Prism>"u")return;var e=Object.assign||function(l,o){for(var r in o)o.hasOwnProperty(r)&&(l[r]=o[r]);return l};function t(l){this.defaults=e({},l)}function i(l){return l.replace(/-(\w)/g,function(o,r){return r.toUpperCase()})}function s(l){for(var o=0,r=0;r<l.length;++r)l.charCodeAt(r)==" ".charCodeAt(0)&&(o+=3);return l.length+o}t.prototype={setDefaults:function(l){this.defaults=e(this.defaults,l)},normalize:function(l,o){o=e(this.defaults,o);for(var r in o){var a=i(r);r!=="normalize"&&a!=="setDefaults"&&o[r]&&this[a]&&(l=this[a].call(this,l,o[r]))}return l},leftTrim:function(l){return l.replace(/^\s+/,"")},rightTrim:function(l){return l.replace(/\s+$/,"")},tabsToSpaces:function(l,o){return o=o|0||4,l.replace(/\t/g,new Array(++o).join(" "))},spacesToTabs:function(l,o){return o=o|0||4,l.replace(RegExp(" {"+o+"}","g")," ")},removeTrailing:function(l){return l.replace(/\s*?$/gm,"")},removeInitialLineFeed:function(l){return l.replace(/^(?:\r?\n|\r)/,"")},removeIndent:function(l){var o=l.match(/^[^\S\n\r]*(?=\S)/gm);return!o||!o[0].length||(o.sort(function(r,a){return r.length-a.length}),!o[0].length)?l:l.replace(RegExp("^"+o[0],"gm"),"")},indent:function(l,o){return l.replace(/^[^\S\n\r]*(?=\S)/gm,new Array(++o).join(" ")+"$&")},breakLines:function(l,o){o=o===!0?80:o|0||80;for(var r=l.split(`
`),a=0;a<r.length;++a)if(!(s(r[a])<=o)){for(var u=r[a].split(/(\s+)/g),f=0,c=0;c<u.length;++c){var d=s(u[c]);f+=d,f>o&&(u[c]=`
`+u[c],f=d)}r[a]=u.join("")}return r.join(`
`)}},n.exports&&(n.exports=t),Prism.plugins.NormalizeWhitespace=new t({"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),Prism.hooks.add("before-sanity-check",function(l){var o=Prism.plugins.NormalizeWhitespace;if(!(l.settings&&l.settings["whitespace-normalization"]===!1)&&!!Prism.util.isActive(l.element,"whitespace-normalization",!0)){if((!l.element||!l.element.parentNode)&&l.code){l.code=o.normalize(l.code,l.settings);return}var r=l.element.parentNode;if(!(!l.code||!r||r.nodeName.toLowerCase()!=="pre")){for(var a=r.childNodes,u="",f="",c=!1,d=0;d<a.length;++d){var p=a[d];p==l.element?c=!0:p.nodeName==="#text"&&(c?f+=p.nodeValue:u+=p.nodeValue,r.removeChild(p),--d)}if(!l.element.children.length||!Prism.plugins.KeepMarkup)l.code=u+l.code+f,l.code=o.normalize(l.code,l.settings);else{var g=u+l.element.innerHTML+f;l.element.innerHTML=o.normalize(g,l.settings),l.code=l.element.textContent}}}})})()})(Zw);(function(n){var e=[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/],t=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,i={pattern:RegExp(t+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}}}};n.languages.dart=n.languages.extend("clike",{"class-name":[i,{pattern:RegExp(t+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:i.inside}],keyword:e,operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),n.languages.insertBefore("dart","string",{"string-literal":{pattern:/r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,lookbehind:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:n.languages.dart}}},string:/[\s\S]+/}},string:void 0}),n.languages.insertBefore("dart","class-name",{metadata:{pattern:/@\w+/,alias:"function"}}),n.languages.insertBefore("dart","class-name",{generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":i,keyword:e,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})})(Prism);function Gw(n){let e,t;return{c(){e=_("div"),t=_("code"),h(t,"class","svelte-tv7jme"),h(e,"class","code-wrapper prism-light svelte-tv7jme")},m(i,s){w(i,e,s),m(e,t),t.innerHTML=n[0]},p(i,[s]){s&1&&(t.innerHTML=i[0])},i:re,o:re,d(i){i&&k(e)}}}function Jw(n,e,t){let{content:i=""}=e,{language:s="javascript"}=e,l="";function o(r){return r=typeof r=="string"?r:"",r=js.plugins.NormalizeWhitespace.normalize(r,{"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),js.highlight(r,js.languages[s]||js.languages.javascript,s)}return n.$$set=r=>{"content"in r&&t(1,i=r.content),"language"in r&&t(2,s=r.language)},n.$$.update=()=>{n.$$.dirty&2&&typeof js<"u"&&i&&t(0,l=o(i))},[l,i,s]}class gn extends Oe{constructor(e){super(),De(this,e,Jw,Gw,Te,{content:1,language:2})}}const Xw=n=>({}),xf=n=>({}),Qw=n=>({}),ec=n=>({});function tc(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$,S=n[4]&&!n[2]&&nc(n);const M=n[18].header,C=$n(M,n,n[17],ec);let D=n[4]&&n[2]&&ic(n);const O=n[18].default,E=$n(O,n,n[17],null),F=n[18].footer,L=$n(F,n,n[17],xf);return{c(){e=_("div"),t=_("div"),s=T(),l=_("div"),o=_("div"),S&&S.c(),r=T(),C&&C.c(),a=T(),D&&D.c(),u=T(),f=_("div"),E&&E.c(),c=T(),d=_("div"),L&&L.c(),h(t,"class","overlay"),h(o,"class","overlay-panel-section panel-header"),h(f,"class","overlay-panel-section panel-content"),h(d,"class","overlay-panel-section panel-footer"),h(l,"class",p="overlay-panel "+n[1]+" "+n[8]),se(l,"popup",n[2]),h(e,"class","overlay-panel-container"),se(e,"padded",n[2]),se(e,"active",n[0])},m(R,H){w(R,e,H),m(e,t),m(e,s),m(e,l),m(l,o),S&&S.m(o,null),m(o,r),C&&C.m(o,null),m(o,a),D&&D.m(o,null),m(l,u),m(l,f),E&&E.m(f,null),n[20](f),m(l,c),m(l,d),L&&L.m(d,null),b=!0,y||($=[Q(t,"click",Wt(n[19])),Q(f,"scroll",n[21])],y=!0)},p(R,H){n=R,n[4]&&!n[2]?S?S.p(n,H):(S=nc(n),S.c(),S.m(o,r)):S&&(S.d(1),S=null),C&&C.p&&(!b||H&131072)&&Mn(C,M,n,n[17],b?Cn(M,n[17],H,Qw):Tn(n[17]),ec),n[4]&&n[2]?D?D.p(n,H):(D=ic(n),D.c(),D.m(o,null)):D&&(D.d(1),D=null),E&&E.p&&(!b||H&131072)&&Mn(E,O,n,n[17],b?Cn(O,n[17],H,null):Tn(n[17]),null),L&&L.p&&(!b||H&131072)&&Mn(L,F,n,n[17],b?Cn(F,n[17],H,Xw):Tn(n[17]),xf),(!b||H&258&&p!==(p="overlay-panel "+n[1]+" "+n[8]))&&h(l,"class",p),H&262&&se(l,"popup",n[2]),H&4&&se(e,"padded",n[2]),H&1&&se(e,"active",n[0])},i(R){b||(Ot(()=>{i||(i=lt(t,go,{duration:cs,opacity:0},!0)),i.run(1)}),A(C,R),A(E,R),A(L,R),Ot(()=>{v&&v.end(1),g=Dp(l,Nn,n[2]?{duration:cs,y:-10}:{duration:cs,x:50}),g.start()}),b=!0)},o(R){i||(i=lt(t,go,{dur Line truncated
This field is disabled if "Only domains" is set.`,position:"top"})),d=!0)},p(b,y){(!c||y&16&&l!==(l=b[4]))&&h(e,"for",l);const $={};y&16&&($.id=b[4]),y&1&&($.disabled=!G.isEmpty(b[0].onlyDomains)),!a&&y&1&&(a=!0,$.value=b[0].exceptDomains,Ie(()=>a=!1)),r.$set($)},i(b){c||(A(r.$$.fragment,b),c=!0)},o(b){P(r.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(o),z(r,b),b&&k(u),b&&k(f),d=!1,p()}}}function sS(n){let e,t,i,s,l,o,r,a,u,f,c,d,p;function g(b){n[3](b)}let v={id:n[4]+".options.onlyDomains",disabled:!G.isEmpty(n[0].exceptDomains)};return n[0].onlyDomains!==void 0&&(v.value=n[0].onlyDomains),r=new ls({props:v}),me.push(()=>Le(r,"value",g)),{c(){e=_("label"),t=_("span"),t.textContent="Only domains",i=T(),s=_("i"),o=T(),B(r.$$.fragment),u=T(),f=_("div"),f.textContent="Use comma as separator.",h(t,"class","txt"),h(s,"class","ri-information-line link-hint"),h(e,"for",l=n[4]+".options.onlyDomains"),h(f,"class","help-block")},m(b,y){w(b,e,y),m(e,t),m(e,i),m(e,s),w(b,o,y),V(r,b,y),w(b,u,y),w(b,f,y),c=!0,d||(p=Ye(wt.call(null,s,{text:`List of domains that are ONLY allowed.
This field is disabled if "Except domains" is set.`,position:"top"})),d=!0)},p(b,y){(!c||y&16&&l!==(l=b[4]+".options.onlyDomains"))&&h(e,"for",l);const $={};y&16&&($.id=b[4]+".options.onlyDomains"),y&1&&($.disabled=!G.isEmpty(b[0].exceptDomains)),!a&&y&1&&(a=!0,$.value=b[0].onlyDomains,Ie(()=>a=!1)),r.$set($)},i(b){c||(A(r.$$.fragment,b),c=!0)},o(b){P(r.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(o),z(r,b),b&&k(u),b&&k(f),d=!1,p()}}}function lS(n){let e,t,i,s,l,o,r;return i=new Pe({props:{class:"form-field",name:"schema."+n[1]+".options.exceptDomains",$$slots:{default:[iS,({uniqueId:a})=>({4:a}),({uniqueId:a})=>a?16:0]},$$scope:{ctx:n}}}),o=new Pe({props:{class:"form-field",name:"schema."+n[1]+".options.onlyDomains",$$slots:{default:[sS,({uniqueId:a})=>({4:a}),({uniqueId:a})=>a?16:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=T(),l=_("div"),B(o.$$.fragment),h(t,"class","col-sm-6"),h(l,"class","col-sm-6"),h(e,"class","grid")},m(a,u){w(a,e,u),m(e,t),V(i,t,null),m(e,s),m(e,l),V(o,l,null),r=!0},p(a,[u]){const f={};u&2&&(f.name="schema."+a[1]+".options.exceptDomains"),u&49&&(f.$$scope={dirty:u,ctx:a}),i.$set(f);const c={};u&2&&(c.name="schema."+a[1]+".options.onlyDomains"),u&49&&(c.$$scope={dirty:u,ctx:a}),o.$set(c)},i(a){r||(A(i.$$.fragment,a),A(o.$$.fragment,a),r=!0)},o(a){P(i.$$.fragment,a),P(o.$$.fragment,a),r=!1},d(a){a&&k(e),z(i),z(o)}}}function oS(n,e,t){let{key:i=""}=e,{options:s={}}=e;function l(r){n.$$.not_equal(s.exceptDomains,r)&&(s.exceptDomains=r,t(0,s))}function o(r){n.$$.not_equal(s.onlyDomains,r)&&(s.onlyDomains=r,t(0,s))}return n.$$set=r=>{"key"in r&&t(1,i=r.key),"options"in r&&t(0,s=r.options)},[s,i,l,o]}class zg extends Oe{constructor(e){super(),De(this,e,oS,lS,Te,{key:1,options:0})}}function rS(n){let e,t,i,s;function l(a){n[2](a)}function o(a){n[3](a)}let r={};return n[0]!==void 0&&(r.key=n[0]),n[1]!==void 0&&(r.options=n[1]),e=new zg({props:r}),me.push(()=>Le(e,"key",l)),me.push(()=>Le(e,"options",o)),{c(){B(e.$$.fragment)},m(a,u){V(e,a,u),s=!0},p(a,[u]){const f={};!t&&u&1&&(t=!0,f.key=a[0],Ie(()=>t=!1)),!i&&u&2&&(i=!0,f.options=a[1],Ie(()=>i=!1)),e.$set(f)},i(a){s||(A(e.$$.fragment,a),s=!0)},o(a){P(e.$$.fragment,a),s=!1},d(a){z(e,a)}}}function aS(n,e,t){let{key:i=""}=e,{options:s={}}=e;function l(r){i=r,t(0,i)}function o(r){s=r,t(1,s)}return n.$$set=r=>{"key"in r&&t(0,i=r.key),"options"in r&&t(1,s=r.options)},[i,s,l,o]}class uS extends Oe{constructor(e){super(),De(this,e,aS,rS,Te,{key:0,options:1})}}var br=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],ms={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:typeof window=="object"&&window.navigator.userAgent.indexOf("MSIE")===-1,ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:function(n){return typeof console<"u"&&console.warn(n)},getWeek:function(n){var e=new Date(n.getTime());e.setHours(0,0,0,0),e.setDate(e.getDate()+3-(e.getDay()+6)%7);var t=new Date(e.getFullYear(),0,4);return 1+Math.round(((e.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},cl={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(n){var e=n%100;if(e>3&&e<21)return"th";switch(e%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to togg Line truncated
<span class='flatpickr-weekday'>
`+j.join("</span><span class='flatpickr-weekday'>")+`
</span>
`}}function ue(){t.calendarContainer.classList.add("hasWeeks");var I=yt("div","flatpickr-weekwrapper");I.appendChild(yt("span","flatpickr-weekday",t.l10n.weekAbbreviation));var j=yt("div","flatpickr-weeks");return I.appendChild(j),{weekWrapper:I,weekNumbers:j}}function Me(I,j){j===void 0&&(j=!0);var ee=j?I:I-t.currentMonth;ee<0&&t._hidePrevMonthArrow===!0||ee>0&&t._hideNextMonthArrow===!0||(t.currentMonth+=ee,(t.currentMonth<0||t.currentMonth>11)&&(t.currentYear+=t.currentMonth>11?1:-1,t.currentMonth=(t.currentMonth+12)%12,We("onYearChange"),te()),H(),We("onMonthChange"),Mt())}function oe(I,j){if(I===void 0&&(I=!0),j===void 0&&(j=!0),t.input.value="",t.altInput!==void 0&&(t.altInput.value=""),t.mobileInput!==void 0&&(t.mobileInput.value=""),t.selectedDates=[],t.latestSelectedDateObj=void 0,j===!0&&(t.currentYear=t._initialDate.getFullYear(),t.currentMonth=t._initialDate.getMonth()),t.config.enableTime===!0){var ee=wr(t.config),U=ee.hours,ae=ee.minutes,$e=ee.seconds;p(U,ae,$e)}t.redraw(),I&&We("onChange")}function he(){t.isOpen=!1,t.isMobile||(t.calendarContainer!==void 0&&t.calendarContainer.classList.remove("open"),t._input!==void 0&&t._input.classList.remove("active")),We("onClose")}function be(){t.config!==void 0&&We("onDestroy");for(var I=t._handlers.length;I--;)t._handlers[I].remove();if(t._handlers=[],t.mobileInput)t.mobileInput.parentNode&&t.mobileInput.parentNode.removeChild(t.mobileInput),t.mobileInput=void 0;else if(t.calendarContainer&&t.calendarContainer.parentNode)if(t.config.static&&t.calendarContainer.parentNode){var j=t.calendarContainer.parentNode;if(j.lastChild&&j.removeChild(j.lastChild),j.parentNode){for(;j.firstChild;)j.parentNode.insertBefore(j.firstChild,j);j.parentNode.removeChild(j)}}else t.calendarContainer.parentNode.removeChild(t.calendarContainer);t.altInput&&(t.input.type="text",t.altInput.parentNode&&t.altInput.parentNode.removeChild(t.altInput),delete t.altInput),t.input&&(t.input.type=t.input._type,t.input.classList.remove("flatpickr-input"),t.input.removeAttribute("readonly")),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(ee){try{delete t[ee]}catch{}})}function K(I){return t.calendarContainer.contains(I)}function Se(I){if(t.isOpen&&!t.config.inline){var j=vn(I),ee=K(j),U=j===t.input||j===t.altInput||t.element.contains(j)||I.path&&I.path.indexOf&&(~I.path.indexOf(t.input)||~I.path.indexOf(t.altInput)),ae=!U&&!ee&&!K(I.relatedTarget),$e=!t.config.ignoredFocusElements.some(function(Ke){return Ke.contains(j)});ae&&$e&&(t.config.allowInput&&t.setDate(t._input.value,!1,t.config.altInput?t.config.altFormat:t.config.dateFormat),t.timeContainer!==void 0&&t.minuteElement!==void 0&&t.hourElement!==void 0&&t.input.value!==""&&t.input.value!==void 0&&a(),t.close(),t.config&&t.config.mode==="range"&&t.selectedDates.length===1&&t.clear(!1))}}function x(I){if(!(!I||t.config.minDate&&I<t.config.minDate.getFullYear()||t.config.maxDate&&I>t.config.maxDate.getFullYear())){var j=I,ee=t.currentYear!==j;t.currentYear=j||t.currentYear,t.config.maxDate&&t.currentYear===t.config.maxDate.getFullYear()?t.currentMonth=Math.min(t.config.maxDate.getMonth(),t.currentMonth):t.config.minDate&&t.currentYear===t.config.minDate.getFullYear()&&(t.currentMonth=Math.max(t.config.minDate.getMonth(),t.currentMonth)),ee&&(t.redraw(),We("onYearChange"),te())}}function J(I,j){var ee;j===void 0&&(j=!0);var U=t.parseDate(I,void 0,j);if(t.config.minDate&&U&&yn(U,t.config.minDate,j!==void 0?j:!t.minDateHasTime)<0||t.config.maxDate&&U&&yn(U,t.config.maxDate,j!==void 0?j:!t.maxDateHasTime)>0)return!1;if(!t.config.enable&&t.config.disable.length===0)return!0;if(U===void 0)return!1;for(var ae=!!t.config.enable,$e=(ee=t.config.enable)!==null&&ee!==void 0?ee:t.config.disable,Ke=0,je=void 0;Ke<$e.length;Ke++){if(je=$e[Ke],typeof je=="function"&&je(U))return ae;if(je instanceof Date&&U!==void 0&&je.getTime()===U.getTime())return ae;if(typeof je=="string"){var ce=t.parseDate(je,void 0,!0);return ce&&ce.getTime()===U.getTime()?ae:!ae}else if(typeof je=="object"&&U!==void 0&&je.from&&je.to&&U.getTime()>=je.from.getTime()&&U.getTime()<=je.to.getTime())return ae}return!ae}function ve(I){return t.daysContainer!==void 0?I.className.indexOf("hidden")===-1&&I.className.indexOf("flatpickr-disabled")===-1&&t.daysContainer.contains(I):!1}function Re(I){var j=I.target===t._input,ee=t._input.value.trimEnd()!==Ft();j&&ee&&!(I.relatedTarget&&K(I.relatedTarget))&&t.setDate(t._input.value,!0,I.target===t.altInput?t.config.altFormat:t.config.dateFormat)}function Ve(I){var j= Line truncated
`),d=_("span"),p=_("span"),p.textContent="Choose presets",g=T(),B(v.$$.fragment),h(t,"class","txt"),h(s,"class","ri-information-line link-hint"),h(e,"for",l=n[10]),h(p,"class","txt link-primary"),h(d,"class","inline-flex"),h(f,"class","help-block")},m(C,D){w(C,e,D),m(e,t),m(e,i),m(e,s),w(C,o,D),V(r,C,D),w(C,u,D),w(C,f,D),m(f,c),m(f,d),m(d,p),m(d,g),V(v,d,null),b=!0,y||($=Ye(wt.call(null,s,{text:`Allow files ONLY with the listed mime types.
Leave empty for no restriction.`,position:"top"})),y=!0)},p(C,D){(!b||D&1024&&l!==(l=C[10]))&&h(e,"for",l);const O={};D&1024&&(O.id=C[10]),!a&&D&1&&(a=!0,O.value=C[0].mimeTypes,Ie(()=>a=!1)),r.$set(O);const E={};D&2049&&(E.$$scope={dirty:D,ctx:C}),v.$set(E)},i(C){b||(A(r.$$.fragment,C),A(v.$$.fragment,C),b=!0)},o(C){P(r.$$.fragment,C),P(v.$$.fragment,C),b=!1},d(C){C&&k(e),C&&k(o),z(r,C),C&&k(u),C&&k(f),z(v),y=!1,$()}}}function RS(n){let e,t,i,s,l,o,r,a,u,f,c,d,p;function g(b){n[9](b)}let v={id:n[10],placeholder:"eg. 50x50, 480x720"};return n[0].thumbs!==void 0&&(v.value=n[0].thumbs),r=new ls({props:v}),me.push(()=>Le(r,"value",g)),{c(){e=_("label"),t=_("span"),t.textContent="Thumb sizes",i=T(),s=_("i"),o=T(),B(r.$$.fragment),u=T(),f=_("div"),f.textContent="Use comma as separator.",h(t,"class","txt"),h(s,"class","ri-information-line link-hint"),h(e,"for",l=n[10]),h(f,"class","help-block")},m(b,y){w(b,e,y),m(e,t),m(e,i),m(e,s),w(b,o,y),V(r,b,y),w(b,u,y),w(b,f,y),c=!0,d||(p=Ye(wt.call(null,s,{text:"List of thumb sizes for image files. The thumbs will be generated lazily on first access.",position:"top"})),d=!0)},p(b,y){(!c||y&1024&&l!==(l=b[10]))&&h(e,"for",l);const $={};y&1024&&($.id=b[10]),!a&&y&1&&(a=!0,$.value=b[0].thumbs,Ie(()=>a=!1)),r.$set($)},i(b){c||(A(r.$$.fragment,b),c=!0)},o(b){P(r.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(o),z(r,b),b&&k(u),b&&k(f),d=!1,p()}}}function NS(n){let e,t,i,s,l,o,r,a,u,f,c,d,p;return i=new Pe({props:{class:"form-field required",name:"schema."+n[1]+".options.maxSize",$$slots:{default:[PS,({uniqueId:g})=>({10:g}),({uniqueId:g})=>g?1024:0]},$$scope:{ctx:n}}}),o=new Pe({props:{class:"form-field required",name:"schema."+n[1]+".options.maxSelect",$$slots:{default:[LS,({uniqueId:g})=>({10:g}),({uniqueId:g})=>g?1024:0]},$$scope:{ctx:n}}}),u=new Pe({props:{class:"form-field",name:"schema."+n[1]+".options.mimeTypes",$$slots:{default:[IS,({uniqueId:g})=>({10:g}),({uniqueId:g})=>g?1024:0]},$$scope:{ctx:n}}}),d=new Pe({props:{class:"form-field",name:"schema."+n[1]+".options.thumbs",$$slots:{default:[RS,({uniqueId:g})=>({10:g}),({uniqueId:g})=>g?1024:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=T(),l=_("div"),B(o.$$.fragment),r=T(),a=_("div"),B(u.$$.fragment),f=T(),c=_("div"),B(d.$$.fragment),h(t,"class","col-sm-6"),h(l,"class","col-sm-6"),h(a,"class","col-sm-12"),h(c,"class","col-sm-12"),h(e,"class","grid")},m(g,v){w(g,e,v),m(e,t),V(i,t,null),m(e,s),m(e,l),V(o,l,null),m(e,r),m(e,a),V(u,a,null),m(e,f),m(e,c),V(d,c,null),p=!0},p(g,[v]){const b={};v&2&&(b.name="schema."+g[1]+".options.maxSize"),v&3073&&(b.$$scope={dirty:v,ctx:g}),i.$set(b);const y={};v&2&&(y.name="schema."+g[1]+".options.maxSelect"),v&3073&&(y.$$scope={dirty:v,ctx:g}),o.$set(y);const $={};v&2&&($.name="schema."+g[1]+".options.mimeTypes"),v&3073&&($.$$scope={dirty:v,ctx:g}),u.$set($);const S={};v&2&&(S.name="schema."+g[1]+".options.thumbs"),v&3073&&(S.$$scope={dirty:v,ctx:g}),d.$set(S)},i(g){p||(A(i.$$.fragment,g),A(o.$$.fragment,g),A(u.$$.fragment,g),A(d.$$.fragment,g),p=!0)},o(g){P(i.$$.fragment,g),P(o.$$.fragment,g),P(u.$$.fragment,g),P(d.$$.fragment,g),p=!1},d(g){g&&k(e),z(i),z(o),z(u),z(d)}}}function HS(n,e,t){let{key:i=""}=e,{options:s={}}=e;function l(){s.maxSize=Pt(this.value),t(0,s)}function o(){s.maxSelect=Pt(this.value),t(0,s)}function r(p){n.$$.not_equal(s.mimeTypes,p)&&(s.mimeTypes=p,t(0,s))}const a=()=>{t(0,s.mimeTypes=["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],s)},u=()=>{t(0,s.mimeTypes=["image/jpg","image/jpeg","image/png","image/svg+xml","image/gif"],s)},f=()=>{t(0,s.mimeTypes=["video/mp4","video/x-ms-wmv","video/quicktime","video/3gpp"],s)},c=()=>{t(0,s.mimeTypes=["application/zip","application/x-7z-compressed","application/x-rar-compressed"],s)};function d(p){n.$$.not_equal(s.thumbs,p)&&(s.thumbs=p,t(0,s))}return n.$$set=p=>{"key"in p&&t(1,i=p.key),"options"in p&&t(0,s=p.options)},n.$$.update=()=>{n.$$.dirty&1&&G.isEmpty(s)&&t(0,s={maxSelect:1,maxSize:5242880,thumbs:[],mimeTypes:[]})},[s,i,l,o,r,a,u,f,c,d]}class jS extends Oe{constructor(e){super(),De(this,e,HS,NS,Te,{key:1,options:0})}}function qS(n){let e,t,i,s,l,o,r;function a(f){n[5](f)}let u={searchable:n[3].length>5,selectPlaceholder:n[2]?"Loading...":"Select collection",noOptionsText:"No collections found",selectionKey:"id",items:n[3]};return n[0].collectionId!==void 0&&(u.keyOfSelected=n[0].collectionId),l=new ss({props:u}),me.push(()=>Le(l,"keyOfSelected",a)),{c(){e=_("label"),t=N("Collection"),s=T(),B(l.$$.fragment),h(e,"for",i=n[9])},m(f,c){w(f,e,c),m(e,t),w(f,s,c),V(l,f,c),r=!0},p(f,c){(!r||c&512&&i!==(i=f[9]))&&h(e,"for",i);const d={};c&8&&(d.searchable=f[3].length>5),c&4&&(d.selectPlaceholder=f[2]?"Loading...":"Select collection"),c&8&&(d.items=f[3]),!o&&c&1&&(o=!0,d.keyOfSelected=f[0].collectionId,Ie(()=>o=!1)),l.$set(d)},i(f){r||(A(l.$$.fragment,f),r= Line truncated
form-field
required
`+(n[5]?"":"invalid")+`
`+(n[0].id&&n[0].system?"disabled":"")+`
`,name:"schema."+n[1]+".name",$$slots:{default:[QS,({uniqueId:H})=>({38:H}),({uniqueId:H})=>[0,H?128:0]]},$$scope:{ctx:n}}});const O=[u$,a$,r$,o$,l$,s$,i$,n$,t$,e$,xS],E=[];function F(H,te){return H[0].type==="text"?0:H[0].type==="number"?1:H[0].type==="bool"?2:H[0].type==="email"?3:H[0].type==="url"?4:H[0].type==="date"?5:H[0].type==="select"?6:H[0].type==="json"?7:H[0].type==="file"?8:H[0].type==="relation"?9:H[0].type==="user"?10:-1}~(f=F(n))&&(c=E[f]=O[f](n)),g=new Pe({props:{class:"form-field form-field-toggle m-0",name:"requried",$$slots:{default:[f$,({uniqueId:H})=>({38:H}),({uniqueId:H})=>[0,H?128:0]]},$$scope:{ctx:n}}});let L=n[0].type!=="file"&&Ec(n),R=!n[0].toDelete&&Ac(n);return{c(){e=_("form"),t=_("div"),i=_("div"),B(s.$$.fragment),l=T(),o=_("div"),B(r.$$.fragment),a=T(),u=_("div"),c&&c.c(),d=T(),p=_("div"),B(g.$$.fragment),v=T(),b=_("div"),L&&L.c(),y=T(),R&&R.c(),$=T(),S=_("input"),h(i,"class","col-sm-6"),h(o,"class","col-sm-6"),h(u,"class","col-sm-12 hidden-empty"),h(p,"class","col-sm-4 flex"),h(b,"class","col-sm-4 flex"),h(t,"class","grid"),h(S,"type","submit"),h(S,"class","hidden"),h(S,"tabindex","-1"),h(e,"class","field-form")},m(H,te){w(H,e,te),m(e,t),m(t,i),V(s,i,null),m(t,l),m(t,o),V(r,o,null),m(t,a),m(t,u),~f&&E[f].m(u,null),m(t,d),m(t,p),V(g,p,null),m(t,v),m(t,b),L&&L.m(b,null),m(t,y),R&&R.m(t,null),m(e,$),m(e,S),M=!0,C||(D=Q(e,"submit",Wt(n[31])),C=!0)},p(H,te){const le={};te[0]&1&&(le.class="form-field required "+(H[0].id?"disabled":"")),te[0]&2&&(le.name="schema."+H[1]+".type"),te[0]&1|te[1]&384&&(le.$$scope={dirty:te,ctx:H}),s.$set(le);const q={};te[0]&33&&(q.class=`
form-field
required
`+(H[5]?"":"invalid")+`
`+(H[0].id&&H[0].system?"disabled":"")+`
`),te[0]&2&&(q.name="schema."+H[1]+".name"),te[0]&33|te[1]&384&&(q.$$scope={dirty:te,ctx:H}),r.$set(q);let Y=f;f=F(H),f===Y?~f&&E[f].p(H,te):(c&&(Ee(),P(E[Y],1,1,()=>{E[Y]=null}),Ae()),~f?(c=E[f],c?c.p(H,te):(c=E[f]=O[f](H),c.c()),A(c,1),c.m(u,null)):c=null);const W={};te[0]&1|te[1]&384&&(W.$$scope={dirty:te,ctx:H}),g.$set(W),H[0].type!=="file"?L?(L.p(H,te),te[0]&1&&A(L,1)):(L=Ec(H),L.c(),A(L,1),L.m(b,null)):L&&(Ee(),P(L,1,1,()=>{L=null}),Ae()),H[0].toDelete?R&&(Ee(),P(R,1,1,()=>{R=null}),Ae()):R?(R.p(H,te),te[0]&1&&A(R,1)):(R=Ac(H),R.c(),A(R,1),R.m(t,null))},i(H){M||(A(s.$$.fragment,H),A(r.$$.fragment,H),A(c),A(g.$$.fragment,H),A(L),A(R),M=!0)},o(H){P(s.$$.fragment,H),P(r.$$.fragment,H),P(c),P(g.$$.fragment,H),P(L),P(R),M=!1},d(H){H&&k(e),z(s),z(r),~f&&E[f].d(),z(g),L&&L.d(),R&&R.d(),C=!1,D()}}}function Lc(n){let e,t,i,s,l=n[0].system&&Fc(),o=!n[0].id&&Ic(n),r=n[0].required&&Rc(),a=n[0].unique&&Nc();return{c(){e=_("div"),l&&l.c(),t=T(),o&&o.c(),i=T(),r&&r.c(),s=T(),a&&a.c(),h(e,"class","inline-flex")},m(u,f){w(u,e,f),l&&l.m(e,null),m(e,t),o&&o.m(e,null),m(e,i),r&&r.m(e,null),m(e,s),a&&a.m(e,null)},p(u,f){u[0].system?l||(l=Fc(),l.c(),l.m(e,t)):l&&(l.d(1),l=null),u[0].id?o&&(o.d(1),o=null):o?o.p(u,f):(o=Ic(u),o.c(),o.m(e,i)),u[0].required?r||(r=Rc(),r.c(),r.m(e,s)):r&&(r.d(1),r=null),u[0].unique?a||(a=Nc(),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},d(u){u&&k(e),l&&l.d(),o&&o.d(),r&&r.d(),a&&a.d()}}}function Fc(n){let e;return{c(){e=_("span"),e.textContent="System",h(e,"class","label label-danger")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Ic(n){let e;return{c(){e=_("span"),e.textContent="New",h(e,"class","label"),se(e,"label-warning",n[8]&&!n[0].toDelete)},m(t,i){w(t,e,i)},p(t,i){i[0]&257&&se(e,"label-warning",t[8]&&!t[0].toDelete)},d(t){t&&k(e)}}}function Rc(n){let e;return{c(){e=_("span"),e.textContent="Required",h(e,"class","label label-success")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Nc(n){let e;return{c(){e=_("span"),e.textContent="Unique",h(e,"class","label label-success")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Hc(n){let e,t,i,s,l;return{c(){e=_("i"),h(e,"class","ri-error-warning-fill txt-danger")},m(o,r){w(o,e,r),i=!0,s||(l=Ye(wt.call(null,e,{text:"Has errors",position:"left"})),s=!0)},i(o){i||(Ot(()=>{t||(t=lt(e,Hn,{duration:150,start:.7},!0)),t.run(1)}),i=!0)},o(o){t||(t=lt(e,Hn,{duration:150,start:.7},!1)),t.run(0),i=!1},d(o){o&&k(e),o&&t&&t.end(),s=!1,l()}}}function jc(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Restore</span>',h(e,"type","button"),h(e,"class","btn btn-sm btn-danger btn-secondary")},m(s,l){w(s,e,l),t||(i=Q(e,"click",Gn(n[15])),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function p$(n){let e,t,i,s,l,o,r=(n[0].name||"-")+"",a,u,f,c,d,p,g,v,b,y=!n[0].toDelete&&Lc(n),$=n[7]&&!n[0].system&&Hc(),S=n[0].toDelete&&jc(n);return{c(){e=_("div"),t=_("span"),i=_("i"),l=T(),o=_("strong"),a=N(r),f=T(),y&&y.c(),c=T(),d=_("div"),p=T(),$&&$.c(),g=T(),S&&S.c(),v=st(),h(i,"class",s=Wa(G.getFieldTypeIcon(n[0].type))+" svelte-1tpxlm5"),h(t,"class","icon field-type"),h(o,"class","title field-name svelte-1tpxlm5"),h(o,"title",u=n[0].name),se(o,"txt-strikethrough",n[0].toDelete),h(e,"class","inline-flex"),h(d,"class","flex-fill")},m(M,C){w(M,e,C),m(e,t),m(t,i),m(e,l),m(e,o),m(o,a),w(M,f,C),y&&y.m(M,C),w(M,c,C),w(M,d,C),w(M,p,C),$&&$.m(M,C),w(M,g,C),S&&S.m(M,C),w(M,v,C),b=!0},p(M,C){(!b||C[0]&1&&s!==(s=Wa(G.getFieldTypeIcon(M[0].type))+" svelte-1tpxlm5"))&&h(i,"class",s),(!b||C[0]&1)&&r!==(r=(M[0].name||"-")+"")&&ge(a,r),(!b||C[0]&1&&u!==(u=M[0].name))&&h(o,"title",u),C[0]&1&&se(o,"txt-strikethrough",M[0].toDelete),M[0].toDelete?y&&(y.d(1),y=null):y?y.p(M,C):(y=Lc(M),y.c(),y.m(c.parentNode,c)),M[7]&&!M[0].system?$?C[0]&129&&A($,1):($=Hc(),$.c(),A($,1),$.m(g.parentNode,g)):$&&(Ee(),P($,1,1,()=>{$=null}),Ae()),M[0].toDelete?S?S.p(M,C):(S=jc(M),S.c(),S.m(v.parentNode,v)):S&&(S.d(1),S=null)},i(M){b||(A($),b=!0)},o(M){P($),b=!1},d(M){M&&k(e),M&&k(f),y&&y.d(M),M&&k(c),M&&k(d),M&&k(p),$&&$.d(M),M&&k(g),S&&S.d(M),M&&k(v)}}}function m$(n){let e,t,i={single:!0,interactive:n[8],class:n[2]||n[0].toDelete||n[0].system?"field-accordion disabled":"field-accordion",$$slots:{header:[p$],default:[h$]},$$scope:{ctx:n}};return e=new qa({props:i}),n[32](e),e.$on("expand",n[33]),e.$on("collapse",n[34]),e.$on("toggle",n[35]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,l){const o={};l[0]&256&&(o.interactive=s[8]),l[0]&5&&(o.class=s[2]||s[0].toDelete||s[0].system?"field-accordion disabled":"field-accordion"),l[0]&483|l[1]&256&&(o.$$scope={dirty:l,ctx:s}),e.$set(o)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){P(e.$$.fragment,s),t=!1},d(s){n[32](null),z(e,s)}}}function g$(n,e,t){let i,s,l,o,r;kt(n,ns,K=>t(14,r=K));const a=rn();let{key:u="0"}=e,{field:f=new bn}=e,{disabled:c=!1}=e,{excludeNames:d=[]}=e,p,g=f.type;function v(){p==null||p.expand()}function b(){p==null||p.collapse()}function y(){f.id?t(0,f.toDelete=!0,f):(b(),a("remove"))}function $(K){if(K=(""+K).toLowerCase(),!K)return!1;for(co Line truncated
<code>@request.query.*</code>
<code>@request.data.*</code>
<code>@request.user.*</code>`,S=T(),M=_("hr"),C=T(),D=_("p"),D.innerHTML="You could also add constraints and query other collections using the <em>@collection</em> filter:",O=T(),E=_("div"),E.innerHTML="<code>@collection.ANY_COLLECTION_NAME.*</code>",F=T(),L=_("hr"),R=T(),H=_("p"),H.innerHTML=`Example rule:
<br/>
<code>@request.user.id!=&quot;&quot; &amp;&amp; created&gt;&quot;2022-01-01 00:00:00&quot;</code>`,h(s,"class","m-b-0"),h(o,"class","inline-flex flex-gap-5"),h(g,"class","m-t-10 m-b-5"),h(b,"class","m-b-0"),h($,"class","inline-flex flex-gap-5"),h(M,"class","m-t-10 m-b-5"),h(D,"class","m-b-0"),h(E,"class","inline-flex flex-gap-5"),h(L,"class","m-t-10 m-b-5"),h(i,"class","content"),h(t,"class","alert alert-warning m-0")},m(W,X){w(W,e,X),m(e,t),m(t,i),m(i,s),m(i,l),m(i,o),m(o,r),m(o,a),m(o,u),m(o,f),m(o,c),m(o,d);for(let ne=0;ne<Y.length;ne+=1)Y[ne].m(o,null);m(i,p),m(i,g),m(i,v),m(i,b),m(i,y),m(i,$),m(i,S),m(i,M),m(i,C),m(i,D),m(i,O),m(i,E),m(i,F),m(i,L),m(i,R),m(i,H),le=!0},p(W,X){if(X&1){q=W[0].schema;let ne;for(ne=0;ne<q.length;ne+=1){const ue=Bc(W,q,ne);Y[ne]?Y[ne].p(ue,X):(Y[ne]=Wc(ue),Y[ne].c(),Y[ne].m(o,null))}for(;ne<Y.length;ne+=1)Y[ne].d(1);Y.length=q.length}},i(W){le||(W&&Ot(()=>{te||(te=lt(e,xt,{duration:150},!0)),te.run(1)}),le=!0)},o(W){W&&(te||(te=lt(e,xt,{duration:150},!1)),te.run(0)),le=!1},d(W){W&&k(e),Zn(Y,W),W&&te&&te.end()}}}function k$(n){let e,t=n[19].name+"",i;return{c(){e=_("code"),i=N(t)},m(s,l){w(s,e,l),m(e,i)},p(s,l){l&1&&t!==(t=s[19].name+"")&&ge(i,t)},d(s){s&&k(e)}}}function w$(n){let e,t=n[19].name+"",i,s;return{c(){e=_("code"),i=N(t),s=N(".*")},m(l,o){w(l,e,o),m(e,i),m(e,s)},p(l,o){o&1&&t!==(t=l[19].name+"")&&ge(i,t)},d(l){l&&k(e)}}}function Wc(n){let e;function t(l,o){return l[19].type==="relation"||l[19].type==="user"?w$:k$}let i=t(n),s=i(n);return{c(){s.c(),e=st()},m(l,o){s.m(l,o),w(l,e,o)},p(l,o){i===(i=t(l))&&s?s.p(l,o):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},d(l){s.d(l),l&&k(e)}}}function S$(n){let e=[],t=new Map,i,s,l=Object.entries(n[6]);const o=r=>r[14];for(let r=0;r<l.length;r+=1){let a=zc(n,l,r),u=o(a);t.set(u,e[r]=Yc(u,a))}return{c(){for(let r=0;r<e.length;r+=1)e[r].c();i=st()},m(r,a){for(let u=0;u<e.length;u+=1)e[u].m(r,a);w(r,i,a),s=!0},p(r,a){a&262235&&(l=Object.entries(r[6]),Ee(),e=St(e,a,o,1,r,l,t,i.parentNode,Gt,Yc,i,zc),Ae())},i(r){if(!s){for(let a=0;a<l.length;a+=1)A(e[a]);s=!0}},o(r){for(let a=0;a<e.length;a+=1)P(e[a]);s=!1},d(r){for(let a=0;a<e.length;a+=1)e[a].d(r);r&&k(i)}}}function $$(n){let e;return{c(){e=_("div"),e.innerHTML='<span class="loader"></span>',h(e,"class","txt-center")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function C$(n){let e,t,i;function s(){return n[9](n[14])}return{c(){e=_("button"),e.innerHTML='<i class="ri-lock-line"></i>',h(e,"type","button"),h(e,"class","rule-toggle-btn btn btn-circle btn-outline svelte-fjxz7k")},m(l,o){w(l,e,o),t||(i=[Ye(wt.call(null,e,"Lock and set to Admins only")),Q(e,"click",s)],t=!0)},p(l,o){n=l},d(l){l&&k(e),t=!1,Qe(i)}}}function M$(n){let e,t,i;function s(){return n[8](n[14])}return{c(){e=_("button"),e.innerHTML='<i class="ri-lock-unlock-line"></i>',h(e,"type","button"),h(e,"class","rule-toggle-btn btn btn-circle btn-outline btn-success svelte-fjxz7k")},m(l,o){w(l,e,o),t||(i=[Ye(wt.call(null,e,"Unlock and set custom rule")),Q(e,"click",s)],t=!0)},p(l,o){n=l},d(l){l&&k(e),t=!1,Qe(i)}}}function T$(n){let e;return{c(){e=N("Leave empty to grant everyone access")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function D$(n){let e;return{c(){e=N("Only admins will be able to access (unlock to change)")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function O$(n){let e,t=n[15]+"",i,s,l=Ti(n[0][n[14]])?"Admins only":"Custom rule",o,r,a,u,f=n[14],c,d,p,g,v,b,y;function $(){return n[10](n[14])}const S=()=>n[11](u,f),M=()=>n[11](null,f);function C(R){n[12](R,n[14])}var D=n[4];function O(R){let H={baseCollection:R[0],disabled:Ti(R[0][R[14]])};return R[0][R[14]]!==void 0&&(H.value=R[0][R[14]]),{props:H}}D&&(u=new D(O(n)),S(),me.push(()=>Le(u,"value",C)));function E(R,H){return H&1&&(g=null),g==null&&(g=!!Ti(R[0][R[14]])),g?D$:T$}let F=E(n,-1),L=F(n);return{c(){e=_("label"),i=N(t),s=N(" - "),o=N(l),a=T(),u&&B(u.$$.fragment),d=T(),p=_("div"),L.c(),h(e,"for",r=n[18]),h(p,"class","help-block")},m(R,H){w(R,e,H),m(e,i),m(e,s),m(e,o),w(R,a,H),u&&V(u,R,H),w(R,d,H),w(R,p,H),L.m(p,null),v=!0,b||(y=Q(e,"click",$),b=!0)},p(R,H){n=R,(!v||H&1)&&l!==(l=Ti(n[0][n[14]])?"Admins only":"Custom rule")&&ge(o,l),(!v||H&262144&&r!==(r=n[18]))&&h(e,"for",r),f!==n[14]&&(M(),f=n[14],S());const te={};if(H&1&&(te.baseCollection=n[0]),H&1&&(te.disabled=Ti(n[0][n[14]])),!c&&H&65&&(c=!0,te.value=n[0][n[14]],Ie(()=>c=!1)),D!==(D=n[4])){if(u){Ee();const le=u;P(le.$$.fragment,1,0,()=>{z(le,1)}),Ae()}D?(u=new D(O(n)),S(),me.push(()=>Le(u,"value",C)),B(u.$$.fragment),A(u.$$.fragment,1),V(u,d.parentNode,d)):u=null}else D&&u.$set(te);F!==(F=E(n,H))&&(L.d(1),L=F(n),L&&(L.c(),L.m(p,null)))},i(R){v||(u&&A(u.$$.fragment,R),v=!0)},o(R){u&&P(u.$$.fragment,R),v=!1},d(R){R&&k(e),R&&k(a),M(),u&&z(u,R),R&&k(d),R&&k(p),L.d(),b=!1,y()}}}function Yc(n,e){let t,i,s,l,o,r,a,u;function f(p,g){return g&1&&(l=null),l==null&&(l=!!Ti(p[0][p[14]])),l?M$:C$}let c=f(e,-1),d=c(e);return r=new Pe({props:{class:"form-field rule-field m-0 "+(Ti(e[0][e[14]])?"disabled":Line truncated
<a href="https://pocketbase.io/docs/manage-collections#rules-filters-syntax" target="_blank" rel="noopener">PocketBase filter syntax and operators
</a>.`,s=T(),l=_("span"),r=N(o),a=T(),b&&b.c(),u=T(),c.c(),d=st(),h(l,"class","expand-handle txt-sm txt-bold txt-nowrap link-hint"),h(t,"class","flex"),h(e,"class","block m-b-base")},m(M,C){w(M,e,C),m(e,t),m(t,i),m(t,s),m(t,l),m(l,r),m(e,a),b&&b.m(e,null),w(M,u,C),$[f].m(M,C),w(M,d,C),p=!0,g||(v=Q(l,"click",n[7]),g=!0)},p(M,[C]){(!p||C&4)&&o!==(o=M[2]?"Hide available fields":"Show available fields")&&ge(r,o),M[2]?b?(b.p(M,C),C&4&&A(b,1)):(b=Uc(M),b.c(),A(b,1),b.m(e,null)):b&&(Ee(),P(b,1,1,()=>{b=null}),Ae());let D=f;f=S(M),f===D?$[f].p(M,C):(Ee(),P($[D],1,1,()=>{$[D]=null}),Ae(),c=$[f],c?c.p(M,C):(c=$[f]=y[f](M),c.c()),A(c,1),c.m(d.parentNode,d))},i(M){p||(A(b),A(c),p=!0)},o(M){P(b),P(c),p=!1},d(M){M&&k(e),b&&b.d(),M&&k(u),$[f].d(M),M&&k(d),g=!1,v()}}}function Ti(n){return n===null}function A$(n,e,t){let{collection:i=new On}=e,s={},l=!1,o={},r,a=!1;const u={listRule:"List Action",viewRule:"View Action",createRule:"Create Action",updateRule:"Update Action",deleteRule:"Delete Action"};async function f(){t(5,a=!0);try{t(4,r=(await Ki(()=>import("./FilterAutocompleteInput.9d9a35b4.js"),[])).default)}catch(y){console.warn(y),t(4,r=null)}t(5,a=!1)}zn(()=>{f()});const c=()=>t(2,l=!l),d=async y=>{var $;t(0,i[y]=s[y]||"",i),await oi(),($=o[y])==null||$.focus()},p=y=>{t(1,s[y]=i[y],s),t(0,i[y]=null,i)},g=y=>{var $;return($=o[y])==null?void 0:$.focus()};function v(y,$){me[y?"unshift":"push"](()=>{o[$]=y,t(3,o)})}function b(y,$){n.$$.not_equal(i[$],y)&&(i[$]=y,t(0,i))}return n.$$set=y=>{"collection"in y&&t(0,i=y.collection)},[i,s,l,o,r,a,u,c,d,p,g,v,b]}class P$ extends Oe{constructor(e){super(),De(this,e,A$,E$,Te,{collection:0})}}function Kc(n,e,t){const i=n.slice();return i[14]=e[t],i}function Zc(n,e,t){const i=n.slice();return i[14]=e[t],i}function Gc(n){let e;return{c(){e=_("p"),e.textContent="All data associated with the removed fields will be permanently deleted!"},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Jc(n){let e,t,i,s,l=n[1].originalName+"",o,r,a,u,f,c=n[1].name+"",d;return{c(){e=_("li"),t=_("div"),i=N(`Renamed collection
`),s=_("strong"),o=N(l),r=T(),a=_("i"),u=T(),f=_("strong"),d=N(c),h(s,"class","txt-strikethrough txt-hint"),h(a,"class","ri-arrow-right-line txt-sm"),h(f,"class","txt"),h(t,"class","inline-flex")},m(p,g){w(p,e,g),m(e,t),m(t,i),m(t,s),m(s,o),m(t,r),m(t,a),m(t,u),m(t,f),m(f,d)},p(p,g){g&2&&l!==(l=p[1].originalName+"")&&ge(o,l),g&2&&c!==(c=p[1].name+"")&&ge(d,c)},d(p){p&&k(e)}}}function Xc(n){let e,t,i,s,l=n[14].originalName+"",o,r,a,u,f,c=n[14].name+"",d;return{c(){e=_("li"),t=_("div"),i=N(`Renamed field
`),s=_("strong"),o=N(l),r=T(),a=_("i"),u=T(),f=_("strong"),d=N(c),h(s,"class","txt-strikethrough txt-hint"),h(a,"class","ri-arrow-right-line txt-sm"),h(f,"class","txt"),h(t,"class","inline-flex")},m(p,g){w(p,e,g),m(e,t),m(t,i),m(t,s),m(s,o),m(t,r),m(t,a),m(t,u),m(t,f),m(f,d)},p(p,g){g&16&&l!==(l=p[14].originalName+"")&&ge(o,l),g&16&&c!==(c=p[14].name+"")&&ge(d,c)},d(p){p&&k(e)}}}function Qc(n){let e,t,i,s=n[14].name+"",l,o;return{c(){e=_("li"),t=N("Removed field "),i=_("span"),l=N(s),o=T(),h(i,"class","txt-bold"),h(e,"class","txt-danger")},m(r,a){w(r,e,a),m(e,t),m(e,i),m(i,l),m(e,o)},p(r,a){a&8&&s!==(s=r[14].name+"")&&ge(l,s)},d(r){r&&k(e)}}}function L$(n){let e,t,i,s,l,o,r,a,u,f,c,d,p=n[3].length&&Gc(),g=n[5]&&Jc(n),v=n[4],b=[];for(let S=0;S<v.length;S+=1)b[S]=Xc(Zc(n,v,S));let y=n[3],$=[];for(let S=0;S<y.length;S+=1)$[S]=Qc(Kc(n,y,S));return{c(){e=_("div"),t=_("div"),t.innerHTML='<i class="ri-error-warning-line"></i>',i=T(),s=_("div"),l=_("p"),l.textContent=`If any of the following changes is part of another collection rule or filter, you'll have to
update it manually!`,o=T(),p&&p.c(),r=T(),a=_("h6"),a.textContent="Changes:",u=T(),f=_("ul"),g&&g.c(),c=T();for(let S=0;S<b.length;S+=1)b[S].c();d=T();for(let S=0;S<$.length;S+=1)$[S].c();h(t,"class","icon"),h(s,"class","content txt-bold"),h(e,"class","alert alert-warning"),h(f,"class","changes-list svelte-1ghly2p")},m(S,M){w(S,e,M),m(e,t),m(e,i),m(e,s),m(s,l),m(s,o),p&&p.m(s,null),w(S,r,M),w(S,a,M),w(S,u,M),w(S,f,M),g&&g.m(f,null),m(f,c);for(let C=0;C<b.length;C+=1)b[C].m(f,null);m(f,d);for(let C=0;C<$.length;C+=1)$[C].m(f,null)},p(S,M){if(S[3].length?p||(p=Gc(),p.c(),p.m(s,null)):p&&(p.d(1),p=null),S[5]?g?g.p(S,M):(g=Jc(S),g.c(),g.m(f,c)):g&&(g.d(1),g=null),M&16){v=S[4];let C;for(C=0;C<v.length;C+=1){const D=Zc(S,v,C);b[C]?b[C].p(D,M):(b[C]=Xc(D),b[C].c(),b[C].m(f,d))}for(;C<b.length;C+=1)b[C].d(1);b.length=v.length}if(M&8){y=S[3];let C;for(C=0;C<y.length;C+=1){const D=Kc(S,y,C);$[C]?$[C].p(D,M):($[C]=Qc(D),$[C].c(),$[C].m(f,null))}for(;C<$.length;C+=1)$[C].d(1);$.length=y.length}},d(S){S&&k(e),p&&p.d(),S&&k(r),S&&k(a),S&&k(u),S&&k(f),g&&g.d(),Zn(b,S),Zn($,S)}}}function F$(n){let e;return{c(){e=_("h4"),e.textContent="Confirm collection changes"},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function I$(n){let e,t,i,s,l;return{c(){e=_("button"),e.innerHTML='<span class="txt">Cancel</span>',t=T(),i=_("button"),i.innerHTML='<span class="txt">Confirm</span>',e.autofocus=!0,h(e,"type","button"),h(e,"class","btn btn-secondary"),h(i,"type","button"),h(i,"class","btn btn-expanded")},m(o,r){w(o,e,r),w(o,t,r),w(o,i,r),e.focus(),s||(l=[Q(e,"click",n[8]),Q(i,"click",n[9])],s=!0)},p:re,d(o){o&&k(e),o&&k(t),o&&k(i),s=!1,Qe(l)}}}function R$(n){let e,t,i={class:"confirm-changes-panel",popup:!0,$$slots:{footer:[I$],header:[F$],default:[L$]},$$scope:{ctx:n}};return e=new ki({props:i}),n[10](e),e.$on("hide",n[11]),e.$on("show",n[12]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,[l]){const o={};l&524346&&(o.$$scope={dirty:l,ctx:s}),e.$set(o)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){P(e.$$.fragment,s),t=!1},d(s){n[10](null),z(e,s)}}}function N$(n,e,t){let i,s,l;const o=rn();let r,a;async function u(y){t(1,a=y),await oi(),!i&&!s.length&&!l.length?c():r==null||r.show()}function f(){r==null||r.hide()}function c(){f(),o("confirm")}const d=()=>f(),p=()=>c();function g(y){me[y?"unshift":"push"](()=>{r=y,t(2,r)})}function v(y){at.call(this,n,y)}function b(y){at.call(this,n,y)}return n.$$.update=()=>{n.$$.dirty&2&&t(5,i=(a==null?void 0:a.originalName)!=(a==null?void 0:a.name)),n.$$.dirty&2&&t(4,s=(a==null?void 0:a.schema.filter(y=>y.id&&!y.toDelete&&y.originalName!=y.name))||[]),n.$$.dirty&2&&t(3,l=(a==null?void 0:a.schema.filter(y=>y.id&&y.toDelete))||[])},[f,a,r,l,s,i,c,u,d,p,g,v,b]}class H$ extends Oe{constructor(e){super(),De(this,e,N$,R$,Te,{show:7,hide:0})}get show(){return this.$$.ctx[7]}get hide(){return this.$$.ctx[0]}}function xc(n){let e,t,i,s;function l(r){n[26](r)}let o={};return n[2]!==void 0&&(o.collection=n[2]),t=new P$({props:o}),me.push(()=>Le(t,"collection",l)),{c(){e=_("div"),B(t.$$.fragment),h(e,"class","tab-item active")},m(r,a){w(r,e,a),V(t,e,null),s=!0},p(r,a){const u={};!i&&a[0]&4&&(i=!0,u.collection=r[2],Ie(()=>i=!1)),t.$set(u)},i(r){s||(A(t.$$.fragment,r),s=!0)},o(r){P(t.$$.fragment,r),s=!1},d(r){r&&k(e),z(t)}}}function j$(n){let e,t,i,s,l,o;function r(f){n[25](f)}let a={};n[2]!==void 0&&(a.collection=n[2]),i=new y$({props:a}),me.push(()=>Le(i,"collection",r));let u=n[9]===dl&&xc(n);return{c(){e=_("div"),t=_("div"),B(i.$$.fragment),l=T(),u&&u.c(),h(t,"class","tab-item"),se(t,"active",n[9]===xi),h(e,"class","tabs-content svelte-b10vi")},m(f,c){w(f,e,c),m(e,t),V(i,t,null),m(e,l),u&&u.m(e,null),o=!0},p(f,c){const d={};!s&&c[0]&4&&(s=!0,d.collection=f[2],Ie(()=>s=!1)),i.$set(d),c[0]&512&&se(t,"active",f[9]===xi),f[9]===dl?u?(u.p(f,c),c[0]&512&&A(u,1)):(u=xc(f),u.c(),A(u,1),u.m(e,null)):u&&(Ee(),P(u,1,1,()=>{u=null}),Ae())},i(f){o||(A(i.$$.fragment,f),A(u),o=!0)},o(f){P(i.$$.fragment,f),P(u),o=!1},d(f){f&&k(e),z(i),u&&u.d()}}}function ed(n){let e,t,i,s,l,o,r;return o=new Ni({props:{class:"dropdown dropdown-right m-t-5",$$slots:{default:[q$]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=T(),i=_("button"),s=_("i"),l=T(),B(o.$$.fragment),h(e,"class","flex-fill"),h(s,"class","ri-more-line"),h(i,"type","button"),h(i,"class","btn btn-sm btn-circle btn-secondary flex-gap-0")},m(a,u){w(a,e,u),w(a,t,u),w(a,i,u),m(i,s),m(i,l),V(o,i,null),r=!0},p(a,u){const f={};u[1]&256&&(f.$$scope={dirty:u,ctx:a}),o.$set(f)},i(a){r||(A(o.$$.fragment,a),r=!0)},o(a){P(o.$$.fragment,a),r=!1},d(a){a&&k(e),a&&k(t),a&&k(i),z(o)}}}function q$(n){let e,t,i;return{c(){e=_("button"),e.innerHTML=`<i class="ri-delete-bin-7-line"></i>
<span class="txt">Delete</span>`,h(e,"type","button"),h(e,"class","dropdown-item closable")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[20]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function td(n){let e;return{c(){e=_("div"),e.textContent="System collection",h(e,"class","help-block")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function V$(n){let e,t,i,s,l,o,r,a,u,f,c,d,p=n[2].system&&td();return{c(){e=_("label"),t=N("Name"),s=T(),l=_("input"),u=T(),p&&p.c(),f=st(),h(e,"for",i=n[38]),h(l,"type","text"),h(l,"id",o=n[38]),l.required=!0,l.disabled=n[11],h(l,"spellcheck","false"),l.autofocus=r=n[2].isNew,h(l,"placeholder",'eg. "posts"'),l.value=a=n[2].name},m(g,v){w(g,e,v),m(e,t),w(g,s,v),w(g,l,v),w(g,u,v),p&&p.m(g,v),w(g,f,v),n[2].isNew&&l.focus(),c||(d=Q(l,"input",n[21]),c=!0)},p(g,v){v[1]&128&&i!==(i=g[38])&&h(e,"for",i),v[1]&128&&o!==(o=g[38])&&h(l,"id",o),v[0]&2048&&(l.disabled=g[11]),v[0]&4&&r!==(r=g[2].isNew)&&(l.autofocus=r),v[0]&4&&a!==(a=g[2].name)&&l.value!==a&&(l.value=a),g[2].system?p||(p=td(),p.c(),p.m(f.parentNode,f)):p&&(p.d(1),p=null)},d(g){g&&k(e),g&&k(s),g&&k(l),g&&k(u),p&&p.d(g),g&&k(f),c=!1,d()}}}function nd(n){let e,t,i,s,l,o;return{c(){e=_("i"),h(e,"class","ri-error-warning-fill txt-danger")},m(r,a){w(r,e,a),s=!0,l||(o=Ye(t=wt.call(null,e,n[12])),l=!0)},p(r,a){t&&Vn(t.update)&&a[0]&4096&&t.update.call(null,r[12])},i(r){s||(r&&Ot(()=>{i||(i=lt(e,Hn,{duration:150,start:.7},!0)),i.run(1)}),s=!0)},o(r){r&&(i||(i=lt(e,Hn,{duration:150,start:.7},!1)),i.run(0)),s=!1},d(r){r&&k(e),r&&i&&i.end(),l=!1,o()}}}function id(n){let e,t,i,s,l;return{c(){e=_("i"),h(e,"class","ri-error-warning-fill txt-danger")},m(o,r){w(o,e,r),i=!0,s||(l=Ye(wt.call(null,e,"Has errors")),s=!0)},i(o){i||(o&&Ot(()=>{t||(t=lt(e,Hn,{duration:150,start:.7},!0)),t.run(1)}),i=!0)},o(o){o&&(t||(t=lt(e,Hn,{duration:150,start:.7},!1)),t.run(0)),i=!1},d(o){o&&k(e),o&&t&&t.end(),s=!1,l()}}}function z$(n){var R,H,te,le,q,Y;let e,t=n[2].isNew?"New collection":"Edit collection",i,s,l,o,r,a,u,f,c,d,p,g,v=!G.isEmpty((R=n[4])==null?void 0:R.schema),b,y,$,S,M=!G.isEmpty((H=n[4])==null?void 0:H.listRule)||!G.isEmpty((te=n[4])==null?void 0:te.viewRule)||!G.isEmpty((le=n[4])==null?void 0:le.createRule)||!G.isEmpty((q=n[4])==null?void 0:q.updateRule)||!G.isEmpty((Y=n[4])==null?void 0:Y.deleteRule),C,D,O,E=!n[2].isNew&&!n[2].system&&ed(n);r=new Pe({props:{class:"form-field required m-b-0 "+(n[11]?"disabled":""),name:"name",$$slots:{default:[V$,({uniqueId:W})=>({38:W}),({uniqueId:W})=>[0,W?128:0]]},$$scope:{ctx:n}}});let F=v&&nd(n),L=M&&id();return{c(){e=_("h4"),i=N(t),s=T(),E&&E.c(),l=T(),o=_("form"),B(r.$$.fragment),a=T(),u=_("input"),f=T(),c=_("div"),d=_("button"),p=_("span"),p.textContent="Fields",g=T(),F&&F.c(),b=T(),y=_("button"),$=_("span"),$.textContent="API Rules",S=T(),L&&L.c(),h(u,"type","submit"),h(u,"class","hidden"),h(u,"tabindex","-1"),h(o,"class","block"),h(p,"class","txt"),h(d,"type","button"),h(d,"class","tab-item"),se(d,"active",n[9]===xi),h($,"class","txt"),h(y,"type","button"),h(y,"class","tab-item"),se(y,"active",n[9]===dl),h(c,"class","tabs-header stretched")},m(W,X){w(W,e,X),m(e,i),w(W,s,X),E&&E.m(W,X),w(W,l,X),w(W,o,X),V(r,o,null),m(o,a),m(o,u),w(W,f,X),w(W,c,X),m(c,d),m(d,p),m(d,g),F&&F.m(d,null),m(c,b),m(c,y),m(y,$),m(y,S),L&&L.m(y,null),C=!0,D||(O=[Q(o,"submit",Wt(n[22])),Q(d,"click",n[23]),Q(y,"click",n[24])],D=!0)},p(W,X){var ue,Me,oe,he,be,K;(!C||X[0]&4)&&t!==(t=W[2].isNew?"New collection":"Edit collection")&&ge(i,t),!W[2].isNew&&!W[2].system?E?(E.p(W,X),X[0]&4&&A(E,1)):(E=ed(W),E.c(),A(E,1),E.m(l.parentNode,l)):E&&(Ee(),P(E,1,1,()=>{E=null}),Ae());const ne={};X[0]&2048&&(ne.class="form-field required m-b-0 "+(W[11]?"disabled":"")),X[0]&2052|X[1]&384&&(ne.$$scope={dirty:X,ctx:W}),r.$set(ne),X[0]&16&&(v=!G.isEmpty((ue=W[4])==null?void 0:ue.schema)),v?F?(F.p(W,X),X[0]&16&&A(F,1)):(F=nd(W),F.c(),A(F,1),F.m(d,null)):F&&(Ee(),P(F,1,1,()=>{F=null}),Ae()),X[0]&512&&se(d,"active",W[9]===xi),X[0]&16&&(M=!G.isEmpty((Me=W[4])==null?void 0:Me.listRule)||!G.isEmpty((oe=W[4])==null?void 0:oe.viewRule)||!G.isEmpty((he=W[4])==null?void 0:he.createRule)||!G.isEmpty((be=W[4])==null?void 0:be.updateRule)||!G.isEmpty((K=W[4])==null?void 0:K.deleteRule)),M?L?X[0]&16&&A(L,1):(L=id(),L.c(),A(L,1),L.m(y,null)):L&&(Ee(),P(L,1,1,()=>{L=null}),Ae()),X[0]&512&&se(y,"active",W[9]===dl)},i(W){C||(A(E),A(r.$$.fragment,W),A(F),A(L),C=!0)},o(W){P(E),P(r.$$.fragment,W),P(F),P(L),C=!1},d(W){W&&k(e),W&&k(s),E&&E.d(W),W&&k(l),W&&k(o),z(r),W&&k(f),W&&k(c),F&&F.d(),L&&L.d(),D=!1,Qe(O)}}}function B$(n){let e,t,i,s,l,o=n[2].isNew?"Create":"Save changes",r,a,u,f;return{c(){e=_("button"),t=_("span"),t.textContent="Cancel",i=T(),s=_("button"),l=_("span"),r=N(o),h(t,"class","txt"),h(e,"type","button"),h(e,"class","btn btn-secondary"),e.disabled=n[7],h(l,"class","txt"),h(s,"type","button"),h(s,"class","btn btn-expanded"),s.disabled=a=!n[10]||n[7],se(s,"btn-loading",n[7])},m(c,d){w(c,e,d),m(e,t),w(c,i,d),w(c,s,d),m(s,l),m(l,r),u||(f=[Q(e,"click",n[18]),Q(s,"clickLine truncated
<span class="txt">New collection</span>`,y=T(),B($.$$.fragment),h(l,"type","button"),h(l,"class","btn btn-xs btn-secondary btn-circle btn-clear"),se(l,"hidden",!n[4]),h(s,"class","form-field-addon"),h(r,"type","text"),h(r,"placeholder","Search collections..."),h(i,"class","form-field search"),se(i,"active",n[4]),h(t,"class","sidebar-header"),h(u,"class","m-t-5 m-b-xs"),h(c,"class","sidebar-content"),h(b,"type","button"),h(b,"class","btn btn-block btn-outline"),h(v,"class","sidebar-footer"),h(e,"class","page-sidebar collection-sidebar")},m(L,R){w(L,e,R),m(e,t),m(t,i),m(i,s),m(s,l),m(i,o),m(i,r),we(r,n[0]),m(e,a),m(e,u),m(e,f),m(e,c);for(let H=0;H<d.length;H+=1)d[H].m(c,null);E&&E.m(c,null),m(e,g),m(e,v),m(v,b),w(L,y,R),V($,L,R),S=!0,M||(C=[Q(l,"click",n[8]),Q(r,"input",n[9]),Q(b,"click",n[11])],M=!0)},p(L,[R]){R&16&&se(l,"hidden",!L[4]),R&1&&r.value!==L[0]&&we(r,L[0]),R&16&&se(i,"active",L[4]),R&106&&(D=L[3],d=St(d,R,O,1,L,D,p,c,Jn,rd,null,sd),!D.length&&E?E.p(L,R):D.length?E&&(E.d(1),E=null):(E=ld(L),E.c(),E.m(c,null)));const H={};$.$set(H)},i(L){S||(A($.$$.fragment,L),S=!0)},o(L){P($.$$.fragment,L),S=!1},d(L){L&&k(e);for(let R=0;R<d.length;R+=1)d[R].d();E&&E.d(),L&&k(y),n[12](null),z($,L),M=!1,Qe(C)}}}function G$(n,e,t){let i,s,l,o,r;kt(n,ii,b=>t(5,o=b)),kt(n,ks,b=>t(7,r=b));let a,u="";function f(b){_n(ii,o=b,o)}const c=()=>t(0,u="");function d(){u=this.value,t(0,u)}const p=b=>f(b),g=()=>a==null?void 0:a.show();function v(b){me[b?"unshift":"push"](()=>{a=b,t(2,a)})}return n.$$.update=()=>{n.$$.dirty&1&&t(1,i=u.replace(/\s+/g,"").toLowerCase()),n.$$.dirty&1&&t(4,s=u!==""),n.$$.dirty&131&&t(3,l=r.filter(b=>b.name!="profiles"&&(b.id==u||b.name.replace(/\s+/g,"").toLowerCase().includes(i))))},[u,i,a,l,s,o,f,r,c,d,p,g,v]}class J$ extends Oe{constructor(e){super(),De(this,e,G$,Z$,Te,{})}}function X$(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$,S,M,C,D,O,E,F,L,R,H,te,le,q,Y,W,X,ne,ue,Me,oe,he,be,K,Se,x,J,ve,Re,Ve,Z,fe,de,ke,Ge;return{c(){e=_("p"),e.innerHTML=`The syntax basically follows the format
<code><span class="txt-success">OPERAND</span>
<span class="txt-danger">OPERATOR</span>
<span class="txt-success">OPERAND</span></code>, where:`,t=T(),i=_("ul"),s=_("li"),s.innerHTML=`<code class="txt-success">OPERAND</code> - could be any of the above field literal, string (single or double
quoted), number, null, true, false`,l=T(),o=_("li"),r=_("code"),r.textContent="OPERATOR",a=N(` - is one of:
`),u=_("br"),f=T(),c=_("ul"),d=_("li"),p=_("code"),p.textContent="=",g=T(),v=_("span"),v.textContent="Equal",b=T(),y=_("li"),$=_("code"),$.textContent="!=",S=T(),M=_("span"),M.textContent="NOT equal",C=T(),D=_("li"),O=_("code"),O.textContent=">",E=T(),F=_("span"),F.textContent="Greater than",L=T(),R=_("li"),H=_("code"),H.textContent=">=",te=T(),le=_("span"),le.textContent="Greater than or equal",q=T(),Y=_("li"),W=_("code"),W.textContent="<",X=T(),ne=_("span"),ne.textContent="Less than or equal",ue=T(),Me=_("li"),oe=_("code"),oe.textContent="<=",he=T(),be=_("span"),be.textContent="Less than or equal",K=T(),Se=_("li"),x=_("code"),x.textContent="~",J=T(),ve=_("span"),ve.textContent=`Like/Contains (if not specified auto wraps the right string OPERAND in a "%" for wildcard
match)`,Re=T(),Ve=_("li"),Z=_("code"),Z.textContent="!~",fe=T(),de=_("span"),de.textContent=`NOT Like/Contains (if not specified auto wraps the right string OPERAND in a "%" for
wildcard match)`,ke=T(),Ge=_("p"),Ge.innerHTML=`To group and combine several expressions you could use brackets
<code>(...)</code>, <code>&amp;&amp;</code> (AND) and <code>||</code> (OR) tokens.`,h(r,"class","txt-danger"),h(p,"class","filter-op svelte-1w7s5nw"),h(v,"class","txt-hint"),h($,"class","filter-op svelte-1w7s5nw"),h(M,"class","txt-hint"),h(O,"class","filter-op svelte-1w7s5nw"),h(F,"class","txt-hint"),h(H,"class","filter-op svelte-1w7s5nw"),h(le,"class","txt-hint"),h(W,"class","filter-op svelte-1w7s5nw"),h(ne,"class","txt-hint"),h(oe,"class","filter-op svelte-1w7s5nw"),h(be,"class","txt-hint"),h(x,"class","filter-op svelte-1w7s5nw"),h(ve,"class","txt-hint"),h(Z,"class","filter-op svelte-1w7s5nw"),h(de,"class","txt-hint")},m(ot,xe){w(ot,e,xe),w(ot,t,xe),w(ot,i,xe),m(i,s),m(i,l),m(i,o),m(o,r),m(o,a),m(o,u),m(o,f),m(o,c),m(c,d),m(d,p),m(d,g),m(d,v),m(c,b),m(c,y),m(y,$),m(y,S),m(y,M),m(c,C),m(c,D),m(D,O),m(D,E),m(D,F),m(c,L),m(c,R),m(R,H),m(R,te),m(R,le),m(c,q),m(c,Y),m(Y,W),m(Y,X),m(Y,ne),m(c,ue),m(c,Me),m(Me,oe),m(Me,he),m(Me,be),m(c,K),m(c,Se),m(Se,x),m(Se,J),m(Se,ve),m(c,Re),m(c,Ve),m(Ve,Z),m(Ve,fe),m(Ve,de),w(ot,ke,xe),w(ot,Ge,xe)},p:re,i:re,o:re,d(ot){ot&&k(e),ot&&k(t),ot&&k(i),ot&&k(ke),ot&&k(Ge)}}}class Q$ extends Oe{constructor(e){super(),De(this,e,null,X$,Te,{})}}function ad(n,e,t){const i=n.slice();return i[5]=e[t],i}function ud(n,e,t){const i=n.slice();return i[5]=e[t],i}function fd(n,e){let t,i,s=e[5].title+"",l,o,r,a;function u(){return e[4](e[5])}return{key:n,first:null,c(){t=_("button"),i=_("div"),l=N(s),o=T(),h(i,"class","txt"),h(t,"class","tab-item svelte-1maocj6"),se(t,"active",e[0]===e[5].language),this.first=t},m(f,c){w(f,t,c),m(t,i),m(i,l),m(t,o),r||(a=Q(t,"click",u),r=!0)},p(f,c){e=f,c&2&&s!==(s=e[5].title+"")&&ge(l,s),c&3&&se(t,"active",e[0]===e[5].language)},d(f){f&&k(t),r=!1,a()}}}function cd(n,e){let t,i,s,l;return i=new gn({props:{language:e[5].language,content:e[5].content}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=T(),h(t,"class","tab-item svelte-1maocj6"),se(t,"active",e[0]===e[5].language),this.first=t},m(o,r){w(o,t,r),V(i,t,null),m(t,s),l=!0},p(o,r){e=o;const a={};r&2&&(a.language=e[5].language),r&2&&(a.content=e[5].content),i.$set(a),r&3&&se(t,"active",e[0]===e[5].language)},i(o){l||(A(i.$$.fragment,o),l=!0)},o(o){P(i.$$.fragment,o),l=!1},d(o){o&&k(t),z(i)}}}function x$(n){let e,t,i=[],s=new Map,l,o,r=[],a=new Map,u,f=n[1];const c=g=>g[5].language;for(let g=0;g<f.length;g+=1){let v=ud(n,f,g),b=c(v);s.set(b,i[g]=fd(b,v))}let d=n[1];const p=g=>g[5].language;for(let g=0;g<d.length;g+=1){let v=ad(n,d,g),b=p(v);a.set(b,r[g]=cd(b,v))}return{c(){e=_("div"),t=_("div");for(let g=0;g<i.length;g+=1)i[g].c();l=T(),o=_("div");for(let g=0;g<r.length;g+=1)r[g].c();h(t,"class","tabs-header compact left"),h(o,"class","tabs-content"),h(e,"class","tabs sdk-tabs m-b-lg svelte-1maocj6")},m(g,v){w(g,e,v),m(e,t);for(let b=0;b<i.length;b+=1)i[b].m(t,null);m(e,l),m(e,o);for(let b=0;b<r.length;b+=1)r[b].m(o,null);u=!0},p(g,[v]){v&3&&(f=g[1],i=St(i,v,c,1,g,f,s,t,Jn,fd,null,ud)),v&3&&(d=g[1],Ee(),r=St(r,v,p,1,g,d,a,o,Gt,cd,null,ad),Ae())},i(g){if(!u){for(let v=0;v<d.length;v+=1)A(r[v]);u=!0}},o(g){for(let v=0;v<r.length;v+=1)P(r[v]);u=!1},d(g){g&&k(e);for(let v=0;v<i.length;v+=1)i[v].d();for(let v=0;v<r.length;v+=1)r[v].d()}}}const dd="pb_sdk_preference";function eC(n,e,t){let i,{js:s=""}=e,{dart:l=""}=e,o=localStorage.getItem(dd)||"javascript";const r=a=>t(0,o=a.language);return n.$$set=a=>{"js"in a&&t(2,s=a.js),"dart"in a&&t(3,l=a.dart)},n.$$.update=()=>{n.$$.dirty&1&&o&&localStorage.setItem(dd,o),n.$$.dirty&12&&t(1,i=[{title:"JavaScript",language:"javascript",content:s},{title:"Dart",language:"dart",content:l}])},[o,i,s,l,r]}class Ms extends Oe{constructor(e){super(),De(this,e,eC,x$,Te,{js:2,dart:3})}}function hd(n,e,t){const i=n.slice();return i[6]=e[t],i}function pd(n,e,t){const i=n.slice();return i[6]=e[t],i}function md(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",h(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function gd(n,e){let t,i=e[6].code+"",s,l,o,r;function a(){return e[5](e[6])}return{key:n,first:null,c(){t=_("div"),s=N(i),l=T(),h(t,"class","tab-item"),se(t,"active",e[2]===e[6].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),o||(r=Q(t,"click",a),o=!0)},p(u,f){e=u,f&20&&se(t,"active",e[2]===e[6].code)},d(u){u&&k(t),o=!1,r()}}}function _d(n,e){let t,i,s,l;return i=new gn({props:{content:e[6].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=T(),h(t,"class","tab-item"),se(t,"active",e[2]===e[6].code),this.first=t},m(o,r){w(o,t,r),V(i,t,null),m(t,s),l=!0},p(o,r){e=o,r&20&&se(t,"active",e[2]===e[6].code)},i(o){l||(A(i.$$.fragment,o),l=!0)},o(o){P(i.$$.fragment,o),l=!1},d(o){o&&k(t),z(i)}}}function tC(n){var ui,Cl,os,Ml;let e,t,i,s,l,o,r,a=n[0].name+"",u,f,c,d,p,g,v,b,y=n[0].name+"",$,S,M,C,D,O,E,F,L,R,H,te,le,q,Y,W,X,ne,ue,Me,oe,he,be,K,Se,x,J,ve,Re,Ve,Z,fe,de,ke,Ge,ot,xe,_t,tt,$t,ze,Be,ct,ie,_e,Ue,nt,rt,Je,Ct,Lt,It,ht,We,Ce,He,et,Mt,Ft,Rt,Et,it,I,j,ee,U=[],ae=new Map,$e,Ke,je=[],ce=new MaLine truncated
import PocketBase from 'pocketbase';
const client = new PocketBase('${n[3]}');
...
// fetch a paginated records list
const resultList = await client.Records.getList('${(ui=n[0])==null?void 0:ui.name}', 1, 50, {
filter: 'created >= '2022-01-01 00:00:00'',
});
// alternatively you can also fetch all records at once via getFullList:
const records = await client.Records.getFullList('${(Cl=n[0])==null?void 0:Cl.name}', 200 /* batch size */, {
sort: '-created',
});
`,dart:`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${n[3]}');
...
// fetch a paginated records list
final result = await client.records.getList(
'${(os=n[0])==null?void 0:os.name}',
page: 1,
perPage: 50,
filter: 'created >= "2022-01-01 00:00:00"',
);
// alternatively you can also fetch all records at once via getFullList:
final records = await client.records.getFullList('${(Ml=n[0])==null?void 0:Ml.name}', batch: 200, sort: '-created');
`}}),Z=new gn({props:{content:`
// DESC by created and ASC by id
?sort=-created,id
`}}),$t=new gn({props:{content:`
?filter=(id='abc' && created>'2022-01-01')
`}}),Be=new Q$({}),Lt=new gn({props:{content:`
?expand=rel1,rel2.subrel21.subrel22
`}});let dt=n[4];const tn=Ne=>Ne[6].code;for(let Ne=0;Ne<dt.length;Ne+=1){let Xe=pd(n,dt,Ne),Xt=tn(Xe);ae.set(Xt,U[Ne]=gd(Xt,Xe))}let jt=n[4];const wi=Ne=>Ne[6].code;for(let Ne=0;Ne<jt.length;Ne+=1){let Xe=hd(n,jt,Ne),Xt=wi(Xe);ce.set(Xt,je[Ne]=_d(Xt,Xe))}return{c(){e=_("div"),t=_("strong"),t.textContent="GET",i=T(),s=_("div"),l=_("p"),o=N("/api/collections/"),r=_("strong"),u=N(a),f=N("/records"),c=T(),Fe&&Fe.c(),d=T(),p=_("div"),g=_("p"),v=N("Fetch a paginated "),b=_("strong"),$=N(y),S=N(" records list."),M=T(),C=_("div"),C.textContent="Client SDKs example",D=T(),B(O.$$.fragment),E=T(),F=_("div"),F.textContent="Query parameters",L=T(),R=_("table"),H=_("thead"),H.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr>`,te=T(),le=_("tbody"),q=_("tr"),q.innerHTML=`<td>page</td>
<td><span class="label">Number</span></td>
<td>The page (aka. offset) of the paginated list (default to 1).</td>`,Y=T(),W=_("tr"),W.innerHTML=`<td>perPage</td>
<td><span class="label">Number</span></td>
<td>Specify the max returned records per page (default to 30).</td>`,X=T(),ne=_("tr"),ue=_("td"),ue.textContent="sort",Me=T(),oe=_("td"),oe.innerHTML='<span class="label">String</span>',he=T(),be=_("td"),K=N("Specify the records order attribute(s). "),Se=_("br"),x=N(`
Add `),J=_("code"),J.textContent="-",ve=N(" / "),Re=_("code"),Re.textContent="+",Ve=N(` (default) in front of the attribute for DESC / ASC order.
Ex.:
`),B(Z.$$.fragment),fe=T(),de=_("tr"),ke=_("td"),ke.textContent="filter",Ge=T(),ot=_("td"),ot.innerHTML='<span class="label">String</span>',xe=T(),_t=_("td"),tt=N(`Filter the returned records. Ex.:
`),B($t.$$.fragment),ze=T(),B(Be.$$.fragment),ct=T(),ie=_("tr"),_e=_("td"),_e.textContent="expand",Ue=T(),nt=_("td"),nt.innerHTML='<span class="label">String</span>',rt=T(),Je=_("td"),Ct=N(`Auto expand record relations. Ex.:
`),B(Lt.$$.fragment),It=N(`
Supports up to 6-levels depth nested relations expansion. `),ht=_("br"),We=N(`
The expanded relations will be appended to each individual record under the
`),Ce=_("code"),Ce.textContent="@expand",He=N(" property (eg. "),et=_("code"),et.textContent='"@expand": {"rel1": {...}, ...}',Mt=N(`). Only the
relations that the user has permissions to `),Ft=_("strong"),Ft.textContent="view",Rt=N(" will be expanded."),Et=T(),it=_("div"),it.textContent="Responses",I=T(),j=_("div"),ee=_("div");for(let Ne=0;Ne<U.length;Ne+=1)U[Ne].c();$e=T(),Ke=_("div");for(let Ne=0;Ne<je.length;Ne+=1)je[Ne].c();h(t,"class","label label-primary"),h(s,"class","content"),h(e,"class","alert alert-info"),h(p,"class","content m-b-base"),h(C,"class","section-title"),h(F,"class","section-title"),h(R,"class","table-compact table-border m-b-lg"),h(it,"class","section-title"),h(ee,"class","tabs-header compact left"),h(Ke,"class","tabs-content"),h(j,"class","tabs")},m(Ne,Xe){w(Ne,e,Xe),m(e,t),m(e,i),m(e,s),m(s,l),m(l,o),m(l,r),m(r,u),m(l,f),m(e,c),Fe&&Fe.m(e,null),w(Ne,d,Xe),w(Ne,p,Xe),m(p,g),m(g,v),m(g,b),m(b,$),m(g,S),w(Ne,M,Xe),w(Ne,C,Xe),w(Ne,D,Xe),V(O,Ne,Xe),w(Ne,E,Xe),w(Ne,F,Xe),w(Ne,L,Xe),w(Ne,R,Xe),m(R,H),m(R,te),m(R,le),m(le,q),m(le,Y),m(le,W),m(le,X),m(le,ne),m(ne,ue),m(ne,Me),m(ne,oe),m(ne,he),m(ne,be),m(be,K),m(be,Se),m(be,x),m(be,J),m(be,ve),m(be,Re),m(be,Ve),V(Z,be,null),m(le,fe),m(le,de),m(de,ke),m(de,Ge),m(de,ot),m(de,xe),m(de,_t),m(_t,tt),V($t,_t,null),m(_t,ze),V(Be,_t,null),m(le,ct),m(le,ie),m(ie,_e),m(ie,Ue),m(ie,nt),m(ie,rt),m(ie,Je),m(Je,Ct),V(Lt,Je,null),m(Je,It),m(Je,ht),m(Je,We),m(Je,Ce),m(Je,He),m(Je,et),m(Je,Mt),m(Je,Ft),m(Je,Rt),w(Ne,Et,Xe),w(Ne,it,Xe),w(Ne,I,Xe),w(Ne,j,Xe),m(j,ee);for(let Xt=0;Xt<U.length;Xt+=1)U[Xt].m(ee,null);m(j,$e),m(j,Ke);for(let Xt=0;Xt<je.length;Xt+=1)je[Xt].m(Ke,null);pe=!0},p(Ne,[Xe]){var Tl,Dl,Ol,El;(!pe||Xe&1)&&a!==(a=Ne[0].name+"")&&ge(u,a),Ne[1]?Fe||(Fe=md(),Fe.c(),Fe.m(e,null)):Fe&&(Fe.d(1),Fe=null),(!pe||Xe&1)&&y!==(y=Ne[0].name+"")&&ge($,y);const Xt={};Xe&9&&(Xt.js=`
import PocketBase from 'pocketbase';
const client = new PocketBase('${Ne[3]}');
...
// fetch a paginated records list
const resultList = await client.Records.getList('${(Tl=Ne[0])==null?void 0:Tl.name}', 1, 50, {
filter: 'created >= '2022-01-01 00:00:00'',
});
// alternatively you can also fetch all records at once via getFullList:
const records = await client.Records.getFullList('${(Dl=Ne[0])==null?void 0:Dl.name}', 200 /* batch size */, {
sort: '-created',
});
`),Xe&9&&(Xt.dart=`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${Ne[3]}');
...
// fetch a paginated records list
final result = await client.records.getList(
'${(Ol=Ne[0])==null?void 0:Ol.name}',
page: 1,
perPage: 50,
filter: 'created >= "2022-01-01 00:00:00"',
);
// alternatively you can also fetch all records at once via getFullList:
final records = await client.records.getFullList('${(El=Ne[0])==null?void 0:El.name}', batch: 200, sort: '-created');
`),O.$set(Xt),Xe&20&&(dt=Ne[4],U=St(U,Xe,tn,1,Ne,dt,ae,ee,Jn,gd,null,pd)),Xe&20&&(jt=Ne[4],Ee(),je=St(je,Xe,wi,1,Ne,jt,ce,Ke,Gt,_d,null,hd),Ae())},i(Ne){if(!pe){A(O.$$.fragment,Ne),A(Z.$$.fragment,Ne),A($t.$$.fragment,Ne),A(Be.$$.fragment,Ne),A(Lt.$$.fragment,Ne);for(let Xe=0;Xe<jt.length;Xe+=1)A(je[Xe]);pe=!0}},o(Ne){P(O.$$.fragment,Ne),P(Z.$$.fragment,Ne),P($t.$$.fragment,Ne),P(Be.$$.fragment,Ne),P(Lt.$$.fragment,Ne);for(let Xe=0;Xe<je.length;Xe+=1)P(je[Xe]);pe=!1},d(Ne){Ne&&k(e),Fe&&Fe.d(),Ne&&k(d),Ne&&k(p),Ne&&k(M),Ne&&k(C),Ne&&k(D),z(O,Ne),Ne&&k(E),Ne&&k(F),Ne&&k(L),Ne&&k(R),z(Z),z($t),z(Be),z(Lt),Ne&&k(Et),Ne&&k(it),Ne&&k(I),Ne&&k(j);for(let Xe=0;Xe<U.length;Xe+=1)U[Xe].d();for(let Xe=0;Xe<je.length;Xe+=1)je[Xe].d()}}}function nC(n,e,t){let i,s,{collection:l=new On}=e,o=200,r=[];const a=u=>t(2,o=u.code);return n.$$set=u=>{"collection"in u&&t(0,l=u.collection)},n.$$.update=()=>{n.$$.dirty&1&&t(1,i=(l==null?void 0:l.listRule)===null),n.$$.dirty&3&&l!=null&&l.id&&(r.push({code:200,body:JSON.stringify({page:1,perPage:30,totalItems:2,items:[G.dummyCollectionRecord(l),G.dummyCollectionRecord(l)]},null,2)}),r.push({code:400,body:`
{
"code": 400,
"message": "Something went wrong while processing your request. Invalid filter.",
"data": {}
}
`}),i&&r.push({code:403,body:`
{
"code": 403,
"message": "Only admins can access this action.",
"data": {}
}
`}),r.push({code:404,body:`
{
"code": 404,
"message": "The requested resource wasn't found.",
"data": {}
}
`}))},t(3,s=window.location.href.substring(0,window.location.href.indexOf("/_"))||ye.baseUrl),[l,i,o,s,r,a]}class iC extends Oe{constructor(e){super(),De(this,e,nC,tC,Te,{collection:0})}}function bd(n,e,t){const i=n.slice();return i[6]=e[t],i}function vd(n,e,t){const i=n.slice();return i[6]=e[t],i}function yd(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",h(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function kd(n,e){let t,i=e[6].code+"",s,l,o,r;function a(){return e[5](e[6])}return{key:n,first:null,c(){t=_("button"),s=N(i),l=T(),h(t,"class","tab-item"),se(t,"active",e[2]===e[6].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),o||(r=Q(t,"click",a),o=!0)},p(u,f){e=u,f&20&&se(t,"active",e[2]===e[6].code)},d(u){u&&k(t),o=!1,r()}}}function wd(n,e){let t,i,s,l;return i=new gn({props:{content:e[6].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=T(),h(t,"class","tab-item"),se(t,"active",e[2]===e[6].code),this.first=t},m(o,r){w(o,t,r),V(i,t,null),m(t,s),l=!0},p(o,r){e=o,r&20&&se(t,"active",e[2]===e[6].code)},i(o){l||(A(i.$$.fragment,o),l=!0)},o(o){P(i.$$.fragment,o),l=!1},d(o){o&&k(t),z(i)}}}function sC(n){var ht,We;let e,t,i,s,l,o,r,a=n[0].name+"",u,f,c,d,p,g,v,b,y,$=n[0].name+"",S,M,C,D,O,E,F,L,R,H,te,le,q,Y,W,X,ne,ue,Me,oe,he,be,K,Se,x,J,ve,Re,Ve,Z,fe,de,ke,Ge,ot,xe,_t,tt,$t,ze=[],Be=new Map,ct,ie,_e=[],Ue=new Map,nt,rt=n[1]&&yd();E=new Ms({props:{js:`
import PocketBase from 'pocketbase';
const client = new PocketBase('${n[3]}');
...
const record = await client.Records.getOne('${(ht=n[0])==null?void 0:ht.name}', 'RECORD_ID', {
expand: 'some_relation'
});
`,dart:`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${n[3]}');
...
final record = await client.records.getOne('${(We=n[0])==null?void 0:We.name}', 'RECORD_ID', query: {
'expand': 'some_relation',
});
`}}),x=new gn({props:{content:`
?expand=rel1,rel2.subrel21.subrel22
`}});let Je=n[4];const Ct=Ce=>Ce[6].code;for(let Ce=0;Ce<Je.length;Ce+=1){let He=vd(n,Je,Ce),et=Ct(He);Be.set(et,ze[Ce]=kd(et,He))}let Lt=n[4];const It=Ce=>Ce[6].code;for(let Ce=0;Ce<Lt.length;Ce+=1){let He=bd(n,Lt,Ce),et=It(He);Ue.set(et,_e[Ce]=wd(et,He))}return{c(){e=_("div"),t=_("strong"),t.textContent="GET",i=T(),s=_("div"),l=_("p"),o=N("/api/collections/"),r=_("strong"),u=N(a),f=N("/records/"),c=_("strong"),c.textContent=":id",d=T(),rt&&rt.c(),p=T(),g=_("div"),v=_("p"),b=N("Fetch a single "),y=_("strong"),S=N($),M=N(" record."),C=T(),D=_("div"),D.textContent="Client SDKs example",O=T(),B(E.$$.fragment),F=T(),L=_("div"),L.textContent="Path Parameters",R=T(),H=_("table"),H.innerHTML=`<thead><tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr></thead>
<tbody><tr><td>id</td>
<td><span class="label">String</span></td>
<td>ID of the record to view.</td></tr></tbody>`,te=T(),le=_("div"),le.textContent="Query parameters",q=T(),Y=_("table"),W=_("thead"),W.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr>`,X=T(),ne=_("tbody"),ue=_("tr"),Me=_("td"),Me.textContent="expand",oe=T(),he=_("td"),he.innerHTML='<span class="label">String</span>',be=T(),K=_("td"),Se=N(`Auto expand record relations. Ex.:
`),B(x.$$.fragment),J=N(`
Supports up to 6-levels depth nested relations expansion. `),ve=_("br"),Re=N(`
The expanded relations will be appended to the record under the
`),Ve=_("code"),Ve.textContent="@expand",Z=N(" property (eg. "),fe=_("code"),fe.textContent='"@expand": {"rel1": {...}, ...}',de=N(`). Only the
relations that the user has permissions to `),ke=_("strong"),ke.textContent="view",Ge=N(" will be expanded."),ot=T(),xe=_("div"),xe.textContent="Responses",_t=T(),tt=_("div"),$t=_("div");for(let Ce=0;Ce<ze.length;Ce+=1)ze[Ce].c();ct=T(),ie=_("div");for(let Ce=0;Ce<_e.length;Ce+=1)_e[Ce].c();h(t,"class","label label-primary"),h(s,"class","content"),h(e,"class","alert alert-info"),h(g,"class","content m-b-base"),h(D,"class","section-title"),h(L,"class","section-title"),h(H,"class","table-compact table-border m-b-lg"),h(le,"class","section-title"),h(Y,"class","table-compact table-border m-b-lg"),h(xe,"class","section-title"),h($t,"class","tabs-header compact left"),h(ie,"class","tabs-content"),h(tt,"class","tabs")},m(Ce,He){w(Ce,e,He),m(e,t),m(e,i),m(e,s),m(s,l),m(l,o),m(l,r),m(r,u),m(l,f),m(l,c),m(e,d),rt&&rt.m(e,null),w(Ce,p,He),w(Ce,g,He),m(g,v),m(v,b),m(v,y),m(y,S),m(v,M),w(Ce,C,He),w(Ce,D,He),w(Ce,O,He),V(E,Ce,He),w(Ce,F,He),w(Ce,L,He),w(Ce,R,He),w(Ce,H,He),w(Ce,te,He),w(Ce,le,He),w(Ce,q,He),w(Ce,Y,He),m(Y,W),m(Y,X),m(Y,ne),m(ne,ue),m(ue,Me),m(ue,oe),m(ue,he),m(ue,be),m(ue,K),m(K,Se),V(x,K,null),m(K,J),m(K,ve),m(K,Re),m(K,Ve),m(K,Z),m(K,fe),m(K,de),m(K,ke),m(K,Ge),w(Ce,ot,He),w(Ce,xe,He),w(Ce,_t,He),w(Ce,tt,He),m(tt,$t);for(let et=0;et<ze.length;et+=1)ze[et].m($t,null);m(tt,ct),m(tt,ie);for(let et=0;et<_e.length;et+=1)_e[et].m(ie,null);nt=!0},p(Ce,[He]){var Mt,Ft;(!nt||He&1)&&a!==(a=Ce[0].name+"")&&ge(u,a),Ce[1]?rt||(rt=yd(),rt.c(),rt.m(e,null)):rt&&(rt.d(1),rt=null),(!nt||He&1)&&$!==($=Ce[0].name+"")&&ge(S,$);const et={};He&9&&(et.js=`
import PocketBase from 'pocketbase';
const client = new PocketBase('${Ce[3]}');
...
const record = await client.Records.getOne('${(Mt=Ce[0])==null?void 0:Mt.name}', 'RECORD_ID', {
expand: 'some_relation'
});
`),He&9&&(et.dart=`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${Ce[3]}');
...
final record = await client.records.getOne('${(Ft=Ce[0])==null?void 0:Ft.name}', 'RECORD_ID', query: {
'expand': 'some_relation',
});
`),E.$set(et),He&20&&(Je=Ce[4],ze=St(ze,He,Ct,1,Ce,Je,Be,$t,Jn,kd,null,vd)),He&20&&(Lt=Ce[4],Ee(),_e=St(_e,He,It,1,Ce,Lt,Ue,ie,Gt,wd,null,bd),Ae())},i(Ce){if(!nt){A(E.$$.fragment,Ce),A(x.$$.fragment,Ce);for(let He=0;He<Lt.length;He+=1)A(_e[He]);nt=!0}},o(Ce){P(E.$$.fragment,Ce),P(x.$$.fragment,Ce);for(let He=0;He<_e.length;He+=1)P(_e[He]);nt=!1},d(Ce){Ce&&k(e),rt&&rt.d(),Ce&&k(p),Ce&&k(g),Ce&&k(C),Ce&&k(D),Ce&&k(O),z(E,Ce),Ce&&k(F),Ce&&k(L),Ce&&k(R),Ce&&k(H),Ce&&k(te),Ce&&k(le),Ce&&k(q),Ce&&k(Y),z(x),Ce&&k(ot),Ce&&k(xe),Ce&&k(_t),Ce&&k(tt);for(let He=0;He<ze.length;He+=1)ze[He].d();for(let He=0;He<_e.length;He+=1)_e[He].d()}}}function lC(n,e,t){let i,s,{collection:l=new On}=e,o=200,r=[];const a=u=>t(2,o=u.code);return n.$$set=u=>{"collection"in u&&t(0,l=u.collection)},n.$$.update=()=>{n.$$.dirty&1&&t(1,i=(l==null?void 0:l.viewRule)===null),n.$$.dirty&3&&l!=null&&l.id&&(r.push({code:200,body:JSON.stringify(G.dummyCollectionRecord(l),null,2)}),i&&r.push({code:403,body:`
{
"code": 403,
"message": "Only admins can access this action.",
"data": {}
}
`}),r.push({code:404,body:`
{
"code": 404,
"message": "The requested resource wasn't found.",
"data": {}
}
`}))},t(3,s=window.location.href.substring(0,window.location.href.indexOf("/_"))||ye.baseUrl),[l,i,o,s,r,a]}class oC extends Oe{constructor(e){super(),De(this,e,lC,sC,Te,{collection:0})}}function Sd(n,e,t){const i=n.slice();return i[6]=e[t],i}function $d(n,e,t){const i=n.slice();return i[6]=e[t],i}function Cd(n,e,t){const i=n.slice();return i[11]=e[t],i}function Md(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",h(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function rC(n){let e;return{c(){e=_("span"),e.textContent="Optional",h(e,"class","label label-warning")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function aC(n){let e;return{c(){e=_("span"),e.textContent="Required",h(e,"class","label label-success")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function uC(n){var l;let e,t=((l=n[11].options)==null?void 0:l.maxSelect)>1?"ids":"id",i,s;return{c(){e=N("User "),i=N(t),s=N(".")},m(o,r){w(o,e,r),w(o,i,r),w(o,s,r)},p(o,r){var a;r&1&&t!==(t=((a=o[11].options)==null?void 0:a.maxSelect)>1?"ids":"id")&&ge(i,t)},d(o){o&&k(e),o&&k(i),o&&k(s)}}}function fC(n){var l;let e,t=((l=n[11].options)==null?void 0:l.maxSelect)>1?"ids":"id",i,s;return{c(){e=N("Relation record "),i=N(t),s=N(".")},m(o,r){w(o,e,r),w(o,i,r),w(o,s,r)},p(o,r){var a;r&1&&t!==(t=((a=o[11].options)==null?void 0:a.maxSelect)>1?"ids":"id")&&ge(i,t)},d(o){o&&k(e),o&&k(i),o&&k(s)}}}function cC(n){let e,t,i,s,l;return{c(){e=N("FormData object."),t=_("br"),i=N(`
Set to `),s=_("code"),s.textContent="null",l=N(" to delete already uploaded file(s).")},m(o,r){w(o,e,r),w(o,t,r),w(o,i,r),w(o,s,r),w(o,l,r)},p:re,d(o){o&&k(e),o&&k(t),o&&k(i),o&&k(s),o&&k(l)}}}function dC(n){let e;return{c(){e=N("URL address.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function hC(n){let e;return{c(){e=N("Email address.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function pC(n){let e;return{c(){e=N("JSON array or object.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function mC(n){let e;return{c(){e=N("Number value.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function gC(n){let e;return{c(){e=N("Plain text value.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Td(n,e){let t,i,s,l,o,r=e[11].name+"",a,u,f,c,d=G.getFieldValueType(e[11])+"",p,g,v,b;function y(O,E){return O[11].required?aC:rC}let $=y(e),S=$(e);function M(O,E){if(O[11].type==="text")return gC;if(O[11].type==="number")return mC;if(O[11].type==="json")return pC;if(O[11].type==="email")return hC;if(O[11].type==="url")return dC;if(O[11].type==="file")return cC;if(O[11].type==="relation")return fC;if(O[11].type==="user")return uC}let C=M(e),D=C&&C(e);return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("div"),S.c(),l=T(),o=_("span"),a=N(r),u=T(),f=_("td"),c=_("span"),p=N(d),g=T(),v=_("td"),D&&D.c(),b=T(),h(s,"class","inline-flex"),h(c,"class","label"),this.first=t},m(O,E){w(O,t,E),m(t,i),m(i,s),S.m(s,null),m(s,l),m(s,o),m(o,a),m(t,u),m(t,f),m(f,c),m(c,p),m(t,g),m(t,v),D&&D.m(v,null),m(t,b)},p(O,E){e=O,$!==($=y(e))&&(S.d(1),S=$(e),S&&(S.c(),S.m(s,l))),E&1&&r!==(r=e[11].name+"")&&ge(a,r),E&1&&d!==(d=G.getFieldValueType(e[11])+"")&&ge(p,d),C===(C=M(e))&&D?D.p(e,E):(D&&D.d(1),D=C&&C(e),D&&(D.c(),D.m(v,null)))},d(O){O&&k(t),S.d(),D&&D.d()}}}function Dd(n,e){let t,i=e[6].code+"",s,l,o,r;function a(){return e[5](e[6])}return{key:n,first:null,c(){t=_("button"),s=N(i),l=T(),h(t,"class","tab-item"),se(t,"active",e[1]===e[6].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),o||(r=Q(t,"click",a),o=!0)},p(u,f){e=u,f&4&&i!==(i=e[6].code+"")&&ge(s,i),f&6&&se(t,"active",e[1]===e[6].code)},d(u){u&&k(t),o=!1,r()}}}function Od(n,e){let t,i,s,l;return i=new gn({props:{content:e[6].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=T(),h(t,"class","tab-item"),se(t,"active",e[1]===e[6].code),this.first=t},m(o,r){w(o,t,r),V(i,t,null),m(t,s),l=!0},p(o,r){e=o;const a={};r&4&&(a.content=e[6].body),i.$set(a),r&6&&se(t,"active",e[1]===e[6].code)},i(o){l||(A(i.$$.fragment,o),l=!0)},o(o){P(i.$$.fragment,o),l=!1},d(o){o&&k(t),z(i)}}}function _C(n){var I,j,ee;let e,t,i,s,l,o,r,a=n[0].name+"",u,f,c,d,p,g,v,b,y=n[0].name+"",$,S,M,C,D,O,E,F,L,R,H,te,le,q,Y,W,X,ne=[],ue=new Map,Me,oe,he,be,K,Se,x,J,ve,Re,Ve,Z,fe,de,ke,Ge,ot,xe,_t,tt,$t,ze,Be,ct,ie,_e,Ue,nt,rt,Je=[],Ct=new Map,Lt,It,ht=[],We=new Map,Ce,He=n[4]&&Md();R=new Ms({props:{js:`
import PocketBase from 'pocketbase';
const client = new PocketBase('${n[3]}');
...
const data = { ... };
const record = await client.Records.create('${(I=n[0])==null?void 0:I.name}', data);
`,dart:`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${n[3]}');
...
final body = <String, dynamic>{ ... };
final record = await client.records.create('${(j=n[0])==null?void 0:j.name}', body: body);
`}});let et=(ee=n[0])==null?void 0:ee.schema;const Mt=U=>U[11].name;for(let U=0;U<et.length;U+=1){let ae=Cd(n,et,U),$e=Mt(ae);ue.set($e,ne[U]=Td($e,ae))}ke=new gn({props:{content:`
?expand=rel1,rel2.subrel21.subrel22
`}});let Ft=n[2];const Rt=U=>U[6].code;for(let U=0;U<Ft.length;U+=1){let ae=$d(n,Ft,U),$e=Rt(ae);Ct.set($e,Je[U]=Dd($e,ae))}let Et=n[2];const it=U=>U[6].code;for(let U=0;U<Et.length;U+=1){let ae=Sd(n,Et,U),$e=it(ae);We.set($e,ht[U]=Od($e,ae))}return{c(){e=_("div"),t=_("strong"),t.textContent="POST",i=T(),s=_("div"),l=_("p"),o=N("/api/collections/"),r=_("strong"),u=N(a),f=N("/records"),c=T(),He&&He.c(),d=T(),p=_("div"),g=_("p"),v=N("Create a new "),b=_("strong"),$=N(y),S=N(" record."),M=T(),C=_("p"),C.innerHTML=`Body parameters could be sent as <code>application/json</code> or
<code>multipart/form-data</code>.`,D=T(),O=_("p"),O.innerHTML="File upload is supported only via <code>multipart/form-data</code>.",E=T(),F=_("div"),F.textContent="Client SDKs example",L=T(),B(R.$$.fragment),H=T(),te=_("div"),te.textContent="Body Parameters",le=T(),q=_("table"),Y=_("thead"),Y.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="50%">Description</th></tr>`,W=T(),X=_("tbody");for(let U=0;U<ne.length;U+=1)ne[U].c();Me=T(),oe=_("div"),oe.textContent="Query parameters",he=T(),be=_("table"),K=_("thead"),K.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr>`,Se=T(),x=_("tbody"),J=_("tr"),ve=_("td"),ve.textContent="expand",Re=T(),Ve=_("td"),Ve.innerHTML='<span class="label">String</span>',Z=T(),fe=_("td"),de=N(`Auto expand relations when returning the created record. Ex.:
`),B(ke.$$.fragment),Ge=N(`
Supports up to 6-levels depth nested relations expansion. `),ot=_("br"),xe=N(`
The expanded relations will be appended to the record under the
`),_t=_("code"),_t.textContent="@expand",tt=N(" property (eg. "),$t=_("code"),$t.textContent='"@expand": {"rel1": {...}, ...}',ze=N(`). Only the
relations that the user has permissions to `),Be=_("strong"),Be.textContent="view",ct=N(" will be expanded."),ie=T(),_e=_("div"),_e.textContent="Responses",Ue=T(),nt=_("div"),rt=_("div");for(let U=0;U<Je.length;U+=1)Je[U].c();Lt=T(),It=_("div");for(let U=0;U<ht.length;U+=1)ht[U].c();h(t,"class","label label-primary"),h(s,"class","content"),h(e,"class","alert alert-success"),h(p,"class","content m-b-base"),h(F,"class","section-title"),h(te,"class","section-title"),h(q,"class","table-compact table-border m-b-lg"),h(oe,"class","section-title"),h(be,"class","table-compact table-border m-b-lg"),h(_e,"class","section-title"),h(rt,"class","tabs-header compact left"),h(It,"class","tabs-content"),h(nt,"class","tabs")},m(U,ae){w(U,e,ae),m(e,t),m(e,i),m(e,s),m(s,l),m(l,o),m(l,r),m(r,u),m(l,f),m(e,c),He&&He.m(e,null),w(U,d,ae),w(U,p,ae),m(p,g),m(g,v),m(g,b),m(b,$),m(g,S),m(p,M),m(p,C),m(p,D),m(p,O),w(U,E,ae),w(U,F,ae),w(U,L,ae),V(R,U,ae),w(U,H,ae),w(U,te,ae),w(U,le,ae),w(U,q,ae),m(q,Y),m(q,W),m(q,X);for(let $e=0;$e<ne.length;$e+=1)ne[$e].m(X,null);w(U,Me,ae),w(U,oe,ae),w(U,he,ae),w(U,be,ae),m(be,K),m(be,Se),m(be,x),m(x,J),m(J,ve),m(J,Re),m(J,Ve),m(J,Z),m(J,fe),m(fe,de),V(ke,fe,null),m(fe,Ge),m(fe,ot),m(fe,xe),m(fe,_t),m(fe,tt),m(fe,$t),m(fe,ze),m(fe,Be),m(fe,ct),w(U,ie,ae),w(U,_e,ae),w(U,Ue,ae),w(U,nt,ae),m(nt,rt);for(let $e=0;$e<Je.length;$e+=1)Je[$e].m(rt,null);m(nt,Lt),m(nt,It);for(let $e=0;$e<ht.length;$e+=1)ht[$e].m(It,null);Ce=!0},p(U,[ae]){var Ke,je,ce;(!Ce||ae&1)&&a!==(a=U[0].name+"")&&ge(u,a),U[4]?He||(He=Md(),He.c(),He.m(e,null)):He&&(He.d(1),He=null),(!Ce||ae&1)&&y!==(y=U[0].name+"")&&ge($,y);const $e={};ae&9&&($e.js=`
import PocketBase from 'pocketbase';
const client = new PocketBase('${U[3]}');
...
const data = { ... };
const record = await client.Records.create('${(Ke=U[0])==null?void 0:Ke.name}', data);
`),ae&9&&($e.dart=`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${U[3]}');
...
final body = <String, dynamic>{ ... };
final record = await client.records.create('${(je=U[0])==null?void 0:je.name}', body: body);
`),R.$set($e),ae&1&&(et=(ce=U[0])==null?void 0:ce.schema,ne=St(ne,ae,Mt,1,U,et,ue,X,Jn,Td,null,Cd)),ae&6&&(Ft=U[2],Je=St(Je,ae,Rt,1,U,Ft,Ct,rt,Jn,Dd,null,$d)),ae&6&&(Et=U[2],Ee(),ht=St(ht,ae,it,1,U,Et,We,It,Gt,Od,null,Sd),Ae())},i(U){if(!Ce){A(R.$$.fragment,U),A(ke.$$.fragment,U);for(let ae=0;ae<Et.length;ae+=1)A(ht[ae]);Ce=!0}},o(U){P(R.$$.fragment,U),P(ke.$$.fragment,U);for(let ae=0;ae<ht.length;ae+=1)P(ht[ae]);Ce=!1},d(U){U&&k(e),He&&He.d(),U&&k(d),U&&k(p),U&&k(E),U&&k(F),U&&k(L),z(R,U),U&&k(H),U&&k(te),U&&k(le),U&&k(q);for(let ae=0;ae<ne.length;ae+=1)ne[ae].d();U&&k(Me),U&&k(oe),U&&k(he),U&&k(be),z(ke),U&&k(ie),U&&k(_e),U&&k(Ue),U&&k(nt);for(let ae=0;ae<Je.length;ae+=1)Je[ae].d();for(let ae=0;ae<ht.length;ae+=1)ht[ae].d()}}}function bC(n,e,t){let i,s,{collection:l=new On}=e,o=200,r=[];const a=u=>t(1,o=u.code);return n.$$set=u=>{"collection"in u&&t(0,l=u.collection)},n.$$.update=()=>{var u,f;n.$$.dirty&1&&t(4,i=(l==null?void 0:l.createRule)===null),n.$$.dirty&1&&t(2,r=[{code:200,body:JSON.stringify(G.dummyCollectionRecord(l),null,2)},{code:400,body:`
{
"code": 400,
"message": "Failed to create record.",
"data": {
"${(f=(u=l==null?void 0:l.schema)==null?void 0:u[0])==null?void 0:f.name}": {
"code": "validation_required",
"message": "Missing required value."
}
}
}
`},{code:403,body:`
{
"code": 403,
"message": "You are not allowed to perform this request.",
"data": {}
}
`}])},t(3,s=window.location.href.substring(0,window.location.href.indexOf("/_"))||ye.baseUrl),[l,o,r,s,i,a]}class vC extends Oe{constructor(e){super(),De(this,e,bC,_C,Te,{collection:0})}}function Ed(n,e,t){const i=n.slice();return i[6]=e[t],i}function Ad(n,e,t){const i=n.slice();return i[6]=e[t],i}function Pd(n,e,t){const i=n.slice();return i[11]=e[t],i}function Ld(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",h(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function yC(n){let e;return{c(){e=_("span"),e.textContent="Optional",h(e,"class","label label-warning")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function kC(n){let e;return{c(){e=_("span"),e.textContent="Required",h(e,"class","label label-success")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function wC(n){var l;let e,t=((l=n[11].options)==null?void 0:l.maxSelect)>1?"ids":"id",i,s;return{c(){e=N("User "),i=N(t),s=N(".")},m(o,r){w(o,e,r),w(o,i,r),w(o,s,r)},p(o,r){var a;r&1&&t!==(t=((a=o[11].options)==null?void 0:a.maxSelect)>1?"ids":"id")&&ge(i,t)},d(o){o&&k(e),o&&k(i),o&&k(s)}}}function SC(n){var l;let e,t=((l=n[11].options)==null?void 0:l.maxSelect)>1?"ids":"id",i,s;return{c(){e=N("Relation record "),i=N(t),s=N(".")},m(o,r){w(o,e,r),w(o,i,r),w(o,s,r)},p(o,r){var a;r&1&&t!==(t=((a=o[11].options)==null?void 0:a.maxSelect)>1?"ids":"id")&&ge(i,t)},d(o){o&&k(e),o&&k(i),o&&k(s)}}}function $C(n){let e,t,i,s,l;return{c(){e=N("FormData object."),t=_("br"),i=N(`
Set to `),s=_("code"),s.textContent="null",l=N(" to delete already uploaded file(s).")},m(o,r){w(o,e,r),w(o,t,r),w(o,i,r),w(o,s,r),w(o,l,r)},p:re,d(o){o&&k(e),o&&k(t),o&&k(i),o&&k(s),o&&k(l)}}}function CC(n){let e;return{c(){e=N("URL address.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function MC(n){let e;return{c(){e=N("Email address.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function TC(n){let e;return{c(){e=N("JSON array or object.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function DC(n){let e;return{c(){e=N("Number value.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function OC(n){let e;return{c(){e=N("Plain text value.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Fd(n,e){let t,i,s,l,o,r=e[11].name+"",a,u,f,c,d=G.getFieldValueType(e[11])+"",p,g,v,b;function y(O,E){return O[11].required?kC:yC}let $=y(e),S=$(e);function M(O,E){if(O[11].type==="text")return OC;if(O[11].type==="number")return DC;if(O[11].type==="json")return TC;if(O[11].type==="email")return MC;if(O[11].type==="url")return CC;if(O[11].type==="file")return $C;if(O[11].type==="relation")return SC;if(O[11].type==="user")return wC}let C=M(e),D=C&&C(e);return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("div"),S.c(),l=T(),o=_("span"),a=N(r),u=T(),f=_("td"),c=_("span"),p=N(d),g=T(),v=_("td"),D&&D.c(),b=T(),h(s,"class","inline-flex"),h(c,"class","label"),this.first=t},m(O,E){w(O,t,E),m(t,i),m(i,s),S.m(s,null),m(s,l),m(s,o),m(o,a),m(t,u),m(t,f),m(f,c),m(c,p),m(t,g),m(t,v),D&&D.m(v,null),m(t,b)},p(O,E){e=O,$!==($=y(e))&&(S.d(1),S=$(e),S&&(S.c(),S.m(s,l))),E&1&&r!==(r=e[11].name+"")&&ge(a,r),E&1&&d!==(d=G.getFieldValueType(e[11])+"")&&ge(p,d),C===(C=M(e))&&D?D.p(e,E):(D&&D.d(1),D=C&&C(e),D&&(D.c(),D.m(v,null)))},d(O){O&&k(t),S.d(),D&&D.d()}}}function Id(n,e){let t,i=e[6].code+"",s,l,o,r;function a(){return e[5](e[6])}return{key:n,first:null,c(){t=_("button"),s=N(i),l=T(),h(t,"class","tab-item"),se(t,"active",e[1]===e[6].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),o||(r=Q(t,"click",a),o=!0)},p(u,f){e=u,f&4&&i!==(i=e[6].code+"")&&ge(s,i),f&6&&se(t,"active",e[1]===e[6].code)},d(u){u&&k(t),o=!1,r()}}}function Rd(n,e){let t,i,s,l;return i=new gn({props:{content:e[6].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=T(),h(t,"class","tab-item"),se(t,"active",e[1]===e[6].code),this.first=t},m(o,r){w(o,t,r),V(i,t,null),m(t,s),l=!0},p(o,r){e=o;const a={};r&4&&(a.content=e[6].body),i.$set(a),r&6&&se(t,"active",e[1]===e[6].code)},i(o){l||(A(i.$$.fragment,o),l=!0)},o(o){P(i.$$.fragment,o),l=!1},d(o){o&&k(t),z(i)}}}function EC(n){var $e,Ke,je;let e,t,i,s,l,o,r,a=n[0].name+"",u,f,c,d,p,g,v,b,y,$=n[0].name+"",S,M,C,D,O,E,F,L,R,H,te,le,q,Y,W,X,ne,ue,Me,oe,he,be=[],K=new Map,Se,x,J,ve,Re,Ve,Z,fe,de,ke,Ge,ot,xe,_t,tt,$t,ze,Be,ct,ie,_e,Ue,nt,rt,Je,Ct,Lt,It,ht,We=[],Ce=new Map,He,et,Mt=[],Ft=new Map,Rt,Et=n[4]&&Ld();H=new Ms({props:{js:`
import PocketBase from 'pocketbase';
const client = new PocketBase('${n[3]}');
...
const data = { ... };
const record = await client.Records.update('${($e=n[0])==null?void 0:$e.name}', 'RECORD_ID', data);
`,dart:`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${n[3]}');
...
final body = <String, dynamic>{ ... };
final record = await client.records.update('${(Ke=n[0])==null?void 0:Ke.name}', 'RECORD_ID', body: body);
`}});let it=(je=n[0])==null?void 0:je.schema;const I=ce=>ce[11].name;for(let ce=0;ce<it.length;ce+=1){let pe=Pd(n,it,ce),Fe=I(pe);K.set(Fe,be[ce]=Fd(Fe,pe))}tt=new gn({props:{content:`
?expand=rel1,rel2.subrel21.subrel22
`}});let j=n[2];const ee=ce=>ce[6].code;for(let ce=0;ce<j.length;ce+=1){let pe=Ad(n,j,ce),Fe=ee(pe);Ce.set(Fe,We[ce]=Id(Fe,pe))}let U=n[2];const ae=ce=>ce[6].code;for(let ce=0;ce<U.length;ce+=1){let pe=Ed(n,U,ce),Fe=ae(pe);Ft.set(Fe,Mt[ce]=Rd(Fe,pe))}return{c(){e=_("div"),t=_("strong"),t.textContent="PATCH",i=T(),s=_("div"),l=_("p"),o=N("/api/collections/"),r=_("strong"),u=N(a),f=N("/records/"),c=_("strong"),c.textContent=":id",d=T(),Et&&Et.c(),p=T(),g=_("div"),v=_("p"),b=N("Update a single "),y=_("strong"),S=N($),M=N(" record."),C=T(),D=_("p"),D.innerHTML=`Body parameters could be sent as <code>application/json</code> or
<code>multipart/form-data</code>.`,O=T(),E=_("p"),E.innerHTML="File upload is supported only via <code>multipart/form-data</code>.",F=T(),L=_("div"),L.textContent="Client SDKs example",R=T(),B(H.$$.fragment),te=T(),le=_("div"),le.textContent="Path parameters",q=T(),Y=_("table"),Y.innerHTML=`<thead><tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr></thead>
<tbody><tr><td>id</td>
<td><span class="label">String</span></td>
<td>ID of the record to update.</td></tr></tbody>`,W=T(),X=_("div"),X.textContent="Body Parameters",ne=T(),ue=_("table"),Me=_("thead"),Me.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="50%">Description</th></tr>`,oe=T(),he=_("tbody");for(let ce=0;ce<be.length;ce+=1)be[ce].c();Se=T(),x=_("div"),x.textContent="Query parameters",J=T(),ve=_("table"),Re=_("thead"),Re.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr>`,Ve=T(),Z=_("tbody"),fe=_("tr"),de=_("td"),de.textContent="expand",ke=T(),Ge=_("td"),Ge.innerHTML='<span class="label">String</span>',ot=T(),xe=_("td"),_t=N(`Auto expand relations when returning the updated record. Ex.:
`),B(tt.$$.fragment),$t=N(`
Supports up to 6-levels depth nested relations expansion. `),ze=_("br"),Be=N(`
The expanded relations will be appended to the record under the
`),ct=_("code"),ct.textContent="@expand",ie=N(" property (eg. "),_e=_("code"),_e.textContent='"@expand": {"rel1": {...}, ...}',Ue=N(`). Only the
relations that the user has permissions to `),nt=_("strong"),nt.textContent="view",rt=N(" will be expanded."),Je=T(),Ct=_("div"),Ct.textContent="Responses",Lt=T(),It=_("div"),ht=_("div");for(let ce=0;ce<We.length;ce+=1)We[ce].c();He=T(),et=_("div");for(let ce=0;ce<Mt.length;ce+=1)Mt[ce].c();h(t,"class","label label-primary"),h(s,"class","content"),h(e,"class","alert alert-warning"),h(g,"class","content m-b-base"),h(L,"class","section-title"),h(le,"class","section-title"),h(Y,"class","table-compact table-border m-b-lg"),h(X,"class","section-title"),h(ue,"class","table-compact table-border m-b-lg"),h(x,"class","section-title"),h(ve,"class","table-compact table-border m-b-lg"),h(Ct,"class","section-title"),h(ht,"class","tabs-header compact left"),h(et,"class","tabs-content"),h(It,"class","tabs")},m(ce,pe){w(ce,e,pe),m(e,t),m(e,i),m(e,s),m(s,l),m(l,o),m(l,r),m(r,u),m(l,f),m(l,c),m(e,d),Et&&Et.m(e,null),w(ce,p,pe),w(ce,g,pe),m(g,v),m(v,b),m(v,y),m(y,S),m(v,M),m(g,C),m(g,D),m(g,O),m(g,E),w(ce,F,pe),w(ce,L,pe),w(ce,R,pe),V(H,ce,pe),w(ce,te,pe),w(ce,le,pe),w(ce,q,pe),w(ce,Y,pe),w(ce,W,pe),w(ce,X,pe),w(ce,ne,pe),w(ce,ue,pe),m(ue,Me),m(ue,oe),m(ue,he);for(let Fe=0;Fe<be.length;Fe+=1)be[Fe].m(he,null);w(ce,Se,pe),w(ce,x,pe),w(ce,J,pe),w(ce,ve,pe),m(ve,Re),m(ve,Ve),m(ve,Z),m(Z,fe),m(fe,de),m(fe,ke),m(fe,Ge),m(fe,ot),m(fe,xe),m(xe,_t),V(tt,xe,null),m(xe,$t),m(xe,ze),m(xe,Be),m(xe,ct),m(xe,ie),m(xe,_e),m(xe,Ue),m(xe,nt),m(xe,rt),w(ce,Je,pe),w(ce,Ct,pe),w(ce,Lt,pe),w(ce,It,pe),m(It,ht);for(let Fe=0;Fe<We.length;Fe+=1)We[Fe].m(ht,null);m(It,He),m(It,et);for(let Fe=0;Fe<Mt.length;Fe+=1)Mt[Fe].m(et,null);Rt=!0},p(ce,[pe]){var dt,tn,jt;(!Rt||pe&1)&&a!==(a=ce[0].name+"")&&ge(u,a),ce[4]?Et||(Et=Ld(),Et.c(),Et.m(e,null)):Et&&(Et.d(1),Et=null),(!Rt||pe&1)&&$!==($=ce[0].name+"")&&ge(S,$);const Fe={};pe&9&&(Fe.js=`
import PocketBase from 'pocketbase';
const client = new PocketBase('${ce[3]}');
...
const data = { ... };
const record = await client.Records.update('${(dt=ce[0])==null?void 0:dt.name}', 'RECORD_ID', data);
`),pe&9&&(Fe.dart=`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${ce[3]}');
...
final body = <String, dynamic>{ ... };
final record = await client.records.update('${(tn=ce[0])==null?void 0:tn.name}', 'RECORD_ID', body: body);
`),H.$set(Fe),pe&1&&(it=(jt=ce[0])==null?void 0:jt.schema,be=St(be,pe,I,1,ce,it,K,he,Jn,Fd,null,Pd)),pe&6&&(j=ce[2],We=St(We,pe,ee,1,ce,j,Ce,ht,Jn,Id,null,Ad)),pe&6&&(U=ce[2],Ee(),Mt=St(Mt,pe,ae,1,ce,U,Ft,et,Gt,Rd,null,Ed),Ae())},i(ce){if(!Rt){A(H.$$.fragment,ce),A(tt.$$.fragment,ce);for(let pe=0;pe<U.length;pe+=1)A(Mt[pe]);Rt=!0}},o(ce){P(H.$$.fragment,ce),P(tt.$$.fragment,ce);for(let pe=0;pe<Mt.length;pe+=1)P(Mt[pe]);Rt=!1},d(ce){ce&&k(e),Et&&Et.d(),ce&&k(p),ce&&k(g),ce&&k(F),ce&&k(L),ce&&k(R),z(H,ce),ce&&k(te),ce&&k(le),ce&&k(q),ce&&k(Y),ce&&k(W),ce&&k(X),ce&&k(ne),ce&&k(ue);for(let pe=0;pe<be.length;pe+=1)be[pe].d();ce&&k(Se),ce&&k(x),ce&&k(J),ce&&k(ve),z(tt),ce&&k(Je),ce&&k(Ct),ce&&k(Lt),ce&&k(It);for(let pe=0;pe<We.length;pe+=1)We[pe].d();for(let pe=0;pe<Mt.length;pe+=1)Mt[pe].d()}}}function AC(n,e,t){let i,s,{collection:l=new On}=e,o=200,r=[];const a=u=>t(1,o=u.code);return n.$$set=u=>{"collection"in u&&t(0,l=u.collection)},n.$$.update=()=>{var u,f;n.$$.dirty&1&&t(4,i=(l==null?void 0:l.updateRule)===null),n.$$.dirty&1&&t(2,r=[{code:200,body:JSON.stringify(G.dummyCollectionRecord(l),null,2)},{code:400,body:`
{
"code": 400,
"message": "Failed to update record.",
"data": {
"${(f=(u=l==null?void 0:l.schema)==null?void 0:u[0])==null?void 0:f.name}": {
"code": "validation_required",
"message": "Missing required value."
}
}
}
`},{code:403,body:`
{
"code": 403,
"message": "You are not allowed to perform this request.",
"data": {}
}
`},{code:404,body:`
{
"code": 404,
"message": "The requested resource wasn't found.",
"data": {}
}
`}])},t(3,s=window.location.href.substring(0,window.location.href.indexOf("/_"))||ye.baseUrl),[l,o,r,s,i,a]}class PC extends Oe{constructor(e){super(),De(this,e,AC,EC,Te,{collection:0})}}function Nd(n,e,t){const i=n.slice();return i[6]=e[t],i}function Hd(n,e,t){const i=n.slice();return i[6]=e[t],i}function jd(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",h(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function qd(n,e){let t,i=e[6].code+"",s,l,o,r;function a(){return e[5](e[6])}return{key:n,first:null,c(){t=_("button"),s=N(i),l=T(),h(t,"class","tab-item"),se(t,"active",e[2]===e[6].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),o||(r=Q(t,"click",a),o=!0)},p(u,f){e=u,f&20&&se(t,"active",e[2]===e[6].code)},d(u){u&&k(t),o=!1,r()}}}function Vd(n,e){let t,i,s,l;return i=new gn({props:{content:e[6].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=T(),h(t,"class","tab-item"),se(t,"active",e[2]===e[6].code),this.first=t},m(o,r){w(o,t,r),V(i,t,null),m(t,s),l=!0},p(o,r){e=o,r&20&&se(t,"active",e[2]===e[6].code)},i(o){l||(A(i.$$.fragment,o),l=!0)},o(o){P(i.$$.fragment,o),l=!1},d(o){o&&k(t),z(i)}}}function LC(n){var Re,Ve;let e,t,i,s,l,o,r,a=n[0].name+"",u,f,c,d,p,g,v,b,y,$=n[0].name+"",S,M,C,D,O,E,F,L,R,H,te,le,q,Y,W,X=[],ne=new Map,ue,Me,oe=[],he=new Map,be,K=n[1]&&jd();E=new Ms({props:{js:`
import PocketBase from 'pocketbase';
const client = new PocketBase('${n[3]}');
...
await client.Records.delete('${(Re=n[0])==null?void 0:Re.name}', 'RECORD_ID');
`,dart:`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${n[3]}');
...
await client.records.delete('${(Ve=n[0])==null?void 0:Ve.name}', 'RECORD_ID');
`}});let Se=n[4];const x=Z=>Z[6].code;for(let Z=0;Z<Se.length;Z+=1){let fe=Hd(n,Se,Z),de=x(fe);ne.set(de,X[Z]=qd(de,fe))}let J=n[4];const ve=Z=>Z[6].code;for(let Z=0;Z<J.length;Z+=1){let fe=Nd(n,J,Z),de=ve(fe);he.set(de,oe[Z]=Vd(de,fe))}return{c(){e=_("div"),t=_("strong"),t.textContent="DELETE",i=T(),s=_("div"),l=_("p"),o=N("/api/collections/"),r=_("strong"),u=N(a),f=N("/records/"),c=_("strong"),c.textContent=":id",d=T(),K&&K.c(),p=T(),g=_("div"),v=_("p"),b=N("Delete a single "),y=_("strong"),S=N($),M=N(" record."),C=T(),D=_("div"),D.textContent="Client SDKs example",O=T(),B(E.$$.fragment),F=T(),L=_("div"),L.textContent="Path parameters",R=T(),H=_("table"),H.innerHTML=`<thead><tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr></thead>
<tbody><tr><td>id</td>
<td><span class="label">String</span></td>
<td>ID of the record to delete.</td></tr></tbody>`,te=T(),le=_("div"),le.textContent="Responses",q=T(),Y=_("div"),W=_("div");for(let Z=0;Z<X.length;Z+=1)X[Z].c();ue=T(),Me=_("div");for(let Z=0;Z<oe.length;Z+=1)oe[Z].c();h(t,"class","label label-primary"),h(s,"class","content"),h(e,"class","alert alert-danger"),h(g,"class","content m-b-base"),h(D,"class","section-title"),h(L,"class","section-title"),h(H,"class","table-compact table-border m-b-lg"),h(le,"class","section-title"),h(W,"class","tabs-header compact left"),h(Me,"class","tabs-content"),h(Y,"class","tabs")},m(Z,fe){w(Z,e,fe),m(e,t),m(e,i),m(e,s),m(s,l),m(l,o),m(l,r),m(r,u),m(l,f),m(l,c),m(e,d),K&&K.m(e,null),w(Z,p,fe),w(Z,g,fe),m(g,v),m(v,b),m(v,y),m(y,S),m(v,M),w(Z,C,fe),w(Z,D,fe),w(Z,O,fe),V(E,Z,fe),w(Z,F,fe),w(Z,L,fe),w(Z,R,fe),w(Z,H,fe),w(Z,te,fe),w(Z,le,fe),w(Z,q,fe),w(Z,Y,fe),m(Y,W);for(let de=0;de<X.length;de+=1)X[de].m(W,null);m(Y,ue),m(Y,Me);for(let de=0;de<oe.length;de+=1)oe[de].m(Me,null);be=!0},p(Z,[fe]){var ke,Ge;(!be||fe&1)&&a!==(a=Z[0].name+"")&&ge(u,a),Z[1]?K||(K=jd(),K.c(),K.m(e,null)):K&&(K.d(1),K=null),(!be||fe&1)&&$!==($=Z[0].name+"")&&ge(S,$);const de={};fe&9&&(de.js=`
import PocketBase from 'pocketbase';
const client = new PocketBase('${Z[3]}');
...
await client.Records.delete('${(ke=Z[0])==null?void 0:ke.name}', 'RECORD_ID');
`),fe&9&&(de.dart=`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${Z[3]}');
...
await client.records.delete('${(Ge=Z[0])==null?void 0:Ge.name}', 'RECORD_ID');
`),E.$set(de),fe&20&&(Se=Z[4],X=St(X,fe,x,1,Z,Se,ne,W,Jn,qd,null,Hd)),fe&20&&(J=Z[4],Ee(),oe=St(oe,fe,ve,1,Z,J,he,Me,Gt,Vd,null,Nd),Ae())},i(Z){if(!be){A(E.$$.fragment,Z);for(let fe=0;fe<J.length;fe+=1)A(oe[fe]);be=!0}},o(Z){P(E.$$.fragment,Z);for(let fe=0;fe<oe.length;fe+=1)P(oe[fe]);be=!1},d(Z){Z&&k(e),K&&K.d(),Z&&k(p),Z&&k(g),Z&&k(C),Z&&k(D),Z&&k(O),z(E,Z),Z&&k(F),Z&&k(L),Z&&k(R),Z&&k(H),Z&&k(te),Z&&k(le),Z&&k(q),Z&&k(Y);for(let fe=0;fe<X.length;fe+=1)X[fe].d();for(let fe=0;fe<oe.length;fe+=1)oe[fe].d()}}}function FC(n,e,t){let i,s,{collection:l=new On}=e,o=204,r=[];const a=u=>t(2,o=u.code);return n.$$set=u=>{"collection"in u&&t(0,l=u.collection)},n.$$.update=()=>{n.$$.dirty&1&&t(1,i=(l==null?void 0:l.deleteRule)===null),n.$$.dirty&3&&l!=null&&l.id&&(r.push({code:204,body:`
null
`}),r.push({code:400,body:`
{
"code": 400,
"message": "Failed to delete record. Make sure that the record is not part of a required relation reference.",
"data": {}
}
`}),i&&r.push({code:403,body:`
{
"code": 403,
"message": "Only admins can access this action.",
"data": {}
}
`}),r.push({code:404,body:`
{
"code": 404,
"message": "The requested resource wasn't found.",
"data": {}
}
`}))},t(3,s=window.location.href.substring(0,window.location.href.indexOf("/_"))||ye.baseUrl),[l,i,o,s,r,a]}class IC extends Oe{constructor(e){super(),De(this,e,FC,LC,Te,{collection:0})}}function RC(n){var p,g,v,b,y,$,S,M;let e,t,i,s,l,o,r,a,u,f,c,d;return r=new Ms({props:{js:`
import PocketBase from 'pocketbase';
const client = new PocketBase('${n[1]}');
...
// (Optionally) authenticate
client.Users.authViaEmail('test@example.com', '123456');
// Subscribe to changes in any record from the collection
client.Realtime.subscribe('${(p=n[0])==null?void 0:p.name}', function (e) {
console.log(e.record);
});
// Subscribe to changes in a single record
client.Realtime.subscribe('${(g=n[0])==null?void 0:g.name}/RECORD_ID', function (e) {
console.log(e.record);
});
// Unsubscribe
client.Realtime.unsubscribe() // remove all subscriptions
client.Realtime.unsubscribe('${(v=n[0])==null?void 0:v.name}') // remove only the collection subscription
client.Realtime.unsubscribe('${(b=n[0])==null?void 0:b.name}/RECORD_ID') // remove only the record subscription
`,dart:`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${n[1]}');
...
// (Optionally) authenticate
client.users.authViaEmail('test@example.com', '123456');
// Subscribe to changes in any record from the collection
client.realtime.subscribe('${(y=n[0])==null?void 0:y.name}', (e) {
print(e.record);
});
// Subscribe to changes in a single record
client.realtime.subscribe('${($=n[0])==null?void 0:$.name}/RECORD_ID', (e) {
print(e.record);
});
// Unsubscribe
client.realtime.unsubscribe() // remove all subscriptions
client.realtime.unsubscribe('${(S=n[0])==null?void 0:S.name}') // remove only the collection subscription
client.realtime.unsubscribe('${(M=n[0])==null?void 0:M.name}/RECORD_ID') // remove only the record subscription
`}}),c=new gn({props:{content:JSON.stringify({action:"create",record:G.dummyCollectionRecord(n[0])},null,2).replace('"action": "create"','"action": "create" // create, update or delete')}}),{c(){e=_("div"),e.innerHTML=`<strong class="label label-primary">SSE</strong>
<div class="content"><p>/api/realtime</p></div>`,t=T(),i=_("div"),i.innerHTML=`<p>Subscribe to realtime changes via Server-Sent Events (SSE).</p>
<p>Events are send for <strong>create</strong>, <strong>update</strong>
and <strong>delete</strong> record operations (see &quot;Event data format&quot; section below).</p>
<div class="alert alert-info m-t-10"><div class="icon"><i class="ri-information-line"></i></div>
<div class="contet"><p><strong>You could subscribe to a single record or to an entire collection.</strong></p>
<p>When you subscribe to a <strong>single record</strong>, the collection&#39;s
<strong>ViewRule</strong> will be used to determine whether the subscriber has access to receive
the event message.</p>
<p>When you subscribe to an <strong>entire collection</strong>, the collection&#39;s
<strong>ListRule</strong> will be used to determine whether the subscriber has access to receive
the event message.</p></div></div>`,s=T(),l=_("div"),l.textContent="Client SDKs example",o=T(),B(r.$$.fragment),a=T(),u=_("div"),u.textContent="Event data format",f=T(),B(c.$$.fragment),h(e,"class","alert"),h(i,"class","content m-b-base"),h(l,"class","section-title"),h(u,"class","section-title")},m(C,D){w(C,e,D),w(C,t,D),w(C,i,D),w(C,s,D),w(C,l,D),w(C,o,D),V(r,C,D),w(C,a,D),w(C,u,D),w(C,f,D),V(c,C,D),d=!0},p(C,[D]){var F,L,R,H,te,le,q,Y;const O={};D&3&&(O.js=`
import PocketBase from 'pocketbase';
const client = new PocketBase('${C[1]}');
...
// (Optionally) authenticate
client.Users.authViaEmail('test@example.com', '123456');
// Subscribe to changes in any record from the collection
client.Realtime.subscribe('${(F=C[0])==null?void 0:F.name}', function (e) {
console.log(e.record);
});
// Subscribe to changes in a single record
client.Realtime.subscribe('${(L=C[0])==null?void 0:L.name}/RECORD_ID', function (e) {
console.log(e.record);
});
// Unsubscribe
client.Realtime.unsubscribe() // remove all subscriptions
client.Realtime.unsubscribe('${(R=C[0])==null?void 0:R.name}') // remove only the collection subscription
client.Realtime.unsubscribe('${(H=C[0])==null?void 0:H.name}/RECORD_ID') // remove only the record subscription
`),D&3&&(O.dart=`
import 'package:pocketbase/pocketbase.dart';
final client = PocketBase('${C[1]}');
...
// (Optionally) authenticate
client.users.authViaEmail('test@example.com', '123456');
// Subscribe to changes in any record from the collection
client.realtime.subscribe('${(te=C[0])==null?void 0:te.name}', (e) {
print(e.record);
});
// Subscribe to changes in a single record
client.realtime.subscribe('${(le=C[0])==null?void 0:le.name}/RECORD_ID', (e) {
print(e.record);
});
// Unsubscribe
client.realtime.unsubscribe() // remove all subscriptions
client.realtime.unsubscribe('${(q=C[0])==null?void 0:q.name}') // remove only the collection subscription
client.realtime.unsubscribe('${(Y=C[0])==null?void 0:Y.name}/RECORD_ID') // remove only the record subscription
`),r.$set(O);const E={};D&1&&(E.content=JSON.stringify({action:"create",record:G.dummyCollectionRecord(C[0])},null,2).replace('"action": "create"','"action": "create" // create, update or delete')),c.$set(E)},i(C){d||(A(r.$$.fragment,C),A(c.$$.fragment,C),d=!0)},o(C){P(r.$$.fragment,C),P(c.$$.fragment,C),d=!1},d(C){C&&k(e),C&&k(t),C&&k(i),C&&k(s),C&&k(l),C&&k(o),z(r,C),C&&k(a),C&&k(u),C&&k(f),z(c,C)}}}function NC(n,e,t){let i,{collection:s=new On}=e;return n.$$set=l=>{"collection"in l&&t(0,s=l.collection)},t(1,i=window.location.href.substring(0,window.location.href.indexOf("/_"))||ye.baseUrl),[s,i]}class HC extends Oe{constructor(e){super(),De(this,e,NC,RC,Te,{collection:0})}}function zd(n,e,t){const i=n.slice();return i[14]=e[t],i}function Bd(n,e,t){const i=n.slice();return i[14]=e[t],i}function Ud(n){let e,t,i,s;var l=n[14].component;function o(r){return{props:{collection:r[3]}}}return l&&(t=new l(o(n))),{c(){e=_("div"),t&&B(t.$$.fragment),i=T(),h(e,"class","tab-item active")},m(r,a){w(r,e,a),t&&V(t,e,null),m(e,i),s=!0},p(r,a){const u={};if(a&8&&(u.collection=r[3]),l!==(l=r[14].component)){if(t){Ee();const f=t;P(f.$$.fragment,1,0,()=>{z(f,1)}),Ae()}l?(t=new l(o(r)),B(t.$$.fragment),A(t.$$.fragment,1),V(t,e,i)):t=null}else l&&t.$set(u)},i(r){s||(t&&A(t.$$.fragment,r),s=!0)},o(r){t&&P(t.$$.fragment,r),s=!1},d(r){r&&k(e),t&&z(t)}}}function Wd(n,e){let t,i,s,l=e[4]===e[14].id&&Ud(e);return{key:n,first:null,c(){t=st(),l&&l.c(),i=st(),this.first=t},m(o,r){w(o,t,r),l&&l.m(o,r),w(o,i,r),s=!0},p(o,r){e=o,e[4]===e[14].id?l?(l.p(e,r),r&16&&A(l,1)):(l=Ud(e),l.c(),A(l,1),l.m(i.parentNode,i)):l&&(Ee(),P(l,1,1,()=>{l=null}),Ae())},i(o){s||(A(l),s=!0)},o(o){P(l),s=!1},d(o){o&&k(t),l&&l.d(o),o&&k(i)}}}function jC(n){let e,t=[],i=new Map,s,l=n[5];const o=r=>r[14].id;for(let r=0;r<l.length;r+=1){let a=zd(n,l,r),u=o(a);i.set(u,t[r]=Wd(u,a))}return{c(){e=_("div");for(let r=0;r<t.length;r+=1)t[r].c();h(e,"class","tabs-content")},m(r,a){w(r,e,a);for(let u=0;u<t.length;u+=1)t[u].m(e,null);s=!0},p(r,a){a&56&&(l=r[5],Ee(),t=St(t,a,o,1,r,l,i,e,Gt,Wd,null,zd),Ae())},i(r){if(!s){for(let a=0;a<l.length;a+=1)A(t[a]);s=!0}},o(r){for(let a=0;a<t.length;a+=1)P(t[a]);s=!1},d(r){r&&k(e);for(let a=0;a<t.length;a+=1)t[a].d()}}}function Yd(n,e){let t,i,s=e[14].label+"",l,o,r,a;function u(){return e[9](e[14])}function f(...c){return e[10](e[14],...c)}return{key:n,first:null,c(){t=_("button"),i=_("span"),l=N(s),o=T(),h(i,"class","txt"),h(t,"tabindex","0"),h(t,"class","tab-item"),se(t,"active",e[4]===e[14].id),this.first=t},m(c,d){w(c,t,d),m(t,i),m(i,l),m(t,o),r||(a=[Q(t,"click",u),Q(t,"keydown",wp(f))],r=!0)},p(c,d){e=c,d&48&&se(t,"active",e[4]===e[14].id)},d(c){c&&k(t),r=!1,Qe(a)}}}function qC(n){let e,t,i=n[3].name+"",s,l,o,r,a=[],u=new Map,f=n[5];const c=d=>d[14].id;for(let d=0;d<f.length;d+=1){let p=Bd(n,f,d),g=c(p);u.set(g,a[d]=Yd(g,p))}return{c(){e=_("h4"),t=_("strong"),s=N(i),l=N(" records API"),o=T(),r=_("div");for(let d=0;d<a.length;d+=1)a[d].c();h(r,"class","tabs-header stretched")},m(d,p){w(d,e,p),m(e,t),m(t,s),m(e,l),w(d,o,p),w(d,r,p);for(let g=0;g<a.length;g+=1)a[g].m(r,null)},p(d,p){p&8&&i!==(i=d[3].name+"")&&ge(s,i),p&114&&(f=d[5],a=St(a,p,c,1,d,f,u,r,Jn,Yd,null,Bd))},d(d){d&&k(e),d&&k(o),d&&k(r);for(let p=0;p<a.length;p+=1)a[p].d()}}}function VC(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Close</span>',h(e,"type","button"),h(e,"class","btn btn-secondary")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[8]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function zC(n){let e,t,i={class:"overlay-panel-xl colored-header collection-panel",$$slots:{footer:[VC],header:[qC],default:[jC]},$$scope:{ctx:n}};return e=new ki({props:i}),n[11](e),e.$on("hide",n[12]),e.$on("show",n[13]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,[l]){const o={};l&524312&&(o.$$scope={dirty:l,ctx:s}),e.$set(o)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){P(e.$$.fragment,s),t=!1},d(s){n[11](null),z(e,s)}}}function BC(n,e,t){const i=[{id:"list",label:"List",component:iC},{id:"view",label:"View",component:oC},{id:"create",label:"Create",component:vC},{id:"update",label:"Update",component:PC},{id:"delete",label:"Delete",component:IC},{id:"realtime",label:"Realtime",component:HC}];let s,l=new On,o=i[0].id;function r(y){return t(3,l=y),u(i[0].id),s==null?void 0:s.show()}function a(){return s==null?void 0:s.hide()}function u(y){t(4,o=y)}function f(y,$){(y.code==="Enter"||y.code==="Space")&&(y.preventDefault(),u($))}const c=()=>a(),d=y=>u(y.id),p=(y,$)=>f($,y.id);function g(y){me[y?"unshift":"push"](()=>{s=y,t(2,s)})}function v(y){at.call(this,n,y)}function b(y){at.call(this,n,y)}return[a,u,s,l,o,i,f,r,c,d,p,g,v,b]}class UC extends Oe{constructor(e){super(),De(this,e,BC,zC,Te,{show:7,hide:0,changeTab:1})}get show(){return this.$$.ctx[7]}get hide(){return this.$$.ctx[0]}get changeTab(){return this.$$.ctx[1]}}function WC(n){let e,t,i,s=[n[3]],l={};for(let o=0;o<s.length;o+=1)l=ft(l,s[o]);return{c(){e=_("textarea"),si(e,l),se(e,"svelte-1x1pbts",!0)},m(o,r){w(o,e,r) Line truncated
<span class="txt">Upload new file</span>`,h(t,"type","file"),h(t,"class","hidden"),t.multiple=n[5],h(s,"type","button"),h(s,"class","btn btn-secondary btn-sm btn-block"),h(e,"class","list-item btn-list-item")},m(r,a){w(r,e,a),m(e,t),n[16](t),m(e,i),m(e,s),l||(o=[Q(t,"change",n[17]),Q(s,"click",n[18])],l=!0)},p(r,a){a&32&&(t.multiple=r[5])},d(r){r&&k(e),n[16](null),l=!1,Qe(o)}}}function B3(n){let e,t,i,s,l,o=n[3].name+"",r,a,u,f,c=[],d=new Map,p,g,v,b=n[4];const y=D=>D[25];for(let D=0;D<b.length;D+=1){let O=Gd(n,b,D),E=y(O);d.set(E,c[D]=Jd(E,O))}let $=n[0],S=[];for(let D=0;D<$.length;D+=1)S[D]=Xd(Zd(n,$,D));const M=D=>P(S[D],1,1,()=>{S[D]=null});let C=!n[8]&&Qd(n);return{c(){e=_("label"),t=_("i"),s=T(),l=_("span"),r=N(o),u=T(),f=_("div");for(let D=0;D<c.length;D+=1)c[D].c();p=T();for(let D=0;D<S.length;D+=1)S[D].c();g=T(),C&&C.c(),h(t,"class",i=G.getFieldTypeIcon(n[3].type)),h(l,"class","txt"),h(e,"for",a=n[21]),h(f,"class","files-list")},m(D,O){w(D,e,O),m(e,t),m(e,s),m(e,l),m(l,r),w(D,u,O),w(D,f,O);for(let E=0;E<c.length;E+=1)c[E].m(f,null);m(f,p);for(let E=0;E<S.length;E+=1)S[E].m(f,null);m(f,g),C&&C.m(f,null),n[19](f),v=!0},p(D,O){if((!v||O&8&&i!==(i=G.getFieldTypeIcon(D[3].type)))&&h(t,"class",i),(!v||O&8)&&o!==(o=D[3].name+"")&&ge(r,o),(!v||O&2097152&&a!==(a=D[21]))&&h(e,"for",a),O&1558&&(b=D[4],Ee(),c=St(c,O,y,1,D,b,d,f,Gt,Jd,p,Gd),Ae()),O&2049){$=D[0];let E;for(E=0;E<$.length;E+=1){const F=Zd(D,$,E);S[E]?(S[E].p(F,O),A(S[E],1)):(S[E]=Xd(F),S[E].c(),A(S[E],1),S[E].m(f,g))}for(Ee(),E=$.length;E<S.length;E+=1)M(E);Ae()}D[8]?C&&(C.d(1),C=null):C?C.p(D,O):(C=Qd(D),C.c(),C.m(f,null))},i(D){if(!v){for(let O=0;O<b.length;O+=1)A(c[O]);for(let O=0;O<$.length;O+=1)A(S[O]);v=!0}},o(D){for(let O=0;O<c.length;O+=1)P(c[O]);S=S.filter(Boolean);for(let O=0;O<S.length;O+=1)P(S[O]);v=!1},d(D){D&&k(e),D&&k(u),D&&k(f);for(let O=0;O<c.length;O+=1)c[O].d();Zn(S,D),C&&C.d(),n[19](null)}}}function U3(n){let e,t;return e=new Pe({props:{class:"form-field form-field-file "+(n[3].required?"required":""),name:n[3].name,$$slots:{default:[B3,({uniqueId:i})=>({21:i}),({uniqueId:i})=>i?2097152:0]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,[s]){const l={};s&8&&(l.class="form-field form-field-file "+(i[3].required?"required":"")),s&8&&(l.name=i[3].name),s&136315391&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){P(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function W3(n,e,t){let i,s,l,{record:o}=e,{value:r=""}=e,{uploadedFiles:a=[]}=e,{deletedFileIndexes:u=[]}=e,{field:f=new bn}=e,c,d;function p(E){G.removeByValue(u,E),t(1,u)}function g(E){G.pushUnique(u,E),t(1,u)}function v(E){G.isEmpty(a[E])||a.splice(E,1),t(0,a)}function b(){d==null||d.dispatchEvent(new CustomEvent("change",{detail:{value:r,uploadedFiles:a,deletedFileIndexes:u},bubbles:!0}))}const y=E=>p(E),$=E=>g(E),S=E=>v(E);function M(E){me[E?"unshift":"push"](()=>{c=E,t(6,c)})}const C=()=>{for(let E of c.files)a.push(E);t(0,a),t(6,c.value=null,c)},D=()=>c==null?void 0:c.click();function O(E){me[E?"unshift":"push"](()=>{d=E,t(7,d)})}return n.$$set=E=>{"record"in E&&t(2,o=E.record),"value"in E&&t(12,r=E.value),"uploadedFiles"in E&&t(0,a=E.uploadedFiles),"deletedFileIndexes"in E&&t(1,u=E.deletedFileIndexes),"field"in E&&t(3,f=E.field)},n.$$.update=()=>{var E,F;n.$$.dirty&1&&(Array.isArray(a)||t(0,a=G.toArray(a))),n.$$.dirty&2&&(Array.isArray(u)||t(1,u=G.toArray(u))),n.$$.dirty&8&&t(5,i=((E=f.options)==null?void 0:E.maxSelect)>1),n.$$.dirty&4128&&G.isEmpty(r)&&t(12,r=i?[]:""),n.$$.dirty&4096&&t(4,s=G.toArray(r)),n.$$.dirty&27&&t(8,l=(s.length||a.length)&&((F=f.options)==null?void 0:F.maxSelect)<=s.length+a.length-u.length),n.$$.dirty&3&&(a!==-1||u!==-1)&&b()},[a,u,o,f,s,i,c,d,l,p,g,v,r,y,$,S,M,C,D,O]}class Y3 extends Oe{constructor(e){super(),De(this,e,W3,U3,Te,{record:2,value:12,uploadedFiles:0,deletedFileIndexes:1,field:3})}}function xd(n){let e,t;return{c(){e=_("small"),t=N(n[1]),h(e,"class","block txt-hint txt-ellipsis")},m(i,s){w(i,e,s),m(e,t)},p(i,s){s&2&&ge(t,i[1])},d(i){i&&k(e)}}}function K3(n){let e,t,i,s,l,o=n[0].id+"",r,a,u,f,c=n[1]!==""&&n[1]!==n[0].id&&xd(n);return{c(){e=_("i"),i=T(),s=_("div"),l=_("div"),r=N(o),a=T(),c&&c.c(),h(e,"class","ri-information-line link-hint"),h(l,"class","block txt-ellipsis"),h(s,"class","content svelte-1gjwqyd")},m(d,p){w(d,e,p),w(d,i,p),w(d,s,p),m(s,l),m(l,r),m(s,a),c&&c.m(s,null),u||(f=Ye(t=wt.call(null,e,{text:JSON.stringify(n[0],null,2),position:"left",class:"code"})),u=!0)},p(d,[p]){t&&Vn(t.update)&&p&1&&t.update.call(null,{text:JSON.stringify(d[0],null,2),position:"left",class:"code"}),p&1&&o!==(o=d[0].id+"")&&ge(r,o),d[1]!==""&&d[1]!==d[0].id?c?c.p(d,p):(c=xd(d),c.c(),c.m(s,null)):c&&(c.d(1),c=null)},i:re,o:re,d(d){d&&k(e),d&&k(i),d&&k(s),c&&c.d(),u=!1,f()}}}function Z3(n,e,t){let i;const s=["id","created","updated","@collectionId","@collectionName"];let{item:l={}}=e;function o(r){r=r||{};const a=["name","title","label","key","email","heading","content",...ObjectLine truncated
`,h(e,"class","block txt-center txt-disabled")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function m4(n){let e,t,i;function s(o){n[31](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new h4({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function g4(n){let e,t,i;function s(o){n[30](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new i4({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function _4(n){let e,t,i,s,l;function o(f){n[27](f,n[40])}function r(f){n[28](f,n[40])}function a(f){n[29](f,n[40])}let u={field:n[40],record:n[2]};return n[2][n[40].name]!==void 0&&(u.value=n[2][n[40].name]),n[3][n[40].name]!==void 0&&(u.uploadedFiles=n[3][n[40].name]),n[4][n[40].name]!==void 0&&(u.deletedFileIndexes=n[4][n[40].name]),e=new Y3({props:u}),me.push(()=>Le(e,"value",o)),me.push(()=>Le(e,"uploadedFiles",r)),me.push(()=>Le(e,"deletedFileIndexes",a)),{c(){B(e.$$.fragment)},m(f,c){V(e,f,c),l=!0},p(f,c){n=f;const d={};c[0]&1&&(d.field=n[40]),c[0]&4&&(d.record=n[2]),!t&&c[0]&5&&(t=!0,d.value=n[2][n[40].name],Ie(()=>t=!1)),!i&&c[0]&9&&(i=!0,d.uploadedFiles=n[3][n[40].name],Ie(()=>i=!1)),!s&&c[0]&17&&(s=!0,d.deletedFileIndexes=n[4][n[40].name],Ie(()=>s=!1)),e.$set(d)},i(f){l||(A(e.$$.fragment,f),l=!0)},o(f){P(e.$$.fragment,f),l=!1},d(f){z(e,f)}}}function b4(n){let e,t,i;function s(o){n[26](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new C3({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function v4(n){let e,t,i;function s(o){n[25](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new k3({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function y4(n){let e,t,i;function s(o){n[24](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new _3({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function k4(n){let e,t,i;function s(o){n[23](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new h3({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function w4(n){let e,t,i;function s(o){n[22](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new u3({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function S4(n){let e,t,i;function s(o){n[21](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new l3({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function $4(n){let e,t,i;function s(o){n[20](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new t3({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o;const a={};r[0]&1&&(a.field=n[40]),!t&&r[0]&5&&(t=!0,a.value=n[2][n[40].name],Ie(()=>t=!1)),e.$set(a)},i(o){i||(A(e.$$.fragment,o),i=!0)},o(o){P(e.$$.fragment,o),i=!1},d(o){z(e,o)}}}function C4(n){let e,t,i;function s(o){n[19](o,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new XC({props:l}),me.push(()=>Le(e,"value",s)),{c(){B(e.$$.fragment)},m(o,r){V(e,o,r),i=!0},p(o,r){n=o; Line truncated
<span class="txt">Delete</span>`,h(e,"tabindex","0"),h(e,"class","dropdown-item closable")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[18]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function D4(n){let e,t=n[2].isNew?"New":"Edit",i,s,l=n[0].name+"",o,r,a,u,f,c=!n[2].isNew&&n[10]&&ah(n);return{c(){e=_("h4"),i=N(t),s=T(),o=N(l),r=N(" record"),a=T(),c&&c.c(),u=st()},m(d,p){w(d,e,p),m(e,i),m(e,s),m(e,o),m(e,r),w(d,a,p),c&&c.m(d,p),w(d,u,p),f=!0},p(d,p){(!f||p[0]&4)&&t!==(t=d[2].isNew?"New":"Edit")&&ge(i,t),(!f||p[0]&1)&&l!==(l=d[0].name+"")&&ge(o,l),!d[2].isNew&&d[10]?c?(c.p(d,p),p[0]&1028&&A(c,1)):(c=ah(d),c.c(),A(c,1),c.m(u.parentNode,u)):c&&(Ee(),P(c,1,1,()=>{c=null}),Ae())},i(d){f||(A(c),f=!0)},o(d){P(c),f=!1},d(d){d&&k(e),d&&k(a),c&&c.d(d),d&&k(u)}}}function O4(n){let e,t,i,s,l,o=n[2].isNew?"Create":"Save changes",r,a,u,f;return{c(){e=_("button"),t=_("span"),t.textContent="Cancel",i=T(),s=_("button"),l=_("span"),r=N(o),h(t,"class","txt"),h(e,"type","button"),h(e,"class","btn btn-secondary"),e.disabled=n[7],h(l,"class","txt"),h(s,"type","submit"),h(s,"form",n[11]),h(s,"class","btn btn-expanded"),s.disabled=a=!n[9]||n[7],se(s,"btn-loading",n[7])},m(c,d){w(c,e,d),m(e,t),w(c,i,d),w(c,s,d),m(s,l),m(l,r),u||(f=Q(e,"click",n[17]),u=!0)},p(c,d){d[0]&128&&(e.disabled=c[7]),d[0]&4&&o!==(o=c[2].isNew?"Create":"Save changes")&&ge(r,o),d[0]&640&&a!==(a=!c[9]||c[7])&&(s.disabled=a),d[0]&128&&se(s,"btn-loading",c[7])},d(c){c&&k(e),c&&k(i),c&&k(s),u=!1,f()}}}function E4(n){let e,t,i={class:"overlay-panel-lg record-panel",beforeHide:n[32],$$slots:{footer:[O4],header:[D4],default:[M4]},$$scope:{ctx:n}};return e=new ki({props:i}),n[33](e),e.$on("hide",n[34]),e.$on("show",n[35]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,l){const o={};l[0]&288&&(o.beforeHide=s[32]),l[0]&1693|l[1]&8192&&(o.$$scope={dirty:l,ctx:s}),e.$set(o)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){P(e.$$.fragment,s),t=!1},d(s){n[33](null),z(e,s)}}}function uh(n){return JSON.stringify(n)}function A4(n,e,t){let i,s,l,o;const r=rn(),a="record_"+G.randomString(5);let{collection:u}=e,f,c=null,d=new ao,p=!1,g=!1,v={},b={},y="";function $(x){return M(x),t(8,g=!0),f==null?void 0:f.show()}function S(){return f==null?void 0:f.hide()}async function M(x){Fi({}),c=x||{},t(2,d=x!=null&&x.clone?x.clone():new ao),t(3,v={}),t(4,b={}),await oi(),t(15,y=uh(d))}function C(){if(p||!l)return;t(7,p=!0);const x=O();let J;d.isNew?J=ye.Records.create(u==null?void 0:u.id,x):J=ye.Records.update(u==null?void 0:u.id,d.id,x),J.then(async ve=>{cn(d.isNew?"Successfully created record.":"Successfully updated record."),t(8,g=!1),S(),r("save",ve)}).catch(ve=>{ye.errorResponseHandler(ve)}).finally(()=>{t(7,p=!1)})}function D(){!(c!=null&&c.id)||bi("Do you really want to delete the selected record?",()=>ye.Records.delete(c["@collectionId"],c.id).then(()=>{S(),cn("Successfully deleted record."),r("delete",c)}).catch(x=>{ye.errorResponseHandler(x)}))}function O(){const x=(d==null?void 0:d.export())||{},J=new FormData,ve={};for(const Re of(u==null?void 0:u.schema)||[])ve[Re.name]=Re;for(const Re in x)!ve[Re]||(typeof x[Re]>"u"&&(x[Re]=null),G.addValueToFormData(J,Re,x[Re]));for(const Re in v){const Ve=G.toArray(v[Re]);for(const Z of Ve)J.append(Re,Z)}for(const Re in b){const Ve=G.toArray(b[Re]);for(const Z of Ve)J.append(Re+"."+Z,"")}return J}const E=()=>S(),F=()=>D();function L(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function R(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function H(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function te(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function le(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function q(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function Y(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function W(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function X(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function ne(x,J){n.$$.not_equal(v[J.name],x)&&(v[J.name]=x,t(3,v))}function ue(x,J){n.$$.not_equal(b[J.name],x)&&(b[J.name]=x,t(4,b))}function Me(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}function oe(x,J){n.$$.not_equal(d[J.name],x)&&(d[J.name]=x,t(2,d))}const he=()=>s&&g?(bi("You have unsaved changes. Do you really want to close the panel?",()=>{t(8,g=!1),S()}),!1):!0;function be(x){me[x?"unshift":"push"](()=>{f=x,t(6,f)})}function K(x){at.call(this,n,x)}function Se(x){at.call(this,n,x)}return n.$$set=x=>{"collection"in x&&t(0,u=x.collection)},n.$$.update=()=>{n.$$.dirty[0]&24&&t(16,i=G.hasNonEmptyProps(v)||G.hasNonEmptyProps(b)),n.$$.dirty[0]&98308&&t(5,s=i||y!=uh(d)),n.$$.dirty[0]&36&&t(9,l=d.isNew||s),n.$$.dirty[0]&1&&t(10,o=(u==null?void 0:u.name)!=="profiles")},[u,S,d,v,b,s,f,p,g,l,o,a,C,D,$,y,i,E,F,L,R,H,te,le,q,Y,W,X,ne,ue,Me,oe,he,be,K,Se]}class Yg extends Oe{constructor(e){super(),De(this,e,A4,E4,Te,{collection:0,show:14,hide:1},null,[-1,-1])}get show(){return this.$$.ctx[14]}get hide(){return this.$$.ctx[1]}Line truncated
`},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function kh(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Clear filters</span>',h(e,"type","button"),h(e,"class","btn btn-hint btn-expanded m-t-sm")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[28]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function wh(n,e){let t,i,s;return i=new Kg({props:{record:e[35],field:e[38]}}),{key:n,first:null,c(){t=st(),B(i.$$.fragment),this.first=t},m(l,o){w(l,t,o),V(i,l,o),s=!0},p(l,o){e=l;const r={};o[0]&8&&(r.record=e[35]),o[0]&2048&&(r.field=e[38]),i.$set(r)},i(l){s||(A(i.$$.fragment,l),s=!0)},o(l){P(i.$$.fragment,l),s=!1},d(l){l&&k(t),z(i,l)}}}function Sh(n,e){let t,i,s,l,o,r,a,u,f,c,d,p,g,v=[],b=new Map,y,$,S,M,C,D,O,E,F,L,R,H;function te(){return e[25](e[35])}p=new Ko({props:{id:e[35].id}});let le=e[11];const q=X=>X[38].name;for(let X=0;X<le.length;X+=1){let ne=_h(e,le,X),ue=q(ne);b.set(ue,v[X]=wh(ue,ne))}S=new _i({props:{date:e[35].created}}),D=new _i({props:{date:e[35].updated}});function Y(){return e[26](e[35])}function W(...X){return e[27](e[35],...X)}return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("div"),l=_("input"),a=T(),u=_("label"),c=T(),d=_("td"),B(p.$$.fragment),g=T();for(let X=0;X<v.length;X+=1)v[X].c();y=T(),$=_("td"),B(S.$$.fragment),M=T(),C=_("td"),B(D.$$.fragment),O=T(),E=_("td"),E.innerHTML='<i class="ri-arrow-right-line"></i>',F=T(),h(l,"type","checkbox"),h(l,"id",o="checkbox_"+e[35].id),l.checked=r=e[5][e[35].id],h(u,"for",f="checkbox_"+e[35].id),h(s,"class","form-field"),h(i,"class","bulk-select-col min-width"),h(d,"class","col-type-text col-field-id"),h($,"class","col-type-date col-field-created"),h(C,"class","col-type-date col-field-updated"),h(E,"class","col-type-action min-width"),h(t,"tabindex","0"),h(t,"class","row-handle"),this.first=t},m(X,ne){w(X,t,ne),m(t,i),m(i,s),m(s,l),m(s,a),m(s,u),m(t,c),m(t,d),V(p,d,null),m(t,g);for(let ue=0;ue<v.length;ue+=1)v[ue].m(t,null);m(t,y),m(t,$),V(S,$,null),m(t,M),m(t,C),V(D,C,null),m(t,O),m(t,E),m(t,F),L=!0,R||(H=[Q(l,"change",te),Q(s,"click",Gn(e[19])),Q(t,"click",Y),Q(t,"keydown",W)],R=!0)},p(X,ne){e=X,(!L||ne[0]&8&&o!==(o="checkbox_"+e[35].id))&&h(l,"id",o),(!L||ne[0]&40&&r!==(r=e[5][e[35].id]))&&(l.checked=r),(!L||ne[0]&8&&f!==(f="checkbox_"+e[35].id))&&h(u,"for",f);const ue={};ne[0]&8&&(ue.id=e[35].id),p.$set(ue),ne[0]&2056&&(le=e[11],Ee(),v=St(v,ne,q,1,e,le,b,t,Gt,wh,y,_h),Ae());const Me={};ne[0]&8&&(Me.date=e[35].created),S.$set(Me);const oe={};ne[0]&8&&(oe.date=e[35].updated),D.$set(oe)},i(X){if(!L){A(p.$$.fragment,X);for(let ne=0;ne<le.length;ne+=1)A(v[ne]);A(S.$$.fragment,X),A(D.$$.fragment,X),L=!0}},o(X){P(p.$$.fragment,X);for(let ne=0;ne<v.length;ne+=1)P(v[ne]);P(S.$$.fragment,X),P(D.$$.fragment,X),L=!1},d(X){X&&k(t),z(p);for(let ne=0;ne<v.length;ne+=1)v[ne].d();z(S),z(D),R=!1,Qe(H)}}}function $h(n){let e,t,i=n[3].length+"",s,l,o;return{c(){e=_("small"),t=N("Showing "),s=N(i),l=N(" of "),o=N(n[4]),h(e,"class","block txt-hint txt-right m-t-sm")},m(r,a){w(r,e,a),m(e,t),m(e,s),m(e,l),m(e,o)},p(r,a){a[0]&8&&i!==(i=r[3].length+"")&&ge(s,i),a[0]&16&&ge(o,r[4])},d(r){r&&k(e)}}}function Ch(n){let e,t,i,s,l=n[4]-n[3].length+"",o,r,a,u;return{c(){e=_("div"),t=_("button"),i=_("span"),s=N("Load more ("),o=N(l),r=N(")"),h(i,"class","txt"),h(t,"type","button"),h(t,"class","btn btn-lg btn-secondary btn-expanded"),se(t,"btn-loading",n[8]),se(t,"btn-disabled",n[8]),h(e,"class","block txt-center m-t-xs")},m(f,c){w(f,e,c),m(e,t),m(t,i),m(i,s),m(i,o),m(i,r),a||(u=Q(t,"click",n[29]),a=!0)},p(f,c){c[0]&24&&l!==(l=f[4]-f[3].length+"")&&ge(o,l),c[0]&256&&se(t,"btn-loading",f[8]),c[0]&256&&se(t,"btn-disabled",f[8])},d(f){f&&k(e),a=!1,u()}}}function Mh(n){let e,t,i,s,l,o,r=n[6]===1?"record":"records",a,u,f,c,d,p,g,v,b,y,$;return{c(){e=_("div"),t=_("div"),i=N("Selected "),s=_("strong"),l=N(n[6]),o=T(),a=N(r),u=T(),f=_("button"),f.innerHTML='<span class="txt">Reset</span>',c=T(),d=_("div"),p=T(),g=_("button"),g.innerHTML='<span class="txt">Delete selected</span>',h(t,"class","txt"),h(f,"type","button"),h(f,"class","btn btn-xs btn-secondary btn-outline p-l-5 p-r-5"),se(f,"btn-disabled",n[9]),h(d,"class","flex-fill"),h(g,"type","button"),h(g,"class","btn btn-sm btn-secondary btn-danger"),se(g,"btn-loading",n[9]),se(g,"btn-disabled",n[9]),h(e,"class","bulkbar")},m(S,M){w(S,e,M),m(e,t),m(t,i),m(t,s),m(s,l),m(t,o),m(t,a),m(e,u),m(e,f),m(e,c),m(e,d),m(e,p),m(e,g),b=!0,y||($=[Q(f,"click",n[30]),Q(g,"click",n[31])],y=!0)},p(S,M){(!b||M[0]&64)&&ge(l,S[6]),(!b||M[0]&64)&&r!==(r=S[6]===1?"record":"records")&&ge(a,r),M[0]&512&&se(f,"btn-disabled",S[9]),M[0]&512&&se(g,"btn-loading",S[9]),M[0]&512&&se(g,"btn-disabled",S[9])},i(S){b||(S&&Ot(()=>{v||(v=lt(e,Nn,{duration:150,y:5},!0)),v.run(1)}),b=!0)},o(S){S&&(v||(v=lt(e,Nn,{duration:150,y:5},!1)),v.run(0)),b=!1},d(S){S&&k(e),S&&v&&v.end(),y=!1,Qe($)}}}function x4(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v=[],b=new Map,y,$,S,M,C,D,O,E,F,L,R=[],H=new Map,te,le,q,Y,W,X,ne;function ue(de){n[21](de)}let Me={class:"col-type-text Line truncated
<span class="txt">API Preview</span>`,$=T(),S=_("button"),S.innerHTML=`<i class="ri-add-line"></i>
<span class="txt">New record</span>`,M=T(),B(C.$$.fragment),D=T(),B(O.$$.fragment),h(o,"class","breadcrumb-item"),h(a,"class","breadcrumb-item"),h(l,"class","breadcrumbs"),h(d,"type","button"),h(d,"class","btn btn-secondary btn-circle"),h(y,"type","button"),h(y,"class","btn btn-outline"),h(S,"type","button"),h(S,"class","btn btn-expanded"),h(b,"class","btns-group"),h(s,"class","page-header"),h(i,"class","page-wrapper")},m(Y,W){V(e,Y,W),w(Y,t,W),w(Y,i,W),m(i,s),m(s,l),m(l,o),m(l,r),m(l,a),m(a,f),m(s,c),m(s,d),m(s,p),V(g,s,null),m(s,v),m(s,b),m(b,y),m(b,$),m(b,S),m(i,M),V(C,i,null),m(i,D),V(O,i,null),L=!0,R||(H=[Ye(wt.call(null,d,{text:"Edit collection",position:"right"})),Q(d,"click",n[12]),Q(y,"click",n[14]),Q(S,"click",n[15])],R=!0)},p(Y,W){(!L||W&4)&&u!==(u=Y[2].name+"")&&ge(f,u);const X={};W&1&&(X.value=Y[0]),W&4&&(X.autocompleteCollection=Y[2]),C.$set(X);const ne={};W&4&&(ne.collection=Y[2]),!E&&W&1&&(E=!0,ne.filter=Y[0],Ie(()=>E=!1)),!F&&W&2&&(F=!0,ne.sort=Y[1],Ie(()=>F=!1)),O.$set(ne)},i(Y){L||(A(e.$$.fragment,Y),A(g.$$.fragment,Y),A(C.$$.fragment,Y),A(O.$$.fragment,Y),L=!0)},o(Y){P(e.$$.fragment,Y),P(g.$$.fragment,Y),P(C.$$.fragment,Y),P(O.$$.fragment,Y),L=!1},d(Y){z(e,Y),Y&&k(t),Y&&k(i),z(g),z(C),n[17](null),z(O),R=!1,Qe(H)}}}function iM(n){let e,t,i,s,l,o,r,a;return{c(){e=_("div"),t=_("div"),t.innerHTML='<i class="ri-database-2-line"></i>',i=T(),s=_("h1"),s.textContent="Create your first collection to add records!",l=T(),o=_("button"),o.innerHTML=`<i class="ri-add-line"></i>
<span class="txt">Create new collection</span>`,h(t,"class","icon"),h(s,"class","m-b-10"),h(o,"type","button"),h(o,"class","btn btn-expanded-lg btn-lg"),h(e,"class","placeholder-section m-b-base")},m(u,f){w(u,e,f),m(e,t),m(e,i),m(e,s),m(e,l),m(e,o),r||(a=Q(o,"click",n[11]),r=!0)},p:re,i:re,o:re,d(u){u&&k(e),r=!1,a()}}}function sM(n){let e;return{c(){e=_("div"),e.innerHTML=`<span class="loader loader-lg"></span>
<h1>Loading collections...</h1>`,h(e,"class","placeholder-section m-b-base")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function lM(n){let e,t,i,s,l,o,r,a,u;const f=[sM,iM,nM],c=[];function d(b,y){return b[8]?0:b[7].length?2:1}e=d(n),t=c[e]=f[e](n);let p={};s=new za({props:p}),n[21](s);let g={};o=new UC({props:g}),n[22](o);let v={collection:n[2]};return a=new Yg({props:v}),n[23](a),a.$on("save",n[24]),a.$on("delete",n[25]),{c(){t.c(),i=T(),B(s.$$.fragment),l=T(),B(o.$$.fragment),r=T(),B(a.$$.fragment)},m(b,y){c[e].m(b,y),w(b,i,y),V(s,b,y),w(b,l,y),V(o,b,y),w(b,r,y),V(a,b,y),u=!0},p(b,[y]){let $=e;e=d(b),e===$?c[e].p(b,y):(Ee(),P(c[$],1,1,()=>{c[$]=null}),Ae(),t=c[e],t?t.p(b,y):(t=c[e]=f[e](b),t.c()),A(t,1),t.m(i.parentNode,i));const S={};s.$set(S);const M={};o.$set(M);const C={};y&4&&(C.collection=b[2]),a.$set(C)},i(b){u||(A(t),A(s.$$.fragment,b),A(o.$$.fragment,b),A(a.$$.fragment,b),u=!0)},o(b){P(t),P(s.$$.fragment,b),P(o.$$.fragment,b),P(a.$$.fragment,b),u=!1},d(b){c[e].d(b),b&&k(i),n[21](null),z(s,b),b&&k(l),n[22](null),z(o,b),b&&k(r),n[23](null),z(a,b)}}}function oM(n,e,t){let i,s,l,o,r,a;kt(n,ii,W=>t(2,s=W)),kt(n,ks,W=>t(10,l=W)),kt(n,Fo,W=>t(26,o=W)),kt(n,Jt,W=>t(27,r=W)),kt(n,xr,W=>t(8,a=W)),_n(Jt,r="Collections",r);const u=new URLSearchParams(o);let f,c,d,p,g=u.get("filter")||"",v=u.get("sort")||"-created",b=u.get("collectionId")||"";function y(){t(9,b=s.id),t(1,v="-created"),t(0,g="")}_2(b);const $=()=>f==null?void 0:f.show(),S=()=>f==null?void 0:f.show(s),M=()=>p==null?void 0:p.load(),C=()=>c==null?void 0:c.show(s),D=()=>d==null?void 0:d.show(),O=W=>t(0,g=W.detail);function E(W){me[W?"unshift":"push"](()=>{p=W,t(6,p)})}function F(W){g=W,t(0,g)}function L(W){v=W,t(1,v)}const R=W=>d==null?void 0:d.show(W==null?void 0:W.detail);function H(W){me[W?"unshift":"push"](()=>{f=W,t(3,f)})}function te(W){me[W?"unshift":"push"](()=>{c=W,t(4,c)})}function le(W){me[W?"unshift":"push"](()=>{d=W,t(5,d)})}const q=()=>p==null?void 0:p.load(),Y=()=>p==null?void 0:p.load();return n.$$.update=()=>{if(n.$$.dirty&1024&&t(7,i=l.filter(W=>W.name!="profiles")),n.$$.dirty&516&&(s==null?void 0:s.id)&&b!=s.id&&y(),n.$$.dirty&7&&(v||g||(s==null?void 0:s.id))){const W=new URLSearchParams({collectionId:(s==null?void 0:s.id)||"",filter:g,sort:v}).toString();vi("/collections?"+W)}},[g,v,s,f,c,d,p,i,a,b,l,$,S,M,C,D,O,E,F,L,R,H,te,le,q,Y]}class rM extends Oe{constructor(e){super(),De(this,e,oM,lM,Te,{})}}function Th(n){let e,t;return e=new Pe({props:{class:"form-field disabled",name:"id",$$slots:{default:[aM,({uniqueId:i})=>({31:i}),({uniqueId:i})=>[0,i?1:0]]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s[0]&2|s[1]&3&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){P(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function aM(n){let e,t,i,s,l,o,r,a,u;return{c(){e=_("label"),t=_("i"),i=T(),s=_("span"),s.textContent="ID",o=T(),r=_("input"),h(t,"class",G.getFieldTypeIcon("primary")),h(s,"class","txt"),h(e,"for",l=n[31]),h(r,"type","text"),h(r,"id",a=n[31]),r.value=u=n[1].id,r.disabled=!0},m(f,c){w(f,e,c),m(e,t),m(e,i),m(e,s),w(f,o,c),w(f,r,c)},p(f,c){c[1]&1&&l!==(l=f[31])&&h(e,"for",l),c[1]&1&&a!==(a=f[31])&&h(r,"id",a),c[0]&2&&u!==(u=f[1].id)&&r.value!==u&&(r.value=u)},d(f){f&&k(e),f&&k(o),f&&k(r)}}}function Dh(n){let e,t,i;return{c(){e=_("div"),e.innerHTML='<i class="ri-shield-check-line"></i>',h(e,"class","form-field-addon txt-success")},m(s,l){w(s,e,l),t||(i=Ye(wt.call(null,e,"Verified")),t=!0)},d(s){s&&k(e),t=!1,i()}}}function uM(n){let e,t,i,s,l,o,r,a,u,f,c,d=n[1].verified&&Dh();return{c(){e=_("label"),t=_("i"),i=T(),s=_("span"),s.textContent="Email",o=T(),d&&d.c(),r=T(),a=_("input"),h(t,"class",G.getFieldTypeIcon("email")),h(s,"class","txt"),h(e,"for",l=n[31]),h(a,"type","email"),h(a,"autocomplete","off"),h(a,"id",u=n[31]),a.required=!0},m(p,g){w(p,e,g),m(e,t),m(e,i),m(e,s),w(p,o,g),d&&d.m(p,g),w(p,r,g),w(p,a,g),we(a,n[2]),f||(c=Q(a,"input",n[19]),f=!0)},p(p,g){g[1]&1&&l!==(l=p[31])&&h(e,"for",l),p[1].verified?d||(d=Dh(),d.c(),d.m(r.parentNode,r)):d&&(d.d(1),d=null),g[1]&1&&u!==(u=p[31])&&h(a,"id",u),g[0]&4&&a.value!==p[2]&&we(a,p[2])},d(p){p&&k(e),p&&k(o),d&&d.d(p),p&&k(r),p&&k(a),f=!1,c()}}}function Oh(n){let e,t;return e=new Pe({props:{class:"form-field form-field-toggle",$$slots:{default:[fM,({uniqueId:i})=>({31:i}),({uniqueId:i})=>[0,i?1:0]]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s[0]&8|s[1]&3&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){P(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function fM(n){let e,t,i,s,l,o,r,a;return{c(){e=_("input"),i=T(),s=_("label"),l=N("Change password"),h(e,"type","checkbox"),h(e,"id",t=n[31]),h(s,"for",o=n[31])},m(u,f){w(u,e,f),e.checked=n[3],w(u,i,f),w(u,s,f),m(s,l),r||(a=Q(e,"change",n[20]),r=!0)},p(u,f){f[1]&1&&t!==(t=u[31])&&h(e,"id",t),f[0]&8&&(e.checked=u[3]),f[1]&1&&o!==(o=u[31])&&h(s,"for",o)},d(u){u&&k(e),u&&k(i),u&&k(s),r=!1,a()}}}function Eh(Line truncated
<span class="txt">Send verification email</span>`,h(e,"type","button"),h(e,"class","dropdown-item")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[16]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function gM(n){let e,t,i,s,l=!n[1].verified&&Lh(n);return{c(){l&&l.c(),e=T(),t=_("button"),t.innerHTML=`<i class="ri-delete-bin-7-line"></i>
<span class="txt">Delete</span>`,h(t,"type","button"),h(t,"class","dropdown-item")},m(o,r){l&&l.m(o,r),w(o,e,r),w(o,t,r),i||(s=Q(t,"click",n[17]),i=!0)},p(o,r){o[1].verified?l&&(l.d(1),l=null):l?l.p(o,r):(l=Lh(o),l.c(),l.m(e.parentNode,e))},d(o){l&&l.d(o),o&&k(e),o&&k(t),i=!1,s()}}}function _M(n){let e,t,i,s,l,o,r=n[1].isNew?"Create":"Save changes",a,u,f,c,d,p=!n[1].isNew&&Ph(n);return{c(){p&&p.c(),e=T(),t=_("button"),i=_("span"),i.textContent="Cancel",s=T(),l=_("button"),o=_("span"),a=N(r),h(i,"class","txt"),h(t,"type","button"),h(t,"class","btn btn-secondary"),t.disabled=n[5],h(o,"class","txt"),h(l,"type","submit"),h(l,"form",n[11]),h(l,"class","btn btn-expanded"),l.disabled=u=!n[10]||n[5],se(l,"btn-loading",n[5])},m(g,v){p&&p.m(g,v),w(g,e,v),w(g,t,v),m(t,i),w(g,s,v),w(g,l,v),m(l,o),m(o,a),f=!0,c||(d=Q(t,"click",n[18]),c=!0)},p(g,v){g[1].isNew?p&&(Ee(),P(p,1,1,()=>{p=null}),Ae()):p?(p.p(g,v),v[0]&2&&A(p,1)):(p=Ph(g),p.c(),A(p,1),p.m(e.parentNode,e)),(!f||v[0]&32)&&(t.disabled=g[5]),(!f||v[0]&2)&&r!==(r=g[1].isNew?"Create":"Save changes")&&ge(a,r),(!f||v[0]&1056&&u!==(u=!g[10]||g[5]))&&(l.disabled=u),v[0]&32&&se(l,"btn-loading",g[5])},i(g){f||(A(p),f=!0)},o(g){P(p),f=!1},d(g){p&&p.d(g),g&&k(e),g&&k(t),g&&k(s),g&&k(l),c=!1,d()}}}function bM(n){let e,t,i={popup:!0,class:"user-panel",beforeHide:n[24],$$slots:{footer:[_M],header:[mM],default:[pM]},$$scope:{ctx:n}};return e=new ki({props:i}),n[25](e),e.$on("hide",n[26]),e.$on("show",n[27]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,l){const o={};l[0]&1088&&(o.beforeHide=s[24]),l[0]&1966|l[1]&2&&(o.$$scope={dirty:l,ctx:s}),e.$set(o)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){P(e.$$.fragment,s),t=!1},d(s){n[25](null),z(e,s)}}}function vM(n,e,t){let i;const s=rn(),l="user_"+G.randomString(5);let o,r=new uo,a=!1,u=!1,f="",c="",d="",p=!1,g=!0;function v(X){return y(X),t(6,u=!0),o==null?void 0:o.show()}function b(){return o==null?void 0:o.hide()}function y(X){Fi({}),t(1,r=X!=null&&X.clone?X.clone():new uo),$()}function $(){t(3,p=!1),t(9,g=!0),t(2,f=(r==null?void 0:r.email)||""),t(7,c=""),t(8,d="")}function S(){if(a||!i)return;t(5,a=!0);const X={email:f};(r.isNew||p)&&(X.password=c,X.passwordConfirm=d);let ne;r.isNew?ne=ye.Users.create(X):ne=ye.Users.update(r.id,X),ne.then(async ue=>{g&&C(!1),t(6,u=!1),b(),cn(r.isNew?"Successfully created user.":"Successfully updated user."),s("save",ue)}).catch(ue=>{ye.errorResponseHandler(ue)}).finally(()=>{t(5,a=!1)})}function M(){!(r!=null&&r.id)||bi("Do you really want to delete the selected user?",()=>ye.Users.delete(r.id).then(()=>{t(6,u=!1),b(),cn("Successfully deleted user."),s("delete",r)}).catch(X=>{ye.errorResponseHandler(X)}))}function C(X=!0){return ye.Users.requestVerification(r.isNew?f:r.email).then(()=>{t(6,u=!1),b(),X&&cn(`Successfully sent verification email to ${r.email}.`)}).catch(ne=>{ye.errorResponseHandler(ne)})}const D=()=>C(),O=()=>M(),E=()=>b();function F(){f=this.value,t(2,f)}function L(){p=this.checked,t(3,p)}function R(){c=this.value,t(7,c)}function H(){d=this.value,t(8,d)}function te(){g=this.checked,t(9,g)}const le=()=>i&&u?(bi("You have unsaved changes. Do you really want to close the panel?",()=>{t(6,u=!1),b()}),!1):!0;function q(X){me[X?"unshift":"push"](()=>{o=X,t(4,o)})}function Y(X){at.call(this,n,X)}function W(X){at.call(this,n,X)}return n.$$.update=()=>{n.$$.dirty[0]&14&&t(10,i=r.isNew&&f!=""||p||f!==r.email)},[b,r,f,p,o,a,u,c,d,g,i,l,S,M,C,v,D,O,E,F,L,R,H,te,le,q,Y,W]}class yM extends Oe{constructor(e){super(),De(this,e,vM,bM,Te,{show:15,hide:0},null,[-1,-1])}get show(){return this.$$.ctx[15]}get hide(){return this.$$.ctx[0]}}function Fh(n,e,t){const i=n.slice();return i[40]=e[t],i}function Ih(n,e,t){const i=n.slice();return i[43]=e[t],i}function Rh(n,e,t){const i=n.slice();return i[43]=e[t],i}function kM(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$,S,M,C,D,O,E,F,L,R=[],H=new Map,te,le,q,Y,W,X,ne,ue,Me,oe,he=[],be=new Map,K,Se,x,J,ve;u=new Vo({}),u.$on("refresh",n[17]),v=new qo({props:{value:n[3],placeholder:"Search filter, eg. verified=1",extraAutocompleteKeys:["verified","email"]}}),v.$on("submit",n[19]);function Re(ie){n[20](ie)}let Ve={class:"col-type-text col-field-id",name:"id",$$slots:{default:[SM]},$$scope:{ctx:n}};n[4]!==void 0&&(Ve.sort=n[4]),C=new en({props:Ve}),me.push(()=>Le(C,"sort",Re));function Z(ie){n[21](ie)}let fe={class:"col-type-email col-field-email",name:"email",$$slots:{default:[$M]},$$scope:{ctx:n}};n[4]!==void 0&&(fe.sort=n[4]),E=new en({props:fe}),me.push(()=>Le(E,"sort",Z));let de=n[12];const ke=ie=>ie[43].name;for(let ie=0;ie<de.length;ie+=1){let _e=Rh(n,de,ie),Ue=ke(_e);H.set(Ue,R[ie]=Nh(Ue,_e))}function Ge(ie){n[22](ie)}let ot={class:"col-type-date col-field-created",name:"created",$$slots:{default:[CM]},$$scope:{ctx:n}};n[4]!==void 0&&(ot.sort=n[4]),le=new en({props:ot}),me.push(()=>Le(le,"sort",Ge));function xe(ie){n[23](ie)}let _t={class:"col-type-date col-field-updated",name:"updated",$$slots:{default:[MM]},$$scope:{ctx:n}};n[4]!==voLine truncated
<span class="txt">New user</span>`,g=T(),B(v.$$.fragment),b=T(),y=_("div"),$=_("table"),S=_("thead"),M=_("tr"),B(C.$$.fragment),O=T(),B(E.$$.fragment),L=T();for(let ie=0;ie<R.length;ie+=1)R[ie].c();te=T(),B(le.$$.fragment),Y=T(),B(W.$$.fragment),ne=T(),ue=_("th"),Me=T(),oe=_("tbody");for(let ie=0;ie<he.length;ie+=1)he[ie].c();ze&&ze.c(),K=T(),Be&&Be.c(),Se=T(),ct&&ct.c(),h(s,"class","breadcrumb-item"),h(i,"class","breadcrumbs"),h(r,"type","button"),h(r,"class","btn btn-secondary btn-circle"),h(c,"class","flex-fill"),h(p,"type","button"),h(p,"class","btn btn-expanded"),h(t,"class","page-header"),h(ue,"class","col-type-action min-width"),h($,"class","table"),se($,"table-loading",n[10]),h(y,"class","table-wrapper"),h(e,"class","page-wrapper")},m(ie,_e){w(ie,e,_e),m(e,t),m(t,i),m(i,s),m(s,l),m(t,o),m(t,r),m(t,a),V(u,t,null),m(t,f),m(t,c),m(t,d),m(t,p),m(e,g),V(v,e,null),m(e,b),m(e,y),m(y,$),m($,S),m(S,M),V(C,M,null),m(M,O),V(E,M,null),m(M,L);for(let Ue=0;Ue<R.length;Ue+=1)R[Ue].m(M,null);m(M,te),V(le,M,null),m(M,Y),V(W,M,null),m(M,ne),m(M,ue),m($,Me),m($,oe);for(let Ue=0;Ue<he.length;Ue+=1)he[Ue].m(oe,null);ze&&ze.m(oe,null),m(e,K),Be&&Be.m(e,null),m(e,Se),ct&&ct.m(e,null),x=!0,J||(ve=[Ye(wt.call(null,r,{text:"Edit profile collection",position:"right"})),Q(r,"click",n[16]),Q(p,"click",n[18])],J=!0)},p(ie,_e){(!x||_e[0]&16384)&&ge(l,ie[14]);const Ue={};_e[0]&8&&(Ue.value=ie[3]),v.$set(Ue);const nt={};_e[1]&131072&&(nt.$$scope={dirty:_e,ctx:ie}),!D&&_e[0]&16&&(D=!0,nt.sort=ie[4],Ie(()=>D=!1)),C.$set(nt);const rt={};_e[1]&131072&&(rt.$$scope={dirty:_e,ctx:ie}),!F&&_e[0]&16&&(F=!0,rt.sort=ie[4],Ie(()=>F=!1)),E.$set(rt),_e[0]&4096&&(de=ie[12],R=St(R,_e,ke,1,ie,de,H,M,Jn,Nh,te,Rh));const Je={};_e[1]&131072&&(Je.$$scope={dirty:_e,ctx:ie}),!q&&_e[0]&16&&(q=!0,Je.sort=ie[4],Ie(()=>q=!1)),le.$set(Je);const Ct={};_e[1]&131072&&(Ct.$$scope={dirty:_e,ctx:ie}),!X&&_e[0]&16&&(X=!0,Ct.sort=ie[4],Ie(()=>X=!1)),W.$set(Ct),_e[0]&5450&&(tt=ie[1],Ee(),he=St(he,_e,$t,1,ie,tt,be,oe,Gt,Vh,null,Fh),Ae(),!tt.length&&ze?ze.p(ie,_e):tt.length?ze&&(ze.d(1),ze=null):(ze=Hh(ie),ze.c(),ze.m(oe,null))),_e[0]&1024&&se($,"table-loading",ie[10]),ie[1].length?Be?Be.p(ie,_e):(Be=zh(ie),Be.c(),Be.m(e,Se)):Be&&(Be.d(1),Be=null),ie[1].length&&ie[13]?ct?ct.p(ie,_e):(ct=Bh(ie),ct.c(),ct.m(e,null)):ct&&(ct.d(1),ct=null)},i(ie){if(!x){A(u.$$.fragment,ie),A(v.$$.fragment,ie),A(C.$$.fragment,ie),A(E.$$.fragment,ie),A(le.$$.fragment,ie),A(W.$$.fragment,ie);for(let _e=0;_e<tt.length;_e+=1)A(he[_e]);x=!0}},o(ie){P(u.$$.fragment,ie),P(v.$$.fragment,ie),P(C.$$.fragment,ie),P(E.$$.fragment,ie),P(le.$$.fragment,ie),P(W.$$.fragment,ie);for(let _e=0;_e<he.length;_e+=1)P(he[_e]);x=!1},d(ie){ie&&k(e),z(u),z(v),z(C),z(E);for(let _e=0;_e<R.length;_e+=1)R[_e].d();z(le),z(W);for(let _e=0;_e<he.length;_e+=1)he[_e].d();ze&&ze.d(),Be&&Be.d(),ct&&ct.d(),J=!1,Qe(ve)}}}function wM(n){let e;return{c(){e=_("div"),e.innerHTML=`<span class="loader loader-lg"></span>
<h1>Loading users...</h1>`,h(e,"class","placeholder-section m-b-base")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function SM(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="id",h(t,"class",G.getFieldTypeIcon("primary")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function $M(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="email",h(t,"class",G.getFieldTypeIcon("email")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function Nh(n,e){let t,i,s,l,o,r,a,u=e[43].name+"",f,c,d;return{key:n,first:null,c(){t=_("th"),i=_("div"),s=_("i"),o=T(),r=_("span"),a=N("profile."),f=N(u),h(s,"class",l=G.getFieldTypeIcon(e[43].type)),h(r,"class","txt"),h(i,"class","col-header-content"),h(t,"class",c="col-type-"+e[43].type+" col-field-"+e[43].name),h(t,"name",d=e[43].name),this.first=t},m(p,g){w(p,t,g),m(t,i),m(i,s),m(i,o),m(i,r),m(r,a),m(r,f)},p(p,g){e=p,g[0]&4096&&l!==(l=G.getFieldTypeIcon(e[43].type))&&h(s,"class",l),g[0]&4096&&u!==(u=e[43].name+"")&&ge(f,u),g[0]&4096&&c!==(c="col-type-"+e[43].type+" col-field-"+e[43].name)&&h(t,"class",c),g[0]&4096&&d!==(d=e[43].name)&&h(t,"name",d)},d(p){p&&k(t)}}}function CM(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="created",h(t,"class",G.getFieldTypeIcon("date")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function MM(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="updated",h(t,"class",G.getFieldTypeIcon("date")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function Hh(n){let e;function t(l,o){return l[10]?DM:TM}let i=t(n),s=i(n);return{c(){s.c(),e=st()},m(l,o){s.m(l,o),w(l,e,o)},p(l,o){i===(i=t(l))&&s?s.p(l,o):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},d(l){s.d(l),l&&k(e)}}}function TM(n){var r;let e,t,i,s,l,o=((r=n[3])==null?void 0:r.length)&&jh(n);return{c(){e=_("tr"),t=_("td"),i=_("h6"),i.textContent="No users found.",s=T(),o&&o.c(),l=T(),h(t,"colspan","99"),h(t,"class","txt-center txt-hint p-xs")},m(a,u){w(a,e,u),m(e,t),m(t,i),m(t,s),o&&o.m(t,null),m(e,l)},p(a,u){var f;(f=a[3])!=null&&f.length?o?o.p(a,u):(o=jh(a),o.c(),o.m(t,null)):o&&(o.d(1),o=null)},d(a){a&&k(e),o&&o.d()}}}function DM(n){let e;return{c(){e=_("tr"),e.innerHTML=`<td colspan="99" class="p-xs"><span class="skeleton-loader"></span></td>
`},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function jh(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Clear filters</span>',h(e,"type","button"),h(e,"class","btn btn-hint btn-expanded m-t-sm")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[26]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function qh(n,e){let t,i,s;return i=new Kg({props:{field:e[43],record:e[40].profile||{}}}),{key:n,first:null,c(){t=st(),B(i.$$.fragment),this.first=t},m(l,o){w(l,t,o),V(i,l,o),s=!0},p(l,o){e=l;const r={};o[0]&4096&&(r.field=e[43]),o[0]&2&&(r.record=e[40].profile||{}),i.$set(r)},i(l){s||(A(i.$$.fragment,l),s=!0)},o(l){P(i.$$.fragment,l),s=!1},d(l){l&&k(t),z(i,l)}}}function Vh(n,e){let t,i,s,l,o,r,a,u=e[40].email+"",f,c,d,p,g=e[40].verified?"Verified":"Unverified",v,b,y=[],$=new Map,S,M,C,D,O,E,F,L,R,H,te,le,q,Y,W;s=new Ko({props:{id:e[40].id}});let X=e[12];const ne=oe=>oe[43].name;for(let oe=0;oe<X.length;oe+=1){let he=Ih(e,X,oe),be=ne(he);$.set(be,y[oe]=qh(be,he))}C=new _i({props:{date:e[40].created}}),E=new _i({props:{date:e[40].updated}});function ue(){return e[24](e[40])}function Me(){return e[25](e[40])}return{key:n,first:null,c(){t=_("tr"),i=_("td"),B(s.$$.fragment),l=T(),o=_("td"),r=_("div"),a=_("span"),f=N(u),d=T(),p=_("span"),v=N(g),b=T();for(let oe=0;oe<y.length;oe+=1)y[oe].c();S=T(),M=_("td"),B(C.$$.fragment),D=T(),O=_("td"),B(E.$$.fragment),F=T(),L=_("td"),R=_("button"),R.innerHTML=`<i class="ri-user-settings-line"></i>
<span class="txt">Edit user</span>`,H=T(),te=_("button"),te.innerHTML=`<i class="ri-profile-line"></i>
<span class="txt">Edit profile</span>`,le=T(),h(i,"class","col-type-text col-field-id"),h(a,"class","txt"),h(a,"title",c=e[40].email),h(p,"class","label"),se(p,"label-success",e[40].verified),se(p,"label-warning",!e[40].verified),h(r,"class","inline-flex"),h(o,"class","col-type-email col-field-email"),h(M,"class","col-type-date col-field-created"),h(O,"class","col-type-date col-field-updated"),h(R,"type","button"),h(R,"class","btn btn-sm btn-outline"),h(te,"type","button"),h(te,"class","btn btn-sm m-l-10"),h(L,"class","col-type-action min-width"),this.first=t},m(oe,he){w(oe,t,he),m(t,i),V(s,i,null),m(t,l),m(t,o),m(o,r),m(r,a),m(a,f),m(r,d),m(r,p),m(p,v),m(t,b);for(let be=0;be<y.length;be+=1)y[be].m(t,null);m(t,S),m(t,M),V(C,M,null),m(t,D),m(t,O),V(E,O,null),m(t,F),m(t,L),m(L,R),m(L,H),m(L,te),m(t,le),q=!0,Y||(W=[Q(R,"click",Gn(ue)),Q(te,"click",Gn(Me))],Y=!0)},p(oe,he){e=oe;const be={};he[0]&2&&(be.id=e[40].id),s.$set(be),(!q||he[0]&2)&&u!==(u=e[40].email+"")&&ge(f,u),(!q||he[0]&2&&c!==(c=e[40].email))&&h(a,"title",c),(!q||he[0]&2)&&g!==(g=e[40].verified?"Verified":"Unverified")&&ge(v,g),he[0]&2&&se(p,"label-success",e[40].verified),he[0]&2&&se(p,"label-warning",!e[40].verified),he[0]&4098&&(X=e[12],Ee(),y=St(y,he,ne,1,e,X,$,t,Gt,qh,S,Ih),Ae());const K={};he[0]&2&&(K.date=e[40].created),C.$set(K);const Se={};he[0]&2&&(Se.date=e[40].updated),E.$set(Se)},i(oe){if(!q){A(s.$$.fragment,oe);for(let he=0;he<X.length;he+=1)A(y[he]);A(C.$$.fragment,oe),A(E.$$.fragment,oe),q=!0}},o(oe){P(s.$$.fragment,oe);for(let he=0;he<y.length;he+=1)P(y[he]);P(C.$$.fragment,oe),P(E.$$.fragment,oe),q=!1},d(oe){oe&&k(t),z(s);for(let he=0;he<y.length;he+=1)y[he].d();z(C),z(E),Y=!1,Qe(W)}}}function zh(n){let e,t,i=n[1].length+"",s,l,o;return{c(){e=_("small"),t=N("Showing "),s=N(i),l=N(" of "),o=N(n[2]),h(e,"class","block txt-hint txt-right m-t-sm")},m(r,a){w(r,e,a),m(e,t),m(e,s),m(e,l),m(e,o)},p(r,a){a[0]&2&&i!==(i=r[1].length+"")&&ge(s,i),a[0]&4&&ge(o,r[2])},d(r){r&&k(e)}}}function Bh(n){let e,t,i,s,l=n[2]-n[1].length+"",o,r,a,u;return{c(){e=_("div"),t=_("button"),i=_("span"),s=N("Load more ("),o=N(l),r=N(")"),h(i,"class","txt"),h(t,"type","button"),h(t,"class","btn btn-lg btn-secondary btn-expanded"),se(t,"btn-loading",n[10]),se(t,"btn-disabled",n[10]),h(e,"class","block txt-center m-t-xs")},m(f,c){w(f,e,c),m(e,t),m(t,i),m(i,s),m(i,o),m(i,r),a||(u=Q(t,"click",n[27]),a=!0)},p(f,c){c[0]&6&&l!==(l=f[2]-f[1].length+"")&&ge(o,l),c[0]&1024&&se(t,"btn-loading",f[10]),c[0]&1024&&se(t,"btn-disabled",f[10])},d(f){f&&k(e),a=!1,u()}}}function OM(n){let e,t,i,s,l,o,r,a,u;const f=[wM,kM],c=[];function d(b,y){return b[11]?0:1}e=d(n),t=c[e]=f[e](n);let p={};s=new yM({props:p}),n[28](s),s.$on("save",n[29]),s.$on("delete",n[30]);let g={};o=new za({props:g}),n[31](o),o.$on("save",n[32]);let v={collection:n[5]};return a=new Yg({props:v}),n[33](a),a.$on("save",n[34]),{c(){t.c(),i=T(),B(s.$$.fragment),l=T(),B(o.$$.fragment),r=T(),B(a.$$.fragment)},m(b,y){c[e].m(b,y),w(b,i,y),V(s,b,y),w(b,l,y),V(o,b,y),w(b,r,y),V(a,b,y),u=!0},p(b,y){let $=e;e=d(b),e===$?c[e].p(b,y):(Ee(),P(c[$],1,1,()=>{c[$]=null}),Ae(),t=c[e],t?t.p(b,y):(t=c[e]=f[e](b),t.c()),A(t,1),t.m(i.parentNode,i));const S={};s.$set(S);const M={};o.$set(M);const C={};y[0]&32&&(C.collection=b[5]),a.$set(C)},i(b){u||(A(t),A(s.$$.fragment,b),A(o.$$.fragment,b),A(a.$$.fragment,b),u=!0)},o(b){P(t),P(s.$$.fragment,b),P(o.$$.fragment,b),P(a.$$.fragment,b),u=!1},d(b){c[e].d(b),b&&k(i),n[28](null),z(s,b),b&&k(l),n[31](null),z(o,b),b&&k(r),n[33](null),z(a,b)}}}function EM(n,e,t){let i,s,l,o;kt(n,Fo,x=>t(35,l=x)),kt(n,Jt,x=>t(14,o=x)),_n(Jt,o="Users",o);const r=new URLSearchParams(l),a=["id","userId","created","updated"];let u,f,c,d=[],p=1,g=0,v=!1,b=r.get("filter")||"",y=r.get("sort")||"-created",$=new On,S=!1;O();async function M(x=1){return t(10,v=!0),x<=1&&C(),ye.Users.getList(x,50,{sort:y||"-created",filter:b}).then(J=>{t(10,v=!1),t(1,d=d.concat(J.items)),t(9,p=J.page),t(2,g=J.totalItems)}).catch(J=>{J!=null&&J.isAbort||(t(10,v=!1),console.warn(J),C(),ye.errorResponseHandler(J,!1))})}function C(){t(1,d=[]),t(9,p=1),t(2,g=0)}function D(x){const J=d.find(ve=>ve.id===(x==null?void 0:x.userId));J&&(J.profile=x),t(1,d)}async function O(){t(11,S=!0);try{t(5,$=await ye.Collections.getOne("profiles"))}catch(x){ye.errorResponseHandler(x)}t(11,S=!1)}const E=()=>f==null?void 0:f.show($),F=()=>M(),L=()=>u==null?void 0:u.show(),R=x=>t(3,b=x.detail);function H(x){y=x,t(4,y)}function te(x){y=x,t(4,y)}function le(x){y=x,t(4,y)}function q(x){y=x,t(4,y)}const Y=x=>u==null?void 0:u.show(x),W=x=>c==null?void 0:c.show(x.profile),X=()=>t(3,b=""),ne=()=>M(p+1);function ue(x){me[x?"unshift":"push"](()=>{u=x,t(6,u)})}const Me=()=>M(),oe=()=>M();function he(x){me[x?"unshift":"push"](()=>{f=x,t(7,f)})}const be=x=>t(5,$=x.detail);function K(x){me[x?"unshift":"push"](()=>{c=x,t(8,c)})}const Se=x=>D(x.detail);return n.$$.update=()=>{var x;if(n.$$.dirty[0]&24&&y!==-1&&b!==-1){const J=new URLSearchPaLine truncated
<span class="txt">Application</span>`,o=T(),r=_("a"),r.innerHTML=`<i class="ri-send-plane-2-line"></i>
<span class="txt">Mail settings</span>`,a=T(),u=_("a"),u.innerHTML=`<i class="ri-archive-drawer-line"></i>
<span class="txt">Files storage</span>`,f=T(),c=_("div"),c.textContent="Authentication",d=T(),p=_("a"),p.innerHTML=`<i class="ri-lock-password-line"></i>
<span class="txt">Auth providers</span>`,g=T(),v=_("a"),v.innerHTML=`<i class="ri-key-line"></i>
<span class="txt">Token options</span>`,b=T(),y=_("a"),y.innerHTML=`<i class="ri-shield-user-line"></i>
<span class="txt">Admins</span>`,h(i,"class","sidebar-title"),h(l,"href","/settings"),h(l,"class","sidebar-list-item"),h(r,"href","/settings/mail"),h(r,"class","sidebar-list-item"),h(u,"href","/settings/storage"),h(u,"class","sidebar-list-item"),h(c,"class","sidebar-title"),h(p,"href","/settings/auth-providers"),h(p,"class","sidebar-list-item"),h(v,"href","/settings/tokens"),h(v,"class","sidebar-list-item"),h(y,"href","/settings/admins"),h(y,"class","sidebar-list-item"),h(t,"class","sidebar-content"),h(e,"class","page-sidebar settings-sidebar")},m(M,C){w(M,e,C),m(e,t),m(t,i),m(t,s),m(t,l),m(t,o),m(t,r),m(t,a),m(t,u),m(t,f),m(t,c),m(t,d),m(t,p),m(t,g),m(t,v),m(t,b),m(t,y),$||(S=[Ye(ei.call(null,l,{path:"/settings"})),Ye(wn.call(null,l)),Ye(ei.call(null,r,{path:"/settings/mail/?.*"})),Ye(wn.call(null,r)),Ye(ei.call(null,u,{path:"/settings/storage/?.*"})),Ye(wn.call(null,u)),Ye(ei.call(null,p,{path:"/settings/auth-providers/?.*"})),Ye(wn.call(null,p)),Ye(ei.call(null,v,{path:"/settings/tokens/?.*"})),Ye(wn.call(null,v)),Ye(ei.call(null,y,{path:"/settings/admins/?.*"})),Ye(wn.call(null,y))],$=!0)},p:re,i:re,o:re,d(M){M&&k(e),$=!1,Qe(S)}}}class Ts extends Oe{constructor(e){super(),De(this,e,null,PM,Te,{})}}function Uh(n,e,t){const i=n.slice();return i[31]=e[t],i}function Wh(n){let e,t;return e=new Pe({props:{class:"form-field disabled",name:"id",$$slots:{default:[LM,({uniqueId:i})=>({30:i}),({uniqueId:i})=>[i?1073741824:0]]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s[0]&1073741826|s[1]&8&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){P(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function LM(n){let e,t,i,s,l,o,r,a,u;return{c(){e=_("label"),t=_("i"),i=T(),s=_("span"),s.textContent="ID",o=T(),r=_("input"),h(t,"class",G.getFieldTypeIcon("primary")),h(s,"class","txt"),h(e,"for",l=n[30]),h(r,"type","text"),h(r,"id",a=n[30]),r.value=u=n[1].id,r.disabled=!0},m(f,c){w(f,e,c),m(e,t),m(e,i),m(e,s),w(f,o,c),w(f,r,c)},p(f,c){c[0]&1073741824&&l!==(l=f[30])&&h(e,"for",l),c[0]&1073741824&&a!==(a=f[30])&&h(r,"id",a),c[0]&2&&u!==(u=f[1].id)&&r.value!==u&&(r.value=u)},d(f){f&&k(e),f&&k(o),f&&k(r)}}}function Yh(n){let e,t,i,s,l,o,r;function a(){return n[17](n[31])}function u(...f){return n[18](n[31],...f)}return{c(){e=_("figure"),t=_("img"),s=T(),Kn(t.src,i="/_/images/avatars/avatar"+n[31]+".svg")||h(t,"src",i),h(t,"alt","Avatar "+n[31]),h(e,"tabindex","0"),h(e,"class",l="link-fade thumb thumb-circle "+(n[31]==n[2]?"thumb-active":"thumb-sm"))},m(f,c){w(f,e,c),m(e,t),m(e,s),o||(r=[Q(e,"click",a),Q(e,"keydown",u)],o=!0)},p(f,c){n=f,c[0]&4&&l!==(l="link-fade thumb thumb-circle "+(n[31]==n[2]?"thumb-active":"thumb-sm"))&&h(e,"class",l)},d(f){f&&k(e),o=!1,Qe(r)}}}function FM(n){let e,t,i,s,l,o,r,a,u,f;return{c(){e=_("label"),t=_("i"),i=T(),s=_("span"),s.textContent="Email",o=T(),r=_("input"),h(t,"class",G.getFieldTypeIcon("email")),h(s,"class","txt"),h(e,"for",l=n[30]),h(r,"type","email"),h(r,"autocomplete","off"),h(r,"id",a=n[30]),r.required=!0},m(c,d){w(c,e,d),m(e,t),m(e,i),m(e,s),w(c,o,d),w(c,r,d),we(r,n[3]),u||(f=Q(r,"input",n[19]),u=!0)},p(c,d){d[0]&1073741824&&l!==(l=c[30])&&h(e,"for",l),d[0]&1073741824&&a!==(a=c[30])&&h(r,"id",a),d[0]&8&&r.value!==c[3]&&we(r,c[3])},d(c){c&&k(e),c&&k(o),c&&k(r),u=!1,f()}}}function Kh(n){let e,t;return e=new Pe({props:{class:"form-field form-field-toggle",$$slots:{default:[IM,({uniqueId:i})=>({30:i}),({uniqueId:i})=>[i?1073741824:0]]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s[0]&1073741840|s[1]&8&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){P(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function IM(n){let e,t,i,s,l,o,r,a;return{c(){e=_("input"),i=T(),s=_("label"),l=N("Change password"),h(e,"type","checkbox"),h(e,"id",t=n[30]),h(s,"for",o=n[30])},m(u,f){w(u,e,f),e.checked=n[4],w(u,i,f),w(u,s,f),m(s,l),r||(a=Q(e,"change",n[20]),r=!0)},p(u,f){f[0]&1073741824&&t!==(t=u[30])&&h(e,"id",t),f[0]&16&&(e.checked=u[4]),f[0]&1073741824&&o!==(o=u[30])&&h(s,"for",o)},d(u){u&&k(e),u&&k(i),u&&k(s),r=!1,a()}}}function Zh(n){let e,t,i,s,l,o,r,a,u;return s=new Pe({props:{class:"form-field required",name:"password",$$slots:{default:[RM,({uniqueId:f})=>({30:f}),({uniqueId:f})=>[f?1073741824:0]]},$$scope:{ctx:n}}}),r=new Pe({props:{class:"form-field required",name:"passwordConfirm",$$slots:{default:[NM,({uniqueId:f})=>({30:f}),({uniqueId:f})=>[f?1073741824:0]]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),i=_("div"),B(s.$$.fragment),l=T(),o=_("div"),B(r.$$.fragment),h(i,"class","col-sm-6"),h(o,"class","col-sm-6"),h(t,"class","grid"),h(e,"class","col-12")},m(f,c){w(f,e,c),m(e,t),m(t,i),V(s,i,null),m(t,l),m(t,o),V(r,o,null),u=!0},p(f,c){const d={};c[0]&1073742080|c[1]&8&&(d.$$scope={dirty:c,ctx:f}),s.$set(d);const p={};c[0]&1073742336|c[1]&8&&(p.$$scope={dirty:c,ctx:f}),r.$set(p)},i(f){u||(A(s.$$.fragment,f),A(r.$$.fragment,f),Ot(()=>{a||(a=lt(t,xt,{duration:150},!0)),a.run(Line truncated
<span class="txt">Delete</span>`,h(e,"type","button"),h(e,"class","dropdown-item")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[15]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function VM(n){let e,t,i,s,l,o,r=n[1].isNew?"Create":"Save changes",a,u,f,c,d,p=!n[1].isNew&&Gh(n);return{c(){p&&p.c(),e=T(),t=_("button"),i=_("span"),i.textContent="Cancel",s=T(),l=_("button"),o=_("span"),a=N(r),h(i,"class","txt"),h(t,"type","button"),h(t,"class","btn btn-secondary"),t.disabled=n[6],h(o,"class","txt"),h(l,"type","submit"),h(l,"form",n[11]),h(l,"class","btn btn-expanded"),l.disabled=u=!n[10]||n[6],se(l,"btn-loading",n[6])},m(g,v){p&&p.m(g,v),w(g,e,v),w(g,t,v),m(t,i),w(g,s,v),w(g,l,v),m(l,o),m(o,a),f=!0,c||(d=Q(t,"click",n[16]),c=!0)},p(g,v){g[1].isNew?p&&(Ee(),P(p,1,1,()=>{p=null}),Ae()):p?(p.p(g,v),v[0]&2&&A(p,1)):(p=Gh(g),p.c(),A(p,1),p.m(e.parentNode,e)),(!f||v[0]&64)&&(t.disabled=g[6]),(!f||v[0]&2)&&r!==(r=g[1].isNew?"Create":"Save changes")&&ge(a,r),(!f||v[0]&1088&&u!==(u=!g[10]||g[6]))&&(l.disabled=u),v[0]&64&&se(l,"btn-loading",g[6])},i(g){f||(A(p),f=!0)},o(g){P(p),f=!1},d(g){p&&p.d(g),g&&k(e),g&&k(t),g&&k(s),g&&k(l),c=!1,d()}}}function zM(n){let e,t,i={popup:!0,class:"admin-panel",beforeHide:n[23],$$slots:{footer:[VM],header:[jM],default:[HM]},$$scope:{ctx:n}};return e=new ki({props:i}),n[24](e),e.$on("hide",n[25]),e.$on("show",n[26]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,l){const o={};l[0]&1152&&(o.beforeHide=s[23]),l[0]&1886|l[1]&8&&(o.$$scope={dirty:l,ctx:s}),e.$set(o)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){P(e.$$.fragment,s),t=!1},d(s){n[24](null),z(e,s)}}}function BM(n,e,t){let i;const s=rn(),l="admin_"+G.randomString(5);let o,r=new _s,a=!1,u=!1,f=0,c="",d="",p="",g=!1;function v(W){return y(W),t(7,u=!0),o==null?void 0:o.show()}function b(){return o==null?void 0:o.hide()}function y(W){Fi({}),t(1,r=W!=null&&W.clone?W.clone():new _s),$()}function $(){t(4,g=!1),t(3,c=(r==null?void 0:r.email)||""),t(2,f=(r==null?void 0:r.avatar)||0),t(8,d=""),t(9,p="")}function S(){if(a||!i)return;t(6,a=!0);const W={email:c,avatar:f};(r.isNew||g)&&(W.password=d,W.passwordConfirm=p);let X;r.isNew?X=ye.Admins.create(W):X=ye.Admins.update(r.id,W),X.then(async ne=>{var ue;t(7,u=!1),b(),cn(r.isNew?"Successfully created admin.":"Successfully updated admin."),s("save",ne),((ue=ye.AuthStore.model)==null?void 0:ue.id)===ne.id&&ye.AuthStore.save(ye.AuthStore.token,ne)}).catch(ne=>{ye.errorResponseHandler(ne)}).finally(()=>{t(6,a=!1)})}function M(){!(r!=null&&r.id)||bi("Do you really want to delete the selected admin?",()=>ye.Admins.delete(r.id).then(()=>{t(7,u=!1),b(),cn("Successfully deleted admin."),s("delete",r)}).catch(W=>{ye.errorResponseHandler(W)}))}const C=()=>M(),D=()=>b(),O=W=>t(2,f=W),E=(W,X)=>{(X.code==="Enter"||X.code==="Space")&&(X.preventDefault(),t(2,f=W))};function F(){c=this.value,t(3,c)}function L(){g=this.checked,t(4,g)}function R(){d=this.value,t(8,d)}function H(){p=this.value,t(9,p)}const te=()=>i&&u?(bi("You have unsaved changes. Do you really want to close the panel?",()=>{t(7,u=!1),b()}),!1):!0;function le(W){me[W?"unshift":"push"](()=>{o=W,t(5,o)})}function q(W){at.call(this,n,W)}function Y(W){at.call(this,n,W)}return n.$$.update=()=>{n.$$.dirty[0]&30&&t(10,i=r.isNew&&c!=""||g||c!==r.email||f!==r.avatar)},[b,r,f,c,g,o,a,u,d,p,i,l,S,M,v,C,D,O,E,F,L,R,H,te,le,q,Y]}class UM extends Oe{constructor(e){super(),De(this,e,BM,zM,Te,{show:14,hide:0},null,[-1,-1])}get show(){return this.$$.ctx[14]}get hide(){return this.$$.ctx[0]}}function Jh(n,e,t){const i=n.slice();return i[24]=e[t],i}function WM(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="id",h(t,"class",G.getFieldTypeIcon("primary")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function YM(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="email",h(t,"class",G.getFieldTypeIcon("email")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function KM(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="created",h(t,"class",G.getFieldTypeIcon("date")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function ZM(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=T(),s=_("span"),s.textContent="updated",h(t,"class",G.getFieldTypeIcon("date")),h(s,"class","txt"),h(e,"class","col-header-content")},m(l,o){w(l,e,o),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function Xh(n){let e;function t(l,o){return l[5]?JM:GM}let i=t(n),s=i(n);return{c(){s.c(),e=st()},m(l,o){s.m(l,o),w(l,e,o)},p(l,o){i===(i=t(l))&&s?s.p(l,o):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},d(l){s.d(l),l&&k(e)}}}function GM(n){var r;let e,t,i,s,l,o=((r=n[1])==null?void 0:r.length)&&Qh(n);return{c(){e=_("tr"),t=_("td"),i=_("h6"),i.textContent="No admins found.",s=T(),o&&o.c(),l=T(),h(t,"colspan","99"),h(t,"class","txtLine truncated
`},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Qh(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Clear filters</span>',h(e,"type","button"),h(e,"class","btn btn-hint btn-expanded m-t-sm")},m(s,l){w(s,e,l),t||(i=Q(e,"click",n[17]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function xh(n){let e;return{c(){e=_("span"),e.textContent="You",h(e,"class","label label-warning m-l-5")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function ep(n,e){let t,i,s,l,o,r,a,u,f,c,d,p,g=e[24].email+"",v,b,y,$,S,M,C,D,O,E,F,L,R,H;u=new Ko({props:{id:e[24].id}});let te=e[24].id===e[7].id&&xh();S=new _i({props:{date:e[24].created}}),D=new _i({props:{date:e[24].updated}});function le(){return e[15](e[24])}function q(...Y){return e[16](e[24],...Y)}return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("figure"),l=_("img"),r=T(),a=_("td"),B(u.$$.fragment),f=T(),te&&te.c(),c=T(),d=_("td"),p=_("span"),v=N(g),y=T(),$=_("td"),B(S.$$.fragment),M=T(),C=_("td"),B(D.$$.fragment),O=T(),E=_("td"),E.innerHTML='<i class="ri-arrow-right-line"></i>',F=T(),Kn(l.src,o="/_/images/avatars/avatar"+(e[24].avatar||0)+".svg")||h(l,"src",o),h(l,"alt","Admin avatar"),h(s,"class","thumb thumb-sm thumb-circle"),h(i,"class","min-width"),h(a,"class","col-type-text col-field-id"),h(p,"class","txt txt-ellipsis"),h(p,"title",b=e[24].email),h(d,"class","col-type-email col-field-email"),h($,"class","col-type-date col-field-created"),h(C,"class","col-type-date col-field-updated"),h(E,"class","col-type-action min-width"),h(t,"tabindex","0"),h(t,"class","row-handle"),this.first=t},m(Y,W){w(Y,t,W),m(t,i),m(i,s),m(s,l),m(t,r),m(t,a),V(u,a,null),m(a,f),te&&te.m(a,null),m(t,c),m(t,d),m(d,p),m(p,v),m(t,y),m(t,$),V(S,$,null),m(t,M),m(t,C),V(D,C,null),m(t,O),m(t,E),m(t,F),L=!0,R||(H=[Q(t,"click",le),Q(t,"keydown",q)],R=!0)},p(Y,W){e=Y,(!L||W&16&&!Kn(l.src,o="/_/images/avatars/avatar"+(e[24].avatar||0)+".svg"))&&h(l,"src",o);const X={};W&16&&(X.id=e[24].id),u.$set(X),e[24].id===e[7].id?te||(te=xh(),te.c(),te.m(a,null)):te&&(te.d(1),te=null),(!L||W&16)&&g!==(g=e[24].email+"")&&ge(v,g),(!L||W&16&&b!==(b=e[24].email))&&h(p,"title",b);const ne={};W&16&&(ne.date=e[24].created),S.$set(ne);const ue={};W&16&&(ue.date=e[24].updated),D.$set(ue)},i(Y){L||(A(u.$$.fragment,Y),A(S.$$.fragment,Y),A(D.$$.fragment,Y),L=!0)},o(Y){P(u.$$.fragment,Y),P(S.$$.fragment,Y),P(D.$$.fragment,Y),L=!1},d(Y){Y&&k(t),z(u),te&&te.d(),z(S),z(D),R=!1,Qe(H)}}}function tp(n){let e,t,i=n[4].length+"",s,l,o=n[4].length+"",r;return{c(){e=_("small"),t=N("Showing "),s=N(i),l=N(" of "),r=N(o),h(e,"class","block txt-hint txt-right m-t-sm")},m(a,u){w(a,e,u),m(e,t),m(e,s),m(e,l),m(e,r)},p(a,u){u&16&&i!==(i=a[4].length+"")&&ge(s,i),u&16&&o!==(o=a[4].length+"")&&ge(r,o)},d(a){a&&k(e)}}}function XM(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$,S,M,C,D,O,E,F,L,R,H,te,le,q,Y,W,X,ne,ue,Me,oe,he,be=[],K=new Map,Se,x,J,ve,Re,Ve;e=new Ts({}),c=new Vo({}),c.$on("refresh",n[8]),y=new qo({props:{value:n[1],placeholder:"Search filter, eg. email='test@example.com'",extraAutocompleteKeys:["email"]}}),y.$on("submit",n[10]);function Z(ie){n[11](ie)}let fe={class:"col-type-text",name:"id",$$slots:{default:[WM]},$$scope:{ctx:n}};n[2]!==void 0&&(fe.sort=n[2]),F=new en({props:fe}),me.push(()=>Le(F,"sort",Z));function de(ie){n[12](ie)}let ke={class:"col-type-email col-field-email",name:"email",$$slots:{default:[YM]},$$scope:{ctx:n}};n[2]!==void 0&&(ke.sort=n[2]),H=new en({props:ke}),me.push(()=>Le(H,"sort",de));function Ge(ie){n[13](ie)}let ot={class:"col-type-date col-field-created",name:"created",$$slots:{default:[KM]},$$scope:{ctx:n}};n[2]!==void 0&&(ot.sort=n[2]),q=new en({props:ot}),me.push(()=>Le(q,"sort",Ge));function xe(ie){n[14](ie)}let _t={class:"col-type-date col-field-updated",name:"updated",$$slots:{default:[ZM]},$$scope:{ctx:n}};n[2]!==void 0&&(_t.sort=n[2]),X=new en({props:_t}),me.push(()=>Le(X,"sort",xe));let tt=n[4];const $t=ie=>ie[24].id;for(let ie=0;ie<tt.length;ie+=1){let _e=Jh(n,tt,ie),Ue=$t(_e);K.set(Ue,be[ie]=ep(Ue,_e))}let ze=null;tt.length||(ze=Xh(n));let Be=n[4].length&&tp(n),ct={};return J=new UM({props:ct}),n[18](J),J.$on("save",n[19]),J.$on("delete",n[20]),{c(){B(e.$$.fragment),t=T(),i=_("main"),s=_("header"),l=_("nav"),o=_("div"),o.textContent="Settings",r=T(),a=_("div"),u=N(n[6]),f=T(),B(c.$$.fragment),d=T(),p=_("div"),g=T(),v=_("button"),v.innerHTML=`<i class="ri-add-line"></i>
<span class="txt">New admin</span>`,b=T(),B(y.$$.fragment),$=T(),S=_("div"),M=_("table"),C=_("thead"),D=_("tr"),O=_("th"),E=T(),B(F.$$.fragment),R=T(),B(H.$$.fragment),le=T(),B(q.$$.fragment),W=T(),B(X.$$.fragment),ue=T(),Me=_("th"),oe=T(),he=_("tbody");for(let ie=0;ie<be.length;ie+=1)be[ie].c();ze&&ze.c(),Se=T(),Be&&Be.c(),x=T(),B(J.$$.fragment),h(o,"class","breadcrumb-item"),h(a,"class","breadcrumb-item"),h(l,"class","breadcrumbs"),h(p,"class","flex-fill"),h(v,"type","button"),h(v,"class","btn btn-expanded"),h(s,"class","page-header"),h(O,"class","min-width"),h(Me,"class","col-type-action min-width"),h(M,"class","table"),se(M,"table-loading",n[5]),h(S,"class","table-wrapper"),h(i,"class","page-wrapper")},m(ie,_e){V(e,ie,_e),w(ie,t,_e),w(ie,i,_e),m(i,s),m(s,l),m(l,o),m(l,r),m(l,a),m(a,u),m(s,f),V(c,s,null),m(s,d),m(s,p),m(s,g),m(s,v),m(i,b),V(y,i,null),m(i,$),m(i,S),m(S,M),m(M,C),m(C,D),m(D,O),m(D,E),V(F,D,null),m(D,R),V(H,D,null),m(D,le),V(q,D,null),m(D,W),V(X,D,null),m(D,ue),m(D,Me),m(M,oe),m(M,he);for(let Ue=0;Ue<be.length;Ue+=1)be[Ue].m(he,null);ze&&ze.m(he,null),m(i,Se),Be&&Be.m(i,null),w(ie,x,_e),V(J,ie,_e),ve=!0,Re||(Ve=Q(v,"click",n[9]),Re=!0)},p(ie,[_e]){(!ve||_e&64)&&ge(u,ie[6]);const Ue={};_e&2&&(Ue.value=ie[1]),y.$set(Ue);const nt={};_e&134217728&&(nt.$$scope={dirty:_e,ctx:ie}),!L&&_e&4&&(L=!0,nt.sort=ie[2],Ie(()=>L=!1)),F.$set(nt);const rt={};_e&134217728&&(rt.$$scope={dirty:_e,ctx:ie}),!te&&_e&4&&(te=!0,rt.sort=ie[2],Ie(()=>te=!1)),H.$set(rt);const Je={};_e&134217728&&(Je.$$scope={dirty:_e,ctx:ie}),!Y&&_e&4&&(Y=!0,Je.sort=ie[2],Ie(()=>Y=!1)),q.$set(Je);const Ct={};_e&134217728&&(Ct.$$scope={dirty:_e,ctx:ie}),!ne&&_e&4&&(ne=!0,Ct.sort=ie[2],Ie(()=>ne=!1)),X.$set(Ct),_e&186&&(tt=ie[4],Ee(),be=St(be,_e,$t,1,ie,tt,K,he,Gt,ep,null,Jh),Ae(),!tt.length&&ze?ze.p(ie,_e):tt.length?ze&&(ze.d(1),ze=null):(ze=Xh(ie),ze.c(),ze.m(he,null))),_e&32&&se(M,"table-loading",ie[5]),ie[4].length?Be?Be.p(ie,_e):(Be=tp(ie),Be.c(),Be.m(i,null)):Be&&(Be.d(1),Be=null);const Lt={};J.$set(Lt)},i(ie){if(!ve){A(e.$$.fragment,ie),A(c.$$.fragment,ie),A(y.$$.fragment,ie),A(F.$$.fragment,ie),A(H.$$.fragment,ie),A(q.$$.fragment,ie),A(X.$$.fragment,ie);for(let _e=0;_e<tt.length;_e+=1)A(be[_e]);A(J.$$.fragment,ie),ve=!0}},o(ie){P(e.$$.fragment,ie),P(c.$$.fragment,ie),P(y.$$.fragment,ie),P(F.$$.fragment,ie),P(H.$$.fragment,ie),P(q.$$.fragment,ie),P(X.$$.fragment,ie);for(let _e=0;_e<be.length;_e+=1)P(be[_e]);P(J.$$.fragment,ie),ve=!1},d(ie){z(e,ie),ie&&k(t),ie&&k(i),z(c),z(y),z(F),z(H),z(q),z(X);for(let _e=0;_e<be.length;_e+=1)be[_e].d();ze&&ze.d(),Be&&Be.d(),ie&&k(x),n[18](null),z(J,ie),Re=!1,Ve()}}}function QM(n,e,t){let i,s,l;kt(n,Fo,R=>t(21,i=R)),kt(n,Jt,R=>t(6,s=R)),kt(n,ga,R=>t(7,l=R)),_n(Jt,s="Admins",s);const o=new URLSearchParams(i);let r,a=[],u=!1,f=o.get("filter")||"",c=o.get("sort")||"-created";function d(){return t(5,u=!0),t(4,a=[]),ye.Admins.getFullList(100,{sort:c||"-created",filter:f}).then(R=>{t(4,a=R),t(5,u=!1)}).catch(R=>{R!=null&&R.isAbort||(t(5,u=!1),console.warn(R),p(),ye.errorResponseHandler(R,!1))})}function p(){t(4,a=[])}const g=()=>d(),v=()=>r==null?void 0:r.show(),b=R=>t(1,f=R.detail);function y(R){c=R,t(2,c)}function $(R){c=R,t(2,c)}function S(R){c=R,t(2,c)}function M(R){c=R,t(2,c)}const C=R=>r==null?void 0:r.show(R),D=(R,H)=>{(H.code==="Enter"||H.code==="Space")&&(H.preventDefault(),r==null||r.show(R))},O=()=>t(1,f="");function E(R){me[R?"unshift":"push"](()=>{r=R,t(3,r)})}const F=()=>d(),L=()=>d();return n.$$.update=()=>{if(n.$$.dirty&6&&c!==-1&&f!==-1){const R=new URLSearchParams({filter:f,sort:c}).toString();vi("/settings/admins?"+R),d()}},[d,f,c,r,a,u,s,l,g,v,b,y,$,S,M,C,D,O,E,F,L]}class xM extends Oe{constructor(e){super(),De(this,e,QM,XM,Te,{loadAdmins:0})}get loadAdmins(){return this.$$.ctx[0]}}function eT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Email"),s=T(),l=_("input"),h(e,"for",i=n[8]),h(l,"type","email"),h(l,"id",o=n[8]),l.required=!0,l.autofocus=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0]),l.focus(),r||(a=Q(l,"input",n[4]),r=!0)},p(u,f){f&256&&i!==(i=u[8])&&h(e,"for",i),f&256&&o!==(o=u[8])&&h(l,"id",o),f&1&&l.value!==u[0]&&we(l,u[0])},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function tT(n){let e,t,i,s,l,o,r,a,u,f,c;return{c(){e=_("label"),t=N("Password"),s=T(),l=_("input"),r=T(),a=_("div"),u=_("a"),u.textContent="Forgotten password?",h(e,"for",i=n[8]),h(l,"type","password"),h(l,"id",o=n[8]),l.required=!0,h(u,"href","/request-password-reset"),h(u,"class","link-hint"),h(a,"class","help-block")},m(d,p){w(d,e,p),m(e,t),w(d,s,p),w(d,l,p),we(l,n[1]),w(d,r,p),w(d,a,p),m(a,u),f||(c=[Q(l,"input",n[5]),Ye(wn.call(null,u))],f=!0)},p(d,p){p&256&&i!==(i=d[8])&&h(e,"for",i),p&256&&o!==(o=d[8])&&h(l,"id",o),p&2&&l.value!==d[1]&&we(l,d[1])},d(d){d&&k(e),d&&k(s),d&&k(l),d&&k(r),d&&k(a),f=!1,Qe(c)}}}function nT(n){let e,t,i,s,l,o,r,a,u,f,c;return s=new Pe({props:{class:"form-field required",name:"email",$$slots:{default:[eT,({uniqueId:d})=>({8:d}),({uniqueId:d})=>d?256:0]},$Line truncated
<i class="ri-arrow-right-line"></i>`,h(t,"class","content txt-center m-b-base"),h(a,"type","submit"),h(a,"class","btn btn-lg btn-block btn-next"),se(a,"btn-disabled",n[2]),se(a,"btn-loading",n[2]),h(e,"class","block")},m(d,p){w(d,e,p),m(e,t),m(e,i),V(s,e,null),m(e,l),V(o,e,null),m(e,r),m(e,a),u=!0,f||(c=Q(e,"submit",Wt(n[3])),f=!0)},p(d,p){const g={};p&769&&(g.$$scope={dirty:p,ctx:d}),s.$set(g);const v={};p&770&&(v.$$scope={dirty:p,ctx:d}),o.$set(v),p&4&&se(a,"btn-disabled",d[2]),p&4&&se(a,"btn-loading",d[2])},i(d){u||(A(s.$$.fragment,d),A(o.$$.fragment,d),u=!0)},o(d){P(s.$$.fragment,d),P(o.$$.fragment,d),u=!1},d(d){d&&k(e),z(s),z(o),f=!1,c()}}}function iT(n){let e,t;return e=new Vm({props:{$$slots:{default:[nT]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,[s]){const l={};s&519&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){P(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function sT(n,e,t){let i;kt(n,Fo,c=>t(6,i=c));const s=new URLSearchParams(i);let l=s.get("demoEmail")||"",o=s.get("demoPassword")||"",r=!1;function a(){if(!r)return t(2,r=!0),ye.Admins.authViaEmail(l,o).then(()=>{vi("/")}).catch(()=>{Rm("Invalid login credentials.")}).finally(()=>{t(2,r=!1)})}function u(){l=this.value,t(0,l)}function f(){o=this.value,t(1,o)}return[l,o,r,a,u,f]}class lT extends Oe{constructor(e){super(),De(this,e,sT,iT,Te,{})}}function oT(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$;return i=new Pe({props:{class:"form-field required",name:"meta.appName",$$slots:{default:[aT,({uniqueId:S})=>({14:S}),({uniqueId:S})=>S?16384:0]},$$scope:{ctx:n}}}),o=new Pe({props:{class:"form-field required",name:"meta.appUrl",$$slots:{default:[uT,({uniqueId:S})=>({14:S}),({uniqueId:S})=>S?16384:0]},$$scope:{ctx:n}}}),a=new Pe({props:{class:"form-field required",name:"logs.maxDays",$$slots:{default:[fT,({uniqueId:S})=>({14:S}),({uniqueId:S})=>S?16384:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=T(),l=_("div"),B(o.$$.fragment),r=T(),B(a.$$.fragment),u=T(),f=_("div"),c=_("div"),d=T(),p=_("button"),g=_("span"),g.textContent="Save changes",h(t,"class","col-lg-6"),h(l,"class","col-lg-6"),h(c,"class","flex-fill"),h(g,"class","txt"),h(p,"type","submit"),h(p,"class","btn btn-expanded"),p.disabled=v=!n[3]||n[2],se(p,"btn-loading",n[2]),h(f,"class","col-lg-12 flex"),h(e,"class","grid")},m(S,M){w(S,e,M),m(e,t),V(i,t,null),m(e,s),m(e,l),V(o,l,null),m(e,r),V(a,e,null),m(e,u),m(e,f),m(f,c),m(f,d),m(f,p),m(p,g),b=!0,y||($=Q(p,"click",n[9]),y=!0)},p(S,M){const C={};M&49153&&(C.$$scope={dirty:M,ctx:S}),i.$set(C);const D={};M&49153&&(D.$$scope={dirty:M,ctx:S}),o.$set(D);const O={};M&49153&&(O.$$scope={dirty:M,ctx:S}),a.$set(O),(!b||M&12&&v!==(v=!S[3]||S[2]))&&(p.disabled=v),M&4&&se(p,"btn-loading",S[2])},i(S){b||(A(i.$$.fragment,S),A(o.$$.fragment,S),A(a.$$.fragment,S),b=!0)},o(S){P(i.$$.fragment,S),P(o.$$.fragment,S),P(a.$$.fragment,S),b=!1},d(S){S&&k(e),z(i),z(o),z(a),y=!1,$()}}}function rT(n){let e;return{c(){e=_("div"),h(e,"class","loader")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function aT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Application name"),s=T(),l=_("input"),h(e,"for",i=n[14]),h(l,"type","text"),h(l,"id",o=n[14]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].meta.appName),r||(a=Q(l,"input",n[6]),r=!0)},p(u,f){f&16384&&i!==(i=u[14])&&h(e,"for",i),f&16384&&o!==(o=u[14])&&h(l,"id",o),f&1&&l.value!==u[0].meta.appName&&we(l,u[0].meta.appName)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function uT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Application url"),s=T(),l=_("input"),h(e,"for",i=n[14]),h(l,"type","text"),h(l,"id",o=n[14]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].meta.appUrl),r||(a=Q(l,"input",n[7]),r=!0)},p(u,f){f&16384&&i!==(i=u[14])&&h(e,"for",i),f&16384&&o!==(o=u[14])&&h(l,"id",o),f&1&&l.value!==u[0].meta.appUrl&&we(l,u[0].meta.appUrl)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function fT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Logs max days retention"),s=T(),l=_("input"),h(e,"for",i=n[14]),h(l,"type","number"),h(l,"id",o=n[14]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].logs.maxDays),r||(a=Q(l,"input",n[8]),r=!0)},p(u,f){f&16384&&i!==(i=u[14])&&h(e,"for",i),f&16384&&o!==(o=u[14])&&h(l,"id",o),f&1&&Pt(l.value)!==u[0].logs.maxDays&&we(l,u[0].logs.maxDays)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function cT(n){let e,t,i,s,l,o,r,a,u,f,c,d;e=new Ts({});const p=[rT,oT],g=[];function v(b,y){return b[1]?0:1}return a=v(n),u=g[a]=p[a](n),{c(){B(e.$$.fragment),t=T(),i=_("main"),s=_("header"),s.innerHTML=`<nav class="breadcrumbs"><div class="breadcrumb-item">Settings</div>
<div class="breadcrumb-item">Application</div></nav>`,l=T(),o=_("div"),r=_("form"),u.c(),h(s,"class","page-header"),h(r,"class","panel"),h(r,"autocomplete","off"),h(o,"class","wrapper"),h(i,"class","page-wrapper")},m(b,y){V(e,b,y),w(b,t,y),w(b,i,y),m(i,s),m(i,l),m(i,o),m(o,r),g[a].m(r,null),f=!0,c||(d=Q(r,"submit",Wt(n[4])),c=!0)},p(b,[y]){let $=a;a=v(b),a===$?g[a].p(b,y):(Ee(),P(g[$],1,1,()=>{g[$]=null}),Ae(),u=g[a],u?u.p(b,y):(u=g[a]=p[a](b),u.c()),A(u,1),u.m(r,null))},i(b){f||(A(e.$$.fragment,b),A(u),f=!0)},o(b){P(e.$$.fragment,b),P(u),f=!1},d(b){z(e,b),b&&k(t),b&&k(i),g[a].d(),c=!1,d()}}}function dT(n,e,t){let i,s,l;kt(n,mo,y=>t(10,s=y)),kt(n,Jt,y=>t(11,l=y)),_n(Jt,l="Application settings",l);let o={},r=!1,a=!1,u="";f();async function f(){t(1,r=!0);try{const y=await ye.Settings.getAll()||{};d(y)}catch(y){ye.errorResponseHandler(y)}t(1,r=!1)}async function c(){if(!(a||!i)){t(2,a=!0);try{const y=await ye.Settings.update(G.filterRedactedProps(o));d(y),cn("Successfully saved application settings.")}catch(y){ye.errorResponseHandler(y)}t(2,a=!1)}}function d(y={}){var $;_n(mo,s=($=y==null?void 0:y.meta)==null?void 0:$.appName,s),t(0,o={meta:(y==null?void 0:y.meta)||{},logs:(y==null?void 0:y.logs)||{}}),t(5,u=JSON.stringify(o))}function p(){o.meta.appName=this.value,t(0,o)}function g(){o.meta.appUrl=this.value,t(0,o)}function v(){o.logs.maxDays=Pt(this.value),t(0,o)}const b=()=>c();return n.$$.update=()=>{n.$$.dirty&33&&t(3,i=u!=JSON.stringify(o))},[o,r,a,i,c,u,p,g,v,b]}class hT extends Oe{constructor(e){super(),De(this,e,dT,cT,Te,{})}}function pT(n){let e,t,i,s=[{type:"password"},{autocomplete:"new-password"},n[5]],l={};for(let o=0;o<s.length;o+=1)l=ft(l,s[o]);return{c(){e=_("input"),si(e,l)},m(o,r){w(o,e,r),e.autofocus&&e.focus(),n[7](e),we(e,n[0]),t||(i=Q(e,"input",n[8]),t=!0)},p(o,r){si(e,l=dn(s,[{type:"password"},{autocomplete:"new-password"},r&32&&o[5]])),r&1&&e.value!==o[0]&&we(e,o[0])},d(o){o&&k(e),n[7](null),t=!1,i()}}}function mT(n){let e,t,i,s,l,o,r=[{readOnly:!0},{type:"text"},{placeholder:n[1]},n[5]],a={};for(let u=0;u<r.length;u+=1)a=ft(a,r[u]);return{c(){e=_("div"),t=_("button"),t.innerHTML='<i class="ri-key-line"></i>',i=T(),s=_("input"),h(t,"type","button"),h(t,"class","btn btn-secondary btn-circle"),h(e,"class","form-field-addon"),si(s,a)},m(u,f){w(u,e,f),m(e,t),w(u,i,f),w(u,s,f),s.autofocus&&s.focus(),l||(o=[Ye(wt.call(null,t,{position:"left",text:"Set new value"})),Q(t,"click",n[6])],l=!0)},p(u,f){si(s,a=dn(r,[{readOnly:!0},{type:"text"},f&2&&{placeholder:u[1]},f&32&&u[5]]))},d(u){u&&k(e),u&&k(i),u&&k(s),l=!1,Qe(o)}}}function gT(n){let e;function t(l,o){return l[3]?mT:pT}let i=t(n),s=i(n);return{c(){s.c(),e=st()},m(l,o){s.m(l,o),w(l,e,o)},p(l,[o]){i===(i=t(l))&&s?s.p(l,o):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},i:re,o:re,d(l){s.d(l),l&&k(e)}}}function _T(n,e,t){const i=["value","mask"];let s=Zt(e,i),{value:l=""}=e,{mask:o="******"}=e,r,a=!1;async function u(){t(0,l=""),t(3,a=!1),await oi(),r==null||r.focus()}const f=()=>u();function c(p){me[p?"unshift":"push"](()=>{r=p,t(2,r)})}function d(){l=this.value,t(0,l)}return n.$$set=p=>{e=ft(ft({},e),li(p)),t(5,s=Zt(e,i)),"value"in p&&t(0,l=p.value),"mask"in p&&t(1,o=p.mask)},n.$$.update=()=>{n.$$.dirty&3&&l===o&&t(3,a=!0)},[l,o,r,a,u,s,f,c,d]}class Ba extends Oe{constructor(e){super(),De(this,e,_T,gT,Te,{value:0,mask:1})}}function bT(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$,S,M,C,D,O,E,F,L,R,H,te;i=new Pe({props:{class:"form-field required",name:"meta.senderName",$$slots:{default:[yT,({uniqueId:q})=>({23:q}),({uniqueId:q})=>q?8388608:0]},$$scope:{ctx:n}}}),o=new Pe({props:{class:"form-field required",name:"meta.senderAddress",$$slots:{default:[kT,({uniqueId:q})=>({23:q}),({uniqueId:q})=>q?8388608:0]},$$scope:{ctx:n}}}),a=new Pe({props:{class:"form-field required",name:"meta.userVerificationUrl",$$slots:{default:[wT,({uniqueId:q})=>({23:q}),({uniqueId:q})=>q?8388608:0]},$$scope:{ctx:n}}}),f=new Pe({props:{class:"form-field required",name:"meta.userResetPasswordUrl",$$slots:{default:[ST,({uniqueId:q})=>({23:q}),({uniqueId:q})=>q?8388608:0]},$$scope:{ctx:n}}}),d=new Pe({props:{class:"form-field required",name:"meta.userConfirmEmailChangeUrl",$$slots:{default:[$T,({uniqueId:q})=>({23:q}),({uniqueId:q})=>q?8388608:0]},$$scope:{ctx:n}}}),$=new Pe({props:{class:"form-field form-field-toggle",$$slots:{default:[CT,({uniqueId:q})=>({23:q}),({uniqueId:q})=>q?8388608:0]},$$scope:{ctx:n}}});let le=n[0].smtp.enabled&&np(n);return{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=T(),l=_("div"),B(o.$$.fragment),r=T(),B(a.$$.fragment),u=T(),B(f.$$.fragment),c=T(),B(d.$$.fragment),p=T(),g=_("hr"),v=T(),b=_("div"),b.innerHTML=`<p>By default PocketBase uses the OS <code>sendmail</code> command for sending emails.
<br/>
<strong class="txt-bold">For better emails deliverability it is recommended to enable the SMTP settings
below.</strong></p>`,y=T(),B($.$$.fragment),S=T(),le&&le.c(),M=T(),C=_("div"),D=_("div"),O=T(),E=_("button"),F=_("span"),F.textContent="Save changes",h(t,"class","col-lg-6"),h(l,"class","col-lg-6"),h(e,"class","grid"),h(b,"class","content m-b-sm"),h(D,"class","flex-fill"),h(F,"class","txt"),h(E,"type","submit"),h(E,"class","btn btn-expanded"),E.disabled=L=!n[3]||n[2],se(E,"btn-loading",n[2]),h(C,"class","flex")},m(q,Y){w(q,e,Y),m(e,t),V(i,t,null),m(e,s),m(e,l),V(o,l,null),m(e,r),V(a,e,null),m(e,u),V(f,e,null),m(e,c),V(d,e,null),w(q,p,Y),w(q,g,Y),w(q,v,Y),w(q,b,Y),w(q,y,Y),V($,q,Y),w(q,S,Y),le&&le.m(q,Y),w(q,M,Y),w(q,C,Y),m(C,D),m(C,O),m(C,E),m(E,F),R=!0,H||(te=Q(E,"click",n[19]),H=!0)},p(q,Y){const W={};Y&25165825&&(W.$$scope={dirty:Y,ctx:q}),i.$set(W);const X={};Y&25165825&&(X.$$scope={dirty:Y,ctx:q}),o.$set(X);const ne={};Y&25165825&&(ne.$$scope={dirty:Y,ctx:q}),a.$set(ne);const ue={};Y&25165825&&(ue.$$scope={dirty:Y,ctx:q}),f.$set(ue);const Me={};Y&25165825&&(Me.$$scope={dirty:Y,ctx:q}),d.$set(Me);const oe={};Y&25165825&&(oe.$$scope={dirty:Y,ctx:q}),$.$set(oe),q[0].smtp.enabled?le?(le.p(q,Y),Y&1&&A(le,1)):(le=np(q),le.c(),A(le,1),le.m(M.parentNode,M)):le&&(Ee(),P(le,1,1,()=>{le=null}),Ae()),(!R||Y&12&&L!==(L=!q[3]||q[2]))&&(E.disabled=L),Y&4&&se(E,"btn-loading",q[2])},i(q){R||(A(i.$$.fragment,q),A(o.$$.fragment,q),A(a.$$.fragment,q),A(f.$$.fragment,q),A(d.$$.fragment,q),A($.$$.fragment,q),A(le),R=!0)},o(q){P(i.$$.fragment,q),P(o.$$.fragment,q),P(a.$$.fragment,q),P(f.$$.fragment,q),P(d.$$.fragment,q),P($.$$.fragment,q),P(le),R=!1},d(q){q&&k(e),z(i),z(o),z(a),z(f),z(d),q&&k(p),q&&k(g),q&&k(v),q&&k(b),q&&k(y),z($,q),q&&k(S),le&&le.d(q),q&&k(M),q&&k(C),H=!1,te()}}}function vT(n){let e;return{c(){e=_("div"),h(e,"class","loader")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function yT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Sender name"),s=T(),l=_("input"),h(e,"for",i=n[23]),h(l,"type","text"),h(l,"id",o=n[23]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].meta.senderName),r||(a=Q(l,"input",n[8]),r=!0)},p(u,f){f&8388608&&i!==(i=u[23])&&h(e,"for",i),f&8388608&&o!==(o=u[23])&&h(l,"id",o),f&1&&l.value!==u[0].meta.senderName&&we(l,u[0].meta.senderName)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function kT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Sender address"),s=T(),l=_("input"),h(e,"for",i=n[23]),h(l,"type","email"),h(l,"id",o=n[23]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].meta.senderAddress),r||(a=Q(l,"input",n[9]),r=!0)},p(u,f){f&8388608&&i!==(i=u[23])&&h(e,"for",i),f&8388608&&o!==(o=u[23])&&h(l,"id",o),f&1&&l.value!==u[0].meta.senderAddress&&we(l,u[0].meta.senderAddress)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function wT(n){let e,t,i,s,l,o,r,a,u,f;return{c(){e=_("label"),t=N("User verification page url"),s=T(),l=_("input"),r=T(),a=_("div"),a.innerHTML=`Used in the user verification email. Available placeholder parameters:
<code>%APP_URL%</code>, <code>%TOKEN%</code>.`,h(e,"for",i=n[23]),h(l,"type","text"),h(l,"id",o=n[23]),l.required=!0,h(a,"class","help-block")},m(c,d){w(c,e,d),m(e,t),w(c,s,d),w(c,l,d),we(l,n[0].meta.userVerificationUrl),w(c,r,d),w(c,a,d),u||(f=Q(l,"input",n[10]),u=!0)},p(c,d){d&8388608&&i!==(i=c[23])&&h(e,"for",i),d&8388608&&o!==(o=c[23])&&h(l,"id",o),d&1&&l.value!==c[0].meta.userVerificationUrl&&we(l,c[0].meta.userVerificationUrl)},d(c){c&&k(e),c&&k(s),c&&k(l),c&&k(r),c&&k(a),u=!1,f()}}}function ST(n){let e,t,i,s,l,o,r,a,u,f;return{c(){e=_("label"),t=N("User reset password page url"),s=T(),l=_("input"),r=T(),a=_("div"),a.innerHTML=`Used in the user password reset email. Available placeholder parameters:
<code>%APP_URL%</code>, <code>%TOKEN%</code>.`,h(e,"for",i=n[23]),h(l,"type","text"),h(l,"id",o=n[23]),l.required=!0,h(a,"class","help-block")},m(c,d){w(c,e,d),m(e,t),w(c,s,d),w(c,l,d),we(l,n[0].meta.userResetPasswordUrl),w(c,r,d),w(c,a,d),u||(f=Q(l,"input",n[11]),u=!0)},p(c,d){d&8388608&&i!==(i=c[23])&&h(e,"for",i),d&8388608&&o!==(o=c[23])&&h(l,"id",o),d&1&&l.value!==c[0].meta.userResetPasswordUrl&&we(l,c[0].meta.userResetPasswordUrl)},d(c){c&&k(e),c&&k(s),c&&k(l),c&&k(r),c&&k(a),u=!1,f()}}}function $T(n){let e,t,i,s,l,o,r,a,u,f;return{c(){e=_("label"),t=N("User confirm email change page url"),s=T(),l=_("input"),r=T(),a=_("div"),a.innerHTML=`Used in the user email change confirmation email. Available placeholder
parameters:
<code>%APP_URL%</code>, <code>%TOKEN%</code>.`,h(e,"for",i=n[23]),h(l,"type","text"),h(l,"id",o=n[23]),l.required=!0,h(a,"class","help-block")},m(c,d){w(c,e,d),m(e,t),w(c,s,d),w(c,l,d),we(l,n[0].meta.userConfirmEmailChangeUrl),w(c,r,d),w(c,a,d),u||(f=Q(l,"input",n[12]),u=!0)},p(c,d){d&8388608&&i!==(i=c[23])&&h(e,"for",i),d&8388608&&o!==(o=c[23])&&h(l,"id",o),d&1&&l.value!==c[0].meta.userConfirmEmailChangeUrl&&we(l,c[0].meta.userConfirmEmailChangeUrl)},d(c){c&&k(e),c&&k(s),c&&k(l),c&&k(r),c&&k(a),u=!1,f()}}}function CT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("input"),i=T(),s=_("label"),l=N("Use SMTP mail server"),h(e,"type","checkbox"),h(e,"id",t=n[23]),e.required=!0,h(s,"for",o=n[23])},m(u,f){w(u,e,f),e.checked=n[0].smtp.enabled,w(u,i,f),w(u,s,f),m(s,l),r||(a=Q(e,"change",n[13]),r=!0)},p(u,f){f&8388608&&t!==(t=u[23])&&h(e,"id",t),f&1&&(e.checked=u[0].smtp.enabled),f&8388608&&o!==(o=u[23])&&h(s,"for",o)},d(u){u&&k(e),u&&k(i),u&&k(s),r=!1,a()}}}function np(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$,S;return i=new Pe({props:{class:"form-field required",name:"smtp.host",$$slots:{default:[MT,({uniqueId:M})=>({23:M}),({uniqueId:M})=>M?8388608:0]},$$scope:{ctx:n}}}),o=new Pe({props:{class:"form-field required",name:"smtp.port",$$slots:{default:[TT,({uniqueId:M})=>({23:M}),({uniqueId:M})=>M?8388608:0]},$$scope:{ctx:n}}}),u=new Pe({props:{class:"form-field required",name:"smtp.tls",$$slots:{default:[DT,({uniqueId:M})=>({23:M}),({uniqueId:M})=>M?8388608:0]},$$scope:{ctx:n}}}),d=new Pe({props:{class:"form-field",name:"smtp.username",$$slots:{default:[OT,({uniqueId:M})=>({23:M}),({uniqueId:M})=>M?8388608:0]},$$scope:{ctx:n}}}),v=new Pe({props:{class:"form-field",name:"smtp.password",$$slots:{default:[ET,({uniqueId:M})=>({23:M}),({uniqueId:M})=>M?8388608:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=T(),l=_("div"),B(o.$$.fragment),r=T(),a=_("div"),B(u.$$.fragment),f=T(),c=_("div"),B(d.$$.fragment),p=T(),g=_("div"),B(v.$$.fragment),b=T(),y=_("div"),h(t,"class","col-lg-6"),h(l,"class","col-lg-3"),h(a,"class","col-lg-3"),h(c,"class","col-lg-6"),h(g,"class","col-lg-6"),h(y,"class","col-lg-12"),h(e,"class","grid")},m(M,C){w(M,e,C),m(e,t),V(i,t,null),m(e,s),m(e,l),V(o,l,null),m(e,r),m(e,a),V(u,a,null),m(e,f),m(e,c),V(d,c,null),m(e,p),m(e,g),V(v,g,null),m(e,b),m(e,y),S=!0},p(M,C){const D={};C&25165825&&(D.$$scope={dirty:C,ctx:M}),i.$set(D);const O={};C&25165825&&(O.$$scope={dirty:C,ctx:M}),o.$set(O);const E={};C&25165825&&(E.$$scope={dirty:C,ctx:M}),u.$set(E);const F={};C&25165825&&(F.$$scope={dirty:C,ctx:M}),d.$set(F);const L={};C&25165825&&(L.$$scope={dirty:C,ctx:M}),v.$set(L)},i(M){S||(A(i.$$.fragment,M),A(o.$$.fragment,M),A(u.$$.fragment,M),A(d.$$.fragment,M),A(v.$$.fragment,M),M&&Ot(()=>{$||($=lt(e,xt,{duration:150},!0)),$.run(1)}),S=!0)},o(M){P(i.$$.fragment,M),P(o.$$.fragment,M),P(u.$$.fragment,M),P(d.$$.fragment,M),P(v.$$.fragment,M),M&&($||($=lt(e,xt,{duration:150},!1)),$.run(0)),S=!1},d(M){M&&k(e),z(i),z(o),z(u),z(d),z(v),M&&$&&$.end()}}}function MT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("SMTP server host"),s=T(),l=_("input"),h(e,"for",i=n[23]),h(l,"type","text"),h(l,"id",o=n[23]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].smtp.host),r||(a=Q(l,"input",n[14]),r=!0)},p(u,f){f&8388608&&i!==(i=u[23])&&h(e,"for",i),f&8388608&&o!==(o=u[23])&&h(l,"id",o),f&1&&l.value!==u[0].smtp.host&&we(l,u[0].smtp.host)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function TT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Port"),s=T(),l=_("input"),h(e,"for",i=n[23]),h(l,"type","number"),h(l,"id",o=n[23]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].smtp.port),r||(a=Q(l,"input",n[15]),r=!0)},p(u,f){f&8388608&&i!==(i=u[23])&&h(e,"for",i),f&8388608&&o!==(o=u[23])&&h(l,"id",o),f&1&&Pt(l.value)!==u[0].smtp.port&&we(l,u[0].smtp.port)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function DT(n){let e,t,i,s,l,o,r;function a(f){n[16](f)}let u={id:n[23],items:n[5]};return n[0].smtp.tls!==void 0&&(u.keyOfSelected=n[0].smtp.tls),l=new ss({props:u}),me.push(()=>Le(l,"keyOfSelected",a)),{c(){e=_("label"),t=N("TLS Encryption"),s=T(),B(l.$$.fragment),h(e,"for",i=n[23])},m(f,c){w(f,e,c),m(e,t),w(f,s,c),V(l,f,c),r=!0},p(f,c){(!r||c&8388608&&i!==(i=f[23]))&&h(e,"for",i);const d={};c&8388608&&(d.id=f[23]),!o&&c&1&&(o=!0,d.keyOfSelected=f[0].smtp.tls,Ie(()=>o=!1)),l.$set(d)},i(f){r||(A(l.$$.fragment,f),r=!0)},o(f){P(l.$$.fragment,f),r=!1},d(f){f&&k(e),f&&k(s),z(l,f)}}}function OT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Username"),s=T(),l=_("input"),h(e,"for",i=n[23]),h(l,"type","text"),h(l,"id",o=n[23])},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].smtp.username),r||(a=Q(l,"input",n[17]),r=!0)},p(u,f){f&8388608&&i!==(i=u[23])&&h(e,"for",i),f&8388608&&o!==(o=u[23])&&h(l,"id",o),f&1&&l.value!==u[0].smtp.username&&we(l,u[0].smtp.username)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function ET(n){let e,t,i,s,l,o,r;function a(f){n[18](f)}let u={id:Line truncated
the
`),r=_("strong"),u=N(a),f=N(`
to the
`),c=_("strong"),p=N(d),g=N(`.
`),v=_("br"),b=N(`
There are numerous command line tools that can help you, such as:
`),y=_("a"),y.textContent=`rclone
`,$=N(`,
`),S=_("a"),S.textContent=`s5cmd
`,M=N(", etc."),C=T(),D=_("div"),h(i,"class","icon"),h(y,"href","https://github.com/rclone/rclone"),h(y,"target","_blank"),h(y,"rel","noopener"),h(y,"class","txt-bold"),h(S,"href","https://github.com/peak/s5cmd"),h(S,"target","_blank"),h(S,"rel","noopener"),h(S,"class","txt-bold"),h(l,"class","content"),h(t,"class","alert alert-warning m-0"),h(D,"class","clearfix m-t-base")},m(F,L){w(F,e,L),m(e,t),m(t,i),m(t,s),m(t,l),m(l,o),m(l,r),m(r,u),m(l,f),m(l,c),m(c,p),m(l,g),m(l,v),m(l,b),m(l,y),m(l,$),m(l,S),m(l,M),m(e,C),m(e,D),E=!0},p(F,L){(!E||L&8)&&a!==(a=F[3]?"S3 storage":"local file system")&&ge(u,a),(!E||L&1)&&d!==(d=F[0].enabled?"S3 storage":"local file system")&&ge(p,d)},i(F){E||(F&&Ot(()=>{O||(O=lt(e,xt,{duration:150},!0)),O.run(1)}),E=!0)},o(F){F&&(O||(O=lt(e,xt,{duration:150},!1)),O.run(0)),E=!1},d(F){F&&k(e),F&&O&&O.end()}}}function sp(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g,v,b,y,$,S,M,C,D;return i=new Pe({props:{class:"form-field required",name:"s3.endpoint",$$slots:{default:[NT,({uniqueId:O})=>({19:O}),({uniqueId:O})=>O?524288:0]},$$scope:{ctx:n}}}),o=new Pe({props:{class:"form-field required",name:"s3.bucket",$$slots:{default:[HT,({uniqueId:O})=>({19:O}),({uniqueId:O})=>O?524288:0]},$$scope:{ctx:n}}}),u=new Pe({props:{class:"form-field required",name:"s3.region",$$slots:{default:[jT,({uniqueId:O})=>({19:O}),({uniqueId:O})=>O?524288:0]},$$scope:{ctx:n}}}),d=new Pe({props:{class:"form-field required",name:"s3.accessKey",$$slots:{default:[qT,({uniqueId:O})=>({19:O}),({uniqueId:O})=>O?524288:0]},$$scope:{ctx:n}}}),v=new Pe({props:{class:"form-field required",name:"s3.secret",$$slots:{default:[VT,({uniqueId:O})=>({19:O}),({uniqueId:O})=>O?524288:0]},$$scope:{ctx:n}}}),$=new Pe({props:{class:"form-field",name:"s3.forcePathStyle",$$slots:{default:[zT,({uniqueId:O})=>({19:O}),({uniqueId:O})=>O?524288:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=T(),l=_("div"),B(o.$$.fragment),r=T(),a=_("div"),B(u.$$.fragment),f=T(),c=_("div"),B(d.$$.fragment),p=T(),g=_("div"),B(v.$$.fragment),b=T(),y=_("div"),B($.$$.fragment),S=T(),M=_("div"),h(t,"class","col-lg-12"),h(l,"class","col-lg-6"),h(a,"class","col-lg-6"),h(c,"class","col-lg-6"),h(g,"class","col-lg-6"),h(y,"class","col-lg-12"),h(M,"class","col-lg-12"),h(e,"class","grid")},m(O,E){w(O,e,E),m(e,t),V(i,t,null),m(e,s),m(e,l),V(o,l,null),m(e,r),m(e,a),V(u,a,null),m(e,f),m(e,c),V(d,c,null),m(e,p),m(e,g),V(v,g,null),m(e,b),m(e,y),V($,y,null),m(e,S),m(e,M),D=!0},p(O,E){const F={};E&1572865&&(F.$$scope={dirty:E,ctx:O}),i.$set(F);const L={};E&1572865&&(L.$$scope={dirty:E,ctx:O}),o.$set(L);const R={};E&1572865&&(R.$$scope={dirty:E,ctx:O}),u.$set(R);const H={};E&1572865&&(H.$$scope={dirty:E,ctx:O}),d.$set(H);const te={};E&1572865&&(te.$$scope={dirty:E,ctx:O}),v.$set(te);const le={};E&1572865&&(le.$$scope={dirty:E,ctx:O}),$.$set(le)},i(O){D||(A(i.$$.fragment,O),A(o.$$.fragment,O),A(u.$$.fragment,O),A(d.$$.fragment,O),A(v.$$.fragment,O),A($.$$.fragment,O),O&&Ot(()=>{C||(C=lt(e,xt,{duration:150},!0)),C.run(1)}),D=!0)},o(O){P(i.$$.fragment,O),P(o.$$.fragment,O),P(u.$$.fragment,O),P(d.$$.fragment,O),P(v.$$.fragment,O),P($.$$.fragment,O),O&&(C||(C=lt(e,xt,{duration:150},!1)),C.run(0)),D=!1},d(O){O&&k(e),z(i),z(o),z(u),z(d),z(v),z($),O&&C&&C.end()}}}function NT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Endpoint"),s=T(),l=_("input"),h(e,"for",i=n[19]),h(l,"type","text"),h(l,"id",o=n[19]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].endpoint),r||(a=Q(l,"input",n[9]),r=!0)},p(u,f){f&524288&&i!==(i=u[19])&&h(e,"for",i),f&524288&&o!==(o=u[19])&&h(l,"id",o),f&1&&l.value!==u[0].endpoint&&we(l,u[0].endpoint)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function HT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Bucket"),s=T(),l=_("input"),h(e,"for",i=n[19]),h(l,"type","text"),h(l,"id",o=n[19]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].bucket),r||(a=Q(l,"input",n[10]),r=!0)},p(u,f){f&524288&&i!==(i=u[19])&&h(e,"for",i),f&524288&&o!==(o=u[19])&&h(l,"id",o),f&1&&l.value!==u[0].bucket&&we(l,u[0].bucket)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function jT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Region"),s=T(),l=_("input"),h(e,"for",i=n[19]),h(l,"type","text"),h(l,"id",o=n[19]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].region),r||(a=Q(l,"input",n[11]),r=!0)},p(u,f){f&524288&&i!==(i=u[19])&&h(e,"for",i),f&524288&&o!==(o=u[19])&&h(l,"id",o),f&1&&l.value!==u[0].region&&we(l,u[0].region)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function qT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Access key"),s=T(),l=_("input"),h(e,"for",i=n[19]),h(l,"type","text"),h(l,"id",o=n[19]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].accessKey),r||(a=Q(l,"input",n[12]),r=!0)},p(u,f){f&524288&&i!==(i=u[19])&&h(e,"for",i),f&524288&&o!==(o=u[19])&&h(l,"id",o),f&1&&l.value!==u[0].accessKey&&we(l,u[0].accessKey)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}func Line truncated
<p>If you have limited disk space, you could optionally connect to a S3 compatible storage.</p>`,g=T(),b.c(),h(o,"class","breadcrumb-item"),h(a,"class","breadcrumb-item"),h(l,"class","breadcrumbs"),h(s,"class","page-header"),h(p,"class","content txt-xl m-b-base"),h(d,"class","panel"),h(d,"autocomplete","off"),h(c,"class","wrapper"),h(i,"class","page-wrapper")},m(O,E){V(e,O,E),w(O,t,E),w(O,i,E),m(i,s),m(s,l),m(l,o),m(l,r),m(l,a),m(a,u),m(i,f),m(i,c),m(c,d),m(d,p),m(d,g),C[v].m(d,null),y=!0,$||(S=Q(d,"submit",Wt(n[16])),$=!0)},p(O,[E]){(!y||E&32)&&ge(u,O[5]);let F=v;v=D(O),v===F?C[v].p(O,E):(Ee(),P(C[F],1,1,()=>{C[F]=null}),Ae(),b=C[v],b?b.p(O,E):(b=C[v]=M[v](O),b.c()),A(b,1),b.m(d,null))},i(O){y||(A(e.$$.fragment,O),A(b),y=!0)},o(O){P(e.$$.fragment,O),P(b),y=!1},d(O){z(e,O),O&&k(t),O&&k(i),C[v].d(),$=!1,S()}}}function UT(n,e,t){let i,s;kt(n,Jt,D=>t(5,s=D)),_n(Jt,s="Files storage",s);let l={},o=!1,r=!1,a="",u=!1;f();async function f(){t(1,o=!0);try{const D=await ye.Settings.getAll()||{};d(D)}catch(D){ye.errorResponseHandler(D)}t(1,o=!1)}async function c(){if(!(r||!i)){t(2,r=!0);try{const D=await ye.Settings.update(G.filterRedactedProps({s3:l}));d(D),Fi({}),cn("Successfully saved Files storage settings.")}catch(D){ye.errorResponseHandler(D)}t(2,r=!1)}}function d(D={}){t(0,l=(D==null?void 0:D.s3)||{}),t(3,u=l.enabled),t(7,a=JSON.stringify(l))}function p(){l.enabled=this.checked,t(0,l)}function g(){l.endpoint=this.value,t(0,l)}function v(){l.bucket=this.value,t(0,l)}function b(){l.region=this.value,t(0,l)}function y(){l.accessKey=this.value,t(0,l)}function $(D){n.$$.not_equal(l.secret,D)&&(l.secret=D,t(0,l))}function S(){l.forcePathStyle=this.checked,t(0,l)}const M=()=>c(),C=()=>c();return n.$$.update=()=>{n.$$.dirty&129&&t(4,i=a!=JSON.stringify(l))},[l,o,r,u,i,s,c,a,p,g,v,b,y,$,S,M,C]}class WT extends Oe{constructor(e){super(),De(this,e,UT,BT,Te,{})}}function YT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("input"),i=T(),s=_("label"),l=N("Enable"),h(e,"type","checkbox"),h(e,"id",t=n[16]),h(s,"for",o=n[16])},m(u,f){w(u,e,f),e.checked=n[0].enabled,w(u,i,f),w(u,s,f),m(s,l),r||(a=Q(e,"change",n[8]),r=!0)},p(u,f){f&65536&&t!==(t=u[16])&&h(e,"id",t),f&1&&(e.checked=u[0].enabled),f&65536&&o!==(o=u[16])&&h(s,"for",o)},d(u){u&&k(e),u&&k(i),u&&k(s),r=!1,a()}}}function lp(n){let e,t,i,s,l,o,r,a,u,f,c;return i=new Pe({props:{class:"form-field required",name:"emailPassword.minPasswordLength",$$slots:{default:[KT,({uniqueId:d})=>({16:d}),({uniqueId:d})=>d?65536:0]},$$scope:{ctx:n}}}),o=new Pe({props:{class:"form-field "+(G.isEmpty(n[0].onlyDomains)?"":"disabled"),name:"emailPassword.exceptDomains",$$slots:{default:[ZT,({uniqueId:d})=>({16:d}),({uniqueId:d})=>d?65536:0]},$$scope:{ctx:n}}}),u=new Pe({props:{class:"form-field "+(G.isEmpty(n[0].exceptDomains)?"":"disabled"),name:"emailPassword.onlyDomains",$$slots:{default:[GT,({uniqueId:d})=>({16:d}),({uniqueId:d})=>d?65536:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=T(),l=_("div"),B(o.$$.fragment),r=T(),a=_("div"),B(u.$$.fragment),h(t,"class","col-sm-12 m-t-sm"),h(l,"class","col-lg-6"),h(a,"class","col-lg-6"),h(e,"class","grid")},m(d,p){w(d,e,p),m(e,t),V(i,t,null),m(e,s),m(e,l),V(o,l,null),m(e,r),m(e,a),V(u,a,null),c=!0},p(d,p){const g={};p&196609&&(g.$$scope={dirty:p,ctx:d}),i.$set(g);const v={};p&1&&(v.class="form-field "+(G.isEmpty(d[0].onlyDomains)?"":"disabled")),p&196609&&(v.$$scope={dirty:p,ctx:d}),o.$set(v);const b={};p&1&&(b.class="form-field "+(G.isEmpty(d[0].exceptDomains)?"":"disabled")),p&196609&&(b.$$scope={dirty:p,ctx:d}),u.$set(b)},i(d){c||(A(i.$$.fragment,d),A(o.$$.fragment,d),A(u.$$.fragment,d),d&&Ot(()=>{f||(f=lt(e,xt,{duration:150},!0)),f.run(1)}),c=!0)},o(d){P(i.$$.fragment,d),P(o.$$.fragment,d),P(u.$$.fragment,d),d&&(f||(f=lt(e,xt,{duration:150},!1)),f.run(0)),c=!1},d(d){d&&k(e),z(i),z(o),z(u),d&&f&&f.end()}}}function KT(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Minimum password length"),s=T(),l=_("input"),h(e,"for",i=n[16]),h(l,"type","number"),h(l,"id",o=n[16]),l.required=!0,h(l,"min","5"),h(l,"max","200")},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].minPasswordLength),r||(a=Q(l,"input",n[9]),r=!0)},p(u,f){f&65536&&i!==(i=u[16])&&h(e,"for",i),f&65536&&o!==(o=u[16])&&h(l,"id",o),f&1&&Pt(l.value)!==u[0].minPasswordLength&&we(l,u[0].minPasswordLength)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function ZT(n){let e,t,i,s,l,o,r,a,u,f,c,d,p;function g(b){n[10](b)}let v={id:n[16],disabled:!G.isEmpty(n[0].onlyDomains)};return n[0].exceptDomains!==void 0&&(v.value=n[0].exceptDomains),r=new ls({props:v}),me.push(()=>Le(r,"value",g)),{c(){e=_("label"),t=_("span"),t.textContent="Except domains",i=T(),s=_("i"),o=T(),B(r.$$.fragment),u=T(),f=_("div"),f.textContent="Use comma as separator.",h(t,"class","txt"),h(s,"class","ri-information-line link-hint"),h(e,"for",l=n[16]),h(f,"class","help-block")},m(b,y){w(b,e,y),m(e,t),m(e,i),m(e,s),w(b,o,y),V(r,b,y),w(b,u,y),w(b,f,y),c=!0,d||(p=Ye(wt.call(null,s,{text:`Email domainsLine truncated
This field is disabled if "Only domains" is set.`,position:"top"})),d=!0)},p(b,y){(!c||y&65536&&l!==(l=b[16]))&&h(e,"for",l);const $={};y&65536&&($.id=b[16]),y&1&&($.disabled=!G.isEmpty(b[0].onlyDomains)),!a&&y&1&&(a=!0,$.value=b[0].exceptDomains,Ie(()=>a=!1)),r.$set($)},i(b){c||(A(r.$$.fragment,b),c=!0)},o(b){P(r.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(o),z(r,b),b&&k(u),b&&k(f),d=!1,p()}}}function GT(n){let e,t,i,s,l,o,r,a,u,f,c,d,p;function g(b){n[11](b)}let v={id:n[16]+".config.onlyDomains",disabled:!G.isEmpty(n[0].exceptDomains)};return n[0].onlyDomains!==void 0&&(v.value=n[0].onlyDomains),r=new ls({props:v}),me.push(()=>Le(r,"value",g)),{c(){e=_("label"),t=_("span"),t.textContent="Only domains",i=T(),s=_("i"),o=T(),B(r.$$.fragment),u=T(),f=_("div"),f.textContent="Use comma as separator.",h(t,"class","txt"),h(s,"class","ri-information-line link-hint"),h(e,"for",l=n[16]+".config.onlyDomains"),h(f,"class","help-block")},m(b,y){w(b,e,y),m(e,t),m(e,i),m(e,s),w(b,o,y),V(r,b,y),w(b,u,y),w(b,f,y),c=!0,d||(p=Ye(wt.call(null,s,{text:`Email domains that are ONLY allowed to sign up.
This field is disabled if "Except domains" is set.`,position:"top"})),d=!0)},p(b,y){(!c||y&65536&&l!==(l=b[16]+".config.onlyDomains"))&&h(e,"for",l);const $={};y&65536&&($.id=b[16]+".config.onlyDomains"),y&1&&($.disabled=!G.isEmpty(b[0].exceptDomains)),!a&&y&1&&(a=!0,$.value=b[0].onlyDomains,Ie(()=>a=!1)),r.$set($)},i(b){c||(A(r.$$.fragment,b),c=!0)},o(b){P(r.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(o),z(r,b),b&&k(u),b&&k(f),d=!1,p()}}}function JT(n){let e,t,i,s;e=new Pe({props:{class:"form-field form-field-toggle m-b-0",name:"emailPassword.enabled",$$slots:{default:[YT,({uniqueId:o})=>({16:o}),({uniqueId:o})=>o?65536:0]},$$scope:{ctx:n}}});let l=n[0].enabled&&lp(n);return{c(){B(e.$$.fragment),t=T(),l&&l.c(),i=st()},m(o,r){V(e,o,r),w(o,t,r),l&&l.m(o,r),w(o,i,r),s=!0},p(o,r){const a={};r&196609&&(a.$$scope={dirty:r,ctx:o}),e.$set(a),o[0].enabled?l?(l.p(o,r),r&1&&A(l,1)):(l=lp(o),l.c(),A(l,1),l.m(i.parentNode,i)):l&&(Ee(),P(l,1,1,()=>{l=null}),Ae())},i(o){s||(A(e.$$.fragment,o),A(l),s=!0)},o(o){P(e.$$.fragment,o),P(l),s=!1},d(o){z(e,o),o&&k(t),l&&l.d(o),o&&k(i)}}}function XT(n){let e;return{c(){e=_("span"),e.textContent="Disabled",h(e,"class","label")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function QT(n){let e;return{c(){e=_("span"),e.textContent="Enabled",h(e,"class","label label-success")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function op(n){let e,t,i,s,l;return{c(){e=_("i"),h(e,"class","ri-error-warning-fill txt-danger")},m(o,r){w(o,e,r),i=!0,s||(l=Ye(wt.call(null,e,{text:"Has errors",position:"left"})),s=!0)},i(o){i||(Ot(()=>{t||(t=lt(e,Hn,{duration:150,start:.7},!0)),t.run(1)}),i=!0)},o(o){t||(t=lt(e,Hn,{duration:150,start:.7},!1)),t.run(0),i=!1},d(o){o&&k(e),o&&t&&t.end(),s=!1,l()}}}function xT(n){let e,t,i,s,l,o,r;function a(d,p){return d[0].enabled?QT:XT}let u=a(n),f=u(n),c=n[2]&&op();return{c(){e=_("div"),e.innerHTML=`<i class="ri-mail-lock-line"></i>
<span class="txt">Email/Password</span>`,t=T(),f.c(),i=T(),s=_("div"),l=T(),c&&c.c(),o=st(),h(e,"class","inline-flex"),h(s,"class","flex-fill")},m(d,p){w(d,e,p),w(d,t,p),f.m(d,p),w(d,i,p),w(d,s,p),w(d,l,p),c&&c.m(d,p),w(d,o,p),r=!0},p(d,p){u!==(u=a(d))&&(f.d(1),f=u(d),f&&(f.c(),f.m(i.parentNode,i))),d[2]?c?p&4&&A(c,1):(c=op(),c.c(),A(c,1),c.m(o.parentNode,o)):c&&(Ee(),P(c,1,1,()=>{c=null}),Ae())},i(d){r||(A(c),r=!0)},o(d){P(c),r=!1},d(d){d&&k(e),d&&k(t),f.d(d),d&&k(i),d&&k(s),d&&k(l),c&&c.d(d),d&&k(o)}}}function eD(n){let e,t;const i=[n[3]];let s={$$slots:{header:[xT],default:[JT]},$$scope:{ctx:n}};for(let l=0;l<i.length;l+=1)s=ft(s,i[l]);return e=new qa({props:s}),n[12](e),e.$on("expand",n[13]),e.$on("collapse",n[14]),e.$on("toggle",n[15]),{c(){B(e.$$.fragment)},m(l,o){V(e,l,o),t=!0},p(l,[o]){const r=o&8?dn(i,[ri(l[3])]):{};o&131077&&(r.$$scope={dirty:o,ctx:l}),e.$set(r)},i(l){t||(A(e.$$.fragment,l),t=!0)},o(l){P(e.$$.fragment,l),t=!1},d(l){n[12](null),z(e,l)}}}function tD(n,e,t){let i;const s=["config","expand","collapse","collapseSiblings"];let l=Zt(e,s),o;kt(n,ns,M=>t(7,o=M));let{config:r={}}=e,a;function u(){a==null||a.expand()}function f(){a==null||a.collapse()}function c(){a==null||a.collapseSiblings()}function d(){r.enabled=this.checked,t(0,r)}function p(){r.minPasswordLength=Pt(this.value),t(0,r)}function g(M){n.$$.not_equal(r.exceptDomains,M)&&(r.exceptDomains=M,t(0,r))}function v(M){n.$$.not_equal(r.onlyDomains,M)&&(r.onlyDomains=M,t(0,r))}function b(M){me[M?"unshift":"push"](()=>{a=M,t(1,a)})}function y(M){at.call(this,n,M)}function $(M){at.call(this,n,M)}function S(M){at.call(this,n,M)}return n.$$set=M=>{e=ft(ft({},e),li(M)),t(3,l=Zt(e,s)),"config"in M&&t(0,r=M.config)},n.$$.update=()=>{n.$$.dirty&128&&t(2,i=!G.isEmpty(o==null?void 0:o.emailPassword))},[r,a,i,l,u,f,c,o,d,p,g,v,b,y,$,S]}class nD extends Oe{constructor(e){super(),De(this,e,tD,eD,Te,{config:0,expand:4,collapse:5,collapseSiblings:6})}get expand(){return this.$$.ctx[4]}get collapse(){return this.$$.ctx[5]}get collapseSiblings(){return this.$$.ctx[6]}}function iD(n){let e,t,i,s,l,o,r,a;return{c(){e=_("input"),i=T(),s=_("label"),l=N("Enable"),h(e,"type","checkbox"),h(e,"id",t=n[22]),h(s,"for",o=n[22])},m(u,f){w(u,e,f),e.checked=n[0].enabled,w(u,i,f),w(u,s,f),m(s,l),r||(a=Q(e,"change",n[11]),r=!0)},p(u,f){f&4194304&&t!==(t=u[22])&&h(e,"id",t),f&1&&(e.checked=u[0].enabled),f&4194304&&o!==(o=u[22])&&h(s,"for",o)},d(u){u&&k(e),u&&k(i),u&&k(s),r=!1,a()}}}function rp(n){let e,t,i,s,l,o,r,a,u,f,c,d,p,g;l=new Pe({props:{class:"form-field required",name:n[1]+".clientId",$$slots:{default:[sD,({uniqueId:b})=>({22:b}),({uniqueId:b})=>b?4194304:0]},$$scope:{ctx:n}}}),a=new Pe({props:{class:"form-field required",name:n[1]+".clientSecret",$$slots:{default:[lD,({uniqueId:b})=>({22:b}),({uniqueId:b})=>b?4194304:0]},$$scope:{ctx:n}}}),c=new Pe({props:{class:"form-field",name:n[1]+".allowRegistrations",$$slots:{default:[oD,({uniqueId:b})=>({22:b}),({uniqueId:b})=>b?4194304:0]},$$scope:{ctx:n}}});let v=n[4]&&ap(n);return{c(){e=_("div"),t=_("div"),i=T(),s=_("div"),B(l.$$.fragment),o=T(),r=_("div"),B(a.$$.fragment),u=T(),f=_("div"),B(c.$$.fragment),d=T(),v&&v.c(),h(t,"class","col-12 spacing"),h(s,"class","col-lg-6"),h(r,"class","col-lg-6"),h(f,"class","col-lg-12"),h(e,"class","grid")},m(b,y){w(b,e,y),m(e,t),m(e,i),m(e,s),V(l,s,null),m(e,o),m(e,r),V(a,r,null),m(e,u),m(e,f),V(c,f,null),m(e,d),v&&v.m(e,null),g=!0},p(b,y){const $={};y&2&&($.name=b[1]+".clientId"),y&12582913&&($.$$scope={dirty:y,ctx:b}),l.$set($);const S={};y&2&&(S.name=b[1]+".clientSecret"),y&12582913&&(S.$$scope={dirty:y,ctx:b}),a.$set(S);const M={};y&2&&(M.name=b[1]+".allowRegistrations"),y&12582913&&(M.$$scope={dirty:y,ctx:b}),c.$set(M),b[4]?v?(v.p(b,y),y&16&&A(v,1)):(v=ap(b),v.c(),A(v,1),v.m(e,null)):v&&(Ee(),P(v,1,1,()=>{v=null}),Ae())},i(b){g||(A(l.$$.fragment,b),A(a.$$.fragment,b),A(c.$$.fragment,b),A(v),b&&Ot(()=>{p||(p=lt(e,xt,{duration:200},!0)),p.run(1)}),g=!0)},o(b){P(l.$$.fragment,b),P(a.$$.fragment,b),P(c.$$.fragment,b),P(v),b&&(p||(p=lt(e,xt,{duration:200},!1)),p.run(0)),g=!1},d(b){b&&k(e),z(l),z(a),z(c),v&&v.d(),b&&p&&p.end()}}}function sD(n){let e,t,i,s,l,o,r,a;return{c(){e=_("label"),t=N("Client ID"),s=T(),l=_("input"),h(e,"for",i=n[22]),h(l,"type","text"),h(l,"id",o=n[22]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),we(l,n[0].clientId),r||(a=Q(l,"input",n[12]),r=!0)},p(u,f){f&4194304&&i!==(i=u[22])&&h(e,"for",i),f&4194304&&o!==(o=u[22])&&h(l,"id",o),f&1&&l.value!==u[0].clientId&&we(l,u[0].clientId)},d(u){u&&k(e),u&&k(s),u&&k(l),r=!1,a()}}}function lD(n){let e,t,i,s,l,o,r;function a(f){n[13](f)}let u={id:n[22],required:!0};return n[0].clientSecret!==void 0&&(u.value=n[0].clientSecret),l=new Ba({props:u}),me.push(()=>Le(l,"value",a)),{c(){e=_("label"),t=N("Client Secret"),s=T(),B(l.$$.fragment),h(e,"for",i=n[22])},m(f,c){w(f,e,c),m(e,t),w(f,s,c),V(l,f,c),r=!0},p(f,c){(!r||c&4194304&&i!==(i=f[22]))&&h(e,"for",i);const d={};c&4194304&&(d.id=f[22]),!o&&c&Line truncated
<span class="txt">Manage admins</span>`,t=T(),i=_("hr"),s=T(),l=_("div"),l.innerHTML=`<i class="ri-logout-circle-line"></i>
<span class="txt">Logout</span>`,h(e,"href","/settings/admins"),h(e,"class","dropdown-item closable"),h(l,"tabindex","0"),h(l,"class","dropdown-item closable")},m(a,u){w(a,e,u),w(a,t,u),w(a,i,u),w(a,s,u),w(a,l,u),o||(r=[Ye(wn.call(null,e)),Q(l,"click",n[6])],o=!0)},p:re,d(a){a&&k(e),a&&k(t),a&&k(i),a&&k(s),a&&k(l),o=!1,Qe(r)}}}function VD(n){var p;let e,t,i,s,l,o,r,a,u,f,c;document.title=e=G.joinNonEmpty([n[3],n[2],"PocketBase"]," - ");let d=((p=n[0])==null?void 0:p.id)&&n[1]&&mp(n);return o=new p_({props:{routes:TD}}),o.$on("routeLoading",n[4]),o.$on("conditionsFailed",n[5]),a=new FD({}),f=new jD({}),{c(){t=T(),i=_("div"),d&&d.c(),s=T(),l=_("div"),B(o.$$.fragment),r=T(),B(a.$$.fragment),u=T(),B(f.$$.fragment),h(l,"class","app-body"),h(i,"class","app-layout")},m(g,v){w(g,t,v),w(g,i,v),d&&d.m(i,null),m(i,s),m(i,l),V(o,l,null),w(g,r,v),V(a,g,v),w(g,u,v),V(f,g,v),c=!0},p(g,[v]){var b;(!c||v&12)&&e!==(e=G.joinNonEmpty([g[3],g[2],"PocketBase"]," - "))&&(document.title=e),((b=g[0])==null?void 0:b.id)&&g[1]?d?(d.p(g,v),v&3&&A(d,1)):(d=mp(g),d.c(),A(d,1),d.m(i,s)):d&&(Ee(),P(d,1,1,()=>{d=null}),Ae())},i(g){c||(A(d),A(o.$$.fragment,g),A(a.$$.fragment,g),A(f.$$.fragment,g),c=!0)},o(g){P(d),P(o.$$.fragment,g),P(a.$$.fragment,g),P(f.$$.fragment,g),c=!1},d(g){g&&k(t),g&&k(i),d&&d.d(),z(o),g&&k(r),z(a,g),g&&k(u),z(f,g)}}}function zD(n,e,t){let i,s,l;kt(n,mo,d=>t(2,i=d)),kt(n,ga,d=>t(0,s=d)),kt(n,Jt,d=>t(3,l=d));let o,r=!1;function a(d){var p,g,v,b;((p=d==null?void 0:d.detail)==null?void 0:p.location)!==o&&(t(1,r=!!((v=(g=d==null?void 0:d.detail)==null?void 0:g.userData)!=null&&v.showAppSidebar)),o=(b=d==null?void 0:d.detail)==null?void 0:b.location,_n(Jt,l="",l),Fi({}),qg())}function u(){vi("/")}async function f(){var d;if(!!(s!=null&&s.id))try{const p=await ye.Settings.getAll({$cancelKey:"loadAppName"});_n(mo,i=((d=p==null?void 0:p.meta)==null?void 0:d.appName)||"",i)}catch(p){console.warn("Failed to load app name.",p)}}function c(){ye.logout()}return n.$$.update=()=>{n.$$.dirty&1&&s!=null&&s.id&&f()},[s,r,i,l,a,u,c]}class BD extends Oe{constructor(e){super(),De(this,e,zD,VD,Te,{})}}new BD({target:document.getElementById("app")});export{Qe as A,cn as B,G as C,vi as D,st as E,Vm as F,kt as G,ks as H,rn as I,On as J,zn as K,me as L,Oe as S,P as a,T as b,B as c,z as d,_ as e,h as f,w as g,m as h,De as i,Ye as j,Ee as k,wn as l,V as m,Ae as n,k as o,ye as p,Pe as q,se as r,Te as s,A as t,Q as u,Wt as v,N as w,ge as x,re as y,we as z};
-364
View File
@@ -1,364 +0,0 @@
const Hb=function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const l of s)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&i(r)}).observe(document,{childList:!0,subtree:!0});function t(s){const l={};return s.integrity&&(l.integrity=s.integrity),s.referrerpolicy&&(l.referrerPolicy=s.referrerpolicy),s.crossorigin==="use-credentials"?l.credentials="include":s.crossorigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function i(s){if(s.ep)return;s.ep=!0;const l=t(s);fetch(s.href,l)}};Hb();function re(){}const Ul=n=>n;function ct(n,e){for(const t in e)n[t]=e[t];return n}function Rg(n){return n()}function gf(){return Object.create(null)}function rt(n){n.forEach(Rg)}function Jn(n){return typeof n=="function"}function Ae(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}let rr;function ei(n,e){return rr||(rr=document.createElement("a")),rr.href=e,n===rr.href}function qb(n){return Object.keys(n).length===0}function jg(n,...e){if(n==null)return re;const t=n.subscribe(...e);return t.unsubscribe?()=>t.unsubscribe():t}function hn(n,e,t){n.$$.on_destroy.push(jg(e,t))}function Tn(n,e,t,i){if(n){const s=Hg(n,e,t,i);return n[0](s)}}function Hg(n,e,t,i){return n[1]&&i?ct(t.ctx.slice(),n[1](i(e))):t.ctx}function Dn(n,e,t,i){if(n[2]&&i){const s=n[2](i(t));if(e.dirty===void 0)return s;if(typeof s=="object"){const l=[],r=Math.max(e.dirty.length,s.length);for(let o=0;o<r;o+=1)l[o]=e.dirty[o]|s[o];return l}return e.dirty|s}return e.dirty}function An(n,e,t,i,s,l){if(s){const r=Hg(e,t,i,l);n.p(r,s)}}function En(n){if(n.ctx.length>32){const e=[],t=n.ctx.length/32;for(let i=0;i<t;i++)e[i]=-1;return e}return-1}function di(n){const e={};for(const t in n)t[0]!=="$"&&(e[t]=n[t]);return e}function Yt(n,e){const t={};e=new Set(e);for(const i in n)!e.has(i)&&i[0]!=="$"&&(t[i]=n[i]);return t}function _f(n){return n==null?"":n}function qg(n,e,t){return n.set(t),e}function Xe(n){return n&&Jn(n.destroy)?n.destroy:re}const Vg=typeof window!="undefined";let ko=Vg?()=>window.performance.now():()=>Date.now(),_u=Vg?n=>requestAnimationFrame(n):re;const Is=new Set;function zg(n){Is.forEach(e=>{e.c(n)||(Is.delete(e),e.f())}),Is.size!==0&&_u(zg)}function wo(n){let e;return Is.size===0&&_u(zg),{promise:new Promise(t=>{Is.add(e={c:n,f:t})}),abort(){Is.delete(e)}}}function m(n,e){n.appendChild(e)}function Bg(n){if(!n)return document;const e=n.getRootNode?n.getRootNode():n.ownerDocument;return e&&e.host?e:n.ownerDocument}function Vb(n){const e=_("style");return zb(Bg(n),e),e.sheet}function zb(n,e){m(n.head||n,e)}function w(n,e,t){n.insertBefore(e,t||null)}function k(n){n.parentNode.removeChild(n)}function Bn(n,e){for(let t=0;t<n.length;t+=1)n[t]&&n[t].d(e)}function _(n){return document.createElement(n)}function H(n){return document.createTextNode(n)}function O(){return H(" ")}function lt(){return H("")}function X(n,e,t,i){return n.addEventListener(e,t,i),()=>n.removeEventListener(e,t,i)}function Kt(n){return function(e){return e.preventDefault(),n.call(this,e)}}function Un(n){return function(e){return e.stopPropagation(),n.call(this,e)}}function Ug(n){return function(e){e.target===this&&n.call(this,e)}}function p(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function ci(n,e){const t=Object.getOwnPropertyDescriptors(n.__proto__);for(const i in e)e[i]==null?n.removeAttribute(i):i==="style"?n.style.cssText=e[i]:i==="__value"?n.value=n[i]=e[i]:t[i]&&t[i].set?n[i]=e[i]:p(n,i,e[i])}function Tt(n){return n===""?null:+n}function Bb(n){return Array.from(n.childNodes)}function _e(n,e){e=""+e,n.wholeText!==e&&(n.data=e)}function $e(n,e){n.value=e==null?"":e}function bf(n,e,t,i){t===null?n.style.removeProperty(e):n.style.setProperty(e,t,i?"important":"")}function Q(n,e,t){n.classList[t?"add":"remove"](e)}function Wg(n,e,{bubbles:t=!1,cancelable:i=!1}={}){const s=document.createEvent("CustomEvent");return s.initCustomEvent(n,t,i,e),s}const Zr=new Map;let xr=0;function Ub(n){let e=5381,t=n.length;for(;t--;)e=(e<<5)-e^n.charCodeAt(t);return e>>>0}function Wb(n,e){const t={stylesheet:Vb(e),rules:{}};return Zr.set(n,t),t}function Ll(n,e,t,i,s,l,r,o=0){const a=16.666/i;let u=`{
`;for(let b=0;b<=1;b+=a){const v=e+(t-e)*l(b);u+=b*100+`%{${r(v,1-v)}}
`}const f=u+`100% {${r(t,1-t)}}
}`,c=`__svelte_${Ub(f)}_${o}`,d=Bg(n),{stylesheet:h,rules:g}=Zr.get(d)||Wb(d,n);g[c]||(g[c]=!0,h.insertRule(`@keyframes ${c} ${f}`,h.cssRules.length));const y=n.style.animation||"";return n.style.animation=`${y?`${y}, `:""}${c} ${i}ms linear ${s}ms 1 both`,xr+=1,c}function Fl(n,e){const t=(n.style.animation||"").split(", "),i=t.filter(e?l=>l.indexOf(e)<0:l=>l.indexOf("__svelte")===-1),s=t.length-i.length;s&&(n.style.animation=i.join(", "),xr-=s,xr||Yb())}function Yb(){_u(()=>{xr||(Zr.forEach(n=>{const{stylesheet:e}=n;let t=e.cssRules.length;for(;t--;)e.deleteRule(t);n.rules={}}),Zr.clear())})}function Kb(n,e,t,i){if(!e)return re;const s=n.getBoundingClientRect();if(e.left===s.left&&e.right===s.right&&e.top===s.top&&e.bottom===s.bottom)return re;const{delay:l=0,duration:r=300,easing:o=Ul,start:a=ko()+l,end:u=a+r,tick:f=re,css:c}=t(n,{from:e,to:s},i);let d=!0,h=!1,g;function y(){c&&(g=Ll(n,0,1,r,l,o,c)),l||(h=!0)}function b(){c&&Fl(n,g),d=!1}return wo(v=>{if(!h&&v>=a&&(h=!0),h&&v>=u&&(f(1,0),b()),!d)return!1;if(h){const S=v-a,$=0+1*o(S/r);f($,1-$)}return!0}),y(),f(0,1),b}function Jb(n){const e=getComputedStyle(n);if(e.position!=="absolute"&&e.position!=="fixed"){const{width:t,height:i}=e,s=n.getBoundingClientRect();n.style.position="absolute",n.style.width=t,n.style.height=i,Yg(n,s)}}function Yg(n,e){const t=n.getBoundingClientRect();if(e.left!==t.left||e.top!==t.top){const i=getComputedStyle(n),s=i.transform==="none"?"":i.transform;n.style.transform=`${s} translate(${e.left-t.left}px, ${e.top-t.top}px)`}}let Il;function Sl(n){Il=n}function So(){if(!Il)throw new Error("Function called outside component initialization");return Il}function pi(n){So().$$.on_mount.push(n)}function Gb(n){So().$$.after_update.push(n)}function Zb(n){So().$$.on_destroy.push(n)}function _n(){const n=So();return(e,t,{cancelable:i=!1}={})=>{const s=n.$$.callbacks[e];if(s){const l=Wg(e,t,{cancelable:i});return s.slice().forEach(r=>{r.call(n,l)}),!l.defaultPrevented}return!0}}function ut(n,e){const t=n.$$.callbacks[e.type];t&&t.slice().forEach(i=>i.call(this,e))}const _l=[],he=[],jr=[],Aa=[],Kg=Promise.resolve();let Ea=!1;function Jg(){Ea||(Ea=!0,Kg.then(Gg))}function Mi(){return Jg(),Kg}function Dt(n){jr.push(n)}function je(n){Aa.push(n)}const Ro=new Set;let or=0;function Gg(){const n=Il;do{for(;or<_l.length;){const e=_l[or];or++,Sl(e),xb(e.$$)}for(Sl(null),_l.length=0,or=0;he.length;)he.pop()();for(let e=0;e<jr.length;e+=1){const t=jr[e];Ro.has(t)||(Ro.add(t),t())}jr.length=0}while(_l.length);for(;Aa.length;)Aa.pop()();Ea=!1,Ro.clear(),Sl(n)}function xb(n){if(n.fragment!==null){n.update(),rt(n.before_update);const e=n.dirty;n.dirty=[-1],n.fragment&&n.fragment.p(n.ctx,e),n.after_update.forEach(Dt)}}let nl;function bu(){return nl||(nl=Promise.resolve(),nl.then(()=>{nl=null})),nl}function fs(n,e,t){n.dispatchEvent(Wg(`${e?"intro":"outro"}${t}`))}const Hr=new Set;let ai;function Oe(){ai={r:0,c:[],p:ai}}function Te(){ai.r||rt(ai.c),ai=ai.p}function A(n,e){n&&n.i&&(Hr.delete(n),n.i(e))}function F(n,e,t,i){if(n&&n.o){if(Hr.has(n))return;Hr.add(n),ai.c.push(()=>{Hr.delete(n),i&&(t&&n.d(1),i())}),n.o(e)}else i&&i()}const yu={duration:0};function vu(n,e,t){let i=e(n,t),s=!1,l,r,o=0;function a(){l&&Fl(n,l)}function u(){const{delay:c=0,duration:d=300,easing:h=Ul,tick:g=re,css:y}=i||yu;y&&(l=Ll(n,0,1,d,c,h,y,o++)),g(0,1);const b=ko()+c,v=b+d;r&&r.abort(),s=!0,Dt(()=>fs(n,!0,"start")),r=wo(S=>{if(s){if(S>=v)return g(1,0),fs(n,!0,"end"),a(),s=!1;if(S>=b){const $=h((S-b)/d);g($,1-$)}}return s})}let f=!1;return{start(){f||(f=!0,Fl(n),Jn(i)?(i=i(),bu().then(u)):u())},invalidate(){f=!1},end(){s&&(a(),s=!1)}}}function Zg(n,e,t){let i=e(n,t),s=!0,l;const r=ai;r.r+=1;function o(){const{delay:a=0,duration:u=300,easing:f=Ul,tick:c=re,css:d}=i||yu;d&&(l=Ll(n,1,0,u,a,f,d));const h=ko()+a,g=h+u;Dt(()=>fs(n,!1,"start")),wo(y=>{if(s){if(y>=g)return c(0,1),fs(n,!1,"end"),--r.r||rt(r.c),!1;if(y>=h){const b=f((y-h)/u);c(1-b,b)}}return s})}return Jn(i)?bu().then(()=>{i=i(),o()}):o(),{end(a){a&&i.tick&&i.tick(1,0),s&&(l&&Fl(n,l),s=!1)}}}function ft(n,e,t,i){let s=e(n,t),l=i?0:1,r=null,o=null,a=null;function u(){a&&Fl(n,a)}function f(d,h){const g=d.b-l;return h*=Math.abs(g),{a:l,b:d.b,d:g,duration:h,start:d.start,end:d.start+h,group:d.group}}function c(d){const{delay:h=0,duration:g=300,easing:y=Ul,tick:b=re,css:v}=s||yu,S={start:ko()+h,b:d};d||(S.group=ai,ai.r+=1),r||o?o=S:(v&&(u(),a=Ll(n,l,d,g,h,y,v)),d&&b(0,1),r=f(S,g),Dt(()=>fs(n,d,"start")),wo($=>{if(o&&$>o.start&&(r=f(o,g),o=null,fs(n,r.b,"start"),v&&(u(),a=Ll(n,l,r.b,r.duration,0,y,s.css))),r){if($>=r.end)b(l=r.b,1-l),fs(n,r.b,"end"),o||(r.b?u():--r.group.r||rt(r.group.c)),r=null;else if($>=r.start){const C=$-r.start;l=r.a+r.d*y(C/r.duration),b(l,1-l)}}return!!(r||o)}))}return{run(d){Jn(s)?bu().then(()=>{s=s(),c(d)}):c(d)},end(){u(),r=o=null}}}function an(n,e){n.d(1),e.delete(n.key)}function Lt(n,e){F(n,1,1,()=>{e.delete(n.key)})}function Xb(n,e){n.f(),Lt(n,e)}function ot(n,e,t,i,s,l,r,o,a,u,f,c){let d=n.length,h= Line truncated
`),function(l){if(i=l.indexOf(":"),e=qo.trim(l.substr(0,i)).toLowerCase(),t=qo.trim(l.substr(i+1)),e){if(s[e]&&b1.indexOf(e)>=0)return;s[e]=e==="set-cookie"?(s[e]?s[e]:[]).concat([t]):s[e]?s[e]+", "+t:t}}),s},C1=y1,Vo=l_,M1=function(n){return new Promise(function(e,t){var i=n.data,s=n.headers,l=n.responseType;fr.isFormData(i)&&delete s["Content-Type"];var r=new XMLHttpRequest;if(n.auth){var o=n.auth.username||"",a=n.auth.password?unescape(encodeURIComponent(n.auth.password)):"";s.Authorization="Basic "+btoa(o+":"+a)}var u=S1(n.baseURL,n.url);function f(){if(r){var d="getAllResponseHeaders"in r?$1(r.getAllResponseHeaders()):null,h={data:l&&l!=="text"&&l!=="json"?r.response:r.responseText,status:r.status,statusText:r.statusText,headers:d,config:n,request:r};v1(e,t,h),r=null}}if(r.open(n.method.toUpperCase(),w1(u,n.params,n.paramsSerializer),!0),r.timeout=n.timeout,"onloadend"in r?r.onloadend=f:r.onreadystatechange=function(){r&&r.readyState===4&&(r.status!==0||r.responseURL&&r.responseURL.indexOf("file:")===0)&&setTimeout(f)},r.onabort=function(){r&&(t(Vo("Request aborted",n,"ECONNABORTED",r)),r=null)},r.onerror=function(){t(Vo("Network Error",n,null,r)),r=null},r.ontimeout=function(){var d="timeout of "+n.timeout+"ms exceeded";n.timeoutErrorMessage&&(d=n.timeoutErrorMessage),t(Vo(d,n,n.transitional&&n.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",r)),r=null},fr.isStandardBrowserEnv()){var c=(n.withCredentials||C1(u))&&n.xsrfCookieName?k1.read(n.xsrfCookieName):void 0;c&&(s[n.xsrfHeaderName]=c)}"setRequestHeader"in r&&fr.forEach(s,function(d,h){i===void 0&&h.toLowerCase()==="content-type"?delete s[h]:r.setRequestHeader(h,d)}),fr.isUndefined(n.withCredentials)||(r.withCredentials=!!n.withCredentials),l&&l!=="json"&&(r.responseType=n.responseType),typeof n.onDownloadProgress=="function"&&r.addEventListener("progress",n.onDownloadProgress),typeof n.onUploadProgress=="function"&&r.upload&&r.upload.addEventListener("progress",n.onUploadProgress),n.cancelToken&&n.cancelToken.promise.then(function(d){r&&(r.abort(),t(d),r=null)}),i||(i=null),r.send(i)})},Xt=Fn,Df=function(n,e){d1.forEach(n,function(t,i){i!==e&&i.toUpperCase()===e.toUpperCase()&&(n[e]=t,delete n[i])})},O1=s_,T1={"Content-Type":"application/x-www-form-urlencoded"};function Af(n,e){!Xt.isUndefined(n)&&Xt.isUndefined(n["Content-Type"])&&(n["Content-Type"]=e)}var Ef,zr={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:((typeof XMLHttpRequest!="undefined"||typeof process!="undefined"&&Object.prototype.toString.call(process)==="[object process]")&&(Ef=M1),Ef),transformRequest:[function(n,e){return Df(e,"Accept"),Df(e,"Content-Type"),Xt.isFormData(n)||Xt.isArrayBuffer(n)||Xt.isBuffer(n)||Xt.isStream(n)||Xt.isFile(n)||Xt.isBlob(n)?n:Xt.isArrayBufferView(n)?n.buffer:Xt.isURLSearchParams(n)?(Af(e,"application/x-www-form-urlencoded;charset=utf-8"),n.toString()):Xt.isObject(n)||e&&e["Content-Type"]==="application/json"?(Af(e,"application/json"),function(t,i,s){if(Xt.isString(t))try{return(i||JSON.parse)(t),Xt.trim(t)}catch(l){if(l.name!=="SyntaxError")throw l}return(s||JSON.stringify)(t)}(n)):n}],transformResponse:[function(n){var e=this.transitional,t=e&&e.silentJSONParsing,i=e&&e.forcedJSONParsing,s=!t&&this.responseType==="json";if(s||i&&Xt.isString(n)&&n.length)try{return JSON.parse(n)}catch(l){if(s)throw l.name==="SyntaxError"?O1(l,this,"E_JSON_PARSE"):l}return n}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(n){return n>=200&&n<300}};zr.headers={common:{Accept:"application/json, text/plain, */*"}},Xt.forEach(["delete","get","head"],function(n){zr.headers[n]={}}),Xt.forEach(["post","put","patch"],function(n){zr.headers[n]=Xt.merge(T1)});var ku=zr,D1=Fn,A1=ku,r_=function(n){return!(!n||!n.__CANCEL__)},Pf=Fn,zo=function(n,e,t){var i=this||A1;return D1.forEach(t,function(s){n=s.call(i,n,e)}),n},E1=r_,P1=ku;function Bo(n){n.cancelToken&&n.cancelToken.throwIfRequested()}var sn=Fn,o_=function(n,e){e=e||{};var t={},i=["url","method","data"],s=["headers","auth","proxy","params"],l=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],r=["validateStatus"];function o(c,d){return sn.isPlainObject(c)&&sn.isPlainObject(d)?sn.merge(c,d):sn.isPlainObject(d)?sn.merge({},d):sn.isArray(d)?d.slice():d}function a(c){sn.isUndefined(e[c])?sn.isUndefined(n[c])||(t[c]=o(void 0,n[c])):t[c]=o(n[c],e[c])}sn.forEach(i,function(c){sn.isUndefined(e[c])||(t[c]=o(void 0,e[c]))}),sn.forEach(s,a),sn.forEach(l,function(c){sn.isUndefined(e[c])?sn.isUndefined(n[c])||(t[c]=o(void 0,n[c])):t[c]=o(void 0,e[c])}),sn.forEach(r,function(c){c in e?t[c]=o(n[c],e[c]): Line truncated
`+e.prev+e.base;return t+ri.call(n,","+t)+`
`+e.prev}function hr(n,e){var t=Ra(n),i=[];if(t){i.length=n.length;for(var s=0;s<n.length;s++)i[s]=Li(n,s)?e(n[s],n):""}var l,r=typeof xo=="function"?xo(n):[];if(Bs){l={};for(var o=0;o<r.length;o++)l["$"+r[o]]=r[o]}for(var a in n)Li(n,a)&&(t&&String(Number(a))===a&&a<n.length||Bs&&l["$"+a]instanceof Symbol||(__.call(/[^\w$]/,a)?i.push(e(a,n)+": "+e(n[a],n)):i.push(a+": "+e(n[a],n))));if(typeof xo=="function")for(var u=0;u<r.length;u++)b_.call(n,r[u])&&i.push("["+e(r[u])+"]: "+e(n[r[u]],n));return i}var w_,Tu=$u,Zs=function(n,e){var t=m_(n,!!e);return typeof t=="function"&&ny(n,".prototype.")>-1?g_(t):t},my=function n(e,t,i,s){var l=t||{};if(Li(l,"quoteStyle")&&l.quoteStyle!=="single"&&l.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(Li(l,"maxStringLength")&&(typeof l.maxStringLength=="number"?l.maxStringLength<0&&l.maxStringLength!==1/0:l.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var r=!Li(l,"customInspect")||l.customInspect;if(typeof r!="boolean"&&r!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(Li(l,"indent")&&l.indent!==null&&l.indent!==" "&&!(parseInt(l.indent,10)===l.indent&&l.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Li(l,"numericSeparator")&&typeof l.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var o=l.numericSeparator;if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return k_(e,l);if(typeof e=="number"){if(e===0)return 1/0/e>0?"0":"-0";var a=String(e);return o?Yf(e,a):a}if(typeof e=="bigint"){var u=String(e)+"n";return o?Yf(e,u):u}var f=l.depth===void 0?5:l.depth;if(i===void 0&&(i=0),i>=f&&f>0&&typeof e=="object")return Ra(e)?"[Array]":"[Object]";var c=function(R,J){var W;if(R.indent===" ")W=" ";else{if(!(typeof R.indent=="number"&&R.indent>0))return null;W=ri.call(Array(R.indent+1)," ")}return{base:W,prev:ri.call(Array(J+1),W)}}(l,i);if(s===void 0)s=[];else if(Zf(s,e)>=0)return"[Circular]";function d(R,J,W){if(J&&(s=cy.call(s)).push(J),W){var q={depth:l.depth};return Li(l,"quoteStyle")&&(q.quoteStyle=l.quoteStyle),n(R,q,i+1,s)}return n(R,l,i+1,s)}if(typeof e=="function"&&!Gf(e)){var h=function(R){if(R.name)return R.name;var J=uy.call(ay.call(R),/^function\s*([\w$]+)/);return J?J[1]:null}(e),g=hr(e,d);return"[Function"+(h?": "+h:" (anonymous)")+"]"+(g.length>0?" { "+ri.call(g,", ")+" }":"")}if(v_(e)){var y=Bs?ji.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):Ia.call(e);return typeof e!="object"||Bs?y:ll(y)}if(function(R){return!R||typeof R!="object"?!1:typeof HTMLElement!="undefined"&&R instanceof HTMLElement?!0:typeof R.nodeName=="string"&&typeof R.getAttribute=="function"}(e)){for(var b="<"+zf.call(String(e.nodeName)),v=e.attributes||[],S=0;S<v.length;S++)b+=" "+v[S].name+"="+y_(dy(v[S].value),"double",l);return b+=">",e.childNodes&&e.childNodes.length&&(b+="..."),b+="</"+zf.call(String(e.nodeName))+">"}if(Ra(e)){if(e.length===0)return"[]";var $=hr(e,d);return c&&!function(R){for(var J=0;J<R.length;J++)if(Zf(R[J],`
`)>=0)return!1;return!0}($)?"["+ja($,c)+"]":"[ "+ri.call($,", ")+" ]"}if(function(R){return!(Fi(R)!=="[object Error]"||ln&&typeof R=="object"&&ln in R)}(e)){var C=hr(e,d);return"cause"in Error.prototype||!("cause"in e)||b_.call(e,"cause")?C.length===0?"["+String(e)+"]":"{ ["+String(e)+"] "+ri.call(C,", ")+" }":"{ ["+String(e)+"] "+ri.call(Bf.call("[cause]: "+d(e.cause),C),", ")+" }"}if(typeof e=="object"&&r){if(Jf&&typeof e[Jf]=="function"&&Na)return Na(e,{depth:f-i});if(r!=="symbol"&&typeof e.inspect=="function")return e.inspect()}if(function(R){if(!dr||!R||typeof R!="object")return!1;try{dr.call(R);try{pr.call(R)}catch{return!0}return R instanceof Map}catch{}return!1}(e)){var M=[];return sy.call(e,function(R,J){M.push(d(J,e,!0)+" => "+d(R,e))}),xf("Map",dr.call(e),M,c)}if(function(R){if(!pr||!R||typeof R!="object")return!1;try{pr.call(R);try{dr.call(R)}catch{return!0}return R instanceof Set}catch{}return!1}(e)){var T=[];return ly.call(e,function(R){T.push(d(R,e))}),xf("Set",pr.call(e),T,c)}if(function(R){if(!il||!R||typeof R!="object")return!1;try{il.call(R,il);try{sl.call(R,sl)}catch{return!0}return R instanceof WeakMap}catch{}return!1}(e))return Xo("WeakMap");if(function(R){if(!sl||!R||typeof R!="object")return!1;try{sl.call(R,sl);try{il.call(R,il)}catch{return!0}return R instanceof WeakSet}catch{}return!1}(e))return Xo("WeakSet");if(function(R){if(!Vf||!R||typeof R!="object")return!1;try{return Vf.call(R),!0}catch{}return!1}(e))return Xo("WeakRef");if(function(R){return!(Fi(R)!=="[object Number]"||ln&&typeof R=="object"&&ln in R)}(e))return ll(d(Number(e)));if(function(R){if(!R||typeof R!="object"||!Zo)return!1;try{return Zo.call(R),!0}catch{}return!1}(e))return ll(d(Zo.call(e)));if(function(R){return!(Fi(R)!=="[object Boolean]"||ln&&typeof R=="object"&&ln in R)}(e))return ll(ry.call(e));if(function(R){return!(Fi(R)!=="[object String]"||ln&&typeof R=="object"&&ln in R)}(e))return ll(d(String(e)));if(!function(R){return!(Fi(R)!=="[object Date]"||ln&&typeof R=="object"&&ln in R)}(e)&&!Gf(e)){var E=hr(e,d),D=Wf?Wf(e)===Object.prototype:e instanceof Object||e.constructor===Object,P=e instanceof Object?"":"null prototype",L=!D&&ln&&Object(e)===e&&ln in e?Ou.call(Fi(e),8,-1):P?"Object":"",N=(D||typeof e.constructor!="function"?"":e.constructor.name?e.constructor.name+" ":"")+(L||P?"["+ri.call(Bf.call([],L||[],P||[]),": ")+"] ":"");return E.length===0?N+"{}":c?N+"{"+ja(E,c)+"}":N+"{ "+ri.call(E,", ")+" }"}return String(e)},gy=Tu("%TypeError%"),mr=Tu("%WeakMap%",!0),gr=Tu("%Map%",!0),_y=Zs("WeakMap.prototype.get",!0),by=Zs("WeakMap.prototype.set",!0),yy=Zs("WeakMap.prototype.has",!0),vy=Zs("Map.prototype.get",!0),ky=Zs("Map.prototype.set",!0),wy=Zs("Map.prototype.has",!0),Qo=function(n,e){for(var t,i=n;(t=i.next)!==null;i=t)if(t.key===e)return i.next=t.next,t.next=n.next,n.next=t,t},Sy=String.prototype.replace,$y=/%20/g,Xf="RFC3986",Du={default:Xf,formatters:{RFC1738:function(n){return Sy.call(n,$y,"+")},RFC3986:function(n){return String(n)}},RFC1738:"RFC1738",RFC3986:Xf},Cy=Du,ea=Object.prototype.hasOwnProperty,Zi=Array.isArray,si=function(){for(var n=[],e=0;e<256;++e)n.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return n}(),Qf=function(n,e){for(var t=e&&e.plainObjects?Object.create(null):{},i=0;i<n.length;++i)n[i]!==void 0&&(t[i]=n[i]);return t},S_={arrayToObject:Qf,assign:function(n,e){return Object.keys(e).reduce(function(t,i){return t[i]=e[i],t},n)},combine:function(n,e){return[].concat(n,e)},compact:function(n){for(var e=[{obj:{o:n},prop:"o"}],t=[],i=0;i<e.length;++i)for(var s=e[i],l=s.obj[s.prop],r=Object.keys(l),o=0;o<r.length;++o){var a=r[o],u=l[a];typeof u=="object"&&u!==null&&t.indexOf(u)===-1&&(e.push({obj:l,prop:a}),t.push(u))}return function(f){for(;f.length>1;){var c=f.pop(),d=c.obj[c.prop];if(Zi(d)){for(var h=[],g=0;g<d.length;++g)d[g]!==void 0&&h.push(d[g]);c.obj[c.prop]=h}}}(e),n},decode:function(n,e,t){var i=n.replace(/\+/g," ");if(t==="iso-8859-1")return i.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(i)}catch{return i}},encode:function(n,e,t,i,s){if(n.length===0)return n;var l=n;if(typeof n=="symbol"?l=Symbol.prototype.toString.call(n):typeof n!="string"&&(l=String(n)),t==="iso-8859-1")return escape(l).replace(/%u[0-9a-f]{4}/gi,function(u){return"%26%23"+parseInt(u.slice(2),16)+"%3B"});for(var r="",o=0;o<l.length;++o){var a=l.charCodeAt(o);a===45||a===46||a===95||a===126||a>=48&&a<=57||a>=65&&a<=90||a>=97&&a<=122||s===Cy.RFC1738&&(a===40||a===41)?r+=l.charAt(o):a<128?r+=si[a]:a<2048?r+=si[192|a>>6]+si[128|63&a]:a<55296||a>=57344?r+=si[224|a>>12]+si[128|a>>6&63]+si[128|63&a]:(o+=1,a=65536+((1023&a)<<10|1023&l.charCodeAt(o)),r+=si[240|a>>18]+si[128|a>>12&63]+si[128|a>>6&63]+si[128|63&a])}return r},isBuffer:function(n){return!(!n||typeof n!="object")&&!!(n.constructor&&n.constructor.isBuffer&&n.constructor.isBuffer(n))},isRegExp:function(n){return Object.prototype.toString.call(n)==="[object RegExp]"},maybeMap:function(n,e){if(Zi(n)){for(var t=[],i=0;i<n.length; Line truncated
<span class="txt">Pocket<strong>Base</strong></span></figure>`,t=O(),i=_("div"),p(e,"class","block txt-center m-b-lg"),p(i,"class","clearfix")},m(s,l){w(s,e,l),w(s,t,l),w(s,i,l)},d(s){s&&k(e),s&&k(t),s&&k(i)}}}function Uk(n){let e,t,i,s,l,r,o,a,u=!n[0]&&Mc();const f=n[2].default,c=Tn(f,n,n[1],null);return{c(){e=_("div"),t=_("div"),i=O(),s=_("div"),u&&u.c(),l=O(),c&&c.c(),r=O(),o=_("div"),p(t,"class","flex-fill"),p(s,"class","wrapper wrapper-sm m-b-xl svelte-1wbawr2"),p(o,"class","flex-fill"),p(e,"class","page-wrapper full-page-panel svelte-1wbawr2")},m(d,h){w(d,e,h),m(e,t),m(e,i),m(e,s),u&&u.m(s,null),m(s,l),c&&c.m(s,null),m(e,r),m(e,o),a=!0},p(d,[h]){d[0]?u&&(u.d(1),u=null):u||(u=Mc(),u.c(),u.m(s,l)),c&&c.p&&(!a||h&2)&&An(c,f,d,d[1],a?Dn(f,d[1],h,null):En(d[1]),null)},i(d){a||(A(c,d),a=!0)},o(d){F(c,d),a=!1},d(d){d&&k(e),u&&u.d(),c&&c.d(d)}}}function Wk(n,e,t){let{$$slots:i={},$$scope:s}=e,{nobranding:l=!1}=e;return n.$$set=r=>{"nobranding"in r&&t(0,l=r.nobranding),"$$scope"in r&&t(1,s=r.$$scope)},[l,s,i]}class P0 extends Fe{constructor(e){super(),Le(this,e,Wk,Uk,Ae,{nobranding:0})}}function Oc(n,e,t){const i=n.slice();return i[11]=e[t],i}const Yk=n=>({}),Tc=n=>({uniqueId:n[3]});function Kk(n){let e=(n[11]||lo)+"",t;return{c(){t=H(e)},m(i,s){w(i,t,s)},p(i,s){s&4&&e!==(e=(i[11]||lo)+"")&&_e(t,e)},d(i){i&&k(t)}}}function Jk(n){var i,s;let e=(((i=n[11])==null?void 0:i.message)||((s=n[11])==null?void 0:s.code)||lo)+"",t;return{c(){t=H(e)},m(l,r){w(l,t,r)},p(l,r){var o,a;r&4&&e!==(e=(((o=l[11])==null?void 0:o.message)||((a=l[11])==null?void 0:a.code)||lo)+"")&&_e(t,e)},d(l){l&&k(t)}}}function Dc(n){let e,t;function i(r,o){return typeof r[11]=="object"?Jk:Kk}let s=i(n),l=s(n);return{c(){e=_("div"),l.c(),t=O(),p(e,"class","help-block help-block-error")},m(r,o){w(r,e,o),l.m(e,null),m(e,t)},p(r,o){s===(s=i(r))&&l?l.p(r,o):(l.d(1),l=s(r),l&&(l.c(),l.m(e,t)))},d(r){r&&k(e),l.d()}}}function Gk(n){let e,t,i,s,l;const r=n[7].default,o=Tn(r,n,n[6],Tc);let a=n[2],u=[];for(let f=0;f<a.length;f+=1)u[f]=Dc(Oc(n,a,f));return{c(){e=_("div"),o&&o.c(),t=O();for(let f=0;f<u.length;f+=1)u[f].c();p(e,"class",n[0]),Q(e,"error",n[2].length)},m(f,c){w(f,e,c),o&&o.m(e,null),m(e,t);for(let d=0;d<u.length;d+=1)u[d].m(e,null);n[9](e),i=!0,s||(l=X(e,"click",n[8]),s=!0)},p(f,[c]){if(o&&o.p&&(!i||c&64)&&An(o,r,f,f[6],i?Dn(r,f[6],c,Yk):En(f[6]),Tc),c&4){a=f[2];let d;for(d=0;d<a.length;d+=1){const h=Oc(f,a,d);u[d]?u[d].p(h,c):(u[d]=Dc(h),u[d].c(),u[d].m(e,null))}for(;d<u.length;d+=1)u[d].d(1);u.length=a.length}(!i||c&1)&&p(e,"class",f[0]),c&5&&Q(e,"error",f[2].length)},i(f){i||(A(o,f),i=!0)},o(f){F(o,f),i=!1},d(f){f&&k(e),o&&o.d(f),Bn(u,f),n[9](null),s=!1,l()}}}const lo="Invalid value";function Zk(n,e,t){let i;hn(n,_s,g=>t(5,i=g));let{$$slots:s={},$$scope:l}=e;const r="field_"+U.randomString(7);let{name:o=""}=e,{class:a=void 0}=e,u,f=[];function c(){E0(o)}pi(()=>(u.addEventListener("change",c),()=>{u.removeEventListener("change",c)}));function d(g){ut.call(this,n,g)}function h(g){he[g?"unshift":"push"](()=>{u=g,t(1,u)})}return n.$$set=g=>{"name"in g&&t(4,o=g.name),"class"in g&&t(0,a=g.class),"$$scope"in g&&t(6,l=g.$$scope)},n.$$.update=()=>{n.$$.dirty&48&&t(2,f=U.toArray(U.getNestedVal(i,o)))},[a,u,f,r,o,i,l,s,d,h]}class Ne extends Fe{constructor(e){super(),Le(this,e,Zk,Gk,Ae,{name:4,class:0})}}function xk(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Email"),s=O(),l=_("input"),p(e,"for",i=n[9]),p(l,"type","email"),p(l,"autocomplete","off"),p(l,"id",r=n[9]),l.required=!0,l.autofocus=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0]),l.focus(),o||(a=X(l,"input",n[5]),o=!0)},p(u,f){f&512&&i!==(i=u[9])&&p(e,"for",i),f&512&&r!==(r=u[9])&&p(l,"id",r),f&1&&l.value!==u[0]&&$e(l,u[0])},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function Xk(n){let e,t,i,s,l,r,o,a,u,f;return{c(){e=_("label"),t=H("Password"),s=O(),l=_("input"),o=O(),a=_("div"),a.textContent="Minimum 10 characters.",p(e,"for",i=n[9]),p(l,"type","password"),p(l,"autocomplete","new-password"),p(l,"minlength","10"),p(l,"id",r=n[9]),l.required=!0,p(a,"class","help-block")},m(c,d){w(c,e,d),m(e,t),w(c,s,d),w(c,l,d),$e(l,n[1]),w(c,o,d),w(c,a,d),u||(f=X(l,"input",n[6]),u=!0)},p(c,d){d&512&&i!==(i=c[9])&&p(e,"for",i),d&512&&r!==(r=c[9])&&p(l,"id",r),d&2&&l.value!==c[1]&&$e(l,c[1])},d(c){c&&k(e),c&&k(s),c&&k(l),c&&k(o),c&&k(a),u=!1,f()}}}function Qk(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Password confirm"),s=O(),l=_("input"),p(e,"for",i=n[9]),p(l,"type","password"),p(l,"minlength","10"),p(l,"id",r=n[9]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[2]),o||(a=X(l,"input",n[7]),o=!0)},p(u,f){f&512&&i!==(i=u[9])&&p(e,"for",i),f&512&&r!==(r=u[9])&&p(l,"id",r),f&4&&l.value!==u[2]&&$e(l,u[2])},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function e2(n){let e,t,i,s,l,r,o,a,u,f,c,d,h;return s=new Ne({props:{class:"form-field required",name:"email",$$slots:{default:[xk,({uniqueId:g})=>({9:g}),({uniqueId:g})=>g?512:0]},$$scope:{ctx:n}}}),r=new Ne({props:{Line truncated
<i class="ri-arrow-right-line"></i>`,p(t,"class","content txt-center m-b-base"),p(f,"type","submit"),p(f,"class","btn btn-lg btn-block btn-next"),Q(f,"btn-disabled",n[3]),Q(f,"btn-loading",n[3]),p(e,"class","block"),p(e,"autocomplete","off")},m(g,y){w(g,e,y),m(e,t),m(e,i),V(s,e,null),m(e,l),V(r,e,null),m(e,o),V(a,e,null),m(e,u),m(e,f),c=!0,d||(h=X(e,"submit",Kt(n[4])),d=!0)},p(g,[y]){const b={};y&1537&&(b.$$scope={dirty:y,ctx:g}),s.$set(b);const v={};y&1538&&(v.$$scope={dirty:y,ctx:g}),r.$set(v);const S={};y&1540&&(S.$$scope={dirty:y,ctx:g}),a.$set(S),y&8&&Q(f,"btn-disabled",g[3]),y&8&&Q(f,"btn-loading",g[3])},i(g){c||(A(s.$$.fragment,g),A(r.$$.fragment,g),A(a.$$.fragment,g),c=!0)},o(g){F(s.$$.fragment,g),F(r.$$.fragment,g),F(a.$$.fragment,g),c=!1},d(g){g&&k(e),z(s),z(r),z(a),d=!1,h()}}}function t2(n,e,t){const i=_n();let s="",l="",r="",o=!1;async function a(){if(!o){t(3,o=!0);try{await we.Admins.create({email:s,password:l,passwordConfirm:r}),await we.Admins.authViaEmail(s,l),i("submit")}catch(d){we.errorResponseHandler(d)}t(3,o=!1)}}function u(){s=this.value,t(0,s)}function f(){l=this.value,t(1,l)}function c(){r=this.value,t(2,r)}return[s,l,r,o,a,u,f,c]}class n2 extends Fe{constructor(e){super(),Le(this,e,t2,e2,Ae,{})}}function Ac(n){let e,t;return e=new P0({props:{$$slots:{default:[i2]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s&9&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){F(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function i2(n){let e,t;return e=new n2({}),e.$on("submit",n[1]),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p:re,i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){F(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function s2(n){let e,t,i=n[0]&&Ac(n);return{c(){i&&i.c(),e=lt()},m(s,l){i&&i.m(s,l),w(s,e,l),t=!0},p(s,[l]){s[0]?i?(i.p(s,l),l&1&&A(i,1)):(i=Ac(s),i.c(),A(i,1),i.m(e.parentNode,e)):i&&(Oe(),F(i,1,1,()=>{i=null}),Te())},i(s){t||(A(i),t=!0)},o(s){F(i),t=!1},d(s){i&&i.d(s),s&&k(e)}}}function l2(n,e,t){let i=!1;s();function s(){if(t(0,i=!1),new URLSearchParams(window.location.search).has("installer")){we.logout(!1),t(0,i=!0);return}we.AuthStore.isValid?Gs("/collections"):we.logout()}return[i,async()=>{t(0,i=!1),await Mi(),window.location.search=""}]}class r2 extends Fe{constructor(e){super(),Le(this,e,l2,s2,Ae,{})}}let xa,Qi;const Xa="app-tooltip";function Ec(n){return typeof n=="string"?{text:n,position:"bottom",hideOnClick:null}:n||{}}function Vi(){return Qi=Qi||document.querySelector("."+Xa),Qi||(Qi=document.createElement("div"),Qi.classList.add(Xa),document.body.appendChild(Qi)),Qi}function L0(n,e){let t=Vi();if(!t.classList.contains("active")||!(e!=null&&e.text)){Qa();return}t.textContent=e.text,t.className=Xa+" active",e.class&&t.classList.add(e.class),t.style.top="0px",t.style.left="0px";let i=t.offsetHeight,s=t.offsetWidth,l=n.getBoundingClientRect(),r=0,o=0,a=5;e.position=="left"?(r=l.top+l.height/2-i/2,o=l.left-s-a):e.position=="right"?(r=l.top+l.height/2-i/2,o=l.right+a):e.position=="top"?(r=l.top-i-a,o=l.left+l.width/2-s/2):e.position=="top-left"?(r=l.top-i-a,o=l.left):e.position=="top-right"?(r=l.top-i-a,o=l.right-s):e.position=="bottom-left"?(r=l.top+l.height+a,o=l.left):e.position=="bottom-right"?(r=l.top+l.height+a,o=l.right-s):(r=l.top+l.height+a,o=l.left+l.width/2-s/2),o+s>document.documentElement.clientWidth&&(o=document.documentElement.clientWidth-s),o=o>=0?o:0,r+i>document.documentElement.clientHeight&&(r=document.documentElement.clientHeight-i),r=r>=0?r:0,t.style.top=r+"px",t.style.left=o+"px"}function Qa(){clearTimeout(xa),Vi().classList.remove("active"),Vi().activeNode=void 0}function o2(n,e){Vi().activeNode=n,clearTimeout(xa),xa=setTimeout(()=>{Vi().classList.add("active"),L0(n,e)},isNaN(e.delay)?250:e.delay)}function St(n,e){let t=Ec(e);function i(){o2(n,t)}function s(){Qa()}return n.addEventListener("mouseenter",i),n.addEventListener("mouseleave",s),n.addEventListener("blur",s),(t.hideOnClick===!0||t.hideOnClick===null&&U.isFocusable(n))&&n.addEventListener("click",s),Vi(),{update(l){var r,o;t=Ec(l),(o=(r=Vi())==null?void 0:r.activeNode)!=null&&o.contains(n)&&L0(n,t)},destroy(){var l,r;(r=(l=Vi())==null?void 0:l.activeNode)!=null&&r.contains(n)&&Qa(),n.removeEventListener("mouseenter",i),n.removeEventListener("mouseleave",s),n.removeEventListener("blur",s),n.removeEventListener("click",s)}}}function Do(n){const e=n-1;return e*e*e+1}function ro(n,{delay:e=0,duration:t=400,easing:i=Ul}={}){const s=+getComputedStyle(n).opacity;return{delay:e,duration:t,easing:i,css:l=>`opacity: ${l*s}`}}function ni(n,{delay:e=0,duration:t=400,easing:i=Do,x:s=0,y:l=0,opacity:r=0}={}){const o=getComputedStyle(n),a=+o.opacity,u=o.transform==="none"?"":o.transform,f=a*(1-r);return{delay:e,duration:t,easing:i,css:(c,d)=>`
transform: ${u} translate(${(1-c)*s}px, ${(1-c)*l}px);
opacity: ${a-f*d}`}}function un(n,{delay:e=0,duration:t=400,easing:i=Do}={}){const s=getComputedStyle(n),l=+s.opacity,r=parseFloat(s.height),o=parseFloat(s.paddingTop),a=parseFloat(s.paddingBottom),u=parseFloat(s.marginTop),f=parseFloat(s.marginBottom),c=parseFloat(s.borderTopWidth),d=parseFloat(s.borderBottomWidth);return{delay:e,duration:t,easing:i,css:h=>`overflow: hidden;opacity: ${Math.min(h*20,1)*l};height: ${h*r}px;padding-top: ${h*o}px;padding-bottom: ${h*a}px;margin-top: ${h*u}px;margin-bottom: ${h*f}px;border-top-width: ${h*c}px;border-bottom-width: ${h*d}px;`}}function Wn(n,{delay:e=0,duration:t=400,easing:i=Do,start:s=0,opacity:l=0}={}){const r=getComputedStyle(n),o=+r.opacity,a=r.transform==="none"?"":r.transform,u=1-s,f=o*(1-l);return{delay:e,duration:t,easing:i,css:(c,d)=>`
transform: ${a} scale(${1-u*d});
opacity: ${o-f*d}
`}}function a2(n){let e,t,i,s;return{c(){e=_("input"),p(e,"type","text"),p(e,"id",n[8]),p(e,"placeholder",t=n[0]||n[1])},m(l,r){w(l,e,r),n[13](e),$e(e,n[7]),i||(s=X(e,"input",n[14]),i=!0)},p(l,r){r&3&&t!==(t=l[0]||l[1])&&p(e,"placeholder",t),r&128&&e.value!==l[7]&&$e(e,l[7])},i:re,o:re,d(l){l&&k(e),n[13](null),i=!1,s()}}}function u2(n){let e,t,i,s;function l(a){n[12](a)}var r=n[4];function o(a){let u={singleLine:!0,disableRequestKeys:!0,disableIndirectCollectionsKeys:!0,extraAutocompleteKeys:a[3],baseCollection:a[2],placeholder:a[0]||a[1]};return a[7]!==void 0&&(u.value=a[7]),{props:u}}return r&&(e=new r(o(n)),he.push(()=>Re(e,"value",l)),e.$on("submit",n[10])),{c(){e&&B(e.$$.fragment),i=lt()},m(a,u){e&&V(e,a,u),w(a,i,u),s=!0},p(a,u){const f={};if(u&8&&(f.extraAutocompleteKeys=a[3]),u&4&&(f.baseCollection=a[2]),u&3&&(f.placeholder=a[0]||a[1]),!t&&u&128&&(t=!0,f.value=a[7],je(()=>t=!1)),r!==(r=a[4])){if(e){Oe();const c=e;F(c.$$.fragment,1,0,()=>{z(c,1)}),Te()}r?(e=new r(o(a)),he.push(()=>Re(e,"value",l)),e.$on("submit",a[10]),B(e.$$.fragment),A(e.$$.fragment,1),V(e,i.parentNode,i)):e=null}else r&&e.$set(f)},i(a){s||(e&&A(e.$$.fragment,a),s=!0)},o(a){e&&F(e.$$.fragment,a),s=!1},d(a){a&&k(i),e&&z(e,a)}}}function Pc(n){let e,t,i,s,l,r,o=n[7]!==n[0]&&Lc();return{c(){o&&o.c(),e=O(),t=_("button"),t.innerHTML='<span class="txt">Clear</span>',p(t,"type","button"),p(t,"class","btn btn-secondary btn-sm btn-hint p-l-xs p-r-xs m-l-10")},m(a,u){o&&o.m(a,u),w(a,e,u),w(a,t,u),s=!0,l||(r=X(t,"click",n[15]),l=!0)},p(a,u){a[7]!==a[0]?o?u&129&&A(o,1):(o=Lc(),o.c(),A(o,1),o.m(e.parentNode,e)):o&&(Oe(),F(o,1,1,()=>{o=null}),Te())},i(a){s||(A(o),Dt(()=>{i||(i=ft(t,ni,{duration:150,x:5},!0)),i.run(1)}),s=!0)},o(a){F(o),i||(i=ft(t,ni,{duration:150,x:5},!1)),i.run(0),s=!1},d(a){o&&o.d(a),a&&k(e),a&&k(t),a&&i&&i.end(),l=!1,r()}}}function Lc(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Search</span>',p(e,"type","submit"),p(e,"class","btn btn-expanded btn-sm btn-warning")},m(s,l){w(s,e,l),i=!0},i(s){i||(Dt(()=>{t||(t=ft(e,ni,{duration:150,x:5},!0)),t.run(1)}),i=!0)},o(s){t||(t=ft(e,ni,{duration:150,x:5},!1)),t.run(0),i=!1},d(s){s&&k(e),s&&t&&t.end()}}}function f2(n){let e,t,i,s,l,r,o,a,u,f,c;const d=[u2,a2],h=[];function g(b,v){return b[4]&&!b[5]?0:1}r=g(n),o=h[r]=d[r](n);let y=(n[0].length||n[7].length)&&Pc(n);return{c(){e=_("div"),t=_("form"),i=_("label"),s=_("i"),l=O(),o.c(),a=O(),y&&y.c(),p(s,"class","ri-search-line"),p(i,"for",n[8]),p(i,"class","m-l-10 txt-xl"),p(t,"class","searchbar"),p(e,"class","searchbar-wrapper")},m(b,v){w(b,e,v),m(e,t),m(t,i),m(i,s),m(t,l),h[r].m(t,null),m(t,a),y&&y.m(t,null),u=!0,f||(c=[X(t,"submit",Kt(n[10])),X(e,"click",Un(n[11]))],f=!0)},p(b,[v]){let S=r;r=g(b),r===S?h[r].p(b,v):(Oe(),F(h[S],1,1,()=>{h[S]=null}),Te(),o=h[r],o?o.p(b,v):(o=h[r]=d[r](b),o.c()),A(o,1),o.m(t,a)),b[0].length||b[7].length?y?(y.p(b,v),v&129&&A(y,1)):(y=Pc(b),y.c(),A(y,1),y.m(t,null)):y&&(Oe(),F(y,1,1,()=>{y=null}),Te())},i(b){u||(A(o),A(y),u=!0)},o(b){F(o),F(y),u=!1},d(b){b&&k(e),h[r].d(),y&&y.d(),f=!1,rt(c)}}}function c2(n,e,t){const i=_n(),s="search_"+U.randomString(7);let{value:l=""}=e,{placeholder:r='Search filter, ex. created > "2022-01-01"...'}=e,{autocompleteCollection:o=new Ln}=e,{extraAutocompleteKeys:a=[]}=e,u,f=!1,c,d="";function h(M=!0){t(7,d=""),M&&(c==null||c.focus()),i("clear")}function g(){t(0,l=d),i("submit",l)}async function y(){u||f||(t(5,f=!0),t(4,u=(await rs(()=>import("./FilterAutocompleteInput.2b66e437.js"),[])).default),t(5,f=!1))}pi(()=>{y()});function b(M){ut.call(this,n,M)}function v(M){d=M,t(7,d),t(0,l)}function S(M){he[M?"unshift":"push"](()=>{c=M,t(6,c)})}function $(){d=this.value,t(7,d),t(0,l)}const C=()=>{h(!1),g()};return n.$$set=M=>{"value"in M&&t(0,l=M.value),"placeholder"in M&&t(1,r=M.placeholder),"autocompleteCollection"in M&&t(2,o=M.autocompleteCollection),"extraAutocompleteKeys"in M&&t(3,a=M.extraAutocompleteKeys)},n.$$.update=()=>{n.$$.dirty&1&&typeof l=="string"&&t(7,d=l)},[l,r,o,a,u,f,c,d,s,h,g,b,v,S,$,C]}class Ao extends Fe{constructor(e){super(),Le(this,e,c2,f2,Ae,{value:0,placeholder:1,autocompleteCollection:2,extraAutocompleteKeys:3})}}function d2(n){let e,t,i,s,l;const r=n[6].default,o=Tn(r,n,n[5],null);return{c(){e=_("th"),o&&o.c(),p(e,"tabindex","0"),p(e,"class",t="col-sort "+n[1]),Q(e,"col-sort-disabled",n[3]),Q(e,"sort-active",n[0]==="-"+n[2]||n[0]==="+"+n[2]),Q(e,"sort-desc",n[0]==="-"+n[2]),Q(e,"sort-asc",n[0]==="+"+n[2])},m(a,u){w(a,e,u),o&&o.m(e,null),i=!0,s||(l=[X(e,"click",n[7]),X(e,"keydown",n[8])],s=!0)},p(a,[u]){o&&o.p&&(!i||u&32)&&An(o,r,a,a[5],i?Dn(r,a[5],u,null):En(a[5]),null),(!i||u&2&&t!==(t="col-sort "+a[1]))&&p(e,"class",t),u&10&&Q(e,"col-sort-disabled",a[3]),u&7&&Q(e,"sort-active",a[0]==="-"+a[2]||a[0]==="+"+a[2]),u&7&&Q(e,"sort-desc",a[0]==="-"+a[2]),u&7&&Q(e,"sort-asc",a[0]==="+"+a[2])},i(a){i||(A(o,a),i=!0)},o(a){F(o,a),i=!1},d(a){a&&k(e),o&&o.d(a),s=!1,rt(l)}}}function p2(n,e,t){let{$$slots:i={},$$scope:s}=e,{class:l=""}=e,{name:r} Line truncated
<span class="txt">method</span>`,p(e,"class","col-header-content")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function y2(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="url",p(t,"class",U.getFieldTypeIcon("url")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function v2(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="referer",p(t,"class",U.getFieldTypeIcon("url")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function k2(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="status",p(t,"class",U.getFieldTypeIcon("number")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function w2(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="created",p(t,"class",U.getFieldTypeIcon("date")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function Ic(n){let e;function t(l,r){return l[6]?$2:S2}let i=t(n),s=i(n);return{c(){s.c(),e=lt()},m(l,r){s.m(l,r),w(l,e,r)},p(l,r){i===(i=t(l))&&s?s.p(l,r):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},d(l){s.d(l),l&&k(e)}}}function S2(n){var o;let e,t,i,s,l,r=((o=n[0])==null?void 0:o.length)&&Nc(n);return{c(){e=_("tr"),t=_("td"),i=_("h6"),i.textContent="No logs found.",s=O(),r&&r.c(),l=O(),p(t,"colspan","99"),p(t,"class","txt-center txt-hint p-xs")},m(a,u){w(a,e,u),m(e,t),m(t,i),m(t,s),r&&r.m(t,null),m(e,l)},p(a,u){var f;(f=a[0])!=null&&f.length?r?r.p(a,u):(r=Nc(a),r.c(),r.m(t,null)):r&&(r.d(1),r=null)},d(a){a&&k(e),r&&r.d()}}}function $2(n){let e;return{c(){e=_("tr"),e.innerHTML=`<td colspan="99" class="p-xs"><span class="skeleton-loader"></span></td>
`},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Nc(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Clear filters</span>',p(e,"type","button"),p(e,"class","btn btn-hint btn-expanded m-t-sm")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[18]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function Rc(n){let e;return{c(){e=_("i"),p(e,"class","ri-error-warning-line txt-danger m-l-5 m-r-5"),p(e,"title","Error")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function jc(n,e){var se,Z,De;let t,i,s,l=((se=e[21].method)==null?void 0:se.toUpperCase())+"",r,o,a,u,f,c=e[21].url+"",d,h,g,y,b,v,S=(e[21].referer||"N/A")+"",$,C,M,T,E,D=e[21].status+"",P,L,N,R,J,W,q,G,K,Y,ne=(((Z=e[21].meta)==null?void 0:Z.errorMessage)||((De=e[21].meta)==null?void 0:De.errorData))&&Rc();R=new $i({props:{date:e[21].created}});function fe(){return e[16](e[21])}function ye(...te){return e[17](e[21],...te)}return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("span"),r=H(l),a=O(),u=_("td"),f=_("span"),d=H(c),g=O(),ne&&ne.c(),y=O(),b=_("td"),v=_("span"),$=H(S),M=O(),T=_("td"),E=_("span"),P=H(D),L=O(),N=_("td"),B(R.$$.fragment),J=O(),W=_("td"),W.innerHTML='<i class="ri-arrow-right-line"></i>',q=O(),p(s,"class",o="label txt-uppercase "+e[9][e[21].method.toLowerCase()]),p(i,"class","col-type-text col-field-method min-width"),p(f,"class","txt txt-ellipsis"),p(f,"title",h=e[21].url),p(u,"class","col-type-text col-field-url"),p(v,"class","txt txt-ellipsis"),p(v,"title",C=e[21].referer),Q(v,"txt-hint",!e[21].referer),p(b,"class","col-type-text col-field-referer"),p(E,"class","label"),Q(E,"label-danger",e[21].status>=400),p(T,"class","col-type-number col-field-status"),p(N,"class","col-type-date col-field-created"),p(W,"class","col-type-action min-width"),p(t,"tabindex","0"),p(t,"class","row-handle"),this.first=t},m(te,be){w(te,t,be),m(t,i),m(i,s),m(s,r),m(t,a),m(t,u),m(u,f),m(f,d),m(u,g),ne&&ne.m(u,null),m(t,y),m(t,b),m(b,v),m(v,$),m(t,M),m(t,T),m(T,E),m(E,P),m(t,L),m(t,N),V(R,N,null),m(t,J),m(t,W),m(t,q),G=!0,K||(Y=[X(t,"click",fe),X(t,"keydown",ye)],K=!0)},p(te,be){var ie,ve,He;e=te,(!G||be&8)&&l!==(l=((ie=e[21].method)==null?void 0:ie.toUpperCase())+"")&&_e(r,l),(!G||be&8&&o!==(o="label txt-uppercase "+e[9][e[21].method.toLowerCase()]))&&p(s,"class",o),(!G||be&8)&&c!==(c=e[21].url+"")&&_e(d,c),(!G||be&8&&h!==(h=e[21].url))&&p(f,"title",h),((ve=e[21].meta)==null?void 0:ve.errorMessage)||((He=e[21].meta)==null?void 0:He.errorData)?ne||(ne=Rc(),ne.c(),ne.m(u,null)):ne&&(ne.d(1),ne=null),(!G||be&8)&&S!==(S=(e[21].referer||"N/A")+"")&&_e($,S),(!G||be&8&&C!==(C=e[21].referer))&&p(v,"title",C),be&8&&Q(v,"txt-hint",!e[21].referer),(!G||be&8)&&D!==(D=e[21].status+"")&&_e(P,D),be&8&&Q(E,"label-danger",e[21].status>=400);const ue={};be&8&&(ue.date=e[21].created),R.$set(ue)},i(te){G||(A(R.$$.fragment,te),G=!0)},o(te){F(R.$$.fragment,te),G=!1},d(te){te&&k(t),ne&&ne.d(),z(R),K=!1,rt(Y)}}}function Hc(n){let e,t,i=n[3].length+"",s,l,r;return{c(){e=_("small"),t=H("Showing "),s=H(i),l=H(" of "),r=H(n[4]),p(e,"class","block txt-hint txt-right m-t-sm")},m(o,a){w(o,e,a),m(e,t),m(e,s),m(e,l),m(e,r)},p(o,a){a&8&&i!==(i=o[3].length+"")&&_e(s,i),a&16&&_e(r,o[4])},d(o){o&&k(e)}}}function qc(n){let e,t,i,s,l=n[4]-n[3].length+"",r,o,a,u;return{c(){e=_("div"),t=_("button"),i=_("span"),s=H("Load more ("),r=H(l),o=H(")"),p(i,"class","txt"),p(t,"type","button"),p(t,"class","btn btn-lg btn-secondary btn-expanded"),Q(t,"btn-loading",n[6]),Q(t,"btn-disabled",n[6]),p(e,"class","block txt-center m-t-xs")},m(f,c){w(f,e,c),m(e,t),m(t,i),m(i,s),m(i,r),m(i,o),a||(u=X(t,"click",n[19]),a=!0)},p(f,c){c&24&&l!==(l=f[4]-f[3].length+"")&&_e(r,l),c&64&&Q(t,"btn-loading",f[6]),c&64&&Q(t,"btn-disabled",f[6])},d(f){f&&k(e),a=!1,u()}}}function C2(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S,$,C,M,T,E=[],D=new Map,P,L,N,R;function J(ie){n[11](ie)}let W={disable:!0,class:"col-field-method",name:"method",$$slots:{default:[b2]},$$scope:{ctx:n}};n[1]!==void 0&&(W.sort=n[1]),l=new Qt({props:W}),he.push(()=>Re(l,"sort",J));function q(ie){n[12](ie)}let G={disable:!0,class:"col-type-text col-field-url",name:"url",$$slots:{default:[y2]},$$scope:{ctx:n}};n[1]!==void 0&&(G.sort=n[1]),a=new Qt({props:G}),he.push(()=>Re(a,"sort",q));function K(ie){n[13](ie)}let Y={disable:!0,class:"col-type-text col-field-referer",name:"referer",$$slots:{default:[v2]},$$scope:{ctx:n}};n[1]!==void 0&&(Y.sort=n[1]),c=new Qt({props:Y}),he.push(()=>Re(c,"sort",K));function ne(ie){n[14](ie)}let fe={disable:!0,class:"col-type-number col-field-status",name:"status",$$slots:{default:[k2]},$$scope:{ctx:n}};n[1]!==void 0&&(fe.sort=n[1]),g=new Qt({props:fe}),he.push(()=>Re(g,"sort",ne));function ye(ie){n[15](ie)}let se={disable:!0,class:"col-type-date col-field-created",name:"created",$$slots:{default:[w2]},$$scope:{ctx:n}};n[1]!==void 0&&(se.sort=n[1]),v=new Qt({props:se}),he.push(()=>Re(v,"sort",ye));let Z=n[3];const De=ie=>ie[21].id;for(let ie=0;ie<Z.length;ie+=1){let ve=Fc(n,Z,ie),He=De(ve);D.set(He,E[ie]=jc(He,ve))}let te=null;Z.l Line truncated
* Chart.js v3.8.0
* https://www.chartjs.org
* (c) 2022 Chart.js Contributors
* Released under the MIT License
*/const F0=function(){return typeof window=="undefined"?function(n){return n()}:window.requestAnimationFrame}();function I0(n,e,t){const i=t||(r=>Array.prototype.slice.call(r));let s=!1,l=[];return function(...r){l=i(r),s||(s=!0,F0.call(window,()=>{s=!1,n.apply(e,l)}))}}function T2(n,e){let t;return function(...i){return e?(clearTimeout(t),t=setTimeout(n,e,i)):n.apply(this,i),e}}const D2=n=>n==="start"?"left":n==="end"?"right":"center",Vc=(n,e,t)=>n==="start"?e:n==="end"?t:(e+t)/2;function gi(){}const A2=function(){let n=0;return function(){return n++}}();function Ct(n){return n===null||typeof n=="undefined"}function Pt(n){if(Array.isArray&&Array.isArray(n))return!0;const e=Object.prototype.toString.call(n);return e.slice(0,7)==="[object"&&e.slice(-6)==="Array]"}function dt(n){return n!==null&&Object.prototype.toString.call(n)==="[object Object]"}const Vt=n=>(typeof n=="number"||n instanceof Number)&&isFinite(+n);function jn(n,e){return Vt(n)?n:e}function ht(n,e){return typeof n=="undefined"?e:n}const E2=(n,e)=>typeof n=="string"&&n.endsWith("%")?parseFloat(n)/100:n/e,N0=(n,e)=>typeof n=="string"&&n.endsWith("%")?parseFloat(n)/100*e:+n;function Rt(n,e,t){if(n&&typeof n.call=="function")return n.apply(t,e)}function $t(n,e,t,i){let s,l,r;if(Pt(n))if(l=n.length,i)for(s=l-1;s>=0;s--)e.call(t,n[s],s);else for(s=0;s<l;s++)e.call(t,n[s],s);else if(dt(n))for(r=Object.keys(n),l=r.length,s=0;s<l;s++)e.call(t,n[r[s]],r[s])}function oo(n,e){let t,i,s,l;if(!n||!e||n.length!==e.length)return!1;for(t=0,i=n.length;t<i;++t)if(s=n[t],l=e[t],s.datasetIndex!==l.datasetIndex||s.index!==l.index)return!1;return!0}function ao(n){if(Pt(n))return n.map(ao);if(dt(n)){const e=Object.create(null),t=Object.keys(n),i=t.length;let s=0;for(;s<i;++s)e[t[s]]=ao(n[t[s]]);return e}return n}function R0(n){return["__proto__","prototype","constructor"].indexOf(n)===-1}function P2(n,e,t,i){if(!R0(n))return;const s=e[n],l=t[n];dt(s)&&dt(l)?Nl(s,l,i):e[n]=ao(l)}function Nl(n,e,t){const i=Pt(e)?e:[e],s=i.length;if(!dt(n))return n;t=t||{};const l=t.merger||P2;for(let r=0;r<s;++r){if(e=i[r],!dt(e))continue;const o=Object.keys(e);for(let a=0,u=o.length;a<u;++a)l(o[a],n,e,t)}return n}function Ol(n,e){return Nl(n,e,{merger:L2})}function L2(n,e,t){if(!R0(n))return;const i=e[n],s=t[n];dt(i)&&dt(s)?Ol(i,s):Object.prototype.hasOwnProperty.call(e,n)||(e[n]=ao(s))}const F2="",I2=".";function zc(n,e){const t=n.indexOf(I2,e);return t===-1?n.length:t}function Bi(n,e){if(e===F2)return n;let t=0,i=zc(e,t);for(;n&&i>t;)n=n[e.slice(t,i)],t=i+1,i=zc(e,t);return n}function zu(n){return n.charAt(0).toUpperCase()+n.slice(1)}const Yn=n=>typeof n!="undefined",Ui=n=>typeof n=="function",Bc=(n,e)=>{if(n.size!==e.size)return!1;for(const t of n)if(!e.has(t))return!1;return!0};function N2(n){return n.type==="mouseup"||n.type==="click"||n.type==="contextmenu"}const Ht=Math.PI,Et=2*Ht,R2=Et+Ht,uo=Number.POSITIVE_INFINITY,j2=Ht/180,jt=Ht/2,fl=Ht/4,Uc=Ht*2/3,Vn=Math.log10,ui=Math.sign;function Wc(n){const e=Math.round(n);n=Tl(n,e,n/1e3)?e:n;const t=Math.pow(10,Math.floor(Vn(n))),i=n/t;return(i<=1?1:i<=2?2:i<=5?5:10)*t}function H2(n){const e=[],t=Math.sqrt(n);let i;for(i=1;i<t;i++)n%i===0&&(e.push(i),e.push(n/i));return t===(t|0)&&e.push(t),e.sort((s,l)=>s-l).pop(),e}function Rl(n){return!isNaN(parseFloat(n))&&isFinite(n)}function Tl(n,e,t){return Math.abs(n-e)<t}function q2(n,e){const t=Math.round(n);return t-e<=n&&t+e>=n}function j0(n,e,t){let i,s,l;for(i=0,s=n.length;i<s;i++)l=n[i][t],isNaN(l)||(e.min=Math.min(e.min,l),e.max=Math.max(e.max,l))}function Qn(n){return n*(Ht/180)}function Bu(n){return n*(180/Ht)}function Yc(n){if(!Vt(n))return;let e=1,t=0;for(;Math.round(n*e)/e!==n;)e*=10,t++;return t}function H0(n,e){const t=e.x-n.x,i=e.y-n.y,s=Math.sqrt(t*t+i*i);let l=Math.atan2(i,t);return l<-.5*Ht&&(l+=Et),{angle:l,distance:s}}function eu(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))}function V2(n,e){return(n-e+R2)%Et-Ht}function Cn(n){return(n%Et+Et)%Et}function jl(n,e,t,i){const s=Cn(n),l=Cn(e),r=Cn(t),o=Cn(l-s),a=Cn(r-s),u=Cn(s-l),f=Cn(s-r);return s===l||s===r||i&&l===r||o>a&&u<f}function on(n,e,t){return Math.max(e,Math.min(t,n))}function z2(n){return on(n,-32768,32767)}function Hl(n,e,t,i=1e-6){return n>=Math.min(e,t)-i&&n<=Math.max(e,t)+i}const wr=n=>n===0||n===1,Kc=(n,e,t)=>-(Math.pow(2,10*(n-=1))*Math.sin((n-e)*Et/t)),Jc=(n,e,t)=>Math.pow(2,-10*n)*Math.sin((n-e)*Et/t)+1,Dl={linear:n=>n,easeInQuad:n=>n*n,easeOutQuad:n=>-n*(n-2),easeInOutQuad:n=>(n/=.5)<1?.5*n*n:-.5*(--n*(n-2)-1),easeInCubic:n=>n*n*n,easeOutCubic:n=>(n-=1)*n*n+1,easeInOutCubic:n=>(n/=.5)<1?.5*n*n*n:.5*((n-=2)*n*n+2),easeInQuart:n=>n*n*n*n,easeOutQuart:n=>-((n-=1)*n*n*n-1),easeInOutQuart:n=>(n/=.5)<1?.5*n*n*n*n:-.5*((n-=2)*n*n*n-2),easeInQuint:n=>n*n*n*n*n,easeOutQuint:n=>(n-=1)*n*n*n*n+1,easeInOutQuint:n=>(n/=.5)<1?.5*n*n*n*n*n:.5*((n-=2)*n*n*n*n+2),easeInSine:n=>-Math.cos(n*jt)+1,easeOutSine:n=>Math.sin(n*jt),easeInOutSine:n=>-.5*(Math.cos(Ht*n)-1),easeInExpo:n=>n===0?0:Math.pow(2,10*(n-1Line truncated
* @kurkle/color v0.2.1
* https://github.com/kurkle/color#readme
* (c) 2022 Jukka Kurkela
* Released under the MIT License
*/function xl(n){return n+.5|0}const Hi=(n,e,t)=>Math.max(Math.min(n,t),e);function kl(n){return Hi(xl(n*2.55),0,255)}function zi(n){return Hi(xl(n*255),0,255)}function vi(n){return Hi(xl(n/2.55)/100,0,1)}function Gc(n){return Hi(xl(n*100),0,100)}const Rn={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},tu=[..."0123456789ABCDEF"],B2=n=>tu[n&15],U2=n=>tu[(n&240)>>4]+tu[n&15],Sr=n=>(n&240)>>4===(n&15),W2=n=>Sr(n.r)&&Sr(n.g)&&Sr(n.b)&&Sr(n.a);function Y2(n){var e=n.length,t;return n[0]==="#"&&(e===4||e===5?t={r:255&Rn[n[1]]*17,g:255&Rn[n[2]]*17,b:255&Rn[n[3]]*17,a:e===5?Rn[n[4]]*17:255}:(e===7||e===9)&&(t={r:Rn[n[1]]<<4|Rn[n[2]],g:Rn[n[3]]<<4|Rn[n[4]],b:Rn[n[5]]<<4|Rn[n[6]],a:e===9?Rn[n[7]]<<4|Rn[n[8]]:255})),t}const K2=(n,e)=>n<255?e(n):"";function J2(n){var e=W2(n)?B2:U2;return n?"#"+e(n.r)+e(n.g)+e(n.b)+K2(n.a,e):void 0}const G2=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function q0(n,e,t){const i=e*Math.min(t,1-t),s=(l,r=(l+n/30)%12)=>t-i*Math.max(Math.min(r-3,9-r,1),-1);return[s(0),s(8),s(4)]}function Z2(n,e,t){const i=(s,l=(s+n/60)%6)=>t-t*e*Math.max(Math.min(l,4-l,1),0);return[i(5),i(3),i(1)]}function x2(n,e,t){const i=q0(n,1,.5);let s;for(e+t>1&&(s=1/(e+t),e*=s,t*=s),s=0;s<3;s++)i[s]*=1-e-t,i[s]+=e;return i}function X2(n,e,t,i,s){return n===s?(e-t)/i+(e<t?6:0):e===s?(t-n)/i+2:(n-e)/i+4}function Uu(n){const t=n.r/255,i=n.g/255,s=n.b/255,l=Math.max(t,i,s),r=Math.min(t,i,s),o=(l+r)/2;let a,u,f;return l!==r&&(f=l-r,u=o>.5?f/(2-l-r):f/(l+r),a=X2(t,i,s,f,l),a=a*60+.5),[a|0,u||0,o]}function Wu(n,e,t,i){return(Array.isArray(e)?n(e[0],e[1],e[2]):n(e,t,i)).map(zi)}function Yu(n,e,t){return Wu(q0,n,e,t)}function Q2(n,e,t){return Wu(x2,n,e,t)}function ew(n,e,t){return Wu(Z2,n,e,t)}function V0(n){return(n%360+360)%360}function tw(n){const e=G2.exec(n);let t=255,i;if(!e)return;e[5]!==i&&(t=e[6]?kl(+e[5]):zi(+e[5]));const s=V0(+e[2]),l=+e[3]/100,r=+e[4]/100;return e[1]==="hwb"?i=Q2(s,l,r):e[1]==="hsv"?i=ew(s,l,r):i=Yu(s,l,r),{r:i[0],g:i[1],b:i[2],a:t}}function nw(n,e){var t=Uu(n);t[0]=V0(t[0]+e),t=Yu(t),n.r=t[0],n.g=t[1],n.b=t[2]}function iw(n){if(!n)return;const e=Uu(n),t=e[0],i=Gc(e[1]),s=Gc(e[2]);return n.a<255?`hsla(${t}, ${i}%, ${s}%, ${vi(n.a)})`:`hsl(${t}, ${i}%, ${s}%)`}const Zc={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},xc={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function sw(){const n={},e=Object.keys(xc),t=Object.keys(Zc);let i,s,l,r,o;for(i=0;i<e.length;i++){for(r=o=e[i],s=0;s<t.length;s++)l=t[s]Line truncated
* Chart.js v3.8.0
* https://www.chartjs.org
* (c) 2022 Chart.js Contributors
* Released under the MIT License
*/class aS{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(e,t,i,s){const l=t.listeners[s],r=t.duration;l.forEach(o=>o({chart:e,initial:t.initial,numSteps:r,currentStep:Math.min(i-t.start,r)}))}_refresh(){this._request||(this._running=!0,this._request=F0.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let t=0;this._charts.forEach((i,s)=>{if(!i.running||!i.items.length)return;const l=i.items;let r=l.length-1,o=!1,a;for(;r>=0;--r)a=l[r],a._active?(a._total>i.duration&&(i.duration=a._total),a.tick(e),o=!0):(l[r]=l[l.length-1],l.pop());o&&(s.draw(),this._notify(s,i,e,"progress")),l.length||(i.running=!1,this._notify(s,i,e,"complete"),i.initial=!1),t+=l.length}),this._lastDate=e,t===0&&(this._running=!1)}_getAnims(e){const t=this._charts;let i=t.get(e);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,i)),i}listen(e,t,i){this._getAnims(e).listeners[t].push(i)}add(e,t){!t||!t.length||this._getAnims(e).items.push(...t)}has(e){return this._getAnims(e).items.length>0}start(e){const t=this._charts.get(e);!t||(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((i,s)=>Math.max(i,s._duration),0),this._refresh())}running(e){if(!this._running)return!1;const t=this._charts.get(e);return!(!t||!t.running||!t.items.length)}stop(e){const t=this._charts.get(e);if(!t||!t.items.length)return;const i=t.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();t.items=[],this._notify(e,t,Date.now(),"complete")}remove(e){return this._charts.delete(e)}}var _i=new aS;const fd="transparent",uS={boolean(n,e,t){return t>.5?e:n},color(n,e,t){const i=Qc(n||fd),s=i.valid&&Qc(e||fd);return s&&s.valid?s.mix(i,t).hexString():e},number(n,e,t){return n+(e-n)*t}};class fS{constructor(e,t,i,s){const l=t[i];s=Mr([e.to,s,l,e.from]);const r=Mr([e.from,l,s]);this._active=!0,this._fn=e.fn||uS[e.type||typeof r],this._easing=Dl[e.easing]||Dl.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=t,this._prop=i,this._from=r,this._to=s,this._promises=void 0}active(){return this._active}update(e,t,i){if(this._active){this._notify(!1);const s=this._target[this._prop],l=i-this._start,r=this._duration-l;this._start=i,this._duration=Math.floor(Math.max(r,e.duration)),this._total+=l,this._loop=!!e.loop,this._to=Mr([e.to,t,s,e.from]),this._from=Mr([e.from,s,t])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){const t=e-this._start,i=this._duration,s=this._prop,l=this._from,r=this._loop,o=this._to;let a;if(this._active=l!==o&&(r||t<i),!this._active){this._target[s]=o,this._notify(!0);return}if(t<0){this._target[s]=l;return}a=t/i%2,a=r&&a>1?2-a:a,a=this._easing(Math.min(1,Math.max(0,a))),this._target[s]=this._fn(l,o,a)}wait(){const e=this._promises||(this._promises=[]);return new Promise((t,i)=>{e.push({res:t,rej:i})})}_notify(e){const t=e?"res":"rej",i=this._promises||[];for(let s=0;s<i.length;s++)i[s][t]()}}const cS=["x","y","borderWidth","radius","tension"],dS=["color","borderColor","backgroundColor"];mt.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const pS=Object.keys(mt.animation);mt.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:n=>n!=="onProgress"&&n!=="onComplete"&&n!=="fn"});mt.set("animations",{colors:{type:"color",properties:dS},numbers:{type:"number",properties:cS}});mt.describe("animations",{_fallback:"animation"});mt.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:n=>n|0}}}});class sb{constructor(e,t){this._chart=e,this._properties=new Map,this.configure(t)}configure(e){if(!dt(e))return;const t=this._properties;Object.getOwnPropertyNames(e).forEach(i=>{const s=e[i];if(!dt(s))return;const l={};for(const r of pS)l[r]=s[r];(Pt(s.properties)&&s.properties||[i]).forEach(r=>{(r===i||!t.has(r))&&t.set(r,l)})})}_animateOptions(e,t){const i=t.options,s=mS(e,i);if(!s)return[];const l=this._createAnimations(s,i);return i.$shared&&hS(e.options.$animations,i).then(()=>{e.options=i},()=>{}),l}_createAnimations(e,t){const i=this._properties,s=[],l=e.$animations||(e.$animations={}),r=Object.keys(t),o=Date.now();let a;for(a=r.length-1;a>=0;--a){const u=r[a];if(u.charAt(0)==="$")continue;if(u==="options"){s.push(...this._animateOptions(e,t));continue}const f=t[u];let c=l[u];const d=i.get(u);if(c)if(d&&c.active()){c.update(d,f,o);continue}else c.cancel();if(!d||!d.duration){e[u]=f;continue}l[u]=c=new fS(d,e,u,f),s.push(c)}return s}update(e,t){if(this._properties.size===0){Object.assign(e,t);return}const i=this._createAnimations(e,t);if(i.length)return _i.add(this._chart,i),!0}}function hS(n,e){const t=[]Line truncated
`)>-1?n.split(`
`):n}function EC(n,e){const{element:t,datasetIndex:i,index:s}=e,l=n.getDatasetMeta(i).controller,{label:r,value:o}=l.getLabelAndValue(s);return{chart:n,label:r,parsed:l.getParsed(s),raw:n.data.datasets[i].data[s],formattedValue:o,dataset:l.getDataset(),dataIndex:s,datasetIndex:i,element:t}}function qd(n,e){const t=n.chart.ctx,{body:i,footer:s,title:l}=n,{boxWidth:r,boxHeight:o}=e,a=On(e.bodyFont),u=On(e.titleFont),f=On(e.footerFont),c=l.length,d=s.length,h=i.length,g=Kn(e.padding);let y=g.height,b=0,v=i.reduce((C,M)=>C+M.before.length+M.lines.length+M.after.length,0);if(v+=n.beforeBody.length+n.afterBody.length,c&&(y+=c*u.lineHeight+(c-1)*e.titleSpacing+e.titleMarginBottom),v){const C=e.displayColors?Math.max(o,a.lineHeight):a.lineHeight;y+=h*C+(v-h)*a.lineHeight+(v-1)*e.bodySpacing}d&&(y+=e.footerMarginTop+d*f.lineHeight+(d-1)*e.footerSpacing);let S=0;const $=function(C){b=Math.max(b,t.measureText(C).width+S)};return t.save(),t.font=u.string,$t(n.title,$),t.font=a.string,$t(n.beforeBody.concat(n.afterBody),$),S=e.displayColors?r+2+e.boxPadding:0,$t(i,C=>{$t(C.before,$),$t(C.lines,$),$t(C.after,$)}),S=0,t.font=f.string,$t(n.footer,$),t.restore(),b+=g.width,{width:b,height:y}}function PC(n,e){const{y:t,height:i}=e;return t<i/2?"top":t>n.height-i/2?"bottom":"center"}function LC(n,e,t,i){const{x:s,width:l}=i,r=t.caretSize+t.caretPadding;if(n==="left"&&s+l+r>e.width||n==="right"&&s-l-r<0)return!0}function FC(n,e,t,i){const{x:s,width:l}=t,{width:r,chartArea:{left:o,right:a}}=n;let u="center";return i==="center"?u=s<=(o+a)/2?"left":"right":s<=l/2?u="left":s>=r-l/2&&(u="right"),LC(u,n,e,t)&&(u="center"),u}function Vd(n,e,t){const i=t.yAlign||e.yAlign||PC(n,t);return{xAlign:t.xAlign||e.xAlign||FC(n,e,t,i),yAlign:i}}function IC(n,e){let{x:t,width:i}=n;return e==="right"?t-=i:e==="center"&&(t-=i/2),t}function NC(n,e,t){let{y:i,height:s}=n;return e==="top"?i+=t:e==="bottom"?i-=s+t:i-=s/2,i}function zd(n,e,t,i){const{caretSize:s,caretPadding:l,cornerRadius:r}=n,{xAlign:o,yAlign:a}=t,u=s+l,{topLeft:f,topRight:c,bottomLeft:d,bottomRight:h}=Hs(r);let g=IC(e,o);const y=NC(e,a,u);return a==="center"?o==="left"?g+=u:o==="right"&&(g-=u):o==="left"?g-=Math.max(f,d)+s:o==="right"&&(g+=Math.max(c,h)+s),{x:on(g,0,i.width-e.width),y:on(y,0,i.height-e.height)}}function Lr(n,e,t){const i=Kn(t.padding);return e==="center"?n.x+n.width/2:e==="right"?n.x+n.width-i.right:n.x+i.left}function Bd(n){return li([],bi(n))}function RC(n,e,t){return Yi(n,{tooltip:e,tooltipItems:t,type:"tooltip"})}function Ud(n,e){const t=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return t?n.override(t):n}class fu extends Ti{constructor(e){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=e.chart||e._chart,this._chart=this.chart,this.options=e.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(e){this.options=e,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const e=this._cachedAnimations;if(e)return e;const t=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&t.options.animation&&i.animations,l=new sb(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(l)),l}getContext(){return this.$context||(this.$context=RC(this.chart.getContext(),this,this._tooltipItems))}getTitle(e,t){const{callbacks:i}=t,s=i.beforeTitle.apply(this,[e]),l=i.title.apply(this,[e]),r=i.afterTitle.apply(this,[e]);let o=[];return o=li(o,bi(s)),o=li(o,bi(l)),o=li(o,bi(r)),o}getBeforeBody(e,t){return Bd(t.callbacks.beforeBody.apply(this,[e]))}getBody(e,t){const{callbacks:i}=t,s=[];return $t(e,l=>{const r={before:[],lines:[],after:[]},o=Ud(i,l);li(r.before,bi(o.beforeLabel.call(this,l))),li(r.lines,o.label.call(this,l)),li(r.after,bi(o.afterLabel.call(this,l))),s.push(r)}),s}getAfterBody(e,t){return Bd(t.callbacks.afterBody.apply(this,[e]))}getFooter(e,t){const{callbacks:i}=t,s=i.beforeFooter.apply(this,[e]),l=i.footer.apply(this,[e]),r=i.afterFooter.apply(this,[e]);let o=[];return o=li(o,bi(s)),o=li(o,bi(l)),o=li(o,bi(r)),o}_createItems(e){const t=this._active,i=this.chart.data,s=[],l=[],r=[];let o=[],a,u;for(a=0,u=t.length;a<u;++a)o.push(EC(this.chart,t[a]));return e.filter&&(o=o.filter((f,c,d)=>e.filter(f,c,d,i))),e.itemSort&&(o=o.sort((f,c)=>e.itemSort(f,c,i))),$t(o,f=>{const c=Ud(e.callbacks,f);s.push(c.labelColor.call(this,f)),l.push(c.labelPointStyle.call(this,f)),r.push(c.labelTextColor.call(this,f))}),this.labelColors=s,this.labelPointStyles=l,this.labelTextColors=r,this.dataPoints=o,o}update(e,t){const i=this.options.setContext(this.getContext()),s=this._active;l Line truncated
* chartjs-adapter-luxon v1.1.0
* https://www.chartjs.org
* (c) 2021 chartjs-adapter-luxon Contributors
* Released under the MIT license
*/const s3={datetime:Qe.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:Qe.TIME_WITH_SECONDS,minute:Qe.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};ab._date.override({_id:"luxon",_create:function(n){return Qe.fromMillis(n,this.options)},formats:function(){return s3},parse:function(n,e){const t=this.options;if(n===null||typeof n=="undefined")return null;const i=typeof n;return i==="number"?n=this._create(n):i==="string"?typeof e=="string"?n=Qe.fromFormat(n,e,t):n=Qe.fromISO(n,t):n instanceof Date?n=Qe.fromJSDate(n,t):i==="object"&&!(n instanceof Qe)&&(n=Qe.fromObject(n)),n.isValid?n.valueOf():null},format:function(n,e){const t=this._create(n);return typeof e=="string"?t.toFormat(e,this.options):t.toLocaleString(e)},add:function(n,e,t){const i={};return i[t]=e,this._create(n).plus(i).valueOf()},diff:function(n,e,t){return this._create(n).diff(this._create(e)).as(t).valueOf()},startOf:function(n,e,t){if(e==="isoWeek"){t=Math.trunc(Math.min(Math.max(0,t),6));const i=this._create(n);return i.minus({days:(i.weekday-t+7)%7}).startOf("day").valueOf()}return e?this._create(n).startOf(e).valueOf():n},endOf:function(n,e){return this._create(n).endOf(e).valueOf()}});function Xd(n){let e,t,i;return{c(){e=_("div"),p(e,"class","chart-loader loader svelte-vh4sl8")},m(s,l){w(s,e,l),i=!0},i(s){i||(Dt(()=>{t||(t=ft(e,Wn,{duration:150},!0)),t.run(1)}),i=!0)},o(s){t||(t=ft(e,Wn,{duration:150},!1)),t.run(0),i=!1},d(s){s&&k(e),s&&t&&t.end()}}}function l3(n){let e,t,i=n[1]===1?"log":"logs",s;return{c(){e=H(n[1]),t=O(),s=H(i)},m(l,r){w(l,e,r),w(l,t,r),w(l,s,r)},p(l,r){r&2&&_e(e,l[1]),r&2&&i!==(i=l[1]===1?"log":"logs")&&_e(s,i)},d(l){l&&k(e),l&&k(t),l&&k(s)}}}function r3(n){let e;return{c(){e=H("Loading...")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function o3(n){let e,t,i,s,l,r,o=n[2]&&Xd();function a(c,d){return c[2]?r3:l3}let u=a(n),f=u(n);return{c(){e=_("div"),o&&o.c(),t=O(),i=_("canvas"),s=O(),l=_("div"),f.c(),p(i,"class","chart-canvas svelte-vh4sl8"),bf(i,"height","250px"),bf(i,"width","100%"),p(e,"class","chart-wrapper svelte-vh4sl8"),Q(e,"loading",n[2]),p(l,"class","txt-hint m-t-xs txt-right")},m(c,d){w(c,e,d),o&&o.m(e,null),m(e,t),m(e,i),n[8](i),w(c,s,d),w(c,l,d),f.m(l,null),r=!0},p(c,[d]){c[2]?o?d&4&&A(o,1):(o=Xd(),o.c(),A(o,1),o.m(e,t)):o&&(Oe(),F(o,1,1,()=>{o=null}),Te()),d&4&&Q(e,"loading",c[2]),u===(u=a(c))&&f?f.p(c,d):(f.d(1),f=u(c),f&&(f.c(),f.m(l,null)))},i(c){r||(A(o),r=!0)},o(c){F(o),r=!1},d(c){c&&k(e),o&&o.d(),n[8](null),c&&k(s),c&&k(l),f.d()}}}function a3(n,e,t){let{filter:i=""}=e,{presets:s=""}=e,l,r,o=[],a=0,u=!1;async function f(){return t(2,u=!0),we.Logs.getRequestsStats({filter:[s,i].filter(Boolean).join("&&")}).then(h=>{c();for(let g of h)o.push({x:U.getDateTime(g.date).toLocal().toJSDate(),y:g.total}),t(1,a+=g.total);o.push({x:new Date,y:void 0})}).catch(h=>{h!==null&&(c(),console.warn(h),we.errorResponseHandler(h,!1))}).finally(()=>{t(2,u=!1)})}function c(){t(1,a=0),t(7,o=[])}pi(()=>(bo.register(Ki,Lo,er,ff,nr,AC,jC),t(6,r=new bo(l,{type:"line",data:{datasets:[{label:"Total requests",data:o,borderColor:"#ef4565",pointBackgroundColor:"#ef4565",backgroundColor:"rgb(239,69,101,0.05)",borderWidth:2,pointBorderWidth:0,fill:!0}]},options:{animation:!1,interaction:{intersect:!1,mode:"index"},scales:{y:{beginAtZero:!0,grid:{color:"#edf0f3",borderColor:"#dee3e8"},ticks:{precision:0,maxTicksLimit:6,autoSkip:!0,color:"#666f75"}},x:{type:"time",time:{unit:"hour",tooltipFormat:"DD h a"},grid:{borderColor:"#dee3e8",color:h=>h.tick.major?"#edf0f3":""},ticks:{maxTicksLimit:15,autoSkip:!0,maxRotation:0,major:{enabled:!0},color:h=>h.tick.major?"#16161a":"#666f75"}}},plugins:{legend:{display:!1}}}})),()=>r==null?void 0:r.destroy()));function d(h){he[h?"unshift":"push"](()=>{l=h,t(0,l)})}return n.$$set=h=>{"filter"in h&&t(3,i=h.filter),"presets"in h&&t(4,s=h.presets)},n.$$.update=()=>{n.$$.dirty&24&&(typeof i!="undefined"||typeof s!="undefined")&&f(),n.$$.dirty&192&&typeof o!="undefined"&&r&&(t(6,r.data.datasets[0].data=o,r),r.update())},[l,a,u,i,s,f,r,o,d]}class u3 extends Fe{constructor(e){super(),Le(this,e,a3,o3,Ae,{filter:3,presets:4,load:5})}get load(){return this.$$.ctx[5]}}var Qd=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},Db={exports:{}};(function(n){var e=typeof window!="undefined"?window:typeof WorkerGlobalScope!="undefined"&&self instanceof WorkerGlobalScope?self:{};/**
* Prism: Lightweight, robust, elegant syntax highlighting
*
* @license MIT <https://opensource.org/licenses/MIT>
* @author Lea Verou <https://lea.verou.me>
* @namespace
* @public
*/var t=function(i){var s=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,l=0,r={},o={manual:i.Prism&&i.Prism.manual,disableWorkerMessageHandler:i.Prism&&i.Prism.disableWorkerMessageHandler,util:{encode:function S($){return $ instanceof a?new a($.type,S($.content),$.alias):Array.isArray($)?$.map(S):$.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(S){return Object.prototype.toString.call(S).slice(8,-1)},objId:function(S){return S.__id||Object.defineProperty(S,"__id",{value:++l}),S.__id},clone:function S($,C){C=C||{};var M,T;switch(o.util.type($)){case"Object":if(T=o.util.objId($),C[T])return C[T];M={},C[T]=M;for(var E in $)$.hasOwnProperty(E)&&(M[E]=S($[E],C));return M;case"Array":return T=o.util.objId($),C[T]?C[T]:(M=[],C[T]=M,$.forEach(function(D,P){M[P]=S(D,C)}),M);default:return $}},getLanguage:function(S){for(;S;){var $=s.exec(S.className);if($)return $[1].toLowerCase();S=S.parentElement}return"none"},setLanguage:function(S,$){S.className=S.className.replace(RegExp(s,"gi"),""),S.classList.add("language-"+$)},currentScript:function(){if(typeof document=="undefined")return null;if("currentScript"in document&&1<2)return document.currentScript;try{throw new Error}catch(M){var S=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(M.stack)||[])[1];if(S){var $=document.getElementsByTagName("script");for(var C in $)if($[C].src==S)return $[C]}return null}},isActive:function(S,$,C){for(var M="no-"+$;S;){var T=S.classList;if(T.contains($))return!0;if(T.contains(M))return!1;S=S.parentElement}return!!C}},languages:{plain:r,plaintext:r,text:r,txt:r,extend:function(S,$){var C=o.util.clone(o.languages[S]);for(var M in $)C[M]=$[M];return C},insertBefore:function(S,$,C,M){M=M||o.languages;var T=M[S],E={};for(var D in T)if(T.hasOwnProperty(D)){if(D==$)for(var P in C)C.hasOwnProperty(P)&&(E[P]=C[P]);C.hasOwnProperty(D)||(E[D]=T[D])}var L=M[S];return M[S]=E,o.languages.DFS(o.languages,function(N,R){R===L&&N!=S&&(this[N]=E)}),E},DFS:function S($,C,M,T){T=T||{};var E=o.util.objId;for(var D in $)if($.hasOwnProperty(D)){C.call($,D,$[D],M||D);var P=$[D],L=o.util.type(P);L==="Object"&&!T[E(P)]?(T[E(P)]=!0,S(P,C,null,T)):L==="Array"&&!T[E(P)]&&(T[E(P)]=!0,S(P,C,D,T))}}},plugins:{},highlightAll:function(S,$){o.highlightAllUnder(document,S,$)},highlightAllUnder:function(S,$,C){var M={callback:C,container:S,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};o.hooks.run("before-highlightall",M),M.elements=Array.prototype.slice.apply(M.container.querySelectorAll(M.selector)),o.hooks.run("before-all-elements-highlight",M);for(var T=0,E;E=M.elements[T++];)o.highlightElement(E,$===!0,M.callback)},highlightElement:function(S,$,C){var M=o.util.getLanguage(S),T=o.languages[M];o.util.setLanguage(S,M);var E=S.parentElement;E&&E.nodeName.toLowerCase()==="pre"&&o.util.setLanguage(E,M);var D=S.textContent,P={element:S,language:M,grammar:T,code:D};function L(R){P.highlightedCode=R,o.hooks.run("before-insert",P),P.element.innerHTML=P.highlightedCode,o.hooks.run("after-highlight",P),o.hooks.run("complete",P),C&&C.call(P.element)}if(o.hooks.run("before-sanity-check",P),E=P.element.parentElement,E&&E.nodeName.toLowerCase()==="pre"&&!E.hasAttribute("tabindex")&&E.setAttribute("tabindex","0"),!P.code){o.hooks.run("complete",P),C&&C.call(P.element);return}if(o.hooks.run("before-highlight",P),!P.grammar){L(o.util.encode(P.code));return}if($&&i.Worker){var N=new Worker(o.filename);N.onmessage=function(R){L(R.data)},N.postMessage(JSON.stringify({language:P.language,code:P.code,immediateClose:!0}))}else L(o.highlight(P.code,P.grammar,P.language))},highlight:function(S,$,C){var M={code:S,grammar:$,language:C};if(o.hooks.run("before-tokenize",M),!M.grammar)throw new Error('The language "'+M.language+'" has no grammar.');return M.tokens=o.tokenize(M.code,M.grammar),o.hooks.run("after-tokenize",M),a.stringify(o.util.encode(M.tokens),M.language)},tokenize:function(S,$){var C=$.rest;if(C){for(var M in C)$[M]=C[M];delete $.rest}var T=new c;return d(T,T.head,S),f(S,T,$,T.head,0),g(T)},hooks:{all:{},add:function(S,$){var C=o.hooks.all;C[S]=C[S]||[],C[S].push($)},run:function(S,$){var C=o.hooks.all[S];if(!(!C||!C.length))for(var M=0,T;T=C[M++];)T($)}},Token:a};i.Prism=o;function a(S,$,C,M){this.type=S,this.content=$,this.alias=C,this.length=(M||"").length|0}a.stringify=function S($,C){if(typeof $=="string")return $;if(Array.isArray($)){var M="";return $.forEach(function(L){M+=S(L,C)}),M}var T={type:$.type,content:S($.content,C),tag:"span",classes:["token",$.type],attributes:{},language:C},E=$.alias;E&&(Array.isArray(E)?Array.prototype.push.apply(T.classes,E):T.classes.push(E)),o.hooks.run("wrap",T);var D="";for(var P in T.attributes)D+=" "+P+'="'+(T.attributes[P]||"").replace(/"/g,"&quot;")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+D+">"+T.content+"</"+T.tag+">"};function u(S,$,C,M){S.lastIndex=$;var T=S.exec(C);if(T&&M&&T[1]){var E=T[1].length;T.index+=E,T[0]=T[0].slice(E)}retLine truncated
`),b.hasAttribute("data-start")||b.setAttribute("data-start",String(P+1))}v.textContent=T,t.highlightElement(v)},function(T){b.setAttribute(o,f),v.textContent=T})}}),t.plugins.fileHighlight={highlight:function(b){for(var v=(b||document).querySelectorAll(c),S=0,$;$=v[S++];)t.highlightElement($)}};var g=!1;t.fileHighlight=function(){g||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),g=!0),t.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(Db);var gl=Db.exports,f3={exports:{}};(function(n){(function(){if(typeof Prism=="undefined")return;var e=Object.assign||function(l,r){for(var o in r)r.hasOwnProperty(o)&&(l[o]=r[o]);return l};function t(l){this.defaults=e({},l)}function i(l){return l.replace(/-(\w)/g,function(r,o){return o.toUpperCase()})}function s(l){for(var r=0,o=0;o<l.length;++o)l.charCodeAt(o)==" ".charCodeAt(0)&&(r+=3);return l.length+r}t.prototype={setDefaults:function(l){this.defaults=e(this.defaults,l)},normalize:function(l,r){r=e(this.defaults,r);for(var o in r){var a=i(o);o!=="normalize"&&a!=="setDefaults"&&r[o]&&this[a]&&(l=this[a].call(this,l,r[o]))}return l},leftTrim:function(l){return l.replace(/^\s+/,"")},rightTrim:function(l){return l.replace(/\s+$/,"")},tabsToSpaces:function(l,r){return r=r|0||4,l.replace(/\t/g,new Array(++r).join(" "))},spacesToTabs:function(l,r){return r=r|0||4,l.replace(RegExp(" {"+r+"}","g")," ")},removeTrailing:function(l){return l.replace(/\s*?$/gm,"")},removeInitialLineFeed:function(l){return l.replace(/^(?:\r?\n|\r)/,"")},removeIndent:function(l){var r=l.match(/^[^\S\n\r]*(?=\S)/gm);return!r||!r[0].length||(r.sort(function(o,a){return o.length-a.length}),!r[0].length)?l:l.replace(RegExp("^"+r[0],"gm"),"")},indent:function(l,r){return l.replace(/^[^\S\n\r]*(?=\S)/gm,new Array(++r).join(" ")+"$&")},breakLines:function(l,r){r=r===!0?80:r|0||80;for(var o=l.split(`
`),a=0;a<o.length;++a)if(!(s(o[a])<=r)){for(var u=o[a].split(/(\s+)/g),f=0,c=0;c<u.length;++c){var d=s(u[c]);f+=d,f>r&&(u[c]=`
`+u[c],f=d)}o[a]=u.join("")}return o.join(`
`)}},n.exports&&(n.exports=t),Prism.plugins.NormalizeWhitespace=new t({"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),Prism.hooks.add("before-sanity-check",function(l){var r=Prism.plugins.NormalizeWhitespace;if(!(l.settings&&l.settings["whitespace-normalization"]===!1)&&!!Prism.util.isActive(l.element,"whitespace-normalization",!0)){if((!l.element||!l.element.parentNode)&&l.code){l.code=r.normalize(l.code,l.settings);return}var o=l.element.parentNode;if(!(!l.code||!o||o.nodeName.toLowerCase()!=="pre")){for(var a=o.childNodes,u="",f="",c=!1,d=0;d<a.length;++d){var h=a[d];h==l.element?c=!0:h.nodeName==="#text"&&(c?f+=h.nodeValue:u+=h.nodeValue,o.removeChild(h),--d)}if(!l.element.children.length||!Prism.plugins.KeepMarkup)l.code=u+l.code+f,l.code=r.normalize(l.code,l.settings);else{var g=u+l.element.innerHTML+f;l.element.innerHTML=r.normalize(g,l.settings),l.code=l.element.textContent}}}})})()})(f3);function c3(n){let e,t;return{c(){e=_("div"),t=_("code"),p(t,"class","svelte-tv7jme"),p(e,"class","code-wrapper prism-light svelte-tv7jme")},m(i,s){w(i,e,s),m(e,t),t.innerHTML=n[0]},p(i,[s]){s&1&&(t.innerHTML=i[0])},i:re,o:re,d(i){i&&k(e)}}}function d3(n,e,t){let{content:i=""}=e,{language:s="javascript"}=e,l="";function r(o){return o=typeof o=="string"?o:"",o=gl.plugins.NormalizeWhitespace.normalize(o,{"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),gl.highlight(o,gl.languages[s]||gl.languages.javascript,s)}return n.$$set=o=>{"content"in o&&t(1,i=o.content),"language"in o&&t(2,s=o.language)},n.$$.update=()=>{n.$$.dirty&2&&typeof gl!="undefined"&&i&&t(0,l=r(i))},[l,i,s]}class en extends Fe{constructor(e){super(),Le(this,e,d3,c3,Ae,{content:1,language:2})}}const p3=n=>({}),ep=n=>({}),h3=n=>({}),tp=n=>({});function np(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S,$=n[4]&&!n[2]&&ip(n);const C=n[18].header,M=Tn(C,n,n[17],tp);let T=n[4]&&n[2]&&sp(n);const E=n[18].default,D=Tn(E,n,n[17],null),P=n[18].footer,L=Tn(P,n,n[17],ep);return{c(){e=_("div"),t=_("div"),s=O(),l=_("div"),r=_("div"),$&&$.c(),o=O(),M&&M.c(),a=O(),T&&T.c(),u=O(),f=_("div"),D&&D.c(),c=O(),d=_("div"),L&&L.c(),p(t,"class","overlay"),p(r,"class","overlay-panel-section panel-header"),p(f,"class","overlay-panel-section panel-content"),p(d,"class","overlay-panel-section panel-footer"),p(l,"class",h="overlay-panel "+n[1]+" "+n[8]),Q(l,"popup",n[2]),p(e,"class","overlay-panel-container"),Q(e,"padded",n[2]),Q(e,"active",n[0])},m(N,R){w(N,e,R),m(e,t),m(e,s),m(e,l),m(l,r),$&&$.m(r,null),m(r,o),M&&M.m(r,null),m(r,a),T&&T.m(r,null),m(l,u),m(l,f),D&&D.m(f,null),n[20](f),m(l,c),m(l,d),L&&L.m(d,null),b=!0,v||(S=[X(t,"click",Kt(n[19])),X(f,"scroll",n[21])],v=!0)},p(N,R){n=N,n[4]&&!n[2]?$?$.p(n,R):($=ip(n),$.c(),$.m(r,o)):$&&($.d(1),$=null),M&&M.p&&(!b||R&131072)&&An(M,C,n,n[17],b?Dn(C,n[17],R,h3):En(n[17]),tp),n[4]&&n[2]?T?T.p(n,R):(T=sp(n),T.c(),T.m(r,null)):T&&(T.d(1),T=null),D&&D.p&&(!b||R&131072)&&An(D,E,n,n[17],b?Dn(E,n[17],R,null):En(n[17]),null),L&&L.p&&(!b||R&131072)&&An(L,P,n,n[17],b?Dn(P,n[17],R,p3):En(n[17]),ep),(!b||R&258&&h!==(h="overlay-panel "+n[1]+" "+n[8]))&&p(l,"class",h),R&262&&Q(l,"popup",n[2]),R&4&&Q(e,"padded",n[2]),R&1&&Q(e,"active",n[0])},i(N){b||(Dt(()=>{i||(i=ft(t,ro,{duration:Ps,opacity:0},!0)),i.run(1)}),A(M,N),A(D,N),A(L,N),Dt(()=>{y&&y.end(1),g=vu(l,ni,n[2]?{duration:Ps,y:-10}:{duration:Ps,x:50}),g.start()}),b=!0)},o(N){i||(i=ft(t,ro,{duration:Ps,opacity:0},!1)),i.run(0),F(M,N),F(D,N),F(L,N),g&&g.invalidate(),y=Zg(l,ni,n[2]?{duration:Ps,y:10}:{duration:Ps,x:50}),b=!1},d(N){N&&k(e),N&&i&&i.end(),$&&$.d(),M&&M.d(N),T&&T.d(),D&&D.d(N),n[20](null),L&&L.d(N),N&&y&&y.end(),v=!1,rt(S)}}}function ip(n){let e,t,i;return{c(){e=_("div"),e.innerHTML='<i class="ri-close-line"></i>',p(e,"class","overlay-close")},m(s,l){w(s,e,l),t||(i=X(e,"click",Kt(n[5])),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function sp(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<i class="ri-close-line txt-lg"></i>',p(e,"type","button"),p(e,"class","btn btn-sm btn-circle btn-secondary btn-close m-l-auto")},m(s,l){w(s,e,l),t||(i=X(e,"click",Kt(n[5])),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function m3(n){let e,t,i,s,l=n[0]&&np(n);return{c(){e=_("div"),l&&l.c(),p(e,"class","overlay-panel-wrapper")},m(r,o){w(r,e,o),l&&l.m(e,null),n[22](e),t=!0,i||(s=[X(window,"resize",n[10]),X(window,"keydown",n[9])],i=!0)},p(r,[o]){r[0]?l?(l.p(r,o),o&1&&A(l,1)):(l=np(r),l.c(),A(l,1),l.m(e,null)):l&&(Oe(),F(l,1,1,()=>{l=null}),Te())},i(r){t||(A(l),t=!0)},o(r){F(l),t=!1},d(r){r&&k(e),l&&l.d(),n[22](null),i=!1,rt(s)}}}let ns;function Ab(){return ns=ns||document.querySelector(".overlays"),ns||(ns=document.createElement("div"),ns.classList.add("overlays"),document.body.appendChild(ns)),ns}let Ps=150;function lp(){return 1e3+Ab().querySelectorAll(".overlay-panel-container.active").length}function g3(n,e,t){let{$$slots:i={},$$scope:s}=e,{class:l=""}=e,{active:r=!1}=e,{popup:o=!1}=e,{overlayClose:a=!0}=e,{btnClose:u=!0}=e,{escClose:f=!0}=e,{beforeOpen:c=void 0}=e,{ Line truncated
This field is disabled if "Only domains" is set.`,position:"top"})),d=!0)},p(b,v){(!c||v&16&&l!==(l=b[4]))&&p(e,"for",l);const S={};v&16&&(S.id=b[4]),v&1&&(S.disabled=!U.isEmpty(b[0].onlyDomains)),!a&&v&1&&(a=!0,S.value=b[0].exceptDomains,je(()=>a=!1)),o.$set(S)},i(b){c||(A(o.$$.fragment,b),c=!0)},o(b){F(o.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(r),z(o,b),b&&k(u),b&&k(f),d=!1,h()}}}function v4(n){let e,t,i,s,l,r,o,a,u,f,c,d,h;function g(b){n[3](b)}let y={id:n[4]+".options.onlyDomains",disabled:!U.isEmpty(n[0].exceptDomains)};return n[0].onlyDomains!==void 0&&(y.value=n[0].onlyDomains),o=new ks({props:y}),he.push(()=>Re(o,"value",g)),{c(){e=_("label"),t=_("span"),t.textContent="Only domains",i=O(),s=_("i"),r=O(),B(o.$$.fragment),u=O(),f=_("div"),f.textContent="Use comma as separator.",p(t,"class","txt"),p(s,"class","ri-information-line link-hint"),p(e,"for",l=n[4]+".options.onlyDomains"),p(f,"class","help-block")},m(b,v){w(b,e,v),m(e,t),m(e,i),m(e,s),w(b,r,v),V(o,b,v),w(b,u,v),w(b,f,v),c=!0,d||(h=Xe(St.call(null,s,{text:`Domains that are ONLY allowed as value.
This field is disabled if "Except domains" is set.`,position:"top"})),d=!0)},p(b,v){(!c||v&16&&l!==(l=b[4]+".options.onlyDomains"))&&p(e,"for",l);const S={};v&16&&(S.id=b[4]+".options.onlyDomains"),v&1&&(S.disabled=!U.isEmpty(b[0].exceptDomains)),!a&&v&1&&(a=!0,S.value=b[0].onlyDomains,je(()=>a=!1)),o.$set(S)},i(b){c||(A(o.$$.fragment,b),c=!0)},o(b){F(o.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(r),z(o,b),b&&k(u),b&&k(f),d=!1,h()}}}function k4(n){let e,t,i,s,l,r,o;return i=new Ne({props:{class:"form-field",name:"schema."+n[1]+".options.exceptDomains",$$slots:{default:[y4,({uniqueId:a})=>({4:a}),({uniqueId:a})=>a?16:0]},$$scope:{ctx:n}}}),r=new Ne({props:{class:"form-field",name:"schema."+n[1]+".options.onlyDomains",$$slots:{default:[v4,({uniqueId:a})=>({4:a}),({uniqueId:a})=>a?16:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=O(),l=_("div"),B(r.$$.fragment),p(t,"class","col-sm-6"),p(l,"class","col-sm-6"),p(e,"class","grid")},m(a,u){w(a,e,u),m(e,t),V(i,t,null),m(e,s),m(e,l),V(r,l,null),o=!0},p(a,[u]){const f={};u&2&&(f.name="schema."+a[1]+".options.exceptDomains"),u&49&&(f.$$scope={dirty:u,ctx:a}),i.$set(f);const c={};u&2&&(c.name="schema."+a[1]+".options.onlyDomains"),u&49&&(c.$$scope={dirty:u,ctx:a}),r.$set(c)},i(a){o||(A(i.$$.fragment,a),A(r.$$.fragment,a),o=!0)},o(a){F(i.$$.fragment,a),F(r.$$.fragment,a),o=!1},d(a){a&&k(e),z(i),z(r)}}}function w4(n,e,t){let{key:i=""}=e,{options:s={}}=e;function l(o){n.$$.not_equal(s.exceptDomains,o)&&(s.exceptDomains=o,t(0,s))}function r(o){n.$$.not_equal(s.onlyDomains,o)&&(s.onlyDomains=o,t(0,s))}return n.$$set=o=>{"key"in o&&t(1,i=o.key),"options"in o&&t(0,s=o.options)},[s,i,l,r]}class Lb extends Fe{constructor(e){super(),Le(this,e,w4,k4,Ae,{key:1,options:0})}}function S4(n){let e,t,i,s;function l(a){n[2](a)}function r(a){n[3](a)}let o={};return n[0]!==void 0&&(o.key=n[0]),n[1]!==void 0&&(o.options=n[1]),e=new Lb({props:o}),he.push(()=>Re(e,"key",l)),he.push(()=>Re(e,"options",r)),{c(){B(e.$$.fragment)},m(a,u){V(e,a,u),s=!0},p(a,[u]){const f={};!t&&u&1&&(t=!0,f.key=a[0],je(()=>t=!1)),!i&&u&2&&(i=!0,f.options=a[1],je(()=>i=!1)),e.$set(f)},i(a){s||(A(e.$$.fragment,a),s=!0)},o(a){F(e.$$.fragment,a),s=!1},d(a){z(e,a)}}}function $4(n,e,t){let{key:i=""}=e,{options:s={}}=e;function l(o){i=o,t(0,i)}function r(o){s=o,t(1,s)}return n.$$set=o=>{"key"in o&&t(0,i=o.key),"options"in o&&t(1,s=o.options)},[i,s,l,r]}class C4 extends Fe{constructor(e){super(),Le(this,e,$4,S4,Ae,{key:0,options:1})}}var $a=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],qs={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:typeof window=="object"&&window.navigator.userAgent.indexOf("MSIE")===-1,ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:function(n){return typeof console!="undefined"&&console.warn(n)},getWeek:function(n){var e=new Date(n.getTime());e.setHours(0,0,0,0),e.setDate(e.getDate()+3-(e.getDay()+6)%7);var t=new Date(e.getFullYear(),0,4);return 1+Math.round(((e.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},zl={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(n){var e=n%100;if(e>3&&e<21)return"th";switch(e%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Clic Line truncated
<span class='flatpickr-weekday'>
`+j.join("</span><span class='flatpickr-weekday'>")+`
</span>
`}}function fe(){t.calendarContainer.classList.add("hasWeeks");var I=wt("div","flatpickr-weekwrapper");I.appendChild(wt("span","flatpickr-weekday",t.l10n.weekAbbreviation));var j=wt("div","flatpickr-weeks");return I.appendChild(j),{weekWrapper:I,weekNumbers:j}}function ye(I,j){j===void 0&&(j=!0);var ee=j?I:I-t.currentMonth;ee<0&&t._hidePrevMonthArrow===!0||ee>0&&t._hideNextMonthArrow===!0||(t.currentMonth+=ee,(t.currentMonth<0||t.currentMonth>11)&&(t.currentYear+=t.currentMonth>11?1:-1,t.currentMonth=(t.currentMonth+12)%12,st("onYearChange"),J()),R(),st("onMonthChange"),xe())}function se(I,j){if(I===void 0&&(I=!0),j===void 0&&(j=!0),t.input.value="",t.altInput!==void 0&&(t.altInput.value=""),t.mobileInput!==void 0&&(t.mobileInput.value=""),t.selectedDates=[],t.latestSelectedDateObj=void 0,j===!0&&(t.currentYear=t._initialDate.getFullYear(),t.currentMonth=t._initialDate.getMonth()),t.config.enableTime===!0){var ee=Ta(t.config),de=ee.hours,Pe=ee.minutes,We=ee.seconds;h(de,Pe,We)}t.redraw(),I&&st("onChange")}function Z(){t.isOpen=!1,t.isMobile||(t.calendarContainer!==void 0&&t.calendarContainer.classList.remove("open"),t._input!==void 0&&t._input.classList.remove("active")),st("onClose")}function De(){t.config!==void 0&&st("onDestroy");for(var I=t._handlers.length;I--;)t._handlers[I].remove();if(t._handlers=[],t.mobileInput)t.mobileInput.parentNode&&t.mobileInput.parentNode.removeChild(t.mobileInput),t.mobileInput=void 0;else if(t.calendarContainer&&t.calendarContainer.parentNode)if(t.config.static&&t.calendarContainer.parentNode){var j=t.calendarContainer.parentNode;if(j.lastChild&&j.removeChild(j.lastChild),j.parentNode){for(;j.firstChild;)j.parentNode.insertBefore(j.firstChild,j);j.parentNode.removeChild(j)}}else t.calendarContainer.parentNode.removeChild(t.calendarContainer);t.altInput&&(t.input.type="text",t.altInput.parentNode&&t.altInput.parentNode.removeChild(t.altInput),delete t.altInput),t.input&&(t.input.type=t.input._type,t.input.classList.remove("flatpickr-input"),t.input.removeAttribute("readonly")),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(ee){try{delete t[ee]}catch{}})}function te(I){return t.calendarContainer.contains(I)}function be(I){if(t.isOpen&&!t.config.inline){var j=Sn(I),ee=te(j),de=j===t.input||j===t.altInput||t.element.contains(j)||I.path&&I.path.indexOf&&(~I.path.indexOf(t.input)||~I.path.indexOf(t.altInput)),Pe=!de&&!ee&&!te(I.relatedTarget),We=!t.config.ignoredFocusElements.some(function(tt){return tt.contains(j)});Pe&&We&&(t.config.allowInput&&t.setDate(t._input.value,!1,t.config.altInput?t.config.altFormat:t.config.dateFormat),t.timeContainer!==void 0&&t.minuteElement!==void 0&&t.hourElement!==void 0&&t.input.value!==""&&t.input.value!==void 0&&a(),t.close(),t.config&&t.config.mode==="range"&&t.selectedDates.length===1&&t.clear(!1))}}function ue(I){if(!(!I||t.config.minDate&&I<t.config.minDate.getFullYear()||t.config.maxDate&&I>t.config.maxDate.getFullYear())){var j=I,ee=t.currentYear!==j;t.currentYear=j||t.currentYear,t.config.maxDate&&t.currentYear===t.config.maxDate.getFullYear()?t.currentMonth=Math.min(t.config.maxDate.getMonth(),t.currentMonth):t.config.minDate&&t.currentYear===t.config.minDate.getFullYear()&&(t.currentMonth=Math.max(t.config.minDate.getMonth(),t.currentMonth)),ee&&(t.redraw(),st("onYearChange"),J())}}function ie(I,j){var ee;j===void 0&&(j=!0);var de=t.parseDate(I,void 0,j);if(t.config.minDate&&de&&$n(de,t.config.minDate,j!==void 0?j:!t.minDateHasTime)<0||t.config.maxDate&&de&&$n(de,t.config.maxDate,j!==void 0?j:!t.maxDateHasTime)>0)return!1;if(!t.config.enable&&t.config.disable.length===0)return!0;if(de===void 0)return!1;for(var Pe=!!t.config.enable,We=(ee=t.config.enable)!==null&&ee!==void 0?ee:t.config.disable,tt=0,Je=void 0;tt<We.length;tt++){if(Je=We[tt],typeof Je=="function"&&Je(de))return Pe;if(Je instanceof Date&&de!==void 0&&Je.getTime()===de.getTime())return Pe;if(typeof Je=="string"){var nt=t.parseDate(Je,void 0,!0);return nt&&nt.getTime()===de.getTime()?Pe:!Pe}else if(typeof Je=="object"&&de!==void 0&&Je.from&&Je.to&&de.getTime()>=Je.from.getTime()&&de.getTime()<=Je.to.getTime())return Pe}return!Pe}function ve(I){return t.daysContainer!==void 0?I.className.indexOf("hidden")===-1&&I.className.indexOf("flatpickr-disabled")===-1&&t.daysContainer.contains(I):!1}function He(I){var j=I.target===t._input,ee=t._input.value.trimEnd()!==Gt();j&&ee&&!(I.relatedTarget&&te(I.relatedTarget))&&t.setDate(t._input.value,!0,I.target===t.altInput?t.config.altFormat:t.config.dateFormat)}f Line truncated
`),d=_("span"),h=_("span"),h.textContent="Choose presets",g=O(),B(y.$$.fragment),p(t,"class","txt"),p(s,"class","ri-information-line link-hint"),p(e,"for",l=n[9]),p(h,"class","txt link-primary"),p(d,"class","inline-flex"),p(f,"class","help-block")},m(M,T){w(M,e,T),m(e,t),m(e,i),m(e,s),w(M,r,T),V(o,M,T),w(M,u,T),w(M,f,T),m(f,c),m(f,d),m(d,h),m(d,g),V(y,d,null),b=!0,v||(S=Xe(St.call(null,s,{text:`Allow uploading files ONLY with the listed mime types.
Leave empty for no restriction.`,position:"top"})),v=!0)},p(M,T){(!b||T&512&&l!==(l=M[9]))&&p(e,"for",l);const E={};T&512&&(E.id=M[9]),!a&&T&1&&(a=!0,E.value=M[0].mimeTypes,je(()=>a=!1)),o.$set(E);const D={};T&1025&&(D.$$scope={dirty:T,ctx:M}),y.$set(D)},i(M){b||(A(o.$$.fragment,M),A(y.$$.fragment,M),b=!0)},o(M){F(o.$$.fragment,M),F(y.$$.fragment,M),b=!1},d(M){M&&k(e),M&&k(r),z(o,M),M&&k(u),M&&k(f),z(y),v=!1,S()}}}function X4(n){let e,t,i,s,l,r,o,a,u,f,c,d,h;function g(b){n[8](b)}let y={id:n[9],placeholder:"eg. 50x50, 480x720"};return n[0].thumbs!==void 0&&(y.value=n[0].thumbs),o=new ks({props:y}),he.push(()=>Re(o,"value",g)),{c(){e=_("label"),t=_("span"),t.textContent="Thumb sizes",i=O(),s=_("i"),r=O(),B(o.$$.fragment),u=O(),f=_("div"),f.textContent="Use comma as separator.",p(t,"class","txt"),p(s,"class","ri-information-line link-hint"),p(e,"for",l=n[9]),p(f,"class","help-block")},m(b,v){w(b,e,v),m(e,t),m(e,i),m(e,s),w(b,r,v),V(o,b,v),w(b,u,v),w(b,f,v),c=!0,d||(h=Xe(St.call(null,s,{text:"List of thumb sizes for image files. The thumbs will be generated lazily on first access.",position:"top"})),d=!0)},p(b,v){(!c||v&512&&l!==(l=b[9]))&&p(e,"for",l);const S={};v&512&&(S.id=b[9]),!a&&v&1&&(a=!0,S.value=b[0].thumbs,je(()=>a=!1)),o.$set(S)},i(b){c||(A(o.$$.fragment,b),c=!0)},o(b){F(o.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(r),z(o,b),b&&k(u),b&&k(f),d=!1,h()}}}function Q4(n){let e,t,i,s,l,r,o,a,u,f,c,d,h;return i=new Ne({props:{class:"form-field required",name:"schema."+n[1]+".options.maxSize",$$slots:{default:[J4,({uniqueId:g})=>({9:g}),({uniqueId:g})=>g?512:0]},$$scope:{ctx:n}}}),r=new Ne({props:{class:"form-field required",name:"schema."+n[1]+".options.maxSelect",$$slots:{default:[G4,({uniqueId:g})=>({9:g}),({uniqueId:g})=>g?512:0]},$$scope:{ctx:n}}}),u=new Ne({props:{class:"form-field",name:"schema."+n[1]+".options.mimeTypes",$$slots:{default:[x4,({uniqueId:g})=>({9:g}),({uniqueId:g})=>g?512:0]},$$scope:{ctx:n}}}),d=new Ne({props:{class:"form-field",name:"schema."+n[1]+".options.thumbs",$$slots:{default:[X4,({uniqueId:g})=>({9:g}),({uniqueId:g})=>g?512:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=O(),l=_("div"),B(r.$$.fragment),o=O(),a=_("div"),B(u.$$.fragment),f=O(),c=_("div"),B(d.$$.fragment),p(t,"class","col-sm-6"),p(l,"class","col-sm-6"),p(a,"class","col-sm-12"),p(c,"class","col-sm-12"),p(e,"class","grid")},m(g,y){w(g,e,y),m(e,t),V(i,t,null),m(e,s),m(e,l),V(r,l,null),m(e,o),m(e,a),V(u,a,null),m(e,f),m(e,c),V(d,c,null),h=!0},p(g,[y]){const b={};y&2&&(b.name="schema."+g[1]+".options.maxSize"),y&1537&&(b.$$scope={dirty:y,ctx:g}),i.$set(b);const v={};y&2&&(v.name="schema."+g[1]+".options.maxSelect"),y&1537&&(v.$$scope={dirty:y,ctx:g}),r.$set(v);const S={};y&2&&(S.name="schema."+g[1]+".options.mimeTypes"),y&1537&&(S.$$scope={dirty:y,ctx:g}),u.$set(S);const $={};y&2&&($.name="schema."+g[1]+".options.thumbs"),y&1537&&($.$$scope={dirty:y,ctx:g}),d.$set($)},i(g){h||(A(i.$$.fragment,g),A(r.$$.fragment,g),A(u.$$.fragment,g),A(d.$$.fragment,g),h=!0)},o(g){F(i.$$.fragment,g),F(r.$$.fragment,g),F(u.$$.fragment,g),F(d.$$.fragment,g),h=!1},d(g){g&&k(e),z(i),z(r),z(u),z(d)}}}function eM(n,e,t){let{key:i=""}=e,{options:s={}}=e;function l(){s.maxSize=Tt(this.value),t(0,s)}function r(){s.maxSelect=Tt(this.value),t(0,s)}function o(d){n.$$.not_equal(s.mimeTypes,d)&&(s.mimeTypes=d,t(0,s))}const a=()=>{t(0,s.mimeTypes=["image/jpg","image/jpeg","image/png","image/svg+xml","image/gif"],s)},u=()=>{t(0,s.mimeTypes=["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],s)},f=()=>{t(0,s.mimeTypes=["application/zip","application/x-7z-compressed","application/x-rar-compressed"],s)};function c(d){n.$$.not_equal(s.thumbs,d)&&(s.thumbs=d,t(0,s))}return n.$$set=d=>{"key"in d&&t(1,i=d.key),"options"in d&&t(0,s=d.options)},n.$$.update=()=>{n.$$.dirty&1&&U.isEmpty(s)&&t(0,s={maxSelect:1,maxSize:5242880,thumbs:[],mimeTypes:[]})},[s,i,l,r,o,a,u,f,c]}class tM extends Fe{constructor(e){super(),Le(this,e,eM,Q4,Ae,{key:1,options:0})}}function nM(n){let e,t,i,s,l,r,o;function a(f){n[5](f)}let u={searchable:n[3].length>5,selectPlaceholder:n[2]?"Loading...":"Select collection",noOptionsText:"No collections found",selectionKey:"id",items:n[3]};return n[0].collectionId!==void 0&&(u.keyOfSelected=n[0].collectionId),l=new vs({props:u}),he.push(()=>Re(l,"keyOfSelected",a)),{c(){e=_("label"),t=H("Collection"),s=O(),B(l.$$.fragment),p(e,"for",i=n[9])},m(f,c){w(f,e,c),m(e,t),w(f,s,c),V(l,f,c),o=!0},p(f,c){(!o||c&512&&i!==(i=f[9]))&&p(e,"for",i);const d={};c&8&&(d.searchable=f[3].length>5),c&4&&(d.selectPlaceholder=f[2]?"Loading...":"Select collection"),c&8&&(d.items=f[3]),!r&&c&1&&(r=!0,d.keyOfSelected=f[0].collectionId,je(()=>r=!1)),l.$set(d)},i(f){o||(A(l.$$.fragment,f),o=!0)},o(f){F(l.$$.fragment,f),o=!1},d(f){f&&k(e),f&&k(s),z(l,f)}}}function iM(n){let e,t,i,s,l,r,o,a;return{c( Line truncated
<code>@request.query.*</code>
<code>@request.data.*</code>
<code>@request.user.*</code>`,$=O(),C=_("hr"),M=O(),T=_("p"),T.innerHTML="You could also add constraints and query other collections using the <em>@collection</em> filter:",E=O(),D=_("div"),D.innerHTML="<code>@collection.ANY_COLLECTION_NAME.*</code>",P=O(),L=_("hr"),N=O(),R=_("p"),R.innerHTML=`Example rule:
<br/>
<code>@request.user.id!=null &amp;&amp; created&gt;&quot;2022-01-01 00:00:00&quot;</code>`,p(s,"class","m-b-0"),p(r,"class","inline-flex flex-gap-5"),p(g,"class","m-t-10 m-b-5"),p(b,"class","m-b-0"),p(S,"class","inline-flex flex-gap-5"),p(C,"class","m-t-10 m-b-5"),p(T,"class","m-b-0"),p(D,"class","inline-flex flex-gap-5"),p(L,"class","m-t-10 m-b-5"),p(i,"class","content"),p(t,"class","alert alert-warning m-0")},m(K,Y){w(K,e,Y),m(e,t),m(t,i),m(i,s),m(i,l),m(i,r),m(r,o),m(r,a),m(r,u),m(r,f),m(r,c),m(r,d);for(let ne=0;ne<G.length;ne+=1)G[ne].m(r,null);m(i,h),m(i,g),m(i,y),m(i,b),m(i,v),m(i,S),m(i,$),m(i,C),m(i,M),m(i,T),m(i,E),m(i,D),m(i,P),m(i,L),m(i,N),m(i,R),W=!0},p(K,Y){if(Y&1){q=K[0].schema;let ne;for(ne=0;ne<q.length;ne+=1){const fe=Yp(K,q,ne);G[ne]?G[ne].p(fe,Y):(G[ne]=Jp(fe),G[ne].c(),G[ne].m(r,null))}for(;ne<G.length;ne+=1)G[ne].d(1);G.length=q.length}},i(K){W||(K&&Dt(()=>{J||(J=ft(e,un,{duration:150},!0)),J.run(1)}),W=!0)},o(K){K&&(J||(J=ft(e,un,{duration:150},!1)),J.run(0)),W=!1},d(K){K&&k(e),Bn(G,K),K&&J&&J.end()}}}function NM(n){let e,t=n[19].name+"",i;return{c(){e=_("code"),i=H(t)},m(s,l){w(s,e,l),m(e,i)},p(s,l){l&1&&t!==(t=s[19].name+"")&&_e(i,t)},d(s){s&&k(e)}}}function RM(n){let e,t=n[19].name+"",i,s;return{c(){e=_("code"),i=H(t),s=H(".*")},m(l,r){w(l,e,r),m(e,i),m(e,s)},p(l,r){r&1&&t!==(t=l[19].name+"")&&_e(i,t)},d(l){l&&k(e)}}}function Jp(n){let e;function t(l,r){return l[19].type==="relation"||l[19].type==="user"?RM:NM}let i=t(n),s=i(n);return{c(){s.c(),e=lt()},m(l,r){s.m(l,r),w(l,e,r)},p(l,r){i===(i=t(l))&&s?s.p(l,r):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},d(l){s.d(l),l&&k(e)}}}function jM(n){let e=[],t=new Map,i,s,l=Object.entries(n[6]);const r=o=>o[14];for(let o=0;o<l.length;o+=1){let a=Wp(n,l,o),u=r(a);t.set(u,e[o]=Gp(u,a))}return{c(){for(let o=0;o<e.length;o+=1)e[o].c();i=lt()},m(o,a){for(let u=0;u<e.length;u+=1)e[u].m(o,a);w(o,i,a),s=!0},p(o,a){a&262235&&(l=Object.entries(o[6]),Oe(),e=ot(e,a,r,1,o,l,t,i.parentNode,Lt,Gp,i,Wp),Te())},i(o){if(!s){for(let a=0;a<l.length;a+=1)A(e[a]);s=!0}},o(o){for(let a=0;a<e.length;a+=1)F(e[a]);s=!1},d(o){for(let a=0;a<e.length;a+=1)e[a].d(o);o&&k(i)}}}function HM(n){let e;return{c(){e=_("div"),e.innerHTML='<span class="loader"></span>',p(e,"class","txt-center")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function qM(n){let e,t,i;function s(){return n[9](n[14])}return{c(){e=_("button"),e.innerHTML='<i class="ri-lock-line"></i>',p(e,"type","button"),p(e,"class","rule-toggle-btn btn btn-circle btn-outline svelte-fjxz7k")},m(l,r){w(l,e,r),t||(i=[Xe(St.call(null,e,"Lock and set to Admins only")),X(e,"click",s)],t=!0)},p(l,r){n=l},d(l){l&&k(e),t=!1,rt(i)}}}function VM(n){let e,t,i;function s(){return n[8](n[14])}return{c(){e=_("button"),e.innerHTML='<i class="ri-lock-unlock-line"></i>',p(e,"type","button"),p(e,"class","rule-toggle-btn btn btn-circle btn-outline btn-success svelte-fjxz7k")},m(l,r){w(l,e,r),t||(i=[Xe(St.call(null,e,"Unlock and set custom rule")),X(e,"click",s)],t=!0)},p(l,r){n=l},d(l){l&&k(e),t=!1,rt(i)}}}function zM(n){let e;return{c(){e=H("Leave empty to grant everyone access")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function BM(n){let e;return{c(){e=H("Only admins will be able to access (unlock to change)")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function UM(n){let e,t=n[15]+"",i,s,l=Ri(n[0][n[14]])?"Admins only":"Custom rule",r,o,a,u,f=n[14],c,d,h,g,y,b,v;function S(){return n[10](n[14])}const $=()=>n[11](u,f),C=()=>n[11](null,f);function M(N){n[12](N,n[14])}var T=n[4];function E(N){let R={baseCollection:N[0],disabled:Ri(N[0][N[14]])};return N[0][N[14]]!==void 0&&(R.value=N[0][N[14]]),{props:R}}T&&(u=new T(E(n)),$(),he.push(()=>Re(u,"value",M)));function D(N,R){return R&1&&(g=null),g==null&&(g=!!Ri(N[0][N[14]])),g?BM:zM}let P=D(n,-1),L=P(n);return{c(){e=_("label"),i=H(t),s=H(" - "),r=H(l),a=O(),u&&B(u.$$.fragment),d=O(),h=_("div"),L.c(),p(e,"for",o=n[18]),p(h,"class","help-block")},m(N,R){w(N,e,R),m(e,i),m(e,s),m(e,r),w(N,a,R),u&&V(u,N,R),w(N,d,R),w(N,h,R),L.m(h,null),y=!0,b||(v=X(e,"click",S),b=!0)},p(N,R){n=N,(!y||R&1)&&l!==(l=Ri(n[0][n[14]])?"Admins only":"Custom rule")&&_e(r,l),(!y||R&262144&&o!==(o=n[18]))&&p(e,"for",o),f!==n[14]&&(C(),f=n[14],$());const J={};if(R&1&&(J.baseCollection=n[0]),R&1&&(J.disabled=Ri(n[0][n[14]])),!c&&R&65&&(c=!0,J.value=n[0][n[14]],je(()=>c=!1)),T!==(T=n[4])){if(u){Oe();const W=u;F(W.$$.fragment,1,0,()=>{z(W,1)}),Te()}T?(u=new T(E(n)),$(),he.push(()=>Re(u,"value",M)),B(u.$$.fragment),A(u.$$.fragment,1),V(u,d.parentNode,d)):u=null}else T&&u.$set(J);P!==(P=D(n,R))&&(L.d(1),L=P(n),L&&(L.c(),L.m(h,null)))},i(N){y||(u&&A(u.$$.fragment,N),y=!0)},o(N){u&&F(u.$$.fragment,N),y=!1},d(N){N&&k(e),N&&k(a),C(),u&&z(u,N),N&&k(d),N&&k(h),L.d(),b=!1,v()}}}function Gp(n,e){let t,i,s,l,r,o,a,u;function f(h,g){return g&1&&(l=null),l==null&&(l=!!Ri(h[0][h[14]])),l?VM:qM}let c=f(e,-1),d=c(e);return o=new Ne({props:{class:"form-field rule-field m-0 "+(Ri(e[0][e[14]])?"disabled":""),name:e[14],$$slots:{defaLine truncated
<a href="https://pocketbase.io/docs/manage-collections#rules-filters-syntax" target="_blank" rel="noopener">PocketBase filter syntax and operators
</a>.`,s=O(),l=_("span"),o=H(r),a=O(),b&&b.c(),u=O(),c.c(),d=lt(),p(l,"class","expand-handle txt-sm txt-bold txt-nowrap link-hint"),p(t,"class","flex"),p(e,"class","block m-b-base")},m(C,M){w(C,e,M),m(e,t),m(t,i),m(t,s),m(t,l),m(l,o),m(e,a),b&&b.m(e,null),w(C,u,M),S[f].m(C,M),w(C,d,M),h=!0,g||(y=X(l,"click",n[7]),g=!0)},p(C,[M]){(!h||M&4)&&r!==(r=C[2]?"Hide available fields":"Show available fields")&&_e(o,r),C[2]?b?(b.p(C,M),M&4&&A(b,1)):(b=Kp(C),b.c(),A(b,1),b.m(e,null)):b&&(Oe(),F(b,1,1,()=>{b=null}),Te());let T=f;f=$(C),f===T?S[f].p(C,M):(Oe(),F(S[T],1,1,()=>{S[T]=null}),Te(),c=S[f],c?c.p(C,M):(c=S[f]=v[f](C),c.c()),A(c,1),c.m(d.parentNode,d))},i(C){h||(A(b),A(c),h=!0)},o(C){F(b),F(c),h=!1},d(C){C&&k(e),b&&b.d(),C&&k(u),S[f].d(C),C&&k(d),g=!1,y()}}}function Ri(n){return n===null}function YM(n,e,t){let{collection:i=new Ln}=e,s={},l=!1,r={},o,a=!1;const u={listRule:"List Action",viewRule:"View Action",createRule:"Create Action",updateRule:"Update Action",deleteRule:"Delete Action"};async function f(){t(5,a=!0);try{t(4,o=(await rs(()=>import("./FilterAutocompleteInput.2b66e437.js"),[])).default)}catch(v){console.warn(v),t(4,o=null)}t(5,a=!1)}pi(()=>{f()});const c=()=>t(2,l=!l),d=async v=>{var S;t(0,i[v]=s[v]||"",i),await Mi(),(S=r[v])==null||S.focus()},h=v=>{t(1,s[v]=i[v],s),t(0,i[v]=null,i)},g=v=>{var S;return(S=r[v])==null?void 0:S.focus()};function y(v,S){he[v?"unshift":"push"](()=>{r[S]=v,t(3,r)})}function b(v,S){n.$$.not_equal(i[S],v)&&(i[S]=v,t(0,i))}return n.$$set=v=>{"collection"in v&&t(0,i=v.collection)},[i,s,l,r,o,a,u,c,d,h,g,y,b]}class KM extends Fe{constructor(e){super(),Le(this,e,YM,WM,Ae,{collection:0})}}function Zp(n,e,t){const i=n.slice();return i[14]=e[t],i}function xp(n,e,t){const i=n.slice();return i[14]=e[t],i}function Xp(n){let e;return{c(){e=_("p"),e.textContent="All data associated with the removed fields will be permanently deleted!"},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Qp(n){let e,t,i,s,l=n[1].originalName+"",r,o,a,u,f,c=n[1].name+"",d;return{c(){e=_("li"),t=_("div"),i=H(`Renamed collection
`),s=_("strong"),r=H(l),o=O(),a=_("i"),u=O(),f=_("strong"),d=H(c),p(s,"class","txt-strikethrough txt-hint"),p(a,"class","ri-arrow-right-line txt-sm"),p(f,"class","txt"),p(t,"class","inline-flex")},m(h,g){w(h,e,g),m(e,t),m(t,i),m(t,s),m(s,r),m(t,o),m(t,a),m(t,u),m(t,f),m(f,d)},p(h,g){g&2&&l!==(l=h[1].originalName+"")&&_e(r,l),g&2&&c!==(c=h[1].name+"")&&_e(d,c)},d(h){h&&k(e)}}}function eh(n){let e,t,i,s,l=n[14].originalName+"",r,o,a,u,f,c=n[14].name+"",d;return{c(){e=_("li"),t=_("div"),i=H(`Renamed field
`),s=_("strong"),r=H(l),o=O(),a=_("i"),u=O(),f=_("strong"),d=H(c),p(s,"class","txt-strikethrough txt-hint"),p(a,"class","ri-arrow-right-line txt-sm"),p(f,"class","txt"),p(t,"class","inline-flex")},m(h,g){w(h,e,g),m(e,t),m(t,i),m(t,s),m(s,r),m(t,o),m(t,a),m(t,u),m(t,f),m(f,d)},p(h,g){g&16&&l!==(l=h[14].originalName+"")&&_e(r,l),g&16&&c!==(c=h[14].name+"")&&_e(d,c)},d(h){h&&k(e)}}}function th(n){let e,t,i,s=n[14].name+"",l,r;return{c(){e=_("li"),t=H("Removed field "),i=_("span"),l=H(s),r=O(),p(i,"class","txt-bold"),p(e,"class","txt-danger")},m(o,a){w(o,e,a),m(e,t),m(e,i),m(i,l),m(e,r)},p(o,a){a&8&&s!==(s=o[14].name+"")&&_e(l,s)},d(o){o&&k(e)}}}function JM(n){let e,t,i,s,l,r,o,a,u,f,c,d,h=n[3].length&&Xp(),g=n[5]&&Qp(n),y=n[4],b=[];for(let $=0;$<y.length;$+=1)b[$]=eh(xp(n,y,$));let v=n[3],S=[];for(let $=0;$<v.length;$+=1)S[$]=th(Zp(n,v,$));return{c(){e=_("div"),t=_("div"),t.innerHTML='<i class="ri-error-warning-line"></i>',i=O(),s=_("div"),l=_("p"),l.textContent=`If any of the following changes is part of another collection rule or filter, you'll have to
update it manually!`,r=O(),h&&h.c(),o=O(),a=_("h6"),a.textContent="Changes:",u=O(),f=_("ul"),g&&g.c(),c=O();for(let $=0;$<b.length;$+=1)b[$].c();d=O();for(let $=0;$<S.length;$+=1)S[$].c();p(t,"class","icon"),p(s,"class","content txt-bold"),p(e,"class","alert alert-warning"),p(f,"class","changes-list svelte-1ghly2p")},m($,C){w($,e,C),m(e,t),m(e,i),m(e,s),m(s,l),m(s,r),h&&h.m(s,null),w($,o,C),w($,a,C),w($,u,C),w($,f,C),g&&g.m(f,null),m(f,c);for(let M=0;M<b.length;M+=1)b[M].m(f,null);m(f,d);for(let M=0;M<S.length;M+=1)S[M].m(f,null)},p($,C){if($[3].length?h||(h=Xp(),h.c(),h.m(s,null)):h&&(h.d(1),h=null),$[5]?g?g.p($,C):(g=Qp($),g.c(),g.m(f,c)):g&&(g.d(1),g=null),C&16){y=$[4];let M;for(M=0;M<y.length;M+=1){const T=xp($,y,M);b[M]?b[M].p(T,C):(b[M]=eh(T),b[M].c(),b[M].m(f,d))}for(;M<b.length;M+=1)b[M].d(1);b.length=y.length}if(C&8){v=$[3];let M;for(M=0;M<v.length;M+=1){const T=Zp($,v,M);S[M]?S[M].p(T,C):(S[M]=th(T),S[M].c(),S[M].m(f,null))}for(;M<S.length;M+=1)S[M].d(1);S.length=v.length}},d($){$&&k(e),h&&h.d(),$&&k(o),$&&k(a),$&&k(u),$&&k(f),g&&g.d(),Bn(b,$),Bn(S,$)}}}function GM(n){let e;return{c(){e=_("h4"),e.textContent="Confirm collection changes"},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function ZM(n){let e,t,i,s,l;return{c(){e=_("button"),e.innerHTML='<span class="txt">Cancel</span>',t=O(),i=_("button"),i.innerHTML='<span class="txt">Confirm</span>',e.autofocus=!0,p(e,"type","button"),p(e,"class","btn btn-secondary"),p(i,"type","button"),p(i,"class","btn btn-expanded")},m(r,o){w(r,e,o),w(r,t,o),w(r,i,o),e.focus(),s||(l=[X(e,"click",n[8]),X(i,"click",n[9])],s=!0)},p:re,d(r){r&&k(e),r&&k(t),r&&k(i),s=!1,rt(l)}}}function xM(n){let e,t,i={class:"confirm-changes-panel",popup:!0,$$slots:{footer:[ZM],header:[GM],default:[JM]},$$scope:{ctx:n}};return e=new Di({props:i}),n[10](e),e.$on("hide",n[11]),e.$on("show",n[12]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,[l]){const r={};l&524346&&(r.$$scope={dirty:l,ctx:s}),e.$set(r)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){F(e.$$.fragment,s),t=!1},d(s){n[10](null),z(e,s)}}}function XM(n,e,t){let i,s,l;const r=_n();let o,a;async function u(v){t(1,a=v),await Mi(),!i&&!s.length&&!l.length?c():o==null||o.show()}function f(){o==null||o.hide()}function c(){f(),r("confirm")}const d=()=>f(),h=()=>c();function g(v){he[v?"unshift":"push"](()=>{o=v,t(2,o)})}function y(v){ut.call(this,n,v)}function b(v){ut.call(this,n,v)}return n.$$.update=()=>{n.$$.dirty&2&&t(5,i=(a==null?void 0:a.originalName)!=(a==null?void 0:a.name)),n.$$.dirty&2&&t(4,s=(a==null?void 0:a.schema.filter(v=>v.id&&!v.toDelete&&v.originalName!=v.name))||[]),n.$$.dirty&2&&t(3,l=(a==null?void 0:a.schema.filter(v=>v.id&&v.toDelete))||[])},[f,a,o,l,s,i,c,u,d,h,g,y,b]}class QM extends Fe{constructor(e){super(),Le(this,e,XM,xM,Ae,{show:7,hide:0})}get show(){return this.$$.ctx[7]}get hide(){return this.$$.ctx[0]}}function nh(n){let e,t,i,s;function l(o){n[26](o)}let r={};return n[2]!==void 0&&(r.collection=n[2]),t=new KM({props:r}),he.push(()=>Re(t,"collection",l)),{c(){e=_("div"),B(t.$$.fragment),p(e,"class","tab-item active")},m(o,a){w(o,e,a),V(t,e,null),s=!0},p(o,a){const u={};!i&&a[0]&4&&(i=!0,u.collection=o[2],je(()=>i=!1)),t.$set(u)},i(o){s||(A(t.$$.fragment,o),s=!0)},o(o){F(t.$$.fragment,o),s=!1},d(o){o&&k(e),z(t)}}}function eO(n){let e,t,i,s,l,r;function o(f){n[25](f)}let a={};n[2]!==void 0&&(a.collection=n[2]),i=new IM({props:a}),he.push(()=>Re(i,"collection",o));let u=n[9]===Bl&&nh(n);return{c(){e=_("div"),t=_("div"),B(i.$$.fragment),l=O(),u&&u.c(),p(t,"class","tab-item"),Q(t,"active",n[9]===hs),p(e,"class","tabs-content svelte-b10vi")},m(f,c){w(f,e,c),m(e,t),V(i,t,null),m(e,l),u&&u.m(e,null),r=!0},p(f,c){const d={};!s&&c[0]&4&&(s=!0,d.collection=f[2],je(()=>s=!1)),i.$set(d),c[0]&512&&Q(t,"active",f[9]===hs),f[9]===Bl?u?(u.p(f,c),c[0]&512&&A(u,1)):(u=nh(f),u.c(),A(u,1),u.m(e,null)):u&&(Oe(),F(u,1,1,()=>{u=null}),Te())},i(f){r||(A(i.$$.fragment,f),A(u),r=!0)},o(f){F(i.$$.fragment,f),F(u),r=!1},d(f){f&&k(e),z(i),u&&u.d()}}}function ih(n){let e,t,i,s,l,r,o;return r=new ys({props:{class:"dropdown dropdown-right m-t-5",$$slots:{default:[tO]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=O(),i=_("button"),s=_("i"),l=O(),B(r.$$.fragment),p(e,"class","flex-fill"),p(s,"class","ri-more-line"),p(i,"type","button"),p(i,"class","btn btn-sm btn-circle btn-secondary flex-gap-0")},m(a,u){w(a,e,u),w(a,t,u),w(a,i,u),m(i,s),m(i,l),V(r,i,null),o=!0},p(a,u){const f={};u[1]&256&&(f.$$scope={dirty:u,ctx:a}),r.$set(f)},i(a){o||(A(r.$$.fragment,a),o=!0)},o(a){F(r.$$.fragment,a),o=!1},d(a){a&&k(e),a&&k(t),a&&k(i),z(r)}}}function tO(n){let e,t,i;return{c(){e=_("button"),e.innerHTML=`<i class="ri-delete-bin-7-line"></i>
<span class="txt">Delete</span>`,p(e,"type","button"),p(e,"class","dropdown-item closable")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[20]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function sh(n){let e;return{c(){e=_("div"),e.textContent="System collection",p(e,"class","help-block")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function nO(n){let e,t,i,s,l,r,o,a,u,f,c,d,h=n[2].system&&sh();return{c(){e=_("label"),t=H("Name"),s=O(),l=_("input"),u=O(),h&&h.c(),f=lt(),p(e,"for",i=n[38]),p(l,"type","text"),p(l,"id",r=n[38]),l.required=!0,l.disabled=n[11],p(l,"spellcheck","false"),l.autofocus=o=n[2].isNew,p(l,"placeholder",'eg. "posts"'),l.value=a=n[2].name},m(g,y){w(g,e,y),m(e,t),w(g,s,y),w(g,l,y),w(g,u,y),h&&h.m(g,y),w(g,f,y),n[2].isNew&&l.focus(),c||(d=X(l,"input",n[21]),c=!0)},p(g,y){y[1]&128&&i!==(i=g[38])&&p(e,"for",i),y[1]&128&&r!==(r=g[38])&&p(l,"id",r),y[0]&2048&&(l.disabled=g[11]),y[0]&4&&o!==(o=g[2].isNew)&&(l.autofocus=o),y[0]&4&&a!==(a=g[2].name)&&l.value!==a&&(l.value=a),g[2].system?h||(h=sh(),h.c(),h.m(f.parentNode,f)):h&&(h.d(1),h=null)},d(g){g&&k(e),g&&k(s),g&&k(l),g&&k(u),h&&h.d(g),g&&k(f),c=!1,d()}}}function lh(n){let e,t,i,s,l,r;return{c(){e=_("i"),p(e,"class","ri-error-warning-fill txt-danger")},m(o,a){w(o,e,a),s=!0,l||(r=Xe(t=St.call(null,e,n[12])),l=!0)},p(o,a){t&&Jn(t.update)&&a[0]&4096&&t.update.call(null,o[12])},i(o){s||(o&&Dt(()=>{i||(i=ft(e,Wn,{duration:150,start:.7},!0)),i.run(1)}),s=!0)},o(o){o&&(i||(i=ft(e,Wn,{duration:150,start:.7},!1)),i.run(0)),s=!1},d(o){o&&k(e),o&&i&&i.end(),l=!1,r()}}}function rh(n){let e,t,i,s,l;return{c(){e=_("i"),p(e,"class","ri-error-warning-fill txt-danger")},m(r,o){w(r,e,o),i=!0,s||(l=Xe(St.call(null,e,"Has errors")),s=!0)},i(r){i||(r&&Dt(()=>{t||(t=ft(e,Wn,{duration:150,start:.7},!0)),t.run(1)}),i=!0)},o(r){r&&(t||(t=ft(e,Wn,{duration:150,start:.7},!1)),t.run(0)),i=!1},d(r){r&&k(e),r&&t&&t.end(),s=!1,l()}}}function iO(n){var N,R,J,W,q,G;let e,t=n[2].isNew?"New collection":"Edit collection",i,s,l,r,o,a,u,f,c,d,h,g,y=!U.isEmpty((N=n[4])==null?void 0:N.schema),b,v,S,$,C=!U.isEmpty((R=n[4])==null?void 0:R.listRule)||!U.isEmpty((J=n[4])==null?void 0:J.viewRule)||!U.isEmpty((W=n[4])==null?void 0:W.createRule)||!U.isEmpty((q=n[4])==null?void 0:q.updateRule)||!U.isEmpty((G=n[4])==null?void 0:G.deleteRule),M,T,E,D=!n[2].isNew&&!n[2].system&&ih(n);o=new Ne({props:{class:"form-field required m-b-0 "+(n[11]?"disabled":""),name:"name",$$slots:{default:[nO,({uniqueId:K})=>({38:K}),({uniqueId:K})=>[0,K?128:0]]},$$scope:{ctx:n}}});let P=y&&lh(n),L=C&&rh();return{c(){e=_("h4"),i=H(t),s=O(),D&&D.c(),l=O(),r=_("form"),B(o.$$.fragment),a=O(),u=_("input"),f=O(),c=_("div"),d=_("button"),h=_("span"),h.textContent="Fields",g=O(),P&&P.c(),b=O(),v=_("button"),S=_("span"),S.textContent="API Rules",$=O(),L&&L.c(),p(u,"type","submit"),p(u,"class","hidden"),p(u,"tabindex","-1"),p(r,"class","block"),p(h,"class","txt"),p(d,"type","button"),p(d,"class","tab-item"),Q(d,"active",n[9]===hs),p(S,"class","txt"),p(v,"type","button"),p(v,"class","tab-item"),Q(v,"active",n[9]===Bl),p(c,"class","tabs-header stretched")},m(K,Y){w(K,e,Y),m(e,i),w(K,s,Y),D&&D.m(K,Y),w(K,l,Y),w(K,r,Y),V(o,r,null),m(r,a),m(r,u),w(K,f,Y),w(K,c,Y),m(c,d),m(d,h),m(d,g),P&&P.m(d,null),m(c,b),m(c,v),m(v,S),m(v,$),L&&L.m(v,null),M=!0,T||(E=[X(r,"submit",Kt(n[22])),X(d,"click",n[23]),X(v,"click",n[24])],T=!0)},p(K,Y){var fe,ye,se,Z,De,te;(!M||Y[0]&4)&&t!==(t=K[2].isNew?"New collection":"Edit collection")&&_e(i,t),!K[2].isNew&&!K[2].system?D?(D.p(K,Y),Y[0]&4&&A(D,1)):(D=ih(K),D.c(),A(D,1),D.m(l.parentNode,l)):D&&(Oe(),F(D,1,1,()=>{D=null}),Te());const ne={};Y[0]&2048&&(ne.class="form-field required m-b-0 "+(K[11]?"disabled":"")),Y[0]&2052|Y[1]&384&&(ne.$$scope={dirty:Y,ctx:K}),o.$set(ne),Y[0]&16&&(y=!U.isEmpty((fe=K[4])==null?void 0:fe.schema)),y?P?(P.p(K,Y),Y[0]&16&&A(P,1)):(P=lh(K),P.c(),A(P,1),P.m(d,null)):P&&(Oe(),F(P,1,1,()=>{P=null}),Te()),Y[0]&512&&Q(d,"active",K[9]===hs),Y[0]&16&&(C=!U.isEmpty((ye=K[4])==null?void 0:ye.listRule)||!U.isEmpty((se=K[4])==null?void 0:se.viewRule)||!U.isEmpty((Z=K[4])==null?void 0:Z.createRule)||!U.isEmpty((De=K[4])==null?void 0:De.updateRule)||!U.isEmpty((te=K[4])==null?void 0:te.deleteRule)),C?L?Y[0]&16&&A(L,1):(L=rh(),L.c(),A(L,1),L.m(v,null)):L&&(Oe(),F(L,1,1,()=>{L=null}),Te()),Y[0]&512&&Q(v,"active",K[9]===Bl)},i(K){M||(A(D),A(o.$$.fragment,K),A(P),A(L),M=!0)},o(K){F(D),F(o.$$.fragment,K),F(P),F(L),M=!1},d(K){K&&k(e),K&&k(s),D&&D.d(K),K&&k(l),K&&k(r),z(o),K&&k(f),K&&k(c),P&&P.d(),L&&L.d(),T=!1,rt(E)}}}function sO(n){let e,t,i,s,l,r=n[2].isNew?"Create":"Save changes",o,a,u,f;return{c(){e=_("button"),t=_("span"),t.textContent="Cancel",i=O(),s=_("button"),l=_("span"),o=H(r),p(t,"class","txt"),p(e,"type","button"),p(e,"class","btn btn-secondary"),e.disabled=n[7],p(l,"class","txt"),p(s,"type","button"),p(s,"class","btn btn-expanded"),s.disabled=a=!n[10]||n[7],Q(s,"btn-loading",n[7])},m(c,d){w(c,e,d),m(e,t),w(c,i,d),w(c,s,d),m(s,l),m(l,o),u||(f=[X(e,"click",n[18]),X(s,"click",n[19])],uLine truncated
<span class="txt">New collection</span>`,v=O(),B(S.$$.fragment),p(l,"type","button"),p(l,"class","btn btn-xs btn-secondary btn-circle btn-clear"),Q(l,"hidden",!n[4]),p(s,"class","form-field-addon"),p(o,"type","text"),p(o,"placeholder","Search collections..."),p(i,"class","form-field search"),Q(i,"active",n[4]),p(t,"class","sidebar-header"),p(u,"class","m-t-5 m-b-xs"),p(c,"class","sidebar-content"),p(b,"type","button"),p(b,"class","btn btn-block btn-outline"),p(y,"class","sidebar-footer"),p(e,"class","page-sidebar collection-sidebar")},m(L,N){w(L,e,N),m(e,t),m(t,i),m(i,s),m(s,l),m(i,r),m(i,o),$e(o,n[0]),m(e,a),m(e,u),m(e,f),m(e,c);for(let R=0;R<d.length;R+=1)d[R].m(c,null);D&&D.m(c,null),m(e,g),m(e,y),m(y,b),w(L,v,N),V(S,L,N),$=!0,C||(M=[X(l,"click",n[8]),X(o,"input",n[9]),X(b,"click",n[11])],C=!0)},p(L,[N]){N&16&&Q(l,"hidden",!L[4]),N&1&&o.value!==L[0]&&$e(o,L[0]),N&16&&Q(i,"active",L[4]),N&106&&(T=L[3],d=ot(d,N,E,1,L,T,h,c,an,fh,null,oh),!T.length&&D?D.p(L,N):T.length?D&&(D.d(1),D=null):(D=ah(L),D.c(),D.m(c,null)));const R={};S.$set(R)},i(L){$||(A(S.$$.fragment,L),$=!0)},o(L){F(S.$$.fragment,L),$=!1},d(L){L&&k(e);for(let N=0;N<d.length;N+=1)d[N].d();D&&D.d(),L&&k(v),n[12](null),z(S,L),C=!1,rt(M)}}}function fO(n,e,t){let i,s,l,r,o;hn(n,fi,b=>t(5,r=b)),hn(n,Js,b=>t(7,o=b));let a,u="";function f(b){qg(fi,r=b,r)}const c=()=>t(0,u="");function d(){u=this.value,t(0,u)}const h=b=>f(b),g=()=>a==null?void 0:a.show();function y(b){he[b?"unshift":"push"](()=>{a=b,t(2,a)})}return n.$$.update=()=>{n.$$.dirty&1&&t(1,i=u.replace(/\s+/g,"").toLowerCase()),n.$$.dirty&1&&t(4,s=u!==""),n.$$.dirty&131&&t(3,l=o.filter(b=>b.name!="profiles"&&(b.id==u||b.name.replace(/\s+/g,"").toLowerCase().includes(i))))},[u,i,a,l,s,r,f,o,c,d,h,g,y]}class cO extends Fe{constructor(e){super(),Le(this,e,fO,uO,Ae,{})}}function dO(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S,$,C,M,T,E,D,P,L,N,R,J,W,q,G,K,Y,ne,fe,ye,se,Z,De,te,be,ue,ie,ve,He,Ie,qe,oe,le,ke,Ve;return{c(){e=_("p"),e.innerHTML=`The syntax basically follows the format
<code><span class="txt-success">OPERAND</span>
<span class="txt-danger">OPERATOR</span>
<span class="txt-success">OPERAND</span></code>, where:`,t=O(),i=_("ul"),s=_("li"),s.innerHTML=`<code class="txt-success">OPERAND</code> - could be any of the above field literal, string (single or double
quoted), number, null, true, false`,l=O(),r=_("li"),o=_("code"),o.textContent="OPERATOR",a=H(` - is one of:
`),u=_("br"),f=O(),c=_("ul"),d=_("li"),h=_("code"),h.textContent="=",g=O(),y=_("span"),y.textContent="Equal",b=O(),v=_("li"),S=_("code"),S.textContent="!=",$=O(),C=_("span"),C.textContent="NOT equal",M=O(),T=_("li"),E=_("code"),E.textContent=">",D=O(),P=_("span"),P.textContent="Greater than",L=O(),N=_("li"),R=_("code"),R.textContent=">=",J=O(),W=_("span"),W.textContent="Greater than or equal",q=O(),G=_("li"),K=_("code"),K.textContent="<",Y=O(),ne=_("span"),ne.textContent="Less than or equal",fe=O(),ye=_("li"),se=_("code"),se.textContent="<=",Z=O(),De=_("span"),De.textContent="Less than or equal",te=O(),be=_("li"),ue=_("code"),ue.textContent="~",ie=O(),ve=_("span"),ve.textContent=`Like/Contains (if not specified auto wraps the right string OPERAND in a "%" for wildcard
match)`,He=O(),Ie=_("li"),qe=_("code"),qe.textContent="!~",oe=O(),le=_("span"),le.textContent=`NOT Like/Contains (if not specified auto wraps the right string OPERAND in a "%" for
wildcard match)`,ke=O(),Ve=_("p"),Ve.innerHTML=`To group and combine several expressions you could use brackets
<code>(...)</code>, <code>&amp;&amp;</code> (AND) and <code>||</code> (OR) tokens.`,p(o,"class","txt-danger"),p(h,"class","filter-op svelte-1w7s5nw"),p(y,"class","txt-hint"),p(S,"class","filter-op svelte-1w7s5nw"),p(C,"class","txt-hint"),p(E,"class","filter-op svelte-1w7s5nw"),p(P,"class","txt-hint"),p(R,"class","filter-op svelte-1w7s5nw"),p(W,"class","txt-hint"),p(K,"class","filter-op svelte-1w7s5nw"),p(ne,"class","txt-hint"),p(se,"class","filter-op svelte-1w7s5nw"),p(De,"class","txt-hint"),p(ue,"class","filter-op svelte-1w7s5nw"),p(ve,"class","txt-hint"),p(qe,"class","filter-op svelte-1w7s5nw"),p(le,"class","txt-hint")},m(ze,Ze){w(ze,e,Ze),w(ze,t,Ze),w(ze,i,Ze),m(i,s),m(i,l),m(i,r),m(r,o),m(r,a),m(r,u),m(r,f),m(r,c),m(c,d),m(d,h),m(d,g),m(d,y),m(c,b),m(c,v),m(v,S),m(v,$),m(v,C),m(c,M),m(c,T),m(T,E),m(T,D),m(T,P),m(c,L),m(c,N),m(N,R),m(N,J),m(N,W),m(c,q),m(c,G),m(G,K),m(G,Y),m(G,ne),m(c,fe),m(c,ye),m(ye,se),m(ye,Z),m(ye,De),m(c,te),m(c,be),m(be,ue),m(be,ie),m(be,ve),m(c,He),m(c,Ie),m(Ie,qe),m(Ie,oe),m(Ie,le),w(ze,ke,Ze),w(ze,Ve,Ze)},p:re,i:re,o:re,d(ze){ze&&k(e),ze&&k(t),ze&&k(i),ze&&k(ke),ze&&k(Ve)}}}class pO extends Fe{constructor(e){super(),Le(this,e,null,dO,Ae,{})}}function ch(n,e,t){const i=n.slice();return i[8]=e[t],i}function dh(n,e,t){const i=n.slice();return i[8]=e[t],i}function ph(n,e,t){const i=n.slice();return i[13]=e[t],i}function hh(n,e,t){const i=n.slice();return i[13]=e[t],i}function mh(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",p(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function gh(n,e){let t,i=e[13].lang+"",s,l,r,o;function a(){return e[6](e[13])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[3]===e[13].lang),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&16&&i!==(i=e[13].lang+"")&&_e(s,i),f&24&&Q(t,"active",e[3]===e[13].lang)},d(u){u&&k(t),r=!1,o()}}}function _h(n,e){let t,i,s,l;return i=new en({props:{content:e[13].code}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[3]===e[13].lang),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r;const a={};o&16&&(a.content=e[13].code),i.$set(a),o&24&&Q(t,"active",e[3]===e[13].lang)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function bh(n,e){let t,i=e[8].code+"",s,l,r,o;function a(){return e[7](e[8])}return{key:n,first:null,c(){t=_("div"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[8].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&36&&Q(t,"active",e[2]===e[8].code)},d(u){u&&k(t),r=!1,o()}}}function yh(n,e){let t,i,s,l;return i=new en({props:{content:e[8].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[8].code),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r,o&36&&Q(t,"active",e[2]===e[8].code)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function hO(n){let e,t,i,s,l,r,o,a=n[0].name+"",u,f,c,d,h,g,y,b,v=n[0].name+"",S,$,C,M,T,E,D,P=[],L=new Map,N,R,J=[],W=new Map,q,G,K,Y,ne,fe,ye,se,Z,De,te,be,ue,ie,ve,He,Ie,qe,oe,le,ke,Ve,ze,Ze,ge,Ee,x,ae,Be,vt,it,gt,at,yt,zt,Mt,Ot,me,Ce,Ke,st,fn,ce,Se,xe,Gt,qt,ii,pe,I,j,ee,de,Pe,We,tt,Je,nt=[],Ge=new Map,et,_t,Ft=[],tn=new Map,In,Bt=n[1]&&mh(),ws=n[4];const Ss=Me=>Me[13].lang;for(let Me=0;Me<ws.length;Me+=1){let Ye=hh(n,ws,Me),At=Ss(Ye);L.set(At,P[Me]=gh(At,Ye))}let Ji=n[4];const ir=Me=>Me[13].lang;for(let Me=0;Me<Ji.length;Me+=1){let Ye=ph(n,Ji,Me),At=ir(Ye);W.set(At,J[Me]=_h(At,Ye))}ge=new en({props:{content:`
// DESC by created and ASC by id
?sort=-created,id
`}}),yt=new en({props:{content:`
?filter=(id='abc' && created>'2022-01-01')
`}}),Mt=new pO({}),xe=new en({props:{content:`
?expand=rel1,rel2.subrel21.subrel22
`}});let $s=n[5];const sr=Me=>Me[8].code;for(let Me=0;Me<$s.length;Me+=1){let Ye=dh(n,$s,Me),At=sr(Ye);Ge.set(At,nt[Me]=bh(At,Ye))}let Gi=n[5];const lr=Me=>Me[8].code;for(let Me=0;Me<Gi.length;Me+=1){let Ye=ch(n,Gi,Me),At=lr(Ye);tn.set(At,Ft[Me]=yh(At,Ye))}return{c(){e=_("div"),t=_("strong"),t.textContent="GET",i=O(),s=_("div"),l=_("p"),r=H("/api/collections/"),o=_("strong"),u=H(a),f=H("/records"),c=O(),Bt&&Bt.c(),d=O(),h=_("div"),g=_("p"),y=H("Fetch a paginated "),b=_("strong"),S=H(v),$=H(" records list."),C=O(),M=_("div"),M.textContent="Client SDKs example",T=O(),E=_("div"),D=_("div");for(let Me=0;Me<P.length;Me+=1)P[Me].c();N=O(),R=_("div");for(let Me=0;Me<J.length;Me+=1)J[Me].c();q=O(),G=_("div"),G.textContent="Query parameters",K=O(),Y=_("table"),ne=_("thead"),ne.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr>`,fe=O(),ye=_("tbody"),se=_("tr"),se.innerHTML=`<td>page</td>
<td><span class="label">Number</span></td>
<td>The page (aka. offset) of the paginated list (default to 1).</td>`,Z=O(),De=_("tr"),De.innerHTML=`<td>perPage</td>
<td><span class="label">Number</span></td>
<td>Specify the max returned records per page (default to 30).</td>`,te=O(),be=_("tr"),ue=_("td"),ue.textContent="sort",ie=O(),ve=_("td"),ve.innerHTML='<span class="label">String</span>',He=O(),Ie=_("td"),qe=H("Specify the records order attribute(s). "),oe=_("br"),le=H(`
Add `),ke=_("code"),ke.textContent="-",Ve=H(" / "),ze=_("code"),ze.textContent="+",Ze=H(` (default) in front of the attribute for DESC / ASC order.
Ex.:
`),B(ge.$$.fragment),Ee=O(),x=_("tr"),ae=_("td"),ae.textContent="filter",Be=O(),vt=_("td"),vt.innerHTML='<span class="label">String</span>',it=O(),gt=_("td"),at=H(`Filter the returned records. Ex.:
`),B(yt.$$.fragment),zt=O(),B(Mt.$$.fragment),Ot=O(),me=_("tr"),Ce=_("td"),Ce.textContent="expand",Ke=O(),st=_("td"),st.innerHTML='<span class="label">String</span>',fn=O(),ce=_("td"),Se=H(`Auto expand nested record relations. Ex.:
`),B(xe.$$.fragment),Gt=H(`
Supports up to 6-levels depth nested relations expansion. `),qt=_("br"),ii=H(`
The expanded relations will be appended to each individual record under the
`),pe=_("code"),pe.textContent="@expand",I=H(" property (eg. "),j=_("code"),j.textContent='"@expand": {"rel1": {...}, ...}',ee=H(")."),de=O(),Pe=_("div"),Pe.textContent="Responses",We=O(),tt=_("div"),Je=_("div");for(let Me=0;Me<nt.length;Me+=1)nt[Me].c();et=O(),_t=_("div");for(let Me=0;Me<Ft.length;Me+=1)Ft[Me].c();p(t,"class","label label-primary"),p(s,"class","content"),p(e,"class","alert alert-info"),p(h,"class","content m-b-base"),p(M,"class","section-title"),p(D,"class","tabs-header compact left"),p(R,"class","tabs-content"),p(E,"class","tabs m-b-lg"),p(G,"class","section-title"),p(Y,"class","table-compact table-border m-b-lg"),p(Pe,"class","section-title"),p(Je,"class","tabs-header compact left"),p(_t,"class","tabs-content"),p(tt,"class","tabs")},m(Me,Ye){w(Me,e,Ye),m(e,t),m(e,i),m(e,s),m(s,l),m(l,r),m(l,o),m(o,u),m(l,f),m(e,c),Bt&&Bt.m(e,null),w(Me,d,Ye),w(Me,h,Ye),m(h,g),m(g,y),m(g,b),m(b,S),m(g,$),w(Me,C,Ye),w(Me,M,Ye),w(Me,T,Ye),w(Me,E,Ye),m(E,D);for(let At=0;At<P.length;At+=1)P[At].m(D,null);m(E,N),m(E,R);for(let At=0;At<J.length;At+=1)J[At].m(R,null);w(Me,q,Ye),w(Me,G,Ye),w(Me,K,Ye),w(Me,Y,Ye),m(Y,ne),m(Y,fe),m(Y,ye),m(ye,se),m(ye,Z),m(ye,De),m(ye,te),m(ye,be),m(be,ue),m(be,ie),m(be,ve),m(be,He),m(be,Ie),m(Ie,qe),m(Ie,oe),m(Ie,le),m(Ie,ke),m(Ie,Ve),m(Ie,ze),m(Ie,Ze),V(ge,Ie,null),m(ye,Ee),m(ye,x),m(x,ae),m(x,Be),m(x,vt),m(x,it),m(x,gt),m(gt,at),V(yt,gt,null),m(gt,zt),V(Mt,gt,null),m(ye,Ot),m(ye,me),m(me,Ce),m(me,Ke),m(me,st),m(me,fn),m(me,ce),m(ce,Se),V(xe,ce,null),m(ce,Gt),m(ce,qt),m(ce,ii),m(ce,pe),m(ce,I),m(ce,j),m(ce,ee),w(Me,de,Ye),w(Me,Pe,Ye),w(Me,We,Ye),w(Me,tt,Ye),m(tt,Je);for(let At=0;At<nt.length;At+=1)nt[At].m(Je,null);m(tt,et),m(tt,_t);for(let At=0;At<Ft.length;At+=1)Ft[At].m(_t,null);In=!0},p(Me,[Ye]){(!In||Ye&1)&&a!==(a=Me[0].name+"")&&_e(u,a),Me[1]?Bt||(Bt=mh(),Bt.c(),Bt.m(e,null)):Bt&&(Bt.d(1),Bt=null),(!In||Ye&1)&&v!==(v=Me[0].name+"")&&_e(S,v),Ye&24&&(ws=Me[4],P=ot(P,Ye,Ss,1,Me,ws,L,D,an,gh,null,hh)),Ye&24&&(Ji=Me[4],Oe(),J=ot(J,Ye,ir,1,Me,Ji,W,R,Lt,_h,null,ph),Te()),Ye&36&&($s=Me[5],nt=ot(nt,Ye,sr,1,Me,$s,Ge,Je,an,bh,null,dh)),Ye&36&&(Gi=Me[5],Oe(),Ft=ot(Ft,Ye,lr,1,Me,Gi,tn,_t,Lt,yh,null,ch),Te())},i(Me){if(!In){for(let Ye=0;Ye<Ji.length;Ye+=1)A(J[Ye]);A(ge.$$.fragment,Me),A(yt.$$.fragment,Me),A(Mt.$$.fragment,Me),A(xe.$$.fragment,Me);for(let Ye=0;Ye<Gi.length;Ye+=1)A(Ft[Ye]);In=!0}},o(Me){for(let Ye=0;Ye<J.length;Ye+=1)F(J[Ye]);F(ge.$$.fragment,Me),F(yt.$$.fragment,Me),F(Mt.$$.fragment,Me),F(xe.$$.fragment,Me);for(let Ye=0;Ye<Ft.length;Ye+=1)F(Ft[Ye]);In=!1},d(Me){Me&&k(e),Bt&&Bt.d(),Me&&k(d),Me&&k(h),Me&&k(C),Me&&k(M),Me&&k(T),Me&&k(E);for(let Ye=0;Ye<P.length;Ye+=1)P[Ye].d();for(let Ye=0;Ye<J.length;Ye+=1)J[Ye].d();Me&&k(q),Me&&k(G),Me&&k(K),Me&&k(Y),z(ge),z(yt),z(Mt),z(xe),Me&&k(de),Me&&k(Pe),Me&&k(We),Me&&k(tt);for(let Ye=0;Ye<nt.length;Ye+=1)nt[Ye].d();for(let Ye=0;Ye<Ft.length;Ye+=1)Ft[Ye].d()}}}function mO(n,e,t){let i,{collection:s=new Ln}=e,l=200,r="JavaScript",o=[],a=[];const u=c=>t(3,r=c.lang),f=c=>t(2,l=c.code);return n.$$set=c=>{"collection"in c&&t(0,s=c.collection)},n.$$.update=()=>{n.$$.dirty&1&&t(1,i=(s==null?void 0:s.listRule)===null),n.$$.dirty&3&&s!=null&&s.id&&(o.push({code:200,body:JSON.stringify({page:1,perPage:30,totalItems:2,items:[U.dummyCollectionRecord(s),U.dummyCollectionRecord(s)]},null,2)}),o.push({code:400,body:`
{
"code": 400,
"message": "Something went wrong while processing your request. Invalid filter.",
"data": {}
}
`}),i&&o.push({code:403,body:`
{
"code": 403,
"message": "Only admins can access this action.",
"data": {}
}
`}),o.push({code:404,body:`
{
"code": 404,
"message": "The requested resource wasn't found.",
"data": {}
}
`})),n.$$.dirty&1&&t(4,a=[{lang:"JavaScript",code:`
import PocketBase from 'pocketbase';
const client = new PocketBase("${we.baseUrl}");
client.Records.getList("${s==null?void 0:s.name}", { page: 2 })
.then(function (list) {
// success...
}).catch(function (error) {
// error...
});
// alternatively you can also fetch all records at once via getFullList:
client.Records.getFullList("${s==null?void 0:s.name}", 200 /* batch size */);
.then(function (records) {
// success...
}).catch(function (error) {
// error...
});
`}])},[s,i,l,r,a,o,u,f]}class gO extends Fe{constructor(e){super(),Le(this,e,mO,hO,Ae,{collection:0})}}function vh(n,e,t){const i=n.slice();return i[8]=e[t],i}function kh(n,e,t){const i=n.slice();return i[8]=e[t],i}function wh(n,e,t){const i=n.slice();return i[13]=e[t],i}function Sh(n,e,t){const i=n.slice();return i[13]=e[t],i}function $h(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",p(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Ch(n,e){let t,i=e[13].lang+"",s,l,r,o;function a(){return e[6](e[13])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[3]===e[13].lang),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&16&&i!==(i=e[13].lang+"")&&_e(s,i),f&24&&Q(t,"active",e[3]===e[13].lang)},d(u){u&&k(t),r=!1,o()}}}function Mh(n,e){let t,i,s,l;return i=new en({props:{content:e[13].code}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[3]===e[13].lang),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r;const a={};o&16&&(a.content=e[13].code),i.$set(a),o&24&&Q(t,"active",e[3]===e[13].lang)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function Oh(n,e){let t,i=e[8].code+"",s,l,r,o;function a(){return e[7](e[8])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[8].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&36&&Q(t,"active",e[2]===e[8].code)},d(u){u&&k(t),r=!1,o()}}}function Th(n,e){let t,i,s,l;return i=new en({props:{content:e[8].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[8].code),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r,o&36&&Q(t,"active",e[2]===e[8].code)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function _O(n){let e,t,i,s,l,r,o,a=n[0].name+"",u,f,c,d,h,g,y,b,v,S=n[0].name+"",$,C,M,T,E,D,P,L=[],N=new Map,R,J,W=[],q=new Map,G,K,Y,ne,fe,ye,se,Z,De,te,be,ue,ie,ve,He,Ie,qe,oe,le,ke,Ve,ze,Ze,ge,Ee,x,ae,Be,vt,it,gt,at=[],yt=new Map,zt,Mt,Ot=[],me=new Map,Ce,Ke=n[1]&&$h(),st=n[4];const fn=pe=>pe[13].lang;for(let pe=0;pe<st.length;pe+=1){let I=Sh(n,st,pe),j=fn(I);N.set(j,L[pe]=Ch(j,I))}let ce=n[4];const Se=pe=>pe[13].lang;for(let pe=0;pe<ce.length;pe+=1){let I=wh(n,ce,pe),j=Se(I);q.set(j,W[pe]=Mh(j,I))}le=new en({props:{content:`
?expand=rel1,rel2.subrel21.subrel22
`}});let xe=n[5];const Gt=pe=>pe[8].code;for(let pe=0;pe<xe.length;pe+=1){let I=kh(n,xe,pe),j=Gt(I);yt.set(j,at[pe]=Oh(j,I))}let qt=n[5];const ii=pe=>pe[8].code;for(let pe=0;pe<qt.length;pe+=1){let I=vh(n,qt,pe),j=ii(I);me.set(j,Ot[pe]=Th(j,I))}return{c(){e=_("div"),t=_("strong"),t.textContent="GET",i=O(),s=_("div"),l=_("p"),r=H("/api/collections/"),o=_("strong"),u=H(a),f=H("/records/"),c=_("strong"),c.textContent=":id",d=O(),Ke&&Ke.c(),h=O(),g=_("div"),y=_("p"),b=H("Fetch a single "),v=_("strong"),$=H(S),C=H(" record."),M=O(),T=_("div"),T.textContent="Client SDKs example",E=O(),D=_("div"),P=_("div");for(let pe=0;pe<L.length;pe+=1)L[pe].c();R=O(),J=_("div");for(let pe=0;pe<W.length;pe+=1)W[pe].c();G=O(),K=_("div"),K.textContent="Path Parameters",Y=O(),ne=_("table"),ne.innerHTML=`<thead><tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr></thead>
<tbody><tr><td>id</td>
<td><span class="label">String</span></td>
<td>ID of the record to view.</td></tr></tbody>`,fe=O(),ye=_("div"),ye.textContent="Query parameters",se=O(),Z=_("table"),De=_("thead"),De.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr>`,te=O(),be=_("tbody"),ue=_("tr"),ie=_("td"),ie.textContent="expand",ve=O(),He=_("td"),He.innerHTML='<span class="label">String</span>',Ie=O(),qe=_("td"),oe=H(`Auto expand nested record relations. Ex.:
`),B(le.$$.fragment),ke=H(`
Supports up to 6-levels depth nested relations expansion. `),Ve=_("br"),ze=H(`
The expanded relations will be appended to the record under the
`),Ze=_("code"),Ze.textContent="@expand",ge=H(" property (eg. "),Ee=_("code"),Ee.textContent='"@expand": {"rel1": {...}, ...}',x=H(")."),ae=O(),Be=_("div"),Be.textContent="Responses",vt=O(),it=_("div"),gt=_("div");for(let pe=0;pe<at.length;pe+=1)at[pe].c();zt=O(),Mt=_("div");for(let pe=0;pe<Ot.length;pe+=1)Ot[pe].c();p(t,"class","label label-primary"),p(s,"class","content"),p(e,"class","alert alert-info"),p(g,"class","content m-b-base"),p(T,"class","section-title"),p(P,"class","tabs-header compact left"),p(J,"class","tabs-content"),p(D,"class","tabs m-b-lg"),p(K,"class","section-title"),p(ne,"class","table-compact table-border m-b-lg"),p(ye,"class","section-title"),p(Z,"class","table-compact table-border m-b-lg"),p(Be,"class","section-title"),p(gt,"class","tabs-header compact left"),p(Mt,"class","tabs-content"),p(it,"class","tabs")},m(pe,I){w(pe,e,I),m(e,t),m(e,i),m(e,s),m(s,l),m(l,r),m(l,o),m(o,u),m(l,f),m(l,c),m(e,d),Ke&&Ke.m(e,null),w(pe,h,I),w(pe,g,I),m(g,y),m(y,b),m(y,v),m(v,$),m(y,C),w(pe,M,I),w(pe,T,I),w(pe,E,I),w(pe,D,I),m(D,P);for(let j=0;j<L.length;j+=1)L[j].m(P,null);m(D,R),m(D,J);for(let j=0;j<W.length;j+=1)W[j].m(J,null);w(pe,G,I),w(pe,K,I),w(pe,Y,I),w(pe,ne,I),w(pe,fe,I),w(pe,ye,I),w(pe,se,I),w(pe,Z,I),m(Z,De),m(Z,te),m(Z,be),m(be,ue),m(ue,ie),m(ue,ve),m(ue,He),m(ue,Ie),m(ue,qe),m(qe,oe),V(le,qe,null),m(qe,ke),m(qe,Ve),m(qe,ze),m(qe,Ze),m(qe,ge),m(qe,Ee),m(qe,x),w(pe,ae,I),w(pe,Be,I),w(pe,vt,I),w(pe,it,I),m(it,gt);for(let j=0;j<at.length;j+=1)at[j].m(gt,null);m(it,zt),m(it,Mt);for(let j=0;j<Ot.length;j+=1)Ot[j].m(Mt,null);Ce=!0},p(pe,[I]){(!Ce||I&1)&&a!==(a=pe[0].name+"")&&_e(u,a),pe[1]?Ke||(Ke=$h(),Ke.c(),Ke.m(e,null)):Ke&&(Ke.d(1),Ke=null),(!Ce||I&1)&&S!==(S=pe[0].name+"")&&_e($,S),I&24&&(st=pe[4],L=ot(L,I,fn,1,pe,st,N,P,an,Ch,null,Sh)),I&24&&(ce=pe[4],Oe(),W=ot(W,I,Se,1,pe,ce,q,J,Lt,Mh,null,wh),Te()),I&36&&(xe=pe[5],at=ot(at,I,Gt,1,pe,xe,yt,gt,an,Oh,null,kh)),I&36&&(qt=pe[5],Oe(),Ot=ot(Ot,I,ii,1,pe,qt,me,Mt,Lt,Th,null,vh),Te())},i(pe){if(!Ce){for(let I=0;I<ce.length;I+=1)A(W[I]);A(le.$$.fragment,pe);for(let I=0;I<qt.length;I+=1)A(Ot[I]);Ce=!0}},o(pe){for(let I=0;I<W.length;I+=1)F(W[I]);F(le.$$.fragment,pe);for(let I=0;I<Ot.length;I+=1)F(Ot[I]);Ce=!1},d(pe){pe&&k(e),Ke&&Ke.d(),pe&&k(h),pe&&k(g),pe&&k(M),pe&&k(T),pe&&k(E),pe&&k(D);for(let I=0;I<L.length;I+=1)L[I].d();for(let I=0;I<W.length;I+=1)W[I].d();pe&&k(G),pe&&k(K),pe&&k(Y),pe&&k(ne),pe&&k(fe),pe&&k(ye),pe&&k(se),pe&&k(Z),z(le),pe&&k(ae),pe&&k(Be),pe&&k(vt),pe&&k(it);for(let I=0;I<at.length;I+=1)at[I].d();for(let I=0;I<Ot.length;I+=1)Ot[I].d()}}}function bO(n,e,t){let i,{collection:s=new Ln}=e,l=200,r="JavaScript",o=[],a=[];const u=c=>t(3,r=c.lang),f=c=>t(2,l=c.code);return n.$$set=c=>{"collection"in c&&t(0,s=c.collection)},n.$$.update=()=>{n.$$.dirty&1&&t(1,i=(s==null?void 0:s.viewRule)===null),n.$$.dirty&3&&s!=null&&s.id&&(o.push({code:200,body:JSON.stringify(U.dummyCollectionRecord(s),null,2)}),i&&o.push({code:403,body:`
{
"code": 403,
"message": "Only admins can access this action.",
"data": {}
}
`}),o.push({code:404,body:`
{
"code": 404,
"message": "The requested resource wasn't found.",
"data": {}
}
`})),n.$$.dirty&1&&t(4,a=[{lang:"JavaScript",code:`
import PocketBase from 'pocketbase';
const client = new PocketBase("${we.baseUrl}");
client.Records.getOne("${s==null?void 0:s.name}", "RECORD_ID")
.then(function (record) {
// success...
}).catch(function (error) {
// error...
});
`}])},[s,i,l,r,a,o,u,f]}class yO extends Fe{constructor(e){super(),Le(this,e,bO,_O,Ae,{collection:0})}}function Dh(n,e,t){const i=n.slice();return i[8]=e[t],i}function Ah(n,e,t){const i=n.slice();return i[8]=e[t],i}function Eh(n,e,t){const i=n.slice();return i[13]=e[t],i}function Ph(n,e,t){const i=n.slice();return i[16]=e[t],i}function Lh(n,e,t){const i=n.slice();return i[16]=e[t],i}function Fh(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",p(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Ih(n,e){let t,i=e[16].lang+"",s,l,r,o;function a(){return e[6](e[16])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[16].lang),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&16&&i!==(i=e[16].lang+"")&&_e(s,i),f&20&&Q(t,"active",e[2]===e[16].lang)},d(u){u&&k(t),r=!1,o()}}}function Nh(n,e){let t,i,s,l;return i=new en({props:{content:e[16].code}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[16].lang),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r;const a={};o&16&&(a.content=e[16].code),i.$set(a),o&20&&Q(t,"active",e[2]===e[16].lang)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function vO(n){let e;return{c(){e=_("span"),e.textContent="Optional",p(e,"class","label label-warning")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function kO(n){let e;return{c(){e=_("span"),e.textContent="Required",p(e,"class","label label-success")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function wO(n){var l;let e,t=((l=n[13].options)==null?void 0:l.maxSelect)>1?"ids":"id",i,s;return{c(){e=H("User "),i=H(t),s=H(".")},m(r,o){w(r,e,o),w(r,i,o),w(r,s,o)},p(r,o){var a;o&1&&t!==(t=((a=r[13].options)==null?void 0:a.maxSelect)>1?"ids":"id")&&_e(i,t)},d(r){r&&k(e),r&&k(i),r&&k(s)}}}function SO(n){var l;let e,t=((l=n[13].options)==null?void 0:l.maxSelect)>1?"ids":"id",i,s;return{c(){e=H("Relation record "),i=H(t),s=H(".")},m(r,o){w(r,e,o),w(r,i,o),w(r,s,o)},p(r,o){var a;o&1&&t!==(t=((a=r[13].options)==null?void 0:a.maxSelect)>1?"ids":"id")&&_e(i,t)},d(r){r&&k(e),r&&k(i),r&&k(s)}}}function $O(n){let e,t,i,s,l;return{c(){e=H("FormData object."),t=_("br"),i=H(`
Set to `),s=_("code"),s.textContent="null",l=H(" to delete already uploaded file(s).")},m(r,o){w(r,e,o),w(r,t,o),w(r,i,o),w(r,s,o),w(r,l,o)},p:re,d(r){r&&k(e),r&&k(t),r&&k(i),r&&k(s),r&&k(l)}}}function CO(n){let e;return{c(){e=H("URL address.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function MO(n){let e;return{c(){e=H("Email address.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function OO(n){let e;return{c(){e=H("JSON array or object.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function TO(n){let e;return{c(){e=H("Number value.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function DO(n){let e;return{c(){e=H("Plain text value.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Rh(n,e){let t,i,s,l,r,o=e[13].name+"",a,u,f,c,d=U.getFieldValueType(e[13])+"",h,g,y,b;function v(E,D){return E[13].required?kO:vO}let S=v(e),$=S(e);function C(E,D){if(E[13].type==="text")return DO;if(E[13].type==="number")return TO;if(E[13].type==="json")return OO;if(E[13].type==="email")return MO;if(E[13].type==="url")return CO;if(E[13].type==="file")return $O;if(E[13].type==="relation")return SO;if(E[13].type==="user")return wO}let M=C(e),T=M&&M(e);return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("div"),$.c(),l=O(),r=_("span"),a=H(o),u=O(),f=_("td"),c=_("span"),h=H(d),g=O(),y=_("td"),T&&T.c(),b=O(),p(s,"class","inline-flex"),p(c,"class","label"),this.first=t},m(E,D){w(E,t,D),m(t,i),m(i,s),$.m(s,null),m(s,l),m(s,r),m(r,a),m(t,u),m(t,f),m(f,c),m(c,h),m(t,g),m(t,y),T&&T.m(y,null),m(t,b)},p(E,D){e=E,S!==(S=v(e))&&($.d(1),$=S(e),$&&($.c(),$.m(s,l))),D&1&&o!==(o=e[13].name+"")&&_e(a,o),D&1&&d!==(d=U.getFieldValueType(e[13])+"")&&_e(h,d),M===(M=C(e))&&T?T.p(e,D):(T&&T.d(1),T=M&&M(e),T&&(T.c(),T.m(y,null)))},d(E){E&&k(t),$.d(),T&&T.d()}}}function jh(n,e){let t,i=e[8].code+"",s,l,r,o;function a(){return e[7](e[8])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[1]===e[8].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&8&&i!==(i=e[8].code+"")&&_e(s,i),f&10&&Q(t,"active",e[1]===e[8].code)},d(u){u&&k(t),r=!1,o()}}}function Hh(n,e){let t,i,s,l;return i=new en({props:{content:e[8].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[1]===e[8].code),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r;const a={};o&8&&(a.content=e[8].body),i.$set(a),o&10&&Q(t,"active",e[1]===e[8].code)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function AO(n){var Ot;let e,t,i,s,l,r,o,a=n[0].name+"",u,f,c,d,h,g,y,b,v=n[0].name+"",S,$,C,M,T,E,D,P,L,N,R,J=[],W=new Map,q,G,K=[],Y=new Map,ne,fe,ye,se,Z,De,te,be=[],ue=new Map,ie,ve,He,Ie,qe,oe=[],le=new Map,ke,Ve,ze=[],Ze=new Map,ge,Ee=n[5]&&Fh(),x=n[4];const ae=me=>me[16].lang;for(let me=0;me<x.length;me+=1){let Ce=Lh(n,x,me),Ke=ae(Ce);W.set(Ke,J[me]=Ih(Ke,Ce))}let Be=n[4];const vt=me=>me[16].lang;for(let me=0;me<Be.length;me+=1){let Ce=Ph(n,Be,me),Ke=vt(Ce);Y.set(Ke,K[me]=Nh(Ke,Ce))}let it=(Ot=n[0])==null?void 0:Ot.schema;const gt=me=>me[13].name;for(let me=0;me<it.length;me+=1){let Ce=Eh(n,it,me),Ke=gt(Ce);ue.set(Ke,be[me]=Rh(Ke,Ce))}let at=n[3];const yt=me=>me[8].code;for(let me=0;me<at.length;me+=1){let Ce=Ah(n,at,me),Ke=yt(Ce);le.set(Ke,oe[me]=jh(Ke,Ce))}let zt=n[3];const Mt=me=>me[8].code;for(let me=0;me<zt.length;me+=1){let Ce=Dh(n,zt,me),Ke=Mt(Ce);Ze.set(Ke,ze[me]=Hh(Ke,Ce))}return{c(){e=_("div"),t=_("strong"),t.textContent="POST",i=O(),s=_("div"),l=_("p"),r=H("/api/collections/"),o=_("strong"),u=H(a),f=H("/records"),c=O(),Ee&&Ee.c(),d=O(),h=_("div"),g=_("p"),y=H("Create a new "),b=_("strong"),S=H(v),$=H(" record."),C=O(),M=_("p"),M.innerHTML=`Body parameters could be sent as <code>application/json</code> or
<code>multipart/form-data</code>.`,T=O(),E=_("p"),E.innerHTML="File upload is supported only via <code>multipart/form-data</code>.",D=O(),P=_("div"),P.textContent="Client SDKs example",L=O(),N=_("div"),R=_("div");for(let me=0;me<J.length;me+=1)J[me].c();q=O(),G=_("div");for(let me=0;me<K.length;me+=1)K[me].c();ne=O(),fe=_("div"),fe.textContent="Body Parameters",ye=O(),se=_("table"),Z=_("thead"),Z.innerHTML=`<tr><th>Param</th>
<th>Type</th>
<th width="50%">Description</th></tr>`,De=O(),te=_("tbody");for(let me=0;me<be.length;me+=1)be[me].c();ie=O(),ve=_("div"),ve.textContent="Responses",He=O(),Ie=_("div"),qe=_("div");for(let me=0;me<oe.length;me+=1)oe[me].c();ke=O(),Ve=_("div");for(let me=0;me<ze.length;me+=1)ze[me].c();p(t,"class","label label-primary"),p(s,"class","content"),p(e,"class","alert alert-success"),p(h,"class","content m-b-base"),p(P,"class","section-title"),p(R,"class","tabs-header compact left"),p(G,"class","tabs-content"),p(N,"class","tabs m-b-lg"),p(fe,"class","section-title"),p(se,"class","table-compact table-border m-b-lg"),p(ve,"class","section-title"),p(qe,"class","tabs-header compact left"),p(Ve,"class","tabs-content"),p(Ie,"class","tabs")},m(me,Ce){w(me,e,Ce),m(e,t),m(e,i),m(e,s),m(s,l),m(l,r),m(l,o),m(o,u),m(l,f),m(e,c),Ee&&Ee.m(e,null),w(me,d,Ce),w(me,h,Ce),m(h,g),m(g,y),m(g,b),m(b,S),m(g,$),m(h,C),m(h,M),m(h,T),m(h,E),w(me,D,Ce),w(me,P,Ce),w(me,L,Ce),w(me,N,Ce),m(N,R);for(let Ke=0;Ke<J.length;Ke+=1)J[Ke].m(R,null);m(N,q),m(N,G);for(let Ke=0;Ke<K.length;Ke+=1)K[Ke].m(G,null);w(me,ne,Ce),w(me,fe,Ce),w(me,ye,Ce),w(me,se,Ce),m(se,Z),m(se,De),m(se,te);for(let Ke=0;Ke<be.length;Ke+=1)be[Ke].m(te,null);w(me,ie,Ce),w(me,ve,Ce),w(me,He,Ce),w(me,Ie,Ce),m(Ie,qe);for(let Ke=0;Ke<oe.length;Ke+=1)oe[Ke].m(qe,null);m(Ie,ke),m(Ie,Ve);for(let Ke=0;Ke<ze.length;Ke+=1)ze[Ke].m(Ve,null);ge=!0},p(me,[Ce]){var Ke;(!ge||Ce&1)&&a!==(a=me[0].name+"")&&_e(u,a),me[5]?Ee||(Ee=Fh(),Ee.c(),Ee.m(e,null)):Ee&&(Ee.d(1),Ee=null),(!ge||Ce&1)&&v!==(v=me[0].name+"")&&_e(S,v),Ce&20&&(x=me[4],J=ot(J,Ce,ae,1,me,x,W,R,an,Ih,null,Lh)),Ce&20&&(Be=me[4],Oe(),K=ot(K,Ce,vt,1,me,Be,Y,G,Lt,Nh,null,Ph),Te()),Ce&1&&(it=(Ke=me[0])==null?void 0:Ke.schema,be=ot(be,Ce,gt,1,me,it,ue,te,an,Rh,null,Eh)),Ce&10&&(at=me[3],oe=ot(oe,Ce,yt,1,me,at,le,qe,an,jh,null,Ah)),Ce&10&&(zt=me[3],Oe(),ze=ot(ze,Ce,Mt,1,me,zt,Ze,Ve,Lt,Hh,null,Dh),Te())},i(me){if(!ge){for(let Ce=0;Ce<Be.length;Ce+=1)A(K[Ce]);for(let Ce=0;Ce<zt.length;Ce+=1)A(ze[Ce]);ge=!0}},o(me){for(let Ce=0;Ce<K.length;Ce+=1)F(K[Ce]);for(let Ce=0;Ce<ze.length;Ce+=1)F(ze[Ce]);ge=!1},d(me){me&&k(e),Ee&&Ee.d(),me&&k(d),me&&k(h),me&&k(D),me&&k(P),me&&k(L),me&&k(N);for(let Ce=0;Ce<J.length;Ce+=1)J[Ce].d();for(let Ce=0;Ce<K.length;Ce+=1)K[Ce].d();me&&k(ne),me&&k(fe),me&&k(ye),me&&k(se);for(let Ce=0;Ce<be.length;Ce+=1)be[Ce].d();me&&k(ie),me&&k(ve),me&&k(He),me&&k(Ie);for(let Ce=0;Ce<oe.length;Ce+=1)oe[Ce].d();for(let Ce=0;Ce<ze.length;Ce+=1)ze[Ce].d()}}}function EO(n,e,t){let i,{collection:s=new Ln}=e,l=200,r="JavaScript",o=[],a=[];const u=c=>t(2,r=c.lang),f=c=>t(1,l=c.code);return n.$$set=c=>{"collection"in c&&t(0,s=c.collection)},n.$$.update=()=>{var c,d;n.$$.dirty&1&&t(5,i=(s==null?void 0:s.createRule)===null),n.$$.dirty&1&&t(3,o=[{code:200,body:JSON.stringify(U.dummyCollectionRecord(s),null,2)},{code:400,body:`
{
"code": 400,
"message": "Failed to create record.",
"data": {
"${(d=(c=s==null?void 0:s.schema)==null?void 0:c[0])==null?void 0:d.name}": {
"code": "validation_required",
"message": "Missing required value."
}
}
}
`},{code:403,body:`
{
"code": 403,
"message": "You are not allowed to perform this request.",
"data": {}
}
`}]),n.$$.dirty&1&&t(4,a=[{lang:"JavaScript",code:`
import PocketBase from 'pocketbase';
const client = new PocketBase("${we.baseUrl}");
const data = { ... };
client.Records.create("${s==null?void 0:s.name}", data)
.then(function (record) {
// success...
}).catch(function (error) {
// error...
});
`}])},[s,l,r,o,a,i,u,f]}class PO extends Fe{constructor(e){super(),Le(this,e,EO,AO,Ae,{collection:0})}}function qh(n,e,t){const i=n.slice();return i[8]=e[t],i}function Vh(n,e,t){const i=n.slice();return i[8]=e[t],i}function zh(n,e,t){const i=n.slice();return i[13]=e[t],i}function Bh(n,e,t){const i=n.slice();return i[16]=e[t],i}function Uh(n,e,t){const i=n.slice();return i[16]=e[t],i}function Wh(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",p(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Yh(n,e){let t,i=e[16].lang+"",s,l,r,o;function a(){return e[6](e[16])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[16].lang),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&16&&i!==(i=e[16].lang+"")&&_e(s,i),f&20&&Q(t,"active",e[2]===e[16].lang)},d(u){u&&k(t),r=!1,o()}}}function Kh(n,e){let t,i,s,l;return i=new en({props:{content:e[16].code}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[16].lang),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r;const a={};o&16&&(a.content=e[16].code),i.$set(a),o&20&&Q(t,"active",e[2]===e[16].lang)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function LO(n){let e;return{c(){e=_("span"),e.textContent="Optional",p(e,"class","label label-warning")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function FO(n){let e;return{c(){e=_("span"),e.textContent="Required",p(e,"class","label label-success")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function IO(n){var l;let e,t=((l=n[13].options)==null?void 0:l.maxSelect)>1?"ids":"id",i,s;return{c(){e=H("User "),i=H(t),s=H(".")},m(r,o){w(r,e,o),w(r,i,o),w(r,s,o)},p(r,o){var a;o&1&&t!==(t=((a=r[13].options)==null?void 0:a.maxSelect)>1?"ids":"id")&&_e(i,t)},d(r){r&&k(e),r&&k(i),r&&k(s)}}}function NO(n){var l;let e,t=((l=n[13].options)==null?void 0:l.maxSelect)>1?"ids":"id",i,s;return{c(){e=H("Relation record "),i=H(t),s=H(".")},m(r,o){w(r,e,o),w(r,i,o),w(r,s,o)},p(r,o){var a;o&1&&t!==(t=((a=r[13].options)==null?void 0:a.maxSelect)>1?"ids":"id")&&_e(i,t)},d(r){r&&k(e),r&&k(i),r&&k(s)}}}function RO(n){let e,t,i,s,l;return{c(){e=H("FormData object."),t=_("br"),i=H(`
Set to `),s=_("code"),s.textContent="null",l=H(" to delete already uploaded file(s).")},m(r,o){w(r,e,o),w(r,t,o),w(r,i,o),w(r,s,o),w(r,l,o)},p:re,d(r){r&&k(e),r&&k(t),r&&k(i),r&&k(s),r&&k(l)}}}function jO(n){let e;return{c(){e=H("URL address.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function HO(n){let e;return{c(){e=H("Email address.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function qO(n){let e;return{c(){e=H("JSON array or object.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function VO(n){let e;return{c(){e=H("Number value.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function zO(n){let e;return{c(){e=H("Plain text value.")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Jh(n,e){let t,i,s,l,r,o=e[13].name+"",a,u,f,c,d=U.getFieldValueType(e[13])+"",h,g,y,b;function v(E,D){return E[13].required?FO:LO}let S=v(e),$=S(e);function C(E,D){if(E[13].type==="text")return zO;if(E[13].type==="number")return VO;if(E[13].type==="json")return qO;if(E[13].type==="email")return HO;if(E[13].type==="url")return jO;if(E[13].type==="file")return RO;if(E[13].type==="relation")return NO;if(E[13].type==="user")return IO}let M=C(e),T=M&&M(e);return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("div"),$.c(),l=O(),r=_("span"),a=H(o),u=O(),f=_("td"),c=_("span"),h=H(d),g=O(),y=_("td"),T&&T.c(),b=O(),p(s,"class","inline-flex"),p(c,"class","label"),this.first=t},m(E,D){w(E,t,D),m(t,i),m(i,s),$.m(s,null),m(s,l),m(s,r),m(r,a),m(t,u),m(t,f),m(f,c),m(c,h),m(t,g),m(t,y),T&&T.m(y,null),m(t,b)},p(E,D){e=E,S!==(S=v(e))&&($.d(1),$=S(e),$&&($.c(),$.m(s,l))),D&1&&o!==(o=e[13].name+"")&&_e(a,o),D&1&&d!==(d=U.getFieldValueType(e[13])+"")&&_e(h,d),M===(M=C(e))&&T?T.p(e,D):(T&&T.d(1),T=M&&M(e),T&&(T.c(),T.m(y,null)))},d(E){E&&k(t),$.d(),T&&T.d()}}}function Gh(n,e){let t,i=e[8].code+"",s,l,r,o;function a(){return e[7](e[8])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[1]===e[8].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&8&&i!==(i=e[8].code+"")&&_e(s,i),f&10&&Q(t,"active",e[1]===e[8].code)},d(u){u&&k(t),r=!1,o()}}}function Zh(n,e){let t,i,s,l;return i=new en({props:{content:e[8].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[1]===e[8].code),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r;const a={};o&8&&(a.content=e[8].body),i.$set(a),o&10&&Q(t,"active",e[1]===e[8].code)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function BO(n){var fn;let e,t,i,s,l,r,o,a=n[0].name+"",u,f,c,d,h,g,y,b,v,S=n[0].name+"",$,C,M,T,E,D,P,L,N,R,J,W=[],q=new Map,G,K,Y=[],ne=new Map,fe,ye,se,Z,De,te,be,ue,ie,ve,He,Ie=[],qe=new Map,oe,le,ke,Ve,ze,Ze=[],ge=new Map,Ee,x,ae=[],Be=new Map,vt,it=n[5]&&Wh(),gt=n[4];const at=ce=>ce[16].lang;for(let ce=0;ce<gt.length;ce+=1){let Se=Uh(n,gt,ce),xe=at(Se);q.set(xe,W[ce]=Yh(xe,Se))}let yt=n[4];const zt=ce=>ce[16].lang;for(let ce=0;ce<yt.length;ce+=1){let Se=Bh(n,yt,ce),xe=zt(Se);ne.set(xe,Y[ce]=Kh(xe,Se))}let Mt=(fn=n[0])==null?void 0:fn.schema;const Ot=ce=>ce[13].name;for(let ce=0;ce<Mt.length;ce+=1){let Se=zh(n,Mt,ce),xe=Ot(Se);qe.set(xe,Ie[ce]=Jh(xe,Se))}let me=n[3];const Ce=ce=>ce[8].code;for(let ce=0;ce<me.length;ce+=1){let Se=Vh(n,me,ce),xe=Ce(Se);ge.set(xe,Ze[ce]=Gh(xe,Se))}let Ke=n[3];const st=ce=>ce[8].code;for(let ce=0;ce<Ke.length;ce+=1){let Se=qh(n,Ke,ce),xe=st(Se);Be.set(xe,ae[ce]=Zh(xe,Se))}return{c(){e=_("div"),t=_("strong"),t.textContent="PATCH",i=O(),s=_("div"),l=_("p"),r=H("/api/collections/"),o=_("strong"),u=H(a),f=H("/records/"),c=_("strong"),c.textContent=":id",d=O(),it&&it.c(),h=O(),g=_("div"),y=_("p"),b=H("Update a single "),v=_("strong"),$=H(S),C=H(" record."),M=O(),T=_("p"),T.innerHTML=`Body parameters could be sent as <code>application/json</code> or
<code>multipart/form-data</code>.`,E=O(),D=_("p"),D.innerHTML="File upload is supported only via <code>multipart/form-data</code>.",P=O(),L=_("div"),L.textContent="Client SDKs example",N=O(),R=_("div"),J=_("div");for(let ce=0;ce<W.length;ce+=1)W[ce].c();G=O(),K=_("div");for(let ce=0;ce<Y.length;ce+=1)Y[ce].c();fe=O(),ye=_("div"),ye.textContent="Path parameters",se=O(),Z=_("table"),Z.innerHTML=`<thead><tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr></thead>
<tbody><tr><td>id</td>
<td><span class="label">String</span></td>
<td>ID of the record to update.</td></tr></tbody>`,De=O(),te=_("div"),te.textContent="Body Parameters",be=O(),ue=_("table"),ie=_("thead"),ie.innerHTML=`<tr><th>Param</th>
<th width="60%">Type</th>
<th width="50%">Description</th></tr>`,ve=O(),He=_("tbody");for(let ce=0;ce<Ie.length;ce+=1)Ie[ce].c();oe=O(),le=_("div"),le.textContent="Responses",ke=O(),Ve=_("div"),ze=_("div");for(let ce=0;ce<Ze.length;ce+=1)Ze[ce].c();Ee=O(),x=_("div");for(let ce=0;ce<ae.length;ce+=1)ae[ce].c();p(t,"class","label label-primary"),p(s,"class","content"),p(e,"class","alert alert-warning"),p(g,"class","content m-b-base"),p(L,"class","section-title"),p(J,"class","tabs-header compact left"),p(K,"class","tabs-content"),p(R,"class","tabs m-b-lg"),p(ye,"class","section-title"),p(Z,"class","table-compact table-border m-b-lg"),p(te,"class","section-title"),p(ue,"class","table-compact table-border m-b-lg"),p(le,"class","section-title"),p(ze,"class","tabs-header compact left"),p(x,"class","tabs-content"),p(Ve,"class","tabs")},m(ce,Se){w(ce,e,Se),m(e,t),m(e,i),m(e,s),m(s,l),m(l,r),m(l,o),m(o,u),m(l,f),m(l,c),m(e,d),it&&it.m(e,null),w(ce,h,Se),w(ce,g,Se),m(g,y),m(y,b),m(y,v),m(v,$),m(y,C),m(g,M),m(g,T),m(g,E),m(g,D),w(ce,P,Se),w(ce,L,Se),w(ce,N,Se),w(ce,R,Se),m(R,J);for(let xe=0;xe<W.length;xe+=1)W[xe].m(J,null);m(R,G),m(R,K);for(let xe=0;xe<Y.length;xe+=1)Y[xe].m(K,null);w(ce,fe,Se),w(ce,ye,Se),w(ce,se,Se),w(ce,Z,Se),w(ce,De,Se),w(ce,te,Se),w(ce,be,Se),w(ce,ue,Se),m(ue,ie),m(ue,ve),m(ue,He);for(let xe=0;xe<Ie.length;xe+=1)Ie[xe].m(He,null);w(ce,oe,Se),w(ce,le,Se),w(ce,ke,Se),w(ce,Ve,Se),m(Ve,ze);for(let xe=0;xe<Ze.length;xe+=1)Ze[xe].m(ze,null);m(Ve,Ee),m(Ve,x);for(let xe=0;xe<ae.length;xe+=1)ae[xe].m(x,null);vt=!0},p(ce,[Se]){var xe;(!vt||Se&1)&&a!==(a=ce[0].name+"")&&_e(u,a),ce[5]?it||(it=Wh(),it.c(),it.m(e,null)):it&&(it.d(1),it=null),(!vt||Se&1)&&S!==(S=ce[0].name+"")&&_e($,S),Se&20&&(gt=ce[4],W=ot(W,Se,at,1,ce,gt,q,J,an,Yh,null,Uh)),Se&20&&(yt=ce[4],Oe(),Y=ot(Y,Se,zt,1,ce,yt,ne,K,Lt,Kh,null,Bh),Te()),Se&1&&(Mt=(xe=ce[0])==null?void 0:xe.schema,Ie=ot(Ie,Se,Ot,1,ce,Mt,qe,He,an,Jh,null,zh)),Se&10&&(me=ce[3],Ze=ot(Ze,Se,Ce,1,ce,me,ge,ze,an,Gh,null,Vh)),Se&10&&(Ke=ce[3],Oe(),ae=ot(ae,Se,st,1,ce,Ke,Be,x,Lt,Zh,null,qh),Te())},i(ce){if(!vt){for(let Se=0;Se<yt.length;Se+=1)A(Y[Se]);for(let Se=0;Se<Ke.length;Se+=1)A(ae[Se]);vt=!0}},o(ce){for(let Se=0;Se<Y.length;Se+=1)F(Y[Se]);for(let Se=0;Se<ae.length;Se+=1)F(ae[Se]);vt=!1},d(ce){ce&&k(e),it&&it.d(),ce&&k(h),ce&&k(g),ce&&k(P),ce&&k(L),ce&&k(N),ce&&k(R);for(let Se=0;Se<W.length;Se+=1)W[Se].d();for(let Se=0;Se<Y.length;Se+=1)Y[Se].d();ce&&k(fe),ce&&k(ye),ce&&k(se),ce&&k(Z),ce&&k(De),ce&&k(te),ce&&k(be),ce&&k(ue);for(let Se=0;Se<Ie.length;Se+=1)Ie[Se].d();ce&&k(oe),ce&&k(le),ce&&k(ke),ce&&k(Ve);for(let Se=0;Se<Ze.length;Se+=1)Ze[Se].d();for(let Se=0;Se<ae.length;Se+=1)ae[Se].d()}}}function UO(n,e,t){let i,{collection:s=new Ln}=e,l=200,r="JavaScript",o=[],a=[];const u=c=>t(2,r=c.lang),f=c=>t(1,l=c.code);return n.$$set=c=>{"collection"in c&&t(0,s=c.collection)},n.$$.update=()=>{var c,d;n.$$.dirty&1&&t(5,i=(s==null?void 0:s.updateRule)===null),n.$$.dirty&1&&t(3,o=[{code:200,body:JSON.stringify(U.dummyCollectionRecord(s),null,2)},{code:400,body:`
{
"code": 400,
"message": "Failed to update record.",
"data": {
"${(d=(c=s==null?void 0:s.schema)==null?void 0:c[0])==null?void 0:d.name}": {
"code": "validation_required",
"message": "Missing required value."
}
}
}
`},{code:403,body:`
{
"code": 403,
"message": "You are not allowed to perform this request.",
"data": {}
}
`},{code:404,body:`
{
"code": 404,
"message": "The requested resource wasn't found.",
"data": {}
}
`}]),n.$$.dirty&1&&t(4,a=[{lang:"JavaScript",code:`
import PocketBase from 'pocketbase';
const client = new PocketBase("${we.baseUrl}");
const data = { ... };
client.Records.update("${s==null?void 0:s.name}", "RECORD_ID", data)
.then(function (record) {
// success...
}).catch(function (error) {
// error...
});
`}])},[s,l,r,o,a,i,u,f]}class WO extends Fe{constructor(e){super(),Le(this,e,UO,BO,Ae,{collection:0})}}function xh(n,e,t){const i=n.slice();return i[8]=e[t],i}function Xh(n,e,t){const i=n.slice();return i[8]=e[t],i}function Qh(n,e,t){const i=n.slice();return i[13]=e[t],i}function em(n,e,t){const i=n.slice();return i[13]=e[t],i}function tm(n){let e;return{c(){e=_("p"),e.innerHTML="Requires <code>Authorization: Admin TOKEN</code> header",p(e,"class","txt-hint txt-sm txt-right")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function nm(n,e){let t,i=e[13].lang+"",s,l,r,o;function a(){return e[6](e[13])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[3]===e[13].lang),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&16&&i!==(i=e[13].lang+"")&&_e(s,i),f&24&&Q(t,"active",e[3]===e[13].lang)},d(u){u&&k(t),r=!1,o()}}}function im(n,e){let t,i,s,l;return i=new en({props:{content:e[13].code}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[3]===e[13].lang),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r;const a={};o&16&&(a.content=e[13].code),i.$set(a),o&24&&Q(t,"active",e[3]===e[13].lang)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function sm(n,e){let t,i=e[8].code+"",s,l,r,o;function a(){return e[7](e[8])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[8].code),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&36&&Q(t,"active",e[2]===e[8].code)},d(u){u&&k(t),r=!1,o()}}}function lm(n,e){let t,i,s,l;return i=new en({props:{content:e[8].body}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[2]===e[8].code),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r,o&36&&Q(t,"active",e[2]===e[8].code)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function YO(n){let e,t,i,s,l,r,o,a=n[0].name+"",u,f,c,d,h,g,y,b,v,S=n[0].name+"",$,C,M,T,E,D,P,L=[],N=new Map,R,J,W=[],q=new Map,G,K,Y,ne,fe,ye,se,Z,De,te=[],be=new Map,ue,ie,ve=[],He=new Map,Ie,qe=n[1]&&tm(),oe=n[4];const le=x=>x[13].lang;for(let x=0;x<oe.length;x+=1){let ae=em(n,oe,x),Be=le(ae);N.set(Be,L[x]=nm(Be,ae))}let ke=n[4];const Ve=x=>x[13].lang;for(let x=0;x<ke.length;x+=1){let ae=Qh(n,ke,x),Be=Ve(ae);q.set(Be,W[x]=im(Be,ae))}let ze=n[5];const Ze=x=>x[8].code;for(let x=0;x<ze.length;x+=1){let ae=Xh(n,ze,x),Be=Ze(ae);be.set(Be,te[x]=sm(Be,ae))}let ge=n[5];const Ee=x=>x[8].code;for(let x=0;x<ge.length;x+=1){let ae=xh(n,ge,x),Be=Ee(ae);He.set(Be,ve[x]=lm(Be,ae))}return{c(){e=_("div"),t=_("strong"),t.textContent="DELETE",i=O(),s=_("div"),l=_("p"),r=H("/api/collections/"),o=_("strong"),u=H(a),f=H("/records/"),c=_("strong"),c.textContent=":id",d=O(),qe&&qe.c(),h=O(),g=_("div"),y=_("p"),b=H("Delete a single "),v=_("strong"),$=H(S),C=H(" record."),M=O(),T=_("div"),T.textContent="Client SDKs example",E=O(),D=_("div"),P=_("div");for(let x=0;x<L.length;x+=1)L[x].c();R=O(),J=_("div");for(let x=0;x<W.length;x+=1)W[x].c();G=O(),K=_("div"),K.textContent="Path parameters",Y=O(),ne=_("table"),ne.innerHTML=`<thead><tr><th>Param</th>
<th>Type</th>
<th width="60%">Description</th></tr></thead>
<tbody><tr><td>id</td>
<td><span class="label">String</span></td>
<td>ID of the record to delete.</td></tr></tbody>`,fe=O(),ye=_("div"),ye.textContent="Responses",se=O(),Z=_("div"),De=_("div");for(let x=0;x<te.length;x+=1)te[x].c();ue=O(),ie=_("div");for(let x=0;x<ve.length;x+=1)ve[x].c();p(t,"class","label label-primary"),p(s,"class","content"),p(e,"class","alert alert-danger"),p(g,"class","content m-b-base"),p(T,"class","section-title"),p(P,"class","tabs-header compact left"),p(J,"class","tabs-content"),p(D,"class","tabs m-b-lg"),p(K,"class","section-title"),p(ne,"class","table-compact table-border m-b-lg"),p(ye,"class","section-title"),p(De,"class","tabs-header compact left"),p(ie,"class","tabs-content"),p(Z,"class","tabs")},m(x,ae){w(x,e,ae),m(e,t),m(e,i),m(e,s),m(s,l),m(l,r),m(l,o),m(o,u),m(l,f),m(l,c),m(e,d),qe&&qe.m(e,null),w(x,h,ae),w(x,g,ae),m(g,y),m(y,b),m(y,v),m(v,$),m(y,C),w(x,M,ae),w(x,T,ae),w(x,E,ae),w(x,D,ae),m(D,P);for(let Be=0;Be<L.length;Be+=1)L[Be].m(P,null);m(D,R),m(D,J);for(let Be=0;Be<W.length;Be+=1)W[Be].m(J,null);w(x,G,ae),w(x,K,ae),w(x,Y,ae),w(x,ne,ae),w(x,fe,ae),w(x,ye,ae),w(x,se,ae),w(x,Z,ae),m(Z,De);for(let Be=0;Be<te.length;Be+=1)te[Be].m(De,null);m(Z,ue),m(Z,ie);for(let Be=0;Be<ve.length;Be+=1)ve[Be].m(ie,null);Ie=!0},p(x,[ae]){(!Ie||ae&1)&&a!==(a=x[0].name+"")&&_e(u,a),x[1]?qe||(qe=tm(),qe.c(),qe.m(e,null)):qe&&(qe.d(1),qe=null),(!Ie||ae&1)&&S!==(S=x[0].name+"")&&_e($,S),ae&24&&(oe=x[4],L=ot(L,ae,le,1,x,oe,N,P,an,nm,null,em)),ae&24&&(ke=x[4],Oe(),W=ot(W,ae,Ve,1,x,ke,q,J,Lt,im,null,Qh),Te()),ae&36&&(ze=x[5],te=ot(te,ae,Ze,1,x,ze,be,De,an,sm,null,Xh)),ae&36&&(ge=x[5],Oe(),ve=ot(ve,ae,Ee,1,x,ge,He,ie,Lt,lm,null,xh),Te())},i(x){if(!Ie){for(let ae=0;ae<ke.length;ae+=1)A(W[ae]);for(let ae=0;ae<ge.length;ae+=1)A(ve[ae]);Ie=!0}},o(x){for(let ae=0;ae<W.length;ae+=1)F(W[ae]);for(let ae=0;ae<ve.length;ae+=1)F(ve[ae]);Ie=!1},d(x){x&&k(e),qe&&qe.d(),x&&k(h),x&&k(g),x&&k(M),x&&k(T),x&&k(E),x&&k(D);for(let ae=0;ae<L.length;ae+=1)L[ae].d();for(let ae=0;ae<W.length;ae+=1)W[ae].d();x&&k(G),x&&k(K),x&&k(Y),x&&k(ne),x&&k(fe),x&&k(ye),x&&k(se),x&&k(Z);for(let ae=0;ae<te.length;ae+=1)te[ae].d();for(let ae=0;ae<ve.length;ae+=1)ve[ae].d()}}}function KO(n,e,t){let i,{collection:s=new Ln}=e,l=204,r="JavaScript",o=[],a=[];const u=c=>t(3,r=c.lang),f=c=>t(2,l=c.code);return n.$$set=c=>{"collection"in c&&t(0,s=c.collection)},n.$$.update=()=>{n.$$.dirty&1&&t(1,i=(s==null?void 0:s.deleteRule)===null),n.$$.dirty&3&&s!=null&&s.id&&(o.push({code:204,body:`
null
`}),o.push({code:400,body:`
{
"code": 400,
"message": "Failed to delete record. Make sure that the record is not part of a required relation reference.",
"data": {}
}
`}),i&&o.push({code:403,body:`
{
"code": 403,
"message": "Only admins can access this action.",
"data": {}
}
`}),o.push({code:404,body:`
{
"code": 404,
"message": "The requested resource wasn't found.",
"data": {}
}
`})),n.$$.dirty&1&&t(4,a=[{lang:"JavaScript",code:`
import PocketBase from 'pocketbase';
const client = new PocketBase("${we.baseUrl}");
client.Records.delete("${s==null?void 0:s.name}", "RECORD_ID")
.then(function () {
// success...
}).catch(function (error) {
// error...
});
`}])},[s,i,l,r,a,o,u,f]}class JO extends Fe{constructor(e){super(),Le(this,e,KO,YO,Ae,{collection:0})}}function rm(n,e,t){const i=n.slice();return i[4]=e[t],i}function om(n,e,t){const i=n.slice();return i[4]=e[t],i}function am(n,e){let t,i=e[4].lang+"",s,l,r,o;function a(){return e[3](e[4])}return{key:n,first:null,c(){t=_("button"),s=H(i),l=O(),p(t,"class","tab-item"),Q(t,"active",e[1]===e[4].lang),this.first=t},m(u,f){w(u,t,f),m(t,s),m(t,l),r||(o=X(t,"click",a),r=!0)},p(u,f){e=u,f&4&&i!==(i=e[4].lang+"")&&_e(s,i),f&6&&Q(t,"active",e[1]===e[4].lang)},d(u){u&&k(t),r=!1,o()}}}function um(n,e){let t,i,s,l;return i=new en({props:{content:e[4].code}}),{key:n,first:null,c(){t=_("div"),B(i.$$.fragment),s=O(),p(t,"class","tab-item"),Q(t,"active",e[1]===e[4].lang),this.first=t},m(r,o){w(r,t,o),V(i,t,null),m(t,s),l=!0},p(r,o){e=r;const a={};o&4&&(a.content=e[4].code),i.$set(a),o&6&&Q(t,"active",e[1]===e[4].lang)},i(r){l||(A(i.$$.fragment,r),l=!0)},o(r){F(i.$$.fragment,r),l=!1},d(r){r&&k(t),z(i)}}}function GO(n){let e,t,i,s,l,r,o,a,u=[],f=new Map,c,d,h=[],g=new Map,y,b,v,S,$,C=n[2];const M=D=>D[4].lang;for(let D=0;D<C.length;D+=1){let P=om(n,C,D),L=M(P);f.set(L,u[D]=am(L,P))}let T=n[2];const E=D=>D[4].lang;for(let D=0;D<T.length;D+=1){let P=rm(n,T,D),L=E(P);g.set(L,h[D]=um(L,P))}return S=new en({props:{content:JSON.stringify({action:"create",record:U.dummyCollectionRecord(n[0])},null,2).replace('"action": "create"','"action": "create" // create, update or delete')}}),{c(){e=_("div"),e.innerHTML=`<strong class="label label-primary">SSE</strong>
<div class="content"><p>/api/realtime</p></div>`,t=O(),i=_("div"),i.innerHTML=`<p>Subscribe to realtime changes via Server-Sent Events (SSE).</p>
<p>Events are send for <strong>create</strong>, <strong>update</strong>
and <strong>delete</strong> record operations (see &quot;Event data format&quot; section below).</p>
<div class="alert alert-info m-t-10"><div class="icon"><i class="ri-information-line"></i></div>
<div class="contet"><p><strong>You could subscribe to a single record or to an entire collection.</strong></p>
<p>When you subscribe to a <strong>single record</strong>, the collection&#39;s
<strong>ViewRule</strong> will be used to determine whether the subscriber has access to receive
the event message.</p>
<p>When you subscribe to an <strong>entire collection</strong>, the collection&#39;s
<strong>ListRule</strong> will be used to determine whether the subscriber has access to receive
the event message.</p></div></div>`,s=O(),l=_("div"),l.textContent="Client SDKs example",r=O(),o=_("div"),a=_("div");for(let D=0;D<u.length;D+=1)u[D].c();c=O(),d=_("div");for(let D=0;D<h.length;D+=1)h[D].c();y=O(),b=_("div"),b.textContent="Event data format",v=O(),B(S.$$.fragment),p(e,"class","alert"),p(i,"class","content m-b-base"),p(l,"class","section-title"),p(a,"class","tabs-header compact left"),p(d,"class","tabs-content"),p(o,"class","tabs m-b-base"),p(b,"class","section-title")},m(D,P){w(D,e,P),w(D,t,P),w(D,i,P),w(D,s,P),w(D,l,P),w(D,r,P),w(D,o,P),m(o,a);for(let L=0;L<u.length;L+=1)u[L].m(a,null);m(o,c),m(o,d);for(let L=0;L<h.length;L+=1)h[L].m(d,null);w(D,y,P),w(D,b,P),w(D,v,P),V(S,D,P),$=!0},p(D,[P]){P&6&&(C=D[2],u=ot(u,P,M,1,D,C,f,a,an,am,null,om)),P&6&&(T=D[2],Oe(),h=ot(h,P,E,1,D,T,g,d,Lt,um,null,rm),Te());const L={};P&1&&(L.content=JSON.stringify({action:"create",record:U.dummyCollectionRecord(D[0])},null,2).replace('"action": "create"','"action": "create" // create, update or delete')),S.$set(L)},i(D){if(!$){for(let P=0;P<T.length;P+=1)A(h[P]);A(S.$$.fragment,D),$=!0}},o(D){for(let P=0;P<h.length;P+=1)F(h[P]);F(S.$$.fragment,D),$=!1},d(D){D&&k(e),D&&k(t),D&&k(i),D&&k(s),D&&k(l),D&&k(r),D&&k(o);for(let P=0;P<u.length;P+=1)u[P].d();for(let P=0;P<h.length;P+=1)h[P].d();D&&k(y),D&&k(b),D&&k(v),z(S,D)}}}function ZO(n,e,t){let{collection:i=new Ln}=e,s="JavaScript",l=[];const r=o=>t(1,s=o.lang);return n.$$set=o=>{"collection"in o&&t(0,i=o.collection)},n.$$.update=()=>{n.$$.dirty&1&&t(2,l=[{lang:"JavaScript",code:`
import PocketBase from 'pocketbase';
const client = new PocketBase("${we.baseUrl}");
// (Optionally) authenticate
client.Users.authViaEmail("test@example.com", "123456");
// Subscribe to changes in any record from the collection
client.Realtime.subscribe("${i==null?void 0:i.name}", function (e) {
console.log(e.record);
});
// Subscribe to changes in a single record
client.Realtime.subscribe("${i==null?void 0:i.name}/RECORD_ID", function (e) {
console.log(e.record);
});
// Unsubscribe
client.Realtime.unsubscribe() // remove all subscriptions
client.Realtime.unsubscribe("${i==null?void 0:i.name}") // remove the collection subscription
client.Realtime.unsubscribe("${i==null?void 0:i.name}/RECORD_ID") // remove the record subscription
`}])},[i,s,l,r]}class xO extends Fe{constructor(e){super(),Le(this,e,ZO,GO,Ae,{collection:0})}}function fm(n,e,t){const i=n.slice();return i[14]=e[t],i}function cm(n,e,t){const i=n.slice();return i[14]=e[t],i}function dm(n){let e,t,i,s;var l=n[14].component;function r(o){return{props:{collection:o[3]}}}return l&&(t=new l(r(n))),{c(){e=_("div"),t&&B(t.$$.fragment),i=O(),p(e,"class","tab-item active")},m(o,a){w(o,e,a),t&&V(t,e,null),m(e,i),s=!0},p(o,a){const u={};if(a&8&&(u.collection=o[3]),l!==(l=o[14].component)){if(t){Oe();const f=t;F(f.$$.fragment,1,0,()=>{z(f,1)}),Te()}l?(t=new l(r(o)),B(t.$$.fragment),A(t.$$.fragment,1),V(t,e,i)):t=null}else l&&t.$set(u)},i(o){s||(t&&A(t.$$.fragment,o),s=!0)},o(o){t&&F(t.$$.fragment,o),s=!1},d(o){o&&k(e),t&&z(t)}}}function pm(n,e){let t,i,s,l=e[4]===e[14].id&&dm(e);return{key:n,first:null,c(){t=lt(),l&&l.c(),i=lt(),this.first=t},m(r,o){w(r,t,o),l&&l.m(r,o),w(r,i,o),s=!0},p(r,o){e=r,e[4]===e[14].id?l?(l.p(e,o),o&16&&A(l,1)):(l=dm(e),l.c(),A(l,1),l.m(i.parentNode,i)):l&&(Oe(),F(l,1,1,()=>{l=null}),Te())},i(r){s||(A(l),s=!0)},o(r){F(l),s=!1},d(r){r&&k(t),l&&l.d(r),r&&k(i)}}}function XO(n){let e,t=[],i=new Map,s,l=n[5];const r=o=>o[14].id;for(let o=0;o<l.length;o+=1){let a=fm(n,l,o),u=r(a);i.set(u,t[o]=pm(u,a))}return{c(){e=_("div");for(let o=0;o<t.length;o+=1)t[o].c();p(e,"class","tabs-content")},m(o,a){w(o,e,a);for(let u=0;u<t.length;u+=1)t[u].m(e,null);s=!0},p(o,a){a&56&&(l=o[5],Oe(),t=ot(t,a,r,1,o,l,i,e,Lt,pm,null,fm),Te())},i(o){if(!s){for(let a=0;a<l.length;a+=1)A(t[a]);s=!0}},o(o){for(let a=0;a<t.length;a+=1)F(t[a]);s=!1},d(o){o&&k(e);for(let a=0;a<t.length;a+=1)t[a].d()}}}function hm(n,e){let t,i,s=e[14].label+"",l,r,o,a;function u(){return e[9](e[14])}function f(...c){return e[10](e[14],...c)}return{key:n,first:null,c(){t=_("button"),i=_("span"),l=H(s),r=O(),p(i,"class","txt"),p(t,"tabindex","0"),p(t,"class","tab-item"),Q(t,"active",e[4]===e[14].id),this.first=t},m(c,d){w(c,t,d),m(t,i),m(i,l),m(t,r),o||(a=[X(t,"click",u),X(t,"keydown",Ug(f))],o=!0)},p(c,d){e=c,d&48&&Q(t,"active",e[4]===e[14].id)},d(c){c&&k(t),o=!1,rt(a)}}}function QO(n){let e,t,i=n[3].name+"",s,l,r,o,a=[],u=new Map,f=n[5];const c=d=>d[14].id;for(let d=0;d<f.length;d+=1){let h=cm(n,f,d),g=c(h);u.set(g,a[d]=hm(g,h))}return{c(){e=_("h4"),t=_("strong"),s=H(i),l=H(" records API"),r=O(),o=_("div");for(let d=0;d<a.length;d+=1)a[d].c();p(o,"class","tabs-header stretched")},m(d,h){w(d,e,h),m(e,t),m(t,s),m(e,l),w(d,r,h),w(d,o,h);for(let g=0;g<a.length;g+=1)a[g].m(o,null)},p(d,h){h&8&&i!==(i=d[3].name+"")&&_e(s,i),h&114&&(f=d[5],a=ot(a,h,c,1,d,f,u,o,an,hm,null,cm))},d(d){d&&k(e),d&&k(r),d&&k(o);for(let h=0;h<a.length;h+=1)a[h].d()}}}function eT(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Close</span>',p(e,"type","button"),p(e,"class","btn btn-secondary")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[8]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function tT(n){let e,t,i={class:"overlay-panel-xl colored-header collection-panel",$$slots:{footer:[eT],header:[QO],default:[XO]},$$scope:{ctx:n}};return e=new Di({props:i}),n[11](e),e.$on("hide",n[12]),e.$on("show",n[13]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,[l]){const r={};l&524312&&(r.$$scope={dirty:l,ctx:s}),e.$set(r)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){F(e.$$.fragment,s),t=!1},d(s){n[11](null),z(e,s)}}}function nT(n,e,t){const i=[{id:"list",label:"List",component:gO},{id:"view",label:"View",component:yO},{id:"create",label:"Create",component:PO},{id:"update",label:"Update",component:WO},{id:"delete",label:"Delete",component:JO},{id:"realtime",label:"Realtime",component:xO}];let s,l=new Ln,r=i[0].id;function o(v){return t(3,l=v),u(i[0].id),s==null?void 0:s.show()}function a(){return s==null?void 0:s.hide()}function u(v){t(4,r=v)}function f(v,S){(v.code==="Enter"||v.code==="Space")&&(v.preventDefault(),u(S))}const c=()=>a(),d=v=>u(v.id),h=(v,S)=>f(S,v.id);function g(v){he[v?"unshift":"push"](()=>{s=v,t(2,s)})}function y(v){ut.call(this,n,v)}function b(v){ut.call(this,n,v)}return[a,u,s,l,r,i,f,o,c,d,h,g,y,b]}class iT extends Fe{constructor(e){super(),Le(this,e,nT,tT,Ae,{show:7,hide:0,changeTab:1})}get show(){return this.$$.ctx[7]}get hide(){return this.$$.ctx[0]}get changeTab(){return this.$$.ctx[1]}}function sT(n){let e,t,i,s=[n[3]],l={};for(let r=0;r<s.length;r+=1)l=ct(l,s[r]);return{c(){e=_("textarea"),ci(e,l),Q(e,"svelte-1x1pbts",!0)},m(r,o){w(r,e,o),e.autofocus&&e.focus(),n[5](e),$e(e,n[0]),t||(i=[X(e,"input",n[6]),X(e,"keydown",n[2])],t=!0)},p(r,[o]){ci(e,l=bn(s,[o&8&&r[3]])),o&1&&$e(e,r[0]),Q(e,"svelte-1x1pbts",!0)},i:re,o:re,d(r){r&&k(e),n[5](null),t=!1,rt(i)}}}function lT(n,e,t){const i=["value","maxHeight"];let s=Yt(e,i),{value:l=""}=e,{maxHeight:r=200}=e,o,a;function u(){clearTimeout(a),a=setTimeout(()=>{o&&(t(1,o.style.height="",o),t(1,o.style.height=Math.min(o.scrollHeight+2,r)+"px",o))},0)}function f(h){if((h==null?void 0:h.code)==="Enter"&&!(h!=null&&h.shiftKey)){h.preventDefault();const g=o.closest("form");g!=nu Line truncated
<span class="txt">Upload new file</span>`,p(t,"type","file"),p(t,"class","hidden"),t.multiple=n[5],p(s,"type","button"),p(s,"class","btn btn-secondary btn-sm btn-block"),p(e,"class","list-item btn-list-item")},m(o,a){w(o,e,a),m(e,t),n[18](t),m(e,i),m(e,s),l||(r=[X(t,"change",n[19]),X(s,"click",n[20])],l=!0)},p(o,a){a&32&&(t.multiple=o[5])},d(o){o&&k(e),n[18](null),l=!1,rt(r)}}}function tD(n){let e,t,i,s,l,r=n[3].name+"",o,a,u,f,c=[],d=new Map,h,g,y,b=n[4];const v=T=>T[28];for(let T=0;T<b.length;T+=1){let E=_m(n,b,T),D=v(E);d.set(D,c[T]=bm(D,E))}let S=n[0],$=[];for(let T=0;T<S.length;T+=1)$[T]=ym(gm(n,S,T));const C=T=>F($[T],1,1,()=>{$[T]=null});let M=!n[9]&&vm(n);return{c(){e=_("label"),t=_("i"),s=O(),l=_("span"),o=H(r),u=O(),f=_("div");for(let T=0;T<c.length;T+=1)c[T].c();h=O();for(let T=0;T<$.length;T+=1)$[T].c();g=O(),M&&M.c(),p(t,"class",i=U.getFieldTypeIcon(n[3].type)),p(l,"class","txt"),p(e,"for",a=n[24]),p(f,"class","files-list")},m(T,E){w(T,e,E),m(e,t),m(e,s),m(e,l),m(l,o),w(T,u,E),w(T,f,E);for(let D=0;D<c.length;D+=1)c[D].m(f,null);m(f,h);for(let D=0;D<$.length;D+=1)$[D].m(f,null);m(f,g),M&&M.m(f,null),n[21](f),y=!0},p(T,E){if((!y||E&8&&i!==(i=U.getFieldTypeIcon(T[3].type)))&&p(t,"class",i),(!y||E&8)&&r!==(r=T[3].name+"")&&_e(o,r),(!y||E&16777216&&a!==(a=T[24]))&&p(e,"for",a),E&3222&&(b=T[4],Oe(),c=ot(c,E,v,1,T,b,d,f,Lt,bm,h,_m),Te()),E&4097){S=T[0];let D;for(D=0;D<S.length;D+=1){const P=gm(T,S,D);$[D]?($[D].p(P,E),A($[D],1)):($[D]=ym(P),$[D].c(),A($[D],1),$[D].m(f,g))}for(Oe(),D=S.length;D<$.length;D+=1)C(D);Te()}T[9]?M&&(M.d(1),M=null):M?M.p(T,E):(M=vm(T),M.c(),M.m(f,null))},i(T){if(!y){for(let E=0;E<b.length;E+=1)A(c[E]);for(let E=0;E<S.length;E+=1)A($[E]);y=!0}},o(T){for(let E=0;E<c.length;E+=1)F(c[E]);$=$.filter(Boolean);for(let E=0;E<$.length;E+=1)F($[E]);y=!1},d(T){T&&k(e),T&&k(u),T&&k(f);for(let E=0;E<c.length;E+=1)c[E].d();Bn($,T),M&&M.d(),n[21](null)}}}function nD(n){let e,t,i,s;e=new Ne({props:{class:"form-field form-field-file "+(n[3].required?"required":""),name:n[3].name,$$slots:{default:[tD,({uniqueId:r})=>({24:r}),({uniqueId:r})=>r?16777216:0]},$$scope:{ctx:n}}});let l={};return i=new JT({props:l}),n[22](i),{c(){B(e.$$.fragment),t=O(),B(i.$$.fragment)},m(r,o){V(e,r,o),w(r,t,o),V(i,r,o),s=!0},p(r,[o]){const a={};o&8&&(a.class="form-field form-field-file "+(r[3].required?"required":"")),o&8&&(a.name=r[3].name),o&1090520063&&(a.$$scope={dirty:o,ctx:r}),e.$set(a);const u={};i.$set(u)},i(r){s||(A(e.$$.fragment,r),A(i.$$.fragment,r),s=!0)},o(r){F(e.$$.fragment,r),F(i.$$.fragment,r),s=!1},d(r){z(e,r),r&&k(t),n[22](null),z(i,r)}}}function iD(n,e,t){let i,s,l,{record:r}=e,{value:o=null}=e,{uploadedFiles:a=[]}=e,{deletedFileIndexes:u=[]}=e,{field:f=new wn}=e,c,d,h;function g(N){U.removeByValue(u,N),t(1,u)}function y(N){U.pushUnique(u,N),t(1,u)}function b(N){U.isEmpty(a[N])||a.splice(N,1),t(0,a)}function v(){h==null||h.dispatchEvent(new CustomEvent("change",{detail:{value:o,uploadedFiles:a,deletedFileIndexes:u},bubbles:!0}))}const S=N=>U.hasImageExtension(N)?d==null?void 0:d.show(we.Records.getFileUrl(r,N)):!1,$=N=>g(N),C=N=>y(N),M=N=>b(N);function T(N){he[N?"unshift":"push"](()=>{c=N,t(6,c)})}const E=()=>{for(let N of c.files)a.push(N);t(0,a),t(6,c.value=null,c)},D=()=>c==null?void 0:c.click();function P(N){he[N?"unshift":"push"](()=>{h=N,t(8,h)})}function L(N){he[N?"unshift":"push"](()=>{d=N,t(7,d)})}return n.$$set=N=>{"record"in N&&t(2,r=N.record),"value"in N&&t(13,o=N.value),"uploadedFiles"in N&&t(0,a=N.uploadedFiles),"deletedFileIndexes"in N&&t(1,u=N.deletedFileIndexes),"field"in N&&t(3,f=N.field)},n.$$.update=()=>{var N,R;n.$$.dirty&1&&(Array.isArray(a)||t(0,a=U.toArray(a))),n.$$.dirty&2&&(Array.isArray(u)||t(1,u=U.toArray(u))),n.$$.dirty&8&&t(5,i=((N=f.options)==null?void 0:N.maxSelect)>1),n.$$.dirty&8224&&(typeof o=="undefined"||o===null)&&t(13,o=i?[]:null),n.$$.dirty&8192&&t(4,s=U.toArray(o)),n.$$.dirty&27&&t(9,l=(s.length||a.length)&&((R=f.options)==null?void 0:R.maxSelect)<=s.length+a.length-u.length),n.$$.dirty&3&&(a!==-1||u!==-1)&&v()},[a,u,r,f,s,i,c,d,h,l,g,y,b,o,S,$,C,M,T,E,D,P,L]}class sD extends Fe{constructor(e){super(),Le(this,e,iD,nD,Ae,{record:2,value:13,uploadedFiles:0,deletedFileIndexes:1,field:3})}}function km(n){let e,t;return{c(){e=_("small"),t=H(n[1]),p(e,"class","block txt-hint txt-ellipsis")},m(i,s){w(i,e,s),m(e,t)},p(i,s){s&2&&_e(t,i[1])},d(i){i&&k(e)}}}function lD(n){let e,t,i,s,l,r=n[0].id+"",o,a,u,f,c=n[1]!==""&&n[1]!==n[0].id&&km(n);return{c(){e=_("i"),i=O(),s=_("div"),l=_("div"),o=H(r),a=O(),c&&c.c(),p(e,"class","ri-information-line link-hint"),p(l,"class","block txt-ellipsis"),p(s,"class","content svelte-1gjwqyd")},m(d,h){w(d,e,h),w(d,i,h),w(d,s,h),m(s,l),m(l,o),m(s,a),c&&c.m(s,null),u||(f=Xe(t=St.call(null,e,{text:JSON.stringify(n[0],null,2),position:"left",class:"code"})),u=!0)},p(d,[h]){t&&Jn(t.update)&&h&1&&t.update.call(null,{text:JSON.stringify(d[0],null,2),position:"left",class:"code"}),h&1&&r!==(r=d[0].id+"")&&_e(o,r),d[1]!==""&&Line truncated
`,p(e,"class","block txt-center txt-disabled")},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function OD(n){let e,t,i;function s(r){n[31](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new CD({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function TD(n){let e,t,i;function s(r){n[30](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new mD({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function DD(n){let e,t,i,s,l;function r(f){n[27](f,n[40])}function o(f){n[28](f,n[40])}function a(f){n[29](f,n[40])}let u={field:n[40],record:n[2]};return n[2][n[40].name]!==void 0&&(u.value=n[2][n[40].name]),n[3][n[40].name]!==void 0&&(u.uploadedFiles=n[3][n[40].name]),n[4][n[40].name]!==void 0&&(u.deletedFileIndexes=n[4][n[40].name]),e=new sD({props:u}),he.push(()=>Re(e,"value",r)),he.push(()=>Re(e,"uploadedFiles",o)),he.push(()=>Re(e,"deletedFileIndexes",a)),{c(){B(e.$$.fragment)},m(f,c){V(e,f,c),l=!0},p(f,c){n=f;const d={};c[0]&1&&(d.field=n[40]),c[0]&4&&(d.record=n[2]),!t&&c[0]&5&&(t=!0,d.value=n[2][n[40].name],je(()=>t=!1)),!i&&c[0]&9&&(i=!0,d.uploadedFiles=n[3][n[40].name],je(()=>i=!1)),!s&&c[0]&17&&(s=!0,d.deletedFileIndexes=n[4][n[40].name],je(()=>s=!1)),e.$set(d)},i(f){l||(A(e.$$.fragment,f),l=!0)},o(f){F(e.$$.fragment,f),l=!1},d(f){z(e,f)}}}function AD(n){let e,t,i;function s(r){n[26](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new jT({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function ED(n){let e,t,i;function s(r){n[25](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new FT({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function PD(n){let e,t,i;function s(r){n[24](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new AT({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function LD(n){let e,t,i;function s(r){n[23](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new MT({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function FD(n){let e,t,i;function s(r){n[22](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new wT({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function ID(n){let e,t,i;function s(r){n[21](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new bT({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function ND(n){let e,t,i;function s(r){n[20](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new hT({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r;const a={};o[0]&1&&(a.field=n[40]),!t&&o[0]&5&&(t=!0,a.value=n[2][n[40].name],je(()=>t=!1)),e.$set(a)},i(r){i||(A(e.$$.fragment,r),i=!0)},o(r){F(e.$$.fragment,r),i=!1},d(r){z(e,r)}}}function RD(n){let e,t,i;function s(r){n[19](r,n[40])}let l={field:n[40]};return n[2][n[40].name]!==void 0&&(l.value=n[2][n[40].name]),e=new fT({props:l}),he.push(()=>Re(e,"value",s)),{c(){B(e.$$.fragment)},m(r,o){V(e,r,o),i=!0},p(r,o){n=r; Line truncated
<span class="txt">Delete</span>`,p(e,"tabindex","0"),p(e,"class","dropdown-item closable")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[18]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function qD(n){let e,t=n[2].isNew?"New":"Edit",i,s,l=n[0].name+"",r,o,a,u,f,c=!n[2].isNew&&n[9]&&Am(n);return{c(){e=_("h4"),i=H(t),s=O(),r=H(l),o=H(" record"),a=O(),c&&c.c(),u=lt()},m(d,h){w(d,e,h),m(e,i),m(e,s),m(e,r),m(e,o),w(d,a,h),c&&c.m(d,h),w(d,u,h),f=!0},p(d,h){(!f||h[0]&4)&&t!==(t=d[2].isNew?"New":"Edit")&&_e(i,t),(!f||h[0]&1)&&l!==(l=d[0].name+"")&&_e(r,l),!d[2].isNew&&d[9]?c?(c.p(d,h),h[0]&516&&A(c,1)):(c=Am(d),c.c(),A(c,1),c.m(u.parentNode,u)):c&&(Oe(),F(c,1,1,()=>{c=null}),Te())},i(d){f||(A(c),f=!0)},o(d){F(c),f=!1},d(d){d&&k(e),d&&k(a),c&&c.d(d),d&&k(u)}}}function VD(n){let e,t,i,s,l,r=n[2].isNew?"Create":"Save changes",o,a,u,f;return{c(){e=_("button"),t=_("span"),t.textContent="Cancel",i=O(),s=_("button"),l=_("span"),o=H(r),p(t,"class","txt"),p(e,"type","button"),p(e,"class","btn btn-secondary"),e.disabled=n[7],p(l,"class","txt"),p(s,"type","submit"),p(s,"form",n[11]),p(s,"class","btn btn-expanded"),s.disabled=a=!n[10]||n[7],Q(s,"btn-loading",n[7])},m(c,d){w(c,e,d),m(e,t),w(c,i,d),w(c,s,d),m(s,l),m(l,o),u||(f=X(e,"click",n[17]),u=!0)},p(c,d){d[0]&128&&(e.disabled=c[7]),d[0]&4&&r!==(r=c[2].isNew?"Create":"Save changes")&&_e(o,r),d[0]&1152&&a!==(a=!c[10]||c[7])&&(s.disabled=a),d[0]&128&&Q(s,"btn-loading",c[7])},d(c){c&&k(e),c&&k(i),c&&k(s),u=!1,f()}}}function zD(n){let e,t,i={class:"overlay-panel-lg record-panel",beforeHide:n[32],$$slots:{footer:[VD],header:[qD],default:[jD]},$$scope:{ctx:n}};return e=new Di({props:i}),n[33](e),e.$on("hide",n[34]),e.$on("show",n[35]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,l){const r={};l[0]&288&&(r.beforeHide=s[32]),l[0]&1693|l[1]&8192&&(r.$$scope={dirty:l,ctx:s}),e.$set(r)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){F(e.$$.fragment,s),t=!1},d(s){n[33](null),z(e,s)}}}function Em(n){return JSON.stringify(n)}function BD(n,e,t){let i,s,l,r;const o=_n(),a="record_"+U.randomString(5);let{collection:u}=e,f,c=null,d=new eo,h=!1,g=!1,y={},b={},v="";function S(ue){return C(ue),t(8,g=!0),f==null?void 0:f.show()}function $(){return f==null?void 0:f.hide()}function C(ue){Wi({}),c=ue||{},t(2,d=ue!=null&&ue.clone?ue.clone():new eo),t(3,y={}),t(4,b={}),t(15,v=Em(d))}function M(){if(h||!s)return;t(7,h=!0);const ue=E();let ie;d.isNew?ie=we.Records.create(u==null?void 0:u.id,ue):ie=we.Records.update(u==null?void 0:u.id,d.id,ue),ie.then(async ve=>{mn(d.isNew?"Successfully created record.":"Successfully updated record."),t(8,g=!1),$(),o("save",ve)}).catch(ve=>{we.errorResponseHandler(ve)}).finally(()=>{t(7,h=!1)})}function T(){!(c!=null&&c.id)||Ci("Do you really want to delete the selected record?",()=>we.Records.delete(c["@collectionId"],c.id).then(()=>{$(),mn("Successfully deleted record."),o("delete",c)}).catch(ue=>{we.errorResponseHandler(ue)}))}function E(){const ue=(d==null?void 0:d.export())||{},ie=new FormData,ve={};for(const He of(u==null?void 0:u.schema)||[])ve[He.name]=He;for(const He in ue)!ve[He]||(typeof ue[He]=="undefined"&&(ue[He]=null),U.addValueToFormData(ie,He,ue[He]));for(const He in y){const Ie=U.toArray(y[He]);for(const qe of Ie)ie.append(He,qe)}for(const He in b){const Ie=U.toArray(b[He]);for(const qe of Ie)ie.append(He+"."+qe,"")}return ie}const D=()=>$(),P=()=>T();function L(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function N(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function R(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function J(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function W(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function q(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function G(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function K(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function Y(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function ne(ue,ie){n.$$.not_equal(y[ie.name],ue)&&(y[ie.name]=ue,t(3,y))}function fe(ue,ie){n.$$.not_equal(b[ie.name],ue)&&(b[ie.name]=ue,t(4,b))}function ye(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}function se(ue,ie){n.$$.not_equal(d[ie.name],ue)&&(d[ie.name]=ue,t(2,d))}const Z=()=>s&&g?(Ci("You have unsaved changes. Do you really want to close the panel?",()=>{t(8,g=!1),$()}),!1):!0;function De(ue){he[ue?"unshift":"push"](()=>{f=ue,t(6,f)})}function te(ue){ut.call(this,n,ue)}function be(ue){ut.call(this,n,ue)}return n.$$set=ue=>{"collection"in ue&&t(0,u=ue.collection)},n.$$.update=()=>{n.$$.dirty[0]&24&&t(16,i=U.hasNonEmptyProps(y)||U.hasNonEmptyProps(b)),n.$$.dirty[0]&98308&&t(5,s=i||v!=Em(d)),n.$$.dirty[0]&36&&t(10,l=d.isNew||s),n.$$.dirty[0]&1&&t(9,r=(u==null?void 0:u.name)!=="profiles")},[u,$,d,y,b,s,f,h,g,r,l,a,M,T,S,v,i,D,P,L,N,R,J,W,q,G,K,Y,ne,fe,ye,se,Z,De,te,be]}class Rb extends Fe{constructor(e){super(),Le(this,e,BD,zD,Ae,{collecLine truncated
`},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function Bm(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Clear filters</span>',p(e,"type","button"),p(e,"class","btn btn-hint btn-expanded m-t-sm")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[28]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function Um(n,e){let t,i,s;return i=new jb({props:{record:e[35],field:e[38]}}),{key:n,first:null,c(){t=lt(),B(i.$$.fragment),this.first=t},m(l,r){w(l,t,r),V(i,l,r),s=!0},p(l,r){e=l;const o={};r[0]&8&&(o.record=e[35]),r[0]&2048&&(o.field=e[38]),i.$set(o)},i(l){s||(A(i.$$.fragment,l),s=!0)},o(l){F(i.$$.fragment,l),s=!1},d(l){l&&k(t),z(i,l)}}}function Wm(n,e){let t,i,s,l,r,o,a,u,f,c,d,h,g,y=[],b=new Map,v,S,$,C,M,T,E,D,P,L,N,R;function J(){return e[25](e[35])}h=new No({props:{id:e[35].id}});let W=e[11];const q=Y=>Y[38].name;for(let Y=0;Y<W.length;Y+=1){let ne=Hm(e,W,Y),fe=q(ne);b.set(fe,y[Y]=Um(fe,ne))}$=new $i({props:{date:e[35].created}}),T=new $i({props:{date:e[35].updated}});function G(){return e[26](e[35])}function K(...Y){return e[27](e[35],...Y)}return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("div"),l=_("input"),a=O(),u=_("label"),c=O(),d=_("td"),B(h.$$.fragment),g=O();for(let Y=0;Y<y.length;Y+=1)y[Y].c();v=O(),S=_("td"),B($.$$.fragment),C=O(),M=_("td"),B(T.$$.fragment),E=O(),D=_("td"),D.innerHTML='<i class="ri-arrow-right-line"></i>',P=O(),p(l,"type","checkbox"),p(l,"id",r="checkbox_"+e[35].id),l.checked=o=e[5][e[35].id],p(u,"for",f="checkbox_"+e[35].id),p(s,"class","form-field"),p(i,"class","bulk-select-col min-width"),p(d,"class","col-type-text col-field-id"),p(S,"class","col-type-date col-field-created"),p(M,"class","col-type-date col-field-updated"),p(D,"class","col-type-action min-width"),p(t,"tabindex","0"),p(t,"class","row-handle"),this.first=t},m(Y,ne){w(Y,t,ne),m(t,i),m(i,s),m(s,l),m(s,a),m(s,u),m(t,c),m(t,d),V(h,d,null),m(t,g);for(let fe=0;fe<y.length;fe+=1)y[fe].m(t,null);m(t,v),m(t,S),V($,S,null),m(t,C),m(t,M),V(T,M,null),m(t,E),m(t,D),m(t,P),L=!0,N||(R=[X(l,"change",J),X(s,"click",Un(e[19])),X(t,"click",G),X(t,"keydown",K)],N=!0)},p(Y,ne){e=Y,(!L||ne[0]&8&&r!==(r="checkbox_"+e[35].id))&&p(l,"id",r),(!L||ne[0]&40&&o!==(o=e[5][e[35].id]))&&(l.checked=o),(!L||ne[0]&8&&f!==(f="checkbox_"+e[35].id))&&p(u,"for",f);const fe={};ne[0]&8&&(fe.id=e[35].id),h.$set(fe),ne[0]&2056&&(W=e[11],Oe(),y=ot(y,ne,q,1,e,W,b,t,Lt,Um,v,Hm),Te());const ye={};ne[0]&8&&(ye.date=e[35].created),$.$set(ye);const se={};ne[0]&8&&(se.date=e[35].updated),T.$set(se)},i(Y){if(!L){A(h.$$.fragment,Y);for(let ne=0;ne<W.length;ne+=1)A(y[ne]);A($.$$.fragment,Y),A(T.$$.fragment,Y),L=!0}},o(Y){F(h.$$.fragment,Y);for(let ne=0;ne<y.length;ne+=1)F(y[ne]);F($.$$.fragment,Y),F(T.$$.fragment,Y),L=!1},d(Y){Y&&k(t),z(h);for(let ne=0;ne<y.length;ne+=1)y[ne].d();z($),z(T),N=!1,rt(R)}}}function Ym(n){let e,t,i=n[3].length+"",s,l,r;return{c(){e=_("small"),t=H("Showing "),s=H(i),l=H(" of "),r=H(n[4]),p(e,"class","block txt-hint txt-right m-t-sm")},m(o,a){w(o,e,a),m(e,t),m(e,s),m(e,l),m(e,r)},p(o,a){a[0]&8&&i!==(i=o[3].length+"")&&_e(s,i),a[0]&16&&_e(r,o[4])},d(o){o&&k(e)}}}function Km(n){let e,t,i,s,l=n[4]-n[3].length+"",r,o,a,u;return{c(){e=_("div"),t=_("button"),i=_("span"),s=H("Load more ("),r=H(l),o=H(")"),p(i,"class","txt"),p(t,"type","button"),p(t,"class","btn btn-lg btn-secondary btn-expanded"),Q(t,"btn-loading",n[8]),Q(t,"btn-disabled",n[8]),p(e,"class","block txt-center m-t-xs")},m(f,c){w(f,e,c),m(e,t),m(t,i),m(i,s),m(i,r),m(i,o),a||(u=X(t,"click",n[29]),a=!0)},p(f,c){c[0]&24&&l!==(l=f[4]-f[3].length+"")&&_e(r,l),c[0]&256&&Q(t,"btn-loading",f[8]),c[0]&256&&Q(t,"btn-disabled",f[8])},d(f){f&&k(e),a=!1,u()}}}function Jm(n){let e,t,i,s,l,r,o=n[6]===1?"record":"records",a,u,f,c,d,h,g,y,b,v,S;return{c(){e=_("div"),t=_("div"),i=H("Selected "),s=_("strong"),l=H(n[6]),r=O(),a=H(o),u=O(),f=_("button"),f.innerHTML='<span class="txt">Reset</span>',c=O(),d=_("div"),h=O(),g=_("button"),g.innerHTML='<span class="txt">Delete selected</span>',p(t,"class","txt"),p(f,"type","button"),p(f,"class","btn btn-xs btn-secondary btn-outline p-l-5 p-r-5"),Q(f,"btn-disabled",n[9]),p(d,"class","flex-fill"),p(g,"type","button"),p(g,"class","btn btn-sm btn-secondary btn-danger"),Q(g,"btn-loading",n[9]),Q(g,"btn-disabled",n[9]),p(e,"class","bulkbar")},m($,C){w($,e,C),m(e,t),m(t,i),m(t,s),m(s,l),m(t,r),m(t,a),m(e,u),m(e,f),m(e,c),m(e,d),m(e,h),m(e,g),b=!0,v||(S=[X(f,"click",n[30]),X(g,"click",n[31])],v=!0)},p($,C){(!b||C[0]&64)&&_e(l,$[6]),(!b||C[0]&64)&&o!==(o=$[6]===1?"record":"records")&&_e(a,o),C[0]&512&&Q(f,"btn-disabled",$[9]),C[0]&512&&Q(g,"btn-loading",$[9]),C[0]&512&&Q(g,"btn-disabled",$[9])},i($){b||($&&Dt(()=>{y||(y=ft(e,ni,{duration:150,y:5},!0)),y.run(1)}),b=!0)},o($){$&&(y||(y=ft(e,ni,{duration:150,y:5},!1)),y.run(0)),b=!1},d($){$&&k(e),$&&y&&y.end(),v=!1,rt(S)}}}function cA(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y=[],b=new Map,v,S,$,C,M,T,E,D,P,L,N=[],R=new Map,J,W,q,G,K,Y,ne;function fe(le){n[21](le)}let ye={class:"col-type-text col-field-id",name:" Line truncated
<span class="txt">API Preview</span>`,b=O(),v=_("button"),v.innerHTML=`<i class="ri-add-line"></i>
<span class="txt">New record</span>`,S=O(),B($.$$.fragment),C=O(),B(M.$$.fragment),p(r,"class","breadcrumb-item"),p(a,"class","breadcrumb-item"),p(l,"class","breadcrumbs"),p(d,"type","button"),p(d,"class","btn btn-secondary btn-circle"),p(y,"type","button"),p(y,"class","btn btn-outline"),p(v,"type","button"),p(v,"class","btn btn-expanded"),p(g,"class","btns-group"),p(s,"class","page-header"),p(i,"class","page-wrapper")},m(W,q){V(e,W,q),w(W,t,q),w(W,i,q),m(i,s),m(s,l),m(l,r),m(l,o),m(l,a),m(a,f),m(s,c),m(s,d),m(s,h),m(s,g),m(g,y),m(g,b),m(g,v),m(i,S),V($,i,null),m(i,C),V(M,i,null),D=!0,P||(L=[Xe(St.call(null,d,{text:"Edit collection",position:"right"})),X(d,"click",n[12]),X(y,"click",n[13]),X(v,"click",n[14])],P=!0)},p(W,q){(!D||q&4)&&u!==(u=W[2].name+"")&&_e(f,u);const G={};q&1&&(G.value=W[0]),q&4&&(G.autocompleteCollection=W[2]),$.$set(G);const K={};q&4&&(K.collection=W[2]),!T&&q&1&&(T=!0,K.filter=W[0],je(()=>T=!1)),!E&&q&2&&(E=!0,K.sort=W[1],je(()=>E=!1)),M.$set(K)},i(W){D||(A(e.$$.fragment,W),A($.$$.fragment,W),A(M.$$.fragment,W),D=!0)},o(W){F(e.$$.fragment,W),F($.$$.fragment,W),F(M.$$.fragment,W),D=!1},d(W){z(e,W),W&&k(t),W&&k(i),z($),n[16](null),z(M),P=!1,rt(L)}}}function mA(n){let e,t,i,s,l,r,o,a;return{c(){e=_("div"),t=_("div"),t.innerHTML='<i class="ri-database-2-line"></i>',i=O(),s=_("h1"),s.textContent="Create your first collection to add records!",l=O(),r=_("button"),r.innerHTML=`<i class="ri-add-line"></i>
<span class="txt">Create new collection</span>`,p(t,"class","icon"),p(s,"class","m-b-10"),p(r,"type","button"),p(r,"class","btn btn-expanded-lg btn-lg"),p(e,"class","placeholder-section m-b-base")},m(u,f){w(u,e,f),m(e,t),m(e,i),m(e,s),m(e,l),m(e,r),o||(a=X(r,"click",n[11]),o=!0)},p:re,i:re,o:re,d(u){u&&k(e),o=!1,a()}}}function gA(n){let e;return{c(){e=_("div"),e.innerHTML=`<span class="loader loader-lg"></span>
<h1>Loading collections...</h1>`,p(e,"class","placeholder-section m-b-base")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function _A(n){let e,t,i,s,l,r,o,a,u;const f=[gA,mA,hA],c=[];function d(b,v){return b[8]?0:b[7].length?2:1}e=d(n),t=c[e]=f[e](n);let h={};s=new hf({props:h}),n[20](s);let g={};r=new iT({props:g}),n[21](r);let y={collection:n[2]};return a=new Rb({props:y}),n[22](a),a.$on("save",n[23]),a.$on("delete",n[24]),{c(){t.c(),i=O(),B(s.$$.fragment),l=O(),B(r.$$.fragment),o=O(),B(a.$$.fragment)},m(b,v){c[e].m(b,v),w(b,i,v),V(s,b,v),w(b,l,v),V(r,b,v),w(b,o,v),V(a,b,v),u=!0},p(b,[v]){let S=e;e=d(b),e===S?c[e].p(b,v):(Oe(),F(c[S],1,1,()=>{c[S]=null}),Te(),t=c[e],t?t.p(b,v):(t=c[e]=f[e](b),t.c()),A(t,1),t.m(i.parentNode,i));const $={};s.$set($);const C={};r.$set(C);const M={};v&4&&(M.collection=b[2]),a.$set(M)},i(b){u||(A(t),A(s.$$.fragment,b),A(r.$$.fragment,b),A(a.$$.fragment,b),u=!0)},o(b){F(t),F(s.$$.fragment,b),F(r.$$.fragment,b),F(a.$$.fragment,b),u=!1},d(b){c[e].d(b),b&&k(i),n[20](null),z(s,b),b&&k(l),n[21](null),z(r,b),b&&k(o),n[22](null),z(a,b)}}}function bA(n,e,t){var J;let i,s,l,r;hn(n,fi,W=>t(2,s=W)),hn(n,Js,W=>t(10,l=W)),hn(n,pu,W=>t(8,r=W));const o=U.getQueryParams((J=window.location)==null?void 0:J.href);let a,u,f,c,d=o.filter||"",h=o.sort||"-created",g=o.collectionId;U.setDocumentTitle("Collections"),L3(g);const y=()=>a==null?void 0:a.show(),b=()=>a==null?void 0:a.show(s),v=()=>u==null?void 0:u.show(s),S=()=>f==null?void 0:f.show(),$=W=>t(0,d=W.detail);function C(W){he[W?"unshift":"push"](()=>{c=W,t(6,c)})}function M(W){d=W,t(0,d),t(2,s),t(9,g)}function T(W){h=W,t(1,h),t(2,s),t(9,g)}const E=W=>f==null?void 0:f.show(W==null?void 0:W.detail);function D(W){he[W?"unshift":"push"](()=>{a=W,t(3,a)})}function P(W){he[W?"unshift":"push"](()=>{u=W,t(4,u)})}function L(W){he[W?"unshift":"push"](()=>{f=W,t(5,f)})}const N=()=>c==null?void 0:c.load(),R=()=>c==null?void 0:c.load();return n.$$.update=()=>{n.$$.dirty&1024&&t(7,i=l.filter(W=>W.name!="profiles")),n.$$.dirty&516&&(s==null?void 0:s.id)&&g!=s.id&&(t(9,g=s.id),t(1,h="-created"),t(0,d="")),n.$$.dirty&7&&(h||d||(s==null?void 0:s.id))&&U.replaceClientQueryParams({collectionId:s==null?void 0:s.id,filter:d,sort:h})},[d,h,s,a,u,f,c,i,r,g,l,y,b,v,S,$,C,M,T,E,D,P,L,N,R]}class yA extends Fe{constructor(e){super(),Le(this,e,bA,_A,Ae,{})}}function Gm(n){let e,t;return e=new Ne({props:{class:"form-field disabled",name:"id",$$slots:{default:[vA,({uniqueId:i})=>({31:i}),({uniqueId:i})=>[0,i?1:0]]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s[0]&2|s[1]&3&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){F(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function vA(n){let e,t,i,s,l,r,o,a,u;return{c(){e=_("label"),t=_("i"),i=O(),s=_("span"),s.textContent="ID",r=O(),o=_("input"),p(t,"class",U.getFieldTypeIcon("primary")),p(s,"class","txt"),p(e,"for",l=n[31]),p(o,"type","text"),p(o,"id",a=n[31]),o.value=u=n[1].id,o.disabled=!0},m(f,c){w(f,e,c),m(e,t),m(e,i),m(e,s),w(f,r,c),w(f,o,c)},p(f,c){c[1]&1&&l!==(l=f[31])&&p(e,"for",l),c[1]&1&&a!==(a=f[31])&&p(o,"id",a),c[0]&2&&u!==(u=f[1].id)&&o.value!==u&&(o.value=u)},d(f){f&&k(e),f&&k(r),f&&k(o)}}}function Zm(n){let e,t,i,s;return{c(){e=_("div"),e.innerHTML='<i class="ri-shield-check-line"></i>',p(e,"class","form-field-addon txt-success")},m(l,r){w(l,e,r),i||(s=Xe(t=St.call(null,e,"Verified")),i=!0)},d(l){l&&k(e),i=!1,s()}}}function kA(n){let e,t,i,s,l,r,o,a,u,f,c,d=n[1].verified&&Zm();return{c(){e=_("label"),t=_("i"),i=O(),s=_("span"),s.textContent="Email",r=O(),d&&d.c(),o=O(),a=_("input"),p(t,"class",U.getFieldTypeIcon("email")),p(s,"class","txt"),p(e,"for",l=n[31]),p(a,"type","email"),p(a,"autocomplete","off"),p(a,"id",u=n[31]),a.required=!0},m(h,g){w(h,e,g),m(e,t),m(e,i),m(e,s),w(h,r,g),d&&d.m(h,g),w(h,o,g),w(h,a,g),$e(a,n[2]),f||(c=X(a,"input",n[19]),f=!0)},p(h,g){g[1]&1&&l!==(l=h[31])&&p(e,"for",l),h[1].verified?d||(d=Zm(),d.c(),d.m(o.parentNode,o)):d&&(d.d(1),d=null),g[1]&1&&u!==(u=h[31])&&p(a,"id",u),g[0]&4&&a.value!==h[2]&&$e(a,h[2])},d(h){h&&k(e),h&&k(r),d&&d.d(h),h&&k(o),h&&k(a),f=!1,c()}}}function xm(n){let e,t;return e=new Ne({props:{class:"form-field form-field-toggle",$$slots:{default:[wA,({uniqueId:i})=>({31:i}),({uniqueId:i})=>[0,i?1:0]]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s[0]&8|s[1]&3&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){F(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function wA(n){let e,t,i,s,l,r,o,a;return{c(){e=_("input"),i=O(),s=_("label"),l=H("Change password"),p(e,"type","checkbox"),p(e,"id",t=n[31]),p(s,"for",r=n[31])},m(u,f){w(u,e,f),e.checked=n[3],w(u,i,f),w(u,s,f),m(s,l),o||(a=X(e,"change",n[20]),o=!0)},p(u,f){f[1]&1&&t!==(t=u[31])&&p(e,"id",t),f[0]&8&&(e.checked=u[3]),f[1]&1&&r!==(r=u[31])&&p(s,"for",r)},d(u){u&&k(e),u&&k(i),u&&k(s),o=!1,a()}}}function Xm(n){let e,t,i,s,l,r,o,a,u;return s=new Ne({props:{class:"form-field required",name:"pasLine truncated
<span class="txt">Send verification email</span>`,p(e,"type","button"),p(e,"class","dropdown-item")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[16]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function TA(n){let e,t,i,s,l=!n[1].verified&&tg(n);return{c(){l&&l.c(),e=O(),t=_("button"),t.innerHTML=`<i class="ri-delete-bin-7-line"></i>
<span class="txt">Delete</span>`,p(t,"type","button"),p(t,"class","dropdown-item")},m(r,o){l&&l.m(r,o),w(r,e,o),w(r,t,o),i||(s=X(t,"click",n[17]),i=!0)},p(r,o){r[1].verified?l&&(l.d(1),l=null):l?l.p(r,o):(l=tg(r),l.c(),l.m(e.parentNode,e))},d(r){l&&l.d(r),r&&k(e),r&&k(t),i=!1,s()}}}function DA(n){let e,t,i,s,l,r,o=n[1].isNew?"Create":"Save changes",a,u,f,c,d,h=!n[1].isNew&&eg(n);return{c(){h&&h.c(),e=O(),t=_("button"),i=_("span"),i.textContent="Cancel",s=O(),l=_("button"),r=_("span"),a=H(o),p(i,"class","txt"),p(t,"type","button"),p(t,"class","btn btn-secondary"),t.disabled=n[5],p(r,"class","txt"),p(l,"type","submit"),p(l,"form",n[11]),p(l,"class","btn btn-expanded"),l.disabled=u=!n[10]||n[5],Q(l,"btn-loading",n[5])},m(g,y){h&&h.m(g,y),w(g,e,y),w(g,t,y),m(t,i),w(g,s,y),w(g,l,y),m(l,r),m(r,a),f=!0,c||(d=X(t,"click",n[18]),c=!0)},p(g,y){g[1].isNew?h&&(Oe(),F(h,1,1,()=>{h=null}),Te()):h?(h.p(g,y),y[0]&2&&A(h,1)):(h=eg(g),h.c(),A(h,1),h.m(e.parentNode,e)),(!f||y[0]&32)&&(t.disabled=g[5]),(!f||y[0]&2)&&o!==(o=g[1].isNew?"Create":"Save changes")&&_e(a,o),(!f||y[0]&1056&&u!==(u=!g[10]||g[5]))&&(l.disabled=u),y[0]&32&&Q(l,"btn-loading",g[5])},i(g){f||(A(h),f=!0)},o(g){F(h),f=!1},d(g){h&&h.d(g),g&&k(e),g&&k(t),g&&k(s),g&&k(l),c=!1,d()}}}function AA(n){let e,t,i={popup:!0,class:"user-panel",beforeHide:n[24],$$slots:{footer:[DA],header:[OA],default:[MA]},$$scope:{ctx:n}};return e=new Di({props:i}),n[25](e),e.$on("hide",n[26]),e.$on("show",n[27]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,l){const r={};l[0]&1088&&(r.beforeHide=s[24]),l[0]&1966|l[1]&2&&(r.$$scope={dirty:l,ctx:s}),e.$set(r)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){F(e.$$.fragment,s),t=!1},d(s){n[25](null),z(e,s)}}}function EA(n,e,t){let i;const s=_n(),l="user_"+U.randomString(5);let r,o=new to,a=!1,u=!1,f="",c="",d="",h=!1,g=!0;function y(Y){return v(Y),t(6,u=!0),r==null?void 0:r.show()}function b(){return r==null?void 0:r.hide()}function v(Y){Wi({}),t(1,o=Y!=null&&Y.clone?Y.clone():new to),S()}function S(){t(3,h=!1),t(9,g=!0),t(2,f=(o==null?void 0:o.email)||""),t(7,c=""),t(8,d="")}function $(){if(a||!i)return;t(5,a=!0);const Y={email:f};(o.isNew||h)&&(Y.password=c,Y.passwordConfirm=d);let ne;o.isNew?ne=we.Users.create(Y):ne=we.Users.update(o.id,Y),ne.then(async fe=>{g&&M(!1),t(6,u=!1),b(),mn(o.isNew?"Successfully created user.":"Successfully updated user."),s("save",fe)}).catch(fe=>{we.errorResponseHandler(fe)}).finally(()=>{t(5,a=!1)})}function C(){!(o!=null&&o.id)||Ci("Do you really want to delete the selected user?",()=>we.Users.delete(o.id).then(()=>{t(6,u=!1),b(),mn("Successfully deleted user."),s("delete",o)}).catch(Y=>{we.errorResponseHandler(Y)}))}function M(Y=!0){return we.Users.requestVerification(o.isNew?f:o.email).then(()=>{t(6,u=!1),b(),Y&&mn(`Successfully sent verification email to ${o.email}.`)}).catch(ne=>{we.errorResponseHandler(ne)})}const T=()=>M(),E=()=>C(),D=()=>b();function P(){f=this.value,t(2,f)}function L(){h=this.checked,t(3,h)}function N(){c=this.value,t(7,c)}function R(){d=this.value,t(8,d)}function J(){g=this.checked,t(9,g)}const W=()=>i&&u?(Ci("You have unsaved changes. Do you really want to close the panel?",()=>{t(6,u=!1),b()}),!1):!0;function q(Y){he[Y?"unshift":"push"](()=>{r=Y,t(4,r)})}function G(Y){ut.call(this,n,Y)}function K(Y){ut.call(this,n,Y)}return n.$$.update=()=>{n.$$.dirty[0]&14&&t(10,i=o.isNew&&f!=""||h||f!==o.email)},[b,o,f,h,r,a,u,c,d,g,i,l,$,C,M,y,T,E,D,P,L,N,R,J,W,q,G,K]}class PA extends Fe{constructor(e){super(),Le(this,e,EA,AA,Ae,{show:15,hide:0},null,[-1,-1])}get show(){return this.$$.ctx[15]}get hide(){return this.$$.ctx[0]}}function ng(n,e,t){const i=n.slice();return i[37]=e[t],i}function ig(n,e,t){const i=n.slice();return i[40]=e[t],i}function sg(n,e,t){const i=n.slice();return i[40]=e[t],i}function LA(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S,$,C,M,T,E=[],D=new Map,P,L,N,R,J,W,q,G,K,Y,ne=[],fe=new Map,ye,se,Z,De,te;c=new Ao({props:{value:n[3],placeholder:"Search filter, eg. verified=1",extraAutocompleteKeys:["verified","email"]}}),c.$on("submit",n[17]);function be(x){n[18](x)}let ue={class:"col-type-text col-field-id",name:"id",$$slots:{default:[IA]},$$scope:{ctx:n}};n[4]!==void 0&&(ue.sort=n[4]),v=new Qt({props:ue}),he.push(()=>Re(v,"sort",be));function ie(x){n[19](x)}let ve={class:"col-type-email col-field-email",name:"email",$$slots:{default:[NA]},$$scope:{ctx:n}};n[4]!==void 0&&(ve.sort=n[4]),C=new Qt({props:ve}),he.push(()=>Re(C,"sort",ie));let He=n[12];const Ie=x=>x[40].name;for(let x=0;x<He.length;x+=1){let ae=sg(n,He,x),Be=Ie(ae);D.set(Be,E[x]=lg(Be,ae))}function qe(x){n[20](x)}let oe={class:"col-type-date col-field-created",name:"created",$$slots:{default:[RA]},$$scope:{ctx:n}};n[4]!==void 0&&(oe.sort=n[4]),L=new Qt({props:oe}),he.push(()=>Re(L,"sort",qe));function le(x){n[21](x)}let ke={class:"col-type-date col-field-updated",name:"updated",$$slots:{default:[jA]},$$scope:{ctx:n}};n[4]!==void 0&&(ke.sort=n[4]),J=new Qt({props:ke}),he.push(()=>Re(J,"sort",le)Line truncated
<span class="txt">New user</span>`,f=O(),B(c.$$.fragment),d=O(),h=_("div"),g=_("table"),y=_("thead"),b=_("tr"),B(v.$$.fragment),$=O(),B(C.$$.fragment),T=O();for(let x=0;x<E.length;x+=1)E[x].c();P=O(),B(L.$$.fragment),R=O(),B(J.$$.fragment),q=O(),G=_("th"),K=O(),Y=_("tbody");for(let x=0;x<ne.length;x+=1)ne[x].c();Ze&&Ze.c(),ye=O(),ge&&ge.c(),se=O(),Ee&&Ee.c(),p(i,"class","breadcrumbs"),p(l,"type","button"),p(l,"class","btn btn-secondary btn-circle"),p(o,"class","flex-fill"),p(u,"type","button"),p(u,"class","btn btn-expanded"),p(t,"class","page-header"),p(G,"class","col-type-action min-width"),p(g,"class","table"),Q(g,"table-loading",n[10]),p(h,"class","table-wrapper"),p(e,"class","page-wrapper")},m(x,ae){w(x,e,ae),m(e,t),m(t,i),m(t,s),m(t,l),m(t,r),m(t,o),m(t,a),m(t,u),m(e,f),V(c,e,null),m(e,d),m(e,h),m(h,g),m(g,y),m(y,b),V(v,b,null),m(b,$),V(C,b,null),m(b,T);for(let Be=0;Be<E.length;Be+=1)E[Be].m(b,null);m(b,P),V(L,b,null),m(b,R),V(J,b,null),m(b,q),m(b,G),m(g,K),m(g,Y);for(let Be=0;Be<ne.length;Be+=1)ne[Be].m(Y,null);Ze&&Ze.m(Y,null),m(e,ye),ge&&ge.m(e,null),m(e,se),Ee&&Ee.m(e,null),Z=!0,De||(te=[Xe(St.call(null,l,{text:"Edit profile collection",position:"right"})),X(l,"click",n[15]),X(u,"click",n[16])],De=!0)},p(x,ae){const Be={};ae[0]&8&&(Be.value=x[3]),c.$set(Be);const vt={};ae[1]&16384&&(vt.$$scope={dirty:ae,ctx:x}),!S&&ae[0]&16&&(S=!0,vt.sort=x[4],je(()=>S=!1)),v.$set(vt);const it={};ae[1]&16384&&(it.$$scope={dirty:ae,ctx:x}),!M&&ae[0]&16&&(M=!0,it.sort=x[4],je(()=>M=!1)),C.$set(it),ae[0]&4096&&(He=x[12],E=ot(E,ae,Ie,1,x,He,D,b,an,lg,P,sg));const gt={};ae[1]&16384&&(gt.$$scope={dirty:ae,ctx:x}),!N&&ae[0]&16&&(N=!0,gt.sort=x[4],je(()=>N=!1)),L.$set(gt);const at={};ae[1]&16384&&(at.$$scope={dirty:ae,ctx:x}),!W&&ae[0]&16&&(W=!0,at.sort=x[4],je(()=>W=!1)),J.$set(at),ae[0]&5450&&(Ve=x[1],Oe(),ne=ot(ne,ae,ze,1,x,Ve,fe,Y,Lt,ug,null,ng),Te(),!Ve.length&&Ze?Ze.p(x,ae):Ve.length?Ze&&(Ze.d(1),Ze=null):(Ze=rg(x),Ze.c(),Ze.m(Y,null))),ae[0]&1024&&Q(g,"table-loading",x[10]),x[1].length?ge?ge.p(x,ae):(ge=fg(x),ge.c(),ge.m(e,se)):ge&&(ge.d(1),ge=null),x[1].length&&x[13]?Ee?Ee.p(x,ae):(Ee=cg(x),Ee.c(),Ee.m(e,null)):Ee&&(Ee.d(1),Ee=null)},i(x){if(!Z){A(c.$$.fragment,x),A(v.$$.fragment,x),A(C.$$.fragment,x),A(L.$$.fragment,x),A(J.$$.fragment,x);for(let ae=0;ae<Ve.length;ae+=1)A(ne[ae]);Z=!0}},o(x){F(c.$$.fragment,x),F(v.$$.fragment,x),F(C.$$.fragment,x),F(L.$$.fragment,x),F(J.$$.fragment,x);for(let ae=0;ae<ne.length;ae+=1)F(ne[ae]);Z=!1},d(x){x&&k(e),z(c),z(v),z(C);for(let ae=0;ae<E.length;ae+=1)E[ae].d();z(L),z(J);for(let ae=0;ae<ne.length;ae+=1)ne[ae].d();Ze&&Ze.d(),ge&&ge.d(),Ee&&Ee.d(),De=!1,rt(te)}}}function FA(n){let e;return{c(){e=_("div"),e.innerHTML=`<span class="loader loader-lg"></span>
<h1>Loading users...</h1>`,p(e,"class","placeholder-section m-b-base")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function IA(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="id",p(t,"class",U.getFieldTypeIcon("primary")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function NA(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="email",p(t,"class",U.getFieldTypeIcon("email")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function lg(n,e){let t,i,s,l,r,o,a,u=e[40].name+"",f,c,d;return{key:n,first:null,c(){t=_("th"),i=_("div"),s=_("i"),r=O(),o=_("span"),a=H("profile."),f=H(u),p(s,"class",l=U.getFieldTypeIcon(e[40].type)),p(o,"class","txt"),p(i,"class","col-header-content"),p(t,"class",c="col-type-"+e[40].type+" col-field-"+e[40].name),p(t,"name",d=e[40].name),this.first=t},m(h,g){w(h,t,g),m(t,i),m(i,s),m(i,r),m(i,o),m(o,a),m(o,f)},p(h,g){e=h,g[0]&4096&&l!==(l=U.getFieldTypeIcon(e[40].type))&&p(s,"class",l),g[0]&4096&&u!==(u=e[40].name+"")&&_e(f,u),g[0]&4096&&c!==(c="col-type-"+e[40].type+" col-field-"+e[40].name)&&p(t,"class",c),g[0]&4096&&d!==(d=e[40].name)&&p(t,"name",d)},d(h){h&&k(t)}}}function RA(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="created",p(t,"class",U.getFieldTypeIcon("date")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function jA(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="updated",p(t,"class",U.getFieldTypeIcon("date")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function rg(n){let e;function t(l,r){return l[10]?qA:HA}let i=t(n),s=i(n);return{c(){s.c(),e=lt()},m(l,r){s.m(l,r),w(l,e,r)},p(l,r){i===(i=t(l))&&s?s.p(l,r):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},d(l){s.d(l),l&&k(e)}}}function HA(n){var o;let e,t,i,s,l,r=((o=n[3])==null?void 0:o.length)&&og(n);return{c(){e=_("tr"),t=_("td"),i=_("h6"),i.textContent="No users found.",s=O(),r&&r.c(),l=O(),p(t,"colspan","99"),p(t,"class","txt-center txt-hint p-xs")},m(a,u){w(a,e,u),m(e,t),m(t,i),m(t,s),r&&r.m(t,null),m(e,l)},p(a,u){var f;(f=a[3])!=null&&f.length?r?r.p(a,u):(r=og(a),r.c(),r.m(t,null)):r&&(r.d(1),r=null)},d(a){a&&k(e),r&&r.d()}}}function qA(n){let e;return{c(){e=_("tr"),e.innerHTML=`<td colspan="99" class="p-xs"><span class="skeleton-loader"></span></td>
`},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function og(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Clear filters</span>',p(e,"type","button"),p(e,"class","btn btn-hint btn-expanded m-t-sm")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[24]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function ag(n,e){let t,i,s;return i=new jb({props:{field:e[40],record:e[37].profile||{}}}),{key:n,first:null,c(){t=lt(),B(i.$$.fragment),this.first=t},m(l,r){w(l,t,r),V(i,l,r),s=!0},p(l,r){e=l;const o={};r[0]&4096&&(o.field=e[40]),r[0]&2&&(o.record=e[37].profile||{}),i.$set(o)},i(l){s||(A(i.$$.fragment,l),s=!0)},o(l){F(i.$$.fragment,l),s=!1},d(l){l&&k(t),z(i,l)}}}function ug(n,e){let t,i,s,l,r,o,a,u=e[37].email+"",f,c,d,h,g=e[37].verified?"Verified":"Unverified",y,b,v=[],S=new Map,$,C,M,T,E,D,P,L,N,R,J,W,q,G,K;s=new No({props:{id:e[37].id}});let Y=e[12];const ne=se=>se[40].name;for(let se=0;se<Y.length;se+=1){let Z=ig(e,Y,se),De=ne(Z);S.set(De,v[se]=ag(De,Z))}M=new $i({props:{date:e[37].created}}),D=new $i({props:{date:e[37].updated}});function fe(){return e[22](e[37])}function ye(){return e[23](e[37])}return{key:n,first:null,c(){t=_("tr"),i=_("td"),B(s.$$.fragment),l=O(),r=_("td"),o=_("div"),a=_("span"),f=H(u),d=O(),h=_("span"),y=H(g),b=O();for(let se=0;se<v.length;se+=1)v[se].c();$=O(),C=_("td"),B(M.$$.fragment),T=O(),E=_("td"),B(D.$$.fragment),P=O(),L=_("td"),N=_("button"),N.innerHTML=`<i class="ri-user-settings-line"></i>
<span class="txt">Edit user</span>`,R=O(),J=_("button"),J.innerHTML=`<i class="ri-profile-line"></i>
<span class="txt">Edit profile</span>`,W=O(),p(i,"class","col-type-text col-field-id"),p(a,"class","txt"),p(a,"title",c=e[37].email),p(h,"class","label"),Q(h,"label-success",e[37].verified),Q(h,"label-warning",!e[37].verified),p(o,"class","inline-flex"),p(r,"class","col-type-email col-field-email"),p(C,"class","col-type-date col-field-created"),p(E,"class","col-type-date col-field-updated"),p(N,"type","button"),p(N,"class","btn btn-sm btn-outline"),p(J,"type","button"),p(J,"class","btn btn-sm m-l-10"),p(L,"class","col-type-action min-width"),this.first=t},m(se,Z){w(se,t,Z),m(t,i),V(s,i,null),m(t,l),m(t,r),m(r,o),m(o,a),m(a,f),m(o,d),m(o,h),m(h,y),m(t,b);for(let De=0;De<v.length;De+=1)v[De].m(t,null);m(t,$),m(t,C),V(M,C,null),m(t,T),m(t,E),V(D,E,null),m(t,P),m(t,L),m(L,N),m(L,R),m(L,J),m(t,W),q=!0,G||(K=[X(N,"click",Un(fe)),X(J,"click",Un(ye))],G=!0)},p(se,Z){e=se;const De={};Z[0]&2&&(De.id=e[37].id),s.$set(De),(!q||Z[0]&2)&&u!==(u=e[37].email+"")&&_e(f,u),(!q||Z[0]&2&&c!==(c=e[37].email))&&p(a,"title",c),(!q||Z[0]&2)&&g!==(g=e[37].verified?"Verified":"Unverified")&&_e(y,g),Z[0]&2&&Q(h,"label-success",e[37].verified),Z[0]&2&&Q(h,"label-warning",!e[37].verified),Z[0]&4098&&(Y=e[12],Oe(),v=ot(v,Z,ne,1,e,Y,S,t,Lt,ag,$,ig),Te());const te={};Z[0]&2&&(te.date=e[37].created),M.$set(te);const be={};Z[0]&2&&(be.date=e[37].updated),D.$set(be)},i(se){if(!q){A(s.$$.fragment,se);for(let Z=0;Z<Y.length;Z+=1)A(v[Z]);A(M.$$.fragment,se),A(D.$$.fragment,se),q=!0}},o(se){F(s.$$.fragment,se);for(let Z=0;Z<v.length;Z+=1)F(v[Z]);F(M.$$.fragment,se),F(D.$$.fragment,se),q=!1},d(se){se&&k(t),z(s);for(let Z=0;Z<v.length;Z+=1)v[Z].d();z(M),z(D),G=!1,rt(K)}}}function fg(n){let e,t,i=n[1].length+"",s,l,r;return{c(){e=_("small"),t=H("Showing "),s=H(i),l=H(" of "),r=H(n[2]),p(e,"class","block txt-hint txt-right m-t-sm")},m(o,a){w(o,e,a),m(e,t),m(e,s),m(e,l),m(e,r)},p(o,a){a[0]&2&&i!==(i=o[1].length+"")&&_e(s,i),a[0]&4&&_e(r,o[2])},d(o){o&&k(e)}}}function cg(n){let e,t,i,s,l=n[2]-n[1].length+"",r,o,a,u;return{c(){e=_("div"),t=_("button"),i=_("span"),s=H("Load more ("),r=H(l),o=H(")"),p(i,"class","txt"),p(t,"type","button"),p(t,"class","btn btn-lg btn-secondary btn-expanded"),Q(t,"btn-loading",n[10]),Q(t,"btn-disabled",n[10]),p(e,"class","block txt-center m-t-xs")},m(f,c){w(f,e,c),m(e,t),m(t,i),m(i,s),m(i,r),m(i,o),a||(u=X(t,"click",n[25]),a=!0)},p(f,c){c[0]&6&&l!==(l=f[2]-f[1].length+"")&&_e(r,l),c[0]&1024&&Q(t,"btn-loading",f[10]),c[0]&1024&&Q(t,"btn-disabled",f[10])},d(f){f&&k(e),a=!1,u()}}}function VA(n){let e,t,i,s,l,r,o,a,u;const f=[FA,LA],c=[];function d(b,v){return b[11]?0:1}e=d(n),t=c[e]=f[e](n);let h={};s=new PA({props:h}),n[26](s),s.$on("save",n[27]),s.$on("delete",n[28]);let g={};r=new hf({props:g}),n[29](r),r.$on("save",n[30]);let y={collection:n[5]};return a=new Rb({props:y}),n[31](a),a.$on("save",n[32]),{c(){t.c(),i=O(),B(s.$$.fragment),l=O(),B(r.$$.fragment),o=O(),B(a.$$.fragment)},m(b,v){c[e].m(b,v),w(b,i,v),V(s,b,v),w(b,l,v),V(r,b,v),w(b,o,v),V(a,b,v),u=!0},p(b,v){let S=e;e=d(b),e===S?c[e].p(b,v):(Oe(),F(c[S],1,1,()=>{c[S]=null}),Te(),t=c[e],t?t.p(b,v):(t=c[e]=f[e](b),t.c()),A(t,1),t.m(i.parentNode,i));const $={};s.$set($);const C={};r.$set(C);const M={};v[0]&32&&(M.collection=b[5]),a.$set(M)},i(b){u||(A(t),A(s.$$.fragment,b),A(r.$$.fragment,b),A(a.$$.fragment,b),u=!0)},o(b){F(t),F(s.$$.fragment,b),F(r.$$.fragment,b),F(a.$$.fragment,b),u=!1},d(b){c[e].d(b),b&&k(i),n[26](null),z(s,b),b&&k(l),n[29](null),z(r,b),b&&k(o),n[31](null),z(a,b)}}}function zA(n,e,t){var De;let i,s;const l=U.getQueryParams((De=window.location)==null?void 0:De.href),r=["id","userId","created","updated"];let o,a,u,f=[],c=1,d=0,h=!1,g=l.filter||"",y=l.sort||"-created",b=new Ln,v=!1;U.setDocumentTitle("Users"),M();async function S(te=1){return t(10,h=!0),we.Users.getList(te,50,{sort:y||"-created",filter:g}).then(be=>{te<=1&&$(),t(10,h=!1),t(1,f=f.concat(be.items)),t(9,c=be.page),t(2,d=be.totalItems)}).catch(be=>{be!==null&&(t(10,h=!1),console.warn(be),$(),we.errorResponseHandler(be,!1))})}function $(){t(1,f=[]),t(9,c=1),t(2,d=0)}function C(te){const be=f.find(ue=>ue.id===(te==null?void 0:te.userId));be&&(be.profile=te),t(1,f)}async function M(){t(11,v=!0);try{t(5,b=await we.Collections.getOne("profiles"))}catch(te){we.errorResponseHandler(te)}t(11,v=!1)}const T=()=>a==null?void 0:a.show(b),E=()=>o==null?void 0:o.show(),D=te=>t(3,g=te.detail);function P(te){y=te,t(4,y)}function L(te){y=te,t(4,y)}function N(te){y=te,t(4,y)}function R(te){y=te,t(4,y)}const J=te=>o==null?void 0:o.show(te),W=te=>u==null?void 0:u.show(te.profile),q=()=>t(3,g=""),G=()=>S(c+1);function K(te){he[te?"unshift":"push"](()=>{o=te,t(6,o)})}const Y=()=>S(),ne=()=>S();function fe(te){he[te?"unshift":"push"](()=>{a=te,t(7,a)})}const ye=te=>t(5,b=te.detail);function se(te){he[te?"unshift":"push"](()=>{u=te,t(8,u)})}const Z=te=>C(te.detail);return n.$$.update=()=>{var te;n.$$.dirty[0]&24&&y!==-1&&g!==-1&&(U.replaceClientQueryParams({filter:g,sort:y}),SLine truncated
<span class="txt">Application</span>`,r=O(),o=_("a"),o.innerHTML=`<i class="ri-send-plane-2-line"></i>
<span class="txt">Mail settings</span>`,a=O(),u=_("a"),u.innerHTML=`<i class="ri-archive-drawer-line"></i>
<span class="txt">Files storage</span>`,f=O(),c=_("div"),c.textContent="Authentication",d=O(),h=_("a"),h.innerHTML=`<i class="ri-lock-password-line"></i>
<span class="txt">Auth providers</span>`,g=O(),y=_("a"),y.innerHTML=`<i class="ri-key-line"></i>
<span class="txt">Token options</span>`,b=O(),v=_("a"),v.innerHTML=`<i class="ri-shield-user-line"></i>
<span class="txt">Admins</span>`,p(i,"class","sidebar-title"),p(l,"href","/settings"),p(l,"class","sidebar-list-item"),p(o,"href","/settings/mail"),p(o,"class","sidebar-list-item"),p(u,"href","/settings/storage"),p(u,"class","sidebar-list-item"),p(c,"class","sidebar-title"),p(h,"href","/settings/auth-providers"),p(h,"class","sidebar-list-item"),p(y,"href","/settings/tokens"),p(y,"class","sidebar-list-item"),p(v,"href","/settings/admins"),p(v,"class","sidebar-list-item"),p(t,"class","sidebar-content"),p(e,"class","page-sidebar settings-sidebar")},m(C,M){w(C,e,M),m(e,t),m(t,i),m(t,s),m(t,l),m(t,r),m(t,o),m(t,a),m(t,u),m(t,f),m(t,c),m(t,d),m(t,h),m(t,g),m(t,y),m(t,b),m(t,v),S||($=[Xe(oi.call(null,l,{path:"/settings"})),Xe(Mn.call(null,l)),Xe(oi.call(null,o,{path:"/settings/mail/?.*"})),Xe(Mn.call(null,o)),Xe(oi.call(null,u,{path:"/settings/storage/?.*"})),Xe(Mn.call(null,u)),Xe(oi.call(null,h,{path:"/settings/auth-providers/?.*"})),Xe(Mn.call(null,h)),Xe(oi.call(null,y,{path:"/settings/tokens/?.*"})),Xe(Mn.call(null,y)),Xe(oi.call(null,v,{path:"/settings/admins/?.*"})),Xe(Mn.call(null,v))],S=!0)},p:re,i:re,o:re,d(C){C&&k(e),S=!1,rt($)}}}class tl extends Fe{constructor(e){super(),Le(this,e,null,UA,Ae,{})}}function dg(n,e,t){const i=n.slice();return i[31]=e[t],i}function pg(n){let e,t;return e=new Ne({props:{class:"form-field disabled",name:"id",$$slots:{default:[WA,({uniqueId:i})=>({30:i}),({uniqueId:i})=>[i?1073741824:0]]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s[0]&1073741826|s[1]&8&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){F(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function WA(n){let e,t,i,s,l,r,o,a,u;return{c(){e=_("label"),t=_("i"),i=O(),s=_("span"),s.textContent="ID",r=O(),o=_("input"),p(t,"class",U.getFieldTypeIcon("primary")),p(s,"class","txt"),p(e,"for",l=n[30]),p(o,"type","text"),p(o,"id",a=n[30]),o.value=u=n[1].id,o.disabled=!0},m(f,c){w(f,e,c),m(e,t),m(e,i),m(e,s),w(f,r,c),w(f,o,c)},p(f,c){c[0]&1073741824&&l!==(l=f[30])&&p(e,"for",l),c[0]&1073741824&&a!==(a=f[30])&&p(o,"id",a),c[0]&2&&u!==(u=f[1].id)&&o.value!==u&&(o.value=u)},d(f){f&&k(e),f&&k(r),f&&k(o)}}}function hg(n){let e,t,i,s,l,r,o,a;function u(){return n[17](n[31])}function f(...c){return n[18](n[31],...c)}return{c(){e=_("figure"),t=_("img"),l=O(),ei(t.src,i="/_/images/avatars/avatar"+n[31]+".svg")||p(t,"src",i),p(t,"alt",s="Avatar "+n[31]),p(e,"tabindex","0"),p(e,"class",r="link-fade thumb thumb-circle "+(n[31]==n[2]?"thumb-active":"thumb-sm"))},m(c,d){w(c,e,d),m(e,t),m(e,l),o||(a=[X(e,"click",u),X(e,"keydown",f)],o=!0)},p(c,d){n=c,d[0]&4&&r!==(r="link-fade thumb thumb-circle "+(n[31]==n[2]?"thumb-active":"thumb-sm"))&&p(e,"class",r)},d(c){c&&k(e),o=!1,rt(a)}}}function YA(n){let e,t,i,s,l,r,o,a,u,f;return{c(){e=_("label"),t=_("i"),i=O(),s=_("span"),s.textContent="Email",r=O(),o=_("input"),p(t,"class",U.getFieldTypeIcon("email")),p(s,"class","txt"),p(e,"for",l=n[30]),p(o,"type","email"),p(o,"autocomplete","off"),p(o,"id",a=n[30]),o.required=!0},m(c,d){w(c,e,d),m(e,t),m(e,i),m(e,s),w(c,r,d),w(c,o,d),$e(o,n[3]),u||(f=X(o,"input",n[19]),u=!0)},p(c,d){d[0]&1073741824&&l!==(l=c[30])&&p(e,"for",l),d[0]&1073741824&&a!==(a=c[30])&&p(o,"id",a),d[0]&8&&o.value!==c[3]&&$e(o,c[3])},d(c){c&&k(e),c&&k(r),c&&k(o),u=!1,f()}}}function mg(n){let e,t;return e=new Ne({props:{class:"form-field form-field-toggle",$$slots:{default:[KA,({uniqueId:i})=>({30:i}),({uniqueId:i})=>[i?1073741824:0]]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,s){const l={};s[0]&1073741840|s[1]&8&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){F(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function KA(n){let e,t,i,s,l,r,o,a;return{c(){e=_("input"),i=O(),s=_("label"),l=H("Change password"),p(e,"type","checkbox"),p(e,"id",t=n[30]),p(s,"for",r=n[30])},m(u,f){w(u,e,f),e.checked=n[4],w(u,i,f),w(u,s,f),m(s,l),o||(a=X(e,"change",n[20]),o=!0)},p(u,f){f[0]&1073741824&&t!==(t=u[30])&&p(e,"id",t),f[0]&16&&(e.checked=u[4]),f[0]&1073741824&&r!==(r=u[30])&&p(s,"for",r)},d(u){u&&k(e),u&&k(i),u&&k(s),o=!1,a()}}}function gg(n){let e,t,i,s,l,r,o,a,u;return s=new Ne({props:{class:"form-field required",name:"password",$$slots:{default:[JA,({uniqueId:f})=>({30:f}),({uniqueId:f})=>[f?1073741824:0]]},$$scope:{ctx:n}}}),o=new Ne({props:{class:"form-field required",name:"passwordConfirm",$$slots:{default:[GA,({uniqueId:f})=>({30:f}),({uniqueId:f})=>[f?1073741824:0]]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),i=_("div"),B(s.$$.fragment),l=O(),r=_("div"),B(o.$$.fragment),p(i,"class","col-sm-6"),p(r,"class","col-sm-6"),p(t,"class","grid"),p(e,"class","col-12")},m(f,c){w(f,e,c),m(e,t),m(t,i),V(s,i,null),m(t,l),m(t,r),V(o,r,null),u=!0},p(f,c){const d={};c[0]&1073742080|c[1]&8&&(d.$$scope={dirty:c,ctx:f}),s.$set(d);const h={};c[0]&1073742336|c[1]&8&&(h.$$scope={dirty:c,ctx:f}),o.$set(h)},i(f){u||(A(s.$$.fragment,f),A(o.$$.fragment,f),Dt(()=>{a||(a=ft(t,un,{duration:150},!0)),a.Line truncated
<span class="txt">Delete</span>`,p(e,"type","button"),p(e,"class","dropdown-item")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[15]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function QA(n){let e,t,i,s,l,r,o=n[1].isNew?"Create":"Save changes",a,u,f,c,d,h=!n[1].isNew&&_g(n);return{c(){h&&h.c(),e=O(),t=_("button"),i=_("span"),i.textContent="Cancel",s=O(),l=_("button"),r=_("span"),a=H(o),p(i,"class","txt"),p(t,"type","button"),p(t,"class","btn btn-secondary"),t.disabled=n[6],p(r,"class","txt"),p(l,"type","submit"),p(l,"form",n[11]),p(l,"class","btn btn-expanded"),l.disabled=u=!n[10]||n[6],Q(l,"btn-loading",n[6])},m(g,y){h&&h.m(g,y),w(g,e,y),w(g,t,y),m(t,i),w(g,s,y),w(g,l,y),m(l,r),m(r,a),f=!0,c||(d=X(t,"click",n[16]),c=!0)},p(g,y){g[1].isNew?h&&(Oe(),F(h,1,1,()=>{h=null}),Te()):h?(h.p(g,y),y[0]&2&&A(h,1)):(h=_g(g),h.c(),A(h,1),h.m(e.parentNode,e)),(!f||y[0]&64)&&(t.disabled=g[6]),(!f||y[0]&2)&&o!==(o=g[1].isNew?"Create":"Save changes")&&_e(a,o),(!f||y[0]&1088&&u!==(u=!g[10]||g[6]))&&(l.disabled=u),y[0]&64&&Q(l,"btn-loading",g[6])},i(g){f||(A(h),f=!0)},o(g){F(h),f=!1},d(g){h&&h.d(g),g&&k(e),g&&k(t),g&&k(s),g&&k(l),c=!1,d()}}}function eE(n){let e,t,i={popup:!0,class:"admin-panel",beforeHide:n[23],$$slots:{footer:[QA],header:[xA],default:[ZA]},$$scope:{ctx:n}};return e=new Di({props:i}),n[24](e),e.$on("hide",n[25]),e.$on("show",n[26]),{c(){B(e.$$.fragment)},m(s,l){V(e,s,l),t=!0},p(s,l){const r={};l[0]&1152&&(r.beforeHide=s[23]),l[0]&1886|l[1]&8&&(r.$$scope={dirty:l,ctx:s}),e.$set(r)},i(s){t||(A(e.$$.fragment,s),t=!0)},o(s){F(e.$$.fragment,s),t=!1},d(s){n[24](null),z(e,s)}}}function tE(n,e,t){let i;const s=_n(),l="admin_"+U.randomString(5);let r,o=new Us,a=!1,u=!1,f=0,c="",d="",h="",g=!1;function y(K){return v(K),t(7,u=!0),r==null?void 0:r.show()}function b(){return r==null?void 0:r.hide()}function v(K){Wi({}),t(1,o=K!=null&&K.clone?K.clone():new Us),S()}function S(){t(4,g=!1),t(3,c=(o==null?void 0:o.email)||""),t(2,f=(o==null?void 0:o.avatar)||0),t(8,d=""),t(9,h="")}function $(){if(a||!i)return;t(6,a=!0);const K={email:c,avatar:f};(o.isNew||g)&&(K.password=d,K.passwordConfirm=h);let Y;o.isNew?Y=we.Admins.create(K):Y=we.Admins.update(o.id,K),Y.then(async ne=>{var fe;t(7,u=!1),b(),mn(o.isNew?"Successfully created admin.":"Successfully updated admin."),s("save",ne),((fe=we.AuthStore.model)==null?void 0:fe.id)===ne.id&&we.AuthStore.save(we.AuthStore.token,ne)}).catch(ne=>{we.errorResponseHandler(ne)}).finally(()=>{t(6,a=!1)})}function C(){!(o!=null&&o.id)||Ci("Do you really want to delete the selected admin?",()=>we.Admins.delete(o.id).then(()=>{t(7,u=!1),b(),mn("Successfully deleted admin."),s("delete",o)}).catch(K=>{we.errorResponseHandler(K)}))}const M=()=>C(),T=()=>b(),E=K=>t(2,f=K),D=(K,Y)=>{(Y.code==="Enter"||Y.code==="Space")&&(Y.preventDefault(),t(2,f=K))};function P(){c=this.value,t(3,c)}function L(){g=this.checked,t(4,g)}function N(){d=this.value,t(8,d)}function R(){h=this.value,t(9,h)}const J=()=>i&&u?(Ci("You have unsaved changes. Do you really want to close the panel?",()=>{t(7,u=!1),b()}),!1):!0;function W(K){he[K?"unshift":"push"](()=>{r=K,t(5,r)})}function q(K){ut.call(this,n,K)}function G(K){ut.call(this,n,K)}return n.$$.update=()=>{n.$$.dirty[0]&30&&t(10,i=o.isNew&&c!=""||g||c!==o.email||f!==o.avatar)},[b,o,f,c,g,r,a,u,d,h,i,l,$,C,y,M,T,E,D,P,L,N,R,J,W,q,G]}class nE extends Fe{constructor(e){super(),Le(this,e,tE,eE,Ae,{show:14,hide:0},null,[-1,-1])}get show(){return this.$$.ctx[14]}get hide(){return this.$$.ctx[0]}}function bg(n,e,t){const i=n.slice();return i[21]=e[t],i}function iE(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="id",p(t,"class",U.getFieldTypeIcon("primary")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function sE(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="email",p(t,"class",U.getFieldTypeIcon("email")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function lE(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="created",p(t,"class",U.getFieldTypeIcon("date")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function rE(n){let e,t,i,s;return{c(){e=_("div"),t=_("i"),i=O(),s=_("span"),s.textContent="updated",p(t,"class",U.getFieldTypeIcon("date")),p(s,"class","txt"),p(e,"class","col-header-content")},m(l,r){w(l,e,r),m(e,t),m(e,i),m(e,s)},p:re,d(l){l&&k(e)}}}function yg(n){let e;function t(l,r){return l[5]?aE:oE}let i=t(n),s=i(n);return{c(){s.c(),e=lt()},m(l,r){s.m(l,r),w(l,e,r)},p(l,r){i===(i=t(l))&&s?s.p(l,r):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},d(l){s.d(l),l&&k(e)}}}function oE(n){var o;let e,t,i,s,l,r=((o=n[1])==null?void 0:o.length)&&vg(n);return{c(){e=_("tr"),t=_("td"),i=_("h6"),i.textContent="No admins found.",s=O(),r&&r.c(),l=O(),p(t,"colspan","99"),p(t,"class","txt-centeLine truncated
`},m(t,i){w(t,e,i)},p:re,d(t){t&&k(e)}}}function vg(n){let e,t,i;return{c(){e=_("button"),e.innerHTML='<span class="txt">Clear filters</span>',p(e,"type","button"),p(e,"class","btn btn-hint btn-expanded m-t-sm")},m(s,l){w(s,e,l),t||(i=X(e,"click",n[15]),t=!0)},p:re,d(s){s&&k(e),t=!1,i()}}}function kg(n){let e;return{c(){e=_("span"),e.textContent="You",p(e,"class","label label-warning m-l-5")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function wg(n,e){let t,i,s,l,r,o,a,u,f,c,d,h,g=e[21].email+"",y,b,v,S,$,C,M,T,E,D,P,L,N,R;u=new No({props:{id:e[21].id}});let J=e[21].id===e[6].id&&kg();$=new $i({props:{date:e[21].created}}),T=new $i({props:{date:e[21].updated}});function W(){return e[13](e[21])}function q(...G){return e[14](e[21],...G)}return{key:n,first:null,c(){t=_("tr"),i=_("td"),s=_("figure"),l=_("img"),o=O(),a=_("td"),B(u.$$.fragment),f=O(),J&&J.c(),c=O(),d=_("td"),h=_("span"),y=H(g),v=O(),S=_("td"),B($.$$.fragment),C=O(),M=_("td"),B(T.$$.fragment),E=O(),D=_("td"),D.innerHTML='<i class="ri-arrow-right-line"></i>',P=O(),ei(l.src,r="/_/images/avatars/avatar"+(e[21].avatar||0)+".svg")||p(l,"src",r),p(l,"alt","Admin avatar"),p(s,"class","thumb thumb-sm thumb-circle"),p(i,"class","min-width"),p(a,"class","col-type-text col-field-id"),p(h,"class","txt txt-ellipsis"),p(h,"title",b=e[21].email),p(d,"class","col-type-email col-field-email"),p(S,"class","col-type-date col-field-created"),p(M,"class","col-type-date col-field-updated"),p(D,"class","col-type-action min-width"),p(t,"tabindex","0"),p(t,"class","row-handle"),this.first=t},m(G,K){w(G,t,K),m(t,i),m(i,s),m(s,l),m(t,o),m(t,a),V(u,a,null),m(a,f),J&&J.m(a,null),m(t,c),m(t,d),m(d,h),m(h,y),m(t,v),m(t,S),V($,S,null),m(t,C),m(t,M),V(T,M,null),m(t,E),m(t,D),m(t,P),L=!0,N||(R=[X(t,"click",W),X(t,"keydown",q)],N=!0)},p(G,K){e=G,(!L||K&16&&!ei(l.src,r="/_/images/avatars/avatar"+(e[21].avatar||0)+".svg"))&&p(l,"src",r);const Y={};K&16&&(Y.id=e[21].id),u.$set(Y),e[21].id===e[6].id?J||(J=kg(),J.c(),J.m(a,null)):J&&(J.d(1),J=null),(!L||K&16)&&g!==(g=e[21].email+"")&&_e(y,g),(!L||K&16&&b!==(b=e[21].email))&&p(h,"title",b);const ne={};K&16&&(ne.date=e[21].created),$.$set(ne);const fe={};K&16&&(fe.date=e[21].updated),T.$set(fe)},i(G){L||(A(u.$$.fragment,G),A($.$$.fragment,G),A(T.$$.fragment,G),L=!0)},o(G){F(u.$$.fragment,G),F($.$$.fragment,G),F(T.$$.fragment,G),L=!1},d(G){G&&k(t),z(u),J&&J.d(),z($),z(T),N=!1,rt(R)}}}function Sg(n){let e,t,i=n[4].length+"",s,l,r=n[4].length+"",o;return{c(){e=_("small"),t=H("Showing "),s=H(i),l=H(" of "),o=H(r),p(e,"class","block txt-hint txt-right m-t-sm")},m(a,u){w(a,e,u),m(e,t),m(e,s),m(e,l),m(e,o)},p(a,u){u&16&&i!==(i=a[4].length+"")&&_e(s,i),u&16&&r!==(r=a[4].length+"")&&_e(o,r)},d(a){a&&k(e)}}}function uE(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S,$,C,M,T,E,D,P,L,N,R,J,W,q,G,K,Y=[],ne=new Map,fe,ye,se,Z,De,te;e=new tl({}),c=new Ao({props:{value:n[1],placeholder:"Search filter, eg. email='test@example.com'",extraAutocompleteKeys:["email"]}}),c.$on("submit",n[8]);function be(ge){n[9](ge)}let ue={class:"col-type-text",name:"id",$$slots:{default:[iE]},$$scope:{ctx:n}};n[2]!==void 0&&(ue.sort=n[2]),$=new Qt({props:ue}),he.push(()=>Re($,"sort",be));function ie(ge){n[10](ge)}let ve={class:"col-type-email col-field-email",name:"email",$$slots:{default:[sE]},$$scope:{ctx:n}};n[2]!==void 0&&(ve.sort=n[2]),T=new Qt({props:ve}),he.push(()=>Re(T,"sort",ie));function He(ge){n[11](ge)}let Ie={class:"col-type-date col-field-created",name:"created",$$slots:{default:[lE]},$$scope:{ctx:n}};n[2]!==void 0&&(Ie.sort=n[2]),P=new Qt({props:Ie}),he.push(()=>Re(P,"sort",He));function qe(ge){n[12](ge)}let oe={class:"col-type-date col-field-updated",name:"updated",$$slots:{default:[rE]},$$scope:{ctx:n}};n[2]!==void 0&&(oe.sort=n[2]),R=new Qt({props:oe}),he.push(()=>Re(R,"sort",qe));let le=n[4];const ke=ge=>ge[21].id;for(let ge=0;ge<le.length;ge+=1){let Ee=bg(n,le,ge),x=ke(Ee);ne.set(x,Y[ge]=wg(x,Ee))}let Ve=null;le.length||(Ve=yg(n));let ze=n[4].length&&Sg(n),Ze={};return se=new nE({props:Ze}),n[16](se),se.$on("save",n[17]),se.$on("delete",n[18]),{c(){B(e.$$.fragment),t=O(),i=_("main"),s=_("header"),l=_("nav"),l.innerHTML=`<div class="breadcrumb-item">Settings</div>
<div class="breadcrumb-item">Admins</div>`,r=O(),o=_("div"),a=O(),u=_("button"),u.innerHTML=`<i class="ri-add-line"></i>
<span class="txt">New admin</span>`,f=O(),B(c.$$.fragment),d=O(),h=_("div"),g=_("table"),y=_("thead"),b=_("tr"),v=_("th"),S=O(),B($.$$.fragment),M=O(),B(T.$$.fragment),D=O(),B(P.$$.fragment),N=O(),B(R.$$.fragment),W=O(),q=_("th"),G=O(),K=_("tbody");for(let ge=0;ge<Y.length;ge+=1)Y[ge].c();Ve&&Ve.c(),fe=O(),ze&&ze.c(),ye=O(),B(se.$$.fragment),p(l,"class","breadcrumbs"),p(o,"class","flex-fill"),p(u,"type","button"),p(u,"class","btn btn-expanded"),p(s,"class","page-header"),p(v,"class","min-width"),p(q,"class","col-type-action min-width"),p(g,"class","table"),Q(g,"table-loading",n[5]),p(h,"class","table-wrapper"),p(i,"class","page-wrapper")},m(ge,Ee){V(e,ge,Ee),w(ge,t,Ee),w(ge,i,Ee),m(i,s),m(s,l),m(s,r),m(s,o),m(s,a),m(s,u),m(i,f),V(c,i,null),m(i,d),m(i,h),m(h,g),m(g,y),m(y,b),m(b,v),m(b,S),V($,b,null),m(b,M),V(T,b,null),m(b,D),V(P,b,null),m(b,N),V(R,b,null),m(b,W),m(b,q),m(g,G),m(g,K);for(let x=0;x<Y.length;x+=1)Y[x].m(K,null);Ve&&Ve.m(K,null),m(i,fe),ze&&ze.m(i,null),w(ge,ye,Ee),V(se,ge,Ee),Z=!0,De||(te=X(u,"click",n[7]),De=!0)},p(ge,[Ee]){const x={};Ee&2&&(x.value=ge[1]),c.$set(x);const ae={};Ee&16777216&&(ae.$$scope={dirty:Ee,ctx:ge}),!C&&Ee&4&&(C=!0,ae.sort=ge[2],je(()=>C=!1)),$.$set(ae);const Be={};Ee&16777216&&(Be.$$scope={dirty:Ee,ctx:ge}),!E&&Ee&4&&(E=!0,Be.sort=ge[2],je(()=>E=!1)),T.$set(Be);const vt={};Ee&16777216&&(vt.$$scope={dirty:Ee,ctx:ge}),!L&&Ee&4&&(L=!0,vt.sort=ge[2],je(()=>L=!1)),P.$set(vt);const it={};Ee&16777216&&(it.$$scope={dirty:Ee,ctx:ge}),!J&&Ee&4&&(J=!0,it.sort=ge[2],je(()=>J=!1)),R.$set(it),Ee&122&&(le=ge[4],Oe(),Y=ot(Y,Ee,ke,1,ge,le,ne,K,Lt,wg,null,bg),Te(),!le.length&&Ve?Ve.p(ge,Ee):le.length?Ve&&(Ve.d(1),Ve=null):(Ve=yg(ge),Ve.c(),Ve.m(K,null))),Ee&32&&Q(g,"table-loading",ge[5]),ge[4].length?ze?ze.p(ge,Ee):(ze=Sg(ge),ze.c(),ze.m(i,null)):ze&&(ze.d(1),ze=null);const gt={};se.$set(gt)},i(ge){if(!Z){A(e.$$.fragment,ge),A(c.$$.fragment,ge),A($.$$.fragment,ge),A(T.$$.fragment,ge),A(P.$$.fragment,ge),A(R.$$.fragment,ge);for(let Ee=0;Ee<le.length;Ee+=1)A(Y[Ee]);A(se.$$.fragment,ge),Z=!0}},o(ge){F(e.$$.fragment,ge),F(c.$$.fragment,ge),F($.$$.fragment,ge),F(T.$$.fragment,ge),F(P.$$.fragment,ge),F(R.$$.fragment,ge);for(let Ee=0;Ee<Y.length;Ee+=1)F(Y[Ee]);F(se.$$.fragment,ge),Z=!1},d(ge){z(e,ge),ge&&k(t),ge&&k(i),z(c),z($),z(T),z(P),z(R);for(let Ee=0;Ee<Y.length;Ee+=1)Y[Ee].d();Ve&&Ve.d(),ze&&ze.d(),ge&&k(ye),n[16](null),z(se,ge),De=!1,te()}}}function fE(n,e,t){var D;let i;hn(n,Vu,P=>t(6,i=P));const s=U.getQueryParams((D=window.location)==null?void 0:D.href);let l,r=[],o=!1,a=s.filter||"",u=s.sort||"-created";U.setDocumentTitle("Admins");function f(){return t(5,o=!0),t(4,r=[]),we.Admins.getFullList(100,{sort:u||"-created",filter:a}).then(P=>{t(4,r=P),t(5,o=!1)}).catch(P=>{P!==null&&(t(5,o=!1),console.warn(P),c(),we.errorResponseHandler(P,!1))})}function c(){t(4,r=[])}const d=()=>l==null?void 0:l.show(),h=P=>t(1,a=P.detail);function g(P){u=P,t(2,u)}function y(P){u=P,t(2,u)}function b(P){u=P,t(2,u)}function v(P){u=P,t(2,u)}const S=P=>l==null?void 0:l.show(P),$=(P,L)=>{(L.code==="Enter"||L.code==="Space")&&(L.preventDefault(),l==null||l.show(P))},C=()=>t(1,a="");function M(P){he[P?"unshift":"push"](()=>{l=P,t(3,l)})}const T=()=>f(),E=()=>f();return n.$$.update=()=>{n.$$.dirty&6&&u!==-1&&a!==-1&&(U.replaceClientQueryParams({filter:a,sort:u}),f())},[f,a,u,l,r,o,i,d,h,g,y,b,v,S,$,C,M,T,E]}class cE extends Fe{constructor(e){super(),Le(this,e,fE,uE,Ae,{loadAdmins:0})}get loadAdmins(){return this.$$.ctx[0]}}function dE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Email"),s=O(),l=_("input"),p(e,"for",i=n[7]),p(l,"type","email"),p(l,"id",r=n[7]),l.required=!0,l.autofocus=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0]),l.focus(),o||(a=X(l,"input",n[4]),o=!0)},p(u,f){f&128&&i!==(i=u[7])&&p(e,"for",i),f&128&&r!==(r=u[7])&&p(l,"id",r),f&1&&l.value!==u[0]&&$e(l,u[0])},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function pE(n){let e,t,i,s,l,r,o,a,u,f,c;return{c(){e=_("label"),t=H("Password"),s=O(),l=_("input"),o=O(),a=_("div"),u=_("a"),u.textContent="Forgotten password?",p(e,"for",i=n[7]),p(l,"type","password"),p(l,"id",r=n[7]),l.required=!0,p(u,"href","/request-password-reset"),p(u,"class","link-hint"),p(a,"class","help-block")},m(d,h){w(d,e,h),m(e,t),w(d,s,h),w(d,l,h),$e(l,n[1]),w(d,o,h),w(d,a,h),m(a,u),f||(c=[X(l,"input",n[5]),Xe(Mn.call(null,u))],f=!0)},p(d,h){h&128&&i!==(i=d[7])&&p(e,"for",i),h&128&&r!==(r=d[7])&&p(l,"id",r),h&2&&l.value!==d[1]&&$e(l,d[1])},d(d){d&&k(e),d&&k(s),d&&k(l),d&&k(o),d&&k(a),f=!1,rt(c)}}}function hE(n){let e,t,i,s,l,r,o,a,u,f,c;return s=new Ne({props:{class:"form-field required",name:"email",$$slots:{default:[dE,({uniqueId:d})=>({7:d}),({uniqueId:d})=>d?128:0]},$$scope:{ctx:n}}}),r=new Ne({props:{class:"form-field required",name:"password",$$slots:{default:[pE,({uniqueId:d})=>({7:d}),({uniqueId:d})=>d?128:0]},$$scope:{ctx:n}}}),{c(){e=_("form"),t=_("div"),t.innerHTML="<h4>Admin sign in</h4>",i=O(),B(s.$$.fragment),l=O(),B(r.$$.fragment),o=O(),a=_("butLine truncated
<i class="ri-arrow-right-line"></i>`,p(t,"class","content txt-center m-b-base"),p(a,"type","submit"),p(a,"class","btn btn-lg btn-block btn-next"),Q(a,"btn-disabled",n[2]),Q(a,"btn-loading",n[2]),p(e,"class","block")},m(d,h){w(d,e,h),m(e,t),m(e,i),V(s,e,null),m(e,l),V(r,e,null),m(e,o),m(e,a),u=!0,f||(c=X(e,"submit",Kt(n[3])),f=!0)},p(d,h){const g={};h&385&&(g.$$scope={dirty:h,ctx:d}),s.$set(g);const y={};h&386&&(y.$$scope={dirty:h,ctx:d}),r.$set(y),h&4&&Q(a,"btn-disabled",d[2]),h&4&&Q(a,"btn-loading",d[2])},i(d){u||(A(s.$$.fragment,d),A(r.$$.fragment,d),u=!0)},o(d){F(s.$$.fragment,d),F(r.$$.fragment,d),u=!1},d(d){d&&k(e),z(s),z(r),f=!1,c()}}}function mE(n){let e,t;return e=new P0({props:{$$slots:{default:[hE]},$$scope:{ctx:n}}}),{c(){B(e.$$.fragment)},m(i,s){V(e,i,s),t=!0},p(i,[s]){const l={};s&263&&(l.$$scope={dirty:s,ctx:i}),e.$set(l)},i(i){t||(A(e.$$.fragment,i),t=!0)},o(i){F(e.$$.fragment,i),t=!1},d(i){z(e,i)}}}function gE(n,e,t){var f;const i=U.getQueryParams((f=window.location)==null?void 0:f.href);let s=i.demoEmail||"",l=i.demoPassword||"",r=!1;function o(){if(!r)return t(2,r=!0),we.Admins.authViaEmail(s,l).then(()=>{Gs("/")}).catch(()=>{O0("Invalid login credentials.")}).finally(()=>{t(2,r=!1)})}function a(){s=this.value,t(0,s)}function u(){l=this.value,t(1,l)}return[s,l,r,o,a,u]}class _E extends Fe{constructor(e){super(),Le(this,e,gE,mE,Ae,{})}}function bE(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S;return i=new Ne({props:{class:"form-field required",name:"meta.appName",$$slots:{default:[vE,({uniqueId:$})=>({12:$}),({uniqueId:$})=>$?4096:0]},$$scope:{ctx:n}}}),r=new Ne({props:{class:"form-field required",name:"meta.appUrl",$$slots:{default:[kE,({uniqueId:$})=>({12:$}),({uniqueId:$})=>$?4096:0]},$$scope:{ctx:n}}}),a=new Ne({props:{class:"form-field required",name:"logs.maxDays",$$slots:{default:[wE,({uniqueId:$})=>({12:$}),({uniqueId:$})=>$?4096:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=O(),l=_("div"),B(r.$$.fragment),o=O(),B(a.$$.fragment),u=O(),f=_("div"),c=_("div"),d=O(),h=_("button"),g=_("span"),g.textContent="Save changes",p(t,"class","col-lg-6"),p(l,"class","col-lg-6"),p(c,"class","flex-fill"),p(g,"class","txt"),p(h,"type","submit"),p(h,"class","btn btn-expanded"),h.disabled=y=!n[3]||n[2],Q(h,"btn-loading",n[2]),p(f,"class","col-lg-12 flex"),p(e,"class","grid")},m($,C){w($,e,C),m(e,t),V(i,t,null),m(e,s),m(e,l),V(r,l,null),m(e,o),V(a,e,null),m(e,u),m(e,f),m(f,c),m(f,d),m(f,h),m(h,g),b=!0,v||(S=X(h,"click",n[9]),v=!0)},p($,C){const M={};C&12289&&(M.$$scope={dirty:C,ctx:$}),i.$set(M);const T={};C&12289&&(T.$$scope={dirty:C,ctx:$}),r.$set(T);const E={};C&12289&&(E.$$scope={dirty:C,ctx:$}),a.$set(E),(!b||C&12&&y!==(y=!$[3]||$[2]))&&(h.disabled=y),C&4&&Q(h,"btn-loading",$[2])},i($){b||(A(i.$$.fragment,$),A(r.$$.fragment,$),A(a.$$.fragment,$),b=!0)},o($){F(i.$$.fragment,$),F(r.$$.fragment,$),F(a.$$.fragment,$),b=!1},d($){$&&k(e),z(i),z(r),z(a),v=!1,S()}}}function yE(n){let e;return{c(){e=_("div"),p(e,"class","loader")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function vE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Application name"),s=O(),l=_("input"),p(e,"for",i=n[12]),p(l,"type","text"),p(l,"id",r=n[12]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].meta.appName),o||(a=X(l,"input",n[6]),o=!0)},p(u,f){f&4096&&i!==(i=u[12])&&p(e,"for",i),f&4096&&r!==(r=u[12])&&p(l,"id",r),f&1&&l.value!==u[0].meta.appName&&$e(l,u[0].meta.appName)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function kE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Application url"),s=O(),l=_("input"),p(e,"for",i=n[12]),p(l,"type","text"),p(l,"id",r=n[12]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].meta.appUrl),o||(a=X(l,"input",n[7]),o=!0)},p(u,f){f&4096&&i!==(i=u[12])&&p(e,"for",i),f&4096&&r!==(r=u[12])&&p(l,"id",r),f&1&&l.value!==u[0].meta.appUrl&&$e(l,u[0].meta.appUrl)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function wE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Logs max days retention"),s=O(),l=_("input"),p(e,"for",i=n[12]),p(l,"type","number"),p(l,"id",r=n[12]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].logs.maxDays),o||(a=X(l,"input",n[8]),o=!0)},p(u,f){f&4096&&i!==(i=u[12])&&p(e,"for",i),f&4096&&r!==(r=u[12])&&p(l,"id",r),f&1&&Tt(l.value)!==u[0].logs.maxDays&&$e(l,u[0].logs.maxDays)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function SE(n){let e,t,i,s,l,r,o,a,u,f,c,d;e=new tl({});const h=[yE,bE],g=[];function y(b,v){return b[1]?0:1}return a=y(n),u=g[a]=h[a](n),{c(){B(e.$$.fragment),t=O(),i=_("main"),s=_("header"),s.innerHTML=`<nav class="breadcrumbs"><div class="breadcrumb-item">Settings</div>
<div class="breadcrumb-item">Application</div></nav>`,l=O(),r=_("div"),o=_("form"),u.c(),p(s,"class","page-header"),p(o,"class","panel"),p(o,"autocomplete","off"),p(r,"class","wrapper"),p(i,"class","page-wrapper")},m(b,v){V(e,b,v),w(b,t,v),w(b,i,v),m(i,s),m(i,l),m(i,r),m(r,o),g[a].m(o,null),f=!0,c||(d=X(o,"submit",Kt(n[4])),c=!0)},p(b,[v]){let S=a;a=y(b),a===S?g[a].p(b,v):(Oe(),F(g[S],1,1,()=>{g[S]=null}),Te(),u=g[a],u?u.p(b,v):(u=g[a]=h[a](b),u.c()),A(u,1),u.m(o,null))},i(b){f||(A(e.$$.fragment,b),A(u),f=!0)},o(b){F(e.$$.fragment,b),F(u),f=!1},d(b){z(e,b),b&&k(t),b&&k(i),g[a].d(),c=!1,d()}}}function $E(n,e,t){let i,s={},l=!1,r=!1,o="";U.setDocumentTitle("Application settings"),a();async function a(){t(1,l=!0);try{const y=await we.Settings.getAll()||{};f(y)}catch(y){we.errorResponseHandler(y)}t(1,l=!1)}async function u(){if(!(r||!i)){t(2,r=!0);try{const y=await we.Settings.update(U.filterRedactedProps(s));f(y),mn("Successfully saved application settings.")}catch(y){we.errorResponseHandler(y)}t(2,r=!1)}}function f(y={}){t(0,s={meta:(y==null?void 0:y.meta)||{},logs:(y==null?void 0:y.logs)||{}}),t(5,o=JSON.stringify(s))}function c(){s.meta.appName=this.value,t(0,s)}function d(){s.meta.appUrl=this.value,t(0,s)}function h(){s.logs.maxDays=Tt(this.value),t(0,s)}const g=()=>u();return n.$$.update=()=>{n.$$.dirty&33&&t(3,i=o!=JSON.stringify(s))},[s,l,r,i,u,o,c,d,h,g]}class CE extends Fe{constructor(e){super(),Le(this,e,$E,SE,Ae,{})}}function ME(n){let e,t,i,s=[{type:"password"},{autocomplete:"new-password"},n[5]],l={};for(let r=0;r<s.length;r+=1)l=ct(l,s[r]);return{c(){e=_("input"),ci(e,l)},m(r,o){w(r,e,o),e.autofocus&&e.focus(),n[7](e),$e(e,n[0]),t||(i=X(e,"input",n[8]),t=!0)},p(r,o){ci(e,l=bn(s,[{type:"password"},{autocomplete:"new-password"},o&32&&r[5]])),o&1&&e.value!==r[0]&&$e(e,r[0])},d(r){r&&k(e),n[7](null),t=!1,i()}}}function OE(n){let e,t,i,s,l,r,o=[{readOnly:!0},{type:"text"},{placeholder:n[1]},n[5]],a={};for(let u=0;u<o.length;u+=1)a=ct(a,o[u]);return{c(){e=_("div"),t=_("button"),t.innerHTML='<i class="ri-key-line"></i>',i=O(),s=_("input"),p(t,"type","button"),p(t,"class","btn btn-secondary btn-circle"),p(e,"class","form-field-addon"),ci(s,a)},m(u,f){w(u,e,f),m(e,t),w(u,i,f),w(u,s,f),s.autofocus&&s.focus(),l||(r=[Xe(St.call(null,t,{position:"left",text:"Set new value"})),X(t,"click",n[6])],l=!0)},p(u,f){ci(s,a=bn(o,[{readOnly:!0},{type:"text"},f&2&&{placeholder:u[1]},f&32&&u[5]]))},d(u){u&&k(e),u&&k(i),u&&k(s),l=!1,rt(r)}}}function TE(n){let e;function t(l,r){return l[3]?OE:ME}let i=t(n),s=i(n);return{c(){s.c(),e=lt()},m(l,r){s.m(l,r),w(l,e,r)},p(l,[r]){i===(i=t(l))&&s?s.p(l,r):(s.d(1),s=i(l),s&&(s.c(),s.m(e.parentNode,e)))},i:re,o:re,d(l){s.d(l),l&&k(e)}}}function DE(n,e,t){const i=["value","mask"];let s=Yt(e,i),{value:l=""}=e,{mask:r="******"}=e,o,a=!1;async function u(){t(0,l=""),t(3,a=!1),await Mi(),o==null||o.focus()}const f=()=>u();function c(h){he[h?"unshift":"push"](()=>{o=h,t(2,o)})}function d(){l=this.value,t(0,l)}return n.$$set=h=>{e=ct(ct({},e),di(h)),t(5,s=Yt(e,i)),"value"in h&&t(0,l=h.value),"mask"in h&&t(1,r=h.mask)},n.$$.update=()=>{n.$$.dirty&3&&l===r&&t(3,a=!0)},[l,r,o,a,u,s,f,c,d]}class mf extends Fe{constructor(e){super(),Le(this,e,DE,TE,Ae,{value:0,mask:1})}}function AE(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S,$,C,M,T,E,D,P,L,N,R,J;i=new Ne({props:{class:"form-field required",name:"meta.senderName",$$slots:{default:[PE,({uniqueId:q})=>({22:q}),({uniqueId:q})=>q?4194304:0]},$$scope:{ctx:n}}}),r=new Ne({props:{class:"form-field required",name:"meta.senderAddress",$$slots:{default:[LE,({uniqueId:q})=>({22:q}),({uniqueId:q})=>q?4194304:0]},$$scope:{ctx:n}}}),a=new Ne({props:{class:"form-field required",name:"meta.userVerificationUrl",$$slots:{default:[FE,({uniqueId:q})=>({22:q}),({uniqueId:q})=>q?4194304:0]},$$scope:{ctx:n}}}),f=new Ne({props:{class:"form-field required",name:"meta.userResetPasswordUrl",$$slots:{default:[IE,({uniqueId:q})=>({22:q}),({uniqueId:q})=>q?4194304:0]},$$scope:{ctx:n}}}),d=new Ne({props:{class:"form-field required",name:"meta.userConfirmEmailChangeUrl",$$slots:{default:[NE,({uniqueId:q})=>({22:q}),({uniqueId:q})=>q?4194304:0]},$$scope:{ctx:n}}}),S=new Ne({props:{class:"form-field form-field-toggle",$$slots:{default:[RE,({uniqueId:q})=>({22:q}),({uniqueId:q})=>q?4194304:0]},$$scope:{ctx:n}}});let W=n[0].smtp.enabled&&$g(n);return{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=O(),l=_("div"),B(r.$$.fragment),o=O(),B(a.$$.fragment),u=O(),B(f.$$.fragment),c=O(),B(d.$$.fragment),h=O(),g=_("hr"),y=O(),b=_("div"),b.innerHTML=`<p>By default PocketBase uses the OS <code>sendmail</code> command for sending emails.
<br/>
<strong class="txt-bold">For better emails deliverability it is recommended to enable the SMTP settings
below.</strong></p>`,v=O(),B(S.$$.fragment),$=O(),W&&W.c(),C=O(),M=_("div"),T=_("div"),E=O(),D=_("button"),P=_("span"),P.textContent="Save changes",p(t,"class","col-lg-6"),p(l,"class","col-lg-6"),p(e,"class","grid"),p(b,"class","content m-b-sm"),p(T,"class","flex-fill"),p(P,"class","txt"),p(D,"type","submit"),p(D,"class","btn btn-expanded"),D.disabled=L=!n[3]||n[2],Q(D,"btn-loading",n[2]),p(M,"class","flex")},m(q,G){w(q,e,G),m(e,t),V(i,t,null),m(e,s),m(e,l),V(r,l,null),m(e,o),V(a,e,null),m(e,u),V(f,e,null),m(e,c),V(d,e,null),w(q,h,G),w(q,g,G),w(q,y,G),w(q,b,G),w(q,v,G),V(S,q,G),w(q,$,G),W&&W.m(q,G),w(q,C,G),w(q,M,G),m(M,T),m(M,E),m(M,D),m(D,P),N=!0,R||(J=X(D,"click",n[18]),R=!0)},p(q,G){const K={};G&12582913&&(K.$$scope={dirty:G,ctx:q}),i.$set(K);const Y={};G&12582913&&(Y.$$scope={dirty:G,ctx:q}),r.$set(Y);const ne={};G&12582913&&(ne.$$scope={dirty:G,ctx:q}),a.$set(ne);const fe={};G&12582913&&(fe.$$scope={dirty:G,ctx:q}),f.$set(fe);const ye={};G&12582913&&(ye.$$scope={dirty:G,ctx:q}),d.$set(ye);const se={};G&12582913&&(se.$$scope={dirty:G,ctx:q}),S.$set(se),q[0].smtp.enabled?W?(W.p(q,G),G&1&&A(W,1)):(W=$g(q),W.c(),A(W,1),W.m(C.parentNode,C)):W&&(Oe(),F(W,1,1,()=>{W=null}),Te()),(!N||G&12&&L!==(L=!q[3]||q[2]))&&(D.disabled=L),G&4&&Q(D,"btn-loading",q[2])},i(q){N||(A(i.$$.fragment,q),A(r.$$.fragment,q),A(a.$$.fragment,q),A(f.$$.fragment,q),A(d.$$.fragment,q),A(S.$$.fragment,q),A(W),N=!0)},o(q){F(i.$$.fragment,q),F(r.$$.fragment,q),F(a.$$.fragment,q),F(f.$$.fragment,q),F(d.$$.fragment,q),F(S.$$.fragment,q),F(W),N=!1},d(q){q&&k(e),z(i),z(r),z(a),z(f),z(d),q&&k(h),q&&k(g),q&&k(y),q&&k(b),q&&k(v),z(S,q),q&&k($),W&&W.d(q),q&&k(C),q&&k(M),R=!1,J()}}}function EE(n){let e;return{c(){e=_("div"),p(e,"class","loader")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function PE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Sender name"),s=O(),l=_("input"),p(e,"for",i=n[22]),p(l,"type","text"),p(l,"id",r=n[22]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].meta.senderName),o||(a=X(l,"input",n[7]),o=!0)},p(u,f){f&4194304&&i!==(i=u[22])&&p(e,"for",i),f&4194304&&r!==(r=u[22])&&p(l,"id",r),f&1&&l.value!==u[0].meta.senderName&&$e(l,u[0].meta.senderName)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function LE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Sender address"),s=O(),l=_("input"),p(e,"for",i=n[22]),p(l,"type","email"),p(l,"id",r=n[22]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].meta.senderAddress),o||(a=X(l,"input",n[8]),o=!0)},p(u,f){f&4194304&&i!==(i=u[22])&&p(e,"for",i),f&4194304&&r!==(r=u[22])&&p(l,"id",r),f&1&&l.value!==u[0].meta.senderAddress&&$e(l,u[0].meta.senderAddress)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function FE(n){let e,t,i,s,l,r,o,a,u,f;return{c(){e=_("label"),t=H("User verification page url"),s=O(),l=_("input"),o=O(),a=_("div"),a.innerHTML=`Used in the user verification email. Available placeholder parameters:
<code>%APP_URL%</code>, <code>%TOKEN%</code>.`,p(e,"for",i=n[22]),p(l,"type","text"),p(l,"id",r=n[22]),l.required=!0,p(a,"class","help-block")},m(c,d){w(c,e,d),m(e,t),w(c,s,d),w(c,l,d),$e(l,n[0].meta.userVerificationUrl),w(c,o,d),w(c,a,d),u||(f=X(l,"input",n[9]),u=!0)},p(c,d){d&4194304&&i!==(i=c[22])&&p(e,"for",i),d&4194304&&r!==(r=c[22])&&p(l,"id",r),d&1&&l.value!==c[0].meta.userVerificationUrl&&$e(l,c[0].meta.userVerificationUrl)},d(c){c&&k(e),c&&k(s),c&&k(l),c&&k(o),c&&k(a),u=!1,f()}}}function IE(n){let e,t,i,s,l,r,o,a,u,f;return{c(){e=_("label"),t=H("User reset password page url"),s=O(),l=_("input"),o=O(),a=_("div"),a.innerHTML=`Used in the user password reset email. Available placeholder parameters:
<code>%APP_URL%</code>, <code>%TOKEN%</code>.`,p(e,"for",i=n[22]),p(l,"type","text"),p(l,"id",r=n[22]),l.required=!0,p(a,"class","help-block")},m(c,d){w(c,e,d),m(e,t),w(c,s,d),w(c,l,d),$e(l,n[0].meta.userResetPasswordUrl),w(c,o,d),w(c,a,d),u||(f=X(l,"input",n[10]),u=!0)},p(c,d){d&4194304&&i!==(i=c[22])&&p(e,"for",i),d&4194304&&r!==(r=c[22])&&p(l,"id",r),d&1&&l.value!==c[0].meta.userResetPasswordUrl&&$e(l,c[0].meta.userResetPasswordUrl)},d(c){c&&k(e),c&&k(s),c&&k(l),c&&k(o),c&&k(a),u=!1,f()}}}function NE(n){let e,t,i,s,l,r,o,a,u,f;return{c(){e=_("label"),t=H("User confirm email change page url"),s=O(),l=_("input"),o=O(),a=_("div"),a.innerHTML=`Used in the user email change confirmation email. Available placeholder
parameters:
<code>%APP_URL%</code>, <code>%TOKEN%</code>.`,p(e,"for",i=n[22]),p(l,"type","text"),p(l,"id",r=n[22]),l.required=!0,p(a,"class","help-block")},m(c,d){w(c,e,d),m(e,t),w(c,s,d),w(c,l,d),$e(l,n[0].meta.userConfirmEmailChangeUrl),w(c,o,d),w(c,a,d),u||(f=X(l,"input",n[11]),u=!0)},p(c,d){d&4194304&&i!==(i=c[22])&&p(e,"for",i),d&4194304&&r!==(r=c[22])&&p(l,"id",r),d&1&&l.value!==c[0].meta.userConfirmEmailChangeUrl&&$e(l,c[0].meta.userConfirmEmailChangeUrl)},d(c){c&&k(e),c&&k(s),c&&k(l),c&&k(o),c&&k(a),u=!1,f()}}}function RE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("input"),i=O(),s=_("label"),l=H("Use SMTP mail server"),p(e,"type","checkbox"),p(e,"id",t=n[22]),e.required=!0,p(s,"for",r=n[22])},m(u,f){w(u,e,f),e.checked=n[0].smtp.enabled,w(u,i,f),w(u,s,f),m(s,l),o||(a=X(e,"change",n[12]),o=!0)},p(u,f){f&4194304&&t!==(t=u[22])&&p(e,"id",t),f&1&&(e.checked=u[0].smtp.enabled),f&4194304&&r!==(r=u[22])&&p(s,"for",r)},d(u){u&&k(e),u&&k(i),u&&k(s),o=!1,a()}}}function $g(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S,$;return i=new Ne({props:{class:"form-field required",name:"smtp.host",$$slots:{default:[jE,({uniqueId:C})=>({22:C}),({uniqueId:C})=>C?4194304:0]},$$scope:{ctx:n}}}),r=new Ne({props:{class:"form-field required",name:"smtp.port",$$slots:{default:[HE,({uniqueId:C})=>({22:C}),({uniqueId:C})=>C?4194304:0]},$$scope:{ctx:n}}}),u=new Ne({props:{class:"form-field required",name:"smtp.tls",$$slots:{default:[qE,({uniqueId:C})=>({22:C}),({uniqueId:C})=>C?4194304:0]},$$scope:{ctx:n}}}),d=new Ne({props:{class:"form-field",name:"smtp.username",$$slots:{default:[VE,({uniqueId:C})=>({22:C}),({uniqueId:C})=>C?4194304:0]},$$scope:{ctx:n}}}),y=new Ne({props:{class:"form-field",name:"smtp.password",$$slots:{default:[zE,({uniqueId:C})=>({22:C}),({uniqueId:C})=>C?4194304:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=O(),l=_("div"),B(r.$$.fragment),o=O(),a=_("div"),B(u.$$.fragment),f=O(),c=_("div"),B(d.$$.fragment),h=O(),g=_("div"),B(y.$$.fragment),b=O(),v=_("div"),p(t,"class","col-lg-6"),p(l,"class","col-lg-3"),p(a,"class","col-lg-3"),p(c,"class","col-lg-6"),p(g,"class","col-lg-6"),p(v,"class","col-lg-12"),p(e,"class","grid")},m(C,M){w(C,e,M),m(e,t),V(i,t,null),m(e,s),m(e,l),V(r,l,null),m(e,o),m(e,a),V(u,a,null),m(e,f),m(e,c),V(d,c,null),m(e,h),m(e,g),V(y,g,null),m(e,b),m(e,v),$=!0},p(C,M){const T={};M&12582913&&(T.$$scope={dirty:M,ctx:C}),i.$set(T);const E={};M&12582913&&(E.$$scope={dirty:M,ctx:C}),r.$set(E);const D={};M&12582913&&(D.$$scope={dirty:M,ctx:C}),u.$set(D);const P={};M&12582913&&(P.$$scope={dirty:M,ctx:C}),d.$set(P);const L={};M&12582913&&(L.$$scope={dirty:M,ctx:C}),y.$set(L)},i(C){$||(A(i.$$.fragment,C),A(r.$$.fragment,C),A(u.$$.fragment,C),A(d.$$.fragment,C),A(y.$$.fragment,C),C&&Dt(()=>{S||(S=ft(e,un,{duration:150},!0)),S.run(1)}),$=!0)},o(C){F(i.$$.fragment,C),F(r.$$.fragment,C),F(u.$$.fragment,C),F(d.$$.fragment,C),F(y.$$.fragment,C),C&&(S||(S=ft(e,un,{duration:150},!1)),S.run(0)),$=!1},d(C){C&&k(e),z(i),z(r),z(u),z(d),z(y),C&&S&&S.end()}}}function jE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("SMTP server host"),s=O(),l=_("input"),p(e,"for",i=n[22]),p(l,"type","text"),p(l,"id",r=n[22]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].smtp.host),o||(a=X(l,"input",n[13]),o=!0)},p(u,f){f&4194304&&i!==(i=u[22])&&p(e,"for",i),f&4194304&&r!==(r=u[22])&&p(l,"id",r),f&1&&l.value!==u[0].smtp.host&&$e(l,u[0].smtp.host)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function HE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Port"),s=O(),l=_("input"),p(e,"for",i=n[22]),p(l,"type","number"),p(l,"id",r=n[22]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].smtp.port),o||(a=X(l,"input",n[14]),o=!0)},p(u,f){f&4194304&&i!==(i=u[22])&&p(e,"for",i),f&4194304&&r!==(r=u[22])&&p(l,"id",r),f&1&&Tt(l.value)!==u[0].smtp.port&&$e(l,u[0].smtp.port)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function qE(n){let e,t,i,s,l,r,o;function a(f){n[15](f)}let u={id:n[22],items:n[4]};return n[0].smtp.tls!==void 0&&(u.keyOfSelected=n[0].smtp.tls),l=new vs({props:u}),he.push(()=>Re(l,"keyOfSelected",a)),{c(){e=_("label"),t=H("TLS Encryption"),s=O(),B(l.$$.fragment),p(e,"for",i=n[22])},m(f,c){w(f,e,c),m(e,t),w(f,s,c),V(l,f,c),o=!0},p(f,c){(!o||c&4194304&&i!==(i=f[22]))&&p(e,"for",i);const d={};c&4194304&&(d.id=f[22]),!r&&c&1&&(r=!0,d.keyOfSelected=f[0].smtp.tls,je(()=>r=!1)),l.$set(d)},i(f){o||(A(l.$$.fragment,f),o=!0)},o(f){F(l.$$.fragment,f),o=!1},d(f){f&&k(e),f&&k(s),z(l,f)}}}function VE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Username"),s=O(),l=_("input"),p(e,"for",i=n[22]),p(l,"type","text"),p(l,"id",r=n[22])},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].smtp.username),o||(a=X(l,"input",n[16]),o=!0)},p(u,f){f&4194304&&i!==(i=u[22])&&p(e,"for",i),f&4194304&&r!==(r=u[22])&&p(l,"id",r),f&1&&l.value!==u[0].smtp.username&&$e(l,u[0].smtp.username)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function zE(n){let e,t,i,s,l,r,o;function a(f){n[17](f)}let u={id:Line truncated
<div class="breadcrumb-item">Mail settings</div></nav>`,l=O(),r=_("div"),o=_("form"),a=_("div"),a.innerHTML="<p>Configure common settings for sending emails.</p>",u=O(),c.c(),p(s,"class","page-header"),p(a,"class","content txt-xl m-b-base"),p(o,"class","panel"),p(o,"autocomplete","off"),p(r,"class","wrapper"),p(i,"class","page-wrapper")},m(S,$){V(e,S,$),w(S,t,$),w(S,i,$),m(i,s),m(i,l),m(i,r),m(r,o),m(o,a),m(o,u),b[f].m(o,null),d=!0,h||(g=X(o,"submit",Kt(n[19])),h=!0)},p(S,[$]){let C=f;f=v(S),f===C?b[f].p(S,$):(Oe(),F(b[C],1,1,()=>{b[C]=null}),Te(),c=b[f],c?c.p(S,$):(c=b[f]=y[f](S),c.c()),A(c,1),c.m(o,null))},i(S){d||(A(e.$$.fragment,S),A(c),d=!0)},o(S){F(e.$$.fragment,S),F(c),d=!1},d(S){z(e,S),S&&k(t),S&&k(i),b[f].d(),h=!1,g()}}}function UE(n,e,t){let i;const s=[{label:"Optional (StartTLS)",value:!1},{label:"Always",value:!0}];let l={},r=!1,o=!1,a="";U.setDocumentTitle("Mail settings"),u();async function u(){t(1,r=!0);try{const P=await we.Settings.getAll()||{};c(P)}catch(P){we.errorResponseHandler(P)}t(1,r=!1)}async function f(){if(!(o||!i)){t(2,o=!0);try{const P=await we.Settings.update(U.filterRedactedProps(l));c(P),mn("Successfully saved mail settings.")}catch(P){we.errorResponseHandler(P)}t(2,o=!1)}}function c(P={}){t(0,l={meta:(P==null?void 0:P.meta)||{},smtp:(P==null?void 0:P.smtp)||{}}),t(6,a=JSON.stringify(l))}function d(){l.meta.senderName=this.value,t(0,l)}function h(){l.meta.senderAddress=this.value,t(0,l)}function g(){l.meta.userVerificationUrl=this.value,t(0,l)}function y(){l.meta.userResetPasswordUrl=this.value,t(0,l)}function b(){l.meta.userConfirmEmailChangeUrl=this.value,t(0,l)}function v(){l.smtp.enabled=this.checked,t(0,l)}function S(){l.smtp.host=this.value,t(0,l)}function $(){l.smtp.port=Tt(this.value),t(0,l)}function C(P){n.$$.not_equal(l.smtp.tls,P)&&(l.smtp.tls=P,t(0,l))}function M(){l.smtp.username=this.value,t(0,l)}function T(P){n.$$.not_equal(l.smtp.password,P)&&(l.smtp.password=P,t(0,l))}const E=()=>f(),D=()=>f();return n.$$.update=()=>{n.$$.dirty&65&&t(3,i=a!=JSON.stringify(l))},[l,r,o,i,s,f,a,d,h,g,y,b,v,S,$,C,M,T,E,D]}class WE extends Fe{constructor(e){super(),Le(this,e,UE,BE,Ae,{})}}function YE(n){let e,t,i,s,l,r,o,a,u,f,c,d;e=new Ne({props:{class:"form-field form-field-toggle",$$slots:{default:[JE,({uniqueId:g})=>({15:g}),({uniqueId:g})=>g?32768:0]},$$scope:{ctx:n}}});let h=n[0].enabled&&Cg(n);return{c(){B(e.$$.fragment),t=O(),h&&h.c(),i=O(),s=_("div"),l=_("div"),r=O(),o=_("button"),a=_("span"),a.textContent="Save changes",p(l,"class","flex-fill"),p(a,"class","txt"),p(o,"type","submit"),p(o,"class","btn btn-expanded"),o.disabled=u=!n[3]||n[2],Q(o,"btn-loading",n[2]),p(s,"class","flex")},m(g,y){V(e,g,y),w(g,t,y),h&&h.m(g,y),w(g,i,y),w(g,s,y),m(s,l),m(s,r),m(s,o),m(o,a),f=!0,c||(d=X(o,"click",n[12]),c=!0)},p(g,y){const b={};y&98305&&(b.$$scope={dirty:y,ctx:g}),e.$set(b),g[0].enabled?h?(h.p(g,y),y&1&&A(h,1)):(h=Cg(g),h.c(),A(h,1),h.m(i.parentNode,i)):h&&(Oe(),F(h,1,1,()=>{h=null}),Te()),(!f||y&12&&u!==(u=!g[3]||g[2]))&&(o.disabled=u),y&4&&Q(o,"btn-loading",g[2])},i(g){f||(A(e.$$.fragment,g),A(h),f=!0)},o(g){F(e.$$.fragment,g),F(h),f=!1},d(g){z(e,g),g&&k(t),h&&h.d(g),g&&k(i),g&&k(s),c=!1,d()}}}function KE(n){let e;return{c(){e=_("div"),p(e,"class","loader")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function JE(n){let e,t,i,s,l,r,o,a;return{c(){e=_("input"),i=O(),s=_("label"),l=H("Use S3 storage"),p(e,"type","checkbox"),p(e,"id",t=n[15]),e.required=!0,p(s,"for",r=n[15])},m(u,f){w(u,e,f),e.checked=n[0].enabled,w(u,i,f),w(u,s,f),m(s,l),o||(a=X(e,"change",n[6]),o=!0)},p(u,f){f&32768&&t!==(t=u[15])&&p(e,"id",t),f&1&&(e.checked=u[0].enabled),f&32768&&r!==(r=u[15])&&p(s,"for",r)},d(u){u&&k(e),u&&k(i),u&&k(s),o=!1,a()}}}function Cg(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g,y,b,v,S,$;return i=new Ne({props:{class:"form-field required",name:"s3.endpoint",$$slots:{default:[GE,({uniqueId:C})=>({15:C}),({uniqueId:C})=>C?32768:0]},$$scope:{ctx:n}}}),r=new Ne({props:{class:"form-field required",name:"s3.bucket",$$slots:{default:[ZE,({uniqueId:C})=>({15:C}),({uniqueId:C})=>C?32768:0]},$$scope:{ctx:n}}}),u=new Ne({props:{class:"form-field required",name:"s3.region",$$slots:{default:[xE,({uniqueId:C})=>({15:C}),({uniqueId:C})=>C?32768:0]},$$scope:{ctx:n}}}),d=new Ne({props:{class:"form-field required",name:"s3.accessKey",$$slots:{default:[XE,({uniqueId:C})=>({15:C}),({uniqueId:C})=>C?32768:0]},$$scope:{ctx:n}}}),y=new Ne({props:{class:"form-field required",name:"s3.secret",$$slots:{default:[QE,({uniqueId:C})=>({15:C}),({uniqueId:C})=>C?32768:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=O(),l=_("div"),B(r.$$.fragment),o=O(),a=_("div"),B(u.$$.fragment),f=O(),c=_("div"),B(d.$$.fragment),h=O(),g=_("div"),B(y.$$.fragment),b=O(),v=_("div"),p(t,"class","col-lg-12"),p(l,"class","col-lg-6"),p(a,"class","col-lg-6"),p(c,"class","col-lg-6"),p(g,"class","col-lg-6"),p(v,"class","col-lg-12"),p(e,"class","grid")},m(C,M){w(C,e,M),m(e,t),V(i,t,null),m(e,s),m(e,l),V(r,l,null),m(eLine truncated
<div class="breadcrumb-item">Files storage</div></nav>`,l=O(),r=_("div"),o=_("form"),a=_("div"),a.innerHTML=`<p>By default PocketBase uses the local file system to store uploaded files.</p>
<p>If you have limited disk space, you could optionally connect to a S3 compatible storage.</p>`,u=O(),c.c(),p(s,"class","page-header"),p(a,"class","content txt-xl m-b-base"),p(o,"class","panel"),p(o,"autocomplete","off"),p(r,"class","wrapper"),p(i,"class","page-wrapper")},m(S,$){V(e,S,$),w(S,t,$),w(S,i,$),m(i,s),m(i,l),m(i,r),m(r,o),m(o,a),m(o,u),b[f].m(o,null),d=!0,h||(g=X(o,"submit",Kt(n[4])),h=!0)},p(S,[$]){let C=f;f=v(S),f===C?b[f].p(S,$):(Oe(),F(b[C],1,1,()=>{b[C]=null}),Te(),c=b[f],c?c.p(S,$):(c=b[f]=y[f](S),c.c()),A(c,1),c.m(o,null))},i(S){d||(A(e.$$.fragment,S),A(c),d=!0)},o(S){F(e.$$.fragment,S),F(c),d=!1},d(S){z(e,S),S&&k(t),S&&k(i),b[f].d(),h=!1,g()}}}function tP(n,e,t){let i,s={},l=!1,r=!1,o="";U.setDocumentTitle("Files storage"),a();async function a(){t(1,l=!0);try{const S=await we.Settings.getAll()||{};f(S)}catch(S){we.errorResponseHandler(S)}t(1,l=!1)}async function u(){if(!(r||!i)){t(2,r=!0);try{const S=await we.Settings.update(U.filterRedactedProps({s3:s}));f(S),Wi({}),mn("Successfully saved Files storage settings.")}catch(S){we.errorResponseHandler(S)}t(2,r=!1)}}function f(S={}){t(0,s=(S==null?void 0:S.s3)||{}),t(5,o=JSON.stringify(s))}function c(){s.enabled=this.checked,t(0,s)}function d(){s.endpoint=this.value,t(0,s)}function h(){s.bucket=this.value,t(0,s)}function g(){s.region=this.value,t(0,s)}function y(){s.accessKey=this.value,t(0,s)}function b(S){n.$$.not_equal(s.secret,S)&&(s.secret=S,t(0,s))}const v=()=>u();return n.$$.update=()=>{n.$$.dirty&33&&t(3,i=o!=JSON.stringify(s))},[s,l,r,i,u,o,c,d,h,g,y,b,v]}class nP extends Fe{constructor(e){super(),Le(this,e,tP,eP,Ae,{})}}function iP(n){let e,t,i,s,l,r,o,a;return{c(){e=_("input"),i=O(),s=_("label"),l=H("Enable"),p(e,"type","checkbox"),p(e,"id",t=n[16]),p(s,"for",r=n[16])},m(u,f){w(u,e,f),e.checked=n[0].enabled,w(u,i,f),w(u,s,f),m(s,l),o||(a=X(e,"change",n[8]),o=!0)},p(u,f){f&65536&&t!==(t=u[16])&&p(e,"id",t),f&1&&(e.checked=u[0].enabled),f&65536&&r!==(r=u[16])&&p(s,"for",r)},d(u){u&&k(e),u&&k(i),u&&k(s),o=!1,a()}}}function Mg(n){let e,t,i,s,l,r,o,a,u,f,c;return i=new Ne({props:{class:"form-field required",name:"emailPassword.minPasswordLength",$$slots:{default:[sP,({uniqueId:d})=>({16:d}),({uniqueId:d})=>d?65536:0]},$$scope:{ctx:n}}}),r=new Ne({props:{class:"form-field "+(U.isEmpty(n[0].onlyDomains)?"":"disabled"),name:"emailPassword.exceptDomains",$$slots:{default:[lP,({uniqueId:d})=>({16:d}),({uniqueId:d})=>d?65536:0]},$$scope:{ctx:n}}}),u=new Ne({props:{class:"form-field "+(U.isEmpty(n[0].exceptDomains)?"":"disabled"),name:"emailPassword.onlyDomains",$$slots:{default:[rP,({uniqueId:d})=>({16:d}),({uniqueId:d})=>d?65536:0]},$$scope:{ctx:n}}}),{c(){e=_("div"),t=_("div"),B(i.$$.fragment),s=O(),l=_("div"),B(r.$$.fragment),o=O(),a=_("div"),B(u.$$.fragment),p(t,"class","col-sm-12 m-t-sm"),p(l,"class","col-lg-6"),p(a,"class","col-lg-6"),p(e,"class","grid")},m(d,h){w(d,e,h),m(e,t),V(i,t,null),m(e,s),m(e,l),V(r,l,null),m(e,o),m(e,a),V(u,a,null),c=!0},p(d,h){const g={};h&196609&&(g.$$scope={dirty:h,ctx:d}),i.$set(g);const y={};h&1&&(y.class="form-field "+(U.isEmpty(d[0].onlyDomains)?"":"disabled")),h&196609&&(y.$$scope={dirty:h,ctx:d}),r.$set(y);const b={};h&1&&(b.class="form-field "+(U.isEmpty(d[0].exceptDomains)?"":"disabled")),h&196609&&(b.$$scope={dirty:h,ctx:d}),u.$set(b)},i(d){c||(A(i.$$.fragment,d),A(r.$$.fragment,d),A(u.$$.fragment,d),d&&Dt(()=>{f||(f=ft(e,un,{duration:150},!0)),f.run(1)}),c=!0)},o(d){F(i.$$.fragment,d),F(r.$$.fragment,d),F(u.$$.fragment,d),d&&(f||(f=ft(e,un,{duration:150},!1)),f.run(0)),c=!1},d(d){d&&k(e),z(i),z(r),z(u),d&&f&&f.end()}}}function sP(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Minimum password length"),s=O(),l=_("input"),p(e,"for",i=n[16]),p(l,"type","number"),p(l,"id",r=n[16]),l.required=!0,p(l,"min","5"),p(l,"max","200")},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].minPasswordLength),o||(a=X(l,"input",n[9]),o=!0)},p(u,f){f&65536&&i!==(i=u[16])&&p(e,"for",i),f&65536&&r!==(r=u[16])&&p(l,"id",r),f&1&&Tt(l.value)!==u[0].minPasswordLength&&$e(l,u[0].minPasswordLength)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function lP(n){let e,t,i,s,l,r,o,a,u,f,c,d,h;function g(b){n[10](b)}let y={id:n[16],disabled:!U.isEmpty(n[0].onlyDomains)};return n[0].exceptDomains!==void 0&&(y.value=n[0].exceptDomains),o=new ks({props:y}),he.push(()=>Re(o,"value",g)),{c(){e=_("label"),t=_("span"),t.textContent="Except domains",i=O(),s=_("i"),r=O(),B(o.$$.fragment),u=O(),f=_("div"),f.textContent="Use comma as separator.",p(t,"class","txt"),p(s,"class","ri-information-line link-hint"),p(e,"for",l=n[16]),p(f,"class","help-block")},m(b,v){w(b,e,v),m(e,t),m(e,i),m(e,s),w(b,r,v),V(o,b,v),w(b,u,v),w(b,f,v),c=!0,d||(h=Xe(St.call(null,s,{text:`Email domains that are NOT allowed to sign up.
This field is disabled if "Only domains" is set.`,position:"top"})),d=!0)},p(b,v){(!c||v&65536&&l!==(l=b[16]))&&p(e,"for",l);const S={};v&65536&&(S.id=b[16]),v&1&&(S.disabled=!U.isEmpty(b[0].onlyDomains)),!a&&v&1&&(a=!0,S.value=b[0].exceptDomains,je(()=>a=!1)),o.$set(S)},i(b){c||(A(o.$$.fragment,b),c=!0)},o(b){F(o.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(r),z(o,b),b&&k(u),b&&k(f),d=!1,h()}}}function rP(n){let e,t,i,s,l,r,o,a,u,f,c,d,h;function g(b){n[11](b)}let y={id:n[16]+".config.onlyDomains",disabled:!U.isEmpty(n[0].exceptDomains)};return n[0].onlyDomains!==void 0&&(y.value=n[0].onlyDomains),o=new ks({props:y}),he.push(()=>Re(o,"value",g)),{c(){e=_("label"),t=_("span"),t.textContent="Only domains",i=O(),s=_("i"),r=O(),B(o.$$.fragment),u=O(),f=_("div"),f.textContent="Use comma as separator.",p(t,"class","txt"),p(s,"class","ri-information-line link-hint"),p(e,"for",l=n[16]+".config.onlyDomains"),p(f,"class","help-block")},m(b,v){w(b,e,v),m(e,t),m(e,i),m(e,s),w(b,r,v),V(o,b,v),w(b,u,v),w(b,f,v),c=!0,d||(h=Xe(St.call(null,s,{text:`Email domains that are ONLY allowed to sign up.
This field is disabled if "Except domains" is set.`,position:"top"})),d=!0)},p(b,v){(!c||v&65536&&l!==(l=b[16]+".config.onlyDomains"))&&p(e,"for",l);const S={};v&65536&&(S.id=b[16]+".config.onlyDomains"),v&1&&(S.disabled=!U.isEmpty(b[0].exceptDomains)),!a&&v&1&&(a=!0,S.value=b[0].onlyDomains,je(()=>a=!1)),o.$set(S)},i(b){c||(A(o.$$.fragment,b),c=!0)},o(b){F(o.$$.fragment,b),c=!1},d(b){b&&k(e),b&&k(r),z(o,b),b&&k(u),b&&k(f),d=!1,h()}}}function oP(n){let e,t,i,s;e=new Ne({props:{class:"form-field form-field-toggle m-b-0",name:"emailPassword.enabled",$$slots:{default:[iP,({uniqueId:r})=>({16:r}),({uniqueId:r})=>r?65536:0]},$$scope:{ctx:n}}});let l=n[0].enabled&&Mg(n);return{c(){B(e.$$.fragment),t=O(),l&&l.c(),i=lt()},m(r,o){V(e,r,o),w(r,t,o),l&&l.m(r,o),w(r,i,o),s=!0},p(r,o){const a={};o&196609&&(a.$$scope={dirty:o,ctx:r}),e.$set(a),r[0].enabled?l?(l.p(r,o),o&1&&A(l,1)):(l=Mg(r),l.c(),A(l,1),l.m(i.parentNode,i)):l&&(Oe(),F(l,1,1,()=>{l=null}),Te())},i(r){s||(A(e.$$.fragment,r),A(l),s=!0)},o(r){F(e.$$.fragment,r),F(l),s=!1},d(r){z(e,r),r&&k(t),l&&l.d(r),r&&k(i)}}}function aP(n){let e;return{c(){e=_("span"),e.textContent="Disabled",p(e,"class","label")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function uP(n){let e;return{c(){e=_("span"),e.textContent="Enabled",p(e,"class","label label-success")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function Og(n){let e,t,i,s,l,r;return{c(){e=_("i"),p(e,"class","ri-error-warning-fill txt-danger")},m(o,a){w(o,e,a),s=!0,l||(r=Xe(t=St.call(null,e,{text:"Has errors",position:"left"})),l=!0)},i(o){s||(Dt(()=>{i||(i=ft(e,Wn,{duration:150,start:.7},!0)),i.run(1)}),s=!0)},o(o){i||(i=ft(e,Wn,{duration:150,start:.7},!1)),i.run(0),s=!1},d(o){o&&k(e),o&&i&&i.end(),l=!1,r()}}}function fP(n){let e,t,i,s,l,r,o;function a(d,h){return d[0].enabled?uP:aP}let u=a(n),f=u(n),c=n[2]&&Og();return{c(){e=_("div"),e.innerHTML=`<i class="ri-mail-lock-line"></i>
<span class="txt">Email/Password</span>`,t=O(),f.c(),i=O(),s=_("div"),l=O(),c&&c.c(),r=lt(),p(e,"class","inline-flex"),p(s,"class","flex-fill")},m(d,h){w(d,e,h),w(d,t,h),f.m(d,h),w(d,i,h),w(d,s,h),w(d,l,h),c&&c.m(d,h),w(d,r,h),o=!0},p(d,h){u!==(u=a(d))&&(f.d(1),f=u(d),f&&(f.c(),f.m(i.parentNode,i))),d[2]?c?h&4&&A(c,1):(c=Og(),c.c(),A(c,1),c.m(r.parentNode,r)):c&&(Oe(),F(c,1,1,()=>{c=null}),Te())},i(d){o||(A(c),o=!0)},o(d){F(c),o=!1},d(d){d&&k(e),d&&k(t),f.d(d),d&&k(i),d&&k(s),d&&k(l),c&&c.d(d),d&&k(r)}}}function cP(n){let e,t;const i=[n[3]];let s={$$slots:{header:[fP],default:[oP]},$$scope:{ctx:n}};for(let l=0;l<i.length;l+=1)s=ct(s,i[l]);return e=new df({props:s}),n[12](e),e.$on("expand",n[13]),e.$on("collapse",n[14]),e.$on("toggle",n[15]),{c(){B(e.$$.fragment)},m(l,r){V(e,l,r),t=!0},p(l,[r]){const o=r&8?bn(i,[hi(l[3])]):{};r&131077&&(o.$$scope={dirty:r,ctx:l}),e.$set(o)},i(l){t||(A(e.$$.fragment,l),t=!0)},o(l){F(e.$$.fragment,l),t=!1},d(l){n[12](null),z(e,l)}}}function dP(n,e,t){let i;const s=["config","expand","collapse","collapseSiblings"];let l=Yt(e,s),r;hn(n,_s,C=>t(7,r=C));let{config:o={}}=e,a;function u(){a==null||a.expand()}function f(){a==null||a.collapse()}function c(){a==null||a.collapseSiblings()}function d(){o.enabled=this.checked,t(0,o)}function h(){o.minPasswordLength=Tt(this.value),t(0,o)}function g(C){n.$$.not_equal(o.exceptDomains,C)&&(o.exceptDomains=C,t(0,o))}function y(C){n.$$.not_equal(o.onlyDomains,C)&&(o.onlyDomains=C,t(0,o))}function b(C){he[C?"unshift":"push"](()=>{a=C,t(1,a)})}function v(C){ut.call(this,n,C)}function S(C){ut.call(this,n,C)}function $(C){ut.call(this,n,C)}return n.$$set=C=>{e=ct(ct({},e),di(C)),t(3,l=Yt(e,s)),"config"in C&&t(0,o=C.config)},n.$$.update=()=>{n.$$.dirty&128&&t(2,i=!U.isEmpty(r==null?void 0:r.emailPassword))},[o,a,i,l,u,f,c,r,d,h,g,y,b,v,S,$]}class pP extends Fe{constructor(e){super(),Le(this,e,dP,cP,Ae,{config:0,expand:4,collapse:5,collapseSiblings:6})}get expand(){return this.$$.ctx[4]}get collapse(){return this.$$.ctx[5]}get collapseSiblings(){return this.$$.ctx[6]}}function hP(n){let e,t,i,s,l,r,o,a;return{c(){e=_("input"),i=O(),s=_("label"),l=H("Enable"),p(e,"type","checkbox"),p(e,"id",t=n[22]),p(s,"for",r=n[22])},m(u,f){w(u,e,f),e.checked=n[0].enabled,w(u,i,f),w(u,s,f),m(s,l),o||(a=X(e,"change",n[11]),o=!0)},p(u,f){f&4194304&&t!==(t=u[22])&&p(e,"id",t),f&1&&(e.checked=u[0].enabled),f&4194304&&r!==(r=u[22])&&p(s,"for",r)},d(u){u&&k(e),u&&k(i),u&&k(s),o=!1,a()}}}function Tg(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g;l=new Ne({props:{class:"form-field required",name:n[1]+".clientId",$$slots:{default:[mP,({uniqueId:b})=>({22:b}),({uniqueId:b})=>b?4194304:0]},$$scope:{ctx:n}}}),a=new Ne({props:{class:"form-field required",name:n[1]+".clientSecret",$$slots:{default:[gP,({uniqueId:b})=>({22:b}),({uniqueId:b})=>b?4194304:0]},$$scope:{ctx:n}}}),c=new Ne({props:{class:"form-field",name:n[1]+".allowRegistrations",$$slots:{default:[_P,({uniqueId:b})=>({22:b}),({uniqueId:b})=>b?4194304:0]},$$scope:{ctx:n}}});let y=n[4]&&Dg(n);return{c(){e=_("div"),t=_("div"),i=O(),s=_("div"),B(l.$$.fragment),r=O(),o=_("div"),B(a.$$.fragment),u=O(),f=_("div"),B(c.$$.fragment),d=O(),y&&y.c(),p(t,"class","col-12 spacing"),p(s,"class","col-lg-6"),p(o,"class","col-lg-6"),p(f,"class","col-lg-12"),p(e,"class","grid")},m(b,v){w(b,e,v),m(e,t),m(e,i),m(e,s),V(l,s,null),m(e,r),m(e,o),V(a,o,null),m(e,u),m(e,f),V(c,f,null),m(e,d),y&&y.m(e,null),g=!0},p(b,v){const S={};v&2&&(S.name=b[1]+".clientId"),v&12582913&&(S.$$scope={dirty:v,ctx:b}),l.$set(S);const $={};v&2&&($.name=b[1]+".clientSecret"),v&12582913&&($.$$scope={dirty:v,ctx:b}),a.$set($);const C={};v&2&&(C.name=b[1]+".allowRegistrations"),v&12582913&&(C.$$scope={dirty:v,ctx:b}),c.$set(C),b[4]?y?(y.p(b,v),v&16&&A(y,1)):(y=Dg(b),y.c(),A(y,1),y.m(e,null)):y&&(Oe(),F(y,1,1,()=>{y=null}),Te())},i(b){g||(A(l.$$.fragment,b),A(a.$$.fragment,b),A(c.$$.fragment,b),A(y),b&&Dt(()=>{h||(h=ft(e,un,{duration:200},!0)),h.run(1)}),g=!0)},o(b){F(l.$$.fragment,b),F(a.$$.fragment,b),F(c.$$.fragment,b),F(y),b&&(h||(h=ft(e,un,{duration:200},!1)),h.run(0)),g=!1},d(b){b&&k(e),z(l),z(a),z(c),y&&y.d(),b&&h&&h.end()}}}function mP(n){let e,t,i,s,l,r,o,a;return{c(){e=_("label"),t=H("Client ID"),s=O(),l=_("input"),p(e,"for",i=n[22]),p(l,"type","text"),p(l,"id",r=n[22]),l.required=!0},m(u,f){w(u,e,f),m(e,t),w(u,s,f),w(u,l,f),$e(l,n[0].clientId),o||(a=X(l,"input",n[12]),o=!0)},p(u,f){f&4194304&&i!==(i=u[22])&&p(e,"for",i),f&4194304&&r!==(r=u[22])&&p(l,"id",r),f&1&&l.value!==u[0].clientId&&$e(l,u[0].clientId)},d(u){u&&k(e),u&&k(s),u&&k(l),o=!1,a()}}}function gP(n){let e,t,i,s,l,r,o;function a(f){n[13](f)}let u={id:n[22],required:!0};return n[0].clientSecret!==void 0&&(u.value=n[0].clientSecret),l=new mf({props:u}),he.push(()=>Re(l,"value",a)),{c(){e=_("label"),t=H("Client Secret"),s=O(),B(l.$$.fragment),p(e,"for",i=n[22])},m(f,c){w(f,e,c),m(e,t),w(f,s,c),V(l,f,c),o=!0},p(f,c){(!o||c&4194304&&i!==(i=f[22]))&&p(e,"for",i);const d={};c&4194304&&(d.id=f[22]),!r&&c&Line truncated
<div class="breadcrumb-item">Auth providers</div></nav>`,l=O(),r=_("div"),o=_("form"),a=_("h6"),a.textContent="Manage the allowed users sign-in/sign-up methods.",u=O(),c.c(),p(s,"class","page-header"),p(a,"class","m-b-base"),p(o,"class","panel"),p(o,"autocomplete","off"),p(r,"class","wrapper"),p(i,"class","page-wrapper")},m(S,$){V(e,S,$),w(S,t,$),w(S,i,$),m(i,s),m(i,l),m(i,r),m(r,o),m(o,a),m(o,u),b[f].m(o,null),d=!0,h||(g=X(o,"submit",Kt(n[5])),h=!0)},p(S,[$]){let C=f;f=v(S),f===C?b[f].p(S,$):(Oe(),F(b[C],1,1,()=>{b[C]=null}),Te(),c=b[f],c?c.p(S,$):(c=b[f]=y[f](S),c.c()),A(c,1),c.m(o,null))},i(S){d||(A(e.$$.fragment,S),A(c),d=!0)},o(S){F(e.$$.fragment,S),F(c),d=!1},d(S){z(e,S),S&&k(t),S&&k(i),b[f].d(),h=!1,g()}}}function AP(n,e,t){let i,s,l={},r=!1,o=!1,a="";U.setDocumentTitle("Auth providers"),u();async function u(){t(2,r=!0);try{const $=await we.Settings.getAll()||{};c($)}catch($){we.errorResponseHandler($)}t(2,r=!1)}async function f(){if(!(o||!i)){t(3,o=!0);try{const $=await we.Settings.update(U.filterRedactedProps(l));c($),Wi({}),s==null||s.collapseSiblings(),mn("Successfully updated auth providers.")}catch($){we.errorResponseHandler($)}t(3,o=!1)}}function c($){$=$||{},t(0,l={}),t(0,l.emailAuth=Object.assign({enabled:!0},$.emailAuth),l);const C=["googleAuth","facebookAuth","githubAuth","gitlabAuth"];for(const M of C)t(0,l[M]=Object.assign({enabled:!1,allowRegistrations:!0},$[M]),l);t(6,a=JSON.stringify(l))}function d($){he[$?"unshift":"push"](()=>{s=$,t(1,s)})}function h($){n.$$.not_equal(l.emailAuth,$)&&(l.emailAuth=$,t(0,l))}function g($){n.$$.not_equal(l.googleAuth,$)&&(l.googleAuth=$,t(0,l))}function y($){n.$$.not_equal(l.facebookAuth,$)&&(l.facebookAuth=$,t(0,l))}function b($){n.$$.not_equal(l.githubAuth,$)&&(l.githubAuth=$,t(0,l))}function v($){n.$$.not_equal(l.gitlabAuth,$)&&(l.gitlabAuth=$,t(0,l))}const S=()=>f();return n.$$.update=()=>{n.$$.dirty&65&&t(4,i=a!=JSON.stringify(l))},[l,s,r,o,i,f,a,d,h,g,y,b,v,S]}class EP extends Fe{constructor(e){super(),Le(this,e,AP,DP,Ae,{})}}function Pg(n,e,t){const i=n.slice();return i[12]=e[t],i[13]=e,i[14]=t,i}function PP(n){let e=[],t=new Map,i,s,l,r,o,a,u,f,c,d,h=n[4];const g=y=>y[12].key;for(let y=0;y<h.length;y+=1){let b=Pg(n,h,y),v=g(b);t.set(v,e[y]=Lg(v,b))}return{c(){for(let y=0;y<e.length;y+=1)e[y].c();i=O(),s=_("div"),l=_("div"),r=O(),o=_("button"),a=_("span"),a.textContent="Save changes",p(l,"class","flex-fill"),p(a,"class","txt"),p(o,"type","submit"),p(o,"class","btn btn-expanded"),o.disabled=u=!n[3]||n[2],Q(o,"btn-loading",n[2]),p(s,"class","flex")},m(y,b){for(let v=0;v<e.length;v+=1)e[v].m(y,b);w(y,i,b),w(y,s,b),m(s,l),m(s,r),m(s,o),m(o,a),f=!0,c||(d=X(o,"click",n[9]),c=!0)},p(y,b){b&32785&&(h=y[4],Oe(),e=ot(e,b,g,1,y,h,t,i.parentNode,Lt,Lg,i,Pg),Te()),(!f||b&12&&u!==(u=!y[3]||y[2]))&&(o.disabled=u),b&4&&Q(o,"btn-loading",y[2])},i(y){if(!f){for(let b=0;b<h.length;b+=1)A(e[b]);f=!0}},o(y){for(let b=0;b<e.length;b+=1)F(e[b]);f=!1},d(y){for(let b=0;b<e.length;b+=1)e[b].d(y);y&&k(i),y&&k(s),c=!1,d()}}}function LP(n){let e;return{c(){e=_("div"),p(e,"class","loader")},m(t,i){w(t,e,i)},p:re,i:re,o:re,d(t){t&&k(e)}}}function FP(n){let e,t=n[12].label+"",i,s,l,r,o,a,u,f,c,d,h;function g(){n[7].call(o,n[12])}function y(){return n[8](n[12])}return{c(){e=_("label"),i=H(t),s=H(" duration (in seconds)"),r=O(),o=_("input"),u=O(),f=_("div"),c=_("span"),c.textContent="Invalidate all previously issued tokens",p(e,"for",l=n[15]),p(o,"type","number"),p(o,"id",a=n[15]),o.required=!0,p(c,"class","link-primary"),Q(c,"txt-success",n[0][n[12].key].secret),p(f,"class","help-block")},m(b,v){w(b,e,v),m(e,i),m(e,s),w(b,r,v),w(b,o,v),$e(o,n[0][n[12].key].duration),w(b,u,v),w(b,f,v),m(f,c),d||(h=[X(o,"input",g),X(c,"click",y)],d=!0)},p(b,v){n=b,v&32768&&l!==(l=n[15])&&p(e,"for",l),v&32768&&a!==(a=n[15])&&p(o,"id",a),v&17&&Tt(o.value)!==n[0][n[12].key].duration&&$e(o,n[0][n[12].key].duration),v&17&&Q(c,"txt-success",n[0][n[12].key].secret)},d(b){b&&k(e),b&&k(r),b&&k(o),b&&k(u),b&&k(f),d=!1,rt(h)}}}function Lg(n,e){let t,i,s;return i=new Ne({props:{class:"form-field required",name:e[12].key+".duration",$$slots:{default:[FP,({uniqueId:l})=>({15:l}),({uniqueId:l})=>l?32768:0]},$$scope:{ctx:e}}}),{key:n,first:null,c(){t=lt(),B(i.$$.fragment),this.first=t},m(l,r){w(l,t,r),V(i,l,r),s=!0},p(l,r){e=l;const o={};r&98305&&(o.$$scope={dirty:r,ctx:e}),i.$set(o)},i(l){s||(A(i.$$.fragment,l),s=!0)},o(l){F(i.$$.fragment,l),s=!1},d(l){l&&k(t),z(i,l)}}}function IP(n){let e,t,i,s,l,r,o,a,u,f,c,d,h,g;e=new tl({});const y=[LP,PP],b=[];function v(S,$){return S[1]?0:1}return f=v(n),c=b[f]=y[f](n),{c(){B(e.$$.fragment),t=O(),i=_("main"),s=_("header"),s.innerHTML=`<nav class="breadcrumbs"><div class="breadcrumb-item">Settings</div>
<div class="breadcrumb-item">Token options</div></nav>`,l=O(),r=_("div"),o=_("form"),a=_("div"),a.innerHTML="<p>Adjust common token options.</p>",u=O(),c.c(),p(s,"class","page-header"),p(a,"class","content m-b-sm txt-xl"),p(o,"class","panel"),p(o,"autocomplete","off"),p(r,"class","wrapper"),p(i,"class","page-wrapper")},m(S,$){V(e,S,$),w(S,t,$),w(S,i,$),m(i,s),m(i,l),m(i,r),m(r,o),m(o,a),m(o,u),b[f].m(o,null),d=!0,h||(g=X(o,"submit",Kt(n[5])),h=!0)},p(S,[$]){let C=f;f=v(S),f===C?b[f].p(S,$):(Oe(),F(b[C],1,1,()=>{b[C]=null}),Te(),c=b[f],c?c.p(S,$):(c=b[f]=y[f](S),c.c()),A(c,1),c.m(o,null))},i(S){d||(A(e.$$.fragment,S),A(c),d=!0)},o(S){F(e.$$.fragment,S),F(c),d=!1},d(S){z(e,S),S&&k(t),S&&k(i),b[f].d(),h=!1,g()}}}function NP(n,e,t){let i;const s=[{key:"userAuthToken",label:"Users auth token"},{key:"userVerificationToken",label:"Users email verification token"},{key:"userPasswordResetToken",label:"Users password reset token"},{key:"userEmailChangeToken",label:"Users email change token"},{key:"adminAuthToken",label:"Admins auth token"},{key:"adminPasswordResetToken",label:"Admins password reset token"}];let l={},r=!1,o=!1,a="";U.setDocumentTitle("Token options"),u();async function u(){t(1,r=!0);try{const y=await we.Settings.getAll()||{};c(y)}catch(y){we.errorResponseHandler(y)}t(1,r=!1)}async function f(){if(!(o||!i)){t(2,o=!0);try{const y=await we.Settings.update(U.filterRedactedProps(l));c(y),mn("Successfully saved tokens options.")}catch(y){we.errorResponseHandler(y)}t(2,o=!1)}}function c(y){var b;y=y||{},t(0,l={});for(const v of s)t(0,l[v.key]={duration:((b=y[v.key])==null?void 0:b.duration)||0},l);t(6,a=JSON.stringify(l))}function d(y){l[y.key].duration=Tt(this.value),t(0,l)}const h=y=>{l[y.key].secret?(delete l[y.key].secret,t(0,l)):t(0,l[y.key].secret=U.randomString(50),l)},g=()=>f();return n.$$.update=()=>{n.$$.dirty&65&&t(3,i=a!=JSON.stringify(l))},[l,r,o,i,s,f,a,d,h,g]}class RP extends Fe{constructor(e){super(),Le(this,e,NP,IP,Ae,{})}}const dn=[async n=>{const e=new URLSearchParams(window.location.search);return n.location!=="/"&&e.has("installer")?Gs("/"):!0}],jP={"/login":nn({component:_E,conditions:dn.concat([n=>!we.AuthStore.isValid]),userData:{showAppSidebar:!1}}),"/request-password-reset":nn({asyncComponent:()=>rs(()=>import("./PageAdminRequestPasswordReset.ee789533.js"),[]),conditions:dn.concat([n=>!we.AuthStore.isValid]),userData:{showAppSidebar:!1}}),"/confirm-password-reset/:token":nn({asyncComponent:()=>rs(()=>import("./PageAdminConfirmPasswordReset.c5e4eccc.js"),[]),conditions:dn.concat([n=>!we.AuthStore.isValid]),userData:{showAppSidebar:!1}}),"/collections":nn({component:yA,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"/logs":nn({component:A3,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"/users":nn({component:BA,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"/users/confirm-password-reset/:token":nn({asyncComponent:()=>rs(()=>import("./PageUserConfirmPasswordReset.cc57a238.js"),[]),conditions:dn.concat([()=>(we.logout(!1),!0)]),userData:{showAppSidebar:!1}}),"/users/confirm-verification/:token":nn({asyncComponent:()=>rs(()=>import("./PageUserConfirmVerification.cde40736.js"),[]),conditions:dn.concat([()=>(we.logout(!1),!0)]),userData:{showAppSidebar:!1}}),"/users/confirm-email-change/:token":nn({asyncComponent:()=>rs(()=>import("./PageUserConfirmEmailChange.921f1555.js"),[]),conditions:dn.concat([()=>(we.logout(!1),!0)]),userData:{showAppSidebar:!1}}),"/settings":nn({component:CE,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"/settings/admins":nn({component:cE,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"/settings/mail":nn({component:WE,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"/settings/storage":nn({component:nP,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"/settings/auth-providers":nn({component:EP,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"/settings/tokens":nn({component:RP,conditions:dn.concat([n=>we.AuthStore.isValid]),userData:{showAppSidebar:!0}}),"*":nn({component:r2,userData:{showAppSidebar:!1}})};function HP(n,{from:e,to:t},i={}){const s=getComputedStyle(n),l=s.transform==="none"?"":s.transform,[r,o]=s.transformOrigin.split(" ").map(parseFloat),a=e.left+e.width*r/t.width-(t.left+r),u=e.top+e.height*o/t.height-(t.top+o),{delay:f=0,duration:c=h=>Math.sqrt(h)*120,easing:d=Do}=i;return{delay:f,duration:Jn(c)?c(Math.sqrt(a*a+u*u)):c,easing:d,css:(h,g)=>{const y=g*a,b=g*u,v=h+g*e.width/t.width,S=h+g*e.height/t.height;return`transform: ${l} translate(${y}px, ${b}px) scale(${v}, ${S});`}}}function Fg(n,e,t){const i=n.slice();return i[2]=e[t],i}function qP(n){let e;return{c(){e=_("i"),p(e,"class","ri-alert-line")},m(t,i){w(t,e,i)},d(t){t&&k(e)}}}function VP(n){let e;return{c(){e=_("i"),p(e,"class","ri-chLine truncated
<span class="txt">Manage admins</span>`,t=O(),i=_("hr"),s=O(),l=_("div"),l.innerHTML=`<i class="ri-logout-circle-line"></i>
<span class="txt">Logout</span>`,p(e,"href","/settings/admins"),p(e,"class","dropdown-item closable"),p(l,"tabindex","0"),p(l,"class","dropdown-item closable")},m(a,u){w(a,e,u),w(a,t,u),w(a,i,u),w(a,s,u),w(a,l,u),r||(o=[Xe(Mn.call(null,e)),X(l,"click",n[4])],r=!0)},p:re,d(a){a&&k(e),a&&k(t),a&&k(i),a&&k(s),a&&k(l),r=!1,rt(o)}}}function XP(n){var c;let e,t,i,s,l,r,o,a,u,f=((c=n[1])==null?void 0:c.id)&&n[0]&&Ng(n);return s=new l1({props:{routes:jP}}),s.$on("routeLoading",n[2]),s.$on("conditionsFailed",n[3]),r=new WP({}),a=new ZP({}),{c(){e=_("div"),f&&f.c(),t=O(),i=_("div"),B(s.$$.fragment),l=O(),B(r.$$.fragment),o=O(),B(a.$$.fragment),p(i,"class","app-body"),p(e,"class","app-layout")},m(d,h){w(d,e,h),f&&f.m(e,null),m(e,t),m(e,i),V(s,i,null),w(d,l,h),V(r,d,h),w(d,o,h),V(a,d,h),u=!0},p(d,[h]){var g;((g=d[1])==null?void 0:g.id)&&d[0]?f?(f.p(d,h),h&3&&A(f,1)):(f=Ng(d),f.c(),A(f,1),f.m(e,t)):f&&(Oe(),F(f,1,1,()=>{f=null}),Te())},i(d){u||(A(f),A(s.$$.fragment,d),A(r.$$.fragment,d),A(a.$$.fragment,d),u=!0)},o(d){F(f),F(s.$$.fragment,d),F(r.$$.fragment,d),F(a.$$.fragment,d),u=!1},d(d){d&&k(e),f&&f.d(),z(s),d&&k(l),z(r,d),d&&k(o),z(a,d)}}}function QP(n,e,t){let i;hn(n,Vu,u=>t(1,i=u));let s,l=!1;function r(u){var f,c,d,h;((f=u==null?void 0:u.detail)==null?void 0:f.location)!==s&&(t(0,l=!!((d=(c=u==null?void 0:u.detail)==null?void 0:c.userData)!=null&&d.showAppSidebar)),s=(h=u==null?void 0:u.detail)==null?void 0:h.location,U.setDocumentTitle(""),Wi({}),Eb())}function o(){Gs("/")}function a(){we.logout()}return[l,i,r,o,a]}class eL extends Fe{constructor(e){super(),Le(this,e,QP,XP,Ae,{})}}new eL({target:document.getElementById("app")});export{rt as A,mn as B,U as C,Gs as D,lt as E,P0 as F,hn as G,Js as H,_n as I,pi as J,he as K,Ln as P,Fe as S,F as a,O as b,B as c,z as d,_ as e,p as f,w as g,m as h,Le as i,Xe as j,Oe as k,Mn as l,V as m,Te as n,k as o,we as p,Ne as q,Q as r,Ae as s,A as t,X as u,Kt as v,H as w,_e as x,re as y,$e as z};
@@ -1 +1 @@
@font-face{font-family:remixicon;src:url(../fonts/remixicon/remixicon.woff2?v=1) format("woff2"),url(../fonts/remixicon/remixicon.woff?v=1) format("woff"),url(../fonts/remixicon/remixicon.ttf?v=1) format("truetype"),url(../fonts/remixicon/remixicon.svg?v=1#remixicon) format("svg");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-regular.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-regular.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-italic.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-italic.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-600.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-600.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-600italic.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-600italic.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700italic.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700italic.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;src:local(""),url(../fonts/jetbrains-mono/jetbrains-mono-v12-latin-regular.woff2) format("woff2"),url(../fonts/jetbrains-mono/jetbrains-mono-v12-latin-regular.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;src:local(""),url(../fonts/jetbrains-mono/jetbrains-mono-v12-latin-600.woff2) format("woff2"),url(../fonts/jetbrains-mono/jetbrains-mono-v12-latin-600.woff) format("woff")}:root{--baseFontFamily: "Source Sans Pro", sans-serif, emoji;--monospaceFontFamily: "Ubuntu Mono", monospace, emoji;--iconFontFamily: "remixicon";--txtPrimaryColor: #16161a;--txtHintColor: #666f75;--txtDisabledColor: #adb3b8;--primaryColor: #16161a;--bodyColor: #f8f9fa;--baseColor: #ffffff;--baseAlt1Color: #edf0f3;--baseAlt2Color: #dee3e8;--baseAlt3Color: #a9b4bc;--baseAlt4Color: #7c868d;--infoColor: #3da9fc;--infoAltColor: #d8eefe;--successColor: #2cb67d;--successAltColor: #daf6ea;--dangerColor: #ef4565;--dangerAltColor: #fcdee4;--warningColor: #ff8e3c;--warningAltColor: #ffe7d6;--overlayColor: rgba(88, 95, 101, .3);--tooltipColor: rgba(0, 0, 0, .85);--shadowColor: rgba(0, 0, 0, .05);--baseFontSize: 14.5px;--xsFontSize: 12px;--smFontSize: 13px;--lgFontSize: 15px;--xlFontSize: 16px;--baseLineHeight: 22px;--smLineHeight: 16px;--lgLineHeight: 24px;--inputHeight: 34px;--btnHeight: 40px;--xsBtnHeight: 24px;--smBtnHeight: 30px;--lgBtnHeight: 54px;--baseSpacing: 30px;--xsSpacing: 15px;--smSpacing: 20px;--lgSpacing: 50px;--xlSpacing: 60px;--wrapperWidth: 850px;--smWrapperWidth: 420px;--lgWrapperWidth: 1200px;--appSidebarWidth: 75px;--pageSidebarWidth: 220px;--baseAnimationSpeed: .15s;--activeAnimationSpeed: 70ms;--baseRadius: 3px;--lgRadius: 12px;--btnRadius: 3px;accent-color:var(--primaryColor)}html,body,div,span,applet,object,iframe,h1,h2,.breadcrumbs .breadcrumb-item,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}i{font-family:remixicon!important;font-style:normal;font-weight:400;font-size:1.1238rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i:before{vertical-align:top;margin-top:1px;display:inline-block}.ri-24-hours-fill:before{content:"\ea01"}.ri-24-hours-line:before{content:"\ea02"}.ri-4k-fill:before{content:"\ea03"}.ri-4k-line:before{content:"\ea04"}.ri-a-b:befoLine truncated @font-face{font-family:remixicon;src:url(../fonts/remixicon/remixicon.woff2?v=1) format("woff2"),url(../fonts/remixicon/remixicon.woff?v=1) format("woff"),url(../fonts/remixicon/remixicon.ttf?v=1) format("truetype"),url(../fonts/remixicon/remixicon.svg?v=1#remixicon) format("svg");font-display:swap}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-regular.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-regular.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-italic.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-italic.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-600.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-600.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-600italic.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-600italic.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local(""),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700italic.woff2) format("woff2"),url(../fonts/source-sans-pro/source-sans-pro-v18-latin_cyrillic-700italic.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;src:local(""),url(../fonts/jetbrains-mono/jetbrains-mono-v12-latin-regular.woff2) format("woff2"),url(../fonts/jetbrains-mono/jetbrains-mono-v12-latin-regular.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;src:local(""),url(../fonts/jetbrains-mono/jetbrains-mono-v12-latin-600.woff2) format("woff2"),url(../fonts/jetbrains-mono/jetbrains-mono-v12-latin-600.woff) format("woff")}:root{--baseFontFamily: "Source Sans Pro", sans-serif, emoji;--monospaceFontFamily: "Ubuntu Mono", monospace, emoji;--iconFontFamily: "remixicon";--txtPrimaryColor: #16161a;--txtHintColor: #666f75;--txtDisabledColor: #adb3b8;--primaryColor: #16161a;--bodyColor: #f8f9fa;--baseColor: #ffffff;--baseAlt1Color: #edf0f3;--baseAlt2Color: #dee3e8;--baseAlt3Color: #a9b4bc;--baseAlt4Color: #7c868d;--infoColor: #3da9fc;--infoAltColor: #d8eefe;--successColor: #2cb67d;--successAltColor: #d6f5e8;--dangerColor: #ef4565;--dangerAltColor: #fcdee4;--warningColor: #ff8e3c;--warningAltColor: #ffe7d6;--overlayColor: rgba(88, 95, 101, .3);--tooltipColor: rgba(0, 0, 0, .85);--shadowColor: rgba(0, 0, 0, .05);--baseFontSize: 14.5px;--xsFontSize: 12px;--smFontSize: 13px;--lgFontSize: 15px;--xlFontSize: 16px;--baseLineHeight: 22px;--smLineHeight: 16px;--lgLineHeight: 24px;--inputHeight: 34px;--btnHeight: 40px;--xsBtnHeight: 24px;--smBtnHeight: 30px;--lgBtnHeight: 54px;--baseSpacing: 30px;--xsSpacing: 15px;--smSpacing: 20px;--lgSpacing: 50px;--xlSpacing: 60px;--wrapperWidth: 850px;--smWrapperWidth: 420px;--lgWrapperWidth: 1200px;--appSidebarWidth: 75px;--pageSidebarWidth: 220px;--baseAnimationSpeed: .15s;--activeAnimationSpeed: 70ms;--baseRadius: 3px;--lgRadius: 12px;--btnRadius: 3px;accent-color:var(--primaryColor)}html,body,div,span,applet,object,iframe,h1,h2,.breadcrumbs .breadcrumb-item,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}i{font-family:remixicon!important;font-style:normal;font-weight:400;font-size:1.1238rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i:before{vertical-align:top;margin-top:1px;display:inline-block}.ri-24-hours-fill:before{content:"\ea01"}.ri-24-hours-line:before{content:"\ea02"}.ri-4k-fill:before{content:"\ea03"}.ri-4k-line:before{content:"\ea04"}.ri-a-b:befoLine truncated
+2 -2
View File
@@ -20,8 +20,8 @@
window.Prism = window.Prism || {}; window.Prism = window.Prism || {};
window.Prism.manual = true; window.Prism.manual = true;
</script> </script>
<script type="module" crossorigin src="/_/assets/index.c63abb6b.js"></script> <script type="module" crossorigin src="/_/assets/index.9681f446.js"></script>
<link rel="stylesheet" href="/_/assets/index.d97a62dd.css"> <link rel="stylesheet" href="/_/assets/index.e9cd31f7.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
+261 -439
View File
File diff suppressed because it is too large. Load diff
+3 -3
View File
@@ -19,16 +19,16 @@
"@codemirror/search": "^6.0.0", "@codemirror/search": "^6.0.0",
"@codemirror/state": "^6.0.0", "@codemirror/state": "^6.0.0",
"@codemirror/view": "^6.0.0", "@codemirror/view": "^6.0.0",
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", "@sveltejs/vite-plugin-svelte": "^1.0.1",
"chart.js": "^3.7.1", "chart.js": "^3.7.1",
"chartjs-adapter-luxon": "^1.1.0", "chartjs-adapter-luxon": "^1.1.0",
"luxon": "^2.3.2", "luxon": "^2.3.2",
"pocketbase": "^0.1.2", "pocketbase": "^0.2.2",
"prismjs": "^1.28.0", "prismjs": "^1.28.0",
"sass": "^1.45.0", "sass": "^1.45.0",
"svelte": "^3.44.0", "svelte": "^3.44.0",
"svelte-flatpickr": "^3.2.6", "svelte-flatpickr": "^3.2.6",
"svelte-spa-router": "^3.2.0", "svelte-spa-router": "^3.2.0",
"vite": "^2.7.0" "vite": "^3.0.0"
} }
} }
+25 -1
View File
@@ -10,6 +10,7 @@
import Toasts from "@/components/base/Toasts.svelte"; import Toasts from "@/components/base/Toasts.svelte";
import Toggler from "@/components/base/Toggler.svelte"; import Toggler from "@/components/base/Toggler.svelte";
import Confirmation from "@/components/base/Confirmation.svelte"; import Confirmation from "@/components/base/Confirmation.svelte";
import { pageTitle, appName } from "@/stores/app";
import { admin } from "@/stores/admin"; import { admin } from "@/stores/admin";
import { setErrors } from "@/stores/errors"; import { setErrors } from "@/stores/errors";
import { resetConfirmation } from "@/stores/confirmation"; import { resetConfirmation } from "@/stores/confirmation";
@@ -18,6 +19,10 @@
let showAppSidebar = false; let showAppSidebar = false;
$: if ($admin?.id) {
loadAppName();
}
function handleRouteLoading(e) { function handleRouteLoading(e) {
if (e?.detail?.location === oldLocation) { if (e?.detail?.location === oldLocation) {
return; // not an actual change return; // not an actual change
@@ -28,7 +33,7 @@
oldLocation = e?.detail?.location; oldLocation = e?.detail?.location;
// resets // resets
CommonHelper.setDocumentTitle(""); $pageTitle = "";
setErrors({}); setErrors({});
resetConfirmation(); resetConfirmation();
} }
@@ -37,11 +42,30 @@
replace("/"); replace("/");
} }
async function loadAppName() {
if (!$admin?.id) {
return;
}
try {
const settings = await ApiClient.Settings.getAll({
$cancelKey: "loadAppName",
});
$appName = settings?.meta?.appName || "";
} catch (err) {
console.warn("Failed to load app name.", err);
}
}
function logout() { function logout() {
ApiClient.logout(); ApiClient.logout();
} }
</script> </script>
<svelte:head>
<title>{CommonHelper.joinNonEmpty([$pageTitle, $appName, "PocketBase"], " - ")}</title>
</svelte:head>
<div class="app-layout"> <div class="app-layout">
{#if $admin?.id && showAppSidebar} {#if $admin?.id && showAppSidebar}
<aside class="app-sidebar"> <aside class="app-sidebar">
+1 -1
View File
@@ -138,7 +138,7 @@ function showTooltip(node, data) {
getTooltip().classList.add("active"); getTooltip().classList.add("active");
refreshTooltip(node, data); refreshTooltip(node, data);
}, (!isNaN(data.delay) ? data.delay : 250)); }, (!isNaN(data.delay) ? data.delay : 200));
} }
export default function tooltip(node, tooltipData) { export default function tooltip(node, tooltipData) {
@@ -1,16 +1,14 @@
<script> <script>
import { link } from "svelte-spa-router"; import { link, replace, querystring } from "svelte-spa-router";
import { replace } from "svelte-spa-router";
import FullPage from "@/components/base/FullPage.svelte"; import FullPage from "@/components/base/FullPage.svelte";
import ApiClient from "@/utils/ApiClient"; import ApiClient from "@/utils/ApiClient";
import CommonHelper from "@/utils/CommonHelper";
import Field from "@/components/base/Field.svelte"; import Field from "@/components/base/Field.svelte";
import { addErrorToast } from "@/stores/toasts"; import { addErrorToast } from "@/stores/toasts";
const queryParams = CommonHelper.getQueryParams(window.location?.href); const queryParams = new URLSearchParams($querystring);
let email = queryParams.demoEmail || ""; let email = queryParams.get("demoEmail") || "";
let password = queryParams.demoPassword || ""; let password = queryParams.get("demoPassword") || "";
let isLoading = false; let isLoading = false;
function login() { function login() {
+15 -11
View File
@@ -1,36 +1,38 @@
<script> <script>
import { replace, querystring } from "svelte-spa-router";
import ApiClient from "@/utils/ApiClient"; import ApiClient from "@/utils/ApiClient";
import CommonHelper from "@/utils/CommonHelper"; import CommonHelper from "@/utils/CommonHelper";
import { pageTitle } from "@/stores/app";
import { admin as loggedAdmin } from "@/stores/admin"; import { admin as loggedAdmin } from "@/stores/admin";
import Searchbar from "@/components/base/Searchbar.svelte"; import Searchbar from "@/components/base/Searchbar.svelte";
import RefreshButton from "@/components/base/RefreshButton.svelte";
import SortHeader from "@/components/base/SortHeader.svelte"; import SortHeader from "@/components/base/SortHeader.svelte";
import IdLabel from "@/components/base/IdLabel.svelte"; import IdLabel from "@/components/base/IdLabel.svelte";
import FormattedDate from "@/components/base/FormattedDate.svelte"; import FormattedDate from "@/components/base/FormattedDate.svelte";
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte"; import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
import AdminUpsertPanel from "@/components/admins/AdminUpsertPanel.svelte"; import AdminUpsertPanel from "@/components/admins/AdminUpsertPanel.svelte";
const queryParams = CommonHelper.getQueryParams(window.location?.href); $pageTitle = "Admins";
const queryParams = new URLSearchParams($querystring);
let adminUpsertPanel; let adminUpsertPanel;
let admins = []; let admins = [];
let isLoading = false; let isLoading = false;
let filter = queryParams.filter || ""; let filter = queryParams.get("filter") || "";
let sort = queryParams.sort || "-created"; let sort = queryParams.get("sort") || "-created";
$: if (sort !== -1 && filter !== -1) { $: if (sort !== -1 && filter !== -1) {
// keep listing params in sync // keep listing params in sync
CommonHelper.replaceClientQueryParams({ const query = new URLSearchParams({ filter, sort }).toString();
filter: filter, replace("/settings/admins?" + query);
sort: sort,
});
loadAdmins(); loadAdmins();
} }
CommonHelper.setDocumentTitle("Admins");
export function loadAdmins() { export function loadAdmins() {
isLoading = true; isLoading = true;
admins = []; // reset admins = []; // reset
return ApiClient.Admins.getFullList(100, { return ApiClient.Admins.getFullList(100, {
@@ -42,7 +44,7 @@
isLoading = false; isLoading = false;
}) })
.catch((err) => { .catch((err) => {
if (err !== null) { if (!err?.isAbort) {
isLoading = false; isLoading = false;
console.warn(err); console.warn(err);
clearList(); clearList();
@@ -62,9 +64,11 @@
<header class="page-header"> <header class="page-header">
<nav class="breadcrumbs"> <nav class="breadcrumbs">
<div class="breadcrumb-item">Settings</div> <div class="breadcrumb-item">Settings</div>
<div class="breadcrumb-item">Admins</div> <div class="breadcrumb-item">{$pageTitle}</div>
</nav> </nav>
<RefreshButton on:refresh={() => loadAdmins()} />
<div class="flex-fill" /> <div class="flex-fill" />
<button type="button" class="btn btn-expanded" on:click={() => adminUpsertPanel?.show()}> <button type="button" class="btn btn-expanded" on:click={() => adminUpsertPanel?.show()}>
@@ -1,11 +1,13 @@
<script> <script>
import { onMount } from "svelte";
export let value = ""; export let value = "";
export let maxHeight = 200; export let maxHeight = 200;
let inputElem; let inputElem;
let updateTimeoutId; let updateTimeoutId;
$: if (inputElem && typeof value !== undefined) { $: if (typeof value !== undefined) {
updateInputHeight(); updateInputHeight();
} }
@@ -32,6 +34,12 @@
form?.requestSubmit && form.requestSubmit(); form?.requestSubmit && form.requestSubmit();
} }
} }
onMount(() => {
updateInputHeight();
return () => clearTimeout(updateTimeoutId);
});
</script> </script>
<textarea bind:this={inputElem} bind:value on:keydown={handleKeydown} {...$$restProps} /> <textarea bind:this={inputElem} bind:value on:keydown={handleKeydown} {...$$restProps} />
+1
View File
@@ -1,6 +1,7 @@
<script> <script>
import Prism from "prismjs"; import Prism from "prismjs";
import "prismjs/plugins/normalize-whitespace/prism-normalize-whitespace.js"; import "prismjs/plugins/normalize-whitespace/prism-normalize-whitespace.js";
import "prismjs/components/prism-dart.js";
import "@/scss/prism_light.scss"; import "@/scss/prism_light.scss";
export let content = ""; export let content = "";
+2
View File
@@ -23,9 +23,11 @@
} }
onMount(() => { onMount(() => {
container.addEventListener("input", handleChange);
container.addEventListener("change", handleChange); container.addEventListener("change", handleChange);
return () => { return () => {
container.removeEventListener("input", handleChange);
container.removeEventListener("change", handleChange); container.removeEventListener("change", handleChange);
}; };
}); });
Loaded 100 of 151 files, more files were not shown because too many files have changed in this diff. Show more