From f7f2cb36d5a16def7f36f738e4c3bedccdacc853 Mon Sep 17 00:00:00 2001 From: Dean Date: Tue, 12 Mar 2024 17:01:07 +0000 Subject: [PATCH 01/49] Table/Tableblock deprecated. Replaced with Gridblock labelled as Table --- .../src/components/deploy/AppActions.svelte | 4 +- .../new/_components/componentStructure.json | 4 +- .../NewScreen/CreateScreenModal.svelte | 10 +- .../NewScreen/images/tableDetails.png | Bin 0 -> 29899 bytes .../NewScreen/images/tableInline.png | Bin 0 -> 22018 bytes .../design/_components/NewScreen/index.svelte | 25 +-- .../src/templates/gridDetailsScreen.js | 158 ++++++++++++++++++ .../builder/src/templates/gridListScreen.js | 41 +++++ packages/builder/src/templates/index.js | 6 +- .../builder/src/templates/rowListScreen.js | 63 ------- packages/client/manifest.json | 4 +- 11 files changed, 232 insertions(+), 83 deletions(-) create mode 100644 packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableDetails.png create mode 100644 packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableInline.png create mode 100644 packages/builder/src/templates/gridDetailsScreen.js create mode 100644 packages/builder/src/templates/gridListScreen.js delete mode 100644 packages/builder/src/templates/rowListScreen.js diff --git a/packages/builder/src/components/deploy/AppActions.svelte b/packages/builder/src/components/deploy/AppActions.svelte index 9e5de1d3bf..72622d0a86 100644 --- a/packages/builder/src/components/deploy/AppActions.svelte +++ b/packages/builder/src/components/deploy/AppActions.svelte @@ -44,6 +44,7 @@ let appActionPopoverOpen = false let appActionPopoverAnchor let publishing = false + let lastOpened $: filteredApps = $apps.filter(app => app.devId === application) $: selectedApp = filteredApps?.length ? filteredApps[0] : null @@ -57,7 +58,7 @@ $appStore.version && $appStore.upgradableVersion !== $appStore.version $: canPublish = !publishing && loaded && $sortedScreens.length > 0 - $: lastDeployed = getLastDeployedString($deploymentStore) + $: lastDeployed = getLastDeployedString($deploymentStore, lastOpened) const initialiseApp = async () => { const applicationPkg = await API.fetchAppPackage($appStore.devId) @@ -201,6 +202,7 @@ class="app-action-button publish app-action-popover" on:click={() => { if (!appActionPopoverOpen) { + lastOpened = new Date() appActionPopover.show() } else { appActionPopover.hide() diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json index 96e8faf93c..87fb5b7bfe 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json @@ -3,8 +3,6 @@ "name": "Blocks", "icon": "Article", "children": [ - "gridblock", - "tableblock", "cardsblock", "repeaterblock", "formblock", @@ -24,7 +22,7 @@ "children": [ "dataprovider", "repeater", - "table", + "gridblock", "spreadsheet", "dynamicfilter", "daterangepicker" diff --git a/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/CreateScreenModal.svelte b/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/CreateScreenModal.svelte index 8c1a11289d..b49e38d9cd 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/CreateScreenModal.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/CreateScreenModal.svelte @@ -19,7 +19,8 @@ import { goto } from "@roxi/routify" import { TOUR_KEYS } from "components/portal/onboarding/tours.js" import formScreen from "templates/formScreen" - import rowListScreen from "templates/rowListScreen" + import gridListScreen from "templates/gridListScreen" + import gridDetailsScreen from "templates/gridDetailsScreen" let mode let pendingScreen @@ -127,7 +128,7 @@ screenAccessRole = Roles.BASIC formType = null - if (mode === "table" || mode === "grid" || mode === "form") { + if (mode === "grid" || mode === "gridDetails" || mode === "form") { datasourceModal.show() } else if (mode === "blank") { let templates = getTemplates($tables.list) @@ -153,7 +154,10 @@ // Handler for Datasource Screen Creation const completeDatasourceScreenCreation = async () => { - templates = rowListScreen(selectedDatasources, mode) + templates = + mode === "grid" + ? gridListScreen(selectedDatasources) + : gridDetailsScreen(selectedDatasources) const screens = templates.map(template => { let screenTemplate = template.create() diff --git a/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableDetails.png b/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableDetails.png new file mode 100644 index 0000000000000000000000000000000000000000..f67495f3aa6f52eaee3ee846ce95837941a5fb1b GIT binary patch literal 29899 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
pwl7ZpfAcYm`GJ3 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 A%K!iX literal 0 HcmV?d00001 diff --git a/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableInline.png b/packages/builder/src/pages/builder/app/[application]/design/_components/NewScreen/images/tableInline.png new file mode 100644 index 0000000000000000000000000000000000000000..905294a9ae3fd9d5a0c01605770ca5fed5cfb245 GIT binary patch literal 22018 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 dOU1sd{QoE~Vrd>j -
createScreenModal.show("table")}> +
createScreenModal.show("grid")}>
- +
- Table - View, edit and delete rows on a table + Table with inline editing + View, edit and delete rows inline
-
createScreenModal.show("grid")}> +
createScreenModal.show("gridDetails")}>
- +
- Grid - View and manipulate rows on a grid + Table with details panel + Manage your row details in a side panel
@@ -113,6 +113,11 @@ width: 100%; } + .card .image { + min-height: 130px; + min-width: 235px; + } + .text { border: 1px solid var(--grey-4); border-radius: 0 0 4px 4px; diff --git a/packages/builder/src/templates/gridDetailsScreen.js b/packages/builder/src/templates/gridDetailsScreen.js new file mode 100644 index 0000000000..8e6e44bfae --- /dev/null +++ b/packages/builder/src/templates/gridDetailsScreen.js @@ -0,0 +1,158 @@ +import sanitizeUrl from "helpers/sanitizeUrl" +import { Screen } from "./Screen" +import { Component } from "./Component" +import { generate } from "shortid" +import { makePropSafe as safe } from "@budibase/string-templates" +import { Utils } from "@budibase/frontend-core" + +export default function (datasources) { + if (!Array.isArray(datasources)) { + return [] + } + return datasources.map(datasource => { + return { + name: `${datasource.label} - List with panel`, + create: () => createScreen(datasource), + id: GRID_DETAILS_TEMPLATE, + resourceId: datasource.resourceId, + } + }) +} + +export const GRID_DETAILS_TEMPLATE = "GRID_DETAILS_TEMPLATE" +export const gridDetailsUrl = datasource => sanitizeUrl(`/${datasource.label}`) + +const createScreen = datasource => { + /* + Create Row + */ + const createRowSidePanel = new Component( + "@budibase/standard-components/sidepanel" + ).instanceName("New row side panel") + + const buttonGroup = new Component("@budibase/standard-components/buttongroup") + const createButton = new Component("@budibase/standard-components/button") + + createButton.instanceName(`${datasource.label} - Create`).customProps({ + onClick: [ + { + id: 0, + "##eventHandlerType": "Open Side Panel", + parameters: { + id: createRowSidePanel._json._id, + }, + }, + ], + text: "Create row", + type: "cta", + }) + + buttonGroup.customProps({ + hAlign: "right", + buttons: [createButton.json()], + }) + + const gridHeader = new Component("@budibase/standard-components/container") + .instanceName("Heading container") + .customProps({ + direction: "row", + hAlign: "stretch", + }) + + const heading = new Component("@budibase/standard-components/heading") + .instanceName("Table heading") + .customProps({ + text: datasource?.label, + }) + + gridHeader.addChild(heading) + gridHeader.addChild(buttonGroup) + + const createFormBlock = new Component( + "@budibase/standard-components/formblock" + ) + createFormBlock.instanceName("Create row formblock").customProps({ + dataSource: datasource, + labelPosition: "left", + buttonPosition: "top", + actionType: "Create", + title: "Create row", + buttons: Utils.buildFormBlockButtonConfig({ + _id: createFormBlock._json._id, + showDeleteButton: false, + showSaveButton: true, + saveButtonLabel: "Save", + actionType: "Create", + dataSource: datasource, + }), + }) + + createRowSidePanel.addChild(createFormBlock) + + /* + Edit Row + */ + const stateKey = `ID_${generate()}` + const detailsSidePanel = new Component( + "@budibase/standard-components/sidepanel" + ).instanceName("Edit row side panel") + + const editFormBlock = new Component("@budibase/standard-components/formblock") + editFormBlock.instanceName("Edit row formblock").customProps({ + dataSource: datasource, + labelPosition: "left", + buttonPosition: "top", + actionType: "Update", + title: "Edit", + rowId: `{{ ${safe("state")}.${safe(stateKey)} }}`, + buttons: Utils.buildFormBlockButtonConfig({ + _id: editFormBlock._json._id, + showDeleteButton: true, + showSaveButton: true, + saveButtonLabel: "Save", + deleteButtonLabel: "Delete", + actionType: "Update", + dataSource: datasource, + }), + }) + + detailsSidePanel.addChild(editFormBlock) + + const gridBlock = new Component("@budibase/standard-components/gridblock") + gridBlock + .customProps({ + table: datasource, + allowAddRows: false, + allowEditRows: false, + allowDeleteRows: false, + onRowClick: [ + { + id: 0, + "##eventHandlerType": "Update State", + parameters: { + key: stateKey, + type: "set", + persist: false, + value: `{{ ${safe("eventContext")}.${safe("row")}._id }}`, + }, + }, + { + id: 1, + "##eventHandlerType": "Open Side Panel", + parameters: { + id: detailsSidePanel._json._id, + }, + }, + ], + }) + .instanceName(`${datasource.label} - Table`) + + return new Screen() + .route(gridDetailsUrl(datasource)) + .instanceName(`${datasource.label} - List and details`) + .addChild(gridHeader) + .addChild(gridBlock) + .addChild(createRowSidePanel) + .addChild(detailsSidePanel) + .json() +} diff --git a/packages/builder/src/templates/gridListScreen.js b/packages/builder/src/templates/gridListScreen.js new file mode 100644 index 0000000000..c98d5d4baf --- /dev/null +++ b/packages/builder/src/templates/gridListScreen.js @@ -0,0 +1,41 @@ +import sanitizeUrl from "helpers/sanitizeUrl" +import { Screen } from "./Screen" +import { Component } from "./Component" + +export default function (datasources) { + if (!Array.isArray(datasources)) { + return [] + } + return datasources.map(datasource => { + return { + name: `${datasource.label} - List`, + create: () => createScreen(datasource), + id: GRID_LIST_TEMPLATE, + resourceId: datasource.resourceId, + } + }) +} + +export const GRID_LIST_TEMPLATE = "GRID_LIST_TEMPLATE" +export const gridListUrl = datasource => sanitizeUrl(`/${datasource.label}`) + +const createScreen = datasource => { + const heading = new Component("@budibase/standard-components/heading") + .instanceName("Table heading") + .customProps({ + text: datasource?.label, + }) + + const gridBlock = new Component("@budibase/standard-components/gridblock") + .instanceName(`${datasource.label} - Table`) + .customProps({ + table: datasource, + }) + + return new Screen() + .route(gridListUrl(datasource)) + .instanceName(`${datasource.label} - List`) + .addChild(heading) + .addChild(gridBlock) + .json() +} diff --git a/packages/builder/src/templates/index.js b/packages/builder/src/templates/index.js index fff31cc070..b00b8cb621 100644 --- a/packages/builder/src/templates/index.js +++ b/packages/builder/src/templates/index.js @@ -1,9 +1,11 @@ -import rowListScreen from "./rowListScreen" +import gridListScreen from "./gridListScreen" +import gridDetailsScreen from "./gridDetailsScreen" import createFromScratchScreen from "./createFromScratchScreen" import formScreen from "./formScreen" const allTemplates = datasources => [ - ...rowListScreen(datasources), + ...gridListScreen(datasources), + ...gridDetailsScreen(datasources), ...formScreen(datasources), ] diff --git a/packages/builder/src/templates/rowListScreen.js b/packages/builder/src/templates/rowListScreen.js deleted file mode 100644 index 7781a3d067..0000000000 --- a/packages/builder/src/templates/rowListScreen.js +++ /dev/null @@ -1,63 +0,0 @@ -import sanitizeUrl from "helpers/sanitizeUrl" -import { Screen } from "./Screen" -import { Component } from "./Component" - -export default function (datasources, mode = "table") { - if (!Array.isArray(datasources)) { - return [] - } - return datasources.map(datasource => { - return { - name: `${datasource.label} - List`, - create: () => createScreen(datasource, mode), - id: ROW_LIST_TEMPLATE, - resourceId: datasource.resourceId, - } - }) -} - -export const ROW_LIST_TEMPLATE = "ROW_LIST_TEMPLATE" -export const rowListUrl = datasource => sanitizeUrl(`/${datasource.label}`) - -const generateTableBlock = datasource => { - const tableBlock = new Component("@budibase/standard-components/tableblock") - tableBlock - .customProps({ - title: datasource.label, - dataSource: datasource, - sortOrder: "Ascending", - size: "spectrum--medium", - paginate: true, - rowCount: 8, - clickBehaviour: "details", - showTitleButton: true, - titleButtonText: "Create row", - titleButtonClickBehaviour: "new", - sidePanelSaveLabel: "Save", - sidePanelDeleteLabel: "Delete", - }) - .instanceName(`${datasource.label} - Table block`) - return tableBlock -} - -const generateGridBlock = datasource => { - const gridBlock = new Component("@budibase/standard-components/gridblock") - gridBlock - .customProps({ - table: datasource, - }) - .instanceName(`${datasource.label} - Grid block`) - return gridBlock -} - -const createScreen = (datasource, mode) => { - return new Screen() - .route(rowListUrl(datasource)) - .instanceName(`${datasource.label} - List`) - .addChild( - mode === "table" - ? generateTableBlock(datasource) - : generateGridBlock(datasource) - ) - .json() -} diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 531e2c968a..a6e14be4ef 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -4673,6 +4673,7 @@ } }, "table": { + "deprecated": true, "name": "Table", "icon": "Table", "illegalChildren": ["section"], @@ -5418,6 +5419,7 @@ ] }, "tableblock": { + "deprecated": true, "block": true, "name": "Table Block", "icon": "Table", @@ -6595,7 +6597,7 @@ ] }, "gridblock": { - "name": "Grid Block", + "name": "Table", "icon": "Table", "styles": ["size"], "size": { From 23ac11ad6b6dddd91f8c936da82d9ea7c57af79d Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Mar 2024 13:18:22 +0100 Subject: [PATCH 02/49] Add single subtype --- packages/types/src/documents/app/row.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/types/src/documents/app/row.ts b/packages/types/src/documents/app/row.ts index b37412398d..0b4c6cd295 100644 --- a/packages/types/src/documents/app/row.ts +++ b/packages/types/src/documents/app/row.ts @@ -38,6 +38,7 @@ export interface Row extends Document { export enum FieldSubtype { USER = "user", USERS = "users", + SINGLE = "single", } export const FieldTypeSubtypes = { @@ -45,4 +46,7 @@ export const FieldTypeSubtypes = { USER: FieldSubtype.USER, USERS: FieldSubtype.USERS, }, + ATTACHMENT: { + SINGLE: FieldSubtype.SINGLE, + }, } From 59a7d8052ace1c737e10be982d7b89a4c0e1ec69 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Mar 2024 13:35:09 +0100 Subject: [PATCH 03/49] Single attachment subtype --- .../DataTable/modals/CreateEditColumn.svelte | 22 ++++++++++--------- .../server/src/api/controllers/table/utils.ts | 19 ++++++++++++++++ .../types/src/documents/app/table/schema.ts | 1 + 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index f6a4f29a06..d3eaaa5d6a 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -34,7 +34,12 @@ import { getBindings } from "components/backend/DataTable/formula" import JSONSchemaModal from "./JSONSchemaModal.svelte" import { ValidColumnNameRegex } from "@budibase/shared-core" - import { FieldType, FieldSubtype, SourceName } from "@budibase/types" + import { + FieldType, + FieldSubtype, + SourceName, + FieldTypeSubtypes, + } from "@budibase/types" import RelationshipSelector from "components/common/RelationshipSelector.svelte" import { RowUtils } from "@budibase/frontend-core" import ServerBindingPanel from "components/common/bindings/ServerBindingPanel.svelte" @@ -191,8 +196,10 @@ // don't make field IDs for auto types if (type === AUTO_TYPE || autocolumn) { return type.toUpperCase() - } else { + } else if (type === FieldType.BB_REFERENCE) { return `${type}${subtype || ""}`.toUpperCase() + } else { + return type.toUpperCase() } } @@ -705,17 +712,12 @@ /> {:else if editableColumn.type === FieldType.ATTACHMENT} { if (!e.detail) { - editableColumn.constraints ??= { length: {} } - editableColumn.constraints.length ??= {} - editableColumn.constraints.length.maximum = 1 - editableColumn.constraints.length.message = - "cannot contain multiple files" + editableColumn.subtype = FieldTypeSubtypes.ATTACHMENT.SINGLE } else { - delete editableColumn.constraints?.length?.maximum - delete editableColumn.constraints?.length?.message + delete editableColumn.subtype } }} thin diff --git a/packages/server/src/api/controllers/table/utils.ts b/packages/server/src/api/controllers/table/utils.ts index 9e1bb59e9d..ac13617869 100644 --- a/packages/server/src/api/controllers/table/utils.ts +++ b/packages/server/src/api/controllers/table/utils.ts @@ -30,6 +30,7 @@ import { View, RelationshipFieldMetadata, FieldType, + FieldTypeSubtypes, } from "@budibase/types" export async function clearColumns(table: Table, columnNames: string[]) { @@ -88,6 +89,24 @@ export async function checkForColumnUpdates( // Update views await checkForViewUpdates(updatedTable, deletedColumns, columnRename) } + + for (const attachmentColumn of Object.values(updatedTable.schema).filter( + column => + column.type === FieldType.ATTACHMENT && + column.subtype !== oldTable?.schema[column.name]?.subtype + )) { + if (attachmentColumn.subtype === FieldTypeSubtypes.ATTACHMENT.SINGLE) { + attachmentColumn.constraints ??= { length: {} } + attachmentColumn.constraints.length ??= {} + attachmentColumn.constraints.length.maximum = 1 + attachmentColumn.constraints.length.message = + "cannot contain multiple files" + } else { + delete attachmentColumn.constraints?.length?.maximum + delete attachmentColumn.constraints?.length?.message + } + } + return { rows: updatedRows, table: updatedTable } } diff --git a/packages/types/src/documents/app/table/schema.ts b/packages/types/src/documents/app/table/schema.ts index 17abf747b2..0e5bec134c 100644 --- a/packages/types/src/documents/app/table/schema.ts +++ b/packages/types/src/documents/app/table/schema.ts @@ -119,6 +119,7 @@ export interface FieldConstraints { length?: { minimum?: string | number | null maximum?: string | number | null + message?: string } numericality?: { greaterThanOrEqualTo: string | null From dd468c293e66f2f87f0de4e9e14b609902bd121a Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Wed, 20 Mar 2024 13:03:24 +0000 Subject: [PATCH 04/49] Remove worker aws-sdk, oauth, node-fetch mocks. --- .../worker/__mocks__/{oauth.ts => _oauth.ts} | 0 packages/worker/__mocks__/aws-sdk.ts | 15 -- packages/worker/__mocks__/node-fetch.ts | 24 --- packages/worker/package.json | 1 + .../src/api/routes/global/tests/auth.spec.ts | 92 +++++---- yarn.lock | 179 +++++++++++++++--- 6 files changed, 198 insertions(+), 113 deletions(-) rename packages/worker/__mocks__/{oauth.ts => _oauth.ts} (100%) delete mode 100644 packages/worker/__mocks__/aws-sdk.ts delete mode 100644 packages/worker/__mocks__/node-fetch.ts diff --git a/packages/worker/__mocks__/oauth.ts b/packages/worker/__mocks__/_oauth.ts similarity index 100% rename from packages/worker/__mocks__/oauth.ts rename to packages/worker/__mocks__/_oauth.ts diff --git a/packages/worker/__mocks__/aws-sdk.ts b/packages/worker/__mocks__/aws-sdk.ts deleted file mode 100644 index 7fac80faa9..0000000000 --- a/packages/worker/__mocks__/aws-sdk.ts +++ /dev/null @@ -1,15 +0,0 @@ -const mockS3 = { - headBucket: jest.fn().mockReturnThis(), - deleteObject: jest.fn().mockReturnThis(), - deleteObjects: jest.fn().mockReturnThis(), - createBucket: jest.fn().mockReturnThis(), - listObjects: jest.fn().mockReturnThis(), - promise: jest.fn().mockReturnThis(), - catch: jest.fn(), -} - -const AWS = { - S3: jest.fn(() => mockS3), -} - -export default AWS diff --git a/packages/worker/__mocks__/node-fetch.ts b/packages/worker/__mocks__/node-fetch.ts deleted file mode 100644 index 27c9b507a4..0000000000 --- a/packages/worker/__mocks__/node-fetch.ts +++ /dev/null @@ -1,24 +0,0 @@ -import fs from "fs" - -module FetchMock { - const fetch = jest.requireActual("node-fetch") - - const func = async (url: any, opts: any) => { - if (url.includes("http://someconfigurl")) { - return { - ok: true, - json: () => ({ - issuer: "test", - authorization_endpoint: "http://localhost/auth", - token_endpoint: "http://localhost/token", - userinfo_endpoint: "http://localhost/userinfo", - }), - } - } - return fetch(url, opts) - } - - func.Headers = fetch.Headers - - module.exports = func -} diff --git a/packages/worker/package.json b/packages/worker/package.json index e01a50d981..efdbe6aa12 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -86,6 +86,7 @@ "@types/supertest": "2.0.14", "@types/uuid": "8.3.4", "jest": "29.7.0", + "nock": "^13.5.4", "nodemon": "2.0.15", "rimraf": "3.0.2", "supertest": "6.3.3", diff --git a/packages/worker/src/api/routes/global/tests/auth.spec.ts b/packages/worker/src/api/routes/global/tests/auth.spec.ts index a81d5db435..852831837b 100644 --- a/packages/worker/src/api/routes/global/tests/auth.spec.ts +++ b/packages/worker/src/api/routes/global/tests/auth.spec.ts @@ -13,6 +13,8 @@ import { events, constants } from "@budibase/backend-core" import { Response } from "superagent" import * as userSdk from "../../../../sdk/users" +import nock from "nock" +import * as jwt from "jsonwebtoken" function getAuthCookie(response: Response) { return response.headers["set-cookie"] @@ -277,45 +279,9 @@ describe("/api/global/auth", () => { }) }) - describe("init", () => { - describe("POST /api/global/auth/init", () => {}) - - describe("GET /api/global/auth/init", () => {}) - }) - - describe("datasource", () => { - // MULTI TENANT - - describe("GET /api/global/auth/:tenantId/datasource/:provider", () => {}) - - describe("GET /api/global/auth/:tenantId/datasource/:provider/callback", () => {}) - - // SINGLE TENANT - - describe("GET /api/global/auth/datasource/:provider/callback", () => {}) - }) - - describe("google", () => { - // MULTI TENANT - - describe("GET /api/global/auth/:tenantId/google", () => {}) - - describe("GET /api/global/auth/:tenantId/google/callback", () => {}) - - // SINGLE TENANT - - describe("GET /api/global/auth/google/callback", () => {}) - - describe("GET /api/admin/auth/google/callback", () => {}) - }) - describe("oidc", () => { - beforeEach(async () => { - jest.clearAllMocks() - mockGetWellKnownConfig() - - // see: __mocks__/oauth - // for associated mocking inside passport + afterEach(() => { + nock.cleanAll() }) const generateOidcConfig = async () => { @@ -324,21 +290,16 @@ describe("/api/global/auth", () => { return chosenConfig.uuid } - const mockGetWellKnownConfig = () => { - mocks.fetch.mockReturnValue({ - ok: true, - json: () => ({ + // MULTI TENANT + describe("GET /api/global/auth/:tenantId/oidc/configs/:configId", () => { + it("redirects to auth provider", async () => { + nock("http://someconfigurl").get("/").times(1).reply(200, { issuer: "test", authorization_endpoint: "http://localhost/auth", token_endpoint: "http://localhost/token", userinfo_endpoint: "http://localhost/userinfo", - }), - }) - } + }) - // MULTI TENANT - describe("GET /api/global/auth/:tenantId/oidc/configs/:configId", () => { - it("redirects to auth provider", async () => { const configId = await generateOidcConfig() const res = await config.api.configs.getOIDCConfig(configId) @@ -355,10 +316,43 @@ describe("/api/global/auth", () => { describe("GET /api/global/auth/:tenantId/oidc/callback", () => { it("logs in", async () => { + nock("http://someconfigurl").get("/").times(2).reply(200, { + issuer: "test", + authorization_endpoint: "http://localhost/auth", + token_endpoint: "http://localhost/token", + userinfo_endpoint: "http://localhost/userinfo", + }) + + const token = jwt.sign( + { + iss: "test", + sub: "sub", + aud: "clientId", + exp: Math.floor(Date.now() / 1000) + 60 * 60, + email: "oauth@example.com", + }, + "secret" + ) + + nock("http://localhost").post("/token").reply(200, { + access_token: "access", + refresh_token: "refresh", + id_token: token, + }) + + nock("http://localhost").get("/userinfo?schema=openid").reply(200, { + sub: "sub", + email: "oauth@example.com", + }) + const configId = await generateOidcConfig() const preAuthRes = await config.api.configs.getOIDCConfig(configId) - const res = await config.api.configs.OIDCCallback(configId, preAuthRes) + if (res.status > 399) { + throw new Error( + `OIDC callback failed with status ${res.status}: ${res.text}` + ) + } expect(events.auth.login).toHaveBeenCalledWith( "oidc", diff --git a/yarn.lock b/yarn.lock index 22c11453ee..5abdf295f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7179,7 +7179,37 @@ axios-retry@^3.1.9: "@babel/runtime" "^7.15.4" is-retry-allowed "^2.2.0" -axios@0.24.0, axios@1.1.3, axios@1.6.3, axios@^0.21.1, axios@^0.21.4, axios@^0.26.0, axios@^1.0.0, axios@^1.1.3, axios@^1.5.0: +axios@0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" + integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== + dependencies: + follow-redirects "^1.14.4" + +axios@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.1.3.tgz#8274250dada2edf53814ed7db644b9c2866c1e35" + integrity sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@^0.21.1, axios@^0.21.4: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^0.26.0: + version "0.26.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" + integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== + dependencies: + follow-redirects "^1.14.8" + +axios@^1.0.0, axios@^1.1.3, axios@^1.5.0: version "1.6.3" resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.3.tgz#7f50f23b3aa246eff43c54834272346c396613f4" integrity sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww== @@ -11169,6 +11199,11 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== +follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.14.8: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" @@ -12310,7 +12345,12 @@ http-assert@^1.3.0: deep-equal "~1.0.1" http-errors "~1.8.0" -http-cache-semantics@3.8.1, http-cache-semantics@4.1.1, http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -13260,11 +13300,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - isolated-vm@^4.7.2: version "4.7.2" resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-4.7.2.tgz#5670d5cce1d92004f9b825bec5b0b11fc7501b65" @@ -15852,7 +15887,7 @@ msgpackr-extract@^3.0.2: "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.2" "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" -msgpackr@1.10.1, msgpackr@^1.5.2: +msgpackr@^1.5.2: version "1.10.1" resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.10.1.tgz#51953bb4ce4f3494f0c4af3f484f01cfbb306555" integrity sha512-r5VRLv9qouXuLiIBrLpl2d5ZvPt8svdQTl5/vMvE4nzDMyEX4sgW5yWhuBBj5UmgwOTWj8CIdSXn5sAfsHAWIQ== @@ -16020,6 +16055,15 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +nock@^13.5.4: + version "13.5.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" + integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== + dependencies: + debug "^4.1.0" + json-stringify-safe "^5.0.1" + propagate "^2.0.0" + node-abi@^3.3.0: version "3.54.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" @@ -16052,13 +16096,25 @@ node-duration@^1.0.4: resolved "https://registry.yarnpkg.com/node-duration/-/node-duration-1.0.4.tgz#3e94ecc0e473691c89c4560074503362071cecac" integrity sha512-eUXYNSY7DL53vqfTosggWkvyIW3bhAcqBDIlolgNYlZhianXTrCL50rlUJWD1eRqkIxMppXTfiFbp+9SjpPrgA== -node-fetch@2.6.0, node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9, node-fetch@^2.7.0: +node-fetch@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.9, node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-forge@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" @@ -17208,7 +17264,15 @@ passport-strategy@1.x.x, passport-strategy@^1.0.0: resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== -passport@0.6.0, passport@^0.4.0, passport@^0.6.0: +passport@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.1.tgz#941446a21cb92fc688d97a0861c38ce9f738f270" + integrity sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg== + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + +passport@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/passport/-/passport-0.6.0.tgz#e869579fab465b5c0b291e841e6cc95c005fac9d" integrity sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug== @@ -18393,6 +18457,11 @@ promzard@^1.0.0: dependencies: read "^2.0.0" +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + proper-lockfile@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" @@ -18503,7 +18572,7 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== -psl@^1.1.33: +psl@^1.1.28, psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== @@ -19528,6 +19597,11 @@ sax@1.2.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== +sax@>=0.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + sax@>=0.6.0: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -19609,13 +19683,40 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@7.5.3, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@~2.3.1, semver@~7.0.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.5.3, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: version "7.5.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +semver@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" + integrity sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA== + +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + seq-queue@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" @@ -21218,7 +21319,7 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@4.1.3, "tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0", tough-cookie@^4.0.0, tough-cookie@^4.1.2, tough-cookie@~2.5.0: +"tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0", tough-cookie@^4.0.0, tough-cookie@^4.1.2: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== @@ -21228,6 +21329,14 @@ tough-cookie@4.1.3, "tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0", tough-cookie@^4.0 universalify "^0.2.0" url-parse "^1.5.3" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" @@ -21696,14 +21805,6 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unset-value@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-2.0.1.tgz#57bed0c22d26f28d69acde5df9a11b77c74d2df3" - integrity sha512-2hvrBfjUE00PkqN+q0XP6yRAOGrR06uSiUoIQGZkc7GxvQ9H7v8quUPNtZjMg4uux69i8HWpIjLPUKwCuRGyNg== - dependencies: - has-value "^2.0.2" - isobject "^4.0.0" - untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" @@ -22474,10 +22575,33 @@ xml-parse-from-string@^1.0.0: resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" integrity sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g== -xml2js@0.1.x, xml2js@0.4.19, xml2js@0.5.0, xml2js@0.6.2, xml2js@^0.4.19, xml2js@^0.4.5: - version "0.6.2" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" - integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== +xml2js@0.1.x: + version "0.1.14" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.1.14.tgz#5274e67f5a64c5f92974cd85139e0332adc6b90c" + integrity sha512-pbdws4PPPNc1HPluSUKamY4GWMk592K7qwcj6BExbVOhhubub8+pMda/ql68b6L3luZs/OGjGSB5goV7SnmgnA== + dependencies: + sax ">=0.1.1" + +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xml2js@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xml2js@^0.4.19, xml2js@^0.4.5: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== dependencies: sax ">=0.6.0" xmlbuilder "~11.0.0" @@ -22487,6 +22611,11 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" From 4c55d958a1b6311d7cf4e3baf943774bfc7b9f14 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Wed, 20 Mar 2024 13:03:57 +0000 Subject: [PATCH 05/49] Actually remove oauth.ts this time. --- packages/worker/__mocks__/_oauth.ts | 57 ----------------------------- 1 file changed, 57 deletions(-) delete mode 100644 packages/worker/__mocks__/_oauth.ts diff --git a/packages/worker/__mocks__/_oauth.ts b/packages/worker/__mocks__/_oauth.ts deleted file mode 100644 index 8e8122a9e0..0000000000 --- a/packages/worker/__mocks__/_oauth.ts +++ /dev/null @@ -1,57 +0,0 @@ -import * as jwt from "jsonwebtoken" - -const mockOAuth2 = { - getOAuthAccessToken: (code: string, p: any, cb: any) => { - const err = null - const accessToken = "access_token" - const refreshToken = "refresh_token" - - const exp = new Date() - exp.setDate(exp.getDate() + 1) - - const iat = new Date() - iat.setDate(iat.getDate() - 1) - - const claims = { - iss: "test", - sub: "sub", - aud: "clientId", - exp: exp.getTime() / 1000, - iat: iat.getTime() / 1000, - email: "oauth@example.com", - } - - const idToken = jwt.sign(claims, "secret") - - const params = { - id_token: idToken, - } - return cb(err, accessToken, refreshToken, params) - }, - _request: ( - method: string, - url: string, - headers: any, - postBody: any, - accessToken: string, - cb: any - ) => { - const err = null - const body = { - sub: "sub", - user_id: "userId", - name: "OAuth", - family_name: "2", - given_name: "OAuth", - middle_name: "", - } - const res = {} - return cb(err, JSON.stringify(body), res) - }, -} - -const oauth = { - OAuth2: jest.fn(() => mockOAuth2), -} - -export = oauth From 80cc83d2f07947ed78a9ecb0b71c3edd0f9f7225 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 20 Mar 2024 15:42:28 +0000 Subject: [PATCH 06/49] Fix huge amount of wasted renders by observing entire component context when generating form block fields --- .../client/src/components/app/blocks/form/FormBlock.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/client/src/components/app/blocks/form/FormBlock.svelte b/packages/client/src/components/app/blocks/form/FormBlock.svelte index 8c084a71ab..d249569731 100644 --- a/packages/client/src/components/app/blocks/form/FormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/FormBlock.svelte @@ -34,6 +34,7 @@ $: formattedFields = convertOldFieldFormat(fields) $: fieldsOrDefault = getDefaultFields(formattedFields, schema) $: fetchSchema(dataSource) + $: id = $component.id // We could simply spread $$props into the inner form and append our // additions, but that would create svelte warnings about unused props and // make maintenance in future more confusing as we typically always have a @@ -53,7 +54,7 @@ buttons: buttons || Utils.buildFormBlockButtonConfig({ - _id: $component.id, + _id: id, showDeleteButton, showSaveButton, saveButtonLabel, From fdde7f889581244ba1a9460364223b3da6fd5eb0 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 20 Mar 2024 15:46:07 +0000 Subject: [PATCH 07/49] Improve performance of multistep form block --- .../app/blocks/MultiStepFormblock.svelte | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/client/src/components/app/blocks/MultiStepFormblock.svelte b/packages/client/src/components/app/blocks/MultiStepFormblock.svelte index 762afc1579..f47655882d 100644 --- a/packages/client/src/components/app/blocks/MultiStepFormblock.svelte +++ b/packages/client/src/components/app/blocks/MultiStepFormblock.svelte @@ -26,9 +26,11 @@ let schema + $: id = $component.id + $: selected = $component.selected $: fetchSchema(dataSource) - $: enrichedSteps = enrichSteps(steps, schema, $component.id, $currentStep) - $: updateCurrentStep(enrichedSteps, $builderStore, $component) + $: updateCurrentStep(enrichedSteps, $builderStore, id, selected) + $: enrichedSteps = enrichSteps(steps, schema, id, $currentStep) // Provide additional data context for live binding eval export const getAdditionalDataContext = () => { @@ -40,16 +42,12 @@ } } - const updateCurrentStep = (steps, builderStore, component) => { + const updateCurrentStep = (steps, builderStore, id, selected) => { const { componentId, step } = builderStore.metadata || {} // If we aren't in the builder or aren't selected then don't update the step // context at all, allowing the normal form to take control. - if ( - !component.selected || - !builderStore.inBuilder || - componentId !== component.id - ) { + if (!selected || !builderStore.inBuilder || componentId !== id) { return } From 65b4b6c35d58db9a44f13cedb1d842bb281fcc8e Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 20 Mar 2024 15:46:15 +0000 Subject: [PATCH 08/49] Improve performance of table block --- .../components/app/blocks/TableBlock.svelte | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/client/src/components/app/blocks/TableBlock.svelte b/packages/client/src/components/app/blocks/TableBlock.svelte index 7c58f90508..c371bed147 100644 --- a/packages/client/src/components/app/blocks/TableBlock.svelte +++ b/packages/client/src/components/app/blocks/TableBlock.svelte @@ -48,20 +48,7 @@ let schemaLoaded = false $: deleteLabel = setDeleteLabel(sidePanelDeleteLabel, sidePanelShowDelete) - - const setDeleteLabel = sidePanelDeleteLabel => { - // Accommodate old config to ensure delete button does not reappear - let labelText = sidePanelShowDelete === false ? "" : sidePanelDeleteLabel - - // Empty text is considered hidden. - if (labelText?.trim() === "") { - return "" - } - - // Default to "Delete" if the value is unset - return labelText || "Delete" - } - + $: id = $component.id $: isDSPlus = dataSource?.type === "table" || dataSource?.type === "viewV2" $: fetchSchema(dataSource) $: enrichSearchColumns(searchColumns, schema).then( @@ -105,6 +92,19 @@ }, ] + const setDeleteLabel = sidePanelDeleteLabel => { + // Accommodate old config to ensure delete button does not reappear + let labelText = sidePanelShowDelete === false ? "" : sidePanelDeleteLabel + + // Empty text is considered hidden. + if (labelText?.trim() === "") { + return "" + } + + // Default to "Delete" if the value is unset + return labelText || "Delete" + } + // Load the datasource schema so we can determine column types const fetchSchema = async dataSource => { if (dataSource?.type === "table") { @@ -267,7 +267,7 @@ dataSource, buttonPosition: "top", buttons: Utils.buildFormBlockButtonConfig({ - _id: $component.id + "-form-edit", + _id: id + "-form-edit", showDeleteButton: deleteLabel !== "", showSaveButton: true, saveButtonLabel: sidePanelSaveLabel || "Save", @@ -301,7 +301,7 @@ dataSource, buttonPosition: "top", buttons: Utils.buildFormBlockButtonConfig({ - _id: $component.id + "-form-new", + _id: id + "-form-new", showDeleteButton: false, showSaveButton: true, saveButtonLabel: "Save", From 9149828c7c12b6e2651827c2595b8f0964adfe5c Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 20 Mar 2024 15:50:23 +0000 Subject: [PATCH 09/49] Improve performance of multistep form block even more and fix missing params --- .../app/blocks/MultiStepFormblock.svelte | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/client/src/components/app/blocks/MultiStepFormblock.svelte b/packages/client/src/components/app/blocks/MultiStepFormblock.svelte index f47655882d..5cb3640355 100644 --- a/packages/client/src/components/app/blocks/MultiStepFormblock.svelte +++ b/packages/client/src/components/app/blocks/MultiStepFormblock.svelte @@ -28,9 +28,11 @@ $: id = $component.id $: selected = $component.selected + $: inBuilder = $builderStore.inBuilder + $: builderStep = $builderStore.metadata?.step $: fetchSchema(dataSource) - $: updateCurrentStep(enrichedSteps, $builderStore, id, selected) - $: enrichedSteps = enrichSteps(steps, schema, id, $currentStep) + $: enrichedSteps = enrichSteps(steps, schema, id) + $: updateCurrentStep(enrichedSteps, selected, inBuilder, builderStep) // Provide additional data context for live binding eval export const getAdditionalDataContext = () => { @@ -42,17 +44,15 @@ } } - const updateCurrentStep = (steps, builderStore, id, selected) => { - const { componentId, step } = builderStore.metadata || {} - + const updateCurrentStep = (steps, selected, inBuilder, builderStep) => { // If we aren't in the builder or aren't selected then don't update the step // context at all, allowing the normal form to take control. - if (!selected || !builderStore.inBuilder || componentId !== id) { + if (!selected || !inBuilder) { return } // Ensure we have a valid step selected - let newStep = Math.min(step || 0, steps.length - 1) + let newStep = Math.min(builderStep || 0, steps.length - 1) // Sanity check newStep = Math.max(newStep, 0) @@ -61,7 +61,7 @@ currentStep.set(newStep + 1) } - const fetchSchema = async () => { + const fetchSchema = async dataSource => { schema = (await fetchDatasourceSchema(dataSource)) || {} } From c58ac5810ecd3ca354ade57add19f78f146ce5e9 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 20 Mar 2024 15:53:53 +0000 Subject: [PATCH 10/49] Simplify reactive logic --- .../components/app/blocks/MultiStepFormblock.svelte | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/client/src/components/app/blocks/MultiStepFormblock.svelte b/packages/client/src/components/app/blocks/MultiStepFormblock.svelte index 5cb3640355..bcc62b5229 100644 --- a/packages/client/src/components/app/blocks/MultiStepFormblock.svelte +++ b/packages/client/src/components/app/blocks/MultiStepFormblock.svelte @@ -28,11 +28,10 @@ $: id = $component.id $: selected = $component.selected - $: inBuilder = $builderStore.inBuilder $: builderStep = $builderStore.metadata?.step $: fetchSchema(dataSource) $: enrichedSteps = enrichSteps(steps, schema, id) - $: updateCurrentStep(enrichedSteps, selected, inBuilder, builderStep) + $: updateCurrentStep(enrichedSteps, selected, builderStep) // Provide additional data context for live binding eval export const getAdditionalDataContext = () => { @@ -44,17 +43,15 @@ } } - const updateCurrentStep = (steps, selected, inBuilder, builderStep) => { - // If we aren't in the builder or aren't selected then don't update the step - // context at all, allowing the normal form to take control. - if (!selected || !inBuilder) { + const updateCurrentStep = (steps, selected, builderStep) => { + // If we aren't selected in the builder then just allowing the normal form + // to take control. + if (!selected) { return } // Ensure we have a valid step selected let newStep = Math.min(builderStep || 0, steps.length - 1) - - // Sanity check newStep = Math.max(newStep, 0) // Add 1 because the form component expects 1 indexed rather than 0 indexed From 5acfc3143da29b84c3d38bcc0f49657c9ed68653 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 20 Mar 2024 17:01:23 +0000 Subject: [PATCH 11/49] Multiple performance improvements to component selection and hovering --- packages/builder/src/stores/builder/hover.js | 13 +++++++++++++ .../components/preview/HoverIndicator.svelte | 5 ++--- .../src/components/preview/Indicator.svelte | 6 +----- .../src/components/preview/IndicatorSet.svelte | 1 + packages/client/src/index.js | 2 +- packages/client/src/stores/hover.js | 18 ++++++++++++++++-- 6 files changed, 34 insertions(+), 11 deletions(-) diff --git a/packages/builder/src/stores/builder/hover.js b/packages/builder/src/stores/builder/hover.js index f0444a7da5..98cdc9e416 100644 --- a/packages/builder/src/stores/builder/hover.js +++ b/packages/builder/src/stores/builder/hover.js @@ -7,12 +7,25 @@ export const INITIAL_HOVER_STATE = { } export class HoverStore extends BudiStore { + hoverTimeout + constructor() { super({ ...INITIAL_HOVER_STATE }) this.hover = this.hover.bind(this) } hover(componentId, notifyClient = true) { + clearTimeout(this.hoverTimeout) + if (componentId) { + this.processHover(componentId, notifyClient) + } else { + this.hoverTimeout = setTimeout(() => { + this.processHover(componentId, notifyClient) + }, 10) + } + } + + processHover(componentId, notifyClient) { if (componentId === get(this.store).componentId) { return } diff --git a/packages/client/src/components/preview/HoverIndicator.svelte b/packages/client/src/components/preview/HoverIndicator.svelte index 164ec32ab4..69e13e4219 100644 --- a/packages/client/src/components/preview/HoverIndicator.svelte +++ b/packages/client/src/components/preview/HoverIndicator.svelte @@ -1,10 +1,9 @@
x.visible) $: offset = $builderStore.inBuilder ? 0 : 2 + $: componentId, debouncedUpdate() let updating = false let observers = [] diff --git a/packages/client/src/index.js b/packages/client/src/index.js index 9c249dd5b3..de6d1bdc12 100644 --- a/packages/client/src/index.js +++ b/packages/client/src/index.js @@ -98,7 +98,7 @@ const loadBudibase = async () => { context: stringifiedContext, }) } else if (type === "hover-component") { - hoverStore.actions.hoverComponent(data) + hoverStore.actions.hoverComponent(data, false) } else if (type === "builder-meta") { builderStore.actions.setMetadata(data) } diff --git a/packages/client/src/stores/hover.js b/packages/client/src/stores/hover.js index 24f315a126..014a9f1aa0 100644 --- a/packages/client/src/stores/hover.js +++ b/packages/client/src/stores/hover.js @@ -5,13 +5,27 @@ const createHoverStore = () => { const store = writable({ hoveredComponentId: null, }) + let hoverTimeout - const hoverComponent = id => { + const hoverComponent = (id, notifyBuilder = true) => { + clearTimeout(hoverTimeout) + if (id) { + processHover(id, notifyBuilder) + } else { + hoverTimeout = setTimeout(() => { + processHover(id, notifyBuilder) + }, 10) + } + } + + const processHover = (id, notifyBuilder = true) => { if (id === get(store).hoveredComponentId) { return } store.set({ hoveredComponentId: id }) - eventStore.actions.dispatchEvent("hover-component", { id }) + if (notifyBuilder) { + eventStore.actions.dispatchEvent("hover-component", { id }) + } } return { From 756970319ad059a2d42f3f899d88899abf09c988 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Mar 2024 18:41:55 +0100 Subject: [PATCH 12/49] Don't add breaking changes --- .../backend/DataTable/modals/CreateEditColumn.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index d3eaaa5d6a..d39a6a92a7 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -712,7 +712,9 @@ /> {:else if editableColumn.type === FieldType.ATTACHMENT} { if (!e.detail) { editableColumn.subtype = FieldTypeSubtypes.ATTACHMENT.SINGLE From 0b3a48b2b74abf40a496dad34331da381f74557d Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Mar 2024 19:11:02 +0100 Subject: [PATCH 13/49] Add attachment schema type --- packages/types/src/documents/app/table/schema.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/types/src/documents/app/table/schema.ts b/packages/types/src/documents/app/table/schema.ts index 0e5bec134c..5da87883f4 100644 --- a/packages/types/src/documents/app/table/schema.ts +++ b/packages/types/src/documents/app/table/schema.ts @@ -147,6 +147,10 @@ interface BaseFieldSchema extends UIFieldMetadata { autoReason?: AutoReason.FOREIGN_KEY subtype?: never } +interface AttachmentFieldMetadata extends Omit { + type: FieldType.ATTACHMENT + subtype?: FieldSubtype.SINGLE +} interface OtherFieldMetadata extends BaseFieldSchema { type: Exclude< @@ -157,6 +161,7 @@ interface OtherFieldMetadata extends BaseFieldSchema { | FieldType.FORMULA | FieldType.NUMBER | FieldType.LONGFORM + | FieldType.ATTACHMENT > } @@ -168,6 +173,7 @@ export type FieldSchema = | FormulaFieldMetadata | NumberFieldMetadata | LongFormFieldMetadata + | AttachmentFieldMetadata | BBReferenceFieldMetadata | JsonFieldMetadata From 0827cc6bda56d99ab342d11e815215d77ca3507e Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Mar 2024 19:33:39 +0100 Subject: [PATCH 14/49] Type everywhere! --- .../server/src/integrations/base/sqlTable.ts | 2 +- .../server/src/sdk/app/rows/search/utils.ts | 2 +- .../rowProcessor/bbReferenceProcessor.ts | 4 +- .../src/utilities/rowProcessor/index.ts | 7 +-- packages/server/src/utilities/schema.ts | 50 +++++++------------ packages/types/src/documents/app/row.ts | 7 +-- .../types/src/documents/app/table/schema.ts | 39 ++++++++------- 7 files changed, 49 insertions(+), 62 deletions(-) diff --git a/packages/server/src/integrations/base/sqlTable.ts b/packages/server/src/integrations/base/sqlTable.ts index 06c2184549..0feecefb89 100644 --- a/packages/server/src/integrations/base/sqlTable.ts +++ b/packages/server/src/integrations/base/sqlTable.ts @@ -60,7 +60,7 @@ function generateSchema( schema.text(key) break case FieldType.BB_REFERENCE: { - const subtype = column.subtype as FieldSubtype + const subtype = column.subtype switch (subtype) { case FieldSubtype.USER: schema.text(key) diff --git a/packages/server/src/sdk/app/rows/search/utils.ts b/packages/server/src/sdk/app/rows/search/utils.ts index d300fdbef0..086599665b 100644 --- a/packages/server/src/sdk/app/rows/search/utils.ts +++ b/packages/server/src/sdk/app/rows/search/utils.ts @@ -67,7 +67,7 @@ export function searchInputMapping(table: Table, options: SearchParams) { for (let [key, column] of Object.entries(table.schema)) { switch (column.type) { case FieldType.BB_REFERENCE: { - const subtype = column.subtype as FieldSubtype + const subtype = column.subtype switch (subtype) { case FieldSubtype.USER: case FieldSubtype.USERS: diff --git a/packages/server/src/utilities/rowProcessor/bbReferenceProcessor.ts b/packages/server/src/utilities/rowProcessor/bbReferenceProcessor.ts index 31f1f5e575..a5fbfa981d 100644 --- a/packages/server/src/utilities/rowProcessor/bbReferenceProcessor.ts +++ b/packages/server/src/utilities/rowProcessor/bbReferenceProcessor.ts @@ -7,7 +7,7 @@ const ROW_PREFIX = DocumentType.ROW + SEPARATOR export async function processInputBBReferences( value: string | string[] | { _id: string } | { _id: string }[], - subtype: FieldSubtype + subtype: FieldSubtype.USER | FieldSubtype.USERS ): Promise { let referenceIds: string[] = [] @@ -61,7 +61,7 @@ export async function processInputBBReferences( export async function processOutputBBReferences( value: string | string[], - subtype: FieldSubtype + subtype: FieldSubtype.USER | FieldSubtype.USERS ) { if (value === null || value === undefined) { // Already processed or nothing to process diff --git a/packages/server/src/utilities/rowProcessor/index.ts b/packages/server/src/utilities/rowProcessor/index.ts index d956a94d0b..3ed4c5d903 100644 --- a/packages/server/src/utilities/rowProcessor/index.ts +++ b/packages/server/src/utilities/rowProcessor/index.ts @@ -159,10 +159,7 @@ export async function inputProcessing( } if (field.type === FieldType.BB_REFERENCE && value) { - clonedRow[key] = await processInputBBReferences( - value, - field.subtype as FieldSubtype - ) + clonedRow[key] = await processInputBBReferences(value, field.subtype) } } @@ -238,7 +235,7 @@ export async function outputProcessing( for (let row of enriched) { row[property] = await processOutputBBReferences( row[property], - column.subtype as FieldSubtype + column.subtype ) } } diff --git a/packages/server/src/utilities/schema.ts b/packages/server/src/utilities/schema.ts index 5c466ec510..85dfdd3506 100644 --- a/packages/server/src/utilities/schema.ts +++ b/packages/server/src/utilities/schema.ts @@ -1,26 +1,14 @@ -import { FieldType, FieldSubtype } from "@budibase/types" +import { + FieldType, + FieldSubtype, + TableSchema, + FieldSchema, + Row, +} from "@budibase/types" import { ValidColumnNameRegex, utils } from "@budibase/shared-core" import { db } from "@budibase/backend-core" import { parseCsvExport } from "../api/controllers/view/exporters" -interface SchemaColumn { - readonly name: string - readonly type: FieldType - readonly subtype: FieldSubtype - readonly autocolumn?: boolean - readonly constraints?: { - presence: boolean - } -} - -interface Schema { - readonly [index: string]: SchemaColumn -} - -interface Row { - [index: string]: any -} - type Rows = Array interface SchemaValidation { @@ -34,12 +22,10 @@ interface ValidationResults { errors: Record } -export function isSchema(schema: any): schema is Schema { +export function isSchema(schema: any): schema is TableSchema { return ( typeof schema === "object" && - Object.values(schema).every(rawColumn => { - const column = rawColumn as SchemaColumn - + Object.values(schema).every(column => { return ( column !== null && typeof column === "object" && @@ -54,7 +40,7 @@ export function isRows(rows: any): rows is Rows { return Array.isArray(rows) && rows.every(row => typeof row === "object") } -export function validate(rows: Rows, schema: Schema): ValidationResults { +export function validate(rows: Rows, schema: TableSchema): ValidationResults { const results: ValidationResults = { schemaValidation: {}, allValid: false, @@ -64,9 +50,11 @@ export function validate(rows: Rows, schema: Schema): ValidationResults { rows.forEach(row => { Object.entries(row).forEach(([columnName, columnData]) => { - const columnType = schema[columnName]?.type - const columnSubtype = schema[columnName]?.subtype - const isAutoColumn = schema[columnName]?.autocolumn + const { + type: columnType, + subtype: columnSubtype, + autocolumn: isAutoColumn, + } = schema[columnName] // If the column had an invalid value we don't want to override it if (results.schemaValidation[columnName] === false) { @@ -123,7 +111,7 @@ export function validate(rows: Rows, schema: Schema): ValidationResults { return results } -export function parse(rows: Rows, schema: Schema): Rows { +export function parse(rows: Rows, schema: TableSchema): Rows { return rows.map(row => { const parsedRow: Row = {} @@ -133,9 +121,7 @@ export function parse(rows: Rows, schema: Schema): Rows { return } - const columnType = schema[columnName].type - const columnSubtype = schema[columnName].subtype - + const { type: columnType, subtype: columnSubtype } = schema[columnName] if (columnType === FieldType.NUMBER) { // If provided must be a valid number parsedRow[columnName] = columnData ? Number(columnData) : columnData @@ -172,7 +158,7 @@ export function parse(rows: Rows, schema: Schema): Rows { function isValidBBReference( columnData: any, - columnSubtype: FieldSubtype + columnSubtype: FieldSubtype.USER | FieldSubtype.USERS ): boolean { switch (columnSubtype) { case FieldSubtype.USER: diff --git a/packages/types/src/documents/app/row.ts b/packages/types/src/documents/app/row.ts index 0b4c6cd295..aa8f50d4a8 100644 --- a/packages/types/src/documents/app/row.ts +++ b/packages/types/src/documents/app/row.ts @@ -41,12 +41,13 @@ export enum FieldSubtype { SINGLE = "single", } +// The 'as' are required for typescript not to type the outputs as generic FieldSubtype export const FieldTypeSubtypes = { BB_REFERENCE: { - USER: FieldSubtype.USER, - USERS: FieldSubtype.USERS, + USER: FieldSubtype.USER as FieldSubtype.USER, + USERS: FieldSubtype.USERS as FieldSubtype.USERS, }, ATTACHMENT: { - SINGLE: FieldSubtype.SINGLE, + SINGLE: FieldSubtype.SINGLE as FieldSubtype.SINGLE, }, } diff --git a/packages/types/src/documents/app/table/schema.ts b/packages/types/src/documents/app/table/schema.ts index 5da87883f4..3a74134ddd 100644 --- a/packages/types/src/documents/app/table/schema.ts +++ b/packages/types/src/documents/app/table/schema.ts @@ -17,13 +17,14 @@ export interface UIFieldMetadata { } interface BaseRelationshipFieldMetadata - extends Omit { + extends BaseFieldSchema< + AutoFieldSubType.CREATED_BY | AutoFieldSubType.UPDATED_BY | undefined + > { type: FieldType.LINK main?: boolean fieldName: string tableId: string tableRev?: string - subtype?: AutoFieldSubType.CREATED_BY | AutoFieldSubType.UPDATED_BY } // External tables use junction tables, internal tables don't require them @@ -60,18 +61,17 @@ export type RelationshipFieldMetadata = | ManyToOneRelationshipFieldMetadata export interface AutoColumnFieldMetadata - extends Omit { + extends BaseFieldSchema { type: FieldType.AUTO autocolumn: true - subtype?: AutoFieldSubType lastID?: number // if the column was turned to an auto-column for SQL, explains why (primary, foreign etc) autoReason?: AutoReason } -export interface NumberFieldMetadata extends Omit { +export interface NumberFieldMetadata + extends BaseFieldSchema { type: FieldType.NUMBER - subtype?: AutoFieldSubType.AUTO_ID lastID?: number autoReason?: AutoReason.FOREIGN_KEY // used specifically when Budibase generates external tables, this denotes if a number field @@ -82,16 +82,18 @@ export interface NumberFieldMetadata extends Omit { } } -export interface JsonFieldMetadata extends Omit { +export interface JsonFieldMetadata + extends BaseFieldSchema { type: FieldType.JSON - subtype?: JsonFieldSubType.ARRAY } -export interface DateFieldMetadata extends Omit { +export interface DateFieldMetadata + extends BaseFieldSchema< + AutoFieldSubType.CREATED_AT | AutoFieldSubType.UPDATED_AT | undefined + > { type: FieldType.DATETIME ignoreTimezones?: boolean timeOnly?: boolean - subtype?: AutoFieldSubType.CREATED_AT | AutoFieldSubType.UPDATED_AT } export interface LongFormFieldMetadata extends BaseFieldSchema { @@ -106,12 +108,17 @@ export interface FormulaFieldMetadata extends BaseFieldSchema { } export interface BBReferenceFieldMetadata - extends Omit { + extends BaseFieldSchema { type: FieldType.BB_REFERENCE - subtype: FieldSubtype.USER | FieldSubtype.USERS + relationshipType?: RelationshipType } +export interface AttachmentFieldMetadata + extends BaseFieldSchema { + type: FieldType.ATTACHMENT +} + export interface FieldConstraints { type?: string email?: boolean @@ -136,7 +143,7 @@ export interface FieldConstraints { } } -interface BaseFieldSchema extends UIFieldMetadata { +interface BaseFieldSchema extends UIFieldMetadata { type: FieldType name: string sortable?: boolean @@ -145,11 +152,7 @@ interface BaseFieldSchema extends UIFieldMetadata { constraints?: FieldConstraints autocolumn?: boolean autoReason?: AutoReason.FOREIGN_KEY - subtype?: never -} -interface AttachmentFieldMetadata extends Omit { - type: FieldType.ATTACHMENT - subtype?: FieldSubtype.SINGLE + subtype: TSubtype } interface OtherFieldMetadata extends BaseFieldSchema { From 4def299172347496cd4e35c8c7a4afe3e55542a9 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Mar 2024 23:16:41 +0100 Subject: [PATCH 15/49] Undo type changes --- .../types/src/documents/app/table/schema.ts | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/packages/types/src/documents/app/table/schema.ts b/packages/types/src/documents/app/table/schema.ts index 3a74134ddd..45e39268ac 100644 --- a/packages/types/src/documents/app/table/schema.ts +++ b/packages/types/src/documents/app/table/schema.ts @@ -17,14 +17,13 @@ export interface UIFieldMetadata { } interface BaseRelationshipFieldMetadata - extends BaseFieldSchema< - AutoFieldSubType.CREATED_BY | AutoFieldSubType.UPDATED_BY | undefined - > { + extends Omit { type: FieldType.LINK main?: boolean fieldName: string tableId: string tableRev?: string + subtype?: AutoFieldSubType.CREATED_BY | AutoFieldSubType.UPDATED_BY } // External tables use junction tables, internal tables don't require them @@ -61,17 +60,18 @@ export type RelationshipFieldMetadata = | ManyToOneRelationshipFieldMetadata export interface AutoColumnFieldMetadata - extends BaseFieldSchema { + extends Omit { type: FieldType.AUTO autocolumn: true + subtype?: AutoFieldSubType lastID?: number // if the column was turned to an auto-column for SQL, explains why (primary, foreign etc) autoReason?: AutoReason } -export interface NumberFieldMetadata - extends BaseFieldSchema { +export interface NumberFieldMetadata extends Omit { type: FieldType.NUMBER + subtype?: AutoFieldSubType.AUTO_ID lastID?: number autoReason?: AutoReason.FOREIGN_KEY // used specifically when Budibase generates external tables, this denotes if a number field @@ -82,18 +82,16 @@ export interface NumberFieldMetadata } } -export interface JsonFieldMetadata - extends BaseFieldSchema { +export interface JsonFieldMetadata extends Omit { type: FieldType.JSON + subtype?: JsonFieldSubType.ARRAY } -export interface DateFieldMetadata - extends BaseFieldSchema< - AutoFieldSubType.CREATED_AT | AutoFieldSubType.UPDATED_AT | undefined - > { +export interface DateFieldMetadata extends Omit { type: FieldType.DATETIME ignoreTimezones?: boolean timeOnly?: boolean + subtype?: AutoFieldSubType.CREATED_AT | AutoFieldSubType.UPDATED_AT } export interface LongFormFieldMetadata extends BaseFieldSchema { @@ -108,15 +106,16 @@ export interface FormulaFieldMetadata extends BaseFieldSchema { } export interface BBReferenceFieldMetadata - extends BaseFieldSchema { + extends Omit { type: FieldType.BB_REFERENCE - + subtype: FieldSubtype.USER | FieldSubtype.USERS relationshipType?: RelationshipType } export interface AttachmentFieldMetadata - extends BaseFieldSchema { + extends Omit { type: FieldType.ATTACHMENT + subtype?: FieldSubtype.SINGLE } export interface FieldConstraints { @@ -143,7 +142,7 @@ export interface FieldConstraints { } } -interface BaseFieldSchema extends UIFieldMetadata { +interface BaseFieldSchema extends UIFieldMetadata { type: FieldType name: string sortable?: boolean @@ -152,7 +151,7 @@ interface BaseFieldSchema extends UIFieldMetadata { constraints?: FieldConstraints autocolumn?: boolean autoReason?: AutoReason.FOREIGN_KEY - subtype: TSubtype + subtype?: never } interface OtherFieldMetadata extends BaseFieldSchema { @@ -164,6 +163,7 @@ interface OtherFieldMetadata extends BaseFieldSchema { | FieldType.FORMULA | FieldType.NUMBER | FieldType.LONGFORM + | FieldType.BB_REFERENCE | FieldType.ATTACHMENT > } @@ -176,9 +176,9 @@ export type FieldSchema = | FormulaFieldMetadata | NumberFieldMetadata | LongFormFieldMetadata - | AttachmentFieldMetadata | BBReferenceFieldMetadata | JsonFieldMetadata + | AttachmentFieldMetadata export interface TableSchema { [key: string]: FieldSchema @@ -213,3 +213,9 @@ export function isBBReferenceField( ): field is BBReferenceFieldMetadata { return field.type === FieldType.BB_REFERENCE } + +export function isAttachmentField( + field: FieldSchema +): field is AttachmentFieldMetadata { + return field.type === FieldType.ATTACHMENT +} From 0859e79b1ed153870432104d4a4ff1bd8abd5a58 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 20 Mar 2024 23:19:42 +0100 Subject: [PATCH 16/49] Lint --- packages/server/src/utilities/rowProcessor/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/server/src/utilities/rowProcessor/index.ts b/packages/server/src/utilities/rowProcessor/index.ts index 3ed4c5d903..0015680e77 100644 --- a/packages/server/src/utilities/rowProcessor/index.ts +++ b/packages/server/src/utilities/rowProcessor/index.ts @@ -6,7 +6,6 @@ import { TYPE_TRANSFORM_MAP } from "./map" import { FieldType, AutoFieldSubType, - FieldSubtype, Row, RowAttachment, Table, From e7dd137b28a88d6d01757ccf765024a70a9a628b Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 09:14:01 +0000 Subject: [PATCH 17/49] Add memo and derivedMemo into SDK --- packages/client/src/sdk.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/client/src/sdk.js b/packages/client/src/sdk.js index d86d635970..1f996bf656 100644 --- a/packages/client/src/sdk.js +++ b/packages/client/src/sdk.js @@ -34,6 +34,8 @@ import { LuceneUtils, Constants, RowUtils, + memo, + derivedMemo, } from "@budibase/frontend-core" export default { @@ -71,6 +73,8 @@ export default { makePropSafe, createContextStore, generateGoldenSample: RowUtils.generateGoldenSample, + memo, + derivedMemo, // Components Provider, From 96f7fe6b125ab6bbf325ebe3bf53dfda0b6dc52d Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 09:27:42 +0000 Subject: [PATCH 18/49] Remove grid layout component --- .../[componentId]/new/_components/componentStructure.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json index 96e8faf93c..4edd56dbd2 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/[componentId]/new/_components/componentStructure.json @@ -16,7 +16,7 @@ { "name": "Layout", "icon": "ClassicGridView", - "children": ["container", "section", "grid", "sidepanel"] + "children": ["container", "section", "sidepanel"] }, { "name": "Data", From 76e30b44ab782cb5c39b7e783dd01990d35c96d6 Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 21 Mar 2024 11:16:19 +0000 Subject: [PATCH 19/49] PR Feedback --- packages/builder/src/templates/gridDetailsScreen.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/builder/src/templates/gridDetailsScreen.js b/packages/builder/src/templates/gridDetailsScreen.js index 8e6e44bfae..35ab651268 100644 --- a/packages/builder/src/templates/gridDetailsScreen.js +++ b/packages/builder/src/templates/gridDetailsScreen.js @@ -33,7 +33,7 @@ const createScreen = datasource => { const buttonGroup = new Component("@budibase/standard-components/buttongroup") const createButton = new Component("@budibase/standard-components/button") - createButton.instanceName(`${datasource.label} - Create`).customProps({ + createButton.customProps({ onClick: [ { id: 0, @@ -47,7 +47,7 @@ const createScreen = datasource => { type: "cta", }) - buttonGroup.customProps({ + buttonGroup.instanceName(`${datasource.label} - Create`).customProps({ hAlign: "right", buttons: [createButton.json()], }) @@ -71,7 +71,7 @@ const createScreen = datasource => { const createFormBlock = new Component( "@budibase/standard-components/formblock" ) - createFormBlock.instanceName("Create row formblock").customProps({ + createFormBlock.instanceName("Create row form block").customProps({ dataSource: datasource, labelPosition: "left", buttonPosition: "top", @@ -98,7 +98,7 @@ const createScreen = datasource => { ).instanceName("Edit row side panel") const editFormBlock = new Component("@budibase/standard-components/formblock") - editFormBlock.instanceName("Edit row formblock").customProps({ + editFormBlock.instanceName("Edit row form block").customProps({ dataSource: datasource, labelPosition: "left", buttonPosition: "top", From b214e15068307aa74e3113895a1a7753f3ae943b Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 21 Mar 2024 11:31:31 +0000 Subject: [PATCH 20/49] PR feedback move deprecated components --- packages/client/src/components/app/blocks/index.js | 1 - .../components/app/{blocks => deprecated}/TableBlock.svelte | 0 .../components/app/{ => deprecated}/table/SlotRenderer.svelte | 0 .../src/components/app/{ => deprecated}/table/Table.svelte | 0 .../client/src/components/app/{ => deprecated}/table/index.js | 0 packages/client/src/components/app/index.js | 3 ++- 6 files changed, 2 insertions(+), 2 deletions(-) rename packages/client/src/components/app/{blocks => deprecated}/TableBlock.svelte (100%) rename packages/client/src/components/app/{ => deprecated}/table/SlotRenderer.svelte (100%) rename packages/client/src/components/app/{ => deprecated}/table/Table.svelte (100%) rename packages/client/src/components/app/{ => deprecated}/table/index.js (100%) diff --git a/packages/client/src/components/app/blocks/index.js b/packages/client/src/components/app/blocks/index.js index 2c8d81cf96..c1df620285 100644 --- a/packages/client/src/components/app/blocks/index.js +++ b/packages/client/src/components/app/blocks/index.js @@ -1,4 +1,3 @@ -export { default as tableblock } from "./TableBlock.svelte" export { default as cardsblock } from "./CardsBlock.svelte" export { default as repeaterblock } from "./RepeaterBlock.svelte" export { default as formblock } from "./form/FormBlock.svelte" diff --git a/packages/client/src/components/app/blocks/TableBlock.svelte b/packages/client/src/components/app/deprecated/TableBlock.svelte similarity index 100% rename from packages/client/src/components/app/blocks/TableBlock.svelte rename to packages/client/src/components/app/deprecated/TableBlock.svelte diff --git a/packages/client/src/components/app/table/SlotRenderer.svelte b/packages/client/src/components/app/deprecated/table/SlotRenderer.svelte similarity index 100% rename from packages/client/src/components/app/table/SlotRenderer.svelte rename to packages/client/src/components/app/deprecated/table/SlotRenderer.svelte diff --git a/packages/client/src/components/app/table/Table.svelte b/packages/client/src/components/app/deprecated/table/Table.svelte similarity index 100% rename from packages/client/src/components/app/table/Table.svelte rename to packages/client/src/components/app/deprecated/table/Table.svelte diff --git a/packages/client/src/components/app/table/index.js b/packages/client/src/components/app/deprecated/table/index.js similarity index 100% rename from packages/client/src/components/app/table/index.js rename to packages/client/src/components/app/deprecated/table/index.js diff --git a/packages/client/src/components/app/index.js b/packages/client/src/components/app/index.js index 97df3741e1..e23e19704c 100644 --- a/packages/client/src/components/app/index.js +++ b/packages/client/src/components/app/index.js @@ -40,11 +40,12 @@ export { default as sidepanel } from "./SidePanel.svelte" export { default as gridblock } from "./GridBlock.svelte" export * from "./charts" export * from "./forms" -export * from "./table" export * from "./blocks" export * from "./dynamic-filter" // Deprecated component left for compatibility in old apps +export * from "./deprecated/table" +export { default as tableblock } from "./deprecated/TableBlock.svelte" export { default as navigation } from "./deprecated/Navigation.svelte" export { default as cardhorizontal } from "./deprecated/CardHorizontal.svelte" export { default as stackedlist } from "./deprecated/StackedList.svelte" From 5066f54525f852fbb57486a6267adfbdd5b1795e Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 21 Mar 2024 11:37:47 +0000 Subject: [PATCH 21/49] Fix import for provider --- .../client/src/components/app/deprecated/table/Table.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/components/app/deprecated/table/Table.svelte b/packages/client/src/components/app/deprecated/table/Table.svelte index f16e26bc45..fd2e7c030c 100644 --- a/packages/client/src/components/app/deprecated/table/Table.svelte +++ b/packages/client/src/components/app/deprecated/table/Table.svelte @@ -3,7 +3,7 @@ import { Table } from "@budibase/bbui" import SlotRenderer from "./SlotRenderer.svelte" import { canBeSortColumn } from "@budibase/shared-core" - import Provider from "../../context/Provider.svelte" + import Provider from "components/context/Provider.svelte" export let dataProvider export let columns From 7d3153601423d83aa3d566a35364852caa1b85cd Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 12:08:24 +0000 Subject: [PATCH 22/49] Fix issue with click_outside where non-function types could be stored as callbacks --- packages/bbui/src/Actions/click_outside.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/bbui/src/Actions/click_outside.js b/packages/bbui/src/Actions/click_outside.js index 2c54427b3a..eafca657f3 100644 --- a/packages/bbui/src/Actions/click_outside.js +++ b/packages/bbui/src/Actions/click_outside.js @@ -79,7 +79,8 @@ const removeHandler = id => { export default (element, opts) => { const id = Math.random() const update = newOpts => { - const callback = newOpts?.callback || newOpts + const callback = + newOpts?.callback || (typeof newOpts === "function" ? newOpts : null) const anchor = newOpts?.anchor || element const allowedType = newOpts?.allowedType || "click" updateHandler(id, element, anchor, callback, allowedType) From 006a58dae8ceb67bc0b1807eac279175deed01ed Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Thu, 21 Mar 2024 13:00:39 +0000 Subject: [PATCH 23/49] Update pro and account portal references. --- packages/account-portal | 2 +- packages/pro | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account-portal b/packages/account-portal index 6465dc9c2a..f5b467b6b1 160000 --- a/packages/account-portal +++ b/packages/account-portal @@ -1 +1 @@ -Subproject commit 6465dc9c2a38e1380b32204cad4ae0c1f33e065a +Subproject commit f5b467b6b1c55c48847545db41be7b1c035e167a diff --git a/packages/pro b/packages/pro index 8baf8586ec..dd748e045f 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 8baf8586ec078951230c8466d5f13f9b6d5ed055 +Subproject commit dd748e045ffdbc6662c5d2b76075f01d65a96a2f From 07f8e1981a3527e179be0149c07f6c50f63946c1 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 13:22:03 +0000 Subject: [PATCH 24/49] Improve client indicators by properly caching all properties to avoid inconsistent and stale states --- .../src/components/preview/DNDHandler.svelte | 3 +- .../components/preview/HoverIndicator.svelte | 7 +- .../src/components/preview/Indicator.svelte | 6 -- .../components/preview/IndicatorSet.svelte | 99 ++++++++++--------- .../preview/SelectionIndicator.svelte | 3 +- 5 files changed, 60 insertions(+), 58 deletions(-) diff --git a/packages/client/src/components/preview/DNDHandler.svelte b/packages/client/src/components/preview/DNDHandler.svelte index e93c42b863..767efc9e3a 100644 --- a/packages/client/src/components/preview/DNDHandler.svelte +++ b/packages/client/src/components/preview/DNDHandler.svelte @@ -345,8 +345,7 @@ diff --git a/packages/client/src/components/preview/HoverIndicator.svelte b/packages/client/src/components/preview/HoverIndicator.svelte index 69e13e4219..d204d77f49 100644 --- a/packages/client/src/components/preview/HoverIndicator.svelte +++ b/packages/client/src/components/preview/HoverIndicator.svelte @@ -1,9 +1,11 @@
({ + // Cached props + componentId, + color, + zIndex, + prefix, + allowResizeAnchors, + + // Computed state + indicators: [], + text: null, + icon: null, + insideGrid: false, + error: false, + }) + let interval - let text - let icon - let insideGrid = false - let errorState = false - - $: visibleIndicators = indicators.filter(x => x.visible) - $: offset = $builderStore.inBuilder ? 0 : 2 - $: componentId, debouncedUpdate() - + let state = defaultState() + let nextState = null let updating = false let observers = [] let callbackCount = 0 - let nextIndicators = [] + + $: visibleIndicators = state.indicators.filter(x => x.visible) + $: offset = $builderStore.inBuilder ? 0 : 2 + $: $$props, debouncedUpdate() const checkInsideGrid = id => { const component = document.getElementsByClassName(id)[0] @@ -45,10 +56,10 @@ if (callbackCount >= observers.length) { return } - nextIndicators[idx].visible = - nextIndicators[idx].insideSidePanel || entries[0].isIntersecting + nextState.indicators[idx].visible = + nextState.indicators[idx].insideSidePanel || entries[0].isIntersecting if (++callbackCount === observers.length) { - indicators = nextIndicators + state = nextState updating = false } } @@ -60,7 +71,7 @@ // Sanity check if (!componentId) { - indicators = [] + state = defaultState() return } @@ -69,25 +80,25 @@ callbackCount = 0 observers.forEach(o => o.disconnect()) observers = [] - nextIndicators = [] + nextState = defaultState() // Check if we're inside a grid if (allowResizeAnchors) { - insideGrid = checkInsideGrid(componentId) + nextState.insideGrid = checkInsideGrid(componentId) } // Determine next set of indicators const parents = document.getElementsByClassName(componentId) if (parents.length) { - text = parents[0].dataset.name - if (prefix) { - text = `${prefix} ${text}` + nextState.text = parents[0].dataset.name + if (nextState.prefix) { + nextState.text = `${nextState.prefix} ${nextState.text}` } if (parents[0].dataset.icon) { - icon = parents[0].dataset.icon + nextState.icon = parents[0].dataset.icon } } - errorState = parents?.[0]?.classList.contains("error") + nextState.error = parents?.[0]?.classList.contains("error") // Batch reads to minimize reflow const scrollX = window.scrollX @@ -103,8 +114,9 @@ // If there aren't any nodes then reset if (!children.length) { - indicators = [] + state = defaultState() updating = false + return } const device = document.getElementById("app-root") @@ -120,7 +132,7 @@ observers.push(observer) const elBounds = child.getBoundingClientRect() - nextIndicators.push({ + nextState.indicators.push({ top: elBounds.top + scrollY - deviceBounds.top - offset, left: elBounds.left + scrollX - deviceBounds.left - offset, width: elBounds.width + 4, @@ -145,20 +157,17 @@ }) -{#key componentId} - {#each visibleIndicators as indicator, idx} - - {/each} -{/key} +{#each visibleIndicators as indicator, idx} + +{/each} diff --git a/packages/client/src/components/preview/SelectionIndicator.svelte b/packages/client/src/components/preview/SelectionIndicator.svelte index bca0341628..a271389cbd 100644 --- a/packages/client/src/components/preview/SelectionIndicator.svelte +++ b/packages/client/src/components/preview/SelectionIndicator.svelte @@ -10,7 +10,6 @@ From a85d4460b1426629391159d41945057da8e842b0 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 14:18:45 +0100 Subject: [PATCH 25/49] Clean code --- packages/server/src/api/controllers/table/utils.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/server/src/api/controllers/table/utils.ts b/packages/server/src/api/controllers/table/utils.ts index ac13617869..0c9933a4cf 100644 --- a/packages/server/src/api/controllers/table/utils.ts +++ b/packages/server/src/api/controllers/table/utils.ts @@ -31,6 +31,7 @@ import { RelationshipFieldMetadata, FieldType, FieldTypeSubtypes, + AttachmentFieldMetadata, } from "@budibase/types" export async function clearColumns(table: Table, columnNames: string[]) { @@ -90,11 +91,14 @@ export async function checkForColumnUpdates( await checkForViewUpdates(updatedTable, deletedColumns, columnRename) } - for (const attachmentColumn of Object.values(updatedTable.schema).filter( - column => + const changedAttachmentSubtypeColumns = Object.values( + updatedTable.schema + ).filter( + (column): column is AttachmentFieldMetadata => column.type === FieldType.ATTACHMENT && column.subtype !== oldTable?.schema[column.name]?.subtype - )) { + ) + for (const attachmentColumn of changedAttachmentSubtypeColumns) { if (attachmentColumn.subtype === FieldTypeSubtypes.ATTACHMENT.SINGLE) { attachmentColumn.constraints ??= { length: {} } attachmentColumn.constraints.length ??= {} From ed94459fd8101d267729cf414c6b6eb829573cb3 Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Thu, 21 Mar 2024 13:31:53 +0000 Subject: [PATCH 26/49] Bump version to 2.22.9 --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index ec64523dff..5a561bec04 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.22.8", + "version": "2.22.9", "npmClient": "yarn", "packages": [ "packages/*", From bb87b9943c6ce482ccce7453b22bc0db5c76da12 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 14:15:38 +0100 Subject: [PATCH 27/49] Import --- packages/server/src/jsRunner/bundles/index-helpers.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/server/src/jsRunner/bundles/index-helpers.ts b/packages/server/src/jsRunner/bundles/index-helpers.ts index a8992294a9..c48e90e9b4 100644 --- a/packages/server/src/jsRunner/bundles/index-helpers.ts +++ b/packages/server/src/jsRunner/bundles/index-helpers.ts @@ -1,6 +1,4 @@ -const { - getJsHelperList, -} = require("../../../../string-templates/src/helpers/list.js") +import { getJsHelperList } from "../../../../string-templates/src/helpers/list" export default { ...getJsHelperList(), From 7d1c9b1337c3a07264bbfc8988160fb2dcdb1c3d Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 21 Mar 2024 14:30:18 +0000 Subject: [PATCH 28/49] Fix for settings definition cache getting overwritten when both table and gridblock are on the same screen --- packages/client/src/components/Component.svelte | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/client/src/components/Component.svelte b/packages/client/src/components/Component.svelte index 7dbe0c0e44..378fa64b73 100644 --- a/packages/client/src/components/Component.svelte +++ b/packages/client/src/components/Component.svelte @@ -246,15 +246,18 @@ return } + const cacheId = `${definition.name}${ + definition?.deprecated === true ? "_deprecated" : "" + }` // Get the settings definition for this component, and cache it - if (SettingsDefinitionCache[definition.name]) { - settingsDefinition = SettingsDefinitionCache[definition.name] - settingsDefinitionMap = SettingsDefinitionMapCache[definition.name] + if (SettingsDefinitionCache[cacheId]) { + settingsDefinition = SettingsDefinitionCache[cacheId] + settingsDefinitionMap = SettingsDefinitionMapCache[cacheId] } else { settingsDefinition = getSettingsDefinition(definition) settingsDefinitionMap = getSettingsDefinitionMap(settingsDefinition) - SettingsDefinitionCache[definition.name] = settingsDefinition - SettingsDefinitionMapCache[definition.name] = settingsDefinitionMap + SettingsDefinitionCache[cacheId] = settingsDefinition + SettingsDefinitionMapCache[cacheId] = settingsDefinitionMap } // Parse the instance settings, and cache them From c679984a9987f913fb1bc46fefe850d983c56881 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 16:10:27 +0100 Subject: [PATCH 29/49] Don't use barrel files --- packages/string-templates/src/helpers/list.ts | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/packages/string-templates/src/helpers/list.ts b/packages/string-templates/src/helpers/list.ts index 5852bc9127..ca331edd8e 100644 --- a/packages/string-templates/src/helpers/list.ts +++ b/packages/string-templates/src/helpers/list.ts @@ -1,17 +1,23 @@ import { date, duration } from "./date" -import { - math, - array, - number, - url, - string, - comparison, - object, - regex, - uuid, - // @ts-expect-error -} from "@budibase/handlebars-helpers" +// @ts-expect-error +import math from "@budibase/handlebars-helpers/lib/math" +// @ts-expect-error +import array from "@budibase/handlebars-helpers/lib/array" +// @ts-expect-error +import number from "@budibase/handlebars-helpers/lib/number" +// @ts-expect-error +import url from "@budibase/handlebars-helpers/lib/url" +// @ts-expect-error +import string from "@budibase/handlebars-helpers/lib/string" +// @ts-expect-error +import comparison from "@budibase/handlebars-helpers/lib/comparison" +// @ts-expect-error +import object from "@budibase/handlebars-helpers/lib/object" +// @ts-expect-error +import regex from "@budibase/handlebars-helpers/lib/regex" +// @ts-expect-error +import uuid from "@budibase/handlebars-helpers/lib/uuid" // https://github.com/evanw/esbuild/issues/56 const externalCollections = { @@ -42,7 +48,7 @@ export function getJsHelperList() { helpers = {} for (let collection of Object.values(externalCollections)) { - for (let [key, func] of Object.entries(collection())) { + for (let [key, func] of Object.entries(collection)) { // Handlebars injects the hbs options to the helpers by default. We are adding an empty {} as a last parameter to simulate it helpers[key] = (...props: any) => func(...props, {}) } From 8da1170b90a7ed1a537f788366ef32853e3126c7 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 16:21:23 +0100 Subject: [PATCH 30/49] Recreate bundles --- .../server/src/jsRunner/bundles/index-helpers.ivm.bundle.js | 2 +- packages/server/src/jsRunner/bundles/snippets.ivm.bundle.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/server/src/jsRunner/bundles/index-helpers.ivm.bundle.js b/packages/server/src/jsRunner/bundles/index-helpers.ivm.bundle.js index ff8d7265c6..7b21be36ca 100644 --- a/packages/server/src/jsRunner/bundles/index-helpers.ivm.bundle.js +++ b/packages/server/src/jsRunner/bundles/index-helpers.ivm.bundle.js @@ -1,4 +1,4 @@ -"use strict";var helpers=(()=>{var hn=Object.create;var Se=Object.defineProperty;var pn=Object.getOwnPropertyDescriptor;var mn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,yn=Object.prototype.hasOwnProperty;var fe=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Z=(e,t)=>()=>(e&&(t=e(e=0)),t);var U=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),yt=(e,t)=>{for(var r in t)Se(e,r,{get:t[r],enumerable:!0})},vt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of mn(t))!yn.call(e,i)&&i!==r&&Se(e,i,{get:()=>t[i],enumerable:!(n=pn(t,i))||n.enumerable});return e};var Ne=(e,t,r)=>(r=e!=null?hn(gn(e)):{},vt(t||!e||!e.__esModule?Se(r,"default",{value:e,enumerable:!0}):r,e)),$t=e=>vt(Se({},"__esModule",{value:!0}),e);var bt=U((qe,Ye)=>{(function(e,t){typeof qe=="object"&&typeof Ye<"u"?Ye.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(qe,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",u="minute",s="hour",f="day",w="week",g="month",l="quarter",x="year",v="date",a="Invalid Date",T=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,E=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,I={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function($){var h=["th","st","nd","rd"],c=$%100;return"["+$+(h[(c-20)%10]||h[c]||h[0])+"]"}},Y=function($,h,c){var b=String($);return!b||b.length>=h?$:""+Array(h+1-b.length).join(c)+$},F={s:Y,z:function($){var h=-$.utcOffset(),c=Math.abs(h),b=Math.floor(c/60),d=c%60;return(h<=0?"+":"-")+Y(b,2,"0")+":"+Y(d,2,"0")},m:function $(h,c){if(h.date()1)return $(j[0])}else{var _=h.name;S[_]=h,d=_}return!b&&d&&(q=d),d||!b&&q},N=function($,h){if(o($))return $.clone();var c=typeof h=="object"?h:{};return c.date=$,c.args=arguments,new B(c)},O=F;O.l=D,O.i=o,O.w=function($,h){return N($,{locale:h.$L,utc:h.$u,x:h.$x,$offset:h.$offset})};var B=function(){function $(c){this.$L=D(c.locale,null,!0),this.parse(c),this.$x=this.$x||c.x||{},this[p]=!0}var h=$.prototype;return h.parse=function(c){this.$d=function(b){var d=b.date,M=b.utc;if(d===null)return new Date(NaN);if(O.u(d))return new Date;if(d instanceof Date)return new Date(d);if(typeof d=="string"&&!/Z$/i.test(d)){var j=d.match(T);if(j){var _=j[2]-1||0,H=(j[7]||"0").substring(0,3);return M?new Date(Date.UTC(j[1],_,j[3]||1,j[4]||0,j[5]||0,j[6]||0,H)):new Date(j[1],_,j[3]||1,j[4]||0,j[5]||0,j[6]||0,H)}}return new Date(d)}(c),this.init()},h.init=function(){var c=this.$d;this.$y=c.getFullYear(),this.$M=c.getMonth(),this.$D=c.getDate(),this.$W=c.getDay(),this.$H=c.getHours(),this.$m=c.getMinutes(),this.$s=c.getSeconds(),this.$ms=c.getMilliseconds()},h.$utils=function(){return O},h.isValid=function(){return this.$d.toString()!==a},h.isSame=function(c,b){var d=N(c);return this.startOf(b)<=d&&d<=this.endOf(b)},h.isAfter=function(c,b){return N(c){(function(e,t){typeof Ce=="object"&&typeof Ee<"u"?Ee.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_duration=t()})(Ce,function(){"use strict";var e,t,r=1e3,n=6e4,i=36e5,u=864e5,s=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,f=31536e6,w=2628e6,g=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,l={years:f,months:w,days:u,hours:i,minutes:n,seconds:r,milliseconds:1,weeks:6048e5},x=function(S){return S instanceof F},v=function(S,p,o){return new F(S,o,p.$l)},a=function(S){return t.p(S)+"s"},T=function(S){return S<0},E=function(S){return T(S)?Math.ceil(S):Math.floor(S)},I=function(S){return Math.abs(S)},Y=function(S,p){return S?T(S)?{negative:!0,format:""+I(S)+p}:{negative:!1,format:""+S+p}:{negative:!1,format:""}},F=function(){function S(o,D,N){var O=this;if(this.$d={},this.$l=N,o===void 0&&(this.$ms=0,this.parseFromMilliseconds()),D)return v(o*l[a(D)],this);if(typeof o=="number")return this.$ms=o,this.parseFromMilliseconds(),this;if(typeof o=="object")return Object.keys(o).forEach(function($){O.$d[a($)]=o[$]}),this.calMilliseconds(),this;if(typeof o=="string"){var B=o.match(g);if(B){var J=B.slice(2).map(function($){return $!=null?Number($):0});return this.$d.years=J[0],this.$d.months=J[1],this.$d.weeks=J[2],this.$d.days=J[3],this.$d.hours=J[4],this.$d.minutes=J[5],this.$d.seconds=J[6],this.calMilliseconds(),this}}return this}var p=S.prototype;return p.calMilliseconds=function(){var o=this;this.$ms=Object.keys(this.$d).reduce(function(D,N){return D+(o.$d[N]||0)*l[N]},0)},p.parseFromMilliseconds=function(){var o=this.$ms;this.$d.years=E(o/f),o%=f,this.$d.months=E(o/w),o%=w,this.$d.days=E(o/u),o%=u,this.$d.hours=E(o/i),o%=i,this.$d.minutes=E(o/n),o%=n,this.$d.seconds=E(o/r),o%=r,this.$d.milliseconds=o},p.toISOString=function(){var o=Y(this.$d.years,"Y"),D=Y(this.$d.months,"M"),N=+this.$d.days||0;this.$d.weeks&&(N+=7*this.$d.weeks);var O=Y(N,"D"),B=Y(this.$d.hours,"H"),J=Y(this.$d.minutes,"M"),$=this.$d.seconds||0;this.$d.milliseconds&&($+=this.$d.milliseconds/1e3,$=Math.round(1e3*$)/1e3);var h=Y($,"S"),c=o.negative||D.negative||O.negative||B.negative||J.negative||h.negative,b=B.format||J.format||h.format?"T":"",d=(c?"-":"")+"P"+o.format+D.format+O.format+b+B.format+J.format+h.format;return d==="P"||d==="-P"?"P0D":d},p.toJSON=function(){return this.toISOString()},p.format=function(o){var D=o||"YYYY-MM-DDTHH:mm:ss",N={Y:this.$d.years,YY:t.s(this.$d.years,2,"0"),YYYY:t.s(this.$d.years,4,"0"),M:this.$d.months,MM:t.s(this.$d.months,2,"0"),D:this.$d.days,DD:t.s(this.$d.days,2,"0"),H:this.$d.hours,HH:t.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:t.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:t.s(this.$d.seconds,2,"0"),SSS:t.s(this.$d.milliseconds,3,"0")};return D.replace(s,function(O,B){return B||String(N[O])})},p.as=function(o){return this.$ms/l[a(o)]},p.get=function(o){var D=this.$ms,N=a(o);return N==="milliseconds"?D%=1e3:D=N==="weeks"?E(D/l[N]):this.$d[N],D||0},p.add=function(o,D,N){var O;return O=D?o*l[a(D)]:x(o)?o.$ms:v(o,this).$ms,v(this.$ms+O*(N?-1:1),this)},p.subtract=function(o,D){return this.add(o,D,!0)},p.locale=function(o){var D=this.clone();return D.$l=o,D},p.clone=function(){return v(this.$ms,this)},p.humanize=function(o){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!o)},p.valueOf=function(){return this.asMilliseconds()},p.milliseconds=function(){return this.get("milliseconds")},p.asMilliseconds=function(){return this.as("milliseconds")},p.seconds=function(){return this.get("seconds")},p.asSeconds=function(){return this.as("seconds")},p.minutes=function(){return this.get("minutes")},p.asMinutes=function(){return this.as("minutes")},p.hours=function(){return this.get("hours")},p.asHours=function(){return this.as("hours")},p.days=function(){return this.get("days")},p.asDays=function(){return this.as("days")},p.weeks=function(){return this.get("weeks")},p.asWeeks=function(){return this.as("weeks")},p.months=function(){return this.get("months")},p.asMonths=function(){return this.as("months")},p.years=function(){return this.get("years")},p.asYears=function(){return this.as("years")},S}(),q=function(S,p,o){return S.add(p.years()*o,"y").add(p.months()*o,"M").add(p.days()*o,"d").add(p.hours()*o,"h").add(p.minutes()*o,"m").add(p.seconds()*o,"s").add(p.milliseconds()*o,"ms")};return function(S,p,o){e=o,t=o().$utils(),o.duration=function(O,B){var J=o.locale();return v(O,{$l:J},B)},o.isDuration=x;var D=p.prototype.add,N=p.prototype.subtract;p.prototype.add=function(O,B){return x(O)?q(this,O,1):D.bind(this)(O,B)},p.prototype.subtract=function(O,B){return x(O)?q(this,O,-1):N.bind(this)(O,B)}}})});var Ot=U((Ie,_e)=>{(function(e,t){typeof Ie=="object"&&typeof _e<"u"?_e.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_advancedFormat=t()})(Ie,function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(i){var u=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var f=this.$utils(),w=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(g){switch(g){case"Q":return Math.ceil((u.$M+1)/3);case"Do":return s.ordinal(u.$D);case"gggg":return u.weekYear();case"GGGG":return u.isoWeekYear();case"wo":return s.ordinal(u.week(),"W");case"w":case"ww":return f.s(u.week(),g==="w"?1:2,"0");case"W":case"WW":return f.s(u.isoWeek(),g==="W"?1:2,"0");case"k":case"kk":return f.s(String(u.$H===0?24:u.$H),g==="k"?1:2,"0");case"X":return Math.floor(u.$d.getTime()/1e3);case"x":return u.$d.getTime();case"z":return"["+u.offsetName()+"]";case"zzz":return"["+u.offsetName("long")+"]";default:return g}});return n.bind(this)(w)}}})});var xt=U((We,Fe)=>{(function(e,t){typeof We=="object"&&typeof Fe<"u"?Fe.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_isoWeek=t()})(We,function(){"use strict";var e="day";return function(t,r,n){var i=function(f){return f.add(4-f.isoWeekday(),e)},u=r.prototype;u.isoWeekYear=function(){return i(this).year()},u.isoWeek=function(f){if(!this.$utils().u(f))return this.add(7*(f-this.isoWeek()),e);var w,g,l,x,v=i(this),a=(w=this.isoWeekYear(),g=this.$u,l=(g?n.utc:n)().year(w).startOf("year"),x=4-l.isoWeekday(),l.isoWeekday()>4&&(x+=7),l.add(x,e));return v.diff(a,"week")+1},u.isoWeekday=function(f){return this.$utils().u(f)?this.day()||7:this.day(this.day()%7?f:f-7)};var s=u.startOf;u.startOf=function(f,w){var g=this.$utils(),l=!!g.u(w)||w;return g.p(f)==="isoweek"?l?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(f,w)}}})});var St=U((He,Be)=>{(function(e,t){typeof He=="object"&&typeof Be<"u"?Be.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_weekYear=t()})(He,function(){"use strict";return function(e,t){t.prototype.weekYear=function(){var r=this.month(),n=this.week(),i=this.year();return n===1&&r===11?i+1:r===0&&n>=52?i-1:i}}})});var Nt=U((Le,ze)=>{(function(e,t){typeof Le=="object"&&typeof ze<"u"?ze.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_weekOfYear=t()})(Le,function(){"use strict";var e="week",t="year";return function(r,n,i){var u=n.prototype;u.week=function(s){if(s===void 0&&(s=null),s!==null)return this.add(7*(s-this.week()),"day");var f=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var w=i(this).startOf(t).add(1,t).date(f),g=i(this).endOf(e);if(w.isBefore(g))return 1}var l=i(this).startOf(t).date(f).startOf(e).subtract(1,"millisecond"),x=this.diff(l,e,!0);return x<0?i(this).startOf("week").week():Math.ceil(x)},u.weeks=function(s){return s===void 0&&(s=null),this.week(s)}}})});var Mt=U((Pe,Re)=>{(function(e,t){typeof Pe=="object"&&typeof Re<"u"?Re.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_relativeTime=t()})(Pe,function(){"use strict";return function(e,t,r){e=e||{};var n=t.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function u(f,w,g,l){return n.fromToBase(f,w,g,l)}r.en.relativeTime=i,n.fromToBase=function(f,w,g,l,x){for(var v,a,T,E=g.$locale().relativeTime||i,I=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],Y=I.length,F=0;F0,S<=q.r||!q.r){S<=1&&F>0&&(q=I[F-1]);var p=E[q.l];x&&(S=x(""+S)),a=typeof p=="string"?p.replace("%d",S):p(S,w,q.l,T);break}}if(w)return a;var o=T?E.future:E.past;return typeof o=="function"?o(a):o.replace("%s",a)},n.to=function(f,w){return u(f,w,this,!0)},n.from=function(f,w){return u(f,w,this)};var s=function(f){return f.$u?r.utc():r()};n.toNow=function(f){return this.to(s(this),f)},n.fromNow=function(f){return this.from(s(this),f)}}})});var jt=U((Je,Ge)=>{(function(e,t){typeof Je=="object"&&typeof Ge<"u"?Ge.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_utc=t()})(Je,function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,r=/([+-]|\d\d)/g;return function(n,i,u){var s=i.prototype;u.utc=function(a){var T={date:a,utc:!0,args:arguments};return new i(T)},s.utc=function(a){var T=u(this.toDate(),{locale:this.$L,utc:!0});return a?T.add(this.utcOffset(),e):T},s.local=function(){return u(this.toDate(),{locale:this.$L,utc:!1})};var f=s.parse;s.parse=function(a){a.utc&&(this.$u=!0),this.$utils().u(a.$offset)||(this.$offset=a.$offset),f.call(this,a)};var w=s.init;s.init=function(){if(this.$u){var a=this.$d;this.$y=a.getUTCFullYear(),this.$M=a.getUTCMonth(),this.$D=a.getUTCDate(),this.$W=a.getUTCDay(),this.$H=a.getUTCHours(),this.$m=a.getUTCMinutes(),this.$s=a.getUTCSeconds(),this.$ms=a.getUTCMilliseconds()}else w.call(this)};var g=s.utcOffset;s.utcOffset=function(a,T){var E=this.$utils().u;if(E(a))return this.$u?0:E(this.$offset)?g.call(this):this.$offset;if(typeof a=="string"&&(a=function(q){q===void 0&&(q="");var S=q.match(t);if(!S)return null;var p=(""+S[0]).match(r)||["-",0,0],o=p[0],D=60*+p[1]+ +p[2];return D===0?0:o==="+"?D:-D}(a),a===null))return this;var I=Math.abs(a)<=16?60*a:a,Y=this;if(T)return Y.$offset=I,Y.$u=a===0,Y;if(a!==0){var F=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(Y=this.local().add(I+F,e)).$offset=I,Y.$x.$localOffset=F}else Y=this.utc();return Y};var l=s.format;s.format=function(a){var T=a||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return l.call(this,T)},s.valueOf=function(){var a=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*a},s.isUTC=function(){return!!this.$u},s.toISOString=function(){return this.toDate().toISOString()},s.toString=function(){return this.toDate().toUTCString()};var x=s.toDate;s.toDate=function(a){return a==="s"&&this.$offset?u(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():x.call(this)};var v=s.diff;s.diff=function(a,T,E){if(a&&this.$u===a.$u)return v.call(this,a,T,E);var I=this.local(),Y=u(a).local();return v.call(I,Y,T,E)}}})});var At=U((Ze,Ve)=>{(function(e,t){typeof Ze=="object"&&typeof Ve<"u"?Ve.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_timezone=t()})(Ze,function(){"use strict";var e={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(r,n,i){var u,s=function(l,x,v){v===void 0&&(v={});var a=new Date(l),T=function(E,I){I===void 0&&(I={});var Y=I.timeZoneName||"short",F=E+"|"+Y,q=t[F];return q||(q=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:E,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:Y}),t[F]=q),q}(x,v);return T.formatToParts(a)},f=function(l,x){for(var v=s(l,x),a=[],T=0;T=0&&(a[F]=parseInt(Y,10))}var q=a[3],S=q===24?0:q,p=a[0]+"-"+a[1]+"-"+a[2]+" "+S+":"+a[4]+":"+a[5]+":000",o=+l;return(i.utc(p).valueOf()-(o-=o%1e3))/6e4},w=n.prototype;w.tz=function(l,x){l===void 0&&(l=u);var v=this.utcOffset(),a=this.toDate(),T=a.toLocaleString("en-US",{timeZone:l}),E=Math.round((a-new Date(T))/1e3/60),I=i(T,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(a.getTimezoneOffset()/15)-E,!0);if(x){var Y=I.utcOffset();I=I.add(v-Y,"minute")}return I.$x.$timezone=l,I},w.offsetName=function(l){var x=this.$x.$timezone||i.tz.guess(),v=s(this.valueOf(),x,{timeZoneName:l}).find(function(a){return a.type.toLowerCase()==="timezonename"});return v&&v.value};var g=w.startOf;w.startOf=function(l,x){if(!this.$x||!this.$x.$timezone)return g.call(this,l,x);var v=i(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return g.call(v,l,x).tz(this.$x.$timezone,!0)},i.tz=function(l,x,v){var a=v&&x,T=v||x||u,E=f(+i(),T);if(typeof l!="string")return i(l).tz(T);var I=function(S,p,o){var D=S-60*p*1e3,N=f(D,o);if(p===N)return[D,p];var O=f(D-=60*(N-p)*1e3,o);return N===O?[D,N]:[S-60*Math.min(N,O)*1e3,Math.max(N,O)]}(i.utc(l,a).valueOf(),E,T),Y=I[0],F=I[1],q=i(Y).utcOffset(F);return q.$x.$timezone=T,q},i.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},i.tz.setDefault=function(l){u=l}}})});var Dt=U((Ui,et)=>{var X=bt();X.extend(wt());X.extend(Ot());X.extend(xt());X.extend(St());X.extend(Nt());X.extend(Mt());X.extend(jt());X.extend(At());function oe(e){return typeof e=="object"&&typeof e.hash=="object"}function Qe(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}function Xe(e,t,r){if(oe(e))return Xe({},t,e);if(oe(t))return Xe(e,r,t);let n=Qe(e)?e.context:{};r=r||{},oe(r)||(t=Object.assign({},t,r)),oe(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return Qe(e)||(i=Object.assign({},e,i)),Qe(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}function Ke(e,t,r){return oe(t)&&(r=t,t=null),oe(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}function kt(e,t,r){let n=Ke(e,t,r),i={lang:"en",date:new Date(n.str)},u=Xe(this,i,{});X.locale(u.lang||u.language)}et.exports.date=(e,t,r)=>{let n=Ke(e,t,r);if(n.str==null&&n.pattern==null)return X.locale("en"),X().format("MMMM DD, YYYY");kt(n.str,n.pattern,n.options);let i=X(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(X.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)};et.exports.duration=(e,t,r)=>{let n=Ke(e,t);kt(n.str,n.pattern);let i=X.duration(n.str,n.pattern);return r&&!oe(r)?i.format(r):i.humanize()}});var tt=U((Ti,Tt)=>{Tt.exports=function(e){return e!=null&&(Ut(e)||vn(e)||!!e._isBuffer)};function Ut(e){return!!e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function vn(e){return typeof e.readFloatLE=="function"&&typeof e.slice=="function"&&Ut(e.slice(0,0))}});var Yt=U((qi,qt)=>{var $n=tt(),bn=Object.prototype.toString;qt.exports=function(t){if(typeof t>"u")return"undefined";if(t===null)return"null";if(t===!0||t===!1||t instanceof Boolean)return"boolean";if(typeof t=="string"||t instanceof String)return"string";if(typeof t=="number"||t instanceof Number)return"number";if(typeof t=="function"||t instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(t))return"array";if(t instanceof RegExp)return"regexp";if(t instanceof Date)return"date";var r=bn.call(t);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":$n(t)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}});var _t=U((Yi,It)=>{"use strict";var Ct=Yt(),Et={arguments:"an arguments object",array:"an array",boolean:"a boolean",buffer:"a buffer",date:"a date",error:"an error",float32array:"a float32array",float64array:"a float64array",function:"a function",int16array:"an int16array",int32array:"an int32array",int8array:"an int8array",map:"a Map",null:"null",number:"a number",object:"an object",regexp:"a regular expression",set:"a Set",string:"a string",symbol:"a symbol",uint16array:"an uint16array",uint32array:"an uint32array",uint8array:"an uint8array",uint8clampedarray:"an uint8clampedarray",undefined:"undefined",weakmap:"a WeakMap",weakset:"a WeakSet"};function rt(e){return Et[Ct(e)]}rt.types=Et;rt.typeOf=Ct;It.exports=rt});var Me=U((Ci,Ft)=>{var wn=Object.prototype.toString;Ft.exports=function(t){if(t===void 0)return"undefined";if(t===null)return"null";var r=typeof t;if(r==="boolean")return"boolean";if(r==="string")return"string";if(r==="number")return"number";if(r==="symbol")return"symbol";if(r==="function")return Mn(t)?"generatorfunction":"function";if(On(t))return"array";if(kn(t))return"buffer";if(An(t))return"arguments";if(Sn(t))return"date";if(xn(t))return"error";if(Nn(t))return"regexp";switch(Wt(t)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(jn(t))return"generator";switch(r=wn.call(t),r){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return r.slice(8,-1).toLowerCase().replace(/\s/g,"")};function Wt(e){return typeof e.constructor=="function"?e.constructor.name:null}function On(e){return Array.isArray?Array.isArray(e):e instanceof Array}function xn(e){return e instanceof Error||typeof e.message=="string"&&e.constructor&&typeof e.constructor.stackTraceLimit=="number"}function Sn(e){return e instanceof Date?!0:typeof e.toDateString=="function"&&typeof e.getDate=="function"&&typeof e.setDate=="function"}function Nn(e){return e instanceof RegExp?!0:typeof e.flags=="string"&&typeof e.ignoreCase=="boolean"&&typeof e.multiline=="boolean"&&typeof e.global=="boolean"}function Mn(e,t){return Wt(e)==="GeneratorFunction"}function jn(e){return typeof e.throw=="function"&&typeof e.return=="function"&&typeof e.next=="function"}function An(e){try{if(typeof e.length=="number"&&typeof e.callee=="function")return!0}catch(t){if(t.message.indexOf("callee")!==-1)return!0}return!1}function kn(e){return e.constructor&&typeof e.constructor.isBuffer=="function"?e.constructor.isBuffer(e):!1}});var ee=U((Lt,zt)=>{"use strict";var Dn=fe("util"),Ht=_t(),Un=Me(),m=Lt=zt.exports;m.extend=Bt;m.indexOf=In;m.escapeExpression=_n;m.isEmpty=Bn;m.createFrame=Wn;m.blockParams=Fn;m.appendContextPath=Hn;var Tn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},qn=/[&<>"'`=]/g,Yn=/[&<>"'`=]/;function Cn(e){return Tn[e]}function Bt(e){for(var t=1;t{"use strict";var Ln=ee();pe.contains=function(e,t,r){return e==null||t==null||isNaN(e.length)?!1:e.indexOf(t,r)!==-1};pe.chop=function(e){if(typeof e!="string")return"";var t=/^[-_.\W\s]+|[-_.\W\s]+$/g;return e.trim().replace(t,"")};pe.changecase=function(e,t){if(typeof e!="string")return"";if(e.length===1)return e.toLowerCase();e=pe.chop(e).toLowerCase(),typeof t!="function"&&(t=Ln.identity);var r=/[-_.\W\s]+(\w|$)/g;return e.replace(r,function(n,i){return t(i)})};pe.random=function(e,t){return e+Math.floor(Math.random()*(t-e+1))}});var Rt=U((Ii,Pt)=>{"use strict";var zn=je(),V=Pt.exports;V.abs=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.abs(e)};V.add=function(e,t){return!isNaN(e)&&!isNaN(t)?Number(e)+Number(t):typeof e=="string"&&typeof t=="string"?e+t:""};V.avg=function(){let e=[].concat.apply([],arguments);return e.pop(),V.sum(e)/e.length};V.ceil=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.ceil(e)};V.divide=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)/Number(t)};V.floor=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.floor(e)};V.minus=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)-Number(t)};V.modulo=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)%Number(t)};V.multiply=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)*Number(t)};V.plus=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)+Number(t)};V.random=function(e,t){if(isNaN(e))throw new TypeError("expected minimum to be a number");if(isNaN(t))throw new TypeError("expected maximum to be a number");return zn.random(e,t)};V.remainder=function(e,t){return e%t};V.round=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.round(e)};V.subtract=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)-Number(t)};V.sum=function(){for(var e=[].concat.apply([],arguments),t=e.length,r=0;t--;)isNaN(e[t])||(r+=Number(e[t]));return r}});var Gt=U((_i,Jt)=>{"use strict";Jt.exports=function(t){return t!=null&&typeof t=="object"&&Array.isArray(t)===!1}});var Ae=U((Wi,Xt)=>{var Qt=Gt();Xt.exports=function(e,t,r){if(Qt(r)||(r={default:r}),!Vt(e))return typeof r.default<"u"?r.default:e;typeof t=="number"&&(t=String(t));let n=Array.isArray(t),i=typeof t=="string",u=r.separator||".",s=r.joinChar||(typeof u=="string"?u:".");if(!i&&!n)return e;if(i&&t in e)return ut(t,e,r)?e[t]:r.default;let f=n?t:Pn(t,u,r),w=f.length,g=0;do{let l=f[g];for(typeof l=="number"&&(l=String(l));l&&l.slice(-1)==="\\";)l=Zt([l.slice(0,-1),f[++g]||""],s,r);if(l in e){if(!ut(l,e,r))return r.default;e=e[l]}else{let x=!1,v=g+1;for(;v{"use strict";Kt.exports=function(t){if(typeof t!="object")throw new TypeError("createFrame expects data to be an object");var r=Object.assign({},t);if(r._parent=t,r.extend=function(s){Object.assign(this,s)},arguments.length>1)for(var n=[].slice.call(arguments,1),i=n.length,u=-1;++u{"use strict";var y=ee(),C=er.exports,ae=Ae(),Rn=st();C.after=function(e,t){return y.isUndefined(e)?"":(e=y.result(e),Array.isArray(e)?e.slice(t):"")};C.arrayify=function(e){return y.isUndefined(e)?[]:e?Array.isArray(e)?e:[e]:[]};C.before=function(e,t){return y.isUndefined(e)?"":(e=y.result(e),Array.isArray(e)?e.slice(0,t-1):"")};C.eachIndex=function(e,t){var r="";if(y.isUndefined(e))return"";if(e=y.result(e),Array.isArray(e))for(var n=0;n0){for(var s=0;s-1,this,r):"")};C.isArray=function(e){return Array.isArray(e)};C.itemAt=function(e,t){if(y.isUndefined(e))return null;if(e=y.result(e),Array.isArray(e)){if(t=isNaN(t)?0:+t,t<0)return e[e.length+t];if(ti[t]>u[t]?1:-1)}return""};C.withAfter=function(e,t,r){if(y.isUndefined(e))return"";if(e=y.result(e),Array.isArray(e)){e=e.slice(t);for(var n="",i=0;i0){for(var i=[],u=0;u0&&u%t===0&&(n+=r.fn(i),i=[]),i.push(e[u]);n+=r.fn(i)}return n};C.withLast=function(e,t,r){if(y.isUndefined(e))return"";if(e=y.result(e),Array.isArray(e)){if(y.isUndefined(t)||(t=parseFloat(y.result(t))),y.isUndefined(t))return r=t,r.fn(e[e.length-1]);e=e.slice(-t);for(var n=e.length,i=-1,u="";++ig?1:w{"use strict";var tr=ee(),te=rr.exports;te.bytes=function(e,t,r){if(e==null||isNaN(e)&&(e=e.length,!e))return"0 B";isNaN(t)&&(t=2);var n=["B","kB","MB","GB","TB","PB","EB","ZB","YB"];t=Math.pow(10,t),e=Number(e);for(var i=n.length-1;i-->=0;){var u=Math.pow(10,i*3);if(u<=e+1){e=Math.round(e*t/u)/t,e+=" "+n[i];break}}return e};te.addCommas=function(e){return e.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")};te.phoneNumber=function(e){return e=e.toString(),"("+e.substr(0,3)+") "+e.substr(3,3)+"-"+e.substr(6,4)};te.toAbbr=function(e,t){isNaN(e)&&(e=0),tr.isUndefined(t)&&(t=2),e=Number(e),t=Math.pow(10,t);for(var r=["k","m","b","t","q"],n=r.length-1;n>=0;){var i=Math.pow(10,(n+1)*3);if(i<=e+1){e=Math.round(e*t/i)/t,e+=r[n];break}n--}return e};te.toExponential=function(e,t){return isNaN(e)&&(e=0),tr.isUndefined(t)&&(t=0),Number(e).toExponential(t)};te.toFixed=function(e,t){return isNaN(e)&&(e=0),isNaN(t)&&(t=0),Number(e).toFixed(t)};te.toFloat=function(e){return parseFloat(e)};te.toInt=function(e){return parseInt(e,10)};te.toPrecision=function(e,t){return isNaN(e)&&(e=0),isNaN(t)&&(t=1),Number(e).toPrecision(t)}});var ur=U((Li,ir)=>{"use strict";var ft=fe("url"),ye=ee(),Jn=fe("querystring"),ce=ir.exports;ce.encodeURI=function(e){if(ye.isString(e))return encodeURIComponent(e)};ce.escape=function(e){if(ye.isString(e))return Jn.escape(e)};ce.decodeURI=function(e){if(ye.isString(e))return decodeURIComponent(e)};ce.urlResolve=function(e,t){return ft.resolve(e,t)};ce.urlParse=function(e){return ft.parse(e)};ce.stripQuerystring=function(e){if(ye.isString(e))return e.split("?")[0]};ce.stripProtocol=function(e){if(ye.isString(e)){var t=ft.parse(e);return t.protocol="",t.format()}}});var or=U((sr,fr)=>{"use strict";var z=ee(),le=je(),A=fr.exports;A.append=function(e,t){return typeof e=="string"&&typeof t=="string"?e+t:e};A.camelcase=function(e){return typeof e!="string"?"":le.changecase(e,function(t){return t.toUpperCase()})};A.capitalize=function(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)};A.capitalizeAll=function(e){if(typeof e!="string")return"";if(z.isString(e))return e.replace(/\w\S*/g,function(t){return A.capitalize(t)})};A.center=function(e,t){if(typeof e!="string")return"";for(var r="",n=0;n-1;)i++,n+=r;return i};A.pascalcase=function(e){return typeof e!="string"?"":(e=le.changecase(e,function(t){return t.toUpperCase()}),e.charAt(0).toUpperCase()+e.slice(1))};A.pathcase=function(e){return typeof e!="string"?"":le.changecase(e,function(t){return"/"+t})};A.plusify=function(e,t){return typeof e!="string"?"":(z.isString(t)||(t=" "),e.split(t).join("+"))};A.prepend=function(e,t){return typeof e=="string"&&typeof t=="string"?t+e:e};A.raw=function(e){var t=e.fn(),r=z.options(this,e);if(r.escape!==!1)for(var n=0;(n=t.indexOf("{{",n))!==-1;)t[n-1]!=="\\"&&(t=t.slice(0,n)+"\\"+t.slice(n)),n+=3;return t};A.remove=function(e,t){return typeof e!="string"?"":z.isString(t)?e.split(t).join(""):e};A.removeFirst=function(e,t){return typeof e!="string"?"":z.isString(t)?e.replace(t,""):e};A.replace=function(e,t,r){return typeof e!="string"?"":z.isString(t)?(z.isString(r)||(r=""),e.split(t).join(r)):e};A.replaceFirst=function(e,t,r){return typeof e!="string"?"":z.isString(t)?(z.isString(r)||(r=""),e.replace(t,r)):e};A.reverse=ke().reverse;A.sentence=function(e){return typeof e!="string"?"":e.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})};A.snakecase=function(e){return typeof e!="string"?"":le.changecase(e,function(t){return"_"+t})};A.split=function(e,t){return typeof e!="string"?"":(z.isString(t)||(t=","),e.split(t))};A.startsWith=function(e,t,r){var n=[].slice.call(arguments);return r=n.pop(),z.isString(t)&&t.indexOf(e)===0?r.fn(this):typeof r.inverse=="function"?r.inverse(this):""};A.titleize=function(e){if(typeof e!="string")return"";for(var t=e.replace(/[- _]+/g," "),r=t.split(" "),n=r.length,i=[],u=0;n--;){var s=r[u++];i.push(sr.capitalize(s))}return i.join(" ")};A.trim=function(e){return typeof e=="string"?e.trim():""};A.trimLeft=function(e){if(z.isString(e))return e.replace(/^\s+/,"")};A.trimRight=function(e){if(z.isString(e))return e.replace(/\s+$/,"")};A.truncate=function(e,t,r){if(z.isString(e))return typeof r!="string"&&(r=""),e.length>t?e.slice(0,t-r.length)+r:e};A.truncateWords=function(e,t,r){if(z.isString(e)&&!isNaN(t)){typeof r!="string"&&(r="\u2026");var n=Number(t),i=e.split(/[ \t]/);if(n>=i.length)return e;i=i.slice(0,n);var u=i.join(" ").trim();return u+r}};A.upcase=function(){return A.uppercase.apply(this,arguments)};A.uppercase=function(e){return z.isObject(e)&&e.fn?e.fn(this).toUpperCase():typeof e!="string"?"":e.toUpperCase()}});var cr=U((zi,ar)=>{"use strict";var Gn=Me();ar.exports=function e(t){switch(Gn(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return t.source!=="(?:)"&&t.source!=="";case"buffer":return t.toString()!=="";case"error":return t.message!=="";case"string":case"arguments":return t.length!==0;case"file":case"map":case"set":return t.size!==0;case"array":case"object":for(let r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}}});var dr=U((Pi,lr)=>{"use strict";var Zn=Ae(),Vn=cr();lr.exports=function(e,t,r){return Qn(e)&&(typeof t=="string"||Array.isArray(t))?Vn(Zn(e,t,r)):!1};function Qn(e){return e!=null&&(typeof e=="object"||typeof e=="function"||Array.isArray(e))}});var pr=U((Ri,hr)=>{"use strict";function ot(e,t){if(!e)return!0;let r=t||ot.keywords;Array.isArray(r)||(r=[r]);let n=typeof e=="string"?e.toLowerCase():null;for(let i of r)if(i===e||i===n)return!0;return!1}ot.keywords=["0","false","nada","nil","nay","nah","negative","no","none","nope","nul","null","nix","nyet","uh-uh","veto","zero"];hr.exports=ot});var gr=U((Ji,mr)=>{"use strict";mr.exports=function(t){let r=Math.abs(t);if(isNaN(r))throw new TypeError("expected a number");if(!Number.isInteger(r))throw new Error("expected an integer");if(!Number.isSafeInteger(r))throw new Error("value exceeds maximum safe integer");return r%2===1}});var br=U((Gi,$r)=>{"use strict";var Xn=dr(),k=ee(),Kn=je(),yr=pr(),vr=gr(),W=$r.exports;W.and=function(){for(var e=arguments.length-1,t=arguments[e],r=!0,n=0;n":i=e>r;break;case"<=":i=e<=r;break;case">=":i=e>=r;break;case"typeof":i=typeof e===r;break;default:throw new Error("helper {{compare}}: invalid operator: `"+t+"`")}return k.value(i,this,n)};W.contains=function(e,t,r,n){typeof r=="object"&&(n=r,r=void 0);var i=Kn.contains(e,t,r);return k.value(i,this,n)};W.default=function(){for(var e=0;et,this,r)};W.gte=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e>=t,this,r)};W.has=function(e,t,r){return k.isOptions(e)&&(r=e,t=null,e=null),k.isOptions(t)&&(r=t,t=null),e===null?k.value(!1,this,r):arguments.length===2?k.value(Xn(this,e),this,r):(Array.isArray(e)||k.isString(e))&&k.isString(t)&&e.indexOf(t)>-1?k.fn(!0,this,r):k.isObject(e)&&k.isString(t)&&t in e?k.fn(!0,this,r):k.inverse(!1,this,r)};W.isFalsey=function(e,t){return k.value(yr(e),this,t)};W.isTruthy=function(e,t){return k.value(!yr(e),this,t)};W.ifEven=function(e,t){return k.value(!vr(e),this,t)};W.ifNth=function(e,t,r){var n=!isNaN(e)&&!isNaN(t)&&t%e===0;return k.value(n,this,r)};W.ifOdd=function(e,t){return k.value(vr(e),this,t)};W.is=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e==t,this,r)};W.isnt=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e!=t,this,r)};W.lt=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e=t,this,r)};W.unlessGteq=function(e,t,r){return k.isOptions(t)&&(r=t,t=r.hash.compare),k.value(et,this,r)}});var Or=U((Zi,wr)=>{var ei=tt(),ti=Object.prototype.toString;wr.exports=function(t){if(typeof t>"u")return"undefined";if(t===null)return"null";if(t===!0||t===!1||t instanceof Boolean)return"boolean";if(typeof t=="string"||t instanceof String)return"string";if(typeof t=="number"||t instanceof Number)return"number";if(typeof t=="function"||t instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(t))return"array";if(t instanceof RegExp)return"regexp";if(t instanceof Date)return"date";var r=ti.call(t);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":ei(t)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}});var Sr=U((Vi,xr)=>{"use strict";var ri=Or();xr.exports=function(t){var r=ri(t);if(r!=="number"&&r!=="string")return!1;var n=+t;return n-n+1>=0&&t!==""}});var Mr=U((Qi,Nr)=>{"use strict";var ni=Sr();Nr.exports=function(t,r){if(!r)return t;if(!t)return{};for(var n=String(r).split(/[[.\]]/).filter(Boolean),i=n[n.length-1],u={};r=n.shift();)if(t=t[r],!t)return{};return ni(i)?[t]:(u[i]=t,u)}});var Dr=U((Xi,kr)=>{"use strict";var ii=Object.hasOwnProperty,ve=ee(),ui=ke(),P=kr.exports,si=Ae(),jr=Mr(),Ar=st();P.extend=function(){var e=[].slice.call(arguments),t={};ve.isOptions(e[e.length-1])&&(t=e.pop().hash,e.push(t));for(var r={},n=0;n{"use strict";var fi=ee(),Ur=Tr.exports,oi=Me();Ur.toRegex=function(e,t,r){var n=fi.options({},t,r);return new RegExp(e,n.flags)};Ur.test=function(e,t){if(typeof e!="string")return!1;if(oi(t)!=="regexp")throw new TypeError("expected a regular expression");return t.test(e)}});function $e(){return De>Ue.length-16&&(Yr.default.randomFillSync(Ue),De=0),Ue.slice(De,De+=16)}var Yr,Ue,De,at=Z(()=>{Yr=Ne(fe("crypto")),Ue=new Uint8Array(256),De=Ue.length});var Cr,Er=Z(()=>{Cr=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function ai(e){return typeof e=="string"&&Cr.test(e)}var ne,be=Z(()=>{Er();ne=ai});function de(e,t=0){return R[e[t+0]]+R[e[t+1]]+R[e[t+2]]+R[e[t+3]]+"-"+R[e[t+4]]+R[e[t+5]]+"-"+R[e[t+6]]+R[e[t+7]]+"-"+R[e[t+8]]+R[e[t+9]]+"-"+R[e[t+10]]+R[e[t+11]]+R[e[t+12]]+R[e[t+13]]+R[e[t+14]]+R[e[t+15]]}function ci(e,t=0){let r=de(e,t);if(!ne(r))throw TypeError("Stringified UUID is invalid");return r}var R,Ir,we=Z(()=>{be();R=[];for(let e=0;e<256;++e)R.push((e+256).toString(16).slice(1));Ir=ci});function li(e,t,r){let n=t&&r||0,i=t||new Array(16);e=e||{};let u=e.node||_r,s=e.clockseq!==void 0?e.clockseq:ct;if(u==null||s==null){let v=e.random||(e.rng||$e)();u==null&&(u=_r=[v[0]|1,v[1],v[2],v[3],v[4],v[5]]),s==null&&(s=ct=(v[6]<<8|v[7])&16383)}let f=e.msecs!==void 0?e.msecs:Date.now(),w=e.nsecs!==void 0?e.nsecs:dt+1,g=f-lt+(w-dt)/1e4;if(g<0&&e.clockseq===void 0&&(s=s+1&16383),(g<0||f>lt)&&e.nsecs===void 0&&(w=0),w>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");lt=f,dt=w,ct=s,f+=122192928e5;let l=((f&268435455)*1e4+w)%4294967296;i[n++]=l>>>24&255,i[n++]=l>>>16&255,i[n++]=l>>>8&255,i[n++]=l&255;let x=f/4294967296*1e4&268435455;i[n++]=x>>>8&255,i[n++]=x&255,i[n++]=x>>>24&15|16,i[n++]=x>>>16&255,i[n++]=s>>>8|128,i[n++]=s&255;for(let v=0;v<6;++v)i[n+v]=u[v];return t||de(i)}var _r,ct,lt,dt,Wr,Fr=Z(()=>{at();we();lt=0,dt=0;Wr=li});function di(e){if(!ne(e))throw TypeError("Invalid UUID");let t,r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=t&255,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=t&255,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=t&255,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=t&255,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=t&255,r}var Te,ht=Z(()=>{be();Te=di});function hi(e){e=unescape(encodeURIComponent(e));let t=[];for(let r=0;r{we();ht();pi="6ba7b810-9dad-11d1-80b4-00c04fd430c8",mi="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});function gi(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Hr.default.createHash("md5").update(e).digest()}var Hr,Br,Lr=Z(()=>{Hr=Ne(fe("crypto"));Br=gi});var yi,zr,Pr=Z(()=>{pt();Lr();yi=Oe("v3",48,Br),zr=yi});var Rr,mt,Jr=Z(()=>{Rr=Ne(fe("crypto")),mt={randomUUID:Rr.default.randomUUID}});function vi(e,t,r){if(mt.randomUUID&&!t&&!e)return mt.randomUUID();e=e||{};let n=e.random||(e.rng||$e)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){r=r||0;for(let i=0;i<16;++i)t[r+i]=n[i];return t}return de(n)}var Gr,Zr=Z(()=>{Jr();at();we();Gr=vi});function $i(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Vr.default.createHash("sha1").update(e).digest()}var Vr,Qr,Xr=Z(()=>{Vr=Ne(fe("crypto"));Qr=$i});var bi,Kr,en=Z(()=>{pt();Xr();bi=Oe("v5",80,Qr),Kr=bi});var tn,rn=Z(()=>{tn="00000000-0000-0000-0000-000000000000"});function wi(e){if(!ne(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var nn,un=Z(()=>{be();nn=wi});var sn={};yt(sn,{NIL:()=>tn,parse:()=>Te,stringify:()=>Ir,v1:()=>Wr,v3:()=>zr,v4:()=>Gr,v5:()=>Kr,validate:()=>ne,version:()=>nn});var fn=Z(()=>{Fr();Pr();Zr();en();rn();un();be();we();ht()});var an=U((Wu,on)=>{var Oi=(fn(),$t(sn)),xi=on.exports;xi.uuid=function(){return Oi.v4()}});var dn=U((Fu,gt)=>{var{date:Si,duration:Ni}=Dt(),Mi={math:Rt(),array:ke(),number:nr(),url:ur(),string:or(),comparison:br(),object:Dr(),regex:qr(),uuid:an()},ln=["sortBy"];gt.exports.helpersToRemoveForJs=ln;var cn={date:Si,duration:Ni},ie;gt.exports.getJsHelperList=()=>{if(ie)return ie;ie={};for(let e of Object.values(Mi))for(let[t,r]of Object.entries(e))ie[t]=(...n)=>r(...n,{});for(let e of Object.keys(cn))ie[e]=cn[e];for(let e of ln)delete ie[e];return Object.freeze(ie),ie}});var ki={};yt(ki,{default:()=>Ai});var{getJsHelperList:ji}=dn(),Ai={...ji(),stripProtocol:helpersStripProtocol};return $t(ki);})(); +"use strict";var helpers=(()=>{var Mn=Object.create;var je=Object.defineProperty;var An=Object.getOwnPropertyDescriptor;var kn=Object.getOwnPropertyNames;var Dn=Object.getPrototypeOf,Un=Object.prototype.hasOwnProperty;var oe=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var V=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),mt=(e,t)=>{for(var r in t)je(e,r,{get:t[r],enumerable:!0})},yt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of kn(t))!Un.call(e,i)&&i!==r&&je(e,i,{get:()=>t[i],enumerable:!(n=An(t,i))||n.enumerable});return e};var F=(e,t,r)=>(r=e!=null?Mn(Dn(e)):{},yt(t||!e||!e.__esModule?je(r,"default",{value:e,enumerable:!0}):r,e)),gt=e=>yt(je({},"__esModule",{value:!0}),e);var vt=T((Ye,Ce)=>{(function(e,t){typeof Ye=="object"&&typeof Ce<"u"?Ce.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(Ye,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",u="minute",s="hour",f="day",w="week",y="month",l="quarter",x="year",v="date",a="Invalid Date",U=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,q=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,I={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function($){var h=["th","st","nd","rd"],c=$%100;return"["+$+(h[(c-20)%10]||h[c]||h[0])+"]"}},C=function($,h,c){var b=String($);return!b||b.length>=h?$:""+Array(h+1-b.length).join(c)+$},H={s:C,z:function($){var h=-$.utcOffset(),c=Math.abs(h),b=Math.floor(c/60),d=c%60;return(h<=0?"+":"-")+C(b,2,"0")+":"+C(d,2,"0")},m:function $(h,c){if(h.date()1)return $(M[0])}else{var W=h.name;S[W]=h,d=W}return!b&&d&&(Y=d),d||!b&&Y},j=function($,h){if(o($))return $.clone();var c=typeof h=="object"?h:{};return c.date=$,c.args=arguments,new z(c)},O=H;O.l=D,O.i=o,O.w=function($,h){return j($,{locale:h.$L,utc:h.$u,x:h.$x,$offset:h.$offset})};var z=function(){function $(c){this.$L=D(c.locale,null,!0),this.parse(c),this.$x=this.$x||c.x||{},this[p]=!0}var h=$.prototype;return h.parse=function(c){this.$d=function(b){var d=b.date,N=b.utc;if(d===null)return new Date(NaN);if(O.u(d))return new Date;if(d instanceof Date)return new Date(d);if(typeof d=="string"&&!/Z$/i.test(d)){var M=d.match(U);if(M){var W=M[2]-1||0,B=(M[7]||"0").substring(0,3);return N?new Date(Date.UTC(M[1],W,M[3]||1,M[4]||0,M[5]||0,M[6]||0,B)):new Date(M[1],W,M[3]||1,M[4]||0,M[5]||0,M[6]||0,B)}}return new Date(d)}(c),this.init()},h.init=function(){var c=this.$d;this.$y=c.getFullYear(),this.$M=c.getMonth(),this.$D=c.getDate(),this.$W=c.getDay(),this.$H=c.getHours(),this.$m=c.getMinutes(),this.$s=c.getSeconds(),this.$ms=c.getMilliseconds()},h.$utils=function(){return O},h.isValid=function(){return this.$d.toString()!==a},h.isSame=function(c,b){var d=j(c);return this.startOf(b)<=d&&d<=this.endOf(b)},h.isAfter=function(c,b){return j(c){(function(e,t){typeof Ee=="object"&&typeof qe<"u"?qe.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_duration=t()})(Ee,function(){"use strict";var e,t,r=1e3,n=6e4,i=36e5,u=864e5,s=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,f=31536e6,w=2628e6,y=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,l={years:f,months:w,days:u,hours:i,minutes:n,seconds:r,milliseconds:1,weeks:6048e5},x=function(S){return S instanceof H},v=function(S,p,o){return new H(S,o,p.$l)},a=function(S){return t.p(S)+"s"},U=function(S){return S<0},q=function(S){return U(S)?Math.ceil(S):Math.floor(S)},I=function(S){return Math.abs(S)},C=function(S,p){return S?U(S)?{negative:!0,format:""+I(S)+p}:{negative:!1,format:""+S+p}:{negative:!1,format:""}},H=function(){function S(o,D,j){var O=this;if(this.$d={},this.$l=j,o===void 0&&(this.$ms=0,this.parseFromMilliseconds()),D)return v(o*l[a(D)],this);if(typeof o=="number")return this.$ms=o,this.parseFromMilliseconds(),this;if(typeof o=="object")return Object.keys(o).forEach(function($){O.$d[a($)]=o[$]}),this.calMilliseconds(),this;if(typeof o=="string"){var z=o.match(y);if(z){var J=z.slice(2).map(function($){return $!=null?Number($):0});return this.$d.years=J[0],this.$d.months=J[1],this.$d.weeks=J[2],this.$d.days=J[3],this.$d.hours=J[4],this.$d.minutes=J[5],this.$d.seconds=J[6],this.calMilliseconds(),this}}return this}var p=S.prototype;return p.calMilliseconds=function(){var o=this;this.$ms=Object.keys(this.$d).reduce(function(D,j){return D+(o.$d[j]||0)*l[j]},0)},p.parseFromMilliseconds=function(){var o=this.$ms;this.$d.years=q(o/f),o%=f,this.$d.months=q(o/w),o%=w,this.$d.days=q(o/u),o%=u,this.$d.hours=q(o/i),o%=i,this.$d.minutes=q(o/n),o%=n,this.$d.seconds=q(o/r),o%=r,this.$d.milliseconds=o},p.toISOString=function(){var o=C(this.$d.years,"Y"),D=C(this.$d.months,"M"),j=+this.$d.days||0;this.$d.weeks&&(j+=7*this.$d.weeks);var O=C(j,"D"),z=C(this.$d.hours,"H"),J=C(this.$d.minutes,"M"),$=this.$d.seconds||0;this.$d.milliseconds&&($+=this.$d.milliseconds/1e3,$=Math.round(1e3*$)/1e3);var h=C($,"S"),c=o.negative||D.negative||O.negative||z.negative||J.negative||h.negative,b=z.format||J.format||h.format?"T":"",d=(c?"-":"")+"P"+o.format+D.format+O.format+b+z.format+J.format+h.format;return d==="P"||d==="-P"?"P0D":d},p.toJSON=function(){return this.toISOString()},p.format=function(o){var D=o||"YYYY-MM-DDTHH:mm:ss",j={Y:this.$d.years,YY:t.s(this.$d.years,2,"0"),YYYY:t.s(this.$d.years,4,"0"),M:this.$d.months,MM:t.s(this.$d.months,2,"0"),D:this.$d.days,DD:t.s(this.$d.days,2,"0"),H:this.$d.hours,HH:t.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:t.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:t.s(this.$d.seconds,2,"0"),SSS:t.s(this.$d.milliseconds,3,"0")};return D.replace(s,function(O,z){return z||String(j[O])})},p.as=function(o){return this.$ms/l[a(o)]},p.get=function(o){var D=this.$ms,j=a(o);return j==="milliseconds"?D%=1e3:D=j==="weeks"?q(D/l[j]):this.$d[j],D||0},p.add=function(o,D,j){var O;return O=D?o*l[a(D)]:x(o)?o.$ms:v(o,this).$ms,v(this.$ms+O*(j?-1:1),this)},p.subtract=function(o,D){return this.add(o,D,!0)},p.locale=function(o){var D=this.clone();return D.$l=o,D},p.clone=function(){return v(this.$ms,this)},p.humanize=function(o){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!o)},p.valueOf=function(){return this.asMilliseconds()},p.milliseconds=function(){return this.get("milliseconds")},p.asMilliseconds=function(){return this.as("milliseconds")},p.seconds=function(){return this.get("seconds")},p.asSeconds=function(){return this.as("seconds")},p.minutes=function(){return this.get("minutes")},p.asMinutes=function(){return this.as("minutes")},p.hours=function(){return this.get("hours")},p.asHours=function(){return this.as("hours")},p.days=function(){return this.get("days")},p.asDays=function(){return this.as("days")},p.weeks=function(){return this.get("weeks")},p.asWeeks=function(){return this.as("weeks")},p.months=function(){return this.get("months")},p.asMonths=function(){return this.as("months")},p.years=function(){return this.get("years")},p.asYears=function(){return this.as("years")},S}(),Y=function(S,p,o){return S.add(p.years()*o,"y").add(p.months()*o,"M").add(p.days()*o,"d").add(p.hours()*o,"h").add(p.minutes()*o,"m").add(p.seconds()*o,"s").add(p.milliseconds()*o,"ms")};return function(S,p,o){e=o,t=o().$utils(),o.duration=function(O,z){var J=o.locale();return v(O,{$l:J},z)},o.isDuration=x;var D=p.prototype.add,j=p.prototype.subtract;p.prototype.add=function(O,z){return x(O)?Y(this,O,1):D.bind(this)(O,z)},p.prototype.subtract=function(O,z){return x(O)?Y(this,O,-1):j.bind(this)(O,z)}}})});var bt=T((Ie,We)=>{(function(e,t){typeof Ie=="object"&&typeof We<"u"?We.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_advancedFormat=t()})(Ie,function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(i){var u=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var f=this.$utils(),w=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(y){switch(y){case"Q":return Math.ceil((u.$M+1)/3);case"Do":return s.ordinal(u.$D);case"gggg":return u.weekYear();case"GGGG":return u.isoWeekYear();case"wo":return s.ordinal(u.week(),"W");case"w":case"ww":return f.s(u.week(),y==="w"?1:2,"0");case"W":case"WW":return f.s(u.isoWeek(),y==="W"?1:2,"0");case"k":case"kk":return f.s(String(u.$H===0?24:u.$H),y==="k"?1:2,"0");case"X":return Math.floor(u.$d.getTime()/1e3);case"x":return u.$d.getTime();case"z":return"["+u.offsetName()+"]";case"zzz":return"["+u.offsetName("long")+"]";default:return y}});return n.bind(this)(w)}}})});var wt=T((_e,Fe)=>{(function(e,t){typeof _e=="object"&&typeof Fe<"u"?Fe.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_isoWeek=t()})(_e,function(){"use strict";var e="day";return function(t,r,n){var i=function(f){return f.add(4-f.isoWeekday(),e)},u=r.prototype;u.isoWeekYear=function(){return i(this).year()},u.isoWeek=function(f){if(!this.$utils().u(f))return this.add(7*(f-this.isoWeek()),e);var w,y,l,x,v=i(this),a=(w=this.isoWeekYear(),y=this.$u,l=(y?n.utc:n)().year(w).startOf("year"),x=4-l.isoWeekday(),l.isoWeekday()>4&&(x+=7),l.add(x,e));return v.diff(a,"week")+1},u.isoWeekday=function(f){return this.$utils().u(f)?this.day()||7:this.day(this.day()%7?f:f-7)};var s=u.startOf;u.startOf=function(f,w){var y=this.$utils(),l=!!y.u(w)||w;return y.p(f)==="isoweek"?l?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(f,w)}}})});var Ot=T((He,Be)=>{(function(e,t){typeof He=="object"&&typeof Be<"u"?Be.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_weekYear=t()})(He,function(){"use strict";return function(e,t){t.prototype.weekYear=function(){var r=this.month(),n=this.week(),i=this.year();return n===1&&r===11?i+1:r===0&&n>=52?i-1:i}}})});var xt=T((ze,Le)=>{(function(e,t){typeof ze=="object"&&typeof Le<"u"?Le.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_weekOfYear=t()})(ze,function(){"use strict";var e="week",t="year";return function(r,n,i){var u=n.prototype;u.week=function(s){if(s===void 0&&(s=null),s!==null)return this.add(7*(s-this.week()),"day");var f=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var w=i(this).startOf(t).add(1,t).date(f),y=i(this).endOf(e);if(w.isBefore(y))return 1}var l=i(this).startOf(t).date(f).startOf(e).subtract(1,"millisecond"),x=this.diff(l,e,!0);return x<0?i(this).startOf("week").week():Math.ceil(x)},u.weeks=function(s){return s===void 0&&(s=null),this.week(s)}}})});var St=T((Pe,Re)=>{(function(e,t){typeof Pe=="object"&&typeof Re<"u"?Re.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_relativeTime=t()})(Pe,function(){"use strict";return function(e,t,r){e=e||{};var n=t.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function u(f,w,y,l){return n.fromToBase(f,w,y,l)}r.en.relativeTime=i,n.fromToBase=function(f,w,y,l,x){for(var v,a,U,q=y.$locale().relativeTime||i,I=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],C=I.length,H=0;H0,S<=Y.r||!Y.r){S<=1&&H>0&&(Y=I[H-1]);var p=q[Y.l];x&&(S=x(""+S)),a=typeof p=="string"?p.replace("%d",S):p(S,w,Y.l,U);break}}if(w)return a;var o=U?q.future:q.past;return typeof o=="function"?o(a):o.replace("%s",a)},n.to=function(f,w){return u(f,w,this,!0)},n.from=function(f,w){return u(f,w,this)};var s=function(f){return f.$u?r.utc():r()};n.toNow=function(f){return this.to(s(this),f)},n.fromNow=function(f){return this.from(s(this),f)}}})});var jt=T((Ge,Je)=>{(function(e,t){typeof Ge=="object"&&typeof Je<"u"?Je.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_utc=t()})(Ge,function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,r=/([+-]|\d\d)/g;return function(n,i,u){var s=i.prototype;u.utc=function(a){var U={date:a,utc:!0,args:arguments};return new i(U)},s.utc=function(a){var U=u(this.toDate(),{locale:this.$L,utc:!0});return a?U.add(this.utcOffset(),e):U},s.local=function(){return u(this.toDate(),{locale:this.$L,utc:!1})};var f=s.parse;s.parse=function(a){a.utc&&(this.$u=!0),this.$utils().u(a.$offset)||(this.$offset=a.$offset),f.call(this,a)};var w=s.init;s.init=function(){if(this.$u){var a=this.$d;this.$y=a.getUTCFullYear(),this.$M=a.getUTCMonth(),this.$D=a.getUTCDate(),this.$W=a.getUTCDay(),this.$H=a.getUTCHours(),this.$m=a.getUTCMinutes(),this.$s=a.getUTCSeconds(),this.$ms=a.getUTCMilliseconds()}else w.call(this)};var y=s.utcOffset;s.utcOffset=function(a,U){var q=this.$utils().u;if(q(a))return this.$u?0:q(this.$offset)?y.call(this):this.$offset;if(typeof a=="string"&&(a=function(Y){Y===void 0&&(Y="");var S=Y.match(t);if(!S)return null;var p=(""+S[0]).match(r)||["-",0,0],o=p[0],D=60*+p[1]+ +p[2];return D===0?0:o==="+"?D:-D}(a),a===null))return this;var I=Math.abs(a)<=16?60*a:a,C=this;if(U)return C.$offset=I,C.$u=a===0,C;if(a!==0){var H=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(C=this.local().add(I+H,e)).$offset=I,C.$x.$localOffset=H}else C=this.utc();return C};var l=s.format;s.format=function(a){var U=a||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return l.call(this,U)},s.valueOf=function(){var a=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*a},s.isUTC=function(){return!!this.$u},s.toISOString=function(){return this.toDate().toISOString()},s.toString=function(){return this.toDate().toUTCString()};var x=s.toDate;s.toDate=function(a){return a==="s"&&this.$offset?u(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():x.call(this)};var v=s.diff;s.diff=function(a,U,q){if(a&&this.$u===a.$u)return v.call(this,a,U,q);var I=this.local(),C=u(a).local();return v.call(I,C,U,q)}}})});var Nt=T((Ze,Ve)=>{(function(e,t){typeof Ze=="object"&&typeof Ve<"u"?Ve.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_timezone=t()})(Ze,function(){"use strict";var e={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(r,n,i){var u,s=function(l,x,v){v===void 0&&(v={});var a=new Date(l),U=function(q,I){I===void 0&&(I={});var C=I.timeZoneName||"short",H=q+"|"+C,Y=t[H];return Y||(Y=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:q,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:C}),t[H]=Y),Y}(x,v);return U.formatToParts(a)},f=function(l,x){for(var v=s(l,x),a=[],U=0;U=0&&(a[H]=parseInt(C,10))}var Y=a[3],S=Y===24?0:Y,p=a[0]+"-"+a[1]+"-"+a[2]+" "+S+":"+a[4]+":"+a[5]+":000",o=+l;return(i.utc(p).valueOf()-(o-=o%1e3))/6e4},w=n.prototype;w.tz=function(l,x){l===void 0&&(l=u);var v=this.utcOffset(),a=this.toDate(),U=a.toLocaleString("en-US",{timeZone:l}),q=Math.round((a-new Date(U))/1e3/60),I=i(U,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(a.getTimezoneOffset()/15)-q,!0);if(x){var C=I.utcOffset();I=I.add(v-C,"minute")}return I.$x.$timezone=l,I},w.offsetName=function(l){var x=this.$x.$timezone||i.tz.guess(),v=s(this.valueOf(),x,{timeZoneName:l}).find(function(a){return a.type.toLowerCase()==="timezonename"});return v&&v.value};var y=w.startOf;w.startOf=function(l,x){if(!this.$x||!this.$x.$timezone)return y.call(this,l,x);var v=i(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return y.call(v,l,x).tz(this.$x.$timezone,!0)},i.tz=function(l,x,v){var a=v&&x,U=v||x||u,q=f(+i(),U);if(typeof l!="string")return i(l).tz(U);var I=function(S,p,o){var D=S-60*p*1e3,j=f(D,o);if(p===j)return[D,p];var O=f(D-=60*(j-p)*1e3,o);return j===O?[D,j]:[S-60*Math.min(j,O)*1e3,Math.max(j,O)]}(i.utc(l,a).valueOf(),q,U),C=I[0],H=I[1],Y=i(C).utcOffset(H);return Y.$x.$timezone=U,Y},i.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},i.tz.setDefault=function(l){u=l}}})});var et=T((Pi,_t)=>{_t.exports=function(e){return e!=null&&(Wt(e)||Tn(e)||!!e._isBuffer)};function Wt(e){return!!e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function Tn(e){return typeof e.readFloatLE=="function"&&typeof e.slice=="function"&&Wt(e.slice(0,0))}});var Ht=T((Ri,Ft)=>{var Yn=et(),Cn=Object.prototype.toString;Ft.exports=function(t){if(typeof t>"u")return"undefined";if(t===null)return"null";if(t===!0||t===!1||t instanceof Boolean)return"boolean";if(typeof t=="string"||t instanceof String)return"string";if(typeof t=="number"||t instanceof Number)return"number";if(typeof t=="function"||t instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(t))return"array";if(t instanceof RegExp)return"regexp";if(t instanceof Date)return"date";var r=Cn.call(t);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":Yn(t)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}});var Pt=T((Gi,Lt)=>{"use strict";var Bt=Ht(),zt={arguments:"an arguments object",array:"an array",boolean:"a boolean",buffer:"a buffer",date:"a date",error:"an error",float32array:"a float32array",float64array:"a float64array",function:"a function",int16array:"an int16array",int32array:"an int32array",int8array:"an int8array",map:"a Map",null:"null",number:"a number",object:"an object",regexp:"a regular expression",set:"a Set",string:"a string",symbol:"a symbol",uint16array:"an uint16array",uint32array:"an uint32array",uint8array:"an uint8array",uint8clampedarray:"an uint8clampedarray",undefined:"undefined",weakmap:"a WeakMap",weakset:"a WeakSet"};function tt(e){return zt[Bt(e)]}tt.types=zt;tt.typeOf=Bt;Lt.exports=tt});var Ne=T((Ji,Gt)=>{var En=Object.prototype.toString;Gt.exports=function(t){if(t===void 0)return"undefined";if(t===null)return"null";var r=typeof t;if(r==="boolean")return"boolean";if(r==="string")return"string";if(r==="number")return"number";if(r==="symbol")return"symbol";if(r==="function")return Fn(t)?"generatorfunction":"function";if(qn(t))return"array";if(zn(t))return"buffer";if(Bn(t))return"arguments";if(Wn(t))return"date";if(In(t))return"error";if(_n(t))return"regexp";switch(Rt(t)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(Hn(t))return"generator";switch(r=En.call(t),r){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return r.slice(8,-1).toLowerCase().replace(/\s/g,"")};function Rt(e){return typeof e.constructor=="function"?e.constructor.name:null}function qn(e){return Array.isArray?Array.isArray(e):e instanceof Array}function In(e){return e instanceof Error||typeof e.message=="string"&&e.constructor&&typeof e.constructor.stackTraceLimit=="number"}function Wn(e){return e instanceof Date?!0:typeof e.toDateString=="function"&&typeof e.getDate=="function"&&typeof e.setDate=="function"}function _n(e){return e instanceof RegExp?!0:typeof e.flags=="string"&&typeof e.ignoreCase=="boolean"&&typeof e.multiline=="boolean"&&typeof e.global=="boolean"}function Fn(e,t){return Rt(e)==="GeneratorFunction"}function Hn(e){return typeof e.throw=="function"&&typeof e.return=="function"&&typeof e.next=="function"}function Bn(e){try{if(typeof e.length=="number"&&typeof e.callee=="function")return!0}catch(t){if(t.message.indexOf("callee")!==-1)return!0}return!1}function zn(e){return e.constructor&&typeof e.constructor.isBuffer=="function"?e.constructor.isBuffer(e):!1}});var te=T((Vt,Qt)=>{"use strict";var Ln=oe("util"),Jt=Pt(),Pn=Ne(),m=Vt=Qt.exports;m.extend=Zt;m.indexOf=Qn;m.escapeExpression=Xn;m.isEmpty=ri;m.createFrame=Kn;m.blockParams=ei;m.appendContextPath=ti;var Rn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},Gn=/[&<>"'`=]/g,Jn=/[&<>"'`=]/;function Zn(e){return Rn[e]}function Zt(e){for(var t=1;t{"use strict";var ni=te();me.contains=function(e,t,r){return e==null||t==null||isNaN(e.length)?!1:e.indexOf(t,r)!==-1};me.chop=function(e){if(typeof e!="string")return"";var t=/^[-_.\W\s]+|[-_.\W\s]+$/g;return e.trim().replace(t,"")};me.changecase=function(e,t){if(typeof e!="string")return"";if(e.length===1)return e.toLowerCase();e=me.chop(e).toLowerCase(),typeof t!="function"&&(t=ni.identity);var r=/[-_.\W\s]+(\w|$)/g;return e.replace(r,function(n,i){return t(i)})};me.random=function(e,t){return e+Math.floor(Math.random()*(t-e+1))}});var Kt=T((Vi,Xt)=>{"use strict";var ii=Me(),Q=Xt.exports;Q.abs=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.abs(e)};Q.add=function(e,t){return!isNaN(e)&&!isNaN(t)?Number(e)+Number(t):typeof e=="string"&&typeof t=="string"?e+t:""};Q.avg=function(){let e=[].concat.apply([],arguments);return e.pop(),Q.sum(e)/e.length};Q.ceil=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.ceil(e)};Q.divide=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)/Number(t)};Q.floor=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.floor(e)};Q.minus=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)-Number(t)};Q.modulo=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)%Number(t)};Q.multiply=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)*Number(t)};Q.plus=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)+Number(t)};Q.random=function(e,t){if(isNaN(e))throw new TypeError("expected minimum to be a number");if(isNaN(t))throw new TypeError("expected maximum to be a number");return ii.random(e,t)};Q.remainder=function(e,t){return e%t};Q.round=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.round(e)};Q.subtract=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)-Number(t)};Q.sum=function(){for(var e=[].concat.apply([],arguments),t=e.length,r=0;t--;)isNaN(e[t])||(r+=Number(e[t]));return r}});var tr=T((Qi,er)=>{"use strict";er.exports=function(t){return t!=null&&typeof t=="object"&&Array.isArray(t)===!1}});var Ae=T((Xi,ur)=>{var ir=tr();ur.exports=function(e,t,r){if(ir(r)||(r={default:r}),!nr(e))return typeof r.default<"u"?r.default:e;typeof t=="number"&&(t=String(t));let n=Array.isArray(t),i=typeof t=="string",u=r.separator||".",s=r.joinChar||(typeof u=="string"?u:".");if(!i&&!n)return e;if(i&&t in e)return it(t,e,r)?e[t]:r.default;let f=n?t:ui(t,u,r),w=f.length,y=0;do{let l=f[y];for(typeof l=="number"&&(l=String(l));l&&l.slice(-1)==="\\";)l=rr([l.slice(0,-1),f[++y]||""],s,r);if(l in e){if(!it(l,e,r))return r.default;e=e[l]}else{let x=!1,v=y+1;for(;v{"use strict";sr.exports=function(t){if(typeof t!="object")throw new TypeError("createFrame expects data to be an object");var r=Object.assign({},t);if(r._parent=t,r.extend=function(s){Object.assign(this,s)},arguments.length>1)for(var n=[].slice.call(arguments,1),i=n.length,u=-1;++u{"use strict";var g=te(),E=fr.exports,ce=Ae(),si=ut();E.after=function(e,t){return g.isUndefined(e)?"":(e=g.result(e),Array.isArray(e)?e.slice(t):"")};E.arrayify=function(e){return g.isUndefined(e)?[]:e?Array.isArray(e)?e:[e]:[]};E.before=function(e,t){return g.isUndefined(e)?"":(e=g.result(e),Array.isArray(e)?e.slice(0,t-1):"")};E.eachIndex=function(e,t){var r="";if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e))for(var n=0;n0){for(var s=0;s-1,this,r):"")};E.isArray=function(e){return Array.isArray(e)};E.itemAt=function(e,t){if(g.isUndefined(e))return null;if(e=g.result(e),Array.isArray(e)){if(t=isNaN(t)?0:+t,t<0)return e[e.length+t];if(ti[t]>u[t]?1:-1)}return""};E.withAfter=function(e,t,r){if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e)){e=e.slice(t);for(var n="",i=0;i0){for(var i=[],u=0;u0&&u%t===0&&(n+=r.fn(i),i=[]),i.push(e[u]);n+=r.fn(i)}return n};E.withLast=function(e,t,r){if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e)){if(g.isUndefined(t)||(t=parseFloat(g.result(t))),g.isUndefined(t))return r=t,r.fn(e[e.length-1]);e=e.slice(-t);for(var n=e.length,i=-1,u="";++iy?1:w{"use strict";var or=te(),re=ar.exports;re.bytes=function(e,t,r){if(e==null||isNaN(e)&&(e=e.length,!e))return"0 B";isNaN(t)&&(t=2);var n=["B","kB","MB","GB","TB","PB","EB","ZB","YB"];t=Math.pow(10,t),e=Number(e);for(var i=n.length-1;i-->=0;){var u=Math.pow(10,i*3);if(u<=e+1){e=Math.round(e*t/u)/t,e+=" "+n[i];break}}return e};re.addCommas=function(e){return e.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")};re.phoneNumber=function(e){return e=e.toString(),"("+e.substr(0,3)+") "+e.substr(3,3)+"-"+e.substr(6,4)};re.toAbbr=function(e,t){isNaN(e)&&(e=0),or.isUndefined(t)&&(t=2),e=Number(e),t=Math.pow(10,t);for(var r=["k","m","b","t","q"],n=r.length-1;n>=0;){var i=Math.pow(10,(n+1)*3);if(i<=e+1){e=Math.round(e*t/i)/t,e+=r[n];break}n--}return e};re.toExponential=function(e,t){return isNaN(e)&&(e=0),or.isUndefined(t)&&(t=0),Number(e).toExponential(t)};re.toFixed=function(e,t){return isNaN(e)&&(e=0),isNaN(t)&&(t=0),Number(e).toFixed(t)};re.toFloat=function(e){return parseFloat(e)};re.toInt=function(e){return parseInt(e,10)};re.toPrecision=function(e,t){return isNaN(e)&&(e=0),isNaN(t)&&(t=1),Number(e).toPrecision(t)}});var dr=T((ru,lr)=>{"use strict";var st=oe("url"),ve=te(),fi=oe("querystring"),le=lr.exports;le.encodeURI=function(e){if(ve.isString(e))return encodeURIComponent(e)};le.escape=function(e){if(ve.isString(e))return fi.escape(e)};le.decodeURI=function(e){if(ve.isString(e))return decodeURIComponent(e)};le.urlResolve=function(e,t){return st.resolve(e,t)};le.urlParse=function(e){return st.parse(e)};le.stripQuerystring=function(e){if(ve.isString(e))return e.split("?")[0]};le.stripProtocol=function(e){if(ve.isString(e)){var t=st.parse(e);return t.protocol="",t.format()}}});var mr=T((hr,pr)=>{"use strict";var P=te(),de=Me(),A=pr.exports;A.append=function(e,t){return typeof e=="string"&&typeof t=="string"?e+t:e};A.camelcase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return t.toUpperCase()})};A.capitalize=function(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)};A.capitalizeAll=function(e){if(typeof e!="string")return"";if(P.isString(e))return e.replace(/\w\S*/g,function(t){return A.capitalize(t)})};A.center=function(e,t){if(typeof e!="string")return"";for(var r="",n=0;n-1;)i++,n+=r;return i};A.pascalcase=function(e){return typeof e!="string"?"":(e=de.changecase(e,function(t){return t.toUpperCase()}),e.charAt(0).toUpperCase()+e.slice(1))};A.pathcase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return"/"+t})};A.plusify=function(e,t){return typeof e!="string"?"":(P.isString(t)||(t=" "),e.split(t).join("+"))};A.prepend=function(e,t){return typeof e=="string"&&typeof t=="string"?t+e:e};A.raw=function(e){var t=e.fn(),r=P.options(this,e);if(r.escape!==!1)for(var n=0;(n=t.indexOf("{{",n))!==-1;)t[n-1]!=="\\"&&(t=t.slice(0,n)+"\\"+t.slice(n)),n+=3;return t};A.remove=function(e,t){return typeof e!="string"?"":P.isString(t)?e.split(t).join(""):e};A.removeFirst=function(e,t){return typeof e!="string"?"":P.isString(t)?e.replace(t,""):e};A.replace=function(e,t,r){return typeof e!="string"?"":P.isString(t)?(P.isString(r)||(r=""),e.split(t).join(r)):e};A.replaceFirst=function(e,t,r){return typeof e!="string"?"":P.isString(t)?(P.isString(r)||(r=""),e.replace(t,r)):e};A.reverse=ke().reverse;A.sentence=function(e){return typeof e!="string"?"":e.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})};A.snakecase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return"_"+t})};A.split=function(e,t){return typeof e!="string"?"":(P.isString(t)||(t=","),e.split(t))};A.startsWith=function(e,t,r){var n=[].slice.call(arguments);return r=n.pop(),P.isString(t)&&t.indexOf(e)===0?r.fn(this):typeof r.inverse=="function"?r.inverse(this):""};A.titleize=function(e){if(typeof e!="string")return"";for(var t=e.replace(/[- _]+/g," "),r=t.split(" "),n=r.length,i=[],u=0;n--;){var s=r[u++];i.push(hr.capitalize(s))}return i.join(" ")};A.trim=function(e){return typeof e=="string"?e.trim():""};A.trimLeft=function(e){if(P.isString(e))return e.replace(/^\s+/,"")};A.trimRight=function(e){if(P.isString(e))return e.replace(/\s+$/,"")};A.truncate=function(e,t,r){if(P.isString(e))return typeof r!="string"&&(r=""),e.length>t?e.slice(0,t-r.length)+r:e};A.truncateWords=function(e,t,r){if(P.isString(e)&&!isNaN(t)){typeof r!="string"&&(r="\u2026");var n=Number(t),i=e.split(/[ \t]/);if(n>=i.length)return e;i=i.slice(0,n);var u=i.join(" ").trim();return u+r}};A.upcase=function(){return A.uppercase.apply(this,arguments)};A.uppercase=function(e){return P.isObject(e)&&e.fn?e.fn(this).toUpperCase():typeof e!="string"?"":e.toUpperCase()}});var gr=T((nu,yr)=>{"use strict";var oi=Ne();yr.exports=function e(t){switch(oi(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return t.source!=="(?:)"&&t.source!=="";case"buffer":return t.toString()!=="";case"error":return t.message!=="";case"string":case"arguments":return t.length!==0;case"file":case"map":case"set":return t.size!==0;case"array":case"object":for(let r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}}});var $r=T((iu,vr)=>{"use strict";var ai=Ae(),ci=gr();vr.exports=function(e,t,r){return li(e)&&(typeof t=="string"||Array.isArray(t))?ci(ai(e,t,r)):!1};function li(e){return e!=null&&(typeof e=="object"||typeof e=="function"||Array.isArray(e))}});var wr=T((uu,br)=>{"use strict";function ft(e,t){if(!e)return!0;let r=t||ft.keywords;Array.isArray(r)||(r=[r]);let n=typeof e=="string"?e.toLowerCase():null;for(let i of r)if(i===e||i===n)return!0;return!1}ft.keywords=["0","false","nada","nil","nay","nah","negative","no","none","nope","nul","null","nix","nyet","uh-uh","veto","zero"];br.exports=ft});var xr=T((su,Or)=>{"use strict";Or.exports=function(t){let r=Math.abs(t);if(isNaN(r))throw new TypeError("expected a number");if(!Number.isInteger(r))throw new Error("expected an integer");if(!Number.isSafeInteger(r))throw new Error("value exceeds maximum safe integer");return r%2===1}});var Mr=T((fu,Nr)=>{"use strict";var di=$r(),k=te(),hi=Me(),Sr=wr(),jr=xr(),_=Nr.exports;_.and=function(){for(var e=arguments.length-1,t=arguments[e],r=!0,n=0;n":i=e>r;break;case"<=":i=e<=r;break;case">=":i=e>=r;break;case"typeof":i=typeof e===r;break;default:throw new Error("helper {{compare}}: invalid operator: `"+t+"`")}return k.value(i,this,n)};_.contains=function(e,t,r,n){typeof r=="object"&&(n=r,r=void 0);var i=hi.contains(e,t,r);return k.value(i,this,n)};_.default=function(){for(var e=0;et,this,r)};_.gte=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e>=t,this,r)};_.has=function(e,t,r){return k.isOptions(e)&&(r=e,t=null,e=null),k.isOptions(t)&&(r=t,t=null),e===null?k.value(!1,this,r):arguments.length===2?k.value(di(this,e),this,r):(Array.isArray(e)||k.isString(e))&&k.isString(t)&&e.indexOf(t)>-1?k.fn(!0,this,r):k.isObject(e)&&k.isString(t)&&t in e?k.fn(!0,this,r):k.inverse(!1,this,r)};_.isFalsey=function(e,t){return k.value(Sr(e),this,t)};_.isTruthy=function(e,t){return k.value(!Sr(e),this,t)};_.ifEven=function(e,t){return k.value(!jr(e),this,t)};_.ifNth=function(e,t,r){var n=!isNaN(e)&&!isNaN(t)&&t%e===0;return k.value(n,this,r)};_.ifOdd=function(e,t){return k.value(jr(e),this,t)};_.is=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e==t,this,r)};_.isnt=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e!=t,this,r)};_.lt=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e=t,this,r)};_.unlessGteq=function(e,t,r){return k.isOptions(t)&&(r=t,t=r.hash.compare),k.value(et,this,r)}});var kr=T((ou,Ar)=>{var pi=et(),mi=Object.prototype.toString;Ar.exports=function(t){if(typeof t>"u")return"undefined";if(t===null)return"null";if(t===!0||t===!1||t instanceof Boolean)return"boolean";if(typeof t=="string"||t instanceof String)return"string";if(typeof t=="number"||t instanceof Number)return"number";if(typeof t=="function"||t instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(t))return"array";if(t instanceof RegExp)return"regexp";if(t instanceof Date)return"date";var r=mi.call(t);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":pi(t)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}});var Ur=T((au,Dr)=>{"use strict";var yi=kr();Dr.exports=function(t){var r=yi(t);if(r!=="number"&&r!=="string")return!1;var n=+t;return n-n+1>=0&&t!==""}});var Yr=T((cu,Tr)=>{"use strict";var gi=Ur();Tr.exports=function(t,r){if(!r)return t;if(!t)return{};for(var n=String(r).split(/[[.\]]/).filter(Boolean),i=n[n.length-1],u={};r=n.shift();)if(t=t[r],!t)return{};return gi(i)?[t]:(u[i]=t,u)}});var Ir=T((lu,qr)=>{"use strict";var vi=Object.hasOwnProperty,$e=te(),$i=ke(),R=qr.exports,bi=Ae(),Cr=Yr(),Er=ut();R.extend=function(){var e=[].slice.call(arguments),t={};$e.isOptions(e[e.length-1])&&(t=e.pop().hash,e.push(t));for(var r={},n=0;n{"use strict";var wi=te(),Wr=_r.exports,Oi=Ne();Wr.toRegex=function(e,t,r){var n=wi.options({},t,r);return new RegExp(e,n.flags)};Wr.test=function(e,t){if(typeof e!="string")return!1;if(Oi(t)!=="regexp")throw new TypeError("expected a regular expression");return t.test(e)}});function be(){return De>Ue.length-16&&(Hr.default.randomFillSync(Ue),De=0),Ue.slice(De,De+=16)}var Hr,Ue,De,ot=V(()=>{Hr=F(oe("crypto")),Ue=new Uint8Array(256),De=Ue.length});var Br,zr=V(()=>{Br=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function xi(e){return typeof e=="string"&&Br.test(e)}var ue,we=V(()=>{zr();ue=xi});function he(e,t=0){return G[e[t+0]]+G[e[t+1]]+G[e[t+2]]+G[e[t+3]]+"-"+G[e[t+4]]+G[e[t+5]]+"-"+G[e[t+6]]+G[e[t+7]]+"-"+G[e[t+8]]+G[e[t+9]]+"-"+G[e[t+10]]+G[e[t+11]]+G[e[t+12]]+G[e[t+13]]+G[e[t+14]]+G[e[t+15]]}function Si(e,t=0){let r=he(e,t);if(!ue(r))throw TypeError("Stringified UUID is invalid");return r}var G,Lr,Oe=V(()=>{we();G=[];for(let e=0;e<256;++e)G.push((e+256).toString(16).slice(1));Lr=Si});function ji(e,t,r){let n=t&&r||0,i=t||new Array(16);e=e||{};let u=e.node||Pr,s=e.clockseq!==void 0?e.clockseq:at;if(u==null||s==null){let v=e.random||(e.rng||be)();u==null&&(u=Pr=[v[0]|1,v[1],v[2],v[3],v[4],v[5]]),s==null&&(s=at=(v[6]<<8|v[7])&16383)}let f=e.msecs!==void 0?e.msecs:Date.now(),w=e.nsecs!==void 0?e.nsecs:lt+1,y=f-ct+(w-lt)/1e4;if(y<0&&e.clockseq===void 0&&(s=s+1&16383),(y<0||f>ct)&&e.nsecs===void 0&&(w=0),w>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");ct=f,lt=w,at=s,f+=122192928e5;let l=((f&268435455)*1e4+w)%4294967296;i[n++]=l>>>24&255,i[n++]=l>>>16&255,i[n++]=l>>>8&255,i[n++]=l&255;let x=f/4294967296*1e4&268435455;i[n++]=x>>>8&255,i[n++]=x&255,i[n++]=x>>>24&15|16,i[n++]=x>>>16&255,i[n++]=s>>>8|128,i[n++]=s&255;for(let v=0;v<6;++v)i[n+v]=u[v];return t||he(i)}var Pr,at,ct,lt,Rr,Gr=V(()=>{ot();Oe();ct=0,lt=0;Rr=ji});function Ni(e){if(!ue(e))throw TypeError("Invalid UUID");let t,r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=t&255,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=t&255,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=t&255,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=t&255,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=t&255,r}var Te,dt=V(()=>{we();Te=Ni});function Mi(e){e=unescape(encodeURIComponent(e));let t=[];for(let r=0;r{Oe();dt();Ai="6ba7b810-9dad-11d1-80b4-00c04fd430c8",ki="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});function Di(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Jr.default.createHash("md5").update(e).digest()}var Jr,Zr,Vr=V(()=>{Jr=F(oe("crypto"));Zr=Di});var Ui,Qr,Xr=V(()=>{ht();Vr();Ui=xe("v3",48,Zr),Qr=Ui});var Kr,pt,en=V(()=>{Kr=F(oe("crypto")),pt={randomUUID:Kr.default.randomUUID}});function Ti(e,t,r){if(pt.randomUUID&&!t&&!e)return pt.randomUUID();e=e||{};let n=e.random||(e.rng||be)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){r=r||0;for(let i=0;i<16;++i)t[r+i]=n[i];return t}return he(n)}var tn,rn=V(()=>{en();ot();Oe();tn=Ti});function Yi(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),nn.default.createHash("sha1").update(e).digest()}var nn,un,sn=V(()=>{nn=F(oe("crypto"));un=Yi});var Ci,fn,on=V(()=>{ht();sn();Ci=xe("v5",80,un),fn=Ci});var an,cn=V(()=>{an="00000000-0000-0000-0000-000000000000"});function Ei(e){if(!ue(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var ln,dn=V(()=>{we();ln=Ei});var hn={};mt(hn,{NIL:()=>an,parse:()=>Te,stringify:()=>Lr,v1:()=>Rr,v3:()=>Qr,v4:()=>tn,v5:()=>fn,validate:()=>ue,version:()=>ln});var pn=V(()=>{Gr();Xr();rn();on();cn();dn();we();Oe();dt()});var yn=T((Xu,mn)=>{var qi=(pn(),gt(hn)),Ii=mn.exports;Ii.uuid=function(){return qi.v4()}});var Bi={};mt(Bi,{default:()=>Hi});var X=F(vt()),Mt=F($t()),At=F(bt()),kt=F(wt()),Dt=F(Ot()),Ut=F(xt()),Tt=F(St()),Yt=F(jt()),Ct=F(Nt());X.default.extend(Mt.default);X.default.extend(At.default);X.default.extend(kt.default);X.default.extend(Dt.default);X.default.extend(Ut.default);X.default.extend(Tt.default);X.default.extend(Yt.default);X.default.extend(Ct.default);function ae(e){return typeof e=="object"&&typeof e.hash=="object"}function Qe(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}function Xe(e,t,r){if(ae(e))return Xe({},t,e);if(ae(t))return Xe(e,r,t);let n=Qe(e)?e.context:{};r=r||{},ae(r)||(t=Object.assign({},t,r)),ae(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return Qe(e)||(i=Object.assign({},e,i)),Qe(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}function Ke(e,t,r){return ae(t)&&(r=t,t=null),ae(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}function Et(e,t,r){let n=Ke(e,t,r),i={lang:"en",date:new Date(n.str)},u=Xe(this,i,{});X.default.locale(u.lang||u.language)}var qt=(e,t,r)=>{let n=Ke(e,t,r);if(n.str==null&&n.pattern==null)return X.default.locale("en"),(0,X.default)().format("MMMM DD, YYYY");Et(n.str,n.pattern,n.options);let i=(0,X.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(X.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},It=(e,t,r)=>{let n=Ke(e,t);Et(n.str,n.pattern);let i=X.default.duration(n.str,n.pattern);return r&&!ae(r)?i.format(r):i.humanize()};var gn=F(Kt()),vn=F(ke()),$n=F(cr()),bn=F(dr()),wn=F(mr()),On=F(Mr()),xn=F(Ir()),Sn=F(Fr()),jn=F(yn()),Wi={math:gn.default,array:vn.default,number:$n.default,url:bn.default,string:wn.default,comparison:On.default,object:xn.default,regex:Sn.default,uuid:jn.default},_i=["sortBy"],Fi={date:qt,duration:It},ne;function Nn(){if(ne)return ne;ne={};for(let e of Object.values(Wi))for(let[t,r]of Object.entries(e))ne[t]=(...n)=>r(...n,{});ne={...ne,addedHelpers:Fi};for(let e of _i)delete ne[e];return Object.freeze(ne),ne}var Hi={...Nn(),stripProtocol:helpersStripProtocol};return gt(Bi);})(); /*! Bundled license information: is-buffer/index.js: diff --git a/packages/server/src/jsRunner/bundles/snippets.ivm.bundle.js b/packages/server/src/jsRunner/bundles/snippets.ivm.bundle.js index bad9049af0..4dff030c0b 100644 --- a/packages/server/src/jsRunner/bundles/snippets.ivm.bundle.js +++ b/packages/server/src/jsRunner/bundles/snippets.ivm.bundle.js @@ -1,3 +1,3 @@ -"use strict";var snippets=(()=>{var u=Object.create;var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var l=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),W=(i,e)=>{for(var p in e)n(i,p,{get:e[p],enumerable:!0})},f=(i,e,p,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of h(e))!C.call(i,t)&&t!==p&&n(i,t,{get:()=>e[t],enumerable:!(r=a(e,t))||r.enumerable});return i};var d=(i,e,p)=>(p=i!=null?u(x(i)):{},f(e||!i||!i.__esModule?n(p,"default",{value:i,enumerable:!0}):p,i)),g=i=>f(n({},"__esModule",{value:!0}),i);var s=l((D,o)=>{o.exports.iifeWrapper=i=>`(function(){ +"use strict";var snippets=(()=>{var p=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var u=(i,e)=>{for(var n in e)p(i,n,{get:e[n],enumerable:!0})},a=(i,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of s(e))!c.call(i,t)&&t!==n&&p(i,t,{get:()=>e[t],enumerable:!(r=f(e,t))||r.enumerable});return i};var h=i=>a(p({},"__esModule",{value:!0}),i);var C={};u(C,{default:()=>x});var o=i=>`(function(){ ${i} -})();`});var w={};W(w,{default:()=>v});var c=d(s()),v=new Proxy({},{get:function(i,e){return e in snippetCache||(snippetCache[e]=[eval][0]((0,c.iifeWrapper)(snippetDefinitions[e]))),snippetCache[e]}});return g(w);})(); +})();`;var x=new Proxy({},{get:function(i,e){return e in snippetCache||(snippetCache[e]=[eval][0](o(snippetDefinitions[e]))),snippetCache[e]}});return h(C);})(); From 8a9bb0294b6f2208fce280569e4d1ee975af0282 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 15:22:07 +0000 Subject: [PATCH 31/49] Allow horizontal overflow in drawer contents --- packages/bbui/src/Drawer/DrawerContent.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/bbui/src/Drawer/DrawerContent.svelte b/packages/bbui/src/Drawer/DrawerContent.svelte index 490dfecc31..f7345afb11 100644 --- a/packages/bbui/src/Drawer/DrawerContent.svelte +++ b/packages/bbui/src/Drawer/DrawerContent.svelte @@ -42,7 +42,6 @@ .main { height: 100%; overflow: auto; - overflow-x: hidden; } .padding .main { padding: var(--spacing-xl); From c6fca37b43c59a6be56d1383d6a2facc08d437ba Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 16:05:02 +0000 Subject: [PATCH 32/49] Update dataprovider validation which was not aware of global bindings --- packages/builder/src/stores/builder/components.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/builder/src/stores/builder/components.js b/packages/builder/src/stores/builder/components.js index 0d7da1ba58..a8522db80c 100644 --- a/packages/builder/src/stores/builder/components.js +++ b/packages/builder/src/stores/builder/components.js @@ -11,6 +11,7 @@ import { findComponentParent, findAllMatchingComponents, makeComponentUnique, + findComponentType, } from "helpers/components" import { getComponentFieldOptions } from "helpers/formFields" import { selectedScreen } from "./screens" @@ -279,12 +280,10 @@ export class ComponentStore extends BudiStore { else { if (setting.type === "dataProvider") { // Validate data provider exists, or else clear it - const treeId = parent?._id || component._id - const path = findComponentPath(screen?.props, treeId) - const providers = path.filter(component => - component._component?.endsWith("/dataprovider") + const providers = findAllMatchingComponents( + screen?.props, + x => x._component === "@budibase/standard-components/dataprovider" ) - // Validate non-empty values const valid = providers?.some(dp => value.includes?.(dp._id)) if (!valid) { if (providers.length) { From 001e48179ae1fb0e7dd4f0facf68237a062fe8a6 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 17:09:20 +0100 Subject: [PATCH 33/49] Lint --- packages/string-templates/src/helpers/list.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/string-templates/src/helpers/list.ts b/packages/string-templates/src/helpers/list.ts index ca331edd8e..b5796d8f1d 100644 --- a/packages/string-templates/src/helpers/list.ts +++ b/packages/string-templates/src/helpers/list.ts @@ -1,5 +1,6 @@ import { date, duration } from "./date" +/* eslint-disable local-rules/no-budibase-imports */ // @ts-expect-error import math from "@budibase/handlebars-helpers/lib/math" // @ts-expect-error @@ -18,6 +19,7 @@ import object from "@budibase/handlebars-helpers/lib/object" import regex from "@budibase/handlebars-helpers/lib/regex" // @ts-expect-error import uuid from "@budibase/handlebars-helpers/lib/uuid" +/* eslint-enable local-rules/no-budibase-imports */ // https://github.com/evanw/esbuild/issues/56 const externalCollections = { From 55e0145fdb3fe77b8f5d0aa4c9fb451a560411a2 Mon Sep 17 00:00:00 2001 From: andz-bb Date: Thu, 21 Mar 2024 16:10:52 +0000 Subject: [PATCH 34/49] fix for boolean values getting stripped when running processObject --- packages/string-templates/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/string-templates/src/index.ts b/packages/string-templates/src/index.ts index 759fe2dc54..1ac91edd28 100644 --- a/packages/string-templates/src/index.ts +++ b/packages/string-templates/src/index.ts @@ -94,7 +94,7 @@ export async function processObject>( for (const key of Object.keys(object || {})) { if (object[key] != null) { const val = object[key] - let parsedValue + let parsedValue = val if (typeof val === "string") { parsedValue = await processString(object[key], context, opts) } else if (typeof val === "object") { From 8c7ab2e506e58c11d6c883749729263e34566fc8 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 17:14:27 +0100 Subject: [PATCH 35/49] Fix ts --- packages/server/src/jsRunner/bundles/index-helpers.ts | 2 +- packages/server/tsconfig.build.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/server/src/jsRunner/bundles/index-helpers.ts b/packages/server/src/jsRunner/bundles/index-helpers.ts index c48e90e9b4..127cb1b838 100644 --- a/packages/server/src/jsRunner/bundles/index-helpers.ts +++ b/packages/server/src/jsRunner/bundles/index-helpers.ts @@ -1,4 +1,4 @@ -import { getJsHelperList } from "../../../../string-templates/src/helpers/list" +import { getJsHelperList } from "@budibase/string-templates/src/helpers/list" export default { ...getJsHelperList(), diff --git a/packages/server/tsconfig.build.json b/packages/server/tsconfig.build.json index e4552bdb18..c4b9b8788e 100644 --- a/packages/server/tsconfig.build.json +++ b/packages/server/tsconfig.build.json @@ -18,7 +18,8 @@ "@budibase/backend-core/*": ["../backend-core/*"], "@budibase/shared-core": ["../shared-core/src"], "@budibase/pro": ["../pro/src"], - "@budibase/string-templates": ["../string-templates/src"] + "@budibase/string-templates": ["../string-templates/src"], + "@budibase/string-templates/*": ["../string-templates/*"] }, "allowArbitraryExtensions": true }, From ae0ef14a63393ff277d846f84391c6ff2ee1d088 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 17:22:33 +0100 Subject: [PATCH 36/49] Lint --- packages/server/src/jsRunner/bundles/index-helpers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/server/src/jsRunner/bundles/index-helpers.ts b/packages/server/src/jsRunner/bundles/index-helpers.ts index 127cb1b838..9e95dbf0a4 100644 --- a/packages/server/src/jsRunner/bundles/index-helpers.ts +++ b/packages/server/src/jsRunner/bundles/index-helpers.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line local-rules/no-budibase-imports import { getJsHelperList } from "@budibase/string-templates/src/helpers/list" export default { From d3535a255d6d441c6877088fcc6d640ce4904f54 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 16:24:35 +0000 Subject: [PATCH 37/49] Respect ordering of options when using a data provider options source --- .../src/components/app/forms/optionsParser.js | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/packages/client/src/components/app/forms/optionsParser.js b/packages/client/src/components/app/forms/optionsParser.js index bd69967731..3bb5865774 100644 --- a/packages/client/src/components/app/forms/optionsParser.js +++ b/packages/client/src/components/app/forms/optionsParser.js @@ -6,36 +6,24 @@ export const getOptions = ( valueColumn, customOptions ) => { - const isArray = fieldSchema?.type === "array" // Take options from schema if (optionsSource == null || optionsSource === "schema") { return fieldSchema?.constraints?.inclusion ?? [] } - if (optionsSource === "provider" && isArray) { - let optionsSet = {} - - dataProvider?.rows?.forEach(row => { - const value = row?.[valueColumn] - if (value != null) { - const label = row[labelColumn] || value - optionsSet[value] = { value, label } - } - }) - return Object.values(optionsSet) - } - // Extract options from data provider if (optionsSource === "provider" && valueColumn) { - let optionsSet = {} + let valueCache = {} + let options = [] dataProvider?.rows?.forEach(row => { const value = row?.[valueColumn] - if (value != null) { + if (value != null && !valueCache[value]) { + valueCache[value] = true const label = row[labelColumn] || value - optionsSet[value] = { value, label } + options.push({ value, label }) } }) - return Object.values(optionsSet) + return options } // Extract custom options From 44114d9af10876c85334d6ea221077862bbb51d7 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 16:26:53 +0000 Subject: [PATCH 38/49] Lint --- packages/builder/src/stores/builder/components.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/builder/src/stores/builder/components.js b/packages/builder/src/stores/builder/components.js index a8522db80c..fe5f4e8a05 100644 --- a/packages/builder/src/stores/builder/components.js +++ b/packages/builder/src/stores/builder/components.js @@ -11,7 +11,6 @@ import { findComponentParent, findAllMatchingComponents, makeComponentUnique, - findComponentType, } from "helpers/components" import { getComponentFieldOptions } from "helpers/formFields" import { selectedScreen } from "./screens" From 09368340de80e325dc5c01a55e3dfcd4a51a982a Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 17:29:55 +0100 Subject: [PATCH 39/49] Add tests --- packages/string-templates/test/basic.spec.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/string-templates/test/basic.spec.ts b/packages/string-templates/test/basic.spec.ts index ae006f06f9..00058d4ecd 100644 --- a/packages/string-templates/test/basic.spec.ts +++ b/packages/string-templates/test/basic.spec.ts @@ -104,6 +104,26 @@ describe("Test that the object processing works correctly", () => { } expect(error).toBeNull() }) + + it("should be able to handle booleans", async () => { + const output = await processObject( + { + first: true, + second: "true", + third: "another string", + forth: "with {{ template }}", + }, + { + template: "value", + } + ) + expect(output).toEqual({ + first: true, + second: "true", + third: "another string", + forth: "with value", + }) + }) }) describe("check returning objects", () => { From e7c2f629b61f8911786d9d016efe7219b11dbb37 Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Thu, 21 Mar 2024 16:38:31 +0000 Subject: [PATCH 40/49] Bump version to 2.22.10 --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index 5a561bec04..57c2148c7d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.22.9", + "version": "2.22.10", "npmClient": "yarn", "packages": [ "packages/*", From 4102459f9834249c8a9a7896cd6be9ecc590a9a0 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 21 Mar 2024 16:59:07 +0000 Subject: [PATCH 41/49] Fix additional helpers not working --- packages/string-templates/src/helpers/list.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/string-templates/src/helpers/list.ts b/packages/string-templates/src/helpers/list.ts index b5796d8f1d..c31f7b0a70 100644 --- a/packages/string-templates/src/helpers/list.ts +++ b/packages/string-templates/src/helpers/list.ts @@ -57,7 +57,7 @@ export function getJsHelperList() { } helpers = { ...helpers, - addedHelpers, + ...addedHelpers, } for (const toRemove of helpersToRemoveForJs) { From 89767162bb13ddaa61a7d77d23a61b520cf96453 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 18:41:23 +0100 Subject: [PATCH 42/49] Add comments --- packages/string-templates/src/helpers/list.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/string-templates/src/helpers/list.ts b/packages/string-templates/src/helpers/list.ts index c31f7b0a70..a7d6a502e7 100644 --- a/packages/string-templates/src/helpers/list.ts +++ b/packages/string-templates/src/helpers/list.ts @@ -1,5 +1,9 @@ import { date, duration } from "./date" +/* +@budibase/handlebars-helpers is not treeshakeable, so we can't use the barrel files. +Otherwise, we have issues when generating the isolated-vm bundle because of the treeshaking +*/ /* eslint-disable local-rules/no-budibase-imports */ // @ts-expect-error import math from "@budibase/handlebars-helpers/lib/math" From 332fa3050a41628fd92deab7755ed2d02db17382 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 21 Mar 2024 18:51:22 +0100 Subject: [PATCH 43/49] Redo bundle --- .../server/src/jsRunner/bundles/index-helpers.ivm.bundle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/jsRunner/bundles/index-helpers.ivm.bundle.js b/packages/server/src/jsRunner/bundles/index-helpers.ivm.bundle.js index 7b21be36ca..55af2db6e2 100644 --- a/packages/server/src/jsRunner/bundles/index-helpers.ivm.bundle.js +++ b/packages/server/src/jsRunner/bundles/index-helpers.ivm.bundle.js @@ -1,4 +1,4 @@ -"use strict";var helpers=(()=>{var Mn=Object.create;var je=Object.defineProperty;var An=Object.getOwnPropertyDescriptor;var kn=Object.getOwnPropertyNames;var Dn=Object.getPrototypeOf,Un=Object.prototype.hasOwnProperty;var oe=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var V=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),mt=(e,t)=>{for(var r in t)je(e,r,{get:t[r],enumerable:!0})},yt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of kn(t))!Un.call(e,i)&&i!==r&&je(e,i,{get:()=>t[i],enumerable:!(n=An(t,i))||n.enumerable});return e};var F=(e,t,r)=>(r=e!=null?Mn(Dn(e)):{},yt(t||!e||!e.__esModule?je(r,"default",{value:e,enumerable:!0}):r,e)),gt=e=>yt(je({},"__esModule",{value:!0}),e);var vt=T((Ye,Ce)=>{(function(e,t){typeof Ye=="object"&&typeof Ce<"u"?Ce.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(Ye,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",u="minute",s="hour",f="day",w="week",y="month",l="quarter",x="year",v="date",a="Invalid Date",U=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,q=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,I={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function($){var h=["th","st","nd","rd"],c=$%100;return"["+$+(h[(c-20)%10]||h[c]||h[0])+"]"}},C=function($,h,c){var b=String($);return!b||b.length>=h?$:""+Array(h+1-b.length).join(c)+$},H={s:C,z:function($){var h=-$.utcOffset(),c=Math.abs(h),b=Math.floor(c/60),d=c%60;return(h<=0?"+":"-")+C(b,2,"0")+":"+C(d,2,"0")},m:function $(h,c){if(h.date()1)return $(M[0])}else{var W=h.name;S[W]=h,d=W}return!b&&d&&(Y=d),d||!b&&Y},j=function($,h){if(o($))return $.clone();var c=typeof h=="object"?h:{};return c.date=$,c.args=arguments,new z(c)},O=H;O.l=D,O.i=o,O.w=function($,h){return j($,{locale:h.$L,utc:h.$u,x:h.$x,$offset:h.$offset})};var z=function(){function $(c){this.$L=D(c.locale,null,!0),this.parse(c),this.$x=this.$x||c.x||{},this[p]=!0}var h=$.prototype;return h.parse=function(c){this.$d=function(b){var d=b.date,N=b.utc;if(d===null)return new Date(NaN);if(O.u(d))return new Date;if(d instanceof Date)return new Date(d);if(typeof d=="string"&&!/Z$/i.test(d)){var M=d.match(U);if(M){var W=M[2]-1||0,B=(M[7]||"0").substring(0,3);return N?new Date(Date.UTC(M[1],W,M[3]||1,M[4]||0,M[5]||0,M[6]||0,B)):new Date(M[1],W,M[3]||1,M[4]||0,M[5]||0,M[6]||0,B)}}return new Date(d)}(c),this.init()},h.init=function(){var c=this.$d;this.$y=c.getFullYear(),this.$M=c.getMonth(),this.$D=c.getDate(),this.$W=c.getDay(),this.$H=c.getHours(),this.$m=c.getMinutes(),this.$s=c.getSeconds(),this.$ms=c.getMilliseconds()},h.$utils=function(){return O},h.isValid=function(){return this.$d.toString()!==a},h.isSame=function(c,b){var d=j(c);return this.startOf(b)<=d&&d<=this.endOf(b)},h.isAfter=function(c,b){return j(c){(function(e,t){typeof Ee=="object"&&typeof qe<"u"?qe.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_duration=t()})(Ee,function(){"use strict";var e,t,r=1e3,n=6e4,i=36e5,u=864e5,s=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,f=31536e6,w=2628e6,y=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,l={years:f,months:w,days:u,hours:i,minutes:n,seconds:r,milliseconds:1,weeks:6048e5},x=function(S){return S instanceof H},v=function(S,p,o){return new H(S,o,p.$l)},a=function(S){return t.p(S)+"s"},U=function(S){return S<0},q=function(S){return U(S)?Math.ceil(S):Math.floor(S)},I=function(S){return Math.abs(S)},C=function(S,p){return S?U(S)?{negative:!0,format:""+I(S)+p}:{negative:!1,format:""+S+p}:{negative:!1,format:""}},H=function(){function S(o,D,j){var O=this;if(this.$d={},this.$l=j,o===void 0&&(this.$ms=0,this.parseFromMilliseconds()),D)return v(o*l[a(D)],this);if(typeof o=="number")return this.$ms=o,this.parseFromMilliseconds(),this;if(typeof o=="object")return Object.keys(o).forEach(function($){O.$d[a($)]=o[$]}),this.calMilliseconds(),this;if(typeof o=="string"){var z=o.match(y);if(z){var J=z.slice(2).map(function($){return $!=null?Number($):0});return this.$d.years=J[0],this.$d.months=J[1],this.$d.weeks=J[2],this.$d.days=J[3],this.$d.hours=J[4],this.$d.minutes=J[5],this.$d.seconds=J[6],this.calMilliseconds(),this}}return this}var p=S.prototype;return p.calMilliseconds=function(){var o=this;this.$ms=Object.keys(this.$d).reduce(function(D,j){return D+(o.$d[j]||0)*l[j]},0)},p.parseFromMilliseconds=function(){var o=this.$ms;this.$d.years=q(o/f),o%=f,this.$d.months=q(o/w),o%=w,this.$d.days=q(o/u),o%=u,this.$d.hours=q(o/i),o%=i,this.$d.minutes=q(o/n),o%=n,this.$d.seconds=q(o/r),o%=r,this.$d.milliseconds=o},p.toISOString=function(){var o=C(this.$d.years,"Y"),D=C(this.$d.months,"M"),j=+this.$d.days||0;this.$d.weeks&&(j+=7*this.$d.weeks);var O=C(j,"D"),z=C(this.$d.hours,"H"),J=C(this.$d.minutes,"M"),$=this.$d.seconds||0;this.$d.milliseconds&&($+=this.$d.milliseconds/1e3,$=Math.round(1e3*$)/1e3);var h=C($,"S"),c=o.negative||D.negative||O.negative||z.negative||J.negative||h.negative,b=z.format||J.format||h.format?"T":"",d=(c?"-":"")+"P"+o.format+D.format+O.format+b+z.format+J.format+h.format;return d==="P"||d==="-P"?"P0D":d},p.toJSON=function(){return this.toISOString()},p.format=function(o){var D=o||"YYYY-MM-DDTHH:mm:ss",j={Y:this.$d.years,YY:t.s(this.$d.years,2,"0"),YYYY:t.s(this.$d.years,4,"0"),M:this.$d.months,MM:t.s(this.$d.months,2,"0"),D:this.$d.days,DD:t.s(this.$d.days,2,"0"),H:this.$d.hours,HH:t.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:t.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:t.s(this.$d.seconds,2,"0"),SSS:t.s(this.$d.milliseconds,3,"0")};return D.replace(s,function(O,z){return z||String(j[O])})},p.as=function(o){return this.$ms/l[a(o)]},p.get=function(o){var D=this.$ms,j=a(o);return j==="milliseconds"?D%=1e3:D=j==="weeks"?q(D/l[j]):this.$d[j],D||0},p.add=function(o,D,j){var O;return O=D?o*l[a(D)]:x(o)?o.$ms:v(o,this).$ms,v(this.$ms+O*(j?-1:1),this)},p.subtract=function(o,D){return this.add(o,D,!0)},p.locale=function(o){var D=this.clone();return D.$l=o,D},p.clone=function(){return v(this.$ms,this)},p.humanize=function(o){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!o)},p.valueOf=function(){return this.asMilliseconds()},p.milliseconds=function(){return this.get("milliseconds")},p.asMilliseconds=function(){return this.as("milliseconds")},p.seconds=function(){return this.get("seconds")},p.asSeconds=function(){return this.as("seconds")},p.minutes=function(){return this.get("minutes")},p.asMinutes=function(){return this.as("minutes")},p.hours=function(){return this.get("hours")},p.asHours=function(){return this.as("hours")},p.days=function(){return this.get("days")},p.asDays=function(){return this.as("days")},p.weeks=function(){return this.get("weeks")},p.asWeeks=function(){return this.as("weeks")},p.months=function(){return this.get("months")},p.asMonths=function(){return this.as("months")},p.years=function(){return this.get("years")},p.asYears=function(){return this.as("years")},S}(),Y=function(S,p,o){return S.add(p.years()*o,"y").add(p.months()*o,"M").add(p.days()*o,"d").add(p.hours()*o,"h").add(p.minutes()*o,"m").add(p.seconds()*o,"s").add(p.milliseconds()*o,"ms")};return function(S,p,o){e=o,t=o().$utils(),o.duration=function(O,z){var J=o.locale();return v(O,{$l:J},z)},o.isDuration=x;var D=p.prototype.add,j=p.prototype.subtract;p.prototype.add=function(O,z){return x(O)?Y(this,O,1):D.bind(this)(O,z)},p.prototype.subtract=function(O,z){return x(O)?Y(this,O,-1):j.bind(this)(O,z)}}})});var bt=T((Ie,We)=>{(function(e,t){typeof Ie=="object"&&typeof We<"u"?We.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_advancedFormat=t()})(Ie,function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(i){var u=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var f=this.$utils(),w=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(y){switch(y){case"Q":return Math.ceil((u.$M+1)/3);case"Do":return s.ordinal(u.$D);case"gggg":return u.weekYear();case"GGGG":return u.isoWeekYear();case"wo":return s.ordinal(u.week(),"W");case"w":case"ww":return f.s(u.week(),y==="w"?1:2,"0");case"W":case"WW":return f.s(u.isoWeek(),y==="W"?1:2,"0");case"k":case"kk":return f.s(String(u.$H===0?24:u.$H),y==="k"?1:2,"0");case"X":return Math.floor(u.$d.getTime()/1e3);case"x":return u.$d.getTime();case"z":return"["+u.offsetName()+"]";case"zzz":return"["+u.offsetName("long")+"]";default:return y}});return n.bind(this)(w)}}})});var wt=T((_e,Fe)=>{(function(e,t){typeof _e=="object"&&typeof Fe<"u"?Fe.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_isoWeek=t()})(_e,function(){"use strict";var e="day";return function(t,r,n){var i=function(f){return f.add(4-f.isoWeekday(),e)},u=r.prototype;u.isoWeekYear=function(){return i(this).year()},u.isoWeek=function(f){if(!this.$utils().u(f))return this.add(7*(f-this.isoWeek()),e);var w,y,l,x,v=i(this),a=(w=this.isoWeekYear(),y=this.$u,l=(y?n.utc:n)().year(w).startOf("year"),x=4-l.isoWeekday(),l.isoWeekday()>4&&(x+=7),l.add(x,e));return v.diff(a,"week")+1},u.isoWeekday=function(f){return this.$utils().u(f)?this.day()||7:this.day(this.day()%7?f:f-7)};var s=u.startOf;u.startOf=function(f,w){var y=this.$utils(),l=!!y.u(w)||w;return y.p(f)==="isoweek"?l?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(f,w)}}})});var Ot=T((He,Be)=>{(function(e,t){typeof He=="object"&&typeof Be<"u"?Be.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_weekYear=t()})(He,function(){"use strict";return function(e,t){t.prototype.weekYear=function(){var r=this.month(),n=this.week(),i=this.year();return n===1&&r===11?i+1:r===0&&n>=52?i-1:i}}})});var xt=T((ze,Le)=>{(function(e,t){typeof ze=="object"&&typeof Le<"u"?Le.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_weekOfYear=t()})(ze,function(){"use strict";var e="week",t="year";return function(r,n,i){var u=n.prototype;u.week=function(s){if(s===void 0&&(s=null),s!==null)return this.add(7*(s-this.week()),"day");var f=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var w=i(this).startOf(t).add(1,t).date(f),y=i(this).endOf(e);if(w.isBefore(y))return 1}var l=i(this).startOf(t).date(f).startOf(e).subtract(1,"millisecond"),x=this.diff(l,e,!0);return x<0?i(this).startOf("week").week():Math.ceil(x)},u.weeks=function(s){return s===void 0&&(s=null),this.week(s)}}})});var St=T((Pe,Re)=>{(function(e,t){typeof Pe=="object"&&typeof Re<"u"?Re.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_relativeTime=t()})(Pe,function(){"use strict";return function(e,t,r){e=e||{};var n=t.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function u(f,w,y,l){return n.fromToBase(f,w,y,l)}r.en.relativeTime=i,n.fromToBase=function(f,w,y,l,x){for(var v,a,U,q=y.$locale().relativeTime||i,I=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],C=I.length,H=0;H0,S<=Y.r||!Y.r){S<=1&&H>0&&(Y=I[H-1]);var p=q[Y.l];x&&(S=x(""+S)),a=typeof p=="string"?p.replace("%d",S):p(S,w,Y.l,U);break}}if(w)return a;var o=U?q.future:q.past;return typeof o=="function"?o(a):o.replace("%s",a)},n.to=function(f,w){return u(f,w,this,!0)},n.from=function(f,w){return u(f,w,this)};var s=function(f){return f.$u?r.utc():r()};n.toNow=function(f){return this.to(s(this),f)},n.fromNow=function(f){return this.from(s(this),f)}}})});var jt=T((Ge,Je)=>{(function(e,t){typeof Ge=="object"&&typeof Je<"u"?Je.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_utc=t()})(Ge,function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,r=/([+-]|\d\d)/g;return function(n,i,u){var s=i.prototype;u.utc=function(a){var U={date:a,utc:!0,args:arguments};return new i(U)},s.utc=function(a){var U=u(this.toDate(),{locale:this.$L,utc:!0});return a?U.add(this.utcOffset(),e):U},s.local=function(){return u(this.toDate(),{locale:this.$L,utc:!1})};var f=s.parse;s.parse=function(a){a.utc&&(this.$u=!0),this.$utils().u(a.$offset)||(this.$offset=a.$offset),f.call(this,a)};var w=s.init;s.init=function(){if(this.$u){var a=this.$d;this.$y=a.getUTCFullYear(),this.$M=a.getUTCMonth(),this.$D=a.getUTCDate(),this.$W=a.getUTCDay(),this.$H=a.getUTCHours(),this.$m=a.getUTCMinutes(),this.$s=a.getUTCSeconds(),this.$ms=a.getUTCMilliseconds()}else w.call(this)};var y=s.utcOffset;s.utcOffset=function(a,U){var q=this.$utils().u;if(q(a))return this.$u?0:q(this.$offset)?y.call(this):this.$offset;if(typeof a=="string"&&(a=function(Y){Y===void 0&&(Y="");var S=Y.match(t);if(!S)return null;var p=(""+S[0]).match(r)||["-",0,0],o=p[0],D=60*+p[1]+ +p[2];return D===0?0:o==="+"?D:-D}(a),a===null))return this;var I=Math.abs(a)<=16?60*a:a,C=this;if(U)return C.$offset=I,C.$u=a===0,C;if(a!==0){var H=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(C=this.local().add(I+H,e)).$offset=I,C.$x.$localOffset=H}else C=this.utc();return C};var l=s.format;s.format=function(a){var U=a||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return l.call(this,U)},s.valueOf=function(){var a=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*a},s.isUTC=function(){return!!this.$u},s.toISOString=function(){return this.toDate().toISOString()},s.toString=function(){return this.toDate().toUTCString()};var x=s.toDate;s.toDate=function(a){return a==="s"&&this.$offset?u(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():x.call(this)};var v=s.diff;s.diff=function(a,U,q){if(a&&this.$u===a.$u)return v.call(this,a,U,q);var I=this.local(),C=u(a).local();return v.call(I,C,U,q)}}})});var Nt=T((Ze,Ve)=>{(function(e,t){typeof Ze=="object"&&typeof Ve<"u"?Ve.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_timezone=t()})(Ze,function(){"use strict";var e={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(r,n,i){var u,s=function(l,x,v){v===void 0&&(v={});var a=new Date(l),U=function(q,I){I===void 0&&(I={});var C=I.timeZoneName||"short",H=q+"|"+C,Y=t[H];return Y||(Y=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:q,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:C}),t[H]=Y),Y}(x,v);return U.formatToParts(a)},f=function(l,x){for(var v=s(l,x),a=[],U=0;U=0&&(a[H]=parseInt(C,10))}var Y=a[3],S=Y===24?0:Y,p=a[0]+"-"+a[1]+"-"+a[2]+" "+S+":"+a[4]+":"+a[5]+":000",o=+l;return(i.utc(p).valueOf()-(o-=o%1e3))/6e4},w=n.prototype;w.tz=function(l,x){l===void 0&&(l=u);var v=this.utcOffset(),a=this.toDate(),U=a.toLocaleString("en-US",{timeZone:l}),q=Math.round((a-new Date(U))/1e3/60),I=i(U,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(a.getTimezoneOffset()/15)-q,!0);if(x){var C=I.utcOffset();I=I.add(v-C,"minute")}return I.$x.$timezone=l,I},w.offsetName=function(l){var x=this.$x.$timezone||i.tz.guess(),v=s(this.valueOf(),x,{timeZoneName:l}).find(function(a){return a.type.toLowerCase()==="timezonename"});return v&&v.value};var y=w.startOf;w.startOf=function(l,x){if(!this.$x||!this.$x.$timezone)return y.call(this,l,x);var v=i(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return y.call(v,l,x).tz(this.$x.$timezone,!0)},i.tz=function(l,x,v){var a=v&&x,U=v||x||u,q=f(+i(),U);if(typeof l!="string")return i(l).tz(U);var I=function(S,p,o){var D=S-60*p*1e3,j=f(D,o);if(p===j)return[D,p];var O=f(D-=60*(j-p)*1e3,o);return j===O?[D,j]:[S-60*Math.min(j,O)*1e3,Math.max(j,O)]}(i.utc(l,a).valueOf(),q,U),C=I[0],H=I[1],Y=i(C).utcOffset(H);return Y.$x.$timezone=U,Y},i.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},i.tz.setDefault=function(l){u=l}}})});var et=T((Pi,_t)=>{_t.exports=function(e){return e!=null&&(Wt(e)||Tn(e)||!!e._isBuffer)};function Wt(e){return!!e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function Tn(e){return typeof e.readFloatLE=="function"&&typeof e.slice=="function"&&Wt(e.slice(0,0))}});var Ht=T((Ri,Ft)=>{var Yn=et(),Cn=Object.prototype.toString;Ft.exports=function(t){if(typeof t>"u")return"undefined";if(t===null)return"null";if(t===!0||t===!1||t instanceof Boolean)return"boolean";if(typeof t=="string"||t instanceof String)return"string";if(typeof t=="number"||t instanceof Number)return"number";if(typeof t=="function"||t instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(t))return"array";if(t instanceof RegExp)return"regexp";if(t instanceof Date)return"date";var r=Cn.call(t);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":Yn(t)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}});var Pt=T((Gi,Lt)=>{"use strict";var Bt=Ht(),zt={arguments:"an arguments object",array:"an array",boolean:"a boolean",buffer:"a buffer",date:"a date",error:"an error",float32array:"a float32array",float64array:"a float64array",function:"a function",int16array:"an int16array",int32array:"an int32array",int8array:"an int8array",map:"a Map",null:"null",number:"a number",object:"an object",regexp:"a regular expression",set:"a Set",string:"a string",symbol:"a symbol",uint16array:"an uint16array",uint32array:"an uint32array",uint8array:"an uint8array",uint8clampedarray:"an uint8clampedarray",undefined:"undefined",weakmap:"a WeakMap",weakset:"a WeakSet"};function tt(e){return zt[Bt(e)]}tt.types=zt;tt.typeOf=Bt;Lt.exports=tt});var Ne=T((Ji,Gt)=>{var En=Object.prototype.toString;Gt.exports=function(t){if(t===void 0)return"undefined";if(t===null)return"null";var r=typeof t;if(r==="boolean")return"boolean";if(r==="string")return"string";if(r==="number")return"number";if(r==="symbol")return"symbol";if(r==="function")return Fn(t)?"generatorfunction":"function";if(qn(t))return"array";if(zn(t))return"buffer";if(Bn(t))return"arguments";if(Wn(t))return"date";if(In(t))return"error";if(_n(t))return"regexp";switch(Rt(t)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(Hn(t))return"generator";switch(r=En.call(t),r){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return r.slice(8,-1).toLowerCase().replace(/\s/g,"")};function Rt(e){return typeof e.constructor=="function"?e.constructor.name:null}function qn(e){return Array.isArray?Array.isArray(e):e instanceof Array}function In(e){return e instanceof Error||typeof e.message=="string"&&e.constructor&&typeof e.constructor.stackTraceLimit=="number"}function Wn(e){return e instanceof Date?!0:typeof e.toDateString=="function"&&typeof e.getDate=="function"&&typeof e.setDate=="function"}function _n(e){return e instanceof RegExp?!0:typeof e.flags=="string"&&typeof e.ignoreCase=="boolean"&&typeof e.multiline=="boolean"&&typeof e.global=="boolean"}function Fn(e,t){return Rt(e)==="GeneratorFunction"}function Hn(e){return typeof e.throw=="function"&&typeof e.return=="function"&&typeof e.next=="function"}function Bn(e){try{if(typeof e.length=="number"&&typeof e.callee=="function")return!0}catch(t){if(t.message.indexOf("callee")!==-1)return!0}return!1}function zn(e){return e.constructor&&typeof e.constructor.isBuffer=="function"?e.constructor.isBuffer(e):!1}});var te=T((Vt,Qt)=>{"use strict";var Ln=oe("util"),Jt=Pt(),Pn=Ne(),m=Vt=Qt.exports;m.extend=Zt;m.indexOf=Qn;m.escapeExpression=Xn;m.isEmpty=ri;m.createFrame=Kn;m.blockParams=ei;m.appendContextPath=ti;var Rn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},Gn=/[&<>"'`=]/g,Jn=/[&<>"'`=]/;function Zn(e){return Rn[e]}function Zt(e){for(var t=1;t{"use strict";var ni=te();me.contains=function(e,t,r){return e==null||t==null||isNaN(e.length)?!1:e.indexOf(t,r)!==-1};me.chop=function(e){if(typeof e!="string")return"";var t=/^[-_.\W\s]+|[-_.\W\s]+$/g;return e.trim().replace(t,"")};me.changecase=function(e,t){if(typeof e!="string")return"";if(e.length===1)return e.toLowerCase();e=me.chop(e).toLowerCase(),typeof t!="function"&&(t=ni.identity);var r=/[-_.\W\s]+(\w|$)/g;return e.replace(r,function(n,i){return t(i)})};me.random=function(e,t){return e+Math.floor(Math.random()*(t-e+1))}});var Kt=T((Vi,Xt)=>{"use strict";var ii=Me(),Q=Xt.exports;Q.abs=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.abs(e)};Q.add=function(e,t){return!isNaN(e)&&!isNaN(t)?Number(e)+Number(t):typeof e=="string"&&typeof t=="string"?e+t:""};Q.avg=function(){let e=[].concat.apply([],arguments);return e.pop(),Q.sum(e)/e.length};Q.ceil=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.ceil(e)};Q.divide=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)/Number(t)};Q.floor=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.floor(e)};Q.minus=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)-Number(t)};Q.modulo=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)%Number(t)};Q.multiply=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)*Number(t)};Q.plus=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)+Number(t)};Q.random=function(e,t){if(isNaN(e))throw new TypeError("expected minimum to be a number");if(isNaN(t))throw new TypeError("expected maximum to be a number");return ii.random(e,t)};Q.remainder=function(e,t){return e%t};Q.round=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.round(e)};Q.subtract=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)-Number(t)};Q.sum=function(){for(var e=[].concat.apply([],arguments),t=e.length,r=0;t--;)isNaN(e[t])||(r+=Number(e[t]));return r}});var tr=T((Qi,er)=>{"use strict";er.exports=function(t){return t!=null&&typeof t=="object"&&Array.isArray(t)===!1}});var Ae=T((Xi,ur)=>{var ir=tr();ur.exports=function(e,t,r){if(ir(r)||(r={default:r}),!nr(e))return typeof r.default<"u"?r.default:e;typeof t=="number"&&(t=String(t));let n=Array.isArray(t),i=typeof t=="string",u=r.separator||".",s=r.joinChar||(typeof u=="string"?u:".");if(!i&&!n)return e;if(i&&t in e)return it(t,e,r)?e[t]:r.default;let f=n?t:ui(t,u,r),w=f.length,y=0;do{let l=f[y];for(typeof l=="number"&&(l=String(l));l&&l.slice(-1)==="\\";)l=rr([l.slice(0,-1),f[++y]||""],s,r);if(l in e){if(!it(l,e,r))return r.default;e=e[l]}else{let x=!1,v=y+1;for(;v{"use strict";sr.exports=function(t){if(typeof t!="object")throw new TypeError("createFrame expects data to be an object");var r=Object.assign({},t);if(r._parent=t,r.extend=function(s){Object.assign(this,s)},arguments.length>1)for(var n=[].slice.call(arguments,1),i=n.length,u=-1;++u{"use strict";var g=te(),E=fr.exports,ce=Ae(),si=ut();E.after=function(e,t){return g.isUndefined(e)?"":(e=g.result(e),Array.isArray(e)?e.slice(t):"")};E.arrayify=function(e){return g.isUndefined(e)?[]:e?Array.isArray(e)?e:[e]:[]};E.before=function(e,t){return g.isUndefined(e)?"":(e=g.result(e),Array.isArray(e)?e.slice(0,t-1):"")};E.eachIndex=function(e,t){var r="";if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e))for(var n=0;n0){for(var s=0;s-1,this,r):"")};E.isArray=function(e){return Array.isArray(e)};E.itemAt=function(e,t){if(g.isUndefined(e))return null;if(e=g.result(e),Array.isArray(e)){if(t=isNaN(t)?0:+t,t<0)return e[e.length+t];if(ti[t]>u[t]?1:-1)}return""};E.withAfter=function(e,t,r){if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e)){e=e.slice(t);for(var n="",i=0;i0){for(var i=[],u=0;u0&&u%t===0&&(n+=r.fn(i),i=[]),i.push(e[u]);n+=r.fn(i)}return n};E.withLast=function(e,t,r){if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e)){if(g.isUndefined(t)||(t=parseFloat(g.result(t))),g.isUndefined(t))return r=t,r.fn(e[e.length-1]);e=e.slice(-t);for(var n=e.length,i=-1,u="";++iy?1:w{"use strict";var or=te(),re=ar.exports;re.bytes=function(e,t,r){if(e==null||isNaN(e)&&(e=e.length,!e))return"0 B";isNaN(t)&&(t=2);var n=["B","kB","MB","GB","TB","PB","EB","ZB","YB"];t=Math.pow(10,t),e=Number(e);for(var i=n.length-1;i-->=0;){var u=Math.pow(10,i*3);if(u<=e+1){e=Math.round(e*t/u)/t,e+=" "+n[i];break}}return e};re.addCommas=function(e){return e.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")};re.phoneNumber=function(e){return e=e.toString(),"("+e.substr(0,3)+") "+e.substr(3,3)+"-"+e.substr(6,4)};re.toAbbr=function(e,t){isNaN(e)&&(e=0),or.isUndefined(t)&&(t=2),e=Number(e),t=Math.pow(10,t);for(var r=["k","m","b","t","q"],n=r.length-1;n>=0;){var i=Math.pow(10,(n+1)*3);if(i<=e+1){e=Math.round(e*t/i)/t,e+=r[n];break}n--}return e};re.toExponential=function(e,t){return isNaN(e)&&(e=0),or.isUndefined(t)&&(t=0),Number(e).toExponential(t)};re.toFixed=function(e,t){return isNaN(e)&&(e=0),isNaN(t)&&(t=0),Number(e).toFixed(t)};re.toFloat=function(e){return parseFloat(e)};re.toInt=function(e){return parseInt(e,10)};re.toPrecision=function(e,t){return isNaN(e)&&(e=0),isNaN(t)&&(t=1),Number(e).toPrecision(t)}});var dr=T((ru,lr)=>{"use strict";var st=oe("url"),ve=te(),fi=oe("querystring"),le=lr.exports;le.encodeURI=function(e){if(ve.isString(e))return encodeURIComponent(e)};le.escape=function(e){if(ve.isString(e))return fi.escape(e)};le.decodeURI=function(e){if(ve.isString(e))return decodeURIComponent(e)};le.urlResolve=function(e,t){return st.resolve(e,t)};le.urlParse=function(e){return st.parse(e)};le.stripQuerystring=function(e){if(ve.isString(e))return e.split("?")[0]};le.stripProtocol=function(e){if(ve.isString(e)){var t=st.parse(e);return t.protocol="",t.format()}}});var mr=T((hr,pr)=>{"use strict";var P=te(),de=Me(),A=pr.exports;A.append=function(e,t){return typeof e=="string"&&typeof t=="string"?e+t:e};A.camelcase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return t.toUpperCase()})};A.capitalize=function(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)};A.capitalizeAll=function(e){if(typeof e!="string")return"";if(P.isString(e))return e.replace(/\w\S*/g,function(t){return A.capitalize(t)})};A.center=function(e,t){if(typeof e!="string")return"";for(var r="",n=0;n-1;)i++,n+=r;return i};A.pascalcase=function(e){return typeof e!="string"?"":(e=de.changecase(e,function(t){return t.toUpperCase()}),e.charAt(0).toUpperCase()+e.slice(1))};A.pathcase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return"/"+t})};A.plusify=function(e,t){return typeof e!="string"?"":(P.isString(t)||(t=" "),e.split(t).join("+"))};A.prepend=function(e,t){return typeof e=="string"&&typeof t=="string"?t+e:e};A.raw=function(e){var t=e.fn(),r=P.options(this,e);if(r.escape!==!1)for(var n=0;(n=t.indexOf("{{",n))!==-1;)t[n-1]!=="\\"&&(t=t.slice(0,n)+"\\"+t.slice(n)),n+=3;return t};A.remove=function(e,t){return typeof e!="string"?"":P.isString(t)?e.split(t).join(""):e};A.removeFirst=function(e,t){return typeof e!="string"?"":P.isString(t)?e.replace(t,""):e};A.replace=function(e,t,r){return typeof e!="string"?"":P.isString(t)?(P.isString(r)||(r=""),e.split(t).join(r)):e};A.replaceFirst=function(e,t,r){return typeof e!="string"?"":P.isString(t)?(P.isString(r)||(r=""),e.replace(t,r)):e};A.reverse=ke().reverse;A.sentence=function(e){return typeof e!="string"?"":e.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})};A.snakecase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return"_"+t})};A.split=function(e,t){return typeof e!="string"?"":(P.isString(t)||(t=","),e.split(t))};A.startsWith=function(e,t,r){var n=[].slice.call(arguments);return r=n.pop(),P.isString(t)&&t.indexOf(e)===0?r.fn(this):typeof r.inverse=="function"?r.inverse(this):""};A.titleize=function(e){if(typeof e!="string")return"";for(var t=e.replace(/[- _]+/g," "),r=t.split(" "),n=r.length,i=[],u=0;n--;){var s=r[u++];i.push(hr.capitalize(s))}return i.join(" ")};A.trim=function(e){return typeof e=="string"?e.trim():""};A.trimLeft=function(e){if(P.isString(e))return e.replace(/^\s+/,"")};A.trimRight=function(e){if(P.isString(e))return e.replace(/\s+$/,"")};A.truncate=function(e,t,r){if(P.isString(e))return typeof r!="string"&&(r=""),e.length>t?e.slice(0,t-r.length)+r:e};A.truncateWords=function(e,t,r){if(P.isString(e)&&!isNaN(t)){typeof r!="string"&&(r="\u2026");var n=Number(t),i=e.split(/[ \t]/);if(n>=i.length)return e;i=i.slice(0,n);var u=i.join(" ").trim();return u+r}};A.upcase=function(){return A.uppercase.apply(this,arguments)};A.uppercase=function(e){return P.isObject(e)&&e.fn?e.fn(this).toUpperCase():typeof e!="string"?"":e.toUpperCase()}});var gr=T((nu,yr)=>{"use strict";var oi=Ne();yr.exports=function e(t){switch(oi(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return t.source!=="(?:)"&&t.source!=="";case"buffer":return t.toString()!=="";case"error":return t.message!=="";case"string":case"arguments":return t.length!==0;case"file":case"map":case"set":return t.size!==0;case"array":case"object":for(let r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}}});var $r=T((iu,vr)=>{"use strict";var ai=Ae(),ci=gr();vr.exports=function(e,t,r){return li(e)&&(typeof t=="string"||Array.isArray(t))?ci(ai(e,t,r)):!1};function li(e){return e!=null&&(typeof e=="object"||typeof e=="function"||Array.isArray(e))}});var wr=T((uu,br)=>{"use strict";function ft(e,t){if(!e)return!0;let r=t||ft.keywords;Array.isArray(r)||(r=[r]);let n=typeof e=="string"?e.toLowerCase():null;for(let i of r)if(i===e||i===n)return!0;return!1}ft.keywords=["0","false","nada","nil","nay","nah","negative","no","none","nope","nul","null","nix","nyet","uh-uh","veto","zero"];br.exports=ft});var xr=T((su,Or)=>{"use strict";Or.exports=function(t){let r=Math.abs(t);if(isNaN(r))throw new TypeError("expected a number");if(!Number.isInteger(r))throw new Error("expected an integer");if(!Number.isSafeInteger(r))throw new Error("value exceeds maximum safe integer");return r%2===1}});var Mr=T((fu,Nr)=>{"use strict";var di=$r(),k=te(),hi=Me(),Sr=wr(),jr=xr(),_=Nr.exports;_.and=function(){for(var e=arguments.length-1,t=arguments[e],r=!0,n=0;n":i=e>r;break;case"<=":i=e<=r;break;case">=":i=e>=r;break;case"typeof":i=typeof e===r;break;default:throw new Error("helper {{compare}}: invalid operator: `"+t+"`")}return k.value(i,this,n)};_.contains=function(e,t,r,n){typeof r=="object"&&(n=r,r=void 0);var i=hi.contains(e,t,r);return k.value(i,this,n)};_.default=function(){for(var e=0;et,this,r)};_.gte=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e>=t,this,r)};_.has=function(e,t,r){return k.isOptions(e)&&(r=e,t=null,e=null),k.isOptions(t)&&(r=t,t=null),e===null?k.value(!1,this,r):arguments.length===2?k.value(di(this,e),this,r):(Array.isArray(e)||k.isString(e))&&k.isString(t)&&e.indexOf(t)>-1?k.fn(!0,this,r):k.isObject(e)&&k.isString(t)&&t in e?k.fn(!0,this,r):k.inverse(!1,this,r)};_.isFalsey=function(e,t){return k.value(Sr(e),this,t)};_.isTruthy=function(e,t){return k.value(!Sr(e),this,t)};_.ifEven=function(e,t){return k.value(!jr(e),this,t)};_.ifNth=function(e,t,r){var n=!isNaN(e)&&!isNaN(t)&&t%e===0;return k.value(n,this,r)};_.ifOdd=function(e,t){return k.value(jr(e),this,t)};_.is=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e==t,this,r)};_.isnt=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e!=t,this,r)};_.lt=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e=t,this,r)};_.unlessGteq=function(e,t,r){return k.isOptions(t)&&(r=t,t=r.hash.compare),k.value(et,this,r)}});var kr=T((ou,Ar)=>{var pi=et(),mi=Object.prototype.toString;Ar.exports=function(t){if(typeof t>"u")return"undefined";if(t===null)return"null";if(t===!0||t===!1||t instanceof Boolean)return"boolean";if(typeof t=="string"||t instanceof String)return"string";if(typeof t=="number"||t instanceof Number)return"number";if(typeof t=="function"||t instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(t))return"array";if(t instanceof RegExp)return"regexp";if(t instanceof Date)return"date";var r=mi.call(t);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":pi(t)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}});var Ur=T((au,Dr)=>{"use strict";var yi=kr();Dr.exports=function(t){var r=yi(t);if(r!=="number"&&r!=="string")return!1;var n=+t;return n-n+1>=0&&t!==""}});var Yr=T((cu,Tr)=>{"use strict";var gi=Ur();Tr.exports=function(t,r){if(!r)return t;if(!t)return{};for(var n=String(r).split(/[[.\]]/).filter(Boolean),i=n[n.length-1],u={};r=n.shift();)if(t=t[r],!t)return{};return gi(i)?[t]:(u[i]=t,u)}});var Ir=T((lu,qr)=>{"use strict";var vi=Object.hasOwnProperty,$e=te(),$i=ke(),R=qr.exports,bi=Ae(),Cr=Yr(),Er=ut();R.extend=function(){var e=[].slice.call(arguments),t={};$e.isOptions(e[e.length-1])&&(t=e.pop().hash,e.push(t));for(var r={},n=0;n{"use strict";var wi=te(),Wr=_r.exports,Oi=Ne();Wr.toRegex=function(e,t,r){var n=wi.options({},t,r);return new RegExp(e,n.flags)};Wr.test=function(e,t){if(typeof e!="string")return!1;if(Oi(t)!=="regexp")throw new TypeError("expected a regular expression");return t.test(e)}});function be(){return De>Ue.length-16&&(Hr.default.randomFillSync(Ue),De=0),Ue.slice(De,De+=16)}var Hr,Ue,De,ot=V(()=>{Hr=F(oe("crypto")),Ue=new Uint8Array(256),De=Ue.length});var Br,zr=V(()=>{Br=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function xi(e){return typeof e=="string"&&Br.test(e)}var ue,we=V(()=>{zr();ue=xi});function he(e,t=0){return G[e[t+0]]+G[e[t+1]]+G[e[t+2]]+G[e[t+3]]+"-"+G[e[t+4]]+G[e[t+5]]+"-"+G[e[t+6]]+G[e[t+7]]+"-"+G[e[t+8]]+G[e[t+9]]+"-"+G[e[t+10]]+G[e[t+11]]+G[e[t+12]]+G[e[t+13]]+G[e[t+14]]+G[e[t+15]]}function Si(e,t=0){let r=he(e,t);if(!ue(r))throw TypeError("Stringified UUID is invalid");return r}var G,Lr,Oe=V(()=>{we();G=[];for(let e=0;e<256;++e)G.push((e+256).toString(16).slice(1));Lr=Si});function ji(e,t,r){let n=t&&r||0,i=t||new Array(16);e=e||{};let u=e.node||Pr,s=e.clockseq!==void 0?e.clockseq:at;if(u==null||s==null){let v=e.random||(e.rng||be)();u==null&&(u=Pr=[v[0]|1,v[1],v[2],v[3],v[4],v[5]]),s==null&&(s=at=(v[6]<<8|v[7])&16383)}let f=e.msecs!==void 0?e.msecs:Date.now(),w=e.nsecs!==void 0?e.nsecs:lt+1,y=f-ct+(w-lt)/1e4;if(y<0&&e.clockseq===void 0&&(s=s+1&16383),(y<0||f>ct)&&e.nsecs===void 0&&(w=0),w>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");ct=f,lt=w,at=s,f+=122192928e5;let l=((f&268435455)*1e4+w)%4294967296;i[n++]=l>>>24&255,i[n++]=l>>>16&255,i[n++]=l>>>8&255,i[n++]=l&255;let x=f/4294967296*1e4&268435455;i[n++]=x>>>8&255,i[n++]=x&255,i[n++]=x>>>24&15|16,i[n++]=x>>>16&255,i[n++]=s>>>8|128,i[n++]=s&255;for(let v=0;v<6;++v)i[n+v]=u[v];return t||he(i)}var Pr,at,ct,lt,Rr,Gr=V(()=>{ot();Oe();ct=0,lt=0;Rr=ji});function Ni(e){if(!ue(e))throw TypeError("Invalid UUID");let t,r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=t&255,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=t&255,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=t&255,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=t&255,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=t&255,r}var Te,dt=V(()=>{we();Te=Ni});function Mi(e){e=unescape(encodeURIComponent(e));let t=[];for(let r=0;r{Oe();dt();Ai="6ba7b810-9dad-11d1-80b4-00c04fd430c8",ki="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});function Di(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Jr.default.createHash("md5").update(e).digest()}var Jr,Zr,Vr=V(()=>{Jr=F(oe("crypto"));Zr=Di});var Ui,Qr,Xr=V(()=>{ht();Vr();Ui=xe("v3",48,Zr),Qr=Ui});var Kr,pt,en=V(()=>{Kr=F(oe("crypto")),pt={randomUUID:Kr.default.randomUUID}});function Ti(e,t,r){if(pt.randomUUID&&!t&&!e)return pt.randomUUID();e=e||{};let n=e.random||(e.rng||be)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){r=r||0;for(let i=0;i<16;++i)t[r+i]=n[i];return t}return he(n)}var tn,rn=V(()=>{en();ot();Oe();tn=Ti});function Yi(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),nn.default.createHash("sha1").update(e).digest()}var nn,un,sn=V(()=>{nn=F(oe("crypto"));un=Yi});var Ci,fn,on=V(()=>{ht();sn();Ci=xe("v5",80,un),fn=Ci});var an,cn=V(()=>{an="00000000-0000-0000-0000-000000000000"});function Ei(e){if(!ue(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var ln,dn=V(()=>{we();ln=Ei});var hn={};mt(hn,{NIL:()=>an,parse:()=>Te,stringify:()=>Lr,v1:()=>Rr,v3:()=>Qr,v4:()=>tn,v5:()=>fn,validate:()=>ue,version:()=>ln});var pn=V(()=>{Gr();Xr();rn();on();cn();dn();we();Oe();dt()});var yn=T((Xu,mn)=>{var qi=(pn(),gt(hn)),Ii=mn.exports;Ii.uuid=function(){return qi.v4()}});var Bi={};mt(Bi,{default:()=>Hi});var X=F(vt()),Mt=F($t()),At=F(bt()),kt=F(wt()),Dt=F(Ot()),Ut=F(xt()),Tt=F(St()),Yt=F(jt()),Ct=F(Nt());X.default.extend(Mt.default);X.default.extend(At.default);X.default.extend(kt.default);X.default.extend(Dt.default);X.default.extend(Ut.default);X.default.extend(Tt.default);X.default.extend(Yt.default);X.default.extend(Ct.default);function ae(e){return typeof e=="object"&&typeof e.hash=="object"}function Qe(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}function Xe(e,t,r){if(ae(e))return Xe({},t,e);if(ae(t))return Xe(e,r,t);let n=Qe(e)?e.context:{};r=r||{},ae(r)||(t=Object.assign({},t,r)),ae(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return Qe(e)||(i=Object.assign({},e,i)),Qe(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}function Ke(e,t,r){return ae(t)&&(r=t,t=null),ae(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}function Et(e,t,r){let n=Ke(e,t,r),i={lang:"en",date:new Date(n.str)},u=Xe(this,i,{});X.default.locale(u.lang||u.language)}var qt=(e,t,r)=>{let n=Ke(e,t,r);if(n.str==null&&n.pattern==null)return X.default.locale("en"),(0,X.default)().format("MMMM DD, YYYY");Et(n.str,n.pattern,n.options);let i=(0,X.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(X.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},It=(e,t,r)=>{let n=Ke(e,t);Et(n.str,n.pattern);let i=X.default.duration(n.str,n.pattern);return r&&!ae(r)?i.format(r):i.humanize()};var gn=F(Kt()),vn=F(ke()),$n=F(cr()),bn=F(dr()),wn=F(mr()),On=F(Mr()),xn=F(Ir()),Sn=F(Fr()),jn=F(yn()),Wi={math:gn.default,array:vn.default,number:$n.default,url:bn.default,string:wn.default,comparison:On.default,object:xn.default,regex:Sn.default,uuid:jn.default},_i=["sortBy"],Fi={date:qt,duration:It},ne;function Nn(){if(ne)return ne;ne={};for(let e of Object.values(Wi))for(let[t,r]of Object.entries(e))ne[t]=(...n)=>r(...n,{});ne={...ne,addedHelpers:Fi};for(let e of _i)delete ne[e];return Object.freeze(ne),ne}var Hi={...Nn(),stripProtocol:helpersStripProtocol};return gt(Bi);})(); +"use strict";var helpers=(()=>{var Mn=Object.create;var je=Object.defineProperty;var An=Object.getOwnPropertyDescriptor;var kn=Object.getOwnPropertyNames;var Dn=Object.getPrototypeOf,Un=Object.prototype.hasOwnProperty;var oe=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var V=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),mt=(e,t)=>{for(var r in t)je(e,r,{get:t[r],enumerable:!0})},yt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of kn(t))!Un.call(e,i)&&i!==r&&je(e,i,{get:()=>t[i],enumerable:!(n=An(t,i))||n.enumerable});return e};var F=(e,t,r)=>(r=e!=null?Mn(Dn(e)):{},yt(t||!e||!e.__esModule?je(r,"default",{value:e,enumerable:!0}):r,e)),gt=e=>yt(je({},"__esModule",{value:!0}),e);var vt=T((Ye,Ce)=>{(function(e,t){typeof Ye=="object"&&typeof Ce<"u"?Ce.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(Ye,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",u="minute",s="hour",f="day",w="week",y="month",l="quarter",x="year",v="date",a="Invalid Date",U=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,q=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,I={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function($){var h=["th","st","nd","rd"],c=$%100;return"["+$+(h[(c-20)%10]||h[c]||h[0])+"]"}},C=function($,h,c){var b=String($);return!b||b.length>=h?$:""+Array(h+1-b.length).join(c)+$},H={s:C,z:function($){var h=-$.utcOffset(),c=Math.abs(h),b=Math.floor(c/60),d=c%60;return(h<=0?"+":"-")+C(b,2,"0")+":"+C(d,2,"0")},m:function $(h,c){if(h.date()1)return $(M[0])}else{var W=h.name;S[W]=h,d=W}return!b&&d&&(Y=d),d||!b&&Y},j=function($,h){if(o($))return $.clone();var c=typeof h=="object"?h:{};return c.date=$,c.args=arguments,new z(c)},O=H;O.l=D,O.i=o,O.w=function($,h){return j($,{locale:h.$L,utc:h.$u,x:h.$x,$offset:h.$offset})};var z=function(){function $(c){this.$L=D(c.locale,null,!0),this.parse(c),this.$x=this.$x||c.x||{},this[p]=!0}var h=$.prototype;return h.parse=function(c){this.$d=function(b){var d=b.date,N=b.utc;if(d===null)return new Date(NaN);if(O.u(d))return new Date;if(d instanceof Date)return new Date(d);if(typeof d=="string"&&!/Z$/i.test(d)){var M=d.match(U);if(M){var W=M[2]-1||0,B=(M[7]||"0").substring(0,3);return N?new Date(Date.UTC(M[1],W,M[3]||1,M[4]||0,M[5]||0,M[6]||0,B)):new Date(M[1],W,M[3]||1,M[4]||0,M[5]||0,M[6]||0,B)}}return new Date(d)}(c),this.init()},h.init=function(){var c=this.$d;this.$y=c.getFullYear(),this.$M=c.getMonth(),this.$D=c.getDate(),this.$W=c.getDay(),this.$H=c.getHours(),this.$m=c.getMinutes(),this.$s=c.getSeconds(),this.$ms=c.getMilliseconds()},h.$utils=function(){return O},h.isValid=function(){return this.$d.toString()!==a},h.isSame=function(c,b){var d=j(c);return this.startOf(b)<=d&&d<=this.endOf(b)},h.isAfter=function(c,b){return j(c){(function(e,t){typeof Ee=="object"&&typeof qe<"u"?qe.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_duration=t()})(Ee,function(){"use strict";var e,t,r=1e3,n=6e4,i=36e5,u=864e5,s=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,f=31536e6,w=2628e6,y=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,l={years:f,months:w,days:u,hours:i,minutes:n,seconds:r,milliseconds:1,weeks:6048e5},x=function(S){return S instanceof H},v=function(S,p,o){return new H(S,o,p.$l)},a=function(S){return t.p(S)+"s"},U=function(S){return S<0},q=function(S){return U(S)?Math.ceil(S):Math.floor(S)},I=function(S){return Math.abs(S)},C=function(S,p){return S?U(S)?{negative:!0,format:""+I(S)+p}:{negative:!1,format:""+S+p}:{negative:!1,format:""}},H=function(){function S(o,D,j){var O=this;if(this.$d={},this.$l=j,o===void 0&&(this.$ms=0,this.parseFromMilliseconds()),D)return v(o*l[a(D)],this);if(typeof o=="number")return this.$ms=o,this.parseFromMilliseconds(),this;if(typeof o=="object")return Object.keys(o).forEach(function($){O.$d[a($)]=o[$]}),this.calMilliseconds(),this;if(typeof o=="string"){var z=o.match(y);if(z){var J=z.slice(2).map(function($){return $!=null?Number($):0});return this.$d.years=J[0],this.$d.months=J[1],this.$d.weeks=J[2],this.$d.days=J[3],this.$d.hours=J[4],this.$d.minutes=J[5],this.$d.seconds=J[6],this.calMilliseconds(),this}}return this}var p=S.prototype;return p.calMilliseconds=function(){var o=this;this.$ms=Object.keys(this.$d).reduce(function(D,j){return D+(o.$d[j]||0)*l[j]},0)},p.parseFromMilliseconds=function(){var o=this.$ms;this.$d.years=q(o/f),o%=f,this.$d.months=q(o/w),o%=w,this.$d.days=q(o/u),o%=u,this.$d.hours=q(o/i),o%=i,this.$d.minutes=q(o/n),o%=n,this.$d.seconds=q(o/r),o%=r,this.$d.milliseconds=o},p.toISOString=function(){var o=C(this.$d.years,"Y"),D=C(this.$d.months,"M"),j=+this.$d.days||0;this.$d.weeks&&(j+=7*this.$d.weeks);var O=C(j,"D"),z=C(this.$d.hours,"H"),J=C(this.$d.minutes,"M"),$=this.$d.seconds||0;this.$d.milliseconds&&($+=this.$d.milliseconds/1e3,$=Math.round(1e3*$)/1e3);var h=C($,"S"),c=o.negative||D.negative||O.negative||z.negative||J.negative||h.negative,b=z.format||J.format||h.format?"T":"",d=(c?"-":"")+"P"+o.format+D.format+O.format+b+z.format+J.format+h.format;return d==="P"||d==="-P"?"P0D":d},p.toJSON=function(){return this.toISOString()},p.format=function(o){var D=o||"YYYY-MM-DDTHH:mm:ss",j={Y:this.$d.years,YY:t.s(this.$d.years,2,"0"),YYYY:t.s(this.$d.years,4,"0"),M:this.$d.months,MM:t.s(this.$d.months,2,"0"),D:this.$d.days,DD:t.s(this.$d.days,2,"0"),H:this.$d.hours,HH:t.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:t.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:t.s(this.$d.seconds,2,"0"),SSS:t.s(this.$d.milliseconds,3,"0")};return D.replace(s,function(O,z){return z||String(j[O])})},p.as=function(o){return this.$ms/l[a(o)]},p.get=function(o){var D=this.$ms,j=a(o);return j==="milliseconds"?D%=1e3:D=j==="weeks"?q(D/l[j]):this.$d[j],D||0},p.add=function(o,D,j){var O;return O=D?o*l[a(D)]:x(o)?o.$ms:v(o,this).$ms,v(this.$ms+O*(j?-1:1),this)},p.subtract=function(o,D){return this.add(o,D,!0)},p.locale=function(o){var D=this.clone();return D.$l=o,D},p.clone=function(){return v(this.$ms,this)},p.humanize=function(o){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!o)},p.valueOf=function(){return this.asMilliseconds()},p.milliseconds=function(){return this.get("milliseconds")},p.asMilliseconds=function(){return this.as("milliseconds")},p.seconds=function(){return this.get("seconds")},p.asSeconds=function(){return this.as("seconds")},p.minutes=function(){return this.get("minutes")},p.asMinutes=function(){return this.as("minutes")},p.hours=function(){return this.get("hours")},p.asHours=function(){return this.as("hours")},p.days=function(){return this.get("days")},p.asDays=function(){return this.as("days")},p.weeks=function(){return this.get("weeks")},p.asWeeks=function(){return this.as("weeks")},p.months=function(){return this.get("months")},p.asMonths=function(){return this.as("months")},p.years=function(){return this.get("years")},p.asYears=function(){return this.as("years")},S}(),Y=function(S,p,o){return S.add(p.years()*o,"y").add(p.months()*o,"M").add(p.days()*o,"d").add(p.hours()*o,"h").add(p.minutes()*o,"m").add(p.seconds()*o,"s").add(p.milliseconds()*o,"ms")};return function(S,p,o){e=o,t=o().$utils(),o.duration=function(O,z){var J=o.locale();return v(O,{$l:J},z)},o.isDuration=x;var D=p.prototype.add,j=p.prototype.subtract;p.prototype.add=function(O,z){return x(O)?Y(this,O,1):D.bind(this)(O,z)},p.prototype.subtract=function(O,z){return x(O)?Y(this,O,-1):j.bind(this)(O,z)}}})});var bt=T((Ie,We)=>{(function(e,t){typeof Ie=="object"&&typeof We<"u"?We.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_advancedFormat=t()})(Ie,function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(i){var u=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var f=this.$utils(),w=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(y){switch(y){case"Q":return Math.ceil((u.$M+1)/3);case"Do":return s.ordinal(u.$D);case"gggg":return u.weekYear();case"GGGG":return u.isoWeekYear();case"wo":return s.ordinal(u.week(),"W");case"w":case"ww":return f.s(u.week(),y==="w"?1:2,"0");case"W":case"WW":return f.s(u.isoWeek(),y==="W"?1:2,"0");case"k":case"kk":return f.s(String(u.$H===0?24:u.$H),y==="k"?1:2,"0");case"X":return Math.floor(u.$d.getTime()/1e3);case"x":return u.$d.getTime();case"z":return"["+u.offsetName()+"]";case"zzz":return"["+u.offsetName("long")+"]";default:return y}});return n.bind(this)(w)}}})});var wt=T((_e,Fe)=>{(function(e,t){typeof _e=="object"&&typeof Fe<"u"?Fe.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_isoWeek=t()})(_e,function(){"use strict";var e="day";return function(t,r,n){var i=function(f){return f.add(4-f.isoWeekday(),e)},u=r.prototype;u.isoWeekYear=function(){return i(this).year()},u.isoWeek=function(f){if(!this.$utils().u(f))return this.add(7*(f-this.isoWeek()),e);var w,y,l,x,v=i(this),a=(w=this.isoWeekYear(),y=this.$u,l=(y?n.utc:n)().year(w).startOf("year"),x=4-l.isoWeekday(),l.isoWeekday()>4&&(x+=7),l.add(x,e));return v.diff(a,"week")+1},u.isoWeekday=function(f){return this.$utils().u(f)?this.day()||7:this.day(this.day()%7?f:f-7)};var s=u.startOf;u.startOf=function(f,w){var y=this.$utils(),l=!!y.u(w)||w;return y.p(f)==="isoweek"?l?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(f,w)}}})});var Ot=T((He,Be)=>{(function(e,t){typeof He=="object"&&typeof Be<"u"?Be.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_weekYear=t()})(He,function(){"use strict";return function(e,t){t.prototype.weekYear=function(){var r=this.month(),n=this.week(),i=this.year();return n===1&&r===11?i+1:r===0&&n>=52?i-1:i}}})});var xt=T((ze,Le)=>{(function(e,t){typeof ze=="object"&&typeof Le<"u"?Le.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_weekOfYear=t()})(ze,function(){"use strict";var e="week",t="year";return function(r,n,i){var u=n.prototype;u.week=function(s){if(s===void 0&&(s=null),s!==null)return this.add(7*(s-this.week()),"day");var f=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var w=i(this).startOf(t).add(1,t).date(f),y=i(this).endOf(e);if(w.isBefore(y))return 1}var l=i(this).startOf(t).date(f).startOf(e).subtract(1,"millisecond"),x=this.diff(l,e,!0);return x<0?i(this).startOf("week").week():Math.ceil(x)},u.weeks=function(s){return s===void 0&&(s=null),this.week(s)}}})});var St=T((Pe,Re)=>{(function(e,t){typeof Pe=="object"&&typeof Re<"u"?Re.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_relativeTime=t()})(Pe,function(){"use strict";return function(e,t,r){e=e||{};var n=t.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function u(f,w,y,l){return n.fromToBase(f,w,y,l)}r.en.relativeTime=i,n.fromToBase=function(f,w,y,l,x){for(var v,a,U,q=y.$locale().relativeTime||i,I=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],C=I.length,H=0;H0,S<=Y.r||!Y.r){S<=1&&H>0&&(Y=I[H-1]);var p=q[Y.l];x&&(S=x(""+S)),a=typeof p=="string"?p.replace("%d",S):p(S,w,Y.l,U);break}}if(w)return a;var o=U?q.future:q.past;return typeof o=="function"?o(a):o.replace("%s",a)},n.to=function(f,w){return u(f,w,this,!0)},n.from=function(f,w){return u(f,w,this)};var s=function(f){return f.$u?r.utc():r()};n.toNow=function(f){return this.to(s(this),f)},n.fromNow=function(f){return this.from(s(this),f)}}})});var jt=T((Ge,Je)=>{(function(e,t){typeof Ge=="object"&&typeof Je<"u"?Je.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_utc=t()})(Ge,function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,r=/([+-]|\d\d)/g;return function(n,i,u){var s=i.prototype;u.utc=function(a){var U={date:a,utc:!0,args:arguments};return new i(U)},s.utc=function(a){var U=u(this.toDate(),{locale:this.$L,utc:!0});return a?U.add(this.utcOffset(),e):U},s.local=function(){return u(this.toDate(),{locale:this.$L,utc:!1})};var f=s.parse;s.parse=function(a){a.utc&&(this.$u=!0),this.$utils().u(a.$offset)||(this.$offset=a.$offset),f.call(this,a)};var w=s.init;s.init=function(){if(this.$u){var a=this.$d;this.$y=a.getUTCFullYear(),this.$M=a.getUTCMonth(),this.$D=a.getUTCDate(),this.$W=a.getUTCDay(),this.$H=a.getUTCHours(),this.$m=a.getUTCMinutes(),this.$s=a.getUTCSeconds(),this.$ms=a.getUTCMilliseconds()}else w.call(this)};var y=s.utcOffset;s.utcOffset=function(a,U){var q=this.$utils().u;if(q(a))return this.$u?0:q(this.$offset)?y.call(this):this.$offset;if(typeof a=="string"&&(a=function(Y){Y===void 0&&(Y="");var S=Y.match(t);if(!S)return null;var p=(""+S[0]).match(r)||["-",0,0],o=p[0],D=60*+p[1]+ +p[2];return D===0?0:o==="+"?D:-D}(a),a===null))return this;var I=Math.abs(a)<=16?60*a:a,C=this;if(U)return C.$offset=I,C.$u=a===0,C;if(a!==0){var H=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(C=this.local().add(I+H,e)).$offset=I,C.$x.$localOffset=H}else C=this.utc();return C};var l=s.format;s.format=function(a){var U=a||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return l.call(this,U)},s.valueOf=function(){var a=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*a},s.isUTC=function(){return!!this.$u},s.toISOString=function(){return this.toDate().toISOString()},s.toString=function(){return this.toDate().toUTCString()};var x=s.toDate;s.toDate=function(a){return a==="s"&&this.$offset?u(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():x.call(this)};var v=s.diff;s.diff=function(a,U,q){if(a&&this.$u===a.$u)return v.call(this,a,U,q);var I=this.local(),C=u(a).local();return v.call(I,C,U,q)}}})});var Nt=T((Ze,Ve)=>{(function(e,t){typeof Ze=="object"&&typeof Ve<"u"?Ve.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_timezone=t()})(Ze,function(){"use strict";var e={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(r,n,i){var u,s=function(l,x,v){v===void 0&&(v={});var a=new Date(l),U=function(q,I){I===void 0&&(I={});var C=I.timeZoneName||"short",H=q+"|"+C,Y=t[H];return Y||(Y=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:q,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:C}),t[H]=Y),Y}(x,v);return U.formatToParts(a)},f=function(l,x){for(var v=s(l,x),a=[],U=0;U=0&&(a[H]=parseInt(C,10))}var Y=a[3],S=Y===24?0:Y,p=a[0]+"-"+a[1]+"-"+a[2]+" "+S+":"+a[4]+":"+a[5]+":000",o=+l;return(i.utc(p).valueOf()-(o-=o%1e3))/6e4},w=n.prototype;w.tz=function(l,x){l===void 0&&(l=u);var v=this.utcOffset(),a=this.toDate(),U=a.toLocaleString("en-US",{timeZone:l}),q=Math.round((a-new Date(U))/1e3/60),I=i(U,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(a.getTimezoneOffset()/15)-q,!0);if(x){var C=I.utcOffset();I=I.add(v-C,"minute")}return I.$x.$timezone=l,I},w.offsetName=function(l){var x=this.$x.$timezone||i.tz.guess(),v=s(this.valueOf(),x,{timeZoneName:l}).find(function(a){return a.type.toLowerCase()==="timezonename"});return v&&v.value};var y=w.startOf;w.startOf=function(l,x){if(!this.$x||!this.$x.$timezone)return y.call(this,l,x);var v=i(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return y.call(v,l,x).tz(this.$x.$timezone,!0)},i.tz=function(l,x,v){var a=v&&x,U=v||x||u,q=f(+i(),U);if(typeof l!="string")return i(l).tz(U);var I=function(S,p,o){var D=S-60*p*1e3,j=f(D,o);if(p===j)return[D,p];var O=f(D-=60*(j-p)*1e3,o);return j===O?[D,j]:[S-60*Math.min(j,O)*1e3,Math.max(j,O)]}(i.utc(l,a).valueOf(),q,U),C=I[0],H=I[1],Y=i(C).utcOffset(H);return Y.$x.$timezone=U,Y},i.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},i.tz.setDefault=function(l){u=l}}})});var et=T((Pi,_t)=>{_t.exports=function(e){return e!=null&&(Wt(e)||Tn(e)||!!e._isBuffer)};function Wt(e){return!!e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function Tn(e){return typeof e.readFloatLE=="function"&&typeof e.slice=="function"&&Wt(e.slice(0,0))}});var Ht=T((Ri,Ft)=>{var Yn=et(),Cn=Object.prototype.toString;Ft.exports=function(t){if(typeof t>"u")return"undefined";if(t===null)return"null";if(t===!0||t===!1||t instanceof Boolean)return"boolean";if(typeof t=="string"||t instanceof String)return"string";if(typeof t=="number"||t instanceof Number)return"number";if(typeof t=="function"||t instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(t))return"array";if(t instanceof RegExp)return"regexp";if(t instanceof Date)return"date";var r=Cn.call(t);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":Yn(t)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}});var Pt=T((Gi,Lt)=>{"use strict";var Bt=Ht(),zt={arguments:"an arguments object",array:"an array",boolean:"a boolean",buffer:"a buffer",date:"a date",error:"an error",float32array:"a float32array",float64array:"a float64array",function:"a function",int16array:"an int16array",int32array:"an int32array",int8array:"an int8array",map:"a Map",null:"null",number:"a number",object:"an object",regexp:"a regular expression",set:"a Set",string:"a string",symbol:"a symbol",uint16array:"an uint16array",uint32array:"an uint32array",uint8array:"an uint8array",uint8clampedarray:"an uint8clampedarray",undefined:"undefined",weakmap:"a WeakMap",weakset:"a WeakSet"};function tt(e){return zt[Bt(e)]}tt.types=zt;tt.typeOf=Bt;Lt.exports=tt});var Ne=T((Ji,Gt)=>{var En=Object.prototype.toString;Gt.exports=function(t){if(t===void 0)return"undefined";if(t===null)return"null";var r=typeof t;if(r==="boolean")return"boolean";if(r==="string")return"string";if(r==="number")return"number";if(r==="symbol")return"symbol";if(r==="function")return Fn(t)?"generatorfunction":"function";if(qn(t))return"array";if(zn(t))return"buffer";if(Bn(t))return"arguments";if(Wn(t))return"date";if(In(t))return"error";if(_n(t))return"regexp";switch(Rt(t)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(Hn(t))return"generator";switch(r=En.call(t),r){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return r.slice(8,-1).toLowerCase().replace(/\s/g,"")};function Rt(e){return typeof e.constructor=="function"?e.constructor.name:null}function qn(e){return Array.isArray?Array.isArray(e):e instanceof Array}function In(e){return e instanceof Error||typeof e.message=="string"&&e.constructor&&typeof e.constructor.stackTraceLimit=="number"}function Wn(e){return e instanceof Date?!0:typeof e.toDateString=="function"&&typeof e.getDate=="function"&&typeof e.setDate=="function"}function _n(e){return e instanceof RegExp?!0:typeof e.flags=="string"&&typeof e.ignoreCase=="boolean"&&typeof e.multiline=="boolean"&&typeof e.global=="boolean"}function Fn(e,t){return Rt(e)==="GeneratorFunction"}function Hn(e){return typeof e.throw=="function"&&typeof e.return=="function"&&typeof e.next=="function"}function Bn(e){try{if(typeof e.length=="number"&&typeof e.callee=="function")return!0}catch(t){if(t.message.indexOf("callee")!==-1)return!0}return!1}function zn(e){return e.constructor&&typeof e.constructor.isBuffer=="function"?e.constructor.isBuffer(e):!1}});var te=T((Vt,Qt)=>{"use strict";var Ln=oe("util"),Jt=Pt(),Pn=Ne(),m=Vt=Qt.exports;m.extend=Zt;m.indexOf=Qn;m.escapeExpression=Xn;m.isEmpty=ri;m.createFrame=Kn;m.blockParams=ei;m.appendContextPath=ti;var Rn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},Gn=/[&<>"'`=]/g,Jn=/[&<>"'`=]/;function Zn(e){return Rn[e]}function Zt(e){for(var t=1;t{"use strict";var ni=te();me.contains=function(e,t,r){return e==null||t==null||isNaN(e.length)?!1:e.indexOf(t,r)!==-1};me.chop=function(e){if(typeof e!="string")return"";var t=/^[-_.\W\s]+|[-_.\W\s]+$/g;return e.trim().replace(t,"")};me.changecase=function(e,t){if(typeof e!="string")return"";if(e.length===1)return e.toLowerCase();e=me.chop(e).toLowerCase(),typeof t!="function"&&(t=ni.identity);var r=/[-_.\W\s]+(\w|$)/g;return e.replace(r,function(n,i){return t(i)})};me.random=function(e,t){return e+Math.floor(Math.random()*(t-e+1))}});var Kt=T((Vi,Xt)=>{"use strict";var ii=Me(),Q=Xt.exports;Q.abs=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.abs(e)};Q.add=function(e,t){return!isNaN(e)&&!isNaN(t)?Number(e)+Number(t):typeof e=="string"&&typeof t=="string"?e+t:""};Q.avg=function(){let e=[].concat.apply([],arguments);return e.pop(),Q.sum(e)/e.length};Q.ceil=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.ceil(e)};Q.divide=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)/Number(t)};Q.floor=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.floor(e)};Q.minus=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)-Number(t)};Q.modulo=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)%Number(t)};Q.multiply=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)*Number(t)};Q.plus=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)+Number(t)};Q.random=function(e,t){if(isNaN(e))throw new TypeError("expected minimum to be a number");if(isNaN(t))throw new TypeError("expected maximum to be a number");return ii.random(e,t)};Q.remainder=function(e,t){return e%t};Q.round=function(e){if(isNaN(e))throw new TypeError("expected a number");return Math.round(e)};Q.subtract=function(e,t){if(isNaN(e))throw new TypeError("expected the first argument to be a number");if(isNaN(t))throw new TypeError("expected the second argument to be a number");return Number(e)-Number(t)};Q.sum=function(){for(var e=[].concat.apply([],arguments),t=e.length,r=0;t--;)isNaN(e[t])||(r+=Number(e[t]));return r}});var tr=T((Qi,er)=>{"use strict";er.exports=function(t){return t!=null&&typeof t=="object"&&Array.isArray(t)===!1}});var Ae=T((Xi,ur)=>{var ir=tr();ur.exports=function(e,t,r){if(ir(r)||(r={default:r}),!nr(e))return typeof r.default<"u"?r.default:e;typeof t=="number"&&(t=String(t));let n=Array.isArray(t),i=typeof t=="string",u=r.separator||".",s=r.joinChar||(typeof u=="string"?u:".");if(!i&&!n)return e;if(i&&t in e)return it(t,e,r)?e[t]:r.default;let f=n?t:ui(t,u,r),w=f.length,y=0;do{let l=f[y];for(typeof l=="number"&&(l=String(l));l&&l.slice(-1)==="\\";)l=rr([l.slice(0,-1),f[++y]||""],s,r);if(l in e){if(!it(l,e,r))return r.default;e=e[l]}else{let x=!1,v=y+1;for(;v{"use strict";sr.exports=function(t){if(typeof t!="object")throw new TypeError("createFrame expects data to be an object");var r=Object.assign({},t);if(r._parent=t,r.extend=function(s){Object.assign(this,s)},arguments.length>1)for(var n=[].slice.call(arguments,1),i=n.length,u=-1;++u{"use strict";var g=te(),E=fr.exports,ce=Ae(),si=ut();E.after=function(e,t){return g.isUndefined(e)?"":(e=g.result(e),Array.isArray(e)?e.slice(t):"")};E.arrayify=function(e){return g.isUndefined(e)?[]:e?Array.isArray(e)?e:[e]:[]};E.before=function(e,t){return g.isUndefined(e)?"":(e=g.result(e),Array.isArray(e)?e.slice(0,t-1):"")};E.eachIndex=function(e,t){var r="";if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e))for(var n=0;n0){for(var s=0;s-1,this,r):"")};E.isArray=function(e){return Array.isArray(e)};E.itemAt=function(e,t){if(g.isUndefined(e))return null;if(e=g.result(e),Array.isArray(e)){if(t=isNaN(t)?0:+t,t<0)return e[e.length+t];if(ti[t]>u[t]?1:-1)}return""};E.withAfter=function(e,t,r){if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e)){e=e.slice(t);for(var n="",i=0;i0){for(var i=[],u=0;u0&&u%t===0&&(n+=r.fn(i),i=[]),i.push(e[u]);n+=r.fn(i)}return n};E.withLast=function(e,t,r){if(g.isUndefined(e))return"";if(e=g.result(e),Array.isArray(e)){if(g.isUndefined(t)||(t=parseFloat(g.result(t))),g.isUndefined(t))return r=t,r.fn(e[e.length-1]);e=e.slice(-t);for(var n=e.length,i=-1,u="";++iy?1:w{"use strict";var or=te(),re=ar.exports;re.bytes=function(e,t,r){if(e==null||isNaN(e)&&(e=e.length,!e))return"0 B";isNaN(t)&&(t=2);var n=["B","kB","MB","GB","TB","PB","EB","ZB","YB"];t=Math.pow(10,t),e=Number(e);for(var i=n.length-1;i-->=0;){var u=Math.pow(10,i*3);if(u<=e+1){e=Math.round(e*t/u)/t,e+=" "+n[i];break}}return e};re.addCommas=function(e){return e.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")};re.phoneNumber=function(e){return e=e.toString(),"("+e.substr(0,3)+") "+e.substr(3,3)+"-"+e.substr(6,4)};re.toAbbr=function(e,t){isNaN(e)&&(e=0),or.isUndefined(t)&&(t=2),e=Number(e),t=Math.pow(10,t);for(var r=["k","m","b","t","q"],n=r.length-1;n>=0;){var i=Math.pow(10,(n+1)*3);if(i<=e+1){e=Math.round(e*t/i)/t,e+=r[n];break}n--}return e};re.toExponential=function(e,t){return isNaN(e)&&(e=0),or.isUndefined(t)&&(t=0),Number(e).toExponential(t)};re.toFixed=function(e,t){return isNaN(e)&&(e=0),isNaN(t)&&(t=0),Number(e).toFixed(t)};re.toFloat=function(e){return parseFloat(e)};re.toInt=function(e){return parseInt(e,10)};re.toPrecision=function(e,t){return isNaN(e)&&(e=0),isNaN(t)&&(t=1),Number(e).toPrecision(t)}});var dr=T((ru,lr)=>{"use strict";var st=oe("url"),ve=te(),fi=oe("querystring"),le=lr.exports;le.encodeURI=function(e){if(ve.isString(e))return encodeURIComponent(e)};le.escape=function(e){if(ve.isString(e))return fi.escape(e)};le.decodeURI=function(e){if(ve.isString(e))return decodeURIComponent(e)};le.urlResolve=function(e,t){return st.resolve(e,t)};le.urlParse=function(e){return st.parse(e)};le.stripQuerystring=function(e){if(ve.isString(e))return e.split("?")[0]};le.stripProtocol=function(e){if(ve.isString(e)){var t=st.parse(e);return t.protocol="",t.format()}}});var mr=T((hr,pr)=>{"use strict";var P=te(),de=Me(),A=pr.exports;A.append=function(e,t){return typeof e=="string"&&typeof t=="string"?e+t:e};A.camelcase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return t.toUpperCase()})};A.capitalize=function(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)};A.capitalizeAll=function(e){if(typeof e!="string")return"";if(P.isString(e))return e.replace(/\w\S*/g,function(t){return A.capitalize(t)})};A.center=function(e,t){if(typeof e!="string")return"";for(var r="",n=0;n-1;)i++,n+=r;return i};A.pascalcase=function(e){return typeof e!="string"?"":(e=de.changecase(e,function(t){return t.toUpperCase()}),e.charAt(0).toUpperCase()+e.slice(1))};A.pathcase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return"/"+t})};A.plusify=function(e,t){return typeof e!="string"?"":(P.isString(t)||(t=" "),e.split(t).join("+"))};A.prepend=function(e,t){return typeof e=="string"&&typeof t=="string"?t+e:e};A.raw=function(e){var t=e.fn(),r=P.options(this,e);if(r.escape!==!1)for(var n=0;(n=t.indexOf("{{",n))!==-1;)t[n-1]!=="\\"&&(t=t.slice(0,n)+"\\"+t.slice(n)),n+=3;return t};A.remove=function(e,t){return typeof e!="string"?"":P.isString(t)?e.split(t).join(""):e};A.removeFirst=function(e,t){return typeof e!="string"?"":P.isString(t)?e.replace(t,""):e};A.replace=function(e,t,r){return typeof e!="string"?"":P.isString(t)?(P.isString(r)||(r=""),e.split(t).join(r)):e};A.replaceFirst=function(e,t,r){return typeof e!="string"?"":P.isString(t)?(P.isString(r)||(r=""),e.replace(t,r)):e};A.reverse=ke().reverse;A.sentence=function(e){return typeof e!="string"?"":e.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})};A.snakecase=function(e){return typeof e!="string"?"":de.changecase(e,function(t){return"_"+t})};A.split=function(e,t){return typeof e!="string"?"":(P.isString(t)||(t=","),e.split(t))};A.startsWith=function(e,t,r){var n=[].slice.call(arguments);return r=n.pop(),P.isString(t)&&t.indexOf(e)===0?r.fn(this):typeof r.inverse=="function"?r.inverse(this):""};A.titleize=function(e){if(typeof e!="string")return"";for(var t=e.replace(/[- _]+/g," "),r=t.split(" "),n=r.length,i=[],u=0;n--;){var s=r[u++];i.push(hr.capitalize(s))}return i.join(" ")};A.trim=function(e){return typeof e=="string"?e.trim():""};A.trimLeft=function(e){if(P.isString(e))return e.replace(/^\s+/,"")};A.trimRight=function(e){if(P.isString(e))return e.replace(/\s+$/,"")};A.truncate=function(e,t,r){if(P.isString(e))return typeof r!="string"&&(r=""),e.length>t?e.slice(0,t-r.length)+r:e};A.truncateWords=function(e,t,r){if(P.isString(e)&&!isNaN(t)){typeof r!="string"&&(r="\u2026");var n=Number(t),i=e.split(/[ \t]/);if(n>=i.length)return e;i=i.slice(0,n);var u=i.join(" ").trim();return u+r}};A.upcase=function(){return A.uppercase.apply(this,arguments)};A.uppercase=function(e){return P.isObject(e)&&e.fn?e.fn(this).toUpperCase():typeof e!="string"?"":e.toUpperCase()}});var gr=T((nu,yr)=>{"use strict";var oi=Ne();yr.exports=function e(t){switch(oi(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return t.source!=="(?:)"&&t.source!=="";case"buffer":return t.toString()!=="";case"error":return t.message!=="";case"string":case"arguments":return t.length!==0;case"file":case"map":case"set":return t.size!==0;case"array":case"object":for(let r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}}});var $r=T((iu,vr)=>{"use strict";var ai=Ae(),ci=gr();vr.exports=function(e,t,r){return li(e)&&(typeof t=="string"||Array.isArray(t))?ci(ai(e,t,r)):!1};function li(e){return e!=null&&(typeof e=="object"||typeof e=="function"||Array.isArray(e))}});var wr=T((uu,br)=>{"use strict";function ft(e,t){if(!e)return!0;let r=t||ft.keywords;Array.isArray(r)||(r=[r]);let n=typeof e=="string"?e.toLowerCase():null;for(let i of r)if(i===e||i===n)return!0;return!1}ft.keywords=["0","false","nada","nil","nay","nah","negative","no","none","nope","nul","null","nix","nyet","uh-uh","veto","zero"];br.exports=ft});var xr=T((su,Or)=>{"use strict";Or.exports=function(t){let r=Math.abs(t);if(isNaN(r))throw new TypeError("expected a number");if(!Number.isInteger(r))throw new Error("expected an integer");if(!Number.isSafeInteger(r))throw new Error("value exceeds maximum safe integer");return r%2===1}});var Mr=T((fu,Nr)=>{"use strict";var di=$r(),k=te(),hi=Me(),Sr=wr(),jr=xr(),_=Nr.exports;_.and=function(){for(var e=arguments.length-1,t=arguments[e],r=!0,n=0;n":i=e>r;break;case"<=":i=e<=r;break;case">=":i=e>=r;break;case"typeof":i=typeof e===r;break;default:throw new Error("helper {{compare}}: invalid operator: `"+t+"`")}return k.value(i,this,n)};_.contains=function(e,t,r,n){typeof r=="object"&&(n=r,r=void 0);var i=hi.contains(e,t,r);return k.value(i,this,n)};_.default=function(){for(var e=0;et,this,r)};_.gte=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e>=t,this,r)};_.has=function(e,t,r){return k.isOptions(e)&&(r=e,t=null,e=null),k.isOptions(t)&&(r=t,t=null),e===null?k.value(!1,this,r):arguments.length===2?k.value(di(this,e),this,r):(Array.isArray(e)||k.isString(e))&&k.isString(t)&&e.indexOf(t)>-1?k.fn(!0,this,r):k.isObject(e)&&k.isString(t)&&t in e?k.fn(!0,this,r):k.inverse(!1,this,r)};_.isFalsey=function(e,t){return k.value(Sr(e),this,t)};_.isTruthy=function(e,t){return k.value(!Sr(e),this,t)};_.ifEven=function(e,t){return k.value(!jr(e),this,t)};_.ifNth=function(e,t,r){var n=!isNaN(e)&&!isNaN(t)&&t%e===0;return k.value(n,this,r)};_.ifOdd=function(e,t){return k.value(jr(e),this,t)};_.is=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e==t,this,r)};_.isnt=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e!=t,this,r)};_.lt=function(e,t,r){return arguments.length===2&&(r=t,t=r.hash.compare),k.value(e=t,this,r)};_.unlessGteq=function(e,t,r){return k.isOptions(t)&&(r=t,t=r.hash.compare),k.value(et,this,r)}});var kr=T((ou,Ar)=>{var pi=et(),mi=Object.prototype.toString;Ar.exports=function(t){if(typeof t>"u")return"undefined";if(t===null)return"null";if(t===!0||t===!1||t instanceof Boolean)return"boolean";if(typeof t=="string"||t instanceof String)return"string";if(typeof t=="number"||t instanceof Number)return"number";if(typeof t=="function"||t instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(t))return"array";if(t instanceof RegExp)return"regexp";if(t instanceof Date)return"date";var r=mi.call(t);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":pi(t)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}});var Ur=T((au,Dr)=>{"use strict";var yi=kr();Dr.exports=function(t){var r=yi(t);if(r!=="number"&&r!=="string")return!1;var n=+t;return n-n+1>=0&&t!==""}});var Yr=T((cu,Tr)=>{"use strict";var gi=Ur();Tr.exports=function(t,r){if(!r)return t;if(!t)return{};for(var n=String(r).split(/[[.\]]/).filter(Boolean),i=n[n.length-1],u={};r=n.shift();)if(t=t[r],!t)return{};return gi(i)?[t]:(u[i]=t,u)}});var Ir=T((lu,qr)=>{"use strict";var vi=Object.hasOwnProperty,$e=te(),$i=ke(),R=qr.exports,bi=Ae(),Cr=Yr(),Er=ut();R.extend=function(){var e=[].slice.call(arguments),t={};$e.isOptions(e[e.length-1])&&(t=e.pop().hash,e.push(t));for(var r={},n=0;n{"use strict";var wi=te(),Wr=_r.exports,Oi=Ne();Wr.toRegex=function(e,t,r){var n=wi.options({},t,r);return new RegExp(e,n.flags)};Wr.test=function(e,t){if(typeof e!="string")return!1;if(Oi(t)!=="regexp")throw new TypeError("expected a regular expression");return t.test(e)}});function be(){return De>Ue.length-16&&(Hr.default.randomFillSync(Ue),De=0),Ue.slice(De,De+=16)}var Hr,Ue,De,ot=V(()=>{Hr=F(oe("crypto")),Ue=new Uint8Array(256),De=Ue.length});var Br,zr=V(()=>{Br=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function xi(e){return typeof e=="string"&&Br.test(e)}var ue,we=V(()=>{zr();ue=xi});function he(e,t=0){return G[e[t+0]]+G[e[t+1]]+G[e[t+2]]+G[e[t+3]]+"-"+G[e[t+4]]+G[e[t+5]]+"-"+G[e[t+6]]+G[e[t+7]]+"-"+G[e[t+8]]+G[e[t+9]]+"-"+G[e[t+10]]+G[e[t+11]]+G[e[t+12]]+G[e[t+13]]+G[e[t+14]]+G[e[t+15]]}function Si(e,t=0){let r=he(e,t);if(!ue(r))throw TypeError("Stringified UUID is invalid");return r}var G,Lr,Oe=V(()=>{we();G=[];for(let e=0;e<256;++e)G.push((e+256).toString(16).slice(1));Lr=Si});function ji(e,t,r){let n=t&&r||0,i=t||new Array(16);e=e||{};let u=e.node||Pr,s=e.clockseq!==void 0?e.clockseq:at;if(u==null||s==null){let v=e.random||(e.rng||be)();u==null&&(u=Pr=[v[0]|1,v[1],v[2],v[3],v[4],v[5]]),s==null&&(s=at=(v[6]<<8|v[7])&16383)}let f=e.msecs!==void 0?e.msecs:Date.now(),w=e.nsecs!==void 0?e.nsecs:lt+1,y=f-ct+(w-lt)/1e4;if(y<0&&e.clockseq===void 0&&(s=s+1&16383),(y<0||f>ct)&&e.nsecs===void 0&&(w=0),w>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");ct=f,lt=w,at=s,f+=122192928e5;let l=((f&268435455)*1e4+w)%4294967296;i[n++]=l>>>24&255,i[n++]=l>>>16&255,i[n++]=l>>>8&255,i[n++]=l&255;let x=f/4294967296*1e4&268435455;i[n++]=x>>>8&255,i[n++]=x&255,i[n++]=x>>>24&15|16,i[n++]=x>>>16&255,i[n++]=s>>>8|128,i[n++]=s&255;for(let v=0;v<6;++v)i[n+v]=u[v];return t||he(i)}var Pr,at,ct,lt,Rr,Gr=V(()=>{ot();Oe();ct=0,lt=0;Rr=ji});function Ni(e){if(!ue(e))throw TypeError("Invalid UUID");let t,r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=t&255,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=t&255,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=t&255,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=t&255,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=t&255,r}var Te,dt=V(()=>{we();Te=Ni});function Mi(e){e=unescape(encodeURIComponent(e));let t=[];for(let r=0;r{Oe();dt();Ai="6ba7b810-9dad-11d1-80b4-00c04fd430c8",ki="6ba7b811-9dad-11d1-80b4-00c04fd430c8"});function Di(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),Jr.default.createHash("md5").update(e).digest()}var Jr,Zr,Vr=V(()=>{Jr=F(oe("crypto"));Zr=Di});var Ui,Qr,Xr=V(()=>{ht();Vr();Ui=xe("v3",48,Zr),Qr=Ui});var Kr,pt,en=V(()=>{Kr=F(oe("crypto")),pt={randomUUID:Kr.default.randomUUID}});function Ti(e,t,r){if(pt.randomUUID&&!t&&!e)return pt.randomUUID();e=e||{};let n=e.random||(e.rng||be)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){r=r||0;for(let i=0;i<16;++i)t[r+i]=n[i];return t}return he(n)}var tn,rn=V(()=>{en();ot();Oe();tn=Ti});function Yi(e){return Array.isArray(e)?e=Buffer.from(e):typeof e=="string"&&(e=Buffer.from(e,"utf8")),nn.default.createHash("sha1").update(e).digest()}var nn,un,sn=V(()=>{nn=F(oe("crypto"));un=Yi});var Ci,fn,on=V(()=>{ht();sn();Ci=xe("v5",80,un),fn=Ci});var an,cn=V(()=>{an="00000000-0000-0000-0000-000000000000"});function Ei(e){if(!ue(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var ln,dn=V(()=>{we();ln=Ei});var hn={};mt(hn,{NIL:()=>an,parse:()=>Te,stringify:()=>Lr,v1:()=>Rr,v3:()=>Qr,v4:()=>tn,v5:()=>fn,validate:()=>ue,version:()=>ln});var pn=V(()=>{Gr();Xr();rn();on();cn();dn();we();Oe();dt()});var yn=T((Xu,mn)=>{var qi=(pn(),gt(hn)),Ii=mn.exports;Ii.uuid=function(){return qi.v4()}});var Bi={};mt(Bi,{default:()=>Hi});var X=F(vt()),Mt=F($t()),At=F(bt()),kt=F(wt()),Dt=F(Ot()),Ut=F(xt()),Tt=F(St()),Yt=F(jt()),Ct=F(Nt());X.default.extend(Mt.default);X.default.extend(At.default);X.default.extend(kt.default);X.default.extend(Dt.default);X.default.extend(Ut.default);X.default.extend(Tt.default);X.default.extend(Yt.default);X.default.extend(Ct.default);function ae(e){return typeof e=="object"&&typeof e.hash=="object"}function Qe(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}function Xe(e,t,r){if(ae(e))return Xe({},t,e);if(ae(t))return Xe(e,r,t);let n=Qe(e)?e.context:{};r=r||{},ae(r)||(t=Object.assign({},t,r)),ae(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return Qe(e)||(i=Object.assign({},e,i)),Qe(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}function Ke(e,t,r){return ae(t)&&(r=t,t=null),ae(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}function Et(e,t,r){let n=Ke(e,t,r),i={lang:"en",date:new Date(n.str)},u=Xe(this,i,{});X.default.locale(u.lang||u.language)}var qt=(e,t,r)=>{let n=Ke(e,t,r);if(n.str==null&&n.pattern==null)return X.default.locale("en"),(0,X.default)().format("MMMM DD, YYYY");Et(n.str,n.pattern,n.options);let i=(0,X.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(X.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},It=(e,t,r)=>{let n=Ke(e,t);Et(n.str,n.pattern);let i=X.default.duration(n.str,n.pattern);return r&&!ae(r)?i.format(r):i.humanize()};var gn=F(Kt()),vn=F(ke()),$n=F(cr()),bn=F(dr()),wn=F(mr()),On=F(Mr()),xn=F(Ir()),Sn=F(Fr()),jn=F(yn()),Wi={math:gn.default,array:vn.default,number:$n.default,url:bn.default,string:wn.default,comparison:On.default,object:xn.default,regex:Sn.default,uuid:jn.default},_i=["sortBy"],Fi={date:qt,duration:It},ne;function Nn(){if(ne)return ne;ne={};for(let e of Object.values(Wi))for(let[t,r]of Object.entries(e))ne[t]=(...n)=>r(...n,{});ne={...ne,...Fi};for(let e of _i)delete ne[e];return Object.freeze(ne),ne}var Hi={...Nn(),stripProtocol:helpersStripProtocol};return gt(Bi);})(); /*! Bundled license information: is-buffer/index.js: From 27308340acd38c4949d22f508b0148806a67816e Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Thu, 21 Mar 2024 18:18:46 +0000 Subject: [PATCH 44/49] Bump version to 2.22.11 --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index 57c2148c7d..a5b45c51f2 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.22.10", + "version": "2.22.11", "npmClient": "yarn", "packages": [ "packages/*", From 732c715498470e8557952392d483bf4755b8a6b9 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 22 Mar 2024 12:09:55 +0000 Subject: [PATCH 45/49] Add snippets into context when transforming column values legacy tables --- packages/bbui/src/Table/CellRenderer.svelte | 5 ++++- packages/bbui/src/Table/Table.svelte | 2 ++ .../client/src/components/app/deprecated/table/Table.svelte | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/bbui/src/Table/CellRenderer.svelte b/packages/bbui/src/Table/CellRenderer.svelte index 4ad6e22d7e..6f6e210fe1 100644 --- a/packages/bbui/src/Table/CellRenderer.svelte +++ b/packages/bbui/src/Table/CellRenderer.svelte @@ -12,6 +12,7 @@ export let schema export let value export let customRenderers = [] + export let snippets let renderer const typeMap = { @@ -32,6 +33,8 @@ $: renderer = customRenderer?.component ?? typeMap[type] ?? StringRenderer $: cellValue = getCellValue(value, schema.template) + $: console.log(snippets) + const getType = schema => { // Use a string renderer for dates if we use a custom template if (schema?.type === "datetime" && schema?.template) { @@ -44,7 +47,7 @@ if (!template) { return value } - return processStringSync(template, { value }) + return processStringSync(template, { value, snippets }) } diff --git a/packages/bbui/src/Table/Table.svelte b/packages/bbui/src/Table/Table.svelte index 33b9bd9a7e..868f7b3a0b 100644 --- a/packages/bbui/src/Table/Table.svelte +++ b/packages/bbui/src/Table/Table.svelte @@ -42,6 +42,7 @@ export let customPlaceholder = false export let showHeaderBorder = true export let placeholderText = "No rows found" + export let snippets = [] const dispatch = createEventDispatcher() @@ -425,6 +426,7 @@ Date: Fri, 22 Mar 2024 12:10:22 +0000 Subject: [PATCH 46/49] Fix code mirror autocomplete showing NO NAME for certain bindings --- packages/builder/src/components/common/CodeEditor/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/builder/src/components/common/CodeEditor/index.js b/packages/builder/src/components/common/CodeEditor/index.js index f66c84adce..a04a140ad6 100644 --- a/packages/builder/src/components/common/CodeEditor/index.js +++ b/packages/builder/src/components/common/CodeEditor/index.js @@ -313,7 +313,7 @@ export const bindingsToCompletions = (bindings, mode) => { ...bindingByCategory[catKey].reduce((acc, binding) => { let displayType = binding.fieldSchema?.type || binding.display?.type acc.push({ - label: binding.display?.name || "NO NAME", + label: binding.display?.name || binding.readableBinding || "NO NAME", info: completion => { return buildBindingInfoNode(completion, binding) }, From 53cd48e8663a12d6d87dfaa26cb6665ec4772ebe Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 22 Mar 2024 12:11:03 +0000 Subject: [PATCH 47/49] Add value for 'value' binding when editing table columns to improve live eval --- .../components/common/bindings/ClientBindingPanel.svelte | 3 ++- .../settings/controls/ColumnEditor/CellDrawer.svelte | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/builder/src/components/common/bindings/ClientBindingPanel.svelte b/packages/builder/src/components/common/bindings/ClientBindingPanel.svelte index cb65d2bbe4..4e5789b563 100644 --- a/packages/builder/src/components/common/bindings/ClientBindingPanel.svelte +++ b/packages/builder/src/components/common/bindings/ClientBindingPanel.svelte @@ -8,6 +8,7 @@ export let allowJS = false export let allowHelpers = true export let autofocusEditor = false + export let context = null $: enrichedBindings = enrichBindings(bindings) @@ -27,7 +28,7 @@ @@ -41,6 +44,9 @@ icon: "TableColumnMerge", }, ]} + context={{ + value: columnValue, + }} /> From a64738fa253a8bcaf7df57267d1e00026740d173 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 22 Mar 2024 12:14:59 +0000 Subject: [PATCH 48/49] Provide live eval context from legacy table components --- .../app/deprecated/table/Table.svelte | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/client/src/components/app/deprecated/table/Table.svelte b/packages/client/src/components/app/deprecated/table/Table.svelte index 71f3cc1712..ac3d88d29c 100644 --- a/packages/client/src/components/app/deprecated/table/Table.svelte +++ b/packages/client/src/components/app/deprecated/table/Table.svelte @@ -17,8 +17,14 @@ const component = getContext("component") const context = getContext("context") - const { styleable, getAction, ActionTypes, rowSelectionStore } = - getContext("sdk") + const { + styleable, + getAction, + ActionTypes, + rowSelectionStore, + generateGoldenSample, + } = getContext("sdk") + const customColumnKey = `custom-${Math.random()}` const customRenderers = [ { @@ -63,6 +69,16 @@ selectedRows, } + // Provide additional data context for live binding eval + export const getAdditionalDataContext = () => { + const goldenRow = generateGoldenSample(data) + return { + eventContext: { + row: goldenRow, + }, + } + } + const getFields = ( schema, customColumns, From 9072142ca948a0922915e53b0429719ead04b5fd Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 22 Mar 2024 12:31:35 +0000 Subject: [PATCH 49/49] Remove log --- packages/bbui/src/Table/CellRenderer.svelte | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/bbui/src/Table/CellRenderer.svelte b/packages/bbui/src/Table/CellRenderer.svelte index 6f6e210fe1..eff1178f6d 100644 --- a/packages/bbui/src/Table/CellRenderer.svelte +++ b/packages/bbui/src/Table/CellRenderer.svelte @@ -33,8 +33,6 @@ $: renderer = customRenderer?.component ?? typeMap[type] ?? StringRenderer $: cellValue = getCellValue(value, schema.template) - $: console.log(snippets) - const getType = schema => { // Use a string renderer for dates if we use a custom template if (schema?.type === "datetime" && schema?.template) {